From 0650f590266b1bcf04412051acf69629e6532535 Mon Sep 17 00:00:00 2001 From: PureCloud Jenkins Date: Thu, 24 Mar 2022 16:44:35 +0000 Subject: [PATCH] 8.1.0 --- README.md | 10 +- build/APIData.json | 188 + build/README.md | 10 +- .../dist/node/purecloud-guest-chat-client.js | 94 +- .../web-amd/purecloud-guest-chat-client.js | 96 +- .../purecloud-guest-chat-client.min.js | 2 +- build/dist/web-cjs/bundle.js | 70 +- .../web-cjs/purecloud-guest-chat-client.js | 5660 +- .../purecloud-guest-chat-client.min.js | 2 +- build/docs/index.md | 10 +- build/docs/releaseNotes.md | 98 +- build/index.d.ts | 31 +- build/node_modules/.bin/flat | 1 + build/node_modules/.bin/he | 1 + build/node_modules/.bin/jade | 1 - build/node_modules/.bin/js-yaml | 1 + build/node_modules/.bin/nanoid | 1 + build/node_modules/.bin/node-which | 1 + build/node_modules/.bin/resolve | 1 + build/node_modules/.bin/semver | 2 +- build/node_modules/.bin/supports-color | 1 - build/node_modules/@colors/colors/LICENSE | 26 + build/node_modules/@colors/colors/README.md | 219 + .../colors/examples/normal-usage.js | 1 + .../colors/examples/safe-string.js | 1 + build/node_modules/@colors/colors/index.d.ts | 136 + .../{ => @colors}/colors/lib/colors.js | 2 +- .../{ => @colors}/colors/lib/custom/trap.js | 0 .../{ => @colors}/colors/lib/custom/zalgo.js | 0 .../colors/lib/extendStringPrototype.js | 0 .../{ => @colors}/colors/lib/index.js | 0 .../{ => @colors}/colors/lib/maps/america.js | 0 .../{ => @colors}/colors/lib/maps/rainbow.js | 0 .../{ => @colors}/colors/lib/maps/random.js | 0 .../{ => @colors}/colors/lib/maps/zebra.js | 0 .../{ => @colors}/colors/lib/styles.js | 0 .../colors/lib/system/has-flag.js | 0 .../colors/lib/system/supports-colors.js | 0 .../node_modules/@colors/colors/package.json | 75 + .../{ => @colors}/colors/safe.d.ts | 0 .../node_modules/{ => @colors}/colors/safe.js | 0 .../colors/themes/generic-logging.js | 0 .../node_modules/@dabh/diagnostics/README.md | 32 +- .../@dabh/diagnostics/example.png | Bin 310926 -> 0 bytes .../@dabh/diagnostics/package.json | 20 +- .../@rollup/plugin-commonjs/CHANGELOG.md | 598 + .../@rollup/plugin-commonjs/LICENSE | 21 + .../@rollup/plugin-commonjs/README.md | 410 + .../@rollup/plugin-commonjs/dist/index.es.js | 1910 + .../plugin-commonjs/dist/index.es.js.map | 1 + .../@rollup/plugin-commonjs/dist/index.js | 1919 + .../@rollup/plugin-commonjs/dist/index.js.map | 1 + .../@rollup/plugin-commonjs/package.json | 115 + .../@rollup/plugin-commonjs/types/index.d.ts | 183 + .../@rollup/plugin-json/CHANGELOG.md | 117 + .../node_modules/@rollup/plugin-json/LICENSE | 21 + .../@rollup/plugin-json/README.md | 101 + .../@rollup/plugin-json/dist/index.es.js | 38 + .../@rollup/plugin-json/dist/index.es.js.map | 1 + .../@rollup/plugin-json/dist/index.js | 40 + .../@rollup/plugin-json/dist/index.js.map | 1 + .../@rollup/plugin-json/package.json | 100 + .../@rollup/plugin-json/types/index.d.ts | 41 + .../@rollup/plugin-node-resolve/CHANGELOG.md | 518 + .../@rollup/plugin-node-resolve/LICENSE | 21 + .../@rollup/plugin-node-resolve/README.md | 229 + .../plugin-node-resolve/dist/cjs/index.js | 1199 + .../plugin-node-resolve/dist/es/index.js | 1184 + .../plugin-node-resolve/dist/es/package.json | 1 + .../@rollup/plugin-node-resolve/package.json | 119 + .../plugin-node-resolve/types/index.d.ts | 98 + .../@rollup/pluginutils/CHANGELOG.md | 315 + .../node_modules/@rollup/pluginutils/LICENSE | 21 + .../@rollup/pluginutils/README.md | 237 + .../@rollup/pluginutils/dist/cjs/index.js | 447 + .../@rollup/pluginutils/dist/es/index.js | 436 + .../@rollup/pluginutils/dist/es/package.json | 1 + .../node_modules/estree-walker/CHANGELOG.md | 79 + .../node_modules/estree-walker/README.md | 48 + .../estree-walker/dist/estree-walker.umd.js | 135 + .../dist/estree-walker.umd.js.map | 1 + .../node_modules/estree-walker/package.json | 63 + .../estree-walker/src/estree-walker.js | 125 + .../node_modules/estree-walker/src/index.ts | 144 + .../estree-walker/types/index.d.ts | 13 + .../@rollup/pluginutils/package.json | 125 + .../@rollup/pluginutils/types/index.d.ts | 86 + .../node_modules/@sinonjs/commons/CHANGES.md | 57 + build/node_modules/@sinonjs/commons/LICENSE | 29 + build/node_modules/@sinonjs/commons/README.md | 16 + .../@sinonjs/commons/lib/called-in-order.js | 57 + .../commons/lib/called-in-order.test.js | 121 + .../@sinonjs/commons/lib/class-name.js | 27 + .../@sinonjs/commons/lib/class-name.test.js | 37 + .../@sinonjs/commons/lib/deprecated.js | 58 + .../@sinonjs/commons/lib/deprecated.test.js | 100 + .../@sinonjs/commons/lib/every.js | 27 + .../@sinonjs/commons/lib/every.test.js | 41 + .../@sinonjs/commons/lib/function-name.js | 29 + .../commons/lib/function-name.test.js | 76 + .../@sinonjs/commons/lib/global.js | 22 + .../@sinonjs/commons/lib/global.test.js | 16 + .../@sinonjs/commons/lib/index.js | 14 + .../@sinonjs/commons/lib/index.test.js | 29 + .../commons/lib/order-by-first-call.js | 36 + .../commons/lib/order-by-first-call.test.js | 52 + .../@sinonjs/commons/lib/prototypes/README.md | 43 + .../@sinonjs/commons/lib/prototypes/array.js | 5 + .../commons/lib/prototypes/copy-prototype.js | 21 + .../commons/lib/prototypes/function.js | 5 + .../@sinonjs/commons/lib/prototypes/index.js | 10 + .../commons/lib/prototypes/index.test.js | 51 + .../@sinonjs/commons/lib/prototypes/map.js | 5 + .../@sinonjs/commons/lib/prototypes/object.js | 5 + .../@sinonjs/commons/lib/prototypes/set.js | 5 + .../@sinonjs/commons/lib/prototypes/string.js | 5 + .../@sinonjs/commons/lib/type-of.js | 13 + .../@sinonjs/commons/lib/type-of.test.js | 51 + .../@sinonjs/commons/lib/value-to-string.js | 17 + .../commons/lib/value-to-string.test.js | 20 + .../@sinonjs/commons/package.json | 96 + .../commons/types/called-in-order.d.ts | 36 + .../@sinonjs/commons/types/class-name.d.ts | 8 + .../@sinonjs/commons/types/deprecated.d.ts | 3 + .../@sinonjs/commons/types/every.d.ts | 2 + .../@sinonjs/commons/types/function-name.d.ts | 2 + .../@sinonjs/commons/types/global.d.ts | 7 + .../@sinonjs/commons/types/index.d.ts | 17 + .../commons/types/order-by-first-call.d.ts | 26 + .../commons/types/prototypes/array.d.ts | 2 + .../types/prototypes/copy-prototype.d.ts | 2 + .../commons/types/prototypes/function.d.ts | 2 + .../commons/types/prototypes/index.d.ts | 7 + .../commons/types/prototypes/map.d.ts | 2 + .../commons/types/prototypes/object.d.ts | 2 + .../commons/types/prototypes/set.d.ts | 2 + .../commons/types/prototypes/string.d.ts | 2 + .../@sinonjs/commons/types/type-of.d.ts | 2 + .../commons/types/value-to-string.d.ts | 8 + .../@sinonjs/fake-timers/CHANGELOG.md | 464 + .../{lolex => @sinonjs/fake-timers}/LICENSE | 0 .../@sinonjs/fake-timers/README.md | 351 + .../@sinonjs/fake-timers/package.json | 99 + .../fake-timers/src/fake-timers-src.js | 1757 + .../{ => @sinonjs}/samsam/LICENSE | 0 build/node_modules/@sinonjs/samsam/README.md | 83 + .../@sinonjs/samsam/docs/index.md | 390 + .../@sinonjs/samsam/lib/array-types.js | 16 + .../@sinonjs/samsam/lib/create-matcher.js | 371 + .../lib/create-matcher/assert-matcher.js | 17 + .../create-matcher/assert-method-exists.js | 19 + .../samsam/lib/create-matcher/assert-type.js | 24 + .../samsam/lib/create-matcher/is-iterable.js | 16 + .../samsam/lib/create-matcher/is-matcher.js | 18 + .../samsam/lib/create-matcher/match-object.js | 55 + .../lib/create-matcher/matcher-prototype.js | 49 + .../samsam/lib/create-matcher/type-map.js | 62 + .../@sinonjs/samsam/lib/create-set.js | 34 + .../samsam/lib/deep-equal-benchmark.js | 74 + .../@sinonjs/samsam/lib/deep-equal.js | 291 + .../@sinonjs/samsam/lib/get-class.js | 18 + .../@sinonjs/samsam/lib/identical.js | 31 + .../@sinonjs/samsam/lib/is-arguments.js | 16 + .../@sinonjs/samsam/lib/is-array-type.js | 20 + .../@sinonjs/samsam/lib/is-date.js | 14 + .../@sinonjs/samsam/lib/is-element.js | 29 + .../@sinonjs/samsam/lib/is-iterable.js | 18 + .../@sinonjs/samsam/lib/is-map.js | 14 + .../@sinonjs/samsam/lib/is-nan.js | 19 + .../@sinonjs/samsam/lib/is-neg-zero.js | 14 + .../@sinonjs/samsam/lib/is-object.js | 31 + .../@sinonjs/samsam/lib/is-set.js | 14 + .../@sinonjs/samsam/lib/is-subset.js | 30 + .../@sinonjs/samsam/lib/iterable-to-string.js | 71 + .../node_modules/@sinonjs/samsam/lib/match.js | 174 + .../@sinonjs/samsam/lib/samsam.js | 26 + .../node_modules/@sinonjs/samsam/package.json | 121 + .../@sinonjs/samsam/types/array-types.d.ts | 2 + .../@sinonjs/samsam/types/create-matcher.d.ts | 40 + .../types/create-matcher/assert-matcher.d.ts | 8 + .../create-matcher/assert-method-exists.d.ts | 12 + .../types/create-matcher/assert-type.d.ts | 12 + .../types/create-matcher/is-iterable.d.ts | 9 + .../types/create-matcher/is-matcher.d.ts | 9 + .../types/create-matcher/match-object.d.ts | 11 + .../create-matcher/matcher-prototype.d.ts | 2 + .../samsam/types/create-matcher/type-map.d.ts | 8 + .../@sinonjs/samsam/types/create-set.d.ts | 13 + .../samsam/types/deep-equal-benchmark.d.ts | 1 + .../@sinonjs/samsam/types/deep-equal.d.ts | 22 + .../@sinonjs/samsam/types/get-class.d.ts | 11 + .../@sinonjs/samsam/types/identical.d.ts | 19 + .../@sinonjs/samsam/types/is-arguments.d.ts | 9 + .../@sinonjs/samsam/types/is-array-type.d.ts | 9 + .../@sinonjs/samsam/types/is-date.d.ts | 9 + .../@sinonjs/samsam/types/is-element.d.ts | 13 + .../@sinonjs/samsam/types/is-iterable.d.ts | 9 + .../@sinonjs/samsam/types/is-map.d.ts | 9 + .../@sinonjs/samsam/types/is-nan.d.ts | 9 + .../@sinonjs/samsam/types/is-neg-zero.d.ts | 9 + .../@sinonjs/samsam/types/is-object.d.ts | 16 + .../@sinonjs/samsam/types/is-set.d.ts | 9 + .../@sinonjs/samsam/types/is-subset.d.ts | 12 + .../samsam/types/iterable-to-string.d.ts | 9 + .../@sinonjs/samsam/types/match.d.ts | 10 + .../@sinonjs/samsam/types/samsam.d.ts | 13 + .../@sinonjs/text-encoding/LICENSE.md | 237 + .../@sinonjs/text-encoding/README.md | 111 + .../@sinonjs/text-encoding/index.js | 9 + .../text-encoding/lib/encoding-indexes.js | 47 + .../@sinonjs/text-encoding/lib/encoding.js | 3313 ++ .../@sinonjs/text-encoding/package.json | 93 + build/node_modules/@types/estree/LICENSE | 21 + build/node_modules/@types/estree/README.md | 16 + build/node_modules/@types/estree/index.d.ts | 548 + build/node_modules/@types/estree/package.json | 52 + build/node_modules/@types/node/LICENSE | 21 + build/node_modules/@types/node/README.md | 16 + build/node_modules/@types/node/assert.d.ts | 912 + .../@types/node/assert/strict.d.ts | 8 + .../node_modules/@types/node/async_hooks.d.ts | 501 + build/node_modules/@types/node/buffer.d.ts | 2232 + .../@types/node/child_process.d.ts | 1366 + build/node_modules/@types/node/cluster.d.ts | 414 + build/node_modules/@types/node/console.d.ts | 412 + build/node_modules/@types/node/constants.d.ts | 18 + build/node_modules/@types/node/crypto.d.ts | 3307 ++ build/node_modules/@types/node/dgram.d.ts | 545 + .../@types/node/diagnostics_channel.d.ts | 134 + build/node_modules/@types/node/dns.d.ts | 659 + .../@types/node/dns/promises.d.ts | 370 + build/node_modules/@types/node/domain.d.ts | 169 + build/node_modules/@types/node/events.d.ts | 651 + build/node_modules/@types/node/fs.d.ts | 3869 ++ .../node_modules/@types/node/fs/promises.d.ts | 1091 + build/node_modules/@types/node/globals.d.ts | 284 + .../@types/node/globals.global.d.ts | 1 + build/node_modules/@types/node/http.d.ts | 1396 + build/node_modules/@types/node/http2.d.ts | 2100 + build/node_modules/@types/node/https.d.ts | 391 + build/node_modules/@types/node/index.d.ts | 129 + build/node_modules/@types/node/inspector.d.ts | 2744 + build/node_modules/@types/node/module.d.ts | 114 + build/node_modules/@types/node/net.d.ts | 784 + build/node_modules/@types/node/os.d.ts | 455 + build/node_modules/@types/node/package.json | 209 + build/node_modules/@types/node/path.d.ts | 180 + .../node_modules/@types/node/perf_hooks.d.ts | 557 + build/node_modules/@types/node/process.d.ts | 1481 + build/node_modules/@types/node/punycode.d.ts | 117 + .../node_modules/@types/node/querystring.d.ts | 131 + build/node_modules/@types/node/readline.d.ts | 650 + build/node_modules/@types/node/repl.d.ts | 424 + build/node_modules/@types/node/stream.d.ts | 1249 + .../@types/node/stream/consumers.d.ts | 24 + .../@types/node/stream/promises.d.ts | 42 + .../node_modules/@types/node/stream/web.d.ts | 330 + .../@types/node/string_decoder.d.ts | 67 + build/node_modules/@types/node/timers.d.ts | 94 + .../@types/node/timers/promises.d.ts | 68 + build/node_modules/@types/node/tls.d.ts | 1020 + .../@types/node/trace_events.d.ts | 161 + build/node_modules/@types/node/tty.d.ts | 204 + build/node_modules/@types/node/url.d.ts | 891 + build/node_modules/@types/node/util.d.ts | 1594 + build/node_modules/@types/node/v8.d.ts | 378 + build/node_modules/@types/node/vm.d.ts | 507 + build/node_modules/@types/node/wasi.d.ts | 158 + .../@types/node/worker_threads.d.ts | 649 + build/node_modules/@types/node/zlib.d.ts | 517 + build/node_modules/@types/resolve/LICENSE | 21 + build/node_modules/@types/resolve/README.md | 16 + build/node_modules/@types/resolve/index.d.ts | 131 + .../node_modules/@types/resolve/package.json | 59 + .../@ungap/promise-all-settled/LICENSE | 15 + .../@ungap/promise-all-settled/README.md | 26 + .../@ungap/promise-all-settled/cjs/index.js | 19 + .../promise-all-settled/cjs/package.json | 1 + .../@ungap/promise-all-settled/esm/index.js | 19 + .../@ungap/promise-all-settled/index.js | 18 + .../@ungap/promise-all-settled/min.js | 1 + .../@ungap/promise-all-settled/package.json | 72 + .../node_modules/xtend/package.json | 2 +- .../abstract-leveldown/package.json | 2 +- build/node_modules/acorn/package.json | 2 +- build/node_modules/ansi-colors/LICENSE | 21 + build/node_modules/ansi-colors/README.md | 315 + build/node_modules/ansi-colors/index.js | 177 + build/node_modules/ansi-colors/package.json | 152 + build/node_modules/ansi-colors/symbols.js | 70 + .../node_modules/ansi-colors/types/index.d.ts | 161 + build/node_modules/ansi-regex/index.d.ts | 37 + build/node_modules/ansi-regex/index.js | 10 + build/node_modules/ansi-regex/license | 9 + build/node_modules/ansi-regex/package.json | 87 + build/node_modules/ansi-regex/readme.md | 78 + build/node_modules/ansi-styles/index.d.ts | 345 + build/node_modules/ansi-styles/index.js | 163 + build/node_modules/ansi-styles/license | 9 + .../node_modules/color-convert/CHANGELOG.md | 54 + .../node_modules/color-convert/LICENSE | 21 + .../node_modules/color-convert/README.md | 68 + .../node_modules/color-convert/conversions.js | 839 + .../node_modules/color-convert/index.js | 81 + .../node_modules/color-convert/package.json | 83 + .../node_modules/color-convert/route.js | 97 + .../node_modules/color-name/LICENSE | 8 + .../node_modules/color-name/README.md | 11 + .../node_modules/color-name/index.js | 152 + .../node_modules/color-name/package.json | 56 + build/node_modules/ansi-styles/package.json | 89 + build/node_modules/ansi-styles/readme.md | 152 + build/node_modules/anymatch/LICENSE | 15 + build/node_modules/anymatch/README.md | 87 + build/node_modules/anymatch/index.d.ts | 19 + build/node_modules/anymatch/index.js | 104 + build/node_modules/anymatch/package.json | 76 + build/node_modules/argparse/CHANGELOG.md | 216 + build/node_modules/argparse/LICENSE | 254 + build/node_modules/argparse/README.md | 84 + build/node_modules/argparse/argparse.js | 3707 ++ build/node_modules/argparse/lib/sub.js | 67 + build/node_modules/argparse/lib/textwrap.js | 440 + build/node_modules/argparse/package.json | 63 + build/node_modules/asap/CHANGES.md | 70 + build/node_modules/asap/LICENSE.md | 21 + build/node_modules/asap/README.md | 237 + build/node_modules/asap/asap.js | 65 + build/node_modules/asap/browser-asap.js | 66 + build/node_modules/asap/browser-raw.js | 223 + build/node_modules/asap/package.json | 87 + build/node_modules/asap/raw.js | 101 + .../asn1.js/node_modules/bn.js/package.json | 2 +- build/node_modules/asn1.js/package.json | 2 +- build/node_modules/async/CHANGELOG.md | 13 + build/node_modules/async/all.js | 83 +- build/node_modules/async/allLimit.js | 6 +- build/node_modules/async/allSeries.js | 6 +- build/node_modules/async/any.js | 84 +- build/node_modules/async/anyLimit.js | 6 +- build/node_modules/async/anySeries.js | 6 +- build/node_modules/async/applyEach.js | 4 +- build/node_modules/async/applyEachSeries.js | 4 +- build/node_modules/async/asyncify.js | 6 +- build/node_modules/async/auto.js | 96 +- build/node_modules/async/autoInject.js | 34 +- build/node_modules/async/cargo.js | 2 +- build/node_modules/async/cargoQueue.js | 2 +- build/node_modules/async/compose.js | 2 +- build/node_modules/async/concat.js | 76 +- build/node_modules/async/concatLimit.js | 6 +- build/node_modules/async/concatSeries.js | 4 +- build/node_modules/async/detect.js | 51 +- build/node_modules/async/detectLimit.js | 6 +- build/node_modules/async/detectSeries.js | 6 +- build/node_modules/async/dir.js | 2 +- build/node_modules/async/dist/async.js | 1547 +- build/node_modules/async/dist/async.min.js | 2 +- build/node_modules/async/dist/async.mjs | 1533 +- build/node_modules/async/doDuring.js | 6 +- build/node_modules/async/doUntil.js | 4 +- build/node_modules/async/doWhilst.js | 6 +- build/node_modules/async/during.js | 6 +- build/node_modules/async/each.js | 97 +- build/node_modules/async/eachLimit.js | 8 +- build/node_modules/async/eachOf.js | 101 +- build/node_modules/async/eachOfLimit.js | 6 +- build/node_modules/async/eachOfSeries.js | 4 +- build/node_modules/async/eachSeries.js | 4 +- build/node_modules/async/ensureAsync.js | 4 +- build/node_modules/async/every.js | 83 +- build/node_modules/async/everyLimit.js | 6 +- build/node_modules/async/everySeries.js | 6 +- build/node_modules/async/filter.js | 58 +- build/node_modules/async/filterLimit.js | 6 +- build/node_modules/async/filterSeries.js | 6 +- build/node_modules/async/find.js | 51 +- build/node_modules/async/findLimit.js | 6 +- build/node_modules/async/findSeries.js | 6 +- build/node_modules/async/flatMap.js | 76 +- build/node_modules/async/flatMapLimit.js | 6 +- build/node_modules/async/flatMapSeries.js | 4 +- build/node_modules/async/foldl.js | 98 +- build/node_modules/async/foldr.js | 4 +- build/node_modules/async/forEach.js | 97 +- build/node_modules/async/forEachLimit.js | 8 +- build/node_modules/async/forEachOf.js | 101 +- build/node_modules/async/forEachOfLimit.js | 6 +- build/node_modules/async/forEachOfSeries.js | 4 +- build/node_modules/async/forEachSeries.js | 4 +- build/node_modules/async/forever.js | 8 +- build/node_modules/async/groupBy.js | 70 +- build/node_modules/async/groupByLimit.js | 6 +- build/node_modules/async/groupBySeries.js | 4 +- build/node_modules/async/inject.js | 98 +- .../node_modules/async/internal/applyEach.js | 4 +- .../async/internal/asyncEachOfLimit.js | 2 +- .../async/internal/consoleFunc.js | 6 +- .../async/internal/createTester.js | 4 +- .../async/internal/eachOfLimit.js | 12 +- build/node_modules/async/internal/filter.js | 4 +- build/node_modules/async/internal/iterator.js | 7 +- build/node_modules/async/internal/map.js | 2 +- build/node_modules/async/internal/parallel.js | 6 +- build/node_modules/async/internal/queue.js | 8 +- build/node_modules/async/internal/reject.js | 4 +- .../async/internal/setImmediate.js | 8 +- .../node_modules/async/internal/wrapAsync.js | 2 +- build/node_modules/async/log.js | 2 +- build/node_modules/async/map.js | 92 +- build/node_modules/async/mapLimit.js | 6 +- build/node_modules/async/mapSeries.js | 6 +- build/node_modules/async/mapValues.js | 114 +- build/node_modules/async/mapValuesLimit.js | 8 +- build/node_modules/async/mapValuesSeries.js | 2 +- build/node_modules/async/memoize.js | 6 +- build/node_modules/async/nextTick.js | 6 +- build/node_modules/async/package.json | 22 +- build/node_modules/async/parallel.js | 103 +- build/node_modules/async/parallelLimit.js | 4 +- build/node_modules/async/priorityQueue.js | 15 +- build/node_modules/async/queue.js | 8 +- build/node_modules/async/race.js | 6 +- build/node_modules/async/reduce.js | 98 +- build/node_modules/async/reduceRight.js | 4 +- build/node_modules/async/reflect.js | 4 +- build/node_modules/async/reflectAll.js | 2 +- build/node_modules/async/reject.js | 54 +- build/node_modules/async/rejectLimit.js | 6 +- build/node_modules/async/rejectSeries.js | 6 +- build/node_modules/async/retry.js | 4 +- build/node_modules/async/retryable.js | 8 +- build/node_modules/async/select.js | 58 +- build/node_modules/async/selectLimit.js | 6 +- build/node_modules/async/selectSeries.js | 6 +- build/node_modules/async/seq.js | 8 +- build/node_modules/async/series.js | 124 +- build/node_modules/async/setImmediate.js | 2 +- build/node_modules/async/some.js | 84 +- build/node_modules/async/someLimit.js | 6 +- build/node_modules/async/someSeries.js | 6 +- build/node_modules/async/sortBy.js | 140 +- build/node_modules/async/timeout.js | 4 +- build/node_modules/async/times.js | 2 +- build/node_modules/async/timesLimit.js | 6 +- build/node_modules/async/timesSeries.js | 2 +- build/node_modules/async/transform.js | 130 +- build/node_modules/async/tryEach.js | 6 +- build/node_modules/async/until.js | 6 +- build/node_modules/async/waterfall.js | 8 +- build/node_modules/async/whilst.js | 6 +- build/node_modules/async/wrapSync.js | 6 +- build/node_modules/asynckit/package.json | 2 +- .../available-typed-arrays/.eslintignore | 1 - .../available-typed-arrays/.eslintrc | 5 - .../.github/FUNDING.yml | 12 - .../available-typed-arrays/CHANGELOG.md | 69 - .../available-typed-arrays/LICENSE | 21 - .../available-typed-arrays/README.md | 52 - .../available-typed-arrays/index.js | 25 - .../available-typed-arrays/package.json | 111 - .../available-typed-arrays/test/index.js | 18 - .../balanced-match/.github/FUNDING.yml | 2 + build/node_modules/balanced-match/LICENSE.md | 21 + build/node_modules/balanced-match/README.md | 97 + build/node_modules/balanced-match/index.js | 62 + .../node_modules/balanced-match/package.json | 76 + .../binary-extensions/binary-extensions.json | 260 + .../binary-extensions.json.d.ts | 3 + .../node_modules/binary-extensions/index.d.ts | 14 + build/node_modules/binary-extensions/index.js | 1 + build/node_modules/binary-extensions/license | 9 + .../binary-extensions/package.json | 70 + .../node_modules/binary-extensions/readme.md | 41 + .../bl/node_modules/isarray/package.json | 2 +- .../node_modules/readable-stream/package.json | 2 +- .../node_modules/string_decoder/package.json | 2 +- build/node_modules/bl/package.json | 4 +- build/node_modules/bn.js/package.json | 2 +- build/node_modules/brace-expansion/LICENSE | 21 + build/node_modules/brace-expansion/README.md | 129 + build/node_modules/brace-expansion/index.js | 201 + .../node_modules/brace-expansion/package.json | 76 + build/node_modules/braces/CHANGELOG.md | 184 + build/node_modules/braces/LICENSE | 21 + build/node_modules/braces/README.md | 593 + build/node_modules/braces/index.js | 170 + build/node_modules/braces/lib/compile.js | 57 + build/node_modules/braces/lib/constants.js | 57 + build/node_modules/braces/lib/expand.js | 113 + build/node_modules/braces/lib/parse.js | 333 + build/node_modules/braces/lib/stringify.js | 32 + build/node_modules/braces/lib/utils.js | 112 + build/node_modules/braces/package.json | 123 + build/node_modules/brorand/package.json | 2 +- build/node_modules/browser-stdout/LICENSE | 5 + build/node_modules/browser-stdout/README.md | 40 + build/node_modules/browser-stdout/index.js | 25 + .../node_modules/browser-stdout/package.json | 46 + .../node_modules/browserify-aes/package.json | 2 +- .../browserify-cipher/package.json | 2 +- .../node_modules/browserify-des/package.json | 2 +- build/node_modules/browserify-fs/package.json | 2 +- .../node_modules/browserify-rsa/package.json | 2 +- .../node_modules/readable-stream/README.md | 106 - .../readable-stream/lib/_stream_duplex.js | 139 - .../lib/_stream_passthrough.js | 39 - .../readable-stream/lib/_stream_readable.js | 1124 - .../readable-stream/lib/_stream_transform.js | 201 - .../readable-stream/lib/_stream_writable.js | 697 - .../lib/internal/streams/destroy.js | 105 - .../node_modules/readable-stream/package.json | 97 - .../readable-stream/readable-browser.js | 9 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/safe-buffer/index.js | 65 - .../node_modules/safe-buffer/package.json | 76 - .../node_modules/browserify-sign/package.json | 8 +- build/node_modules/buffer-es6/package.json | 2 +- build/node_modules/buffer-from/index.js | 3 + build/node_modules/buffer-from/package.json | 12 +- build/node_modules/buffer-xor/package.json | 2 +- .../builtin-modules/builtin-modules.json | 3 + build/node_modules/builtin-modules/index.d.ts | 14 + build/node_modules/builtin-modules/index.js | 9 +- build/node_modules/builtin-modules/license | 2 +- .../node_modules/builtin-modules/package.json | 38 +- build/node_modules/builtin-modules/readme.md | 23 +- .../node_modules/builtin-modules/static.d.ts | 14 + build/node_modules/call-bind/package.json | 13 +- build/node_modules/camelcase/index.d.ts | 103 + build/node_modules/camelcase/index.js | 113 + build/node_modules/camelcase/license | 9 + build/node_modules/camelcase/package.json | 76 + build/node_modules/camelcase/readme.md | 144 + build/node_modules/chalk/index.d.ts | 415 + build/node_modules/chalk/license | 9 + .../node_modules/supports-color/browser.js | 5 + .../node_modules/supports-color/index.js | 135 + .../chalk/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 85 + .../node_modules/supports-color/readme.md | 76 + build/node_modules/chalk/package.json | 102 + build/node_modules/chalk/readme.md | 341 + build/node_modules/chalk/source/index.js | 229 + build/node_modules/chalk/source/templates.js | 134 + build/node_modules/chalk/source/util.js | 39 + build/node_modules/chokidar/LICENSE | 21 + build/node_modules/chokidar/README.md | 308 + build/node_modules/chokidar/index.js | 973 + build/node_modules/chokidar/lib/constants.js | 65 + .../chokidar/lib/fsevents-handler.js | 524 + .../chokidar/lib/nodefs-handler.js | 654 + build/node_modules/chokidar/package.json | 119 + build/node_modules/chokidar/types/index.d.ts | 188 + build/node_modules/cipher-base/package.json | 2 +- build/node_modules/cliui/CHANGELOG.md | 121 + build/node_modules/cliui/LICENSE.txt | 14 + build/node_modules/cliui/README.md | 141 + build/node_modules/cliui/build/index.cjs | 302 + build/node_modules/cliui/build/lib/index.js | 287 + .../cliui/build/lib/string-utils.js | 27 + build/node_modules/cliui/index.mjs | 13 + build/node_modules/cliui/package.json | 118 + build/node_modules/clone/package.json | 2 +- build/node_modules/color-convert/package.json | 12 +- build/node_modules/color-name/package.json | 2 +- build/node_modules/color-string/CHANGELOG.md | 18 - build/node_modules/color-string/README.md | 8 +- build/node_modules/color-string/index.js | 34 +- build/node_modules/color-string/package.json | 20 +- build/node_modules/color/README.md | 9 + build/node_modules/color/index.js | 5 +- build/node_modules/color/package.json | 28 +- build/node_modules/colors/LICENSE | 25 - build/node_modules/colors/README.md | 221 - build/node_modules/colors/index.d.ts | 136 - build/node_modules/colors/package.json | 74 - build/node_modules/colorspace/package.json | 12 +- build/node_modules/colorspace/test.js | 14 - .../node_modules/combined-stream/package.json | 12 +- build/node_modules/commander/Readme.md | 208 - build/node_modules/commander/index.js | 876 - build/node_modules/commander/package.json | 62 - build/node_modules/commondir/LICENSE | 24 + build/node_modules/commondir/example/dir.js | 3 + build/node_modules/commondir/index.js | 29 + build/node_modules/commondir/package.json | 63 + build/node_modules/commondir/readme.markdown | 48 + build/node_modules/commondir/test/dirs.js | 55 + .../component-emitter/package.json | 12 +- .../commander => concat-map}/.travis.yml | 0 .../minimist => concat-map}/LICENSE | 0 build/node_modules/concat-map/README.markdown | 62 + build/node_modules/concat-map/example/map.js | 6 + build/node_modules/concat-map/index.js | 13 + build/node_modules/concat-map/package.json | 88 + build/node_modules/concat-map/test/map.js | 39 + .../node_modules}/readable-stream/.travis.yml | 0 .../readable-stream/CONTRIBUTING.md | 0 .../readable-stream/GOVERNANCE.md | 0 .../node_modules/readable-stream/LICENSE | 0 .../node_modules/readable-stream/README.md | 58 + .../doc/wg-meetings/2015-01-30.md | 0 .../readable-stream/duplex-browser.js | 0 .../node_modules}/readable-stream/duplex.js | 0 .../readable-stream/lib/_stream_duplex.js | 131 + .../lib/_stream_passthrough.js | 47 + .../readable-stream/lib/_stream_readable.js | 1019 + .../readable-stream/lib/_stream_transform.js | 214 + .../readable-stream/lib/_stream_writable.js | 687 + .../lib/internal/streams/BufferList.js | 0 .../lib/internal/streams/destroy.js | 74 + .../lib/internal/streams/stream-browser.js | 0 .../lib/internal/streams/stream.js | 0 .../node_modules/readable-stream/package.json | 81 + .../readable-stream/passthrough.js | 0 .../readable-stream/readable-browser.js | 7 + .../node_modules/readable-stream/readable.js | 19 + .../readable-stream/transform.js | 0 .../readable-stream/writable-browser.js | 0 .../node_modules}/readable-stream/writable.js | 0 .../node_modules/safe-buffer/LICENSE | 0 .../node_modules/safe-buffer/README.md | 0 .../node_modules/safe-buffer/index.d.ts | 0 .../node_modules/safe-buffer/index.js | 62 + .../node_modules/safe-buffer/package.json | 63 + .../node_modules}/string_decoder/.travis.yml | 0 .../node_modules/string_decoder/LICENSE | 48 + .../node_modules/string_decoder/README.md | 47 + .../string_decoder/lib/string_decoder.js | 296 + .../node_modules/string_decoder/package.json | 59 + build/node_modules/concat-stream/package.json | 10 +- build/node_modules/configparser/package.json | 2 +- build/node_modules/cookiejar/cookiejar.js | 2 +- build/node_modules/cookiejar/package.json | 20 +- build/node_modules/core-util-is/float.patch | 604 - build/node_modules/core-util-is/lib/util.js | 2 +- build/node_modules/core-util-is/package.json | 24 +- build/node_modules/core-util-is/test.js | 68 - .../node_modules/bn.js/package.json | 2 +- build/node_modules/create-ecdh/package.json | 2 +- build/node_modules/create-hash/package.json | 2 +- build/node_modules/create-hmac/package.json | 2 +- .../crypto-browserify/package.json | 2 +- build/node_modules/debug/CHANGELOG.md | 395 - build/node_modules/debug/LICENSE | 19 +- build/node_modules/debug/README.md | 46 +- build/node_modules/debug/node.js | 1 - build/node_modules/debug/package.json | 71 +- build/node_modules/debug/src/browser.js | 301 +- build/node_modules/debug/src/common.js | 505 +- build/node_modules/debug/src/index.js | 8 +- build/node_modules/debug/src/node.js | 256 +- build/node_modules/decamelize/index.d.ts | 20 + build/node_modules/decamelize/index.js | 12 + build/node_modules/decamelize/license | 9 + build/node_modules/decamelize/package.json | 72 + build/node_modules/decamelize/readme.md | 51 + build/node_modules/deepmerge/changelog.md | 159 + build/node_modules/deepmerge/dist/cjs.js | 133 + build/node_modules/deepmerge/dist/umd.js | 139 + build/node_modules/deepmerge/index.d.ts | 16 + build/node_modules/deepmerge/index.js | 106 + build/node_modules/deepmerge/license.txt | 21 + build/node_modules/deepmerge/package.json | 71 + build/node_modules/deepmerge/readme.md | 264 + build/node_modules/deepmerge/rollup.config.js | 22 + .../deferred-leveldown/package.json | 2 +- .../define-properties/.editorconfig | 13 - .../node_modules/define-properties/.eslintrc | 12 - .../node_modules/define-properties/.jscs.json | 175 - .../define-properties/.travis.yml | 233 - .../define-properties/CHANGELOG.md | 44 - build/node_modules/define-properties/LICENSE | 21 - .../node_modules/define-properties/README.md | 86 - build/node_modules/define-properties/index.js | 58 - .../node_modules/object-keys/.editorconfig | 13 - .../node_modules/object-keys/.eslintrc | 17 - .../node_modules/object-keys/.travis.yml | 277 - .../node_modules/object-keys/CHANGELOG.md | 232 - .../node_modules/object-keys/LICENSE | 21 - .../node_modules/object-keys/README.md | 76 - .../object-keys/implementation.js | 122 - .../node_modules/object-keys/index.js | 32 - .../node_modules/object-keys/isArguments.js | 17 - .../node_modules/object-keys/package.json | 117 - .../node_modules/object-keys/test/index.js | 5 - .../define-properties/package.json | 98 - .../define-properties/test/index.js | 125 - .../node_modules/delayed-stream/package.json | 2 +- build/node_modules/des.js/package.json | 2 +- build/node_modules/dezalgo/.travis.yml | 7 + .../node_modules/{sigmund => dezalgo}/LICENSE | 0 build/node_modules/dezalgo/README.md | 29 + build/node_modules/dezalgo/dezalgo.js | 22 + build/node_modules/dezalgo/package.json | 71 + build/node_modules/dezalgo/test/basic.js | 29 + build/node_modules/diff/CONTRIBUTING.md | 39 + build/node_modules/diff/LICENSE | 31 + build/node_modules/diff/README.md | 173 +- build/node_modules/diff/diff.js | 619 - build/node_modules/diff/dist/diff.js | 1582 + build/node_modules/diff/lib/convert/dmp.js | 32 + build/node_modules/diff/lib/convert/xml.js | 42 + build/node_modules/diff/lib/diff/array.js | 45 + build/node_modules/diff/lib/diff/base.js | 304 + build/node_modules/diff/lib/diff/character.js | 37 + build/node_modules/diff/lib/diff/css.js | 41 + build/node_modules/diff/lib/diff/json.js | 163 + build/node_modules/diff/lib/diff/line.js | 89 + build/node_modules/diff/lib/diff/sentence.js | 41 + build/node_modules/diff/lib/diff/word.js | 108 + build/node_modules/diff/lib/index.es6.js | 1553 + build/node_modules/diff/lib/index.js | 216 + build/node_modules/diff/lib/index.mjs | 1553 + build/node_modules/diff/lib/patch/apply.js | 238 + build/node_modules/diff/lib/patch/create.js | 267 + build/node_modules/diff/lib/patch/merge.js | 613 + build/node_modules/diff/lib/patch/parse.js | 167 + build/node_modules/diff/lib/util/array.js | 32 + .../diff/lib/util/distance-iterator.js | 57 + build/node_modules/diff/lib/util/params.js | 24 + build/node_modules/diff/package.json | 97 +- build/node_modules/diff/release-notes.md | 303 + build/node_modules/diff/runtime.js | 3 + .../node_modules/bn.js/package.json | 2 +- .../node_modules/diffie-hellman/package.json | 2 +- .../elliptic/node_modules/bn.js/package.json | 2 +- build/node_modules/elliptic/package.json | 2 +- .../node_modules/emoji-regex/LICENSE-MIT.txt | 20 + build/node_modules/emoji-regex/README.md | 73 + .../node_modules/emoji-regex/es2015/index.js | 6 + build/node_modules/emoji-regex/es2015/text.js | 6 + build/node_modules/emoji-regex/index.d.ts | 23 + build/node_modules/emoji-regex/index.js | 6 + build/node_modules/emoji-regex/package.json | 77 + build/node_modules/emoji-regex/text.js | 6 + build/node_modules/enabled/package.json | 2 +- build/node_modules/errno/package.json | 2 +- build/node_modules/es-abstract/.editorconfig | 13 - build/node_modules/es-abstract/.eslintignore | 1 - build/node_modules/es-abstract/.eslintrc | 65 - build/node_modules/es-abstract/.gitattributes | 625 - build/node_modules/es-abstract/.nycrc | 10 - .../2015/AbstractEqualityComparison.js | 37 - .../2015/AbstractRelationalComparison.js | 63 - .../es-abstract/2015/AdvanceStringIndex.js | 47 - .../es-abstract/2015/ArrayCreate.js | 53 - .../es-abstract/2015/ArraySetLength.js | 85 - .../es-abstract/2015/ArraySpeciesCreate.js | 46 - build/node_modules/es-abstract/2015/Call.js | 20 - .../2015/CanonicalNumericIndexString.js | 22 - .../2015/CompletePropertyDescriptor.js | 39 - .../es-abstract/2015/CreateDataProperty.js | 45 - .../2015/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2015/CreateHTML.js | 30 - .../2015/CreateIterResultObject.js | 19 - .../2015/CreateListFromArrayLike.js | 43 - .../es-abstract/2015/CreateMethodProperty.js | 40 - .../es-abstract/2015/DateFromTime.js | 54 - build/node_modules/es-abstract/2015/Day.js | 11 - .../es-abstract/2015/DayFromYear.js | 10 - .../es-abstract/2015/DayWithinYear.js | 11 - .../es-abstract/2015/DaysInYear.js | 18 - .../es-abstract/2015/DefinePropertyOrThrow.js | 50 - .../es-abstract/2015/DeletePropertyOrThrow.js | 27 - .../es-abstract/2015/EnumerableOwnNames.js | 19 - .../2015/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2015/Get.js | 30 - .../es-abstract/2015/GetIterator.js | 35 - .../es-abstract/2015/GetMethod.js | 42 - .../es-abstract/2015/GetOwnPropertyKeys.js | 31 - .../2015/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2015/GetSubstitution.js | 104 - build/node_modules/es-abstract/2015/GetV.js | 29 - .../es-abstract/2015/HasOwnProperty.js | 22 - .../es-abstract/2015/HasProperty.js | 20 - .../es-abstract/2015/HourFromTime.js | 14 - .../es-abstract/2015/InLeapYear.js | 21 - .../es-abstract/2015/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2015/Invoke.js | 24 - .../es-abstract/2015/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2015/IsArray.js | 14 - .../es-abstract/2015/IsCallable.js | 5 - .../es-abstract/2015/IsConcatSpreadable.js | 25 - .../es-abstract/2015/IsConstructor.js | 40 - .../es-abstract/2015/IsDataDescriptor.js | 23 - .../es-abstract/2015/IsExtensible.js | 20 - .../es-abstract/2015/IsGenericDescriptor.js | 23 - .../es-abstract/2015/IsInteger.js | 17 - .../es-abstract/2015/IsPromise.js | 24 - .../es-abstract/2015/IsPropertyDescriptor.js | 19 - .../es-abstract/2015/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2015/IsRegExp.js | 24 - .../es-abstract/2015/IteratorClose.js | 50 - .../es-abstract/2015/IteratorComplete.js | 18 - .../es-abstract/2015/IteratorNext.js | 18 - .../es-abstract/2015/IteratorStep.js | 13 - .../es-abstract/2015/IteratorValue.js | 18 - .../node_modules/es-abstract/2015/MakeDate.js | 13 - .../node_modules/es-abstract/2015/MakeDay.js | 33 - .../node_modules/es-abstract/2015/MakeTime.js | 23 - .../es-abstract/2015/MinFromTime.js | 14 - .../es-abstract/2015/MonthFromTime.js | 47 - .../es-abstract/2015/ObjectCreate.js | 37 - .../2015/OrdinaryCreateFromConstructor.js | 20 - .../2015/OrdinaryDefineOwnProperty.js | 61 - .../2015/OrdinaryGetOwnProperty.js | 44 - .../es-abstract/2015/OrdinaryHasInstance.js | 25 - .../es-abstract/2015/OrdinaryHasProperty.js | 20 - .../es-abstract/2015/QuoteJSONString.js | 52 - .../es-abstract/2015/RegExpCreate.js | 21 - .../es-abstract/2015/RegExpExec.js | 32 - .../2015/RequireObjectCoercible.js | 3 - .../es-abstract/2015/SameValue.js | 13 - .../es-abstract/2015/SameValueZero.js | 9 - .../es-abstract/2015/SecFromTime.js | 14 - build/node_modules/es-abstract/2015/Set.js | 47 - .../es-abstract/2015/SetFunctionName.js | 44 - .../es-abstract/2015/SetIntegrityLevel.js | 57 - .../es-abstract/2015/SpeciesConstructor.js | 32 - .../es-abstract/2015/SplitMatch.js | 38 - .../2015/StrictEqualityComparison.js | 17 - .../es-abstract/2015/StringCreate.js | 40 - .../2015/StringGetIndexProperty.js | 52 - .../2015/SymbolDescriptiveString.js | 20 - .../es-abstract/2015/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2015/TimeClip.js | 21 - .../es-abstract/2015/TimeFromYear.js | 11 - .../es-abstract/2015/TimeWithinDay.js | 12 - .../es-abstract/2015/ToBoolean.js | 5 - .../es-abstract/2015/ToDateString.js | 22 - .../node_modules/es-abstract/2015/ToInt16.js | 10 - .../node_modules/es-abstract/2015/ToInt32.js | 9 - build/node_modules/es-abstract/2015/ToInt8.js | 10 - .../es-abstract/2015/ToInteger.js | 12 - .../node_modules/es-abstract/2015/ToLength.js | 12 - .../node_modules/es-abstract/2015/ToNumber.js | 59 - .../node_modules/es-abstract/2015/ToObject.js | 14 - .../es-abstract/2015/ToPrimitive.js | 12 - .../es-abstract/2015/ToPropertyDescriptor.js | 52 - .../es-abstract/2015/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2015/ToString.js | 15 - .../node_modules/es-abstract/2015/ToUint16.js | 19 - .../node_modules/es-abstract/2015/ToUint32.js | 9 - .../node_modules/es-abstract/2015/ToUint8.js | 20 - .../es-abstract/2015/ToUint8Clamp.js | 19 - build/node_modules/es-abstract/2015/Type.js | 12 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2015/WeekDay.js | 10 - .../es-abstract/2015/YearFromTime.js | 16 - build/node_modules/es-abstract/2015/abs.js | 11 - build/node_modules/es-abstract/2015/floor.js | 11 - build/node_modules/es-abstract/2015/modulo.js | 9 - .../es-abstract/2015/msFromTime.js | 11 - .../es-abstract/2015/thisBooleanValue.js | 15 - .../es-abstract/2015/thisNumberValue.js | 18 - .../es-abstract/2015/thisStringValue.js | 15 - .../es-abstract/2015/thisTimeValue.js | 9 - .../2016/AbstractEqualityComparison.js | 37 - .../2016/AbstractRelationalComparison.js | 63 - .../es-abstract/2016/AdvanceStringIndex.js | 47 - .../es-abstract/2016/ArrayCreate.js | 53 - .../es-abstract/2016/ArraySetLength.js | 85 - .../es-abstract/2016/ArraySpeciesCreate.js | 46 - build/node_modules/es-abstract/2016/Call.js | 20 - .../2016/CanonicalNumericIndexString.js | 22 - .../2016/CompletePropertyDescriptor.js | 39 - .../es-abstract/2016/CreateDataProperty.js | 45 - .../2016/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2016/CreateHTML.js | 30 - .../2016/CreateIterResultObject.js | 19 - .../2016/CreateListFromArrayLike.js | 43 - .../es-abstract/2016/CreateMethodProperty.js | 40 - .../es-abstract/2016/DateFromTime.js | 54 - build/node_modules/es-abstract/2016/Day.js | 11 - .../es-abstract/2016/DayFromYear.js | 10 - .../es-abstract/2016/DayWithinYear.js | 11 - .../es-abstract/2016/DaysInYear.js | 18 - .../es-abstract/2016/DefinePropertyOrThrow.js | 50 - .../es-abstract/2016/DeletePropertyOrThrow.js | 27 - .../es-abstract/2016/EnumerableOwnNames.js | 19 - .../2016/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2016/Get.js | 30 - .../es-abstract/2016/GetIterator.js | 35 - .../es-abstract/2016/GetMethod.js | 42 - .../es-abstract/2016/GetOwnPropertyKeys.js | 31 - .../2016/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2016/GetSubstitution.js | 104 - build/node_modules/es-abstract/2016/GetV.js | 29 - .../es-abstract/2016/HasOwnProperty.js | 22 - .../es-abstract/2016/HasProperty.js | 20 - .../es-abstract/2016/HourFromTime.js | 14 - .../es-abstract/2016/InLeapYear.js | 21 - .../es-abstract/2016/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2016/Invoke.js | 24 - .../es-abstract/2016/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2016/IsArray.js | 14 - .../es-abstract/2016/IsCallable.js | 5 - .../es-abstract/2016/IsConcatSpreadable.js | 25 - .../es-abstract/2016/IsConstructor.js | 40 - .../es-abstract/2016/IsDataDescriptor.js | 23 - .../es-abstract/2016/IsExtensible.js | 20 - .../es-abstract/2016/IsGenericDescriptor.js | 23 - .../es-abstract/2016/IsInteger.js | 17 - .../es-abstract/2016/IsPromise.js | 24 - .../es-abstract/2016/IsPropertyDescriptor.js | 19 - .../es-abstract/2016/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2016/IsRegExp.js | 24 - .../es-abstract/2016/IterableToArrayLike.js | 56 - .../es-abstract/2016/IteratorClose.js | 50 - .../es-abstract/2016/IteratorComplete.js | 18 - .../es-abstract/2016/IteratorNext.js | 18 - .../es-abstract/2016/IteratorStep.js | 13 - .../es-abstract/2016/IteratorValue.js | 18 - .../node_modules/es-abstract/2016/MakeDate.js | 13 - .../node_modules/es-abstract/2016/MakeDay.js | 33 - .../node_modules/es-abstract/2016/MakeTime.js | 23 - .../es-abstract/2016/MinFromTime.js | 14 - .../es-abstract/2016/MonthFromTime.js | 47 - .../es-abstract/2016/ObjectCreate.js | 37 - .../2016/OrdinaryCreateFromConstructor.js | 20 - .../2016/OrdinaryDefineOwnProperty.js | 61 - .../2016/OrdinaryGetOwnProperty.js | 44 - .../2016/OrdinaryGetPrototypeOf.js | 21 - .../es-abstract/2016/OrdinaryHasInstance.js | 25 - .../es-abstract/2016/OrdinaryHasProperty.js | 20 - .../2016/OrdinarySetPrototypeOf.js | 53 - .../es-abstract/2016/QuoteJSONString.js | 52 - .../es-abstract/2016/RegExpCreate.js | 21 - .../es-abstract/2016/RegExpExec.js | 32 - .../2016/RequireObjectCoercible.js | 3 - .../es-abstract/2016/SameValue.js | 13 - .../es-abstract/2016/SameValueNonNumber.js | 16 - .../es-abstract/2016/SameValueZero.js | 9 - .../es-abstract/2016/SecFromTime.js | 14 - build/node_modules/es-abstract/2016/Set.js | 47 - .../es-abstract/2016/SetFunctionName.js | 44 - .../es-abstract/2016/SetIntegrityLevel.js | 57 - .../es-abstract/2016/SpeciesConstructor.js | 32 - .../es-abstract/2016/SplitMatch.js | 38 - .../2016/StrictEqualityComparison.js | 17 - .../es-abstract/2016/StringCreate.js | 40 - .../2016/SymbolDescriptiveString.js | 20 - .../es-abstract/2016/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2016/TimeClip.js | 21 - .../es-abstract/2016/TimeFromYear.js | 11 - .../es-abstract/2016/TimeWithinDay.js | 12 - .../es-abstract/2016/ToBoolean.js | 5 - .../es-abstract/2016/ToDateString.js | 22 - .../node_modules/es-abstract/2016/ToInt16.js | 10 - .../node_modules/es-abstract/2016/ToInt32.js | 9 - build/node_modules/es-abstract/2016/ToInt8.js | 10 - .../es-abstract/2016/ToInteger.js | 12 - .../node_modules/es-abstract/2016/ToLength.js | 12 - .../node_modules/es-abstract/2016/ToNumber.js | 59 - .../node_modules/es-abstract/2016/ToObject.js | 14 - .../es-abstract/2016/ToPrimitive.js | 12 - .../es-abstract/2016/ToPropertyDescriptor.js | 52 - .../es-abstract/2016/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2016/ToString.js | 15 - .../node_modules/es-abstract/2016/ToUint16.js | 19 - .../node_modules/es-abstract/2016/ToUint32.js | 9 - .../node_modules/es-abstract/2016/ToUint8.js | 20 - .../es-abstract/2016/ToUint8Clamp.js | 19 - build/node_modules/es-abstract/2016/Type.js | 12 - .../es-abstract/2016/UTF16Decode.js | 21 - .../es-abstract/2016/UTF16Encoding.js | 25 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2016/WeekDay.js | 10 - .../es-abstract/2016/YearFromTime.js | 16 - build/node_modules/es-abstract/2016/abs.js | 11 - build/node_modules/es-abstract/2016/floor.js | 11 - build/node_modules/es-abstract/2016/modulo.js | 9 - .../es-abstract/2016/msFromTime.js | 11 - .../es-abstract/2016/thisBooleanValue.js | 15 - .../es-abstract/2016/thisNumberValue.js | 18 - .../es-abstract/2016/thisStringValue.js | 15 - .../es-abstract/2016/thisTimeValue.js | 9 - .../2017/AbstractEqualityComparison.js | 37 - .../2017/AbstractRelationalComparison.js | 63 - .../es-abstract/2017/AdvanceStringIndex.js | 47 - .../es-abstract/2017/ArrayCreate.js | 53 - .../es-abstract/2017/ArraySetLength.js | 85 - .../es-abstract/2017/ArraySpeciesCreate.js | 46 - build/node_modules/es-abstract/2017/Call.js | 20 - .../2017/CanonicalNumericIndexString.js | 22 - .../2017/CompletePropertyDescriptor.js | 39 - .../es-abstract/2017/CreateDataProperty.js | 45 - .../2017/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2017/CreateHTML.js | 30 - .../2017/CreateIterResultObject.js | 19 - .../2017/CreateListFromArrayLike.js | 43 - .../es-abstract/2017/CreateMethodProperty.js | 40 - .../es-abstract/2017/DateFromTime.js | 54 - build/node_modules/es-abstract/2017/Day.js | 11 - .../es-abstract/2017/DayFromYear.js | 10 - .../es-abstract/2017/DayWithinYear.js | 11 - .../es-abstract/2017/DaysInYear.js | 18 - .../es-abstract/2017/DefinePropertyOrThrow.js | 50 - .../es-abstract/2017/DeletePropertyOrThrow.js | 27 - .../2017/EnumerableOwnProperties.js | 43 - .../2017/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2017/Get.js | 30 - .../es-abstract/2017/GetIterator.js | 35 - .../es-abstract/2017/GetMethod.js | 42 - .../es-abstract/2017/GetOwnPropertyKeys.js | 31 - .../2017/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2017/GetSubstitution.js | 104 - build/node_modules/es-abstract/2017/GetV.js | 29 - .../es-abstract/2017/HasOwnProperty.js | 22 - .../es-abstract/2017/HasProperty.js | 20 - .../es-abstract/2017/HourFromTime.js | 14 - .../es-abstract/2017/InLeapYear.js | 21 - .../es-abstract/2017/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2017/Invoke.js | 24 - .../es-abstract/2017/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2017/IsArray.js | 14 - .../es-abstract/2017/IsCallable.js | 5 - .../es-abstract/2017/IsConcatSpreadable.js | 25 - .../es-abstract/2017/IsConstructor.js | 40 - .../es-abstract/2017/IsDataDescriptor.js | 23 - .../es-abstract/2017/IsExtensible.js | 20 - .../es-abstract/2017/IsGenericDescriptor.js | 23 - .../es-abstract/2017/IsInteger.js | 17 - .../es-abstract/2017/IsPromise.js | 24 - .../es-abstract/2017/IsPropertyDescriptor.js | 19 - .../es-abstract/2017/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2017/IsRegExp.js | 24 - .../es-abstract/2017/IterableToList.js | 24 - .../es-abstract/2017/IteratorClose.js | 50 - .../es-abstract/2017/IteratorComplete.js | 18 - .../es-abstract/2017/IteratorNext.js | 18 - .../es-abstract/2017/IteratorStep.js | 13 - .../es-abstract/2017/IteratorValue.js | 18 - .../node_modules/es-abstract/2017/MakeDate.js | 13 - .../node_modules/es-abstract/2017/MakeDay.js | 33 - .../node_modules/es-abstract/2017/MakeTime.js | 23 - .../es-abstract/2017/MinFromTime.js | 14 - .../es-abstract/2017/MonthFromTime.js | 47 - .../es-abstract/2017/ObjectCreate.js | 37 - .../2017/OrdinaryCreateFromConstructor.js | 20 - .../2017/OrdinaryDefineOwnProperty.js | 61 - .../2017/OrdinaryGetOwnProperty.js | 44 - .../2017/OrdinaryGetPrototypeOf.js | 21 - .../es-abstract/2017/OrdinaryHasInstance.js | 25 - .../es-abstract/2017/OrdinaryHasProperty.js | 20 - .../2017/OrdinarySetPrototypeOf.js | 53 - .../es-abstract/2017/QuoteJSONString.js | 52 - .../es-abstract/2017/RegExpCreate.js | 21 - .../es-abstract/2017/RegExpExec.js | 32 - .../2017/RequireObjectCoercible.js | 3 - .../es-abstract/2017/SameValue.js | 13 - .../es-abstract/2017/SameValueNonNumber.js | 16 - .../es-abstract/2017/SameValueZero.js | 9 - .../es-abstract/2017/SecFromTime.js | 14 - build/node_modules/es-abstract/2017/Set.js | 47 - .../es-abstract/2017/SetFunctionName.js | 44 - .../es-abstract/2017/SetIntegrityLevel.js | 57 - .../es-abstract/2017/SpeciesConstructor.js | 32 - .../es-abstract/2017/SplitMatch.js | 38 - .../2017/StrictEqualityComparison.js | 17 - .../es-abstract/2017/StringCreate.js | 40 - .../es-abstract/2017/StringGetOwnProperty.js | 48 - .../2017/SymbolDescriptiveString.js | 20 - .../es-abstract/2017/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2017/TimeClip.js | 21 - .../es-abstract/2017/TimeFromYear.js | 11 - .../es-abstract/2017/TimeWithinDay.js | 12 - .../es-abstract/2017/ToBoolean.js | 5 - .../es-abstract/2017/ToDateString.js | 22 - .../node_modules/es-abstract/2017/ToIndex.js | 26 - .../node_modules/es-abstract/2017/ToInt16.js | 10 - .../node_modules/es-abstract/2017/ToInt32.js | 9 - build/node_modules/es-abstract/2017/ToInt8.js | 10 - .../es-abstract/2017/ToInteger.js | 12 - .../node_modules/es-abstract/2017/ToLength.js | 12 - .../node_modules/es-abstract/2017/ToNumber.js | 59 - .../node_modules/es-abstract/2017/ToObject.js | 14 - .../es-abstract/2017/ToPrimitive.js | 12 - .../es-abstract/2017/ToPropertyDescriptor.js | 52 - .../es-abstract/2017/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2017/ToString.js | 15 - .../node_modules/es-abstract/2017/ToUint16.js | 19 - .../node_modules/es-abstract/2017/ToUint32.js | 9 - .../node_modules/es-abstract/2017/ToUint8.js | 20 - .../es-abstract/2017/ToUint8Clamp.js | 19 - build/node_modules/es-abstract/2017/Type.js | 12 - .../es-abstract/2017/UTF16Decode.js | 21 - .../es-abstract/2017/UTF16Encoding.js | 25 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2017/WeekDay.js | 10 - .../es-abstract/2017/YearFromTime.js | 16 - build/node_modules/es-abstract/2017/abs.js | 11 - build/node_modules/es-abstract/2017/floor.js | 11 - build/node_modules/es-abstract/2017/modulo.js | 9 - .../es-abstract/2017/msFromTime.js | 11 - .../es-abstract/2017/thisBooleanValue.js | 15 - .../es-abstract/2017/thisNumberValue.js | 18 - .../es-abstract/2017/thisStringValue.js | 15 - .../es-abstract/2017/thisTimeValue.js | 9 - .../2018/AbstractEqualityComparison.js | 37 - .../2018/AbstractRelationalComparison.js | 63 - .../es-abstract/2018/AdvanceStringIndex.js | 47 - .../es-abstract/2018/ArrayCreate.js | 53 - .../es-abstract/2018/ArraySetLength.js | 85 - .../es-abstract/2018/ArraySpeciesCreate.js | 46 - build/node_modules/es-abstract/2018/Call.js | 20 - .../2018/CanonicalNumericIndexString.js | 22 - .../2018/CompletePropertyDescriptor.js | 39 - .../es-abstract/2018/CopyDataProperties.js | 68 - .../es-abstract/2018/CreateDataProperty.js | 45 - .../2018/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2018/CreateHTML.js | 30 - .../2018/CreateIterResultObject.js | 19 - .../2018/CreateListFromArrayLike.js | 43 - .../es-abstract/2018/CreateMethodProperty.js | 40 - .../es-abstract/2018/DateFromTime.js | 54 - .../es-abstract/2018/DateString.js | 30 - build/node_modules/es-abstract/2018/Day.js | 11 - .../es-abstract/2018/DayFromYear.js | 10 - .../es-abstract/2018/DayWithinYear.js | 11 - .../es-abstract/2018/DaysInYear.js | 18 - .../es-abstract/2018/DefinePropertyOrThrow.js | 50 - .../es-abstract/2018/DeletePropertyOrThrow.js | 27 - .../2018/EnumerableOwnPropertyNames.js | 43 - .../2018/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2018/Get.js | 30 - .../es-abstract/2018/GetIterator.js | 35 - .../es-abstract/2018/GetMethod.js | 42 - .../es-abstract/2018/GetOwnPropertyKeys.js | 31 - .../2018/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2018/GetSubstitution.js | 128 - build/node_modules/es-abstract/2018/GetV.js | 29 - .../es-abstract/2018/HasOwnProperty.js | 22 - .../es-abstract/2018/HasProperty.js | 20 - .../es-abstract/2018/HourFromTime.js | 14 - .../es-abstract/2018/InLeapYear.js | 21 - .../es-abstract/2018/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2018/Invoke.js | 24 - .../es-abstract/2018/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2018/IsArray.js | 14 - .../es-abstract/2018/IsCallable.js | 5 - .../es-abstract/2018/IsConcatSpreadable.js | 25 - .../es-abstract/2018/IsConstructor.js | 40 - .../es-abstract/2018/IsDataDescriptor.js | 23 - .../es-abstract/2018/IsExtensible.js | 20 - .../es-abstract/2018/IsGenericDescriptor.js | 23 - .../es-abstract/2018/IsInteger.js | 17 - .../es-abstract/2018/IsPromise.js | 24 - .../es-abstract/2018/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2018/IsRegExp.js | 24 - .../es-abstract/2018/IsStringPrefix.js | 47 - .../es-abstract/2018/IterableToList.js | 24 - .../es-abstract/2018/IteratorClose.js | 50 - .../es-abstract/2018/IteratorComplete.js | 18 - .../es-abstract/2018/IteratorNext.js | 18 - .../es-abstract/2018/IteratorStep.js | 13 - .../es-abstract/2018/IteratorValue.js | 18 - .../node_modules/es-abstract/2018/MakeDate.js | 13 - .../node_modules/es-abstract/2018/MakeDay.js | 33 - .../node_modules/es-abstract/2018/MakeTime.js | 23 - .../es-abstract/2018/MinFromTime.js | 14 - .../es-abstract/2018/MonthFromTime.js | 47 - .../es-abstract/2018/NumberToString.js | 19 - .../es-abstract/2018/ObjectCreate.js | 37 - .../2018/OrdinaryCreateFromConstructor.js | 20 - .../2018/OrdinaryDefineOwnProperty.js | 61 - .../2018/OrdinaryGetOwnProperty.js | 44 - .../2018/OrdinaryGetPrototypeOf.js | 21 - .../es-abstract/2018/OrdinaryHasInstance.js | 25 - .../es-abstract/2018/OrdinaryHasProperty.js | 20 - .../2018/OrdinarySetPrototypeOf.js | 53 - .../es-abstract/2018/PromiseResolve.js | 17 - .../es-abstract/2018/QuoteJSONString.js | 48 - .../es-abstract/2018/RegExpCreate.js | 21 - .../es-abstract/2018/RegExpExec.js | 32 - .../2018/RequireObjectCoercible.js | 3 - .../es-abstract/2018/SameValue.js | 13 - .../es-abstract/2018/SameValueNonNumber.js | 16 - .../es-abstract/2018/SameValueZero.js | 9 - .../es-abstract/2018/SecFromTime.js | 14 - build/node_modules/es-abstract/2018/Set.js | 47 - .../es-abstract/2018/SetFunctionLength.js | 31 - .../es-abstract/2018/SetFunctionName.js | 44 - .../es-abstract/2018/SetIntegrityLevel.js | 57 - .../es-abstract/2018/SpeciesConstructor.js | 32 - .../es-abstract/2018/SplitMatch.js | 38 - .../2018/StrictEqualityComparison.js | 17 - .../es-abstract/2018/StringCreate.js | 40 - .../es-abstract/2018/StringGetOwnProperty.js | 48 - .../2018/SymbolDescriptiveString.js | 20 - .../es-abstract/2018/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2018/TimeClip.js | 21 - .../es-abstract/2018/TimeFromYear.js | 11 - .../es-abstract/2018/TimeString.js | 25 - .../es-abstract/2018/TimeWithinDay.js | 12 - .../es-abstract/2018/ToBoolean.js | 5 - .../es-abstract/2018/ToDateString.js | 22 - .../node_modules/es-abstract/2018/ToIndex.js | 26 - .../node_modules/es-abstract/2018/ToInt16.js | 10 - .../node_modules/es-abstract/2018/ToInt32.js | 9 - build/node_modules/es-abstract/2018/ToInt8.js | 10 - .../es-abstract/2018/ToInteger.js | 12 - .../node_modules/es-abstract/2018/ToLength.js | 12 - .../node_modules/es-abstract/2018/ToNumber.js | 59 - .../node_modules/es-abstract/2018/ToObject.js | 14 - .../es-abstract/2018/ToPrimitive.js | 12 - .../es-abstract/2018/ToPropertyDescriptor.js | 52 - .../es-abstract/2018/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2018/ToString.js | 15 - .../node_modules/es-abstract/2018/ToUint16.js | 19 - .../node_modules/es-abstract/2018/ToUint32.js | 9 - .../node_modules/es-abstract/2018/ToUint8.js | 20 - .../es-abstract/2018/ToUint8Clamp.js | 19 - build/node_modules/es-abstract/2018/Type.js | 12 - .../es-abstract/2018/UTF16Decode.js | 21 - .../es-abstract/2018/UTF16Encoding.js | 25 - .../es-abstract/2018/UnicodeEscape.js | 26 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2018/WeekDay.js | 10 - .../es-abstract/2018/YearFromTime.js | 16 - build/node_modules/es-abstract/2018/abs.js | 11 - build/node_modules/es-abstract/2018/floor.js | 11 - build/node_modules/es-abstract/2018/modulo.js | 9 - .../es-abstract/2018/msFromTime.js | 11 - .../es-abstract/2018/thisBooleanValue.js | 15 - .../es-abstract/2018/thisNumberValue.js | 18 - .../es-abstract/2018/thisStringValue.js | 15 - .../es-abstract/2018/thisSymbolValue.js | 19 - .../es-abstract/2018/thisTimeValue.js | 9 - .../2019/AbstractEqualityComparison.js | 37 - .../2019/AbstractRelationalComparison.js | 63 - .../2019/AddEntriesFromIterable.js | 52 - .../es-abstract/2019/AdvanceStringIndex.js | 47 - .../es-abstract/2019/ArrayCreate.js | 53 - .../es-abstract/2019/ArraySetLength.js | 85 - .../es-abstract/2019/ArraySpeciesCreate.js | 46 - build/node_modules/es-abstract/2019/Call.js | 20 - .../2019/CanonicalNumericIndexString.js | 22 - .../2019/CompletePropertyDescriptor.js | 39 - .../es-abstract/2019/CopyDataProperties.js | 68 - .../es-abstract/2019/CreateDataProperty.js | 45 - .../2019/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2019/CreateHTML.js | 30 - .../2019/CreateIterResultObject.js | 19 - .../2019/CreateListFromArrayLike.js | 43 - .../es-abstract/2019/CreateMethodProperty.js | 40 - .../es-abstract/2019/DateFromTime.js | 54 - .../es-abstract/2019/DateString.js | 30 - build/node_modules/es-abstract/2019/Day.js | 11 - .../es-abstract/2019/DayFromYear.js | 10 - .../es-abstract/2019/DayWithinYear.js | 11 - .../es-abstract/2019/DaysInYear.js | 18 - .../es-abstract/2019/DefinePropertyOrThrow.js | 50 - .../es-abstract/2019/DeletePropertyOrThrow.js | 27 - .../2019/EnumerableOwnPropertyNames.js | 43 - .../es-abstract/2019/FlattenIntoArray.js | 58 - .../2019/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2019/Get.js | 30 - .../es-abstract/2019/GetIterator.js | 35 - .../es-abstract/2019/GetMethod.js | 42 - .../es-abstract/2019/GetOwnPropertyKeys.js | 31 - .../2019/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2019/GetSubstitution.js | 128 - build/node_modules/es-abstract/2019/GetV.js | 29 - .../es-abstract/2019/HasOwnProperty.js | 22 - .../es-abstract/2019/HasProperty.js | 20 - .../es-abstract/2019/HourFromTime.js | 14 - .../es-abstract/2019/InLeapYear.js | 21 - .../es-abstract/2019/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2019/Invoke.js | 24 - .../es-abstract/2019/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2019/IsArray.js | 14 - .../es-abstract/2019/IsCallable.js | 5 - .../es-abstract/2019/IsConcatSpreadable.js | 25 - .../es-abstract/2019/IsConstructor.js | 40 - .../es-abstract/2019/IsDataDescriptor.js | 23 - .../es-abstract/2019/IsExtensible.js | 20 - .../es-abstract/2019/IsGenericDescriptor.js | 23 - .../es-abstract/2019/IsInteger.js | 17 - .../es-abstract/2019/IsPromise.js | 24 - .../es-abstract/2019/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2019/IsRegExp.js | 24 - .../es-abstract/2019/IsStringPrefix.js | 47 - .../es-abstract/2019/IterableToList.js | 24 - .../es-abstract/2019/IteratorClose.js | 50 - .../es-abstract/2019/IteratorComplete.js | 18 - .../es-abstract/2019/IteratorNext.js | 18 - .../es-abstract/2019/IteratorStep.js | 13 - .../es-abstract/2019/IteratorValue.js | 18 - .../node_modules/es-abstract/2019/MakeDate.js | 13 - .../node_modules/es-abstract/2019/MakeDay.js | 33 - .../node_modules/es-abstract/2019/MakeTime.js | 23 - .../es-abstract/2019/MinFromTime.js | 14 - .../es-abstract/2019/MonthFromTime.js | 47 - .../es-abstract/2019/NumberToString.js | 19 - .../es-abstract/2019/ObjectCreate.js | 37 - .../2019/OrdinaryCreateFromConstructor.js | 20 - .../2019/OrdinaryDefineOwnProperty.js | 61 - .../2019/OrdinaryGetOwnProperty.js | 44 - .../2019/OrdinaryGetPrototypeOf.js | 21 - .../es-abstract/2019/OrdinaryHasInstance.js | 25 - .../es-abstract/2019/OrdinaryHasProperty.js | 20 - .../2019/OrdinarySetPrototypeOf.js | 53 - .../es-abstract/2019/PromiseResolve.js | 17 - .../es-abstract/2019/QuoteJSONString.js | 54 - .../es-abstract/2019/RegExpCreate.js | 21 - .../es-abstract/2019/RegExpExec.js | 32 - .../2019/RequireObjectCoercible.js | 3 - .../es-abstract/2019/SameValue.js | 13 - .../es-abstract/2019/SameValueNonNumber.js | 16 - .../es-abstract/2019/SameValueZero.js | 9 - .../es-abstract/2019/SecFromTime.js | 14 - build/node_modules/es-abstract/2019/Set.js | 47 - .../es-abstract/2019/SetFunctionLength.js | 31 - .../es-abstract/2019/SetFunctionName.js | 44 - .../es-abstract/2019/SetIntegrityLevel.js | 57 - .../es-abstract/2019/SpeciesConstructor.js | 32 - .../es-abstract/2019/SplitMatch.js | 38 - .../2019/StrictEqualityComparison.js | 17 - .../es-abstract/2019/StringCreate.js | 40 - .../es-abstract/2019/StringGetOwnProperty.js | 48 - .../2019/SymbolDescriptiveString.js | 20 - .../es-abstract/2019/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2019/TimeClip.js | 21 - .../es-abstract/2019/TimeFromYear.js | 11 - .../es-abstract/2019/TimeString.js | 25 - .../es-abstract/2019/TimeWithinDay.js | 12 - .../es-abstract/2019/ToBoolean.js | 5 - .../es-abstract/2019/ToDateString.js | 22 - .../node_modules/es-abstract/2019/ToIndex.js | 26 - .../node_modules/es-abstract/2019/ToInt16.js | 10 - .../node_modules/es-abstract/2019/ToInt32.js | 9 - build/node_modules/es-abstract/2019/ToInt8.js | 10 - .../es-abstract/2019/ToInteger.js | 12 - .../node_modules/es-abstract/2019/ToLength.js | 12 - .../node_modules/es-abstract/2019/ToNumber.js | 59 - .../node_modules/es-abstract/2019/ToObject.js | 14 - .../es-abstract/2019/ToPrimitive.js | 12 - .../es-abstract/2019/ToPropertyDescriptor.js | 52 - .../es-abstract/2019/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2019/ToString.js | 15 - .../node_modules/es-abstract/2019/ToUint16.js | 19 - .../node_modules/es-abstract/2019/ToUint32.js | 9 - .../node_modules/es-abstract/2019/ToUint8.js | 20 - .../es-abstract/2019/ToUint8Clamp.js | 19 - .../es-abstract/2019/TrimString.js | 29 - build/node_modules/es-abstract/2019/Type.js | 12 - .../es-abstract/2019/UTF16Decode.js | 21 - .../es-abstract/2019/UTF16Encoding.js | 25 - .../es-abstract/2019/UnicodeEscape.js | 26 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2019/WeekDay.js | 10 - .../es-abstract/2019/YearFromTime.js | 16 - build/node_modules/es-abstract/2019/abs.js | 11 - build/node_modules/es-abstract/2019/floor.js | 11 - build/node_modules/es-abstract/2019/modulo.js | 9 - .../es-abstract/2019/msFromTime.js | 11 - .../es-abstract/2019/thisBooleanValue.js | 15 - .../es-abstract/2019/thisNumberValue.js | 18 - .../es-abstract/2019/thisStringValue.js | 15 - .../es-abstract/2019/thisSymbolValue.js | 19 - .../es-abstract/2019/thisTimeValue.js | 3 - .../2020/AbstractEqualityComparison.js | 37 - .../2020/AbstractRelationalComparison.js | 63 - .../2020/AddEntriesFromIterable.js | 52 - .../es-abstract/2020/AdvanceStringIndex.js | 34 - .../es-abstract/2020/ArrayCreate.js | 53 - .../es-abstract/2020/ArraySetLength.js | 85 - .../es-abstract/2020/ArraySpeciesCreate.js | 46 - .../es-abstract/2020/BigInt/add.js | 18 - .../es-abstract/2020/BigInt/bitwiseAND.js | 17 - .../es-abstract/2020/BigInt/bitwiseNOT.js | 17 - .../es-abstract/2020/BigInt/bitwiseOR.js | 17 - .../es-abstract/2020/BigInt/bitwiseXOR.js | 17 - .../es-abstract/2020/BigInt/divide.js | 22 - .../es-abstract/2020/BigInt/equal.js | 17 - .../es-abstract/2020/BigInt/exponentiate.js | 31 - .../es-abstract/2020/BigInt/index.js | 43 - .../es-abstract/2020/BigInt/leftShift.js | 18 - .../es-abstract/2020/BigInt/lessThan.js | 18 - .../es-abstract/2020/BigInt/multiply.js | 18 - .../es-abstract/2020/BigInt/remainder.js | 30 - .../es-abstract/2020/BigInt/sameValue.js | 18 - .../es-abstract/2020/BigInt/sameValueZero.js | 18 - .../2020/BigInt/signedRightShift.js | 18 - .../es-abstract/2020/BigInt/subtract.js | 18 - .../es-abstract/2020/BigInt/toString.js | 18 - .../es-abstract/2020/BigInt/unaryMinus.js | 24 - .../2020/BigInt/unsignedRightShift.js | 17 - .../es-abstract/2020/BigIntBitwiseOp.js | 66 - .../es-abstract/2020/BinaryAnd.js | 14 - .../node_modules/es-abstract/2020/BinaryOr.js | 14 - .../es-abstract/2020/BinaryXor.js | 14 - build/node_modules/es-abstract/2020/Call.js | 20 - .../2020/CanonicalNumericIndexString.js | 22 - .../es-abstract/2020/CodePointAt.js | 58 - .../2020/CompletePropertyDescriptor.js | 39 - .../es-abstract/2020/CopyDataProperties.js | 64 - .../es-abstract/2020/CreateDataProperty.js | 45 - .../2020/CreateDataPropertyOrThrow.js | 25 - .../es-abstract/2020/CreateHTML.js | 30 - .../2020/CreateIterResultObject.js | 19 - .../2020/CreateListFromArrayLike.js | 44 - .../es-abstract/2020/CreateMethodProperty.js | 40 - .../es-abstract/2020/DateFromTime.js | 54 - .../es-abstract/2020/DateString.js | 30 - build/node_modules/es-abstract/2020/Day.js | 11 - .../es-abstract/2020/DayFromYear.js | 10 - .../es-abstract/2020/DayWithinYear.js | 11 - .../es-abstract/2020/DaysInYear.js | 18 - .../es-abstract/2020/DefinePropertyOrThrow.js | 50 - .../es-abstract/2020/DeletePropertyOrThrow.js | 27 - .../2020/EnumerableOwnPropertyNames.js | 43 - .../es-abstract/2020/FlattenIntoArray.js | 58 - .../2020/FromPropertyDescriptor.js | 36 - build/node_modules/es-abstract/2020/Get.js | 30 - .../es-abstract/2020/GetIterator.js | 65 - .../es-abstract/2020/GetMethod.js | 42 - .../es-abstract/2020/GetOwnPropertyKeys.js | 31 - .../2020/GetPrototypeFromConstructor.js | 28 - .../es-abstract/2020/GetSubstitution.js | 128 - build/node_modules/es-abstract/2020/GetV.js | 29 - .../es-abstract/2020/HasOwnProperty.js | 22 - .../es-abstract/2020/HasProperty.js | 20 - .../es-abstract/2020/HourFromTime.js | 14 - .../es-abstract/2020/InLeapYear.js | 21 - .../es-abstract/2020/InstanceofOperator.js | 30 - build/node_modules/es-abstract/2020/Invoke.js | 24 - .../es-abstract/2020/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/2020/IsArray.js | 14 - .../es-abstract/2020/IsBigIntElementType.js | 7 - .../es-abstract/2020/IsCallable.js | 5 - .../es-abstract/2020/IsConcatSpreadable.js | 25 - .../es-abstract/2020/IsConstructor.js | 40 - .../es-abstract/2020/IsDataDescriptor.js | 23 - .../es-abstract/2020/IsExtensible.js | 20 - .../es-abstract/2020/IsGenericDescriptor.js | 23 - .../es-abstract/2020/IsInteger.js | 17 - .../es-abstract/2020/IsNoTearConfiguration.js | 16 - .../es-abstract/2020/IsNonNegativeInteger.js | 9 - .../es-abstract/2020/IsPromise.js | 24 - .../es-abstract/2020/IsPropertyKey.js | 7 - .../node_modules/es-abstract/2020/IsRegExp.js | 24 - .../es-abstract/2020/IsStringPrefix.js | 47 - .../2020/IsUnclampedIntegerElementType.js | 12 - .../es-abstract/2020/IsUnsignedElementType.js | 11 - .../es-abstract/2020/IterableToList.js | 24 - .../es-abstract/2020/IteratorClose.js | 50 - .../es-abstract/2020/IteratorComplete.js | 18 - .../es-abstract/2020/IteratorNext.js | 18 - .../es-abstract/2020/IteratorStep.js | 13 - .../es-abstract/2020/IteratorValue.js | 18 - .../es-abstract/2020/LengthOfArrayLike.js | 20 - .../node_modules/es-abstract/2020/MakeDate.js | 13 - .../node_modules/es-abstract/2020/MakeDay.js | 33 - .../node_modules/es-abstract/2020/MakeTime.js | 23 - .../es-abstract/2020/MinFromTime.js | 14 - .../es-abstract/2020/MonthFromTime.js | 47 - .../es-abstract/2020/Number/add.js | 44 - .../es-abstract/2020/Number/bitwiseAND.js | 17 - .../es-abstract/2020/Number/bitwiseNOT.js | 19 - .../es-abstract/2020/Number/bitwiseOR.js | 17 - .../es-abstract/2020/Number/bitwiseXOR.js | 17 - .../es-abstract/2020/Number/divide.js | 22 - .../es-abstract/2020/Number/equal.js | 21 - .../es-abstract/2020/Number/exponentiate.js | 77 - .../es-abstract/2020/Number/index.js | 43 - .../es-abstract/2020/Number/leftShift.js | 24 - .../es-abstract/2020/Number/lessThan.js | 26 - .../es-abstract/2020/Number/multiply.js | 33 - .../es-abstract/2020/Number/remainder.js | 32 - .../es-abstract/2020/Number/sameValue.js | 21 - .../es-abstract/2020/Number/sameValueZero.js | 24 - .../2020/Number/signedRightShift.js | 24 - .../es-abstract/2020/Number/subtract.js | 16 - .../es-abstract/2020/Number/toString.js | 18 - .../es-abstract/2020/Number/unaryMinus.js | 21 - .../2020/Number/unsignedRightShift.js | 24 - .../es-abstract/2020/NumberBitwiseOp.js | 29 - .../es-abstract/2020/NumberToBigInt.js | 22 - .../2020/OrdinaryCreateFromConstructor.js | 20 - .../2020/OrdinaryDefineOwnProperty.js | 61 - .../2020/OrdinaryGetOwnProperty.js | 44 - .../2020/OrdinaryGetPrototypeOf.js | 21 - .../es-abstract/2020/OrdinaryHasInstance.js | 25 - .../es-abstract/2020/OrdinaryHasProperty.js | 20 - .../es-abstract/2020/OrdinaryObjectCreate.js | 46 - .../2020/OrdinarySetPrototypeOf.js | 53 - .../es-abstract/2020/PromiseResolve.js | 17 - .../es-abstract/2020/QuoteJSONString.js | 54 - .../es-abstract/2020/RegExpCreate.js | 21 - .../es-abstract/2020/RegExpExec.js | 32 - .../2020/RequireObjectCoercible.js | 3 - .../es-abstract/2020/SameValue.js | 13 - .../es-abstract/2020/SameValueNonNumeric.js | 21 - .../es-abstract/2020/SameValueZero.js | 9 - .../es-abstract/2020/SecFromTime.js | 14 - build/node_modules/es-abstract/2020/Set.js | 47 - .../es-abstract/2020/SetFunctionLength.js | 31 - .../es-abstract/2020/SetFunctionName.js | 44 - .../es-abstract/2020/SetIntegrityLevel.js | 57 - .../es-abstract/2020/SpeciesConstructor.js | 32 - .../es-abstract/2020/SplitMatch.js | 38 - .../2020/StrictEqualityComparison.js | 17 - .../es-abstract/2020/StringCreate.js | 40 - .../es-abstract/2020/StringGetOwnProperty.js | 48 - .../es-abstract/2020/StringPad.js | 43 - .../2020/SymbolDescriptiveString.js | 20 - .../es-abstract/2020/TestIntegrityLevel.js | 42 - .../node_modules/es-abstract/2020/TimeClip.js | 21 - .../es-abstract/2020/TimeFromYear.js | 11 - .../es-abstract/2020/TimeString.js | 25 - .../es-abstract/2020/TimeWithinDay.js | 12 - .../es-abstract/2020/ToBoolean.js | 5 - .../es-abstract/2020/ToDateString.js | 22 - .../node_modules/es-abstract/2020/ToIndex.js | 26 - .../node_modules/es-abstract/2020/ToInt16.js | 10 - .../node_modules/es-abstract/2020/ToInt32.js | 9 - build/node_modules/es-abstract/2020/ToInt8.js | 10 - .../es-abstract/2020/ToInteger.js | 15 - .../node_modules/es-abstract/2020/ToLength.js | 12 - .../node_modules/es-abstract/2020/ToNumber.js | 62 - .../es-abstract/2020/ToNumeric.js | 21 - .../node_modules/es-abstract/2020/ToObject.js | 14 - .../es-abstract/2020/ToPrimitive.js | 12 - .../es-abstract/2020/ToPropertyDescriptor.js | 52 - .../es-abstract/2020/ToPropertyKey.js | 15 - .../node_modules/es-abstract/2020/ToString.js | 15 - .../node_modules/es-abstract/2020/ToUint16.js | 19 - .../node_modules/es-abstract/2020/ToUint32.js | 9 - .../node_modules/es-abstract/2020/ToUint8.js | 20 - .../es-abstract/2020/ToUint8Clamp.js | 19 - .../es-abstract/2020/TrimString.js | 29 - build/node_modules/es-abstract/2020/Type.js | 15 - .../es-abstract/2020/UTF16DecodeString.js | 29 - .../2020/UTF16DecodeSurrogatePair.js | 19 - .../es-abstract/2020/UTF16Encoding.js | 25 - .../es-abstract/2020/UnicodeEscape.js | 27 - .../ValidateAndApplyPropertyDescriptor.js | 170 - .../node_modules/es-abstract/2020/WeekDay.js | 10 - .../es-abstract/2020/YearFromTime.js | 16 - build/node_modules/es-abstract/2020/abs.js | 11 - build/node_modules/es-abstract/2020/floor.js | 11 - build/node_modules/es-abstract/2020/modulo.js | 9 - .../es-abstract/2020/msFromTime.js | 11 - .../es-abstract/2020/thisBigIntValue.js | 22 - .../es-abstract/2020/thisBooleanValue.js | 15 - .../es-abstract/2020/thisNumberValue.js | 18 - .../es-abstract/2020/thisStringValue.js | 15 - .../es-abstract/2020/thisSymbolValue.js | 19 - .../es-abstract/2020/thisTimeValue.js | 3 - .../5/AbstractEqualityComparison.js | 37 - .../5/AbstractRelationalComparison.js | 63 - .../es-abstract/5/CheckObjectCoercible.js | 14 - .../es-abstract/5/DateFromTime.js | 54 - build/node_modules/es-abstract/5/Day.js | 11 - .../node_modules/es-abstract/5/DayFromYear.js | 10 - .../es-abstract/5/DayWithinYear.js | 11 - .../node_modules/es-abstract/5/DaysInYear.js | 18 - .../es-abstract/5/FromPropertyDescriptor.js | 39 - .../es-abstract/5/HourFromTime.js | 14 - .../node_modules/es-abstract/5/InLeapYear.js | 21 - .../es-abstract/5/IsAccessorDescriptor.js | 23 - .../node_modules/es-abstract/5/IsCallable.js | 5 - .../es-abstract/5/IsDataDescriptor.js | 23 - .../es-abstract/5/IsGenericDescriptor.js | 23 - .../es-abstract/5/IsPropertyDescriptor.js | 19 - build/node_modules/es-abstract/5/MakeDate.js | 13 - build/node_modules/es-abstract/5/MakeDay.js | 33 - build/node_modules/es-abstract/5/MakeTime.js | 23 - .../node_modules/es-abstract/5/MinFromTime.js | 14 - .../es-abstract/5/MonthFromTime.js | 47 - build/node_modules/es-abstract/5/SameValue.js | 13 - .../node_modules/es-abstract/5/SecFromTime.js | 14 - .../es-abstract/5/StrictEqualityComparison.js | 17 - build/node_modules/es-abstract/5/TimeClip.js | 21 - .../es-abstract/5/TimeFromYear.js | 11 - .../es-abstract/5/TimeWithinDay.js | 12 - build/node_modules/es-abstract/5/ToBoolean.js | 5 - build/node_modules/es-abstract/5/ToInt32.js | 9 - build/node_modules/es-abstract/5/ToInteger.js | 18 - build/node_modules/es-abstract/5/ToNumber.js | 20 - build/node_modules/es-abstract/5/ToObject.js | 14 - .../node_modules/es-abstract/5/ToPrimitive.js | 5 - .../es-abstract/5/ToPropertyDescriptor.js | 52 - build/node_modules/es-abstract/5/ToString.js | 12 - build/node_modules/es-abstract/5/ToUint16.js | 19 - build/node_modules/es-abstract/5/ToUint32.js | 9 - build/node_modules/es-abstract/5/Type.js | 24 - build/node_modules/es-abstract/5/WeekDay.js | 10 - .../es-abstract/5/YearFromTime.js | 16 - build/node_modules/es-abstract/5/abs.js | 11 - build/node_modules/es-abstract/5/floor.js | 11 - build/node_modules/es-abstract/5/modulo.js | 9 - .../node_modules/es-abstract/5/msFromTime.js | 11 - build/node_modules/es-abstract/CHANGELOG.md | 486 - .../node_modules/es-abstract/GetIntrinsic.js | 5 - build/node_modules/es-abstract/LICENSE | 21 - build/node_modules/es-abstract/README.md | 43 - build/node_modules/es-abstract/es2015.js | 123 - build/node_modules/es-abstract/es2016.js | 128 - build/node_modules/es-abstract/es2017.js | 130 - build/node_modules/es-abstract/es2018.js | 138 - build/node_modules/es-abstract/es2019.js | 141 - build/node_modules/es-abstract/es2020.js | 159 - build/node_modules/es-abstract/es5.js | 51 - build/node_modules/es-abstract/es6.js | 3 - build/node_modules/es-abstract/es7.js | 3 - .../es-abstract/helpers/DefineOwnProperty.js | 45 - .../es-abstract/helpers/OwnPropertyKeys.js | 22 - .../es-abstract/helpers/assertRecord.js | 48 - .../es-abstract/helpers/assign.js | 22 - .../es-abstract/helpers/callBind.js | 5 - .../es-abstract/helpers/callBound.js | 5 - .../node_modules/es-abstract/helpers/every.js | 10 - .../es-abstract/helpers/forEach.js | 7 - .../es-abstract/helpers/getInferredName.js | 10 - .../es-abstract/helpers/getIteratorMethod.js | 45 - .../helpers/getOwnPropertyDescriptor.js | 15 - .../es-abstract/helpers/getProto.js | 15 - .../helpers/getSymbolDescription.js | 41 - .../es-abstract/helpers/isByteValue.js | 5 - .../es-abstract/helpers/isCodePoint.js | 5 - .../es-abstract/helpers/isFinite.js | 5 - .../es-abstract/helpers/isLeadingSurrogate.js | 5 - .../node_modules/es-abstract/helpers/isNaN.js | 5 - .../es-abstract/helpers/isPrefixOf.js | 13 - .../es-abstract/helpers/isPrimitive.js | 5 - .../helpers/isPropertyDescriptor.js | 31 - .../helpers/isSamePropertyDescriptor.js | 20 - .../helpers/isTrailingSurrogate.js | 5 - .../es-abstract/helpers/maxSafeInteger.js | 8 - build/node_modules/es-abstract/helpers/mod.js | 8 - .../es-abstract/helpers/padTimeComponent.js | 9 - .../es-abstract/helpers/regexTester.js | 11 - .../es-abstract/helpers/setProto.js | 16 - .../node_modules/es-abstract/helpers/sign.js | 5 - .../node_modules/es-abstract/helpers/some.js | 10 - .../es-abstract/helpers/timeConstants.js | 19 - build/node_modules/es-abstract/index.js | 28 - .../node_modules/object-keys/.editorconfig | 13 - .../node_modules/object-keys/.eslintrc | 17 - .../node_modules/object-keys/.travis.yml | 277 - .../node_modules/object-keys/CHANGELOG.md | 232 - .../node_modules/object-keys/LICENSE | 21 - .../node_modules/object-keys/README.md | 76 - .../object-keys/implementation.js | 122 - .../node_modules/object-keys/index.js | 32 - .../node_modules/object-keys/isArguments.js | 17 - .../node_modules/object-keys/package.json | 117 - .../node_modules/object-keys/test/index.js | 5 - .../es-abstract/operations/.eslintrc | 5 - .../es-abstract/operations/2015.js | 251 - .../es-abstract/operations/2016.js | 277 - .../es-abstract/operations/2017.js | 325 - .../es-abstract/operations/2018.js | 350 - .../es-abstract/operations/2019.js | 355 - .../es-abstract/operations/2020.js | 418 - build/node_modules/es-abstract/package.json | 165 - .../es-abstract/test/GetIntrinsic.js | 207 - .../node_modules/es-abstract/test/diffOps.js | 58 - build/node_modules/es-abstract/test/es2015.js | 144 - build/node_modules/es-abstract/test/es2016.js | 165 - build/node_modules/es-abstract/test/es2017.js | 211 - build/node_modules/es-abstract/test/es2018.js | 229 - build/node_modules/es-abstract/test/es2019.js | 231 - build/node_modules/es-abstract/test/es2020.js | 240 - build/node_modules/es-abstract/test/es5.js | 14 - build/node_modules/es-abstract/test/es6.js | 18 - build/node_modules/es-abstract/test/es7.js | 18 - .../test/helpers/OwnPropertyKeys.js | 42 - .../es-abstract/test/helpers/assertRecord.js | 60 - .../test/helpers/createBoundESNamespace.js | 23 - .../test/helpers/defineProperty.js | 27 - .../test/helpers/getSymbolDescription.js | 67 - .../es-abstract/test/helpers/index.js | 6 - .../es-abstract/test/helpers/isByteValue.js | 28 - .../es-abstract/test/helpers/isCodePoint.js | 20 - .../test/helpers/runManifestTest.js | 27 - build/node_modules/es-abstract/test/index.js | 35 - .../es-abstract/test/ses-compat.js | 8 - build/node_modules/es-abstract/test/tests.js | 6962 --- build/node_modules/es-to-primitive/.eslintrc | 22 - .../es-to-primitive/.github/FUNDING.yml | 12 - .../node_modules/es-to-primitive/.travis.yml | 15 - .../node_modules/es-to-primitive/CHANGELOG.md | 49 - build/node_modules/es-to-primitive/LICENSE | 22 - build/node_modules/es-to-primitive/Makefile | 61 - build/node_modules/es-to-primitive/README.md | 49 - build/node_modules/es-to-primitive/es2015.js | 75 - build/node_modules/es-to-primitive/es5.js | 45 - build/node_modules/es-to-primitive/es6.js | 3 - .../es-to-primitive/helpers/isPrimitive.js | 5 - build/node_modules/es-to-primitive/index.js | 17 - .../node_modules/es-to-primitive/package.json | 113 - .../es-to-primitive/test/es2015.js | 151 - .../node_modules/es-to-primitive/test/es5.js | 118 - .../node_modules/es-to-primitive/test/es6.js | 151 - .../es-to-primitive/test/index.js | 20 - build/node_modules/escalade/dist/index.js | 22 + build/node_modules/escalade/dist/index.mjs | 22 + build/node_modules/escalade/index.d.ts | 3 + build/node_modules/escalade/license | 9 + build/node_modules/escalade/package.json | 93 + build/node_modules/escalade/readme.md | 211 + build/node_modules/escalade/sync/index.d.ts | 2 + build/node_modules/escalade/sync/index.js | 18 + build/node_modules/escalade/sync/index.mjs | 18 + .../escape-string-regexp/index.d.ts | 18 + .../escape-string-regexp/index.js | 12 +- .../node_modules/escape-string-regexp/license | 9 + .../escape-string-regexp/package.json | 38 +- .../escape-string-regexp/readme.md | 25 +- build/node_modules/estree-walker/CHANGELOG.md | 37 + build/node_modules/estree-walker/LICENSE | 7 + build/node_modules/estree-walker/README.md | 3 + .../estree-walker/dist/esm/estree-walker.js | 333 + .../estree-walker/dist/esm/package.json | 1 + .../estree-walker/dist/umd/estree-walker.js | 344 + build/node_modules/estree-walker/package.json | 52 +- build/node_modules/estree-walker/src/async.js | 118 + build/node_modules/estree-walker/src/index.js | 35 + .../estree-walker/src/package.json | 1 + build/node_modules/estree-walker/src/sync.js | 118 + .../node_modules/estree-walker/src/walker.js | 61 + .../estree-walker/types/async.d.ts | 53 + .../estree-walker/types/index.d.ts | 56 + .../estree-walker/types/sync.d.ts | 53 + .../estree-walker/types/tsconfig.tsbuildinfo | 345 + .../estree-walker/types/walker.d.ts | 37 + .../node_modules/evp_bytestokey/package.json | 2 +- build/node_modules/expect.js/package.json | 2 +- build/node_modules/extend/.editorconfig | 20 - build/node_modules/extend/.eslintrc | 17 - build/node_modules/extend/.jscs.json | 175 - build/node_modules/extend/.travis.yml | 230 - build/node_modules/extend/CHANGELOG.md | 83 - build/node_modules/extend/LICENSE | 23 - build/node_modules/extend/README.md | 81 - build/node_modules/extend/component.json | 32 - build/node_modules/extend/index.js | 117 - build/node_modules/extend/package.json | 75 - .../fast-safe-stringify/index.d.ts | 21 +- .../node_modules/fast-safe-stringify/index.js | 186 +- .../fast-safe-stringify/package.json | 24 +- .../fast-safe-stringify/readme.md | 22 +- .../fast-safe-stringify/test-stable.js | 183 +- .../node_modules/fast-safe-stringify/test.js | 183 +- build/node_modules/fecha/package.json | 2 +- build/node_modules/fill-range/LICENSE | 21 + build/node_modules/fill-range/README.md | 237 + build/node_modules/fill-range/index.js | 249 + build/node_modules/fill-range/package.json | 114 + build/node_modules/find-up/index.d.ts | 138 + build/node_modules/find-up/index.js | 89 + build/node_modules/find-up/license | 9 + build/node_modules/find-up/package.json | 86 + build/node_modules/find-up/readme.md | 151 + build/node_modules/flat/.travis.yml | 8 + build/node_modules/flat/LICENSE | 12 + build/node_modules/flat/README.md | 236 + build/node_modules/flat/cli.js | 42 + build/node_modules/flat/index.js | 158 + build/node_modules/flat/package.json | 68 + build/node_modules/flat/test/test.js | 643 + build/node_modules/fn.name/package.json | 2 +- build/node_modules/foreach/package.json | 6 +- build/node_modules/form-data/README.md | 350 - build/node_modules/form-data/README.md.bak | 24 +- build/node_modules/form-data/Readme.md | 358 + build/node_modules/form-data/index.d.ts | 15 +- build/node_modules/form-data/lib/form_data.js | 32 +- build/node_modules/form-data/package.json | 26 +- build/node_modules/formatio/AUTHORS | 6 - build/node_modules/formatio/LICENSE | 27 - build/node_modules/formatio/Readme.md | 244 - build/node_modules/formatio/autolint.js | 23 - build/node_modules/formatio/buster.js | 14 - build/node_modules/formatio/lib/formatio.js | 213 - build/node_modules/formatio/package.json | 76 - .../formatio/test/formatio-test.js | 476 - build/node_modules/formidable/LICENSE | 1 - build/node_modules/formidable/README.md | 243 +- .../benchmark-2020-01-29_xeon-x3440.png | Bin 25658 -> 0 bytes build/node_modules/formidable/lib/file.js | 81 - .../formidable/lib/incoming_form.js | 558 - build/node_modules/formidable/lib/index.js | 3 - .../formidable/lib/json_parser.js | 30 - .../formidable/lib/multipart_parser.js | 332 - .../formidable/lib/octet_parser.js | 20 - .../formidable/lib/querystring_parser.js | 27 - .../formidable/node_modules/qs/.editorconfig | 33 + .../formidable/node_modules/qs/.eslintignore | 1 + .../formidable/node_modules/qs/.eslintrc | 21 + .../node_modules/qs/.github/FUNDING.yml | 12 + .../qs/.github/workflows/rebase.yml | 15 + .../formidable/node_modules/qs/CHANGELOG.md | 339 + .../formidable/node_modules/qs/LICENSE.md | 29 + .../formidable/node_modules/qs/README.md | 604 + .../formidable/node_modules/qs/dist/qs.js | 832 + .../formidable/node_modules/qs/lib/formats.js | 26 + .../formidable/node_modules/qs/lib/index.js | 11 + .../formidable/node_modules/qs/lib/parse.js | 268 + .../node_modules/qs/lib/stringify.js | 279 + .../formidable/node_modules/qs/lib/utils.js | 236 + .../formidable/node_modules/qs/package.json | 97 + .../formidable/node_modules/qs/test/.eslintrc | 18 + .../formidable/node_modules/qs/test/index.js | 7 + .../formidable/node_modules/qs/test/parse.js | 772 + .../node_modules/qs/test/stringify.js | 738 + .../formidable/node_modules/qs/test/utils.js | 136 + build/node_modules/formidable/package.json | 114 +- .../node_modules/formidable/src/Formidable.js | 617 + .../formidable/src/FormidableError.js | 45 + .../formidable/src/PersistentFile.js | 87 + .../formidable/src/VolatileFile.js | 82 + build/node_modules/formidable/src/index.js | 38 + .../formidable/src/parsers/Dummy.js | 21 + .../formidable/src/parsers/JSON.js | 35 + .../formidable/src/parsers/Multipart.js | 347 + .../formidable/src/parsers/OctetStream.js | 12 + .../formidable/src/parsers/Querystring.js | 38 + .../src/parsers/StreamingQuerystring.js | 121 + .../formidable/src/parsers/index.js | 17 + .../formidable/src/plugins/index.js | 13 + .../formidable/src/plugins/json.js | 38 + .../formidable/src/plugins/multipart.js | 173 + .../formidable/src/plugins/octetstream.js | 86 + .../formidable/src/plugins/querystring.js | 42 + build/node_modules/fs.realpath/LICENSE | 43 + build/node_modules/fs.realpath/README.md | 33 + build/node_modules/fs.realpath/index.js | 66 + build/node_modules/fs.realpath/old.js | 303 + build/node_modules/fs.realpath/package.json | 59 + build/node_modules/function-bind/package.json | 7 +- .../node_modules/isarray/package.json | 2 +- .../node_modules/readable-stream/package.json | 2 +- .../node_modules/string_decoder/package.json | 2 +- build/node_modules/fwd-stream/package.json | 4 +- build/node_modules/get-caller-file/LICENSE.md | 6 + build/node_modules/get-caller-file/README.md | 41 + build/node_modules/get-caller-file/index.d.ts | 2 + build/node_modules/get-caller-file/index.js | 22 + .../node_modules/get-caller-file/index.js.map | 1 + .../node_modules/get-caller-file/package.json | 69 + build/node_modules/get-intrinsic/package.json | 3 +- build/node_modules/glob-parent/CHANGELOG.md | 110 + build/node_modules/glob-parent/LICENSE | 15 + build/node_modules/glob-parent/README.md | 137 + build/node_modules/glob-parent/index.js | 42 + build/node_modules/glob-parent/package.json | 90 + build/node_modules/glob/.npmignore | 2 - build/node_modules/glob/.travis.yml | 3 - build/node_modules/glob/LICENSE | 38 +- build/node_modules/glob/README.md | 274 +- build/node_modules/glob/common.js | 236 + build/node_modules/glob/examples/g.js | 9 - build/node_modules/glob/examples/usr-local.js | 9 - build/node_modules/glob/glob.js | 1090 +- build/node_modules/glob/package.json | 61 +- build/node_modules/glob/sync.js | 483 + build/node_modules/glob/test/00-setup.js | 176 - .../node_modules/glob/test/bash-comparison.js | 63 - .../node_modules/glob/test/bash-results.json | 350 - build/node_modules/glob/test/cwd-test.js | 55 - .../node_modules/glob/test/globstar-match.js | 19 - build/node_modules/glob/test/mark.js | 74 - .../node_modules/glob/test/nocase-nomagic.js | 113 - build/node_modules/glob/test/pause-resume.js | 73 - build/node_modules/glob/test/root-nomount.js | 39 - build/node_modules/glob/test/root.js | 46 - build/node_modules/glob/test/stat.js | 32 - build/node_modules/glob/test/zz-cleanup.js | 11 - build/node_modules/graceful-fs/.npmignore | 1 - build/node_modules/graceful-fs/README.md | 26 - build/node_modules/graceful-fs/graceful-fs.js | 160 - build/node_modules/graceful-fs/package.json | 70 - build/node_modules/graceful-fs/polyfills.js | 228 - build/node_modules/graceful-fs/test/open.js | 39 - .../graceful-fs/test/readdir-sort.js | 21 - build/node_modules/growl/.eslintrc.json | 14 + build/node_modules/growl/.tags | 195 + build/node_modules/growl/.tags1 | 166 + build/node_modules/growl/.travis.yml | 21 + build/node_modules/growl/History.md | 14 + build/node_modules/growl/Readme.md | 66 +- build/node_modules/growl/lib/growl.js | 390 +- build/node_modules/growl/package.json | 46 +- build/node_modules/growl/test.js | 13 +- build/node_modules/has-bigints/.eslintignore | 1 - build/node_modules/has-bigints/.eslintrc | 9 - .../has-bigints/.github/FUNDING.yml | 12 - build/node_modules/has-bigints/.nycrc | 13 - build/node_modules/has-bigints/CHANGELOG.md | 43 - build/node_modules/has-bigints/LICENSE | 21 - build/node_modules/has-bigints/README.md | 35 - build/node_modules/has-bigints/index.js | 10 - build/node_modules/has-bigints/package.json | 81 - build/node_modules/has-bigints/test/index.js | 44 - build/node_modules/has-flag/index.d.ts | 39 + build/node_modules/has-flag/index.js | 8 + build/node_modules/has-flag/license | 9 + build/node_modules/has-flag/package.json | 80 + build/node_modules/has-flag/readme.md | 89 + build/node_modules/has-symbols/.eslintignore | 1 - build/node_modules/has-symbols/.nycrc | 4 - build/node_modules/has-symbols/CHANGELOG.md | 17 + build/node_modules/has-symbols/README.md | 6 + build/node_modules/has-symbols/package.json | 38 +- build/node_modules/has/package.json | 3 +- .../readable-stream/CONTRIBUTING.md | 38 - .../readable-stream/GOVERNANCE.md | 136 - .../node_modules/readable-stream/LICENSE | 47 - .../node_modules/readable-stream/README.md | 106 - .../readable-stream/errors-browser.js | 127 - .../node_modules/readable-stream/errors.js | 116 - .../readable-stream/experimentalWarning.js | 17 - .../readable-stream/lib/_stream_duplex.js | 139 - .../lib/_stream_passthrough.js | 39 - .../readable-stream/lib/_stream_readable.js | 1124 - .../readable-stream/lib/_stream_transform.js | 201 - .../readable-stream/lib/_stream_writable.js | 697 - .../lib/internal/streams/async_iterator.js | 207 - .../lib/internal/streams/buffer_list.js | 210 - .../lib/internal/streams/destroy.js | 105 - .../lib/internal/streams/end-of-stream.js | 104 - .../lib/internal/streams/from-browser.js | 3 - .../lib/internal/streams/from.js | 64 - .../lib/internal/streams/pipeline.js | 97 - .../lib/internal/streams/state.js | 27 - .../lib/internal/streams/stream-browser.js | 1 - .../lib/internal/streams/stream.js | 1 - .../node_modules/readable-stream/package.json | 97 - .../readable-stream/readable-browser.js | 9 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/safe-buffer/LICENSE | 21 - .../node_modules/safe-buffer/README.md | 584 - .../node_modules/safe-buffer/index.d.ts | 187 - .../node_modules/safe-buffer/index.js | 65 - .../node_modules/safe-buffer/package.json | 76 - build/node_modules/hash-base/package.json | 8 +- build/node_modules/hash.js/package.json | 2 +- build/node_modules/he/LICENSE-MIT.txt | 20 + build/node_modules/he/README.md | 379 + build/node_modules/he/bin/he | 148 + build/node_modules/he/he.js | 345 + build/node_modules/he/man/he.1 | 78 + build/node_modules/he/package.json | 90 + build/node_modules/hexoid/dist/index.js | 15 + build/node_modules/hexoid/dist/index.min.js | 1 + build/node_modules/hexoid/dist/index.mjs | 15 + build/node_modules/hexoid/hexoid.d.ts | 1 + build/node_modules/hexoid/license | 9 + build/node_modules/hexoid/package.json | 73 + build/node_modules/hexoid/readme.md | 119 + build/node_modules/hmac-drbg/package.json | 2 +- build/node_modules/idb-wrapper/package.json | 2 +- build/node_modules/indexof/package.json | 2 +- build/node_modules/inflight/LICENSE | 15 + build/node_modules/inflight/README.md | 37 + build/node_modules/inflight/inflight.js | 54 + build/node_modules/inflight/package.json | 58 + build/node_modules/inherits/package.json | 19 +- build/node_modules/is-arguments/.editorconfig | 20 - build/node_modules/is-arguments/.eslintignore | 1 - build/node_modules/is-arguments/.eslintrc | 10 - .../is-arguments/.github/FUNDING.yml | 12 - .../.github/workflows/node-4+.yml | 54 - .../.github/workflows/node-iojs.yml | 58 - .../.github/workflows/node-pretest.yml | 26 - .../.github/workflows/node-zero.yml | 60 - .../is-arguments/.github/workflows/rebase.yml | 15 - .../.github/workflows/require-allow-edits.yml | 12 - build/node_modules/is-arguments/.nycrc | 13 - build/node_modules/is-arguments/CHANGELOG.md | 163 - build/node_modules/is-arguments/LICENSE | 20 - build/node_modules/is-arguments/README.md | 42 - build/node_modules/is-arguments/index.js | 33 - build/node_modules/is-arguments/package.json | 114 - build/node_modules/is-arguments/test/index.js | 44 - build/node_modules/is-arrayish/package.json | 2 +- build/node_modules/is-bigint/.eslintignore | 1 - build/node_modules/is-bigint/.eslintrc | 14 - .../is-bigint/.github/FUNDING.yml | 12 - build/node_modules/is-bigint/.nycrc | 9 - build/node_modules/is-bigint/CHANGELOG.md | 54 - build/node_modules/is-bigint/LICENSE | 21 - build/node_modules/is-bigint/README.md | 38 - build/node_modules/is-bigint/index.js | 36 - build/node_modules/is-bigint/package.json | 83 - build/node_modules/is-bigint/test/.eslintrc | 7 - build/node_modules/is-bigint/test/index.js | 80 - build/node_modules/is-binary-path/index.d.ts | 17 + build/node_modules/is-binary-path/index.js | 7 + build/node_modules/is-binary-path/license | 9 + .../node_modules/is-binary-path/package.json | 72 + build/node_modules/is-binary-path/readme.md | 34 + .../is-boolean-object/.editorconfig | 22 - .../is-boolean-object/.eslintignore | 1 - .../node_modules/is-boolean-object/.eslintrc | 22 - .../is-boolean-object/.github/FUNDING.yml | 12 - build/node_modules/is-boolean-object/.nycrc | 10 - .../is-boolean-object/CHANGELOG.md | 100 - build/node_modules/is-boolean-object/LICENSE | 22 - .../node_modules/is-boolean-object/README.md | 57 - build/node_modules/is-boolean-object/index.js | 26 - .../is-boolean-object/package.json | 118 - .../is-boolean-object/test/index.js | 48 - build/node_modules/is-callable/.editorconfig | 21 - build/node_modules/is-callable/.eslintignore | 1 - build/node_modules/is-callable/.eslintrc | 21 - .../is-callable/.github/FUNDING.yml | 12 - .../is-callable/.github/main.workflow | 14 - build/node_modules/is-callable/.istanbul.yml | 47 - build/node_modules/is-callable/.nycrc | 13 - build/node_modules/is-callable/CHANGELOG.md | 94 - build/node_modules/is-callable/LICENSE | 22 - build/node_modules/is-callable/README.md | 68 - build/node_modules/is-callable/index.js | 74 - build/node_modules/is-callable/package.json | 130 - build/node_modules/is-callable/test/index.js | 198 - .../node_modules/is-core-module/.eslintignore | 1 - build/node_modules/is-core-module/.eslintrc | 1 - .../node_modules/is-core-module/CHANGELOG.md | 44 + build/node_modules/is-core-module/core.json | 128 +- build/node_modules/is-core-module/index.js | 2 +- .../node_modules/is-core-module/package.json | 35 +- .../node_modules/is-core-module/test/index.js | 24 +- .../node_modules/is-date-object/.editorconfig | 20 - .../node_modules/is-date-object/.eslintignore | 1 - build/node_modules/is-date-object/.eslintrc | 9 - .../is-date-object/.github/FUNDING.yml | 12 - build/node_modules/is-date-object/.jscs.json | 176 - build/node_modules/is-date-object/.nycrc | 10 - .../node_modules/is-date-object/CHANGELOG.md | 106 - build/node_modules/is-date-object/LICENSE | 22 - build/node_modules/is-date-object/README.md | 52 - build/node_modules/is-date-object/index.js | 22 - .../node_modules/is-date-object/package.json | 107 - .../node_modules/is-date-object/test/index.js | 36 - build/node_modules/is-extglob/LICENSE | 21 + build/node_modules/is-extglob/README.md | 107 + build/node_modules/is-extglob/index.js | 20 + build/node_modules/is-extglob/package.json | 100 + .../is-fullwidth-code-point/index.d.ts | 17 + .../is-fullwidth-code-point/index.js | 50 + .../is-fullwidth-code-point/license | 9 + .../is-fullwidth-code-point/package.json | 74 + .../is-fullwidth-code-point/readme.md | 39 + .../is-generator-function/.eslintignore | 1 - .../is-generator-function/.eslintrc | 9 - .../node_modules/is-generator-function/.nvmrc | 1 - .../node_modules/is-generator-function/.nycrc | 9 - .../is-generator-function/CHANGELOG.md | 208 - .../is-generator-function/LICENSE | 20 - .../is-generator-function/README.md | 40 - .../is-generator-function/index.js | 38 - .../is-generator-function/package.json | 113 - .../is-generator-function/test/corejs.js | 5 - .../is-generator-function/test/index.js | 83 - .../is-generator-function/test/uglified.js | 8 - build/node_modules/is-glob/LICENSE | 21 + build/node_modules/is-glob/README.md | 206 + build/node_modules/is-glob/index.js | 150 + build/node_modules/is-glob/package.json | 122 + build/node_modules/is-module/package.json | 6 +- .../is-negative-zero/.editorconfig | 8 - .../is-negative-zero/.eslintignore | 1 - build/node_modules/is-negative-zero/.eslintrc | 11 - .../.github/workflows/node-4+.yml | 54 - .../.github/workflows/node-iojs.yml | 58 - .../.github/workflows/node-pretest.yml | 26 - .../.github/workflows/node-zero.yml | 60 - .../.github/workflows/rebase.yml | 15 - .../.github/workflows/require-allow-edits.yml | 12 - build/node_modules/is-negative-zero/.nycrc | 13 - .../is-negative-zero/CHANGELOG.md | 117 - build/node_modules/is-negative-zero/LICENSE | 20 - build/node_modules/is-negative-zero/README.md | 51 - build/node_modules/is-negative-zero/index.js | 6 - .../is-negative-zero/package.json | 107 - .../is-negative-zero/test/index.js | 28 - .../is-number-object/.editorconfig | 20 - .../is-number-object/.eslintignore | 1 - build/node_modules/is-number-object/.eslintrc | 9 - .../is-number-object/.github/FUNDING.yml | 12 - build/node_modules/is-number-object/.nycrc | 9 - .../is-number-object/CHANGELOG.md | 105 - build/node_modules/is-number-object/LICENSE | 22 - build/node_modules/is-number-object/README.md | 55 - build/node_modules/is-number-object/index.js | 24 - .../is-number-object/package.json | 110 - .../is-number-object/test/corejs.js | 5 - .../is-number-object/test/index.js | 38 - build/node_modules/is-number/LICENSE | 21 + build/node_modules/is-number/README.md | 187 + build/node_modules/is-number/index.js | 18 + build/node_modules/is-number/package.json | 122 + build/node_modules/is-object/package.json | 2 +- build/node_modules/is-plain-obj/index.d.ts | 29 + build/node_modules/is-plain-obj/index.js | 10 + build/node_modules/is-plain-obj/license | 9 + build/node_modules/is-plain-obj/package.json | 70 + build/node_modules/is-plain-obj/readme.md | 54 + build/node_modules/is-reference/CHANGELOG.md | 37 + build/node_modules/is-reference/README.md | 61 + .../is-reference/dist/is-reference.es.js | 31 + .../is-reference/dist/is-reference.js | 39 + .../is-reference/dist/types/index.d.ts | 2 + build/node_modules/is-reference/package.json | 76 + build/node_modules/is-regex/.editorconfig | 20 - build/node_modules/is-regex/.eslintignore | 1 - build/node_modules/is-regex/.eslintrc | 19 - build/node_modules/is-regex/.nycrc | 10 - build/node_modules/is-regex/CHANGELOG.md | 190 - build/node_modules/is-regex/LICENSE | 20 - build/node_modules/is-regex/README.md | 52 - build/node_modules/is-regex/index.js | 59 - build/node_modules/is-regex/package.json | 114 - build/node_modules/is-regex/test/index.js | 105 - build/node_modules/is-stream/index.d.ts | 1 - build/node_modules/is-stream/index.js | 3 +- build/node_modules/is-stream/license | 2 +- build/node_modules/is-stream/package.json | 13 +- build/node_modules/is-stream/readme.md | 21 +- build/node_modules/is-string/.eslintignore | 1 - build/node_modules/is-string/.eslintrc | 19 - .../is-string/.github/FUNDING.yml | 12 - build/node_modules/is-string/.nycrc | 10 - build/node_modules/is-string/CHANGELOG.md | 107 - build/node_modules/is-string/LICENSE | 22 - build/node_modules/is-string/README.md | 56 - build/node_modules/is-string/index.js | 24 - build/node_modules/is-string/package.json | 111 - build/node_modules/is-string/test/index.js | 39 - build/node_modules/is-symbol/.editorconfig | 13 - build/node_modules/is-symbol/.eslintignore | 1 - build/node_modules/is-symbol/.eslintrc | 14 - .../is-symbol/.github/FUNDING.yml | 12 - build/node_modules/is-symbol/.nycrc | 9 - build/node_modules/is-symbol/CHANGELOG.md | 113 - build/node_modules/is-symbol/LICENSE | 22 - build/node_modules/is-symbol/README.md | 45 - build/node_modules/is-symbol/index.js | 35 - build/node_modules/is-symbol/package.json | 107 - build/node_modules/is-symbol/test/index.js | 92 - .../node_modules/is-typed-array/.editorconfig | 20 - .../node_modules/is-typed-array/.eslintignore | 1 - build/node_modules/is-typed-array/.eslintrc | 9 - .../is-typed-array/.github/FUNDING.yml | 12 - build/node_modules/is-typed-array/.nycrc | 13 - .../node_modules/is-typed-array/CHANGELOG.md | 71 - build/node_modules/is-typed-array/LICENSE | 22 - build/node_modules/is-typed-array/README.md | 64 - build/node_modules/is-typed-array/index.js | 61 - .../node_modules/is-typed-array/package.json | 127 - .../node_modules/is-typed-array/test/index.js | 104 - .../is-unicode-supported/index.d.ts | 14 + .../is-unicode-supported/index.js | 13 + .../node_modules/is-unicode-supported/license | 9 + .../is-unicode-supported/package.json | 73 + .../is-unicode-supported/readme.md | 35 + build/node_modules/is/package.json | 2 +- build/node_modules/isarray/package.json | 6 +- build/node_modules/isbuffer/package.json | 2 +- build/node_modules/isexe/.npmignore | 2 + build/node_modules/isexe/LICENSE | 15 + build/node_modules/isexe/README.md | 51 + build/node_modules/isexe/index.js | 57 + build/node_modules/isexe/mode.js | 41 + build/node_modules/isexe/package.json | 60 + build/node_modules/isexe/test/basic.js | 221 + build/node_modules/isexe/windows.js | 42 + build/node_modules/jade/.npmignore | 15 - build/node_modules/jade/LICENSE | 22 - build/node_modules/jade/bin/jade | 147 - build/node_modules/jade/index.js | 4 - build/node_modules/jade/jade.js | 3586 -- build/node_modules/jade/jade.md | 510 - build/node_modules/jade/jade.min.js | 2 - build/node_modules/jade/lib/compiler.js | 642 - build/node_modules/jade/lib/doctypes.js | 18 - build/node_modules/jade/lib/filters.js | 97 - build/node_modules/jade/lib/inline-tags.js | 28 - build/node_modules/jade/lib/jade.js | 237 - build/node_modules/jade/lib/lexer.js | 771 - build/node_modules/jade/lib/nodes/attrs.js | 77 - .../jade/lib/nodes/block-comment.js | 33 - build/node_modules/jade/lib/nodes/block.js | 121 - build/node_modules/jade/lib/nodes/case.js | 43 - build/node_modules/jade/lib/nodes/code.js | 35 - build/node_modules/jade/lib/nodes/comment.js | 32 - build/node_modules/jade/lib/nodes/doctype.js | 29 - build/node_modules/jade/lib/nodes/each.js | 35 - build/node_modules/jade/lib/nodes/filter.js | 35 - build/node_modules/jade/lib/nodes/index.js | 20 - build/node_modules/jade/lib/nodes/literal.js | 32 - build/node_modules/jade/lib/nodes/mixin.js | 36 - build/node_modules/jade/lib/nodes/node.js | 25 - build/node_modules/jade/lib/nodes/tag.js | 95 - build/node_modules/jade/lib/nodes/text.js | 36 - build/node_modules/jade/lib/parser.js | 710 - build/node_modules/jade/lib/runtime.js | 174 - build/node_modules/jade/lib/self-closing.js | 19 - build/node_modules/jade/lib/utils.js | 49 - .../jade/node_modules/commander/.npmignore | 4 - .../jade/node_modules/commander/History.md | 107 - .../jade/node_modules/commander/Makefile | 7 - .../jade/node_modules/commander/Readme.md | 262 - .../jade/node_modules/commander/index.js | 2 - .../node_modules/commander/lib/commander.js | 1026 - .../jade/node_modules/commander/package.json | 60 - .../jade/node_modules/mkdirp/.gitignore.orig | 2 - .../jade/node_modules/mkdirp/.gitignore.rej | 5 - .../jade/node_modules/mkdirp/.npmignore | 2 - .../jade/node_modules/mkdirp/LICENSE | 21 - .../jade/node_modules/mkdirp/README.markdown | 54 - .../jade/node_modules/mkdirp/examples/pow.js | 6 - .../node_modules/mkdirp/examples/pow.js.orig | 6 - .../node_modules/mkdirp/examples/pow.js.rej | 19 - .../jade/node_modules/mkdirp/index.js | 79 - .../jade/node_modules/mkdirp/package.json | 58 - .../jade/node_modules/mkdirp/test/chmod.js | 38 - .../jade/node_modules/mkdirp/test/clobber.js | 37 - .../jade/node_modules/mkdirp/test/mkdirp.js | 28 - .../jade/node_modules/mkdirp/test/perm.js | 32 - .../node_modules/mkdirp/test/perm_sync.js | 39 - .../jade/node_modules/mkdirp/test/race.js | 41 - .../jade/node_modules/mkdirp/test/rel.js | 32 - .../jade/node_modules/mkdirp/test/sync.js | 27 - .../jade/node_modules/mkdirp/test/umask.js | 28 - .../node_modules/mkdirp/test/umask_sync.js | 27 - build/node_modules/jade/package.json | 70 - build/node_modules/jade/runtime.js | 179 - build/node_modules/jade/runtime.min.js | 1 - build/node_modules/jade/test.jade | 7 - build/node_modules/jade/testing/head.jade | 5 - build/node_modules/jade/testing/index.jade | 22 - build/node_modules/jade/testing/index.js | 11 - build/node_modules/jade/testing/layout.jade | 6 - build/node_modules/jade/testing/user.jade | 7 - build/node_modules/jade/testing/user.js | 27 - build/node_modules/js-yaml/CHANGELOG.md | 616 + build/node_modules/js-yaml/LICENSE | 21 + build/node_modules/js-yaml/README.md | 246 + build/node_modules/js-yaml/bin/js-yaml.js | 126 + build/node_modules/js-yaml/dist/js-yaml.js | 3874 ++ .../node_modules/js-yaml/dist/js-yaml.min.js | 2 + build/node_modules/js-yaml/dist/js-yaml.mjs | 3851 ++ build/node_modules/js-yaml/index.js | 47 + build/node_modules/js-yaml/lib/common.js | 59 + build/node_modules/js-yaml/lib/dumper.js | 965 + build/node_modules/js-yaml/lib/exception.js | 55 + build/node_modules/js-yaml/lib/loader.js | 1727 + build/node_modules/js-yaml/lib/schema.js | 121 + build/node_modules/js-yaml/lib/schema/core.js | 11 + .../js-yaml/lib/schema/default.js | 22 + .../js-yaml/lib/schema/failsafe.js | 17 + build/node_modules/js-yaml/lib/schema/json.js | 19 + build/node_modules/js-yaml/lib/snippet.js | 101 + build/node_modules/js-yaml/lib/type.js | 66 + build/node_modules/js-yaml/lib/type/binary.js | 125 + build/node_modules/js-yaml/lib/type/bool.js | 35 + build/node_modules/js-yaml/lib/type/float.js | 97 + build/node_modules/js-yaml/lib/type/int.js | 156 + build/node_modules/js-yaml/lib/type/map.js | 8 + build/node_modules/js-yaml/lib/type/merge.js | 12 + build/node_modules/js-yaml/lib/type/null.js | 35 + build/node_modules/js-yaml/lib/type/omap.js | 44 + build/node_modules/js-yaml/lib/type/pairs.js | 53 + build/node_modules/js-yaml/lib/type/seq.js | 8 + build/node_modules/js-yaml/lib/type/set.js | 29 + build/node_modules/js-yaml/lib/type/str.js | 8 + .../js-yaml/lib/type/timestamp.js | 88 + build/node_modules/js-yaml/package.json | 113 + build/node_modules/just-extend/LICENSE | 21 + build/node_modules/just-extend/README.md | 36 + build/node_modules/just-extend/index.d.ts | 4 + build/node_modules/just-extend/index.js | 72 + build/node_modules/just-extend/index.tests.ts | 62 + build/node_modules/just-extend/package.json | 58 + build/node_modules/kuler/package.json | 2 +- .../node_modules/isarray/package.json | 2 +- .../node_modules/readable-stream/package.json | 2 +- .../node_modules/string_decoder/package.json | 2 +- build/node_modules/level-blobs/package.json | 4 +- .../level-filesystem/package.json | 2 +- .../node_modules/level-fix-range/package.json | 2 +- build/node_modules/level-hooks/package.json | 2 +- .../node_modules/object-keys/package.json | 2 +- .../level-js/node_modules/xtend/package.json | 2 +- build/node_modules/level-js/package.json | 2 +- build/node_modules/level-peek/package.json | 2 +- .../node_modules/level-fix-range/package.json | 2 +- .../node_modules/xtend/package.json | 2 +- .../node_modules/level-sublevel/package.json | 2 +- .../levelup/node_modules/.bin/semver | 1 + .../levelup/node_modules/isarray/package.json | 2 +- .../levelup/node_modules/prr/package.json | 2 +- .../node_modules/readable-stream/package.json | 2 +- .../node_modules}/semver/.npmignore | 0 .../node_modules/semver}/LICENSE | 0 .../node_modules}/semver/Makefile | 0 .../levelup/node_modules/semver/README.md | 158 + .../node_modules}/semver/bin/semver | 0 .../{ => levelup/node_modules}/semver/foot.js | 0 .../{ => levelup/node_modules}/semver/head.js | 0 .../levelup/node_modules/semver/package.json | 53 + .../node_modules}/semver/semver.browser.js | 0 .../node_modules}/semver/semver.browser.js.gz | Bin .../node_modules}/semver/semver.js | 0 .../node_modules}/semver/semver.min.js | 0 .../node_modules}/semver/semver.min.js.gz | Bin .../node_modules}/semver/test/amd.js | 0 .../node_modules}/semver/test/gtr.js | 0 .../node_modules}/semver/test/index.js | 0 .../node_modules}/semver/test/ltr.js | 0 .../node_modules}/semver/test/no-module.js | 0 .../node_modules/string_decoder/package.json | 2 +- .../levelup/node_modules/xtend/package.json | 2 +- build/node_modules/levelup/package.json | 4 +- build/node_modules/locate-path/index.d.ts | 83 + build/node_modules/locate-path/index.js | 68 + build/node_modules/locate-path/license | 9 + build/node_modules/locate-path/package.json | 78 + build/node_modules/locate-path/readme.md | 125 + build/node_modules/lodash.get/LICENSE | 47 + build/node_modules/lodash.get/README.md | 18 + build/node_modules/lodash.get/index.js | 931 + build/node_modules/lodash.get/package.json | 69 + build/node_modules/log-symbols/browser.js | 8 + build/node_modules/log-symbols/index.d.ts | 25 + build/node_modules/log-symbols/index.js | 19 + build/node_modules/log-symbols/license | 9 + build/node_modules/log-symbols/package.json | 84 + build/node_modules/log-symbols/readme.md | 51 + build/node_modules/logform/.eslintrc | 2 +- build/node_modules/logform/.travis.yml | 17 - build/node_modules/logform/CHANGELOG.md | 24 + build/node_modules/logform/README.md | 32 +- build/node_modules/logform/browser.js | 4 +- build/node_modules/logform/cli.js | 2 +- build/node_modules/logform/colorize.js | 4 +- build/node_modules/logform/dist/browser.js | 10 +- build/node_modules/logform/dist/cli.js | 4 +- build/node_modules/logform/dist/colorize.js | 10 +- build/node_modules/logform/dist/errors.js | 2 +- build/node_modules/logform/dist/format.js | 14 +- build/node_modules/logform/dist/index.js | 73 +- build/node_modules/logform/dist/json.js | 13 +- build/node_modules/logform/dist/logstash.js | 2 +- build/node_modules/logform/dist/pad-levels.js | 8 +- build/node_modules/logform/dist/printf.js | 2 +- build/node_modules/logform/dist/simple.js | 2 +- build/node_modules/logform/dist/splat.js | 4 +- build/node_modules/logform/dist/uncolorize.js | 2 +- build/node_modules/logform/errors.js | 2 +- build/node_modules/logform/index.d.ts | 36 + build/node_modules/logform/index.js | 39 +- build/node_modules/logform/json.js | 14 +- build/node_modules/logform/logstash.js | 2 +- build/node_modules/logform/package.json | 34 +- build/node_modules/logform/simple.js | 2 +- build/node_modules/logform/uncolorize.js | 2 +- build/node_modules/lolex/.editorconfig | 17 - build/node_modules/lolex/.jslintrc | 5 - build/node_modules/lolex/.min-wd | 13 - build/node_modules/lolex/.npmignore | 1 - build/node_modules/lolex/.travis.yml | 10 - build/node_modules/lolex/Readme.md | 139 - build/node_modules/lolex/lolex.js | 525 - build/node_modules/lolex/package.json | 59 - build/node_modules/lolex/script/ci-test.sh | 5 - build/node_modules/lolex/src/lolex.js | 519 - build/node_modules/lolex/test/lolex-test.js | 1260 - build/node_modules/lru-cache/.npmignore | 1 - build/node_modules/lru-cache/.travis.yml | 8 - build/node_modules/lru-cache/CONTRIBUTORS | 14 - build/node_modules/lru-cache/README.md | 85 +- build/node_modules/lru-cache/index.js | 334 + build/node_modules/lru-cache/lib/lru-cache.js | 334 - build/node_modules/lru-cache/package.json | 45 +- build/node_modules/lru-cache/test/basic.js | 396 - build/node_modules/lru-cache/test/foreach.js | 120 - .../lru-cache/test/memory-leak.js | 51 - .../node_modules/lru-cache/test/serialize.js | 216 - build/node_modules/ltgt/package.json | 2 +- build/node_modules/magic-string/CHANGELOG.md | 394 - build/node_modules/magic-string/README.md | 38 +- .../magic-string/dist/magic-string.cjs.js | 164 +- .../magic-string/dist/magic-string.cjs.js.map | 2 +- .../magic-string/dist/magic-string.es.js | 167 +- .../magic-string/dist/magic-string.es.js.map | 2 +- .../magic-string/dist/magic-string.umd.js | 174 +- .../magic-string/dist/magic-string.umd.js.map | 2 +- build/node_modules/magic-string/index.d.ts | 134 +- build/node_modules/magic-string/package.json | 46 +- build/node_modules/md5.js/package.json | 2 +- build/node_modules/methods/package.json | 12 +- .../node_modules/bn.js/package.json | 2 +- build/node_modules/miller-rabin/package.json | 2 +- build/node_modules/mime-db/HISTORY.md | 27 + build/node_modules/mime-db/LICENSE | 37 +- build/node_modules/mime-db/README.md | 2 +- build/node_modules/mime-db/db.json | 154 +- build/node_modules/mime-db/index.js | 1 + build/node_modules/mime-db/package.json | 35 +- build/node_modules/mime-types/HISTORY.md | 32 +- build/node_modules/mime-types/README.md | 2 +- build/node_modules/mime-types/package.json | 22 +- build/node_modules/mime/CHANGELOG.md | 346 +- build/node_modules/mime/Mime.js | 97 + build/node_modules/mime/README.md | 201 +- build/node_modules/mime/cli.js | 44 +- build/node_modules/mime/index.js | 4 + build/node_modules/mime/lite.js | 4 + build/node_modules/mime/mime.js | 108 - build/node_modules/mime/package.json | 64 +- build/node_modules/mime/src/build.js | 53 - build/node_modules/mime/src/test.js | 60 - build/node_modules/mime/types.json | 1 - build/node_modules/mime/types/other.js | 1 + build/node_modules/mime/types/standard.js | 1 + .../minimalistic-assert/package.json | 2 +- .../minimalistic-crypto-utils/package.json | 2 +- build/node_modules/minimatch/.npmignore | 1 - build/node_modules/minimatch/LICENSE | 32 +- build/node_modules/minimatch/README.md | 38 +- build/node_modules/minimatch/minimatch.js | 804 +- build/node_modules/minimatch/package.json | 43 +- build/node_modules/minimatch/test/basic.js | 399 - .../minimatch/test/brace-expand.js | 33 - build/node_modules/minimatch/test/caching.js | 14 - build/node_modules/minimatch/test/defaults.js | 274 - .../test/extglob-ending-with-state-char.js | 8 - build/node_modules/minimist/index.js | 8 +- build/node_modules/minimist/package.json | 20 +- build/node_modules/minimist/readme.markdown | 5 +- build/node_modules/minimist/test/proto.js | 16 + build/node_modules/mkdirp/index.js | 7 +- build/node_modules/mkdirp/package.json | 15 +- build/node_modules/mocha/HISTORY.md | 1042 - build/node_modules/mocha/LICENSE | 2 +- build/node_modules/mocha/README.md | 71 +- .../mocha/{images => assets/growl}/error.png | Bin .../mocha/{images => assets/growl}/ok.png | Bin build/node_modules/mocha/bin/.eslintrc | 3 - build/node_modules/mocha/bin/_mocha | 489 +- build/node_modules/mocha/bin/mocha | 186 +- build/node_modules/mocha/bin/options.js | 37 - build/node_modules/mocha/browser-entry.js | 226 + build/node_modules/mocha/index.js | 6 +- build/node_modules/mocha/lib/browser/debug.js | 4 - build/node_modules/mocha/lib/browser/diff.js | 369 - .../node_modules/mocha/lib/browser/events.js | 193 - build/node_modules/mocha/lib/browser/growl.js | 169 + .../mocha/lib/browser/highlight-tags.js | 39 + .../mocha/lib/browser/parse-query.js | 24 + .../mocha/lib/browser/progress.js | 26 +- .../mocha/lib/browser/template.html | 20 + build/node_modules/mocha/lib/browser/tty.js | 11 - build/node_modules/mocha/lib/cli/cli.js | 89 + .../mocha/lib/cli/collect-files.js | 92 + build/node_modules/mocha/lib/cli/commands.js | 13 + build/node_modules/mocha/lib/cli/config.js | 100 + build/node_modules/mocha/lib/cli/index.js | 3 + build/node_modules/mocha/lib/cli/init.js | 36 + .../mocha/lib/cli/lookup-files.js | 145 + .../node_modules/mocha/lib/cli/node-flags.js | 85 + .../mocha/lib/cli/one-and-dones.js | 69 + build/node_modules/mocha/lib/cli/options.js | 261 + .../node_modules/mocha/lib/cli/run-helpers.js | 243 + .../mocha/lib/cli/run-option-metadata.js | 117 + build/node_modules/mocha/lib/cli/run.js | 379 + build/node_modules/mocha/lib/cli/watch-run.js | 377 + build/node_modules/mocha/lib/context.js | 63 +- build/node_modules/mocha/lib/errors.js | 563 + build/node_modules/mocha/lib/hook.js | 59 +- .../node_modules/mocha/lib/interfaces/bdd.js | 76 +- .../mocha/lib/interfaces/common.js | 131 +- .../mocha/lib/interfaces/exports.js | 15 +- .../mocha/lib/interfaces/index.js | 2 + .../mocha/lib/interfaces/qunit.js | 49 +- .../node_modules/mocha/lib/interfaces/tdd.js | 61 +- build/node_modules/mocha/lib/mocha.js | 1405 +- build/node_modules/mocha/lib/mocharc.json | 10 + build/node_modules/mocha/lib/ms.js | 128 - .../mocha/lib/nodejs/buffered-worker-pool.js | 188 + .../mocha/lib/nodejs/esm-utils.js | 124 + .../mocha/lib/nodejs/file-unloader.js | 15 + build/node_modules/mocha/lib/nodejs/growl.js | 137 + .../lib/nodejs/parallel-buffered-runner.js | 433 + .../lib/nodejs/reporters/parallel-buffered.js | 165 + .../mocha/lib/nodejs/serializer.js | 412 + build/node_modules/mocha/lib/nodejs/worker.js | 151 + build/node_modules/mocha/lib/pending.js | 5 +- build/node_modules/mocha/lib/plugin-loader.js | 286 + .../node_modules/mocha/lib/reporters/base.js | 471 +- build/node_modules/mocha/lib/reporters/doc.js | 75 +- build/node_modules/mocha/lib/reporters/dot.js | 49 +- .../mocha/lib/reporters/html-cov.js | 56 - .../node_modules/mocha/lib/reporters/html.js | 258 +- .../node_modules/mocha/lib/reporters/index.js | 4 +- .../mocha/lib/reporters/json-cov.js | 150 - .../mocha/lib/reporters/json-stream.js | 75 +- .../node_modules/mocha/lib/reporters/json.js | 105 +- .../mocha/lib/reporters/landing.js | 52 +- .../node_modules/mocha/lib/reporters/list.js | 57 +- .../mocha/lib/reporters/markdown.js | 39 +- build/node_modules/mocha/lib/reporters/min.js | 30 +- .../node_modules/mocha/lib/reporters/nyan.js | 89 +- .../mocha/lib/reporters/progress.js | 49 +- .../node_modules/mocha/lib/reporters/spec.js | 76 +- build/node_modules/mocha/lib/reporters/tap.js | 285 +- .../lib/reporters/templates/coverage.jade | 51 - .../mocha/lib/reporters/templates/menu.jade | 13 - .../mocha/lib/reporters/templates/script.html | 34 - .../mocha/lib/reporters/templates/style.html | 324 - .../node_modules/mocha/lib/reporters/xunit.js | 142 +- build/node_modules/mocha/lib/runnable.js | 398 +- build/node_modules/mocha/lib/runner.js | 1012 +- .../node_modules/mocha/lib/stats-collector.js | 83 + build/node_modules/mocha/lib/suite.js | 529 +- build/node_modules/mocha/lib/template.html | 18 - build/node_modules/mocha/lib/test.js | 111 +- build/node_modules/mocha/lib/utils.js | 822 +- build/node_modules/mocha/mocha-es2018.js | 19794 +++++++ build/node_modules/mocha/mocha.css | 42 +- build/node_modules/mocha/mocha.js | 43670 +++++++++++----- build/node_modules/mocha/mocha.js.map | 1 + .../mocha/node_modules/.bin/mkdirp | 1 - .../mocha/node_modules/debug/.jshintrc | 3 - .../mocha/node_modules/debug/.npmignore | 6 - .../mocha/node_modules/debug/History.md | 195 - .../mocha/node_modules/debug/LICENSE | 20 + .../mocha/node_modules/debug/Makefile | 36 - .../mocha/node_modules/debug/README.md | 478 + .../mocha/node_modules/debug/Readme.md | 188 - .../mocha/node_modules/debug/bower.json | 28 - .../mocha/node_modules/debug/browser.js | 168 - .../mocha/node_modules/debug/component.json | 19 - .../mocha/node_modules/debug/debug.js | 197 - .../mocha/node_modules/debug/node.js | 209 - .../debug/node_modules/ms/index.js | 162 + .../debug/node_modules/ms/license.md | 21 + .../debug/node_modules/ms/package.json | 69 + .../debug/node_modules/ms/readme.md | 60 + .../mocha/node_modules/debug/package.json | 85 +- .../mocha/node_modules/debug/src/browser.js | 269 + .../mocha/node_modules/debug/src/common.js | 274 + .../mocha/node_modules/debug/src/index.js | 10 + .../mocha/node_modules/debug/src/node.js | 263 + .../mocha/node_modules/minimatch/LICENSE | 15 + .../mocha/node_modules/minimatch/README.md | 230 + .../mocha/node_modules/minimatch/minimatch.js | 908 + .../mocha/node_modules/minimatch/package.json | 64 + .../mocha/node_modules/minimist/.travis.yml | 4 - .../node_modules/minimist/example/parse.js | 2 - .../mocha/node_modules/minimist/index.js | 187 - .../mocha/node_modules/minimist/package.json | 71 - .../node_modules/minimist/readme.markdown | 73 - .../mocha/node_modules/minimist/test/dash.js | 24 - .../minimist/test/default_bool.js | 20 - .../node_modules/minimist/test/dotted.js | 16 - .../mocha/node_modules/minimist/test/long.js | 31 - .../mocha/node_modules/minimist/test/parse.js | 318 - .../minimist/test/parse_modified.js | 9 - .../mocha/node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/whitespace.js | 8 - .../mocha/node_modules/mkdirp/.npmignore | 2 - .../mocha/node_modules/mkdirp/.travis.yml | 5 - .../mocha/node_modules/mkdirp/LICENSE | 21 - .../mocha/node_modules/mkdirp/bin/cmd.js | 33 - .../mocha/node_modules/mkdirp/bin/usage.txt | 12 - .../mocha/node_modules/mkdirp/examples/pow.js | 6 - .../mocha/node_modules/mkdirp/index.js | 97 - .../mocha/node_modules/mkdirp/package.json | 62 - .../mocha/node_modules/mkdirp/readme.markdown | 100 - .../mocha/node_modules/mkdirp/test/chmod.js | 38 - .../mocha/node_modules/mkdirp/test/clobber.js | 37 - .../mocha/node_modules/mkdirp/test/mkdirp.js | 26 - .../mocha/node_modules/mkdirp/test/opts_fs.js | 27 - .../node_modules/mkdirp/test/opts_fs_sync.js | 25 - .../mocha/node_modules/mkdirp/test/perm.js | 30 - .../node_modules/mkdirp/test/perm_sync.js | 34 - .../mocha/node_modules/mkdirp/test/race.js | 40 - .../mocha/node_modules/mkdirp/test/rel.js | 30 - .../mocha/node_modules/mkdirp/test/return.js | 25 - .../node_modules/mkdirp/test/return_sync.js | 24 - .../mocha/node_modules/mkdirp/test/root.js | 18 - .../mocha/node_modules/mkdirp/test/sync.js | 30 - .../mocha/node_modules/mkdirp/test/umask.js | 26 - .../node_modules/mkdirp/test/umask_sync.js | 30 - .../mocha/node_modules/ms/.npmignore | 5 - .../mocha/node_modules/ms/History.md | 66 - .../mocha/node_modules/ms/LICENSE | 20 - .../mocha/node_modules/ms/README.md | 35 - .../mocha/node_modules/ms/index.js | 87 +- .../mocha/node_modules/ms/license.md | 21 + .../mocha/node_modules/ms/package.json | 69 +- .../mocha/node_modules/ms/readme.md | 59 + build/node_modules/mocha/package.json | 1204 +- build/node_modules/ms/index.js | 2 +- build/node_modules/ms/license.md | 2 +- build/node_modules/ms/package.json | 33 +- build/node_modules/ms/readme.md | 3 +- build/node_modules/nanoid/LICENSE | 20 + build/node_modules/nanoid/README.md | 39 + .../nanoid/async/index.browser.cjs | 34 + .../nanoid/async/index.browser.js | 34 + build/node_modules/nanoid/async/index.cjs | 35 + build/node_modules/nanoid/async/index.d.ts | 56 + build/node_modules/nanoid/async/index.js | 35 + .../node_modules/nanoid/async/index.native.js | 26 + build/node_modules/nanoid/async/package.json | 12 + build/node_modules/nanoid/bin/nanoid.cjs | 55 + build/node_modules/nanoid/index.browser.cjs | 37 + build/node_modules/nanoid/index.browser.js | 37 + build/node_modules/nanoid/index.cjs | 45 + build/node_modules/nanoid/index.d.ts | 91 + build/node_modules/nanoid/index.js | 45 + build/node_modules/nanoid/nanoid.js | 1 + .../node_modules/nanoid/non-secure/index.cjs | 21 + .../node_modules/nanoid/non-secure/index.d.ts | 33 + build/node_modules/nanoid/non-secure/index.js | 21 + .../nanoid/non-secure/package.json | 6 + build/node_modules/nanoid/package.json | 97 + .../nanoid/url-alphabet/index.cjs | 3 + .../node_modules/nanoid/url-alphabet/index.js | 3 + .../nanoid/url-alphabet/package.json | 6 + build/node_modules/nise/LICENSE | 27 + build/node_modules/nise/README.md | 84 + .../nise/lib/configure-logger/index.js | 53 + .../nise/lib/configure-logger/index.test.js | 159 + .../nise/lib/event/custom-event.js | 14 + .../nise/lib/event/event-target.js | 122 + build/node_modules/nise/lib/event/event.js | 24 + build/node_modules/nise/lib/event/index.js | 8 + .../node_modules/nise/lib/event/index.test.js | 263 + .../nise/lib/event/progress-event.js | 22 + .../lib/fake-server/fake-server-with-clock.js | 73 + .../fake-server-with-clock.test.js | 290 + .../nise/lib/fake-server/index.js | 333 + .../nise/lib/fake-server/index.test.js | 1633 + .../node_modules/nise/lib/fake-server/log.js | 16 + .../nise/lib/fake-server/log.test.js | 61 + build/node_modules/nise/lib/fake-xhr/blob.js | 9 + build/node_modules/nise/lib/fake-xhr/index.js | 920 + .../nise/lib/fake-xhr/index.test.js | 2870 + build/node_modules/nise/lib/index.js | 7 + build/node_modules/nise/lib/index.test.js | 27 + build/node_modules/nise/nise.js | 8662 +++ build/node_modules/nise/package.json | 109 + build/node_modules/normalize-path/LICENSE | 21 + build/node_modules/normalize-path/README.md | 127 + build/node_modules/normalize-path/index.js | 35 + .../node_modules/normalize-path/package.json | 115 + build/node_modules/object-inspect/.eslintrc | 13 +- .../node_modules/object-inspect/CHANGELOG.md | 342 + build/node_modules/object-inspect/index.js | 99 +- .../node_modules/object-inspect/package.json | 42 +- .../object-inspect/readme.markdown | 3 +- .../object-inspect/test/bigint.js | 16 +- build/node_modules/object-inspect/test/err.js | 23 +- .../node_modules/object-inspect/test/fakes.js | 4 +- .../object-inspect/test/inspect.js | 36 +- .../object-inspect/test/number.js | 48 +- .../object-inspect/test/toStringTag.js | 4 +- .../object-inspect/test/values.js | 3 +- build/node_modules/object-keys/package.json | 2 +- .../node_modules/object.assign/.editorconfig | 20 - .../node_modules/object.assign/.eslintignore | 1 - build/node_modules/object.assign/.eslintrc | 26 - .../object.assign/.github/FUNDING.yml | 12 - .../.github/workflows/rebase.yml | 15 - .../.github/workflows/require-allow-edits.yml | 14 - build/node_modules/object.assign/.nycrc | 14 - build/node_modules/object.assign/CHANGELOG.md | 201 - build/node_modules/object.assign/LICENSE | 21 - build/node_modules/object.assign/README.md | 135 - build/node_modules/object.assign/auto.js | 3 - .../object.assign/dist/browser.js | 865 - .../node_modules/object.assign/hasSymbols.js | 43 - .../object.assign/implementation.js | 42 - build/node_modules/object.assign/index.js | 22 - .../node_modules/object-keys/.editorconfig | 13 - .../node_modules/object-keys/.eslintrc | 17 - .../node_modules/object-keys/.travis.yml | 277 - .../node_modules/object-keys/CHANGELOG.md | 232 - .../node_modules/object-keys/LICENSE | 21 - .../node_modules/object-keys/README.md | 76 - .../object-keys/implementation.js | 122 - .../node_modules/object-keys/index.js | 32 - .../node_modules/object-keys/isArguments.js | 17 - .../node_modules/object-keys/package.json | 117 - .../node_modules/object-keys/test/index.js | 5 - build/node_modules/object.assign/package.json | 114 - build/node_modules/object.assign/polyfill.js | 55 - build/node_modules/object.assign/shim.js | 14 - .../node_modules/object.assign/test/index.js | 17 - .../node_modules/object.assign/test/native.js | 49 - .../object.assign/test/ses-compat.js | 12 - .../object.assign/test/shimmed.js | 52 - .../node_modules/object.assign/test/tests.js | 237 - build/node_modules/octal/package.json | 2 +- build/node_modules/once/package.json | 19 +- build/node_modules/one-time/package.json | 2 +- build/node_modules/p-limit/index.d.ts | 42 + build/node_modules/p-limit/index.js | 71 + build/node_modules/p-limit/license | 9 + build/node_modules/p-limit/package.json | 84 + build/node_modules/p-limit/readme.md | 101 + build/node_modules/p-locate/index.d.ts | 53 + build/node_modules/p-locate/index.js | 50 + build/node_modules/p-locate/license | 9 + build/node_modules/p-locate/package.json | 86 + build/node_modules/p-locate/readme.md | 93 + build/node_modules/parse-asn1/package.json | 2 +- build/node_modules/path-exists/index.d.ts | 28 + build/node_modules/path-exists/index.js | 23 + build/node_modules/path-exists/license | 9 + build/node_modules/path-exists/package.json | 71 + build/node_modules/path-exists/readme.md | 52 + build/node_modules/path-is-absolute/index.js | 20 + build/node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 75 + build/node_modules/path-is-absolute/readme.md | 59 + build/node_modules/path-parse/package.json | 12 +- build/node_modules/path-to-regexp/History.md | 158 + build/node_modules/path-to-regexp/LICENSE | 21 + build/node_modules/path-to-regexp/Readme.md | 257 + build/node_modules/path-to-regexp/index.d.ts | 84 + build/node_modules/path-to-regexp/index.js | 426 + .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 19 + .../node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 57 + .../node_modules/path-to-regexp/package.json | 76 + build/node_modules/pbkdf2/package.json | 2 +- build/node_modules/picomatch/CHANGELOG.md | 136 + build/node_modules/picomatch/LICENSE | 21 + build/node_modules/picomatch/README.md | 708 + build/node_modules/picomatch/index.js | 3 + build/node_modules/picomatch/lib/constants.js | 179 + build/node_modules/picomatch/lib/parse.js | 1091 + build/node_modules/picomatch/lib/picomatch.js | 342 + build/node_modules/picomatch/lib/scan.js | 391 + build/node_modules/picomatch/lib/utils.js | 64 + build/node_modules/picomatch/package.json | 114 + build/node_modules/process-es6/package.json | 2 +- .../process-nextick-args/package.json | 6 +- build/node_modules/prr/package.json | 2 +- .../node_modules/bn.js/package.json | 2 +- .../node_modules/public-encrypt/package.json | 2 +- build/node_modules/qs/.editorconfig | 1 + build/node_modules/qs/.eslintignore | 2 - build/node_modules/qs/.eslintrc | 7 +- build/node_modules/qs/CHANGELOG.md | 16 + build/node_modules/qs/README.md | 48 +- build/node_modules/qs/dist/qs.js | 239 +- build/node_modules/qs/lib/parse.js | 2 +- build/node_modules/qs/lib/stringify.js | 43 +- build/node_modules/qs/lib/utils.js | 1 + build/node_modules/qs/package.json | 37 +- build/node_modules/qs/test/parse.js | 60 + build/node_modules/qs/test/stringify.js | 45 +- build/node_modules/randombytes/package.json | 17 +- build/node_modules/randomfill/package.json | 2 +- build/node_modules/readable-stream/README.md | 74 +- .../readable-stream/errors-browser.js | 0 .../readable-stream/errors.js | 0 .../readable-stream/experimentalWarning.js | 0 .../readable-stream/lib/_stream_duplex.js | 96 +- .../lib/_stream_passthrough.js | 10 +- .../readable-stream/lib/_stream_readable.js | 787 +- .../readable-stream/lib/_stream_transform.js | 71 +- .../readable-stream/lib/_stream_writable.js | 390 +- .../lib/internal/streams/async_iterator.js | 0 .../lib/internal/streams/buffer_list.js | 0 .../lib/internal/streams/destroy.js | 65 +- .../lib/internal/streams/end-of-stream.js | 0 .../lib/internal/streams/from-browser.js | 0 .../lib/internal/streams/from.js | 0 .../lib/internal/streams/pipeline.js | 0 .../lib/internal/streams/state.js | 0 .../node_modules/readable-stream/package.json | 74 +- .../readable-stream/readable-browser.js | 2 + .../node_modules/readable-stream/readable.js | 13 +- build/node_modules/readdirp/LICENSE | 21 + build/node_modules/readdirp/README.md | 122 + build/node_modules/readdirp/index.d.ts | 43 + build/node_modules/readdirp/index.js | 287 + build/node_modules/readdirp/package.json | 158 + .../node_modules/require-directory/.jshintrc | 67 + .../node_modules/require-directory/.npmignore | 1 + .../.travis.yml | 0 build/node_modules/require-directory/LICENSE | 22 + .../require-directory/README.markdown | 184 + build/node_modules/require-directory/index.js | 86 + .../require-directory/package.json | 69 + build/node_modules/resolve/.eslintignore | 1 - build/node_modules/resolve/.eslintrc | 42 +- .../node_modules/resolve/.github/FUNDING.yml | 12 + build/node_modules/resolve/appveyor.yml | 6 +- build/node_modules/resolve/async.js | 3 + build/node_modules/resolve/bin/resolve | 50 + build/node_modules/resolve/lib/async.js | 11 +- build/node_modules/resolve/lib/core.js | 3 +- build/node_modules/resolve/lib/core.json | 101 +- build/node_modules/resolve/lib/homedir.js | 24 + .../resolve/lib/node-modules-paths.js | 2 +- build/node_modules/resolve/lib/sync.js | 19 +- build/node_modules/resolve/package.json | 59 +- build/node_modules/resolve/readme.markdown | 48 +- build/node_modules/resolve/sync.js | 3 + build/node_modules/resolve/test/.eslintrc | 5 - build/node_modules/resolve/test/home_paths.js | 127 + .../resolve/test/home_paths_sync.js | 114 + build/node_modules/resolve/test/mock_sync.js | 6 +- build/node_modules/resolve/test/node_path.js | 2 +- build/node_modules/resolve/test/resolver.js | 102 +- .../test/resolver/invalid_main/package.json | 2 +- .../resolver/malformed_package_json/index.js} | 0 .../malformed_package_json/package.json | 1 + .../resolve/test/resolver_sync.js | 333 +- build/node_modules/ripemd160/package.json | 2 +- .../rollup-plugin-commonjs/CHANGELOG.md | 289 - .../rollup-plugin-commonjs/LICENSE | 21 - .../rollup-plugin-commonjs/README.md | 125 - .../dist/rollup-plugin-commonjs.cjs.js | 909 - .../dist/rollup-plugin-commonjs.cjs.js.map | 1 - .../dist/rollup-plugin-commonjs.es.js | 905 - .../dist/rollup-plugin-commonjs.es.js.map | 1 - .../rollup-plugin-commonjs/index.d.ts | 50 - .../rollup-plugin-commonjs/package.json | 88 - .../rollup-plugin-commonjs/src/ast-utils.js | 71 - .../src/default-resolver.js | 39 - .../rollup-plugin-commonjs/src/helpers.js | 24 - .../rollup-plugin-commonjs/src/index.js | 144 - .../rollup-plugin-commonjs/src/is-cjs.js | 28 - .../rollup-plugin-commonjs/src/resolve-id.js | 86 - .../rollup-plugin-commonjs/src/transform.js | 497 - .../rollup-plugin-commonjs/src/utils.js | 24 - .../rollup-plugin-json/CHANGELOG.md | 43 - .../node_modules/rollup-plugin-json/README.md | 59 - .../dist/rollup-plugin-json.cjs.js | 178 - .../dist/rollup-plugin-json.cjs.js.map | 1 - .../dist/rollup-plugin-json.es.js | 176 - .../dist/rollup-plugin-json.es.js.map | 1 - .../rollup-plugin-json/package.json | 70 - .../rollup-plugin-json/src/index.js | 171 - .../rollup-plugin-node-builtins/package.json | 2 +- .../node_modules/estree-walker/package.json | 2 +- .../node_modules/magic-string/package.json | 2 +- .../rollup-plugin-node-globals/package.json | 12 +- .../rollup-plugin-node-resolve/CHANGELOG.md | 91 - .../rollup-plugin-node-resolve/README.md | 102 - .../dist/rollup-plugin-node-resolve.cjs.js | 215 - .../dist/rollup-plugin-node-resolve.es.js | 211 - .../rollup-plugin-node-resolve/package.json | 82 - .../rollup-plugin-node-resolve/src/empty.js | 1 - .../rollup-plugin-node-resolve/src/index.js | 202 - .../node_modules/magic-string/package.json | 2 +- .../rollup-plugin-re/package.json | 2 +- .../node_modules/estree-walker/CHANGELOG.md | 55 + .../node_modules/estree-walker/README.md | 45 + .../estree-walker/dist/estree-walker.umd.js | 0 .../dist/estree-walker.umd.js.map | 0 .../node_modules}/estree-walker/index.d.ts | 0 .../node_modules/estree-walker/package.json | 61 + .../estree-walker/src/estree-walker.js | 0 .../rollup-pluginutils/package.json | 16 +- build/node_modules/safe-buffer/index.js | 3 + build/node_modules/safe-buffer/package.json | 46 +- .../safe-stable-stringify/CHANGELOG.md | 75 + .../safe-stable-stringify/LICENSE | 21 + .../safe-stable-stringify/esm/package.json | 4 + .../safe-stable-stringify/esm/wrapper.js | 6 + .../safe-stable-stringify/index.d.ts | 18 + .../safe-stable-stringify/index.js | 618 + .../safe-stable-stringify/package.json | 93 + .../safe-stable-stringify/readme.md | 170 + .../safe-stable-stringify/tsconfig.json | 22 + build/node_modules/safer-buffer/package.json | 2 +- build/node_modules/samsam/.npmignore | 1 - build/node_modules/samsam/.travis.yml | 1 - build/node_modules/samsam/AUTHORS | 2 - build/node_modules/samsam/Readme.md | 226 - build/node_modules/samsam/autolint.js | 23 - build/node_modules/samsam/jsTestDriver.conf | 9 - build/node_modules/samsam/lib/samsam.js | 399 - build/node_modules/samsam/package.json | 67 - build/node_modules/samsam/test/samsam-test.js | 386 - build/node_modules/semver/CHANGELOG.md | 111 + build/node_modules/semver/LICENSE | 36 +- build/node_modules/semver/README.md | 546 +- build/node_modules/semver/bin/semver.js | 173 + .../node_modules/semver/classes/comparator.js | 135 + build/node_modules/semver/classes/index.js | 5 + build/node_modules/semver/classes/range.js | 510 + build/node_modules/semver/classes/semver.js | 287 + build/node_modules/semver/functions/clean.js | 6 + build/node_modules/semver/functions/cmp.js | 48 + build/node_modules/semver/functions/coerce.js | 51 + .../semver/functions/compare-build.js | 7 + .../semver/functions/compare-loose.js | 3 + .../node_modules/semver/functions/compare.js | 5 + build/node_modules/semver/functions/diff.js | 23 + build/node_modules/semver/functions/eq.js | 3 + build/node_modules/semver/functions/gt.js | 3 + build/node_modules/semver/functions/gte.js | 3 + build/node_modules/semver/functions/inc.js | 15 + build/node_modules/semver/functions/lt.js | 3 + build/node_modules/semver/functions/lte.js | 3 + build/node_modules/semver/functions/major.js | 3 + build/node_modules/semver/functions/minor.js | 3 + build/node_modules/semver/functions/neq.js | 3 + build/node_modules/semver/functions/parse.js | 33 + build/node_modules/semver/functions/patch.js | 3 + .../semver/functions/prerelease.js | 6 + .../node_modules/semver/functions/rcompare.js | 3 + build/node_modules/semver/functions/rsort.js | 3 + .../semver/functions/satisfies.js | 10 + build/node_modules/semver/functions/sort.js | 3 + build/node_modules/semver/functions/valid.js | 6 + build/node_modules/semver/index.js | 48 + .../node_modules/semver/internal/constants.js | 17 + build/node_modules/semver/internal/debug.js | 9 + .../semver/internal/identifiers.js | 23 + .../semver/internal/parse-options.js | 11 + build/node_modules/semver/internal/re.js | 182 + build/node_modules/semver/package.json | 68 +- build/node_modules/semver/preload.js | 2 + build/node_modules/semver/range.bnf | 16 + build/node_modules/semver/ranges/gtr.js | 4 + .../node_modules/semver/ranges/intersects.js | 7 + build/node_modules/semver/ranges/ltr.js | 4 + .../semver/ranges/max-satisfying.js | 25 + .../semver/ranges/min-satisfying.js | 24 + .../node_modules/semver/ranges/min-version.js | 60 + build/node_modules/semver/ranges/outside.js | 80 + build/node_modules/semver/ranges/simplify.js | 44 + build/node_modules/semver/ranges/subset.js | 222 + .../semver/ranges/to-comparators.js | 8 + build/node_modules/semver/ranges/valid.js | 11 + .../node_modules/serialize-javascript/LICENSE | 27 + .../serialize-javascript/README.md | 142 + .../serialize-javascript/index.js | 268 + .../serialize-javascript/package.json | 64 + build/node_modules/sha.js/package.json | 2 +- build/node_modules/side-channel/package.json | 2 +- build/node_modules/sigmund/README.md | 53 - build/node_modules/sigmund/bench.js | 283 - build/node_modules/sigmund/package.json | 63 - build/node_modules/sigmund/sigmund.js | 39 - build/node_modules/sigmund/test/basic.js | 24 - .../node_modules/simple-swizzle/package.json | 2 +- build/node_modules/sinon/AUTHORS | 167 - build/node_modules/sinon/CONTRIBUTING.md | 142 +- build/node_modules/sinon/Changelog.txt | 544 - build/node_modules/sinon/LICENSE | 2 +- build/node_modules/sinon/README.md | 149 +- build/node_modules/sinon/lib/package.json | 3 + build/node_modules/sinon/lib/sinon-esm.js | 3 + build/node_modules/sinon/lib/sinon.js | 98 +- build/node_modules/sinon/lib/sinon/assert.js | 477 +- .../node_modules/sinon/lib/sinon/behavior.js | 579 +- build/node_modules/sinon/lib/sinon/call.js | 239 - .../sinon/lib/sinon/collect-own-methods.js | 27 + .../sinon/lib/sinon/collection.js | 173 - build/node_modules/sinon/lib/sinon/color.js | 31 + .../sinon/lib/sinon/create-sandbox.js | 68 + .../sinon/lib/sinon/default-behaviors.js | 283 + build/node_modules/sinon/lib/sinon/extend.js | 111 - build/node_modules/sinon/lib/sinon/fake.js | 287 + build/node_modules/sinon/lib/sinon/format.js | 94 - .../node_modules/sinon/lib/sinon/log_error.js | 84 - build/node_modules/sinon/lib/sinon/match.js | 261 - .../sinon/lib/sinon/mock-expectation.js | 321 + build/node_modules/sinon/lib/sinon/mock.js | 631 +- build/node_modules/sinon/lib/sinon/promise.js | 84 + .../sinon/lib/sinon/proxy-call-util.js | 67 + .../sinon/lib/sinon/proxy-call.js | 292 + .../sinon/lib/sinon/proxy-invoke.js | 88 + build/node_modules/sinon/lib/sinon/proxy.js | 366 + .../sinon/lib/sinon/restore-object.js | 17 + build/node_modules/sinon/lib/sinon/sandbox.js | 562 +- .../sinon/lib/sinon/spy-formatters.js | 143 + build/node_modules/sinon/lib/sinon/spy.js | 605 +- build/node_modules/sinon/lib/sinon/stub.js | 421 +- build/node_modules/sinon/lib/sinon/test.js | 100 - .../node_modules/sinon/lib/sinon/test_case.js | 106 - .../sinon/lib/sinon/throw-on-falsy-object.js | 13 + .../sinon/lib/sinon/times_in_words.js | 49 - build/node_modules/sinon/lib/sinon/typeOf.js | 53 - .../node_modules/sinon/lib/sinon/util/core.js | 401 - .../lib/sinon/util/core/default-config.js | 20 + .../sinon/util/core/export-async-behaviors.js | 22 + .../sinon/lib/sinon/util/core/extend.js | 154 + .../sinon/lib/sinon/util/core/format.js | 22 + .../lib/sinon/util/core/function-to-string.js | 25 + .../lib/sinon/util/core/get-next-tick.js | 18 + .../util/core/get-property-descriptor.js | 22 + .../sinon/lib/sinon/util/core/is-es-module.js | 21 + .../util/core/is-non-existent-property.js | 14 + .../util/core/is-property-configurable.js | 11 + .../lib/sinon/util/core/is-restorable.js | 11 + .../sinon/lib/sinon/util/core/next-tick.js | 6 + .../lib/sinon/util/core/times-in-words.js | 7 + .../sinon/util/core/use-promise-library.js | 21 + .../sinon/lib/sinon/util/core/walk-object.js | 45 + .../sinon/lib/sinon/util/core/walk.js | 49 + .../sinon/lib/sinon/util/core/wrap-method.js | 236 + .../sinon/lib/sinon/util/event.js | 111 - .../sinon/lib/sinon/util/fake-timers.js | 78 + .../sinon/lib/sinon/util/fake_server.js | 247 - .../lib/sinon/util/fake_server_with_clock.js | 101 - .../sinon/lib/sinon/util/fake_timers.js | 73 - .../lib/sinon/util/fake_xdomain_request.js | 239 - .../lib/sinon/util/fake_xml_http_request.js | 716 - .../sinon/lib/sinon/util/timers_ie.js | 35 - .../sinon/lib/sinon/util/xdr_ie.js | 18 - .../sinon/lib/sinon/util/xhr_ie.js | 23 - build/node_modules/sinon/lib/sinon/walk.js | 79 - .../node_modules/supports-color/browser.js | 5 + .../node_modules/supports-color/index.js | 135 + .../sinon/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 85 + .../node_modules/supports-color/readme.md | 76 + build/node_modules/sinon/package.json | 835 +- build/node_modules/sinon/pkg/sinon-1.10.0.js | 4 - build/node_modules/sinon/pkg/sinon-1.12.2.js | 5753 -- build/node_modules/sinon/pkg/sinon-1.15.0.js | 6036 --- build/node_modules/sinon/pkg/sinon-1.15.4.js | 6046 --- build/node_modules/sinon/pkg/sinon-1.16.0.js | 6194 --- build/node_modules/sinon/pkg/sinon-1.16.1.js | 6231 --- build/node_modules/sinon/pkg/sinon-1.17.0.js | 8945 ---- build/node_modules/sinon/pkg/sinon-1.17.2.js | 6401 --- build/node_modules/sinon/pkg/sinon-1.17.3.js | 6437 --- build/node_modules/sinon/pkg/sinon-1.6.0.js | 4261 -- build/node_modules/sinon/pkg/sinon-1.7.3.js | 4308 -- .../node_modules/sinon/pkg/sinon-2.0.0-pre.js | 9061 ---- build/node_modules/sinon/pkg/sinon-esm.js | 17531 +++++++ .../node_modules/sinon/pkg/sinon-ie-1.12.2.js | 97 - .../node_modules/sinon/pkg/sinon-ie-1.15.0.js | 103 - .../node_modules/sinon/pkg/sinon-ie-1.15.4.js | 103 - .../node_modules/sinon/pkg/sinon-ie-1.16.0.js | 112 - .../node_modules/sinon/pkg/sinon-ie-1.16.1.js | 112 - .../node_modules/sinon/pkg/sinon-ie-1.17.0.js | 103 - .../node_modules/sinon/pkg/sinon-ie-1.17.2.js | 112 - .../node_modules/sinon/pkg/sinon-ie-1.17.3.js | 112 - .../node_modules/sinon/pkg/sinon-ie-1.6.0.js | 82 - .../node_modules/sinon/pkg/sinon-ie-1.7.3.js | 82 - .../sinon/pkg/sinon-ie-2.0.0-pre.js | 103 - build/node_modules/sinon/pkg/sinon-ie.js | 112 - .../sinon/pkg/sinon-no-sourcemaps.cjs | 17445 ++++++ .../sinon/pkg/sinon-server-1.12.2.js | 1782 - .../sinon/pkg/sinon-server-1.15.0.js | 2108 - .../sinon/pkg/sinon-server-1.15.4.js | 2118 - .../sinon/pkg/sinon-server-1.16.0.js | 2174 - .../sinon/pkg/sinon-server-1.16.1.js | 2174 - .../sinon/pkg/sinon-server-1.17.0.js | 6264 --- .../sinon/pkg/sinon-server-1.17.2.js | 2260 - .../sinon/pkg/sinon-server-1.17.3.js | 2260 - .../sinon/pkg/sinon-server-1.6.0.js | 1573 - .../sinon/pkg/sinon-server-1.7.3.js | 1626 - .../sinon/pkg/sinon-server-2.0.0-pre.js | 2096 - build/node_modules/sinon/pkg/sinon-server.js | 2260 - .../sinon/pkg/sinon-timers-1.12.2.js | 111 - .../sinon/pkg/sinon-timers-1.15.0.js | 111 - .../sinon/pkg/sinon-timers-1.15.4.js | 111 - .../sinon/pkg/sinon-timers-1.16.0.js | 107 - .../sinon/pkg/sinon-timers-1.16.1.js | 107 - .../sinon/pkg/sinon-timers-1.6.0.js | 385 - .../sinon/pkg/sinon-timers-1.7.3.js | 385 - .../sinon/pkg/sinon-timers-ie-1.12.2.js | 65 - .../sinon/pkg/sinon-timers-ie-1.15.0.js | 67 - .../sinon/pkg/sinon-timers-ie-1.15.4.js | 67 - .../sinon/pkg/sinon-timers-ie-1.16.0.js | 70 - .../sinon/pkg/sinon-timers-ie-1.16.1.js | 70 - .../sinon/pkg/sinon-timers-ie-1.6.0.js | 62 - .../sinon/pkg/sinon-timers-ie-1.7.3.js | 62 - .../node_modules/sinon/pkg/sinon-timers-ie.js | 70 - build/node_modules/sinon/pkg/sinon-timers.js | 107 - build/node_modules/sinon/pkg/sinon.js | 21428 ++++++-- .../node_modules/sourcemap-codec/package.json | 12 +- build/node_modules/stack-trace/package.json | 2 +- build/node_modules/string-range/package.json | 2 +- build/node_modules/string-width/index.d.ts | 29 + build/node_modules/string-width/index.js | 47 + build/node_modules/string-width/license | 9 + build/node_modules/string-width/package.json | 90 + build/node_modules/string-width/readme.md | 50 + .../string.prototype.trimend/.editorconfig | 20 - .../string.prototype.trimend/.eslintignore | 1 - .../string.prototype.trimend/.eslintrc | 15 - .../string.prototype.trimend/.nycrc | 13 - .../string.prototype.trimend/CHANGELOG.md | 74 - .../string.prototype.trimend/LICENSE | 21 - .../string.prototype.trimend/README.md | 40 - .../string.prototype.trimend/auto.js | 3 - .../implementation.js | 12 - .../string.prototype.trimend/index.js | 18 - .../string.prototype.trimend/package.json | 107 - .../string.prototype.trimend/polyfill.js | 15 - .../string.prototype.trimend/shim.js | 14 - .../test/implementation.js | 20 - .../string.prototype.trimend/test/index.js | 17 - .../string.prototype.trimend/test/shimmed.js | 36 - .../string.prototype.trimend/test/tests.js | 26 - .../string.prototype.trimstart/.editorconfig | 20 - .../string.prototype.trimstart/.eslintignore | 1 - .../string.prototype.trimstart/.eslintrc | 15 - .../string.prototype.trimstart/.nycrc | 13 - .../string.prototype.trimstart/CHANGELOG.md | 74 - .../string.prototype.trimstart/LICENSE | 21 - .../string.prototype.trimstart/README.md | 40 - .../string.prototype.trimstart/auto.js | 3 - .../implementation.js | 12 - .../string.prototype.trimstart/index.js | 18 - .../string.prototype.trimstart/package.json | 107 - .../string.prototype.trimstart/polyfill.js | 15 - .../string.prototype.trimstart/shim.js | 14 - .../test/implementation.js | 20 - .../string.prototype.trimstart/test/index.js | 18 - .../test/shimmed.js | 36 - .../string.prototype.trimstart/test/tests.js | 26 - .../node_modules/string_decoder/package.json | 30 +- build/node_modules/strip-ansi/index.d.ts | 17 + build/node_modules/strip-ansi/index.js | 4 + build/node_modules/strip-ansi/license | 9 + build/node_modules/strip-ansi/package.json | 88 + build/node_modules/strip-ansi/readme.md | 46 + .../strip-json-comments/index.d.ts | 36 + .../node_modules/strip-json-comments/index.js | 77 + .../node_modules/strip-json-comments/license | 9 + .../strip-json-comments/package.json | 79 + .../strip-json-comments/readme.md | 78 + build/node_modules/superagent/.travis.yml | 16 - build/node_modules/superagent/.zuul.yml | 14 - build/node_modules/superagent/Contributing.md | 7 - build/node_modules/superagent/HISTORY.md | 692 + build/node_modules/superagent/History.md | 719 - build/node_modules/superagent/Makefile | 57 - build/node_modules/superagent/README.md | 274 + build/node_modules/superagent/Readme.md | 137 - build/node_modules/superagent/changelog.sh | 7 - .../superagent/dist/superagent.js | 3974 ++ .../superagent/dist/superagent.min.js | 1 + build/node_modules/superagent/docs/head.html | 11 - .../superagent/docs/images/bg.png | Bin 8856 -> 0 bytes build/node_modules/superagent/docs/index.md | 701 - build/node_modules/superagent/docs/style.css | 87 - build/node_modules/superagent/docs/tail.html | 36 - build/node_modules/superagent/docs/test.html | 2082 - .../node_modules/superagent/lib/agent-base.js | 62 +- build/node_modules/superagent/lib/client.js | 729 +- .../node_modules/superagent/lib/is-object.js | 15 - .../node_modules/superagent/lib/node/agent.js | 122 +- .../superagent/lib/node/http2wrapper.js | 220 + .../node_modules/superagent/lib/node/index.js | 1117 +- .../superagent/lib/node/parsers/image.js | 11 +- .../superagent/lib/node/parsers/index.js | 6 +- .../superagent/lib/node/parsers/json.js | 28 +- .../superagent/lib/node/parsers/text.js | 7 +- .../superagent/lib/node/parsers/urlencoded.js | 12 +- .../superagent/lib/node/response.js | 96 +- .../node_modules/superagent/lib/node/unzip.js | 67 +- .../superagent/lib/request-base.js | 463 +- .../superagent/lib/response-base.js | 117 +- build/node_modules/superagent/lib/utils.js | 127 +- build/node_modules/superagent/package.json | 261 +- build/node_modules/superagent/superagent.js | 2035 - build/node_modules/superagent/test.js | 7 - build/node_modules/superagent/yarn.lock | 3676 -- build/node_modules/supports-color/browser.js | 24 + build/node_modules/supports-color/cli.js | 29 - build/node_modules/supports-color/index.js | 155 +- build/node_modules/supports-color/license | 9 + .../node_modules/supports-color/package.json | 57 +- build/node_modules/supports-color/readme.md | 73 +- .../supports-preserve-symlinks-flag/.eslintrc | 14 + .../.github/FUNDING.yml | 12 + .../.nycrc | 0 .../CHANGELOG.md | 22 + .../supports-preserve-symlinks-flag/LICENSE | 21 + .../supports-preserve-symlinks-flag/README.md | 42 + .../browser.js | 3 + .../supports-preserve-symlinks-flag/index.js | 9 + .../package.json | 98 + .../test/index.js | 29 + build/node_modules/text-hex/package.json | 2 +- build/node_modules/to-regex-range/LICENSE | 21 + build/node_modules/to-regex-range/README.md | 305 + build/node_modules/to-regex-range/index.js | 288 + .../node_modules/to-regex-range/package.json | 125 + build/node_modules/triple-beam/package.json | 2 +- build/node_modules/type-detect/LICENSE | 19 + build/node_modules/type-detect/README.md | 228 + build/node_modules/type-detect/index.js | 378 + build/node_modules/type-detect/package.json | 169 + build/node_modules/type-detect/type-detect.js | 388 + .../typedarray-to-buffer/package.json | 2 +- build/node_modules/typedarray/package.json | 2 +- .../unbox-primitive/.editorconfig | 20 - .../unbox-primitive/.eslintignore | 1 - build/node_modules/unbox-primitive/.eslintrc | 5 - .../unbox-primitive/.github/FUNDING.yml | 12 - build/node_modules/unbox-primitive/.nycrc | 13 - .../node_modules/unbox-primitive/CHANGELOG.md | 47 - build/node_modules/unbox-primitive/LICENSE | 21 - build/node_modules/unbox-primitive/README.md | 41 - build/node_modules/unbox-primitive/index.js | 39 - .../node_modules/unbox-primitive/package.json | 92 - .../unbox-primitive/test/index.js | 59 - .../node_modules/util-deprecate/package.json | 18 +- build/node_modules/util/LICENSE | 18 - build/node_modules/util/README.md | 48 - build/node_modules/util/package.json | 78 - build/node_modules/util/support/isBuffer.js | 3 - .../util/support/isBufferBrowser.js | 6 - build/node_modules/util/support/types.js | 334 - build/node_modules/util/util.js | 715 - build/node_modules/vlq/package.json | 2 +- .../which-boxed-primitive/.editorconfig | 20 - .../which-boxed-primitive/.eslintignore | 1 - .../which-boxed-primitive/.eslintrc | 9 - .../which-boxed-primitive/.github/FUNDING.yml | 12 - .../node_modules/which-boxed-primitive/.nycrc | 13 - .../which-boxed-primitive/CHANGELOG.md | 54 - .../which-boxed-primitive/LICENSE | 21 - .../which-boxed-primitive/README.md | 73 - .../which-boxed-primitive/index.js | 30 - .../which-boxed-primitive/package.json | 93 - .../which-boxed-primitive/test/index.js | 66 - .../which-typed-array/.editorconfig | 20 - .../which-typed-array/.eslintignore | 1 - .../node_modules/which-typed-array/.eslintrc | 9 - .../which-typed-array/.github/FUNDING.yml | 12 - build/node_modules/which-typed-array/.nycrc | 13 - .../which-typed-array/CHANGELOG.md | 123 - build/node_modules/which-typed-array/LICENSE | 22 - .../node_modules/which-typed-array/README.md | 67 - build/node_modules/which-typed-array/index.js | 56 - .../which-typed-array/package.json | 135 - .../which-typed-array/test/index.js | 99 - build/node_modules/which/CHANGELOG.md | 166 + build/node_modules/which/LICENSE | 15 + build/node_modules/which/README.md | 54 + build/node_modules/which/bin/node-which | 52 + build/node_modules/which/package.json | 76 + build/node_modules/which/which.js | 125 + .../node_modules/winston-transport/.eslintrc | 2 +- .../1c69f3e4-4c25-457d-9df5-dfa761729528.json | 1 - .../c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json | 1 + .../1c69f3e4-4c25-457d-9df5-dfa761729528.json | 1 - .../c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json | 1 + .../.nyc_output/processinfo/index.json | 2 +- .../winston-transport/.travis.yml | 17 - .../winston-transport/CHANGELOG.md | 11 + .../winston-transport/dist/index.js | 4 +- .../node_modules/winston-transport/index.d.ts | 2 + build/node_modules/winston-transport/index.js | 4 +- .../winston-transport/package.json | 40 +- .../winston-transport/tsconfig.json | 22 - build/node_modules/winston/CHANGELOG.md | 560 - build/node_modules/winston/README.md | 99 +- build/node_modules/winston/dist/winston.js | 56 +- .../winston/dist/winston/container.js | 4 +- .../winston/dist/winston/create-logger.js | 14 +- .../winston/dist/winston/exception-handler.js | 2 +- .../winston/dist/winston/exception-stream.js | 10 +- .../winston/dist/winston/logger.js | 34 +- .../winston/dist/winston/profiler.js | 4 +- .../winston/dist/winston/rejection-handler.js | 12 +- .../dist/winston/transports/console.js | 12 +- .../winston/dist/winston/transports/file.js | 12 +- .../winston/dist/winston/transports/http.js | 96 +- .../winston/dist/winston/transports/stream.js | 12 +- build/node_modules/winston/index.d.ts | 20 + build/node_modules/winston/lib/winston.js | 54 +- .../winston/lib/winston/config/index.d.ts | 1 + .../winston/lib/winston/container.js | 2 +- .../winston/lib/winston/logger.js | 15 +- .../winston/lib/winston/rejection-handler.js | 10 +- .../winston/lib/winston/transports/console.js | 2 +- .../winston/lib/winston/transports/file.js | 2 +- .../winston/lib/winston/transports/http.js | 67 +- .../winston/lib/winston/transports/stream.js | 2 +- .../readable-stream/CONTRIBUTING.md | 38 - .../readable-stream/GOVERNANCE.md | 136 - .../node_modules/readable-stream/LICENSE | 47 - .../node_modules/readable-stream/README.md | 106 - .../readable-stream/errors-browser.js | 127 - .../node_modules/readable-stream/errors.js | 116 - .../readable-stream/experimentalWarning.js | 17 - .../readable-stream/lib/_stream_duplex.js | 139 - .../lib/_stream_passthrough.js | 39 - .../readable-stream/lib/_stream_readable.js | 1124 - .../readable-stream/lib/_stream_transform.js | 201 - .../readable-stream/lib/_stream_writable.js | 697 - .../lib/internal/streams/async_iterator.js | 207 - .../lib/internal/streams/buffer_list.js | 210 - .../lib/internal/streams/destroy.js | 105 - .../lib/internal/streams/end-of-stream.js | 104 - .../lib/internal/streams/from-browser.js | 3 - .../lib/internal/streams/from.js | 64 - .../lib/internal/streams/pipeline.js | 97 - .../lib/internal/streams/state.js | 27 - .../lib/internal/streams/stream-browser.js | 1 - .../lib/internal/streams/stream.js | 1 - .../node_modules/readable-stream/package.json | 97 - .../readable-stream/readable-browser.js | 9 - .../node_modules/readable-stream/readable.js | 16 - build/node_modules/winston/package.json | 73 +- build/node_modules/workerpool/HISTORY.md | 283 + build/node_modules/workerpool/LICENSE | 201 + build/node_modules/workerpool/README.md | 496 + build/node_modules/workerpool/dist/worker.js | 224 + .../workerpool/dist/worker.js.map | 1 + .../workerpool/dist/workerpool.js | 1683 + .../workerpool/dist/workerpool.js.map | 1 + .../workerpool/dist/workerpool.min.js | 3 + .../dist/workerpool.min.js.LICENSE.txt | 24 + .../workerpool/dist/workerpool.min.js.map | 1 + build/node_modules/workerpool/package.json | 84 + build/node_modules/workerpool/src/Pool.js | 441 + build/node_modules/workerpool/src/Promise.js | 279 + .../workerpool/src/WorkerHandler.js | 502 + .../workerpool/src/debug-port-allocator.js | 28 + .../workerpool/src/environment.js | 36 + .../src/generated/embeddedWorker.js | 6 + build/node_modules/workerpool/src/header.js | 24 + build/node_modules/workerpool/src/index.js | 41 + .../workerpool/src/requireFoolWebpack.js | 8 + build/node_modules/workerpool/src/types.js | 16 + build/node_modules/workerpool/src/worker.js | 202 + build/node_modules/wrap-ansi/index.js | 216 + build/node_modules/wrap-ansi/license | 9 + build/node_modules/wrap-ansi/package.json | 94 + build/node_modules/wrap-ansi/readme.md | 91 + build/node_modules/wrappy/package.json | 6 +- build/node_modules/xtend/package.json | 2 +- build/node_modules/y18n/CHANGELOG.md | 100 + build/node_modules/y18n/LICENSE | 13 + build/node_modules/y18n/README.md | 127 + build/node_modules/y18n/build/index.cjs | 203 + build/node_modules/y18n/build/lib/cjs.js | 6 + build/node_modules/y18n/build/lib/index.js | 174 + .../y18n/build/lib/platform-shims/node.js | 19 + build/node_modules/y18n/index.mjs | 8 + build/node_modules/y18n/package.json | 101 + build/node_modules/yallist/LICENSE | 15 + build/node_modules/yallist/README.md | 204 + build/node_modules/yallist/iterator.js | 8 + build/node_modules/yallist/package.json | 62 + build/node_modules/yallist/yallist.js | 426 + build/node_modules/yargs-parser/CHANGELOG.md | 226 + build/node_modules/yargs-parser/LICENSE.txt | 14 + build/node_modules/yargs-parser/README.md | 518 + build/node_modules/yargs-parser/browser.js | 29 + .../node_modules/yargs-parser/build/index.cjs | 1026 + .../yargs-parser/build/lib/index.js | 53 + .../yargs-parser/build/lib/string-utils.js | 56 + .../build/lib/tokenize-arg-string.js | 35 + .../build/lib/yargs-parser-types.js | 1 + .../yargs-parser/build/lib/yargs-parser.js | 1023 + build/node_modules/yargs-parser/package.json | 120 + .../node_modules/yargs-unparser/CHANGELOG.md | 82 + build/node_modules/yargs-unparser/LICENSE | 21 + build/node_modules/yargs-unparser/README.md | 86 + build/node_modules/yargs-unparser/index.js | 166 + .../node_modules/yargs-unparser/package.json | 83 + build/node_modules/yargs/CHANGELOG.md | 88 + build/node_modules/yargs/LICENSE | 21 + build/node_modules/yargs/README.md | 202 + build/node_modules/yargs/browser.mjs | 7 + build/node_modules/yargs/build/index.cjs | 2920 ++ build/node_modules/yargs/build/lib/argsert.js | 62 + build/node_modules/yargs/build/lib/command.js | 382 + .../yargs/build/lib/completion-templates.js | 47 + .../yargs/build/lib/completion.js | 128 + .../yargs/build/lib/middleware.js | 53 + .../yargs/build/lib/parse-command.js | 32 + .../yargs/build/lib/typings/common-types.js | 9 + .../build/lib/typings/yargs-parser-types.js | 1 + build/node_modules/yargs/build/lib/usage.js | 548 + .../yargs/build/lib/utils/apply-extends.js | 59 + .../yargs/build/lib/utils/is-promise.js | 5 + .../yargs/build/lib/utils/levenshtein.js | 26 + .../yargs/build/lib/utils/obj-filter.js | 10 + .../yargs/build/lib/utils/process-argv.js | 17 + .../yargs/build/lib/utils/set-blocking.js | 12 + .../yargs/build/lib/utils/which-module.js | 10 + .../yargs/build/lib/validation.js | 308 + .../yargs/build/lib/yargs-factory.js | 1143 + build/node_modules/yargs/build/lib/yerror.js | 7 + build/node_modules/yargs/helpers/helpers.mjs | 10 + build/node_modules/yargs/helpers/index.js | 14 + build/node_modules/yargs/helpers/package.json | 3 + build/node_modules/yargs/index.cjs | 39 + build/node_modules/yargs/index.mjs | 8 + .../yargs/lib/platform-shims/browser.mjs | 92 + .../yargs/lib/platform-shims/esm.mjs | 67 + build/node_modules/yargs/locales/be.json | 46 + build/node_modules/yargs/locales/de.json | 46 + build/node_modules/yargs/locales/en.json | 51 + build/node_modules/yargs/locales/es.json | 46 + build/node_modules/yargs/locales/fi.json | 49 + build/node_modules/yargs/locales/fr.json | 53 + build/node_modules/yargs/locales/hi.json | 49 + build/node_modules/yargs/locales/hu.json | 46 + build/node_modules/yargs/locales/id.json | 50 + build/node_modules/yargs/locales/it.json | 46 + build/node_modules/yargs/locales/ja.json | 51 + build/node_modules/yargs/locales/ko.json | 49 + build/node_modules/yargs/locales/nb.json | 44 + build/node_modules/yargs/locales/nl.json | 49 + build/node_modules/yargs/locales/nn.json | 44 + build/node_modules/yargs/locales/pirate.json | 13 + build/node_modules/yargs/locales/pl.json | 49 + build/node_modules/yargs/locales/pt.json | 45 + build/node_modules/yargs/locales/pt_BR.json | 48 + build/node_modules/yargs/locales/ru.json | 46 + build/node_modules/yargs/locales/th.json | 46 + build/node_modules/yargs/locales/tr.json | 48 + build/node_modules/yargs/locales/zh_CN.json | 48 + build/node_modules/yargs/locales/zh_TW.json | 47 + build/node_modules/yargs/package.json | 150 + build/node_modules/yargs/yargs | 9 + build/node_modules/yocto-queue/index.d.ts | 56 + build/node_modules/yocto-queue/index.js | 68 + build/node_modules/yocto-queue/license | 9 + build/node_modules/yocto-queue/package.json | 75 + build/node_modules/yocto-queue/readme.md | 64 + build/package-lock.json | 1858 +- build/package.json | 18 +- build/rollup-cjs-for-browserify.config.js | 8 +- build/rollup-cjs-for-node.config.js | 8 +- .../purecloud-guest-chat-client/ApiClient.js | 4 +- .../api/WebChatApi.js | 2 +- .../configuration.js | 78 +- .../src/purecloud-guest-chat-client/index.js | 2 +- releaseNotes.md | 98 +- swagger.json | 2 +- version.json | 6 +- 3449 files changed, 319024 insertions(+), 250041 deletions(-) create mode 100644 build/APIData.json create mode 120000 build/node_modules/.bin/flat create mode 120000 build/node_modules/.bin/he delete mode 120000 build/node_modules/.bin/jade create mode 120000 build/node_modules/.bin/js-yaml create mode 120000 build/node_modules/.bin/nanoid create mode 120000 build/node_modules/.bin/node-which create mode 120000 build/node_modules/.bin/resolve delete mode 120000 build/node_modules/.bin/supports-color create mode 100644 build/node_modules/@colors/colors/LICENSE create mode 100644 build/node_modules/@colors/colors/README.md rename build/node_modules/{ => @colors}/colors/examples/normal-usage.js (98%) rename build/node_modules/{ => @colors}/colors/examples/safe-string.js (98%) create mode 100644 build/node_modules/@colors/colors/index.d.ts rename build/node_modules/{ => @colors}/colors/lib/colors.js (99%) rename build/node_modules/{ => @colors}/colors/lib/custom/trap.js (100%) rename build/node_modules/{ => @colors}/colors/lib/custom/zalgo.js (100%) rename build/node_modules/{ => @colors}/colors/lib/extendStringPrototype.js (100%) rename build/node_modules/{ => @colors}/colors/lib/index.js (100%) rename build/node_modules/{ => @colors}/colors/lib/maps/america.js (100%) rename build/node_modules/{ => @colors}/colors/lib/maps/rainbow.js (100%) rename build/node_modules/{ => @colors}/colors/lib/maps/random.js (100%) rename build/node_modules/{ => @colors}/colors/lib/maps/zebra.js (100%) rename build/node_modules/{ => @colors}/colors/lib/styles.js (100%) rename build/node_modules/{ => @colors}/colors/lib/system/has-flag.js (100%) rename build/node_modules/{ => @colors}/colors/lib/system/supports-colors.js (100%) create mode 100644 build/node_modules/@colors/colors/package.json rename build/node_modules/{ => @colors}/colors/safe.d.ts (100%) rename build/node_modules/{ => @colors}/colors/safe.js (100%) rename build/node_modules/{ => @colors}/colors/themes/generic-logging.js (100%) delete mode 100644 build/node_modules/@dabh/diagnostics/example.png create mode 100644 build/node_modules/@rollup/plugin-commonjs/CHANGELOG.md create mode 100644 build/node_modules/@rollup/plugin-commonjs/LICENSE create mode 100644 build/node_modules/@rollup/plugin-commonjs/README.md create mode 100644 build/node_modules/@rollup/plugin-commonjs/dist/index.es.js create mode 100644 build/node_modules/@rollup/plugin-commonjs/dist/index.es.js.map create mode 100644 build/node_modules/@rollup/plugin-commonjs/dist/index.js create mode 100644 build/node_modules/@rollup/plugin-commonjs/dist/index.js.map create mode 100644 build/node_modules/@rollup/plugin-commonjs/package.json create mode 100644 build/node_modules/@rollup/plugin-commonjs/types/index.d.ts create mode 100755 build/node_modules/@rollup/plugin-json/CHANGELOG.md create mode 100644 build/node_modules/@rollup/plugin-json/LICENSE create mode 100644 build/node_modules/@rollup/plugin-json/README.md create mode 100644 build/node_modules/@rollup/plugin-json/dist/index.es.js create mode 100644 build/node_modules/@rollup/plugin-json/dist/index.es.js.map create mode 100644 build/node_modules/@rollup/plugin-json/dist/index.js create mode 100644 build/node_modules/@rollup/plugin-json/dist/index.js.map create mode 100644 build/node_modules/@rollup/plugin-json/package.json create mode 100755 build/node_modules/@rollup/plugin-json/types/index.d.ts create mode 100755 build/node_modules/@rollup/plugin-node-resolve/CHANGELOG.md create mode 100644 build/node_modules/@rollup/plugin-node-resolve/LICENSE create mode 100755 build/node_modules/@rollup/plugin-node-resolve/README.md create mode 100644 build/node_modules/@rollup/plugin-node-resolve/dist/cjs/index.js create mode 100644 build/node_modules/@rollup/plugin-node-resolve/dist/es/index.js create mode 100644 build/node_modules/@rollup/plugin-node-resolve/dist/es/package.json create mode 100644 build/node_modules/@rollup/plugin-node-resolve/package.json create mode 100755 build/node_modules/@rollup/plugin-node-resolve/types/index.d.ts create mode 100755 build/node_modules/@rollup/pluginutils/CHANGELOG.md create mode 100644 build/node_modules/@rollup/pluginutils/LICENSE create mode 100755 build/node_modules/@rollup/pluginutils/README.md create mode 100644 build/node_modules/@rollup/pluginutils/dist/cjs/index.js create mode 100644 build/node_modules/@rollup/pluginutils/dist/es/index.js create mode 100644 build/node_modules/@rollup/pluginutils/dist/es/package.json create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/CHANGELOG.md create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/README.md create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/package.json create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/estree-walker.js create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/index.ts create mode 100644 build/node_modules/@rollup/pluginutils/node_modules/estree-walker/types/index.d.ts create mode 100644 build/node_modules/@rollup/pluginutils/package.json create mode 100755 build/node_modules/@rollup/pluginutils/types/index.d.ts create mode 100644 build/node_modules/@sinonjs/commons/CHANGES.md create mode 100644 build/node_modules/@sinonjs/commons/LICENSE create mode 100644 build/node_modules/@sinonjs/commons/README.md create mode 100644 build/node_modules/@sinonjs/commons/lib/called-in-order.js create mode 100644 build/node_modules/@sinonjs/commons/lib/called-in-order.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/class-name.js create mode 100644 build/node_modules/@sinonjs/commons/lib/class-name.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/deprecated.js create mode 100644 build/node_modules/@sinonjs/commons/lib/deprecated.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/every.js create mode 100644 build/node_modules/@sinonjs/commons/lib/every.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/function-name.js create mode 100644 build/node_modules/@sinonjs/commons/lib/function-name.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/global.js create mode 100644 build/node_modules/@sinonjs/commons/lib/global.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/index.js create mode 100644 build/node_modules/@sinonjs/commons/lib/index.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/order-by-first-call.js create mode 100644 build/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/README.md create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/array.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/function.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/index.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/index.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/map.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/object.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/set.js create mode 100644 build/node_modules/@sinonjs/commons/lib/prototypes/string.js create mode 100644 build/node_modules/@sinonjs/commons/lib/type-of.js create mode 100644 build/node_modules/@sinonjs/commons/lib/type-of.test.js create mode 100644 build/node_modules/@sinonjs/commons/lib/value-to-string.js create mode 100644 build/node_modules/@sinonjs/commons/lib/value-to-string.test.js create mode 100644 build/node_modules/@sinonjs/commons/package.json create mode 100644 build/node_modules/@sinonjs/commons/types/called-in-order.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/class-name.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/deprecated.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/every.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/function-name.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/global.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/index.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/array.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/copy-prototype.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/function.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/index.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/map.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/object.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/set.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/prototypes/string.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/type-of.d.ts create mode 100644 build/node_modules/@sinonjs/commons/types/value-to-string.d.ts create mode 100644 build/node_modules/@sinonjs/fake-timers/CHANGELOG.md rename build/node_modules/{lolex => @sinonjs/fake-timers}/LICENSE (100%) create mode 100644 build/node_modules/@sinonjs/fake-timers/README.md create mode 100644 build/node_modules/@sinonjs/fake-timers/package.json create mode 100644 build/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js rename build/node_modules/{ => @sinonjs}/samsam/LICENSE (100%) create mode 100644 build/node_modules/@sinonjs/samsam/README.md create mode 100644 build/node_modules/@sinonjs/samsam/docs/index.md create mode 100644 build/node_modules/@sinonjs/samsam/lib/array-types.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-matcher.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-method-exists.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/is-iterable.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/is-matcher.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/matcher-prototype.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-matcher/type-map.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/create-set.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/deep-equal-benchmark.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/deep-equal.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/get-class.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/identical.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-arguments.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-array-type.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-date.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-element.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-iterable.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-map.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-nan.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-neg-zero.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-object.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-set.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/is-subset.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/iterable-to-string.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/match.js create mode 100644 build/node_modules/@sinonjs/samsam/lib/samsam.js create mode 100644 build/node_modules/@sinonjs/samsam/package.json create mode 100644 build/node_modules/@sinonjs/samsam/types/array-types.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/assert-matcher.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/assert-method-exists.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/assert-type.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/is-iterable.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/is-matcher.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/match-object.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/matcher-prototype.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-matcher/type-map.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/create-set.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/deep-equal-benchmark.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/deep-equal.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/get-class.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/identical.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-arguments.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-array-type.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-date.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-element.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-iterable.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-map.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-nan.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-neg-zero.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-object.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-set.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/is-subset.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/iterable-to-string.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/match.d.ts create mode 100644 build/node_modules/@sinonjs/samsam/types/samsam.d.ts create mode 100644 build/node_modules/@sinonjs/text-encoding/LICENSE.md create mode 100644 build/node_modules/@sinonjs/text-encoding/README.md create mode 100644 build/node_modules/@sinonjs/text-encoding/index.js create mode 100644 build/node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js create mode 100644 build/node_modules/@sinonjs/text-encoding/lib/encoding.js create mode 100644 build/node_modules/@sinonjs/text-encoding/package.json create mode 100644 build/node_modules/@types/estree/LICENSE create mode 100644 build/node_modules/@types/estree/README.md create mode 100644 build/node_modules/@types/estree/index.d.ts create mode 100644 build/node_modules/@types/estree/package.json create mode 100755 build/node_modules/@types/node/LICENSE create mode 100755 build/node_modules/@types/node/README.md create mode 100755 build/node_modules/@types/node/assert.d.ts create mode 100755 build/node_modules/@types/node/assert/strict.d.ts create mode 100755 build/node_modules/@types/node/async_hooks.d.ts create mode 100755 build/node_modules/@types/node/buffer.d.ts create mode 100755 build/node_modules/@types/node/child_process.d.ts create mode 100755 build/node_modules/@types/node/cluster.d.ts create mode 100755 build/node_modules/@types/node/console.d.ts create mode 100755 build/node_modules/@types/node/constants.d.ts create mode 100755 build/node_modules/@types/node/crypto.d.ts create mode 100755 build/node_modules/@types/node/dgram.d.ts create mode 100755 build/node_modules/@types/node/diagnostics_channel.d.ts create mode 100755 build/node_modules/@types/node/dns.d.ts create mode 100755 build/node_modules/@types/node/dns/promises.d.ts create mode 100755 build/node_modules/@types/node/domain.d.ts create mode 100755 build/node_modules/@types/node/events.d.ts create mode 100755 build/node_modules/@types/node/fs.d.ts create mode 100755 build/node_modules/@types/node/fs/promises.d.ts create mode 100755 build/node_modules/@types/node/globals.d.ts create mode 100755 build/node_modules/@types/node/globals.global.d.ts create mode 100755 build/node_modules/@types/node/http.d.ts create mode 100755 build/node_modules/@types/node/http2.d.ts create mode 100755 build/node_modules/@types/node/https.d.ts create mode 100755 build/node_modules/@types/node/index.d.ts create mode 100755 build/node_modules/@types/node/inspector.d.ts create mode 100755 build/node_modules/@types/node/module.d.ts create mode 100755 build/node_modules/@types/node/net.d.ts create mode 100755 build/node_modules/@types/node/os.d.ts create mode 100755 build/node_modules/@types/node/package.json create mode 100755 build/node_modules/@types/node/path.d.ts create mode 100755 build/node_modules/@types/node/perf_hooks.d.ts create mode 100755 build/node_modules/@types/node/process.d.ts create mode 100755 build/node_modules/@types/node/punycode.d.ts create mode 100755 build/node_modules/@types/node/querystring.d.ts create mode 100755 build/node_modules/@types/node/readline.d.ts create mode 100755 build/node_modules/@types/node/repl.d.ts create mode 100755 build/node_modules/@types/node/stream.d.ts create mode 100755 build/node_modules/@types/node/stream/consumers.d.ts create mode 100755 build/node_modules/@types/node/stream/promises.d.ts create mode 100755 build/node_modules/@types/node/stream/web.d.ts create mode 100755 build/node_modules/@types/node/string_decoder.d.ts create mode 100755 build/node_modules/@types/node/timers.d.ts create mode 100755 build/node_modules/@types/node/timers/promises.d.ts create mode 100755 build/node_modules/@types/node/tls.d.ts create mode 100755 build/node_modules/@types/node/trace_events.d.ts create mode 100755 build/node_modules/@types/node/tty.d.ts create mode 100755 build/node_modules/@types/node/url.d.ts create mode 100755 build/node_modules/@types/node/util.d.ts create mode 100755 build/node_modules/@types/node/v8.d.ts create mode 100755 build/node_modules/@types/node/vm.d.ts create mode 100755 build/node_modules/@types/node/wasi.d.ts create mode 100755 build/node_modules/@types/node/worker_threads.d.ts create mode 100755 build/node_modules/@types/node/zlib.d.ts create mode 100644 build/node_modules/@types/resolve/LICENSE create mode 100644 build/node_modules/@types/resolve/README.md create mode 100644 build/node_modules/@types/resolve/index.d.ts create mode 100644 build/node_modules/@types/resolve/package.json create mode 100644 build/node_modules/@ungap/promise-all-settled/LICENSE create mode 100644 build/node_modules/@ungap/promise-all-settled/README.md create mode 100644 build/node_modules/@ungap/promise-all-settled/cjs/index.js create mode 100644 build/node_modules/@ungap/promise-all-settled/cjs/package.json create mode 100644 build/node_modules/@ungap/promise-all-settled/esm/index.js create mode 100644 build/node_modules/@ungap/promise-all-settled/index.js create mode 100644 build/node_modules/@ungap/promise-all-settled/min.js create mode 100644 build/node_modules/@ungap/promise-all-settled/package.json create mode 100644 build/node_modules/ansi-colors/LICENSE create mode 100644 build/node_modules/ansi-colors/README.md create mode 100644 build/node_modules/ansi-colors/index.js create mode 100644 build/node_modules/ansi-colors/package.json create mode 100644 build/node_modules/ansi-colors/symbols.js create mode 100644 build/node_modules/ansi-colors/types/index.d.ts create mode 100644 build/node_modules/ansi-regex/index.d.ts create mode 100644 build/node_modules/ansi-regex/index.js create mode 100644 build/node_modules/ansi-regex/license create mode 100644 build/node_modules/ansi-regex/package.json create mode 100644 build/node_modules/ansi-regex/readme.md create mode 100644 build/node_modules/ansi-styles/index.d.ts create mode 100644 build/node_modules/ansi-styles/index.js create mode 100644 build/node_modules/ansi-styles/license create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/CHANGELOG.md create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/LICENSE create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/README.md create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/conversions.js create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/index.js create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/package.json create mode 100644 build/node_modules/ansi-styles/node_modules/color-convert/route.js create mode 100644 build/node_modules/ansi-styles/node_modules/color-name/LICENSE create mode 100644 build/node_modules/ansi-styles/node_modules/color-name/README.md create mode 100644 build/node_modules/ansi-styles/node_modules/color-name/index.js create mode 100644 build/node_modules/ansi-styles/node_modules/color-name/package.json create mode 100644 build/node_modules/ansi-styles/package.json create mode 100644 build/node_modules/ansi-styles/readme.md create mode 100644 build/node_modules/anymatch/LICENSE create mode 100644 build/node_modules/anymatch/README.md create mode 100644 build/node_modules/anymatch/index.d.ts create mode 100644 build/node_modules/anymatch/index.js create mode 100644 build/node_modules/anymatch/package.json create mode 100644 build/node_modules/argparse/CHANGELOG.md create mode 100644 build/node_modules/argparse/LICENSE create mode 100644 build/node_modules/argparse/README.md create mode 100644 build/node_modules/argparse/argparse.js create mode 100644 build/node_modules/argparse/lib/sub.js create mode 100644 build/node_modules/argparse/lib/textwrap.js create mode 100644 build/node_modules/argparse/package.json create mode 100644 build/node_modules/asap/CHANGES.md create mode 100644 build/node_modules/asap/LICENSE.md create mode 100644 build/node_modules/asap/README.md create mode 100644 build/node_modules/asap/asap.js create mode 100644 build/node_modules/asap/browser-asap.js create mode 100644 build/node_modules/asap/browser-raw.js create mode 100644 build/node_modules/asap/package.json create mode 100644 build/node_modules/asap/raw.js delete mode 100644 build/node_modules/available-typed-arrays/.eslintignore delete mode 100644 build/node_modules/available-typed-arrays/.eslintrc delete mode 100644 build/node_modules/available-typed-arrays/.github/FUNDING.yml delete mode 100644 build/node_modules/available-typed-arrays/CHANGELOG.md delete mode 100644 build/node_modules/available-typed-arrays/LICENSE delete mode 100644 build/node_modules/available-typed-arrays/README.md delete mode 100644 build/node_modules/available-typed-arrays/index.js delete mode 100644 build/node_modules/available-typed-arrays/package.json delete mode 100644 build/node_modules/available-typed-arrays/test/index.js create mode 100644 build/node_modules/balanced-match/.github/FUNDING.yml create mode 100644 build/node_modules/balanced-match/LICENSE.md create mode 100644 build/node_modules/balanced-match/README.md create mode 100644 build/node_modules/balanced-match/index.js create mode 100644 build/node_modules/balanced-match/package.json create mode 100644 build/node_modules/binary-extensions/binary-extensions.json create mode 100644 build/node_modules/binary-extensions/binary-extensions.json.d.ts create mode 100644 build/node_modules/binary-extensions/index.d.ts create mode 100644 build/node_modules/binary-extensions/index.js create mode 100644 build/node_modules/binary-extensions/license create mode 100644 build/node_modules/binary-extensions/package.json create mode 100644 build/node_modules/binary-extensions/readme.md create mode 100644 build/node_modules/brace-expansion/LICENSE create mode 100644 build/node_modules/brace-expansion/README.md create mode 100644 build/node_modules/brace-expansion/index.js create mode 100644 build/node_modules/brace-expansion/package.json create mode 100644 build/node_modules/braces/CHANGELOG.md create mode 100644 build/node_modules/braces/LICENSE create mode 100644 build/node_modules/braces/README.md create mode 100644 build/node_modules/braces/index.js create mode 100644 build/node_modules/braces/lib/compile.js create mode 100644 build/node_modules/braces/lib/constants.js create mode 100644 build/node_modules/braces/lib/expand.js create mode 100644 build/node_modules/braces/lib/parse.js create mode 100644 build/node_modules/braces/lib/stringify.js create mode 100644 build/node_modules/braces/lib/utils.js create mode 100644 build/node_modules/braces/package.json create mode 100644 build/node_modules/browser-stdout/LICENSE create mode 100644 build/node_modules/browser-stdout/README.md create mode 100644 build/node_modules/browser-stdout/index.js create mode 100644 build/node_modules/browser-stdout/package.json delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/README.md delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/package.json delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js delete mode 100644 build/node_modules/browserify-sign/node_modules/readable-stream/readable.js delete mode 100644 build/node_modules/browserify-sign/node_modules/safe-buffer/index.js delete mode 100644 build/node_modules/browserify-sign/node_modules/safe-buffer/package.json create mode 100644 build/node_modules/builtin-modules/index.d.ts create mode 100644 build/node_modules/builtin-modules/static.d.ts create mode 100644 build/node_modules/camelcase/index.d.ts create mode 100644 build/node_modules/camelcase/index.js create mode 100644 build/node_modules/camelcase/license create mode 100644 build/node_modules/camelcase/package.json create mode 100644 build/node_modules/camelcase/readme.md create mode 100644 build/node_modules/chalk/index.d.ts create mode 100644 build/node_modules/chalk/license create mode 100644 build/node_modules/chalk/node_modules/supports-color/browser.js create mode 100644 build/node_modules/chalk/node_modules/supports-color/index.js create mode 100644 build/node_modules/chalk/node_modules/supports-color/license create mode 100644 build/node_modules/chalk/node_modules/supports-color/package.json create mode 100644 build/node_modules/chalk/node_modules/supports-color/readme.md create mode 100644 build/node_modules/chalk/package.json create mode 100644 build/node_modules/chalk/readme.md create mode 100644 build/node_modules/chalk/source/index.js create mode 100644 build/node_modules/chalk/source/templates.js create mode 100644 build/node_modules/chalk/source/util.js create mode 100644 build/node_modules/chokidar/LICENSE create mode 100644 build/node_modules/chokidar/README.md create mode 100644 build/node_modules/chokidar/index.js create mode 100644 build/node_modules/chokidar/lib/constants.js create mode 100644 build/node_modules/chokidar/lib/fsevents-handler.js create mode 100644 build/node_modules/chokidar/lib/nodefs-handler.js create mode 100644 build/node_modules/chokidar/package.json create mode 100644 build/node_modules/chokidar/types/index.d.ts create mode 100644 build/node_modules/cliui/CHANGELOG.md create mode 100644 build/node_modules/cliui/LICENSE.txt create mode 100644 build/node_modules/cliui/README.md create mode 100644 build/node_modules/cliui/build/index.cjs create mode 100644 build/node_modules/cliui/build/lib/index.js create mode 100644 build/node_modules/cliui/build/lib/string-utils.js create mode 100644 build/node_modules/cliui/index.mjs create mode 100644 build/node_modules/cliui/package.json delete mode 100644 build/node_modules/color-string/CHANGELOG.md delete mode 100644 build/node_modules/colors/LICENSE delete mode 100644 build/node_modules/colors/README.md delete mode 100644 build/node_modules/colors/index.d.ts delete mode 100644 build/node_modules/colors/package.json delete mode 100644 build/node_modules/colorspace/test.js delete mode 100644 build/node_modules/commander/Readme.md delete mode 100644 build/node_modules/commander/index.js delete mode 100644 build/node_modules/commander/package.json create mode 100644 build/node_modules/commondir/LICENSE create mode 100644 build/node_modules/commondir/example/dir.js create mode 100644 build/node_modules/commondir/index.js create mode 100644 build/node_modules/commondir/package.json create mode 100644 build/node_modules/commondir/readme.markdown create mode 100644 build/node_modules/commondir/test/dirs.js rename build/node_modules/{jade/node_modules/commander => concat-map}/.travis.yml (100%) rename build/node_modules/{mocha/node_modules/minimist => concat-map}/LICENSE (100%) create mode 100644 build/node_modules/concat-map/README.markdown create mode 100644 build/node_modules/concat-map/example/map.js create mode 100644 build/node_modules/concat-map/index.js create mode 100644 build/node_modules/concat-map/package.json create mode 100644 build/node_modules/concat-map/test/map.js rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/.travis.yml (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/readable-stream/CONTRIBUTING.md (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/readable-stream/GOVERNANCE.md (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/readable-stream/LICENSE (100%) create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/README.md rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/doc/wg-meetings/2015-01-30.md (100%) rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/duplex-browser.js (100%) rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/duplex.js (100%) create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/lib/internal/streams/BufferList.js (100%) create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/lib/internal/streams/destroy.js rename build/node_modules/{browserify-sign => concat-stream}/node_modules/readable-stream/lib/internal/streams/stream-browser.js (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/readable-stream/lib/internal/streams/stream.js (100%) create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/package.json rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/passthrough.js (100%) create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/readable-browser.js create mode 100644 build/node_modules/concat-stream/node_modules/readable-stream/readable.js rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/transform.js (100%) rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/writable-browser.js (100%) rename build/node_modules/{ => concat-stream/node_modules}/readable-stream/writable.js (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/safe-buffer/LICENSE (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/safe-buffer/README.md (100%) rename build/node_modules/{browserify-sign => concat-stream}/node_modules/safe-buffer/index.d.ts (100%) create mode 100644 build/node_modules/concat-stream/node_modules/safe-buffer/index.js create mode 100644 build/node_modules/concat-stream/node_modules/safe-buffer/package.json rename build/node_modules/{ => concat-stream/node_modules}/string_decoder/.travis.yml (100%) create mode 100644 build/node_modules/concat-stream/node_modules/string_decoder/LICENSE create mode 100644 build/node_modules/concat-stream/node_modules/string_decoder/README.md create mode 100644 build/node_modules/concat-stream/node_modules/string_decoder/lib/string_decoder.js create mode 100644 build/node_modules/concat-stream/node_modules/string_decoder/package.json delete mode 100644 build/node_modules/core-util-is/float.patch delete mode 100644 build/node_modules/core-util-is/test.js delete mode 100644 build/node_modules/debug/CHANGELOG.md delete mode 100644 build/node_modules/debug/node.js create mode 100644 build/node_modules/decamelize/index.d.ts create mode 100644 build/node_modules/decamelize/index.js create mode 100644 build/node_modules/decamelize/license create mode 100644 build/node_modules/decamelize/package.json create mode 100644 build/node_modules/decamelize/readme.md create mode 100644 build/node_modules/deepmerge/changelog.md create mode 100644 build/node_modules/deepmerge/dist/cjs.js create mode 100644 build/node_modules/deepmerge/dist/umd.js create mode 100644 build/node_modules/deepmerge/index.d.ts create mode 100644 build/node_modules/deepmerge/index.js create mode 100644 build/node_modules/deepmerge/license.txt create mode 100644 build/node_modules/deepmerge/package.json create mode 100644 build/node_modules/deepmerge/readme.md create mode 100644 build/node_modules/deepmerge/rollup.config.js delete mode 100644 build/node_modules/define-properties/.editorconfig delete mode 100644 build/node_modules/define-properties/.eslintrc delete mode 100644 build/node_modules/define-properties/.jscs.json delete mode 100644 build/node_modules/define-properties/.travis.yml delete mode 100644 build/node_modules/define-properties/CHANGELOG.md delete mode 100644 build/node_modules/define-properties/LICENSE delete mode 100644 build/node_modules/define-properties/README.md delete mode 100644 build/node_modules/define-properties/index.js delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/.editorconfig delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/.eslintrc delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/.travis.yml delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/CHANGELOG.md delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/LICENSE delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/README.md delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/implementation.js delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/index.js delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/isArguments.js delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/package.json delete mode 100644 build/node_modules/define-properties/node_modules/object-keys/test/index.js delete mode 100644 build/node_modules/define-properties/package.json delete mode 100644 build/node_modules/define-properties/test/index.js create mode 100644 build/node_modules/dezalgo/.travis.yml rename build/node_modules/{sigmund => dezalgo}/LICENSE (100%) create mode 100644 build/node_modules/dezalgo/README.md create mode 100644 build/node_modules/dezalgo/dezalgo.js create mode 100644 build/node_modules/dezalgo/package.json create mode 100644 build/node_modules/dezalgo/test/basic.js create mode 100644 build/node_modules/diff/CONTRIBUTING.md create mode 100644 build/node_modules/diff/LICENSE delete mode 100644 build/node_modules/diff/diff.js create mode 100644 build/node_modules/diff/dist/diff.js create mode 100644 build/node_modules/diff/lib/convert/dmp.js create mode 100644 build/node_modules/diff/lib/convert/xml.js create mode 100644 build/node_modules/diff/lib/diff/array.js create mode 100644 build/node_modules/diff/lib/diff/base.js create mode 100644 build/node_modules/diff/lib/diff/character.js create mode 100644 build/node_modules/diff/lib/diff/css.js create mode 100644 build/node_modules/diff/lib/diff/json.js create mode 100644 build/node_modules/diff/lib/diff/line.js create mode 100644 build/node_modules/diff/lib/diff/sentence.js create mode 100644 build/node_modules/diff/lib/diff/word.js create mode 100644 build/node_modules/diff/lib/index.es6.js create mode 100644 build/node_modules/diff/lib/index.js create mode 100644 build/node_modules/diff/lib/index.mjs create mode 100644 build/node_modules/diff/lib/patch/apply.js create mode 100644 build/node_modules/diff/lib/patch/create.js create mode 100644 build/node_modules/diff/lib/patch/merge.js create mode 100644 build/node_modules/diff/lib/patch/parse.js create mode 100644 build/node_modules/diff/lib/util/array.js create mode 100644 build/node_modules/diff/lib/util/distance-iterator.js create mode 100644 build/node_modules/diff/lib/util/params.js create mode 100644 build/node_modules/diff/release-notes.md create mode 100644 build/node_modules/diff/runtime.js create mode 100644 build/node_modules/emoji-regex/LICENSE-MIT.txt create mode 100644 build/node_modules/emoji-regex/README.md create mode 100644 build/node_modules/emoji-regex/es2015/index.js create mode 100644 build/node_modules/emoji-regex/es2015/text.js create mode 100644 build/node_modules/emoji-regex/index.d.ts create mode 100644 build/node_modules/emoji-regex/index.js create mode 100644 build/node_modules/emoji-regex/package.json create mode 100644 build/node_modules/emoji-regex/text.js delete mode 100644 build/node_modules/es-abstract/.editorconfig delete mode 100644 build/node_modules/es-abstract/.eslintignore delete mode 100644 build/node_modules/es-abstract/.eslintrc delete mode 100644 build/node_modules/es-abstract/.gitattributes delete mode 100644 build/node_modules/es-abstract/.nycrc delete mode 100644 build/node_modules/es-abstract/2015/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2015/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2015/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2015/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2015/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2015/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2015/Call.js delete mode 100644 build/node_modules/es-abstract/2015/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2015/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2015/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2015/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2015/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2015/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2015/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/Day.js delete mode 100644 build/node_modules/es-abstract/2015/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2015/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2015/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2015/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2015/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2015/EnumerableOwnNames.js delete mode 100644 build/node_modules/es-abstract/2015/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/Get.js delete mode 100644 build/node_modules/es-abstract/2015/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2015/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2015/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2015/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2015/GetV.js delete mode 100644 build/node_modules/es-abstract/2015/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2015/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2015/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2015/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2015/Invoke.js delete mode 100644 build/node_modules/es-abstract/2015/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/IsArray.js delete mode 100644 build/node_modules/es-abstract/2015/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2015/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2015/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2015/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2015/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2015/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2015/IsPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2015/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2015/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2015/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2015/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2015/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2015/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2015/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2015/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2015/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2015/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/ObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2015/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2015/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2015/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2015/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2015/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2015/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2015/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2015/SameValue.js delete mode 100644 build/node_modules/es-abstract/2015/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2015/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/Set.js delete mode 100644 build/node_modules/es-abstract/2015/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2015/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2015/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2015/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2015/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2015/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2015/StringGetIndexProperty.js delete mode 100644 build/node_modules/es-abstract/2015/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2015/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2015/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2015/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2015/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2015/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2015/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2015/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2015/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2015/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2015/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2015/ToLength.js delete mode 100644 build/node_modules/es-abstract/2015/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2015/ToObject.js delete mode 100644 build/node_modules/es-abstract/2015/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2015/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2015/ToString.js delete mode 100644 build/node_modules/es-abstract/2015/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2015/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2015/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2015/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2015/Type.js delete mode 100644 build/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2015/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2015/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/abs.js delete mode 100644 build/node_modules/es-abstract/2015/floor.js delete mode 100644 build/node_modules/es-abstract/2015/modulo.js delete mode 100644 build/node_modules/es-abstract/2015/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2015/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2015/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2015/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2015/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/2016/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2016/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2016/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2016/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2016/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2016/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2016/Call.js delete mode 100644 build/node_modules/es-abstract/2016/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2016/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2016/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2016/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2016/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2016/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2016/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/Day.js delete mode 100644 build/node_modules/es-abstract/2016/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2016/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2016/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2016/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2016/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2016/EnumerableOwnNames.js delete mode 100644 build/node_modules/es-abstract/2016/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/Get.js delete mode 100644 build/node_modules/es-abstract/2016/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2016/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2016/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2016/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2016/GetV.js delete mode 100644 build/node_modules/es-abstract/2016/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2016/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2016/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2016/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2016/Invoke.js delete mode 100644 build/node_modules/es-abstract/2016/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/IsArray.js delete mode 100644 build/node_modules/es-abstract/2016/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2016/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2016/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2016/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2016/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2016/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2016/IsPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2016/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2016/IterableToArrayLike.js delete mode 100644 build/node_modules/es-abstract/2016/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2016/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2016/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2016/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2016/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2016/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2016/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2016/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2016/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/ObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2016/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2016/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2016/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2016/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2016/SameValue.js delete mode 100644 build/node_modules/es-abstract/2016/SameValueNonNumber.js delete mode 100644 build/node_modules/es-abstract/2016/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2016/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/Set.js delete mode 100644 build/node_modules/es-abstract/2016/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2016/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2016/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2016/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2016/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2016/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2016/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2016/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2016/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2016/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2016/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2016/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2016/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2016/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2016/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2016/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2016/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2016/ToLength.js delete mode 100644 build/node_modules/es-abstract/2016/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2016/ToObject.js delete mode 100644 build/node_modules/es-abstract/2016/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2016/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2016/ToString.js delete mode 100644 build/node_modules/es-abstract/2016/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2016/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2016/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2016/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2016/Type.js delete mode 100644 build/node_modules/es-abstract/2016/UTF16Decode.js delete mode 100644 build/node_modules/es-abstract/2016/UTF16Encoding.js delete mode 100644 build/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2016/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2016/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/abs.js delete mode 100644 build/node_modules/es-abstract/2016/floor.js delete mode 100644 build/node_modules/es-abstract/2016/modulo.js delete mode 100644 build/node_modules/es-abstract/2016/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2016/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2016/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2016/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2016/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/2017/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2017/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2017/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2017/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2017/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2017/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2017/Call.js delete mode 100644 build/node_modules/es-abstract/2017/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2017/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2017/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2017/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2017/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2017/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2017/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/Day.js delete mode 100644 build/node_modules/es-abstract/2017/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2017/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2017/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2017/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2017/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2017/EnumerableOwnProperties.js delete mode 100644 build/node_modules/es-abstract/2017/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/Get.js delete mode 100644 build/node_modules/es-abstract/2017/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2017/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2017/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2017/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2017/GetV.js delete mode 100644 build/node_modules/es-abstract/2017/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2017/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2017/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2017/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2017/Invoke.js delete mode 100644 build/node_modules/es-abstract/2017/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/IsArray.js delete mode 100644 build/node_modules/es-abstract/2017/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2017/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2017/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2017/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2017/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2017/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2017/IsPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2017/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2017/IterableToList.js delete mode 100644 build/node_modules/es-abstract/2017/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2017/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2017/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2017/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2017/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2017/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2017/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2017/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2017/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/ObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2017/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2017/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2017/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2017/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2017/SameValue.js delete mode 100644 build/node_modules/es-abstract/2017/SameValueNonNumber.js delete mode 100644 build/node_modules/es-abstract/2017/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2017/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/Set.js delete mode 100644 build/node_modules/es-abstract/2017/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2017/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2017/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2017/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2017/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2017/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2017/StringGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2017/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2017/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2017/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2017/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2017/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2017/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2017/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2017/ToIndex.js delete mode 100644 build/node_modules/es-abstract/2017/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2017/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2017/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2017/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2017/ToLength.js delete mode 100644 build/node_modules/es-abstract/2017/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2017/ToObject.js delete mode 100644 build/node_modules/es-abstract/2017/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2017/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2017/ToString.js delete mode 100644 build/node_modules/es-abstract/2017/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2017/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2017/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2017/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2017/Type.js delete mode 100644 build/node_modules/es-abstract/2017/UTF16Decode.js delete mode 100644 build/node_modules/es-abstract/2017/UTF16Encoding.js delete mode 100644 build/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2017/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2017/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/abs.js delete mode 100644 build/node_modules/es-abstract/2017/floor.js delete mode 100644 build/node_modules/es-abstract/2017/modulo.js delete mode 100644 build/node_modules/es-abstract/2017/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2017/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2017/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2017/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2017/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/2018/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2018/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2018/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2018/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2018/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2018/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2018/Call.js delete mode 100644 build/node_modules/es-abstract/2018/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2018/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/CopyDataProperties.js delete mode 100644 build/node_modules/es-abstract/2018/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2018/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2018/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2018/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2018/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2018/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/DateString.js delete mode 100644 build/node_modules/es-abstract/2018/Day.js delete mode 100644 build/node_modules/es-abstract/2018/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2018/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2018/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2018/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2018/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js delete mode 100644 build/node_modules/es-abstract/2018/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/Get.js delete mode 100644 build/node_modules/es-abstract/2018/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2018/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2018/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2018/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2018/GetV.js delete mode 100644 build/node_modules/es-abstract/2018/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2018/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2018/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2018/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2018/Invoke.js delete mode 100644 build/node_modules/es-abstract/2018/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/IsArray.js delete mode 100644 build/node_modules/es-abstract/2018/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2018/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2018/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2018/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2018/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2018/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2018/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2018/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2018/IsStringPrefix.js delete mode 100644 build/node_modules/es-abstract/2018/IterableToList.js delete mode 100644 build/node_modules/es-abstract/2018/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2018/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2018/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2018/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2018/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2018/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2018/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2018/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2018/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/NumberToString.js delete mode 100644 build/node_modules/es-abstract/2018/ObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2018/PromiseResolve.js delete mode 100644 build/node_modules/es-abstract/2018/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2018/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2018/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2018/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2018/SameValue.js delete mode 100644 build/node_modules/es-abstract/2018/SameValueNonNumber.js delete mode 100644 build/node_modules/es-abstract/2018/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2018/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/Set.js delete mode 100644 build/node_modules/es-abstract/2018/SetFunctionLength.js delete mode 100644 build/node_modules/es-abstract/2018/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2018/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2018/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2018/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2018/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2018/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2018/StringGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2018/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2018/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2018/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2018/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2018/TimeString.js delete mode 100644 build/node_modules/es-abstract/2018/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2018/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2018/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2018/ToIndex.js delete mode 100644 build/node_modules/es-abstract/2018/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2018/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2018/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2018/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2018/ToLength.js delete mode 100644 build/node_modules/es-abstract/2018/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2018/ToObject.js delete mode 100644 build/node_modules/es-abstract/2018/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2018/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2018/ToString.js delete mode 100644 build/node_modules/es-abstract/2018/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2018/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2018/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2018/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2018/Type.js delete mode 100644 build/node_modules/es-abstract/2018/UTF16Decode.js delete mode 100644 build/node_modules/es-abstract/2018/UTF16Encoding.js delete mode 100644 build/node_modules/es-abstract/2018/UnicodeEscape.js delete mode 100644 build/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2018/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2018/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/abs.js delete mode 100644 build/node_modules/es-abstract/2018/floor.js delete mode 100644 build/node_modules/es-abstract/2018/modulo.js delete mode 100644 build/node_modules/es-abstract/2018/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2018/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2018/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2018/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2018/thisSymbolValue.js delete mode 100644 build/node_modules/es-abstract/2018/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/2019/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2019/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2019/AddEntriesFromIterable.js delete mode 100644 build/node_modules/es-abstract/2019/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2019/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2019/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2019/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2019/Call.js delete mode 100644 build/node_modules/es-abstract/2019/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2019/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/CopyDataProperties.js delete mode 100644 build/node_modules/es-abstract/2019/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2019/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2019/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2019/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2019/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2019/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/DateString.js delete mode 100644 build/node_modules/es-abstract/2019/Day.js delete mode 100644 build/node_modules/es-abstract/2019/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2019/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2019/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2019/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2019/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js delete mode 100644 build/node_modules/es-abstract/2019/FlattenIntoArray.js delete mode 100644 build/node_modules/es-abstract/2019/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/Get.js delete mode 100644 build/node_modules/es-abstract/2019/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2019/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2019/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2019/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2019/GetV.js delete mode 100644 build/node_modules/es-abstract/2019/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2019/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2019/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2019/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2019/Invoke.js delete mode 100644 build/node_modules/es-abstract/2019/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/IsArray.js delete mode 100644 build/node_modules/es-abstract/2019/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2019/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2019/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2019/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2019/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2019/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2019/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2019/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2019/IsStringPrefix.js delete mode 100644 build/node_modules/es-abstract/2019/IterableToList.js delete mode 100644 build/node_modules/es-abstract/2019/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2019/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2019/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2019/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2019/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2019/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2019/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2019/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2019/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/NumberToString.js delete mode 100644 build/node_modules/es-abstract/2019/ObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2019/PromiseResolve.js delete mode 100644 build/node_modules/es-abstract/2019/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2019/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2019/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2019/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2019/SameValue.js delete mode 100644 build/node_modules/es-abstract/2019/SameValueNonNumber.js delete mode 100644 build/node_modules/es-abstract/2019/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2019/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/Set.js delete mode 100644 build/node_modules/es-abstract/2019/SetFunctionLength.js delete mode 100644 build/node_modules/es-abstract/2019/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2019/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2019/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2019/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2019/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2019/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2019/StringGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2019/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2019/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2019/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2019/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2019/TimeString.js delete mode 100644 build/node_modules/es-abstract/2019/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2019/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2019/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2019/ToIndex.js delete mode 100644 build/node_modules/es-abstract/2019/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2019/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2019/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2019/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2019/ToLength.js delete mode 100644 build/node_modules/es-abstract/2019/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2019/ToObject.js delete mode 100644 build/node_modules/es-abstract/2019/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2019/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2019/ToString.js delete mode 100644 build/node_modules/es-abstract/2019/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2019/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2019/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2019/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2019/TrimString.js delete mode 100644 build/node_modules/es-abstract/2019/Type.js delete mode 100644 build/node_modules/es-abstract/2019/UTF16Decode.js delete mode 100644 build/node_modules/es-abstract/2019/UTF16Encoding.js delete mode 100644 build/node_modules/es-abstract/2019/UnicodeEscape.js delete mode 100644 build/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2019/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2019/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/abs.js delete mode 100644 build/node_modules/es-abstract/2019/floor.js delete mode 100644 build/node_modules/es-abstract/2019/modulo.js delete mode 100644 build/node_modules/es-abstract/2019/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2019/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2019/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2019/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2019/thisSymbolValue.js delete mode 100644 build/node_modules/es-abstract/2019/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/2020/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2020/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/2020/AddEntriesFromIterable.js delete mode 100644 build/node_modules/es-abstract/2020/AdvanceStringIndex.js delete mode 100644 build/node_modules/es-abstract/2020/ArrayCreate.js delete mode 100644 build/node_modules/es-abstract/2020/ArraySetLength.js delete mode 100644 build/node_modules/es-abstract/2020/ArraySpeciesCreate.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/add.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/bitwiseAND.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/bitwiseNOT.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/bitwiseOR.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/bitwiseXOR.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/divide.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/equal.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/exponentiate.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/index.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/leftShift.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/lessThan.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/multiply.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/remainder.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/sameValue.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/sameValueZero.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/signedRightShift.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/subtract.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/toString.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/unaryMinus.js delete mode 100644 build/node_modules/es-abstract/2020/BigInt/unsignedRightShift.js delete mode 100644 build/node_modules/es-abstract/2020/BigIntBitwiseOp.js delete mode 100644 build/node_modules/es-abstract/2020/BinaryAnd.js delete mode 100644 build/node_modules/es-abstract/2020/BinaryOr.js delete mode 100644 build/node_modules/es-abstract/2020/BinaryXor.js delete mode 100644 build/node_modules/es-abstract/2020/Call.js delete mode 100644 build/node_modules/es-abstract/2020/CanonicalNumericIndexString.js delete mode 100644 build/node_modules/es-abstract/2020/CodePointAt.js delete mode 100644 build/node_modules/es-abstract/2020/CompletePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/CopyDataProperties.js delete mode 100644 build/node_modules/es-abstract/2020/CreateDataProperty.js delete mode 100644 build/node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2020/CreateHTML.js delete mode 100644 build/node_modules/es-abstract/2020/CreateIterResultObject.js delete mode 100644 build/node_modules/es-abstract/2020/CreateListFromArrayLike.js delete mode 100644 build/node_modules/es-abstract/2020/CreateMethodProperty.js delete mode 100644 build/node_modules/es-abstract/2020/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/DateString.js delete mode 100644 build/node_modules/es-abstract/2020/Day.js delete mode 100644 build/node_modules/es-abstract/2020/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/2020/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/2020/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/2020/DefinePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2020/DeletePropertyOrThrow.js delete mode 100644 build/node_modules/es-abstract/2020/EnumerableOwnPropertyNames.js delete mode 100644 build/node_modules/es-abstract/2020/FlattenIntoArray.js delete mode 100644 build/node_modules/es-abstract/2020/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/Get.js delete mode 100644 build/node_modules/es-abstract/2020/GetIterator.js delete mode 100644 build/node_modules/es-abstract/2020/GetMethod.js delete mode 100644 build/node_modules/es-abstract/2020/GetOwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/2020/GetPrototypeFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2020/GetSubstitution.js delete mode 100644 build/node_modules/es-abstract/2020/GetV.js delete mode 100644 build/node_modules/es-abstract/2020/HasOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2020/HasProperty.js delete mode 100644 build/node_modules/es-abstract/2020/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/2020/InstanceofOperator.js delete mode 100644 build/node_modules/es-abstract/2020/Invoke.js delete mode 100644 build/node_modules/es-abstract/2020/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/IsArray.js delete mode 100644 build/node_modules/es-abstract/2020/IsBigIntElementType.js delete mode 100644 build/node_modules/es-abstract/2020/IsCallable.js delete mode 100644 build/node_modules/es-abstract/2020/IsConcatSpreadable.js delete mode 100644 build/node_modules/es-abstract/2020/IsConstructor.js delete mode 100644 build/node_modules/es-abstract/2020/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/IsExtensible.js delete mode 100644 build/node_modules/es-abstract/2020/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/IsInteger.js delete mode 100644 build/node_modules/es-abstract/2020/IsNoTearConfiguration.js delete mode 100644 build/node_modules/es-abstract/2020/IsNonNegativeInteger.js delete mode 100644 build/node_modules/es-abstract/2020/IsPromise.js delete mode 100644 build/node_modules/es-abstract/2020/IsPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2020/IsRegExp.js delete mode 100644 build/node_modules/es-abstract/2020/IsStringPrefix.js delete mode 100644 build/node_modules/es-abstract/2020/IsUnclampedIntegerElementType.js delete mode 100644 build/node_modules/es-abstract/2020/IsUnsignedElementType.js delete mode 100644 build/node_modules/es-abstract/2020/IterableToList.js delete mode 100644 build/node_modules/es-abstract/2020/IteratorClose.js delete mode 100644 build/node_modules/es-abstract/2020/IteratorComplete.js delete mode 100644 build/node_modules/es-abstract/2020/IteratorNext.js delete mode 100644 build/node_modules/es-abstract/2020/IteratorStep.js delete mode 100644 build/node_modules/es-abstract/2020/IteratorValue.js delete mode 100644 build/node_modules/es-abstract/2020/LengthOfArrayLike.js delete mode 100644 build/node_modules/es-abstract/2020/MakeDate.js delete mode 100644 build/node_modules/es-abstract/2020/MakeDay.js delete mode 100644 build/node_modules/es-abstract/2020/MakeTime.js delete mode 100644 build/node_modules/es-abstract/2020/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/Number/add.js delete mode 100644 build/node_modules/es-abstract/2020/Number/bitwiseAND.js delete mode 100644 build/node_modules/es-abstract/2020/Number/bitwiseNOT.js delete mode 100644 build/node_modules/es-abstract/2020/Number/bitwiseOR.js delete mode 100644 build/node_modules/es-abstract/2020/Number/bitwiseXOR.js delete mode 100644 build/node_modules/es-abstract/2020/Number/divide.js delete mode 100644 build/node_modules/es-abstract/2020/Number/equal.js delete mode 100644 build/node_modules/es-abstract/2020/Number/exponentiate.js delete mode 100644 build/node_modules/es-abstract/2020/Number/index.js delete mode 100644 build/node_modules/es-abstract/2020/Number/leftShift.js delete mode 100644 build/node_modules/es-abstract/2020/Number/lessThan.js delete mode 100644 build/node_modules/es-abstract/2020/Number/multiply.js delete mode 100644 build/node_modules/es-abstract/2020/Number/remainder.js delete mode 100644 build/node_modules/es-abstract/2020/Number/sameValue.js delete mode 100644 build/node_modules/es-abstract/2020/Number/sameValueZero.js delete mode 100644 build/node_modules/es-abstract/2020/Number/signedRightShift.js delete mode 100644 build/node_modules/es-abstract/2020/Number/subtract.js delete mode 100644 build/node_modules/es-abstract/2020/Number/toString.js delete mode 100644 build/node_modules/es-abstract/2020/Number/unaryMinus.js delete mode 100644 build/node_modules/es-abstract/2020/Number/unsignedRightShift.js delete mode 100644 build/node_modules/es-abstract/2020/NumberBitwiseOp.js delete mode 100644 build/node_modules/es-abstract/2020/NumberToBigInt.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryCreateFromConstructor.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryDefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryGetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryHasInstance.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryHasProperty.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinaryObjectCreate.js delete mode 100644 build/node_modules/es-abstract/2020/OrdinarySetPrototypeOf.js delete mode 100644 build/node_modules/es-abstract/2020/PromiseResolve.js delete mode 100644 build/node_modules/es-abstract/2020/QuoteJSONString.js delete mode 100644 build/node_modules/es-abstract/2020/RegExpCreate.js delete mode 100644 build/node_modules/es-abstract/2020/RegExpExec.js delete mode 100644 build/node_modules/es-abstract/2020/RequireObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/2020/SameValue.js delete mode 100644 build/node_modules/es-abstract/2020/SameValueNonNumeric.js delete mode 100644 build/node_modules/es-abstract/2020/SameValueZero.js delete mode 100644 build/node_modules/es-abstract/2020/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/Set.js delete mode 100644 build/node_modules/es-abstract/2020/SetFunctionLength.js delete mode 100644 build/node_modules/es-abstract/2020/SetFunctionName.js delete mode 100644 build/node_modules/es-abstract/2020/SetIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2020/SpeciesConstructor.js delete mode 100644 build/node_modules/es-abstract/2020/SplitMatch.js delete mode 100644 build/node_modules/es-abstract/2020/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/2020/StringCreate.js delete mode 100644 build/node_modules/es-abstract/2020/StringGetOwnProperty.js delete mode 100644 build/node_modules/es-abstract/2020/StringPad.js delete mode 100644 build/node_modules/es-abstract/2020/SymbolDescriptiveString.js delete mode 100644 build/node_modules/es-abstract/2020/TestIntegrityLevel.js delete mode 100644 build/node_modules/es-abstract/2020/TimeClip.js delete mode 100644 build/node_modules/es-abstract/2020/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/2020/TimeString.js delete mode 100644 build/node_modules/es-abstract/2020/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/2020/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/2020/ToDateString.js delete mode 100644 build/node_modules/es-abstract/2020/ToIndex.js delete mode 100644 build/node_modules/es-abstract/2020/ToInt16.js delete mode 100644 build/node_modules/es-abstract/2020/ToInt32.js delete mode 100644 build/node_modules/es-abstract/2020/ToInt8.js delete mode 100644 build/node_modules/es-abstract/2020/ToInteger.js delete mode 100644 build/node_modules/es-abstract/2020/ToLength.js delete mode 100644 build/node_modules/es-abstract/2020/ToNumber.js delete mode 100644 build/node_modules/es-abstract/2020/ToNumeric.js delete mode 100644 build/node_modules/es-abstract/2020/ToObject.js delete mode 100644 build/node_modules/es-abstract/2020/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/2020/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/ToPropertyKey.js delete mode 100644 build/node_modules/es-abstract/2020/ToString.js delete mode 100644 build/node_modules/es-abstract/2020/ToUint16.js delete mode 100644 build/node_modules/es-abstract/2020/ToUint32.js delete mode 100644 build/node_modules/es-abstract/2020/ToUint8.js delete mode 100644 build/node_modules/es-abstract/2020/ToUint8Clamp.js delete mode 100644 build/node_modules/es-abstract/2020/TrimString.js delete mode 100644 build/node_modules/es-abstract/2020/Type.js delete mode 100644 build/node_modules/es-abstract/2020/UTF16DecodeString.js delete mode 100644 build/node_modules/es-abstract/2020/UTF16DecodeSurrogatePair.js delete mode 100644 build/node_modules/es-abstract/2020/UTF16Encoding.js delete mode 100644 build/node_modules/es-abstract/2020/UnicodeEscape.js delete mode 100644 build/node_modules/es-abstract/2020/ValidateAndApplyPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/2020/WeekDay.js delete mode 100644 build/node_modules/es-abstract/2020/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/abs.js delete mode 100644 build/node_modules/es-abstract/2020/floor.js delete mode 100644 build/node_modules/es-abstract/2020/modulo.js delete mode 100644 build/node_modules/es-abstract/2020/msFromTime.js delete mode 100644 build/node_modules/es-abstract/2020/thisBigIntValue.js delete mode 100644 build/node_modules/es-abstract/2020/thisBooleanValue.js delete mode 100644 build/node_modules/es-abstract/2020/thisNumberValue.js delete mode 100644 build/node_modules/es-abstract/2020/thisStringValue.js delete mode 100644 build/node_modules/es-abstract/2020/thisSymbolValue.js delete mode 100644 build/node_modules/es-abstract/2020/thisTimeValue.js delete mode 100644 build/node_modules/es-abstract/5/AbstractEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/5/AbstractRelationalComparison.js delete mode 100644 build/node_modules/es-abstract/5/CheckObjectCoercible.js delete mode 100644 build/node_modules/es-abstract/5/DateFromTime.js delete mode 100644 build/node_modules/es-abstract/5/Day.js delete mode 100644 build/node_modules/es-abstract/5/DayFromYear.js delete mode 100644 build/node_modules/es-abstract/5/DayWithinYear.js delete mode 100644 build/node_modules/es-abstract/5/DaysInYear.js delete mode 100644 build/node_modules/es-abstract/5/FromPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/HourFromTime.js delete mode 100644 build/node_modules/es-abstract/5/InLeapYear.js delete mode 100644 build/node_modules/es-abstract/5/IsAccessorDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/IsCallable.js delete mode 100644 build/node_modules/es-abstract/5/IsDataDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/IsGenericDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/IsPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/MakeDate.js delete mode 100644 build/node_modules/es-abstract/5/MakeDay.js delete mode 100644 build/node_modules/es-abstract/5/MakeTime.js delete mode 100644 build/node_modules/es-abstract/5/MinFromTime.js delete mode 100644 build/node_modules/es-abstract/5/MonthFromTime.js delete mode 100644 build/node_modules/es-abstract/5/SameValue.js delete mode 100644 build/node_modules/es-abstract/5/SecFromTime.js delete mode 100644 build/node_modules/es-abstract/5/StrictEqualityComparison.js delete mode 100644 build/node_modules/es-abstract/5/TimeClip.js delete mode 100644 build/node_modules/es-abstract/5/TimeFromYear.js delete mode 100644 build/node_modules/es-abstract/5/TimeWithinDay.js delete mode 100644 build/node_modules/es-abstract/5/ToBoolean.js delete mode 100644 build/node_modules/es-abstract/5/ToInt32.js delete mode 100644 build/node_modules/es-abstract/5/ToInteger.js delete mode 100644 build/node_modules/es-abstract/5/ToNumber.js delete mode 100644 build/node_modules/es-abstract/5/ToObject.js delete mode 100644 build/node_modules/es-abstract/5/ToPrimitive.js delete mode 100644 build/node_modules/es-abstract/5/ToPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/5/ToString.js delete mode 100644 build/node_modules/es-abstract/5/ToUint16.js delete mode 100644 build/node_modules/es-abstract/5/ToUint32.js delete mode 100644 build/node_modules/es-abstract/5/Type.js delete mode 100644 build/node_modules/es-abstract/5/WeekDay.js delete mode 100644 build/node_modules/es-abstract/5/YearFromTime.js delete mode 100644 build/node_modules/es-abstract/5/abs.js delete mode 100644 build/node_modules/es-abstract/5/floor.js delete mode 100644 build/node_modules/es-abstract/5/modulo.js delete mode 100644 build/node_modules/es-abstract/5/msFromTime.js delete mode 100644 build/node_modules/es-abstract/CHANGELOG.md delete mode 100644 build/node_modules/es-abstract/GetIntrinsic.js delete mode 100644 build/node_modules/es-abstract/LICENSE delete mode 100644 build/node_modules/es-abstract/README.md delete mode 100644 build/node_modules/es-abstract/es2015.js delete mode 100644 build/node_modules/es-abstract/es2016.js delete mode 100644 build/node_modules/es-abstract/es2017.js delete mode 100644 build/node_modules/es-abstract/es2018.js delete mode 100644 build/node_modules/es-abstract/es2019.js delete mode 100644 build/node_modules/es-abstract/es2020.js delete mode 100644 build/node_modules/es-abstract/es5.js delete mode 100644 build/node_modules/es-abstract/es6.js delete mode 100644 build/node_modules/es-abstract/es7.js delete mode 100644 build/node_modules/es-abstract/helpers/DefineOwnProperty.js delete mode 100644 build/node_modules/es-abstract/helpers/OwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/helpers/assertRecord.js delete mode 100644 build/node_modules/es-abstract/helpers/assign.js delete mode 100644 build/node_modules/es-abstract/helpers/callBind.js delete mode 100644 build/node_modules/es-abstract/helpers/callBound.js delete mode 100644 build/node_modules/es-abstract/helpers/every.js delete mode 100644 build/node_modules/es-abstract/helpers/forEach.js delete mode 100644 build/node_modules/es-abstract/helpers/getInferredName.js delete mode 100644 build/node_modules/es-abstract/helpers/getIteratorMethod.js delete mode 100644 build/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/helpers/getProto.js delete mode 100644 build/node_modules/es-abstract/helpers/getSymbolDescription.js delete mode 100644 build/node_modules/es-abstract/helpers/isByteValue.js delete mode 100644 build/node_modules/es-abstract/helpers/isCodePoint.js delete mode 100644 build/node_modules/es-abstract/helpers/isFinite.js delete mode 100644 build/node_modules/es-abstract/helpers/isLeadingSurrogate.js delete mode 100644 build/node_modules/es-abstract/helpers/isNaN.js delete mode 100644 build/node_modules/es-abstract/helpers/isPrefixOf.js delete mode 100644 build/node_modules/es-abstract/helpers/isPrimitive.js delete mode 100644 build/node_modules/es-abstract/helpers/isPropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js delete mode 100644 build/node_modules/es-abstract/helpers/isTrailingSurrogate.js delete mode 100644 build/node_modules/es-abstract/helpers/maxSafeInteger.js delete mode 100644 build/node_modules/es-abstract/helpers/mod.js delete mode 100644 build/node_modules/es-abstract/helpers/padTimeComponent.js delete mode 100644 build/node_modules/es-abstract/helpers/regexTester.js delete mode 100644 build/node_modules/es-abstract/helpers/setProto.js delete mode 100644 build/node_modules/es-abstract/helpers/sign.js delete mode 100644 build/node_modules/es-abstract/helpers/some.js delete mode 100644 build/node_modules/es-abstract/helpers/timeConstants.js delete mode 100644 build/node_modules/es-abstract/index.js delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/.editorconfig delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/.eslintrc delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/.travis.yml delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/CHANGELOG.md delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/LICENSE delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/README.md delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/implementation.js delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/index.js delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/isArguments.js delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/package.json delete mode 100644 build/node_modules/es-abstract/node_modules/object-keys/test/index.js delete mode 100644 build/node_modules/es-abstract/operations/.eslintrc delete mode 100644 build/node_modules/es-abstract/operations/2015.js delete mode 100644 build/node_modules/es-abstract/operations/2016.js delete mode 100644 build/node_modules/es-abstract/operations/2017.js delete mode 100644 build/node_modules/es-abstract/operations/2018.js delete mode 100644 build/node_modules/es-abstract/operations/2019.js delete mode 100644 build/node_modules/es-abstract/operations/2020.js delete mode 100644 build/node_modules/es-abstract/package.json delete mode 100644 build/node_modules/es-abstract/test/GetIntrinsic.js delete mode 100644 build/node_modules/es-abstract/test/diffOps.js delete mode 100644 build/node_modules/es-abstract/test/es2015.js delete mode 100644 build/node_modules/es-abstract/test/es2016.js delete mode 100644 build/node_modules/es-abstract/test/es2017.js delete mode 100644 build/node_modules/es-abstract/test/es2018.js delete mode 100644 build/node_modules/es-abstract/test/es2019.js delete mode 100644 build/node_modules/es-abstract/test/es2020.js delete mode 100644 build/node_modules/es-abstract/test/es5.js delete mode 100644 build/node_modules/es-abstract/test/es6.js delete mode 100644 build/node_modules/es-abstract/test/es7.js delete mode 100644 build/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js delete mode 100644 build/node_modules/es-abstract/test/helpers/assertRecord.js delete mode 100644 build/node_modules/es-abstract/test/helpers/createBoundESNamespace.js delete mode 100644 build/node_modules/es-abstract/test/helpers/defineProperty.js delete mode 100644 build/node_modules/es-abstract/test/helpers/getSymbolDescription.js delete mode 100644 build/node_modules/es-abstract/test/helpers/index.js delete mode 100644 build/node_modules/es-abstract/test/helpers/isByteValue.js delete mode 100644 build/node_modules/es-abstract/test/helpers/isCodePoint.js delete mode 100644 build/node_modules/es-abstract/test/helpers/runManifestTest.js delete mode 100644 build/node_modules/es-abstract/test/index.js delete mode 100644 build/node_modules/es-abstract/test/ses-compat.js delete mode 100644 build/node_modules/es-abstract/test/tests.js delete mode 100644 build/node_modules/es-to-primitive/.eslintrc delete mode 100644 build/node_modules/es-to-primitive/.github/FUNDING.yml delete mode 100644 build/node_modules/es-to-primitive/.travis.yml delete mode 100644 build/node_modules/es-to-primitive/CHANGELOG.md delete mode 100644 build/node_modules/es-to-primitive/LICENSE delete mode 100644 build/node_modules/es-to-primitive/Makefile delete mode 100644 build/node_modules/es-to-primitive/README.md delete mode 100644 build/node_modules/es-to-primitive/es2015.js delete mode 100644 build/node_modules/es-to-primitive/es5.js delete mode 100644 build/node_modules/es-to-primitive/es6.js delete mode 100644 build/node_modules/es-to-primitive/helpers/isPrimitive.js delete mode 100644 build/node_modules/es-to-primitive/index.js delete mode 100644 build/node_modules/es-to-primitive/package.json delete mode 100644 build/node_modules/es-to-primitive/test/es2015.js delete mode 100644 build/node_modules/es-to-primitive/test/es5.js delete mode 100644 build/node_modules/es-to-primitive/test/es6.js delete mode 100644 build/node_modules/es-to-primitive/test/index.js create mode 100644 build/node_modules/escalade/dist/index.js create mode 100644 build/node_modules/escalade/dist/index.mjs create mode 100644 build/node_modules/escalade/index.d.ts create mode 100644 build/node_modules/escalade/license create mode 100644 build/node_modules/escalade/package.json create mode 100644 build/node_modules/escalade/readme.md create mode 100644 build/node_modules/escalade/sync/index.d.ts create mode 100644 build/node_modules/escalade/sync/index.js create mode 100644 build/node_modules/escalade/sync/index.mjs create mode 100644 build/node_modules/escape-string-regexp/index.d.ts create mode 100644 build/node_modules/escape-string-regexp/license create mode 100644 build/node_modules/estree-walker/LICENSE create mode 100644 build/node_modules/estree-walker/dist/esm/estree-walker.js create mode 100644 build/node_modules/estree-walker/dist/esm/package.json create mode 100644 build/node_modules/estree-walker/dist/umd/estree-walker.js create mode 100644 build/node_modules/estree-walker/src/async.js create mode 100644 build/node_modules/estree-walker/src/index.js create mode 100644 build/node_modules/estree-walker/src/package.json create mode 100644 build/node_modules/estree-walker/src/sync.js create mode 100644 build/node_modules/estree-walker/src/walker.js create mode 100644 build/node_modules/estree-walker/types/async.d.ts create mode 100644 build/node_modules/estree-walker/types/index.d.ts create mode 100644 build/node_modules/estree-walker/types/sync.d.ts create mode 100644 build/node_modules/estree-walker/types/tsconfig.tsbuildinfo create mode 100644 build/node_modules/estree-walker/types/walker.d.ts delete mode 100644 build/node_modules/extend/.editorconfig delete mode 100644 build/node_modules/extend/.eslintrc delete mode 100644 build/node_modules/extend/.jscs.json delete mode 100644 build/node_modules/extend/.travis.yml delete mode 100644 build/node_modules/extend/CHANGELOG.md delete mode 100644 build/node_modules/extend/LICENSE delete mode 100644 build/node_modules/extend/README.md delete mode 100644 build/node_modules/extend/component.json delete mode 100644 build/node_modules/extend/index.js delete mode 100644 build/node_modules/extend/package.json create mode 100644 build/node_modules/fill-range/LICENSE create mode 100644 build/node_modules/fill-range/README.md create mode 100644 build/node_modules/fill-range/index.js create mode 100644 build/node_modules/fill-range/package.json create mode 100644 build/node_modules/find-up/index.d.ts create mode 100644 build/node_modules/find-up/index.js create mode 100644 build/node_modules/find-up/license create mode 100644 build/node_modules/find-up/package.json create mode 100644 build/node_modules/find-up/readme.md create mode 100644 build/node_modules/flat/.travis.yml create mode 100644 build/node_modules/flat/LICENSE create mode 100644 build/node_modules/flat/README.md create mode 100755 build/node_modules/flat/cli.js create mode 100644 build/node_modules/flat/index.js create mode 100644 build/node_modules/flat/package.json create mode 100644 build/node_modules/flat/test/test.js delete mode 100644 build/node_modules/form-data/README.md create mode 100644 build/node_modules/form-data/Readme.md delete mode 100644 build/node_modules/formatio/AUTHORS delete mode 100644 build/node_modules/formatio/LICENSE delete mode 100644 build/node_modules/formatio/Readme.md delete mode 100644 build/node_modules/formatio/autolint.js delete mode 100644 build/node_modules/formatio/buster.js delete mode 100644 build/node_modules/formatio/lib/formatio.js delete mode 100644 build/node_modules/formatio/package.json delete mode 100644 build/node_modules/formatio/test/formatio-test.js delete mode 100644 build/node_modules/formidable/benchmark-2020-01-29_xeon-x3440.png delete mode 100644 build/node_modules/formidable/lib/file.js delete mode 100644 build/node_modules/formidable/lib/incoming_form.js delete mode 100644 build/node_modules/formidable/lib/index.js delete mode 100644 build/node_modules/formidable/lib/json_parser.js delete mode 100644 build/node_modules/formidable/lib/multipart_parser.js delete mode 100644 build/node_modules/formidable/lib/octet_parser.js delete mode 100644 build/node_modules/formidable/lib/querystring_parser.js create mode 100644 build/node_modules/formidable/node_modules/qs/.editorconfig create mode 100644 build/node_modules/formidable/node_modules/qs/.eslintignore create mode 100644 build/node_modules/formidable/node_modules/qs/.eslintrc create mode 100644 build/node_modules/formidable/node_modules/qs/.github/FUNDING.yml create mode 100644 build/node_modules/formidable/node_modules/qs/.github/workflows/rebase.yml create mode 100644 build/node_modules/formidable/node_modules/qs/CHANGELOG.md create mode 100644 build/node_modules/formidable/node_modules/qs/LICENSE.md create mode 100644 build/node_modules/formidable/node_modules/qs/README.md create mode 100644 build/node_modules/formidable/node_modules/qs/dist/qs.js create mode 100644 build/node_modules/formidable/node_modules/qs/lib/formats.js create mode 100644 build/node_modules/formidable/node_modules/qs/lib/index.js create mode 100644 build/node_modules/formidable/node_modules/qs/lib/parse.js create mode 100644 build/node_modules/formidable/node_modules/qs/lib/stringify.js create mode 100644 build/node_modules/formidable/node_modules/qs/lib/utils.js create mode 100644 build/node_modules/formidable/node_modules/qs/package.json create mode 100644 build/node_modules/formidable/node_modules/qs/test/.eslintrc create mode 100644 build/node_modules/formidable/node_modules/qs/test/index.js create mode 100644 build/node_modules/formidable/node_modules/qs/test/parse.js create mode 100644 build/node_modules/formidable/node_modules/qs/test/stringify.js create mode 100644 build/node_modules/formidable/node_modules/qs/test/utils.js create mode 100644 build/node_modules/formidable/src/Formidable.js create mode 100644 build/node_modules/formidable/src/FormidableError.js create mode 100644 build/node_modules/formidable/src/PersistentFile.js create mode 100644 build/node_modules/formidable/src/VolatileFile.js create mode 100644 build/node_modules/formidable/src/index.js create mode 100644 build/node_modules/formidable/src/parsers/Dummy.js create mode 100644 build/node_modules/formidable/src/parsers/JSON.js create mode 100644 build/node_modules/formidable/src/parsers/Multipart.js create mode 100644 build/node_modules/formidable/src/parsers/OctetStream.js create mode 100644 build/node_modules/formidable/src/parsers/Querystring.js create mode 100644 build/node_modules/formidable/src/parsers/StreamingQuerystring.js create mode 100644 build/node_modules/formidable/src/parsers/index.js create mode 100644 build/node_modules/formidable/src/plugins/index.js create mode 100644 build/node_modules/formidable/src/plugins/json.js create mode 100644 build/node_modules/formidable/src/plugins/multipart.js create mode 100644 build/node_modules/formidable/src/plugins/octetstream.js create mode 100644 build/node_modules/formidable/src/plugins/querystring.js create mode 100644 build/node_modules/fs.realpath/LICENSE create mode 100644 build/node_modules/fs.realpath/README.md create mode 100644 build/node_modules/fs.realpath/index.js create mode 100644 build/node_modules/fs.realpath/old.js create mode 100644 build/node_modules/fs.realpath/package.json create mode 100644 build/node_modules/get-caller-file/LICENSE.md create mode 100644 build/node_modules/get-caller-file/README.md create mode 100644 build/node_modules/get-caller-file/index.d.ts create mode 100644 build/node_modules/get-caller-file/index.js create mode 100644 build/node_modules/get-caller-file/index.js.map create mode 100644 build/node_modules/get-caller-file/package.json create mode 100644 build/node_modules/glob-parent/CHANGELOG.md create mode 100644 build/node_modules/glob-parent/LICENSE create mode 100644 build/node_modules/glob-parent/README.md create mode 100644 build/node_modules/glob-parent/index.js create mode 100644 build/node_modules/glob-parent/package.json delete mode 100644 build/node_modules/glob/.npmignore delete mode 100644 build/node_modules/glob/.travis.yml create mode 100644 build/node_modules/glob/common.js delete mode 100644 build/node_modules/glob/examples/g.js delete mode 100644 build/node_modules/glob/examples/usr-local.js create mode 100644 build/node_modules/glob/sync.js delete mode 100644 build/node_modules/glob/test/00-setup.js delete mode 100644 build/node_modules/glob/test/bash-comparison.js delete mode 100644 build/node_modules/glob/test/bash-results.json delete mode 100644 build/node_modules/glob/test/cwd-test.js delete mode 100644 build/node_modules/glob/test/globstar-match.js delete mode 100644 build/node_modules/glob/test/mark.js delete mode 100644 build/node_modules/glob/test/nocase-nomagic.js delete mode 100644 build/node_modules/glob/test/pause-resume.js delete mode 100644 build/node_modules/glob/test/root-nomount.js delete mode 100644 build/node_modules/glob/test/root.js delete mode 100644 build/node_modules/glob/test/stat.js delete mode 100644 build/node_modules/glob/test/zz-cleanup.js delete mode 100644 build/node_modules/graceful-fs/.npmignore delete mode 100644 build/node_modules/graceful-fs/README.md delete mode 100644 build/node_modules/graceful-fs/graceful-fs.js delete mode 100644 build/node_modules/graceful-fs/package.json delete mode 100644 build/node_modules/graceful-fs/polyfills.js delete mode 100644 build/node_modules/graceful-fs/test/open.js delete mode 100644 build/node_modules/graceful-fs/test/readdir-sort.js create mode 100644 build/node_modules/growl/.eslintrc.json create mode 100644 build/node_modules/growl/.tags create mode 100644 build/node_modules/growl/.tags1 create mode 100644 build/node_modules/growl/.travis.yml delete mode 100644 build/node_modules/has-bigints/.eslintignore delete mode 100644 build/node_modules/has-bigints/.eslintrc delete mode 100644 build/node_modules/has-bigints/.github/FUNDING.yml delete mode 100644 build/node_modules/has-bigints/.nycrc delete mode 100644 build/node_modules/has-bigints/CHANGELOG.md delete mode 100644 build/node_modules/has-bigints/LICENSE delete mode 100644 build/node_modules/has-bigints/README.md delete mode 100644 build/node_modules/has-bigints/index.js delete mode 100644 build/node_modules/has-bigints/package.json delete mode 100644 build/node_modules/has-bigints/test/index.js create mode 100644 build/node_modules/has-flag/index.d.ts create mode 100644 build/node_modules/has-flag/index.js create mode 100644 build/node_modules/has-flag/license create mode 100644 build/node_modules/has-flag/package.json create mode 100644 build/node_modules/has-flag/readme.md delete mode 100644 build/node_modules/has-symbols/.eslintignore delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/CONTRIBUTING.md delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/GOVERNANCE.md delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/LICENSE delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/README.md delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/errors-browser.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/errors.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/experimentalWarning.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/package.json delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/readable-browser.js delete mode 100644 build/node_modules/hash-base/node_modules/readable-stream/readable.js delete mode 100644 build/node_modules/hash-base/node_modules/safe-buffer/LICENSE delete mode 100644 build/node_modules/hash-base/node_modules/safe-buffer/README.md delete mode 100644 build/node_modules/hash-base/node_modules/safe-buffer/index.d.ts delete mode 100644 build/node_modules/hash-base/node_modules/safe-buffer/index.js delete mode 100644 build/node_modules/hash-base/node_modules/safe-buffer/package.json create mode 100644 build/node_modules/he/LICENSE-MIT.txt create mode 100644 build/node_modules/he/README.md create mode 100755 build/node_modules/he/bin/he create mode 100644 build/node_modules/he/he.js create mode 100644 build/node_modules/he/man/he.1 create mode 100644 build/node_modules/he/package.json create mode 100644 build/node_modules/hexoid/dist/index.js create mode 100644 build/node_modules/hexoid/dist/index.min.js create mode 100644 build/node_modules/hexoid/dist/index.mjs create mode 100644 build/node_modules/hexoid/hexoid.d.ts create mode 100644 build/node_modules/hexoid/license create mode 100644 build/node_modules/hexoid/package.json create mode 100644 build/node_modules/hexoid/readme.md create mode 100644 build/node_modules/inflight/LICENSE create mode 100644 build/node_modules/inflight/README.md create mode 100644 build/node_modules/inflight/inflight.js create mode 100644 build/node_modules/inflight/package.json delete mode 100644 build/node_modules/is-arguments/.editorconfig delete mode 100644 build/node_modules/is-arguments/.eslintignore delete mode 100644 build/node_modules/is-arguments/.eslintrc delete mode 100644 build/node_modules/is-arguments/.github/FUNDING.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/node-4+.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/node-iojs.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/node-pretest.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/node-zero.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/rebase.yml delete mode 100644 build/node_modules/is-arguments/.github/workflows/require-allow-edits.yml delete mode 100644 build/node_modules/is-arguments/.nycrc delete mode 100644 build/node_modules/is-arguments/CHANGELOG.md delete mode 100644 build/node_modules/is-arguments/LICENSE delete mode 100644 build/node_modules/is-arguments/README.md delete mode 100644 build/node_modules/is-arguments/index.js delete mode 100644 build/node_modules/is-arguments/package.json delete mode 100644 build/node_modules/is-arguments/test/index.js delete mode 100644 build/node_modules/is-bigint/.eslintignore delete mode 100644 build/node_modules/is-bigint/.eslintrc delete mode 100644 build/node_modules/is-bigint/.github/FUNDING.yml delete mode 100644 build/node_modules/is-bigint/.nycrc delete mode 100644 build/node_modules/is-bigint/CHANGELOG.md delete mode 100644 build/node_modules/is-bigint/LICENSE delete mode 100644 build/node_modules/is-bigint/README.md delete mode 100644 build/node_modules/is-bigint/index.js delete mode 100644 build/node_modules/is-bigint/package.json delete mode 100644 build/node_modules/is-bigint/test/.eslintrc delete mode 100644 build/node_modules/is-bigint/test/index.js create mode 100644 build/node_modules/is-binary-path/index.d.ts create mode 100644 build/node_modules/is-binary-path/index.js create mode 100644 build/node_modules/is-binary-path/license create mode 100644 build/node_modules/is-binary-path/package.json create mode 100644 build/node_modules/is-binary-path/readme.md delete mode 100644 build/node_modules/is-boolean-object/.editorconfig delete mode 100644 build/node_modules/is-boolean-object/.eslintignore delete mode 100644 build/node_modules/is-boolean-object/.eslintrc delete mode 100644 build/node_modules/is-boolean-object/.github/FUNDING.yml delete mode 100644 build/node_modules/is-boolean-object/.nycrc delete mode 100644 build/node_modules/is-boolean-object/CHANGELOG.md delete mode 100644 build/node_modules/is-boolean-object/LICENSE delete mode 100644 build/node_modules/is-boolean-object/README.md delete mode 100644 build/node_modules/is-boolean-object/index.js delete mode 100644 build/node_modules/is-boolean-object/package.json delete mode 100644 build/node_modules/is-boolean-object/test/index.js delete mode 100644 build/node_modules/is-callable/.editorconfig delete mode 100644 build/node_modules/is-callable/.eslintignore delete mode 100644 build/node_modules/is-callable/.eslintrc delete mode 100644 build/node_modules/is-callable/.github/FUNDING.yml delete mode 100644 build/node_modules/is-callable/.github/main.workflow delete mode 100644 build/node_modules/is-callable/.istanbul.yml delete mode 100644 build/node_modules/is-callable/.nycrc delete mode 100644 build/node_modules/is-callable/CHANGELOG.md delete mode 100644 build/node_modules/is-callable/LICENSE delete mode 100644 build/node_modules/is-callable/README.md delete mode 100644 build/node_modules/is-callable/index.js delete mode 100644 build/node_modules/is-callable/package.json delete mode 100644 build/node_modules/is-callable/test/index.js delete mode 100644 build/node_modules/is-core-module/.eslintignore delete mode 100644 build/node_modules/is-date-object/.editorconfig delete mode 100644 build/node_modules/is-date-object/.eslintignore delete mode 100644 build/node_modules/is-date-object/.eslintrc delete mode 100644 build/node_modules/is-date-object/.github/FUNDING.yml delete mode 100644 build/node_modules/is-date-object/.jscs.json delete mode 100644 build/node_modules/is-date-object/.nycrc delete mode 100644 build/node_modules/is-date-object/CHANGELOG.md delete mode 100644 build/node_modules/is-date-object/LICENSE delete mode 100644 build/node_modules/is-date-object/README.md delete mode 100644 build/node_modules/is-date-object/index.js delete mode 100644 build/node_modules/is-date-object/package.json delete mode 100644 build/node_modules/is-date-object/test/index.js create mode 100644 build/node_modules/is-extglob/LICENSE create mode 100644 build/node_modules/is-extglob/README.md create mode 100644 build/node_modules/is-extglob/index.js create mode 100644 build/node_modules/is-extglob/package.json create mode 100644 build/node_modules/is-fullwidth-code-point/index.d.ts create mode 100644 build/node_modules/is-fullwidth-code-point/index.js create mode 100644 build/node_modules/is-fullwidth-code-point/license create mode 100644 build/node_modules/is-fullwidth-code-point/package.json create mode 100644 build/node_modules/is-fullwidth-code-point/readme.md delete mode 100644 build/node_modules/is-generator-function/.eslintignore delete mode 100644 build/node_modules/is-generator-function/.eslintrc delete mode 100644 build/node_modules/is-generator-function/.nvmrc delete mode 100644 build/node_modules/is-generator-function/.nycrc delete mode 100644 build/node_modules/is-generator-function/CHANGELOG.md delete mode 100644 build/node_modules/is-generator-function/LICENSE delete mode 100644 build/node_modules/is-generator-function/README.md delete mode 100644 build/node_modules/is-generator-function/index.js delete mode 100644 build/node_modules/is-generator-function/package.json delete mode 100644 build/node_modules/is-generator-function/test/corejs.js delete mode 100644 build/node_modules/is-generator-function/test/index.js delete mode 100644 build/node_modules/is-generator-function/test/uglified.js create mode 100644 build/node_modules/is-glob/LICENSE create mode 100644 build/node_modules/is-glob/README.md create mode 100644 build/node_modules/is-glob/index.js create mode 100644 build/node_modules/is-glob/package.json delete mode 100644 build/node_modules/is-negative-zero/.editorconfig delete mode 100644 build/node_modules/is-negative-zero/.eslintignore delete mode 100644 build/node_modules/is-negative-zero/.eslintrc delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/node-4+.yml delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/node-iojs.yml delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/node-pretest.yml delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/node-zero.yml delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/rebase.yml delete mode 100644 build/node_modules/is-negative-zero/.github/workflows/require-allow-edits.yml delete mode 100644 build/node_modules/is-negative-zero/.nycrc delete mode 100644 build/node_modules/is-negative-zero/CHANGELOG.md delete mode 100644 build/node_modules/is-negative-zero/LICENSE delete mode 100644 build/node_modules/is-negative-zero/README.md delete mode 100644 build/node_modules/is-negative-zero/index.js delete mode 100644 build/node_modules/is-negative-zero/package.json delete mode 100644 build/node_modules/is-negative-zero/test/index.js delete mode 100644 build/node_modules/is-number-object/.editorconfig delete mode 100644 build/node_modules/is-number-object/.eslintignore delete mode 100644 build/node_modules/is-number-object/.eslintrc delete mode 100644 build/node_modules/is-number-object/.github/FUNDING.yml delete mode 100644 build/node_modules/is-number-object/.nycrc delete mode 100644 build/node_modules/is-number-object/CHANGELOG.md delete mode 100644 build/node_modules/is-number-object/LICENSE delete mode 100644 build/node_modules/is-number-object/README.md delete mode 100644 build/node_modules/is-number-object/index.js delete mode 100644 build/node_modules/is-number-object/package.json delete mode 100644 build/node_modules/is-number-object/test/corejs.js delete mode 100644 build/node_modules/is-number-object/test/index.js create mode 100644 build/node_modules/is-number/LICENSE create mode 100644 build/node_modules/is-number/README.md create mode 100644 build/node_modules/is-number/index.js create mode 100644 build/node_modules/is-number/package.json create mode 100644 build/node_modules/is-plain-obj/index.d.ts create mode 100644 build/node_modules/is-plain-obj/index.js create mode 100644 build/node_modules/is-plain-obj/license create mode 100644 build/node_modules/is-plain-obj/package.json create mode 100644 build/node_modules/is-plain-obj/readme.md create mode 100644 build/node_modules/is-reference/CHANGELOG.md create mode 100644 build/node_modules/is-reference/README.md create mode 100644 build/node_modules/is-reference/dist/is-reference.es.js create mode 100644 build/node_modules/is-reference/dist/is-reference.js create mode 100644 build/node_modules/is-reference/dist/types/index.d.ts create mode 100644 build/node_modules/is-reference/package.json delete mode 100644 build/node_modules/is-regex/.editorconfig delete mode 100644 build/node_modules/is-regex/.eslintignore delete mode 100644 build/node_modules/is-regex/.eslintrc delete mode 100644 build/node_modules/is-regex/.nycrc delete mode 100644 build/node_modules/is-regex/CHANGELOG.md delete mode 100644 build/node_modules/is-regex/LICENSE delete mode 100644 build/node_modules/is-regex/README.md delete mode 100644 build/node_modules/is-regex/index.js delete mode 100644 build/node_modules/is-regex/package.json delete mode 100644 build/node_modules/is-regex/test/index.js delete mode 100644 build/node_modules/is-string/.eslintignore delete mode 100644 build/node_modules/is-string/.eslintrc delete mode 100644 build/node_modules/is-string/.github/FUNDING.yml delete mode 100644 build/node_modules/is-string/.nycrc delete mode 100644 build/node_modules/is-string/CHANGELOG.md delete mode 100644 build/node_modules/is-string/LICENSE delete mode 100644 build/node_modules/is-string/README.md delete mode 100644 build/node_modules/is-string/index.js delete mode 100644 build/node_modules/is-string/package.json delete mode 100644 build/node_modules/is-string/test/index.js delete mode 100644 build/node_modules/is-symbol/.editorconfig delete mode 100644 build/node_modules/is-symbol/.eslintignore delete mode 100644 build/node_modules/is-symbol/.eslintrc delete mode 100644 build/node_modules/is-symbol/.github/FUNDING.yml delete mode 100644 build/node_modules/is-symbol/.nycrc delete mode 100644 build/node_modules/is-symbol/CHANGELOG.md delete mode 100644 build/node_modules/is-symbol/LICENSE delete mode 100644 build/node_modules/is-symbol/README.md delete mode 100644 build/node_modules/is-symbol/index.js delete mode 100644 build/node_modules/is-symbol/package.json delete mode 100644 build/node_modules/is-symbol/test/index.js delete mode 100644 build/node_modules/is-typed-array/.editorconfig delete mode 100644 build/node_modules/is-typed-array/.eslintignore delete mode 100644 build/node_modules/is-typed-array/.eslintrc delete mode 100644 build/node_modules/is-typed-array/.github/FUNDING.yml delete mode 100644 build/node_modules/is-typed-array/.nycrc delete mode 100644 build/node_modules/is-typed-array/CHANGELOG.md delete mode 100644 build/node_modules/is-typed-array/LICENSE delete mode 100644 build/node_modules/is-typed-array/README.md delete mode 100644 build/node_modules/is-typed-array/index.js delete mode 100644 build/node_modules/is-typed-array/package.json delete mode 100644 build/node_modules/is-typed-array/test/index.js create mode 100644 build/node_modules/is-unicode-supported/index.d.ts create mode 100644 build/node_modules/is-unicode-supported/index.js create mode 100644 build/node_modules/is-unicode-supported/license create mode 100644 build/node_modules/is-unicode-supported/package.json create mode 100644 build/node_modules/is-unicode-supported/readme.md create mode 100644 build/node_modules/isexe/.npmignore create mode 100644 build/node_modules/isexe/LICENSE create mode 100644 build/node_modules/isexe/README.md create mode 100644 build/node_modules/isexe/index.js create mode 100644 build/node_modules/isexe/mode.js create mode 100644 build/node_modules/isexe/package.json create mode 100644 build/node_modules/isexe/test/basic.js create mode 100644 build/node_modules/isexe/windows.js delete mode 100644 build/node_modules/jade/.npmignore delete mode 100644 build/node_modules/jade/LICENSE delete mode 100755 build/node_modules/jade/bin/jade delete mode 100644 build/node_modules/jade/index.js delete mode 100644 build/node_modules/jade/jade.js delete mode 100644 build/node_modules/jade/jade.md delete mode 100644 build/node_modules/jade/jade.min.js delete mode 100644 build/node_modules/jade/lib/compiler.js delete mode 100644 build/node_modules/jade/lib/doctypes.js delete mode 100644 build/node_modules/jade/lib/filters.js delete mode 100644 build/node_modules/jade/lib/inline-tags.js delete mode 100644 build/node_modules/jade/lib/jade.js delete mode 100644 build/node_modules/jade/lib/lexer.js delete mode 100644 build/node_modules/jade/lib/nodes/attrs.js delete mode 100644 build/node_modules/jade/lib/nodes/block-comment.js delete mode 100644 build/node_modules/jade/lib/nodes/block.js delete mode 100644 build/node_modules/jade/lib/nodes/case.js delete mode 100644 build/node_modules/jade/lib/nodes/code.js delete mode 100644 build/node_modules/jade/lib/nodes/comment.js delete mode 100644 build/node_modules/jade/lib/nodes/doctype.js delete mode 100644 build/node_modules/jade/lib/nodes/each.js delete mode 100644 build/node_modules/jade/lib/nodes/filter.js delete mode 100644 build/node_modules/jade/lib/nodes/index.js delete mode 100644 build/node_modules/jade/lib/nodes/literal.js delete mode 100644 build/node_modules/jade/lib/nodes/mixin.js delete mode 100644 build/node_modules/jade/lib/nodes/node.js delete mode 100644 build/node_modules/jade/lib/nodes/tag.js delete mode 100644 build/node_modules/jade/lib/nodes/text.js delete mode 100644 build/node_modules/jade/lib/parser.js delete mode 100644 build/node_modules/jade/lib/runtime.js delete mode 100644 build/node_modules/jade/lib/self-closing.js delete mode 100644 build/node_modules/jade/lib/utils.js delete mode 100644 build/node_modules/jade/node_modules/commander/.npmignore delete mode 100644 build/node_modules/jade/node_modules/commander/History.md delete mode 100644 build/node_modules/jade/node_modules/commander/Makefile delete mode 100644 build/node_modules/jade/node_modules/commander/Readme.md delete mode 100644 build/node_modules/jade/node_modules/commander/index.js delete mode 100644 build/node_modules/jade/node_modules/commander/lib/commander.js delete mode 100644 build/node_modules/jade/node_modules/commander/package.json delete mode 100644 build/node_modules/jade/node_modules/mkdirp/.gitignore.orig delete mode 100644 build/node_modules/jade/node_modules/mkdirp/.gitignore.rej delete mode 100644 build/node_modules/jade/node_modules/mkdirp/.npmignore delete mode 100644 build/node_modules/jade/node_modules/mkdirp/LICENSE delete mode 100644 build/node_modules/jade/node_modules/mkdirp/README.markdown delete mode 100644 build/node_modules/jade/node_modules/mkdirp/examples/pow.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig delete mode 100644 build/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej delete mode 100644 build/node_modules/jade/node_modules/mkdirp/index.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/package.json delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/chmod.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/clobber.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/mkdirp.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/perm.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/perm_sync.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/race.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/rel.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/sync.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/umask.js delete mode 100644 build/node_modules/jade/node_modules/mkdirp/test/umask_sync.js delete mode 100644 build/node_modules/jade/package.json delete mode 100644 build/node_modules/jade/runtime.js delete mode 100644 build/node_modules/jade/runtime.min.js delete mode 100644 build/node_modules/jade/test.jade delete mode 100644 build/node_modules/jade/testing/head.jade delete mode 100644 build/node_modules/jade/testing/index.jade delete mode 100644 build/node_modules/jade/testing/index.js delete mode 100644 build/node_modules/jade/testing/layout.jade delete mode 100644 build/node_modules/jade/testing/user.jade delete mode 100644 build/node_modules/jade/testing/user.js create mode 100644 build/node_modules/js-yaml/CHANGELOG.md create mode 100644 build/node_modules/js-yaml/LICENSE create mode 100644 build/node_modules/js-yaml/README.md create mode 100755 build/node_modules/js-yaml/bin/js-yaml.js create mode 100644 build/node_modules/js-yaml/dist/js-yaml.js create mode 100644 build/node_modules/js-yaml/dist/js-yaml.min.js create mode 100644 build/node_modules/js-yaml/dist/js-yaml.mjs create mode 100644 build/node_modules/js-yaml/index.js create mode 100644 build/node_modules/js-yaml/lib/common.js create mode 100644 build/node_modules/js-yaml/lib/dumper.js create mode 100644 build/node_modules/js-yaml/lib/exception.js create mode 100644 build/node_modules/js-yaml/lib/loader.js create mode 100644 build/node_modules/js-yaml/lib/schema.js create mode 100644 build/node_modules/js-yaml/lib/schema/core.js create mode 100644 build/node_modules/js-yaml/lib/schema/default.js create mode 100644 build/node_modules/js-yaml/lib/schema/failsafe.js create mode 100644 build/node_modules/js-yaml/lib/schema/json.js create mode 100644 build/node_modules/js-yaml/lib/snippet.js create mode 100644 build/node_modules/js-yaml/lib/type.js create mode 100644 build/node_modules/js-yaml/lib/type/binary.js create mode 100644 build/node_modules/js-yaml/lib/type/bool.js create mode 100644 build/node_modules/js-yaml/lib/type/float.js create mode 100644 build/node_modules/js-yaml/lib/type/int.js create mode 100644 build/node_modules/js-yaml/lib/type/map.js create mode 100644 build/node_modules/js-yaml/lib/type/merge.js create mode 100644 build/node_modules/js-yaml/lib/type/null.js create mode 100644 build/node_modules/js-yaml/lib/type/omap.js create mode 100644 build/node_modules/js-yaml/lib/type/pairs.js create mode 100644 build/node_modules/js-yaml/lib/type/seq.js create mode 100644 build/node_modules/js-yaml/lib/type/set.js create mode 100644 build/node_modules/js-yaml/lib/type/str.js create mode 100644 build/node_modules/js-yaml/lib/type/timestamp.js create mode 100644 build/node_modules/js-yaml/package.json create mode 100644 build/node_modules/just-extend/LICENSE create mode 100644 build/node_modules/just-extend/README.md create mode 100644 build/node_modules/just-extend/index.d.ts create mode 100644 build/node_modules/just-extend/index.js create mode 100644 build/node_modules/just-extend/index.tests.ts create mode 100644 build/node_modules/just-extend/package.json create mode 120000 build/node_modules/levelup/node_modules/.bin/semver rename build/node_modules/{ => levelup/node_modules}/semver/.npmignore (100%) rename build/node_modules/{graceful-fs => levelup/node_modules/semver}/LICENSE (100%) rename build/node_modules/{ => levelup/node_modules}/semver/Makefile (100%) create mode 100644 build/node_modules/levelup/node_modules/semver/README.md rename build/node_modules/{ => levelup/node_modules}/semver/bin/semver (100%) rename build/node_modules/{ => levelup/node_modules}/semver/foot.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/head.js (100%) create mode 100644 build/node_modules/levelup/node_modules/semver/package.json rename build/node_modules/{ => levelup/node_modules}/semver/semver.browser.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/semver.browser.js.gz (100%) rename build/node_modules/{ => levelup/node_modules}/semver/semver.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/semver.min.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/semver.min.js.gz (100%) rename build/node_modules/{ => levelup/node_modules}/semver/test/amd.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/test/gtr.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/test/index.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/test/ltr.js (100%) rename build/node_modules/{ => levelup/node_modules}/semver/test/no-module.js (100%) create mode 100644 build/node_modules/locate-path/index.d.ts create mode 100644 build/node_modules/locate-path/index.js create mode 100644 build/node_modules/locate-path/license create mode 100644 build/node_modules/locate-path/package.json create mode 100644 build/node_modules/locate-path/readme.md create mode 100644 build/node_modules/lodash.get/LICENSE create mode 100644 build/node_modules/lodash.get/README.md create mode 100644 build/node_modules/lodash.get/index.js create mode 100644 build/node_modules/lodash.get/package.json create mode 100644 build/node_modules/log-symbols/browser.js create mode 100644 build/node_modules/log-symbols/index.d.ts create mode 100644 build/node_modules/log-symbols/index.js create mode 100644 build/node_modules/log-symbols/license create mode 100644 build/node_modules/log-symbols/package.json create mode 100644 build/node_modules/log-symbols/readme.md delete mode 100644 build/node_modules/logform/.travis.yml delete mode 100644 build/node_modules/lolex/.editorconfig delete mode 100644 build/node_modules/lolex/.jslintrc delete mode 100644 build/node_modules/lolex/.min-wd delete mode 100644 build/node_modules/lolex/.npmignore delete mode 100644 build/node_modules/lolex/.travis.yml delete mode 100644 build/node_modules/lolex/Readme.md delete mode 100644 build/node_modules/lolex/lolex.js delete mode 100644 build/node_modules/lolex/package.json delete mode 100755 build/node_modules/lolex/script/ci-test.sh delete mode 100644 build/node_modules/lolex/src/lolex.js delete mode 100644 build/node_modules/lolex/test/lolex-test.js delete mode 100644 build/node_modules/lru-cache/.npmignore delete mode 100644 build/node_modules/lru-cache/.travis.yml delete mode 100644 build/node_modules/lru-cache/CONTRIBUTORS create mode 100644 build/node_modules/lru-cache/index.js delete mode 100644 build/node_modules/lru-cache/lib/lru-cache.js delete mode 100644 build/node_modules/lru-cache/test/basic.js delete mode 100644 build/node_modules/lru-cache/test/foreach.js delete mode 100644 build/node_modules/lru-cache/test/memory-leak.js delete mode 100644 build/node_modules/lru-cache/test/serialize.js delete mode 100644 build/node_modules/magic-string/CHANGELOG.md create mode 100644 build/node_modules/mime/Mime.js create mode 100644 build/node_modules/mime/index.js create mode 100644 build/node_modules/mime/lite.js delete mode 100644 build/node_modules/mime/mime.js delete mode 100755 build/node_modules/mime/src/build.js delete mode 100644 build/node_modules/mime/src/test.js delete mode 100644 build/node_modules/mime/types.json create mode 100644 build/node_modules/mime/types/other.js create mode 100644 build/node_modules/mime/types/standard.js delete mode 100644 build/node_modules/minimatch/.npmignore delete mode 100644 build/node_modules/minimatch/test/basic.js delete mode 100644 build/node_modules/minimatch/test/brace-expand.js delete mode 100644 build/node_modules/minimatch/test/caching.js delete mode 100644 build/node_modules/minimatch/test/defaults.js delete mode 100644 build/node_modules/minimatch/test/extglob-ending-with-state-char.js delete mode 100644 build/node_modules/mocha/HISTORY.md rename build/node_modules/mocha/{images => assets/growl}/error.png (100%) rename build/node_modules/mocha/{images => assets/growl}/ok.png (100%) delete mode 100644 build/node_modules/mocha/bin/.eslintrc delete mode 100644 build/node_modules/mocha/bin/options.js create mode 100644 build/node_modules/mocha/browser-entry.js delete mode 100644 build/node_modules/mocha/lib/browser/debug.js delete mode 100644 build/node_modules/mocha/lib/browser/diff.js delete mode 100644 build/node_modules/mocha/lib/browser/events.js create mode 100644 build/node_modules/mocha/lib/browser/growl.js create mode 100644 build/node_modules/mocha/lib/browser/highlight-tags.js create mode 100644 build/node_modules/mocha/lib/browser/parse-query.js create mode 100644 build/node_modules/mocha/lib/browser/template.html delete mode 100644 build/node_modules/mocha/lib/browser/tty.js create mode 100755 build/node_modules/mocha/lib/cli/cli.js create mode 100644 build/node_modules/mocha/lib/cli/collect-files.js create mode 100644 build/node_modules/mocha/lib/cli/commands.js create mode 100644 build/node_modules/mocha/lib/cli/config.js create mode 100644 build/node_modules/mocha/lib/cli/index.js create mode 100644 build/node_modules/mocha/lib/cli/init.js create mode 100644 build/node_modules/mocha/lib/cli/lookup-files.js create mode 100644 build/node_modules/mocha/lib/cli/node-flags.js create mode 100644 build/node_modules/mocha/lib/cli/one-and-dones.js create mode 100644 build/node_modules/mocha/lib/cli/options.js create mode 100644 build/node_modules/mocha/lib/cli/run-helpers.js create mode 100644 build/node_modules/mocha/lib/cli/run-option-metadata.js create mode 100644 build/node_modules/mocha/lib/cli/run.js create mode 100644 build/node_modules/mocha/lib/cli/watch-run.js create mode 100644 build/node_modules/mocha/lib/errors.js create mode 100644 build/node_modules/mocha/lib/mocharc.json delete mode 100644 build/node_modules/mocha/lib/ms.js create mode 100644 build/node_modules/mocha/lib/nodejs/buffered-worker-pool.js create mode 100644 build/node_modules/mocha/lib/nodejs/esm-utils.js create mode 100644 build/node_modules/mocha/lib/nodejs/file-unloader.js create mode 100644 build/node_modules/mocha/lib/nodejs/growl.js create mode 100644 build/node_modules/mocha/lib/nodejs/parallel-buffered-runner.js create mode 100644 build/node_modules/mocha/lib/nodejs/reporters/parallel-buffered.js create mode 100644 build/node_modules/mocha/lib/nodejs/serializer.js create mode 100644 build/node_modules/mocha/lib/nodejs/worker.js create mode 100644 build/node_modules/mocha/lib/plugin-loader.js delete mode 100644 build/node_modules/mocha/lib/reporters/html-cov.js delete mode 100644 build/node_modules/mocha/lib/reporters/json-cov.js delete mode 100644 build/node_modules/mocha/lib/reporters/templates/coverage.jade delete mode 100644 build/node_modules/mocha/lib/reporters/templates/menu.jade delete mode 100644 build/node_modules/mocha/lib/reporters/templates/script.html delete mode 100644 build/node_modules/mocha/lib/reporters/templates/style.html create mode 100644 build/node_modules/mocha/lib/stats-collector.js delete mode 100644 build/node_modules/mocha/lib/template.html create mode 100644 build/node_modules/mocha/mocha-es2018.js create mode 100644 build/node_modules/mocha/mocha.js.map delete mode 120000 build/node_modules/mocha/node_modules/.bin/mkdirp delete mode 100644 build/node_modules/mocha/node_modules/debug/.jshintrc delete mode 100644 build/node_modules/mocha/node_modules/debug/.npmignore delete mode 100644 build/node_modules/mocha/node_modules/debug/History.md create mode 100644 build/node_modules/mocha/node_modules/debug/LICENSE delete mode 100644 build/node_modules/mocha/node_modules/debug/Makefile create mode 100644 build/node_modules/mocha/node_modules/debug/README.md delete mode 100644 build/node_modules/mocha/node_modules/debug/Readme.md delete mode 100644 build/node_modules/mocha/node_modules/debug/bower.json delete mode 100644 build/node_modules/mocha/node_modules/debug/browser.js delete mode 100644 build/node_modules/mocha/node_modules/debug/component.json delete mode 100644 build/node_modules/mocha/node_modules/debug/debug.js delete mode 100644 build/node_modules/mocha/node_modules/debug/node.js create mode 100644 build/node_modules/mocha/node_modules/debug/node_modules/ms/index.js create mode 100644 build/node_modules/mocha/node_modules/debug/node_modules/ms/license.md create mode 100644 build/node_modules/mocha/node_modules/debug/node_modules/ms/package.json create mode 100644 build/node_modules/mocha/node_modules/debug/node_modules/ms/readme.md create mode 100644 build/node_modules/mocha/node_modules/debug/src/browser.js create mode 100644 build/node_modules/mocha/node_modules/debug/src/common.js create mode 100644 build/node_modules/mocha/node_modules/debug/src/index.js create mode 100644 build/node_modules/mocha/node_modules/debug/src/node.js create mode 100644 build/node_modules/mocha/node_modules/minimatch/LICENSE create mode 100644 build/node_modules/mocha/node_modules/minimatch/README.md create mode 100644 build/node_modules/mocha/node_modules/minimatch/minimatch.js create mode 100644 build/node_modules/mocha/node_modules/minimatch/package.json delete mode 100644 build/node_modules/mocha/node_modules/minimist/.travis.yml delete mode 100644 build/node_modules/mocha/node_modules/minimist/example/parse.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/index.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/package.json delete mode 100644 build/node_modules/mocha/node_modules/minimist/readme.markdown delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/dash.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/default_bool.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/dotted.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/long.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/parse.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/parse_modified.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/short.js delete mode 100644 build/node_modules/mocha/node_modules/minimist/test/whitespace.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/.npmignore delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/.travis.yml delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/LICENSE delete mode 100755 build/node_modules/mocha/node_modules/mkdirp/bin/cmd.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/bin/usage.txt delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/examples/pow.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/index.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/package.json delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/readme.markdown delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/chmod.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/clobber.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/perm.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/race.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/rel.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/return.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/return_sync.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/root.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/sync.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/umask.js delete mode 100644 build/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js delete mode 100644 build/node_modules/mocha/node_modules/ms/.npmignore delete mode 100644 build/node_modules/mocha/node_modules/ms/History.md delete mode 100644 build/node_modules/mocha/node_modules/ms/LICENSE delete mode 100644 build/node_modules/mocha/node_modules/ms/README.md create mode 100644 build/node_modules/mocha/node_modules/ms/license.md create mode 100644 build/node_modules/mocha/node_modules/ms/readme.md create mode 100644 build/node_modules/nanoid/LICENSE create mode 100644 build/node_modules/nanoid/README.md create mode 100644 build/node_modules/nanoid/async/index.browser.cjs create mode 100644 build/node_modules/nanoid/async/index.browser.js create mode 100644 build/node_modules/nanoid/async/index.cjs create mode 100644 build/node_modules/nanoid/async/index.d.ts create mode 100644 build/node_modules/nanoid/async/index.js create mode 100644 build/node_modules/nanoid/async/index.native.js create mode 100644 build/node_modules/nanoid/async/package.json create mode 100755 build/node_modules/nanoid/bin/nanoid.cjs create mode 100644 build/node_modules/nanoid/index.browser.cjs create mode 100644 build/node_modules/nanoid/index.browser.js create mode 100644 build/node_modules/nanoid/index.cjs create mode 100644 build/node_modules/nanoid/index.d.ts create mode 100644 build/node_modules/nanoid/index.js create mode 100644 build/node_modules/nanoid/nanoid.js create mode 100644 build/node_modules/nanoid/non-secure/index.cjs create mode 100644 build/node_modules/nanoid/non-secure/index.d.ts create mode 100644 build/node_modules/nanoid/non-secure/index.js create mode 100644 build/node_modules/nanoid/non-secure/package.json create mode 100644 build/node_modules/nanoid/package.json create mode 100644 build/node_modules/nanoid/url-alphabet/index.cjs create mode 100644 build/node_modules/nanoid/url-alphabet/index.js create mode 100644 build/node_modules/nanoid/url-alphabet/package.json create mode 100644 build/node_modules/nise/LICENSE create mode 100644 build/node_modules/nise/README.md create mode 100644 build/node_modules/nise/lib/configure-logger/index.js create mode 100644 build/node_modules/nise/lib/configure-logger/index.test.js create mode 100644 build/node_modules/nise/lib/event/custom-event.js create mode 100644 build/node_modules/nise/lib/event/event-target.js create mode 100644 build/node_modules/nise/lib/event/event.js create mode 100644 build/node_modules/nise/lib/event/index.js create mode 100644 build/node_modules/nise/lib/event/index.test.js create mode 100644 build/node_modules/nise/lib/event/progress-event.js create mode 100644 build/node_modules/nise/lib/fake-server/fake-server-with-clock.js create mode 100644 build/node_modules/nise/lib/fake-server/fake-server-with-clock.test.js create mode 100644 build/node_modules/nise/lib/fake-server/index.js create mode 100644 build/node_modules/nise/lib/fake-server/index.test.js create mode 100644 build/node_modules/nise/lib/fake-server/log.js create mode 100644 build/node_modules/nise/lib/fake-server/log.test.js create mode 100644 build/node_modules/nise/lib/fake-xhr/blob.js create mode 100644 build/node_modules/nise/lib/fake-xhr/index.js create mode 100644 build/node_modules/nise/lib/fake-xhr/index.test.js create mode 100644 build/node_modules/nise/lib/index.js create mode 100644 build/node_modules/nise/lib/index.test.js create mode 100644 build/node_modules/nise/nise.js create mode 100644 build/node_modules/nise/package.json create mode 100644 build/node_modules/normalize-path/LICENSE create mode 100644 build/node_modules/normalize-path/README.md create mode 100644 build/node_modules/normalize-path/index.js create mode 100644 build/node_modules/normalize-path/package.json create mode 100644 build/node_modules/object-inspect/CHANGELOG.md delete mode 100644 build/node_modules/object.assign/.editorconfig delete mode 100644 build/node_modules/object.assign/.eslintignore delete mode 100644 build/node_modules/object.assign/.eslintrc delete mode 100644 build/node_modules/object.assign/.github/FUNDING.yml delete mode 100644 build/node_modules/object.assign/.github/workflows/rebase.yml delete mode 100644 build/node_modules/object.assign/.github/workflows/require-allow-edits.yml delete mode 100644 build/node_modules/object.assign/.nycrc delete mode 100644 build/node_modules/object.assign/CHANGELOG.md delete mode 100644 build/node_modules/object.assign/LICENSE delete mode 100644 build/node_modules/object.assign/README.md delete mode 100644 build/node_modules/object.assign/auto.js delete mode 100644 build/node_modules/object.assign/dist/browser.js delete mode 100644 build/node_modules/object.assign/hasSymbols.js delete mode 100644 build/node_modules/object.assign/implementation.js delete mode 100644 build/node_modules/object.assign/index.js delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/.editorconfig delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/.eslintrc delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/.travis.yml delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/CHANGELOG.md delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/LICENSE delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/README.md delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/implementation.js delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/index.js delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/isArguments.js delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/package.json delete mode 100644 build/node_modules/object.assign/node_modules/object-keys/test/index.js delete mode 100644 build/node_modules/object.assign/package.json delete mode 100644 build/node_modules/object.assign/polyfill.js delete mode 100644 build/node_modules/object.assign/shim.js delete mode 100644 build/node_modules/object.assign/test/index.js delete mode 100644 build/node_modules/object.assign/test/native.js delete mode 100644 build/node_modules/object.assign/test/ses-compat.js delete mode 100644 build/node_modules/object.assign/test/shimmed.js delete mode 100644 build/node_modules/object.assign/test/tests.js create mode 100644 build/node_modules/p-limit/index.d.ts create mode 100644 build/node_modules/p-limit/index.js create mode 100644 build/node_modules/p-limit/license create mode 100644 build/node_modules/p-limit/package.json create mode 100644 build/node_modules/p-limit/readme.md create mode 100644 build/node_modules/p-locate/index.d.ts create mode 100644 build/node_modules/p-locate/index.js create mode 100644 build/node_modules/p-locate/license create mode 100644 build/node_modules/p-locate/package.json create mode 100644 build/node_modules/p-locate/readme.md create mode 100644 build/node_modules/path-exists/index.d.ts create mode 100644 build/node_modules/path-exists/index.js create mode 100644 build/node_modules/path-exists/license create mode 100644 build/node_modules/path-exists/package.json create mode 100644 build/node_modules/path-exists/readme.md create mode 100644 build/node_modules/path-is-absolute/index.js create mode 100644 build/node_modules/path-is-absolute/license create mode 100644 build/node_modules/path-is-absolute/package.json create mode 100644 build/node_modules/path-is-absolute/readme.md create mode 100644 build/node_modules/path-to-regexp/History.md create mode 100644 build/node_modules/path-to-regexp/LICENSE create mode 100644 build/node_modules/path-to-regexp/Readme.md create mode 100644 build/node_modules/path-to-regexp/index.d.ts create mode 100644 build/node_modules/path-to-regexp/index.js create mode 100644 build/node_modules/path-to-regexp/node_modules/isarray/README.md create mode 100644 build/node_modules/path-to-regexp/node_modules/isarray/build/build.js create mode 100644 build/node_modules/path-to-regexp/node_modules/isarray/component.json create mode 100644 build/node_modules/path-to-regexp/node_modules/isarray/index.js create mode 100644 build/node_modules/path-to-regexp/node_modules/isarray/package.json create mode 100644 build/node_modules/path-to-regexp/package.json create mode 100644 build/node_modules/picomatch/CHANGELOG.md create mode 100644 build/node_modules/picomatch/LICENSE create mode 100644 build/node_modules/picomatch/README.md create mode 100644 build/node_modules/picomatch/index.js create mode 100644 build/node_modules/picomatch/lib/constants.js create mode 100644 build/node_modules/picomatch/lib/parse.js create mode 100644 build/node_modules/picomatch/lib/picomatch.js create mode 100644 build/node_modules/picomatch/lib/scan.js create mode 100644 build/node_modules/picomatch/lib/utils.js create mode 100644 build/node_modules/picomatch/package.json delete mode 100644 build/node_modules/qs/.eslintignore rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/errors-browser.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/errors.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/experimentalWarning.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/async_iterator.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/buffer_list.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/end-of-stream.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/from-browser.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/from.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/pipeline.js (100%) rename build/node_modules/{browserify-sign/node_modules => }/readable-stream/lib/internal/streams/state.js (100%) create mode 100644 build/node_modules/readdirp/LICENSE create mode 100644 build/node_modules/readdirp/README.md create mode 100644 build/node_modules/readdirp/index.d.ts create mode 100644 build/node_modules/readdirp/index.js create mode 100644 build/node_modules/readdirp/package.json create mode 100644 build/node_modules/require-directory/.jshintrc create mode 100644 build/node_modules/require-directory/.npmignore rename build/node_modules/{formatio => require-directory}/.travis.yml (100%) create mode 100644 build/node_modules/require-directory/LICENSE create mode 100644 build/node_modules/require-directory/README.markdown create mode 100644 build/node_modules/require-directory/index.js create mode 100644 build/node_modules/require-directory/package.json delete mode 100644 build/node_modules/resolve/.eslintignore create mode 100644 build/node_modules/resolve/.github/FUNDING.yml create mode 100644 build/node_modules/resolve/async.js create mode 100755 build/node_modules/resolve/bin/resolve create mode 100644 build/node_modules/resolve/lib/homedir.js create mode 100644 build/node_modules/resolve/sync.js delete mode 100644 build/node_modules/resolve/test/.eslintrc create mode 100644 build/node_modules/resolve/test/home_paths.js create mode 100644 build/node_modules/resolve/test/home_paths_sync.js rename build/node_modules/{mime/.npmignore => resolve/test/resolver/malformed_package_json/index.js} (100%) create mode 100644 build/node_modules/resolve/test/resolver/malformed_package_json/package.json delete mode 100644 build/node_modules/rollup-plugin-commonjs/CHANGELOG.md delete mode 100644 build/node_modules/rollup-plugin-commonjs/LICENSE delete mode 100644 build/node_modules/rollup-plugin-commonjs/README.md delete mode 100644 build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js.map delete mode 100644 build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js.map delete mode 100644 build/node_modules/rollup-plugin-commonjs/index.d.ts delete mode 100644 build/node_modules/rollup-plugin-commonjs/package.json delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/ast-utils.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/default-resolver.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/helpers.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/index.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/is-cjs.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/resolve-id.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/transform.js delete mode 100644 build/node_modules/rollup-plugin-commonjs/src/utils.js delete mode 100644 build/node_modules/rollup-plugin-json/CHANGELOG.md delete mode 100644 build/node_modules/rollup-plugin-json/README.md delete mode 100644 build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js delete mode 100644 build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js.map delete mode 100644 build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js delete mode 100644 build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js.map delete mode 100644 build/node_modules/rollup-plugin-json/package.json delete mode 100644 build/node_modules/rollup-plugin-json/src/index.js delete mode 100644 build/node_modules/rollup-plugin-node-resolve/CHANGELOG.md delete mode 100644 build/node_modules/rollup-plugin-node-resolve/README.md delete mode 100644 build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js delete mode 100644 build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es.js delete mode 100644 build/node_modules/rollup-plugin-node-resolve/package.json delete mode 100644 build/node_modules/rollup-plugin-node-resolve/src/empty.js delete mode 100644 build/node_modules/rollup-plugin-node-resolve/src/index.js create mode 100644 build/node_modules/rollup-pluginutils/node_modules/estree-walker/CHANGELOG.md create mode 100644 build/node_modules/rollup-pluginutils/node_modules/estree-walker/README.md rename build/node_modules/{ => rollup-pluginutils/node_modules}/estree-walker/dist/estree-walker.umd.js (100%) rename build/node_modules/{ => rollup-pluginutils/node_modules}/estree-walker/dist/estree-walker.umd.js.map (100%) rename build/node_modules/{ => rollup-pluginutils/node_modules}/estree-walker/index.d.ts (100%) create mode 100644 build/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json rename build/node_modules/{ => rollup-pluginutils/node_modules}/estree-walker/src/estree-walker.js (100%) create mode 100644 build/node_modules/safe-stable-stringify/CHANGELOG.md create mode 100644 build/node_modules/safe-stable-stringify/LICENSE create mode 100644 build/node_modules/safe-stable-stringify/esm/package.json create mode 100644 build/node_modules/safe-stable-stringify/esm/wrapper.js create mode 100644 build/node_modules/safe-stable-stringify/index.d.ts create mode 100644 build/node_modules/safe-stable-stringify/index.js create mode 100644 build/node_modules/safe-stable-stringify/package.json create mode 100644 build/node_modules/safe-stable-stringify/readme.md create mode 100644 build/node_modules/safe-stable-stringify/tsconfig.json delete mode 100644 build/node_modules/samsam/.npmignore delete mode 100644 build/node_modules/samsam/.travis.yml delete mode 100644 build/node_modules/samsam/AUTHORS delete mode 100644 build/node_modules/samsam/Readme.md delete mode 100644 build/node_modules/samsam/autolint.js delete mode 100644 build/node_modules/samsam/jsTestDriver.conf delete mode 100644 build/node_modules/samsam/lib/samsam.js delete mode 100644 build/node_modules/samsam/package.json delete mode 100644 build/node_modules/samsam/test/samsam-test.js create mode 100644 build/node_modules/semver/CHANGELOG.md create mode 100755 build/node_modules/semver/bin/semver.js create mode 100644 build/node_modules/semver/classes/comparator.js create mode 100644 build/node_modules/semver/classes/index.js create mode 100644 build/node_modules/semver/classes/range.js create mode 100644 build/node_modules/semver/classes/semver.js create mode 100644 build/node_modules/semver/functions/clean.js create mode 100644 build/node_modules/semver/functions/cmp.js create mode 100644 build/node_modules/semver/functions/coerce.js create mode 100644 build/node_modules/semver/functions/compare-build.js create mode 100644 build/node_modules/semver/functions/compare-loose.js create mode 100644 build/node_modules/semver/functions/compare.js create mode 100644 build/node_modules/semver/functions/diff.js create mode 100644 build/node_modules/semver/functions/eq.js create mode 100644 build/node_modules/semver/functions/gt.js create mode 100644 build/node_modules/semver/functions/gte.js create mode 100644 build/node_modules/semver/functions/inc.js create mode 100644 build/node_modules/semver/functions/lt.js create mode 100644 build/node_modules/semver/functions/lte.js create mode 100644 build/node_modules/semver/functions/major.js create mode 100644 build/node_modules/semver/functions/minor.js create mode 100644 build/node_modules/semver/functions/neq.js create mode 100644 build/node_modules/semver/functions/parse.js create mode 100644 build/node_modules/semver/functions/patch.js create mode 100644 build/node_modules/semver/functions/prerelease.js create mode 100644 build/node_modules/semver/functions/rcompare.js create mode 100644 build/node_modules/semver/functions/rsort.js create mode 100644 build/node_modules/semver/functions/satisfies.js create mode 100644 build/node_modules/semver/functions/sort.js create mode 100644 build/node_modules/semver/functions/valid.js create mode 100644 build/node_modules/semver/index.js create mode 100644 build/node_modules/semver/internal/constants.js create mode 100644 build/node_modules/semver/internal/debug.js create mode 100644 build/node_modules/semver/internal/identifiers.js create mode 100644 build/node_modules/semver/internal/parse-options.js create mode 100644 build/node_modules/semver/internal/re.js create mode 100644 build/node_modules/semver/preload.js create mode 100644 build/node_modules/semver/range.bnf create mode 100644 build/node_modules/semver/ranges/gtr.js create mode 100644 build/node_modules/semver/ranges/intersects.js create mode 100644 build/node_modules/semver/ranges/ltr.js create mode 100644 build/node_modules/semver/ranges/max-satisfying.js create mode 100644 build/node_modules/semver/ranges/min-satisfying.js create mode 100644 build/node_modules/semver/ranges/min-version.js create mode 100644 build/node_modules/semver/ranges/outside.js create mode 100644 build/node_modules/semver/ranges/simplify.js create mode 100644 build/node_modules/semver/ranges/subset.js create mode 100644 build/node_modules/semver/ranges/to-comparators.js create mode 100644 build/node_modules/semver/ranges/valid.js create mode 100644 build/node_modules/serialize-javascript/LICENSE create mode 100644 build/node_modules/serialize-javascript/README.md create mode 100644 build/node_modules/serialize-javascript/index.js create mode 100644 build/node_modules/serialize-javascript/package.json delete mode 100644 build/node_modules/sigmund/README.md delete mode 100644 build/node_modules/sigmund/bench.js delete mode 100644 build/node_modules/sigmund/package.json delete mode 100644 build/node_modules/sigmund/sigmund.js delete mode 100644 build/node_modules/sigmund/test/basic.js delete mode 100644 build/node_modules/sinon/AUTHORS delete mode 100644 build/node_modules/sinon/Changelog.txt create mode 100644 build/node_modules/sinon/lib/package.json create mode 100644 build/node_modules/sinon/lib/sinon-esm.js delete mode 100644 build/node_modules/sinon/lib/sinon/call.js create mode 100644 build/node_modules/sinon/lib/sinon/collect-own-methods.js delete mode 100644 build/node_modules/sinon/lib/sinon/collection.js create mode 100644 build/node_modules/sinon/lib/sinon/color.js create mode 100644 build/node_modules/sinon/lib/sinon/create-sandbox.js create mode 100644 build/node_modules/sinon/lib/sinon/default-behaviors.js delete mode 100644 build/node_modules/sinon/lib/sinon/extend.js create mode 100644 build/node_modules/sinon/lib/sinon/fake.js delete mode 100644 build/node_modules/sinon/lib/sinon/format.js delete mode 100644 build/node_modules/sinon/lib/sinon/log_error.js delete mode 100644 build/node_modules/sinon/lib/sinon/match.js create mode 100644 build/node_modules/sinon/lib/sinon/mock-expectation.js create mode 100644 build/node_modules/sinon/lib/sinon/promise.js create mode 100644 build/node_modules/sinon/lib/sinon/proxy-call-util.js create mode 100644 build/node_modules/sinon/lib/sinon/proxy-call.js create mode 100644 build/node_modules/sinon/lib/sinon/proxy-invoke.js create mode 100644 build/node_modules/sinon/lib/sinon/proxy.js create mode 100644 build/node_modules/sinon/lib/sinon/restore-object.js create mode 100644 build/node_modules/sinon/lib/sinon/spy-formatters.js delete mode 100644 build/node_modules/sinon/lib/sinon/test.js delete mode 100644 build/node_modules/sinon/lib/sinon/test_case.js create mode 100644 build/node_modules/sinon/lib/sinon/throw-on-falsy-object.js delete mode 100644 build/node_modules/sinon/lib/sinon/times_in_words.js delete mode 100644 build/node_modules/sinon/lib/sinon/typeOf.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/core.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/default-config.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/export-async-behaviors.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/extend.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/format.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/function-to-string.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/get-next-tick.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/get-property-descriptor.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/is-es-module.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/is-non-existent-property.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/is-property-configurable.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/is-restorable.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/next-tick.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/times-in-words.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/use-promise-library.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/walk-object.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/walk.js create mode 100644 build/node_modules/sinon/lib/sinon/util/core/wrap-method.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/event.js create mode 100644 build/node_modules/sinon/lib/sinon/util/fake-timers.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/fake_server.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/fake_timers.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/timers_ie.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/xdr_ie.js delete mode 100644 build/node_modules/sinon/lib/sinon/util/xhr_ie.js delete mode 100644 build/node_modules/sinon/lib/sinon/walk.js create mode 100644 build/node_modules/sinon/node_modules/supports-color/browser.js create mode 100644 build/node_modules/sinon/node_modules/supports-color/index.js create mode 100644 build/node_modules/sinon/node_modules/supports-color/license create mode 100644 build/node_modules/sinon/node_modules/supports-color/package.json create mode 100644 build/node_modules/sinon/node_modules/supports-color/readme.md delete mode 100644 build/node_modules/sinon/pkg/sinon-1.10.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.12.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.15.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.15.4.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.16.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.16.1.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.17.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.17.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.17.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.6.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-1.7.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-2.0.0-pre.js create mode 100644 build/node_modules/sinon/pkg/sinon-esm.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.12.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.15.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.15.4.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.16.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.16.1.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.17.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.17.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.17.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.6.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-1.7.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie-2.0.0-pre.js delete mode 100644 build/node_modules/sinon/pkg/sinon-ie.js create mode 100644 build/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.12.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.15.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.15.4.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.16.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.16.1.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.17.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.17.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.17.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.6.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-1.7.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server-2.0.0-pre.js delete mode 100644 build/node_modules/sinon/pkg/sinon-server.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.12.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.15.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.15.4.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.16.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.16.1.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.6.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-1.7.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.12.2.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.15.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.15.4.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.16.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.16.1.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.6.0.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie-1.7.3.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers-ie.js delete mode 100644 build/node_modules/sinon/pkg/sinon-timers.js create mode 100644 build/node_modules/string-width/index.d.ts create mode 100644 build/node_modules/string-width/index.js create mode 100644 build/node_modules/string-width/license create mode 100644 build/node_modules/string-width/package.json create mode 100644 build/node_modules/string-width/readme.md delete mode 100644 build/node_modules/string.prototype.trimend/.editorconfig delete mode 100644 build/node_modules/string.prototype.trimend/.eslintignore delete mode 100644 build/node_modules/string.prototype.trimend/.eslintrc delete mode 100644 build/node_modules/string.prototype.trimend/.nycrc delete mode 100644 build/node_modules/string.prototype.trimend/CHANGELOG.md delete mode 100644 build/node_modules/string.prototype.trimend/LICENSE delete mode 100644 build/node_modules/string.prototype.trimend/README.md delete mode 100644 build/node_modules/string.prototype.trimend/auto.js delete mode 100644 build/node_modules/string.prototype.trimend/implementation.js delete mode 100644 build/node_modules/string.prototype.trimend/index.js delete mode 100644 build/node_modules/string.prototype.trimend/package.json delete mode 100644 build/node_modules/string.prototype.trimend/polyfill.js delete mode 100644 build/node_modules/string.prototype.trimend/shim.js delete mode 100644 build/node_modules/string.prototype.trimend/test/implementation.js delete mode 100644 build/node_modules/string.prototype.trimend/test/index.js delete mode 100644 build/node_modules/string.prototype.trimend/test/shimmed.js delete mode 100644 build/node_modules/string.prototype.trimend/test/tests.js delete mode 100644 build/node_modules/string.prototype.trimstart/.editorconfig delete mode 100644 build/node_modules/string.prototype.trimstart/.eslintignore delete mode 100644 build/node_modules/string.prototype.trimstart/.eslintrc delete mode 100644 build/node_modules/string.prototype.trimstart/.nycrc delete mode 100644 build/node_modules/string.prototype.trimstart/CHANGELOG.md delete mode 100644 build/node_modules/string.prototype.trimstart/LICENSE delete mode 100644 build/node_modules/string.prototype.trimstart/README.md delete mode 100644 build/node_modules/string.prototype.trimstart/auto.js delete mode 100644 build/node_modules/string.prototype.trimstart/implementation.js delete mode 100644 build/node_modules/string.prototype.trimstart/index.js delete mode 100644 build/node_modules/string.prototype.trimstart/package.json delete mode 100644 build/node_modules/string.prototype.trimstart/polyfill.js delete mode 100644 build/node_modules/string.prototype.trimstart/shim.js delete mode 100644 build/node_modules/string.prototype.trimstart/test/implementation.js delete mode 100644 build/node_modules/string.prototype.trimstart/test/index.js delete mode 100644 build/node_modules/string.prototype.trimstart/test/shimmed.js delete mode 100644 build/node_modules/string.prototype.trimstart/test/tests.js create mode 100644 build/node_modules/strip-ansi/index.d.ts create mode 100644 build/node_modules/strip-ansi/index.js create mode 100644 build/node_modules/strip-ansi/license create mode 100644 build/node_modules/strip-ansi/package.json create mode 100644 build/node_modules/strip-ansi/readme.md create mode 100644 build/node_modules/strip-json-comments/index.d.ts create mode 100644 build/node_modules/strip-json-comments/index.js create mode 100644 build/node_modules/strip-json-comments/license create mode 100644 build/node_modules/strip-json-comments/package.json create mode 100644 build/node_modules/strip-json-comments/readme.md delete mode 100644 build/node_modules/superagent/.travis.yml delete mode 100644 build/node_modules/superagent/.zuul.yml delete mode 100644 build/node_modules/superagent/Contributing.md create mode 100644 build/node_modules/superagent/HISTORY.md delete mode 100644 build/node_modules/superagent/History.md delete mode 100644 build/node_modules/superagent/Makefile create mode 100644 build/node_modules/superagent/README.md delete mode 100644 build/node_modules/superagent/Readme.md delete mode 100755 build/node_modules/superagent/changelog.sh create mode 100644 build/node_modules/superagent/dist/superagent.js create mode 100644 build/node_modules/superagent/dist/superagent.min.js delete mode 100644 build/node_modules/superagent/docs/head.html delete mode 100644 build/node_modules/superagent/docs/images/bg.png delete mode 100644 build/node_modules/superagent/docs/index.md delete mode 100644 build/node_modules/superagent/docs/style.css delete mode 100644 build/node_modules/superagent/docs/tail.html delete mode 100644 build/node_modules/superagent/docs/test.html delete mode 100644 build/node_modules/superagent/lib/is-object.js create mode 100644 build/node_modules/superagent/lib/node/http2wrapper.js delete mode 100644 build/node_modules/superagent/superagent.js delete mode 100644 build/node_modules/superagent/test.js delete mode 100644 build/node_modules/superagent/yarn.lock create mode 100644 build/node_modules/supports-color/browser.js delete mode 100755 build/node_modules/supports-color/cli.js create mode 100644 build/node_modules/supports-color/license create mode 100644 build/node_modules/supports-preserve-symlinks-flag/.eslintrc create mode 100644 build/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml rename build/node_modules/{available-typed-arrays => supports-preserve-symlinks-flag}/.nycrc (100%) create mode 100644 build/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md create mode 100644 build/node_modules/supports-preserve-symlinks-flag/LICENSE create mode 100644 build/node_modules/supports-preserve-symlinks-flag/README.md create mode 100644 build/node_modules/supports-preserve-symlinks-flag/browser.js create mode 100644 build/node_modules/supports-preserve-symlinks-flag/index.js create mode 100644 build/node_modules/supports-preserve-symlinks-flag/package.json create mode 100644 build/node_modules/supports-preserve-symlinks-flag/test/index.js create mode 100644 build/node_modules/to-regex-range/LICENSE create mode 100644 build/node_modules/to-regex-range/README.md create mode 100644 build/node_modules/to-regex-range/index.js create mode 100644 build/node_modules/to-regex-range/package.json create mode 100644 build/node_modules/type-detect/LICENSE create mode 100644 build/node_modules/type-detect/README.md create mode 100644 build/node_modules/type-detect/index.js create mode 100644 build/node_modules/type-detect/package.json create mode 100644 build/node_modules/type-detect/type-detect.js delete mode 100644 build/node_modules/unbox-primitive/.editorconfig delete mode 100644 build/node_modules/unbox-primitive/.eslintignore delete mode 100644 build/node_modules/unbox-primitive/.eslintrc delete mode 100644 build/node_modules/unbox-primitive/.github/FUNDING.yml delete mode 100644 build/node_modules/unbox-primitive/.nycrc delete mode 100644 build/node_modules/unbox-primitive/CHANGELOG.md delete mode 100644 build/node_modules/unbox-primitive/LICENSE delete mode 100644 build/node_modules/unbox-primitive/README.md delete mode 100644 build/node_modules/unbox-primitive/index.js delete mode 100644 build/node_modules/unbox-primitive/package.json delete mode 100644 build/node_modules/unbox-primitive/test/index.js delete mode 100644 build/node_modules/util/LICENSE delete mode 100644 build/node_modules/util/README.md delete mode 100644 build/node_modules/util/package.json delete mode 100644 build/node_modules/util/support/isBuffer.js delete mode 100644 build/node_modules/util/support/isBufferBrowser.js delete mode 100644 build/node_modules/util/support/types.js delete mode 100644 build/node_modules/util/util.js delete mode 100644 build/node_modules/which-boxed-primitive/.editorconfig delete mode 100644 build/node_modules/which-boxed-primitive/.eslintignore delete mode 100644 build/node_modules/which-boxed-primitive/.eslintrc delete mode 100644 build/node_modules/which-boxed-primitive/.github/FUNDING.yml delete mode 100644 build/node_modules/which-boxed-primitive/.nycrc delete mode 100644 build/node_modules/which-boxed-primitive/CHANGELOG.md delete mode 100644 build/node_modules/which-boxed-primitive/LICENSE delete mode 100644 build/node_modules/which-boxed-primitive/README.md delete mode 100644 build/node_modules/which-boxed-primitive/index.js delete mode 100644 build/node_modules/which-boxed-primitive/package.json delete mode 100644 build/node_modules/which-boxed-primitive/test/index.js delete mode 100644 build/node_modules/which-typed-array/.editorconfig delete mode 100644 build/node_modules/which-typed-array/.eslintignore delete mode 100644 build/node_modules/which-typed-array/.eslintrc delete mode 100644 build/node_modules/which-typed-array/.github/FUNDING.yml delete mode 100644 build/node_modules/which-typed-array/.nycrc delete mode 100644 build/node_modules/which-typed-array/CHANGELOG.md delete mode 100644 build/node_modules/which-typed-array/LICENSE delete mode 100644 build/node_modules/which-typed-array/README.md delete mode 100644 build/node_modules/which-typed-array/index.js delete mode 100644 build/node_modules/which-typed-array/package.json delete mode 100644 build/node_modules/which-typed-array/test/index.js create mode 100644 build/node_modules/which/CHANGELOG.md create mode 100644 build/node_modules/which/LICENSE create mode 100644 build/node_modules/which/README.md create mode 100755 build/node_modules/which/bin/node-which create mode 100644 build/node_modules/which/package.json create mode 100644 build/node_modules/which/which.js delete mode 100644 build/node_modules/winston-transport/.nyc_output/1c69f3e4-4c25-457d-9df5-dfa761729528.json create mode 100644 build/node_modules/winston-transport/.nyc_output/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json delete mode 100644 build/node_modules/winston-transport/.nyc_output/processinfo/1c69f3e4-4c25-457d-9df5-dfa761729528.json create mode 100644 build/node_modules/winston-transport/.nyc_output/processinfo/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json delete mode 100644 build/node_modules/winston-transport/.travis.yml delete mode 100644 build/node_modules/winston-transport/tsconfig.json delete mode 100644 build/node_modules/winston/CHANGELOG.md delete mode 100644 build/node_modules/winston/node_modules/readable-stream/CONTRIBUTING.md delete mode 100644 build/node_modules/winston/node_modules/readable-stream/GOVERNANCE.md delete mode 100644 build/node_modules/winston/node_modules/readable-stream/LICENSE delete mode 100644 build/node_modules/winston/node_modules/readable-stream/README.md delete mode 100644 build/node_modules/winston/node_modules/readable-stream/errors-browser.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/errors.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/experimentalWarning.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/async_iterator.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/buffer_list.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/destroy.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/end-of-stream.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from-browser.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/pipeline.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/state.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream-browser.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/package.json delete mode 100644 build/node_modules/winston/node_modules/readable-stream/readable-browser.js delete mode 100644 build/node_modules/winston/node_modules/readable-stream/readable.js create mode 100644 build/node_modules/workerpool/HISTORY.md create mode 100644 build/node_modules/workerpool/LICENSE create mode 100644 build/node_modules/workerpool/README.md create mode 100644 build/node_modules/workerpool/dist/worker.js create mode 100644 build/node_modules/workerpool/dist/worker.js.map create mode 100644 build/node_modules/workerpool/dist/workerpool.js create mode 100644 build/node_modules/workerpool/dist/workerpool.js.map create mode 100644 build/node_modules/workerpool/dist/workerpool.min.js create mode 100644 build/node_modules/workerpool/dist/workerpool.min.js.LICENSE.txt create mode 100644 build/node_modules/workerpool/dist/workerpool.min.js.map create mode 100644 build/node_modules/workerpool/package.json create mode 100644 build/node_modules/workerpool/src/Pool.js create mode 100644 build/node_modules/workerpool/src/Promise.js create mode 100644 build/node_modules/workerpool/src/WorkerHandler.js create mode 100644 build/node_modules/workerpool/src/debug-port-allocator.js create mode 100644 build/node_modules/workerpool/src/environment.js create mode 100644 build/node_modules/workerpool/src/generated/embeddedWorker.js create mode 100644 build/node_modules/workerpool/src/header.js create mode 100644 build/node_modules/workerpool/src/index.js create mode 100644 build/node_modules/workerpool/src/requireFoolWebpack.js create mode 100644 build/node_modules/workerpool/src/types.js create mode 100644 build/node_modules/workerpool/src/worker.js create mode 100755 build/node_modules/wrap-ansi/index.js create mode 100644 build/node_modules/wrap-ansi/license create mode 100644 build/node_modules/wrap-ansi/package.json create mode 100644 build/node_modules/wrap-ansi/readme.md create mode 100644 build/node_modules/y18n/CHANGELOG.md create mode 100644 build/node_modules/y18n/LICENSE create mode 100644 build/node_modules/y18n/README.md create mode 100644 build/node_modules/y18n/build/index.cjs create mode 100644 build/node_modules/y18n/build/lib/cjs.js create mode 100644 build/node_modules/y18n/build/lib/index.js create mode 100644 build/node_modules/y18n/build/lib/platform-shims/node.js create mode 100644 build/node_modules/y18n/index.mjs create mode 100644 build/node_modules/y18n/package.json create mode 100644 build/node_modules/yallist/LICENSE create mode 100644 build/node_modules/yallist/README.md create mode 100644 build/node_modules/yallist/iterator.js create mode 100644 build/node_modules/yallist/package.json create mode 100644 build/node_modules/yallist/yallist.js create mode 100644 build/node_modules/yargs-parser/CHANGELOG.md create mode 100644 build/node_modules/yargs-parser/LICENSE.txt create mode 100644 build/node_modules/yargs-parser/README.md create mode 100644 build/node_modules/yargs-parser/browser.js create mode 100644 build/node_modules/yargs-parser/build/index.cjs create mode 100644 build/node_modules/yargs-parser/build/lib/index.js create mode 100644 build/node_modules/yargs-parser/build/lib/string-utils.js create mode 100644 build/node_modules/yargs-parser/build/lib/tokenize-arg-string.js create mode 100644 build/node_modules/yargs-parser/build/lib/yargs-parser-types.js create mode 100644 build/node_modules/yargs-parser/build/lib/yargs-parser.js create mode 100644 build/node_modules/yargs-parser/package.json create mode 100644 build/node_modules/yargs-unparser/CHANGELOG.md create mode 100644 build/node_modules/yargs-unparser/LICENSE create mode 100644 build/node_modules/yargs-unparser/README.md create mode 100644 build/node_modules/yargs-unparser/index.js create mode 100644 build/node_modules/yargs-unparser/package.json create mode 100644 build/node_modules/yargs/CHANGELOG.md create mode 100644 build/node_modules/yargs/LICENSE create mode 100644 build/node_modules/yargs/README.md create mode 100644 build/node_modules/yargs/browser.mjs create mode 100644 build/node_modules/yargs/build/index.cjs create mode 100644 build/node_modules/yargs/build/lib/argsert.js create mode 100644 build/node_modules/yargs/build/lib/command.js create mode 100644 build/node_modules/yargs/build/lib/completion-templates.js create mode 100644 build/node_modules/yargs/build/lib/completion.js create mode 100644 build/node_modules/yargs/build/lib/middleware.js create mode 100644 build/node_modules/yargs/build/lib/parse-command.js create mode 100644 build/node_modules/yargs/build/lib/typings/common-types.js create mode 100644 build/node_modules/yargs/build/lib/typings/yargs-parser-types.js create mode 100644 build/node_modules/yargs/build/lib/usage.js create mode 100644 build/node_modules/yargs/build/lib/utils/apply-extends.js create mode 100644 build/node_modules/yargs/build/lib/utils/is-promise.js create mode 100644 build/node_modules/yargs/build/lib/utils/levenshtein.js create mode 100644 build/node_modules/yargs/build/lib/utils/obj-filter.js create mode 100644 build/node_modules/yargs/build/lib/utils/process-argv.js create mode 100644 build/node_modules/yargs/build/lib/utils/set-blocking.js create mode 100644 build/node_modules/yargs/build/lib/utils/which-module.js create mode 100644 build/node_modules/yargs/build/lib/validation.js create mode 100644 build/node_modules/yargs/build/lib/yargs-factory.js create mode 100644 build/node_modules/yargs/build/lib/yerror.js create mode 100644 build/node_modules/yargs/helpers/helpers.mjs create mode 100644 build/node_modules/yargs/helpers/index.js create mode 100644 build/node_modules/yargs/helpers/package.json create mode 100644 build/node_modules/yargs/index.cjs create mode 100644 build/node_modules/yargs/index.mjs create mode 100644 build/node_modules/yargs/lib/platform-shims/browser.mjs create mode 100644 build/node_modules/yargs/lib/platform-shims/esm.mjs create mode 100644 build/node_modules/yargs/locales/be.json create mode 100644 build/node_modules/yargs/locales/de.json create mode 100644 build/node_modules/yargs/locales/en.json create mode 100644 build/node_modules/yargs/locales/es.json create mode 100644 build/node_modules/yargs/locales/fi.json create mode 100644 build/node_modules/yargs/locales/fr.json create mode 100644 build/node_modules/yargs/locales/hi.json create mode 100644 build/node_modules/yargs/locales/hu.json create mode 100644 build/node_modules/yargs/locales/id.json create mode 100644 build/node_modules/yargs/locales/it.json create mode 100644 build/node_modules/yargs/locales/ja.json create mode 100644 build/node_modules/yargs/locales/ko.json create mode 100644 build/node_modules/yargs/locales/nb.json create mode 100644 build/node_modules/yargs/locales/nl.json create mode 100644 build/node_modules/yargs/locales/nn.json create mode 100644 build/node_modules/yargs/locales/pirate.json create mode 100644 build/node_modules/yargs/locales/pl.json create mode 100644 build/node_modules/yargs/locales/pt.json create mode 100644 build/node_modules/yargs/locales/pt_BR.json create mode 100644 build/node_modules/yargs/locales/ru.json create mode 100644 build/node_modules/yargs/locales/th.json create mode 100644 build/node_modules/yargs/locales/tr.json create mode 100644 build/node_modules/yargs/locales/zh_CN.json create mode 100644 build/node_modules/yargs/locales/zh_TW.json create mode 100644 build/node_modules/yargs/package.json create mode 100644 build/node_modules/yargs/yargs create mode 100644 build/node_modules/yocto-queue/index.d.ts create mode 100644 build/node_modules/yocto-queue/index.js create mode 100644 build/node_modules/yocto-queue/license create mode 100644 build/node_modules/yocto-queue/package.json create mode 100644 build/node_modules/yocto-queue/readme.md diff --git a/README.md b/README.md index 8163b76f..614d2194 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ For direct use in a browser script: ```{"language":"html"} - + @@ -277,9 +277,6 @@ Extended response object example (`body` and `text` have been truncated): "status": 200, "statusText": "", "headers": { - "inin-ratelimit-allowed": "180", - "inin-ratelimit-count": "3", - "inin-ratelimit-reset": "3", "pragma": "no-cache", "inin-correlation-id": "ec35f2a8-289b-42d4-8893-c50eaf81a3c1", "content-type": "application/json", @@ -328,9 +325,6 @@ Example error response object: "status": 404, "statusText": "", "headers": { - "inin-ratelimit-allowed": "300", - "inin-ratelimit-count": "6", - "inin-ratelimit-reset": "38", "pragma": "no-cache", "inin-correlation-id": "d11bd3b3-ab7e-4fd4-9687-d04af9f30a63", "content-type": "application/json", diff --git a/build/APIData.json b/build/APIData.json new file mode 100644 index 00000000..9c2f086a --- /dev/null +++ b/build/APIData.json @@ -0,0 +1,188 @@ +{ + "webchat": { + "DELETE /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}": { + "functionName": "deleteWebchatGuestConversationMember", + "signature": "deleteWebchatGuestConversationMember(conversationId, memberId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "memberId", + "type": "String" + } + ] + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}": { + "functionName": "getWebchatGuestConversationMediarequest", + "signature": "getWebchatGuestConversationMediarequest(conversationId, mediaRequestId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "mediaRequestId", + "type": "String" + } + ], + "return": "WebChatGuestMediaRequest" + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests": { + "functionName": "getWebchatGuestConversationMediarequests", + "signature": "getWebchatGuestConversationMediarequests(conversationId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + } + ], + "return": "WebChatGuestMediaRequestEntityList" + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}": { + "functionName": "getWebchatGuestConversationMember", + "signature": "getWebchatGuestConversationMember(conversationId, memberId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "memberId", + "type": "String" + } + ], + "return": "WebChatMemberInfo" + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/members": { + "functionName": "getWebchatGuestConversationMembers", + "signature": "getWebchatGuestConversationMembers(conversationId, pageSize, pageNumber, excludeDisconnectedMembers)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "pageSize", + "type": "Number" + }, + { + "name": "pageNumber", + "type": "Number" + }, + { + "name": "excludeDisconnectedMembers", + "type": "Boolean" + } + ], + "return": "WebChatMemberInfoEntityList" + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}": { + "functionName": "getWebchatGuestConversationMessage", + "signature": "getWebchatGuestConversationMessage(conversationId, messageId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "messageId", + "type": "String" + } + ], + "return": "WebChatMessage" + }, + "GET /api/v2/webchat/guest/conversations/{conversationId}/messages": { + "functionName": "getWebchatGuestConversationMessages", + "signature": "getWebchatGuestConversationMessages(conversationId, after, before, sortOrder, maxResults)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "after", + "type": "String" + }, + { + "name": "before", + "type": "String" + }, + { + "name": "sortOrder", + "type": "String" + }, + { + "name": "maxResults", + "type": "Number" + } + ], + "return": "WebChatMessageEntityList" + }, + "PATCH /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}": { + "functionName": "patchWebchatGuestConversationMediarequest", + "signature": "patchWebchatGuestConversationMediarequest(conversationId, mediaRequestId, body)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "mediaRequestId", + "type": "String" + }, + { + "name": "body", + "type": "Object" + } + ], + "return": "WebChatGuestMediaRequest" + }, + "POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages": { + "functionName": "postWebchatGuestConversationMemberMessages", + "signature": "postWebchatGuestConversationMemberMessages(conversationId, memberId, body)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "memberId", + "type": "String" + }, + { + "name": "body", + "type": "Object" + } + ], + "return": "WebChatMessage" + }, + "POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing": { + "functionName": "postWebchatGuestConversationMemberTyping", + "signature": "postWebchatGuestConversationMemberTyping(conversationId, memberId)", + "parameters": [ + { + "name": "conversationId", + "type": "String" + }, + { + "name": "memberId", + "type": "String" + } + ], + "return": "WebChatTyping" + }, + "POST /api/v2/webchat/guest/conversations": { + "functionName": "postWebchatGuestConversations", + "signature": "postWebchatGuestConversations(body)", + "parameters": [ + { + "name": "body", + "type": "Object" + } + ], + "return": "CreateWebChatConversationResponse" + } + } +} \ No newline at end of file diff --git a/build/README.md b/build/README.md index 8163b76f..614d2194 100644 --- a/build/README.md +++ b/build/README.md @@ -31,7 +31,7 @@ For direct use in a browser script: ```{"language":"html"} - + @@ -277,9 +277,6 @@ Extended response object example (`body` and `text` have been truncated): "status": 200, "statusText": "", "headers": { - "inin-ratelimit-allowed": "180", - "inin-ratelimit-count": "3", - "inin-ratelimit-reset": "3", "pragma": "no-cache", "inin-correlation-id": "ec35f2a8-289b-42d4-8893-c50eaf81a3c1", "content-type": "application/json", @@ -328,9 +325,6 @@ Example error response object: "status": 404, "statusText": "", "headers": { - "inin-ratelimit-allowed": "300", - "inin-ratelimit-count": "6", - "inin-ratelimit-reset": "38", "pragma": "no-cache", "inin-correlation-id": "d11bd3b3-ab7e-4fd4-9687-d04af9f30a63", "content-type": "application/json", diff --git a/build/dist/node/purecloud-guest-chat-client.js b/build/dist/node/purecloud-guest-chat-client.js index 0108996e..427bb964 100644 --- a/build/dist/node/purecloud-guest-chat-client.js +++ b/build/dist/node/purecloud-guest-chat-client.js @@ -1,8 +1,10 @@ 'use strict'; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +var superagent = require('superagent'); -var superagent = _interopDefault(require('superagent')); +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var superagent__default = /*#__PURE__*/_interopDefaultLegacy(superagent); var PureCloudRegionHosts = { us_east_1: 'mypurecloud.com', @@ -242,7 +244,6 @@ class Configuration { const path = require('path'); this.configPath = path.join(os.homedir(), '.genesyscloudjavascript-guest', 'config'); } - this.live_reload_config = true; this.host; this.environment; @@ -255,27 +256,29 @@ class Configuration { } liveLoadConfig() { - // If in browser, don't read config file, use default values - if (typeof window !== 'undefined') { - this.configPath = ''; - return; - } - - this.updateConfigFromFile(); - - if (this.live_reload_config && this.live_reload_config === true) { - try { - const fs = require('fs'); - fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { - this.updateConfigFromFile(); - if (!this.live_reload_config) { - fs.unwatchFile(this.configPath); - } - }); - } catch (err) { - // do nothing + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + this.updateConfigFromFile(); + + if (this.live_reload_config && this.live_reload_config === true) { + try { + const fs = require('fs'); + fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { + this.updateConfigFromFile(); + if (!this.live_reload_config) { + fs.unwatchFile(this.configPath); + } + }); + } catch (err) { + // do nothing + } } + return; } + // If in browser, don't read config file, use default values + this.configPath = ''; } setConfigPath(path) { @@ -286,24 +289,29 @@ class Configuration { } updateConfigFromFile() { - const ConfigParser = require('configparser'); - var configparser = new ConfigParser(); + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + const ConfigParser = require('configparser'); - try { - configparser.read(this.configPath); // If no error catched, indicates it's INI format - this.config = configparser; - } catch (error) { - if (error.name && error.name === 'MissingSectionHeaderError') { - // Not INI format, see if it's JSON format - const fs = require('fs'); - var configData = fs.readFileSync(this.configPath, 'utf8'); - this.config = { - _sections: JSON.parse(configData), // To match INI data format - }; + try { + var configparser = new ConfigParser(); + configparser.read(this.configPath); // If no error catched, indicates it's INI format + this.config = configparser; + } catch (error) { + if (error.name && error.name === 'MissingSectionHeaderError') { + // Not INI format, see if it's JSON format + const fs = require('fs'); + var configData = fs.readFileSync(this.configPath, 'utf8'); + this.config = { + _sections: JSON.parse(configData), // To match INI data format + }; + } } - } - if (this.config) this.updateConfigValues(); + if (this.config) this.updateConfigValues(); + } } updateConfigValues() { @@ -369,7 +377,7 @@ class Configuration { /** * @module purecloud-guest-chat-client/ApiClient - * @version 8.0.0 + * @version 8.1.0 */ class ApiClient { /** @@ -485,7 +493,7 @@ class ApiClient { this.settingsPrefix = 'purecloud'; // Expose superagent module for use with superagent-proxy - this.superagent = superagent; + this.superagent = superagent__default["default"]; if (typeof(window) !== 'undefined') window.ApiClient = this; } @@ -837,7 +845,7 @@ class ApiClient { */ callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, accepts) { var url = this.buildUrl(path, pathParams); - var request = superagent(httpMethod, url); + var request = superagent__default["default"](httpMethod, url); if (this.proxy && request.proxy) { request.proxy(this.proxy); @@ -851,7 +859,7 @@ class ApiClient { // set header parameters request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); - //request.set({ 'purecloud-sdk': '8.0.0' }); + //request.set({ 'purecloud-sdk': '8.1.0' }); // set request timeout request.timeout(this.timeout); @@ -942,7 +950,7 @@ class WebChatApi { /** * WebChat service. * @module purecloud-guest-chat-client/api/WebChatApi - * @version 8.0.0 + * @version 8.1.0 */ /** @@ -1321,7 +1329,7 @@ class WebChatApi { * *

* @module purecloud-guest-chat-client/index - * @version 8.0.0 + * @version 8.1.0 */ class platformClient { constructor() { diff --git a/build/dist/web-amd/purecloud-guest-chat-client.js b/build/dist/web-amd/purecloud-guest-chat-client.js index f6fe1a5f..1662d126 100644 --- a/build/dist/web-amd/purecloud-guest-chat-client.js +++ b/build/dist/web-amd/purecloud-guest-chat-client.js @@ -1,6 +1,8 @@ -define(['superagent'], function (superagent) { 'use strict'; +define(['superagent'], (function (superagent) { 'use strict'; - superagent = superagent && superagent.hasOwnProperty('default') ? superagent['default'] : superagent; + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var superagent__default = /*#__PURE__*/_interopDefaultLegacy(superagent); var PureCloudRegionHosts = { us_east_1: 'mypurecloud.com', @@ -240,7 +242,6 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form const path = require('path'); this.configPath = path.join(os.homedir(), '.genesyscloudjavascript-guest', 'config'); } - this.live_reload_config = true; this.host; this.environment; @@ -253,27 +254,29 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form } liveLoadConfig() { - // If in browser, don't read config file, use default values - if (typeof window !== 'undefined') { - this.configPath = ''; - return; - } - - this.updateConfigFromFile(); - - if (this.live_reload_config && this.live_reload_config === true) { - try { - const fs = require('fs'); - fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { - this.updateConfigFromFile(); - if (!this.live_reload_config) { - fs.unwatchFile(this.configPath); - } - }); - } catch (err) { - // do nothing + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + this.updateConfigFromFile(); + + if (this.live_reload_config && this.live_reload_config === true) { + try { + const fs = require('fs'); + fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { + this.updateConfigFromFile(); + if (!this.live_reload_config) { + fs.unwatchFile(this.configPath); + } + }); + } catch (err) { + // do nothing + } } + return; } + // If in browser, don't read config file, use default values + this.configPath = ''; } setConfigPath(path) { @@ -284,24 +287,29 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form } updateConfigFromFile() { - const ConfigParser = require('configparser'); - var configparser = new ConfigParser(); + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + const ConfigParser = require('configparser'); - try { - configparser.read(this.configPath); // If no error catched, indicates it's INI format - this.config = configparser; - } catch (error) { - if (error.name && error.name === 'MissingSectionHeaderError') { - // Not INI format, see if it's JSON format - const fs = require('fs'); - var configData = fs.readFileSync(this.configPath, 'utf8'); - this.config = { - _sections: JSON.parse(configData), // To match INI data format - }; + try { + var configparser = new ConfigParser(); + configparser.read(this.configPath); // If no error catched, indicates it's INI format + this.config = configparser; + } catch (error) { + if (error.name && error.name === 'MissingSectionHeaderError') { + // Not INI format, see if it's JSON format + const fs = require('fs'); + var configData = fs.readFileSync(this.configPath, 'utf8'); + this.config = { + _sections: JSON.parse(configData), // To match INI data format + }; + } } - } - if (this.config) this.updateConfigValues(); + if (this.config) this.updateConfigValues(); + } } updateConfigValues() { @@ -367,7 +375,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form /** * @module purecloud-guest-chat-client/ApiClient - * @version 8.0.0 + * @version 8.1.0 */ class ApiClient { /** @@ -483,7 +491,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form this.settingsPrefix = 'purecloud'; // Expose superagent module for use with superagent-proxy - this.superagent = superagent; + this.superagent = superagent__default["default"]; if (typeof(window) !== 'undefined') window.ApiClient = this; } @@ -835,7 +843,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form */ callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, accepts) { var url = this.buildUrl(path, pathParams); - var request = superagent(httpMethod, url); + var request = superagent__default["default"](httpMethod, url); if (this.proxy && request.proxy) { request.proxy(this.proxy); @@ -849,7 +857,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form // set header parameters request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); - //request.set({ 'purecloud-sdk': '8.0.0' }); + //request.set({ 'purecloud-sdk': '8.1.0' }); // set request timeout request.timeout(this.timeout); @@ -940,7 +948,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form /** * WebChat service. * @module purecloud-guest-chat-client/api/WebChatApi - * @version 8.0.0 + * @version 8.1.0 */ /** @@ -1319,7 +1327,7 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form * *

* @module purecloud-guest-chat-client/index - * @version 8.0.0 + * @version 8.1.0 */ class platformClient { constructor() { @@ -1346,4 +1354,4 @@ ${this.formatValue('Status', statusCode)}${this.formatValue('Headers', this.form return index; -}); +})); diff --git a/build/dist/web-amd/purecloud-guest-chat-client.min.js b/build/dist/web-amd/purecloud-guest-chat-client.min.js index 6d4779c5..f7053221 100644 --- a/build/dist/web-amd/purecloud-guest-chat-client.min.js +++ b/build/dist/web-amd/purecloud-guest-chat-client.min.js @@ -1 +1 @@ -define(["superagent"],function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t={us_east_1:"mypurecloud.com",eu_west_1:"mypurecloud.ie",ap_southeast_2:"mypurecloud.com.au",ap_northeast_1:"mypurecloud.jp",eu_central_1:"mypurecloud.de",us_west_2:"usw2.pure.cloud",ca_central_1:"cac1.pure.cloud",ap_northeast_2:"apne2.pure.cloud",eu_west_2:"euw2.pure.cloud",ap_south_1:"aps1.pure.cloud",us_east_2:"use2.us-gov-pure.cloud"};const i={levels:{none:0,error:1,debug:2,trace:3}},s={level:{LNone:"none",LError:"error",LDebug:"debug",LTrace:"trace"}},o={formats:{JSON:"json",TEXT:"text"}};class n{get logLevelEnum(){return s}get logFormatEnum(){return o}constructor(){this.log_level=s.level.LNone,this.log_format=o.formats.TEXT,this.log_to_console=!0,this.log_file_path,this.log_response_body=!1,this.log_request_body=!1,this.setLogger()}setLogger(){if("undefined"==typeof window){const e=require("winston");this.logger=e.createLogger({levels:i.levels,level:this.log_level}),this.log_file_path&&""!==this.log_file_path&&(this.log_format===o.formats.JSON?this.logger.add(new e.transports.File({format:e.format.json(),filename:this.log_file_path})):this.logger.add(new e.transports.File({format:e.format.combine(e.format(e=>(e.level=e.level.toUpperCase(),e))(),e.format.simple()),filename:this.log_file_path}))),this.log_to_console&&(this.log_format===o.formats.JSON?this.logger.add(new e.transports.Console({format:e.format.json()})):this.logger.add(new e.transports.Console({format:e.format.combine(e.format(e=>(e.level=e.level.toUpperCase(),e))(),e.format.simple())})))}}log(e,t,i,s,o,n,a,r){var l=this.formatLog(e,t,i,s,o,n,a,r);"undefined"!=typeof window?this.calculateLogLevel(e)>0&&!0===this.log_to_console&&(this.log_format===this.logFormatEnum.formats.JSON?console.log(l):console.log(`${e.toUpperCase()}: ${l}`)):this.logger.transports.length>0&&this.logger.log(e,l)}calculateLogLevel(e){switch(this.log_level){case this.logLevelEnum.level.LError:return e!==this.logLevelEnum.level.LError?-1:1;case this.logLevelEnum.level.LDebug:return e===this.logLevelEnum.level.LTrace?-1:1;case this.logLevelEnum.level.LTrace:return 1;default:return-1}}formatLog(e,t,i,s,n,a,r,l){var h;return n&&(n.Authorization="[REDACTED]"),this.log_request_body||(r=void 0),this.log_response_body||(l=void 0),this.log_format&&this.log_format===o.formats.JSON?(h={level:e,date:(new Date).toISOString(),method:i,url:decodeURIComponent(s),correlationId:a&&a["inin-correlation-id"]?a["inin-correlation-id"]:"",statusCode:t},n&&(h.requestHeaders=n),a&&(h.responseHeaders=a),r&&(h.requestBody=r),l&&(h.responseBody=l)):h=`${(new Date).toISOString()}\n=== REQUEST === \n${this.formatValue("URL",decodeURIComponent(s))}${this.formatValue("Method",i)}${this.formatValue("Headers",this.formatHeaderString(n))}${this.formatValue("Body",r?JSON.stringify(r,null,2):"")}\n=== RESPONSE ===\n${this.formatValue("Status",t)}${this.formatValue("Headers",this.formatHeaderString(a))}${this.formatValue("CorrelationId",a&&a["inin-correlation-id"]?a["inin-correlation-id"]:"")}${this.formatValue("Body",l?JSON.stringify(l,null,2):"")}`,h}formatHeaderString(e){var t="";if(!e)return t;for(const[i,s]of Object.entries(e))t+=`\n\t${i}: ${s}`;return t}formatValue(e,t){return t&&""!==t&&"{}"!==t?`${e}: ${t}\n`:""}getLogLevel(e){switch(e){case"error":return s.level.LError;case"debug":return s.level.LDebug;case"trace":return s.level.LTrace;default:return s.level.LNone}}getLogFormat(e){switch(e){case"json":return o.formats.JSON;default:return o.formats.TEXT}}}class a{get instance(){return a.instance}set instance(e){a.instance=e}constructor(){if(a.instance||(a.instance=this),"undefined"!=typeof window)this.configPath="";else{const e=require("os"),t=require("path");this.configPath=t.join(e.homedir(),".genesyscloudjavascript-guest","config")}this.live_reload_config=!0,this.host,this.environment,this.basePath,this.authUrl,this.config,this.logger=new n,this.setEnvironment(),this.liveLoadConfig()}liveLoadConfig(){if("undefined"==typeof window){if(this.updateConfigFromFile(),this.live_reload_config&&!0===this.live_reload_config)try{const e=require("fs");e.watchFile(this.configPath,{persistent:!1},(t,i)=>{this.updateConfigFromFile(),this.live_reload_config||e.unwatchFile(this.configPath)})}catch(e){}}else this.configPath=""}setConfigPath(e){e&&e!==this.configPath&&(this.configPath=e,this.liveLoadConfig())}updateConfigFromFile(){var e=new(require("configparser"));try{e.read(this.configPath),this.config=e}catch(e){if(e.name&&"MissingSectionHeaderError"===e.name){var t=require("fs").readFileSync(this.configPath,"utf8");this.config={_sections:JSON.parse(t)}}}this.config&&this.updateConfigValues()}updateConfigValues(){this.logger.log_level=this.logger.getLogLevel(this.getConfigString("logging","log_level")),this.logger.log_format=this.logger.getLogFormat(this.getConfigString("logging","log_format")),this.logger.log_to_console=void 0!==this.getConfigBoolean("logging","log_to_console")?this.getConfigBoolean("logging","log_to_console"):this.logger.log_to_console,this.logger.log_file_path=void 0!==this.getConfigString("logging","log_file_path")?this.getConfigString("logging","log_file_path"):this.logger.log_file_path,this.logger.log_response_body=void 0!==this.getConfigBoolean("logging","log_response_body")?this.getConfigBoolean("logging","log_response_body"):this.logger.log_response_body,this.logger.log_request_body=void 0!==this.getConfigBoolean("logging","log_request_body")?this.getConfigBoolean("logging","log_request_body"):this.logger.log_request_body,this.live_reload_config=void 0!==this.getConfigBoolean("general","live_reload_config")?this.getConfigBoolean("general","live_reload_config"):this.live_reload_config,this.host=void 0!==this.getConfigString("general","host")?this.getConfigString("general","host"):this.host,this.setEnvironment(),this.logger.setLogger()}setEnvironment(e){this.environment=e||(this.host?this.host:"mypurecloud.com"),this.environment=this.environment.replace(/\/+$/,""),this.environment.startsWith("https://")&&(this.environment=this.environment.substring(8)),this.environment.startsWith("http://")&&(this.environment=this.environment.substring(7)),this.environment.startsWith("api.")&&(this.environment=this.environment.substring(4)),this.basePath=`https://api.${this.environment}`,this.authUrl=`https://login.${this.environment}`}getConfigString(e,t){if(this.config._sections[e])return this.config._sections[e][t]}getConfigBoolean(e,t){if(this.config._sections[e]&&void 0!==this.config._sections[e][t])return"string"==typeof this.config._sections[e][t]?"true"===this.config._sections[e][t]:this.config._sections[e][t]}}class r{get instance(){return r.instance}set instance(e){r.instance=e}constructor(){r.instance||(r.instance=this),this.CollectionFormatEnum={CSV:",",SSV:" ",TSV:"\t",PIPES:"|",MULTI:"multi"};try{localStorage.setItem("purecloud_local_storage_test","purecloud_local_storage_test"),localStorage.removeItem("purecloud_local_storage_test"),this.hasLocalStorage=!0}catch(e){this.hasLocalStorage=!1}this.config=new a,this.setEnvironment("https://api.mypurecloud.com"),this.authentications={"PureCloud OAuth":{type:"oauth2"},"Guest Chat JWT":{type:"apiKey",in:"header",name:"Authorization",apiKeyPrefix:"Bearer"}},this.defaultHeaders={},this.timeout=16e3,this.authData={},this.settingsPrefix="purecloud",this.superagent=e,"undefined"!=typeof window&&(window.ApiClient=this)}setReturnExtendedResponses(e){this.returnExtended=e}setPersistSettings(e,t){this.persistSettings=e,this.settingsPrefix=t?t.replace(/\W+/g,"_"):"purecloud"}_saveSettings(e){try{if(this.authData.apiKey=e.apiKey,this.authentications["Guest Chat JWT"].apiKey=e.apiKey,e.state&&(this.authData.state=e.state),e.tokenExpiryTime&&(this.authData.tokenExpiryTime=e.tokenExpiryTime,this.authData.tokenExpiryTimeString=e.tokenExpiryTimeString),!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;let t=JSON.parse(JSON.stringify(this.authData));delete t.state,localStorage.setItem(`${this.settingsPrefix}_auth_data`,JSON.stringify(t))}catch(e){console.error(e)}}_loadSettings(){if(!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;const e=this.authData.state;this.authData=localStorage.getItem(`${this.settingsPrefix}_auth_data`),this.authData?this.authData=JSON.parse(this.authData):this.authData={},this.authData.apiKey&&this.setJwt(this.authData.apiKey),this.authData.state=e}setEnvironment(e){this.config.setEnvironment(e)}_testTokenAccess(){return new Promise((e,t)=>{this._loadSettings(),this.authentications["Guest Chat JWT"].apiKey?this.callApi("/api/v2/authorization/permissions","GET",null,null,null,null,null,["Guest Chat JWT"],["application/json"],["application/json"]).then(()=>{e()}).catch(e=>{this._saveSettings({apiKey:void 0}),t(e)}):t(new Error("Token is not set"))})}setJwt(e){this._saveSettings({apiKey:e})}setStorageKey(e){this.storageKey=e,this.setJwt(this.authentications["Guest Chat JWT"].apiKey)}_buildAuthUrl(e,t){return t||(t={}),Object.keys(t).reduce((e,i)=>t[i]?`${e}&${i}=${t[i]}`:e,`${this.config.authUrl}/${e}?`)}paramToString(e){return e?e instanceof Date?e.toJSON():e.toString():""}buildUrl(e,t){e.match(/^\//)||(e=`/${e}`);var i=this.config.basePath+e;return i=i.replace(/\{([\w-]+)\}/g,(e,i)=>{var s;return s=t.hasOwnProperty(i)?this.paramToString(t[i]):e,encodeURIComponent(s)})}isJsonMime(e){return Boolean(e&&e.match(/^application\/json(;.*)?$/i))}jsonPreferredMime(e){for(var t=0;t{var i=this.authentications[t];switch(i.type){case"basic":(i.username||i.password)&&e.auth(i.username||"",i.password||"");break;case"apiKey":if(i.apiKey){var s={};i.apiKeyPrefix?s[i.name]=`${i.apiKeyPrefix} ${i.apiKey}`:s[i.name]=i.apiKey,"header"===i.in?e.set(s):e.query(s)}break;case"oauth2":i.accessToken&&e.set({Authorization:`Bearer ${i.accessToken}`});break;default:throw new Error(`Unknown authentication type: ${i.type}`)}})}callApi(t,i,s,o,n,a,r,l,h,g){var u=this.buildUrl(t,s),c=e(i,u);this.proxy&&c.proxy&&c.proxy(this.proxy),this.applyAuthToRequest(c,l),c.query(this.normalizeParams(o)),c.set(this.defaultHeaders).set(this.normalizeParams(n)),c.timeout(this.timeout);var d=this.jsonPreferredMime(h);if(d?c.type(d):c.header["Content-Type"]||c.type("application/json"),"application/x-www-form-urlencoded"===d)c.send(this.normalizeParams(a));else if("multipart/form-data"==d){var p=this.normalizeParams(a);for(var m in p)p.hasOwnProperty(m)&&(this.isFileParam(p[m])?c.attach(m,p[m]):c.field(m,p[m]))}else r&&c.send(r);var f=this.jsonPreferredMime(g);return f&&c.accept(f),new Promise((e,t)=>{c.end((s,o)=>{if(!s||o){var n=!0===this.returnExtended||s?{status:o.status,statusText:o.statusText,headers:o.headers,body:o.body,text:o.text,error:s}:o.body?o.body:o.text;this.config.logger.log("trace",o.statusCode,i,u,c.header,o.headers,r,void 0),this.config.logger.log("debug",o.statusCode,i,u,c.header,void 0,r,void 0),s?(this.config.logger.log("error",o.statusCode,i,u,c.header,o.headers,r,o.body),t(n)):e(n)}else t({status:0,statusText:"error",headers:[],body:{},text:"error",error:s})})})}}class l{constructor(e){this.apiClient=e||r.instance}deleteWebchatGuestConversationMember(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling deleteWebchatGuestConversationMember';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling deleteWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","DELETE",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequest(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequest';if(void 0===t||null===t)throw'Missing the required parameter "mediaRequestId" when calling getWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","GET",{conversationId:e,mediaRequestId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequests(e){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequests';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests","GET",{conversationId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMember(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMember';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling getWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","GET",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMembers(e,t){if(t=t||{},void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMembers';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members","GET",{conversationId:e},{pageSize:t.pageSize,pageNumber:t.pageNumber,excludeDisconnectedMembers:t.excludeDisconnectedMembers},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessage(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessage';if(void 0===t||null===t)throw'Missing the required parameter "messageId" when calling getWebchatGuestConversationMessage';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}","GET",{conversationId:e,messageId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessages(e,t){if(t=t||{},void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages","GET",{conversationId:e},{after:t.after,before:t.before,sortOrder:t.sortOrder,maxResults:t.maxResults},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}patchWebchatGuestConversationMediarequest(e,t,i){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling patchWebchatGuestConversationMediarequest';if(void 0===t||null===t)throw'Missing the required parameter "mediaRequestId" when calling patchWebchatGuestConversationMediarequest';if(void 0===i||null===i)throw'Missing the required parameter "body" when calling patchWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","PATCH",{conversationId:e,mediaRequestId:t},{},{},{},i,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberMessages(e,t,i){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberMessages';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberMessages';if(void 0===i||null===i)throw'Missing the required parameter "body" when calling postWebchatGuestConversationMemberMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages","POST",{conversationId:e,memberId:t},{},{},{},i,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberTyping(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberTyping';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberTyping';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing","POST",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversations(e){if(void 0===e||null===e)throw'Missing the required parameter "body" when calling postWebchatGuestConversations';return this.apiClient.callApi("/api/v2/webchat/guest/conversations","POST",{},{},{},{},e,[],["application/json"],["application/json"])}}return new class{constructor(){this.ApiClient=new r,this.WebChatApi=l,this.PureCloudRegionHosts=t}}}); \ No newline at end of file +define(["superagent"],function(e){"use strict";var t=function(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}(e),i={us_east_1:"mypurecloud.com",eu_west_1:"mypurecloud.ie",ap_southeast_2:"mypurecloud.com.au",ap_northeast_1:"mypurecloud.jp",eu_central_1:"mypurecloud.de",us_west_2:"usw2.pure.cloud",ca_central_1:"cac1.pure.cloud",ap_northeast_2:"apne2.pure.cloud",eu_west_2:"euw2.pure.cloud",ap_south_1:"aps1.pure.cloud",us_east_2:"use2.us-gov-pure.cloud"};const s={levels:{none:0,error:1,debug:2,trace:3}},o={level:{LNone:"none",LError:"error",LDebug:"debug",LTrace:"trace"}},n={formats:{JSON:"json",TEXT:"text"}};class a{get logLevelEnum(){return o}get logFormatEnum(){return n}constructor(){this.log_level=o.level.LNone,this.log_format=n.formats.TEXT,this.log_to_console=!0,this.log_file_path,this.log_response_body=!1,this.log_request_body=!1,this.setLogger()}setLogger(){if("undefined"==typeof window){const e=require("winston");this.logger=e.createLogger({levels:s.levels,level:this.log_level}),this.log_file_path&&""!==this.log_file_path&&(this.log_format===n.formats.JSON?this.logger.add(new e.transports.File({format:e.format.json(),filename:this.log_file_path})):this.logger.add(new e.transports.File({format:e.format.combine(e.format(e=>(e.level=e.level.toUpperCase(),e))(),e.format.simple()),filename:this.log_file_path}))),this.log_to_console&&(this.log_format===n.formats.JSON?this.logger.add(new e.transports.Console({format:e.format.json()})):this.logger.add(new e.transports.Console({format:e.format.combine(e.format(e=>(e.level=e.level.toUpperCase(),e))(),e.format.simple())})))}}log(e,t,i,s,o,n,a,r){var l=this.formatLog(e,t,i,s,o,n,a,r);"undefined"!=typeof window?this.calculateLogLevel(e)>0&&!0===this.log_to_console&&(this.log_format===this.logFormatEnum.formats.JSON?console.log(l):console.log(`${e.toUpperCase()}: ${l}`)):this.logger.transports.length>0&&this.logger.log(e,l)}calculateLogLevel(e){switch(this.log_level){case this.logLevelEnum.level.LError:return e!==this.logLevelEnum.level.LError?-1:1;case this.logLevelEnum.level.LDebug:return e===this.logLevelEnum.level.LTrace?-1:1;case this.logLevelEnum.level.LTrace:return 1;default:return-1}}formatLog(e,t,i,s,o,a,r,l){var h;return o&&(o.Authorization="[REDACTED]"),this.log_request_body||(r=void 0),this.log_response_body||(l=void 0),this.log_format&&this.log_format===n.formats.JSON?(h={level:e,date:(new Date).toISOString(),method:i,url:decodeURIComponent(s),correlationId:a&&a["inin-correlation-id"]?a["inin-correlation-id"]:"",statusCode:t},o&&(h.requestHeaders=o),a&&(h.responseHeaders=a),r&&(h.requestBody=r),l&&(h.responseBody=l)):h=`${(new Date).toISOString()}\n=== REQUEST === \n${this.formatValue("URL",decodeURIComponent(s))}${this.formatValue("Method",i)}${this.formatValue("Headers",this.formatHeaderString(o))}${this.formatValue("Body",r?JSON.stringify(r,null,2):"")}\n=== RESPONSE ===\n${this.formatValue("Status",t)}${this.formatValue("Headers",this.formatHeaderString(a))}${this.formatValue("CorrelationId",a&&a["inin-correlation-id"]?a["inin-correlation-id"]:"")}${this.formatValue("Body",l?JSON.stringify(l,null,2):"")}`,h}formatHeaderString(e){var t="";if(!e)return t;for(const[i,s]of Object.entries(e))t+=`\n\t${i}: ${s}`;return t}formatValue(e,t){return t&&""!==t&&"{}"!==t?`${e}: ${t}\n`:""}getLogLevel(e){switch(e){case"error":return o.level.LError;case"debug":return o.level.LDebug;case"trace":return o.level.LTrace;default:return o.level.LNone}}getLogFormat(e){switch(e){case"json":return n.formats.JSON;default:return n.formats.TEXT}}}class r{get instance(){return r.instance}set instance(e){r.instance=e}constructor(){if(r.instance||(r.instance=this),"undefined"!=typeof window)this.configPath="";else{const e=require("os"),t=require("path");this.configPath=t.join(e.homedir(),".genesyscloudjavascript-guest","config")}this.live_reload_config=!0,this.host,this.environment,this.basePath,this.authUrl,this.config,this.logger=new a,this.setEnvironment(),this.liveLoadConfig()}liveLoadConfig(){if("undefined"!=typeof window)this.configPath="";else if(this.updateConfigFromFile(),this.live_reload_config&&!0===this.live_reload_config)try{const e=require("fs");e.watchFile(this.configPath,{persistent:!1},(t,i)=>{this.updateConfigFromFile(),this.live_reload_config||e.unwatchFile(this.configPath)})}catch(e){}}setConfigPath(e){e&&e!==this.configPath&&(this.configPath=e,this.liveLoadConfig())}updateConfigFromFile(){if("undefined"==typeof window){const i=require("configparser");try{var e=new i;e.read(this.configPath),this.config=e}catch(e){if(e.name&&"MissingSectionHeaderError"===e.name){var t=require("fs").readFileSync(this.configPath,"utf8");this.config={_sections:JSON.parse(t)}}}this.config&&this.updateConfigValues()}}updateConfigValues(){this.logger.log_level=this.logger.getLogLevel(this.getConfigString("logging","log_level")),this.logger.log_format=this.logger.getLogFormat(this.getConfigString("logging","log_format")),this.logger.log_to_console=void 0!==this.getConfigBoolean("logging","log_to_console")?this.getConfigBoolean("logging","log_to_console"):this.logger.log_to_console,this.logger.log_file_path=void 0!==this.getConfigString("logging","log_file_path")?this.getConfigString("logging","log_file_path"):this.logger.log_file_path,this.logger.log_response_body=void 0!==this.getConfigBoolean("logging","log_response_body")?this.getConfigBoolean("logging","log_response_body"):this.logger.log_response_body,this.logger.log_request_body=void 0!==this.getConfigBoolean("logging","log_request_body")?this.getConfigBoolean("logging","log_request_body"):this.logger.log_request_body,this.live_reload_config=void 0!==this.getConfigBoolean("general","live_reload_config")?this.getConfigBoolean("general","live_reload_config"):this.live_reload_config,this.host=void 0!==this.getConfigString("general","host")?this.getConfigString("general","host"):this.host,this.setEnvironment(),this.logger.setLogger()}setEnvironment(e){this.environment=e||(this.host?this.host:"mypurecloud.com"),this.environment=this.environment.replace(/\/+$/,""),this.environment.startsWith("https://")&&(this.environment=this.environment.substring(8)),this.environment.startsWith("http://")&&(this.environment=this.environment.substring(7)),this.environment.startsWith("api.")&&(this.environment=this.environment.substring(4)),this.basePath=`https://api.${this.environment}`,this.authUrl=`https://login.${this.environment}`}getConfigString(e,t){if(this.config._sections[e])return this.config._sections[e][t]}getConfigBoolean(e,t){if(this.config._sections[e]&&void 0!==this.config._sections[e][t])return"string"==typeof this.config._sections[e][t]?"true"===this.config._sections[e][t]:this.config._sections[e][t]}}class l{get instance(){return l.instance}set instance(e){l.instance=e}constructor(){l.instance||(l.instance=this),this.CollectionFormatEnum={CSV:",",SSV:" ",TSV:"\t",PIPES:"|",MULTI:"multi"};try{localStorage.setItem("purecloud_local_storage_test","purecloud_local_storage_test"),localStorage.removeItem("purecloud_local_storage_test"),this.hasLocalStorage=!0}catch(e){this.hasLocalStorage=!1}this.config=new r,this.setEnvironment("https://api.mypurecloud.com"),this.authentications={"PureCloud OAuth":{type:"oauth2"},"Guest Chat JWT":{type:"apiKey",in:"header",name:"Authorization",apiKeyPrefix:"Bearer"}},this.defaultHeaders={},this.timeout=16e3,this.authData={},this.settingsPrefix="purecloud",this.superagent=t.default,"undefined"!=typeof window&&(window.ApiClient=this)}setReturnExtendedResponses(e){this.returnExtended=e}setPersistSettings(e,t){this.persistSettings=e,this.settingsPrefix=t?t.replace(/\W+/g,"_"):"purecloud"}_saveSettings(e){try{if(this.authData.apiKey=e.apiKey,this.authentications["Guest Chat JWT"].apiKey=e.apiKey,e.state&&(this.authData.state=e.state),e.tokenExpiryTime&&(this.authData.tokenExpiryTime=e.tokenExpiryTime,this.authData.tokenExpiryTimeString=e.tokenExpiryTimeString),!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;let t=JSON.parse(JSON.stringify(this.authData));delete t.state,localStorage.setItem(`${this.settingsPrefix}_auth_data`,JSON.stringify(t))}catch(e){console.error(e)}}_loadSettings(){if(!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;const e=this.authData.state;this.authData=localStorage.getItem(`${this.settingsPrefix}_auth_data`),this.authData?this.authData=JSON.parse(this.authData):this.authData={},this.authData.apiKey&&this.setJwt(this.authData.apiKey),this.authData.state=e}setEnvironment(e){this.config.setEnvironment(e)}_testTokenAccess(){return new Promise((e,t)=>{this._loadSettings(),this.authentications["Guest Chat JWT"].apiKey?this.callApi("/api/v2/authorization/permissions","GET",null,null,null,null,null,["Guest Chat JWT"],["application/json"],["application/json"]).then(()=>{e()}).catch(e=>{this._saveSettings({apiKey:void 0}),t(e)}):t(new Error("Token is not set"))})}setJwt(e){this._saveSettings({apiKey:e})}setStorageKey(e){this.storageKey=e,this.setJwt(this.authentications["Guest Chat JWT"].apiKey)}_buildAuthUrl(e,t){return t||(t={}),Object.keys(t).reduce((e,i)=>t[i]?`${e}&${i}=${t[i]}`:e,`${this.config.authUrl}/${e}?`)}paramToString(e){return e?e instanceof Date?e.toJSON():e.toString():""}buildUrl(e,t){e.match(/^\//)||(e=`/${e}`);var i=this.config.basePath+e;return i=i.replace(/\{([\w-]+)\}/g,(e,i)=>{var s;return s=t.hasOwnProperty(i)?this.paramToString(t[i]):e,encodeURIComponent(s)})}isJsonMime(e){return Boolean(e&&e.match(/^application\/json(;.*)?$/i))}jsonPreferredMime(e){for(var t=0;t{var i=this.authentications[t];switch(i.type){case"basic":(i.username||i.password)&&e.auth(i.username||"",i.password||"");break;case"apiKey":if(i.apiKey){var s={};i.apiKeyPrefix?s[i.name]=`${i.apiKeyPrefix} ${i.apiKey}`:s[i.name]=i.apiKey,"header"===i.in?e.set(s):e.query(s)}break;case"oauth2":i.accessToken&&e.set({Authorization:`Bearer ${i.accessToken}`});break;default:throw new Error(`Unknown authentication type: ${i.type}`)}})}callApi(e,i,s,o,n,a,r,l,h,g){var u=this.buildUrl(e,s),c=t.default(i,u);this.proxy&&c.proxy&&c.proxy(this.proxy),this.applyAuthToRequest(c,l),c.query(this.normalizeParams(o)),c.set(this.defaultHeaders).set(this.normalizeParams(n)),c.timeout(this.timeout);var d=this.jsonPreferredMime(h);if(d?c.type(d):c.header["Content-Type"]||c.type("application/json"),"application/x-www-form-urlencoded"===d)c.send(this.normalizeParams(a));else if("multipart/form-data"==d){var p=this.normalizeParams(a);for(var m in p)p.hasOwnProperty(m)&&(this.isFileParam(p[m])?c.attach(m,p[m]):c.field(m,p[m]))}else r&&c.send(r);var f=this.jsonPreferredMime(g);return f&&c.accept(f),new Promise((e,t)=>{c.end((s,o)=>{if(!s||o){var n=!0===this.returnExtended||s?{status:o.status,statusText:o.statusText,headers:o.headers,body:o.body,text:o.text,error:s}:o.body?o.body:o.text;this.config.logger.log("trace",o.statusCode,i,u,c.header,o.headers,r,void 0),this.config.logger.log("debug",o.statusCode,i,u,c.header,void 0,r,void 0),s?(this.config.logger.log("error",o.statusCode,i,u,c.header,o.headers,r,o.body),t(n)):e(n)}else t({status:0,statusText:"error",headers:[],body:{},text:"error",error:s})})})}}class h{constructor(e){this.apiClient=e||l.instance}deleteWebchatGuestConversationMember(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling deleteWebchatGuestConversationMember';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling deleteWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","DELETE",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequest(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequest';if(void 0===t||null===t)throw'Missing the required parameter "mediaRequestId" when calling getWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","GET",{conversationId:e,mediaRequestId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequests(e){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequests';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests","GET",{conversationId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMember(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMember';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling getWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","GET",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMembers(e,t){if(t=t||{},void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMembers';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members","GET",{conversationId:e},{pageSize:t.pageSize,pageNumber:t.pageNumber,excludeDisconnectedMembers:t.excludeDisconnectedMembers},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessage(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessage';if(void 0===t||null===t)throw'Missing the required parameter "messageId" when calling getWebchatGuestConversationMessage';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}","GET",{conversationId:e,messageId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessages(e,t){if(t=t||{},void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages","GET",{conversationId:e},{after:t.after,before:t.before,sortOrder:t.sortOrder,maxResults:t.maxResults},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}patchWebchatGuestConversationMediarequest(e,t,i){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling patchWebchatGuestConversationMediarequest';if(void 0===t||null===t)throw'Missing the required parameter "mediaRequestId" when calling patchWebchatGuestConversationMediarequest';if(void 0===i||null===i)throw'Missing the required parameter "body" when calling patchWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","PATCH",{conversationId:e,mediaRequestId:t},{},{},{},i,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberMessages(e,t,i){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberMessages';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberMessages';if(void 0===i||null===i)throw'Missing the required parameter "body" when calling postWebchatGuestConversationMemberMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages","POST",{conversationId:e,memberId:t},{},{},{},i,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberTyping(e,t){if(void 0===e||null===e)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberTyping';if(void 0===t||null===t)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberTyping';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing","POST",{conversationId:e,memberId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversations(e){if(void 0===e||null===e)throw'Missing the required parameter "body" when calling postWebchatGuestConversations';return this.apiClient.callApi("/api/v2/webchat/guest/conversations","POST",{},{},{},{},e,[],["application/json"],["application/json"])}}return new class{constructor(){this.ApiClient=new l,this.WebChatApi=h,this.PureCloudRegionHosts=i}}}); \ No newline at end of file diff --git a/build/dist/web-cjs/bundle.js b/build/dist/web-cjs/bundle.js index 810e7a8b..879cca0e 100644 --- a/build/dist/web-cjs/bundle.js +++ b/build/dist/web-cjs/bundle.js @@ -1,8 +1,10 @@ 'use strict'; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +var superagent = require('superagent'); -var superagent = _interopDefault(require('superagent')); +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var superagent__default = /*#__PURE__*/_interopDefaultLegacy(superagent); var PureCloudRegionHosts = { us_east_1: 'mypurecloud.com', @@ -910,7 +912,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { } } - function read$$1 (buf, i) { + function read (buf, i) { if (indexSize === 1) { return buf[i] } else { @@ -922,7 +924,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { if (dir) { var foundIndex = -1; for (i = byteOffset; i < arrLength; i++) { - if (read$$1(arr, i) === read$$1(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i; if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { @@ -935,7 +937,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { for (i = byteOffset; i >= 0; i--) { var found = true; for (var j = 0; j < valLength; j++) { - if (read$$1(arr, i + j) !== read$$1(val, j)) { + if (read(arr, i + j) !== read(val, j)) { found = false; break } @@ -1006,7 +1008,7 @@ function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } -Buffer.prototype.write = function write$$1 (string, offset, length, encoding) { +Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8'; @@ -1675,7 +1677,7 @@ function checkIEEE754 (buf, value, offset, ext, max, min) { function writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); + checkIEEE754(buf, value, offset, 4); } write(buf, value, offset, littleEndian, 23, 4); return offset + 4 @@ -1691,7 +1693,7 @@ Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) function writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); + checkIEEE754(buf, value, offset, 8); } write(buf, value, offset, littleEndian, 52, 8); return offset + 8 @@ -2156,7 +2158,6 @@ class Configuration { const path = require('path'); this.configPath = path.join(os.homedir(), '.genesyscloudjavascript-guest', 'config'); } - this.live_reload_config = true; this.host; this.environment; @@ -2170,26 +2171,7 @@ class Configuration { liveLoadConfig() { // If in browser, don't read config file, use default values - if (typeof window !== 'undefined') { - this.configPath = ''; - return; - } - - this.updateConfigFromFile(); - - if (this.live_reload_config && this.live_reload_config === true) { - try { - const fs = require('fs'); - fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { - this.updateConfigFromFile(); - if (!this.live_reload_config) { - fs.unwatchFile(this.configPath); - } - }); - } catch (err) { - // do nothing - } - } + this.configPath = ''; } setConfigPath(path) { @@ -2200,24 +2182,6 @@ class Configuration { } updateConfigFromFile() { - const ConfigParser = require('configparser'); - var configparser = new ConfigParser(); - - try { - configparser.read(this.configPath); // If no error catched, indicates it's INI format - this.config = configparser; - } catch (error) { - if (error.name && error.name === 'MissingSectionHeaderError') { - // Not INI format, see if it's JSON format - const fs = require('fs'); - var configData = fs.readFileSync(this.configPath, 'utf8'); - this.config = { - _sections: JSON.parse(configData), // To match INI data format - }; - } - } - - if (this.config) this.updateConfigValues(); } updateConfigValues() { @@ -2283,7 +2247,7 @@ class Configuration { /** * @module purecloud-guest-chat-client/ApiClient - * @version 8.0.0 + * @version 8.1.0 */ class ApiClient { /** @@ -2399,7 +2363,7 @@ class ApiClient { this.settingsPrefix = 'purecloud'; // Expose superagent module for use with superagent-proxy - this.superagent = superagent; + this.superagent = superagent__default["default"]; if (typeof(window) !== 'undefined') window.ApiClient = this; } @@ -2744,7 +2708,7 @@ class ApiClient { */ callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, accepts) { var url = this.buildUrl(path, pathParams); - var request = superagent(httpMethod, url); + var request = superagent__default["default"](httpMethod, url); if (this.proxy && request.proxy) { request.proxy(this.proxy); @@ -2758,7 +2722,7 @@ class ApiClient { // set header parameters request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); - //request.set({ 'purecloud-sdk': '8.0.0' }); + //request.set({ 'purecloud-sdk': '8.1.0' }); // set request timeout request.timeout(this.timeout); @@ -2849,7 +2813,7 @@ class WebChatApi { /** * WebChat service. * @module purecloud-guest-chat-client/api/WebChatApi - * @version 8.0.0 + * @version 8.1.0 */ /** @@ -3228,7 +3192,7 @@ class WebChatApi { * *

* @module purecloud-guest-chat-client/index - * @version 8.0.0 + * @version 8.1.0 */ class platformClient { constructor() { diff --git a/build/dist/web-cjs/purecloud-guest-chat-client.js b/build/dist/web-cjs/purecloud-guest-chat-client.js index 956a8bb5..566fa51b 100644 --- a/build/dist/web-cjs/purecloud-guest-chat-client.js +++ b/build/dist/web-cjs/purecloud-guest-chat-client.js @@ -1,6 +1,4 @@ require=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i */ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m @@ -2073,8 +2073,8 @@ exports.homedir = function () { },{}],6:[function(require,module,exports){ (function (process){(function (){ -// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, -// backported and transplited with Babel, with backwards-compat fixes +// 'path' module extracted from Node.js v8.11.1 (only the posix part) +// transplited with Babel // Copyright Joyent, Inc. and other Node contributors. // @@ -2097,284 +2097,511 @@ exports.homedir = function () { // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } +'use strict'; + +function assertPath(path) { + if (typeof path !== 'string') { + throw new TypeError('Path must be a string. Received ' + JSON.stringify(path)); } +} - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); +// Resolves . and .. elements in a path with directory names +function normalizeStringPosix(path, allowAboveRoot) { + var res = ''; + var lastSegmentLength = 0; + var lastSlash = -1; + var dots = 0; + var code; + for (var i = 0; i <= path.length; ++i) { + if (i < path.length) + code = path.charCodeAt(i); + else if (code === 47 /*/*/) + break; + else + code = 47 /*/*/; + if (code === 47 /*/*/) { + if (lastSlash === i - 1 || dots === 1) { + // NOOP + } else if (lastSlash !== i - 1 && dots === 2) { + if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) { + if (res.length > 2) { + var lastSlashIndex = res.lastIndexOf('/'); + if (lastSlashIndex !== res.length - 1) { + if (lastSlashIndex === -1) { + res = ''; + lastSegmentLength = 0; + } else { + res = res.slice(0, lastSlashIndex); + lastSegmentLength = res.length - 1 - res.lastIndexOf('/'); + } + lastSlash = i; + dots = 0; + continue; + } + } else if (res.length === 2 || res.length === 1) { + res = ''; + lastSegmentLength = 0; + lastSlash = i; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + if (res.length > 0) + res += '/..'; + else + res = '..'; + lastSegmentLength = 2; + } + } else { + if (res.length > 0) + res += '/' + path.slice(lastSlash + 1, i); + else + res = path.slice(lastSlash + 1, i); + lastSegmentLength = i - lastSlash - 1; + } + lastSlash = i; + dots = 0; + } else if (code === 46 /*.*/ && dots !== -1) { + ++dots; + } else { + dots = -1; } } + return res; +} - return parts; +function _format(sep, pathObject) { + var dir = pathObject.dir || pathObject.root; + var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || ''); + if (!dir) { + return base; + } + if (dir === pathObject.root) { + return dir + base; + } + return dir + sep + base; } -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; +var posix = { + // path.resolve([from ...], to) + resolve: function resolve() { + var resolvedPath = ''; + var resolvedAbsolute = false; + var cwd; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path; + if (i >= 0) + path = arguments[i]; + else { + if (cwd === undefined) + cwd = process.cwd(); + path = cwd; + } - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); + assertPath(path); - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; + // Skip empty entries + if (path.length === 0) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/; } - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) + // Normalize the path + resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute); - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); + if (resolvedAbsolute) { + if (resolvedPath.length > 0) + return '/' + resolvedPath; + else + return '/'; + } else if (resolvedPath.length > 0) { + return resolvedPath; + } else { + return '.'; + } + }, - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; + normalize: function normalize(path) { + assertPath(path); -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; + if (path.length === 0) return '.'; - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); + var isAbsolute = path.charCodeAt(0) === 47 /*/*/; + var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/; - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } + // Normalize the path + path = normalizeStringPosix(path, !isAbsolute); - return (isAbsolute ? '/' : '') + path; -}; + if (path.length === 0 && !isAbsolute) path = '.'; + if (path.length > 0 && trailingSeparator) path += '/'; -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; + if (isAbsolute) return '/' + path; + return path; + }, + + isAbsolute: function isAbsolute(path) { + assertPath(path); + return path.length > 0 && path.charCodeAt(0) === 47 /*/*/; + }, -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); + join: function join() { + if (arguments.length === 0) + return '.'; + var joined; + for (var i = 0; i < arguments.length; ++i) { + var arg = arguments[i]; + assertPath(arg); + if (arg.length > 0) { + if (joined === undefined) + joined = arg; + else + joined += '/' + arg; + } } - return p; - }).join('/')); -}; + if (joined === undefined) + return '.'; + return posix.normalize(joined); + }, + relative: function relative(from, to) { + assertPath(from); + assertPath(to); -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); + if (from === to) return ''; - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } + from = posix.resolve(from); + to = posix.resolve(to); - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } + if (from === to) return ''; - if (start > end) return []; - return arr.slice(start, end - start + 1); - } + // Trim any leading backslashes + var fromStart = 1; + for (; fromStart < from.length; ++fromStart) { + if (from.charCodeAt(fromStart) !== 47 /*/*/) + break; + } + var fromEnd = from.length; + var fromLen = fromEnd - fromStart; - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); + // Trim any leading backslashes + var toStart = 1; + for (; toStart < to.length; ++toStart) { + if (to.charCodeAt(toStart) !== 47 /*/*/) + break; + } + var toEnd = to.length; + var toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + var length = fromLen < toLen ? fromLen : toLen; + var lastCommonSep = -1; + var i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (to.charCodeAt(toStart + i) === 47 /*/*/) { + // We get here if `from` is the exact base path for `to`. + // For example: from='/foo/bar'; to='/foo/bar/baz' + return to.slice(toStart + i + 1); + } else if (i === 0) { + // We get here if `from` is the root + // For example: from='/'; to='/foo' + return to.slice(toStart + i); + } + } else if (fromLen > length) { + if (from.charCodeAt(fromStart + i) === 47 /*/*/) { + // We get here if `to` is the exact base path for `from`. + // For example: from='/foo/bar/baz'; to='/foo/bar' + lastCommonSep = i; + } else if (i === 0) { + // We get here if `to` is the root. + // For example: from='/foo'; to='/' + lastCommonSep = 0; + } + } + break; + } + var fromCode = from.charCodeAt(fromStart + i); + var toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) + break; + else if (fromCode === 47 /*/*/) + lastCommonSep = i; + } + + var out = ''; + // Generate the relative path based on the path difference between `to` + // and `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) { + if (out.length === 0) + out += '..'; + else + out += '/..'; + } + } - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) + return out + to.slice(toStart + lastCommonSep); + else { + toStart += lastCommonSep; + if (to.charCodeAt(toStart) === 47 /*/*/) + ++toStart; + return to.slice(toStart); + } + }, + + _makeLong: function _makeLong(path) { + return path; + }, + + dirname: function dirname(path) { + assertPath(path); + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 /*/*/; + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } + if (end === -1) return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) return '//'; + return path.slice(0, end); + }, - outputParts = outputParts.concat(toParts.slice(samePartsLength)); + basename: function basename(path, ext) { + if (ext !== undefined && typeof ext !== 'string') throw new TypeError('"ext" argument must be a string'); + assertPath(path); - return outputParts.join('/'); -}; + var start = 0; + var end = -1; + var matchedSlash = true; + var i; + + if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { + if (ext.length === path.length && ext === path) return ''; + var extIdx = ext.length - 1; + var firstNonSlashEnd = -1; + for (i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else { + if (firstNonSlashEnd === -1) { + // We saw the first non-path separator, remember this index in case + // we need it if the extension ends up not matching + matchedSlash = false; + firstNonSlashEnd = i + 1; + } + if (extIdx >= 0) { + // Try to match the explicit extension + if (code === ext.charCodeAt(extIdx)) { + if (--extIdx === -1) { + // We matched the extension, so mark this as the end of our path + // component + end = i; + } + } else { + // Extension does not match, so our result is the entire path + // component + extIdx = -1; + end = firstNonSlashEnd; + } + } + } + } -exports.sep = '/'; -exports.delimiter = ':'; + if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length; + return path.slice(start, end); + } else { + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } + } -exports.dirname = function (path) { - if (typeof path !== 'string') path = path + ''; - if (path.length === 0) return '.'; - var code = path.charCodeAt(0); - var hasRoot = code === 47 /*/*/; - var end = -1; - var matchedSlash = true; - for (var i = path.length - 1; i >= 1; --i) { - code = path.charCodeAt(i); - if (code === 47 /*/*/) { - if (!matchedSlash) { - end = i; - break; + if (end === -1) return ''; + return path.slice(start, end); + } + }, + + extname: function extname(path) { + assertPath(path); + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; } - } else { - // We saw the first non-path separator - matchedSlash = false; + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) + startDot = i; + else if (preDotState !== 1) + preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } } - } - if (end === -1) return hasRoot ? '/' : '.'; - if (hasRoot && end === 1) { - // return '//'; - // Backwards-compat fix: - return '/'; - } - return path.slice(0, end); -}; + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + return path.slice(startDot, end); + }, -function basename(path) { - if (typeof path !== 'string') path = path + ''; + format: function format(pathObject) { + if (pathObject === null || typeof pathObject !== 'object') { + throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject); + } + return _format('/', pathObject); + }, - var start = 0; - var end = -1; - var matchedSlash = true; - var i; + parse: function parse(path) { + assertPath(path); - for (i = path.length - 1; i >= 0; --i) { - if (path.charCodeAt(i) === 47 /*/*/) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; + var ret = { root: '', dir: '', base: '', ext: '', name: '' }; + if (path.length === 0) return ret; + var code = path.charCodeAt(0); + var isAbsolute = code === 47 /*/*/; + var start; + if (isAbsolute) { + ret.root = '/'; + start = 1; + } else { + start = 0; + } + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + var i = path.length - 1; + + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + + // Get non-dir info + for (; i >= start; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; } - } else if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // path component - matchedSlash = false; - end = i + 1; + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } } - } - if (end === -1) return ''; - return path.slice(start, end); -} + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + if (end !== -1) { + if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end); + } + } else { + if (startPart === 0 && isAbsolute) { + ret.name = path.slice(1, startDot); + ret.base = path.slice(1, end); + } else { + ret.name = path.slice(startPart, startDot); + ret.base = path.slice(startPart, end); + } + ret.ext = path.slice(startDot, end); + } -// Uses a mixed approach for backwards-compatibility, as ext behavior changed -// in new Node.js versions, so only basename() above is backported here -exports.basename = function (path, ext) { - var f = basename(path); - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; + if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/'; -exports.extname = function (path) { - if (typeof path !== 'string') path = path + ''; - var startDot = -1; - var startPart = 0; - var end = -1; - var matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - var preDotState = 0; - for (var i = path.length - 1; i >= 0; --i) { - var code = path.charCodeAt(i); - if (code === 47 /*/*/) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === 46 /*.*/) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) - startDot = i; - else if (preDotState !== 1) - preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if (startDot === -1 || end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { - return ''; - } - return path.slice(startDot, end); + return ret; + }, + + sep: '/', + delimiter: ':', + win32: null, + posix: null }; -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} +posix.posix = posix; -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; +module.exports = posix; }).call(this)}).call(this,require('_process')) },{"_process":7}],7:[function(require,module,exports){ @@ -2564,628 +2791,72 @@ process.chdir = function (dir) { process.umask = function() { return 0; }; },{}],8:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],9:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],10:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } +'use strict'; - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } +var GetIntrinsic = require('get-intrinsic'); - return deprecated; -}; +var callBind = require('./'); +var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; +module.exports = function callBoundIntrinsic(name, allowMissing) { + var intrinsic = GetIntrinsic(name, !!allowMissing); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBind(intrinsic); + } + return intrinsic; }; +},{"./":9,"get-intrinsic":14}],9:[function(require,module,exports){ +'use strict'; -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); +var bind = require('function-bind'); +var GetIntrinsic = require('get-intrinsic'); - return reduceToSingleString(output, base, braces); -} +var $apply = GetIntrinsic('%Function.prototype.apply%'); +var $call = GetIntrinsic('%Function.prototype.call%'); +var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); +var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); +var $max = GetIntrinsic('%Math.max%'); -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = null; + } } +module.exports = function callBind(originalFunction) { + var func = $reflectApply(bind, $call, arguments); + if ($gOPD && $defineProperty) { + var desc = $gOPD(func, 'length'); + if (desc.configurable) { + // original length, plus the receiver, minus any additional arguments (after the receiver) + $defineProperty( + func, + 'length', + { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } + ); + } + } + return func; +}; -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - +var applyBind = function applyBind() { + return $reflectApply(bind, $apply, arguments); +}; -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { value: applyBind }); +} else { + module.exports.apply = applyBind; } - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":9,"_process":7,"inherits":8}],11:[function(require,module,exports){ +},{"function-bind":13,"get-intrinsic":14}],10:[function(require,module,exports){ /** * Expose `Emitter`. @@ -3362,619 +3033,2371 @@ Emitter.prototype.hasListeners = function(event){ return !! this.listeners(event).length; }; -},{}],12:[function(require,module,exports){ -const util = require('util'); -const fs = require('fs'); -const path = require('path'); -const mkdirp = require('mkdirp'); -const errors = require('./errors'); -const interpolation = require('./interpolation'); - -/** - * Regular Expression to match section headers. - * @type {RegExp} - * @private - */ -const SECTION = new RegExp(/\s*\[([^\]]+)]/); - -/** - * Regular expression to match key, value pairs. - * @type {RegExp} - * @private - */ -const KEY = new RegExp(/\s*(.*?)\s*[=:]\s*(.*)/); - -/** - * Regular expression to match comments. Either starting with a - * semi-colon or a hash. - * @type {RegExp} - * @private - */ -const COMMENT = new RegExp(/^\s*[;#]/); - -// RL1.6 Line Boundaries (for unicode) -// ... it shall recognize not only CRLF, LF, CR, -// but also NEL, PS and LS. -const LINE_BOUNDARY = new RegExp(/\r\n|[\n\r\u0085\u2028\u2029]/g); - -const readFileAsync = util.promisify(fs.readFile); -const writeFileAsync = util.promisify(fs.writeFile); -const statAsync = util.promisify(fs.stat); -const mkdirAsync = util.promisify(mkdirp); - -/** - * @constructor - */ -function ConfigParser() { - this._sections = {}; -} - -/** - * Returns an array of the sections. - * @returns {Array} - */ -ConfigParser.prototype.sections = function() { - return Object.keys(this._sections); -}; - -/** - * Adds a section named section to the instance. If the section already - * exists, a DuplicateSectionError is thrown. - * @param {string} section - Section Name - */ -ConfigParser.prototype.addSection = function(section) { - if(this._sections.hasOwnProperty(section)){ - throw new errors.DuplicateSectionError(section) - } - this._sections[section] = {}; -}; - -/** - * Indicates whether the section is present in the configuration - * file. - * @param {string} section - Section Name - * @returns {boolean} - */ -ConfigParser.prototype.hasSection = function(section) { - return this._sections.hasOwnProperty(section); -}; - -/** - * Returns an array of all keys in the specified section. - * @param {string} section - Section Name - * @returns {Array} - */ -ConfigParser.prototype.keys = function(section) { - try { - return Object.keys(this._sections[section]); - } catch(err){ - throw new errors.NoSectionError(section); - } -}; - -/** - * Indicates whether the specified key is in the section. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @returns {boolean} - */ -ConfigParser.prototype.hasKey = function (section, key) { - return this._sections.hasOwnProperty(section) && - this._sections[section].hasOwnProperty(key); -}; - -/** - * Reads a file and parses the configuration data. - * @param {string|Buffer|int} file - Filename or File Descriptor - */ -ConfigParser.prototype.read = function(file) { - const lines = fs.readFileSync(file) - .toString('utf8') - .split(LINE_BOUNDARY); - parseLines.call(this, file, lines); -}; - -/** - * Reads a file asynchronously and parses the configuration data. - * @param {string|Buffer|int} file - Filename or File Descriptor - */ -ConfigParser.prototype.readAsync = async function(file) { - const lines = (await readFileAsync(file)) - .toString('utf8') - .split(LINE_BOUNDARY); - parseLines.call(this, file, lines); -} - -/** - * Gets the value for the key in the named section. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @param {boolean} [raw=false] - Whether or not to replace placeholders - * @returns {string|undefined} - */ -ConfigParser.prototype.get = function(section, key, raw) { - if(this._sections.hasOwnProperty(section)){ - if(raw){ - return this._sections[section][key]; - } else { - return interpolation.interpolate(this, section, key); - } - } - return undefined; -}; - -/** - * Coerces value to an integer of the specified radix. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @param {int} [radix=10] - An integer between 2 and 36 that represents the base of the string. - * @returns {number|undefined|NaN} - */ -ConfigParser.prototype.getInt = function(section, key, radix) { - if(this._sections.hasOwnProperty(section)){ - if(!radix) radix = 10; - return parseInt(this._sections[section][key], radix); - } - return undefined; -}; - -/** - * Coerces value to a float. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @returns {number|undefined|NaN} - */ -ConfigParser.prototype.getFloat = function(section, key) { - if(this._sections.hasOwnProperty(section)){ - return parseFloat(this._sections[section][key]); - } - return undefined; -}; - -/** - * Returns an object with every key, value pair for the named section. - * @param {string} section - Section Name - * @returns {Object} - */ -ConfigParser.prototype.items = function(section) { - return this._sections[section]; -}; - -/** - * Sets the given key to the specified value. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @param {*} value - New Key Value - */ -ConfigParser.prototype.set = function(section, key, value) { - if(this._sections.hasOwnProperty(section)){ - this._sections[section][key] = value; - } -}; - -/** - * Removes the property specified by key in the named section. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @returns {boolean} - */ -ConfigParser.prototype.removeKey = function(section, key) { - // delete operator returns true if the property doesn't not exist - if(this._sections.hasOwnProperty(section) && - this._sections[section].hasOwnProperty(key)){ - return delete this._sections[section][key]; - } - return false; -}; - -/** - * Removes the named section (and associated key, value pairs). - * @param {string} section - Section Name - * @returns {boolean} - */ -ConfigParser.prototype.removeSection = function(section) { - if(this._sections.hasOwnProperty(section)){ - return delete this._sections[section]; - } - return false; -}; - -/** - * Writes the representation of the config file to the - * specified file. Comments are not preserved. - * @param {string|Buffer|int} file - Filename or File Descriptor - * @param {bool} [createMissingDirs=false] - Whether to create the directories in the path if they don't exist - */ -ConfigParser.prototype.write = function(file, createMissingDirs = false) { - if (createMissingDirs) { - const dir = path.dirname(file); - mkdirp.sync(dir); - } - - fs.writeFileSync(file, getSectionsAsString.call(this)); -}; - -/** - * Writes the representation of the config file to the - * specified file asynchronously. Comments are not preserved. - * @param {string|Buffer|int} file - Filename or File Descriptor - * @param {bool} [createMissingDirs=false] - Whether to create the directories in the path if they don't exist - * @returns {Promise} - */ -ConfigParser.prototype.writeAsync = async function(file, createMissingDirs = false) { - if (createMissingDirs) { - const dir = path.dirname(file); - await mkdirAsync(dir); - } - - await writeFileAsync(file, getSectionsAsString.call(this)); -} - -function parseLines(file, lines) { - let curSec = null; - lines.forEach((line, lineNumber) => { - if(!line || line.match(COMMENT)) return; - let res = SECTION.exec(line); - if(res){ - const header = res[1]; - curSec = {}; - this._sections[header] = curSec; - } else if(!curSec) { - throw new errors.MissingSectionHeaderError(file, lineNumber, line); - } else { - res = KEY.exec(line); - if(res){ - const key = res[1]; - curSec[key] = res[2]; - } else { - throw new errors.ParseError(file, lineNumber, line); - } - } - }); -} - -function getSectionsAsString() { - let out = ''; - let section; - for(section in this._sections){ - if(!this._sections.hasOwnProperty(section)) continue; - out += ('[' + section + ']\n'); - const keys = this._sections[section]; - let key; - for(key in keys){ - if(!keys.hasOwnProperty(key)) continue; - let value = keys[key]; - out += (key + '=' + value + '\n'); - } - out += '\n'; - } - return out; -} - -module.exports = ConfigParser; +},{}],11:[function(require,module,exports){ +module.exports = stringify +stringify.default = stringify +stringify.stable = deterministicStringify +stringify.stableStringify = deterministicStringify -},{"./errors":13,"./interpolation":14,"fs":1,"mkdirp":15,"path":6,"util":10}],13:[function(require,module,exports){ -/** - * Error thrown when addSection is called with a section - * that already exists. - * @param {string} section - Section Name - * @constructor - */ -function DuplicateSectionError(section) { - this.name = 'DuplicateSectionError'; - this.message = section + ' already exists'; - Error.captureStackTrace(this, this.constructor); -} - -/** - * Error thrown when the section being accessed, does - * not exist. - * @param {string} section - Section Name - * @constructor - */ -function NoSectionError(section) { - this.name = this.constructor.name; - this.message = 'Section ' + section + ' does not exist.'; - Error.captureStackTrace(this, this.constructor); -} - -/** - * Error thrown when a file is being parsed. - * @param {string} filename - File name - * @param {int} lineNumber - Line Number - * @param {string} line - Contents of the line - * @constructor - */ -function ParseError(filename, lineNumber, line) { - this.name = this.constructor.name; - this.message = 'Source contains parsing errors.\nfile: ' + filename + - ' line: ' + lineNumber + '\n' + line; - Error.captureStackTrace(this, this.constructor); -} - -/** - * Error thrown when there are no section headers present - * in a file. - * @param {string} filename - File name - * @param {int} lineNumber - Line Number - * @param {string} line - Contents of the line - * @constructor - */ -function MissingSectionHeaderError(filename, lineNumber, line) { - this.name = this.constructor.name; - this.message = 'File contains no section headers.\nfile: ' + filename + - ' line: ' + lineNumber + '\n' + line; - Error.captureStackTrace(this, this.constructor); -} - -/** - * Error thrown when the interpolate function exceeds the maximum recursion - * depth. - * @param {string} section - Section Name - * @param {string} key - Key Name - * @param {string} value - Key Value - * @param {int} maxDepth - Maximum recursion depth - * @constructor - */ -function MaximumInterpolationDepthError(section, key, value, maxDepth) { - this.name = this.constructor.name; - this.message = 'Exceeded Maximum Recursion Depth (' + maxDepth + - ') for key ' + key + ' in section ' + section + '\nvalue: ' + value; - Error.captureStackTrace(this, this.constructor); -} - -module.exports = { - DuplicateSectionError, - NoSectionError, - ParseError, - MissingSectionHeaderError, - MaximumInterpolationDepthError -}; -},{}],14:[function(require,module,exports){ -const errors = require('./errors'); - -/** - * Regular Expression to match placeholders. - * @type {RegExp} - * @private - */ -const PLACEHOLDER = new RegExp(/%\(([\w-]+)\)s/); - -/** - * Maximum recursion depth for parseValue - * @type {number} - */ -const MAXIMUM_INTERPOLATION_DEPTH = 50; - -/** - * Recursively parses a string and replaces the placeholder ( %(key)s ) - * with the value the key points to. - * @param {ParserConfig} parser - Parser Config Object - * @param {string} section - Section Name - * @param {string} key - Key Name - */ -function interpolate(parser, section, key) { - return interpolateRecurse(parser, section, key, 1); -} - -/** - * Interpolate Recurse - * @param parser - * @param section - * @param key - * @param depth - * @private - */ -function interpolateRecurse(parser, section, key, depth) { - let value = parser.get(section, key, true); - if(depth > MAXIMUM_INTERPOLATION_DEPTH){ - throw new errors.MaximumInterpolationDepthError(section, key, value, MAXIMUM_INTERPOLATION_DEPTH); - } - let res = PLACEHOLDER.exec(value); - while(res !== null){ - const placeholder = res[1]; - const rep = interpolateRecurse(parser, section, placeholder, depth + 1); - // replace %(key)s with the returned value next - value = value.substr(0, res.index) + rep + - value.substr(res.index + res[0].length); - // get next placeholder - res = PLACEHOLDER.exec(value); - } - return value; -} - -module.exports = { - interpolate, - MAXIMUM_INTERPOLATION_DEPTH -}; -},{"./errors":13}],15:[function(require,module,exports){ -var path = require('path'); -var fs = require('fs'); -var _0777 = parseInt('0777', 8); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, opts, f, made) { - if (typeof opts === 'function') { - f = opts; - opts = {}; - } - else if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 - } - if (!made) made = null; - - var cb = f || function () {}; - p = path.resolve(p); - - xfs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - if (path.dirname(p) === p) return cb(er); - mkdirP(path.dirname(p), opts, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, opts, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); +var LIMIT_REPLACE_NODE = '[...]' +var CIRCULAR_REPLACE_NODE = '[Circular]' + +var arr = [] +var replacerStack = [] + +function defaultOptions () { + return { + depthLimit: Number.MAX_SAFE_INTEGER, + edgesLimit: Number.MAX_SAFE_INTEGER + } +} + +// Regular stringify +function stringify (obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions() + } + + decirc(obj, '', 0, [], undefined, 0, options) + var res + try { + if (replacerStack.length === 0) { + res = JSON.stringify(obj, replacer, spacer) + } else { + res = JSON.stringify(obj, replaceGetterValues(replacer), spacer) + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]') + } finally { + while (arr.length !== 0) { + var part = arr.pop() + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]) + } else { + part[0][part[1]] = part[2] + } + } + } + return res +} + +function setReplace (replace, val, k, parent) { + var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k) + if (propertyDescriptor.get !== undefined) { + if (propertyDescriptor.configurable) { + Object.defineProperty(parent, k, { value: replace }) + arr.push([parent, k, val, propertyDescriptor]) + } else { + replacerStack.push([val, k, replace]) + } + } else { + parent[k] = replace + arr.push([parent, k, val]) + } +} + +function decirc (val, k, edgeIndex, stack, parent, depth, options) { + depth += 1 + var i + if (typeof val === 'object' && val !== null) { + for (i = 0; i < stack.length; i++) { + if (stack[i] === val) { + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent) + return + } + } + + if ( + typeof options.depthLimit !== 'undefined' && + depth > options.depthLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + + if ( + typeof options.edgesLimit !== 'undefined' && + edgeIndex + 1 > options.edgesLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + + stack.push(val) + // Optimize for Arrays. Big arrays could kill the performance otherwise! + if (Array.isArray(val)) { + for (i = 0; i < val.length; i++) { + decirc(val[i], i, i, stack, val, depth, options) + } + } else { + var keys = Object.keys(val) + for (i = 0; i < keys.length; i++) { + var key = keys[i] + decirc(val[key], key, i, stack, val, depth, options) + } + } + stack.pop() + } +} + +// Stable-stringify +function compareFunction (a, b) { + if (a < b) { + return -1 + } + if (a > b) { + return 1 + } + return 0 } -mkdirP.sync = function sync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 - } - if (!made) made = null; +function deterministicStringify (obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions() + } + + var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj + var res + try { + if (replacerStack.length === 0) { + res = JSON.stringify(tmp, replacer, spacer) + } else { + res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer) + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]') + } finally { + // Ensure that we restore the object as it was. + while (arr.length !== 0) { + var part = arr.pop() + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]) + } else { + part[0][part[1]] = part[2] + } + } + } + return res +} + +function deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) { + depth += 1 + var i + if (typeof val === 'object' && val !== null) { + for (i = 0; i < stack.length; i++) { + if (stack[i] === val) { + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent) + return + } + } + try { + if (typeof val.toJSON === 'function') { + return + } + } catch (_) { + return + } + + if ( + typeof options.depthLimit !== 'undefined' && + depth > options.depthLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + + if ( + typeof options.edgesLimit !== 'undefined' && + edgeIndex + 1 > options.edgesLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + + stack.push(val) + // Optimize for Arrays. Big arrays could kill the performance otherwise! + if (Array.isArray(val)) { + for (i = 0; i < val.length; i++) { + deterministicDecirc(val[i], i, i, stack, val, depth, options) + } + } else { + // Create a temporary object in the required way + var tmp = {} + var keys = Object.keys(val).sort(compareFunction) + for (i = 0; i < keys.length; i++) { + var key = keys[i] + deterministicDecirc(val[key], key, i, stack, val, depth, options) + tmp[key] = val[key] + } + if (typeof parent !== 'undefined') { + arr.push([parent, k, val]) + parent[k] = tmp + } else { + return tmp + } + } + stack.pop() + } +} + +// wraps replacer function to handle values we couldn't replace +// and mark them as replaced value +function replaceGetterValues (replacer) { + replacer = + typeof replacer !== 'undefined' + ? replacer + : function (k, v) { + return v + } + return function (key, val) { + if (replacerStack.length > 0) { + for (var i = 0; i < replacerStack.length; i++) { + var part = replacerStack[i] + if (part[1] === key && part[0] === val) { + val = part[2] + replacerStack.splice(i, 1) + break + } + } + } + return replacer.call(this, key, val) + } +} + +},{}],12:[function(require,module,exports){ +'use strict'; + +/* eslint no-invalid-this: 1 */ + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var slice = Array.prototype.slice; +var toStr = Object.prototype.toString; +var funcType = '[object Function]'; + +module.exports = function bind(that) { + var target = this; + if (typeof target !== 'function' || toStr.call(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slice.call(arguments, 1); + + var bound; + var binder = function () { + if (this instanceof bound) { + var result = target.apply( + this, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return this; + } else { + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + } + }; + + var boundLength = Math.max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs.push('$' + i); + } + + bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; + +},{}],13:[function(require,module,exports){ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = Function.prototype.bind || implementation; + +},{"./implementation":12}],14:[function(require,module,exports){ +'use strict'; + +var undefined; + +var $SyntaxError = SyntaxError; +var $Function = Function; +var $TypeError = TypeError; + +// eslint-disable-next-line consistent-return +var getEvalledConstructor = function (expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = Object.getOwnPropertyDescriptor; +if ($gOPD) { + try { + $gOPD({}, ''); + } catch (e) { + $gOPD = null; // this is IE 8, which has a broken gOPD + } +} + +var throwTypeError = function () { + throw new $TypeError(); +}; +var ThrowTypeError = $gOPD + ? (function () { + try { + // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties + arguments.callee; // IE 8 does not throw here + return throwTypeError; + } catch (calleeThrows) { + try { + // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }()) + : throwTypeError; + +var hasSymbols = require('has-symbols')(); + +var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto + +var needsEval = {}; + +var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': Error, + '%eval%': eval, // eslint-disable-line no-eval + '%EvalError%': EvalError, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': typeof JSON === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': Object, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': RangeError, + '%ReferenceError%': ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet +}; + +var doEval = function doEval(name) { + var value; + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + if (gen) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + + return value; +}; + +var LEGACY_ALIASES = { + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = require('function-bind'); +var hasOwn = require('has'); +var $concat = bind.call(Function.call, Array.prototype.concat); +var $spliceApply = bind.call(Function.apply, Array.prototype.splice); +var $replace = bind.call(Function.call, String.prototype.replace); +var $strSlice = bind.call(Function.call, String.prototype.slice); + +/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; +/* end adaptation */ + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ( + ( + (first === '"' || first === "'" || first === '`') + || (last === '"' || last === "'" || last === '`') + ) + && first !== last + ) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + return void undefined; + } + if ($gOPD && (i + 1) >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + // By convention, when a data property is converted to an accessor + // property to emulate a data property that does not suffer from + // the override mistake, that accessor's getter is marked with + // an `originalValue` property. Here, when we detect this, we + // uphold the illusion by pretending to see that original data + // property, i.e., returning the value rather than the getter + // itself. + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; +}; + +},{"function-bind":13,"has":17,"has-symbols":15}],15:[function(require,module,exports){ +'use strict'; + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = require('./shams'); + +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; + +},{"./shams":16}],16:[function(require,module,exports){ +'use strict'; + +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; + +},{}],17:[function(require,module,exports){ +'use strict'; + +var bind = require('function-bind'); + +module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty); + +},{"function-bind":13}],18:[function(require,module,exports){ +var hasMap = typeof Map === 'function' && Map.prototype; +var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; +var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; +var mapForEach = hasMap && Map.prototype.forEach; +var hasSet = typeof Set === 'function' && Set.prototype; +var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; +var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; +var setForEach = hasSet && Set.prototype.forEach; +var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; +var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; +var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; +var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; +var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; +var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; +var booleanValueOf = Boolean.prototype.valueOf; +var objectToString = Object.prototype.toString; +var functionToString = Function.prototype.toString; +var $match = String.prototype.match; +var $slice = String.prototype.slice; +var $replace = String.prototype.replace; +var $toUpperCase = String.prototype.toUpperCase; +var $toLowerCase = String.prototype.toLowerCase; +var $test = RegExp.prototype.test; +var $concat = Array.prototype.concat; +var $join = Array.prototype.join; +var $arrSlice = Array.prototype.slice; +var $floor = Math.floor; +var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; +var gOPS = Object.getOwnPropertySymbols; +var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; +var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; +// ie, `has-tostringtag/shams +var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') + ? Symbol.toStringTag + : null; +var isEnumerable = Object.prototype.propertyIsEnumerable; + +var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( + [].__proto__ === Array.prototype // eslint-disable-line no-proto + ? function (O) { + return O.__proto__; // eslint-disable-line no-proto + } + : null +); + +function addNumericSeparator(num, str) { + if ( + num === Infinity + || num === -Infinity + || num !== num + || (num && num > -1000 && num < 1000) + || $test.call(/e/, str) + ) { + return str; + } + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + if (typeof num === 'number') { + var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) + if (int !== num) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); + } + } + return $replace.call(str, sepRegex, '$&_'); +} + +var inspectCustom = require('./util.inspect').custom; +var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null; + +module.exports = function inspect_(obj, options, depth, seen) { + var opts = options || {}; + + if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { + throw new TypeError('option "quoteStyle" must be "single" or "double"'); + } + if ( + has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' + ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity + : opts.maxStringLength !== null + ) + ) { + throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); + } + var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; + if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { + throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); + } + + if ( + has(opts, 'indent') + && opts.indent !== null + && opts.indent !== '\t' + && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) + ) { + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); + } + if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + var numericSeparator = opts.numericSeparator; + + if (typeof obj === 'undefined') { + return 'undefined'; + } + if (obj === null) { + return 'null'; + } + if (typeof obj === 'boolean') { + return obj ? 'true' : 'false'; + } + + if (typeof obj === 'string') { + return inspectString(obj, opts); + } + if (typeof obj === 'number') { + if (obj === 0) { + return Infinity / obj > 0 ? '0' : '-0'; + } + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; + } + if (typeof obj === 'bigint') { + var bigIntStr = String(obj) + 'n'; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; + } + + var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; + if (typeof depth === 'undefined') { depth = 0; } + if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { + return isArray(obj) ? '[Array]' : '[Object]'; + } + + var indent = getIndent(opts, depth); + + if (typeof seen === 'undefined') { + seen = []; + } else if (indexOf(seen, obj) >= 0) { + return '[Circular]'; + } + + function inspect(value, from, noIndent) { + if (from) { + seen = $arrSlice.call(seen); + seen.push(from); + } + if (noIndent) { + var newOpts = { + depth: opts.depth + }; + if (has(opts, 'quoteStyle')) { + newOpts.quoteStyle = opts.quoteStyle; + } + return inspect_(value, newOpts, depth + 1, seen); + } + return inspect_(value, opts, depth + 1, seen); + } + + if (typeof obj === 'function') { + var name = nameOf(obj); + var keys = arrObjKeys(obj, inspect); + return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); + } + if (isSymbol(obj)) { + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); + return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; + } + if (isElement(obj)) { + var s = '<' + $toLowerCase.call(String(obj.nodeName)); + var attrs = obj.attributes || []; + for (var i = 0; i < attrs.length; i++) { + s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); + } + s += '>'; + if (obj.childNodes && obj.childNodes.length) { s += '...'; } + s += ''; + return s; + } + if (isArray(obj)) { + if (obj.length === 0) { return '[]'; } + var xs = arrObjKeys(obj, inspect); + if (indent && !singleLineValues(xs)) { + return '[' + indentedJoin(xs, indent) + ']'; + } + return '[ ' + $join.call(xs, ', ') + ' ]'; + } + if (isError(obj)) { + var parts = arrObjKeys(obj, inspect); + if ('cause' in obj && !isEnumerable.call(obj, 'cause')) { + return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; + } + if (parts.length === 0) { return '[' + String(obj) + ']'; } + return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; + } + if (typeof obj === 'object' && customInspect) { + if (inspectSymbol && typeof obj[inspectSymbol] === 'function') { + return obj[inspectSymbol](); + } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { + return obj.inspect(); + } + } + if (isMap(obj)) { + var mapParts = []; + mapForEach.call(obj, function (value, key) { + mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); + }); + return collectionOf('Map', mapSize.call(obj), mapParts, indent); + } + if (isSet(obj)) { + var setParts = []; + setForEach.call(obj, function (value) { + setParts.push(inspect(value, obj)); + }); + return collectionOf('Set', setSize.call(obj), setParts, indent); + } + if (isWeakMap(obj)) { + return weakCollectionOf('WeakMap'); + } + if (isWeakSet(obj)) { + return weakCollectionOf('WeakSet'); + } + if (isWeakRef(obj)) { + return weakCollectionOf('WeakRef'); + } + if (isNumber(obj)) { + return markBoxed(inspect(Number(obj))); + } + if (isBigInt(obj)) { + return markBoxed(inspect(bigIntValueOf.call(obj))); + } + if (isBoolean(obj)) { + return markBoxed(booleanValueOf.call(obj)); + } + if (isString(obj)) { + return markBoxed(inspect(String(obj))); + } + if (!isDate(obj) && !isRegExp(obj)) { + var ys = arrObjKeys(obj, inspect); + var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; + var protoTag = obj instanceof Object ? '' : 'null prototype'; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; + var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; + var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); + if (ys.length === 0) { return tag + '{}'; } + if (indent) { + return tag + '{' + indentedJoin(ys, indent) + '}'; + } + return tag + '{ ' + $join.call(ys, ', ') + ' }'; + } + return String(obj); +}; + +function wrapQuotes(s, defaultStyle, opts) { + var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; + return quoteChar + s + quoteChar; +} + +function quote(s) { + return $replace.call(String(s), /"/g, '"'); +} + +function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } + +// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives +function isSymbol(obj) { + if (hasShammedSymbols) { + return obj && typeof obj === 'object' && obj instanceof Symbol; + } + if (typeof obj === 'symbol') { + return true; + } + if (!obj || typeof obj !== 'object' || !symToString) { + return false; + } + try { + symToString.call(obj); + return true; + } catch (e) {} + return false; +} + +function isBigInt(obj) { + if (!obj || typeof obj !== 'object' || !bigIntValueOf) { + return false; + } + try { + bigIntValueOf.call(obj); + return true; + } catch (e) {} + return false; +} + +var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; +function has(obj, key) { + return hasOwn.call(obj, key); +} + +function toStr(obj) { + return objectToString.call(obj); +} + +function nameOf(f) { + if (f.name) { return f.name; } + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); + if (m) { return m[1]; } + return null; +} + +function indexOf(xs, x) { + if (xs.indexOf) { return xs.indexOf(x); } + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) { return i; } + } + return -1; +} + +function isMap(x) { + if (!mapSize || !x || typeof x !== 'object') { + return false; + } + try { + mapSize.call(x); + try { + setSize.call(x); + } catch (s) { + return true; + } + return x instanceof Map; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakMap(x) { + if (!weakMapHas || !x || typeof x !== 'object') { + return false; + } + try { + weakMapHas.call(x, weakMapHas); + try { + weakSetHas.call(x, weakSetHas); + } catch (s) { + return true; + } + return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakRef(x) { + if (!weakRefDeref || !x || typeof x !== 'object') { + return false; + } + try { + weakRefDeref.call(x); + return true; + } catch (e) {} + return false; +} + +function isSet(x) { + if (!setSize || !x || typeof x !== 'object') { + return false; + } + try { + setSize.call(x); + try { + mapSize.call(x); + } catch (m) { + return true; + } + return x instanceof Set; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isWeakSet(x) { + if (!weakSetHas || !x || typeof x !== 'object') { + return false; + } + try { + weakSetHas.call(x, weakSetHas); + try { + weakMapHas.call(x, weakMapHas); + } catch (s) { + return true; + } + return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 + } catch (e) {} + return false; +} + +function isElement(x) { + if (!x || typeof x !== 'object') { return false; } + if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { + return true; + } + return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; +} + +function inspectString(str, opts) { + if (str.length > opts.maxStringLength) { + var remaining = str.length - opts.maxStringLength; + var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; + } + // eslint-disable-next-line no-control-regex + var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); + return wrapQuotes(s, 'single', opts); +} + +function lowbyte(c) { + var n = c.charCodeAt(0); + var x = { + 8: 'b', + 9: 't', + 10: 'n', + 12: 'f', + 13: 'r' + }[n]; + if (x) { return '\\' + x; } + return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); +} + +function markBoxed(str) { + return 'Object(' + str + ')'; +} + +function weakCollectionOf(type) { + return type + ' { ? }'; +} + +function collectionOf(type, size, entries, indent) { + var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); + return type + ' (' + size + ') {' + joinedEntries + '}'; +} + +function singleLineValues(xs) { + for (var i = 0; i < xs.length; i++) { + if (indexOf(xs[i], '\n') >= 0) { + return false; + } + } + return true; +} + +function getIndent(opts, depth) { + var baseIndent; + if (opts.indent === '\t') { + baseIndent = '\t'; + } else if (typeof opts.indent === 'number' && opts.indent > 0) { + baseIndent = $join.call(Array(opts.indent + 1), ' '); + } else { + return null; + } + return { + base: baseIndent, + prev: $join.call(Array(depth + 1), baseIndent) + }; +} + +function indentedJoin(xs, indent) { + if (xs.length === 0) { return ''; } + var lineJoiner = '\n' + indent.prev + indent.base; + return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; +} + +function arrObjKeys(obj, inspect) { + var isArr = isArray(obj); + var xs = []; + if (isArr) { + xs.length = obj.length; + for (var i = 0; i < obj.length; i++) { + xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; + } + } + var syms = typeof gOPS === 'function' ? gOPS(obj) : []; + var symMap; + if (hasShammedSymbols) { + symMap = {}; + for (var k = 0; k < syms.length; k++) { + symMap['$' + syms[k]] = syms[k]; + } + } + + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue + if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue + if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { + // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section + continue; // eslint-disable-line no-restricted-syntax, no-continue + } else if ($test.call(/[^\w$]/, key)) { + xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); + } else { + xs.push(key + ': ' + inspect(obj[key], obj)); + } + } + if (typeof gOPS === 'function') { + for (var j = 0; j < syms.length; j++) { + if (isEnumerable.call(obj, syms[j])) { + xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); + } + } + } + return xs; +} + +},{"./util.inspect":2}],19:[function(require,module,exports){ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +var Format = { + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; + +module.exports = { + 'default': Format.RFC3986, + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return String(value); + } + }, + RFC1738: Format.RFC1738, + RFC3986: Format.RFC3986 +}; + +},{}],20:[function(require,module,exports){ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; + +},{"./formats":19,"./parse":21,"./stringify":22}],21:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var defaults = { + allowDots: false, + allowPrototypes: false, + allowSparse: false, + arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: '&', + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1000, + parseArrays: true, + plainObjects: false, + strictNullHandling: false +}; + +var interpretNumericEntities = function (str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +var parseArrayValue = function (val, options) { + if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { + return val.split(','); + } + + return val; +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = utils.maybeMap( + parseArrayValue(part.slice(pos + 1), options), + function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + } + ); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else if (cleanRoot !== '__proto__') { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + // eslint-disable-next-line no-implicit-coercion, no-extra-parens + depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + if (options.allowSparse === true) { + return obj; + } + + return utils.compact(obj); +}; + +},{"./utils":23}],22:[function(require,module,exports){ +'use strict'; + +var getSideChannel = require('side-channel'); +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var split = String.prototype.split; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' + || typeof v === 'number' + || typeof v === 'boolean' + || typeof v === 'symbol' + || typeof v === 'bigint'; +}; + +var sentinel = {}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + format, + formatter, + encodeValuesOnly, + charset, + sideChannel +) { + var obj = object; + + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { + // Where object last appeared in the ref tree + var pos = tmpSc.get(object); + step += 1; + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; // Break while + } + } + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } + } + + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = utils.maybeMap(obj, function (value) { + if (value instanceof Date) { + return serializeDate(value); + } + return value; + }); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); + if (generateArrayPrefix === 'comma' && encodeValuesOnly) { + var valuesArray = split.call(String(obj), ','); + var valuesJoined = ''; + for (var i = 0; i < valuesArray.length; ++i) { + valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format)); + } + return [formatter(keyValue) + '=' + valuesJoined]; + } + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (generateArrayPrefix === 'comma' && isArray(obj)) { + // we need to join elements in + objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; + } else if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var j = 0; j < objKeys.length; ++j) { + var key = objKeys[j]; + var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; + + if (skipNulls && value === null) { + continue; + } + + var keyPrefix = isArray(obj) + ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix + : prefix + (allowDots ? '.' + key : '[' + key + ']'); + + sideChannel.set(object, step); + var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); + pushToArray(values, stringify( + value, + keyPrefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + format, + formatter, + encodeValuesOnly, + charset, + valueSideChannel + )); + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + format: format, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + var sideChannel = getSideChannel(); + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.format, + options.formatter, + options.encodeValuesOnly, + options.charset, + sideChannel + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":19,"./utils":23,"side-channel":24}],23:[function(require,module,exports){ +'use strict'; + +var formats = require('./formats'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + /* eslint no-param-reassign: 0 */ + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset, kind, format) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = str; + if (typeof str === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( ) + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + /* eslint operator-linebreak: [2, "before"] */ + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + maybeMap: maybeMap, + merge: merge +}; + +},{"./formats":19}],24:[function(require,module,exports){ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); +var callBound = require('call-bind/callBound'); +var inspect = require('object-inspect'); + +var $TypeError = GetIntrinsic('%TypeError%'); +var $WeakMap = GetIntrinsic('%WeakMap%', true); +var $Map = GetIntrinsic('%Map%', true); + +var $weakMapGet = callBound('WeakMap.prototype.get', true); +var $weakMapSet = callBound('WeakMap.prototype.set', true); +var $weakMapHas = callBound('WeakMap.prototype.has', true); +var $mapGet = callBound('Map.prototype.get', true); +var $mapSet = callBound('Map.prototype.set', true); +var $mapHas = callBound('Map.prototype.has', true); + +/* + * This function traverses the list returning the node corresponding to the + * given key. + * + * That node is also moved to the head of the list, so that if it's accessed + * again we don't need to traverse the whole list. By doing so, all the recently + * used nodes can be accessed relatively quickly. + */ +var listGetNode = function (list, key) { // eslint-disable-line consistent-return + for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { + if (curr.key === key) { + prev.next = curr.next; + curr.next = list.next; + list.next = curr; // eslint-disable-line no-param-reassign + return curr; + } + } +}; + +var listGet = function (objects, key) { + var node = listGetNode(objects, key); + return node && node.value; +}; +var listSet = function (objects, key, value) { + var node = listGetNode(objects, key); + if (node) { + node.value = value; + } else { + // Prepend the new node to the beginning of the list + objects.next = { // eslint-disable-line no-param-reassign + key: key, + next: objects.next, + value: value + }; + } +}; +var listHas = function (objects, key) { + return !!listGetNode(objects, key); +}; + +module.exports = function getSideChannel() { + var $wm; + var $m; + var $o; + var channel = { + assert: function (key) { + if (!channel.has(key)) { + throw new $TypeError('Side channel does not contain ' + inspect(key)); + } + }, + get: function (key) { // eslint-disable-line consistent-return + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapGet($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapGet($m, key); + } + } else { + if ($o) { // eslint-disable-line no-lonely-if + return listGet($o, key); + } + } + }, + has: function (key) { + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapHas($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapHas($m, key); + } + } else { + if ($o) { // eslint-disable-line no-lonely-if + return listHas($o, key); + } + } + return false; + }, + set: function (key, value) { + if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { + if (!$wm) { + $wm = new $WeakMap(); + } + $weakMapSet($wm, key, value); + } else if ($Map) { + if (!$m) { + $m = new $Map(); + } + $mapSet($m, key, value); + } else { + if (!$o) { + /* + * Initialize the linked list as an empty node, so that we don't have + * to special-case handling of the first node: we can always refer to + * it as (previous node).next, instead of something like (list).head + */ + $o = { key: {}, next: null }; + } + listSet($o, key, value); + } + } + }; + return channel; +}; + +},{"call-bind/callBound":8,"get-intrinsic":14,"object-inspect":18}],25:[function(require,module,exports){ +"use strict"; - p = path.resolve(p); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - try { - xfs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), opts, made); - sync(p, opts, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = xfs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - return made; -}; +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } -},{"fs":1,"path":6}],16:[function(require,module,exports){ function Agent() { this._defaults = []; } -["use", "on", "once", "set", "query", "type", "accept", "auth", "withCredentials", "sortQuery", "retry", "ok", "redirects", - "timeout", "buffer", "serialize", "parse", "ca", "key", "pfx", "cert"].forEach(function(fn) { - /** Default setting for all requests from this agent */ - Agent.prototype[fn] = function(/*varargs*/) { - this._defaults.push({fn:fn, arguments:arguments}); - return this; - } -}); +var _loop = function _loop() { + var fn = _arr[_i]; + + // Default setting for all requests from this agent + Agent.prototype[fn] = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } -Agent.prototype._setDefaults = function(req) { - this._defaults.forEach(function(def) { - req[def.fn].apply(req, def.arguments); + this._defaults.push({ + fn: fn, + args: args }); + + return this; + }; +}; + +for (var _i = 0, _arr = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts']; _i < _arr.length; _i++) { + _loop(); +} + +Agent.prototype._setDefaults = function (request) { + var _iterator = _createForOfIteratorHelper(this._defaults), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var def = _step.value; + request[def.fn].apply(request, _toConsumableArray(def.args)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } }; module.exports = Agent; -},{}],17:[function(require,module,exports){ +},{}],26:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + /** * Root reference for iframes. */ - var root; -if (typeof window !== 'undefined') { // Browser window + +if (typeof window !== 'undefined') { + // Browser window root = window; -} else if (typeof self !== 'undefined') { // Web Worker +} else if (typeof self === 'undefined') { + // Other environments + console.warn('Using browser-only version of superagent in non-browser environment'); + root = void 0; +} else { + // Web Worker root = self; -} else { // Other environments - console.warn("Using browser-only version of superagent in non-browser environment"); - root = this; } var Emitter = require('component-emitter'); + +var safeStringify = require('fast-safe-stringify'); + +var qs = require('qs'); + var RequestBase = require('./request-base'); -var isObject = require('./is-object'); + +var _require = require('./utils'), + isObject = _require.isObject, + mixin = _require.mixin, + hasOwn = _require.hasOwn; + var ResponseBase = require('./response-base'); -var Agent = require('./agent-base'); +var Agent = require('./agent-base'); /** * Noop. */ -function noop(){}; +function noop() {} /** * Expose `request`. */ -var request = exports = module.exports = function(method, url) { + +module.exports = function (method, url) { // callback - if ('function' == typeof url) { + if (typeof url === 'function') { return new exports.Request('GET', method).end(url); - } + } // url first - // url first - if (1 == arguments.length) { + + if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); -} +}; +exports = module.exports; +var request = exports; exports.Request = Request; - /** * Determine XHR. */ request.getXHR = function () { - if (root.XMLHttpRequest - && (!root.location || 'file:' != root.location.protocol - || !root.ActiveXObject)) { - return new XMLHttpRequest; - } else { - try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {} + if (root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:' || !root.ActiveXObject)) { + return new XMLHttpRequest(); } - throw Error("Browser-only version of superagent could not find XHR"); -}; + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch (_unused) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.6.0'); + } catch (_unused2) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.3.0'); + } catch (_unused3) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP'); + } catch (_unused4) {} + + throw new Error('Browser-only version of superagent could not find XHR'); +}; /** * Removes leading and trailing whitespace, added to support IE. * @@ -3983,10 +5406,12 @@ request.getXHR = function () { * @api private */ -var trim = ''.trim - ? function(s) { return s.trim(); } - : function(s) { return s.replace(/(^\s*|\s*$)/g, ''); }; +var trim = ''.trim ? function (s) { + return s.trim(); +} : function (s) { + return s.replace(/(^\s*|\s*$)/g, ''); +}; /** * Serialize the given `obj`. * @@ -3995,15 +5420,16 @@ var trim = ''.trim * @api private */ -function serialize(obj) { - if (!isObject(obj)) return obj; +function serialize(object) { + if (!isObject(object)) return object; var pairs = []; - for (var key in obj) { - pushEncodedKeyValuePair(pairs, key, obj[key]); + + for (var key in object) { + if (hasOwn(object, key)) pushEncodedKeyValuePair(pairs, key, object[key]); } + return pairs.join('&'); } - /** * Helps 'serialize' with serializing arrays. * Mutates the pairs array. @@ -4013,65 +5439,76 @@ function serialize(obj) { * @param {Mixed} val */ -function pushEncodedKeyValuePair(pairs, key, val) { - if (val != null) { - if (Array.isArray(val)) { - val.forEach(function(v) { + +function pushEncodedKeyValuePair(pairs, key, value) { + if (value === undefined) return; + + if (value === null) { + pairs.push(encodeURI(key)); + return; + } + + if (Array.isArray(value)) { + var _iterator = _createForOfIteratorHelper(value), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var v = _step.value; pushEncodedKeyValuePair(pairs, key, v); - }); - } else if (isObject(val)) { - for(var subkey in val) { - pushEncodedKeyValuePair(pairs, key + '[' + subkey + ']', val[subkey]); } - } else { - pairs.push(encodeURIComponent(key) - + '=' + encodeURIComponent(val)); + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); } - } else if (val === null) { - pairs.push(encodeURIComponent(key)); + } else if (isObject(value)) { + for (var subkey in value) { + if (hasOwn(value, subkey)) pushEncodedKeyValuePair(pairs, "".concat(key, "[").concat(subkey, "]"), value[subkey]); + } + } else { + pairs.push(encodeURI(key) + '=' + encodeURIComponent(value)); } } - /** * Expose serialization method. */ -request.serializeObject = serialize; +request.serializeObject = serialize; /** - * Parse the given x-www-form-urlencoded `str`. - * - * @param {String} str - * @return {Object} - * @api private - */ + * Parse the given x-www-form-urlencoded `str`. + * + * @param {String} str + * @return {Object} + * @api private + */ -function parseString(str) { - var obj = {}; - var pairs = str.split('&'); +function parseString(string_) { + var object = {}; + var pairs = string_.split('&'); var pair; var pos; - for (var i = 0, len = pairs.length; i < len; ++i) { + for (var i = 0, length_ = pairs.length; i < length_; ++i) { pair = pairs[i]; pos = pair.indexOf('='); - if (pos == -1) { - obj[decodeURIComponent(pair)] = ''; + + if (pos === -1) { + object[decodeURIComponent(pair)] = ''; } else { - obj[decodeURIComponent(pair.slice(0, pos))] = - decodeURIComponent(pair.slice(pos + 1)); + object[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent(pair.slice(pos + 1)); } } - return obj; + return object; } - /** * Expose parser. */ -request.parseString = parseString; +request.parseString = parseString; /** * Default MIME type map. * @@ -4084,10 +5521,9 @@ request.types = { json: 'application/json', xml: 'text/xml', urlencoded: 'application/x-www-form-urlencoded', - 'form': 'application/x-www-form-urlencoded', + form: 'application/x-www-form-urlencoded', 'form-data': 'application/x-www-form-urlencoded' }; - /** * Default serialization map. * @@ -4098,24 +5534,22 @@ request.types = { */ request.serialize = { - 'application/x-www-form-urlencoded': serialize, - 'application/json': JSON.stringify + 'application/x-www-form-urlencoded': qs.stringify, + 'application/json': safeStringify }; - /** - * Default parsers. - * - * superagent.parse['application/xml'] = function(str){ - * return { object parsed from str }; - * }; - * - */ + * Default parsers. + * + * superagent.parse['application/xml'] = function(str){ + * return { object parsed from str }; + * }; + * + */ request.parse = { 'application/x-www-form-urlencoded': parseString, 'application/json': JSON.parse }; - /** * Parse the given header `str` into * an object containing the mapped fields. @@ -4125,28 +5559,30 @@ request.parse = { * @api private */ -function parseHeader(str) { - var lines = str.split(/\r?\n/); +function parseHeader(string_) { + var lines = string_.split(/\r?\n/); var fields = {}; var index; var line; var field; - var val; + var value; - for (var i = 0, len = lines.length; i < len; ++i) { + for (var i = 0, length_ = lines.length; i < length_; ++i) { line = lines[i]; index = line.indexOf(':'); - if (index === -1) { // could be empty line, just skip it + + if (index === -1) { + // could be empty line, just skip it continue; } + field = line.slice(0, index).toLowerCase(); - val = trim(line.slice(index + 1)); - fields[field] = val; + value = trim(line.slice(index + 1)); + fields[field] = value; } return fields; } - /** * Check if `mime` is json or has +json structured syntax suffix. * @@ -4155,12 +5591,12 @@ function parseHeader(str) { * @api private */ + function isJSON(mime) { // should match /json or +json // but not /json-seq - return /[\/+]json($|[^-\w])/.test(mime); + return /[/+]json($|[^-\w])/i.test(mime); } - /** * Initialize a new `Response` with the given `xhr`. * @@ -4207,38 +5643,38 @@ function isJSON(mime) { * @api private */ -function Response(req) { - this.req = req; - this.xhr = this.req.xhr; - // responseText is accessible only if responseType is '' or 'text' and on older browsers - this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined') - ? this.xhr.responseText - : null; + +function Response(request_) { + this.req = request_; + this.xhr = this.req.xhr; // responseText is accessible only if responseType is '' or 'text' and on older browsers + + this.text = this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text') || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null; this.statusText = this.req.xhr.statusText; - var status = this.xhr.status; - // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request + var status = this.xhr.status; // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request + if (status === 1223) { status = 204; } + this._setStatusProperties(status); - this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders()); - // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but + + this.headers = parseHeader(this.xhr.getAllResponseHeaders()); + this.header = this.headers; // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but // getResponseHeader still works. so we get content-type even if getting // other headers fails. + this.header['content-type'] = this.xhr.getResponseHeader('content-type'); + this._setHeaderProperties(this.header); - if (null === this.text && req._responseType) { + if (this.text === null && request_._responseType) { this.body = this.xhr.response; } else { - this.body = this.req.method != 'HEAD' - ? this._parseBody(this.text ? this.text : this.xhr.response) - : null; + this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response); } } -ResponseBase(Response.prototype); - +mixin(Response.prototype, ResponseBase.prototype); /** * Parse the given body `str`. * @@ -4250,19 +5686,19 @@ ResponseBase(Response.prototype); * @api private */ -Response.prototype._parseBody = function(str) { +Response.prototype._parseBody = function (string_) { var parse = request.parse[this.type]; + if (this.req._parser) { - return this.req._parser(this, str); + return this.req._parser(this, string_); } + if (!parse && isJSON(this.type)) { parse = request.parse['application/json']; } - return parse && str && (str.length || str instanceof Object) - ? parse(str) - : null; -}; + return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null; +}; /** * Return an `Error` representative of this response. * @@ -4270,26 +5706,24 @@ Response.prototype._parseBody = function(str) { * @api public */ -Response.prototype.toError = function(){ + +Response.prototype.toError = function () { var req = this.req; var method = req.method; var url = req.url; - - var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')'; - var err = new Error(msg); - err.status = this.status; - err.method = method; - err.url = url; - - return err; + var message = "cannot ".concat(method, " ").concat(url, " (").concat(this.status, ")"); + var error = new Error(message); + error.status = this.status; + error.method = method; + error.url = url; + return error; }; - /** * Expose `Response`. */ -request.Response = Response; +request.Response = Response; /** * Initialize a new `Request` with the given `method` and `url`. * @@ -4304,62 +5738,64 @@ function Request(method, url) { this.method = method; this.url = url; this.header = {}; // preserves header name case + this._header = {}; // coerces header names to lowercase - this.on('end', function(){ - var err = null; + + this.on('end', function () { + var error = null; var res = null; try { res = new Response(self); - } catch(e) { - err = new Error('Parser is unable to parse the response'); - err.parse = true; - err.original = e; - // issue #675: return the raw response if the response parsing fails + } catch (error_) { + error = new Error('Parser is unable to parse the response'); + error.parse = true; + error.original = error_; // issue #675: return the raw response if the response parsing fails + if (self.xhr) { // ie9 doesn't have 'response' property - err.rawResponse = typeof self.xhr.responseType == 'undefined' ? self.xhr.responseText : self.xhr.response; - // issue #876: return the http status code if the response parsing fails - err.status = self.xhr.status ? self.xhr.status : null; - err.statusCode = err.status; // backwards-compat only + error.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response; // issue #876: return the http status code if the response parsing fails + + error.status = self.xhr.status ? self.xhr.status : null; + error.statusCode = error.status; // backwards-compat only } else { - err.rawResponse = null; - err.status = null; + error.rawResponse = null; + error.status = null; } - return self.callback(err); + return self.callback(error); } self.emit('response', res); + var new_error; - var new_err; try { if (!self._isResponseOK(res)) { - new_err = new Error(res.statusText || 'Unsuccessful HTTP response'); + new_error = new Error(res.statusText || res.text || 'Unsuccessful HTTP response'); } - } catch(custom_err) { - new_err = custom_err; // ok() callback can throw - } + } catch (err) { + new_error = err; // ok() callback can throw + } // #1000 don't catch errors from the callback to avoid double calling it + - // #1000 don't catch errors from the callback to avoid double calling it - if (new_err) { - new_err.original = err; - new_err.response = res; - new_err.status = res.status; - self.callback(new_err, res); + if (new_error) { + new_error.original = error; + new_error.response = res; + new_error.status = res.status; + self.callback(new_error, res); } else { self.callback(null, res); } }); } - /** * Mixin `Emitter` and `RequestBase`. */ +// eslint-disable-next-line new-cap -Emitter(Request.prototype); -RequestBase(Request.prototype); +Emitter(Request.prototype); +mixin(Request.prototype, RequestBase.prototype); /** * Set Content-Type to `type`, mapping values from `request.types`. * @@ -4382,11 +5818,10 @@ RequestBase(Request.prototype); * @api public */ -Request.prototype.type = function(type){ +Request.prototype.type = function (type) { this.set('Content-Type', request.types[type] || type); return this; }; - /** * Set Accept to `type`, mapping values from `request.types`. * @@ -4407,11 +5842,11 @@ Request.prototype.type = function(type){ * @api public */ -Request.prototype.accept = function(type){ + +Request.prototype.accept = function (type) { this.set('Accept', request.types[type] || type); return this; }; - /** * Set Authorization field value with `user` and `pass`. * @@ -4422,28 +5857,32 @@ Request.prototype.accept = function(type){ * @api public */ -Request.prototype.auth = function(user, pass, options){ - if (1 === arguments.length) pass = ''; - if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options + +Request.prototype.auth = function (user, pass, options) { + if (arguments.length === 1) pass = ''; + + if (_typeof(pass) === 'object' && pass !== null) { + // pass is optional and can be replaced with options options = pass; pass = ''; } + if (!options) { options = { - type: 'function' === typeof btoa ? 'basic' : 'auto', + type: typeof btoa === 'function' ? 'basic' : 'auto' }; } - var encoder = function(string) { - if ('function' === typeof btoa) { + var encoder = function encoder(string) { + if (typeof btoa === 'function') { return btoa(string); } + throw new Error('Cannot use basic auth, btoa is not a function'); }; return this._auth(user, pass, options, encoder); }; - /** * Add query-string `val`. * @@ -4458,12 +5897,12 @@ Request.prototype.auth = function(user, pass, options){ * @api public */ -Request.prototype.query = function(val){ - if ('string' != typeof val) val = serialize(val); - if (val) this._query.push(val); + +Request.prototype.query = function (value) { + if (typeof value !== 'string') value = serialize(value); + if (value) this._query.push(value); return this; }; - /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). @@ -4481,24 +5920,26 @@ Request.prototype.query = function(val){ * @api public */ -Request.prototype.attach = function(field, file, options){ + +Request.prototype.attach = function (field, file, options) { if (file) { if (this._data) { - throw Error("superagent can't mix .send() and .attach()"); + throw new Error("superagent can't mix .send() and .attach()"); } this._getFormData().append(field, file, options || file.name); } + return this; }; -Request.prototype._getFormData = function(){ +Request.prototype._getFormData = function () { if (!this._formData) { this._formData = new root.FormData(); } + return this._formData; }; - /** * Invoke the callback with `err` and `res` * and handle arity check. @@ -4508,63 +5949,65 @@ Request.prototype._getFormData = function(){ * @api private */ -Request.prototype.callback = function(err, res){ - if (this._shouldRetry(err, res)) { + +Request.prototype.callback = function (error, res) { + if (this._shouldRetry(error, res)) { return this._retry(); } var fn = this._callback; this.clearTimeout(); - if (err) { - if (this._maxRetries) err.retries = this._retries - 1; - this.emit('error', err); + if (error) { + if (this._maxRetries) error.retries = this._retries - 1; + this.emit('error', error); } - fn(err, res); + fn(error, res); }; - /** * Invoke callback with x-domain error. * * @api private */ -Request.prototype.crossDomainError = function(){ - var err = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); - err.crossDomain = true; - err.status = this.status; - err.method = this.method; - err.url = this.url; +Request.prototype.crossDomainError = function () { + var error = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); + error.crossDomain = true; + error.status = this.status; + error.method = this.method; + error.url = this.url; + this.callback(error); +}; // This only warns, because the request is still likely to work - this.callback(err); -}; -// This only warns, because the request is still likely to work -Request.prototype.buffer = Request.prototype.ca = Request.prototype.agent = function(){ - console.warn("This is not supported in browser version of superagent"); +Request.prototype.agent = function () { + console.warn('This is not supported in browser version of superagent'); return this; }; -// This throws, because it can't send/receive data as expected -Request.prototype.pipe = Request.prototype.write = function(){ - throw Error("Streaming is not supported in browser version of superagent"); +Request.prototype.ca = Request.prototype.agent; +Request.prototype.buffer = Request.prototype.ca; // This throws, because it can't send/receive data as expected + +Request.prototype.write = function () { + throw new Error('Streaming is not supported in browser version of superagent'); }; +Request.prototype.pipe = Request.prototype.write; /** * Check if `obj` is a host object, * we don't want to serialize these :) * - * @param {Object} obj - * @return {Boolean} + * @param {Object} obj host object + * @return {Boolean} is a host object * @api private */ -Request.prototype._isHost = function _isHost(obj) { - // Native objects stringify to [object File], [object Blob], [object FormData], etc. - return obj && 'object' === typeof obj && !Array.isArray(obj) && Object.prototype.toString.call(obj) !== '[object Object]'; -} +Request.prototype._isHost = function (object) { + // Native objects stringify to [object File], [object Blob], [object FormData], etc. + return object && _typeof(object) === 'object' && !Array.isArray(object) && Object.prototype.toString.call(object) !== '[object Object]'; +}; /** * Initiate request, invoking callback `fn(res)` * with an instanceof `Response`. @@ -4574,72 +6017,102 @@ Request.prototype._isHost = function _isHost(obj) { * @api public */ -Request.prototype.end = function(fn){ + +Request.prototype.end = function (fn) { if (this._endCalled) { - console.warn("Warning: .end() was called twice. This is not supported in superagent"); + console.warn('Warning: .end() was called twice. This is not supported in superagent'); } - this._endCalled = true; - // store callback - this._callback = fn || noop; + this._endCalled = true; // store callback + + this._callback = fn || noop; // querystring - // querystring this._finalizeQueryString(); - return this._end(); + this._end(); }; -Request.prototype._end = function() { +Request.prototype._setUploadTimeout = function () { + var self = this; // upload timeout it's wokrs only if deadline timeout is off + + if (this._uploadTimeout && !this._uploadTimeoutTimer) { + this._uploadTimeoutTimer = setTimeout(function () { + self._timeoutError('Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT'); + }, this._uploadTimeout); + } +}; // eslint-disable-next-line complexity + + +Request.prototype._end = function () { + if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called')); var self = this; - var xhr = (this.xhr = request.getXHR()); + this.xhr = request.getXHR(); + var xhr = this.xhr; var data = this._formData || this._data; - this._setTimeouts(); + this._setTimeouts(); // state change - // state change - xhr.onreadystatechange = function(){ + + xhr.addEventListener('readystatechange', function () { var readyState = xhr.readyState; + if (readyState >= 2 && self._responseTimeoutTimer) { clearTimeout(self._responseTimeoutTimer); } - if (4 != readyState) { - return; - } - // In IE9, reads to any property (e.g. status) off of an aborted XHR will + if (readyState !== 4) { + return; + } // In IE9, reads to any property (e.g. status) off of an aborted XHR will // result in the error "Could not complete the operation due to error c00c023f" + + var status; - try { status = xhr.status } catch(e) { status = 0; } + + try { + status = xhr.status; + } catch (_unused5) { + status = 0; + } if (!status) { if (self.timedout || self._aborted) return; return self.crossDomainError(); } + self.emit('end'); - }; + }); // progress - // progress - var handleProgress = function(direction, e) { + var handleProgress = function handleProgress(direction, e) { if (e.total > 0) { e.percent = e.loaded / e.total * 100; + + if (e.percent === 100) { + clearTimeout(self._uploadTimeoutTimer); + } } + e.direction = direction; self.emit('progress', e); }; + if (this.hasListeners('progress')) { try { - xhr.onprogress = handleProgress.bind(null, 'download'); + xhr.addEventListener('progress', handleProgress.bind(null, 'download')); + if (xhr.upload) { - xhr.upload.onprogress = handleProgress.bind(null, 'upload'); + xhr.upload.addEventListener('progress', handleProgress.bind(null, 'upload')); } - } catch(e) { - // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. + } catch (_unused6) {// Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. // Reported here: // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context } } - // initiate request + if (xhr.upload) { + this._setUploadTimeout(); + } // initiate request + + try { if (this.username && this.password) { xhr.open(this.method, this.url, true, this.username, this.password); @@ -4649,60 +6122,66 @@ Request.prototype._end = function() { } catch (err) { // see #1149 return this.callback(err); - } + } // CORS - // CORS - if (this._withCredentials) xhr.withCredentials = true; - // body - if (!this._formData && 'GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !this._isHost(data)) { + if (this._withCredentials) xhr.withCredentials = true; // body + + if (!this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data)) { // serialize stuff var contentType = this._header['content-type']; - var serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; - if (!serialize && isJSON(contentType)) { - serialize = request.serialize['application/json']; + + var _serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; + + if (!_serialize && isJSON(contentType)) { + _serialize = request.serialize['application/json']; } - if (serialize) data = serialize(data); - } - // set header fields - for (var field in this.header) { - if (null == this.header[field]) continue; + if (_serialize) data = _serialize(data); + } // set header fields + - if (this.header.hasOwnProperty(field)) - xhr.setRequestHeader(field, this.header[field]); + for (var field in this.header) { + if (this.header[field] === null) continue; + if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]); } if (this._responseType) { xhr.responseType = this._responseType; - } + } // send stuff - // send stuff - this.emit('request', this); - // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) + this.emit('request', this); // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) // We need null here if data is undefined - xhr.send(typeof data !== 'undefined' ? data : null); - return this; + + xhr.send(typeof data === 'undefined' ? null : data); }; -request.agent = function() { +request.agent = function () { return new Agent(); }; -["GET", "POST", "OPTIONS", "PATCH", "PUT", "DELETE"].forEach(function(method) { - Agent.prototype[method.toLowerCase()] = function(url, fn) { - var req = new request.Request(method, url); - this._setDefaults(req); +var _loop = function _loop() { + var method = _arr[_i]; + + Agent.prototype[method.toLowerCase()] = function (url, fn) { + var request_ = new request.Request(method, url); + + this._setDefaults(request_); + if (fn) { - req.end(fn); + request_.end(fn); } - return req; + + return request_; }; -}); +}; -Agent.prototype.del = Agent.prototype['delete']; +for (var _i = 0, _arr = ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']; _i < _arr.length; _i++) { + _loop(); +} +Agent.prototype.del = Agent.prototype.delete; /** * GET `url` with optional callback `fn(res)`. * @@ -4713,14 +6192,18 @@ Agent.prototype.del = Agent.prototype['delete']; * @api public */ -request.get = function(url, data, fn) { - var req = request('GET', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; +request.get = function (url, data, fn) { + var request_ = request('GET', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; /** * HEAD `url` with optional callback `fn(res)`. * @@ -4731,14 +6214,19 @@ request.get = function(url, data, fn) { * @api public */ -request.head = function(url, data, fn) { - var req = request('HEAD', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; +request.head = function (url, data, fn) { + var request_ = request('HEAD', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; /** * OPTIONS query to `url` with optional callback `fn(res)`. * @@ -4749,14 +6237,19 @@ request.head = function(url, data, fn) { * @api public */ -request.options = function(url, data, fn) { - var req = request('OPTIONS', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.options = function (url, data, fn) { + var request_ = request('OPTIONS', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * DELETE `url` with optional `data` and callback `fn(res)`. * @@ -4767,17 +6260,22 @@ request.options = function(url, data, fn) { * @api public */ + function del(url, data, fn) { - var req = request('DELETE', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -} + var request_ = request('DELETE', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } -request['del'] = del; -request['delete'] = del; + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +} +request.del = del; +request.delete = del; /** * PATCH `url` with optional `data` and callback `fn(res)`. * @@ -4788,14 +6286,18 @@ request['delete'] = del; * @api public */ -request.patch = function(url, data, fn) { - var req = request('PATCH', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.patch = function (url, data, fn) { + var request_ = request('PATCH', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * POST `url` with optional `data` and callback `fn(res)`. * @@ -4806,14 +6308,19 @@ request.patch = function(url, data, fn) { * @api public */ -request.post = function(url, data, fn) { - var req = request('POST', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.post = function (url, data, fn) { + var request_ = request('POST', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * PUT `url` with optional `data` and callback `fn(res)`. * @@ -4824,70 +6331,48 @@ request.post = function(url, data, fn) { * @api public */ -request.put = function(url, data, fn) { - var req = request('PUT', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; -},{"./agent-base":16,"./is-object":18,"./request-base":19,"./response-base":20,"component-emitter":11}],18:[function(require,module,exports){ -'use strict'; +request.put = function (url, data, fn) { + var request_ = request('PUT', url); -/** - * Check if `obj` is an object. - * - * @param {Object} obj - * @return {Boolean} - * @api private - */ + if (typeof data === 'function') { + fn = data; + data = null; + } -function isObject(obj) { - return null !== obj && 'object' === typeof obj; -} + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; -module.exports = isObject; +},{"./agent-base":25,"./request-base":27,"./response-base":28,"./utils":29,"component-emitter":10,"fast-safe-stringify":11,"qs":20}],27:[function(require,module,exports){ +(function (process){(function (){ +"use strict"; -},{}],19:[function(require,module,exports){ -'use strict'; +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +var semver = require('semver'); /** * Module of mixed-in functions shared between node and client code */ -var isObject = require('./is-object'); + +var _require = require('./utils'), + isObject = _require.isObject, + hasOwn = _require.hasOwn; /** * Expose `RequestBase`. */ -module.exports = RequestBase; +module.exports = RequestBase; /** * Initialize a new `RequestBase`. * * @api public */ -function RequestBase(obj) { - if (obj) return mixin(obj); -} - -/** - * Mixin the prototype properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in RequestBase.prototype) { - obj[key] = RequestBase.prototype[key]; - } - return obj; -} - +function RequestBase() {} /** * Clear previous timeout. * @@ -4895,14 +6380,16 @@ function mixin(obj) { * @api public */ -RequestBase.prototype.clearTimeout = function _clearTimeout(){ + +RequestBase.prototype.clearTimeout = function () { clearTimeout(this._timer); clearTimeout(this._responseTimeoutTimer); + clearTimeout(this._uploadTimeoutTimer); delete this._timer; delete this._responseTimeoutTimer; + delete this._uploadTimeoutTimer; return this; }; - /** * Override default response body parser * @@ -4912,11 +6399,11 @@ RequestBase.prototype.clearTimeout = function _clearTimeout(){ * @api public */ -RequestBase.prototype.parse = function parse(fn){ + +RequestBase.prototype.parse = function (fn) { this._parser = fn; return this; }; - /** * Set format of binary response body. * In browser valid formats are 'blob' and 'arraybuffer', @@ -4935,11 +6422,11 @@ RequestBase.prototype.parse = function parse(fn){ * @api public */ -RequestBase.prototype.responseType = function(val){ - this._responseType = val; + +RequestBase.prototype.responseType = function (value) { + this._responseType = value; return this; }; - /** * Override default request body serializer * @@ -4949,16 +6436,17 @@ RequestBase.prototype.responseType = function(val){ * @api public */ -RequestBase.prototype.serialize = function serialize(fn){ + +RequestBase.prototype.serialize = function (fn) { this._serializer = fn; return this; }; - /** * Set timeouts. * * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time. * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections. + * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off * * Value of 0 or false means no timeout. * @@ -4967,28 +6455,38 @@ RequestBase.prototype.serialize = function serialize(fn){ * @api public */ -RequestBase.prototype.timeout = function timeout(options){ - if (!options || 'object' !== typeof options) { + +RequestBase.prototype.timeout = function (options) { + if (!options || _typeof(options) !== 'object') { this._timeout = options; this._responseTimeout = 0; + this._uploadTimeout = 0; return this; } - for(var option in options) { - switch(option) { - case 'deadline': - this._timeout = options.deadline; - break; - case 'response': - this._responseTimeout = options.response; - break; - default: - console.warn("Unknown timeout option", option); + for (var option in options) { + if (hasOwn(options, option)) { + switch (option) { + case 'deadline': + this._timeout = options.deadline; + break; + + case 'response': + this._responseTimeout = options.response; + break; + + case 'upload': + this._uploadTimeout = options.upload; + break; + + default: + console.warn('Unknown timeout option', option); + } } } + return this; }; - /** * Set number of retry attempts on error. * @@ -5000,7 +6498,8 @@ RequestBase.prototype.timeout = function timeout(options){ * @api public */ -RequestBase.prototype.retry = function retry(count, fn){ + +RequestBase.prototype.retry = function (count, fn) { // Default to 1 if no count passed or true if (arguments.length === 0 || count === true) count = 1; if (count <= 0) count = 0; @@ -5008,47 +6507,69 @@ RequestBase.prototype.retry = function retry(count, fn){ this._retries = 0; this._retryCallback = fn; return this; -}; +}; // +// NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package +// +// +// NOTE: we do not include EADDRINFO because it was removed from libuv in 2014 +// +// +// +// +// TODO: expose these as configurable defaults +// -var ERROR_CODES = [ - 'ECONNRESET', - 'ETIMEDOUT', - 'EADDRINFO', - 'ESOCKETTIMEDOUT' -]; + +var ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']); +var STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]); // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) +// const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']); /** * Determine if a request should be retried. - * (Borrowed from segmentio/superagent-retry) + * (Inspired by https://github.com/sindresorhus/got#retry) * - * @param {Error} err - * @param {Response} [res] - * @returns {Boolean} + * @param {Error} err an error + * @param {Response} [res] response + * @returns {Boolean} if segment should be retried */ -RequestBase.prototype._shouldRetry = function(err, res) { + +RequestBase.prototype._shouldRetry = function (error, res) { if (!this._maxRetries || this._retries++ >= this._maxRetries) { return false; } + if (this._retryCallback) { try { - var override = this._retryCallback(err, res); + var override = this._retryCallback(error, res); + if (override === true) return true; - if (override === false) return false; - // undefined falls back to defaults - } catch(e) { - console.error(e); + if (override === false) return false; // undefined falls back to defaults + } catch (error_) { + console.error(error_); } + } // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) + + /* + if ( + this.req && + this.req.method && + !METHODS.has(this.req.method.toUpperCase()) + ) + return false; + */ + + + if (res && res.status && STATUS_CODES.has(res.status)) return true; + + if (error) { + if (error.code && ERROR_CODES.has(error.code)) return true; // Superagent timeout + + if (error.timeout && error.code === 'ECONNABORTED') return true; + if (error.crossDomain) return true; } - if (res && res.status && res.status >= 500 && res.status != 501) return true; - if (err) { - if (err.code && ~ERROR_CODES.indexOf(err.code)) return true; - // Superagent timeout - if (err.timeout && err.code == 'ECONNABORTED') return true; - if (err.crossDomain) return true; - } + return false; }; - /** * Retry request * @@ -5056,11 +6577,10 @@ RequestBase.prototype._shouldRetry = function(err, res) { * @api private */ -RequestBase.prototype._retry = function() { - this.clearTimeout(); +RequestBase.prototype._retry = function () { + this.clearTimeout(); // node - // node if (this.req) { this.req = null; this.req = this.request(); @@ -5068,10 +6588,9 @@ RequestBase.prototype._retry = function() { this._aborted = false; this.timedout = false; - + this.timedoutError = null; return this._end(); }; - /** * Promise support * @@ -5080,42 +6599,64 @@ RequestBase.prototype._retry = function() { * @return {Request} */ -RequestBase.prototype.then = function then(resolve, reject) { + +RequestBase.prototype.then = function (resolve, reject) { + var _this = this; + if (!this._fullfilledPromise) { var self = this; + if (this._endCalled) { - console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"); + console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises'); } - this._fullfilledPromise = new Promise(function(innerResolve, innerReject) { - self.end(function(err, res) { - if (err) innerReject(err); - else innerResolve(res); + + this._fullfilledPromise = new Promise(function (resolve, reject) { + self.on('abort', function () { + if (_this._maxRetries && _this._maxRetries > _this._retries) { + return; + } + + if (_this.timedout && _this.timedoutError) { + reject(_this.timedoutError); + return; + } + + var error = new Error('Aborted'); + error.code = 'ABORTED'; + error.status = _this.status; + error.method = _this.method; + error.url = _this.url; + reject(error); + }); + self.end(function (error, res) { + if (error) reject(error);else resolve(res); }); }); } + return this._fullfilledPromise.then(resolve, reject); }; -RequestBase.prototype['catch'] = function(cb) { +RequestBase.prototype.catch = function (cb) { return this.then(undefined, cb); }; - /** * Allow for extension */ -RequestBase.prototype.use = function use(fn) { + +RequestBase.prototype.use = function (fn) { fn(this); return this; }; -RequestBase.prototype.ok = function(cb) { - if ('function' !== typeof cb) throw Error("Callback required"); +RequestBase.prototype.ok = function (cb) { + if (typeof cb !== 'function') throw new Error('Callback required'); this._okCallback = cb; return this; }; -RequestBase.prototype._isResponseOK = function(res) { +RequestBase.prototype._isResponseOK = function (res) { if (!res) { return false; } @@ -5126,7 +6667,6 @@ RequestBase.prototype._isResponseOK = function(res) { return res.status >= 200 && res.status < 300; }; - /** * Get request header `field`. * Case-insensitive. @@ -5136,10 +6676,10 @@ RequestBase.prototype._isResponseOK = function(res) { * @api public */ -RequestBase.prototype.get = function(field){ + +RequestBase.prototype.get = function (field) { return this._header[field.toLowerCase()]; }; - /** * Get case-insensitive header `field` value. * This is a deprecated internal API. Use `.get(field)` instead. @@ -5152,8 +6692,8 @@ RequestBase.prototype.get = function(field){ * @deprecated */ -RequestBase.prototype.getHeader = RequestBase.prototype.get; +RequestBase.prototype.getHeader = RequestBase.prototype.get; /** * Set header `field` to `val`, or multiple fields with one object. * Case-insensitive. @@ -5175,18 +6715,19 @@ RequestBase.prototype.getHeader = RequestBase.prototype.get; * @api public */ -RequestBase.prototype.set = function(field, val){ +RequestBase.prototype.set = function (field, value) { if (isObject(field)) { for (var key in field) { - this.set(key, field[key]); + if (hasOwn(field, key)) this.set(key, field[key]); } + return this; } - this._header[field.toLowerCase()] = val; - this.header[field] = val; + + this._header[field.toLowerCase()] = value; + this.header[field] = value; return this; }; - /** * Remove header `field`. * Case-insensitive. @@ -5197,14 +6738,15 @@ RequestBase.prototype.set = function(field, val){ * .unset('User-Agent') * .end(callback); * - * @param {String} field + * @param {String} field field name */ -RequestBase.prototype.unset = function(field){ + + +RequestBase.prototype.unset = function (field) { delete this._header[field.toLowerCase()]; delete this.header[field]; return this; }; - /** * Write the field `name` and `val`, or multiple fields with one object * for "multipart/form-data" request bodies. @@ -5219,68 +6761,103 @@ RequestBase.prototype.unset = function(field){ * .end(callback); * ``` * - * @param {String|Object} name - * @param {String|Blob|File|Buffer|fs.ReadStream} val + * @param {String|Object} name name of field + * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field + * @param {String} options extra options, e.g. 'blob' * @return {Request} for chaining * @api public */ -RequestBase.prototype.field = function(name, val) { + + +RequestBase.prototype.field = function (name, value, options) { // name should be either a string or an object. - if (null === name || undefined === name) { + if (name === null || undefined === name) { throw new Error('.field(name, val) name can not be empty'); } if (this._data) { - console.error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); + throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); } if (isObject(name)) { for (var key in name) { - this.field(key, name[key]); + if (hasOwn(name, key)) this.field(key, name[key]); } + return this; } - if (Array.isArray(val)) { - for (var i in val) { - this.field(name, val[i]); + if (Array.isArray(value)) { + for (var i in value) { + if (hasOwn(value, i)) this.field(name, value[i]); } + return this; - } + } // val should be defined now - // val should be defined now - if (null === val || undefined === val) { + + if (value === null || undefined === value) { throw new Error('.field(name, val) val can not be empty'); } - if ('boolean' === typeof val) { - val = '' + val; + + if (typeof value === 'boolean') { + value = String(value); } - this._getFormData().append(name, val); + + this._getFormData().append(name, value, options); + return this; }; - /** * Abort the request, and clear potential timeout. * - * @return {Request} + * @return {Request} request * @api public */ -RequestBase.prototype.abort = function(){ + + +RequestBase.prototype.abort = function () { if (this._aborted) { return this; } + this._aborted = true; - this.xhr && this.xhr.abort(); // browser - this.req && this.req.abort(); // node + if (this.xhr) this.xhr.abort(); // browser + + if (this.req) { + // Node v13 has major differences in `abort()` + // https://github.com/nodejs/node/blob/v12.x/lib/internal/streams/end-of-stream.js + // https://github.com/nodejs/node/blob/v13.x/lib/internal/streams/end-of-stream.js + // https://github.com/nodejs/node/blob/v14.x/lib/internal/streams/end-of-stream.js + // (if you run a diff across these you will see the differences) + // + // References: + // + // + // + // Thanks to @shadowgate15 and @niftylettuce + if (semver.gte(process.version, 'v13.0.0') && semver.lt(process.version, 'v14.0.0')) { + // Note that the reason this doesn't work is because in v13 as compared to v14 + // there is no `callback = nop` set in end-of-stream.js above + throw new Error('Superagent does not work in v13 properly with abort() due to Node.js core changes'); + } else if (semver.gte(process.version, 'v14.0.0')) { + // We have to manually set `destroyed` to `true` in order for this to work + // (see core internals of end-of-stream.js above in v14 branch as compared to v12) + this.req.destroyed = true; + } + + this.req.abort(); // node + } + this.clearTimeout(); this.emit('abort'); return this; }; -RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { +RequestBase.prototype._auth = function (user, pass, options, base64Encoder) { switch (options.type) { case 'basic': - this.set('Authorization', 'Basic ' + base64Encoder(user + ':' + pass)); + this.set('Authorization', "Basic ".concat(base64Encoder("".concat(user, ":").concat(pass)))); break; case 'auto': @@ -5288,13 +6865,17 @@ RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { this.password = pass; break; - case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) - this.set('Authorization', 'Bearer ' + user); + case 'bearer': + // usage would be .auth(accessToken, { type: 'bearer' }) + this.set('Authorization', "Bearer ".concat(user)); + break; + + default: break; } + return this; }; - /** * Enable transmission of cookies with x-domain requests. * @@ -5306,41 +6887,43 @@ RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { * @api public */ -RequestBase.prototype.withCredentials = function(on) { + +RequestBase.prototype.withCredentials = function (on) { // This is browser-only functionality. Node side is no-op. - if (on == undefined) on = true; + if (on === undefined) on = true; this._withCredentials = on; return this; }; - /** - * Set the max redirects to `n`. Does noting in browser XHR implementation. + * Set the max redirects to `n`. Does nothing in browser XHR implementation. * * @param {Number} n * @return {Request} for chaining * @api public */ -RequestBase.prototype.redirects = function(n){ + +RequestBase.prototype.redirects = function (n) { this._maxRedirects = n; return this; }; - /** * Maximum size of buffered response body, in bytes. Counts uncompressed size. * Default 200MB. * - * @param {Number} n + * @param {Number} n number of bytes * @return {Request} for chaining */ -RequestBase.prototype.maxResponseSize = function(n){ - if ('number' !== typeof n) { - throw TypeError("Invalid argument"); + + +RequestBase.prototype.maxResponseSize = function (n) { + if (typeof n !== 'number') { + throw new TypeError('Invalid argument'); } + this._maxResponseSize = n; return this; }; - /** * Convert to a plain javascript object (not JSON string) of scalar properties. * Note as this method is designed to return a useful non-this value, @@ -5350,15 +6933,15 @@ RequestBase.prototype.maxResponseSize = function(n){ * @api public */ -RequestBase.prototype.toJSON = function() { + +RequestBase.prototype.toJSON = function () { return { method: this.method, url: this.url, data: this._data, - headers: this._header, + headers: this._header }; }; - /** * Send `data` as the request body, defaulting the `.type()` to "json" when * an object is given. @@ -5398,38 +6981,40 @@ RequestBase.prototype.toJSON = function() { * @return {Request} for chaining * @api public */ +// eslint-disable-next-line complexity + -RequestBase.prototype.send = function(data){ - var isObj = isObject(data); +RequestBase.prototype.send = function (data) { + var isObject_ = isObject(data); var type = this._header['content-type']; if (this._formData) { - console.error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); + throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); } - if (isObj && !this._data) { + if (isObject_ && !this._data) { if (Array.isArray(data)) { this._data = []; } else if (!this._isHost(data)) { this._data = {}; } } else if (data && this._data && this._isHost(this._data)) { - throw Error("Can't merge these send calls"); - } + throw new Error("Can't merge these send calls"); + } // merge + - // merge - if (isObj && isObject(this._data)) { + if (isObject_ && isObject(this._data)) { for (var key in data) { - this._data[key] = data[key]; + if (hasOwn(data, key)) this._data[key] = data[key]; } - } else if ('string' == typeof data) { + } else if (typeof data === 'string') { // default to x-www-form-urlencoded if (!type) this.type('form'); type = this._header['content-type']; - if ('application/x-www-form-urlencoded' == type) { - this._data = this._data - ? this._data + '&' + data - : data; + if (type) type = type.toLowerCase().trim(); + + if (type === 'application/x-www-form-urlencoded') { + this._data = this._data ? "".concat(this._data, "&").concat(data) : data; } else { this._data = (this._data || '') + data; } @@ -5437,15 +7022,14 @@ RequestBase.prototype.send = function(data){ this._data = data; } - if (!isObj || this._isHost(data)) { + if (!isObject_ || this._isHost(data)) { return this; - } + } // default to json + - // default to json if (!type) this.type('json'); return this; }; - /** * Sort `querystring` by the sort function * @@ -5474,117 +7058,109 @@ RequestBase.prototype.send = function(data){ * @api public */ -RequestBase.prototype.sortQuery = function(sort) { + +RequestBase.prototype.sortQuery = function (sort) { // _sort default to true but otherwise can be a function or boolean this._sort = typeof sort === 'undefined' ? true : sort; return this; }; - /** * Compose querystring to append to req.url * * @api private */ -RequestBase.prototype._finalizeQueryString = function(){ + + +RequestBase.prototype._finalizeQueryString = function () { var query = this._query.join('&'); + if (query) { - this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + query; + this.url += (this.url.includes('?') ? '&' : '?') + query; } + this._query.length = 0; // Makes the call idempotent if (this._sort) { var index = this.url.indexOf('?'); + if (index >= 0) { - var queryArr = this.url.substring(index + 1).split('&'); - if ('function' === typeof this._sort) { - queryArr.sort(this._sort); + var queryArray = this.url.slice(index + 1).split('&'); + + if (typeof this._sort === 'function') { + queryArray.sort(this._sort); } else { - queryArr.sort(); + queryArray.sort(); } - this.url = this.url.substring(0, index) + '?' + queryArr.join('&'); + + this.url = this.url.slice(0, index) + '?' + queryArray.join('&'); } } -}; +}; // For backwards compat only -// For backwards compat only -RequestBase.prototype._appendQueryString = function() {console.trace("Unsupported");} +RequestBase.prototype._appendQueryString = function () { + console.warn('Unsupported'); +}; /** * Invoke callback with timeout error. * * @api private */ -RequestBase.prototype._timeoutError = function(reason, timeout, errno){ + +RequestBase.prototype._timeoutError = function (reason, timeout, errno) { if (this._aborted) { return; } - var err = new Error(reason + timeout + 'ms exceeded'); - err.timeout = timeout; - err.code = 'ECONNABORTED'; - err.errno = errno; + + var error = new Error("".concat(reason + timeout, "ms exceeded")); + error.timeout = timeout; + error.code = 'ECONNABORTED'; + error.errno = errno; this.timedout = true; + this.timedoutError = error; this.abort(); - this.callback(err); + this.callback(error); }; -RequestBase.prototype._setTimeouts = function() { - var self = this; +RequestBase.prototype._setTimeouts = function () { + var self = this; // deadline - // deadline if (this._timeout && !this._timer) { - this._timer = setTimeout(function(){ + this._timer = setTimeout(function () { self._timeoutError('Timeout of ', self._timeout, 'ETIME'); }, this._timeout); - } - // response timeout + } // response timeout + + if (this._responseTimeout && !this._responseTimeoutTimer) { - this._responseTimeoutTimer = setTimeout(function(){ + this._responseTimeoutTimer = setTimeout(function () { self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT'); }, this._responseTimeout); } }; -},{"./is-object":18}],20:[function(require,module,exports){ -'use strict'; +}).call(this)}).call(this,require('_process')) +},{"./utils":29,"_process":7,"semver":2}],28:[function(require,module,exports){ +"use strict"; /** * Module dependencies. */ - var utils = require('./utils'); - /** * Expose `ResponseBase`. */ -module.exports = ResponseBase; +module.exports = ResponseBase; /** * Initialize a new `ResponseBase`. * * @api public */ -function ResponseBase(obj) { - if (obj) return mixin(obj); -} - -/** - * Mixin the prototype properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in ResponseBase.prototype) { - obj[key] = ResponseBase.prototype[key]; - } - return obj; -} - +function ResponseBase() {} /** * Get case-insensitive `field` value. * @@ -5593,10 +7169,10 @@ function mixin(obj) { * @api public */ -ResponseBase.prototype.get = function(field) { + +ResponseBase.prototype.get = function (field) { return this.header[field.toLowerCase()]; }; - /** * Set header related properties: * @@ -5609,30 +7185,29 @@ ResponseBase.prototype.get = function(field) { * @api private */ -ResponseBase.prototype._setHeaderProperties = function(header){ - // TODO: moar! - // TODO: make this a util - // content-type - var ct = header['content-type'] || ''; - this.type = utils.type(ct); +ResponseBase.prototype._setHeaderProperties = function (header) { + // TODO: moar! + // TODO: make this a util + // content-type + var ct = header['content-type'] || ''; + this.type = utils.type(ct); // params + + var parameters = utils.params(ct); - // params - var params = utils.params(ct); - for (var key in params) this[key] = params[key]; + for (var key in parameters) { + if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key]; + } - this.links = {}; + this.links = {}; // links - // links - try { - if (header.link) { - this.links = utils.parseLinks(header.link); - } - } catch (err) { - // ignore + try { + if (header.link) { + this.links = utils.parseLinks(header.link); } + } catch (_unused) {// ignore + } }; - /** * Set flags such as `.ok` based on `status`. * @@ -5654,37 +7229,42 @@ ResponseBase.prototype._setHeaderProperties = function(header){ * @api private */ -ResponseBase.prototype._setStatusProperties = function(status){ - var type = status / 100 | 0; - - // status / class - this.status = this.statusCode = status; - this.statusType = type; - - // basics - this.info = 1 == type; - this.ok = 2 == type; - this.redirect = 3 == type; - this.clientError = 4 == type; - this.serverError = 5 == type; - this.error = (4 == type || 5 == type) - ? this.toError() - : false; - - // sugar - this.created = 201 == status; - this.accepted = 202 == status; - this.noContent = 204 == status; - this.badRequest = 400 == status; - this.unauthorized = 401 == status; - this.notAcceptable = 406 == status; - this.forbidden = 403 == status; - this.notFound = 404 == status; - this.unprocessableEntity = 422 == status; -}; - -},{"./utils":21}],21:[function(require,module,exports){ -'use strict'; + +ResponseBase.prototype._setStatusProperties = function (status) { + var type = Math.trunc(status / 100); // status / class + + this.statusCode = status; + this.status = this.statusCode; + this.statusType = type; // basics + + this.info = type === 1; + this.ok = type === 2; + this.redirect = type === 3; + this.clientError = type === 4; + this.serverError = type === 5; + this.error = type === 4 || type === 5 ? this.toError() : false; // sugar + + this.created = status === 201; + this.accepted = status === 202; + this.noContent = status === 204; + this.badRequest = status === 400; + this.unauthorized = status === 401; + this.notAcceptable = status === 406; + this.forbidden = status === 403; + this.notFound = status === 404; + this.unprocessableEntity = status === 422; +}; + +},{"./utils":29}],29:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } /** * Return the mime type for the given `str`. @@ -5693,11 +7273,9 @@ ResponseBase.prototype._setStatusProperties = function(status){ * @return {String} * @api private */ - -exports.type = function(str){ - return str.split(/ *; */).shift(); +exports.type = function (string_) { + return string_.split(/ *; */).shift(); }; - /** * Return header field parameters. * @@ -5706,17 +7284,31 @@ exports.type = function(str){ * @api private */ -exports.params = function(str){ - return str.split(/ *; */).reduce(function(obj, str){ - var parts = str.split(/ *= */); - var key = parts.shift(); - var val = parts.shift(); - if (key && val) obj[key] = val; - return obj; - }, {}); -}; +exports.params = function (value) { + var object = {}; + + var _iterator = _createForOfIteratorHelper(value.split(/ *; */)), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var string_ = _step.value; + var parts = string_.split(/ *= */); + var key = parts.shift(); + + var _value = parts.shift(); + + if (key && _value) object[key] = _value; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + return object; +}; /** * Parse Link header fields. * @@ -5725,16 +7317,29 @@ exports.params = function(str){ * @api private */ -exports.parseLinks = function(str){ - return str.split(/ *, */).reduce(function(obj, str){ - var parts = str.split(/ *; */); - var url = parts[0].slice(1, -1); - var rel = parts[1].split(/ *= */)[1].slice(1, -1); - obj[rel] = url; - return obj; - }, {}); -}; +exports.parseLinks = function (value) { + var object = {}; + + var _iterator2 = _createForOfIteratorHelper(value.split(/ *, */)), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var string_ = _step2.value; + var parts = string_.split(/ *; */); + var url = parts[0].slice(1, -1); + var rel = parts[1].split(/ *= */)[1].slice(1, -1); + object[rel] = url; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + return object; +}; /** * Strip content related fields from `header`. * @@ -5743,26 +7348,65 @@ exports.parseLinks = function(str){ * @api private */ -exports.cleanHeader = function(header, changesOrigin){ + +exports.cleanHeader = function (header, changesOrigin) { delete header['content-type']; delete header['content-length']; delete header['transfer-encoding']; - delete header['host']; - // secuirty + delete header.host; // secuirty + if (changesOrigin) { - delete header['authorization']; - delete header['cookie']; + delete header.authorization; + delete header.cookie; } + return header; }; +/** + * Check if `obj` is an object. + * + * @param {Object} object + * @return {Boolean} + * @api private + */ + + +exports.isObject = function (object) { + return object !== null && _typeof(object) === 'object'; +}; +/** + * Object.hasOwn fallback/polyfill. + * + * @type {(object: object, property: string) => boolean} object + * @api private + */ + + +exports.hasOwn = Object.hasOwn || function (object, property) { + if (object == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + return Object.prototype.hasOwnProperty.call(new Object(object), property); +}; + +exports.mixin = function (target, source) { + for (var key in source) { + if (exports.hasOwn(source, key)) { + target[key] = source[key]; + } + } +}; },{}],"platformClient":[function(require,module,exports){ (function (global,Buffer){(function (){ 'use strict'; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } +var superagent = require('superagent'); -var superagent = _interopDefault(require('superagent')); +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var superagent__default = /*#__PURE__*/_interopDefaultLegacy(superagent); var PureCloudRegionHosts = { us_east_1: 'mypurecloud.com', @@ -6670,7 +8314,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { } } - function read$$1 (buf, i) { + function read (buf, i) { if (indexSize === 1) { return buf[i] } else { @@ -6682,7 +8326,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { if (dir) { var foundIndex = -1; for (i = byteOffset; i < arrLength; i++) { - if (read$$1(arr, i) === read$$1(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i; if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { @@ -6695,7 +8339,7 @@ function arrayIndexOf (arr, val, byteOffset, encoding, dir) { for (i = byteOffset; i >= 0; i--) { var found = true; for (var j = 0; j < valLength; j++) { - if (read$$1(arr, i + j) !== read$$1(val, j)) { + if (read(arr, i + j) !== read(val, j)) { found = false; break } @@ -6766,7 +8410,7 @@ function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } -Buffer.prototype.write = function write$$1 (string, offset, length, encoding) { +Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8'; @@ -7435,7 +9079,7 @@ function checkIEEE754 (buf, value, offset, ext, max, min) { function writeFloat (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); + checkIEEE754(buf, value, offset, 4); } write(buf, value, offset, littleEndian, 23, 4); return offset + 4 @@ -7451,7 +9095,7 @@ Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) function writeDouble (buf, value, offset, littleEndian, noAssert) { if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); + checkIEEE754(buf, value, offset, 8); } write(buf, value, offset, littleEndian, 52, 8); return offset + 8 @@ -7916,7 +9560,6 @@ class Configuration { const path = require('path'); this.configPath = path.join(os.homedir(), '.genesyscloudjavascript-guest', 'config'); } - this.live_reload_config = true; this.host; this.environment; @@ -7930,26 +9573,7 @@ class Configuration { liveLoadConfig() { // If in browser, don't read config file, use default values - if (typeof window !== 'undefined') { - this.configPath = ''; - return; - } - - this.updateConfigFromFile(); - - if (this.live_reload_config && this.live_reload_config === true) { - try { - const fs = require('fs'); - fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { - this.updateConfigFromFile(); - if (!this.live_reload_config) { - fs.unwatchFile(this.configPath); - } - }); - } catch (err) { - // do nothing - } - } + this.configPath = ''; } setConfigPath(path) { @@ -7960,24 +9584,6 @@ class Configuration { } updateConfigFromFile() { - const ConfigParser = require('configparser'); - var configparser = new ConfigParser(); - - try { - configparser.read(this.configPath); // If no error catched, indicates it's INI format - this.config = configparser; - } catch (error) { - if (error.name && error.name === 'MissingSectionHeaderError') { - // Not INI format, see if it's JSON format - const fs = require('fs'); - var configData = fs.readFileSync(this.configPath, 'utf8'); - this.config = { - _sections: JSON.parse(configData), // To match INI data format - }; - } - } - - if (this.config) this.updateConfigValues(); } updateConfigValues() { @@ -8043,7 +9649,7 @@ class Configuration { /** * @module purecloud-guest-chat-client/ApiClient - * @version 8.0.0 + * @version 8.1.0 */ class ApiClient { /** @@ -8159,7 +9765,7 @@ class ApiClient { this.settingsPrefix = 'purecloud'; // Expose superagent module for use with superagent-proxy - this.superagent = superagent; + this.superagent = superagent__default["default"]; if (typeof(window) !== 'undefined') window.ApiClient = this; } @@ -8504,7 +10110,7 @@ class ApiClient { */ callApi(path, httpMethod, pathParams, queryParams, headerParams, formParams, bodyParam, authNames, contentTypes, accepts) { var url = this.buildUrl(path, pathParams); - var request = superagent(httpMethod, url); + var request = superagent__default["default"](httpMethod, url); if (this.proxy && request.proxy) { request.proxy(this.proxy); @@ -8518,7 +10124,7 @@ class ApiClient { // set header parameters request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); - //request.set({ 'purecloud-sdk': '8.0.0' }); + //request.set({ 'purecloud-sdk': '8.1.0' }); // set request timeout request.timeout(this.timeout); @@ -8609,7 +10215,7 @@ class WebChatApi { /** * WebChat service. * @module purecloud-guest-chat-client/api/WebChatApi - * @version 8.0.0 + * @version 8.1.0 */ /** @@ -8988,7 +10594,7 @@ class WebChatApi { * *

* @module purecloud-guest-chat-client/index - * @version 8.0.0 + * @version 8.1.0 */ class platformClient { constructor() { @@ -9016,4 +10622,4 @@ var index = new platformClient(); module.exports = index; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"buffer":3,"configparser":12,"fs":1,"os":5,"path":6,"superagent":17}]},{},[]); +},{"buffer":3,"os":5,"path":6,"superagent":26}]},{},[]); diff --git a/build/dist/web-cjs/purecloud-guest-chat-client.min.js b/build/dist/web-cjs/purecloud-guest-chat-client.min.js index 999a98e9..bdaa0cfe 100644 --- a/build/dist/web-cjs/purecloud-guest-chat-client.min.js +++ b/build/dist/web-cjs/purecloud-guest-chat-client.min.js @@ -1 +1 @@ -require=function(){return function t(e,r,n){function i(s,a){if(!r[s]){if(!e[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var f=r[s]={exports:{}};e[s][0].call(f.exports,function(t){return i(e[s][1][t]||t)},f,f.exports,t,e,r,n)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s0?s-4:s;for(r=0;r>16&255,u[f++]=e>>8&255,u[f++]=255&e;2===a&&(e=i[t.charCodeAt(r)]<<2|i[t.charCodeAt(r+1)]>>4,u[f++]=255&e);1===a&&(e=i[t.charCodeAt(r)]<<10|i[t.charCodeAt(r+1)]<<4|i[t.charCodeAt(r+2)]>>2,u[f++]=e>>8&255,u[f++]=255&e);return u},r.fromByteArray=function(t){for(var e,r=t.length,i=r%3,o=[],s=0,a=r-i;sa?a:s+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,r){for(var i,o,s=[],a=e;a>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],3:[function(t,e,r){(function(e){(function(){"use strict";var e=t("base64-js"),n=t("ieee754");r.Buffer=s,r.SlowBuffer=function(t){+t!=t&&(t=0);return s.alloc(+t)},r.INSPECT_MAX_BYTES=50;var i=2147483647;function o(t){if(t>i)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=s.prototype,e}function s(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return h(t)}return a(t,e,r)}function a(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!s.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|l(t,e),n=o(r),i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return f(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(q(t,ArrayBuffer)||t&&q(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|t}function l(t,e){if(s.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||q(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return j(t).length;default:if(i)return n?-1:k(t).length;e=(""+e).toLowerCase(),i=!0}}function p(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),N(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=s.from(e,n)),s.isBuffer(e))return 0===e.length?-1:d(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):d(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function d(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function h(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var f=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var c=!0,l=0;li&&(n=i):n=i;var o=e.length;n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,r,n){return 0===r&&n===t.length?e.fromByteArray(t):e.fromByteArray(t.slice(r,n))}function T(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:h>223?3:h>191?2:1;if(i+c<=r)switch(c){case 1:h<128&&(f=h);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&h)<<6|63&o)>127&&(f=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&h)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&h)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,c=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=c}return function(t){var e=t.length;if(e<=A)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return C(this,e,r);case"latin1":case"binary":return S(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},s.prototype.toLocaleString=s.prototype.toString,s.prototype.equals=function(t){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===s.compare(this,t)},s.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),""},s.prototype.compare=function(t,e,r,n,i){if(q(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var o=i-n,a=r-e,u=Math.min(o,a),h=this.slice(n,i),f=t.slice(e,r),c=0;c>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return y(this,t,e,r);case"utf8":case"utf-8":return m(this,t,e,r);case"ascii":return v(this,t,e,r);case"latin1":case"binary":return w(this,t,e,r);case"base64":return b(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function I(t,e,r,n,i,o){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function O(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function B(t,e,r,i,o){return e=+e,r>>>=0,o||O(t,0,r,4),n.write(t,e,r,i,23,4),r+4}function M(t,e,r,i,o){return e=+e,r>>>=0,o||O(t,0,r,8),n.write(t,e,r,i,52,8),r+8}s.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||P(t,e,this.length);for(var n=this[t],i=1,o=0;++o>>=0,e>>>=0,r||P(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},s.prototype.readUInt8=function(t,e){return t>>>=0,e||P(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,e){return t>>>=0,e||P(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,e){return t>>>=0,e||P(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,e){return t>>>=0,e||P(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,e){return t>>>=0,e||P(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||P(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},s.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||P(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},s.prototype.readInt8=function(t,e){return t>>>=0,e||P(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,e){t>>>=0,e||P(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(t,e){t>>>=0,e||P(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(t,e){return t>>>=0,e||P(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,e){return t>>>=0,e||P(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,e){return t>>>=0,e||P(t,4,this.length),n.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,e){return t>>>=0,e||P(t,4,this.length),n.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,e){return t>>>=0,e||P(t,8,this.length),n.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,e){return t>>>=0,e||P(t,8,this.length),n.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||I(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,n)||I(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},s.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,1,255,0),this[e]=255&t,e+1},s.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},s.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},s.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},s.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},s.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},s.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||I(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeFloatLE=function(t,e,r){return B(this,t,e,!0,r)},s.prototype.writeFloatBE=function(t,e,r){return B(this,t,e,!1,r)},s.prototype.writeDoubleLE=function(t,e,r){return M(this,t,e,!0,r)},s.prototype.writeDoubleBE=function(t,e,r){return M(this,t,e,!1,r)},s.prototype.copy=function(t,e,r,n){if(!s.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},s.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!s.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function j(t){return e.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(U,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function D(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function q(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function N(t){return t!=t}}).call(this)}).call(this,t("buffer").Buffer)},{"base64-js":2,buffer:3,ieee754:4}],4:[function(t,e,r){r.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,f=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+c],c+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+c],c+=l,f-=8);if(0===o)o=1-h;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=h}return(p?-1:1)*s*Math.pow(2,o-n)},r.write=function(t,e,r,n,i,o){var s,a,u,h=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+c>=1?l/u:l*Math.pow(2,1-c))*u>=2&&(s++,u/=2),s+c>=f?(a=0,s=f):s+c>=1?(a=(e*u-1)*Math.pow(2,i),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,h-=8);t[r+p-g]|=128*d}},{}],5:[function(t,e,r){r.endianness=function(){return"LE"},r.hostname=function(){return"undefined"!=typeof location?location.hostname:""},r.loadavg=function(){return[]},r.uptime=function(){return 0},r.freemem=function(){return Number.MAX_VALUE},r.totalmem=function(){return Number.MAX_VALUE},r.cpus=function(){return[]},r.type=function(){return"Browser"},r.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},r.networkInterfaces=r.getNetworkInterfaces=function(){return{}},r.arch=function(){return"javascript"},r.platform=function(){return"browser"},r.tmpdir=r.tmpDir=function(){return"/tmp"},r.EOL="\n",r.homedir=function(){return"/"}},{}],6:[function(t,e,r){(function(t){(function(){function e(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n=-1&&!i;o--){var s=o>=0?arguments[o]:t.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(r=s+"/"+r,i="/"===s.charAt(0))}return r=e(n(r.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+r||"."},r.normalize=function(t){var o=r.isAbsolute(t),s="/"===i(t,-1);return(t=e(n(t.split("/"),function(t){return!!t}),!o).join("/"))||o||(t="."),t&&s&&(t+="/"),(o?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function n(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var i=n(t.split("/")),o=n(e.split("/")),s=Math.min(i.length,o.length),a=s,u=0;u=1;--o)if(47===(e=t.charCodeAt(o))){if(!i){n=o;break}}else i=!1;return-1===n?r?"/":".":r&&1===n?"/":t.slice(0,n)},r.basename=function(t,e){var r=function(t){"string"!=typeof t&&(t+="");var e,r=0,n=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){r=e+1;break}}else-1===n&&(i=!1,n=e+1);return-1===n?"":t.slice(r,n)}(t);return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},r.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,r=0,n=-1,i=!0,o=0,s=t.length-1;s>=0;--s){var a=t.charCodeAt(s);if(47!==a)-1===n&&(i=!1,n=s+1),46===a?-1===e?e=s:1!==o&&(o=1):-1!==e&&(o=-1);else if(!i){r=s+1;break}}return-1===e||-1===n||0===o||1===o&&e===n-1&&e===r+1?"":t.slice(e,n)};var i="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(this)}).call(this,t("_process"))},{_process:7}],7:[function(t,e,r){var n,i,o=e.exports={};function s(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function u(t){if(n===setTimeout)return setTimeout(t,0);if((n===s||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:s}catch(t){n=s}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(t){i=a}}();var h,f=[],c=!1,l=-1;function p(){c&&h&&(c=!1,h.length?f=h.concat(f):l=-1,f.length&&g())}function g(){if(!c){var t=u(p);c=!0;for(var e=f.length;e;){for(h=f,f=[];++l1)for(var r=1;r=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),u=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(e)?n.showHidden=e:e&&r._extend(n,e),v(n.showHidden)&&(n.showHidden=!1),v(n.depth)&&(n.depth=2),v(n.colors)&&(n.colors=!1),v(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=u),f(n,t,n.depth)}function u(t,e){var r=a.styles[e];return r?"["+a.colors[r][0]+"m"+t+"["+a.colors[r][1]+"m":t}function h(t,e){return t}function f(t,e,n){if(t.customInspect&&e&&T(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(n,t);return m(i)||(i=f(t,i,n)),i}var o=function(t,e){if(v(e))return t.stylize("undefined","undefined");if(m(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(y(e))return t.stylize(""+e,"number");if(g(e))return t.stylize(""+e,"boolean");if(d(e))return t.stylize("null","null")}(t,e);if(o)return o;var s=Object.keys(e),a=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(s);if(t.showHidden&&(s=Object.getOwnPropertyNames(e)),E(e)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return c(e);if(0===s.length){if(T(e)){var u=e.name?": "+e.name:"";return t.stylize("[Function"+u+"]","special")}if(w(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(_(e))return t.stylize(Date.prototype.toString.call(e),"date");if(E(e))return c(e)}var h,b="",A=!1,C=["{","}"];(p(e)&&(A=!0,C=["[","]"]),T(e))&&(b=" [Function"+(e.name?": "+e.name:"")+"]");return w(e)&&(b=" "+RegExp.prototype.toString.call(e)),_(e)&&(b=" "+Date.prototype.toUTCString.call(e)),E(e)&&(b=" "+c(e)),0!==s.length||A&&0!=e.length?n<0?w(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),h=A?function(t,e,r,n,i){for(var o=[],s=0,a=e.length;s=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(h,b,C)):C[0]+b+C[1]}function c(t){return"["+Error.prototype.toString.call(t)+"]"}function l(t,e,r,n,i,o){var s,a,u;if((u=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?a=u.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):u.set&&(a=t.stylize("[Setter]","special")),R(n,i)||(s="["+i+"]"),a||(t.seen.indexOf(u.value)<0?(a=d(r)?f(t,u.value,null):f(t,u.value,r-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+a.split("\n").map(function(t){return" "+t}).join("\n")):a=t.stylize("[Circular]","special")),v(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=t.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=t.stylize(s,"string"))}return s+": "+a}function p(t){return Array.isArray(t)}function g(t){return"boolean"==typeof t}function d(t){return null===t}function y(t){return"number"==typeof t}function m(t){return"string"==typeof t}function v(t){return void 0===t}function w(t){return b(t)&&"[object RegExp]"===A(t)}function b(t){return"object"==typeof t&&null!==t}function _(t){return b(t)&&"[object Date]"===A(t)}function E(t){return b(t)&&("[object Error]"===A(t)||t instanceof Error)}function T(t){return"function"==typeof t}function A(t){return Object.prototype.toString.call(t)}function C(t){return t<10?"0"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(v(o)&&(o=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!s[t])if(new RegExp("\\b"+t+"\\b","i").test(o)){var n=e.pid;s[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else s[t]=function(){};return s[t]},r.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=g,r.isNull=d,r.isNullOrUndefined=function(t){return null==t},r.isNumber=y,r.isString=m,r.isSymbol=function(t){return"symbol"==typeof t},r.isUndefined=v,r.isRegExp=w,r.isObject=b,r.isDate=_,r.isError=E,r.isFunction=T,r.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},r.isBuffer=t("./support/isBuffer");var S=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function R(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log("%s - %s",(t=new Date,e=[C(t.getHours()),C(t.getMinutes()),C(t.getSeconds())].join(":"),[t.getDate(),S[t.getMonth()],e].join(" ")),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":9,_process:7,inherits:8}],11:[function(t,e,r){function n(t){if(t)return function(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}(t)}void 0!==e&&(e.exports=n),n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var i=0;i{if(!e||e.match(c))return;let i=h.exec(e);if(i){const t=i[1];r={},this._sections[t]=r}else{if(!r)throw new a.MissingSectionHeaderError(t,n,e);if(!(i=f.exec(e)))throw new a.ParseError(t,n,e);{const t=i[1];r[t]=i[2]}}})}function v(){let t,e="";for(t in this._sections){if(!this._sections.hasOwnProperty(t))continue;e+="["+t+"]\n";const r=this._sections[t];let n;for(n in r){if(!r.hasOwnProperty(n))continue;e+=n+"="+r[n]+"\n"}e+="\n"}return e}y.prototype.sections=function(){return Object.keys(this._sections)},y.prototype.addSection=function(t){if(this._sections.hasOwnProperty(t))throw new a.DuplicateSectionError(t);this._sections[t]={}},y.prototype.hasSection=function(t){return this._sections.hasOwnProperty(t)},y.prototype.keys=function(t){try{return Object.keys(this._sections[t])}catch(e){throw new a.NoSectionError(t)}},y.prototype.hasKey=function(t,e){return this._sections.hasOwnProperty(t)&&this._sections[t].hasOwnProperty(e)},y.prototype.read=function(t){const e=i.readFileSync(t).toString("utf8").split(l);m.call(this,t,e)},y.prototype.readAsync=async function(t){const e=(await p(t)).toString("utf8").split(l);m.call(this,t,e)},y.prototype.get=function(t,e,r){if(this._sections.hasOwnProperty(t))return r?this._sections[t][e]:u.interpolate(this,t,e)},y.prototype.getInt=function(t,e,r){if(this._sections.hasOwnProperty(t))return r||(r=10),parseInt(this._sections[t][e],r)},y.prototype.getFloat=function(t,e){if(this._sections.hasOwnProperty(t))return parseFloat(this._sections[t][e])},y.prototype.items=function(t){return this._sections[t]},y.prototype.set=function(t,e,r){this._sections.hasOwnProperty(t)&&(this._sections[t][e]=r)},y.prototype.removeKey=function(t,e){return!(!this._sections.hasOwnProperty(t)||!this._sections[t].hasOwnProperty(e))&&delete this._sections[t][e]},y.prototype.removeSection=function(t){return!!this._sections.hasOwnProperty(t)&&delete this._sections[t]},y.prototype.write=function(t,e=!1){if(e){const e=o.dirname(t);s.sync(e)}i.writeFileSync(t,v.call(this))},y.prototype.writeAsync=async function(t,e=!1){if(e){const e=o.dirname(t);await d(e)}await g(t,v.call(this))},e.exports=y},{"./errors":13,"./interpolation":14,fs:1,mkdirp:15,path:6,util:10}],13:[function(t,e,r){e.exports={DuplicateSectionError:function(t){this.name="DuplicateSectionError",this.message=t+" already exists",Error.captureStackTrace(this,this.constructor)},NoSectionError:function(t){this.name=this.constructor.name,this.message="Section "+t+" does not exist.",Error.captureStackTrace(this,this.constructor)},ParseError:function(t,e,r){this.name=this.constructor.name,this.message="Source contains parsing errors.\nfile: "+t+" line: "+e+"\n"+r,Error.captureStackTrace(this,this.constructor)},MissingSectionHeaderError:function(t,e,r){this.name=this.constructor.name,this.message="File contains no section headers.\nfile: "+t+" line: "+e+"\n"+r,Error.captureStackTrace(this,this.constructor)},MaximumInterpolationDepthError:function(t,e,r,n){this.name=this.constructor.name,this.message="Exceeded Maximum Recursion Depth ("+n+") for key "+e+" in section "+t+"\nvalue: "+r,Error.captureStackTrace(this,this.constructor)}}},{}],14:[function(t,e,r){const n=t("./errors"),i=new RegExp(/%\(([\w-]+)\)s/),o=50;e.exports={interpolate:function(t,e,r){return function t(e,r,s,a){let u=e.get(r,s,!0);if(a>o)throw new n.MaximumInterpolationDepthError(r,s,u,o);let h=i.exec(u);for(;null!==h;){const n=h[1],o=t(e,r,n,a+1);u=u.substr(0,h.index)+o+u.substr(h.index+h[0].length),h=i.exec(u)}return u}(t,e,r,1)},MAXIMUM_INTERPOLATION_DEPTH:o}},{"./errors":13}],15:[function(t,e,r){var n=t("path"),i=t("fs"),o=parseInt("0777",8);function s(t,e,r,a){"function"==typeof e?(r=e,e={}):e&&"object"==typeof e||(e={mode:e});var u=e.mode,h=e.fs||i;void 0===u&&(u=o),a||(a=null);var f=r||function(){};t=n.resolve(t),h.mkdir(t,u,function(r){if(!r)return f(null,a=a||t);switch(r.code){case"ENOENT":if(n.dirname(t)===t)return f(r);s(n.dirname(t),e,function(r,n){r?f(r,n):s(t,e,f,n)});break;default:h.stat(t,function(t,e){t||!e.isDirectory()?f(r,a):f(null,a)})}})}e.exports=s.mkdirp=s.mkdirP=s,s.sync=function t(e,r,s){r&&"object"==typeof r||(r={mode:r});var a=r.mode,u=r.fs||i;void 0===a&&(a=o),s||(s=null),e=n.resolve(e);try{u.mkdirSync(e,a),s=s||e}catch(i){switch(i.code){case"ENOENT":t(e,r,s=t(n.dirname(e),r,s));break;default:var h;try{h=u.statSync(e)}catch(t){throw i}if(!h.isDirectory())throw i}}return s}},{fs:1,path:6}],16:[function(t,e,r){function n(){this._defaults=[]}["use","on","once","set","query","type","accept","auth","withCredentials","sortQuery","retry","ok","redirects","timeout","buffer","serialize","parse","ca","key","pfx","cert"].forEach(function(t){n.prototype[t]=function(){return this._defaults.push({fn:t,arguments:arguments}),this}}),n.prototype._setDefaults=function(t){this._defaults.forEach(function(e){t[e.fn].apply(t,e.arguments)})},e.exports=n},{}],17:[function(t,e,r){var n;"undefined"!=typeof window?n=window:"undefined"!=typeof self?n=self:(console.warn("Using browser-only version of superagent in non-browser environment"),n=this);var i=t("component-emitter"),o=t("./request-base"),s=t("./is-object"),a=t("./response-base"),u=t("./agent-base");function h(){}var f=r=e.exports=function(t,e){return"function"==typeof e?new r.Request("GET",t).end(e):1==arguments.length?new r.Request("GET",t):new r.Request(t,e)};r.Request=m,f.getXHR=function(){if(!(!n.XMLHttpRequest||n.location&&"file:"==n.location.protocol&&n.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(t){}throw Error("Browser-only version of superagent could not find XHR")};var c="".trim?function(t){return t.trim()}:function(t){return t.replace(/(^\s*|\s*$)/g,"")};function l(t){if(!s(t))return t;var e=[];for(var r in t)p(e,r,t[r]);return e.join("&")}function p(t,e,r){if(null!=r)if(Array.isArray(r))r.forEach(function(r){p(t,e,r)});else if(s(r))for(var n in r)p(t,e+"["+n+"]",r[n]);else t.push(encodeURIComponent(e)+"="+encodeURIComponent(r));else null===r&&t.push(encodeURIComponent(e))}function g(t){for(var e,r,n={},i=t.split("&"),o=0,s=i.length;o=2&&t._responseTimeoutTimer&&clearTimeout(t._responseTimeoutTimer),4==r){var n;try{n=e.status}catch(t){n=0}if(!n){if(t.timedout||t._aborted)return;return t.crossDomainError()}t.emit("end")}};var n=function(e,r){r.total>0&&(r.percent=r.loaded/r.total*100),r.direction=e,t.emit("progress",r)};if(this.hasListeners("progress"))try{e.onprogress=n.bind(null,"download"),e.upload&&(e.upload.onprogress=n.bind(null,"upload"))}catch(t){}try{this.username&&this.password?e.open(this.method,this.url,!0,this.username,this.password):e.open(this.method,this.url,!0)}catch(t){return this.callback(t)}if(this._withCredentials&&(e.withCredentials=!0),!this._formData&&"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof r&&!this._isHost(r)){var i=this._header["content-type"],o=this._serializer||f.serialize[i?i.split(";")[0]:""];!o&&d(i)&&(o=f.serialize["application/json"]),o&&(r=o(r))}for(var s in this.header)null!=this.header[s]&&this.header.hasOwnProperty(s)&&e.setRequestHeader(s,this.header[s]);return this._responseType&&(e.responseType=this._responseType),this.emit("request",this),e.send(void 0!==r?r:null),this},f.agent=function(){return new u},["GET","POST","OPTIONS","PATCH","PUT","DELETE"].forEach(function(t){u.prototype[t.toLowerCase()]=function(e,r){var n=new f.Request(t,e);return this._setDefaults(n),r&&n.end(r),n}}),u.prototype.del=u.prototype.delete,f.get=function(t,e,r){var n=f("GET",t);return"function"==typeof e&&(r=e,e=null),e&&n.query(e),r&&n.end(r),n},f.head=function(t,e,r){var n=f("HEAD",t);return"function"==typeof e&&(r=e,e=null),e&&n.query(e),r&&n.end(r),n},f.options=function(t,e,r){var n=f("OPTIONS",t);return"function"==typeof e&&(r=e,e=null),e&&n.send(e),r&&n.end(r),n},f.del=v,f.delete=v,f.patch=function(t,e,r){var n=f("PATCH",t);return"function"==typeof e&&(r=e,e=null),e&&n.send(e),r&&n.end(r),n},f.post=function(t,e,r){var n=f("POST",t);return"function"==typeof e&&(r=e,e=null),e&&n.send(e),r&&n.end(r),n},f.put=function(t,e,r){var n=f("PUT",t);return"function"==typeof e&&(r=e,e=null),e&&n.send(e),r&&n.end(r),n}},{"./agent-base":16,"./is-object":18,"./request-base":19,"./response-base":20,"component-emitter":11}],18:[function(t,e,r){"use strict";e.exports=function(t){return null!==t&&"object"==typeof t}},{}],19:[function(t,e,r){"use strict";var n=t("./is-object");function i(t){if(t)return function(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}(t)}e.exports=i,i.prototype.clearTimeout=function(){return clearTimeout(this._timer),clearTimeout(this._responseTimeoutTimer),delete this._timer,delete this._responseTimeoutTimer,this},i.prototype.parse=function(t){return this._parser=t,this},i.prototype.responseType=function(t){return this._responseType=t,this},i.prototype.serialize=function(t){return this._serializer=t,this},i.prototype.timeout=function(t){if(!t||"object"!=typeof t)return this._timeout=t,this._responseTimeout=0,this;for(var e in t)switch(e){case"deadline":this._timeout=t.deadline;break;case"response":this._responseTimeout=t.response;break;default:console.warn("Unknown timeout option",e)}return this},i.prototype.retry=function(t,e){return 0!==arguments.length&&!0!==t||(t=1),t<=0&&(t=0),this._maxRetries=t,this._retries=0,this._retryCallback=e,this};var o=["ECONNRESET","ETIMEDOUT","EADDRINFO","ESOCKETTIMEDOUT"];i.prototype._shouldRetry=function(t,e){if(!this._maxRetries||this._retries++>=this._maxRetries)return!1;if(this._retryCallback)try{var r=this._retryCallback(t,e);if(!0===r)return!0;if(!1===r)return!1}catch(t){console.error(t)}if(e&&e.status&&e.status>=500&&501!=e.status)return!0;if(t){if(t.code&&~o.indexOf(t.code))return!0;if(t.timeout&&"ECONNABORTED"==t.code)return!0;if(t.crossDomain)return!0}return!1},i.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this._end()},i.prototype.then=function(t,e){if(!this._fullfilledPromise){var r=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(function(t,e){r.end(function(r,n){r?e(r):t(n)})})}return this._fullfilledPromise.then(t,e)},i.prototype.catch=function(t){return this.then(void 0,t)},i.prototype.use=function(t){return t(this),this},i.prototype.ok=function(t){if("function"!=typeof t)throw Error("Callback required");return this._okCallback=t,this},i.prototype._isResponseOK=function(t){return!!t&&(this._okCallback?this._okCallback(t):t.status>=200&&t.status<300)},i.prototype.get=function(t){return this._header[t.toLowerCase()]},i.prototype.getHeader=i.prototype.get,i.prototype.set=function(t,e){if(n(t)){for(var r in t)this.set(r,t[r]);return this}return this._header[t.toLowerCase()]=e,this.header[t]=e,this},i.prototype.unset=function(t){return delete this._header[t.toLowerCase()],delete this.header[t],this},i.prototype.field=function(t,e){if(null===t||void 0===t)throw new Error(".field(name, val) name can not be empty");if(this._data&&console.error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"),n(t)){for(var r in t)this.field(r,t[r]);return this}if(Array.isArray(e)){for(var i in e)this.field(t,e[i]);return this}if(null===e||void 0===e)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof e&&(e=""+e),this._getFormData().append(t,e),this},i.prototype.abort=function(){return this._aborted?this:(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req&&this.req.abort(),this.clearTimeout(),this.emit("abort"),this)},i.prototype._auth=function(t,e,r,n){switch(r.type){case"basic":this.set("Authorization","Basic "+n(t+":"+e));break;case"auto":this.username=t,this.password=e;break;case"bearer":this.set("Authorization","Bearer "+t)}return this},i.prototype.withCredentials=function(t){return void 0==t&&(t=!0),this._withCredentials=t,this},i.prototype.redirects=function(t){return this._maxRedirects=t,this},i.prototype.maxResponseSize=function(t){if("number"!=typeof t)throw TypeError("Invalid argument");return this._maxResponseSize=t,this},i.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},i.prototype.send=function(t){var e=n(t),r=this._header["content-type"];if(this._formData&&console.error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"),e&&!this._data)Array.isArray(t)?this._data=[]:this._isHost(t)||(this._data={});else if(t&&this._data&&this._isHost(this._data))throw Error("Can't merge these send calls");if(e&&n(this._data))for(var i in t)this._data[i]=t[i];else"string"==typeof t?(r||this.type("form"),r=this._header["content-type"],this._data="application/x-www-form-urlencoded"==r?this._data?this._data+"&"+t:t:(this._data||"")+t):this._data=t;return!e||this._isHost(t)?this:(r||this.type("json"),this)},i.prototype.sortQuery=function(t){return this._sort=void 0===t||t,this},i.prototype._finalizeQueryString=function(){var t=this._query.join("&");if(t&&(this.url+=(this.url.indexOf("?")>=0?"&":"?")+t),this._query.length=0,this._sort){var e=this.url.indexOf("?");if(e>=0){var r=this.url.substring(e+1).split("&");"function"==typeof this._sort?r.sort(this._sort):r.sort(),this.url=this.url.substring(0,e)+"?"+r.join("&")}}},i.prototype._appendQueryString=function(){console.trace("Unsupported")},i.prototype._timeoutError=function(t,e,r){if(!this._aborted){var n=new Error(t+e+"ms exceeded");n.timeout=e,n.code="ECONNABORTED",n.errno=r,this.timedout=!0,this.abort(),this.callback(n)}},i.prototype._setTimeouts=function(){var t=this;this._timeout&&!this._timer&&(this._timer=setTimeout(function(){t._timeoutError("Timeout of ",t._timeout,"ETIME")},this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout(function(){t._timeoutError("Response timeout of ",t._responseTimeout,"ETIMEDOUT")},this._responseTimeout))}},{"./is-object":18}],20:[function(t,e,r){"use strict";var n=t("./utils");function i(t){if(t)return function(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}(t)}e.exports=i,i.prototype.get=function(t){return this.header[t.toLowerCase()]},i.prototype._setHeaderProperties=function(t){var e=t["content-type"]||"";this.type=n.type(e);var r=n.params(e);for(var i in r)this[i]=r[i];this.links={};try{t.link&&(this.links=n.parseLinks(t.link))}catch(t){}},i.prototype._setStatusProperties=function(t){var e=t/100|0;this.status=this.statusCode=t,this.statusType=e,this.info=1==e,this.ok=2==e,this.redirect=3==e,this.clientError=4==e,this.serverError=5==e,this.error=(4==e||5==e)&&this.toError(),this.created=201==t,this.accepted=202==t,this.noContent=204==t,this.badRequest=400==t,this.unauthorized=401==t,this.notAcceptable=406==t,this.forbidden=403==t,this.notFound=404==t,this.unprocessableEntity=422==t}},{"./utils":21}],21:[function(t,e,r){"use strict";r.type=function(t){return t.split(/ *; */).shift()},r.params=function(t){return t.split(/ *; */).reduce(function(t,e){var r=e.split(/ *= */),n=r.shift(),i=r.shift();return n&&i&&(t[n]=i),t},{})},r.parseLinks=function(t){return t.split(/ *, */).reduce(function(t,e){var r=e.split(/ *; */),n=r[0].slice(1,-1);return t[r[1].split(/ *= */)[1].slice(1,-1)]=n,t},{})},r.cleanHeader=function(t,e){return delete t["content-type"],delete t["content-length"],delete t["transfer-encoding"],delete t.host,e&&(delete t.authorization,delete t.cookie),t}},{}],platformClient:[function(t,e,r){(function(r,n){(function(){"use strict";var n,i=(n=t("superagent"))&&"object"==typeof n&&"default"in n?n.default:n,o={us_east_1:"mypurecloud.com",eu_west_1:"mypurecloud.ie",ap_southeast_2:"mypurecloud.com.au",ap_northeast_1:"mypurecloud.jp",eu_central_1:"mypurecloud.de",us_west_2:"usw2.pure.cloud",ca_central_1:"cac1.pure.cloud",ap_northeast_2:"apne2.pure.cloud",eu_west_2:"euw2.pure.cloud",ap_south_1:"aps1.pure.cloud",us_east_2:"use2.us-gov-pure.cloud"},s=void 0!==r?r:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},a=[],u=[],h="undefined"!=typeof Uint8Array?Uint8Array:Array,f=!1;function c(){f=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,r=t.length;e>18&63]+a[i>>12&63]+a[i>>6&63]+a[63&i]);return o.join("")}function p(t){var e;f||c();for(var r=t.length,n=r%3,i="",o=[],s=0,u=r-n;su?u:s+16383));return 1===n?(e=t[r-1],i+=a[e>>2],i+=a[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=a[e>>10],i+=a[e>>4&63],i+=a[e<<2&63],i+="="),o.push(i),o.join("")}function g(t,e,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,f=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,o=p&(1<<-f)-1,p>>=-f,f+=a;f>0;o=256*o+t[e+c],c+=l,f-=8);for(s=o&(1<<-f)-1,o>>=-f,f+=n;f>0;s=256*s+t[e+c],c+=l,f-=8);if(0===o)o=1-h;else{if(o===u)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=h}return(p?-1:1)*s*Math.pow(2,o-n)}function d(t,e,r,n,i,o){var s,a,u,h=8*o-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,g=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=f):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+c>=1?l/u:l*Math.pow(2,1-c))*u>=2&&(s++,u/=2),s+c>=f?(a=0,s=f):s+c>=1?(a=(e*u-1)*Math.pow(2,i),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=g,a/=256,i-=8);for(s=s<0;t[r+p]=255&s,p+=g,s/=256,h-=8);t[r+p-g]|=128*d}var y={}.toString,m=Array.isArray||function(t){return"[object Array]"==y.call(t)};function v(){return b.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function w(t,e){if(v()=v())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+v().toString(16)+" bytes");return 0|t}function S(t){return!(null==t||!t._isBuffer)}function R(t,e){if(S(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Z(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return tt(t).length;default:if(n)return Z(t).length;e=(""+e).toLowerCase(),n=!0}}function x(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function P(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=b.from(e,n)),S(e))return 0===e.length?-1:I(t,e,r,n,i);if("number"==typeof e)return e&=255,b.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):I(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function I(t,e,r,n,i){var o,s=1,a=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,u/=2,r/=2}function h(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var f=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var c=!0,l=0;li&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function j(t,e,r){return 0===e&&r===t.length?p(t):p(t.slice(e,r))}function D(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:h>223?3:h>191?2:1;if(i+c<=r)switch(c){case 1:h<128&&(f=h);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&h)<<6|63&o)>127&&(f=u);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(u=(15&h)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&h)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,c=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=c}return function(t){var e=t.length;if(e<=q)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return G(this,e,r);case"utf8":case"utf-8":return D(this,e,r);case"ascii":return N(this,e,r);case"latin1":case"binary":return z(this,e,r);case"base64":return j(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return W(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},b.prototype.equals=function(t){if(!S(t))throw new TypeError("Argument must be a Buffer");return this===t||0===b.compare(this,t)},b.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),""},b.prototype.compare=function(t,e,r,n,i){if(!S(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var o=i-n,s=r-e,a=Math.min(o,s),u=this.slice(n,i),h=t.slice(e,r),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return O(this,t,e,r);case"utf8":case"utf-8":return B(this,t,e,r);case"ascii":return M(this,t,e,r);case"latin1":case"binary":return U(this,t,e,r);case"base64":return L(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},b.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var q=4096;function N(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",o=e;or)throw new RangeError("Trying to access beyond buffer length")}function Y(t,e,r,n,i,o){if(!S(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function H(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function $(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function J(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function K(t,e,r,n,i){return i||J(t,0,r,4),d(t,e,r,n,23,4),r+4}function X(t,e,r,n,i){return i||J(t,0,r,8),d(t,e,r,n,52,8),r+8}b.prototype.slice=function(t,e){var r,n=this.length;if(t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},b.prototype.readUInt8=function(t,e){return e||F(t,1,this.length),this[t]},b.prototype.readUInt16LE=function(t,e){return e||F(t,2,this.length),this[t]|this[t+1]<<8},b.prototype.readUInt16BE=function(t,e){return e||F(t,2,this.length),this[t]<<8|this[t+1]},b.prototype.readUInt32LE=function(t,e){return e||F(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},b.prototype.readUInt32BE=function(t,e){return e||F(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},b.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||F(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},b.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||F(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},b.prototype.readInt8=function(t,e){return e||F(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},b.prototype.readInt16LE=function(t,e){e||F(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},b.prototype.readInt16BE=function(t,e){e||F(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},b.prototype.readInt32LE=function(t,e){return e||F(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},b.prototype.readInt32BE=function(t,e){return e||F(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},b.prototype.readFloatLE=function(t,e){return e||F(t,4,this.length),g(this,t,!0,23,4)},b.prototype.readFloatBE=function(t,e){return e||F(t,4,this.length),g(this,t,!1,23,4)},b.prototype.readDoubleLE=function(t,e){return e||F(t,8,this.length),g(this,t,!0,52,8)},b.prototype.readDoubleBE=function(t,e){return e||F(t,8,this.length),g(this,t,!1,52,8)},b.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||Y(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+r},b.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,1,255,0),b.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},b.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,2,65535,0),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},b.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,2,65535,0),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},b.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,4,4294967295,0),b.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):$(this,t,e,!0),e+4},b.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,4,4294967295,0),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):$(this,t,e,!1),e+4},b.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);Y(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+r},b.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);Y(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},b.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,1,127,-128),b.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},b.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,2,32767,-32768),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):H(this,t,e,!0),e+2},b.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,2,32767,-32768),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):H(this,t,e,!1),e+2},b.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,4,2147483647,-2147483648),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):$(this,t,e,!0),e+4},b.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||Y(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):$(this,t,e,!1),e+4},b.prototype.writeFloatLE=function(t,e,r){return K(this,t,e,!0,r)},b.prototype.writeFloatBE=function(t,e,r){return K(this,t,e,!1,r)},b.prototype.writeDoubleLE=function(t,e,r){return X(this,t,e,!0,r)},b.prototype.writeDoubleBE=function(t,e,r){return X(this,t,e,!1,r)},b.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(o<1e3||!b.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function tt(t){return function(t){var e,r,n,i,o,s;f||c();var a=t.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===t[a-2]?2:"="===t[a-1]?1:0,s=new h(3*a/4-o),n=o>0?a-4:a;var l=0;for(e=0,r=0;e>16&255,s[l++]=i>>8&255,s[l++]=255&i;return 2===o?(i=u[t.charCodeAt(e)]<<2|u[t.charCodeAt(e+1)]>>4,s[l++]=255&i):1===o&&(i=u[t.charCodeAt(e)]<<10|u[t.charCodeAt(e+1)]<<4|u[t.charCodeAt(e+2)]>>2,s[l++]=i>>8&255,s[l++]=255&i),s}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(V,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function et(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function rt(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}const nt={level:{LNone:"none",LError:"error",LDebug:"debug",LTrace:"trace"}},it={formats:{JSON:"json",TEXT:"text"}};class ot{get logLevelEnum(){return nt}get logFormatEnum(){return it}constructor(){this.log_level=nt.level.LNone,this.log_format=it.formats.TEXT,this.log_to_console=!0,this.log_file_path,this.log_response_body=!1,this.log_request_body=!1,this.setLogger()}setLogger(){}log(t,e,r,n,i,o,s,a){var u=this.formatLog(t,e,r,n,i,o,s,a);"undefined"!=typeof window?this.calculateLogLevel(t)>0&&!0===this.log_to_console&&(this.log_format===this.logFormatEnum.formats.JSON?console.log(u):console.log(`${t.toUpperCase()}: ${u}`)):this.logger.transports.length>0&&this.logger.log(t,u)}calculateLogLevel(t){switch(this.log_level){case this.logLevelEnum.level.LError:return t!==this.logLevelEnum.level.LError?-1:1;case this.logLevelEnum.level.LDebug:return t===this.logLevelEnum.level.LTrace?-1:1;case this.logLevelEnum.level.LTrace:return 1;default:return-1}}formatLog(t,e,r,n,i,o,s,a){var u;return i&&(i.Authorization="[REDACTED]"),this.log_request_body||(s=void 0),this.log_response_body||(a=void 0),this.log_format&&this.log_format===it.formats.JSON?(u={level:t,date:(new Date).toISOString(),method:r,url:decodeURIComponent(n),correlationId:o&&o["inin-correlation-id"]?o["inin-correlation-id"]:"",statusCode:e},i&&(u.requestHeaders=i),o&&(u.responseHeaders=o),s&&(u.requestBody=s),a&&(u.responseBody=a)):u=`${(new Date).toISOString()}\n=== REQUEST === \n${this.formatValue("URL",decodeURIComponent(n))}${this.formatValue("Method",r)}${this.formatValue("Headers",this.formatHeaderString(i))}${this.formatValue("Body",s?JSON.stringify(s,null,2):"")}\n=== RESPONSE ===\n${this.formatValue("Status",e)}${this.formatValue("Headers",this.formatHeaderString(o))}${this.formatValue("CorrelationId",o&&o["inin-correlation-id"]?o["inin-correlation-id"]:"")}${this.formatValue("Body",a?JSON.stringify(a,null,2):"")}`,u}formatHeaderString(t){var e="";if(!t)return e;for(const[r,n]of Object.entries(t))e+=`\n\t${r}: ${n}`;return e}formatValue(t,e){return e&&""!==e&&"{}"!==e?`${t}: ${e}\n`:""}getLogLevel(t){switch(t){case"error":return nt.level.LError;case"debug":return nt.level.LDebug;case"trace":return nt.level.LTrace;default:return nt.level.LNone}}getLogFormat(t){switch(t){case"json":return it.formats.JSON;default:return it.formats.TEXT}}}class st{get instance(){return st.instance}set instance(t){st.instance=t}constructor(){if(st.instance||(st.instance=this),"undefined"!=typeof window)this.configPath="";else{const e=t("os"),r=t("path");this.configPath=r.join(e.homedir(),".genesyscloudjavascript-guest","config")}this.live_reload_config=!0,this.host,this.environment,this.basePath,this.authUrl,this.config,this.logger=new ot,this.setEnvironment(),this.liveLoadConfig()}liveLoadConfig(){if("undefined"==typeof window){if(this.updateConfigFromFile(),this.live_reload_config&&!0===this.live_reload_config)try{const e=t("fs");e.watchFile(this.configPath,{persistent:!1},(t,r)=>{this.updateConfigFromFile(),this.live_reload_config||e.unwatchFile(this.configPath)})}catch(t){}}else this.configPath=""}setConfigPath(t){t&&t!==this.configPath&&(this.configPath=t,this.liveLoadConfig())}updateConfigFromFile(){var e=new(t("configparser"));try{e.read(this.configPath),this.config=e}catch(e){if(e.name&&"MissingSectionHeaderError"===e.name){var r=t("fs").readFileSync(this.configPath,"utf8");this.config={_sections:JSON.parse(r)}}}this.config&&this.updateConfigValues()}updateConfigValues(){this.logger.log_level=this.logger.getLogLevel(this.getConfigString("logging","log_level")),this.logger.log_format=this.logger.getLogFormat(this.getConfigString("logging","log_format")),this.logger.log_to_console=void 0!==this.getConfigBoolean("logging","log_to_console")?this.getConfigBoolean("logging","log_to_console"):this.logger.log_to_console,this.logger.log_file_path=void 0!==this.getConfigString("logging","log_file_path")?this.getConfigString("logging","log_file_path"):this.logger.log_file_path,this.logger.log_response_body=void 0!==this.getConfigBoolean("logging","log_response_body")?this.getConfigBoolean("logging","log_response_body"):this.logger.log_response_body,this.logger.log_request_body=void 0!==this.getConfigBoolean("logging","log_request_body")?this.getConfigBoolean("logging","log_request_body"):this.logger.log_request_body,this.live_reload_config=void 0!==this.getConfigBoolean("general","live_reload_config")?this.getConfigBoolean("general","live_reload_config"):this.live_reload_config,this.host=void 0!==this.getConfigString("general","host")?this.getConfigString("general","host"):this.host,this.setEnvironment(),this.logger.setLogger()}setEnvironment(t){this.environment=t||(this.host?this.host:"mypurecloud.com"),this.environment=this.environment.replace(/\/+$/,""),this.environment.startsWith("https://")&&(this.environment=this.environment.substring(8)),this.environment.startsWith("http://")&&(this.environment=this.environment.substring(7)),this.environment.startsWith("api.")&&(this.environment=this.environment.substring(4)),this.basePath=`https://api.${this.environment}`,this.authUrl=`https://login.${this.environment}`}getConfigString(t,e){if(this.config._sections[t])return this.config._sections[t][e]}getConfigBoolean(t,e){if(this.config._sections[t]&&void 0!==this.config._sections[t][e])return"string"==typeof this.config._sections[t][e]?"true"===this.config._sections[t][e]:this.config._sections[t][e]}}class at{get instance(){return at.instance}set instance(t){at.instance=t}constructor(){at.instance||(at.instance=this),this.CollectionFormatEnum={CSV:",",SSV:" ",TSV:"\t",PIPES:"|",MULTI:"multi"};try{localStorage.setItem("purecloud_local_storage_test","purecloud_local_storage_test"),localStorage.removeItem("purecloud_local_storage_test"),this.hasLocalStorage=!0}catch(t){this.hasLocalStorage=!1}this.config=new st,this.setEnvironment("https://api.mypurecloud.com"),this.authentications={"PureCloud OAuth":{type:"oauth2"},"Guest Chat JWT":{type:"apiKey",in:"header",name:"Authorization",apiKeyPrefix:"Bearer"}},this.defaultHeaders={},this.timeout=16e3,this.authData={},this.settingsPrefix="purecloud",this.superagent=i,"undefined"!=typeof window&&(window.ApiClient=this)}setReturnExtendedResponses(t){this.returnExtended=t}setPersistSettings(t,e){this.persistSettings=t,this.settingsPrefix=e?e.replace(/\W+/g,"_"):"purecloud"}_saveSettings(t){try{if(this.authData.apiKey=t.apiKey,this.authentications["Guest Chat JWT"].apiKey=t.apiKey,t.state&&(this.authData.state=t.state),t.tokenExpiryTime&&(this.authData.tokenExpiryTime=t.tokenExpiryTime,this.authData.tokenExpiryTimeString=t.tokenExpiryTimeString),!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;let e=JSON.parse(JSON.stringify(this.authData));delete e.state,localStorage.setItem(`${this.settingsPrefix}_auth_data`,JSON.stringify(e))}catch(t){console.error(t)}}_loadSettings(){if(!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;const t=this.authData.state;this.authData=localStorage.getItem(`${this.settingsPrefix}_auth_data`),this.authData?this.authData=JSON.parse(this.authData):this.authData={},this.authData.apiKey&&this.setJwt(this.authData.apiKey),this.authData.state=t}setEnvironment(t){this.config.setEnvironment(t)}_testTokenAccess(){return new Promise((t,e)=>{this._loadSettings(),this.authentications["Guest Chat JWT"].apiKey?this.callApi("/api/v2/authorization/permissions","GET",null,null,null,null,null,["Guest Chat JWT"],["application/json"],["application/json"]).then(()=>{t()}).catch(t=>{this._saveSettings({apiKey:void 0}),e(t)}):e(new Error("Token is not set"))})}setJwt(t){this._saveSettings({apiKey:t})}setStorageKey(t){this.storageKey=t,this.setJwt(this.authentications["Guest Chat JWT"].apiKey)}_buildAuthUrl(t,e){return e||(e={}),Object.keys(e).reduce((t,r)=>e[r]?`${t}&${r}=${e[r]}`:t,`${this.config.authUrl}/${t}?`)}paramToString(t){return t?t instanceof Date?t.toJSON():t.toString():""}buildUrl(t,e){t.match(/^\//)||(t=`/${t}`);var r=this.config.basePath+t;return r=r.replace(/\{([\w-]+)\}/g,(t,r)=>{var n;return n=e.hasOwnProperty(r)?this.paramToString(e[r]):t,encodeURIComponent(n)})}isJsonMime(t){return Boolean(t&&t.match(/^application\/json(;.*)?$/i))}jsonPreferredMime(t){for(var e=0;e{var r=this.authentications[e];switch(r.type){case"basic":(r.username||r.password)&&t.auth(r.username||"",r.password||"");break;case"apiKey":if(r.apiKey){var n={};r.apiKeyPrefix?n[r.name]=`${r.apiKeyPrefix} ${r.apiKey}`:n[r.name]=r.apiKey,"header"===r.in?t.set(n):t.query(n)}break;case"oauth2":r.accessToken&&t.set({Authorization:`Bearer ${r.accessToken}`});break;default:throw new Error(`Unknown authentication type: ${r.type}`)}})}callApi(t,e,r,n,o,s,a,u,h,f){var c=this.buildUrl(t,r),l=i(e,c);this.proxy&&l.proxy&&l.proxy(this.proxy),this.applyAuthToRequest(l,u),l.query(this.normalizeParams(n)),l.set(this.defaultHeaders).set(this.normalizeParams(o)),l.timeout(this.timeout);var p=this.jsonPreferredMime(h);if(p?l.type(p):l.header["Content-Type"]||l.type("application/json"),"application/x-www-form-urlencoded"===p)l.send(this.normalizeParams(s));else if("multipart/form-data"==p){var g=this.normalizeParams(s);for(var d in g)g.hasOwnProperty(d)&&(this.isFileParam(g[d])?l.attach(d,g[d]):l.field(d,g[d]))}else a&&l.send(a);var y=this.jsonPreferredMime(f);return y&&l.accept(y),new Promise((t,r)=>{l.end((n,i)=>{if(!n||i){var o=!0===this.returnExtended||n?{status:i.status,statusText:i.statusText,headers:i.headers,body:i.body,text:i.text,error:n}:i.body?i.body:i.text;this.config.logger.log("trace",i.statusCode,e,c,l.header,i.headers,a,void 0),this.config.logger.log("debug",i.statusCode,e,c,l.header,void 0,a,void 0),n?(this.config.logger.log("error",i.statusCode,e,c,l.header,i.headers,a,i.body),r(o)):t(o)}else r({status:0,statusText:"error",headers:[],body:{},text:"error",error:n})})})}}class ut{constructor(t){this.apiClient=t||at.instance}deleteWebchatGuestConversationMember(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling deleteWebchatGuestConversationMember';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling deleteWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","DELETE",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequest(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequest';if(void 0===e||null===e)throw'Missing the required parameter "mediaRequestId" when calling getWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","GET",{conversationId:t,mediaRequestId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequests(t){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequests';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests","GET",{conversationId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMember(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMember';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling getWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","GET",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMembers(t,e){if(e=e||{},void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMembers';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members","GET",{conversationId:t},{pageSize:e.pageSize,pageNumber:e.pageNumber,excludeDisconnectedMembers:e.excludeDisconnectedMembers},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessage(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessage';if(void 0===e||null===e)throw'Missing the required parameter "messageId" when calling getWebchatGuestConversationMessage';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}","GET",{conversationId:t,messageId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessages(t,e){if(e=e||{},void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages","GET",{conversationId:t},{after:e.after,before:e.before,sortOrder:e.sortOrder,maxResults:e.maxResults},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}patchWebchatGuestConversationMediarequest(t,e,r){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling patchWebchatGuestConversationMediarequest';if(void 0===e||null===e)throw'Missing the required parameter "mediaRequestId" when calling patchWebchatGuestConversationMediarequest';if(void 0===r||null===r)throw'Missing the required parameter "body" when calling patchWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","PATCH",{conversationId:t,mediaRequestId:e},{},{},{},r,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberMessages(t,e,r){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberMessages';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberMessages';if(void 0===r||null===r)throw'Missing the required parameter "body" when calling postWebchatGuestConversationMemberMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages","POST",{conversationId:t,memberId:e},{},{},{},r,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberTyping(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberTyping';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberTyping';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing","POST",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversations(t){if(void 0===t||null===t)throw'Missing the required parameter "body" when calling postWebchatGuestConversations';return this.apiClient.callApi("/api/v2/webchat/guest/conversations","POST",{},{},{},{},t,[],["application/json"],["application/json"])}}var ht=new class{constructor(){this.ApiClient=new at,this.WebChatApi=ut,this.PureCloudRegionHosts=o}};e.exports=ht}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{buffer:3,configparser:12,fs:1,os:5,path:6,superagent:17}]},{},[]); \ No newline at end of file +require=function(){return function t(e,r,n){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var f=new Error("Cannot find module '"+a+"'");throw f.code="MODULE_NOT_FOUND",f}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(t){return o(e[a][1][t]||t)},l,l.exports,t,e,r,n)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a0?a-4:a;for(r=0;r>16&255,u[l++]=e>>8&255,u[l++]=255&e;2===s&&(e=o[t.charCodeAt(r)]<<2|o[t.charCodeAt(r+1)]>>4,u[l++]=255&e);1===s&&(e=o[t.charCodeAt(r)]<<10|o[t.charCodeAt(r+1)]<<4|o[t.charCodeAt(r+2)]>>2,u[l++]=e>>8&255,u[l++]=255&e);return u},r.fromByteArray=function(t){for(var e,r=t.length,o=r%3,i=[],a=0,s=r-o;as?s:a+16383));1===o?(e=t[r-1],i.push(n[e>>2]+n[e<<4&63]+"==")):2===o&&(e=(t[r-2]<<8)+t[r-1],i.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return i.join("")};for(var n=[],o=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function l(t,e,r){for(var o,i,a=[],s=e;s>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63},{}],2:[function(t,e,r){},{}],3:[function(t,e,r){(function(e){(function(){"use strict";var e=t("base64-js"),n=t("ieee754");r.Buffer=a,r.SlowBuffer=function(t){+t!=t&&(t=0);return a.alloc(+t)},r.INSPECT_MAX_BYTES=50;var o=2147483647;function i(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return f(t)}return s(t,e,r)}function s(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|h(t,e),n=i(r),o=n.write(t,e);o!==r&&(n=n.slice(0,o));return n}(t,e);if(ArrayBuffer.isView(t))return l(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(N(t,ArrayBuffer)||t&&N(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function h(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||N(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var o=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return B(t).length;default:if(o)return n?-1:k(t).length;e=(""+e).toLowerCase(),o=!0}}function p(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:d(t,e,r,n,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):d(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function d(t,e,r,n,o){var i,a=1,s=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}function f(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(o){var l=-1;for(i=r;is&&(r=s-u),i=r;i>=0;i--){for(var c=!0,h=0;ho&&(n=o):n=o;var i=e.length;n>i/2&&(n=i/2);for(var a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function A(t,r,n){return 0===r&&n===t.length?e.fromByteArray(t):e.fromByteArray(t.slice(r,n))}function E(t,e,r){r=Math.min(t.length,r);for(var n=[],o=e;o239?4:f>223?3:f>191?2:1;if(o+c<=r)switch(c){case 1:f<128&&(l=f);break;case 2:128==(192&(i=t[o+1]))&&(u=(31&f)<<6|63&i)>127&&(l=u);break;case 3:i=t[o+1],a=t[o+2],128==(192&i)&&128==(192&a)&&(u=(15&f)<<12|(63&i)<<6|63&a)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:i=t[o+1],a=t[o+2],s=t[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(u=(15&f)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(l=u)}null===l?(l=65533,c=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),o+=c}return function(t){var e=t.length;if(e<=S)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,r);case"utf8":case"utf-8":return E(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return O(this,e,r);case"base64":return A(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},a.prototype.toLocaleString=a.prototype.toString,a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),""},a.prototype.compare=function(t,e,r,n,o){if(N(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,o>>>=0,this===t)return 0;for(var i=o-n,s=r-e,u=Math.min(i,s),f=this.slice(n,o),l=t.slice(e,r),c=0;c>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var o=this.length-e;if((void 0===r||r>o)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return g(this,t,e,r);case"utf8":case"utf-8":return m(this,t,e,r);case"ascii":return v(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return w(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var o=e;on)&&(r=n);for(var o="",i=e;ir)throw new RangeError("Trying to access beyond buffer length")}function j(t,e,r,n,o,i){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||et.length)throw new RangeError("Index out of range")}function R(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function I(t,e,r,o,i){return e=+e,r>>>=0,i||R(t,0,r,4),n.write(t,e,r,o,23,4),r+4}function U(t,e,r,o,i){return e=+e,r>>>=0,i||R(t,0,r,8),n.write(t,e,r,o,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||x(t,e,this.length);for(var n=this[t],o=1,i=0;++i>>=0,e>>>=0,r||x(t,e,this.length);for(var n=this[t+--e],o=1;e>0&&(o*=256);)n+=this[t+--e]*o;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);for(var n=e,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*e)),i},a.prototype.readInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||x(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||x(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||x(t,4,this.length),n.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||x(t,4,this.length),n.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||x(t,8,this.length),n.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||x(t,8,this.length),n.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||j(this,t,e,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[e]=255&t;++i>>=0,r>>>=0,n)||j(this,t,e,r,Math.pow(2,8*r)-1,0);var o=r-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var o=Math.pow(2,8*r-1);j(this,t,e,r,o-1,-o)}var i=0,a=1,s=0;for(this[e]=255&t;++i>0)-s&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var o=Math.pow(2,8*r-1);j(this,t,e,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[e+i]=255&t;--i>=0&&(a*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/a>>0)-s&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||j(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return I(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return I(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return U(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return U(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return o},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var o=t.charCodeAt(0);("utf8"===n&&o<128||"latin1"===n)&&(t=o)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(t){return e.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(M,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function D(t,e,r,n){for(var o=0;o=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function N(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function q(t){return t!=t}}).call(this)}).call(this,t("buffer").Buffer)},{"base64-js":1,buffer:3,ieee754:4}],4:[function(t,e,r){r.read=function(t,e,r,n,o){var i,a,s=8*o-n-1,u=(1<>1,l=-7,c=r?o-1:0,h=r?-1:1,p=t[e+c];for(c+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+t[e+c],c+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=n;l>0;a=256*a+t[e+c],c+=h,l-=8);if(0===i)i=1-f;else{if(i===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),i-=f}return(p?-1:1)*a*Math.pow(2,i-n)},r.write=function(t,e,r,n,o,i){var a,s,u,f=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(a++,u/=2),a+c>=l?(s=0,a=l):a+c>=1?(s=(e*u-1)*Math.pow(2,o),a+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,o),a=0));o>=8;t[r+p]=255&s,p+=y,s/=256,o-=8);for(a=a<0;t[r+p]=255&a,p+=y,a/=256,f-=8);t[r+p-y]|=128*d}},{}],5:[function(t,e,r){r.endianness=function(){return"LE"},r.hostname=function(){return"undefined"!=typeof location?location.hostname:""},r.loadavg=function(){return[]},r.uptime=function(){return 0},r.freemem=function(){return Number.MAX_VALUE},r.totalmem=function(){return Number.MAX_VALUE},r.cpus=function(){return[]},r.type=function(){return"Browser"},r.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},r.networkInterfaces=r.getNetworkInterfaces=function(){return{}},r.arch=function(){return"javascript"},r.platform=function(){return"browser"},r.tmpdir=r.tmpDir=function(){return"/tmp"},r.EOL="\n",r.homedir=function(){return"/"}},{}],6:[function(t,e,r){(function(t){(function(){"use strict";function r(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function n(t,e){for(var r,n="",o=0,i=-1,a=0,s=0;s<=t.length;++s){if(s2){var u=n.lastIndexOf("/");if(u!==n.length-1){-1===u?(n="",o=0):o=(n=n.slice(0,u)).length-1-n.lastIndexOf("/"),i=s,a=0;continue}}else if(2===n.length||1===n.length){n="",o=0,i=s,a=0;continue}e&&(n.length>0?n+="/..":n="..",o=2)}else n.length>0?n+="/"+t.slice(i+1,s):n=t.slice(i+1,s),o=s-i-1;i=s,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var o={resolve:function(){for(var e,o="",i=!1,a=arguments.length-1;a>=-1&&!i;a--){var s;a>=0?s=arguments[a]:(void 0===e&&(e=t.cwd()),s=e),r(s),0!==s.length&&(o=s+"/"+o,i=47===s.charCodeAt(0))}return o=n(o,!i),i?o.length>0?"/"+o:"/":o.length>0?o:"."},normalize:function(t){if(r(t),0===t.length)return".";var e=47===t.charCodeAt(0),o=47===t.charCodeAt(t.length-1);return 0!==(t=n(t,!e)).length||e||(t="."),t.length>0&&o&&(t+="/"),e?"/"+t:t},isAbsolute:function(t){return r(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,e=0;e0&&(void 0===t?t=n:t+="/"+n)}return void 0===t?".":o.normalize(t)},relative:function(t,e){if(r(t),r(e),t===e)return"";if((t=o.resolve(t))===(e=o.resolve(e)))return"";for(var n=1;nf){if(47===e.charCodeAt(s+c))return e.slice(s+c+1);if(0===c)return e.slice(s+c)}else a>f&&(47===t.charCodeAt(n+c)?l=c:0===c&&(l=0));break}var h=t.charCodeAt(n+c);if(h!==e.charCodeAt(s+c))break;47===h&&(l=c)}var p="";for(c=n+l+1;c<=i;++c)c!==i&&47!==t.charCodeAt(c)||(0===p.length?p+="..":p+="/..");return p.length>0?p+e.slice(s+l):(s+=l,47===e.charCodeAt(s)&&++s,e.slice(s))},_makeLong:function(t){return t},dirname:function(t){if(r(t),0===t.length)return".";for(var e=t.charCodeAt(0),n=47===e,o=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){o=a;break}}else i=!1;return-1===o?n?"/":".":n&&1===o?"//":t.slice(0,o)},basename:function(t,e){if(void 0!==e&&"string"!=typeof e)throw new TypeError('"ext" argument must be a string');r(t);var n,o=0,i=-1,a=!0;if(void 0!==e&&e.length>0&&e.length<=t.length){if(e.length===t.length&&e===t)return"";var s=e.length-1,u=-1;for(n=t.length-1;n>=0;--n){var f=t.charCodeAt(n);if(47===f){if(!a){o=n+1;break}}else-1===u&&(a=!1,u=n+1),s>=0&&(f===e.charCodeAt(s)?-1==--s&&(i=n):(s=-1,i=u))}return o===i?i=u:-1===i&&(i=t.length),t.slice(o,i)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){o=n+1;break}}else-1===i&&(a=!1,i=n+1);return-1===i?"":t.slice(o,i)},extname:function(t){r(t);for(var e=-1,n=0,o=-1,i=!0,a=0,s=t.length-1;s>=0;--s){var u=t.charCodeAt(s);if(47!==u)-1===o&&(i=!1,o=s+1),46===u?-1===e?e=s:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=s+1;break}}return-1===e||-1===o||0===a||1===a&&e===o-1&&e===n+1?"":t.slice(e,o)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||"")+(e.ext||"");return r?r===e.root?r+n:r+t+n:n}("/",t)},parse:function(t){r(t);var e={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return e;var n,o=t.charCodeAt(0),i=47===o;i?(e.root="/",n=1):n=0;for(var a=-1,s=0,u=-1,f=!0,l=t.length-1,c=0;l>=n;--l)if(47!==(o=t.charCodeAt(l)))-1===u&&(f=!1,u=l+1),46===o?-1===a?a=l:1!==c&&(c=1):-1!==a&&(c=-1);else if(!f){s=l+1;break}return-1===a||-1===u||0===c||1===c&&a===u-1&&a===s+1?-1!==u&&(e.base=e.name=0===s&&i?t.slice(1,u):t.slice(s,u)):(0===s&&i?(e.name=t.slice(1,a),e.base=t.slice(1,u)):(e.name=t.slice(s,a),e.base=t.slice(s,u)),e.ext=t.slice(a,u)),s>0?e.dir=t.slice(0,s-1):i&&(e.dir="/"),e},sep:"/",delimiter:":",win32:null,posix:null};o.posix=o,e.exports=o}).call(this)}).call(this,t("_process"))},{_process:7}],7:[function(t,e,r){var n,o,i=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function u(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{o="function"==typeof clearTimeout?clearTimeout:s}catch(t){o=s}}();var f,l=[],c=!1,h=-1;function p(){c&&f&&(c=!1,f.length?l=f.concat(l):h=-1,l.length&&y())}function y(){if(!c){var t=u(p);c=!0;for(var e=l.length;e;){for(f=l,l=[];++h1)for(var r=1;r-1?o(r):r}},{"./":9,"get-intrinsic":14}],9:[function(t,e,r){"use strict";var n=t("function-bind"),o=t("get-intrinsic"),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||n.call(a,i),u=o("%Object.getOwnPropertyDescriptor%",!0),f=o("%Object.defineProperty%",!0),l=o("%Math.max%");if(f)try{f({},"a",{value:1})}catch(t){f=null}e.exports=function(t){var e=s(n,a,arguments);u&&f&&(u(e,"length").configurable&&f(e,"length",{value:1+l(0,t.length-(arguments.length-1))}));return e};var c=function(){return s(n,i,arguments)};f?f(e.exports,"apply",{value:c}):e.exports.apply=c},{"function-bind":13,"get-intrinsic":14}],10:[function(t,e,r){function n(t){if(t)return function(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}(t)}void 0!==e&&(e.exports=n),n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},n.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;ol.depthLimit)return void f(n,e,r,s);if(void 0!==l.edgesLimit&&i+1>l.edgesLimit)return void f(n,e,r,s);if(a.push(e),Array.isArray(e))for(c=0;ce?1:0}function c(t,e,r,u){void 0===u&&(u=s());var c,p=function t(e,r,a,s,u,c,h){c+=1;var p;if("object"==typeof e&&null!==e){for(p=0;ph.depthLimit)return void f(n,e,r,u);if(void 0!==h.edgesLimit&&a+1>h.edgesLimit)return void f(n,e,r,u);if(s.push(e),Array.isArray(e))for(p=0;p0)for(var n=0;n1&&"boolean"!=typeof e)throw new i('"allowMissing" argument must be a boolean');var r=function(t){var e=_(t,0,1),r=_(t,-1);if("%"===e&&"%"!==r)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new n("invalid intrinsic syntax, expected opening `%`");var o=[];return w(t,A,function(t,e,r,n){o[o.length]=r?w(n,E,"$1"):e||t}),o}(t),o=r.length>0?r[0]:"",a=S("%"+o+"%",e),u=a.name,f=a.value,l=!1,c=a.alias;c&&(o=c[0],b(r,v([0,1],c)));for(var h=1,p=!0;h=r.length){var O=s(f,d);f=(p=!!O)&&"get"in O&&!("originalValue"in O.get)?O.get:f[d]}else p=m(f,d),f=f[d];p&&!l&&(y[u]=f)}}return f}},{"function-bind":13,has:17,"has-symbols":15}],15:[function(t,e,r){"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=t("./shams");e.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},{"./shams":16}],16:[function(t,e,r){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},{}],17:[function(t,e,r){"use strict";var n=t("function-bind");e.exports=n.call(Function.call,Object.prototype.hasOwnProperty)},{"function-bind":13}],18:[function(t,e,r){var n="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=n&&o&&"function"==typeof o.get?o.get:null,a=n&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,u=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,f=s&&u&&"function"==typeof u.get?u.get:null,l=s&&Set.prototype.forEach,c="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,y=Boolean.prototype.valueOf,d=Object.prototype.toString,g=Function.prototype.toString,m=String.prototype.match,v=String.prototype.slice,b=String.prototype.replace,w=String.prototype.toUpperCase,_=String.prototype.toLowerCase,A=RegExp.prototype.test,E=Array.prototype.concat,S=Array.prototype.join,T=Array.prototype.slice,O=Math.floor,P="function"==typeof BigInt?BigInt.prototype.valueOf:null,C=Object.getOwnPropertySymbols,x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,j="function"==typeof Symbol&&"object"==typeof Symbol.iterator,R="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===j||"symbol")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,U=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function M(t,e){if(t===1/0||t===-1/0||t!=t||t&&t>-1e3&&t<1e3||A.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var n=t<0?-O(-t):O(t);if(n!==t){var o=String(n),i=v.call(e,o.length+1);return b.call(o,r,"$&_")+"."+b.call(b.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(e,r,"$&_")}var L=t("./util.inspect").custom,k=L&&q(L)?L:null;function B(t,e,r){var n="double"===(r.quoteStyle||e)?'"':"'";return n+t+n}function D(t){return b.call(String(t),/"/g,""")}function N(t){return!("[object Array]"!==G(t)||R&&"object"==typeof t&&R in t)}function q(t){if(j)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!x)return!1;try{return x.call(t),!0}catch(t){}return!1}e.exports=function t(e,r,n,o){var s=r||{};if(W(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(W(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var u=!W(s,"customInspect")||s.customInspect;if("boolean"!=typeof u&&"symbol"!==u)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(W(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(W(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var d=s.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,r){if(e.length>r.maxStringLength){var n=e.length-r.maxStringLength,o="... "+n+" more character"+(n>1?"s":"");return t(v.call(e,0,r.maxStringLength),r)+o}var i=b.call(b.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,$);return B(i,"single",r)}(e,s);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var w=String(e);return d?M(e,w):w}if("bigint"==typeof e){var A=String(e)+"n";return d?M(e,A):A}var O=void 0===s.depth?5:s.depth;if(void 0===n&&(n=0),n>=O&&O>0&&"object"==typeof e)return N(e)?"[Array]":"[Object]";var C=function(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=S.call(Array(t.indent+1)," ")}return{base:r,prev:S.call(Array(e+1),r)}}(s,n);if(void 0===o)o=[];else if(z(o,e)>=0)return"[Circular]";function L(e,r,i){if(r&&(o=T.call(o)).push(r),i){var a={depth:s.depth};return W(s,"quoteStyle")&&(a.quoteStyle=s.quoteStyle),t(e,a,n+1,o)}return t(e,s,n+1,o)}if("function"==typeof e){var F=function(t){if(t.name)return t.name;var e=m.call(g.call(t),/^function\s*([\w$]+)/);if(e)return e[1];return null}(e),K=X(e,L);return"[Function"+(F?": "+F:" (anonymous)")+"]"+(K.length>0?" { "+S.call(K,", ")+" }":"")}if(q(e)){var Q=j?b.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):x.call(e);return"object"!=typeof e||j?Q:H(Q)}if(function(t){if(!t||"object"!=typeof t)return!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement)return!0;return"string"==typeof t.nodeName&&"function"==typeof t.getAttribute}(e)){for(var Z="<"+_.call(String(e.nodeName)),tt=e.attributes||[],et=0;et"}if(N(e)){if(0===e.length)return"[]";var rt=X(e,L);return C&&!function(t){for(var e=0;e=0)return!1;return!0}(rt)?"["+V(rt,C)+"]":"[ "+S.call(rt,", ")+" ]"}if(function(t){return!("[object Error]"!==G(t)||R&&"object"==typeof t&&R in t)}(e)){var nt=X(e,L);return"cause"in e&&!I.call(e,"cause")?"{ ["+String(e)+"] "+S.call(E.call("[cause]: "+L(e.cause),nt),", ")+" }":0===nt.length?"["+String(e)+"]":"{ ["+String(e)+"] "+S.call(nt,", ")+" }"}if("object"==typeof e&&u){if(k&&"function"==typeof e[k])return e[k]();if("symbol"!==u&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!i||!t||"object"!=typeof t)return!1;try{i.call(t);try{f.call(t)}catch(t){return!0}return t instanceof Map}catch(t){}return!1}(e)){var ot=[];return a.call(e,function(t,r){ot.push(L(r,e,!0)+" => "+L(t,e))}),Y("Map",i.call(e),ot,C)}if(function(t){if(!f||!t||"object"!=typeof t)return!1;try{f.call(t);try{i.call(t)}catch(t){return!0}return t instanceof Set}catch(t){}return!1}(e)){var it=[];return l.call(e,function(t){it.push(L(t,e))}),Y("Set",f.call(e),it,C)}if(function(t){if(!c||!t||"object"!=typeof t)return!1;try{c.call(t,c);try{h.call(t,h)}catch(t){return!0}return t instanceof WeakMap}catch(t){}return!1}(e))return J("WeakMap");if(function(t){if(!h||!t||"object"!=typeof t)return!1;try{h.call(t,h);try{c.call(t,c)}catch(t){return!0}return t instanceof WeakSet}catch(t){}return!1}(e))return J("WeakSet");if(function(t){if(!p||!t||"object"!=typeof t)return!1;try{return p.call(t),!0}catch(t){}return!1}(e))return J("WeakRef");if(function(t){return!("[object Number]"!==G(t)||R&&"object"==typeof t&&R in t)}(e))return H(L(Number(e)));if(function(t){if(!t||"object"!=typeof t||!P)return!1;try{return P.call(t),!0}catch(t){}return!1}(e))return H(L(P.call(e)));if(function(t){return!("[object Boolean]"!==G(t)||R&&"object"==typeof t&&R in t)}(e))return H(y.call(e));if(function(t){return!("[object String]"!==G(t)||R&&"object"==typeof t&&R in t)}(e))return H(L(String(e)));if(!function(t){return!("[object Date]"!==G(t)||R&&"object"==typeof t&&R in t)}(e)&&!function(t){return!("[object RegExp]"!==G(t)||R&&"object"==typeof t&&R in t)}(e)){var at=X(e,L),st=U?U(e)===Object.prototype:e instanceof Object||e.constructor===Object,ut=e instanceof Object?"":"null prototype",ft=!st&&R&&Object(e)===e&&R in e?v.call(G(e),8,-1):ut?"Object":"",lt=(st||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(ft||ut?"["+S.call(E.call([],ft||[],ut||[]),": ")+"] ":"");return 0===at.length?lt+"{}":C?lt+"{"+V(at,C)+"}":lt+"{ "+S.call(at,", ")+" }"}return String(e)};var F=Object.prototype.hasOwnProperty||function(t){return t in this};function W(t,e){return F.call(t,e)}function G(t){return d.call(t)}function z(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;r-1?t.split(","):t},f=function(t,e,r,n){if(t){var i=r.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,a=/(\[[^[\]]*])/g,s=r.depth>0&&/(\[[^[\]]*])/.exec(i),f=s?i.slice(0,s.index):i,l=[];if(f){if(!r.plainObjects&&o.call(Object.prototype,f)&&!r.allowPrototypes)return;l.push(f)}for(var c=0;r.depth>0&&null!==(s=a.exec(i))&&c=0;--i){var a,s=t[i];if("[]"===s&&r.parseArrays)a=[].concat(o);else{a=r.plainObjects?Object.create(null):{};var f="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,l=parseInt(f,10);r.parseArrays||""!==f?!isNaN(l)&&s!==f&&String(l)===f&&l>=0&&r.parseArrays&&l<=r.arrayLimit?(a=[])[l]=o:"__proto__"!==f&&(a[f]=o):a={0:o}}o=a}return o}(l,e,r,n)}};e.exports=function(t,e){var r=function(t){if(!t)return a;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?a.charset:t.charset;return{allowDots:void 0===t.allowDots?a.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof t.allowSparse?t.allowSparse:a.allowSparse,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:a.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:a.comma,decoder:"function"==typeof t.decoder?t.decoder:a.decoder,delimiter:"string"==typeof t.delimiter||n.isRegExp(t.delimiter)?t.delimiter:a.delimiter,depth:"number"==typeof t.depth||!1===t.depth?+t.depth:a.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:a.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:a.strictNullHandling}}(e);if(""===t||null===t||void 0===t)return r.plainObjects?Object.create(null):{};for(var l="string"==typeof t?function(t,e){var r,f={},l=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,c=e.parameterLimit===1/0?void 0:e.parameterLimit,h=l.split(e.delimiter,c),p=-1,y=e.charset;if(e.charsetSentinel)for(r=0;r-1&&(g=i(g)?[g]:g),o.call(f,d)?f[d]=n.combine(f[d],g):f[d]=g}return f}(t,r):t,c=r.plainObjects?Object.create(null):{},h=Object.keys(l),p=0;p0?S.join(",")||null:void 0}];else if(u(h))U=h;else{var L=Object.keys(S);U=p?L.sort(p):L}for(var k=0;k0?w+b:""}},{"./formats":19,"./utils":23,"side-channel":24}],23:[function(t,e,r){"use strict";var n=t("./formats"),o=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var t=[],e=0;e<256;++e)t.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return t}(),s=function(t,e){for(var r=e&&e.plainObjects?Object.create(null):{},n=0;n1;){var e=t.pop(),r=e.obj[e.prop];if(i(r)){for(var n=[],o=0;o=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||i===n.RFC1738&&(40===l||41===l)?u+=s.charAt(f):l<128?u+=a[l]:l<2048?u+=a[192|l>>6]+a[128|63&l]:l<55296||l>=57344?u+=a[224|l>>12]+a[128|l>>6&63]+a[128|63&l]:(f+=1,l=65536+((1023&l)<<10|1023&s.charCodeAt(f)),u+=a[240|l>>18]+a[128|l>>12&63]+a[128|l>>6&63]+a[128|63&l])}return u},isBuffer:function(t){return!(!t||"object"!=typeof t||!(t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer(t)))},isRegExp:function(t){return"[object RegExp]"===Object.prototype.toString.call(t)},maybeMap:function(t,e){if(i(t)){for(var r=[],n=0;nt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){u=!0,a=t},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}(this._defaults);try{for(r.s();!(e=r.n()).done;){var i=e.value;t[i.fn].apply(t,n(i.args))}}catch(t){r.e(t)}finally{r.f()}},e.exports=a},{}],26:[function(t,e,r){"use strict";function n(t){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){u=!0,a=t},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0||t instanceof Object)?e(t):null)},S.prototype.toError=function(){var t=this.req,e=t.method,r=t.url,n="cannot ".concat(e," ").concat(r," (").concat(this.status,")"),o=new Error(n);return o.status=this.status,o.method=e,o.url=r,o},v.Response=S,s(T.prototype),p(T.prototype,l.prototype),T.prototype.type=function(t){return this.set("Content-Type",v.types[t]||t),this},T.prototype.accept=function(t){return this.set("Accept",v.types[t]||t),this},T.prototype.auth=function(t,e,r){1===arguments.length&&(e=""),"object"===n(e)&&null!==e&&(r=e,e=""),r||(r={type:"function"==typeof btoa?"basic":"auto"});return this._auth(t,e,r,function(t){if("function"==typeof btoa)return btoa(t);throw new Error("Cannot use basic auth, btoa is not a function")})},T.prototype.query=function(t){return"string"!=typeof t&&(t=w(t)),t&&this._query.push(t),this},T.prototype.attach=function(t,e,r){if(e){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(t,e,r||e.name)}return this},T.prototype._getFormData=function(){return this._formData||(this._formData=new a.FormData),this._formData},T.prototype.callback=function(t,e){if(this._shouldRetry(t,e))return this._retry();var r=this._callback;this.clearTimeout(),t&&(this._maxRetries&&(t.retries=this._retries-1),this.emit("error",t)),r(t,e)},T.prototype.crossDomainError=function(){var t=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");t.crossDomain=!0,t.status=this.status,t.method=this.method,t.url=this.url,this.callback(t)},T.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},T.prototype.ca=T.prototype.agent,T.prototype.buffer=T.prototype.ca,T.prototype.write=function(){throw new Error("Streaming is not supported in browser version of superagent")},T.prototype.pipe=T.prototype.write,T.prototype._isHost=function(t){return t&&"object"===n(t)&&!Array.isArray(t)&&"[object Object]"!==Object.prototype.toString.call(t)},T.prototype.end=function(t){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=t||m,this._finalizeQueryString(),this._end()},T.prototype._setUploadTimeout=function(){var t=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout(function(){t._timeoutError("Upload timeout of ",t._uploadTimeout,"ETIMEDOUT")},this._uploadTimeout))},T.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));var t=this;this.xhr=v.getXHR();var e=this.xhr,r=this._formData||this._data;this._setTimeouts(),e.addEventListener("readystatechange",function(){var r=e.readyState;if(r>=2&&t._responseTimeoutTimer&&clearTimeout(t._responseTimeoutTimer),4===r){var n;try{n=e.status}catch(t){n=0}if(!n){if(t.timedout||t._aborted)return;return t.crossDomainError()}t.emit("end")}});var n=function(e,r){r.total>0&&(r.percent=r.loaded/r.total*100,100===r.percent&&clearTimeout(t._uploadTimeoutTimer)),r.direction=e,t.emit("progress",r)};if(this.hasListeners("progress"))try{e.addEventListener("progress",n.bind(null,"download")),e.upload&&e.upload.addEventListener("progress",n.bind(null,"upload"))}catch(t){}e.upload&&this._setUploadTimeout();try{this.username&&this.password?e.open(this.method,this.url,!0,this.username,this.password):e.open(this.method,this.url,!0)}catch(t){return this.callback(t)}if(this._withCredentials&&(e.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof r&&!this._isHost(r)){var o=this._header["content-type"],i=this._serializer||v.serialize[o?o.split(";")[0]:""];!i&&E(o)&&(i=v.serialize["application/json"]),i&&(r=i(r))}for(var a in this.header)null!==this.header[a]&&y(this.header,a)&&e.setRequestHeader(a,this.header[a]);this._responseType&&(e.responseType=this._responseType),this.emit("request",this),e.send(void 0===r?null:r)},v.agent=function(){return new g};for(var O=function(){var t=C[P];g.prototype[t.toLowerCase()]=function(e,r){var n=new v.Request(t,e);return this._setDefaults(n),r&&n.end(r),n}},P=0,C=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];P=this._maxRetries)return!1;if(this._retryCallback)try{var r=this._retryCallback(t,e);if(!0===r)return!0;if(!1===r)return!1}catch(t){console.error(t)}if(e&&e.status&&l.has(e.status))return!0;if(t){if(t.code&&f.has(t.code))return!0;if(t.timeout&&"ECONNABORTED"===t.code)return!0;if(t.crossDomain)return!0}return!1},u.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},u.prototype.then=function(t,e){var r=this;if(!this._fullfilledPromise){var n=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(function(t,e){n.on("abort",function(){if(!(r._maxRetries&&r._maxRetries>r._retries))if(r.timedout&&r.timedoutError)e(r.timedoutError);else{var t=new Error("Aborted");t.code="ABORTED",t.status=r.status,t.method=r.method,t.url=r.url,e(t)}}),n.end(function(r,n){r?e(r):t(n)})})}return this._fullfilledPromise.then(t,e)},u.prototype.catch=function(t){return this.then(void 0,t)},u.prototype.use=function(t){return t(this),this},u.prototype.ok=function(t){if("function"!=typeof t)throw new Error("Callback required");return this._okCallback=t,this},u.prototype._isResponseOK=function(t){return!!t&&(this._okCallback?this._okCallback(t):t.status>=200&&t.status<300)},u.prototype.get=function(t){return this._header[t.toLowerCase()]},u.prototype.getHeader=u.prototype.get,u.prototype.set=function(t,e){if(a(t)){for(var r in t)s(t,r)&&this.set(r,t[r]);return this}return this._header[t.toLowerCase()]=e,this.header[t]=e,this},u.prototype.unset=function(t){return delete this._header[t.toLowerCase()],delete this.header[t],this},u.prototype.field=function(t,e,r){if(null===t||void 0===t)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(a(t)){for(var n in t)s(t,n)&&this.field(n,t[n]);return this}if(Array.isArray(e)){for(var o in e)s(e,o)&&this.field(t,e[o]);return this}if(null===e||void 0===e)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof e&&(e=String(e)),this._getFormData().append(t,e,r),this},u.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(o.gte(r.version,"v13.0.0")&&o.lt(r.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");o.gte(r.version,"v14.0.0")&&(this.req.destroyed=!0),this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},u.prototype._auth=function(t,e,r,n){switch(r.type){case"basic":this.set("Authorization","Basic ".concat(n("".concat(t,":").concat(e))));break;case"auto":this.username=t,this.password=e;break;case"bearer":this.set("Authorization","Bearer ".concat(t))}return this},u.prototype.withCredentials=function(t){return void 0===t&&(t=!0),this._withCredentials=t,this},u.prototype.redirects=function(t){return this._maxRedirects=t,this},u.prototype.maxResponseSize=function(t){if("number"!=typeof t)throw new TypeError("Invalid argument");return this._maxResponseSize=t,this},u.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},u.prototype.send=function(t){var e=a(t),r=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(e&&!this._data)Array.isArray(t)?this._data=[]:this._isHost(t)||(this._data={});else if(t&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(e&&a(this._data))for(var n in t)s(t,n)&&(this._data[n]=t[n]);else"string"==typeof t?(r||this.type("form"),(r=this._header["content-type"])&&(r=r.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===r?this._data?"".concat(this._data,"&").concat(t):t:(this._data||"")+t):this._data=t;return!e||this._isHost(t)?this:(r||this.type("json"),this)},u.prototype.sortQuery=function(t){return this._sort=void 0===t||t,this},u.prototype._finalizeQueryString=function(){var t=this._query.join("&");if(t&&(this.url+=(this.url.includes("?")?"&":"?")+t),this._query.length=0,this._sort){var e=this.url.indexOf("?");if(e>=0){var r=this.url.slice(e+1).split("&");"function"==typeof this._sort?r.sort(this._sort):r.sort(),this.url=this.url.slice(0,e)+"?"+r.join("&")}}},u.prototype._appendQueryString=function(){console.warn("Unsupported")},u.prototype._timeoutError=function(t,e,r){if(!this._aborted){var n=new Error("".concat(t+e,"ms exceeded"));n.timeout=e,n.code="ECONNABORTED",n.errno=r,this.timedout=!0,this.timedoutError=n,this.abort(),this.callback(n)}},u.prototype._setTimeouts=function(){var t=this;this._timeout&&!this._timer&&(this._timer=setTimeout(function(){t._timeoutError("Timeout of ",t._timeout,"ETIME")},this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout(function(){t._timeoutError("Response timeout of ",t._responseTimeout,"ETIMEDOUT")},this._responseTimeout))}}).call(this)}).call(this,t("_process"))},{"./utils":29,_process:7,semver:2}],28:[function(t,e,r){"use strict";var n=t("./utils");function o(){}e.exports=o,o.prototype.get=function(t){return this.header[t.toLowerCase()]},o.prototype._setHeaderProperties=function(t){var e=t["content-type"]||"";this.type=n.type(e);var r=n.params(e);for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(this[o]=r[o]);this.links={};try{t.link&&(this.links=n.parseLinks(t.link))}catch(t){}},o.prototype._setStatusProperties=function(t){var e=Math.trunc(t/100);this.statusCode=t,this.status=this.statusCode,this.statusType=e,this.info=1===e,this.ok=2===e,this.redirect=3===e,this.clientError=4===e,this.serverError=5===e,this.error=(4===e||5===e)&&this.toError(),this.created=201===t,this.accepted=202===t,this.noContent=204===t,this.badRequest=400===t,this.unauthorized=401===t,this.notAcceptable=406===t,this.forbidden=403===t,this.notFound=404===t,this.unprocessableEntity=422===t}},{"./utils":29}],29:[function(t,e,r){"use strict";function n(t){"@babel/helpers - typeof";return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return s=t.done,t},e:function(t){u=!0,a=t},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r>18&63]+a[o>>12&63]+a[o>>6&63]+a[63&o]);return i.join("")}function h(t){var e;f||l();for(var r=t.length,n=r%3,o="",i=[],s=0,u=r-n;su?u:s+16383));return 1===n?(e=t[r-1],o+=a[e>>2],o+=a[e<<4&63],o+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],o+=a[e>>10],o+=a[e>>4&63],o+=a[e<<2&63],o+="="),i.push(o),i.join("")}function p(t,e,r,n,o){var i,a,s=8*o-n-1,u=(1<>1,l=-7,c=r?o-1:0,h=r?-1:1,p=t[e+c];for(c+=h,i=p&(1<<-l)-1,p>>=-l,l+=s;l>0;i=256*i+t[e+c],c+=h,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=n;l>0;a=256*a+t[e+c],c+=h,l-=8);if(0===i)i=1-f;else{if(i===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),i-=f}return(p?-1:1)*a*Math.pow(2,i-n)}function y(t,e,r,n,o,i){var a,s,u,f=8*i-o-1,l=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,y=n?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(a++,u/=2),a+c>=l?(s=0,a=l):a+c>=1?(s=(e*u-1)*Math.pow(2,o),a+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,o),a=0));o>=8;t[r+p]=255&s,p+=y,s/=256,o-=8);for(a=a<0;t[r+p]=255&a,p+=y,a/=256,f-=8);t[r+p-y]|=128*d}var d={}.toString,g=Array.isArray||function(t){return"[object Array]"==d.call(t)};function m(){return b.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function v(t,e){if(m()=m())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+m().toString(16)+" bytes");return 0|t}function T(t){return!(null==t||!t._isBuffer)}function O(t,e){if(T(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Z(t).length;default:if(n)return Q(t).length;e=(""+e).toLowerCase(),n=!0}}function P(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function C(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=b.from(e,n)),T(e))return 0===e.length?-1:x(t,e,r,n,o);if("number"==typeof e)return e&=255,b.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):x(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function x(t,e,r,n,o){var i,a=1,s=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,r/=2}function f(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(o){var l=-1;for(i=r;is&&(r=s-u),i=r;i>=0;i--){for(var c=!0,h=0;ho&&(n=o):n=o;var i=e.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function k(t,e,r){return 0===e&&r===t.length?h(t):h(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var n=[],o=e;o239?4:f>223?3:f>191?2:1;if(o+c<=r)switch(c){case 1:f<128&&(l=f);break;case 2:128==(192&(i=t[o+1]))&&(u=(31&f)<<6|63&i)>127&&(l=u);break;case 3:i=t[o+1],a=t[o+2],128==(192&i)&&128==(192&a)&&(u=(15&f)<<12|(63&i)<<6|63&a)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:i=t[o+1],a=t[o+2],s=t[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(u=(15&f)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(l=u)}null===l?(l=65533,c=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),o+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return F(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return N(this,e,r);case"latin1":case"binary":return q(this,e,r);case"base64":return k(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return W(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},b.prototype.equals=function(t){if(!T(t))throw new TypeError("Argument must be a Buffer");return this===t||0===b.compare(this,t)},b.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),""},b.prototype.compare=function(t,e,r,n,o){if(!T(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,o>>>=0,this===t)return 0;for(var i=o-n,a=r-e,s=Math.min(i,a),u=this.slice(n,o),f=t.slice(e,r),l=0;lo)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return j(this,t,e,r);case"utf8":case"utf-8":return R(this,t,e,r);case"ascii":return I(this,t,e,r);case"latin1":case"binary":return U(this,t,e,r);case"base64":return M(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},b.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;function N(t,e,r){var n="";r=Math.min(t.length,r);for(var o=e;on)&&(r=n);for(var o="",i=e;ir)throw new RangeError("Trying to access beyond buffer length")}function z(t,e,r,n,o,i){if(!T(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||et.length)throw new RangeError("Index out of range")}function $(t,e,r,n){e<0&&(e=65535+e+1);for(var o=0,i=Math.min(t.length-r,2);o>>8*(n?o:1-o)}function H(t,e,r,n){e<0&&(e=4294967295+e+1);for(var o=0,i=Math.min(t.length-r,4);o>>8*(n?o:3-o)&255}function J(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function Y(t,e,r,n,o){return o||J(t,0,r,4),y(t,e,r,n,23,4),r+4}function V(t,e,r,n,o){return o||J(t,0,r,8),y(t,e,r,n,52,8),r+8}b.prototype.slice=function(t,e){var r,n=this.length;if(t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(o*=256);)n+=this[t+--e]*o;return n},b.prototype.readUInt8=function(t,e){return e||G(t,1,this.length),this[t]},b.prototype.readUInt16LE=function(t,e){return e||G(t,2,this.length),this[t]|this[t+1]<<8},b.prototype.readUInt16BE=function(t,e){return e||G(t,2,this.length),this[t]<<8|this[t+1]},b.prototype.readUInt32LE=function(t,e){return e||G(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},b.prototype.readUInt32BE=function(t,e){return e||G(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},b.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||G(t,e,this.length);for(var n=this[t],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*e)),n},b.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||G(t,e,this.length);for(var n=e,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*e)),i},b.prototype.readInt8=function(t,e){return e||G(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},b.prototype.readInt16LE=function(t,e){e||G(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},b.prototype.readInt16BE=function(t,e){e||G(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},b.prototype.readInt32LE=function(t,e){return e||G(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},b.prototype.readInt32BE=function(t,e){return e||G(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},b.prototype.readFloatLE=function(t,e){return e||G(t,4,this.length),p(this,t,!0,23,4)},b.prototype.readFloatBE=function(t,e){return e||G(t,4,this.length),p(this,t,!1,23,4)},b.prototype.readDoubleLE=function(t,e){return e||G(t,8,this.length),p(this,t,!0,52,8)},b.prototype.readDoubleBE=function(t,e){return e||G(t,8,this.length),p(this,t,!1,52,8)},b.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||z(this,t,e,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[e]=255&t;++i=0&&(i*=256);)this[e+o]=t/i&255;return e+r},b.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,1,255,0),b.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},b.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,2,65535,0),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):$(this,t,e,!0),e+2},b.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,2,65535,0),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):$(this,t,e,!1),e+2},b.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,4,4294967295,0),b.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):H(this,t,e,!0),e+4},b.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,4,4294967295,0),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},b.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var o=Math.pow(2,8*r-1);z(this,t,e,r,o-1,-o)}var i=0,a=1,s=0;for(this[e]=255&t;++i>0)-s&255;return e+r},b.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var o=Math.pow(2,8*r-1);z(this,t,e,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[e+i]=255&t;--i>=0&&(a*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/a>>0)-s&255;return e+r},b.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,1,127,-128),b.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},b.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,2,32767,-32768),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):$(this,t,e,!0),e+2},b.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,2,32767,-32768),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):$(this,t,e,!1),e+2},b.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,4,2147483647,-2147483648),b.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):H(this,t,e,!0),e+4},b.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||z(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),b.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},b.prototype.writeFloatLE=function(t,e,r){return Y(this,t,e,!0,r)},b.prototype.writeFloatBE=function(t,e,r){return Y(this,t,e,!1,r)},b.prototype.writeDoubleLE=function(t,e,r){return V(this,t,e,!0,r)},b.prototype.writeDoubleBE=function(t,e,r){return V(this,t,e,!1,r)},b.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else if(i<1e3||!b.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(i=e;i55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function Z(t){return function(t){var e,r,n,o,i,a;f||l();var c=t.length;if(c%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===t[c-2]?2:"="===t[c-1]?1:0,a=new u(3*c/4-i),n=i>0?c-4:c;var h=0;for(e=0,r=0;e>16&255,a[h++]=o>>8&255,a[h++]=255&o;return 2===i?(o=s[t.charCodeAt(e)]<<2|s[t.charCodeAt(e+1)]>>4,a[h++]=255&o):1===i&&(o=s[t.charCodeAt(e)]<<10|s[t.charCodeAt(e+1)]<<4|s[t.charCodeAt(e+2)]>>2,a[h++]=o>>8&255,a[h++]=255&o),a}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(X,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function tt(t,e,r,n){for(var o=0;o=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function et(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}const rt={level:{LNone:"none",LError:"error",LDebug:"debug",LTrace:"trace"}},nt={formats:{JSON:"json",TEXT:"text"}};class ot{get logLevelEnum(){return rt}get logFormatEnum(){return nt}constructor(){this.log_level=rt.level.LNone,this.log_format=nt.formats.TEXT,this.log_to_console=!0,this.log_file_path,this.log_response_body=!1,this.log_request_body=!1,this.setLogger()}setLogger(){}log(t,e,r,n,o,i,a,s){var u=this.formatLog(t,e,r,n,o,i,a,s);"undefined"!=typeof window?this.calculateLogLevel(t)>0&&!0===this.log_to_console&&(this.log_format===this.logFormatEnum.formats.JSON?console.log(u):console.log(`${t.toUpperCase()}: ${u}`)):this.logger.transports.length>0&&this.logger.log(t,u)}calculateLogLevel(t){switch(this.log_level){case this.logLevelEnum.level.LError:return t!==this.logLevelEnum.level.LError?-1:1;case this.logLevelEnum.level.LDebug:return t===this.logLevelEnum.level.LTrace?-1:1;case this.logLevelEnum.level.LTrace:return 1;default:return-1}}formatLog(t,e,r,n,o,i,a,s){var u;return o&&(o.Authorization="[REDACTED]"),this.log_request_body||(a=void 0),this.log_response_body||(s=void 0),this.log_format&&this.log_format===nt.formats.JSON?(u={level:t,date:(new Date).toISOString(),method:r,url:decodeURIComponent(n),correlationId:i&&i["inin-correlation-id"]?i["inin-correlation-id"]:"",statusCode:e},o&&(u.requestHeaders=o),i&&(u.responseHeaders=i),a&&(u.requestBody=a),s&&(u.responseBody=s)):u=`${(new Date).toISOString()}\n=== REQUEST === \n${this.formatValue("URL",decodeURIComponent(n))}${this.formatValue("Method",r)}${this.formatValue("Headers",this.formatHeaderString(o))}${this.formatValue("Body",a?JSON.stringify(a,null,2):"")}\n=== RESPONSE ===\n${this.formatValue("Status",e)}${this.formatValue("Headers",this.formatHeaderString(i))}${this.formatValue("CorrelationId",i&&i["inin-correlation-id"]?i["inin-correlation-id"]:"")}${this.formatValue("Body",s?JSON.stringify(s,null,2):"")}`,u}formatHeaderString(t){var e="";if(!t)return e;for(const[r,n]of Object.entries(t))e+=`\n\t${r}: ${n}`;return e}formatValue(t,e){return e&&""!==e&&"{}"!==e?`${t}: ${e}\n`:""}getLogLevel(t){switch(t){case"error":return rt.level.LError;case"debug":return rt.level.LDebug;case"trace":return rt.level.LTrace;default:return rt.level.LNone}}getLogFormat(t){switch(t){case"json":return nt.formats.JSON;default:return nt.formats.TEXT}}}class it{get instance(){return it.instance}set instance(t){it.instance=t}constructor(){if(it.instance||(it.instance=this),"undefined"!=typeof window)this.configPath="";else{const e=t("os"),r=t("path");this.configPath=r.join(e.homedir(),".genesyscloudjavascript-guest","config")}this.live_reload_config=!0,this.host,this.environment,this.basePath,this.authUrl,this.config,this.logger=new ot,this.setEnvironment(),this.liveLoadConfig()}liveLoadConfig(){this.configPath=""}setConfigPath(t){t&&t!==this.configPath&&(this.configPath=t,this.liveLoadConfig())}updateConfigFromFile(){}updateConfigValues(){this.logger.log_level=this.logger.getLogLevel(this.getConfigString("logging","log_level")),this.logger.log_format=this.logger.getLogFormat(this.getConfigString("logging","log_format")),this.logger.log_to_console=void 0!==this.getConfigBoolean("logging","log_to_console")?this.getConfigBoolean("logging","log_to_console"):this.logger.log_to_console,this.logger.log_file_path=void 0!==this.getConfigString("logging","log_file_path")?this.getConfigString("logging","log_file_path"):this.logger.log_file_path,this.logger.log_response_body=void 0!==this.getConfigBoolean("logging","log_response_body")?this.getConfigBoolean("logging","log_response_body"):this.logger.log_response_body,this.logger.log_request_body=void 0!==this.getConfigBoolean("logging","log_request_body")?this.getConfigBoolean("logging","log_request_body"):this.logger.log_request_body,this.live_reload_config=void 0!==this.getConfigBoolean("general","live_reload_config")?this.getConfigBoolean("general","live_reload_config"):this.live_reload_config,this.host=void 0!==this.getConfigString("general","host")?this.getConfigString("general","host"):this.host,this.setEnvironment(),this.logger.setLogger()}setEnvironment(t){this.environment=t||(this.host?this.host:"mypurecloud.com"),this.environment=this.environment.replace(/\/+$/,""),this.environment.startsWith("https://")&&(this.environment=this.environment.substring(8)),this.environment.startsWith("http://")&&(this.environment=this.environment.substring(7)),this.environment.startsWith("api.")&&(this.environment=this.environment.substring(4)),this.basePath=`https://api.${this.environment}`,this.authUrl=`https://login.${this.environment}`}getConfigString(t,e){if(this.config._sections[t])return this.config._sections[t][e]}getConfigBoolean(t,e){if(this.config._sections[t]&&void 0!==this.config._sections[t][e])return"string"==typeof this.config._sections[t][e]?"true"===this.config._sections[t][e]:this.config._sections[t][e]}}class at{get instance(){return at.instance}set instance(t){at.instance=t}constructor(){at.instance||(at.instance=this),this.CollectionFormatEnum={CSV:",",SSV:" ",TSV:"\t",PIPES:"|",MULTI:"multi"};try{localStorage.setItem("purecloud_local_storage_test","purecloud_local_storage_test"),localStorage.removeItem("purecloud_local_storage_test"),this.hasLocalStorage=!0}catch(t){this.hasLocalStorage=!1}this.config=new it,this.setEnvironment("https://api.mypurecloud.com"),this.authentications={"PureCloud OAuth":{type:"oauth2"},"Guest Chat JWT":{type:"apiKey",in:"header",name:"Authorization",apiKeyPrefix:"Bearer"}},this.defaultHeaders={},this.timeout=16e3,this.authData={},this.settingsPrefix="purecloud",this.superagent=n.default,"undefined"!=typeof window&&(window.ApiClient=this)}setReturnExtendedResponses(t){this.returnExtended=t}setPersistSettings(t,e){this.persistSettings=t,this.settingsPrefix=e?e.replace(/\W+/g,"_"):"purecloud"}_saveSettings(t){try{if(this.authData.apiKey=t.apiKey,this.authentications["Guest Chat JWT"].apiKey=t.apiKey,t.state&&(this.authData.state=t.state),t.tokenExpiryTime&&(this.authData.tokenExpiryTime=t.tokenExpiryTime,this.authData.tokenExpiryTimeString=t.tokenExpiryTimeString),!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;let e=JSON.parse(JSON.stringify(this.authData));delete e.state,localStorage.setItem(`${this.settingsPrefix}_auth_data`,JSON.stringify(e))}catch(t){console.error(t)}}_loadSettings(){if(!0!==this.persistSettings)return;if(!this.hasLocalStorage)return;const t=this.authData.state;this.authData=localStorage.getItem(`${this.settingsPrefix}_auth_data`),this.authData?this.authData=JSON.parse(this.authData):this.authData={},this.authData.apiKey&&this.setJwt(this.authData.apiKey),this.authData.state=t}setEnvironment(t){this.config.setEnvironment(t)}_testTokenAccess(){return new Promise((t,e)=>{this._loadSettings(),this.authentications["Guest Chat JWT"].apiKey?this.callApi("/api/v2/authorization/permissions","GET",null,null,null,null,null,["Guest Chat JWT"],["application/json"],["application/json"]).then(()=>{t()}).catch(t=>{this._saveSettings({apiKey:void 0}),e(t)}):e(new Error("Token is not set"))})}setJwt(t){this._saveSettings({apiKey:t})}setStorageKey(t){this.storageKey=t,this.setJwt(this.authentications["Guest Chat JWT"].apiKey)}_buildAuthUrl(t,e){return e||(e={}),Object.keys(e).reduce((t,r)=>e[r]?`${t}&${r}=${e[r]}`:t,`${this.config.authUrl}/${t}?`)}paramToString(t){return t?t instanceof Date?t.toJSON():t.toString():""}buildUrl(t,e){t.match(/^\//)||(t=`/${t}`);var r=this.config.basePath+t;return r=r.replace(/\{([\w-]+)\}/g,(t,r)=>{var n;return n=e.hasOwnProperty(r)?this.paramToString(e[r]):t,encodeURIComponent(n)})}isJsonMime(t){return Boolean(t&&t.match(/^application\/json(;.*)?$/i))}jsonPreferredMime(t){for(var e=0;e{var r=this.authentications[e];switch(r.type){case"basic":(r.username||r.password)&&t.auth(r.username||"",r.password||"");break;case"apiKey":if(r.apiKey){var n={};r.apiKeyPrefix?n[r.name]=`${r.apiKeyPrefix} ${r.apiKey}`:n[r.name]=r.apiKey,"header"===r.in?t.set(n):t.query(n)}break;case"oauth2":r.accessToken&&t.set({Authorization:`Bearer ${r.accessToken}`});break;default:throw new Error(`Unknown authentication type: ${r.type}`)}})}callApi(t,e,r,o,i,a,s,u,f,l){var c=this.buildUrl(t,r),h=n.default(e,c);this.proxy&&h.proxy&&h.proxy(this.proxy),this.applyAuthToRequest(h,u),h.query(this.normalizeParams(o)),h.set(this.defaultHeaders).set(this.normalizeParams(i)),h.timeout(this.timeout);var p=this.jsonPreferredMime(f);if(p?h.type(p):h.header["Content-Type"]||h.type("application/json"),"application/x-www-form-urlencoded"===p)h.send(this.normalizeParams(a));else if("multipart/form-data"==p){var y=this.normalizeParams(a);for(var d in y)y.hasOwnProperty(d)&&(this.isFileParam(y[d])?h.attach(d,y[d]):h.field(d,y[d]))}else s&&h.send(s);var g=this.jsonPreferredMime(l);return g&&h.accept(g),new Promise((t,r)=>{h.end((n,o)=>{if(!n||o){var i=!0===this.returnExtended||n?{status:o.status,statusText:o.statusText,headers:o.headers,body:o.body,text:o.text,error:n}:o.body?o.body:o.text;this.config.logger.log("trace",o.statusCode,e,c,h.header,o.headers,s,void 0),this.config.logger.log("debug",o.statusCode,e,c,h.header,void 0,s,void 0),n?(this.config.logger.log("error",o.statusCode,e,c,h.header,o.headers,s,o.body),r(i)):t(i)}else r({status:0,statusText:"error",headers:[],body:{},text:"error",error:n})})})}}class st{constructor(t){this.apiClient=t||at.instance}deleteWebchatGuestConversationMember(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling deleteWebchatGuestConversationMember';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling deleteWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","DELETE",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequest(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequest';if(void 0===e||null===e)throw'Missing the required parameter "mediaRequestId" when calling getWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","GET",{conversationId:t,mediaRequestId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMediarequests(t){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMediarequests';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests","GET",{conversationId:t},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMember(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMember';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling getWebchatGuestConversationMember';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}","GET",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMembers(t,e){if(e=e||{},void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMembers';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members","GET",{conversationId:t},{pageSize:e.pageSize,pageNumber:e.pageNumber,excludeDisconnectedMembers:e.excludeDisconnectedMembers},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessage(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessage';if(void 0===e||null===e)throw'Missing the required parameter "messageId" when calling getWebchatGuestConversationMessage';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}","GET",{conversationId:t,messageId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}getWebchatGuestConversationMessages(t,e){if(e=e||{},void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling getWebchatGuestConversationMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/messages","GET",{conversationId:t},{after:e.after,before:e.before,sortOrder:e.sortOrder,maxResults:e.maxResults},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}patchWebchatGuestConversationMediarequest(t,e,r){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling patchWebchatGuestConversationMediarequest';if(void 0===e||null===e)throw'Missing the required parameter "mediaRequestId" when calling patchWebchatGuestConversationMediarequest';if(void 0===r||null===r)throw'Missing the required parameter "body" when calling patchWebchatGuestConversationMediarequest';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}","PATCH",{conversationId:t,mediaRequestId:e},{},{},{},r,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberMessages(t,e,r){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberMessages';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberMessages';if(void 0===r||null===r)throw'Missing the required parameter "body" when calling postWebchatGuestConversationMemberMessages';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages","POST",{conversationId:t,memberId:e},{},{},{},r,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversationMemberTyping(t,e){if(void 0===t||null===t)throw'Missing the required parameter "conversationId" when calling postWebchatGuestConversationMemberTyping';if(void 0===e||null===e)throw'Missing the required parameter "memberId" when calling postWebchatGuestConversationMemberTyping';return this.apiClient.callApi("/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing","POST",{conversationId:t,memberId:e},{},{},{},null,["Guest Chat JWT"],["application/json"],["application/json"])}postWebchatGuestConversations(t){if(void 0===t||null===t)throw'Missing the required parameter "body" when calling postWebchatGuestConversations';return this.apiClient.callApi("/api/v2/webchat/guest/conversations","POST",{},{},{},{},t,[],["application/json"],["application/json"])}}var ut=new class{constructor(){this.ApiClient=new at,this.WebChatApi=st,this.PureCloudRegionHosts=o}};e.exports=ut}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{buffer:3,os:5,path:6,superagent:26}]},{},[]); \ No newline at end of file diff --git a/build/docs/index.md b/build/docs/index.md index 8163b76f..614d2194 100644 --- a/build/docs/index.md +++ b/build/docs/index.md @@ -31,7 +31,7 @@ For direct use in a browser script: ```{"language":"html"} - + @@ -277,9 +277,6 @@ Extended response object example (`body` and `text` have been truncated): "status": 200, "statusText": "", "headers": { - "inin-ratelimit-allowed": "180", - "inin-ratelimit-count": "3", - "inin-ratelimit-reset": "3", "pragma": "no-cache", "inin-correlation-id": "ec35f2a8-289b-42d4-8893-c50eaf81a3c1", "content-type": "application/json", @@ -328,9 +325,6 @@ Example error response object: "status": 404, "statusText": "", "headers": { - "inin-ratelimit-allowed": "300", - "inin-ratelimit-count": "6", - "inin-ratelimit-reset": "38", "pragma": "no-cache", "inin-correlation-id": "d11bd3b3-ab7e-4fd4-9687-d04af9f30a63", "content-type": "application/json", diff --git a/build/docs/releaseNotes.md b/build/docs/releaseNotes.md index fd627bac..cfd6365e 100644 --- a/build/docs/releaseNotes.md +++ b/build/docs/releaseNotes.md @@ -1,102 +1,12 @@ -Platform API version: 4784 +Platform API version: 5516 -# Release notes - -* Forcing a major release to ensure SDKs align with API definition +Adds API Data # Major Changes (0 changes) -# Minor Changes (11 changes) - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 408 was added - -**DELETE /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 408 was added - -**PATCH /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members** (1 change) - -* Response 408 was added - - -# Point Changes (11 changes) - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**DELETE /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**PATCH /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds +# Minor Changes (0 changes) -**GET /api/v2/webchat/guest/conversations/{conversationId}/members** (1 change) -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds +# Point Changes (0 changes) diff --git a/build/index.d.ts b/build/index.d.ts index 844e4800..48dfae26 100644 --- a/build/index.d.ts +++ b/build/index.d.ts @@ -1,5 +1,4 @@ import platformClient = require('purecloud-guest-chat-client'); -import Configuration = require('./src/purecloud-guest-chat-client/configuration'); declare module 'purecloud-guest-chat-client' { export const ApiClient: ApiClientClass; @@ -36,6 +35,32 @@ declare class ProxyConfig { protocol: string; } +declare class Configuration { + instance: Configuration; + configPath: string; + live_reload_config: boolean; + host: string; + environment: string; + basePath: string; + authUrl: string; + logger: Logger; + config: any; + setEnvironment(environment: string): void; +} + +declare class Logger { + log_level: string; + log_format: string; + log_file_path: string; + log_to_console: boolean; + log_response_body: boolean; + log_request_body: boolean; + logLevels: any; + logLevelEnum: any; + logFormatEnum: any; + setLogger(): void; +} + declare class WebChatApi { deleteWebchatGuestConversationMember(conversationId: string, memberId: string): Promise; getWebchatGuestConversationMediarequest(conversationId: string, mediaRequestId: string): Promise; @@ -185,10 +210,10 @@ declare namespace Models { "pageNumber"?: number; "total"?: number; "firstUri"?: string; - "previousUri"?: string; - "lastUri"?: string; "selfUri"?: string; "nextUri"?: string; + "previousUri"?: string; + "lastUri"?: string; "pageCount"?: number; } diff --git a/build/node_modules/.bin/flat b/build/node_modules/.bin/flat new file mode 120000 index 00000000..5fed16be --- /dev/null +++ b/build/node_modules/.bin/flat @@ -0,0 +1 @@ +../flat/cli.js \ No newline at end of file diff --git a/build/node_modules/.bin/he b/build/node_modules/.bin/he new file mode 120000 index 00000000..2a8eb5e0 --- /dev/null +++ b/build/node_modules/.bin/he @@ -0,0 +1 @@ +../he/bin/he \ No newline at end of file diff --git a/build/node_modules/.bin/jade b/build/node_modules/.bin/jade deleted file mode 120000 index 571fae73..00000000 --- a/build/node_modules/.bin/jade +++ /dev/null @@ -1 +0,0 @@ -../jade/bin/jade \ No newline at end of file diff --git a/build/node_modules/.bin/js-yaml b/build/node_modules/.bin/js-yaml new file mode 120000 index 00000000..9dbd010d --- /dev/null +++ b/build/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/build/node_modules/.bin/nanoid b/build/node_modules/.bin/nanoid new file mode 120000 index 00000000..e2be547b --- /dev/null +++ b/build/node_modules/.bin/nanoid @@ -0,0 +1 @@ +../nanoid/bin/nanoid.cjs \ No newline at end of file diff --git a/build/node_modules/.bin/node-which b/build/node_modules/.bin/node-which new file mode 120000 index 00000000..6f8415ec --- /dev/null +++ b/build/node_modules/.bin/node-which @@ -0,0 +1 @@ +../which/bin/node-which \ No newline at end of file diff --git a/build/node_modules/.bin/resolve b/build/node_modules/.bin/resolve new file mode 120000 index 00000000..b6afda6c --- /dev/null +++ b/build/node_modules/.bin/resolve @@ -0,0 +1 @@ +../resolve/bin/resolve \ No newline at end of file diff --git a/build/node_modules/.bin/semver b/build/node_modules/.bin/semver index 317eb293..5aaadf42 120000 --- a/build/node_modules/.bin/semver +++ b/build/node_modules/.bin/semver @@ -1 +1 @@ -../semver/bin/semver \ No newline at end of file +../semver/bin/semver.js \ No newline at end of file diff --git a/build/node_modules/.bin/supports-color b/build/node_modules/.bin/supports-color deleted file mode 120000 index af0f05ef..00000000 --- a/build/node_modules/.bin/supports-color +++ /dev/null @@ -1 +0,0 @@ -../supports-color/cli.js \ No newline at end of file diff --git a/build/node_modules/@colors/colors/LICENSE b/build/node_modules/@colors/colors/LICENSE new file mode 100644 index 00000000..6b860561 --- /dev/null +++ b/build/node_modules/@colors/colors/LICENSE @@ -0,0 +1,26 @@ +MIT License + +Original Library + - Copyright (c) Marak Squires + +Additional Functionality + - Copyright (c) Sindre Sorhus (sindresorhus.com) + - Copyright (c) DABH (https://github.com/DABH) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/@colors/colors/README.md b/build/node_modules/@colors/colors/README.md new file mode 100644 index 00000000..e2479ce5 --- /dev/null +++ b/build/node_modules/@colors/colors/README.md @@ -0,0 +1,219 @@ +# @colors/colors ("colors.js") +[![Build Status](https://github.com/DABH/colors.js/actions/workflows/ci.yml/badge.svg)](https://github.com/DABH/colors.js/actions/workflows/ci.yml) +[![version](https://img.shields.io/npm/v/@colors/colors.svg)](https://www.npmjs.org/package/@colors/colors) + +Please check out the [roadmap](ROADMAP.md) for upcoming features and releases. Please open Issues to provide feedback. + +## get color and style in your node.js console + +![Demo](https://raw.githubusercontent.com/DABH/colors.js/master/screenshots/colors.png) + +## Installation + + npm install @colors/colors + +## colors and styles! + +### text colors + + - black + - red + - green + - yellow + - blue + - magenta + - cyan + - white + - gray + - grey + +### bright text colors + + - brightRed + - brightGreen + - brightYellow + - brightBlue + - brightMagenta + - brightCyan + - brightWhite + +### background colors + + - bgBlack + - bgRed + - bgGreen + - bgYellow + - bgBlue + - bgMagenta + - bgCyan + - bgWhite + - bgGray + - bgGrey + +### bright background colors + + - bgBrightRed + - bgBrightGreen + - bgBrightYellow + - bgBrightBlue + - bgBrightMagenta + - bgBrightCyan + - bgBrightWhite + +### styles + + - reset + - bold + - dim + - italic + - underline + - inverse + - hidden + - strikethrough + +### extras + + - rainbow + - zebra + - america + - trap + - random + + +## Usage + +By popular demand, `@colors/colors` now ships with two types of usages! + +The super nifty way + +```js +var colors = require('@colors/colors'); + +console.log('hello'.green); // outputs green text +console.log('i like cake and pies'.underline.red); // outputs red underlined text +console.log('inverse the color'.inverse); // inverses the color +console.log('OMG Rainbows!'.rainbow); // rainbow +console.log('Run the trap'.trap); // Drops the bass + +``` + +or a slightly less nifty way which doesn't extend `String.prototype` + +```js +var colors = require('@colors/colors/safe'); + +console.log(colors.green('hello')); // outputs green text +console.log(colors.red.underline('i like cake and pies')); // outputs red underlined text +console.log(colors.inverse('inverse the color')); // inverses the color +console.log(colors.rainbow('OMG Rainbows!')); // rainbow +console.log(colors.trap('Run the trap')); // Drops the bass + +``` + +I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way. + +If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object. + +## Enabling/Disabling Colors + +The package will auto-detect whether your terminal can use colors and enable/disable accordingly. When colors are disabled, the color functions do nothing. You can override this with a command-line flag: + +```bash +node myapp.js --no-color +node myapp.js --color=false + +node myapp.js --color +node myapp.js --color=true +node myapp.js --color=always + +FORCE_COLOR=1 node myapp.js +``` + +Or in code: + +```javascript +var colors = require('@colors/colors'); +colors.enable(); +colors.disable(); +``` + +## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data) + +```js +var name = 'Beowulf'; +console.log(colors.green('Hello %s'), name); +// outputs -> 'Hello Beowulf' +``` + +## Custom themes + +### Using standard API + +```js + +var colors = require('@colors/colors'); + +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); +``` + +### Using string safe API + +```js +var colors = require('@colors/colors/safe'); + +// set single property +var error = colors.red; +error('this is red'); + +// set theme +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +``` + +### Combining Colors + +```javascript +var colors = require('@colors/colors'); + +colors.setTheme({ + custom: ['red', 'underline'] +}); + +console.log('test'.custom); +``` + +*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.* diff --git a/build/node_modules/colors/examples/normal-usage.js b/build/node_modules/@colors/colors/examples/normal-usage.js similarity index 98% rename from build/node_modules/colors/examples/normal-usage.js rename to build/node_modules/@colors/colors/examples/normal-usage.js index 822db1cc..a4bfe7b7 100644 --- a/build/node_modules/colors/examples/normal-usage.js +++ b/build/node_modules/@colors/colors/examples/normal-usage.js @@ -29,6 +29,7 @@ console.log('Background color attack!'.black.bgWhite); console.log('Use random styles on everything!'.random); console.log('America, Heck Yeah!'.america); +// eslint-disable-next-line max-len console.log('Blindingly '.brightCyan + 'bright? '.brightRed + 'Why '.brightYellow + 'not?!'.brightGreen); console.log('Setting themes is useful'); diff --git a/build/node_modules/colors/examples/safe-string.js b/build/node_modules/@colors/colors/examples/safe-string.js similarity index 98% rename from build/node_modules/colors/examples/safe-string.js rename to build/node_modules/@colors/colors/examples/safe-string.js index 5bc0168e..fc664745 100644 --- a/build/node_modules/colors/examples/safe-string.js +++ b/build/node_modules/@colors/colors/examples/safe-string.js @@ -28,6 +28,7 @@ console.log(colors.black.bgWhite('Background color attack!')); console.log(colors.random('Use random styles on everything!')); console.log(colors.america('America, Heck Yeah!')); +// eslint-disable-next-line max-len console.log(colors.brightCyan('Blindingly ') + colors.brightRed('bright? ') + colors.brightYellow('Why ') + colors.brightGreen('not?!')); console.log('Setting themes is useful'); diff --git a/build/node_modules/@colors/colors/index.d.ts b/build/node_modules/@colors/colors/index.d.ts new file mode 100644 index 00000000..df3f2e6a --- /dev/null +++ b/build/node_modules/@colors/colors/index.d.ts @@ -0,0 +1,136 @@ +// Type definitions for @colors/colors 1.4+ +// Project: https://github.com/Marak/colors.js +// Definitions by: Bart van der Schoor , Staffan Eketorp +// Definitions: https://github.com/DABH/colors.js + +export interface Color { + (text: string): string; + + strip: Color; + stripColors: Color; + + black: Color; + red: Color; + green: Color; + yellow: Color; + blue: Color; + magenta: Color; + cyan: Color; + white: Color; + gray: Color; + grey: Color; + + bgBlack: Color; + bgRed: Color; + bgGreen: Color; + bgYellow: Color; + bgBlue: Color; + bgMagenta: Color; + bgCyan: Color; + bgWhite: Color; + + reset: Color; + bold: Color; + dim: Color; + italic: Color; + underline: Color; + inverse: Color; + hidden: Color; + strikethrough: Color; + + rainbow: Color; + zebra: Color; + america: Color; + trap: Color; + random: Color; + zalgo: Color; +} + +export function enable(): void; +export function disable(): void; +export function setTheme(theme: any): void; + +export let enabled: boolean; + +export const strip: Color; +export const stripColors: Color; + +export const black: Color; +export const red: Color; +export const green: Color; +export const yellow: Color; +export const blue: Color; +export const magenta: Color; +export const cyan: Color; +export const white: Color; +export const gray: Color; +export const grey: Color; + +export const bgBlack: Color; +export const bgRed: Color; +export const bgGreen: Color; +export const bgYellow: Color; +export const bgBlue: Color; +export const bgMagenta: Color; +export const bgCyan: Color; +export const bgWhite: Color; + +export const reset: Color; +export const bold: Color; +export const dim: Color; +export const italic: Color; +export const underline: Color; +export const inverse: Color; +export const hidden: Color; +export const strikethrough: Color; + +export const rainbow: Color; +export const zebra: Color; +export const america: Color; +export const trap: Color; +export const random: Color; +export const zalgo: Color; + +declare global { + interface String { + strip: string; + stripColors: string; + + black: string; + red: string; + green: string; + yellow: string; + blue: string; + magenta: string; + cyan: string; + white: string; + gray: string; + grey: string; + + bgBlack: string; + bgRed: string; + bgGreen: string; + bgYellow: string; + bgBlue: string; + bgMagenta: string; + bgCyan: string; + bgWhite: string; + + reset: string; + // @ts-ignore + bold: string; + dim: string; + italic: string; + underline: string; + inverse: string; + hidden: string; + strikethrough: string; + + rainbow: string; + zebra: string; + america: string; + trap: string; + random: string; + zalgo: string; + } +} diff --git a/build/node_modules/colors/lib/colors.js b/build/node_modules/@colors/colors/lib/colors.js similarity index 99% rename from build/node_modules/colors/lib/colors.js rename to build/node_modules/@colors/colors/lib/colors.js index 9c7f1d14..d9fb0876 100644 --- a/build/node_modules/colors/lib/colors.js +++ b/build/node_modules/@colors/colors/lib/colors.js @@ -65,7 +65,7 @@ var stylize = colors.stylize = function stylize(str, style) { var styleMap = ansiStyles[style]; // Stylize should work for non-ANSI styles, too - if(!styleMap && style in colors){ + if (!styleMap && style in colors) { // Style maps like trap operate as functions on strings; // they don't have properties like open or close. return colors[style](str); diff --git a/build/node_modules/colors/lib/custom/trap.js b/build/node_modules/@colors/colors/lib/custom/trap.js similarity index 100% rename from build/node_modules/colors/lib/custom/trap.js rename to build/node_modules/@colors/colors/lib/custom/trap.js diff --git a/build/node_modules/colors/lib/custom/zalgo.js b/build/node_modules/@colors/colors/lib/custom/zalgo.js similarity index 100% rename from build/node_modules/colors/lib/custom/zalgo.js rename to build/node_modules/@colors/colors/lib/custom/zalgo.js diff --git a/build/node_modules/colors/lib/extendStringPrototype.js b/build/node_modules/@colors/colors/lib/extendStringPrototype.js similarity index 100% rename from build/node_modules/colors/lib/extendStringPrototype.js rename to build/node_modules/@colors/colors/lib/extendStringPrototype.js diff --git a/build/node_modules/colors/lib/index.js b/build/node_modules/@colors/colors/lib/index.js similarity index 100% rename from build/node_modules/colors/lib/index.js rename to build/node_modules/@colors/colors/lib/index.js diff --git a/build/node_modules/colors/lib/maps/america.js b/build/node_modules/@colors/colors/lib/maps/america.js similarity index 100% rename from build/node_modules/colors/lib/maps/america.js rename to build/node_modules/@colors/colors/lib/maps/america.js diff --git a/build/node_modules/colors/lib/maps/rainbow.js b/build/node_modules/@colors/colors/lib/maps/rainbow.js similarity index 100% rename from build/node_modules/colors/lib/maps/rainbow.js rename to build/node_modules/@colors/colors/lib/maps/rainbow.js diff --git a/build/node_modules/colors/lib/maps/random.js b/build/node_modules/@colors/colors/lib/maps/random.js similarity index 100% rename from build/node_modules/colors/lib/maps/random.js rename to build/node_modules/@colors/colors/lib/maps/random.js diff --git a/build/node_modules/colors/lib/maps/zebra.js b/build/node_modules/@colors/colors/lib/maps/zebra.js similarity index 100% rename from build/node_modules/colors/lib/maps/zebra.js rename to build/node_modules/@colors/colors/lib/maps/zebra.js diff --git a/build/node_modules/colors/lib/styles.js b/build/node_modules/@colors/colors/lib/styles.js similarity index 100% rename from build/node_modules/colors/lib/styles.js rename to build/node_modules/@colors/colors/lib/styles.js diff --git a/build/node_modules/colors/lib/system/has-flag.js b/build/node_modules/@colors/colors/lib/system/has-flag.js similarity index 100% rename from build/node_modules/colors/lib/system/has-flag.js rename to build/node_modules/@colors/colors/lib/system/has-flag.js diff --git a/build/node_modules/colors/lib/system/supports-colors.js b/build/node_modules/@colors/colors/lib/system/supports-colors.js similarity index 100% rename from build/node_modules/colors/lib/system/supports-colors.js rename to build/node_modules/@colors/colors/lib/system/supports-colors.js diff --git a/build/node_modules/@colors/colors/package.json b/build/node_modules/@colors/colors/package.json new file mode 100644 index 00000000..208fe164 --- /dev/null +++ b/build/node_modules/@colors/colors/package.json @@ -0,0 +1,75 @@ +{ + "_from": "@colors/colors@1.5.0", + "_id": "@colors/colors@1.5.0", + "_inBundle": false, + "_integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "_location": "/@colors/colors", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@colors/colors@1.5.0", + "name": "@colors/colors", + "escapedName": "@colors%2fcolors", + "scope": "@colors", + "rawSpec": "1.5.0", + "saveSpec": null, + "fetchSpec": "1.5.0" + }, + "_requiredBy": [ + "/logform" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@colors/colors/-/colors-1.5.0.tgz", + "_shasum": "bb504579c1cae923e6576a4f5da43d25f97bdbd9", + "_spec": "@colors/colors@1.5.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/logform", + "author": { + "name": "DABH" + }, + "bugs": { + "url": "https://github.com/DABH/colors.js/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "DABH", + "url": "https://github.com/DABH" + } + ], + "deprecated": false, + "description": "get colors in your node.js console", + "devDependencies": { + "eslint": "^5.2.0", + "eslint-config-google": "^0.11.0" + }, + "engines": { + "node": ">=0.1.90" + }, + "files": [ + "examples", + "lib", + "LICENSE", + "safe.js", + "themes", + "index.d.ts", + "safe.d.ts" + ], + "homepage": "https://github.com/DABH/colors.js", + "keywords": [ + "ansi", + "terminal", + "colors" + ], + "license": "MIT", + "main": "lib/index.js", + "name": "@colors/colors", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/DABH/colors.js.git" + }, + "scripts": { + "lint": "eslint . --fix", + "test": "export FORCE_COLOR=1 && node tests/basic-test.js && node tests/safe-test.js" + }, + "version": "1.5.0" +} diff --git a/build/node_modules/colors/safe.d.ts b/build/node_modules/@colors/colors/safe.d.ts similarity index 100% rename from build/node_modules/colors/safe.d.ts rename to build/node_modules/@colors/colors/safe.d.ts diff --git a/build/node_modules/colors/safe.js b/build/node_modules/@colors/colors/safe.js similarity index 100% rename from build/node_modules/colors/safe.js rename to build/node_modules/@colors/colors/safe.js diff --git a/build/node_modules/colors/themes/generic-logging.js b/build/node_modules/@colors/colors/themes/generic-logging.js similarity index 100% rename from build/node_modules/colors/themes/generic-logging.js rename to build/node_modules/@colors/colors/themes/generic-logging.js diff --git a/build/node_modules/@dabh/diagnostics/README.md b/build/node_modules/@dabh/diagnostics/README.md index 9354a74e..0cd25195 100644 --- a/build/node_modules/@dabh/diagnostics/README.md +++ b/build/node_modules/@dabh/diagnostics/README.md @@ -19,7 +19,7 @@ The module is released in the public npm registry and can be installed by running: ``` -npm install --save diagnostics +npm install --save @dabh/diagnostics ``` ## Usage @@ -47,7 +47,7 @@ npm install --save diagnostics ### Introduction -To create a new logger simply `require` the `diagnostics` module and call +To create a new logger simply `require` the `@dabh/diagnostics` module and call the returned function. It accepts 2 arguments: 1. `namespace` **Required** This is the namespace of your logger so we know if we need to @@ -62,8 +62,8 @@ the returned function. It accepts 2 arguments: option to `false` to disable it. ```js -const debug = require('diagnostics')('foo:bar:baz'); -const debug = require('diagnostics')('foo:bar:baz', { options }); +const debug = require('@dabh/diagnostics')('foo:bar:baz'); +const debug = require('@dabh/diagnostics')('foo:bar:baz', { options }); debug('this is a log message %s', 'that will only show up when enabled'); debug('that is pretty neat', { log: 'more', data: 1337 }); @@ -102,7 +102,7 @@ of past log messages, and output those when an uncaught exception happens in your application so you have additional context ```js -const diagnostics = require('diagnostics'); +const diagnostics = require('@dabh/diagnostics'); let index = 0; const limit = 200; @@ -133,7 +133,7 @@ queue of all debug messages that can be referenced when your application crashes #### Production and development builds -When you `require` the `diagnostics` module you will be given a logger that is +When you `require` the `@dabh/diagnostics` module you will be given a logger that is optimized for `development` so it can provide the best developer experience possible. @@ -149,7 +149,7 @@ messages in production. You can `force` the debugger to be enabled, and supply a [custom logger](#loggers). ```js -const diagnostics = require('diagnostics'); +const diagnostics = require('@dabh/diagnostics'); const debug = debug('foo:bar', { force: true }); // @@ -197,7 +197,7 @@ The returned logger will have a `.enabled` property assigned to it. This boolean can be used to check if the logger was enabled: ```js -const debug = require('diagnostics')('foo:bar'); +const debug = require('@dabh/diagnostics')('foo:bar'); if (debug.enabled) { // @@ -216,7 +216,7 @@ This property is exposed as: This is the namespace that you originally provided to the function. ```js -const debug = require('diagnostics')('foo:bar'); +const debug = require('@dabh/diagnostics')('foo:bar'); console.log(debug.namespace); // foo:bar ``` @@ -235,7 +235,7 @@ The `dev` and `prod` booleans on the returned logger indicate if you have a production or development version of the logger. ```js -const debug = require('diagnostics')('foo:bar'); +const debug = require('@dabh/diagnostics')('foo:bar'); if (debug.prod) { // do stuff @@ -260,7 +260,7 @@ want. It receives 2 arguments: 2. `args` An array of the log messages that needs to be written. ```js -const debug = require('diagnostics')('foo:more:namespaces'); +const debug = require('@dabh/diagnostics')('foo:more:namespaces'); debug.use(function logger(meta, args) { console.log(meta); @@ -285,7 +285,7 @@ message after modification. The function receives 2 arguments: initially created. ```js -const debug = require('diagnostics')('example:modifiers'); +const debug = require('@dabh/diagnostics')('example:modifiers'); debug.modify(function (message, options) { return messages; @@ -307,7 +307,7 @@ should be a function returns a boolean that indicates if the passed in `namespace` is allowed to write log messages. ```js -const diagnostics = require('diagnostics'); +const diagnostics = require('@dabh/diagnostics'); const debug = diagnostics('foo:bar'); debug.use(function (namespace) { @@ -335,7 +335,7 @@ For example, you want the messages to be prefixed with the date-time of when the log message occured: ```js -const diagnostics = require('diagnostics'); +const diagnostics = require('@dabh/diagnostics'); diagnostics.modify(function datetime(args, options) { args.unshift(new Date()); @@ -378,9 +378,9 @@ will receive the `namespace` of a logger as argument and it should return a boolean that indicates if that logger should be enabled or not. ```js -const debug = require('diagnostics')('example:namespace'); +const debug = require('@dabh/diagnostics')('example:namespace'); -debug.adapter(require('diagnostics/adapters/localstorage')); +debug.adapter(require('@dabh/diagnostics/adapters/localstorage')); ``` The modifiers are only enabled for `development`. The following adapters are diff --git a/build/node_modules/@dabh/diagnostics/example.png b/build/node_modules/@dabh/diagnostics/example.png deleted file mode 100644 index 323bc7c445c7165f82385baf2415b3fad41b16f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310926 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

=Xyi?`Wg)u5P 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%0AQho)`?^@Bs94mfnRbQSO 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 z%0D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 z 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 +Default: `[]` + +Some modules contain dynamic `require` calls, or require modules that contain circular dependencies, which are not handled well by static imports. +Including those modules as `dynamicRequireTargets` will simulate a CommonJS (NodeJS-like) environment for them with support for dynamic and circular dependencies. + +_Note: In extreme cases, this feature may result in some paths being rendered as absolute in the final bundle. The plugin tries to avoid exposing paths from the local machine, but if you are `dynamicRequirePaths` with paths that are far away from your project's folder, that may require replacing strings like `"/Users/John/Desktop/foo-project/"` -> `"/"`._ + +Example: + +```js +commonjs({ + dynamicRequireTargets: [ + // include using a glob pattern (either a string or an array of strings) + 'node_modules/logform/*.js', + + // exclude files that are known to not be required dynamically, this allows for better optimizations + '!node_modules/logform/index.js', + '!node_modules/logform/format.js', + '!node_modules/logform/levels.js', + '!node_modules/logform/browser.js' + ] +}); +``` + +### `exclude` + +Type: `string | string[]`
+Default: `null` + +A [minimatch pattern](https://github.com/isaacs/minimatch), or array of patterns, which specifies the files in the build the plugin should _ignore_. By default, all files with extensions other than those in `extensions` or `".cjs"` are ignored, but you can exclude additional files. See also the `include` option. + +### `include` + +Type: `string | string[]`
+Default: `null` + +A [minimatch pattern](https://github.com/isaacs/minimatch), or array of patterns, which specifies the files in the build the plugin should operate on. By default, all files with extension `".cjs"` or those in `extensions` are included, but you can narrow this list by only including specific files. These files will be analyzed and transpiled if either the analysis does not find ES module specific statements or `transformMixedEsModules` is `true`. + +### `extensions` + +Type: `string[]`
+Default: `['.js']` + +For extensionless imports, search for extensions other than .js in the order specified. Note that you need to make sure that non-JavaScript files are transpiled by another plugin first. + +### `ignoreGlobal` + +Type: `boolean`
+Default: `false` + +If true, uses of `global` won't be dealt with by this plugin. + +### `sourceMap` + +Type: `boolean`
+Default: `true` + +If false, skips source map generation for CommonJS modules. This will improve performance. + +### `transformMixedEsModules` + +Type: `boolean`
+Default: `false` + +Instructs the plugin whether to enable mixed module transformations. This is useful in scenarios with modules that contain a mix of ES `import` statements and CommonJS `require` expressions. Set to `true` if `require` calls should be transformed to imports in mixed modules, or `false` if the `require` expressions should survive the transformation. The latter can be important if the code contains environment detection, or you are coding for an environment with special treatment for `require` calls such as [ElectronJS](https://www.electronjs.org/). See also the "ignore" option. + +### `ignore` + +Type: `string[] | ((id: string) => boolean)`
+Default: `[]` + +Sometimes you have to leave require statements unconverted. Pass an array containing the IDs or an `id => boolean` function. + +### `ignoreTryCatch` + +Type: `boolean | 'remove' | string[] | ((id: string) => boolean)`
+Default: `true` + +In most cases, where `require` calls are inside a `try-catch` clause, they should be left unconverted as it requires an optional dependency that may or may not be installed beside the rolled up package. +Due to the conversion of `require` to a static `import` - the call is hoisted to the top of the file, outside of the `try-catch` clause. + +- `true`: All `require` calls inside a `try` will be left unconverted. +- `false`: All `require` calls inside a `try` will be converted as if the `try-catch` clause is not there. +- `remove`: Remove all `require` calls from inside any `try` block. +- `string[]`: Pass an array containing the IDs to left unconverted. +- `((id: string) => boolean|'remove')`: Pass a function that control individual IDs. + +### `ignoreDynamicRequires` + +Type: `boolean` +Default: false + +Some `require` calls cannot be resolved statically to be translated to imports, e.g. + +```js +function wrappedRequire(target) { + return require(target); +} +wrappedRequire('foo'); +wrappedRequire('bar'); +``` + +When this option is set to `false`, the generated code will either directly throw an error when such a call is encountered or, when `dynamicRequireTargets` is used, when such a call cannot be resolved with a configured dynamic require target. + +Setting this option to `true` will instead leave the `require` call in the code or use it as a fallback for `dynamicRequireTargets`. + +### `esmExternals` + +Type: `boolean | string[] | ((id: string) => boolean)` +Default: `false` + +Controls how to render imports from external dependencies. By default, this plugin assumes that all external dependencies are CommonJS. This means they are rendered as default imports to be compatible with e.g. NodeJS where ES modules can only import a default export from a CommonJS dependency: + +```js +// input +const foo = require('foo'); + +// output +import foo from 'foo'; +``` + +This is likely not desired for ES module dependencies: Here `require` should usually return the namespace to be compatible with how bundled modules are handled. + +If you set `esmExternals` to `true`, this plugins assumes that all external dependencies are ES modules and will adhere to the `requireReturnsDefault` option. If that option is not set, they will be rendered as namespace imports. + +You can also supply an array of ids to be treated as ES modules, or a function that will be passed each external id to determine if it is an ES module. + +### `defaultIsModuleExports` + +Type: `boolean | "auto"`
+Default: `"auto"` + +Controls what is the default export when importing a CommonJS file from an ES module. + +- `true`: The value of the default export is `module.exports`. This currently matches the behavior of Node.js when importing a CommonJS file. + ```js + // mod.cjs + exports.default = 3; + ``` + ```js + import foo from './mod.cjs'; + console.log(foo); // { default: 3 } + ``` +- `false`: The value of the default export is `exports.default`. + ```js + // mod.cjs + exports.default = 3; + ``` + ```js + import foo from './mod.cjs'; + console.log(foo); // 3 + ``` +- `"auto"`: The value of the default export is `exports.default` if the CommonJS file has an `exports.__esModule === true` property; otherwise it's `module.exports`. This makes it possible to import + the default export of ES modules compiled to CommonJS as if they were not compiled. + ```js + // mod.cjs + exports.default = 3; + ``` + ```js + // mod-compiled.cjs + exports.__esModule = true; + exports.default = 3; + ``` + ```js + import foo from './mod.cjs'; + import bar from './mod-compiled.cjs'; + console.log(foo); // { default: 3 } + console.log(bar); // 3 + ``` + +### `requireReturnsDefault` + +Type: `boolean | "namespace" | "auto" | "preferred" | ((id: string) => boolean | "auto" | "preferred")`
+Default: `false` + +Controls what is returned when requiring an ES module from a CommonJS file. When using the `esmExternals` option, this will also apply to external modules. By default, this plugin will render those imports as namespace imports, i.e. + +```js +// input +const foo = require('foo'); + +// output +import * as foo from 'foo'; +``` + +This is in line with how other bundlers handle this situation and is also the most likely behaviour in case Node should ever support this. However there are some situations where this may not be desired: + +- There is code in an external dependency that cannot be changed where a `require` statement expects the default export to be returned from an ES module. +- If the imported module is in the same bundle, Rollup will generate a namespace object for the imported module which can increase bundle size unnecessarily: + + ```js + // input: main.js + const dep = require('./dep.js'); + console.log(dep.default); + + // input: dep.js + export default 'foo'; + + // output + var dep = 'foo'; + + var dep$1 = /*#__PURE__*/ Object.freeze({ + __proto__: null, + default: dep + }); + + console.log(dep$1.default); + ``` + +For these situations, you can change Rollup's behaviour either globally or per module. To change it globally, set the `requireReturnsDefault` option to one of the following values: + +- `false`: This is the default, requiring an ES module returns its namespace. This is the only option that will also add a marker `__esModule: true` to the namespace to support interop patterns in CommonJS modules that are transpiled ES modules. + + ```js + // input + const dep = require('dep'); + console.log(dep); + + // output + import * as dep$1 from 'dep'; + + function getAugmentedNamespace(n) { + var a = Object.defineProperty({}, '__esModule', { value: true }); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty( + a, + k, + d.get + ? d + : { + enumerable: true, + get: function () { + return n[k]; + } + } + ); + }); + return a; + } + + var dep = /*@__PURE__*/ getAugmentedNamespace(dep$1); + + console.log(dep); + ``` + +- `"namespace"`: Like `false`, requiring an ES module returns its namespace, but the plugin does not add the `__esModule` marker and thus creates more efficient code. For external dependencies when using `esmExternals: true`, no additional interop code is generated. + + ```js + // output + import * as dep from 'dep'; + + console.log(dep); + ``` + +- `"auto"`: This is complementary to how [`output.exports`](https://rollupjs.org/guide/en/#outputexports): `"auto"` works in Rollup: If a module has a default export and no named exports, requiring that module returns the default export. In all other cases, the namespace is returned. For external dependencies when using `esmExternals: true`, a corresponding interop helper is added: + + ```js + // output + import * as dep$1 from 'dep'; + + function getDefaultExportFromNamespaceIfNotNamed(n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 + ? n['default'] + : n; + } + + var dep = getDefaultExportFromNamespaceIfNotNamed(dep$1); + + console.log(dep); + ``` + +- `"preferred"`: If a module has a default export, requiring that module always returns the default export, no matter whether additional named exports exist. This is similar to how previous versions of this plugin worked. Again for external dependencies when using `esmExternals: true`, an interop helper is added: + + ```js + // output + import * as dep$1 from 'dep'; + + function getDefaultExportFromNamespaceIfPresent(n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n; + } + + var dep = getDefaultExportFromNamespaceIfPresent(dep$1); + + console.log(dep); + ``` + +- `true`: This will always try to return the default export on require without checking if it actually exists. This can throw at build time if there is no default export. This is how external dependencies are handled when `esmExternals` is not used. The advantage over the other options is that, like `false`, this does not add an interop helper for external dependencies, keeping the code lean: + + ```js + // output + import dep from 'dep'; + + console.log(dep); + ``` + +To change this for individual modules, you can supply a function for `requireReturnsDefault` instead. This function will then be called once for each required ES module or external dependency with the corresponding id and allows you to return different values for different modules. + +## Using with @rollup/plugin-node-resolve + +Since most CommonJS packages you are importing are probably dependencies in `node_modules`, you may need to use [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/master/packages/node-resolve): + +```js +// rollup.config.js +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; + +export default { + input: 'main.js', + output: { + file: 'bundle.js', + format: 'iife', + name: 'MyModule' + }, + plugins: [resolve(), commonjs()] +}; +``` + +## Usage with symlinks + +Symlinks are common in monorepos and are also created by the `npm link` command. Rollup with `@rollup/plugin-node-resolve` resolves modules to their real paths by default. So `include` and `exclude` paths should handle real paths rather than symlinked paths (e.g. `../common/node_modules/**` instead of `node_modules/**`). You may also use a regular expression for `include` that works regardless of base path. Try this: + +```js +commonjs({ + include: /node_modules/ +}); +``` + +Whether symlinked module paths are [realpathed](http://man7.org/linux/man-pages/man3/realpath.3.html) or preserved depends on Rollup's `preserveSymlinks` setting, which is false by default, matching Node.js' default behavior. Setting `preserveSymlinks` to true in your Rollup config will cause `import` and `export` to match based on symlinked paths instead. + +## Strict mode + +ES modules are _always_ parsed in strict mode. That means that certain non-strict constructs (like octal literals) will be treated as syntax errors when Rollup parses modules that use them. Some older CommonJS modules depend on those constructs, and if you depend on them your bundle will blow up. There's basically nothing we can do about that. + +Luckily, there is absolutely no good reason _not_ to use strict mode for everything — so the solution to this problem is to lobby the authors of those modules to update them. + +## Inter-plugin-communication + +This plugin exposes the result of its CommonJS file type detection for other plugins to use. You can access it via `this.getModuleInfo` or the `moduleParsed` hook: + +```js +function cjsDetectionPlugin() { + return { + name: 'cjs-detection', + moduleParsed({ + id, + meta: { + commonjs: { isCommonJS } + } + }) { + console.log(`File ${id} is CommonJS: ${isCommonJS}`); + } + }; +} +``` + +## Meta + +[CONTRIBUTING](/.github/CONTRIBUTING.md) + +[LICENSE (MIT)](/LICENSE) diff --git a/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js b/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js new file mode 100644 index 00000000..fc64eda8 --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js @@ -0,0 +1,1910 @@ +import { basename, extname, dirname, join, resolve, sep } from 'path'; +import { makeLegalIdentifier, attachScopes, extractAssignedNames, createFilter } from '@rollup/pluginutils'; +import getCommonDir from 'commondir'; +import { existsSync, readFileSync, statSync } from 'fs'; +import glob from 'glob'; +import { walk } from 'estree-walker'; +import MagicString from 'magic-string'; +import isReference from 'is-reference'; +import { sync } from 'resolve'; + +var peerDependencies = { + rollup: "^2.38.3" +}; + +function tryParse(parse, code, id) { + try { + return parse(code, { allowReturnOutsideFunction: true }); + } catch (err) { + err.message += ` in ${id}`; + throw err; + } +} + +const firstpassGlobal = /\b(?:require|module|exports|global)\b/; + +const firstpassNoGlobal = /\b(?:require|module|exports)\b/; + +function hasCjsKeywords(code, ignoreGlobal) { + const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; + return firstpass.test(code); +} + +/* eslint-disable no-underscore-dangle */ + +function analyzeTopLevelStatements(parse, code, id) { + const ast = tryParse(parse, code, id); + + let isEsModule = false; + let hasDefaultExport = false; + let hasNamedExports = false; + + for (const node of ast.body) { + switch (node.type) { + case 'ExportDefaultDeclaration': + isEsModule = true; + hasDefaultExport = true; + break; + case 'ExportNamedDeclaration': + isEsModule = true; + if (node.declaration) { + hasNamedExports = true; + } else { + for (const specifier of node.specifiers) { + if (specifier.exported.name === 'default') { + hasDefaultExport = true; + } else { + hasNamedExports = true; + } + } + } + break; + case 'ExportAllDeclaration': + isEsModule = true; + if (node.exported && node.exported.name === 'default') { + hasDefaultExport = true; + } else { + hasNamedExports = true; + } + break; + case 'ImportDeclaration': + isEsModule = true; + break; + } + } + + return { isEsModule, hasDefaultExport, hasNamedExports, ast }; +} + +const isWrappedId = (id, suffix) => id.endsWith(suffix); +const wrapId = (id, suffix) => `\0${id}${suffix}`; +const unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length); + +const PROXY_SUFFIX = '?commonjs-proxy'; +const REQUIRE_SUFFIX = '?commonjs-require'; +const EXTERNAL_SUFFIX = '?commonjs-external'; +const EXPORTS_SUFFIX = '?commonjs-exports'; +const MODULE_SUFFIX = '?commonjs-module'; + +const DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register'; +const DYNAMIC_JSON_PREFIX = '\0commonjs-dynamic-json:'; +const DYNAMIC_PACKAGES_ID = '\0commonjs-dynamic-packages'; + +const HELPERS_ID = '\0commonjsHelpers.js'; + +// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers. +// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled. +// This will no longer be necessary once Rollup switches to ES6 output, likely +// in Rollup 3 + +const HELPERS = ` +export var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +export function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +export function getDefaultExportFromNamespaceIfPresent (n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n; +} + +export function getDefaultExportFromNamespaceIfNotNamed (n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n; +} + +export function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} +`; + +const FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`; + +const HELPER_NON_DYNAMIC = ` +export function commonjsRequire (path) { + ${FAILED_REQUIRE_ERROR} +} +`; + +const getDynamicHelpers = (ignoreDynamicRequires) => ` +export function createModule(modulePath) { + return { + path: modulePath, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, base == null ? modulePath : base); + } + }; +} + +export function commonjsRegister (path, loader) { + DYNAMIC_REQUIRE_LOADERS[path] = loader; +} + +export function commonjsRegisterOrShort (path, to) { + var resolvedPath = commonjsResolveImpl(path, null, true); + if (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) { + DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath]; + } else { + DYNAMIC_REQUIRE_SHORTS[path] = to; + } +} + +var DYNAMIC_REQUIRE_LOADERS = Object.create(null); +var DYNAMIC_REQUIRE_CACHE = Object.create(null); +var DYNAMIC_REQUIRE_SHORTS = Object.create(null); +var DEFAULT_PARENT_MODULE = { + id: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: [] +}; +var CHECKED_EXTENSIONS = ['', '.js', '.json']; + +function normalize (path) { + path = path.replace(/\\\\/g, '/'); + var parts = path.split('/'); + var slashed = parts[0] === ''; + for (var i = 1; i < parts.length; i++) { + if (parts[i] === '.' || parts[i] === '') { + parts.splice(i--, 1); + } + } + for (var i = 1; i < parts.length; i++) { + if (parts[i] !== '..') continue; + if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') { + parts.splice(--i, 2); + i--; + } + } + path = parts.join('/'); + if (slashed && path[0] !== '/') + path = '/' + path; + else if (path.length === 0) + path = '.'; + return path; +} + +function join () { + if (arguments.length === 0) + return '.'; + var joined; + for (var i = 0; i < arguments.length; ++i) { + var arg = arguments[i]; + if (arg.length > 0) { + if (joined === undefined) + joined = arg; + else + joined += '/' + arg; + } + } + if (joined === undefined) + return '.'; + + return joined; +} + +function isPossibleNodeModulesPath (modulePath) { + var c0 = modulePath[0]; + if (c0 === '/' || c0 === '\\\\') return false; + var c1 = modulePath[1], c2 = modulePath[2]; + if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) || + (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false; + if (c1 === ':' && (c2 === '/' || c2 === '\\\\')) + return false; + return true; +} + +function dirname (path) { + if (path.length === 0) + return '.'; + + var i = path.length - 1; + while (i > 0) { + var c = path.charCodeAt(i); + if ((c === 47 || c === 92) && i !== path.length - 1) + break; + i--; + } + + if (i > 0) + return path.substr(0, i); + + if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92) + return path.charAt(0); + + return '.'; +} + +export function commonjsResolveImpl (path, originalModuleDir, testCache) { + var shouldTryNodeModules = isPossibleNodeModulesPath(path); + path = normalize(path); + var relPath; + if (path[0] === '/') { + originalModuleDir = '/'; + } + while (true) { + if (!shouldTryNodeModules) { + relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path; + } else if (originalModuleDir) { + relPath = normalize(originalModuleDir + '/node_modules/' + path); + } else { + relPath = normalize(join('node_modules', path)); + } + + if (relPath.endsWith('/..')) { + break; // Travelled too far up, avoid infinite loop + } + + for (var extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) { + var resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex]; + if (DYNAMIC_REQUIRE_CACHE[resolvedPath]) { + return resolvedPath; + } + if (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) { + return resolvedPath; + } + if (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) { + return resolvedPath; + } + } + if (!shouldTryNodeModules) break; + var nextDir = normalize(originalModuleDir + '/..'); + if (nextDir === originalModuleDir) break; + originalModuleDir = nextDir; + } + return null; +} + +export function commonjsResolve (path, originalModuleDir) { + var resolvedPath = commonjsResolveImpl(path, originalModuleDir); + if (resolvedPath !== null) { + return resolvedPath; + } + return require.resolve(path); +} + +export function commonjsRequire (path, originalModuleDir) { + var resolvedPath = commonjsResolveImpl(path, originalModuleDir, true); + if (resolvedPath !== null) { + var cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath]; + if (cachedModule) return cachedModule.exports; + var shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath]; + if (shortTo) { + cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo]; + if (cachedModule) + return cachedModule.exports; + resolvedPath = commonjsResolveImpl(shortTo, null, true); + } + var loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath]; + if (loader) { + DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = { + id: resolvedPath, + filename: resolvedPath, + path: dirname(resolvedPath), + exports: {}, + parent: DEFAULT_PARENT_MODULE, + loaded: false, + children: [], + paths: [], + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base); + } + }; + try { + loader.call(commonjsGlobal, cachedModule, cachedModule.exports); + } catch (error) { + delete DYNAMIC_REQUIRE_CACHE[resolvedPath]; + throw error; + } + cachedModule.loaded = true; + return cachedModule.exports; + }; + } + ${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR} +} + +commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE; +commonjsRequire.resolve = commonjsResolve; +`; + +function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) { + return `${HELPERS}${ + isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC + }`; +} + +/* eslint-disable import/prefer-default-export */ + +function deconflict(scopes, globals, identifier) { + let i = 1; + let deconflicted = makeLegalIdentifier(identifier); + const hasConflicts = () => + scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted); + + while (hasConflicts()) { + deconflicted = makeLegalIdentifier(`${identifier}_${i}`); + i += 1; + } + + for (const scope of scopes) { + scope.declarations[deconflicted] = true; + } + + return deconflicted; +} + +function getName(id) { + const name = makeLegalIdentifier(basename(id, extname(id))); + if (name !== 'index') { + return name; + } + return makeLegalIdentifier(basename(dirname(id))); +} + +function normalizePathSlashes(path) { + return path.replace(/\\/g, '/'); +} + +const VIRTUAL_PATH_BASE = '/$$rollup_base$$'; +const getVirtualPathForDynamicRequirePath = (path, commonDir) => { + const normalizedPath = normalizePathSlashes(path); + return normalizedPath.startsWith(commonDir) + ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length) + : normalizedPath; +}; + +function getPackageEntryPoint(dirPath) { + let entryPoint = 'index.js'; + + try { + if (existsSync(join(dirPath, 'package.json'))) { + entryPoint = + JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main || + entryPoint; + } + } catch (ignored) { + // ignored + } + + return entryPoint; +} + +function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) { + let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`; + for (const dir of dynamicRequireModuleDirPaths) { + const entryPoint = getPackageEntryPoint(dir); + + code += `\ncommonjsRegisterOrShort(${JSON.stringify( + getVirtualPathForDynamicRequirePath(dir, commonDir) + )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(join(dir, entryPoint), commonDir))});`; + } + return code; +} + +function getDynamicPackagesEntryIntro( + dynamicRequireModuleDirPaths, + dynamicRequireModuleSet +) { + let dynamicImports = Array.from( + dynamicRequireModuleSet, + (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});` + ).join('\n'); + + if (dynamicRequireModuleDirPaths.length) { + dynamicImports += `require(${JSON.stringify( + wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX) + )});`; + } + + return dynamicImports; +} + +function isDynamicModuleImport(id, dynamicRequireModuleSet) { + const normalizedPath = normalizePathSlashes(id); + return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json'); +} + +function isDirectory(path) { + try { + if (statSync(path).isDirectory()) return true; + } catch (ignored) { + // Nothing to do here + } + return false; +} + +function getDynamicRequirePaths(patterns) { + const dynamicRequireModuleSet = new Set(); + for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) { + const isNegated = pattern.startsWith('!'); + const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet); + for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) { + modifySet(normalizePathSlashes(resolve(path))); + if (isDirectory(path)) { + modifySet(normalizePathSlashes(resolve(join(path, getPackageEntryPoint(path))))); + } + } + } + const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) => + isDirectory(path) + ); + return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths }; +} + +function getCommonJSMetaPromise(commonJSMetaPromises, id) { + let commonJSMetaPromise = commonJSMetaPromises.get(id); + if (commonJSMetaPromise) return commonJSMetaPromise.promise; + + const promise = new Promise((resolve) => { + commonJSMetaPromise = { + resolve, + promise: null + }; + commonJSMetaPromises.set(id, commonJSMetaPromise); + }); + commonJSMetaPromise.promise = promise; + + return promise; +} + +function setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) { + const commonJSMetaPromise = commonJSMetaPromises.get(id); + if (commonJSMetaPromise) { + if (commonJSMetaPromise.resolve) { + commonJSMetaPromise.resolve(commonjsMeta); + commonJSMetaPromise.resolve = null; + } + } else { + commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null }); + } +} + +// e.g. id === "commonjsHelpers?commonjsRegister" +function getSpecificHelperProxy(id) { + return `export {${id.split('?')[1]} as default} from "${HELPERS_ID}";`; +} + +function getUnknownRequireProxy(id, requireReturnsDefault) { + if (requireReturnsDefault === true || id.endsWith('.json')) { + return `export {default} from ${JSON.stringify(id)};`; + } + const name = getName(id); + const exported = + requireReturnsDefault === 'auto' + ? `import {getDefaultExportFromNamespaceIfNotNamed} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});` + : requireReturnsDefault === 'preferred' + ? `import {getDefaultExportFromNamespaceIfPresent} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});` + : !requireReturnsDefault + ? `import {getAugmentedNamespace} from "${HELPERS_ID}"; export default /*@__PURE__*/getAugmentedNamespace(${name});` + : `export default ${name};`; + return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`; +} + +function getDynamicJsonProxy(id, commonDir) { + const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length)); + return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify( + getVirtualPathForDynamicRequirePath(normalizedPath, commonDir) + )}, function (module, exports) { + module.exports = require(${JSON.stringify(normalizedPath)}); +});`; +} + +function getDynamicRequireProxy(normalizedPath, commonDir) { + return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify( + getVirtualPathForDynamicRequirePath(normalizedPath, commonDir) + )}, function (module, exports) { + ${readFileSync(normalizedPath, { encoding: 'utf8' })} +});`; +} + +async function getStaticRequireProxy( + id, + requireReturnsDefault, + esModulesWithDefaultExport, + esModulesWithNamedExports, + commonJsMetaPromises +) { + const name = getName(id); + const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id); + if (commonjsMeta && commonjsMeta.isCommonJS) { + return `export { __moduleExports as default } from ${JSON.stringify(id)};`; + } else if (commonjsMeta === null) { + return getUnknownRequireProxy(id, requireReturnsDefault); + } else if (!requireReturnsDefault) { + return `import { getAugmentedNamespace } from "${HELPERS_ID}"; import * as ${name} from ${JSON.stringify( + id + )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`; + } else if ( + requireReturnsDefault !== true && + (requireReturnsDefault === 'namespace' || + !esModulesWithDefaultExport.has(id) || + (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id))) + ) { + return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`; + } + return `export { default } from ${JSON.stringify(id)};`; +} + +/* eslint-disable no-param-reassign, no-undefined */ + +function getCandidatesForExtension(resolved, extension) { + return [resolved + extension, `${resolved}${sep}index${extension}`]; +} + +function getCandidates(resolved, extensions) { + return extensions.reduce( + (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)), + [resolved] + ); +} + +function getResolveId(extensions) { + function resolveExtensions(importee, importer) { + // not our problem + if (importee[0] !== '.' || !importer) return undefined; + + const resolved = resolve(dirname(importer), importee); + const candidates = getCandidates(resolved, extensions); + + for (let i = 0; i < candidates.length; i += 1) { + try { + const stats = statSync(candidates[i]); + if (stats.isFile()) return { id: candidates[i] }; + } catch (err) { + /* noop */ + } + } + + return undefined; + } + + return function resolveId(importee, rawImporter, resolveOptions) { + if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) { + return importee; + } + + const importer = + rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX) + ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX) + : rawImporter; + + // Except for exports, proxies are only importing resolved ids, + // no need to resolve again + if (importer && isWrappedId(importer, PROXY_SUFFIX)) { + return importee; + } + + const isProxyModule = isWrappedId(importee, PROXY_SUFFIX); + const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX); + let isModuleRegistration = false; + + if (isProxyModule) { + importee = unwrapId(importee, PROXY_SUFFIX); + } else if (isRequiredModule) { + importee = unwrapId(importee, REQUIRE_SUFFIX); + + isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX); + if (isModuleRegistration) { + importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX); + } + } + + if ( + importee.startsWith(HELPERS_ID) || + importee === DYNAMIC_PACKAGES_ID || + importee.startsWith(DYNAMIC_JSON_PREFIX) + ) { + return importee; + } + + if (importee.startsWith('\0')) { + return null; + } + + return this.resolve( + importee, + importer, + Object.assign({}, resolveOptions, { + skipSelf: true, + custom: Object.assign({}, resolveOptions.custom, { + 'node-resolve': { isRequire: isProxyModule || isRequiredModule } + }) + }) + ).then((resolved) => { + if (!resolved) { + resolved = resolveExtensions(importee, importer); + } + if (resolved && isProxyModule) { + resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX); + resolved.external = false; + } else if (resolved && isModuleRegistration) { + resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX); + } else if (!resolved && (isProxyModule || isRequiredModule)) { + return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false }; + } + return resolved; + }); + }; +} + +function validateRollupVersion(rollupVersion, peerDependencyVersion) { + const [major, minor] = rollupVersion.split('.').map(Number); + const versionRegexp = /\^(\d+\.\d+)\.\d+/g; + let minMajor = Infinity; + let minMinor = Infinity; + let foundVersion; + // eslint-disable-next-line no-cond-assign + while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) { + const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number); + if (foundMajor < minMajor) { + minMajor = foundMajor; + minMinor = foundMinor; + } + } + if (major < minMajor || (major === minMajor && minor < minMinor)) { + throw new Error( + `Insufficient Rollup version: "@rollup/plugin-commonjs" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.` + ); + } +} + +const operators = { + '==': (x) => equals(x.left, x.right, false), + + '!=': (x) => not(operators['=='](x)), + + '===': (x) => equals(x.left, x.right, true), + + '!==': (x) => not(operators['==='](x)), + + '!': (x) => isFalsy(x.argument), + + '&&': (x) => isTruthy(x.left) && isTruthy(x.right), + + '||': (x) => isTruthy(x.left) || isTruthy(x.right) +}; + +function not(value) { + return value === null ? value : !value; +} + +function equals(a, b, strict) { + if (a.type !== b.type) return null; + // eslint-disable-next-line eqeqeq + if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value; + return null; +} + +function isTruthy(node) { + if (!node) return false; + if (node.type === 'Literal') return !!node.value; + if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression); + if (node.operator in operators) return operators[node.operator](node); + return null; +} + +function isFalsy(node) { + return not(isTruthy(node)); +} + +function getKeypath(node) { + const parts = []; + + while (node.type === 'MemberExpression') { + if (node.computed) return null; + + parts.unshift(node.property.name); + // eslint-disable-next-line no-param-reassign + node = node.object; + } + + if (node.type !== 'Identifier') return null; + + const { name } = node; + parts.unshift(name); + + return { name, keypath: parts.join('.') }; +} + +const KEY_COMPILED_ESM = '__esModule'; + +function isDefineCompiledEsm(node) { + const definedProperty = + getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports'); + if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) { + return isTruthy(definedProperty.value); + } + return false; +} + +function getDefinePropertyCallName(node, targetName) { + const { + callee: { object, property } + } = node; + if (!object || object.type !== 'Identifier' || object.name !== 'Object') return; + if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return; + if (node.arguments.length !== 3) return; + + const targetNames = targetName.split('.'); + const [target, key, value] = node.arguments; + if (targetNames.length === 1) { + if (target.type !== 'Identifier' || target.name !== targetNames[0]) { + return; + } + } + + if (targetNames.length === 2) { + if ( + target.type !== 'MemberExpression' || + target.object.name !== targetNames[0] || + target.property.name !== targetNames[1] + ) { + return; + } + } + + if (value.type !== 'ObjectExpression' || !value.properties) return; + + const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value'); + if (!valueProperty || !valueProperty.value) return; + + // eslint-disable-next-line consistent-return + return { key: key.value, value: valueProperty.value }; +} + +function isShorthandProperty(parent) { + return parent && parent.type === 'Property' && parent.shorthand; +} + +function hasDefineEsmProperty(node) { + return node.properties.some((property) => { + if ( + property.type === 'Property' && + property.key.type === 'Identifier' && + property.key.name === '__esModule' && + isTruthy(property.value) + ) { + return true; + } + return false; + }); +} + +function wrapCode(magicString, uses, moduleName, exportsName) { + const args = []; + const passedArgs = []; + if (uses.module) { + args.push('module'); + passedArgs.push(moduleName); + } + if (uses.exports) { + args.push('exports'); + passedArgs.push(exportsName); + } + magicString + .trim() + .prepend(`(function (${args.join(', ')}) {\n`) + .append(`\n}(${passedArgs.join(', ')}));`); +} + +function rewriteExportsAndGetExportsBlock( + magicString, + moduleName, + exportsName, + wrapped, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsAssignmentsByName, + topLevelAssignments, + defineCompiledEsmExpressions, + deconflictedExportNames, + code, + HELPERS_NAME, + exportMode, + detectWrappedDefault, + defaultIsModuleExports +) { + const exports = []; + const exportDeclarations = []; + + if (exportMode === 'replace') { + getExportsForReplacedModuleExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsName + ); + } else { + exports.push(`${exportsName} as __moduleExports`); + if (wrapped) { + getExportsWhenWrapping( + exportDeclarations, + exportsName, + detectWrappedDefault, + HELPERS_NAME, + defaultIsModuleExports + ); + } else { + getExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + exportsAssignmentsByName, + deconflictedExportNames, + topLevelAssignments, + moduleName, + exportsName, + defineCompiledEsmExpressions, + HELPERS_NAME, + defaultIsModuleExports + ); + } + } + if (exports.length) { + exportDeclarations.push(`export { ${exports.join(', ')} };`); + } + + return `\n\n${exportDeclarations.join('\n')}`; +} + +function getExportsForReplacedModuleExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsName +) { + for (const { left } of moduleExportsAssignments) { + magicString.overwrite(left.start, left.end, exportsName); + } + magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var '); + exports.push(`${exportsName} as __moduleExports`); + exportDeclarations.push(`export default ${exportsName};`); +} + +function getExportsWhenWrapping( + exportDeclarations, + exportsName, + detectWrappedDefault, + HELPERS_NAME, + defaultIsModuleExports +) { + exportDeclarations.push( + `export default ${ + detectWrappedDefault && defaultIsModuleExports === 'auto' + ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})` + : defaultIsModuleExports === false + ? `${exportsName}.default` + : exportsName + };` + ); +} + +function getExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + exportsAssignmentsByName, + deconflictedExportNames, + topLevelAssignments, + moduleName, + exportsName, + defineCompiledEsmExpressions, + HELPERS_NAME, + defaultIsModuleExports +) { + let deconflictedDefaultExportName; + // Collect and rewrite module.exports assignments + for (const { left } of moduleExportsAssignments) { + magicString.overwrite(left.start, left.end, `${moduleName}.exports`); + } + + // Collect and rewrite named exports + for (const [exportName, { nodes }] of exportsAssignmentsByName) { + const deconflicted = deconflictedExportNames[exportName]; + let needsDeclaration = true; + for (const node of nodes) { + let replacement = `${deconflicted} = ${exportsName}.${exportName}`; + if (needsDeclaration && topLevelAssignments.has(node)) { + replacement = `var ${replacement}`; + needsDeclaration = false; + } + magicString.overwrite(node.start, node.left.end, replacement); + } + if (needsDeclaration) { + magicString.prepend(`var ${deconflicted};\n`); + } + + if (exportName === 'default') { + deconflictedDefaultExportName = deconflicted; + } else { + exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`); + } + } + + // Collect and rewrite exports.__esModule assignments + let isRestorableCompiledEsm = false; + for (const expression of defineCompiledEsmExpressions) { + isRestorableCompiledEsm = true; + const moduleExportsExpression = + expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object; + magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName); + } + + if (!isRestorableCompiledEsm || defaultIsModuleExports === true) { + exportDeclarations.push(`export default ${exportsName};`); + } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) { + exports.push(`${deconflictedDefaultExportName || exportsName} as default`); + } else { + exportDeclarations.push( + `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});` + ); + } +} + +function isRequireStatement(node, scope) { + if (!node) return false; + if (node.type !== 'CallExpression') return false; + + // Weird case of `require()` or `module.require()` without arguments + if (node.arguments.length === 0) return false; + + return isRequire(node.callee, scope); +} + +function isRequire(node, scope) { + return ( + (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) || + (node.type === 'MemberExpression' && isModuleRequire(node, scope)) + ); +} + +function isModuleRequire({ object, property }, scope) { + return ( + object.type === 'Identifier' && + object.name === 'module' && + property.type === 'Identifier' && + property.name === 'require' && + !scope.contains('module') + ); +} + +function isStaticRequireStatement(node, scope) { + if (!isRequireStatement(node, scope)) return false; + return !hasDynamicArguments(node); +} + +function hasDynamicArguments(node) { + return ( + node.arguments.length > 1 || + (node.arguments[0].type !== 'Literal' && + (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0)) + ); +} + +const reservedMethod = { resolve: true, cache: true, main: true }; + +function isNodeRequirePropertyAccess(parent) { + return parent && parent.property && reservedMethod[parent.property.name]; +} + +function isIgnoredRequireStatement(requiredNode, ignoreRequire) { + return ignoreRequire(requiredNode.arguments[0].value); +} + +function getRequireStringArg(node) { + return node.arguments[0].type === 'Literal' + ? node.arguments[0].value + : node.arguments[0].quasis[0].value.cooked; +} + +function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) { + if (!/^(?:\.{0,2}[/\\]|[A-Za-z]:[/\\])/.test(source)) { + try { + const resolvedPath = normalizePathSlashes(sync(source, { basedir: dirname(id) })); + if (dynamicRequireModuleSet.has(resolvedPath)) { + return true; + } + } catch (ex) { + // Probably a node.js internal module + return false; + } + + return false; + } + + for (const attemptExt of ['', '.js', '.json']) { + const resolvedPath = normalizePathSlashes(resolve(dirname(id), source + attemptExt)); + if (dynamicRequireModuleSet.has(resolvedPath)) { + return true; + } + } + + return false; +} + +function getRequireHandlers() { + const requiredSources = []; + const requiredBySource = Object.create(null); + const requiredByNode = new Map(); + const requireExpressionsWithUsedReturnValue = []; + + function addRequireStatement(sourceId, node, scope, usesReturnValue) { + const required = getRequired(sourceId); + requiredByNode.set(node, { scope, required }); + if (usesReturnValue) { + required.nodesUsingRequired.push(node); + requireExpressionsWithUsedReturnValue.push(node); + } + } + + function getRequired(sourceId) { + if (!requiredBySource[sourceId]) { + requiredSources.push(sourceId); + + requiredBySource[sourceId] = { + source: sourceId, + name: null, + nodesUsingRequired: [] + }; + } + + return requiredBySource[sourceId]; + } + + function rewriteRequireExpressionsAndGetImportBlock( + magicString, + topLevelDeclarations, + topLevelRequireDeclarators, + reassignedNames, + helpersName, + dynamicRegisterSources, + moduleName, + exportsName, + id, + exportMode + ) { + setRemainingImportNamesAndRewriteRequires( + requireExpressionsWithUsedReturnValue, + requiredByNode, + magicString + ); + const imports = []; + imports.push(`import * as ${helpersName} from "${HELPERS_ID}";`); + if (exportMode === 'module') { + imports.push( + `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify( + wrapId(id, MODULE_SUFFIX) + )}` + ); + } else if (exportMode === 'exports') { + imports.push( + `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}` + ); + } + for (const source of dynamicRegisterSources) { + imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`); + } + for (const source of requiredSources) { + if (!source.startsWith('\0')) { + imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`); + } + const { name, nodesUsingRequired } = requiredBySource[source]; + imports.push( + `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify( + source.startsWith('\0') ? source : wrapId(source, PROXY_SUFFIX) + )};` + ); + } + return imports.length ? `${imports.join('\n')}\n\n` : ''; + } + + return { + addRequireStatement, + requiredSources, + rewriteRequireExpressionsAndGetImportBlock + }; +} + +function setRemainingImportNamesAndRewriteRequires( + requireExpressionsWithUsedReturnValue, + requiredByNode, + magicString +) { + let uid = 0; + for (const requireExpression of requireExpressionsWithUsedReturnValue) { + const { required } = requiredByNode.get(requireExpression); + if (!required.name) { + let potentialName; + const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName); + do { + potentialName = `require$$${uid}`; + uid += 1; + } while (required.nodesUsingRequired.some(isUsedName)); + required.name = potentialName; + } + magicString.overwrite(requireExpression.start, requireExpression.end, required.name); + } +} + +/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */ + +const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; + +const functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; + +function transformCommonjs( + parse, + code, + id, + isEsModule, + ignoreGlobal, + ignoreRequire, + ignoreDynamicRequires, + getIgnoreTryCatchRequireStatementMode, + sourceMap, + isDynamicRequireModulesEnabled, + dynamicRequireModuleSet, + disableWrap, + commonDir, + astCache, + defaultIsModuleExports +) { + const ast = astCache || tryParse(parse, code, id); + const magicString = new MagicString(code); + const uses = { + module: false, + exports: false, + global: false, + require: false + }; + let usesDynamicRequire = false; + const virtualDynamicRequirePath = + isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(dirname(id), commonDir); + let scope = attachScopes(ast, 'scope'); + let lexicalDepth = 0; + let programDepth = 0; + let currentTryBlockEnd = null; + let shouldWrap = false; + + const globals = new Set(); + + // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ + const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers'); + const dynamicRegisterSources = new Set(); + let hasRemovedRequire = false; + + const { + addRequireStatement, + requiredSources, + rewriteRequireExpressionsAndGetImportBlock + } = getRequireHandlers(); + + // See which names are assigned to. This is necessary to prevent + // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`, + // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) + const reassignedNames = new Set(); + const topLevelDeclarations = []; + const topLevelRequireDeclarators = new Set(); + const skippedNodes = new Set(); + const moduleAccessScopes = new Set([scope]); + const exportsAccessScopes = new Set([scope]); + const moduleExportsAssignments = []; + let firstTopLevelModuleExportsAssignment = null; + const exportsAssignmentsByName = new Map(); + const topLevelAssignments = new Set(); + const topLevelDefineCompiledEsmExpressions = []; + + walk(ast, { + enter(node, parent) { + if (skippedNodes.has(node)) { + this.skip(); + return; + } + + if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) { + currentTryBlockEnd = null; + } + + programDepth += 1; + if (node.scope) ({ scope } = node); + if (functionType.test(node.type)) lexicalDepth += 1; + if (sourceMap) { + magicString.addSourcemapLocation(node.start); + magicString.addSourcemapLocation(node.end); + } + + // eslint-disable-next-line default-case + switch (node.type) { + case 'TryStatement': + if (currentTryBlockEnd === null) { + currentTryBlockEnd = node.block.end; + } + return; + case 'AssignmentExpression': + if (node.left.type === 'MemberExpression') { + const flattened = getKeypath(node.left); + if (!flattened || scope.contains(flattened.name)) return; + + const exportsPatternMatch = exportsPattern.exec(flattened.keypath); + if (!exportsPatternMatch || flattened.keypath === 'exports') return; + + const [, exportName] = exportsPatternMatch; + uses[flattened.name] = true; + + // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` – + if (flattened.keypath === 'module.exports') { + moduleExportsAssignments.push(node); + if (programDepth > 3) { + moduleAccessScopes.add(scope); + } else if (!firstTopLevelModuleExportsAssignment) { + firstTopLevelModuleExportsAssignment = node; + } + + if (defaultIsModuleExports === false) { + shouldWrap = true; + } else if (defaultIsModuleExports === 'auto') { + if (node.right.type === 'ObjectExpression') { + if (hasDefineEsmProperty(node.right)) { + shouldWrap = true; + } + } else if (defaultIsModuleExports === false) { + shouldWrap = true; + } + } + } else if (exportName === KEY_COMPILED_ESM) { + if (programDepth > 3) { + shouldWrap = true; + } else { + topLevelDefineCompiledEsmExpressions.push(node); + } + } else { + const exportsAssignments = exportsAssignmentsByName.get(exportName) || { + nodes: [], + scopes: new Set() + }; + exportsAssignments.nodes.push(node); + exportsAssignments.scopes.add(scope); + exportsAccessScopes.add(scope); + exportsAssignmentsByName.set(exportName, exportsAssignments); + if (programDepth <= 3) { + topLevelAssignments.add(node); + } + } + + skippedNodes.add(node.left); + } else { + for (const name of extractAssignedNames(node.left)) { + reassignedNames.add(name); + } + } + return; + case 'CallExpression': { + if (isDefineCompiledEsm(node)) { + if (programDepth === 3 && parent.type === 'ExpressionStatement') { + // skip special handling for [module.]exports until we know we render this + skippedNodes.add(node.arguments[0]); + topLevelDefineCompiledEsmExpressions.push(node); + } else { + shouldWrap = true; + } + return; + } + + if ( + node.callee.object && + node.callee.object.name === 'require' && + node.callee.property.name === 'resolve' && + hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet) + ) { + const requireNode = node.callee.object; + magicString.appendLeft( + node.end - 1, + `,${JSON.stringify( + dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )}` + ); + magicString.overwrite( + requireNode.start, + requireNode.end, + `${HELPERS_NAME}.commonjsRequire`, + { + storeName: true + } + ); + return; + } + + if (!isStaticRequireStatement(node, scope)) return; + if (!isDynamicRequireModulesEnabled) { + skippedNodes.add(node.callee); + } + if (!isIgnoredRequireStatement(node, ignoreRequire)) { + skippedNodes.add(node.callee); + const usesReturnValue = parent.type !== 'ExpressionStatement'; + + let canConvertRequire = true; + let shouldRemoveRequireStatement = false; + + if (currentTryBlockEnd !== null) { + ({ + canConvertRequire, + shouldRemoveRequireStatement + } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value)); + + if (shouldRemoveRequireStatement) { + hasRemovedRequire = true; + } + } + + let sourceId = getRequireStringArg(node); + const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX); + if (isDynamicRegister) { + sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX); + if (sourceId.endsWith('.json')) { + sourceId = DYNAMIC_JSON_PREFIX + sourceId; + } + dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX)); + } else { + if ( + !sourceId.endsWith('.json') && + hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet) + ) { + if (shouldRemoveRequireStatement) { + magicString.overwrite(node.start, node.end, `undefined`); + } else if (canConvertRequire) { + magicString.overwrite( + node.start, + node.end, + `${HELPERS_NAME}.commonjsRequire(${JSON.stringify( + getVirtualPathForDynamicRequirePath(sourceId, commonDir) + )}, ${JSON.stringify( + dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )})` + ); + usesDynamicRequire = true; + } + return; + } + + if (canConvertRequire) { + addRequireStatement(sourceId, node, scope, usesReturnValue); + } + } + + if (usesReturnValue) { + if (shouldRemoveRequireStatement) { + magicString.overwrite(node.start, node.end, `undefined`); + return; + } + + if ( + parent.type === 'VariableDeclarator' && + !scope.parent && + parent.id.type === 'Identifier' + ) { + // This will allow us to reuse this variable name as the imported variable if it is not reassigned + // and does not conflict with variables in other places where this is imported + topLevelRequireDeclarators.add(parent); + } + } else { + // This is a bare import, e.g. `require('foo');` + + if (!canConvertRequire && !shouldRemoveRequireStatement) { + return; + } + + magicString.remove(parent.start, parent.end); + } + } + return; + } + case 'ConditionalExpression': + case 'IfStatement': + // skip dead branches + if (isFalsy(node.test)) { + skippedNodes.add(node.consequent); + } else if (node.alternate && isTruthy(node.test)) { + skippedNodes.add(node.alternate); + } + return; + case 'Identifier': { + const { name } = node; + if (!(isReference(node, parent) && !scope.contains(name))) return; + switch (name) { + case 'require': + if (isNodeRequirePropertyAccess(parent)) { + if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) { + if (parent.property.name === 'cache') { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + } + } + + return; + } + + if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) { + magicString.appendLeft( + parent.end - 1, + `,${JSON.stringify( + dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )}` + ); + } + if (!ignoreDynamicRequires) { + if (isShorthandProperty(parent)) { + magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`); + } else { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + } + } + usesDynamicRequire = true; + return; + case 'module': + case 'exports': + shouldWrap = true; + uses[name] = true; + return; + case 'global': + uses.global = true; + if (!ignoreGlobal) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { + storeName: true + }); + } + return; + case 'define': + magicString.overwrite(node.start, node.end, 'undefined', { + storeName: true + }); + return; + default: + globals.add(name); + return; + } + } + case 'MemberExpression': + if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + skippedNodes.add(node.object); + skippedNodes.add(node.property); + } + return; + case 'ReturnStatement': + // if top-level return, we need to wrap it + if (lexicalDepth === 0) { + shouldWrap = true; + } + return; + case 'ThisExpression': + // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal` + if (lexicalDepth === 0) { + uses.global = true; + if (!ignoreGlobal) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { + storeName: true + }); + } + } + return; + case 'UnaryExpression': + // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151) + if (node.operator === 'typeof') { + const flattened = getKeypath(node.argument); + if (!flattened) return; + + if (scope.contains(flattened.name)) return; + + if ( + flattened.keypath === 'module.exports' || + flattened.keypath === 'module' || + flattened.keypath === 'exports' + ) { + magicString.overwrite(node.start, node.end, `'object'`, { + storeName: false + }); + } + } + return; + case 'VariableDeclaration': + if (!scope.parent) { + topLevelDeclarations.push(node); + } + } + }, + + leave(node) { + programDepth -= 1; + if (node.scope) scope = scope.parent; + if (functionType.test(node.type)) lexicalDepth -= 1; + } + }); + + const nameBase = getName(id); + const exportsName = deconflict([...exportsAccessScopes], globals, nameBase); + const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`); + const deconflictedExportNames = Object.create(null); + for (const [exportName, { scopes }] of exportsAssignmentsByName) { + deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName); + } + + // We cannot wrap ES/mixed modules + shouldWrap = + !isEsModule && + !disableWrap && + (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0)); + const detectWrappedDefault = + shouldWrap && + (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0); + + if ( + !( + requiredSources.length || + dynamicRegisterSources.size || + uses.module || + uses.exports || + uses.require || + usesDynamicRequire || + hasRemovedRequire || + topLevelDefineCompiledEsmExpressions.length > 0 + ) && + (ignoreGlobal || !uses.global) + ) { + return { meta: { commonjs: { isCommonJS: false } } }; + } + + let leadingComment = ''; + if (code.startsWith('/*')) { + const commentEnd = code.indexOf('*/', 2) + 2; + leadingComment = `${code.slice(0, commentEnd)}\n`; + magicString.remove(0, commentEnd).trim(); + } + + const exportMode = shouldWrap + ? uses.module + ? 'module' + : 'exports' + : firstTopLevelModuleExportsAssignment + ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0 + ? 'replace' + : 'module' + : moduleExportsAssignments.length === 0 + ? 'exports' + : 'module'; + + const importBlock = rewriteRequireExpressionsAndGetImportBlock( + magicString, + topLevelDeclarations, + topLevelRequireDeclarators, + reassignedNames, + HELPERS_NAME, + dynamicRegisterSources, + moduleName, + exportsName, + id, + exportMode + ); + + const exportBlock = isEsModule + ? '' + : rewriteExportsAndGetExportsBlock( + magicString, + moduleName, + exportsName, + shouldWrap, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsAssignmentsByName, + topLevelAssignments, + topLevelDefineCompiledEsmExpressions, + deconflictedExportNames, + code, + HELPERS_NAME, + exportMode, + detectWrappedDefault, + defaultIsModuleExports + ); + + if (shouldWrap) { + wrapCode(magicString, uses, moduleName, exportsName); + } + + magicString + .trim() + .prepend(leadingComment + importBlock) + .append(exportBlock); + + return { + code: magicString.toString(), + map: sourceMap ? magicString.generateMap() : null, + syntheticNamedExports: isEsModule ? false : '__moduleExports', + meta: { commonjs: { isCommonJS: !isEsModule } } + }; +} + +function commonjs(options = {}) { + const extensions = options.extensions || ['.js']; + const filter = createFilter(options.include, options.exclude); + const { + ignoreGlobal, + ignoreDynamicRequires, + requireReturnsDefault: requireReturnsDefaultOption, + esmExternals + } = options; + const getRequireReturnsDefault = + typeof requireReturnsDefaultOption === 'function' + ? requireReturnsDefaultOption + : () => requireReturnsDefaultOption; + let esmExternalIds; + const isEsmExternal = + typeof esmExternals === 'function' + ? esmExternals + : Array.isArray(esmExternals) + ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id)) + : () => esmExternals; + const defaultIsModuleExports = + typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto'; + + const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths( + options.dynamicRequireTargets + ); + const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0; + const commonDir = isDynamicRequireModulesEnabled + ? getCommonDir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd())) + : null; + + const esModulesWithDefaultExport = new Set(); + const esModulesWithNamedExports = new Set(); + const commonJsMetaPromises = new Map(); + + const ignoreRequire = + typeof options.ignore === 'function' + ? options.ignore + : Array.isArray(options.ignore) + ? (id) => options.ignore.includes(id) + : () => false; + + const getIgnoreTryCatchRequireStatementMode = (id) => { + const mode = + typeof options.ignoreTryCatch === 'function' + ? options.ignoreTryCatch(id) + : Array.isArray(options.ignoreTryCatch) + ? options.ignoreTryCatch.includes(id) + : typeof options.ignoreTryCatch !== 'undefined' + ? options.ignoreTryCatch + : true; + + return { + canConvertRequire: mode !== 'remove' && mode !== true, + shouldRemoveRequireStatement: mode === 'remove' + }; + }; + + const resolveId = getResolveId(extensions); + + const sourceMap = options.sourceMap !== false; + + function transformAndCheckExports(code, id) { + if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) { + // eslint-disable-next-line no-param-reassign + code = + getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code; + } + + const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements( + this.parse, + code, + id + ); + if (hasDefaultExport) { + esModulesWithDefaultExport.add(id); + } + if (hasNamedExports) { + esModulesWithNamedExports.add(id); + } + + if ( + !dynamicRequireModuleSet.has(normalizePathSlashes(id)) && + (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules)) + ) { + return { meta: { commonjs: { isCommonJS: false } } }; + } + + // avoid wrapping as this is a commonjsRegister call + const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX); + if (disableWrap) { + // eslint-disable-next-line no-param-reassign + id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX); + } + + return transformCommonjs( + this.parse, + code, + id, + isEsModule, + ignoreGlobal || isEsModule, + ignoreRequire, + ignoreDynamicRequires && !isDynamicRequireModulesEnabled, + getIgnoreTryCatchRequireStatementMode, + sourceMap, + isDynamicRequireModulesEnabled, + dynamicRequireModuleSet, + disableWrap, + commonDir, + ast, + defaultIsModuleExports + ); + } + + return { + name: 'commonjs', + + buildStart() { + validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup); + if (options.namedExports != null) { + this.warn( + 'The namedExports option from "@rollup/plugin-commonjs" is deprecated. Named exports are now handled automatically.' + ); + } + }, + + resolveId, + + load(id) { + if (id === HELPERS_ID) { + return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires); + } + + if (id.startsWith(HELPERS_ID)) { + return getSpecificHelperProxy(id); + } + + if (isWrappedId(id, MODULE_SUFFIX)) { + const actualId = unwrapId(id, MODULE_SUFFIX); + let name = getName(actualId); + let code; + if (isDynamicRequireModulesEnabled) { + if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) { + name = `${name}_`; + } + code = + `import {commonjsRequire, createModule} from "${HELPERS_ID}";\n` + + `var ${name} = createModule(${JSON.stringify( + getVirtualPathForDynamicRequirePath(dirname(actualId), commonDir) + )});\n` + + `export {${name} as __module}`; + } else { + code = `var ${name} = {exports: {}}; export {${name} as __module}`; + } + return { + code, + syntheticNamedExports: '__module', + meta: { commonjs: { isCommonJS: false } } + }; + } + + if (isWrappedId(id, EXPORTS_SUFFIX)) { + const actualId = unwrapId(id, EXPORTS_SUFFIX); + const name = getName(actualId); + return { + code: `var ${name} = {}; export {${name} as __exports}`, + meta: { commonjs: { isCommonJS: false } } + }; + } + + if (isWrappedId(id, EXTERNAL_SUFFIX)) { + const actualId = unwrapId(id, EXTERNAL_SUFFIX); + return getUnknownRequireProxy( + actualId, + isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true + ); + } + + if (id === DYNAMIC_PACKAGES_ID) { + return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir); + } + + if (id.startsWith(DYNAMIC_JSON_PREFIX)) { + return getDynamicJsonProxy(id, commonDir); + } + + if (isDynamicModuleImport(id, dynamicRequireModuleSet)) { + return `export default require(${JSON.stringify(normalizePathSlashes(id))});`; + } + + if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) { + return getDynamicRequireProxy( + normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)), + commonDir + ); + } + + if (isWrappedId(id, PROXY_SUFFIX)) { + const actualId = unwrapId(id, PROXY_SUFFIX); + return getStaticRequireProxy( + actualId, + getRequireReturnsDefault(actualId), + esModulesWithDefaultExport, + esModulesWithNamedExports, + commonJsMetaPromises + ); + } + + return null; + }, + + transform(code, rawId) { + let id = rawId; + + if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) { + id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX); + } + + const extName = extname(id); + if ( + extName !== '.cjs' && + id !== DYNAMIC_PACKAGES_ID && + !id.startsWith(DYNAMIC_JSON_PREFIX) && + (!filter(id) || !extensions.includes(extName)) + ) { + return null; + } + + try { + return transformAndCheckExports.call(this, code, rawId); + } catch (err) { + return this.error(err, err.loc); + } + }, + + moduleParsed({ id, meta: { commonjs: commonjsMeta } }) { + if (commonjsMeta && commonjsMeta.isCommonJS != null) { + setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta); + return; + } + setCommonJSMetaPromise(commonJsMetaPromises, id, null); + } + }; +} + +export { commonjs as default }; +//# sourceMappingURL=index.es.js.map diff --git a/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js.map b/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js.map new file mode 100644 index 00000000..951b6883 --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/dist/index.es.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.es.js","sources":["../src/parse.js","../src/analyze-top-level-statements.js","../src/helpers.js","../src/utils.js","../src/dynamic-packages-manager.js","../src/dynamic-require-paths.js","../src/is-cjs.js","../src/proxies.js","../src/resolve-id.js","../src/rollup-version.js","../src/ast-utils.js","../src/generate-exports.js","../src/generate-imports.js","../src/transform-commonjs.js","../src/index.js"],"sourcesContent":["export function tryParse(parse, code, id) {\n try {\n return parse(code, { allowReturnOutsideFunction: true });\n } catch (err) {\n err.message += ` in ${id}`;\n throw err;\n }\n}\n\nconst firstpassGlobal = /\\b(?:require|module|exports|global)\\b/;\n\nconst firstpassNoGlobal = /\\b(?:require|module|exports)\\b/;\n\nexport function hasCjsKeywords(code, ignoreGlobal) {\n const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;\n return firstpass.test(code);\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { tryParse } from './parse';\n\nexport default function analyzeTopLevelStatements(parse, code, id) {\n const ast = tryParse(parse, code, id);\n\n let isEsModule = false;\n let hasDefaultExport = false;\n let hasNamedExports = false;\n\n for (const node of ast.body) {\n switch (node.type) {\n case 'ExportDefaultDeclaration':\n isEsModule = true;\n hasDefaultExport = true;\n break;\n case 'ExportNamedDeclaration':\n isEsModule = true;\n if (node.declaration) {\n hasNamedExports = true;\n } else {\n for (const specifier of node.specifiers) {\n if (specifier.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n }\n }\n break;\n case 'ExportAllDeclaration':\n isEsModule = true;\n if (node.exported && node.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n break;\n case 'ImportDeclaration':\n isEsModule = true;\n break;\n default:\n }\n }\n\n return { isEsModule, hasDefaultExport, hasNamedExports, ast };\n}\n","export const isWrappedId = (id, suffix) => id.endsWith(suffix);\nexport const wrapId = (id, suffix) => `\\0${id}${suffix}`;\nexport const unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length);\n\nexport const PROXY_SUFFIX = '?commonjs-proxy';\nexport const REQUIRE_SUFFIX = '?commonjs-require';\nexport const EXTERNAL_SUFFIX = '?commonjs-external';\nexport const EXPORTS_SUFFIX = '?commonjs-exports';\nexport const MODULE_SUFFIX = '?commonjs-module';\n\nexport const DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register';\nexport const DYNAMIC_JSON_PREFIX = '\\0commonjs-dynamic-json:';\nexport const DYNAMIC_PACKAGES_ID = '\\0commonjs-dynamic-packages';\n\nexport const HELPERS_ID = '\\0commonjsHelpers.js';\n\n// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.\n// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.\n// This will no longer be necessary once Rollup switches to ES6 output, likely\n// in Rollup 3\n\nconst HELPERS = `\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function getDefaultExportFromNamespaceIfPresent (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;\n}\n\nexport function getDefaultExportFromNamespaceIfNotNamed (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;\n}\n\nexport function getAugmentedNamespace(n) {\n\tif (n.__esModule) return n;\n\tvar a = Object.defineProperty({}, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n`;\n\nconst FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`;\n\nconst HELPER_NON_DYNAMIC = `\nexport function commonjsRequire (path) {\n\t${FAILED_REQUIRE_ERROR}\n}\n`;\n\nconst getDynamicHelpers = (ignoreDynamicRequires) => `\nexport function createModule(modulePath) {\n\treturn {\n\t\tpath: modulePath,\n\t\texports: {},\n\t\trequire: function (path, base) {\n\t\t\treturn commonjsRequire(path, base == null ? modulePath : base);\n\t\t}\n\t};\n}\n\nexport function commonjsRegister (path, loader) {\n\tDYNAMIC_REQUIRE_LOADERS[path] = loader;\n}\n\nexport function commonjsRegisterOrShort (path, to) {\n\tvar resolvedPath = commonjsResolveImpl(path, null, true);\n\tif (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n\t} else {\n\t DYNAMIC_REQUIRE_SHORTS[path] = to;\n\t}\n}\n\nvar DYNAMIC_REQUIRE_LOADERS = Object.create(null);\nvar DYNAMIC_REQUIRE_CACHE = Object.create(null);\nvar DYNAMIC_REQUIRE_SHORTS = Object.create(null);\nvar DEFAULT_PARENT_MODULE = {\n\tid: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []\n};\nvar CHECKED_EXTENSIONS = ['', '.js', '.json'];\n\nfunction normalize (path) {\n\tpath = path.replace(/\\\\\\\\/g, '/');\n\tvar parts = path.split('/');\n\tvar slashed = parts[0] === '';\n\tfor (var i = 1; i < parts.length; i++) {\n\t\tif (parts[i] === '.' || parts[i] === '') {\n\t\t\tparts.splice(i--, 1);\n\t\t}\n\t}\n\tfor (var i = 1; i < parts.length; i++) {\n\t\tif (parts[i] !== '..') continue;\n\t\tif (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {\n\t\t\tparts.splice(--i, 2);\n\t\t\ti--;\n\t\t}\n\t}\n\tpath = parts.join('/');\n\tif (slashed && path[0] !== '/')\n\t path = '/' + path;\n\telse if (path.length === 0)\n\t path = '.';\n\treturn path;\n}\n\nfunction join () {\n\tif (arguments.length === 0)\n\t return '.';\n\tvar joined;\n\tfor (var i = 0; i < arguments.length; ++i) {\n\t var arg = arguments[i];\n\t if (arg.length > 0) {\n\t\tif (joined === undefined)\n\t\t joined = arg;\n\t\telse\n\t\t joined += '/' + arg;\n\t }\n\t}\n\tif (joined === undefined)\n\t return '.';\n\n\treturn joined;\n}\n\nfunction isPossibleNodeModulesPath (modulePath) {\n\tvar c0 = modulePath[0];\n\tif (c0 === '/' || c0 === '\\\\\\\\') return false;\n\tvar c1 = modulePath[1], c2 = modulePath[2];\n\tif ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\\\\\')) ||\n\t\t(c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\\\\\'))) return false;\n\tif (c1 === ':' && (c2 === '/' || c2 === '\\\\\\\\'))\n\t\treturn false;\n\treturn true;\n}\n\nfunction dirname (path) {\n if (path.length === 0)\n return '.';\n\n var i = path.length - 1;\n while (i > 0) {\n var c = path.charCodeAt(i);\n if ((c === 47 || c === 92) && i !== path.length - 1)\n break;\n i--;\n }\n\n if (i > 0)\n return path.substr(0, i);\n\n if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)\n return path.charAt(0);\n\n return '.';\n}\n\nexport function commonjsResolveImpl (path, originalModuleDir, testCache) {\n\tvar shouldTryNodeModules = isPossibleNodeModulesPath(path);\n\tpath = normalize(path);\n\tvar relPath;\n\tif (path[0] === '/') {\n\t\toriginalModuleDir = '/';\n\t}\n\twhile (true) {\n\t\tif (!shouldTryNodeModules) {\n\t\t\trelPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;\n\t\t} else if (originalModuleDir) {\n\t\t\trelPath = normalize(originalModuleDir + '/node_modules/' + path);\n\t\t} else {\n\t\t\trelPath = normalize(join('node_modules', path));\n\t\t}\n\n\t\tif (relPath.endsWith('/..')) {\n\t\t\tbreak; // Travelled too far up, avoid infinite loop\n\t\t}\n\n\t\tfor (var extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {\n\t\t\tvar resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];\n\t\t\tif (DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) {\n\t\t\t return resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t}\n\t\tif (!shouldTryNodeModules) break;\n\t\tvar nextDir = normalize(originalModuleDir + '/..');\n\t\tif (nextDir === originalModuleDir) break;\n\t\toriginalModuleDir = nextDir;\n\t}\n\treturn null;\n}\n\nexport function commonjsResolve (path, originalModuleDir) {\n\tvar resolvedPath = commonjsResolveImpl(path, originalModuleDir);\n\tif (resolvedPath !== null) {\n\t\treturn resolvedPath;\n\t}\n\treturn require.resolve(path);\n}\n\nexport function commonjsRequire (path, originalModuleDir) {\n\tvar resolvedPath = commonjsResolveImpl(path, originalModuleDir, true);\n\tif (resolvedPath !== null) {\n var cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n if (cachedModule) return cachedModule.exports;\n var shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath];\n if (shortTo) {\n cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo];\n if (cachedModule)\n return cachedModule.exports;\n resolvedPath = commonjsResolveImpl(shortTo, null, true);\n }\n var loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];\n if (loader) {\n DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {\n id: resolvedPath,\n filename: resolvedPath,\n path: dirname(resolvedPath),\n exports: {},\n parent: DEFAULT_PARENT_MODULE,\n loaded: false,\n children: [],\n paths: [],\n require: function (path, base) {\n return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);\n }\n };\n try {\n loader.call(commonjsGlobal, cachedModule, cachedModule.exports);\n } catch (error) {\n delete DYNAMIC_REQUIRE_CACHE[resolvedPath];\n throw error;\n }\n cachedModule.loaded = true;\n return cachedModule.exports;\n };\n\t}\n\t${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR}\n}\n\ncommonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;\ncommonjsRequire.resolve = commonjsResolve;\n`;\n\nexport function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) {\n return `${HELPERS}${\n isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC\n }`;\n}\n","/* eslint-disable import/prefer-default-export */\n\nimport { basename, dirname, extname } from 'path';\n\nimport { makeLegalIdentifier } from '@rollup/pluginutils';\n\nexport function deconflict(scopes, globals, identifier) {\n let i = 1;\n let deconflicted = makeLegalIdentifier(identifier);\n const hasConflicts = () =>\n scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted);\n\n while (hasConflicts()) {\n deconflicted = makeLegalIdentifier(`${identifier}_${i}`);\n i += 1;\n }\n\n for (const scope of scopes) {\n scope.declarations[deconflicted] = true;\n }\n\n return deconflicted;\n}\n\nexport function getName(id) {\n const name = makeLegalIdentifier(basename(id, extname(id)));\n if (name !== 'index') {\n return name;\n }\n return makeLegalIdentifier(basename(dirname(id)));\n}\n\nexport function normalizePathSlashes(path) {\n return path.replace(/\\\\/g, '/');\n}\n\nconst VIRTUAL_PATH_BASE = '/$$rollup_base$$';\nexport const getVirtualPathForDynamicRequirePath = (path, commonDir) => {\n const normalizedPath = normalizePathSlashes(path);\n return normalizedPath.startsWith(commonDir)\n ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length)\n : normalizedPath;\n};\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX, HELPERS_ID, wrapId } from './helpers';\nimport { getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\nexport function getPackageEntryPoint(dirPath) {\n let entryPoint = 'index.js';\n\n try {\n if (existsSync(join(dirPath, 'package.json'))) {\n entryPoint =\n JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main ||\n entryPoint;\n }\n } catch (ignored) {\n // ignored\n }\n\n return entryPoint;\n}\n\nexport function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) {\n let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`;\n for (const dir of dynamicRequireModuleDirPaths) {\n const entryPoint = getPackageEntryPoint(dir);\n\n code += `\\ncommonjsRegisterOrShort(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dir, commonDir)\n )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(join(dir, entryPoint), commonDir))});`;\n }\n return code;\n}\n\nexport function getDynamicPackagesEntryIntro(\n dynamicRequireModuleDirPaths,\n dynamicRequireModuleSet\n) {\n let dynamicImports = Array.from(\n dynamicRequireModuleSet,\n (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});`\n ).join('\\n');\n\n if (dynamicRequireModuleDirPaths.length) {\n dynamicImports += `require(${JSON.stringify(\n wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX)\n )});`;\n }\n\n return dynamicImports;\n}\n\nexport function isDynamicModuleImport(id, dynamicRequireModuleSet) {\n const normalizedPath = normalizePathSlashes(id);\n return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json');\n}\n","import { statSync } from 'fs';\n\nimport { join, resolve } from 'path';\n\nimport glob from 'glob';\n\nimport { normalizePathSlashes } from './utils';\nimport { getPackageEntryPoint } from './dynamic-packages-manager';\n\nfunction isDirectory(path) {\n try {\n if (statSync(path).isDirectory()) return true;\n } catch (ignored) {\n // Nothing to do here\n }\n return false;\n}\n\nexport default function getDynamicRequirePaths(patterns) {\n const dynamicRequireModuleSet = new Set();\n for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) {\n const isNegated = pattern.startsWith('!');\n const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet);\n for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) {\n modifySet(normalizePathSlashes(resolve(path)));\n if (isDirectory(path)) {\n modifySet(normalizePathSlashes(resolve(join(path, getPackageEntryPoint(path)))));\n }\n }\n }\n const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) =>\n isDirectory(path)\n );\n return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths };\n}\n","export function getCommonJSMetaPromise(commonJSMetaPromises, id) {\n let commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) return commonJSMetaPromise.promise;\n\n const promise = new Promise((resolve) => {\n commonJSMetaPromise = {\n resolve,\n promise: null\n };\n commonJSMetaPromises.set(id, commonJSMetaPromise);\n });\n commonJSMetaPromise.promise = promise;\n\n return promise;\n}\n\nexport function setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) {\n const commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) {\n if (commonJSMetaPromise.resolve) {\n commonJSMetaPromise.resolve(commonjsMeta);\n commonJSMetaPromise.resolve = null;\n }\n } else {\n commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null });\n }\n}\n","import { readFileSync } from 'fs';\n\nimport { DYNAMIC_JSON_PREFIX, HELPERS_ID } from './helpers';\nimport { getCommonJSMetaPromise } from './is-cjs';\nimport { getName, getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\n// e.g. id === \"commonjsHelpers?commonjsRegister\"\nexport function getSpecificHelperProxy(id) {\n return `export {${id.split('?')[1]} as default} from \"${HELPERS_ID}\";`;\n}\n\nexport function getUnknownRequireProxy(id, requireReturnsDefault) {\n if (requireReturnsDefault === true || id.endsWith('.json')) {\n return `export {default} from ${JSON.stringify(id)};`;\n }\n const name = getName(id);\n const exported =\n requireReturnsDefault === 'auto'\n ? `import {getDefaultExportFromNamespaceIfNotNamed} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});`\n : requireReturnsDefault === 'preferred'\n ? `import {getDefaultExportFromNamespaceIfPresent} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});`\n : !requireReturnsDefault\n ? `import {getAugmentedNamespace} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getAugmentedNamespace(${name});`\n : `export default ${name};`;\n return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`;\n}\n\nexport function getDynamicJsonProxy(id, commonDir) {\n const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length));\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n module.exports = require(${JSON.stringify(normalizedPath)});\n});`;\n}\n\nexport function getDynamicRequireProxy(normalizedPath, commonDir) {\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n ${readFileSync(normalizedPath, { encoding: 'utf8' })}\n});`;\n}\n\nexport async function getStaticRequireProxy(\n id,\n requireReturnsDefault,\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n) {\n const name = getName(id);\n const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id);\n if (commonjsMeta && commonjsMeta.isCommonJS) {\n return `export { __moduleExports as default } from ${JSON.stringify(id)};`;\n } else if (commonjsMeta === null) {\n return getUnknownRequireProxy(id, requireReturnsDefault);\n } else if (!requireReturnsDefault) {\n return `import { getAugmentedNamespace } from \"${HELPERS_ID}\"; import * as ${name} from ${JSON.stringify(\n id\n )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`;\n } else if (\n requireReturnsDefault !== true &&\n (requireReturnsDefault === 'namespace' ||\n !esModulesWithDefaultExport.has(id) ||\n (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id)))\n ) {\n return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`;\n }\n return `export { default } from ${JSON.stringify(id)};`;\n}\n","/* eslint-disable no-param-reassign, no-undefined */\n\nimport { statSync } from 'fs';\nimport { dirname, resolve, sep } from 'path';\n\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_PACKAGES_ID,\n DYNAMIC_REGISTER_SUFFIX,\n EXPORTS_SUFFIX,\n EXTERNAL_SUFFIX,\n HELPERS_ID,\n isWrappedId,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n REQUIRE_SUFFIX,\n unwrapId,\n wrapId\n} from './helpers';\n\nfunction getCandidatesForExtension(resolved, extension) {\n return [resolved + extension, `${resolved}${sep}index${extension}`];\n}\n\nfunction getCandidates(resolved, extensions) {\n return extensions.reduce(\n (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),\n [resolved]\n );\n}\n\nexport default function getResolveId(extensions) {\n function resolveExtensions(importee, importer) {\n // not our problem\n if (importee[0] !== '.' || !importer) return undefined;\n\n const resolved = resolve(dirname(importer), importee);\n const candidates = getCandidates(resolved, extensions);\n\n for (let i = 0; i < candidates.length; i += 1) {\n try {\n const stats = statSync(candidates[i]);\n if (stats.isFile()) return { id: candidates[i] };\n } catch (err) {\n /* noop */\n }\n }\n\n return undefined;\n }\n\n return function resolveId(importee, rawImporter, resolveOptions) {\n if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) {\n return importee;\n }\n\n const importer =\n rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n : rawImporter;\n\n // Except for exports, proxies are only importing resolved ids,\n // no need to resolve again\n if (importer && isWrappedId(importer, PROXY_SUFFIX)) {\n return importee;\n }\n\n const isProxyModule = isWrappedId(importee, PROXY_SUFFIX);\n const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX);\n let isModuleRegistration = false;\n\n if (isProxyModule) {\n importee = unwrapId(importee, PROXY_SUFFIX);\n } else if (isRequiredModule) {\n importee = unwrapId(importee, REQUIRE_SUFFIX);\n\n isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX);\n if (isModuleRegistration) {\n importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX);\n }\n }\n\n if (\n importee.startsWith(HELPERS_ID) ||\n importee === DYNAMIC_PACKAGES_ID ||\n importee.startsWith(DYNAMIC_JSON_PREFIX)\n ) {\n return importee;\n }\n\n if (importee.startsWith('\\0')) {\n return null;\n }\n\n return this.resolve(\n importee,\n importer,\n Object.assign({}, resolveOptions, {\n skipSelf: true,\n custom: Object.assign({}, resolveOptions.custom, {\n 'node-resolve': { isRequire: isProxyModule || isRequiredModule }\n })\n })\n ).then((resolved) => {\n if (!resolved) {\n resolved = resolveExtensions(importee, importer);\n }\n if (resolved && isProxyModule) {\n resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX);\n resolved.external = false;\n } else if (resolved && isModuleRegistration) {\n resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX);\n } else if (!resolved && (isProxyModule || isRequiredModule)) {\n return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false };\n }\n return resolved;\n });\n };\n}\n","export default function validateRollupVersion(rollupVersion, peerDependencyVersion) {\n const [major, minor] = rollupVersion.split('.').map(Number);\n const versionRegexp = /\\^(\\d+\\.\\d+)\\.\\d+/g;\n let minMajor = Infinity;\n let minMinor = Infinity;\n let foundVersion;\n // eslint-disable-next-line no-cond-assign\n while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) {\n const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number);\n if (foundMajor < minMajor) {\n minMajor = foundMajor;\n minMinor = foundMinor;\n }\n }\n if (major < minMajor || (major === minMajor && minor < minMinor)) {\n throw new Error(\n `Insufficient Rollup version: \"@rollup/plugin-commonjs\" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.`\n );\n }\n}\n","export { default as isReference } from 'is-reference';\n\nconst operators = {\n '==': (x) => equals(x.left, x.right, false),\n\n '!=': (x) => not(operators['=='](x)),\n\n '===': (x) => equals(x.left, x.right, true),\n\n '!==': (x) => not(operators['==='](x)),\n\n '!': (x) => isFalsy(x.argument),\n\n '&&': (x) => isTruthy(x.left) && isTruthy(x.right),\n\n '||': (x) => isTruthy(x.left) || isTruthy(x.right)\n};\n\nfunction not(value) {\n return value === null ? value : !value;\n}\n\nfunction equals(a, b, strict) {\n if (a.type !== b.type) return null;\n // eslint-disable-next-line eqeqeq\n if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;\n return null;\n}\n\nexport function isTruthy(node) {\n if (!node) return false;\n if (node.type === 'Literal') return !!node.value;\n if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);\n if (node.operator in operators) return operators[node.operator](node);\n return null;\n}\n\nexport function isFalsy(node) {\n return not(isTruthy(node));\n}\n\nexport function getKeypath(node) {\n const parts = [];\n\n while (node.type === 'MemberExpression') {\n if (node.computed) return null;\n\n parts.unshift(node.property.name);\n // eslint-disable-next-line no-param-reassign\n node = node.object;\n }\n\n if (node.type !== 'Identifier') return null;\n\n const { name } = node;\n parts.unshift(name);\n\n return { name, keypath: parts.join('.') };\n}\n\nexport const KEY_COMPILED_ESM = '__esModule';\n\nexport function isDefineCompiledEsm(node) {\n const definedProperty =\n getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports');\n if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) {\n return isTruthy(definedProperty.value);\n }\n return false;\n}\n\nfunction getDefinePropertyCallName(node, targetName) {\n const {\n callee: { object, property }\n } = node;\n if (!object || object.type !== 'Identifier' || object.name !== 'Object') return;\n if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return;\n if (node.arguments.length !== 3) return;\n\n const targetNames = targetName.split('.');\n const [target, key, value] = node.arguments;\n if (targetNames.length === 1) {\n if (target.type !== 'Identifier' || target.name !== targetNames[0]) {\n return;\n }\n }\n\n if (targetNames.length === 2) {\n if (\n target.type !== 'MemberExpression' ||\n target.object.name !== targetNames[0] ||\n target.property.name !== targetNames[1]\n ) {\n return;\n }\n }\n\n if (value.type !== 'ObjectExpression' || !value.properties) return;\n\n const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value');\n if (!valueProperty || !valueProperty.value) return;\n\n // eslint-disable-next-line consistent-return\n return { key: key.value, value: valueProperty.value };\n}\n\nexport function isShorthandProperty(parent) {\n return parent && parent.type === 'Property' && parent.shorthand;\n}\n\nexport function hasDefineEsmProperty(node) {\n return node.properties.some((property) => {\n if (\n property.type === 'Property' &&\n property.key.type === 'Identifier' &&\n property.key.name === '__esModule' &&\n isTruthy(property.value)\n ) {\n return true;\n }\n return false;\n });\n}\n","export function wrapCode(magicString, uses, moduleName, exportsName) {\n const args = [];\n const passedArgs = [];\n if (uses.module) {\n args.push('module');\n passedArgs.push(moduleName);\n }\n if (uses.exports) {\n args.push('exports');\n passedArgs.push(exportsName);\n }\n magicString\n .trim()\n .prepend(`(function (${args.join(', ')}) {\\n`)\n .append(`\\n}(${passedArgs.join(', ')}));`);\n}\n\nexport function rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n wrapped,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n defineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n) {\n const exports = [];\n const exportDeclarations = [];\n\n if (exportMode === 'replace') {\n getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n );\n } else {\n exports.push(`${exportsName} as __moduleExports`);\n if (wrapped) {\n getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n } else {\n getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n }\n }\n if (exports.length) {\n exportDeclarations.push(`export { ${exports.join(', ')} };`);\n }\n\n return `\\n\\n${exportDeclarations.join('\\n')}`;\n}\n\nfunction getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n) {\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, exportsName);\n }\n magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var ');\n exports.push(`${exportsName} as __moduleExports`);\n exportDeclarations.push(`export default ${exportsName};`);\n}\n\nfunction getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n exportDeclarations.push(\n `export default ${\n detectWrappedDefault && defaultIsModuleExports === 'auto'\n ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})`\n : defaultIsModuleExports === false\n ? `${exportsName}.default`\n : exportsName\n };`\n );\n}\n\nfunction getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n let deconflictedDefaultExportName;\n // Collect and rewrite module.exports assignments\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, `${moduleName}.exports`);\n }\n\n // Collect and rewrite named exports\n for (const [exportName, { nodes }] of exportsAssignmentsByName) {\n const deconflicted = deconflictedExportNames[exportName];\n let needsDeclaration = true;\n for (const node of nodes) {\n let replacement = `${deconflicted} = ${exportsName}.${exportName}`;\n if (needsDeclaration && topLevelAssignments.has(node)) {\n replacement = `var ${replacement}`;\n needsDeclaration = false;\n }\n magicString.overwrite(node.start, node.left.end, replacement);\n }\n if (needsDeclaration) {\n magicString.prepend(`var ${deconflicted};\\n`);\n }\n\n if (exportName === 'default') {\n deconflictedDefaultExportName = deconflicted;\n } else {\n exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`);\n }\n }\n\n // Collect and rewrite exports.__esModule assignments\n let isRestorableCompiledEsm = false;\n for (const expression of defineCompiledEsmExpressions) {\n isRestorableCompiledEsm = true;\n const moduleExportsExpression =\n expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object;\n magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName);\n }\n\n if (!isRestorableCompiledEsm || defaultIsModuleExports === true) {\n exportDeclarations.push(`export default ${exportsName};`);\n } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) {\n exports.push(`${deconflictedDefaultExportName || exportsName} as default`);\n } else {\n exportDeclarations.push(\n `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});`\n );\n }\n}\n","import { dirname, resolve } from 'path';\n\nimport { sync as nodeResolveSync } from 'resolve';\n\nimport {\n EXPORTS_SUFFIX,\n HELPERS_ID,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n REQUIRE_SUFFIX,\n wrapId\n} from './helpers';\nimport { normalizePathSlashes } from './utils';\n\nexport function isRequireStatement(node, scope) {\n if (!node) return false;\n if (node.type !== 'CallExpression') return false;\n\n // Weird case of `require()` or `module.require()` without arguments\n if (node.arguments.length === 0) return false;\n\n return isRequire(node.callee, scope);\n}\n\nfunction isRequire(node, scope) {\n return (\n (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) ||\n (node.type === 'MemberExpression' && isModuleRequire(node, scope))\n );\n}\n\nexport function isModuleRequire({ object, property }, scope) {\n return (\n object.type === 'Identifier' &&\n object.name === 'module' &&\n property.type === 'Identifier' &&\n property.name === 'require' &&\n !scope.contains('module')\n );\n}\n\nexport function isStaticRequireStatement(node, scope) {\n if (!isRequireStatement(node, scope)) return false;\n return !hasDynamicArguments(node);\n}\n\nfunction hasDynamicArguments(node) {\n return (\n node.arguments.length > 1 ||\n (node.arguments[0].type !== 'Literal' &&\n (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))\n );\n}\n\nconst reservedMethod = { resolve: true, cache: true, main: true };\n\nexport function isNodeRequirePropertyAccess(parent) {\n return parent && parent.property && reservedMethod[parent.property.name];\n}\n\nexport function isIgnoredRequireStatement(requiredNode, ignoreRequire) {\n return ignoreRequire(requiredNode.arguments[0].value);\n}\n\nexport function getRequireStringArg(node) {\n return node.arguments[0].type === 'Literal'\n ? node.arguments[0].value\n : node.arguments[0].quasis[0].value.cooked;\n}\n\nexport function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) {\n if (!/^(?:\\.{0,2}[/\\\\]|[A-Za-z]:[/\\\\])/.test(source)) {\n try {\n const resolvedPath = normalizePathSlashes(nodeResolveSync(source, { basedir: dirname(id) }));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n } catch (ex) {\n // Probably a node.js internal module\n return false;\n }\n\n return false;\n }\n\n for (const attemptExt of ['', '.js', '.json']) {\n const resolvedPath = normalizePathSlashes(resolve(dirname(id), source + attemptExt));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getRequireHandlers() {\n const requiredSources = [];\n const requiredBySource = Object.create(null);\n const requiredByNode = new Map();\n const requireExpressionsWithUsedReturnValue = [];\n\n function addRequireStatement(sourceId, node, scope, usesReturnValue) {\n const required = getRequired(sourceId);\n requiredByNode.set(node, { scope, required });\n if (usesReturnValue) {\n required.nodesUsingRequired.push(node);\n requireExpressionsWithUsedReturnValue.push(node);\n }\n }\n\n function getRequired(sourceId) {\n if (!requiredBySource[sourceId]) {\n requiredSources.push(sourceId);\n\n requiredBySource[sourceId] = {\n source: sourceId,\n name: null,\n nodesUsingRequired: []\n };\n }\n\n return requiredBySource[sourceId];\n }\n\n function rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n helpersName,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n ) {\n setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n );\n const imports = [];\n imports.push(`import * as ${helpersName} from \"${HELPERS_ID}\";`);\n if (exportMode === 'module') {\n imports.push(\n `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify(\n wrapId(id, MODULE_SUFFIX)\n )}`\n );\n } else if (exportMode === 'exports') {\n imports.push(\n `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}`\n );\n }\n for (const source of dynamicRegisterSources) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n for (const source of requiredSources) {\n if (!source.startsWith('\\0')) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n const { name, nodesUsingRequired } = requiredBySource[source];\n imports.push(\n `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify(\n source.startsWith('\\0') ? source : wrapId(source, PROXY_SUFFIX)\n )};`\n );\n }\n return imports.length ? `${imports.join('\\n')}\\n\\n` : '';\n }\n\n return {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n };\n}\n\nfunction setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n) {\n let uid = 0;\n for (const requireExpression of requireExpressionsWithUsedReturnValue) {\n const { required } = requiredByNode.get(requireExpression);\n if (!required.name) {\n let potentialName;\n const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName);\n do {\n potentialName = `require$$${uid}`;\n uid += 1;\n } while (required.nodesUsingRequired.some(isUsedName));\n required.name = potentialName;\n }\n magicString.overwrite(requireExpression.start, requireExpression.end, required.name);\n }\n}\n","/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */\n\nimport { dirname } from 'path';\n\nimport { attachScopes, extractAssignedNames } from '@rollup/pluginutils';\nimport { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\n\nimport {\n getKeypath,\n isDefineCompiledEsm,\n hasDefineEsmProperty,\n isFalsy,\n isReference,\n isShorthandProperty,\n isTruthy,\n KEY_COMPILED_ESM\n} from './ast-utils';\nimport { rewriteExportsAndGetExportsBlock, wrapCode } from './generate-exports';\nimport {\n getRequireHandlers,\n getRequireStringArg,\n hasDynamicModuleForPath,\n isIgnoredRequireStatement,\n isModuleRequire,\n isNodeRequirePropertyAccess,\n isRequireStatement,\n isStaticRequireStatement\n} from './generate-imports';\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_REGISTER_SUFFIX,\n isWrappedId,\n unwrapId,\n wrapId\n} from './helpers';\nimport { tryParse } from './parse';\nimport { deconflict, getName, getVirtualPathForDynamicRequirePath } from './utils';\n\nconst exportsPattern = /^(?:module\\.)?exports(?:\\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;\n\nconst functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;\n\nexport default function transformCommonjs(\n parse,\n code,\n id,\n isEsModule,\n ignoreGlobal,\n ignoreRequire,\n ignoreDynamicRequires,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n astCache,\n defaultIsModuleExports\n) {\n const ast = astCache || tryParse(parse, code, id);\n const magicString = new MagicString(code);\n const uses = {\n module: false,\n exports: false,\n global: false,\n require: false\n };\n let usesDynamicRequire = false;\n const virtualDynamicRequirePath =\n isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(dirname(id), commonDir);\n let scope = attachScopes(ast, 'scope');\n let lexicalDepth = 0;\n let programDepth = 0;\n let currentTryBlockEnd = null;\n let shouldWrap = false;\n\n const globals = new Set();\n\n // TODO technically wrong since globals isn't populated yet, but ¯\\_(ツ)_/¯\n const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers');\n const dynamicRegisterSources = new Set();\n let hasRemovedRequire = false;\n\n const {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n } = getRequireHandlers();\n\n // See which names are assigned to. This is necessary to prevent\n // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,\n // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)\n const reassignedNames = new Set();\n const topLevelDeclarations = [];\n const topLevelRequireDeclarators = new Set();\n const skippedNodes = new Set();\n const moduleAccessScopes = new Set([scope]);\n const exportsAccessScopes = new Set([scope]);\n const moduleExportsAssignments = [];\n let firstTopLevelModuleExportsAssignment = null;\n const exportsAssignmentsByName = new Map();\n const topLevelAssignments = new Set();\n const topLevelDefineCompiledEsmExpressions = [];\n\n walk(ast, {\n enter(node, parent) {\n if (skippedNodes.has(node)) {\n this.skip();\n return;\n }\n\n if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) {\n currentTryBlockEnd = null;\n }\n\n programDepth += 1;\n if (node.scope) ({ scope } = node);\n if (functionType.test(node.type)) lexicalDepth += 1;\n if (sourceMap) {\n magicString.addSourcemapLocation(node.start);\n magicString.addSourcemapLocation(node.end);\n }\n\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'TryStatement':\n if (currentTryBlockEnd === null) {\n currentTryBlockEnd = node.block.end;\n }\n return;\n case 'AssignmentExpression':\n if (node.left.type === 'MemberExpression') {\n const flattened = getKeypath(node.left);\n if (!flattened || scope.contains(flattened.name)) return;\n\n const exportsPatternMatch = exportsPattern.exec(flattened.keypath);\n if (!exportsPatternMatch || flattened.keypath === 'exports') return;\n\n const [, exportName] = exportsPatternMatch;\n uses[flattened.name] = true;\n\n // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –\n if (flattened.keypath === 'module.exports') {\n moduleExportsAssignments.push(node);\n if (programDepth > 3) {\n moduleAccessScopes.add(scope);\n } else if (!firstTopLevelModuleExportsAssignment) {\n firstTopLevelModuleExportsAssignment = node;\n }\n\n if (defaultIsModuleExports === false) {\n shouldWrap = true;\n } else if (defaultIsModuleExports === 'auto') {\n if (node.right.type === 'ObjectExpression') {\n if (hasDefineEsmProperty(node.right)) {\n shouldWrap = true;\n }\n } else if (defaultIsModuleExports === false) {\n shouldWrap = true;\n }\n }\n } else if (exportName === KEY_COMPILED_ESM) {\n if (programDepth > 3) {\n shouldWrap = true;\n } else {\n topLevelDefineCompiledEsmExpressions.push(node);\n }\n } else {\n const exportsAssignments = exportsAssignmentsByName.get(exportName) || {\n nodes: [],\n scopes: new Set()\n };\n exportsAssignments.nodes.push(node);\n exportsAssignments.scopes.add(scope);\n exportsAccessScopes.add(scope);\n exportsAssignmentsByName.set(exportName, exportsAssignments);\n if (programDepth <= 3) {\n topLevelAssignments.add(node);\n }\n }\n\n skippedNodes.add(node.left);\n } else {\n for (const name of extractAssignedNames(node.left)) {\n reassignedNames.add(name);\n }\n }\n return;\n case 'CallExpression': {\n if (isDefineCompiledEsm(node)) {\n if (programDepth === 3 && parent.type === 'ExpressionStatement') {\n // skip special handling for [module.]exports until we know we render this\n skippedNodes.add(node.arguments[0]);\n topLevelDefineCompiledEsmExpressions.push(node);\n } else {\n shouldWrap = true;\n }\n return;\n }\n\n if (\n node.callee.object &&\n node.callee.object.name === 'require' &&\n node.callee.property.name === 'resolve' &&\n hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)\n ) {\n const requireNode = node.callee.object;\n magicString.appendLeft(\n node.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n magicString.overwrite(\n requireNode.start,\n requireNode.end,\n `${HELPERS_NAME}.commonjsRequire`,\n {\n storeName: true\n }\n );\n return;\n }\n\n if (!isStaticRequireStatement(node, scope)) return;\n if (!isDynamicRequireModulesEnabled) {\n skippedNodes.add(node.callee);\n }\n if (!isIgnoredRequireStatement(node, ignoreRequire)) {\n skippedNodes.add(node.callee);\n const usesReturnValue = parent.type !== 'ExpressionStatement';\n\n let canConvertRequire = true;\n let shouldRemoveRequireStatement = false;\n\n if (currentTryBlockEnd !== null) {\n ({\n canConvertRequire,\n shouldRemoveRequireStatement\n } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value));\n\n if (shouldRemoveRequireStatement) {\n hasRemovedRequire = true;\n }\n }\n\n let sourceId = getRequireStringArg(node);\n const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (isDynamicRegister) {\n sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (sourceId.endsWith('.json')) {\n sourceId = DYNAMIC_JSON_PREFIX + sourceId;\n }\n dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX));\n } else {\n if (\n !sourceId.endsWith('.json') &&\n hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet)\n ) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n } else if (canConvertRequire) {\n magicString.overwrite(\n node.start,\n node.end,\n `${HELPERS_NAME}.commonjsRequire(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(sourceId, commonDir)\n )}, ${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )})`\n );\n usesDynamicRequire = true;\n }\n return;\n }\n\n if (canConvertRequire) {\n addRequireStatement(sourceId, node, scope, usesReturnValue);\n }\n }\n\n if (usesReturnValue) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n return;\n }\n\n if (\n parent.type === 'VariableDeclarator' &&\n !scope.parent &&\n parent.id.type === 'Identifier'\n ) {\n // This will allow us to reuse this variable name as the imported variable if it is not reassigned\n // and does not conflict with variables in other places where this is imported\n topLevelRequireDeclarators.add(parent);\n }\n } else {\n // This is a bare import, e.g. `require('foo');`\n\n if (!canConvertRequire && !shouldRemoveRequireStatement) {\n return;\n }\n\n magicString.remove(parent.start, parent.end);\n }\n }\n return;\n }\n case 'ConditionalExpression':\n case 'IfStatement':\n // skip dead branches\n if (isFalsy(node.test)) {\n skippedNodes.add(node.consequent);\n } else if (node.alternate && isTruthy(node.test)) {\n skippedNodes.add(node.alternate);\n }\n return;\n case 'Identifier': {\n const { name } = node;\n if (!(isReference(node, parent) && !scope.contains(name))) return;\n switch (name) {\n case 'require':\n if (isNodeRequirePropertyAccess(parent)) {\n if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) {\n if (parent.property.name === 'cache') {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n\n return;\n }\n\n if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) {\n magicString.appendLeft(\n parent.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n }\n if (!ignoreDynamicRequires) {\n if (isShorthandProperty(parent)) {\n magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`);\n } else {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n usesDynamicRequire = true;\n return;\n case 'module':\n case 'exports':\n shouldWrap = true;\n uses[name] = true;\n return;\n case 'global':\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n return;\n case 'define':\n magicString.overwrite(node.start, node.end, 'undefined', {\n storeName: true\n });\n return;\n default:\n globals.add(name);\n return;\n }\n }\n case 'MemberExpression':\n if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n skippedNodes.add(node.object);\n skippedNodes.add(node.property);\n }\n return;\n case 'ReturnStatement':\n // if top-level return, we need to wrap it\n if (lexicalDepth === 0) {\n shouldWrap = true;\n }\n return;\n case 'ThisExpression':\n // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal`\n if (lexicalDepth === 0) {\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n }\n return;\n case 'UnaryExpression':\n // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)\n if (node.operator === 'typeof') {\n const flattened = getKeypath(node.argument);\n if (!flattened) return;\n\n if (scope.contains(flattened.name)) return;\n\n if (\n flattened.keypath === 'module.exports' ||\n flattened.keypath === 'module' ||\n flattened.keypath === 'exports'\n ) {\n magicString.overwrite(node.start, node.end, `'object'`, {\n storeName: false\n });\n }\n }\n return;\n case 'VariableDeclaration':\n if (!scope.parent) {\n topLevelDeclarations.push(node);\n }\n }\n },\n\n leave(node) {\n programDepth -= 1;\n if (node.scope) scope = scope.parent;\n if (functionType.test(node.type)) lexicalDepth -= 1;\n }\n });\n\n const nameBase = getName(id);\n const exportsName = deconflict([...exportsAccessScopes], globals, nameBase);\n const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`);\n const deconflictedExportNames = Object.create(null);\n for (const [exportName, { scopes }] of exportsAssignmentsByName) {\n deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName);\n }\n\n // We cannot wrap ES/mixed modules\n shouldWrap =\n !isEsModule &&\n !disableWrap &&\n (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0));\n const detectWrappedDefault =\n shouldWrap &&\n (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0);\n\n if (\n !(\n requiredSources.length ||\n dynamicRegisterSources.size ||\n uses.module ||\n uses.exports ||\n uses.require ||\n usesDynamicRequire ||\n hasRemovedRequire ||\n topLevelDefineCompiledEsmExpressions.length > 0\n ) &&\n (ignoreGlobal || !uses.global)\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n let leadingComment = '';\n if (code.startsWith('/*')) {\n const commentEnd = code.indexOf('*/', 2) + 2;\n leadingComment = `${code.slice(0, commentEnd)}\\n`;\n magicString.remove(0, commentEnd).trim();\n }\n\n const exportMode = shouldWrap\n ? uses.module\n ? 'module'\n : 'exports'\n : firstTopLevelModuleExportsAssignment\n ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0\n ? 'replace'\n : 'module'\n : moduleExportsAssignments.length === 0\n ? 'exports'\n : 'module';\n\n const importBlock = rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n HELPERS_NAME,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n );\n\n const exportBlock = isEsModule\n ? ''\n : rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n shouldWrap,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n topLevelDefineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n );\n\n if (shouldWrap) {\n wrapCode(magicString, uses, moduleName, exportsName);\n }\n\n magicString\n .trim()\n .prepend(leadingComment + importBlock)\n .append(exportBlock);\n\n return {\n code: magicString.toString(),\n map: sourceMap ? magicString.generateMap() : null,\n syntheticNamedExports: isEsModule ? false : '__moduleExports',\n meta: { commonjs: { isCommonJS: !isEsModule } }\n };\n}\n","import { dirname, extname } from 'path';\n\nimport { createFilter } from '@rollup/pluginutils';\nimport getCommonDir from 'commondir';\n\nimport { peerDependencies } from '../package.json';\n\nimport analyzeTopLevelStatements from './analyze-top-level-statements';\n\nimport {\n getDynamicPackagesEntryIntro,\n getDynamicPackagesModule,\n isDynamicModuleImport\n} from './dynamic-packages-manager';\nimport getDynamicRequirePaths from './dynamic-require-paths';\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_PACKAGES_ID,\n DYNAMIC_REGISTER_SUFFIX,\n EXPORTS_SUFFIX,\n EXTERNAL_SUFFIX,\n getHelpersModule,\n HELPERS_ID,\n isWrappedId,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n unwrapId\n} from './helpers';\nimport { setCommonJSMetaPromise } from './is-cjs';\nimport { hasCjsKeywords } from './parse';\nimport {\n getDynamicJsonProxy,\n getDynamicRequireProxy,\n getSpecificHelperProxy,\n getStaticRequireProxy,\n getUnknownRequireProxy\n} from './proxies';\nimport getResolveId from './resolve-id';\nimport validateRollupVersion from './rollup-version';\nimport transformCommonjs from './transform-commonjs';\nimport { getName, getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\nexport default function commonjs(options = {}) {\n const extensions = options.extensions || ['.js'];\n const filter = createFilter(options.include, options.exclude);\n const {\n ignoreGlobal,\n ignoreDynamicRequires,\n requireReturnsDefault: requireReturnsDefaultOption,\n esmExternals\n } = options;\n const getRequireReturnsDefault =\n typeof requireReturnsDefaultOption === 'function'\n ? requireReturnsDefaultOption\n : () => requireReturnsDefaultOption;\n let esmExternalIds;\n const isEsmExternal =\n typeof esmExternals === 'function'\n ? esmExternals\n : Array.isArray(esmExternals)\n ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id))\n : () => esmExternals;\n const defaultIsModuleExports =\n typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto';\n\n const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths(\n options.dynamicRequireTargets\n );\n const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0;\n const commonDir = isDynamicRequireModulesEnabled\n ? getCommonDir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd()))\n : null;\n\n const esModulesWithDefaultExport = new Set();\n const esModulesWithNamedExports = new Set();\n const commonJsMetaPromises = new Map();\n\n const ignoreRequire =\n typeof options.ignore === 'function'\n ? options.ignore\n : Array.isArray(options.ignore)\n ? (id) => options.ignore.includes(id)\n : () => false;\n\n const getIgnoreTryCatchRequireStatementMode = (id) => {\n const mode =\n typeof options.ignoreTryCatch === 'function'\n ? options.ignoreTryCatch(id)\n : Array.isArray(options.ignoreTryCatch)\n ? options.ignoreTryCatch.includes(id)\n : typeof options.ignoreTryCatch !== 'undefined'\n ? options.ignoreTryCatch\n : true;\n\n return {\n canConvertRequire: mode !== 'remove' && mode !== true,\n shouldRemoveRequireStatement: mode === 'remove'\n };\n };\n\n const resolveId = getResolveId(extensions);\n\n const sourceMap = options.sourceMap !== false;\n\n function transformAndCheckExports(code, id) {\n if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) {\n // eslint-disable-next-line no-param-reassign\n code =\n getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code;\n }\n\n const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements(\n this.parse,\n code,\n id\n );\n if (hasDefaultExport) {\n esModulesWithDefaultExport.add(id);\n }\n if (hasNamedExports) {\n esModulesWithNamedExports.add(id);\n }\n\n if (\n !dynamicRequireModuleSet.has(normalizePathSlashes(id)) &&\n (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules))\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n // avoid wrapping as this is a commonjsRegister call\n const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);\n if (disableWrap) {\n // eslint-disable-next-line no-param-reassign\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n return transformCommonjs(\n this.parse,\n code,\n id,\n isEsModule,\n ignoreGlobal || isEsModule,\n ignoreRequire,\n ignoreDynamicRequires && !isDynamicRequireModulesEnabled,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n ast,\n defaultIsModuleExports\n );\n }\n\n return {\n name: 'commonjs',\n\n buildStart() {\n validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup);\n if (options.namedExports != null) {\n this.warn(\n 'The namedExports option from \"@rollup/plugin-commonjs\" is deprecated. Named exports are now handled automatically.'\n );\n }\n },\n\n resolveId,\n\n load(id) {\n if (id === HELPERS_ID) {\n return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires);\n }\n\n if (id.startsWith(HELPERS_ID)) {\n return getSpecificHelperProxy(id);\n }\n\n if (isWrappedId(id, MODULE_SUFFIX)) {\n const actualId = unwrapId(id, MODULE_SUFFIX);\n let name = getName(actualId);\n let code;\n if (isDynamicRequireModulesEnabled) {\n if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) {\n name = `${name}_`;\n }\n code =\n `import {commonjsRequire, createModule} from \"${HELPERS_ID}\";\\n` +\n `var ${name} = createModule(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dirname(actualId), commonDir)\n )});\\n` +\n `export {${name} as __module}`;\n } else {\n code = `var ${name} = {exports: {}}; export {${name} as __module}`;\n }\n return {\n code,\n syntheticNamedExports: '__module',\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXPORTS_SUFFIX)) {\n const actualId = unwrapId(id, EXPORTS_SUFFIX);\n const name = getName(actualId);\n return {\n code: `var ${name} = {}; export {${name} as __exports}`,\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXTERNAL_SUFFIX)) {\n const actualId = unwrapId(id, EXTERNAL_SUFFIX);\n return getUnknownRequireProxy(\n actualId,\n isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true\n );\n }\n\n if (id === DYNAMIC_PACKAGES_ID) {\n return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir);\n }\n\n if (id.startsWith(DYNAMIC_JSON_PREFIX)) {\n return getDynamicJsonProxy(id, commonDir);\n }\n\n if (isDynamicModuleImport(id, dynamicRequireModuleSet)) {\n return `export default require(${JSON.stringify(normalizePathSlashes(id))});`;\n }\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n return getDynamicRequireProxy(\n normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)),\n commonDir\n );\n }\n\n if (isWrappedId(id, PROXY_SUFFIX)) {\n const actualId = unwrapId(id, PROXY_SUFFIX);\n return getStaticRequireProxy(\n actualId,\n getRequireReturnsDefault(actualId),\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n );\n }\n\n return null;\n },\n\n transform(code, rawId) {\n let id = rawId;\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n const extName = extname(id);\n if (\n extName !== '.cjs' &&\n id !== DYNAMIC_PACKAGES_ID &&\n !id.startsWith(DYNAMIC_JSON_PREFIX) &&\n (!filter(id) || !extensions.includes(extName))\n ) {\n return null;\n }\n\n try {\n return transformAndCheckExports.call(this, code, rawId);\n } catch (err) {\n return this.error(err, err.loc);\n }\n },\n\n moduleParsed({ id, meta: { commonjs: commonjsMeta } }) {\n if (commonjsMeta && commonjsMeta.isCommonJS != null) {\n setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta);\n return;\n }\n setCommonJSMetaPromise(commonJsMetaPromises, id, null);\n }\n };\n}\n"],"names":["nodeResolveSync"],"mappings":"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AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;AACA,MAAM,oBAAoB,GAAG,CAAC,wNAAwN,CAAC,CAAC;AACxP;AACA,MAAM,kBAAkB,GAAG,CAAC;AAC5B;AACA,CAAC,EAAE,oBAAoB,CAAC;AACxB;AACA,CAAC,CAAC;AACF;AACA,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,KAAK,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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"} \ No newline at end of file diff --git a/build/node_modules/@rollup/plugin-commonjs/dist/index.js b/build/node_modules/@rollup/plugin-commonjs/dist/index.js new file mode 100644 index 00000000..298614b2 --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/dist/index.js @@ -0,0 +1,1919 @@ +'use strict'; + +var path = require('path'); +var pluginutils = require('@rollup/pluginutils'); +var getCommonDir = require('commondir'); +var fs = require('fs'); +var glob = require('glob'); +var estreeWalker = require('estree-walker'); +var MagicString = require('magic-string'); +var isReference = require('is-reference'); +var resolve = require('resolve'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var getCommonDir__default = /*#__PURE__*/_interopDefaultLegacy(getCommonDir); +var glob__default = /*#__PURE__*/_interopDefaultLegacy(glob); +var MagicString__default = /*#__PURE__*/_interopDefaultLegacy(MagicString); +var isReference__default = /*#__PURE__*/_interopDefaultLegacy(isReference); + +var peerDependencies = { + rollup: "^2.38.3" +}; + +function tryParse(parse, code, id) { + try { + return parse(code, { allowReturnOutsideFunction: true }); + } catch (err) { + err.message += ` in ${id}`; + throw err; + } +} + +const firstpassGlobal = /\b(?:require|module|exports|global)\b/; + +const firstpassNoGlobal = /\b(?:require|module|exports)\b/; + +function hasCjsKeywords(code, ignoreGlobal) { + const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; + return firstpass.test(code); +} + +/* eslint-disable no-underscore-dangle */ + +function analyzeTopLevelStatements(parse, code, id) { + const ast = tryParse(parse, code, id); + + let isEsModule = false; + let hasDefaultExport = false; + let hasNamedExports = false; + + for (const node of ast.body) { + switch (node.type) { + case 'ExportDefaultDeclaration': + isEsModule = true; + hasDefaultExport = true; + break; + case 'ExportNamedDeclaration': + isEsModule = true; + if (node.declaration) { + hasNamedExports = true; + } else { + for (const specifier of node.specifiers) { + if (specifier.exported.name === 'default') { + hasDefaultExport = true; + } else { + hasNamedExports = true; + } + } + } + break; + case 'ExportAllDeclaration': + isEsModule = true; + if (node.exported && node.exported.name === 'default') { + hasDefaultExport = true; + } else { + hasNamedExports = true; + } + break; + case 'ImportDeclaration': + isEsModule = true; + break; + } + } + + return { isEsModule, hasDefaultExport, hasNamedExports, ast }; +} + +const isWrappedId = (id, suffix) => id.endsWith(suffix); +const wrapId = (id, suffix) => `\0${id}${suffix}`; +const unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length); + +const PROXY_SUFFIX = '?commonjs-proxy'; +const REQUIRE_SUFFIX = '?commonjs-require'; +const EXTERNAL_SUFFIX = '?commonjs-external'; +const EXPORTS_SUFFIX = '?commonjs-exports'; +const MODULE_SUFFIX = '?commonjs-module'; + +const DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register'; +const DYNAMIC_JSON_PREFIX = '\0commonjs-dynamic-json:'; +const DYNAMIC_PACKAGES_ID = '\0commonjs-dynamic-packages'; + +const HELPERS_ID = '\0commonjsHelpers.js'; + +// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers. +// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled. +// This will no longer be necessary once Rollup switches to ES6 output, likely +// in Rollup 3 + +const HELPERS = ` +export var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +export function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +export function getDefaultExportFromNamespaceIfPresent (n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n; +} + +export function getDefaultExportFromNamespaceIfNotNamed (n) { + return n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n; +} + +export function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} +`; + +const FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`; + +const HELPER_NON_DYNAMIC = ` +export function commonjsRequire (path) { + ${FAILED_REQUIRE_ERROR} +} +`; + +const getDynamicHelpers = (ignoreDynamicRequires) => ` +export function createModule(modulePath) { + return { + path: modulePath, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, base == null ? modulePath : base); + } + }; +} + +export function commonjsRegister (path, loader) { + DYNAMIC_REQUIRE_LOADERS[path] = loader; +} + +export function commonjsRegisterOrShort (path, to) { + var resolvedPath = commonjsResolveImpl(path, null, true); + if (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) { + DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath]; + } else { + DYNAMIC_REQUIRE_SHORTS[path] = to; + } +} + +var DYNAMIC_REQUIRE_LOADERS = Object.create(null); +var DYNAMIC_REQUIRE_CACHE = Object.create(null); +var DYNAMIC_REQUIRE_SHORTS = Object.create(null); +var DEFAULT_PARENT_MODULE = { + id: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: [] +}; +var CHECKED_EXTENSIONS = ['', '.js', '.json']; + +function normalize (path) { + path = path.replace(/\\\\/g, '/'); + var parts = path.split('/'); + var slashed = parts[0] === ''; + for (var i = 1; i < parts.length; i++) { + if (parts[i] === '.' || parts[i] === '') { + parts.splice(i--, 1); + } + } + for (var i = 1; i < parts.length; i++) { + if (parts[i] !== '..') continue; + if (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') { + parts.splice(--i, 2); + i--; + } + } + path = parts.join('/'); + if (slashed && path[0] !== '/') + path = '/' + path; + else if (path.length === 0) + path = '.'; + return path; +} + +function join () { + if (arguments.length === 0) + return '.'; + var joined; + for (var i = 0; i < arguments.length; ++i) { + var arg = arguments[i]; + if (arg.length > 0) { + if (joined === undefined) + joined = arg; + else + joined += '/' + arg; + } + } + if (joined === undefined) + return '.'; + + return joined; +} + +function isPossibleNodeModulesPath (modulePath) { + var c0 = modulePath[0]; + if (c0 === '/' || c0 === '\\\\') return false; + var c1 = modulePath[1], c2 = modulePath[2]; + if ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\')) || + (c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\'))) return false; + if (c1 === ':' && (c2 === '/' || c2 === '\\\\')) + return false; + return true; +} + +function dirname (path) { + if (path.length === 0) + return '.'; + + var i = path.length - 1; + while (i > 0) { + var c = path.charCodeAt(i); + if ((c === 47 || c === 92) && i !== path.length - 1) + break; + i--; + } + + if (i > 0) + return path.substr(0, i); + + if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92) + return path.charAt(0); + + return '.'; +} + +export function commonjsResolveImpl (path, originalModuleDir, testCache) { + var shouldTryNodeModules = isPossibleNodeModulesPath(path); + path = normalize(path); + var relPath; + if (path[0] === '/') { + originalModuleDir = '/'; + } + while (true) { + if (!shouldTryNodeModules) { + relPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path; + } else if (originalModuleDir) { + relPath = normalize(originalModuleDir + '/node_modules/' + path); + } else { + relPath = normalize(join('node_modules', path)); + } + + if (relPath.endsWith('/..')) { + break; // Travelled too far up, avoid infinite loop + } + + for (var extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) { + var resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex]; + if (DYNAMIC_REQUIRE_CACHE[resolvedPath]) { + return resolvedPath; + } + if (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) { + return resolvedPath; + } + if (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) { + return resolvedPath; + } + } + if (!shouldTryNodeModules) break; + var nextDir = normalize(originalModuleDir + '/..'); + if (nextDir === originalModuleDir) break; + originalModuleDir = nextDir; + } + return null; +} + +export function commonjsResolve (path, originalModuleDir) { + var resolvedPath = commonjsResolveImpl(path, originalModuleDir); + if (resolvedPath !== null) { + return resolvedPath; + } + return require.resolve(path); +} + +export function commonjsRequire (path, originalModuleDir) { + var resolvedPath = commonjsResolveImpl(path, originalModuleDir, true); + if (resolvedPath !== null) { + var cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath]; + if (cachedModule) return cachedModule.exports; + var shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath]; + if (shortTo) { + cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo]; + if (cachedModule) + return cachedModule.exports; + resolvedPath = commonjsResolveImpl(shortTo, null, true); + } + var loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath]; + if (loader) { + DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = { + id: resolvedPath, + filename: resolvedPath, + path: dirname(resolvedPath), + exports: {}, + parent: DEFAULT_PARENT_MODULE, + loaded: false, + children: [], + paths: [], + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base); + } + }; + try { + loader.call(commonjsGlobal, cachedModule, cachedModule.exports); + } catch (error) { + delete DYNAMIC_REQUIRE_CACHE[resolvedPath]; + throw error; + } + cachedModule.loaded = true; + return cachedModule.exports; + }; + } + ${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR} +} + +commonjsRequire.cache = DYNAMIC_REQUIRE_CACHE; +commonjsRequire.resolve = commonjsResolve; +`; + +function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) { + return `${HELPERS}${ + isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC + }`; +} + +/* eslint-disable import/prefer-default-export */ + +function deconflict(scopes, globals, identifier) { + let i = 1; + let deconflicted = pluginutils.makeLegalIdentifier(identifier); + const hasConflicts = () => + scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted); + + while (hasConflicts()) { + deconflicted = pluginutils.makeLegalIdentifier(`${identifier}_${i}`); + i += 1; + } + + for (const scope of scopes) { + scope.declarations[deconflicted] = true; + } + + return deconflicted; +} + +function getName(id) { + const name = pluginutils.makeLegalIdentifier(path.basename(id, path.extname(id))); + if (name !== 'index') { + return name; + } + return pluginutils.makeLegalIdentifier(path.basename(path.dirname(id))); +} + +function normalizePathSlashes(path) { + return path.replace(/\\/g, '/'); +} + +const VIRTUAL_PATH_BASE = '/$$rollup_base$$'; +const getVirtualPathForDynamicRequirePath = (path, commonDir) => { + const normalizedPath = normalizePathSlashes(path); + return normalizedPath.startsWith(commonDir) + ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length) + : normalizedPath; +}; + +function getPackageEntryPoint(dirPath) { + let entryPoint = 'index.js'; + + try { + if (fs.existsSync(path.join(dirPath, 'package.json'))) { + entryPoint = + JSON.parse(fs.readFileSync(path.join(dirPath, 'package.json'), { encoding: 'utf8' })).main || + entryPoint; + } + } catch (ignored) { + // ignored + } + + return entryPoint; +} + +function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) { + let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`; + for (const dir of dynamicRequireModuleDirPaths) { + const entryPoint = getPackageEntryPoint(dir); + + code += `\ncommonjsRegisterOrShort(${JSON.stringify( + getVirtualPathForDynamicRequirePath(dir, commonDir) + )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(path.join(dir, entryPoint), commonDir))});`; + } + return code; +} + +function getDynamicPackagesEntryIntro( + dynamicRequireModuleDirPaths, + dynamicRequireModuleSet +) { + let dynamicImports = Array.from( + dynamicRequireModuleSet, + (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});` + ).join('\n'); + + if (dynamicRequireModuleDirPaths.length) { + dynamicImports += `require(${JSON.stringify( + wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX) + )});`; + } + + return dynamicImports; +} + +function isDynamicModuleImport(id, dynamicRequireModuleSet) { + const normalizedPath = normalizePathSlashes(id); + return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json'); +} + +function isDirectory(path) { + try { + if (fs.statSync(path).isDirectory()) return true; + } catch (ignored) { + // Nothing to do here + } + return false; +} + +function getDynamicRequirePaths(patterns) { + const dynamicRequireModuleSet = new Set(); + for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) { + const isNegated = pattern.startsWith('!'); + const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet); + for (const path$1 of glob__default["default"].sync(isNegated ? pattern.substr(1) : pattern)) { + modifySet(normalizePathSlashes(path.resolve(path$1))); + if (isDirectory(path$1)) { + modifySet(normalizePathSlashes(path.resolve(path.join(path$1, getPackageEntryPoint(path$1))))); + } + } + } + const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) => + isDirectory(path) + ); + return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths }; +} + +function getCommonJSMetaPromise(commonJSMetaPromises, id) { + let commonJSMetaPromise = commonJSMetaPromises.get(id); + if (commonJSMetaPromise) return commonJSMetaPromise.promise; + + const promise = new Promise((resolve) => { + commonJSMetaPromise = { + resolve, + promise: null + }; + commonJSMetaPromises.set(id, commonJSMetaPromise); + }); + commonJSMetaPromise.promise = promise; + + return promise; +} + +function setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) { + const commonJSMetaPromise = commonJSMetaPromises.get(id); + if (commonJSMetaPromise) { + if (commonJSMetaPromise.resolve) { + commonJSMetaPromise.resolve(commonjsMeta); + commonJSMetaPromise.resolve = null; + } + } else { + commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null }); + } +} + +// e.g. id === "commonjsHelpers?commonjsRegister" +function getSpecificHelperProxy(id) { + return `export {${id.split('?')[1]} as default} from "${HELPERS_ID}";`; +} + +function getUnknownRequireProxy(id, requireReturnsDefault) { + if (requireReturnsDefault === true || id.endsWith('.json')) { + return `export {default} from ${JSON.stringify(id)};`; + } + const name = getName(id); + const exported = + requireReturnsDefault === 'auto' + ? `import {getDefaultExportFromNamespaceIfNotNamed} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});` + : requireReturnsDefault === 'preferred' + ? `import {getDefaultExportFromNamespaceIfPresent} from "${HELPERS_ID}"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});` + : !requireReturnsDefault + ? `import {getAugmentedNamespace} from "${HELPERS_ID}"; export default /*@__PURE__*/getAugmentedNamespace(${name});` + : `export default ${name};`; + return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`; +} + +function getDynamicJsonProxy(id, commonDir) { + const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length)); + return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify( + getVirtualPathForDynamicRequirePath(normalizedPath, commonDir) + )}, function (module, exports) { + module.exports = require(${JSON.stringify(normalizedPath)}); +});`; +} + +function getDynamicRequireProxy(normalizedPath, commonDir) { + return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\ncommonjsRegister(${JSON.stringify( + getVirtualPathForDynamicRequirePath(normalizedPath, commonDir) + )}, function (module, exports) { + ${fs.readFileSync(normalizedPath, { encoding: 'utf8' })} +});`; +} + +async function getStaticRequireProxy( + id, + requireReturnsDefault, + esModulesWithDefaultExport, + esModulesWithNamedExports, + commonJsMetaPromises +) { + const name = getName(id); + const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id); + if (commonjsMeta && commonjsMeta.isCommonJS) { + return `export { __moduleExports as default } from ${JSON.stringify(id)};`; + } else if (commonjsMeta === null) { + return getUnknownRequireProxy(id, requireReturnsDefault); + } else if (!requireReturnsDefault) { + return `import { getAugmentedNamespace } from "${HELPERS_ID}"; import * as ${name} from ${JSON.stringify( + id + )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`; + } else if ( + requireReturnsDefault !== true && + (requireReturnsDefault === 'namespace' || + !esModulesWithDefaultExport.has(id) || + (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id))) + ) { + return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`; + } + return `export { default } from ${JSON.stringify(id)};`; +} + +/* eslint-disable no-param-reassign, no-undefined */ + +function getCandidatesForExtension(resolved, extension) { + return [resolved + extension, `${resolved}${path.sep}index${extension}`]; +} + +function getCandidates(resolved, extensions) { + return extensions.reduce( + (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)), + [resolved] + ); +} + +function getResolveId(extensions) { + function resolveExtensions(importee, importer) { + // not our problem + if (importee[0] !== '.' || !importer) return undefined; + + const resolved = path.resolve(path.dirname(importer), importee); + const candidates = getCandidates(resolved, extensions); + + for (let i = 0; i < candidates.length; i += 1) { + try { + const stats = fs.statSync(candidates[i]); + if (stats.isFile()) return { id: candidates[i] }; + } catch (err) { + /* noop */ + } + } + + return undefined; + } + + return function resolveId(importee, rawImporter, resolveOptions) { + if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) { + return importee; + } + + const importer = + rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX) + ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX) + : rawImporter; + + // Except for exports, proxies are only importing resolved ids, + // no need to resolve again + if (importer && isWrappedId(importer, PROXY_SUFFIX)) { + return importee; + } + + const isProxyModule = isWrappedId(importee, PROXY_SUFFIX); + const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX); + let isModuleRegistration = false; + + if (isProxyModule) { + importee = unwrapId(importee, PROXY_SUFFIX); + } else if (isRequiredModule) { + importee = unwrapId(importee, REQUIRE_SUFFIX); + + isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX); + if (isModuleRegistration) { + importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX); + } + } + + if ( + importee.startsWith(HELPERS_ID) || + importee === DYNAMIC_PACKAGES_ID || + importee.startsWith(DYNAMIC_JSON_PREFIX) + ) { + return importee; + } + + if (importee.startsWith('\0')) { + return null; + } + + return this.resolve( + importee, + importer, + Object.assign({}, resolveOptions, { + skipSelf: true, + custom: Object.assign({}, resolveOptions.custom, { + 'node-resolve': { isRequire: isProxyModule || isRequiredModule } + }) + }) + ).then((resolved) => { + if (!resolved) { + resolved = resolveExtensions(importee, importer); + } + if (resolved && isProxyModule) { + resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX); + resolved.external = false; + } else if (resolved && isModuleRegistration) { + resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX); + } else if (!resolved && (isProxyModule || isRequiredModule)) { + return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false }; + } + return resolved; + }); + }; +} + +function validateRollupVersion(rollupVersion, peerDependencyVersion) { + const [major, minor] = rollupVersion.split('.').map(Number); + const versionRegexp = /\^(\d+\.\d+)\.\d+/g; + let minMajor = Infinity; + let minMinor = Infinity; + let foundVersion; + // eslint-disable-next-line no-cond-assign + while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) { + const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number); + if (foundMajor < minMajor) { + minMajor = foundMajor; + minMinor = foundMinor; + } + } + if (major < minMajor || (major === minMajor && minor < minMinor)) { + throw new Error( + `Insufficient Rollup version: "@rollup/plugin-commonjs" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.` + ); + } +} + +const operators = { + '==': (x) => equals(x.left, x.right, false), + + '!=': (x) => not(operators['=='](x)), + + '===': (x) => equals(x.left, x.right, true), + + '!==': (x) => not(operators['==='](x)), + + '!': (x) => isFalsy(x.argument), + + '&&': (x) => isTruthy(x.left) && isTruthy(x.right), + + '||': (x) => isTruthy(x.left) || isTruthy(x.right) +}; + +function not(value) { + return value === null ? value : !value; +} + +function equals(a, b, strict) { + if (a.type !== b.type) return null; + // eslint-disable-next-line eqeqeq + if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value; + return null; +} + +function isTruthy(node) { + if (!node) return false; + if (node.type === 'Literal') return !!node.value; + if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression); + if (node.operator in operators) return operators[node.operator](node); + return null; +} + +function isFalsy(node) { + return not(isTruthy(node)); +} + +function getKeypath(node) { + const parts = []; + + while (node.type === 'MemberExpression') { + if (node.computed) return null; + + parts.unshift(node.property.name); + // eslint-disable-next-line no-param-reassign + node = node.object; + } + + if (node.type !== 'Identifier') return null; + + const { name } = node; + parts.unshift(name); + + return { name, keypath: parts.join('.') }; +} + +const KEY_COMPILED_ESM = '__esModule'; + +function isDefineCompiledEsm(node) { + const definedProperty = + getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports'); + if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) { + return isTruthy(definedProperty.value); + } + return false; +} + +function getDefinePropertyCallName(node, targetName) { + const { + callee: { object, property } + } = node; + if (!object || object.type !== 'Identifier' || object.name !== 'Object') return; + if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return; + if (node.arguments.length !== 3) return; + + const targetNames = targetName.split('.'); + const [target, key, value] = node.arguments; + if (targetNames.length === 1) { + if (target.type !== 'Identifier' || target.name !== targetNames[0]) { + return; + } + } + + if (targetNames.length === 2) { + if ( + target.type !== 'MemberExpression' || + target.object.name !== targetNames[0] || + target.property.name !== targetNames[1] + ) { + return; + } + } + + if (value.type !== 'ObjectExpression' || !value.properties) return; + + const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value'); + if (!valueProperty || !valueProperty.value) return; + + // eslint-disable-next-line consistent-return + return { key: key.value, value: valueProperty.value }; +} + +function isShorthandProperty(parent) { + return parent && parent.type === 'Property' && parent.shorthand; +} + +function hasDefineEsmProperty(node) { + return node.properties.some((property) => { + if ( + property.type === 'Property' && + property.key.type === 'Identifier' && + property.key.name === '__esModule' && + isTruthy(property.value) + ) { + return true; + } + return false; + }); +} + +function wrapCode(magicString, uses, moduleName, exportsName) { + const args = []; + const passedArgs = []; + if (uses.module) { + args.push('module'); + passedArgs.push(moduleName); + } + if (uses.exports) { + args.push('exports'); + passedArgs.push(exportsName); + } + magicString + .trim() + .prepend(`(function (${args.join(', ')}) {\n`) + .append(`\n}(${passedArgs.join(', ')}));`); +} + +function rewriteExportsAndGetExportsBlock( + magicString, + moduleName, + exportsName, + wrapped, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsAssignmentsByName, + topLevelAssignments, + defineCompiledEsmExpressions, + deconflictedExportNames, + code, + HELPERS_NAME, + exportMode, + detectWrappedDefault, + defaultIsModuleExports +) { + const exports = []; + const exportDeclarations = []; + + if (exportMode === 'replace') { + getExportsForReplacedModuleExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsName + ); + } else { + exports.push(`${exportsName} as __moduleExports`); + if (wrapped) { + getExportsWhenWrapping( + exportDeclarations, + exportsName, + detectWrappedDefault, + HELPERS_NAME, + defaultIsModuleExports + ); + } else { + getExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + exportsAssignmentsByName, + deconflictedExportNames, + topLevelAssignments, + moduleName, + exportsName, + defineCompiledEsmExpressions, + HELPERS_NAME, + defaultIsModuleExports + ); + } + } + if (exports.length) { + exportDeclarations.push(`export { ${exports.join(', ')} };`); + } + + return `\n\n${exportDeclarations.join('\n')}`; +} + +function getExportsForReplacedModuleExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsName +) { + for (const { left } of moduleExportsAssignments) { + magicString.overwrite(left.start, left.end, exportsName); + } + magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var '); + exports.push(`${exportsName} as __moduleExports`); + exportDeclarations.push(`export default ${exportsName};`); +} + +function getExportsWhenWrapping( + exportDeclarations, + exportsName, + detectWrappedDefault, + HELPERS_NAME, + defaultIsModuleExports +) { + exportDeclarations.push( + `export default ${ + detectWrappedDefault && defaultIsModuleExports === 'auto' + ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})` + : defaultIsModuleExports === false + ? `${exportsName}.default` + : exportsName + };` + ); +} + +function getExports( + magicString, + exports, + exportDeclarations, + moduleExportsAssignments, + exportsAssignmentsByName, + deconflictedExportNames, + topLevelAssignments, + moduleName, + exportsName, + defineCompiledEsmExpressions, + HELPERS_NAME, + defaultIsModuleExports +) { + let deconflictedDefaultExportName; + // Collect and rewrite module.exports assignments + for (const { left } of moduleExportsAssignments) { + magicString.overwrite(left.start, left.end, `${moduleName}.exports`); + } + + // Collect and rewrite named exports + for (const [exportName, { nodes }] of exportsAssignmentsByName) { + const deconflicted = deconflictedExportNames[exportName]; + let needsDeclaration = true; + for (const node of nodes) { + let replacement = `${deconflicted} = ${exportsName}.${exportName}`; + if (needsDeclaration && topLevelAssignments.has(node)) { + replacement = `var ${replacement}`; + needsDeclaration = false; + } + magicString.overwrite(node.start, node.left.end, replacement); + } + if (needsDeclaration) { + magicString.prepend(`var ${deconflicted};\n`); + } + + if (exportName === 'default') { + deconflictedDefaultExportName = deconflicted; + } else { + exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`); + } + } + + // Collect and rewrite exports.__esModule assignments + let isRestorableCompiledEsm = false; + for (const expression of defineCompiledEsmExpressions) { + isRestorableCompiledEsm = true; + const moduleExportsExpression = + expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object; + magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName); + } + + if (!isRestorableCompiledEsm || defaultIsModuleExports === true) { + exportDeclarations.push(`export default ${exportsName};`); + } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) { + exports.push(`${deconflictedDefaultExportName || exportsName} as default`); + } else { + exportDeclarations.push( + `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});` + ); + } +} + +function isRequireStatement(node, scope) { + if (!node) return false; + if (node.type !== 'CallExpression') return false; + + // Weird case of `require()` or `module.require()` without arguments + if (node.arguments.length === 0) return false; + + return isRequire(node.callee, scope); +} + +function isRequire(node, scope) { + return ( + (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) || + (node.type === 'MemberExpression' && isModuleRequire(node, scope)) + ); +} + +function isModuleRequire({ object, property }, scope) { + return ( + object.type === 'Identifier' && + object.name === 'module' && + property.type === 'Identifier' && + property.name === 'require' && + !scope.contains('module') + ); +} + +function isStaticRequireStatement(node, scope) { + if (!isRequireStatement(node, scope)) return false; + return !hasDynamicArguments(node); +} + +function hasDynamicArguments(node) { + return ( + node.arguments.length > 1 || + (node.arguments[0].type !== 'Literal' && + (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0)) + ); +} + +const reservedMethod = { resolve: true, cache: true, main: true }; + +function isNodeRequirePropertyAccess(parent) { + return parent && parent.property && reservedMethod[parent.property.name]; +} + +function isIgnoredRequireStatement(requiredNode, ignoreRequire) { + return ignoreRequire(requiredNode.arguments[0].value); +} + +function getRequireStringArg(node) { + return node.arguments[0].type === 'Literal' + ? node.arguments[0].value + : node.arguments[0].quasis[0].value.cooked; +} + +function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) { + if (!/^(?:\.{0,2}[/\\]|[A-Za-z]:[/\\])/.test(source)) { + try { + const resolvedPath = normalizePathSlashes(resolve.sync(source, { basedir: path.dirname(id) })); + if (dynamicRequireModuleSet.has(resolvedPath)) { + return true; + } + } catch (ex) { + // Probably a node.js internal module + return false; + } + + return false; + } + + for (const attemptExt of ['', '.js', '.json']) { + const resolvedPath = normalizePathSlashes(path.resolve(path.dirname(id), source + attemptExt)); + if (dynamicRequireModuleSet.has(resolvedPath)) { + return true; + } + } + + return false; +} + +function getRequireHandlers() { + const requiredSources = []; + const requiredBySource = Object.create(null); + const requiredByNode = new Map(); + const requireExpressionsWithUsedReturnValue = []; + + function addRequireStatement(sourceId, node, scope, usesReturnValue) { + const required = getRequired(sourceId); + requiredByNode.set(node, { scope, required }); + if (usesReturnValue) { + required.nodesUsingRequired.push(node); + requireExpressionsWithUsedReturnValue.push(node); + } + } + + function getRequired(sourceId) { + if (!requiredBySource[sourceId]) { + requiredSources.push(sourceId); + + requiredBySource[sourceId] = { + source: sourceId, + name: null, + nodesUsingRequired: [] + }; + } + + return requiredBySource[sourceId]; + } + + function rewriteRequireExpressionsAndGetImportBlock( + magicString, + topLevelDeclarations, + topLevelRequireDeclarators, + reassignedNames, + helpersName, + dynamicRegisterSources, + moduleName, + exportsName, + id, + exportMode + ) { + setRemainingImportNamesAndRewriteRequires( + requireExpressionsWithUsedReturnValue, + requiredByNode, + magicString + ); + const imports = []; + imports.push(`import * as ${helpersName} from "${HELPERS_ID}";`); + if (exportMode === 'module') { + imports.push( + `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify( + wrapId(id, MODULE_SUFFIX) + )}` + ); + } else if (exportMode === 'exports') { + imports.push( + `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}` + ); + } + for (const source of dynamicRegisterSources) { + imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`); + } + for (const source of requiredSources) { + if (!source.startsWith('\0')) { + imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`); + } + const { name, nodesUsingRequired } = requiredBySource[source]; + imports.push( + `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify( + source.startsWith('\0') ? source : wrapId(source, PROXY_SUFFIX) + )};` + ); + } + return imports.length ? `${imports.join('\n')}\n\n` : ''; + } + + return { + addRequireStatement, + requiredSources, + rewriteRequireExpressionsAndGetImportBlock + }; +} + +function setRemainingImportNamesAndRewriteRequires( + requireExpressionsWithUsedReturnValue, + requiredByNode, + magicString +) { + let uid = 0; + for (const requireExpression of requireExpressionsWithUsedReturnValue) { + const { required } = requiredByNode.get(requireExpression); + if (!required.name) { + let potentialName; + const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName); + do { + potentialName = `require$$${uid}`; + uid += 1; + } while (required.nodesUsingRequired.some(isUsedName)); + required.name = potentialName; + } + magicString.overwrite(requireExpression.start, requireExpression.end, required.name); + } +} + +/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */ + +const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; + +const functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; + +function transformCommonjs( + parse, + code, + id, + isEsModule, + ignoreGlobal, + ignoreRequire, + ignoreDynamicRequires, + getIgnoreTryCatchRequireStatementMode, + sourceMap, + isDynamicRequireModulesEnabled, + dynamicRequireModuleSet, + disableWrap, + commonDir, + astCache, + defaultIsModuleExports +) { + const ast = astCache || tryParse(parse, code, id); + const magicString = new MagicString__default["default"](code); + const uses = { + module: false, + exports: false, + global: false, + require: false + }; + let usesDynamicRequire = false; + const virtualDynamicRequirePath = + isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(path.dirname(id), commonDir); + let scope = pluginutils.attachScopes(ast, 'scope'); + let lexicalDepth = 0; + let programDepth = 0; + let currentTryBlockEnd = null; + let shouldWrap = false; + + const globals = new Set(); + + // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ + const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers'); + const dynamicRegisterSources = new Set(); + let hasRemovedRequire = false; + + const { + addRequireStatement, + requiredSources, + rewriteRequireExpressionsAndGetImportBlock + } = getRequireHandlers(); + + // See which names are assigned to. This is necessary to prevent + // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`, + // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) + const reassignedNames = new Set(); + const topLevelDeclarations = []; + const topLevelRequireDeclarators = new Set(); + const skippedNodes = new Set(); + const moduleAccessScopes = new Set([scope]); + const exportsAccessScopes = new Set([scope]); + const moduleExportsAssignments = []; + let firstTopLevelModuleExportsAssignment = null; + const exportsAssignmentsByName = new Map(); + const topLevelAssignments = new Set(); + const topLevelDefineCompiledEsmExpressions = []; + + estreeWalker.walk(ast, { + enter(node, parent) { + if (skippedNodes.has(node)) { + this.skip(); + return; + } + + if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) { + currentTryBlockEnd = null; + } + + programDepth += 1; + if (node.scope) ({ scope } = node); + if (functionType.test(node.type)) lexicalDepth += 1; + if (sourceMap) { + magicString.addSourcemapLocation(node.start); + magicString.addSourcemapLocation(node.end); + } + + // eslint-disable-next-line default-case + switch (node.type) { + case 'TryStatement': + if (currentTryBlockEnd === null) { + currentTryBlockEnd = node.block.end; + } + return; + case 'AssignmentExpression': + if (node.left.type === 'MemberExpression') { + const flattened = getKeypath(node.left); + if (!flattened || scope.contains(flattened.name)) return; + + const exportsPatternMatch = exportsPattern.exec(flattened.keypath); + if (!exportsPatternMatch || flattened.keypath === 'exports') return; + + const [, exportName] = exportsPatternMatch; + uses[flattened.name] = true; + + // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` – + if (flattened.keypath === 'module.exports') { + moduleExportsAssignments.push(node); + if (programDepth > 3) { + moduleAccessScopes.add(scope); + } else if (!firstTopLevelModuleExportsAssignment) { + firstTopLevelModuleExportsAssignment = node; + } + + if (defaultIsModuleExports === false) { + shouldWrap = true; + } else if (defaultIsModuleExports === 'auto') { + if (node.right.type === 'ObjectExpression') { + if (hasDefineEsmProperty(node.right)) { + shouldWrap = true; + } + } else if (defaultIsModuleExports === false) { + shouldWrap = true; + } + } + } else if (exportName === KEY_COMPILED_ESM) { + if (programDepth > 3) { + shouldWrap = true; + } else { + topLevelDefineCompiledEsmExpressions.push(node); + } + } else { + const exportsAssignments = exportsAssignmentsByName.get(exportName) || { + nodes: [], + scopes: new Set() + }; + exportsAssignments.nodes.push(node); + exportsAssignments.scopes.add(scope); + exportsAccessScopes.add(scope); + exportsAssignmentsByName.set(exportName, exportsAssignments); + if (programDepth <= 3) { + topLevelAssignments.add(node); + } + } + + skippedNodes.add(node.left); + } else { + for (const name of pluginutils.extractAssignedNames(node.left)) { + reassignedNames.add(name); + } + } + return; + case 'CallExpression': { + if (isDefineCompiledEsm(node)) { + if (programDepth === 3 && parent.type === 'ExpressionStatement') { + // skip special handling for [module.]exports until we know we render this + skippedNodes.add(node.arguments[0]); + topLevelDefineCompiledEsmExpressions.push(node); + } else { + shouldWrap = true; + } + return; + } + + if ( + node.callee.object && + node.callee.object.name === 'require' && + node.callee.property.name === 'resolve' && + hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet) + ) { + const requireNode = node.callee.object; + magicString.appendLeft( + node.end - 1, + `,${JSON.stringify( + path.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )}` + ); + magicString.overwrite( + requireNode.start, + requireNode.end, + `${HELPERS_NAME}.commonjsRequire`, + { + storeName: true + } + ); + return; + } + + if (!isStaticRequireStatement(node, scope)) return; + if (!isDynamicRequireModulesEnabled) { + skippedNodes.add(node.callee); + } + if (!isIgnoredRequireStatement(node, ignoreRequire)) { + skippedNodes.add(node.callee); + const usesReturnValue = parent.type !== 'ExpressionStatement'; + + let canConvertRequire = true; + let shouldRemoveRequireStatement = false; + + if (currentTryBlockEnd !== null) { + ({ + canConvertRequire, + shouldRemoveRequireStatement + } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value)); + + if (shouldRemoveRequireStatement) { + hasRemovedRequire = true; + } + } + + let sourceId = getRequireStringArg(node); + const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX); + if (isDynamicRegister) { + sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX); + if (sourceId.endsWith('.json')) { + sourceId = DYNAMIC_JSON_PREFIX + sourceId; + } + dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX)); + } else { + if ( + !sourceId.endsWith('.json') && + hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet) + ) { + if (shouldRemoveRequireStatement) { + magicString.overwrite(node.start, node.end, `undefined`); + } else if (canConvertRequire) { + magicString.overwrite( + node.start, + node.end, + `${HELPERS_NAME}.commonjsRequire(${JSON.stringify( + getVirtualPathForDynamicRequirePath(sourceId, commonDir) + )}, ${JSON.stringify( + path.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )})` + ); + usesDynamicRequire = true; + } + return; + } + + if (canConvertRequire) { + addRequireStatement(sourceId, node, scope, usesReturnValue); + } + } + + if (usesReturnValue) { + if (shouldRemoveRequireStatement) { + magicString.overwrite(node.start, node.end, `undefined`); + return; + } + + if ( + parent.type === 'VariableDeclarator' && + !scope.parent && + parent.id.type === 'Identifier' + ) { + // This will allow us to reuse this variable name as the imported variable if it is not reassigned + // and does not conflict with variables in other places where this is imported + topLevelRequireDeclarators.add(parent); + } + } else { + // This is a bare import, e.g. `require('foo');` + + if (!canConvertRequire && !shouldRemoveRequireStatement) { + return; + } + + magicString.remove(parent.start, parent.end); + } + } + return; + } + case 'ConditionalExpression': + case 'IfStatement': + // skip dead branches + if (isFalsy(node.test)) { + skippedNodes.add(node.consequent); + } else if (node.alternate && isTruthy(node.test)) { + skippedNodes.add(node.alternate); + } + return; + case 'Identifier': { + const { name } = node; + if (!(isReference__default["default"](node, parent) && !scope.contains(name))) return; + switch (name) { + case 'require': + if (isNodeRequirePropertyAccess(parent)) { + if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) { + if (parent.property.name === 'cache') { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + } + } + + return; + } + + if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) { + magicString.appendLeft( + parent.end - 1, + `,${JSON.stringify( + path.dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath + )}` + ); + } + if (!ignoreDynamicRequires) { + if (isShorthandProperty(parent)) { + magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`); + } else { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + } + } + usesDynamicRequire = true; + return; + case 'module': + case 'exports': + shouldWrap = true; + uses[name] = true; + return; + case 'global': + uses.global = true; + if (!ignoreGlobal) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { + storeName: true + }); + } + return; + case 'define': + magicString.overwrite(node.start, node.end, 'undefined', { + storeName: true + }); + return; + default: + globals.add(name); + return; + } + } + case 'MemberExpression': + if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { + storeName: true + }); + skippedNodes.add(node.object); + skippedNodes.add(node.property); + } + return; + case 'ReturnStatement': + // if top-level return, we need to wrap it + if (lexicalDepth === 0) { + shouldWrap = true; + } + return; + case 'ThisExpression': + // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal` + if (lexicalDepth === 0) { + uses.global = true; + if (!ignoreGlobal) { + magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { + storeName: true + }); + } + } + return; + case 'UnaryExpression': + // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151) + if (node.operator === 'typeof') { + const flattened = getKeypath(node.argument); + if (!flattened) return; + + if (scope.contains(flattened.name)) return; + + if ( + flattened.keypath === 'module.exports' || + flattened.keypath === 'module' || + flattened.keypath === 'exports' + ) { + magicString.overwrite(node.start, node.end, `'object'`, { + storeName: false + }); + } + } + return; + case 'VariableDeclaration': + if (!scope.parent) { + topLevelDeclarations.push(node); + } + } + }, + + leave(node) { + programDepth -= 1; + if (node.scope) scope = scope.parent; + if (functionType.test(node.type)) lexicalDepth -= 1; + } + }); + + const nameBase = getName(id); + const exportsName = deconflict([...exportsAccessScopes], globals, nameBase); + const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`); + const deconflictedExportNames = Object.create(null); + for (const [exportName, { scopes }] of exportsAssignmentsByName) { + deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName); + } + + // We cannot wrap ES/mixed modules + shouldWrap = + !isEsModule && + !disableWrap && + (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0)); + const detectWrappedDefault = + shouldWrap && + (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0); + + if ( + !( + requiredSources.length || + dynamicRegisterSources.size || + uses.module || + uses.exports || + uses.require || + usesDynamicRequire || + hasRemovedRequire || + topLevelDefineCompiledEsmExpressions.length > 0 + ) && + (ignoreGlobal || !uses.global) + ) { + return { meta: { commonjs: { isCommonJS: false } } }; + } + + let leadingComment = ''; + if (code.startsWith('/*')) { + const commentEnd = code.indexOf('*/', 2) + 2; + leadingComment = `${code.slice(0, commentEnd)}\n`; + magicString.remove(0, commentEnd).trim(); + } + + const exportMode = shouldWrap + ? uses.module + ? 'module' + : 'exports' + : firstTopLevelModuleExportsAssignment + ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0 + ? 'replace' + : 'module' + : moduleExportsAssignments.length === 0 + ? 'exports' + : 'module'; + + const importBlock = rewriteRequireExpressionsAndGetImportBlock( + magicString, + topLevelDeclarations, + topLevelRequireDeclarators, + reassignedNames, + HELPERS_NAME, + dynamicRegisterSources, + moduleName, + exportsName, + id, + exportMode + ); + + const exportBlock = isEsModule + ? '' + : rewriteExportsAndGetExportsBlock( + magicString, + moduleName, + exportsName, + shouldWrap, + moduleExportsAssignments, + firstTopLevelModuleExportsAssignment, + exportsAssignmentsByName, + topLevelAssignments, + topLevelDefineCompiledEsmExpressions, + deconflictedExportNames, + code, + HELPERS_NAME, + exportMode, + detectWrappedDefault, + defaultIsModuleExports + ); + + if (shouldWrap) { + wrapCode(magicString, uses, moduleName, exportsName); + } + + magicString + .trim() + .prepend(leadingComment + importBlock) + .append(exportBlock); + + return { + code: magicString.toString(), + map: sourceMap ? magicString.generateMap() : null, + syntheticNamedExports: isEsModule ? false : '__moduleExports', + meta: { commonjs: { isCommonJS: !isEsModule } } + }; +} + +function commonjs(options = {}) { + const extensions = options.extensions || ['.js']; + const filter = pluginutils.createFilter(options.include, options.exclude); + const { + ignoreGlobal, + ignoreDynamicRequires, + requireReturnsDefault: requireReturnsDefaultOption, + esmExternals + } = options; + const getRequireReturnsDefault = + typeof requireReturnsDefaultOption === 'function' + ? requireReturnsDefaultOption + : () => requireReturnsDefaultOption; + let esmExternalIds; + const isEsmExternal = + typeof esmExternals === 'function' + ? esmExternals + : Array.isArray(esmExternals) + ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id)) + : () => esmExternals; + const defaultIsModuleExports = + typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto'; + + const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths( + options.dynamicRequireTargets + ); + const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0; + const commonDir = isDynamicRequireModulesEnabled + ? getCommonDir__default["default"](null, Array.from(dynamicRequireModuleSet).concat(process.cwd())) + : null; + + const esModulesWithDefaultExport = new Set(); + const esModulesWithNamedExports = new Set(); + const commonJsMetaPromises = new Map(); + + const ignoreRequire = + typeof options.ignore === 'function' + ? options.ignore + : Array.isArray(options.ignore) + ? (id) => options.ignore.includes(id) + : () => false; + + const getIgnoreTryCatchRequireStatementMode = (id) => { + const mode = + typeof options.ignoreTryCatch === 'function' + ? options.ignoreTryCatch(id) + : Array.isArray(options.ignoreTryCatch) + ? options.ignoreTryCatch.includes(id) + : typeof options.ignoreTryCatch !== 'undefined' + ? options.ignoreTryCatch + : true; + + return { + canConvertRequire: mode !== 'remove' && mode !== true, + shouldRemoveRequireStatement: mode === 'remove' + }; + }; + + const resolveId = getResolveId(extensions); + + const sourceMap = options.sourceMap !== false; + + function transformAndCheckExports(code, id) { + if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) { + // eslint-disable-next-line no-param-reassign + code = + getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code; + } + + const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements( + this.parse, + code, + id + ); + if (hasDefaultExport) { + esModulesWithDefaultExport.add(id); + } + if (hasNamedExports) { + esModulesWithNamedExports.add(id); + } + + if ( + !dynamicRequireModuleSet.has(normalizePathSlashes(id)) && + (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules)) + ) { + return { meta: { commonjs: { isCommonJS: false } } }; + } + + // avoid wrapping as this is a commonjsRegister call + const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX); + if (disableWrap) { + // eslint-disable-next-line no-param-reassign + id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX); + } + + return transformCommonjs( + this.parse, + code, + id, + isEsModule, + ignoreGlobal || isEsModule, + ignoreRequire, + ignoreDynamicRequires && !isDynamicRequireModulesEnabled, + getIgnoreTryCatchRequireStatementMode, + sourceMap, + isDynamicRequireModulesEnabled, + dynamicRequireModuleSet, + disableWrap, + commonDir, + ast, + defaultIsModuleExports + ); + } + + return { + name: 'commonjs', + + buildStart() { + validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup); + if (options.namedExports != null) { + this.warn( + 'The namedExports option from "@rollup/plugin-commonjs" is deprecated. Named exports are now handled automatically.' + ); + } + }, + + resolveId, + + load(id) { + if (id === HELPERS_ID) { + return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires); + } + + if (id.startsWith(HELPERS_ID)) { + return getSpecificHelperProxy(id); + } + + if (isWrappedId(id, MODULE_SUFFIX)) { + const actualId = unwrapId(id, MODULE_SUFFIX); + let name = getName(actualId); + let code; + if (isDynamicRequireModulesEnabled) { + if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) { + name = `${name}_`; + } + code = + `import {commonjsRequire, createModule} from "${HELPERS_ID}";\n` + + `var ${name} = createModule(${JSON.stringify( + getVirtualPathForDynamicRequirePath(path.dirname(actualId), commonDir) + )});\n` + + `export {${name} as __module}`; + } else { + code = `var ${name} = {exports: {}}; export {${name} as __module}`; + } + return { + code, + syntheticNamedExports: '__module', + meta: { commonjs: { isCommonJS: false } } + }; + } + + if (isWrappedId(id, EXPORTS_SUFFIX)) { + const actualId = unwrapId(id, EXPORTS_SUFFIX); + const name = getName(actualId); + return { + code: `var ${name} = {}; export {${name} as __exports}`, + meta: { commonjs: { isCommonJS: false } } + }; + } + + if (isWrappedId(id, EXTERNAL_SUFFIX)) { + const actualId = unwrapId(id, EXTERNAL_SUFFIX); + return getUnknownRequireProxy( + actualId, + isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true + ); + } + + if (id === DYNAMIC_PACKAGES_ID) { + return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir); + } + + if (id.startsWith(DYNAMIC_JSON_PREFIX)) { + return getDynamicJsonProxy(id, commonDir); + } + + if (isDynamicModuleImport(id, dynamicRequireModuleSet)) { + return `export default require(${JSON.stringify(normalizePathSlashes(id))});`; + } + + if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) { + return getDynamicRequireProxy( + normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)), + commonDir + ); + } + + if (isWrappedId(id, PROXY_SUFFIX)) { + const actualId = unwrapId(id, PROXY_SUFFIX); + return getStaticRequireProxy( + actualId, + getRequireReturnsDefault(actualId), + esModulesWithDefaultExport, + esModulesWithNamedExports, + commonJsMetaPromises + ); + } + + return null; + }, + + transform(code, rawId) { + let id = rawId; + + if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) { + id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX); + } + + const extName = path.extname(id); + if ( + extName !== '.cjs' && + id !== DYNAMIC_PACKAGES_ID && + !id.startsWith(DYNAMIC_JSON_PREFIX) && + (!filter(id) || !extensions.includes(extName)) + ) { + return null; + } + + try { + return transformAndCheckExports.call(this, code, rawId); + } catch (err) { + return this.error(err, err.loc); + } + }, + + moduleParsed({ id, meta: { commonjs: commonjsMeta } }) { + if (commonjsMeta && commonjsMeta.isCommonJS != null) { + setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta); + return; + } + setCommonJSMetaPromise(commonJsMetaPromises, id, null); + } + }; +} + +module.exports = commonjs; +//# sourceMappingURL=index.js.map diff --git a/build/node_modules/@rollup/plugin-commonjs/dist/index.js.map b/build/node_modules/@rollup/plugin-commonjs/dist/index.js.map new file mode 100644 index 00000000..78623c4b --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/parse.js","../src/analyze-top-level-statements.js","../src/helpers.js","../src/utils.js","../src/dynamic-packages-manager.js","../src/dynamic-require-paths.js","../src/is-cjs.js","../src/proxies.js","../src/resolve-id.js","../src/rollup-version.js","../src/ast-utils.js","../src/generate-exports.js","../src/generate-imports.js","../src/transform-commonjs.js","../src/index.js"],"sourcesContent":["export function tryParse(parse, code, id) {\n try {\n return parse(code, { allowReturnOutsideFunction: true });\n } catch (err) {\n err.message += ` in ${id}`;\n throw err;\n }\n}\n\nconst firstpassGlobal = /\\b(?:require|module|exports|global)\\b/;\n\nconst firstpassNoGlobal = /\\b(?:require|module|exports)\\b/;\n\nexport function hasCjsKeywords(code, ignoreGlobal) {\n const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;\n return firstpass.test(code);\n}\n","/* eslint-disable no-underscore-dangle */\n\nimport { tryParse } from './parse';\n\nexport default function analyzeTopLevelStatements(parse, code, id) {\n const ast = tryParse(parse, code, id);\n\n let isEsModule = false;\n let hasDefaultExport = false;\n let hasNamedExports = false;\n\n for (const node of ast.body) {\n switch (node.type) {\n case 'ExportDefaultDeclaration':\n isEsModule = true;\n hasDefaultExport = true;\n break;\n case 'ExportNamedDeclaration':\n isEsModule = true;\n if (node.declaration) {\n hasNamedExports = true;\n } else {\n for (const specifier of node.specifiers) {\n if (specifier.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n }\n }\n break;\n case 'ExportAllDeclaration':\n isEsModule = true;\n if (node.exported && node.exported.name === 'default') {\n hasDefaultExport = true;\n } else {\n hasNamedExports = true;\n }\n break;\n case 'ImportDeclaration':\n isEsModule = true;\n break;\n default:\n }\n }\n\n return { isEsModule, hasDefaultExport, hasNamedExports, ast };\n}\n","export const isWrappedId = (id, suffix) => id.endsWith(suffix);\nexport const wrapId = (id, suffix) => `\\0${id}${suffix}`;\nexport const unwrapId = (wrappedId, suffix) => wrappedId.slice(1, -suffix.length);\n\nexport const PROXY_SUFFIX = '?commonjs-proxy';\nexport const REQUIRE_SUFFIX = '?commonjs-require';\nexport const EXTERNAL_SUFFIX = '?commonjs-external';\nexport const EXPORTS_SUFFIX = '?commonjs-exports';\nexport const MODULE_SUFFIX = '?commonjs-module';\n\nexport const DYNAMIC_REGISTER_SUFFIX = '?commonjs-dynamic-register';\nexport const DYNAMIC_JSON_PREFIX = '\\0commonjs-dynamic-json:';\nexport const DYNAMIC_PACKAGES_ID = '\\0commonjs-dynamic-packages';\n\nexport const HELPERS_ID = '\\0commonjsHelpers.js';\n\n// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.\n// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.\n// This will no longer be necessary once Rollup switches to ES6 output, likely\n// in Rollup 3\n\nconst HELPERS = `\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function getDefaultExportFromNamespaceIfPresent (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') ? n['default'] : n;\n}\n\nexport function getDefaultExportFromNamespaceIfNotNamed (n) {\n\treturn n && Object.prototype.hasOwnProperty.call(n, 'default') && Object.keys(n).length === 1 ? n['default'] : n;\n}\n\nexport function getAugmentedNamespace(n) {\n\tif (n.__esModule) return n;\n\tvar a = Object.defineProperty({}, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n`;\n\nconst FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`;\n\nconst HELPER_NON_DYNAMIC = `\nexport function commonjsRequire (path) {\n\t${FAILED_REQUIRE_ERROR}\n}\n`;\n\nconst getDynamicHelpers = (ignoreDynamicRequires) => `\nexport function createModule(modulePath) {\n\treturn {\n\t\tpath: modulePath,\n\t\texports: {},\n\t\trequire: function (path, base) {\n\t\t\treturn commonjsRequire(path, base == null ? modulePath : base);\n\t\t}\n\t};\n}\n\nexport function commonjsRegister (path, loader) {\n\tDYNAMIC_REQUIRE_LOADERS[path] = loader;\n}\n\nexport function commonjsRegisterOrShort (path, to) {\n\tvar resolvedPath = commonjsResolveImpl(path, null, true);\n\tif (resolvedPath !== null && DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t DYNAMIC_REQUIRE_CACHE[path] = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n\t} else {\n\t DYNAMIC_REQUIRE_SHORTS[path] = to;\n\t}\n}\n\nvar DYNAMIC_REQUIRE_LOADERS = Object.create(null);\nvar DYNAMIC_REQUIRE_CACHE = Object.create(null);\nvar DYNAMIC_REQUIRE_SHORTS = Object.create(null);\nvar DEFAULT_PARENT_MODULE = {\n\tid: '<' + 'rollup>', exports: {}, parent: undefined, filename: null, loaded: false, children: [], paths: []\n};\nvar CHECKED_EXTENSIONS = ['', '.js', '.json'];\n\nfunction normalize (path) {\n\tpath = path.replace(/\\\\\\\\/g, '/');\n\tvar parts = path.split('/');\n\tvar slashed = parts[0] === '';\n\tfor (var i = 1; i < parts.length; i++) {\n\t\tif (parts[i] === '.' || parts[i] === '') {\n\t\t\tparts.splice(i--, 1);\n\t\t}\n\t}\n\tfor (var i = 1; i < parts.length; i++) {\n\t\tif (parts[i] !== '..') continue;\n\t\tif (i > 0 && parts[i - 1] !== '..' && parts[i - 1] !== '.') {\n\t\t\tparts.splice(--i, 2);\n\t\t\ti--;\n\t\t}\n\t}\n\tpath = parts.join('/');\n\tif (slashed && path[0] !== '/')\n\t path = '/' + path;\n\telse if (path.length === 0)\n\t path = '.';\n\treturn path;\n}\n\nfunction join () {\n\tif (arguments.length === 0)\n\t return '.';\n\tvar joined;\n\tfor (var i = 0; i < arguments.length; ++i) {\n\t var arg = arguments[i];\n\t if (arg.length > 0) {\n\t\tif (joined === undefined)\n\t\t joined = arg;\n\t\telse\n\t\t joined += '/' + arg;\n\t }\n\t}\n\tif (joined === undefined)\n\t return '.';\n\n\treturn joined;\n}\n\nfunction isPossibleNodeModulesPath (modulePath) {\n\tvar c0 = modulePath[0];\n\tif (c0 === '/' || c0 === '\\\\\\\\') return false;\n\tvar c1 = modulePath[1], c2 = modulePath[2];\n\tif ((c0 === '.' && (!c1 || c1 === '/' || c1 === '\\\\\\\\')) ||\n\t\t(c0 === '.' && c1 === '.' && (!c2 || c2 === '/' || c2 === '\\\\\\\\'))) return false;\n\tif (c1 === ':' && (c2 === '/' || c2 === '\\\\\\\\'))\n\t\treturn false;\n\treturn true;\n}\n\nfunction dirname (path) {\n if (path.length === 0)\n return '.';\n\n var i = path.length - 1;\n while (i > 0) {\n var c = path.charCodeAt(i);\n if ((c === 47 || c === 92) && i !== path.length - 1)\n break;\n i--;\n }\n\n if (i > 0)\n return path.substr(0, i);\n\n if (path.chartCodeAt(0) === 47 || path.chartCodeAt(0) === 92)\n return path.charAt(0);\n\n return '.';\n}\n\nexport function commonjsResolveImpl (path, originalModuleDir, testCache) {\n\tvar shouldTryNodeModules = isPossibleNodeModulesPath(path);\n\tpath = normalize(path);\n\tvar relPath;\n\tif (path[0] === '/') {\n\t\toriginalModuleDir = '/';\n\t}\n\twhile (true) {\n\t\tif (!shouldTryNodeModules) {\n\t\t\trelPath = originalModuleDir ? normalize(originalModuleDir + '/' + path) : path;\n\t\t} else if (originalModuleDir) {\n\t\t\trelPath = normalize(originalModuleDir + '/node_modules/' + path);\n\t\t} else {\n\t\t\trelPath = normalize(join('node_modules', path));\n\t\t}\n\n\t\tif (relPath.endsWith('/..')) {\n\t\t\tbreak; // Travelled too far up, avoid infinite loop\n\t\t}\n\n\t\tfor (var extensionIndex = 0; extensionIndex < CHECKED_EXTENSIONS.length; extensionIndex++) {\n\t\t\tvar resolvedPath = relPath + CHECKED_EXTENSIONS[extensionIndex];\n\t\t\tif (DYNAMIC_REQUIRE_CACHE[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_SHORTS[resolvedPath]) {\n\t\t\t return resolvedPath;\n\t\t\t}\n\t\t\tif (DYNAMIC_REQUIRE_LOADERS[resolvedPath]) {\n\t\t\t\treturn resolvedPath;\n\t\t\t}\n\t\t}\n\t\tif (!shouldTryNodeModules) break;\n\t\tvar nextDir = normalize(originalModuleDir + '/..');\n\t\tif (nextDir === originalModuleDir) break;\n\t\toriginalModuleDir = nextDir;\n\t}\n\treturn null;\n}\n\nexport function commonjsResolve (path, originalModuleDir) {\n\tvar resolvedPath = commonjsResolveImpl(path, originalModuleDir);\n\tif (resolvedPath !== null) {\n\t\treturn resolvedPath;\n\t}\n\treturn require.resolve(path);\n}\n\nexport function commonjsRequire (path, originalModuleDir) {\n\tvar resolvedPath = commonjsResolveImpl(path, originalModuleDir, true);\n\tif (resolvedPath !== null) {\n var cachedModule = DYNAMIC_REQUIRE_CACHE[resolvedPath];\n if (cachedModule) return cachedModule.exports;\n var shortTo = DYNAMIC_REQUIRE_SHORTS[resolvedPath];\n if (shortTo) {\n cachedModule = DYNAMIC_REQUIRE_CACHE[shortTo];\n if (cachedModule)\n return cachedModule.exports;\n resolvedPath = commonjsResolveImpl(shortTo, null, true);\n }\n var loader = DYNAMIC_REQUIRE_LOADERS[resolvedPath];\n if (loader) {\n DYNAMIC_REQUIRE_CACHE[resolvedPath] = cachedModule = {\n id: resolvedPath,\n filename: resolvedPath,\n path: dirname(resolvedPath),\n exports: {},\n parent: DEFAULT_PARENT_MODULE,\n loaded: false,\n children: [],\n paths: [],\n require: function (path, base) {\n return commonjsRequire(path, (base === undefined || base === null) ? cachedModule.path : base);\n }\n };\n try {\n loader.call(commonjsGlobal, cachedModule, cachedModule.exports);\n } catch (error) {\n delete DYNAMIC_REQUIRE_CACHE[resolvedPath];\n throw error;\n }\n cachedModule.loaded = true;\n return cachedModule.exports;\n };\n\t}\n\t${ignoreDynamicRequires ? 'return require(path);' : FAILED_REQUIRE_ERROR}\n}\n\ncommonjsRequire.cache = DYNAMIC_REQUIRE_CACHE;\ncommonjsRequire.resolve = commonjsResolve;\n`;\n\nexport function getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires) {\n return `${HELPERS}${\n isDynamicRequireModulesEnabled ? getDynamicHelpers(ignoreDynamicRequires) : HELPER_NON_DYNAMIC\n }`;\n}\n","/* eslint-disable import/prefer-default-export */\n\nimport { basename, dirname, extname } from 'path';\n\nimport { makeLegalIdentifier } from '@rollup/pluginutils';\n\nexport function deconflict(scopes, globals, identifier) {\n let i = 1;\n let deconflicted = makeLegalIdentifier(identifier);\n const hasConflicts = () =>\n scopes.some((scope) => scope.contains(deconflicted)) || globals.has(deconflicted);\n\n while (hasConflicts()) {\n deconflicted = makeLegalIdentifier(`${identifier}_${i}`);\n i += 1;\n }\n\n for (const scope of scopes) {\n scope.declarations[deconflicted] = true;\n }\n\n return deconflicted;\n}\n\nexport function getName(id) {\n const name = makeLegalIdentifier(basename(id, extname(id)));\n if (name !== 'index') {\n return name;\n }\n return makeLegalIdentifier(basename(dirname(id)));\n}\n\nexport function normalizePathSlashes(path) {\n return path.replace(/\\\\/g, '/');\n}\n\nconst VIRTUAL_PATH_BASE = '/$$rollup_base$$';\nexport const getVirtualPathForDynamicRequirePath = (path, commonDir) => {\n const normalizedPath = normalizePathSlashes(path);\n return normalizedPath.startsWith(commonDir)\n ? VIRTUAL_PATH_BASE + normalizedPath.slice(commonDir.length)\n : normalizedPath;\n};\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX, HELPERS_ID, wrapId } from './helpers';\nimport { getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\nexport function getPackageEntryPoint(dirPath) {\n let entryPoint = 'index.js';\n\n try {\n if (existsSync(join(dirPath, 'package.json'))) {\n entryPoint =\n JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main ||\n entryPoint;\n }\n } catch (ignored) {\n // ignored\n }\n\n return entryPoint;\n}\n\nexport function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir) {\n let code = `const commonjsRegisterOrShort = require('${HELPERS_ID}?commonjsRegisterOrShort');`;\n for (const dir of dynamicRequireModuleDirPaths) {\n const entryPoint = getPackageEntryPoint(dir);\n\n code += `\\ncommonjsRegisterOrShort(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dir, commonDir)\n )}, ${JSON.stringify(getVirtualPathForDynamicRequirePath(join(dir, entryPoint), commonDir))});`;\n }\n return code;\n}\n\nexport function getDynamicPackagesEntryIntro(\n dynamicRequireModuleDirPaths,\n dynamicRequireModuleSet\n) {\n let dynamicImports = Array.from(\n dynamicRequireModuleSet,\n (dynamicId) => `require(${JSON.stringify(wrapId(dynamicId, DYNAMIC_REGISTER_SUFFIX))});`\n ).join('\\n');\n\n if (dynamicRequireModuleDirPaths.length) {\n dynamicImports += `require(${JSON.stringify(\n wrapId(DYNAMIC_PACKAGES_ID, DYNAMIC_REGISTER_SUFFIX)\n )});`;\n }\n\n return dynamicImports;\n}\n\nexport function isDynamicModuleImport(id, dynamicRequireModuleSet) {\n const normalizedPath = normalizePathSlashes(id);\n return dynamicRequireModuleSet.has(normalizedPath) && !normalizedPath.endsWith('.json');\n}\n","import { statSync } from 'fs';\n\nimport { join, resolve } from 'path';\n\nimport glob from 'glob';\n\nimport { normalizePathSlashes } from './utils';\nimport { getPackageEntryPoint } from './dynamic-packages-manager';\n\nfunction isDirectory(path) {\n try {\n if (statSync(path).isDirectory()) return true;\n } catch (ignored) {\n // Nothing to do here\n }\n return false;\n}\n\nexport default function getDynamicRequirePaths(patterns) {\n const dynamicRequireModuleSet = new Set();\n for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) {\n const isNegated = pattern.startsWith('!');\n const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet);\n for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) {\n modifySet(normalizePathSlashes(resolve(path)));\n if (isDirectory(path)) {\n modifySet(normalizePathSlashes(resolve(join(path, getPackageEntryPoint(path)))));\n }\n }\n }\n const dynamicRequireModuleDirPaths = Array.from(dynamicRequireModuleSet.values()).filter((path) =>\n isDirectory(path)\n );\n return { dynamicRequireModuleSet, dynamicRequireModuleDirPaths };\n}\n","export function getCommonJSMetaPromise(commonJSMetaPromises, id) {\n let commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) return commonJSMetaPromise.promise;\n\n const promise = new Promise((resolve) => {\n commonJSMetaPromise = {\n resolve,\n promise: null\n };\n commonJSMetaPromises.set(id, commonJSMetaPromise);\n });\n commonJSMetaPromise.promise = promise;\n\n return promise;\n}\n\nexport function setCommonJSMetaPromise(commonJSMetaPromises, id, commonjsMeta) {\n const commonJSMetaPromise = commonJSMetaPromises.get(id);\n if (commonJSMetaPromise) {\n if (commonJSMetaPromise.resolve) {\n commonJSMetaPromise.resolve(commonjsMeta);\n commonJSMetaPromise.resolve = null;\n }\n } else {\n commonJSMetaPromises.set(id, { promise: Promise.resolve(commonjsMeta), resolve: null });\n }\n}\n","import { readFileSync } from 'fs';\n\nimport { DYNAMIC_JSON_PREFIX, HELPERS_ID } from './helpers';\nimport { getCommonJSMetaPromise } from './is-cjs';\nimport { getName, getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\n// e.g. id === \"commonjsHelpers?commonjsRegister\"\nexport function getSpecificHelperProxy(id) {\n return `export {${id.split('?')[1]} as default} from \"${HELPERS_ID}\";`;\n}\n\nexport function getUnknownRequireProxy(id, requireReturnsDefault) {\n if (requireReturnsDefault === true || id.endsWith('.json')) {\n return `export {default} from ${JSON.stringify(id)};`;\n }\n const name = getName(id);\n const exported =\n requireReturnsDefault === 'auto'\n ? `import {getDefaultExportFromNamespaceIfNotNamed} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfNotNamed(${name});`\n : requireReturnsDefault === 'preferred'\n ? `import {getDefaultExportFromNamespaceIfPresent} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getDefaultExportFromNamespaceIfPresent(${name});`\n : !requireReturnsDefault\n ? `import {getAugmentedNamespace} from \"${HELPERS_ID}\"; export default /*@__PURE__*/getAugmentedNamespace(${name});`\n : `export default ${name};`;\n return `import * as ${name} from ${JSON.stringify(id)}; ${exported}`;\n}\n\nexport function getDynamicJsonProxy(id, commonDir) {\n const normalizedPath = normalizePathSlashes(id.slice(DYNAMIC_JSON_PREFIX.length));\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n module.exports = require(${JSON.stringify(normalizedPath)});\n});`;\n}\n\nexport function getDynamicRequireProxy(normalizedPath, commonDir) {\n return `const commonjsRegister = require('${HELPERS_ID}?commonjsRegister');\\ncommonjsRegister(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(normalizedPath, commonDir)\n )}, function (module, exports) {\n ${readFileSync(normalizedPath, { encoding: 'utf8' })}\n});`;\n}\n\nexport async function getStaticRequireProxy(\n id,\n requireReturnsDefault,\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n) {\n const name = getName(id);\n const commonjsMeta = await getCommonJSMetaPromise(commonJsMetaPromises, id);\n if (commonjsMeta && commonjsMeta.isCommonJS) {\n return `export { __moduleExports as default } from ${JSON.stringify(id)};`;\n } else if (commonjsMeta === null) {\n return getUnknownRequireProxy(id, requireReturnsDefault);\n } else if (!requireReturnsDefault) {\n return `import { getAugmentedNamespace } from \"${HELPERS_ID}\"; import * as ${name} from ${JSON.stringify(\n id\n )}; export default /*@__PURE__*/getAugmentedNamespace(${name});`;\n } else if (\n requireReturnsDefault !== true &&\n (requireReturnsDefault === 'namespace' ||\n !esModulesWithDefaultExport.has(id) ||\n (requireReturnsDefault === 'auto' && esModulesWithNamedExports.has(id)))\n ) {\n return `import * as ${name} from ${JSON.stringify(id)}; export default ${name};`;\n }\n return `export { default } from ${JSON.stringify(id)};`;\n}\n","/* eslint-disable no-param-reassign, no-undefined */\n\nimport { statSync } from 'fs';\nimport { dirname, resolve, sep } from 'path';\n\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_PACKAGES_ID,\n DYNAMIC_REGISTER_SUFFIX,\n EXPORTS_SUFFIX,\n EXTERNAL_SUFFIX,\n HELPERS_ID,\n isWrappedId,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n REQUIRE_SUFFIX,\n unwrapId,\n wrapId\n} from './helpers';\n\nfunction getCandidatesForExtension(resolved, extension) {\n return [resolved + extension, `${resolved}${sep}index${extension}`];\n}\n\nfunction getCandidates(resolved, extensions) {\n return extensions.reduce(\n (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),\n [resolved]\n );\n}\n\nexport default function getResolveId(extensions) {\n function resolveExtensions(importee, importer) {\n // not our problem\n if (importee[0] !== '.' || !importer) return undefined;\n\n const resolved = resolve(dirname(importer), importee);\n const candidates = getCandidates(resolved, extensions);\n\n for (let i = 0; i < candidates.length; i += 1) {\n try {\n const stats = statSync(candidates[i]);\n if (stats.isFile()) return { id: candidates[i] };\n } catch (err) {\n /* noop */\n }\n }\n\n return undefined;\n }\n\n return function resolveId(importee, rawImporter, resolveOptions) {\n if (isWrappedId(importee, MODULE_SUFFIX) || isWrappedId(importee, EXPORTS_SUFFIX)) {\n return importee;\n }\n\n const importer =\n rawImporter && isWrappedId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n ? unwrapId(rawImporter, DYNAMIC_REGISTER_SUFFIX)\n : rawImporter;\n\n // Except for exports, proxies are only importing resolved ids,\n // no need to resolve again\n if (importer && isWrappedId(importer, PROXY_SUFFIX)) {\n return importee;\n }\n\n const isProxyModule = isWrappedId(importee, PROXY_SUFFIX);\n const isRequiredModule = isWrappedId(importee, REQUIRE_SUFFIX);\n let isModuleRegistration = false;\n\n if (isProxyModule) {\n importee = unwrapId(importee, PROXY_SUFFIX);\n } else if (isRequiredModule) {\n importee = unwrapId(importee, REQUIRE_SUFFIX);\n\n isModuleRegistration = isWrappedId(importee, DYNAMIC_REGISTER_SUFFIX);\n if (isModuleRegistration) {\n importee = unwrapId(importee, DYNAMIC_REGISTER_SUFFIX);\n }\n }\n\n if (\n importee.startsWith(HELPERS_ID) ||\n importee === DYNAMIC_PACKAGES_ID ||\n importee.startsWith(DYNAMIC_JSON_PREFIX)\n ) {\n return importee;\n }\n\n if (importee.startsWith('\\0')) {\n return null;\n }\n\n return this.resolve(\n importee,\n importer,\n Object.assign({}, resolveOptions, {\n skipSelf: true,\n custom: Object.assign({}, resolveOptions.custom, {\n 'node-resolve': { isRequire: isProxyModule || isRequiredModule }\n })\n })\n ).then((resolved) => {\n if (!resolved) {\n resolved = resolveExtensions(importee, importer);\n }\n if (resolved && isProxyModule) {\n resolved.id = wrapId(resolved.id, resolved.external ? EXTERNAL_SUFFIX : PROXY_SUFFIX);\n resolved.external = false;\n } else if (resolved && isModuleRegistration) {\n resolved.id = wrapId(resolved.id, DYNAMIC_REGISTER_SUFFIX);\n } else if (!resolved && (isProxyModule || isRequiredModule)) {\n return { id: wrapId(importee, EXTERNAL_SUFFIX), external: false };\n }\n return resolved;\n });\n };\n}\n","export default function validateRollupVersion(rollupVersion, peerDependencyVersion) {\n const [major, minor] = rollupVersion.split('.').map(Number);\n const versionRegexp = /\\^(\\d+\\.\\d+)\\.\\d+/g;\n let minMajor = Infinity;\n let minMinor = Infinity;\n let foundVersion;\n // eslint-disable-next-line no-cond-assign\n while ((foundVersion = versionRegexp.exec(peerDependencyVersion))) {\n const [foundMajor, foundMinor] = foundVersion[1].split('.').map(Number);\n if (foundMajor < minMajor) {\n minMajor = foundMajor;\n minMinor = foundMinor;\n }\n }\n if (major < minMajor || (major === minMajor && minor < minMinor)) {\n throw new Error(\n `Insufficient Rollup version: \"@rollup/plugin-commonjs\" requires at least rollup@${minMajor}.${minMinor} but found rollup@${rollupVersion}.`\n );\n }\n}\n","export { default as isReference } from 'is-reference';\n\nconst operators = {\n '==': (x) => equals(x.left, x.right, false),\n\n '!=': (x) => not(operators['=='](x)),\n\n '===': (x) => equals(x.left, x.right, true),\n\n '!==': (x) => not(operators['==='](x)),\n\n '!': (x) => isFalsy(x.argument),\n\n '&&': (x) => isTruthy(x.left) && isTruthy(x.right),\n\n '||': (x) => isTruthy(x.left) || isTruthy(x.right)\n};\n\nfunction not(value) {\n return value === null ? value : !value;\n}\n\nfunction equals(a, b, strict) {\n if (a.type !== b.type) return null;\n // eslint-disable-next-line eqeqeq\n if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;\n return null;\n}\n\nexport function isTruthy(node) {\n if (!node) return false;\n if (node.type === 'Literal') return !!node.value;\n if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);\n if (node.operator in operators) return operators[node.operator](node);\n return null;\n}\n\nexport function isFalsy(node) {\n return not(isTruthy(node));\n}\n\nexport function getKeypath(node) {\n const parts = [];\n\n while (node.type === 'MemberExpression') {\n if (node.computed) return null;\n\n parts.unshift(node.property.name);\n // eslint-disable-next-line no-param-reassign\n node = node.object;\n }\n\n if (node.type !== 'Identifier') return null;\n\n const { name } = node;\n parts.unshift(name);\n\n return { name, keypath: parts.join('.') };\n}\n\nexport const KEY_COMPILED_ESM = '__esModule';\n\nexport function isDefineCompiledEsm(node) {\n const definedProperty =\n getDefinePropertyCallName(node, 'exports') || getDefinePropertyCallName(node, 'module.exports');\n if (definedProperty && definedProperty.key === KEY_COMPILED_ESM) {\n return isTruthy(definedProperty.value);\n }\n return false;\n}\n\nfunction getDefinePropertyCallName(node, targetName) {\n const {\n callee: { object, property }\n } = node;\n if (!object || object.type !== 'Identifier' || object.name !== 'Object') return;\n if (!property || property.type !== 'Identifier' || property.name !== 'defineProperty') return;\n if (node.arguments.length !== 3) return;\n\n const targetNames = targetName.split('.');\n const [target, key, value] = node.arguments;\n if (targetNames.length === 1) {\n if (target.type !== 'Identifier' || target.name !== targetNames[0]) {\n return;\n }\n }\n\n if (targetNames.length === 2) {\n if (\n target.type !== 'MemberExpression' ||\n target.object.name !== targetNames[0] ||\n target.property.name !== targetNames[1]\n ) {\n return;\n }\n }\n\n if (value.type !== 'ObjectExpression' || !value.properties) return;\n\n const valueProperty = value.properties.find((p) => p.key && p.key.name === 'value');\n if (!valueProperty || !valueProperty.value) return;\n\n // eslint-disable-next-line consistent-return\n return { key: key.value, value: valueProperty.value };\n}\n\nexport function isShorthandProperty(parent) {\n return parent && parent.type === 'Property' && parent.shorthand;\n}\n\nexport function hasDefineEsmProperty(node) {\n return node.properties.some((property) => {\n if (\n property.type === 'Property' &&\n property.key.type === 'Identifier' &&\n property.key.name === '__esModule' &&\n isTruthy(property.value)\n ) {\n return true;\n }\n return false;\n });\n}\n","export function wrapCode(magicString, uses, moduleName, exportsName) {\n const args = [];\n const passedArgs = [];\n if (uses.module) {\n args.push('module');\n passedArgs.push(moduleName);\n }\n if (uses.exports) {\n args.push('exports');\n passedArgs.push(exportsName);\n }\n magicString\n .trim()\n .prepend(`(function (${args.join(', ')}) {\\n`)\n .append(`\\n}(${passedArgs.join(', ')}));`);\n}\n\nexport function rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n wrapped,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n defineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n) {\n const exports = [];\n const exportDeclarations = [];\n\n if (exportMode === 'replace') {\n getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n );\n } else {\n exports.push(`${exportsName} as __moduleExports`);\n if (wrapped) {\n getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n } else {\n getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n );\n }\n }\n if (exports.length) {\n exportDeclarations.push(`export { ${exports.join(', ')} };`);\n }\n\n return `\\n\\n${exportDeclarations.join('\\n')}`;\n}\n\nfunction getExportsForReplacedModuleExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsName\n) {\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, exportsName);\n }\n magicString.prependRight(firstTopLevelModuleExportsAssignment.left.start, 'var ');\n exports.push(`${exportsName} as __moduleExports`);\n exportDeclarations.push(`export default ${exportsName};`);\n}\n\nfunction getExportsWhenWrapping(\n exportDeclarations,\n exportsName,\n detectWrappedDefault,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n exportDeclarations.push(\n `export default ${\n detectWrappedDefault && defaultIsModuleExports === 'auto'\n ? `/*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName})`\n : defaultIsModuleExports === false\n ? `${exportsName}.default`\n : exportsName\n };`\n );\n}\n\nfunction getExports(\n magicString,\n exports,\n exportDeclarations,\n moduleExportsAssignments,\n exportsAssignmentsByName,\n deconflictedExportNames,\n topLevelAssignments,\n moduleName,\n exportsName,\n defineCompiledEsmExpressions,\n HELPERS_NAME,\n defaultIsModuleExports\n) {\n let deconflictedDefaultExportName;\n // Collect and rewrite module.exports assignments\n for (const { left } of moduleExportsAssignments) {\n magicString.overwrite(left.start, left.end, `${moduleName}.exports`);\n }\n\n // Collect and rewrite named exports\n for (const [exportName, { nodes }] of exportsAssignmentsByName) {\n const deconflicted = deconflictedExportNames[exportName];\n let needsDeclaration = true;\n for (const node of nodes) {\n let replacement = `${deconflicted} = ${exportsName}.${exportName}`;\n if (needsDeclaration && topLevelAssignments.has(node)) {\n replacement = `var ${replacement}`;\n needsDeclaration = false;\n }\n magicString.overwrite(node.start, node.left.end, replacement);\n }\n if (needsDeclaration) {\n magicString.prepend(`var ${deconflicted};\\n`);\n }\n\n if (exportName === 'default') {\n deconflictedDefaultExportName = deconflicted;\n } else {\n exports.push(exportName === deconflicted ? exportName : `${deconflicted} as ${exportName}`);\n }\n }\n\n // Collect and rewrite exports.__esModule assignments\n let isRestorableCompiledEsm = false;\n for (const expression of defineCompiledEsmExpressions) {\n isRestorableCompiledEsm = true;\n const moduleExportsExpression =\n expression.type === 'CallExpression' ? expression.arguments[0] : expression.left.object;\n magicString.overwrite(moduleExportsExpression.start, moduleExportsExpression.end, exportsName);\n }\n\n if (!isRestorableCompiledEsm || defaultIsModuleExports === true) {\n exportDeclarations.push(`export default ${exportsName};`);\n } else if (moduleExportsAssignments.length === 0 || defaultIsModuleExports === false) {\n exports.push(`${deconflictedDefaultExportName || exportsName} as default`);\n } else {\n exportDeclarations.push(\n `export default /*@__PURE__*/${HELPERS_NAME}.getDefaultExportFromCjs(${exportsName});`\n );\n }\n}\n","import { dirname, resolve } from 'path';\n\nimport { sync as nodeResolveSync } from 'resolve';\n\nimport {\n EXPORTS_SUFFIX,\n HELPERS_ID,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n REQUIRE_SUFFIX,\n wrapId\n} from './helpers';\nimport { normalizePathSlashes } from './utils';\n\nexport function isRequireStatement(node, scope) {\n if (!node) return false;\n if (node.type !== 'CallExpression') return false;\n\n // Weird case of `require()` or `module.require()` without arguments\n if (node.arguments.length === 0) return false;\n\n return isRequire(node.callee, scope);\n}\n\nfunction isRequire(node, scope) {\n return (\n (node.type === 'Identifier' && node.name === 'require' && !scope.contains('require')) ||\n (node.type === 'MemberExpression' && isModuleRequire(node, scope))\n );\n}\n\nexport function isModuleRequire({ object, property }, scope) {\n return (\n object.type === 'Identifier' &&\n object.name === 'module' &&\n property.type === 'Identifier' &&\n property.name === 'require' &&\n !scope.contains('module')\n );\n}\n\nexport function isStaticRequireStatement(node, scope) {\n if (!isRequireStatement(node, scope)) return false;\n return !hasDynamicArguments(node);\n}\n\nfunction hasDynamicArguments(node) {\n return (\n node.arguments.length > 1 ||\n (node.arguments[0].type !== 'Literal' &&\n (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))\n );\n}\n\nconst reservedMethod = { resolve: true, cache: true, main: true };\n\nexport function isNodeRequirePropertyAccess(parent) {\n return parent && parent.property && reservedMethod[parent.property.name];\n}\n\nexport function isIgnoredRequireStatement(requiredNode, ignoreRequire) {\n return ignoreRequire(requiredNode.arguments[0].value);\n}\n\nexport function getRequireStringArg(node) {\n return node.arguments[0].type === 'Literal'\n ? node.arguments[0].value\n : node.arguments[0].quasis[0].value.cooked;\n}\n\nexport function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) {\n if (!/^(?:\\.{0,2}[/\\\\]|[A-Za-z]:[/\\\\])/.test(source)) {\n try {\n const resolvedPath = normalizePathSlashes(nodeResolveSync(source, { basedir: dirname(id) }));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n } catch (ex) {\n // Probably a node.js internal module\n return false;\n }\n\n return false;\n }\n\n for (const attemptExt of ['', '.js', '.json']) {\n const resolvedPath = normalizePathSlashes(resolve(dirname(id), source + attemptExt));\n if (dynamicRequireModuleSet.has(resolvedPath)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getRequireHandlers() {\n const requiredSources = [];\n const requiredBySource = Object.create(null);\n const requiredByNode = new Map();\n const requireExpressionsWithUsedReturnValue = [];\n\n function addRequireStatement(sourceId, node, scope, usesReturnValue) {\n const required = getRequired(sourceId);\n requiredByNode.set(node, { scope, required });\n if (usesReturnValue) {\n required.nodesUsingRequired.push(node);\n requireExpressionsWithUsedReturnValue.push(node);\n }\n }\n\n function getRequired(sourceId) {\n if (!requiredBySource[sourceId]) {\n requiredSources.push(sourceId);\n\n requiredBySource[sourceId] = {\n source: sourceId,\n name: null,\n nodesUsingRequired: []\n };\n }\n\n return requiredBySource[sourceId];\n }\n\n function rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n helpersName,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n ) {\n setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n );\n const imports = [];\n imports.push(`import * as ${helpersName} from \"${HELPERS_ID}\";`);\n if (exportMode === 'module') {\n imports.push(\n `import { __module as ${moduleName}, exports as ${exportsName} } from ${JSON.stringify(\n wrapId(id, MODULE_SUFFIX)\n )}`\n );\n } else if (exportMode === 'exports') {\n imports.push(\n `import { __exports as ${exportsName} } from ${JSON.stringify(wrapId(id, EXPORTS_SUFFIX))}`\n );\n }\n for (const source of dynamicRegisterSources) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n for (const source of requiredSources) {\n if (!source.startsWith('\\0')) {\n imports.push(`import ${JSON.stringify(wrapId(source, REQUIRE_SUFFIX))};`);\n }\n const { name, nodesUsingRequired } = requiredBySource[source];\n imports.push(\n `import ${nodesUsingRequired.length ? `${name} from ` : ''}${JSON.stringify(\n source.startsWith('\\0') ? source : wrapId(source, PROXY_SUFFIX)\n )};`\n );\n }\n return imports.length ? `${imports.join('\\n')}\\n\\n` : '';\n }\n\n return {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n };\n}\n\nfunction setRemainingImportNamesAndRewriteRequires(\n requireExpressionsWithUsedReturnValue,\n requiredByNode,\n magicString\n) {\n let uid = 0;\n for (const requireExpression of requireExpressionsWithUsedReturnValue) {\n const { required } = requiredByNode.get(requireExpression);\n if (!required.name) {\n let potentialName;\n const isUsedName = (node) => requiredByNode.get(node).scope.contains(potentialName);\n do {\n potentialName = `require$$${uid}`;\n uid += 1;\n } while (required.nodesUsingRequired.some(isUsedName));\n required.name = potentialName;\n }\n magicString.overwrite(requireExpression.start, requireExpression.end, required.name);\n }\n}\n","/* eslint-disable no-param-reassign, no-shadow, no-underscore-dangle, no-continue */\n\nimport { dirname } from 'path';\n\nimport { attachScopes, extractAssignedNames } from '@rollup/pluginutils';\nimport { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\n\nimport {\n getKeypath,\n isDefineCompiledEsm,\n hasDefineEsmProperty,\n isFalsy,\n isReference,\n isShorthandProperty,\n isTruthy,\n KEY_COMPILED_ESM\n} from './ast-utils';\nimport { rewriteExportsAndGetExportsBlock, wrapCode } from './generate-exports';\nimport {\n getRequireHandlers,\n getRequireStringArg,\n hasDynamicModuleForPath,\n isIgnoredRequireStatement,\n isModuleRequire,\n isNodeRequirePropertyAccess,\n isRequireStatement,\n isStaticRequireStatement\n} from './generate-imports';\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_REGISTER_SUFFIX,\n isWrappedId,\n unwrapId,\n wrapId\n} from './helpers';\nimport { tryParse } from './parse';\nimport { deconflict, getName, getVirtualPathForDynamicRequirePath } from './utils';\n\nconst exportsPattern = /^(?:module\\.)?exports(?:\\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;\n\nconst functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;\n\nexport default function transformCommonjs(\n parse,\n code,\n id,\n isEsModule,\n ignoreGlobal,\n ignoreRequire,\n ignoreDynamicRequires,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n astCache,\n defaultIsModuleExports\n) {\n const ast = astCache || tryParse(parse, code, id);\n const magicString = new MagicString(code);\n const uses = {\n module: false,\n exports: false,\n global: false,\n require: false\n };\n let usesDynamicRequire = false;\n const virtualDynamicRequirePath =\n isDynamicRequireModulesEnabled && getVirtualPathForDynamicRequirePath(dirname(id), commonDir);\n let scope = attachScopes(ast, 'scope');\n let lexicalDepth = 0;\n let programDepth = 0;\n let currentTryBlockEnd = null;\n let shouldWrap = false;\n\n const globals = new Set();\n\n // TODO technically wrong since globals isn't populated yet, but ¯\\_(ツ)_/¯\n const HELPERS_NAME = deconflict([scope], globals, 'commonjsHelpers');\n const dynamicRegisterSources = new Set();\n let hasRemovedRequire = false;\n\n const {\n addRequireStatement,\n requiredSources,\n rewriteRequireExpressionsAndGetImportBlock\n } = getRequireHandlers();\n\n // See which names are assigned to. This is necessary to prevent\n // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,\n // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)\n const reassignedNames = new Set();\n const topLevelDeclarations = [];\n const topLevelRequireDeclarators = new Set();\n const skippedNodes = new Set();\n const moduleAccessScopes = new Set([scope]);\n const exportsAccessScopes = new Set([scope]);\n const moduleExportsAssignments = [];\n let firstTopLevelModuleExportsAssignment = null;\n const exportsAssignmentsByName = new Map();\n const topLevelAssignments = new Set();\n const topLevelDefineCompiledEsmExpressions = [];\n\n walk(ast, {\n enter(node, parent) {\n if (skippedNodes.has(node)) {\n this.skip();\n return;\n }\n\n if (currentTryBlockEnd !== null && node.start > currentTryBlockEnd) {\n currentTryBlockEnd = null;\n }\n\n programDepth += 1;\n if (node.scope) ({ scope } = node);\n if (functionType.test(node.type)) lexicalDepth += 1;\n if (sourceMap) {\n magicString.addSourcemapLocation(node.start);\n magicString.addSourcemapLocation(node.end);\n }\n\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'TryStatement':\n if (currentTryBlockEnd === null) {\n currentTryBlockEnd = node.block.end;\n }\n return;\n case 'AssignmentExpression':\n if (node.left.type === 'MemberExpression') {\n const flattened = getKeypath(node.left);\n if (!flattened || scope.contains(flattened.name)) return;\n\n const exportsPatternMatch = exportsPattern.exec(flattened.keypath);\n if (!exportsPatternMatch || flattened.keypath === 'exports') return;\n\n const [, exportName] = exportsPatternMatch;\n uses[flattened.name] = true;\n\n // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –\n if (flattened.keypath === 'module.exports') {\n moduleExportsAssignments.push(node);\n if (programDepth > 3) {\n moduleAccessScopes.add(scope);\n } else if (!firstTopLevelModuleExportsAssignment) {\n firstTopLevelModuleExportsAssignment = node;\n }\n\n if (defaultIsModuleExports === false) {\n shouldWrap = true;\n } else if (defaultIsModuleExports === 'auto') {\n if (node.right.type === 'ObjectExpression') {\n if (hasDefineEsmProperty(node.right)) {\n shouldWrap = true;\n }\n } else if (defaultIsModuleExports === false) {\n shouldWrap = true;\n }\n }\n } else if (exportName === KEY_COMPILED_ESM) {\n if (programDepth > 3) {\n shouldWrap = true;\n } else {\n topLevelDefineCompiledEsmExpressions.push(node);\n }\n } else {\n const exportsAssignments = exportsAssignmentsByName.get(exportName) || {\n nodes: [],\n scopes: new Set()\n };\n exportsAssignments.nodes.push(node);\n exportsAssignments.scopes.add(scope);\n exportsAccessScopes.add(scope);\n exportsAssignmentsByName.set(exportName, exportsAssignments);\n if (programDepth <= 3) {\n topLevelAssignments.add(node);\n }\n }\n\n skippedNodes.add(node.left);\n } else {\n for (const name of extractAssignedNames(node.left)) {\n reassignedNames.add(name);\n }\n }\n return;\n case 'CallExpression': {\n if (isDefineCompiledEsm(node)) {\n if (programDepth === 3 && parent.type === 'ExpressionStatement') {\n // skip special handling for [module.]exports until we know we render this\n skippedNodes.add(node.arguments[0]);\n topLevelDefineCompiledEsmExpressions.push(node);\n } else {\n shouldWrap = true;\n }\n return;\n }\n\n if (\n node.callee.object &&\n node.callee.object.name === 'require' &&\n node.callee.property.name === 'resolve' &&\n hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)\n ) {\n const requireNode = node.callee.object;\n magicString.appendLeft(\n node.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n magicString.overwrite(\n requireNode.start,\n requireNode.end,\n `${HELPERS_NAME}.commonjsRequire`,\n {\n storeName: true\n }\n );\n return;\n }\n\n if (!isStaticRequireStatement(node, scope)) return;\n if (!isDynamicRequireModulesEnabled) {\n skippedNodes.add(node.callee);\n }\n if (!isIgnoredRequireStatement(node, ignoreRequire)) {\n skippedNodes.add(node.callee);\n const usesReturnValue = parent.type !== 'ExpressionStatement';\n\n let canConvertRequire = true;\n let shouldRemoveRequireStatement = false;\n\n if (currentTryBlockEnd !== null) {\n ({\n canConvertRequire,\n shouldRemoveRequireStatement\n } = getIgnoreTryCatchRequireStatementMode(node.arguments[0].value));\n\n if (shouldRemoveRequireStatement) {\n hasRemovedRequire = true;\n }\n }\n\n let sourceId = getRequireStringArg(node);\n const isDynamicRegister = isWrappedId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (isDynamicRegister) {\n sourceId = unwrapId(sourceId, DYNAMIC_REGISTER_SUFFIX);\n if (sourceId.endsWith('.json')) {\n sourceId = DYNAMIC_JSON_PREFIX + sourceId;\n }\n dynamicRegisterSources.add(wrapId(sourceId, DYNAMIC_REGISTER_SUFFIX));\n } else {\n if (\n !sourceId.endsWith('.json') &&\n hasDynamicModuleForPath(sourceId, id, dynamicRequireModuleSet)\n ) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n } else if (canConvertRequire) {\n magicString.overwrite(\n node.start,\n node.end,\n `${HELPERS_NAME}.commonjsRequire(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(sourceId, commonDir)\n )}, ${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )})`\n );\n usesDynamicRequire = true;\n }\n return;\n }\n\n if (canConvertRequire) {\n addRequireStatement(sourceId, node, scope, usesReturnValue);\n }\n }\n\n if (usesReturnValue) {\n if (shouldRemoveRequireStatement) {\n magicString.overwrite(node.start, node.end, `undefined`);\n return;\n }\n\n if (\n parent.type === 'VariableDeclarator' &&\n !scope.parent &&\n parent.id.type === 'Identifier'\n ) {\n // This will allow us to reuse this variable name as the imported variable if it is not reassigned\n // and does not conflict with variables in other places where this is imported\n topLevelRequireDeclarators.add(parent);\n }\n } else {\n // This is a bare import, e.g. `require('foo');`\n\n if (!canConvertRequire && !shouldRemoveRequireStatement) {\n return;\n }\n\n magicString.remove(parent.start, parent.end);\n }\n }\n return;\n }\n case 'ConditionalExpression':\n case 'IfStatement':\n // skip dead branches\n if (isFalsy(node.test)) {\n skippedNodes.add(node.consequent);\n } else if (node.alternate && isTruthy(node.test)) {\n skippedNodes.add(node.alternate);\n }\n return;\n case 'Identifier': {\n const { name } = node;\n if (!(isReference(node, parent) && !scope.contains(name))) return;\n switch (name) {\n case 'require':\n if (isNodeRequirePropertyAccess(parent)) {\n if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) {\n if (parent.property.name === 'cache') {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n\n return;\n }\n\n if (isDynamicRequireModulesEnabled && isRequireStatement(parent, scope)) {\n magicString.appendLeft(\n parent.end - 1,\n `,${JSON.stringify(\n dirname(id) === '.' ? null /* default behavior */ : virtualDynamicRequirePath\n )}`\n );\n }\n if (!ignoreDynamicRequires) {\n if (isShorthandProperty(parent)) {\n magicString.appendRight(node.end, `: ${HELPERS_NAME}.commonjsRequire`);\n } else {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n }\n }\n usesDynamicRequire = true;\n return;\n case 'module':\n case 'exports':\n shouldWrap = true;\n uses[name] = true;\n return;\n case 'global':\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n return;\n case 'define':\n magicString.overwrite(node.start, node.end, 'undefined', {\n storeName: true\n });\n return;\n default:\n globals.add(name);\n return;\n }\n }\n case 'MemberExpression':\n if (!isDynamicRequireModulesEnabled && isModuleRequire(node, scope)) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n storeName: true\n });\n skippedNodes.add(node.object);\n skippedNodes.add(node.property);\n }\n return;\n case 'ReturnStatement':\n // if top-level return, we need to wrap it\n if (lexicalDepth === 0) {\n shouldWrap = true;\n }\n return;\n case 'ThisExpression':\n // rewrite top-level `this` as `commonjsHelpers.commonjsGlobal`\n if (lexicalDepth === 0) {\n uses.global = true;\n if (!ignoreGlobal) {\n magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n storeName: true\n });\n }\n }\n return;\n case 'UnaryExpression':\n // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)\n if (node.operator === 'typeof') {\n const flattened = getKeypath(node.argument);\n if (!flattened) return;\n\n if (scope.contains(flattened.name)) return;\n\n if (\n flattened.keypath === 'module.exports' ||\n flattened.keypath === 'module' ||\n flattened.keypath === 'exports'\n ) {\n magicString.overwrite(node.start, node.end, `'object'`, {\n storeName: false\n });\n }\n }\n return;\n case 'VariableDeclaration':\n if (!scope.parent) {\n topLevelDeclarations.push(node);\n }\n }\n },\n\n leave(node) {\n programDepth -= 1;\n if (node.scope) scope = scope.parent;\n if (functionType.test(node.type)) lexicalDepth -= 1;\n }\n });\n\n const nameBase = getName(id);\n const exportsName = deconflict([...exportsAccessScopes], globals, nameBase);\n const moduleName = deconflict([...moduleAccessScopes], globals, `${nameBase}Module`);\n const deconflictedExportNames = Object.create(null);\n for (const [exportName, { scopes }] of exportsAssignmentsByName) {\n deconflictedExportNames[exportName] = deconflict([...scopes], globals, exportName);\n }\n\n // We cannot wrap ES/mixed modules\n shouldWrap =\n !isEsModule &&\n !disableWrap &&\n (shouldWrap || (uses.exports && moduleExportsAssignments.length > 0));\n const detectWrappedDefault =\n shouldWrap &&\n (topLevelDefineCompiledEsmExpressions.length > 0 || code.indexOf('__esModule') >= 0);\n\n if (\n !(\n requiredSources.length ||\n dynamicRegisterSources.size ||\n uses.module ||\n uses.exports ||\n uses.require ||\n usesDynamicRequire ||\n hasRemovedRequire ||\n topLevelDefineCompiledEsmExpressions.length > 0\n ) &&\n (ignoreGlobal || !uses.global)\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n let leadingComment = '';\n if (code.startsWith('/*')) {\n const commentEnd = code.indexOf('*/', 2) + 2;\n leadingComment = `${code.slice(0, commentEnd)}\\n`;\n magicString.remove(0, commentEnd).trim();\n }\n\n const exportMode = shouldWrap\n ? uses.module\n ? 'module'\n : 'exports'\n : firstTopLevelModuleExportsAssignment\n ? exportsAssignmentsByName.size === 0 && topLevelDefineCompiledEsmExpressions.length === 0\n ? 'replace'\n : 'module'\n : moduleExportsAssignments.length === 0\n ? 'exports'\n : 'module';\n\n const importBlock = rewriteRequireExpressionsAndGetImportBlock(\n magicString,\n topLevelDeclarations,\n topLevelRequireDeclarators,\n reassignedNames,\n HELPERS_NAME,\n dynamicRegisterSources,\n moduleName,\n exportsName,\n id,\n exportMode\n );\n\n const exportBlock = isEsModule\n ? ''\n : rewriteExportsAndGetExportsBlock(\n magicString,\n moduleName,\n exportsName,\n shouldWrap,\n moduleExportsAssignments,\n firstTopLevelModuleExportsAssignment,\n exportsAssignmentsByName,\n topLevelAssignments,\n topLevelDefineCompiledEsmExpressions,\n deconflictedExportNames,\n code,\n HELPERS_NAME,\n exportMode,\n detectWrappedDefault,\n defaultIsModuleExports\n );\n\n if (shouldWrap) {\n wrapCode(magicString, uses, moduleName, exportsName);\n }\n\n magicString\n .trim()\n .prepend(leadingComment + importBlock)\n .append(exportBlock);\n\n return {\n code: magicString.toString(),\n map: sourceMap ? magicString.generateMap() : null,\n syntheticNamedExports: isEsModule ? false : '__moduleExports',\n meta: { commonjs: { isCommonJS: !isEsModule } }\n };\n}\n","import { dirname, extname } from 'path';\n\nimport { createFilter } from '@rollup/pluginutils';\nimport getCommonDir from 'commondir';\n\nimport { peerDependencies } from '../package.json';\n\nimport analyzeTopLevelStatements from './analyze-top-level-statements';\n\nimport {\n getDynamicPackagesEntryIntro,\n getDynamicPackagesModule,\n isDynamicModuleImport\n} from './dynamic-packages-manager';\nimport getDynamicRequirePaths from './dynamic-require-paths';\nimport {\n DYNAMIC_JSON_PREFIX,\n DYNAMIC_PACKAGES_ID,\n DYNAMIC_REGISTER_SUFFIX,\n EXPORTS_SUFFIX,\n EXTERNAL_SUFFIX,\n getHelpersModule,\n HELPERS_ID,\n isWrappedId,\n MODULE_SUFFIX,\n PROXY_SUFFIX,\n unwrapId\n} from './helpers';\nimport { setCommonJSMetaPromise } from './is-cjs';\nimport { hasCjsKeywords } from './parse';\nimport {\n getDynamicJsonProxy,\n getDynamicRequireProxy,\n getSpecificHelperProxy,\n getStaticRequireProxy,\n getUnknownRequireProxy\n} from './proxies';\nimport getResolveId from './resolve-id';\nimport validateRollupVersion from './rollup-version';\nimport transformCommonjs from './transform-commonjs';\nimport { getName, getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils';\n\nexport default function commonjs(options = {}) {\n const extensions = options.extensions || ['.js'];\n const filter = createFilter(options.include, options.exclude);\n const {\n ignoreGlobal,\n ignoreDynamicRequires,\n requireReturnsDefault: requireReturnsDefaultOption,\n esmExternals\n } = options;\n const getRequireReturnsDefault =\n typeof requireReturnsDefaultOption === 'function'\n ? requireReturnsDefaultOption\n : () => requireReturnsDefaultOption;\n let esmExternalIds;\n const isEsmExternal =\n typeof esmExternals === 'function'\n ? esmExternals\n : Array.isArray(esmExternals)\n ? ((esmExternalIds = new Set(esmExternals)), (id) => esmExternalIds.has(id))\n : () => esmExternals;\n const defaultIsModuleExports =\n typeof options.defaultIsModuleExports === 'boolean' ? options.defaultIsModuleExports : 'auto';\n\n const { dynamicRequireModuleSet, dynamicRequireModuleDirPaths } = getDynamicRequirePaths(\n options.dynamicRequireTargets\n );\n const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0;\n const commonDir = isDynamicRequireModulesEnabled\n ? getCommonDir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd()))\n : null;\n\n const esModulesWithDefaultExport = new Set();\n const esModulesWithNamedExports = new Set();\n const commonJsMetaPromises = new Map();\n\n const ignoreRequire =\n typeof options.ignore === 'function'\n ? options.ignore\n : Array.isArray(options.ignore)\n ? (id) => options.ignore.includes(id)\n : () => false;\n\n const getIgnoreTryCatchRequireStatementMode = (id) => {\n const mode =\n typeof options.ignoreTryCatch === 'function'\n ? options.ignoreTryCatch(id)\n : Array.isArray(options.ignoreTryCatch)\n ? options.ignoreTryCatch.includes(id)\n : typeof options.ignoreTryCatch !== 'undefined'\n ? options.ignoreTryCatch\n : true;\n\n return {\n canConvertRequire: mode !== 'remove' && mode !== true,\n shouldRemoveRequireStatement: mode === 'remove'\n };\n };\n\n const resolveId = getResolveId(extensions);\n\n const sourceMap = options.sourceMap !== false;\n\n function transformAndCheckExports(code, id) {\n if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) {\n // eslint-disable-next-line no-param-reassign\n code =\n getDynamicPackagesEntryIntro(dynamicRequireModuleDirPaths, dynamicRequireModuleSet) + code;\n }\n\n const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements(\n this.parse,\n code,\n id\n );\n if (hasDefaultExport) {\n esModulesWithDefaultExport.add(id);\n }\n if (hasNamedExports) {\n esModulesWithNamedExports.add(id);\n }\n\n if (\n !dynamicRequireModuleSet.has(normalizePathSlashes(id)) &&\n (!hasCjsKeywords(code, ignoreGlobal) || (isEsModule && !options.transformMixedEsModules))\n ) {\n return { meta: { commonjs: { isCommonJS: false } } };\n }\n\n // avoid wrapping as this is a commonjsRegister call\n const disableWrap = isWrappedId(id, DYNAMIC_REGISTER_SUFFIX);\n if (disableWrap) {\n // eslint-disable-next-line no-param-reassign\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n return transformCommonjs(\n this.parse,\n code,\n id,\n isEsModule,\n ignoreGlobal || isEsModule,\n ignoreRequire,\n ignoreDynamicRequires && !isDynamicRequireModulesEnabled,\n getIgnoreTryCatchRequireStatementMode,\n sourceMap,\n isDynamicRequireModulesEnabled,\n dynamicRequireModuleSet,\n disableWrap,\n commonDir,\n ast,\n defaultIsModuleExports\n );\n }\n\n return {\n name: 'commonjs',\n\n buildStart() {\n validateRollupVersion(this.meta.rollupVersion, peerDependencies.rollup);\n if (options.namedExports != null) {\n this.warn(\n 'The namedExports option from \"@rollup/plugin-commonjs\" is deprecated. Named exports are now handled automatically.'\n );\n }\n },\n\n resolveId,\n\n load(id) {\n if (id === HELPERS_ID) {\n return getHelpersModule(isDynamicRequireModulesEnabled, ignoreDynamicRequires);\n }\n\n if (id.startsWith(HELPERS_ID)) {\n return getSpecificHelperProxy(id);\n }\n\n if (isWrappedId(id, MODULE_SUFFIX)) {\n const actualId = unwrapId(id, MODULE_SUFFIX);\n let name = getName(actualId);\n let code;\n if (isDynamicRequireModulesEnabled) {\n if (['modulePath', 'commonjsRequire', 'createModule'].includes(name)) {\n name = `${name}_`;\n }\n code =\n `import {commonjsRequire, createModule} from \"${HELPERS_ID}\";\\n` +\n `var ${name} = createModule(${JSON.stringify(\n getVirtualPathForDynamicRequirePath(dirname(actualId), commonDir)\n )});\\n` +\n `export {${name} as __module}`;\n } else {\n code = `var ${name} = {exports: {}}; export {${name} as __module}`;\n }\n return {\n code,\n syntheticNamedExports: '__module',\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXPORTS_SUFFIX)) {\n const actualId = unwrapId(id, EXPORTS_SUFFIX);\n const name = getName(actualId);\n return {\n code: `var ${name} = {}; export {${name} as __exports}`,\n meta: { commonjs: { isCommonJS: false } }\n };\n }\n\n if (isWrappedId(id, EXTERNAL_SUFFIX)) {\n const actualId = unwrapId(id, EXTERNAL_SUFFIX);\n return getUnknownRequireProxy(\n actualId,\n isEsmExternal(actualId) ? getRequireReturnsDefault(actualId) : true\n );\n }\n\n if (id === DYNAMIC_PACKAGES_ID) {\n return getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir);\n }\n\n if (id.startsWith(DYNAMIC_JSON_PREFIX)) {\n return getDynamicJsonProxy(id, commonDir);\n }\n\n if (isDynamicModuleImport(id, dynamicRequireModuleSet)) {\n return `export default require(${JSON.stringify(normalizePathSlashes(id))});`;\n }\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n return getDynamicRequireProxy(\n normalizePathSlashes(unwrapId(id, DYNAMIC_REGISTER_SUFFIX)),\n commonDir\n );\n }\n\n if (isWrappedId(id, PROXY_SUFFIX)) {\n const actualId = unwrapId(id, PROXY_SUFFIX);\n return getStaticRequireProxy(\n actualId,\n getRequireReturnsDefault(actualId),\n esModulesWithDefaultExport,\n esModulesWithNamedExports,\n commonJsMetaPromises\n );\n }\n\n return null;\n },\n\n transform(code, rawId) {\n let id = rawId;\n\n if (isWrappedId(id, DYNAMIC_REGISTER_SUFFIX)) {\n id = unwrapId(id, DYNAMIC_REGISTER_SUFFIX);\n }\n\n const extName = extname(id);\n if (\n extName !== '.cjs' &&\n id !== DYNAMIC_PACKAGES_ID &&\n !id.startsWith(DYNAMIC_JSON_PREFIX) &&\n (!filter(id) || !extensions.includes(extName))\n ) {\n return null;\n }\n\n try {\n return transformAndCheckExports.call(this, code, rawId);\n } catch (err) {\n return this.error(err, err.loc);\n }\n },\n\n moduleParsed({ id, meta: { commonjs: commonjsMeta } }) {\n if (commonjsMeta && commonjsMeta.isCommonJS != null) {\n setCommonJSMetaPromise(commonJsMetaPromises, id, commonjsMeta);\n return;\n }\n setCommonJSMetaPromise(commonJsMetaPromises, id, null);\n }\n };\n}\n"],"names":["makeLegalIdentifier","basename","extname","dirname","existsSync","join","readFileSync","statSync","path","glob","resolve","sep","nodeResolveSync","MagicString","attachScopes","walk","extractAssignedNames","isReference","createFilter","getCommonDir"],"mappings":"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AAG,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;AACA,MAAM,oBAAoB,GAAG,CAAC,wNAAwN,CAAC,CAAC;AACxP;AACA,MAAM,kBAAkB,GAAG,CAAC;AAC5B;AACA,CAAC,EAAE,oBAAoB,CAAC;AACxB;AACA,CAAC,CAAC;AACF;AACA,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,KAAK,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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"} \ No newline at end of file diff --git a/build/node_modules/@rollup/plugin-commonjs/package.json b/build/node_modules/@rollup/plugin-commonjs/package.json new file mode 100644 index 00000000..c4f27404 --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/package.json @@ -0,0 +1,115 @@ +{ + "_from": "@rollup/plugin-commonjs@^21.0.1", + "_id": "@rollup/plugin-commonjs@21.0.2", + "_inBundle": false, + "_integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==", + "_location": "/@rollup/plugin-commonjs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@rollup/plugin-commonjs@^21.0.1", + "name": "@rollup/plugin-commonjs", + "escapedName": "@rollup%2fplugin-commonjs", + "scope": "@rollup", + "rawSpec": "^21.0.1", + "saveSpec": null, + "fetchSpec": "^21.0.1" + }, + "_requiredBy": [ + "#DEV:/" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz", + "_shasum": "0b9c539aa1837c94abfaf87945838b0fc8564891", + "_spec": "@rollup/plugin-commonjs@^21.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", + "author": { + "name": "Rich Harris", + "email": "richard.a.harris@gmail.com" + }, + "ava": { + "babel": { + "compileEnhancements": false + }, + "files": [ + "!**/fixtures/**", + "!**/helpers/**", + "!**/recipes/**", + "!**/types.ts" + ] + }, + "bugs": { + "url": "https://github.com/rollup/plugins/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "deprecated": false, + "description": "Convert CommonJS modules to ES2015", + "devDependencies": { + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "locate-character": "^2.0.5", + "require-relative": "^0.8.7", + "rollup": "^2.67.3", + "shx": "^0.3.2", + "source-map": "^0.7.3", + "source-map-support": "^0.5.19", + "typescript": "^3.9.7" + }, + "engines": { + "node": ">= 8.0.0" + }, + "files": [ + "dist", + "types", + "README.md", + "LICENSE" + ], + "homepage": "https://github.com/rollup/plugins/tree/master/packages/commonjs/#readme", + "keywords": [ + "rollup", + "plugin", + "npm", + "modules", + "commonjs", + "require" + ], + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.es.js", + "name": "@rollup/plugin-commonjs", + "peerDependencies": { + "rollup": "^2.38.3" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "url": "git+https://github.com/rollup/plugins.git", + "directory": "packages/commonjs" + }, + "scripts": { + "build": "rollup -c", + "ci:coverage": "nyc pnpm test && nyc report --reporter=text-lcov > coverage.lcov", + "ci:lint": "pnpm build && pnpm lint", + "ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}", + "ci:test": "pnpm test -- --verbose && pnpm test:ts", + "prebuild": "del-cli dist", + "prepare": "if [ ! -d 'dist' ]; then pnpm build; fi", + "prerelease": "pnpm build", + "pretest": "pnpm build", + "release": "pnpm plugin:release --workspace-root -- --pkg $npm_package_name", + "test": "ava", + "test:ts": "tsc types/index.d.ts test/types.ts --noEmit" + }, + "types": "types/index.d.ts", + "version": "21.0.2" +} diff --git a/build/node_modules/@rollup/plugin-commonjs/types/index.d.ts b/build/node_modules/@rollup/plugin-commonjs/types/index.d.ts new file mode 100644 index 00000000..2b0b0679 --- /dev/null +++ b/build/node_modules/@rollup/plugin-commonjs/types/index.d.ts @@ -0,0 +1,183 @@ +import { FilterPattern } from '@rollup/pluginutils'; +import { Plugin } from 'rollup'; + +type RequireReturnsDefaultOption = boolean | 'auto' | 'preferred' | 'namespace'; + +interface RollupCommonJSOptions { + /** + * A minimatch pattern, or array of patterns, which specifies the files in + * the build the plugin should operate on. By default, all files with + * extension `".cjs"` or those in `extensions` are included, but you can narrow + * this list by only including specific files. These files will be analyzed + * and transpiled if either the analysis does not find ES module specific + * statements or `transformMixedEsModules` is `true`. + * @default undefined + */ + include?: FilterPattern; + /** + * A minimatch pattern, or array of patterns, which specifies the files in + * the build the plugin should _ignore_. By default, all files with + * extensions other than those in `extensions` or `".cjs"` are ignored, but you + * can exclude additional files. See also the `include` option. + * @default undefined + */ + exclude?: FilterPattern; + /** + * For extensionless imports, search for extensions other than .js in the + * order specified. Note that you need to make sure that non-JavaScript files + * are transpiled by another plugin first. + * @default [ '.js' ] + */ + extensions?: ReadonlyArray; + /** + * If true then uses of `global` won't be dealt with by this plugin + * @default false + */ + ignoreGlobal?: boolean; + /** + * If false, skips source map generation for CommonJS modules. This will + * improve performance. + * @default true + */ + sourceMap?: boolean; + /** + * Some `require` calls cannot be resolved statically to be translated to + * imports. + * When this option is set to `false`, the generated code will either + * directly throw an error when such a call is encountered or, when + * `dynamicRequireTargets` is used, when such a call cannot be resolved with a + * configured dynamic require target. + * Setting this option to `true` will instead leave the `require` call in the + * code or use it as a fallback for `dynamicRequireTargets`. + * @default false + */ + ignoreDynamicRequires?: boolean; + /** + * Instructs the plugin whether to enable mixed module transformations. This + * is useful in scenarios with modules that contain a mix of ES `import` + * statements and CommonJS `require` expressions. Set to `true` if `require` + * calls should be transformed to imports in mixed modules, or `false` if the + * `require` expressions should survive the transformation. The latter can be + * important if the code contains environment detection, or you are coding + * for an environment with special treatment for `require` calls such as + * ElectronJS. See also the `ignore` option. + * @default false + */ + transformMixedEsModules?: boolean; + /** + * Sometimes you have to leave require statements unconverted. Pass an array + * containing the IDs or a `id => boolean` function. + * @default [] + */ + ignore?: ReadonlyArray | ((id: string) => boolean); + /** + * In most cases, where `require` calls are inside a `try-catch` clause, + * they should be left unconverted as it requires an optional dependency + * that may or may not be installed beside the rolled up package. + * Due to the conversion of `require` to a static `import` - the call is hoisted + * to the top of the file, outside of the `try-catch` clause. + * + * - `true`: All `require` calls inside a `try` will be left unconverted. + * - `false`: All `require` calls inside a `try` will be converted as if the `try-catch` clause is not there. + * - `remove`: Remove all `require` calls from inside any `try` block. + * - `string[]`: Pass an array containing the IDs to left unconverted. + * - `((id: string) => boolean|'remove')`: Pass a function that control individual IDs. + * + * @default false + */ + ignoreTryCatch?: + | boolean + | 'remove' + | ReadonlyArray + | ((id: string) => boolean | 'remove'); + /** + * Controls how to render imports from external dependencies. By default, + * this plugin assumes that all external dependencies are CommonJS. This + * means they are rendered as default imports to be compatible with e.g. + * NodeJS where ES modules can only import a default export from a CommonJS + * dependency. + * + * If you set `esmExternals` to `true`, this plugins assumes that all + * external dependencies are ES modules and respect the + * `requireReturnsDefault` option. If that option is not set, they will be + * rendered as namespace imports. + * + * You can also supply an array of ids to be treated as ES modules, or a + * function that will be passed each external id to determine if it is an ES + * module. + * @default false + */ + esmExternals?: boolean | ReadonlyArray | ((id: string) => boolean); + /** + * Controls what is returned when requiring an ES module from a CommonJS file. + * When using the `esmExternals` option, this will also apply to external + * modules. By default, this plugin will render those imports as namespace + * imports i.e. + * + * ```js + * // input + * const foo = require('foo'); + * + * // output + * import * as foo from 'foo'; + * ``` + * + * However there are some situations where this may not be desired. + * For these situations, you can change Rollup's behaviour either globally or + * per module. To change it globally, set the `requireReturnsDefault` option + * to one of the following values: + * + * - `false`: This is the default, requiring an ES module returns its + * namespace. This is the only option that will also add a marker + * `__esModule: true` to the namespace to support interop patterns in + * CommonJS modules that are transpiled ES modules. + * - `"namespace"`: Like `false`, requiring an ES module returns its + * namespace, but the plugin does not add the `__esModule` marker and thus + * creates more efficient code. For external dependencies when using + * `esmExternals: true`, no additional interop code is generated. + * - `"auto"`: This is complementary to how `output.exports: "auto"` works in + * Rollup: If a module has a default export and no named exports, requiring + * that module returns the default export. In all other cases, the namespace + * is returned. For external dependencies when using `esmExternals: true`, a + * corresponding interop helper is added. + * - `"preferred"`: If a module has a default export, requiring that module + * always returns the default export, no matter whether additional named + * exports exist. This is similar to how previous versions of this plugin + * worked. Again for external dependencies when using `esmExternals: true`, + * an interop helper is added. + * - `true`: This will always try to return the default export on require + * without checking if it actually exists. This can throw at build time if + * there is no default export. This is how external dependencies are handled + * when `esmExternals` is not used. The advantage over the other options is + * that, like `false`, this does not add an interop helper for external + * dependencies, keeping the code lean. + * + * To change this for individual modules, you can supply a function for + * `requireReturnsDefault` instead. This function will then be called once for + * each required ES module or external dependency with the corresponding id + * and allows you to return different values for different modules. + * @default false + */ + requireReturnsDefault?: + | RequireReturnsDefaultOption + | ((id: string) => RequireReturnsDefaultOption); + /** + * Some modules contain dynamic `require` calls, or require modules that + * contain circular dependencies, which are not handled well by static + * imports. Including those modules as `dynamicRequireTargets` will simulate a + * CommonJS (NodeJS-like) environment for them with support for dynamic and + * circular dependencies. + * + * Note: In extreme cases, this feature may result in some paths being + * rendered as absolute in the final bundle. The plugin tries to avoid + * exposing paths from the local machine, but if you are `dynamicRequirePaths` + * with paths that are far away from your project's folder, that may require + * replacing strings like `"/Users/John/Desktop/foo-project/"` -> `"/"`. + */ + dynamicRequireTargets?: string | ReadonlyArray; +} + +/** + * Convert CommonJS modules to ES6, so they can be included in a Rollup bundle + */ +export default function commonjs(options?: RollupCommonJSOptions): Plugin; diff --git a/build/node_modules/@rollup/plugin-json/CHANGELOG.md b/build/node_modules/@rollup/plugin-json/CHANGELOG.md new file mode 100755 index 00000000..41c408d8 --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/CHANGELOG.md @@ -0,0 +1,117 @@ +# @rollup/plugin-json ChangeLog + +## v4.1.0 + +_2020-06-05_ + +### Features + +- feat: log the filename when JSON.parse fails (#417) + +## v4.0.3 + +_2020-04-19_ + +### Updates + +- chore: add rollup 2 to peer range (06d9d29) + +## v4.0.2 + +_2020-02-01_ + +### Bugfixes + +- fix: correct type definitions (#161) + +### Updates + +- chore: update dependencies (e1d317b) + +## 4.0.1 + +_2019-12-21_ + +- fix(json): cannot be imported by rollup (#81) + +## 4.0.0 + +_2019-03-18_ + +- Pass all JSON data through dataToEsm to consistently support "compact" formatting, support empty keys, abandon Node 4 support, add prettier, update dependencies ([#53](https://github.com/rollup/rollup-plugin-json/issues/53)) + +## 3.1.0 + +_2018-09-13_ + +- Expose "compact" and "namedExports" options ([#45](https://github.com/rollup/rollup-plugin-json/issues/45)) +- Update rollup-pluginutils to support null values in JSON ([#44](https://github.com/rollup/rollup-plugin-json/issues/44)) +- Update dependencies and ensure rollup@1.0 compatibility ([#46](https://github.com/rollup/rollup-plugin-json/issues/46)) + +## 3.0.0 + +_2018-05-11_ + +- No longer create a fake AST to support tree-shaking with upcoming versions of rollup ([#41](https://github.com/rollup/rollup-plugin-json/issues/41)) + +## 2.3.1 + +_2018-05-11_ + +- Update example in readme ([#38](https://github.com/rollup/rollup-plugin-json/issues/38)) +- Warn when using this version with upcoming rollup versions + +## 2.3.0 + +_2017-06-03_ + +- Always parse JSON, so malformed JSON is identified at bundle time ([#27](https://github.com/rollup/rollup-plugin-json/issues/27)) + +## 2.2.0 + +_2017-06-03_ + +- Add `indent` option ([#24](https://github.com/rollup/rollup-plugin-json/issues/24)) + +## 2.1.1 + +_2017-04-09_ + +- Add license to package.json ([#25](https://github.com/rollup/rollup-plugin-json/pull/25)) + +## 2.1.0 + +_2016-12-15_ + +- Add support for `preferConst` option ([#16](https://github.com/rollup/rollup-plugin-json/pull/16)) +- Handle JSON files with no valid identifier keys ([#19](https://github.com/rollup/rollup-plugin-json/issues/19)) + +## 2.0.2 + +_2016-09-07_ + +- Generate correct fake AST + +## 2.0.1 + +_2016-06-23_ + +- Return a `name` + +## 2.0.0 + +_2015-11-05_ + +- Generate fake AST to avoid unnecessary traversals within Rollup + +## 1.1.0 + +_unpublished_ + +- Generate named exports alongside default exports + +## 1.0.0 + +_2015-10-25_ + +- First release diff --git a/build/node_modules/@rollup/plugin-json/LICENSE b/build/node_modules/@rollup/plugin-json/LICENSE new file mode 100644 index 00000000..5e46702c --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/@rollup/plugin-json/README.md b/build/node_modules/@rollup/plugin-json/README.md new file mode 100644 index 00000000..d5a4e9d9 --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/README.md @@ -0,0 +1,101 @@ +[npm]: https://img.shields.io/npm/v/@rollup/plugin-json +[npm-url]: https://www.npmjs.com/package/@rollup/plugin-json +[size]: https://packagephobia.now.sh/badge?p=@rollup/plugin-json +[size-url]: https://packagephobia.now.sh/result?p=@rollup/plugin-json + +[![npm][npm]][npm-url] +[![size][size]][size-url] +[![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com) + +# @rollup/plugin-json + +🍣 A Rollup plugin which Converts .json files to ES6 modules. + +## Requirements + +This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+. + +## Install + +Using npm: + +```console +npm install @rollup/plugin-json --save-dev +``` + +## Usage + +Create a `rollup.config.js` [configuration file](https://www.rollupjs.org/guide/en/#configuration-files) and import the plugin: + +```js +import json from '@rollup/plugin-json'; + +export default { + input: 'src/index.js', + output: { + dir: 'output', + format: 'cjs' + }, + plugins: [json()] +}; +``` + +Then call `rollup` either via the [CLI](https://www.rollupjs.org/guide/en/#command-line-reference) or the [API](https://www.rollupjs.org/guide/en/#javascript-api). + +With an accompanying file `src/index.js`, the local `package.json` file would now be importable as seen below: + +```js +// src/index.js +import pkg from './package.json'; +console.log(`running version ${pkg.version}`); +``` + +## Options + +### `compact` + +Type: `Boolean`
+Default: `false` + +If `true`, instructs the plugin to ignore `indent` and generates the smallest code. + +### `exclude` + +Type: `String` | `Array[...String]`
+Default: `null` + +A [minimatch pattern](https://github.com/isaacs/minimatch), or array of patterns, which specifies the files in the build the plugin should _ignore_. By default no files are ignored. + +### `include` + +Type: `String` | `Array[...String]`
+Default: `null` + +A [minimatch pattern](https://github.com/isaacs/minimatch), or array of patterns, which specifies the files in the build the plugin should operate on. By default all files are targeted. + +### `indent` + +Type: `String`
+Default: `'\t'` + +Specifies the indentation for the generated default export. + +### `namedExports` + +Type: `Boolean`
+Default: `true` + +If `true`, instructs the plugin to generate a named export for every property of the JSON object. + +### `preferConst` + +Type: `Boolean`
+Default: `false` + +If `true`, instructs the plugin to declare properties as variables, using either `var` or `const`. This pertains to tree-shaking. + +## Meta + +[CONTRIBUTING](/.github/CONTRIBUTING.md) + +[LICENSE (MIT)](/LICENSE) diff --git a/build/node_modules/@rollup/plugin-json/dist/index.es.js b/build/node_modules/@rollup/plugin-json/dist/index.es.js new file mode 100644 index 00000000..d7488c03 --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/dist/index.es.js @@ -0,0 +1,38 @@ +import { createFilter, dataToEsm } from '@rollup/pluginutils'; + +function json(options) { + if ( options === void 0 ) options = {}; + + var filter = createFilter(options.include, options.exclude); + var indent = 'indent' in options ? options.indent : '\t'; + + return { + name: 'json', + + // eslint-disable-next-line no-shadow + transform: function transform(json, id) { + if (id.slice(-5) !== '.json' || !filter(id)) { return null; } + + try { + var parsed = JSON.parse(json); + return { + code: dataToEsm(parsed, { + preferConst: options.preferConst, + compact: options.compact, + namedExports: options.namedExports, + indent: indent + }), + map: { mappings: '' } + }; + } catch (err) { + var message = 'Could not parse JSON file'; + var position = parseInt(/[\d]/.exec(err.message)[0], 10); + this.warn({ message: message, id: id, position: position }); + return null; + } + } + }; +} + +export default json; +//# sourceMappingURL=index.es.js.map diff --git a/build/node_modules/@rollup/plugin-json/dist/index.es.js.map b/build/node_modules/@rollup/plugin-json/dist/index.es.js.map new file mode 100644 index 00000000..5df8214f --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/dist/index.es.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.es.js","sources":["../src/index.js"],"sourcesContent":["import { createFilter, dataToEsm } from '@rollup/pluginutils';\n\nexport default function json(options = {}) {\n const filter = createFilter(options.include, options.exclude);\n const indent = 'indent' in options ? options.indent : '\\t';\n\n return {\n name: 'json',\n\n // eslint-disable-next-line no-shadow\n transform(json, id) {\n if (id.slice(-5) !== '.json' || !filter(id)) return null;\n\n try {\n const parsed = JSON.parse(json);\n return {\n code: dataToEsm(parsed, {\n preferConst: options.preferConst,\n compact: options.compact,\n namedExports: options.namedExports,\n indent\n }),\n map: { mappings: '' }\n };\n } catch (err) {\n const message = 'Could not parse JSON file';\n const position = parseInt(/[\\d]/.exec(err.message)[0], 10);\n this.warn({ message, id, position });\n return null;\n }\n }\n };\n}\n"],"names":["const"],"mappings":";;AAEe,SAAS,IAAI,CAAC,OAAY,EAAE;mCAAP,GAAG;AAAK;AAC5C,EAAEA,IAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAChE,EAAEA,IAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AAC7D;AACA,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,MAAM;AAChB;AACA;AACA,IAAI,6BAAS,CAAC,IAAI,EAAE,EAAE,EAAE;AACxB,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAE,OAAO,IAAI,GAAC;AAC/D;AACA,MAAM,IAAI;AACV,QAAQA,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO;AACf,UAAU,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE;AAClC,YAAY,WAAW,EAAE,OAAO,CAAC,WAAW;AAC5C,YAAY,OAAO,EAAE,OAAO,CAAC,OAAO;AACpC,YAAY,YAAY,EAAE,OAAO,CAAC,YAAY;AAC9C,oBAAY,MAAM;AAClB,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC/B,SAAS,CAAC;AACV,OAAO,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQA,IAAM,OAAO,GAAG,2BAA2B,CAAC;AACpD,QAAQA,IAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAE,OAAO,MAAE,EAAE,YAAE,QAAQ,EAAE,CAAC,CAAC;AAC7C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;;;;"} \ No newline at end of file diff --git a/build/node_modules/@rollup/plugin-json/dist/index.js b/build/node_modules/@rollup/plugin-json/dist/index.js new file mode 100644 index 00000000..01e1a231 --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/dist/index.js @@ -0,0 +1,40 @@ +'use strict'; + +var pluginutils = require('@rollup/pluginutils'); + +function json(options) { + if ( options === void 0 ) options = {}; + + var filter = pluginutils.createFilter(options.include, options.exclude); + var indent = 'indent' in options ? options.indent : '\t'; + + return { + name: 'json', + + // eslint-disable-next-line no-shadow + transform: function transform(json, id) { + if (id.slice(-5) !== '.json' || !filter(id)) { return null; } + + try { + var parsed = JSON.parse(json); + return { + code: pluginutils.dataToEsm(parsed, { + preferConst: options.preferConst, + compact: options.compact, + namedExports: options.namedExports, + indent: indent + }), + map: { mappings: '' } + }; + } catch (err) { + var message = 'Could not parse JSON file'; + var position = parseInt(/[\d]/.exec(err.message)[0], 10); + this.warn({ message: message, id: id, position: position }); + return null; + } + } + }; +} + +module.exports = json; +//# sourceMappingURL=index.js.map diff --git a/build/node_modules/@rollup/plugin-json/dist/index.js.map b/build/node_modules/@rollup/plugin-json/dist/index.js.map new file mode 100644 index 00000000..15ee173f --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/index.js"],"sourcesContent":["import { createFilter, dataToEsm } from '@rollup/pluginutils';\n\nexport default function json(options = {}) {\n const filter = createFilter(options.include, options.exclude);\n const indent = 'indent' in options ? options.indent : '\\t';\n\n return {\n name: 'json',\n\n // eslint-disable-next-line no-shadow\n transform(json, id) {\n if (id.slice(-5) !== '.json' || !filter(id)) return null;\n\n try {\n const parsed = JSON.parse(json);\n return {\n code: dataToEsm(parsed, {\n preferConst: options.preferConst,\n compact: options.compact,\n namedExports: options.namedExports,\n indent\n }),\n map: { mappings: '' }\n };\n } catch (err) {\n const message = 'Could not parse JSON file';\n const position = parseInt(/[\\d]/.exec(err.message)[0], 10);\n this.warn({ message, id, position });\n return null;\n }\n }\n };\n}\n"],"names":["const","createFilter","dataToEsm"],"mappings":";;;;AAEe,SAAS,IAAI,CAAC,OAAY,EAAE;mCAAP,GAAG;AAAK;AAC5C,EAAEA,IAAM,MAAM,GAAGC,wBAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAChE,EAAED,IAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AAC7D;AACA,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,MAAM;AAChB;AACA;AACA,IAAI,6BAAS,CAAC,IAAI,EAAE,EAAE,EAAE;AACxB,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAE,OAAO,IAAI,GAAC;AAC/D;AACA,MAAM,IAAI;AACV,QAAQA,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,OAAO;AACf,UAAU,IAAI,EAAEE,qBAAS,CAAC,MAAM,EAAE;AAClC,YAAY,WAAW,EAAE,OAAO,CAAC,WAAW;AAC5C,YAAY,OAAO,EAAE,OAAO,CAAC,OAAO;AACpC,YAAY,YAAY,EAAE,OAAO,CAAC,YAAY;AAC9C,oBAAY,MAAM;AAClB,WAAW,CAAC;AACZ,UAAU,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC/B,SAAS,CAAC;AACV,OAAO,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQF,IAAM,OAAO,GAAG,2BAA2B,CAAC;AACpD,QAAQA,IAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAE,OAAO,MAAE,EAAE,YAAE,QAAQ,EAAE,CAAC,CAAC;AAC7C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ;;;;"} \ No newline at end of file diff --git a/build/node_modules/@rollup/plugin-json/package.json b/build/node_modules/@rollup/plugin-json/package.json new file mode 100644 index 00000000..30e83ac5 --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/package.json @@ -0,0 +1,100 @@ +{ + "_from": "@rollup/plugin-json@^4.1.0", + "_id": "@rollup/plugin-json@4.1.0", + "_inBundle": false, + "_integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "_location": "/@rollup/plugin-json", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@rollup/plugin-json@^4.1.0", + "name": "@rollup/plugin-json", + "escapedName": "@rollup%2fplugin-json", + "scope": "@rollup", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "#DEV:/" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "_shasum": "54e09867ae6963c593844d8bd7a9c718294496f3", + "_spec": "@rollup/plugin-json@^4.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", + "author": { + "name": "rollup" + }, + "ava": { + "files": [ + "!**/fixtures/**", + "!**/helpers/**", + "!**/recipes/**", + "!**/types.ts" + ] + }, + "bugs": { + "url": "https://github.com/rollup/plugins/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "deprecated": false, + "description": "Convert .json files to ES6 modules", + "devDependencies": { + "@rollup/plugin-buble": "^0.21.0", + "@rollup/plugin-node-resolve": "^7.0.0", + "source-map-support": "^0.5.16" + }, + "files": [ + "dist", + "types", + "README.md", + "LICENSE" + ], + "homepage": "https://github.com/rollup/plugins/tree/master/packages/json#readme", + "keywords": [ + "rollup", + "plugin", + "json", + "es2015", + "npm", + "modules" + ], + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.es.js", + "name": "@rollup/plugin-json", + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rollup/plugins.git" + }, + "scripts": { + "build": "rollup -c", + "ci:coverage": "nyc pnpm run test && nyc report --reporter=text-lcov > coverage.lcov", + "ci:lint": "pnpm run build && pnpm run lint", + "ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}", + "ci:test": "pnpm run test -- --verbose && pnpm run test:ts", + "lint": "pnpm run lint:js && pnpm run lint:docs && pnpm run lint:json && pnpm run lint:package", + "lint:docs": "prettier --single-quote --write README.md", + "lint:js": "eslint --fix --cache src test types --ext .js,.ts", + "lint:json": "prettier --write \"test/fixtures/!(garbage)/*.json\"", + "lint:package": "prettier --write package.json --plugin=prettier-plugin-package", + "prebuild": "del-cli dist", + "prepare": "pnpm run build", + "prepublishOnly": "pnpm run lint && pnpm run test", + "pretest": "pnpm run build", + "test": "ava", + "test:ts": "tsc types/index.d.ts test/types.ts --noEmit" + }, + "types": "types/index.d.ts", + "version": "4.1.0" +} diff --git a/build/node_modules/@rollup/plugin-json/types/index.d.ts b/build/node_modules/@rollup/plugin-json/types/index.d.ts new file mode 100755 index 00000000..e25b88fa --- /dev/null +++ b/build/node_modules/@rollup/plugin-json/types/index.d.ts @@ -0,0 +1,41 @@ +import { FilterPattern } from '@rollup/pluginutils'; +import { Plugin } from 'rollup'; + +export interface RollupJsonOptions { + /** + * All JSON files will be parsed by default, + * but you can also specifically include files + */ + include?: FilterPattern; + /** + * All JSON files will be parsed by default, + * but you can also specifically exclude files + */ + exclude?: FilterPattern; + /** + * For tree-shaking, properties will be declared as variables, using + * either `var` or `const`. + * @default false + */ + preferConst?: boolean; + /** + * Specify indentation for the generated default export + * @default '\t' + */ + indent?: string; + /** + * Ignores indent and generates the smallest code + * @default false + */ + compact?: boolean; + /** + * Generate a named export for every property of the JSON object + * @default true + */ + namedExports?: boolean; +} + +/** + * Convert .json files to ES6 modules + */ +export default function json(options?: RollupJsonOptions): Plugin; diff --git a/build/node_modules/@rollup/plugin-node-resolve/CHANGELOG.md b/build/node_modules/@rollup/plugin-node-resolve/CHANGELOG.md new file mode 100755 index 00000000..fd94c1ee --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/CHANGELOG.md @@ -0,0 +1,518 @@ +# @rollup/plugin-node-resolve ChangeLog + +## v13.1.3 + +_2022-01-05_ + +### Bugfixes + +- fix: use correct version when published (#1063) + +## v13.1.2 + +_2021-12-31_ + +### Bugfixes + +- fix: forward meta-information from other plugins (#1062) + +## v13.1.1 + +_2021-12-13_ + +### Updates + +- test: add tests for mixing custom `exportConditions` with `browser: true` (#1043) + +## v13.1.0 + +_2021-12-13_ + +### Features + +- feat: expose plugin version (#1050) + +## v13.0.6 + +_2021-10-19_ + +### Bugfixes + +- fix: pass on isEntry flag (#1016) + +## v13.0.5 + +_2021-09-21_ + +### Updates + +- docs: fix readme heading depth (#999) + +## v13.0.4 + +_2021-07-24_ + +### Bugfixes + +- fix: Fix bug where JS import was converted to a TS import, resulting in an error when using export maps (#921) + +## v13.0.3 + +_2021-07-24_ + +### Bugfixes + +- fix: handle browser-mapped paths correctly in nested contexts (#920) + +## v13.0.2 + +_2021-07-15_ + +### Bugfixes + +- fix: handle "package.json" being in path (#927) + +## v13.0.1 + +_2021-07-15_ + +### Updates + +- docs: Document how to get Node.js exports resolution (#884) + +## v13.0.0 + +_2021-05-04_ + +### Breaking Changes + +- fix!: mark module as external if resolved module is external (#799) + +### Features + +- feat: Follow up to #843, refining exports and browser field interaction (#866) + +## v12.0.0 + +_2021-05-04_ + +### Breaking Changes + +- fix!: mark module as external if resolved module is external (#799) + +### Features + +- feat: Follow up to #843, refining exports and browser field interaction (#866) + +## v11.2.1 + +_2021-03-26_ + +### Bugfixes + +- fix: fs.exists is incorrectly promisified (#835) + +## v11.2.0 + +_2021-02-14_ + +### Features + +- feat: add `ignoreSideEffectsForRoot` option (#694) + +### Updates + +- chore: mark `url` as an external and throw on warning (#783) +- docs: clearer "Resolving Built-Ins" doc (#782) + +## v11.1.1 + +_2021-01-29_ + +### Bugfixes + +- fix: only log last resolve error (#750) + +### Updates + +- docs: add clarification on the order of package entrypoints (#768) + +## v11.1.0 + +_2021-01-15_ + +### Features + +- feat: support pkg imports and export array (#693) + +## v11.0.1 + +_2020-12-14_ + +### Bugfixes + +- fix: export map specificity (#675) +- fix: add missing type import (#668) + +### Updates + +- docs: corrected word "yse" to "use" (#723) + +## v11.0.0 + +_2020-11-30_ + +### Breaking Changes + +- refactor!: simplify builtins and remove `customResolveOptions` (#656) +- feat!: Mark built-ins as external (#627) +- feat!: support package entry points (#540) + +### Bugfixes + +- fix: refactor handling builtins, do not log warning if no local version (#637) + +### Updates + +- docs: fix import statements in examples in README.md (#646) + +## v10.0.0 + +_2020-10-27_ + +### Breaking Changes + +- fix!: resolve hash in path (#588) + +### Bugfixes + +- fix: do not ignore exceptions (#564) + +## v9.0.0 + +_2020-08-13_ + +### Breaking Changes + +- chore: update dependencies (e632469) + +### Updates + +- refactor: remove deep-freeze from dependencies (#529) +- chore: clean up changelog (84dfddb) + +## v8.4.0 + +_2020-07-12_ + +### Features + +- feat: preserve search params and hashes (#487) +- feat: support .js imports in TypeScript (#480) + +### Updates + +- docs: fix named export use in readme (#456) +- docs: correct mainFields valid values (#469) + +## v8.1.0 + +_2020-06-22_ + +### Features + +- feat: add native node es modules support (#413) + +## v8.0.1 + +_2020-06-05_ + +### Bugfixes + +- fix: handle nested entry modules with the resolveOnly option (#430) + +## v8.0.0 + +_2020-05-20_ + +### Breaking Changes + +- feat: Add default export (#361) +- feat: export defaults (#301) + +### Bugfixes + +- fix: resolve local files if `resolveOption` is set (#337) + +### Updates + +- docs: correct misspelling (#343) + +## v7.1.3 + +_2020-04-12_ + +### Bugfixes + +- fix: resolve symlinked entry point properly (#291) + +## v7.1.2 + +_2020-04-12_ + +### Updates + +- docs: fix url (#289) + +## v7.1.1 + +_2020-02-03_ + +### Bugfixes + +- fix: main fields regression (#196) + +## v7.1.0 + +_2020-02-01_ + +### Updates + +- refactor: clean codebase and fix external warnings (#155) + +## v7.0.0 + +_2020-01-07_ + +### Breaking Changes + +- feat: dedupe by package name (#99) + +## v6.1.0 + +_2020-01-04_ + +### Bugfixes + +- fix: allow deduplicating custom module dirs (#101) + +### Features + +- feat: add rootDir option (#98) + +### Updates + +- docs: improve doc related to mainFields (#138) + +## 6.0.0 + +_2019-11-25_ + +- **Breaking:** Minimum compatible Rollup version is 1.20.0 +- **Breaking:** Minimum supported Node version is 8.0.0 +- Published as @rollup/plugin-node-resolve + +## 5.2.1 (unreleased) + +- add missing MIT license file ([#233](https://github.com/rollup/rollup-plugin-node-resolve/pull/233) by @kenjiO) +- Fix incorrect example of config ([#239](https://github.com/rollup/rollup-plugin-node-resolve/pull/240) by @myshov) +- Fix typo in readme ([#240](https://github.com/rollup/rollup-plugin-node-resolve/pull/240) by @LinusU) + +## 5.2.0 (2019-06-29) + +- dedupe accepts a function ([#225](https://github.com/rollup/rollup-plugin-node-resolve/pull/225) by @manucorporat) + +## 5.1.1 (2019-06-29) + +- Move Rollup version check to buildStart hook to avoid issues ([#232](https://github.com/rollup/rollup-plugin-node-resolve/pull/232) by @lukastaegert) + +## 5.1.0 (2019-06-22) + +- Fix path fragment inputs ([#229](https://github.com/rollup/rollup-plugin-node-resolve/pull/229) by @bterlson) + +## 5.0.4 (2019-06-22) + +- Treat sideEffects array as inclusion list ([#227](https://github.com/rollup/rollup-plugin-node-resolve/pull/227) by @mikeharder) + +## 5.0.3 (2019-06-16) + +- Make empty.js a virtual module ([#224](https://github.com/rollup/rollup-plugin-node-resolve/pull/224) by @manucorporat) + +## 5.0.2 (2019-06-13) + +- Support resolve 1.11.1, add built-in test ([#223](https://github.com/rollup/rollup-plugin-node-resolve/pull/223) by @bterlson) + +## 5.0.1 (2019-05-31) + +- Update to resolve@1.11.0 for better performance ([#220](https://github.com/rollup/rollup-plugin-node-resolve/pull/220) by @keithamus) + +## 5.0.0 (2019-05-15) + +- Replace bublé with babel, update dependencies ([#216](https://github.com/rollup/rollup-plugin-node-resolve/pull/216) by @mecurc) +- Handle module side-effects ([#219](https://github.com/rollup/rollup-plugin-node-resolve/pull/219) by @lukastaegert) + +### Breaking Changes + +- Requires at least rollup@1.11.0 to work (v1.12.0 for module side-effects to be respected) +- If used with rollup-plugin-commonjs, it should be at least v10.0.0 + +## 4.2.4 (2019-05-11) + +- Add note on builtins to Readme ([#215](https://github.com/rollup/rollup-plugin-node-resolve/pull/215) by @keithamus) +- Add issue templates ([#217](https://github.com/rollup/rollup-plugin-node-resolve/pull/217) by @mecurc) +- Improve performance by caching `isDir` ([#218](https://github.com/rollup/rollup-plugin-node-resolve/pull/218) by @keithamus) + +## 4.2.3 (2019-04-11) + +- Fix ordering of jsnext:main when using the jsnext option ([#209](https://github.com/rollup/rollup-plugin-node-resolve/pull/209) by @lukastaegert) + +## 4.2.2 (2019-04-10) + +- Fix TypeScript typings (rename and export Options interface) ([#206](https://github.com/rollup/rollup-plugin-node-resolve/pull/206) by @Kocal) +- Fix mainfields typing ([#207](https://github.com/rollup/rollup-plugin-node-resolve/pull/207) by @nicolashenry) + +## 4.2.1 (2019-04-06) + +- Respect setting the deprecated fields "module", "main", and "jsnext" ([#204](https://github.com/rollup/rollup-plugin-node-resolve/pull/204) by @nick-woodward) + +## 4.2.0 (2019-04-06) + +- Add new mainfields option ([#182](https://github.com/rollup/rollup-plugin-node-resolve/pull/182) by @keithamus) +- Added dedupe option to prevent bundling the same package multiple times ([#201](https://github.com/rollup/rollup-plugin-node-resolve/pull/182) by @sormy) + +## 4.1.0 (2019-04-05) + +- Add TypeScript typings ([#189](https://github.com/rollup/rollup-plugin-node-resolve/pull/189) by @NotWoods) +- Update dependencies ([#202](https://github.com/rollup/rollup-plugin-node-resolve/pull/202) by @lukastaegert) + +## 4.0.1 (2019-02-22) + +- Fix issue when external modules are specified in `package.browser` ([#143](https://github.com/rollup/rollup-plugin-node-resolve/pull/143) by @keithamus) +- Fix `package.browser` mapping issue when `false` is specified ([#183](https://github.com/rollup/rollup-plugin-node-resolve/pull/183) by @allex) + +## 4.0.0 (2018-12-09) + +This release will support rollup@1.0 + +### Features + +- Resolve modules used to define manual chunks ([#185](https://github.com/rollup/rollup-plugin-node-resolve/pull/185) by @mcshaman) +- Update dependencies and plugin hook usage ([#187](https://github.com/rollup/rollup-plugin-node-resolve/pull/187) by @lukastaegert) + +## 3.4.0 (2018-09-04) + +This release now supports `.mjs` files by default + +### Features + +- feat: Support .mjs files by default (https://github.com/rollup/rollup-plugin-node-resolve/pull/151, by @leebyron) + +## 3.3.0 (2018-03-17) + +This release adds the `only` option + +### New Features + +- feat: add `only` option (#83; @arantes555) + +### Docs + +- docs: correct description of `jail` option (#120; @GeorgeTaveras1231) + +## 3.2.0 (2018-03-07) + +This release caches reading/statting of files, to improve speed. + +### Performance Improvements + +- perf: cache file stats/reads (#126; @keithamus) + +## 3.0.4 (unreleased) + +- Update lockfile [#137](https://github.com/rollup/rollup-plugin-node-resolve/issues/137) +- Update rollup dependency [#138](https://github.com/rollup/rollup-plugin-node-resolve/issues/138) +- Enable installation from Github [#142](https://github.com/rollup/rollup-plugin-node-resolve/issues/142) + +## 3.0.3 + +- Fix [#130](https://github.com/rollup/rollup-plugin-node-resolve/issues/130) and [#131](https://github.com/rollup/rollup-plugin-node-resolve/issues/131) + +## 3.0.2 + +- Ensure `pkg.browser` is an object if necessary ([#129](https://github.com/rollup/rollup-plugin-node-resolve/pull/129)) + +## 3.0.1 + +- Remove `browser-resolve` dependency ([#127](https://github.com/rollup/rollup-plugin-node-resolve/pull/127)) + +## 3.0.0 + +- [BREAKING] Remove `options.skip` ([#90](https://github.com/rollup/rollup-plugin-node-resolve/pull/90)) +- Add `modulesOnly` option ([#96](https://github.com/rollup/rollup-plugin-node-resolve/pull/96)) + +## 2.1.1 + +- Prevent `jail` from breaking builds on Windows ([#93](https://github.com/rollup/rollup-plugin-node-resolve/issues/93)) + +## 2.1.0 + +- Add `jail` option ([#53](https://github.com/rollup/rollup-plugin-node-resolve/pull/53)) +- Add `customResolveOptions` option ([#79](https://github.com/rollup/rollup-plugin-node-resolve/pull/79)) +- Support symlinked packages ([#82](https://github.com/rollup/rollup-plugin-node-resolve/pull/82)) + +## 2.0.0 + +- Add support `module` field in package.json as an official alternative to jsnext + +## 1.7.3 + +- Error messages are more descriptive ([#50](https://github.com/rollup/rollup-plugin-node-resolve/issues/50)) + +## 1.7.2 + +- Allow entry point paths beginning with ./ + +## 1.7.1 + +- Return a `name` + +## 1.7.0 + +- Allow relative IDs to be external ([#32](https://github.com/rollup/rollup-plugin-node-resolve/pull/32)) + +## 1.6.0 + +- Skip IDs containing null character + +## 1.5.0 + +- Prefer built-in options, but allow opting out ([#28](https://github.com/rollup/rollup-plugin-node-resolve/pull/28)) + +## 1.4.0 + +- Pass `options.extensions` through to `node-resolve` + +## 1.3.0 + +- `skip: true` skips all packages that don't satisfy the `main` or `jsnext` options ([#16](https://github.com/rollup/rollup-plugin-node-resolve/pull/16)) + +## 1.2.1 + +- Support scoped packages in `skip` option ([#15](https://github.com/rollup/rollup-plugin-node-resolve/issues/15)) + +## 1.2.0 + +- Support `browser` field ([#8](https://github.com/rollup/rollup-plugin-node-resolve/issues/8)) +- Get tests to pass on Windows + +## 1.1.0 + +- Use node-resolve to handle various corner cases + +## 1.0.0 + +- Add ES6 build, use Rollup 0.20.0 + +## 0.1.0 + +- First release diff --git a/build/node_modules/@rollup/plugin-node-resolve/LICENSE b/build/node_modules/@rollup/plugin-node-resolve/LICENSE new file mode 100644 index 00000000..5e46702c --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/@rollup/plugin-node-resolve/README.md b/build/node_modules/@rollup/plugin-node-resolve/README.md new file mode 100755 index 00000000..905d1504 --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/README.md @@ -0,0 +1,229 @@ +[npm]: https://img.shields.io/npm/v/@rollup/plugin-node-resolve +[npm-url]: https://www.npmjs.com/package/@rollup/plugin-node-resolve +[size]: https://packagephobia.now.sh/badge?p=@rollup/plugin-node-resolve +[size-url]: https://packagephobia.now.sh/result?p=@rollup/plugin-node-resolve + +[![npm][npm]][npm-url] +[![size][size]][size-url] +[![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com) + +# @rollup/plugin-node-resolve + +🍣 A Rollup plugin which locates modules using the [Node resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together), for using third party modules in `node_modules` + +## Requirements + +This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+. + +## Install + +Using npm: + +```console +npm install @rollup/plugin-node-resolve --save-dev +``` + +## Usage + +Create a `rollup.config.js` [configuration file](https://www.rollupjs.org/guide/en/#configuration-files) and import the plugin: + +```js +import { nodeResolve } from '@rollup/plugin-node-resolve'; + +export default { + input: 'src/index.js', + output: { + dir: 'output', + format: 'cjs' + }, + plugins: [nodeResolve()] +}; +``` + +Then call `rollup` either via the [CLI](https://www.rollupjs.org/guide/en/#command-line-reference) or the [API](https://www.rollupjs.org/guide/en/#javascript-api). + +## Package entrypoints + +This plugin supports the package entrypoints feature from node js, specified in the `exports` or `imports` field of a package. Check the [official documentation](https://nodejs.org/api/packages.html#packages_package_entry_points) for more information on how this works. This is the default behavior. In the abscence of these fields, the fields in `mainFields` will be the ones to be used. + +## Options + +### `exportConditions` + +Type: `Array[...String]`
+Default: `[]` + +Additional conditions of the package.json exports field to match when resolving modules. By default, this plugin looks for the `['default', 'module', 'import']` conditions when resolving imports. + +When using `@rollup/plugin-commonjs` v16 or higher, this plugin will use the `['default', 'module', 'require']` conditions when resolving require statements. + +Setting this option will add extra conditions on top of the default conditions. See https://nodejs.org/api/packages.html#packages_conditional_exports for more information. + +In order to get the [resolution behavior of Node.js](https://nodejs.org/api/packages.html#packages_conditional_exports), set this to `['node']`. + +### `browser` + +Type: `Boolean`
+Default: `false` + +If `true`, instructs the plugin to use the browser module resolutions in `package.json` and adds `'browser'` to `exportConditions` if it is not present so browser conditionals in `exports` are applied. If `false`, any browser properties in package files will be ignored. Alternatively, a value of `'browser'` can be added to both the `mainFields` and `exportConditions` options, however this option takes precedence over `mainFields`. + +> This option does not work when a package is using [package entrypoints](https://nodejs.org/api/packages.html#packages_package_entry_points) + +### `moduleDirectories` + +Type: `Array[...String]`
+Default: `['node_modules']` + +One or more directories in which to recursively look for modules. + +### `dedupe` + +Type: `Array[...String]`
+Default: `[]` + +An `Array` of modules names, which instructs the plugin to force resolving for the specified modules to the root `node_modules`. Helps to prevent bundling the same package multiple times if package is imported from dependencies. + +```js +dedupe: ['my-package', '@namespace/my-package']; +``` + +This will deduplicate bare imports such as: + +```js +import 'my-package'; +import '@namespace/my-package'; +``` + +And it will deduplicate deep imports such as: + +```js +import 'my-package/foo.js'; +import '@namespace/my-package/bar.js'; +``` + +### `extensions` + +Type: `Array[...String]`
+Default: `['.mjs', '.js', '.json', '.node']` + +Specifies the extensions of files that the plugin will operate on. + +### `jail` + +Type: `String`
+Default: `'/'` + +Locks the module search within specified path (e.g. chroot). Modules defined outside this path will be ignored by this plugin. + +### `mainFields` + +Type: `Array[...String]`
+Default: `['module', 'main']`
+Valid values: `['browser', 'jsnext:main', 'module', 'main']` + +Specifies the properties to scan within a `package.json`, used to determine the bundle entry point. The order of property names is significant, as the first-found property is used as the resolved entry point. If the array contains `'browser'`, key/values specified in the `package.json` `browser` property will be used. + +### `preferBuiltins` + +Type: `Boolean`
+Default: `true` (with warnings if a builtin module is used over a local version. Set to `true` to disable warning.) + +If `true`, the plugin will prefer built-in modules (e.g. `fs`, `path`). If `false`, the plugin will look for locally installed modules of the same name. + +### `modulesOnly` + +Type: `Boolean`
+Default: `false` + +If `true`, inspect resolved files to assert that they are ES2015 modules. + +### `resolveOnly` + +Type: `Array[...String|RegExp]`
+Default: `null` + +An `Array` which instructs the plugin to limit module resolution to those whose names match patterns in the array. _Note: Modules not matching any patterns will be marked as external._ + +Example: `resolveOnly: ['batman', /^@batcave\/.*$/]` + +### `rootDir` + +Type: `String`
+Default: `process.cwd()` + +Specifies the root directory from which to resolve modules. Typically used when resolving entry-point imports, and when resolving deduplicated modules. Useful when executing rollup in a package of a mono-repository. + +``` +// Set the root directory to be the parent folder +rootDir: path.join(process.cwd(), '..') +``` + +### `ignoreSideEffectsForRoot` + +If you use the `sideEffects` property in the package.json, by default this is respected for files in the root package. Set to `true` to ignore the `sideEffects` configuration for the root package. + +## Preserving symlinks + +This plugin honours the rollup [`preserveSymlinks`](https://rollupjs.org/guide/en/#preservesymlinks) option. + +## Using with @rollup/plugin-commonjs + +Since most packages in your node_modules folder are probably legacy CommonJS rather than JavaScript modules, you may need to use [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/master/packages/commonjs): + +```js +// rollup.config.js +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; + +export default { + input: 'main.js', + output: { + file: 'bundle.js', + format: 'iife', + name: 'MyModule' + }, + plugins: [nodeResolve(), commonjs()] +}; +``` + +## Resolving Built-Ins (like `fs`) + +By default this plugin will prefer built-ins over local modules, marking them as external. + +See [`preferBuiltins`](#preferbuiltins). + +To provide stubbed versions of Node built-ins, use a plugin like [rollup-plugin-node-polyfills](https://github.com/ionic-team/rollup-plugin-node-polyfills) and set `preferBuiltins` to `false`. e.g. + +```js +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import nodePolyfills from 'rollup-plugin-node-polyfills'; +export default ({ + input: ..., + plugins: [ + nodePolyfills(), + nodeResolve({ preferBuiltins: false }) + ], + external: builtins, + output: ... +}) +``` + +## Resolving require statements + +According to [NodeJS module resolution](https://nodejs.org/api/packages.html#packages_package_entry_points) `require` statements should resolve using the `require` condition in the package exports field, while es modules should use the `import` condition. + +The node resolve plugin uses `import` by default, you can opt into using the `require` semantics by passing an extra option to the resolve function: + +```js +this.resolve(importee, importer, { + skipSelf: true, + custom: { 'node-resolve': { isRequire: true } } +}); +``` + +## Meta + +[CONTRIBUTING](/.github/CONTRIBUTING.md) + +[LICENSE (MIT)](/LICENSE) diff --git a/build/node_modules/@rollup/plugin-node-resolve/dist/cjs/index.js b/build/node_modules/@rollup/plugin-node-resolve/dist/cjs/index.js new file mode 100644 index 00000000..55ccc73b --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/dist/cjs/index.js @@ -0,0 +1,1199 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var path = require('path'); +var builtinList = require('builtin-modules'); +var deepMerge = require('deepmerge'); +var isModule = require('is-module'); +var fs = require('fs'); +var util = require('util'); +var url = require('url'); +var resolve = require('resolve'); +var pluginutils = require('@rollup/pluginutils'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var path__default = /*#__PURE__*/_interopDefaultLegacy(path); +var builtinList__default = /*#__PURE__*/_interopDefaultLegacy(builtinList); +var deepMerge__default = /*#__PURE__*/_interopDefaultLegacy(deepMerge); +var isModule__default = /*#__PURE__*/_interopDefaultLegacy(isModule); +var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +var resolve__default = /*#__PURE__*/_interopDefaultLegacy(resolve); + +var version = "13.1.3"; + +util.promisify(fs__default["default"].access); +const readFile$1 = util.promisify(fs__default["default"].readFile); +const realpath = util.promisify(fs__default["default"].realpath); +const stat = util.promisify(fs__default["default"].stat); + +async function fileExists(filePath) { + try { + const res = await stat(filePath); + return res.isFile(); + } catch { + return false; + } +} + +async function resolveSymlink(path) { + return (await fileExists(path)) ? realpath(path) : path; +} + +const onError = (error) => { + if (error.code === 'ENOENT') { + return false; + } + throw error; +}; + +const makeCache = (fn) => { + const cache = new Map(); + const wrapped = async (param, done) => { + if (cache.has(param) === false) { + cache.set( + param, + fn(param).catch((err) => { + cache.delete(param); + throw err; + }) + ); + } + + try { + const result = cache.get(param); + const value = await result; + return done(null, value); + } catch (error) { + return done(error); + } + }; + + wrapped.clear = () => cache.clear(); + + return wrapped; +}; + +const isDirCached = makeCache(async (file) => { + try { + const stats = await stat(file); + return stats.isDirectory(); + } catch (error) { + return onError(error); + } +}); + +const isFileCached = makeCache(async (file) => { + try { + const stats = await stat(file); + return stats.isFile(); + } catch (error) { + return onError(error); + } +}); + +const readCachedFile = makeCache(readFile$1); + +function handleDeprecatedOptions(opts) { + const warnings = []; + + if (opts.customResolveOptions) { + const { customResolveOptions } = opts; + if (customResolveOptions.moduleDirectory) { + // eslint-disable-next-line no-param-reassign + opts.moduleDirectories = Array.isArray(customResolveOptions.moduleDirectory) + ? customResolveOptions.moduleDirectory + : [customResolveOptions.moduleDirectory]; + + warnings.push( + 'node-resolve: The `customResolveOptions.moduleDirectory` option has been deprecated. Use `moduleDirectories`, which must be an array.' + ); + } + + if (customResolveOptions.preserveSymlinks) { + throw new Error( + 'node-resolve: `customResolveOptions.preserveSymlinks` is no longer an option. We now always use the rollup `preserveSymlinks` option.' + ); + } + + [ + 'basedir', + 'package', + 'extensions', + 'includeCoreModules', + 'readFile', + 'isFile', + 'isDirectory', + 'realpath', + 'packageFilter', + 'pathFilter', + 'paths', + 'packageIterator' + ].forEach((resolveOption) => { + if (customResolveOptions[resolveOption]) { + throw new Error( + `node-resolve: \`customResolveOptions.${resolveOption}\` is no longer an option. If you need this, please open an issue.` + ); + } + }); + } + + return { warnings }; +} + +// returns the imported package name for bare module imports +function getPackageName(id) { + if (id.startsWith('.') || id.startsWith('/')) { + return null; + } + + const split = id.split('/'); + + // @my-scope/my-package/foo.js -> @my-scope/my-package + // @my-scope/my-package -> @my-scope/my-package + if (split[0][0] === '@') { + return `${split[0]}/${split[1]}`; + } + + // my-package/foo.js -> my-package + // my-package -> my-package + return split[0]; +} + +function getMainFields(options) { + let mainFields; + if (options.mainFields) { + ({ mainFields } = options); + } else { + mainFields = ['module', 'main']; + } + if (options.browser && mainFields.indexOf('browser') === -1) { + return ['browser'].concat(mainFields); + } + if (!mainFields.length) { + throw new Error('Please ensure at least one `mainFields` value is specified'); + } + return mainFields; +} + +function getPackageInfo(options) { + const { + cache, + extensions, + pkg, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + } = options; + let { pkgPath } = options; + + if (cache.has(pkgPath)) { + return cache.get(pkgPath); + } + + // browserify/resolve doesn't realpath paths returned in its packageFilter callback + if (!preserveSymlinks) { + pkgPath = fs.realpathSync(pkgPath); + } + + const pkgRoot = path.dirname(pkgPath); + + const packageInfo = { + // copy as we are about to munge the `main` field of `pkg`. + packageJson: { ...pkg }, + + // path to package.json file + packageJsonPath: pkgPath, + + // directory containing the package.json + root: pkgRoot, + + // which main field was used during resolution of this module (main, module, or browser) + resolvedMainField: 'main', + + // whether the browser map was used to resolve the entry point to this module + browserMappedMain: false, + + // the entry point of the module with respect to the selected main field and any + // relevant browser mappings. + resolvedEntryPoint: '' + }; + + let overriddenMain = false; + for (let i = 0; i < mainFields.length; i++) { + const field = mainFields[i]; + if (typeof pkg[field] === 'string') { + pkg.main = pkg[field]; + packageInfo.resolvedMainField = field; + overriddenMain = true; + break; + } + } + + const internalPackageInfo = { + cachedPkg: pkg, + hasModuleSideEffects: () => null, + hasPackageEntry: overriddenMain !== false || mainFields.indexOf('main') !== -1, + packageBrowserField: + useBrowserOverrides && + typeof pkg.browser === 'object' && + Object.keys(pkg.browser).reduce((browser, key) => { + let resolved = pkg.browser[key]; + if (resolved && resolved[0] === '.') { + resolved = path.resolve(pkgRoot, resolved); + } + /* eslint-disable no-param-reassign */ + browser[key] = resolved; + if (key[0] === '.') { + const absoluteKey = path.resolve(pkgRoot, key); + browser[absoluteKey] = resolved; + if (!path.extname(key)) { + extensions.reduce((subBrowser, ext) => { + subBrowser[absoluteKey + ext] = subBrowser[key]; + return subBrowser; + }, browser); + } + } + return browser; + }, {}), + packageInfo + }; + + const browserMap = internalPackageInfo.packageBrowserField; + if ( + useBrowserOverrides && + typeof pkg.browser === 'object' && + // eslint-disable-next-line no-prototype-builtins + browserMap.hasOwnProperty(pkg.main) + ) { + packageInfo.resolvedEntryPoint = browserMap[pkg.main]; + packageInfo.browserMappedMain = true; + } else { + // index.node is technically a valid default entrypoint as well... + packageInfo.resolvedEntryPoint = path.resolve(pkgRoot, pkg.main || 'index.js'); + packageInfo.browserMappedMain = false; + } + + if (!ignoreSideEffectsForRoot || rootDir !== pkgRoot) { + const packageSideEffects = pkg.sideEffects; + if (typeof packageSideEffects === 'boolean') { + internalPackageInfo.hasModuleSideEffects = () => packageSideEffects; + } else if (Array.isArray(packageSideEffects)) { + internalPackageInfo.hasModuleSideEffects = pluginutils.createFilter(packageSideEffects, null, { + resolve: pkgRoot + }); + } + } + + cache.set(pkgPath, internalPackageInfo); + return internalPackageInfo; +} + +function normalizeInput(input) { + if (Array.isArray(input)) { + return input; + } else if (typeof input === 'object') { + return Object.values(input); + } + + // otherwise it's a string + return [input]; +} + +/* eslint-disable no-await-in-loop */ + +function isModuleDir(current, moduleDirs) { + return moduleDirs.some((dir) => current.endsWith(dir)); +} + +async function findPackageJson(base, moduleDirs) { + const { root } = path__default["default"].parse(base); + let current = base; + + while (current !== root && !isModuleDir(current, moduleDirs)) { + const pkgJsonPath = path__default["default"].join(current, 'package.json'); + if (await fileExists(pkgJsonPath)) { + const pkgJsonString = fs__default["default"].readFileSync(pkgJsonPath, 'utf-8'); + return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; + } + current = path__default["default"].resolve(current, '..'); + } + return null; +} + +function isUrl(str) { + try { + return !!new URL(str); + } catch (_) { + return false; + } +} + +function isConditions(exports) { + return typeof exports === 'object' && Object.keys(exports).every((k) => !k.startsWith('.')); +} + +function isMappings(exports) { + return typeof exports === 'object' && !isConditions(exports); +} + +function isMixedExports(exports) { + const keys = Object.keys(exports); + return keys.some((k) => k.startsWith('.')) && keys.some((k) => !k.startsWith('.')); +} + +function createBaseErrorMsg(importSpecifier, importer) { + return `Could not resolve import "${importSpecifier}" in ${importer}`; +} + +function createErrorMsg(context, reason, internal) { + const { importSpecifier, importer, pkgJsonPath } = context; + const base = createBaseErrorMsg(importSpecifier, importer); + const field = internal ? 'imports' : 'exports'; + return `${base} using ${field} defined in ${pkgJsonPath}.${reason ? ` ${reason}` : ''}`; +} + +class ResolveError extends Error {} + +class InvalidConfigurationError extends ResolveError { + constructor(context, reason) { + super(createErrorMsg(context, `Invalid "exports" field. ${reason}`)); + } +} + +class InvalidModuleSpecifierError extends ResolveError { + constructor(context, internal, reason) { + super(createErrorMsg(context, reason, internal)); + } +} + +class InvalidPackageTargetError extends ResolveError { + constructor(context, reason) { + super(createErrorMsg(context, reason)); + } +} + +/* eslint-disable no-await-in-loop, no-undefined */ + +function includesInvalidSegments(pathSegments, moduleDirs) { + return pathSegments + .split('/') + .slice(1) + .some((t) => ['.', '..', ...moduleDirs].includes(t)); +} + +async function resolvePackageTarget(context, { target, subpath, pattern, internal }) { + if (typeof target === 'string') { + if (!pattern && subpath.length > 0 && !target.endsWith('/')) { + throw new InvalidModuleSpecifierError(context); + } + + if (!target.startsWith('./')) { + if (internal && !['/', '../'].some((p) => target.startsWith(p)) && !isUrl(target)) { + // this is a bare package import, remap it and resolve it using regular node resolve + if (pattern) { + const result = await context.resolveId( + target.replace(/\*/g, subpath), + context.pkgURL.href + ); + return result ? url.pathToFileURL(result.location).href : null; + } + + const result = await context.resolveId(`${target}${subpath}`, context.pkgURL.href); + return result ? url.pathToFileURL(result.location).href : null; + } + throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); + } + + if (includesInvalidSegments(target, context.moduleDirs)) { + throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); + } + + const resolvedTarget = new URL(target, context.pkgURL); + if (!resolvedTarget.href.startsWith(context.pkgURL.href)) { + throw new InvalidPackageTargetError( + context, + `Resolved to ${resolvedTarget.href} which is outside package ${context.pkgURL.href}` + ); + } + + if (includesInvalidSegments(subpath, context.moduleDirs)) { + throw new InvalidModuleSpecifierError(context); + } + + if (pattern) { + return resolvedTarget.href.replace(/\*/g, subpath); + } + return new URL(subpath, resolvedTarget).href; + } + + if (Array.isArray(target)) { + let lastError; + for (const item of target) { + try { + const resolved = await resolvePackageTarget(context, { + target: item, + subpath, + pattern, + internal + }); + + // return if defined or null, but not undefined + if (resolved !== undefined) { + return resolved; + } + } catch (error) { + if (!(error instanceof InvalidPackageTargetError)) { + throw error; + } else { + lastError = error; + } + } + } + + if (lastError) { + throw lastError; + } + return null; + } + + if (target && typeof target === 'object') { + for (const [key, value] of Object.entries(target)) { + if (key === 'default' || context.conditions.includes(key)) { + const resolved = await resolvePackageTarget(context, { + target: value, + subpath, + pattern, + internal + }); + + // return if defined or null, but not undefined + if (resolved !== undefined) { + return resolved; + } + } + } + return undefined; + } + + if (target === null) { + return null; + } + + throw new InvalidPackageTargetError(context, `Invalid exports field.`); +} + +/* eslint-disable no-await-in-loop */ + +async function resolvePackageImportsExports(context, { matchKey, matchObj, internal }) { + if (!matchKey.endsWith('*') && matchKey in matchObj) { + const target = matchObj[matchKey]; + const resolved = await resolvePackageTarget(context, { target, subpath: '', internal }); + return resolved; + } + + const expansionKeys = Object.keys(matchObj) + .filter((k) => k.endsWith('/') || k.endsWith('*')) + .sort((a, b) => b.length - a.length); + + for (const expansionKey of expansionKeys) { + const prefix = expansionKey.substring(0, expansionKey.length - 1); + + if (expansionKey.endsWith('*') && matchKey.startsWith(prefix)) { + const target = matchObj[expansionKey]; + const subpath = matchKey.substring(expansionKey.length - 1); + const resolved = await resolvePackageTarget(context, { + target, + subpath, + pattern: true, + internal + }); + return resolved; + } + + if (matchKey.startsWith(expansionKey)) { + const target = matchObj[expansionKey]; + const subpath = matchKey.substring(expansionKey.length); + + const resolved = await resolvePackageTarget(context, { target, subpath, internal }); + return resolved; + } + } + + throw new InvalidModuleSpecifierError(context, internal); +} + +async function resolvePackageExports(context, subpath, exports) { + if (isMixedExports(exports)) { + throw new InvalidConfigurationError( + context, + 'All keys must either start with ./, or without one.' + ); + } + + if (subpath === '.') { + let mainExport; + // If exports is a String or Array, or an Object containing no keys starting with ".", then + if (typeof exports === 'string' || Array.isArray(exports) || isConditions(exports)) { + mainExport = exports; + } else if (isMappings(exports)) { + mainExport = exports['.']; + } + + if (mainExport) { + const resolved = await resolvePackageTarget(context, { target: mainExport, subpath: '' }); + if (resolved) { + return resolved; + } + } + } else if (isMappings(exports)) { + const resolvedMatch = await resolvePackageImportsExports(context, { + matchKey: subpath, + matchObj: exports + }); + + if (resolvedMatch) { + return resolvedMatch; + } + } + + throw new InvalidModuleSpecifierError(context); +} + +async function resolvePackageImports({ + importSpecifier, + importer, + moduleDirs, + conditions, + resolveId +}) { + const result = await findPackageJson(importer, moduleDirs); + if (!result) { + throw new Error(createBaseErrorMsg('. Could not find a parent package.json.')); + } + + const { pkgPath, pkgJsonPath, pkgJson } = result; + const pkgURL = url.pathToFileURL(`${pkgPath}/`); + const context = { + importer, + importSpecifier, + moduleDirs, + pkgURL, + pkgJsonPath, + conditions, + resolveId + }; + + const { imports } = pkgJson; + if (!imports) { + throw new InvalidModuleSpecifierError(context, true); + } + + if (importSpecifier === '#' || importSpecifier.startsWith('#/')) { + throw new InvalidModuleSpecifierError(context, true, 'Invalid import specifier.'); + } + + return resolvePackageImportsExports(context, { + matchKey: importSpecifier, + matchObj: imports, + internal: true + }); +} + +const resolveImportPath = util.promisify(resolve__default["default"]); +const readFile = util.promisify(fs__default["default"].readFile); + +async function getPackageJson(importer, pkgName, resolveOptions, moduleDirectories) { + if (importer) { + const selfPackageJsonResult = await findPackageJson(importer, moduleDirectories); + if (selfPackageJsonResult && selfPackageJsonResult.pkgJson.name === pkgName) { + // the referenced package name is the current package + return selfPackageJsonResult; + } + } + + try { + const pkgJsonPath = await resolveImportPath(`${pkgName}/package.json`, resolveOptions); + const pkgJson = JSON.parse(await readFile(pkgJsonPath, 'utf-8')); + return { pkgJsonPath, pkgJson, pkgPath: path.dirname(pkgJsonPath) }; + } catch (_) { + return null; + } +} + +async function resolveIdClassic({ + importSpecifier, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + let hasModuleSideEffects = () => null; + let hasPackageEntry = true; + let packageBrowserField = false; + let packageInfo; + + const filter = (pkg, pkgPath) => { + const info = getPackageInfo({ + cache: packageInfoCache, + extensions, + pkg, + pkgPath, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + }); + + ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); + + return info.cachedPkg; + }; + + const resolveOptions = { + basedir: baseDir, + readFile: readCachedFile, + isFile: isFileCached, + isDirectory: isDirCached, + extensions, + includeCoreModules: false, + moduleDirectory: moduleDirectories, + preserveSymlinks, + packageFilter: filter + }; + + let location; + try { + location = await resolveImportPath(importSpecifier, resolveOptions); + } catch (error) { + if (error.code !== 'MODULE_NOT_FOUND') { + throw error; + } + return null; + } + + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects, + hasPackageEntry, + packageBrowserField, + packageInfo + }; +} + +async function resolveWithExportMap({ + importer, + importSpecifier, + exportConditions, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + if (importSpecifier.startsWith('#')) { + // this is a package internal import, resolve using package imports field + const resolveResult = await resolvePackageImports({ + importSpecifier, + importer, + moduleDirs: moduleDirectories, + conditions: exportConditions, + resolveId(id /* , parent*/) { + return resolveIdClassic({ + importSpecifier: id, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories + }); + } + }); + + const location = url.fileURLToPath(resolveResult); + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects: () => null, + hasPackageEntry: true, + packageBrowserField: false, + // eslint-disable-next-line no-undefined + packageInfo: undefined + }; + } + + const pkgName = getPackageName(importSpecifier); + if (pkgName) { + // it's a bare import, find the package.json and resolve using package exports if available + let hasModuleSideEffects = () => null; + let hasPackageEntry = true; + let packageBrowserField = false; + let packageInfo; + + const filter = (pkg, pkgPath) => { + const info = getPackageInfo({ + cache: packageInfoCache, + extensions, + pkg, + pkgPath, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + }); + + ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); + + return info.cachedPkg; + }; + + const resolveOptions = { + basedir: baseDir, + readFile: readCachedFile, + isFile: isFileCached, + isDirectory: isDirCached, + extensions, + includeCoreModules: false, + moduleDirectory: moduleDirectories, + preserveSymlinks, + packageFilter: filter + }; + + const result = await getPackageJson(importer, pkgName, resolveOptions, moduleDirectories); + + if (result && result.pkgJson.exports) { + const { pkgJson, pkgJsonPath } = result; + const subpath = + pkgName === importSpecifier ? '.' : `.${importSpecifier.substring(pkgName.length)}`; + const pkgDr = pkgJsonPath.replace('package.json', ''); + const pkgURL = url.pathToFileURL(pkgDr); + + const context = { + importer, + importSpecifier, + moduleDirs: moduleDirectories, + pkgURL, + pkgJsonPath, + conditions: exportConditions + }; + const resolvedPackageExport = await resolvePackageExports(context, subpath, pkgJson.exports); + const location = url.fileURLToPath(resolvedPackageExport); + if (location) { + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects, + hasPackageEntry, + packageBrowserField, + packageInfo + }; + } + } + } + + return null; +} + +async function resolveWithClassic({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + for (let i = 0; i < importSpecifierList.length; i++) { + // eslint-disable-next-line no-await-in-loop + const result = await resolveIdClassic({ + importer, + importSpecifier: importSpecifierList[i], + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + + if (result) { + return result; + } + } + + return null; +} + +// Resolves to the module if found or `null`. +// The first import specificer will first be attempted with the exports algorithm. +// If this is unsuccesful because export maps are not being used, then all of `importSpecifierList` +// will be tried with the classic resolution algorithm +async function resolveImportSpecifiers({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + try { + const exportMapRes = await resolveWithExportMap({ + importer, + importSpecifier: importSpecifierList[0], + exportConditions, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + if (exportMapRes) return exportMapRes; + } catch (error) { + if (error instanceof ResolveError) { + warn(error); + return null; + } + throw error; + } + + // package has no imports or exports, use classic node resolve + return resolveWithClassic({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); +} + +/* eslint-disable no-param-reassign, no-shadow, no-undefined */ + +const builtins = new Set(builtinList__default["default"]); +const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; +const deepFreeze = (object) => { + Object.freeze(object); + + for (const value of Object.values(object)) { + if (typeof value === 'object' && !Object.isFrozen(value)) { + deepFreeze(value); + } + } + + return object; +}; + +const baseConditions = ['default', 'module']; +const baseConditionsEsm = [...baseConditions, 'import']; +const baseConditionsCjs = [...baseConditions, 'require']; +const defaults = { + dedupe: [], + // It's important that .mjs is listed before .js so that Rollup will interpret npm modules + // which deploy both ESM .mjs and CommonJS .js files as ESM. + extensions: ['.mjs', '.js', '.json', '.node'], + resolveOnly: [], + moduleDirectories: ['node_modules'], + ignoreSideEffectsForRoot: false +}; +const DEFAULTS = deepFreeze(deepMerge__default["default"]({}, defaults)); + +function nodeResolve(opts = {}) { + const { warnings } = handleDeprecatedOptions(opts); + + const options = { ...defaults, ...opts }; + const { extensions, jail, moduleDirectories, ignoreSideEffectsForRoot } = options; + const conditionsEsm = [...baseConditionsEsm, ...(options.exportConditions || [])]; + const conditionsCjs = [...baseConditionsCjs, ...(options.exportConditions || [])]; + const packageInfoCache = new Map(); + const idToPackageInfo = new Map(); + const mainFields = getMainFields(options); + const useBrowserOverrides = mainFields.indexOf('browser') !== -1; + const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; + const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; + const rootDir = path.resolve(options.rootDir || process.cwd()); + let { dedupe } = options; + let rollupOptions; + + if (typeof dedupe !== 'function') { + dedupe = (importee) => + options.dedupe.includes(importee) || options.dedupe.includes(getPackageName(importee)); + } + + const resolveOnly = options.resolveOnly.map((pattern) => { + if (pattern instanceof RegExp) { + return pattern; + } + const normalized = pattern.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); + return new RegExp(`^${normalized}$`); + }); + + const browserMapCache = new Map(); + let preserveSymlinks; + + const doResolveId = async (context, importee, importer, custom) => { + // strip query params from import + const [importPath, params] = importee.split('?'); + const importSuffix = `${params ? `?${params}` : ''}`; + importee = importPath; + + const baseDir = !importer || dedupe(importee) ? rootDir : path.dirname(importer); + + // https://github.com/defunctzombie/package-browser-field-spec + const browser = browserMapCache.get(importer); + if (useBrowserOverrides && browser) { + const resolvedImportee = path.resolve(baseDir, importee); + if (browser[importee] === false || browser[resolvedImportee] === false) { + return { id: ES6_BROWSER_EMPTY }; + } + const browserImportee = + (importee[0] !== '.' && browser[importee]) || + browser[resolvedImportee] || + browser[`${resolvedImportee}.js`] || + browser[`${resolvedImportee}.json`]; + if (browserImportee) { + importee = browserImportee; + } + } + + const parts = importee.split(/[/\\]/); + let id = parts.shift(); + let isRelativeImport = false; + + if (id[0] === '@' && parts.length > 0) { + // scoped packages + id += `/${parts.shift()}`; + } else if (id[0] === '.') { + // an import relative to the parent dir of the importer + id = path.resolve(baseDir, importee); + isRelativeImport = true; + } + + if ( + !isRelativeImport && + resolveOnly.length && + !resolveOnly.some((pattern) => pattern.test(id)) + ) { + if (normalizeInput(rollupOptions.input).includes(importee)) { + return null; + } + return false; + } + + const importSpecifierList = [importee]; + + if (importer === undefined && !importee[0].match(/^\.?\.?\//)) { + // For module graph roots (i.e. when importer is undefined), we + // need to handle 'path fragments` like `foo/bar` that are commonly + // found in rollup config files. If importee doesn't look like a + // relative or absolute path, we make it relative and attempt to + // resolve it. + importSpecifierList.push(`./${importee}`); + } + + // TypeScript files may import '.js' to refer to either '.ts' or '.tsx' + if (importer && importee.endsWith('.js')) { + for (const ext of ['.ts', '.tsx']) { + if (importer.endsWith(ext) && extensions.includes(ext)) { + importSpecifierList.push(importee.replace(/.js$/, ext)); + } + } + } + + const warn = (...args) => context.warn(...args); + const isRequire = custom && custom['node-resolve'] && custom['node-resolve'].isRequire; + const exportConditions = isRequire ? conditionsCjs : conditionsEsm; + + if (useBrowserOverrides && !exportConditions.includes('browser')) + exportConditions.push('browser'); + + const resolvedWithoutBuiltins = await resolveImportSpecifiers({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + + const importeeIsBuiltin = builtins.has(importee); + const resolved = + importeeIsBuiltin && preferBuiltins + ? { + packageInfo: undefined, + hasModuleSideEffects: () => null, + hasPackageEntry: true, + packageBrowserField: false + } + : resolvedWithoutBuiltins; + if (!resolved) { + return null; + } + + const { packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = resolved; + let { location } = resolved; + if (packageBrowserField) { + if (Object.prototype.hasOwnProperty.call(packageBrowserField, location)) { + if (!packageBrowserField[location]) { + browserMapCache.set(location, packageBrowserField); + return { id: ES6_BROWSER_EMPTY }; + } + location = packageBrowserField[location]; + } + browserMapCache.set(location, packageBrowserField); + } + + if (hasPackageEntry && !preserveSymlinks) { + const exists = await fileExists(location); + if (exists) { + location = await realpath(location); + } + } + + idToPackageInfo.set(location, packageInfo); + + if (hasPackageEntry) { + if (importeeIsBuiltin && preferBuiltins) { + if (!isPreferBuiltinsSet && resolvedWithoutBuiltins && resolved !== importee) { + context.warn( + `preferring built-in module '${importee}' over local alternative at '${resolvedWithoutBuiltins.location}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` + ); + } + return false; + } else if (jail && location.indexOf(path.normalize(jail.trim(path.sep))) !== 0) { + return null; + } + } + + if (options.modulesOnly && (await fileExists(location))) { + const code = await readFile$1(location, 'utf-8'); + if (isModule__default["default"](code)) { + return { + id: `${location}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(location) + }; + } + return null; + } + return { + id: `${location}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(location) + }; + }; + + return { + name: 'node-resolve', + + version, + + buildStart(options) { + rollupOptions = options; + + for (const warning of warnings) { + this.warn(warning); + } + + ({ preserveSymlinks } = options); + }, + + generateBundle() { + readCachedFile.clear(); + isFileCached.clear(); + isDirCached.clear(); + }, + + async resolveId(importee, importer, resolveOptions) { + if (importee === ES6_BROWSER_EMPTY) { + return importee; + } + // ignore IDs with null character, these belong to other plugins + if (/\0/.test(importee)) return null; + + if (/\0/.test(importer)) { + importer = undefined; + } + + const resolved = await doResolveId(this, importee, importer, resolveOptions.custom); + if (resolved) { + const resolvedResolved = await this.resolve( + resolved.id, + importer, + Object.assign({ skipSelf: true }, resolveOptions) + ); + if (resolvedResolved) { + // Handle plugins that manually make the result external + if (resolvedResolved.external) { + return false; + } + // Pass on meta information added by other plugins + return { ...resolved, meta: resolvedResolved.meta }; + } + } + return resolved; + }, + + load(importee) { + if (importee === ES6_BROWSER_EMPTY) { + return 'export default {};'; + } + return null; + }, + + getPackageInfoForId(id) { + return idToPackageInfo.get(id); + } + }; +} + +exports.DEFAULTS = DEFAULTS; +exports["default"] = nodeResolve; +exports.nodeResolve = nodeResolve; diff --git a/build/node_modules/@rollup/plugin-node-resolve/dist/es/index.js b/build/node_modules/@rollup/plugin-node-resolve/dist/es/index.js new file mode 100644 index 00000000..86f8f512 --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/dist/es/index.js @@ -0,0 +1,1184 @@ +import path, { dirname, resolve, extname, normalize, sep } from 'path'; +import builtinList from 'builtin-modules'; +import deepMerge from 'deepmerge'; +import isModule from 'is-module'; +import fs, { realpathSync } from 'fs'; +import { promisify } from 'util'; +import { pathToFileURL, fileURLToPath } from 'url'; +import resolve$1 from 'resolve'; +import { createFilter } from '@rollup/pluginutils'; + +var version = "13.1.3"; + +promisify(fs.access); +const readFile$1 = promisify(fs.readFile); +const realpath = promisify(fs.realpath); +const stat = promisify(fs.stat); + +async function fileExists(filePath) { + try { + const res = await stat(filePath); + return res.isFile(); + } catch { + return false; + } +} + +async function resolveSymlink(path) { + return (await fileExists(path)) ? realpath(path) : path; +} + +const onError = (error) => { + if (error.code === 'ENOENT') { + return false; + } + throw error; +}; + +const makeCache = (fn) => { + const cache = new Map(); + const wrapped = async (param, done) => { + if (cache.has(param) === false) { + cache.set( + param, + fn(param).catch((err) => { + cache.delete(param); + throw err; + }) + ); + } + + try { + const result = cache.get(param); + const value = await result; + return done(null, value); + } catch (error) { + return done(error); + } + }; + + wrapped.clear = () => cache.clear(); + + return wrapped; +}; + +const isDirCached = makeCache(async (file) => { + try { + const stats = await stat(file); + return stats.isDirectory(); + } catch (error) { + return onError(error); + } +}); + +const isFileCached = makeCache(async (file) => { + try { + const stats = await stat(file); + return stats.isFile(); + } catch (error) { + return onError(error); + } +}); + +const readCachedFile = makeCache(readFile$1); + +function handleDeprecatedOptions(opts) { + const warnings = []; + + if (opts.customResolveOptions) { + const { customResolveOptions } = opts; + if (customResolveOptions.moduleDirectory) { + // eslint-disable-next-line no-param-reassign + opts.moduleDirectories = Array.isArray(customResolveOptions.moduleDirectory) + ? customResolveOptions.moduleDirectory + : [customResolveOptions.moduleDirectory]; + + warnings.push( + 'node-resolve: The `customResolveOptions.moduleDirectory` option has been deprecated. Use `moduleDirectories`, which must be an array.' + ); + } + + if (customResolveOptions.preserveSymlinks) { + throw new Error( + 'node-resolve: `customResolveOptions.preserveSymlinks` is no longer an option. We now always use the rollup `preserveSymlinks` option.' + ); + } + + [ + 'basedir', + 'package', + 'extensions', + 'includeCoreModules', + 'readFile', + 'isFile', + 'isDirectory', + 'realpath', + 'packageFilter', + 'pathFilter', + 'paths', + 'packageIterator' + ].forEach((resolveOption) => { + if (customResolveOptions[resolveOption]) { + throw new Error( + `node-resolve: \`customResolveOptions.${resolveOption}\` is no longer an option. If you need this, please open an issue.` + ); + } + }); + } + + return { warnings }; +} + +// returns the imported package name for bare module imports +function getPackageName(id) { + if (id.startsWith('.') || id.startsWith('/')) { + return null; + } + + const split = id.split('/'); + + // @my-scope/my-package/foo.js -> @my-scope/my-package + // @my-scope/my-package -> @my-scope/my-package + if (split[0][0] === '@') { + return `${split[0]}/${split[1]}`; + } + + // my-package/foo.js -> my-package + // my-package -> my-package + return split[0]; +} + +function getMainFields(options) { + let mainFields; + if (options.mainFields) { + ({ mainFields } = options); + } else { + mainFields = ['module', 'main']; + } + if (options.browser && mainFields.indexOf('browser') === -1) { + return ['browser'].concat(mainFields); + } + if (!mainFields.length) { + throw new Error('Please ensure at least one `mainFields` value is specified'); + } + return mainFields; +} + +function getPackageInfo(options) { + const { + cache, + extensions, + pkg, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + } = options; + let { pkgPath } = options; + + if (cache.has(pkgPath)) { + return cache.get(pkgPath); + } + + // browserify/resolve doesn't realpath paths returned in its packageFilter callback + if (!preserveSymlinks) { + pkgPath = realpathSync(pkgPath); + } + + const pkgRoot = dirname(pkgPath); + + const packageInfo = { + // copy as we are about to munge the `main` field of `pkg`. + packageJson: { ...pkg }, + + // path to package.json file + packageJsonPath: pkgPath, + + // directory containing the package.json + root: pkgRoot, + + // which main field was used during resolution of this module (main, module, or browser) + resolvedMainField: 'main', + + // whether the browser map was used to resolve the entry point to this module + browserMappedMain: false, + + // the entry point of the module with respect to the selected main field and any + // relevant browser mappings. + resolvedEntryPoint: '' + }; + + let overriddenMain = false; + for (let i = 0; i < mainFields.length; i++) { + const field = mainFields[i]; + if (typeof pkg[field] === 'string') { + pkg.main = pkg[field]; + packageInfo.resolvedMainField = field; + overriddenMain = true; + break; + } + } + + const internalPackageInfo = { + cachedPkg: pkg, + hasModuleSideEffects: () => null, + hasPackageEntry: overriddenMain !== false || mainFields.indexOf('main') !== -1, + packageBrowserField: + useBrowserOverrides && + typeof pkg.browser === 'object' && + Object.keys(pkg.browser).reduce((browser, key) => { + let resolved = pkg.browser[key]; + if (resolved && resolved[0] === '.') { + resolved = resolve(pkgRoot, resolved); + } + /* eslint-disable no-param-reassign */ + browser[key] = resolved; + if (key[0] === '.') { + const absoluteKey = resolve(pkgRoot, key); + browser[absoluteKey] = resolved; + if (!extname(key)) { + extensions.reduce((subBrowser, ext) => { + subBrowser[absoluteKey + ext] = subBrowser[key]; + return subBrowser; + }, browser); + } + } + return browser; + }, {}), + packageInfo + }; + + const browserMap = internalPackageInfo.packageBrowserField; + if ( + useBrowserOverrides && + typeof pkg.browser === 'object' && + // eslint-disable-next-line no-prototype-builtins + browserMap.hasOwnProperty(pkg.main) + ) { + packageInfo.resolvedEntryPoint = browserMap[pkg.main]; + packageInfo.browserMappedMain = true; + } else { + // index.node is technically a valid default entrypoint as well... + packageInfo.resolvedEntryPoint = resolve(pkgRoot, pkg.main || 'index.js'); + packageInfo.browserMappedMain = false; + } + + if (!ignoreSideEffectsForRoot || rootDir !== pkgRoot) { + const packageSideEffects = pkg.sideEffects; + if (typeof packageSideEffects === 'boolean') { + internalPackageInfo.hasModuleSideEffects = () => packageSideEffects; + } else if (Array.isArray(packageSideEffects)) { + internalPackageInfo.hasModuleSideEffects = createFilter(packageSideEffects, null, { + resolve: pkgRoot + }); + } + } + + cache.set(pkgPath, internalPackageInfo); + return internalPackageInfo; +} + +function normalizeInput(input) { + if (Array.isArray(input)) { + return input; + } else if (typeof input === 'object') { + return Object.values(input); + } + + // otherwise it's a string + return [input]; +} + +/* eslint-disable no-await-in-loop */ + +function isModuleDir(current, moduleDirs) { + return moduleDirs.some((dir) => current.endsWith(dir)); +} + +async function findPackageJson(base, moduleDirs) { + const { root } = path.parse(base); + let current = base; + + while (current !== root && !isModuleDir(current, moduleDirs)) { + const pkgJsonPath = path.join(current, 'package.json'); + if (await fileExists(pkgJsonPath)) { + const pkgJsonString = fs.readFileSync(pkgJsonPath, 'utf-8'); + return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; + } + current = path.resolve(current, '..'); + } + return null; +} + +function isUrl(str) { + try { + return !!new URL(str); + } catch (_) { + return false; + } +} + +function isConditions(exports) { + return typeof exports === 'object' && Object.keys(exports).every((k) => !k.startsWith('.')); +} + +function isMappings(exports) { + return typeof exports === 'object' && !isConditions(exports); +} + +function isMixedExports(exports) { + const keys = Object.keys(exports); + return keys.some((k) => k.startsWith('.')) && keys.some((k) => !k.startsWith('.')); +} + +function createBaseErrorMsg(importSpecifier, importer) { + return `Could not resolve import "${importSpecifier}" in ${importer}`; +} + +function createErrorMsg(context, reason, internal) { + const { importSpecifier, importer, pkgJsonPath } = context; + const base = createBaseErrorMsg(importSpecifier, importer); + const field = internal ? 'imports' : 'exports'; + return `${base} using ${field} defined in ${pkgJsonPath}.${reason ? ` ${reason}` : ''}`; +} + +class ResolveError extends Error {} + +class InvalidConfigurationError extends ResolveError { + constructor(context, reason) { + super(createErrorMsg(context, `Invalid "exports" field. ${reason}`)); + } +} + +class InvalidModuleSpecifierError extends ResolveError { + constructor(context, internal, reason) { + super(createErrorMsg(context, reason, internal)); + } +} + +class InvalidPackageTargetError extends ResolveError { + constructor(context, reason) { + super(createErrorMsg(context, reason)); + } +} + +/* eslint-disable no-await-in-loop, no-undefined */ + +function includesInvalidSegments(pathSegments, moduleDirs) { + return pathSegments + .split('/') + .slice(1) + .some((t) => ['.', '..', ...moduleDirs].includes(t)); +} + +async function resolvePackageTarget(context, { target, subpath, pattern, internal }) { + if (typeof target === 'string') { + if (!pattern && subpath.length > 0 && !target.endsWith('/')) { + throw new InvalidModuleSpecifierError(context); + } + + if (!target.startsWith('./')) { + if (internal && !['/', '../'].some((p) => target.startsWith(p)) && !isUrl(target)) { + // this is a bare package import, remap it and resolve it using regular node resolve + if (pattern) { + const result = await context.resolveId( + target.replace(/\*/g, subpath), + context.pkgURL.href + ); + return result ? pathToFileURL(result.location).href : null; + } + + const result = await context.resolveId(`${target}${subpath}`, context.pkgURL.href); + return result ? pathToFileURL(result.location).href : null; + } + throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); + } + + if (includesInvalidSegments(target, context.moduleDirs)) { + throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); + } + + const resolvedTarget = new URL(target, context.pkgURL); + if (!resolvedTarget.href.startsWith(context.pkgURL.href)) { + throw new InvalidPackageTargetError( + context, + `Resolved to ${resolvedTarget.href} which is outside package ${context.pkgURL.href}` + ); + } + + if (includesInvalidSegments(subpath, context.moduleDirs)) { + throw new InvalidModuleSpecifierError(context); + } + + if (pattern) { + return resolvedTarget.href.replace(/\*/g, subpath); + } + return new URL(subpath, resolvedTarget).href; + } + + if (Array.isArray(target)) { + let lastError; + for (const item of target) { + try { + const resolved = await resolvePackageTarget(context, { + target: item, + subpath, + pattern, + internal + }); + + // return if defined or null, but not undefined + if (resolved !== undefined) { + return resolved; + } + } catch (error) { + if (!(error instanceof InvalidPackageTargetError)) { + throw error; + } else { + lastError = error; + } + } + } + + if (lastError) { + throw lastError; + } + return null; + } + + if (target && typeof target === 'object') { + for (const [key, value] of Object.entries(target)) { + if (key === 'default' || context.conditions.includes(key)) { + const resolved = await resolvePackageTarget(context, { + target: value, + subpath, + pattern, + internal + }); + + // return if defined or null, but not undefined + if (resolved !== undefined) { + return resolved; + } + } + } + return undefined; + } + + if (target === null) { + return null; + } + + throw new InvalidPackageTargetError(context, `Invalid exports field.`); +} + +/* eslint-disable no-await-in-loop */ + +async function resolvePackageImportsExports(context, { matchKey, matchObj, internal }) { + if (!matchKey.endsWith('*') && matchKey in matchObj) { + const target = matchObj[matchKey]; + const resolved = await resolvePackageTarget(context, { target, subpath: '', internal }); + return resolved; + } + + const expansionKeys = Object.keys(matchObj) + .filter((k) => k.endsWith('/') || k.endsWith('*')) + .sort((a, b) => b.length - a.length); + + for (const expansionKey of expansionKeys) { + const prefix = expansionKey.substring(0, expansionKey.length - 1); + + if (expansionKey.endsWith('*') && matchKey.startsWith(prefix)) { + const target = matchObj[expansionKey]; + const subpath = matchKey.substring(expansionKey.length - 1); + const resolved = await resolvePackageTarget(context, { + target, + subpath, + pattern: true, + internal + }); + return resolved; + } + + if (matchKey.startsWith(expansionKey)) { + const target = matchObj[expansionKey]; + const subpath = matchKey.substring(expansionKey.length); + + const resolved = await resolvePackageTarget(context, { target, subpath, internal }); + return resolved; + } + } + + throw new InvalidModuleSpecifierError(context, internal); +} + +async function resolvePackageExports(context, subpath, exports) { + if (isMixedExports(exports)) { + throw new InvalidConfigurationError( + context, + 'All keys must either start with ./, or without one.' + ); + } + + if (subpath === '.') { + let mainExport; + // If exports is a String or Array, or an Object containing no keys starting with ".", then + if (typeof exports === 'string' || Array.isArray(exports) || isConditions(exports)) { + mainExport = exports; + } else if (isMappings(exports)) { + mainExport = exports['.']; + } + + if (mainExport) { + const resolved = await resolvePackageTarget(context, { target: mainExport, subpath: '' }); + if (resolved) { + return resolved; + } + } + } else if (isMappings(exports)) { + const resolvedMatch = await resolvePackageImportsExports(context, { + matchKey: subpath, + matchObj: exports + }); + + if (resolvedMatch) { + return resolvedMatch; + } + } + + throw new InvalidModuleSpecifierError(context); +} + +async function resolvePackageImports({ + importSpecifier, + importer, + moduleDirs, + conditions, + resolveId +}) { + const result = await findPackageJson(importer, moduleDirs); + if (!result) { + throw new Error(createBaseErrorMsg('. Could not find a parent package.json.')); + } + + const { pkgPath, pkgJsonPath, pkgJson } = result; + const pkgURL = pathToFileURL(`${pkgPath}/`); + const context = { + importer, + importSpecifier, + moduleDirs, + pkgURL, + pkgJsonPath, + conditions, + resolveId + }; + + const { imports } = pkgJson; + if (!imports) { + throw new InvalidModuleSpecifierError(context, true); + } + + if (importSpecifier === '#' || importSpecifier.startsWith('#/')) { + throw new InvalidModuleSpecifierError(context, true, 'Invalid import specifier.'); + } + + return resolvePackageImportsExports(context, { + matchKey: importSpecifier, + matchObj: imports, + internal: true + }); +} + +const resolveImportPath = promisify(resolve$1); +const readFile = promisify(fs.readFile); + +async function getPackageJson(importer, pkgName, resolveOptions, moduleDirectories) { + if (importer) { + const selfPackageJsonResult = await findPackageJson(importer, moduleDirectories); + if (selfPackageJsonResult && selfPackageJsonResult.pkgJson.name === pkgName) { + // the referenced package name is the current package + return selfPackageJsonResult; + } + } + + try { + const pkgJsonPath = await resolveImportPath(`${pkgName}/package.json`, resolveOptions); + const pkgJson = JSON.parse(await readFile(pkgJsonPath, 'utf-8')); + return { pkgJsonPath, pkgJson, pkgPath: dirname(pkgJsonPath) }; + } catch (_) { + return null; + } +} + +async function resolveIdClassic({ + importSpecifier, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + let hasModuleSideEffects = () => null; + let hasPackageEntry = true; + let packageBrowserField = false; + let packageInfo; + + const filter = (pkg, pkgPath) => { + const info = getPackageInfo({ + cache: packageInfoCache, + extensions, + pkg, + pkgPath, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + }); + + ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); + + return info.cachedPkg; + }; + + const resolveOptions = { + basedir: baseDir, + readFile: readCachedFile, + isFile: isFileCached, + isDirectory: isDirCached, + extensions, + includeCoreModules: false, + moduleDirectory: moduleDirectories, + preserveSymlinks, + packageFilter: filter + }; + + let location; + try { + location = await resolveImportPath(importSpecifier, resolveOptions); + } catch (error) { + if (error.code !== 'MODULE_NOT_FOUND') { + throw error; + } + return null; + } + + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects, + hasPackageEntry, + packageBrowserField, + packageInfo + }; +} + +async function resolveWithExportMap({ + importer, + importSpecifier, + exportConditions, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + if (importSpecifier.startsWith('#')) { + // this is a package internal import, resolve using package imports field + const resolveResult = await resolvePackageImports({ + importSpecifier, + importer, + moduleDirs: moduleDirectories, + conditions: exportConditions, + resolveId(id /* , parent*/) { + return resolveIdClassic({ + importSpecifier: id, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories + }); + } + }); + + const location = fileURLToPath(resolveResult); + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects: () => null, + hasPackageEntry: true, + packageBrowserField: false, + // eslint-disable-next-line no-undefined + packageInfo: undefined + }; + } + + const pkgName = getPackageName(importSpecifier); + if (pkgName) { + // it's a bare import, find the package.json and resolve using package exports if available + let hasModuleSideEffects = () => null; + let hasPackageEntry = true; + let packageBrowserField = false; + let packageInfo; + + const filter = (pkg, pkgPath) => { + const info = getPackageInfo({ + cache: packageInfoCache, + extensions, + pkg, + pkgPath, + mainFields, + preserveSymlinks, + useBrowserOverrides, + rootDir, + ignoreSideEffectsForRoot + }); + + ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); + + return info.cachedPkg; + }; + + const resolveOptions = { + basedir: baseDir, + readFile: readCachedFile, + isFile: isFileCached, + isDirectory: isDirCached, + extensions, + includeCoreModules: false, + moduleDirectory: moduleDirectories, + preserveSymlinks, + packageFilter: filter + }; + + const result = await getPackageJson(importer, pkgName, resolveOptions, moduleDirectories); + + if (result && result.pkgJson.exports) { + const { pkgJson, pkgJsonPath } = result; + const subpath = + pkgName === importSpecifier ? '.' : `.${importSpecifier.substring(pkgName.length)}`; + const pkgDr = pkgJsonPath.replace('package.json', ''); + const pkgURL = pathToFileURL(pkgDr); + + const context = { + importer, + importSpecifier, + moduleDirs: moduleDirectories, + pkgURL, + pkgJsonPath, + conditions: exportConditions + }; + const resolvedPackageExport = await resolvePackageExports(context, subpath, pkgJson.exports); + const location = fileURLToPath(resolvedPackageExport); + if (location) { + return { + location: preserveSymlinks ? location : await resolveSymlink(location), + hasModuleSideEffects, + hasPackageEntry, + packageBrowserField, + packageInfo + }; + } + } + } + + return null; +} + +async function resolveWithClassic({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + for (let i = 0; i < importSpecifierList.length; i++) { + // eslint-disable-next-line no-await-in-loop + const result = await resolveIdClassic({ + importer, + importSpecifier: importSpecifierList[i], + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + + if (result) { + return result; + } + } + + return null; +} + +// Resolves to the module if found or `null`. +// The first import specificer will first be attempted with the exports algorithm. +// If this is unsuccesful because export maps are not being used, then all of `importSpecifierList` +// will be tried with the classic resolution algorithm +async function resolveImportSpecifiers({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot +}) { + try { + const exportMapRes = await resolveWithExportMap({ + importer, + importSpecifier: importSpecifierList[0], + exportConditions, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + if (exportMapRes) return exportMapRes; + } catch (error) { + if (error instanceof ResolveError) { + warn(error); + return null; + } + throw error; + } + + // package has no imports or exports, use classic node resolve + return resolveWithClassic({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); +} + +/* eslint-disable no-param-reassign, no-shadow, no-undefined */ + +const builtins = new Set(builtinList); +const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; +const deepFreeze = (object) => { + Object.freeze(object); + + for (const value of Object.values(object)) { + if (typeof value === 'object' && !Object.isFrozen(value)) { + deepFreeze(value); + } + } + + return object; +}; + +const baseConditions = ['default', 'module']; +const baseConditionsEsm = [...baseConditions, 'import']; +const baseConditionsCjs = [...baseConditions, 'require']; +const defaults = { + dedupe: [], + // It's important that .mjs is listed before .js so that Rollup will interpret npm modules + // which deploy both ESM .mjs and CommonJS .js files as ESM. + extensions: ['.mjs', '.js', '.json', '.node'], + resolveOnly: [], + moduleDirectories: ['node_modules'], + ignoreSideEffectsForRoot: false +}; +const DEFAULTS = deepFreeze(deepMerge({}, defaults)); + +function nodeResolve(opts = {}) { + const { warnings } = handleDeprecatedOptions(opts); + + const options = { ...defaults, ...opts }; + const { extensions, jail, moduleDirectories, ignoreSideEffectsForRoot } = options; + const conditionsEsm = [...baseConditionsEsm, ...(options.exportConditions || [])]; + const conditionsCjs = [...baseConditionsCjs, ...(options.exportConditions || [])]; + const packageInfoCache = new Map(); + const idToPackageInfo = new Map(); + const mainFields = getMainFields(options); + const useBrowserOverrides = mainFields.indexOf('browser') !== -1; + const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; + const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; + const rootDir = resolve(options.rootDir || process.cwd()); + let { dedupe } = options; + let rollupOptions; + + if (typeof dedupe !== 'function') { + dedupe = (importee) => + options.dedupe.includes(importee) || options.dedupe.includes(getPackageName(importee)); + } + + const resolveOnly = options.resolveOnly.map((pattern) => { + if (pattern instanceof RegExp) { + return pattern; + } + const normalized = pattern.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); + return new RegExp(`^${normalized}$`); + }); + + const browserMapCache = new Map(); + let preserveSymlinks; + + const doResolveId = async (context, importee, importer, custom) => { + // strip query params from import + const [importPath, params] = importee.split('?'); + const importSuffix = `${params ? `?${params}` : ''}`; + importee = importPath; + + const baseDir = !importer || dedupe(importee) ? rootDir : dirname(importer); + + // https://github.com/defunctzombie/package-browser-field-spec + const browser = browserMapCache.get(importer); + if (useBrowserOverrides && browser) { + const resolvedImportee = resolve(baseDir, importee); + if (browser[importee] === false || browser[resolvedImportee] === false) { + return { id: ES6_BROWSER_EMPTY }; + } + const browserImportee = + (importee[0] !== '.' && browser[importee]) || + browser[resolvedImportee] || + browser[`${resolvedImportee}.js`] || + browser[`${resolvedImportee}.json`]; + if (browserImportee) { + importee = browserImportee; + } + } + + const parts = importee.split(/[/\\]/); + let id = parts.shift(); + let isRelativeImport = false; + + if (id[0] === '@' && parts.length > 0) { + // scoped packages + id += `/${parts.shift()}`; + } else if (id[0] === '.') { + // an import relative to the parent dir of the importer + id = resolve(baseDir, importee); + isRelativeImport = true; + } + + if ( + !isRelativeImport && + resolveOnly.length && + !resolveOnly.some((pattern) => pattern.test(id)) + ) { + if (normalizeInput(rollupOptions.input).includes(importee)) { + return null; + } + return false; + } + + const importSpecifierList = [importee]; + + if (importer === undefined && !importee[0].match(/^\.?\.?\//)) { + // For module graph roots (i.e. when importer is undefined), we + // need to handle 'path fragments` like `foo/bar` that are commonly + // found in rollup config files. If importee doesn't look like a + // relative or absolute path, we make it relative and attempt to + // resolve it. + importSpecifierList.push(`./${importee}`); + } + + // TypeScript files may import '.js' to refer to either '.ts' or '.tsx' + if (importer && importee.endsWith('.js')) { + for (const ext of ['.ts', '.tsx']) { + if (importer.endsWith(ext) && extensions.includes(ext)) { + importSpecifierList.push(importee.replace(/.js$/, ext)); + } + } + } + + const warn = (...args) => context.warn(...args); + const isRequire = custom && custom['node-resolve'] && custom['node-resolve'].isRequire; + const exportConditions = isRequire ? conditionsCjs : conditionsEsm; + + if (useBrowserOverrides && !exportConditions.includes('browser')) + exportConditions.push('browser'); + + const resolvedWithoutBuiltins = await resolveImportSpecifiers({ + importer, + importSpecifierList, + exportConditions, + warn, + packageInfoCache, + extensions, + mainFields, + preserveSymlinks, + useBrowserOverrides, + baseDir, + moduleDirectories, + rootDir, + ignoreSideEffectsForRoot + }); + + const importeeIsBuiltin = builtins.has(importee); + const resolved = + importeeIsBuiltin && preferBuiltins + ? { + packageInfo: undefined, + hasModuleSideEffects: () => null, + hasPackageEntry: true, + packageBrowserField: false + } + : resolvedWithoutBuiltins; + if (!resolved) { + return null; + } + + const { packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = resolved; + let { location } = resolved; + if (packageBrowserField) { + if (Object.prototype.hasOwnProperty.call(packageBrowserField, location)) { + if (!packageBrowserField[location]) { + browserMapCache.set(location, packageBrowserField); + return { id: ES6_BROWSER_EMPTY }; + } + location = packageBrowserField[location]; + } + browserMapCache.set(location, packageBrowserField); + } + + if (hasPackageEntry && !preserveSymlinks) { + const exists = await fileExists(location); + if (exists) { + location = await realpath(location); + } + } + + idToPackageInfo.set(location, packageInfo); + + if (hasPackageEntry) { + if (importeeIsBuiltin && preferBuiltins) { + if (!isPreferBuiltinsSet && resolvedWithoutBuiltins && resolved !== importee) { + context.warn( + `preferring built-in module '${importee}' over local alternative at '${resolvedWithoutBuiltins.location}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` + ); + } + return false; + } else if (jail && location.indexOf(normalize(jail.trim(sep))) !== 0) { + return null; + } + } + + if (options.modulesOnly && (await fileExists(location))) { + const code = await readFile$1(location, 'utf-8'); + if (isModule(code)) { + return { + id: `${location}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(location) + }; + } + return null; + } + return { + id: `${location}${importSuffix}`, + moduleSideEffects: hasModuleSideEffects(location) + }; + }; + + return { + name: 'node-resolve', + + version, + + buildStart(options) { + rollupOptions = options; + + for (const warning of warnings) { + this.warn(warning); + } + + ({ preserveSymlinks } = options); + }, + + generateBundle() { + readCachedFile.clear(); + isFileCached.clear(); + isDirCached.clear(); + }, + + async resolveId(importee, importer, resolveOptions) { + if (importee === ES6_BROWSER_EMPTY) { + return importee; + } + // ignore IDs with null character, these belong to other plugins + if (/\0/.test(importee)) return null; + + if (/\0/.test(importer)) { + importer = undefined; + } + + const resolved = await doResolveId(this, importee, importer, resolveOptions.custom); + if (resolved) { + const resolvedResolved = await this.resolve( + resolved.id, + importer, + Object.assign({ skipSelf: true }, resolveOptions) + ); + if (resolvedResolved) { + // Handle plugins that manually make the result external + if (resolvedResolved.external) { + return false; + } + // Pass on meta information added by other plugins + return { ...resolved, meta: resolvedResolved.meta }; + } + } + return resolved; + }, + + load(importee) { + if (importee === ES6_BROWSER_EMPTY) { + return 'export default {};'; + } + return null; + }, + + getPackageInfoForId(id) { + return idToPackageInfo.get(id); + } + }; +} + +export { DEFAULTS, nodeResolve as default, nodeResolve }; diff --git a/build/node_modules/@rollup/plugin-node-resolve/dist/es/package.json b/build/node_modules/@rollup/plugin-node-resolve/dist/es/package.json new file mode 100644 index 00000000..7c34deb5 --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/dist/es/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/build/node_modules/@rollup/plugin-node-resolve/package.json b/build/node_modules/@rollup/plugin-node-resolve/package.json new file mode 100644 index 00000000..98618514 --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/package.json @@ -0,0 +1,119 @@ +{ + "_from": "@rollup/plugin-node-resolve@^13.1.3", + "_id": "@rollup/plugin-node-resolve@13.1.3", + "_inBundle": false, + "_integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "_location": "/@rollup/plugin-node-resolve", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@rollup/plugin-node-resolve@^13.1.3", + "name": "@rollup/plugin-node-resolve", + "escapedName": "@rollup%2fplugin-node-resolve", + "scope": "@rollup", + "rawSpec": "^13.1.3", + "saveSpec": null, + "fetchSpec": "^13.1.3" + }, + "_requiredBy": [ + "#DEV:/" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "_shasum": "2ed277fb3ad98745424c1d2ba152484508a92d79", + "_spec": "@rollup/plugin-node-resolve@^13.1.3", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", + "author": { + "name": "Rich Harris", + "email": "richard.a.harris@gmail.com" + }, + "ava": { + "babel": { + "compileEnhancements": false + }, + "files": [ + "!**/fixtures/**", + "!**/helpers/**", + "!**/recipes/**", + "!**/types.ts" + ] + }, + "bugs": { + "url": "https://github.com/rollup/plugins/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "deprecated": false, + "description": "Locate and bundle third-party dependencies in node_modules", + "devDependencies": { + "@babel/core": "^7.10.5", + "@babel/plugin-transform-typescript": "^7.10.5", + "@rollup/plugin-babel": "^5.1.0", + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-json": "^4.1.0", + "es5-ext": "^0.10.53", + "rollup": "^2.58.0", + "source-map": "^0.7.3", + "string-capitalize": "^1.0.1" + }, + "engines": { + "node": ">= 10.0.0" + }, + "exports": { + "require": "./dist/cjs/index.js", + "import": "./dist/es/index.js" + }, + "files": [ + "dist", + "types", + "README.md", + "LICENSE" + ], + "homepage": "https://github.com/rollup/plugins/tree/master/packages/node-resolve/#readme", + "keywords": [ + "rollup", + "plugin", + "es2015", + "npm", + "modules" + ], + "license": "MIT", + "main": "./dist/cjs/index.js", + "module": "./dist/es/index.js", + "name": "@rollup/plugin-node-resolve", + "peerDependencies": { + "rollup": "^2.42.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "url": "git+https://github.com/rollup/plugins.git", + "directory": "packages/node-resolve" + }, + "scripts": { + "build": "rollup -c", + "ci:coverage": "nyc pnpm test && nyc report --reporter=text-lcov > coverage.lcov", + "ci:lint": "pnpm build && pnpm lint", + "ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}", + "ci:test": "pnpm test -- --verbose && pnpm test:ts", + "prebuild": "del-cli dist", + "prepare": "if [ ! -d 'dist' ]; then pnpm build; fi", + "prepublishOnly": "pnpm build", + "prerelease": "pnpm build", + "pretest": "pnpm build", + "release": "pnpm plugin:release --workspace-root -- --pkg $npm_package_name", + "test": "ava && pnpm test:ts", + "test:ts": "tsc types/index.d.ts test/types.ts --noEmit" + }, + "type": "commonjs", + "types": "types/index.d.ts", + "version": "13.1.3" +} diff --git a/build/node_modules/@rollup/plugin-node-resolve/types/index.d.ts b/build/node_modules/@rollup/plugin-node-resolve/types/index.d.ts new file mode 100755 index 00000000..8d1f440d --- /dev/null +++ b/build/node_modules/@rollup/plugin-node-resolve/types/index.d.ts @@ -0,0 +1,98 @@ +import { Plugin } from 'rollup'; + +export const DEFAULTS: { + customResolveOptions: {}; + dedupe: []; + extensions: ['.mjs', '.js', '.json', '.node']; + resolveOnly: []; +}; + +export interface RollupNodeResolveOptions { + /** + * Additional conditions of the package.json exports field to match when resolving modules. + * By default, this plugin looks for the `'default', 'module', 'import']` conditions when resolving imports. + * + * When using `@rollup/plugin-commonjs` v16 or higher, this plugin will use the + * `['default', 'module', 'import']` conditions when resolving require statements. + * + * Setting this option will add extra conditions on top of the default conditions. + * See https://nodejs.org/api/packages.html#packages_conditional_exports for more information. + */ + exportConditions?: string[]; + + /** + * If `true`, instructs the plugin to use the `"browser"` property in `package.json` + * files to specify alternative files to load for bundling. This is useful when + * bundling for a browser environment. Alternatively, a value of `'browser'` can be + * added to the `mainFields` option. If `false`, any `"browser"` properties in + * package files will be ignored. This option takes precedence over `mainFields`. + * @default false + */ + browser?: boolean; + + /** + * One or more directories in which to recursively look for modules. + * @default ['node_modules'] + */ + moduleDirectories?: string[]; + + /** + * An `Array` of modules names, which instructs the plugin to force resolving for the + * specified modules to the root `node_modules`. Helps to prevent bundling the same + * package multiple times if package is imported from dependencies. + */ + dedupe?: string[] | ((importee: string) => boolean); + + /** + * Specifies the extensions of files that the plugin will operate on. + * @default [ '.mjs', '.js', '.json', '.node' ] + */ + extensions?: readonly string[]; + + /** + * Locks the module search within specified path (e.g. chroot). Modules defined + * outside this path will be marked as external. + * @default '/' + */ + jail?: string; + + /** + * Specifies the properties to scan within a `package.json`, used to determine the + * bundle entry point. + * @default ['module', 'main'] + */ + mainFields?: readonly string[]; + + /** + * If `true`, inspect resolved files to assert that they are ES2015 modules. + * @default false + */ + modulesOnly?: boolean; + + /** + * If `true`, the plugin will prefer built-in modules (e.g. `fs`, `path`). If `false`, + * the plugin will look for locally installed modules of the same name. + * @default true + */ + preferBuiltins?: boolean; + + /** + * An `Array` which instructs the plugin to limit module resolution to those whose + * names match patterns in the array. + * @default [] + */ + resolveOnly?: ReadonlyArray | null; + + /** + * Specifies the root directory from which to resolve modules. Typically used when + * resolving entry-point imports, and when resolving deduplicated modules. + * @default process.cwd() + */ + rootDir?: string; +} + +/** + * Locate modules using the Node resolution algorithm, for using third party modules in node_modules + */ +export function nodeResolve(options?: RollupNodeResolveOptions): Plugin; +export default nodeResolve; diff --git a/build/node_modules/@rollup/pluginutils/CHANGELOG.md b/build/node_modules/@rollup/pluginutils/CHANGELOG.md new file mode 100755 index 00000000..d286908b --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/CHANGELOG.md @@ -0,0 +1,315 @@ +# @rollup/pluginutils ChangeLog + +## v3.1.0 + +_2020-06-05_ + +### Bugfixes + +- fix: resolve relative paths starting with "./" (#180) + +### Features + +- feat: add native node es modules support (#419) + +### Updates + +- refactor: replace micromatch with picomatch. (#306) +- chore: Don't bundle micromatch (#220) +- chore: add missing typescript devDep (238b140) +- chore: Use readonly arrays, add TSDoc (#187) +- chore: Use typechecking (2ae08eb) + +## v3.0.10 + +_2020-05-02_ + +### Bugfixes + +- fix: resolve relative paths starting with "./" (#180) + +### Updates + +- refactor: replace micromatch with picomatch. (#306) +- chore: Don't bundle micromatch (#220) +- chore: add missing typescript devDep (238b140) +- chore: Use readonly arrays, add TSDoc (#187) +- chore: Use typechecking (2ae08eb) + +## v3.0.9 + +_2020-04-12_ + +### Updates + +- chore: support Rollup v2 + +## v3.0.8 + +_2020-02-01_ + +### Bugfixes + +- fix: resolve relative paths starting with "./" (#180) + +### Updates + +- chore: add missing typescript devDep (238b140) +- chore: Use readonly arrays, add TSDoc (#187) +- chore: Use typechecking (2ae08eb) + +## v3.0.7 + +_2020-02-01_ + +### Bugfixes + +- fix: resolve relative paths starting with "./" (#180) + +### Updates + +- chore: Use readonly arrays, add TSDoc (#187) +- chore: Use typechecking (2ae08eb) + +## v3.0.6 + +_2020-01-27_ + +### Bugfixes + +- fix: resolve relative paths starting with "./" (#180) + +## v3.0.5 + +_2020-01-25_ + +### Bugfixes + +- fix: bring back named exports (#176) + +## v3.0.4 + +_2020-01-10_ + +### Bugfixes + +- fix: keep for(const..) out of scope (#151) + +## v3.0.3 + +_2020-01-07_ + +### Bugfixes + +- fix: createFilter Windows regression (#141) + +### Updates + +- test: fix windows path failure (0a0de65) +- chore: fix test script (5eae320) + +## v3.0.2 + +_2020-01-04_ + +### Bugfixes + +- fix: makeLegalIdentifier - potentially unsafe input for blacklisted identifier (#116) + +### Updates + +- docs: Fix documented type of createFilter's include/exclude (#123) +- chore: update minor linting correction (bcbf9d2) + +## 3.0.1 + +- fix: Escape glob characters in folder (#84) + +## 3.0.0 + +_2019-11-25_ + +- **Breaking:** Minimum compatible Rollup version is 1.20.0 +- **Breaking:** Minimum supported Node version is 8.0.0 +- Published as @rollup/plugins-image + +## 2.8.2 + +_2019-09-13_ + +- Handle optional catch parameter in attachScopes ([#70](https://github.com/rollup/rollup-pluginutils/pulls/70)) + +## 2.8.1 + +_2019-06-04_ + +- Support serialization of many edge cases ([#64](https://github.com/rollup/rollup-pluginutils/issues/64)) + +## 2.8.0 + +_2019-05-30_ + +- Bundle updated micromatch dependency ([#60](https://github.com/rollup/rollup-pluginutils/issues/60)) + +## 2.7.1 + +_2019-05-17_ + +- Do not ignore files with a leading "." in createFilter ([#62](https://github.com/rollup/rollup-pluginutils/issues/62)) + +## 2.7.0 + +_2019-05-15_ + +- Add `resolve` option to createFilter ([#59](https://github.com/rollup/rollup-pluginutils/issues/59)) + +## 2.6.0 + +_2019-04-04_ + +- Add `extractAssignedNames` ([#59](https://github.com/rollup/rollup-pluginutils/issues/59)) +- Provide dedicated TypeScript typings file ([#58](https://github.com/rollup/rollup-pluginutils/issues/58)) + +## 2.5.0 + +_2019-03-18_ + +- Generalize dataToEsm type ([#55](https://github.com/rollup/rollup-pluginutils/issues/55)) +- Handle empty keys in dataToEsm ([#56](https://github.com/rollup/rollup-pluginutils/issues/56)) + +## 2.4.1 + +_2019-02-16_ + +- Remove unnecessary dependency + +## 2.4.0 + +_2019-02-16_ +Update dependencies to solve micromatch vulnerability ([#53](https://github.com/rollup/rollup-pluginutils/issues/53)) + +## 2.3.3 + +_2018-09-19_ + +- Revert micromatch update ([#43](https://github.com/rollup/rollup-pluginutils/issues/43)) + +## 2.3.2 + +_2018-09-18_ + +- Bumb micromatch dependency ([#36](https://github.com/rollup/rollup-pluginutils/issues/36)) +- Bumb dependencies ([#41](https://github.com/rollup/rollup-pluginutils/issues/41)) +- Split up tests ([#40](https://github.com/rollup/rollup-pluginutils/issues/40)) + +## 2.3.1 + +_2018-08-06_ + +- Fixed ObjectPattern scope in attachScopes to recognise { ...rest } syntax ([#37](https://github.com/rollup/rollup-pluginutils/issues/37)) + +## 2.3.0 + +_2018-05-21_ + +- Add option to not generate named exports ([#32](https://github.com/rollup/rollup-pluginutils/issues/32)) + +## 2.2.1 + +_2018-05-21_ + +- Support `null` serialization ([#34](https://github.com/rollup/rollup-pluginutils/issues/34)) + +## 2.2.0 + +_2018-05-11_ + +- Improve white-space handling in `dataToEsm` and add `prepare` script ([#31](https://github.com/rollup/rollup-pluginutils/issues/31)) + +## 2.1.1 + +_2018-05-09_ + +- Update dependencies + +## 2.1.0 + +_2018-05-08_ + +- Add `dataToEsm` helper to create named exports from objects ([#29](https://github.com/rollup/rollup-pluginutils/issues/29)) +- Support literal keys in object patterns ([#27](https://github.com/rollup/rollup-pluginutils/issues/27)) +- Support function declarations without id in `attachScopes` ([#28](https://github.com/rollup/rollup-pluginutils/issues/28)) + +## 2.0.1 + +_2017-01-03_ + +- Don't add extension to file with trailing dot ([#14](https://github.com/rollup/rollup-pluginutils/issues/14)) + +## 2.0.0 + +_2017-01-03_ + +- Use `micromatch` instead of `minimatch` ([#19](https://github.com/rollup/rollup-pluginutils/issues/19)) +- Allow `createFilter` to take regexes ([#5](https://github.com/rollup/rollup-pluginutils/issues/5)) + +## 1.5.2 + +_2016-08-29_ + +- Treat `arguments` as a reserved word ([#10](https://github.com/rollup/rollup-pluginutils/issues/10)) + +## 1.5.1 + +_2016-06-24_ + +- Add all declarators in a var declaration to scope, not just the first + +## 1.5.0 + +_2016-06-07_ + +- Exclude IDs with null character (`\0`) + +## 1.4.0 + +_2016-06-07_ + +- Workaround minimatch issue ([#6](https://github.com/rollup/rollup-pluginutils/pull/6)) +- Exclude non-string IDs in `createFilter` + +## 1.3.1 + +_2015-12-16_ + +- Build with Rollup directly, rather than via Gobble + +## 1.3.0 + +_2015-12-16_ + +- Use correct path separator on Windows + +## 1.2.0 + +_2015-11-02_ + +- Add `attachScopes` and `makeLegalIdentifier` + +## 1.1.0 + +2015-10-24\* + +- Add `addExtension` function + +## 1.0.1 + +_2015-10-24_ + +- Include dist files in package + +## 1.0.0 + +_2015-10-24_ + +- First release diff --git a/build/node_modules/@rollup/pluginutils/LICENSE b/build/node_modules/@rollup/pluginutils/LICENSE new file mode 100644 index 00000000..5e46702c --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/@rollup/pluginutils/README.md b/build/node_modules/@rollup/pluginutils/README.md new file mode 100755 index 00000000..2a103e6b --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/README.md @@ -0,0 +1,237 @@ +[npm]: https://img.shields.io/npm/v/@rollup/pluginutils +[npm-url]: https://www.npmjs.com/package/@rollup/pluginutils +[size]: https://packagephobia.now.sh/badge?p=@rollup/pluginutils +[size-url]: https://packagephobia.now.sh/result?p=@rollup/pluginutils + +[![npm][npm]][npm-url] +[![size][size]][size-url] +[![libera manifesto](https://img.shields.io/badge/libera-manifesto-lightgrey.svg)](https://liberamanifesto.com) + +# @rollup/pluginutils + +A set of utility functions commonly used by 🍣 Rollup plugins. + +## Requirements + +This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+. + +## Install + +Using npm: + +```console +npm install @rollup/pluginutils --save-dev +``` + +## Usage + +```js +import utils from '@rollup/pluginutils'; +//... +``` + +## API + +Available utility functions are listed below: + +_Note: Parameter names immediately followed by a `?` indicate that the parameter is optional._ + +### addExtension + +Adds an extension to a module ID if one does not exist. + +Parameters: `(filename: String, ext?: String)`
+Returns: `String` + +```js +import { addExtension } from '@rollup/pluginutils'; + +export default function myPlugin(options = {}) { + return { + resolveId(code, id) { + // only adds an extension if there isn't one already + id = addExtension(id); // `foo` -> `foo.js`, `foo.js -> foo.js` + id = addExtension(id, '.myext'); // `foo` -> `foo.myext`, `foo.js -> `foo.js` + } + }; +} +``` + +### attachScopes + +Attaches `Scope` objects to the relevant nodes of an AST. Each `Scope` object has a `scope.contains(name)` method that returns `true` if a given name is defined in the current scope or a parent scope. + +Parameters: `(ast: Node, propertyName?: String)`
+Returns: `Object` + +See [rollup-plugin-inject](https://github.com/rollup/rollup-plugin-inject) or [rollup-plugin-commonjs](https://github.com/rollup/rollup-plugin-commonjs) for an example of usage. + +```js +import { attachScopes } from '@rollup/pluginutils'; +import { walk } from 'estree-walker'; + +export default function myPlugin(options = {}) { + return { + transform(code) { + const ast = this.parse(code); + + let scope = attachScopes(ast, 'scope'); + + walk(ast, { + enter(node) { + if (node.scope) scope = node.scope; + + if (!scope.contains('foo')) { + // `foo` is not defined, so if we encounter it, + // we assume it's a global + } + }, + leave(node) { + if (node.scope) scope = scope.parent; + } + }); + } + }; +} +``` + +### createFilter + +Constructs a filter function which can be used to determine whether or not certain modules should be operated upon. + +Parameters: `(include?: , exclude?: , options?: Object)`
+Returns: `String` + +#### `include` and `exclude` + +Type: `String | RegExp | Array[...String|RegExp]`
+ +A valid [`minimatch`](https://www.npmjs.com/package/minimatch) pattern, or array of patterns. If `options.include` is omitted or has zero length, filter will return `true` by default. Otherwise, an ID must match one or more of the `minimatch` patterns, and must not match any of the `options.exclude` patterns. + +#### `options` + +##### `resolve` + +Type: `String | Boolean | null` + +Optionally resolves the patterns against a directory other than `process.cwd()`. If a `String` is specified, then the value will be used as the base directory. Relative paths will be resolved against `process.cwd()` first. If `false`, then the patterns will not be resolved against any directory. This can be useful if you want to create a filter for virtual module names. + +#### Usage + +```js +import { createFilter } from '@rollup/pluginutils'; + +export default function myPlugin(options = {}) { + // assume that the myPlugin accepts options of `options.include` and `options.exclude` + var filter = createFilter(options.include, options.exclude, { + resolve: '/my/base/dir' + }); + + return { + transform(code, id) { + if (!filter(id)) return; + + // proceed with the transformation... + } + }; +} +``` + +### dataToEsm + +Transforms objects into tree-shakable ES Module imports. + +Parameters: `(data: Object)`
+Returns: `String` + +#### `data` + +Type: `Object` + +An object to transform into an ES module. + +#### Usage + +```js +import { dataToEsm } from '@rollup/pluginutils'; + +const esModuleSource = dataToEsm( + { + custom: 'data', + to: ['treeshake'] + }, + { + compact: false, + indent: '\t', + preferConst: false, + objectShorthand: false, + namedExports: true + } +); +/* +Outputs the string ES module source: + export const custom = 'data'; + export const to = ['treeshake']; + export default { custom, to }; +*/ +``` + +### extractAssignedNames + +Extracts the names of all assignment targets based upon specified patterns. + +Parameters: `(param: Node)`
+Returns: `Array[...String]` + +#### `param` + +Type: `Node` + +An `acorn` AST Node. + +#### Usage + +```js +import { extractAssignedNames } from '@rollup/pluginutils'; +import { walk } from 'estree-walker'; + +export default function myPlugin(options = {}) { + return { + transform(code) { + const ast = this.parse(code); + + walk(ast, { + enter(node) { + if (node.type === 'VariableDeclarator') { + const declaredNames = extractAssignedNames(node.id); + // do something with the declared names + // e.g. for `const {x, y: z} = ... => declaredNames = ['x', 'z'] + } + } + }); + } + }; +} +``` + +### makeLegalIdentifier + +Constructs a bundle-safe identifier from a `String`. + +Parameters: `(str: String)`
+Returns: `String` + +#### Usage + +```js +import { makeLegalIdentifier } from '@rollup/pluginutils'; + +makeLegalIdentifier('foo-bar'); // 'foo_bar' +makeLegalIdentifier('typeof'); // '_typeof' +``` + +## Meta + +[CONTRIBUTING](/.github/CONTRIBUTING.md) + +[LICENSE (MIT)](/LICENSE) diff --git a/build/node_modules/@rollup/pluginutils/dist/cjs/index.js b/build/node_modules/@rollup/pluginutils/dist/cjs/index.js new file mode 100644 index 00000000..c980d90e --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/dist/cjs/index.js @@ -0,0 +1,447 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var path = require('path'); +var pm = _interopDefault(require('picomatch')); + +const addExtension = function addExtension(filename, ext = '.js') { + let result = `${filename}`; + if (!path.extname(filename)) + result += ext; + return result; +}; + +function walk(ast, { enter, leave }) { + return visit(ast, null, enter, leave); +} + +let should_skip = false; +let should_remove = false; +let replacement = null; +const context = { + skip: () => should_skip = true, + remove: () => should_remove = true, + replace: (node) => replacement = node +}; + +function replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } +} + +function remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } +} + +function visit( + node, + parent, + enter, + leave, + prop, + index +) { + if (node) { + if (enter) { + const _should_skip = should_skip; + const _should_remove = should_remove; + const _replacement = replacement; + should_skip = false; + should_remove = false; + replacement = null; + + enter.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const skipped = should_skip; + const removed = should_remove; + + should_skip = _should_skip; + should_remove = _should_remove; + replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = (node )[key]; + + if (typeof value !== 'object') { + continue; + } + + else if (Array.isArray(value)) { + for (let j = 0, k = 0; j < value.length; j += 1, k += 1) { + if (value[j] !== null && typeof value[j].type === 'string') { + if (!visit(value[j], node, enter, leave, key, k)) { + // removed + j--; + } + } + } + } + + else if (value !== null && typeof value.type === 'string') { + visit(value, node, enter, leave, key, null); + } + } + + if (leave) { + const _replacement = replacement; + const _should_remove = should_remove; + replacement = null; + should_remove = false; + + leave.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const removed = should_remove; + + replacement = _replacement; + should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; +} + +const extractors = { + ArrayPattern(names, param) { + for (const element of param.elements) { + if (element) + extractors[element.type](names, element); + } + }, + AssignmentPattern(names, param) { + extractors[param.left.type](names, param.left); + }, + Identifier(names, param) { + names.push(param.name); + }, + MemberExpression() { }, + ObjectPattern(names, param) { + for (const prop of param.properties) { + // @ts-ignore Typescript reports that this is not a valid type + if (prop.type === 'RestElement') { + extractors.RestElement(names, prop); + } + else { + extractors[prop.value.type](names, prop.value); + } + } + }, + RestElement(names, param) { + extractors[param.argument.type](names, param.argument); + } +}; +const extractAssignedNames = function extractAssignedNames(param) { + const names = []; + extractors[param.type](names, param); + return names; +}; + +const blockDeclarations = { + const: true, + let: true +}; +class Scope { + constructor(options = {}) { + this.parent = options.parent; + this.isBlockScope = !!options.block; + this.declarations = Object.create(null); + if (options.params) { + options.params.forEach((param) => { + extractAssignedNames(param).forEach((name) => { + this.declarations[name] = true; + }); + }); + } + } + addDeclaration(node, isBlockDeclaration, isVar) { + if (!isBlockDeclaration && this.isBlockScope) { + // it's a `var` or function node, and this + // is a block scope, so we need to go up + this.parent.addDeclaration(node, isBlockDeclaration, isVar); + } + else if (node.id) { + extractAssignedNames(node.id).forEach((name) => { + this.declarations[name] = true; + }); + } + } + contains(name) { + return this.declarations[name] || (this.parent ? this.parent.contains(name) : false); + } +} +const attachScopes = function attachScopes(ast, propertyName = 'scope') { + let scope = new Scope(); + walk(ast, { + enter(n, parent) { + const node = n; + // function foo () {...} + // class Foo {...} + if (/(Function|Class)Declaration/.test(node.type)) { + scope.addDeclaration(node, false, false); + } + // var foo = 1 + if (node.type === 'VariableDeclaration') { + const { kind } = node; + const isBlockDeclaration = blockDeclarations[kind]; + // don't add const/let declarations in the body of a for loop #113 + const parentType = parent ? parent.type : ''; + if (!(isBlockDeclaration && /ForOfStatement/.test(parentType))) { + node.declarations.forEach((declaration) => { + scope.addDeclaration(declaration, isBlockDeclaration, true); + }); + } + } + let newScope; + // create new function scope + if (/Function/.test(node.type)) { + const func = node; + newScope = new Scope({ + parent: scope, + block: false, + params: func.params + }); + // named function expressions - the name is considered + // part of the function's scope + if (func.type === 'FunctionExpression' && func.id) { + newScope.addDeclaration(func, false, false); + } + } + // create new block scope + if (node.type === 'BlockStatement' && !/Function/.test(parent.type)) { + newScope = new Scope({ + parent: scope, + block: true + }); + } + // catch clause has its own block scope + if (node.type === 'CatchClause') { + newScope = new Scope({ + parent: scope, + params: node.param ? [node.param] : [], + block: true + }); + } + if (newScope) { + Object.defineProperty(node, propertyName, { + value: newScope, + configurable: true + }); + scope = newScope; + } + }, + leave(n) { + const node = n; + if (node[propertyName]) + scope = scope.parent; + } + }); + return scope; +}; + +// Helper since Typescript can't detect readonly arrays with Array.isArray +function isArray(arg) { + return Array.isArray(arg); +} +function ensureArray(thing) { + if (isArray(thing)) + return thing; + if (thing == null) + return []; + return [thing]; +} + +function getMatcherString(id, resolutionBase) { + if (resolutionBase === false) { + return id; + } + // resolve('') is valid and will default to process.cwd() + const basePath = path.resolve(resolutionBase || '') + .split(path.sep) + .join('/') + // escape all possible (posix + win) path characters that might interfere with regex + .replace(/[-^$*+?.()|[\]{}]/g, '\\$&'); + // Note that we use posix.join because: + // 1. the basePath has been normalized to use / + // 2. the incoming glob (id) matcher, also uses / + // otherwise Node will force backslash (\) on windows + return path.posix.join(basePath, id); +} +const createFilter = function createFilter(include, exclude, options) { + const resolutionBase = options && options.resolve; + const getMatcher = (id) => id instanceof RegExp + ? id + : { + test: (what) => { + // this refactor is a tad overly verbose but makes for easy debugging + const pattern = getMatcherString(id, resolutionBase); + const fn = pm(pattern, { dot: true }); + const result = fn(what); + return result; + } + }; + const includeMatchers = ensureArray(include).map(getMatcher); + const excludeMatchers = ensureArray(exclude).map(getMatcher); + return function result(id) { + if (typeof id !== 'string') + return false; + if (/\0/.test(id)) + return false; + const pathId = id.split(path.sep).join('/'); + for (let i = 0; i < excludeMatchers.length; ++i) { + const matcher = excludeMatchers[i]; + if (matcher.test(pathId)) + return false; + } + for (let i = 0; i < includeMatchers.length; ++i) { + const matcher = includeMatchers[i]; + if (matcher.test(pathId)) + return true; + } + return !includeMatchers.length; + }; +}; + +const reservedWords = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public'; +const builtins = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl'; +const forbiddenIdentifiers = new Set(`${reservedWords} ${builtins}`.split(' ')); +forbiddenIdentifiers.add(''); +const makeLegalIdentifier = function makeLegalIdentifier(str) { + let identifier = str + .replace(/-(\w)/g, (_, letter) => letter.toUpperCase()) + .replace(/[^$_a-zA-Z0-9]/g, '_'); + if (/\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) { + identifier = `_${identifier}`; + } + return identifier || '_'; +}; + +function stringify(obj) { + return (JSON.stringify(obj) || 'undefined').replace(/[\u2028\u2029]/g, (char) => `\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`); +} +function serializeArray(arr, indent, baseIndent) { + let output = '['; + const separator = indent ? `\n${baseIndent}${indent}` : ''; + for (let i = 0; i < arr.length; i++) { + const key = arr[i]; + output += `${i > 0 ? ',' : ''}${separator}${serialize(key, indent, baseIndent + indent)}`; + } + return `${output}${indent ? `\n${baseIndent}` : ''}]`; +} +function serializeObject(obj, indent, baseIndent) { + let output = '{'; + const separator = indent ? `\n${baseIndent}${indent}` : ''; + const entries = Object.entries(obj); + for (let i = 0; i < entries.length; i++) { + const [key, value] = entries[i]; + const stringKey = makeLegalIdentifier(key) === key ? key : stringify(key); + output += `${i > 0 ? ',' : ''}${separator}${stringKey}:${indent ? ' ' : ''}${serialize(value, indent, baseIndent + indent)}`; + } + return `${output}${indent ? `\n${baseIndent}` : ''}}`; +} +function serialize(obj, indent, baseIndent) { + if (obj === Infinity) + return 'Infinity'; + if (obj === -Infinity) + return '-Infinity'; + if (obj === 0 && 1 / obj === -Infinity) + return '-0'; + if (obj instanceof Date) + return `new Date(${obj.getTime()})`; + if (obj instanceof RegExp) + return obj.toString(); + if (obj !== obj) + return 'NaN'; // eslint-disable-line no-self-compare + if (Array.isArray(obj)) + return serializeArray(obj, indent, baseIndent); + if (obj === null) + return 'null'; + if (typeof obj === 'object') + return serializeObject(obj, indent, baseIndent); + return stringify(obj); +} +const dataToEsm = function dataToEsm(data, options = {}) { + const t = options.compact ? '' : 'indent' in options ? options.indent : '\t'; + const _ = options.compact ? '' : ' '; + const n = options.compact ? '' : '\n'; + const declarationType = options.preferConst ? 'const' : 'var'; + if (options.namedExports === false || + typeof data !== 'object' || + Array.isArray(data) || + data instanceof Date || + data instanceof RegExp || + data === null) { + const code = serialize(data, options.compact ? null : t, ''); + const magic = _ || (/^[{[\-\/]/.test(code) ? '' : ' '); // eslint-disable-line no-useless-escape + return `export default${magic}${code};`; + } + let namedExportCode = ''; + const defaultExportRows = []; + for (const [key, value] of Object.entries(data)) { + if (key === makeLegalIdentifier(key)) { + if (options.objectShorthand) + defaultExportRows.push(key); + else + defaultExportRows.push(`${key}:${_}${key}`); + namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value, options.compact ? null : t, '')};${n}`; + } + else { + defaultExportRows.push(`${stringify(key)}:${_}${serialize(value, options.compact ? null : t, '')}`); + } + } + return `${namedExportCode}export default${_}{${n}${t}${defaultExportRows.join(`,${n}${t}`)}${n}};${n}`; +}; + +// TODO: remove this in next major +var index = { + addExtension, + attachScopes, + createFilter, + dataToEsm, + extractAssignedNames, + makeLegalIdentifier +}; + +exports.addExtension = addExtension; +exports.attachScopes = attachScopes; +exports.createFilter = createFilter; +exports.dataToEsm = dataToEsm; +exports.default = index; +exports.extractAssignedNames = extractAssignedNames; +exports.makeLegalIdentifier = makeLegalIdentifier; diff --git a/build/node_modules/@rollup/pluginutils/dist/es/index.js b/build/node_modules/@rollup/pluginutils/dist/es/index.js new file mode 100644 index 00000000..a4230529 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/dist/es/index.js @@ -0,0 +1,436 @@ +import { extname, sep, resolve, posix } from 'path'; +import pm from 'picomatch'; + +const addExtension = function addExtension(filename, ext = '.js') { + let result = `${filename}`; + if (!extname(filename)) + result += ext; + return result; +}; + +function walk(ast, { enter, leave }) { + return visit(ast, null, enter, leave); +} + +let should_skip = false; +let should_remove = false; +let replacement = null; +const context = { + skip: () => should_skip = true, + remove: () => should_remove = true, + replace: (node) => replacement = node +}; + +function replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } +} + +function remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } +} + +function visit( + node, + parent, + enter, + leave, + prop, + index +) { + if (node) { + if (enter) { + const _should_skip = should_skip; + const _should_remove = should_remove; + const _replacement = replacement; + should_skip = false; + should_remove = false; + replacement = null; + + enter.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const skipped = should_skip; + const removed = should_remove; + + should_skip = _should_skip; + should_remove = _should_remove; + replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = (node )[key]; + + if (typeof value !== 'object') { + continue; + } + + else if (Array.isArray(value)) { + for (let j = 0, k = 0; j < value.length; j += 1, k += 1) { + if (value[j] !== null && typeof value[j].type === 'string') { + if (!visit(value[j], node, enter, leave, key, k)) { + // removed + j--; + } + } + } + } + + else if (value !== null && typeof value.type === 'string') { + visit(value, node, enter, leave, key, null); + } + } + + if (leave) { + const _replacement = replacement; + const _should_remove = should_remove; + replacement = null; + should_remove = false; + + leave.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const removed = should_remove; + + replacement = _replacement; + should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; +} + +const extractors = { + ArrayPattern(names, param) { + for (const element of param.elements) { + if (element) + extractors[element.type](names, element); + } + }, + AssignmentPattern(names, param) { + extractors[param.left.type](names, param.left); + }, + Identifier(names, param) { + names.push(param.name); + }, + MemberExpression() { }, + ObjectPattern(names, param) { + for (const prop of param.properties) { + // @ts-ignore Typescript reports that this is not a valid type + if (prop.type === 'RestElement') { + extractors.RestElement(names, prop); + } + else { + extractors[prop.value.type](names, prop.value); + } + } + }, + RestElement(names, param) { + extractors[param.argument.type](names, param.argument); + } +}; +const extractAssignedNames = function extractAssignedNames(param) { + const names = []; + extractors[param.type](names, param); + return names; +}; + +const blockDeclarations = { + const: true, + let: true +}; +class Scope { + constructor(options = {}) { + this.parent = options.parent; + this.isBlockScope = !!options.block; + this.declarations = Object.create(null); + if (options.params) { + options.params.forEach((param) => { + extractAssignedNames(param).forEach((name) => { + this.declarations[name] = true; + }); + }); + } + } + addDeclaration(node, isBlockDeclaration, isVar) { + if (!isBlockDeclaration && this.isBlockScope) { + // it's a `var` or function node, and this + // is a block scope, so we need to go up + this.parent.addDeclaration(node, isBlockDeclaration, isVar); + } + else if (node.id) { + extractAssignedNames(node.id).forEach((name) => { + this.declarations[name] = true; + }); + } + } + contains(name) { + return this.declarations[name] || (this.parent ? this.parent.contains(name) : false); + } +} +const attachScopes = function attachScopes(ast, propertyName = 'scope') { + let scope = new Scope(); + walk(ast, { + enter(n, parent) { + const node = n; + // function foo () {...} + // class Foo {...} + if (/(Function|Class)Declaration/.test(node.type)) { + scope.addDeclaration(node, false, false); + } + // var foo = 1 + if (node.type === 'VariableDeclaration') { + const { kind } = node; + const isBlockDeclaration = blockDeclarations[kind]; + // don't add const/let declarations in the body of a for loop #113 + const parentType = parent ? parent.type : ''; + if (!(isBlockDeclaration && /ForOfStatement/.test(parentType))) { + node.declarations.forEach((declaration) => { + scope.addDeclaration(declaration, isBlockDeclaration, true); + }); + } + } + let newScope; + // create new function scope + if (/Function/.test(node.type)) { + const func = node; + newScope = new Scope({ + parent: scope, + block: false, + params: func.params + }); + // named function expressions - the name is considered + // part of the function's scope + if (func.type === 'FunctionExpression' && func.id) { + newScope.addDeclaration(func, false, false); + } + } + // create new block scope + if (node.type === 'BlockStatement' && !/Function/.test(parent.type)) { + newScope = new Scope({ + parent: scope, + block: true + }); + } + // catch clause has its own block scope + if (node.type === 'CatchClause') { + newScope = new Scope({ + parent: scope, + params: node.param ? [node.param] : [], + block: true + }); + } + if (newScope) { + Object.defineProperty(node, propertyName, { + value: newScope, + configurable: true + }); + scope = newScope; + } + }, + leave(n) { + const node = n; + if (node[propertyName]) + scope = scope.parent; + } + }); + return scope; +}; + +// Helper since Typescript can't detect readonly arrays with Array.isArray +function isArray(arg) { + return Array.isArray(arg); +} +function ensureArray(thing) { + if (isArray(thing)) + return thing; + if (thing == null) + return []; + return [thing]; +} + +function getMatcherString(id, resolutionBase) { + if (resolutionBase === false) { + return id; + } + // resolve('') is valid and will default to process.cwd() + const basePath = resolve(resolutionBase || '') + .split(sep) + .join('/') + // escape all possible (posix + win) path characters that might interfere with regex + .replace(/[-^$*+?.()|[\]{}]/g, '\\$&'); + // Note that we use posix.join because: + // 1. the basePath has been normalized to use / + // 2. the incoming glob (id) matcher, also uses / + // otherwise Node will force backslash (\) on windows + return posix.join(basePath, id); +} +const createFilter = function createFilter(include, exclude, options) { + const resolutionBase = options && options.resolve; + const getMatcher = (id) => id instanceof RegExp + ? id + : { + test: (what) => { + // this refactor is a tad overly verbose but makes for easy debugging + const pattern = getMatcherString(id, resolutionBase); + const fn = pm(pattern, { dot: true }); + const result = fn(what); + return result; + } + }; + const includeMatchers = ensureArray(include).map(getMatcher); + const excludeMatchers = ensureArray(exclude).map(getMatcher); + return function result(id) { + if (typeof id !== 'string') + return false; + if (/\0/.test(id)) + return false; + const pathId = id.split(sep).join('/'); + for (let i = 0; i < excludeMatchers.length; ++i) { + const matcher = excludeMatchers[i]; + if (matcher.test(pathId)) + return false; + } + for (let i = 0; i < includeMatchers.length; ++i) { + const matcher = includeMatchers[i]; + if (matcher.test(pathId)) + return true; + } + return !includeMatchers.length; + }; +}; + +const reservedWords = 'break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public'; +const builtins = 'arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl'; +const forbiddenIdentifiers = new Set(`${reservedWords} ${builtins}`.split(' ')); +forbiddenIdentifiers.add(''); +const makeLegalIdentifier = function makeLegalIdentifier(str) { + let identifier = str + .replace(/-(\w)/g, (_, letter) => letter.toUpperCase()) + .replace(/[^$_a-zA-Z0-9]/g, '_'); + if (/\d/.test(identifier[0]) || forbiddenIdentifiers.has(identifier)) { + identifier = `_${identifier}`; + } + return identifier || '_'; +}; + +function stringify(obj) { + return (JSON.stringify(obj) || 'undefined').replace(/[\u2028\u2029]/g, (char) => `\\u${`000${char.charCodeAt(0).toString(16)}`.slice(-4)}`); +} +function serializeArray(arr, indent, baseIndent) { + let output = '['; + const separator = indent ? `\n${baseIndent}${indent}` : ''; + for (let i = 0; i < arr.length; i++) { + const key = arr[i]; + output += `${i > 0 ? ',' : ''}${separator}${serialize(key, indent, baseIndent + indent)}`; + } + return `${output}${indent ? `\n${baseIndent}` : ''}]`; +} +function serializeObject(obj, indent, baseIndent) { + let output = '{'; + const separator = indent ? `\n${baseIndent}${indent}` : ''; + const entries = Object.entries(obj); + for (let i = 0; i < entries.length; i++) { + const [key, value] = entries[i]; + const stringKey = makeLegalIdentifier(key) === key ? key : stringify(key); + output += `${i > 0 ? ',' : ''}${separator}${stringKey}:${indent ? ' ' : ''}${serialize(value, indent, baseIndent + indent)}`; + } + return `${output}${indent ? `\n${baseIndent}` : ''}}`; +} +function serialize(obj, indent, baseIndent) { + if (obj === Infinity) + return 'Infinity'; + if (obj === -Infinity) + return '-Infinity'; + if (obj === 0 && 1 / obj === -Infinity) + return '-0'; + if (obj instanceof Date) + return `new Date(${obj.getTime()})`; + if (obj instanceof RegExp) + return obj.toString(); + if (obj !== obj) + return 'NaN'; // eslint-disable-line no-self-compare + if (Array.isArray(obj)) + return serializeArray(obj, indent, baseIndent); + if (obj === null) + return 'null'; + if (typeof obj === 'object') + return serializeObject(obj, indent, baseIndent); + return stringify(obj); +} +const dataToEsm = function dataToEsm(data, options = {}) { + const t = options.compact ? '' : 'indent' in options ? options.indent : '\t'; + const _ = options.compact ? '' : ' '; + const n = options.compact ? '' : '\n'; + const declarationType = options.preferConst ? 'const' : 'var'; + if (options.namedExports === false || + typeof data !== 'object' || + Array.isArray(data) || + data instanceof Date || + data instanceof RegExp || + data === null) { + const code = serialize(data, options.compact ? null : t, ''); + const magic = _ || (/^[{[\-\/]/.test(code) ? '' : ' '); // eslint-disable-line no-useless-escape + return `export default${magic}${code};`; + } + let namedExportCode = ''; + const defaultExportRows = []; + for (const [key, value] of Object.entries(data)) { + if (key === makeLegalIdentifier(key)) { + if (options.objectShorthand) + defaultExportRows.push(key); + else + defaultExportRows.push(`${key}:${_}${key}`); + namedExportCode += `export ${declarationType} ${key}${_}=${_}${serialize(value, options.compact ? null : t, '')};${n}`; + } + else { + defaultExportRows.push(`${stringify(key)}:${_}${serialize(value, options.compact ? null : t, '')}`); + } + } + return `${namedExportCode}export default${_}{${n}${t}${defaultExportRows.join(`,${n}${t}`)}${n}};${n}`; +}; + +// TODO: remove this in next major +var index = { + addExtension, + attachScopes, + createFilter, + dataToEsm, + extractAssignedNames, + makeLegalIdentifier +}; + +export default index; +export { addExtension, attachScopes, createFilter, dataToEsm, extractAssignedNames, makeLegalIdentifier }; diff --git a/build/node_modules/@rollup/pluginutils/dist/es/package.json b/build/node_modules/@rollup/pluginutils/dist/es/package.json new file mode 100644 index 00000000..7c34deb5 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/dist/es/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/CHANGELOG.md b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/CHANGELOG.md new file mode 100644 index 00000000..d7c878c9 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/CHANGELOG.md @@ -0,0 +1,79 @@ +# changelog + +## 1.0.1 + +* Relax node type to `BaseNode` ([#17](https://github.com/Rich-Harris/estree-walker/pull/17)) + +## 1.0.0 + +* Don't cache child keys + +## 0.9.0 + +* Add `this.remove()` method + +## 0.8.1 + +* Fix pkg.files + +## 0.8.0 + +* Adopt `estree` types + +## 0.7.0 + +* Add a `this.replace(node)` method + +## 0.6.1 + +* Only traverse nodes that exist and have a type ([#9](https://github.com/Rich-Harris/estree-walker/pull/9)) +* Only cache keys for nodes with a type ([#8](https://github.com/Rich-Harris/estree-walker/pull/8)) + +## 0.6.0 + +* Fix walker context type +* Update deps, remove unncessary Bublé transformation + +## 0.5.2 + +* Add types to package + +## 0.5.1 + +* Prevent context corruption when `walk()` is called during a walk + +## 0.5.0 + +* Export `childKeys`, for manually fixing in case of malformed ASTs + +## 0.4.0 + +* Add TypeScript typings ([#3](https://github.com/Rich-Harris/estree-walker/pull/3)) + +## 0.3.1 + +* Include `pkg.repository` ([#2](https://github.com/Rich-Harris/estree-walker/pull/2)) + +## 0.3.0 + +* More predictable ordering + +## 0.2.1 + +* Keep `context` shape + +## 0.2.0 + +* Add ES6 build + +## 0.1.3 + +* npm snafu + +## 0.1.2 + +* Pass current prop and index to `enter`/`leave` callbacks + +## 0.1.1 + +* First release diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/README.md b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/README.md new file mode 100644 index 00000000..d877af36 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/README.md @@ -0,0 +1,48 @@ +# estree-walker + +Simple utility for walking an [ESTree](https://github.com/estree/estree)-compliant AST, such as one generated by [acorn](https://github.com/marijnh/acorn). + + +## Installation + +```bash +npm i estree-walker +``` + + +## Usage + +```js +var walk = require( 'estree-walker' ).walk; +var acorn = require( 'acorn' ); + +ast = acorn.parse( sourceCode, options ); // https://github.com/acornjs/acorn + +walk( ast, { + enter: function ( node, parent, prop, index ) { + // some code happens + }, + leave: function ( node, parent, prop, index ) { + // some code happens + } +}); +``` + +Inside the `enter` function, calling `this.skip()` will prevent the node's children being walked, or the `leave` function (which is optional) being called. + +Call `this.replace(new_node)` in either `enter` or `leave` to replace the current node with a new one. + +Call `this.remove()` in either `enter` or `leave` to remove the current node. + +## Why not use estraverse? + +The ESTree spec is evolving to accommodate ES6/7. I've had a couple of experiences where [estraverse](https://github.com/estools/estraverse) was unable to handle an AST generated by recent versions of acorn, because it hard-codes visitor keys. + +estree-walker, by contrast, simply enumerates a node's properties to find child nodes (and child lists of nodes), and is therefore resistant to spec changes. It's also much smaller. (The performance, if you're wondering, is basically identical.) + +None of which should be taken as criticism of estraverse, which has more features and has been battle-tested in many more situations, and for which I'm very grateful. + + +## License + +MIT diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js new file mode 100644 index 00000000..f2e012a7 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js @@ -0,0 +1,135 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.estreeWalker = {}))); +}(this, (function (exports) { 'use strict'; + + function walk(ast, { enter, leave }) { + return visit(ast, null, enter, leave); + } + + let should_skip = false; + let should_remove = false; + let replacement = null; + const context = { + skip: () => should_skip = true, + remove: () => should_remove = true, + replace: (node) => replacement = node + }; + + function replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } + } + + function remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } + } + + function visit( + node, + parent, + enter, + leave, + prop, + index + ) { + if (node) { + if (enter) { + const _should_skip = should_skip; + const _should_remove = should_remove; + const _replacement = replacement; + should_skip = false; + should_remove = false; + replacement = null; + + enter.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const skipped = should_skip; + const removed = should_remove; + + should_skip = _should_skip; + should_remove = _should_remove; + replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = (node )[key]; + + if (typeof value !== 'object') { + continue; + } + + else if (Array.isArray(value)) { + for (let j = 0, k = 0; j < value.length; j += 1, k += 1) { + if (value[j] !== null && typeof value[j].type === 'string') { + if (!visit(value[j], node, enter, leave, key, k)) { + // removed + j--; + } + } + } + } + + else if (value !== null && typeof value.type === 'string') { + visit(value, node, enter, leave, key, null); + } + } + + if (leave) { + const _replacement = replacement; + const _should_remove = should_remove; + replacement = null; + should_remove = false; + + leave.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const removed = should_remove; + + replacement = _replacement; + should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } + + exports.walk = walk; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map new file mode 100644 index 00000000..7ea22970 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"estree-walker.umd.js","sources":["../src/estree-walker.js"],"sourcesContent":["export function walk(ast, { enter, leave }) {\n\tvisit(ast, null, enter, leave);\n}\n\nlet shouldSkip = false;\nconst context = { skip: () => shouldSkip = true };\n\nexport const childKeys = {};\n\nconst toString = Object.prototype.toString;\n\nfunction isArray(thing) {\n\treturn toString.call(thing) === '[object Array]';\n}\n\nfunction visit(node, parent, enter, leave, prop, index) {\n\tif (!node) return;\n\n\tif (enter) {\n\t\tconst _shouldSkip = shouldSkip;\n\t\tshouldSkip = false;\n\t\tenter.call(context, node, parent, prop, index);\n\t\tconst skipped = shouldSkip;\n\t\tshouldSkip = _shouldSkip;\n\n\t\tif (skipped) return;\n\t}\n\n\tconst keys = childKeys[node.type] || (\n\t\tchildKeys[node.type] = Object.keys(node).filter(key => typeof node[key] === 'object')\n\t);\n\n\tfor (let i = 0; i < keys.length; i += 1) {\n\t\tconst key = keys[i];\n\t\tconst value = node[key];\n\n\t\tif (isArray(value)) {\n\t\t\tfor (let j = 0; j < value.length; j += 1) {\n\t\t\t\tvisit(value[j], node, enter, leave, key, j);\n\t\t\t}\n\t\t}\n\n\t\telse if (value && value.type) {\n\t\t\tvisit(value, node, enter, leave, key, null);\n\t\t}\n\t}\n\n\tif (leave) {\n\t\tleave(node, parent, prop, index);\n\t}\n}\n"],"names":[],"mappings":";;;;;;CAAO,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;CAC5C,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;CAChC,CAAC;;CAED,IAAI,UAAU,GAAG,KAAK,CAAC;CACvB,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC;;AAElD,AAAY,OAAC,SAAS,GAAG,EAAE,CAAC;;CAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;;CAE3C,SAAS,OAAO,CAAC,KAAK,EAAE;CACxB,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC;CAClD,CAAC;;CAED,SAAS,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;CACxD,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;;CAEnB,CAAC,IAAI,KAAK,EAAE;CACZ,EAAE,MAAM,WAAW,GAAG,UAAU,CAAC;CACjC,EAAE,UAAU,GAAG,KAAK,CAAC;CACrB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;CACjD,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC;CAC7B,EAAE,UAAU,GAAG,WAAW,CAAC;;CAE3B,EAAE,IAAI,OAAO,EAAE,OAAO;CACtB,EAAE;;CAEF,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;CAClC,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;CACvF,EAAE,CAAC;;CAEH,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;CAC1C,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;CACtB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;;CAE1B,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;CACtB,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;CAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAChD,IAAI;CACJ,GAAG;;CAEH,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;CAChC,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;CAC/C,GAAG;CACH,EAAE;;CAEF,CAAC,IAAI,KAAK,EAAE;CACZ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;CACnC,EAAE;CACF,CAAC;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/package.json b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/package.json new file mode 100644 index 00000000..42b98640 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/package.json @@ -0,0 +1,63 @@ +{ + "_from": "estree-walker@^1.0.1", + "_id": "estree-walker@1.0.1", + "_inBundle": false, + "_integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "_location": "/@rollup/pluginutils/estree-walker", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "estree-walker@^1.0.1", + "name": "estree-walker", + "escapedName": "estree-walker", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/@rollup/pluginutils" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-1.0.1.tgz", + "_shasum": "31bc5d612c96b704106b477e6dd5d8aa138cb700", + "_spec": "estree-walker@^1.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/pluginutils", + "author": { + "name": "Rich Harris" + }, + "bugs": { + "url": "https://github.com/Rich-Harris/estree-walker/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Traverse an ESTree-compliant AST", + "devDependencies": { + "@types/estree": "0.0.39", + "mocha": "^5.2.0", + "rollup": "^0.67.3", + "rollup-plugin-sucrase": "^2.1.0", + "typescript": "^3.6.3" + }, + "files": [ + "src", + "dist", + "types", + "README.md" + ], + "homepage": "https://github.com/Rich-Harris/estree-walker#readme", + "license": "MIT", + "main": "dist/estree-walker.umd.js", + "module": "src/estree-walker.js", + "name": "estree-walker", + "repository": { + "type": "git", + "url": "git+https://github.com/Rich-Harris/estree-walker.git" + }, + "scripts": { + "build": "tsc && rollup -c", + "prepublishOnly": "npm run build && npm test", + "test": "mocha --opts mocha.opts" + }, + "types": "types/index.d.ts", + "version": "1.0.1" +} diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/estree-walker.js b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/estree-walker.js new file mode 100644 index 00000000..e1b01dfa --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/estree-walker.js @@ -0,0 +1,125 @@ +function walk(ast, { enter, leave }) { + return visit(ast, null, enter, leave); +} + +let should_skip = false; +let should_remove = false; +let replacement = null; +const context = { + skip: () => should_skip = true, + remove: () => should_remove = true, + replace: (node) => replacement = node +}; + +function replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } +} + +function remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } +} + +function visit( + node, + parent, + enter, + leave, + prop, + index +) { + if (node) { + if (enter) { + const _should_skip = should_skip; + const _should_remove = should_remove; + const _replacement = replacement; + should_skip = false; + should_remove = false; + replacement = null; + + enter.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const skipped = should_skip; + const removed = should_remove; + + should_skip = _should_skip; + should_remove = _should_remove; + replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = (node )[key]; + + if (typeof value !== 'object') { + continue; + } + + else if (Array.isArray(value)) { + for (let j = 0, k = 0; j < value.length; j += 1, k += 1) { + if (value[j] !== null && typeof value[j].type === 'string') { + if (!visit(value[j], node, enter, leave, key, k)) { + // removed + j--; + } + } + } + } + + else if (value !== null && typeof value.type === 'string') { + visit(value, node, enter, leave, key, null); + } + } + + if (leave) { + const _replacement = replacement; + const _should_remove = should_remove; + replacement = null; + should_remove = false; + + leave.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const removed = should_remove; + + replacement = _replacement; + should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; +} + +export { walk }; diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/index.ts b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/index.ts new file mode 100644 index 00000000..09ed5160 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/src/index.ts @@ -0,0 +1,144 @@ +import { BaseNode } from "estree"; + +type WalkerContext = { + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; +}; + +type WalkerHandler = ( + this: WalkerContext, + node: BaseNode, + parent: BaseNode, + key: string, + index: number +) => void + +type Walker = { + enter?: WalkerHandler; + leave?: WalkerHandler; +} + +export function walk(ast: BaseNode, { enter, leave }: Walker) { + return visit(ast, null, enter, leave); +} + +let should_skip = false; +let should_remove = false; +let replacement: BaseNode = null; +const context: WalkerContext = { + skip: () => should_skip = true, + remove: () => should_remove = true, + replace: (node: BaseNode) => replacement = node +}; + +function replace(parent: any, prop: string, index: number, node: BaseNode) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } +} + +function remove(parent: any, prop: string, index: number) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } +} + +function visit( + node: BaseNode, + parent: BaseNode, + enter: WalkerHandler, + leave: WalkerHandler, + prop?: string, + index?: number +) { + if (node) { + if (enter) { + const _should_skip = should_skip; + const _should_remove = should_remove; + const _replacement = replacement; + should_skip = false; + should_remove = false; + replacement = null; + + enter.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const skipped = should_skip; + const removed = should_remove; + + should_skip = _should_skip; + should_remove = _should_remove; + replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = (node as any)[key]; + + if (typeof value !== 'object') { + continue; + } + + else if (Array.isArray(value)) { + for (let j = 0, k = 0; j < value.length; j += 1, k += 1) { + if (value[j] !== null && typeof value[j].type === 'string') { + if (!visit(value[j], node, enter, leave, key, k)) { + // removed + j--; + } + } + } + } + + else if (value !== null && typeof value.type === 'string') { + visit(value, node, enter, leave, key, null); + } + } + + if (leave) { + const _replacement = replacement; + const _should_remove = should_remove; + replacement = null; + should_remove = false; + + leave.call(context, node, parent, prop, index); + + if (replacement) { + node = replacement; + replace(parent, prop, index, node); + } + + if (should_remove) { + remove(parent, prop, index); + } + + const removed = should_remove; + + replacement = _replacement; + should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; +} diff --git a/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/types/index.d.ts b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/types/index.d.ts new file mode 100644 index 00000000..7540a907 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/node_modules/estree-walker/types/index.d.ts @@ -0,0 +1,13 @@ +import { BaseNode } from "estree"; +declare type WalkerContext = { + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; +}; +declare type WalkerHandler = (this: WalkerContext, node: BaseNode, parent: BaseNode, key: string, index: number) => void; +declare type Walker = { + enter?: WalkerHandler; + leave?: WalkerHandler; +}; +export declare function walk(ast: BaseNode, { enter, leave }: Walker): BaseNode; +export {}; diff --git a/build/node_modules/@rollup/pluginutils/package.json b/build/node_modules/@rollup/pluginutils/package.json new file mode 100644 index 00000000..3ed6898f --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/package.json @@ -0,0 +1,125 @@ +{ + "_from": "@rollup/pluginutils@^3.1.0", + "_id": "@rollup/pluginutils@3.1.0", + "_inBundle": false, + "_integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "_location": "/@rollup/pluginutils", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@rollup/pluginutils@^3.1.0", + "name": "@rollup/pluginutils", + "escapedName": "@rollup%2fpluginutils", + "scope": "@rollup", + "rawSpec": "^3.1.0", + "saveSpec": null, + "fetchSpec": "^3.1.0" + }, + "_requiredBy": [ + "/@rollup/plugin-commonjs", + "/@rollup/plugin-json", + "/@rollup/plugin-node-resolve" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "_shasum": "706b4524ee6dc8b103b3c995533e5ad680c02b9b", + "_spec": "@rollup/pluginutils@^3.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", + "author": { + "name": "Rich Harris", + "email": "richard.a.harris@gmail.com" + }, + "ava": { + "compileEnhancements": false, + "extensions": [ + "ts" + ], + "require": [ + "ts-node/register" + ], + "files": [ + "!**/fixtures/**", + "!**/helpers/**", + "!**/recipes/**", + "!**/types.ts" + ] + }, + "bugs": { + "url": "https://github.com/rollup/plugins/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "deprecated": false, + "description": "A set of utility functions commonly used by Rollup plugins", + "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.2", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-typescript": "^3.0.0", + "@types/jest": "^24.9.0", + "@types/node": "^12.12.25", + "@types/picomatch": "^2.2.1", + "typescript": "^3.7.5" + }, + "engines": { + "node": ">= 8.0.0" + }, + "exports": { + "require": "./dist/cjs/index.js", + "import": "./dist/es/index.js" + }, + "files": [ + "dist", + "types", + "README.md", + "LICENSE" + ], + "homepage": "https://github.com/rollup/plugins/tree/master/packages/pluginutils#readme", + "keywords": [ + "rollup", + "plugin", + "utils" + ], + "license": "MIT", + "main": "./dist/cjs/index.js", + "module": "./dist/es/index.js", + "name": "@rollup/pluginutils", + "nyc": { + "extension": [ + ".js", + ".ts" + ] + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rollup/plugins.git" + }, + "scripts": { + "build": "rollup -c", + "ci:coverage": "nyc pnpm run test && nyc report --reporter=text-lcov > coverage.lcov", + "ci:lint": "pnpm run build && pnpm run lint", + "ci:lint:commits": "commitlint --from=${CIRCLE_BRANCH} --to=${CIRCLE_SHA1}", + "ci:test": "pnpm run test -- --verbose", + "lint": "pnpm run lint:js && pnpm run lint:docs && pnpm run lint:package", + "lint:docs": "prettier --single-quote --write README.md", + "lint:js": "eslint --fix --cache src test types --ext .js,.ts", + "lint:package": "prettier --write package.json --plugin=prettier-plugin-package", + "prebuild": "del-cli dist", + "prepare": "pnpm run build", + "prepublishOnly": "pnpm run lint && pnpm run build", + "pretest": "pnpm run build -- --sourcemap", + "test": "ava" + }, + "type": "commonjs", + "types": "types/index.d.ts", + "version": "3.1.0" +} diff --git a/build/node_modules/@rollup/pluginutils/types/index.d.ts b/build/node_modules/@rollup/pluginutils/types/index.d.ts new file mode 100755 index 00000000..33d40e50 --- /dev/null +++ b/build/node_modules/@rollup/pluginutils/types/index.d.ts @@ -0,0 +1,86 @@ +// eslint-disable-next-line import/no-unresolved +import { BaseNode } from 'estree'; + +export interface AttachedScope { + parent?: AttachedScope; + isBlockScope: boolean; + declarations: { [key: string]: boolean }; + addDeclaration(node: BaseNode, isBlockDeclaration: boolean, isVar: boolean): void; + contains(name: string): boolean; +} + +export interface DataToEsmOptions { + compact?: boolean; + indent?: string; + namedExports?: boolean; + objectShorthand?: boolean; + preferConst?: boolean; +} + +/** + * A valid `minimatch` pattern, or array of patterns. + */ +export type FilterPattern = ReadonlyArray | string | RegExp | null; + +/** + * Adds an extension to a module ID if one does not exist. + */ +export function addExtension(filename: string, ext?: string): string; + +/** + * Attaches `Scope` objects to the relevant nodes of an AST. + * Each `Scope` object has a `scope.contains(name)` method that returns `true` + * if a given name is defined in the current scope or a parent scope. + */ +export function attachScopes(ast: BaseNode, propertyName?: string): AttachedScope; + +/** + * Constructs a filter function which can be used to determine whether or not + * certain modules should be operated upon. + * @param include If `include` is omitted or has zero length, filter will return `true` by default. + * @param exclude ID must not match any of the `exclude` patterns. + * @param options Optionally resolves the patterns against a directory other than `process.cwd()`. + * If a `string` is specified, then the value will be used as the base directory. + * Relative paths will be resolved against `process.cwd()` first. + * If `false`, then the patterns will not be resolved against any directory. + * This can be useful if you want to create a filter for virtual module names. + */ +export function createFilter( + include?: FilterPattern, + exclude?: FilterPattern, + options?: { resolve?: string | false | null } +): (id: string | unknown) => boolean; + +/** + * Transforms objects into tree-shakable ES Module imports. + * @param data An object to transform into an ES module. + */ +export function dataToEsm(data: unknown, options?: DataToEsmOptions): string; + +/** + * Extracts the names of all assignment targets based upon specified patterns. + * @param param An `acorn` AST Node. + */ +export function extractAssignedNames(param: BaseNode): string[]; + +/** + * Constructs a bundle-safe identifier from a `string`. + */ +export function makeLegalIdentifier(str: string): string; + +export type AddExtension = typeof addExtension; +export type AttachScopes = typeof attachScopes; +export type CreateFilter = typeof createFilter; +export type ExtractAssignedNames = typeof extractAssignedNames; +export type MakeLegalIdentifier = typeof makeLegalIdentifier; +export type DataToEsm = typeof dataToEsm; + +declare const defaultExport: { + addExtension: AddExtension; + attachScopes: AttachScopes; + createFilter: CreateFilter; + dataToEsm: DataToEsm; + extractAssignedNames: ExtractAssignedNames; + makeLegalIdentifier: MakeLegalIdentifier; +}; +export default defaultExport; diff --git a/build/node_modules/@sinonjs/commons/CHANGES.md b/build/node_modules/@sinonjs/commons/CHANGES.md new file mode 100644 index 00000000..9d306954 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/CHANGES.md @@ -0,0 +1,57 @@ +# Changes + +## 1.8.3 + +- [`6af2d0c`](https://github.com/sinonjs/commons/commit/6af2d0cf33e9fd1e4aaef5308fd16a9cd78a5782) + Bump y18n from 4.0.0 to 4.0.1 (dependabot[bot]) + > + > Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1. + > - [Release notes](https://github.com/yargs/y18n/releases) + > - [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md) + > - [Commits](https://github.com/yargs/y18n/commits) + > + > Signed-off-by: dependabot[bot] + +_Released on 2021-04-08._ + +## 1.8.2 + +- [`6b7a796`](https://github.com/sinonjs/commons/commit/6b7a796ffc088b43dc283cc4477a7d641720dc96) + Add .d.ts files to package (Morgan Roderick) + > + > In order to improve the experience of TypeScript users, we are compiling + > `.d.ts` files from the JSDoc and distributing them with the package + > + +_Released on 2021-01-13._ + +## 1.8.1 + +- [`07b9e7a`](https://github.com/sinonjs/commons/commit/07b9e7a1d784771273a9a58d74945bbc7319b5d4) + Optimize npm package size (Uladzimir Havenchyk) + +_Released on 2020-07-17._ + +## 1.8.0 + +- [`4282205`](https://github.com/sinonjs/commons/commit/4282205343a4dcde2a35ccf2a8c2094300dad369) + Emit deprecationg warnings in node, and keep console info in browsers (mshaaban0) + +_Released on 2020-05-20._ + +## 1.7.2 + +- [`76ad9c1`](https://github.com/sinonjs/commons/commit/76ad9c16bad29f72420ed55bdf45b65d076108c8) + Fix generators causing exceptions in function-name (Sebastian Mayr) + +_Released on 2020-04-08._ + +## 1.7.1 + +- [`0486d25`](https://github.com/sinonjs/commons/commit/0486d250ecec9b5f9aa2210357767e413f4162d3) + Upgrade eslint-config-sinon, add eslint-plugin-jsdoc (Morgan Roderick) + > + > This adds linting of jsdoc + > + +_Released on 2020-02-19._ diff --git a/build/node_modules/@sinonjs/commons/LICENSE b/build/node_modules/@sinonjs/commons/LICENSE new file mode 100644 index 00000000..5a77f0a2 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2018, Sinon.JS +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/@sinonjs/commons/README.md b/build/node_modules/@sinonjs/commons/README.md new file mode 100644 index 00000000..9c420ba5 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/README.md @@ -0,0 +1,16 @@ +# commons + +[![CircleCI](https://circleci.com/gh/sinonjs/commons.svg?style=svg)](https://circleci.com/gh/sinonjs/commons) +[![codecov](https://codecov.io/gh/sinonjs/commons/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/commons) +
Contributor Covenant + +Simple functions shared among the sinon end user libraries + +## Rules + +- Follows the [Sinon.JS compatibility](https://github.com/sinonjs/sinon/blob/master/CONTRIBUTING.md#compatibility) +- 100% test coverage +- Code formatted using [Prettier](https://prettier.io) +- No side effects welcome! (only pure functions) +- No platform specific functions +- One export per file (any bundler can do tree shaking) diff --git a/build/node_modules/@sinonjs/commons/lib/called-in-order.js b/build/node_modules/@sinonjs/commons/lib/called-in-order.js new file mode 100644 index 00000000..4edb67fa --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/called-in-order.js @@ -0,0 +1,57 @@ +"use strict"; + +var every = require("./prototypes/array").every; + +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } + + return callMap[spy.id] < spy.callCount; +} + +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; + + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } + + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } + + return false; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ + +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; + + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} + +module.exports = calledInOrder; diff --git a/build/node_modules/@sinonjs/commons/lib/called-in-order.test.js b/build/node_modules/@sinonjs/commons/lib/called-in-order.test.js new file mode 100644 index 00000000..00d8b8bc --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/called-in-order.test.js @@ -0,0 +1,121 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var calledInOrder = require("./called-in-order"); +var sinon = require("@sinonjs/referee-sinon").sinon; + +var testObject1 = { + someFunction: function() { + return; + } +}; +var testObject2 = { + otherFunction: function() { + return; + } +}; +var testObject3 = { + thirdFunction: function() { + return; + } +}; + +function testMethod() { + testObject1.someFunction(); + testObject2.otherFunction(); + testObject2.otherFunction(); + testObject2.otherFunction(); + testObject3.thirdFunction(); +} + +describe("calledInOrder", function() { + beforeEach(function() { + sinon.stub(testObject1, "someFunction"); + sinon.stub(testObject2, "otherFunction"); + sinon.stub(testObject3, "thirdFunction"); + testMethod(); + }); + afterEach(function() { + testObject1.someFunction.restore(); + testObject2.otherFunction.restore(); + testObject3.thirdFunction.restore(); + }); + + describe("given single array argument", function() { + describe("when stubs were called in expected order", function() { + it("returns true", function() { + assert.isTrue( + calledInOrder([ + testObject1.someFunction, + testObject2.otherFunction + ]) + ); + assert.isTrue( + calledInOrder([ + testObject1.someFunction, + testObject2.otherFunction, + testObject2.otherFunction, + testObject3.thirdFunction + ]) + ); + }); + }); + + describe("when stubs were called in unexpected order", function() { + it("returns false", function() { + assert.isFalse( + calledInOrder([ + testObject2.otherFunction, + testObject1.someFunction + ]) + ); + assert.isFalse( + calledInOrder([ + testObject2.otherFunction, + testObject1.someFunction, + testObject1.someFunction, + testObject3.thirdFunction + ]) + ); + }); + }); + }); + + describe("given multiple arguments", function() { + describe("when stubs were called in expected order", function() { + it("returns true", function() { + assert.isTrue( + calledInOrder( + testObject1.someFunction, + testObject2.otherFunction + ) + ); + assert.isTrue( + calledInOrder( + testObject1.someFunction, + testObject2.otherFunction, + testObject3.thirdFunction + ) + ); + }); + }); + + describe("when stubs were called in unexpected order", function() { + it("returns false", function() { + assert.isFalse( + calledInOrder( + testObject2.otherFunction, + testObject1.someFunction + ) + ); + assert.isFalse( + calledInOrder( + testObject2.otherFunction, + testObject1.someFunction, + testObject3.thirdFunction + ) + ); + }); + }); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/class-name.js b/build/node_modules/@sinonjs/commons/lib/class-name.js new file mode 100644 index 00000000..bcd26bae --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/class-name.js @@ -0,0 +1,27 @@ +"use strict"; + +var functionName = require("./function-name"); + +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + return ( + (value.constructor && value.constructor.name) || + // The next branch is for IE11 support only: + // Because the name property is not set on the prototype + // of the Function object, we finally try to grab the + // name from its definition. This will never be reached + // in node, so we are not able to test this properly. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + (typeof value.constructor === "function" && + /* istanbul ignore next */ + functionName(value.constructor)) || + null + ); +} + +module.exports = className; diff --git a/build/node_modules/@sinonjs/commons/lib/class-name.test.js b/build/node_modules/@sinonjs/commons/lib/class-name.test.js new file mode 100644 index 00000000..d091506a --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/class-name.test.js @@ -0,0 +1,37 @@ +"use strict"; +/* eslint-disable no-empty-function */ + +var assert = require("@sinonjs/referee").assert; +var className = require("./class-name"); + +describe("className", function() { + it("returns the class name of an instance", function() { + // Because eslint-config-sinon disables es6, we can't + // use a class definition here + // https://github.com/sinonjs/eslint-config-sinon/blob/master/index.js + // var instance = new (class TestClass {})(); + var instance = new (function TestClass() {})(); + var name = className(instance); + assert.equals(name, "TestClass"); + }); + + it("returns 'Object' for {}", function() { + var name = className({}); + assert.equals(name, "Object"); + }); + + it("returns null for an object that has no prototype", function() { + var obj = Object.create(null); + var name = className(obj); + assert.equals(name, null); + }); + + it("returns null for an object whose prototype was mangled", function() { + // This is what Node v6 and v7 do for objects returned by querystring.parse() + function MangledObject() {} + MangledObject.prototype = Object.create(null); + var obj = new MangledObject(); + var name = className(obj); + assert.equals(name, null); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/deprecated.js b/build/node_modules/@sinonjs/commons/lib/deprecated.js new file mode 100644 index 00000000..ad68cc93 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/deprecated.js @@ -0,0 +1,58 @@ +/* eslint-disable no-console */ +"use strict"; + +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function(func, msg) { + var wrapped = function() { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; + } + return wrapped; +}; + +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function(packageName, funcName) { + return ( + packageName + + "." + + funcName + + " is deprecated and will be removed from the public API in a future version of " + + packageName + + "." + ); +}; + +/** + * Prints a warning on the console, when it exists + * + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function(msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); + } +}; diff --git a/build/node_modules/@sinonjs/commons/lib/deprecated.test.js b/build/node_modules/@sinonjs/commons/lib/deprecated.test.js new file mode 100644 index 00000000..90343459 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/deprecated.test.js @@ -0,0 +1,100 @@ +/* eslint-disable no-console */ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var sinon = require("@sinonjs/referee-sinon").sinon; + +var deprecated = require("./deprecated"); + +var msg = "test"; + +describe("deprecated", function() { + describe("defaultMsg", function() { + it("should return a string", function() { + assert.equals( + deprecated.defaultMsg("sinon", "someFunc"), + "sinon.someFunc is deprecated and will be removed from the public API in a future version of sinon." + ); + }); + }); + + describe("printWarning", function() { + beforeEach(function() { + sinon.replace(process, "emitWarning", sinon.fake()); + }); + + afterEach(sinon.restore); + + describe("when `process.emitWarning` is defined", function() { + it("should call process.emitWarning with a msg", function() { + deprecated.printWarning(msg); + assert.calledOnceWith(process.emitWarning, msg); + }); + }); + + describe("when `process.emitWarning` is undefined", function() { + beforeEach(function() { + sinon.replace(console, "info", sinon.fake()); + sinon.replace(console, "log", sinon.fake()); + process.emitWarning = undefined; + }); + + afterEach(sinon.restore); + + describe("when `console.info` is defined", function() { + it("should call `console.info` with a message", function() { + deprecated.printWarning(msg); + assert.calledOnceWith(console.info, msg); + }); + }); + + describe("when `console.info` is undefined", function() { + it("should call `console.log` with a message", function() { + console.info = undefined; + deprecated.printWarning(msg); + assert.calledOnceWith(console.log, msg); + }); + }); + }); + }); + + describe("wrap", function() { + var method = sinon.fake(); + var wrapped; + + beforeEach(function() { + wrapped = deprecated.wrap(method, msg); + }); + + it("should return a wrapper function", function() { + assert.match(wrapped, sinon.match.func); + }); + + it("should assign the prototype of the passed method", function() { + assert.equals(method.prototype, wrapped.prototype); + }); + + context("when the passed method has falsy prototype", function() { + it("should not be assigned to the wrapped method", function() { + method.prototype = null; + wrapped = deprecated.wrap(method, msg); + assert.match(wrapped.prototype, sinon.match.object); + }); + }); + + context("when invoking the wrapped function", function() { + before(function() { + sinon.replace(deprecated, "printWarning", sinon.fake()); + wrapped({}); + }); + + it("should call `printWarning` before invoking", function() { + assert.calledOnceWith(deprecated.printWarning, msg); + }); + + it("should invoke the passed method with the given arguments", function() { + assert.calledOnceWith(method, {}); + }); + }); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/every.js b/build/node_modules/@sinonjs/commons/lib/every.js new file mode 100644 index 00000000..08274b4d --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/every.js @@ -0,0 +1,27 @@ +"use strict"; + +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function() { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; + } + + return pass; +}; diff --git a/build/node_modules/@sinonjs/commons/lib/every.test.js b/build/node_modules/@sinonjs/commons/lib/every.test.js new file mode 100644 index 00000000..f893d43d --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/every.test.js @@ -0,0 +1,41 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var sinon = require("@sinonjs/referee-sinon").sinon; +var every = require("./every"); + +describe("util/core/every", function() { + it("returns true when the callback function returns true for every element in an iterable", function() { + var obj = [true, true, true, true]; + var allTrue = every(obj, function(val) { + return val; + }); + + assert(allTrue); + }); + + it("returns false when the callback function returns false for any element in an iterable", function() { + var obj = [true, true, true, false]; + var result = every(obj, function(val) { + return val; + }); + + assert.isFalse(result); + }); + + it("calls the given callback once for each item in an iterable until it returns false", function() { + var iterableOne = [true, true, true, true]; + var iterableTwo = [true, true, false, true]; + var callback = sinon.spy(function(val) { + return val; + }); + + every(iterableOne, callback); + assert.equals(callback.callCount, 4); + + callback.resetHistory(); + + every(iterableTwo, callback); + assert.equals(callback.callCount, 3); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/function-name.js b/build/node_modules/@sinonjs/commons/lib/function-name.js new file mode 100644 index 00000000..199b04e0 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/function-name.js @@ -0,0 +1,29 @@ +"use strict"; + +/** + * Returns a display name for a function + * + * @param {Function} func + * @returns {string} + */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; diff --git a/build/node_modules/@sinonjs/commons/lib/function-name.test.js b/build/node_modules/@sinonjs/commons/lib/function-name.test.js new file mode 100644 index 00000000..6dda3a42 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/function-name.test.js @@ -0,0 +1,76 @@ +"use strict"; + +var jsc = require("jsverify"); +var refute = require("@sinonjs/referee-sinon").refute; + +var functionName = require("./function-name"); + +describe("function-name", function() { + it("should return empty string if func is falsy", function() { + jsc.assertForall("falsy", function(fn) { + return functionName(fn) === ""; + }); + }); + + it("should use displayName by default", function() { + jsc.assertForall("nestring", function(displayName) { + var fn = { displayName: displayName }; + + return functionName(fn) === fn.displayName; + }); + }); + + it("should use name if displayName is not available", function() { + jsc.assertForall("nestring", function(name) { + var fn = { name: name }; + + return functionName(fn) === fn.name; + }); + }); + + it("should fallback to string parsing", function() { + jsc.assertForall("nat", function(naturalNumber) { + var name = "fn" + naturalNumber; + var fn = { + toString: function() { + return "\nfunction " + name; + } + }; + + return functionName(fn) === name; + }); + }); + + it("should not fail when a name cannot be found", function() { + refute.exception(function() { + var fn = { + toString: function() { + return "\nfunction ("; + } + }; + + functionName(fn); + }); + }); + + it("should not fail when toString is undefined", function() { + refute.exception(function() { + functionName(Object.create(null)); + }); + }); + + it("should not fail when toString throws", function() { + refute.exception(function() { + var fn; + try { + // eslint-disable-next-line no-eval + fn = eval("(function*() {})")().constructor; + } catch (e) { + // env doesn't support generators + return; + } + + functionName(fn); + }); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/global.js b/build/node_modules/@sinonjs/commons/lib/global.js new file mode 100644 index 00000000..51715a27 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/global.js @@ -0,0 +1,22 @@ +"use strict"; + +/** + * A reference to the global object + * + * @type {object} globalObject + */ +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} + +module.exports = globalObject; diff --git a/build/node_modules/@sinonjs/commons/lib/global.test.js b/build/node_modules/@sinonjs/commons/lib/global.test.js new file mode 100644 index 00000000..e49b3da1 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/global.test.js @@ -0,0 +1,16 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var globalObject = require("./global"); + +describe("global", function() { + before(function() { + if (typeof global === "undefined") { + this.skip(); + } + }); + + it("is same as global", function() { + assert.same(globalObject, global); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/index.js b/build/node_modules/@sinonjs/commons/lib/index.js new file mode 100644 index 00000000..54048572 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/index.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string") +}; diff --git a/build/node_modules/@sinonjs/commons/lib/index.test.js b/build/node_modules/@sinonjs/commons/lib/index.test.js new file mode 100644 index 00000000..cac58a03 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/index.test.js @@ -0,0 +1,29 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var index = require("./index"); + +var expectedMethods = [ + "calledInOrder", + "className", + "every", + "functionName", + "orderByFirstCall", + "typeOf", + "valueToString" +]; +var expectedObjectProperties = ["deprecated", "prototypes"]; + +describe("package", function() { + expectedMethods.forEach(function(name) { + it("should export a method named " + name, function() { + assert.isFunction(index[name]); + }); + }); + + expectedObjectProperties.forEach(function(name) { + it("should export an object property named " + name, function() { + assert.isObject(index[name]); + }); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/order-by-first-call.js b/build/node_modules/@sinonjs/commons/lib/order-by-first-call.js new file mode 100644 index 00000000..c3d47edf --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/order-by-first-call.js @@ -0,0 +1,36 @@ +"use strict"; + +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; + +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ + +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} + +module.exports = orderByFirstCall; diff --git a/build/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js b/build/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js new file mode 100644 index 00000000..485ad431 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/order-by-first-call.test.js @@ -0,0 +1,52 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var knuthShuffle = require("knuth-shuffle").knuthShuffle; +var sinon = require("@sinonjs/referee-sinon").sinon; +var orderByFirstCall = require("./order-by-first-call"); + +describe("orderByFirstCall", function() { + it("should order an Array of spies by the callId of the first call, ascending", function() { + // create an array of spies + var spies = [ + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy(), + sinon.spy() + ]; + + // call all the spies + spies.forEach(function(spy) { + spy(); + }); + + // add a few uncalled spies + spies.push(sinon.spy()); + spies.push(sinon.spy()); + + // randomise the order of the spies + knuthShuffle(spies); + + var sortedSpies = orderByFirstCall(spies); + + assert.equals(sortedSpies.length, spies.length); + + var orderedByFirstCall = sortedSpies.every(function(spy, index) { + if (index + 1 === sortedSpies.length) { + return true; + } + var nextSpy = sortedSpies[index + 1]; + + // uncalled spies should be ordered first + if (!spy.called) { + return true; + } + + return spy.calledImmediatelyBefore(nextSpy); + }); + + assert.isTrue(orderedByFirstCall); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/README.md b/build/node_modules/@sinonjs/commons/lib/prototypes/README.md new file mode 100644 index 00000000..aff3d914 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/README.md @@ -0,0 +1,43 @@ +# Prototypes + +The functions in this folder are to be use for keeping cached references to the built-in prototypes, so that people can't inadvertently break the library by making mistakes in userland. + +See https://github.com/sinonjs/sinon/pull/1523 + +## Without cached references + +```js +// in userland, the library user needs to replace the filter method on +// Array.prototype +var array = [1, 2, 3]; +sinon.replace(array, "filter", sinon.fake.returns(2)); + +// in a sinon module, the library author needs to use the filter method +var someArray = ["a", "b", 42, "c"]; +var answer = filter(someArray, function(v) { + return v === 42; +}); + +console.log(answer); +// => 2 +``` + +## With cached references + +```js +// in userland, the library user needs to replace the filter method on +// Array.prototype +var array = [1, 2, 3]; +sinon.replace(array, "filter", sinon.fake.returns(2)); + +// in a sinon module, the library author needs to use the filter method +// get a reference to the original Array.prototype.filter +var filter = require("@sinonjs/commons").prototypes.array.filter; +var someArray = ["a", "b", 42, "c"]; +var answer = filter(someArray, function(v) { + return v === 42; +}); + +console.log(answer); +// => 42 +``` diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/array.js b/build/node_modules/@sinonjs/commons/lib/prototypes/array.js new file mode 100644 index 00000000..0e332b5d --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/array.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Array.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype.js b/build/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype.js new file mode 100644 index 00000000..0560a001 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/copy-prototype.js @@ -0,0 +1,21 @@ +"use strict"; + +var call = Function.call; + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function(result, name) { + // ignore size because it throws from Map + if ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof prototype[name] === "function" + ) { + result[name] = call.bind(prototype[name]); + } + + return result; + }, Object.create(null)); +}; diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/function.js b/build/node_modules/@sinonjs/commons/lib/prototypes/function.js new file mode 100644 index 00000000..28d0cb3f --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/function.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Function.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/index.js b/build/node_modules/@sinonjs/commons/lib/prototypes/index.js new file mode 100644 index 00000000..6ca7f841 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/index.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string") +}; diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/index.test.js b/build/node_modules/@sinonjs/commons/lib/prototypes/index.test.js new file mode 100644 index 00000000..926f4f1b --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/index.test.js @@ -0,0 +1,51 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; + +var arrayProto = require("./index").array; +var functionProto = require("./index").function; +var mapProto = require("./index").map; +var objectProto = require("./index").object; +var setProto = require("./index").set; +var stringProto = require("./index").string; + +describe("prototypes", function() { + describe(".array", function() { + verifyProperties(arrayProto, Array); + }); + describe(".function", function() { + verifyProperties(functionProto, Function); + }); + describe(".map", function() { + verifyProperties(mapProto, Map); + }); + describe(".object", function() { + verifyProperties(objectProto, Object); + }); + describe(".set", function() { + verifyProperties(setProto, Set); + }); + describe(".string", function() { + verifyProperties(stringProto, String); + }); +}); + +function verifyProperties(p, origin) { + it("should have all the methods of the origin prototype", function() { + var methodNames = Object.getOwnPropertyNames(origin.prototype).filter( + function(name) { + return ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof origin.prototype[name] === "function" + ); + } + ); + + methodNames.forEach(function(name) { + assert.isTrue(Object.prototype.hasOwnProperty.call(p, name), name); + }); + }); +} diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/map.js b/build/node_modules/@sinonjs/commons/lib/prototypes/map.js new file mode 100644 index 00000000..793d08b9 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/map.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Map.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/object.js b/build/node_modules/@sinonjs/commons/lib/prototypes/object.js new file mode 100644 index 00000000..5b18b567 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/object.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Object.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/set.js b/build/node_modules/@sinonjs/commons/lib/prototypes/set.js new file mode 100644 index 00000000..b5ade924 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/set.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Set.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/prototypes/string.js b/build/node_modules/@sinonjs/commons/lib/prototypes/string.js new file mode 100644 index 00000000..edc905e4 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/prototypes/string.js @@ -0,0 +1,5 @@ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(String.prototype); diff --git a/build/node_modules/@sinonjs/commons/lib/type-of.js b/build/node_modules/@sinonjs/commons/lib/type-of.js new file mode 100644 index 00000000..97a0bb9c --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/type-of.js @@ -0,0 +1,13 @@ +"use strict"; + +var type = require("type-detect"); + +/** + * Returns the lower-case result of running type from type-detect on the value + * + * @param {*} value + * @returns {string} + */ +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; diff --git a/build/node_modules/@sinonjs/commons/lib/type-of.test.js b/build/node_modules/@sinonjs/commons/lib/type-of.test.js new file mode 100644 index 00000000..5fcfc745 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/type-of.test.js @@ -0,0 +1,51 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var typeOf = require("./type-of"); + +describe("typeOf", function() { + it("returns boolean", function() { + assert.equals(typeOf(false), "boolean"); + }); + + it("returns string", function() { + assert.equals(typeOf("Sinon.JS"), "string"); + }); + + it("returns number", function() { + assert.equals(typeOf(123), "number"); + }); + + it("returns object", function() { + assert.equals(typeOf({}), "object"); + }); + + it("returns function", function() { + assert.equals( + typeOf(function() { + return undefined; + }), + "function" + ); + }); + + it("returns undefined", function() { + assert.equals(typeOf(undefined), "undefined"); + }); + + it("returns null", function() { + assert.equals(typeOf(null), "null"); + }); + + it("returns array", function() { + assert.equals(typeOf([]), "array"); + }); + + it("returns regexp", function() { + assert.equals(typeOf(/.*/), "regexp"); + }); + + it("returns date", function() { + assert.equals(typeOf(new Date()), "date"); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/lib/value-to-string.js b/build/node_modules/@sinonjs/commons/lib/value-to-string.js new file mode 100644 index 00000000..fb14782b --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/value-to-string.js @@ -0,0 +1,17 @@ +"use strict"; + +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); + } + return String(value); +} + +module.exports = valueToString; diff --git a/build/node_modules/@sinonjs/commons/lib/value-to-string.test.js b/build/node_modules/@sinonjs/commons/lib/value-to-string.test.js new file mode 100644 index 00000000..5cae5017 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/lib/value-to-string.test.js @@ -0,0 +1,20 @@ +"use strict"; + +var assert = require("@sinonjs/referee-sinon").assert; +var valueToString = require("./value-to-string"); + +describe("util/core/valueToString", function() { + it("returns string representation of an object", function() { + var obj = {}; + + assert.equals(valueToString(obj), obj.toString()); + }); + + it("returns 'null' for literal null'", function() { + assert.equals(valueToString(null), "null"); + }); + + it("returns 'undefined' for literal undefined", function() { + assert.equals(valueToString(undefined), "undefined"); + }); +}); diff --git a/build/node_modules/@sinonjs/commons/package.json b/build/node_modules/@sinonjs/commons/package.json new file mode 100644 index 00000000..3a3d9d3a --- /dev/null +++ b/build/node_modules/@sinonjs/commons/package.json @@ -0,0 +1,96 @@ +{ + "_from": "@sinonjs/commons@^1.8.3", + "_id": "@sinonjs/commons@1.8.3", + "_inBundle": false, + "_integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "_location": "/@sinonjs/commons", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@sinonjs/commons@^1.8.3", + "name": "@sinonjs/commons", + "escapedName": "@sinonjs%2fcommons", + "scope": "@sinonjs", + "rawSpec": "^1.8.3", + "saveSpec": null, + "fetchSpec": "^1.8.3" + }, + "_requiredBy": [ + "/@sinonjs/fake-timers", + "/@sinonjs/samsam", + "/nise", + "/sinon" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/commons/-/commons-1.8.3.tgz", + "_shasum": "3802ddd21a50a949b6721ddd72da36e67e7f1b2d", + "_spec": "@sinonjs/commons@^1.8.3", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", + "author": "", + "bugs": { + "url": "https://github.com/sinonjs/commons/issues" + }, + "bundleDependencies": false, + "dependencies": { + "type-detect": "4.0.8" + }, + "deprecated": false, + "description": "Simple functions shared among the sinon end user libraries", + "devDependencies": { + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.0", + "@sinonjs/referee-sinon": "7.0.2", + "@studio/changes": "^2.0.0", + "eslint": "^6.1.0", + "eslint-config-prettier": "^6.3.0", + "eslint-config-sinon": "^4.0.0", + "eslint-plugin-ie11": "^1.0.0", + "eslint-plugin-jsdoc": "^22.1.0", + "eslint-plugin-mocha": "^6.1.1", + "eslint-plugin-prettier": "^3.0.0", + "husky": "4.2.3", + "jsverify": "0.8.4", + "knuth-shuffle": "^1.0.8", + "lint-staged": "10.1.1", + "mocha": "7.1.0", + "nyc": "15.0.0", + "prettier": "^1.14.3", + "typescript": "^4.1.3" + }, + "files": [ + "lib", + "types" + ], + "homepage": "https://github.com/sinonjs/commons#readme", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "license": "BSD-3-Clause", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint" + }, + "main": "lib/index.js", + "name": "@sinonjs/commons", + "repository": { + "type": "git", + "url": "git+https://github.com/sinonjs/commons.git" + }, + "scripts": { + "build": "rm -rf types && tsc", + "lint": "eslint .", + "postversion": "git push --follow-tags && npm publish", + "precommit": "lint-staged", + "prepublishOnly": "npm run build", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "npm run test-check-coverage", + "test": "mocha --recursive -R dot \"lib/**/*.test.js\"", + "test-check-coverage": "npm run test-coverage && nyc check-coverage --branches 100 --functions 100 --lines 100", + "test-coverage": "nyc --reporter text --reporter html --reporter lcovonly npm run test", + "version": "changes --commits --footer" + }, + "types": "./types/index.d.ts", + "version": "1.8.3" +} diff --git a/build/node_modules/@sinonjs/commons/types/called-in-order.d.ts b/build/node_modules/@sinonjs/commons/types/called-in-order.d.ts new file mode 100644 index 00000000..1a4508be --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/called-in-order.d.ts @@ -0,0 +1,36 @@ +export = calledInOrder; +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +declare function calledInOrder(spies: SinonProxy[] | SinonProxy, ...args: any[]): boolean; +declare namespace calledInOrder { + export { SinonProxy }; +} +/** + * A Sinon proxy object (fake, spy, stub) + */ +type SinonProxy = { + /** + * - A method that determines if this proxy was called before another one + */ + calledBefore: Function; + /** + * - Some id + */ + id: string; + /** + * - Number of times this proxy has been called + */ + callCount: number; +}; diff --git a/build/node_modules/@sinonjs/commons/types/class-name.d.ts b/build/node_modules/@sinonjs/commons/types/class-name.d.ts new file mode 100644 index 00000000..df3687b9 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/class-name.d.ts @@ -0,0 +1,8 @@ +export = className; +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +declare function className(value: object): (string | null); diff --git a/build/node_modules/@sinonjs/commons/types/deprecated.d.ts b/build/node_modules/@sinonjs/commons/types/deprecated.d.ts new file mode 100644 index 00000000..81a35bf8 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/deprecated.d.ts @@ -0,0 +1,3 @@ +export function wrap(func: Function, msg: string): Function; +export function defaultMsg(packageName: string, funcName: string): string; +export function printWarning(msg: string): undefined; diff --git a/build/node_modules/@sinonjs/commons/types/every.d.ts b/build/node_modules/@sinonjs/commons/types/every.d.ts new file mode 100644 index 00000000..bcfa64e0 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/every.d.ts @@ -0,0 +1,2 @@ +declare function _exports(obj: object, fn: Function): boolean; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/function-name.d.ts b/build/node_modules/@sinonjs/commons/types/function-name.d.ts new file mode 100644 index 00000000..f27d519a --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/function-name.d.ts @@ -0,0 +1,2 @@ +declare function _exports(func: Function): string; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/global.d.ts b/build/node_modules/@sinonjs/commons/types/global.d.ts new file mode 100644 index 00000000..0f54a635 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/global.d.ts @@ -0,0 +1,7 @@ +export = globalObject; +/** + * A reference to the global object + * + * @type {object} globalObject + */ +declare var globalObject: object; diff --git a/build/node_modules/@sinonjs/commons/types/index.d.ts b/build/node_modules/@sinonjs/commons/types/index.d.ts new file mode 100644 index 00000000..7d675b18 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/index.d.ts @@ -0,0 +1,17 @@ +export const global: any; +export const calledInOrder: typeof import("./called-in-order"); +export const className: typeof import("./class-name"); +export const deprecated: typeof import("./deprecated"); +export const every: (obj: any, fn: Function) => boolean; +export const functionName: (func: Function) => string; +export const orderByFirstCall: typeof import("./order-by-first-call"); +export const prototypes: { + array: any; + function: any; + map: any; + object: any; + set: any; + string: any; +}; +export const typeOf: (value: any) => string; +export const valueToString: typeof import("./value-to-string"); diff --git a/build/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts b/build/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts new file mode 100644 index 00000000..a9a6037d --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/order-by-first-call.d.ts @@ -0,0 +1,26 @@ +export = orderByFirstCall; +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +declare function orderByFirstCall(spies: SinonProxy[] | SinonProxy): SinonProxy[]; +declare namespace orderByFirstCall { + export { SinonProxy }; +} +/** + * A Sinon proxy object (fake, spy, stub) + */ +type SinonProxy = { + /** + * - A method that can return the first call + */ + getCall: Function; +}; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/array.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/array.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/array.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/copy-prototype.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/copy-prototype.d.ts new file mode 100644 index 00000000..1479b93c --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/copy-prototype.d.ts @@ -0,0 +1,2 @@ +declare function _exports(prototype: any): any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/function.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/function.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/function.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/index.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/index.d.ts new file mode 100644 index 00000000..0026d6c2 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/index.d.ts @@ -0,0 +1,7 @@ +export declare const array: any; +declare const _function: any; +export { _function as function }; +export declare const map: any; +export declare const object: any; +export declare const set: any; +export declare const string: any; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/map.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/map.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/map.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/object.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/object.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/object.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/set.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/set.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/set.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/prototypes/string.d.ts b/build/node_modules/@sinonjs/commons/types/prototypes/string.d.ts new file mode 100644 index 00000000..1cce6350 --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/prototypes/string.d.ts @@ -0,0 +1,2 @@ +declare const _exports: any; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/type-of.d.ts b/build/node_modules/@sinonjs/commons/types/type-of.d.ts new file mode 100644 index 00000000..fc72887c --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/type-of.d.ts @@ -0,0 +1,2 @@ +declare function _exports(value: any): string; +export = _exports; diff --git a/build/node_modules/@sinonjs/commons/types/value-to-string.d.ts b/build/node_modules/@sinonjs/commons/types/value-to-string.d.ts new file mode 100644 index 00000000..19b086cd --- /dev/null +++ b/build/node_modules/@sinonjs/commons/types/value-to-string.d.ts @@ -0,0 +1,8 @@ +export = valueToString; +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +declare function valueToString(value: any): string; diff --git a/build/node_modules/@sinonjs/fake-timers/CHANGELOG.md b/build/node_modules/@sinonjs/fake-timers/CHANGELOG.md new file mode 100644 index 00000000..8d0c29e2 --- /dev/null +++ b/build/node_modules/@sinonjs/fake-timers/CHANGELOG.md @@ -0,0 +1,464 @@ + +9.1.1 / 2022-03-05 +================== + + * fix(timer.refresh): should just change `callAt` (#425) + +9.1.0 / 2022-02-03 +================== + + * add hasRef (#419) + +9.0.0 / 2022-01-28 +================== + + * Breaking: remove Node 10 from running tests + * chore(ci): do not hard code node versions (#417) + * chore: test on node 17 (#416) + * fix global performance node 16 (#412) + * Bump node-fetch from 2.6.1 to 2.6.7 (#414) + * Bump cached-path-relative from 1.0.2 to 1.1.0 (#413) + * Clarify async usage (#411) + * Faking performance when not present should throw an error (and minor changes) - fix for #374 (#400) + * Add performance to config.toFake + +8.1.0 / 2021-11-03 +================== + + * Add native timer clean-up behavior (#407) + * give a hint about how to get type defs (#405) + +8.0.1 / 2021-09-25 +================== + + * fix: handle missing stack when throwing recursion errors (#401) + +8.0.0 / 2021-09-15 +================== + + * Remove generated typescript definitions. If you use this package with TypeScript, install `@types/sinonjs__fake-timers` after upgrading (#386) + * Issue 390 implicit dependencies on faking interval (#391) + * replace var with const/let (#392) + * Retry - Add stack trace to code recursively scheduling timers #325 (#375) + +7.1.2 / 2021-05-28 +================== + + * Fix #382 by making config fields optional (#383) + * Fix #347 : Support util.promisify + +7.1.1 / 2021-05-27 +================== + + * Fix JSDoc for createClock + +7.1.0 / 2021-05-20 +================== + + * Remove Safari from Sauce Lab (ref #380) + * Bump hosted-git-info from 2.6.0 to 2.8.9 + * Bump handlebars from 4.7.6 to 4.7.7 + * Bump lodash from 4.17.19 to 4.17.21 + * Add in latest Safari and evergreen Edge + * Drop IE11 and Safari 9 + * chore: add type tests (#373) + * remove constructor types + * use globalThis to avoid conflicts + * Update yargs-parser + * Update mkdirp + * Upgrade jsdom + * Upgrade mochify to latest + * Upgrade Mocha to latest + * Bump y18n from 4.0.0 to 4.0.1 + * make config optional + * add a bunch more types + +7.0.5 / 2021-04-11 +================== + + * Fix up some clock types in JSDoc (becomes `.d.ts`) (#370) + * Fix refresh arguments forwarding (#369) + +7.0.4 / 2021-04-08 +================== + + * Fix usage with TypeScript + +7.0.3 / 2021-03-02 +================== + + * Removing the use of eval in Node.js (#331) + * Drop Node 8 + * Add docs about typings (#357) + +7.0.2 / 2021-01-18 +================== + + * Make config options optional in TypeScript defs (#354) + +7.0.1 / 2021-01-14 +================== + + * Update README section about browser use + +7.0.0 / 2021-01-12 +================== + + * Remove bundle from package. If you're loading `fake-timers` via + script tag, you'll now have to provide your own bundled version + * Add .d.ts files to package + * Revert "Add stack trace to code recursively scheduling timers" (#338) + * Remove unnecessary durations and use globals + * Support timeout.refresh in node environments + * Fix #319: Error message changed to TypeError + * Fix #319: The use of 'eval' has been removed + * Fix #304: clearTimeout clears setInterval and clearInterval clears setTimeout + * Remove config.target (#318) + + +6.0.1 / 2020-03-24 +================== + + * Support util.promisify in Node (#223) + +6.0.0 / 2020-02-04 +================== + + * Rename project to `@sinonjs/fake-timers` + +5.1.2 / 2019-12-19 +================== + + * Use global from `@sinonjs/commons` + * Fix setSystemTime affects hrtime if its called multiple times. + * Test coverage: use nyc + +5.1.1 / 2019-10-21 +================== + + * Fix global ReferenceError (#273) + +5.1.0 / 2019-10-14 +================== + + * Upgrade lolex with async versions of most calls + +5.0.1 / 2019-10-10 +================== + + * Upgrade eslint, add prettier + * Use `--no-detect-globals` to bundle and test lolex (#270) + +5.0.0 / 2019-10-07 +================== + + * Avoid installing setImmediate in unsupported environments + * fix #246: non-constructor Date() should return a string + +4.2.0 / 2019-08-04 +================== + + * Fix support for replacing the JSDOM performance field + +4.1.0 / 2019-06-04 +================== + + * Fix crash on Bash version 3 (macOS) + * Support hrtime.bigint() + * fix: count microtasks in countTimers + * Return empty arrays for performance.getEntries, other relevant methods + +4.0.1 / 2019-04-17 +================== + + * Remove sinon: added by mistake + +4.0.0 / 2019-04-17 +================== + + * Drop support for IE9 and IE10: link to supported browsers in README + * No more ExperimentalWarnings in Node environment for queueMicrotask() if it's not used in user's code + +3.1.0 / 2019-02-11 +================== + + * default timeout set to 50ms + * first implementation of requestIdleCallback and cancelIdleCallback + * fixed accidentally performance.now() -> x.now() replacement + * added queueMicrotask + +3.0.0 / 2018-10-08 +================== + + * Add countTimers method + * Disallow negative ticks (breaking API change!) + * Avoid exposing hrNow + * Fix #207 - round-off errors in `hrtime` + * Truncate sub-nanosecond values for `hrtime` + * Truncate sub-millisceond values for `Date.now()` + +v2.7.5 / 2018-09-19 +================== + + * fix: handle floating point in hrtime (#210) + * fix: reset high resolution timer on clock.reset (#209) + * Add an error when creating a clock with no Date object (#205) + +v2.7.4 / 2018-09-05 +================== + + * performance.mark related fixes for failing Safari, IE 10 and IE 11 tests + +v2.7.3 / 2018-09-05 +================== + + * Fix for #200: TypeError on performance.mark + +v2.7.2 / 2018-09-04 +================== + + * fix(setInterval): parse `timeout` arg to integer (#202) + * Upgrade insecure dependencies with npm audit fix + +v2.7.1 / 2018-07-06 +================== + * Fix performance replacement on iOS 9.3 + +v2.7.0 / 2018-05-25 +================== + + * reset clock to start + * check Performance exists before touching it + +v2.6.0 / 2018-05-16 +================== + + * Fix `reset` and document it publicly Clear microtick jobs and set now to 0 in reset (#179) + * Access Date on `_global` (#178) + +v2.5.0 / 2018-05-13 +================== + + * feat: respect loopLimit in runMicrotasks (#172) + * assign performance as a property, not as a function + +v2.4.2 / 2018-05-11 +=================== + * Upgrade Mochify to v5.6 (#162) fixed #170 + * Access `Performance` via `_global` (#168) + +v2.4.1 / 2018-05-08 +================== + + * fix: handle negative infinity timeout (#165) + +v2.4.0 / 2018-05-08 +================== + + * Add `withGlobal` export + * expose runMicrotasks + * Fix that performance.mark is undefined after timer install + +v2.3.2 / 2018-01-29 +================== + +* Add files section to package.json to avoid unnecessary package bloat #154 +* Add missing functions in default `toFake` #150 + +v2.3.1 / 2017-11-22 +================== + + * bugfix for a setTimeout() or setSystemTime() within a nextTick() call. (#145) + +v2.3.0 / 2017-11-08 +================== + + * Stops leak of (request|cancel)AnimationFrame into global scope. (#143) + * return timers on uninstall + +v2.2.0 / 2017-11-07 +================== + + * Add support for requestAnimationFrame + * fix negative timeout bug + +v2.1.3 / 2017-10-03 +================== + + * add module entry point (#133) + +v2.1.2 / 2017-07-25 +================== + + * - does not fake process.nextTick by default - added .idea folder to .gitignore - fixed documentation - added clock teardowns in tests + * overflowing the timer correctly (issue #67) + +v2.1.1 / 2017-07-19 +================== + + * support passing parameters in nextTick (fixes #122) + +v2.1.0 / 2017-07-18 +================== + + * Throw error on incorrect install use (#112) + * Add support for process.nextTick + * lolex can now attach itself to the system timers and automatically ad… (#102) + * update hrtime when an interval ticks + +v2.0.0 / 2017-07-13 +================== + + * New install() signature + * Add support for performance.now (#106) + * Fix issue with tick(): setSystemClock then throw + * Update old dependencies + * Added support to automatically increment time (#85) + * Changed internal uninstall method signature + +v1.6.0 / 2017-02-25 +=================== + + * Use common Sinon.JS eslint config + * Allow install to be called with date object + * Remove wrapper function + * Fixed typo in clock.runAll error + +v1.5.2 / 2016-11-10 +=================== + + * Upgrade mocha to latest + * Only overwrite globals when running in IE + +1.5.1 / 2016-07-26 +================== + + * Fix setInterval() behavior with string times + * Incorporate test from PR #65 + * Fix issue #59: context object required 'process' + * fixed a case where runAll was called and there are no timers (#70) + * Correct the clear{Interval|Timeout|Immediate} error message when calling `set*` for a different type of timer. + * Lots of minor changes to tooling and the build process + +v1.5.0 / 2016-05-18 +=================== + + * 1.5.0 + * Check for existence of `process` before using it + * Run to last existing timer + * Add runAll method to run timers until empty + * Turn off Sauce Labs tests for pull requests + * Add tests demonstrating that a fake Date could be created with one argument as a String since this string is in a format recognized by the Date.parse() method. + * Run test-cloud on Travis + * Add process.hrtime() + * Add bithound badge to Readme.md + * Make Travis also run tests in node 4.2 + * Update jslint, referee, sinon, browserify, mocha, mochify + * Rename src/lolex.js to src/lolex-src.js to avoid bithound ignoring it + * Add .bithoundrc + +v1.4.0 / 2015-12-11 +=================== + + * 1.4.0 + * Remove BASH syntax in lint script + * correct test descriptions to match the tests + * correct parseTime() error message so it matches behavior + * don't run test-cloud as part of npm test + * doc: full API reference + * doc: update 'Running tests' section + * doc: update 'Faking the native timers' section + * doc: remove requestAnimationFrame + * Implement clock.next() + * Run lint in CI + * Fix jslint errors + +v1.3.2 / 2015-09-22 +=================== + + * 1.3.2 + * Fix for breaking shimmed setImmediate + +v1.3.1 / 2015-08-20 +=================== + + * Remove error whos reason is no longer accurate + +v1.3.0 / 2015-08-19 +=================== + + * 1.3.0 + * Throw exception on wrong use of clearXYZ() + * Fix for Sinon.JS issue #808 :add setSystemTime() function + * Fix for Sinon.JS issue #766: clearTimeout() no longer clears Immediate/Interval and vice versa + * Update Readme.md to point to LICENSE file + * Fix error in readme about running tests + * Fix for warning about SPDX license format on npm install + +v1.2.2 / 2015-07-22 +=================== + + * 1.2.2 + * Fixing lint mistake + * Update travis to use node@0.12 + * Fix complaint about missing fake setImmediate + * Use license in package.json + +v1.2.1 / 2015-01-06 +=================== + + * New build + * Dodge JSLint... + * Up version + * Proper fix for writable globals in IE + * Make timers writable in old IEs + +v1.2.0 / 2014-12-12 +=================== + + * 1.2.0 + * Fix Sinon.JS issue 624 + * Lint the test files also + * Add .jslintrc + * Delay setImmediate if it is during tick call + * Add test case + * Test behaviour of hasOwnProperty beforehand + * Compare now() with delta + * Use undefined for defined predicate + * Put setImmediate in toFake list + * Capture clock instance for uninstall + * Restore commented out tests + * Add JSLint verification to test + * Configure Travis to run tests in node 0.10.x + * Add .editorconfig + * Fail when faking Date but not setTimeout/setInterval + +v1.1.10 / 2014-11-14 +==================== + + * 1.1.0 Fixes setImmediate problems + * Rely on `timer` initialization to null + * Timer assembly occurs at addTimer callsites + * Sort immediate timers before non-immediate + * Add createdAt to timers + * Sort timers by multiple criteria, not just callAt + * Refactor firstTimerInRange + * Rename `timeouts` property to `timers` + * addTimer is options-driven + +v1.0.0 / 2014-11-12 +=================== + + * Add built file for browsers + * Fix URL + * Don't run tests that require global.__proto__ on IE 9 and IE 10 + * Add "bundle" script to create standalone UMD bundle with browserify + * Float with new test framework versions + * Remove redundant module prefix + * Let Browserify set "global" for us + * Change test framework from Buster to Mocha and Mochify + * Make timer functions independent on `this` + * Change APIs according to Readme + * Change clock-creating interface + * Change Github paths + * Basically working extraction from Sinon.JS diff --git a/build/node_modules/lolex/LICENSE b/build/node_modules/@sinonjs/fake-timers/LICENSE similarity index 100% rename from build/node_modules/lolex/LICENSE rename to build/node_modules/@sinonjs/fake-timers/LICENSE diff --git a/build/node_modules/@sinonjs/fake-timers/README.md b/build/node_modules/@sinonjs/fake-timers/README.md new file mode 100644 index 00000000..22f40d91 --- /dev/null +++ b/build/node_modules/@sinonjs/fake-timers/README.md @@ -0,0 +1,351 @@ +# `@sinonjs/fake-timers` + +[![codecov](https://codecov.io/gh/sinonjs/fake-timers/branch/main/graph/badge.svg)](https://codecov.io/gh/sinonjs/fake-timers) +Contributor Covenant + +JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, `setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, `requestAnimationFrame`, `cancelAnimationFrame`, `requestIdleCallback`, and `cancelIdleCallback`, along with a clock instance that controls the flow of time. FakeTimers also provides a `Date` implementation that gets its time from the clock. + +In addition in browser environment `@sinonjs/fake-timers` provides a `performance` implementation that gets its time from the clock. In Node environments FakeTimers provides a `nextTick` implementation that is synchronized with the clock - and a `process.hrtime` shim that works with the clock. + +`@sinonjs/fake-timers` can be used to simulate passing time in automated tests and other +situations where you want the scheduling semantics, but don't want to actually +wait. + +`@sinonjs/fake-timers` is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js) and targets the [same runtimes](https://sinonjs.org/releases/latest/#supported-runtimes). + +## Autocomplete, IntelliSense and TypeScript definitions + +Version 7 introduced JSDoc to the codebase. This should provide autocomplete and type suggestions in supporting IDEs. If you need more elaborate type support, TypeScript definitions for the Sinon projects are independently maintained by the Definitely Types community: + +``` +npm install -D @types/sinonjs__fake-timers +``` + +## Installation + +`@sinonjs/fake-timers` can be used in both Node and browser environments. Installation is as easy as + +```sh +npm install @sinonjs/fake-timers +``` + +If you want to use `@sinonjs/fake-timers` in a browser you can either build your own bundle or use [Skypack](https://www.skypack.dev). + +## Usage + +To use `@sinonjs/fake-timers`, create a new clock, schedule events on it using the timer +functions and pass time using the `tick` method. + +```js +// In the browser distribution, a global `FakeTimers` is already available +var FakeTimers = require("@sinonjs/fake-timers"); +var clock = FakeTimers.createClock(); + +clock.setTimeout(function () { + console.log( + "The poblano is a mild chili pepper originating in the state of Puebla, Mexico." + ); +}, 15); + +// ... + +clock.tick(15); +``` + +Upon executing the last line, an interesting fact about the +[Poblano](https://en.wikipedia.org/wiki/Poblano) will be printed synchronously to +the screen. If you want to simulate asynchronous behavior, please see the `async` function variants (eg `clock.tick(time)` vs `await clock.tickAsync(time)`). + +The `next`, `runAll`, `runToFrame`, and `runToLast` methods are available to advance the clock. See the +API Reference for more details. + +### Faking the native timers + +When using `@sinonjs/fake-timers` to test timers, you will most likely want to replace the native +timers such that calling `setTimeout` actually schedules a callback with your +clock instance, not the browser's internals. + +Calling `install` with no arguments achieves this. You can call `uninstall` +later to restore things as they were again. + +```js +// In the browser distribution, a global `FakeTimers` is already available +var FakeTimers = require("@sinonjs/fake-timers"); + +var clock = FakeTimers.install(); +// Equivalent to +// var clock = FakeTimers.install(typeof global !== "undefined" ? global : window); + +setTimeout(fn, 15); // Schedules with clock.setTimeout + +clock.uninstall(); +// setTimeout is restored to the native implementation +``` + +To hijack timers in another context pass it to the `install` method. + +```js +var FakeTimers = require("@sinonjs/fake-timers"); +var context = { + setTimeout: setTimeout, // By default context.setTimeout uses the global setTimeout +}; +var clock = FakeTimers.withGlobal(context).install(); + +context.setTimeout(fn, 15); // Schedules with clock.setTimeout + +clock.uninstall(); +// context.setTimeout is restored to the original implementation +``` + +Usually you want to install the timers onto the global object, so call `install` +without arguments. + +#### Automatically incrementing mocked time + +FakeTimers supports the possibility to attach the faked timers to any change +in the real system time. This means that there is no need to `tick()` the +clock in a situation where you won't know **when** to call `tick()`. + +Please note that this is achieved using the original setImmediate() API at a certain +configurable interval `config.advanceTimeDelta` (default: 20ms). Meaning time would +be incremented every 20ms, not in real time. + +An example would be: + +```js +var FakeTimers = require("@sinonjs/fake-timers"); +var clock = FakeTimers.install({ + shouldAdvanceTime: true, + advanceTimeDelta: 40, +}); + +setTimeout(() => { + console.log("this just timed out"); //executed after 40ms +}, 30); + +setImmediate(() => { + console.log("not so immediate"); //executed after 40ms +}); + +setTimeout(() => { + console.log("this timed out after"); //executed after 80ms + clock.uninstall(); +}, 50); +``` + +## API Reference + +### `var clock = FakeTimers.createClock([now[, loopLimit]])` + +Creates a clock. The default +[epoch](https://en.wikipedia.org/wiki/Epoch_%28reference_date%29) is `0`. + +The `now` argument may be a number (in milliseconds) or a Date object. + +The `loopLimit` argument sets the maximum number of timers that will be run when calling `runAll()` before assuming that we have an infinite loop and throwing an error. The default is `1000`. + +### `var clock = FakeTimers.install([config])` + +Installs FakeTimers using the specified config (otherwise with epoch `0` on the global scope). The following configuration options are available + +| Parameter | Type | Default | Description | +| -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `config.now` | Number/Date | 0 | installs FakeTimers with the specified unix epoch | +| `config.toFake` | String[] | ["setTimeout", "clearTimeout", "setImmediate", "clearImmediate","setInterval", "clearInterval", "Date", "requestAnimationFrame", "cancelAnimationFrame", "requestIdleCallback", "cancelIdleCallback", "hrtime", "performance"] | an array with explicit function names (or objects, in the case of "performance") to hijack. _When not set, FakeTimers will automatically fake all methods **except** `nextTick`_ e.g., `FakeTimers.install({ toFake: ["setTimeout","nextTick"]})` will fake only `setTimeout` and `nextTick` | +| `config.loopLimit` | Number | 1000 | the maximum number of timers that will be run when calling runAll() | +| `config.shouldAdvanceTime` | Boolean | false | tells FakeTimers to increment mocked time automatically based on the real system time shift (e.g. the mocked time will be incremented by 20ms for every 20ms change in the real system time) | +| `config.advanceTimeDelta` | Number | 20 | relevant only when using with `shouldAdvanceTime: true`. increment mocked time by `advanceTimeDelta` ms every `advanceTimeDelta` ms change in the real system time. | +| `config.shouldClearNativeTimers` | Boolean | false | tells FakeTimers to clear 'native' (i.e. not fake) timers by delegating to their respective handlers. These are not cleared by default, leading to potentially unexpected behavior if timers existed prior to installing FakeTimers. | + +### `var id = clock.setTimeout(callback, timeout)` + +Schedules the callback to be fired once `timeout` milliseconds have ticked by. + +In Node.js `setTimeout` returns a timer object. FakeTimers will do the same, however +its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearTimeout(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setTimeout`. + +### `var id = clock.setInterval(callback, timeout)` + +Schedules the callback to be fired every time `timeout` milliseconds have ticked +by. + +In Node.js `setInterval` returns a timer object. FakeTimers will do the same, however +its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearInterval(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setInterval`. + +### `var id = clock.setImmediate(callback)` + +Schedules the callback to be fired once `0` milliseconds have ticked by. Note +that you'll still have to call `clock.tick()` for the callback to fire. If +called during a tick the callback won't fire until `1` millisecond has ticked +by. + +In Node.js `setImmediate` returns a timer object. FakeTimers will do the same, +however its `ref()` and `unref()` methods have no effect. + +In browsers a timer ID is returned. + +### `clock.clearImmediate(id)` + +Clears the timer given the ID or timer object, as long as it was created using +`setImmediate`. + +### `clock.requestAnimationFrame(callback)` + +Schedules the callback to be fired on the next animation frame, which runs every +16 ticks. Returns an `id` which can be used to cancel the callback. This is +available in both browser & node environments. + +### `clock.cancelAnimationFrame(id)` + +Cancels the callback scheduled by the provided id. + +### `clock.requestIdleCallback(callback[, timeout])` + +Queued the callback to be fired during idle periods to perform background and low priority work on the main event loop. Callbacks which have a timeout option will be fired no later than time in milliseconds. Returns an `id` which can be used to cancel the callback. + +### `clock.cancelIdleCallback(id)` + +Cancels the callback scheduled by the provided id. + +### `clock.countTimers()` + +Returns the number of waiting timers. This can be used to assert that a test +finishes without leaking any timers. + +### `clock.hrtime(prevTime?)` + +Only available in Node.js, mimicks process.hrtime(). + +### `clock.nextTick(callback)` + +Only available in Node.js, mimics `process.nextTick` to enable completely synchronous testing flows. + +### `clock.performance.now()` + +Only available in browser environments, mimicks performance.now(). + +### `clock.tick(time)` / `await clock.tickAsync(time)` + +Advance the clock, firing callbacks if necessary. `time` may be the number of +milliseconds to advance the clock by or a human-readable string. Valid string +formats are `"08"` for eight seconds, `"01:00"` for one minute and `"02:34:10"` +for two hours, 34 minutes and ten seconds. + +The `tickAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.next()` / `await clock.nextAsync()` + +Advances the clock to the the moment of the first scheduled timer, firing it. + +The `nextAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.reset()` + +Removes all timers and ticks without firing them, and sets `now` to `config.now` +that was provided to `FakeTimers.install` or to `0` if `config.now` was not provided. +Useful to reset the state of the clock without having to `uninstall` and `install` it. + +### `clock.runAll()` / `await clock.runAllAsync()` + +This runs all pending timers until there are none remaining. If new timers are added while it is executing they will be run as well. + +This makes it easier to run asynchronous tests to completion without worrying about the number of timers they use, or the delays in those timers. + +It runs a maximum of `loopLimit` times after which it assumes there is an infinite loop of timers and throws an error. + +The `runAllAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.runMicrotasks()` + +This runs all pending microtasks scheduled with `nextTick` but none of the timers and is mostly useful for libraries using FakeTimers underneath and for running `nextTick` items without any timers. + +### `clock.runToFrame()` + +Advances the clock to the next frame, firing all scheduled animation frame callbacks, +if any, for that frame as well as any other timers scheduled along the way. + +### `clock.runToLast()` / `await clock.runToLastAsync()` + +This takes note of the last scheduled timer when it is run, and advances the +clock to that time firing callbacks as necessary. + +If new timers are added while it is executing they will be run only if they +would occur before this time. + +This is useful when you want to run a test to completion, but the test recursively +sets timers that would cause `runAll` to trigger an infinite loop warning. + +The `runToLastAsync()` will also break the event loop, allowing any scheduled promise +callbacks to execute _before_ running the timers. + +### `clock.setSystemTime([now])` + +This simulates a user changing the system clock while your program is running. +It affects the current time but it does not in itself cause e.g. timers to fire; +they will fire exactly as they would have done without the call to +setSystemTime(). + +### `clock.uninstall()` + +Restores the original methods of the native timers or the methods on the object +that was passed to `FakeTimers.withGlobal` + +### `Date` + +Implements the `Date` object but using the clock to provide the correct time. + +### `Performance` + +Implements the `now` method of the [`Performance`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) object but using the clock to provide the correct time. Only available in environments that support the Performance object (browsers mostly). + +### `FakeTimers.withGlobal` + +In order to support creating clocks based on separate or sandboxed environments (such as JSDOM), FakeTimers exports a factory method which takes single argument `global`, which it inspects to figure out what to mock and what features to support. When invoking this function with a global, you will get back an object with `timers`, `createClock` and `install` - same as the regular FakeTimers exports only based on the passed in global instead of the global environment. + +## Running tests + +FakeTimers has a comprehensive test suite. If you're thinking of contributing bug +fixes or suggesting new features, you need to make sure you have not broken any +tests. You are also expected to add tests for any new behavior. + +### On node: + +```sh +npm test +``` + +Or, if you prefer more verbose output: + +``` +$(npm bin)/mocha ./test/fake-timers-test.js +``` + +### In the browser + +[Mochify](https://github.com/mantoni/mochify.js) is used to run the tests in +PhantomJS. Make sure you have `phantomjs` installed. Then: + +```sh +npm test-headless +``` + +## License + +BSD 3-clause "New" or "Revised" License (see LICENSE file) diff --git a/build/node_modules/@sinonjs/fake-timers/package.json b/build/node_modules/@sinonjs/fake-timers/package.json new file mode 100644 index 00000000..4e603ea4 --- /dev/null +++ b/build/node_modules/@sinonjs/fake-timers/package.json @@ -0,0 +1,99 @@ +{ + "_from": "@sinonjs/fake-timers@^9.0.0", + "_id": "@sinonjs/fake-timers@9.1.1", + "_inBundle": false, + "_integrity": "sha512-Wp5vwlZ0lOqpSYGKqr53INws9HLkt6JDc/pDZcPf7bchQnrXJMXPns8CXx0hFikMSGSWfvtvvpb2gtMVfkWagA==", + "_location": "/@sinonjs/fake-timers", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@sinonjs/fake-timers@^9.0.0", + "name": "@sinonjs/fake-timers", + "escapedName": "@sinonjs%2ffake-timers", + "scope": "@sinonjs", + "rawSpec": "^9.0.0", + "saveSpec": null, + "fetchSpec": "^9.0.0" + }, + "_requiredBy": [ + "/nise", + "/sinon" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/fake-timers/-/fake-timers-9.1.1.tgz", + "_shasum": "7b698e0b9d12d93611f06ee143c30ced848e2840", + "_spec": "@sinonjs/fake-timers@^9.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", + "author": { + "name": "Christian Johansen" + }, + "bugs": { + "url": "https://github.com/sinonjs/fake-timers/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + }, + "deprecated": false, + "description": "Fake JavaScript timers", + "devDependencies": { + "@sinonjs/eslint-config": "4.0.2", + "@sinonjs/referee-sinon": "6.0.1", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-prettier": "3.4.1", + "husky": "4.2.1", + "jsdom": "16.5.2", + "lint-staged": "10.0.7", + "mocha": "9.2.0", + "mochify": "7.0.0", + "nyc": "14.1.1", + "prettier": "2.2.1" + }, + "files": [ + "src/" + ], + "homepage": "https://github.com/sinonjs/fake-timers", + "husky": { + "hooks": { + "pre-commit": "npm run lint" + } + }, + "license": "BSD-3-Clause", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint" + }, + "main": "./src/fake-timers-src.js", + "name": "@sinonjs/fake-timers", + "nyc": { + "branches": 85, + "lines": 92, + "functions": 92, + "statements": 92, + "exclude": [ + "**/*-test.js", + "coverage/**", + "types/**", + "fake-timers.js" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sinonjs/fake-timers.git" + }, + "scripts": { + "lint": "eslint .", + "postversion": "./scripts/postversion.sh", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "./scripts/preversion.sh", + "test": "npm run test-node && npm run test-headless", + "test-check-coverage": "npm run test-coverage && nyc check-coverage", + "test-cloud": "mochify --wd --no-detect-globals --timeout=10000", + "test-coverage": "nyc --all --reporter text --reporter html --reporter lcovonly npm run test-node", + "test-headless": "mochify --no-detect-globals --timeout=10000", + "test-node": "mocha --timeout 200 test/ integration-test/ -R dot --check-leaks", + "version": "./scripts/version.sh" + }, + "version": "9.1.1" +} diff --git a/build/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js b/build/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js new file mode 100644 index 00000000..8dcc78db --- /dev/null +++ b/build/node_modules/@sinonjs/fake-timers/src/fake-timers-src.js @@ -0,0 +1,1757 @@ +"use strict"; + +const globalObject = require("@sinonjs/commons").global; + +/** + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods + * + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id + */ + +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ + +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ + +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ + +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ + +/** + * @typedef Performance + * @property {function(): number} now + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ + +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ + +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ + +/* eslint-disable complexity */ + +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; + + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } + + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ + + _global.clearTimeout(timeoutResult); + + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; + + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } + + return isFinite(num); + } + + let isNearInfiniteLimit = false; + + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } + } + + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; + } + + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } + + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); + } + + ms += parsed * Math.pow(60, l - i - 1); + } + + return ms * 1000; + } + + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; + + return Math.floor(positiveRemainder); + } + + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); + + if (!job.error) { + return infiniteLoopError; + } + + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); + + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); + } + + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; + } + + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; + } + + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); + + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; + + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } + + return infiniteLoopError; + } + + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + return target; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } + + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); + + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); + } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); + } + } + + if (isNearInfiniteLimit) { + timer.error = new Error(); + } + + timer.type = timer.immediate ? "Immediate" : "Timeout"; + + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } + + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } + + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; + } + + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; + } + + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + refed: true, + ref: function () { + this.refed = true; + return res; + }, + unref: function () { + this.refed = false; + return res; + }, + hasRef: function () { + return this.refed; + }, + refresh: function () { + timer.callAt = + clock.now + + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + // it _might_ have been removed, but if not the assignment is perfectly fine + clock.timers[timer.id] = timer; + + return res; + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } + + return timer.id; + } + + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); + } + } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; + } + return `clear${ttype}`; + } + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; + } + return `set${ttype}`; + } + + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); + + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = {}; + } + + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; + } + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); + } + } + } + + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } + } + } + } + + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; + } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); + } + + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); + } + + target[method].clock = clock; + } + + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); + } + + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; + } + + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; + } + + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; + } + + if (performancePresent) { + timers.performance = _global.performance; + } + + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); + } + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; + } + return [secsSinceStart, remainderInNanos]; + } + + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } + + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; + + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[ + utilPromisify.custom + ] = function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, + }); + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[ + utilPromisify.custom + ] = function promisifiedSetImmediate(arg) { + return new _global.Promise(function setImmediateExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + }); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + args: [clock.now + getTimeToNextFrame()], + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys(clock.timers) + .length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = function FakeTimersNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + }; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; diff --git a/build/node_modules/samsam/LICENSE b/build/node_modules/@sinonjs/samsam/LICENSE similarity index 100% rename from build/node_modules/samsam/LICENSE rename to build/node_modules/@sinonjs/samsam/LICENSE diff --git a/build/node_modules/@sinonjs/samsam/README.md b/build/node_modules/@sinonjs/samsam/README.md new file mode 100644 index 00000000..91afc5dd --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/README.md @@ -0,0 +1,83 @@ +# samsam + +[![CircleCI](https://circleci.com/gh/sinonjs/samsam.svg?style=svg)](https://circleci.com/gh/sinonjs/samsam) +[![Coverage status](https://codecov.io/gh/sinonjs/samsam/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/samsam) +Contributor Covenant + +Value identification and comparison functions + +Documentation: http://sinonjs.github.io/samsam/ + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/sinon#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/sinon#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Licence + +samsam was released under [BSD-3](LICENSE) diff --git a/build/node_modules/@sinonjs/samsam/docs/index.md b/build/node_modules/@sinonjs/samsam/docs/index.md new file mode 100644 index 00000000..3ef7f310 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/docs/index.md @@ -0,0 +1,390 @@ +# samsam + +> Same same, but different + +`samsam` is a collection of predicate and comparison functions useful for +identifiying the type of values and to compare values with varying degrees of +strictness. + +`samsam` is a general-purpose library. It works in browsers and Node. It will +define itself as an AMD module if you want it to (i.e. if there's a `define` +function available). + +## Predicate functions + +### `isArguments(value)` + +Returns `true` if `value` is an `arguments` object, `false` otherwise. + +### `isNegZero(value)` + +Returns `true` if `value` is `-0`. + +### `isElement(value)` + +Returns `true` if `value` is a DOM element node. Unlike +Underscore.js/lodash, this function will return `false` if `value` is an +_element-like_ object, i.e. a regular object with a `nodeType` property that +holds the value `1`. + +### `isSet(value)` + +Returns `true` if `value` is a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set). + +## Comparison functions + +### `identical(x, y)` + +Strict equality check according to EcmaScript Harmony's `egal`. + +**From the Harmony wiki:** + +> An egal function simply makes available the internal `SameValue` function +> from section 9.12 of the ES5 spec. If two values are egal, then they are not +> observably distinguishable. + +`identical` returns `true` when `===` is `true`, except for `-0` and +`+0`, where it returns `false`. Additionally, it returns `true` when +`NaN` is compared to itself. + +### `deepEqual(actual, expectation)` + +Deep equal comparison. Two values are "deep equal" if: + +- They are identical +- They are both date objects representing the same time +- They are both arrays containing elements that are all deepEqual +- They are objects with the same set of properties, and each property + in `actual` is deepEqual to the corresponding property in `expectation` + + - `actual` can have [symbolic properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) that are missing from `expectation` + +### Matcher + +Match values and objects by type or or other fuzzy criteria. `samsam` ships +with these built in matchers: + +#### `sinon.match.any` + +Matches anything. + +#### `sinon.match.defined` + +Requires the value to be defined. + +#### `sinon.match.truthy` + +Requires the value to be truthy. + +#### `sinon.match.falsy` + +Requires the value to be falsy. + +#### `sinon.match.bool` + +Requires the value to be a `Boolean` + +#### `sinon.match.number` + +Requires the value to be a `Number`. + +#### `sinon.match.string` + +Requires the value to be a `String`. + +#### `sinon.match.object` + +Requires the value to be an `Object`. + +#### `sinon.match.func` + +Requires the value to be a `Function`. + +#### `sinon.match.array` + +Requires the value to be an `Array`. + +#### `sinon.match.array.deepEquals(arr)` + +Requires an `Array` to be deep equal another one. + +#### `sinon.match.array.startsWith(arr)` + +Requires an `Array` to start with the same values as another one. + +#### `sinon.match.array.endsWith(arr)` + +Requires an `Array` to end with the same values as another one. + +#### `sinon.match.array.contains(arr)` + +Requires an `Array` to contain each one of the values the given array has. + +#### `sinon.match.map` + +Requires the value to be a `Map`. + +#### `sinon.match.map.deepEquals(map)` + +Requires a `Map` to be deep equal another one. + +#### `sinon.match.map.contains(map)` + +Requires a `Map` to contain each one of the items the given map has. + +#### `sinon.match.set` + +Requires the value to be a `Set`. + +#### `sinon.match.set.deepEquals(set)` + +Requires a `Set` to be deep equal another one. + +#### `sinon.match.set.contains(set)` + +Requires a `Set` to contain each one of the items the given set has. + +#### `sinon.match.regexp` + +Requires the value to be a regular expression. + +#### `sinon.match.date` + +Requires the value to be a `Date` object. + +#### `sinon.match.symbol` + +Requires the value to be a `Symbol`. + +#### `sinon.match.in(array)` + +Requires the value to be in the `array`. + +#### `sinon.match.same(ref)` + +Requires the value to strictly equal `ref`. + +#### `sinon.match.typeOf(type)` + +Requires the value to be of the given type, where `type` can be one of +`"undefined"`, +`"null"`, +`"boolean"`, +`"number"`, +`"string"`, +`"object"`, +`"function"`, +`"array"`, +`"regexp"`, +`"date"` or +`"symbol"`. + +#### `sinon.match.instanceOf(type)` + +Requires the value to be an instance of the given `type`. + +#### `sinon.match.has(property[, expectation])` + +Requires the value to define the given `property`. + +The property might be inherited via the prototype chain. If the optional expectation is given, the value of the property is deeply compared with the expectation. The expectation can be another matcher. + +#### `sinon.match.hasOwn(property[, expectation])` + +Same as `sinon.match.has` but the property must be defined by the value itself. Inherited properties are ignored. + +#### `sinon.match.hasNested(propertyPath[, expectation])` + +Requires the value to define the given `propertyPath`. Dot (`prop.prop`) and bracket (`prop[0]`) notations are supported as in [Lodash.get](https://lodash.com/docs/4.4.2#get). + +The propertyPath might be inherited via the prototype chain. If the optional expectation is given, the value at the propertyPath is deeply compared with the expectation. The expectation can be another matcher. + +```javascript +sinon.match.hasNested("a[0].b.c"); + +// Where actual is something like +var actual = { a: [{ b: { c: 3 } }] }; + +sinon.match.hasNested("a.b.c"); + +// Where actual is something like +var actual = { a: { b: { c: 3 } } }; +``` + +#### `sinon.match.every(matcher)` + +Requires **every** element of an `Array`, `Set` or `Map`, or alternatively **every** value of an `Object` to match the given `matcher`. + +#### `sinon.match.some(matcher)` + +Requires **any** element of an `Array`, `Set` or `Map`, or alternatively **any** value of an `Object` to match the given `matcher`. + +## Combining matchers + +All matchers implement `and` and `or`. This allows to logically combine mutliple matchers. The result is a new matchers that requires both (and) or one of the matchers (or) to return `true`. + +```javascript +var stringOrNumber = sinon.match.string.or(sinon.match.number); +var bookWithPages = sinon.match.instanceOf(Book).and(sinon.match.has("pages")); +``` + +### `match(object, matcher)` + +Creates a custom matcher to perform partial equality check. Compares `object` +with matcher according a wide set of rules: + +#### String matcher + +In its simplest form, `match` performs a case insensitive substring match. +When the matcher is a string, `object` is converted to a string, and the +function returns `true` if the matcher is a case-insensitive substring of +`object` as a string. + +```javascript +samsam.match("Give me something", "Give"); //true +samsam.match("Give me something", "sumptn"); // false +samsam.match( + { + toString: function () { + return "yeah"; + }, + }, + "Yeah!" +); // true +``` + +The last example is not symmetric. When the matcher is a string, the `object` +is coerced to a string - in this case using `toString`. Changing the order of +the arguments would cause the matcher to be an object, in which case different +rules apply (see below). + +#### Boolean matcher + +Performs a strict (i.e. `===`) match with the object. So, only `true` +matches `true`, and only `false` matches `false`. + +#### Regular expression matcher + +When the matcher is a regular expression, the function will pass if +`object.test(matcher)` is `true`. `match` is written in a generic way, so +any object with a `test` method will be used as a matcher this way. + +```javascript +samsam.match("Give me something", /^[a-z\s]$/i); // true +samsam.match("Give me something", /[0-9]/); // false +samsam.match( + { + toString: function () { + return "yeah!"; + }, + }, + /yeah/ +); // true +samsam.match(234, /[a-z]/); // false +``` + +#### Number matcher + +When the matcher is a number, the assertion will pass if `object == matcher`. + +```javascript +samsam.match("123", 123); // true +samsam.match("Give me something", 425); // false +samsam.match( + { + toString: function () { + return "42"; + }, + }, + 42 +); // true +samsam.match(234, 1234); // false +``` + +#### Function matcher + +When the matcher is a function, it is called with `object` as its only +argument. `match` returns `true` if the function returns `true`. A strict +match is performed against the return value, so a boolean `true` is required, +truthy is not enough. + +```javascript +// true +samsam.match("123", function (exp) { + return exp == "123"; +}); + +// false +samsam.match("Give me something", function () { + return "ok"; +}); + +// true +samsam.match( + { + toString: function () { + return "42"; + }, + }, + function () { + return true; + } +); + +// false +samsam.match(234, function () {}); +``` + +#### Object matcher + +As mentioned above, if an object matcher defines a `test` method, `match` +will return `true` if `matcher.test(object)` returns truthy. + +If the matcher does not have a test method, a recursive match is performed. If +all properties of `matcher` matches corresponding properties in `object`, +`match` returns `true`. Note that the object matcher does not care if the +number of properties in the two objects are the same - only if all properties in +the matcher recursively matches ones in `object`. If supported, this object matchers +include [symbolic properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) +in the comparison. + +```javascript +// true +samsam.match("123", { + test: function (arg) { + return arg == 123; + }, +}); + +// false +samsam.match({}, { prop: 42 }); + +// true +samsam.match( + { + name: "Chris", + profession: "Programmer", + }, + { + name: "Chris", + } +); + +// false +samsam.match(234, { name: "Chris" }); +``` + +#### DOM elements + +`match` can be very helpful when comparing DOM elements, because it allows +you to compare several properties with one call: + +```javascript +var el = document.getElementById("myEl"); + +samsam.match(el, { + tagName: "h2", + className: "item", + innerHTML: "Howdy", +}); +``` diff --git a/build/node_modules/@sinonjs/samsam/lib/array-types.js b/build/node_modules/@sinonjs/samsam/lib/array-types.js new file mode 100644 index 00000000..0cb471a6 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/array-types.js @@ -0,0 +1,16 @@ +"use strict"; + +var ARRAY_TYPES = [ + Array, + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, +]; + +module.exports = ARRAY_TYPES; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher.js new file mode 100644 index 00000000..fe329134 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher.js @@ -0,0 +1,371 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var deepEqual = require("./deep-equal").use(createMatcher); // eslint-disable-line no-use-before-define +var every = require("@sinonjs/commons").every; +var functionName = require("@sinonjs/commons").functionName; +var get = require("lodash.get"); +var iterableToString = require("./iterable-to-string"); +var objectProto = require("@sinonjs/commons").prototypes.object; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var assertMatcher = require("./create-matcher/assert-matcher"); +var assertMethodExists = require("./create-matcher/assert-method-exists"); +var assertType = require("./create-matcher/assert-type"); +var isIterable = require("./create-matcher/is-iterable"); +var isMatcher = require("./create-matcher/is-matcher"); + +var matcherPrototype = require("./create-matcher/matcher-prototype"); + +var arrayIndexOf = arrayProto.indexOf; +var some = arrayProto.some; + +var hasOwnProperty = objectProto.hasOwnProperty; +var objectToString = objectProto.toString; + +var TYPE_MAP = require("./create-matcher/type-map")(createMatcher); // eslint-disable-line no-use-before-define + +/** + * Creates a matcher object for the passed expectation + * + * @alias module:samsam.createMatcher + * @param {*} expectation An expecttation + * @param {string} message A message for the expectation + * @returns {object} A matcher object + */ +function createMatcher(expectation, message) { + var m = Object.create(matcherPrototype); + var type = typeOf(expectation); + + if (message !== undefined && typeof message !== "string") { + throw new TypeError("Message should be a string"); + } + + if (arguments.length > 2) { + throw new TypeError( + `Expected 1 or 2 arguments, received ${arguments.length}` + ); + } + + if (type in TYPE_MAP) { + TYPE_MAP[type](m, expectation, message); + } else { + m.test = function (actual) { + return deepEqual(actual, expectation); + }; + } + + if (!m.message) { + m.message = `match(${valueToString(expectation)})`; + } + + return m; +} + +createMatcher.isMatcher = isMatcher; + +createMatcher.any = createMatcher(function () { + return true; +}, "any"); + +createMatcher.defined = createMatcher(function (actual) { + return actual !== null && actual !== undefined; +}, "defined"); + +createMatcher.truthy = createMatcher(function (actual) { + return Boolean(actual); +}, "truthy"); + +createMatcher.falsy = createMatcher(function (actual) { + return !actual; +}, "falsy"); + +createMatcher.same = function (expectation) { + return createMatcher(function (actual) { + return expectation === actual; + }, `same(${valueToString(expectation)})`); +}; + +createMatcher.in = function (arrayOfExpectations) { + if (typeOf(arrayOfExpectations) !== "array") { + throw new TypeError("array expected"); + } + + return createMatcher(function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, `in(${valueToString(arrayOfExpectations)})`); +}; + +createMatcher.typeOf = function (type) { + assertType(type, "string", "type"); + return createMatcher(function (actual) { + return typeOf(actual) === type; + }, `typeOf("${type}")`); +}; + +createMatcher.instanceOf = function (type) { + /* istanbul ignore if */ + if ( + typeof Symbol === "undefined" || + typeof Symbol.hasInstance === "undefined" + ) { + assertType(type, "function", "type"); + } else { + assertMethodExists( + type, + Symbol.hasInstance, + "type", + "[Symbol.hasInstance]" + ); + } + return createMatcher(function (actual) { + return actual instanceof type; + }, `instanceOf(${functionName(type) || objectToString(type)})`); +}; + +/** + * Creates a property matcher + * + * @private + * @param {Function} propertyTest A function to test the property against a value + * @param {string} messagePrefix A prefix to use for messages generated by the matcher + * @returns {object} A matcher + */ +function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `${messagePrefix}("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + !propertyTest(actual, property) + ) { + return false; + } + return onlyProperty || deepEqual(actual[property], value); + }, message); + }; +} + +createMatcher.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; +}, "has"); + +createMatcher.hasOwn = createPropertyMatcher(function (actual, property) { + return hasOwnProperty(actual, property); +}, "hasOwn"); + +createMatcher.hasNested = function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `hasNested("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + get(actual, property) === undefined + ) { + return false; + } + return onlyProperty || deepEqual(get(actual, property), value); + }, message); +}; + +var jsonParseResultTypes = { + null: true, + boolean: true, + number: true, + string: true, + object: true, + array: true, +}; +createMatcher.json = function (value) { + if (!jsonParseResultTypes[typeOf(value)]) { + throw new TypeError("Value cannot be the result of JSON.parse"); + } + var message = `json(${JSON.stringify(value, null, " ")})`; + return createMatcher(function (actual) { + var parsed; + try { + parsed = JSON.parse(actual); + } catch (e) { + return false; + } + return deepEqual(parsed, value); + }, message); +}; + +createMatcher.every = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return every(Object.keys(actual), function (key) { + return predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + every(actual, function (element) { + return predicate.test(element); + }) + ); + }, `every(${predicate.message})`); +}; + +createMatcher.some = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return !every(Object.keys(actual), function (key) { + return !predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + !every(actual, function (element) { + return !predicate.test(element); + }) + ); + }, `some(${predicate.message})`); +}; + +createMatcher.array = createMatcher.typeOf("array"); + +createMatcher.array.deepEquals = function (expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, `deepEquals([${iterableToString(expectation)}])`); +}; + +createMatcher.array.startsWith = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, `startsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.endsWith = function (expectation) { + return createMatcher(function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; + + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, `endsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.contains = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, `contains([${iterableToString(expectation)}])`); +}; + +createMatcher.map = createMatcher.typeOf("map"); + +createMatcher.map.deepEquals = function mapDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return expectation.has(key) && expectation.get(key) === element; + }) + ); + }, `deepEquals(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.map.contains = function mapContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, `contains(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.set = createMatcher.typeOf("set"); + +createMatcher.set.deepEquals = function setDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, `deepEquals(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.set.contains = function setContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, `contains(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.bool = createMatcher.typeOf("boolean"); +createMatcher.number = createMatcher.typeOf("number"); +createMatcher.string = createMatcher.typeOf("string"); +createMatcher.object = createMatcher.typeOf("object"); +createMatcher.func = createMatcher.typeOf("function"); +createMatcher.regexp = createMatcher.typeOf("regexp"); +createMatcher.date = createMatcher.typeOf("date"); +createMatcher.symbol = createMatcher.typeOf("symbol"); + +module.exports = createMatcher; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-matcher.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-matcher.js new file mode 100644 index 00000000..a4abd48f --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-matcher.js @@ -0,0 +1,17 @@ +"use strict"; + +var isMatcher = require("./is-matcher"); + +/** + * Throws a TypeError when `value` is not a matcher + * + * @private + * @param {*} value The value to examine + */ +function assertMatcher(value) { + if (!isMatcher(value)) { + throw new TypeError("Matcher expected"); + } +} + +module.exports = assertMatcher; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-method-exists.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-method-exists.js new file mode 100644 index 00000000..5150cf9e --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-method-exists.js @@ -0,0 +1,19 @@ +"use strict"; + +/** + * Throws a TypeError when expected method doesn't exist + * + * @private + * @param {*} value A value to examine + * @param {string} method The name of the method to look for + * @param {name} name A name to use for the error message + * @param {string} methodPath The name of the method to use for error messages + * @throws {TypeError} When the method doesn't exist + */ +function assertMethodExists(value, method, name, methodPath) { + if (value[method] === null || value[method] === undefined) { + throw new TypeError(`Expected ${name} to have method ${methodPath}`); + } +} + +module.exports = assertMethodExists; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js new file mode 100644 index 00000000..a3543e08 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/assert-type.js @@ -0,0 +1,24 @@ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Ensures that value is of type + * + * @private + * @param {*} value A value to examine + * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string" + * @param {string} name A string to use for the error message + * @throws {TypeError} If value is not of the expected type + * @returns {undefined} + */ +function assertType(value, type, name) { + var actual = typeOf(value); + if (actual !== type) { + throw new TypeError( + `Expected type of ${name} to be ${type}, but was ${actual}` + ); + } +} + +module.exports = assertType; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-iterable.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-iterable.js new file mode 100644 index 00000000..d9180ae6 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-iterable.js @@ -0,0 +1,16 @@ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Returns `true` for iterables + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` looks like an iterable + */ +function isIterable(value) { + return Boolean(value) && typeOf(value.forEach) === "function"; +} + +module.exports = isIterable; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-matcher.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-matcher.js new file mode 100644 index 00000000..60c487c8 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/is-matcher.js @@ -0,0 +1,18 @@ +"use strict"; + +var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; + +var matcherPrototype = require("./matcher-prototype"); + +/** + * Returns `true` when `object` is a matcher + * + * @private + * @param {*} object A value to examine + * @returns {boolean} Returns `true` when `object` is a matcher + */ +function isMatcher(object) { + return isPrototypeOf(matcherPrototype, object); +} + +module.exports = isMatcher; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js new file mode 100644 index 00000000..8c491e7f --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/match-object.js @@ -0,0 +1,55 @@ +"use strict"; + +var every = require("@sinonjs/commons").prototypes.array.every; +var concat = require("@sinonjs/commons").prototypes.array.concat; +var typeOf = require("@sinonjs/commons").typeOf; + +var deepEqualFactory = require("../deep-equal").use; + +var isMatcher = require("./is-matcher"); + +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Matches `actual` with `expectation` + * + * @private + * @param {*} actual A value to examine + * @param {object} expectation An object with properties to match on + * @param {object} matcher A matcher to use for comparison + * @returns {boolean} Returns true when `actual` matches all properties in `expectation` + */ +function matchObject(actual, expectation, matcher) { + var deepEqual = deepEqualFactory(matcher); + if (actual === null || actual === undefined) { + return false; + } + + var expectedKeys = keys(expectation); + /* istanbul ignore else: cannot collect coverage for engine that doesn't support Symbol */ + if (typeOf(getOwnPropertySymbols) === "function") { + expectedKeys = concat(expectedKeys, getOwnPropertySymbols(expectation)); + } + + return every(expectedKeys, function (key) { + var exp = expectation[key]; + var act = actual[key]; + + if (isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (typeOf(exp) === "object") { + if (!matchObject(act, exp, matcher)) { + return false; + } + } else if (!deepEqual(act, exp)) { + return false; + } + + return true; + }); +} + +module.exports = matchObject; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/matcher-prototype.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/matcher-prototype.js new file mode 100644 index 00000000..a3d024e7 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/matcher-prototype.js @@ -0,0 +1,49 @@ +"use strict"; + +var matcherPrototype = { + toString: function () { + return this.message; + }, +}; + +matcherPrototype.or = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var or = Object.create(matcherPrototype); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = `${m1.message}.or(${m2.message})`; + return or; +}; + +matcherPrototype.and = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var and = Object.create(matcherPrototype); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = `${m1.message}.and(${m2.message})`; + return and; +}; + +module.exports = matcherPrototype; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-matcher/type-map.js b/build/node_modules/@sinonjs/samsam/lib/create-matcher/type-map.js new file mode 100644 index 00000000..abd36264 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-matcher/type-map.js @@ -0,0 +1,62 @@ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var join = require("@sinonjs/commons").prototypes.array.join; +var map = require("@sinonjs/commons").prototypes.array.map; +var stringIndexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var matchObject = require("./match-object"); + +var createTypeMap = function (match) { + return { + function: function (m, expectation, message) { + m.test = expectation; + m.message = message || `match(${functionName(expectation)})`; + }, + number: function (m, expectation) { + m.test = function (actual) { + // we need type coercion here + return expectation == actual; // eslint-disable-line eqeqeq + }; + }, + object: function (m, expectation) { + var array = []; + + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = `match(${functionName(expectation.test)})`; + return m; + } + + array = map(Object.keys(expectation), function (key) { + return `${key}: ${valueToString(expectation[key])}`; + }); + + m.test = function (actual) { + return matchObject(actual, expectation, match); + }; + m.message = `match(${join(array, ", ")})`; + + return m; + }, + regexp: function (m, expectation) { + m.test = function (actual) { + return typeof actual === "string" && expectation.test(actual); + }; + }, + string: function (m, expectation) { + m.test = function (actual) { + return ( + typeof actual === "string" && + stringIndexOf(actual, expectation) !== -1 + ); + }; + m.message = `match("${expectation}")`; + }, + }; +}; + +module.exports = createTypeMap; diff --git a/build/node_modules/@sinonjs/samsam/lib/create-set.js b/build/node_modules/@sinonjs/samsam/lib/create-set.js new file mode 100644 index 00000000..54cc5f01 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/create-set.js @@ -0,0 +1,34 @@ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; +var forEach = require("@sinonjs/commons").prototypes.array.forEach; + +/** + * This helper makes it convenient to create Set instances from a + * collection, an overcomes the shortcoming that IE11 doesn't support + * collection arguments + * + * @private + * @param {Array} array An array to create a set from + * @returns {Set} A set (unique) containing the members from array + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set + */ +function createSet(array) { + if (arguments.length > 0 && !Array.isArray(array)) { + throw new TypeError( + "createSet can be called with either no arguments or an Array" + ); + } + + var items = typeOf(array) === "array" ? array : []; + var set = new Set(); + + forEach(items, function (item) { + set.add(item); + }); + + return set; +} + +module.exports = createSet; diff --git a/build/node_modules/@sinonjs/samsam/lib/deep-equal-benchmark.js b/build/node_modules/@sinonjs/samsam/lib/deep-equal-benchmark.js new file mode 100644 index 00000000..1f39b153 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/deep-equal-benchmark.js @@ -0,0 +1,74 @@ +"use strict"; + +var Benchmark = require("benchmark"); +var deepEqual = require("./deep-equal"); + +var suite = new Benchmark.Suite(); +var complex1 = { + "1e116061-59bf-433a-8ab0-017b67a51d26": + "a7fd22ab-e809-414f-ad55-9c97598395d8", + "3824e8b7-22f5-489c-9919-43b432e3af6b": + "548baefd-f43c-4dc9-9df5-f7c9c96223b0", + "123e5750-eb66-45e5-a770-310879203b33": + "89ff817d-65a2-4598-b190-21c128096e6a", + "1d66be95-8aaa-4167-9a47-e7ee19bb0735": + "64349492-56e8-4100-9552-a89fb4a9aef4", + "f5538565-dc92-4ee4-a762-1ba5fe0528f6": { + "53631f78-2f2a-448f-89c7-ed3585e8e6f0": + "2cce00ee-f5ee-43ef-878f-958597b23225", + "73e8298b-72fd-4969-afc1-d891b61e744f": + "4e57aa30-af51-4d78-887c-019755e5d117", + "85439907-5b0e-4a08-8cfa-902a68dc3cc0": + "9639add9-6897-4cf0-b3d3-2ebf9c214f01", + "d4ae9d87-bd6c-47e0-95a1-6f4eb4211549": + "41fd3dd2-43ce-47f2-b92e-462474d07a6f", + "f70345a2-0ea3-45a6-bafa-8c7a72379277": { + "1bce714b-cd0a-417d-9a0c-bf4b7d35c0c4": + "3b8b0dde-e2ed-4b34-ac8d-729ba3c9667e", + "13e05c60-97d1-43f0-a6ef-d5247f4dd11f": + "60f685a4-6558-4ade-9d4b-28281c3989db", + "925b2609-e7b7-42f5-82cf-2d995697cec5": + "79115261-8161-4a6c-9487-47847276a717", + "52d644ac-7b33-4b79-b5b3-5afe7fd4ec2c": [ + "3c2ae716-92f1-4a3d-b98f-50ea49f51c45", + "de76b822-71b3-4b5a-a041-4140378b70e2", + "0302a405-1d58-44fa-a0c6-dd07bb0ca26e", + new Date(), + new Error(), + new RegExp(), + // eslint-disable-next-line no-undef + new Map(), + new Set(), + // eslint-disable-next-line no-undef + new WeakMap(), + // eslint-disable-next-line no-undef + new WeakSet(), + ], + }, + }, +}; +var complex2 = Object.create(complex1); + +var cyclic1 = { + "4a092cd1-225e-4739-8331-d6564aafb702": + "d0cebbe0-23fb-4cc4-8fa0-ef11ceedf12e", +}; +cyclic1.cyclicRef = cyclic1; + +var cyclic2 = Object.create(cyclic1); + +// add tests +suite + .add("complex objects", function () { + return deepEqual(complex1, complex2); + }) + .add("cyclic references", function () { + return deepEqual(cyclic1, cyclic2); + }) + // add listeners + .on("cycle", function (event) { + // eslint-disable-next-line no-console + console.log(String(event.target)); + }) + // run async + .run({ async: true }); diff --git a/build/node_modules/@sinonjs/samsam/lib/deep-equal.js b/build/node_modules/@sinonjs/samsam/lib/deep-equal.js new file mode 100644 index 00000000..88156e0d --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/deep-equal.js @@ -0,0 +1,291 @@ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var className = require("@sinonjs/commons").className; +var typeOf = require("@sinonjs/commons").typeOf; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var objectProto = require("@sinonjs/commons").prototypes.object; +var mapForEach = require("@sinonjs/commons").prototypes.map.forEach; + +var getClass = require("./get-class"); +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isArrayType = require("./is-array-type"); +var isDate = require("./is-date"); +var isElement = require("./is-element"); +var isIterable = require("./is-iterable"); +var isMap = require("./is-map"); +var isNaN = require("./is-nan"); +var isObject = require("./is-object"); +var isSet = require("./is-set"); +var isSubset = require("./is-subset"); + +var concat = arrayProto.concat; +var every = arrayProto.every; +var push = arrayProto.push; + +var getTime = Date.prototype.getTime; +var hasOwnProperty = objectProto.hasOwnProperty; +var indexOf = arrayProto.indexOf; +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Deep equal comparison. Two values are "deep equal" when: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``actual`` is deepEqual to the corresponding property in ``expectation`` + * + * Supports cyclic objects. + * + * @alias module:samsam.deepEqual + * @param {*} actual The object to examine + * @param {*} expectation The object actual is expected to be equal to + * @param {object} match A value to match on + * @returns {boolean} Returns true when actual and expectation are considered equal + */ +function deepEqualCyclic(actual, expectation, match) { + // used for cyclic comparison + // contain already visited objects + var actualObjects = []; + var expectationObjects = []; + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + var actualPaths = []; + var expectationPaths = []; + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + var compared = {}; + + // does the recursion for the deep equal check + // eslint-disable-next-line complexity + return (function deepEqual( + actualObj, + expectationObj, + actualPath, + expectationPath + ) { + // If both are matchers they must be the same instance in order to be + // considered equal If we didn't do that we would end up running one + // matcher against the other + if (match && match.isMatcher(expectationObj)) { + if (match.isMatcher(actualObj)) { + return actualObj === expectationObj; + } + return expectationObj.test(actualObj); + } + + var actualType = typeof actualObj; + var expectationType = typeof expectationObj; + + if ( + actualObj === expectationObj || + isNaN(actualObj) || + isNaN(expectationObj) || + actualObj === null || + expectationObj === null || + actualObj === undefined || + expectationObj === undefined || + actualType !== "object" || + expectationType !== "object" + ) { + return identical(actualObj, expectationObj); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(actualObj) || isElement(expectationObj)) { + return false; + } + + var isActualDate = isDate(actualObj); + var isExpectationDate = isDate(expectationObj); + if (isActualDate || isExpectationDate) { + if ( + !isActualDate || + !isExpectationDate || + getTime.call(actualObj) !== getTime.call(expectationObj) + ) { + return false; + } + } + + if (actualObj instanceof RegExp && expectationObj instanceof RegExp) { + if (valueToString(actualObj) !== valueToString(expectationObj)) { + return false; + } + } + + if (actualObj instanceof Promise && expectationObj instanceof Promise) { + return actualObj === expectationObj; + } + + if (actualObj instanceof Error && expectationObj instanceof Error) { + return actualObj === expectationObj; + } + + var actualClass = getClass(actualObj); + var expectationClass = getClass(expectationObj); + var actualKeys = keys(actualObj); + var expectationKeys = keys(expectationObj); + var actualName = className(actualObj); + var expectationName = className(expectationObj); + var expectationSymbols = + typeOf(getOwnPropertySymbols) === "function" + ? getOwnPropertySymbols(expectationObj) + : /* istanbul ignore next: cannot collect coverage for engine that doesn't support Symbol */ + []; + var expectationKeysAndSymbols = concat( + expectationKeys, + expectationSymbols + ); + + if (isArguments(actualObj) || isArguments(expectationObj)) { + if (actualObj.length !== expectationObj.length) { + return false; + } + } else { + if ( + actualType !== expectationType || + actualClass !== expectationClass || + actualKeys.length !== expectationKeys.length || + (actualName && + expectationName && + actualName !== expectationName) + ) { + return false; + } + } + + if (isSet(actualObj) || isSet(expectationObj)) { + if ( + !isSet(actualObj) || + !isSet(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + return isSubset(actualObj, expectationObj, deepEqual); + } + + if (isMap(actualObj) || isMap(expectationObj)) { + if ( + !isMap(actualObj) || + !isMap(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + var mapsDeeplyEqual = true; + mapForEach(actualObj, function (value, key) { + mapsDeeplyEqual = + mapsDeeplyEqual && + deepEqualCyclic(value, expectationObj.get(key)); + }); + + return mapsDeeplyEqual; + } + + var isActualNonArrayIterable = + isIterable(actualObj) && + !isArrayType(actualObj) && + !isArguments(actualObj); + var isExpectationNonArrayIterable = + isIterable(expectation) && + !isArrayType(expectation) && + !isArguments(expectation); + if (isActualNonArrayIterable || isExpectationNonArrayIterable) { + var actualArray = Array.from(actualObj); + var expectationArray = Array.from(expectation); + if (actualArray.length !== expectationArray.length) { + return false; + } + + var arrayDeeplyEquals = true; + every(actualArray, function (key) { + arrayDeeplyEquals = + arrayDeeplyEquals && + deepEqualCyclic(actualArray[key], expectationArray[key]); + }); + + return arrayDeeplyEquals; + } + + return every(expectationKeysAndSymbols, function (key) { + if (!hasOwnProperty(actualObj, key)) { + return false; + } + + var actualValue = actualObj[key]; + var expectationValue = expectationObj[key]; + var actualObject = isObject(actualValue); + var expectationObject = isObject(expectationValue); + // determines, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + var actualIndex = actualObject + ? indexOf(actualObjects, actualValue) + : -1; + var expectationIndex = expectationObject + ? indexOf(expectationObjects, expectationValue) + : -1; + // determines the new paths of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + var newActualPath = + actualIndex !== -1 + ? actualPaths[actualIndex] + : `${actualPath}[${JSON.stringify(key)}]`; + var newExpectationPath = + expectationIndex !== -1 + ? expectationPaths[expectationIndex] + : `${expectationPath}[${JSON.stringify(key)}]`; + var combinedPath = newActualPath + newExpectationPath; + + // stop recursion if current objects are already compared + if (compared[combinedPath]) { + return true; + } + + // remember the current objects and their paths + if (actualIndex === -1 && actualObject) { + push(actualObjects, actualValue); + push(actualPaths, newActualPath); + } + if (expectationIndex === -1 && expectationObject) { + push(expectationObjects, expectationValue); + push(expectationPaths, newExpectationPath); + } + + // remember that the current objects are already compared + if (actualObject && expectationObject) { + compared[combinedPath] = true; + } + + // End of cyclic logic + + // neither actualValue nor expectationValue is a cycle + // continue with next level + return deepEqual( + actualValue, + expectationValue, + newActualPath, + newExpectationPath + ); + }); + })(actual, expectation, "$1", "$2"); +} + +deepEqualCyclic.use = function (match) { + return function deepEqual(a, b) { + return deepEqualCyclic(a, b, match); + }; +}; + +module.exports = deepEqualCyclic; diff --git a/build/node_modules/@sinonjs/samsam/lib/get-class.js b/build/node_modules/@sinonjs/samsam/lib/get-class.js new file mode 100644 index 00000000..5b1b58dc --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/get-class.js @@ -0,0 +1,18 @@ +"use strict"; + +var toString = require("@sinonjs/commons").prototypes.object.toString; + +/** + * Returns the internal `Class` by calling `Object.prototype.toString` + * with the provided value as `this`. Return value is a `String`, naming the + * internal class, e.g. "Array" + * + * @private + * @param {*} value - Any value + * @returns {string} - A string representation of the `Class` of `value` + */ +function getClass(value) { + return toString(value).split(/[ \]]/)[1]; +} + +module.exports = getClass; diff --git a/build/node_modules/@sinonjs/samsam/lib/identical.js b/build/node_modules/@sinonjs/samsam/lib/identical.js new file mode 100644 index 00000000..e183f09b --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/identical.js @@ -0,0 +1,31 @@ +"use strict"; + +var isNaN = require("./is-nan"); +var isNegZero = require("./is-neg-zero"); + +/** + * Strict equality check according to EcmaScript Harmony's `egal`. + * + * **From the Harmony wiki:** + * > An `egal` function simply makes available the internal `SameValue` function + * > from section 9.12 of the ES5 spec. If two values are egal, then they are not + * > observably distinguishable. + * + * `identical` returns `true` when `===` is `true`, except for `-0` and + * `+0`, where it returns `false`. Additionally, it returns `true` when + * `NaN` is compared to itself. + * + * @alias module:samsam.identical + * @param {*} obj1 The first value to compare + * @param {*} obj2 The second value to compare + * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise + */ +function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + + return false; +} + +module.exports = identical; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-arguments.js b/build/node_modules/@sinonjs/samsam/lib/is-arguments.js new file mode 100644 index 00000000..dde8c42d --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-arguments.js @@ -0,0 +1,16 @@ +"use strict"; + +var getClass = require("./get-class"); + +/** + * Returns `true` when `object` is an `arguments` object, `false` otherwise + * + * @alias module:samsam.isArguments + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an `arguments` object + */ +function isArguments(object) { + return getClass(object) === "Arguments"; +} + +module.exports = isArguments; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-array-type.js b/build/node_modules/@sinonjs/samsam/lib/is-array-type.js new file mode 100644 index 00000000..4ddc4959 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-array-type.js @@ -0,0 +1,20 @@ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var indexOf = require("@sinonjs/commons").prototypes.array.indexOf; +var map = require("@sinonjs/commons").prototypes.array.map; +var ARRAY_TYPES = require("./array-types"); +var type = require("type-detect"); + +/** + * Returns `true` when `object` is an array type, `false` otherwise + * + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an array type + * @private + */ +function isArrayType(object) { + return indexOf(map(ARRAY_TYPES, functionName), type(object)) !== -1; +} + +module.exports = isArrayType; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-date.js b/build/node_modules/@sinonjs/samsam/lib/is-date.js new file mode 100644 index 00000000..053d2ceb --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-date.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * Returns `true` when `value` is an instance of Date + * + * @private + * @param {Date} value The value to examine + * @returns {boolean} `true` when `value` is an instance of Date + */ +function isDate(value) { + return value instanceof Date; +} + +module.exports = isDate; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-element.js b/build/node_modules/@sinonjs/samsam/lib/is-element.js new file mode 100644 index 00000000..6bd7cbda --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-element.js @@ -0,0 +1,29 @@ +"use strict"; + +var div = typeof document !== "undefined" && document.createElement("div"); + +/** + * Returns `true` when `object` is a DOM element node. + * + * Unlike Underscore.js/lodash, this function will return `false` if `object` + * is an *element-like* object, i.e. a regular object with a `nodeType` + * property that holds the value `1`. + * + * @alias module:samsam.isElement + * @param {object} object The object to examine + * @returns {boolean} Returns `true` for DOM element nodes + */ +function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { + return false; + } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; +} + +module.exports = isElement; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-iterable.js b/build/node_modules/@sinonjs/samsam/lib/is-iterable.js new file mode 100644 index 00000000..0b472387 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-iterable.js @@ -0,0 +1,18 @@ +"use strict"; + +/** + * Returns `true` when the argument is an iterable, `false` otherwise + * + * @alias module:samsam.isIterable + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise + */ +function isIterable(val) { + // checks for null and undefined + if (typeof val !== "object") { + return false; + } + return typeof val[Symbol.iterator] === "function"; +} + +module.exports = isIterable; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-map.js b/build/node_modules/@sinonjs/samsam/lib/is-map.js new file mode 100644 index 00000000..fc1d5af2 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-map.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * Returns `true` when `value` is a Map + * + * @param {*} value A value to examine + * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise + * @private + */ +function isMap(value) { + return typeof Map !== "undefined" && value instanceof Map; +} + +module.exports = isMap; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-nan.js b/build/node_modules/@sinonjs/samsam/lib/is-nan.js new file mode 100644 index 00000000..74611416 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-nan.js @@ -0,0 +1,19 @@ +"use strict"; + +/** + * Compares a `value` to `NaN` + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `NaN` + */ +function isNaN(value) { + // Unlike global `isNaN`, this function avoids type coercion + // `typeof` check avoids IE host object issues, hat tip to + // lodash + + // eslint-disable-next-line no-self-compare + return typeof value === "number" && value !== value; +} + +module.exports = isNaN; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-neg-zero.js b/build/node_modules/@sinonjs/samsam/lib/is-neg-zero.js new file mode 100644 index 00000000..847e5152 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-neg-zero.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * Returns `true` when `value` is `-0` + * + * @alias module:samsam.isNegZero + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `-0` + */ +function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; +} + +module.exports = isNegZero; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-object.js b/build/node_modules/@sinonjs/samsam/lib/is-object.js new file mode 100644 index 00000000..ed8b6431 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-object.js @@ -0,0 +1,31 @@ +"use strict"; + +/** + * Returns `true` when the value is a regular Object and not a specialized Object + * + * This helps speed up deepEqual cyclic checks + * + * The premise is that only Objects are stored in the visited array. + * So if this function returns false, we don't have to do the + * expensive operation of searching for the value in the the array of already + * visited objects + * + * @private + * @param {object} value The object to examine + * @returns {boolean} `true` when the object is a non-specialised object + */ +function isObject(value) { + return ( + typeof value === "object" && + value !== null && + // none of these are collection objects, so we can return false + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Error) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String) + ); +} + +module.exports = isObject; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-set.js b/build/node_modules/@sinonjs/samsam/lib/is-set.js new file mode 100644 index 00000000..fa5a3ca2 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-set.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * Returns `true` when the argument is an instance of Set, `false` otherwise + * + * @alias module:samsam.isSet + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise + */ +function isSet(val) { + return (typeof Set !== "undefined" && val instanceof Set) || false; +} + +module.exports = isSet; diff --git a/build/node_modules/@sinonjs/samsam/lib/is-subset.js b/build/node_modules/@sinonjs/samsam/lib/is-subset.js new file mode 100644 index 00000000..63672c63 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/is-subset.js @@ -0,0 +1,30 @@ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.set.forEach; + +/** + * Returns `true` when `s1` is a subset of `s2`, `false` otherwise + * + * @private + * @param {Array|Set} s1 The target value + * @param {Array|Set} s2 The containing value + * @param {Function} compare A comparison function, should return `true` when + * values are considered equal + * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise + */ +function isSubset(s1, s2, compare) { + var allContained = true; + forEach(s1, function (v1) { + var includes = false; + forEach(s2, function (v2) { + if (compare(v2, v1)) { + includes = true; + } + }); + allContained = allContained && includes; + }); + + return allContained; +} + +module.exports = isSubset; diff --git a/build/node_modules/@sinonjs/samsam/lib/iterable-to-string.js b/build/node_modules/@sinonjs/samsam/lib/iterable-to-string.js new file mode 100644 index 00000000..00182681 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/iterable-to-string.js @@ -0,0 +1,71 @@ +"use strict"; + +var slice = require("@sinonjs/commons").prototypes.string.slice; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +/** + * Creates a string represenation of an iterable object + * + * @private + * @param {object} obj The iterable object to stringify + * @returns {string} A string representation + */ +function iterableToString(obj) { + if (typeOf(obj) === "map") { + return mapToString(obj); + } + + return genericIterableToString(obj); +} + +/** + * Creates a string representation of a Map + * + * @private + * @param {Map} map The map to stringify + * @returns {string} A string representation + */ +function mapToString(map) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + map.forEach(function (value, key) { + representation += `[${stringify(key)},${stringify(value)}],`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Create a string represenation for an iterable + * + * @private + * @param {object} iterable The iterable to stringify + * @returns {string} A string representation + */ +function genericIterableToString(iterable) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + iterable.forEach(function (value) { + representation += `${stringify(value)},`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Creates a string representation of the passed `item` + * + * @private + * @param {object} item The item to stringify + * @returns {string} A string representation of `item` + */ +function stringify(item) { + return typeof item === "string" ? `'${item}'` : valueToString(item); +} + +module.exports = iterableToString; diff --git a/build/node_modules/@sinonjs/samsam/lib/match.js b/build/node_modules/@sinonjs/samsam/lib/match.js new file mode 100644 index 00000000..1fb17b89 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/match.js @@ -0,0 +1,174 @@ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var indexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var forEach = require("@sinonjs/commons").prototypes.array.forEach; +var type = require("type-detect"); + +var engineCanCompareMaps = typeof Array.from === "function"; +var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define +var isArrayType = require("./is-array-type"); +var isSubset = require("./is-subset"); +var createMatcher = require("./create-matcher"); + +/** + * Returns true when `array` contains all of `subset` as defined by the `compare` + * argument + * + * @param {Array} array An array to search for a subset + * @param {Array} subset The subset to find in the array + * @param {Function} compare A comparison function + * @returns {boolean} [description] + * @private + */ +function arrayContains(array, subset, compare) { + if (subset.length === 0) { + return true; + } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (compare(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (i + j >= l) { + return false; + } + if (!compare(array[i + j], subset[j])) { + return false; + } + } + return true; + } + } + return false; +} + +/* eslint-disable complexity */ +/** + * Matches an object with a matcher (or value) + * + * @alias module:samsam.match + * @param {object} object The object candidate to match + * @param {object} matcherOrValue A matcher or value to match against + * @returns {boolean} true when `object` matches `matcherOrValue` + */ +function match(object, matcherOrValue) { + if (matcherOrValue && typeof matcherOrValue.test === "function") { + return matcherOrValue.test(object); + } + + switch (type(matcherOrValue)) { + case "bigint": + case "boolean": + case "number": + case "symbol": + return matcherOrValue === object; + case "function": + return matcherOrValue(object) === true; + case "string": + var notNull = typeof object === "string" || Boolean(object); + return ( + notNull && + indexOf( + valueToString(object).toLowerCase(), + matcherOrValue.toLowerCase() + ) >= 0 + ); + case "null": + return object === null; + case "undefined": + return typeof object === "undefined"; + case "Date": + /* istanbul ignore else */ + if (type(object) === "Date") { + return object.getTime() === matcherOrValue.getTime(); + } + /* istanbul ignore next: this is basically the rest of the function, which is covered */ + break; + case "Array": + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + return ( + isArrayType(matcherOrValue) && + arrayContains(object, matcherOrValue, match) + ); + case "Map": + /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ + if (!engineCanCompareMaps) { + throw new Error( + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + ); + } + + return ( + type(object) === "Map" && + arrayContains( + Array.from(object), + Array.from(matcherOrValue), + match + ) + ); + default: + break; + } + + switch (type(object)) { + case "null": + return false; + case "Set": + return isSubset(matcherOrValue, object, match); + default: + break; + } + + /* istanbul ignore else */ + if (matcherOrValue && typeof matcherOrValue === "object") { + if (matcherOrValue === object) { + return true; + } + if (typeof object !== "object") { + return false; + } + var prop; + // eslint-disable-next-line guard-for-in + for (prop in matcherOrValue) { + var value = object[prop]; + if ( + typeof value === "undefined" && + typeof object.getAttribute === "function" + ) { + value = object.getAttribute(prop); + } + if ( + matcherOrValue[prop] === null || + typeof matcherOrValue[prop] === "undefined" + ) { + if (value !== matcherOrValue[prop]) { + return false; + } + } else if ( + typeof value === "undefined" || + !deepEqual(value, matcherOrValue[prop]) + ) { + return false; + } + } + return true; + } + + /* istanbul ignore next */ + throw new Error("Matcher was an unknown or unsupported type"); +} +/* eslint-enable complexity */ + +forEach(Object.keys(createMatcher), function (key) { + match[key] = createMatcher[key]; +}); + +module.exports = match; diff --git a/build/node_modules/@sinonjs/samsam/lib/samsam.js b/build/node_modules/@sinonjs/samsam/lib/samsam.js new file mode 100644 index 00000000..249246bb --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/lib/samsam.js @@ -0,0 +1,26 @@ +"use strict"; + +/** + * @module samsam + */ +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isElement = require("./is-element"); +var isNegZero = require("./is-neg-zero"); +var isSet = require("./is-set"); +var isMap = require("./is-map"); +var match = require("./match"); +var deepEqualCyclic = require("./deep-equal").use(match); +var createMatcher = require("./create-matcher"); + +module.exports = { + createMatcher: createMatcher, + deepEqual: deepEqualCyclic, + identical: identical, + isArguments: isArguments, + isElement: isElement, + isMap: isMap, + isNegZero: isNegZero, + isSet: isSet, + match: match, +}; diff --git a/build/node_modules/@sinonjs/samsam/package.json b/build/node_modules/@sinonjs/samsam/package.json new file mode 100644 index 00000000..6b66ba19 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/package.json @@ -0,0 +1,121 @@ +{ + "_from": "@sinonjs/samsam@^6.1.1", + "_id": "@sinonjs/samsam@6.1.1", + "_inBundle": false, + "_integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "_location": "/@sinonjs/samsam", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@sinonjs/samsam@^6.1.1", + "name": "@sinonjs/samsam", + "escapedName": "@sinonjs%2fsamsam", + "scope": "@sinonjs", + "rawSpec": "^6.1.1", + "saveSpec": null, + "fetchSpec": "^6.1.1" + }, + "_requiredBy": [ + "/sinon" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "_shasum": "627f7f4cbdb56e6419fa2c1a3e4751ce4f6a00b1", + "_spec": "@sinonjs/samsam@^6.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", + "author": { + "name": "Christian Johansen" + }, + "browser": { + "jsdom": false, + "jsdom-global": false + }, + "bugs": { + "url": "https://github.com/sinonjs/samsam/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + }, + "deprecated": false, + "description": "Value identification and comparison functions", + "devDependencies": { + "@sinonjs/eslint-config": "^4.0.0", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.0", + "@sinonjs/referee": "^5.0.0", + "@studio/changes": "^2.0.0", + "benchmark": "2.1.4", + "husky": "^4.2.1", + "jquery": "^3.4.1", + "jsdoc": "^3.6.3", + "jsdom": "^16.2.0", + "jsdom-global": "^3.0.2", + "lint-staged": "^10.0.7", + "microtime": "3.0.0", + "mkdirp": "^1.0.3", + "mocha": "^7.0.1", + "mochify": "^6.6.0", + "nyc": "^15.0.0", + "prettier": "^2.2.1", + "proxyquire": "^2.1.3", + "proxyquire-universal": "^2.1.0", + "proxyquireify": "^3.2.1", + "typescript": "^4.0.5" + }, + "files": [ + "docs/", + "lib/", + "!lib/**/*.test.js", + "types/" + ], + "homepage": "http://sinonjs.github.io/samsam/", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "license": "BSD-3-Clause", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint" + }, + "main": "./lib/samsam", + "name": "@sinonjs/samsam", + "nyc": { + "exclude": [ + "**/*.test.js", + "coverage/**", + "dist/**", + "out/**", + "site/**", + "eslint-local-rules.js", + "rollup.config.js", + "lib/deep-equal-benchmark.js" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sinonjs/samsam.git" + }, + "scripts": { + "benchmark": "node lib/deep-equal-benchmark.js", + "build": "rm -rf types && tsc", + "jsdoc": "jsdoc -c jsdoc.conf.json", + "lint": "eslint .", + "postversion": "git push --follow-tags && npm publish --access public", + "prepublishOnly": "npm run build && mkdocs gh-deploy -r upstream || mkdocs gh-deploy -r origin", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "./check-external-dependencies.sh && npm run test-check-coverage", + "test": "mocha ./lib/*.test.js", + "test-check-coverage": "npm run test-coverage && nyc check-coverage --branches 100 --functions 100 --lines 100", + "test-cloud": "npm run test-headless -- --wd", + "test-coverage": "nyc --all --reporter text --reporter html --reporter lcovonly npm run test", + "test-headless": "mochify --no-detect-globals --recursive -R dot --plugin [ proxyquire-universal ] \"./lib/*.test.js\"", + "version": "changes --commits --footer" + }, + "types": "./types/samsam.d.ts", + "version": "6.1.1" +} diff --git a/build/node_modules/@sinonjs/samsam/types/array-types.d.ts b/build/node_modules/@sinonjs/samsam/types/array-types.d.ts new file mode 100644 index 00000000..a125512d --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/array-types.d.ts @@ -0,0 +1,2 @@ +export = ARRAY_TYPES; +declare var ARRAY_TYPES: (ArrayConstructor | Int8ArrayConstructor)[]; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher.d.ts new file mode 100644 index 00000000..5a41d15b --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher.d.ts @@ -0,0 +1,40 @@ +export = createMatcher; +/** + * Creates a matcher object for the passed expectation + * + * @alias module:samsam.createMatcher + * @param {*} expectation An expecttation + * @param {string} message A message for the expectation + * @returns {object} A matcher object + */ +declare function createMatcher(expectation: any, message: string, ...args: any[]): object; +declare namespace createMatcher { + export { isMatcher }; + export const any: any; + export const defined: any; + export const truthy: any; + export const falsy: any; + export function same(expectation: any): any; + function _in(arrayOfExpectations: any): any; + export { _in as in }; + export function typeOf(type: any): any; + export function instanceOf(type: any): any; + export const has: any; + export const hasOwn: any; + export function hasNested(property: any, value: any, ...args: any[]): any; + export function json(value: any): any; + export function every(predicate: any): any; + export function some(predicate: any): any; + export const array: any; + export const map: any; + export const set: any; + export const bool: any; + export const number: any; + export const string: any; + export const object: any; + export const func: any; + export const regexp: any; + export const date: any; + export const symbol: any; +} +declare var isMatcher: typeof import("./create-matcher/is-matcher"); diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-matcher.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-matcher.d.ts new file mode 100644 index 00000000..f05b6ed2 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-matcher.d.ts @@ -0,0 +1,8 @@ +export = assertMatcher; +/** + * Throws a TypeError when `value` is not a matcher + * + * @private + * @param {*} value The value to examine + */ +declare function assertMatcher(value: any): void; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-method-exists.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-method-exists.d.ts new file mode 100644 index 00000000..b501e976 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-method-exists.d.ts @@ -0,0 +1,12 @@ +export = assertMethodExists; +/** + * Throws a TypeError when expected method doesn't exist + * + * @private + * @param {*} value A value to examine + * @param {string} method The name of the method to look for + * @param {name} name A name to use for the error message + * @param {string} methodPath The name of the method to use for error messages + * @throws {TypeError} When the method doesn't exist + */ +declare function assertMethodExists(value: any, method: string, name: never, methodPath: string): void; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-type.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-type.d.ts new file mode 100644 index 00000000..1436b5dd --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/assert-type.d.ts @@ -0,0 +1,12 @@ +export = assertType; +/** + * Ensures that value is of type + * + * @private + * @param {*} value A value to examine + * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string" + * @param {string} name A string to use for the error message + * @throws {TypeError} If value is not of the expected type + * @returns {undefined} + */ +declare function assertType(value: any, type: string, name: string): undefined; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/is-iterable.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/is-iterable.d.ts new file mode 100644 index 00000000..d5320bbc --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/is-iterable.d.ts @@ -0,0 +1,9 @@ +export = isIterable; +/** + * Returns `true` for iterables + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` looks like an iterable + */ +declare function isIterable(value: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/is-matcher.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/is-matcher.d.ts new file mode 100644 index 00000000..0be0a4dc --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/is-matcher.d.ts @@ -0,0 +1,9 @@ +export = isMatcher; +/** + * Returns `true` when `object` is a matcher + * + * @private + * @param {*} object A value to examine + * @returns {boolean} Returns `true` when `object` is a matcher + */ +declare function isMatcher(object: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/match-object.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/match-object.d.ts new file mode 100644 index 00000000..c650c918 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/match-object.d.ts @@ -0,0 +1,11 @@ +export = matchObject; +/** + * Matches `actual` with `expectation` + * + * @private + * @param {*} actual A value to examine + * @param {object} expectation An object with properties to match on + * @param {object} matcher A matcher to use for comparison + * @returns {boolean} Returns true when `actual` matches all properties in `expectation` + */ +declare function matchObject(actual: any, expectation: object, matcher: object): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/matcher-prototype.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/matcher-prototype.d.ts new file mode 100644 index 00000000..41fc57dc --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/matcher-prototype.d.ts @@ -0,0 +1,2 @@ +export function or(valueOrMatcher: any, ...args: any[]): any; +export function and(valueOrMatcher: any, ...args: any[]): any; diff --git a/build/node_modules/@sinonjs/samsam/types/create-matcher/type-map.d.ts b/build/node_modules/@sinonjs/samsam/types/create-matcher/type-map.d.ts new file mode 100644 index 00000000..8f2be8e0 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-matcher/type-map.d.ts @@ -0,0 +1,8 @@ +export = createTypeMap; +declare function createTypeMap(match: any): { + function: (m: any, expectation: any, message: any) => void; + number: (m: any, expectation: any) => void; + object: (m: any, expectation: any) => any; + regexp: (m: any, expectation: any) => void; + string: (m: any, expectation: any) => void; +}; diff --git a/build/node_modules/@sinonjs/samsam/types/create-set.d.ts b/build/node_modules/@sinonjs/samsam/types/create-set.d.ts new file mode 100644 index 00000000..7ef069ac --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/create-set.d.ts @@ -0,0 +1,13 @@ +export = createSet; +/** + * This helper makes it convenient to create Set instances from a + * collection, an overcomes the shortcoming that IE11 doesn't support + * collection arguments + * + * @private + * @param {Array} array An array to create a set from + * @returns {Set} A set (unique) containing the members from array + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set + */ +declare function createSet(array: any[], ...args: any[]): any; diff --git a/build/node_modules/@sinonjs/samsam/types/deep-equal-benchmark.d.ts b/build/node_modules/@sinonjs/samsam/types/deep-equal-benchmark.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/deep-equal-benchmark.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/build/node_modules/@sinonjs/samsam/types/deep-equal.d.ts b/build/node_modules/@sinonjs/samsam/types/deep-equal.d.ts new file mode 100644 index 00000000..b1fa5362 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/deep-equal.d.ts @@ -0,0 +1,22 @@ +export = deepEqualCyclic; +/** + * Deep equal comparison. Two values are "deep equal" when: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``actual`` is deepEqual to the corresponding property in ``expectation`` + * + * Supports cyclic objects. + * + * @alias module:samsam.deepEqual + * @param {*} actual The object to examine + * @param {*} expectation The object actual is expected to be equal to + * @param {object} match A value to match on + * @returns {boolean} Returns true when actual and expectation are considered equal + */ +declare function deepEqualCyclic(actual: any, expectation: any, match: object): boolean; +declare namespace deepEqualCyclic { + function use(match: any): (a: any, b: any) => boolean; +} diff --git a/build/node_modules/@sinonjs/samsam/types/get-class.d.ts b/build/node_modules/@sinonjs/samsam/types/get-class.d.ts new file mode 100644 index 00000000..76687d6e --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/get-class.d.ts @@ -0,0 +1,11 @@ +export = getClass; +/** + * Returns the internal `Class` by calling `Object.prototype.toString` + * with the provided value as `this`. Return value is a `String`, naming the + * internal class, e.g. "Array" + * + * @private + * @param {*} value - Any value + * @returns {string} - A string representation of the `Class` of `value` + */ +declare function getClass(value: any): string; diff --git a/build/node_modules/@sinonjs/samsam/types/identical.d.ts b/build/node_modules/@sinonjs/samsam/types/identical.d.ts new file mode 100644 index 00000000..f094d65c --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/identical.d.ts @@ -0,0 +1,19 @@ +export = identical; +/** + * Strict equality check according to EcmaScript Harmony's `egal`. + * + * **From the Harmony wiki:** + * > An `egal` function simply makes available the internal `SameValue` function + * > from section 9.12 of the ES5 spec. If two values are egal, then they are not + * > observably distinguishable. + * + * `identical` returns `true` when `===` is `true`, except for `-0` and + * `+0`, where it returns `false`. Additionally, it returns `true` when + * `NaN` is compared to itself. + * + * @alias module:samsam.identical + * @param {*} obj1 The first value to compare + * @param {*} obj2 The second value to compare + * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise + */ +declare function identical(obj1: any, obj2: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-arguments.d.ts b/build/node_modules/@sinonjs/samsam/types/is-arguments.d.ts new file mode 100644 index 00000000..dbf55c3d --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-arguments.d.ts @@ -0,0 +1,9 @@ +export = isArguments; +/** + * Returns `true` when `object` is an `arguments` object, `false` otherwise + * + * @alias module:samsam.isArguments + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an `arguments` object + */ +declare function isArguments(object: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-array-type.d.ts b/build/node_modules/@sinonjs/samsam/types/is-array-type.d.ts new file mode 100644 index 00000000..7b7be23d --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-array-type.d.ts @@ -0,0 +1,9 @@ +export = isArrayType; +/** + * Returns `true` when `object` is an array type, `false` otherwise + * + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an array type + * @private + */ +declare function isArrayType(object: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-date.d.ts b/build/node_modules/@sinonjs/samsam/types/is-date.d.ts new file mode 100644 index 00000000..adf201b5 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-date.d.ts @@ -0,0 +1,9 @@ +export = isDate; +/** + * Returns `true` when `value` is an instance of Date + * + * @private + * @param {Date} value The value to examine + * @returns {boolean} `true` when `value` is an instance of Date + */ +declare function isDate(value: Date): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-element.d.ts b/build/node_modules/@sinonjs/samsam/types/is-element.d.ts new file mode 100644 index 00000000..db85af7e --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-element.d.ts @@ -0,0 +1,13 @@ +export = isElement; +/** + * Returns `true` when `object` is a DOM element node. + * + * Unlike Underscore.js/lodash, this function will return `false` if `object` + * is an *element-like* object, i.e. a regular object with a `nodeType` + * property that holds the value `1`. + * + * @alias module:samsam.isElement + * @param {object} object The object to examine + * @returns {boolean} Returns `true` for DOM element nodes + */ +declare function isElement(object: object): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-iterable.d.ts b/build/node_modules/@sinonjs/samsam/types/is-iterable.d.ts new file mode 100644 index 00000000..c14b9868 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-iterable.d.ts @@ -0,0 +1,9 @@ +export = isIterable; +/** + * Returns `true` when the argument is an iterable, `false` otherwise + * + * @alias module:samsam.isIterable + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise + */ +declare function isIterable(val: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-map.d.ts b/build/node_modules/@sinonjs/samsam/types/is-map.d.ts new file mode 100644 index 00000000..e17a0e00 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-map.d.ts @@ -0,0 +1,9 @@ +export = isMap; +/** + * Returns `true` when `value` is a Map + * + * @param {*} value A value to examine + * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise + * @private + */ +declare function isMap(value: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-nan.d.ts b/build/node_modules/@sinonjs/samsam/types/is-nan.d.ts new file mode 100644 index 00000000..efe689bd --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-nan.d.ts @@ -0,0 +1,9 @@ +export = isNaN; +/** + * Compares a `value` to `NaN` + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `NaN` + */ +declare function isNaN(value: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-neg-zero.d.ts b/build/node_modules/@sinonjs/samsam/types/is-neg-zero.d.ts new file mode 100644 index 00000000..fa37eec9 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-neg-zero.d.ts @@ -0,0 +1,9 @@ +export = isNegZero; +/** + * Returns `true` when `value` is `-0` + * + * @alias module:samsam.isNegZero + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `-0` + */ +declare function isNegZero(value: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-object.d.ts b/build/node_modules/@sinonjs/samsam/types/is-object.d.ts new file mode 100644 index 00000000..22f45606 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-object.d.ts @@ -0,0 +1,16 @@ +export = isObject; +/** + * Returns `true` when the value is a regular Object and not a specialized Object + * + * This helps speed up deepEqual cyclic checks + * + * The premise is that only Objects are stored in the visited array. + * So if this function returns false, we don't have to do the + * expensive operation of searching for the value in the the array of already + * visited objects + * + * @private + * @param {object} value The object to examine + * @returns {boolean} `true` when the object is a non-specialised object + */ +declare function isObject(value: object): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-set.d.ts b/build/node_modules/@sinonjs/samsam/types/is-set.d.ts new file mode 100644 index 00000000..c6f80459 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-set.d.ts @@ -0,0 +1,9 @@ +export = isSet; +/** + * Returns `true` when the argument is an instance of Set, `false` otherwise + * + * @alias module:samsam.isSet + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise + */ +declare function isSet(val: any): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/is-subset.d.ts b/build/node_modules/@sinonjs/samsam/types/is-subset.d.ts new file mode 100644 index 00000000..54d52225 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/is-subset.d.ts @@ -0,0 +1,12 @@ +export = isSubset; +/** + * Returns `true` when `s1` is a subset of `s2`, `false` otherwise + * + * @private + * @param {Array|Set} s1 The target value + * @param {Array|Set} s2 The containing value + * @param {Function} compare A comparison function, should return `true` when + * values are considered equal + * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise + */ +declare function isSubset(s1: any[] | any, s2: any[] | any, compare: Function): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/iterable-to-string.d.ts b/build/node_modules/@sinonjs/samsam/types/iterable-to-string.d.ts new file mode 100644 index 00000000..0896cd94 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/iterable-to-string.d.ts @@ -0,0 +1,9 @@ +export = iterableToString; +/** + * Creates a string represenation of an iterable object + * + * @private + * @param {object} obj The iterable object to stringify + * @returns {string} A string representation + */ +declare function iterableToString(obj: object): string; diff --git a/build/node_modules/@sinonjs/samsam/types/match.d.ts b/build/node_modules/@sinonjs/samsam/types/match.d.ts new file mode 100644 index 00000000..986abff3 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/match.d.ts @@ -0,0 +1,10 @@ +export = match; +/** + * Matches an object with a matcher (or value) + * + * @alias module:samsam.match + * @param {object} object The object candidate to match + * @param {object} matcherOrValue A matcher or value to match against + * @returns {boolean} true when `object` matches `matcherOrValue` + */ +declare function match(object: object, matcherOrValue: object): boolean; diff --git a/build/node_modules/@sinonjs/samsam/types/samsam.d.ts b/build/node_modules/@sinonjs/samsam/types/samsam.d.ts new file mode 100644 index 00000000..5344c8a7 --- /dev/null +++ b/build/node_modules/@sinonjs/samsam/types/samsam.d.ts @@ -0,0 +1,13 @@ +export var createMatcher: typeof import("./create-matcher"); +declare var deepEqualCyclic: (a: any, b: any) => boolean; +/** + * @module samsam + */ +export var identical: typeof import("./identical"); +export var isArguments: typeof import("./is-arguments"); +export var isElement: typeof import("./is-element"); +export var isMap: typeof import("./is-map"); +export var isNegZero: typeof import("./is-neg-zero"); +export var isSet: typeof import("./is-set"); +export var match: typeof import("./match"); +export { deepEqualCyclic as deepEqual }; diff --git a/build/node_modules/@sinonjs/text-encoding/LICENSE.md b/build/node_modules/@sinonjs/text-encoding/LICENSE.md new file mode 100644 index 00000000..5ab10466 --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/LICENSE.md @@ -0,0 +1,237 @@ +The encoding indexes, algorithms, and many comments in the code +derive from the Encoding Standard https://encoding.spec.whatwg.org/ + +Otherwise, the code of this repository is released under the Unlicense +license and is also dual-licensed under an Apache 2.0 license. Both +are included below. + +# Unlicense + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + +# Apache 2.0 License + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/node_modules/@sinonjs/text-encoding/README.md b/build/node_modules/@sinonjs/text-encoding/README.md new file mode 100644 index 00000000..d5bff911 --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/README.md @@ -0,0 +1,111 @@ +text-encoding +============== + +This is a polyfill for the [Encoding Living +Standard](https://encoding.spec.whatwg.org/) API for the Web, allowing +encoding and decoding of textual data to and from Typed Array buffers +for binary data in JavaScript. + +By default it adheres to the spec and does not support *encoding* to +legacy encodings, only *decoding*. It is also implemented to match the +specification's algorithms, rather than for performance. The intended +use is within Web pages, so it has no dependency on server frameworks +or particular module schemes. + +Basic examples and tests are included. + +### Install ### + +There are a few ways you can get and use the `text-encoding` library. + +### HTML Page Usage ### + +Clone the repo and include the files directly: + +```html + + + +``` + +This is the only use case the developer cares about. If you want those +fancy module and/or package manager things that are popular these days +you should probably use a different library. + +#### Package Managers #### + +The package is published to **npm** and **bower** as `@sinonjs/text-encoding`. +Use through these is not really supported, since they aren't used by +the developer of the library. Using `require()` in interesting ways +probably breaks. Patches welcome, as long as they don't break the +basic use of the files via ` +``` + +To support the legacy encodings (which may be stateful), the +TextEncoder `encode()` method accepts an optional dictionary and +`stream` option, e.g. `encoder.encode(string, {stream: true});` This +is not needed for standard encoding since the input is always in +complete code points. diff --git a/build/node_modules/@sinonjs/text-encoding/index.js b/build/node_modules/@sinonjs/text-encoding/index.js new file mode 100644 index 00000000..cc57d658 --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/index.js @@ -0,0 +1,9 @@ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; diff --git a/build/node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js b/build/node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js new file mode 100644 index 00000000..4f170c3b --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js @@ -0,0 +1,47 @@ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); \ No newline at end of file diff --git a/build/node_modules/@sinonjs/text-encoding/lib/encoding.js b/build/node_modules/@sinonjs/text-encoding/lib/encoding.js new file mode 100644 index 00000000..13aca2c6 --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/lib/encoding.js @@ -0,0 +1,3313 @@ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // If we're in node require encoding-indexes and attach it to the global. + if (typeof module !== "undefined" && module.exports && + !global["encoding-indexes"]) { + global["encoding-indexes"] = + require("./encoding-indexes.js")["encoding-indexes"]; + } + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (!global['TextEncoder']) + global['TextEncoder'] = TextEncoder; + if (!global['TextDecoder']) + global['TextDecoder'] = TextDecoder; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: global['TextEncoder'], + TextDecoder: global['TextDecoder'], + EncodingIndexes: global["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); \ No newline at end of file diff --git a/build/node_modules/@sinonjs/text-encoding/package.json b/build/node_modules/@sinonjs/text-encoding/package.json new file mode 100644 index 00000000..ca97a846 --- /dev/null +++ b/build/node_modules/@sinonjs/text-encoding/package.json @@ -0,0 +1,93 @@ +{ + "_from": "@sinonjs/text-encoding@^0.7.1", + "_id": "@sinonjs/text-encoding@0.7.1", + "_inBundle": false, + "_integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "_location": "/@sinonjs/text-encoding", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@sinonjs/text-encoding@^0.7.1", + "name": "@sinonjs/text-encoding", + "escapedName": "@sinonjs%2ftext-encoding", + "scope": "@sinonjs", + "rawSpec": "^0.7.1", + "saveSpec": null, + "fetchSpec": "^0.7.1" + }, + "_requiredBy": [ + "/nise" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "_shasum": "8da5c6530915653f3a1f38fd5f101d8c3f8079c5", + "_spec": "@sinonjs/text-encoding@^0.7.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/nise", + "author": { + "name": "Joshua Bell", + "email": "inexorabletash@gmail.com" + }, + "bugs": { + "url": "https://github.com/inexorabletash/text-encoding/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Joshua Bell", + "email": "inexorabletash@gmail.com" + }, + { + "name": "Rick Eyre", + "email": "rick.eyre@outlook.com" + }, + { + "name": "Eugen Podaru", + "email": "eugen.podaru@live.com" + }, + { + "name": "Filip Dupanović", + "email": "filip.dupanovic@gmail.com" + }, + { + "name": "Anne van Kesteren", + "email": "annevk@annevk.nl" + }, + { + "name": "Author: Francis Avila", + "email": "francisga@gmail.com" + }, + { + "name": "Michael J. Ryan", + "email": "tracker1@gmail.com" + }, + { + "name": "Pierre Queinnec", + "email": "pierre@queinnec.org" + }, + { + "name": "Zack Weinberg", + "email": "zackw@panix.com" + } + ], + "deprecated": false, + "description": "Polyfill for the Encoding Living Standard's API.", + "files": [ + "index.js", + "lib/encoding.js", + "lib/encoding-indexes.js" + ], + "homepage": "https://github.com/inexorabletash/text-encoding", + "keywords": [ + "encoding", + "decoding", + "living standard" + ], + "license": "(Unlicense OR Apache-2.0)", + "main": "index.js", + "name": "@sinonjs/text-encoding", + "repository": { + "type": "git", + "url": "git+https://github.com/inexorabletash/text-encoding.git" + }, + "version": "0.7.1" +} diff --git a/build/node_modules/@types/estree/LICENSE b/build/node_modules/@types/estree/LICENSE new file mode 100644 index 00000000..4b1ad51b --- /dev/null +++ b/build/node_modules/@types/estree/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/build/node_modules/@types/estree/README.md b/build/node_modules/@types/estree/README.md new file mode 100644 index 00000000..3ec0d396 --- /dev/null +++ b/build/node_modules/@types/estree/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/estree` + +# Summary +This package contains type definitions for ESTree AST specification (https://github.com/estree/estree). + +# Details +Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree + +Additional Details + * Last updated: Tue, 17 Apr 2018 20:22:09 GMT + * Dependencies: none + * Global values: none + +# Credits +These definitions were written by RReverser . diff --git a/build/node_modules/@types/estree/index.d.ts b/build/node_modules/@types/estree/index.d.ts new file mode 100644 index 00000000..9109295d --- /dev/null +++ b/build/node_modules/@types/estree/index.d.ts @@ -0,0 +1,548 @@ +// Type definitions for ESTree AST specification +// Project: https://github.com/estree/estree +// Definitions by: RReverser +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +// This definition file follows a somewhat unusual format. ESTree allows +// runtime type checks based on the `type` parameter. In order to explain this +// to typescript we want to use discriminated union types: +// https://github.com/Microsoft/TypeScript/pull/9163 +// +// For ESTree this is a bit tricky because the high level interfaces like +// Node or Function are pulling double duty. We want to pass common fields down +// to the interfaces that extend them (like Identifier or +// ArrowFunctionExpression), but you can't extend a type union or enforce +// common fields on them. So we've split the high level interfaces into two +// types, a base type which passes down inhereted fields, and a type union of +// all types which extend the base type. Only the type union is exported, and +// the union is how other types refer to the collection of inheriting types. +// +// This makes the definitions file here somewhat more difficult to maintain, +// but it has the notable advantage of making ESTree much easier to use as +// an end user. + +interface BaseNodeWithoutComments { + // Every leaf interface that extends BaseNode must specify a type property. + // The type property should be a string literal. For example, Identifier + // has: `type: "Identifier"` + type: string; + loc?: SourceLocation | null; + range?: [number, number]; +} + +interface BaseNode extends BaseNodeWithoutComments { + leadingComments?: Array; + trailingComments?: Array; +} + +export type Node = + Identifier | Literal | Program | Function | SwitchCase | CatchClause | + VariableDeclarator | Statement | Expression | Property | + AssignmentProperty | Super | TemplateElement | SpreadElement | Pattern | + ClassBody | Class | MethodDefinition | ModuleDeclaration | ModuleSpecifier; + +export interface Comment extends BaseNodeWithoutComments { + type: "Line" | "Block"; + value: string; +} + +interface SourceLocation { + source?: string | null; + start: Position; + end: Position; +} + +export interface Position { + /** >= 1 */ + line: number; + /** >= 0 */ + column: number; +} + +export interface Program extends BaseNode { + type: "Program"; + sourceType: "script" | "module"; + body: Array; + comments?: Array; +} + +interface BaseFunction extends BaseNode { + params: Array; + generator?: boolean; + async?: boolean; + // The body is either BlockStatement or Expression because arrow functions + // can have a body that's either. FunctionDeclarations and + // FunctionExpressions have only BlockStatement bodies. + body: BlockStatement | Expression; +} + +export type Function = + FunctionDeclaration | FunctionExpression | ArrowFunctionExpression; + +export type Statement = + ExpressionStatement | BlockStatement | EmptyStatement | + DebuggerStatement | WithStatement | ReturnStatement | LabeledStatement | + BreakStatement | ContinueStatement | IfStatement | SwitchStatement | + ThrowStatement | TryStatement | WhileStatement | DoWhileStatement | + ForStatement | ForInStatement | ForOfStatement | Declaration; + +interface BaseStatement extends BaseNode { } + +export interface EmptyStatement extends BaseStatement { + type: "EmptyStatement"; +} + +export interface BlockStatement extends BaseStatement { + type: "BlockStatement"; + body: Array; + innerComments?: Array; +} + +export interface ExpressionStatement extends BaseStatement { + type: "ExpressionStatement"; + expression: Expression; +} + +export interface IfStatement extends BaseStatement { + type: "IfStatement"; + test: Expression; + consequent: Statement; + alternate?: Statement | null; +} + +export interface LabeledStatement extends BaseStatement { + type: "LabeledStatement"; + label: Identifier; + body: Statement; +} + +export interface BreakStatement extends BaseStatement { + type: "BreakStatement"; + label?: Identifier | null; +} + +export interface ContinueStatement extends BaseStatement { + type: "ContinueStatement"; + label?: Identifier | null; +} + +export interface WithStatement extends BaseStatement { + type: "WithStatement"; + object: Expression; + body: Statement; +} + +export interface SwitchStatement extends BaseStatement { + type: "SwitchStatement"; + discriminant: Expression; + cases: Array; +} + +export interface ReturnStatement extends BaseStatement { + type: "ReturnStatement"; + argument?: Expression | null; +} + +export interface ThrowStatement extends BaseStatement { + type: "ThrowStatement"; + argument: Expression; +} + +export interface TryStatement extends BaseStatement { + type: "TryStatement"; + block: BlockStatement; + handler?: CatchClause | null; + finalizer?: BlockStatement | null; +} + +export interface WhileStatement extends BaseStatement { + type: "WhileStatement"; + test: Expression; + body: Statement; +} + +export interface DoWhileStatement extends BaseStatement { + type: "DoWhileStatement"; + body: Statement; + test: Expression; +} + +export interface ForStatement extends BaseStatement { + type: "ForStatement"; + init?: VariableDeclaration | Expression | null; + test?: Expression | null; + update?: Expression | null; + body: Statement; +} + +interface BaseForXStatement extends BaseStatement { + left: VariableDeclaration | Pattern; + right: Expression; + body: Statement; +} + +export interface ForInStatement extends BaseForXStatement { + type: "ForInStatement"; +} + +export interface DebuggerStatement extends BaseStatement { + type: "DebuggerStatement"; +} + +export type Declaration = + FunctionDeclaration | VariableDeclaration | ClassDeclaration; + +interface BaseDeclaration extends BaseStatement { } + +export interface FunctionDeclaration extends BaseFunction, BaseDeclaration { + type: "FunctionDeclaration"; + /** It is null when a function declaration is a part of the `export default function` statement */ + id: Identifier | null; + body: BlockStatement; +} + +export interface VariableDeclaration extends BaseDeclaration { + type: "VariableDeclaration"; + declarations: Array; + kind: "var" | "let" | "const"; +} + +export interface VariableDeclarator extends BaseNode { + type: "VariableDeclarator"; + id: Pattern; + init?: Expression | null; +} + +type Expression = + ThisExpression | ArrayExpression | ObjectExpression | FunctionExpression | + ArrowFunctionExpression | YieldExpression | Literal | UnaryExpression | + UpdateExpression | BinaryExpression | AssignmentExpression | + LogicalExpression | MemberExpression | ConditionalExpression | + CallExpression | NewExpression | SequenceExpression | TemplateLiteral | + TaggedTemplateExpression | ClassExpression | MetaProperty | Identifier | + AwaitExpression; + +export interface BaseExpression extends BaseNode { } + +export interface ThisExpression extends BaseExpression { + type: "ThisExpression"; +} + +export interface ArrayExpression extends BaseExpression { + type: "ArrayExpression"; + elements: Array; +} + +export interface ObjectExpression extends BaseExpression { + type: "ObjectExpression"; + properties: Array; +} + +export interface Property extends BaseNode { + type: "Property"; + key: Expression; + value: Expression | Pattern; // Could be an AssignmentProperty + kind: "init" | "get" | "set"; + method: boolean; + shorthand: boolean; + computed: boolean; +} + +export interface FunctionExpression extends BaseFunction, BaseExpression { + id?: Identifier | null; + type: "FunctionExpression"; + body: BlockStatement; +} + +export interface SequenceExpression extends BaseExpression { + type: "SequenceExpression"; + expressions: Array; +} + +export interface UnaryExpression extends BaseExpression { + type: "UnaryExpression"; + operator: UnaryOperator; + prefix: true; + argument: Expression; +} + +export interface BinaryExpression extends BaseExpression { + type: "BinaryExpression"; + operator: BinaryOperator; + left: Expression; + right: Expression; +} + +export interface AssignmentExpression extends BaseExpression { + type: "AssignmentExpression"; + operator: AssignmentOperator; + left: Pattern | MemberExpression; + right: Expression; +} + +export interface UpdateExpression extends BaseExpression { + type: "UpdateExpression"; + operator: UpdateOperator; + argument: Expression; + prefix: boolean; +} + +export interface LogicalExpression extends BaseExpression { + type: "LogicalExpression"; + operator: LogicalOperator; + left: Expression; + right: Expression; +} + +export interface ConditionalExpression extends BaseExpression { + type: "ConditionalExpression"; + test: Expression; + alternate: Expression; + consequent: Expression; +} + +interface BaseCallExpression extends BaseExpression { + callee: Expression | Super; + arguments: Array; +} +export type CallExpression = SimpleCallExpression | NewExpression; + +export interface SimpleCallExpression extends BaseCallExpression { + type: "CallExpression"; +} + +export interface NewExpression extends BaseCallExpression { + type: "NewExpression"; +} + +export interface MemberExpression extends BaseExpression, BasePattern { + type: "MemberExpression"; + object: Expression | Super; + property: Expression; + computed: boolean; +} + +export type Pattern = + Identifier | ObjectPattern | ArrayPattern | RestElement | + AssignmentPattern | MemberExpression; + +interface BasePattern extends BaseNode { } + +export interface SwitchCase extends BaseNode { + type: "SwitchCase"; + test?: Expression | null; + consequent: Array; +} + +export interface CatchClause extends BaseNode { + type: "CatchClause"; + param: Pattern; + body: BlockStatement; +} + +export interface Identifier extends BaseNode, BaseExpression, BasePattern { + type: "Identifier"; + name: string; +} + +export type Literal = SimpleLiteral | RegExpLiteral; + +export interface SimpleLiteral extends BaseNode, BaseExpression { + type: "Literal"; + value: string | boolean | number | null; + raw?: string; +} + +export interface RegExpLiteral extends BaseNode, BaseExpression { + type: "Literal"; + value?: RegExp | null; + regex: { + pattern: string; + flags: string; + }; + raw?: string; +} + +export type UnaryOperator = + "-" | "+" | "!" | "~" | "typeof" | "void" | "delete"; + +export type BinaryOperator = + "==" | "!=" | "===" | "!==" | "<" | "<=" | ">" | ">=" | "<<" | + ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "**" | "|" | "^" | "&" | "in" | + "instanceof"; + +export type LogicalOperator = "||" | "&&"; + +export type AssignmentOperator = + "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "**=" | "<<=" | ">>=" | ">>>=" | + "|=" | "^=" | "&="; + +export type UpdateOperator = "++" | "--"; + +export interface ForOfStatement extends BaseForXStatement { + type: "ForOfStatement"; +} + +export interface Super extends BaseNode { + type: "Super"; +} + +export interface SpreadElement extends BaseNode { + type: "SpreadElement"; + argument: Expression; +} + +export interface ArrowFunctionExpression extends BaseExpression, BaseFunction { + type: "ArrowFunctionExpression"; + expression: boolean; + body: BlockStatement | Expression; +} + +export interface YieldExpression extends BaseExpression { + type: "YieldExpression"; + argument?: Expression | null; + delegate: boolean; +} + +export interface TemplateLiteral extends BaseExpression { + type: "TemplateLiteral"; + quasis: Array; + expressions: Array; +} + +export interface TaggedTemplateExpression extends BaseExpression { + type: "TaggedTemplateExpression"; + tag: Expression; + quasi: TemplateLiteral; +} + +export interface TemplateElement extends BaseNode { + type: "TemplateElement"; + tail: boolean; + value: { + cooked: string; + raw: string; + }; +} + +export interface AssignmentProperty extends Property { + value: Pattern; + kind: "init"; + method: boolean; // false +} + +export interface ObjectPattern extends BasePattern { + type: "ObjectPattern"; + properties: Array; +} + +export interface ArrayPattern extends BasePattern { + type: "ArrayPattern"; + elements: Array; +} + +export interface RestElement extends BasePattern { + type: "RestElement"; + argument: Pattern; +} + +export interface AssignmentPattern extends BasePattern { + type: "AssignmentPattern"; + left: Pattern; + right: Expression; +} + +export type Class = ClassDeclaration | ClassExpression; +interface BaseClass extends BaseNode { + superClass?: Expression | null; + body: ClassBody; +} + +export interface ClassBody extends BaseNode { + type: "ClassBody"; + body: Array; +} + +export interface MethodDefinition extends BaseNode { + type: "MethodDefinition"; + key: Expression; + value: FunctionExpression; + kind: "constructor" | "method" | "get" | "set"; + computed: boolean; + static: boolean; +} + +export interface ClassDeclaration extends BaseClass, BaseDeclaration { + type: "ClassDeclaration"; + /** It is null when a class declaration is a part of the `export default class` statement */ + id: Identifier | null; +} + +export interface ClassExpression extends BaseClass, BaseExpression { + type: "ClassExpression"; + id?: Identifier | null; +} + +export interface MetaProperty extends BaseExpression { + type: "MetaProperty"; + meta: Identifier; + property: Identifier; +} + +export type ModuleDeclaration = + ImportDeclaration | ExportNamedDeclaration | ExportDefaultDeclaration | + ExportAllDeclaration; +interface BaseModuleDeclaration extends BaseNode { } + +export type ModuleSpecifier = + ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | + ExportSpecifier; +interface BaseModuleSpecifier extends BaseNode { + local: Identifier; +} + +export interface ImportDeclaration extends BaseModuleDeclaration { + type: "ImportDeclaration"; + specifiers: Array; + source: Literal; +} + +export interface ImportSpecifier extends BaseModuleSpecifier { + type: "ImportSpecifier"; + imported: Identifier; +} + +export interface ImportDefaultSpecifier extends BaseModuleSpecifier { + type: "ImportDefaultSpecifier"; +} + +export interface ImportNamespaceSpecifier extends BaseModuleSpecifier { + type: "ImportNamespaceSpecifier"; +} + +export interface ExportNamedDeclaration extends BaseModuleDeclaration { + type: "ExportNamedDeclaration"; + declaration?: Declaration | null; + specifiers: Array; + source?: Literal | null; +} + +export interface ExportSpecifier extends BaseModuleSpecifier { + type: "ExportSpecifier"; + exported: Identifier; +} + +export interface ExportDefaultDeclaration extends BaseModuleDeclaration { + type: "ExportDefaultDeclaration"; + declaration: Declaration | Expression; +} + +export interface ExportAllDeclaration extends BaseModuleDeclaration { + type: "ExportAllDeclaration"; + source: Literal; +} + +export interface AwaitExpression extends BaseExpression { + type: "AwaitExpression"; + argument: Expression; +} diff --git a/build/node_modules/@types/estree/package.json b/build/node_modules/@types/estree/package.json new file mode 100644 index 00000000..5e6a1c6d --- /dev/null +++ b/build/node_modules/@types/estree/package.json @@ -0,0 +1,52 @@ +{ + "_from": "@types/estree@0.0.39", + "_id": "@types/estree@0.0.39", + "_inBundle": false, + "_integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "_location": "/@types/estree", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "@types/estree@0.0.39", + "name": "@types/estree", + "escapedName": "@types%2festree", + "scope": "@types", + "rawSpec": "0.0.39", + "saveSpec": null, + "fetchSpec": "0.0.39" + }, + "_requiredBy": [ + "/@rollup/pluginutils", + "/is-reference" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@types/estree/-/estree-0.0.39.tgz", + "_shasum": "e177e699ee1b8c22d23174caaa7422644389509f", + "_spec": "@types/estree@0.0.39", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/pluginutils", + "bugs": { + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "RReverser", + "url": "https://github.com/RReverser" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "TypeScript definitions for ESTree AST specification", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme", + "license": "MIT", + "main": "", + "name": "@types/estree", + "repository": { + "type": "git", + "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git" + }, + "scripts": {}, + "typeScriptVersion": "2.0", + "typesPublisherContentHash": "427ba878ebb5570e15aab870f708720d146a1c4b272e4a9d9990db4d1d033170", + "version": "0.0.39" +} diff --git a/build/node_modules/@types/node/LICENSE b/build/node_modules/@types/node/LICENSE new file mode 100755 index 00000000..9e841e7a --- /dev/null +++ b/build/node_modules/@types/node/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/build/node_modules/@types/node/README.md b/build/node_modules/@types/node/README.md new file mode 100755 index 00000000..cb40e886 --- /dev/null +++ b/build/node_modules/@types/node/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/node` + +# Summary +This package contains type definitions for Node.js (https://nodejs.org/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node. + +### Additional Details + * Last updated: Wed, 23 Mar 2022 17:01:45 GMT + * Dependencies: none + * Global values: `AbortController`, `AbortSignal`, `__dirname`, `__filename`, `console`, `exports`, `gc`, `global`, `module`, `process`, `require` + +# Credits +These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), and [wafuwafu13](https://github.com/wafuwafu13). diff --git a/build/node_modules/@types/node/assert.d.ts b/build/node_modules/@types/node/assert.d.ts new file mode 100755 index 00000000..fb715867 --- /dev/null +++ b/build/node_modules/@types/node/assert.d.ts @@ -0,0 +1,912 @@ +/** + * The `assert` module provides a set of assertion functions for verifying + * invariants. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/assert.js) + */ +declare module 'assert' { + /** + * An alias of {@link ok}. + * @since v0.5.9 + * @param value The input that is checked for being truthy. + */ + function assert(value: unknown, message?: string | Error): asserts value; + namespace assert { + /** + * Indicates the failure of an assertion. All errors thrown by the `assert` module + * will be instances of the `AssertionError` class. + */ + class AssertionError extends Error { + actual: unknown; + expected: unknown; + operator: string; + generatedMessage: boolean; + code: 'ERR_ASSERTION'; + constructor(options?: { + /** If provided, the error message is set to this value. */ + message?: string | undefined; + /** The `actual` property on the error instance. */ + actual?: unknown | undefined; + /** The `expected` property on the error instance. */ + expected?: unknown | undefined; + /** The `operator` property on the error instance. */ + operator?: string | undefined; + /** If provided, the generated stack trace omits frames before this function. */ + // tslint:disable-next-line:ban-types + stackStartFn?: Function | undefined; + }); + } + /** + * This feature is currently experimental and behavior might still change. + * @since v14.2.0, v12.19.0 + * @experimental + */ + class CallTracker { + /** + * The wrapper function is expected to be called exactly `exact` times. If the + * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an + * error. + * + * ```js + * import assert from 'assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func); + * ``` + * @since v14.2.0, v12.19.0 + * @param [fn='A no-op function'] + * @param [exact=1] + * @return that wraps `fn`. + */ + calls(exact?: number): () => void; + calls any>(fn?: Func, exact?: number): Func; + /** + * The arrays contains information about the expected and actual number of calls of + * the functions that have not been called the expected number of times. + * + * ```js + * import assert from 'assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * function foo() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * // Returns an array containing information on callsfunc() + * tracker.report(); + * // [ + * // { + * // message: 'Expected the func function to be executed 2 time(s) but was + * // executed 0 time(s).', + * // actual: 0, + * // expected: 2, + * // operator: 'func', + * // stack: stack trace + * // } + * // ] + * ``` + * @since v14.2.0, v12.19.0 + * @return of objects containing information about the wrapper functions returned by `calls`. + */ + report(): CallTrackerReportInformation[]; + /** + * Iterates through the list of functions passed to `tracker.calls()` and will throw an error for functions that + * have not been called the expected number of times. + * + * ```js + * import assert from 'assert'; + * + * // Creates call tracker. + * const tracker = new assert.CallTracker(); + * + * function func() {} + * + * // Returns a function that wraps func() that must be called exact times + * // before tracker.verify(). + * const callsfunc = tracker.calls(func, 2); + * + * callsfunc(); + * + * // Will throw an error since callsfunc() was only called once. + * tracker.verify(); + * ``` + * @since v14.2.0, v12.19.0 + */ + verify(): void; + } + interface CallTrackerReportInformation { + message: string; + /** The actual number of times the function was called. */ + actual: number; + /** The number of times the function was expected to be called. */ + expected: number; + /** The name of the function that is wrapped. */ + operator: string; + /** A stack trace of the function. */ + stack: object; + } + type AssertPredicate = RegExp | (new () => object) | ((thrown: unknown) => boolean) | object | Error; + /** + * Throws an `AssertionError` with the provided error message or a default + * error message. If the `message` parameter is an instance of an `Error` then + * it will be thrown instead of the `AssertionError`. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.fail(); + * // AssertionError [ERR_ASSERTION]: Failed + * + * assert.fail('boom'); + * // AssertionError [ERR_ASSERTION]: boom + * + * assert.fail(new TypeError('need array')); + * // TypeError: need array + * ``` + * + * Using `assert.fail()` with more than two arguments is possible but deprecated. + * See below for further details. + * @since v0.1.21 + * @param [message='Failed'] + */ + function fail(message?: string | Error): never; + /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ + function fail( + actual: unknown, + expected: unknown, + message?: string | Error, + operator?: string, + // tslint:disable-next-line:ban-types + stackStartFn?: Function + ): never; + /** + * Tests if `value` is truthy. It is equivalent to`assert.equal(!!value, true, message)`. + * + * If `value` is not truthy, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is `undefined`, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``. + * + * Be aware that in the `repl` the error message will be different to the one + * thrown in a file! See below for further details. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.ok(true); + * // OK + * assert.ok(1); + * // OK + * + * assert.ok(); + * // AssertionError: No value argument passed to `assert.ok()` + * + * assert.ok(false, 'it\'s false'); + * // AssertionError: it's false + * + * // In the repl: + * assert.ok(typeof 123 === 'string'); + * // AssertionError: false == true + * + * // In a file (e.g. test.js): + * assert.ok(typeof 123 === 'string'); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(typeof 123 === 'string') + * + * assert.ok(false); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(false) + * + * assert.ok(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert.ok(0) + * ``` + * + * ```js + * import assert from 'assert/strict'; + * + * // Using `assert()` works the same: + * assert(0); + * // AssertionError: The expression evaluated to a falsy value: + * // + * // assert(0) + * ``` + * @since v0.1.21 + */ + function ok(value: unknown, message?: string | Error): asserts value; + /** + * **Strict assertion mode** + * + * An alias of {@link strictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link strictEqual} instead. + * + * Tests shallow, coercive equality between the `actual` and `expected` parameters + * using the [Abstract Equality Comparison](https://tc39.github.io/ecma262/#sec-abstract-equality-comparison) ( `==` ). `NaN` is special handled + * and treated as being identical in case both sides are `NaN`. + * + * ```js + * import assert from 'assert'; + * + * assert.equal(1, 1); + * // OK, 1 == 1 + * assert.equal(1, '1'); + * // OK, 1 == '1' + * assert.equal(NaN, NaN); + * // OK + * + * assert.equal(1, 2); + * // AssertionError: 1 == 2 + * assert.equal({ a: { b: 1 } }, { a: { b: 1 } }); + * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } } + * ``` + * + * If the values are not equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default + * error message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function equal(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead. + * + * Tests shallow, coercive inequality with the [Abstract Equality Comparison](https://tc39.github.io/ecma262/#sec-abstract-equality-comparison)(`!=` ). `NaN` is special handled and treated as + * being identical in case both + * sides are `NaN`. + * + * ```js + * import assert from 'assert'; + * + * assert.notEqual(1, 2); + * // OK + * + * assert.notEqual(1, 1); + * // AssertionError: 1 != 1 + * + * assert.notEqual(1, '1'); + * // AssertionError: 1 != '1' + * ``` + * + * If the values are equal, an `AssertionError` is thrown with a `message`property set equal to the value of the `message` parameter. If the `message`parameter is undefined, a default error + * message is assigned. If the `message`parameter is an instance of an `Error` then it will be thrown instead of the`AssertionError`. + * @since v0.1.21 + */ + function notEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link deepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead. + * + * Tests for deep equality between the `actual` and `expected` parameters. Consider + * using {@link deepStrictEqual} instead. {@link deepEqual} can have + * surprising results. + * + * _Deep equality_ means that the enumerable "own" properties of child objects + * are also recursively evaluated by the following rules. + * @since v0.1.21 + */ + function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * **Strict assertion mode** + * + * An alias of {@link notDeepStrictEqual}. + * + * **Legacy assertion mode** + * + * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead. + * + * Tests for any deep inequality. Opposite of {@link deepEqual}. + * + * ```js + * import assert from 'assert'; + * + * const obj1 = { + * a: { + * b: 1 + * } + * }; + * const obj2 = { + * a: { + * b: 2 + * } + * }; + * const obj3 = { + * a: { + * b: 1 + * } + * }; + * const obj4 = Object.create(obj1); + * + * assert.notDeepEqual(obj1, obj1); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj2); + * // OK + * + * assert.notDeepEqual(obj1, obj3); + * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } + * + * assert.notDeepEqual(obj1, obj4); + * // OK + * ``` + * + * If the values are deeply equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a default + * error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests strict equality between the `actual` and `expected` parameters as + * determined by the [SameValue Comparison](https://tc39.github.io/ecma262/#sec-samevalue). + * + * ```js + * import assert from 'assert/strict'; + * + * assert.strictEqual(1, 2); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + * // 1 !== 2 + * + * assert.strictEqual(1, 1); + * // OK + * + * assert.strictEqual('Hello foobar', 'Hello World!'); + * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: + * // + actual - expected + * // + * // + 'Hello foobar' + * // - 'Hello World!' + * // ^ + * + * const apples = 1; + * const oranges = 2; + * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`); + * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2 + * + * assert.strictEqual(1, '1', new TypeError('Inputs are not identical')); + * // TypeError: Inputs are not identical + * ``` + * + * If the values are not strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests strict inequality between the `actual` and `expected` parameters as + * determined by the [SameValue Comparison](https://tc39.github.io/ecma262/#sec-samevalue). + * + * ```js + * import assert from 'assert/strict'; + * + * assert.notStrictEqual(1, 2); + * // OK + * + * assert.notStrictEqual(1, 1); + * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to: + * // + * // 1 + * + * assert.notStrictEqual(1, '1'); + * // OK + * ``` + * + * If the values are strictly equal, an `AssertionError` is thrown with a`message` property set equal to the value of the `message` parameter. If the`message` parameter is undefined, a + * default error message is assigned. If the`message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v0.1.21 + */ + function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Tests for deep equality between the `actual` and `expected` parameters. + * "Deep" equality means that the enumerable "own" properties of child objects + * are recursively evaluated also by the following rules. + * @since v1.2.0 + */ + function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; + /** + * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.notDeepStrictEqual({ a: 1 }, { a: '1' }); + * // OK + * ``` + * + * If the values are deeply and strictly equal, an `AssertionError` is thrown + * with a `message` property set equal to the value of the `message` parameter. If + * the `message` parameter is undefined, a default error message is assigned. If + * the `message` parameter is an instance of an `Error` then it will be thrown + * instead of the `AssertionError`. + * @since v1.2.0 + */ + function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; + /** + * Expects the function `fn` to throw an error. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * a validation object where each property will be tested for strict deep equality, + * or an instance of error where each property will be tested for strict deep + * equality including the non-enumerable `message` and `name` properties. When + * using an object, it is also possible to use a regular expression, when + * validating against a string property. See below for examples. + * + * If specified, `message` will be appended to the message provided by the`AssertionError` if the `fn` call fails to throw or in case the error validation + * fails. + * + * Custom validation object/error instance: + * + * ```js + * import assert from 'assert/strict'; + * + * const err = new TypeError('Wrong value'); + * err.code = 404; + * err.foo = 'bar'; + * err.info = { + * nested: true, + * baz: 'text' + * }; + * err.reg = /abc/i; + * + * assert.throws( + * () => { + * throw err; + * }, + * { + * name: 'TypeError', + * message: 'Wrong value', + * info: { + * nested: true, + * baz: 'text' + * } + * // Only properties on the validation object will be tested for. + * // Using nested objects requires all properties to be present. Otherwise + * // the validation is going to fail. + * } + * ); + * + * // Using regular expressions to validate error properties: + * throws( + * () => { + * throw err; + * }, + * { + * // The `name` and `message` properties are strings and using regular + * // expressions on those will match against the string. If they fail, an + * // error is thrown. + * name: /^TypeError$/, + * message: /Wrong/, + * foo: 'bar', + * info: { + * nested: true, + * // It is not possible to use regular expressions for nested properties! + * baz: 'text' + * }, + * // The `reg` property contains a regular expression and only if the + * // validation object contains an identical regular expression, it is going + * // to pass. + * reg: /abc/i + * } + * ); + * + * // Fails due to the different `message` and `name` properties: + * throws( + * () => { + * const otherErr = new Error('Not found'); + * // Copy all enumerable properties from `err` to `otherErr`. + * for (const [key, value] of Object.entries(err)) { + * otherErr[key] = value; + * } + * throw otherErr; + * }, + * // The error's `message` and `name` properties will also be checked when using + * // an error as validation object. + * err + * ); + * ``` + * + * Validate instanceof using constructor: + * + * ```js + * import assert from 'assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * Error + * ); + * ``` + * + * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): + * + * Using a regular expression runs `.toString` on the error object, and will + * therefore also include the error name. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * /^Error: Wrong value$/ + * ); + * ``` + * + * Custom error validation: + * + * The function must return `true` to indicate all internal validations passed. + * It will otherwise fail with an `AssertionError`. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.throws( + * () => { + * throw new Error('Wrong value'); + * }, + * (err) => { + * assert(err instanceof Error); + * assert(/value/.test(err)); + * // Avoid returning anything from validation functions besides `true`. + * // Otherwise, it's not clear what part of the validation failed. Instead, + * // throw an error about the specific validation that failed (as done in this + * // example) and add as much helpful debugging information to that error as + * // possible. + * return true; + * }, + * 'unexpected error' + * ); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Using the same + * message as the thrown error message is going to result in an`ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using + * a string as the second argument gets considered: + * + * ```js + * import assert from 'assert/strict'; + * + * function throwingFirst() { + * throw new Error('First'); + * } + * + * function throwingSecond() { + * throw new Error('Second'); + * } + * + * function notThrowing() {} + * + * // The second argument is a string and the input function threw an Error. + * // The first case will not throw as it does not match for the error message + * // thrown by the input function! + * assert.throws(throwingFirst, 'Second'); + * // In the next example the message has no benefit over the message from the + * // error and since it is not clear if the user intended to actually match + * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error. + * assert.throws(throwingSecond, 'Second'); + * // TypeError [ERR_AMBIGUOUS_ARGUMENT] + * + * // The string is only used (as message) in case the function does not throw: + * assert.throws(notThrowing, 'Second'); + * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second + * + * // If it was intended to match for the error message do this instead: + * // It does not throw because the error messages match. + * assert.throws(throwingSecond, /Second$/); + * + * // If the error message does not match, an AssertionError is thrown. + * assert.throws(throwingFirst, /Second$/); + * // AssertionError [ERR_ASSERTION] + * ``` + * + * Due to the confusing error-prone notation, avoid a string as the second + * argument. + * @since v0.1.21 + */ + function throws(block: () => unknown, message?: string | Error): void; + function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Asserts that the function `fn` does not throw an error. + * + * Using `assert.doesNotThrow()` is actually not useful because there + * is no benefit in catching an error and then rethrowing it. Instead, consider + * adding a comment next to the specific code path that should not throw and keep + * error messages as expressive as possible. + * + * When `assert.doesNotThrow()` is called, it will immediately call the `fn`function. + * + * If an error is thrown and it is the same type as that specified by the `error`parameter, then an `AssertionError` is thrown. If the error is of a + * different type, or if the `error` parameter is undefined, the error is + * propagated back to the caller. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) or a validation + * function. See {@link throws} for more details. + * + * The following, for instance, will throw the `TypeError` because there is no + * matching error type in the assertion: + * + * ```js + * import assert from 'assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError + * ); + * ``` + * + * However, the following will result in an `AssertionError` with the message + * 'Got unwanted exception...': + * + * ```js + * import assert from 'assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * TypeError + * ); + * ``` + * + * If an `AssertionError` is thrown and a value is provided for the `message`parameter, the value of `message` will be appended to the `AssertionError` message: + * + * ```js + * import assert from 'assert/strict'; + * + * assert.doesNotThrow( + * () => { + * throw new TypeError('Wrong value'); + * }, + * /Wrong value/, + * 'Whoops' + * ); + * // Throws: AssertionError: Got unwanted exception: Whoops + * ``` + * @since v0.1.21 + */ + function doesNotThrow(block: () => unknown, message?: string | Error): void; + function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void; + /** + * Throws `value` if `value` is not `undefined` or `null`. This is useful when + * testing the `error` argument in callbacks. The stack trace contains all frames + * from the error passed to `ifError()` including the potential new frames for`ifError()` itself. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.ifError(null); + * // OK + * assert.ifError(0); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0 + * assert.ifError('error'); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error' + * assert.ifError(new Error()); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error + * + * // Create some random error frames. + * let err; + * (function errorFrame() { + * err = new Error('test error'); + * })(); + * + * (function ifErrorFrame() { + * assert.ifError(err); + * })(); + * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error + * // at ifErrorFrame + * // at errorFrame + * ``` + * @since v0.1.97 + */ + function ifError(value: unknown): asserts value is null | undefined; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.rejects()` will return a rejected `Promise` with that error. If the + * function does not return a promise, `assert.rejects()` will return a rejected`Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases the error + * handler is skipped. + * + * Besides the async nature to await the completion behaves identically to {@link throws}. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, + * an object where each property will be tested for, or an instance of error where + * each property will be tested for including the non-enumerable `message` and`name` properties. + * + * If specified, `message` will be the message provided by the `AssertionError` if the `asyncFn` fails to reject. + * + * ```js + * import assert from 'assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * { + * name: 'TypeError', + * message: 'Wrong value' + * } + * ); + * ``` + * + * ```js + * import assert from 'assert/strict'; + * + * await assert.rejects( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * (err) => { + * assert.strictEqual(err.name, 'TypeError'); + * assert.strictEqual(err.message, 'Wrong value'); + * return true; + * } + * ); + * ``` + * + * ```js + * import assert from 'assert/strict'; + * + * assert.rejects( + * Promise.reject(new Error('Wrong value')), + * Error + * ).then(() => { + * // ... + * }); + * ``` + * + * `error` cannot be a string. If a string is provided as the second + * argument, then `error` is assumed to be omitted and the string will be used for`message` instead. This can lead to easy-to-miss mistakes. Please read the + * example in {@link throws} carefully if using a string as the second + * argument gets considered. + * @since v10.0.0 + */ + function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; + function rejects(block: (() => Promise) | Promise, error: AssertPredicate, message?: string | Error): Promise; + /** + * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately + * calls the function and awaits the returned promise to complete. It will then + * check that the promise is not rejected. + * + * If `asyncFn` is a function and it throws an error synchronously,`assert.doesNotReject()` will return a rejected `Promise` with that error. If + * the function does not return a promise, `assert.doesNotReject()` will return a + * rejected `Promise` with an `ERR_INVALID_RETURN_VALUE` error. In both cases + * the error handler is skipped. + * + * Using `assert.doesNotReject()` is actually not useful because there is little + * benefit in catching a rejection and then rejecting it again. Instead, consider + * adding a comment next to the specific code path that should not reject and keep + * error messages as expressive as possible. + * + * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), + * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) or a validation + * function. See {@link throws} for more details. + * + * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}. + * + * ```js + * import assert from 'assert/strict'; + * + * await assert.doesNotReject( + * async () => { + * throw new TypeError('Wrong value'); + * }, + * SyntaxError + * ); + * ``` + * + * ```js + * import assert from 'assert/strict'; + * + * assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) + * .then(() => { + * // ... + * }); + * ``` + * @since v10.0.0 + */ + function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise; + function doesNotReject(block: (() => Promise) | Promise, error: AssertPredicate, message?: string | Error): Promise; + /** + * Expects the `string` input to match the regular expression. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.match('I will fail', /pass/); + * // AssertionError [ERR_ASSERTION]: The input did not match the regular ... + * + * assert.match(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.match('I will pass', /pass/); + * // OK + * ``` + * + * If the values do not match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function match(value: string, regExp: RegExp, message?: string | Error): void; + /** + * Expects the `string` input not to match the regular expression. + * + * ```js + * import assert from 'assert/strict'; + * + * assert.doesNotMatch('I will fail', /fail/); + * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ... + * + * assert.doesNotMatch(123, /pass/); + * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. + * + * assert.doesNotMatch('I will pass', /different/); + * // OK + * ``` + * + * If the values do match, or if the `string` argument is of another type than`string`, an `AssertionError` is thrown with a `message` property set equal + * to the value of the `message` parameter. If the `message` parameter is + * undefined, a default error message is assigned. If the `message` parameter is an + * instance of an `Error` then it will be thrown instead of the `AssertionError`. + * @since v13.6.0, v12.16.0 + */ + function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; + const strict: Omit & { + (value: unknown, message?: string | Error): asserts value; + equal: typeof strictEqual; + notEqual: typeof notStrictEqual; + deepEqual: typeof deepStrictEqual; + notDeepEqual: typeof notDeepStrictEqual; + // Mapped types and assertion functions are incompatible? + // TS2775: Assertions require every name in the call target + // to be declared with an explicit type annotation. + ok: typeof ok; + strictEqual: typeof strictEqual; + deepStrictEqual: typeof deepStrictEqual; + ifError: typeof ifError; + strict: typeof strict; + }; + } + export = assert; +} +declare module 'node:assert' { + import assert = require('assert'); + export = assert; +} diff --git a/build/node_modules/@types/node/assert/strict.d.ts b/build/node_modules/@types/node/assert/strict.d.ts new file mode 100755 index 00000000..b4319b97 --- /dev/null +++ b/build/node_modules/@types/node/assert/strict.d.ts @@ -0,0 +1,8 @@ +declare module 'assert/strict' { + import { strict } from 'node:assert'; + export = strict; +} +declare module 'node:assert/strict' { + import { strict } from 'node:assert'; + export = strict; +} diff --git a/build/node_modules/@types/node/async_hooks.d.ts b/build/node_modules/@types/node/async_hooks.d.ts new file mode 100755 index 00000000..f53198e8 --- /dev/null +++ b/build/node_modules/@types/node/async_hooks.d.ts @@ -0,0 +1,501 @@ +/** + * The `async_hooks` module provides an API to track asynchronous resources. It + * can be accessed using: + * + * ```js + * import async_hooks from 'async_hooks'; + * ``` + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/async_hooks.js) + */ +declare module 'async_hooks' { + /** + * ```js + * import { executionAsyncId } from 'async_hooks'; + * + * console.log(executionAsyncId()); // 1 - bootstrap + * fs.open(path, 'r', (err, fd) => { + * console.log(executionAsyncId()); // 6 - open() + * }); + * ``` + * + * The ID returned from `executionAsyncId()` is related to execution timing, not + * causality (which is covered by `triggerAsyncId()`): + * + * ```js + * const server = net.createServer((conn) => { + * // Returns the ID of the server, not of the new connection, because the + * // callback runs in the execution scope of the server's MakeCallback(). + * async_hooks.executionAsyncId(); + * + * }).listen(port, () => { + * // Returns the ID of a TickObject (process.nextTick()) because all + * // callbacks passed to .listen() are wrapped in a nextTick(). + * async_hooks.executionAsyncId(); + * }); + * ``` + * + * Promise contexts may not get precise `executionAsyncIds` by default. + * See the section on `promise execution tracking`. + * @since v8.1.0 + * @return The `asyncId` of the current execution context. Useful to track when something calls. + */ + function executionAsyncId(): number; + /** + * Resource objects returned by `executionAsyncResource()` are most often internal + * Node.js handle objects with undocumented APIs. Using any functions or properties + * on the object is likely to crash your application and should be avoided. + * + * Using `executionAsyncResource()` in the top-level execution context will + * return an empty object as there is no handle or request object to use, + * but having an object representing the top-level can be helpful. + * + * ```js + * import { open } from 'fs'; + * import { executionAsyncId, executionAsyncResource } from 'async_hooks'; + * + * console.log(executionAsyncId(), executionAsyncResource()); // 1 {} + * open(new URL(import.meta.url), 'r', (err, fd) => { + * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap + * }); + * ``` + * + * This can be used to implement continuation local storage without the + * use of a tracking `Map` to store the metadata: + * + * ```js + * import { createServer } from 'http'; + * import { + * executionAsyncId, + * executionAsyncResource, + * createHook + * } from 'async_hooks'; + * const sym = Symbol('state'); // Private symbol to avoid pollution + * + * createHook({ + * init(asyncId, type, triggerAsyncId, resource) { + * const cr = executionAsyncResource(); + * if (cr) { + * resource[sym] = cr[sym]; + * } + * } + * }).enable(); + * + * const server = createServer((req, res) => { + * executionAsyncResource()[sym] = { state: req.url }; + * setTimeout(function() { + * res.end(JSON.stringify(executionAsyncResource()[sym])); + * }, 100); + * }).listen(3000); + * ``` + * @since v13.9.0, v12.17.0 + * @return The resource representing the current execution. Useful to store data within the resource. + */ + function executionAsyncResource(): object; + /** + * ```js + * const server = net.createServer((conn) => { + * // The resource that caused (or triggered) this callback to be called + * // was that of the new connection. Thus the return value of triggerAsyncId() + * // is the asyncId of "conn". + * async_hooks.triggerAsyncId(); + * + * }).listen(port, () => { + * // Even though all callbacks passed to .listen() are wrapped in a nextTick() + * // the callback itself exists because the call to the server's .listen() + * // was made. So the return value would be the ID of the server. + * async_hooks.triggerAsyncId(); + * }); + * ``` + * + * Promise contexts may not get valid `triggerAsyncId`s by default. See + * the section on `promise execution tracking`. + * @return The ID of the resource responsible for calling the callback that is currently being executed. + */ + function triggerAsyncId(): number; + interface HookCallbacks { + /** + * Called when a class is constructed that has the possibility to emit an asynchronous event. + * @param asyncId a unique ID for the async resource + * @param type the type of the async resource + * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created + * @param resource reference to the resource representing the async operation, needs to be released during destroy + */ + init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; + /** + * When an asynchronous operation is initiated or completes a callback is called to notify the user. + * The before callback is called just before said callback is executed. + * @param asyncId the unique identifier assigned to the resource about to execute the callback. + */ + before?(asyncId: number): void; + /** + * Called immediately after the callback specified in before is completed. + * @param asyncId the unique identifier assigned to the resource which has executed the callback. + */ + after?(asyncId: number): void; + /** + * Called when a promise has resolve() called. This may not be in the same execution id + * as the promise itself. + * @param asyncId the unique id for the promise that was resolve()d. + */ + promiseResolve?(asyncId: number): void; + /** + * Called after the resource corresponding to asyncId is destroyed + * @param asyncId a unique ID for the async resource + */ + destroy?(asyncId: number): void; + } + interface AsyncHook { + /** + * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. + */ + enable(): this; + /** + * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. + */ + disable(): this; + } + /** + * Registers functions to be called for different lifetime events of each async + * operation. + * + * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the + * respective asynchronous event during a resource's lifetime. + * + * All callbacks are optional. For example, if only resource cleanup needs to + * be tracked, then only the `destroy` callback needs to be passed. The + * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section. + * + * ```js + * import { createHook } from 'async_hooks'; + * + * const asyncHook = createHook({ + * init(asyncId, type, triggerAsyncId, resource) { }, + * destroy(asyncId) { } + * }); + * ``` + * + * The callbacks will be inherited via the prototype chain: + * + * ```js + * class MyAsyncCallbacks { + * init(asyncId, type, triggerAsyncId, resource) { } + * destroy(asyncId) {} + * } + * + * class MyAddedCallbacks extends MyAsyncCallbacks { + * before(asyncId) { } + * after(asyncId) { } + * } + * + * const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); + * ``` + * + * Because promises are asynchronous resources whose lifecycle is tracked + * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises. + * @since v8.1.0 + * @param callbacks The `Hook Callbacks` to register + * @return Instance used for disabling and enabling hooks + */ + function createHook(callbacks: HookCallbacks): AsyncHook; + interface AsyncResourceOptions { + /** + * The ID of the execution context that created this async event. + * @default executionAsyncId() + */ + triggerAsyncId?: number | undefined; + /** + * Disables automatic `emitDestroy` when the object is garbage collected. + * This usually does not need to be set (even if `emitDestroy` is called + * manually), unless the resource's `asyncId` is retrieved and the + * sensitive API's `emitDestroy` is called with it. + * @default false + */ + requireManualDestroy?: boolean | undefined; + } + /** + * The class `AsyncResource` is designed to be extended by the embedder's async + * resources. Using this, users can easily trigger the lifetime events of their + * own resources. + * + * The `init` hook will trigger when an `AsyncResource` is instantiated. + * + * The following is an overview of the `AsyncResource` API. + * + * ```js + * import { AsyncResource, executionAsyncId } from 'async_hooks'; + * + * // AsyncResource() is meant to be extended. Instantiating a + * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * // async_hook.executionAsyncId() is used. + * const asyncResource = new AsyncResource( + * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false } + * ); + * + * // Run a function in the execution context of the resource. This will + * // * establish the context of the resource + * // * trigger the AsyncHooks before callbacks + * // * call the provided function `fn` with the supplied arguments + * // * trigger the AsyncHooks after callbacks + * // * restore the original execution context + * asyncResource.runInAsyncScope(fn, thisArg, ...args); + * + * // Call AsyncHooks destroy callbacks. + * asyncResource.emitDestroy(); + * + * // Return the unique ID assigned to the AsyncResource instance. + * asyncResource.asyncId(); + * + * // Return the trigger ID for the AsyncResource instance. + * asyncResource.triggerAsyncId(); + * ``` + */ + class AsyncResource { + /** + * AsyncResource() is meant to be extended. Instantiating a + * new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * async_hook.executionAsyncId() is used. + * @param type The type of async event. + * @param triggerAsyncId The ID of the execution context that created + * this async event (default: `executionAsyncId()`), or an + * AsyncResourceOptions object (since 9.3) + */ + constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); + /** + * Binds the given function to the current execution context. + * + * The returned function will have an `asyncResource` property referencing + * the `AsyncResource` to which the function is bound. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current execution context. + * @param type An optional name to associate with the underlying `AsyncResource`. + */ + static bind any, ThisArg>( + fn: Func, + type?: string, + thisArg?: ThisArg + ): Func & { + asyncResource: AsyncResource; + }; + /** + * Binds the given function to execute to this `AsyncResource`'s scope. + * + * The returned function will have an `asyncResource` property referencing + * the `AsyncResource` to which the function is bound. + * @since v14.8.0, v12.19.0 + * @param fn The function to bind to the current `AsyncResource`. + */ + bind any>( + fn: Func + ): Func & { + asyncResource: AsyncResource; + }; + /** + * Call the provided function with the provided arguments in the execution context + * of the async resource. This will establish the context, trigger the AsyncHooks + * before callbacks, call the function, trigger the AsyncHooks after callbacks, and + * then restore the original execution context. + * @since v9.6.0 + * @param fn The function to call in the execution context of this async resource. + * @param thisArg The receiver to be used for the function call. + * @param args Optional arguments to pass to the function. + */ + runInAsyncScope(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result; + /** + * Call all `destroy` hooks. This should only ever be called once. An error will + * be thrown if it is called more than once. This **must** be manually called. If + * the resource is left to be collected by the GC then the `destroy` hooks will + * never be called. + * @return A reference to `asyncResource`. + */ + emitDestroy(): this; + /** + * @return The unique `asyncId` assigned to the resource. + */ + asyncId(): number; + /** + * + * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor. + */ + triggerAsyncId(): number; + } + /** + * This class creates stores that stay coherent through asynchronous operations. + * + * While you can create your own implementation on top of the `async_hooks` module,`AsyncLocalStorage` should be preferred as it is a performant and memory safe + * implementation that involves significant optimizations that are non-obvious to + * implement. + * + * The following example uses `AsyncLocalStorage` to build a simple logger + * that assigns IDs to incoming HTTP requests and includes them in messages + * logged within each request. + * + * ```js + * import http from 'http'; + * import { AsyncLocalStorage } from 'async_hooks'; + * + * const asyncLocalStorage = new AsyncLocalStorage(); + * + * function logWithId(msg) { + * const id = asyncLocalStorage.getStore(); + * console.log(`${id !== undefined ? id : '-'}:`, msg); + * } + * + * let idSeq = 0; + * http.createServer((req, res) => { + * asyncLocalStorage.run(idSeq++, () => { + * logWithId('start'); + * // Imagine any chain of async operations here + * setImmediate(() => { + * logWithId('finish'); + * res.end(); + * }); + * }); + * }).listen(8080); + * + * http.get('http://localhost:8080'); + * http.get('http://localhost:8080'); + * // Prints: + * // 0: start + * // 1: start + * // 0: finish + * // 1: finish + * ``` + * + * Each instance of `AsyncLocalStorage` maintains an independent storage context. + * Multiple instances can safely exist simultaneously without risk of interfering + * with each other data. + * @since v13.10.0, v12.17.0 + */ + class AsyncLocalStorage { + /** + * Disables the instance of `AsyncLocalStorage`. All subsequent calls + * to `asyncLocalStorage.getStore()` will return `undefined` until`asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again. + * + * When calling `asyncLocalStorage.disable()`, all current contexts linked to the + * instance will be exited. + * + * Calling `asyncLocalStorage.disable()` is required before the`asyncLocalStorage` can be garbage collected. This does not apply to stores + * provided by the `asyncLocalStorage`, as those objects are garbage collected + * along with the corresponding async resources. + * + * Use this method when the `asyncLocalStorage` is not in use anymore + * in the current process. + * @since v13.10.0, v12.17.0 + * @experimental + */ + disable(): void; + /** + * Returns the current store. + * If called outside of an asynchronous context initialized by + * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it + * returns `undefined`. + * @since v13.10.0, v12.17.0 + */ + getStore(): T | undefined; + /** + * Runs a function synchronously within a context and returns its + * return value. The store is not accessible outside of the callback function. + * The store is accessible to any asynchronous operations created within the + * callback. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `run()` too. + * The stacktrace is not impacted by this call and the context is exited. + * + * Example: + * + * ```js + * const store = { id: 2 }; + * try { + * asyncLocalStorage.run(store, () => { + * asyncLocalStorage.getStore(); // Returns the store object + * setTimeout(() => { + * asyncLocalStorage.getStore(); // Returns the store object + * }, 200); + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns undefined + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + */ + run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Runs a function synchronously outside of a context and returns its + * return value. The store is not accessible within the callback function or + * the asynchronous operations created within the callback. Any `getStore()`call done within the callback function will always return `undefined`. + * + * The optional `args` are passed to the callback function. + * + * If the callback function throws an error, the error is thrown by `exit()` too. + * The stacktrace is not impacted by this call and the context is re-entered. + * + * Example: + * + * ```js + * // Within a call to run + * try { + * asyncLocalStorage.getStore(); // Returns the store object or value + * asyncLocalStorage.exit(() => { + * asyncLocalStorage.getStore(); // Returns undefined + * throw new Error(); + * }); + * } catch (e) { + * asyncLocalStorage.getStore(); // Returns the same object or value + * // The error will be caught here + * } + * ``` + * @since v13.10.0, v12.17.0 + * @experimental + */ + exit(callback: (...args: TArgs) => R, ...args: TArgs): R; + /** + * Transitions into the context for the remainder of the current + * synchronous execution and then persists the store through any following + * asynchronous calls. + * + * Example: + * + * ```js + * const store = { id: 1 }; + * // Replaces previous store with the given store object + * asyncLocalStorage.enterWith(store); + * asyncLocalStorage.getStore(); // Returns the store object + * someAsyncOperation(() => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * ``` + * + * This transition will continue for the _entire_ synchronous execution. + * This means that if, for example, the context is entered within an event + * handler subsequent event handlers will also run within that context unless + * specifically bound to another context with an `AsyncResource`. That is why`run()` should be preferred over `enterWith()` unless there are strong reasons + * to use the latter method. + * + * ```js + * const store = { id: 1 }; + * + * emitter.on('my-event', () => { + * asyncLocalStorage.enterWith(store); + * }); + * emitter.on('my-event', () => { + * asyncLocalStorage.getStore(); // Returns the same object + * }); + * + * asyncLocalStorage.getStore(); // Returns undefined + * emitter.emit('my-event'); + * asyncLocalStorage.getStore(); // Returns the same object + * ``` + * @since v13.11.0, v12.17.0 + * @experimental + */ + enterWith(store: T): void; + } +} +declare module 'node:async_hooks' { + export * from 'async_hooks'; +} diff --git a/build/node_modules/@types/node/buffer.d.ts b/build/node_modules/@types/node/buffer.d.ts new file mode 100755 index 00000000..1a26043c --- /dev/null +++ b/build/node_modules/@types/node/buffer.d.ts @@ -0,0 +1,2232 @@ +/** + * `Buffer` objects are used to represent a fixed-length sequence of bytes. Many + * Node.js APIs support `Buffer`s. + * + * The `Buffer` class is a subclass of JavaScript's [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) class and + * extends it with methods that cover additional use cases. Node.js APIs accept + * plain [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) s wherever `Buffer`s are supported as well. + * + * While the `Buffer` class is available within the global scope, it is still + * recommended to explicitly reference it via an import or require statement. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Creates a zero-filled Buffer of length 10. + * const buf1 = Buffer.alloc(10); + * + * // Creates a Buffer of length 10, + * // filled with bytes which all have the value `1`. + * const buf2 = Buffer.alloc(10, 1); + * + * // Creates an uninitialized buffer of length 10. + * // This is faster than calling Buffer.alloc() but the returned + * // Buffer instance might contain old data that needs to be + * // overwritten using fill(), write(), or other functions that fill the Buffer's + * // contents. + * const buf3 = Buffer.allocUnsafe(10); + * + * // Creates a Buffer containing the bytes [1, 2, 3]. + * const buf4 = Buffer.from([1, 2, 3]); + * + * // Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries + * // are all truncated using `(value & 255)` to fit into the range 0–255. + * const buf5 = Buffer.from([257, 257.5, -255, '1']); + * + * // Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést': + * // [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation) + * // [116, 195, 169, 115, 116] (in decimal notation) + * const buf6 = Buffer.from('tést'); + * + * // Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74]. + * const buf7 = Buffer.from('tést', 'latin1'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/buffer.js) + */ +declare module 'buffer' { + import { BinaryLike } from 'node:crypto'; + export const INSPECT_MAX_BYTES: number; + export const kMaxLength: number; + export const kStringMaxLength: number; + export const constants: { + MAX_LENGTH: number; + MAX_STRING_LENGTH: number; + }; + export type TranscodeEncoding = 'ascii' | 'utf8' | 'utf16le' | 'ucs2' | 'latin1' | 'binary'; + /** + * Re-encodes the given `Buffer` or `Uint8Array` instance from one character + * encoding to another. Returns a new `Buffer` instance. + * + * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if + * conversion from `fromEnc` to `toEnc` is not permitted. + * + * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`,`'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`. + * + * The transcoding process will use substitution characters if a given byte + * sequence cannot be adequately represented in the target encoding. For instance: + * + * ```js + * import { Buffer, transcode } from 'buffer'; + * + * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii'); + * console.log(newBuf.toString('ascii')); + * // Prints: '?' + * ``` + * + * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced + * with `?` in the transcoded `Buffer`. + * @since v7.1.0 + * @param source A `Buffer` or `Uint8Array` instance. + * @param fromEnc The current encoding. + * @param toEnc To target encoding. + */ + export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer; + export const SlowBuffer: { + /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */ + new (size: number): Buffer; + prototype: Buffer; + }; + /** + * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using + * a prior call to `URL.createObjectURL()`. + * @since v16.7.0 + * @experimental + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + export function resolveObjectURL(id: string): Blob | undefined; + export { Buffer }; + /** + * @experimental + */ + export interface BlobOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * The Blob content-type. The intent is for `type` to convey + * the MIME media type of the data, however no validation of the type format + * is performed. + */ + type?: string | undefined; + } + /** + * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across + * multiple worker threads. + * @since v15.7.0, v14.18.0 + * @experimental + */ + export class Blob { + /** + * The total size of the `Blob` in bytes. + * @since v15.7.0, v14.18.0 + */ + readonly size: number; + /** + * The content-type of the `Blob`. + * @since v15.7.0, v14.18.0 + */ + readonly type: string; + /** + * Creates a new `Blob` object containing a concatenation of the given sources. + * + * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into + * the 'Blob' and can therefore be safely modified after the 'Blob' is created. + * + * String sources are also copied into the `Blob`. + */ + constructor(sources: Array, options?: BlobOptions); + /** + * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of + * the `Blob` data. + * @since v15.7.0, v14.18.0 + */ + arrayBuffer(): Promise; + /** + * Creates and returns a new `Blob` containing a subset of this `Blob` objects + * data. The original `Blob` is not altered. + * @since v15.7.0, v14.18.0 + * @param start The starting index. + * @param end The ending index. + * @param type The content-type for the new `Blob` + */ + slice(start?: number, end?: number, type?: string): Blob; + /** + * Returns a promise that fulfills with the contents of the `Blob` decoded as a + * UTF-8 string. + * @since v15.7.0, v14.18.0 + */ + text(): Promise; + /** + * Returns a new `ReadableStream` that allows the content of the `Blob` to be read. + * @since v16.7.0 + */ + stream(): unknown; // pending web streams types + } + export import atob = globalThis.atob; + export import btoa = globalThis.btoa; + global { + // Buffer class + type BufferEncoding = 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'; + type WithImplicitCoercion = + | T + | { + valueOf(): T; + }; + /** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + */ + interface BufferConstructor { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + new (str: string, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + new (size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new (array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + new (arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new (array: ReadonlyArray): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + new (buffer: Buffer): Buffer; + /** + * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. + * Array entries outside that range will be truncated to fit into it. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. + * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); + * ``` + * + * A `TypeError` will be thrown if `array` is not an `Array` or another type + * appropriate for `Buffer.from()` variants. + * + * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal`Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v5.10.0 + */ + from(arrayBuffer: WithImplicitCoercion, byteOffset?: number, length?: number): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + from(data: Uint8Array | ReadonlyArray): Buffer; + from(data: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + from( + str: + | WithImplicitCoercion + | { + [Symbol.toPrimitive](hint: 'string'): string; + }, + encoding?: BufferEncoding + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + of(...items: number[]): Buffer; + /** + * Returns `true` if `obj` is a `Buffer`, `false` otherwise. + * + * ```js + * import { Buffer } from 'buffer'; + * + * Buffer.isBuffer(Buffer.alloc(10)); // true + * Buffer.isBuffer(Buffer.from('foo')); // true + * Buffer.isBuffer('a string'); // false + * Buffer.isBuffer([]); // false + * Buffer.isBuffer(new Uint8Array(1024)); // false + * ``` + * @since v0.1.101 + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns `true` if `encoding` is the name of a supported character encoding, + * or `false` otherwise. + * + * ```js + * import { Buffer } from 'buffer'; + * + * console.log(Buffer.isEncoding('utf8')); + * // Prints: true + * + * console.log(Buffer.isEncoding('hex')); + * // Prints: true + * + * console.log(Buffer.isEncoding('utf/8')); + * // Prints: false + * + * console.log(Buffer.isEncoding('')); + * // Prints: false + * ``` + * @since v0.9.1 + * @param encoding A character encoding name to check. + */ + isEncoding(encoding: string): encoding is BufferEncoding; + /** + * Returns the byte length of a string when encoded using `encoding`. + * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account + * for the encoding that is used to convert the string into bytes. + * + * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input. + * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the + * return value might be greater than the length of a `Buffer` created from the + * string. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const str = '\u00bd + \u00bc = \u00be'; + * + * console.log(`${str}: ${str.length} characters, ` + + * `${Buffer.byteLength(str, 'utf8')} bytes`); + * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes + * ``` + * + * When `string` is a + * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/- + * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop- + * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned. + * @since v0.1.90 + * @param string A value to calculate the length of. + * @param [encoding='utf8'] If `string` is a string, this is its encoding. + * @return The number of bytes contained within `string`. + */ + byteLength(string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer, encoding?: BufferEncoding): number; + /** + * Returns a new `Buffer` which is the result of concatenating all the `Buffer`instances in the `list` together. + * + * If the list has no items, or if the `totalLength` is 0, then a new zero-length`Buffer` is returned. + * + * If `totalLength` is not provided, it is calculated from the `Buffer` instances + * in `list` by adding their lengths. + * + * If `totalLength` is provided, it is coerced to an unsigned integer. If the + * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is + * truncated to `totalLength`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Create a single `Buffer` from a list of three `Buffer` instances. + * + * const buf1 = Buffer.alloc(10); + * const buf2 = Buffer.alloc(14); + * const buf3 = Buffer.alloc(18); + * const totalLength = buf1.length + buf2.length + buf3.length; + * + * console.log(totalLength); + * // Prints: 42 + * + * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); + * + * console.log(bufA); + * // Prints: + * console.log(bufA.length); + * // Prints: 42 + * ``` + * + * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. + * @since v0.7.11 + * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. + * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. + */ + concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of`Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from('1234'); + * const buf2 = Buffer.from('0123'); + * const arr = [buf1, buf2]; + * + * console.log(arr.sort(Buffer.compare)); + * // Prints: [ , ] + * // (This result is equal to: [buf2, buf1].) + * ``` + * @since v0.11.13 + * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details. + */ + compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1; + /** + * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.alloc(5); + * + * console.log(buf); + * // Prints: + * ``` + * + * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_INVALID_ARG_VALUE` is thrown. + * + * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.alloc(5, 'a'); + * + * console.log(buf); + * // Prints: + * ``` + * + * If both `fill` and `encoding` are specified, the allocated `Buffer` will be + * initialized by calling `buf.fill(fill, encoding)`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); + * + * console.log(buf); + * // Prints: + * ``` + * + * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance + * contents will never contain sensitive data from previous allocations, including + * data that might not have been allocated for `Buffer`s. + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + * @param [fill=0] A value to pre-fill the new `Buffer` with. + * @param [encoding='utf8'] If `fill` is a string, this is its encoding. + */ + alloc(size: number, fill?: string | Buffer | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_INVALID_ARG_VALUE` is thrown. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and_may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(10); + * + * console.log(buf); + * // Prints (contents may vary): + * + * buf.fill(0); + * + * console.log(buf); + * // Prints: + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * + * The `Buffer` module pre-allocates an internal `Buffer` instance of + * size `Buffer.poolSize` that is used as a pool for the fast allocation of new`Buffer` instances created using `Buffer.allocUnsafe()`,`Buffer.from(array)`, `Buffer.concat()`, and the + * deprecated`new Buffer(size)` constructor only when `size` is less than or equal + * to `Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). + * + * Use of this pre-allocated internal memory pool is a key difference between + * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. + * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less + * than or equal to half `Buffer.poolSize`. The + * difference is subtle but can be important when an application requires the + * additional performance that `Buffer.allocUnsafe()` provides. + * @since v5.10.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafe(size: number): Buffer; + /** + * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_INVALID_ARG_VALUE` is thrown. A zero-length `Buffer` is created + * if `size` is 0. + * + * The underlying memory for `Buffer` instances created in this way is _not_ + * _initialized_. The contents of the newly created `Buffer` are unknown and_may contain sensitive data_. Use `buf.fill(0)` to initialize + * such `Buffer` instances with zeroes. + * + * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, + * allocations under 4 KB are sliced from a single pre-allocated `Buffer`. This + * allows applications to avoid the garbage collection overhead of creating many + * individually allocated `Buffer` instances. This approach improves both + * performance and memory usage by eliminating the need to track and clean up as + * many individual `ArrayBuffer` objects. + * + * However, in the case where a developer may need to retain a small chunk of + * memory from a pool for an indeterminate amount of time, it may be appropriate + * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and + * then copying out the relevant bits. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Need to keep around a few small chunks of memory. + * const store = []; + * + * socket.on('readable', () => { + * let data; + * while (null !== (data = readable.read())) { + * // Allocate for retained data. + * const sb = Buffer.allocUnsafeSlow(10); + * + * // Copy the data into the new allocation. + * data.copy(sb, 0, 0, 10); + * + * store.push(sb); + * } + * }); + * ``` + * + * A `TypeError` will be thrown if `size` is not a number. + * @since v5.12.0 + * @param size The desired length of the new `Buffer`. + */ + allocUnsafeSlow(size: number): Buffer; + /** + * This is the size (in bytes) of pre-allocated internal `Buffer` instances used + * for pooling. This value may be modified. + * @since v0.11.3 + */ + poolSize: number; + } + interface Buffer extends Uint8Array { + /** + * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did + * not contain enough space to fit the entire string, only part of `string` will be + * written. However, partially encoded characters will not be written. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.alloc(256); + * + * const len = buf.write('\u00bd + \u00bc = \u00be', 0); + * + * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`); + * // Prints: 12 bytes: ½ + ¼ = ¾ + * + * const buffer = Buffer.alloc(10); + * + * const length = buffer.write('abcd', 8); + * + * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`); + * // Prints: 2 bytes : ab + * ``` + * @since v0.1.90 + * @param string String to write to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write `string`. + * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`). + * @param [encoding='utf8'] The character encoding of `string`. + * @return Number of bytes written. + */ + write(string: string, encoding?: BufferEncoding): number; + write(string: string, offset: number, encoding?: BufferEncoding): number; + write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; + /** + * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`. + * + * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8, + * then each invalid byte is replaced with the replacement character `U+FFFD`. + * + * The maximum length of a string instance (in UTF-16 code units) is available + * as {@link constants.MAX_STRING_LENGTH}. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * console.log(buf1.toString('utf8')); + * // Prints: abcdefghijklmnopqrstuvwxyz + * console.log(buf1.toString('utf8', 0, 5)); + * // Prints: abcde + * + * const buf2 = Buffer.from('tést'); + * + * console.log(buf2.toString('hex')); + * // Prints: 74c3a97374 + * console.log(buf2.toString('utf8', 0, 3)); + * // Prints: té + * console.log(buf2.toString(undefined, 0, 3)); + * // Prints: té + * ``` + * @since v0.1.90 + * @param [encoding='utf8'] The character encoding to use. + * @param [start=0] The byte offset to start decoding at. + * @param [end=buf.length] The byte offset to stop decoding at (not inclusive). + */ + toString(encoding?: BufferEncoding, start?: number, end?: number): string; + /** + * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls + * this function when stringifying a `Buffer` instance. + * + * `Buffer.from()` accepts objects in the format returned from this method. + * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); + * const json = JSON.stringify(buf); + * + * console.log(json); + * // Prints: {"type":"Buffer","data":[1,2,3,4,5]} + * + * const copy = JSON.parse(json, (key, value) => { + * return value && value.type === 'Buffer' ? + * Buffer.from(value) : + * value; + * }); + * + * console.log(copy); + * // Prints: + * ``` + * @since v0.9.2 + */ + toJSON(): { + type: 'Buffer'; + data: number[]; + }; + /** + * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('414243', 'hex'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.equals(buf2)); + * // Prints: true + * console.log(buf1.equals(buf3)); + * // Prints: false + * ``` + * @since v0.11.13 + * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`. + */ + equals(otherBuffer: Uint8Array): boolean; + /** + * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order. + * Comparison is based on the actual sequence of bytes in each `Buffer`. + * + * * `0` is returned if `target` is the same as `buf` + * * `1` is returned if `target` should come _before_`buf` when sorted. + * * `-1` is returned if `target` should come _after_`buf` when sorted. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from('ABC'); + * const buf2 = Buffer.from('BCD'); + * const buf3 = Buffer.from('ABCD'); + * + * console.log(buf1.compare(buf1)); + * // Prints: 0 + * console.log(buf1.compare(buf2)); + * // Prints: -1 + * console.log(buf1.compare(buf3)); + * // Prints: -1 + * console.log(buf2.compare(buf1)); + * // Prints: 1 + * console.log(buf2.compare(buf3)); + * // Prints: 1 + * console.log([buf1, buf2, buf3].sort(Buffer.compare)); + * // Prints: [ , , ] + * // (This result is equal to: [buf1, buf3, buf2].) + * ``` + * + * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd`arguments can be used to limit the comparison to specific ranges within `target`and `buf` respectively. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]); + * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]); + * + * console.log(buf1.compare(buf2, 5, 9, 0, 4)); + * // Prints: 0 + * console.log(buf1.compare(buf2, 0, 6, 4)); + * // Prints: -1 + * console.log(buf1.compare(buf2, 5, 6, 5)); + * // Prints: 1 + * ``` + * + * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`,`targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`. + * @since v0.11.13 + * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`. + * @param [targetStart=0] The offset within `target` at which to begin comparison. + * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive). + * @param [sourceStart=0] The offset within `buf` at which to begin comparison. + * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive). + */ + compare(target: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): -1 | 0 | 1; + /** + * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`. + * + * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available + * for all TypedArrays, including Node.js `Buffer`s, although it takes + * different function arguments. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Create two `Buffer` instances. + * const buf1 = Buffer.allocUnsafe(26); + * const buf2 = Buffer.allocUnsafe(26).fill('!'); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`. + * buf1.copy(buf2, 8, 16, 20); + * // This is equivalent to: + * // buf2.set(buf1.subarray(16, 20), 8); + * + * console.log(buf2.toString('ascii', 0, 25)); + * // Prints: !!!!!!!!qrst!!!!!!!!!!!!! + * ``` + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Create a `Buffer` and copy data from one region to an overlapping region + * // within the same `Buffer`. + * + * const buf = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf[i] = i + 97; + * } + * + * buf.copy(buf, 0, 4, 10); + * + * console.log(buf.toString()); + * // Prints: efghijghijklmnopqrstuvwxyz + * ``` + * @since v0.1.90 + * @param target A `Buffer` or {@link Uint8Array} to copy into. + * @param [targetStart=0] The offset within `target` at which to begin writing. + * @param [sourceStart=0] The offset within `buf` from which to begin copying. + * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive). + * @return The number of bytes copied. + */ + copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * This is the same behavior as `buf.subarray()`. + * + * This method is not compatible with the `Uint8Array.prototype.slice()`, + * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('buffer'); + * + * const copiedBuf = Uint8Array.prototype.slice.call(buf); + * copiedBuf[0]++; + * console.log(copiedBuf.toString()); + * // Prints: cuffer + * + * console.log(buf.toString()); + * // Prints: buffer + * ``` + * @since v0.3.0 + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + slice(start?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references the same memory as the original, but + * offset and cropped by the `start` and `end` indices. + * + * Specifying `end` greater than `buf.length` will return the same result as + * that of `end` equal to `buf.length`. + * + * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). + * + * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte + * // from the original `Buffer`. + * + * const buf1 = Buffer.allocUnsafe(26); + * + * for (let i = 0; i < 26; i++) { + * // 97 is the decimal ASCII value for 'a'. + * buf1[i] = i + 97; + * } + * + * const buf2 = buf1.subarray(0, 3); + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: abc + * + * buf1[0] = 33; + * + * console.log(buf2.toString('ascii', 0, buf2.length)); + * // Prints: !bc + * ``` + * + * Specifying negative indexes causes the slice to be generated relative to the + * end of `buf` rather than the beginning. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('buffer'); + * + * console.log(buf.subarray(-6, -1).toString()); + * // Prints: buffe + * // (Equivalent to buf.subarray(0, 5).) + * + * console.log(buf.subarray(-6, -2).toString()); + * // Prints: buff + * // (Equivalent to buf.subarray(0, 4).) + * + * console.log(buf.subarray(-5, -2).toString()); + * // Prints: uff + * // (Equivalent to buf.subarray(1, 4).) + * ``` + * @since v3.0.0 + * @param [start=0] Where the new `Buffer` will start. + * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). + */ + subarray(start?: number, end?: number): Buffer; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64BE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigInt64LE(0x0102030405060708n, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigInt64LE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. + * + * This function is also available under the `writeBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64BE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64BE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64BE(value: bigint, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeBigUInt64LE(0xdecafafecacefaden, 0); + * + * console.log(buf); + * // Prints: + * ``` + * + * This function is also available under the `writeBigUint64LE` alias. + * @since v12.0.0, v10.20.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeBigUInt64LE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64LE(value: bigint, offset?: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintLE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntLE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntLE + * @since v14.9.0, v12.19.0 + */ + writeUintLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than an unsigned integer. + * + * This function is also available under the `writeUintBE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeUIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeUIntBE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntBE + * @since v14.9.0, v12.19.0 + */ + writeUintBE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined + * when `value` is anything other than a signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntLE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntLE(value: number, offset: number, byteLength: number): number; + /** + * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a + * signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(6); + * + * buf.writeIntBE(0x1234567890ab, 0, 6); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. + * @return `offset` plus the number of bytes written. + */ + writeIntBE(value: number, offset: number, byteLength: number): number; + /** + * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64BE(0)); + * // Prints: 4294967295n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64BE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + readBigUint64BE(offset?: number): bigint; + /** + * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readBigUint64LE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); + * + * console.log(buf.readBigUInt64LE(0)); + * // Prints: 18446744069414584320n + * ``` + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigUInt64LE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + readBigUint64LE(offset?: number): bigint; + /** + * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64BE(offset?: number): bigint; + /** + * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed + * values. + * @since v12.0.0, v10.20.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. + */ + readBigInt64LE(offset?: number): bigint; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned, little-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintLE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntLE(0, 6).toString(16)); + * // Prints: ab9078563412 + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntLE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntLE + * @since v14.9.0, v12.19.0 + */ + readUintLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as an unsigned big-endian integer supporting + * up to 48 bits of accuracy. + * + * This function is also available under the `readUintBE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readUIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readUIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readUIntBE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntBE + * @since v14.9.0, v12.19.0 + */ + readUintBE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a little-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntLE(0, 6).toString(16)); + * // Prints: -546f87a9cbee + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntLE(offset: number, byteLength: number): number; + /** + * Reads `byteLength` number of bytes from `buf` at the specified `offset`and interprets the result as a big-endian, two's complement signed value + * supporting up to 48 bits of accuracy. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + * + * console.log(buf.readIntBE(0, 6).toString(16)); + * // Prints: 1234567890ab + * console.log(buf.readIntBE(1, 6).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * console.log(buf.readIntBE(1, 0).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. + * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. + */ + readIntBE(offset: number, byteLength: number): number; + /** + * Reads an unsigned 8-bit integer from `buf` at the specified `offset`. + * + * This function is also available under the `readUint8` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([1, -2]); + * + * console.log(buf.readUInt8(0)); + * // Prints: 1 + * console.log(buf.readUInt8(1)); + * // Prints: 254 + * console.log(buf.readUInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readUInt8(offset?: number): number; + /** + * @alias Buffer.readUInt8 + * @since v14.9.0, v12.19.0 + */ + readUint8(offset?: number): number; + /** + * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16LE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16LE(0).toString(16)); + * // Prints: 3412 + * console.log(buf.readUInt16LE(1).toString(16)); + * // Prints: 5634 + * console.log(buf.readUInt16LE(2).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16LE(offset?: number): number; + /** + * @alias Buffer.readUInt16LE + * @since v14.9.0, v12.19.0 + */ + readUint16LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint16BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56]); + * + * console.log(buf.readUInt16BE(0).toString(16)); + * // Prints: 1234 + * console.log(buf.readUInt16BE(1).toString(16)); + * // Prints: 3456 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readUInt16BE(offset?: number): number; + /** + * @alias Buffer.readUInt16BE + * @since v14.9.0, v12.19.0 + */ + readUint16BE(offset?: number): number; + /** + * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32LE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32LE(0).toString(16)); + * // Prints: 78563412 + * console.log(buf.readUInt32LE(1).toString(16)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32LE(offset?: number): number; + /** + * @alias Buffer.readUInt32LE + * @since v14.9.0, v12.19.0 + */ + readUint32LE(offset?: number): number; + /** + * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`. + * + * This function is also available under the `readUint32BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + * + * console.log(buf.readUInt32BE(0).toString(16)); + * // Prints: 12345678 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readUInt32BE(offset?: number): number; + /** + * @alias Buffer.readUInt32BE + * @since v14.9.0, v12.19.0 + */ + readUint32BE(offset?: number): number; + /** + * Reads a signed 8-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([-1, 5]); + * + * console.log(buf.readInt8(0)); + * // Prints: -1 + * console.log(buf.readInt8(1)); + * // Prints: 5 + * console.log(buf.readInt8(2)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.0 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. + */ + readInt8(offset?: number): number; + /** + * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16LE(0)); + * // Prints: 1280 + * console.log(buf.readInt16LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16LE(offset?: number): number; + /** + * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0, 5]); + * + * console.log(buf.readInt16BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. + */ + readInt16BE(offset?: number): number; + /** + * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32LE(0)); + * // Prints: 83886080 + * console.log(buf.readInt32LE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32LE(offset?: number): number; + /** + * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`. + * + * Integers read from a `Buffer` are interpreted as two's complement signed values. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([0, 0, 0, 5]); + * + * console.log(buf.readInt32BE(0)); + * // Prints: 5 + * ``` + * @since v0.5.5 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readInt32BE(offset?: number): number; + /** + * Reads a 32-bit, little-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatLE(0)); + * // Prints: 1.539989614439558e-36 + * console.log(buf.readFloatLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatLE(offset?: number): number; + /** + * Reads a 32-bit, big-endian float from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4]); + * + * console.log(buf.readFloatBE(0)); + * // Prints: 2.387939260590663e-38 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. + */ + readFloatBE(offset?: number): number; + /** + * Reads a 64-bit, little-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleLE(0)); + * // Prints: 5.447603722011605e-270 + * console.log(buf.readDoubleLE(1)); + * // Throws ERR_OUT_OF_RANGE. + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleLE(offset?: number): number; + /** + * Reads a 64-bit, big-endian double from `buf` at the specified `offset`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + * + * console.log(buf.readDoubleBE(0)); + * // Prints: 8.20788039913184e-304 + * ``` + * @since v0.11.15 + * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. + */ + readDoubleBE(offset?: number): number; + reverse(): this; + /** + * Interprets `buf` as an array of unsigned 16-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap16(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap16(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * + * One convenient use of `buf.swap16()` is to perform a fast in-place conversion + * between UTF-16 little-endian and UTF-16 big-endian: + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le'); + * buf.swap16(); // Convert to big-endian UTF-16 text. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap16(): Buffer; + /** + * Interprets `buf` as an array of unsigned 32-bit integers and swaps the + * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap32(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap32(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v5.10.0 + * @return A reference to `buf`. + */ + swap32(): Buffer; + /** + * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_. + * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); + * + * console.log(buf1); + * // Prints: + * + * buf1.swap64(); + * + * console.log(buf1); + * // Prints: + * + * const buf2 = Buffer.from([0x1, 0x2, 0x3]); + * + * buf2.swap64(); + * // Throws ERR_INVALID_BUFFER_SIZE. + * ``` + * @since v6.3.0 + * @return A reference to `buf`. + */ + swap64(): Buffer; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a + * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything + * other than an unsigned 8-bit integer. + * + * This function is also available under the `writeUint8` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt8(0x3, 0); + * buf.writeUInt8(0x4, 1); + * buf.writeUInt8(0x23, 2); + * buf.writeUInt8(0x42, 3); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeUInt8(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt8 + * @since v14.9.0, v12.19.0 + */ + writeUint8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 16-bit integer. + * + * This function is also available under the `writeUint16LE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16LE(0xdead, 0); + * buf.writeUInt16LE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16LE + * @since v14.9.0, v12.19.0 + */ + writeUint16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 16-bit integer. + * + * This function is also available under the `writeUint16BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt16BE(0xdead, 0); + * buf.writeUInt16BE(0xbeef, 2); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeUInt16BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16BE + * @since v14.9.0, v12.19.0 + */ + writeUint16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is + * anything other than an unsigned 32-bit integer. + * + * This function is also available under the `writeUint32LE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32LE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32LE + * @since v14.9.0, v12.19.0 + */ + writeUint32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an + * unsigned 32-bit integer. + * + * This function is also available under the `writeUint32BE` alias. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeUInt32BE(0xfeedface, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeUInt32BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32BE + * @since v14.9.0, v12.19.0 + */ + writeUint32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset`. `value` must be a valid + * signed 8-bit integer. Behavior is undefined when `value` is anything other than + * a signed 8-bit integer. + * + * `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt8(2, 0); + * buf.writeInt8(-2, 1); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.0 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. + * @return `offset` plus the number of bytes written. + */ + writeInt8(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16LE(0x0304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 16-bit integer. Behavior is undefined when `value` is + * anything other than a signed 16-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(2); + * + * buf.writeInt16BE(0x0102, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. + * @return `offset` plus the number of bytes written. + */ + writeInt16BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32LE(0x05060708, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32LE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a valid signed 32-bit integer. Behavior is undefined when `value` is + * anything other than a signed 32-bit integer. + * + * The `value` is interpreted and written as a two's complement signed integer. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeInt32BE(0x01020304, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.5.5 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeInt32BE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatLE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is + * undefined when `value` is anything other than a JavaScript number. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(4); + * + * buf.writeFloatBE(0xcafebabe, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. + * @return `offset` plus the number of bytes written. + */ + writeFloatBE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as little-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleLE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleLE(value: number, offset?: number): number; + /** + * Writes `value` to `buf` at the specified `offset` as big-endian. The `value`must be a JavaScript number. Behavior is undefined when `value` is anything + * other than a JavaScript number. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(8); + * + * buf.writeDoubleBE(123.456, 0); + * + * console.log(buf); + * // Prints: + * ``` + * @since v0.11.15 + * @param value Number to be written to `buf`. + * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. + * @return `offset` plus the number of bytes written. + */ + writeDoubleBE(value: number, offset?: number): number; + /** + * Fills `buf` with the specified `value`. If the `offset` and `end` are not given, + * the entire `buf` will be filled: + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Fill a `Buffer` with the ASCII character 'h'. + * + * const b = Buffer.allocUnsafe(50).fill('h'); + * + * console.log(b.toString()); + * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + * ``` + * + * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or + * integer. If the resulting integer is greater than `255` (decimal), `buf` will be + * filled with `value & 255`. + * + * If the final write of a `fill()` operation falls on a multi-byte character, + * then only the bytes of that character that fit into `buf` are written: + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Fill a `Buffer` with character that takes up two bytes in UTF-8. + * + * console.log(Buffer.allocUnsafe(5).fill('\u0222')); + * // Prints: + * ``` + * + * If `value` contains invalid characters, it is truncated; if no valid + * fill data remains, an exception is thrown: + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.allocUnsafe(5); + * + * console.log(buf.fill('a')); + * // Prints: + * console.log(buf.fill('aazz', 'hex')); + * // Prints: + * console.log(buf.fill('zz', 'hex')); + * // Throws an exception. + * ``` + * @since v0.5.0 + * @param value The value with which to fill `buf`. + * @param [offset=0] Number of bytes to skip before starting to fill `buf`. + * @param [end=buf.length] Where to stop filling `buf` (not inclusive). + * @param [encoding='utf8'] The encoding for `value` if `value` is a string. + * @return A reference to `buf`. + */ + fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; + /** + * If `value` is: + * + * * a string, `value` is interpreted according to the character encoding in`encoding`. + * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety. + * To compare a partial `Buffer`, use `buf.slice()`. + * * a number, `value` will be interpreted as an unsigned 8-bit integer + * value between `0` and `255`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.indexOf('this')); + * // Prints: 0 + * console.log(buf.indexOf('is')); + * // Prints: 2 + * console.log(buf.indexOf(Buffer.from('a buffer'))); + * // Prints: 8 + * console.log(buf.indexOf(97)); + * // Prints: 8 (97 is the decimal ASCII value for 'a') + * console.log(buf.indexOf(Buffer.from('a buffer example'))); + * // Prints: -1 + * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: 8 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le')); + * // Prints: 4 + * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le')); + * // Prints: 6 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. If the result + * of coercion is `NaN` or `0`, then the entire buffer will be searched. This + * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf). + * + * ```js + * import { Buffer } from 'buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.indexOf(99.9)); + * console.log(b.indexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN or 0. + * // Prints: 1, searching the whole buffer. + * console.log(b.indexOf('b', undefined)); + * console.log(b.indexOf('b', {})); + * console.log(b.indexOf('b', null)); + * console.log(b.indexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer` and `byteOffset` is less + * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned. + * @since v1.5.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Identical to `buf.indexOf()`, except the last occurrence of `value` is found + * rather than the first occurrence. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('this buffer is a buffer'); + * + * console.log(buf.lastIndexOf('this')); + * // Prints: 0 + * console.log(buf.lastIndexOf('buffer')); + * // Prints: 17 + * console.log(buf.lastIndexOf(Buffer.from('buffer'))); + * // Prints: 17 + * console.log(buf.lastIndexOf(97)); + * // Prints: 15 (97 is the decimal ASCII value for 'a') + * console.log(buf.lastIndexOf(Buffer.from('yolo'))); + * // Prints: -1 + * console.log(buf.lastIndexOf('buffer', 5)); + * // Prints: 5 + * console.log(buf.lastIndexOf('buffer', 4)); + * // Prints: -1 + * + * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); + * + * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le')); + * // Prints: 6 + * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le')); + * // Prints: 4 + * ``` + * + * If `value` is not a string, number, or `Buffer`, this method will throw a`TypeError`. If `value` is a number, it will be coerced to a valid byte value, + * an integer between 0 and 255. + * + * If `byteOffset` is not a number, it will be coerced to a number. Any arguments + * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer. + * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf). + * + * ```js + * import { Buffer } from 'buffer'; + * + * const b = Buffer.from('abcdef'); + * + * // Passing a value that's a number, but not a valid byte. + * // Prints: 2, equivalent to searching for 99 or 'c'. + * console.log(b.lastIndexOf(99.9)); + * console.log(b.lastIndexOf(256 + 99)); + * + * // Passing a byteOffset that coerces to NaN. + * // Prints: 1, searching the whole buffer. + * console.log(b.lastIndexOf('b', undefined)); + * console.log(b.lastIndexOf('b', {})); + * + * // Passing a byteOffset that coerces to 0. + * // Prints: -1, equivalent to passing 0. + * console.log(b.lastIndexOf('b', null)); + * console.log(b.lastIndexOf('b', [])); + * ``` + * + * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned. + * @since v6.0.0 + * @param value What to search for. + * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. + * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. + */ + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `[index, byte]` pairs from the contents + * of `buf`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * // Log the entire contents of a `Buffer`. + * + * const buf = Buffer.from('buffer'); + * + * for (const pair of buf.entries()) { + * console.log(pair); + * } + * // Prints: + * // [0, 98] + * // [1, 117] + * // [2, 102] + * // [3, 102] + * // [4, 101] + * // [5, 114] + * ``` + * @since v1.1.0 + */ + entries(): IterableIterator<[number, number]>; + /** + * Equivalent to `buf.indexOf() !== -1`. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('this is a buffer'); + * + * console.log(buf.includes('this')); + * // Prints: true + * console.log(buf.includes('is')); + * // Prints: true + * console.log(buf.includes(Buffer.from('a buffer'))); + * // Prints: true + * console.log(buf.includes(97)); + * // Prints: true (97 is the decimal ASCII value for 'a') + * console.log(buf.includes(Buffer.from('a buffer example'))); + * // Prints: false + * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8))); + * // Prints: true + * console.log(buf.includes('this', 4)); + * // Prints: false + * ``` + * @since v5.3.0 + * @param value What to search for. + * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. + * @param [encoding='utf8'] If `value` is a string, this is its encoding. + * @return `true` if `value` was found in `buf`, `false` otherwise. + */ + includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) of `buf` keys (indices). + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const key of buf.keys()) { + * console.log(key); + * } + * // Prints: + * // 0 + * // 1 + * // 2 + * // 3 + * // 4 + * // 5 + * ``` + * @since v1.1.0 + */ + keys(): IterableIterator; + /** + * Creates and returns an [iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) for `buf` values (bytes). This function is + * called automatically when a `Buffer` is used in a `for..of` statement. + * + * ```js + * import { Buffer } from 'buffer'; + * + * const buf = Buffer.from('buffer'); + * + * for (const value of buf.values()) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * + * for (const value of buf) { + * console.log(value); + * } + * // Prints: + * // 98 + * // 117 + * // 102 + * // 102 + * // 101 + * // 114 + * ``` + * @since v1.1.0 + */ + values(): IterableIterator; + } + var Buffer: BufferConstructor; + /** + * Decodes a string of Base64-encoded data into bytes, and encodes those bytes + * into a string using Latin-1 (ISO-8859-1). + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @deprecated Use `Buffer.from(data, 'base64')` instead. + * @param data The Base64-encoded input string. + */ + function atob(data: string): string; + /** + * Decodes a string into bytes using Latin-1 (ISO-8859), and encodes those bytes + * into a string using Base64. + * + * The `data` may be any JavaScript-value that can be coerced into a string. + * + * **This function is only provided for compatibility with legacy web platform APIs** + * **and should never be used in new code, because they use strings to represent** + * **binary data and predate the introduction of typed arrays in JavaScript.** + * **For code running using Node.js APIs, converting between base64-encoded strings** + * **and binary data should be performed using `Buffer.from(str, 'base64')` and`buf.toString('base64')`.** + * @since v15.13.0, v14.17.0 + * @deprecated Use `buf.toString('base64')` instead. + * @param data An ASCII (Latin1) string. + */ + function btoa(data: string): string; + } +} +declare module 'node:buffer' { + export * from 'buffer'; +} diff --git a/build/node_modules/@types/node/child_process.d.ts b/build/node_modules/@types/node/child_process.d.ts new file mode 100755 index 00000000..7eae502e --- /dev/null +++ b/build/node_modules/@types/node/child_process.d.ts @@ -0,0 +1,1366 @@ +/** + * The `child_process` module provides the ability to spawn subprocesses in + * a manner that is similar, but not identical, to [`popen(3)`](http://man7.org/linux/man-pages/man3/popen.3.html). This capability + * is primarily provided by the {@link spawn} function: + * + * ```js + * const { spawn } = require('child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * By default, pipes for `stdin`, `stdout`, and `stderr` are established between + * the parent Node.js process and the spawned subprocess. These pipes have + * limited (and platform-specific) capacity. If the subprocess writes to + * stdout in excess of that limit without the output being captured, the + * subprocess blocks waiting for the pipe buffer to accept more data. This is + * identical to the behavior of pipes in the shell. Use the `{ stdio: 'ignore' }`option if the output will not be consumed. + * + * The command lookup is performed using the `options.env.PATH` environment + * variable if it is in the `options` object. Otherwise, `process.env.PATH` is + * used. + * + * On Windows, environment variables are case-insensitive. Node.js + * lexicographically sorts the `env` keys and uses the first one that + * case-insensitively matches. Only first (in lexicographic order) entry will be + * passed to the subprocess. This might lead to issues on Windows when passing + * objects to the `env` option that have multiple variants of the same key, such as`PATH` and `Path`. + * + * The {@link spawn} method spawns the child process asynchronously, + * without blocking the Node.js event loop. The {@link spawnSync} function provides equivalent functionality in a synchronous manner that blocks + * the event loop until the spawned process either exits or is terminated. + * + * For convenience, the `child_process` module provides a handful of synchronous + * and asynchronous alternatives to {@link spawn} and {@link spawnSync}. Each of these alternatives are implemented on + * top of {@link spawn} or {@link spawnSync}. + * + * * {@link exec}: spawns a shell and runs a command within that + * shell, passing the `stdout` and `stderr` to a callback function when + * complete. + * * {@link execFile}: similar to {@link exec} except + * that it spawns the command directly without first spawning a shell by + * default. + * * {@link fork}: spawns a new Node.js process and invokes a + * specified module with an IPC communication channel established that allows + * sending messages between parent and child. + * * {@link execSync}: a synchronous version of {@link exec} that will block the Node.js event loop. + * * {@link execFileSync}: a synchronous version of {@link execFile} that will block the Node.js event loop. + * + * For certain use cases, such as automating shell scripts, the `synchronous counterparts` may be more convenient. In many cases, however, + * the synchronous methods can have significant impact on performance due to + * stalling the event loop while spawned processes complete. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/child_process.js) + */ +declare module 'child_process' { + import { ObjectEncodingOptions } from 'node:fs'; + import { EventEmitter, Abortable } from 'node:events'; + import * as net from 'node:net'; + import { Writable, Readable, Stream, Pipe } from 'node:stream'; + import { URL } from 'node:url'; + type Serializable = string | object | number | boolean | bigint; + type SendHandle = net.Socket | net.Server; + /** + * Instances of the `ChildProcess` represent spawned child processes. + * + * Instances of `ChildProcess` are not intended to be created directly. Rather, + * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create + * instances of `ChildProcess`. + * @since v2.2.0 + */ + class ChildProcess extends EventEmitter { + /** + * A `Writable Stream` that represents the child process's `stdin`. + * + * If a child process waits to read all of its input, the child will not continue + * until this stream has been closed via `end()`. + * + * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will + * refer to the same value. + * + * The `subprocess.stdin` property can be `undefined` if the child process could + * not be successfully spawned. + * @since v0.1.90 + */ + stdin: Writable | null; + /** + * A `Readable Stream` that represents the child process's `stdout`. + * + * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will + * refer to the same value. + * + * ```js + * const { spawn } = require('child_process'); + * + * const subprocess = spawn('ls'); + * + * subprocess.stdout.on('data', (data) => { + * console.log(`Received chunk ${data}`); + * }); + * ``` + * + * The `subprocess.stdout` property can be `null` if the child process could + * not be successfully spawned. + * @since v0.1.90 + */ + stdout: Readable | null; + /** + * A `Readable Stream` that represents the child process's `stderr`. + * + * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`, + * then this will be `null`. + * + * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will + * refer to the same value. + * + * The `subprocess.stderr` property can be `null` if the child process could + * not be successfully spawned. + * @since v0.1.90 + */ + stderr: Readable | null; + /** + * The `subprocess.channel` property is a reference to the child's IPC channel. If + * no IPC channel currently exists, this property is `undefined`. + * @since v7.1.0 + */ + readonly channel?: Pipe | null | undefined; + /** + * A sparse array of pipes to the child process, corresponding with positions in + * the `stdio` option passed to {@link spawn} that have been set + * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and`subprocess.stdio[2]` are also available as `subprocess.stdin`,`subprocess.stdout`, and `subprocess.stderr`, + * respectively. + * + * In the following example, only the child's fd `1` (stdout) is configured as a + * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values + * in the array are `null`. + * + * ```js + * const assert = require('assert'); + * const fs = require('fs'); + * const child_process = require('child_process'); + * + * const subprocess = child_process.spawn('ls', { + * stdio: [ + * 0, // Use parent's stdin for child. + * 'pipe', // Pipe child's stdout to parent. + * fs.openSync('err.out', 'w'), // Direct child's stderr to a file. + * ] + * }); + * + * assert.strictEqual(subprocess.stdio[0], null); + * assert.strictEqual(subprocess.stdio[0], subprocess.stdin); + * + * assert(subprocess.stdout); + * assert.strictEqual(subprocess.stdio[1], subprocess.stdout); + * + * assert.strictEqual(subprocess.stdio[2], null); + * assert.strictEqual(subprocess.stdio[2], subprocess.stderr); + * ``` + * + * The `subprocess.stdio` property can be `undefined` if the child process could + * not be successfully spawned. + * @since v0.7.10 + */ + readonly stdio: [ + Writable | null, + // stdin + Readable | null, + // stdout + Readable | null, + // stderr + Readable | Writable | null | undefined, + // extra + Readable | Writable | null | undefined // extra + ]; + /** + * The `subprocess.killed` property indicates whether the child process + * successfully received a signal from `subprocess.kill()`. The `killed` property + * does not indicate that the child process has been terminated. + * @since v0.5.10 + */ + readonly killed: boolean; + /** + * Returns the process identifier (PID) of the child process. If the child process + * fails to spawn due to errors, then the value is `undefined` and `error` is + * emitted. + * + * ```js + * const { spawn } = require('child_process'); + * const grep = spawn('grep', ['ssh']); + * + * console.log(`Spawned child pid: ${grep.pid}`); + * grep.stdin.end(); + * ``` + * @since v0.1.90 + */ + readonly pid?: number | undefined; + /** + * The `subprocess.connected` property indicates whether it is still possible to + * send and receive messages from a child process. When `subprocess.connected` is`false`, it is no longer possible to send or receive messages. + * @since v0.7.2 + */ + readonly connected: boolean; + /** + * The `subprocess.exitCode` property indicates the exit code of the child process. + * If the child process is still running, the field will be `null`. + */ + readonly exitCode: number | null; + /** + * The `subprocess.signalCode` property indicates the signal received by + * the child process if any, else `null`. + */ + readonly signalCode: NodeJS.Signals | null; + /** + * The `subprocess.spawnargs` property represents the full list of command-line + * arguments the child process was launched with. + */ + readonly spawnargs: string[]; + /** + * The `subprocess.spawnfile` property indicates the executable file name of + * the child process that is launched. + * + * For {@link fork}, its value will be equal to `process.execPath`. + * For {@link spawn}, its value will be the name of + * the executable file. + * For {@link exec}, its value will be the name of the shell + * in which the child process is launched. + */ + readonly spawnfile: string; + /** + * The `subprocess.kill()` method sends a signal to the child process. If no + * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function + * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise. + * + * ```js + * const { spawn } = require('child_process'); + * const grep = spawn('grep', ['ssh']); + * + * grep.on('close', (code, signal) => { + * console.log( + * `child process terminated due to receipt of signal ${signal}`); + * }); + * + * // Send SIGHUP to process. + * grep.kill('SIGHUP'); + * ``` + * + * The `ChildProcess` object may emit an `'error'` event if the signal + * cannot be delivered. Sending a signal to a child process that has already exited + * is not an error but may have unforeseen consequences. Specifically, if the + * process identifier (PID) has been reassigned to another process, the signal will + * be delivered to that process instead which can have unexpected results. + * + * While the function is called `kill`, the signal delivered to the child process + * may not actually terminate the process. + * + * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference. + * + * On Windows, where POSIX signals do not exist, the `signal` argument will be + * ignored, and the process will be killed forcefully and abruptly (similar to`'SIGKILL'`). + * See `Signal Events` for more details. + * + * On Linux, child processes of child processes will not be terminated + * when attempting to kill their parent. This is likely to happen when running a + * new process in a shell or with the use of the `shell` option of `ChildProcess`: + * + * ```js + * 'use strict'; + * const { spawn } = require('child_process'); + * + * const subprocess = spawn( + * 'sh', + * [ + * '-c', + * `node -e "setInterval(() => { + * console.log(process.pid, 'is alive') + * }, 500);"`, + * ], { + * stdio: ['inherit', 'inherit', 'inherit'] + * } + * ); + * + * setTimeout(() => { + * subprocess.kill(); // Does not terminate the Node.js process in the shell. + * }, 2000); + * ``` + * @since v0.1.90 + */ + kill(signal?: NodeJS.Signals | number): boolean; + /** + * When an IPC channel has been established between the parent and child ( + * i.e. when using {@link fork}), the `subprocess.send()` method can + * be used to send messages to the child process. When the child process is a + * Node.js instance, these messages can be received via the `'message'` event. + * + * The message goes through serialization and parsing. The resulting + * message might not be the same as what is originally sent. + * + * For example, in the parent script: + * + * ```js + * const cp = require('child_process'); + * const n = cp.fork(`${__dirname}/sub.js`); + * + * n.on('message', (m) => { + * console.log('PARENT got message:', m); + * }); + * + * // Causes the child to print: CHILD got message: { hello: 'world' } + * n.send({ hello: 'world' }); + * ``` + * + * And then the child script, `'sub.js'` might look like this: + * + * ```js + * process.on('message', (m) => { + * console.log('CHILD got message:', m); + * }); + * + * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null } + * process.send({ foo: 'bar', baz: NaN }); + * ``` + * + * Child Node.js processes will have a `process.send()` method of their own + * that allows the child to send messages back to the parent. + * + * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages + * containing a `NODE_` prefix in the `cmd` property are reserved for use within + * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the`'internalMessage'` event and are consumed internally by Node.js. + * Applications should avoid using such messages or listening for`'internalMessage'` events as it is subject to change without notice. + * + * The optional `sendHandle` argument that may be passed to `subprocess.send()` is + * for passing a TCP server or socket object to the child process. The child will + * receive the object as the second argument passed to the callback function + * registered on the `'message'` event. Any data that is received + * and buffered in the socket will not be sent to the child. + * + * The optional `callback` is a function that is invoked after the message is + * sent but before the child may have received it. The function is called with a + * single argument: `null` on success, or an `Error` object on failure. + * + * If no `callback` function is provided and the message cannot be sent, an`'error'` event will be emitted by the `ChildProcess` object. This can + * happen, for instance, when the child process has already exited. + * + * `subprocess.send()` will return `false` if the channel has closed or when the + * backlog of unsent messages exceeds a threshold that makes it unwise to send + * more. Otherwise, the method returns `true`. The `callback` function can be + * used to implement flow control. + * + * #### Example: sending a server object + * + * The `sendHandle` argument can be used, for instance, to pass the handle of + * a TCP server object to the child process as illustrated in the example below: + * + * ```js + * const subprocess = require('child_process').fork('subprocess.js'); + * + * // Open up the server object and send the handle. + * const server = require('net').createServer(); + * server.on('connection', (socket) => { + * socket.end('handled by parent'); + * }); + * server.listen(1337, () => { + * subprocess.send('server', server); + * }); + * ``` + * + * The child would then receive the server object as: + * + * ```js + * process.on('message', (m, server) => { + * if (m === 'server') { + * server.on('connection', (socket) => { + * socket.end('handled by child'); + * }); + * } + * }); + * ``` + * + * Once the server is now shared between the parent and child, some connections + * can be handled by the parent and some by the child. + * + * While the example above uses a server created using the `net` module, `dgram`module servers use exactly the same workflow with the exceptions of listening on + * a `'message'` event instead of `'connection'` and using `server.bind()` instead + * of `server.listen()`. This is, however, currently only supported on Unix + * platforms. + * + * #### Example: sending a socket object + * + * Similarly, the `sendHandler` argument can be used to pass the handle of a + * socket to the child process. The example below spawns two children that each + * handle connections with "normal" or "special" priority: + * + * ```js + * const { fork } = require('child_process'); + * const normal = fork('subprocess.js', ['normal']); + * const special = fork('subprocess.js', ['special']); + * + * // Open up the server and send sockets to child. Use pauseOnConnect to prevent + * // the sockets from being read before they are sent to the child process. + * const server = require('net').createServer({ pauseOnConnect: true }); + * server.on('connection', (socket) => { + * + * // If this is special priority... + * if (socket.remoteAddress === '74.125.127.100') { + * special.send('socket', socket); + * return; + * } + * // This is normal priority. + * normal.send('socket', socket); + * }); + * server.listen(1337); + * ``` + * + * The `subprocess.js` would receive the socket handle as the second argument + * passed to the event callback function: + * + * ```js + * process.on('message', (m, socket) => { + * if (m === 'socket') { + * if (socket) { + * // Check that the client socket exists. + * // It is possible for the socket to be closed between the time it is + * // sent and the time it is received in the child process. + * socket.end(`Request handled with ${process.argv[2]} priority`); + * } + * } + * }); + * ``` + * + * Do not use `.maxConnections` on a socket that has been passed to a subprocess. + * The parent cannot track when the socket is destroyed. + * + * Any `'message'` handlers in the subprocess should verify that `socket` exists, + * as the connection may have been closed during the time it takes to send the + * connection to the child. + * @since v0.5.9 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: Serializable, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, options?: MessageOptions, callback?: (error: Error | null) => void): boolean; + /** + * Closes the IPC channel between parent and child, allowing the child to exit + * gracefully once there are no other connections keeping it alive. After calling + * this method the `subprocess.connected` and `process.connected` properties in + * both the parent and child (respectively) will be set to `false`, and it will be + * no longer possible to pass messages between the processes. + * + * The `'disconnect'` event will be emitted when there are no messages in the + * process of being received. This will most often be triggered immediately after + * calling `subprocess.disconnect()`. + * + * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked + * within the child process to close the IPC channel as well. + * @since v0.7.2 + */ + disconnect(): void; + /** + * By default, the parent will wait for the detached child to exit. To prevent the + * parent from waiting for a given `subprocess` to exit, use the`subprocess.unref()` method. Doing so will cause the parent's event loop to not + * include the child in its reference count, allowing the parent to exit + * independently of the child, unless there is an established IPC channel between + * the child and the parent. + * + * ```js + * const { spawn } = require('child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore' + * }); + * + * subprocess.unref(); + * ``` + * @since v0.7.10 + */ + unref(): void; + /** + * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will + * restore the removed reference count for the child process, forcing the parent + * to wait for the child to exit before exiting itself. + * + * ```js + * const { spawn } = require('child_process'); + * + * const subprocess = spawn(process.argv[0], ['child_program.js'], { + * detached: true, + * stdio: 'ignore' + * }); + * + * subprocess.unref(); + * subprocess.ref(); + * ``` + * @since v0.7.10 + */ + ref(): void; + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + * 6. spawn + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: 'disconnect', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: 'message', listener: (message: Serializable, sendHandle: SendHandle) => void): this; + addListener(event: 'spawn', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close', code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: 'disconnect'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'exit', code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: 'message', message: Serializable, sendHandle: SendHandle): boolean; + emit(event: 'spawn', listener: () => void): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: 'disconnect', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: 'message', listener: (message: Serializable, sendHandle: SendHandle) => void): this; + on(event: 'spawn', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: 'disconnect', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: 'message', listener: (message: Serializable, sendHandle: SendHandle) => void): this; + once(event: 'spawn', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: 'disconnect', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: 'message', listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependListener(event: 'spawn', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependOnceListener(event: 'disconnect', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependOnceListener(event: 'message', listener: (message: Serializable, sendHandle: SendHandle) => void): this; + prependOnceListener(event: 'spawn', listener: () => void): this; + } + // return this object when stdio option is undefined or not specified + interface ChildProcessWithoutNullStreams extends ChildProcess { + stdin: Writable; + stdout: Readable; + stderr: Readable; + readonly stdio: [ + Writable, + Readable, + Readable, + // stderr + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined // extra, no modification + ]; + } + // return this object when stdio option is a tuple of 3 + interface ChildProcessByStdio extends ChildProcess { + stdin: I; + stdout: O; + stderr: E; + readonly stdio: [ + I, + O, + E, + Readable | Writable | null | undefined, + // extra, no modification + Readable | Writable | null | undefined // extra, no modification + ]; + } + interface MessageOptions { + keepOpen?: boolean | undefined; + } + type IOType = 'overlapped' | 'pipe' | 'ignore' | 'inherit'; + type StdioOptions = IOType | Array; + type SerializationType = 'json' | 'advanced'; + interface MessagingOptions extends Abortable { + /** + * Specify the kind of serialization used for sending messages between processes. + * @default 'json' + */ + serialization?: SerializationType | undefined; + /** + * The signal value to be used when the spawned process will be killed by the abort signal. + * @default 'SIGTERM' + */ + killSignal?: NodeJS.Signals | number | undefined; + /** + * In milliseconds the maximum amount of time the process is allowed to run. + */ + timeout?: number | undefined; + } + interface ProcessEnvOptions { + uid?: number | undefined; + gid?: number | undefined; + cwd?: string | URL | undefined; + env?: NodeJS.ProcessEnv | undefined; + } + interface CommonOptions extends ProcessEnvOptions { + /** + * @default true + */ + windowsHide?: boolean | undefined; + /** + * @default 0 + */ + timeout?: number | undefined; + } + interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable { + argv0?: string | undefined; + stdio?: StdioOptions | undefined; + shell?: boolean | string | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + interface SpawnOptions extends CommonSpawnOptions { + detached?: boolean | undefined; + } + interface SpawnOptionsWithoutStdio extends SpawnOptions { + stdio?: StdioPipeNamed | StdioPipe[] | undefined; + } + type StdioNull = 'inherit' | 'ignore' | Stream; + type StdioPipeNamed = 'pipe' | 'overlapped'; + type StdioPipe = undefined | null | StdioPipeNamed; + interface SpawnOptionsWithStdioTuple extends SpawnOptions { + stdio: [Stdin, Stdout, Stderr]; + } + /** + * The `child_process.spawn()` method spawns a new process using the given`command`, with command-line arguments in `args`. If omitted, `args` defaults + * to an empty array. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * A third argument may be used to specify additional options, with these defaults: + * + * ```js + * const defaults = { + * cwd: undefined, + * env: process.env + * }; + * ``` + * + * Use `cwd` to specify the working directory from which the process is spawned. + * If not given, the default is to inherit the current working directory. If given, + * but the path does not exist, the child process emits an `ENOENT` error + * and exits immediately. `ENOENT` is also emitted when the command + * does not exist. + * + * Use `env` to specify environment variables that will be visible to the new + * process, the default is `process.env`. + * + * `undefined` values in `env` will be ignored. + * + * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the + * exit code: + * + * ```js + * const { spawn } = require('child_process'); + * const ls = spawn('ls', ['-lh', '/usr']); + * + * ls.stdout.on('data', (data) => { + * console.log(`stdout: ${data}`); + * }); + * + * ls.stderr.on('data', (data) => { + * console.error(`stderr: ${data}`); + * }); + * + * ls.on('close', (code) => { + * console.log(`child process exited with code ${code}`); + * }); + * ``` + * + * Example: A very elaborate way to run `ps ax | grep ssh` + * + * ```js + * const { spawn } = require('child_process'); + * const ps = spawn('ps', ['ax']); + * const grep = spawn('grep', ['ssh']); + * + * ps.stdout.on('data', (data) => { + * grep.stdin.write(data); + * }); + * + * ps.stderr.on('data', (data) => { + * console.error(`ps stderr: ${data}`); + * }); + * + * ps.on('close', (code) => { + * if (code !== 0) { + * console.log(`ps process exited with code ${code}`); + * } + * grep.stdin.end(); + * }); + * + * grep.stdout.on('data', (data) => { + * console.log(data.toString()); + * }); + * + * grep.stderr.on('data', (data) => { + * console.error(`grep stderr: ${data}`); + * }); + * + * grep.on('close', (code) => { + * if (code !== 0) { + * console.log(`grep process exited with code ${code}`); + * } + * }); + * ``` + * + * Example of checking for failed `spawn`: + * + * ```js + * const { spawn } = require('child_process'); + * const subprocess = spawn('bad_command'); + * + * subprocess.on('error', (err) => { + * console.error('Failed to start subprocess.'); + * }); + * ``` + * + * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process + * title while others (Windows, SunOS) will use `command`. + * + * Node.js currently overwrites `argv[0]` with `process.execPath` on startup, so`process.argv[0]` in a Node.js child process will not match the `argv0`parameter passed to `spawn` from the parent, + * retrieve it with the`process.argv0` property instead. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { spawn } = require('child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const grep = spawn('grep', ['ssh'], { signal }); + * grep.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * ``` + * @since v0.1.90 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, options: SpawnOptions): ChildProcess; + // overloads of spawn with 'args' + function spawn(command: string, args?: ReadonlyArray, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptionsWithStdioTuple): ChildProcessByStdio; + function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess; + interface ExecOptions extends CommonOptions { + shell?: string | undefined; + signal?: AbortSignal | undefined; + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + } + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: BufferEncoding | null; // specify `null`. + } + interface ExecException extends Error { + cmd?: string | undefined; + killed?: boolean | undefined; + code?: number | undefined; + signal?: NodeJS.Signals | undefined; + } + /** + * Spawns a shell then executes the `command` within that shell, buffering any + * generated output. The `command` string passed to the exec function is processed + * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters)) + * need to be dealt with accordingly: + * + * ```js + * const { exec } = require('child_process'); + * + * exec('"/path/to/test file/test.sh" arg1 arg2'); + * // Double quotes are used so that the space in the path is not interpreted as + * // a delimiter of multiple arguments. + * + * exec('echo "The \\$HOME variable is $HOME"'); + * // The $HOME variable is escaped in the first instance, but not in the second. + * ``` + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * + * If a `callback` function is provided, it is called with the arguments`(error, stdout, stderr)`. On success, `error` will be `null`. On error,`error` will be an instance of `Error`. The + * `error.code` property will be + * the exit code of the process. By convention, any exit code other than `0`indicates an error. `error.signal` will be the signal that terminated the + * process. + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * ```js + * const { exec } = require('child_process'); + * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => { + * if (error) { + * console.error(`exec error: ${error}`); + * return; + * } + * console.log(`stdout: ${stdout}`); + * console.error(`stderr: ${stderr}`); + * }); + * ``` + * + * If `timeout` is greater than `0`, the parent will send the signal + * identified by the `killSignal` property (the default is `'SIGTERM'`) if the + * child runs longer than `timeout` milliseconds. + * + * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace + * the existing process and uses a shell to execute the command. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('util'); + * const exec = util.promisify(require('child_process').exec); + * + * async function lsExample() { + * const { stdout, stderr } = await exec('ls'); + * console.log('stdout:', stdout); + * console.error('stderr:', stderr); + * } + * lsExample(); + * ``` + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { exec } = require('child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = exec('grep ssh', { signal }, (error) => { + * console.log(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.90 + * @param command The command to run, with space-separated arguments. + * @param callback called with the output when process terminates. + */ + function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec( + command: string, + options: { + encoding: 'buffer' | null; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: (ObjectEncodingOptions & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void + ): ChildProcess; + interface PromiseWithChild extends Promise { + child: ChildProcess; + } + namespace exec { + function __promisify__(command: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: { + encoding: 'buffer' | null; + } & ExecOptions + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + command: string, + options: { + encoding: BufferEncoding; + } & ExecOptions + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options: ExecOptions + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + command: string, + options?: (ObjectEncodingOptions & ExecOptions) | null + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ExecFileOptions extends CommonOptions, Abortable { + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + windowsVerbatimArguments?: boolean | undefined; + shell?: boolean | string | undefined; + signal?: AbortSignal | undefined; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: 'buffer' | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + type ExecFileException = ExecException & NodeJS.ErrnoException; + /** + * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified + * executable `file` is spawned directly as a new process making it slightly more + * efficient than {@link exec}. + * + * The same options as {@link exec} are supported. Since a shell is + * not spawned, behaviors such as I/O redirection and file globbing are not + * supported. + * + * ```js + * const { execFile } = require('child_process'); + * const child = execFile('node', ['--version'], (error, stdout, stderr) => { + * if (error) { + * throw error; + * } + * console.log(stdout); + * }); + * ``` + * + * The `stdout` and `stderr` arguments passed to the callback will contain the + * stdout and stderr output of the child process. By default, Node.js will decode + * the output as UTF-8 and pass strings to the callback. The `encoding` option + * can be used to specify the character encoding used to decode the stdout and + * stderr output. If `encoding` is `'buffer'`, or an unrecognized character + * encoding, `Buffer` objects will be passed to the callback instead. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned`ChildProcess` instance is attached to the `Promise` as a `child` property. In + * case of an error (including any error resulting in an exit code other than 0), a + * rejected promise is returned, with the same `error` object given in the + * callback, but with two additional properties `stdout` and `stderr`. + * + * ```js + * const util = require('util'); + * const execFile = util.promisify(require('child_process').execFile); + * async function getVersion() { + * const { stdout } = await execFile('node', ['--version']); + * console.log(stdout); + * } + * getVersion(); + * ``` + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * const { execFile } = require('child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = execFile('node', ['--version'], { signal }, (error) => { + * console.log(error); // an AbortError + * }); + * controller.abort(); + * ``` + * @since v0.1.91 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @param callback Called with the output when process terminates. + */ + function execFile(file: string): ChildProcess; + function execFile(file: string, options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile(file: string, args: ReadonlyArray | undefined | null, options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess; + // no `options` definitely means stdout/stderr are `string`. + function execFile(file: string, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile(file: string, args: ReadonlyArray | undefined | null, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess; + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void + ): ChildProcess; + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void + ): ChildProcess; + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile(file: string, options: ExecFileOptionsWithOtherEncoding, callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void + ): ChildProcess; + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile(file: string, options: ExecFileOptions, callback: (error: ExecFileException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void + ): ChildProcess; + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null, + callback: ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null + ): ChildProcess; + namespace execFile { + function __promisify__(file: string): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithBufferEncoding + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding + ): PromiseWithChild<{ + stdout: Buffer; + stderr: Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithStringEncoding + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithOtherEncoding + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + options: ExecFileOptions + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions + ): PromiseWithChild<{ + stdout: string; + stderr: string; + }>; + function __promisify__( + file: string, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: (ObjectEncodingOptions & ExecFileOptions) | undefined | null + ): PromiseWithChild<{ + stdout: string | Buffer; + stderr: string | Buffer; + }>; + } + interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable { + execPath?: string | undefined; + execArgv?: string[] | undefined; + silent?: boolean | undefined; + stdio?: StdioOptions | undefined; + detached?: boolean | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + /** + * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes. + * Like {@link spawn}, a `ChildProcess` object is returned. The + * returned `ChildProcess` will have an additional communication channel + * built-in that allows messages to be passed back and forth between the parent and + * child. See `subprocess.send()` for details. + * + * Keep in mind that spawned Node.js child processes are + * independent of the parent with exception of the IPC communication channel + * that is established between the two. Each process has its own memory, with + * their own V8 instances. Because of the additional resource allocations + * required, spawning a large number of child Node.js processes is not + * recommended. + * + * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the`options` object allows for an alternative + * execution path to be used. + * + * Node.js processes launched with a custom `execPath` will communicate with the + * parent process using the file descriptor (fd) identified using the + * environment variable `NODE_CHANNEL_FD` on the child process. + * + * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the + * current process. + * + * The `shell` option available in {@link spawn} is not supported by`child_process.fork()` and will be ignored if set. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.kill()` on the child process except + * the error passed to the callback will be an `AbortError`: + * + * ```js + * if (process.argv[2] === 'child') { + * setTimeout(() => { + * console.log(`Hello from ${process.argv[2]}!`); + * }, 1_000); + * } else { + * const { fork } = require('child_process'); + * const controller = new AbortController(); + * const { signal } = controller; + * const child = fork(__filename, ['child'], { signal }); + * child.on('error', (err) => { + * // This will be called with err being an AbortError if the controller aborts + * }); + * controller.abort(); // Stops the child process + * } + * ``` + * @since v0.5.0 + * @param modulePath The module to run in the child. + * @param args List of string arguments. + */ + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + interface SpawnSyncOptions extends CommonSpawnOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | 'buffer' | null | undefined; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding?: 'buffer' | null | undefined; + } + interface SpawnSyncReturns { + pid: number; + output: Array; + stdout: T; + stderr: T; + status: number | null; + signal: NodeJS.Signals | null; + error?: Error | undefined; + } + /** + * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the process intercepts and handles the `SIGTERM` signal + * and doesn't exit, the parent process will wait until the child process has + * exited. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @param args List of string arguments. + */ + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync(command: string, args: ReadonlyArray): SpawnSyncReturns; + function spawnSync(command: string, args: ReadonlyArray, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, args: ReadonlyArray, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptions): SpawnSyncReturns; + interface CommonExecOptions extends CommonOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + stdio?: StdioOptions | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | 'buffer' | null | undefined; + } + interface ExecSyncOptions extends CommonExecOptions { + shell?: string | undefined; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding?: 'buffer' | null | undefined; + } + /** + * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return + * until the child process has fully closed. When a timeout has been encountered + * and `killSignal` is sent, the method won't return until the process has + * completely exited. If the child process intercepts and handles the `SIGTERM`signal and doesn't exit, the parent process will wait until the child process + * has exited. + * + * If the process times out or has a non-zero exit code, this method will throw. + * The `Error` object will contain the entire result from {@link spawnSync}. + * + * **Never pass unsanitized user input to this function. Any input containing shell** + * **metacharacters may be used to trigger arbitrary command execution.** + * @since v0.11.12 + * @param command The command to run. + * @return The stdout from the command. + */ + function execSync(command: string): Buffer; + function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): string | Buffer; + interface ExecFileSyncOptions extends CommonExecOptions { + shell?: boolean | string | undefined; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding?: 'buffer' | null; // specify `null`. + } + /** + * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not + * return until the child process has fully closed. When a timeout has been + * encountered and `killSignal` is sent, the method won't return until the process + * has completely exited. + * + * If the child process intercepts and handles the `SIGTERM` signal and + * does not exit, the parent process will still wait until the child process has + * exited. + * + * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}. + * + * **If the `shell` option is enabled, do not pass unsanitized user input to this** + * **function. Any input containing shell metacharacters may be used to trigger** + * **arbitrary command execution.** + * @since v0.11.12 + * @param file The name or path of the executable file to run. + * @param args List of string arguments. + * @return The stdout from the command. + */ + function execFileSync(file: string): Buffer; + function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(file: string, options?: ExecFileSyncOptions): string | Buffer; + function execFileSync(file: string, args: ReadonlyArray): Buffer; + function execFileSync(file: string, args: ReadonlyArray, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(file: string, args: ReadonlyArray, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(file: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): string | Buffer; +} +declare module 'node:child_process' { + export * from 'child_process'; +} diff --git a/build/node_modules/@types/node/cluster.d.ts b/build/node_modules/@types/node/cluster.d.ts new file mode 100755 index 00000000..c48084da --- /dev/null +++ b/build/node_modules/@types/node/cluster.d.ts @@ -0,0 +1,414 @@ +/** + * A single instance of Node.js runs in a single thread. To take advantage of + * multi-core systems, the user will sometimes want to launch a cluster of Node.js + * processes to handle the load. + * + * The cluster module allows easy creation of child processes that all share + * server ports. + * + * ```js + * import cluster from 'cluster'; + * import http from 'http'; + * import { cpus } from 'os'; + * import process from 'process'; + * + * const numCPUs = cpus().length; + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('exit', (worker, code, signal) => { + * console.log(`worker ${worker.process.pid} died`); + * }); + * } else { + * // Workers can share any TCP connection + * // In this case it is an HTTP server + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * + * console.log(`Worker ${process.pid} started`); + * } + * ``` + * + * Running Node.js will now share port 8000 between the workers: + * + * ```console + * $ node server.js + * Primary 3596 is running + * Worker 4324 started + * Worker 4520 started + * Worker 6056 started + * Worker 5644 started + * ``` + * + * On Windows, it is not yet possible to set up a named pipe server in a worker. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/cluster.js) + */ +declare module 'cluster' { + import * as child from 'node:child_process'; + import EventEmitter = require('node:events'); + import * as net from 'node:net'; + export interface ClusterSettings { + execArgv?: string[] | undefined; // default: process.execArgv + exec?: string | undefined; + args?: string[] | undefined; + silent?: boolean | undefined; + stdio?: any[] | undefined; + uid?: number | undefined; + gid?: number | undefined; + inspectPort?: number | (() => number) | undefined; + } + export interface Address { + address: string; + port: number; + addressType: number | 'udp4' | 'udp6'; // 4, 6, -1, "udp4", "udp6" + } + /** + * A `Worker` object contains all public information and method about a worker. + * In the primary it can be obtained using `cluster.workers`. In a worker + * it can be obtained using `cluster.worker`. + * @since v0.7.0 + */ + export class Worker extends EventEmitter { + /** + * Each new worker is given its own unique id, this id is stored in the`id`. + * + * While a worker is alive, this is the key that indexes it in`cluster.workers`. + * @since v0.8.0 + */ + id: number; + /** + * All workers are created using `child_process.fork()`, the returned object + * from this function is stored as `.process`. In a worker, the global `process`is stored. + * + * See: `Child Process module`. + * + * Workers will call `process.exit(0)` if the `'disconnect'` event occurs + * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against + * accidental disconnection. + * @since v0.7.0 + */ + process: child.ChildProcess; + /** + * Send a message to a worker or primary, optionally with a handle. + * + * In the primary this sends a message to a specific worker. It is identical to `ChildProcess.send()`. + * + * In a worker this sends a message to the primary. It is identical to`process.send()`. + * + * This example will echo back all messages from the primary: + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * worker.send('hi there'); + * + * } else if (cluster.isWorker) { + * process.on('message', (msg) => { + * process.send(msg); + * }); + * } + * ``` + * @since v0.7.0 + * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: + */ + send(message: child.Serializable, callback?: (error: Error | null) => void): boolean; + send(message: child.Serializable, sendHandle: child.SendHandle, callback?: (error: Error | null) => void): boolean; + send(message: child.Serializable, sendHandle: child.SendHandle, options?: child.MessageOptions, callback?: (error: Error | null) => void): boolean; + /** + * This function will kill the worker. In the primary, it does this + * by disconnecting the `worker.process`, and once disconnected, killing + * with `signal`. In the worker, it does it by disconnecting the channel, + * and then exiting with code `0`. + * + * Because `kill()` attempts to gracefully disconnect the worker process, it is + * susceptible to waiting indefinitely for the disconnect to complete. For example, + * if the worker enters an infinite loop, a graceful disconnect will never occur. + * If the graceful disconnect behavior is not needed, use `worker.process.kill()`. + * + * Causes `.exitedAfterDisconnect` to be set. + * + * This method is aliased as `worker.destroy()` for backward compatibility. + * + * In a worker, `process.kill()` exists, but it is not this function; + * it is `kill()`. + * @since v0.9.12 + * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process. + */ + kill(signal?: string): void; + destroy(signal?: string): void; + /** + * In a worker, this function will close all servers, wait for the `'close'` event + * on those servers, and then disconnect the IPC channel. + * + * In the primary, an internal message is sent to the worker causing it to call`.disconnect()` on itself. + * + * Causes `.exitedAfterDisconnect` to be set. + * + * After a server is closed, it will no longer accept new connections, + * but connections may be accepted by any other listening worker. Existing + * connections will be allowed to close as usual. When no more connections exist, + * see `server.close()`, the IPC channel to the worker will close allowing it + * to die gracefully. + * + * The above applies _only_ to server connections, client connections are not + * automatically closed by workers, and disconnect does not wait for them to close + * before exiting. + * + * In a worker, `process.disconnect` exists, but it is not this function; + * it is `disconnect()`. + * + * Because long living server connections may block workers from disconnecting, it + * may be useful to send a message, so application specific actions may be taken to + * close them. It also may be useful to implement a timeout, killing a worker if + * the `'disconnect'` event has not been emitted after some time. + * + * ```js + * if (cluster.isPrimary) { + * const worker = cluster.fork(); + * let timeout; + * + * worker.on('listening', (address) => { + * worker.send('shutdown'); + * worker.disconnect(); + * timeout = setTimeout(() => { + * worker.kill(); + * }, 2000); + * }); + * + * worker.on('disconnect', () => { + * clearTimeout(timeout); + * }); + * + * } else if (cluster.isWorker) { + * const net = require('net'); + * const server = net.createServer((socket) => { + * // Connections never end + * }); + * + * server.listen(8000); + * + * process.on('message', (msg) => { + * if (msg === 'shutdown') { + * // Initiate graceful close of any connections to server + * } + * }); + * } + * ``` + * @since v0.7.7 + * @return A reference to `worker`. + */ + disconnect(): void; + /** + * This function returns `true` if the worker is connected to its primary via its + * IPC channel, `false` otherwise. A worker is connected to its primary after it + * has been created. It is disconnected after the `'disconnect'` event is emitted. + * @since v0.11.14 + */ + isConnected(): boolean; + /** + * This function returns `true` if the worker's process has terminated (either + * because of exiting or being signaled). Otherwise, it returns `false`. + * + * ```js + * import cluster from 'cluster'; + * import http from 'http'; + * import { cpus } from 'os'; + * import process from 'process'; + * + * const numCPUs = cpus().length; + * + * if (cluster.isPrimary) { + * console.log(`Primary ${process.pid} is running`); + * + * // Fork workers. + * for (let i = 0; i < numCPUs; i++) { + * cluster.fork(); + * } + * + * cluster.on('fork', (worker) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * + * cluster.on('exit', (worker, code, signal) => { + * console.log('worker is dead:', worker.isDead()); + * }); + * } else { + * // Workers can share any TCP connection. In this case, it is an HTTP server. + * http.createServer((req, res) => { + * res.writeHead(200); + * res.end(`Current process\n ${process.pid}`); + * process.kill(process.pid); + * }).listen(8000); + * } + * ``` + * @since v0.11.14 + */ + isDead(): boolean; + /** + * This property is `true` if the worker exited due to `.kill()` or`.disconnect()`. If the worker exited any other way, it is `false`. If the + * worker has not exited, it is `undefined`. + * + * The boolean `worker.exitedAfterDisconnect` allows distinguishing between + * voluntary and accidental exit, the primary may choose not to respawn a worker + * based on this value. + * + * ```js + * cluster.on('exit', (worker, code, signal) => { + * if (worker.exitedAfterDisconnect === true) { + * console.log('Oh, it was just voluntary – no need to worry'); + * } + * }); + * + * // kill worker + * worker.kill(); + * ``` + * @since v6.0.0 + */ + exitedAfterDisconnect: boolean; + /** + * events.EventEmitter + * 1. disconnect + * 2. error + * 3. exit + * 4. listening + * 5. message + * 6. online + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'disconnect', listener: () => void): this; + addListener(event: 'error', listener: (error: Error) => void): this; + addListener(event: 'exit', listener: (code: number, signal: string) => void): this; + addListener(event: 'listening', listener: (address: Address) => void): this; + addListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: 'online', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'disconnect'): boolean; + emit(event: 'error', error: Error): boolean; + emit(event: 'exit', code: number, signal: string): boolean; + emit(event: 'listening', address: Address): boolean; + emit(event: 'message', message: any, handle: net.Socket | net.Server): boolean; + emit(event: 'online'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'disconnect', listener: () => void): this; + on(event: 'error', listener: (error: Error) => void): this; + on(event: 'exit', listener: (code: number, signal: string) => void): this; + on(event: 'listening', listener: (address: Address) => void): this; + on(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: 'online', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'disconnect', listener: () => void): this; + once(event: 'error', listener: (error: Error) => void): this; + once(event: 'exit', listener: (code: number, signal: string) => void): this; + once(event: 'listening', listener: (address: Address) => void): this; + once(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: 'online', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'disconnect', listener: () => void): this; + prependListener(event: 'error', listener: (error: Error) => void): this; + prependListener(event: 'exit', listener: (code: number, signal: string) => void): this; + prependListener(event: 'listening', listener: (address: Address) => void): this; + prependListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: 'online', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'disconnect', listener: () => void): this; + prependOnceListener(event: 'error', listener: (error: Error) => void): this; + prependOnceListener(event: 'exit', listener: (code: number, signal: string) => void): this; + prependOnceListener(event: 'listening', listener: (address: Address) => void): this; + prependOnceListener(event: 'message', listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: 'online', listener: () => void): this; + } + export interface Cluster extends EventEmitter { + disconnect(callback?: () => void): void; + fork(env?: any): Worker; + /** @deprecated since v16.0.0 - use isPrimary. */ + readonly isMaster: boolean; + readonly isPrimary: boolean; + readonly isWorker: boolean; + schedulingPolicy: number; + readonly settings: ClusterSettings; + /** @deprecated since v16.0.0 - use setupPrimary. */ + setupMaster(settings?: ClusterSettings): void; + /** + * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in cluster.settings. + */ + setupPrimary(settings?: ClusterSettings): void; + readonly worker?: Worker | undefined; + readonly workers?: NodeJS.Dict | undefined; + readonly SCHED_NONE: number; + readonly SCHED_RR: number; + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'disconnect', listener: (worker: Worker) => void): this; + addListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this; + addListener(event: 'fork', listener: (worker: Worker) => void): this; + addListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this; + addListener(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: 'online', listener: (worker: Worker) => void): this; + addListener(event: 'setup', listener: (settings: ClusterSettings) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'disconnect', worker: Worker): boolean; + emit(event: 'exit', worker: Worker, code: number, signal: string): boolean; + emit(event: 'fork', worker: Worker): boolean; + emit(event: 'listening', worker: Worker, address: Address): boolean; + emit(event: 'message', worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: 'online', worker: Worker): boolean; + emit(event: 'setup', settings: ClusterSettings): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'disconnect', listener: (worker: Worker) => void): this; + on(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this; + on(event: 'fork', listener: (worker: Worker) => void): this; + on(event: 'listening', listener: (worker: Worker, address: Address) => void): this; + on(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: 'online', listener: (worker: Worker) => void): this; + on(event: 'setup', listener: (settings: ClusterSettings) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'disconnect', listener: (worker: Worker) => void): this; + once(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this; + once(event: 'fork', listener: (worker: Worker) => void): this; + once(event: 'listening', listener: (worker: Worker, address: Address) => void): this; + once(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: 'online', listener: (worker: Worker) => void): this; + once(event: 'setup', listener: (settings: ClusterSettings) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'disconnect', listener: (worker: Worker) => void): this; + prependListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this; + prependListener(event: 'fork', listener: (worker: Worker) => void): this; + prependListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: 'message', listener: (worker: Worker, message: any, handle?: net.Socket | net.Server) => void): this; + prependListener(event: 'online', listener: (worker: Worker) => void): this; + prependListener(event: 'setup', listener: (settings: ClusterSettings) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'disconnect', listener: (worker: Worker) => void): this; + prependOnceListener(event: 'exit', listener: (worker: Worker, code: number, signal: string) => void): this; + prependOnceListener(event: 'fork', listener: (worker: Worker) => void): this; + prependOnceListener(event: 'listening', listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: 'message', listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; + prependOnceListener(event: 'online', listener: (worker: Worker) => void): this; + prependOnceListener(event: 'setup', listener: (settings: ClusterSettings) => void): this; + } + const cluster: Cluster; + export default cluster; +} +declare module 'node:cluster' { + export * from 'cluster'; + export { default as default } from 'cluster'; +} diff --git a/build/node_modules/@types/node/console.d.ts b/build/node_modules/@types/node/console.d.ts new file mode 100755 index 00000000..9297018c --- /dev/null +++ b/build/node_modules/@types/node/console.d.ts @@ -0,0 +1,412 @@ +/** + * The `console` module provides a simple debugging console that is similar to the + * JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/console.js) + */ +declare module 'console' { + import console = require('node:console'); + export = console; +} +declare module 'node:console' { + import { InspectOptions } from 'node:util'; + global { + // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build + interface Console { + Console: console.ConsoleConstructor; + /** + * `console.assert()` writes a message if `value` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) or omitted. It only + * writes a message and does not otherwise affect execution. The output always + * starts with `"Assertion failed"`. If provided, `message` is formatted using `util.format()`. + * + * If `value` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), nothing happens. + * + * ```js + * console.assert(true, 'does nothing'); + * + * console.assert(false, 'Whoops %s work', 'didn\'t'); + * // Assertion failed: Whoops didn't work + * + * console.assert(); + * // Assertion failed + * ``` + * @since v0.1.101 + * @param value The value tested for being truthy. + * @param message All arguments besides `value` are used as error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the + * TTY. When `stdout` is not a TTY, this method does nothing. + * + * The specific operation of `console.clear()` can vary across operating systems + * and terminal types. For most Linux operating systems, `console.clear()`operates similarly to the `clear` shell command. On Windows, `console.clear()`will clear only the output in the + * current terminal viewport for the Node.js + * binary. + * @since v8.3.0 + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the + * number of times `console.count()` has been called with the given `label`. + * + * ```js + * > console.count() + * default: 1 + * undefined + * > console.count('default') + * default: 2 + * undefined + * > console.count('abc') + * abc: 1 + * undefined + * > console.count('xyz') + * xyz: 1 + * undefined + * > console.count('abc') + * abc: 2 + * undefined + * > console.count() + * default: 3 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + * + * ```js + * > console.count('abc'); + * abc: 1 + * undefined + * > console.countReset('abc'); + * undefined + * > console.count('abc'); + * abc: 1 + * undefined + * > + * ``` + * @since v8.3.0 + * @param label The display label for the counter. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link log}. + * @since v8.0.0 + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses `util.inspect()` on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + * @since v0.1.101 + */ + dir(obj: any, options?: InspectOptions): void; + /** + * This method calls `console.log()` passing it the arguments received. + * This method does not produce any XML formatting. + * @since v8.0.0 + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const code = 5; + * console.error('error #%d', code); + * // Prints: error #5, to stderr + * console.error('error', code); + * // Prints: error 5, to stderr + * ``` + * + * If formatting elements (e.g. `%d`) are not found in the first string then `util.inspect()` is called on each argument and the resulting string + * values are concatenated. See `util.format()` for more information. + * @since v0.1.100 + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by spaces for `groupIndentation`length. + * + * If one or more `label`s are provided, those are printed first without the + * additional indentation. + * @since v8.5.0 + */ + group(...label: any[]): void; + /** + * An alias for {@link group}. + * @since v8.5.0 + */ + groupCollapsed(...label: any[]): void; + /** + * Decreases indentation of subsequent lines by spaces for `groupIndentation`length. + * @since v8.5.0 + */ + groupEnd(): void; + /** + * The `console.info()` function is an alias for {@link log}. + * @since v0.1.100 + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. Multiple arguments can be passed, with the + * first used as the primary message and all additional used as substitution + * values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to `util.format()`). + * + * ```js + * const count = 5; + * console.log('count: %d', count); + * // Prints: count: 5, to stdout + * console.log('count:', count); + * // Prints: count: 5, to stdout + * ``` + * + * See `util.format()` for more information. + * @since v0.1.100 + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * Try to construct a table with the columns of the properties of `tabularData`(or use `properties`) and rows of `tabularData` and log it. Falls back to just + * logging the argument if it can’t be parsed as tabular. + * + * ```js + * // These can't be parsed as tabular data + * console.table(Symbol()); + * // Symbol() + * + * console.table(undefined); + * // undefined + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]); + * // ┌─────────┬─────┬─────┐ + * // │ (index) │ a │ b │ + * // ├─────────┼─────┼─────┤ + * // │ 0 │ 1 │ 'Y' │ + * // │ 1 │ 'Z' │ 2 │ + * // └─────────┴─────┴─────┘ + * + * console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']); + * // ┌─────────┬─────┐ + * // │ (index) │ a │ + * // ├─────────┼─────┤ + * // │ 0 │ 1 │ + * // │ 1 │ 'Z' │ + * // └─────────┴─────┘ + * ``` + * @since v10.0.0 + * @param properties Alternate properties for constructing the table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers + * are identified by a unique `label`. Use the same `label` when calling {@link timeEnd} to stop the timer and output the elapsed time in + * suitable time units to `stdout`. For example, if the elapsed + * time is 3869ms, `console.timeEnd()` displays "3.869s". + * @since v0.1.104 + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link time} and + * prints the result to `stdout`: + * + * ```js + * console.time('100-elements'); + * for (let i = 0; i < 100; i++) {} + * console.timeEnd('100-elements'); + * // prints 100-elements: 225.438ms + * ``` + * @since v0.1.104 + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link time}, prints + * the elapsed time and other `data` arguments to `stdout`: + * + * ```js + * console.time('process'); + * const value = expensiveProcess1(); // Returns 42 + * console.timeLog('process', value); + * // Prints "process: 365.227ms 42". + * doExpensiveProcess2(value); + * console.timeEnd('process'); + * ``` + * @since v10.7.0 + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string `'Trace: '`, followed by the `util.format()` formatted message and stack trace to the current position in the code. + * + * ```js + * console.trace('Show me'); + * // Prints: (stack trace will vary based on where trace is called) + * // Trace: Show me + * // at repl:2:9 + * // at REPLServer.defaultEval (repl.js:248:27) + * // at bound (domain.js:287:14) + * // at REPLServer.runBound [as eval] (domain.js:300:12) + * // at REPLServer. (repl.js:412:12) + * // at emitOne (events.js:82:20) + * // at REPLServer.emit (events.js:169:7) + * // at REPLServer.Interface._onLine (readline.js:210:10) + * // at REPLServer.Interface._line (readline.js:549:8) + * // at REPLServer.Interface._ttyWrite (readline.js:826:14) + * ``` + * @since v0.1.104 + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The `console.warn()` function is an alias for {@link error}. + * @since v0.1.100 + */ + warn(message?: any, ...optionalParams: any[]): void; + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + } + /** + * The `console` module provides a simple debugging console that is similar to the + * JavaScript console mechanism provided by web browsers. + * + * The module exports two specific components: + * + * * A `Console` class with methods such as `console.log()`, `console.error()` and`console.warn()` that can be used to write to any Node.js stream. + * * A global `console` instance configured to write to `process.stdout` and `process.stderr`. The global `console` can be used without calling`require('console')`. + * + * _**Warning**_: The global console object's methods are neither consistently + * synchronous like the browser APIs they resemble, nor are they consistently + * asynchronous like all other Node.js streams. See the `note on process I/O` for + * more information. + * + * Example using the global `console`: + * + * ```js + * console.log('hello world'); + * // Prints: hello world, to stdout + * console.log('hello %s', 'world'); + * // Prints: hello world, to stdout + * console.error(new Error('Whoops, something bad happened')); + * // Prints error message and stack trace to stderr: + * // Error: Whoops, something bad happened + * // at [eval]:5:15 + * // at Script.runInThisContext (node:vm:132:18) + * // at Object.runInThisContext (node:vm:309:38) + * // at node:internal/process/execution:77:19 + * // at [eval]-wrapper:6:22 + * // at evalScript (node:internal/process/execution:76:60) + * // at node:internal/main/eval_string:23:3 + * + * const name = 'Will Robinson'; + * console.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to stderr + * ``` + * + * Example using the `Console` class: + * + * ```js + * const out = getStreamSomehow(); + * const err = getStreamSomehow(); + * const myConsole = new console.Console(out, err); + * + * myConsole.log('hello world'); + * // Prints: hello world, to out + * myConsole.log('hello %s', 'world'); + * // Prints: hello world, to out + * myConsole.error(new Error('Whoops, something bad happened')); + * // Prints: [Error: Whoops, something bad happened], to err + * + * const name = 'Will Robinson'; + * myConsole.warn(`Danger ${name}! Danger!`); + * // Prints: Danger Will Robinson! Danger!, to err + * ``` + * @see [source](https://github.com/nodejs/node/blob/v16.4.2/lib/console.js) + */ + namespace console { + interface ConsoleConstructorOptions { + stdout: NodeJS.WritableStream; + stderr?: NodeJS.WritableStream | undefined; + ignoreErrors?: boolean | undefined; + colorMode?: boolean | 'auto' | undefined; + inspectOptions?: InspectOptions | undefined; + /** + * Set group indentation + * @default 2 + */ + groupIndentation?: number | undefined; + } + interface ConsoleConstructor { + prototype: Console; + new (stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console; + new (options: ConsoleConstructorOptions): Console; + } + } + var console: Console; + } + export = globalThis.console; +} diff --git a/build/node_modules/@types/node/constants.d.ts b/build/node_modules/@types/node/constants.d.ts new file mode 100755 index 00000000..208020dc --- /dev/null +++ b/build/node_modules/@types/node/constants.d.ts @@ -0,0 +1,18 @@ +/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ +declare module 'constants' { + import { constants as osConstants, SignalConstants } from 'node:os'; + import { constants as cryptoConstants } from 'node:crypto'; + import { constants as fsConstants } from 'node:fs'; + + const exp: typeof osConstants.errno & + typeof osConstants.priority & + SignalConstants & + typeof cryptoConstants & + typeof fsConstants; + export = exp; +} + +declare module 'node:constants' { + import constants = require('constants'); + export = constants; +} diff --git a/build/node_modules/@types/node/crypto.d.ts b/build/node_modules/@types/node/crypto.d.ts new file mode 100755 index 00000000..4dff4880 --- /dev/null +++ b/build/node_modules/@types/node/crypto.d.ts @@ -0,0 +1,3307 @@ +/** + * The `crypto` module provides cryptographic functionality that includes a set of + * wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions. + * + * ```js + * const { createHmac } = await import('crypto'); + * + * const secret = 'abcdefg'; + * const hash = createHmac('sha256', secret) + * .update('I love cupcakes') + * .digest('hex'); + * console.log(hash); + * // Prints: + * // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/crypto.js) + */ +declare module 'crypto' { + import * as stream from 'node:stream'; + import { PeerCertificate } from 'node:tls'; + interface Certificate { + /** + * @deprecated + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @deprecated + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @deprecated + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + } + const Certificate: Certificate & { + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + new (): Certificate; + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + (): Certificate; + /** + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + }; + namespace constants { + // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants + const OPENSSL_VERSION_NUMBER: number; + /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ + const SSL_OP_ALL: number; + /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_CIPHER_SERVER_PREFERENCE: number; + /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */ + const SSL_OP_CISCO_ANYCONNECT: number; + /** Instructs OpenSSL to turn on cookie exchange. */ + const SSL_OP_COOKIE_EXCHANGE: number; + /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ + const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ + const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */ + const SSL_OP_EPHEMERAL_RSA: number; + /** Allows initial connection to servers that do not support RI. */ + const SSL_OP_LEGACY_SERVER_CONNECT: number; + const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; + const SSL_OP_MICROSOFT_SESS_ID_BUG: number; + /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */ + const SSL_OP_MSIE_SSLV2_RSA_PADDING: number; + const SSL_OP_NETSCAPE_CA_DN_BUG: number; + const SSL_OP_NETSCAPE_CHALLENGE_BUG: number; + const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; + const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; + /** Instructs OpenSSL to disable support for SSL/TLS compression. */ + const SSL_OP_NO_COMPRESSION: number; + const SSL_OP_NO_QUERY_MTU: number; + /** Instructs OpenSSL to always start a new session when performing renegotiation. */ + const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + const SSL_OP_NO_SSLv2: number; + const SSL_OP_NO_SSLv3: number; + const SSL_OP_NO_TICKET: number; + const SSL_OP_NO_TLSv1: number; + const SSL_OP_NO_TLSv1_1: number; + const SSL_OP_NO_TLSv1_2: number; + const SSL_OP_PKCS1_CHECK_1: number; + const SSL_OP_PKCS1_CHECK_2: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */ + const SSL_OP_SINGLE_DH_USE: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */ + const SSL_OP_SINGLE_ECDH_USE: number; + const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; + const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; + const SSL_OP_TLS_BLOCK_PADDING_BUG: number; + const SSL_OP_TLS_D5_BUG: number; + /** Instructs OpenSSL to disable version rollback attack detection. */ + const SSL_OP_TLS_ROLLBACK_BUG: number; + const ENGINE_METHOD_RSA: number; + const ENGINE_METHOD_DSA: number; + const ENGINE_METHOD_DH: number; + const ENGINE_METHOD_RAND: number; + const ENGINE_METHOD_EC: number; + const ENGINE_METHOD_CIPHERS: number; + const ENGINE_METHOD_DIGESTS: number; + const ENGINE_METHOD_PKEY_METHS: number; + const ENGINE_METHOD_PKEY_ASN1_METHS: number; + const ENGINE_METHOD_ALL: number; + const ENGINE_METHOD_NONE: number; + const DH_CHECK_P_NOT_SAFE_PRIME: number; + const DH_CHECK_P_NOT_PRIME: number; + const DH_UNABLE_TO_CHECK_GENERATOR: number; + const DH_NOT_SUITABLE_GENERATOR: number; + const ALPN_ENABLED: number; + const RSA_PKCS1_PADDING: number; + const RSA_SSLV23_PADDING: number; + const RSA_NO_PADDING: number; + const RSA_PKCS1_OAEP_PADDING: number; + const RSA_X931_PADDING: number; + const RSA_PKCS1_PSS_PADDING: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ + const RSA_PSS_SALTLEN_DIGEST: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ + const RSA_PSS_SALTLEN_MAX_SIGN: number; + /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ + const RSA_PSS_SALTLEN_AUTO: number; + const POINT_CONVERSION_COMPRESSED: number; + const POINT_CONVERSION_UNCOMPRESSED: number; + const POINT_CONVERSION_HYBRID: number; + /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ + const defaultCoreCipherList: string; + /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ + const defaultCipherList: string; + } + interface HashOptions extends stream.TransformOptions { + /** + * For XOF hash functions such as `shake256`, the + * outputLength option can be used to specify the desired output length in bytes. + */ + outputLength?: number | undefined; + } + /** @deprecated since v10.0.0 */ + const fips: boolean; + /** + * Creates and returns a `Hash` object that can be used to generate hash digests + * using the given `algorithm`. Optional `options` argument controls stream + * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option + * can be used to specify the desired output length in bytes. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms`(`openssl list-message-digest-algorithms` for older versions of OpenSSL) will + * display the available digest algorithms. + * + * Example: generating the sha256 sum of a file + * + * ```js + * import { + * createReadStream + * } from 'fs'; + * import { argv } from 'process'; + * const { + * createHash + * } = await import('crypto'); + * + * const filename = argv[2]; + * + * const hash = createHash('sha256'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hash.update(data); + * else { + * console.log(`${hash.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.92 + * @param options `stream.transform` options + */ + function createHash(algorithm: string, options?: HashOptions): Hash; + /** + * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`. + * Optional `options` argument controls stream behavior. + * + * The `algorithm` is dependent on the available algorithms supported by the + * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. + * On recent releases of OpenSSL, `openssl list -digest-algorithms`(`openssl list-message-digest-algorithms` for older versions of OpenSSL) will + * display the available digest algorithms. + * + * The `key` is the HMAC key used to generate the cryptographic HMAC hash. If it is + * a `KeyObject`, its type must be `secret`. + * + * Example: generating the sha256 HMAC of a file + * + * ```js + * import { + * createReadStream + * } from 'fs'; + * import { argv } from 'process'; + * const { + * createHmac + * } = await import('crypto'); + * + * const filename = argv[2]; + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream(filename); + * input.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = input.read(); + * if (data) + * hmac.update(data); + * else { + * console.log(`${hmac.digest('hex')} ${filename}`); + * } + * }); + * ``` + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; + // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + type BinaryToTextEncoding = 'base64' | 'base64url' | 'hex' | 'binary'; + type CharacterEncoding = 'utf8' | 'utf-8' | 'utf16le' | 'latin1'; + type LegacyCharacterEncoding = 'ascii' | 'binary' | 'ucs2' | 'ucs-2'; + type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; + type ECDHKeyFormat = 'compressed' | 'uncompressed' | 'hybrid'; + /** + * The `Hash` class is a utility for creating hash digests of data. It can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed hash digest on the readable side, or + * * Using the `hash.update()` and `hash.digest()` methods to produce the + * computed hash. + * + * The {@link createHash} method is used to create `Hash` instances. `Hash`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hash` objects as streams: + * + * ```js + * const { + * createHash + * } = await import('crypto'); + * + * const hash = createHash('sha256'); + * + * hash.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hash.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * } + * }); + * + * hash.write('some data to hash'); + * hash.end(); + * ``` + * + * Example: Using `Hash` and piped streams: + * + * ```js + * import { createReadStream } from 'fs'; + * import { stdout } from 'process'; + * const { createHash } = await import('crypto'); + * + * const hash = createHash('sha256'); + * + * const input = createReadStream('test.js'); + * input.pipe(hash).setEncoding('hex').pipe(stdout); + * ``` + * + * Example: Using the `hash.update()` and `hash.digest()` methods: + * + * ```js + * const { + * createHash + * } = await import('crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('some data to hash'); + * console.log(hash.digest('hex')); + * // Prints: + * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 + * ``` + * @since v0.1.92 + */ + class Hash extends stream.Transform { + private constructor(); + /** + * Creates a new `Hash` object that contains a deep copy of the internal state + * of the current `Hash` object. + * + * The optional `options` argument controls stream behavior. For XOF hash + * functions such as `'shake256'`, the `outputLength` option can be used to + * specify the desired output length in bytes. + * + * An error is thrown when an attempt is made to copy the `Hash` object after + * its `hash.digest()` method has been called. + * + * ```js + * // Calculate a rolling hash. + * const { + * createHash + * } = await import('crypto'); + * + * const hash = createHash('sha256'); + * + * hash.update('one'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('two'); + * console.log(hash.copy().digest('hex')); + * + * hash.update('three'); + * console.log(hash.copy().digest('hex')); + * + * // Etc. + * ``` + * @since v13.1.0 + * @param options `stream.transform` options + */ + copy(options?: stream.TransformOptions): Hash; + /** + * Updates the hash content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hash; + update(data: string, inputEncoding: Encoding): Hash; + /** + * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method). + * If `encoding` is provided a string will be returned; otherwise + * a `Buffer` is returned. + * + * The `Hash` object can not be used again after `hash.digest()` method has been + * called. Multiple calls will cause an error to be thrown. + * @since v0.1.92 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + /** + * The `Hmac` class is a utility for creating cryptographic HMAC digests. It can + * be used in one of two ways: + * + * * As a `stream` that is both readable and writable, where data is written + * to produce a computed HMAC digest on the readable side, or + * * Using the `hmac.update()` and `hmac.digest()` methods to produce the + * computed HMAC digest. + * + * The {@link createHmac} method is used to create `Hmac` instances. `Hmac`objects are not to be created directly using the `new` keyword. + * + * Example: Using `Hmac` objects as streams: + * + * ```js + * const { + * createHmac + * } = await import('crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.on('readable', () => { + * // Only one element is going to be produced by the + * // hash stream. + * const data = hmac.read(); + * if (data) { + * console.log(data.toString('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * } + * }); + * + * hmac.write('some data to hash'); + * hmac.end(); + * ``` + * + * Example: Using `Hmac` and piped streams: + * + * ```js + * import { createReadStream } from 'fs'; + * import { stdout } from 'process'; + * const { + * createHmac + * } = await import('crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * const input = createReadStream('test.js'); + * input.pipe(hmac).pipe(stdout); + * ``` + * + * Example: Using the `hmac.update()` and `hmac.digest()` methods: + * + * ```js + * const { + * createHmac + * } = await import('crypto'); + * + * const hmac = createHmac('sha256', 'a secret'); + * + * hmac.update('some data to hash'); + * console.log(hmac.digest('hex')); + * // Prints: + * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e + * ``` + * @since v0.1.94 + */ + class Hmac extends stream.Transform { + private constructor(); + /** + * Updates the `Hmac` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Hmac; + update(data: string, inputEncoding: Encoding): Hmac; + /** + * Calculates the HMAC digest of all of the data passed using `hmac.update()`. + * If `encoding` is + * provided a string is returned; otherwise a `Buffer` is returned; + * + * The `Hmac` object can not be used again after `hmac.digest()` has been + * called. Multiple calls to `hmac.digest()` will result in an error being thrown. + * @since v0.1.94 + * @param encoding The `encoding` of the return value. + */ + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + type KeyObjectType = 'secret' | 'public' | 'private'; + interface KeyExportOptions { + type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1'; + format: T; + cipher?: string | undefined; + passphrase?: string | Buffer | undefined; + } + interface JwkKeyExportOptions { + format: 'jwk'; + } + interface JsonWebKey { + crv?: string | undefined; + d?: string | undefined; + dp?: string | undefined; + dq?: string | undefined; + e?: string | undefined; + k?: string | undefined; + kty?: string | undefined; + n?: string | undefined; + p?: string | undefined; + q?: string | undefined; + qi?: string | undefined; + x?: string | undefined; + y?: string | undefined; + [key: string]: unknown; + } + interface AsymmetricKeyDetails { + /** + * Key size in bits (RSA, DSA). + */ + modulusLength?: number | undefined; + /** + * Public exponent (RSA). + */ + publicExponent?: bigint | undefined; + /** + * Name of the message digest (RSA-PSS). + */ + hashAlgorithm?: string | undefined; + /** + * Name of the message digest used by MGF1 (RSA-PSS). + */ + mgf1HashAlgorithm?: string | undefined; + /** + * Minimal salt length in bytes (RSA-PSS). + */ + saltLength?: number | undefined; + /** + * Size of q in bits (DSA). + */ + divisorLength?: number | undefined; + /** + * Name of the curve (EC). + */ + namedCurve?: string | undefined; + } + interface JwkKeyExportOptions { + format: 'jwk'; + } + /** + * Node.js uses a `KeyObject` class to represent a symmetric or asymmetric key, + * and each kind of key exposes different functions. The {@link createSecretKey}, {@link createPublicKey} and {@link createPrivateKey} methods are used to create `KeyObject`instances. `KeyObject` + * objects are not to be created directly using the `new`keyword. + * + * Most applications should consider using the new `KeyObject` API instead of + * passing keys as strings or `Buffer`s due to improved security features. + * + * `KeyObject` instances can be passed to other threads via `postMessage()`. + * The receiver obtains a cloned `KeyObject`, and the `KeyObject` does not need to + * be listed in the `transferList` argument. + * @since v11.6.0 + */ + class KeyObject { + private constructor(); + /** + * Example: Converting a `CryptoKey` instance to a `KeyObject`: + * + * ```js + * const { webcrypto, KeyObject } = await import('crypto'); + * const { subtle } = webcrypto; + * + * const key = await subtle.generateKey({ + * name: 'HMAC', + * hash: 'SHA-256', + * length: 256 + * }, true, ['sign', 'verify']); + * + * const keyObject = KeyObject.from(key); + * console.log(keyObject.symmetricKeySize); + * // Prints: 32 (symmetric key size in bytes) + * ``` + * @since v15.0.0 + */ + static from(key: webcrypto.CryptoKey): KeyObject; + /** + * For asymmetric keys, this property represents the type of the key. Supported key + * types are: + * + * * `'rsa'` (OID 1.2.840.113549.1.1.1) + * * `'rsa-pss'` (OID 1.2.840.113549.1.1.10) + * * `'dsa'` (OID 1.2.840.10040.4.1) + * * `'ec'` (OID 1.2.840.10045.2.1) + * * `'x25519'` (OID 1.3.101.110) + * * `'x448'` (OID 1.3.101.111) + * * `'ed25519'` (OID 1.3.101.112) + * * `'ed448'` (OID 1.3.101.113) + * * `'dh'` (OID 1.2.840.113549.1.3.1) + * + * This property is `undefined` for unrecognized `KeyObject` types and symmetric + * keys. + * @since v11.6.0 + */ + asymmetricKeyType?: KeyType | undefined; + /** + * For asymmetric keys, this property represents the size of the embedded key in + * bytes. This property is `undefined` for symmetric keys. + */ + asymmetricKeySize?: number | undefined; + /** + * This property exists only on asymmetric keys. Depending on the type of the key, + * this object contains information about the key. None of the information obtained + * through this property can be used to uniquely identify a key or to compromise + * the security of the key. + * + * For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence, + * the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be + * set. + * + * Other key details might be exposed via this API using additional attributes. + * @since v15.7.0 + */ + asymmetricKeyDetails?: AsymmetricKeyDetails | undefined; + /** + * For symmetric keys, the following encoding options can be used: + * + * For public keys, the following encoding options can be used: + * + * For private keys, the following encoding options can be used: + * + * The result type depends on the selected encoding format, when PEM the + * result is a string, when DER it will be a buffer containing the data + * encoded as DER, when [JWK](https://tools.ietf.org/html/rfc7517) it will be an object. + * + * When [JWK](https://tools.ietf.org/html/rfc7517) encoding format was selected, all other encoding options are + * ignored. + * + * PKCS#1, SEC1, and PKCS#8 type keys can be encrypted by using a combination of + * the `cipher` and `format` options. The PKCS#8 `type` can be used with any`format` to encrypt any key algorithm (RSA, EC, or DH) by specifying a`cipher`. PKCS#1 and SEC1 can only be + * encrypted by specifying a `cipher`when the PEM `format` is used. For maximum compatibility, use PKCS#8 for + * encrypted private keys. Since PKCS#8 defines its own + * encryption mechanism, PEM-level encryption is not supported when encrypting + * a PKCS#8 key. See [RFC 5208](https://www.rfc-editor.org/rfc/rfc5208.txt) for PKCS#8 encryption and [RFC 1421](https://www.rfc-editor.org/rfc/rfc1421.txt) for + * PKCS#1 and SEC1 encryption. + * @since v11.6.0 + */ + export(options: KeyExportOptions<'pem'>): string | Buffer; + export(options?: KeyExportOptions<'der'>): Buffer; + export(options?: JwkKeyExportOptions): JsonWebKey; + /** + * For secret keys, this property represents the size of the key in bytes. This + * property is `undefined` for asymmetric keys. + * @since v11.6.0 + */ + symmetricKeySize?: number | undefined; + /** + * Depending on the type of this `KeyObject`, this property is either`'secret'` for secret (symmetric) keys, `'public'` for public (asymmetric) keys + * or `'private'` for private (asymmetric) keys. + * @since v11.6.0 + */ + type: KeyObjectType; + } + type CipherCCMTypes = 'aes-128-ccm' | 'aes-192-ccm' | 'aes-256-ccm' | 'chacha20-poly1305'; + type CipherGCMTypes = 'aes-128-gcm' | 'aes-192-gcm' | 'aes-256-gcm'; + type BinaryLike = string | NodeJS.ArrayBufferView; + type CipherKey = BinaryLike | KeyObject; + interface CipherCCMOptions extends stream.TransformOptions { + authTagLength: number; + } + interface CipherGCMOptions extends stream.TransformOptions { + authTagLength?: number | undefined; + } + /** + * Creates and returns a `Cipher` object that uses the given `algorithm` and`password`. + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode is used (e.g. `'aes-128-ccm'`). In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms`(`openssl list-cipher-algorithms` for older versions of OpenSSL) will + * display the available cipher algorithms. + * + * The `password` is used to derive the cipher key and initialization vector (IV). + * The value must be either a `'latin1'` encoded string, a `Buffer`, a`TypedArray`, or a `DataView`. + * + * The implementation of `crypto.createCipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man1.1.0/crypto/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man1.1.0/crypto/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createCipheriv} to create the `Cipher` object. Users should not use ciphers with counter mode + * (e.g. CTR, GCM, or CCM) in `crypto.createCipher()`. A warning is emitted when + * they are used in order to avoid the risk of IV reuse that causes + * vulnerabilities. For the case when IV is reused in GCM, see [Nonce-Disrespecting Adversaries](https://github.com/nonce-disrespect/nonce-disrespect) for details. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createCipheriv} instead. + * @param options `stream.transform` options + */ + function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher; + /** + * Creates and returns a `Cipher` object, with the given `algorithm`, `key` and + * initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode is used (e.g. `'aes-128-ccm'`). In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication + * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms`(`openssl list-cipher-algorithms` for older versions of OpenSSL) will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a + * given IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createCipheriv(algorithm: CipherCCMTypes, key: CipherKey, iv: BinaryLike | null, options: CipherCCMOptions): CipherCCM; + function createCipheriv(algorithm: CipherGCMTypes, key: CipherKey, iv: BinaryLike | null, options?: CipherGCMOptions): CipherGCM; + function createCipheriv(algorithm: string, key: CipherKey, iv: BinaryLike | null, options?: stream.TransformOptions): Cipher; + /** + * Instances of the `Cipher` class are used to encrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain unencrypted + * data is written to produce encrypted data on the readable side, or + * * Using the `cipher.update()` and `cipher.final()` methods to produce + * the encrypted data. + * + * The {@link createCipher} or {@link createCipheriv} methods are + * used to create `Cipher` instances. `Cipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Cipher` objects as streams: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * // Once we have the key and iv, we can create and use the cipher... + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = ''; + * cipher.setEncoding('hex'); + * + * cipher.on('data', (chunk) => encrypted += chunk); + * cipher.on('end', () => console.log(encrypted)); + * + * cipher.write('some clear text data'); + * cipher.end(); + * }); + * }); + * ``` + * + * Example: Using `Cipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'fs'; + * + * import { + * pipeline + * } from 'stream'; + * + * const { + * scrypt, + * randomFill, + * createCipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.js'); + * const output = createWriteStream('test.enc'); + * + * pipeline(input, cipher, output, (err) => { + * if (err) throw err; + * }); + * }); + * }); + * ``` + * + * Example: Using the `cipher.update()` and `cipher.final()` methods: + * + * ```js + * const { + * scrypt, + * randomFill, + * createCipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * + * // First, we'll generate the key. The key length is dependent on the algorithm. + * // In this case for aes192, it is 24 bytes (192 bits). + * scrypt(password, 'salt', 24, (err, key) => { + * if (err) throw err; + * // Then, we'll generate a random initialization vector + * randomFill(new Uint8Array(16), (err, iv) => { + * if (err) throw err; + * + * const cipher = createCipheriv(algorithm, key, iv); + * + * let encrypted = cipher.update('some clear text data', 'utf8', 'hex'); + * encrypted += cipher.final('hex'); + * console.log(encrypted); + * }); + * }); + * ``` + * @since v0.1.94 + */ + class Cipher extends stream.Transform { + private constructor(); + /** + * Updates the cipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`, `TypedArray`, or`DataView`. If `data` is a `Buffer`, + * `TypedArray`, or `DataView`, then`inputEncoding` is ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `cipher.update()` method can be called multiple times with new data until `cipher.final()` is called. Calling `cipher.update()` after `cipher.final()` will result in an error being + * thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the data. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: BinaryLike): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `cipher.final()` method has been called, the `Cipher` object can no + * longer be used to encrypt data. Attempts to call `cipher.final()` more than + * once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining enciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When using block encryption algorithms, the `Cipher` class will automatically + * add padding to the input data to the appropriate block size. To disable the + * default padding call `cipher.setAutoPadding(false)`. + * + * When `autoPadding` is `false`, the length of the entire input data must be a + * multiple of the cipher's block size or `cipher.final()` will throw an error. + * Disabling automatic padding is useful for non-standard padding, for instance + * using `0x0` instead of PKCS padding. + * + * The `cipher.setAutoPadding()` method must be called before `cipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(autoPadding?: boolean): this; + } + interface CipherCCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + } + ): this; + getAuthTag(): Buffer; + } + interface CipherGCM extends Cipher { + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + } + ): this; + getAuthTag(): Buffer; + } + /** + * Creates and returns a `Decipher` object that uses the given `algorithm` and`password` (key). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode is used (e.g. `'aes-128-ccm'`). In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. + * + * The implementation of `crypto.createDecipher()` derives keys using the OpenSSL + * function [`EVP_BytesToKey`](https://www.openssl.org/docs/man1.1.0/crypto/EVP_BytesToKey.html) with the digest algorithm set to MD5, one + * iteration, and no salt. The lack of salt allows dictionary attacks as the same + * password always creates the same key. The low iteration count and + * non-cryptographically secure hash algorithm allow passwords to be tested very + * rapidly. + * + * In line with OpenSSL's recommendation to use a more modern algorithm instead of [`EVP_BytesToKey`](https://www.openssl.org/docs/man1.1.0/crypto/EVP_BytesToKey.html) it is recommended that + * developers derive a key and IV on + * their own using {@link scrypt} and to use {@link createDecipheriv} to create the `Decipher` object. + * @since v0.1.94 + * @deprecated Since v10.0.0 - Use {@link createDecipheriv} instead. + * @param options `stream.transform` options + */ + function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher; + /** + * Creates and returns a `Decipher` object that uses the given `algorithm`, `key`and initialization vector (`iv`). + * + * The `options` argument controls stream behavior and is optional except when a + * cipher in CCM or OCB mode is used (e.g. `'aes-128-ccm'`). In that case, the`authTagLength` option is required and specifies the length of the + * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to restrict accepted authentication tags + * to those with the specified length. + * + * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On + * recent OpenSSL releases, `openssl list -cipher-algorithms`(`openssl list-cipher-algorithms` for older versions of OpenSSL) will + * display the available cipher algorithms. + * + * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded + * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be + * a `KeyObject` of type `secret`. If the cipher does not need + * an initialization vector, `iv` may be `null`. + * + * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * Initialization vectors should be unpredictable and unique; ideally, they will be + * cryptographically random. They do not have to be secret: IVs are typically just + * added to ciphertext messages unencrypted. It may sound contradictory that + * something has to be unpredictable and unique, but does not have to be secret; + * remember that an attacker must not be able to predict ahead of time what a given + * IV will be. + * @since v0.1.94 + * @param options `stream.transform` options + */ + function createDecipheriv(algorithm: CipherCCMTypes, key: CipherKey, iv: BinaryLike | null, options: CipherCCMOptions): DecipherCCM; + function createDecipheriv(algorithm: CipherGCMTypes, key: CipherKey, iv: BinaryLike | null, options?: CipherGCMOptions): DecipherGCM; + function createDecipheriv(algorithm: string, key: CipherKey, iv: BinaryLike | null, options?: stream.TransformOptions): Decipher; + /** + * Instances of the `Decipher` class are used to decrypt data. The class can be + * used in one of two ways: + * + * * As a `stream` that is both readable and writable, where plain encrypted + * data is written to produce unencrypted data on the readable side, or + * * Using the `decipher.update()` and `decipher.final()` methods to + * produce the unencrypted data. + * + * The {@link createDecipher} or {@link createDecipheriv} methods are + * used to create `Decipher` instances. `Decipher` objects are not to be created + * directly using the `new` keyword. + * + * Example: Using `Decipher` objects as streams: + * + * ```js + * import { Buffer } from 'buffer'; + * const { + * scryptSync, + * createDecipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Key length is dependent on the algorithm. In this case for aes192, it is + * // 24 bytes (192 bits). + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * let decrypted = ''; + * decipher.on('readable', () => { + * while (null !== (chunk = decipher.read())) { + * decrypted += chunk.toString('utf8'); + * } + * }); + * decipher.on('end', () => { + * console.log(decrypted); + * // Prints: some clear text data + * }); + * + * // Encrypted with same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * decipher.write(encrypted, 'hex'); + * decipher.end(); + * ``` + * + * Example: Using `Decipher` and piped streams: + * + * ```js + * import { + * createReadStream, + * createWriteStream, + * } from 'fs'; + * import { Buffer } from 'buffer'; + * const { + * scryptSync, + * createDecipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * const input = createReadStream('test.enc'); + * const output = createWriteStream('test.js'); + * + * input.pipe(decipher).pipe(output); + * ``` + * + * Example: Using the `decipher.update()` and `decipher.final()` methods: + * + * ```js + * import { Buffer } from 'buffer'; + * const { + * scryptSync, + * createDecipheriv + * } = await import('crypto'); + * + * const algorithm = 'aes-192-cbc'; + * const password = 'Password used to generate key'; + * // Use the async `crypto.scrypt()` instead. + * const key = scryptSync(password, 'salt', 24); + * // The IV is usually passed along with the ciphertext. + * const iv = Buffer.alloc(16, 0); // Initialization vector. + * + * const decipher = createDecipheriv(algorithm, key, iv); + * + * // Encrypted using same algorithm, key and iv. + * const encrypted = + * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; + * let decrypted = decipher.update(encrypted, 'hex', 'utf8'); + * decrypted += decipher.final('utf8'); + * console.log(decrypted); + * // Prints: some clear text data + * ``` + * @since v0.1.94 + */ + class Decipher extends stream.Transform { + private constructor(); + /** + * Updates the decipher with `data`. If the `inputEncoding` argument is given, + * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`. If `data` is a `Buffer` then `inputEncoding` is + * ignored. + * + * The `outputEncoding` specifies the output format of the enciphered + * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. + * + * The `decipher.update()` method can be called multiple times with new data until `decipher.final()` is called. Calling `decipher.update()` after `decipher.final()` will result in an error + * being thrown. + * @since v0.1.94 + * @param inputEncoding The `encoding` of the `data` string. + * @param outputEncoding The `encoding` of the return value. + */ + update(data: NodeJS.ArrayBufferView): Buffer; + update(data: string, inputEncoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; + update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; + /** + * Once the `decipher.final()` method has been called, the `Decipher` object can + * no longer be used to decrypt data. Attempts to call `decipher.final()` more + * than once will result in an error being thrown. + * @since v0.1.94 + * @param outputEncoding The `encoding` of the return value. + * @return Any remaining deciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. + */ + final(): Buffer; + final(outputEncoding: BufferEncoding): string; + /** + * When data has been encrypted without standard block padding, calling`decipher.setAutoPadding(false)` will disable automatic padding to prevent `decipher.final()` from checking for and + * removing padding. + * + * Turning auto padding off will only work if the input data's length is a + * multiple of the ciphers block size. + * + * The `decipher.setAutoPadding()` method must be called before `decipher.final()`. + * @since v0.7.1 + * @param [autoPadding=true] + * @return for method chaining. + */ + setAutoPadding(auto_padding?: boolean): this; + } + interface DecipherCCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options: { + plaintextLength: number; + } + ): this; + } + interface DecipherGCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD( + buffer: NodeJS.ArrayBufferView, + options?: { + plaintextLength: number; + } + ): this; + } + interface PrivateKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: 'pkcs1' | 'pkcs8' | 'sec1' | undefined; + passphrase?: string | Buffer | undefined; + } + interface PublicKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: 'pkcs1' | 'spki' | undefined; + } + /** + * Asynchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKey + * } = await import('crypto'); + * + * generateKey('hmac', { length: 64 }, (err, key) => { + * if (err) throw err; + * console.log(key.export().toString('hex')); // 46e..........620 + * }); + * ``` + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKey( + type: 'hmac' | 'aes', + options: { + length: number; + }, + callback: (err: Error | null, key: KeyObject) => void + ): void; + /** + * Synchronously generates a new random secret key of the given `length`. The`type` will determine which validations will be performed on the `length`. + * + * ```js + * const { + * generateKeySync + * } = await import('crypto'); + * + * const key = generateKeySync('hmac', { length: 64 }); + * console.log(key.export().toString('hex')); // e89..........41e + * ``` + * @since v15.0.0 + * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. + */ + function generateKeySync( + type: 'hmac' | 'aes', + options: { + length: number; + } + ): KeyObject; + interface JsonWebKeyInput { + key: JsonWebKey; + format: 'jwk'; + } + /** + * Creates and returns a new key object containing a private key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; otherwise, `key`must be an object with the properties described above. + * + * If the private key is encrypted, a `passphrase` must be specified. The length + * of the passphrase is limited to 1024 bytes. + * @since v11.6.0 + */ + function createPrivateKey(key: PrivateKeyInput | string | Buffer | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a public key. If `key` is a + * string or `Buffer`, `format` is assumed to be `'pem'`; if `key` is a `KeyObject`with type `'private'`, the public key is derived from the given private key; + * otherwise, `key` must be an object with the properties described above. + * + * If the format is `'pem'`, the `'key'` may also be an X.509 certificate. + * + * Because public keys can be derived from private keys, a private key may be + * passed instead of a public key. In that case, this function behaves as if {@link createPrivateKey} had been called, except that the type of the + * returned `KeyObject` will be `'public'` and that the private key cannot be + * extracted from the returned `KeyObject`. Similarly, if a `KeyObject` with type`'private'` is given, a new `KeyObject` with type `'public'` will be returned + * and it will be impossible to extract the private key from the returned object. + * @since v11.6.0 + */ + function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject | JsonWebKeyInput): KeyObject; + /** + * Creates and returns a new key object containing a secret key for symmetric + * encryption or `Hmac`. + * @since v11.6.0 + * @param encoding The string encoding when `key` is a string. + */ + function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; + function createSecretKey(key: string, encoding: BufferEncoding): KeyObject; + /** + * Creates and returns a `Sign` object that uses the given `algorithm`. Use {@link getHashes} to obtain the names of the available digest algorithms. + * Optional `options` argument controls the `stream.Writable` behavior. + * + * In some cases, a `Sign` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createSign(algorithm: string, options?: stream.WritableOptions): Sign; + type DSAEncoding = 'der' | 'ieee-p1363'; + interface SigningOptions { + /** + * @See crypto.constants.RSA_PKCS1_PADDING + */ + padding?: number | undefined; + saltLength?: number | undefined; + dsaEncoding?: DSAEncoding | undefined; + } + interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} + interface SignKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} + interface VerifyKeyObjectInput extends SigningOptions { + key: KeyObject; + } + type KeyLike = string | Buffer | KeyObject; + /** + * The `Sign` class is a utility for generating signatures. It can be used in one + * of two ways: + * + * * As a writable `stream`, where data to be signed is written and the `sign.sign()` method is used to generate and return the signature, or + * * Using the `sign.update()` and `sign.sign()` methods to produce the + * signature. + * + * The {@link createSign} method is used to create `Sign` instances. The + * argument is the string name of the hash function to use. `Sign` objects are not + * to be created directly using the `new` keyword. + * + * Example: Using `Sign` and `Verify` objects as streams: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify + * } = await import('crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('ec', { + * namedCurve: 'sect239k1' + * }); + * + * const sign = createSign('SHA256'); + * sign.write('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey, 'hex'); + * + * const verify = createVerify('SHA256'); + * verify.write('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature, 'hex')); + * // Prints: true + * ``` + * + * Example: Using the `sign.update()` and `verify.update()` methods: + * + * ```js + * const { + * generateKeyPairSync, + * createSign, + * createVerify + * } = await import('crypto'); + * + * const { privateKey, publicKey } = generateKeyPairSync('rsa', { + * modulusLength: 2048, + * }); + * + * const sign = createSign('SHA256'); + * sign.update('some data to sign'); + * sign.end(); + * const signature = sign.sign(privateKey); + * + * const verify = createVerify('SHA256'); + * verify.update('some data to sign'); + * verify.end(); + * console.log(verify.verify(publicKey, signature)); + * // Prints: true + * ``` + * @since v0.1.92 + */ + class Sign extends stream.Writable { + private constructor(); + /** + * Updates the `Sign` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `encoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): this; + update(data: string, inputEncoding: Encoding): this; + /** + * Calculates the signature on all the data passed through using either `sign.update()` or `sign.write()`. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the following additional properties can be passed: + * + * If `outputEncoding` is provided a string is returned; otherwise a `Buffer` is returned. + * + * The `Sign` object can not be again used after `sign.sign()` method has been + * called. Multiple calls to `sign.sign()` will result in an error being thrown. + * @since v0.1.92 + */ + sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, outputFormat: BinaryToTextEncoding): string; + } + /** + * Creates and returns a `Verify` object that uses the given algorithm. + * Use {@link getHashes} to obtain an array of names of the available + * signing algorithms. Optional `options` argument controls the`stream.Writable` behavior. + * + * In some cases, a `Verify` instance can be created using the name of a signature + * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use + * the corresponding digest algorithm. This does not work for all signature + * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest + * algorithm names. + * @since v0.1.92 + * @param options `stream.Writable` options + */ + function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; + /** + * The `Verify` class is a utility for verifying signatures. It can be used in one + * of two ways: + * + * * As a writable `stream` where written data is used to validate against the + * supplied signature, or + * * Using the `verify.update()` and `verify.verify()` methods to verify + * the signature. + * + * The {@link createVerify} method is used to create `Verify` instances.`Verify` objects are not to be created directly using the `new` keyword. + * + * See `Sign` for examples. + * @since v0.1.92 + */ + class Verify extends stream.Writable { + private constructor(); + /** + * Updates the `Verify` content with the given `data`, the encoding of which + * is given in `inputEncoding`. + * If `inputEncoding` is not provided, and the `data` is a string, an + * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. + * + * This can be called many times with new data as it is streamed. + * @since v0.1.92 + * @param inputEncoding The `encoding` of the `data` string. + */ + update(data: BinaryLike): Verify; + update(data: string, inputEncoding: Encoding): Verify; + /** + * Verifies the provided data using the given `object` and `signature`. + * + * If `object` is not a `KeyObject`, this function behaves as if`object` had been passed to {@link createPublicKey}. If it is an + * object, the following additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the data, in + * the `signatureEncoding`. + * If a `signatureEncoding` is specified, the `signature` is expected to be a + * string; otherwise `signature` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * The `verify` object can not be used again after `verify.verify()` has been + * called. Multiple calls to `verify.verify()` will result in an error being + * thrown. + * + * Because public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.1.92 + */ + verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView): boolean; + verify(object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: string, signature_format?: BinaryToTextEncoding): boolean; + } + /** + * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an + * optional specific `generator`. + * + * The `generator` argument can be a number, string, or `Buffer`. If`generator` is not specified, the value `2` is used. + * + * If `primeEncoding` is specified, `prime` is expected to be a string; otherwise + * a `Buffer`, `TypedArray`, or `DataView` is expected. + * + * If `generatorEncoding` is specified, `generator` is expected to be a string; + * otherwise a number, `Buffer`, `TypedArray`, or `DataView` is expected. + * @since v0.11.12 + * @param primeEncoding The `encoding` of the `prime` string. + * @param [generator=2] + * @param generatorEncoding The `encoding` of the `generator` string. + */ + function createDiffieHellman(primeLength: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: string, primeEncoding: BinaryToTextEncoding): DiffieHellman; + function createDiffieHellman(prime: string, primeEncoding: BinaryToTextEncoding, generator: number | NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: string, primeEncoding: BinaryToTextEncoding, generator: string, generatorEncoding: BinaryToTextEncoding): DiffieHellman; + /** + * The `DiffieHellman` class is a utility for creating Diffie-Hellman key + * exchanges. + * + * Instances of the `DiffieHellman` class can be created using the {@link createDiffieHellman} function. + * + * ```js + * import assert from 'assert'; + * + * const { + * createDiffieHellman + * } = await import('crypto'); + * + * // Generate Alice's keys... + * const alice = createDiffieHellman(2048); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createDiffieHellman(alice.getPrime(), alice.getGenerator()); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * // OK + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * ``` + * @since v0.5.0 + */ + class DiffieHellman { + private constructor(); + /** + * Generates private and public Diffie-Hellman key values, and returns + * the public key in the specified `encoding`. This key should be + * transferred to the other party. + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using the specified `inputEncoding`, and secret is + * encoded using specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `outputEncoding` is given a string is returned; otherwise, a `Buffer` is returned. + * @since v0.5.0 + * @param inputEncoding The `encoding` of an `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): Buffer; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman prime in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrime(): Buffer; + getPrime(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman generator in the specified `encoding`. + * If `encoding` is provided a string is + * returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getGenerator(): Buffer; + getGenerator(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman public key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding): string; + /** + * Returns the Diffie-Hellman private key in the specified `encoding`. + * If `encoding` is provided a + * string is returned; otherwise a `Buffer` is returned. + * @since v0.5.0 + * @param encoding The `encoding` of the return value. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * Sets the Diffie-Hellman public key. If the `encoding` argument is provided,`publicKey` is expected + * to be a string. If no `encoding` is provided, `publicKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * @since v0.5.0 + * @param encoding The `encoding` of the `publicKey` string. + */ + setPublicKey(publicKey: NodeJS.ArrayBufferView): void; + setPublicKey(publicKey: string, encoding: BufferEncoding): void; + /** + * Sets the Diffie-Hellman private key. If the `encoding` argument is provided,`privateKey` is expected + * to be a string. If no `encoding` is provided, `privateKey` is expected + * to be a `Buffer`, `TypedArray`, or `DataView`. + * @since v0.5.0 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BufferEncoding): void; + /** + * A bit field containing any warnings and/or errors resulting from a check + * performed during initialization of the `DiffieHellman` object. + * + * The following values are valid for this property (as defined in `constants`module): + * + * * `DH_CHECK_P_NOT_SAFE_PRIME` + * * `DH_CHECK_P_NOT_PRIME` + * * `DH_UNABLE_TO_CHECK_GENERATOR` + * * `DH_NOT_SUITABLE_GENERATOR` + * @since v0.11.12 + */ + verifyError: number; + } + /** + * Creates a predefined `DiffieHellmanGroup` key exchange object. The + * supported groups are: `'modp1'`, `'modp2'`, `'modp5'` (defined in [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt), but see `Caveats`) and `'modp14'`, `'modp15'`,`'modp16'`, `'modp17'`, + * `'modp18'` (defined in [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt)). The + * returned object mimics the interface of objects created by {@link createDiffieHellman}, but will not allow changing + * the keys (with `diffieHellman.setPublicKey()`, for example). The + * advantage of using this method is that the parties do not have to + * generate nor exchange a group modulus beforehand, saving both processor + * and communication time. + * + * Example (obtaining a shared secret): + * + * ```js + * const { + * getDiffieHellman + * } = await import('crypto'); + * const alice = getDiffieHellman('modp14'); + * const bob = getDiffieHellman('modp14'); + * + * alice.generateKeys(); + * bob.generateKeys(); + * + * const aliceSecret = alice.computeSecret(bob.getPublicKey(), null, 'hex'); + * const bobSecret = bob.computeSecret(alice.getPublicKey(), null, 'hex'); + * + * // aliceSecret and bobSecret should be the same + * console.log(aliceSecret === bobSecret); + * ``` + * @since v0.7.5 + */ + function getDiffieHellman(groupName: string): DiffieHellman; + /** + * Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an error occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. By default, the successfully generated`derivedKey` will be passed to the callback as a `Buffer`. An error will be + * thrown if any of the input arguments specify invalid values or types. + * + * If `digest` is `null`, `'sha1'` will be used. This behavior is deprecated, + * please specify a `digest` explicitly. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2 + * } = await import('crypto'); + * + * pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * ``` + * + * The `crypto.DEFAULT_ENCODING` property can be used to change the way the`derivedKey` is passed to the callback. This property, however, has been + * deprecated and use should be avoided. + * + * ```js + * import crypto from 'crypto'; + * crypto.DEFAULT_ENCODING = 'hex'; + * crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey); // '3745e48...aa39b34' + * }); + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * @since v0.5.5 + */ + function pbkdf2(password: BinaryLike, salt: BinaryLike, iterations: number, keylen: number, digest: string, callback: (err: Error | null, derivedKey: Buffer) => void): void; + /** + * Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2) + * implementation. A selected HMAC digest algorithm specified by `digest` is + * applied to derive a key of the requested byte length (`keylen`) from the`password`, `salt` and `iterations`. + * + * If an error occurs an `Error` will be thrown, otherwise the derived key will be + * returned as a `Buffer`. + * + * If `digest` is `null`, `'sha1'` will be used. This behavior is deprecated, + * please specify a `digest` explicitly. + * + * The `iterations` argument must be a number set as high as possible. The + * higher the number of iterations, the more secure the derived key will be, + * but will take a longer amount of time to complete. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * ```js + * const { + * pbkdf2Sync + * } = await import('crypto'); + * + * const key = pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512'); + * console.log(key.toString('hex')); // '3745e48...08d59ae' + * ``` + * + * The `crypto.DEFAULT_ENCODING` property may be used to change the way the`derivedKey` is returned. This property, however, is deprecated and use + * should be avoided. + * + * ```js + * import crypto from 'crypto'; + * crypto.DEFAULT_ENCODING = 'hex'; + * const key = crypto.pbkdf2Sync('secret', 'salt', 100000, 512, 'sha512'); + * console.log(key); // '3745e48...aa39b34' + * ``` + * + * An array of supported digest functions can be retrieved using {@link getHashes}. + * @since v0.9.3 + */ + function pbkdf2Sync(password: BinaryLike, salt: BinaryLike, iterations: number, keylen: number, digest: string): Buffer; + /** + * Generates cryptographically strong pseudorandom data. The `size` argument + * is a number indicating the number of bytes to generate. + * + * If a `callback` function is provided, the bytes are generated asynchronously + * and the `callback` function is invoked with two arguments: `err` and `buf`. + * If an error occurs, `err` will be an `Error` object; otherwise it is `null`. The`buf` argument is a `Buffer` containing the generated bytes. + * + * ```js + * // Asynchronous + * const { + * randomBytes + * } = await import('crypto'); + * + * randomBytes(256, (err, buf) => { + * if (err) throw err; + * console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`); + * }); + * ``` + * + * If the `callback` function is not provided, the random bytes are generated + * synchronously and returned as a `Buffer`. An error will be thrown if + * there is a problem generating the bytes. + * + * ```js + * // Synchronous + * const { + * randomBytes + * } = await import('crypto'); + * + * const buf = randomBytes(256); + * console.log( + * `${buf.length} bytes of random data: ${buf.toString('hex')}`); + * ``` + * + * The `crypto.randomBytes()` method will not complete until there is + * sufficient entropy available. + * This should normally never take longer than a few milliseconds. The only time + * when generating the random bytes may conceivably block for a longer period of + * time is right after boot, when the whole system is still low on entropy. + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomBytes()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomBytes` requests when doing so as part of fulfilling a client + * request. + * @since v0.5.8 + * @param size The number of bytes to generate. The `size` must not be larger than `2**31 - 1`. + * @return if the `callback` function is not provided. + */ + function randomBytes(size: number): Buffer; + function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + function pseudoRandomBytes(size: number): Buffer; + function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + /** + * Return a random integer `n` such that `min <= n < max`. This + * implementation avoids [modulo bias](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias). + * + * The range (`max - min`) must be less than 248. `min` and `max` must + * be [safe integers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger). + * + * If the `callback` function is not provided, the random integer is + * generated synchronously. + * + * ```js + * // Asynchronous + * const { + * randomInt + * } = await import('crypto'); + * + * randomInt(3, (err, n) => { + * if (err) throw err; + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * }); + * ``` + * + * ```js + * // Synchronous + * const { + * randomInt + * } = await import('crypto'); + * + * const n = randomInt(3); + * console.log(`Random number chosen from (0, 1, 2): ${n}`); + * ``` + * + * ```js + * // With `min` argument + * const { + * randomInt + * } = await import('crypto'); + * + * const n = randomInt(1, 7); + * console.log(`The dice rolled: ${n}`); + * ``` + * @since v14.10.0, v12.19.0 + * @param [min=0] Start of random range (inclusive). + * @param max End of random range (exclusive). + * @param callback `function(err, n) {}`. + */ + function randomInt(max: number): number; + function randomInt(min: number, max: number): number; + function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; + function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; + /** + * Synchronous version of {@link randomFill}. + * + * ```js + * import { Buffer } from 'buffer'; + * const { randomFillSync } = await import('crypto'); + * + * const buf = Buffer.alloc(10); + * console.log(randomFillSync(buf).toString('hex')); + * + * randomFillSync(buf, 5); + * console.log(buf.toString('hex')); + * + * // The above is equivalent to the following: + * randomFillSync(buf, 5, 5); + * console.log(buf.toString('hex')); + * ``` + * + * Any `ArrayBuffer`, `TypedArray` or `DataView` instance may be passed as`buffer`. + * + * ```js + * import { Buffer } from 'buffer'; + * const { randomFillSync } = await import('crypto'); + * + * const a = new Uint32Array(10); + * console.log(Buffer.from(randomFillSync(a).buffer, + * a.byteOffset, a.byteLength).toString('hex')); + * + * const b = new DataView(new ArrayBuffer(10)); + * console.log(Buffer.from(randomFillSync(b).buffer, + * b.byteOffset, b.byteLength).toString('hex')); + * + * const c = new ArrayBuffer(10); + * console.log(Buffer.from(randomFillSync(c)).toString('hex')); + * ``` + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @return The object passed as `buffer` argument. + */ + function randomFillSync(buffer: T, offset?: number, size?: number): T; + /** + * This function is similar to {@link randomBytes} but requires the first + * argument to be a `Buffer` that will be filled. It also + * requires that a callback is passed in. + * + * If the `callback` function is not provided, an error will be thrown. + * + * ```js + * import { Buffer } from 'buffer'; + * const { randomFill } = await import('crypto'); + * + * const buf = Buffer.alloc(10); + * randomFill(buf, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * randomFill(buf, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * + * // The above is equivalent to the following: + * randomFill(buf, 5, 5, (err, buf) => { + * if (err) throw err; + * console.log(buf.toString('hex')); + * }); + * ``` + * + * Any `ArrayBuffer`, `TypedArray`, or `DataView` instance may be passed as`buffer`. + * + * While this includes instances of `Float32Array` and `Float64Array`, this + * function should not be used to generate random floating-point numbers. The + * result may contain `+Infinity`, `-Infinity`, and `NaN`, and even if the array + * contains finite numbers only, they are not drawn from a uniform random + * distribution and have no meaningful lower or upper bounds. + * + * ```js + * import { Buffer } from 'buffer'; + * const { randomFill } = await import('crypto'); + * + * const a = new Uint32Array(10); + * randomFill(a, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const b = new DataView(new ArrayBuffer(10)); + * randomFill(b, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) + * .toString('hex')); + * }); + * + * const c = new ArrayBuffer(10); + * randomFill(c, (err, buf) => { + * if (err) throw err; + * console.log(Buffer.from(buf).toString('hex')); + * }); + * ``` + * + * This API uses libuv's threadpool, which can have surprising and + * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. + * + * The asynchronous version of `crypto.randomFill()` is carried out in a single + * threadpool request. To minimize threadpool task length variation, partition + * large `randomFill` requests when doing so as part of fulfilling a client + * request. + * @since v7.10.0, v6.13.0 + * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. + * @param [offset=0] + * @param [size=buffer.length - offset] + * @param callback `function(err, buf) {}`. + */ + function randomFill(buffer: T, callback: (err: Error | null, buf: T) => void): void; + function randomFill(buffer: T, offset: number, callback: (err: Error | null, buf: T) => void): void; + function randomFill(buffer: T, offset: number, size: number, callback: (err: Error | null, buf: T) => void): void; + interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; + } + /** + * Provides an asynchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * The `callback` function is called with two arguments: `err` and `derivedKey`.`err` is an exception object when key derivation fails, otherwise `err` is`null`. `derivedKey` is passed to the + * callback as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scrypt + * } = await import('crypto'); + * + * // Using the factory defaults. + * scrypt('password', 'salt', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' + * }); + * // Using a custom N parameter. Must be a power of two. + * scrypt('password', 'salt', 64, { N: 1024 }, (err, derivedKey) => { + * if (err) throw err; + * console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' + * }); + * ``` + * @since v10.5.0 + */ + function scrypt(password: BinaryLike, salt: BinaryLike, keylen: number, callback: (err: Error | null, derivedKey: Buffer) => void): void; + function scrypt(password: BinaryLike, salt: BinaryLike, keylen: number, options: ScryptOptions, callback: (err: Error | null, derivedKey: Buffer) => void): void; + /** + * Provides a synchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based + * key derivation function that is designed to be expensive computationally and + * memory-wise in order to make brute-force attacks unrewarding. + * + * The `salt` should be as unique as possible. It is recommended that a salt is + * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. + * + * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. + * + * An exception is thrown when key derivation fails, otherwise the derived key is + * returned as a `Buffer`. + * + * An exception is thrown when any of the input arguments specify invalid values + * or types. + * + * ```js + * const { + * scryptSync + * } = await import('crypto'); + * // Using the factory defaults. + * + * const key1 = scryptSync('password', 'salt', 64); + * console.log(key1.toString('hex')); // '3745e48...08d59ae' + * // Using a custom N parameter. Must be a power of two. + * const key2 = scryptSync('password', 'salt', 64, { N: 1024 }); + * console.log(key2.toString('hex')); // '3745e48...aa39b34' + * ``` + * @since v10.5.0 + */ + function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer; + interface RsaPublicKey { + key: KeyLike; + padding?: number | undefined; + } + interface RsaPrivateKey { + key: KeyLike; + passphrase?: string | undefined; + /** + * @default 'sha1' + */ + oaepHash?: string | undefined; + oaepLabel?: NodeJS.TypedArray | undefined; + padding?: number | undefined; + } + /** + * Encrypts the content of `buffer` with `key` and returns a new `Buffer` with encrypted content. The returned data can be decrypted using + * the corresponding private key, for example using {@link privateDecrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v0.11.14 + */ + function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `key`.`buffer` was previously encrypted using + * the corresponding private key, for example using {@link privateEncrypt}. + * + * If `key` is not a `KeyObject`, this function behaves as if`key` had been passed to {@link createPublicKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * + * Because RSA public keys can be derived from private keys, a private key may + * be passed instead of a public key. + * @since v1.1.0 + */ + function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Decrypts `buffer` with `privateKey`. `buffer` was previously encrypted using + * the corresponding public key, for example using {@link publicEncrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_OAEP_PADDING`. + * @since v0.11.14 + */ + function privateDecrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * Encrypts `buffer` with `privateKey`. The returned data can be decrypted using + * the corresponding public key, for example using {@link publicDecrypt}. + * + * If `privateKey` is not a `KeyObject`, this function behaves as if`privateKey` had been passed to {@link createPrivateKey}. If it is an + * object, the `padding` property can be passed. Otherwise, this function uses`RSA_PKCS1_PADDING`. + * @since v1.1.0 + */ + function privateEncrypt(privateKey: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + /** + * ```js + * const { + * getCiphers + * } = await import('crypto'); + * + * console.log(getCiphers()); // ['aes-128-cbc', 'aes-128-ccm', ...] + * ``` + * @since v0.9.3 + * @return An array with the names of the supported cipher algorithms. + */ + function getCiphers(): string[]; + /** + * ```js + * const { + * getCurves + * } = await import('crypto'); + * + * console.log(getCurves()); // ['Oakley-EC2N-3', 'Oakley-EC2N-4', ...] + * ``` + * @since v2.3.0 + * @return An array with the names of the supported elliptic curves. + */ + function getCurves(): string[]; + /** + * @since v10.0.0 + * @return `1` if and only if a FIPS compliant crypto provider is currently in use, `0` otherwise. A future semver-major release may change the return type of this API to a {boolean}. + */ + function getFips(): 1 | 0; + /** + * ```js + * const { + * getHashes + * } = await import('crypto'); + * + * console.log(getHashes()); // ['DSA', 'DSA-SHA', 'DSA-SHA1', ...] + * ``` + * @since v0.9.3 + * @return An array of the names of the supported hash algorithms, such as `'RSA-SHA256'`. Hash algorithms are also called "digest" algorithms. + */ + function getHashes(): string[]; + /** + * The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH) + * key exchanges. + * + * Instances of the `ECDH` class can be created using the {@link createECDH} function. + * + * ```js + * import assert from 'assert'; + * + * const { + * createECDH + * } = await import('crypto'); + * + * // Generate Alice's keys... + * const alice = createECDH('secp521r1'); + * const aliceKey = alice.generateKeys(); + * + * // Generate Bob's keys... + * const bob = createECDH('secp521r1'); + * const bobKey = bob.generateKeys(); + * + * // Exchange and generate the secret... + * const aliceSecret = alice.computeSecret(bobKey); + * const bobSecret = bob.computeSecret(aliceKey); + * + * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); + * // OK + * ``` + * @since v0.11.14 + */ + class ECDH { + private constructor(); + /** + * Converts the EC Diffie-Hellman public key specified by `key` and `curve` to the + * format specified by `format`. The `format` argument specifies point encoding + * and can be `'compressed'`, `'uncompressed'` or `'hybrid'`. The supplied key is + * interpreted using the specified `inputEncoding`, and the returned key is encoded + * using the specified `outputEncoding`. + * + * Use {@link getCurves} to obtain a list of available curve names. + * On recent OpenSSL releases, `openssl ecparam -list_curves` will also display + * the name and description of each available elliptic curve. + * + * If `format` is not specified the point will be returned in `'uncompressed'`format. + * + * If the `inputEncoding` is not provided, `key` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * Example (uncompressing a key): + * + * ```js + * const { + * createECDH, + * ECDH + * } = await import('crypto'); + * + * const ecdh = createECDH('secp256k1'); + * ecdh.generateKeys(); + * + * const compressedKey = ecdh.getPublicKey('hex', 'compressed'); + * + * const uncompressedKey = ECDH.convertKey(compressedKey, + * 'secp256k1', + * 'hex', + * 'hex', + * 'uncompressed'); + * + * // The converted key and the uncompressed public key should be the same + * console.log(uncompressedKey === ecdh.getPublicKey('hex')); + * ``` + * @since v10.0.0 + * @param inputEncoding The `encoding` of the `key` string. + * @param outputEncoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + static convertKey( + key: BinaryLike, + curve: string, + inputEncoding?: BinaryToTextEncoding, + outputEncoding?: 'latin1' | 'hex' | 'base64' | 'base64url', + format?: 'uncompressed' | 'compressed' | 'hybrid' + ): Buffer | string; + /** + * Generates private and public EC Diffie-Hellman key values, and returns + * the public key in the specified `format` and `encoding`. This key should be + * transferred to the other party. + * + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified, the point will be returned in`'uncompressed'` format. + * + * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + */ + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Computes the shared secret using `otherPublicKey` as the other + * party's public key and returns the computed shared secret. The supplied + * key is interpreted using specified `inputEncoding`, and the returned secret + * is encoded using the specified `outputEncoding`. + * If the `inputEncoding` is not + * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or`DataView`. + * + * If `outputEncoding` is given a string will be returned; otherwise a `Buffer` is returned. + * + * `ecdh.computeSecret` will throw an`ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey`lies outside of the elliptic curve. Since `otherPublicKey` is + * usually supplied from a remote user over an insecure network, + * be sure to handle this exception accordingly. + * @since v0.11.14 + * @param inputEncoding The `encoding` of the `otherPublicKey` string. + * @param outputEncoding The `encoding` of the return value. + */ + computeSecret(otherPublicKey: NodeJS.ArrayBufferView): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): Buffer; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding: BinaryToTextEncoding): string; + /** + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @return The EC Diffie-Hellman in the specified `encoding`. + */ + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + /** + * The `format` argument specifies point encoding and can be `'compressed'` or`'uncompressed'`. If `format` is not specified the point will be returned in`'uncompressed'` format. + * + * If `encoding` is specified, a string is returned; otherwise a `Buffer` is + * returned. + * @since v0.11.14 + * @param encoding The `encoding` of the return value. + * @param [format='uncompressed'] + * @return The EC Diffie-Hellman public key in the specified `encoding` and `format`. + */ + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + /** + * Sets the EC Diffie-Hellman private key. + * If `encoding` is provided, `privateKey` is expected + * to be a string; otherwise `privateKey` is expected to be a `Buffer`,`TypedArray`, or `DataView`. + * + * If `privateKey` is not valid for the curve specified when the `ECDH` object was + * created, an error is thrown. Upon setting the private key, the associated + * public point (key) is also generated and set in the `ECDH` object. + * @since v0.11.14 + * @param encoding The `encoding` of the `privateKey` string. + */ + setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; + setPrivateKey(privateKey: string, encoding: BinaryToTextEncoding): void; + } + /** + * Creates an Elliptic Curve Diffie-Hellman (`ECDH`) key exchange object using a + * predefined curve specified by the `curveName` string. Use {@link getCurves} to obtain a list of available curve names. On recent + * OpenSSL releases, `openssl ecparam -list_curves` will also display the name + * and description of each available elliptic curve. + * @since v0.11.14 + */ + function createECDH(curveName: string): ECDH; + /** + * This function is based on a constant-time algorithm. + * Returns true if `a` is equal to `b`, without leaking timing information that + * would allow an attacker to guess one of the values. This is suitable for + * comparing HMAC digests or secret values like authentication cookies or [capability urls](https://www.w3.org/TR/capability-urls/). + * + * `a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they + * must have the same byte length. + * + * If at least one of `a` and `b` is a `TypedArray` with more than one byte per + * entry, such as `Uint16Array`, the result will be computed using the platform + * byte order. + * + * Use of `crypto.timingSafeEqual` does not guarantee that the _surrounding_ code + * is timing-safe. Care should be taken to ensure that the surrounding code does + * not introduce timing vulnerabilities. + * @since v6.6.0 + */ + function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; + /** @deprecated since v10.0.0 */ + const DEFAULT_ENCODING: BufferEncoding; + type KeyType = 'rsa' | 'rsa-pss' | 'dsa' | 'ec' | 'ed25519' | 'ed448' | 'x25519' | 'x448'; + type KeyFormat = 'pem' | 'der'; + interface BasePrivateKeyEncodingOptions { + format: T; + cipher?: string | undefined; + passphrase?: string | undefined; + } + interface KeyPairKeyObjectResult { + publicKey: KeyObject; + privateKey: KeyObject; + } + interface ED25519KeyPairKeyObjectOptions {} + interface ED448KeyPairKeyObjectOptions {} + interface X25519KeyPairKeyObjectOptions {} + interface X448KeyPairKeyObjectOptions {} + interface ECKeyPairKeyObjectOptions { + /** + * Name of the curve to use + */ + namedCurve: string; + } + interface RSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + } + interface RSAPSSKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + } + interface DSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + } + interface RSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + publicKeyEncoding: { + type: 'pkcs1' | 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs1' | 'pkcs8'; + }; + } + interface RSAPSSKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Public exponent + * @default 0x10001 + */ + publicExponent?: number | undefined; + /** + * Name of the message digest + */ + hashAlgorithm?: string; + /** + * Name of the message digest used by MGF1 + */ + mgf1HashAlgorithm?: string; + /** + * Minimal salt length in bytes + */ + saltLength?: string; + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface DSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface ECKeyPairOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + publicKeyEncoding: { + type: 'pkcs1' | 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'sec1' | 'pkcs8'; + }; + } + interface ED25519KeyPairOptions { + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface ED448KeyPairOptions { + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface X25519KeyPairOptions { + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface X448KeyPairOptions { + publicKeyEncoding: { + type: 'spki'; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: 'pkcs8'; + }; + } + interface KeyPairSyncResult { + publicKey: T1; + privateKey: T2; + } + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * When encoding public keys, it is recommended to use `'spki'`. When encoding + * private keys, it is recommended to use `'pkcs8'` with a strong passphrase, + * and to keep the passphrase confidential. + * + * ```js + * const { + * generateKeyPairSync + * } = await import('crypto'); + * + * const { + * publicKey, + * privateKey, + * } = generateKeyPairSync('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem' + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret' + * } + * }); + * ``` + * + * The return value `{ publicKey, privateKey }` represents the generated key pair. + * When PEM encoding was selected, the respective key will be a string, otherwise + * it will be a buffer containing the data encoded as DER. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa', options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'rsa-pss', options: RSAPSSKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'dsa', options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ec', options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'ed25519', options: ED25519KeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed25519', options: ED25519KeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed25519', options: ED25519KeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed25519', options: ED25519KeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed25519', options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'ed448', options: ED448KeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed448', options: ED448KeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed448', options: ED448KeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed448', options: ED448KeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'ed448', options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'x25519', options: X25519KeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x25519', options: X25519KeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x25519', options: X25519KeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x25519', options: X25519KeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x25519', options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + function generateKeyPairSync(type: 'x448', options: X448KeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x448', options: X448KeyPairOptions<'pem', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x448', options: X448KeyPairOptions<'der', 'pem'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x448', options: X448KeyPairOptions<'der', 'der'>): KeyPairSyncResult; + function generateKeyPairSync(type: 'x448', options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + /** + * Generates a new asymmetric key pair of the given `type`. RSA, RSA-PSS, DSA, EC, + * Ed25519, Ed448, X25519, X448, and DH are currently supported. + * + * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function + * behaves as if `keyObject.export()` had been called on its result. Otherwise, + * the respective part of the key is returned as a `KeyObject`. + * + * It is recommended to encode public keys as `'spki'` and private keys as`'pkcs8'` with encryption for long-term storage: + * + * ```js + * const { + * generateKeyPair + * } = await import('crypto'); + * + * generateKeyPair('rsa', { + * modulusLength: 4096, + * publicKeyEncoding: { + * type: 'spki', + * format: 'pem' + * }, + * privateKeyEncoding: { + * type: 'pkcs8', + * format: 'pem', + * cipher: 'aes-256-cbc', + * passphrase: 'top secret' + * } + * }, (err, publicKey, privateKey) => { + * // Handle errors and use the generated key pair. + * }); + * ``` + * + * On completion, `callback` will be called with `err` set to `undefined` and`publicKey` / `privateKey` representing the generated key pair. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a `Promise` for an `Object` with `publicKey` and `privateKey` properties. + * @since v10.12.0 + * @param type Must be `'rsa'`, `'rsa-pss'`, `'dsa'`, `'ec'`, `'ed25519'`, `'ed448'`, `'x25519'`, `'x448'`, or `'dh'`. + */ + function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'rsa', options: RSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'rsa-pss', options: RSAPSSKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'rsa-pss', options: RSAPSSKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'dsa', options: DSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ec', options: ECKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'ed25519', options: ED25519KeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'ed25519', options: ED25519KeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ed25519', options: ED25519KeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'ed25519', options: ED25519KeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ed25519', options: ED25519KeyPairKeyObjectOptions | undefined, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'ed448', options: ED448KeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'ed448', options: ED448KeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ed448', options: ED448KeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'ed448', options: ED448KeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'ed448', options: ED448KeyPairKeyObjectOptions | undefined, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'x25519', options: X25519KeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'x25519', options: X25519KeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'x25519', options: X25519KeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'x25519', options: X25519KeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'x25519', options: X25519KeyPairKeyObjectOptions | undefined, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + function generateKeyPair(type: 'x448', options: X448KeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void; + function generateKeyPair(type: 'x448', options: X448KeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'x448', options: X448KeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void; + function generateKeyPair(type: 'x448', options: X448KeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void; + function generateKeyPair(type: 'x448', options: X448KeyPairKeyObjectOptions | undefined, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void; + namespace generateKeyPair { + function __promisify__( + type: 'rsa', + options: RSAKeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'rsa', + options: RSAKeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'rsa', + options: RSAKeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'rsa', + options: RSAKeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'rsa', options: RSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'rsa-pss', + options: RSAPSSKeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'rsa-pss', + options: RSAPSSKeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'rsa-pss', + options: RSAPSSKeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'rsa-pss', + options: RSAPSSKeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'rsa-pss', options: RSAPSSKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'dsa', + options: DSAKeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'dsa', + options: DSAKeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'dsa', + options: DSAKeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'dsa', + options: DSAKeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'dsa', options: DSAKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'ec', + options: ECKeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'ec', + options: ECKeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'ec', + options: ECKeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'ec', + options: ECKeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'ec', options: ECKeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'ed25519', + options: ED25519KeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'ed25519', + options: ED25519KeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'ed25519', + options: ED25519KeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'ed25519', + options: ED25519KeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'ed25519', options?: ED25519KeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'ed448', + options: ED448KeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'ed448', + options: ED448KeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'ed448', + options: ED448KeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'ed448', + options: ED448KeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'ed448', options?: ED448KeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'x25519', + options: X25519KeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'x25519', + options: X25519KeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'x25519', + options: X25519KeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'x25519', + options: X25519KeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'x25519', options?: X25519KeyPairKeyObjectOptions): Promise; + function __promisify__( + type: 'x448', + options: X448KeyPairOptions<'pem', 'pem'> + ): Promise<{ + publicKey: string; + privateKey: string; + }>; + function __promisify__( + type: 'x448', + options: X448KeyPairOptions<'pem', 'der'> + ): Promise<{ + publicKey: string; + privateKey: Buffer; + }>; + function __promisify__( + type: 'x448', + options: X448KeyPairOptions<'der', 'pem'> + ): Promise<{ + publicKey: Buffer; + privateKey: string; + }>; + function __promisify__( + type: 'x448', + options: X448KeyPairOptions<'der', 'der'> + ): Promise<{ + publicKey: Buffer; + privateKey: Buffer; + }>; + function __promisify__(type: 'x448', options?: X448KeyPairKeyObjectOptions): Promise; + } + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPrivateKey}. If it is an object, the following + * additional properties can be passed: + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function sign(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + callback: (error: Error | null, data: Buffer) => void + ): void; + /** + * Verifies the given signature for `data` using the given key and algorithm. If`algorithm` is `null` or `undefined`, then the algorithm is dependent upon the + * key type (especially Ed25519 and Ed448). + * + * If `key` is not a `KeyObject`, this function behaves as if `key` had been + * passed to {@link createPublicKey}. If it is an object, the following + * additional properties can be passed: + * + * The `signature` argument is the previously calculated signature for the `data`. + * + * Because public keys can be derived from private keys, a private key or a public + * key may be passed for `key`. + * + * If the `callback` function is provided this function uses libuv's threadpool. + * @since v12.0.0 + */ + function verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView): boolean; + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: NodeJS.ArrayBufferView, + callback: (error: Error | null, result: boolean) => void + ): void; + /** + * Computes the Diffie-Hellman secret based on a `privateKey` and a `publicKey`. + * Both keys must have the same `asymmetricKeyType`, which must be one of `'dh'`(for Diffie-Hellman), `'ec'` (for ECDH), `'x448'`, or `'x25519'` (for ECDH-ES). + * @since v13.9.0, v12.17.0 + */ + function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer; + type CipherMode = 'cbc' | 'ccm' | 'cfb' | 'ctr' | 'ecb' | 'gcm' | 'ocb' | 'ofb' | 'stream' | 'wrap' | 'xts'; + interface CipherInfoOptions { + /** + * A test key length. + */ + keyLength?: number | undefined; + /** + * A test IV length. + */ + ivLength?: number | undefined; + } + interface CipherInfo { + /** + * The name of the cipher. + */ + name: string; + /** + * The nid of the cipher. + */ + nid: number; + /** + * The block size of the cipher in bytes. + * This property is omitted when mode is 'stream'. + */ + blockSize?: number | undefined; + /** + * The expected or default initialization vector length in bytes. + * This property is omitted if the cipher does not use an initialization vector. + */ + ivLength?: number | undefined; + /** + * The expected or default key length in bytes. + */ + keyLength: number; + /** + * The cipher mode. + */ + mode: CipherMode; + } + /** + * Returns information about a given cipher. + * + * Some ciphers accept variable length keys and initialization vectors. By default, + * the `crypto.getCipherInfo()` method will return the default values for these + * ciphers. To test if a given key length or iv length is acceptable for given + * cipher, use the `keyLength` and `ivLength` options. If the given values are + * unacceptable, `undefined` will be returned. + * @since v15.0.0 + * @param nameOrNid The name or nid of the cipher to query. + */ + function getCipherInfo(nameOrNid: string | number, options?: CipherInfoOptions): CipherInfo | undefined; + /** + * HKDF is a simple key derivation function defined in RFC 5869\. The given `ikm`,`salt` and `info` are used with the `digest` to derive a key of `keylen` bytes. + * + * The supplied `callback` function is called with two arguments: `err` and`derivedKey`. If an errors occurs while deriving the key, `err` will be set; + * otherwise `err` will be `null`. The successfully generated `derivedKey` will + * be passed to the callback as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). An error will be thrown if any + * of the input arguments specify invalid values or types. + * + * ```js + * import { Buffer } from 'buffer'; + * const { + * hkdf + * } = await import('crypto'); + * + * hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => { + * if (err) throw err; + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * }); + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. It must be at least one byte in length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdf(digest: string, irm: BinaryLike | KeyObject, salt: BinaryLike, info: BinaryLike, keylen: number, callback: (err: Error | null, derivedKey: ArrayBuffer) => void): void; + /** + * Provides a synchronous HKDF key derivation function as defined in RFC 5869\. The + * given `ikm`, `salt` and `info` are used with the `digest` to derive a key of`keylen` bytes. + * + * The successfully generated `derivedKey` will be returned as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). + * + * An error will be thrown if any of the input arguments specify invalid values or + * types, or if the derived key cannot be generated. + * + * ```js + * import { Buffer } from 'buffer'; + * const { + * hkdfSync + * } = await import('crypto'); + * + * const derivedKey = hkdfSync('sha512', 'key', 'salt', 'info', 64); + * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' + * ``` + * @since v15.0.0 + * @param digest The digest algorithm to use. + * @param ikm The input keying material. It must be at least one byte in length. + * @param salt The salt value. Must be provided but can be zero-length. + * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. + * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` + * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). + */ + function hkdfSync(digest: string, ikm: BinaryLike | KeyObject, salt: BinaryLike, info: BinaryLike, keylen: number): ArrayBuffer; + interface SecureHeapUsage { + /** + * The total allocated secure heap size as specified using the `--secure-heap=n` command-line flag. + */ + total: number; + /** + * The minimum allocation from the secure heap as specified using the `--secure-heap-min` command-line flag. + */ + min: number; + /** + * The total number of bytes currently allocated from the secure heap. + */ + used: number; + /** + * The calculated ratio of `used` to `total` allocated bytes. + */ + utilization: number; + } + /** + * @since v15.6.0 + */ + function secureHeapUsed(): SecureHeapUsage; + interface RandomUUIDOptions { + /** + * By default, to improve performance, + * Node.js will pre-emptively generate and persistently cache enough + * random data to generate up to 128 random UUIDs. To generate a UUID + * without using the cache, set `disableEntropyCache` to `true`. + * + * @default `false` + */ + disableEntropyCache?: boolean | undefined; + } + /** + * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a + * cryptographic pseudorandom number generator. + * @since v15.6.0, v14.17.0 + */ + function randomUUID(options?: RandomUUIDOptions): string; + interface X509CheckOptions { + /** + * @default 'always' + */ + subject: 'always' | 'never'; + /** + * @default true + */ + wildcards: boolean; + /** + * @default true + */ + partialWildcards: boolean; + /** + * @default false + */ + multiLabelWildcards: boolean; + /** + * @default false + */ + singleLabelSubdomains: boolean; + } + /** + * Encapsulates an X509 certificate and provides read-only access to + * its information. + * + * ```js + * const { X509Certificate } = await import('crypto'); + * + * const x509 = new X509Certificate('{... pem encoded cert ...}'); + * + * console.log(x509.subject); + * ``` + * @since v15.6.0 + */ + class X509Certificate { + /** + * Will be \`true\` if this is a Certificate Authority (ca) certificate. + * @since v15.6.0 + */ + readonly ca: boolean; + /** + * The SHA-1 fingerprint of this certificate. + * @since v15.6.0 + */ + readonly fingerprint: string; + /** + * The SHA-256 fingerprint of this certificate. + * @since v15.6.0 + */ + readonly fingerprint256: string; + /** + * The complete subject of this certificate. + * @since v15.6.0 + */ + readonly subject: string; + /** + * The subject alternative name specified for this certificate. + * @since v15.6.0 + */ + readonly subjectAltName: string; + /** + * The information access content of this certificate. + * @since v15.6.0 + */ + readonly infoAccess: string; + /** + * An array detailing the key usages for this certificate. + * @since v15.6.0 + */ + readonly keyUsage: string[]; + /** + * The issuer identification included in this certificate. + * @since v15.6.0 + */ + readonly issuer: string; + /** + * The issuer certificate or `undefined` if the issuer certificate is not + * available. + * @since v15.9.0 + */ + readonly issuerCertificate?: X509Certificate | undefined; + /** + * The public key `KeyObject` for this certificate. + * @since v15.6.0 + */ + readonly publicKey: KeyObject; + /** + * A `Buffer` containing the DER encoding of this certificate. + * @since v15.6.0 + */ + readonly raw: Buffer; + /** + * The serial number of this certificate. + * @since v15.6.0 + */ + readonly serialNumber: string; + /** + * The date/time from which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validFrom: string; + /** + * The date/time until which this certificate is considered valid. + * @since v15.6.0 + */ + readonly validTo: string; + constructor(buffer: BinaryLike); + /** + * Checks whether the certificate matches the given email address. + * @since v15.6.0 + * @return Returns `email` if the certificate matches, `undefined` if it does not. + */ + checkEmail(email: string, options?: X509CheckOptions): string | undefined; + /** + * Checks whether the certificate matches the given host name. + * @since v15.6.0 + * @return Returns `name` if the certificate matches, `undefined` if it does not. + */ + checkHost(name: string, options?: X509CheckOptions): string | undefined; + /** + * Checks whether the certificate matches the given IP address (IPv4 or IPv6). + * @since v15.6.0 + * @return Returns `ip` if the certificate matches, `undefined` if it does not. + */ + checkIP(ip: string, options?: X509CheckOptions): string | undefined; + /** + * Checks whether this certificate was issued by the given `otherCert`. + * @since v15.6.0 + */ + checkIssued(otherCert: X509Certificate): boolean; + /** + * Checks whether the public key for this certificate is consistent with + * the given private key. + * @since v15.6.0 + * @param privateKey A private key. + */ + checkPrivateKey(privateKey: KeyObject): boolean; + /** + * There is no standard JSON encoding for X509 certificates. The`toJSON()` method returns a string containing the PEM encoded + * certificate. + * @since v15.6.0 + */ + toJSON(): string; + /** + * Returns information about this certificate using the legacy `certificate object` encoding. + * @since v15.6.0 + */ + toLegacyObject(): PeerCertificate; + /** + * Returns the PEM-encoded certificate. + * @since v15.6.0 + */ + toString(): string; + /** + * Verifies that this certificate was signed by the given public key. + * Does not perform any other validation checks on the certificate. + * @since v15.6.0 + * @param publicKey A public key. + */ + verify(publicKey: KeyObject): boolean; + } + type LargeNumberLike = NodeJS.ArrayBufferView | SharedArrayBuffer | ArrayBuffer | bigint; + interface GeneratePrimeOptions { + add?: LargeNumberLike | undefined; + rem?: LargeNumberLike | undefined; + /** + * @default false + */ + safe?: boolean | undefined; + bigint?: boolean | undefined; + } + interface GeneratePrimeOptionsBigInt extends GeneratePrimeOptions { + bigint: true; + } + interface GeneratePrimeOptionsArrayBuffer extends GeneratePrimeOptions { + bigint?: false | undefined; + } + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void; + function generatePrime(size: number, options: GeneratePrimeOptionsBigInt, callback: (err: Error | null, prime: bigint) => void): void; + function generatePrime(size: number, options: GeneratePrimeOptionsArrayBuffer, callback: (err: Error | null, prime: ArrayBuffer) => void): void; + function generatePrime(size: number, options: GeneratePrimeOptions, callback: (err: Error | null, prime: ArrayBuffer | bigint) => void): void; + /** + * Generates a pseudorandom prime of `size` bits. + * + * If `options.safe` is `true`, the prime will be a safe prime -- that is,`(prime - 1) / 2` will also be a prime. + * + * The `options.add` and `options.rem` parameters can be used to enforce additional + * requirements, e.g., for Diffie-Hellman: + * + * * If `options.add` and `options.rem` are both set, the prime will satisfy the + * condition that `prime % add = rem`. + * * If only `options.add` is set and `options.safe` is not `true`, the prime will + * satisfy the condition that `prime % add = 1`. + * * If only `options.add` is set and `options.safe` is set to `true`, the prime + * will instead satisfy the condition that `prime % add = 3`. This is necessary + * because `prime % add = 1` for `options.add > 2` would contradict the condition + * enforced by `options.safe`. + * * `options.rem` is ignored if `options.add` is not given. + * + * Both `options.add` and `options.rem` must be encoded as big-endian sequences + * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or`DataView`. + * + * By default, the prime is encoded as a big-endian sequence of octets + * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. + * @since v15.8.0 + * @param size The size (in bits) of the prime to generate. + */ + function generatePrimeSync(size: number): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsBigInt): bigint; + function generatePrimeSync(size: number, options: GeneratePrimeOptionsArrayBuffer): ArrayBuffer; + function generatePrimeSync(size: number, options: GeneratePrimeOptions): ArrayBuffer | bigint; + interface CheckPrimeOptions { + /** + * The number of Miller-Rabin probabilistic primality iterations to perform. + * When the value is 0 (zero), a number of checks is used that yields a false positive rate of at most 2-64 for random input. + * Care must be used when selecting a number of checks. + * Refer to the OpenSSL documentation for the BN_is_prime_ex function nchecks options for more details. + * + * @default 0 + */ + checks?: number | undefined; + } + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + */ + function checkPrime(value: LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void; + function checkPrime(value: LargeNumberLike, options: CheckPrimeOptions, callback: (err: Error | null, result: boolean) => void): void; + /** + * Checks the primality of the `candidate`. + * @since v15.8.0 + * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. + * @return `true` if the candidate is a prime with an error probability less than `0.25 ** options.checks`. + */ + function checkPrimeSync(candidate: LargeNumberLike, options?: CheckPrimeOptions): boolean; + namespace webcrypto { + class CryptoKey {} // placeholder + } +} +declare module 'node:crypto' { + export * from 'crypto'; +} diff --git a/build/node_modules/@types/node/dgram.d.ts b/build/node_modules/@types/node/dgram.d.ts new file mode 100755 index 00000000..b4a98927 --- /dev/null +++ b/build/node_modules/@types/node/dgram.d.ts @@ -0,0 +1,545 @@ +/** + * The `dgram` module provides an implementation of UDP datagram sockets. + * + * ```js + * import dgram from 'dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.log(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/dgram.js) + */ +declare module 'dgram' { + import { AddressInfo } from 'node:net'; + import * as dns from 'node:dns'; + import { EventEmitter, Abortable } from 'node:events'; + interface RemoteInfo { + address: string; + family: 'IPv4' | 'IPv6'; + port: number; + size: number; + } + interface BindOptions { + port?: number | undefined; + address?: string | undefined; + exclusive?: boolean | undefined; + fd?: number | undefined; + } + type SocketType = 'udp4' | 'udp6'; + interface SocketOptions extends Abortable { + type: SocketType; + reuseAddr?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + recvBufferSize?: number | undefined; + sendBufferSize?: number | undefined; + lookup?: ((hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void) | undefined; + } + /** + * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram + * messages. When `address` and `port` are not passed to `socket.bind()` the + * method will bind the socket to the "all interfaces" address on a random port + * (it does the right thing for both `udp4` and `udp6` sockets). The bound address + * and port can be retrieved using `socket.address().address` and `socket.address().port`. + * + * If the `signal` option is enabled, calling `.abort()` on the corresponding`AbortController` is similar to calling `.close()` on the socket: + * + * ```js + * const controller = new AbortController(); + * const { signal } = controller; + * const server = dgram.createSocket({ type: 'udp4', signal }); + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * // Later, when you want to close the server. + * controller.abort(); + * ``` + * @since v0.11.13 + * @param options Available options are: + * @param callback Attached as a listener for `'message'` events. Optional. + */ + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + /** + * Encapsulates the datagram functionality. + * + * New instances of `dgram.Socket` are created using {@link createSocket}. + * The `new` keyword is not to be used to create `dgram.Socket` instances. + * @since v0.1.99 + */ + class Socket extends EventEmitter { + /** + * Tells the kernel to join a multicast group at the given `multicastAddress` and`multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the`multicastInterface` argument is not + * specified, the operating system will choose + * one interface and will add membership to it. To add membership to every + * available interface, call `addMembership` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * + * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur: + * + * ```js + * import cluster from 'cluster'; + * import dgram from 'dgram'; + * + * if (cluster.isPrimary) { + * cluster.fork(); // Works ok. + * cluster.fork(); // Fails with EADDRINUSE. + * } else { + * const s = dgram.createSocket('udp4'); + * s.bind(1234, () => { + * s.addMembership('224.0.0.114'); + * }); + * } + * ``` + * @since v0.6.9 + */ + addMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * Returns an object containing the address information for a socket. + * For UDP sockets, this object will contain `address`, `family` and `port`properties. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.99 + */ + address(): AddressInfo; + /** + * For UDP sockets, causes the `dgram.Socket` to listen for datagram + * messages on a named `port` and optional `address`. If `port` is not + * specified or is `0`, the operating system will attempt to bind to a + * random port. If `address` is not specified, the operating system will + * attempt to listen on all addresses. Once binding is complete, a`'listening'` event is emitted and the optional `callback` function is + * called. + * + * Specifying both a `'listening'` event listener and passing a`callback` to the `socket.bind()` method is not harmful but not very + * useful. + * + * A bound datagram socket keeps the Node.js process running to receive + * datagram messages. + * + * If binding fails, an `'error'` event is generated. In rare case (e.g. + * attempting to bind with a closed socket), an `Error` may be thrown. + * + * Example of a UDP server listening on port 41234: + * + * ```js + * import dgram from 'dgram'; + * + * const server = dgram.createSocket('udp4'); + * + * server.on('error', (err) => { + * console.log(`server error:\n${err.stack}`); + * server.close(); + * }); + * + * server.on('message', (msg, rinfo) => { + * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); + * }); + * + * server.on('listening', () => { + * const address = server.address(); + * console.log(`server listening ${address.address}:${address.port}`); + * }); + * + * server.bind(41234); + * // Prints: server listening 0.0.0.0:41234 + * ``` + * @since v0.1.99 + * @param callback with no parameters. Called when binding is complete. + */ + bind(port?: number, address?: string, callback?: () => void): this; + bind(port?: number, callback?: () => void): this; + bind(callback?: () => void): this; + bind(options: BindOptions, callback?: () => void): this; + /** + * Close the underlying socket and stop listening for data on it. If a callback is + * provided, it is added as a listener for the `'close'` event. + * @since v0.1.99 + * @param callback Called when the socket has been closed. + */ + close(callback?: () => void): this; + /** + * Associates the `dgram.Socket` to a remote address and port. Every + * message sent by this handle is automatically sent to that destination. Also, + * the socket will only receive messages from that remote peer. + * Trying to call `connect()` on an already connected socket will result + * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not + * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) + * will be used by default. Once the connection is complete, a `'connect'` event + * is emitted and the optional `callback` function is called. In case of failure, + * the `callback` is called or, failing this, an `'error'` event is emitted. + * @since v12.0.0 + * @param callback Called when the connection is completed or on error. + */ + connect(port: number, address?: string, callback?: () => void): void; + connect(port: number, callback: () => void): void; + /** + * A synchronous function that disassociates a connected `dgram.Socket` from + * its remote address. Trying to call `disconnect()` on an unbound or already + * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception. + * @since v12.0.0 + */ + disconnect(): void; + /** + * Instructs the kernel to leave a multicast group at `multicastAddress` using the`IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the + * kernel when the socket is closed or the process terminates, so most apps will + * never have reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v0.6.9 + */ + dropMembership(multicastAddress: string, multicastInterface?: string): void; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_RCVBUF` socket receive buffer size in bytes. + */ + getRecvBufferSize(): number; + /** + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + * @return the `SO_SNDBUF` socket send buffer size in bytes. + */ + getSendBufferSize(): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active. The `socket.ref()` method adds the socket back to the reference + * counting and restores the default behavior. + * + * Calling `socket.ref()` multiples times will have no additional effect. + * + * The `socket.ref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + ref(): this; + /** + * Returns an object containing the `address`, `family`, and `port` of the remote + * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception + * if the socket is not connected. + * @since v12.0.0 + */ + remoteAddress(): AddressInfo; + /** + * Broadcasts a datagram on the socket. + * For connectionless sockets, the destination `port` and `address` must be + * specified. Connected sockets, on the other hand, will use their associated + * remote endpoint, so the `port` and `address` arguments must not be set. + * + * The `msg` argument contains the message to be sent. + * Depending on its type, different behavior can apply. If `msg` is a `Buffer`, + * any `TypedArray` or a `DataView`, + * the `offset` and `length` specify the offset within the `Buffer` where the + * message begins and the number of bytes in the message, respectively. + * If `msg` is a `String`, then it is automatically converted to a `Buffer`with `'utf8'` encoding. With messages that + * contain multi-byte characters, `offset` and `length` will be calculated with + * respect to `byte length` and not the character position. + * If `msg` is an array, `offset` and `length` must not be specified. + * + * The `address` argument is a string. If the value of `address` is a host name, + * DNS will be used to resolve the address of the host. If `address` is not + * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'`(for `udp6` sockets) will be used by default. + * + * If the socket has not been previously bound with a call to `bind`, the socket + * is assigned a random port number and is bound to the "all interfaces" address + * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.) + * + * An optional `callback` function may be specified to as a way of reporting + * DNS errors or for determining when it is safe to reuse the `buf` object. + * DNS lookups delay the time to send for at least one tick of the + * Node.js event loop. + * + * The only way to know for sure that the datagram has been sent is by using a`callback`. If an error occurs and a `callback` is given, the error will be + * passed as the first argument to the `callback`. If a `callback` is not given, + * the error is emitted as an `'error'` event on the `socket` object. + * + * Offset and length are optional but both _must_ be set if either are used. + * They are supported only when the first argument is a `Buffer`, a `TypedArray`, + * or a `DataView`. + * + * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket. + * + * Example of sending a UDP packet to a port on `localhost`; + * + * ```js + * import dgram from 'dgram'; + * import { Buffer } from 'buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.send(message, 41234, 'localhost', (err) => { + * client.close(); + * }); + * ``` + * + * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`; + * + * ```js + * import dgram from 'dgram'; + * import { Buffer } from 'buffer'; + * + * const buf1 = Buffer.from('Some '); + * const buf2 = Buffer.from('bytes'); + * const client = dgram.createSocket('udp4'); + * client.send([buf1, buf2], 41234, (err) => { + * client.close(); + * }); + * ``` + * + * Sending multiple buffers might be faster or slower depending on the + * application and operating system. Run benchmarks to + * determine the optimal strategy on a case-by-case basis. Generally speaking, + * however, sending multiple buffers is faster. + * + * Example of sending a UDP packet using a socket connected to a port on`localhost`: + * + * ```js + * import dgram from 'dgram'; + * import { Buffer } from 'buffer'; + * + * const message = Buffer.from('Some bytes'); + * const client = dgram.createSocket('udp4'); + * client.connect(41234, 'localhost', (err) => { + * client.send(message, (err) => { + * client.close(); + * }); + * }); + * ``` + * @since v0.1.99 + * @param msg Message to be sent. + * @param offset Offset in the buffer where the message starts. + * @param length Number of bytes in the message. + * @param port Destination port. + * @param address Destination host name or IP address. + * @param callback Called when the message has been sent. + */ + send(msg: string | Uint8Array | ReadonlyArray, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: string | Uint8Array | ReadonlyArray, port?: number, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: string | Uint8Array | ReadonlyArray, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: string | Uint8Array, offset: number, length: number, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: string | Uint8Array, offset: number, length: number, port?: number, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void; + /** + * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP + * packets may be sent to a local interface's broadcast address. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.6.9 + */ + setBroadcast(flag: boolean): void; + /** + * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC + * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_ + * _with a scope index is written as `'IP%scope'` where scope is an interface name_ + * _or interface number._ + * + * Sets the default outgoing multicast interface of the socket to a chosen + * interface or back to system interface selection. The `multicastInterface` must + * be a valid string representation of an IP from the socket's family. + * + * For IPv4 sockets, this should be the IP configured for the desired physical + * interface. All packets sent to multicast on the socket will be sent on the + * interface determined by the most recent successful use of this call. + * + * For IPv6 sockets, `multicastInterface` should include a scope to indicate the + * interface as in the examples that follow. In IPv6, individual `send` calls can + * also use explicit scope in addresses, so only packets sent to a multicast + * address without specifying an explicit scope are affected by the most recent + * successful use of this call. + * + * This method throws `EBADF` if called on an unbound socket. + * + * #### Example: IPv6 outgoing multicast interface + * + * On most systems, where scope format uses the interface name: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%eth1'); + * }); + * ``` + * + * On Windows, where scope format uses an interface number: + * + * ```js + * const socket = dgram.createSocket('udp6'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('::%2'); + * }); + * ``` + * + * #### Example: IPv4 outgoing multicast interface + * + * All systems use an IP of the host on the desired physical interface: + * + * ```js + * const socket = dgram.createSocket('udp4'); + * + * socket.bind(1234, () => { + * socket.setMulticastInterface('10.0.0.2'); + * }); + * ``` + * @since v8.6.0 + */ + setMulticastInterface(multicastInterface: string): void; + /** + * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`, + * multicast packets will also be received on the local interface. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastLoopback(flag: boolean): boolean; + /** + * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for + * "Time to Live", in this context it specifies the number of IP hops that a + * packet is allowed to travel through, specifically for multicast traffic. Each + * router or gateway that forwards a packet decrements the TTL. If the TTL is + * decremented to 0 by a router, it will not be forwarded. + * + * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.3.8 + */ + setMulticastTTL(ttl: number): number; + /** + * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setRecvBufferSize(size: number): void; + /** + * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer + * in bytes. + * + * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. + * @since v8.7.0 + */ + setSendBufferSize(size: number): void; + /** + * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live", + * in this context it specifies the number of IP hops that a packet is allowed to + * travel through. Each router or gateway that forwards a packet decrements the + * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. + * Changing TTL values is typically done for network probes or when multicasting. + * + * The `ttl` argument may be between between 1 and 255\. The default on most systems + * is 64. + * + * This method throws `EBADF` if called on an unbound socket. + * @since v0.1.101 + */ + setTTL(ttl: number): number; + /** + * By default, binding a socket will cause it to block the Node.js process from + * exiting as long as the socket is open. The `socket.unref()` method can be used + * to exclude the socket from the reference counting that keeps the Node.js + * process active, allowing the process to exit even if the socket is still + * listening. + * + * Calling `socket.unref()` multiple times will have no addition effect. + * + * The `socket.unref()` method returns a reference to the socket so calls can be + * chained. + * @since v0.9.1 + */ + unref(): this; + /** + * Tells the kernel to join a source-specific multicast channel at the given`sourceAddress` and `groupAddress`, using the `multicastInterface` with the`IP_ADD_SOURCE_MEMBERSHIP` socket + * option. If the `multicastInterface` argument + * is not specified, the operating system will choose one interface and will add + * membership to it. To add membership to every available interface, call`socket.addSourceSpecificMembership()` multiple times, once per interface. + * + * When called on an unbound socket, this method will implicitly bind to a random + * port, listening on all interfaces. + * @since v13.1.0, v12.16.0 + */ + addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * Instructs the kernel to leave a source-specific multicast channel at the given`sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP`socket option. This method is + * automatically called by the kernel when the + * socket is closed or the process terminates, so most apps will never have + * reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + * @since v13.1.0, v12.16.0 + */ + dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. error + * 4. listening + * 5. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'connect', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'listening', listener: () => void): this; + addListener(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close'): boolean; + emit(event: 'connect'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'listening'): boolean; + emit(event: 'message', msg: Buffer, rinfo: RemoteInfo): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'connect', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'listening', listener: () => void): this; + on(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'connect', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'listening', listener: () => void): this; + once(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'connect', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'listening', listener: () => void): this; + prependListener(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'connect', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'listening', listener: () => void): this; + prependOnceListener(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + } +} +declare module 'node:dgram' { + export * from 'dgram'; +} diff --git a/build/node_modules/@types/node/diagnostics_channel.d.ts b/build/node_modules/@types/node/diagnostics_channel.d.ts new file mode 100755 index 00000000..915d2af4 --- /dev/null +++ b/build/node_modules/@types/node/diagnostics_channel.d.ts @@ -0,0 +1,134 @@ +/** + * The `diagnostics_channel` module provides an API to create named channels + * to report arbitrary message data for diagnostics purposes. + * + * It can be accessed using: + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * ``` + * + * It is intended that a module writer wanting to report diagnostics messages + * will create one or many top-level channels to report messages through. + * Channels may also be acquired at runtime but it is not encouraged + * due to the additional overhead of doing so. Channels may be exported for + * convenience, but as long as the name is known it can be acquired anywhere. + * + * If you intend for your module to produce diagnostics data for others to + * consume it is recommended that you include documentation of what named + * channels are used along with the shape of the message data. Channel names + * should generally include the module name to avoid collisions with data from + * other modules. + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/diagnostics_channel.js) + */ +declare module 'diagnostics_channel' { + /** + * Check if there are active subscribers to the named channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * + * if (diagnostics_channel.hasSubscribers('my-channel')) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return If there are active subscribers + */ + function hasSubscribers(name: string): boolean; + /** + * This is the primary entry-point for anyone wanting to interact with a named + * channel. It produces a channel object which is optimized to reduce overhead at + * publish time as much as possible. + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * ``` + * @since v15.1.0, v14.17.0 + * @param name The channel name + * @return The named channel object + */ + function channel(name: string): Channel; + type ChannelListener = (name: string, message: unknown) => void; + /** + * The class `Channel` represents an individual named channel within the data + * pipeline. It is use to track subscribers and to publish messages when there + * are subscribers present. It exists as a separate object to avoid channel + * lookups at publish time, enabling very fast publish speeds and allowing + * for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly + * with `new Channel(name)` is not supported. + * @since v15.1.0, v14.17.0 + */ + class Channel { + readonly name: string; + /** + * Check if there are active subscribers to this channel. This is helpful if + * the message you want to send might be expensive to prepare. + * + * This API is optional but helpful when trying to publish messages from very + * performance-sensitive code. + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * if (channel.hasSubscribers) { + * // There are subscribers, prepare and publish message + * } + * ``` + * @since v15.1.0, v14.17.0 + */ + readonly hasSubscribers: boolean; + private constructor(name: string); + /** + * Register a message handler to subscribe to this channel. This message handler + * will be run synchronously whenever a message is published to the channel. Any + * errors thrown in the message handler will trigger an `'uncaughtException'`. + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * channel.subscribe((message, name) => { + * // Received data + * }); + * ``` + * @since v15.1.0, v14.17.0 + * @param onMessage The handler to receive channel messages + */ + subscribe(onMessage: ChannelListener): void; + /** + * Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`. + * + * ```js + * import diagnostics_channel from 'diagnostics_channel'; + * + * const channel = diagnostics_channel.channel('my-channel'); + * + * function onMessage(message, name) { + * // Received data + * } + * + * channel.subscribe(onMessage); + * + * channel.unsubscribe(onMessage); + * ``` + * @since v15.1.0, v14.17.0 + * @param onMessage The previous subscribed handler to remove + */ + unsubscribe(onMessage: ChannelListener): void; + } +} +declare module 'node:diagnostics_channel' { + export * from 'diagnostics_channel'; +} diff --git a/build/node_modules/@types/node/dns.d.ts b/build/node_modules/@types/node/dns.d.ts new file mode 100755 index 00000000..d59f554e --- /dev/null +++ b/build/node_modules/@types/node/dns.d.ts @@ -0,0 +1,659 @@ +/** + * The `dns` module enables name resolution. For example, use it to look up IP + * addresses of host names. + * + * Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the + * DNS protocol for lookups. {@link lookup} uses the operating system + * facilities to perform name resolution. It may not need to perform any network + * communication. To perform name resolution the way other applications on the same + * system do, use {@link lookup}. + * + * ```js + * const dns = require('dns'); + * + * dns.lookup('example.org', (err, address, family) => { + * console.log('address: %j family: IPv%s', address, family); + * }); + * // address: "93.184.216.34" family: IPv4 + * ``` + * + * All other functions in the `dns` module connect to an actual DNS server to + * perform name resolution. They will always use the network to perform DNS + * queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform + * DNS queries, bypassing other name-resolution facilities. + * + * ```js + * const dns = require('dns'); + * + * dns.resolve4('archive.org', (err, addresses) => { + * if (err) throw err; + * + * console.log(`addresses: ${JSON.stringify(addresses)}`); + * + * addresses.forEach((a) => { + * dns.reverse(a, (err, hostnames) => { + * if (err) { + * throw err; + * } + * console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`); + * }); + * }); + * }); + * ``` + * + * See the `Implementation considerations section` for more information. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/dns.js) + */ +declare module 'dns' { + import * as dnsPromises from 'node:dns/promises'; + // Supported getaddrinfo flags. + export const ADDRCONFIG: number; + export const V4MAPPED: number; + /** + * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as + * well as IPv4 mapped IPv6 addresses. + */ + export const ALL: number; + export interface LookupOptions { + family?: number | undefined; + hints?: number | undefined; + all?: boolean | undefined; + /** + * @default true + */ + verbatim?: boolean | undefined; + } + export interface LookupOneOptions extends LookupOptions { + all?: false | undefined; + } + export interface LookupAllOptions extends LookupOptions { + all: true; + } + export interface LookupAddress { + address: string; + family: number; + } + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 + * and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the arguments for `callback` change to`(err, addresses)`, with `addresses` being an array of objects with the + * properties `address` and `family`. + * + * On error, `err` is an `Error` object, where `err.code` is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dns.lookup()` does not necessarily have anything to do with the DNS protocol. + * The implementation uses an operating system facility that can associate names + * with addresses, and vice versa. This implementation can have subtle but + * important consequences on the behavior of any Node.js program. Please take some + * time to consult the `Implementation considerations section` before using`dns.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('dns'); + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * dns.lookup('example.com', options, (err, address, family) => + * console.log('address: %j family: IPv%s', address, family)); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dns.lookup('example.com', options, (err, addresses) => + * console.log('addresses: %j', addresses)); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, and `all`is not set to `true`, it returns a `Promise` for an `Object` with `address` and`family` properties. + * @since v0.1.90 + */ + export function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; + export function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; + export function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void; + export function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void; + export function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; + export namespace lookup { + function __promisify__(hostname: string, options: LookupAllOptions): Promise; + function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; + function __promisify__(hostname: string, options: LookupOptions): Promise; + } + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On an error, `err` is an `Error` object, where `err.code` is the error code. + * + * ```js + * const dns = require('dns'); + * dns.lookupService('127.0.0.1', 22, (err, hostname, service) => { + * console.log(hostname, service); + * // Prints: localhost ssh + * }); + * ``` + * + * If this method is invoked as its `util.promisify()` ed version, it returns a`Promise` for an `Object` with `hostname` and `service` properties. + * @since v0.11.14 + */ + export function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void): void; + export namespace lookupService { + function __promisify__( + address: string, + port: number + ): Promise<{ + hostname: string; + service: string; + }>; + } + export interface ResolveOptions { + ttl: boolean; + } + export interface ResolveWithTtlOptions extends ResolveOptions { + ttl: true; + } + export interface RecordWithTtl { + address: string; + ttl: number; + } + /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ + export type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; + export interface AnyARecord extends RecordWithTtl { + type: 'A'; + } + export interface AnyAaaaRecord extends RecordWithTtl { + type: 'AAAA'; + } + export interface CaaRecord { + critial: number; + issue?: string | undefined; + issuewild?: string | undefined; + iodef?: string | undefined; + contactemail?: string | undefined; + contactphone?: string | undefined; + } + export interface MxRecord { + priority: number; + exchange: string; + } + export interface AnyMxRecord extends MxRecord { + type: 'MX'; + } + export interface NaptrRecord { + flags: string; + service: string; + regexp: string; + replacement: string; + order: number; + preference: number; + } + export interface AnyNaptrRecord extends NaptrRecord { + type: 'NAPTR'; + } + export interface SoaRecord { + nsname: string; + hostmaster: string; + serial: number; + refresh: number; + retry: number; + expire: number; + minttl: number; + } + export interface AnySoaRecord extends SoaRecord { + type: 'SOA'; + } + export interface SrvRecord { + priority: number; + weight: number; + port: number; + name: string; + } + export interface AnySrvRecord extends SrvRecord { + type: 'SRV'; + } + export interface AnyTxtRecord { + type: 'TXT'; + entries: string[]; + } + export interface AnyNsRecord { + type: 'NS'; + value: string; + } + export interface AnyPtrRecord { + type: 'PTR'; + value: string; + } + export interface AnyCnameRecord { + type: 'CNAME'; + value: string; + } + export type AnyRecord = AnyARecord | AnyAaaaRecord | AnyCnameRecord | AnyMxRecord | AnyNaptrRecord | AnyNsRecord | AnyPtrRecord | AnySoaRecord | AnySrvRecord | AnyTxtRecord; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. The `callback` function has arguments`(err, records)`. When successful, `records` will be an array of resource + * records. The type and structure of individual results varies based on `rrtype`: + * + * + * + * On error, `err` is an `Error` object, where `err.code` is one of theDNS error codes. + * @since v0.1.27 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + export function resolve(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'A', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'AAAA', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'ANY', callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void; + export function resolve(hostname: string, rrtype: 'CNAME', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'MX', callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void; + export function resolve(hostname: string, rrtype: 'NAPTR', callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void; + export function resolve(hostname: string, rrtype: 'NS', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'PTR', callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve(hostname: string, rrtype: 'SOA', callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void): void; + export function resolve(hostname: string, rrtype: 'SRV', callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void; + export function resolve(hostname: string, rrtype: 'TXT', callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void; + export function resolve( + hostname: string, + rrtype: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void + ): void; + export namespace resolve { + function __promisify__(hostname: string, rrtype?: 'A' | 'AAAA' | 'CNAME' | 'NS' | 'PTR'): Promise; + function __promisify__(hostname: string, rrtype: 'ANY'): Promise; + function __promisify__(hostname: string, rrtype: 'MX'): Promise; + function __promisify__(hostname: string, rrtype: 'NAPTR'): Promise; + function __promisify__(hostname: string, rrtype: 'SOA'): Promise; + function __promisify__(hostname: string, rrtype: 'SRV'): Promise; + function __promisify__(hostname: string, rrtype: 'TXT'): Promise; + function __promisify__(hostname: string, rrtype: string): Promise; + } + /** + * Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void; + export function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void; + export namespace resolve4 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve a IPv6 addresses (`AAAA` records) for the`hostname`. The `addresses` argument passed to the `callback` function + * will contain an array of IPv6 addresses. + * @since v0.1.16 + * @param hostname Host name to resolve. + */ + export function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void; + export function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void; + export namespace resolve6 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of canonical name records available for the `hostname`(e.g. `['bar.example.com']`). + * @since v0.3.2 + */ + export function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export namespace resolveCname { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. The`addresses` argument passed to the `callback` function + * will contain an array of certification authority authorization records + * available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + export function resolveCaa(hostname: string, callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void): void; + export namespace resolveCaa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of objects containing both a `priority` and `exchange`property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v0.1.27 + */ + export function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void; + export namespace resolveMx { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve regular expression based records (`NAPTR`records) for the `hostname`. The `addresses` argument passed to the `callback`function will contain an array of + * objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v0.9.12 + */ + export function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void; + export namespace resolveNaptr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * contain an array of name server records available for `hostname`(e.g. `['ns1.example.com', 'ns2.example.com']`). + * @since v0.1.90 + */ + export function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export namespace resolveNs { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of strings containing the reply records. + * @since v6.0.0 + */ + export function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void; + export namespace resolvePtr { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. The `address` argument passed to the `callback` function will + * be an object with the following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v0.11.10 + */ + export function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void): void; + export namespace resolveSoa { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. The `addresses` argument passed to the `callback` function will + * be an array of objects with the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v0.1.27 + */ + export function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void; + export namespace resolveSrv { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. The `records` argument passed to the `callback` function is a + * two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v0.1.27 + */ + export function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void; + export namespace resolveTxt { + function __promisify__(hostname: string): Promise; + } + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * The `ret` argument passed to the `callback` function will be an array containing + * various types of records. Each object has a property `type` that indicates the + * type of the current record. And depending on the `type`, additional properties + * will be present on the object: + * + * + * + * Here is an example of the `ret` object passed to the callback: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * + * DNS server operators may choose not to respond to `ANY`queries. It may be better to call individual methods like {@link resolve4},{@link resolveMx}, and so on. For more details, see [RFC + * 8482](https://tools.ietf.org/html/rfc8482). + */ + export function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void; + export namespace resolveAny { + function __promisify__(hostname: string): Promise; + } + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, `err` is an `Error` object, where `err.code` is + * one of the `DNS error codes`. + * @since v0.1.16 + */ + export function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dns.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dns.setServers()` method must not be called while a DNS query is in + * progress. + * + * The {@link setServers} method affects only {@link resolve},`dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}). + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v0.11.3 + * @param servers array of `RFC 5952` formatted addresses + */ + export function setServers(servers: ReadonlyArray): void; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v0.11.3 + */ + export function getServers(): string[]; + /** + * Set the default value of `verbatim` in {@link lookup} and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `ipv4first` and {@link setDefaultResultOrder} have higher + * priority than `--dns-result-order`. When using `worker threads`,{@link setDefaultResultOrder} from the main thread won't affect the default + * dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + export function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void; + // Error codes + export const NODATA: string; + export const FORMERR: string; + export const SERVFAIL: string; + export const NOTFOUND: string; + export const NOTIMP: string; + export const REFUSED: string; + export const BADQUERY: string; + export const BADNAME: string; + export const BADFAMILY: string; + export const BADRESP: string; + export const CONNREFUSED: string; + export const TIMEOUT: string; + export const EOF: string; + export const FILE: string; + export const NOMEM: string; + export const DESTRUCTION: string; + export const BADSTR: string; + export const BADFLAGS: string; + export const NONAME: string; + export const BADHINTS: string; + export const NOTINITIALIZED: string; + export const LOADIPHLPAPI: string; + export const ADDRGETNETWORKPARAMS: string; + export const CANCELLED: string; + export interface ResolverOptions { + timeout?: number | undefined; + /** + * @default 4 + */ + tries?: number; + } + /** + * An independent resolver for DNS requests. + * + * Creating a new resolver uses the default server settings. Setting + * the servers used for a resolver using `resolver.setServers()` does not affect + * other resolvers: + * + * ```js + * const { Resolver } = require('dns'); + * const resolver = new Resolver(); + * resolver.setServers(['4.4.4.4']); + * + * // This request will use the server at 4.4.4.4, independent of global settings. + * resolver.resolve4('example.org', (err, addresses) => { + * // ... + * }); + * ``` + * + * The following methods from the `dns` module are available: + * + * * `resolver.getServers()` + * * `resolver.resolve()` + * * `resolver.resolve4()` + * * `resolver.resolve6()` + * * `resolver.resolveAny()` + * * `resolver.resolveCaa()` + * * `resolver.resolveCname()` + * * `resolver.resolveMx()` + * * `resolver.resolveNaptr()` + * * `resolver.resolveNs()` + * * `resolver.resolvePtr()` + * * `resolver.resolveSoa()` + * * `resolver.resolveSrv()` + * * `resolver.resolveTxt()` + * * `resolver.reverse()` + * * `resolver.setServers()` + * @since v8.3.0 + */ + export class Resolver { + constructor(options?: ResolverOptions); + /** + * Cancel all outstanding DNS queries made by this resolver. The corresponding + * callbacks will be called with an error with code `ECANCELLED`. + * @since v8.3.0 + */ + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + /** + * The resolver instance will send its requests from the specified IP address. + * This allows programs to specify outbound interfaces when used on multi-homed + * systems. + * + * If a v4 or v6 address is not specified, it is set to the default, and the + * operating system will choose a local address automatically. + * + * The resolver will use the v4 local address when making requests to IPv4 DNS + * servers, and the v6 local address when making requests to IPv6 DNS servers. + * The `rrtype` of resolution requests has no impact on the local address used. + * @since v15.1.0, v14.17.0 + * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. + * @param [ipv6='::0'] A string representation of an IPv6 address. + */ + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + export { dnsPromises as promises }; +} +declare module 'node:dns' { + export * from 'dns'; +} diff --git a/build/node_modules/@types/node/dns/promises.d.ts b/build/node_modules/@types/node/dns/promises.d.ts new file mode 100755 index 00000000..165b62bc --- /dev/null +++ b/build/node_modules/@types/node/dns/promises.d.ts @@ -0,0 +1,370 @@ +/** + * The `dns.promises` API provides an alternative set of asynchronous DNS methods + * that return `Promise` objects rather than using callbacks. The API is accessible + * via `require('dns').promises` or `require('dns/promises')`. + * @since v10.6.0 + */ +declare module 'dns/promises' { + import { + LookupAddress, + LookupOneOptions, + LookupAllOptions, + LookupOptions, + AnyRecord, + CaaRecord, + MxRecord, + NaptrRecord, + SoaRecord, + SrvRecord, + ResolveWithTtlOptions, + RecordWithTtl, + ResolveOptions, + ResolverOptions, + } from 'node:dns'; + /** + * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), + * that are currently configured for DNS resolution. A string will include a port + * section if a custom port is used. + * + * ```js + * [ + * '4.4.4.4', + * '2001:4860:4860::8888', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ] + * ``` + * @since v10.6.0 + */ + function getServers(): string[]; + /** + * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or + * AAAA (IPv6) record. All `option` properties are optional. If `options` is an + * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 + * and IPv6 addresses are both returned if found. + * + * With the `all` option set to `true`, the `Promise` is resolved with `addresses`being an array of objects with the properties `address` and `family`. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when + * the host name does not exist but also when the lookup fails in other ways + * such as no available file descriptors. + * + * `dnsPromises.lookup()` does not necessarily have anything to do with the DNS + * protocol. The implementation uses an operating system facility that can + * associate names with addresses, and vice versa. This implementation can have + * subtle but important consequences on the behavior of any Node.js program. Please + * take some time to consult the `Implementation considerations section` before + * using `dnsPromises.lookup()`. + * + * Example usage: + * + * ```js + * const dns = require('dns'); + * const dnsPromises = dns.promises; + * const options = { + * family: 6, + * hints: dns.ADDRCONFIG | dns.V4MAPPED, + * }; + * + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('address: %j family: IPv%s', result.address, result.family); + * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 + * }); + * + * // When options.all is true, the result will be an Array. + * options.all = true; + * dnsPromises.lookup('example.com', options).then((result) => { + * console.log('addresses: %j', result); + * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] + * }); + * ``` + * @since v10.6.0 + */ + function lookup(hostname: string, family: number): Promise; + function lookup(hostname: string, options: LookupOneOptions): Promise; + function lookup(hostname: string, options: LookupAllOptions): Promise; + function lookup(hostname: string, options: LookupOptions): Promise; + function lookup(hostname: string): Promise; + /** + * Resolves the given `address` and `port` into a host name and service using + * the operating system's underlying `getnameinfo` implementation. + * + * If `address` is not a valid IP address, a `TypeError` will be thrown. + * The `port` will be coerced to a number. If it is not a legal port, a `TypeError`will be thrown. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is the error code. + * + * ```js + * const dnsPromises = require('dns').promises; + * dnsPromises.lookupService('127.0.0.1', 22).then((result) => { + * console.log(result.hostname, result.service); + * // Prints: localhost ssh + * }); + * ``` + * @since v10.6.0 + */ + function lookupService( + address: string, + port: number + ): Promise<{ + hostname: string; + service: string; + }>; + /** + * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array + * of the resource records. When successful, the `Promise` is resolved with an + * array of resource records. The type and structure of individual results vary + * based on `rrtype`: + * + * + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the DNS error codes. + * @since v10.6.0 + * @param hostname Host name to resolve. + * @param [rrtype='A'] Resource record type. + */ + function resolve(hostname: string): Promise; + function resolve(hostname: string, rrtype: 'A'): Promise; + function resolve(hostname: string, rrtype: 'AAAA'): Promise; + function resolve(hostname: string, rrtype: 'ANY'): Promise; + function resolve(hostname: string, rrtype: 'CAA'): Promise; + function resolve(hostname: string, rrtype: 'CNAME'): Promise; + function resolve(hostname: string, rrtype: 'MX'): Promise; + function resolve(hostname: string, rrtype: 'NAPTR'): Promise; + function resolve(hostname: string, rrtype: 'NS'): Promise; + function resolve(hostname: string, rrtype: 'PTR'): Promise; + function resolve(hostname: string, rrtype: 'SOA'): Promise; + function resolve(hostname: string, rrtype: 'SRV'): Promise; + function resolve(hostname: string, rrtype: 'TXT'): Promise; + function resolve(hostname: string, rrtype: string): Promise; + /** + * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv4 + * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`). + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve4(hostname: string): Promise; + function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve4(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the`hostname`. On success, the `Promise` is resolved with an array of IPv6 + * addresses. + * @since v10.6.0 + * @param hostname Host name to resolve. + */ + function resolve6(hostname: string): Promise; + function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve6(hostname: string, options: ResolveOptions): Promise; + /** + * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). + * On success, the `Promise` is resolved with an array containing various types of + * records. Each object has a property `type` that indicates the type of the + * current record. And depending on the `type`, additional properties will be + * present on the object: + * + * + * + * Here is an example of the result object: + * + * ```js + * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, + * { type: 'CNAME', value: 'example.com' }, + * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, + * { type: 'NS', value: 'ns1.example.com' }, + * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, + * { type: 'SOA', + * nsname: 'ns1.example.com', + * hostmaster: 'admin.example.com', + * serial: 156696742, + * refresh: 900, + * retry: 900, + * expire: 1800, + * minttl: 60 } ] + * ``` + * @since v10.6.0 + */ + function resolveAny(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success, + * the `Promise` is resolved with an array of objects containing available + * certification authority authorization records available for the `hostname`(e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`). + * @since v15.0.0, v14.17.0 + */ + function resolveCaa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success, + * the `Promise` is resolved with an array of canonical name records available for + * the `hostname` (e.g. `['bar.example.com']`). + * @since v10.6.0 + */ + function resolveCname(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects + * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`). + * @since v10.6.0 + */ + function resolveMx(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve regular expression based records (`NAPTR`records) for the `hostname`. On success, the `Promise` is resolved with an array + * of objects with the following properties: + * + * * `flags` + * * `service` + * * `regexp` + * * `replacement` + * * `order` + * * `preference` + * + * ```js + * { + * flags: 's', + * service: 'SIP+D2U', + * regexp: '', + * replacement: '_sip._udp.example.com', + * order: 30, + * preference: 100 + * } + * ``` + * @since v10.6.0 + */ + function resolveNaptr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve name server records (`NS` records) for the`hostname`. On success, the `Promise` is resolved with an array of name server + * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`). + * @since v10.6.0 + */ + function resolveNs(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve pointer records (`PTR` records) for the`hostname`. On success, the `Promise` is resolved with an array of strings + * containing the reply records. + * @since v10.6.0 + */ + function resolvePtr(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for + * the `hostname`. On success, the `Promise` is resolved with an object with the + * following properties: + * + * * `nsname` + * * `hostmaster` + * * `serial` + * * `refresh` + * * `retry` + * * `expire` + * * `minttl` + * + * ```js + * { + * nsname: 'ns.example.com', + * hostmaster: 'root.example.com', + * serial: 2013101809, + * refresh: 10000, + * retry: 2400, + * expire: 604800, + * minttl: 3600 + * } + * ``` + * @since v10.6.0 + */ + function resolveSoa(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve service records (`SRV` records) for the`hostname`. On success, the `Promise` is resolved with an array of objects with + * the following properties: + * + * * `priority` + * * `weight` + * * `port` + * * `name` + * + * ```js + * { + * priority: 10, + * weight: 5, + * port: 21223, + * name: 'service.example.com' + * } + * ``` + * @since v10.6.0 + */ + function resolveSrv(hostname: string): Promise; + /** + * Uses the DNS protocol to resolve text queries (`TXT` records) for the`hostname`. On success, the `Promise` is resolved with a two-dimensional array + * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of + * one record. Depending on the use case, these could be either joined together or + * treated separately. + * @since v10.6.0 + */ + function resolveTxt(hostname: string): Promise; + /** + * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an + * array of host names. + * + * On error, the `Promise` is rejected with an `Error` object, where `err.code`is one of the DNS error codes. + * @since v10.6.0 + */ + function reverse(ip: string): Promise; + /** + * Sets the IP address and port of servers to be used when performing DNS + * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted + * addresses. If the port is the IANA default DNS port (53) it can be omitted. + * + * ```js + * dnsPromises.setServers([ + * '4.4.4.4', + * '[2001:4860:4860::8888]', + * '4.4.4.4:1053', + * '[2001:4860:4860::8888]:1053', + * ]); + * ``` + * + * An error will be thrown if an invalid address is provided. + * + * The `dnsPromises.setServers()` method must not be called while a DNS query is in + * progress. + * + * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). + * That is, if attempting to resolve with the first server provided results in a`NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with + * subsequent servers provided. Fallback DNS servers will only be used if the + * earlier ones time out or result in some other error. + * @since v10.6.0 + * @param servers array of `RFC 5952` formatted addresses + */ + function setServers(servers: ReadonlyArray): void; + /** + * Set the default value of `verbatim` in `dns.lookup()` and `dnsPromises.lookup()`. The value could be: + * + * * `ipv4first`: sets default `verbatim` `false`. + * * `verbatim`: sets default `verbatim` `true`. + * + * The default is `ipv4first` and `dnsPromises.setDefaultResultOrder()` have + * higher priority than `--dns-result-order`. When using `worker threads`,`dnsPromises.setDefaultResultOrder()` from the main thread won't affect the + * default dns orders in workers. + * @since v16.4.0, v14.18.0 + * @param order must be `'ipv4first'` or `'verbatim'`. + */ + function setDefaultResultOrder(order: 'ipv4first' | 'verbatim'): void; + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } +} +declare module 'node:dns/promises' { + export * from 'dns/promises'; +} diff --git a/build/node_modules/@types/node/domain.d.ts b/build/node_modules/@types/node/domain.d.ts new file mode 100755 index 00000000..f8dd26eb --- /dev/null +++ b/build/node_modules/@types/node/domain.d.ts @@ -0,0 +1,169 @@ +/** + * **This module is pending deprecation.** Once a replacement API has been + * finalized, this module will be fully deprecated. Most developers should**not** have cause to use this module. Users who absolutely must have + * the functionality that domains provide may rely on it for the time being + * but should expect to have to migrate to a different solution + * in the future. + * + * Domains provide a way to handle multiple different IO operations as a + * single group. If any of the event emitters or callbacks registered to a + * domain emit an `'error'` event, or throw an error, then the domain object + * will be notified, rather than losing the context of the error in the`process.on('uncaughtException')` handler, or causing the program to + * exit immediately with an error code. + * @deprecated Since v1.4.2 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/domain.js) + */ +declare module 'domain' { + import EventEmitter = require('node:events'); + /** + * The `Domain` class encapsulates the functionality of routing errors and + * uncaught exceptions to the active `Domain` object. + * + * To handle the errors that it catches, listen to its `'error'` event. + */ + class Domain extends EventEmitter { + /** + * An array of timers and event emitters that have been explicitly added + * to the domain. + */ + members: Array; + /** + * The `enter()` method is plumbing used by the `run()`, `bind()`, and`intercept()` methods to set the active domain. It sets `domain.active` and`process.domain` to the domain, and implicitly + * pushes the domain onto the domain + * stack managed by the domain module (see {@link exit} for details on the + * domain stack). The call to `enter()` delimits the beginning of a chain of + * asynchronous calls and I/O operations bound to a domain. + * + * Calling `enter()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + enter(): void; + /** + * The `exit()` method exits the current domain, popping it off the domain stack. + * Any time execution is going to switch to the context of a different chain of + * asynchronous calls, it's important to ensure that the current domain is exited. + * The call to `exit()` delimits either the end of or an interruption to the chain + * of asynchronous calls and I/O operations bound to a domain. + * + * If there are multiple, nested domains bound to the current execution context,`exit()` will exit any domains nested within this domain. + * + * Calling `exit()` changes only the active domain, and does not alter the domain + * itself. `enter()` and `exit()` can be called an arbitrary number of times on a + * single domain. + */ + exit(): void; + /** + * Run the supplied function in the context of the domain, implicitly + * binding all event emitters, timers, and lowlevel requests that are + * created in that context. Optionally, arguments can be passed to + * the function. + * + * This is the most basic way to use a domain. + * + * ```js + * const domain = require('domain'); + * const fs = require('fs'); + * const d = domain.create(); + * d.on('error', (er) => { + * console.error('Caught error!', er); + * }); + * d.run(() => { + * process.nextTick(() => { + * setTimeout(() => { // Simulating some various async stuff + * fs.open('non-existent file', 'r', (er, fd) => { + * if (er) throw er; + * // proceed... + * }); + * }, 100); + * }); + * }); + * ``` + * + * In this example, the `d.on('error')` handler will be triggered, rather + * than crashing the program. + */ + run(fn: (...args: any[]) => T, ...args: any[]): T; + /** + * Explicitly adds an emitter to the domain. If any event handlers called by + * the emitter throw an error, or if the emitter emits an `'error'` event, it + * will be routed to the domain's `'error'` event, just like with implicit + * binding. + * + * This also works with timers that are returned from `setInterval()` and `setTimeout()`. If their callback function throws, it will be caught by + * the domain `'error'` handler. + * + * If the Timer or `EventEmitter` was already bound to a domain, it is removed + * from that one, and bound to this one instead. + * @param emitter emitter or timer to be added to the domain + */ + add(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The opposite of {@link add}. Removes domain handling from the + * specified emitter. + * @param emitter emitter or timer to be removed from the domain + */ + remove(emitter: EventEmitter | NodeJS.Timer): void; + /** + * The returned function will be a wrapper around the supplied callback + * function. When the returned function is called, any errors that are + * thrown will be routed to the domain's `'error'` event. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.bind((er, data) => { + * // If this throws, it will also be passed to the domain. + * return cb(er, data ? JSON.parse(data) : null); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The bound function + */ + bind(callback: T): T; + /** + * This method is almost identical to {@link bind}. However, in + * addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function. + * + * In this way, the common `if (err) return callback(err);` pattern can be replaced + * with a single error handler in a single place. + * + * ```js + * const d = domain.create(); + * + * function readSomeFile(filename, cb) { + * fs.readFile(filename, 'utf8', d.intercept((data) => { + * // Note, the first argument is never passed to the + * // callback since it is assumed to be the 'Error' argument + * // and thus intercepted by the domain. + * + * // If this throws, it will also be passed to the domain + * // so the error-handling logic can be moved to the 'error' + * // event on the domain instead of being repeated throughout + * // the program. + * return cb(null, JSON.parse(data)); + * })); + * } + * + * d.on('error', (er) => { + * // An error occurred somewhere. If we throw it now, it will crash the program + * // with the normal line number and stack message. + * }); + * ``` + * @param callback The callback function + * @return The intercepted function + */ + intercept(callback: T): T; + } + function create(): Domain; +} +declare module 'node:domain' { + export * from 'domain'; +} diff --git a/build/node_modules/@types/node/events.d.ts b/build/node_modules/@types/node/events.d.ts new file mode 100755 index 00000000..c1cef439 --- /dev/null +++ b/build/node_modules/@types/node/events.d.ts @@ -0,0 +1,651 @@ +/** + * Much of the Node.js core API is built around an idiomatic asynchronous + * event-driven architecture in which certain kinds of objects (called "emitters") + * emit named events that cause `Function` objects ("listeners") to be called. + * + * For instance: a `net.Server` object emits an event each time a peer + * connects to it; a `fs.ReadStream` emits an event when the file is opened; + * a `stream` emits an event whenever data is available to be read. + * + * All objects that emit events are instances of the `EventEmitter` class. These + * objects expose an `eventEmitter.on()` function that allows one or more + * functions to be attached to named events emitted by the object. Typically, + * event names are camel-cased strings but any valid JavaScript property key + * can be used. + * + * When the `EventEmitter` object emits an event, all of the functions attached + * to that specific event are called _synchronously_. Any values returned by the + * called listeners are _ignored_ and discarded. + * + * The following example shows a simple `EventEmitter` instance with a single + * listener. The `eventEmitter.on()` method is used to register listeners, while + * the `eventEmitter.emit()` method is used to trigger the event. + * + * ```js + * const EventEmitter = require('events'); + * + * class MyEmitter extends EventEmitter {} + * + * const myEmitter = new MyEmitter(); + * myEmitter.on('event', () => { + * console.log('an event occurred!'); + * }); + * myEmitter.emit('event'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/events.js) + */ +declare module 'events' { + interface EventEmitterOptions { + /** + * Enables automatic capturing of promise rejection. + */ + captureRejections?: boolean | undefined; + } + interface NodeEventTarget { + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + } + interface DOMEventTarget { + addEventListener( + eventName: string, + listener: (...args: any[]) => void, + opts?: { + once: boolean; + }, + ): any; + } + interface StaticEventEmitterOptions { + signal?: AbortSignal | undefined; + } + interface EventEmitter extends NodeJS.EventEmitter {} + /** + * The `EventEmitter` class is defined and exposed by the `events` module: + * + * ```js + * const EventEmitter = require('events'); + * ``` + * + * All `EventEmitter`s emit the event `'newListener'` when new listeners are + * added and `'removeListener'` when existing listeners are removed. + * + * It supports the following option: + * @since v0.1.26 + */ + class EventEmitter { + constructor(options?: EventEmitterOptions); + /** + * Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given + * event or that is rejected if the `EventEmitter` emits `'error'` while waiting. + * The `Promise` will resolve with an array of all the arguments emitted to the + * given event. + * + * This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event + * semantics and does not listen to the `'error'` event. + * + * ```js + * const { once, EventEmitter } = require('events'); + * + * async function run() { + * const ee = new EventEmitter(); + * + * process.nextTick(() => { + * ee.emit('myevent', 42); + * }); + * + * const [value] = await once(ee, 'myevent'); + * console.log(value); + * + * const err = new Error('kaboom'); + * process.nextTick(() => { + * ee.emit('error', err); + * }); + * + * try { + * await once(ee, 'myevent'); + * } catch (err) { + * console.log('error happened', err); + * } + * } + * + * run(); + * ``` + * + * The special handling of the `'error'` event is only used when `events.once()`is used to wait for another event. If `events.once()` is used to wait for the + * '`error'` event itself, then it is treated as any other kind of event without + * special handling: + * + * ```js + * const { EventEmitter, once } = require('events'); + * + * const ee = new EventEmitter(); + * + * once(ee, 'error') + * .then(([err]) => console.log('ok', err.message)) + * .catch((err) => console.log('error', err.message)); + * + * ee.emit('error', new Error('boom')); + * + * // Prints: ok boom + * ``` + * + * An `AbortSignal` can be used to cancel waiting for the event: + * + * ```js + * const { EventEmitter, once } = require('events'); + * + * const ee = new EventEmitter(); + * const ac = new AbortController(); + * + * async function foo(emitter, event, signal) { + * try { + * await once(emitter, event, { signal }); + * console.log('event emitted!'); + * } catch (error) { + * if (error.name === 'AbortError') { + * console.error('Waiting for the event was canceled!'); + * } else { + * console.error('There was an error', error.message); + * } + * } + * } + * + * foo(ee, 'foo', ac.signal); + * ac.abort(); // Abort waiting for the event + * ee.emit('foo'); // Prints: Waiting for the event was canceled! + * ``` + * @since v11.13.0, v10.16.0 + */ + static once( + emitter: NodeEventTarget, + eventName: string | symbol, + options?: StaticEventEmitterOptions, + ): Promise; + static once(emitter: DOMEventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise; + /** + * ```js + * const { on, EventEmitter } = require('events'); + * + * (async () => { + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo')) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * })(); + * ``` + * + * Returns an `AsyncIterator` that iterates `eventName` events. It will throw + * if the `EventEmitter` emits `'error'`. It removes all listeners when + * exiting the loop. The `value` returned by each iteration is an array + * composed of the emitted event arguments. + * + * An `AbortSignal` can be used to cancel waiting on events: + * + * ```js + * const { on, EventEmitter } = require('events'); + * const ac = new AbortController(); + * + * (async () => { + * const ee = new EventEmitter(); + * + * // Emit later on + * process.nextTick(() => { + * ee.emit('foo', 'bar'); + * ee.emit('foo', 42); + * }); + * + * for await (const event of on(ee, 'foo', { signal: ac.signal })) { + * // The execution of this inner block is synchronous and it + * // processes one event at a time (even with await). Do not use + * // if concurrent execution is required. + * console.log(event); // prints ['bar'] [42] + * } + * // Unreachable here + * })(); + * + * process.nextTick(() => ac.abort()); + * ``` + * @since v13.6.0, v12.16.0 + * @param eventName The name of the event being listened for + * @return that iterates `eventName` events emitted by the `emitter` + */ + static on( + emitter: NodeJS.EventEmitter, + eventName: string, + options?: StaticEventEmitterOptions, + ): AsyncIterableIterator; + /** + * A class method that returns the number of listeners for the given `eventName`registered on the given `emitter`. + * + * ```js + * const { EventEmitter, listenerCount } = require('events'); + * const myEmitter = new EventEmitter(); + * myEmitter.on('event', () => {}); + * myEmitter.on('event', () => {}); + * console.log(listenerCount(myEmitter, 'event')); + * // Prints: 2 + * ``` + * @since v0.9.12 + * @deprecated Since v3.2.0 - Use `listenerCount` instead. + * @param emitter The emitter to query + * @param eventName The event name + */ + static listenerCount(emitter: NodeJS.EventEmitter, eventName: string | symbol): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * For `EventEmitter`s this behaves exactly the same as calling `.listeners` on + * the emitter. + * + * For `EventTarget`s this is the only way to get the event listeners for the + * event target. This is useful for debugging and diagnostic purposes. + * + * ```js + * const { getEventListeners, EventEmitter } = require('events'); + * + * { + * const ee = new EventEmitter(); + * const listener = () => console.log('Events are fun'); + * ee.on('foo', listener); + * getEventListeners(ee, 'foo'); // [listener] + * } + * { + * const et = new EventTarget(); + * const listener = () => console.log('Events are fun'); + * et.addEventListener('foo', listener); + * getEventListeners(et, 'foo'); // [listener] + * } + * ``` + * @since v15.2.0, v14.17.0 + */ + static getEventListeners(emitter: DOMEventTarget | NodeJS.EventEmitter, name: string | symbol): Function[]; + /** + * By default `EventEmitter`s will print a warning if more than `10` listeners are + * added for a particular event. This is a useful default that helps finding + * memory leaks. The `EventEmitter.setMaxListeners()` method allows the default limit to be + * modified (if eventTargets is empty) or modify the limit specified in every `EventTarget` | `EventEmitter` passed as arguments. + * The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. + * + * ```js + * EventEmitter.setMaxListeners(20); + * // Equivalent to + * EventEmitter.defaultMaxListeners = 20; + * + * const eventTarget = new EventTarget(); + * // Only way to increase limit for `EventTarget` instances + * // as these doesn't expose its own `setMaxListeners` method + * EventEmitter.setMaxListeners(20, eventTarget); + * ``` + * @since v15.3.0, v14.17.0 + */ + static setMaxListeners(n?: number, ...eventTargets: Array): void; + /** + * This symbol shall be used to install a listener for only monitoring `'error'` + * events. Listeners installed using this symbol are called before the regular + * `'error'` listeners are called. + * + * Installing a listener using this symbol does not change the behavior once an + * `'error'` event is emitted, therefore the process will still crash if no + * regular `'error'` listener is installed. + */ + static readonly errorMonitor: unique symbol; + static readonly captureRejectionSymbol: unique symbol; + /** + * Sets or gets the default captureRejection value for all emitters. + */ + // TODO: These should be described using static getter/setter pairs: + static captureRejections: boolean; + static defaultMaxListeners: number; + } + import internal = require('node:events'); + namespace EventEmitter { + // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4 + export { internal as EventEmitter }; + export interface Abortable { + /** + * When provided the corresponding `AbortController` can be used to cancel an asynchronous action. + */ + signal?: AbortSignal | undefined; + } + } + global { + namespace NodeJS { + interface EventEmitter { + /** + * Alias for `emitter.on(eventName, listener)`. + * @since v0.1.26 + */ + addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds the `listener` function to the end of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * const myEE = new EventEmitter(); + * myEE.on('foo', () => console.log('a')); + * myEE.prependListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.1.101 + * @param eventName The name of the event. + * @param listener The callback function + */ + on(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName`. The + * next time `eventName` is triggered, this listener is removed and then invoked. + * + * ```js + * server.once('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * + * By default, event listeners are invoked in the order they are added. The`emitter.prependOnceListener()` method can be used as an alternative to add the + * event listener to the beginning of the listeners array. + * + * ```js + * const myEE = new EventEmitter(); + * myEE.once('foo', () => console.log('a')); + * myEE.prependOnceListener('foo', () => console.log('b')); + * myEE.emit('foo'); + * // Prints: + * // b + * // a + * ``` + * @since v0.3.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + once(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes the specified `listener` from the listener array for the event named`eventName`. + * + * ```js + * const callback = (stream) => { + * console.log('someone connected!'); + * }; + * server.on('connection', callback); + * // ... + * server.removeListener('connection', callback); + * ``` + * + * `removeListener()` will remove, at most, one instance of a listener from the + * listener array. If any single listener has been added multiple times to the + * listener array for the specified `eventName`, then `removeListener()` must be + * called multiple times to remove each instance. + * + * Once an event is emitted, all listeners attached to it at the + * time of emitting are called in order. This implies that any`removeListener()` or `removeAllListeners()` calls _after_ emitting and_before_ the last listener finishes execution will + * not remove them from`emit()` in progress. Subsequent events behave as expected. + * + * ```js + * const myEmitter = new MyEmitter(); + * + * const callbackA = () => { + * console.log('A'); + * myEmitter.removeListener('event', callbackB); + * }; + * + * const callbackB = () => { + * console.log('B'); + * }; + * + * myEmitter.on('event', callbackA); + * + * myEmitter.on('event', callbackB); + * + * // callbackA removes listener callbackB but it will still be called. + * // Internal listener array at time of emit [callbackA, callbackB] + * myEmitter.emit('event'); + * // Prints: + * // A + * // B + * + * // callbackB is now removed. + * // Internal listener array [callbackA] + * myEmitter.emit('event'); + * // Prints: + * // A + * ``` + * + * Because listeners are managed using an internal array, calling this will + * change the position indices of any listener registered _after_ the listener + * being removed. This will not impact the order in which listeners are called, + * but it means that any copies of the listener array as returned by + * the `emitter.listeners()` method will need to be recreated. + * + * When a single function has been added as a handler multiple times for a single + * event (as in the example below), `removeListener()` will remove the most + * recently added instance. In the example the `once('ping')`listener is removed: + * + * ```js + * const ee = new EventEmitter(); + * + * function pong() { + * console.log('pong'); + * } + * + * ee.on('ping', pong); + * ee.once('ping', pong); + * ee.removeListener('ping', pong); + * + * ee.emit('ping'); + * ee.emit('ping'); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Alias for `emitter.removeListener()`. + * @since v10.0.0 + */ + off(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Removes all listeners, or those of the specified `eventName`. + * + * It is bad practice to remove listeners added elsewhere in the code, + * particularly when the `EventEmitter` instance was created by some other + * component or module (e.g. sockets or file streams). + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.1.26 + */ + removeAllListeners(event?: string | symbol): this; + /** + * By default `EventEmitter`s will print a warning if more than `10` listeners are + * added for a particular event. This is a useful default that helps finding + * memory leaks. The `emitter.setMaxListeners()` method allows the limit to be + * modified for this specific `EventEmitter` instance. The value can be set to`Infinity` (or `0`) to indicate an unlimited number of listeners. + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v0.3.5 + */ + setMaxListeners(n: number): this; + /** + * Returns the current max listener value for the `EventEmitter` which is either + * set by `emitter.setMaxListeners(n)` or defaults to {@link defaultMaxListeners}. + * @since v1.0.0 + */ + getMaxListeners(): number; + /** + * Returns a copy of the array of listeners for the event named `eventName`. + * + * ```js + * server.on('connection', (stream) => { + * console.log('someone connected!'); + * }); + * console.log(util.inspect(server.listeners('connection'))); + * // Prints: [ [Function] ] + * ``` + * @since v0.1.26 + */ + listeners(eventName: string | symbol): Function[]; + /** + * Returns a copy of the array of listeners for the event named `eventName`, + * including any wrappers (such as those created by `.once()`). + * + * ```js + * const emitter = new EventEmitter(); + * emitter.once('log', () => console.log('log once')); + * + * // Returns a new Array with a function `onceWrapper` which has a property + * // `listener` which contains the original listener bound above + * const listeners = emitter.rawListeners('log'); + * const logFnWrapper = listeners[0]; + * + * // Logs "log once" to the console and does not unbind the `once` event + * logFnWrapper.listener(); + * + * // Logs "log once" to the console and removes the listener + * logFnWrapper(); + * + * emitter.on('log', () => console.log('log persistently')); + * // Will return a new Array with a single function bound by `.on()` above + * const newListeners = emitter.rawListeners('log'); + * + * // Logs "log persistently" twice + * newListeners[0](); + * emitter.emit('log'); + * ``` + * @since v9.4.0 + */ + rawListeners(eventName: string | symbol): Function[]; + /** + * Synchronously calls each of the listeners registered for the event named`eventName`, in the order they were registered, passing the supplied arguments + * to each. + * + * Returns `true` if the event had listeners, `false` otherwise. + * + * ```js + * const EventEmitter = require('events'); + * const myEmitter = new EventEmitter(); + * + * // First listener + * myEmitter.on('event', function firstListener() { + * console.log('Helloooo! first listener'); + * }); + * // Second listener + * myEmitter.on('event', function secondListener(arg1, arg2) { + * console.log(`event with parameters ${arg1}, ${arg2} in second listener`); + * }); + * // Third listener + * myEmitter.on('event', function thirdListener(...args) { + * const parameters = args.join(', '); + * console.log(`event with parameters ${parameters} in third listener`); + * }); + * + * console.log(myEmitter.listeners('event')); + * + * myEmitter.emit('event', 1, 2, 3, 4, 5); + * + * // Prints: + * // [ + * // [Function: firstListener], + * // [Function: secondListener], + * // [Function: thirdListener] + * // ] + * // Helloooo! first listener + * // event with parameters 1, 2 in second listener + * // event with parameters 1, 2, 3, 4, 5 in third listener + * ``` + * @since v0.1.26 + */ + emit(eventName: string | symbol, ...args: any[]): boolean; + /** + * Returns the number of listeners listening to the event named `eventName`. + * @since v3.2.0 + * @param eventName The name of the event being listened for + */ + listenerCount(eventName: string | symbol): number; + /** + * Adds the `listener` function to the _beginning_ of the listeners array for the + * event named `eventName`. No checks are made to see if the `listener` has + * already been added. Multiple calls passing the same combination of `eventName`and `listener` will result in the `listener` being added, and called, multiple + * times. + * + * ```js + * server.prependListener('connection', (stream) => { + * console.log('someone connected!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Adds a **one-time**`listener` function for the event named `eventName` to the_beginning_ of the listeners array. The next time `eventName` is triggered, this + * listener is removed, and then invoked. + * + * ```js + * server.prependOnceListener('connection', (stream) => { + * console.log('Ah, we have our first user!'); + * }); + * ``` + * + * Returns a reference to the `EventEmitter`, so that calls can be chained. + * @since v6.0.0 + * @param eventName The name of the event. + * @param listener The callback function + */ + prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; + /** + * Returns an array listing the events for which the emitter has registered + * listeners. The values in the array are strings or `Symbol`s. + * + * ```js + * const EventEmitter = require('events'); + * const myEE = new EventEmitter(); + * myEE.on('foo', () => {}); + * myEE.on('bar', () => {}); + * + * const sym = Symbol('symbol'); + * myEE.on(sym, () => {}); + * + * console.log(myEE.eventNames()); + * // Prints: [ 'foo', 'bar', Symbol(symbol) ] + * ``` + * @since v6.0.0 + */ + eventNames(): Array; + } + } + } + export = EventEmitter; +} +declare module 'node:events' { + import events = require('events'); + export = events; +} diff --git a/build/node_modules/@types/node/fs.d.ts b/build/node_modules/@types/node/fs.d.ts new file mode 100755 index 00000000..c220c039 --- /dev/null +++ b/build/node_modules/@types/node/fs.d.ts @@ -0,0 +1,3869 @@ +/** + * The `fs` module enables interacting with the file system in a + * way modeled on standard POSIX functions. + * + * To use the promise-based APIs: + * + * ```js + * import * as fs from 'fs/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as fs from 'fs'; + * ``` + * + * All file system operations have synchronous, callback, and promise-based + * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM). + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/fs.js) + */ +declare module 'fs' { + import * as stream from 'node:stream'; + import { Abortable, EventEmitter } from 'node:events'; + import { URL } from 'node:url'; + import * as promises from 'node:fs/promises'; + export { promises }; + /** + * Valid types for path values in "fs". + */ + export type PathLike = string | Buffer | URL; + export type PathOrFileDescriptor = PathLike | number; + export type TimeLike = string | number | Date; + export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; + export type BufferEncodingOption = + | 'buffer' + | { + encoding: 'buffer'; + }; + export interface ObjectEncodingOptions { + encoding?: BufferEncoding | null | undefined; + } + export type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null; + export type OpenMode = number | string; + export type Mode = number | string; + export interface StatsBase { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: T; + ino: T; + mode: T; + nlink: T; + uid: T; + gid: T; + rdev: T; + size: T; + blksize: T; + blocks: T; + atimeMs: T; + mtimeMs: T; + ctimeMs: T; + birthtimeMs: T; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + export interface Stats extends StatsBase {} + /** + * A `fs.Stats` object provides information about a file. + * + * Objects returned from {@link stat}, {@link lstat} and {@link fstat} and + * their synchronous counterparts are of this type. + * If `bigint` in the `options` passed to those methods is true, the numeric values + * will be `bigint` instead of `number`, and the object will contain additional + * nanosecond-precision properties suffixed with `Ns`. + * + * ```console + * Stats { + * dev: 2114, + * ino: 48064969, + * mode: 33188, + * nlink: 1, + * uid: 85, + * gid: 100, + * rdev: 0, + * size: 527, + * blksize: 4096, + * blocks: 8, + * atimeMs: 1318289051000.1, + * mtimeMs: 1318289051000.1, + * ctimeMs: 1318289051000.1, + * birthtimeMs: 1318289051000.1, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * + * `bigint` version: + * + * ```console + * BigIntStats { + * dev: 2114n, + * ino: 48064969n, + * mode: 33188n, + * nlink: 1n, + * uid: 85n, + * gid: 100n, + * rdev: 0n, + * size: 527n, + * blksize: 4096n, + * blocks: 8n, + * atimeMs: 1318289051000n, + * mtimeMs: 1318289051000n, + * ctimeMs: 1318289051000n, + * birthtimeMs: 1318289051000n, + * atimeNs: 1318289051000000000n, + * mtimeNs: 1318289051000000000n, + * ctimeNs: 1318289051000000000n, + * birthtimeNs: 1318289051000000000n, + * atime: Mon, 10 Oct 2011 23:24:11 GMT, + * mtime: Mon, 10 Oct 2011 23:24:11 GMT, + * ctime: Mon, 10 Oct 2011 23:24:11 GMT, + * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } + * ``` + * @since v0.1.21 + */ + export class Stats {} + /** + * A representation of a directory entry, which can be a file or a subdirectory + * within the directory, as returned by reading from an `fs.Dir`. The + * directory entry is a combination of the file name and file type pairs. + * + * Additionally, when {@link readdir} or {@link readdirSync} is called with + * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s. + * @since v10.10.0 + */ + export class Dirent { + /** + * Returns `true` if the `fs.Dirent` object describes a regular file. + * @since v10.10.0 + */ + isFile(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a file system + * directory. + * @since v10.10.0 + */ + isDirectory(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a block device. + * @since v10.10.0 + */ + isBlockDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a character device. + * @since v10.10.0 + */ + isCharacterDevice(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a symbolic link. + * @since v10.10.0 + */ + isSymbolicLink(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a first-in-first-out + * (FIFO) pipe. + * @since v10.10.0 + */ + isFIFO(): boolean; + /** + * Returns `true` if the `fs.Dirent` object describes a socket. + * @since v10.10.0 + */ + isSocket(): boolean; + /** + * The file name that this `fs.Dirent` object refers to. The type of this + * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}. + * @since v10.10.0 + */ + name: string; + } + /** + * A class representing a directory stream. + * + * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`. + * + * ```js + * import { opendir } from 'fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + */ + export class Dir implements AsyncIterable { + /** + * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`. + * @since v12.12.0 + */ + readonly path: string; + /** + * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. + */ + [Symbol.asyncIterator](): AsyncIterableIterator; + /** + * Asynchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * + * A promise is returned that will be resolved after the resource has been + * closed. + * @since v12.12.0 + */ + close(): Promise; + close(cb: NoParamCallback): void; + /** + * Synchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + * @since v12.12.0 + */ + closeSync(): void; + /** + * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`. + * + * A promise is returned that will be resolved with an `fs.Dirent`, or `null`if there are no more directory entries to read. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + * @return containing {fs.Dirent|null} + */ + read(): Promise; + read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; + /** + * Synchronously read the next directory entry as an `fs.Dirent`. See the + * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail. + * + * If there are no more directory entries to read, `null` will be returned. + * + * Directory entries returned by this function are in no particular order as + * provided by the operating system's underlying directory mechanisms. + * Entries added or removed while iterating over the directory might not be + * included in the iteration results. + * @since v12.12.0 + */ + readSync(): Dirent | null; + } + /** + * Class: fs.StatWatcher + * @since v14.3.0, v12.20.0 + * Extends `EventEmitter` + * A successful call to {@link watchFile} method will return a new fs.StatWatcher object. + */ + export interface StatWatcher extends EventEmitter { + /** + * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have + * no effect. + * + * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally + * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been + * called previously. + * @since v14.3.0, v12.20.0 + */ + ref(): this; + /** + * When called, the active `fs.StatWatcher` object will not require the Node.js + * event loop to remain active. If there is no other activity keeping the + * event loop running, the process may exit before the `fs.StatWatcher` object's + * callback is invoked. Calling `watcher.unref()` multiple times will have + * no effect. + * @since v14.3.0, v12.20.0 + */ + unref(): this; + } + export interface FSWatcher extends EventEmitter { + /** + * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable. + * @since v0.5.8 + */ + close(): void; + /** + * events.EventEmitter + * 1. change + * 2. error + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this; + addListener(event: 'error', listener: (error: Error) => void): this; + addListener(event: 'close', listener: () => void): this; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this; + on(event: 'error', listener: (error: Error) => void): this; + on(event: 'close', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this; + once(event: 'error', listener: (error: Error) => void): this; + once(event: 'close', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this; + prependListener(event: 'error', listener: (error: Error) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'change', listener: (eventType: string, filename: string | Buffer) => void): this; + prependOnceListener(event: 'error', listener: (error: Error) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + } + /** + * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function. + * @since v0.1.93 + */ + export class ReadStream extends stream.Readable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes that have been read so far. + * @since v6.4.0 + */ + bytesRead: number; + /** + * The path to the file the stream is reading from as specified in the first + * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a + * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0, v10.16.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: 'close', listener: () => void): this; + addListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'open', listener: (fd: number) => void): this; + addListener(event: 'pause', listener: () => void): this; + addListener(event: 'readable', listener: () => void): this; + addListener(event: 'ready', listener: () => void): this; + addListener(event: 'resume', listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'data', listener: (chunk: Buffer | string) => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'open', listener: (fd: number) => void): this; + on(event: 'pause', listener: () => void): this; + on(event: 'readable', listener: () => void): this; + on(event: 'ready', listener: () => void): this; + on(event: 'resume', listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'data', listener: (chunk: Buffer | string) => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'open', listener: (fd: number) => void): this; + once(event: 'pause', listener: () => void): this; + once(event: 'readable', listener: () => void): this; + once(event: 'ready', listener: () => void): this; + once(event: 'resume', listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'open', listener: (fd: number) => void): this; + prependListener(event: 'pause', listener: () => void): this; + prependListener(event: 'readable', listener: () => void): this; + prependListener(event: 'ready', listener: () => void): this; + prependListener(event: 'resume', listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'open', listener: (fd: number) => void): this; + prependOnceListener(event: 'pause', listener: () => void): this; + prependOnceListener(event: 'readable', listener: () => void): this; + prependOnceListener(event: 'ready', listener: () => void): this; + prependOnceListener(event: 'resume', listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * * Extends `stream.Writable` + * + * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function. + * @since v0.1.93 + */ + export class WriteStream extends stream.Writable { + /** + * Closes `writeStream`. Optionally accepts a + * callback that will be executed once the `writeStream`is closed. + * @since v0.9.4 + */ + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + /** + * The number of bytes written so far. Does not include data that is still queued + * for writing. + * @since v0.4.7 + */ + bytesWritten: number; + /** + * The path to the file the stream is writing to as specified in the first + * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a + * `Buffer`. + * @since v0.1.93 + */ + path: string | Buffer; + /** + * This property is `true` if the underlying file has not been opened yet, + * i.e. before the `'ready'` event is emitted. + * @since v11.2.0 + */ + pending: boolean; + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: 'close', listener: () => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'open', listener: (fd: number) => void): this; + addListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + addListener(event: 'ready', listener: () => void): this; + addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'open', listener: (fd: number) => void): this; + on(event: 'pipe', listener: (src: stream.Readable) => void): this; + on(event: 'ready', listener: () => void): this; + on(event: 'unpipe', listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'open', listener: (fd: number) => void): this; + once(event: 'pipe', listener: (src: stream.Readable) => void): this; + once(event: 'ready', listener: () => void): this; + once(event: 'unpipe', listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'open', listener: (fd: number) => void): this; + prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependListener(event: 'ready', listener: () => void): this; + prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'open', listener: (fd: number) => void): this; + prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: 'ready', listener: () => void): this; + prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * Asynchronously rename file at `oldPath` to the pathname provided + * as `newPath`. In the case that `newPath` already exists, it will + * be overwritten. If there is a directory at `newPath`, an error will + * be raised instead. No arguments other than a possible exception are + * given to the completion callback. + * + * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html). + * + * ```js + * import { rename } from 'fs'; + * + * rename('oldFile.txt', 'newFile.txt', (err) => { + * if (err) throw err; + * console.log('Rename complete!'); + * }); + * ``` + * @since v0.0.2 + */ + export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace rename { + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; + } + /** + * Renames the file from `oldPath` to `newPath`. Returns `undefined`. + * + * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details. + * @since v0.1.21 + */ + export function renameSync(oldPath: PathLike, newPath: PathLike): void; + /** + * Truncates the file. No arguments other than a possible exception are + * given to the completion callback. A file descriptor can also be passed as the + * first argument. In this case, `fs.ftruncate()` is called. + * + * ```js + * import { truncate } from 'fs'; + * // Assuming that 'path/file.txt' is a regular file. + * truncate('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was truncated'); + * }); + * ``` + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * + * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details. + * @since v0.8.6 + * @param [len=0] + */ + export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function truncate(path: PathLike, callback: NoParamCallback): void; + export namespace truncate { + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(path: PathLike, len?: number | null): Promise; + } + /** + * Truncates the file. Returns `undefined`. A file descriptor can also be + * passed as the first argument. In this case, `fs.ftruncateSync()` is called. + * + * Passing a file descriptor is deprecated and may result in an error being thrown + * in the future. + * @since v0.8.6 + * @param [len=0] + */ + export function truncateSync(path: PathLike, len?: number | null): void; + /** + * Truncates the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail. + * + * If the file referred to by the file descriptor was larger than `len` bytes, only + * the first `len` bytes will be retained in the file. + * + * For example, the following program retains only the first four bytes of the + * file: + * + * ```js + * import { open, close, ftruncate } from 'fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('temp.txt', 'r+', (err, fd) => { + * if (err) throw err; + * + * try { + * ftruncate(fd, 4, (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * if (err) throw err; + * } + * }); + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + */ + export function ftruncate(fd: number, callback: NoParamCallback): void; + export namespace ftruncate { + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(fd: number, len?: number | null): Promise; + } + /** + * Truncates the file descriptor. Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link ftruncate}. + * @since v0.8.6 + * @param [len=0] + */ + export function ftruncateSync(fd: number, len?: number | null): void; + /** + * Asynchronously changes owner and group of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace chown { + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Synchronously changes owner and group of a file. Returns `undefined`. + * This is the synchronous version of {@link chown}. + * + * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. + * @since v0.1.97 + */ + export function chownSync(path: PathLike, uid: number, gid: number): void; + /** + * Sets the owner of the file. No arguments other than a possible exception are + * given to the completion callback. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; + export namespace fchown { + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, uid: number, gid: number): Promise; + } + /** + * Sets the owner of the file. Returns `undefined`. + * + * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. + * @since v0.4.7 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function fchownSync(fd: number, uid: number, gid: number): void; + /** + * Set the owner of the symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail. + */ + export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + export namespace lchown { + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + /** + * Set the owner for the path. Returns `undefined`. + * + * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details. + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + */ + export function lchownSync(path: PathLike, uid: number, gid: number): void; + /** + * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic + * link, then the link is not dereferenced: instead, the timestamps of the + * symbolic link itself are changed. + * + * No arguments other than a possible exception are given to the completion + * callback. + * @since v14.5.0, v12.19.0 + */ + export function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace lutimes { + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Change the file system timestamps of the symbolic link referenced by `path`. + * Returns `undefined`, or throws an exception when parameters are incorrect or + * the operation fails. This is the synchronous version of {@link lutimes}. + * @since v14.5.0, v12.19.0 + */ + export function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Asynchronously changes the permissions of a file. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * + * ```js + * import { chmod } from 'fs'; + * + * chmod('my_file.txt', 0o775, (err) => { + * if (err) throw err; + * console.log('The permissions for file "my_file.txt" have been changed!'); + * }); + * ``` + * @since v0.1.30 + */ + export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + export namespace chmod { + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link chmod}. + * + * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. + * @since v0.6.7 + */ + export function chmodSync(path: PathLike, mode: Mode): void; + /** + * Sets the permissions on the file. No arguments other than a possible exception + * are given to the completion callback. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; + export namespace fchmod { + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(fd: number, mode: Mode): Promise; + } + /** + * Sets the permissions on the file. Returns `undefined`. + * + * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. + * @since v0.4.7 + */ + export function fchmodSync(fd: number, mode: Mode): void; + /** + * Changes the permissions on a symbolic link. No arguments other than a possible + * exception are given to the completion callback. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + /** @deprecated */ + export namespace lchmod { + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + /** + * Changes the permissions on a symbolic link. Returns `undefined`. + * + * This method is only implemented on macOS. + * + * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. + * @deprecated Since v0.4.7 + */ + export function lchmodSync(path: PathLike, mode: Mode): void; + /** + * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object. + * + * In case of an error, the `err.code` will be one of `Common System Errors`. + * + * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()` is not recommended. + * Instead, user code should open/read/write the file directly and handle the + * error raised if the file is not available. + * + * To check if a file exists without manipulating it afterwards, {@link access} is recommended. + * + * For example, given the following directory structure: + * + * ```text + * - txtDir + * -- file.txt + * - app.js + * ``` + * + * The next program will check for the stats of the given paths: + * + * ```js + * import { stat } from 'fs'; + * + * const pathsToCheck = ['./txtDir', './txtDir/file.txt']; + * + * for (let i = 0; i < pathsToCheck.length; i++) { + * stat(pathsToCheck[i], (err, stats) => { + * console.log(stats.isDirectory()); + * console.log(stats); + * }); + * } + * ``` + * + * The resulting output will resemble: + * + * ```console + * true + * Stats { + * dev: 16777220, + * mode: 16877, + * nlink: 3, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214262, + * size: 96, + * blocks: 0, + * atimeMs: 1561174653071.963, + * mtimeMs: 1561174614583.3518, + * ctimeMs: 1561174626623.5366, + * birthtimeMs: 1561174126937.2893, + * atime: 2019-06-22T03:37:33.072Z, + * mtime: 2019-06-22T03:36:54.583Z, + * ctime: 2019-06-22T03:37:06.624Z, + * birthtime: 2019-06-22T03:28:46.937Z + * } + * false + * Stats { + * dev: 16777220, + * mode: 33188, + * nlink: 1, + * uid: 501, + * gid: 20, + * rdev: 0, + * blksize: 4096, + * ino: 14214074, + * size: 8, + * blocks: 8, + * atimeMs: 1561174616618.8555, + * mtimeMs: 1561174614584, + * ctimeMs: 1561174614583.8145, + * birthtimeMs: 1561174007710.7478, + * atime: 2019-06-22T03:36:56.619Z, + * mtime: 2019-06-22T03:36:54.584Z, + * ctime: 2019-06-22T03:36:54.584Z, + * birthtime: 2019-06-22T03:26:47.711Z + * } + * ``` + * @since v0.0.2 + */ + export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function stat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void + ): void; + export function stat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void + ): void; + export function stat(path: PathLike, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void; + export namespace stat { + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + } + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + export interface StatSyncFn extends Function { + (path: PathLike, options?: undefined): Stats; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + throwIfNoEntry: false; + } + ): Stats | undefined; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + throwIfNoEntry: false; + } + ): BigIntStats | undefined; + ( + path: PathLike, + options?: StatSyncOptions & { + bigint?: false | undefined; + } + ): Stats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: true; + } + ): BigIntStats; + ( + path: PathLike, + options: StatSyncOptions & { + bigint: boolean; + throwIfNoEntry?: false | undefined; + } + ): Stats | BigIntStats; + (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined; + } + /** + * Synchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const statSync: StatSyncFn; + /** + * Invokes the callback with the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function fstat( + fd: number, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void + ): void; + export function fstat( + fd: number, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void + ): void; + export function fstat(fd: number, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void; + export namespace fstat { + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + function __promisify__( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + function __promisify__( + fd: number, + options: StatOptions & { + bigint: true; + } + ): Promise; + function __promisify__(fd: number, options?: StatOptions): Promise; + } + /** + * Retrieves the `fs.Stats` for the file descriptor. + * + * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. + * @since v0.1.95 + */ + export function fstatSync( + fd: number, + options?: StatOptions & { + bigint?: false | undefined; + } + ): Stats; + export function fstatSync( + fd: number, + options: StatOptions & { + bigint: true; + } + ): BigIntStats; + export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; + /** + * Retrieves the `fs.Stats` for the symbolic link referred to by the path. + * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic + * link, then the link itself is stat-ed, not the file that it refers to. + * + * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details. + * @since v0.1.30 + */ + export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function lstat( + path: PathLike, + options: + | (StatOptions & { + bigint?: false | undefined; + }) + | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void + ): void; + export function lstat( + path: PathLike, + options: StatOptions & { + bigint: true; + }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void + ): void; + export function lstat(path: PathLike, options: StatOptions | undefined, callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void): void; + export namespace lstat { + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__( + path: PathLike, + options?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + function __promisify__( + path: PathLike, + options: StatOptions & { + bigint: true; + } + ): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + /** + * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export const lstatSync: StatSyncFn; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than + * a possible + * exception are given to the completion callback. + * @since v0.1.31 + */ + export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + export namespace link { + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; + } + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.31 + */ + export function linkSync(existingPath: PathLike, newPath: PathLike): void; + /** + * Creates the link called `path` pointing to `target`. No arguments other than a + * possible exception are given to the completion callback. + * + * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details. + * + * The `type` argument is only available on Windows and ignored on other platforms. + * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is + * not set, Node.js will autodetect `target` type and use `'file'` or `'dir'`. If + * the `target` does not exist, `'file'` will be used. Windows junction points + * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path. + * + * Relative targets are relative to the link’s parent directory. + * + * ```js + * import { symlink } from 'fs'; + * + * symlink('./mew', './example/mewtwo', callback); + * ``` + * + * The above example creates a symbolic link `mewtwo` in the `example` which points + * to `mew` in the same directory: + * + * ```bash + * $ tree example/ + * example/ + * ├── mew + * └── mewtwo -> ./mew + * ``` + * @since v0.1.31 + */ + export function symlink(target: PathLike, path: PathLike, type: symlink.Type | undefined | null, callback: NoParamCallback): void; + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + */ + export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; + export namespace symlink { + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; + type Type = 'dir' | 'file' | 'junction'; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link symlink}. + * @since v0.1.31 + */ + export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; + /** + * Reads the contents of the symbolic link referred to by `path`. The callback gets + * two arguments `(err, linkString)`. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path passed to the callback. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlink(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void): void; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void; + export namespace readlink { + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + } + /** + * Returns the symbolic link's string value. + * + * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, + * the link path returned will be passed as a `Buffer` object. + * @since v0.1.31 + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer; + /** + * Asynchronously computes the canonical pathname by resolving `.`, `..` and + * symbolic links. + * + * A canonical pathname is not necessarily unique. Hard links and bind mounts can + * expose a file system entity through many pathnames. + * + * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions: + * + * 1. No case conversion is performed on case-insensitive file systems. + * 2. The maximum number of symbolic links is platform-independent and generally + * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports. + * + * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd`to resolve relative paths. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * If `path` resolves to a socket or a pipe, the function will return a system + * dependent name for that object. + * @since v0.1.31 + */ + export function realpath(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void; + export namespace realpath { + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: EncodingOption): Promise; + /** + * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html). + * + * The `callback` gets two arguments `(err, resolvedPath)`. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path passed to the callback. If the `encoding` is set to `'buffer'`, + * the path returned will be passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v9.2.0 + */ + function native(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void; + function native(path: PathLike, options: BufferEncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void; + function native(path: PathLike, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void; + function native(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void; + } + /** + * Returns the resolved pathname. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link realpath}. + * @since v0.1.31 + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer; + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: EncodingOption): string | Buffer; + export namespace realpathSync { + function native(path: PathLike, options?: EncodingOption): string; + function native(path: PathLike, options: BufferEncodingOption): Buffer; + function native(path: PathLike, options?: EncodingOption): string | Buffer; + } + /** + * Asynchronously removes a file or symbolic link. No arguments other than a + * possible exception are given to the completion callback. + * + * ```js + * import { unlink } from 'fs'; + * // Assuming that 'path/file.txt' is a regular file. + * unlink('path/file.txt', (err) => { + * if (err) throw err; + * console.log('path/file.txt was deleted'); + * }); + * ``` + * + * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a + * directory, use {@link rmdir}. + * + * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details. + * @since v0.0.2 + */ + export function unlink(path: PathLike, callback: NoParamCallback): void; + export namespace unlink { + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`. + * @since v0.1.21 + */ + export function unlinkSync(path: PathLike): void; + export interface RmDirOptions { + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * @deprecated since v14.14.0 In future versions of Node.js and will trigger a warning + * `fs.rmdir(path, { recursive: true })` will throw if `path` does not exist or is a file. + * Use `fs.rm(path, { recursive: true, force: true })` instead. + * + * If `true`, perform a recursive directory removal. In + * recursive mode soperations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given + * to the completion callback. + * + * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on + * Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`. + * @since v0.0.2 + */ + export function rmdir(path: PathLike, callback: NoParamCallback): void; + export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void; + export namespace rmdir { + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: RmDirOptions): Promise; + } + /** + * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`. + * + * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error + * on Windows and an `ENOTDIR` error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`. + * @since v0.1.21 + */ + export function rmdirSync(path: PathLike, options?: RmDirOptions): void; + export interface RmOptions { + /** + * When `true`, exceptions will be ignored if `path` does not exist. + * @default false + */ + force?: boolean | undefined; + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * If `true`, perform a recursive directory removal. In + * recursive mode, operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm`utility). No arguments other than a possible exception are given to the + * completion callback. + * @since v14.14.0 + */ + export function rm(path: PathLike, callback: NoParamCallback): void; + export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; + export namespace rm { + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function __promisify__(path: PathLike, options?: RmOptions): Promise; + } + /** + * Synchronously removes files and directories (modeled on the standard POSIX `rm`utility). Returns `undefined`. + * @since v14.14.0 + */ + export function rmSync(path: PathLike, options?: RmOptions): void; + export interface MakeDirectoryOptions { + /** + * Indicates whether parent folders should be created. + * If a folder was created, the path to the first created folder will be returned. + * @default false + */ + recursive?: boolean | undefined; + /** + * A file mode. If a string is passed, it is parsed as an octal integer. If not specified + * @default 0o777 + */ + mode?: Mode | undefined; + } + /** + * Asynchronously creates a directory. + * + * The callback is given a possible exception and, if `recursive` is `true`, the + * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was + * created. + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fs.mkdir()` when `path` is a directory that + * exists results in an error only + * when `recursive` is false. + * + * ```js + * import { mkdir } from 'fs'; + * + * // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist. + * mkdir('/tmp/a/apple', { recursive: true }, (err) => { + * if (err) throw err; + * }); + * ``` + * + * On Windows, using `fs.mkdir()` on the root directory even with recursion will + * result in an error: + * + * ```js + * import { mkdir } from 'fs'; + * + * mkdir('/', { recursive: true }, (err) => { + * // => [Error: EPERM: operation not permitted, mkdir 'C:\'] + * }); + * ``` + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.8 + */ + export function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + }, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + | undefined, + callback: NoParamCallback + ): void; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir(path: PathLike, options: Mode | MakeDirectoryOptions | null | undefined, callback: (err: NodeJS.ErrnoException | null, path?: string) => void): void; + /** + * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function mkdir(path: PathLike, callback: NoParamCallback): void; + export namespace mkdir { + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + } + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + } + /** + * Synchronously creates a directory. Returns `undefined`, or if `recursive` is`true`, the first directory path created. + * This is the synchronous version of {@link mkdir}. + * + * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. + * @since v0.1.21 + */ + export function mkdirSync( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + } + ): string | undefined; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + ): void; + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; + /** + * Creates a unique temporary directory. + * + * Generates six random characters to be appended behind a required`prefix` to create a unique temporary directory. Due to platform + * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms, + * notably the BSDs, can return more than six random characters, and replace + * trailing `X` characters in `prefix` with random characters. + * + * The created directory path is passed as a string to the callback's second + * parameter. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'fs'; + * + * mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2 + * }); + * ``` + * + * The `fs.mkdtemp()` method will append the six randomly selected characters + * directly to the `prefix` string. For instance, given a directory `/tmp`, if the + * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator + * (`require('path').sep`). + * + * ```js + * import { tmpdir } from 'os'; + * import { mkdtemp } from 'fs'; + * + * // The parent directory for the new temporary directory + * const tmpDir = tmpdir(); + * + * // This method is *INCORRECT*: + * mkdtemp(tmpDir, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmpabc123`. + * // A new temporary directory is created at the file system root + * // rather than *within* the /tmp directory. + * }); + * + * // This method is *CORRECT*: + * import { sep } from 'path'; + * mkdtemp(`${tmpDir}${sep}`, (err, directory) => { + * if (err) throw err; + * console.log(directory); + * // Will print something similar to `/tmp/abc123`. + * // A new temporary directory is created within + * // the /tmp directory. + * }); + * ``` + * @since v5.10.0 + */ + export function mkdtemp(prefix: string, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: + | 'buffer' + | { + encoding: 'buffer'; + }, + callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void + ): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp(prefix: string, options: EncodingOption, callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void): void; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + */ + export function mkdtemp(prefix: string, callback: (err: NodeJS.ErrnoException | null, folder: string) => void): void; + export namespace mkdtemp { + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: EncodingOption): Promise; + } + /** + * Returns the created directory path. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link mkdtemp}. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * @since v5.10.0 + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer; + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer; + /** + * Reads the contents of a directory. The callback gets two arguments `(err, files)`where `files` is an array of the names of the files in the directory excluding`'.'` and `'..'`. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames passed to the callback. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects. + * @since v0.1.8 + */ + export function readdir( + path: PathLike, + options: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + } + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | { + encoding: 'buffer'; + withFileTypes?: false | undefined; + } + | 'buffer', + callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + }) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void + ): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readdir(path: PathLike, callback: (err: NodeJS.ErrnoException | null, files: string[]) => void): void; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + }, + callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void + ): void; + export namespace readdir { + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + } + | BufferEncoding + | null + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options: + | 'buffer' + | { + encoding: 'buffer'; + withFileTypes?: false | undefined; + } + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + }) + | BufferEncoding + | null + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent + */ + function __promisify__( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + } + ): Promise; + } + /** + * Reads the contents of the directory. + * + * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames returned. If the `encoding` is set to `'buffer'`, + * the filenames returned will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects. + * @since v0.1.21 + */ + export function readdirSync( + path: PathLike, + options?: + | { + encoding: BufferEncoding | null; + withFileTypes?: false | undefined; + } + | BufferEncoding + | null + ): string[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options: + | { + encoding: 'buffer'; + withFileTypes?: false | undefined; + } + | 'buffer' + ): Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + }) + | BufferEncoding + | null + ): string[] | Buffer[]; + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdirSync( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + } + ): Dirent[]; + /** + * Closes the file descriptor. No arguments other than a possible exception are + * given to the completion callback. + * + * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.0.2 + */ + export function close(fd: number, callback?: NoParamCallback): void; + export namespace close { + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Closes the file descriptor. Returns `undefined`. + * + * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use + * through any other `fs` operation may lead to undefined behavior. + * + * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. + * @since v0.1.21 + */ + export function closeSync(fd: number): void; + /** + * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details. + * + * `mode` sets the file mode (permission and sticky bits), but only if the file was + * created. On Windows, only the write permission can be manipulated; see {@link chmod}. + * + * The callback gets two arguments `(err, fd)`. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * + * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc. + * @since v0.0.2 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] + */ + export function open(path: PathLike, flags: OpenMode, mode: Mode | undefined | null, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function open(path: PathLike, flags: OpenMode, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + export namespace open { + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; + } + /** + * Returns an integer representing the file descriptor. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link open}. + * @since v0.1.21 + * @param [flags='r'] + * @param [mode=0o666] + */ + export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time in seconds,`Date`s, or a numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity` or`-Infinity`, an `Error` will be thrown. + * @since v0.4.2 + */ + export function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace utimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Returns `undefined`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link utimes}. + * @since v0.4.2 + */ + export function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; + /** + * Change the file system timestamps of the object referenced by the supplied file + * descriptor. See {@link utimes}. + * @since v0.4.2 + */ + export function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; + export namespace futimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise; + } + /** + * Synchronous version of {@link futimes}. Returns `undefined`. + * @since v0.4.2 + */ + export function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other + * than a possible exception are given to the completion callback. + * @since v0.1.96 + */ + export function fsync(fd: number, callback: NoParamCallback): void; + export namespace fsync { + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`. + * @since v0.1.96 + */ + export function fsyncSync(fd: number): void; + /** + * Write `buffer` to the file specified by `fd`. If `buffer` is a normal object, it + * must have an own `toString` function property. + * + * `offset` determines the part of the buffer to be written, and `length` is + * an integer specifying the number of bytes to write. + * + * `position` refers to the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html). + * + * The callback will be given three arguments `(err, bytesWritten, buffer)` where`bytesWritten` specifies how many _bytes_ were written from `buffer`. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesWritten` and `buffer` properties. + * + * It is unsafe to use `fs.write()` multiple times on the same file without waiting + * for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v0.0.2 + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void + ): void; + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + */ + export function write(fd: number, buffer: TBuffer, callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + encoding: BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void + ): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write(fd: number, string: string, position: number | undefined | null, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + */ + export function write(fd: number, string: string, callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void): void; + export namespace write { + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function __promisify__( + fd: number, + buffer?: TBuffer, + offset?: number, + length?: number, + position?: number | null + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function __promisify__( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + } + /** + * If `buffer` is a plain object, it must have an own (not inherited) `toString`function property. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link write}. + * @since v0.1.21 + * @return The number of bytes written. + */ + export function writeSync(fd: number, buffer: NodeJS.ArrayBufferView, offset?: number | null, length?: number | null, position?: number | null): number; + /** + * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function writeSync(fd: number, string: string, position?: number | null, encoding?: BufferEncoding | null): number; + export type ReadPosition = number | bigint; + export interface ReadSyncOptions { + /** + * @default 0 + */ + offset?: number | undefined; + /** + * @default `length of buffer` + */ + length?: number | undefined; + /** + * @default null + */ + position?: ReadPosition | null | undefined; + } + export interface ReadAsyncOptions extends ReadSyncOptions { + buffer?: TBuffer; + } + /** + * Read data from the file specified by `fd`. + * + * The callback is given the three arguments, `(err, bytesRead, buffer)`. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffer` properties. + * @since v0.0.2 + * @param buffer The buffer that the data will be written to. + * @param offset The position in `buffer` to write the data to. + * @param length The number of bytes to read. + * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If + * `position` is an integer, the file position will be unchanged. + */ + export function read( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: ReadPosition | null, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void + ): void; + /** + * Similar to the above `fs.read` function, this version takes an optional `options` object. + * If not otherwise specified in an `options` object, + * `buffer` defaults to `Buffer.alloc(16384)`, + * `offset` defaults to `0`, + * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0 + * `position` defaults to `null` + * @since v12.17.0, 13.11.0 + */ + export function read( + fd: number, + options: ReadAsyncOptions, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void + ): void; + export function read( + fd: number, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NodeJS.ArrayBufferView) => void + ): void; + export namespace read { + /** + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + function __promisify__( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__( + fd: number, + options: ReadAsyncOptions + ): Promise<{ + bytesRead: number; + buffer: TBuffer; + }>; + function __promisify__( + fd: number + ): Promise<{ + bytesRead: number; + buffer: NodeJS.ArrayBufferView; + }>; + } + /** + * Returns the number of `bytesRead`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link read}. + * @since v0.1.21 + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, offset: number, length: number, position: ReadPosition | null): number; + /** + * Similar to the above `fs.readSync` function, this version takes an optional `options` object. + * If no `options` object is specified, it will default with the above values. + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number; + /** + * Asynchronously reads the entire contents of a file. + * + * ```js + * import { readFile } from 'fs'; + * + * readFile('/etc/passwd', (err, data) => { + * if (err) throw err; + * console.log(data); + * }); + * ``` + * + * The callback is passed two arguments `(err, data)`, where `data` is the + * contents of the file. + * + * If no encoding is specified, then the raw buffer is returned. + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { readFile } from 'fs'; + * + * readFile('/etc/passwd', 'utf8', callback); + * ``` + * + * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an + * error will be returned. On FreeBSD, a representation of the directory's contents + * will be returned. + * + * ```js + * import { readFile } from 'fs'; + * + * // macOS, Linux, and Windows + * readFile('', (err, data) => { + * // => [Error: EISDIR: illegal operation on a directory, read ] + * }); + * + * // FreeBSD + * readFile('', (err, data) => { + * // => null, + * }); + * ``` + * + * It is possible to abort an ongoing request using an `AbortSignal`. If a + * request is aborted the callback is called with an `AbortError`: + * + * ```js + * import { readFile } from 'fs'; + * + * const controller = new AbortController(); + * const signal = controller.signal; + * readFile(fileInfo[0].name, { signal }, (err, buf) => { + * // ... + * }); + * // When you want to abort the request + * controller.abort(); + * ``` + * + * The `fs.readFile()` function buffers the entire file. To minimize memory costs, + * when possible prefer streaming via `fs.createReadStream()`. + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * @since v0.1.29 + * @param path filename or file descriptor + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding?: null | undefined; + flag?: string | undefined; + } & Abortable) + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | ({ + encoding: BufferEncoding; + flag?: string | undefined; + } & Abortable) + | BufferEncoding, + callback: (err: NodeJS.ErrnoException | null, data: string) => void + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathOrFileDescriptor, + options: + | (ObjectEncodingOptions & { + flag?: string | undefined; + } & Abortable) + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void + ): void; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + */ + export function readFile(path: PathOrFileDescriptor, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void; + export namespace readFile { + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null + ): Promise; + } + /** + * Returns the contents of the `path`. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readFile}. + * + * If the `encoding` option is specified then this function returns a + * string. Otherwise it returns a buffer. + * + * Similar to {@link readFile}, when the path is a directory, the behavior of`fs.readFileSync()` is platform-specific. + * + * ```js + * import { readFileSync } from 'fs'; + * + * // macOS, Linux, and Windows + * readFileSync(''); + * // => [Error: EISDIR: illegal operation on a directory, read ] + * + * // FreeBSD + * readFileSync(''); // => + * ``` + * @since v0.1.8 + * @param path filename or file descriptor + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: { + encoding?: null | undefined; + flag?: string | undefined; + } | null + ): Buffer; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options: + | { + encoding: BufferEncoding; + flag?: string | undefined; + } + | BufferEncoding + ): string; + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathOrFileDescriptor, + options?: + | (ObjectEncodingOptions & { + flag?: string | undefined; + }) + | BufferEncoding + | null + ): string | Buffer; + export type WriteFileOptions = + | (ObjectEncodingOptions & + Abortable & { + mode?: Mode | undefined; + flag?: string | undefined; + }) + | BufferEncoding + | null; + /** + * When `file` is a filename, asynchronously writes data to the file, replacing the + * file if it already exists. `data` can be a string or a buffer. + * + * When `file` is a file descriptor, the behavior is similar to calling`fs.write()` directly (which is recommended). See the notes below on using + * a file descriptor. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * If `data` is a plain object, it must have an own (not inherited) `toString`function property. + * + * ```js + * import { writeFile } from 'fs'; + * import { Buffer } from 'buffer'; + * + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, (err) => { + * if (err) throw err; + * console.log('The file has been saved!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { writeFile } from 'fs'; + * + * writeFile('message.txt', 'Hello Node.js', 'utf8', callback); + * ``` + * + * It is unsafe to use `fs.writeFile()` multiple times on the same file without + * waiting for the callback. For this scenario, {@link createWriteStream} is + * recommended. + * + * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that + * performs multiple `write` calls internally to write the buffer passed to it. + * For performance sensitive code consider using {@link createWriteStream}. + * + * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'fs'; + * import { Buffer } from 'buffer'; + * + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * writeFile('message.txt', data, { signal }, (err) => { + * // When a request is aborted - the callback is called with an AbortError + * }); + * // When the request should be aborted + * controller.abort(); + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFile(file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options: WriteFileOptions, callback: NoParamCallback): void; + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function writeFile(path: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, callback: NoParamCallback): void; + export namespace writeFile { + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function __promisify__(path: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): Promise; + } + /** + * Returns `undefined`. + * + * If `data` is a plain object, it must have an own (not inherited) `toString`function property. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writeFile}. + * @since v0.1.29 + * @param file filename or file descriptor + */ + export function writeFileSync(file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFile } from 'fs'; + * + * appendFile('message.txt', 'data to append', (err) => { + * if (err) throw err; + * console.log('The "data to append" was appended to file!'); + * }); + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFile } from 'fs'; + * + * appendFile('message.txt', 'data to append', 'utf8', callback); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { open, close, appendFile } from 'fs'; + * + * function closeFd(fd) { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * + * open('message.txt', 'a', (err, fd) => { + * if (err) throw err; + * + * try { + * appendFile(fd, 'data to append', 'utf8', (err) => { + * closeFd(fd); + * if (err) throw err; + * }); + * } catch (err) { + * closeFd(fd); + * throw err; + * } + * }); + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFile(path: PathOrFileDescriptor, data: string | Uint8Array, options: WriteFileOptions, callback: NoParamCallback): void; + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void; + export namespace appendFile { + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function __promisify__(file: PathOrFileDescriptor, data: string | Uint8Array, options?: WriteFileOptions): Promise; + } + /** + * Synchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * The `mode` option only affects the newly created file. See {@link open} for more details. + * + * ```js + * import { appendFileSync } from 'fs'; + * + * try { + * appendFileSync('message.txt', 'data to append'); + * console.log('The "data to append" was appended to file!'); + * } catch (err) { + * // Handle the error + * } + * ``` + * + * If `options` is a string, then it specifies the encoding: + * + * ```js + * import { appendFileSync } from 'fs'; + * + * appendFileSync('message.txt', 'data to append', 'utf8'); + * ``` + * + * The `path` may be specified as a numeric file descriptor that has been opened + * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will + * not be closed automatically. + * + * ```js + * import { openSync, closeSync, appendFileSync } from 'fs'; + * + * let fd; + * + * try { + * fd = openSync('message.txt', 'a'); + * appendFileSync(fd, 'data to append', 'utf8'); + * } catch (err) { + * // Handle the error + * } finally { + * if (fd !== undefined) + * closeSync(fd); + * } + * ``` + * @since v0.6.7 + * @param path filename or file descriptor + */ + export function appendFileSync(path: PathOrFileDescriptor, data: string | Uint8Array, options?: WriteFileOptions): void; + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export interface WatchFileOptions { + bigint?: boolean | undefined; + persistent?: boolean | undefined; + interval?: number | undefined; + } + /** + * Watch for changes on `filename`. The callback `listener` will be called each + * time the file is accessed. + * + * The `options` argument may be omitted. If provided, it should be an object. The`options` object may contain a boolean named `persistent` that indicates + * whether the process should continue to run as long as files are being watched. + * The `options` object may specify an `interval` property indicating how often the + * target should be polled in milliseconds. + * + * The `listener` gets two arguments the current stat object and the previous + * stat object: + * + * ```js + * import { watchFile } from 'fs'; + * + * watchFile('message.text', (curr, prev) => { + * console.log(`the current mtime is: ${curr.mtime}`); + * console.log(`the previous mtime was: ${prev.mtime}`); + * }); + * ``` + * + * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, + * the numeric values in these objects are specified as `BigInt`s. + * + * To be notified when the file was modified, not just accessed, it is necessary + * to compare `curr.mtimeMs` and `prev.mtimeMs`. + * + * When an `fs.watchFile` operation results in an `ENOENT` error, it + * will invoke the listener once, with all the fields zeroed (or, for dates, the + * Unix Epoch). If the file is created later on, the listener will be called + * again, with the latest stat objects. This is a change in functionality since + * v0.10. + * + * Using {@link watch} is more efficient than `fs.watchFile` and`fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and`fs.unwatchFile` when possible. + * + * When a file being watched by `fs.watchFile()` disappears and reappears, + * then the contents of `previous` in the second callback event (the file's + * reappearance) will be the same as the contents of `previous` in the first + * callback event (its disappearance). + * + * This happens when: + * + * * the file is deleted, followed by a restore + * * the file is renamed and then renamed a second time back to its original name + * @since v0.1.31 + */ + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint?: false | undefined; + }) + | undefined, + listener: (curr: Stats, prev: Stats) => void + ): StatWatcher; + export function watchFile( + filename: PathLike, + options: + | (WatchFileOptions & { + bigint: true; + }) + | undefined, + listener: (curr: BigIntStats, prev: BigIntStats) => void + ): StatWatcher; + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): StatWatcher; + /** + * Stop watching for changes on `filename`. If `listener` is specified, only that + * particular listener is removed. Otherwise, _all_ listeners are removed, + * effectively stopping watching of `filename`. + * + * Calling `fs.unwatchFile()` with a filename that is not being watched is a + * no-op, not an error. + * + * Using {@link watch} is more efficient than `fs.watchFile()` and`fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()`and `fs.unwatchFile()` when possible. + * @since v0.1.31 + * @param listener Optional, a listener previously attached using `fs.watchFile()` + */ + export function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void; + export interface WatchOptions extends Abortable { + encoding?: BufferEncoding | 'buffer' | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + export type WatchEventType = 'rename' | 'change'; + export type WatchListener = (event: WatchEventType, filename: T) => void; + /** + * Watch for changes on `filename`, where `filename` is either a file or a + * directory. + * + * The second argument is optional. If `options` is provided as a string, it + * specifies the `encoding`. Otherwise `options` should be passed as an object. + * + * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file + * which triggered the event. + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of`eventType`. + * + * If a `signal` is passed, aborting the corresponding AbortController will close + * the returned `fs.FSWatcher`. + * @since v0.5.10 + * @param listener + */ + export function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: 'buffer'; + }) + | 'buffer', + listener?: WatchListener + ): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch(filename: PathLike, options?: WatchOptions | BufferEncoding | null, listener?: WatchListener): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch(filename: PathLike, options: WatchOptions | string, listener?: WatchListener): FSWatcher; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function watch(filename: PathLike, listener?: WatchListener): FSWatcher; + /** + * Test whether or not the given path exists by checking with the file system. + * Then call the `callback` argument with either true or false: + * + * ```js + * import { exists } from 'fs'; + * + * exists('/etc/passwd', (e) => { + * console.log(e ? 'it exists' : 'no passwd!'); + * }); + * ``` + * + * **The parameters for this callback are not consistent with other Node.js** + * **callbacks.** Normally, the first parameter to a Node.js callback is an `err`parameter, optionally followed by other parameters. The `fs.exists()` callback + * has only one boolean parameter. This is one reason `fs.access()` is recommended + * instead of `fs.exists()`. + * + * Using `fs.exists()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()` is not recommended. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file does not exist. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { exists, open, close } from 'fs'; + * + * exists('myfile', (e) => { + * if (e) { + * console.error('myfile already exists'); + * } else { + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'fs'; + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { open, close, exists } from 'fs'; + * + * exists('myfile', (e) => { + * if (e) { + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * } else { + * console.error('myfile does not exist'); + * } + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for existence and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the existence of a file only if the file won’t be + * used directly, for example when its existence is a signal from another + * process. + * @since v0.0.2 + * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead. + */ + export function exists(path: PathLike, callback: (exists: boolean) => void): void; + /** @deprecated */ + export namespace exists { + /** + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike): Promise; + } + /** + * Returns `true` if the path exists, `false` otherwise. + * + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link exists}. + * + * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback`parameter to `fs.exists()` accepts parameters that are inconsistent with other + * Node.js callbacks. `fs.existsSync()` does not use a callback. + * + * ```js + * import { existsSync } from 'fs'; + * + * if (existsSync('/etc/passwd')) + * console.log('The path exists.'); + * ``` + * @since v0.1.21 + */ + export function existsSync(path: PathLike): boolean; + export namespace constants { + // File Access Constants + /** Constant for fs.access(). File is visible to the calling process. */ + const F_OK: number; + /** Constant for fs.access(). File can be read by the calling process. */ + const R_OK: number; + /** Constant for fs.access(). File can be written by the calling process. */ + const W_OK: number; + /** Constant for fs.access(). File can be executed by the calling process. */ + const X_OK: number; + // File Copy Constants + /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ + const COPYFILE_EXCL: number; + /** + * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. + */ + const COPYFILE_FICLONE: number; + /** + * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then the operation will fail with an error. + */ + const COPYFILE_FICLONE_FORCE: number; + // File Open Constants + /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ + const O_RDONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ + const O_WRONLY: number; + /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ + const O_RDWR: number; + /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ + const O_CREAT: number; + /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ + const O_EXCL: number; + /** + * Constant for fs.open(). Flag indicating that if path identifies a terminal device, + * opening the path shall not cause that terminal to become the controlling terminal for the process + * (if the process does not already have one). + */ + const O_NOCTTY: number; + /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ + const O_TRUNC: number; + /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ + const O_APPEND: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ + const O_DIRECTORY: number; + /** + * constant for fs.open(). + * Flag indicating reading accesses to the file system will no longer result in + * an update to the atime information associated with the file. + * This flag is available on Linux operating systems only. + */ + const O_NOATIME: number; + /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ + const O_NOFOLLOW: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ + const O_SYNC: number; + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ + const O_DSYNC: number; + /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ + const O_SYMLINK: number; + /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ + const O_DIRECT: number; + /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ + const O_NONBLOCK: number; + // File Type Constants + /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ + const S_IFMT: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ + const S_IFREG: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ + const S_IFDIR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ + const S_IFCHR: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ + const S_IFBLK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ + const S_IFIFO: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ + const S_IFLNK: number; + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ + const S_IFSOCK: number; + // File Mode Constants + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ + const S_IRWXU: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ + const S_IRUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ + const S_IWUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ + const S_IXUSR: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ + const S_IRWXG: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ + const S_IRGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ + const S_IWGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ + const S_IXGRP: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ + const S_IRWXO: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ + const S_IROTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ + const S_IWOTH: number; + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ + const S_IXOTH: number; + /** + * When set, a memory file mapping is used to access the file. This flag + * is available on Windows operating systems only. On other operating systems, + * this flag is ignored. + */ + const UV_FS_O_FILEMAP: number; + } + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. Check `File access constants` for possible values + * of `mode`. It is possible to create a mask consisting of the bitwise OR of + * two or more values (e.g. `fs.constants.W_OK | fs.constants.R_OK`). + * + * The final argument, `callback`, is a callback function that is invoked with + * a possible error argument. If any of the accessibility checks fail, the error + * argument will be an `Error` object. The following examples check if`package.json` exists, and if it is readable or writable. + * + * ```js + * import { access, constants } from 'fs'; + * + * const file = 'package.json'; + * + * // Check if the file exists in the current directory. + * access(file, constants.F_OK, (err) => { + * console.log(`${file} ${err ? 'does not exist' : 'exists'}`); + * }); + * + * // Check if the file is readable. + * access(file, constants.R_OK, (err) => { + * console.log(`${file} ${err ? 'is not readable' : 'is readable'}`); + * }); + * + * // Check if the file is writable. + * access(file, constants.W_OK, (err) => { + * console.log(`${file} ${err ? 'is not writable' : 'is writable'}`); + * }); + * + * // Check if the file exists in the current directory, and if it is writable. + * access(file, constants.F_OK | constants.W_OK, (err) => { + * if (err) { + * console.error( + * `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`); + * } else { + * console.log(`${file} exists, and it is writable`); + * } + * }); + * ``` + * + * Do not use `fs.access()` to check for the accessibility of a file before calling`fs.open()`, `fs.readFile()` or `fs.writeFile()`. Doing + * so introduces a race condition, since other processes may change the file's + * state between the two calls. Instead, user code should open/read/write the + * file directly and handle the error raised if the file is not accessible. + * + * **write (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'fs'; + * + * access('myfile', (err) => { + * if (!err) { + * console.error('myfile already exists'); + * return; + * } + * + * open('myfile', 'wx', (err, fd) => { + * if (err) throw err; + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **write (RECOMMENDED)** + * + * ```js + * import { open, close } from 'fs'; + * + * open('myfile', 'wx', (err, fd) => { + * if (err) { + * if (err.code === 'EEXIST') { + * console.error('myfile already exists'); + * return; + * } + * + * throw err; + * } + * + * try { + * writeMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * **read (NOT RECOMMENDED)** + * + * ```js + * import { access, open, close } from 'fs'; + * access('myfile', (err) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * open('myfile', 'r', (err, fd) => { + * if (err) throw err; + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * }); + * ``` + * + * **read (RECOMMENDED)** + * + * ```js + * import { open, close } from 'fs'; + * + * open('myfile', 'r', (err, fd) => { + * if (err) { + * if (err.code === 'ENOENT') { + * console.error('myfile does not exist'); + * return; + * } + * + * throw err; + * } + * + * try { + * readMyData(fd); + * } finally { + * close(fd, (err) => { + * if (err) throw err; + * }); + * } + * }); + * ``` + * + * The "not recommended" examples above check for accessibility and then use the + * file; the "recommended" examples are better because they use the file directly + * and handle the error, if any. + * + * In general, check for the accessibility of a file only if the file will not be + * used directly, for example when its accessibility is a signal from another + * process. + * + * On Windows, access-control policies (ACLs) on a directory may limit access to + * a file or directory. The `fs.access()` function, however, does not check the + * ACL and therefore may report that a path is accessible even if the ACL restricts + * the user from reading or writing to it. + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + */ + export function access(path: PathLike, callback: NoParamCallback): void; + export namespace access { + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike, mode?: number): Promise; + } + /** + * Synchronously tests a user's permissions for the file or directory specified + * by `path`. The `mode` argument is an optional integer that specifies the + * accessibility checks to be performed. Check `File access constants` for + * possible values of `mode`. It is possible to create a mask consisting of + * the bitwise OR of two or more values + * (e.g. `fs.constants.W_OK | fs.constants.R_OK`). + * + * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise, + * the method will return `undefined`. + * + * ```js + * import { accessSync, constants } from 'fs'; + * + * try { + * accessSync('etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can read/write'); + * } catch (err) { + * console.error('no access!'); + * } + * ``` + * @since v0.11.15 + * @param [mode=fs.constants.F_OK] + */ + export function accessSync(path: PathLike, mode?: number): void; + interface StreamOptions { + flags?: string | undefined; + encoding?: BufferEncoding | undefined; + fd?: number | promises.FileHandle | undefined; + mode?: number | undefined; + autoClose?: boolean | undefined; + /** + * @default false + */ + emitClose?: boolean | undefined; + start?: number | undefined; + highWaterMark?: number | undefined; + } + interface ReadStreamOptions extends StreamOptions { + end?: number | undefined; + } + /** + * Unlike the 16 kb default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 kb. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is + * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the + * current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use + * the specified file descriptor. This means that no `'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`. + * + * If `fd` points to a character device that only supports blocking reads + * (such as keyboard or sound card), read operations do not finish until data is + * available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option, it is possible to override the corresponding `fs`implementations for `open`, `read`, and `close`. When providing the `fs` option, + * an override for `read` is required. If no `fd` is provided, an override for`open` is also required. If `autoClose` is `true`, an override for `close` is + * also required. + * + * ```js + * import { createReadStream } from 'fs'; + * + * // Create a stream from some character device. + * const stream = createReadStream('/dev/input/event0'); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * `mode` sets the file mode (permission and sticky bits), but only if the + * file was created. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { createReadStream } from 'fs'; + * + * createReadStream('sample.txt', { start: 90, end: 99 }); + * ``` + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than replacing + * it may require the `flags` option to be set to `r+` rather than the default `w`. + * The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * By providing the `fs` option it is possible to override the corresponding `fs`implementations for `open`, `write`, `writev` and `close`. Overriding `write()`without `writev()` can reduce + * performance as some optimizations (`_writev()`) + * will be disabled. When providing the `fs` option, overrides for at least one of`write` and `writev` are required. If no `fd` option is supplied, an override + * for `open` is also required. If `autoClose` is `true`, an override for `close`is also required. + * + * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the`path` argument and will use the specified file descriptor. This means that no`'open'` event will be + * emitted. `fd` should be blocking; non-blocking `fd`s + * should be passed to `net.Socket`. + * + * If `options` is a string, then it specifies the encoding. + * @since v0.1.31 + */ + export function createWriteStream(path: PathLike, options?: BufferEncoding | StreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other + * than a possible + * exception are given to the completion callback. + * @since v0.1.96 + */ + export function fdatasync(fd: number, callback: NoParamCallback): void; + export namespace fdatasync { + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`. + * @since v0.1.96 + */ + export function fdatasyncSync(fd: number): void; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. No arguments other than a possible exception are given to the + * callback function. Node.js makes no guarantees about the atomicity of the copy + * operation. If an error occurs after the destination file has been opened for + * writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFile, constants } from 'fs'; + * + * function callback(err) { + * if (err) throw err; + * console.log('source.txt was copied to destination.txt'); + * } + * + * // destination.txt will be created or overwritten by default. + * copyFile('source.txt', 'destination.txt', callback); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; + export function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void; + export namespace copyFile { + function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise; + } + /** + * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. Returns `undefined`. Node.js makes no guarantees about the + * atomicity of the copy operation. If an error occurs after the destination file + * has been opened for writing, Node.js will attempt to remove the destination. + * + * `mode` is an optional integer that specifies the behavior + * of the copy operation. It is possible to create a mask consisting of the bitwise + * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). + * + * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already + * exists. + * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a + * copy-on-write reflink. If the platform does not support copy-on-write, then a + * fallback copy mechanism is used. + * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to + * create a copy-on-write reflink. If the platform does not support + * copy-on-write, then the operation will fail. + * + * ```js + * import { copyFileSync, constants } from 'fs'; + * + * // destination.txt will be created or overwritten by default. + * copyFileSync('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * ``` + * @since v8.5.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] modifiers for copy operation. + */ + export function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void; + /** + * Write an array of `ArrayBufferView`s to the file specified by `fd` using`writev()`. + * + * `position` is the offset from the beginning of the file where this data + * should be written. If `typeof position !== 'number'`, the data will be written + * at the current position. + * + * The callback will be given three arguments: `err`, `bytesWritten`, and`buffers`. `bytesWritten` is how many bytes were written from `buffers`. + * + * If this method is `util.promisify()` ed, it returns a promise for an`Object` with `bytesWritten` and `buffers` properties. + * + * It is unsafe to use `fs.writev()` multiple times on the same file without + * waiting for the callback. For this scenario, use {@link createWriteStream}. + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + */ + export function writev(fd: number, buffers: ReadonlyArray, cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void): void; + export function writev( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void + ): void; + export interface WriteVResult { + bytesWritten: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace writev { + function __promisify__(fd: number, buffers: ReadonlyArray, position?: number): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link writev}. + * @since v12.9.0 + * @return The number of bytes written. + */ + export function writevSync(fd: number, buffers: ReadonlyArray, position?: number): number; + /** + * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s + * using `readv()`. + * + * `position` is the offset from the beginning of the file from where data + * should be read. If `typeof position !== 'number'`, the data will be read + * from the current position. + * + * The callback will be given three arguments: `err`, `bytesRead`, and`buffers`. `bytesRead` is how many bytes were read from the file. + * + * If this method is invoked as its `util.promisify()` ed version, it returns + * a promise for an `Object` with `bytesRead` and `buffers` properties. + * @since v13.13.0, v12.17.0 + */ + export function readv(fd: number, buffers: ReadonlyArray, cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void): void; + export function readv( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void + ): void; + export interface ReadVResult { + bytesRead: number; + buffers: NodeJS.ArrayBufferView[]; + } + export namespace readv { + function __promisify__(fd: number, buffers: ReadonlyArray, position?: number): Promise; + } + /** + * For detailed information, see the documentation of the asynchronous version of + * this API: {@link readv}. + * @since v13.13.0, v12.17.0 + * @return The number of bytes read. + */ + export function readvSync(fd: number, buffers: ReadonlyArray, position?: number): number; + export interface OpenDirOptions { + encoding?: BufferEncoding | undefined; + /** + * Number of directory entries that are buffered + * internally when reading from the directory. Higher values lead to better + * performance but higher memory usage. + * @default 32 + */ + bufferSize?: number | undefined; + } + /** + * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html). + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; + /** + * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for + * more details. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * @since v12.12.0 + */ + export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export function opendir(path: PathLike, options: OpenDirOptions, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export namespace opendir { + function __promisify__(path: PathLike, options?: OpenDirOptions): Promise

; + } + export interface BigIntStats extends StatsBase { + atimeNs: bigint; + mtimeNs: bigint; + ctimeNs: bigint; + birthtimeNs: bigint; + } + export interface BigIntOptions { + bigint: true; + } + export interface StatOptions { + bigint?: boolean | undefined; + } + export interface StatSyncOptions extends StatOptions { + throwIfNoEntry?: boolean | undefined; + } + export interface CopyOptions { + /** + * Dereference symlinks + * @default false + */ + dereference?: boolean; + /** + * When `force` is `false`, and the destination + * exists, throw an error. + * @default false + */ + errorOnExist?: boolean; + /** + * Function to filter copied files/directories. Return + * `true` to copy the item, `false` to ignore it. + */ + filter?(source: string, destination: string): boolean; + /** + * Overwrite existing file or directory. _The copy + * operation will ignore errors if you set this to false and the destination + * exists. Use the `errorOnExist` option to change this behavior. + * @default true + */ + force?: boolean; + /** + * When `true` timestamps from `src` will + * be preserved. + * @default false + */ + preserveTimestamps?: boolean; + /** + * Copy directories recursively. + * @default false + */ + recursive?: boolean; + } + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cp(source: string, destination: string, callback: (err: NodeJS.ErrnoException | null) => void): void; + export function cp(source: string, destination: string, opts: CopyOptions, callback: (err: NodeJS.ErrnoException | null) => void): void; + /** + * Synchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + */ + export function cpSync(source: string, destination: string, opts?: CopyOptions): void; +} +declare module 'node:fs' { + export * from 'fs'; +} diff --git a/build/node_modules/@types/node/fs/promises.d.ts b/build/node_modules/@types/node/fs/promises.d.ts new file mode 100755 index 00000000..f6c77d3b --- /dev/null +++ b/build/node_modules/@types/node/fs/promises.d.ts @@ -0,0 +1,1091 @@ +/** + * The `fs/promises` API provides asynchronous file system methods that return + * promises. + * + * The promise APIs use the underlying Node.js threadpool to perform file + * system operations off the event loop thread. These operations are not + * synchronized or threadsafe. Care must be taken when performing multiple + * concurrent modifications on the same file or data corruption may occur. + * @since v10.0.0 + */ +declare module 'fs/promises' { + import { Abortable } from 'node:events'; + import { Stream } from 'node:stream'; + import { + Stats, + BigIntStats, + StatOptions, + WriteVResult, + ReadVResult, + PathLike, + RmDirOptions, + RmOptions, + MakeDirectoryOptions, + Dirent, + OpenDirOptions, + Dir, + ObjectEncodingOptions, + BufferEncodingOption, + OpenMode, + Mode, + WatchOptions, + WatchEventType, + CopyOptions, + ReadStream, + WriteStream, + } from 'node:fs'; + interface FileChangeInfo { + eventType: WatchEventType; + filename: T; + } + interface FlagAndOpenMode { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } + interface FileReadResult { + bytesRead: number; + buffer: T; + } + interface FileReadOptions { + /** + * @default `Buffer.alloc(0xffff)` + */ + buffer?: T; + /** + * @default 0 + */ + offset?: number | null; + /** + * @default `buffer.byteLength` + */ + length?: number | null; + position?: number | null; + } + interface CreateReadStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + end?: number | undefined; + highWaterMark?: number | undefined; + } + interface CreateWriteStreamOptions { + encoding?: BufferEncoding | null | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + } + // TODO: Add `EventEmitter` close + interface FileHandle { + /** + * The numeric file descriptor managed by the {FileHandle} object. + * @since v10.0.0 + */ + readonly fd: number; + /** + * Alias of `filehandle.writeFile()`. + * + * When operating on file handles, the mode cannot be changed from what it was set + * to with `fsPromises.open()`. Therefore, this is equivalent to `filehandle.writeFile()`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + appendFile(data: string | Uint8Array, options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null): Promise; + /** + * Changes the ownership of the file. A wrapper for [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html). + * @since v10.0.0 + * @param uid The file's new owner's user id. + * @param gid The file's new group's group id. + * @return Fulfills with `undefined` upon success. + */ + chown(uid: number, gid: number): Promise; + /** + * Modifies the permissions on the file. See [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html). + * @since v10.0.0 + * @param mode the file mode bit mask. + * @return Fulfills with `undefined` upon success. + */ + chmod(mode: Mode): Promise; + /** + * Unlike the 16 kb default `highWaterMark` for a `stream.Readable`, the stream + * returned by this method has a default `highWaterMark` of 64 kb. + * + * `options` can include `start` and `end` values to read a range of bytes from + * the file instead of the entire file. Both `start` and `end` are inclusive and + * start counting at 0, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `start` is + * omitted or `undefined`, `filehandle.createReadStream()` reads sequentially from + * the current file position. The `encoding` can be any one of those accepted by `Buffer`. + * + * If the `FileHandle` points to a character device that only supports blocking + * reads (such as keyboard or sound card), read operations do not finish until data + * is available. This can prevent the process from exiting and the stream from + * closing naturally. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * + * ```js + * import { open } from 'fs/promises'; + * + * const fd = await open('/dev/input/event0'); + * // Create a stream from some character device. + * const stream = fd.createReadStream(); + * setTimeout(() => { + * stream.close(); // This may not close the stream. + * // Artificially marking end-of-stream, as if the underlying resource had + * // indicated end-of-file by itself, allows the stream to close. + * // This does not cancel pending read operations, and if there is such an + * // operation, the process may still not be able to exit successfully + * // until it finishes. + * stream.push(null); + * stream.read(0); + * }, 100); + * ``` + * + * If `autoClose` is false, then the file descriptor won't be closed, even if + * there's an error. It is the application's responsibility to close it and make + * sure there's no file descriptor leak. If `autoClose` is set to true (default + * behavior), on `'error'` or `'end'` the file descriptor will be closed + * automatically. + * + * An example to read the last 10 bytes of a file which is 100 bytes long: + * + * ```js + * import { open } from 'fs/promises'; + * + * const fd = await open('sample.txt'); + * fd.createReadStream({ start: 90, end: 99 }); + * ``` + * @since v16.11.0 + */ + createReadStream(options?: CreateReadStreamOptions): ReadStream; + /** + * `options` may also include a `start` option to allow writing data at some + * position past the beginning of the file, allowed values are in the + * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than replacing + * it may require the `flags` `open` option to be set to `r+` rather than the + * default `r`. The `encoding` can be any one of those accepted by `Buffer`. + * + * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'`the file descriptor will be closed automatically. If `autoClose` is false, + * then the file descriptor won't be closed, even if there's an error. + * It is the application's responsibility to close it and make sure there's no + * file descriptor leak. + * + * By default, the stream will emit a `'close'` event after it has been + * destroyed. Set the `emitClose` option to `false` to change this behavior. + * @since v16.11.0 + */ + createWriteStream(options?: CreateWriteStreamOptions): WriteStream; + /** + * Forces all currently queued I/O operations associated with the file to the + * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. + * + * Unlike `filehandle.sync` this method does not flush modified metadata. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + datasync(): Promise; + /** + * Request that all data for the open file descriptor is flushed to the storage + * device. The specific implementation is operating system and device specific. + * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fufills with `undefined` upon success. + */ + sync(): Promise; + /** + * Reads data from the file and stores that in the given buffer. + * + * If the file is not modified concurrently, the end-of-file is reached when the + * number of bytes read is zero. + * @since v10.0.0 + * @param buffer A buffer that will be filled with the file data read. + * @param offset The location in the buffer at which to start filling. + * @param length The number of bytes to read. + * @param position The location where to begin reading data from the file. If `null`, data will be read from the current file position, and the position will be updated. If `position` is an + * integer, the current file position will remain unchanged. + * @return Fulfills upon success with an object with two properties: + */ + read(buffer: T, offset?: number | null, length?: number | null, position?: number | null): Promise>; + read(options?: FileReadOptions): Promise>; + /** + * Asynchronously reads the entire contents of a file. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support reading. + * + * If one or more `filehandle.read()` calls are made on a file handle and then a`filehandle.readFile()` call is made, the data will be read from the current + * position till the end of the file. It doesn't always read from the beginning + * of the file. + * @since v10.0.0 + * @return Fulfills upon a successful read with the contents of the file. If no encoding is specified (using `options.encoding`), the data is returned as a {Buffer} object. Otherwise, the + * data will be a string. + */ + readFile( + options?: { + encoding?: null | undefined; + flag?: OpenMode | undefined; + } | null + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options: + | { + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } + | BufferEncoding + ): Promise; + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options?: + | (ObjectEncodingOptions & { + flag?: OpenMode | undefined; + }) + | BufferEncoding + | null + ): Promise; + /** + * @since v10.0.0 + * @return Fulfills with an {fs.Stats} for the file. + */ + stat( + opts?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + stat( + opts: StatOptions & { + bigint: true; + } + ): Promise; + stat(opts?: StatOptions): Promise; + /** + * Truncates the file. + * + * If the file was larger than `len` bytes, only the first `len` bytes will be + * retained in the file. + * + * The following example retains only the first four bytes of the file: + * + * ```js + * import { open } from 'fs/promises'; + * + * let filehandle = null; + * try { + * filehandle = await open('temp.txt', 'r+'); + * await filehandle.truncate(4); + * } finally { + * await filehandle?.close(); + * } + * ``` + * + * If the file previously was shorter than `len` bytes, it is extended, and the + * extended part is filled with null bytes (`'\0'`): + * + * If `len` is negative then `0` will be used. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + truncate(len?: number): Promise; + /** + * Change the file system timestamps of the object referenced by the `FileHandle` then resolves the promise with no arguments upon success. + * @since v10.0.0 + */ + utimes(atime: string | number | Date, mtime: string | number | Date): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a buffer, an + * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface) or + * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object, or an + * object with an own `toString` function + * property. The promise is resolved with no arguments upon success. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `FileHandle` has to support writing. + * + * It is unsafe to use `filehandle.writeFile()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). + * + * If one or more `filehandle.write()` calls are made on a file handle and then a`filehandle.writeFile()` call is made, the data will be written from the + * current position till the end of the file. It doesn't always write from the + * beginning of the file. + * @since v10.0.0 + */ + writeFile(data: string | Uint8Array, options?: (ObjectEncodingOptions & FlagAndOpenMode & Abortable) | BufferEncoding | null): Promise; + /** + * Write `buffer` to the file. + * + * If `buffer` is a plain object, it must have an own (not inherited) `toString`function property. + * + * The promise is resolved with an object containing two properties: + * + * It is unsafe to use `filehandle.write()` multiple times on the same file + * without waiting for the promise to be resolved (or rejected). For this + * scenario, use `fs.createWriteStream()`. + * + * On Linux, positional writes do not work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v10.0.0 + * @param [offset=0] The start position from within `buffer` where the data to write begins. + * @param [length=buffer.byteLength] The number of bytes from `buffer` to write. + * @param position The offset from the beginning of the file where the data from `buffer` should be written. If `position` is not a `number`, the data will be written at the current position. + * See the POSIX pwrite(2) documentation for more detail. + */ + write( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null + ): Promise<{ + bytesWritten: number; + buffer: TBuffer; + }>; + write( + data: string, + position?: number | null, + encoding?: BufferEncoding | null + ): Promise<{ + bytesWritten: number; + buffer: string; + }>; + /** + * Write an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s to the file. + * + * The promise is resolved with an object containing a two properties: + * + * It is unsafe to call `writev()` multiple times on the same file without waiting + * for the promise to be resolved (or rejected). + * + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to + * the end of the file. + * @since v12.9.0 + * @param position The offset from the beginning of the file where the data from `buffers` should be written. If `position` is not a `number`, the data will be written at the current + * position. + */ + writev(buffers: ReadonlyArray, position?: number): Promise; + /** + * Read from a file and write to an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s + * @since v13.13.0, v12.17.0 + * @param position The offset from the beginning of the file where the data should be read from. If `position` is not a `number`, the data will be read from the current position. + * @return Fulfills upon success an object containing two properties: + */ + readv(buffers: ReadonlyArray, position?: number): Promise; + /** + * Closes the file handle after waiting for any pending operation on the handle to + * complete. + * + * ```js + * import { open } from 'fs/promises'; + * + * let filehandle; + * try { + * filehandle = await open('thefile.txt', 'r'); + * } finally { + * await filehandle?.close(); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + close(): Promise; + } + /** + * Tests a user's permissions for the file or directory specified by `path`. + * The `mode` argument is an optional integer that specifies the accessibility + * checks to be performed. Check `File access constants` for possible values + * of `mode`. It is possible to create a mask consisting of the bitwise OR of + * two or more values (e.g. `fs.constants.W_OK | fs.constants.R_OK`). + * + * If the accessibility check is successful, the promise is resolved with no + * value. If any of the accessibility checks fail, the promise is rejected + * with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object. The following example checks if the file`/etc/passwd` can be read and + * written by the current process. + * + * ```js + * import { access } from 'fs/promises'; + * import { constants } from 'fs'; + * + * try { + * await access('/etc/passwd', constants.R_OK | constants.W_OK); + * console.log('can access'); + * } catch { + * console.error('cannot access'); + * } + * ``` + * + * Using `fsPromises.access()` to check for the accessibility of a file before + * calling `fsPromises.open()` is not recommended. Doing so introduces a race + * condition, since other processes may change the file's state between the two + * calls. Instead, user code should open/read/write the file directly and handle + * the error raised if the file is not accessible. + * @since v10.0.0 + * @param [mode=fs.constants.F_OK] + * @return Fulfills with `undefined` upon success. + */ + function access(path: PathLike, mode?: number): Promise; + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it + * already exists. + * + * No guarantees are made about the atomicity of the copy operation. If an + * error occurs after the destination file has been opened for writing, an attempt + * will be made to remove the destination. + * + * ```js + * import { constants } from 'fs'; + * import { copyFile } from 'fs/promises'; + * + * try { + * await copyFile('source.txt', 'destination.txt'); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.log('The file could not be copied'); + * } + * + * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. + * try { + * await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL); + * console.log('source.txt was copied to destination.txt'); + * } catch { + * console.log('The file could not be copied'); + * } + * ``` + * @since v10.0.0 + * @param src source filename to copy + * @param dest destination filename of the copy operation + * @param [mode=0] Optional modifiers that specify the behavior of the copy operation. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. + * `fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`) + * @return Fulfills with `undefined` upon success. + */ + function copyFile(src: PathLike, dest: PathLike, mode?: number): Promise; + /** + * Opens a `FileHandle`. + * + * Refer to the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more detail. + * + * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented + * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains + * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). + * @since v10.0.0 + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] Sets the file mode (permission and sticky bits) if the file is created. + * @return Fulfills with a {FileHandle} object. + */ + function open(path: PathLike, flags: string | number, mode?: Mode): Promise; + /** + * Renames `oldPath` to `newPath`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rename(oldPath: PathLike, newPath: PathLike): Promise; + /** + * Truncates (shortens or extends the length) of the content at `path` to `len`bytes. + * @since v10.0.0 + * @param [len=0] + * @return Fulfills with `undefined` upon success. + */ + function truncate(path: PathLike, len?: number): Promise; + /** + * Removes the directory identified by `path`. + * + * Using `fsPromises.rmdir()` on a file (not a directory) results in the + * promise being rejected with an `ENOENT` error on Windows and an `ENOTDIR`error on POSIX. + * + * To get a behavior similar to the `rm -rf` Unix command, use `fsPromises.rm()` with options `{ recursive: true, force: true }`. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function rmdir(path: PathLike, options?: RmDirOptions): Promise; + /** + * Removes files and directories (modeled on the standard POSIX `rm` utility). + * @since v14.14.0 + * @return Fulfills with `undefined` upon success. + */ + function rm(path: PathLike, options?: RmOptions): Promise; + /** + * Asynchronously creates a directory. + * + * The optional `options` argument can be an integer specifying `mode` (permission + * and sticky bits), or an object with a `mode` property and a `recursive`property indicating whether parent directories should be created. Calling`fsPromises.mkdir()` when `path` is a directory + * that exists results in a + * rejection only when `recursive` is false. + * @since v10.0.0 + * @return Upon success, fulfills with `undefined` if `recursive` is `false`, or the first directory path created if `recursive` is `true`. + */ + function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { + recursive: true; + } + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir( + path: PathLike, + options?: + | Mode + | (MakeDirectoryOptions & { + recursive?: false | undefined; + }) + | null + ): Promise; + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + /** + * Reads the contents of a directory. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the filenames. If the `encoding` is set to `'buffer'`, the filenames returned + * will be passed as `Buffer` objects. + * + * If `options.withFileTypes` is set to `true`, the resolved array will contain `fs.Dirent` objects. + * + * ```js + * import { readdir } from 'fs/promises'; + * + * try { + * const files = await readdir(path); + * for (const file of files) + * console.log(file); + * } catch (err) { + * console.error(err); + * } + * ``` + * @since v10.0.0 + * @return Fulfills with an array of the names of the files in the directory excluding `'.'` and `'..'`. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + }) + | BufferEncoding + | null + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options: + | { + encoding: 'buffer'; + withFileTypes?: false | undefined; + } + | 'buffer' + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: + | (ObjectEncodingOptions & { + withFileTypes?: false | undefined; + }) + | BufferEncoding + | null + ): Promise; + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + function readdir( + path: PathLike, + options: ObjectEncodingOptions & { + withFileTypes: true; + } + ): Promise; + /** + * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is + * resolved with the`linkString` upon success. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the link path returned. If the `encoding` is set to `'buffer'`, the link path + * returned will be passed as a `Buffer` object. + * @since v10.0.0 + * @return Fulfills with the `linkString` upon success. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: ObjectEncodingOptions | string | null): Promise; + /** + * Creates a symbolic link. + * + * The `type` argument is only used on Windows platforms and can be one of `'dir'`,`'file'`, or `'junction'`. Windows junction points require the destination path + * to be absolute. When using `'junction'`, the `target` argument will + * automatically be normalized to absolute path. + * @since v10.0.0 + * @param [type='file'] + * @return Fulfills with `undefined` upon success. + */ + function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; + /** + * Equivalent to `fsPromises.stat()` unless `path` refers to a symbolic link, + * in which case the link itself is stat-ed, not the file that it refers to. + * Refer to the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) document for more detail. + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given symbolic link `path`. + */ + function lstat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + function lstat( + path: PathLike, + opts: StatOptions & { + bigint: true; + } + ): Promise; + function lstat(path: PathLike, opts?: StatOptions): Promise; + /** + * @since v10.0.0 + * @return Fulfills with the {fs.Stats} object for the given `path`. + */ + function stat( + path: PathLike, + opts?: StatOptions & { + bigint?: false | undefined; + } + ): Promise; + function stat( + path: PathLike, + opts: StatOptions & { + bigint: true; + } + ): Promise; + function stat(path: PathLike, opts?: StatOptions): Promise; + /** + * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function link(existingPath: PathLike, newPath: PathLike): Promise; + /** + * If `path` refers to a symbolic link, then the link is removed without affecting + * the file or directory to which that link refers. If the `path` refers to a file + * path that is not a symbolic link, the file is deleted. See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more detail. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function unlink(path: PathLike): Promise; + /** + * Changes the permissions of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the permissions on a symbolic link. + * + * This method is only implemented on macOS. + * @deprecated Since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchmod(path: PathLike, mode: Mode): Promise; + /** + * Changes the ownership on a symbolic link. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function lchown(path: PathLike, uid: number, gid: number): Promise; + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, with the difference that if the path refers to a + * symbolic link, then the link is not dereferenced: instead, the timestamps of + * the symbolic link itself are changed. + * @since v14.5.0, v12.19.0 + * @return Fulfills with `undefined` upon success. + */ + function lutimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + /** + * Changes the ownership of a file. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function chown(path: PathLike, uid: number, gid: number): Promise; + /** + * Change the file system timestamps of the object referenced by `path`. + * + * The `atime` and `mtime` arguments follow these rules: + * + * * Values can be either numbers representing Unix epoch time, `Date`s, or a + * numeric string like `'123456789.0'`. + * * If the value can not be converted to a number, or is `NaN`, `Infinity` or`-Infinity`, an `Error` will be thrown. + * @since v10.0.0 + * @return Fulfills with `undefined` upon success. + */ + function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + /** + * Determines the actual location of `path` using the same semantics as the`fs.realpath.native()` function. + * + * Only paths that can be converted to UTF8 strings are supported. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use for + * the path. If the `encoding` is set to `'buffer'`, the path returned will be + * passed as a `Buffer` object. + * + * On Linux, when Node.js is linked against musl libc, the procfs file system must + * be mounted on `/proc` in order for this function to work. Glibc does not have + * this restriction. + * @since v10.0.0 + * @return Fulfills with the resolved path upon success. + */ + function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options: BufferEncodingOption): Promise; + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Creates a unique temporary directory. A unique directory name is generated by + * appending six random characters to the end of the provided `prefix`. Due to + * platform inconsistencies, avoid trailing `X` characters in `prefix`. Some + * platforms, notably the BSDs, can return more than six random characters, and + * replace trailing `X` characters in `prefix` with random characters. + * + * The optional `options` argument can be a string specifying an encoding, or an + * object with an `encoding` property specifying the character encoding to use. + * + * ```js + * import { mkdtemp } from 'fs/promises'; + * + * try { + * await mkdtemp(path.join(os.tmpdir(), 'foo-')); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * The `fsPromises.mkdtemp()` method will append the six randomly selected + * characters directly to the `prefix` string. For instance, given a directory`/tmp`, if the intention is to create a temporary directory _within_`/tmp`, the`prefix` must end with a trailing + * platform-specific path separator + * (`require('path').sep`). + * @since v10.0.0 + * @return Fulfills with a string containing the filesystem path of the newly created temporary directory. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; + /** + * Asynchronously writes data to a file, replacing the file if it already exists.`data` can be a string, a `Buffer`, or, an object with an own (not inherited)`toString` function property. + * + * The `encoding` option is ignored if `data` is a buffer. + * + * If `options` is a string, then it specifies the encoding. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * Any specified `FileHandle` has to support writing. + * + * It is unsafe to use `fsPromises.writeFile()` multiple times on the same file + * without waiting for the promise to be settled. + * + * Similarly to `fsPromises.readFile` \- `fsPromises.writeFile` is a convenience + * method that performs multiple `write` calls internally to write the buffer + * passed to it. For performance sensitive code consider using `fs.createWriteStream()`. + * + * It is possible to use an `AbortSignal` to cancel an `fsPromises.writeFile()`. + * Cancelation is "best effort", and some amount of data is likely still + * to be written. + * + * ```js + * import { writeFile } from 'fs/promises'; + * import { Buffer } from 'buffer'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const data = new Uint8Array(Buffer.from('Hello Node.js')); + * const promise = writeFile('message.txt', data, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.writeFile` performs. + * @since v10.0.0 + * @param file filename or `FileHandle` + * @return Fulfills with `undefined` upon success. + */ + function writeFile( + file: PathLike | FileHandle, + data: string | NodeJS.ArrayBufferView | Iterable | AsyncIterable | Stream, + options?: + | (ObjectEncodingOptions & { + mode?: Mode | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding + | null + ): Promise; + /** + * Asynchronously append data to a file, creating the file if it does not yet + * exist. `data` can be a string or a `Buffer`. + * + * If `options` is a string, then it specifies the `encoding`. + * + * The `mode` option only affects the newly created file. See `fs.open()` for more details. + * + * The `path` may be specified as a `FileHandle` that has been opened + * for appending (using `fsPromises.open()`). + * @since v10.0.0 + * @param path filename or {FileHandle} + * @return Fulfills with `undefined` upon success. + */ + function appendFile(path: PathLike | FileHandle, data: string | Uint8Array, options?: (ObjectEncodingOptions & FlagAndOpenMode) | BufferEncoding | null): Promise; + /** + * Asynchronously reads the entire contents of a file. + * + * If no encoding is specified (using `options.encoding`), the data is returned + * as a `Buffer` object. Otherwise, the data will be a string. + * + * If `options` is a string, then it specifies the encoding. + * + * When the `path` is a directory, the behavior of `fsPromises.readFile()` is + * platform-specific. On macOS, Linux, and Windows, the promise will be rejected + * with an error. On FreeBSD, a representation of the directory's contents will be + * returned. + * + * It is possible to abort an ongoing `readFile` using an `AbortSignal`. If a + * request is aborted the promise returned is rejected with an `AbortError`: + * + * ```js + * import { readFile } from 'fs/promises'; + * + * try { + * const controller = new AbortController(); + * const { signal } = controller; + * const promise = readFile(fileName, { signal }); + * + * // Abort the request before the promise settles. + * controller.abort(); + * + * await promise; + * } catch (err) { + * // When a request is aborted - err is an AbortError + * console.error(err); + * } + * ``` + * + * Aborting an ongoing request does not abort individual operating + * system requests but rather the internal buffering `fs.readFile` performs. + * + * Any specified `FileHandle` has to support reading. + * @since v10.0.0 + * @param path filename or `FileHandle` + * @return Fulfills with the contents of the file. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | ({ + encoding?: null | undefined; + flag?: OpenMode | undefined; + } & Abortable) + | null + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options: + | ({ + encoding: BufferEncoding; + flag?: OpenMode | undefined; + } & Abortable) + | BufferEncoding + ): Promise; + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: + | (ObjectEncodingOptions & + Abortable & { + flag?: OpenMode | undefined; + }) + | BufferEncoding + | null + ): Promise; + /** + * Asynchronously open a directory for iterative scanning. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for more detail. + * + * Creates an `fs.Dir`, which contains all further functions for reading from + * and cleaning up the directory. + * + * The `encoding` option sets the encoding for the `path` while opening the + * directory and subsequent read operations. + * + * Example using async iteration: + * + * ```js + * import { opendir } from 'fs/promises'; + * + * try { + * const dir = await opendir('./'); + * for await (const dirent of dir) + * console.log(dirent.name); + * } catch (err) { + * console.error(err); + * } + * ``` + * + * When using the async iterator, the `fs.Dir` object will be automatically + * closed after the iterator exits. + * @since v12.12.0 + * @return Fulfills with an {fs.Dir}. + */ + function opendir(path: PathLike, options?: OpenDirOptions): Promise; + /** + * Returns an async iterator that watches for changes on `filename`, where `filename`is either a file or a directory. + * + * ```js + * const { watch } = require('fs/promises'); + * + * const ac = new AbortController(); + * const { signal } = ac; + * setTimeout(() => ac.abort(), 10000); + * + * (async () => { + * try { + * const watcher = watch(__filename, { signal }); + * for await (const event of watcher) + * console.log(event); + * } catch (err) { + * if (err.name === 'AbortError') + * return; + * throw err; + * } + * })(); + * ``` + * + * On most platforms, `'rename'` is emitted whenever a filename appears or + * disappears in the directory. + * + * All the `caveats` for `fs.watch()` also apply to `fsPromises.watch()`. + * @since v15.9.0, v14.18.0 + * @return of objects with the properties: + */ + function watch( + filename: PathLike, + options: + | (WatchOptions & { + encoding: 'buffer'; + }) + | 'buffer' + ): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch(filename: PathLike, options?: WatchOptions | BufferEncoding): AsyncIterable>; + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + function watch(filename: PathLike, options: WatchOptions | string): AsyncIterable> | AsyncIterable>; + /** + * Asynchronously copies the entire directory structure from `src` to `dest`, + * including subdirectories and files. + * + * When copying a directory to another directory, globs are not supported and + * behavior is similar to `cp dir1/ dir2/`. + * @since v16.7.0 + * @experimental + * @param src source path to copy. + * @param dest destination path to copy to. + * @return Fulfills with `undefined` upon success. + */ + function cp(source: string, destination: string, opts?: CopyOptions): Promise; +} +declare module 'node:fs/promises' { + export * from 'fs/promises'; +} diff --git a/build/node_modules/@types/node/globals.d.ts b/build/node_modules/@types/node/globals.d.ts new file mode 100755 index 00000000..4533f1cb --- /dev/null +++ b/build/node_modules/@types/node/globals.d.ts @@ -0,0 +1,284 @@ +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces + */ + prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; + + stackTraceLimit: number; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ + +// For backwards compability +interface NodeRequire extends NodeJS.Require { } +interface RequireResolve extends NodeJS.RequireResolve { } +interface NodeModule extends NodeJS.Module { } + +declare var process: NodeJS.Process; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare var require: NodeRequire; +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +/** + * Only available if `--expose-gc` is passed to the process. + */ +declare var gc: undefined | (() => void); + +//#region borrowed +// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib +/** A controller object that allows you to abort one or more DOM requests as and when desired. */ +interface AbortController { + /** + * Returns the AbortSignal object associated with this object. + */ + + readonly signal: AbortSignal; + /** + * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. + */ + abort(): void; +} + +/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */ +interface AbortSignal { + /** + * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. + */ + readonly aborted: boolean; +} + +declare var AbortController: { + prototype: AbortController; + new(): AbortController; +}; + +declare var AbortSignal: { + prototype: AbortSignal; + new(): AbortSignal; + // TODO: Add abort() static +}; +//#endregion borrowed + +//#region ArrayLike.at() +interface RelativeIndexable { + /** + * Takes an integer value and returns the item at that index, + * allowing for positive and negative integers. + * Negative integers count back from the last item in the array. + */ + at(index: number): T | undefined; +} +interface String extends RelativeIndexable {} +interface Array extends RelativeIndexable {} +interface Int8Array extends RelativeIndexable {} +interface Uint8Array extends RelativeIndexable {} +interface Uint8ClampedArray extends RelativeIndexable {} +interface Int16Array extends RelativeIndexable {} +interface Uint16Array extends RelativeIndexable {} +interface Int32Array extends RelativeIndexable {} +interface Uint32Array extends RelativeIndexable {} +interface Float32Array extends RelativeIndexable {} +interface Float64Array extends RelativeIndexable {} +interface BigInt64Array extends RelativeIndexable {} +interface BigUint64Array extends RelativeIndexable {} +//#endregion ArrayLike.at() end + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface CallSite { + /** + * Value of "this" + */ + getThis(): unknown; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | null; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number | undefined; + code?: string | undefined; + path?: string | undefined; + syscall?: string | undefined; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean | undefined; }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + end(cb?: () => void): this; + end(data: string | Uint8Array, cb?: () => void): this; + end(str: string, encoding?: BufferEncoding, cb?: () => void): this; + } + + interface ReadWriteStream extends ReadableStream, WritableStream { } + + interface RefCounted { + ref(): this; + unref(): this; + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + interface Require { + (id: string): any; + resolve: RequireResolve; + cache: Dict; + /** + * @deprecated + */ + extensions: RequireExtensions; + main: Module | undefined; + } + + interface RequireResolve { + (id: string, options?: { paths?: string[] | undefined; }): string; + paths(request: string): string[] | null; + } + + interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { + '.js': (m: Module, filename: string) => any; + '.json': (m: Module, filename: string) => any; + '.node': (m: Module, filename: string) => any; + } + interface Module { + /** + * `true` if the module is running during the Node.js preload + */ + isPreloading: boolean; + exports: any; + require: Require; + id: string; + filename: string; + loaded: boolean; + /** @deprecated since 14.6.0 Please use `require.main` and `module.children` instead. */ + parent: Module | null | undefined; + children: Module[]; + /** + * @since 11.14.0 + * + * The directory name of the module. This is usually the same as the path.dirname() of the module.id. + */ + path: string; + paths: string[]; + } + + interface Dict { + [key: string]: T | undefined; + } + + interface ReadOnlyDict { + readonly [key: string]: T | undefined; + } +} diff --git a/build/node_modules/@types/node/globals.global.d.ts b/build/node_modules/@types/node/globals.global.d.ts new file mode 100755 index 00000000..ef1198c0 --- /dev/null +++ b/build/node_modules/@types/node/globals.global.d.ts @@ -0,0 +1 @@ +declare var global: typeof globalThis; diff --git a/build/node_modules/@types/node/http.d.ts b/build/node_modules/@types/node/http.d.ts new file mode 100755 index 00000000..bb3a93cd --- /dev/null +++ b/build/node_modules/@types/node/http.d.ts @@ -0,0 +1,1396 @@ +/** + * To use the HTTP server and client one must `require('http')`. + * + * The HTTP interfaces in Node.js are designed to support many features + * of the protocol which have been traditionally difficult to use. + * In particular, large, possibly chunk-encoded, messages. The interface is + * careful to never buffer entire requests or responses, so the + * user is able to stream data. + * + * HTTP message headers are represented by an object like this: + * + * ```js + * { 'content-length': '123', + * 'content-type': 'text/plain', + * 'connection': 'keep-alive', + * 'host': 'mysite.com', + * 'accept': '*' } + * ``` + * + * Keys are lowercased. Values are not modified. + * + * In order to support the full spectrum of possible HTTP applications, the Node.js + * HTTP API is very low-level. It deals with stream handling and message + * parsing only. It parses a message into headers and body but it does not + * parse the actual headers or the body. + * + * See `message.headers` for details on how duplicate headers are handled. + * + * The raw headers as they were received are retained in the `rawHeaders`property, which is an array of `[key, value, key2, value2, ...]`. For + * example, the previous message header object might have a `rawHeaders`list like the following: + * + * ```js + * [ 'ConTent-Length', '123456', + * 'content-LENGTH', '123', + * 'content-type', 'text/plain', + * 'CONNECTION', 'keep-alive', + * 'Host', 'mysite.com', + * 'accepT', '*' ] + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/http.js) + */ +declare module 'http' { + import * as stream from 'node:stream'; + import { URL } from 'node:url'; + import { TcpSocketConnectOpts, Socket, Server as NetServer, LookupFunction } from 'node:net'; + // incoming headers will never contain number + interface IncomingHttpHeaders extends NodeJS.Dict { + accept?: string | undefined; + 'accept-language'?: string | undefined; + 'accept-patch'?: string | undefined; + 'accept-ranges'?: string | undefined; + 'access-control-allow-credentials'?: string | undefined; + 'access-control-allow-headers'?: string | undefined; + 'access-control-allow-methods'?: string | undefined; + 'access-control-allow-origin'?: string | undefined; + 'access-control-expose-headers'?: string | undefined; + 'access-control-max-age'?: string | undefined; + 'access-control-request-headers'?: string | undefined; + 'access-control-request-method'?: string | undefined; + age?: string | undefined; + allow?: string | undefined; + 'alt-svc'?: string | undefined; + authorization?: string | undefined; + 'cache-control'?: string | undefined; + connection?: string | undefined; + 'content-disposition'?: string | undefined; + 'content-encoding'?: string | undefined; + 'content-language'?: string | undefined; + 'content-length'?: string | undefined; + 'content-location'?: string | undefined; + 'content-range'?: string | undefined; + 'content-type'?: string | undefined; + cookie?: string | undefined; + date?: string | undefined; + etag?: string | undefined; + expect?: string | undefined; + expires?: string | undefined; + forwarded?: string | undefined; + from?: string | undefined; + host?: string | undefined; + 'if-match'?: string | undefined; + 'if-modified-since'?: string | undefined; + 'if-none-match'?: string | undefined; + 'if-unmodified-since'?: string | undefined; + 'last-modified'?: string | undefined; + location?: string | undefined; + origin?: string | undefined; + pragma?: string | undefined; + 'proxy-authenticate'?: string | undefined; + 'proxy-authorization'?: string | undefined; + 'public-key-pins'?: string | undefined; + range?: string | undefined; + referer?: string | undefined; + 'retry-after'?: string | undefined; + 'sec-websocket-accept'?: string | undefined; + 'sec-websocket-extensions'?: string | undefined; + 'sec-websocket-key'?: string | undefined; + 'sec-websocket-protocol'?: string | undefined; + 'sec-websocket-version'?: string | undefined; + 'set-cookie'?: string[] | undefined; + 'strict-transport-security'?: string | undefined; + tk?: string | undefined; + trailer?: string | undefined; + 'transfer-encoding'?: string | undefined; + upgrade?: string | undefined; + 'user-agent'?: string | undefined; + vary?: string | undefined; + via?: string | undefined; + warning?: string | undefined; + 'www-authenticate'?: string | undefined; + } + // outgoing headers allows numbers (as they are converted internally to strings) + type OutgoingHttpHeader = number | string | string[]; + interface OutgoingHttpHeaders extends NodeJS.Dict {} + interface ClientRequestArgs { + signal?: AbortSignal | undefined; + protocol?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + family?: number | undefined; + port?: number | string | null | undefined; + defaultPort?: number | string | undefined; + localAddress?: string | undefined; + socketPath?: string | undefined; + /** + * @default 8192 + */ + maxHeaderSize?: number | undefined; + method?: string | undefined; + path?: string | null | undefined; + headers?: OutgoingHttpHeaders | undefined; + auth?: string | null | undefined; + agent?: Agent | boolean | undefined; + _defaultAgent?: Agent | undefined; + timeout?: number | undefined; + setHost?: boolean | undefined; + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 + createConnection?: ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) | undefined; + lookup?: LookupFunction | undefined; + } + interface ServerOptions { + IncomingMessage?: typeof IncomingMessage | undefined; + ServerResponse?: typeof ServerResponse | undefined; + /** + * Optionally overrides the value of + * `--max-http-header-size` for requests received by this server, i.e. + * the maximum length of request headers in bytes. + * @default 8192 + */ + maxHeaderSize?: number | undefined; + /** + * Use an insecure HTTP parser that accepts invalid HTTP headers when true. + * Using the insecure parser should be avoided. + * See --insecure-http-parser for more information. + * @default false + */ + insecureHTTPParser?: boolean | undefined; + } + type RequestListener = (req: IncomingMessage, res: ServerResponse) => void; + /** + * @since v0.1.17 + */ + class Server extends NetServer { + constructor(requestListener?: RequestListener); + constructor(options: ServerOptions, requestListener?: RequestListener); + /** + * Sets the timeout value for sockets, and emits a `'timeout'` event on + * the Server object, passing the socket as an argument, if a timeout + * occurs. + * + * If there is a `'timeout'` event listener on the Server object, then it + * will be called with the timed-out socket as an argument. + * + * By default, the Server does not timeout sockets. However, if a callback + * is assigned to the Server's `'timeout'` event, timeouts must be handled + * explicitly. + * @since v0.9.12 + * @param [msecs=0 (no timeout)] + */ + setTimeout(msecs?: number, callback?: () => void): this; + setTimeout(callback: () => void): this; + /** + * Limits maximum incoming headers count. If set to 0, no limit will be applied. + * @since v0.7.0 + */ + maxHeadersCount: number | null; + /** + * The maximum number of requests socket can handle + * before closing keep alive connection. + * + * A value of `0` will disable the limit. + * + * When the limit is reached it will set the `Connection` header value to `close`, + * but will not actually close the connection, subsequent requests sent + * after the limit is reached will get `503 Service Unavailable` as a response. + * @since v16.10.0 + */ + maxRequestsPerSocket: number | null; + /** + * The number of milliseconds of inactivity before a socket is presumed + * to have timed out. + * + * A value of `0` will disable the timeout behavior on incoming connections. + * + * The socket timeout logic is set up on connection, so changing this + * value only affects new connections to the server, not any existing connections. + * @since v0.9.12 + */ + timeout: number; + /** + * Limit the amount of time the parser will wait to receive the complete HTTP + * headers. + * + * In case of inactivity, the rules defined in `server.timeout` apply. However, + * that inactivity based timeout would still allow the connection to be kept open + * if the headers are being sent very slowly (by default, up to a byte per 2 + * minutes). In order to prevent this, whenever header data arrives an additional + * check is made that more than `server.headersTimeout` milliseconds has not + * passed since the connection was established. If the check fails, a `'timeout'`event is emitted on the server object, and (by default) the socket is destroyed. + * See `server.timeout` for more information on how timeout behavior can be + * customized. + * @since v11.3.0, v10.14.0 + */ + headersTimeout: number; + /** + * The number of milliseconds of inactivity a server needs to wait for additional + * incoming data, after it has finished writing the last response, before a socket + * will be destroyed. If the server receives new data before the keep-alive + * timeout has fired, it will reset the regular inactivity timeout, i.e.,`server.timeout`. + * + * A value of `0` will disable the keep-alive timeout behavior on incoming + * connections. + * A value of `0` makes the http server behave similarly to Node.js versions prior + * to 8.0.0, which did not have a keep-alive timeout. + * + * The socket timeout logic is set up on connection, so changing this value only + * affects new connections to the server, not any existing connections. + * @since v8.0.0 + */ + keepAliveTimeout: number; + /** + * Sets the timeout value in milliseconds for receiving the entire request from + * the client. + * + * If the timeout expires, the server responds with status 408 without + * forwarding the request to the request listener and then closes the connection. + * + * It must be set to a non-zero value (e.g. 120 seconds) to protect against + * potential Denial-of-Service attacks in case the server is deployed without a + * reverse proxy in front. + * @since v14.11.0 + */ + requestTimeout: number; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'connection', listener: (socket: Socket) => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'listening', listener: () => void): this; + addListener(event: 'checkContinue', listener: RequestListener): this; + addListener(event: 'checkExpectation', listener: RequestListener): this; + addListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this; + addListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + addListener(event: 'request', listener: RequestListener): this; + addListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + emit(event: string, ...args: any[]): boolean; + emit(event: 'close'): boolean; + emit(event: 'connection', socket: Socket): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'listening'): boolean; + emit(event: 'checkContinue', req: IncomingMessage, res: ServerResponse): boolean; + emit(event: 'checkExpectation', req: IncomingMessage, res: ServerResponse): boolean; + emit(event: 'clientError', err: Error, socket: stream.Duplex): boolean; + emit(event: 'connect', req: IncomingMessage, socket: stream.Duplex, head: Buffer): boolean; + emit(event: 'request', req: IncomingMessage, res: ServerResponse): boolean; + emit(event: 'upgrade', req: IncomingMessage, socket: stream.Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'connection', listener: (socket: Socket) => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'listening', listener: () => void): this; + on(event: 'checkContinue', listener: RequestListener): this; + on(event: 'checkExpectation', listener: RequestListener): this; + on(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this; + on(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + on(event: 'request', listener: RequestListener): this; + on(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'connection', listener: (socket: Socket) => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'listening', listener: () => void): this; + once(event: 'checkContinue', listener: RequestListener): this; + once(event: 'checkExpectation', listener: RequestListener): this; + once(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this; + once(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + once(event: 'request', listener: RequestListener): this; + once(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'connection', listener: (socket: Socket) => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'listening', listener: () => void): this; + prependListener(event: 'checkContinue', listener: RequestListener): this; + prependListener(event: 'checkExpectation', listener: RequestListener): this; + prependListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this; + prependListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + prependListener(event: 'request', listener: RequestListener): this; + prependListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'connection', listener: (socket: Socket) => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'listening', listener: () => void): this; + prependOnceListener(event: 'checkContinue', listener: RequestListener): this; + prependOnceListener(event: 'checkExpectation', listener: RequestListener): this; + prependOnceListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this; + prependOnceListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + prependOnceListener(event: 'request', listener: RequestListener): this; + prependOnceListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this; + } + /** + * This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract of outgoing message from + * the perspective of the participants of HTTP transaction. + * @since v0.1.17 + */ + class OutgoingMessage extends stream.Writable { + readonly req: IncomingMessage; + chunkedEncoding: boolean; + shouldKeepAlive: boolean; + useChunkedEncodingByDefault: boolean; + sendDate: boolean; + /** + * @deprecated Use `writableEnded` instead. + */ + finished: boolean; + /** + * Read-only. `true` if the headers were sent, otherwise `false`. + * @since v0.9.3 + */ + readonly headersSent: boolean; + /** + * Aliases of `outgoingMessage.socket` + * @since v0.3.0 + * @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead. + */ + readonly connection: Socket | null; + /** + * Reference to the underlying socket. Usually, users will not want to access + * this property. + * + * After calling `outgoingMessage.end()`, this property will be nulled. + * @since v0.3.0 + */ + readonly socket: Socket | null; + constructor(); + /** + * Once a socket is associated with the message and is connected,`socket.setTimeout()` will be called with `msecs` as the first parameter. + * @since v0.9.12 + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event. + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * Sets a single header value for the header object. + * @since v0.4.0 + * @param name Header name + * @param value Header value + */ + setHeader(name: string, value: number | string | ReadonlyArray): this; + /** + * Gets the value of HTTP header with the given name. If such a name doesn't + * exist in message, it will be `undefined`. + * @since v0.4.0 + * @param name Name of header + */ + getHeader(name: string): number | string | string[] | undefined; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow + * copy is used, array values may be mutated without additional calls to + * various header-related HTTP module methods. The keys of the returned + * object are the header names and the values are the respective header + * values. All header names are lowercase. + * + * The object returned by the `outgoingMessage.getHeaders()` method does + * not prototypically inherit from the JavaScript Object. This means that + * typical Object methods such as `obj.toString()`, `obj.hasOwnProperty()`, + * and others are not defined and will not work. + * + * ```js + * outgoingMessage.setHeader('Foo', 'bar'); + * outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = outgoingMessage.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v8.0.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns an array of names of headers of the outgoing outgoingMessage. All + * names are lowercase. + * @since v8.0.0 + */ + getHeaderNames(): string[]; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name is case-insensitive. + * + * ```js + * const hasContentType = outgoingMessage.hasHeader('content-type'); + * ``` + * @since v8.0.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that is queued for implicit sending. + * + * ```js + * outgoingMessage.removeHeader('Content-Encoding'); + * ``` + * @since v0.4.0 + */ + removeHeader(name: string): void; + /** + * Adds HTTP trailers (headers but at the end of the message) to the message. + * + * Trailers are **only** be emitted if the message is chunked encoded. If not, + * the trailer will be silently discarded. + * + * HTTP requires the `Trailer` header to be sent to emit trailers, + * with a list of header fields in its value, e.g. + * + * ```js + * message.writeHead(200, { 'Content-Type': 'text/plain', + * 'Trailer': 'Content-MD5' }); + * message.write(fileData); + * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' }); + * message.end(); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v0.3.0 + */ + addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; + /** + * Compulsorily flushes the message headers + * + * For efficiency reason, Node.js normally buffers the message headers + * until `outgoingMessage.end()` is called or the first chunk of message data + * is written. It then tries to pack the headers and data into a single TCP + * packet. + * + * It is usually desired (it saves a TCP round-trip), but not when the first + * data is not sent until possibly much later. `outgoingMessage.flushHeaders()`bypasses the optimization and kickstarts the request. + * @since v1.6.0 + */ + flushHeaders(): void; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v0.1.17 + */ + class ServerResponse extends OutgoingMessage { + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v0.4.0 + */ + statusCode: number; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status message that will be sent to the client when + * the headers get flushed. If this is left as `undefined` then the standard + * message for the status code will be used. + * + * ```js + * response.statusMessage = 'Not found'; + * ``` + * + * After response header was sent to the client, this property indicates the + * status message which was sent out. + * @since v0.11.8 + */ + statusMessage: string; + constructor(req: IncomingMessage); + assignSocket(socket: Socket): void; + detachSocket(socket: Socket): void; + /** + * Sends a HTTP/1.1 100 Continue message to the client, indicating that + * the request body should be sent. See the `'checkContinue'` event on`Server`. + * @since v0.3.0 + */ + writeContinue(callback?: () => void): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * Optionally one can give a human-readable `statusMessage` as the second + * argument. + * + * `headers` may be an `Array` where the keys and values are in the same list. + * It is _not_ a list of tuples. So, the even-numbered offsets are key values, + * and the odd-numbered offsets are the associated values. The array is in the same + * format as `request.rawHeaders`. + * + * Returns a reference to the `ServerResponse`, so that calls can be chained. + * + * ```js + * const body = 'hello world'; + * response + * .writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain' + * }) + * .end(body); + * ``` + * + * This method must only be called once on a message and it must + * be called before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * If this method is called and `response.setHeader()` has not been called, + * it will directly write the supplied header values onto the network channel + * without caching internally, and the `response.getHeader()` on the header + * will not yield the expected result. If progressive population of headers is + * desired with potential future retrieval and modification, use `response.setHeader()` instead. + * + * ```js + * // Returns content-type = text/plain + * const server = http.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain' }); + * res.end('ok'); + * }); + * ``` + * + * `Content-Length` is given in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. Node.js + * does not check whether `Content-Length` and the length of the body which has + * been transmitted are equal or not. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v0.1.30 + */ + writeHead(statusCode: number, statusMessage?: string, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + /** + * Sends a HTTP/1.1 102 Processing message to the client, indicating that + * the request body should be sent. + * @since v10.0.0 + */ + writeProcessing(): void; + } + interface InformationEvent { + statusCode: number; + statusMessage: string; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + } + /** + * This object is created internally and returned from {@link request}. It + * represents an _in-progress_ request whose header has already been queued. The + * header is still mutable using the `setHeader(name, value)`,`getHeader(name)`, `removeHeader(name)` API. The actual header will + * be sent along with the first data chunk or when calling `request.end()`. + * + * To get the response, add a listener for `'response'` to the request object.`'response'` will be emitted from the request object when the response + * headers have been received. The `'response'` event is executed with one + * argument which is an instance of {@link IncomingMessage}. + * + * During the `'response'` event, one can add listeners to the + * response object; particularly to listen for the `'data'` event. + * + * If no `'response'` handler is added, then the response will be + * entirely discarded. However, if a `'response'` event handler is added, + * then the data from the response object **must** be consumed, either by + * calling `response.read()` whenever there is a `'readable'` event, or + * by adding a `'data'` handler, or by calling the `.resume()` method. + * Until the data is consumed, the `'end'` event will not fire. Also, until + * the data is read it will consume memory that can eventually lead to a + * 'process out of memory' error. + * + * For backward compatibility, `res` will only emit `'error'` if there is an`'error'` listener registered. + * + * Node.js does not check whether Content-Length and the length of the + * body which has been transmitted are equal or not. + * @since v0.1.17 + */ + class ClientRequest extends OutgoingMessage { + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v0.11.14 + * @deprecated Since v17.0.0 - Check `destroyed` instead. + */ + aborted: boolean; + /** + * The request host. + * @since v14.5.0, v12.19.0 + */ + host: string; + /** + * The request protocol. + * @since v14.5.0, v12.19.0 + */ + protocol: string; + /** + * Whether the request is send through a reused socket. + * @since v13.0.0, v12.16.0 + */ + reusedSocket: boolean; + /** + * Limits maximum response headers count. If set to 0, no limit will be applied. + * @default 2000 + */ + maxHeadersCount: number; + constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); + /** + * The request method. + * @since v0.1.97 + */ + method: string; + /** + * The request path. + * @since v0.4.0 + */ + path: string; + /** + * Marks the request as aborting. Calling this will cause remaining data + * in the response to be dropped and the socket to be destroyed. + * @since v0.3.8 + * @deprecated Since v14.1.0,v13.14.0 - Use `destroy` instead. + */ + abort(): void; + onSocket(socket: Socket): void; + /** + * Once a socket is assigned to this request and is connected `socket.setTimeout()` will be called. + * @since v0.5.9 + * @param timeout Milliseconds before a request times out. + * @param callback Optional function to be called when a timeout occurs. Same as binding to the `'timeout'` event. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Once a socket is assigned to this request and is connected `socket.setNoDelay()` will be called. + * @since v0.5.9 + */ + setNoDelay(noDelay?: boolean): void; + /** + * Once a socket is assigned to this request and is connected `socket.setKeepAlive()` will be called. + * @since v0.5.9 + */ + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + /** + * Returns an array containing the unique names of the current outgoing raw + * headers. Header names are returned with their exact casing being set. + * + * ```js + * request.setHeader('Foo', 'bar'); + * request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = request.getRawHeaderNames(); + * // headerNames === ['Foo', 'Set-Cookie'] + * ``` + * @since v15.13.0, v14.17.0 + */ + getRawHeaderNames(): string[]; + /** + * @deprecated + */ + addListener(event: 'abort', listener: () => void): this; + addListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + addListener(event: 'continue', listener: () => void): this; + addListener(event: 'information', listener: (info: InformationEvent) => void): this; + addListener(event: 'response', listener: (response: IncomingMessage) => void): this; + addListener(event: 'socket', listener: (socket: Socket) => void): this; + addListener(event: 'timeout', listener: () => void): this; + addListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + on(event: 'abort', listener: () => void): this; + on(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: 'continue', listener: () => void): this; + on(event: 'information', listener: (info: InformationEvent) => void): this; + on(event: 'response', listener: (response: IncomingMessage) => void): this; + on(event: 'socket', listener: (socket: Socket) => void): this; + on(event: 'timeout', listener: () => void): this; + on(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'pipe', listener: (src: stream.Readable) => void): this; + on(event: 'unpipe', listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + once(event: 'abort', listener: () => void): this; + once(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: 'continue', listener: () => void): this; + once(event: 'information', listener: (info: InformationEvent) => void): this; + once(event: 'response', listener: (response: IncomingMessage) => void): this; + once(event: 'socket', listener: (socket: Socket) => void): this; + once(event: 'timeout', listener: () => void): this; + once(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'pipe', listener: (src: stream.Readable) => void): this; + once(event: 'unpipe', listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependListener(event: 'abort', listener: () => void): this; + prependListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + prependListener(event: 'continue', listener: () => void): this; + prependListener(event: 'information', listener: (info: InformationEvent) => void): this; + prependListener(event: 'response', listener: (response: IncomingMessage) => void): this; + prependListener(event: 'socket', listener: (socket: Socket) => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + /** + * @deprecated + */ + prependOnceListener(event: 'abort', listener: () => void): this; + prependOnceListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + prependOnceListener(event: 'continue', listener: () => void): this; + prependOnceListener(event: 'information', listener: (info: InformationEvent) => void): this; + prependOnceListener(event: 'response', listener: (response: IncomingMessage) => void): this; + prependOnceListener(event: 'socket', listener: (socket: Socket) => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * An `IncomingMessage` object is created by {@link Server} or {@link ClientRequest} and passed as the first argument to the `'request'` and `'response'` event respectively. It may be used to + * access response + * status, headers and data. + * + * Different from its `socket` value which is a subclass of `stream.Duplex`, the`IncomingMessage` itself extends `stream.Readable` and is created separately to + * parse and emit the incoming HTTP headers and payload, as the underlying socket + * may be reused multiple times in case of keep-alive. + * @since v0.1.17 + */ + class IncomingMessage extends stream.Readable { + constructor(socket: Socket); + /** + * The `message.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + * @deprecated Since v17.0.0 - Check `message.destroyed` from [stream.Readable](https://nodejs.org/dist/latest-v17.x/docs/api/stream.html#class-streamreadable). + */ + aborted: boolean; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. + * Probably either `'1.1'` or `'1.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v0.1.1 + */ + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + /** + * The `message.complete` property will be `true` if a complete HTTP message has + * been received and successfully parsed. + * + * This property is particularly useful as a means of determining if a client or + * server fully transmitted a message before a connection was terminated: + * + * ```js + * const req = http.request({ + * host: '127.0.0.1', + * port: 8080, + * method: 'POST' + * }, (res) => { + * res.resume(); + * res.on('end', () => { + * if (!res.complete) + * console.error( + * 'The connection was terminated while the message was still being sent'); + * }); + * }); + * ``` + * @since v0.3.0 + */ + complete: boolean; + /** + * Alias for `message.socket`. + * @since v0.1.90 + * @deprecated Since v16.0.0 - Use `socket`. + */ + connection: Socket; + /** + * The `net.Socket` object associated with the connection. + * + * With HTTPS support, use `request.socket.getPeerCertificate()` to obtain the + * client's authentication details. + * + * This property is guaranteed to be an instance of the `net.Socket` class, + * a subclass of `stream.Duplex`, unless the user specified a socket + * type other than `net.Socket`. + * @since v0.3.0 + */ + socket: Socket; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * Duplicates in raw headers are handled in the following ways, depending on the + * header name: + * + * * Duplicates of `age`, `authorization`, `content-length`, `content-type`,`etag`, `expires`, `from`, `host`, `if-modified-since`, `if-unmodified-since`,`last-modified`, `location`, + * `max-forwards`, `proxy-authorization`, `referer`,`retry-after`, `server`, or `user-agent` are discarded. + * * `set-cookie` is always an array. Duplicates are added to the array. + * * For duplicate `cookie` headers, the values are joined together with '; '. + * * For all other headers, the values are joined together with ', '. + * @since v0.1.5 + */ + headers: IncomingHttpHeaders; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v0.11.6 + */ + rawHeaders: string[]; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v0.3.0 + */ + trailers: NodeJS.Dict; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v0.11.6 + */ + rawTrailers: string[]; + /** + * Calls `message.socket.setTimeout(msecs, callback)`. + * @since v0.5.9 + */ + setTimeout(msecs: number, callback?: () => void): this; + /** + * **Only valid for request obtained from {@link Server}.** + * + * The request method as a string. Read only. Examples: `'GET'`, `'DELETE'`. + * @since v0.1.1 + */ + method?: string | undefined; + /** + * **Only valid for request obtained from {@link Server}.** + * + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. Take the following request: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * To parse the URL into its parts: + * + * ```js + * new URL(request.url, `http://${request.headers.host}`); + * ``` + * + * When `request.url` is `'/status?name=ryan'` and`request.headers.host` is `'localhost:3000'`: + * + * ```console + * $ node + * > new URL(request.url, `http://${request.headers.host}`) + * URL { + * href: 'http://localhost:3000/status?name=ryan', + * origin: 'http://localhost:3000', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'localhost:3000', + * hostname: 'localhost', + * port: '3000', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v0.1.90 + */ + url?: string | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The 3-digit HTTP response status code. E.G. `404`. + * @since v0.1.1 + */ + statusCode?: number | undefined; + /** + * **Only valid for response obtained from {@link ClientRequest}.** + * + * The HTTP response status message (reason phrase). E.G. `OK` or `Internal Server Error`. + * @since v0.11.10 + */ + statusMessage?: string | undefined; + /** + * Calls `destroy()` on the socket that received the `IncomingMessage`. If `error`is provided, an `'error'` event is emitted on the socket and `error` is passed + * as an argument to any listeners on the event. + * @since v0.3.0 + */ + destroy(error?: Error): this; + } + interface AgentOptions extends Partial { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean | undefined; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number | undefined; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number | undefined; + /** + * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. + */ + maxTotalSockets?: number | undefined; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number | undefined; + /** + * Socket timeout in milliseconds. This will set the timeout after the socket is connected. + */ + timeout?: number | undefined; + /** + * Scheduling strategy to apply when picking the next free socket to use. + * @default `lifo` + */ + scheduling?: 'fifo' | 'lifo' | undefined; + } + /** + * An `Agent` is responsible for managing connection persistence + * and reuse for HTTP clients. It maintains a queue of pending requests + * for a given host and port, reusing a single socket connection for each + * until the queue is empty, at which time the socket is either destroyed + * or put into a pool where it is kept to be used again for requests to the + * same host and port. Whether it is destroyed or pooled depends on the`keepAlive` `option`. + * + * Pooled connections have TCP Keep-Alive enabled for them, but servers may + * still close idle connections, in which case they will be removed from the + * pool and a new connection will be made when a new HTTP request is made for + * that host and port. Servers may also refuse to allow multiple requests + * over the same connection, in which case the connection will have to be + * remade for every request and cannot be pooled. The `Agent` will still make + * the requests to that server, but each one will occur over a new connection. + * + * When a connection is closed by the client or the server, it is removed + * from the pool. Any unused sockets in the pool will be unrefed so as not + * to keep the Node.js process running when there are no outstanding requests. + * (see `socket.unref()`). + * + * It is good practice, to `destroy()` an `Agent` instance when it is no + * longer in use, because unused sockets consume OS resources. + * + * Sockets are removed from an agent when the socket emits either + * a `'close'` event or an `'agentRemove'` event. When intending to keep one + * HTTP request open for a long time without keeping it in the agent, something + * like the following may be done: + * + * ```js + * http.get(options, (res) => { + * // Do stuff + * }).on('socket', (socket) => { + * socket.emit('agentRemove'); + * }); + * ``` + * + * An agent may also be used for an individual request. By providing`{agent: false}` as an option to the `http.get()` or `http.request()`functions, a one-time use `Agent` with default options + * will be used + * for the client connection. + * + * `agent:false`: + * + * ```js + * http.get({ + * hostname: 'localhost', + * port: 80, + * path: '/', + * agent: false // Create a new agent just for this one request + * }, (res) => { + * // Do stuff with response + * }); + * ``` + * @since v0.3.4 + */ + class Agent { + /** + * By default set to 256\. For agents with `keepAlive` enabled, this + * sets the maximum number of sockets that will be left open in the free + * state. + * @since v0.11.7 + */ + maxFreeSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open per origin. Origin is the returned value of `agent.getName()`. + * @since v0.3.6 + */ + maxSockets: number; + /** + * By default set to `Infinity`. Determines how many concurrent sockets the agent + * can have open. Unlike `maxSockets`, this parameter applies across all origins. + * @since v14.5.0, v12.19.0 + */ + maxTotalSockets: number; + /** + * An object which contains arrays of sockets currently awaiting use by + * the agent when `keepAlive` is enabled. Do not modify. + * + * Sockets in the `freeSockets` list will be automatically destroyed and + * removed from the array on `'timeout'`. + * @since v0.11.4 + */ + readonly freeSockets: NodeJS.ReadOnlyDict; + /** + * An object which contains arrays of sockets currently in use by the + * agent. Do not modify. + * @since v0.3.6 + */ + readonly sockets: NodeJS.ReadOnlyDict; + /** + * An object which contains queues of requests that have not yet been assigned to + * sockets. Do not modify. + * @since v0.5.9 + */ + readonly requests: NodeJS.ReadOnlyDict; + constructor(opts?: AgentOptions); + /** + * Destroy any sockets that are currently in use by the agent. + * + * It is usually not necessary to do this. However, if using an + * agent with `keepAlive` enabled, then it is best to explicitly shut down + * the agent when it is no longer needed. Otherwise, + * sockets might stay open for quite a long time before the server + * terminates them. + * @since v0.11.4 + */ + destroy(): void; + } + const METHODS: string[]; + const STATUS_CODES: { + [errorCode: number]: string | undefined; + [errorCode: string]: string | undefined; + }; + /** + * Returns a new instance of {@link Server}. + * + * The `requestListener` is a function which is automatically + * added to the `'request'` event. + * @since v0.1.13 + */ + function createServer(requestListener?: RequestListener): Server; + function createServer(options: ServerOptions, requestListener?: RequestListener): Server; + // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, + // create interface RequestOptions would make the naming more clear to developers + interface RequestOptions extends ClientRequestArgs {} + /** + * Node.js maintains several connections per server to make HTTP requests. + * This function allows one to transparently issue requests. + * + * `url` can be a string or a `URL` object. If `url` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * If both `url` and `options` are specified, the objects are merged, with the`options` properties taking precedence. + * + * The optional `callback` parameter will be added as a one-time listener for + * the `'response'` event. + * + * `http.request()` returns an instance of the {@link ClientRequest} class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * const http = require('http'); + * + * const postData = JSON.stringify({ + * 'msg': 'Hello World!' + * }); + * + * const options = { + * hostname: 'www.google.com', + * port: 80, + * path: '/upload', + * method: 'POST', + * headers: { + * 'Content-Type': 'application/json', + * 'Content-Length': Buffer.byteLength(postData) + * } + * }; + * + * const req = http.request(options, (res) => { + * console.log(`STATUS: ${res.statusCode}`); + * console.log(`HEADERS: ${JSON.stringify(res.headers)}`); + * res.setEncoding('utf8'); + * res.on('data', (chunk) => { + * console.log(`BODY: ${chunk}`); + * }); + * res.on('end', () => { + * console.log('No more data in response.'); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(`problem with request: ${e.message}`); + * }); + * + * // Write data to request body + * req.write(postData); + * req.end(); + * ``` + * + * In the example `req.end()` was called. With `http.request()` one + * must always call `req.end()` to signify the end of the request - + * even if there is no data being written to the request body. + * + * If any error is encountered during the request (be that with DNS resolution, + * TCP level errors, or actual HTTP parse errors) an `'error'` event is emitted + * on the returned request object. As with all `'error'` events, if no listeners + * are registered the error will be thrown. + * + * There are a few special headers that should be noted. + * + * * Sending a 'Connection: keep-alive' will notify Node.js that the connection to + * the server should be persisted until the next request. + * * Sending a 'Content-Length' header will disable the default chunked encoding. + * * Sending an 'Expect' header will immediately send the request headers. + * Usually, when sending 'Expect: 100-continue', both a timeout and a listener + * for the `'continue'` event should be set. See RFC 2616 Section 8.2.3 for more + * information. + * * Sending an Authorization header will override using the `auth` option + * to compute basic authentication. + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('http://abc:xyz@example.com'); + * + * const req = http.request(options, (res) => { + * // ... + * }); + * ``` + * + * In a successful request, the following events will be emitted in the following + * order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * (`'data'` will not be emitted at all if the response body is empty, for + * instance, in most redirects) + * * `'end'` on the `res` object + * * `'close'` + * + * In the case of a connection error, the following events will be emitted: + * + * * `'socket'` + * * `'error'` + * * `'close'` + * + * In the case of a premature connection close before the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * In the case of a premature connection close after the response is received, + * the following events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (connection closed here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'`. + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.destroy()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * If `req.destroy()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.destroy()` called here) + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * If `req.destroy()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.destroy()` called here) + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'`. + * * `'close'` + * * `'close'` on the `res` object + * + * If `req.abort()` is called before a socket is assigned, the following + * events will be emitted in the following order: + * + * * (`req.abort()` called here) + * * `'abort'` + * * `'close'` + * + * If `req.abort()` is called before the connection succeeds, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * (`req.abort()` called here) + * * `'abort'` + * * `'error'` with an error with message `'Error: socket hang up'` and code`'ECONNRESET'` + * * `'close'` + * + * If `req.abort()` is called after the response is received, the following + * events will be emitted in the following order: + * + * * `'socket'` + * * `'response'` + * * `'data'` any number of times, on the `res` object + * * (`req.abort()` called here) + * * `'abort'` + * * `'aborted'` on the `res` object + * * `'error'` on the `res` object with an error with message`'Error: aborted'` and code `'ECONNRESET'`. + * * `'close'` + * * `'close'` on the `res` object + * + * Setting the `timeout` option or using the `setTimeout()` function will + * not abort the request or do anything besides add a `'timeout'` event. + * + * Passing an `AbortSignal` and then calling `abort` on the corresponding`AbortController` will behave the same way as calling `.destroy()` on the + * request itself. + * @since v0.3.6 + */ + function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + /** + * Since most requests are GET requests without bodies, Node.js provides this + * convenience method. The only difference between this method and {@link request} is that it sets the method to GET and calls `req.end()`automatically. The callback must take care to consume the + * response + * data for reasons stated in {@link ClientRequest} section. + * + * The `callback` is invoked with a single argument that is an instance of {@link IncomingMessage}. + * + * JSON fetching example: + * + * ```js + * http.get('http://localhost:8000/', (res) => { + * const { statusCode } = res; + * const contentType = res.headers['content-type']; + * + * let error; + * // Any 2xx status code signals a successful response but + * // here we're only checking for 200. + * if (statusCode !== 200) { + * error = new Error('Request Failed.\n' + + * `Status Code: ${statusCode}`); + * } else if (!/^application\/json/.test(contentType)) { + * error = new Error('Invalid content-type.\n' + + * `Expected application/json but received ${contentType}`); + * } + * if (error) { + * console.error(error.message); + * // Consume response data to free up memory + * res.resume(); + * return; + * } + * + * res.setEncoding('utf8'); + * let rawData = ''; + * res.on('data', (chunk) => { rawData += chunk; }); + * res.on('end', () => { + * try { + * const parsedData = JSON.parse(rawData); + * console.log(parsedData); + * } catch (e) { + * console.error(e.message); + * } + * }); + * }).on('error', (e) => { + * console.error(`Got error: ${e.message}`); + * }); + * + * // Create a local server to receive data from + * const server = http.createServer((req, res) => { + * res.writeHead(200, { 'Content-Type': 'application/json' }); + * res.end(JSON.stringify({ + * data: 'Hello World!' + * })); + * }); + * + * server.listen(8000); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. Properties that are inherited from the prototype are ignored. + */ + function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + let globalAgent: Agent; + /** + * Read-only property specifying the maximum allowed size of HTTP headers in bytes. + * Defaults to 16KB. Configurable using the `--max-http-header-size` CLI option. + */ + const maxHeaderSize: number; +} +declare module 'node:http' { + export * from 'http'; +} diff --git a/build/node_modules/@types/node/http2.d.ts b/build/node_modules/@types/node/http2.d.ts new file mode 100755 index 00000000..1166c908 --- /dev/null +++ b/build/node_modules/@types/node/http2.d.ts @@ -0,0 +1,2100 @@ +/** + * The `http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol. It + * can be accessed using: + * + * ```js + * const http2 = require('http2'); + * ``` + * @since v8.4.0 + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/http2.js) + */ +declare module 'http2' { + import EventEmitter = require('node:events'); + import * as fs from 'node:fs'; + import * as net from 'node:net'; + import * as stream from 'node:stream'; + import * as tls from 'node:tls'; + import * as url from 'node:url'; + import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders, IncomingMessage, ServerResponse } from 'node:http'; + export { OutgoingHttpHeaders } from 'node:http'; + export interface IncomingHttpStatusHeader { + ':status'?: number | undefined; + } + export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { + ':path'?: string | undefined; + ':method'?: string | undefined; + ':authority'?: string | undefined; + ':scheme'?: string | undefined; + } + // Http2Stream + export interface StreamPriorityOptions { + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + silent?: boolean | undefined; + } + export interface StreamState { + localWindowSize?: number | undefined; + state?: number | undefined; + localClose?: number | undefined; + remoteClose?: number | undefined; + sumDependencyWeight?: number | undefined; + weight?: number | undefined; + } + export interface ServerStreamResponseOptions { + endStream?: boolean | undefined; + waitForTrailers?: boolean | undefined; + } + export interface StatOptions { + offset: number; + length: number; + } + export interface ServerStreamFileResponseOptions { + statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean; + waitForTrailers?: boolean | undefined; + offset?: number | undefined; + length?: number | undefined; + } + export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { + onError?(err: NodeJS.ErrnoException): void; + } + export interface Http2Stream extends stream.Duplex { + /** + * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set, + * the `'aborted'` event will have been emitted. + * @since v8.4.0 + */ + readonly aborted: boolean; + /** + * This property shows the number of characters currently buffered to be written. + * See `net.Socket.bufferSize` for details. + * @since v11.2.0, v10.16.0 + */ + readonly bufferSize: number; + /** + * Set to `true` if the `Http2Stream` instance has been closed. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer + * usable. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Set the `true` if the `END_STREAM` flag was set in the request or response + * HEADERS frame received, indicating that no additional data should be received + * and the readable side of the `Http2Stream` will be closed. + * @since v10.11.0 + */ + readonly endAfterHeaders: boolean; + /** + * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined`if the stream identifier has not yet been assigned. + * @since v8.4.0 + */ + readonly id?: number | undefined; + /** + * Set to `true` if the `Http2Stream` instance has not yet been assigned a + * numeric stream identifier. + * @since v9.4.0 + */ + readonly pending: boolean; + /** + * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is + * destroyed after either receiving an `RST_STREAM` frame from the connected peer, + * calling `http2stream.close()`, or `http2stream.destroy()`. Will be`undefined` if the `Http2Stream` has not been closed. + * @since v8.4.0 + */ + readonly rstCode: number; + /** + * An object containing the outbound headers sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentHeaders: OutgoingHttpHeaders; + /** + * An array of objects containing the outbound informational (additional) headers + * sent for this `Http2Stream`. + * @since v9.5.0 + */ + readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; + /** + * An object containing the outbound trailers sent for this `HttpStream`. + * @since v9.5.0 + */ + readonly sentTrailers?: OutgoingHttpHeaders | undefined; + /** + * A reference to the `Http2Session` instance that owns this `Http2Stream`. The + * value will be `undefined` after the `Http2Stream` instance is destroyed. + * @since v8.4.0 + */ + readonly session: Http2Session; + /** + * Provides miscellaneous information about the current state of the`Http2Stream`. + * + * A current state of this `Http2Stream`. + * @since v8.4.0 + */ + readonly state: StreamState; + /** + * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the + * connected HTTP/2 peer. + * @since v8.4.0 + * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code. + * @param callback An optional function registered to listen for the `'close'` event. + */ + close(code?: number, callback?: () => void): void; + /** + * Updates the priority for this `Http2Stream` instance. + * @since v8.4.0 + */ + priority(options: StreamPriorityOptions): void; + /** + * ```js + * const http2 = require('http2'); + * const client = http2.connect('http://example.org:8000'); + * const { NGHTTP2_CANCEL } = http2.constants; + * const req = client.request({ ':path': '/' }); + * + * // Cancel the stream if there's no activity after 5 seconds + * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL)); + * ``` + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method + * will cause the `Http2Stream` to be immediately closed and must only be + * called after the `'wantTrailers'` event has been emitted. When sending a + * request or sending a response, the `options.waitForTrailers` option must be set + * in order to keep the `Http2Stream` open after the final `DATA` frame so that + * trailers can be sent. + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond(undefined, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ xyz: 'abc' }); + * }); + * stream.end('Hello World'); + * }); + * ``` + * + * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header + * fields (e.g. `':method'`, `':path'`, etc). + * @since v10.0.0 + */ + sendTrailers(headers: OutgoingHttpHeaders): void; + addListener(event: 'aborted', listener: () => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this; + addListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + addListener(event: 'streamClosed', listener: (code: number) => void): this; + addListener(event: 'timeout', listener: () => void): this; + addListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: 'wantTrailers', listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'aborted'): boolean; + emit(event: 'close'): boolean; + emit(event: 'data', chunk: Buffer | string): boolean; + emit(event: 'drain'): boolean; + emit(event: 'end'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'finish'): boolean; + emit(event: 'frameError', frameType: number, errorCode: number): boolean; + emit(event: 'pipe', src: stream.Readable): boolean; + emit(event: 'unpipe', src: stream.Readable): boolean; + emit(event: 'streamClosed', code: number): boolean; + emit(event: 'timeout'): boolean; + emit(event: 'trailers', trailers: IncomingHttpHeaders, flags: number): boolean; + emit(event: 'wantTrailers'): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'aborted', listener: () => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'data', listener: (chunk: Buffer | string) => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this; + on(event: 'pipe', listener: (src: stream.Readable) => void): this; + on(event: 'unpipe', listener: (src: stream.Readable) => void): this; + on(event: 'streamClosed', listener: (code: number) => void): this; + on(event: 'timeout', listener: () => void): this; + on(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + on(event: 'wantTrailers', listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'aborted', listener: () => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'data', listener: (chunk: Buffer | string) => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this; + once(event: 'pipe', listener: (src: stream.Readable) => void): this; + once(event: 'unpipe', listener: (src: stream.Readable) => void): this; + once(event: 'streamClosed', listener: (code: number) => void): this; + once(event: 'timeout', listener: () => void): this; + once(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + once(event: 'wantTrailers', listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'aborted', listener: () => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this; + prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependListener(event: 'streamClosed', listener: (code: number) => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: 'wantTrailers', listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'aborted', listener: () => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this; + prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: 'streamClosed', listener: (code: number) => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: 'wantTrailers', listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Stream extends Http2Stream { + addListener(event: 'continue', listener: () => {}): this; + addListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + addListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'continue'): boolean; + emit(event: 'headers', headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: 'push', headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: 'response', headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'continue', listener: () => {}): this; + on(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + on(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + on(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'continue', listener: () => {}): this; + once(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + once(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + once(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'continue', listener: () => {}): this; + prependListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'continue', listener: () => {}): this; + prependOnceListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependOnceListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ServerHttp2Stream extends Http2Stream { + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote + * client's most recent `SETTINGS` frame. Will be `true` if the remote peer + * accepts push streams, `false` otherwise. Settings are the same for every`Http2Stream` in the same `Http2Session`. + * @since v8.4.0 + */ + readonly pushAllowed: boolean; + /** + * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer. + * @since v8.4.0 + */ + additionalHeaders(headers: OutgoingHttpHeaders): void; + /** + * Initiates a push stream. The callback is invoked with the new `Http2Stream`instance created for the push stream passed as the second argument, or an`Error` passed as the first argument. + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => { + * if (err) throw err; + * pushStream.respond({ ':status': 200 }); + * pushStream.end('some pushed data'); + * }); + * stream.end('some data'); + * }); + * ``` + * + * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass + * a `weight` value to `http2stream.priority` with the `silent` option set to`true` to enable server-side bandwidth balancing between concurrent streams. + * + * Calling `http2stream.pushStream()` from within a pushed stream is not permitted + * and will throw an error. + * @since v8.4.0 + * @param callback Callback that is called once the push stream has been initiated. + */ + pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void; + pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void; + /** + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }); + * stream.end('some data'); + * }); + * ``` + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respond({ ':status': 200 }, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * stream.end('some data'); + * }); + * ``` + * @since v8.4.0 + */ + respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; + /** + * Initiates a response whose data is read from the given file descriptor. No + * validation is performed on the given file descriptor. If an error occurs while + * attempting to read data using the file descriptor, the `Http2Stream` will be + * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * ```js + * const http2 = require('http2'); + * const fs = require('fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8' + * }; + * stream.respondWithFD(fd, headers); + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given fd. If the `statCheck` function is provided, the`http2stream.respondWithFD()` method will perform an `fs.fstat()` call to + * collect details on the provided file descriptor. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The file descriptor or `FileHandle` is not closed when the stream is closed, + * so it will need to be closed manually once it is no longer needed. + * Using the same file descriptor concurrently for multiple streams + * is not supported and may result in data loss. Re-using a file descriptor + * after a stream has finished is supported. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code _must_ call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('http2'); + * const fs = require('fs'); + * + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * const fd = fs.openSync('/some/file', 'r'); + * + * const stat = fs.fstatSync(fd); + * const headers = { + * 'content-length': stat.size, + * 'last-modified': stat.mtime.toUTCString(), + * 'content-type': 'text/plain; charset=utf-8' + * }; + * stream.respondWithFD(fd, headers, { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * + * stream.on('close', () => fs.closeSync(fd)); + * }); + * ``` + * @since v8.4.0 + * @param fd A readable file descriptor. + */ + respondWithFD(fd: number | fs.promises.FileHandle, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void; + /** + * Sends a regular file as the response. The `path` must specify a regular file + * or an `'error'` event will be emitted on the `Http2Stream` object. + * + * When used, the `Http2Stream` object's `Duplex` interface will be closed + * automatically. + * + * The optional `options.statCheck` function may be specified to give user code + * an opportunity to set additional content headers based on the `fs.Stat` details + * of the given file: + * + * If an error occurs while attempting to read the file data, the `Http2Stream`will be closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR`code. If the `onError` callback is + * defined, then it will be called. Otherwise + * the stream will be destroyed. + * + * Example using a file path: + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * headers['last-modified'] = stat.mtime.toUTCString(); + * } + * + * function onError(err) { + * // stream.respond() can throw if the stream has been destroyed by + * // the other side. + * try { + * if (err.code === 'ENOENT') { + * stream.respond({ ':status': 404 }); + * } else { + * stream.respond({ ':status': 500 }); + * } + * } catch (err) { + * // Perform actual error handling. + * console.log(err); + * } + * stream.end(); + * } + * + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck, onError }); + * }); + * ``` + * + * The `options.statCheck` function may also be used to cancel the send operation + * by returning `false`. For instance, a conditional request may check the stat + * results to determine if the file has been modified to return an appropriate`304` response: + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * function statCheck(stat, headers) { + * // Check the stat here... + * stream.respond({ ':status': 304 }); + * return false; // Cancel the send operation + * } + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { statCheck }); + * }); + * ``` + * + * The `content-length` header field will be automatically set. + * + * The `offset` and `length` options may be used to limit the response to a + * specific range subset. This can be used, for instance, to support HTTP Range + * requests. + * + * The `options.onError` function may also be used to handle all the errors + * that could happen before the delivery of the file is initiated. The + * default behavior is to destroy the stream. + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * will be emitted immediately after queuing the last chunk of payload data to be + * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing + * header fields to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer(); + * server.on('stream', (stream) => { + * stream.respondWithFile('/some/file', + * { 'content-type': 'text/plain; charset=utf-8' }, + * { waitForTrailers: true }); + * stream.on('wantTrailers', () => { + * stream.sendTrailers({ ABC: 'some value to send' }); + * }); + * }); + * ``` + * @since v8.4.0 + */ + respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void; + } + // Http2Session + export interface Settings { + headerTableSize?: number | undefined; + enablePush?: boolean | undefined; + initialWindowSize?: number | undefined; + maxFrameSize?: number | undefined; + maxConcurrentStreams?: number | undefined; + maxHeaderListSize?: number | undefined; + enableConnectProtocol?: boolean | undefined; + } + export interface ClientSessionRequestOptions { + endStream?: boolean | undefined; + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + waitForTrailers?: boolean | undefined; + } + export interface SessionState { + effectiveLocalWindowSize?: number | undefined; + effectiveRecvDataLength?: number | undefined; + nextStreamID?: number | undefined; + localWindowSize?: number | undefined; + lastProcStreamID?: number | undefined; + remoteWindowSize?: number | undefined; + outboundQueueSize?: number | undefined; + deflateDynamicTableSize?: number | undefined; + inflateDynamicTableSize?: number | undefined; + } + export interface Http2Session extends EventEmitter { + /** + * Value will be `undefined` if the `Http2Session` is not yet connected to a + * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or + * will return the value of the connected `TLSSocket`'s own `alpnProtocol`property. + * @since v9.4.0 + */ + readonly alpnProtocol?: string | undefined; + /** + * Will be `true` if this `Http2Session` instance has been closed, otherwise`false`. + * @since v9.4.0 + */ + readonly closed: boolean; + /** + * Will be `true` if this `Http2Session` instance is still connecting, will be set + * to `false` before emitting `connect` event and/or calling the `http2.connect`callback. + * @since v10.0.0 + */ + readonly connecting: boolean; + /** + * Will be `true` if this `Http2Session` instance has been destroyed and must no + * longer be used, otherwise `false`. + * @since v8.4.0 + */ + readonly destroyed: boolean; + /** + * Value is `undefined` if the `Http2Session` session socket has not yet been + * connected, `true` if the `Http2Session` is connected with a `TLSSocket`, + * and `false` if the `Http2Session` is connected to any other kind of socket + * or stream. + * @since v9.4.0 + */ + readonly encrypted?: boolean | undefined; + /** + * A prototype-less object describing the current local settings of this`Http2Session`. The local settings are local to _this_`Http2Session` instance. + * @since v8.4.0 + */ + readonly localSettings: Settings; + /** + * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property + * will return an `Array` of origins for which the `Http2Session` may be + * considered authoritative. + * + * The `originSet` property is only available when using a secure TLS connection. + * @since v9.4.0 + */ + readonly originSet?: string[] | undefined; + /** + * Indicates whether the `Http2Session` is currently waiting for acknowledgment of + * a sent `SETTINGS` frame. Will be `true` after calling the`http2session.settings()` method. Will be `false` once all sent `SETTINGS`frames have been acknowledged. + * @since v8.4.0 + */ + readonly pendingSettingsAck: boolean; + /** + * A prototype-less object describing the current remote settings of this`Http2Session`. The remote settings are set by the _connected_ HTTP/2 peer. + * @since v8.4.0 + */ + readonly remoteSettings: Settings; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * limits available methods to ones safe to use with HTTP/2. + * + * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw + * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information. + * + * `setTimeout` method will be called on this `Http2Session`. + * + * All other interactions will be routed directly to the socket. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * Provides miscellaneous information about the current state of the`Http2Session`. + * + * An object describing the current status of this `Http2Session`. + * @since v8.4.0 + */ + readonly state: SessionState; + /** + * The `http2session.type` will be equal to`http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a + * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a + * client. + * @since v8.4.0 + */ + readonly type: number; + /** + * Gracefully closes the `Http2Session`, allowing any existing streams to + * complete on their own and preventing new `Http2Stream` instances from being + * created. Once closed, `http2session.destroy()`_might_ be called if there + * are no open `Http2Stream` instances. + * + * If specified, the `callback` function is registered as a handler for the`'close'` event. + * @since v9.4.0 + */ + close(callback?: () => void): void; + /** + * Immediately terminates the `Http2Session` and the associated `net.Socket` or`tls.TLSSocket`. + * + * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error`is not undefined, an `'error'` event will be emitted immediately before the`'close'` event. + * + * If there are any remaining open `Http2Streams` associated with the`Http2Session`, those will also be destroyed. + * @since v8.4.0 + * @param error An `Error` object if the `Http2Session` is being destroyed due to an error. + * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`. + */ + destroy(error?: Error, code?: number): void; + /** + * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`. + * @since v9.4.0 + * @param code An HTTP/2 error code + * @param lastStreamID The numeric ID of the last processed `Http2Stream` + * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame. + */ + goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; + /** + * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must + * be provided. The method will return `true` if the `PING` was sent, `false`otherwise. + * + * The maximum number of outstanding (unacknowledged) pings is determined by the`maxOutstandingPings` configuration option. The default maximum is 10. + * + * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView`containing 8 bytes of data that will be transmitted with the `PING` and + * returned with the ping acknowledgment. + * + * The callback will be invoked with three arguments: an error argument that will + * be `null` if the `PING` was successfully acknowledged, a `duration` argument + * that reports the number of milliseconds elapsed since the ping was sent and the + * acknowledgment was received, and a `Buffer` containing the 8-byte `PING`payload. + * + * ```js + * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => { + * if (!err) { + * console.log(`Ping acknowledged in ${duration} milliseconds`); + * console.log(`With payload '${payload.toString()}'`); + * } + * }); + * ``` + * + * If the `payload` argument is not specified, the default payload will be the + * 64-bit timestamp (little endian) marking the start of the `PING` duration. + * @since v8.9.3 + * @param payload Optional ping payload. + */ + ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + ping(payload: NodeJS.ArrayBufferView, callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + /** + * Calls `ref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + ref(): void; + /** + * Sets the local endpoint's window size. + * The `windowSize` is the total window size to set, not + * the delta. + * + * ```js + * const http2 = require('http2'); + * + * const server = http2.createServer(); + * const expectedWindowSize = 2 ** 20; + * server.on('connect', (session) => { + * + * // Set local window size to be 2 ** 20 + * session.setLocalWindowSize(expectedWindowSize); + * }); + * ``` + * @since v15.3.0, v14.18.0 + */ + setLocalWindowSize(windowSize: number): void; + /** + * Used to set a callback function that is called when there is no activity on + * the `Http2Session` after `msecs` milliseconds. The given `callback` is + * registered as a listener on the `'timeout'` event. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * Updates the current local settings for this `Http2Session` and sends a new`SETTINGS` frame to the connected HTTP/2 peer. + * + * Once called, the `http2session.pendingSettingsAck` property will be `true`while the session is waiting for the remote peer to acknowledge the new + * settings. + * + * The new settings will not become effective until the `SETTINGS` acknowledgment + * is received and the `'localSettings'` event is emitted. It is possible to send + * multiple `SETTINGS` frames while acknowledgment is still pending. + * @since v8.4.0 + * @param callback Callback that is called once the session is connected or right away if the session is already connected. + */ + settings(settings: Settings): void; + /** + * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`. + * @since v9.4.0 + */ + unref(): void; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this; + addListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + addListener(event: 'localSettings', listener: (settings: Settings) => void): this; + addListener(event: 'ping', listener: () => void): this; + addListener(event: 'remoteSettings', listener: (settings: Settings) => void): this; + addListener(event: 'timeout', listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'close'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'frameError', frameType: number, errorCode: number, streamID: number): boolean; + emit(event: 'goaway', errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; + emit(event: 'localSettings', settings: Settings): boolean; + emit(event: 'ping'): boolean; + emit(event: 'remoteSettings', settings: Settings): boolean; + emit(event: 'timeout'): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'close', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this; + on(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + on(event: 'localSettings', listener: (settings: Settings) => void): this; + on(event: 'ping', listener: () => void): this; + on(event: 'remoteSettings', listener: (settings: Settings) => void): this; + on(event: 'timeout', listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this; + once(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + once(event: 'localSettings', listener: (settings: Settings) => void): this; + once(event: 'ping', listener: () => void): this; + once(event: 'remoteSettings', listener: (settings: Settings) => void): this; + once(event: 'timeout', listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this; + prependListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + prependListener(event: 'localSettings', listener: (settings: Settings) => void): this; + prependListener(event: 'ping', listener: () => void): this; + prependListener(event: 'remoteSettings', listener: (settings: Settings) => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this; + prependOnceListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + prependOnceListener(event: 'localSettings', listener: (settings: Settings) => void): this; + prependOnceListener(event: 'ping', listener: () => void): this; + prependOnceListener(event: 'remoteSettings', listener: (settings: Settings) => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface ClientHttp2Session extends Http2Session { + /** + * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()`creates and returns an `Http2Stream` instance that can be used to send an + * HTTP/2 request to the connected server. + * + * This method is only available if `http2session.type` is equal to`http2.constants.NGHTTP2_SESSION_CLIENT`. + * + * ```js + * const http2 = require('http2'); + * const clientSession = http2.connect('https://localhost:1234'); + * const { + * HTTP2_HEADER_PATH, + * HTTP2_HEADER_STATUS + * } = http2.constants; + * + * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); + * req.on('response', (headers) => { + * console.log(headers[HTTP2_HEADER_STATUS]); + * req.on('data', (chunk) => { // .. }); + * req.on('end', () => { // .. }); + * }); + * ``` + * + * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event + * is emitted immediately after queuing the last chunk of payload data to be sent. + * The `http2stream.sendTrailers()` method can then be called to send trailing + * headers to the peer. + * + * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically + * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. + * + * When `options.signal` is set with an `AbortSignal` and then `abort` on the + * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error. + * + * The `:method` and `:path` pseudo-headers are not specified within `headers`, + * they respectively default to: + * + * * `:method` \= `'GET'` + * * `:path` \= `/` + * @since v8.4.0 + */ + request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; + addListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this; + addListener(event: 'origin', listener: (origins: string[]) => void): this; + addListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + addListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'altsvc', alt: string, origin: string, stream: number): boolean; + emit(event: 'origin', origins: ReadonlyArray): boolean; + emit(event: 'connect', session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: 'stream', stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this; + on(event: 'origin', listener: (origins: string[]) => void): this; + on(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this; + once(event: 'origin', listener: (origins: string[]) => void): this; + once(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + once(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this; + prependListener(event: 'origin', listener: (origins: string[]) => void): this; + prependListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + prependListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this; + prependOnceListener(event: 'origin', listener: (origins: string[]) => void): this; + prependOnceListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + prependOnceListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface AlternativeServiceOptions { + origin: number | string | url.URL; + } + export interface ServerHttp2Session extends Http2Session { + readonly server: Http2Server | Http2SecureServer; + /** + * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client. + * + * ```js + * const http2 = require('http2'); + * + * const server = http2.createServer(); + * server.on('session', (session) => { + * // Set altsvc for origin https://example.org:80 + * session.altsvc('h2=":8000"', 'https://example.org:80'); + * }); + * + * server.on('stream', (stream) => { + * // Set altsvc for a specific stream + * stream.session.altsvc('h2=":8000"', stream.id); + * }); + * ``` + * + * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate + * service is associated with the origin of the given `Http2Stream`. + * + * The `alt` and origin string _must_ contain only ASCII bytes and are + * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given + * domain. + * + * When a string is passed for the `originOrStream` argument, it will be parsed as + * a URL and the origin will be derived. For instance, the origin for the + * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * @since v9.4.0 + * @param alt A description of the alternative service configuration as defined by `RFC 7838`. + * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the + * `http2stream.id` property. + */ + altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; + /** + * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client + * to advertise the set of origins for which the server is capable of providing + * authoritative responses. + * + * ```js + * const http2 = require('http2'); + * const options = getSecureOptionsSomehow(); + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * server.on('session', (session) => { + * session.origin('https://example.com', 'https://example.org'); + * }); + * ``` + * + * When a string is passed as an `origin`, it will be parsed as a URL and the + * origin will be derived. For instance, the origin for the HTTP URL`'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given + * string + * cannot be parsed as a URL or if a valid origin cannot be derived. + * + * A `URL` object, or any object with an `origin` property, may be passed as + * an `origin`, in which case the value of the `origin` property will be + * used. The value of the `origin` property _must_ be a properly serialized + * ASCII origin. + * + * Alternatively, the `origins` option may be used when creating a new HTTP/2 + * server using the `http2.createSecureServer()` method: + * + * ```js + * const http2 = require('http2'); + * const options = getSecureOptionsSomehow(); + * options.origins = ['https://example.com', 'https://example.org']; + * const server = http2.createSecureServer(options); + * server.on('stream', (stream) => { + * stream.respond(); + * stream.end('ok'); + * }); + * ``` + * @since v10.12.0 + * @param origins One or more URL Strings passed as separate arguments. + */ + origin( + ...origins: Array< + | string + | url.URL + | { + origin: string; + } + > + ): void; + addListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'connect', session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + // Http2Server + export interface SessionOptions { + maxDeflateDynamicTableSize?: number | undefined; + maxSessionMemory?: number | undefined; + maxHeaderListPairs?: number | undefined; + maxOutstandingPings?: number | undefined; + maxSendHeaderBlockLength?: number | undefined; + paddingStrategy?: number | undefined; + peerMaxConcurrentStreams?: number | undefined; + settings?: Settings | undefined; + /** + * Specifies a timeout in milliseconds that + * a server should wait when an [`'unknownProtocol'`][] is emitted. If the + * socket has not been destroyed by that time the server will destroy it. + * @default 100000 + */ + unknownProtocolTimeout?: number | undefined; + selectPadding?(frameLen: number, maxFrameLen: number): number; + createConnection?(authority: url.URL, option: SessionOptions): stream.Duplex; + } + export interface ClientSessionOptions extends SessionOptions { + maxReservedRemoteStreams?: number | undefined; + createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; + protocol?: 'http:' | 'https:' | undefined; + } + export interface ServerSessionOptions extends SessionOptions { + Http1IncomingMessage?: typeof IncomingMessage | undefined; + Http1ServerResponse?: typeof ServerResponse | undefined; + Http2ServerRequest?: typeof Http2ServerRequest | undefined; + Http2ServerResponse?: typeof Http2ServerResponse | undefined; + } + export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} + export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {} + export interface ServerOptions extends ServerSessionOptions {} + export interface SecureServerOptions extends SecureServerSessionOptions { + allowHTTP1?: boolean | undefined; + origins?: string[] | undefined; + } + interface HTTP2ServerCommon { + setTimeout(msec?: number, callback?: () => void): this; + /** + * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values. + * Throws ERR_INVALID_ARG_TYPE for invalid settings argument. + */ + updateSettings(settings: Settings): void; + } + export interface Http2Server extends net.Server, HTTP2ServerCommon { + addListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + addListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + addListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + addListener(event: 'sessionError', listener: (err: Error) => void): this; + addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: 'timeout', listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'checkContinue', request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: 'request', request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: 'session', session: ServerHttp2Session): boolean; + emit(event: 'sessionError', err: Error): boolean; + emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: 'timeout'): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: 'session', listener: (session: ServerHttp2Session) => void): this; + on(event: 'sessionError', listener: (err: Error) => void): this; + on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + on(event: 'timeout', listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: 'session', listener: (session: ServerHttp2Session) => void): this; + once(event: 'sessionError', listener: (err: Error) => void): this; + once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + once(event: 'timeout', listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + prependListener(event: 'sessionError', listener: (err: Error) => void): this; + prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependOnceListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependOnceListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: 'sessionError', listener: (err: Error) => void): this; + prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export interface Http2SecureServer extends tls.Server, HTTP2ServerCommon { + addListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + addListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + addListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + addListener(event: 'sessionError', listener: (err: Error) => void): this; + addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: 'timeout', listener: () => void): this; + addListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'checkContinue', request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: 'request', request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: 'session', session: ServerHttp2Session): boolean; + emit(event: 'sessionError', err: Error): boolean; + emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: 'timeout'): boolean; + emit(event: 'unknownProtocol', socket: tls.TLSSocket): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: 'session', listener: (session: ServerHttp2Session) => void): this; + on(event: 'sessionError', listener: (err: Error) => void): this; + on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + on(event: 'timeout', listener: () => void): this; + on(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: 'session', listener: (session: ServerHttp2Session) => void): this; + once(event: 'sessionError', listener: (err: Error) => void): this; + once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + once(event: 'timeout', listener: () => void): this; + once(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + prependListener(event: 'sessionError', listener: (err: Error) => void): this; + prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependOnceListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + prependOnceListener(event: 'session', listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: 'sessionError', listener: (err: Error) => void): this; + prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status, + * headers, and + * data. + * @since v8.4.0 + */ + export class Http2ServerRequest extends stream.Readable { + constructor(stream: ServerHttp2Stream, headers: IncomingHttpHeaders, options: stream.ReadableOptions, rawHeaders: ReadonlyArray); + /** + * The `request.aborted` property will be `true` if the request has + * been aborted. + * @since v10.1.0 + */ + readonly aborted: boolean; + /** + * The request authority pseudo header field. Because HTTP/2 allows requests + * to set either `:authority` or `host`, this value is derived from`req.headers[':authority']` if present. Otherwise, it is derived from`req.headers['host']`. + * @since v8.4.0 + */ + readonly authority: string; + /** + * See `request.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * The `request.complete` property will be `true` if the request has + * been completed, aborted, or destroyed. + * @since v12.10.0 + */ + readonly complete: boolean; + /** + * The request/response headers object. + * + * Key-value pairs of header names and values. Header names are lower-cased. + * + * ```js + * // Prints something like: + * // + * // { 'user-agent': 'curl/7.22.0', + * // host: '127.0.0.1:8000', + * // accept: '*' } + * console.log(request.headers); + * ``` + * + * See `HTTP/2 Headers Object`. + * + * In HTTP/2, the request path, host name, protocol, and method are represented as + * special headers prefixed with the `:` character (e.g. `':path'`). These special + * headers will be included in the `request.headers` object. Care must be taken not + * to inadvertently modify these special headers or errors may occur. For instance, + * removing all headers from the request will cause errors to occur: + * + * ```js + * removeAllHeaders(request.headers); + * assert(request.url); // Fails because the :path header has been removed + * ``` + * @since v8.4.0 + */ + readonly headers: IncomingHttpHeaders; + /** + * In case of server request, the HTTP version sent by the client. In the case of + * client response, the HTTP version of the connected-to server. Returns`'2.0'`. + * + * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second. + * @since v8.4.0 + */ + readonly httpVersion: string; + readonly httpVersionMinor: number; + readonly httpVersionMajor: number; + /** + * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`. + * @since v8.4.0 + */ + readonly method: string; + /** + * The raw request/response headers list exactly as they were received. + * + * The keys and values are in the same list. It is _not_ a + * list of tuples. So, the even-numbered offsets are key values, and the + * odd-numbered offsets are the associated values. + * + * Header names are not lowercased, and duplicates are not merged. + * + * ```js + * // Prints something like: + * // + * // [ 'user-agent', + * // 'this is invalid because there can be only one', + * // 'User-Agent', + * // 'curl/7.22.0', + * // 'Host', + * // '127.0.0.1:8000', + * // 'ACCEPT', + * // '*' ] + * console.log(request.rawHeaders); + * ``` + * @since v8.4.0 + */ + readonly rawHeaders: string[]; + /** + * The raw request/response trailer keys and values exactly as they were + * received. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly rawTrailers: string[]; + /** + * The request scheme pseudo header field indicating the scheme + * portion of the target URL. + * @since v8.4.0 + */ + readonly scheme: string; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `request.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`request.stream`. + * + * `setTimeout` method will be called on `request.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. With TLS support, + * use `request.socket.getPeerCertificate()` to obtain the client's + * authentication details. + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the request. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * The request/response trailers object. Only populated at the `'end'` event. + * @since v8.4.0 + */ + readonly trailers: IncomingHttpHeaders; + /** + * Request URL string. This contains only the URL that is present in the actual + * HTTP request. If the request is: + * + * ```http + * GET /status?name=ryan HTTP/1.1 + * Accept: text/plain + * ``` + * + * Then `request.url` will be: + * + * ```js + * '/status?name=ryan' + * ``` + * + * To parse the url into its parts, `new URL()` can be used: + * + * ```console + * $ node + * > new URL('/status?name=ryan', 'http://example.com') + * URL { + * href: 'http://example.com/status?name=ryan', + * origin: 'http://example.com', + * protocol: 'http:', + * username: '', + * password: '', + * host: 'example.com', + * hostname: 'example.com', + * port: '', + * pathname: '/status', + * search: '?name=ryan', + * searchParams: URLSearchParams { 'name' => 'ryan' }, + * hash: '' + * } + * ``` + * @since v8.4.0 + */ + url: string; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + read(size?: number): Buffer | string | null; + addListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'readable', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'aborted', hadError: boolean, code: number): boolean; + emit(event: 'close'): boolean; + emit(event: 'data', chunk: Buffer | string): boolean; + emit(event: 'end'): boolean; + emit(event: 'readable'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'aborted', listener: (hadError: boolean, code: number) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'data', listener: (chunk: Buffer | string) => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'readable', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'aborted', listener: (hadError: boolean, code: number) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'data', listener: (chunk: Buffer | string) => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'readable', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'readable', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'readable', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + /** + * This object is created internally by an HTTP server, not by the user. It is + * passed as the second parameter to the `'request'` event. + * @since v8.4.0 + */ + export class Http2ServerResponse extends stream.Writable { + constructor(stream: ServerHttp2Stream); + /** + * See `response.socket`. + * @since v8.4.0 + * @deprecated Since v13.0.0 - Use `socket`. + */ + readonly connection: net.Socket | tls.TLSSocket; + /** + * Boolean value that indicates whether the response has completed. Starts + * as `false`. After `response.end()` executes, the value will be `true`. + * @since v8.4.0 + * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`. + */ + readonly finished: boolean; + /** + * True if headers were sent, false otherwise (read-only). + * @since v8.4.0 + */ + readonly headersSent: boolean; + /** + * A reference to the original HTTP2 request object. + * @since v15.7.0 + */ + readonly req: Http2ServerRequest; + /** + * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but + * applies getters, setters, and methods based on HTTP/2 logic. + * + * `destroyed`, `readable`, and `writable` properties will be retrieved from and + * set on `response.stream`. + * + * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`response.stream`. + * + * `setTimeout` method will be called on `response.stream.session`. + * + * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for + * more information. + * + * All other interactions will be routed directly to the socket. + * + * ```js + * const http2 = require('http2'); + * const server = http2.createServer((req, res) => { + * const ip = req.socket.remoteAddress; + * const port = req.socket.remotePort; + * res.end(`Your IP address is ${ip} and your source port is ${port}.`); + * }).listen(3000); + * ``` + * @since v8.4.0 + */ + readonly socket: net.Socket | tls.TLSSocket; + /** + * The `Http2Stream` object backing the response. + * @since v8.4.0 + */ + readonly stream: ServerHttp2Stream; + /** + * When true, the Date header will be automatically generated and sent in + * the response if it is not already present in the headers. Defaults to true. + * + * This should only be disabled for testing; HTTP requires the Date header + * in responses. + * @since v8.4.0 + */ + sendDate: boolean; + /** + * When using implicit headers (not calling `response.writeHead()` explicitly), + * this property controls the status code that will be sent to the client when + * the headers get flushed. + * + * ```js + * response.statusCode = 404; + * ``` + * + * After response header was sent to the client, this property indicates the + * status code which was sent out. + * @since v8.4.0 + */ + statusCode: number; + /** + * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns + * an empty string. + * @since v8.4.0 + */ + statusMessage: ''; + /** + * This method adds HTTP trailing headers (a header but at the end of the + * message) to the response. + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + addTrailers(trailers: OutgoingHttpHeaders): void; + /** + * This method signals to the server that all of the response headers and body + * have been sent; that server should consider this message complete. + * The method, `response.end()`, MUST be called on each response. + * + * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`. + * + * If `callback` is specified, it will be called when the response stream + * is finished. + * @since v8.4.0 + */ + end(callback?: () => void): this; + end(data: string | Uint8Array, callback?: () => void): this; + end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; + /** + * Reads out a header that has already been queued but not sent to the client. + * The name is case-insensitive. + * + * ```js + * const contentType = response.getHeader('content-type'); + * ``` + * @since v8.4.0 + */ + getHeader(name: string): string; + /** + * Returns an array containing the unique names of the current outgoing headers. + * All header names are lowercase. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headerNames = response.getHeaderNames(); + * // headerNames === ['foo', 'set-cookie'] + * ``` + * @since v8.4.0 + */ + getHeaderNames(): string[]; + /** + * Returns a shallow copy of the current outgoing headers. Since a shallow copy + * is used, array values may be mutated without additional calls to various + * header-related http module methods. The keys of the returned object are the + * header names and the values are the respective header values. All header names + * are lowercase. + * + * The object returned by the `response.getHeaders()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * ```js + * response.setHeader('Foo', 'bar'); + * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); + * + * const headers = response.getHeaders(); + * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } + * ``` + * @since v8.4.0 + */ + getHeaders(): OutgoingHttpHeaders; + /** + * Returns `true` if the header identified by `name` is currently set in the + * outgoing headers. The header name matching is case-insensitive. + * + * ```js + * const hasContentType = response.hasHeader('content-type'); + * ``` + * @since v8.4.0 + */ + hasHeader(name: string): boolean; + /** + * Removes a header that has been queued for implicit sending. + * + * ```js + * response.removeHeader('Content-Encoding'); + * ``` + * @since v8.4.0 + */ + removeHeader(name: string): void; + /** + * Sets a single header value for implicit headers. If this header already exists + * in the to-be-sent headers, its value will be replaced. Use an array of strings + * here to send multiple headers with the same name. + * + * ```js + * response.setHeader('Content-Type', 'text/html; charset=utf-8'); + * ``` + * + * or + * + * ```js + * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * @since v8.4.0 + */ + setHeader(name: string, value: number | string | ReadonlyArray): void; + /** + * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is + * provided, then it is added as a listener on the `'timeout'` event on + * the response object. + * + * If no `'timeout'` listener is added to the request, the response, or + * the server, then `Http2Stream` s are destroyed when they time out. If a + * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. + * @since v8.4.0 + */ + setTimeout(msecs: number, callback?: () => void): void; + /** + * If this method is called and `response.writeHead()` has not been called, + * it will switch to implicit header mode and flush the implicit headers. + * + * This sends a chunk of the response body. This method may + * be called multiple times to provide successive parts of the body. + * + * In the `http` module, the response body is omitted when the + * request is a HEAD request. Similarly, the `204` and `304` responses_must not_ include a message body. + * + * `chunk` can be a string or a buffer. If `chunk` is a string, + * the second parameter specifies how to encode it into a byte stream. + * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk + * of data is flushed. + * + * This is the raw HTTP body and has nothing to do with higher-level multi-part + * body encodings that may be used. + * + * The first time `response.write()` is called, it will send the buffered + * header information and the first chunk of the body to the client. The second + * time `response.write()` is called, Node.js assumes data will be streamed, + * and sends the new data separately. That is, the response is buffered up to the + * first chunk of the body. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again. + * @since v8.4.0 + */ + write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; + write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; + /** + * Sends a status `100 Continue` to the client, indicating that the request body + * should be sent. See the `'checkContinue'` event on `Http2Server` and`Http2SecureServer`. + * @since v8.4.0 + */ + writeContinue(): void; + /** + * Sends a response header to the request. The status code is a 3-digit HTTP + * status code, like `404`. The last argument, `headers`, are the response headers. + * + * Returns a reference to the `Http2ServerResponse`, so that calls can be chained. + * + * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be + * passed as the second argument. However, because the `statusMessage` has no + * meaning within HTTP/2, the argument will have no effect and a process warning + * will be emitted. + * + * ```js + * const body = 'hello world'; + * response.writeHead(200, { + * 'Content-Length': Buffer.byteLength(body), + * 'Content-Type': 'text/plain; charset=utf-8', + * }); + * ``` + * + * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a + * given encoding. On outbound messages, Node.js does not check if Content-Length + * and the length of the body being transmitted are equal or not. However, when + * receiving messages, Node.js will automatically reject messages when the`Content-Length` does not match the actual payload size. + * + * This method may be called at most one time on a message before `response.end()` is called. + * + * If `response.write()` or `response.end()` are called before calling + * this, the implicit/mutable headers will be calculated and call this function. + * + * When headers have been set with `response.setHeader()`, they will be merged + * with any headers passed to `response.writeHead()`, with the headers passed + * to `response.writeHead()` given precedence. + * + * ```js + * // Returns content-type = text/plain + * const server = http2.createServer((req, res) => { + * res.setHeader('Content-Type', 'text/html; charset=utf-8'); + * res.setHeader('X-Foo', 'bar'); + * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); + * res.end('ok'); + * }); + * ``` + * + * Attempting to set a header field name or value that contains invalid characters + * will result in a `TypeError` being thrown. + * @since v8.4.0 + */ + writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this; + writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this; + /** + * Call `http2stream.pushStream()` with the given headers, and wrap the + * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback + * parameter if successful. When `Http2ServerRequest` is closed, the callback is + * called with an error `ERR_HTTP2_INVALID_STREAM`. + * @since v8.4.0 + * @param headers An object describing the headers + * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of + * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method + */ + createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'error', listener: (error: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'close'): boolean; + emit(event: 'drain'): boolean; + emit(event: 'error', error: Error): boolean; + emit(event: 'finish'): boolean; + emit(event: 'pipe', src: stream.Readable): boolean; + emit(event: 'unpipe', src: stream.Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'close', listener: () => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'error', listener: (error: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'pipe', listener: (src: stream.Readable) => void): this; + on(event: 'unpipe', listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'error', listener: (error: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'pipe', listener: (src: stream.Readable) => void): this; + once(event: 'unpipe', listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'error', listener: (error: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'error', listener: (error: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + export namespace constants { + const NGHTTP2_SESSION_SERVER: number; + const NGHTTP2_SESSION_CLIENT: number; + const NGHTTP2_STREAM_STATE_IDLE: number; + const NGHTTP2_STREAM_STATE_OPEN: number; + const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; + const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; + const NGHTTP2_STREAM_STATE_CLOSED: number; + const NGHTTP2_NO_ERROR: number; + const NGHTTP2_PROTOCOL_ERROR: number; + const NGHTTP2_INTERNAL_ERROR: number; + const NGHTTP2_FLOW_CONTROL_ERROR: number; + const NGHTTP2_SETTINGS_TIMEOUT: number; + const NGHTTP2_STREAM_CLOSED: number; + const NGHTTP2_FRAME_SIZE_ERROR: number; + const NGHTTP2_REFUSED_STREAM: number; + const NGHTTP2_CANCEL: number; + const NGHTTP2_COMPRESSION_ERROR: number; + const NGHTTP2_CONNECT_ERROR: number; + const NGHTTP2_ENHANCE_YOUR_CALM: number; + const NGHTTP2_INADEQUATE_SECURITY: number; + const NGHTTP2_HTTP_1_1_REQUIRED: number; + const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; + const NGHTTP2_FLAG_NONE: number; + const NGHTTP2_FLAG_END_STREAM: number; + const NGHTTP2_FLAG_END_HEADERS: number; + const NGHTTP2_FLAG_ACK: number; + const NGHTTP2_FLAG_PADDED: number; + const NGHTTP2_FLAG_PRIORITY: number; + const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; + const DEFAULT_SETTINGS_ENABLE_PUSH: number; + const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; + const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; + const MAX_MAX_FRAME_SIZE: number; + const MIN_MAX_FRAME_SIZE: number; + const MAX_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_DEFAULT_WEIGHT: number; + const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; + const NGHTTP2_SETTINGS_ENABLE_PUSH: number; + const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; + const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; + const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; + const PADDING_STRATEGY_NONE: number; + const PADDING_STRATEGY_MAX: number; + const PADDING_STRATEGY_CALLBACK: number; + const HTTP2_HEADER_STATUS: string; + const HTTP2_HEADER_METHOD: string; + const HTTP2_HEADER_AUTHORITY: string; + const HTTP2_HEADER_SCHEME: string; + const HTTP2_HEADER_PATH: string; + const HTTP2_HEADER_ACCEPT_CHARSET: string; + const HTTP2_HEADER_ACCEPT_ENCODING: string; + const HTTP2_HEADER_ACCEPT_LANGUAGE: string; + const HTTP2_HEADER_ACCEPT_RANGES: string; + const HTTP2_HEADER_ACCEPT: string; + const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; + const HTTP2_HEADER_AGE: string; + const HTTP2_HEADER_ALLOW: string; + const HTTP2_HEADER_AUTHORIZATION: string; + const HTTP2_HEADER_CACHE_CONTROL: string; + const HTTP2_HEADER_CONNECTION: string; + const HTTP2_HEADER_CONTENT_DISPOSITION: string; + const HTTP2_HEADER_CONTENT_ENCODING: string; + const HTTP2_HEADER_CONTENT_LANGUAGE: string; + const HTTP2_HEADER_CONTENT_LENGTH: string; + const HTTP2_HEADER_CONTENT_LOCATION: string; + const HTTP2_HEADER_CONTENT_MD5: string; + const HTTP2_HEADER_CONTENT_RANGE: string; + const HTTP2_HEADER_CONTENT_TYPE: string; + const HTTP2_HEADER_COOKIE: string; + const HTTP2_HEADER_DATE: string; + const HTTP2_HEADER_ETAG: string; + const HTTP2_HEADER_EXPECT: string; + const HTTP2_HEADER_EXPIRES: string; + const HTTP2_HEADER_FROM: string; + const HTTP2_HEADER_HOST: string; + const HTTP2_HEADER_IF_MATCH: string; + const HTTP2_HEADER_IF_MODIFIED_SINCE: string; + const HTTP2_HEADER_IF_NONE_MATCH: string; + const HTTP2_HEADER_IF_RANGE: string; + const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; + const HTTP2_HEADER_LAST_MODIFIED: string; + const HTTP2_HEADER_LINK: string; + const HTTP2_HEADER_LOCATION: string; + const HTTP2_HEADER_MAX_FORWARDS: string; + const HTTP2_HEADER_PREFER: string; + const HTTP2_HEADER_PROXY_AUTHENTICATE: string; + const HTTP2_HEADER_PROXY_AUTHORIZATION: string; + const HTTP2_HEADER_RANGE: string; + const HTTP2_HEADER_REFERER: string; + const HTTP2_HEADER_REFRESH: string; + const HTTP2_HEADER_RETRY_AFTER: string; + const HTTP2_HEADER_SERVER: string; + const HTTP2_HEADER_SET_COOKIE: string; + const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; + const HTTP2_HEADER_TRANSFER_ENCODING: string; + const HTTP2_HEADER_TE: string; + const HTTP2_HEADER_UPGRADE: string; + const HTTP2_HEADER_USER_AGENT: string; + const HTTP2_HEADER_VARY: string; + const HTTP2_HEADER_VIA: string; + const HTTP2_HEADER_WWW_AUTHENTICATE: string; + const HTTP2_HEADER_HTTP2_SETTINGS: string; + const HTTP2_HEADER_KEEP_ALIVE: string; + const HTTP2_HEADER_PROXY_CONNECTION: string; + const HTTP2_METHOD_ACL: string; + const HTTP2_METHOD_BASELINE_CONTROL: string; + const HTTP2_METHOD_BIND: string; + const HTTP2_METHOD_CHECKIN: string; + const HTTP2_METHOD_CHECKOUT: string; + const HTTP2_METHOD_CONNECT: string; + const HTTP2_METHOD_COPY: string; + const HTTP2_METHOD_DELETE: string; + const HTTP2_METHOD_GET: string; + const HTTP2_METHOD_HEAD: string; + const HTTP2_METHOD_LABEL: string; + const HTTP2_METHOD_LINK: string; + const HTTP2_METHOD_LOCK: string; + const HTTP2_METHOD_MERGE: string; + const HTTP2_METHOD_MKACTIVITY: string; + const HTTP2_METHOD_MKCALENDAR: string; + const HTTP2_METHOD_MKCOL: string; + const HTTP2_METHOD_MKREDIRECTREF: string; + const HTTP2_METHOD_MKWORKSPACE: string; + const HTTP2_METHOD_MOVE: string; + const HTTP2_METHOD_OPTIONS: string; + const HTTP2_METHOD_ORDERPATCH: string; + const HTTP2_METHOD_PATCH: string; + const HTTP2_METHOD_POST: string; + const HTTP2_METHOD_PRI: string; + const HTTP2_METHOD_PROPFIND: string; + const HTTP2_METHOD_PROPPATCH: string; + const HTTP2_METHOD_PUT: string; + const HTTP2_METHOD_REBIND: string; + const HTTP2_METHOD_REPORT: string; + const HTTP2_METHOD_SEARCH: string; + const HTTP2_METHOD_TRACE: string; + const HTTP2_METHOD_UNBIND: string; + const HTTP2_METHOD_UNCHECKOUT: string; + const HTTP2_METHOD_UNLINK: string; + const HTTP2_METHOD_UNLOCK: string; + const HTTP2_METHOD_UPDATE: string; + const HTTP2_METHOD_UPDATEREDIRECTREF: string; + const HTTP2_METHOD_VERSION_CONTROL: string; + const HTTP_STATUS_CONTINUE: number; + const HTTP_STATUS_SWITCHING_PROTOCOLS: number; + const HTTP_STATUS_PROCESSING: number; + const HTTP_STATUS_OK: number; + const HTTP_STATUS_CREATED: number; + const HTTP_STATUS_ACCEPTED: number; + const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; + const HTTP_STATUS_NO_CONTENT: number; + const HTTP_STATUS_RESET_CONTENT: number; + const HTTP_STATUS_PARTIAL_CONTENT: number; + const HTTP_STATUS_MULTI_STATUS: number; + const HTTP_STATUS_ALREADY_REPORTED: number; + const HTTP_STATUS_IM_USED: number; + const HTTP_STATUS_MULTIPLE_CHOICES: number; + const HTTP_STATUS_MOVED_PERMANENTLY: number; + const HTTP_STATUS_FOUND: number; + const HTTP_STATUS_SEE_OTHER: number; + const HTTP_STATUS_NOT_MODIFIED: number; + const HTTP_STATUS_USE_PROXY: number; + const HTTP_STATUS_TEMPORARY_REDIRECT: number; + const HTTP_STATUS_PERMANENT_REDIRECT: number; + const HTTP_STATUS_BAD_REQUEST: number; + const HTTP_STATUS_UNAUTHORIZED: number; + const HTTP_STATUS_PAYMENT_REQUIRED: number; + const HTTP_STATUS_FORBIDDEN: number; + const HTTP_STATUS_NOT_FOUND: number; + const HTTP_STATUS_METHOD_NOT_ALLOWED: number; + const HTTP_STATUS_NOT_ACCEPTABLE: number; + const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; + const HTTP_STATUS_REQUEST_TIMEOUT: number; + const HTTP_STATUS_CONFLICT: number; + const HTTP_STATUS_GONE: number; + const HTTP_STATUS_LENGTH_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_FAILED: number; + const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; + const HTTP_STATUS_URI_TOO_LONG: number; + const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; + const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; + const HTTP_STATUS_EXPECTATION_FAILED: number; + const HTTP_STATUS_TEAPOT: number; + const HTTP_STATUS_MISDIRECTED_REQUEST: number; + const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; + const HTTP_STATUS_LOCKED: number; + const HTTP_STATUS_FAILED_DEPENDENCY: number; + const HTTP_STATUS_UNORDERED_COLLECTION: number; + const HTTP_STATUS_UPGRADE_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_REQUIRED: number; + const HTTP_STATUS_TOO_MANY_REQUESTS: number; + const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; + const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; + const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; + const HTTP_STATUS_NOT_IMPLEMENTED: number; + const HTTP_STATUS_BAD_GATEWAY: number; + const HTTP_STATUS_SERVICE_UNAVAILABLE: number; + const HTTP_STATUS_GATEWAY_TIMEOUT: number; + const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; + const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; + const HTTP_STATUS_INSUFFICIENT_STORAGE: number; + const HTTP_STATUS_LOOP_DETECTED: number; + const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; + const HTTP_STATUS_NOT_EXTENDED: number; + const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; + } + /** + * This symbol can be set as a property on the HTTP/2 headers object with + * an array value in order to provide a list of headers considered sensitive. + */ + export const sensitiveHeaders: symbol; + /** + * Returns an object containing the default settings for an `Http2Session`instance. This method returns a new object instance every time it is called + * so instances returned may be safely modified for use. + * @since v8.4.0 + */ + export function getDefaultSettings(): Settings; + /** + * Returns a `Buffer` instance containing serialized representation of the given + * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended + * for use with the `HTTP2-Settings` header field. + * + * ```js + * const http2 = require('http2'); + * + * const packed = http2.getPackedSettings({ enablePush: false }); + * + * console.log(packed.toString('base64')); + * // Prints: AAIAAAAA + * ``` + * @since v8.4.0 + */ + export function getPackedSettings(settings: Settings): Buffer; + /** + * Returns a `HTTP/2 Settings Object` containing the deserialized settings from + * the given `Buffer` as generated by `http2.getPackedSettings()`. + * @since v8.4.0 + * @param buf The packed settings. + */ + export function getUnpackedSettings(buf: Uint8Array): Settings; + /** + * Returns a `net.Server` instance that creates and manages `Http2Session`instances. + * + * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when + * communicating + * with browser clients. + * + * ```js + * const http2 = require('http2'); + * + * // Create an unencrypted HTTP/2 server. + * // Since there are no browsers known that support + * // unencrypted HTTP/2, the use of `http2.createSecureServer()` + * // is necessary when communicating with browser clients. + * const server = http2.createServer(); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200 + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(80); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server; + export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server; + /** + * Returns a `tls.Server` instance that creates and manages `Http2Session`instances. + * + * ```js + * const http2 = require('http2'); + * const fs = require('fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem') + * }; + * + * // Create a secure HTTP/2 server + * const server = http2.createSecureServer(options); + * + * server.on('stream', (stream, headers) => { + * stream.respond({ + * 'content-type': 'text/html; charset=utf-8', + * ':status': 200 + * }); + * stream.end('

Hello World

'); + * }); + * + * server.listen(80); + * ``` + * @since v8.4.0 + * @param onRequestHandler See `Compatibility API` + */ + export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer; + export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer; + /** + * Returns a `ClientHttp2Session` instance. + * + * ```js + * const http2 = require('http2'); + * const client = http2.connect('https://localhost:1234'); + * + * // Use the client + * + * client.close(); + * ``` + * @since v8.4.0 + * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port + * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored. + * @param listener Will be registered as a one-time listener of the {@link 'connect'} event. + */ + export function connect(authority: string | url.URL, listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void + ): ClientHttp2Session; +} +declare module 'node:http2' { + export * from 'http2'; +} diff --git a/build/node_modules/@types/node/https.d.ts b/build/node_modules/@types/node/https.d.ts new file mode 100755 index 00000000..9abd7b19 --- /dev/null +++ b/build/node_modules/@types/node/https.d.ts @@ -0,0 +1,391 @@ +/** + * HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a + * separate module. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/https.js) + */ +declare module 'https' { + import { Duplex } from 'node:stream'; + import * as tls from 'node:tls'; + import * as http from 'node:http'; + import { URL } from 'node:url'; + type ServerOptions = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; + type RequestOptions = http.RequestOptions & + tls.SecureContextOptions & { + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + }; + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + rejectUnauthorized?: boolean | undefined; + maxCachedSessions?: number | undefined; + } + /** + * An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. + * @since v0.4.5 + */ + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + } + interface Server extends http.Server {} + /** + * See `http.Server` for more information. + * @since v0.3.4 + */ + class Server extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor(options: ServerOptions, requestListener?: http.RequestListener); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + addListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + addListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + addListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'connection', listener: (socket: Duplex) => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'listening', listener: () => void): this; + addListener(event: 'checkContinue', listener: http.RequestListener): this; + addListener(event: 'checkExpectation', listener: http.RequestListener): this; + addListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; + addListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + addListener(event: 'request', listener: http.RequestListener): this; + addListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + emit(event: string, ...args: any[]): boolean; + emit(event: 'keylog', line: Buffer, tlsSocket: tls.TLSSocket): boolean; + emit(event: 'newSession', sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void): boolean; + emit(event: 'OCSPRequest', certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void): boolean; + emit(event: 'resumeSession', sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: 'secureConnection', tlsSocket: tls.TLSSocket): boolean; + emit(event: 'tlsClientError', err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: 'close'): boolean; + emit(event: 'connection', socket: Duplex): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'listening'): boolean; + emit(event: 'checkContinue', req: http.IncomingMessage, res: http.ServerResponse): boolean; + emit(event: 'checkExpectation', req: http.IncomingMessage, res: http.ServerResponse): boolean; + emit(event: 'clientError', err: Error, socket: Duplex): boolean; + emit(event: 'connect', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean; + emit(event: 'request', req: http.IncomingMessage, res: http.ServerResponse): boolean; + emit(event: 'upgrade', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + on(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + on(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + on(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + on(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'connection', listener: (socket: Duplex) => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'listening', listener: () => void): this; + on(event: 'checkContinue', listener: http.RequestListener): this; + on(event: 'checkExpectation', listener: http.RequestListener): this; + on(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; + on(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + on(event: 'request', listener: http.RequestListener): this; + on(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + once(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + once(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + once(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + once(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'connection', listener: (socket: Duplex) => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'listening', listener: () => void): this; + once(event: 'checkContinue', listener: http.RequestListener): this; + once(event: 'checkExpectation', listener: http.RequestListener): this; + once(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; + once(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + once(event: 'request', listener: http.RequestListener): this; + once(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + prependListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + prependListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + prependListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'connection', listener: (socket: Duplex) => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'listening', listener: () => void): this; + prependListener(event: 'checkContinue', listener: http.RequestListener): this; + prependListener(event: 'checkExpectation', listener: http.RequestListener): this; + prependListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; + prependListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + prependListener(event: 'request', listener: http.RequestListener): this; + prependListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + prependOnceListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + prependOnceListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + prependOnceListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'connection', listener: (socket: Duplex) => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'listening', listener: () => void): this; + prependOnceListener(event: 'checkContinue', listener: http.RequestListener): this; + prependOnceListener(event: 'checkExpectation', listener: http.RequestListener): this; + prependOnceListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + prependOnceListener(event: 'request', listener: http.RequestListener): this; + prependOnceListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this; + } + /** + * ```js + * // curl -k https://localhost:8000/ + * const https = require('https'); + * const fs = require('fs'); + * + * const options = { + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * + * Or + * + * ```js + * const https = require('https'); + * const fs = require('fs'); + * + * const options = { + * pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), + * passphrase: 'sample' + * }; + * + * https.createServer(options, (req, res) => { + * res.writeHead(200); + * res.end('hello world\n'); + * }).listen(8000); + * ``` + * @since v0.3.4 + * @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. + * @param requestListener A listener to be added to the `'request'` event. + */ + function createServer(requestListener?: http.RequestListener): Server; + function createServer(options: ServerOptions, requestListener?: http.RequestListener): Server; + /** + * Makes a request to a secure web server. + * + * The following additional `options` from `tls.connect()` are also accepted:`ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`,`honorCipherOrder`, `key`, `passphrase`, + * `pfx`, `rejectUnauthorized`,`secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`,`highWaterMark`. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to + * upload a file with a POST request, then write to the `ClientRequest` object. + * + * ```js + * const https = require('https'); + * + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET' + * }; + * + * const req = https.request(options, (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * }); + * + * req.on('error', (e) => { + * console.error(e); + * }); + * req.end(); + * ``` + * + * Example using options from `tls.connect()`: + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') + * }; + * options.agent = new https.Agent(options); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Alternatively, opt out of connection pooling by not using an `Agent`. + * + * ```js + * const options = { + * hostname: 'encrypted.google.com', + * port: 443, + * path: '/', + * method: 'GET', + * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), + * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), + * agent: false + * }; + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example using a `URL` as `options`: + * + * ```js + * const options = new URL('https://abc:xyz@example.com'); + * + * const req = https.request(options, (res) => { + * // ... + * }); + * ``` + * + * Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): + * + * ```js + * const tls = require('tls'); + * const https = require('https'); + * const crypto = require('crypto'); + * + * function sha256(s) { + * return crypto.createHash('sha256').update(s).digest('base64'); + * } + * const options = { + * hostname: 'github.com', + * port: 443, + * path: '/', + * method: 'GET', + * checkServerIdentity: function(host, cert) { + * // Make sure the certificate is issued to the host we are connected to + * const err = tls.checkServerIdentity(host, cert); + * if (err) { + * return err; + * } + * + * // Pin the public key, similar to HPKP pin-sha25 pinning + * const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; + * if (sha256(cert.pubkey) !== pubkey256) { + * const msg = 'Certificate verification error: ' + + * `The public key of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // Pin the exact certificate, rather than the pub key + * const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + + * 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; + * if (cert.fingerprint256 !== cert256) { + * const msg = 'Certificate verification error: ' + + * `The certificate of '${cert.subject.CN}' ` + + * 'does not match our pinned fingerprint'; + * return new Error(msg); + * } + * + * // This loop is informational only. + * // Print the certificate and public key fingerprints of all certs in the + * // chain. Its common to pin the public key of the issuer on the public + * // internet, while pinning the public key of the service in sensitive + * // environments. + * do { + * console.log('Subject Common Name:', cert.subject.CN); + * console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); + * + * hash = crypto.createHash('sha256'); + * console.log(' Public key ping-sha256:', sha256(cert.pubkey)); + * + * lastprint256 = cert.fingerprint256; + * cert = cert.issuerCertificate; + * } while (cert.fingerprint256 !== lastprint256); + * + * }, + * }; + * + * options.agent = new https.Agent(options); + * const req = https.request(options, (res) => { + * console.log('All OK. Server matched our pinned cert or public key'); + * console.log('statusCode:', res.statusCode); + * // Print the HPKP values + * console.log('headers:', res.headers['public-key-pins']); + * + * res.on('data', (d) => {}); + * }); + * + * req.on('error', (e) => { + * console.error(e.message); + * }); + * req.end(); + * ``` + * + * Outputs for example: + * + * ```text + * Subject Common Name: github.com + * Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 + * Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= + * Subject Common Name: DigiCert SHA2 Extended Validation Server CA + * Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A + * Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= + * Subject Common Name: DigiCert High Assurance EV Root CA + * Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF + * Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= + * All OK. Server matched our pinned cert or public key + * statusCode: 200 + * headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; + * pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; + * pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains + * ``` + * @since v0.3.6 + * @param options Accepts all `options` from `request`, with some differences in default values: + */ + function request(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; + function request(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; + /** + * Like `http.get()` but for HTTPS. + * + * `options` can be an object, a string, or a `URL` object. If `options` is a + * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. + * + * ```js + * const https = require('https'); + * + * https.get('https://encrypted.google.com/', (res) => { + * console.log('statusCode:', res.statusCode); + * console.log('headers:', res.headers); + * + * res.on('data', (d) => { + * process.stdout.write(d); + * }); + * + * }).on('error', (e) => { + * console.error(e); + * }); + * ``` + * @since v0.3.6 + * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. + */ + function get(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; + let globalAgent: Agent; +} +declare module 'node:https' { + export * from 'https'; +} diff --git a/build/node_modules/@types/node/index.d.ts b/build/node_modules/@types/node/index.d.ts new file mode 100755 index 00000000..ae3e4cc4 --- /dev/null +++ b/build/node_modules/@types/node/index.d.ts @@ -0,0 +1,129 @@ +// Type definitions for non-npm package Node.js 17.0 +// Project: https://nodejs.org/ +// Definitions by: Microsoft TypeScript +// DefinitelyTyped +// Alberto Schiabel +// Alvis HT Tang +// Andrew Makarov +// Benjamin Toueg +// Chigozirim C. +// David Junger +// Deividas Bakanas +// Eugene Y. Q. Shen +// Hannes Magnusson +// Huw +// Kelvin Jin +// Klaus Meinhardt +// Lishude +// Mariusz Wiktorczyk +// Mohsen Azimi +// Nicolas Even +// Nikita Galkin +// Parambir Singh +// Sebastian Silbermann +// Simon Schick +// Thomas den Hollander +// Wilco Bakker +// wwwy3y3 +// Samuel Ainsworth +// Kyle Uehlein +// Thanik Bhongbhibhat +// Marcin Kopacz +// Trivikram Kamat +// Junxiao Shi +// Ilia Baryshnikov +// ExE Boss +// Piotr Błażejewicz +// Anna Henningsen +// Victor Perin +// Yongsheng Zhang +// NodeJS Contributors +// Linus Unnebäck +// wafuwafu13 +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/** + * License for programmatically and manually incorporated + * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc + * + * Copyright Node.js contributors. All rights reserved. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// NOTE: These definitions support NodeJS and TypeScript 3.7+. + +// Reference required types from the default lib: +/// +/// +/// +/// + +// Base definitions for all NodeJS modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// diff --git a/build/node_modules/@types/node/inspector.d.ts b/build/node_modules/@types/node/inspector.d.ts new file mode 100755 index 00000000..7b9598c4 --- /dev/null +++ b/build/node_modules/@types/node/inspector.d.ts @@ -0,0 +1,2744 @@ +// tslint:disable-next-line:dt-header +// Type definitions for inspector + +// These definitions are auto-generated. +// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 +// for more information. + +// tslint:disable:max-line-length + +/** + * The `inspector` module provides an API for interacting with the V8 inspector. + * + * It can be accessed using: + * + * ```js + * const inspector = require('inspector'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/inspector.js) + */ +declare module 'inspector' { + import EventEmitter = require('node:events'); + interface InspectorNotification { + method: string; + params: T; + } + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: {} | undefined; + } + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: {}; + } + } + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + /** + * Call frame identifier. + */ + type CallFrameId = string; + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: {} | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + /** + * Describes a type collected during runtime. + * @experimental + */ + interface TypeObject { + /** + * Name of a type collected with type profiling. + */ + name: string; + } + /** + * Source offset and types for a parameter or return value. + * @experimental + */ + interface TypeProfileEntry { + /** + * Source offset of the parameter or end of function for return values. + */ + offset: number; + /** + * The types for this parameter or return value. + */ + types: TypeObject[]; + } + /** + * Type profile data collected during runtime for a JavaScript script. + * @experimental + */ + interface ScriptTypeProfile { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Type profile entries for parameters and return values of the functions in the script. + */ + entries: TypeProfileEntry[]; + } + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + interface TakeTypeProfileReturnType { + /** + * Type profile for all scripts since startTypeProfile() was turned on. + */ + result: ScriptTypeProfile[]; + } + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string; + /** + * Included category filters. + */ + includedCategories: string[]; + } + interface StartParameterType { + traceConfig: TraceConfig; + } + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + interface DataCollectedEventDataType { + value: Array<{}>; + } + } + namespace NodeWorker { + type WorkerID = string; + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + interface DetachParameterType { + sessionId: SessionID; + } + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + /** + * The `inspector.Session` is used for dispatching messages to the V8 inspector + * back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. + */ + constructor(); + /** + * Connects a session to the inspector back-end. + * @since v8.0.0 + */ + connect(): void; + /** + * Connects a session to the main thread inspector back-end. An exception will + * be thrown if this API was not called on a Worker thread. + * @since v12.11.0 + */ + connectToMainThread(): void; + /** + * Immediately close the session. All pending message callbacks will be called + * with an error. `session.connect()` will need to be called to be able to send + * messages again. Reconnected session will lose all inspector state, such as + * enabled agents or configured breakpoints. + * @since v8.0.0 + */ + disconnect(): void; + /** + * Posts a message to the inspector back-end. `callback` will be notified when + * a response is received. `callback` is a function that accepts two optional + * arguments: error and message-specific result. + * + * ```js + * session.post('Runtime.evaluate', { expression: '2 + 2' }, + * (error, { result }) => console.log(result)); + * // Output: { type: 'number', value: 4, description: '4' } + * ``` + * + * The latest version of the V8 inspector protocol is published on the [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). + * + * Node.js inspector supports all the Chrome DevTools Protocol domains declared + * by V8\. Chrome DevTools Protocol domain provides an interface for interacting + * with one of the runtime agents used to inspect the application state and listen + * to the run-time events. + * + * ## Example usage + * + * Apart from the debugger, various V8 Profilers are available through the DevTools + * protocol. + * @since v8.0.0 + */ + post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; + post(method: string, callback?: (err: Error | null, params?: {}) => void): void; + /** + * Returns supported domains. + */ + post(method: 'Schema.getDomains', callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + /** + * Evaluates expression on global object. + */ + post(method: 'Runtime.evaluate', params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: 'Runtime.evaluate', callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + /** + * Add handler to promise with given promise object id. + */ + post(method: 'Runtime.awaitPromise', params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: 'Runtime.awaitPromise', callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.callFunctionOn', params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: 'Runtime.callFunctionOn', callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: 'Runtime.getProperties', params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: 'Runtime.getProperties', callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + /** + * Releases remote object with given id. + */ + post(method: 'Runtime.releaseObject', params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObject', callback?: (err: Error | null) => void): void; + /** + * Releases all remote objects that belong to a given group. + */ + post(method: 'Runtime.releaseObjectGroup', params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.releaseObjectGroup', callback?: (err: Error | null) => void): void; + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: 'Runtime.runIfWaitingForDebugger', callback?: (err: Error | null) => void): void; + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: 'Runtime.enable', callback?: (err: Error | null) => void): void; + /** + * Disables reporting of execution contexts creation. + */ + post(method: 'Runtime.disable', callback?: (err: Error | null) => void): void; + /** + * Discards collected exceptions and console API calls. + */ + post(method: 'Runtime.discardConsoleEntries', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Runtime.setCustomObjectFormatterEnabled', params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Runtime.setCustomObjectFormatterEnabled', callback?: (err: Error | null) => void): void; + /** + * Compiles expression. + */ + post(method: 'Runtime.compileScript', params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: 'Runtime.compileScript', callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + /** + * Runs script with given id in a given context. + */ + post(method: 'Runtime.runScript', params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.runScript', callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: 'Runtime.queryObjects', params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: 'Runtime.queryObjects', callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: 'Runtime.globalLexicalScopeNames', + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: 'Runtime.globalLexicalScopeNames', callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: 'Debugger.enable', callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + /** + * Disables debugger for given page. + */ + post(method: 'Debugger.disable', callback?: (err: Error | null) => void): void; + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: 'Debugger.setBreakpointsActive', params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBreakpointsActive', callback?: (err: Error | null) => void): void; + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: 'Debugger.setSkipAllPauses', params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setSkipAllPauses', callback?: (err: Error | null) => void): void; + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: 'Debugger.setBreakpointByUrl', params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: 'Debugger.setBreakpointByUrl', callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: 'Debugger.setBreakpoint', params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: 'Debugger.setBreakpoint', callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + /** + * Removes JavaScript breakpoint. + */ + post(method: 'Debugger.removeBreakpoint', params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.removeBreakpoint', callback?: (err: Error | null) => void): void; + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: 'Debugger.getPossibleBreakpoints', + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: 'Debugger.getPossibleBreakpoints', callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + /** + * Continues execution until specific location is reached. + */ + post(method: 'Debugger.continueToLocation', params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.continueToLocation', callback?: (err: Error | null) => void): void; + /** + * @experimental + */ + post(method: 'Debugger.pauseOnAsyncCall', params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.pauseOnAsyncCall', callback?: (err: Error | null) => void): void; + /** + * Steps over the statement. + */ + post(method: 'Debugger.stepOver', callback?: (err: Error | null) => void): void; + /** + * Steps into the function call. + */ + post(method: 'Debugger.stepInto', params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.stepInto', callback?: (err: Error | null) => void): void; + /** + * Steps out of the function call. + */ + post(method: 'Debugger.stepOut', callback?: (err: Error | null) => void): void; + /** + * Stops on the next JavaScript statement. + */ + post(method: 'Debugger.pause', callback?: (err: Error | null) => void): void; + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: 'Debugger.scheduleStepIntoAsync', callback?: (err: Error | null) => void): void; + /** + * Resumes JavaScript execution. + */ + post(method: 'Debugger.resume', callback?: (err: Error | null) => void): void; + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: 'Debugger.getStackTrace', params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: 'Debugger.getStackTrace', callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + /** + * Searches for given string in script content. + */ + post(method: 'Debugger.searchInContent', params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: 'Debugger.searchInContent', callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + /** + * Edits JavaScript source live. + */ + post(method: 'Debugger.setScriptSource', params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: 'Debugger.setScriptSource', callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + /** + * Restarts particular call frame from the beginning. + */ + post(method: 'Debugger.restartFrame', params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: 'Debugger.restartFrame', callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + /** + * Returns source for the script with given id. + */ + post(method: 'Debugger.getScriptSource', params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: 'Debugger.getScriptSource', callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: 'Debugger.setPauseOnExceptions', params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setPauseOnExceptions', callback?: (err: Error | null) => void): void; + /** + * Evaluates expression on a given call frame. + */ + post(method: 'Debugger.evaluateOnCallFrame', params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: 'Debugger.evaluateOnCallFrame', callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: 'Debugger.setVariableValue', params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setVariableValue', callback?: (err: Error | null) => void): void; + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: 'Debugger.setReturnValue', params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setReturnValue', callback?: (err: Error | null) => void): void; + /** + * Enables or disables async call stacks tracking. + */ + post(method: 'Debugger.setAsyncCallStackDepth', params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setAsyncCallStackDepth', callback?: (err: Error | null) => void): void; + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: 'Debugger.setBlackboxPatterns', params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxPatterns', callback?: (err: Error | null) => void): void; + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: 'Debugger.setBlackboxedRanges', params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Debugger.setBlackboxedRanges', callback?: (err: Error | null) => void): void; + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: 'Console.enable', callback?: (err: Error | null) => void): void; + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: 'Console.disable', callback?: (err: Error | null) => void): void; + /** + * Does nothing. + */ + post(method: 'Console.clearMessages', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.disable', callback?: (err: Error | null) => void): void; + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: 'Profiler.setSamplingInterval', params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.setSamplingInterval', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.start', callback?: (err: Error | null) => void): void; + post(method: 'Profiler.stop', callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: 'Profiler.startPreciseCoverage', params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: 'Profiler.startPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: 'Profiler.stopPreciseCoverage', callback?: (err: Error | null) => void): void; + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: 'Profiler.takePreciseCoverage', callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: 'Profiler.getBestEffortCoverage', callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + /** + * Enable type profile. + * @experimental + */ + post(method: 'Profiler.startTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Disable type profile. Disabling releases type profile data collected so far. + * @experimental + */ + post(method: 'Profiler.stopTypeProfile', callback?: (err: Error | null) => void): void; + /** + * Collect type profile. + * @experimental + */ + post(method: 'Profiler.takeTypeProfile', callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; + post(method: 'HeapProfiler.enable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.disable', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopTrackingHeapObjects', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.takeHeapSnapshot', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.collectGarbage', callback?: (err: Error | null) => void): void; + post( + method: 'HeapProfiler.getObjectByHeapObjectId', + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: 'HeapProfiler.getObjectByHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: 'HeapProfiler.addInspectedHeapObject', params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.addInspectedHeapObject', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.getHeapObjectId', callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: 'HeapProfiler.startSampling', params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.startSampling', callback?: (err: Error | null) => void): void; + post(method: 'HeapProfiler.stopSampling', callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + post(method: 'HeapProfiler.getSamplingProfile', callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + /** + * Gets supported tracing categories. + */ + post(method: 'NodeTracing.getCategories', callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + /** + * Start trace events collection. + */ + post(method: 'NodeTracing.start', params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeTracing.start', callback?: (err: Error | null) => void): void; + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: 'NodeTracing.stop', callback?: (err: Error | null) => void): void; + /** + * Sends protocol message over session with given id. + */ + post(method: 'NodeWorker.sendMessageToWorker', params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.sendMessageToWorker', callback?: (err: Error | null) => void): void; + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: 'NodeWorker.enable', params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.enable', callback?: (err: Error | null) => void): void; + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: 'NodeWorker.disable', callback?: (err: Error | null) => void): void; + /** + * Detached from the worker with given sessionId. + */ + post(method: 'NodeWorker.detach', params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeWorker.detach', callback?: (err: Error | null) => void): void; + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: 'NodeRuntime.notifyWhenWaitingForDisconnect', callback?: (err: Error | null) => void): void; + // Events + addListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + addListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + addListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + addListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + addListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + addListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + addListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + addListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + addListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + addListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + addListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'inspectorNotification', message: InspectorNotification<{}>): boolean; + emit(event: 'Runtime.executionContextCreated', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextDestroyed', message: InspectorNotification): boolean; + emit(event: 'Runtime.executionContextsCleared'): boolean; + emit(event: 'Runtime.exceptionThrown', message: InspectorNotification): boolean; + emit(event: 'Runtime.exceptionRevoked', message: InspectorNotification): boolean; + emit(event: 'Runtime.consoleAPICalled', message: InspectorNotification): boolean; + emit(event: 'Runtime.inspectRequested', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptParsed', message: InspectorNotification): boolean; + emit(event: 'Debugger.scriptFailedToParse', message: InspectorNotification): boolean; + emit(event: 'Debugger.breakpointResolved', message: InspectorNotification): boolean; + emit(event: 'Debugger.paused', message: InspectorNotification): boolean; + emit(event: 'Debugger.resumed'): boolean; + emit(event: 'Console.messageAdded', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileStarted', message: InspectorNotification): boolean; + emit(event: 'Profiler.consoleProfileFinished', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.addHeapSnapshotChunk', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.resetProfiles'): boolean; + emit(event: 'HeapProfiler.reportHeapSnapshotProgress', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.lastSeenObjectId', message: InspectorNotification): boolean; + emit(event: 'HeapProfiler.heapStatsUpdate', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.dataCollected', message: InspectorNotification): boolean; + emit(event: 'NodeTracing.tracingComplete'): boolean; + emit(event: 'NodeWorker.attachedToWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.detachedFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeWorker.receivedMessageFromWorker', message: InspectorNotification): boolean; + emit(event: 'NodeRuntime.waitingForDisconnect'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + on(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + on(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + on(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + on(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + on(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + on(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + on(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + on(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + on(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + on(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + on(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + on(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + on(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + once(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + once(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + once(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + once(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + once(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + once(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + once(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + once(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + once(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + once(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + once(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + once(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + once(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: 'inspectorNotification', listener: (message: InspectorNotification<{}>) => void): this; + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: 'Runtime.executionContextCreated', listener: (message: InspectorNotification) => void): this; + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: 'Runtime.executionContextDestroyed', listener: (message: InspectorNotification) => void): this; + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: 'Runtime.executionContextsCleared', listener: () => void): this; + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: 'Runtime.exceptionThrown', listener: (message: InspectorNotification) => void): this; + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: 'Runtime.exceptionRevoked', listener: (message: InspectorNotification) => void): this; + /** + * Issued when console API was called. + */ + prependOnceListener(event: 'Runtime.consoleAPICalled', listener: (message: InspectorNotification) => void): this; + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: 'Runtime.inspectRequested', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: 'Debugger.scriptParsed', listener: (message: InspectorNotification) => void): this; + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: 'Debugger.scriptFailedToParse', listener: (message: InspectorNotification) => void): this; + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: 'Debugger.breakpointResolved', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: 'Debugger.paused', listener: (message: InspectorNotification) => void): this; + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: 'Debugger.resumed', listener: () => void): this; + /** + * Issued when new console message is added. + */ + prependOnceListener(event: 'Console.messageAdded', listener: (message: InspectorNotification) => void): this; + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: 'Profiler.consoleProfileStarted', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'Profiler.consoleProfileFinished', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.addHeapSnapshotChunk', listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: 'HeapProfiler.resetProfiles', listener: () => void): this; + prependOnceListener(event: 'HeapProfiler.reportHeapSnapshotProgress', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: 'HeapProfiler.lastSeenObjectId', listener: (message: InspectorNotification) => void): this; + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: 'HeapProfiler.heapStatsUpdate', listener: (message: InspectorNotification) => void): this; + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: 'NodeTracing.dataCollected', listener: (message: InspectorNotification) => void): this; + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: 'NodeTracing.tracingComplete', listener: () => void): this; + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: 'NodeWorker.attachedToWorker', listener: (message: InspectorNotification) => void): this; + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: 'NodeWorker.detachedFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: 'NodeWorker.receivedMessageFromWorker', listener: (message: InspectorNotification) => void): this; + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: 'NodeRuntime.waitingForDisconnect', listener: () => void): this; + } + /** + * Activate inspector on host and port. Equivalent to `node --inspect=[[host:]port]`, but can be done programmatically after node has + * started. + * + * If wait is `true`, will block until a client has connected to the inspect port + * and flow control has been passed to the debugger client. + * + * See the `security warning` regarding the `host`parameter usage. + * @param [port='what was specified on the CLI'] Port to listen on for inspector connections. Optional. + * @param [host='what was specified on the CLI'] Host to listen on for inspector connections. Optional. + * @param [wait=false] Block until a client has connected. Optional. + */ + function open(port?: number, host?: string, wait?: boolean): void; + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + /** + * Return the URL of the active inspector, or `undefined` if there is none. + * + * ```console + * $ node --inspect -p 'inspector.url()' + * Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * For help see https://nodejs.org/en/docs/inspector + * ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 + * + * $ node --inspect=localhost:3000 -p 'inspector.url()' + * Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * For help see https://nodejs.org/en/docs/inspector + * ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a + * + * $ node -p 'inspector.url()' + * undefined + * ``` + */ + function url(): string | undefined; + /** + * Blocks until a client (existing or connected later) has sent`Runtime.runIfWaitingForDebugger` command. + * + * An exception will be thrown if there is no active inspector. + * @since v12.7.0 + */ + function waitForDebugger(): void; +} +declare module 'node:inspector' { + import EventEmitter = require('inspector'); + export = EventEmitter; +} diff --git a/build/node_modules/@types/node/module.d.ts b/build/node_modules/@types/node/module.d.ts new file mode 100755 index 00000000..d83aec94 --- /dev/null +++ b/build/node_modules/@types/node/module.d.ts @@ -0,0 +1,114 @@ +/** + * @since v0.3.7 + */ +declare module 'module' { + import { URL } from 'node:url'; + namespace Module { + /** + * The `module.syncBuiltinESMExports()` method updates all the live bindings for + * builtin `ES Modules` to match the properties of the `CommonJS` exports. It + * does not add or remove exported names from the `ES Modules`. + * + * ```js + * const fs = require('fs'); + * const assert = require('assert'); + * const { syncBuiltinESMExports } = require('module'); + * + * fs.readFile = newAPI; + * + * delete fs.readFileSync; + * + * function newAPI() { + * // ... + * } + * + * fs.newAPI = newAPI; + * + * syncBuiltinESMExports(); + * + * import('fs').then((esmFS) => { + * // It syncs the existing readFile property with the new value + * assert.strictEqual(esmFS.readFile, newAPI); + * // readFileSync has been deleted from the required fs + * assert.strictEqual('readFileSync' in fs, false); + * // syncBuiltinESMExports() does not remove readFileSync from esmFS + * assert.strictEqual('readFileSync' in esmFS, true); + * // syncBuiltinESMExports() does not add names + * assert.strictEqual(esmFS.newAPI, undefined); + * }); + * ``` + * @since v12.12.0 + */ + function syncBuiltinESMExports(): void; + /** + * `path` is the resolved path for the file for which a corresponding source map + * should be fetched. + * @since v13.7.0, v12.17.0 + */ + function findSourceMap(path: string, error?: Error): SourceMap; + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + /** + * @since v13.7.0, v12.17.0 + */ + class SourceMap { + /** + * Getter for the payload used to construct the `SourceMap` instance. + */ + readonly payload: SourceMapPayload; + constructor(payload: SourceMapPayload); + /** + * Given a line number and column number in the generated source file, returns + * an object representing the position in the original file. The object returned + * consists of the following keys: + */ + findEntry(line: number, column: number): SourceMapping; + } + } + interface Module extends NodeModule {} + class Module { + static runMain(): void; + static wrap(code: string): string; + static createRequire(path: string | URL): NodeRequire; + static builtinModules: string[]; + static Module: typeof Module; + constructor(id: string, parent?: Module); + } + global { + interface ImportMeta { + url: string; + /** + * @experimental + * This feature is only available with the `--experimental-import-meta-resolve` + * command flag enabled. + * + * Provides a module-relative resolution function scoped to each module, returning + * the URL string. + * + * @param specified The module specifier to resolve relative to `parent`. + * @param parent The absolute parent module URL to resolve from. If none + * is specified, the value of `import.meta.url` is used as the default. + */ + resolve?(specified: string, parent?: string | URL): Promise; + } + } + export = Module; +} +declare module 'node:module' { + import module = require('module'); + export = module; +} diff --git a/build/node_modules/@types/node/net.d.ts b/build/node_modules/@types/node/net.d.ts new file mode 100755 index 00000000..f24b16ca --- /dev/null +++ b/build/node_modules/@types/node/net.d.ts @@ -0,0 +1,784 @@ +/** + * > Stability: 2 - Stable + * + * The `net` module provides an asynchronous network API for creating stream-based + * TCP or `IPC` servers ({@link createServer}) and clients + * ({@link createConnection}). + * + * It can be accessed using: + * + * ```js + * const net = require('net'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/net.js) + */ +declare module 'net' { + import * as stream from 'node:stream'; + import { Abortable, EventEmitter } from 'node:events'; + import * as dns from 'node:dns'; + type LookupFunction = (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void; + interface AddressInfo { + address: string; + family: string; + port: number; + } + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + signal?: AbortSignal; + } + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. + * Return false from this function to implicitly pause() the socket. + */ + callback(bytesWritten: number, buf: Uint8Array): boolean; + } + interface ConnectOpts { + /** + * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. + * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will + * still be emitted as normal and methods like pause() and resume() will also behave as expected. + */ + onread?: OnReadOpts | undefined; + } + interface TcpSocketConnectOpts extends ConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + } + interface IpcSocketConnectOpts extends ConnectOpts { + path: string; + } + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + /** + * This class is an abstraction of a TCP socket or a streaming `IPC` endpoint + * (uses named pipes on Windows, and Unix domain sockets otherwise). It is also + * an `EventEmitter`. + * + * A `net.Socket` can be created by the user and used directly to interact with + * a server. For example, it is returned by {@link createConnection}, + * so the user can use it to talk to the server. + * + * It can also be created by Node.js and passed to the user when a connection + * is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use + * it to interact with the client. + * @since v0.3.4 + */ + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + /** + * Sends data on the socket. The second parameter specifies the encoding in the + * case of a string. It defaults to UTF8 encoding. + * + * Returns `true` if the entire data was flushed successfully to the kernel + * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. + * + * The optional `callback` parameter will be executed when the data is finally + * written out, which may not be immediately. + * + * See `Writable` stream `write()` method for more + * information. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + */ + write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; + /** + * Initiate a connection on a given socket. + * + * Possible signatures: + * + * * `socket.connect(options[, connectListener])` + * * `socket.connect(path[, connectListener])` for `IPC` connections. + * * `socket.connect(port[, host][, connectListener])` for TCP connections. + * * Returns: `net.Socket` The socket itself. + * + * This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, + * instead of a `'connect'` event, an `'error'` event will be emitted with + * the error passed to the `'error'` listener. + * The last parameter `connectListener`, if supplied, will be added as a listener + * for the `'connect'` event **once**. + * + * This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined + * behavior. + */ + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + /** + * Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. + * @since v0.1.90 + * @return The socket itself. + */ + setEncoding(encoding?: BufferEncoding): this; + /** + * Pauses the reading of data. That is, `'data'` events will not be emitted. + * Useful to throttle back an upload. + * @return The socket itself. + */ + pause(): this; + /** + * Resumes reading after a call to `socket.pause()`. + * @return The socket itself. + */ + resume(): this; + /** + * Sets the socket to timeout after `timeout` milliseconds of inactivity on + * the socket. By default `net.Socket` do not have a timeout. + * + * When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to + * end the connection. + * + * ```js + * socket.setTimeout(3000); + * socket.on('timeout', () => { + * console.log('socket timeout'); + * socket.end(); + * }); + * ``` + * + * If `timeout` is 0, then the existing idle timeout is disabled. + * + * The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. + * @since v0.1.90 + * @return The socket itself. + */ + setTimeout(timeout: number, callback?: () => void): this; + /** + * Enable/disable the use of Nagle's algorithm. + * + * When a TCP connection is created, it will have Nagle's algorithm enabled. + * + * Nagle's algorithm delays data before it is sent via the network. It attempts + * to optimize throughput at the expense of latency. + * + * Passing `true` for `noDelay` or not passing an argument will disable Nagle's + * algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's + * algorithm. + * @since v0.1.90 + * @param [noDelay=true] + * @return The socket itself. + */ + setNoDelay(noDelay?: boolean): this; + /** + * Enable/disable keep-alive functionality, and optionally set the initial + * delay before the first keepalive probe is sent on an idle socket. + * + * Set `initialDelay` (in milliseconds) to set the delay between the last + * data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default + * (or previous) setting. + * + * Enabling the keep-alive functionality will set the following socket options: + * + * * `SO_KEEPALIVE=1` + * * `TCP_KEEPIDLE=initialDelay` + * * `TCP_KEEPCNT=10` + * * `TCP_KEEPINTVL=1` + * @since v0.1.92 + * @param [enable=false] + * @param [initialDelay=0] + * @return The socket itself. + */ + setKeepAlive(enable?: boolean, initialDelay?: number): this; + /** + * Returns the bound `address`, the address `family` name and `port` of the + * socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` + * @since v0.1.90 + */ + address(): AddressInfo | {}; + /** + * Calling `unref()` on a socket will allow the program to exit if this is the only + * active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + unref(): this; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will_not_ let the program exit if it's the only socket left (the default behavior). + * If the socket is `ref`ed calling `ref` again will have no effect. + * @since v0.9.1 + * @return The socket itself. + */ + ref(): this; + /** + * This property shows the number of characters buffered for writing. The buffer + * may contain strings whose length after encoding is not yet known. So this number + * is only an approximation of the number of bytes in the buffer. + * + * `net.Socket` has the property that `socket.write()` always works. This is to + * help users get up and running quickly. The computer cannot always keep up + * with the amount of data that is written to a socket. The network connection + * simply might be too slow. Node.js will internally queue up the data written to a + * socket and send it out over the wire when it is possible. + * + * The consequence of this internal buffering is that memory may grow. + * Users who experience large or growing `bufferSize` should attempt to + * "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. + * @since v0.3.8 + * @deprecated Since v14.6.0 - Use `writableLength` instead. + */ + readonly bufferSize: number; + /** + * The amount of received bytes. + * @since v0.5.3 + */ + readonly bytesRead: number; + /** + * The amount of bytes sent. + * @since v0.5.3 + */ + readonly bytesWritten: number; + /** + * If `true`,`socket.connect(options[, connectListener])` was + * called and has not yet finished. It will stay `true` until the socket becomes + * connected, then it is set to `false` and the `'connect'` event is emitted. Note + * that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. + * @since v6.1.0 + */ + readonly connecting: boolean; + /** + * See `writable.destroyed` for further details. + */ + readonly destroyed: boolean; + /** + * The string representation of the local IP address the remote client is + * connecting on. For example, in a server listening on `'0.0.0.0'`, if a client + * connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. + * @since v0.9.6 + */ + readonly localAddress?: string; + /** + * The numeric representation of the local port. For example, `80` or `21`. + * @since v0.9.6 + */ + readonly localPort?: number; + /** + * The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if + * the socket is destroyed (for example, if the client disconnected). + * @since v0.5.10 + */ + readonly remoteAddress?: string | undefined; + /** + * The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. + * @since v0.11.14 + */ + readonly remoteFamily?: string | undefined; + /** + * The numeric representation of the remote port. For example, `80` or `21`. + * @since v0.5.10 + */ + readonly remotePort?: number | undefined; + /** + * Half-closes the socket. i.e., it sends a FIN packet. It is possible the + * server will still send some data. + * + * See `writable.end()` for further details. + * @since v0.1.90 + * @param [encoding='utf8'] Only used when data is `string`. + * @param callback Optional callback for when the socket is finished. + * @return The socket itself. + */ + end(callback?: () => void): this; + end(buffer: Uint8Array | string, callback?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: (hadError: boolean) => void): this; + addListener(event: 'connect', listener: () => void): this; + addListener(event: 'data', listener: (data: Buffer) => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'lookup', listener: (err: Error, address: string, family: string | number, host: string) => void): this; + addListener(event: 'ready', listener: () => void): this; + addListener(event: 'timeout', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close', hadError: boolean): boolean; + emit(event: 'connect'): boolean; + emit(event: 'data', data: Buffer): boolean; + emit(event: 'drain'): boolean; + emit(event: 'end'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'lookup', err: Error, address: string, family: string | number, host: string): boolean; + emit(event: 'ready'): boolean; + emit(event: 'timeout'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: (hadError: boolean) => void): this; + on(event: 'connect', listener: () => void): this; + on(event: 'data', listener: (data: Buffer) => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'lookup', listener: (err: Error, address: string, family: string | number, host: string) => void): this; + on(event: 'ready', listener: () => void): this; + on(event: 'timeout', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: (hadError: boolean) => void): this; + once(event: 'connect', listener: () => void): this; + once(event: 'data', listener: (data: Buffer) => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'lookup', listener: (err: Error, address: string, family: string | number, host: string) => void): this; + once(event: 'ready', listener: () => void): this; + once(event: 'timeout', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: (hadError: boolean) => void): this; + prependListener(event: 'connect', listener: () => void): this; + prependListener(event: 'data', listener: (data: Buffer) => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'lookup', listener: (err: Error, address: string, family: string | number, host: string) => void): this; + prependListener(event: 'ready', listener: () => void): this; + prependListener(event: 'timeout', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: (hadError: boolean) => void): this; + prependOnceListener(event: 'connect', listener: () => void): this; + prependOnceListener(event: 'data', listener: (data: Buffer) => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'lookup', listener: (err: Error, address: string, family: string | number, host: string) => void): this; + prependOnceListener(event: 'ready', listener: () => void): this; + prependOnceListener(event: 'timeout', listener: () => void): this; + } + interface ListenOptions extends Abortable { + port?: number | undefined; + host?: string | undefined; + backlog?: number | undefined; + path?: string | undefined; + exclusive?: boolean | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + } + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + } + /** + * This class is used to create a TCP or `IPC` server. + * @since v0.1.90 + */ + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + /** + * Start a server listening for connections. A `net.Server` can be a TCP or + * an `IPC` server depending on what it listens to. + * + * Possible signatures: + * + * * `server.listen(handle[, backlog][, callback])` + * * `server.listen(options[, callback])` + * * `server.listen(path[, backlog][, callback])` for `IPC` servers + * * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers + * + * This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` + * event. + * + * All `listen()` methods can take a `backlog` parameter to specify the maximum + * length of the queue of pending connections. The actual length will be determined + * by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn`on Linux. The default value of this parameter is 511 (not 512). + * + * All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for + * details). + * + * The `server.listen()` method can be called again if and only if there was an + * error during the first `server.listen()` call or `server.close()` has been + * called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. + * + * One of the most common errors raised when listening is `EADDRINUSE`. + * This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry + * after a certain amount of time: + * + * ```js + * server.on('error', (e) => { + * if (e.code === 'EADDRINUSE') { + * console.log('Address in use, retrying...'); + * setTimeout(() => { + * server.close(); + * server.listen(PORT, HOST); + * }, 1000); + * } + * }); + * ``` + */ + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + /** + * Stops the server from accepting new connections and keeps existing + * connections. This function is asynchronous, the server is finally closed + * when all connections are ended and the server emits a `'close'` event. + * The optional `callback` will be called once the `'close'` event occurs. Unlike + * that event, it will be called with an `Error` as its only argument if the server + * was not open when it was closed. + * @since v0.1.90 + * @param callback Called when the server is closed. + */ + close(callback?: (err?: Error) => void): this; + /** + * Returns the bound `address`, the address `family` name, and `port` of the server + * as reported by the operating system if listening on an IP socket + * (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. + * + * For a server listening on a pipe or Unix domain socket, the name is returned + * as a string. + * + * ```js + * const server = net.createServer((socket) => { + * socket.end('goodbye\n'); + * }).on('error', (err) => { + * // Handle errors here. + * throw err; + * }); + * + * // Grab an arbitrary unused port. + * server.listen(() => { + * console.log('opened server on', server.address()); + * }); + * ``` + * + * `server.address()` returns `null` before the `'listening'` event has been + * emitted or after calling `server.close()`. + * @since v0.1.90 + */ + address(): AddressInfo | string | null; + /** + * Asynchronously get the number of concurrent connections on the server. Works + * when sockets were sent to forks. + * + * Callback should take two arguments `err` and `count`. + * @since v0.9.7 + */ + getConnections(cb: (error: Error | null, count: number) => void): void; + /** + * Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will_not_ let the program exit if it's the only server left (the default behavior). + * If the server is `ref`ed calling `ref()` again will have no effect. + * @since v0.9.1 + */ + ref(): this; + /** + * Calling `unref()` on a server will allow the program to exit if this is the only + * active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. + * @since v0.9.1 + */ + unref(): this; + /** + * Set this property to reject connections when the server's connection count gets + * high. + * + * It is not recommended to use this option once a socket has been sent to a child + * with `child_process.fork()`. + * @since v0.2.0 + */ + maxConnections: number; + connections: number; + /** + * Indicates whether or not the server is listening for connections. + * @since v5.7.0 + */ + listening: boolean; + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'connection', listener: (socket: Socket) => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'listening', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close'): boolean; + emit(event: 'connection', socket: Socket): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'listening'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'connection', listener: (socket: Socket) => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'listening', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'connection', listener: (socket: Socket) => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'listening', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'connection', listener: (socket: Socket) => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'listening', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'connection', listener: (socket: Socket) => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'listening', listener: () => void): this; + } + type IPVersion = 'ipv4' | 'ipv6'; + /** + * The `BlockList` object can be used with some network APIs to specify rules for + * disabling inbound or outbound access to specific IP addresses, IP ranges, or + * IP subnets. + * @since v15.0.0, v14.18.0 + */ + class BlockList { + /** + * Adds a rule to block the given IP address. + * @since v15.0.0, v14.18.0 + * @param address An IPv4 or IPv6 address. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addAddress(address: string, type?: IPVersion): void; + addAddress(address: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). + * @since v15.0.0, v14.18.0 + * @param start The starting IPv4 or IPv6 address in the range. + * @param end The ending IPv4 or IPv6 address in the range. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addRange(start: string, end: string, type?: IPVersion): void; + addRange(start: SocketAddress, end: SocketAddress): void; + /** + * Adds a rule to block a range of IP addresses specified as a subnet mask. + * @since v15.0.0, v14.18.0 + * @param net The network IPv4 or IPv6 address. + * @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + addSubnet(net: SocketAddress, prefix: number): void; + addSubnet(net: string, prefix: number, type?: IPVersion): void; + /** + * Returns `true` if the given IP address matches any of the rules added to the`BlockList`. + * + * ```js + * const blockList = new net.BlockList(); + * blockList.addAddress('123.123.123.123'); + * blockList.addRange('10.0.0.1', '10.0.0.10'); + * blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); + * + * console.log(blockList.check('123.123.123.123')); // Prints: true + * console.log(blockList.check('10.0.0.3')); // Prints: true + * console.log(blockList.check('222.111.111.222')); // Prints: false + * + * // IPv6 notation for IPv4 addresses works: + * console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true + * console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true + * ``` + * @since v15.0.0, v14.18.0 + * @param address The IP address to check + * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. + */ + check(address: SocketAddress): boolean; + check(address: string, type?: IPVersion): boolean; + } + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + /** + * Creates a new TCP or `IPC` server. + * + * If `allowHalfOpen` is set to `true`, when the other end of the socket + * signals the end of transmission, the server will only send back the end of + * transmission when `socket.end()` is explicitly called. For example, in the + * context of TCP, when a FIN packed is received, a FIN packed is sent + * back only when `socket.end()` is explicitly called. Until then the + * connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information. + * + * If `pauseOnConnect` is set to `true`, then the socket associated with each + * incoming connection will be paused, and no data will be read from its handle. + * This allows connections to be passed between processes without any data being + * read by the original process. To begin reading data from a paused socket, call `socket.resume()`. + * + * The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. + * + * Here is an example of an TCP echo server which listens for connections + * on port 8124: + * + * ```js + * const net = require('net'); + * const server = net.createServer((c) => { + * // 'connection' listener. + * console.log('client connected'); + * c.on('end', () => { + * console.log('client disconnected'); + * }); + * c.write('hello\r\n'); + * c.pipe(c); + * }); + * server.on('error', (err) => { + * throw err; + * }); + * server.listen(8124, () => { + * console.log('server bound'); + * }); + * ``` + * + * Test this by using `telnet`: + * + * ```console + * $ telnet localhost 8124 + * ``` + * + * To listen on the socket `/tmp/echo.sock`: + * + * ```js + * server.listen('/tmp/echo.sock', () => { + * console.log('server bound'); + * }); + * ``` + * + * Use `nc` to connect to a Unix domain socket server: + * + * ```console + * $ nc -U /tmp/echo.sock + * ``` + * @since v0.5.0 + * @param connectionListener Automatically set as a listener for the {@link 'connection'} event. + */ + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + /** + * Aliases to {@link createConnection}. + * + * Possible signatures: + * + * * {@link connect} + * * {@link connect} for `IPC` connections. + * * {@link connect} for TCP connections. + */ + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + /** + * A factory function, which creates a new {@link Socket}, + * immediately initiates connection with `socket.connect()`, + * then returns the `net.Socket` that starts the connection. + * + * When the connection is established, a `'connect'` event will be emitted + * on the returned socket. The last parameter `connectListener`, if supplied, + * will be added as a listener for the `'connect'` event **once**. + * + * Possible signatures: + * + * * {@link createConnection} + * * {@link createConnection} for `IPC` connections. + * * {@link createConnection} for TCP connections. + * + * The {@link connect} function is an alias to this function. + */ + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + /** + * Tests if input is an IP address. Returns `0` for invalid strings, + * returns `4` for IP version 4 addresses, and returns `6` for IP version 6 + * addresses. + * @since v0.3.0 + */ + function isIP(input: string): number; + /** + * Returns `true` if input is a version 4 IP address, otherwise returns `false`. + * @since v0.3.0 + */ + function isIPv4(input: string): boolean; + /** + * Returns `true` if input is a version 6 IP address, otherwise returns `false`. + * @since v0.3.0 + */ + function isIPv6(input: string): boolean; + interface SocketAddressInitOptions { + /** + * The network address as either an IPv4 or IPv6 string. + * @default 127.0.0.1 + */ + address?: string | undefined; + /** + * @default `'ipv4'` + */ + family?: IPVersion | undefined; + /** + * An IPv6 flow-label used only if `family` is `'ipv6'`. + * @default 0 + */ + flowlabel?: number | undefined; + /** + * An IP port. + * @default 0 + */ + port?: number | undefined; + } + /** + * @since v15.14.0, v14.18.0 + */ + class SocketAddress { + constructor(options: SocketAddressInitOptions); + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly address: string; + /** + * Either \`'ipv4'\` or \`'ipv6'\`. + * @since v15.14.0, v14.18.0 + */ + readonly family: IPVersion; + /** + * @since v15.14.0, v14.18.0 + */ + readonly port: number; + /** + * @since v15.14.0, v14.18.0 + */ + readonly flowlabel: number; + } +} +declare module 'node:net' { + export * from 'net'; +} diff --git a/build/node_modules/@types/node/os.d.ts b/build/node_modules/@types/node/os.d.ts new file mode 100755 index 00000000..a618e916 --- /dev/null +++ b/build/node_modules/@types/node/os.d.ts @@ -0,0 +1,455 @@ +/** + * The `os` module provides operating system-related utility methods and + * properties. It can be accessed using: + * + * ```js + * const os = require('os'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/os.js) + */ +declare module 'os' { + interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + } + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: 'IPv4'; + } + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: 'IPv6'; + scopeid: number; + } + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T; + homedir: T; + } + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + /** + * Returns the host name of the operating system as a string. + * @since v0.3.3 + */ + function hostname(): string; + /** + * Returns an array containing the 1, 5, and 15 minute load averages. + * + * The load average is a measure of system activity calculated by the operating + * system and expressed as a fractional number. + * + * The load average is a Unix-specific concept. On Windows, the return value is + * always `[0, 0, 0]`. + * @since v0.3.3 + */ + function loadavg(): number[]; + /** + * Returns the system uptime in number of seconds. + * @since v0.3.3 + */ + function uptime(): number; + /** + * Returns the amount of free system memory in bytes as an integer. + * @since v0.3.3 + */ + function freemem(): number; + /** + * Returns the total amount of system memory in bytes as an integer. + * @since v0.3.3 + */ + function totalmem(): number; + /** + * Returns an array of objects containing information about each logical CPU core. + * + * The properties included on each object include: + * + * ```js + * [ + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 252020, + * nice: 0, + * sys: 30340, + * idle: 1070356870, + * irq: 0 + * } + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 306960, + * nice: 0, + * sys: 26980, + * idle: 1071569080, + * irq: 0 + * } + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 248450, + * nice: 0, + * sys: 21750, + * idle: 1070919370, + * irq: 0 + * } + * }, + * { + * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', + * speed: 2926, + * times: { + * user: 256880, + * nice: 0, + * sys: 19430, + * idle: 1070905480, + * irq: 20 + * } + * }, + * ] + * ``` + * + * `nice` values are POSIX-only. On Windows, the `nice` values of all processors + * are always 0. + * @since v0.3.3 + */ + function cpus(): CpuInfo[]; + /** + * Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it + * returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. + * + * See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information + * about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems. + * @since v0.3.3 + */ + function type(): string; + /** + * Returns the operating system as a string. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See + * [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v0.3.3 + */ + function release(): string; + /** + * Returns an object containing network interfaces that have been assigned a + * network address. + * + * Each key on the returned object identifies a network interface. The associated + * value is an array of objects that each describe an assigned network address. + * + * The properties available on the assigned network address object include: + * + * ```js + * { + * lo: [ + * { + * address: '127.0.0.1', + * netmask: '255.0.0.0', + * family: 'IPv4', + * mac: '00:00:00:00:00:00', + * internal: true, + * cidr: '127.0.0.1/8' + * }, + * { + * address: '::1', + * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', + * family: 'IPv6', + * mac: '00:00:00:00:00:00', + * scopeid: 0, + * internal: true, + * cidr: '::1/128' + * } + * ], + * eth0: [ + * { + * address: '192.168.1.108', + * netmask: '255.255.255.0', + * family: 'IPv4', + * mac: '01:02:03:0a:0b:0c', + * internal: false, + * cidr: '192.168.1.108/24' + * }, + * { + * address: 'fe80::a00:27ff:fe4e:66a1', + * netmask: 'ffff:ffff:ffff:ffff::', + * family: 'IPv6', + * mac: '01:02:03:0a:0b:0c', + * scopeid: 1, + * internal: false, + * cidr: 'fe80::a00:27ff:fe4e:66a1/64' + * } + * ] + * } + * ``` + * @since v0.6.0 + */ + function networkInterfaces(): NodeJS.Dict; + /** + * Returns the string path of the current user's home directory. + * + * On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it + * uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory. + * + * On Windows, it uses the `USERPROFILE` environment variable if defined. + * Otherwise it uses the path to the profile directory of the current user. + * @since v2.3.0 + */ + function homedir(): string; + /** + * Returns information about the currently effective user. On POSIX platforms, + * this is typically a subset of the password file. The returned object includes + * the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and`gid` fields are `-1`, and `shell` is `null`. + * + * The value of `homedir` returned by `os.userInfo()` is provided by the operating + * system. This differs from the result of `os.homedir()`, which queries + * environment variables for the home directory before falling back to the + * operating system response. + * + * Throws a `SystemError` if a user has no `username` or `homedir`. + * @since v6.0.0 + */ + function userInfo(options: { encoding: 'buffer' }): UserInfo; + function userInfo(options?: { encoding: BufferEncoding }): UserInfo; + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + const devNull: string; + const EOL: string; + /** + * Returns the operating system CPU architecture for which the Node.js binary was + * compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`, `'ppc64'`, `'s390'`, `'s390x'`, `'x32'`, and `'x64'`. + * + * The return value is equivalent to `process.arch`. + * @since v0.5.0 + */ + function arch(): string; + /** + * Returns a string identifying the kernel version. + * + * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not + * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. + * @since v13.11.0, v12.17.0 + */ + function version(): string; + /** + * Returns a string identifying the operating system platform. The value is set + * at compile time. Possible values are `'aix'`, `'darwin'`, `'freebsd'`,`'linux'`, `'openbsd'`, `'sunos'`, and `'win32'`. + * + * The return value is equivalent to `process.platform`. + * + * The value `'android'` may also be returned if Node.js is built on the Android + * operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.5.0 + */ + function platform(): NodeJS.Platform; + /** + * Returns the operating system's default directory for temporary files as a + * string. + * @since v0.9.9 + */ + function tmpdir(): string; + /** + * Returns a string identifying the endianness of the CPU for which the Node.js + * binary was compiled. + * + * Possible values are `'BE'` for big endian and `'LE'` for little endian. + * @since v0.9.4 + */ + function endianness(): 'BE' | 'LE'; + /** + * Returns the scheduling priority for the process specified by `pid`. If `pid` is + * not provided or is `0`, the priority of the current process is returned. + * @since v10.10.0 + * @param [pid=0] The process ID to retrieve scheduling priority for. + */ + function getPriority(pid?: number): number; + /** + * Attempts to set the scheduling priority for the process specified by `pid`. If`pid` is not provided or is `0`, the process ID of the current process is used. + * + * The `priority` input must be an integer between `-20` (high priority) and `19`(low priority). Due to differences between Unix priority levels and Windows + * priority classes, `priority` is mapped to one of six priority constants in`os.constants.priority`. When retrieving a process priority level, this range + * mapping may cause the return value to be slightly different on Windows. To avoid + * confusion, set `priority` to one of the priority constants. + * + * On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user + * privileges. Otherwise the set priority will be silently reduced to`PRIORITY_HIGH`. + * @since v10.10.0 + * @param [pid=0] The process ID to set scheduling priority for. + * @param priority The scheduling priority to assign to the process. + */ + function setPriority(priority: number): void; + function setPriority(pid: number, priority: number): void; +} +declare module 'node:os' { + export * from 'os'; +} diff --git a/build/node_modules/@types/node/package.json b/build/node_modules/@types/node/package.json new file mode 100755 index 00000000..b0582bdf --- /dev/null +++ b/build/node_modules/@types/node/package.json @@ -0,0 +1,209 @@ +{ + "_from": "@types/node@*", + "_id": "@types/node@17.0.23", + "_inBundle": false, + "_integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "_location": "/@types/node", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "@types/node@*", + "name": "@types/node", + "escapedName": "@types%2fnode", + "scope": "@types", + "rawSpec": "*", + "saveSpec": null, + "fetchSpec": "*" + }, + "_requiredBy": [ + "/@types/resolve" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@types/node/-/node-17.0.23.tgz", + "_shasum": "3b41a6e643589ac6442bdbd7a4a3ded62f33f7da", + "_spec": "@types/node@*", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@types/resolve", + "bugs": { + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Microsoft TypeScript", + "url": "https://github.com/Microsoft" + }, + { + "name": "DefinitelyTyped", + "url": "https://github.com/DefinitelyTyped" + }, + { + "name": "Alberto Schiabel", + "url": "https://github.com/jkomyno" + }, + { + "name": "Alvis HT Tang", + "url": "https://github.com/alvis" + }, + { + "name": "Andrew Makarov", + "url": "https://github.com/r3nya" + }, + { + "name": "Benjamin Toueg", + "url": "https://github.com/btoueg" + }, + { + "name": "Chigozirim C.", + "url": "https://github.com/smac89" + }, + { + "name": "David Junger", + "url": "https://github.com/touffy" + }, + { + "name": "Deividas Bakanas", + "url": "https://github.com/DeividasBakanas" + }, + { + "name": "Eugene Y. Q. Shen", + "url": "https://github.com/eyqs" + }, + { + "name": "Hannes Magnusson", + "url": "https://github.com/Hannes-Magnusson-CK" + }, + { + "name": "Huw", + "url": "https://github.com/hoo29" + }, + { + "name": "Kelvin Jin", + "url": "https://github.com/kjin" + }, + { + "name": "Klaus Meinhardt", + "url": "https://github.com/ajafff" + }, + { + "name": "Lishude", + "url": "https://github.com/islishude" + }, + { + "name": "Mariusz Wiktorczyk", + "url": "https://github.com/mwiktorczyk" + }, + { + "name": "Mohsen Azimi", + "url": "https://github.com/mohsen1" + }, + { + "name": "Nicolas Even", + "url": "https://github.com/n-e" + }, + { + "name": "Nikita Galkin", + "url": "https://github.com/galkin" + }, + { + "name": "Parambir Singh", + "url": "https://github.com/parambirs" + }, + { + "name": "Sebastian Silbermann", + "url": "https://github.com/eps1lon" + }, + { + "name": "Simon Schick", + "url": "https://github.com/SimonSchick" + }, + { + "name": "Thomas den Hollander", + "url": "https://github.com/ThomasdenH" + }, + { + "name": "Wilco Bakker", + "url": "https://github.com/WilcoBakker" + }, + { + "name": "wwwy3y3", + "url": "https://github.com/wwwy3y3" + }, + { + "name": "Samuel Ainsworth", + "url": "https://github.com/samuela" + }, + { + "name": "Kyle Uehlein", + "url": "https://github.com/kuehlein" + }, + { + "name": "Thanik Bhongbhibhat", + "url": "https://github.com/bhongy" + }, + { + "name": "Marcin Kopacz", + "url": "https://github.com/chyzwar" + }, + { + "name": "Trivikram Kamat", + "url": "https://github.com/trivikr" + }, + { + "name": "Junxiao Shi", + "url": "https://github.com/yoursunny" + }, + { + "name": "Ilia Baryshnikov", + "url": "https://github.com/qwelias" + }, + { + "name": "ExE Boss", + "url": "https://github.com/ExE-Boss" + }, + { + "name": "Piotr Błażejewicz", + "url": "https://github.com/peterblazejewicz" + }, + { + "name": "Anna Henningsen", + "url": "https://github.com/addaleax" + }, + { + "name": "Victor Perin", + "url": "https://github.com/victorperin" + }, + { + "name": "Yongsheng Zhang", + "url": "https://github.com/ZYSzys" + }, + { + "name": "NodeJS Contributors", + "url": "https://github.com/NodeJS" + }, + { + "name": "Linus Unnebäck", + "url": "https://github.com/LinusU" + }, + { + "name": "wafuwafu13", + "url": "https://github.com/wafuwafu13" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "TypeScript definitions for Node.js", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", + "license": "MIT", + "main": "", + "name": "@types/node", + "repository": { + "type": "git", + "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "typeScriptVersion": "3.9", + "types": "index.d.ts", + "typesPublisherContentHash": "31d9626c2d3ccc7c4b4e0d91e1ed56f52997cd7409e001330de7b00feb84ad8b", + "version": "17.0.23" +} diff --git a/build/node_modules/@types/node/path.d.ts b/build/node_modules/@types/node/path.d.ts new file mode 100755 index 00000000..c19dce83 --- /dev/null +++ b/build/node_modules/@types/node/path.d.ts @@ -0,0 +1,180 @@ +declare module 'path/posix' { + import path = require('path'); + export = path; +} +declare module 'path/win32' { + import path = require('path'); + export = path; +} +/** + * The `path` module provides utilities for working with file and directory paths. + * It can be accessed using: + * + * ```js + * const path = require('path'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/path.js) + */ +declare module 'path' { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param p string path to normalize. + */ + normalize(p: string): string; + /** + * Join all arguments together and normalize the resulting path. + * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. + * + * @param paths paths to join. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param pathSegments string paths to join. Non-string arguments are ignored. + */ + resolve(...pathSegments: string[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * @param path path to test. + */ + isAbsolute(p: string): boolean; + /** + * Solve the relative path from {from} to {to}. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param p the path to evaluate. + */ + dirname(p: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param p the path to evaluate. + * @param ext optionally, an extension to remove from the result. + */ + basename(p: string, ext?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string + * + * @param p the path to evaluate. + */ + extname(p: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: string; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: string; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param pathString path to evaluate. + */ + parse(p: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathString path to evaluate. + */ + format(pP: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module 'node:path' { + import path = require('path'); + export = path; +} +declare module 'node:path/posix' { + import path = require('path/posix'); + export = path; +} +declare module 'node:path/win32' { + import path = require('path/win32'); + export = path; +} diff --git a/build/node_modules/@types/node/perf_hooks.d.ts b/build/node_modules/@types/node/perf_hooks.d.ts new file mode 100755 index 00000000..7d1e0b34 --- /dev/null +++ b/build/node_modules/@types/node/perf_hooks.d.ts @@ -0,0 +1,557 @@ +/** + * This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for + * Node.js-specific performance measurements. + * + * Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/): + * + * * [High Resolution Time](https://www.w3.org/TR/hr-time-2) + * * [Performance Timeline](https://w3c.github.io/performance-timeline/) + * * [User Timing](https://www.w3.org/TR/user-timing/) + * + * ```js + * const { PerformanceObserver, performance } = require('perf_hooks'); + * + * const obs = new PerformanceObserver((items) => { + * console.log(items.getEntries()[0].duration); + * performance.clearMarks(); + * }); + * obs.observe({ type: 'measure' }); + * performance.measure('Start to Now'); + * + * performance.mark('A'); + * doSomeLongRunningProcess(() => { + * performance.measure('A to Now', 'A'); + * + * performance.mark('B'); + * performance.measure('A to B', 'A', 'B'); + * }); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/perf_hooks.js) + */ +declare module 'perf_hooks' { + import { AsyncResource } from 'node:async_hooks'; + type EntryType = 'node' | 'mark' | 'measure' | 'gc' | 'function' | 'http2' | 'http'; + interface NodeGCPerformanceDetail { + /** + * When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind?: number | undefined; + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags?: number | undefined; + } + /** + * @since v8.5.0 + */ + class PerformanceEntry { + protected constructor(); + /** + * The total number of milliseconds elapsed for this entry. This value will not + * be meaningful for all Performance Entry types. + * @since v8.5.0 + */ + readonly duration: number; + /** + * The name of the performance entry. + * @since v8.5.0 + */ + readonly name: string; + /** + * The high resolution millisecond timestamp marking the starting time of the + * Performance Entry. + * @since v8.5.0 + */ + readonly startTime: number; + /** + * The type of the performance entry. It may be one of: + * + * * `'node'` (Node.js only) + * * `'mark'` (available on the Web) + * * `'measure'` (available on the Web) + * * `'gc'` (Node.js only) + * * `'function'` (Node.js only) + * * `'http2'` (Node.js only) + * * `'http'` (Node.js only) + * @since v8.5.0 + */ + readonly entryType: EntryType; + /** + * Additional detail specific to the `entryType`. + * @since v16.0.0 + */ + readonly detail?: NodeGCPerformanceDetail | unknown | undefined; // TODO: Narrow this based on entry type. + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Provides timing details for Node.js itself. The constructor of this class + * is not exposed to users. + * @since v8.5.0 + */ + class PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process + * completed bootstrapping. If bootstrapping has not yet finished, the property + * has the value of -1. + * @since v8.5.0 + */ + readonly bootstrapComplete: number; + /** + * The high resolution millisecond timestamp at which the Node.js environment was + * initialized. + * @since v8.5.0 + */ + readonly environment: number; + /** + * The high resolution millisecond timestamp of the amount of time the event loop + * has been idle within the event loop's event provider (e.g. `epoll_wait`). This + * does not take CPU usage into consideration. If the event loop has not yet + * started (e.g., in the first tick of the main script), the property has the + * value of 0. + * @since v14.10.0, v12.19.0 + */ + readonly idleTime: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * exited. If the event loop has not yet exited, the property has the value of -1\. + * It can only have a value of not -1 in a handler of the `'exit'` event. + * @since v8.5.0 + */ + readonly loopExit: number; + /** + * The high resolution millisecond timestamp at which the Node.js event loop + * started. If the event loop has not yet started (e.g., in the first tick of the + * main script), the property has the value of -1. + * @since v8.5.0 + */ + readonly loopStart: number; + /** + * The high resolution millisecond timestamp at which the V8 platform was + * initialized. + * @since v8.5.0 + */ + readonly v8Start: number; + } + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + /** + * @param util1 The result of a previous call to eventLoopUtilization() + * @param util2 The result of a previous call to eventLoopUtilization() prior to util1 + */ + type EventLoopUtilityFunction = (util1?: EventLoopUtilization, util2?: EventLoopUtilization) => EventLoopUtilization; + interface MarkOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * An optional timestamp to be used as the mark time. + * @default `performance.now()`. + */ + startTime?: number | undefined; + } + interface MeasureOptions { + /** + * Additional optional detail to include with the mark. + */ + detail?: unknown | undefined; + /** + * Duration between start and end times. + */ + duration?: number | undefined; + /** + * Timestamp to be used as the end time, or a string identifying a previously recorded mark. + */ + end?: number | string | undefined; + /** + * Timestamp to be used as the start time, or a string identifying a previously recorded mark. + */ + start?: number | string | undefined; + } + interface TimerifyOptions { + /** + * A histogram object created using + * `perf_hooks.createHistogram()` that will record runtime durations in + * nanoseconds. + */ + histogram?: RecordableHistogram | undefined; + } + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + */ + mark(name?: string, options?: MarkOptions): void; + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + */ + measure(name: string, startMark?: string, endMark?: string): void; + measure(name: string, options: MeasureOptions): void; + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T, options?: TimerifyOptions): T; + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + */ + eventLoopUtilization: EventLoopUtilityFunction; + } + interface PerformanceObserverEntryList { + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime`. + * + * ```js + * const { + * performance, + * PerformanceObserver + * } = require('perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntries()); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 81.465639, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 81.860064, + * * duration: 0 + * * } + * * ] + * + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntries(): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.name` is + * equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to`type`. + * + * ```js + * const { + * performance, + * PerformanceObserver + * } = require('perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByName('meow')); + * + * * [ + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 98.545991, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('nope')); // [] + * + * console.log(perfObserverList.getEntriesByName('test', 'mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 63.518931, + * * duration: 0 + * * } + * * ] + * + * console.log(perfObserverList.getEntriesByName('test', 'measure')); // [] + * observer.disconnect(); + * }); + * obs.observe({ entryTypes: ['mark', 'measure'] }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + /** + * Returns a list of `PerformanceEntry` objects in chronological order + * with respect to `performanceEntry.startTime` whose `performanceEntry.entryType`is equal to `type`. + * + * ```js + * const { + * performance, + * PerformanceObserver + * } = require('perf_hooks'); + * + * const obs = new PerformanceObserver((perfObserverList, observer) => { + * console.log(perfObserverList.getEntriesByType('mark')); + * + * * [ + * * PerformanceEntry { + * * name: 'test', + * * entryType: 'mark', + * * startTime: 55.897834, + * * duration: 0 + * * }, + * * PerformanceEntry { + * * name: 'meow', + * * entryType: 'mark', + * * startTime: 56.350146, + * * duration: 0 + * * } + * * ] + * + * observer.disconnect(); + * }); + * obs.observe({ type: 'mark' }); + * + * performance.mark('test'); + * performance.mark('meow'); + * ``` + * @since v8.5.0 + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + /** + * Disconnects the `PerformanceObserver` instance from all notifications. + * @since v8.5.0 + */ + disconnect(): void; + /** + * Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes`or `options.type`: + * + * ```js + * const { + * performance, + * PerformanceObserver + * } = require('perf_hooks'); + * + * const obs = new PerformanceObserver((list, observer) => { + * // Called three times synchronously. `list` contains one item. + * }); + * obs.observe({ type: 'mark' }); + * + * for (let n = 0; n < 3; n++) + * performance.mark(`test${n}`); + * ``` + * @since v8.5.0 + */ + observe( + options: + | { + entryTypes: ReadonlyArray; + buffered?: boolean | undefined; + } + | { + type: EntryType; + buffered?: boolean | undefined; + } + ): void; + } + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + const performance: Performance; + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + interface Histogram { + /** + * Returns a `Map` object detailing the accumulated percentile distribution. + * @since v11.10.0 + */ + readonly percentiles: Map; + /** + * The number of times the event loop delay exceeded the maximum 1 hour event + * loop delay threshold. + * @since v11.10.0 + */ + readonly exceeds: number; + /** + * The minimum recorded event loop delay. + * @since v11.10.0 + */ + readonly min: number; + /** + * The maximum recorded event loop delay. + * @since v11.10.0 + */ + readonly max: number; + /** + * The mean of the recorded event loop delays. + * @since v11.10.0 + */ + readonly mean: number; + /** + * The standard deviation of the recorded event loop delays. + * @since v11.10.0 + */ + readonly stddev: number; + /** + * Resets the collected histogram data. + * @since v11.10.0 + */ + reset(): void; + /** + * Returns the value at the given percentile. + * @since v11.10.0 + * @param percentile A percentile value in the range (0, 100]. + */ + percentile(percentile: number): number; + } + interface IntervalHistogram extends Histogram { + /** + * Enables the update interval timer. Returns `true` if the timer was + * started, `false` if it was already started. + * @since v11.10.0 + */ + enable(): boolean; + /** + * Disables the update interval timer. Returns `true` if the timer was + * stopped, `false` if it was already stopped. + * @since v11.10.0 + */ + disable(): boolean; + } + interface RecordableHistogram extends Histogram { + /** + * @since v15.9.0, v14.18.0 + * @param val The amount to record in the histogram. + */ + record(val: number | bigint): void; + /** + * Calculates the amount of time (in nanoseconds) that has passed since the + * previous call to `recordDelta()` and records that amount in the histogram. + * + * ## Examples + * @since v15.9.0, v14.18.0 + */ + recordDelta(): void; + } + /** + * _This property is an extension by Node.js. It is not available in Web browsers._ + * + * Creates an `IntervalHistogram` object that samples and reports the event loop + * delay over time. The delays will be reported in nanoseconds. + * + * Using a timer to detect approximate event loop delay works because the + * execution of timers is tied specifically to the lifecycle of the libuv + * event loop. That is, a delay in the loop will cause a delay in the execution + * of the timer, and those delays are specifically what this API is intended to + * detect. + * + * ```js + * const { monitorEventLoopDelay } = require('perf_hooks'); + * const h = monitorEventLoopDelay({ resolution: 20 }); + * h.enable(); + * // Do something. + * h.disable(); + * console.log(h.min); + * console.log(h.max); + * console.log(h.mean); + * console.log(h.stddev); + * console.log(h.percentiles); + * console.log(h.percentile(50)); + * console.log(h.percentile(99)); + * ``` + * @since v11.10.0 + */ + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; + interface CreateHistogramOptions { + /** + * The minimum recordable value. Must be an integer value greater than 0. + * @default 1 + */ + min?: number | bigint | undefined; + /** + * The maximum recordable value. Must be an integer value greater than min. + * @default Number.MAX_SAFE_INTEGER + */ + max?: number | bigint | undefined; + /** + * The number of accuracy digits. Must be a number between 1 and 5. + * @default 3 + */ + figures?: number | undefined; + } + /** + * Returns a `RecordableHistogram`. + * @since v15.9.0, v14.18.0 + */ + function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; +} +declare module 'node:perf_hooks' { + export * from 'perf_hooks'; +} diff --git a/build/node_modules/@types/node/process.d.ts b/build/node_modules/@types/node/process.d.ts new file mode 100755 index 00000000..24bbfba5 --- /dev/null +++ b/build/node_modules/@types/node/process.d.ts @@ -0,0 +1,1481 @@ +declare module 'process' { + import * as tty from 'node:tty'; + import { Worker } from 'node:worker_threads'; + global { + var process: NodeJS.Process; + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + interface MemoryUsageFn { + /** + * The `process.memoryUsage()` method iterate over each page to gather informations about memory + * usage which can be slow depending on the program memory allocations. + */ + (): MemoryUsage; + /** + * method returns an integer representing the Resident Set Size (RSS) in bytes. + */ + rss(): number; + } + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + arrayBuffers: number; + } + interface CpuUsage { + user: number; + system: number; + } + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd'; + type Signals = + | 'SIGABRT' + | 'SIGALRM' + | 'SIGBUS' + | 'SIGCHLD' + | 'SIGCONT' + | 'SIGFPE' + | 'SIGHUP' + | 'SIGILL' + | 'SIGINT' + | 'SIGIO' + | 'SIGIOT' + | 'SIGKILL' + | 'SIGPIPE' + | 'SIGPOLL' + | 'SIGPROF' + | 'SIGPWR' + | 'SIGQUIT' + | 'SIGSEGV' + | 'SIGSTKFLT' + | 'SIGSTOP' + | 'SIGSYS' + | 'SIGTERM' + | 'SIGTRAP' + | 'SIGTSTP' + | 'SIGTTIN' + | 'SIGTTOU' + | 'SIGUNUSED' + | 'SIGURG' + | 'SIGUSR1' + | 'SIGUSR2' + | 'SIGVTALRM' + | 'SIGWINCH' + | 'SIGXCPU' + | 'SIGXFSZ' + | 'SIGBREAK' + | 'SIGLOST' + | 'SIGINFO'; + type UncaughtExceptionOrigin = 'uncaughtException' | 'unhandledRejection'; + type MultipleResolveType = 'resolve' | 'reject'; + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + /** + * Most of the time the unhandledRejection will be an Error, but this should not be relied upon + * as *anything* can be thrown/rejected, it is therefore unsafe to assume the the value is an Error. + */ + type UnhandledRejectionListener = (reason: unknown, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: unknown, sendHandle: unknown) => void; + type SignalsListener = (signal: Signals) => void; + type MultipleResolveListener = (type: MultipleResolveType, promise: Promise, value: unknown) => void; + type WorkerListener = (worker: Worker) => void; + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + // Alias for compatibility + interface ProcessEnv extends Dict { + /** + * Can be used to change the default timezone at runtime + */ + TZ?: string; + } + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + interface ProcessReport { + /** + * Directory where the report is written. + * working directory of the Node.js process. + * @default '' indicating that reports are written to the current + */ + directory: string; + /** + * Filename where the report is written. + * The default value is the empty string. + * @default '' the output filename will be comprised of a timestamp, + * PID, and sequence number. + */ + filename: string; + /** + * Returns a JSON-formatted diagnostic report for the running process. + * The report's JavaScript stack trace is taken from err, if present. + */ + getReport(err?: Error): string; + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from err, if present. + * + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param error A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string): string; + writeReport(error?: Error): string; + writeReport(fileName?: string, err?: Error): string; + } + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + interface EmitWarningOptions { + /** + * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. + * + * @default 'Warning' + */ + type?: string | undefined; + /** + * A unique identifier for the warning instance being emitted. + */ + code?: string | undefined; + /** + * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. + * + * @default process.emitWarning + */ + ctor?: Function | undefined; + /** + * Additional text to include with the error. + */ + detail?: string | undefined; + } + interface ProcessConfig { + readonly target_defaults: { + readonly cflags: any[]; + readonly default_configuration: string; + readonly defines: string[]; + readonly include_dirs: string[]; + readonly libraries: string[]; + }; + readonly variables: { + readonly clang: number; + readonly host_arch: string; + readonly node_install_npm: boolean; + readonly node_install_waf: boolean; + readonly node_prefix: string; + readonly node_shared_openssl: boolean; + readonly node_shared_v8: boolean; + readonly node_shared_zlib: boolean; + readonly node_use_dtrace: boolean; + readonly node_use_etw: boolean; + readonly node_use_openssl: boolean; + readonly target_arch: string; + readonly v8_no_strict_aliasing: number; + readonly v8_use_snapshot: boolean; + readonly visibility: string; + }; + } + interface Process extends EventEmitter { + /** + * The `process.stdout` property returns a stream connected to`stdout` (fd `1`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `1` refers to a file, in which case it is + * a `Writable` stream. + * + * For example, to copy `process.stdin` to `process.stdout`: + * + * ```js + * import { stdin, stdout } from 'process'; + * + * stdin.pipe(stdout); + * ``` + * + * `process.stdout` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * The `process.stderr` property returns a stream connected to`stderr` (fd `2`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `2` refers to a file, in which case it is + * a `Writable` stream. + * + * `process.stderr` differs from other Node.js streams in important ways. See `note on process I/O` for more information. + */ + stderr: WriteStream & { + fd: 2; + }; + /** + * The `process.stdin` property returns a stream connected to`stdin` (fd `0`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `0` refers to a file, in which case it is + * a `Readable` stream. + * + * For details of how to read from `stdin` see `readable.read()`. + * + * As a `Duplex` stream, `process.stdin` can also be used in "old" mode that + * is compatible with scripts written for Node.js prior to v0.10\. + * For more information see `Stream compatibility`. + * + * In "old" streams mode the `stdin` stream is paused by default, so one + * must call `process.stdin.resume()` to read from it. Note also that calling`process.stdin.resume()` itself would switch stream to "old" mode. + */ + stdin: ReadStream & { + fd: 0; + }; + openStdin(): Socket; + /** + * The `process.argv` property returns an array containing the command-line + * arguments passed when the Node.js process was launched. The first element will + * be {@link execPath}. See `process.argv0` if access to the original value + * of `argv[0]` is needed. The second element will be the path to the JavaScript + * file being executed. The remaining elements will be any additional command-line + * arguments. + * + * For example, assuming the following script for `process-args.js`: + * + * ```js + * import { argv } from 'process'; + * + * // print process.argv + * argv.forEach((val, index) => { + * console.log(`${index}: ${val}`); + * }); + * ``` + * + * Launching the Node.js process as: + * + * ```console + * $ node process-args.js one two=three four + * ``` + * + * Would generate the output: + * + * ```text + * 0: /usr/local/bin/node + * 1: /Users/mjr/work/node/process-args.js + * 2: one + * 3: two=three + * 4: four + * ``` + * @since v0.1.27 + */ + argv: string[]; + /** + * The `process.argv0` property stores a read-only copy of the original value of`argv[0]` passed when Node.js starts. + * + * ```console + * $ bash -c 'exec -a customArgv0 ./node' + * > process.argv[0] + * '/Volumes/code/external/node/out/Release/node' + * > process.argv0 + * 'customArgv0' + * ``` + * @since v6.4.0 + */ + argv0: string; + /** + * The `process.execArgv` property returns the set of Node.js-specific command-line + * options passed when the Node.js process was launched. These options do not + * appear in the array returned by the {@link argv} property, and do not + * include the Node.js executable, the name of the script, or any options following + * the script name. These options are useful in order to spawn child processes with + * the same execution environment as the parent. + * + * ```console + * $ node --harmony script.js --version + * ``` + * + * Results in `process.execArgv`: + * + * ```js + * ['--harmony'] + * ``` + * + * And `process.argv`: + * + * ```js + * ['/usr/local/bin/node', 'script.js', '--version'] + * ``` + * + * Refer to `Worker constructor` for the detailed behavior of worker + * threads with this property. + * @since v0.7.7 + */ + execArgv: string[]; + /** + * The `process.execPath` property returns the absolute pathname of the executable + * that started the Node.js process. Symbolic links, if any, are resolved. + * + * ```js + * '/usr/local/bin/node' + * ``` + * @since v0.1.100 + */ + execPath: string; + /** + * The `process.abort()` method causes the Node.js process to exit immediately and + * generate a core file. + * + * This feature is not available in `Worker` threads. + * @since v0.7.0 + */ + abort(): never; + /** + * The `process.chdir()` method changes the current working directory of the + * Node.js process or throws an exception if doing so fails (for instance, if + * the specified `directory` does not exist). + * + * ```js + * import { chdir, cwd } from 'process'; + * + * console.log(`Starting directory: ${cwd()}`); + * try { + * chdir('/tmp'); + * console.log(`New directory: ${cwd()}`); + * } catch (err) { + * console.error(`chdir: ${err}`); + * } + * ``` + * + * This feature is not available in `Worker` threads. + * @since v0.1.17 + */ + chdir(directory: string): void; + /** + * The `process.cwd()` method returns the current working directory of the Node.js + * process. + * + * ```js + * import { cwd } from 'process'; + * + * console.log(`Current directory: ${cwd()}`); + * ``` + * @since v0.1.8 + */ + cwd(): string; + /** + * The port used by the Node.js debugger when enabled. + * + * ```js + * import process from 'process'; + * + * process.debugPort = 5858; + * ``` + * @since v0.7.2 + */ + debugPort: number; + /** + * The `process.emitWarning()` method can be used to emit custom or application + * specific process warnings. These can be listened for by adding a handler to the `'warning'` event. + * + * ```js + * import { emitWarning } from 'process'; + * + * // Emit a warning with a code and additional detail. + * emitWarning('Something happened!', { + * code: 'MY_WARNING', + * detail: 'This is some additional information' + * }); + * // Emits: + * // (node:56338) [MY_WARNING] Warning: Something happened! + * // This is some additional information + * ``` + * + * In this example, an `Error` object is generated internally by`process.emitWarning()` and passed through to the `'warning'` handler. + * + * ```js + * import process from 'process'; + * + * process.on('warning', (warning) => { + * console.warn(warning.name); // 'Warning' + * console.warn(warning.message); // 'Something happened!' + * console.warn(warning.code); // 'MY_WARNING' + * console.warn(warning.stack); // Stack trace + * console.warn(warning.detail); // 'This is some additional information' + * }); + * ``` + * + * If `warning` is passed as an `Error` object, the `options` argument is ignored. + * @since v8.0.0 + * @param warning The warning to emit. + */ + emitWarning(warning: string | Error, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; + emitWarning(warning: string | Error, options?: EmitWarningOptions): void; + /** + * The `process.env` property returns an object containing the user environment. + * See [`environ(7)`](http://man7.org/linux/man-pages/man7/environ.7.html). + * + * An example of this object looks like: + * + * ```js + * { + * TERM: 'xterm-256color', + * SHELL: '/usr/local/bin/bash', + * USER: 'maciej', + * PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', + * PWD: '/Users/maciej', + * EDITOR: 'vim', + * SHLVL: '1', + * HOME: '/Users/maciej', + * LOGNAME: 'maciej', + * _: '/usr/local/bin/node' + * } + * ``` + * + * It is possible to modify this object, but such modifications will not be + * reflected outside the Node.js process, or (unless explicitly requested) + * to other `Worker` threads. + * In other words, the following example would not work: + * + * ```console + * $ node -e 'process.env.foo = "bar"' && echo $foo + * ``` + * + * While the following will: + * + * ```js + * import { env } from 'process'; + * + * env.foo = 'bar'; + * console.log(env.foo); + * ``` + * + * Assigning a property on `process.env` will implicitly convert the value + * to a string. **This behavior is deprecated.** Future versions of Node.js may + * throw an error when the value is not a string, number, or boolean. + * + * ```js + * import { env } from 'process'; + * + * env.test = null; + * console.log(env.test); + * // => 'null' + * env.test = undefined; + * console.log(env.test); + * // => 'undefined' + * ``` + * + * Use `delete` to delete a property from `process.env`. + * + * ```js + * import { env } from 'process'; + * + * env.TEST = 1; + * delete env.TEST; + * console.log(env.TEST); + * // => undefined + * ``` + * + * On Windows operating systems, environment variables are case-insensitive. + * + * ```js + * import { env } from 'process'; + * + * env.TEST = 1; + * console.log(env.test); + * // => 1 + * ``` + * + * Unless explicitly specified when creating a `Worker` instance, + * each `Worker` thread has its own copy of `process.env`, based on its + * parent thread’s `process.env`, or whatever was specified as the `env` option + * to the `Worker` constructor. Changes to `process.env` will not be visible + * across `Worker` threads, and only the main thread can make changes that + * are visible to the operating system or to native add-ons. + * @since v0.1.27 + */ + env: ProcessEnv; + /** + * The `process.exit()` method instructs Node.js to terminate the process + * synchronously with an exit status of `code`. If `code` is omitted, exit uses + * either the 'success' code `0` or the value of `process.exitCode` if it has been + * set. Node.js will not terminate until all the `'exit'` event listeners are + * called. + * + * To exit with a 'failure' code: + * + * ```js + * import { exit } from 'process'; + * + * exit(1); + * ``` + * + * The shell that executed Node.js should see the exit code as `1`. + * + * Calling `process.exit()` will force the process to exit as quickly as possible + * even if there are still asynchronous operations pending that have not yet + * completed fully, including I/O operations to `process.stdout` and`process.stderr`. + * + * In most situations, it is not actually necessary to call `process.exit()`explicitly. The Node.js process will exit on its own _if there is no additional_ + * _work pending_ in the event loop. The `process.exitCode` property can be set to + * tell the process which exit code to use when the process exits gracefully. + * + * For instance, the following example illustrates a _misuse_ of the`process.exit()` method that could lead to data printed to stdout being + * truncated and lost: + * + * ```js + * import { exit } from 'process'; + * + * // This is an example of what *not* to do: + * if (someConditionNotMet()) { + * printUsageToStdout(); + * exit(1); + * } + * ``` + * + * The reason this is problematic is because writes to `process.stdout` in Node.js + * are sometimes _asynchronous_ and may occur over multiple ticks of the Node.js + * event loop. Calling `process.exit()`, however, forces the process to exit_before_ those additional writes to `stdout` can be performed. + * + * Rather than calling `process.exit()` directly, the code _should_ set the`process.exitCode` and allow the process to exit naturally by avoiding + * scheduling any additional work for the event loop: + * + * ```js + * import process from 'process'; + * + * // How to properly set the exit code while letting + * // the process exit gracefully. + * if (someConditionNotMet()) { + * printUsageToStdout(); + * process.exitCode = 1; + * } + * ``` + * + * If it is necessary to terminate the Node.js process due to an error condition, + * throwing an _uncaught_ error and allowing the process to terminate accordingly + * is safer than calling `process.exit()`. + * + * In `Worker` threads, this function stops the current thread rather + * than the current process. + * @since v0.1.13 + * @param [code=0] The exit code. + */ + exit(code?: number): never; + /** + * A number which will be the process exit code, when the process either + * exits gracefully, or is exited via {@link exit} without specifying + * a code. + * + * Specifying a code to {@link exit} will override any + * previous setting of `process.exitCode`. + * @since v0.11.8 + */ + exitCode?: number | undefined; + /** + * The `process.getgid()` method returns the numerical group identity of the + * process. (See [`getgid(2)`](http://man7.org/linux/man-pages/man2/getgid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getgid) { + * console.log(`Current gid: ${process.getgid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.31 + */ + getgid(): number; + /** + * The `process.setgid()` method sets the group identity of the process. (See [`setgid(2)`](http://man7.org/linux/man-pages/man2/setgid.2.html).) The `id` can be passed as either a + * numeric ID or a group name + * string. If a group name is specified, this method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getgid && process.setgid) { + * console.log(`Current gid: ${process.getgid()}`); + * try { + * process.setgid(501); + * console.log(`New gid: ${process.getgid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.31 + * @param id The group name or ID + */ + setgid(id: number | string): void; + /** + * The `process.getuid()` method returns the numeric user identity of the process. + * (See [`getuid(2)`](http://man7.org/linux/man-pages/man2/getuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getuid) { + * console.log(`Current uid: ${process.getuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.1.28 + */ + getuid(): number; + /** + * The `process.setuid(id)` method sets the user identity of the process. (See [`setuid(2)`](http://man7.org/linux/man-pages/man2/setuid.2.html).) The `id` can be passed as either a + * numeric ID or a username string. + * If a username is specified, the method blocks while resolving the associated + * numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getuid && process.setuid) { + * console.log(`Current uid: ${process.getuid()}`); + * try { + * process.setuid(501); + * console.log(`New uid: ${process.getuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.1.28 + */ + setuid(id: number | string): void; + /** + * The `process.geteuid()` method returns the numerical effective user identity of + * the process. (See [`geteuid(2)`](http://man7.org/linux/man-pages/man2/geteuid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.geteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + geteuid(): number; + /** + * The `process.seteuid()` method sets the effective user identity of the process. + * (See [`seteuid(2)`](http://man7.org/linux/man-pages/man2/seteuid.2.html).) The `id` can be passed as either a numeric ID or a username + * string. If a username is specified, the method blocks while resolving the + * associated numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.geteuid && process.seteuid) { + * console.log(`Current uid: ${process.geteuid()}`); + * try { + * process.seteuid(501); + * console.log(`New uid: ${process.geteuid()}`); + * } catch (err) { + * console.log(`Failed to set uid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A user name or ID + */ + seteuid(id: number | string): void; + /** + * The `process.getegid()` method returns the numerical effective group identity + * of the Node.js process. (See [`getegid(2)`](http://man7.org/linux/man-pages/man2/getegid.2.html).) + * + * ```js + * import process from 'process'; + * + * if (process.getegid) { + * console.log(`Current gid: ${process.getegid()}`); + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v2.0.0 + */ + getegid(): number; + /** + * The `process.setegid()` method sets the effective group identity of the process. + * (See [`setegid(2)`](http://man7.org/linux/man-pages/man2/setegid.2.html).) The `id` can be passed as either a numeric ID or a group + * name string. If a group name is specified, this method blocks while resolving + * the associated a numeric ID. + * + * ```js + * import process from 'process'; + * + * if (process.getegid && process.setegid) { + * console.log(`Current gid: ${process.getegid()}`); + * try { + * process.setegid(501); + * console.log(`New gid: ${process.getegid()}`); + * } catch (err) { + * console.log(`Failed to set gid: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v2.0.0 + * @param id A group name or ID + */ + setegid(id: number | string): void; + /** + * The `process.getgroups()` method returns an array with the supplementary group + * IDs. POSIX leaves it unspecified if the effective group ID is included but + * Node.js ensures it always is. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups) { + * console.log(process.getgroups()); // [ 16, 21, 297 ] + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * @since v0.9.4 + */ + getgroups(): number[]; + /** + * The `process.setgroups()` method sets the supplementary group IDs for the + * Node.js process. This is a privileged operation that requires the Node.js + * process to have `root` or the `CAP_SETGID` capability. + * + * The `groups` array can contain numeric group IDs, group names, or both. + * + * ```js + * import process from 'process'; + * + * if (process.getgroups && process.setgroups) { + * try { + * process.setgroups([501]); + * console.log(process.getgroups()); // new groups + * } catch (err) { + * console.log(`Failed to set groups: ${err}`); + * } + * } + * ``` + * + * This function is only available on POSIX platforms (i.e. not Windows or + * Android). + * This feature is not available in `Worker` threads. + * @since v0.9.4 + */ + setgroups(groups: ReadonlyArray): void; + /** + * The `process.setUncaughtExceptionCaptureCallback()` function sets a function + * that will be invoked when an uncaught exception occurs, which will receive the + * exception value itself as its first argument. + * + * If such a function is set, the `'uncaughtException'` event will + * not be emitted. If `--abort-on-uncaught-exception` was passed from the + * command line or set through `v8.setFlagsFromString()`, the process will + * not abort. Actions configured to take place on exceptions such as report + * generations will be affected too + * + * To unset the capture function,`process.setUncaughtExceptionCaptureCallback(null)` may be used. Calling this + * method with a non-`null` argument while another capture function is set will + * throw an error. + * + * Using this function is mutually exclusive with using the deprecated `domain` built-in module. + * @since v9.3.0 + */ + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + /** + * Indicates whether a callback has been set using {@link setUncaughtExceptionCaptureCallback}. + * @since v9.3.0 + */ + hasUncaughtExceptionCaptureCallback(): boolean; + /** + * The `process.version` property contains the Node.js version string. + * + * ```js + * import { version } from 'process'; + * + * console.log(`Version: ${version}`); + * // Version: v14.8.0 + * ``` + * + * To get the version string without the prepended _v_, use`process.versions.node`. + * @since v0.1.3 + */ + readonly version: string; + /** + * The `process.versions` property returns an object listing the version strings of + * Node.js and its dependencies. `process.versions.modules` indicates the current + * ABI version, which is increased whenever a C++ API changes. Node.js will refuse + * to load modules that were compiled against a different module ABI version. + * + * ```js + * import { versions } from 'process'; + * + * console.log(versions); + * ``` + * + * Will generate an object similar to: + * + * ```console + * { node: '11.13.0', + * v8: '7.0.276.38-node.18', + * uv: '1.27.0', + * zlib: '1.2.11', + * brotli: '1.0.7', + * ares: '1.15.0', + * modules: '67', + * nghttp2: '1.34.0', + * napi: '4', + * llhttp: '1.1.1', + * openssl: '1.1.1b', + * cldr: '34.0', + * icu: '63.1', + * tz: '2018e', + * unicode: '11.0' } + * ``` + * @since v0.2.0 + */ + readonly versions: ProcessVersions; + /** + * The `process.config` property returns an `Object` containing the JavaScript + * representation of the configure options used to compile the current Node.js + * executable. This is the same as the `config.gypi` file that was produced when + * running the `./configure` script. + * + * An example of the possible output looks like: + * + * ```js + * { + * target_defaults: + * { cflags: [], + * default_configuration: 'Release', + * defines: [], + * include_dirs: [], + * libraries: [] }, + * variables: + * { + * host_arch: 'x64', + * napi_build_version: 5, + * node_install_npm: 'true', + * node_prefix: '', + * node_shared_cares: 'false', + * node_shared_http_parser: 'false', + * node_shared_libuv: 'false', + * node_shared_zlib: 'false', + * node_use_dtrace: 'false', + * node_use_openssl: 'true', + * node_shared_openssl: 'false', + * strict_aliasing: 'true', + * target_arch: 'x64', + * v8_use_snapshot: 1 + * } + * } + * ``` + * + * The `process.config` property is **not** read-only and there are existing + * modules in the ecosystem that are known to extend, modify, or entirely replace + * the value of `process.config`. + * + * Modifying the `process.config` property, or any child-property of the`process.config` object has been deprecated. The `process.config` will be made + * read-only in a future release. + * @since v0.7.7 + */ + readonly config: ProcessConfig; + /** + * The `process.kill()` method sends the `signal` to the process identified by`pid`. + * + * Signal names are strings such as `'SIGINT'` or `'SIGHUP'`. See `Signal Events` and [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for more information. + * + * This method will throw an error if the target `pid` does not exist. As a special + * case, a signal of `0` can be used to test for the existence of a process. + * Windows platforms will throw an error if the `pid` is used to kill a process + * group. + * + * Even though the name of this function is `process.kill()`, it is really just a + * signal sender, like the `kill` system call. The signal sent may do something + * other than kill the target process. + * + * ```js + * import process, { kill } from 'process'; + * + * process.on('SIGHUP', () => { + * console.log('Got SIGHUP signal.'); + * }); + * + * setTimeout(() => { + * console.log('Exiting.'); + * process.exit(0); + * }, 100); + * + * kill(process.pid, 'SIGHUP'); + * ``` + * + * When `SIGUSR1` is received by a Node.js process, Node.js will start the + * debugger. See `Signal Events`. + * @since v0.0.6 + * @param pid A process ID + * @param [signal='SIGTERM'] The signal to send, either as a string or number. + */ + kill(pid: number, signal?: string | number): true; + /** + * The `process.pid` property returns the PID of the process. + * + * ```js + * import { pid } from 'process'; + * + * console.log(`This process is pid ${pid}`); + * ``` + * @since v0.1.15 + */ + readonly pid: number; + /** + * The `process.ppid` property returns the PID of the parent of the + * current process. + * + * ```js + * import { ppid } from 'process'; + * + * console.log(`The parent process is pid ${ppid}`); + * ``` + * @since v9.2.0, v8.10.0, v6.13.0 + */ + readonly ppid: number; + /** + * The `process.title` property returns the current process title (i.e. returns + * the current value of `ps`). Assigning a new value to `process.title` modifies + * the current value of `ps`. + * + * When a new value is assigned, different platforms will impose different maximum + * length restrictions on the title. Usually such restrictions are quite limited. + * For instance, on Linux and macOS, `process.title` is limited to the size of the + * binary name plus the length of the command-line arguments because setting the`process.title` overwrites the `argv` memory of the process. Node.js v0.8 + * allowed for longer process title strings by also overwriting the `environ`memory but that was potentially insecure and confusing in some (rather obscure) + * cases. + * + * Assigning a value to `process.title` might not result in an accurate label + * within process manager applications such as macOS Activity Monitor or Windows + * Services Manager. + * @since v0.1.104 + */ + title: string; + /** + * The operating system CPU architecture for which the Node.js binary was compiled. + * Possible values are: `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,`'mipsel'`, `'ppc'`,`'ppc64'`, `'s390'`, `'s390x'`, `'x32'`, and `'x64'`. + * + * ```js + * import { arch } from 'process'; + * + * console.log(`This processor architecture is ${arch}`); + * ``` + * @since v0.5.0 + */ + readonly arch: string; + /** + * The `process.platform` property returns a string identifying the operating + * system platform on which the Node.js process is running. + * + * Currently possible values are: + * + * * `'aix'` + * * `'darwin'` + * * `'freebsd'` + * * `'linux'` + * * `'openbsd'` + * * `'sunos'` + * * `'win32'` + * + * ```js + * import { platform } from 'process'; + * + * console.log(`This platform is ${platform}`); + * ``` + * + * The value `'android'` may also be returned if the Node.js is built on the + * Android operating system. However, Android support in Node.js [is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). + * @since v0.1.16 + */ + readonly platform: Platform; + /** + * The `process.mainModule` property provides an alternative way of retrieving `require.main`. The difference is that if the main module changes at + * runtime, `require.main` may still refer to the original main module in + * modules that were required before the change occurred. Generally, it's + * safe to assume that the two refer to the same module. + * + * As with `require.main`, `process.mainModule` will be `undefined` if there + * is no entry script. + * @since v0.1.17 + * @deprecated Since v14.0.0 - Use `main` instead. + */ + mainModule?: Module | undefined; + memoryUsage: MemoryUsageFn; + /** + * The `process.cpuUsage()` method returns the user and system CPU time usage of + * the current process, in an object with properties `user` and `system`, whose + * values are microsecond values (millionth of a second). These values measure time + * spent in user and system code respectively, and may end up being greater than + * actual elapsed time if multiple CPU cores are performing work for this process. + * + * The result of a previous call to `process.cpuUsage()` can be passed as the + * argument to the function, to get a diff reading. + * + * ```js + * import { cpuUsage } from 'process'; + * + * const startUsage = cpuUsage(); + * // { user: 38579, system: 6986 } + * + * // spin the CPU for 500 milliseconds + * const now = Date.now(); + * while (Date.now() - now < 500); + * + * console.log(cpuUsage(startUsage)); + * // { user: 514883, system: 11226 } + * ``` + * @since v6.1.0 + * @param previousValue A previous return value from calling `process.cpuUsage()` + */ + cpuUsage(previousValue?: CpuUsage): CpuUsage; + /** + * `process.nextTick()` adds `callback` to the "next tick queue". This queue is + * fully drained after the current operation on the JavaScript stack runs to + * completion and before the event loop is allowed to continue. It's possible to + * create an infinite loop if one were to recursively call `process.nextTick()`. + * See the [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick) guide for more background. + * + * ```js + * import { nextTick } from 'process'; + * + * console.log('start'); + * nextTick(() => { + * console.log('nextTick callback'); + * }); + * console.log('scheduled'); + * // Output: + * // start + * // scheduled + * // nextTick callback + * ``` + * + * This is important when developing APIs in order to give users the opportunity + * to assign event handlers _after_ an object has been constructed but before any + * I/O has occurred: + * + * ```js + * import { nextTick } from 'process'; + * + * function MyThing(options) { + * this.setupOptions(options); + * + * nextTick(() => { + * this.startDoingStuff(); + * }); + * } + * + * const thing = new MyThing(); + * thing.getReadyForStuff(); + * + * // thing.startDoingStuff() gets called now, not before. + * ``` + * + * It is very important for APIs to be either 100% synchronous or 100% + * asynchronous. Consider this example: + * + * ```js + * // WARNING! DO NOT USE! BAD UNSAFE HAZARD! + * function maybeSync(arg, cb) { + * if (arg) { + * cb(); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * + * This API is hazardous because in the following case: + * + * ```js + * const maybeTrue = Math.random() > 0.5; + * + * maybeSync(maybeTrue, () => { + * foo(); + * }); + * + * bar(); + * ``` + * + * It is not clear whether `foo()` or `bar()` will be called first. + * + * The following approach is much better: + * + * ```js + * import { nextTick } from 'process'; + * + * function definitelyAsync(arg, cb) { + * if (arg) { + * nextTick(cb); + * return; + * } + * + * fs.stat('file', cb); + * } + * ``` + * @since v0.1.26 + * @param args Additional arguments to pass when invoking the `callback` + */ + nextTick(callback: Function, ...args: any[]): void; + /** + * The `process.release` property returns an `Object` containing metadata related + * to the current release, including URLs for the source tarball and headers-only + * tarball. + * + * `process.release` contains the following properties: + * + * ```js + * { + * name: 'node', + * lts: 'Erbium', + * sourceUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1.tar.gz', + * headersUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1-headers.tar.gz', + * libUrl: 'https://nodejs.org/download/release/v12.18.1/win-x64/node.lib' + * } + * ``` + * + * In custom builds from non-release versions of the source tree, only the`name` property may be present. The additional properties should not be + * relied upon to exist. + * @since v3.0.0 + */ + readonly release: ProcessRelease; + features: { + inspector: boolean; + debug: boolean; + uv: boolean; + ipv6: boolean; + tls_alpn: boolean; + tls_sni: boolean; + tls_ocsp: boolean; + tls: boolean; + }; + /** + * `process.umask()` returns the Node.js process's file mode creation mask. Child + * processes inherit the mask from the parent process. + * @since v0.1.19 + * @deprecated Calling `process.umask()` with no argument causes the process-wide umask to be written twice. This introduces a race condition between threads, and is a potential * + * security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + /** + * The `process.uptime()` method returns the number of seconds the current Node.js + * process has been running. + * + * The return value includes fractions of a second. Use `Math.floor()` to get whole + * seconds. + * @since v0.5.0 + */ + uptime(): number; + hrtime: HRTime; + /** + * If Node.js is spawned with an IPC channel, the `process.send()` method can be + * used to send messages to the parent process. Messages will be received as a `'message'` event on the parent's `ChildProcess` object. + * + * If Node.js was not spawned with an IPC channel, `process.send` will be`undefined`. + * + * The message goes through serialization and parsing. The resulting message might + * not be the same as what is originally sent. + * @since v0.5.9 + * @param options used to parameterize the sending of certain types of handles.`options` supports the following properties: + */ + send?( + message: any, + sendHandle?: any, + options?: { + swallowErrors?: boolean | undefined; + }, + callback?: (error: Error | null) => void + ): boolean; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.disconnect()` method will close the + * IPC channel to the parent process, allowing the child process to exit gracefully + * once there are no other connections keeping it alive. + * + * The effect of calling `process.disconnect()` is the same as calling `ChildProcess.disconnect()` from the parent process. + * + * If the Node.js process was not spawned with an IPC channel,`process.disconnect()` will be `undefined`. + * @since v0.7.2 + */ + disconnect(): void; + /** + * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.connected` property will return`true` so long as the IPC + * channel is connected and will return `false` after`process.disconnect()` is called. + * + * Once `process.connected` is `false`, it is no longer possible to send messages + * over the IPC channel using `process.send()`. + * @since v0.7.2 + */ + connected: boolean; + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the `NODE_OPTIONS` environment variable. + * + * `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides`Set.prototype.has` to recognize several different possible flag + * representations. `process.allowedNodeEnvironmentFlags.has()` will + * return `true` in the following cases: + * + * * Flags may omit leading single (`-`) or double (`--`) dashes; e.g.,`inspect-brk` for `--inspect-brk`, or `r` for `-r`. + * * Flags passed through to V8 (as listed in `--v8-options`) may replace + * one or more _non-leading_ dashes for an underscore, or vice-versa; + * e.g., `--perf_basic_prof`, `--perf-basic-prof`, `--perf_basic-prof`, + * etc. + * * Flags may contain one or more equals (`=`) characters; all + * characters after and including the first equals will be ignored; + * e.g., `--stack-trace-limit=100`. + * * Flags _must_ be allowable within `NODE_OPTIONS`. + * + * When iterating over `process.allowedNodeEnvironmentFlags`, flags will + * appear only _once_; each will begin with one or more dashes. Flags + * passed through to V8 will contain underscores instead of non-leading + * dashes: + * + * ```js + * import { allowedNodeEnvironmentFlags } from 'process'; + * + * allowedNodeEnvironmentFlags.forEach((flag) => { + * // -r + * // --inspect-brk + * // --abort_on_uncaught_exception + * // ... + * }); + * ``` + * + * The methods `add()`, `clear()`, and `delete()` of`process.allowedNodeEnvironmentFlags` do nothing, and will fail + * silently. + * + * If Node.js was compiled _without_ `NODE_OPTIONS` support (shown in {@link config}), `process.allowedNodeEnvironmentFlags` will + * contain what _would have_ been allowable. + * @since v10.10.0 + */ + allowedNodeEnvironmentFlags: ReadonlySet; + /** + * `process.report` is an object whose methods are used to generate diagnostic + * reports for the current process. Additional documentation is available in the `report documentation`. + * @since v11.8.0 + */ + report?: ProcessReport | undefined; + /** + * ```js + * import { resourceUsage } from 'process'; + * + * console.log(resourceUsage()); + * /* + * Will output: + * { + * userCPUTime: 82872, + * systemCPUTime: 4143, + * maxRSS: 33164, + * sharedMemorySize: 0, + * unsharedDataSize: 0, + * unsharedStackSize: 0, + * minorPageFault: 2469, + * majorPageFault: 0, + * swappedOut: 0, + * fsRead: 0, + * fsWrite: 8, + * ipcSent: 0, + * ipcReceived: 0, + * signalsCount: 0, + * voluntaryContextSwitches: 79, + * involuntaryContextSwitches: 1 + * } + * + * ``` + * @since v12.6.0 + * @return the resource usage for the current process. All of these values come from the `uv_getrusage` call which returns a [`uv_rusage_t` struct][uv_rusage_t]. + */ + resourceUsage(): ResourceUsage; + /** + * The `process.traceDeprecation` property indicates whether the`--trace-deprecation` flag is set on the current Node.js process. See the + * documentation for the `'warning' event` and the `emitWarning() method` for more information about this + * flag's behavior. + * @since v0.8.0 + */ + traceDeprecation: boolean; + /* EventEmitter */ + addListener(event: 'beforeExit', listener: BeforeExitListener): this; + addListener(event: 'disconnect', listener: DisconnectListener): this; + addListener(event: 'exit', listener: ExitListener): this; + addListener(event: 'rejectionHandled', listener: RejectionHandledListener): this; + addListener(event: 'uncaughtException', listener: UncaughtExceptionListener): this; + addListener(event: 'uncaughtExceptionMonitor', listener: UncaughtExceptionListener): this; + addListener(event: 'unhandledRejection', listener: UnhandledRejectionListener): this; + addListener(event: 'warning', listener: WarningListener): this; + addListener(event: 'message', listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: 'multipleResolves', listener: MultipleResolveListener): this; + addListener(event: 'worker', listener: WorkerListener): this; + emit(event: 'beforeExit', code: number): boolean; + emit(event: 'disconnect'): boolean; + emit(event: 'exit', code: number): boolean; + emit(event: 'rejectionHandled', promise: Promise): boolean; + emit(event: 'uncaughtException', error: Error): boolean; + emit(event: 'uncaughtExceptionMonitor', error: Error): boolean; + emit(event: 'unhandledRejection', reason: unknown, promise: Promise): boolean; + emit(event: 'warning', warning: Error): boolean; + emit(event: 'message', message: unknown, sendHandle: unknown): this; + emit(event: Signals, signal?: Signals): boolean; + emit(event: 'multipleResolves', type: MultipleResolveType, promise: Promise, value: unknown): this; + emit(event: 'worker', listener: WorkerListener): this; + on(event: 'beforeExit', listener: BeforeExitListener): this; + on(event: 'disconnect', listener: DisconnectListener): this; + on(event: 'exit', listener: ExitListener): this; + on(event: 'rejectionHandled', listener: RejectionHandledListener): this; + on(event: 'uncaughtException', listener: UncaughtExceptionListener): this; + on(event: 'uncaughtExceptionMonitor', listener: UncaughtExceptionListener): this; + on(event: 'unhandledRejection', listener: UnhandledRejectionListener): this; + on(event: 'warning', listener: WarningListener): this; + on(event: 'message', listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: 'multipleResolves', listener: MultipleResolveListener): this; + on(event: 'worker', listener: WorkerListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'beforeExit', listener: BeforeExitListener): this; + once(event: 'disconnect', listener: DisconnectListener): this; + once(event: 'exit', listener: ExitListener): this; + once(event: 'rejectionHandled', listener: RejectionHandledListener): this; + once(event: 'uncaughtException', listener: UncaughtExceptionListener): this; + once(event: 'uncaughtExceptionMonitor', listener: UncaughtExceptionListener): this; + once(event: 'unhandledRejection', listener: UnhandledRejectionListener): this; + once(event: 'warning', listener: WarningListener): this; + once(event: 'message', listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: 'multipleResolves', listener: MultipleResolveListener): this; + once(event: 'worker', listener: WorkerListener): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'beforeExit', listener: BeforeExitListener): this; + prependListener(event: 'disconnect', listener: DisconnectListener): this; + prependListener(event: 'exit', listener: ExitListener): this; + prependListener(event: 'rejectionHandled', listener: RejectionHandledListener): this; + prependListener(event: 'uncaughtException', listener: UncaughtExceptionListener): this; + prependListener(event: 'uncaughtExceptionMonitor', listener: UncaughtExceptionListener): this; + prependListener(event: 'unhandledRejection', listener: UnhandledRejectionListener): this; + prependListener(event: 'warning', listener: WarningListener): this; + prependListener(event: 'message', listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: 'multipleResolves', listener: MultipleResolveListener): this; + prependListener(event: 'worker', listener: WorkerListener): this; + prependOnceListener(event: 'beforeExit', listener: BeforeExitListener): this; + prependOnceListener(event: 'disconnect', listener: DisconnectListener): this; + prependOnceListener(event: 'exit', listener: ExitListener): this; + prependOnceListener(event: 'rejectionHandled', listener: RejectionHandledListener): this; + prependOnceListener(event: 'uncaughtException', listener: UncaughtExceptionListener): this; + prependOnceListener(event: 'uncaughtExceptionMonitor', listener: UncaughtExceptionListener): this; + prependOnceListener(event: 'unhandledRejection', listener: UnhandledRejectionListener): this; + prependOnceListener(event: 'warning', listener: WarningListener): this; + prependOnceListener(event: 'message', listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: 'multipleResolves', listener: MultipleResolveListener): this; + prependOnceListener(event: 'worker', listener: WorkerListener): this; + listeners(event: 'beforeExit'): BeforeExitListener[]; + listeners(event: 'disconnect'): DisconnectListener[]; + listeners(event: 'exit'): ExitListener[]; + listeners(event: 'rejectionHandled'): RejectionHandledListener[]; + listeners(event: 'uncaughtException'): UncaughtExceptionListener[]; + listeners(event: 'uncaughtExceptionMonitor'): UncaughtExceptionListener[]; + listeners(event: 'unhandledRejection'): UnhandledRejectionListener[]; + listeners(event: 'warning'): WarningListener[]; + listeners(event: 'message'): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: 'multipleResolves'): MultipleResolveListener[]; + listeners(event: 'worker'): WorkerListener[]; + } + } + } + export = process; +} +declare module 'node:process' { + import process = require('process'); + export = process; +} diff --git a/build/node_modules/@types/node/punycode.d.ts b/build/node_modules/@types/node/punycode.d.ts new file mode 100755 index 00000000..81b3c636 --- /dev/null +++ b/build/node_modules/@types/node/punycode.d.ts @@ -0,0 +1,117 @@ +/** + * **The version of the punycode module bundled in Node.js is being deprecated.**In a future major version of Node.js this module will be removed. Users + * currently depending on the `punycode` module should switch to using the + * userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL + * encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. + * + * The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It + * can be accessed using: + * + * ```js + * const punycode = require('punycode'); + * ``` + * + * [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is + * primarily intended for use in Internationalized Domain Names. Because host + * names in URLs are limited to ASCII characters only, Domain Names that contain + * non-ASCII characters must be converted into ASCII using the Punycode scheme. + * For instance, the Japanese character that translates into the English word,`'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent + * to `'example.com'`) is represented by Punycode as the ASCII string`'xn--fsq.com'`. + * + * The `punycode` module provides a simple implementation of the Punycode standard. + * + * The `punycode` module is a third-party dependency used by Node.js and + * made available to developers as a convenience. Fixes or other modifications to + * the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project. + * @deprecated Since v7.0.0 - Deprecated + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/punycode.js) + */ +declare module 'punycode' { + /** + * The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only + * characters to the equivalent string of Unicode codepoints. + * + * ```js + * punycode.decode('maana-pta'); // 'mañana' + * punycode.decode('--dqo34k'); // '☃-⌘' + * ``` + * @since v0.5.1 + */ + function decode(string: string): string; + /** + * The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters. + * + * ```js + * punycode.encode('mañana'); // 'maana-pta' + * punycode.encode('☃-⌘'); // '--dqo34k' + * ``` + * @since v0.5.1 + */ + function encode(string: string): string; + /** + * The `punycode.toUnicode()` method converts a string representing a domain name + * containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be + * converted. + * + * ```js + * // decode domain names + * punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' + * punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' + * punycode.toUnicode('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toUnicode(domain: string): string; + /** + * The `punycode.toASCII()` method converts a Unicode string representing an + * Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the + * domain name will be converted. Calling `punycode.toASCII()` on a string that + * already only contains ASCII characters will have no effect. + * + * ```js + * // encode domain names + * punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' + * punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' + * punycode.toASCII('example.com'); // 'example.com' + * ``` + * @since v0.6.1 + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: ReadonlyArray): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module 'node:punycode' { + export * from 'punycode'; +} diff --git a/build/node_modules/@types/node/querystring.d.ts b/build/node_modules/@types/node/querystring.d.ts new file mode 100755 index 00000000..572828a8 --- /dev/null +++ b/build/node_modules/@types/node/querystring.d.ts @@ -0,0 +1,131 @@ +/** + * The `querystring` module provides utilities for parsing and formatting URL + * query strings. It can be accessed using: + * + * ```js + * const querystring = require('querystring'); + * ``` + * + * The `querystring` API is considered Legacy. While it is still maintained, + * new code should use the `URLSearchParams` API instead. + * @deprecated Legacy + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/querystring.js) + */ +declare module 'querystring' { + interface StringifyOptions { + encodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParseOptions { + maxKeys?: number | undefined; + decodeURIComponent?: ((str: string) => string) | undefined; + } + interface ParsedUrlQuery extends NodeJS.Dict {} + interface ParsedUrlQueryInput extends NodeJS.Dict | ReadonlyArray | ReadonlyArray | null> {} + /** + * The `querystring.stringify()` method produces a URL query string from a + * given `obj` by iterating through the object's "own properties". + * + * It serializes the following types of values passed in `obj`:[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) | + * [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | + * [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | + * [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | + * [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to + * empty strings. + * + * ```js + * querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); + * // Returns 'foo=bar&baz=qux&baz=quux&corge=' + * + * querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); + * // Returns 'foo:bar;baz:qux' + * ``` + * + * By default, characters requiring percent-encoding within the query string will + * be encoded as UTF-8\. If an alternative encoding is required, then an alternative`encodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkEncodeURIComponent function already exists, + * + * querystring.stringify({ w: '中文', foo: 'bar' }, null, null, + * { encodeURIComponent: gbkEncodeURIComponent }); + * ``` + * @since v0.1.25 + * @param obj The object to serialize into a URL query string + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + /** + * The `querystring.parse()` method parses a URL query string (`str`) into a + * collection of key and value pairs. + * + * For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: + * + * ```js + * { + * foo: 'bar', + * abc: ['xyz', '123'] + * } + * ``` + * + * The object returned by the `querystring.parse()` method _does not_prototypically inherit from the JavaScript `Object`. This means that typical`Object` methods such as `obj.toString()`, + * `obj.hasOwnProperty()`, and others + * are not defined and _will not work_. + * + * By default, percent-encoded characters within the query string will be assumed + * to use UTF-8 encoding. If an alternative character encoding is used, then an + * alternative `decodeURIComponent` option will need to be specified: + * + * ```js + * // Assuming gbkDecodeURIComponent function already exists... + * + * querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, + * { decodeURIComponent: gbkDecodeURIComponent }); + * ``` + * @since v0.1.25 + * @param str The URL query string to parse + * @param [sep='&'] The substring used to delimit key and value pairs in the query string. + * @param [eq='='] . The substring used to delimit keys and values in the query string. + */ + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + /** + * The `querystring.escape()` method performs URL percent-encoding on the given`str` in a manner that is optimized for the specific requirements of URL + * query strings. + * + * The `querystring.escape()` method is used by `querystring.stringify()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement percent-encoding implementation if + * necessary by assigning `querystring.escape` to an alternative function. + * @since v0.1.25 + */ + function escape(str: string): string; + /** + * The `querystring.unescape()` method performs decoding of URL percent-encoded + * characters on the given `str`. + * + * The `querystring.unescape()` method is used by `querystring.parse()` and is + * generally not expected to be used directly. It is exported primarily to allow + * application code to provide a replacement decoding implementation if + * necessary by assigning `querystring.unescape` to an alternative function. + * + * By default, the `querystring.unescape()` method will attempt to use the + * JavaScript built-in `decodeURIComponent()` method to decode. If that fails, + * a safer equivalent that does not throw on malformed URLs will be used. + * @since v0.1.25 + */ + function unescape(str: string): string; +} +declare module 'node:querystring' { + export * from 'querystring'; +} diff --git a/build/node_modules/@types/node/readline.d.ts b/build/node_modules/@types/node/readline.d.ts new file mode 100755 index 00000000..43ab1dbd --- /dev/null +++ b/build/node_modules/@types/node/readline.d.ts @@ -0,0 +1,650 @@ +/** + * The `readline` module provides an interface for reading data from a `Readable` stream (such as `process.stdin`) one line at a time. + * + * To use the promise-based APIs: + * + * ```js + * import * as readline from 'node:readline/promises'; + * ``` + * + * To use the callback and sync APIs: + * + * ```js + * import * as readline from 'node:readline'; + * ``` + * + * The following simple example illustrates the basic use of the `readline` module. + * + * ```js + * import * as readline from 'node:readline/promises'; + * import { stdin as input, stdout as output } from 'process'; + * + * const rl = readline.createInterface({ input, output }); + * + * const answer = await rl.question('What do you think of Node.js? '); + * + * console.log(`Thank you for your valuable feedback: ${answer}`); + * + * rl.close(); + * ``` + * + * Once this code is invoked, the Node.js application will not terminate until the`readline.Interface` is closed because the interface waits for data to be + * received on the `input` stream. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/readline.js) + */ +declare module 'readline' { + import { Abortable, EventEmitter } from 'node:events'; + interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + /** + * Instances of the `readline.Interface` class are constructed using the`readline.createInterface()` method. Every instance is associated with a + * single `input` `Readable` stream and a single `output` `Writable` stream. + * The `output` stream is used to print prompts for user input that arrives on, + * and is read from, the `input` stream. + * @since v0.1.104 + */ + class Interface extends EventEmitter { + readonly terminal: boolean; + /** + * The current input data being processed by node. + * + * This can be used when collecting input from a TTY stream to retrieve the + * current value that has been processed thus far, prior to the `line` event + * being emitted. Once the `line` event has been emitted, this property will + * be an empty string. + * + * Be aware that modifying the value during the instance runtime may have + * unintended consequences if `rl.cursor` is not also controlled. + * + * **If not using a TTY stream for input, use the `'line'` event.** + * + * One possible use case would be as follows: + * + * ```js + * const values = ['lorem ipsum', 'dolor sit amet']; + * const rl = readline.createInterface(process.stdin); + * const showResults = debounce(() => { + * console.log( + * '\n', + * values.filter((val) => val.startsWith(rl.line)).join(' ') + * ); + * }, 300); + * process.stdin.on('keypress', (c, k) => { + * showResults(); + * }); + * ``` + * @since v0.1.98 + */ + readonly line: string; + /** + * The cursor position relative to `rl.line`. + * + * This will track where the current cursor lands in the input string, when + * reading input from a TTY stream. The position of cursor determines the + * portion of the input string that will be modified as input is processed, + * as well as the column where the terminal caret will be rendered. + * @since v0.1.98 + */ + readonly cursor: number; + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(options: ReadLineOptions); + /** + * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. + * @since v15.3.0 + * @return the current prompt string + */ + getPrompt(): string; + /** + * The `rl.setPrompt()` method sets the prompt that will be written to `output`whenever `rl.prompt()` is called. + * @since v0.1.98 + */ + setPrompt(prompt: string): void; + /** + * The `rl.prompt()` method writes the `readline.Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new + * location at which to provide input. + * + * When called, `rl.prompt()` will resume the `input` stream if it has been + * paused. + * + * If the `readline.Interface` was created with `output` set to `null` or`undefined` the prompt is not written. + * @since v0.1.98 + * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. + */ + prompt(preserveCursor?: boolean): void; + /** + * The `rl.question()` method displays the `query` by writing it to the `output`, + * waits for user input to be provided on `input`, then invokes the `callback`function passing the provided input as the first argument. + * + * When called, `rl.question()` will resume the `input` stream if it has been + * paused. + * + * If the `readline.Interface` was created with `output` set to `null` or`undefined` the `query` is not written. + * + * The `callback` function passed to `rl.question()` does not follow the typical + * pattern of accepting an `Error` object or `null` as the first argument. + * The `callback` is called with the provided answer as the only argument. + * + * Example usage: + * + * ```js + * rl.question('What is your favorite food? ', (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * ``` + * + * Using an `AbortController` to cancel a question. + * + * ```js + * const ac = new AbortController(); + * const signal = ac.signal; + * + * rl.question('What is your favorite food? ', { signal }, (answer) => { + * console.log(`Oh, so your favorite food is ${answer}`); + * }); + * + * signal.addEventListener('abort', () => { + * console.log('The food question timed out'); + * }, { once: true }); + * + * setTimeout(() => ac.abort(), 10000); + * ``` + * + * If this method is invoked as it's util.promisify()ed version, it returns a + * Promise that fulfills with the answer. If the question is canceled using + * an `AbortController` it will reject with an `AbortError`. + * + * ```js + * const util = require('util'); + * const question = util.promisify(rl.question).bind(rl); + * + * async function questionExample() { + * try { + * const answer = await question('What is you favorite food? '); + * console.log(`Oh, so your favorite food is ${answer}`); + * } catch (err) { + * console.error('Question rejected', err); + * } + * } + * questionExample(); + * ``` + * @since v0.3.3 + * @param query A statement or query to write to `output`, prepended to the prompt. + * @param callback A callback function that is invoked with the user's input in response to the `query`. + */ + question(query: string, callback: (answer: string) => void): void; + question(query: string, options: Abortable, callback: (answer: string) => void): void; + /** + * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed + * later if necessary. + * + * Calling `rl.pause()` does not immediately pause other events (including`'line'`) from being emitted by the `readline.Interface` instance. + * @since v0.3.4 + */ + pause(): this; + /** + * The `rl.resume()` method resumes the `input` stream if it has been paused. + * @since v0.3.4 + */ + resume(): this; + /** + * The `rl.close()` method closes the `readline.Interface` instance and + * relinquishes control over the `input` and `output` streams. When called, + * the `'close'` event will be emitted. + * + * Calling `rl.close()` does not immediately stop other events (including `'line'`) + * from being emitted by the `readline.Interface` instance. + * @since v0.1.98 + */ + close(): void; + /** + * The `rl.write()` method will write either `data` or a key sequence identified + * by `key` to the `output`. The `key` argument is supported only if `output` is + * a `TTY` text terminal. See `TTY keybindings` for a list of key + * combinations. + * + * If `key` is specified, `data` is ignored. + * + * When called, `rl.write()` will resume the `input` stream if it has been + * paused. + * + * If the `readline.Interface` was created with `output` set to `null` or`undefined` the `data` and `key` are not written. + * + * ```js + * rl.write('Delete this!'); + * // Simulate Ctrl+U to delete the line written previously + * rl.write(null, { ctrl: true, name: 'u' }); + * ``` + * + * The `rl.write()` method will write the data to the `readline` `Interface`'s`input`_as if it were provided by the user_. + * @since v0.1.98 + */ + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + * @since v13.5.0, v12.16.0 + */ + getCursorPos(): CursorPos; + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + * 8. history + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'line', listener: (input: string) => void): this; + addListener(event: 'pause', listener: () => void): this; + addListener(event: 'resume', listener: () => void): this; + addListener(event: 'SIGCONT', listener: () => void): this; + addListener(event: 'SIGINT', listener: () => void): this; + addListener(event: 'SIGTSTP', listener: () => void): this; + addListener(event: 'history', listener: (history: string[]) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close'): boolean; + emit(event: 'line', input: string): boolean; + emit(event: 'pause'): boolean; + emit(event: 'resume'): boolean; + emit(event: 'SIGCONT'): boolean; + emit(event: 'SIGINT'): boolean; + emit(event: 'SIGTSTP'): boolean; + emit(event: 'history', history: string[]): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'line', listener: (input: string) => void): this; + on(event: 'pause', listener: () => void): this; + on(event: 'resume', listener: () => void): this; + on(event: 'SIGCONT', listener: () => void): this; + on(event: 'SIGINT', listener: () => void): this; + on(event: 'SIGTSTP', listener: () => void): this; + on(event: 'history', listener: (history: string[]) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'line', listener: (input: string) => void): this; + once(event: 'pause', listener: () => void): this; + once(event: 'resume', listener: () => void): this; + once(event: 'SIGCONT', listener: () => void): this; + once(event: 'SIGINT', listener: () => void): this; + once(event: 'SIGTSTP', listener: () => void): this; + once(event: 'history', listener: (history: string[]) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'line', listener: (input: string) => void): this; + prependListener(event: 'pause', listener: () => void): this; + prependListener(event: 'resume', listener: () => void): this; + prependListener(event: 'SIGCONT', listener: () => void): this; + prependListener(event: 'SIGINT', listener: () => void): this; + prependListener(event: 'SIGTSTP', listener: () => void): this; + prependListener(event: 'history', listener: (history: string[]) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'line', listener: (input: string) => void): this; + prependOnceListener(event: 'pause', listener: () => void): this; + prependOnceListener(event: 'resume', listener: () => void): this; + prependOnceListener(event: 'SIGCONT', listener: () => void): this; + prependOnceListener(event: 'SIGINT', listener: () => void): this; + prependOnceListener(event: 'SIGTSTP', listener: () => void): this; + prependOnceListener(event: 'history', listener: (history: string[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + type ReadLine = Interface; // type forwarded for backwards compatibility + type Completer = (line: string) => CompleterResult; + type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => void; + type CompleterResult = [string[], string]; + interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream | undefined; + completer?: Completer | AsyncCompleter | undefined; + terminal?: boolean | undefined; + /** + * Initial list of history lines. This option makes sense + * only if `terminal` is set to `true` by the user or by an internal `output` + * check, otherwise the history caching mechanism is not initialized at all. + * @default [] + */ + history?: string[] | undefined; + historySize?: number | undefined; + prompt?: string | undefined; + crlfDelay?: number | undefined; + /** + * If `true`, when a new input line added + * to the history list duplicates an older one, this removes the older line + * from the list. + * @default false + */ + removeHistoryDuplicates?: boolean | undefined; + escapeCodeTimeout?: number | undefined; + tabSize?: number | undefined; + } + /** + * The `readline.createInterface()` method creates a new `readline.Interface`instance. + * + * ```js + * const readline = require('readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout + * }); + * ``` + * + * Once the `readline.Interface` instance is created, the most common case is to + * listen for the `'line'` event: + * + * ```js + * rl.on('line', (line) => { + * console.log(`Received: ${line}`); + * }); + * ``` + * + * If `terminal` is `true` for this instance then the `output` stream will get + * the best compatibility if it defines an `output.columns` property and emits + * a `'resize'` event on the `output` if or when the columns ever change + * (`process.stdout` does this automatically when it is a TTY). + * + * When creating a `readline.Interface` using `stdin` as input, the program + * will not terminate until it receives `EOF` (Ctrl+D on + * Linux/macOS, Ctrl+Z followed by Return on + * Windows). + * If you want your application to exit without waiting for user input, you can `unref()` the standard input stream: + * + * ```js + * process.stdin.unref(); + * ``` + * @since v0.1.98 + */ + function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface; + function createInterface(options: ReadLineOptions): Interface; + /** + * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. + * + * Optionally, `interface` specifies a `readline.Interface` instance for which + * autocompletion is disabled when copy-pasted input is detected. + * + * If the `stream` is a `TTY`, then it must be in raw mode. + * + * This is automatically called by any readline instance on its `input` if the`input` is a terminal. Closing the `readline` instance does not stop + * the `input` from emitting `'keypress'` events. + * + * ```js + * readline.emitKeypressEvents(process.stdin); + * if (process.stdin.isTTY) + * process.stdin.setRawMode(true); + * ``` + * + * ## Example: Tiny CLI + * + * The following example illustrates the use of `readline.Interface` class to + * implement a small command-line interface: + * + * ```js + * const readline = require('readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * prompt: 'OHAI> ' + * }); + * + * rl.prompt(); + * + * rl.on('line', (line) => { + * switch (line.trim()) { + * case 'hello': + * console.log('world!'); + * break; + * default: + * console.log(`Say what? I might have heard '${line.trim()}'`); + * break; + * } + * rl.prompt(); + * }).on('close', () => { + * console.log('Have a great day!'); + * process.exit(0); + * }); + * ``` + * + * ## Example: Read file stream line-by-Line + * + * A common use case for `readline` is to consume an input file one line at a + * time. The easiest way to do so is leveraging the `fs.ReadStream` API as + * well as a `for await...of` loop: + * + * ```js + * const fs = require('fs'); + * const readline = require('readline'); + * + * async function processLineByLine() { + * const fileStream = fs.createReadStream('input.txt'); + * + * const rl = readline.createInterface({ + * input: fileStream, + * crlfDelay: Infinity + * }); + * // Note: we use the crlfDelay option to recognize all instances of CR LF + * // ('\r\n') in input.txt as a single line break. + * + * for await (const line of rl) { + * // Each line in input.txt will be successively available here as `line`. + * console.log(`Line from file: ${line}`); + * } + * } + * + * processLineByLine(); + * ``` + * + * Alternatively, one could use the `'line'` event: + * + * ```js + * const fs = require('fs'); + * const readline = require('readline'); + * + * const rl = readline.createInterface({ + * input: fs.createReadStream('sample.txt'), + * crlfDelay: Infinity + * }); + * + * rl.on('line', (line) => { + * console.log(`Line from file: ${line}`); + * }); + * ``` + * + * Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: + * + * ```js + * const { once } = require('events'); + * const { createReadStream } = require('fs'); + * const { createInterface } = require('readline'); + * + * (async function processLineByLine() { + * try { + * const rl = createInterface({ + * input: createReadStream('big-file.txt'), + * crlfDelay: Infinity + * }); + * + * rl.on('line', (line) => { + * // Process the line. + * }); + * + * await once(rl, 'close'); + * + * console.log('File processed.'); + * } catch (err) { + * console.error(err); + * } + * })(); + * ``` + * @since v0.7.7 + */ + function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + type Direction = -1 | 0 | 1; + interface CursorPos { + rows: number; + cols: number; + } + /** + * The `readline.clearLine()` method clears current line of given `TTY` stream + * in a specified direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * The `readline.clearScreenDown()` method clears the given `TTY` stream from + * the current position of the cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * The `readline.cursorTo()` method moves cursor to the specified position in a + * given `TTY` `stream`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * The `readline.moveCursor()` method moves the cursor _relative_ to its current + * position in a given `TTY` `stream`. + * + * ## Example: Tiny CLI + * + * The following example illustrates the use of `readline.Interface` class to + * implement a small command-line interface: + * + * ```js + * const readline = require('readline'); + * const rl = readline.createInterface({ + * input: process.stdin, + * output: process.stdout, + * prompt: 'OHAI> ' + * }); + * + * rl.prompt(); + * + * rl.on('line', (line) => { + * switch (line.trim()) { + * case 'hello': + * console.log('world!'); + * break; + * default: + * console.log(`Say what? I might have heard '${line.trim()}'`); + * break; + * } + * rl.prompt(); + * }).on('close', () => { + * console.log('Have a great day!'); + * process.exit(0); + * }); + * ``` + * + * ## Example: Read file stream line-by-Line + * + * A common use case for `readline` is to consume an input file one line at a + * time. The easiest way to do so is leveraging the `fs.ReadStream` API as + * well as a `for await...of` loop: + * + * ```js + * const fs = require('fs'); + * const readline = require('readline'); + * + * async function processLineByLine() { + * const fileStream = fs.createReadStream('input.txt'); + * + * const rl = readline.createInterface({ + * input: fileStream, + * crlfDelay: Infinity + * }); + * // Note: we use the crlfDelay option to recognize all instances of CR LF + * // ('\r\n') in input.txt as a single line break. + * + * for await (const line of rl) { + * // Each line in input.txt will be successively available here as `line`. + * console.log(`Line from file: ${line}`); + * } + * } + * + * processLineByLine(); + * ``` + * + * Alternatively, one could use the `'line'` event: + * + * ```js + * const fs = require('fs'); + * const readline = require('readline'); + * + * const rl = readline.createInterface({ + * input: fs.createReadStream('sample.txt'), + * crlfDelay: Infinity + * }); + * + * rl.on('line', (line) => { + * console.log(`Line from file: ${line}`); + * }); + * ``` + * + * Currently, `for await...of` loop can be a bit slower. If `async` / `await`flow and speed are both essential, a mixed approach can be applied: + * + * ```js + * const { once } = require('events'); + * const { createReadStream } = require('fs'); + * const { createInterface } = require('readline'); + * + * (async function processLineByLine() { + * try { + * const rl = createInterface({ + * input: createReadStream('big-file.txt'), + * crlfDelay: Infinity + * }); + * + * rl.on('line', (line) => { + * // Process the line. + * }); + * + * await once(rl, 'close'); + * + * console.log('File processed.'); + * } catch (err) { + * console.error(err); + * } + * })(); + * ``` + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module 'node:readline' { + export * from 'readline'; +} diff --git a/build/node_modules/@types/node/repl.d.ts b/build/node_modules/@types/node/repl.d.ts new file mode 100755 index 00000000..e81fee5d --- /dev/null +++ b/build/node_modules/@types/node/repl.d.ts @@ -0,0 +1,424 @@ +/** + * The `repl` module provides a Read-Eval-Print-Loop (REPL) implementation that + * is available both as a standalone program or includible in other applications. + * It can be accessed using: + * + * ```js + * const repl = require('repl'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/repl.js) + */ +declare module 'repl' { + import { Interface, Completer, AsyncCompleter } from 'node:readline'; + import { Context } from 'node:vm'; + import { InspectOptions } from 'node:util'; + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean | undefined; + } + type REPLEval = (this: REPLServer, evalCmd: string, context: Context, file: string, cb: (err: Error | null, result: any) => void) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { + options: InspectOptions; + }; + type REPLCommandAction = (this: REPLServer, text: string) => void; + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + /** + * Instances of `repl.REPLServer` are created using the {@link start} method + * or directly using the JavaScript `new` keyword. + * + * ```js + * const repl = require('repl'); + * + * const options = { useColors: true }; + * + * const firstInstance = repl.start(options); + * const secondInstance = new repl.REPLServer(options); + * ``` + * @since v0.1.91 + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + /** + * The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands + * to the REPL instance. Such commands are invoked by typing a `.` followed by the`keyword`. The `cmd` is either a `Function` or an `Object` with the following + * properties: + * + * The following example shows two new commands added to the REPL instance: + * + * ```js + * const repl = require('repl'); + * + * const replServer = repl.start({ prompt: '> ' }); + * replServer.defineCommand('sayhello', { + * help: 'Say hello', + * action(name) { + * this.clearBufferedCommand(); + * console.log(`Hello, ${name}!`); + * this.displayPrompt(); + * } + * }); + * replServer.defineCommand('saybye', function saybye() { + * console.log('Goodbye!'); + * this.close(); + * }); + * ``` + * + * The new commands can then be used from within the REPL instance: + * + * ```console + * > .sayhello Node.js User + * Hello, Node.js User! + * > .saybye + * Goodbye! + * ``` + * @since v0.3.0 + * @param keyword The command keyword (*without* a leading `.` character). + * @param cmd The function to invoke when the command is processed. + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * The `replServer.displayPrompt()` method readies the REPL instance for input + * from the user, printing the configured `prompt` to a new line in the `output`and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the + * 'prompt'. + * + * When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. + * + * The `replServer.displayPrompt` method is primarily intended to be called from + * within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v0.1.91 + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * The `replServer.clearBufferedCommand()` method clears any command that has been + * buffered but not yet executed. This method is primarily intended to be + * called from within the action function for commands registered using the`replServer.defineCommand()` method. + * @since v9.0.0 + */ + clearBufferedCommand(): void; + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command-line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @since v11.10.0 + * @param historyPath the path to the history file + * @param callback called when history writes are ready or upon error + */ + setupHistory(path: string, callback: (err: Error | null, repl: this) => void): void; + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'close', listener: () => void): this; + addListener(event: 'line', listener: (input: string) => void): this; + addListener(event: 'pause', listener: () => void): this; + addListener(event: 'resume', listener: () => void): this; + addListener(event: 'SIGCONT', listener: () => void): this; + addListener(event: 'SIGINT', listener: () => void): this; + addListener(event: 'SIGTSTP', listener: () => void): this; + addListener(event: 'exit', listener: () => void): this; + addListener(event: 'reset', listener: (context: Context) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'close'): boolean; + emit(event: 'line', input: string): boolean; + emit(event: 'pause'): boolean; + emit(event: 'resume'): boolean; + emit(event: 'SIGCONT'): boolean; + emit(event: 'SIGINT'): boolean; + emit(event: 'SIGTSTP'): boolean; + emit(event: 'exit'): boolean; + emit(event: 'reset', context: Context): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'close', listener: () => void): this; + on(event: 'line', listener: (input: string) => void): this; + on(event: 'pause', listener: () => void): this; + on(event: 'resume', listener: () => void): this; + on(event: 'SIGCONT', listener: () => void): this; + on(event: 'SIGINT', listener: () => void): this; + on(event: 'SIGTSTP', listener: () => void): this; + on(event: 'exit', listener: () => void): this; + on(event: 'reset', listener: (context: Context) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'line', listener: (input: string) => void): this; + once(event: 'pause', listener: () => void): this; + once(event: 'resume', listener: () => void): this; + once(event: 'SIGCONT', listener: () => void): this; + once(event: 'SIGINT', listener: () => void): this; + once(event: 'SIGTSTP', listener: () => void): this; + once(event: 'exit', listener: () => void): this; + once(event: 'reset', listener: (context: Context) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'line', listener: (input: string) => void): this; + prependListener(event: 'pause', listener: () => void): this; + prependListener(event: 'resume', listener: () => void): this; + prependListener(event: 'SIGCONT', listener: () => void): this; + prependListener(event: 'SIGINT', listener: () => void): this; + prependListener(event: 'SIGTSTP', listener: () => void): this; + prependListener(event: 'exit', listener: () => void): this; + prependListener(event: 'reset', listener: (context: Context) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'line', listener: (input: string) => void): this; + prependOnceListener(event: 'pause', listener: () => void): this; + prependOnceListener(event: 'resume', listener: () => void): this; + prependOnceListener(event: 'SIGCONT', listener: () => void): this; + prependOnceListener(event: 'SIGINT', listener: () => void): this; + prependOnceListener(event: 'SIGTSTP', listener: () => void): this; + prependOnceListener(event: 'exit', listener: () => void): this; + prependOnceListener(event: 'reset', listener: (context: Context) => void): this; + } + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + /** + * The `repl.start()` method creates and starts a {@link REPLServer} instance. + * + * If `options` is a string, then it specifies the input prompt: + * + * ```js + * const repl = require('repl'); + * + * // a Unix style prompt + * repl.start('$ '); + * ``` + * @since v0.1.91 + */ + function start(options?: string | ReplOptions): REPLServer; + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + constructor(err: Error); + } +} +declare module 'node:repl' { + export * from 'repl'; +} diff --git a/build/node_modules/@types/node/stream.d.ts b/build/node_modules/@types/node/stream.d.ts new file mode 100755 index 00000000..7edc7bfa --- /dev/null +++ b/build/node_modules/@types/node/stream.d.ts @@ -0,0 +1,1249 @@ +/** + * A stream is an abstract interface for working with streaming data in Node.js. + * The `stream` module provides an API for implementing the stream interface. + * + * There are many stream objects provided by Node.js. For instance, a `request to an HTTP server` and `process.stdout` are both stream instances. + * + * Streams can be readable, writable, or both. All streams are instances of `EventEmitter`. + * + * To access the `stream` module: + * + * ```js + * const stream = require('stream'); + * ``` + * + * The `stream` module is useful for creating new types of stream instances. It is + * usually not necessary to use the `stream` module to consume streams. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/stream.js) + */ +declare module 'stream' { + import { EventEmitter, Abortable } from 'node:events'; + import * as streamPromises from 'node:stream/promises'; + import * as streamConsumers from 'node:stream/consumers'; + class internal extends EventEmitter { + pipe( + destination: T, + options?: { + end?: boolean | undefined; + } + ): T; + } + namespace internal { + class Stream extends internal { + constructor(opts?: ReadableOptions); + } + interface StreamOptions extends Abortable { + emitClose?: boolean | undefined; + highWaterMark?: number | undefined; + objectMode?: boolean | undefined; + construct?(this: T, callback: (error?: Error | null) => void): void; + destroy?(this: T, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + interface ReadableOptions extends StreamOptions { + encoding?: BufferEncoding | undefined; + read?(this: Readable, size: number): void; + } + /** + * @since v0.9.4 + */ + class Readable extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + /** + * Returns whether the stream has been read from or cancelled. + * @since v16.8.0 + */ + static isDisturbed(stream: Readable | NodeJS.ReadableStream): boolean; + /** + * Returns whether the stream was destroyed or errored before emitting `'end'`. + * @since v16.8.0 + * @experimental + */ + readonly readableAborted: boolean; + /** + * Is `true` if it is safe to call `readable.read()`, which means + * the stream has not been destroyed or emitted `'error'` or `'end'`. + * @since v11.4.0 + */ + readable: boolean; + /** + * Returns whether `'data'` has been emitted. + * @since v16.7.0, v14.18.0 + * @experimental + */ + readonly readableDidRead: boolean; + /** + * Getter for the property `encoding` of a given `Readable` stream. The `encoding`property can be set using the `readable.setEncoding()` method. + * @since v12.7.0 + */ + readonly readableEncoding: BufferEncoding | null; + /** + * Becomes `true` when `'end'` event is emitted. + * @since v12.9.0 + */ + readonly readableEnded: boolean; + /** + * This property reflects the current state of a `Readable` stream as described + * in the `Three states` section. + * @since v9.4.0 + */ + readonly readableFlowing: boolean | null; + /** + * Returns the value of `highWaterMark` passed when creating this `Readable`. + * @since v9.3.0 + */ + readonly readableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be read. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly readableLength: number; + /** + * Getter for the property `objectMode` of a given `Readable` stream. + * @since v12.3.0 + */ + readonly readableObjectMode: boolean; + /** + * Is `true` after `readable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + constructor(opts?: ReadableOptions); + _construct?(callback: (error?: Error | null) => void): void; + _read(size: number): void; + /** + * The `readable.read()` method pulls some data out of the internal buffer and + * returns it. If no data available to be read, `null` is returned. By default, + * the data will be returned as a `Buffer` object unless an encoding has been + * specified using the `readable.setEncoding()` method or the stream is operating + * in object mode. + * + * The optional `size` argument specifies a specific number of bytes to read. If`size` bytes are not available to be read, `null` will be returned _unless_the stream has ended, in which + * case all of the data remaining in the internal + * buffer will be returned. + * + * If the `size` argument is not specified, all of the data contained in the + * internal buffer will be returned. + * + * The `size` argument must be less than or equal to 1 GiB. + * + * The `readable.read()` method should only be called on `Readable` streams + * operating in paused mode. In flowing mode, `readable.read()` is called + * automatically until the internal buffer is fully drained. + * + * ```js + * const readable = getReadableStreamSomehow(); + * + * // 'readable' may be triggered multiple times as data is buffered in + * readable.on('readable', () => { + * let chunk; + * console.log('Stream is readable (new data received in buffer)'); + * // Use a loop to make sure we read all currently available data + * while (null !== (chunk = readable.read())) { + * console.log(`Read ${chunk.length} bytes of data...`); + * } + * }); + * + * // 'end' will be triggered once when there is no more data available + * readable.on('end', () => { + * console.log('Reached end of stream.'); + * }); + * ``` + * + * Each call to `readable.read()` returns a chunk of data, or `null`. The chunks + * are not concatenated. A `while` loop is necessary to consume all data + * currently in the buffer. When reading a large file `.read()` may return `null`, + * having consumed all buffered content so far, but there is still more data to + * come not yet buffered. In this case a new `'readable'` event will be emitted + * when there is more data in the buffer. Finally the `'end'` event will be + * emitted when there is no more data to come. + * + * Therefore to read a file's whole contents from a `readable`, it is necessary + * to collect chunks across multiple `'readable'` events: + * + * ```js + * const chunks = []; + * + * readable.on('readable', () => { + * let chunk; + * while (null !== (chunk = readable.read())) { + * chunks.push(chunk); + * } + * }); + * + * readable.on('end', () => { + * const content = chunks.join(''); + * }); + * ``` + * + * A `Readable` stream in object mode will always return a single item from + * a call to `readable.read(size)`, regardless of the value of the`size` argument. + * + * If the `readable.read()` method returns a chunk of data, a `'data'` event will + * also be emitted. + * + * Calling {@link read} after the `'end'` event has + * been emitted will return `null`. No runtime error will be raised. + * @since v0.9.4 + * @param size Optional argument to specify how much data to read. + */ + read(size?: number): any; + /** + * The `readable.setEncoding()` method sets the character encoding for + * data read from the `Readable` stream. + * + * By default, no encoding is assigned and stream data will be returned as`Buffer` objects. Setting an encoding causes the stream data + * to be returned as strings of the specified encoding rather than as `Buffer`objects. For instance, calling `readable.setEncoding('utf8')` will cause the + * output data to be interpreted as UTF-8 data, and passed as strings. Calling`readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal + * string format. + * + * The `Readable` stream will properly handle multi-byte characters delivered + * through the stream that would otherwise become improperly decoded if simply + * pulled from the stream as `Buffer` objects. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.setEncoding('utf8'); + * readable.on('data', (chunk) => { + * assert.equal(typeof chunk, 'string'); + * console.log('Got %d characters of string data:', chunk.length); + * }); + * ``` + * @since v0.9.4 + * @param encoding The encoding to use. + */ + setEncoding(encoding: BufferEncoding): this; + /** + * The `readable.pause()` method will cause a stream in flowing mode to stop + * emitting `'data'` events, switching out of flowing mode. Any data that + * becomes available will remain in the internal buffer. + * + * ```js + * const readable = getReadableStreamSomehow(); + * readable.on('data', (chunk) => { + * console.log(`Received ${chunk.length} bytes of data.`); + * readable.pause(); + * console.log('There will be no additional data for 1 second.'); + * setTimeout(() => { + * console.log('Now data will start flowing again.'); + * readable.resume(); + * }, 1000); + * }); + * ``` + * + * The `readable.pause()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + pause(): this; + /** + * The `readable.resume()` method causes an explicitly paused `Readable` stream to + * resume emitting `'data'` events, switching the stream into flowing mode. + * + * The `readable.resume()` method can be used to fully consume the data from a + * stream without actually processing any of that data: + * + * ```js + * getReadableStreamSomehow() + * .resume() + * .on('end', () => { + * console.log('Reached the end, but did not read anything.'); + * }); + * ``` + * + * The `readable.resume()` method has no effect if there is a `'readable'`event listener. + * @since v0.9.4 + */ + resume(): this; + /** + * The `readable.isPaused()` method returns the current operating state of the`Readable`. This is used primarily by the mechanism that underlies the`readable.pipe()` method. In most + * typical cases, there will be no reason to + * use this method directly. + * + * ```js + * const readable = new stream.Readable(); + * + * readable.isPaused(); // === false + * readable.pause(); + * readable.isPaused(); // === true + * readable.resume(); + * readable.isPaused(); // === false + * ``` + * @since v0.11.14 + */ + isPaused(): boolean; + /** + * The `readable.unpipe()` method detaches a `Writable` stream previously attached + * using the {@link pipe} method. + * + * If the `destination` is not specified, then _all_ pipes are detached. + * + * If the `destination` is specified, but no pipe is set up for it, then + * the method does nothing. + * + * ```js + * const fs = require('fs'); + * const readable = getReadableStreamSomehow(); + * const writable = fs.createWriteStream('file.txt'); + * // All the data from readable goes into 'file.txt', + * // but only for the first second. + * readable.pipe(writable); + * setTimeout(() => { + * console.log('Stop writing to file.txt.'); + * readable.unpipe(writable); + * console.log('Manually close the file stream.'); + * writable.end(); + * }, 1000); + * ``` + * @since v0.9.4 + * @param destination Optional specific stream to unpipe + */ + unpipe(destination?: NodeJS.WritableStream): this; + /** + * Passing `chunk` as `null` signals the end of the stream (EOF) and behaves the + * same as `readable.push(null)`, after which no more data can be written. The EOF + * signal is put at the end of the buffer and any buffered data will still be + * flushed. + * + * The `readable.unshift()` method pushes a chunk of data back into the internal + * buffer. This is useful in certain situations where a stream is being consumed by + * code that needs to "un-consume" some amount of data that it has optimistically + * pulled out of the source, so that the data can be passed on to some other party. + * + * The `stream.unshift(chunk)` method cannot be called after the `'end'` event + * has been emitted or a runtime error will be thrown. + * + * Developers using `stream.unshift()` often should consider switching to + * use of a `Transform` stream instead. See the `API for stream implementers` section for more information. + * + * ```js + * // Pull off a header delimited by \n\n. + * // Use unshift() if we get too much. + * // Call the callback with (error, header, stream). + * const { StringDecoder } = require('string_decoder'); + * function parseHeader(stream, callback) { + * stream.on('error', callback); + * stream.on('readable', onReadable); + * const decoder = new StringDecoder('utf8'); + * let header = ''; + * function onReadable() { + * let chunk; + * while (null !== (chunk = stream.read())) { + * const str = decoder.write(chunk); + * if (str.match(/\n\n/)) { + * // Found the header boundary. + * const split = str.split(/\n\n/); + * header += split.shift(); + * const remaining = split.join('\n\n'); + * const buf = Buffer.from(remaining, 'utf8'); + * stream.removeListener('error', callback); + * // Remove the 'readable' listener before unshifting. + * stream.removeListener('readable', onReadable); + * if (buf.length) + * stream.unshift(buf); + * // Now the body of the message can be read from the stream. + * callback(null, header, stream); + * } else { + * // Still reading the header. + * header += str; + * } + * } + * } + * } + * ``` + * + * Unlike {@link push}, `stream.unshift(chunk)` will not + * end the reading process by resetting the internal reading state of the stream. + * This can cause unexpected results if `readable.unshift()` is called during a + * read (i.e. from within a {@link _read} implementation on a + * custom stream). Following the call to `readable.unshift()` with an immediate {@link push} will reset the reading state appropriately, + * however it is best to simply avoid calling `readable.unshift()` while in the + * process of performing a read. + * @since v0.9.11 + * @param chunk Chunk of data to unshift onto the read queue. For streams not operating in object mode, `chunk` must be a string, `Buffer`, `Uint8Array` or `null`. For object mode + * streams, `chunk` may be any JavaScript value. + * @param encoding Encoding of string chunks. Must be a valid `Buffer` encoding, such as `'utf8'` or `'ascii'`. + */ + unshift(chunk: any, encoding?: BufferEncoding): void; + /** + * Prior to Node.js 0.10, streams did not implement the entire `stream` module API + * as it is currently defined. (See `Compatibility` for more information.) + * + * When using an older Node.js library that emits `'data'` events and has a {@link pause} method that is advisory only, the`readable.wrap()` method can be used to create a `Readable` + * stream that uses + * the old stream as its data source. + * + * It will rarely be necessary to use `readable.wrap()` but the method has been + * provided as a convenience for interacting with older Node.js applications and + * libraries. + * + * ```js + * const { OldReader } = require('./old-api-module.js'); + * const { Readable } = require('stream'); + * const oreader = new OldReader(); + * const myReader = new Readable().wrap(oreader); + * + * myReader.on('readable', () => { + * myReader.read(); // etc. + * }); + * ``` + * @since v0.9.4 + * @param stream An "old style" readable stream + */ + wrap(stream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the readable + * stream will release any internal resources and subsequent calls to `push()`will be ignored. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, but instead implement `readable._destroy()`. + * @since v8.0.0 + * @param error Error which will be passed as payload in `'error'` event + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: 'close', listener: () => void): this; + addListener(event: 'data', listener: (chunk: any) => void): this; + addListener(event: 'end', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'pause', listener: () => void): this; + addListener(event: 'readable', listener: () => void): this; + addListener(event: 'resume', listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'close'): boolean; + emit(event: 'data', chunk: any): boolean; + emit(event: 'end'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'pause'): boolean; + emit(event: 'readable'): boolean; + emit(event: 'resume'): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'close', listener: () => void): this; + on(event: 'data', listener: (chunk: any) => void): this; + on(event: 'end', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'pause', listener: () => void): this; + on(event: 'readable', listener: () => void): this; + on(event: 'resume', listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'data', listener: (chunk: any) => void): this; + once(event: 'end', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'pause', listener: () => void): this; + once(event: 'readable', listener: () => void): this; + once(event: 'resume', listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'data', listener: (chunk: any) => void): this; + prependListener(event: 'end', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'pause', listener: () => void): this; + prependListener(event: 'readable', listener: () => void): this; + prependListener(event: 'resume', listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'data', listener: (chunk: any) => void): this; + prependOnceListener(event: 'end', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'pause', listener: () => void): this; + prependOnceListener(event: 'readable', listener: () => void): this; + prependOnceListener(event: 'resume', listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: 'close', listener: () => void): this; + removeListener(event: 'data', listener: (chunk: any) => void): this; + removeListener(event: 'end', listener: () => void): this; + removeListener(event: 'error', listener: (err: Error) => void): this; + removeListener(event: 'pause', listener: () => void): this; + removeListener(event: 'readable', listener: () => void): this; + removeListener(event: 'resume', listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + interface WritableOptions extends StreamOptions { + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + write?(this: Writable, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Writable, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void + ): void; + final?(this: Writable, callback: (error?: Error | null) => void): void; + } + /** + * @since v0.9.4 + */ + class Writable extends Stream implements NodeJS.WritableStream { + /** + * Is `true` if it is safe to call `writable.write()`, which means + * the stream has not been destroyed, errored or ended. + * @since v11.4.0 + */ + readonly writable: boolean; + /** + * Is `true` after `writable.end()` has been called. This property + * does not indicate whether the data has been flushed, for this use `writable.writableFinished` instead. + * @since v12.9.0 + */ + readonly writableEnded: boolean; + /** + * Is set to `true` immediately before the `'finish'` event is emitted. + * @since v12.6.0 + */ + readonly writableFinished: boolean; + /** + * Return the value of `highWaterMark` passed when creating this `Writable`. + * @since v9.3.0 + */ + readonly writableHighWaterMark: number; + /** + * This property contains the number of bytes (or objects) in the queue + * ready to be written. The value provides introspection data regarding + * the status of the `highWaterMark`. + * @since v9.4.0 + */ + readonly writableLength: number; + /** + * Getter for the property `objectMode` of a given `Writable` stream. + * @since v12.3.0 + */ + readonly writableObjectMode: boolean; + /** + * Number of times `writable.uncork()` needs to be + * called in order to fully uncork the stream. + * @since v13.2.0, v12.16.0 + */ + readonly writableCorked: number; + /** + * Is `true` after `writable.destroy()` has been called. + * @since v8.0.0 + */ + destroyed: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void + ): void; + _construct?(callback: (error?: Error | null) => void): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + /** + * The `writable.write()` method writes some data to the stream, and calls the + * supplied `callback` once the data has been fully handled. If an error + * occurs, the `callback` will be called with the error as its + * first argument. The `callback` is called asynchronously and before `'error'` is + * emitted. + * + * The return value is `true` if the internal buffer is less than the`highWaterMark` configured when the stream was created after admitting `chunk`. + * If `false` is returned, further attempts to write data to the stream should + * stop until the `'drain'` event is emitted. + * + * While a stream is not draining, calls to `write()` will buffer `chunk`, and + * return false. Once all currently buffered chunks are drained (accepted for + * delivery by the operating system), the `'drain'` event will be emitted. + * It is recommended that once `write()` returns false, no more chunks be written + * until the `'drain'` event is emitted. While calling `write()` on a stream that + * is not draining is allowed, Node.js will buffer all written chunks until + * maximum memory usage occurs, at which point it will abort unconditionally. + * Even before it aborts, high memory usage will cause poor garbage collector + * performance and high RSS (which is not typically released back to the system, + * even after the memory is no longer required). Since TCP sockets may never + * drain if the remote peer does not read the data, writing a socket that is + * not draining may lead to a remotely exploitable vulnerability. + * + * Writing data while the stream is not draining is particularly + * problematic for a `Transform`, because the `Transform` streams are paused + * by default until they are piped or a `'data'` or `'readable'` event handler + * is added. + * + * If the data to be written can be generated or fetched on demand, it is + * recommended to encapsulate the logic into a `Readable` and use {@link pipe}. However, if calling `write()` is preferred, it is + * possible to respect backpressure and avoid memory issues using the `'drain'` event: + * + * ```js + * function write(data, cb) { + * if (!stream.write(data)) { + * stream.once('drain', cb); + * } else { + * process.nextTick(cb); + * } + * } + * + * // Wait for cb to be called before doing any other write. + * write('hello', () => { + * console.log('Write completed, do more writes now.'); + * }); + * ``` + * + * A `Writable` stream in object mode will always ignore the `encoding` argument. + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param [encoding='utf8'] The encoding, if `chunk` is a string. + * @param callback Callback for when this chunk of data is flushed. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + write(chunk: any, callback?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean; + /** + * The `writable.setDefaultEncoding()` method sets the default `encoding` for a `Writable` stream. + * @since v0.11.15 + * @param encoding The new default encoding + */ + setDefaultEncoding(encoding: BufferEncoding): this; + /** + * Calling the `writable.end()` method signals that no more data will be written + * to the `Writable`. The optional `chunk` and `encoding` arguments allow one + * final additional chunk of data to be written immediately before closing the + * stream. + * + * Calling the {@link write} method after calling {@link end} will raise an error. + * + * ```js + * // Write 'hello, ' and then end with 'world!'. + * const fs = require('fs'); + * const file = fs.createWriteStream('example.txt'); + * file.write('hello, '); + * file.end('world!'); + * // Writing more now is not allowed! + * ``` + * @since v0.9.4 + * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any + * JavaScript value other than `null`. + * @param encoding The encoding if `chunk` is a string + * @param callback Callback for when the stream is finished. + */ + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + /** + * The `writable.cork()` method forces all written data to be buffered in memory. + * The buffered data will be flushed when either the {@link uncork} or {@link end} methods are called. + * + * The primary intent of `writable.cork()` is to accommodate a situation in which + * several small chunks are written to the stream in rapid succession. Instead of + * immediately forwarding them to the underlying destination, `writable.cork()`buffers all the chunks until `writable.uncork()` is called, which will pass them + * all to `writable._writev()`, if present. This prevents a head-of-line blocking + * situation where data is being buffered while waiting for the first small chunk + * to be processed. However, use of `writable.cork()` without implementing`writable._writev()` may have an adverse effect on throughput. + * + * See also: `writable.uncork()`, `writable._writev()`. + * @since v0.11.2 + */ + cork(): void; + /** + * The `writable.uncork()` method flushes all data buffered since {@link cork} was called. + * + * When using `writable.cork()` and `writable.uncork()` to manage the buffering + * of writes to a stream, it is recommended that calls to `writable.uncork()` be + * deferred using `process.nextTick()`. Doing so allows batching of all`writable.write()` calls that occur within a given Node.js event loop phase. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.write('data '); + * process.nextTick(() => stream.uncork()); + * ``` + * + * If the `writable.cork()` method is called multiple times on a stream, the + * same number of calls to `writable.uncork()` must be called to flush the buffered + * data. + * + * ```js + * stream.cork(); + * stream.write('some '); + * stream.cork(); + * stream.write('data '); + * process.nextTick(() => { + * stream.uncork(); + * // The data will not be flushed until uncork() is called a second time. + * stream.uncork(); + * }); + * ``` + * + * See also: `writable.cork()`. + * @since v0.11.2 + */ + uncork(): void; + /** + * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'`event (unless `emitClose` is set to `false`). After this call, the writable + * stream has ended and subsequent calls to `write()` or `end()` will result in + * an `ERR_STREAM_DESTROYED` error. + * This is a destructive and immediate way to destroy a stream. Previous calls to`write()` may not have drained, and may trigger an `ERR_STREAM_DESTROYED` error. + * Use `end()` instead of destroy if data should flush before close, or wait for + * the `'drain'` event before destroying the stream. + * + * Once `destroy()` has been called any further calls will be a no-op and no + * further errors except from `_destroy()` may be emitted as `'error'`. + * + * Implementors should not override this method, + * but instead implement `writable._destroy()`. + * @since v8.0.0 + * @param error Optional, an error to emit with `'error'` event. + */ + destroy(error?: Error): this; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: 'close', listener: () => void): this; + addListener(event: 'drain', listener: () => void): this; + addListener(event: 'error', listener: (err: Error) => void): this; + addListener(event: 'finish', listener: () => void): this; + addListener(event: 'pipe', listener: (src: Readable) => void): this; + addListener(event: 'unpipe', listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: 'close'): boolean; + emit(event: 'drain'): boolean; + emit(event: 'error', err: Error): boolean; + emit(event: 'finish'): boolean; + emit(event: 'pipe', src: Readable): boolean; + emit(event: 'unpipe', src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: 'close', listener: () => void): this; + on(event: 'drain', listener: () => void): this; + on(event: 'error', listener: (err: Error) => void): this; + on(event: 'finish', listener: () => void): this; + on(event: 'pipe', listener: (src: Readable) => void): this; + on(event: 'unpipe', listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: 'close', listener: () => void): this; + once(event: 'drain', listener: () => void): this; + once(event: 'error', listener: (err: Error) => void): this; + once(event: 'finish', listener: () => void): this; + once(event: 'pipe', listener: (src: Readable) => void): this; + once(event: 'unpipe', listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: 'close', listener: () => void): this; + prependListener(event: 'drain', listener: () => void): this; + prependListener(event: 'error', listener: (err: Error) => void): this; + prependListener(event: 'finish', listener: () => void): this; + prependListener(event: 'pipe', listener: (src: Readable) => void): this; + prependListener(event: 'unpipe', listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'close', listener: () => void): this; + prependOnceListener(event: 'drain', listener: () => void): this; + prependOnceListener(event: 'error', listener: (err: Error) => void): this; + prependOnceListener(event: 'finish', listener: () => void): this; + prependOnceListener(event: 'pipe', listener: (src: Readable) => void): this; + prependOnceListener(event: 'unpipe', listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: 'close', listener: () => void): this; + removeListener(event: 'drain', listener: () => void): this; + removeListener(event: 'error', listener: (err: Error) => void): this; + removeListener(event: 'finish', listener: () => void): this; + removeListener(event: 'pipe', listener: (src: Readable) => void): this; + removeListener(event: 'unpipe', listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + construct?(this: Duplex, callback: (error?: Error | null) => void): void; + read?(this: Duplex, size: number): void; + write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Duplex, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void + ): void; + final?(this: Duplex, callback: (error?: Error | null) => void): void; + destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; + } + /** + * Duplex streams are streams that implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Duplex` streams include: + * + * * `TCP sockets` + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Duplex extends Readable implements Writable { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + /** + * If `false` then the stream will automatically end the writable side when the + * readable side ends. Set initially by the `allowHalfOpen` constructor option, + * which defaults to `false`. + * + * This can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is + * emitted. + * @since v0.9.4 + */ + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + /** + * A utility method for creating duplex streams. + * + * - `Stream` converts writable stream into writable `Duplex` and readable stream + * to `Duplex`. + * - `Blob` converts into readable `Duplex`. + * - `string` converts into readable `Duplex`. + * - `ArrayBuffer` converts into readable `Duplex`. + * - `AsyncIterable` converts into a readable `Duplex`. Cannot yield `null`. + * - `AsyncGeneratorFunction` converts into a readable/writable transform + * `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield + * `null`. + * - `AsyncFunction` converts into a writable `Duplex`. Must return + * either `null` or `undefined` + * - `Object ({ writable, readable })` converts `readable` and + * `writable` into `Stream` and then combines them into `Duplex` where the + * `Duplex` will write to the `writable` and read from the `readable`. + * - `Promise` converts into readable `Duplex`. Value `null` is ignored. + * + * @since v16.8.0 + */ + static from(src: Stream | Blob | ArrayBuffer | string | Iterable | AsyncIterable | AsyncGeneratorFunction | Promise | Object): Duplex; + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void + ): void; + _destroy(error: Error | null, callback: (error: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + } + type TransformCallback = (error?: Error | null, data?: any) => void; + interface TransformOptions extends DuplexOptions { + construct?(this: Transform, callback: (error?: Error | null) => void): void; + read?(this: Transform, size: number): void; + write?(this: Transform, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Transform, + chunks: Array<{ + chunk: any; + encoding: BufferEncoding; + }>, + callback: (error?: Error | null) => void + ): void; + final?(this: Transform, callback: (error?: Error | null) => void): void; + destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; + transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + flush?(this: Transform, callback: TransformCallback): void; + } + /** + * Transform streams are `Duplex` streams where the output is in some way + * related to the input. Like all `Duplex` streams, `Transform` streams + * implement both the `Readable` and `Writable` interfaces. + * + * Examples of `Transform` streams include: + * + * * `zlib streams` + * * `crypto streams` + * @since v0.9.4 + */ + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + /** + * The `stream.PassThrough` class is a trivial implementation of a `Transform` stream that simply passes the input bytes across to the output. Its purpose is + * primarily for examples and testing, but there are some use cases where`stream.PassThrough` is useful as a building block for novel sorts of streams. + */ + class PassThrough extends Transform {} + /** + * Attaches an AbortSignal to a readable or writeable stream. This lets code + * control stream destruction using an `AbortController`. + * + * Calling `abort` on the `AbortController` corresponding to the passed`AbortSignal` will behave the same way as calling `.destroy(new AbortError())`on the stream. + * + * ```js + * const fs = require('fs'); + * + * const controller = new AbortController(); + * const read = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')) + * ); + * // Later, abort the operation closing the stream + * controller.abort(); + * ``` + * + * Or using an `AbortSignal` with a readable stream as an async iterable: + * + * ```js + * const controller = new AbortController(); + * setTimeout(() => controller.abort(), 10_000); // set a timeout + * const stream = addAbortSignal( + * controller.signal, + * fs.createReadStream(('object.json')) + * ); + * (async () => { + * try { + * for await (const chunk of stream) { + * await process(chunk); + * } + * } catch (e) { + * if (e.name === 'AbortError') { + * // The operation was cancelled + * } else { + * throw e; + * } + * } + * })(); + * ``` + * @since v15.4.0 + * @param signal A signal representing possible cancellation + * @param stream a stream to attach a signal to + */ + function addAbortSignal(signal: AbortSignal, stream: T): T; + interface FinishedOptions extends Abortable { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + /** + * A function to get notified when a stream is no longer readable, writable + * or has experienced an error or a premature close event. + * + * ```js + * const { finished } = require('stream'); + * + * const rs = fs.createReadStream('archive.tar'); + * + * finished(rs, (err) => { + * if (err) { + * console.error('Stream failed.', err); + * } else { + * console.log('Stream is done reading.'); + * } + * }); + * + * rs.resume(); // Drain the stream. + * ``` + * + * Especially useful in error handling scenarios where a stream is destroyed + * prematurely (like an aborted HTTP request), and will not emit `'end'`or `'finish'`. + * + * The `finished` API provides promise version: + * + * ```js + * const { finished } = require('stream/promises'); + * + * const rs = fs.createReadStream('archive.tar'); + * + * async function run() { + * await finished(rs); + * console.log('Stream is done reading.'); + * } + * + * run().catch(console.error); + * rs.resume(); // Drain the stream. + * ``` + * + * `stream.finished()` leaves dangling event listeners (in particular`'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been + * invoked. The reason for this is so that unexpected `'error'` events (due to + * incorrect stream implementations) do not cause unexpected crashes. + * If this is unwanted behavior then the returned cleanup function needs to be + * invoked in the callback: + * + * ```js + * const cleanup = finished(rs, (err) => { + * cleanup(); + * // ... + * }); + * ``` + * @since v10.0.0 + * @param stream A readable and/or writable stream. + * @param callback A callback function that takes an optional error argument. + * @return A cleanup function which removes all registered listeners. + */ + function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options: FinishedOptions, callback: (err?: NodeJS.ErrnoException | null) => void): () => void; + function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, callback: (err?: NodeJS.ErrnoException | null) => void): () => void; + namespace finished { + function __promisify__(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options?: FinishedOptions): Promise; + } + type PipelineSourceFunction = () => Iterable | AsyncIterable; + type PipelineSource = Iterable | AsyncIterable | NodeJS.ReadableStream | PipelineSourceFunction; + type PipelineTransform, U> = + | NodeJS.ReadWriteStream + | ((source: S extends (...args: any[]) => Iterable | AsyncIterable ? AsyncIterable : S) => AsyncIterable); + type PipelineTransformSource = PipelineSource | PipelineTransform; + type PipelineDestinationIterableFunction = (source: AsyncIterable) => AsyncIterable; + type PipelineDestinationPromiseFunction = (source: AsyncIterable) => Promise

; + type PipelineDestination, P> = S extends PipelineTransformSource + ? NodeJS.WritableStream | PipelineDestinationIterableFunction | PipelineDestinationPromiseFunction + : never; + type PipelineCallback> = S extends PipelineDestinationPromiseFunction + ? (err: NodeJS.ErrnoException | null, value: P) => void + : (err: NodeJS.ErrnoException | null) => void; + type PipelinePromise> = S extends PipelineDestinationPromiseFunction ? Promise

: Promise; + interface PipelineOptions { + signal: AbortSignal; + } + /** + * A module method to pipe between streams and generators forwarding errors and + * properly cleaning up and provide a callback when the pipeline is complete. + * + * ```js + * const { pipeline } = require('stream'); + * const fs = require('fs'); + * const zlib = require('zlib'); + * + * // Use the pipeline API to easily pipe a series of streams + * // together and get notified when the pipeline is fully done. + * + * // A pipeline to gzip a potentially huge tar file efficiently: + * + * pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz'), + * (err) => { + * if (err) { + * console.error('Pipeline failed.', err); + * } else { + * console.log('Pipeline succeeded.'); + * } + * } + * ); + * ``` + * + * The `pipeline` API provides a promise version, which can also + * receive an options argument as the last parameter with a`signal` `AbortSignal` property. When the signal is aborted,`destroy` will be called on the underlying pipeline, with + * an`AbortError`. + * + * ```js + * const { pipeline } = require('stream/promises'); + * + * async function run() { + * await pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz') + * ); + * console.log('Pipeline succeeded.'); + * } + * + * run().catch(console.error); + * ``` + * + * To use an `AbortSignal`, pass it inside an options object, + * as the last argument: + * + * ```js + * const { pipeline } = require('stream/promises'); + * + * async function run() { + * const ac = new AbortController(); + * const signal = ac.signal; + * + * setTimeout(() => ac.abort(), 1); + * await pipeline( + * fs.createReadStream('archive.tar'), + * zlib.createGzip(), + * fs.createWriteStream('archive.tar.gz'), + * { signal }, + * ); + * } + * + * run().catch(console.error); // AbortError + * ``` + * + * The `pipeline` API also supports async generators: + * + * ```js + * const { pipeline } = require('stream/promises'); + * const fs = require('fs'); + * + * async function run() { + * await pipeline( + * fs.createReadStream('lowercase.txt'), + * async function* (source, signal) { + * source.setEncoding('utf8'); // Work with strings rather than `Buffer`s. + * for await (const chunk of source) { + * yield await processChunk(chunk, { signal }); + * } + * }, + * fs.createWriteStream('uppercase.txt') + * ); + * console.log('Pipeline succeeded.'); + * } + * + * run().catch(console.error); + * ``` + * + * Remember to handle the `signal` argument passed into the async generator. + * Especially in the case where the async generator is the source for the + * pipeline (i.e. first argument) or the pipeline will never complete. + * + * ```js + * const { pipeline } = require('stream/promises'); + * const fs = require('fs'); + * + * async function run() { + * await pipeline( + * async function * (signal) { + * await someLongRunningfn({ signal }); + * yield 'asd'; + * }, + * fs.createWriteStream('uppercase.txt') + * ); + * console.log('Pipeline succeeded.'); + * } + * + * run().catch(console.error); + * ``` + * + * `stream.pipeline()` will call `stream.destroy(err)` on all streams except: + * + * * `Readable` streams which have emitted `'end'` or `'close'`. + * * `Writable` streams which have emitted `'finish'` or `'close'`. + * + * `stream.pipeline()` leaves dangling event listeners on the streams + * after the `callback` has been invoked. In the case of reuse of streams after + * failure, this can cause event listener leaks and swallowed errors. + * @since v10.0.0 + * @param callback Called when the pipeline is fully done. + */ + function pipeline, B extends PipelineDestination>( + source: A, + destination: B, + callback?: PipelineCallback + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline, T1 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + destination: B, + callback?: PipelineCallback + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline, T1 extends PipelineTransform, T2 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + transform2: T2, + destination: B, + callback?: PipelineCallback + ): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, destination: B, callback?: PipelineCallback): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, transform4: T4, destination: B, callback?: PipelineCallback): B extends NodeJS.WritableStream ? B : NodeJS.WritableStream; + function pipeline( + streams: ReadonlyArray, + callback?: (err: NodeJS.ErrnoException | null) => void + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array void)> + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__, B extends PipelineDestination>(source: A, destination: B, options?: PipelineOptions): PipelinePromise; + function __promisify__, T1 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions + ): PipelinePromise; + function __promisify__, T1 extends PipelineTransform, T2 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions + ): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, destination: B, options?: PipelineOptions): PipelinePromise; + function __promisify__< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, transform4: T4, destination: B, options?: PipelineOptions): PipelinePromise; + function __promisify__(streams: ReadonlyArray, options?: PipelineOptions): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + const promises: typeof streamPromises; + const consumers: typeof streamConsumers; + } + export = internal; +} +declare module 'node:stream' { + import stream = require('stream'); + export = stream; +} diff --git a/build/node_modules/@types/node/stream/consumers.d.ts b/build/node_modules/@types/node/stream/consumers.d.ts new file mode 100755 index 00000000..ce6c9bb7 --- /dev/null +++ b/build/node_modules/@types/node/stream/consumers.d.ts @@ -0,0 +1,24 @@ +// Duplicates of interface in lib.dom.ts. +// Duplicated here rather than referencing lib.dom.ts because doing so causes lib.dom.ts to be loaded for "test-all" +// Which in turn causes tests to pass that shouldn't pass. +// +// This interface is not, and should not be, exported. +interface Blob { + readonly size: number; + readonly type: string; + arrayBuffer(): Promise; + slice(start?: number, end?: number, contentType?: string): Blob; + stream(): NodeJS.ReadableStream; + text(): Promise; +} +declare module 'stream/consumers' { + import { Readable } from 'node:stream'; + function buffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function text(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function arrayBuffer(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function blob(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; + function json(stream: NodeJS.ReadableStream | Readable | AsyncIterator): Promise; +} +declare module 'node:stream/consumers' { + export * from 'stream/consumers'; +} diff --git a/build/node_modules/@types/node/stream/promises.d.ts b/build/node_modules/@types/node/stream/promises.d.ts new file mode 100755 index 00000000..b427073d --- /dev/null +++ b/build/node_modules/@types/node/stream/promises.d.ts @@ -0,0 +1,42 @@ +declare module 'stream/promises' { + import { FinishedOptions, PipelineSource, PipelineTransform, PipelineDestination, PipelinePromise, PipelineOptions } from 'node:stream'; + function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, options?: FinishedOptions): Promise; + function pipeline, B extends PipelineDestination>(source: A, destination: B, options?: PipelineOptions): PipelinePromise; + function pipeline, T1 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + destination: B, + options?: PipelineOptions + ): PipelinePromise; + function pipeline, T1 extends PipelineTransform, T2 extends PipelineTransform, B extends PipelineDestination>( + source: A, + transform1: T1, + transform2: T2, + destination: B, + options?: PipelineOptions + ): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, destination: B, options?: PipelineOptions): PipelinePromise; + function pipeline< + A extends PipelineSource, + T1 extends PipelineTransform, + T2 extends PipelineTransform, + T3 extends PipelineTransform, + T4 extends PipelineTransform, + B extends PipelineDestination + >(source: A, transform1: T1, transform2: T2, transform3: T3, transform4: T4, destination: B, options?: PipelineOptions): PipelinePromise; + function pipeline(streams: ReadonlyArray, options?: PipelineOptions): Promise; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; +} +declare module 'node:stream/promises' { + export * from 'stream/promises'; +} diff --git a/build/node_modules/@types/node/stream/web.d.ts b/build/node_modules/@types/node/stream/web.d.ts new file mode 100755 index 00000000..f9ef0570 --- /dev/null +++ b/build/node_modules/@types/node/stream/web.d.ts @@ -0,0 +1,330 @@ +declare module 'stream/web' { + // stub module, pending copy&paste from .d.ts or manual impl + // copy from lib.dom.d.ts + interface ReadableWritablePair { + readable: ReadableStream; + /** + * Provides a convenient, chainable way of piping this readable stream + * through a transform stream (or any other { writable, readable } + * pair). It simply pipes the stream into the writable side of the + * supplied pair, and returns the readable side for further use. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + */ + writable: WritableStream; + } + interface StreamPipeOptions { + preventAbort?: boolean; + preventCancel?: boolean; + /** + * Pipes this readable stream to a given writable stream destination. + * The way in which the piping process behaves under various error + * conditions can be customized with a number of passed options. It + * returns a promise that fulfills when the piping process completes + * successfully, or rejects if any errors were encountered. + * + * Piping a stream will lock it for the duration of the pipe, preventing + * any other consumer from acquiring a reader. + * + * Errors and closures of the source and destination streams propagate + * as follows: + * + * An error in this source readable stream will abort destination, + * unless preventAbort is truthy. The returned promise will be rejected + * with the source's error, or with any error that occurs during + * aborting the destination. + * + * An error in destination will cancel this source readable stream, + * unless preventCancel is truthy. The returned promise will be rejected + * with the destination's error, or with any error that occurs during + * canceling the source. + * + * When this source readable stream closes, destination will be closed, + * unless preventClose is truthy. The returned promise will be fulfilled + * once this process completes, unless an error is encountered while + * closing the destination, in which case it will be rejected with that + * error. + * + * If destination starts out closed or closing, this source readable + * stream will be canceled, unless preventCancel is true. The returned + * promise will be rejected with an error indicating piping to a closed + * stream failed, or with any error that occurs during canceling the + * source. + * + * The signal option can be set to an AbortSignal to allow aborting an + * ongoing pipe operation via the corresponding AbortController. In this + * case, this source readable stream will be canceled, and destination + * aborted, unless the respective options preventCancel or preventAbort + * are set. + */ + preventClose?: boolean; + signal?: AbortSignal; + } + interface ReadableStreamGenericReader { + readonly closed: Promise; + cancel(reason?: any): Promise; + } + interface ReadableStreamDefaultReadValueResult { + done: false; + value: T; + } + interface ReadableStreamDefaultReadDoneResult { + done: true; + value?: undefined; + } + type ReadableStreamController = ReadableStreamDefaultController; + type ReadableStreamDefaultReadResult = ReadableStreamDefaultReadValueResult | ReadableStreamDefaultReadDoneResult; + interface ReadableByteStreamControllerCallback { + (controller: ReadableByteStreamController): void | PromiseLike; + } + interface UnderlyingSinkAbortCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSinkCloseCallback { + (): void | PromiseLike; + } + interface UnderlyingSinkStartCallback { + (controller: WritableStreamDefaultController): any; + } + interface UnderlyingSinkWriteCallback { + (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; + } + interface UnderlyingSourceCancelCallback { + (reason?: any): void | PromiseLike; + } + interface UnderlyingSourcePullCallback { + (controller: ReadableStreamController): void | PromiseLike; + } + interface UnderlyingSourceStartCallback { + (controller: ReadableStreamController): any; + } + interface TransformerFlushCallback { + (controller: TransformStreamDefaultController): void | PromiseLike; + } + interface TransformerStartCallback { + (controller: TransformStreamDefaultController): any; + } + interface TransformerTransformCallback { + (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; + } + interface UnderlyingByteSource { + autoAllocateChunkSize?: number; + cancel?: ReadableStreamErrorCallback; + pull?: ReadableByteStreamControllerCallback; + start?: ReadableByteStreamControllerCallback; + type: 'bytes'; + } + interface UnderlyingSource { + cancel?: UnderlyingSourceCancelCallback; + pull?: UnderlyingSourcePullCallback; + start?: UnderlyingSourceStartCallback; + type?: undefined; + } + interface UnderlyingSink { + abort?: UnderlyingSinkAbortCallback; + close?: UnderlyingSinkCloseCallback; + start?: UnderlyingSinkStartCallback; + type?: undefined; + write?: UnderlyingSinkWriteCallback; + } + interface ReadableStreamErrorCallback { + (reason: any): void | PromiseLike; + } + /** This Streams API interface represents a readable stream of byte data. */ + interface ReadableStream { + readonly locked: boolean; + cancel(reason?: any): Promise; + getReader(): ReadableStreamDefaultReader; + pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; + pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + tee(): [ReadableStream, ReadableStream]; + values(options?: { preventCancel?: boolean }): AsyncIterableIterator; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + const ReadableStream: { + prototype: ReadableStream; + new (underlyingSource: UnderlyingByteSource, strategy?: QueuingStrategy): ReadableStream; + new (underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; + }; + interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { + read(): Promise>; + releaseLock(): void; + } + const ReadableStreamDefaultReader: { + prototype: ReadableStreamDefaultReader; + new (stream: ReadableStream): ReadableStreamDefaultReader; + }; + const ReadableStreamBYOBReader: any; + const ReadableStreamBYOBRequest: any; + interface ReadableByteStreamController { + readonly byobRequest: undefined; + readonly desiredSize: number | null; + close(): void; + enqueue(chunk: ArrayBufferView): void; + error(error?: any): void; + } + const ReadableByteStreamController: { + prototype: ReadableByteStreamController; + new (): ReadableByteStreamController; + }; + interface ReadableStreamDefaultController { + readonly desiredSize: number | null; + close(): void; + enqueue(chunk?: R): void; + error(e?: any): void; + } + const ReadableStreamDefaultController: { + prototype: ReadableStreamDefaultController; + new (): ReadableStreamDefaultController; + }; + interface Transformer { + flush?: TransformerFlushCallback; + readableType?: undefined; + start?: TransformerStartCallback; + transform?: TransformerTransformCallback; + writableType?: undefined; + } + interface TransformStream { + readonly readable: ReadableStream; + readonly writable: WritableStream; + } + const TransformStream: { + prototype: TransformStream; + new (transformer?: Transformer, writableStrategy?: QueuingStrategy, readableStrategy?: QueuingStrategy): TransformStream; + }; + interface TransformStreamDefaultController { + readonly desiredSize: number | null; + enqueue(chunk?: O): void; + error(reason?: any): void; + terminate(): void; + } + const TransformStreamDefaultController: { + prototype: TransformStreamDefaultController; + new (): TransformStreamDefaultController; + }; + /** + * This Streams API interface provides a standard abstraction for writing + * streaming data to a destination, known as a sink. This object comes with + * built-in back pressure and queuing. + */ + interface WritableStream { + readonly locked: boolean; + abort(reason?: any): Promise; + close(): Promise; + getWriter(): WritableStreamDefaultWriter; + } + const WritableStream: { + prototype: WritableStream; + new (underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; + }; + /** + * This Streams API interface is the object returned by + * WritableStream.getWriter() and once created locks the < writer to the + * WritableStream ensuring that no other streams can write to the underlying + * sink. + */ + interface WritableStreamDefaultWriter { + readonly closed: Promise; + readonly desiredSize: number | null; + readonly ready: Promise; + abort(reason?: any): Promise; + close(): Promise; + releaseLock(): void; + write(chunk?: W): Promise; + } + const WritableStreamDefaultWriter: { + prototype: WritableStreamDefaultWriter; + new (stream: WritableStream): WritableStreamDefaultWriter; + }; + /** + * This Streams API interface represents a controller allowing control of a + * WritableStream's state. When constructing a WritableStream, the + * underlying sink is given a corresponding WritableStreamDefaultController + * instance to manipulate. + */ + interface WritableStreamDefaultController { + error(e?: any): void; + } + const WritableStreamDefaultController: { + prototype: WritableStreamDefaultController; + new (): WritableStreamDefaultController; + }; + interface QueuingStrategy { + highWaterMark?: number; + size?: QueuingStrategySize; + } + interface QueuingStrategySize { + (chunk?: T): number; + } + interface QueuingStrategyInit { + /** + * Creates a new ByteLengthQueuingStrategy with the provided high water + * mark. + * + * Note that the provided high water mark will not be validated ahead of + * time. Instead, if it is negative, NaN, or not a number, the resulting + * ByteLengthQueuingStrategy will cause the corresponding stream + * constructor to throw. + */ + highWaterMark: number; + } + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface ByteLengthQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const ByteLengthQueuingStrategy: { + prototype: ByteLengthQueuingStrategy; + new (init: QueuingStrategyInit): ByteLengthQueuingStrategy; + }; + /** + * This Streams API interface provides a built-in byte length queuing + * strategy that can be used when constructing streams. + */ + interface CountQueuingStrategy extends QueuingStrategy { + readonly highWaterMark: number; + readonly size: QueuingStrategySize; + } + const CountQueuingStrategy: { + prototype: CountQueuingStrategy; + new (init: QueuingStrategyInit): CountQueuingStrategy; + }; + interface TextEncoderStream { + /** Returns "utf-8". */ + readonly encoding: 'utf-8'; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextEncoderStream: { + prototype: TextEncoderStream; + new (): TextEncoderStream; + }; + interface TextDecoderOptions { + fatal?: boolean; + ignoreBOM?: boolean; + } + type BufferSource = ArrayBufferView | ArrayBuffer; + interface TextDecoderStream { + /** Returns encoding's name, lower cased. */ + readonly encoding: string; + /** Returns `true` if error mode is "fatal", and `false` otherwise. */ + readonly fatal: boolean; + /** Returns `true` if ignore BOM flag is set, and `false` otherwise. */ + readonly ignoreBOM: boolean; + readonly readable: ReadableStream; + readonly writable: WritableStream; + readonly [Symbol.toStringTag]: string; + } + const TextDecoderStream: { + prototype: TextDecoderStream; + new (label?: string, options?: TextDecoderOptions): TextDecoderStream; + }; +} +declare module 'node:stream/web' { + export * from 'stream/web'; +} diff --git a/build/node_modules/@types/node/string_decoder.d.ts b/build/node_modules/@types/node/string_decoder.d.ts new file mode 100755 index 00000000..da712b5e --- /dev/null +++ b/build/node_modules/@types/node/string_decoder.d.ts @@ -0,0 +1,67 @@ +/** + * The `string_decoder` module provides an API for decoding `Buffer` objects into + * strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 + * characters. It can be accessed using: + * + * ```js + * const { StringDecoder } = require('string_decoder'); + * ``` + * + * The following example shows the basic use of the `StringDecoder` class. + * + * ```js + * const { StringDecoder } = require('string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * const cent = Buffer.from([0xC2, 0xA2]); + * console.log(decoder.write(cent)); + * + * const euro = Buffer.from([0xE2, 0x82, 0xAC]); + * console.log(decoder.write(euro)); + * ``` + * + * When a `Buffer` instance is written to the `StringDecoder` instance, an + * internal buffer is used to ensure that the decoded string does not contain + * any incomplete multibyte characters. These are held in the buffer until the + * next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. + * + * In the following example, the three UTF-8 encoded bytes of the European Euro + * symbol (`€`) are written over three separate operations: + * + * ```js + * const { StringDecoder } = require('string_decoder'); + * const decoder = new StringDecoder('utf8'); + * + * decoder.write(Buffer.from([0xE2])); + * decoder.write(Buffer.from([0x82])); + * console.log(decoder.end(Buffer.from([0xAC]))); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/string_decoder.js) + */ +declare module 'string_decoder' { + class StringDecoder { + constructor(encoding?: BufferEncoding); + /** + * Returns a decoded string, ensuring that any incomplete multibyte characters at + * the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the + * returned string and stored in an internal buffer for the next call to`stringDecoder.write()` or `stringDecoder.end()`. + * @since v0.1.99 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + write(buffer: Buffer): string; + /** + * Returns any remaining input stored in the internal buffer as a string. Bytes + * representing incomplete UTF-8 and UTF-16 characters will be replaced with + * substitution characters appropriate for the character encoding. + * + * If the `buffer` argument is provided, one final call to `stringDecoder.write()`is performed before returning the remaining input. + * After `end()` is called, the `stringDecoder` object can be reused for new input. + * @since v0.9.3 + * @param buffer A `Buffer`, or `TypedArray`, or `DataView` containing the bytes to decode. + */ + end(buffer?: Buffer): string; + } +} +declare module 'node:string_decoder' { + export * from 'string_decoder'; +} diff --git a/build/node_modules/@types/node/timers.d.ts b/build/node_modules/@types/node/timers.d.ts new file mode 100755 index 00000000..59f44c19 --- /dev/null +++ b/build/node_modules/@types/node/timers.d.ts @@ -0,0 +1,94 @@ +/** + * The `timer` module exposes a global API for scheduling functions to + * be called at some future period of time. Because the timer functions are + * globals, there is no need to call `require('timers')` to use the API. + * + * The timer functions within Node.js implement a similar API as the timers API + * provided by Web Browsers but use a different internal implementation that is + * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/timers.js) + */ +declare module 'timers' { + import { Abortable } from 'node:events'; + import { setTimeout as setTimeoutPromise, setImmediate as setImmediatePromise, setInterval as setIntervalPromise } from 'node:timers/promises'; + interface TimerOptions extends Abortable { + /** + * Set to `false` to indicate that the scheduled `Timeout` + * should not require the Node.js event loop to remain active. + * @default true + */ + ref?: boolean | undefined; + } + let setTimeout: typeof global.setTimeout; + let clearTimeout: typeof global.clearTimeout; + let setInterval: typeof global.setInterval; + let clearInterval: typeof global.clearInterval; + let setImmediate: typeof global.setImmediate; + let clearImmediate: typeof global.clearImmediate; + global { + namespace NodeJS { + // compatibility with older typings + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + interface Immediate extends RefCounted { + /** + * If true, the `Immediate` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + _onImmediate: Function; // to distinguish it from the Timeout class + } + interface Timeout extends Timer { + /** + * If true, the `Timeout` object will keep the Node.js event loop active. + * @since v11.0.0 + */ + hasRef(): boolean; + /** + * Sets the timer's start time to the current time, and reschedules the timer to + * call its callback at the previously specified duration adjusted to the current + * time. This is useful for refreshing a timer without allocating a new + * JavaScript object. + * + * Using this on a timer that has already called its callback will reactivate the + * timer. + * @since v10.2.0 + * @return a reference to `timeout` + */ + refresh(): this; + [Symbol.toPrimitive](): number; + } + } + function setTimeout(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timeout; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setTimeout(callback: (args: void) => void, ms?: number): NodeJS.Timeout; + namespace setTimeout { + const __promisify__: typeof setTimeoutPromise; + } + function clearTimeout(timeoutId: NodeJS.Timeout): void; + function setInterval(callback: (...args: TArgs) => void, ms?: number, ...args: TArgs): NodeJS.Timer; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setInterval(callback: (args: void) => void, ms?: number): NodeJS.Timer; + namespace setInterval { + const __promisify__: typeof setIntervalPromise; + } + function clearInterval(intervalId: NodeJS.Timeout): void; + function setImmediate(callback: (...args: TArgs) => void, ...args: TArgs): NodeJS.Immediate; + // util.promisify no rest args compability + // tslint:disable-next-line void-return + function setImmediate(callback: (args: void) => void): NodeJS.Immediate; + namespace setImmediate { + const __promisify__: typeof setImmediatePromise; + } + function clearImmediate(immediateId: NodeJS.Immediate): void; + function queueMicrotask(callback: () => void): void; + } +} +declare module 'node:timers' { + export * from 'timers'; +} diff --git a/build/node_modules/@types/node/timers/promises.d.ts b/build/node_modules/@types/node/timers/promises.d.ts new file mode 100755 index 00000000..fd778880 --- /dev/null +++ b/build/node_modules/@types/node/timers/promises.d.ts @@ -0,0 +1,68 @@ +/** + * The `timers/promises` API provides an alternative set of timer functions + * that return `Promise` objects. The API is accessible via`require('timers/promises')`. + * + * ```js + * import { + * setTimeout, + * setImmediate, + * setInterval, + * } from 'timers/promises'; + * ``` + * @since v15.0.0 + */ +declare module 'timers/promises' { + import { TimerOptions } from 'node:timers'; + /** + * ```js + * import { + * setTimeout, + * } from 'timers/promises'; + * + * const res = await setTimeout(100, 'result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param [delay=1] The number of milliseconds to wait before fulfilling the promise. + * @param value A value with which the promise is fulfilled. + */ + function setTimeout(delay?: number, value?: T, options?: TimerOptions): Promise; + /** + * ```js + * import { + * setImmediate, + * } from 'timers/promises'; + * + * const res = await setImmediate('result'); + * + * console.log(res); // Prints 'result' + * ``` + * @since v15.0.0 + * @param value A value with which the promise is fulfilled. + */ + function setImmediate(value?: T, options?: TimerOptions): Promise; + /** + * Returns an async iterator that generates values in an interval of `delay` ms. + * + * ```js + * import { + * setInterval, + * } from 'timers/promises'; + * + * const interval = 100; + * for await (const startTime of setInterval(interval, Date.now())) { + * const now = Date.now(); + * console.log(now); + * if ((now - startTime) > 1000) + * break; + * } + * console.log(Date.now()); + * ``` + * @since v15.9.0 + */ + function setInterval(delay?: number, value?: T, options?: TimerOptions): AsyncIterable; +} +declare module 'node:timers/promises' { + export * from 'timers/promises'; +} diff --git a/build/node_modules/@types/node/tls.d.ts b/build/node_modules/@types/node/tls.d.ts new file mode 100755 index 00000000..661f0f08 --- /dev/null +++ b/build/node_modules/@types/node/tls.d.ts @@ -0,0 +1,1020 @@ +/** + * The `tls` module provides an implementation of the Transport Layer Security + * (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. + * The module can be accessed using: + * + * ```js + * const tls = require('tls'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/tls.js) + */ +declare module 'tls' { + import { X509Certificate } from 'node:crypto'; + import * as net from 'node:net'; + import * as stream from 'stream'; + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + interface PeerCertificate { + subject: Certificate; + issuer: Certificate; + subjectaltname: string; + infoAccess: NodeJS.Dict; + modulus: string; + exponent: string; + valid_from: string; + valid_to: string; + fingerprint: string; + fingerprint256: string; + ext_key_usage: string[]; + serialNumber: string; + raw: Buffer; + } + interface DetailedPeerCertificate extends PeerCertificate { + issuerCertificate: DetailedPeerCertificate; + } + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + /** + * Performs transparent encryption of written data and all required TLS + * negotiation. + * + * Instances of `tls.TLSSocket` implement the duplex `Stream` interface. + * + * Methods that return TLS connection metadata (e.g.{@link TLSSocket.getPeerCertificate} will only return data while the + * connection is open. + * @since v0.11.4 + */ + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket, options?: TLSSocketOptions); + /** + * Returns `true` if the peer certificate was signed by one of the CAs specified + * when creating the `tls.TLSSocket` instance, otherwise `false`. + * @since v0.11.4 + */ + authorized: boolean; + /** + * Returns the reason why the peer's certificate was not been verified. This + * property is set only when `tlsSocket.authorized === false`. + * @since v0.11.4 + */ + authorizationError: Error; + /** + * Always returns `true`. This may be used to distinguish TLS sockets from regular`net.Socket` instances. + * @since v0.11.4 + */ + encrypted: boolean; + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + /** + * Returns an object representing the local certificate. The returned object has + * some properties corresponding to the fields of the certificate. + * + * See {@link TLSSocket.getPeerCertificate} for an example of the certificate + * structure. + * + * If there is no local certificate, an empty object will be returned. If the + * socket has been destroyed, `null` will be returned. + * @since v11.2.0 + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object containing information on the negotiated cipher suite. + * + * For example: + * + * ```json + * { + * "name": "AES128-SHA256", + * "standardName": "TLS_RSA_WITH_AES_128_CBC_SHA256", + * "version": "TLSv1.2" + * } + * ``` + * + * See [SSL\_CIPHER\_get\_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. + * @since v0.11.4 + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter of + * an ephemeral key exchange in `perfect forward secrecy` on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; `null` is returned + * if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The`name` property is available only when type is `'ECDH'`. + * + * For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`. + * @since v5.0.0 + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that has been sent to the socket as part of a SSL/TLS handshake, or `undefined` if no `Finished` message has been sent yet. + */ + getFinished(): Buffer | undefined; + /** + * Returns an object representing the peer's certificate. If the peer does not + * provide a certificate, an empty object will be returned. If the socket has been + * destroyed, `null` will be returned. + * + * If the full certificate chain was requested, each certificate will include an`issuerCertificate` property containing an object representing its issuer's + * certificate. + * @since v0.11.4 + * @param detailed Include the full certificate chain if `true`, otherwise include just the peer's certificate. + * @return A certificate object. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * As the `Finished` messages are message digests of the complete handshake + * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can + * be used for external authentication procedures when the authentication + * provided by SSL/TLS is not desired or is not enough. + * + * Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used + * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). + * @since v9.9.0 + * @return The latest `Finished` message that is expected or has actually been received from the socket as part of a SSL/TLS handshake, or `undefined` if there is no `Finished` message so + * far. + */ + getPeerFinished(): Buffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the + * current connection. The value `'unknown'` will be returned for connected + * sockets that have not completed the handshaking process. The value `null` will + * be returned for server sockets or disconnected client sockets. + * + * Protocol versions are: + * + * * `'SSLv3'` + * * `'TLSv1'` + * * `'TLSv1.1'` + * * `'TLSv1.2'` + * * `'TLSv1.3'` + * + * See the OpenSSL [`SSL_get_version`](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html) documentation for more information. + * @since v5.7.0 + */ + getProtocol(): string | null; + /** + * Returns the TLS session data or `undefined` if no session was + * negotiated. On the client, the data can be provided to the `session` option of {@link connect} to resume the connection. On the server, it may be useful + * for debugging. + * + * See `Session Resumption` for more information. + * + * Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications + * must use the `'session'` event (it also works for TLSv1.2 and below). + * @since v0.11.4 + */ + getSession(): Buffer | undefined; + /** + * See [SSL\_get\_shared\_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) for more information. + * @since v12.11.0 + * @return List of signature algorithms shared between the server and the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * For a client, returns the TLS session ticket if one is available, or`undefined`. For a server, always returns `undefined`. + * + * It may be useful for debugging. + * + * See `Session Resumption` for more information. + * @since v0.11.4 + */ + getTLSTicket(): Buffer | undefined; + /** + * See `Session Resumption` for more information. + * @since v0.5.6 + * @return `true` if the session was reused, `false` otherwise. + */ + isSessionReused(): boolean; + /** + * The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process. + * Upon completion, the `callback` function will be passed a single argument + * that is either an `Error` (if the request failed) or `null`. + * + * This method can be used to request a peer's certificate after the secure + * connection has been established. + * + * When running as the server, the socket will be destroyed with an error after`handshakeTimeout` timeout. + * + * For TLSv1.3, renegotiation cannot be initiated, it is not supported by the + * protocol. + * @since v0.11.8 + * @param callback If `renegotiate()` returned `true`, callback is attached once to the `'secure'` event. If `renegotiate()` returned `false`, `callback` will be called in the next tick with + * an error, unless the `tlsSocket` has been destroyed, in which case `callback` will not be called at all. + * @return `true` if renegotiation was initiated, `false` otherwise. + */ + renegotiate( + options: { + rejectUnauthorized?: boolean | undefined; + requestCert?: boolean | undefined; + }, + callback: (err: Error | null) => void + ): undefined | boolean; + /** + * The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size. + * Returns `true` if setting the limit succeeded; `false` otherwise. + * + * Smaller fragment sizes decrease the buffering latency on the client: larger + * fragments are buffered by the TLS layer until the entire fragment is received + * and its integrity is verified; large fragments can span multiple roundtrips + * and their processing can be delayed due to packet loss or reordering. However, + * smaller fragments add extra TLS framing bytes and CPU overhead, which may + * decrease overall server throughput. + * @since v0.11.11 + * @param [size=16384] The maximum TLS fragment size. The maximum value is `16384`. + */ + setMaxSendFragment(size: number): boolean; + /** + * Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts + * to renegotiate will trigger an `'error'` event on the `TLSSocket`. + * @since v8.4.0 + */ + disableRenegotiation(): void; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * Note: The format of the output is identical to the output of `openssl s_client -trace` or `openssl s_server -trace`. While it is produced by OpenSSL's`SSL_trace()` function, the format is + * undocumented, can change without notice, + * and should not be relied on. + * @since v12.2.0 + */ + enableTrace(): void; + /** + * Returns the peer certificate as an `X509Certificate` object. + * + * If there is no peer certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getPeerX509Certificate(): X509Certificate | undefined; + /** + * Returns the local certificate as an `X509Certificate` object. + * + * If there is no local certificate, or the socket has been destroyed,`undefined` will be returned. + * @since v15.9.0 + */ + getX509Certificate(): X509Certificate | undefined; + /** + * Keying material is used for validations to prevent different kind of attacks in + * network protocols, for example in the specifications of IEEE 802.1X. + * + * Example + * + * ```js + * const keyingMaterial = tlsSocket.exportKeyingMaterial( + * 128, + * 'client finished'); + * + * + * Example return value of keyingMaterial: + * + * + * ``` + * + * See the OpenSSL [`SSL_export_keying_material`](https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html) documentation for more + * information. + * @since v13.10.0, v12.17.0 + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the [IANA Exporter Label + * Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context Optionally provide a context. + * @return requested bytes of the keying material + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): Buffer; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'OCSPResponse', listener: (response: Buffer) => void): this; + addListener(event: 'secureConnect', listener: () => void): this; + addListener(event: 'session', listener: (session: Buffer) => void): this; + addListener(event: 'keylog', listener: (line: Buffer) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'OCSPResponse', response: Buffer): boolean; + emit(event: 'secureConnect'): boolean; + emit(event: 'session', session: Buffer): boolean; + emit(event: 'keylog', line: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'OCSPResponse', listener: (response: Buffer) => void): this; + on(event: 'secureConnect', listener: () => void): this; + on(event: 'session', listener: (session: Buffer) => void): this; + on(event: 'keylog', listener: (line: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'OCSPResponse', listener: (response: Buffer) => void): this; + once(event: 'secureConnect', listener: () => void): this; + once(event: 'session', listener: (session: Buffer) => void): this; + once(event: 'keylog', listener: (line: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'OCSPResponse', listener: (response: Buffer) => void): this; + prependListener(event: 'secureConnect', listener: () => void): this; + prependListener(event: 'session', listener: (session: Buffer) => void): this; + prependListener(event: 'keylog', listener: (line: Buffer) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'OCSPResponse', listener: (response: Buffer) => void): this; + prependOnceListener(event: 'secureConnect', listener: () => void): this; + prependOnceListener(event: 'session', listener: (session: Buffer) => void): this; + prependOnceListener(event: 'keylog', listener: (line: Buffer) => void): this; + } + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: string[] | Uint8Array[] | Uint8Array | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + /** + * + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + pskCallback?(socket: TLSSocket, identity: string): DataView | NodeJS.TypedArray | null; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + interface PSKCallbackNegotation { + psk: DataView | NodeJS.TypedArray; + identity: string; + } + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?(hint: string | null): PSKCallbackNegotation | null; + } + /** + * Accepts encrypted connections using TLS or SSL. + * @since v0.3.2 + */ + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + /** + * The `server.addContext()` method adds a secure context that will be used if + * the client request's SNI name matches the supplied `hostname` (or wildcard). + * + * When there are multiple matching contexts, the most recently added one is + * used. + * @since v0.5.3 + * @param hostname A SNI host name or wildcard (e.g. `'*'`) + * @param context An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). + */ + addContext(hostname: string, context: SecureContextOptions): void; + /** + * Returns the session ticket keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @return A 48-byte buffer containing the session ticket keys. + */ + getTicketKeys(): Buffer; + /** + * The `server.setSecureContext()` method replaces the secure context of an + * existing server. Existing connections to the server are not interrupted. + * @since v11.0.0 + * @param options An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). + */ + setSecureContext(options: SecureContextOptions): void; + /** + * Sets the session ticket keys. + * + * Changes to the ticket keys are effective only for future server connections. + * Existing or currently pending server connections will use the previous keys. + * + * See `Session Resumption` for more information. + * @since v3.0.0 + * @param keys A 48-byte buffer containing the session ticket keys. + */ + setTicketKeys(keys: Buffer): void; + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + addListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + addListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + addListener(event: 'secureConnection', listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: 'keylog', listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'tlsClientError', err: Error, tlsSocket: TLSSocket): boolean; + emit(event: 'newSession', sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void): boolean; + emit(event: 'OCSPRequest', certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void): boolean; + emit(event: 'resumeSession', sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: 'secureConnection', tlsSocket: TLSSocket): boolean; + emit(event: 'keylog', line: Buffer, tlsSocket: TLSSocket): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'tlsClientError', listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + on(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + on(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + on(event: 'secureConnection', listener: (tlsSocket: TLSSocket) => void): this; + on(event: 'keylog', listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'tlsClientError', listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + once(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + once(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + once(event: 'secureConnection', listener: (tlsSocket: TLSSocket) => void): this; + once(event: 'keylog', listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + prependListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + prependListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + prependListener(event: 'secureConnection', listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: 'keylog', listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this; + prependOnceListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this; + prependOnceListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this; + prependOnceListener(event: 'secureConnection', listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: 'keylog', listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + } + /** + * @deprecated since v0.11.3 Use `tls.TLSSocket` instead. + */ + interface SecurePair { + encrypted: TLSSocket; + cleartext: TLSSocket; + } + type SecureVersion = 'TLSv1.3' | 'TLSv1.2' | 'TLSv1.1' | 'TLSv1'; + interface SecureContextOptions { + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * Diffie Hellman parameters, required for Perfect Forward Secrecy. Use + * openssl dhparam to create the parameters. The key length must be + * greater than or equal to 1024 bits or else an error will be thrown. + * Although 1024 bits is permissible, use 2048 bits or larger for + * stronger security. If omitted or invalid, the parameters are + * silently discarded and DHE ciphers will not be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + interface SecureContext { + context: any; + } + /** + * Verifies the certificate `cert` is issued to `hostname`. + * + * Returns [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object, populating it with `reason`, `host`, and `cert` on + * failure. On success, returns [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type). + * + * This function can be overwritten by providing alternative function as part of + * the `options.checkServerIdentity` option passed to `tls.connect()`. The + * overwriting function can call `tls.checkServerIdentity()` of course, to augment + * the checks done with additional verification. + * + * This function is only called if the certificate passed all other checks, such as + * being issued by trusted CA (`options.ca`). + * @since v0.8.4 + * @param hostname The host name or IP address to verify the certificate against. + * @param cert A `certificate object` representing the peer's certificate. + */ + function checkServerIdentity(hostname: string, cert: PeerCertificate): Error | undefined; + /** + * Creates a new {@link Server}. The `secureConnectionListener`, if provided, is + * automatically set as a listener for the `'secureConnection'` event. + * + * The `ticketKeys` options is automatically shared between `cluster` module + * workers. + * + * The following illustrates a simple echo server: + * + * ```js + * const tls = require('tls'); + * const fs = require('fs'); + * + * const options = { + * key: fs.readFileSync('server-key.pem'), + * cert: fs.readFileSync('server-cert.pem'), + * + * // This is necessary only if using client certificate authentication. + * requestCert: true, + * + * // This is necessary only if the client uses a self-signed certificate. + * ca: [ fs.readFileSync('client-cert.pem') ] + * }; + * + * const server = tls.createServer(options, (socket) => { + * console.log('server connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * socket.write('welcome!\n'); + * socket.setEncoding('utf8'); + * socket.pipe(socket); + * }); + * server.listen(8000, () => { + * console.log('server bound'); + * }); + * ``` + * + * The server can be tested by connecting to it using the example client from {@link connect}. + * @since v0.3.2 + */ + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + /** + * The `callback` function, if specified, will be added as a listener for the `'secureConnect'` event. + * + * `tls.connect()` returns a {@link TLSSocket} object. + * + * Unlike the `https` API, `tls.connect()` does not enable the + * SNI (Server Name Indication) extension by default, which may cause some + * servers to return an incorrect certificate or reject the connection + * altogether. To enable SNI, set the `servername` option in addition + * to `host`. + * + * The following illustrates a client for the echo server example from {@link createServer}: + * + * ```js + * // Assumes an echo server that is listening on port 8000. + * const tls = require('tls'); + * const fs = require('fs'); + * + * const options = { + * // Necessary only if the server requires client certificate authentication. + * key: fs.readFileSync('client-key.pem'), + * cert: fs.readFileSync('client-cert.pem'), + * + * // Necessary only if the server uses a self-signed certificate. + * ca: [ fs.readFileSync('server-cert.pem') ], + * + * // Necessary only if the server's cert isn't for "localhost". + * checkServerIdentity: () => { return null; }, + * }; + * + * const socket = tls.connect(8000, options, () => { + * console.log('client connected', + * socket.authorized ? 'authorized' : 'unauthorized'); + * process.stdin.pipe(socket); + * process.stdin.resume(); + * }); + * socket.setEncoding('utf8'); + * socket.on('data', (data) => { + * console.log(data); + * }); + * socket.on('end', () => { + * console.log('server ends connection'); + * }); + * ``` + * @since v0.11.3 + */ + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * Creates a new secure pair object with two streams, one of which reads and writes + * the encrypted data and the other of which reads and writes the cleartext data. + * Generally, the encrypted stream is piped to/from an incoming encrypted data + * stream and the cleartext one is used as a replacement for the initial encrypted + * stream. + * + * `tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and`encrypted` stream properties. + * + * Using `cleartext` has the same API as {@link TLSSocket}. + * + * The `tls.createSecurePair()` method is now deprecated in favor of`tls.TLSSocket()`. For example, the code: + * + * ```js + * pair = tls.createSecurePair(// ... ); + * pair.encrypted.pipe(socket); + * socket.pipe(pair.encrypted); + * ``` + * + * can be replaced by: + * + * ```js + * secureSocket = tls.TLSSocket(socket, options); + * ``` + * + * where `secureSocket` has the same API as `pair.cleartext`. + * @since v0.3.2 + * @deprecated Since v0.11.3 - Use {@link TLSSocket} instead. + * @param context A secure context object as returned by `tls.createSecureContext()` + * @param isServer `true` to specify that this TLS connection should be opened as a server. + * @param requestCert `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`. + * @param rejectUnauthorized If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`. + */ + function createSecurePair(context?: SecureContext, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; + /** + * {@link createServer} sets the default value of the `honorCipherOrder` option + * to `true`, other APIs that create secure contexts leave it unset. + * + * {@link createServer} uses a 128 bit truncated SHA1 hash value generated + * from `process.argv` as the default value of the `sessionIdContext` option, other + * APIs that create secure contexts have no default value. + * + * The `tls.createSecureContext()` method creates a `SecureContext` object. It is + * usable as an argument to several `tls` APIs, such as {@link createServer} and `server.addContext()`, but has no public methods. + * + * A key is _required_ for ciphers that use certificates. Either `key` or`pfx` can be used to provide it. + * + * If the `ca` option is not given, then Node.js will default to using [Mozilla's publicly trusted list of + * CAs](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt). + * @since v0.11.13 + */ + function createSecureContext(options?: SecureContextOptions): SecureContext; + /** + * Returns an array with the names of the supported TLS ciphers. The names are + * lower-case for historical reasons, but must be uppercased to be used in + * the `ciphers` option of {@link createSecureContext}. + * + * Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for + * TLSv1.2 and below. + * + * ```js + * console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...] + * ``` + * @since v0.10.2 + */ + function getCiphers(): string[]; + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is 'auto'. See tls.createSecureContext() for further + * information. + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the maxVersion option of + * tls.createSecureContext(). It can be assigned any of the supported TLS + * protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: + * 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets + * the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the highest maximum + * is used. + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the minVersion option of tls.createSecureContext(). + * It can be assigned any of the supported TLS protocol versions, + * 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless + * changed using CLI options. Using --tls-min-v1.0 sets the default to + * 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using + * --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options + * are provided, the lowest minimum is used. + */ + let DEFAULT_MIN_VERSION: SecureVersion; + /** + * An immutable array of strings representing the root certificates (in PEM + * format) used for verifying peer certificates. This is the default value + * of the ca option to tls.createSecureContext(). + */ + const rootCertificates: ReadonlyArray; +} +declare module 'node:tls' { + export * from 'tls'; +} diff --git a/build/node_modules/@types/node/trace_events.d.ts b/build/node_modules/@types/node/trace_events.d.ts new file mode 100755 index 00000000..cb4e3754 --- /dev/null +++ b/build/node_modules/@types/node/trace_events.d.ts @@ -0,0 +1,161 @@ +/** + * The `trace_events` module provides a mechanism to centralize tracing information + * generated by V8, Node.js core, and userspace code. + * + * Tracing can be enabled with the `--trace-event-categories` command-line flag + * or by using the `trace_events` module. The `--trace-event-categories` flag + * accepts a list of comma-separated category names. + * + * The available categories are: + * + * * `node`: An empty placeholder. + * * `node.async_hooks`: Enables capture of detailed `async_hooks` trace data. + * The `async_hooks` events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. + * * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. + * * `node.console`: Enables capture of `console.time()` and `console.count()`output. + * * `node.dns.native`: Enables capture of trace data for DNS queries. + * * `node.environment`: Enables capture of Node.js Environment milestones. + * * `node.fs.sync`: Enables capture of trace data for file system sync methods. + * * `node.perf`: Enables capture of `Performance API` measurements. + * * `node.perf.usertiming`: Enables capture of only Performance API User Timing + * measures and marks. + * * `node.perf.timerify`: Enables capture of only Performance API timerify + * measurements. + * * `node.promises.rejections`: Enables capture of trace data tracking the number + * of unhandled Promise rejections and handled-after-rejections. + * * `node.vm.script`: Enables capture of trace data for the `vm` module's`runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. + * * `v8`: The `V8` events are GC, compiling, and execution related. + * + * By default the `node`, `node.async_hooks`, and `v8` categories are enabled. + * + * ```bash + * node --trace-event-categories v8,node,node.async_hooks server.js + * ``` + * + * Prior versions of Node.js required the use of the `--trace-events-enabled`flag to enable trace events. This requirement has been removed. However, the`--trace-events-enabled` flag _may_ still be + * used and will enable the`node`, `node.async_hooks`, and `v8` trace event categories by default. + * + * ```bash + * node --trace-events-enabled + * + * # is equivalent to + * + * node --trace-event-categories v8,node,node.async_hooks + * ``` + * + * Alternatively, trace events may be enabled using the `trace_events` module: + * + * ```js + * const trace_events = require('trace_events'); + * const tracing = trace_events.createTracing({ categories: ['node.perf'] }); + * tracing.enable(); // Enable trace event capture for the 'node.perf' category + * + * // do work + * + * tracing.disable(); // Disable trace event capture for the 'node.perf' category + * ``` + * + * Running Node.js with tracing enabled will produce log files that can be opened + * in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome. + * + * The logging file is by default called `node_trace.${rotation}.log`, where`${rotation}` is an incrementing log-rotation id. The filepath pattern can + * be specified with `--trace-event-file-pattern` that accepts a template + * string that supports `${rotation}` and `${pid}`: + * + * ```bash + * node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js + * ``` + * + * The tracing system uses the same time source + * as the one used by `process.hrtime()`. + * However the trace-event timestamps are expressed in microseconds, + * unlike `process.hrtime()` which returns nanoseconds. + * + * The features from this module are not available in `Worker` threads. + * @experimental + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/trace_events.js) + */ +declare module 'trace_events' { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + /** + * Creates and returns a `Tracing` object for the given set of `categories`. + * + * ```js + * const trace_events = require('trace_events'); + * const categories = ['node.perf', 'node.async_hooks']; + * const tracing = trace_events.createTracing({ categories }); + * tracing.enable(); + * // do stuff + * tracing.disable(); + * ``` + * @since v10.0.0 + * @return . + */ + function createTracing(options: CreateTracingOptions): Tracing; + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is determined + * by the _union_ of all currently-enabled `Tracing` objects and any categories + * enabled using the `--trace-event-categories` flag. + * + * Given the file `test.js` below, the command`node --trace-event-categories node.perf test.js` will print`'node.async_hooks,node.perf'` to the console. + * + * ```js + * const trace_events = require('trace_events'); + * const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); + * const t2 = trace_events.createTracing({ categories: ['node.perf'] }); + * const t3 = trace_events.createTracing({ categories: ['v8'] }); + * + * t1.enable(); + * t2.enable(); + * + * console.log(trace_events.getEnabledCategories()); + * ``` + * @since v10.0.0 + */ + function getEnabledCategories(): string | undefined; +} +declare module 'node:trace_events' { + export * from 'trace_events'; +} diff --git a/build/node_modules/@types/node/tty.d.ts b/build/node_modules/@types/node/tty.d.ts new file mode 100755 index 00000000..72fdf2e1 --- /dev/null +++ b/build/node_modules/@types/node/tty.d.ts @@ -0,0 +1,204 @@ +/** + * The `tty` module provides the `tty.ReadStream` and `tty.WriteStream` classes. + * In most cases, it will not be necessary or possible to use this module directly. + * However, it can be accessed using: + * + * ```js + * const tty = require('tty'); + * ``` + * + * When Node.js detects that it is being run with a text terminal ("TTY") + * attached, `process.stdin` will, by default, be initialized as an instance of`tty.ReadStream` and both `process.stdout` and `process.stderr` will, by + * default, be instances of `tty.WriteStream`. The preferred method of determining + * whether Node.js is being run within a TTY context is to check that the value of + * the `process.stdout.isTTY` property is `true`: + * + * ```console + * $ node -p -e "Boolean(process.stdout.isTTY)" + * true + * $ node -p -e "Boolean(process.stdout.isTTY)" | cat + * false + * ``` + * + * In most cases, there should be little to no reason for an application to + * manually create instances of the `tty.ReadStream` and `tty.WriteStream`classes. + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/tty.js) + */ +declare module 'tty' { + import * as net from 'node:net'; + /** + * The `tty.isatty()` method returns `true` if the given `fd` is associated with + * a TTY and `false` if it is not, including whenever `fd` is not a non-negative + * integer. + * @since v0.5.8 + * @param fd A numeric file descriptor + */ + function isatty(fd: number): boolean; + /** + * Represents the readable side of a TTY. In normal circumstances `process.stdin` will be the only `tty.ReadStream` instance in a Node.js + * process and there should be no reason to create additional instances. + * @since v0.5.8 + */ + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + /** + * A `boolean` that is `true` if the TTY is currently configured to operate as a + * raw device. Defaults to `false`. + * @since v0.7.7 + */ + isRaw: boolean; + /** + * Allows configuration of `tty.ReadStream` so that it operates as a raw device. + * + * When in raw mode, input is always available character-by-character, not + * including modifiers. Additionally, all special processing of characters by the + * terminal is disabled, including echoing input characters.Ctrl+C will no longer cause a `SIGINT` when in this mode. + * @since v0.7.7 + * @param mode If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` + * property will be set to the resulting mode. + * @return The read stream instance. + */ + setRawMode(mode: boolean): this; + /** + * A `boolean` that is always `true` for `tty.ReadStream` instances. + * @since v0.5.8 + */ + isTTY: boolean; + } + /** + * -1 - to the left from cursor + * 0 - the entire line + * 1 - to the right from cursor + */ + type Direction = -1 | 0 | 1; + /** + * Represents the writable side of a TTY. In normal circumstances,`process.stdout` and `process.stderr` will be the only`tty.WriteStream` instances created for a Node.js process and there + * should be no reason to create additional instances. + * @since v0.5.8 + */ + class WriteStream extends net.Socket { + constructor(fd: number); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: 'resize', listener: () => void): this; + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: 'resize'): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'resize', listener: () => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: 'resize', listener: () => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: 'resize', listener: () => void): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: 'resize', listener: () => void): this; + /** + * `writeStream.clearLine()` clears the current line of this `WriteStream` in a + * direction identified by `dir`. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearLine(dir: Direction, callback?: () => void): boolean; + /** + * `writeStream.clearScreenDown()` clears this `WriteStream` from the current + * cursor down. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + clearScreenDown(callback?: () => void): boolean; + /** + * `writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified + * position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + cursorTo(x: number, y?: number, callback?: () => void): boolean; + cursorTo(x: number, callback: () => void): boolean; + /** + * `writeStream.moveCursor()` moves this `WriteStream`'s cursor _relative_ to its + * current position. + * @since v0.7.7 + * @param callback Invoked once the operation completes. + * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. + */ + moveCursor(dx: number, dy: number, callback?: () => void): boolean; + /** + * Returns: + * + * * `1` for 2, + * * `4` for 16, + * * `8` for 256, + * * `24` for 16,777,216 colors supported. + * + * Use this to determine what colors the terminal supports. Due to the nature of + * colors in terminals it is possible to either have false positives or false + * negatives. It depends on process information and the environment variables that + * may lie about what terminal is used. + * It is possible to pass in an `env` object to simulate the usage of a specific + * terminal. This can be useful to check how specific environment settings behave. + * + * To enforce a specific color support, use one of the below environment settings. + * + * * 2 colors: `FORCE_COLOR = 0` (Disables colors) + * * 16 colors: `FORCE_COLOR = 1` + * * 256 colors: `FORCE_COLOR = 2` + * * 16,777,216 colors: `FORCE_COLOR = 3` + * + * Disabling color support is also possible by using the `NO_COLOR` and`NODE_DISABLE_COLORS` environment variables. + * @since v9.9.0 + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + getColorDepth(env?: object): number; + /** + * Returns `true` if the `writeStream` supports at least as many colors as provided + * in `count`. Minimum support is 2 (black and white). + * + * This has the same false positives and negatives as described in `writeStream.getColorDepth()`. + * + * ```js + * process.stdout.hasColors(); + * // Returns true or false depending on if `stdout` supports at least 16 colors. + * process.stdout.hasColors(256); + * // Returns true or false depending on if `stdout` supports at least 256 colors. + * process.stdout.hasColors({ TMUX: '1' }); + * // Returns true. + * process.stdout.hasColors(2 ** 24, { TMUX: '1' }); + * // Returns false (the environment setting pretends to support 2 ** 8 colors). + * ``` + * @since v11.13.0, v10.16.0 + * @param [count=16] The number of colors that are requested (minimum 2). + * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. + */ + hasColors(count?: number): boolean; + hasColors(env?: object): boolean; + hasColors(count: number, env?: object): boolean; + /** + * `writeStream.getWindowSize()` returns the size of the TTY + * corresponding to this `WriteStream`. The array is of the type`[numColumns, numRows]` where `numColumns` and `numRows` represent the number + * of columns and rows in the corresponding TTY. + * @since v0.7.7 + */ + getWindowSize(): [number, number]; + /** + * A `number` specifying the number of columns the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + columns: number; + /** + * A `number` specifying the number of rows the TTY currently has. This property + * is updated whenever the `'resize'` event is emitted. + * @since v0.7.7 + */ + rows: number; + /** + * A `boolean` that is always `true`. + * @since v0.5.8 + */ + isTTY: boolean; + } +} +declare module 'node:tty' { + export * from 'tty'; +} diff --git a/build/node_modules/@types/node/url.d.ts b/build/node_modules/@types/node/url.d.ts new file mode 100755 index 00000000..0ec6bd17 --- /dev/null +++ b/build/node_modules/@types/node/url.d.ts @@ -0,0 +1,891 @@ +/** + * The `url` module provides utilities for URL resolution and parsing. It can be + * accessed using: + * + * ```js + * import url from 'url'; + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/url.js) + */ +declare module 'url' { + import { Blob } from 'node:buffer'; + import { ClientRequestArgs } from 'node:http'; + import { ParsedUrlQuery, ParsedUrlQueryInput } from 'node:querystring'; + // Input to `url.format` + interface UrlObject { + auth?: string | null | undefined; + hash?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + href?: string | null | undefined; + pathname?: string | null | undefined; + protocol?: string | null | undefined; + search?: string | null | undefined; + slashes?: boolean | null | undefined; + port?: string | number | null | undefined; + query?: string | null | ParsedUrlQueryInput | undefined; + } + // Output of `url.parse` + interface Url { + auth: string | null; + hash: string | null; + host: string | null; + hostname: string | null; + href: string; + path: string | null; + pathname: string | null; + protocol: string | null; + search: string | null; + slashes: boolean | null; + port: string | null; + query: string | null | ParsedUrlQuery; + } + interface UrlWithParsedQuery extends Url { + query: ParsedUrlQuery; + } + interface UrlWithStringQuery extends Url { + query: string | null; + } + /** + * The `url.parse()` method takes a URL string, parses it, and returns a URL + * object. + * + * A `TypeError` is thrown if `urlString` is not a string. + * + * A `URIError` is thrown if the `auth` property is present but cannot be decoded. + * + * Use of the legacy `url.parse()` method is discouraged. Users should + * use the WHATWG `URL` API. Because the `url.parse()` method uses a + * lenient, non-standard algorithm for parsing URL strings, security + * issues can be introduced. Specifically, issues with [host name spoofing](https://hackerone.com/reports/678487) and + * incorrect handling of usernames and passwords have been identified. + * @since v0.1.25 + * @deprecated Legacy: Use the WHATWG URL API instead. + * @param urlString The URL string to parse. + * @param [parseQueryString=false] If `true`, the `query` property will always be set to an object returned by the {@link querystring} module's `parse()` method. If `false`, the `query` property + * on the returned URL object will be an unparsed, undecoded string. + * @param [slashesDenoteHost=false] If `true`, the first token after the literal string `//` and preceding the next `/` will be interpreted as the `host`. For instance, given `//foo/bar`, the + * result would be `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. + */ + function parse(urlString: string): UrlWithStringQuery; + function parse(urlString: string, parseQueryString: false | undefined, slashesDenoteHost?: boolean): UrlWithStringQuery; + function parse(urlString: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; + function parse(urlString: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; + /** + * The `url.format()` method returns a formatted URL string derived from`urlObject`. + * + * ```js + * const url = require('url'); + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json' + * } + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//`will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; + * * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string + * and appended to `result`followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to`result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname`_does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the + * `querystring` module's `stringify()`method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search`_does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @deprecated Legacy: Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: URL, options?: URLFormatOptions): string; + /** + * The `url.format()` method returns a formatted URL string derived from`urlObject`. + * + * ```js + * const url = require('url'); + * url.format({ + * protocol: 'https', + * hostname: 'example.com', + * pathname: '/some/path', + * query: { + * page: 1, + * format: 'json' + * } + * }); + * + * // => 'https://example.com/some/path?page=1&format=json' + * ``` + * + * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. + * + * The formatting process operates as follows: + * + * * A new empty string `result` is created. + * * If `urlObject.protocol` is a string, it is appended as-is to `result`. + * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. + * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII + * colon (`:`) character, the literal string `:` will be appended to `result`. + * * If either of the following conditions is true, then the literal string `//`will be appended to `result`: + * * `urlObject.slashes` property is true; + * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or`file`; + * * If the value of the `urlObject.auth` property is truthy, and either`urlObject.host` or `urlObject.hostname` are not `undefined`, the value of`urlObject.auth` will be coerced into a string + * and appended to `result`followed by the literal string `@`. + * * If the `urlObject.host` property is `undefined` then: + * * If the `urlObject.hostname` is a string, it is appended to `result`. + * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, + * an `Error` is thrown. + * * If the `urlObject.port` property value is truthy, and `urlObject.hostname`is not `undefined`: + * * The literal string `:` is appended to `result`, and + * * The value of `urlObject.port` is coerced to a string and appended to`result`. + * * Otherwise, if the `urlObject.host` property value is truthy, the value of`urlObject.host` is coerced to a string and appended to `result`. + * * If the `urlObject.pathname` property is a string that is not an empty string: + * * If the `urlObject.pathname`_does not start_ with an ASCII forward slash + * (`/`), then the literal string `'/'` is appended to `result`. + * * The value of `urlObject.pathname` is appended to `result`. + * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result`followed by the output of calling the + * `querystring` module's `stringify()`method passing the value of `urlObject.query`. + * * Otherwise, if `urlObject.search` is a string: + * * If the value of `urlObject.search`_does not start_ with the ASCII question + * mark (`?`) character, the literal string `?` is appended to `result`. + * * The value of `urlObject.search` is appended to `result`. + * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. + * * If the `urlObject.hash` property is a string: + * * If the value of `urlObject.hash`_does not start_ with the ASCII hash (`#`) + * character, the literal string `#` is appended to `result`. + * * The value of `urlObject.hash` is appended to `result`. + * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a + * string, an `Error` is thrown. + * * `result` is returned. + * @since v0.1.25 + * @deprecated Legacy: Use the WHATWG URL API instead. + * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. + */ + function format(urlObject: UrlObject | string): string; + /** + * The `url.resolve()` method resolves a target URL relative to a base URL in a + * manner similar to that of a Web browser resolving an anchor tag HREF. + * + * ```js + * const url = require('url'); + * url.resolve('/one/two/three', 'four'); // '/one/two/four' + * url.resolve('http://example.com/', '/one'); // 'http://example.com/one' + * url.resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * + * You can achieve the same result using the WHATWG URL API: + * + * ```js + * function resolve(from, to) { + * const resolvedUrl = new URL(to, new URL(from, 'resolve://')); + * if (resolvedUrl.protocol === 'resolve:') { + * // `from` is a relative URL. + * const { pathname, search, hash } = resolvedUrl; + * return pathname + search + hash; + * } + * return resolvedUrl.toString(); + * } + * + * resolve('/one/two/three', 'four'); // '/one/two/four' + * resolve('http://example.com/', '/one'); // 'http://example.com/one' + * resolve('http://example.com/one', '/two'); // 'http://example.com/two' + * ``` + * @since v0.1.25 + * @deprecated Legacy: Use the WHATWG URL API instead. + * @param from The Base URL being resolved against. + * @param to The HREF URL being resolved. + */ + function resolve(from: string, to: string): string; + /** + * Returns the [Punycode](https://tools.ietf.org/html/rfc5891#section-4.4) ASCII serialization of the `domain`. If `domain` is an + * invalid domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToUnicode}. + * + * This feature is only available if the `node` executable was compiled with `ICU` enabled. If not, the domain names are passed through unchanged. + * + * ```js + * import url from 'url'; + * + * console.log(url.domainToASCII('español.com')); + * // Prints xn--espaol-zwa.com + * console.log(url.domainToASCII('中文.com')); + * // Prints xn--fiq228c.com + * console.log(url.domainToASCII('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToASCII(domain: string): string; + /** + * Returns the Unicode serialization of the `domain`. If `domain` is an invalid + * domain, the empty string is returned. + * + * It performs the inverse operation to {@link domainToASCII}. + * + * This feature is only available if the `node` executable was compiled with `ICU` enabled. If not, the domain names are passed through unchanged. + * + * ```js + * import url from 'url'; + * + * console.log(url.domainToUnicode('xn--espaol-zwa.com')); + * // Prints español.com + * console.log(url.domainToUnicode('xn--fiq228c.com')); + * // Prints 中文.com + * console.log(url.domainToUnicode('xn--iñvalid.com')); + * // Prints an empty string + * ``` + * @since v7.4.0, v6.13.0 + */ + function domainToUnicode(domain: string): string; + /** + * This function ensures the correct decodings of percent-encoded characters as + * well as ensuring a cross-platform valid absolute path string. + * + * ```js + * import { fileURLToPath } from 'url'; + * + * const __filename = fileURLToPath(import.meta.url); + * + * new URL('file:///C:/path/').pathname; // Incorrect: /C:/path/ + * fileURLToPath('file:///C:/path/'); // Correct: C:\path\ (Windows) + * + * new URL('file://nas/foo.txt').pathname; // Incorrect: /foo.txt + * fileURLToPath('file://nas/foo.txt'); // Correct: \\nas\foo.txt (Windows) + * + * new URL('file:///你好.txt').pathname; // Incorrect: /%E4%BD%A0%E5%A5%BD.txt + * fileURLToPath('file:///你好.txt'); // Correct: /你好.txt (POSIX) + * + * new URL('file:///hello world').pathname; // Incorrect: /hello%20world + * fileURLToPath('file:///hello world'); // Correct: /hello world (POSIX) + * ``` + * @since v10.12.0 + * @param url The file URL string or URL object to convert to a path. + * @return The fully-resolved platform-specific Node.js file path. + */ + function fileURLToPath(url: string | URL): string; + /** + * This function ensures that `path` is resolved absolutely, and that the URL + * control characters are correctly encoded when converting into a File URL. + * + * ```js + * import { pathToFileURL } from 'url'; + * + * new URL('/foo#1', 'file:'); // Incorrect: file:///foo#1 + * pathToFileURL('/foo#1'); // Correct: file:///foo%231 (POSIX) + * + * new URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c + * pathToFileURL('/some/path%.c'); // Correct: file:///some/path%25.c (POSIX) + * ``` + * @since v10.12.0 + * @param path The path to convert to a File URL. + * @return The file URL object. + */ + function pathToFileURL(path: string): URL; + /** + * This utility function converts a URL object into an ordinary options object as + * expected by the `http.request()` and `https.request()` APIs. + * + * ```js + * import { urlToHttpOptions } from 'url'; + * const myURL = new URL('https://a:b@測試?abc#foo'); + * + * console.log(urlToHttpOptions(myURL)); + * + * { + * protocol: 'https:', + * hostname: 'xn--g6w251d', + * hash: '#foo', + * search: '?abc', + * pathname: '/', + * path: '/?abc', + * href: 'https://a:b@xn--g6w251d/?abc#foo', + * auth: 'a:b' + * } + * + * ``` + * @since v15.7.0, v14.18.0 + * @param url The `WHATWG URL` object to convert to an options object. + * @return Options object + */ + function urlToHttpOptions(url: URL): ClientRequestArgs; + interface URLFormatOptions { + auth?: boolean | undefined; + fragment?: boolean | undefined; + search?: boolean | undefined; + unicode?: boolean | undefined; + } + /** + * Browser-compatible `URL` class, implemented by following the WHATWG URL + * Standard. [Examples of parsed URLs](https://url.spec.whatwg.org/#example-url-parsing) may be found in the Standard itself. + * The `URL` class is also available on the global object. + * + * In accordance with browser conventions, all properties of `URL` objects + * are implemented as getters and setters on the class prototype, rather than as + * data properties on the object itself. Thus, unlike `legacy urlObject` s, + * using the `delete` keyword on any properties of `URL` objects (e.g. `delete myURL.protocol`, `delete myURL.pathname`, etc) has no effect but will still + * return `true`. + * @since v7.0.0, v6.13.0 + */ + class URL { + /** + * Creates a `'blob:nodedata:...'` URL string that represents the given `Blob` object and can be used to retrieve the `Blob` later. + * + * ```js + * const { + * Blob, + * resolveObjectURL, + * } = require('buffer'); + * + * const blob = new Blob(['hello']); + * const id = URL.createObjectURL(blob); + * + * // later... + * + * const otherBlob = resolveObjectURL(id); + * console.log(otherBlob.size); + * ``` + * + * The data stored by the registered `Blob` will be retained in memory until`URL.revokeObjectURL()` is called to remove it. + * + * `Blob` objects are registered within the current thread. If using Worker + * Threads, `Blob` objects registered within one Worker will not be available + * to other workers or the main thread. + * @since v16.7.0 + * @experimental + */ + static createObjectURL(blob: Blob): string; + /** + * Removes the stored `Blob` identified by the given ID. + * @since v16.7.0 + * @experimental + * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. + */ + static revokeObjectURL(objectUrl: string): void; + constructor(input: string, base?: string | URL); + /** + * Gets and sets the fragment portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/foo#bar'); + * console.log(myURL.hash); + * // Prints #bar + * + * myURL.hash = 'baz'; + * console.log(myURL.href); + * // Prints https://example.org/foo#baz + * ``` + * + * Invalid URL characters included in the value assigned to the `hash` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + hash: string; + /** + * Gets and sets the host portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.host); + * // Prints example.org:81 + * + * myURL.host = 'example.com:82'; + * console.log(myURL.href); + * // Prints https://example.com:82/foo + * ``` + * + * Invalid host values assigned to the `host` property are ignored. + */ + host: string; + /** + * Gets and sets the host name portion of the URL. The key difference between`url.host` and `url.hostname` is that `url.hostname` does _not_ include the + * port. + * + * ```js + * const myURL = new URL('https://example.org:81/foo'); + * console.log(myURL.hostname); + * // Prints example.org + * + * // Setting the hostname does not change the port + * myURL.hostname = 'example.com:82'; + * console.log(myURL.href); + * // Prints https://example.com:81/foo + * + * // Use myURL.host to change the hostname and port + * myURL.host = 'example.org:82'; + * console.log(myURL.href); + * // Prints https://example.org:82/foo + * ``` + * + * Invalid host name values assigned to the `hostname` property are ignored. + */ + hostname: string; + /** + * Gets and sets the serialized URL. + * + * ```js + * const myURL = new URL('https://example.org/foo'); + * console.log(myURL.href); + * // Prints https://example.org/foo + * + * myURL.href = 'https://example.com/bar'; + * console.log(myURL.href); + * // Prints https://example.com/bar + * ``` + * + * Getting the value of the `href` property is equivalent to calling {@link toString}. + * + * Setting the value of this property to a new value is equivalent to creating a + * new `URL` object using `new URL(value)`. Each of the `URL`object's properties will be modified. + * + * If the value assigned to the `href` property is not a valid URL, a `TypeError`will be thrown. + */ + href: string; + /** + * Gets the read-only serialization of the URL's origin. + * + * ```js + * const myURL = new URL('https://example.org/foo/bar?baz'); + * console.log(myURL.origin); + * // Prints https://example.org + * ``` + * + * ```js + * const idnURL = new URL('https://測試'); + * console.log(idnURL.origin); + * // Prints https://xn--g6w251d + * + * console.log(idnURL.hostname); + * // Prints xn--g6w251d + * ``` + */ + readonly origin: string; + /** + * Gets and sets the password portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.password); + * // Prints xyz + * + * myURL.password = '123'; + * console.log(myURL.href); + * // Prints https://abc:123@example.com + * ``` + * + * Invalid URL characters included in the value assigned to the `password` property + * are `percent-encoded`. The selection of which characters to + * percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + password: string; + /** + * Gets and sets the path portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc/xyz?123'); + * console.log(myURL.pathname); + * // Prints /abc/xyz + * + * myURL.pathname = '/abcdef'; + * console.log(myURL.href); + * // Prints https://example.org/abcdef?123 + * ``` + * + * Invalid URL characters included in the value assigned to the `pathname`property are `percent-encoded`. The selection of which characters + * to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + pathname: string; + /** + * Gets and sets the port portion of the URL. + * + * The port value may be a number or a string containing a number in the range`0` to `65535` (inclusive). Setting the value to the default port of the`URL` objects given `protocol` will + * result in the `port` value becoming + * the empty string (`''`). + * + * The port value can be an empty string in which case the port depends on + * the protocol/scheme: + * + * + * + * Upon assigning a value to the port, the value will first be converted to a + * string using `.toString()`. + * + * If that string is invalid but it begins with a number, the leading number is + * assigned to `port`. + * If the number lies outside the range denoted above, it is ignored. + * + * ```js + * const myURL = new URL('https://example.org:8888'); + * console.log(myURL.port); + * // Prints 8888 + * + * // Default ports are automatically transformed to the empty string + * // (HTTPS protocol's default port is 443) + * myURL.port = '443'; + * console.log(myURL.port); + * // Prints the empty string + * console.log(myURL.href); + * // Prints https://example.org/ + * + * myURL.port = 1234; + * console.log(myURL.port); + * // Prints 1234 + * console.log(myURL.href); + * // Prints https://example.org:1234/ + * + * // Completely invalid port strings are ignored + * myURL.port = 'abcd'; + * console.log(myURL.port); + * // Prints 1234 + * + * // Leading numbers are treated as a port number + * myURL.port = '5678abcd'; + * console.log(myURL.port); + * // Prints 5678 + * + * // Non-integers are truncated + * myURL.port = 1234.5678; + * console.log(myURL.port); + * // Prints 1234 + * + * // Out-of-range numbers which are not represented in scientific notation + * // will be ignored. + * myURL.port = 1e10; // 10000000000, will be range-checked as described below + * console.log(myURL.port); + * // Prints 1234 + * ``` + * + * Numbers which contain a decimal point, + * such as floating-point numbers or numbers in scientific notation, + * are not an exception to this rule. + * Leading numbers up to the decimal point will be set as the URL's port, + * assuming they are valid: + * + * ```js + * myURL.port = 4.567e21; + * console.log(myURL.port); + * // Prints 4 (because it is the leading number in the string '4.567e21') + * ``` + */ + port: string; + /** + * Gets and sets the protocol portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org'); + * console.log(myURL.protocol); + * // Prints https: + * + * myURL.protocol = 'ftp'; + * console.log(myURL.href); + * // Prints ftp://example.org/ + * ``` + * + * Invalid URL protocol values assigned to the `protocol` property are ignored. + */ + protocol: string; + /** + * Gets and sets the serialized query portion of the URL. + * + * ```js + * const myURL = new URL('https://example.org/abc?123'); + * console.log(myURL.search); + * // Prints ?123 + * + * myURL.search = 'abc=xyz'; + * console.log(myURL.href); + * // Prints https://example.org/abc?abc=xyz + * ``` + * + * Any invalid URL characters appearing in the value assigned the `search`property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + search: string; + /** + * Gets the `URLSearchParams` object representing the query parameters of the + * URL. This property is read-only but the `URLSearchParams` object it provides + * can be used to mutate the URL instance; to replace the entirety of query + * parameters of the URL, use the {@link search} setter. See `URLSearchParams` documentation for details. + * + * Use care when using `.searchParams` to modify the `URL` because, + * per the WHATWG specification, the `URLSearchParams` object uses + * different rules to determine which characters to percent-encode. For + * instance, the `URL` object will not percent encode the ASCII tilde (`~`) + * character, while `URLSearchParams` will always encode it: + * + * ```js + * const myUrl = new URL('https://example.org/abc?foo=~bar'); + * + * console.log(myUrl.search); // prints ?foo=~bar + * + * // Modify the URL via searchParams... + * myUrl.searchParams.sort(); + * + * console.log(myUrl.search); // prints ?foo=%7Ebar + * ``` + */ + readonly searchParams: URLSearchParams; + /** + * Gets and sets the username portion of the URL. + * + * ```js + * const myURL = new URL('https://abc:xyz@example.com'); + * console.log(myURL.username); + * // Prints abc + * + * myURL.username = '123'; + * console.log(myURL.href); + * // Prints https://123:xyz@example.com/ + * ``` + * + * Any invalid URL characters appearing in the value assigned the `username`property will be `percent-encoded`. The selection of which + * characters to percent-encode may vary somewhat from what the {@link parse} and {@link format} methods would produce. + */ + username: string; + /** + * The `toString()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toJSON}. + */ + toString(): string; + /** + * The `toJSON()` method on the `URL` object returns the serialized URL. The + * value returned is equivalent to that of {@link href} and {@link toString}. + * + * This method is automatically called when an `URL` object is serialized + * with [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). + * + * ```js + * const myURLs = [ + * new URL('https://www.example.com'), + * new URL('https://test.example.org'), + * ]; + * console.log(JSON.stringify(myURLs)); + * // Prints ["https://www.example.com/","https://test.example.org/"] + * ``` + */ + toJSON(): string; + } + /** + * The `URLSearchParams` API provides read and write access to the query of a`URL`. The `URLSearchParams` class can also be used standalone with one of the + * four following constructors. + * The `URLSearchParams` class is also available on the global object. + * + * The WHATWG `URLSearchParams` interface and the `querystring` module have + * similar purpose, but the purpose of the `querystring` module is more + * general, as it allows the customization of delimiter characters (`&` and `=`). + * On the other hand, this API is designed purely for URL query strings. + * + * ```js + * const myURL = new URL('https://example.org/?abc=123'); + * console.log(myURL.searchParams.get('abc')); + * // Prints 123 + * + * myURL.searchParams.append('abc', 'xyz'); + * console.log(myURL.href); + * // Prints https://example.org/?abc=123&abc=xyz + * + * myURL.searchParams.delete('abc'); + * myURL.searchParams.set('a', 'b'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * + * const newSearchParams = new URLSearchParams(myURL.searchParams); + * // The above is equivalent to + * // const newSearchParams = new URLSearchParams(myURL.search); + * + * newSearchParams.append('a', 'c'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b + * console.log(newSearchParams.toString()); + * // Prints a=b&a=c + * + * // newSearchParams.toString() is implicitly called + * myURL.search = newSearchParams; + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * newSearchParams.delete('a'); + * console.log(myURL.href); + * // Prints https://example.org/?a=b&a=c + * ``` + * @since v7.5.0, v6.13.0 + */ + class URLSearchParams implements Iterable<[string, string]> { + constructor(init?: URLSearchParams | string | Record> | Iterable<[string, string]> | ReadonlyArray<[string, string]>); + /** + * Append a new name-value pair to the query string. + */ + append(name: string, value: string): void; + /** + * Remove all name-value pairs whose name is `name`. + */ + delete(name: string): void; + /** + * Returns an ES6 `Iterator` over each of the name-value pairs in the query. + * Each item of the iterator is a JavaScript `Array`. The first item of the `Array`is the `name`, the second item of the `Array` is the `value`. + * + * Alias for `urlSearchParams[@@iterator]()`. + */ + entries(): IterableIterator<[string, string]>; + /** + * Iterates over each name-value pair in the query and invokes the given function. + * + * ```js + * const myURL = new URL('https://example.org/?a=b&c=d'); + * myURL.searchParams.forEach((value, name, searchParams) => { + * console.log(name, value, myURL.searchParams === searchParams); + * }); + * // Prints: + * // a b true + * // c d true + * ``` + * @param fn Invoked for each name-value pair in the query + * @param thisArg To be used as `this` value for when `fn` is called + */ + forEach(callback: (this: TThis, value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: TThis): void; + /** + * Returns the value of the first name-value pair whose name is `name`. If there + * are no such pairs, `null` is returned. + * @return or `null` if there is no name-value pair with the given `name`. + */ + get(name: string): string | null; + /** + * Returns the values of all name-value pairs whose name is `name`. If there are + * no such pairs, an empty array is returned. + */ + getAll(name: string): string[]; + /** + * Returns `true` if there is at least one name-value pair whose name is `name`. + */ + has(name: string): boolean; + /** + * Returns an ES6 `Iterator` over the names of each name-value pair. + * + * ```js + * const params = new URLSearchParams('foo=bar&foo=baz'); + * for (const name of params.keys()) { + * console.log(name); + * } + * // Prints: + * // foo + * // foo + * ``` + */ + keys(): IterableIterator; + /** + * Sets the value in the `URLSearchParams` object associated with `name` to`value`. If there are any pre-existing name-value pairs whose names are `name`, + * set the first such pair's value to `value` and remove all others. If not, + * append the name-value pair to the query string. + * + * ```js + * const params = new URLSearchParams(); + * params.append('foo', 'bar'); + * params.append('foo', 'baz'); + * params.append('abc', 'def'); + * console.log(params.toString()); + * // Prints foo=bar&foo=baz&abc=def + * + * params.set('foo', 'def'); + * params.set('xyz', 'opq'); + * console.log(params.toString()); + * // Prints foo=def&abc=def&xyz=opq + * ``` + */ + set(name: string, value: string): void; + /** + * Sort all existing name-value pairs in-place by their names. Sorting is done + * with a [stable sorting algorithm](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability), so relative order between name-value pairs + * with the same name is preserved. + * + * This method can be used, in particular, to increase cache hits. + * + * ```js + * const params = new URLSearchParams('query[]=abc&type=search&query[]=123'); + * params.sort(); + * console.log(params.toString()); + * // Prints query%5B%5D=abc&query%5B%5D=123&type=search + * ``` + * @since v7.7.0, v6.13.0 + */ + sort(): void; + /** + * Returns the search parameters serialized as a string, with characters + * percent-encoded where necessary. + */ + toString(): string; + /** + * Returns an ES6 `Iterator` over the values of each name-value pair. + */ + values(): IterableIterator; + [Symbol.iterator](): IterableIterator<[string, string]>; + } + + import { URL as _URL, URLSearchParams as _URLSearchParams } from 'url'; + global { + interface URLSearchParams extends _URLSearchParams {} + interface URL extends _URL {} + interface Global { + URL: typeof _URL; + URLSearchParams: typeof _URLSearchParams; + } + /** + * `URL` class is a global reference for `require('url').URL` + * https://nodejs.org/api/url.html#the-whatwg-url-api + * @since v10.0.0 + */ + var URL: + // For compatibility with "dom" and "webworker" URL declarations + typeof globalThis extends { onmessage: any, URL: infer URL } + ? URL + : typeof _URL; + /** + * `URLSearchParams` class is a global reference for `require('url').URLSearchParams` + * https://nodejs.org/api/url.html#class-urlsearchparams + * @since v10.0.0 + */ + var URLSearchParams: + // For compatibility with "dom" and "webworker" URLSearchParams declarations + typeof globalThis extends { onmessage: any, URLSearchParams: infer URLSearchParams } + ? URLSearchParams + : typeof _URLSearchParams; + } +} +declare module 'node:url' { + export * from 'url'; +} diff --git a/build/node_modules/@types/node/util.d.ts b/build/node_modules/@types/node/util.d.ts new file mode 100755 index 00000000..575391e3 --- /dev/null +++ b/build/node_modules/@types/node/util.d.ts @@ -0,0 +1,1594 @@ +/** + * The `util` module supports the needs of Node.js internal APIs. Many of the + * utilities are useful for application and module developers as well. To access + * it: + * + * ```js + * const util = require('util'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/util.js) + */ +declare module 'util' { + import * as types from 'node:util/types'; + export interface InspectOptions { + /** + * If set to `true`, getters are going to be + * inspected as well. If set to `'get'` only getters without setter are going + * to be inspected. If set to `'set'` only getters having a corresponding + * setter are going to be inspected. This might cause side effects depending on + * the getter function. + * @default `false` + */ + getters?: 'get' | 'set' | boolean | undefined; + showHidden?: boolean | undefined; + /** + * @default 2 + */ + depth?: number | null | undefined; + colors?: boolean | undefined; + customInspect?: boolean | undefined; + showProxy?: boolean | undefined; + maxArrayLength?: number | null | undefined; + /** + * Specifies the maximum number of characters to + * include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no characters. + * @default 10000 + */ + maxStringLength?: number | null | undefined; + breakLength?: number | undefined; + /** + * Setting this to `false` causes each object key + * to be displayed on a new line. It will also add new lines to text that is + * longer than `breakLength`. If set to a number, the most `n` inner elements + * are united on a single line as long as all properties fit into + * `breakLength`. Short array elements are also grouped together. Note that no + * text will be reduced below 16 characters, no matter the `breakLength` size. + * For more information, see the example below. + * @default `true` + */ + compact?: boolean | number | undefined; + sorted?: boolean | ((a: string, b: string) => number) | undefined; + } + export type Style = 'special' | 'number' | 'bigint' | 'boolean' | 'undefined' | 'null' | 'string' | 'symbol' | 'date' | 'regexp' | 'module'; + export type CustomInspectFunction = (depth: number, options: InspectOptionsStylized) => string; + export interface InspectOptionsStylized extends InspectOptions { + stylize(text: string, styleType: Style): string; + } + /** + * The `util.format()` method returns a formatted string using the first argument + * as a `printf`\-like format string which can contain zero or more format + * specifiers. Each specifier is replaced with the converted value from the + * corresponding argument. Supported specifiers are: + * + * If a specifier does not have a corresponding argument, it is not replaced: + * + * ```js + * util.format('%s:%s', 'foo'); + * // Returns: 'foo:%s' + * ``` + * + * Values that are not part of the format string are formatted using`util.inspect()` if their type is not `string`. + * + * If there are more arguments passed to the `util.format()` method than the + * number of specifiers, the extra arguments are concatenated to the returned + * string, separated by spaces: + * + * ```js + * util.format('%s:%s', 'foo', 'bar', 'baz'); + * // Returns: 'foo:bar baz' + * ``` + * + * If the first argument does not contain a valid format specifier, `util.format()`returns a string that is the concatenation of all arguments separated by spaces: + * + * ```js + * util.format(1, 2, 3); + * // Returns: '1 2 3' + * ``` + * + * If only one argument is passed to `util.format()`, it is returned as it is + * without any formatting: + * + * ```js + * util.format('%% %s'); + * // Returns: '%% %s' + * ``` + * + * `util.format()` is a synchronous method that is intended as a debugging tool. + * Some input values can have a significant performance overhead that can block the + * event loop. Use this function with care and never in a hot code path. + * @since v0.5.3 + * @param format A `printf`-like format string. + */ + export function format(format?: any, ...param: any[]): string; + /** + * This function is identical to {@link format}, except in that it takes + * an `inspectOptions` argument which specifies options that are passed along to {@link inspect}. + * + * ```js + * util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 }); + * // Returns 'See object { foo: 42 }', where `42` is colored as a number + * // when printed to a terminal. + * ``` + * @since v10.0.0 + */ + export function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; + /** + * Returns the string name for a numeric error code that comes from a Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const name = util.getSystemErrorName(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v9.7.0 + */ + export function getSystemErrorName(err: number): string; + /** + * Returns a Map of all system error codes available from the Node.js API. + * The mapping between error codes and error names is platform-dependent. + * See `Common System Errors` for the names of common errors. + * + * ```js + * fs.access('file/that/does/not/exist', (err) => { + * const errorMap = util.getSystemErrorMap(); + * const name = errorMap.get(err.errno); + * console.error(name); // ENOENT + * }); + * ``` + * @since v16.0.0, v14.17.0 + */ + export function getSystemErrorMap(): Map; + /** + * The `util.log()` method prints the given `string` to `stdout` with an included + * timestamp. + * + * ```js + * const util = require('util'); + * + * util.log('Timestamped message.'); + * ``` + * @since v0.3.0 + * @deprecated Since v6.0.0 - Use a third party module instead. + */ + export function log(string: string): void; + /** + * Returns the `string` after replacing any surrogate code points + * (or equivalently, any unpaired surrogate code units) with the + * Unicode "replacement character" U+FFFD. + * @since v16.8.0, v14.18.0 + */ + export function toUSVString(string: string): string; + /** + * The `util.inspect()` method returns a string representation of `object` that is + * intended for debugging. The output of `util.inspect` may change at any time + * and should not be depended upon programmatically. Additional `options` may be + * passed that alter the result.`util.inspect()` will use the constructor's name and/or `@@toStringTag` to make + * an identifiable tag for an inspected value. + * + * ```js + * class Foo { + * get [Symbol.toStringTag]() { + * return 'bar'; + * } + * } + * + * class Bar {} + * + * const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } }); + * + * util.inspect(new Foo()); // 'Foo [bar] {}' + * util.inspect(new Bar()); // 'Bar {}' + * util.inspect(baz); // '[foo] {}' + * ``` + * + * Circular references point to their anchor by using a reference index: + * + * ```js + * const { inspect } = require('util'); + * + * const obj = {}; + * obj.a = [obj]; + * obj.b = {}; + * obj.b.inner = obj.b; + * obj.b.obj = obj; + * + * console.log(inspect(obj)); + * // { + * // a: [ [Circular *1] ], + * // b: { inner: [Circular *2], obj: [Circular *1] } + * // } + * ``` + * + * The following example inspects all properties of the `util` object: + * + * ```js + * const util = require('util'); + * + * console.log(util.inspect(util, { showHidden: true, depth: null })); + * ``` + * + * The following example highlights the effect of the `compact` option: + * + * ```js + * const util = require('util'); + * + * const o = { + * a: [1, 2, [[ + * 'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' + + * 'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.', + * 'test', + * 'foo']], 4], + * b: new Map([['za', 1], ['zb', 'test']]) + * }; + * console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 })); + * + * // { a: + * // [ 1, + * // 2, + * // [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line + * // 'test', + * // 'foo' ] ], + * // 4 ], + * // b: Map(2) { 'za' => 1, 'zb' => 'test' } } + * + * // Setting `compact` to false or an integer creates more reader friendly output. + * console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 })); + * + * // { + * // a: [ + * // 1, + * // 2, + * // [ + * // [ + * // 'Lorem ipsum dolor sit amet,\n' + + * // 'consectetur adipiscing elit, sed do eiusmod \n' + + * // 'tempor incididunt ut labore et dolore magna aliqua.', + * // 'test', + * // 'foo' + * // ] + * // ], + * // 4 + * // ], + * // b: Map(2) { + * // 'za' => 1, + * // 'zb' => 'test' + * // } + * // } + * + * // Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a + * // single line. + * ``` + * + * The `showHidden` option allows [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) and + * [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) entries to be + * inspected. If there are more entries than `maxArrayLength`, there is no + * guarantee which entries are displayed. That means retrieving the same [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) entries twice may + * result in different output. Furthermore, entries + * with no remaining strong references may be garbage collected at any time. + * + * ```js + * const { inspect } = require('util'); + * + * const obj = { a: 1 }; + * const obj2 = { b: 2 }; + * const weakSet = new WeakSet([obj, obj2]); + * + * console.log(inspect(weakSet, { showHidden: true })); + * // WeakSet { { a: 1 }, { b: 2 } } + * ``` + * + * The `sorted` option ensures that an object's property insertion order does not + * impact the result of `util.inspect()`. + * + * ```js + * const { inspect } = require('util'); + * const assert = require('assert'); + * + * const o1 = { + * b: [2, 3, 1], + * a: '`a` comes before `b`', + * c: new Set([2, 3, 1]) + * }; + * console.log(inspect(o1, { sorted: true })); + * // { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } } + * console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) })); + * // { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' } + * + * const o2 = { + * c: new Set([2, 1, 3]), + * a: '`a` comes before `b`', + * b: [2, 3, 1] + * }; + * assert.strict.equal( + * inspect(o1, { sorted: true }), + * inspect(o2, { sorted: true }) + * ); + * ``` + * + * `util.inspect()` is a synchronous method intended for debugging. Its maximum + * output length is approximately 128 MB. Inputs that result in longer output will + * be truncated. + * @since v0.3.0 + * @param object Any JavaScript primitive or `Object`. + * @return The representation of `object`. + */ + export function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; + export function inspect(object: any, options?: InspectOptions): string; + export namespace inspect { + let colors: NodeJS.Dict<[number, number]>; + let styles: { + [K in Style]: string; + }; + let defaultOptions: InspectOptions; + /** + * Allows changing inspect settings from the repl. + */ + let replDefaults: InspectOptions; + /** + * That can be used to declare custom inspect functions. + */ + const custom: unique symbol; + } + /** + * Alias for [`Array.isArray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray). + * + * Returns `true` if the given `object` is an `Array`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isArray([]); + * // Returns: true + * util.isArray(new Array()); + * // Returns: true + * util.isArray({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use `isArray` instead. + */ + export function isArray(object: unknown): object is unknown[]; + /** + * Returns `true` if the given `object` is a `RegExp`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isRegExp(/some regexp/); + * // Returns: true + * util.isRegExp(new RegExp('another regexp')); + * // Returns: true + * util.isRegExp({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Deprecated + */ + export function isRegExp(object: unknown): object is RegExp; + /** + * Returns `true` if the given `object` is a `Date`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isDate(new Date()); + * // Returns: true + * util.isDate(Date()); + * // false (without 'new' returns a String) + * util.isDate({}); + * // Returns: false + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use {@link types.isDate} instead. + */ + export function isDate(object: unknown): object is Date; + /** + * Returns `true` if the given `object` is an `Error`. Otherwise, returns`false`. + * + * ```js + * const util = require('util'); + * + * util.isError(new Error()); + * // Returns: true + * util.isError(new TypeError()); + * // Returns: true + * util.isError({ name: 'Error', message: 'an error occurred' }); + * // Returns: false + * ``` + * + * This method relies on `Object.prototype.toString()` behavior. It is + * possible to obtain an incorrect result when the `object` argument manipulates`@@toStringTag`. + * + * ```js + * const util = require('util'); + * const obj = { name: 'Error', message: 'an error occurred' }; + * + * util.isError(obj); + * // Returns: false + * obj[Symbol.toStringTag] = 'Error'; + * util.isError(obj); + * // Returns: true + * ``` + * @since v0.6.0 + * @deprecated Since v4.0.0 - Use {@link types.isNativeError} instead. + */ + export function isError(object: unknown): object is Error; + /** + * Usage of `util.inherits()` is discouraged. Please use the ES6 `class` and`extends` keywords to get language level inheritance support. Also note + * that the two styles are [semantically incompatible](https://github.com/nodejs/node/issues/4179). + * + * Inherit the prototype methods from one [constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor) into another. The + * prototype of `constructor` will be set to a new object created from`superConstructor`. + * + * This mainly adds some input validation on top of`Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)`. + * As an additional convenience, `superConstructor` will be accessible + * through the `constructor.super_` property. + * + * ```js + * const util = require('util'); + * const EventEmitter = require('events'); + * + * function MyStream() { + * EventEmitter.call(this); + * } + * + * util.inherits(MyStream, EventEmitter); + * + * MyStream.prototype.write = function(data) { + * this.emit('data', data); + * }; + * + * const stream = new MyStream(); + * + * console.log(stream instanceof EventEmitter); // true + * console.log(MyStream.super_ === EventEmitter); // true + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('It works!'); // Received data: "It works!" + * ``` + * + * ES6 example using `class` and `extends`: + * + * ```js + * const EventEmitter = require('events'); + * + * class MyStream extends EventEmitter { + * write(data) { + * this.emit('data', data); + * } + * } + * + * const stream = new MyStream(); + * + * stream.on('data', (data) => { + * console.log(`Received data: "${data}"`); + * }); + * stream.write('With ES6'); + * ``` + * @since v0.3.0 + * @deprecated Legacy: Use ES2015 class syntax and `extends` keyword instead. + */ + export function inherits(constructor: unknown, superConstructor: unknown): void; + export type DebugLoggerFunction = (msg: string, ...param: unknown[]) => void; + export interface DebugLogger extends DebugLoggerFunction { + enabled: boolean; + } + /** + * The `util.debuglog()` method is used to create a function that conditionally + * writes debug messages to `stderr` based on the existence of the `NODE_DEBUG`environment variable. If the `section` name appears within the value of that + * environment variable, then the returned function operates similar to `console.error()`. If not, then the returned function is a no-op. + * + * ```js + * const util = require('util'); + * const debuglog = util.debuglog('foo'); + * + * debuglog('hello from foo [%d]', 123); + * ``` + * + * If this program is run with `NODE_DEBUG=foo` in the environment, then + * it will output something like: + * + * ```console + * FOO 3245: hello from foo [123] + * ``` + * + * where `3245` is the process id. If it is not run with that + * environment variable set, then it will not print anything. + * + * The `section` supports wildcard also: + * + * ```js + * const util = require('util'); + * const debuglog = util.debuglog('foo-bar'); + * + * debuglog('hi there, it\'s foo-bar [%d]', 2333); + * ``` + * + * if it is run with `NODE_DEBUG=foo*` in the environment, then it will output + * something like: + * + * ```console + * FOO-BAR 3257: hi there, it's foo-bar [2333] + * ``` + * + * Multiple comma-separated `section` names may be specified in the `NODE_DEBUG`environment variable: `NODE_DEBUG=fs,net,tls`. + * + * The optional `callback` argument can be used to replace the logging function + * with a different function that doesn't have any initialization or + * unnecessary wrapping. + * + * ```js + * const util = require('util'); + * let debuglog = util.debuglog('internals', (debug) => { + * // Replace with a logging function that optimizes out + * // testing if the section is enabled + * debuglog = debug; + * }); + * ``` + * @since v0.11.3 + * @param section A string identifying the portion of the application for which the `debuglog` function is being created. + * @param callback A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function. + * @return The logging function + */ + export function debuglog(section: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; + export const debug: typeof debuglog; + /** + * Returns `true` if the given `object` is a `Boolean`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isBoolean(1); + * // Returns: false + * util.isBoolean(0); + * // Returns: false + * util.isBoolean(false); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'boolean'` instead. + */ + export function isBoolean(object: unknown): object is boolean; + /** + * Returns `true` if the given `object` is a `Buffer`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isBuffer({ length: 0 }); + * // Returns: false + * util.isBuffer([]); + * // Returns: false + * util.isBuffer(Buffer.from('hello world')); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `isBuffer` instead. + */ + export function isBuffer(object: unknown): object is Buffer; + /** + * Returns `true` if the given `object` is a `Function`. Otherwise, returns`false`. + * + * ```js + * const util = require('util'); + * + * function Foo() {} + * const Bar = () => {}; + * + * util.isFunction({}); + * // Returns: false + * util.isFunction(Foo); + * // Returns: true + * util.isFunction(Bar); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'function'` instead. + */ + export function isFunction(object: unknown): boolean; + /** + * Returns `true` if the given `object` is strictly `null`. Otherwise, returns`false`. + * + * ```js + * const util = require('util'); + * + * util.isNull(0); + * // Returns: false + * util.isNull(undefined); + * // Returns: false + * util.isNull(null); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === null` instead. + */ + export function isNull(object: unknown): object is null; + /** + * Returns `true` if the given `object` is `null` or `undefined`. Otherwise, + * returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isNullOrUndefined(0); + * // Returns: false + * util.isNullOrUndefined(undefined); + * // Returns: true + * util.isNullOrUndefined(null); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === undefined || value === null` instead. + */ + export function isNullOrUndefined(object: unknown): object is null | undefined; + /** + * Returns `true` if the given `object` is a `Number`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isNumber(false); + * // Returns: false + * util.isNumber(Infinity); + * // Returns: true + * util.isNumber(0); + * // Returns: true + * util.isNumber(NaN); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'number'` instead. + */ + export function isNumber(object: unknown): object is number; + /** + * Returns `true` if the given `object` is strictly an `Object`**and** not a`Function` (even though functions are objects in JavaScript). + * Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isObject(5); + * // Returns: false + * util.isObject(null); + * // Returns: false + * util.isObject({}); + * // Returns: true + * util.isObject(() => {}); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Deprecated: Use `value !== null && typeof value === 'object'` instead. + */ + export function isObject(object: unknown): boolean; + /** + * Returns `true` if the given `object` is a primitive type. Otherwise, returns`false`. + * + * ```js + * const util = require('util'); + * + * util.isPrimitive(5); + * // Returns: true + * util.isPrimitive('foo'); + * // Returns: true + * util.isPrimitive(false); + * // Returns: true + * util.isPrimitive(null); + * // Returns: true + * util.isPrimitive(undefined); + * // Returns: true + * util.isPrimitive({}); + * // Returns: false + * util.isPrimitive(() => {}); + * // Returns: false + * util.isPrimitive(/^$/); + * // Returns: false + * util.isPrimitive(new Date()); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. + */ + export function isPrimitive(object: unknown): boolean; + /** + * Returns `true` if the given `object` is a `string`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isString(''); + * // Returns: true + * util.isString('foo'); + * // Returns: true + * util.isString(String('foo')); + * // Returns: true + * util.isString(5); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'string'` instead. + */ + export function isString(object: unknown): object is string; + /** + * Returns `true` if the given `object` is a `Symbol`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * util.isSymbol(5); + * // Returns: false + * util.isSymbol('foo'); + * // Returns: false + * util.isSymbol(Symbol('foo')); + * // Returns: true + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `typeof value === 'symbol'` instead. + */ + export function isSymbol(object: unknown): object is symbol; + /** + * Returns `true` if the given `object` is `undefined`. Otherwise, returns `false`. + * + * ```js + * const util = require('util'); + * + * const foo = undefined; + * util.isUndefined(5); + * // Returns: false + * util.isUndefined(foo); + * // Returns: true + * util.isUndefined(null); + * // Returns: false + * ``` + * @since v0.11.5 + * @deprecated Since v4.0.0 - Use `value === undefined` instead. + */ + export function isUndefined(object: unknown): object is undefined; + /** + * The `util.deprecate()` method wraps `fn` (which may be a function or class) in + * such a way that it is marked as deprecated. + * + * ```js + * const util = require('util'); + * + * exports.obsoleteFunction = util.deprecate(() => { + * // Do something here. + * }, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.'); + * ``` + * + * When called, `util.deprecate()` will return a function that will emit a`DeprecationWarning` using the `'warning'` event. The warning will + * be emitted and printed to `stderr` the first time the returned function is + * called. After the warning is emitted, the wrapped function is called without + * emitting a warning. + * + * If the same optional `code` is supplied in multiple calls to `util.deprecate()`, + * the warning will be emitted only once for that `code`. + * + * ```js + * const util = require('util'); + * + * const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001'); + * const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001'); + * fn1(); // Emits a deprecation warning with code DEP0001 + * fn2(); // Does not emit a deprecation warning because it has the same code + * ``` + * + * If either the `--no-deprecation` or `--no-warnings` command-line flags are + * used, or if the `process.noDeprecation` property is set to `true`_prior_ to + * the first deprecation warning, the `util.deprecate()` method does nothing. + * + * If the `--trace-deprecation` or `--trace-warnings` command-line flags are set, + * or the `process.traceDeprecation` property is set to `true`, a warning and a + * stack trace are printed to `stderr` the first time the deprecated function is + * called. + * + * If the `--throw-deprecation` command-line flag is set, or the`process.throwDeprecation` property is set to `true`, then an exception will be + * thrown when the deprecated function is called. + * + * The `--throw-deprecation` command-line flag and `process.throwDeprecation`property take precedence over `--trace-deprecation` and`process.traceDeprecation`. + * @since v0.8.0 + * @param fn The function that is being deprecated. + * @param msg A warning message to display when the deprecated function is invoked. + * @param code A deprecation code. See the `list of deprecated APIs` for a list of codes. + * @return The deprecated function wrapped to emit a warning. + */ + export function deprecate(fn: T, msg: string, code?: string): T; + /** + * Returns `true` if there is deep strict equality between `val1` and `val2`. + * Otherwise, returns `false`. + * + * See `assert.deepStrictEqual()` for more information about deep strict + * equality. + * @since v9.0.0 + */ + export function isDeepStrictEqual(val1: unknown, val2: unknown): boolean; + /** + * Returns `str` with any ANSI escape codes removed. + * + * ```js + * console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m')); + * // Prints "value" + * ``` + * @since v16.11.0 + */ + export function stripVTControlCharacters(str: string): string; + /** + * Takes an `async` function (or a function that returns a `Promise`) and returns a + * function following the error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument. In the callback, the + * first argument will be the rejection reason (or `null` if the `Promise`resolved), and the second argument will be the resolved value. + * + * ```js + * const util = require('util'); + * + * async function fn() { + * return 'hello world'; + * } + * const callbackFunction = util.callbackify(fn); + * + * callbackFunction((err, ret) => { + * if (err) throw err; + * console.log(ret); + * }); + * ``` + * + * Will print: + * + * ```text + * hello world + * ``` + * + * The callback is executed asynchronously, and will have a limited stack trace. + * If the callback throws, the process will emit an `'uncaughtException'` event, and if not handled will exit. + * + * Since `null` has a special meaning as the first argument to a callback, if a + * wrapped function rejects a `Promise` with a falsy value as a reason, the value + * is wrapped in an `Error` with the original value stored in a field named`reason`. + * + * ```js + * function fn() { + * return Promise.reject(null); + * } + * const callbackFunction = util.callbackify(fn); + * + * callbackFunction((err, ret) => { + * // When the Promise was rejected with `null` it is wrapped with an Error and + * // the original value is stored in `reason`. + * err && err.hasOwnProperty('reason') && err.reason === null; // true + * }); + * ``` + * @since v8.2.0 + * @param original An `async` function + * @return a callback style function + */ + export function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify(fn: (arg1: T1) => Promise): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify(fn: (arg1: T1) => Promise): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + export function callbackify(fn: (arg1: T1, arg2: T2) => Promise): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify(fn: (arg1: T1, arg2: T2) => Promise): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void; + export function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + export interface CustomPromisifyLegacy extends Function { + __promisify__: TCustom; + } + export interface CustomPromisifySymbol extends Function { + [promisify.custom]: TCustom; + } + export type CustomPromisify = CustomPromisifySymbol | CustomPromisifyLegacy; + /** + * Takes a function following the common error-first callback style, i.e. taking + * an `(err, value) => ...` callback as the last argument, and returns a version + * that returns promises. + * + * ```js + * const util = require('util'); + * const fs = require('fs'); + * + * const stat = util.promisify(fs.stat); + * stat('.').then((stats) => { + * // Do something with `stats` + * }).catch((error) => { + * // Handle the error. + * }); + * ``` + * + * Or, equivalently using `async function`s: + * + * ```js + * const util = require('util'); + * const fs = require('fs'); + * + * const stat = util.promisify(fs.stat); + * + * async function callStat() { + * const stats = await stat('.'); + * console.log(`This directory is owned by ${stats.uid}`); + * } + * ``` + * + * If there is an `original[util.promisify.custom]` property present, `promisify`will return its value, see `Custom promisified functions`. + * + * `promisify()` assumes that `original` is a function taking a callback as its + * final argument in all cases. If `original` is not a function, `promisify()`will throw an error. If `original` is a function but its last argument is not + * an error-first callback, it will still be passed an error-first + * callback as its last argument. + * + * Using `promisify()` on class methods or other methods that use `this` may not + * work as expected unless handled specially: + * + * ```js + * const util = require('util'); + * + * class Foo { + * constructor() { + * this.a = 42; + * } + * + * bar(callback) { + * callback(null, this.a); + * } + * } + * + * const foo = new Foo(); + * + * const naiveBar = util.promisify(foo.bar); + * // TypeError: Cannot read property 'a' of undefined + * // naiveBar().then(a => console.log(a)); + * + * naiveBar.call(foo).then((a) => console.log(a)); // '42' + * + * const bindBar = naiveBar.bind(foo); + * bindBar().then((a) => console.log(a)); // '42' + * ``` + * @since v8.0.0 + */ + export function promisify(fn: CustomPromisify): TCustom; + export function promisify(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise; + export function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; + export function promisify(fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void): (arg1: T1) => Promise; + export function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; + export function promisify(fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2) => Promise; + export function promisify(fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2) => Promise; + export function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + export function promisify(fn: Function): Function; + export namespace promisify { + /** + * That can be used to declare custom promisified variants of functions. + */ + const custom: unique symbol; + } + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextDecoder` API. + * + * ```js + * const decoder = new TextDecoder('shift_jis'); + * let string = ''; + * let buffer; + * while (buffer = getNextChunkSomehow()) { + * string += decoder.decode(buffer, { stream: true }); + * } + * string += decoder.decode(); // end-of-stream + * ``` + * @since v8.3.0 + */ + export class TextDecoder { + /** + * The encoding supported by the `TextDecoder` instance. + */ + readonly encoding: string; + /** + * The value will be `true` if decoding errors result in a `TypeError` being + * thrown. + */ + readonly fatal: boolean; + /** + * The value will be `true` if the decoding result will include the byte order + * mark. + */ + readonly ignoreBOM: boolean; + constructor( + encoding?: string, + options?: { + fatal?: boolean | undefined; + ignoreBOM?: boolean | undefined; + } + ); + /** + * Decodes the `input` and returns a string. If `options.stream` is `true`, any + * incomplete byte sequences occurring at the end of the `input` are buffered + * internally and emitted after the next call to `textDecoder.decode()`. + * + * If `textDecoder.fatal` is `true`, decoding errors that occur will result in a`TypeError` being thrown. + * @param input An `ArrayBuffer`, `DataView` or `TypedArray` instance containing the encoded data. + */ + decode( + input?: NodeJS.ArrayBufferView | ArrayBuffer | null, + options?: { + stream?: boolean | undefined; + } + ): string; + } + export interface EncodeIntoResult { + /** + * The read Unicode code units of input. + */ + read: number; + /** + * The written UTF-8 bytes of output. + */ + written: number; + } + export { types }; + /** + * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextEncoder` API. All + * instances of `TextEncoder` only support UTF-8 encoding. + * + * ```js + * const encoder = new TextEncoder(); + * const uint8array = encoder.encode('this is some data'); + * ``` + * + * The `TextEncoder` class is also available on the global object. + * @since v8.3.0 + */ + export class TextEncoder { + /** + * The encoding supported by the `TextEncoder` instance. Always set to `'utf-8'`. + */ + readonly encoding: string; + /** + * UTF-8 encodes the `input` string and returns a `Uint8Array` containing the + * encoded bytes. + * @param [input='an empty string'] The text to encode. + */ + encode(input?: string): Uint8Array; + /** + * UTF-8 encodes the `src` string to the `dest` Uint8Array and returns an object + * containing the read Unicode code units and written UTF-8 bytes. + * + * ```js + * const encoder = new TextEncoder(); + * const src = 'this is some data'; + * const dest = new Uint8Array(10); + * const { read, written } = encoder.encodeInto(src, dest); + * ``` + * @param src The text to encode. + * @param dest The array to hold the encode result. + */ + encodeInto(src: string, dest: Uint8Array): EncodeIntoResult; + } +} +declare module 'util/types' { + export * from 'util/types'; +} +declare module 'util/types' { + import { KeyObject, webcrypto } from 'node:crypto'; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) or + * [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * + * See also `util.types.isArrayBuffer()` and `util.types.isSharedArrayBuffer()`. + * + * ```js + * util.types.isAnyArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isAnyArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isAnyArrayBuffer(object: unknown): object is ArrayBufferLike; + /** + * Returns `true` if the value is an `arguments` object. + * + * ```js + * function foo() { + * util.types.isArgumentsObject(arguments); // Returns true + * } + * ``` + * @since v10.0.0 + */ + function isArgumentsObject(object: unknown): object is IArguments; + /** + * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instance. + * This does _not_ include [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isArrayBuffer(new ArrayBuffer()); // Returns true + * util.types.isArrayBuffer(new SharedArrayBuffer()); // Returns false + * ``` + * @since v10.0.0 + */ + function isArrayBuffer(object: unknown): object is ArrayBuffer; + /** + * Returns `true` if the value is an instance of one of the [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) views, such as typed + * array objects or [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView). Equivalent to + * [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * + * ```js + * util.types.isArrayBufferView(new Int8Array()); // true + * util.types.isArrayBufferView(Buffer.from('hello world')); // true + * util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))); // true + * util.types.isArrayBufferView(new ArrayBuffer()); // false + * ``` + * @since v10.0.0 + */ + function isArrayBufferView(object: unknown): object is NodeJS.ArrayBufferView; + /** + * Returns `true` if the value is an [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isAsyncFunction(function foo() {}); // Returns false + * util.types.isAsyncFunction(async function foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isAsyncFunction(object: unknown): boolean; + /** + * Returns `true` if the value is a `BigInt64Array` instance. + * + * ```js + * util.types.isBigInt64Array(new BigInt64Array()); // Returns true + * util.types.isBigInt64Array(new BigUint64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isBigInt64Array(value: unknown): value is BigInt64Array; + /** + * Returns `true` if the value is a `BigUint64Array` instance. + * + * ```js + * util.types.isBigUint64Array(new BigInt64Array()); // Returns false + * util.types.isBigUint64Array(new BigUint64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isBigUint64Array(value: unknown): value is BigUint64Array; + /** + * Returns `true` if the value is a boolean object, e.g. created + * by `new Boolean()`. + * + * ```js + * util.types.isBooleanObject(false); // Returns false + * util.types.isBooleanObject(true); // Returns false + * util.types.isBooleanObject(new Boolean(false)); // Returns true + * util.types.isBooleanObject(new Boolean(true)); // Returns true + * util.types.isBooleanObject(Boolean(false)); // Returns false + * util.types.isBooleanObject(Boolean(true)); // Returns false + * ``` + * @since v10.0.0 + */ + function isBooleanObject(object: unknown): object is Boolean; + /** + * Returns `true` if the value is any boxed primitive object, e.g. created + * by `new Boolean()`, `new String()` or `Object(Symbol())`. + * + * For example: + * + * ```js + * util.types.isBoxedPrimitive(false); // Returns false + * util.types.isBoxedPrimitive(new Boolean(false)); // Returns true + * util.types.isBoxedPrimitive(Symbol('foo')); // Returns false + * util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true + * util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true + * ``` + * @since v10.11.0 + */ + function isBoxedPrimitive(object: unknown): object is String | Number | BigInt | Boolean | Symbol; + /** + * Returns `true` if the value is a built-in [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) instance. + * + * ```js + * const ab = new ArrayBuffer(20); + * util.types.isDataView(new DataView(ab)); // Returns true + * util.types.isDataView(new Float64Array()); // Returns false + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isDataView(object: unknown): object is DataView; + /** + * Returns `true` if the value is a built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. + * + * ```js + * util.types.isDate(new Date()); // Returns true + * ``` + * @since v10.0.0 + */ + function isDate(object: unknown): object is Date; + /** + * Returns `true` if the value is a native `External` value. + * + * A native `External` value is a special type of object that contains a + * raw C++ pointer (`void*`) for access from native code, and has no other + * properties. Such objects are created either by Node.js internals or native + * addons. In JavaScript, they are [frozen](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) objects with a`null` prototype. + * + * ```c + * #include + * #include + * napi_value result; + * static napi_value MyNapi(napi_env env, napi_callback_info info) { + * int* raw = (int*) malloc(1024); + * napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result); + * if (status != napi_ok) { + * napi_throw_error(env, NULL, "napi_create_external failed"); + * return NULL; + * } + * return result; + * } + * ... + * DECLARE_NAPI_PROPERTY("myNapi", MyNapi) + * ... + * ``` + * + * ```js + * const native = require('napi_addon.node'); + * const data = native.myNapi(); + * util.types.isExternal(data); // returns true + * util.types.isExternal(0); // returns false + * util.types.isExternal(new String('foo')); // returns false + * ``` + * + * For further information on `napi_create_external`, refer to `napi_create_external()`. + * @since v10.0.0 + */ + function isExternal(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`Float32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array) instance. + * + * ```js + * util.types.isFloat32Array(new ArrayBuffer()); // Returns false + * util.types.isFloat32Array(new Float32Array()); // Returns true + * util.types.isFloat32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isFloat32Array(object: unknown): object is Float32Array; + /** + * Returns `true` if the value is a built-in [`Float64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array) instance. + * + * ```js + * util.types.isFloat64Array(new ArrayBuffer()); // Returns false + * util.types.isFloat64Array(new Uint8Array()); // Returns false + * util.types.isFloat64Array(new Float64Array()); // Returns true + * ``` + * @since v10.0.0 + */ + function isFloat64Array(object: unknown): object is Float64Array; + /** + * Returns `true` if the value is a generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * util.types.isGeneratorFunction(function foo() {}); // Returns false + * util.types.isGeneratorFunction(function* foo() {}); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorFunction(object: unknown): object is GeneratorFunction; + /** + * Returns `true` if the value is a generator object as returned from a + * built-in generator function. + * This only reports back what the JavaScript engine is seeing; + * in particular, the return value may not match the original source code if + * a transpilation tool was used. + * + * ```js + * function* foo() {} + * const generator = foo(); + * util.types.isGeneratorObject(generator); // Returns true + * ``` + * @since v10.0.0 + */ + function isGeneratorObject(object: unknown): object is Generator; + /** + * Returns `true` if the value is a built-in [`Int8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array) instance. + * + * ```js + * util.types.isInt8Array(new ArrayBuffer()); // Returns false + * util.types.isInt8Array(new Int8Array()); // Returns true + * util.types.isInt8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt8Array(object: unknown): object is Int8Array; + /** + * Returns `true` if the value is a built-in [`Int16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array) instance. + * + * ```js + * util.types.isInt16Array(new ArrayBuffer()); // Returns false + * util.types.isInt16Array(new Int16Array()); // Returns true + * util.types.isInt16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt16Array(object: unknown): object is Int16Array; + /** + * Returns `true` if the value is a built-in [`Int32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array) instance. + * + * ```js + * util.types.isInt32Array(new ArrayBuffer()); // Returns false + * util.types.isInt32Array(new Int32Array()); // Returns true + * util.types.isInt32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isInt32Array(object: unknown): object is Int32Array; + /** + * Returns `true` if the value is a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * util.types.isMap(new Map()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMap(object: T | {}): object is T extends ReadonlyMap ? (unknown extends T ? never : ReadonlyMap) : Map; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. + * + * ```js + * const map = new Map(); + * util.types.isMapIterator(map.keys()); // Returns true + * util.types.isMapIterator(map.values()); // Returns true + * util.types.isMapIterator(map.entries()); // Returns true + * util.types.isMapIterator(map[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isMapIterator(object: unknown): boolean; + /** + * Returns `true` if the value is an instance of a [Module Namespace Object](https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects). + * + * ```js + * import * as ns from './a.js'; + * + * util.types.isModuleNamespaceObject(ns); // Returns true + * ``` + * @since v10.0.0 + */ + function isModuleNamespaceObject(value: unknown): boolean; + /** + * Returns `true` if the value is an instance of a built-in `Error` type. + * + * ```js + * util.types.isNativeError(new Error()); // Returns true + * util.types.isNativeError(new TypeError()); // Returns true + * util.types.isNativeError(new RangeError()); // Returns true + * ``` + * @since v10.0.0 + */ + function isNativeError(object: unknown): object is Error; + /** + * Returns `true` if the value is a number object, e.g. created + * by `new Number()`. + * + * ```js + * util.types.isNumberObject(0); // Returns false + * util.types.isNumberObject(new Number(0)); // Returns true + * ``` + * @since v10.0.0 + */ + function isNumberObject(object: unknown): object is Number; + /** + * Returns `true` if the value is a built-in [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). + * + * ```js + * util.types.isPromise(Promise.resolve(42)); // Returns true + * ``` + * @since v10.0.0 + */ + function isPromise(object: unknown): object is Promise; + /** + * Returns `true` if the value is a [`Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) instance. + * + * ```js + * const target = {}; + * const proxy = new Proxy(target, {}); + * util.types.isProxy(target); // Returns false + * util.types.isProxy(proxy); // Returns true + * ``` + * @since v10.0.0 + */ + function isProxy(object: unknown): boolean; + /** + * Returns `true` if the value is a regular expression object. + * + * ```js + * util.types.isRegExp(/abc/); // Returns true + * util.types.isRegExp(new RegExp('abc')); // Returns true + * ``` + * @since v10.0.0 + */ + function isRegExp(object: unknown): object is RegExp; + /** + * Returns `true` if the value is a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * util.types.isSet(new Set()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSet(object: T | {}): object is T extends ReadonlySet ? (unknown extends T ? never : ReadonlySet) : Set; + /** + * Returns `true` if the value is an iterator returned for a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. + * + * ```js + * const set = new Set(); + * util.types.isSetIterator(set.keys()); // Returns true + * util.types.isSetIterator(set.values()); // Returns true + * util.types.isSetIterator(set.entries()); // Returns true + * util.types.isSetIterator(set[Symbol.iterator]()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSetIterator(object: unknown): boolean; + /** + * Returns `true` if the value is a built-in [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. + * This does _not_ include [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instances. Usually, it is + * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. + * + * ```js + * util.types.isSharedArrayBuffer(new ArrayBuffer()); // Returns false + * util.types.isSharedArrayBuffer(new SharedArrayBuffer()); // Returns true + * ``` + * @since v10.0.0 + */ + function isSharedArrayBuffer(object: unknown): object is SharedArrayBuffer; + /** + * Returns `true` if the value is a string object, e.g. created + * by `new String()`. + * + * ```js + * util.types.isStringObject('foo'); // Returns false + * util.types.isStringObject(new String('foo')); // Returns true + * ``` + * @since v10.0.0 + */ + function isStringObject(object: unknown): object is String; + /** + * Returns `true` if the value is a symbol object, created + * by calling `Object()` on a `Symbol` primitive. + * + * ```js + * const symbol = Symbol('foo'); + * util.types.isSymbolObject(symbol); // Returns false + * util.types.isSymbolObject(Object(symbol)); // Returns true + * ``` + * @since v10.0.0 + */ + function isSymbolObject(object: unknown): object is Symbol; + /** + * Returns `true` if the value is a built-in [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) instance. + * + * ```js + * util.types.isTypedArray(new ArrayBuffer()); // Returns false + * util.types.isTypedArray(new Uint8Array()); // Returns true + * util.types.isTypedArray(new Float64Array()); // Returns true + * ``` + * + * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). + * @since v10.0.0 + */ + function isTypedArray(object: unknown): object is NodeJS.TypedArray; + /** + * Returns `true` if the value is a built-in [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instance. + * + * ```js + * util.types.isUint8Array(new ArrayBuffer()); // Returns false + * util.types.isUint8Array(new Uint8Array()); // Returns true + * util.types.isUint8Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8Array(object: unknown): object is Uint8Array; + /** + * Returns `true` if the value is a built-in [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) instance. + * + * ```js + * util.types.isUint8ClampedArray(new ArrayBuffer()); // Returns false + * util.types.isUint8ClampedArray(new Uint8ClampedArray()); // Returns true + * util.types.isUint8ClampedArray(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint8ClampedArray(object: unknown): object is Uint8ClampedArray; + /** + * Returns `true` if the value is a built-in [`Uint16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array) instance. + * + * ```js + * util.types.isUint16Array(new ArrayBuffer()); // Returns false + * util.types.isUint16Array(new Uint16Array()); // Returns true + * util.types.isUint16Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint16Array(object: unknown): object is Uint16Array; + /** + * Returns `true` if the value is a built-in [`Uint32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array) instance. + * + * ```js + * util.types.isUint32Array(new ArrayBuffer()); // Returns false + * util.types.isUint32Array(new Uint32Array()); // Returns true + * util.types.isUint32Array(new Float64Array()); // Returns false + * ``` + * @since v10.0.0 + */ + function isUint32Array(object: unknown): object is Uint32Array; + /** + * Returns `true` if the value is a built-in [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) instance. + * + * ```js + * util.types.isWeakMap(new WeakMap()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakMap(object: unknown): object is WeakMap; + /** + * Returns `true` if the value is a built-in [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) instance. + * + * ```js + * util.types.isWeakSet(new WeakSet()); // Returns true + * ``` + * @since v10.0.0 + */ + function isWeakSet(object: unknown): object is WeakSet; + /** + * Returns `true` if `value` is a `KeyObject`, `false` otherwise. + * @since v16.2.0 + */ + function isKeyObject(object: unknown): object is KeyObject; + /** + * Returns `true` if `value` is a `CryptoKey`, `false` otherwise. + * @since v16.2.0 + */ + function isCryptoKey(object: unknown): object is webcrypto.CryptoKey; +} +declare module 'node:util' { + export * from 'util'; +} +declare module 'node:util/types' { + export * from 'util/types'; +} diff --git a/build/node_modules/@types/node/v8.d.ts b/build/node_modules/@types/node/v8.d.ts new file mode 100755 index 00000000..59c8302d --- /dev/null +++ b/build/node_modules/@types/node/v8.d.ts @@ -0,0 +1,378 @@ +/** + * The `v8` module exposes APIs that are specific to the version of [V8](https://developers.google.com/v8/) built into the Node.js binary. It can be accessed using: + * + * ```js + * const v8 = require('v8'); + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/v8.js) + */ +declare module 'v8' { + import { Readable } from 'node:stream'; + interface HeapSpaceInfo { + space_name: string; + space_size: number; + space_used_size: number; + space_available_size: number; + physical_space_size: number; + } + // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ + type DoesZapCodeSpaceFlag = 0 | 1; + interface HeapInfo { + total_heap_size: number; + total_heap_size_executable: number; + total_physical_size: number; + total_available_size: number; + used_heap_size: number; + heap_size_limit: number; + malloced_memory: number; + peak_malloced_memory: number; + does_zap_garbage: DoesZapCodeSpaceFlag; + number_of_native_contexts: number; + number_of_detached_contexts: number; + } + interface HeapCodeStatistics { + code_and_metadata_size: number; + bytecode_and_metadata_size: number; + external_script_source_size: number; + } + /** + * Returns an integer representing a version tag derived from the V8 version, + * command-line flags, and detected CPU features. This is useful for determining + * whether a `vm.Script` `cachedData` buffer is compatible with this instance + * of V8. + * + * ```js + * console.log(v8.cachedDataVersionTag()); // 3947234607 + * // The value returned by v8.cachedDataVersionTag() is derived from the V8 + * // version, command-line flags, and detected CPU features. Test that the value + * // does indeed update when flags are toggled. + * v8.setFlagsFromString('--allow_natives_syntax'); + * console.log(v8.cachedDataVersionTag()); // 183726201 + * ``` + * @since v8.0.0 + */ + function cachedDataVersionTag(): number; + /** + * Returns an object with the following properties: + * + * `does_zap_garbage` is a 0/1 boolean, which signifies whether the`--zap_code_space` option is enabled or not. This makes V8 overwrite heap + * garbage with a bit pattern. The RSS footprint (resident set size) gets bigger + * because it continuously touches all heap pages and that makes them less likely + * to get swapped out by the operating system. + * + * `number_of_native_contexts` The value of native\_context is the number of the + * top-level contexts currently active. Increase of this number over time indicates + * a memory leak. + * + * `number_of_detached_contexts` The value of detached\_context is the number + * of contexts that were detached and not yet garbage collected. This number + * being non-zero indicates a potential memory leak. + * + * ```js + * { + * total_heap_size: 7326976, + * total_heap_size_executable: 4194304, + * total_physical_size: 7326976, + * total_available_size: 1152656, + * used_heap_size: 3476208, + * heap_size_limit: 1535115264, + * malloced_memory: 16384, + * peak_malloced_memory: 1127496, + * does_zap_garbage: 0, + * number_of_native_contexts: 1, + * number_of_detached_contexts: 0 + * } + * ``` + * @since v1.0.0 + */ + function getHeapStatistics(): HeapInfo; + /** + * Returns statistics about the V8 heap spaces, i.e. the segments which make up + * the V8 heap. Neither the ordering of heap spaces, nor the availability of a + * heap space can be guaranteed as the statistics are provided via the + * V8[`GetHeapSpaceStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4) function and may change from one V8 version to the + * next. + * + * The value returned is an array of objects containing the following properties: + * + * ```json + * [ + * { + * "space_name": "new_space", + * "space_size": 2063872, + * "space_used_size": 951112, + * "space_available_size": 80824, + * "physical_space_size": 2063872 + * }, + * { + * "space_name": "old_space", + * "space_size": 3090560, + * "space_used_size": 2493792, + * "space_available_size": 0, + * "physical_space_size": 3090560 + * }, + * { + * "space_name": "code_space", + * "space_size": 1260160, + * "space_used_size": 644256, + * "space_available_size": 960, + * "physical_space_size": 1260160 + * }, + * { + * "space_name": "map_space", + * "space_size": 1094160, + * "space_used_size": 201608, + * "space_available_size": 0, + * "physical_space_size": 1094160 + * }, + * { + * "space_name": "large_object_space", + * "space_size": 0, + * "space_used_size": 0, + * "space_available_size": 1490980608, + * "physical_space_size": 0 + * } + * ] + * ``` + * @since v6.0.0 + */ + function getHeapSpaceStatistics(): HeapSpaceInfo[]; + /** + * The `v8.setFlagsFromString()` method can be used to programmatically set + * V8 command-line flags. This method should be used with care. Changing settings + * after the VM has started may result in unpredictable behavior, including + * crashes and data loss; or it may simply do nothing. + * + * The V8 options available for a version of Node.js may be determined by running`node --v8-options`. + * + * Usage: + * + * ```js + * // Print GC events to stdout for one minute. + * const v8 = require('v8'); + * v8.setFlagsFromString('--trace_gc'); + * setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); + * ``` + * @since v1.0.0 + */ + function setFlagsFromString(flags: string): void; + /** + * Generates a snapshot of the current V8 heap and returns a Readable + * Stream that may be used to read the JSON serialized representation. + * This JSON stream format is intended to be used with tools such as + * Chrome DevTools. The JSON schema is undocumented and specific to the + * V8 engine. Therefore, the schema may change from one version of V8 to the next. + * + * ```js + * // Print heap snapshot to the console + * const v8 = require('v8'); + * const stream = v8.getHeapSnapshot(); + * stream.pipe(process.stdout); + * ``` + * @since v11.13.0 + * @return A Readable Stream containing the V8 heap snapshot + */ + function getHeapSnapshot(): Readable; + /** + * Generates a snapshot of the current V8 heap and writes it to a JSON + * file. This file is intended to be used with tools such as Chrome + * DevTools. The JSON schema is undocumented and specific to the V8 + * engine, and may change from one version of V8 to the next. + * + * A heap snapshot is specific to a single V8 isolate. When using `worker threads`, a heap snapshot generated from the main thread will + * not contain any information about the workers, and vice versa. + * + * ```js + * const { writeHeapSnapshot } = require('v8'); + * const { + * Worker, + * isMainThread, + * parentPort + * } = require('worker_threads'); + * + * if (isMainThread) { + * const worker = new Worker(__filename); + * + * worker.once('message', (filename) => { + * console.log(`worker heapdump: ${filename}`); + * // Now get a heapdump for the main thread. + * console.log(`main thread heapdump: ${writeHeapSnapshot()}`); + * }); + * + * // Tell the worker to create a heapdump. + * worker.postMessage('heapdump'); + * } else { + * parentPort.once('message', (message) => { + * if (message === 'heapdump') { + * // Generate a heapdump for the worker + * // and return the filename to the parent. + * parentPort.postMessage(writeHeapSnapshot()); + * } + * }); + * } + * ``` + * @since v11.13.0 + * @param filename The file path where the V8 heap snapshot is to be saved. If not specified, a file name with the pattern `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be + * generated, where `{pid}` will be the PID of the Node.js process, `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from the main Node.js thread or the id of a + * worker thread. + * @return The filename where the snapshot was saved. + */ + function writeHeapSnapshot(filename?: string): string; + /** + * Returns an object with the following properties: + * + * ```js + * { + * code_and_metadata_size: 212208, + * bytecode_and_metadata_size: 161368, + * external_script_source_size: 1410794 + * } + * ``` + * @since v12.8.0 + */ + function getHeapCodeStatistics(): HeapCodeStatistics; + /** + * @since v8.0.0 + */ + class Serializer { + /** + * Writes out a header, which includes the serialization format version. + */ + writeHeader(): void; + /** + * Serializes a JavaScript value and adds the serialized representation to the + * internal buffer. + * + * This throws an error if `value` cannot be serialized. + */ + writeValue(val: any): boolean; + /** + * Returns the stored internal buffer. This serializer should not be used once + * the buffer is released. Calling this method results in undefined behavior + * if a previous write has failed. + */ + releaseBuffer(): Buffer; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the deserializing context to `deserializer.transferArrayBuffer()`. + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Write a raw 32-bit unsigned integer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint32(value: number): void; + /** + * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeUint64(hi: number, lo: number): void; + /** + * Write a JS `number` value. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeDouble(value: number): void; + /** + * Write raw bytes into the serializer’s internal buffer. The deserializer + * will require a way to compute the length of the buffer. + * For use inside of a custom `serializer._writeHostObject()`. + */ + writeRawBytes(buffer: NodeJS.TypedArray): void; + } + /** + * A subclass of `Serializer` that serializes `TypedArray`(in particular `Buffer`) and `DataView` objects as host objects, and only + * stores the part of their underlying `ArrayBuffer`s that they are referring to. + * @since v8.0.0 + */ + class DefaultSerializer extends Serializer {} + /** + * @since v8.0.0 + */ + class Deserializer { + constructor(data: NodeJS.TypedArray); + /** + * Reads and validates a header (including the format version). + * May, for example, reject an invalid or unsupported wire format. In that case, + * an `Error` is thrown. + */ + readHeader(): boolean; + /** + * Deserializes a JavaScript value from the buffer and returns it. + */ + readValue(): any; + /** + * Marks an `ArrayBuffer` as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the serializing context to `serializer.transferArrayBuffer()` (or return the `id` from `serializer._getSharedArrayBufferId()` in the case of + * `SharedArrayBuffer`s). + * @param id A 32-bit unsigned integer. + * @param arrayBuffer An `ArrayBuffer` instance. + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + /** + * Reads the underlying wire format version. Likely mostly to be useful to + * legacy code reading old wire format versions. May not be called before`.readHeader()`. + */ + getWireFormatVersion(): number; + /** + * Read a raw 32-bit unsigned integer and return it. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint32(): number; + /** + * Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]`with two 32-bit unsigned integer entries. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readUint64(): [number, number]; + /** + * Read a JS `number` value. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readDouble(): number; + /** + * Read raw bytes from the deserializer’s internal buffer. The `length` parameter + * must correspond to the length of the buffer that was passed to `serializer.writeRawBytes()`. + * For use inside of a custom `deserializer._readHostObject()`. + */ + readRawBytes(length: number): Buffer; + } + /** + * A subclass of `Deserializer` corresponding to the format written by `DefaultSerializer`. + * @since v8.0.0 + */ + class DefaultDeserializer extends Deserializer {} + /** + * Uses a `DefaultSerializer` to serialize `value` into a buffer. + * @since v8.0.0 + */ + function serialize(value: any): Buffer; + /** + * Uses a `DefaultDeserializer` with default options to read a JS value + * from a buffer. + * @since v8.0.0 + * @param buffer A buffer returned by {@link serialize}. + */ + function deserialize(buffer: NodeJS.TypedArray): any; + /** + * The `v8.takeCoverage()` method allows the user to write the coverage started by `NODE_V8_COVERAGE` to disk on demand. This method can be invoked multiple + * times during the lifetime of the process. Each time the execution counter will + * be reset and a new coverage report will be written to the directory specified + * by `NODE_V8_COVERAGE`. + * + * When the process is about to exit, one last coverage will still be written to + * disk unless {@link stopCoverage} is invoked before the process exits. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function takeCoverage(): void; + /** + * The `v8.stopCoverage()` method allows the user to stop the coverage collection + * started by `NODE_V8_COVERAGE`, so that V8 can release the execution count + * records and optimize code. This can be used in conjunction with {@link takeCoverage} if the user wants to collect the coverage on demand. + * @since v15.1.0, v14.18.0, v12.22.0 + */ + function stopCoverage(): void; +} +declare module 'node:v8' { + export * from 'v8'; +} diff --git a/build/node_modules/@types/node/vm.d.ts b/build/node_modules/@types/node/vm.d.ts new file mode 100755 index 00000000..860b7ac4 --- /dev/null +++ b/build/node_modules/@types/node/vm.d.ts @@ -0,0 +1,507 @@ +/** + * The `vm` module enables compiling and running code within V8 Virtual + * Machine contexts. **The `vm` module is not a security mechanism. Do** + * **not use it to run untrusted code.** + * + * JavaScript code can be compiled and run immediately or + * compiled, saved, and run later. + * + * A common use case is to run the code in a different V8 Context. This means + * invoked code has a different global object than the invoking code. + * + * One can provide the context by `contextifying` an + * object. The invoked code treats any property in the context like a + * global variable. Any changes to global variables caused by the invoked + * code are reflected in the context object. + * + * ```js + * const vm = require('vm'); + * + * const x = 1; + * + * const context = { x: 2 }; + * vm.createContext(context); // Contextify the object. + * + * const code = 'x += 40; var y = 17;'; + * // `x` and `y` are global variables in the context. + * // Initially, x has the value 2 because that is the value of context.x. + * vm.runInContext(code, context); + * + * console.log(context.x); // 42 + * console.log(context.y); // 17 + * + * console.log(x); // 1; y is not defined. + * ``` + * @see [source](https://github.com/nodejs/node/blob/v17.0.0/lib/vm.js) + */ +declare module 'vm' { + interface Context extends NodeJS.Dict {} + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * Default: `''`. + */ + filename?: string | undefined; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * Default: `0`. + */ + lineOffset?: number | undefined; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number | undefined; + } + interface ScriptOptions extends BaseOptions { + displayErrors?: boolean | undefined; + timeout?: number | undefined; + cachedData?: Buffer | undefined; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean | undefined; + } + interface RunningScriptOptions extends BaseOptions { + /** + * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. + * Default: `true`. + */ + displayErrors?: boolean | undefined; + /** + * Specifies the number of milliseconds to execute code before terminating execution. + * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. + */ + timeout?: number | undefined; + /** + * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. + * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. + * If execution is terminated, an `Error` will be thrown. + * Default: `false`. + */ + breakOnSigint?: boolean | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: 'afterEvaluate' | undefined; + } + interface CompileFunctionOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: Buffer | undefined; + /** + * Specifies whether to produce new cache data. + * Default: `false`, + */ + produceCachedData?: boolean | undefined; + /** + * The sandbox/context in which the said function should be compiled in. + */ + parsingContext?: Context | undefined; + /** + * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling + */ + contextExtensions?: Object[] | undefined; + } + interface CreateContextOptions { + /** + * Human-readable name of the newly created context. + * @default 'VM Context i' Where i is an ascending numerical index of the created context. + */ + name?: string | undefined; + /** + * Corresponds to the newly created context for display purposes. + * The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary), + * like the value of the `url.origin` property of a URL object. + * Most notably, this string should omit the trailing slash, as that denotes a path. + * @default '' + */ + origin?: string | undefined; + codeGeneration?: + | { + /** + * If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc) + * will throw an EvalError. + * @default true + */ + strings?: boolean | undefined; + /** + * If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError. + * @default true + */ + wasm?: boolean | undefined; + } + | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: 'afterEvaluate' | undefined; + } + type MeasureMemoryMode = 'summary' | 'detailed'; + interface MeasureMemoryOptions { + /** + * @default 'summary' + */ + mode?: MeasureMemoryMode | undefined; + context?: Context | undefined; + } + interface MemoryMeasurement { + total: { + jsMemoryEstimate: number; + jsMemoryRange: [number, number]; + }; + } + /** + * Instances of the `vm.Script` class contain precompiled scripts that can be + * executed in specific contexts. + * @since v0.3.1 + */ + class Script { + constructor(code: string, options?: ScriptOptions); + /** + * Runs the compiled code contained by the `vm.Script` object within the given`contextifiedObject` and returns the result. Running code does not have access + * to local scope. + * + * The following example compiles code that increments a global variable, sets + * the value of another global variable, then execute the code multiple times. + * The globals are contained in the `context` object. + * + * ```js + * const vm = require('vm'); + * + * const context = { + * animal: 'cat', + * count: 2 + * }; + * + * const script = new vm.Script('count += 1; name = "kitty";'); + * + * vm.createContext(context); + * for (let i = 0; i < 10; ++i) { + * script.runInContext(context); + * } + * + * console.log(context); + * // Prints: { animal: 'cat', count: 12, name: 'kitty' } + * ``` + * + * Using the `timeout` or `breakOnSigint` options will result in new event loops + * and corresponding threads being started, which have a non-zero performance + * overhead. + * @since v0.3.1 + * @param contextifiedObject A `contextified` object as returned by the `vm.createContext()` method. + * @return the result of the very last statement executed in the script. + */ + runInContext(contextifiedObject: Context, options?: RunningScriptOptions): any; + /** + * First contextifies the given `contextObject`, runs the compiled code contained + * by the `vm.Script` object within the created context, and returns the result. + * Running code does not have access to local scope. + * + * The following example compiles code that sets a global variable, then executes + * the code multiple times in different contexts. The globals are set on and + * contained within each individual `context`. + * + * ```js + * const vm = require('vm'); + * + * const script = new vm.Script('globalVar = "set"'); + * + * const contexts = [{}, {}, {}]; + * contexts.forEach((context) => { + * script.runInNewContext(context); + * }); + * + * console.log(contexts); + * // Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }] + * ``` + * @since v0.3.1 + * @param contextObject An object that will be `contextified`. If `undefined`, a new object will be created. + * @return the result of the very last statement executed in the script. + */ + runInNewContext(contextObject?: Context, options?: RunningScriptOptions): any; + /** + * Runs the compiled code contained by the `vm.Script` within the context of the + * current `global` object. Running code does not have access to local scope, but_does_ have access to the current `global` object. + * + * The following example compiles code that increments a `global` variable then + * executes that code multiple times: + * + * ```js + * const vm = require('vm'); + * + * global.globalVar = 0; + * + * const script = new vm.Script('globalVar += 1', { filename: 'myfile.vm' }); + * + * for (let i = 0; i < 1000; ++i) { + * script.runInThisContext(); + * } + * + * console.log(globalVar); + * + * // 1000 + * ``` + * @since v0.3.1 + * @return the result of the very last statement executed in the script. + */ + runInThisContext(options?: RunningScriptOptions): any; + /** + * Creates a code cache that can be used with the `Script` constructor's`cachedData` option. Returns a `Buffer`. This method may be called at any + * time and any number of times. + * + * ```js + * const script = new vm.Script(` + * function add(a, b) { + * return a + b; + * } + * + * const x = add(1, 2); + * `); + * + * const cacheWithoutX = script.createCachedData(); + * + * script.runInThisContext(); + * + * const cacheWithX = script.createCachedData(); + * ``` + * @since v10.6.0 + */ + createCachedData(): Buffer; + /** @deprecated in favor of `script.createCachedData()` */ + cachedDataProduced?: boolean | undefined; + cachedDataRejected?: boolean | undefined; + cachedData?: Buffer | undefined; + } + /** + * If given a `contextObject`, the `vm.createContext()` method will `prepare + * that object` so that it can be used in calls to {@link runInContext} or `script.runInContext()`. Inside such scripts, + * the `contextObject` will be the global object, retaining all of its existing + * properties but also having the built-in objects and functions any standard [global object](https://es5.github.io/#x15.1) has. Outside of scripts run by the vm module, global variables + * will remain unchanged. + * + * ```js + * const vm = require('vm'); + * + * global.globalVar = 3; + * + * const context = { globalVar: 1 }; + * vm.createContext(context); + * + * vm.runInContext('globalVar *= 2;', context); + * + * console.log(context); + * // Prints: { globalVar: 2 } + * + * console.log(global.globalVar); + * // Prints: 3 + * ``` + * + * If `contextObject` is omitted (or passed explicitly as `undefined`), a new, + * empty `contextified` object will be returned. + * + * The `vm.createContext()` method is primarily useful for creating a single + * context that can be used to run multiple scripts. For instance, if emulating a + * web browser, the method can be used to create a single context representing a + * window's global object, then run all ` ``` @@ -143,39 +197,12 @@ Open the above .html file in a browser and you should see **[Full online demo](http://kpdecker.github.com/jsdiff)** -## License +## Compatibility -Software License Agreement (BSD License) +[![Sauce Test Status](https://saucelabs.com/browser-matrix/jsdiff.svg)](https://saucelabs.com/u/jsdiff) -Copyright (c) 2009-2011, Kevin Decker kpdecker@gmail.com - -All rights reserved. - -Redistribution and use of this software in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of Kevin Decker nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +jsdiff supports all ES3 environments with some known issues on IE8 and below. Under these browsers some diff algorithms such as word diff and others may fail due to lack of support for capturing groups in the `split` operation. +## License -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/kpdecker/jsdiff/trend.png)](https://bitdeli.com/free "Bitdeli Badge") +See [LICENSE](https://github.com/kpdecker/jsdiff/blob/master/LICENSE). diff --git a/build/node_modules/diff/diff.js b/build/node_modules/diff/diff.js deleted file mode 100644 index 421854a1..00000000 --- a/build/node_modules/diff/diff.js +++ /dev/null @@ -1,619 +0,0 @@ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -(function(global, undefined) { - var objectPrototypeToString = Object.prototype.toString; - - /*istanbul ignore next*/ - function map(arr, mapper, that) { - if (Array.prototype.map) { - return Array.prototype.map.call(arr, mapper, that); - } - - var other = new Array(arr.length); - - for (var i = 0, n = arr.length; i < n; i++) { - other[i] = mapper.call(that, arr[i], i, arr); - } - return other; - } - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - // This function handles the presence of circular references by bailing out when encountering an - // object that is already on the "stack" of items being processed. - function canonicalize(obj, stack, replacementStack) { - stack = stack || []; - replacementStack = replacementStack || []; - - var i; - - for (i = 0; i < stack.length; i += 1) { - if (stack[i] === obj) { - return replacementStack[i]; - } - } - - var canonicalizedObj; - - if ('[object Array]' === objectPrototypeToString.call(obj)) { - stack.push(obj); - canonicalizedObj = new Array(obj.length); - replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { - canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack); - } - stack.pop(); - replacementStack.pop(); - } else if (typeof obj === 'object' && obj !== null) { - stack.push(obj); - canonicalizedObj = {}; - replacementStack.push(canonicalizedObj); - var sortedKeys = [], - key; - for (key in obj) { - sortedKeys.push(key); - } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { - key = sortedKeys[i]; - canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack); - } - stack.pop(); - replacementStack.pop(); - } else { - canonicalizedObj = obj; - } - return canonicalizedObj; - } - - function buildValues(components, newString, oldString, useLongestToken) { - var componentPos = 0, - componentLen = components.length, - newPos = 0, - oldPos = 0; - - for (; componentPos < componentLen; componentPos++) { - var component = components[componentPos]; - if (!component.removed) { - if (!component.added && useLongestToken) { - var value = newString.slice(newPos, newPos + component.count); - value = map(value, function(value, i) { - var oldValue = oldString[oldPos + i]; - return oldValue.length > value.length ? oldValue : value; - }); - - component.value = value.join(''); - } else { - component.value = newString.slice(newPos, newPos + component.count).join(''); - } - newPos += component.count; - - // Common case - if (!component.added) { - oldPos += component.count; - } - } else { - component.value = oldString.slice(oldPos, oldPos + component.count).join(''); - oldPos += component.count; - - // Reverse add and remove so removes are output first to match common convention - // The diffing algorithm is tied to add then remove output and this is the simplest - // route to get the desired output with minimal overhead. - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } - } - } - - return components; - } - - function Diff(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - } - Diff.prototype = { - diff: function(oldString, newString, callback) { - var self = this; - - function done(value) { - if (callback) { - setTimeout(function() { callback(undefined, value); }, 0); - return true; - } else { - return value; - } - } - - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return done([{ value: newString }]); - } - if (!newString) { - return done([{ value: oldString, removed: true }]); - } - if (!oldString) { - return done([{ value: newString, added: true }]); - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var editLength = 1; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0, i.e. the content starts with the same values - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { - // Identity per the equality and tokenizer - return done([{value: newString.join('')}]); - } - - // Main worker method. checks all permutations of a given edit length for acceptance. - function execEditLength() { - for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { - var basePath; - var addPath = bestPath[diagonalPath - 1], - removePath = bestPath[diagonalPath + 1], - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath - 1] = undefined; - } - - var canAdd = addPath && addPath.newPos + 1 < newLen, - canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - // If this path is a terminal then prune - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - self.pushComponent(basePath.components, undefined, true); - } else { - basePath = addPath; // No need to clone, we've pulled it from the list - basePath.newPos++; - self.pushComponent(basePath.components, true, undefined); - } - - oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); - - // If we have hit the end of both strings, then we are done - if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) { - return done(buildValues(basePath.components, newString, oldString, self.useLongestToken)); - } else { - // Otherwise track this path as a potential candidate and continue. - bestPath[diagonalPath] = basePath; - } - } - - editLength++; - } - - // Performs the length of edit iteration. Is a bit fugly as this has to support the - // sync and async mode which is never fun. Loops over execEditLength until a value - // is produced. - if (callback) { - (function exec() { - setTimeout(function() { - // This should not happen, but we want to be safe. - /*istanbul ignore next */ - if (editLength > maxEditLength) { - return callback(); - } - - if (!execEditLength()) { - exec(); - } - }, 0); - }()); - } else { - while (editLength <= maxEditLength) { - var ret = execEditLength(); - if (ret) { - return ret; - } - } - } - }, - - pushComponent: function(components, added, removed) { - var last = components[components.length - 1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length - 1] = {count: last.count + 1, added: added, removed: removed }; - } else { - components.push({count: 1, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath, - - commonCount = 0; - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { - newPos++; - oldPos++; - commonCount++; - } - - if (commonCount) { - basePath.components.push({count: commonCount}); - } - - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - return left === right || (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)); - }, - tokenize: function(value) { - return value.split(''); - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - - var TrimmedLineDiff = new Diff(); - TrimmedLineDiff.ignoreTrim = true; - - LineDiff.tokenize = TrimmedLineDiff.tokenize = function(value) { - var retLines = [], - lines = value.split(/^/m); - for (var i = 0; i < lines.length; i++) { - var line = lines[i], - lastLine = lines[i - 1], - lastLineLastChar = lastLine && lastLine[lastLine.length - 1]; - - // Merge lines that may contain windows new lines - if (line === '\n' && lastLineLastChar === '\r') { - retLines[retLines.length - 1] = retLines[retLines.length - 1].slice(0, -1) + '\r\n'; - } else { - if (this.ignoreTrim) { - line = line.trim(); - // add a newline unless this is the last line. - if (i < lines.length - 1) { - line += '\n'; - } - } - retLines.push(line); - } - } - - return retLines; - }; - - var PatchDiff = new Diff(); - PatchDiff.tokenize = function(value) { - var ret = [], - linesAndNewlines = value.split(/(\n|\r\n)/); - - // Ignore the final empty token that occurs if the string ends with a new line - if (!linesAndNewlines[linesAndNewlines.length - 1]) { - linesAndNewlines.pop(); - } - - // Merge the content and line separators into single tokens - for (var i = 0; i < linesAndNewlines.length; i++) { - var line = linesAndNewlines[i]; - - if (i % 2) { - ret[ret.length - 1] += line; - } else { - ret.push(line); - } - } - return ret; - }; - - var SentenceDiff = new Diff(); - SentenceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\S.+?[.!?])(?=\s+|$)/)); - }; - - var JsonDiff = new Diff(); - // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a - // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: - JsonDiff.useLongestToken = true; - JsonDiff.tokenize = LineDiff.tokenize; - JsonDiff.equals = function(left, right) { - return LineDiff.equals(left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); - }; - - var JsDiff = { - Diff: Diff, - - diffChars: function(oldStr, newStr, callback) { return CharDiff.diff(oldStr, newStr, callback); }, - diffWords: function(oldStr, newStr, callback) { return WordDiff.diff(oldStr, newStr, callback); }, - diffWordsWithSpace: function(oldStr, newStr, callback) { return WordWithSpaceDiff.diff(oldStr, newStr, callback); }, - diffLines: function(oldStr, newStr, callback) { return LineDiff.diff(oldStr, newStr, callback); }, - diffTrimmedLines: function(oldStr, newStr, callback) { return TrimmedLineDiff.diff(oldStr, newStr, callback); }, - - diffSentences: function(oldStr, newStr, callback) { return SentenceDiff.diff(oldStr, newStr, callback); }, - - diffCss: function(oldStr, newStr, callback) { return CssDiff.diff(oldStr, newStr, callback); }, - diffJson: function(oldObj, newObj, callback) { - return JsonDiff.diff( - typeof oldObj === 'string' ? oldObj : JSON.stringify(canonicalize(oldObj), undefined, ' '), - typeof newObj === 'string' ? newObj : JSON.stringify(canonicalize(newObj), undefined, ' '), - callback - ); - }, - - createTwoFilesPatch: function(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - if (oldFileName == newFileName) { - ret.push('Index: ' + oldFileName); - } - ret.push('==================================================================='); - ret.push('--- ' + oldFileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + newFileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = PatchDiff.diff(oldStr, newStr); - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - // Formats a given set of lines for printing as context lines in a patch - function contextLines(lines) { - return map(lines, function(entry) { return ' ' + entry; }); - } - - // Outputs the no newline at end of file warning if needed - function eofNL(curRange, i, current) { - var last = diff[diff.length - 2], - isLast = i === diff.length - 2, - isLastOfType = i === diff.length - 3 && current.added !== last.added; - - // Figure out if this is the last line for the given file and missing NL - if (!(/\n$/.test(current.value)) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - // If we have previous context, start with that - if (!oldRangeStart) { - var prev = diff[i - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - - // Output our changes - curRange.push.apply(curRange, map(lines, function(entry) { - return (current.added ? '+' : '-') + entry; - })); - eofNL(curRange, i, current); - - // Track the updated file position - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - // Identical context lines. Track line changes - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length - 2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine - oldRangeStart + contextSize) - + ' +' + newRangeStart + ',' + (newLine - newRangeStart + contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - return JsDiff.createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader); - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'), - hunks = [], - i = 0, - remEOFNL = false, - addEOFNL = false; - - // Skip to the first change hunk - while (i < diffstr.length && !(/^@@/.test(diffstr[i]))) { - i++; - } - - // Parse the unified diff - for (; i < diffstr.length; i++) { - if (diffstr[i][0] === '@') { - var chnukHeader = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - hunks.unshift({ - start: chnukHeader[3], - oldlength: +chnukHeader[2], - removed: [], - newlength: chnukHeader[4], - added: [] - }); - } else if (diffstr[i][0] === '+') { - hunks[0].added.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === '-') { - hunks[0].removed.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === ' ') { - hunks[0].added.push(diffstr[i].substr(1)); - hunks[0].removed.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === '\\') { - if (diffstr[i - 1][0] === '+') { - remEOFNL = true; - } else if (diffstr[i - 1][0] === '-') { - addEOFNL = true; - } - } - } - - // Apply the diff to the input - var lines = oldStr.split('\n'); - for (i = hunks.length - 1; i >= 0; i--) { - var hunk = hunks[i]; - // Sanity check the input string. Bail if we don't match. - for (var j = 0; j < hunk.oldlength; j++) { - if (lines[hunk.start - 1 + j] !== hunk.removed[j]) { - return false; - } - } - Array.prototype.splice.apply(lines, [hunk.start - 1, hunk.oldlength].concat(hunk.added)); - } - - // Handle EOFNL insertion/removal - if (remEOFNL) { - while (!lines[lines.length - 1]) { - lines.pop(); - } - } else if (addEOFNL) { - lines.push(''); - } - return lines.join('\n'); - }, - - convertChangesToXML: function(changes) { - var ret = []; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes) { - var ret = [], - change, - operation; - for (var i = 0; i < changes.length; i++) { - change = changes[i]; - if (change.added) { - operation = 1; - } else if (change.removed) { - operation = -1; - } else { - operation = 0; - } - - ret.push([operation, change.value]); - } - return ret; - }, - - canonicalize: canonicalize - }; - - /*istanbul ignore next */ - /*global module */ - if (typeof module !== 'undefined' && module.exports) { - module.exports = JsDiff; - } else if (typeof define === 'function' && define.amd) { - /*global define */ - define([], function() { return JsDiff; }); - } else if (typeof global.JsDiff === 'undefined') { - global.JsDiff = JsDiff; - } -}(this)); diff --git a/build/node_modules/diff/dist/diff.js b/build/node_modules/diff/dist/diff.js new file mode 100644 index 00000000..bba91954 --- /dev/null +++ b/build/node_modules/diff/dist/diff.js @@ -0,0 +1,1582 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.Diff = {})); +}(this, (function (exports) { 'use strict'; + + function Diff() {} + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } + + // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } + + // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } + + // See: http://code.google.com/p/google-diff-match-patch/wiki/API + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/build/node_modules/diff/lib/convert/dmp.js b/build/node_modules/diff/lib/convert/dmp.js new file mode 100644 index 00000000..91ff40a9 --- /dev/null +++ b/build/node_modules/diff/lib/convert/dmp.js @@ -0,0 +1,32 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.convertChangesToDMP = convertChangesToDMP; + +/*istanbul ignore end*/ +// See: http://code.google.com/p/google-diff-match-patch/wiki/API +function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY2hhbmdlcyIsInJldCIsImNoYW5nZSIsIm9wZXJhdGlvbiIsImkiLCJsZW5ndGgiLCJhZGRlZCIsInJlbW92ZWQiLCJwdXNoIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ08sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWO0FBQUEsTUFDSUMsTUFESjtBQUFBLE1BRUlDLFNBRko7O0FBR0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixPQUFPLENBQUNLLE1BQTVCLEVBQW9DRCxDQUFDLEVBQXJDLEVBQXlDO0FBQ3ZDRixJQUFBQSxNQUFNLEdBQUdGLE9BQU8sQ0FBQ0ksQ0FBRCxDQUFoQjs7QUFDQSxRQUFJRixNQUFNLENBQUNJLEtBQVgsRUFBa0I7QUFDaEJILE1BQUFBLFNBQVMsR0FBRyxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlELE1BQU0sQ0FBQ0ssT0FBWCxFQUFvQjtBQUN6QkosTUFBQUEsU0FBUyxHQUFHLENBQUMsQ0FBYjtBQUNELEtBRk0sTUFFQTtBQUNMQSxNQUFBQSxTQUFTLEdBQUcsQ0FBWjtBQUNEOztBQUVERixJQUFBQSxHQUFHLENBQUNPLElBQUosQ0FBUyxDQUFDTCxTQUFELEVBQVlELE1BQU0sQ0FBQ08sS0FBbkIsQ0FBVDtBQUNEOztBQUNELFNBQU9SLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1kaWZmLW1hdGNoLXBhdGNoL3dpa2kvQVBJXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXSxcbiAgICAgIGNoYW5nZSxcbiAgICAgIG9wZXJhdGlvbjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAxO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcGVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/convert/xml.js b/build/node_modules/diff/lib/convert/xml.js new file mode 100644 index 00000000..69ec60c6 --- /dev/null +++ b/build/node_modules/diff/lib/convert/xml.js @@ -0,0 +1,42 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.convertChangesToXML = convertChangesToXML; + +/*istanbul ignore end*/ +function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); +} + +function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L3htbC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvWE1MIiwiY2hhbmdlcyIsInJldCIsImkiLCJsZW5ndGgiLCJjaGFuZ2UiLCJhZGRlZCIsInB1c2giLCJyZW1vdmVkIiwiZXNjYXBlSFRNTCIsInZhbHVlIiwiam9pbiIsInMiLCJuIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBTyxDQUFDRyxNQUE1QixFQUFvQ0QsQ0FBQyxFQUFyQyxFQUF5QztBQUN2QyxRQUFJRSxNQUFNLEdBQUdKLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFwQjs7QUFDQSxRQUFJRSxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLE9BQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxPQUFUO0FBQ0Q7O0FBRURMLElBQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTRSxVQUFVLENBQUNKLE1BQU0sQ0FBQ0ssS0FBUixDQUFuQjs7QUFFQSxRQUFJTCxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLFFBQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxRQUFUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPTCxHQUFHLENBQUNTLElBQUosQ0FBUyxFQUFULENBQVA7QUFDRDs7QUFFRCxTQUFTRixVQUFULENBQW9CRyxDQUFwQixFQUF1QjtBQUNyQixNQUFJQyxDQUFDLEdBQUdELENBQVI7QUFDQUMsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE9BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLFFBQWhCLENBQUo7QUFFQSxTQUFPRCxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb1hNTChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUhUTUwocykge1xuICBsZXQgbiA9IHM7XG4gIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cbiAgcmV0dXJuIG47XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/diff/array.js b/build/node_modules/diff/lib/diff/array.js new file mode 100644 index 00000000..19e36809 --- /dev/null +++ b/build/node_modules/diff/lib/diff/array.js @@ -0,0 +1,45 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffArrays = diffArrays; +exports.arrayDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +var arrayDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.arrayDiff = arrayDiff; + +/*istanbul ignore end*/ +arrayDiff.tokenize = function (value) { + return value.slice(); +}; + +arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; +}; + +function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic2xpY2UiLCJqb2luIiwicmVtb3ZlRW1wdHkiLCJkaWZmQXJyYXlzIiwib2xkQXJyIiwibmV3QXJyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxTQUFTLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFsQjs7Ozs7O0FBQ1BELFNBQVMsQ0FBQ0UsUUFBVixHQUFxQixVQUFTQyxLQUFULEVBQWdCO0FBQ25DLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixFQUFQO0FBQ0QsQ0FGRDs7QUFHQUosU0FBUyxDQUFDSyxJQUFWLEdBQWlCTCxTQUFTLENBQUNNLFdBQVYsR0FBd0IsVUFBU0gsS0FBVCxFQUFnQjtBQUN2RCxTQUFPQSxLQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTSSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0FBQUUsU0FBT1YsU0FBUyxDQUFDVyxJQUFWLENBQWVILE1BQWYsRUFBdUJDLE1BQXZCLEVBQStCQyxRQUEvQixDQUFQO0FBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGFycmF5RGlmZiA9IG5ldyBEaWZmKCk7XG5hcnJheURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbn07XG5hcnJheURpZmYuam9pbiA9IGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykgeyByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTsgfVxuIl19 diff --git a/build/node_modules/diff/lib/diff/base.js b/build/node_modules/diff/lib/diff/base.js new file mode 100644 index 00000000..48bbe234 --- /dev/null +++ b/build/node_modules/diff/lib/diff/base.js @@ -0,0 +1,304 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = Diff; + +/*istanbul ignore end*/ +function Diff() {} + +Diff.prototype = { + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + diff: function diff(oldString, newString) { + /*istanbul ignore start*/ + var + /*istanbul ignore end*/ + options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = + /*istanbul ignore start*/ + void 0 + /*istanbul ignore end*/ + ; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + castInput: function castInput(value) { + return value; + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + tokenize: function tokenize(value) { + return value.split(''); + }, + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + join: function join(chars) { + return chars.join(''); + } +}; + +function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; +} + +function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsImJlc3RQYXRoIiwibmV3UG9zIiwiY29tcG9uZW50cyIsIm9sZFBvcyIsImV4dHJhY3RDb21tb24iLCJqb2luIiwiY291bnQiLCJleGVjRWRpdExlbmd0aCIsImRpYWdvbmFsUGF0aCIsImJhc2VQYXRoIiwiYWRkUGF0aCIsInJlbW92ZVBhdGgiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjbG9uZVBhdGgiLCJwdXNoQ29tcG9uZW50IiwiYnVpbGRWYWx1ZXMiLCJ1c2VMb25nZXN0VG9rZW4iLCJleGVjIiwicmV0IiwiYWRkZWQiLCJyZW1vdmVkIiwibGFzdCIsInB1c2giLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJzcGxpdCIsImNoYXJzIiwiY29tcG9uZW50UG9zIiwiY29tcG9uZW50TGVuIiwiY29tcG9uZW50Iiwic2xpY2UiLCJtYXAiLCJvbGRWYWx1ZSIsInRtcCIsImxhc3RDb21wb25lbnQiLCJwb3AiLCJwYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBZSxTQUFTQSxJQUFULEdBQWdCLENBQUU7O0FBRWpDQSxJQUFJLENBQUNDLFNBQUwsR0FBaUI7QUFBQTs7QUFBQTtBQUNmQyxFQUFBQSxJQURlLGdCQUNWQyxTQURVLEVBQ0NDLFNBREQsRUFDMEI7QUFBQTtBQUFBO0FBQUE7QUFBZEMs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QUcsQ0FBZixJQUNHLE9BQU9NLGFBQWEsQ0FBQ3JELEtBQXJCLEtBQStCLFFBRGxDLEtBRUlxRCxhQUFhLENBQUN0QixLQUFkLElBQXVCc0IsYUFBYSxDQUFDckIsT0FGekMsS0FHR3ZDLElBQUksQ0FBQzJDLE1BQUwsQ0FBWSxFQUFaLEVBQWdCaUIsYUFBYSxDQUFDckQsS0FBOUIsQ0FIUCxFQUc2QztBQUMzQ2EsSUFBQUEsVUFBVSxDQUFDa0MsWUFBWSxHQUFHLENBQWhCLENBQVYsQ0FBNkIvQyxLQUE3QixJQUFzQ3FELGFBQWEsQ0FBQ3JELEtBQXBEO0FBQ0FhLElBQUFBLFVBQVUsQ0FBQ3lDLEdBQVg7QUFDRDs7QUFFRCxTQUFPekMsVUFBUDtBQUNEOztBQUVELFNBQVNZLFNBQVQsQ0FBbUI4QixJQUFuQixFQUF5QjtBQUN2QixTQUFPO0FBQUUzQyxJQUFBQSxNQUFNLEVBQUUyQyxJQUFJLENBQUMzQyxNQUFmO0FBQXVCQyxJQUFBQSxVQUFVLEVBQUUwQyxJQUFJLENBQUMxQyxVQUFMLENBQWdCb0MsS0FBaEIsQ0FBc0IsQ0FBdEI7QUFBbkMsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlmZigpIHt9XG5cbkRpZmYucHJvdG90eXBlID0ge1xuICBkaWZmKG9sZFN0cmluZywgbmV3U3RyaW5nLCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gZG9uZSh2YWx1ZSkge1xuICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKHVuZGVmaW5lZCwgdmFsdWUpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG4gICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChuZXdTdHJpbmcpO1xuXG4gICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZykpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcblxuICAgIGxldCBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLCBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuICAgIGxldCBlZGl0TGVuZ3RoID0gMTtcbiAgICBsZXQgbWF4RWRpdExlbmd0aCA9IG5ld0xlbiArIG9sZExlbjtcbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAoZnVuY3Rpb24gZXhlYygpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2Ugd2FudCB0byBiZSBzYWZlLlxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ== diff --git a/build/node_modules/diff/lib/diff/character.js b/build/node_modules/diff/lib/diff/character.js new file mode 100644 index 00000000..7ddfa205 --- /dev/null +++ b/build/node_modules/diff/lib/diff/character.js @@ -0,0 +1,37 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffChars = diffChars; +exports.characterDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +var characterDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.characterDiff = characterDiff; + +/*istanbul ignore end*/ +function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6WyJjaGFyYWN0ZXJEaWZmIiwiRGlmZiIsImRpZmZDaGFycyIsIm9sZFN0ciIsIm5ld1N0ciIsIm9wdGlvbnMiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxhQUFhLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUF0Qjs7Ozs7O0FBQ0EsU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxFQUE0QztBQUFFLFNBQU9MLGFBQWEsQ0FBQ00sSUFBZCxDQUFtQkgsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxDQUFQO0FBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTsgfVxuIl19 diff --git a/build/node_modules/diff/lib/diff/css.js b/build/node_modules/diff/lib/diff/css.js new file mode 100644 index 00000000..e3ad1fcb --- /dev/null +++ b/build/node_modules/diff/lib/diff/css.js @@ -0,0 +1,41 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffCss = diffCss; +exports.cssDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +var cssDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.cssDiff = cssDiff; + +/*istanbul ignore end*/ +cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); +}; + +function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6WyJjc3NEaWZmIiwiRGlmZiIsInRva2VuaXplIiwidmFsdWUiLCJzcGxpdCIsImRpZmZDc3MiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7OztBQUVPLElBQU1BLE9BQU8sR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWhCOzs7Ozs7QUFDUEQsT0FBTyxDQUFDRSxRQUFSLEdBQW1CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDakMsU0FBT0EsS0FBSyxDQUFDQyxLQUFOLENBQVksZUFBWixDQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTQyxPQUFULENBQWlCQyxNQUFqQixFQUF5QkMsTUFBekIsRUFBaUNDLFFBQWpDLEVBQTJDO0FBQUUsU0FBT1IsT0FBTyxDQUFDUyxJQUFSLENBQWFILE1BQWIsRUFBcUJDLE1BQXJCLEVBQTZCQyxRQUE3QixDQUFQO0FBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNzc0RpZmYgPSBuZXcgRGlmZigpO1xuY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gY3NzRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ== diff --git a/build/node_modules/diff/lib/diff/json.js b/build/node_modules/diff/lib/diff/json.js new file mode 100644 index 00000000..67c2f175 --- /dev/null +++ b/build/node_modules/diff/lib/diff/json.js @@ -0,0 +1,163 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffJson = diffJson; +exports.canonicalize = canonicalize; +exports.jsonDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_line = require("./line") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +/*istanbul ignore end*/ +var objectPrototypeToString = Object.prototype.toString; +var jsonDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a +// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + +/*istanbul ignore start*/ +exports.jsonDiff = jsonDiff; + +/*istanbul ignore end*/ +jsonDiff.useLongestToken = true; +jsonDiff.tokenize = +/*istanbul ignore start*/ +_line +/*istanbul ignore end*/ +. +/*istanbul ignore start*/ +lineDiff +/*istanbul ignore end*/ +.tokenize; + +jsonDiff.castInput = function (value) { + /*istanbul ignore start*/ + var _this$options = + /*istanbul ignore end*/ + this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) + /*istanbul ignore start*/ + { + return ( + /*istanbul ignore end*/ + typeof v === 'undefined' ? undefinedReplacement : v + ); + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); +}; + +jsonDiff.equals = function (left, right) { + return ( + /*istanbul ignore start*/ + _base + /*istanbul ignore end*/ + [ + /*istanbul ignore start*/ + "default" + /*istanbul ignore end*/ + ].prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')) + ); +}; + +function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); +} // This function handles the presence of circular references by bailing out when encountering an +// object that is already on the "stack" of items being processed. Accepts an optional replacer + + +function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if ( + /*istanbul ignore start*/ + _typeof( + /*istanbul ignore end*/ + obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsib2JqZWN0UHJvdG90eXBlVG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImpzb25EaWZmIiwiRGlmZiIsInVzZUxvbmdlc3RUb2tlbiIsInRva2VuaXplIiwibGluZURpZmYiLCJjYXN0SW5wdXQiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWRSZXBsYWNlbWVudCIsInN0cmluZ2lmeVJlcGxhY2VyIiwiayIsInYiLCJKU09OIiwic3RyaW5naWZ5IiwiY2Fub25pY2FsaXplIiwiZXF1YWxzIiwibGVmdCIsInJpZ2h0IiwiY2FsbCIsInJlcGxhY2UiLCJkaWZmSnNvbiIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqRDtBQUdPLElBQU1DLFFBQVEsR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWpCLEMsQ0FDUDtBQUNBOzs7Ozs7QUFDQUQsUUFBUSxDQUFDRSxlQUFULEdBQTJCLElBQTNCO0FBRUFGLFFBQVEsQ0FBQ0csUUFBVDtBQUFvQkM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLENBQVNELFFBQTdCOztBQUNBSCxRQUFRLENBQUNLLFNBQVQsR0FBcUIsVUFBU0MsS0FB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Z0IsR0FBR1AsR0FBbkI7QUFDRDs7QUFDRCxTQUFPTyxnQkFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7bGluZURpZmZ9IGZyb20gJy4vbGluZSc7XG5cbmNvbnN0IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXG5leHBvcnQgY29uc3QganNvbkRpZmYgPSBuZXcgRGlmZigpO1xuLy8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcbi8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuanNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IHt1bmRlZmluZWRSZXBsYWNlbWVudCwgc3RyaW5naWZ5UmVwbGFjZXIgPSAoaywgdikgPT4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbn07XG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykgeyByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7IH1cblxuLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4vLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgaWYgKHJlcGxhY2VyKSB7XG4gICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICB9XG5cbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjYW5vbmljYWxpemVkT2JqO1xuXG4gIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrLCByZXBsYWNlciwga2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBsZXQgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/diff/line.js b/build/node_modules/diff/lib/diff/line.js new file mode 100644 index 00000000..855fe30b --- /dev/null +++ b/build/node_modules/diff/lib/diff/line.js @@ -0,0 +1,89 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffLines = diffLines; +exports.diffTrimmedLines = diffTrimmedLines; +exports.lineDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_params = require("../util/params") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +var lineDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.lineDiff = lineDiff; + +/*istanbul ignore end*/ +lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; +}; + +function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); +} + +function diffTrimmedLines(oldStr, newStr, callback) { + var options = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _params + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + generateOptions) + /*istanbul ignore end*/ + (callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsibGluZURpZmYiLCJEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJkaWZmTGluZXMiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiLCJkaWZmVHJpbW1lZExpbmVzIiwiZ2VuZXJhdGVPcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxRQUFRLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFqQjs7Ozs7O0FBQ1BELFFBQVEsQ0FBQ0UsUUFBVCxHQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2xDLE1BQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsTUFDSUMsZ0JBQWdCLEdBQUdGLEtBQUssQ0FBQ0csS0FBTixDQUFZLFdBQVosQ0FEdkIsQ0FEa0MsQ0FJbEM7O0FBQ0EsTUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNFLE1BQWpCLEdBQTBCLENBQTNCLENBQXJCLEVBQW9EO0FBQ2xERixJQUFBQSxnQkFBZ0IsQ0FBQ0csR0FBakI7QUFDRCxHQVBpQyxDQVNsQzs7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixnQkFBZ0IsQ0FBQ0UsTUFBckMsRUFBNkNFLENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsUUFBSUMsSUFBSSxHQUFHTCxnQkFBZ0IsQ0FBQ0ksQ0FBRCxDQUEzQjs7QUFFQSxRQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTLENBQUMsS0FBS0UsT0FBTCxDQUFhQyxjQUEzQixFQUEyQztBQUN6Q1IsTUFBQUEsUUFBUSxDQUFDQSxRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixJQUFpQ0csSUFBakM7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLEtBQUtDLE9BQUwsQ0FBYUUsZ0JBQWpCLEVBQW1DO0FBQ2pDSCxRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ksSUFBTCxFQUFQO0FBQ0Q7O0FBQ0RWLE1BQUFBLFFBQVEsQ0FBQ1csSUFBVCxDQUFjTCxJQUFkO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPTixRQUFQO0FBQ0QsQ0F4QkQ7O0FBMEJPLFNBQVNZLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsUUFBbkMsRUFBNkM7QUFBRSxTQUFPbkIsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDs7QUFDaEcsU0FBU0UsZ0JBQVQsQ0FBMEJKLE1BQTFCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsUUFBMUMsRUFBb0Q7QUFDekQsTUFBSVIsT0FBTztBQUFHO0FBQUE7QUFBQTs7QUFBQVc7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLEdBQWdCSCxRQUFoQixFQUEwQjtBQUFDTixJQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixHQUExQixDQUFkO0FBQ0EsU0FBT2IsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QlAsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbmV4cG9ydCBjb25zdCBsaW5lRGlmZiA9IG5ldyBEaWZmKCk7XG5saW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGxldCByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcbiAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICB9XG5cbiAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG4gICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICB9XG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7IHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICBsZXQgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge2lnbm9yZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuIl19 diff --git a/build/node_modules/diff/lib/diff/sentence.js b/build/node_modules/diff/lib/diff/sentence.js new file mode 100644 index 00000000..95158d6f --- /dev/null +++ b/build/node_modules/diff/lib/diff/sentence.js @@ -0,0 +1,41 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffSentences = diffSentences; +exports.sentenceDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +var sentenceDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.sentenceDiff = sentenceDiff; + +/*istanbul ignore end*/ +sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); +}; + +function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbInNlbnRlbmNlRGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic3BsaXQiLCJkaWZmU2VudGVuY2VzIiwib2xkU3RyIiwibmV3U3RyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFHTyxJQUFNQSxZQUFZLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFyQjs7Ozs7O0FBQ1BELFlBQVksQ0FBQ0UsUUFBYixHQUF3QixVQUFTQyxLQUFULEVBQWdCO0FBQ3RDLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixDQUFZLHVCQUFaLENBQVA7QUFDRCxDQUZEOztBQUlPLFNBQVNDLGFBQVQsQ0FBdUJDLE1BQXZCLEVBQStCQyxNQUEvQixFQUF1Q0MsUUFBdkMsRUFBaUQ7QUFBRSxTQUFPUixZQUFZLENBQUNTLElBQWIsQ0FBa0JILE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsUUFBbEMsQ0FBUDtBQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ== diff --git a/build/node_modules/diff/lib/diff/word.js b/build/node_modules/diff/lib/diff/word.js new file mode 100644 index 00000000..cef7fe17 --- /dev/null +++ b/build/node_modules/diff/lib/diff/word.js @@ -0,0 +1,108 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.diffWords = diffWords; +exports.diffWordsWithSpace = diffWordsWithSpace; +exports.wordDiff = void 0; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./base")) +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_params = require("../util/params") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode +// +// Ranges and exceptions: +// Latin-1 Supplement, 0080–00FF +// - U+00D7 × Multiplication sign +// - U+00F7 ÷ Division sign +// Latin Extended-A, 0100–017F +// Latin Extended-B, 0180–024F +// IPA Extensions, 0250–02AF +// Spacing Modifier Letters, 02B0–02FF +// - U+02C7 ˇ ˇ Caron +// - U+02D8 ˘ ˘ Breve +// - U+02D9 ˙ ˙ Dot Above +// - U+02DA ˚ ˚ Ring Above +// - U+02DB ˛ ˛ Ogonek +// - U+02DC ˜ ˜ Small Tilde +// - U+02DD ˝ ˝ Double Acute Accent +// Latin Extended Additional, 1E00–1EFF +var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; +var reWhitespace = /\S/; +var wordDiff = new +/*istanbul ignore start*/ +_base +/*istanbul ignore end*/ +[ +/*istanbul ignore start*/ +"default" +/*istanbul ignore end*/ +](); + +/*istanbul ignore start*/ +exports.wordDiff = wordDiff; + +/*istanbul ignore end*/ +wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); +}; + +wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; +}; + +function diffWords(oldStr, newStr, options) { + options = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _params + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + generateOptions) + /*istanbul ignore end*/ + (options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); +} + +function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOlsiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsIkRpZmYiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJvcHRpb25zIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiaWdub3JlV2hpdGVzcGFjZSIsInRlc3QiLCJ0b2tlbml6ZSIsInZhbHVlIiwidG9rZW5zIiwic3BsaXQiLCJpIiwibGVuZ3RoIiwic3BsaWNlIiwiZGlmZldvcmRzIiwib2xkU3RyIiwibmV3U3RyIiwiZ2VuZXJhdGVPcHRpb25zIiwiZGlmZiIsImRpZmZXb3Jkc1dpdGhTcGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsaUJBQWlCLEdBQUcsK0RBQTFCO0FBRUEsSUFBTUMsWUFBWSxHQUFHLElBQXJCO0FBRU8sSUFBTUMsUUFBUSxHQUFHO0FBQUlDO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBLENBQUosRUFBakI7Ozs7OztBQUNQRCxRQUFRLENBQUNFLE1BQVQsR0FBa0IsVUFBU0MsSUFBVCxFQUFlQyxLQUFmLEVBQXNCO0FBQ3RDLE1BQUksS0FBS0MsT0FBTCxDQUFhQyxVQUFqQixFQUE2QjtBQUMzQkgsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNJLFdBQUwsRUFBUDtBQUNBSCxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0csV0FBTixFQUFSO0FBQ0Q7O0FBQ0QsU0FBT0osSUFBSSxLQUFLQyxLQUFULElBQW1CLEtBQUtDLE9BQUwsQ0FBYUcsZ0JBQWIsSUFBaUMsQ0FBQ1QsWUFBWSxDQUFDVSxJQUFiLENBQWtCTixJQUFsQixDQUFsQyxJQUE2RCxDQUFDSixZQUFZLENBQUNVLElBQWIsQ0FBa0JMLEtBQWxCLENBQXhGO0FBQ0QsQ0FORDs7QUFPQUosUUFBUSxDQUFDVSxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEM7QUFDQSxNQUFJQyxNQUFNLEdBQUdELEtBQUssQ0FBQ0UsS0FBTixDQUFZLGlDQUFaLENBQWIsQ0FGa0MsQ0FJbEM7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQVAsR0FBZ0IsQ0FBcEMsRUFBdUNELENBQUMsRUFBeEMsRUFBNEM7QUFDMUM7QUFDQSxRQUFJLENBQUNGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBUCxJQUFrQkYsTUFBTSxDQUFDRSxDQUFDLEdBQUcsQ0FBTCxDQUF4QixJQUNLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUQsQ0FBN0IsQ0FETCxJQUVLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUMsR0FBRyxDQUFMLENBQTdCLENBRlQsRUFFZ0Q7QUFDOUNGLE1BQUFBLE1BQU0sQ0FBQ0UsQ0FBRCxDQUFOLElBQWFGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBbkI7QUFDQUYsTUFBQUEsTUFBTSxDQUFDSSxNQUFQLENBQWNGLENBQUMsR0FBRyxDQUFsQixFQUFxQixDQUFyQjtBQUNBQSxNQUFBQSxDQUFDO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPRixNQUFQO0FBQ0QsQ0FqQkQ7O0FBbUJPLFNBQVNLLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ2QsT0FBbkMsRUFBNEM7QUFDakRBLEVBQUFBLE9BQU87QUFBRztBQUFBO0FBQUE7O0FBQUFlO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUE7QUFBQSxHQUFnQmYsT0FBaEIsRUFBeUI7QUFBQ0csSUFBQUEsZ0JBQWdCLEVBQUU7QUFBbkIsR0FBekIsQ0FBVjtBQUNBLFNBQU9SLFFBQVEsQ0FBQ3FCLElBQVQsQ0FBY0gsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEJkLE9BQTlCLENBQVA7QUFDRDs7QUFFTSxTQUFTaUIsa0JBQVQsQ0FBNEJKLE1BQTVCLEVBQW9DQyxNQUFwQyxFQUE0Q2QsT0FBNUMsRUFBcUQ7QUFDMUQsU0FBT0wsUUFBUSxDQUFDcUIsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmQsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5jb25zdCBleHRlbmRlZFdvcmRDaGFycyA9IC9eW2EtekEtWlxcdXtDMH0tXFx1e0ZGfVxcdXtEOH0tXFx1e0Y2fVxcdXtGOH0tXFx1ezJDNn1cXHV7MkM4fS1cXHV7MkQ3fVxcdXsyREV9LVxcdXsyRkZ9XFx1ezFFMDB9LVxcdXsxRUZGfV0rJC91O1xuXG5jb25zdCByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuZXhwb3J0IGNvbnN0IHdvcmREaWZmID0gbmV3IERpZmYoKTtcbndvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCkpO1xufTtcbndvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgbGV0IHRva2VucyA9IHZhbHVlLnNwbGl0KC8oW15cXFNcXHJcXG5dK3xbKClbXFxde30nXCJcXHJcXG5dfFxcYikvKTtcblxuICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/index.es6.js b/build/node_modules/diff/lib/index.es6.js new file mode 100644 index 00000000..ca0e5917 --- /dev/null +++ b/build/node_modules/diff/lib/index.es6.js @@ -0,0 +1,1553 @@ +function Diff() {} +Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } +}; + +function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; +} + +function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; +} + +var characterDiff = new Diff(); +function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); +} + +function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; +} + +// +// Ranges and exceptions: +// Latin-1 Supplement, 0080–00FF +// - U+00D7 × Multiplication sign +// - U+00F7 ÷ Division sign +// Latin Extended-A, 0100–017F +// Latin Extended-B, 0180–024F +// IPA Extensions, 0250–02AF +// Spacing Modifier Letters, 02B0–02FF +// - U+02C7 ˇ ˇ Caron +// - U+02D8 ˘ ˘ Breve +// - U+02D9 ˙ ˙ Dot Above +// - U+02DA ˚ ˚ Ring Above +// - U+02DB ˛ ˛ Ogonek +// - U+02DC ˜ ˜ Small Tilde +// - U+02DD ˝ ˝ Double Acute Accent +// Latin Extended Additional, 1E00–1EFF + +var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; +var reWhitespace = /\S/; +var wordDiff = new Diff(); + +wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); +}; + +wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; +}; + +function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); +} +function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); +} + +var lineDiff = new Diff(); + +lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; +}; + +function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); +} +function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); +} + +var sentenceDiff = new Diff(); + +sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); +}; + +function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); +} + +var cssDiff = new Diff(); + +cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); +}; + +function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); +} + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var objectPrototypeToString = Object.prototype.toString; +var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a +// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + +jsonDiff.useLongestToken = true; +jsonDiff.tokenize = lineDiff.tokenize; + +jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); +}; + +jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); +}; + +function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); +} // This function handles the presence of circular references by bailing out when encountering an +// object that is already on the "stack" of items being processed. Accepts an optional replacer + +function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; +} + +var arrayDiff = new Diff(); + +arrayDiff.tokenize = function (value) { + return value.slice(); +}; + +arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; +}; + +function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); +} + +function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; +} + +// Iterator that traverses in the range of [min, max], stepping +// by distance from a given start position. I.e. for [0, 4], with +// start of 2, this will iterate 2, 3, 1, 4, 0. +function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; +} + +function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); +} // Wrapper that supports multiple file patches via callbacks. + +function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); +} + +function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; +} +function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; +} +function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); +} +function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); +} + +function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); +} +function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; +} + +function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } +} +function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; +} + +function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; +} + +function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; +} + +function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } +} + +function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; +} + +function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; +} + +function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); +} + +function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); +} + +function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } +} + +function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); +} + +function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } +} + +function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } +} + +function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; +} + +function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; +} + +function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); +} + +function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; +} + +function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; +} + +// See: http://code.google.com/p/google-diff-match-patch/wiki/API +function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; +} + +function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); +} + +function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; +} + +export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, merge, parsePatch, structuredPatch }; diff --git a/build/node_modules/diff/lib/index.js b/build/node_modules/diff/lib/index.js new file mode 100644 index 00000000..920f0fee --- /dev/null +++ b/build/node_modules/diff/lib/index.js @@ -0,0 +1,216 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "Diff", { + enumerable: true, + get: function get() { + return _base["default"]; + } +}); +Object.defineProperty(exports, "diffChars", { + enumerable: true, + get: function get() { + return _character.diffChars; + } +}); +Object.defineProperty(exports, "diffWords", { + enumerable: true, + get: function get() { + return _word.diffWords; + } +}); +Object.defineProperty(exports, "diffWordsWithSpace", { + enumerable: true, + get: function get() { + return _word.diffWordsWithSpace; + } +}); +Object.defineProperty(exports, "diffLines", { + enumerable: true, + get: function get() { + return _line.diffLines; + } +}); +Object.defineProperty(exports, "diffTrimmedLines", { + enumerable: true, + get: function get() { + return _line.diffTrimmedLines; + } +}); +Object.defineProperty(exports, "diffSentences", { + enumerable: true, + get: function get() { + return _sentence.diffSentences; + } +}); +Object.defineProperty(exports, "diffCss", { + enumerable: true, + get: function get() { + return _css.diffCss; + } +}); +Object.defineProperty(exports, "diffJson", { + enumerable: true, + get: function get() { + return _json.diffJson; + } +}); +Object.defineProperty(exports, "canonicalize", { + enumerable: true, + get: function get() { + return _json.canonicalize; + } +}); +Object.defineProperty(exports, "diffArrays", { + enumerable: true, + get: function get() { + return _array.diffArrays; + } +}); +Object.defineProperty(exports, "applyPatch", { + enumerable: true, + get: function get() { + return _apply.applyPatch; + } +}); +Object.defineProperty(exports, "applyPatches", { + enumerable: true, + get: function get() { + return _apply.applyPatches; + } +}); +Object.defineProperty(exports, "parsePatch", { + enumerable: true, + get: function get() { + return _parse.parsePatch; + } +}); +Object.defineProperty(exports, "merge", { + enumerable: true, + get: function get() { + return _merge.merge; + } +}); +Object.defineProperty(exports, "structuredPatch", { + enumerable: true, + get: function get() { + return _create.structuredPatch; + } +}); +Object.defineProperty(exports, "createTwoFilesPatch", { + enumerable: true, + get: function get() { + return _create.createTwoFilesPatch; + } +}); +Object.defineProperty(exports, "createPatch", { + enumerable: true, + get: function get() { + return _create.createPatch; + } +}); +Object.defineProperty(exports, "convertChangesToDMP", { + enumerable: true, + get: function get() { + return _dmp.convertChangesToDMP; + } +}); +Object.defineProperty(exports, "convertChangesToXML", { + enumerable: true, + get: function get() { + return _xml.convertChangesToXML; + } +}); + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_base = _interopRequireDefault(require("./diff/base")) +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_character = require("./diff/character") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_word = require("./diff/word") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_line = require("./diff/line") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_sentence = require("./diff/sentence") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_css = require("./diff/css") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_json = require("./diff/json") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_array = require("./diff/array") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_apply = require("./patch/apply") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_parse = require("./patch/parse") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_merge = require("./patch/merge") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_create = require("./patch/create") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_dmp = require("./convert/dmp") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_xml = require("./convert/xml") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuLypcbiAqIFRleHQgZGlmZiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBBUElTOlxuICogSnNEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG4gKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2VcbiAqIEpzRGlmZi5kaWZmTGluZXM6IExpbmUgYmFzZWQgZGlmZlxuICpcbiAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG4gKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG4gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuICovXG5pbXBvcnQgRGlmZiBmcm9tICcuL2RpZmYvYmFzZSc7XG5pbXBvcnQge2RpZmZDaGFyc30gZnJvbSAnLi9kaWZmL2NoYXJhY3Rlcic7XG5pbXBvcnQge2RpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlfSBmcm9tICcuL2RpZmYvd29yZCc7XG5pbXBvcnQge2RpZmZMaW5lcywgZGlmZlRyaW1tZWRMaW5lc30gZnJvbSAnLi9kaWZmL2xpbmUnO1xuaW1wb3J0IHtkaWZmU2VudGVuY2VzfSBmcm9tICcuL2RpZmYvc2VudGVuY2UnO1xuXG5pbXBvcnQge2RpZmZDc3N9IGZyb20gJy4vZGlmZi9jc3MnO1xuaW1wb3J0IHtkaWZmSnNvbiwgY2Fub25pY2FsaXplfSBmcm9tICcuL2RpZmYvanNvbic7XG5cbmltcG9ydCB7ZGlmZkFycmF5c30gZnJvbSAnLi9kaWZmL2FycmF5JztcblxuaW1wb3J0IHthcHBseVBhdGNoLCBhcHBseVBhdGNoZXN9IGZyb20gJy4vcGF0Y2gvYXBwbHknO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhdGNoL3BhcnNlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vcGF0Y2gvbWVyZ2UnO1xuaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2gsIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsIGNyZWF0ZVBhdGNofSBmcm9tICcuL3BhdGNoL2NyZWF0ZSc7XG5cbmltcG9ydCB7Y29udmVydENoYW5nZXNUb0RNUH0gZnJvbSAnLi9jb252ZXJ0L2RtcCc7XG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9YTUx9IGZyb20gJy4vY29udmVydC94bWwnO1xuXG5leHBvcnQge1xuICBEaWZmLFxuXG4gIGRpZmZDaGFycyxcbiAgZGlmZldvcmRzLFxuICBkaWZmV29yZHNXaXRoU3BhY2UsXG4gIGRpZmZMaW5lcyxcbiAgZGlmZlRyaW1tZWRMaW5lcyxcbiAgZGlmZlNlbnRlbmNlcyxcblxuICBkaWZmQ3NzLFxuICBkaWZmSnNvbixcblxuICBkaWZmQXJyYXlzLFxuXG4gIHN0cnVjdHVyZWRQYXRjaCxcbiAgY3JlYXRlVHdvRmlsZXNQYXRjaCxcbiAgY3JlYXRlUGF0Y2gsXG4gIGFwcGx5UGF0Y2gsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgcGFyc2VQYXRjaCxcbiAgbWVyZ2UsXG4gIGNvbnZlcnRDaGFuZ2VzVG9ETVAsXG4gIGNvbnZlcnRDaGFuZ2VzVG9YTUwsXG4gIGNhbm9uaWNhbGl6ZVxufTtcbiJdfQ== diff --git a/build/node_modules/diff/lib/index.mjs b/build/node_modules/diff/lib/index.mjs new file mode 100644 index 00000000..ca0e5917 --- /dev/null +++ b/build/node_modules/diff/lib/index.mjs @@ -0,0 +1,1553 @@ +function Diff() {} +Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } +}; + +function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; +} + +function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; +} + +var characterDiff = new Diff(); +function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); +} + +function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; +} + +// +// Ranges and exceptions: +// Latin-1 Supplement, 0080–00FF +// - U+00D7 × Multiplication sign +// - U+00F7 ÷ Division sign +// Latin Extended-A, 0100–017F +// Latin Extended-B, 0180–024F +// IPA Extensions, 0250–02AF +// Spacing Modifier Letters, 02B0–02FF +// - U+02C7 ˇ ˇ Caron +// - U+02D8 ˘ ˘ Breve +// - U+02D9 ˙ ˙ Dot Above +// - U+02DA ˚ ˚ Ring Above +// - U+02DB ˛ ˛ Ogonek +// - U+02DC ˜ ˜ Small Tilde +// - U+02DD ˝ ˝ Double Acute Accent +// Latin Extended Additional, 1E00–1EFF + +var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; +var reWhitespace = /\S/; +var wordDiff = new Diff(); + +wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); +}; + +wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; +}; + +function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); +} +function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); +} + +var lineDiff = new Diff(); + +lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; +}; + +function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); +} +function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); +} + +var sentenceDiff = new Diff(); + +sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); +}; + +function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); +} + +var cssDiff = new Diff(); + +cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); +}; + +function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); +} + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var objectPrototypeToString = Object.prototype.toString; +var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a +// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + +jsonDiff.useLongestToken = true; +jsonDiff.tokenize = lineDiff.tokenize; + +jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); +}; + +jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); +}; + +function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); +} // This function handles the presence of circular references by bailing out when encountering an +// object that is already on the "stack" of items being processed. Accepts an optional replacer + +function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; +} + +var arrayDiff = new Diff(); + +arrayDiff.tokenize = function (value) { + return value.slice(); +}; + +arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; +}; + +function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); +} + +function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; +} + +// Iterator that traverses in the range of [min, max], stepping +// by distance from a given start position. I.e. for [0, 4], with +// start of 2, this will iterate 2, 3, 1, 4, 0. +function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; +} + +function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); +} // Wrapper that supports multiple file patches via callbacks. + +function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); +} + +function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; +} +function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; +} +function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); +} +function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); +} + +function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); +} +function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; +} + +function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } +} +function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; +} + +function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; +} + +function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; +} + +function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } +} + +function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; +} + +function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; +} + +function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); +} + +function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); +} + +function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } +} + +function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); +} + +function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } +} + +function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } +} + +function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; +} + +function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; +} + +function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); +} + +function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; +} + +function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; +} + +// See: http://code.google.com/p/google-diff-match-patch/wiki/API +function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; +} + +function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); +} + +function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; +} + +export { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, merge, parsePatch, structuredPatch }; diff --git a/build/node_modules/diff/lib/patch/apply.js b/build/node_modules/diff/lib/patch/apply.js new file mode 100644 index 00000000..21c76ddb --- /dev/null +++ b/build/node_modules/diff/lib/patch/apply.js @@ -0,0 +1,238 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.applyPatch = applyPatch; +exports.applyPatches = applyPatches; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_parse = require("./parse") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_distanceIterator = _interopRequireDefault(require("../util/distance-iterator")) +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +/*istanbul ignore end*/ +function applyPatch(source, uniDiff) { + /*istanbul ignore start*/ + var + /*istanbul ignore end*/ + options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _parse + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + parsePatch) + /*istanbul ignore end*/ + (uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) + /*istanbul ignore start*/ + { + return ( + /*istanbul ignore end*/ + line === patchContent + ); + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _distanceIterator + /*istanbul ignore end*/ + [ + /*istanbul ignore start*/ + "default" + /*istanbul ignore end*/ + ])(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); +} // Wrapper that supports multiple file patches via callbacks. + + +function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _parse + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + parsePatch) + /*istanbul ignore end*/ + (uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJwYXJzZVBhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJsaW5lcyIsInNwbGl0IiwiZGVsaW1pdGVycyIsIm1hdGNoIiwiaHVua3MiLCJjb21wYXJlTGluZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwib3BlcmF0aW9uIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJtaW5MaW5lIiwib2Zmc2V0IiwicmVtb3ZlRU9GTkwiLCJhZGRFT0ZOTCIsImh1bmtGaXRzIiwiaHVuayIsInRvUG9zIiwiaiIsImNvbnRlbnQiLCJzdWJzdHIiLCJpIiwibWF4TGluZSIsIm9sZExpbmVzIiwibG9jYWxPZmZzZXQiLCJvbGRTdGFydCIsIml0ZXJhdG9yIiwiZGlzdGFuY2VJdGVyYXRvciIsInVuZGVmaW5lZCIsImRpZmZPZmZzZXQiLCJuZXdMaW5lcyIsImRlbGltaXRlciIsImxpbmVkZWxpbWl0ZXJzIiwic3BsaWNlIiwicHJldmlvdXNPcGVyYXRpb24iLCJwb3AiLCJwdXNoIiwiX2siLCJqb2luIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiaW5kZXgiLCJjb21wbGV0ZSIsImxvYWRGaWxlIiwiZXJyIiwiZGF0YSIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxTQUFTQSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJOztBQUN4RCxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7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QUNEOztBQUVELE1BQUlnRCxZQUFZLEdBQUcsQ0FBbkI7O0FBQ0EsV0FBU0MsWUFBVCxHQUF3QjtBQUN0QixRQUFJQyxLQUFLLEdBQUdsRCxPQUFPLENBQUNnRCxZQUFZLEVBQWIsQ0FBbkI7O0FBQ0EsUUFBSSxDQUFDRSxLQUFMLEVBQVk7QUFDVixhQUFPakQsT0FBTyxDQUFDa0QsUUFBUixFQUFQO0FBQ0Q7O0FBRURsRCxJQUFBQSxPQUFPLENBQUNtRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxVQUFJRSxjQUFjLEdBQUd6RCxVQUFVLENBQUN3RCxJQUFELEVBQU9KLEtBQVAsRUFBY2pELE9BQWQsQ0FBL0I7QUFDQUEsTUFBQUEsT0FBTyxDQUFDdUQsT0FBUixDQUFnQk4sS0FBaEIsRUFBdUJLLGNBQXZCLEVBQXVDLFVBQVNGLEdBQVQsRUFBYztBQUNuRCxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFREosUUFBQUEsWUFBWTtBQUNiLE9BTkQ7QUFPRCxLQWJEO0FBY0Q7O0FBQ0RBLEVBQUFBLFlBQVk7QUFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19 diff --git a/build/node_modules/diff/lib/patch/create.js b/build/node_modules/diff/lib/patch/create.js new file mode 100644 index 00000000..48bb4668 --- /dev/null +++ b/build/node_modules/diff/lib/patch/create.js @@ -0,0 +1,267 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.structuredPatch = structuredPatch; +exports.formatPatch = formatPatch; +exports.createTwoFilesPatch = createTwoFilesPatch; +exports.createPatch = createPatch; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_line = require("../diff/line") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/*istanbul ignore end*/ +function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _line + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + diffLines) + /*istanbul ignore end*/ + (oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + /*istanbul ignore start*/ + var _loop = function _loop( + /*istanbul ignore end*/ + i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + /*istanbul ignore start*/ + var _curRange; + + /*istanbul ignore end*/ + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_curRange = + /*istanbul ignore end*/ + curRange).push.apply( + /*istanbul ignore start*/ + _curRange + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + /*istanbul ignore start*/ + var _curRange2; + + /*istanbul ignore end*/ + // Overlapping + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_curRange2 = + /*istanbul ignore end*/ + curRange).push.apply( + /*istanbul ignore start*/ + _curRange2 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + contextLines(lines))); + } else { + /*istanbul ignore start*/ + var _curRange3; + + /*istanbul ignore end*/ + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_curRange3 = + /*istanbul ignore end*/ + curRange).push.apply( + /*istanbul ignore start*/ + _curRange3 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + /*istanbul ignore start*/ + _loop( + /*istanbul ignore end*/ + i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; +} + +function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; +} + +function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); +} + +function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FB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eHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIGRpZmYucHVzaCh7dmFsdWU6ICcnLCBsaW5lczogW119KTsgLy8gQXBwZW5kIGFuIGVtcHR5IHZhbHVlIHRvIG1ha2UgY2xlYW51cCBlYXNpZXJcblxuICBmdW5jdGlvbiBjb250ZXh0TGluZXMobGluZXMpIHtcbiAgICByZXR1cm4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7IHJldHVybiAnICcgKyBlbnRyeTsgfSk7XG4gIH1cblxuICBsZXQgaHVua3MgPSBbXTtcbiAgbGV0IG9sZFJhbmdlU3RhcnQgPSAwLCBuZXdSYW5nZVN0YXJ0ID0gMCwgY3VyUmFuZ2UgPSBbXSxcbiAgICAgIG9sZExpbmUgPSAxLCBuZXdMaW5lID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3VycmVudCA9IGRpZmZbaV0sXG4gICAgICAgICAgbGluZXMgPSBjdXJyZW50LmxpbmVzIHx8IGN1cnJlbnQudmFsdWUucmVwbGFjZSgvXFxuJC8sICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY3VycmVudC5saW5lcyA9IGxpbmVzO1xuXG4gICAgaWYgKGN1cnJlbnQuYWRkZWQgfHwgY3VycmVudC5yZW1vdmVkKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuICAgICAgaWYgKCFvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgb2xkUmFuZ2VTdGFydCA9IG9sZExpbmU7XG4gICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG4gICAgICBjdXJSYW5nZS5wdXNoKC4uLiBsaW5lcy5tYXAoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIChjdXJyZW50LmFkZGVkID8gJysnIDogJy0nKSArIGVudHJ5O1xuICAgICAgfSkpO1xuXG4gICAgICAvLyBUcmFjayB0aGUgdXBkYXRlZCBmaWxlIHBvc2l0aW9uXG4gICAgICBpZiAoY3VycmVudC5hZGRlZCkge1xuICAgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZGVudGljYWwgY29udGV4dCBsaW5lcy4gVHJhY2sgbGluZSBjaGFuZ2VzXG4gICAgICBpZiAob2xkUmFuZ2VTdGFydCkge1xuICAgICAgICAvLyBDbG9zZSBvdXQgYW55IGNoYW5nZXMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IChvciBqb2luIG92ZXJsYXBwaW5nKVxuICAgICAgICBpZiAobGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCAqIDIgJiYgaSA8IGRpZmYubGVuZ3RoIC0gMikge1xuICAgICAgICAgIC8vIE92ZXJsYXBwaW5nXG4gICAgICAgICAgY3VyUmFuZ2UucHVzaCguLi4gY29udGV4dExpbmVzKGxpbmVzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG4gICAgICAgICAgbGV0IGNvbnRleHRTaXplID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBvcHRpb25zLmNvbnRleHQpO1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKTtcblxuICAgICAgICAgIGxldCBodW5rID0ge1xuICAgICAgICAgICAgb2xkU3RhcnQ6IG9sZFJhbmdlU3RhcnQsXG4gICAgICAgICAgICBvbGRMaW5lczogKG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUpLFxuICAgICAgICAgICAgbmV3U3RhcnQ6IG5ld1JhbmdlU3RhcnQsXG4gICAgICAgICAgICBuZXdMaW5lczogKG5ld0xpbmUgLSBuZXdSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUpLFxuICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgLy8gRU9GIGlzIGluc2lkZSB0aGlzIGh1bmtcbiAgICAgICAgICAgIGxldCBvbGRFT0ZOZXdsaW5lID0gKCgvXFxuJC8pLnRlc3Qob2xkU3RyKSk7XG4gICAgICAgICAgICBsZXQgbmV3RU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG5ld1N0cikpO1xuICAgICAgICAgICAgbGV0IG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcbiAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiBub05sQmVmb3JlQWRkcyAmJiBvbGRTdHIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG4gICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGlmIHRoZSBvbGQgZmlsZSBpcyBlbXB0eSwgZG8gbm90IG91dHB1dCB0aGUgbm8tbmwgbGluZVxuICAgICAgICAgICAgICBjdXJSYW5nZS5zcGxpY2UoaHVuay5vbGRMaW5lcywgMCwgJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMpIHx8ICFuZXdFT0ZOZXdsaW5lKSB7XG4gICAgICAgICAgICAgIGN1clJhbmdlLnB1c2goJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuXG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9sZEZpbGVOYW1lOiBvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLCBuZXdIZWFkZXI6IG5ld0hlYWRlcixcbiAgICBodW5rczogaHVua3NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGNoKGRpZmYpIHtcbiAgY29uc3QgcmV0ID0gW107XG4gIGlmIChkaWZmLm9sZEZpbGVOYW1lID09IGRpZmYubmV3RmlsZU5hbWUpIHtcbiAgICByZXQucHVzaCgnSW5kZXg6ICcgKyBkaWZmLm9sZEZpbGVOYW1lKTtcbiAgfVxuICByZXQucHVzaCgnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgcmV0LnB1c2goJysrKyAnICsgZGlmZi5uZXdGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5uZXdIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYubmV3SGVhZGVyKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaHVuayA9IGRpZmYuaHVua3NbaV07XG4gICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG4gICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsub2xkU3RhcnQgLT0gMTtcbiAgICB9XG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgLT0gMTtcbiAgICB9XG4gICAgcmV0LnB1c2goXG4gICAgICAnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lc1xuICAgICAgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXNcbiAgICAgICsgJyBAQCdcbiAgICApO1xuICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gIH1cblxuICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUd29GaWxlc1BhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRQYXRjaChzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGNoKGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xufVxuIl19 diff --git a/build/node_modules/diff/lib/patch/merge.js b/build/node_modules/diff/lib/patch/merge.js new file mode 100644 index 00000000..b46faaab --- /dev/null +++ b/build/node_modules/diff/lib/patch/merge.js @@ -0,0 +1,613 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.calcLineCount = calcLineCount; +exports.merge = merge; + +/*istanbul ignore end*/ +var +/*istanbul ignore start*/ +_create = require("./create") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_parse = require("./parse") +/*istanbul ignore end*/ +; + +var +/*istanbul ignore start*/ +_array = require("../util/array") +/*istanbul ignore end*/ +; + +/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +/*istanbul ignore end*/ +function calcLineCount(hunk) { + /*istanbul ignore start*/ + var _calcOldNewLineCount = + /*istanbul ignore end*/ + calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } +} + +function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; +} + +function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return ( + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _parse + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + parsePatch) + /*istanbul ignore end*/ + (param)[0] + ); + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return ( + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _create + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + structuredPatch) + /*istanbul ignore end*/ + (undefined, undefined, base, param) + ); + } + + return param; +} + +function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; +} + +function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } +} + +function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; +} + +function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; +} + +function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + /*istanbul ignore start*/ + var _hunk$lines; + + /*istanbul ignore end*/ + // Mine inserted + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + /*istanbul ignore start*/ + var _hunk$lines2; + + /*istanbul ignore end*/ + // Theirs inserted + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines2 = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines2 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); +} + +function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if ( + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _array + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + arrayStartsWith) + /*istanbul ignore end*/ + (myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + /*istanbul ignore start*/ + var _hunk$lines3; + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines3 = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines3 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + myChanges)); + + return; + } else if ( + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _array + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + arrayStartsWith) + /*istanbul ignore end*/ + (theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + /*istanbul ignore start*/ + var _hunk$lines4; + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines4 = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines4 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + theirChanges)); + + return; + } + } else if ( + /*istanbul ignore start*/ + (0, + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + _array + /*istanbul ignore end*/ + . + /*istanbul ignore start*/ + arrayEqual) + /*istanbul ignore end*/ + (myChanges, theirChanges)) { + /*istanbul ignore start*/ + var _hunk$lines5; + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines5 = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines5 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); +} + +function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + /*istanbul ignore start*/ + var _hunk$lines6; + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + + /*istanbul ignore end*/ + + /*istanbul ignore start*/ + (_hunk$lines6 = + /*istanbul ignore end*/ + hunk.lines).push.apply( + /*istanbul ignore start*/ + _hunk$lines6 + /*istanbul ignore end*/ + , + /*istanbul ignore start*/ + _toConsumableArray( + /*istanbul ignore end*/ + theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } +} + +function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); +} + +function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } +} + +function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } +} + +function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; +} + +function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; +} + +function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); +} + +function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; +} + +function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9tZXJnZS5qcyJdLCJuYW1lcyI6WyJjYWxjTGluZUNvdW50IiwiaHVuayIsImNhbGNPbGROZXdMaW5lQ291bnQiLCJsaW5lcyIsIm9sZExpbmVzIiwibmV3TGluZXMiLCJ1bmRlZmluZWQiLCJtZXJnZSIsIm1pbmUiLCJ0aGVpcnMiLCJiYXNlIiwibG9hZFBhdGNoIiwicmV0IiwiaW5kZXgiLCJuZXdGaWxlTmFtZSIsImZpbGVOYW1lQ2hhbmdlZCIsIm9sZEZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwic2VsZWN0RmllbGQiLCJodW5rcyIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsImxlbmd0aCIsIm1pbmVDdXJyZW50Iiwib2xkU3RhcnQiLCJJbmZpbml0eSIsInRoZWlyc0N1cnJlbnQiLCJodW5rQmVmb3JlIiwicHVzaCIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJNYXRoIiwibWluIiwibmV3U3RhcnQiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJ0ZXN0IiwicGFyc2VQYXRjaCIsIkVycm9yIiwic3RydWN0dXJlZFBhdGNoIiwicGF0Y2giLCJjb25mbGljdCIsImNoZWNrIiwib2Zmc2V0IiwibWluZUxpbmVzIiwidGhlaXJPZmZzZXQiLCJ0aGVpckxpbmVzIiwidGhlaXIiLCJpbnNlcnRMZWFkaW5nIiwidGhlaXJDdXJyZW50IiwibXV0dWFsQ2hhbmdlIiwiY29sbGVjdENoYW5nZSIsInJlbW92YWwiLCJpbnNlcnRUcmFpbGluZyIsIm15Q2hhbmdlcyIsInRoZWlyQ2hhbmdlcyIsImFsbFJlbW92ZXMiLCJhcnJheVN0YXJ0c1dpdGgiLCJza2lwUmVtb3ZlU3VwZXJzZXQiLCJhcnJheUVxdWFsIiwic3dhcCIsImNvbGxlY3RDb250ZXh0IiwibWVyZ2VkIiwiaW5zZXJ0IiwibGluZSIsInN0YXRlIiwib3BlcmF0aW9uIiwibWF0Y2hDaGFuZ2VzIiwiY2hhbmdlcyIsIm1hdGNoSW5kZXgiLCJjb250ZXh0Q2hhbmdlcyIsImNvbmZsaWN0ZWQiLCJjaGFuZ2UiLCJtYXRjaCIsInN1YnN0ciIsInJlZHVjZSIsInByZXYiLCJyZW1vdmVDaGFuZ2VzIiwiZGVsdGEiLCJpIiwiY2hhbmdlQ29udGVudCIsImZvckVhY2giLCJteUNvdW50IiwidGhlaXJDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxhQUFULENBQXVCQyxJQUF2QixFQUE2QjtBQUFBO0FBQUE7QUFBQTtBQUNMQyxFQUFBQSxtQkFBbUIsQ0FBQ0QsSUFBSSxDQUFDRSxLQUFOLENBRGQ7QUFBQSxNQUMzQkMsUUFEMkIsd0JBQzNCQSxRQUQyQjtBQUFBLE1BQ2pCQyxRQURpQix3QkFDakJBLFFBRGlCOztBQUdsQyxNQUFJRCxRQUFRLEtBQUtFLFNBQWpCLEVBQTRCO0FBQzFCTCxJQUFBQSxJQUFJLENBQUNHLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBT0gsSUFBSSxDQUFDRyxRQUFaO0FBQ0Q7O0FBRUQsTUFBSUMsUUFBUSxLQUFLQyxTQUFqQixFQUE0QjtBQUMxQkwsSUFBQUEsSUFBSSxDQUFDSSxRQUFMLEdBQWdCQSxRQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9KLElBQUksQ0FBQ0ksUUFBWjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0UsS0FBVCxDQUFlQyxJQUFmLEVBQXFCQyxNQUFyQixFQUE2QkMsSUFBN0IsRUFBbUM7QUFDeENGLEVBQUFBLElBQUksR0FBR0csU0FBUyxDQUFDSCxJQUFELEVBQU9FLElBQVAsQ0FBaEI7QUFDQUQsRUFBQUEsTUFBTSxHQUFHRSxTQUFTLENBQUNGLE1BQUQsRUFBU0MsSUFBVCxDQUFsQjtBQUVBLE1BQUlFLEdBQUcsR0FBRyxFQUFWLENBSndD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QUFKLEVBQW9FO0FBQ2xFL0QsUUFBQUEsUUFBUTtBQUNUO0FBQ0Y7QUFDRixHQTVCRDtBQThCQSxTQUFPO0FBQUNBLElBQUFBLFFBQVEsRUFBUkEsUUFBRDtBQUFXQyxJQUFBQSxRQUFRLEVBQVJBO0FBQVgsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2h9IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5cbmltcG9ydCB7YXJyYXlFcXVhbCwgYXJyYXlTdGFydHNXaXRofSBmcm9tICcuLi91dGlsL2FycmF5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuICBjb25zdCB7b2xkTGluZXMsIG5ld0xpbmVzfSA9IGNhbGNPbGROZXdMaW5lQ291bnQoaHVuay5saW5lcyk7XG5cbiAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuXG4gIGxldCByZXQgPSB7fTtcblxuICAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG4gIC8vIExlYXZpbmcgc2FuaXR5IGNoZWNrcyBvbiB0aGlzIHRvIHRoZSBBUEkgY29uc3VtZXIgdGhhdCBtYXkga25vdyBtb3JlIGFib3V0IHRoZVxuICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuICBpZiAobWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXgpIHtcbiAgICByZXQuaW5kZXggPSBtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleDtcbiAgfVxuXG4gIGlmIChtaW5lLm5ld0ZpbGVOYW1lIHx8IHRoZWlycy5uZXdGaWxlTmFtZSkge1xuICAgIGlmICghZmlsZU5hbWVDaGFuZ2VkKG1pbmUpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHRoZWlycy5vbGRGaWxlTmFtZSB8fCBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gdGhlaXJzLm5ld0ZpbGVOYW1lIHx8IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSB0aGVpcnMubmV3SGVhZGVyIHx8IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSBpZiAoIWZpbGVOYW1lQ2hhbmdlZCh0aGVpcnMpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEZpbGVOYW1lLCB0aGVpcnMub2xkRmlsZU5hbWUpO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0ZpbGVOYW1lLCB0aGVpcnMubmV3RmlsZU5hbWUpO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdIZWFkZXIsIHRoZWlycy5uZXdIZWFkZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldC5odW5rcyA9IFtdO1xuXG4gIGxldCBtaW5lSW5kZXggPSAwLFxuICAgICAgdGhlaXJzSW5kZXggPSAwLFxuICAgICAgbWluZU9mZnNldCA9IDAsXG4gICAgICB0aGVpcnNPZmZzZXQgPSAwO1xuXG4gIHdoaWxlIChtaW5lSW5kZXggPCBtaW5lLmh1bmtzLmxlbmd0aCB8fCB0aGVpcnNJbmRleCA8IHRoZWlycy5odW5rcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge29sZFN0YXJ0OiBJbmZpbml0eX0sXG4gICAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHtvbGRTdGFydDogSW5maW5pdHl9O1xuXG4gICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICBtaW5lSW5kZXgrKztcbiAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgIGxldCBtZXJnZWRIdW5rID0ge1xuICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG4gICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICBsaW5lczogW11cbiAgICAgIH07XG4gICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZUluZGV4Kys7XG5cbiAgICAgIHJldC5odW5rcy5wdXNoKG1lcmdlZEh1bmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGxvYWRQYXRjaChwYXJhbSwgYmFzZSkge1xuICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgIGlmICgoL15AQC9tKS50ZXN0KHBhcmFtKSB8fCAoKC9eSW5kZXg6L20pLnRlc3QocGFyYW0pKSkge1xuICAgICAgcmV0dXJuIHBhcnNlUGF0Y2gocGFyYW0pWzBdO1xuICAgIH1cblxuICAgIGlmICghYmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBiYXNlIHJlZmVyZW5jZSBvciBwYXNzIGluIGEgcGF0Y2gnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG5mdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcbiAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgcmV0dXJuIG1pbmU7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgIHJldHVybiB7bWluZSwgdGhlaXJzfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBodW5rQmVmb3JlKHRlc3QsIGNoZWNrKSB7XG4gIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnRcbiAgICAmJiAodGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMpIDwgY2hlY2sub2xkU3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBvbGRTdGFydDogaHVuay5vbGRTdGFydCwgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgIGxpbmVzOiBodW5rLmxpbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlTGluZXMoaHVuaywgbWluZU9mZnNldCwgbWluZUxpbmVzLCB0aGVpck9mZnNldCwgdGhlaXJMaW5lcykge1xuICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuICAvLyBpcyB0aGUgb25seSBvdmVybGFwIHdoZXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbWVyZ2UgdGhlIGNvbnRlbnQgaGVyZS5cbiAgbGV0IG1pbmUgPSB7b2Zmc2V0OiBtaW5lT2Zmc2V0LCBsaW5lczogbWluZUxpbmVzLCBpbmRleDogMH0sXG4gICAgICB0aGVpciA9IHtvZmZzZXQ6IHRoZWlyT2Zmc2V0LCBsaW5lczogdGhlaXJMaW5lcywgaW5kZXg6IDB9O1xuXG4gIC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG4gIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTtcblxuICAvLyBOb3cgaW4gdGhlIG92ZXJsYXAgY29udGVudC4gU2NhbiB0aHJvdWdoIGFuZCBzZWxlY3QgdGhlIGJlc3QgY2hhbmdlcyBmcm9tIGVhY2guXG4gIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJylcbiAgICAgICAgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UobWluZSkpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXJzIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnLScgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnQgPT09IHRoZWlyQ3VycmVudCkge1xuICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcbiAgICAgIG1pbmUuaW5kZXgrKztcbiAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRleHQgbWlzbWF0Y2hcbiAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcblxuICBjYWxjTGluZUNvdW50KGh1bmspO1xufVxuXG5mdW5jdGlvbiBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgbGV0IG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuICBpZiAoYWxsUmVtb3ZlcyhteUNoYW5nZXMpICYmIGFsbFJlbW92ZXModGhlaXJDaGFuZ2VzKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgcmVtb3ZlIGNoYW5nZXMgdGhhdCBhcmUgc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyXG4gICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcylcbiAgICAgICAgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBteUNoYW5nZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoYXJyYXlTdGFydHNXaXRoKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKVxuICAgICAgICAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIGh1bmsubGluZXMucHVzaCguLi4gdGhlaXJDaGFuZ2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICBodW5rLmxpbmVzLnB1c2goLi4uIG15Q2hhbmdlcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG4gIGxldCBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENvbnRleHQodGhlaXIsIG15Q2hhbmdlcyk7XG4gIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG4gICAgaHVuay5saW5lcy5wdXNoKC4uLiB0aGVpckNoYW5nZXMubWVyZ2VkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25mbGljdChodW5rLCBtaW5lLCB0aGVpcikge1xuICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgaHVuay5saW5lcy5wdXNoKHtcbiAgICBjb25mbGljdDogdHJ1ZSxcbiAgICBtaW5lOiBtaW5lLFxuICAgIHRoZWlyczogdGhlaXJcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuICB3aGlsZSAoaW5zZXJ0Lm9mZnNldCA8IHRoZWlyLm9mZnNldCAmJiBpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgICBpbnNlcnQub2Zmc2V0Kys7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdO1xuXG4gICAgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcbiAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG4gICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gIGxldCBjaGFuZ2VzID0gW10sXG4gICAgICBtZXJnZWQgPSBbXSxcbiAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgY29udGV4dENoYW5nZXMgPSBmYWxzZSxcbiAgICAgIGNvbmZsaWN0ZWQgPSBmYWxzZTtcbiAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoXG4gICAgICAgICYmIHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGNoYW5nZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XSxcbiAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cbiAgICAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG5cbiAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgbWF0Y2hJbmRleCsrO1xuXG4gICAgLy8gQ29uc3VtZSBhbnkgYWRkaXRpb25zIGluIHRoZSBvdGhlciBibG9jayBhcyBhIGNvbmZsaWN0IHRvIGF0dGVtcHRcbiAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG4gICAgaWYgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICgobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdIHx8ICcnKVswXSA9PT0gJysnXG4gICAgICAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbmZsaWN0ZWQpIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVyZ2VkLFxuICAgIGNoYW5nZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWxsUmVtb3ZlcyhjaGFuZ2VzKSB7XG4gIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBjaGFuZ2UpIHtcbiAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgfSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBza2lwUmVtb3ZlU3VwZXJzZXQoc3RhdGUsIHJlbW92ZUNoYW5nZXMsIGRlbHRhKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuICAgIGxldCBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuICAgIGlmIChzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleCArIGldICE9PSAnICcgKyBjaGFuZ2VDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gIGxldCBvbGRMaW5lcyA9IDA7XG4gIGxldCBuZXdMaW5lcyA9IDA7XG5cbiAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICBsZXQgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgfVxuICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgIG9sZExpbmVzKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge29sZExpbmVzLCBuZXdMaW5lc307XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/patch/parse.js b/build/node_modules/diff/lib/patch/parse.js new file mode 100644 index 00000000..f1501048 --- /dev/null +++ b/build/node_modules/diff/lib/patch/parse.js @@ -0,0 +1,167 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parsePatch = parsePatch; + +/*istanbul ignore end*/ +function parsePatch(uniDiff) { + /*istanbul ignore start*/ + var + /*istanbul ignore end*/ + options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6WyJwYXJzZVBhdGNoIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJkaWZmc3RyIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJsaXN0IiwiaSIsInBhcnNlSW5kZXgiLCJpbmRleCIsInB1c2giLCJsZW5ndGgiLCJsaW5lIiwidGVzdCIsImhlYWRlciIsImV4ZWMiLCJwYXJzZUZpbGVIZWFkZXIiLCJodW5rcyIsInBhcnNlSHVuayIsInN0cmljdCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwic3Vic3RyIiwidHJpbSIsImNodW5rSGVhZGVySW5kZXgiLCJjaHVua0hlYWRlckxpbmUiLCJjaHVua0hlYWRlciIsImh1bmsiLCJvbGRTdGFydCIsIm9sZExpbmVzIiwibmV3U3RhcnQiLCJuZXdMaW5lcyIsImxpbmVzIiwibGluZWRlbGltaXRlcnMiLCJhZGRDb3VudCIsInJlbW92ZUNvdW50IiwiaW5kZXhPZiIsIm9wZXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsT0FBcEIsRUFBMkM7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJO0FBQ2hELE1BQUlDLE9BQU8sR0FBR0YsT0FBTyxDQUFDRyxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0lDLFVBQVUsR0FBR0osT0FBTyxDQUFDSyxLQUFSLENBQWMsc0JBQWQsS0FBeUMsRUFEMUQ7QUFBQSxNQUVJQyxJQUFJLEdBQUcsRUFGWDtBQUFBLE1BR0lDLENBQUMsR0FBRyxDQUhSOztBQUtBLFdBQVNDLFVBQVQsR0FBc0I7QUFDcEIsUUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQUgsSUFBQUEsSUFBSSxDQUFDSSxJQUFMLENBQVVELEtBQVYsRUFGb0IsQ0FJcEI7O0FB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QUwsS0FBa0IsQ0FBbkMsRUFBc0M7QUFDcENKLE1BQUFBLElBQUksQ0FBQ0ksUUFBTCxHQUFnQixDQUFoQjtBQUNEOztBQUNELFFBQUksQ0FBQ0ksV0FBRCxJQUFnQlIsSUFBSSxDQUFDRSxRQUFMLEtBQWtCLENBQXRDLEVBQXlDO0FBQ3ZDRixNQUFBQSxJQUFJLENBQUNFLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDRCxLQTVEa0IsQ0E4RG5COzs7QUFDQSxRQUFJbEMsT0FBTyxDQUFDa0IsTUFBWixFQUFvQjtBQUNsQixVQUFJcUIsUUFBUSxLQUFLUCxJQUFJLENBQUNJLFFBQXRCLEVBQWdDO0FBQzlCLGNBQU0sSUFBSWpCLEtBQUosQ0FBVSxzREFBc0RVLGdCQUFnQixHQUFHLENBQXpFLENBQVYsQ0FBTjtBQUNEOztBQUNELFVBQUlXLFdBQVcsS0FBS1IsSUFBSSxDQUFDRSxRQUF6QixFQUFtQztBQUNqQyxjQUFNLElBQUlmLEtBQUosQ0FBVSx3REFBd0RVLGdCQUFnQixHQUFHLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT0csSUFBUDtBQUNEOztBQUVELFNBQU8xQixDQUFDLEdBQUdMLE9BQU8sQ0FBQ1MsTUFBbkIsRUFBMkI7QUFDekJILElBQUFBLFVBQVU7QUFDWDs7QUFFRCxTQUFPRixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICBsZXQgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvKS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEaWZmIGluZGV4XG4gICAgICBsZXQgaGVhZGVyID0gKC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLykuZXhlYyhsaW5lKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgaW5kZXguaHVua3MgPSBbXTtcblxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgaWYgKCgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8pLnRlc3QobGluZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCgvXkBALykudGVzdChsaW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KGxpbmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG4gIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgIGNvbnN0IGZpbGVIZWFkZXIgPSAoL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvKS5leGVjKGRpZmZzdHJbaV0pO1xuICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICBsZXQga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgY29uc3QgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKCgvXlwiLipcIiQvKS50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGluZGV4W2tleVByZWZpeCArICdGaWxlTmFtZSddID0gZmlsZU5hbWU7XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnSGVhZGVyJ10gPSAoZGF0YVsxXSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFyc2VzIGEgaHVua1xuICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaHVuay5cbiAgZnVuY3Rpb24gcGFyc2VIdW5rKCkge1xuICAgIGxldCBjaHVua0hlYWRlckluZGV4ID0gaSxcbiAgICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuICAgICAgICBjaHVua0hlYWRlciA9IGNodW5rSGVhZGVyTGluZS5zcGxpdCgvQEAgLShcXGQrKSg/OiwoXFxkKykpPyBcXCsoXFxkKykoPzosKFxcZCspKT8gQEAvKTtcblxuICAgIGxldCBodW5rID0ge1xuICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG4gICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICBsaW5lczogW10sXG4gICAgICBsaW5lZGVsaW1pdGVyczogW11cbiAgICB9O1xuXG4gICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG4gICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsub2xkU3RhcnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICBsZXQgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG4gICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuICAgICAgLy8gQnV0IHRoZXkgY291bGQgYmUgdGhlIGhlYWRlciBmb3IgdGhlIG5leHQgZmlsZS4gVGhlcmVmb3JlIHBydW5lIHN1Y2ggY2FzZXMgb3V0LlxuICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwXG4gICAgICAgICAgICAmJiAoaSArIDIgPCBkaWZmc3RyLmxlbmd0aClcbiAgICAgICAgICAgICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMFxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGV0IG9wZXJhdGlvbiA9IChkaWZmc3RyW2ldLmxlbmd0aCA9PSAwICYmIGkgIT0gKGRpZmZzdHIubGVuZ3RoIC0gMSkpID8gJyAnIDogZGlmZnN0cltpXVswXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGh1bmsubGluZXMucHVzaChkaWZmc3RyW2ldKTtcbiAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgIGFkZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIGVtcHR5IGJsb2NrIGNvdW50IGNhc2VcbiAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsubmV3TGluZXMgPSAwO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZUNvdW50ICYmIGh1bmsub2xkTGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHVuaztcbiAgfVxuXG4gIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICBwYXJzZUluZGV4KCk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiJdfQ== diff --git a/build/node_modules/diff/lib/util/array.js b/build/node_modules/diff/lib/util/array.js new file mode 100644 index 00000000..aecf67ac --- /dev/null +++ b/build/node_modules/diff/lib/util/array.js @@ -0,0 +1,32 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.arrayEqual = arrayEqual; +exports.arrayStartsWith = arrayStartsWith; + +/*istanbul ignore end*/ +function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); +} + +function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RXF1YWwiLCJhIiwiYiIsImxlbmd0aCIsImFycmF5U3RhcnRzV2l0aCIsImFycmF5Iiwic3RhcnQiLCJpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsQ0FBcEIsRUFBdUJDLENBQXZCLEVBQTBCO0FBQy9CLE1BQUlELENBQUMsQ0FBQ0UsTUFBRixLQUFhRCxDQUFDLENBQUNDLE1BQW5CLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU9DLGVBQWUsQ0FBQ0gsQ0FBRCxFQUFJQyxDQUFKLENBQXRCO0FBQ0Q7O0FBRU0sU0FBU0UsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUlBLEtBQUssQ0FBQ0gsTUFBTixHQUFlRSxLQUFLLENBQUNGLE1BQXpCLEVBQWlDO0FBQy9CLFdBQU8sS0FBUDtBQUNEOztBQUVELE9BQUssSUFBSUksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsS0FBSyxDQUFDSCxNQUExQixFQUFrQ0ksQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxRQUFJRCxLQUFLLENBQUNDLENBQUQsQ0FBTCxLQUFhRixLQUFLLENBQUNFLENBQUQsQ0FBdEIsRUFBMkI7QUFDekIsYUFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhcnJheUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBhcnJheVN0YXJ0c1dpdGgoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVN0YXJ0c1dpdGgoYXJyYXksIHN0YXJ0KSB7XG4gIGlmIChzdGFydC5sZW5ndGggPiBhcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19 diff --git a/build/node_modules/diff/lib/util/distance-iterator.js b/build/node_modules/diff/lib/util/distance-iterator.js new file mode 100644 index 00000000..57c06a3f --- /dev/null +++ b/build/node_modules/diff/lib/util/distance-iterator.js @@ -0,0 +1,57 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = _default; + +/*istanbul ignore end*/ +// Iterator that traverses in the range of [min, max], stepping +// by distance from a given start position. I.e. for [0, 4], with +// start of 2, this will iterate 2, 3, 1, 4, 0. +function +/*istanbul ignore start*/ +_default +/*istanbul ignore end*/ +(start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbInN0YXJ0IiwibWluTGluZSIsIm1heExpbmUiLCJ3YW50Rm9yd2FyZCIsImJhY2t3YXJkRXhoYXVzdGVkIiwiZm9yd2FyZEV4aGF1c3RlZCIsImxvY2FsT2Zmc2V0IiwiaXRlcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNlO0FBQUE7QUFBQTtBQUFBO0FBQUEsQ0FBU0EsS0FBVCxFQUFnQkMsT0FBaEIsRUFBeUJDLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUlDLFdBQVcsR0FBRyxJQUFsQjtBQUFBLE1BQ0lDLGlCQUFpQixHQUFHLEtBRHhCO0FBQUEsTUFFSUMsZ0JBQWdCLEdBQUcsS0FGdkI7QUFBQSxNQUdJQyxXQUFXLEdBQUcsQ0FIbEI7QUFLQSxTQUFPLFNBQVNDLFFBQVQsR0FBb0I7QUFDekIsUUFBSUosV0FBVyxJQUFJLENBQUNFLGdCQUFwQixFQUFzQztBQUNwQyxVQUFJRCxpQkFBSixFQUF1QjtBQUNyQkUsUUFBQUEsV0FBVztBQUNaLE9BRkQsTUFFTztBQUNMSCxRQUFBQSxXQUFXLEdBQUcsS0FBZDtBQUNELE9BTG1DLENBT3BDO0FBQ0E7OztBQUNBLFVBQUlILEtBQUssR0FBR00sV0FBUixJQUF1QkosT0FBM0IsRUFBb0M7QUFDbEMsZUFBT0ksV0FBUDtBQUNEOztBQUVERCxNQUFBQSxnQkFBZ0IsR0FBRyxJQUFuQjtBQUNEOztBQUVELFFBQUksQ0FBQ0QsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDQyxnQkFBTCxFQUF1QjtBQUNyQkYsUUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFDRCxPQUhxQixDQUt0QjtBQUNBOzs7QUFDQSxVQUFJRixPQUFPLElBQUlELEtBQUssR0FBR00sV0FBdkIsRUFBb0M7QUFDbEMsZUFBTyxDQUFDQSxXQUFXLEVBQW5CO0FBQ0Q7O0FBRURGLE1BQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0EsYUFBT0csUUFBUSxFQUFmO0FBQ0QsS0E5QndCLENBZ0N6QjtBQUNBOztBQUNELEdBbENEO0FBbUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0= diff --git a/build/node_modules/diff/lib/util/params.js b/build/node_modules/diff/lib/util/params.js new file mode 100644 index 00000000..e838eb2f --- /dev/null +++ b/build/node_modules/diff/lib/util/params.js @@ -0,0 +1,24 @@ +/*istanbul ignore start*/ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.generateOptions = generateOptions; + +/*istanbul ignore end*/ +function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJjYWxsYmFjayIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsSUFBQUEsUUFBUSxDQUFDQyxRQUFULEdBQW9CRixPQUFwQjtBQUNELEdBRkQsTUFFTyxJQUFJQSxPQUFKLEVBQWE7QUFDbEIsU0FBSyxJQUFJRyxJQUFULElBQWlCSCxPQUFqQixFQUEwQjtBQUN4QjtBQUNBLFVBQUlBLE9BQU8sQ0FBQ0ksY0FBUixDQUF1QkQsSUFBdkIsQ0FBSixFQUFrQztBQUNoQ0YsUUFBQUEsUUFBUSxDQUFDRSxJQUFELENBQVIsR0FBaUJILE9BQU8sQ0FBQ0csSUFBRCxDQUF4QjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPRixRQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG4iXX0= diff --git a/build/node_modules/diff/package.json b/build/node_modules/diff/package.json index 84698100..40f2f9da 100644 --- a/build/node_modules/diff/package.json +++ b/build/node_modules/diff/package.json @@ -1,27 +1,29 @@ { - "_from": "diff@1.4.0", - "_id": "diff@1.4.0", + "_from": "diff@5.0.0", + "_id": "diff@5.0.0", "_inBundle": false, - "_integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "_integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "_location": "/diff", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "diff@1.4.0", + "raw": "diff@5.0.0", "name": "diff", "escapedName": "diff", - "rawSpec": "1.4.0", + "rawSpec": "5.0.0", "saveSpec": null, - "fetchSpec": "1.4.0" + "fetchSpec": "5.0.0" }, "_requiredBy": [ - "/mocha" + "/mocha", + "/sinon" ], - "_resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "_shasum": "7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf", - "_spec": "diff@1.4.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/diff/-/diff-5.0.0.tgz", + "_shasum": "7ed6ad76d859d030787ec35855f5b1daf31d852b", + "_spec": "diff@5.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "browser": "./dist/diff.js", "bugs": { "url": "http://github.com/kpdecker/jsdiff/issues", "email": "kpdecker@gmail.com" @@ -31,29 +33,68 @@ "deprecated": false, "description": "A javascript text diff implementation.", "devDependencies": { - "colors": "^1.1.0", - "istanbul": "^0.3.2", - "mocha": "^2.2.4", - "should": "^6.0.1" + "@babel/cli": "^7.2.3", + "@babel/core": "^7.2.2", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/preset-env": "^7.2.3", + "@babel/register": "^7.0.0", + "babel-eslint": "^10.0.1", + "babel-loader": "^8.0.5", + "chai": "^4.2.0", + "colors": "^1.3.3", + "eslint": "^5.12.0", + "grunt": "^1.0.3", + "grunt-babel": "^8.0.0", + "grunt-cli": "^1.3.2", + "grunt-contrib-clean": "^2.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^5.0.0", + "grunt-contrib-watch": "^1.1.0", + "grunt-eslint": "^23.0.0", + "grunt-exec": "^3.0.0", + "grunt-karma": "^4.0.0", + "grunt-mocha-istanbul": "^5.0.2", + "grunt-mocha-test": "^0.13.3", + "grunt-webpack": "^3.1.3", + "istanbul": "github:kpdecker/istanbul", + "karma": "^5.1.1", + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.0.0", + "karma-sauce-launcher": "^4.1.5", + "karma-sourcemap-loader": "^0.3.6", + "karma-webpack": "^4.0.2", + "mocha": "^6.0.0", + "rollup": "^1.0.2", + "rollup-plugin-babel": "^4.2.0", + "semver": "^7.3.2", + "webpack": "^4.28.3", + "webpack-dev-server": "^3.1.14" }, "engines": { "node": ">=0.3.1" }, - "files": [ - "diff.js" - ], + "exports": { + ".": { + "import": "./lib/index.mjs", + "require": "./lib/index.js" + }, + "./package.json": "./package.json", + "./": "./" + }, "homepage": "https://github.com/kpdecker/jsdiff#readme", "keywords": [ "diff", + "jsdiff", + "compare", + "patch", + "text", + "json", + "css", "javascript" ], - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/kpdecker/jsdiff/blob/master/LICENSE" - } - ], - "main": "./diff", + "license": "BSD-3-Clause", + "main": "./lib/index.js", "maintainers": [ { "name": "Kevin Decker", @@ -61,6 +102,7 @@ "url": "http://incaseofstairs.com" } ], + "module": "./lib/index.es6.js", "name": "diff", "optionalDependencies": {}, "repository": { @@ -68,7 +110,10 @@ "url": "git://github.com/kpdecker/jsdiff.git" }, "scripts": { - "test": "istanbul cover node_modules/.bin/_mocha test/*.js && istanbul check-coverage --statements 100 --functions 100 --branches 100 --lines 100 coverage/coverage.json" + "build:node": "yarn babel --out-dir lib --source-maps=inline src", + "clean": "rm -rf lib/ dist/", + "test": "grunt" }, - "version": "1.4.0" + "unpkg": "./dist/diff.js", + "version": "5.0.0" } diff --git a/build/node_modules/diff/release-notes.md b/build/node_modules/diff/release-notes.md new file mode 100644 index 00000000..acc75aa8 --- /dev/null +++ b/build/node_modules/diff/release-notes.md @@ -0,0 +1,303 @@ +# Release Notes + +## Development + +[Commits](https://github.com/kpdecker/jsdiff/compare/v5.0.0...master) + +## v5.0.0 + +- Breaking: UMD export renamed from `JsDiff` to `Diff`. +- Breaking: Newlines separated into separate tokens for word diff. +- Breaking: Unified diffs now match ["quirks"](https://www.artima.com/weblogs/viewpost.jsp?thread=164293) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.1...v5.0.0) + +## v4.0.1 - January 6th, 2019 + +- Fix main reference path - b826104 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.0...v4.0.1) + +## v4.0.0 - January 5th, 2019 + +- [#94](https://github.com/kpdecker/jsdiff/issues/94) - Missing "No newline at end of file" when comparing two texts that do not end in newlines ([@federicotdn](https://api.github.com/users/federicotdn)) +- [#227](https://github.com/kpdecker/jsdiff/issues/227) - Licence +- [#199](https://github.com/kpdecker/jsdiff/issues/199) - Import statement for jsdiff +- [#159](https://github.com/kpdecker/jsdiff/issues/159) - applyPatch affecting wrong line number with with new lines +- [#8](https://github.com/kpdecker/jsdiff/issues/8) - A new state "replace" +- Drop ie9 from karma targets - 79c31bd +- Upgrade deps. Convert from webpack to rollup - 2c1a29c +- Make ()[]"' as word boundaries between each other - f27b899 +- jsdiff: Replaced phantomJS by chrome - ec3114e +- Add yarn.lock to .npmignore - 29466d8 + +Compatibility notes: + +- Bower and Component packages no longer supported + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.5.0...v4.0.0) + +## v3.5.0 - March 4th, 2018 + +- Omit redundant slice in join method of diffArrays - 1023590 +- Support patches with empty lines - fb0f208 +- Accept a custom JSON replacer function for JSON diffing - 69c7f0a +- Optimize parch header parser - 2aec429 +- Fix typos - e89c832 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.4.0...v3.5.0) + +## v3.4.0 - October 7th, 2017 + +- [#183](https://github.com/kpdecker/jsdiff/issues/183) - Feature request: ability to specify a custom equality checker for `diffArrays` +- [#173](https://github.com/kpdecker/jsdiff/issues/173) - Bug: diffArrays gives wrong result on array of booleans +- [#158](https://github.com/kpdecker/jsdiff/issues/158) - diffArrays will not compare the empty string in array? +- comparator for custom equality checks - 30e141e +- count oldLines and newLines when there are conflicts - 53bf384 +- Fix: diffArrays can compare falsey items - 9e24284 +- Docs: Replace grunt with npm test - 00e2f94 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.3.1...v3.4.0) + +## v3.3.1 - September 3rd, 2017 + +- [#141](https://github.com/kpdecker/jsdiff/issues/141) - Cannot apply patch because my file delimiter is "/r/n" instead of "/n" +- [#192](https://github.com/kpdecker/jsdiff/pull/192) - Fix: Bad merge when adding new files (#189) +- correct spelling mistake - 21fa478 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.3.0...v3.3.1) + +## v3.3.0 - July 5th, 2017 + +- [#114](https://github.com/kpdecker/jsdiff/issues/114) - /patch/merge not exported +- Gracefully accept invalid newStart in hunks, same as patch(1) does. - d8a3635 +- Use regex rather than starts/ends with for parsePatch - 6cab62c +- Add browser flag - e64f674 +- refactor: simplified code a bit more - 8f8e0f2 +- refactor: simplified code a bit - b094a6f +- fix: some corrections re ignoreCase option - 3c78fd0 +- ignoreCase option - 3cbfbb5 +- Sanitize filename while parsing patches - 2fe8129 +- Added better installation methods - aced50b +- Simple export of functionality - 8690f31 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.2.0...v3.3.0) + +## v3.2.0 - December 26th, 2016 + +- [#156](https://github.com/kpdecker/jsdiff/pull/156) - Add `undefinedReplacement` option to `diffJson` ([@ewnd9](https://api.github.com/users/ewnd9)) +- [#154](https://github.com/kpdecker/jsdiff/pull/154) - Add `examples` and `images` to `.npmignore`. ([@wtgtybhertgeghgtwtg](https://api.github.com/users/wtgtybhertgeghgtwtg)) +- [#153](https://github.com/kpdecker/jsdiff/pull/153) - feat(structuredPatch): Pass options to diffLines ([@Kiougar](https://api.github.com/users/Kiougar)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.1.0...v3.2.0) + +## v3.1.0 - November 27th, 2016 + +- [#146](https://github.com/kpdecker/jsdiff/pull/146) - JsDiff.diffArrays to compare arrays ([@wvanderdeijl](https://api.github.com/users/wvanderdeijl)) +- [#144](https://github.com/kpdecker/jsdiff/pull/144) - Split file using all possible line delimiter instead of hard-coded "/n" and join lines back using the original delimiters ([@soulbeing](https://api.github.com/users/soulbeing)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.0.1...v3.1.0) + +## v3.0.1 - October 9th, 2016 + +- [#139](https://github.com/kpdecker/jsdiff/pull/139) - Make README.md look nicer in npmjs.com ([@takenspc](https://api.github.com/users/takenspc)) +- [#135](https://github.com/kpdecker/jsdiff/issues/135) - parsePatch combines patches from multiple files into a single IUniDiff when there is no "Index" line ([@ramya-rao-a](https://api.github.com/users/ramya-rao-a)) +- [#124](https://github.com/kpdecker/jsdiff/issues/124) - IE7/IE8 failure since 2.0.0 ([@boneskull](https://api.github.com/users/boneskull)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v3.0.0...v3.0.1) + +## v3.0.0 - August 23rd, 2016 + +- [#130](https://github.com/kpdecker/jsdiff/pull/130) - Add callback argument to applyPatches `patched` option ([@piranna](https://api.github.com/users/piranna)) +- [#120](https://github.com/kpdecker/jsdiff/pull/120) - Correctly handle file names containing spaces ([@adius](https://api.github.com/users/adius)) +- [#119](https://github.com/kpdecker/jsdiff/pull/119) - Do single reflow ([@wifiextender](https://api.github.com/users/wifiextender)) +- [#117](https://github.com/kpdecker/jsdiff/pull/117) - Make more usable with long strings. ([@abnbgist](https://api.github.com/users/abnbgist)) + +Compatibility notes: + +- applyPatches patch callback now is async and requires the callback be called to continue operation + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.2.3...v3.0.0) + +## v2.2.3 - May 31st, 2016 + +- [#118](https://github.com/kpdecker/jsdiff/pull/118) - Add a fix for applying 0-length destination patches ([@chaaz](https://api.github.com/users/chaaz)) +- [#115](https://github.com/kpdecker/jsdiff/pull/115) - Fixed grammar in README ([@krizalys](https://api.github.com/users/krizalys)) +- [#113](https://github.com/kpdecker/jsdiff/pull/113) - fix typo ([@vmazare](https://api.github.com/users/vmazare)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.2.2...v2.2.3) + +## v2.2.2 - March 13th, 2016 + +- [#102](https://github.com/kpdecker/jsdiff/issues/102) - diffJson with dates, returns empty curly braces ([@dr-dimitru](https://api.github.com/users/dr-dimitru)) +- [#97](https://github.com/kpdecker/jsdiff/issues/97) - Whitespaces & diffWords ([@faiwer](https://api.github.com/users/faiwer)) +- [#92](https://github.com/kpdecker/jsdiff/pull/92) - Fixes typo in the readme ([@bg451](https://api.github.com/users/bg451)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.2.1...v2.2.2) + +## v2.2.1 - November 12th, 2015 + +- [#89](https://github.com/kpdecker/jsdiff/pull/89) - add in display selector to readme ([@FranDias](https://api.github.com/users/FranDias)) +- [#88](https://github.com/kpdecker/jsdiff/pull/88) - Split diffs based on file headers instead of 'Index:' metadata ([@piranna](https://api.github.com/users/piranna)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.2.0...v2.2.1) + +## v2.2.0 - October 29th, 2015 + +- [#80](https://github.com/kpdecker/jsdiff/pull/80) - Fix a typo: applyPath -> applyPatch ([@fluxxu](https://api.github.com/users/fluxxu)) +- [#83](https://github.com/kpdecker/jsdiff/pull/83) - Add basic fuzzy matching to applyPatch ([@piranna](https://github.com/piranna)) + [Commits](https://github.com/kpdecker/jsdiff/compare/v2.2.0...v2.2.0) + +## v2.2.0 - October 29th, 2015 + +- [#80](https://github.com/kpdecker/jsdiff/pull/80) - Fix a typo: applyPath -> applyPatch ([@fluxxu](https://api.github.com/users/fluxxu)) +- [#83](https://github.com/kpdecker/jsdiff/pull/83) - Add basic fuzzy matching to applyPatch ([@piranna](https://github.com/piranna)) + [Commits](https://github.com/kpdecker/jsdiff/compare/v2.1.3...v2.2.0) + +## v2.1.3 - September 30th, 2015 + +- [#78](https://github.com/kpdecker/jsdiff/pull/78) - fix: error throwing when apply patch to empty string ([@21paradox](https://api.github.com/users/21paradox)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.1.2...v2.1.3) + +## v2.1.2 - September 23rd, 2015 + +- [#76](https://github.com/kpdecker/jsdiff/issues/76) - diff headers give error ([@piranna](https://api.github.com/users/piranna)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.1.1...v2.1.2) + +## v2.1.1 - September 9th, 2015 + +- [#73](https://github.com/kpdecker/jsdiff/issues/73) - Is applyPatches() exposed in the API? ([@davidparsson](https://api.github.com/users/davidparsson)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.1.0...v2.1.1) + +## v2.1.0 - August 27th, 2015 + +- [#72](https://github.com/kpdecker/jsdiff/issues/72) - Consider using options object API for flag permutations ([@kpdecker](https://api.github.com/users/kpdecker)) +- [#70](https://github.com/kpdecker/jsdiff/issues/70) - diffWords treats \n at the end as significant whitespace ([@nesQuick](https://api.github.com/users/nesQuick)) +- [#69](https://github.com/kpdecker/jsdiff/issues/69) - Missing count ([@wfalkwallace](https://api.github.com/users/wfalkwallace)) +- [#68](https://github.com/kpdecker/jsdiff/issues/68) - diffLines seems broken ([@wfalkwallace](https://api.github.com/users/wfalkwallace)) +- [#60](https://github.com/kpdecker/jsdiff/issues/60) - Support multiple diff hunks ([@piranna](https://api.github.com/users/piranna)) +- [#54](https://github.com/kpdecker/jsdiff/issues/54) - Feature Request: 3-way merge ([@mog422](https://api.github.com/users/mog422)) +- [#42](https://github.com/kpdecker/jsdiff/issues/42) - Fuzz factor for applyPatch ([@stuartpb](https://api.github.com/users/stuartpb)) +- Move whitespace ignore out of equals method - 542063c +- Include source maps in babel output - 7f7ab21 +- Merge diff/line and diff/patch implementations - 1597705 +- Drop map utility method - 1ddc939 +- Documentation for parsePatch and applyPatches - 27c4b77 + +Compatibility notes: + +- The undocumented ignoreWhitespace flag has been removed from the Diff equality check directly. This implementation may be copied to diff utilities if dependencies existed on this functionality. + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.0.2...v2.1.0) + +## v2.0.2 - August 8th, 2015 + +- [#67](https://github.com/kpdecker/jsdiff/issues/67) - cannot require from npm module in node ([@commenthol](https://api.github.com/users/commenthol)) +- Convert to chai since we don’t support IE8 - a96bbad + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.0.1...v2.0.2) + +## v2.0.1 - August 7th, 2015 + +- Add release build at proper step - 57542fd + +[Commits](https://github.com/kpdecker/jsdiff/compare/v2.0.0...v2.0.1) + +## v2.0.0 - August 7th, 2015 + +- [#66](https://github.com/kpdecker/jsdiff/issues/66) - Add karma and sauce tests ([@kpdecker](https://api.github.com/users/kpdecker)) +- [#65](https://github.com/kpdecker/jsdiff/issues/65) - Create component repository for bower ([@kpdecker](https://api.github.com/users/kpdecker)) +- [#64](https://github.com/kpdecker/jsdiff/issues/64) - Automatically call removeEmpty for all tokenizer calls ([@kpdecker](https://api.github.com/users/kpdecker)) +- [#62](https://github.com/kpdecker/jsdiff/pull/62) - Allow access to structured object representation of patch data ([@bittrance](https://api.github.com/users/bittrance)) +- [#61](https://github.com/kpdecker/jsdiff/pull/61) - Use svg instead of png to get better image quality ([@PeterDaveHello](https://api.github.com/users/PeterDaveHello)) +- [#29](https://github.com/kpdecker/jsdiff/issues/29) - word tokenizer works only for 7 bit ascii ([@plasmagunman](https://api.github.com/users/plasmagunman)) + +Compatibility notes: + +- `this.removeEmpty` is now called automatically for all instances. If this is not desired, this may be overridden on a per instance basis. +- The library has been refactored to use some ES6 features. The external APIs should remain the same, but bower projects that directly referenced the repository will now have to point to the [components/jsdiff](https://github.com/components/jsdiff) repository. + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.4.0...v2.0.0) + +## v1.4.0 - May 6th, 2015 + +- [#57](https://github.com/kpdecker/jsdiff/issues/57) - createPatch -> applyPatch failed. ([@mog422](https://api.github.com/users/mog422)) +- [#56](https://github.com/kpdecker/jsdiff/pull/56) - Two files patch ([@rgeissert](https://api.github.com/users/rgeissert)) +- [#14](https://github.com/kpdecker/jsdiff/issues/14) - Flip added and removed order? ([@jakesandlund](https://api.github.com/users/jakesandlund)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.3.2...v1.4.0) + +## v1.3.2 - March 30th, 2015 + +- [#53](https://github.com/kpdecker/jsdiff/pull/53) - Updated README.MD with Bower installation instructions ([@ofbriggs](https://api.github.com/users/ofbriggs)) +- [#49](https://github.com/kpdecker/jsdiff/issues/49) - Cannot read property 'oldlines' of undefined ([@nwtn](https://api.github.com/users/nwtn)) +- [#44](https://github.com/kpdecker/jsdiff/issues/44) - invalid-meta jsdiff is missing "main" entry in bower.json + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.3.1...v1.3.2) + +## v1.3.1 - March 13th, 2015 + +- [#52](https://github.com/kpdecker/jsdiff/pull/52) - Fix for #51 Wrong result of JsDiff.diffLines ([@felicienfrancois](https://api.github.com/users/felicienfrancois)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.3.0...v1.3.1) + +## v1.3.0 - March 2nd, 2015 + +- [#47](https://github.com/kpdecker/jsdiff/pull/47) - Adding Diff Trimmed Lines ([@JamesGould123](https://api.github.com/users/JamesGould123)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.2.2...v1.3.0) + +## v1.2.2 - January 26th, 2015 + +- [#45](https://github.com/kpdecker/jsdiff/pull/45) - Fix AMD module loading ([@pedrocarrico](https://api.github.com/users/pedrocarrico)) +- [#43](https://github.com/kpdecker/jsdiff/pull/43) - added a bower file ([@nbrustein](https://api.github.com/users/nbrustein)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.2.1...v1.2.2) + +## v1.2.1 - December 26th, 2014 + +- [#41](https://github.com/kpdecker/jsdiff/pull/41) - change condition of using node export system. ([@ironhee](https://api.github.com/users/ironhee)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.2.0...v1.2.1) + +## v1.2.0 - November 29th, 2014 + +- [#37](https://github.com/kpdecker/jsdiff/pull/37) - Add support for sentences. ([@vmariano](https://api.github.com/users/vmariano)) +- [#28](https://github.com/kpdecker/jsdiff/pull/28) - Implemented diffJson ([@papandreou](https://api.github.com/users/papandreou)) +- [#27](https://github.com/kpdecker/jsdiff/issues/27) - Slow to execute over diffs with a large number of changes ([@termi](https://api.github.com/users/termi)) +- Allow for optional async diffing - 19385b9 +- Fix diffChars implementation - eaa44ed + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.1.0...v1.2.0) + +## v1.1.0 - November 25th, 2014 + +- [#33](https://github.com/kpdecker/jsdiff/pull/33) - AMD and global exports ([@ovcharik](https://api.github.com/users/ovcharik)) +- [#32](https://github.com/kpdecker/jsdiff/pull/32) - Add support for component ([@vmariano](https://api.github.com/users/vmariano)) +- [#31](https://github.com/kpdecker/jsdiff/pull/31) - Don't rely on Array.prototype.map ([@papandreou](https://api.github.com/users/papandreou)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.0.8...v1.1.0) + +## v1.0.8 - December 22nd, 2013 + +- [#24](https://github.com/kpdecker/jsdiff/pull/24) - Handle windows newlines on non windows machines. ([@benogle](https://api.github.com/users/benogle)) +- [#23](https://github.com/kpdecker/jsdiff/pull/23) - Prettied up the API formatting a little, and added basic node and web examples ([@airportyh](https://api.github.com/users/airportyh)) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.0.7...v1.0.8) + +## v1.0.7 - September 11th, 2013 + +- [#22](https://github.com/kpdecker/jsdiff/pull/22) - Added variant of WordDiff that doesn't ignore whitespace differences ([@papandreou](https://api.github.com/users/papandreou) + +- Add 0.10 to travis tests - 243a526 + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.0.6...v1.0.7) + +## v1.0.6 - August 30th, 2013 + +- [#19](https://github.com/kpdecker/jsdiff/pull/19) - Explicitly define contents of npm package ([@sindresorhus](https://api.github.com/users/sindresorhus) + +[Commits](https://github.com/kpdecker/jsdiff/compare/v1.0.5...v1.0.6) diff --git a/build/node_modules/diff/runtime.js b/build/node_modules/diff/runtime.js new file mode 100644 index 00000000..82ea7e69 --- /dev/null +++ b/build/node_modules/diff/runtime.js @@ -0,0 +1,3 @@ +require('@babel/register')({ + ignore: ['lib', 'node_modules'] +}); diff --git a/build/node_modules/diffie-hellman/node_modules/bn.js/package.json b/build/node_modules/diffie-hellman/node_modules/bn.js/package.json index 2d601657..10d6a8f6 100644 --- a/build/node_modules/diffie-hellman/node_modules/bn.js/package.json +++ b/build/node_modules/diffie-hellman/node_modules/bn.js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/diffie-hellman" ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "_shasum": "775b3f278efbb9718eec7361f483fb36fbbfea88", "_spec": "bn.js@^4.1.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/diffie-hellman", diff --git a/build/node_modules/diffie-hellman/package.json b/build/node_modules/diffie-hellman/package.json index 61f3cfe1..e69151c7 100644 --- a/build/node_modules/diffie-hellman/package.json +++ b/build/node_modules/diffie-hellman/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/crypto-browserify" ], - "_resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "_shasum": "40e8ee98f55a2149607146921c63e1ae5f3d2875", "_spec": "diffie-hellman@^5.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/crypto-browserify", diff --git a/build/node_modules/elliptic/node_modules/bn.js/package.json b/build/node_modules/elliptic/node_modules/bn.js/package.json index 1e7ed080..495898b0 100644 --- a/build/node_modules/elliptic/node_modules/bn.js/package.json +++ b/build/node_modules/elliptic/node_modules/bn.js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/elliptic" ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "_shasum": "775b3f278efbb9718eec7361f483fb36fbbfea88", "_spec": "bn.js@^4.11.9", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/elliptic", diff --git a/build/node_modules/elliptic/package.json b/build/node_modules/elliptic/package.json index 9ab49b89..ab77c66f 100644 --- a/build/node_modules/elliptic/package.json +++ b/build/node_modules/elliptic/package.json @@ -19,7 +19,7 @@ "/browserify-sign", "/create-ecdh" ], - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/elliptic/-/elliptic-6.5.4.tgz", "_shasum": "da37cebd31e79a1367e941b592ed1fbebd58abbb", "_spec": "elliptic@^6.5.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-sign", diff --git a/build/node_modules/emoji-regex/LICENSE-MIT.txt b/build/node_modules/emoji-regex/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/build/node_modules/emoji-regex/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/emoji-regex/README.md b/build/node_modules/emoji-regex/README.md new file mode 100644 index 00000000..f10e1733 --- /dev/null +++ b/build/node_modules/emoji-regex/README.md @@ -0,0 +1,73 @@ +# emoji-regex [![Build status](https://travis-ci.org/mathiasbynens/emoji-regex.svg?branch=master)](https://travis-ci.org/mathiasbynens/emoji-regex) + +_emoji-regex_ offers a regular expression to match all emoji symbols (including textual representations of emoji) as per the Unicode Standard. + +This repository contains a script that generates this regular expression based on [the data from Unicode v12](https://github.com/mathiasbynens/unicode-12.0.0). Because of this, the regular expression can easily be updated whenever new emoji are added to the Unicode standard. + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install emoji-regex +``` + +In [Node.js](https://nodejs.org/): + +```js +const emojiRegex = require('emoji-regex'); +// Note: because the regular expression has the global flag set, this module +// exports a function that returns the regex rather than exporting the regular +// expression itself, to make it impossible to (accidentally) mutate the +// original regular expression. + +const text = ` +\u{231A}: ⌚ default emoji presentation character (Emoji_Presentation) +\u{2194}\u{FE0F}: ↔️ default text presentation character rendered as emoji +\u{1F469}: 👩 emoji modifier base (Emoji_Modifier_Base) +\u{1F469}\u{1F3FF}: 👩🏿 emoji modifier base followed by a modifier +`; + +const regex = emojiRegex(); +let match; +while (match = regex.exec(text)) { + const emoji = match[0]; + console.log(`Matched sequence ${ emoji } — code points: ${ [...emoji].length }`); +} +``` + +Console output: + +``` +Matched sequence ⌚ — code points: 1 +Matched sequence ⌚ — code points: 1 +Matched sequence ↔️ — code points: 2 +Matched sequence ↔️ — code points: 2 +Matched sequence 👩 — code points: 1 +Matched sequence 👩 — code points: 1 +Matched sequence 👩🏿 — code points: 2 +Matched sequence 👩🏿 — code points: 2 +``` + +To match emoji in their textual representation as well (i.e. emoji that are not `Emoji_Presentation` symbols and that aren’t forced to render as emoji by a variation selector), `require` the other regex: + +```js +const emojiRegex = require('emoji-regex/text.js'); +``` + +Additionally, in environments which support ES2015 Unicode escapes, you may `require` ES2015-style versions of the regexes: + +```js +const emojiRegex = require('emoji-regex/es2015/index.js'); +const emojiRegexText = require('emoji-regex/es2015/text.js'); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_emoji-regex_ is available under the [MIT](https://mths.be/mit) license. diff --git a/build/node_modules/emoji-regex/es2015/index.js b/build/node_modules/emoji-regex/es2015/index.js new file mode 100644 index 00000000..b4cf3dcd --- /dev/null +++ b/build/node_modules/emoji-regex/es2015/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/build/node_modules/emoji-regex/es2015/text.js b/build/node_modules/emoji-regex/es2015/text.js new file mode 100644 index 00000000..780309df --- /dev/null +++ b/build/node_modules/emoji-regex/es2015/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + // https://mths.be/emoji + return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu; +}; diff --git a/build/node_modules/emoji-regex/index.d.ts b/build/node_modules/emoji-regex/index.d.ts new file mode 100644 index 00000000..1955b470 --- /dev/null +++ b/build/node_modules/emoji-regex/index.d.ts @@ -0,0 +1,23 @@ +declare module 'emoji-regex' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} + +declare module 'emoji-regex/es2015/text' { + function emojiRegex(): RegExp; + + export default emojiRegex; +} diff --git a/build/node_modules/emoji-regex/index.js b/build/node_modules/emoji-regex/index.js new file mode 100644 index 00000000..d993a3a9 --- /dev/null +++ b/build/node_modules/emoji-regex/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/build/node_modules/emoji-regex/package.json b/build/node_modules/emoji-regex/package.json new file mode 100644 index 00000000..cbc40081 --- /dev/null +++ b/build/node_modules/emoji-regex/package.json @@ -0,0 +1,77 @@ +{ + "_from": "emoji-regex@^8.0.0", + "_id": "emoji-regex@8.0.0", + "_inBundle": false, + "_integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "_location": "/emoji-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "emoji-regex@^8.0.0", + "name": "emoji-regex", + "escapedName": "emoji-regex", + "rawSpec": "^8.0.0", + "saveSpec": null, + "fetchSpec": "^8.0.0" + }, + "_requiredBy": [ + "/string-width" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "_shasum": "e818fd69ce5ccfcb404594f842963bf53164cc37", + "_spec": "emoji-regex@^8.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/string-width", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/emoji-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.", + "devDependencies": { + "@babel/cli": "^7.2.3", + "@babel/core": "^7.3.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/preset-env": "^7.3.4", + "mocha": "^6.0.2", + "regexgen": "^1.3.0", + "unicode-12.0.0": "^0.7.9" + }, + "files": [ + "LICENSE-MIT.txt", + "index.js", + "index.d.ts", + "text.js", + "es2015/index.js", + "es2015/text.js" + ], + "homepage": "https://mths.be/emoji-regex", + "keywords": [ + "unicode", + "regex", + "regexp", + "regular expressions", + "code points", + "symbols", + "characters", + "emoji" + ], + "license": "MIT", + "main": "index.js", + "name": "emoji-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/emoji-regex.git" + }, + "scripts": { + "build": "rm -rf -- es2015; babel src -d .; NODE_ENV=es2015 babel src -d ./es2015; node script/inject-sequences.js", + "test": "mocha", + "test:watch": "npm run test -- --watch" + }, + "types": "index.d.ts", + "version": "8.0.0" +} diff --git a/build/node_modules/emoji-regex/text.js b/build/node_modules/emoji-regex/text.js new file mode 100644 index 00000000..0a55ce2f --- /dev/null +++ b/build/node_modules/emoji-regex/text.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function () { + // https://mths.be/emoji + return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g; +}; diff --git a/build/node_modules/enabled/package.json b/build/node_modules/enabled/package.json index 80239296..241065d6 100644 --- a/build/node_modules/enabled/package.json +++ b/build/node_modules/enabled/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/@dabh/diagnostics" ], - "_resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/enabled/-/enabled-2.0.0.tgz", "_shasum": "f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2", "_spec": "enabled@2.0.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@dabh/diagnostics", diff --git a/build/node_modules/errno/package.json b/build/node_modules/errno/package.json index 5c173eba..c317c764 100644 --- a/build/node_modules/errno/package.json +++ b/build/node_modules/errno/package.json @@ -19,7 +19,7 @@ "/level-filesystem", "/levelup" ], - "_resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/errno/-/errno-0.1.8.tgz", "_shasum": "8bb3e9c7d463be4976ff888f76b4809ebc2e811f", "_spec": "errno@^0.1.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/es-abstract/.editorconfig b/build/node_modules/es-abstract/.editorconfig deleted file mode 100644 index eaa21416..00000000 --- a/build/node_modules/es-abstract/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = tab; -insert_final_newline = true; -quote_type = auto; -space_after_anonymous_functions = true; -space_after_control_statements = true; -spaces_around_operators = true; -trim_trailing_whitespace = true; -spaces_in_brackets = false; -end_of_line = lf; - diff --git a/build/node_modules/es-abstract/.eslintignore b/build/node_modules/es-abstract/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/es-abstract/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/es-abstract/.eslintrc b/build/node_modules/es-abstract/.eslintrc deleted file mode 100644 index 1a0d2d2b..00000000 --- a/build/node_modules/es-abstract/.eslintrc +++ /dev/null @@ -1,65 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "env": { - "es6": true, - }, - - "rules": { - "array-bracket-newline": 0, - "array-element-newline": 0, - "complexity": 0, - "eqeqeq": [2, "allow-null"], - "func-name-matching": 0, - "id-length": [2, { "min": 1, "max": 40 }], - "max-params": [2, 4], - "max-statements-per-line": [2, { "max": 2 }], - "multiline-comment-style": 0, - "no-magic-numbers": 0, - "new-cap": 0, - "no-extra-parens": 1, - "operator-linebreak": [2, "before"], - "sort-keys": 0, - }, - - "overrides": [ - { - "files": "GetIntrinsic.js", - "rules": { - "max-statements": 0, - } - }, - { - "files": "operations/*", - "rules": { - "max-lines": 0, - }, - }, - { - "files": [ - "operations/deltas.js", - "operations/getOps.js", - "operations/spackle.js", - "operations/years.js", - ], - "extends": "@ljharb/eslint-config/node/latest", - "rules": { - "func-style": 0, - "max-lines-per-function": 0, - "max-nested-callbacks": 0, - "no-throw-literal": 0, - }, - }, - { - "files": "test/**", - "extends": "@ljharb/eslint-config/tests", - "rules": { - "max-lines-per-function": 0, - "no-implicit-coercion": 0, - "no-invalid-this": 1, - }, - }, - ], -} diff --git a/build/node_modules/es-abstract/.gitattributes b/build/node_modules/es-abstract/.gitattributes deleted file mode 100644 index cbdb52f9..00000000 --- a/build/node_modules/es-abstract/.gitattributes +++ /dev/null @@ -1,625 +0,0 @@ -2015/AbstractRelationalComparison.js spackled linguist-generated=true -2015/DateFromTime.js spackled linguist-generated=true -2015/Day.js spackled linguist-generated=true -2015/DayFromYear.js spackled linguist-generated=true -2015/DayWithinYear.js spackled linguist-generated=true -2015/DaysInYear.js spackled linguist-generated=true -2015/HourFromTime.js spackled linguist-generated=true -2015/InLeapYear.js spackled linguist-generated=true -2015/IsCallable.js spackled linguist-generated=true -2015/IsPropertyDescriptor.js spackled linguist-generated=true -2015/MakeDate.js spackled linguist-generated=true -2015/MakeDay.js spackled linguist-generated=true -2015/MakeTime.js spackled linguist-generated=true -2015/MinFromTime.js spackled linguist-generated=true -2015/MonthFromTime.js spackled linguist-generated=true -2015/SameValue.js spackled linguist-generated=true -2015/SecFromTime.js spackled linguist-generated=true -2015/StrictEqualityComparison.js spackled linguist-generated=true -2015/TimeClip.js spackled linguist-generated=true -2015/TimeFromYear.js spackled linguist-generated=true -2015/TimeWithinDay.js spackled linguist-generated=true -2015/ToBoolean.js spackled linguist-generated=true -2015/ToInt32.js spackled linguist-generated=true -2015/ToPropertyDescriptor.js spackled linguist-generated=true -2015/ToUint16.js spackled linguist-generated=true -2015/ToUint32.js spackled linguist-generated=true -2015/WeekDay.js spackled linguist-generated=true -2015/YearFromTime.js spackled linguist-generated=true -2015/abs.js spackled linguist-generated=true -2015/floor.js spackled linguist-generated=true -2015/modulo.js spackled linguist-generated=true -2015/msFromTime.js spackled linguist-generated=true -2016/AbstractEqualityComparison.js spackled linguist-generated=true -2016/AbstractRelationalComparison.js spackled linguist-generated=true -2016/AdvanceStringIndex.js spackled linguist-generated=true -2016/ArrayCreate.js spackled linguist-generated=true -2016/ArraySetLength.js spackled linguist-generated=true -2016/ArraySpeciesCreate.js spackled linguist-generated=true -2016/Call.js spackled linguist-generated=true -2016/CanonicalNumericIndexString.js spackled linguist-generated=true -2016/CompletePropertyDescriptor.js spackled linguist-generated=true -2016/CreateDataProperty.js spackled linguist-generated=true -2016/CreateDataPropertyOrThrow.js spackled linguist-generated=true -2016/CreateHTML.js spackled linguist-generated=true -2016/CreateIterResultObject.js spackled linguist-generated=true -2016/CreateListFromArrayLike.js spackled linguist-generated=true -2016/CreateMethodProperty.js spackled linguist-generated=true -2016/DateFromTime.js spackled linguist-generated=true -2016/Day.js spackled linguist-generated=true -2016/DayFromYear.js spackled linguist-generated=true -2016/DayWithinYear.js spackled linguist-generated=true -2016/DaysInYear.js spackled linguist-generated=true -2016/DefinePropertyOrThrow.js spackled linguist-generated=true -2016/DeletePropertyOrThrow.js spackled linguist-generated=true -2016/EnumerableOwnNames.js spackled linguist-generated=true -2016/FromPropertyDescriptor.js spackled linguist-generated=true -2016/Get.js spackled linguist-generated=true -2016/GetIterator.js spackled linguist-generated=true -2016/GetMethod.js spackled linguist-generated=true -2016/GetOwnPropertyKeys.js spackled linguist-generated=true -2016/GetPrototypeFromConstructor.js spackled linguist-generated=true -2016/GetSubstitution.js spackled linguist-generated=true -2016/GetV.js spackled linguist-generated=true -2016/HasOwnProperty.js spackled linguist-generated=true -2016/HasProperty.js spackled linguist-generated=true -2016/HourFromTime.js spackled linguist-generated=true -2016/InLeapYear.js spackled linguist-generated=true -2016/InstanceofOperator.js spackled linguist-generated=true -2016/Invoke.js spackled linguist-generated=true -2016/IsAccessorDescriptor.js spackled linguist-generated=true -2016/IsArray.js spackled linguist-generated=true -2016/IsCallable.js spackled linguist-generated=true -2016/IsConcatSpreadable.js spackled linguist-generated=true -2016/IsConstructor.js spackled linguist-generated=true -2016/IsDataDescriptor.js spackled linguist-generated=true -2016/IsExtensible.js spackled linguist-generated=true -2016/IsGenericDescriptor.js spackled linguist-generated=true -2016/IsInteger.js spackled linguist-generated=true -2016/IsPromise.js spackled linguist-generated=true -2016/IsPropertyDescriptor.js spackled linguist-generated=true -2016/IsPropertyKey.js spackled linguist-generated=true -2016/IsRegExp.js spackled linguist-generated=true -2016/IteratorClose.js spackled linguist-generated=true -2016/IteratorComplete.js spackled linguist-generated=true -2016/IteratorNext.js spackled linguist-generated=true -2016/IteratorStep.js spackled linguist-generated=true -2016/IteratorValue.js spackled linguist-generated=true -2016/MakeDate.js spackled linguist-generated=true -2016/MakeDay.js spackled linguist-generated=true -2016/MakeTime.js spackled linguist-generated=true -2016/MinFromTime.js spackled linguist-generated=true -2016/MonthFromTime.js spackled linguist-generated=true -2016/ObjectCreate.js spackled linguist-generated=true -2016/OrdinaryCreateFromConstructor.js spackled linguist-generated=true -2016/OrdinaryDefineOwnProperty.js spackled linguist-generated=true -2016/OrdinaryGetOwnProperty.js spackled linguist-generated=true -2016/OrdinaryHasInstance.js spackled linguist-generated=true -2016/OrdinaryHasProperty.js spackled linguist-generated=true -2016/QuoteJSONString.js spackled linguist-generated=true -2016/RegExpCreate.js spackled linguist-generated=true -2016/RegExpExec.js spackled linguist-generated=true -2016/RequireObjectCoercible.js spackled linguist-generated=true -2016/SameValue.js spackled linguist-generated=true -2016/SameValueZero.js spackled linguist-generated=true -2016/SecFromTime.js spackled linguist-generated=true -2016/Set.js spackled linguist-generated=true -2016/SetFunctionName.js spackled linguist-generated=true -2016/SetIntegrityLevel.js spackled linguist-generated=true -2016/SpeciesConstructor.js spackled linguist-generated=true -2016/SplitMatch.js spackled linguist-generated=true -2016/StrictEqualityComparison.js spackled linguist-generated=true -2016/StringCreate.js spackled linguist-generated=true -2016/SymbolDescriptiveString.js spackled linguist-generated=true -2016/TestIntegrityLevel.js spackled linguist-generated=true -2016/TimeClip.js spackled linguist-generated=true -2016/TimeFromYear.js spackled linguist-generated=true -2016/TimeWithinDay.js spackled linguist-generated=true -2016/ToBoolean.js spackled linguist-generated=true -2016/ToDateString.js spackled linguist-generated=true -2016/ToInt16.js spackled linguist-generated=true -2016/ToInt32.js spackled linguist-generated=true -2016/ToInt8.js spackled linguist-generated=true -2016/ToInteger.js spackled linguist-generated=true -2016/ToLength.js spackled linguist-generated=true -2016/ToNumber.js spackled linguist-generated=true -2016/ToObject.js spackled linguist-generated=true -2016/ToPrimitive.js spackled linguist-generated=true -2016/ToPropertyDescriptor.js spackled linguist-generated=true -2016/ToPropertyKey.js spackled linguist-generated=true -2016/ToString.js spackled linguist-generated=true -2016/ToUint16.js spackled linguist-generated=true -2016/ToUint32.js spackled linguist-generated=true -2016/ToUint8.js spackled linguist-generated=true -2016/ToUint8Clamp.js spackled linguist-generated=true -2016/Type.js spackled linguist-generated=true -2016/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true -2016/WeekDay.js spackled linguist-generated=true -2016/YearFromTime.js spackled linguist-generated=true -2016/abs.js spackled linguist-generated=true -2016/floor.js spackled linguist-generated=true -2016/modulo.js spackled linguist-generated=true -2016/msFromTime.js spackled linguist-generated=true -2016/thisBooleanValue.js spackled linguist-generated=true -2016/thisNumberValue.js spackled linguist-generated=true -2016/thisStringValue.js spackled linguist-generated=true -2016/thisTimeValue.js spackled linguist-generated=true -2017/AbstractEqualityComparison.js spackled linguist-generated=true -2017/AbstractRelationalComparison.js spackled linguist-generated=true -2017/AdvanceStringIndex.js spackled linguist-generated=true -2017/ArrayCreate.js spackled linguist-generated=true -2017/ArraySetLength.js spackled linguist-generated=true -2017/ArraySpeciesCreate.js spackled linguist-generated=true -2017/Call.js spackled linguist-generated=true -2017/CanonicalNumericIndexString.js spackled linguist-generated=true -2017/CompletePropertyDescriptor.js spackled linguist-generated=true -2017/CreateDataProperty.js spackled linguist-generated=true -2017/CreateDataPropertyOrThrow.js spackled linguist-generated=true -2017/CreateHTML.js spackled linguist-generated=true -2017/CreateIterResultObject.js spackled linguist-generated=true -2017/CreateListFromArrayLike.js spackled linguist-generated=true -2017/CreateMethodProperty.js spackled linguist-generated=true -2017/DateFromTime.js spackled linguist-generated=true -2017/Day.js spackled linguist-generated=true -2017/DayFromYear.js spackled linguist-generated=true -2017/DayWithinYear.js spackled linguist-generated=true -2017/DaysInYear.js spackled linguist-generated=true -2017/DefinePropertyOrThrow.js spackled linguist-generated=true -2017/DeletePropertyOrThrow.js spackled linguist-generated=true -2017/FromPropertyDescriptor.js spackled linguist-generated=true -2017/Get.js spackled linguist-generated=true -2017/GetIterator.js spackled linguist-generated=true -2017/GetMethod.js spackled linguist-generated=true -2017/GetOwnPropertyKeys.js spackled linguist-generated=true -2017/GetPrototypeFromConstructor.js spackled linguist-generated=true -2017/GetSubstitution.js spackled linguist-generated=true -2017/GetV.js spackled linguist-generated=true -2017/HasOwnProperty.js spackled linguist-generated=true -2017/HasProperty.js spackled linguist-generated=true -2017/HourFromTime.js spackled linguist-generated=true -2017/InLeapYear.js spackled linguist-generated=true -2017/InstanceofOperator.js spackled linguist-generated=true -2017/Invoke.js spackled linguist-generated=true -2017/IsAccessorDescriptor.js spackled linguist-generated=true -2017/IsArray.js spackled linguist-generated=true -2017/IsCallable.js spackled linguist-generated=true -2017/IsConcatSpreadable.js spackled linguist-generated=true -2017/IsConstructor.js spackled linguist-generated=true -2017/IsDataDescriptor.js spackled linguist-generated=true -2017/IsExtensible.js spackled linguist-generated=true -2017/IsGenericDescriptor.js spackled linguist-generated=true -2017/IsInteger.js spackled linguist-generated=true -2017/IsPromise.js spackled linguist-generated=true -2017/IsPropertyDescriptor.js spackled linguist-generated=true -2017/IsPropertyKey.js spackled linguist-generated=true -2017/IsRegExp.js spackled linguist-generated=true -2017/IteratorClose.js spackled linguist-generated=true -2017/IteratorComplete.js spackled linguist-generated=true -2017/IteratorNext.js spackled linguist-generated=true -2017/IteratorStep.js spackled linguist-generated=true -2017/IteratorValue.js spackled linguist-generated=true -2017/MakeDate.js spackled linguist-generated=true -2017/MakeDay.js spackled linguist-generated=true -2017/MakeTime.js spackled linguist-generated=true -2017/MinFromTime.js spackled linguist-generated=true -2017/MonthFromTime.js spackled linguist-generated=true -2017/ObjectCreate.js spackled linguist-generated=true -2017/OrdinaryCreateFromConstructor.js spackled linguist-generated=true -2017/OrdinaryDefineOwnProperty.js spackled linguist-generated=true -2017/OrdinaryGetOwnProperty.js spackled linguist-generated=true -2017/OrdinaryGetPrototypeOf.js spackled linguist-generated=true -2017/OrdinaryHasInstance.js spackled linguist-generated=true -2017/OrdinaryHasProperty.js spackled linguist-generated=true -2017/OrdinarySetPrototypeOf.js spackled linguist-generated=true -2017/QuoteJSONString.js spackled linguist-generated=true -2017/RegExpCreate.js spackled linguist-generated=true -2017/RegExpExec.js spackled linguist-generated=true -2017/RequireObjectCoercible.js spackled linguist-generated=true -2017/SameValue.js spackled linguist-generated=true -2017/SameValueNonNumber.js spackled linguist-generated=true -2017/SameValueZero.js spackled linguist-generated=true -2017/SecFromTime.js spackled linguist-generated=true -2017/Set.js spackled linguist-generated=true -2017/SetFunctionName.js spackled linguist-generated=true -2017/SetIntegrityLevel.js spackled linguist-generated=true -2017/SpeciesConstructor.js spackled linguist-generated=true -2017/SplitMatch.js spackled linguist-generated=true -2017/StrictEqualityComparison.js spackled linguist-generated=true -2017/StringCreate.js spackled linguist-generated=true -2017/SymbolDescriptiveString.js spackled linguist-generated=true -2017/TestIntegrityLevel.js spackled linguist-generated=true -2017/TimeClip.js spackled linguist-generated=true -2017/TimeFromYear.js spackled linguist-generated=true -2017/TimeWithinDay.js spackled linguist-generated=true -2017/ToBoolean.js spackled linguist-generated=true -2017/ToDateString.js spackled linguist-generated=true -2017/ToInt16.js spackled linguist-generated=true -2017/ToInt32.js spackled linguist-generated=true -2017/ToInt8.js spackled linguist-generated=true -2017/ToInteger.js spackled linguist-generated=true -2017/ToLength.js spackled linguist-generated=true -2017/ToNumber.js spackled linguist-generated=true -2017/ToObject.js spackled linguist-generated=true -2017/ToPrimitive.js spackled linguist-generated=true -2017/ToPropertyDescriptor.js spackled linguist-generated=true -2017/ToPropertyKey.js spackled linguist-generated=true -2017/ToString.js spackled linguist-generated=true -2017/ToUint16.js spackled linguist-generated=true -2017/ToUint32.js spackled linguist-generated=true -2017/ToUint8.js spackled linguist-generated=true -2017/ToUint8Clamp.js spackled linguist-generated=true -2017/Type.js spackled linguist-generated=true -2017/UTF16Decode.js spackled linguist-generated=true -2017/UTF16Encoding.js spackled linguist-generated=true -2017/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true -2017/WeekDay.js spackled linguist-generated=true -2017/YearFromTime.js spackled linguist-generated=true -2017/abs.js spackled linguist-generated=true -2017/floor.js spackled linguist-generated=true -2017/modulo.js spackled linguist-generated=true -2017/msFromTime.js spackled linguist-generated=true -2017/thisBooleanValue.js spackled linguist-generated=true -2017/thisNumberValue.js spackled linguist-generated=true -2017/thisStringValue.js spackled linguist-generated=true -2017/thisTimeValue.js spackled linguist-generated=true -2018/AbstractEqualityComparison.js spackled linguist-generated=true -2018/AbstractRelationalComparison.js spackled linguist-generated=true -2018/AdvanceStringIndex.js spackled linguist-generated=true -2018/ArrayCreate.js spackled linguist-generated=true -2018/ArraySetLength.js spackled linguist-generated=true -2018/ArraySpeciesCreate.js spackled linguist-generated=true -2018/Call.js spackled linguist-generated=true -2018/CanonicalNumericIndexString.js spackled linguist-generated=true -2018/CompletePropertyDescriptor.js spackled linguist-generated=true -2018/CreateDataProperty.js spackled linguist-generated=true -2018/CreateDataPropertyOrThrow.js spackled linguist-generated=true -2018/CreateHTML.js spackled linguist-generated=true -2018/CreateIterResultObject.js spackled linguist-generated=true -2018/CreateListFromArrayLike.js spackled linguist-generated=true -2018/CreateMethodProperty.js spackled linguist-generated=true -2018/DateFromTime.js spackled linguist-generated=true -2018/Day.js spackled linguist-generated=true -2018/DayFromYear.js spackled linguist-generated=true -2018/DayWithinYear.js spackled linguist-generated=true -2018/DaysInYear.js spackled linguist-generated=true -2018/DefinePropertyOrThrow.js spackled linguist-generated=true -2018/DeletePropertyOrThrow.js spackled linguist-generated=true -2018/FromPropertyDescriptor.js spackled linguist-generated=true -2018/Get.js spackled linguist-generated=true -2018/GetIterator.js spackled linguist-generated=true -2018/GetMethod.js spackled linguist-generated=true -2018/GetOwnPropertyKeys.js spackled linguist-generated=true -2018/GetPrototypeFromConstructor.js spackled linguist-generated=true -2018/GetV.js spackled linguist-generated=true -2018/HasOwnProperty.js spackled linguist-generated=true -2018/HasProperty.js spackled linguist-generated=true -2018/HourFromTime.js spackled linguist-generated=true -2018/InLeapYear.js spackled linguist-generated=true -2018/InstanceofOperator.js spackled linguist-generated=true -2018/Invoke.js spackled linguist-generated=true -2018/IsAccessorDescriptor.js spackled linguist-generated=true -2018/IsArray.js spackled linguist-generated=true -2018/IsCallable.js spackled linguist-generated=true -2018/IsConcatSpreadable.js spackled linguist-generated=true -2018/IsConstructor.js spackled linguist-generated=true -2018/IsDataDescriptor.js spackled linguist-generated=true -2018/IsExtensible.js spackled linguist-generated=true -2018/IsGenericDescriptor.js spackled linguist-generated=true -2018/IsInteger.js spackled linguist-generated=true -2018/IsPromise.js spackled linguist-generated=true -2018/IsPropertyKey.js spackled linguist-generated=true -2018/IsRegExp.js spackled linguist-generated=true -2018/IterableToList.js spackled linguist-generated=true -2018/IteratorClose.js spackled linguist-generated=true -2018/IteratorComplete.js spackled linguist-generated=true -2018/IteratorNext.js spackled linguist-generated=true -2018/IteratorStep.js spackled linguist-generated=true -2018/IteratorValue.js spackled linguist-generated=true -2018/MakeDate.js spackled linguist-generated=true -2018/MakeDay.js spackled linguist-generated=true -2018/MakeTime.js spackled linguist-generated=true -2018/MinFromTime.js spackled linguist-generated=true -2018/MonthFromTime.js spackled linguist-generated=true -2018/ObjectCreate.js spackled linguist-generated=true -2018/OrdinaryCreateFromConstructor.js spackled linguist-generated=true -2018/OrdinaryDefineOwnProperty.js spackled linguist-generated=true -2018/OrdinaryGetOwnProperty.js spackled linguist-generated=true -2018/OrdinaryGetPrototypeOf.js spackled linguist-generated=true -2018/OrdinaryHasInstance.js spackled linguist-generated=true -2018/OrdinaryHasProperty.js spackled linguist-generated=true -2018/OrdinarySetPrototypeOf.js spackled linguist-generated=true -2018/RegExpCreate.js spackled linguist-generated=true -2018/RegExpExec.js spackled linguist-generated=true -2018/RequireObjectCoercible.js spackled linguist-generated=true -2018/SameValue.js spackled linguist-generated=true -2018/SameValueNonNumber.js spackled linguist-generated=true -2018/SameValueZero.js spackled linguist-generated=true -2018/SecFromTime.js spackled linguist-generated=true -2018/Set.js spackled linguist-generated=true -2018/SetFunctionName.js spackled linguist-generated=true -2018/SetIntegrityLevel.js spackled linguist-generated=true -2018/SpeciesConstructor.js spackled linguist-generated=true -2018/SplitMatch.js spackled linguist-generated=true -2018/StrictEqualityComparison.js spackled linguist-generated=true -2018/StringCreate.js spackled linguist-generated=true -2018/StringGetOwnProperty.js spackled linguist-generated=true -2018/SymbolDescriptiveString.js spackled linguist-generated=true -2018/TestIntegrityLevel.js spackled linguist-generated=true -2018/TimeClip.js spackled linguist-generated=true -2018/TimeFromYear.js spackled linguist-generated=true -2018/TimeWithinDay.js spackled linguist-generated=true -2018/ToBoolean.js spackled linguist-generated=true -2018/ToDateString.js spackled linguist-generated=true -2018/ToIndex.js spackled linguist-generated=true -2018/ToInt16.js spackled linguist-generated=true -2018/ToInt32.js spackled linguist-generated=true -2018/ToInt8.js spackled linguist-generated=true -2018/ToInteger.js spackled linguist-generated=true -2018/ToLength.js spackled linguist-generated=true -2018/ToNumber.js spackled linguist-generated=true -2018/ToObject.js spackled linguist-generated=true -2018/ToPrimitive.js spackled linguist-generated=true -2018/ToPropertyDescriptor.js spackled linguist-generated=true -2018/ToPropertyKey.js spackled linguist-generated=true -2018/ToString.js spackled linguist-generated=true -2018/ToUint16.js spackled linguist-generated=true -2018/ToUint32.js spackled linguist-generated=true -2018/ToUint8.js spackled linguist-generated=true -2018/ToUint8Clamp.js spackled linguist-generated=true -2018/Type.js spackled linguist-generated=true -2018/UTF16Decode.js spackled linguist-generated=true -2018/UTF16Encoding.js spackled linguist-generated=true -2018/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true -2018/WeekDay.js spackled linguist-generated=true -2018/YearFromTime.js spackled linguist-generated=true -2018/abs.js spackled linguist-generated=true -2018/floor.js spackled linguist-generated=true -2018/modulo.js spackled linguist-generated=true -2018/msFromTime.js spackled linguist-generated=true -2018/thisBooleanValue.js spackled linguist-generated=true -2018/thisNumberValue.js spackled linguist-generated=true -2018/thisStringValue.js spackled linguist-generated=true -2018/thisTimeValue.js spackled linguist-generated=true -2019/AbstractEqualityComparison.js spackled linguist-generated=true -2019/AbstractRelationalComparison.js spackled linguist-generated=true -2019/AdvanceStringIndex.js spackled linguist-generated=true -2019/ArrayCreate.js spackled linguist-generated=true -2019/ArraySetLength.js spackled linguist-generated=true -2019/ArraySpeciesCreate.js spackled linguist-generated=true -2019/Call.js spackled linguist-generated=true -2019/CanonicalNumericIndexString.js spackled linguist-generated=true -2019/CompletePropertyDescriptor.js spackled linguist-generated=true -2019/CopyDataProperties.js spackled linguist-generated=true -2019/CreateDataProperty.js spackled linguist-generated=true -2019/CreateDataPropertyOrThrow.js spackled linguist-generated=true -2019/CreateHTML.js spackled linguist-generated=true -2019/CreateIterResultObject.js spackled linguist-generated=true -2019/CreateListFromArrayLike.js spackled linguist-generated=true -2019/CreateMethodProperty.js spackled linguist-generated=true -2019/DateFromTime.js spackled linguist-generated=true -2019/DateString.js spackled linguist-generated=true -2019/Day.js spackled linguist-generated=true -2019/DayFromYear.js spackled linguist-generated=true -2019/DayWithinYear.js spackled linguist-generated=true -2019/DaysInYear.js spackled linguist-generated=true -2019/DefinePropertyOrThrow.js spackled linguist-generated=true -2019/DeletePropertyOrThrow.js spackled linguist-generated=true -2019/EnumerableOwnPropertyNames.js spackled linguist-generated=true -2019/FromPropertyDescriptor.js spackled linguist-generated=true -2019/Get.js spackled linguist-generated=true -2019/GetIterator.js spackled linguist-generated=true -2019/GetMethod.js spackled linguist-generated=true -2019/GetOwnPropertyKeys.js spackled linguist-generated=true -2019/GetPrototypeFromConstructor.js spackled linguist-generated=true -2019/GetSubstitution.js spackled linguist-generated=true -2019/GetV.js spackled linguist-generated=true -2019/HasOwnProperty.js spackled linguist-generated=true -2019/HasProperty.js spackled linguist-generated=true -2019/HourFromTime.js spackled linguist-generated=true -2019/InLeapYear.js spackled linguist-generated=true -2019/InstanceofOperator.js spackled linguist-generated=true -2019/Invoke.js spackled linguist-generated=true -2019/IsAccessorDescriptor.js spackled linguist-generated=true -2019/IsArray.js spackled linguist-generated=true -2019/IsCallable.js spackled linguist-generated=true -2019/IsConcatSpreadable.js spackled linguist-generated=true -2019/IsConstructor.js spackled linguist-generated=true -2019/IsDataDescriptor.js spackled linguist-generated=true -2019/IsExtensible.js spackled linguist-generated=true -2019/IsGenericDescriptor.js spackled linguist-generated=true -2019/IsInteger.js spackled linguist-generated=true -2019/IsPromise.js spackled linguist-generated=true -2019/IsPropertyKey.js spackled linguist-generated=true -2019/IsRegExp.js spackled linguist-generated=true -2019/IsStringPrefix.js spackled linguist-generated=true -2019/IterableToList.js spackled linguist-generated=true -2019/IteratorClose.js spackled linguist-generated=true -2019/IteratorComplete.js spackled linguist-generated=true -2019/IteratorNext.js spackled linguist-generated=true -2019/IteratorStep.js spackled linguist-generated=true -2019/IteratorValue.js spackled linguist-generated=true -2019/MakeDate.js spackled linguist-generated=true -2019/MakeDay.js spackled linguist-generated=true -2019/MakeTime.js spackled linguist-generated=true -2019/MinFromTime.js spackled linguist-generated=true -2019/MonthFromTime.js spackled linguist-generated=true -2019/NumberToString.js spackled linguist-generated=true -2019/ObjectCreate.js spackled linguist-generated=true -2019/OrdinaryCreateFromConstructor.js spackled linguist-generated=true -2019/OrdinaryDefineOwnProperty.js spackled linguist-generated=true -2019/OrdinaryGetOwnProperty.js spackled linguist-generated=true -2019/OrdinaryGetPrototypeOf.js spackled linguist-generated=true -2019/OrdinaryHasInstance.js spackled linguist-generated=true -2019/OrdinaryHasProperty.js spackled linguist-generated=true -2019/OrdinarySetPrototypeOf.js spackled linguist-generated=true -2019/PromiseResolve.js spackled linguist-generated=true -2019/RegExpCreate.js spackled linguist-generated=true -2019/RegExpExec.js spackled linguist-generated=true -2019/RequireObjectCoercible.js spackled linguist-generated=true -2019/SameValue.js spackled linguist-generated=true -2019/SameValueNonNumber.js spackled linguist-generated=true -2019/SameValueZero.js spackled linguist-generated=true -2019/SecFromTime.js spackled linguist-generated=true -2019/Set.js spackled linguist-generated=true -2019/SetFunctionLength.js spackled linguist-generated=true -2019/SetFunctionName.js spackled linguist-generated=true -2019/SetIntegrityLevel.js spackled linguist-generated=true -2019/SpeciesConstructor.js spackled linguist-generated=true -2019/SplitMatch.js spackled linguist-generated=true -2019/StrictEqualityComparison.js spackled linguist-generated=true -2019/StringCreate.js spackled linguist-generated=true -2019/StringGetOwnProperty.js spackled linguist-generated=true -2019/SymbolDescriptiveString.js spackled linguist-generated=true -2019/TestIntegrityLevel.js spackled linguist-generated=true -2019/TimeClip.js spackled linguist-generated=true -2019/TimeFromYear.js spackled linguist-generated=true -2019/TimeString.js spackled linguist-generated=true -2019/TimeWithinDay.js spackled linguist-generated=true -2019/ToBoolean.js spackled linguist-generated=true -2019/ToDateString.js spackled linguist-generated=true -2019/ToIndex.js spackled linguist-generated=true -2019/ToInt16.js spackled linguist-generated=true -2019/ToInt32.js spackled linguist-generated=true -2019/ToInt8.js spackled linguist-generated=true -2019/ToInteger.js spackled linguist-generated=true -2019/ToLength.js spackled linguist-generated=true -2019/ToNumber.js spackled linguist-generated=true -2019/ToObject.js spackled linguist-generated=true -2019/ToPrimitive.js spackled linguist-generated=true -2019/ToPropertyDescriptor.js spackled linguist-generated=true -2019/ToPropertyKey.js spackled linguist-generated=true -2019/ToString.js spackled linguist-generated=true -2019/ToUint16.js spackled linguist-generated=true -2019/ToUint32.js spackled linguist-generated=true -2019/ToUint8.js spackled linguist-generated=true -2019/ToUint8Clamp.js spackled linguist-generated=true -2019/Type.js spackled linguist-generated=true -2019/UTF16Decode.js spackled linguist-generated=true -2019/UTF16Encoding.js spackled linguist-generated=true -2019/UnicodeEscape.js spackled linguist-generated=true -2019/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true -2019/WeekDay.js spackled linguist-generated=true -2019/YearFromTime.js spackled linguist-generated=true -2019/abs.js spackled linguist-generated=true -2019/floor.js spackled linguist-generated=true -2019/modulo.js spackled linguist-generated=true -2019/msFromTime.js spackled linguist-generated=true -2019/thisBooleanValue.js spackled linguist-generated=true -2019/thisNumberValue.js spackled linguist-generated=true -2019/thisStringValue.js spackled linguist-generated=true -2019/thisSymbolValue.js spackled linguist-generated=true -2020/AbstractEqualityComparison.js spackled linguist-generated=true -2020/AbstractRelationalComparison.js spackled linguist-generated=true -2020/AddEntriesFromIterable.js spackled linguist-generated=true -2020/ArrayCreate.js spackled linguist-generated=true -2020/ArraySetLength.js spackled linguist-generated=true -2020/ArraySpeciesCreate.js spackled linguist-generated=true -2020/Call.js spackled linguist-generated=true -2020/CanonicalNumericIndexString.js spackled linguist-generated=true -2020/CompletePropertyDescriptor.js spackled linguist-generated=true -2020/CreateDataProperty.js spackled linguist-generated=true -2020/CreateDataPropertyOrThrow.js spackled linguist-generated=true -2020/CreateHTML.js spackled linguist-generated=true -2020/CreateIterResultObject.js spackled linguist-generated=true -2020/CreateMethodProperty.js spackled linguist-generated=true -2020/DateFromTime.js spackled linguist-generated=true -2020/DateString.js spackled linguist-generated=true -2020/Day.js spackled linguist-generated=true -2020/DayFromYear.js spackled linguist-generated=true -2020/DayWithinYear.js spackled linguist-generated=true -2020/DaysInYear.js spackled linguist-generated=true -2020/DefinePropertyOrThrow.js spackled linguist-generated=true -2020/DeletePropertyOrThrow.js spackled linguist-generated=true -2020/EnumerableOwnPropertyNames.js spackled linguist-generated=true -2020/FromPropertyDescriptor.js spackled linguist-generated=true -2020/Get.js spackled linguist-generated=true -2020/GetMethod.js spackled linguist-generated=true -2020/GetOwnPropertyKeys.js spackled linguist-generated=true -2020/GetPrototypeFromConstructor.js spackled linguist-generated=true -2020/GetSubstitution.js spackled linguist-generated=true -2020/GetV.js spackled linguist-generated=true -2020/HasOwnProperty.js spackled linguist-generated=true -2020/HasProperty.js spackled linguist-generated=true -2020/HourFromTime.js spackled linguist-generated=true -2020/InLeapYear.js spackled linguist-generated=true -2020/InstanceofOperator.js spackled linguist-generated=true -2020/Invoke.js spackled linguist-generated=true -2020/IsAccessorDescriptor.js spackled linguist-generated=true -2020/IsArray.js spackled linguist-generated=true -2020/IsCallable.js spackled linguist-generated=true -2020/IsConcatSpreadable.js spackled linguist-generated=true -2020/IsConstructor.js spackled linguist-generated=true -2020/IsDataDescriptor.js spackled linguist-generated=true -2020/IsExtensible.js spackled linguist-generated=true -2020/IsGenericDescriptor.js spackled linguist-generated=true -2020/IsInteger.js spackled linguist-generated=true -2020/IsPromise.js spackled linguist-generated=true -2020/IsPropertyKey.js spackled linguist-generated=true -2020/IsRegExp.js spackled linguist-generated=true -2020/IsStringPrefix.js spackled linguist-generated=true -2020/IteratorClose.js spackled linguist-generated=true -2020/IteratorComplete.js spackled linguist-generated=true -2020/IteratorNext.js spackled linguist-generated=true -2020/IteratorStep.js spackled linguist-generated=true -2020/IteratorValue.js spackled linguist-generated=true -2020/MakeDate.js spackled linguist-generated=true -2020/MakeDay.js spackled linguist-generated=true -2020/MakeTime.js spackled linguist-generated=true -2020/MinFromTime.js spackled linguist-generated=true -2020/MonthFromTime.js spackled linguist-generated=true -2020/OrdinaryDefineOwnProperty.js spackled linguist-generated=true -2020/OrdinaryGetOwnProperty.js spackled linguist-generated=true -2020/OrdinaryGetPrototypeOf.js spackled linguist-generated=true -2020/OrdinaryHasInstance.js spackled linguist-generated=true -2020/OrdinaryHasProperty.js spackled linguist-generated=true -2020/OrdinarySetPrototypeOf.js spackled linguist-generated=true -2020/PromiseResolve.js spackled linguist-generated=true -2020/RegExpCreate.js spackled linguist-generated=true -2020/RegExpExec.js spackled linguist-generated=true -2020/RequireObjectCoercible.js spackled linguist-generated=true -2020/SameValue.js spackled linguist-generated=true -2020/SameValueZero.js spackled linguist-generated=true -2020/SecFromTime.js spackled linguist-generated=true -2020/Set.js spackled linguist-generated=true -2020/SetFunctionName.js spackled linguist-generated=true -2020/SetIntegrityLevel.js spackled linguist-generated=true -2020/SpeciesConstructor.js spackled linguist-generated=true -2020/SplitMatch.js spackled linguist-generated=true -2020/StrictEqualityComparison.js spackled linguist-generated=true -2020/StringCreate.js spackled linguist-generated=true -2020/StringGetOwnProperty.js spackled linguist-generated=true -2020/SymbolDescriptiveString.js spackled linguist-generated=true -2020/TestIntegrityLevel.js spackled linguist-generated=true -2020/TimeClip.js spackled linguist-generated=true -2020/TimeFromYear.js spackled linguist-generated=true -2020/TimeString.js spackled linguist-generated=true -2020/TimeWithinDay.js spackled linguist-generated=true -2020/ToBoolean.js spackled linguist-generated=true -2020/ToDateString.js spackled linguist-generated=true -2020/ToInt16.js spackled linguist-generated=true -2020/ToInt32.js spackled linguist-generated=true -2020/ToInt8.js spackled linguist-generated=true -2020/ToLength.js spackled linguist-generated=true -2020/ToObject.js spackled linguist-generated=true -2020/ToPrimitive.js spackled linguist-generated=true -2020/ToPropertyDescriptor.js spackled linguist-generated=true -2020/ToPropertyKey.js spackled linguist-generated=true -2020/ToString.js spackled linguist-generated=true -2020/ToUint16.js spackled linguist-generated=true -2020/ToUint32.js spackled linguist-generated=true -2020/ToUint8.js spackled linguist-generated=true -2020/ToUint8Clamp.js spackled linguist-generated=true -2020/TrimString.js spackled linguist-generated=true -2020/UTF16Encoding.js spackled linguist-generated=true -2020/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true -2020/WeekDay.js spackled linguist-generated=true -2020/YearFromTime.js spackled linguist-generated=true -2020/abs.js spackled linguist-generated=true -2020/floor.js spackled linguist-generated=true -2020/modulo.js spackled linguist-generated=true -2020/msFromTime.js spackled linguist-generated=true -2020/thisBooleanValue.js spackled linguist-generated=true -2020/thisNumberValue.js spackled linguist-generated=true -2020/thisStringValue.js spackled linguist-generated=true -2020/thisSymbolValue.js spackled linguist-generated=true -2020/thisTimeValue.js spackled linguist-generated=true \ No newline at end of file diff --git a/build/node_modules/es-abstract/.nycrc b/build/node_modules/es-abstract/.nycrc deleted file mode 100644 index 526adaa5..00000000 --- a/build/node_modules/es-abstract/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "operations", - "test" - ] -} diff --git a/build/node_modules/es-abstract/2015/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2015/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2015/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2015/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2015/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2015/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2015/AdvanceStringIndex.js b/build/node_modules/es-abstract/2015/AdvanceStringIndex.js deleted file mode 100644 index 279602b4..00000000 --- a/build/node_modules/es-abstract/2015/AdvanceStringIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt'); - -// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - - var first = $charCodeAt(S, index); - if (!isLeadingSurrogate(first)) { - return index + 1; - } - - var second = $charCodeAt(S, index + 1); - if (!isTrailingSurrogate(second)) { - return index + 1; - } - - return index + 2; -}; diff --git a/build/node_modules/es-abstract/2015/ArrayCreate.js b/build/node_modules/es-abstract/2015/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2015/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2015/ArraySetLength.js b/build/node_modules/es-abstract/2015/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2015/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2015/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2015/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2015/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2015/Call.js b/build/node_modules/es-abstract/2015/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2015/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2015/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2015/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2015/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2015/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2015/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2015/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2015/CreateDataProperty.js b/build/node_modules/es-abstract/2015/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2015/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2015/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2015/CreateHTML.js b/build/node_modules/es-abstract/2015/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2015/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2015/CreateIterResultObject.js b/build/node_modules/es-abstract/2015/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2015/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2015/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2015/CreateListFromArrayLike.js deleted file mode 100644 index d1bb8b65..00000000 --- a/build/node_modules/es-abstract/2015/CreateListFromArrayLike.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = ToLength(Get(obj, 'length')); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2015/CreateMethodProperty.js b/build/node_modules/es-abstract/2015/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2015/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2015/DateFromTime.js b/build/node_modules/es-abstract/2015/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2015/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2015/Day.js b/build/node_modules/es-abstract/2015/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2015/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2015/DayFromYear.js b/build/node_modules/es-abstract/2015/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2015/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2015/DayWithinYear.js b/build/node_modules/es-abstract/2015/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2015/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2015/DaysInYear.js b/build/node_modules/es-abstract/2015/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2015/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2015/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2015/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2015/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2015/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2015/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2015/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2015/EnumerableOwnNames.js b/build/node_modules/es-abstract/2015/EnumerableOwnNames.js deleted file mode 100644 index e218edad..00000000 --- a/build/node_modules/es-abstract/2015/EnumerableOwnNames.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var keys = require('object-keys'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-enumerableownnames - -module.exports = function EnumerableOwnNames(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - return keys(O); -}; diff --git a/build/node_modules/es-abstract/2015/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2015/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2015/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2015/Get.js b/build/node_modules/es-abstract/2015/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2015/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2015/GetIterator.js b/build/node_modules/es-abstract/2015/GetIterator.js deleted file mode 100644 index a2d3b16c..00000000 --- a/build/node_modules/es-abstract/2015/GetIterator.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getiterator - -module.exports = function GetIterator(obj, method) { - var actualMethod = method; - if (arguments.length < 2) { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; -}; diff --git a/build/node_modules/es-abstract/2015/GetMethod.js b/build/node_modules/es-abstract/2015/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2015/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2015/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2015/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2015/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2015/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2015/GetSubstitution.js b/build/node_modules/es-abstract/2015/GetSubstitution.js deleted file mode 100644 index 5bdce38b..00000000 --- a/build/node_modules/es-abstract/2015/GetSubstitution.js +++ /dev/null @@ -1,104 +0,0 @@ - -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $parseInt = GetIntrinsic('%parseInt%'); - -var inspect = require('object-inspect'); - -var regexTester = require('../helpers/regexTester'); -var callBound = require('call-bind/callBound'); -var every = require('../helpers/every'); - -var isDigit = regexTester(/^[0-9]$/); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); - -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// https://ecma-international.org/ecma-262/6.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2015/GetV.js b/build/node_modules/es-abstract/2015/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2015/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2015/HasOwnProperty.js b/build/node_modules/es-abstract/2015/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2015/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2015/HasProperty.js b/build/node_modules/es-abstract/2015/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2015/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2015/HourFromTime.js b/build/node_modules/es-abstract/2015/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2015/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2015/InLeapYear.js b/build/node_modules/es-abstract/2015/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2015/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2015/InstanceofOperator.js b/build/node_modules/es-abstract/2015/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2015/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2015/Invoke.js b/build/node_modules/es-abstract/2015/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2015/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2015/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2015/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2015/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2015/IsArray.js b/build/node_modules/es-abstract/2015/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2015/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2015/IsCallable.js b/build/node_modules/es-abstract/2015/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2015/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2015/IsConcatSpreadable.js b/build/node_modules/es-abstract/2015/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2015/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2015/IsConstructor.js b/build/node_modules/es-abstract/2015/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2015/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2015/IsDataDescriptor.js b/build/node_modules/es-abstract/2015/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2015/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2015/IsExtensible.js b/build/node_modules/es-abstract/2015/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2015/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2015/IsGenericDescriptor.js b/build/node_modules/es-abstract/2015/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2015/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2015/IsInteger.js b/build/node_modules/es-abstract/2015/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2015/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2015/IsPromise.js b/build/node_modules/es-abstract/2015/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2015/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2015/IsPropertyDescriptor.js b/build/node_modules/es-abstract/2015/IsPropertyDescriptor.js deleted file mode 100644 index 4cfe79bb..00000000 --- a/build/node_modules/es-abstract/2015/IsPropertyDescriptor.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -// TODO, semver-major: delete this - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var Type = require('./Type'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); - -// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type - -module.exports = function IsPropertyDescriptor(Desc) { - return isPropertyDescriptor({ - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor, - Type: Type - }, Desc); -}; diff --git a/build/node_modules/es-abstract/2015/IsPropertyKey.js b/build/node_modules/es-abstract/2015/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2015/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2015/IsRegExp.js b/build/node_modules/es-abstract/2015/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2015/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2015/IteratorClose.js b/build/node_modules/es-abstract/2015/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2015/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2015/IteratorComplete.js b/build/node_modules/es-abstract/2015/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2015/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2015/IteratorNext.js b/build/node_modules/es-abstract/2015/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2015/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2015/IteratorStep.js b/build/node_modules/es-abstract/2015/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2015/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2015/IteratorValue.js b/build/node_modules/es-abstract/2015/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2015/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2015/MakeDate.js b/build/node_modules/es-abstract/2015/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2015/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2015/MakeDay.js b/build/node_modules/es-abstract/2015/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2015/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2015/MakeTime.js b/build/node_modules/es-abstract/2015/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2015/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2015/MinFromTime.js b/build/node_modules/es-abstract/2015/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2015/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2015/MonthFromTime.js b/build/node_modules/es-abstract/2015/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2015/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2015/ObjectCreate.js b/build/node_modules/es-abstract/2015/ObjectCreate.js deleted file mode 100644 index 2851a646..00000000 --- a/build/node_modules/es-abstract/2015/ObjectCreate.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate - -module.exports = function ObjectCreate(proto, internalSlotsList) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var slots = arguments.length < 2 ? [] : internalSlotsList; - if (slots.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - } - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2015/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2015/OrdinaryCreateFromConstructor.js deleted file mode 100644 index e2a299ea..00000000 --- a/build/node_modules/es-abstract/2015/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var ObjectCreate = require('./ObjectCreate'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return ObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2015/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2015/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2015/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2015/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2015/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2015/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2015/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2015/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2015/QuoteJSONString.js b/build/node_modules/es-abstract/2015/QuoteJSONString.js deleted file mode 100644 index 884afef2..00000000 --- a/build/node_modules/es-abstract/2015/QuoteJSONString.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); -var $strSlice = callBound('String.prototype.slice'); -var $strSplit = callBound('String.prototype.split'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-quotejsonstring - -var escapes = { - '\u0008': 'b', - '\u000C': 'f', - '\u000A': 'n', - '\u000D': 'r', - '\u0009': 't' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach($strSplit(value), function (C) { - if (C === '"' || C === '\\') { - product += '\u005C' + C; - } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { - var abbrev = escapes[C]; - product += '\u005C' + abbrev; - } else { - var cCharCode = $charCodeAt(C, 0); - if (cCharCode < 0x20) { - product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); - } else { - product += C; - } - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2015/RegExpCreate.js b/build/node_modules/es-abstract/2015/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2015/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2015/RegExpExec.js b/build/node_modules/es-abstract/2015/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2015/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2015/RequireObjectCoercible.js b/build/node_modules/es-abstract/2015/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2015/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2015/SameValue.js b/build/node_modules/es-abstract/2015/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2015/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2015/SameValueZero.js b/build/node_modules/es-abstract/2015/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2015/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2015/SecFromTime.js b/build/node_modules/es-abstract/2015/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2015/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2015/Set.js b/build/node_modules/es-abstract/2015/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2015/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2015/SetFunctionName.js b/build/node_modules/es-abstract/2015/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2015/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2015/SetIntegrityLevel.js b/build/node_modules/es-abstract/2015/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2015/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2015/SpeciesConstructor.js b/build/node_modules/es-abstract/2015/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2015/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2015/SplitMatch.js b/build/node_modules/es-abstract/2015/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2015/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2015/StrictEqualityComparison.js b/build/node_modules/es-abstract/2015/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2015/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2015/StringCreate.js b/build/node_modules/es-abstract/2015/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2015/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2015/StringGetIndexProperty.js b/build/node_modules/es-abstract/2015/StringGetIndexProperty.js deleted file mode 100644 index 73043dda..00000000 --- a/build/node_modules/es-abstract/2015/StringGetIndexProperty.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charAt = callBound('String.prototype.charAt'); - -var isString = require('is-string'); -var isNegativeZero = require('is-negative-zero'); -var unbox = require('unbox-primitive'); - -var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://262.ecma-international.org/6.0/#sec-stringgetindexproperty - -module.exports = function StringGetIndexProperty(S, P) { - if (typeof S === 'string' || !isString(S)) { - throw new $TypeError('Assertion failed: `S` must be a boxed String Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - - if (Type(P) !== 'String') { - return void undefined; - } - - var index = CanonicalNumericIndexString(P); - if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index)) { - return void undefined; - } - - var str = unbox(S); - var len = str.length; - if (index < 0 || len <= index) { - return void undefined; - } - - var resultStr = $charAt(str, index); - - return { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': resultStr, - '[[Writable]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2015/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2015/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2015/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2015/TestIntegrityLevel.js b/build/node_modules/es-abstract/2015/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2015/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2015/TimeClip.js b/build/node_modules/es-abstract/2015/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2015/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2015/TimeFromYear.js b/build/node_modules/es-abstract/2015/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2015/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2015/TimeWithinDay.js b/build/node_modules/es-abstract/2015/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2015/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2015/ToBoolean.js b/build/node_modules/es-abstract/2015/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2015/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2015/ToDateString.js b/build/node_modules/es-abstract/2015/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2015/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2015/ToInt16.js b/build/node_modules/es-abstract/2015/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2015/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2015/ToInt32.js b/build/node_modules/es-abstract/2015/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2015/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2015/ToInt8.js b/build/node_modules/es-abstract/2015/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2015/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2015/ToInteger.js b/build/node_modules/es-abstract/2015/ToInteger.js deleted file mode 100644 index 29758180..00000000 --- a/build/node_modules/es-abstract/2015/ToInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - return ES5ToInteger(number); -}; diff --git a/build/node_modules/es-abstract/2015/ToLength.js b/build/node_modules/es-abstract/2015/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2015/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2015/ToNumber.js b/build/node_modules/es-abstract/2015/ToNumber.js deleted file mode 100644 index e776bb2b..00000000 --- a/build/node_modules/es-abstract/2015/ToNumber.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2015/ToObject.js b/build/node_modules/es-abstract/2015/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2015/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2015/ToPrimitive.js b/build/node_modules/es-abstract/2015/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2015/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2015/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2015/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2015/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2015/ToPropertyKey.js b/build/node_modules/es-abstract/2015/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2015/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2015/ToString.js b/build/node_modules/es-abstract/2015/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2015/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2015/ToUint16.js b/build/node_modules/es-abstract/2015/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2015/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2015/ToUint32.js b/build/node_modules/es-abstract/2015/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2015/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2015/ToUint8.js b/build/node_modules/es-abstract/2015/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2015/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2015/ToUint8Clamp.js b/build/node_modules/es-abstract/2015/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2015/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2015/Type.js b/build/node_modules/es-abstract/2015/Type.js deleted file mode 100644 index 0bd11659..00000000 --- a/build/node_modules/es-abstract/2015/Type.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2015/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2015/WeekDay.js b/build/node_modules/es-abstract/2015/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2015/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2015/YearFromTime.js b/build/node_modules/es-abstract/2015/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2015/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2015/abs.js b/build/node_modules/es-abstract/2015/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2015/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2015/floor.js b/build/node_modules/es-abstract/2015/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2015/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2015/modulo.js b/build/node_modules/es-abstract/2015/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2015/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2015/msFromTime.js b/build/node_modules/es-abstract/2015/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2015/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2015/thisBooleanValue.js b/build/node_modules/es-abstract/2015/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2015/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2015/thisNumberValue.js b/build/node_modules/es-abstract/2015/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2015/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2015/thisStringValue.js b/build/node_modules/es-abstract/2015/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2015/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2015/thisTimeValue.js b/build/node_modules/es-abstract/2015/thisTimeValue.js deleted file mode 100644 index 12548fa4..00000000 --- a/build/node_modules/es-abstract/2015/thisTimeValue.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $DateValueOf = require('call-bind/callBound')('Date.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object - -module.exports = function thisTimeValue(value) { - return $DateValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2016/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2016/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2016/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2016/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2016/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2016/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2016/AdvanceStringIndex.js b/build/node_modules/es-abstract/2016/AdvanceStringIndex.js deleted file mode 100644 index 279602b4..00000000 --- a/build/node_modules/es-abstract/2016/AdvanceStringIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt'); - -// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - - var first = $charCodeAt(S, index); - if (!isLeadingSurrogate(first)) { - return index + 1; - } - - var second = $charCodeAt(S, index + 1); - if (!isTrailingSurrogate(second)) { - return index + 1; - } - - return index + 2; -}; diff --git a/build/node_modules/es-abstract/2016/ArrayCreate.js b/build/node_modules/es-abstract/2016/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2016/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2016/ArraySetLength.js b/build/node_modules/es-abstract/2016/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2016/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2016/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2016/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2016/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2016/Call.js b/build/node_modules/es-abstract/2016/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2016/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2016/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2016/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2016/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2016/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2016/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2016/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2016/CreateDataProperty.js b/build/node_modules/es-abstract/2016/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2016/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2016/CreateHTML.js b/build/node_modules/es-abstract/2016/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2016/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2016/CreateIterResultObject.js b/build/node_modules/es-abstract/2016/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2016/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2016/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2016/CreateListFromArrayLike.js deleted file mode 100644 index d1bb8b65..00000000 --- a/build/node_modules/es-abstract/2016/CreateListFromArrayLike.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = ToLength(Get(obj, 'length')); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2016/CreateMethodProperty.js b/build/node_modules/es-abstract/2016/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2016/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2016/DateFromTime.js b/build/node_modules/es-abstract/2016/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2016/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2016/Day.js b/build/node_modules/es-abstract/2016/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2016/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2016/DayFromYear.js b/build/node_modules/es-abstract/2016/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2016/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2016/DayWithinYear.js b/build/node_modules/es-abstract/2016/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2016/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2016/DaysInYear.js b/build/node_modules/es-abstract/2016/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2016/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2016/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2016/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2016/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2016/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2016/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2016/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2016/EnumerableOwnNames.js b/build/node_modules/es-abstract/2016/EnumerableOwnNames.js deleted file mode 100644 index e218edad..00000000 --- a/build/node_modules/es-abstract/2016/EnumerableOwnNames.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var keys = require('object-keys'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-enumerableownnames - -module.exports = function EnumerableOwnNames(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - return keys(O); -}; diff --git a/build/node_modules/es-abstract/2016/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2016/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2016/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2016/Get.js b/build/node_modules/es-abstract/2016/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2016/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2016/GetIterator.js b/build/node_modules/es-abstract/2016/GetIterator.js deleted file mode 100644 index a2d3b16c..00000000 --- a/build/node_modules/es-abstract/2016/GetIterator.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getiterator - -module.exports = function GetIterator(obj, method) { - var actualMethod = method; - if (arguments.length < 2) { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; -}; diff --git a/build/node_modules/es-abstract/2016/GetMethod.js b/build/node_modules/es-abstract/2016/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2016/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2016/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2016/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2016/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2016/GetSubstitution.js b/build/node_modules/es-abstract/2016/GetSubstitution.js deleted file mode 100644 index 5bdce38b..00000000 --- a/build/node_modules/es-abstract/2016/GetSubstitution.js +++ /dev/null @@ -1,104 +0,0 @@ - -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $parseInt = GetIntrinsic('%parseInt%'); - -var inspect = require('object-inspect'); - -var regexTester = require('../helpers/regexTester'); -var callBound = require('call-bind/callBound'); -var every = require('../helpers/every'); - -var isDigit = regexTester(/^[0-9]$/); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); - -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// https://ecma-international.org/ecma-262/6.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2016/GetV.js b/build/node_modules/es-abstract/2016/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2016/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2016/HasOwnProperty.js b/build/node_modules/es-abstract/2016/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2016/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2016/HasProperty.js b/build/node_modules/es-abstract/2016/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2016/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2016/HourFromTime.js b/build/node_modules/es-abstract/2016/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2016/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2016/InLeapYear.js b/build/node_modules/es-abstract/2016/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2016/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2016/InstanceofOperator.js b/build/node_modules/es-abstract/2016/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2016/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2016/Invoke.js b/build/node_modules/es-abstract/2016/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2016/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2016/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2016/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2016/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2016/IsArray.js b/build/node_modules/es-abstract/2016/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2016/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2016/IsCallable.js b/build/node_modules/es-abstract/2016/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2016/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2016/IsConcatSpreadable.js b/build/node_modules/es-abstract/2016/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2016/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2016/IsConstructor.js b/build/node_modules/es-abstract/2016/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2016/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2016/IsDataDescriptor.js b/build/node_modules/es-abstract/2016/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2016/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2016/IsExtensible.js b/build/node_modules/es-abstract/2016/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2016/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2016/IsGenericDescriptor.js b/build/node_modules/es-abstract/2016/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2016/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2016/IsInteger.js b/build/node_modules/es-abstract/2016/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2016/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2016/IsPromise.js b/build/node_modules/es-abstract/2016/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2016/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2016/IsPropertyDescriptor.js b/build/node_modules/es-abstract/2016/IsPropertyDescriptor.js deleted file mode 100644 index 4cfe79bb..00000000 --- a/build/node_modules/es-abstract/2016/IsPropertyDescriptor.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -// TODO, semver-major: delete this - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var Type = require('./Type'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); - -// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type - -module.exports = function IsPropertyDescriptor(Desc) { - return isPropertyDescriptor({ - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor, - Type: Type - }, Desc); -}; diff --git a/build/node_modules/es-abstract/2016/IsPropertyKey.js b/build/node_modules/es-abstract/2016/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2016/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2016/IsRegExp.js b/build/node_modules/es-abstract/2016/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2016/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2016/IterableToArrayLike.js b/build/node_modules/es-abstract/2016/IterableToArrayLike.js deleted file mode 100644 index a16bbba8..00000000 --- a/build/node_modules/es-abstract/2016/IterableToArrayLike.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $arrayPush = callBound('Array.prototype.push'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var GetIterator = require('./GetIterator'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); -var ToObject = require('./ToObject'); -var Type = require('./Type'); -var ES = { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type -}; - -// https://262.ecma-international.org/7.0/#sec-iterabletoarraylike -/** - * 1. Let usingIterator be ? GetMethod(items, @@iterator). - * 2. If usingIterator is not undefined, then - * 1. Let iterator be ? GetIterator(items, usingIterator). - * 2. Let values be a new empty List. - * 3. Let next be true. - * 4. Repeat, while next is not false - * 1. Let next be ? IteratorStep(iterator). - * 2. If next is not false, then - * 1. Let nextValue be ? IteratorValue(next). - * 2. Append nextValue to the end of the List values. - * 5. Return CreateArrayFromList(values). - * 3. NOTE: items is not an Iterable so assume it is already an array-like object. - * 4. Return ! ToObject(items). - */ - -module.exports = function IterableToArrayLike(items) { - var usingIterator = getIteratorMethod(ES, items); - if (typeof usingIterator !== 'undefined') { - var iterator = GetIterator(items, usingIterator); - var values = []; - var next = true; - while (next) { - next = IteratorStep(iterator); - if (next) { - var nextValue = IteratorValue(next); - $arrayPush(values, nextValue); - } - } - return values; - } - - return ToObject(items); -}; diff --git a/build/node_modules/es-abstract/2016/IteratorClose.js b/build/node_modules/es-abstract/2016/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2016/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2016/IteratorComplete.js b/build/node_modules/es-abstract/2016/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2016/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2016/IteratorNext.js b/build/node_modules/es-abstract/2016/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2016/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2016/IteratorStep.js b/build/node_modules/es-abstract/2016/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2016/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2016/IteratorValue.js b/build/node_modules/es-abstract/2016/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2016/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2016/MakeDate.js b/build/node_modules/es-abstract/2016/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2016/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2016/MakeDay.js b/build/node_modules/es-abstract/2016/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2016/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2016/MakeTime.js b/build/node_modules/es-abstract/2016/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2016/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2016/MinFromTime.js b/build/node_modules/es-abstract/2016/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2016/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2016/MonthFromTime.js b/build/node_modules/es-abstract/2016/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2016/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2016/ObjectCreate.js b/build/node_modules/es-abstract/2016/ObjectCreate.js deleted file mode 100644 index 2851a646..00000000 --- a/build/node_modules/es-abstract/2016/ObjectCreate.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate - -module.exports = function ObjectCreate(proto, internalSlotsList) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var slots = arguments.length < 2 ? [] : internalSlotsList; - if (slots.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - } - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js deleted file mode 100644 index e2a299ea..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var ObjectCreate = require('./ObjectCreate'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return ObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js b/build/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js deleted file mode 100644 index ba17b988..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $getProto = require('../helpers/getProto'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof - -module.exports = function OrdinaryGetPrototypeOf(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!$getProto) { - throw new $TypeError('This environment does not support fetching prototypes.'); - } - return $getProto(O); -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2016/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2016/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2016/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2016/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js b/build/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js deleted file mode 100644 index d0ff7a7c..00000000 --- a/build/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $setProto = require('../helpers/setProto'); - -var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof - -module.exports = function OrdinarySetPrototypeOf(O, V) { - if (Type(V) !== 'Object' && Type(V) !== 'Null') { - throw new $TypeError('Assertion failed: V must be Object or Null'); - } - /* - var extensible = IsExtensible(O); - var current = OrdinaryGetPrototypeOf(O); - if (SameValue(V, current)) { - return true; - } - if (!extensible) { - return false; - } - */ - try { - $setProto(O, V); - } catch (e) { - return false; - } - return OrdinaryGetPrototypeOf(O) === V; - /* - var p = V; - var done = false; - while (!done) { - if (p === null) { - done = true; - } else if (SameValue(p, O)) { - return false; - } else { - if (wat) { - done = true; - } else { - p = p.[[Prototype]]; - } - } - } - O.[[Prototype]] = V; - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2016/QuoteJSONString.js b/build/node_modules/es-abstract/2016/QuoteJSONString.js deleted file mode 100644 index 884afef2..00000000 --- a/build/node_modules/es-abstract/2016/QuoteJSONString.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); -var $strSlice = callBound('String.prototype.slice'); -var $strSplit = callBound('String.prototype.split'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-quotejsonstring - -var escapes = { - '\u0008': 'b', - '\u000C': 'f', - '\u000A': 'n', - '\u000D': 'r', - '\u0009': 't' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach($strSplit(value), function (C) { - if (C === '"' || C === '\\') { - product += '\u005C' + C; - } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { - var abbrev = escapes[C]; - product += '\u005C' + abbrev; - } else { - var cCharCode = $charCodeAt(C, 0); - if (cCharCode < 0x20) { - product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); - } else { - product += C; - } - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2016/RegExpCreate.js b/build/node_modules/es-abstract/2016/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2016/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2016/RegExpExec.js b/build/node_modules/es-abstract/2016/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2016/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2016/RequireObjectCoercible.js b/build/node_modules/es-abstract/2016/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2016/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2016/SameValue.js b/build/node_modules/es-abstract/2016/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2016/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2016/SameValueNonNumber.js b/build/node_modules/es-abstract/2016/SameValueNonNumber.js deleted file mode 100644 index b6d2c4e6..00000000 --- a/build/node_modules/es-abstract/2016/SameValueNonNumber.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); - -// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber - -module.exports = function SameValueNonNumber(x, y) { - if (typeof x === 'number' || typeof x !== typeof y) { - throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); - } - return SameValue(x, y); -}; diff --git a/build/node_modules/es-abstract/2016/SameValueZero.js b/build/node_modules/es-abstract/2016/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2016/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2016/SecFromTime.js b/build/node_modules/es-abstract/2016/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2016/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2016/Set.js b/build/node_modules/es-abstract/2016/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2016/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2016/SetFunctionName.js b/build/node_modules/es-abstract/2016/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2016/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2016/SetIntegrityLevel.js b/build/node_modules/es-abstract/2016/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2016/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2016/SpeciesConstructor.js b/build/node_modules/es-abstract/2016/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2016/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2016/SplitMatch.js b/build/node_modules/es-abstract/2016/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2016/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2016/StrictEqualityComparison.js b/build/node_modules/es-abstract/2016/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2016/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2016/StringCreate.js b/build/node_modules/es-abstract/2016/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2016/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2016/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2016/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2016/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2016/TestIntegrityLevel.js b/build/node_modules/es-abstract/2016/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2016/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2016/TimeClip.js b/build/node_modules/es-abstract/2016/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2016/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2016/TimeFromYear.js b/build/node_modules/es-abstract/2016/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2016/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2016/TimeWithinDay.js b/build/node_modules/es-abstract/2016/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2016/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2016/ToBoolean.js b/build/node_modules/es-abstract/2016/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2016/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2016/ToDateString.js b/build/node_modules/es-abstract/2016/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2016/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2016/ToInt16.js b/build/node_modules/es-abstract/2016/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2016/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2016/ToInt32.js b/build/node_modules/es-abstract/2016/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2016/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2016/ToInt8.js b/build/node_modules/es-abstract/2016/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2016/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2016/ToInteger.js b/build/node_modules/es-abstract/2016/ToInteger.js deleted file mode 100644 index 29758180..00000000 --- a/build/node_modules/es-abstract/2016/ToInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - return ES5ToInteger(number); -}; diff --git a/build/node_modules/es-abstract/2016/ToLength.js b/build/node_modules/es-abstract/2016/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2016/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2016/ToNumber.js b/build/node_modules/es-abstract/2016/ToNumber.js deleted file mode 100644 index e776bb2b..00000000 --- a/build/node_modules/es-abstract/2016/ToNumber.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2016/ToObject.js b/build/node_modules/es-abstract/2016/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2016/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2016/ToPrimitive.js b/build/node_modules/es-abstract/2016/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2016/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2016/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2016/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2016/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2016/ToPropertyKey.js b/build/node_modules/es-abstract/2016/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2016/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2016/ToString.js b/build/node_modules/es-abstract/2016/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2016/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2016/ToUint16.js b/build/node_modules/es-abstract/2016/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2016/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2016/ToUint32.js b/build/node_modules/es-abstract/2016/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2016/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2016/ToUint8.js b/build/node_modules/es-abstract/2016/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2016/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2016/ToUint8Clamp.js b/build/node_modules/es-abstract/2016/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2016/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2016/Type.js b/build/node_modules/es-abstract/2016/Type.js deleted file mode 100644 index 0bd11659..00000000 --- a/build/node_modules/es-abstract/2016/Type.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2016/UTF16Decode.js b/build/node_modules/es-abstract/2016/UTF16Decode.js deleted file mode 100644 index 86927b47..00000000 --- a/build/node_modules/es-abstract/2016/UTF16Decode.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -// https://262.ecma-international.org/7.0/#sec-utf16decode - -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair - -module.exports = function UTF16Decode(lead, trail) { - if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { - throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); - } - // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return $fromCharCode(lead) + $fromCharCode(trail); -}; diff --git a/build/node_modules/es-abstract/2016/UTF16Encoding.js b/build/node_modules/es-abstract/2016/UTF16Encoding.js deleted file mode 100644 index f381595f..00000000 --- a/build/node_modules/es-abstract/2016/UTF16Encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var isCodePoint = require('../helpers/isCodePoint'); - -// https://262.ecma-international.org/7.0/#sec-utf16encoding - -module.exports = function UTF16Encoding(cp) { - if (!isCodePoint(cp)) { - throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); - } - if (cp <= 65535) { - return $fromCharCode(cp); - } - var cu1 = floor((cp - 65536) / 1024) + 0xD800; - var cu2 = modulo(cp - 65536, 1024) + 0xDC00; - return $fromCharCode(cu1) + $fromCharCode(cu2); -}; diff --git a/build/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2016/WeekDay.js b/build/node_modules/es-abstract/2016/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2016/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2016/YearFromTime.js b/build/node_modules/es-abstract/2016/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2016/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2016/abs.js b/build/node_modules/es-abstract/2016/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2016/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2016/floor.js b/build/node_modules/es-abstract/2016/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2016/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2016/modulo.js b/build/node_modules/es-abstract/2016/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2016/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2016/msFromTime.js b/build/node_modules/es-abstract/2016/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2016/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2016/thisBooleanValue.js b/build/node_modules/es-abstract/2016/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2016/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2016/thisNumberValue.js b/build/node_modules/es-abstract/2016/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2016/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2016/thisStringValue.js b/build/node_modules/es-abstract/2016/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2016/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2016/thisTimeValue.js b/build/node_modules/es-abstract/2016/thisTimeValue.js deleted file mode 100644 index 12548fa4..00000000 --- a/build/node_modules/es-abstract/2016/thisTimeValue.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $DateValueOf = require('call-bind/callBound')('Date.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object - -module.exports = function thisTimeValue(value) { - return $DateValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2017/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2017/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2017/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2017/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2017/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2017/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2017/AdvanceStringIndex.js b/build/node_modules/es-abstract/2017/AdvanceStringIndex.js deleted file mode 100644 index 279602b4..00000000 --- a/build/node_modules/es-abstract/2017/AdvanceStringIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt'); - -// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - - var first = $charCodeAt(S, index); - if (!isLeadingSurrogate(first)) { - return index + 1; - } - - var second = $charCodeAt(S, index + 1); - if (!isTrailingSurrogate(second)) { - return index + 1; - } - - return index + 2; -}; diff --git a/build/node_modules/es-abstract/2017/ArrayCreate.js b/build/node_modules/es-abstract/2017/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2017/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2017/ArraySetLength.js b/build/node_modules/es-abstract/2017/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2017/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2017/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2017/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2017/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2017/Call.js b/build/node_modules/es-abstract/2017/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2017/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2017/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2017/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2017/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2017/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2017/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2017/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2017/CreateDataProperty.js b/build/node_modules/es-abstract/2017/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2017/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2017/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2017/CreateHTML.js b/build/node_modules/es-abstract/2017/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2017/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2017/CreateIterResultObject.js b/build/node_modules/es-abstract/2017/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2017/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2017/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2017/CreateListFromArrayLike.js deleted file mode 100644 index d1bb8b65..00000000 --- a/build/node_modules/es-abstract/2017/CreateListFromArrayLike.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = ToLength(Get(obj, 'length')); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2017/CreateMethodProperty.js b/build/node_modules/es-abstract/2017/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2017/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2017/DateFromTime.js b/build/node_modules/es-abstract/2017/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2017/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2017/Day.js b/build/node_modules/es-abstract/2017/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2017/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2017/DayFromYear.js b/build/node_modules/es-abstract/2017/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2017/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2017/DayWithinYear.js b/build/node_modules/es-abstract/2017/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2017/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2017/DaysInYear.js b/build/node_modules/es-abstract/2017/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2017/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2017/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2017/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2017/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2017/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2017/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2017/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2017/EnumerableOwnProperties.js b/build/node_modules/es-abstract/2017/EnumerableOwnProperties.js deleted file mode 100644 index 44171b9e..00000000 --- a/build/node_modules/es-abstract/2017/EnumerableOwnProperties.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var objectKeys = require('object-keys'); - -var callBound = require('call-bind/callBound'); - -var callBind = require('call-bind'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%')); - -var forEach = require('../helpers/forEach'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/8.0/#sec-enumerableownproperties - -module.exports = function EnumerableOwnProperties(O, kind) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - var keys = objectKeys(O); - if (kind === 'key') { - return keys; - } - if (kind === 'value' || kind === 'key+value') { - var results = []; - forEach(keys, function (key) { - if ($isEnumerable(O, key)) { - $pushApply(results, [ - kind === 'value' ? O[key] : [key, O[key]] - ]); - } - }); - return results; - } - throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); -}; diff --git a/build/node_modules/es-abstract/2017/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2017/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2017/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2017/Get.js b/build/node_modules/es-abstract/2017/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2017/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2017/GetIterator.js b/build/node_modules/es-abstract/2017/GetIterator.js deleted file mode 100644 index a2d3b16c..00000000 --- a/build/node_modules/es-abstract/2017/GetIterator.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getiterator - -module.exports = function GetIterator(obj, method) { - var actualMethod = method; - if (arguments.length < 2) { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; -}; diff --git a/build/node_modules/es-abstract/2017/GetMethod.js b/build/node_modules/es-abstract/2017/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2017/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2017/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2017/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2017/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2017/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2017/GetSubstitution.js b/build/node_modules/es-abstract/2017/GetSubstitution.js deleted file mode 100644 index 5bdce38b..00000000 --- a/build/node_modules/es-abstract/2017/GetSubstitution.js +++ /dev/null @@ -1,104 +0,0 @@ - -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $parseInt = GetIntrinsic('%parseInt%'); - -var inspect = require('object-inspect'); - -var regexTester = require('../helpers/regexTester'); -var callBound = require('call-bind/callBound'); -var every = require('../helpers/every'); - -var isDigit = regexTester(/^[0-9]$/); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); - -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// https://ecma-international.org/ecma-262/6.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2017/GetV.js b/build/node_modules/es-abstract/2017/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2017/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2017/HasOwnProperty.js b/build/node_modules/es-abstract/2017/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2017/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2017/HasProperty.js b/build/node_modules/es-abstract/2017/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2017/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2017/HourFromTime.js b/build/node_modules/es-abstract/2017/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2017/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2017/InLeapYear.js b/build/node_modules/es-abstract/2017/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2017/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2017/InstanceofOperator.js b/build/node_modules/es-abstract/2017/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2017/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2017/Invoke.js b/build/node_modules/es-abstract/2017/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2017/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2017/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2017/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2017/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2017/IsArray.js b/build/node_modules/es-abstract/2017/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2017/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2017/IsCallable.js b/build/node_modules/es-abstract/2017/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2017/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2017/IsConcatSpreadable.js b/build/node_modules/es-abstract/2017/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2017/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2017/IsConstructor.js b/build/node_modules/es-abstract/2017/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2017/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2017/IsDataDescriptor.js b/build/node_modules/es-abstract/2017/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2017/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2017/IsExtensible.js b/build/node_modules/es-abstract/2017/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2017/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2017/IsGenericDescriptor.js b/build/node_modules/es-abstract/2017/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2017/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2017/IsInteger.js b/build/node_modules/es-abstract/2017/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2017/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2017/IsPromise.js b/build/node_modules/es-abstract/2017/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2017/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2017/IsPropertyDescriptor.js b/build/node_modules/es-abstract/2017/IsPropertyDescriptor.js deleted file mode 100644 index 4cfe79bb..00000000 --- a/build/node_modules/es-abstract/2017/IsPropertyDescriptor.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -// TODO, semver-major: delete this - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var Type = require('./Type'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); - -// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type - -module.exports = function IsPropertyDescriptor(Desc) { - return isPropertyDescriptor({ - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor, - Type: Type - }, Desc); -}; diff --git a/build/node_modules/es-abstract/2017/IsPropertyKey.js b/build/node_modules/es-abstract/2017/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2017/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2017/IsRegExp.js b/build/node_modules/es-abstract/2017/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2017/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2017/IterableToList.js b/build/node_modules/es-abstract/2017/IterableToList.js deleted file mode 100644 index 6a1a6be3..00000000 --- a/build/node_modules/es-abstract/2017/IterableToList.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $arrayPush = callBound('Array.prototype.push'); - -var GetIterator = require('./GetIterator'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); - -// https://262.ecma-international.org/8.0/#sec-iterabletolist - -module.exports = function IterableToList(items, method) { - var iterator = GetIterator(items, method); - var values = []; - var next = true; - while (next) { - next = IteratorStep(iterator); - if (next) { - var nextValue = IteratorValue(next); - $arrayPush(values, nextValue); - } - } - return values; -}; diff --git a/build/node_modules/es-abstract/2017/IteratorClose.js b/build/node_modules/es-abstract/2017/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2017/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2017/IteratorComplete.js b/build/node_modules/es-abstract/2017/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2017/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2017/IteratorNext.js b/build/node_modules/es-abstract/2017/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2017/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2017/IteratorStep.js b/build/node_modules/es-abstract/2017/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2017/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2017/IteratorValue.js b/build/node_modules/es-abstract/2017/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2017/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2017/MakeDate.js b/build/node_modules/es-abstract/2017/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2017/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2017/MakeDay.js b/build/node_modules/es-abstract/2017/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2017/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2017/MakeTime.js b/build/node_modules/es-abstract/2017/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2017/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2017/MinFromTime.js b/build/node_modules/es-abstract/2017/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2017/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2017/MonthFromTime.js b/build/node_modules/es-abstract/2017/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2017/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2017/ObjectCreate.js b/build/node_modules/es-abstract/2017/ObjectCreate.js deleted file mode 100644 index 2851a646..00000000 --- a/build/node_modules/es-abstract/2017/ObjectCreate.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate - -module.exports = function ObjectCreate(proto, internalSlotsList) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var slots = arguments.length < 2 ? [] : internalSlotsList; - if (slots.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - } - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2017/OrdinaryCreateFromConstructor.js deleted file mode 100644 index e2a299ea..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var ObjectCreate = require('./ObjectCreate'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return ObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js b/build/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js deleted file mode 100644 index ba17b988..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryGetPrototypeOf.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $getProto = require('../helpers/getProto'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof - -module.exports = function OrdinaryGetPrototypeOf(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!$getProto) { - throw new $TypeError('This environment does not support fetching prototypes.'); - } - return $getProto(O); -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2017/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2017/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2017/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2017/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js b/build/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js deleted file mode 100644 index d0ff7a7c..00000000 --- a/build/node_modules/es-abstract/2017/OrdinarySetPrototypeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $setProto = require('../helpers/setProto'); - -var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof - -module.exports = function OrdinarySetPrototypeOf(O, V) { - if (Type(V) !== 'Object' && Type(V) !== 'Null') { - throw new $TypeError('Assertion failed: V must be Object or Null'); - } - /* - var extensible = IsExtensible(O); - var current = OrdinaryGetPrototypeOf(O); - if (SameValue(V, current)) { - return true; - } - if (!extensible) { - return false; - } - */ - try { - $setProto(O, V); - } catch (e) { - return false; - } - return OrdinaryGetPrototypeOf(O) === V; - /* - var p = V; - var done = false; - while (!done) { - if (p === null) { - done = true; - } else if (SameValue(p, O)) { - return false; - } else { - if (wat) { - done = true; - } else { - p = p.[[Prototype]]; - } - } - } - O.[[Prototype]] = V; - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2017/QuoteJSONString.js b/build/node_modules/es-abstract/2017/QuoteJSONString.js deleted file mode 100644 index 884afef2..00000000 --- a/build/node_modules/es-abstract/2017/QuoteJSONString.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); -var $strSlice = callBound('String.prototype.slice'); -var $strSplit = callBound('String.prototype.split'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-quotejsonstring - -var escapes = { - '\u0008': 'b', - '\u000C': 'f', - '\u000A': 'n', - '\u000D': 'r', - '\u0009': 't' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach($strSplit(value), function (C) { - if (C === '"' || C === '\\') { - product += '\u005C' + C; - } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { - var abbrev = escapes[C]; - product += '\u005C' + abbrev; - } else { - var cCharCode = $charCodeAt(C, 0); - if (cCharCode < 0x20) { - product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); - } else { - product += C; - } - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2017/RegExpCreate.js b/build/node_modules/es-abstract/2017/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2017/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2017/RegExpExec.js b/build/node_modules/es-abstract/2017/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2017/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2017/RequireObjectCoercible.js b/build/node_modules/es-abstract/2017/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2017/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2017/SameValue.js b/build/node_modules/es-abstract/2017/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2017/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2017/SameValueNonNumber.js b/build/node_modules/es-abstract/2017/SameValueNonNumber.js deleted file mode 100644 index b6d2c4e6..00000000 --- a/build/node_modules/es-abstract/2017/SameValueNonNumber.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); - -// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber - -module.exports = function SameValueNonNumber(x, y) { - if (typeof x === 'number' || typeof x !== typeof y) { - throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); - } - return SameValue(x, y); -}; diff --git a/build/node_modules/es-abstract/2017/SameValueZero.js b/build/node_modules/es-abstract/2017/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2017/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2017/SecFromTime.js b/build/node_modules/es-abstract/2017/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2017/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2017/Set.js b/build/node_modules/es-abstract/2017/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2017/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2017/SetFunctionName.js b/build/node_modules/es-abstract/2017/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2017/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2017/SetIntegrityLevel.js b/build/node_modules/es-abstract/2017/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2017/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2017/SpeciesConstructor.js b/build/node_modules/es-abstract/2017/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2017/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2017/SplitMatch.js b/build/node_modules/es-abstract/2017/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2017/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2017/StrictEqualityComparison.js b/build/node_modules/es-abstract/2017/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2017/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2017/StringCreate.js b/build/node_modules/es-abstract/2017/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2017/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2017/StringGetOwnProperty.js b/build/node_modules/es-abstract/2017/StringGetOwnProperty.js deleted file mode 100644 index b6f904ec..00000000 --- a/build/node_modules/es-abstract/2017/StringGetOwnProperty.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var $charAt = callBound('String.prototype.charAt'); -var $stringToString = callBound('String.prototype.toString'); - -var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -var isNegativeZero = require('is-negative-zero'); - -// https://262.ecma-international.org/8.0/#sec-stringgetownproperty - -module.exports = function StringGetOwnProperty(S, P) { - var str; - if (Type(S) === 'Object') { - try { - str = $stringToString(S); - } catch (e) { /**/ } - } - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a boxed string object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - if (Type(P) !== 'String') { - return void undefined; - } - var index = CanonicalNumericIndexString(P); - var len = str.length; - if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { - return void undefined; - } - var resultStr = $charAt(S, index); - return { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': resultStr, - '[[Writable]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2017/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2017/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2017/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2017/TestIntegrityLevel.js b/build/node_modules/es-abstract/2017/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2017/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2017/TimeClip.js b/build/node_modules/es-abstract/2017/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2017/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2017/TimeFromYear.js b/build/node_modules/es-abstract/2017/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2017/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2017/TimeWithinDay.js b/build/node_modules/es-abstract/2017/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2017/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2017/ToBoolean.js b/build/node_modules/es-abstract/2017/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2017/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2017/ToDateString.js b/build/node_modules/es-abstract/2017/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2017/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2017/ToIndex.js b/build/node_modules/es-abstract/2017/ToIndex.js deleted file mode 100644 index 7c9d746d..00000000 --- a/build/node_modules/es-abstract/2017/ToIndex.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); - -var ToInteger = require('./ToInteger'); -var ToLength = require('./ToLength'); -var SameValueZero = require('./SameValueZero'); - -// https://262.ecma-international.org/8.0/#sec-toindex - -module.exports = function ToIndex(value) { - if (typeof value === 'undefined') { - return 0; - } - var integerIndex = ToInteger(value); - if (integerIndex < 0) { - throw new $RangeError('index must be >= 0'); - } - var index = ToLength(integerIndex); - if (!SameValueZero(integerIndex, index)) { - throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); - } - return index; -}; diff --git a/build/node_modules/es-abstract/2017/ToInt16.js b/build/node_modules/es-abstract/2017/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2017/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2017/ToInt32.js b/build/node_modules/es-abstract/2017/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2017/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2017/ToInt8.js b/build/node_modules/es-abstract/2017/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2017/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2017/ToInteger.js b/build/node_modules/es-abstract/2017/ToInteger.js deleted file mode 100644 index 29758180..00000000 --- a/build/node_modules/es-abstract/2017/ToInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - return ES5ToInteger(number); -}; diff --git a/build/node_modules/es-abstract/2017/ToLength.js b/build/node_modules/es-abstract/2017/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2017/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2017/ToNumber.js b/build/node_modules/es-abstract/2017/ToNumber.js deleted file mode 100644 index e776bb2b..00000000 --- a/build/node_modules/es-abstract/2017/ToNumber.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2017/ToObject.js b/build/node_modules/es-abstract/2017/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2017/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2017/ToPrimitive.js b/build/node_modules/es-abstract/2017/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2017/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2017/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2017/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2017/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2017/ToPropertyKey.js b/build/node_modules/es-abstract/2017/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2017/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2017/ToString.js b/build/node_modules/es-abstract/2017/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2017/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2017/ToUint16.js b/build/node_modules/es-abstract/2017/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2017/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2017/ToUint32.js b/build/node_modules/es-abstract/2017/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2017/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2017/ToUint8.js b/build/node_modules/es-abstract/2017/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2017/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2017/ToUint8Clamp.js b/build/node_modules/es-abstract/2017/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2017/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2017/Type.js b/build/node_modules/es-abstract/2017/Type.js deleted file mode 100644 index 0bd11659..00000000 --- a/build/node_modules/es-abstract/2017/Type.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2017/UTF16Decode.js b/build/node_modules/es-abstract/2017/UTF16Decode.js deleted file mode 100644 index 86927b47..00000000 --- a/build/node_modules/es-abstract/2017/UTF16Decode.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -// https://262.ecma-international.org/7.0/#sec-utf16decode - -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair - -module.exports = function UTF16Decode(lead, trail) { - if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { - throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); - } - // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return $fromCharCode(lead) + $fromCharCode(trail); -}; diff --git a/build/node_modules/es-abstract/2017/UTF16Encoding.js b/build/node_modules/es-abstract/2017/UTF16Encoding.js deleted file mode 100644 index f381595f..00000000 --- a/build/node_modules/es-abstract/2017/UTF16Encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var isCodePoint = require('../helpers/isCodePoint'); - -// https://262.ecma-international.org/7.0/#sec-utf16encoding - -module.exports = function UTF16Encoding(cp) { - if (!isCodePoint(cp)) { - throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); - } - if (cp <= 65535) { - return $fromCharCode(cp); - } - var cu1 = floor((cp - 65536) / 1024) + 0xD800; - var cu2 = modulo(cp - 65536, 1024) + 0xDC00; - return $fromCharCode(cu1) + $fromCharCode(cu2); -}; diff --git a/build/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2017/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2017/WeekDay.js b/build/node_modules/es-abstract/2017/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2017/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2017/YearFromTime.js b/build/node_modules/es-abstract/2017/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2017/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2017/abs.js b/build/node_modules/es-abstract/2017/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2017/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2017/floor.js b/build/node_modules/es-abstract/2017/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2017/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2017/modulo.js b/build/node_modules/es-abstract/2017/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2017/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2017/msFromTime.js b/build/node_modules/es-abstract/2017/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2017/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2017/thisBooleanValue.js b/build/node_modules/es-abstract/2017/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2017/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2017/thisNumberValue.js b/build/node_modules/es-abstract/2017/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2017/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2017/thisStringValue.js b/build/node_modules/es-abstract/2017/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2017/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2017/thisTimeValue.js b/build/node_modules/es-abstract/2017/thisTimeValue.js deleted file mode 100644 index 12548fa4..00000000 --- a/build/node_modules/es-abstract/2017/thisTimeValue.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $DateValueOf = require('call-bind/callBound')('Date.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object - -module.exports = function thisTimeValue(value) { - return $DateValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2018/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2018/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2018/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2018/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2018/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2018/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2018/AdvanceStringIndex.js b/build/node_modules/es-abstract/2018/AdvanceStringIndex.js deleted file mode 100644 index 279602b4..00000000 --- a/build/node_modules/es-abstract/2018/AdvanceStringIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt'); - -// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - - var first = $charCodeAt(S, index); - if (!isLeadingSurrogate(first)) { - return index + 1; - } - - var second = $charCodeAt(S, index + 1); - if (!isTrailingSurrogate(second)) { - return index + 1; - } - - return index + 2; -}; diff --git a/build/node_modules/es-abstract/2018/ArrayCreate.js b/build/node_modules/es-abstract/2018/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2018/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2018/ArraySetLength.js b/build/node_modules/es-abstract/2018/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2018/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2018/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2018/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2018/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2018/Call.js b/build/node_modules/es-abstract/2018/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2018/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2018/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2018/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2018/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2018/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2018/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2018/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2018/CopyDataProperties.js b/build/node_modules/es-abstract/2018/CopyDataProperties.js deleted file mode 100644 index b8f2802b..00000000 --- a/build/node_modules/es-abstract/2018/CopyDataProperties.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); -var OwnPropertyKeys = require('../helpers/OwnPropertyKeys'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var CreateDataProperty = require('./CreateDataProperty'); -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToObject = require('./ToObject'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-copydataproperties - -module.exports = function CopyDataProperties(target, source, excludedItems) { - if (Type(target) !== 'Object') { - throw new $TypeError('Assertion failed: "target" must be an Object'); - } - - if (!IsArray(excludedItems)) { - throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); - } - for (var i = 0; i < excludedItems.length; i += 1) { - if (!IsPropertyKey(excludedItems[i])) { - throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); - } - } - - if (typeof source === 'undefined' || source === null) { - return target; - } - - var fromObj = ToObject(source); - - var sourceKeys = OwnPropertyKeys(fromObj); - forEach(sourceKeys, function (nextKey) { - var excluded = false; - - forEach(excludedItems, function (e) { - if (SameValue(e, nextKey) === true) { - excluded = true; - } - }); - - var enumerable = $isEnumerable(fromObj, nextKey) || ( - // this is to handle string keys being non-enumerable in older engines - typeof source === 'string' - && nextKey >= 0 - && IsInteger(ToNumber(nextKey)) - ); - if (excluded === false && enumerable) { - var propValue = Get(fromObj, nextKey); - CreateDataProperty(target, nextKey, propValue); - } - }); - - return target; -}; diff --git a/build/node_modules/es-abstract/2018/CreateDataProperty.js b/build/node_modules/es-abstract/2018/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2018/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2018/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2018/CreateHTML.js b/build/node_modules/es-abstract/2018/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2018/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2018/CreateIterResultObject.js b/build/node_modules/es-abstract/2018/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2018/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2018/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2018/CreateListFromArrayLike.js deleted file mode 100644 index d1bb8b65..00000000 --- a/build/node_modules/es-abstract/2018/CreateListFromArrayLike.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = ToLength(Get(obj, 'length')); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2018/CreateMethodProperty.js b/build/node_modules/es-abstract/2018/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2018/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2018/DateFromTime.js b/build/node_modules/es-abstract/2018/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2018/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2018/DateString.js b/build/node_modules/es-abstract/2018/DateString.js deleted file mode 100644 index 939c14c0..00000000 --- a/build/node_modules/es-abstract/2018/DateString.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var Type = require('./Type'); -var WeekDay = require('./WeekDay'); -var MonthFromTime = require('./MonthFromTime'); -var YearFromTime = require('./YearFromTime'); -var DateFromTime = require('./DateFromTime'); - -// https://262.ecma-international.org/9.0/#sec-datestring - -module.exports = function DateString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var weekday = weekdays[WeekDay(tv)]; - var month = months[MonthFromTime(tv)]; - var day = padTimeComponent(DateFromTime(tv)); - var year = padTimeComponent(YearFromTime(tv), 4); - return weekday + '\x20' + month + '\x20' + day + '\x20' + year; -}; diff --git a/build/node_modules/es-abstract/2018/Day.js b/build/node_modules/es-abstract/2018/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2018/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2018/DayFromYear.js b/build/node_modules/es-abstract/2018/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2018/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2018/DayWithinYear.js b/build/node_modules/es-abstract/2018/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2018/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2018/DaysInYear.js b/build/node_modules/es-abstract/2018/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2018/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2018/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2018/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2018/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2018/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2018/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2018/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js b/build/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js deleted file mode 100644 index 44171b9e..00000000 --- a/build/node_modules/es-abstract/2018/EnumerableOwnPropertyNames.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var objectKeys = require('object-keys'); - -var callBound = require('call-bind/callBound'); - -var callBind = require('call-bind'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%')); - -var forEach = require('../helpers/forEach'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/8.0/#sec-enumerableownproperties - -module.exports = function EnumerableOwnProperties(O, kind) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - var keys = objectKeys(O); - if (kind === 'key') { - return keys; - } - if (kind === 'value' || kind === 'key+value') { - var results = []; - forEach(keys, function (key) { - if ($isEnumerable(O, key)) { - $pushApply(results, [ - kind === 'value' ? O[key] : [key, O[key]] - ]); - } - }); - return results; - } - throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); -}; diff --git a/build/node_modules/es-abstract/2018/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2018/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2018/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2018/Get.js b/build/node_modules/es-abstract/2018/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2018/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2018/GetIterator.js b/build/node_modules/es-abstract/2018/GetIterator.js deleted file mode 100644 index a2d3b16c..00000000 --- a/build/node_modules/es-abstract/2018/GetIterator.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getiterator - -module.exports = function GetIterator(obj, method) { - var actualMethod = method; - if (arguments.length < 2) { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; -}; diff --git a/build/node_modules/es-abstract/2018/GetMethod.js b/build/node_modules/es-abstract/2018/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2018/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2018/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2018/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2018/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2018/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2018/GetSubstitution.js b/build/node_modules/es-abstract/2018/GetSubstitution.js deleted file mode 100644 index a5a7a1be..00000000 --- a/build/node_modules/es-abstract/2018/GetSubstitution.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var every = require('../helpers/every'); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); -var $indexOf = callBound('String.prototype.indexOf'); -var $parseInt = parseInt; - -var isDigit = regexTester(/^[0-9]$/); - -var inspect = require('object-inspect'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var ToObject = require('./ToObject'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// http://262.ecma-international.org/9.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - if (Type(namedCaptures) !== 'Undefined') { - namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign - } - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else if (next === '<') { - // eslint-disable-next-line max-depth - if (Type(namedCaptures) === 'Undefined') { - result += '$<'; - i += 2; - } else { - var endIndex = $indexOf(replacement, '>', i); - // eslint-disable-next-line max-depth - if (endIndex > -1) { - var groupName = $strSlice(replacement, i + '$<'.length, endIndex); - var capture = Get(namedCaptures, groupName); - // eslint-disable-next-line max-depth - if (Type(capture) !== 'Undefined') { - result += ToString(capture); - } - i += ('<' + groupName + '>').length; - } - } - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2018/GetV.js b/build/node_modules/es-abstract/2018/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2018/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2018/HasOwnProperty.js b/build/node_modules/es-abstract/2018/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2018/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2018/HasProperty.js b/build/node_modules/es-abstract/2018/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2018/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2018/HourFromTime.js b/build/node_modules/es-abstract/2018/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2018/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2018/InLeapYear.js b/build/node_modules/es-abstract/2018/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2018/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2018/InstanceofOperator.js b/build/node_modules/es-abstract/2018/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2018/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2018/Invoke.js b/build/node_modules/es-abstract/2018/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2018/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2018/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2018/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2018/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2018/IsArray.js b/build/node_modules/es-abstract/2018/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2018/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2018/IsCallable.js b/build/node_modules/es-abstract/2018/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2018/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2018/IsConcatSpreadable.js b/build/node_modules/es-abstract/2018/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2018/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2018/IsConstructor.js b/build/node_modules/es-abstract/2018/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2018/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2018/IsDataDescriptor.js b/build/node_modules/es-abstract/2018/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2018/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2018/IsExtensible.js b/build/node_modules/es-abstract/2018/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2018/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2018/IsGenericDescriptor.js b/build/node_modules/es-abstract/2018/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2018/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2018/IsInteger.js b/build/node_modules/es-abstract/2018/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2018/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2018/IsPromise.js b/build/node_modules/es-abstract/2018/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2018/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2018/IsPropertyKey.js b/build/node_modules/es-abstract/2018/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2018/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2018/IsRegExp.js b/build/node_modules/es-abstract/2018/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2018/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2018/IsStringPrefix.js b/build/node_modules/es-abstract/2018/IsStringPrefix.js deleted file mode 100644 index 4958544c..00000000 --- a/build/node_modules/es-abstract/2018/IsStringPrefix.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPrefixOf = require('../helpers/isPrefixOf'); - -// var callBound = require('call-bind/callBound'); - -// var $charAt = callBound('String.prototype.charAt'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-isstringprefix - -module.exports = function IsStringPrefix(p, q) { - if (Type(p) !== 'String') { - throw new $TypeError('Assertion failed: "p" must be a String'); - } - - if (Type(q) !== 'String') { - throw new $TypeError('Assertion failed: "q" must be a String'); - } - - return isPrefixOf(p, q); - /* - if (p === q || p === '') { - return true; - } - - var pLength = p.length; - var qLength = q.length; - if (pLength >= qLength) { - return false; - } - - // assert: pLength < qLength - - for (var i = 0; i < pLength; i += 1) { - if ($charAt(p, i) !== $charAt(q, i)) { - return false; - } - } - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2018/IterableToList.js b/build/node_modules/es-abstract/2018/IterableToList.js deleted file mode 100644 index 6a1a6be3..00000000 --- a/build/node_modules/es-abstract/2018/IterableToList.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $arrayPush = callBound('Array.prototype.push'); - -var GetIterator = require('./GetIterator'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); - -// https://262.ecma-international.org/8.0/#sec-iterabletolist - -module.exports = function IterableToList(items, method) { - var iterator = GetIterator(items, method); - var values = []; - var next = true; - while (next) { - next = IteratorStep(iterator); - if (next) { - var nextValue = IteratorValue(next); - $arrayPush(values, nextValue); - } - } - return values; -}; diff --git a/build/node_modules/es-abstract/2018/IteratorClose.js b/build/node_modules/es-abstract/2018/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2018/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2018/IteratorComplete.js b/build/node_modules/es-abstract/2018/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2018/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2018/IteratorNext.js b/build/node_modules/es-abstract/2018/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2018/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2018/IteratorStep.js b/build/node_modules/es-abstract/2018/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2018/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2018/IteratorValue.js b/build/node_modules/es-abstract/2018/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2018/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2018/MakeDate.js b/build/node_modules/es-abstract/2018/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2018/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2018/MakeDay.js b/build/node_modules/es-abstract/2018/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2018/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2018/MakeTime.js b/build/node_modules/es-abstract/2018/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2018/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2018/MinFromTime.js b/build/node_modules/es-abstract/2018/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2018/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2018/MonthFromTime.js b/build/node_modules/es-abstract/2018/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2018/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2018/NumberToString.js b/build/node_modules/es-abstract/2018/NumberToString.js deleted file mode 100644 index b00c4bd5..00000000 --- a/build/node_modules/es-abstract/2018/NumberToString.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type - -module.exports = function NumberToString(m) { - if (Type(m) !== 'Number') { - throw new $TypeError('Assertion failed: "m" must be a String'); - } - - return $String(m); -}; - diff --git a/build/node_modules/es-abstract/2018/ObjectCreate.js b/build/node_modules/es-abstract/2018/ObjectCreate.js deleted file mode 100644 index 2851a646..00000000 --- a/build/node_modules/es-abstract/2018/ObjectCreate.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate - -module.exports = function ObjectCreate(proto, internalSlotsList) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var slots = arguments.length < 2 ? [] : internalSlotsList; - if (slots.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - } - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2018/OrdinaryCreateFromConstructor.js deleted file mode 100644 index e2a299ea..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var ObjectCreate = require('./ObjectCreate'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return ObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js b/build/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js deleted file mode 100644 index ba17b988..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryGetPrototypeOf.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $getProto = require('../helpers/getProto'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof - -module.exports = function OrdinaryGetPrototypeOf(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!$getProto) { - throw new $TypeError('This environment does not support fetching prototypes.'); - } - return $getProto(O); -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2018/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2018/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2018/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2018/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js b/build/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js deleted file mode 100644 index d0ff7a7c..00000000 --- a/build/node_modules/es-abstract/2018/OrdinarySetPrototypeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $setProto = require('../helpers/setProto'); - -var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof - -module.exports = function OrdinarySetPrototypeOf(O, V) { - if (Type(V) !== 'Object' && Type(V) !== 'Null') { - throw new $TypeError('Assertion failed: V must be Object or Null'); - } - /* - var extensible = IsExtensible(O); - var current = OrdinaryGetPrototypeOf(O); - if (SameValue(V, current)) { - return true; - } - if (!extensible) { - return false; - } - */ - try { - $setProto(O, V); - } catch (e) { - return false; - } - return OrdinaryGetPrototypeOf(O) === V; - /* - var p = V; - var done = false; - while (!done) { - if (p === null) { - done = true; - } else if (SameValue(p, O)) { - return false; - } else { - if (wat) { - done = true; - } else { - p = p.[[Prototype]]; - } - } - } - O.[[Prototype]] = V; - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2018/PromiseResolve.js b/build/node_modules/es-abstract/2018/PromiseResolve.js deleted file mode 100644 index 6474b79c..00000000 --- a/build/node_modules/es-abstract/2018/PromiseResolve.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBind = require('call-bind'); - -var $resolve = GetIntrinsic('%Promise.resolve%', true); -var $PromiseResolve = $resolve && callBind($resolve); - -// https://262.ecma-international.org/9.0/#sec-promise-resolve - -module.exports = function PromiseResolve(C, x) { - if (!$PromiseResolve) { - throw new SyntaxError('This environment does not support Promises.'); - } - return $PromiseResolve(C, x); -}; - diff --git a/build/node_modules/es-abstract/2018/QuoteJSONString.js b/build/node_modules/es-abstract/2018/QuoteJSONString.js deleted file mode 100644 index 99eea611..00000000 --- a/build/node_modules/es-abstract/2018/QuoteJSONString.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $strSplit = callBound('String.prototype.split'); - -var Type = require('./Type'); -var UnicodeEscape = require('./UnicodeEscape'); - -var has = require('has'); - -// https://262.ecma-international.org/9.0/#sec-quotejsonstring - -var escapes = { - '\u0008': '\\b', - '\u0009': '\\t', - '\u000A': '\\n', - '\u000C': '\\f', - '\u000D': '\\r', - '\u0022': '\\"', - '\u005c': '\\\\' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach($strSplit(value), function (C) { - if (has(escapes, C)) { - product += escapes[C]; - } else if ($charCodeAt(C, 0) < 0x20) { - product += UnicodeEscape(C); - } else { - product += C; - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2018/RegExpCreate.js b/build/node_modules/es-abstract/2018/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2018/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2018/RegExpExec.js b/build/node_modules/es-abstract/2018/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2018/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2018/RequireObjectCoercible.js b/build/node_modules/es-abstract/2018/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2018/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2018/SameValue.js b/build/node_modules/es-abstract/2018/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2018/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2018/SameValueNonNumber.js b/build/node_modules/es-abstract/2018/SameValueNonNumber.js deleted file mode 100644 index b6d2c4e6..00000000 --- a/build/node_modules/es-abstract/2018/SameValueNonNumber.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); - -// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber - -module.exports = function SameValueNonNumber(x, y) { - if (typeof x === 'number' || typeof x !== typeof y) { - throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); - } - return SameValue(x, y); -}; diff --git a/build/node_modules/es-abstract/2018/SameValueZero.js b/build/node_modules/es-abstract/2018/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2018/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2018/SecFromTime.js b/build/node_modules/es-abstract/2018/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2018/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2018/Set.js b/build/node_modules/es-abstract/2018/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2018/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2018/SetFunctionLength.js b/build/node_modules/es-abstract/2018/SetFunctionLength.js deleted file mode 100644 index c1160c8c..00000000 --- a/build/node_modules/es-abstract/2018/SetFunctionLength.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var HasOwnProperty = require('./HasOwnProperty'); -var IsExtensible = require('./IsExtensible'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-setfunctionlength - -module.exports = function SetFunctionLength(F, length) { - if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { - throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); - } - if (Type(length) !== 'Number') { - throw new $TypeError('Assertion failed: `length` must be a Number'); - } - if (length < 0 || !IsInteger(length)) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); - } - return DefinePropertyOrThrow(F, 'length', { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); -}; diff --git a/build/node_modules/es-abstract/2018/SetFunctionName.js b/build/node_modules/es-abstract/2018/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2018/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2018/SetIntegrityLevel.js b/build/node_modules/es-abstract/2018/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2018/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2018/SpeciesConstructor.js b/build/node_modules/es-abstract/2018/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2018/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2018/SplitMatch.js b/build/node_modules/es-abstract/2018/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2018/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2018/StrictEqualityComparison.js b/build/node_modules/es-abstract/2018/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2018/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2018/StringCreate.js b/build/node_modules/es-abstract/2018/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2018/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2018/StringGetOwnProperty.js b/build/node_modules/es-abstract/2018/StringGetOwnProperty.js deleted file mode 100644 index b6f904ec..00000000 --- a/build/node_modules/es-abstract/2018/StringGetOwnProperty.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var $charAt = callBound('String.prototype.charAt'); -var $stringToString = callBound('String.prototype.toString'); - -var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -var isNegativeZero = require('is-negative-zero'); - -// https://262.ecma-international.org/8.0/#sec-stringgetownproperty - -module.exports = function StringGetOwnProperty(S, P) { - var str; - if (Type(S) === 'Object') { - try { - str = $stringToString(S); - } catch (e) { /**/ } - } - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a boxed string object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - if (Type(P) !== 'String') { - return void undefined; - } - var index = CanonicalNumericIndexString(P); - var len = str.length; - if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { - return void undefined; - } - var resultStr = $charAt(S, index); - return { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': resultStr, - '[[Writable]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2018/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2018/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2018/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2018/TestIntegrityLevel.js b/build/node_modules/es-abstract/2018/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2018/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2018/TimeClip.js b/build/node_modules/es-abstract/2018/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2018/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2018/TimeFromYear.js b/build/node_modules/es-abstract/2018/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2018/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2018/TimeString.js b/build/node_modules/es-abstract/2018/TimeString.js deleted file mode 100644 index 051c4728..00000000 --- a/build/node_modules/es-abstract/2018/TimeString.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var HourFromTime = require('./HourFromTime'); -var MinFromTime = require('./MinFromTime'); -var SecFromTime = require('./SecFromTime'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-timestring - -module.exports = function TimeString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var hour = HourFromTime(tv); - var minute = MinFromTime(tv); - var second = SecFromTime(tv); - return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; -}; diff --git a/build/node_modules/es-abstract/2018/TimeWithinDay.js b/build/node_modules/es-abstract/2018/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2018/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2018/ToBoolean.js b/build/node_modules/es-abstract/2018/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2018/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2018/ToDateString.js b/build/node_modules/es-abstract/2018/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2018/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2018/ToIndex.js b/build/node_modules/es-abstract/2018/ToIndex.js deleted file mode 100644 index 7c9d746d..00000000 --- a/build/node_modules/es-abstract/2018/ToIndex.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); - -var ToInteger = require('./ToInteger'); -var ToLength = require('./ToLength'); -var SameValueZero = require('./SameValueZero'); - -// https://262.ecma-international.org/8.0/#sec-toindex - -module.exports = function ToIndex(value) { - if (typeof value === 'undefined') { - return 0; - } - var integerIndex = ToInteger(value); - if (integerIndex < 0) { - throw new $RangeError('index must be >= 0'); - } - var index = ToLength(integerIndex); - if (!SameValueZero(integerIndex, index)) { - throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); - } - return index; -}; diff --git a/build/node_modules/es-abstract/2018/ToInt16.js b/build/node_modules/es-abstract/2018/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2018/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2018/ToInt32.js b/build/node_modules/es-abstract/2018/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2018/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2018/ToInt8.js b/build/node_modules/es-abstract/2018/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2018/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2018/ToInteger.js b/build/node_modules/es-abstract/2018/ToInteger.js deleted file mode 100644 index 29758180..00000000 --- a/build/node_modules/es-abstract/2018/ToInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - return ES5ToInteger(number); -}; diff --git a/build/node_modules/es-abstract/2018/ToLength.js b/build/node_modules/es-abstract/2018/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2018/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2018/ToNumber.js b/build/node_modules/es-abstract/2018/ToNumber.js deleted file mode 100644 index e776bb2b..00000000 --- a/build/node_modules/es-abstract/2018/ToNumber.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2018/ToObject.js b/build/node_modules/es-abstract/2018/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2018/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2018/ToPrimitive.js b/build/node_modules/es-abstract/2018/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2018/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2018/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2018/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2018/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2018/ToPropertyKey.js b/build/node_modules/es-abstract/2018/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2018/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2018/ToString.js b/build/node_modules/es-abstract/2018/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2018/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2018/ToUint16.js b/build/node_modules/es-abstract/2018/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2018/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2018/ToUint32.js b/build/node_modules/es-abstract/2018/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2018/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2018/ToUint8.js b/build/node_modules/es-abstract/2018/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2018/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2018/ToUint8Clamp.js b/build/node_modules/es-abstract/2018/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2018/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2018/Type.js b/build/node_modules/es-abstract/2018/Type.js deleted file mode 100644 index 0bd11659..00000000 --- a/build/node_modules/es-abstract/2018/Type.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2018/UTF16Decode.js b/build/node_modules/es-abstract/2018/UTF16Decode.js deleted file mode 100644 index 86927b47..00000000 --- a/build/node_modules/es-abstract/2018/UTF16Decode.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -// https://262.ecma-international.org/7.0/#sec-utf16decode - -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair - -module.exports = function UTF16Decode(lead, trail) { - if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { - throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); - } - // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return $fromCharCode(lead) + $fromCharCode(trail); -}; diff --git a/build/node_modules/es-abstract/2018/UTF16Encoding.js b/build/node_modules/es-abstract/2018/UTF16Encoding.js deleted file mode 100644 index f381595f..00000000 --- a/build/node_modules/es-abstract/2018/UTF16Encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var isCodePoint = require('../helpers/isCodePoint'); - -// https://262.ecma-international.org/7.0/#sec-utf16encoding - -module.exports = function UTF16Encoding(cp) { - if (!isCodePoint(cp)) { - throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); - } - if (cp <= 65535) { - return $fromCharCode(cp); - } - var cu1 = floor((cp - 65536) / 1024) + 0xD800; - var cu2 = modulo(cp - 65536, 1024) + 0xDC00; - return $fromCharCode(cu1) + $fromCharCode(cu2); -}; diff --git a/build/node_modules/es-abstract/2018/UnicodeEscape.js b/build/node_modules/es-abstract/2018/UnicodeEscape.js deleted file mode 100644 index db7163f7..00000000 --- a/build/node_modules/es-abstract/2018/UnicodeEscape.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); -var $strSlice = callBound('String.prototype.slice'); - -// https://262.ecma-international.org/9.0/#sec-unicodeescape - -module.exports = function UnicodeEscape(C) { - if (typeof C !== 'string' || C.length !== 1) { - throw new $TypeError('Assertion failed: `C` must be a single code unit'); - } - var n = $charCodeAt(C, 0); - if (n > 0xFFFF) { - throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); - } - - return '\\u' + $strSlice('0000' + $toLowerCase($numberToString(n, 16)), -4); -}; diff --git a/build/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2018/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2018/WeekDay.js b/build/node_modules/es-abstract/2018/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2018/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2018/YearFromTime.js b/build/node_modules/es-abstract/2018/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2018/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2018/abs.js b/build/node_modules/es-abstract/2018/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2018/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2018/floor.js b/build/node_modules/es-abstract/2018/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2018/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2018/modulo.js b/build/node_modules/es-abstract/2018/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2018/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2018/msFromTime.js b/build/node_modules/es-abstract/2018/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2018/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2018/thisBooleanValue.js b/build/node_modules/es-abstract/2018/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2018/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2018/thisNumberValue.js b/build/node_modules/es-abstract/2018/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2018/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2018/thisStringValue.js b/build/node_modules/es-abstract/2018/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2018/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2018/thisSymbolValue.js b/build/node_modules/es-abstract/2018/thisSymbolValue.js deleted file mode 100644 index 91a55254..00000000 --- a/build/node_modules/es-abstract/2018/thisSymbolValue.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-thissymbolvalue - -module.exports = function thisSymbolValue(value) { - if (!$SymbolValueOf) { - throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); - } - if (Type(value) === 'Symbol') { - return value; - } - return $SymbolValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2018/thisTimeValue.js b/build/node_modules/es-abstract/2018/thisTimeValue.js deleted file mode 100644 index 12548fa4..00000000 --- a/build/node_modules/es-abstract/2018/thisTimeValue.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $DateValueOf = require('call-bind/callBound')('Date.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object - -module.exports = function thisTimeValue(value) { - return $DateValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2019/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2019/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2019/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2019/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2019/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2019/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2019/AddEntriesFromIterable.js b/build/node_modules/es-abstract/2019/AddEntriesFromIterable.js deleted file mode 100644 index a0a5e71b..00000000 --- a/build/node_modules/es-abstract/2019/AddEntriesFromIterable.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var inspect = require('object-inspect'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var Get = require('./Get'); -var GetIterator = require('./GetIterator'); -var IsCallable = require('./IsCallable'); -var IteratorClose = require('./IteratorClose'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); -var Type = require('./Type'); - -// https://262.ecma-international.org/10.0//#sec-add-entries-from-iterable - -module.exports = function AddEntriesFromIterable(target, iterable, adder) { - if (!IsCallable(adder)) { - throw new $TypeError('Assertion failed: `adder` is not callable'); - } - if (iterable == null) { - throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); - } - var iteratorRecord = GetIterator(iterable); - while (true) { // eslint-disable-line no-constant-condition - var next = IteratorStep(iteratorRecord); - if (!next) { - return target; - } - var nextItem = IteratorValue(next); - if (Type(nextItem) !== 'Object') { - var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem)); - return IteratorClose( - iteratorRecord, - function () { throw error; } // eslint-disable-line no-loop-func - ); - } - try { - var k = Get(nextItem, '0'); - var v = Get(nextItem, '1'); - Call(adder, target, [k, v]); - } catch (e) { - return IteratorClose( - iteratorRecord, - function () { throw e; } - ); - } - } -}; diff --git a/build/node_modules/es-abstract/2019/AdvanceStringIndex.js b/build/node_modules/es-abstract/2019/AdvanceStringIndex.js deleted file mode 100644 index 279602b4..00000000 --- a/build/node_modules/es-abstract/2019/AdvanceStringIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt'); - -// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - - var first = $charCodeAt(S, index); - if (!isLeadingSurrogate(first)) { - return index + 1; - } - - var second = $charCodeAt(S, index + 1); - if (!isTrailingSurrogate(second)) { - return index + 1; - } - - return index + 2; -}; diff --git a/build/node_modules/es-abstract/2019/ArrayCreate.js b/build/node_modules/es-abstract/2019/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2019/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2019/ArraySetLength.js b/build/node_modules/es-abstract/2019/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2019/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2019/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2019/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2019/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2019/Call.js b/build/node_modules/es-abstract/2019/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2019/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2019/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2019/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2019/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2019/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2019/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2019/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2019/CopyDataProperties.js b/build/node_modules/es-abstract/2019/CopyDataProperties.js deleted file mode 100644 index b8f2802b..00000000 --- a/build/node_modules/es-abstract/2019/CopyDataProperties.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); -var OwnPropertyKeys = require('../helpers/OwnPropertyKeys'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var CreateDataProperty = require('./CreateDataProperty'); -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToObject = require('./ToObject'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-copydataproperties - -module.exports = function CopyDataProperties(target, source, excludedItems) { - if (Type(target) !== 'Object') { - throw new $TypeError('Assertion failed: "target" must be an Object'); - } - - if (!IsArray(excludedItems)) { - throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); - } - for (var i = 0; i < excludedItems.length; i += 1) { - if (!IsPropertyKey(excludedItems[i])) { - throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); - } - } - - if (typeof source === 'undefined' || source === null) { - return target; - } - - var fromObj = ToObject(source); - - var sourceKeys = OwnPropertyKeys(fromObj); - forEach(sourceKeys, function (nextKey) { - var excluded = false; - - forEach(excludedItems, function (e) { - if (SameValue(e, nextKey) === true) { - excluded = true; - } - }); - - var enumerable = $isEnumerable(fromObj, nextKey) || ( - // this is to handle string keys being non-enumerable in older engines - typeof source === 'string' - && nextKey >= 0 - && IsInteger(ToNumber(nextKey)) - ); - if (excluded === false && enumerable) { - var propValue = Get(fromObj, nextKey); - CreateDataProperty(target, nextKey, propValue); - } - }); - - return target; -}; diff --git a/build/node_modules/es-abstract/2019/CreateDataProperty.js b/build/node_modules/es-abstract/2019/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2019/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2019/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2019/CreateHTML.js b/build/node_modules/es-abstract/2019/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2019/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2019/CreateIterResultObject.js b/build/node_modules/es-abstract/2019/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2019/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2019/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2019/CreateListFromArrayLike.js deleted file mode 100644 index d1bb8b65..00000000 --- a/build/node_modules/es-abstract/2019/CreateListFromArrayLike.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = ToLength(Get(obj, 'length')); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2019/CreateMethodProperty.js b/build/node_modules/es-abstract/2019/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2019/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2019/DateFromTime.js b/build/node_modules/es-abstract/2019/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2019/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2019/DateString.js b/build/node_modules/es-abstract/2019/DateString.js deleted file mode 100644 index 939c14c0..00000000 --- a/build/node_modules/es-abstract/2019/DateString.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var Type = require('./Type'); -var WeekDay = require('./WeekDay'); -var MonthFromTime = require('./MonthFromTime'); -var YearFromTime = require('./YearFromTime'); -var DateFromTime = require('./DateFromTime'); - -// https://262.ecma-international.org/9.0/#sec-datestring - -module.exports = function DateString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var weekday = weekdays[WeekDay(tv)]; - var month = months[MonthFromTime(tv)]; - var day = padTimeComponent(DateFromTime(tv)); - var year = padTimeComponent(YearFromTime(tv), 4); - return weekday + '\x20' + month + '\x20' + day + '\x20' + year; -}; diff --git a/build/node_modules/es-abstract/2019/Day.js b/build/node_modules/es-abstract/2019/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2019/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2019/DayFromYear.js b/build/node_modules/es-abstract/2019/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2019/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2019/DayWithinYear.js b/build/node_modules/es-abstract/2019/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2019/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2019/DaysInYear.js b/build/node_modules/es-abstract/2019/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2019/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2019/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2019/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2019/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2019/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2019/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2019/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js b/build/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js deleted file mode 100644 index 44171b9e..00000000 --- a/build/node_modules/es-abstract/2019/EnumerableOwnPropertyNames.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var objectKeys = require('object-keys'); - -var callBound = require('call-bind/callBound'); - -var callBind = require('call-bind'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%')); - -var forEach = require('../helpers/forEach'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/8.0/#sec-enumerableownproperties - -module.exports = function EnumerableOwnProperties(O, kind) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - var keys = objectKeys(O); - if (kind === 'key') { - return keys; - } - if (kind === 'value' || kind === 'key+value') { - var results = []; - forEach(keys, function (key) { - if ($isEnumerable(O, key)) { - $pushApply(results, [ - kind === 'value' ? O[key] : [key, O[key]] - ]); - } - }); - return results; - } - throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); -}; diff --git a/build/node_modules/es-abstract/2019/FlattenIntoArray.js b/build/node_modules/es-abstract/2019/FlattenIntoArray.js deleted file mode 100644 index ffe5fcd5..00000000 --- a/build/node_modules/es-abstract/2019/FlattenIntoArray.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var Call = require('./Call'); -var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); -var Get = require('./Get'); -var HasProperty = require('./HasProperty'); -var IsArray = require('./IsArray'); -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/10.0/#sec-flattenintoarray - -// eslint-disable-next-line max-params -module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { - var mapperFunction; - if (arguments.length > 5) { - mapperFunction = arguments[5]; - } - - var targetIndex = start; - var sourceIndex = 0; - while (sourceIndex < sourceLen) { - var P = ToString(sourceIndex); - var exists = HasProperty(source, P); - if (exists === true) { - var element = Get(source, P); - if (typeof mapperFunction !== 'undefined') { - if (arguments.length <= 6) { - throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); - } - element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); - } - var shouldFlatten = false; - if (depth > 0) { - shouldFlatten = IsArray(element); - } - if (shouldFlatten) { - var elementLen = ToLength(Get(element, 'length')); - targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); - } else { - if (targetIndex >= MAX_SAFE_INTEGER) { - throw new $TypeError('index too large'); - } - CreateDataPropertyOrThrow(target, ToString(targetIndex), element); - targetIndex += 1; - } - } - sourceIndex += 1; - } - - return targetIndex; -}; diff --git a/build/node_modules/es-abstract/2019/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2019/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2019/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2019/Get.js b/build/node_modules/es-abstract/2019/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2019/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2019/GetIterator.js b/build/node_modules/es-abstract/2019/GetIterator.js deleted file mode 100644 index a2d3b16c..00000000 --- a/build/node_modules/es-abstract/2019/GetIterator.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getiterator - -module.exports = function GetIterator(obj, method) { - var actualMethod = method; - if (arguments.length < 2) { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; -}; diff --git a/build/node_modules/es-abstract/2019/GetMethod.js b/build/node_modules/es-abstract/2019/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2019/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2019/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2019/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2019/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2019/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2019/GetSubstitution.js b/build/node_modules/es-abstract/2019/GetSubstitution.js deleted file mode 100644 index a5a7a1be..00000000 --- a/build/node_modules/es-abstract/2019/GetSubstitution.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var every = require('../helpers/every'); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); -var $indexOf = callBound('String.prototype.indexOf'); -var $parseInt = parseInt; - -var isDigit = regexTester(/^[0-9]$/); - -var inspect = require('object-inspect'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var ToObject = require('./ToObject'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// http://262.ecma-international.org/9.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - if (Type(namedCaptures) !== 'Undefined') { - namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign - } - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else if (next === '<') { - // eslint-disable-next-line max-depth - if (Type(namedCaptures) === 'Undefined') { - result += '$<'; - i += 2; - } else { - var endIndex = $indexOf(replacement, '>', i); - // eslint-disable-next-line max-depth - if (endIndex > -1) { - var groupName = $strSlice(replacement, i + '$<'.length, endIndex); - var capture = Get(namedCaptures, groupName); - // eslint-disable-next-line max-depth - if (Type(capture) !== 'Undefined') { - result += ToString(capture); - } - i += ('<' + groupName + '>').length; - } - } - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2019/GetV.js b/build/node_modules/es-abstract/2019/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2019/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2019/HasOwnProperty.js b/build/node_modules/es-abstract/2019/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2019/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2019/HasProperty.js b/build/node_modules/es-abstract/2019/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2019/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2019/HourFromTime.js b/build/node_modules/es-abstract/2019/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2019/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2019/InLeapYear.js b/build/node_modules/es-abstract/2019/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2019/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2019/InstanceofOperator.js b/build/node_modules/es-abstract/2019/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2019/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2019/Invoke.js b/build/node_modules/es-abstract/2019/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2019/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2019/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2019/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2019/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2019/IsArray.js b/build/node_modules/es-abstract/2019/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2019/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2019/IsCallable.js b/build/node_modules/es-abstract/2019/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2019/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2019/IsConcatSpreadable.js b/build/node_modules/es-abstract/2019/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2019/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2019/IsConstructor.js b/build/node_modules/es-abstract/2019/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2019/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2019/IsDataDescriptor.js b/build/node_modules/es-abstract/2019/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2019/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2019/IsExtensible.js b/build/node_modules/es-abstract/2019/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2019/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2019/IsGenericDescriptor.js b/build/node_modules/es-abstract/2019/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2019/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2019/IsInteger.js b/build/node_modules/es-abstract/2019/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2019/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2019/IsPromise.js b/build/node_modules/es-abstract/2019/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2019/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2019/IsPropertyKey.js b/build/node_modules/es-abstract/2019/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2019/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2019/IsRegExp.js b/build/node_modules/es-abstract/2019/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2019/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2019/IsStringPrefix.js b/build/node_modules/es-abstract/2019/IsStringPrefix.js deleted file mode 100644 index 4958544c..00000000 --- a/build/node_modules/es-abstract/2019/IsStringPrefix.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPrefixOf = require('../helpers/isPrefixOf'); - -// var callBound = require('call-bind/callBound'); - -// var $charAt = callBound('String.prototype.charAt'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-isstringprefix - -module.exports = function IsStringPrefix(p, q) { - if (Type(p) !== 'String') { - throw new $TypeError('Assertion failed: "p" must be a String'); - } - - if (Type(q) !== 'String') { - throw new $TypeError('Assertion failed: "q" must be a String'); - } - - return isPrefixOf(p, q); - /* - if (p === q || p === '') { - return true; - } - - var pLength = p.length; - var qLength = q.length; - if (pLength >= qLength) { - return false; - } - - // assert: pLength < qLength - - for (var i = 0; i < pLength; i += 1) { - if ($charAt(p, i) !== $charAt(q, i)) { - return false; - } - } - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2019/IterableToList.js b/build/node_modules/es-abstract/2019/IterableToList.js deleted file mode 100644 index 6a1a6be3..00000000 --- a/build/node_modules/es-abstract/2019/IterableToList.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $arrayPush = callBound('Array.prototype.push'); - -var GetIterator = require('./GetIterator'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); - -// https://262.ecma-international.org/8.0/#sec-iterabletolist - -module.exports = function IterableToList(items, method) { - var iterator = GetIterator(items, method); - var values = []; - var next = true; - while (next) { - next = IteratorStep(iterator); - if (next) { - var nextValue = IteratorValue(next); - $arrayPush(values, nextValue); - } - } - return values; -}; diff --git a/build/node_modules/es-abstract/2019/IteratorClose.js b/build/node_modules/es-abstract/2019/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2019/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2019/IteratorComplete.js b/build/node_modules/es-abstract/2019/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2019/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2019/IteratorNext.js b/build/node_modules/es-abstract/2019/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2019/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2019/IteratorStep.js b/build/node_modules/es-abstract/2019/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2019/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2019/IteratorValue.js b/build/node_modules/es-abstract/2019/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2019/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2019/MakeDate.js b/build/node_modules/es-abstract/2019/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2019/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2019/MakeDay.js b/build/node_modules/es-abstract/2019/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2019/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2019/MakeTime.js b/build/node_modules/es-abstract/2019/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2019/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2019/MinFromTime.js b/build/node_modules/es-abstract/2019/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2019/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2019/MonthFromTime.js b/build/node_modules/es-abstract/2019/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2019/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2019/NumberToString.js b/build/node_modules/es-abstract/2019/NumberToString.js deleted file mode 100644 index b00c4bd5..00000000 --- a/build/node_modules/es-abstract/2019/NumberToString.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type - -module.exports = function NumberToString(m) { - if (Type(m) !== 'Number') { - throw new $TypeError('Assertion failed: "m" must be a String'); - } - - return $String(m); -}; - diff --git a/build/node_modules/es-abstract/2019/ObjectCreate.js b/build/node_modules/es-abstract/2019/ObjectCreate.js deleted file mode 100644 index 2851a646..00000000 --- a/build/node_modules/es-abstract/2019/ObjectCreate.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate - -module.exports = function ObjectCreate(proto, internalSlotsList) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var slots = arguments.length < 2 ? [] : internalSlotsList; - if (slots.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - } - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2019/OrdinaryCreateFromConstructor.js deleted file mode 100644 index e2a299ea..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var ObjectCreate = require('./ObjectCreate'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return ObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js b/build/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js deleted file mode 100644 index ba17b988..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryGetPrototypeOf.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $getProto = require('../helpers/getProto'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof - -module.exports = function OrdinaryGetPrototypeOf(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!$getProto) { - throw new $TypeError('This environment does not support fetching prototypes.'); - } - return $getProto(O); -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2019/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2019/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2019/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2019/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js b/build/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js deleted file mode 100644 index d0ff7a7c..00000000 --- a/build/node_modules/es-abstract/2019/OrdinarySetPrototypeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $setProto = require('../helpers/setProto'); - -var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof - -module.exports = function OrdinarySetPrototypeOf(O, V) { - if (Type(V) !== 'Object' && Type(V) !== 'Null') { - throw new $TypeError('Assertion failed: V must be Object or Null'); - } - /* - var extensible = IsExtensible(O); - var current = OrdinaryGetPrototypeOf(O); - if (SameValue(V, current)) { - return true; - } - if (!extensible) { - return false; - } - */ - try { - $setProto(O, V); - } catch (e) { - return false; - } - return OrdinaryGetPrototypeOf(O) === V; - /* - var p = V; - var done = false; - while (!done) { - if (p === null) { - done = true; - } else if (SameValue(p, O)) { - return false; - } else { - if (wat) { - done = true; - } else { - p = p.[[Prototype]]; - } - } - } - O.[[Prototype]] = V; - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2019/PromiseResolve.js b/build/node_modules/es-abstract/2019/PromiseResolve.js deleted file mode 100644 index 6474b79c..00000000 --- a/build/node_modules/es-abstract/2019/PromiseResolve.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBind = require('call-bind'); - -var $resolve = GetIntrinsic('%Promise.resolve%', true); -var $PromiseResolve = $resolve && callBind($resolve); - -// https://262.ecma-international.org/9.0/#sec-promise-resolve - -module.exports = function PromiseResolve(C, x) { - if (!$PromiseResolve) { - throw new SyntaxError('This environment does not support Promises.'); - } - return $PromiseResolve(C, x); -}; - diff --git a/build/node_modules/es-abstract/2019/QuoteJSONString.js b/build/node_modules/es-abstract/2019/QuoteJSONString.js deleted file mode 100644 index 350fd51c..00000000 --- a/build/node_modules/es-abstract/2019/QuoteJSONString.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $strSplit = callBound('String.prototype.split'); - -var Type = require('./Type'); -var UnicodeEscape = require('./UnicodeEscape'); -var UTF16Encoding = require('./UTF16Encoding'); - -var has = require('has'); - -// https://262.ecma-international.org/10.0/#sec-quotejsonstring - -var escapes = { - '\u0008': '\\b', - '\u0009': '\\t', - '\u000A': '\\n', - '\u000C': '\\f', - '\u000D': '\\r', - '\u0022': '\\"', - '\u005c': '\\\\' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach($strSplit(value), function (C) { - if (has(escapes, C)) { - product += escapes[C]; - } else { - var cCharCode = $charCodeAt(C, 0); - if (cCharCode < 0x20 || isLeadingSurrogate(C) || isTrailingSurrogate(C)) { - product += UnicodeEscape(C); - } else { - product += UTF16Encoding(cCharCode); - } - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2019/RegExpCreate.js b/build/node_modules/es-abstract/2019/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2019/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2019/RegExpExec.js b/build/node_modules/es-abstract/2019/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2019/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2019/RequireObjectCoercible.js b/build/node_modules/es-abstract/2019/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2019/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2019/SameValue.js b/build/node_modules/es-abstract/2019/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2019/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2019/SameValueNonNumber.js b/build/node_modules/es-abstract/2019/SameValueNonNumber.js deleted file mode 100644 index b6d2c4e6..00000000 --- a/build/node_modules/es-abstract/2019/SameValueNonNumber.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); - -// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber - -module.exports = function SameValueNonNumber(x, y) { - if (typeof x === 'number' || typeof x !== typeof y) { - throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); - } - return SameValue(x, y); -}; diff --git a/build/node_modules/es-abstract/2019/SameValueZero.js b/build/node_modules/es-abstract/2019/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2019/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2019/SecFromTime.js b/build/node_modules/es-abstract/2019/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2019/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2019/Set.js b/build/node_modules/es-abstract/2019/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2019/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2019/SetFunctionLength.js b/build/node_modules/es-abstract/2019/SetFunctionLength.js deleted file mode 100644 index c1160c8c..00000000 --- a/build/node_modules/es-abstract/2019/SetFunctionLength.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var HasOwnProperty = require('./HasOwnProperty'); -var IsExtensible = require('./IsExtensible'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-setfunctionlength - -module.exports = function SetFunctionLength(F, length) { - if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { - throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); - } - if (Type(length) !== 'Number') { - throw new $TypeError('Assertion failed: `length` must be a Number'); - } - if (length < 0 || !IsInteger(length)) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); - } - return DefinePropertyOrThrow(F, 'length', { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); -}; diff --git a/build/node_modules/es-abstract/2019/SetFunctionName.js b/build/node_modules/es-abstract/2019/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2019/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2019/SetIntegrityLevel.js b/build/node_modules/es-abstract/2019/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2019/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2019/SpeciesConstructor.js b/build/node_modules/es-abstract/2019/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2019/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2019/SplitMatch.js b/build/node_modules/es-abstract/2019/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2019/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2019/StrictEqualityComparison.js b/build/node_modules/es-abstract/2019/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2019/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2019/StringCreate.js b/build/node_modules/es-abstract/2019/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2019/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2019/StringGetOwnProperty.js b/build/node_modules/es-abstract/2019/StringGetOwnProperty.js deleted file mode 100644 index b6f904ec..00000000 --- a/build/node_modules/es-abstract/2019/StringGetOwnProperty.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var $charAt = callBound('String.prototype.charAt'); -var $stringToString = callBound('String.prototype.toString'); - -var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -var isNegativeZero = require('is-negative-zero'); - -// https://262.ecma-international.org/8.0/#sec-stringgetownproperty - -module.exports = function StringGetOwnProperty(S, P) { - var str; - if (Type(S) === 'Object') { - try { - str = $stringToString(S); - } catch (e) { /**/ } - } - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a boxed string object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - if (Type(P) !== 'String') { - return void undefined; - } - var index = CanonicalNumericIndexString(P); - var len = str.length; - if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { - return void undefined; - } - var resultStr = $charAt(S, index); - return { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': resultStr, - '[[Writable]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2019/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2019/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2019/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2019/TestIntegrityLevel.js b/build/node_modules/es-abstract/2019/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2019/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2019/TimeClip.js b/build/node_modules/es-abstract/2019/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2019/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2019/TimeFromYear.js b/build/node_modules/es-abstract/2019/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2019/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2019/TimeString.js b/build/node_modules/es-abstract/2019/TimeString.js deleted file mode 100644 index 051c4728..00000000 --- a/build/node_modules/es-abstract/2019/TimeString.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var HourFromTime = require('./HourFromTime'); -var MinFromTime = require('./MinFromTime'); -var SecFromTime = require('./SecFromTime'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-timestring - -module.exports = function TimeString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var hour = HourFromTime(tv); - var minute = MinFromTime(tv); - var second = SecFromTime(tv); - return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; -}; diff --git a/build/node_modules/es-abstract/2019/TimeWithinDay.js b/build/node_modules/es-abstract/2019/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2019/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2019/ToBoolean.js b/build/node_modules/es-abstract/2019/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2019/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2019/ToDateString.js b/build/node_modules/es-abstract/2019/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2019/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2019/ToIndex.js b/build/node_modules/es-abstract/2019/ToIndex.js deleted file mode 100644 index 7c9d746d..00000000 --- a/build/node_modules/es-abstract/2019/ToIndex.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); - -var ToInteger = require('./ToInteger'); -var ToLength = require('./ToLength'); -var SameValueZero = require('./SameValueZero'); - -// https://262.ecma-international.org/8.0/#sec-toindex - -module.exports = function ToIndex(value) { - if (typeof value === 'undefined') { - return 0; - } - var integerIndex = ToInteger(value); - if (integerIndex < 0) { - throw new $RangeError('index must be >= 0'); - } - var index = ToLength(integerIndex); - if (!SameValueZero(integerIndex, index)) { - throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); - } - return index; -}; diff --git a/build/node_modules/es-abstract/2019/ToInt16.js b/build/node_modules/es-abstract/2019/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2019/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2019/ToInt32.js b/build/node_modules/es-abstract/2019/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2019/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2019/ToInt8.js b/build/node_modules/es-abstract/2019/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2019/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2019/ToInteger.js b/build/node_modules/es-abstract/2019/ToInteger.js deleted file mode 100644 index 29758180..00000000 --- a/build/node_modules/es-abstract/2019/ToInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - return ES5ToInteger(number); -}; diff --git a/build/node_modules/es-abstract/2019/ToLength.js b/build/node_modules/es-abstract/2019/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2019/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2019/ToNumber.js b/build/node_modules/es-abstract/2019/ToNumber.js deleted file mode 100644 index e776bb2b..00000000 --- a/build/node_modules/es-abstract/2019/ToNumber.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2019/ToObject.js b/build/node_modules/es-abstract/2019/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2019/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2019/ToPrimitive.js b/build/node_modules/es-abstract/2019/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2019/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2019/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2019/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2019/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2019/ToPropertyKey.js b/build/node_modules/es-abstract/2019/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2019/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2019/ToString.js b/build/node_modules/es-abstract/2019/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2019/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2019/ToUint16.js b/build/node_modules/es-abstract/2019/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2019/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2019/ToUint32.js b/build/node_modules/es-abstract/2019/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2019/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2019/ToUint8.js b/build/node_modules/es-abstract/2019/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2019/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2019/ToUint8Clamp.js b/build/node_modules/es-abstract/2019/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2019/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2019/TrimString.js b/build/node_modules/es-abstract/2019/TrimString.js deleted file mode 100644 index 113dcf82..00000000 --- a/build/node_modules/es-abstract/2019/TrimString.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var trimStart = require('string.prototype.trimstart'); -var trimEnd = require('string.prototype.trimend'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/10.0/#sec-trimstring - -module.exports = function TrimString(string, where) { - var str = RequireObjectCoercible(string); - var S = ToString(str); - var T; - if (where === 'start') { - T = trimStart(S); - } else if (where === 'end') { - T = trimEnd(S); - } else if (where === 'start+end') { - T = trimStart(trimEnd(S)); - } else { - throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); - } - return T; -}; diff --git a/build/node_modules/es-abstract/2019/Type.js b/build/node_modules/es-abstract/2019/Type.js deleted file mode 100644 index 0bd11659..00000000 --- a/build/node_modules/es-abstract/2019/Type.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2019/UTF16Decode.js b/build/node_modules/es-abstract/2019/UTF16Decode.js deleted file mode 100644 index 86927b47..00000000 --- a/build/node_modules/es-abstract/2019/UTF16Decode.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -// https://262.ecma-international.org/7.0/#sec-utf16decode - -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair - -module.exports = function UTF16Decode(lead, trail) { - if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { - throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); - } - // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return $fromCharCode(lead) + $fromCharCode(trail); -}; diff --git a/build/node_modules/es-abstract/2019/UTF16Encoding.js b/build/node_modules/es-abstract/2019/UTF16Encoding.js deleted file mode 100644 index f381595f..00000000 --- a/build/node_modules/es-abstract/2019/UTF16Encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var isCodePoint = require('../helpers/isCodePoint'); - -// https://262.ecma-international.org/7.0/#sec-utf16encoding - -module.exports = function UTF16Encoding(cp) { - if (!isCodePoint(cp)) { - throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); - } - if (cp <= 65535) { - return $fromCharCode(cp); - } - var cu1 = floor((cp - 65536) / 1024) + 0xD800; - var cu2 = modulo(cp - 65536, 1024) + 0xDC00; - return $fromCharCode(cu1) + $fromCharCode(cu2); -}; diff --git a/build/node_modules/es-abstract/2019/UnicodeEscape.js b/build/node_modules/es-abstract/2019/UnicodeEscape.js deleted file mode 100644 index db7163f7..00000000 --- a/build/node_modules/es-abstract/2019/UnicodeEscape.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); -var $strSlice = callBound('String.prototype.slice'); - -// https://262.ecma-international.org/9.0/#sec-unicodeescape - -module.exports = function UnicodeEscape(C) { - if (typeof C !== 'string' || C.length !== 1) { - throw new $TypeError('Assertion failed: `C` must be a single code unit'); - } - var n = $charCodeAt(C, 0); - if (n > 0xFFFF) { - throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); - } - - return '\\u' + $strSlice('0000' + $toLowerCase($numberToString(n, 16)), -4); -}; diff --git a/build/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2019/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2019/WeekDay.js b/build/node_modules/es-abstract/2019/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2019/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2019/YearFromTime.js b/build/node_modules/es-abstract/2019/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2019/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2019/abs.js b/build/node_modules/es-abstract/2019/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2019/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2019/floor.js b/build/node_modules/es-abstract/2019/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2019/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2019/modulo.js b/build/node_modules/es-abstract/2019/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2019/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2019/msFromTime.js b/build/node_modules/es-abstract/2019/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2019/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2019/thisBooleanValue.js b/build/node_modules/es-abstract/2019/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2019/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2019/thisNumberValue.js b/build/node_modules/es-abstract/2019/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2019/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2019/thisStringValue.js b/build/node_modules/es-abstract/2019/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2019/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2019/thisSymbolValue.js b/build/node_modules/es-abstract/2019/thisSymbolValue.js deleted file mode 100644 index 91a55254..00000000 --- a/build/node_modules/es-abstract/2019/thisSymbolValue.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-thissymbolvalue - -module.exports = function thisSymbolValue(value) { - if (!$SymbolValueOf) { - throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); - } - if (Type(value) === 'Symbol') { - return value; - } - return $SymbolValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2019/thisTimeValue.js b/build/node_modules/es-abstract/2019/thisTimeValue.js deleted file mode 100644 index a9a47ace..00000000 --- a/build/node_modules/es-abstract/2019/thisTimeValue.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../2018/thisTimeValue'); diff --git a/build/node_modules/es-abstract/2020/AbstractEqualityComparison.js b/build/node_modules/es-abstract/2020/AbstractEqualityComparison.js deleted file mode 100644 index c776194c..00000000 --- a/build/node_modules/es-abstract/2020/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/2020/AbstractRelationalComparison.js b/build/node_modules/es-abstract/2020/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/2020/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/2020/AddEntriesFromIterable.js b/build/node_modules/es-abstract/2020/AddEntriesFromIterable.js deleted file mode 100644 index a0a5e71b..00000000 --- a/build/node_modules/es-abstract/2020/AddEntriesFromIterable.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var inspect = require('object-inspect'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var Get = require('./Get'); -var GetIterator = require('./GetIterator'); -var IsCallable = require('./IsCallable'); -var IteratorClose = require('./IteratorClose'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); -var Type = require('./Type'); - -// https://262.ecma-international.org/10.0//#sec-add-entries-from-iterable - -module.exports = function AddEntriesFromIterable(target, iterable, adder) { - if (!IsCallable(adder)) { - throw new $TypeError('Assertion failed: `adder` is not callable'); - } - if (iterable == null) { - throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); - } - var iteratorRecord = GetIterator(iterable); - while (true) { // eslint-disable-line no-constant-condition - var next = IteratorStep(iteratorRecord); - if (!next) { - return target; - } - var nextItem = IteratorValue(next); - if (Type(nextItem) !== 'Object') { - var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem)); - return IteratorClose( - iteratorRecord, - function () { throw error; } // eslint-disable-line no-loop-func - ); - } - try { - var k = Get(nextItem, '0'); - var v = Get(nextItem, '1'); - Call(adder, target, [k, v]); - } catch (e) { - return IteratorClose( - iteratorRecord, - function () { throw e; } - ); - } - } -}; diff --git a/build/node_modules/es-abstract/2020/AdvanceStringIndex.js b/build/node_modules/es-abstract/2020/AdvanceStringIndex.js deleted file mode 100644 index 0e62c4a4..00000000 --- a/build/node_modules/es-abstract/2020/AdvanceStringIndex.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var CodePointAt = require('./CodePointAt'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://262.ecma-international.org/6.0/#sec-advancestringindex - -module.exports = function AdvanceStringIndex(S, index, unicode) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); - } - if (Type(unicode) !== 'Boolean') { - throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); - } - if (!unicode) { - return index + 1; - } - var length = S.length; - if ((index + 1) >= length) { - return index + 1; - } - var cp = CodePointAt(S, index); - return index + cp['[[CodeUnitCount]]']; -}; diff --git a/build/node_modules/es-abstract/2020/ArrayCreate.js b/build/node_modules/es-abstract/2020/ArrayCreate.js deleted file mode 100644 index 4d20e2e5..00000000 --- a/build/node_modules/es-abstract/2020/ArrayCreate.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); -var $RangeError = GetIntrinsic('%RangeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); - -var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1; - -var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayPrototype - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate - -module.exports = function ArrayCreate(length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); - } - if (length > MAX_ARRAY_LENGTH) { - throw new $RangeError('length is greater than (2**32 - 1)'); - } - var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; - var A = []; // steps 5 - 7, and 9 - if (proto !== $ArrayPrototype) { // step 8 - if (!$setProto) { - throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - $setProto(A, proto); - } - if (length !== 0) { // bypasses the need for step 2 - A.length = length; - } - /* step 10, the above as a shortcut for the below - OrdinaryDefineOwnProperty(A, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': true - }); - */ - return A; -}; diff --git a/build/node_modules/es-abstract/2020/ArraySetLength.js b/build/node_modules/es-abstract/2020/ArraySetLength.js deleted file mode 100644 index 08db9c2e..00000000 --- a/build/node_modules/es-abstract/2020/ArraySetLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var assign = require('object.assign'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsArray = require('./IsArray'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength - -// eslint-disable-next-line max-statements, max-lines-per-function -module.exports = function ArraySetLength(A, Desc) { - if (!IsArray(A)) { - throw new $TypeError('Assertion failed: A must be an Array'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!('[[Value]]' in Desc)) { - return OrdinaryDefineOwnProperty(A, 'length', Desc); - } - var newLenDesc = assign({}, Desc); - var newLen = ToUint32(Desc['[[Value]]']); - var numberLen = ToNumber(Desc['[[Value]]']); - if (newLen !== numberLen) { - throw new $RangeError('Invalid array length'); - } - newLenDesc['[[Value]]'] = newLen; - var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); - if (!IsDataDescriptor(oldLenDesc)) { - throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); - } - var oldLen = oldLenDesc['[[Value]]']; - if (newLen >= oldLen) { - return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - } - if (!oldLenDesc['[[Writable]]']) { - return false; - } - var newWritable; - if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { - newWritable = true; - } else { - newWritable = false; - newLenDesc['[[Writable]]'] = true; - } - var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - if (!succeeded) { - return false; - } - while (newLen < oldLen) { - oldLen -= 1; - // eslint-disable-next-line no-param-reassign - var deleteSucceeded = delete A[ToString(oldLen)]; - if (!deleteSucceeded) { - newLenDesc['[[Value]]'] = oldLen + 1; - if (!newWritable) { - newLenDesc['[[Writable]]'] = false; - OrdinaryDefineOwnProperty(A, 'length', newLenDesc); - return false; - } - } - } - if (!newWritable) { - return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2020/ArraySpeciesCreate.js b/build/node_modules/es-abstract/2020/ArraySpeciesCreate.js deleted file mode 100644 index 26d63b5e..00000000 --- a/build/node_modules/es-abstract/2020/ArraySpeciesCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsConstructor = require('./IsConstructor'); -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate - -module.exports = function ArraySpeciesCreate(originalArray, length) { - if (!IsInteger(length) || length < 0) { - throw new $TypeError('Assertion failed: length must be an integer >= 0'); - } - var len = length === 0 ? 0 : length; - var C; - var isArray = IsArray(originalArray); - if (isArray) { - C = Get(originalArray, 'constructor'); - // TODO: figure out how to make a cross-realm normal Array, a same-realm Array - // if (IsConstructor(C)) { - // if C is another realm's Array, C = undefined - // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? - // } - if ($species && Type(C) === 'Object') { - C = Get(C, $species); - if (C === null) { - C = void 0; - } - } - } - if (typeof C === 'undefined') { - return $Array(len); - } - if (!IsConstructor(C)) { - throw new $TypeError('C must be a constructor'); - } - return new C(len); // Construct(C, len); -}; - diff --git a/build/node_modules/es-abstract/2020/BigInt/add.js b/build/node_modules/es-abstract/2020/BigInt/add.js deleted file mode 100644 index 22b5db4b..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/add.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add - -module.exports = function BigIntAdd(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - // shortcut for the actual spec mechanics - return x + y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/bitwiseAND.js b/build/node_modules/es-abstract/2020/BigInt/bitwiseAND.js deleted file mode 100644 index 83cd2c3c..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/bitwiseAND.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var BigIntBitwiseOp = require('../BigIntBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND - -module.exports = function BigIntBitwiseAND(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - return BigIntBitwiseOp('&', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/bitwiseNOT.js b/build/node_modules/es-abstract/2020/BigInt/bitwiseNOT.js deleted file mode 100644 index 9a444dfe..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/bitwiseNOT.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT - -module.exports = function BigIntBitwiseNOT(x) { - if (Type(x) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); - } - return -x - $BigInt(1); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/bitwiseOR.js b/build/node_modules/es-abstract/2020/BigInt/bitwiseOR.js deleted file mode 100644 index 3c1b5719..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/bitwiseOR.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var BigIntBitwiseOp = require('../BigIntBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR - -module.exports = function BigIntBitwiseOR(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - return BigIntBitwiseOp('|', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/bitwiseXOR.js b/build/node_modules/es-abstract/2020/BigInt/bitwiseXOR.js deleted file mode 100644 index 45f8217e..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/bitwiseXOR.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var BigIntBitwiseOp = require('../BigIntBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR - -module.exports = function BigIntBitwiseXOR(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - return BigIntBitwiseOp('^', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/divide.js b/build/node_modules/es-abstract/2020/BigInt/divide.js deleted file mode 100644 index 5706e7d7..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide - -module.exports = function BigIntDivide(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - if (y === $BigInt(0)) { - throw new $RangeError('Division by zero'); - } - // shortcut for the actual spec mechanics - return x / y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/equal.js b/build/node_modules/es-abstract/2020/BigInt/equal.js deleted file mode 100644 index a28826d6..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/equal.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal - -module.exports = function BigIntEqual(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - // shortcut for the actual spec mechanics - return x === y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/exponentiate.js b/build/node_modules/es-abstract/2020/BigInt/exponentiate.js deleted file mode 100644 index 2365838c..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/exponentiate.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate - -module.exports = function BigIntExponentiate(base, exponent) { - if (Type(base) !== 'BigInt' || Type(exponent) !== 'BigInt') { - throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); - } - if (exponent < $BigInt(0)) { - throw new $RangeError('Exponent must be positive'); - } - if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { - return $BigInt(1); - } - - var square = base; - var remaining = exponent; - while (remaining > $BigInt(0)) { - square += exponent; - --remaining; // eslint-disable-line no-plusplus - } - return square; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/index.js b/build/node_modules/es-abstract/2020/BigInt/index.js deleted file mode 100644 index 63ec52da..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/index.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var add = require('./add'); -var bitwiseAND = require('./bitwiseAND'); -var bitwiseNOT = require('./bitwiseNOT'); -var bitwiseOR = require('./bitwiseOR'); -var bitwiseXOR = require('./bitwiseXOR'); -var divide = require('./divide'); -var equal = require('./equal'); -var exponentiate = require('./exponentiate'); -var leftShift = require('./leftShift'); -var lessThan = require('./lessThan'); -var multiply = require('./multiply'); -var remainder = require('./remainder'); -var sameValue = require('./sameValue'); -var sameValueZero = require('./sameValueZero'); -var signedRightShift = require('./signedRightShift'); -var subtract = require('./subtract'); -var toString = require('./toString'); -var unaryMinus = require('./unaryMinus'); -var unsignedRightShift = require('./unsignedRightShift'); - -module.exports = { - add: add, - bitwiseAND: bitwiseAND, - bitwiseNOT: bitwiseNOT, - bitwiseOR: bitwiseOR, - bitwiseXOR: bitwiseXOR, - divide: divide, - equal: equal, - exponentiate: exponentiate, - leftShift: leftShift, - lessThan: lessThan, - multiply: multiply, - remainder: remainder, - sameValue: sameValue, - sameValueZero: sameValueZero, - signedRightShift: signedRightShift, - subtract: subtract, - toString: toString, - unaryMinus: unaryMinus, - unsignedRightShift: unsignedRightShift -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/leftShift.js b/build/node_modules/es-abstract/2020/BigInt/leftShift.js deleted file mode 100644 index d2a57022..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/leftShift.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift - -module.exports = function BigIntLeftShift(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - // shortcut for the actual spec mechanics - return x << y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/lessThan.js b/build/node_modules/es-abstract/2020/BigInt/lessThan.js deleted file mode 100644 index 0b3cd6ba..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/lessThan.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan - -module.exports = function BigIntLessThan(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - // shortcut for the actual spec mechanics - return x < y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/multiply.js b/build/node_modules/es-abstract/2020/BigInt/multiply.js deleted file mode 100644 index 6e5d56c8..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/multiply.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply - -module.exports = function BigIntMultiply(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - // shortcut for the actual spec mechanics - return x * y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/remainder.js b/build/node_modules/es-abstract/2020/BigInt/remainder.js deleted file mode 100644 index d2dc678c..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/remainder.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -var zero = $BigInt && $BigInt(0); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder - -module.exports = function BigIntRemainder(n, d) { - if (Type(n) !== 'BigInt' || Type(d) !== 'BigInt') { - throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); - } - - if (d === zero) { - throw new $RangeError('Division by zero'); - } - - if (n === zero) { - return zero; - } - - // shortcut for the actual spec mechanics - return n % d; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/sameValue.js b/build/node_modules/es-abstract/2020/BigInt/sameValue.js deleted file mode 100644 index 63ff0639..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/sameValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); -var BigIntEqual = require('./equal'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue - -module.exports = function BigIntSameValue(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - return BigIntEqual(x, y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/sameValueZero.js b/build/node_modules/es-abstract/2020/BigInt/sameValueZero.js deleted file mode 100644 index 39f262c6..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/sameValueZero.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); -var BigIntEqual = require('./equal'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero - -module.exports = function BigIntSameValueZero(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - return BigIntEqual(x, y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/signedRightShift.js b/build/node_modules/es-abstract/2020/BigInt/signedRightShift.js deleted file mode 100644 index f63c642f..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/signedRightShift.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); -var BigIntLeftShift = require('./leftShift'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift - -module.exports = function BigIntSignedRightShift(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - return BigIntLeftShift(x, -y); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/subtract.js b/build/node_modules/es-abstract/2020/BigInt/subtract.js deleted file mode 100644 index 0490784f..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/subtract.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract - -module.exports = function BigIntSubtract(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - // shortcut for the actual spec mechanics - return x - y; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/toString.js b/build/node_modules/es-abstract/2020/BigInt/toString.js deleted file mode 100644 index 858d9554..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/toString.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring - -module.exports = function BigIntToString(x) { - if (Type(x) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` must be a BigInt'); - } - - return $String(x); -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/unaryMinus.js b/build/node_modules/es-abstract/2020/BigInt/unaryMinus.js deleted file mode 100644 index ee0f7ef1..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/unaryMinus.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -var zero = $BigInt && $BigInt(0); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus - -module.exports = function BigIntUnaryMinus(x) { - if (Type(x) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); - } - - if (x === zero) { - return zero; - } - - return -x; -}; diff --git a/build/node_modules/es-abstract/2020/BigInt/unsignedRightShift.js b/build/node_modules/es-abstract/2020/BigInt/unsignedRightShift.js deleted file mode 100644 index 7ad94f7a..00000000 --- a/build/node_modules/es-abstract/2020/BigInt/unsignedRightShift.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift - -module.exports = function BigIntUnsignedRightShift(x, y) { - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); - } - - throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); -}; diff --git a/build/node_modules/es-abstract/2020/BigIntBitwiseOp.js b/build/node_modules/es-abstract/2020/BigIntBitwiseOp.js deleted file mode 100644 index 1af4cad8..00000000 --- a/build/node_modules/es-abstract/2020/BigIntBitwiseOp.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -// var $BigInt = GetIntrinsic('%BigInt%', true); -// var $pow = GetIntrinsic('%Math.pow%'); - -// var BinaryAnd = require('./BinaryAnd'); -// var BinaryOr = require('./BinaryOr'); -// var BinaryXor = require('./BinaryXor'); -var Type = require('./Type'); -// var modulo = require('./modulo'); - -// var zero = $BigInt && $BigInt(0); -// var negOne = $BigInt && $BigInt(-1); -// var two = $BigInt && $BigInt(2); - -// https://262.ecma-international.org/11.0/#sec-bigintbitwiseop - -module.exports = function BigIntBitwiseOp(op, x, y) { - if (op !== '&' && op !== '|' && op !== '^') { - throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); - } - if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { - throw new $TypeError('`x` and `y` must be BigInts'); - } - - if (op === '&') { - return x & y; - } - if (op === '|') { - return x | y; - } - return x ^ y; - /* - var result = zero; - var shift = 0; - while (x !== zero && x !== negOne && y !== zero && y !== negOne) { - var xDigit = modulo(x, two); - var yDigit = modulo(y, two); - if (op === '&') { - result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); - } else if (op === '|') { - result += $pow(2, shift) * BinaryOr(xDigit, yDigit); - } else if (op === '^') { - result += $pow(2, shift) * BinaryXor(xDigit, yDigit); - } - shift += 1; - x = (x - xDigit) / two; - y = (y - yDigit) / two; - } - var tmp; - if (op === '&') { - tmp = BinaryAnd(modulo(x, two), modulo(y, two)); - } else if (op === '|') { - tmp = BinaryAnd(modulo(x, two), modulo(y, two)); - } else { - tmp = BinaryXor(modulo(x, two), modulo(y, two)); - } - if (tmp !== 0) { - result -= $pow(2, shift); - } - return result; - */ -}; diff --git a/build/node_modules/es-abstract/2020/BinaryAnd.js b/build/node_modules/es-abstract/2020/BinaryAnd.js deleted file mode 100644 index c617f388..00000000 --- a/build/node_modules/es-abstract/2020/BinaryAnd.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://262.ecma-international.org/11.0/#sec-binaryand - -module.exports = function BinaryAnd(x, y) { - if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { - throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); - } - return x & y; -}; diff --git a/build/node_modules/es-abstract/2020/BinaryOr.js b/build/node_modules/es-abstract/2020/BinaryOr.js deleted file mode 100644 index 6de0955f..00000000 --- a/build/node_modules/es-abstract/2020/BinaryOr.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://262.ecma-international.org/11.0/#sec-binaryor - -module.exports = function BinaryOr(x, y) { - if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { - throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); - } - return x | y; -}; diff --git a/build/node_modules/es-abstract/2020/BinaryXor.js b/build/node_modules/es-abstract/2020/BinaryXor.js deleted file mode 100644 index 189d7d84..00000000 --- a/build/node_modules/es-abstract/2020/BinaryXor.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://262.ecma-international.org/11.0/#sec-binaryxor - -module.exports = function BinaryXor(x, y) { - if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { - throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); - } - return x ^ y; -}; diff --git a/build/node_modules/es-abstract/2020/Call.js b/build/node_modules/es-abstract/2020/Call.js deleted file mode 100644 index 4b238c69..00000000 --- a/build/node_modules/es-abstract/2020/Call.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsArray = require('./IsArray'); - -var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-call - -module.exports = function Call(F, V) { - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - return $apply(F, V, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2020/CanonicalNumericIndexString.js b/build/node_modules/es-abstract/2020/CanonicalNumericIndexString.js deleted file mode 100644 index feb878c0..00000000 --- a/build/node_modules/es-abstract/2020/CanonicalNumericIndexString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring - -module.exports = function CanonicalNumericIndexString(argument) { - if (Type(argument) !== 'String') { - throw new $TypeError('Assertion failed: `argument` must be a String'); - } - if (argument === '-0') { return -0; } - var n = ToNumber(argument); - if (SameValue(ToString(n), argument)) { return n; } - return void 0; -}; diff --git a/build/node_modules/es-abstract/2020/CodePointAt.js b/build/node_modules/es-abstract/2020/CodePointAt.js deleted file mode 100644 index b887631b..00000000 --- a/build/node_modules/es-abstract/2020/CodePointAt.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var callBound = require('call-bind/callBound'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var Type = require('./Type'); -var UTF16DecodeSurrogatePair = require('./UTF16DecodeSurrogatePair'); - -var $charAt = callBound('String.prototype.charAt'); -var $charCodeAt = callBound('String.prototype.charCodeAt'); - -// https://262.ecma-international.org/11.0/#sec-codepointat - -module.exports = function CodePointAt(string, position) { - if (Type(string) !== 'String') { - throw new $TypeError('Assertion failed: `string` must be a String'); - } - var size = string.length; - if (position < 0 || position >= size) { - throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); - } - var first = $charCodeAt(string, position); - var cp = $charAt(string, position); - var firstIsLeading = isLeadingSurrogate(first); - var firstIsTrailing = isTrailingSurrogate(first); - if (!firstIsLeading && !firstIsTrailing) { - return { - '[[CodePoint]]': cp, - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }; - } - if (firstIsTrailing || (position + 1 === size)) { - return { - '[[CodePoint]]': cp, - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': true - }; - } - var second = $charCodeAt(string, position + 1); - if (!isTrailingSurrogate(second)) { - return { - '[[CodePoint]]': cp, - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': true - }; - } - - return { - '[[CodePoint]]': UTF16DecodeSurrogatePair(first, second), - '[[CodeUnitCount]]': 2, - '[[IsUnpairedSurrogate]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2020/CompletePropertyDescriptor.js b/build/node_modules/es-abstract/2020/CompletePropertyDescriptor.js deleted file mode 100644 index 548bf415..00000000 --- a/build/node_modules/es-abstract/2020/CompletePropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor - -module.exports = function CompletePropertyDescriptor(Desc) { - /* eslint no-param-reassign: 0 */ - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (!has(Desc, '[[Value]]')) { - Desc['[[Value]]'] = void 0; - } - if (!has(Desc, '[[Writable]]')) { - Desc['[[Writable]]'] = false; - } - } else { - if (!has(Desc, '[[Get]]')) { - Desc['[[Get]]'] = void 0; - } - if (!has(Desc, '[[Set]]')) { - Desc['[[Set]]'] = void 0; - } - } - if (!has(Desc, '[[Enumerable]]')) { - Desc['[[Enumerable]]'] = false; - } - if (!has(Desc, '[[Configurable]]')) { - Desc['[[Configurable]]'] = false; - } - return Desc; -}; diff --git a/build/node_modules/es-abstract/2020/CopyDataProperties.js b/build/node_modules/es-abstract/2020/CopyDataProperties.js deleted file mode 100644 index 7bd7ddae..00000000 --- a/build/node_modules/es-abstract/2020/CopyDataProperties.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); -var every = require('../helpers/every'); -var OwnPropertyKeys = require('../helpers/OwnPropertyKeys'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToNumber = require('./ToNumber'); -var ToObject = require('./ToObject'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-copydataproperties - -module.exports = function CopyDataProperties(target, source, excludedItems) { - if (Type(target) !== 'Object') { - throw new $TypeError('Assertion failed: "target" must be an Object'); - } - - if (!IsArray(excludedItems) || !every(excludedItems, IsPropertyKey)) { - throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); - } - - if (typeof source === 'undefined' || source === null) { - return target; - } - - var from = ToObject(source); - - var sourceKeys = OwnPropertyKeys(from); - forEach(sourceKeys, function (nextKey) { - var excluded = false; - - forEach(excludedItems, function (e) { - if (SameValue(e, nextKey) === true) { - excluded = true; - } - }); - - var enumerable = $isEnumerable(from, nextKey) || ( - // this is to handle string keys being non-enumerable in older engines - typeof source === 'string' - && nextKey >= 0 - && IsInteger(ToNumber(nextKey)) - ); - if (excluded === false && enumerable) { - var propValue = Get(from, nextKey); - CreateDataPropertyOrThrow(target, nextKey, propValue); - } - }); - - return target; -}; diff --git a/build/node_modules/es-abstract/2020/CreateDataProperty.js b/build/node_modules/es-abstract/2020/CreateDataProperty.js deleted file mode 100644 index ff5ca305..00000000 --- a/build/node_modules/es-abstract/2020/CreateDataProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty - -module.exports = function CreateDataProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var oldDesc = OrdinaryGetOwnProperty(O, P); - var extensible = !oldDesc || IsExtensible(O); - var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']); - if (immutable || !extensible) { - return false; - } - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Value]]': V, - '[[Writable]]': true - } - ); -}; diff --git a/build/node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js b/build/node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js deleted file mode 100644 index 2f7c410b..00000000 --- a/build/node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var CreateDataProperty = require('./CreateDataProperty'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow - -module.exports = function CreateDataPropertyOrThrow(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - var success = CreateDataProperty(O, P, V); - if (!success) { - throw new $TypeError('unable to create data property'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2020/CreateHTML.js b/build/node_modules/es-abstract/2020/CreateHTML.js deleted file mode 100644 index ccded1e6..00000000 --- a/build/node_modules/es-abstract/2020/CreateHTML.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $replace = callBound('String.prototype.replace'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createhtml - -module.exports = function CreateHTML(string, tag, attribute, value) { - if (Type(tag) !== 'String' || Type(attribute) !== 'String') { - throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); - } - var str = RequireObjectCoercible(string); - var S = ToString(str); - var p1 = '<' + tag; - if (attribute !== '') { - var V = ToString(value); - var escapedV = $replace(V, /\x22/g, '"'); - p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; - } - return p1 + '>' + S + ''; -}; diff --git a/build/node_modules/es-abstract/2020/CreateIterResultObject.js b/build/node_modules/es-abstract/2020/CreateIterResultObject.js deleted file mode 100644 index eea77a51..00000000 --- a/build/node_modules/es-abstract/2020/CreateIterResultObject.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject - -module.exports = function CreateIterResultObject(value, done) { - if (Type(done) !== 'Boolean') { - throw new $TypeError('Assertion failed: Type(done) is not Boolean'); - } - return { - value: value, - done: done - }; -}; diff --git a/build/node_modules/es-abstract/2020/CreateListFromArrayLike.js b/build/node_modules/es-abstract/2020/CreateListFromArrayLike.js deleted file mode 100644 index 3e9f5f40..00000000 --- a/build/node_modules/es-abstract/2020/CreateListFromArrayLike.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); -var $push = callBound('Array.prototype.push'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var LengthOfArrayLike = require('./LengthOfArrayLike'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-createlistfromarraylike - -module.exports = function CreateListFromArrayLike(obj) { - var elementTypes = arguments.length > 1 - ? arguments[1] - : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; - - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - if (!IsArray(elementTypes)) { - throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); - } - var len = LengthOfArrayLike(obj); - var list = []; - var index = 0; - while (index < len) { - var indexName = ToString(index); - var next = Get(obj, indexName); - var nextType = Type(next); - if ($indexOf(elementTypes, nextType) < 0) { - throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); - } - $push(list, next); - index += 1; - } - return list; -}; diff --git a/build/node_modules/es-abstract/2020/CreateMethodProperty.js b/build/node_modules/es-abstract/2020/CreateMethodProperty.js deleted file mode 100644 index 53274a56..00000000 --- a/build/node_modules/es-abstract/2020/CreateMethodProperty.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty - -module.exports = function CreateMethodProperty(O, P, V) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var newDesc = { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': V, - '[[Writable]]': true - }; - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - newDesc - ); -}; diff --git a/build/node_modules/es-abstract/2020/DateFromTime.js b/build/node_modules/es-abstract/2020/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/2020/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/2020/DateString.js b/build/node_modules/es-abstract/2020/DateString.js deleted file mode 100644 index 939c14c0..00000000 --- a/build/node_modules/es-abstract/2020/DateString.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var Type = require('./Type'); -var WeekDay = require('./WeekDay'); -var MonthFromTime = require('./MonthFromTime'); -var YearFromTime = require('./YearFromTime'); -var DateFromTime = require('./DateFromTime'); - -// https://262.ecma-international.org/9.0/#sec-datestring - -module.exports = function DateString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var weekday = weekdays[WeekDay(tv)]; - var month = months[MonthFromTime(tv)]; - var day = padTimeComponent(DateFromTime(tv)); - var year = padTimeComponent(YearFromTime(tv), 4); - return weekday + '\x20' + month + '\x20' + day + '\x20' + year; -}; diff --git a/build/node_modules/es-abstract/2020/Day.js b/build/node_modules/es-abstract/2020/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/2020/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/2020/DayFromYear.js b/build/node_modules/es-abstract/2020/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/2020/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/2020/DayWithinYear.js b/build/node_modules/es-abstract/2020/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/2020/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/2020/DaysInYear.js b/build/node_modules/es-abstract/2020/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/2020/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/2020/DefinePropertyOrThrow.js b/build/node_modules/es-abstract/2020/DefinePropertyOrThrow.js deleted file mode 100644 index 26f2714b..00000000 --- a/build/node_modules/es-abstract/2020/DefinePropertyOrThrow.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow - -module.exports = function DefinePropertyOrThrow(O, P, desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - var Desc = isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, desc) ? desc : ToPropertyDescriptor(desc); - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); - } - - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); -}; diff --git a/build/node_modules/es-abstract/2020/DeletePropertyOrThrow.js b/build/node_modules/es-abstract/2020/DeletePropertyOrThrow.js deleted file mode 100644 index 30d5e57c..00000000 --- a/build/node_modules/es-abstract/2020/DeletePropertyOrThrow.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow - -module.exports = function DeletePropertyOrThrow(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // eslint-disable-next-line no-param-reassign - var success = delete O[P]; - if (!success) { - throw new $TypeError('Attempt to delete property failed.'); - } - return success; -}; diff --git a/build/node_modules/es-abstract/2020/EnumerableOwnPropertyNames.js b/build/node_modules/es-abstract/2020/EnumerableOwnPropertyNames.js deleted file mode 100644 index 44171b9e..00000000 --- a/build/node_modules/es-abstract/2020/EnumerableOwnPropertyNames.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var objectKeys = require('object-keys'); - -var callBound = require('call-bind/callBound'); - -var callBind = require('call-bind'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%')); - -var forEach = require('../helpers/forEach'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/8.0/#sec-enumerableownproperties - -module.exports = function EnumerableOwnProperties(O, kind) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - - var keys = objectKeys(O); - if (kind === 'key') { - return keys; - } - if (kind === 'value' || kind === 'key+value') { - var results = []; - forEach(keys, function (key) { - if ($isEnumerable(O, key)) { - $pushApply(results, [ - kind === 'value' ? O[key] : [key, O[key]] - ]); - } - }); - return results; - } - throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); -}; diff --git a/build/node_modules/es-abstract/2020/FlattenIntoArray.js b/build/node_modules/es-abstract/2020/FlattenIntoArray.js deleted file mode 100644 index 6429ee79..00000000 --- a/build/node_modules/es-abstract/2020/FlattenIntoArray.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var Call = require('./Call'); -var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); -var Get = require('./Get'); -var HasProperty = require('./HasProperty'); -var IsArray = require('./IsArray'); -var LengthOfArrayLike = require('./LengthOfArrayLike'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/11.0/#sec-flattenintoarray - -// eslint-disable-next-line max-params -module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { - var mapperFunction; - if (arguments.length > 5) { - mapperFunction = arguments[5]; - } - - var targetIndex = start; - var sourceIndex = 0; - while (sourceIndex < sourceLen) { - var P = ToString(sourceIndex); - var exists = HasProperty(source, P); - if (exists === true) { - var element = Get(source, P); - if (typeof mapperFunction !== 'undefined') { - if (arguments.length <= 6) { - throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); - } - element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); - } - var shouldFlatten = false; - if (depth > 0) { - shouldFlatten = IsArray(element); - } - if (shouldFlatten) { - var elementLen = LengthOfArrayLike(element); - targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); - } else { - if (targetIndex >= MAX_SAFE_INTEGER) { - throw new $TypeError('index too large'); - } - CreateDataPropertyOrThrow(target, ToString(targetIndex), element); - targetIndex += 1; - } - } - sourceIndex += 1; - } - - return targetIndex; -}; diff --git a/build/node_modules/es-abstract/2020/FromPropertyDescriptor.js b/build/node_modules/es-abstract/2020/FromPropertyDescriptor.js deleted file mode 100644 index 9a69a260..00000000 --- a/build/node_modules/es-abstract/2020/FromPropertyDescriptor.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - var obj = {}; - if ('[[Value]]' in Desc) { - obj.value = Desc['[[Value]]']; - } - if ('[[Writable]]' in Desc) { - obj.writable = Desc['[[Writable]]']; - } - if ('[[Get]]' in Desc) { - obj.get = Desc['[[Get]]']; - } - if ('[[Set]]' in Desc) { - obj.set = Desc['[[Set]]']; - } - if ('[[Enumerable]]' in Desc) { - obj.enumerable = Desc['[[Enumerable]]']; - } - if ('[[Configurable]]' in Desc) { - obj.configurable = Desc['[[Configurable]]']; - } - return obj; -}; diff --git a/build/node_modules/es-abstract/2020/Get.js b/build/node_modules/es-abstract/2020/Get.js deleted file mode 100644 index 681055a2..00000000 --- a/build/node_modules/es-abstract/2020/Get.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var inspect = require('object-inspect'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -/** - * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p - * 1. Assert: Type(O) is Object. - * 2. Assert: IsPropertyKey(P) is true. - * 3. Return O.[[Get]](P, O). - */ - -module.exports = function Get(O, P) { - // 7.3.1.1 - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - // 7.3.1.2 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); - } - // 7.3.1.3 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2020/GetIterator.js b/build/node_modules/es-abstract/2020/GetIterator.js deleted file mode 100644 index 0e74c173..00000000 --- a/build/node_modules/es-abstract/2020/GetIterator.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); - -var inspect = require('object-inspect'); -var hasSymbols = require('has-symbols')(); - -var getIteratorMethod = require('../helpers/getIteratorMethod'); -var AdvanceStringIndex = require('./AdvanceStringIndex'); -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-getiterator -module.exports = function GetIterator(obj, hint, method) { - var actualHint = hint; - if (arguments.length < 2) { - actualHint = 'sync'; - } - if (actualHint !== 'sync' && actualHint !== 'async') { - throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint)); - } - - var actualMethod = method; - if (arguments.length < 3) { - if (actualHint === 'async') { - if (hasSymbols && $asyncIterator) { - actualMethod = GetMethod(obj, $asyncIterator); - } - if (actualMethod === undefined) { - throw new $TypeError("async from sync iterators aren't currently supported"); - } - } else { - actualMethod = getIteratorMethod( - { - AdvanceStringIndex: AdvanceStringIndex, - GetMethod: GetMethod, - IsArray: IsArray, - Type: Type - }, - obj - ); - } - } - var iterator = Call(actualMethod, obj); - if (Type(iterator) !== 'Object') { - throw new $TypeError('iterator must return an object'); - } - - return iterator; - - // TODO: This should return an IteratorRecord - /* - var nextMethod = GetV(iterator, 'next'); - return { - '[[Iterator]]': iterator, - '[[NextMethod]]': nextMethod, - '[[Done]]': false - }; - */ -}; diff --git a/build/node_modules/es-abstract/2020/GetMethod.js b/build/node_modules/es-abstract/2020/GetMethod.js deleted file mode 100644 index 775d3fb9..00000000 --- a/build/node_modules/es-abstract/2020/GetMethod.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetV = require('./GetV'); -var IsCallable = require('./IsCallable'); -var IsPropertyKey = require('./IsPropertyKey'); - -/** - * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let func be GetV(O, P). - * 3. ReturnIfAbrupt(func). - * 4. If func is either undefined or null, return undefined. - * 5. If IsCallable(func) is false, throw a TypeError exception. - * 6. Return func. - */ - -module.exports = function GetMethod(O, P) { - // 7.3.9.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.9.2 - var func = GetV(O, P); - - // 7.3.9.4 - if (func == null) { - return void 0; - } - - // 7.3.9.5 - if (!IsCallable(func)) { - throw new $TypeError(P + 'is not a function'); - } - - // 7.3.9.6 - return func; -}; diff --git a/build/node_modules/es-abstract/2020/GetOwnPropertyKeys.js b/build/node_modules/es-abstract/2020/GetOwnPropertyKeys.js deleted file mode 100644 index b8f4167f..00000000 --- a/build/node_modules/es-abstract/2020/GetOwnPropertyKeys.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var hasSymbols = require('has-symbols')(); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); -var keys = require('object-keys'); - -var esType = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys - -module.exports = function GetOwnPropertyKeys(O, Type) { - if (esType(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (Type === 'Symbol') { - return $gOPS ? $gOPS(O) : []; - } - if (Type === 'String') { - if (!$gOPN) { - return keys(O); - } - return $gOPN(O); - } - throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); -}; diff --git a/build/node_modules/es-abstract/2020/GetPrototypeFromConstructor.js b/build/node_modules/es-abstract/2020/GetPrototypeFromConstructor.js deleted file mode 100644 index 5f369cad..00000000 --- a/build/node_modules/es-abstract/2020/GetPrototypeFromConstructor.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Function = GetIntrinsic('%Function%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor - -module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { - var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - if (!IsConstructor(constructor)) { - throw new $TypeError('Assertion failed: `constructor` must be a constructor'); - } - var proto = Get(constructor, 'prototype'); - if (Type(proto) !== 'Object') { - if (!(constructor instanceof $Function)) { - // ignore other realms, for now - throw new $TypeError('cross-realm constructors not currently supported'); - } - proto = intrinsic; - } - return proto; -}; diff --git a/build/node_modules/es-abstract/2020/GetSubstitution.js b/build/node_modules/es-abstract/2020/GetSubstitution.js deleted file mode 100644 index a5a7a1be..00000000 --- a/build/node_modules/es-abstract/2020/GetSubstitution.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var every = require('../helpers/every'); - -var $charAt = callBound('String.prototype.charAt'); -var $strSlice = callBound('String.prototype.slice'); -var $indexOf = callBound('String.prototype.indexOf'); -var $parseInt = parseInt; - -var isDigit = regexTester(/^[0-9]$/); - -var inspect = require('object-inspect'); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var IsInteger = require('./IsInteger'); -var ToObject = require('./ToObject'); -var ToString = require('./ToString'); -var Type = require('./Type'); - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -var isStringOrHole = function (capture, index, arr) { - return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined'); -}; - -// http://262.ecma-international.org/9.0/#sec-getsubstitution - -// eslint-disable-next-line max-statements, max-params, max-lines-per-function -module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { - if (Type(matched) !== 'String') { - throw new $TypeError('Assertion failed: `matched` must be a String'); - } - var matchLength = matched.length; - - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `str` must be a String'); - } - var stringLength = str.length; - - if (!IsInteger(position) || position < 0 || position > stringLength) { - throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); - } - - if (!IsArray(captures) || !every(captures, isStringOrHole)) { - throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); - } - - if (Type(replacement) !== 'String') { - throw new $TypeError('Assertion failed: `replacement` must be a String'); - } - - var tailPos = position + matchLength; - var m = captures.length; - if (Type(namedCaptures) !== 'Undefined') { - namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign - } - - var result = ''; - for (var i = 0; i < replacement.length; i += 1) { - // if this is a $, and it's not the end of the replacement - var current = $charAt(replacement, i); - var isLast = (i + 1) >= replacement.length; - var nextIsLast = (i + 2) >= replacement.length; - if (current === '$' && !isLast) { - var next = $charAt(replacement, i + 1); - if (next === '$') { - result += '$'; - i += 1; - } else if (next === '&') { - result += matched; - i += 1; - } else if (next === '`') { - result += position === 0 ? '' : $strSlice(str, 0, position - 1); - i += 1; - } else if (next === "'") { - result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); - i += 1; - } else { - var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); - if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { - // $1 through $9, and not followed by a digit - var n = $parseInt(next, 10); - // if (n > m, impl-defined) - result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1]; - i += 1; - } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { - // $00 through $99 - var nn = next + nextNext; - var nnI = $parseInt(nn, 10) - 1; - // if nn === '00' or nn > m, impl-defined - result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI]; - i += 2; - } else if (next === '<') { - // eslint-disable-next-line max-depth - if (Type(namedCaptures) === 'Undefined') { - result += '$<'; - i += 2; - } else { - var endIndex = $indexOf(replacement, '>', i); - // eslint-disable-next-line max-depth - if (endIndex > -1) { - var groupName = $strSlice(replacement, i + '$<'.length, endIndex); - var capture = Get(namedCaptures, groupName); - // eslint-disable-next-line max-depth - if (Type(capture) !== 'Undefined') { - result += ToString(capture); - } - i += ('<' + groupName + '>').length; - } - } - } else { - result += '$'; - } - } - } else { - // the final $, or else not a $ - result += $charAt(replacement, i); - } - } - return result; -}; diff --git a/build/node_modules/es-abstract/2020/GetV.js b/build/node_modules/es-abstract/2020/GetV.js deleted file mode 100644 index 2d8cc824..00000000 --- a/build/node_modules/es-abstract/2020/GetV.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var ToObject = require('./ToObject'); - -/** - * 7.3.2 GetV (V, P) - * 1. Assert: IsPropertyKey(P) is true. - * 2. Let O be ToObject(V). - * 3. ReturnIfAbrupt(O). - * 4. Return O.[[Get]](P, V). - */ - -module.exports = function GetV(V, P) { - // 7.3.2.1 - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - - // 7.3.2.2-3 - var O = ToObject(V); - - // 7.3.2.4 - return O[P]; -}; diff --git a/build/node_modules/es-abstract/2020/HasOwnProperty.js b/build/node_modules/es-abstract/2020/HasOwnProperty.js deleted file mode 100644 index 04d28495..00000000 --- a/build/node_modules/es-abstract/2020/HasOwnProperty.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var has = require('has'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty - -module.exports = function HasOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return has(O, P); -}; diff --git a/build/node_modules/es-abstract/2020/HasProperty.js b/build/node_modules/es-abstract/2020/HasProperty.js deleted file mode 100644 index b341654e..00000000 --- a/build/node_modules/es-abstract/2020/HasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty - -module.exports = function HasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2020/HourFromTime.js b/build/node_modules/es-abstract/2020/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/2020/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/2020/InLeapYear.js b/build/node_modules/es-abstract/2020/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/2020/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/2020/InstanceofOperator.js b/build/node_modules/es-abstract/2020/InstanceofOperator.js deleted file mode 100644 index a3c4d237..00000000 --- a/build/node_modules/es-abstract/2020/InstanceofOperator.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $hasInstance = GetIntrinsic('Symbol.hasInstance', true); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var OrdinaryHasInstance = require('./OrdinaryHasInstance'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator - -module.exports = function InstanceofOperator(O, C) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; - if (typeof instOfHandler !== 'undefined') { - return ToBoolean(Call(instOfHandler, C, [O])); - } - if (!IsCallable(C)) { - throw new $TypeError('`C` is not Callable'); - } - return OrdinaryHasInstance(C, O); -}; diff --git a/build/node_modules/es-abstract/2020/Invoke.js b/build/node_modules/es-abstract/2020/Invoke.js deleted file mode 100644 index d4214ee5..00000000 --- a/build/node_modules/es-abstract/2020/Invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var IsArray = require('./IsArray'); -var GetV = require('./GetV'); -var IsPropertyKey = require('./IsPropertyKey'); - -// https://ecma-international.org/ecma-262/6.0/#sec-invoke - -module.exports = function Invoke(O, P) { - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - var argumentsList = arguments.length > 2 ? arguments[2] : []; - if (!IsArray(argumentsList)) { - throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); - } - var func = GetV(O, P); - return Call(func, O, argumentsList); -}; diff --git a/build/node_modules/es-abstract/2020/IsAccessorDescriptor.js b/build/node_modules/es-abstract/2020/IsAccessorDescriptor.js deleted file mode 100644 index 78563e7e..00000000 --- a/build/node_modules/es-abstract/2020/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2020/IsArray.js b/build/node_modules/es-abstract/2020/IsArray.js deleted file mode 100644 index f933cec0..00000000 --- a/build/node_modules/es-abstract/2020/IsArray.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Array = GetIntrinsic('%Array%'); - -// eslint-disable-next-line global-require -var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isarray - -module.exports = $Array.isArray || function IsArray(argument) { - return toStr(argument) === '[object Array]'; -}; diff --git a/build/node_modules/es-abstract/2020/IsBigIntElementType.js b/build/node_modules/es-abstract/2020/IsBigIntElementType.js deleted file mode 100644 index e3f58a94..00000000 --- a/build/node_modules/es-abstract/2020/IsBigIntElementType.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://262.ecma-international.org/11.0/#sec-isbigintelementtype - -module.exports = function IsBigIntElementType(type) { - return type === 'BigUint64' || type === 'BigInt64'; -}; diff --git a/build/node_modules/es-abstract/2020/IsCallable.js b/build/node_modules/es-abstract/2020/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/2020/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/2020/IsConcatSpreadable.js b/build/node_modules/es-abstract/2020/IsConcatSpreadable.js deleted file mode 100644 index 141b3341..00000000 --- a/build/node_modules/es-abstract/2020/IsConcatSpreadable.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); - -var Get = require('./Get'); -var IsArray = require('./IsArray'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable - -module.exports = function IsConcatSpreadable(O) { - if (Type(O) !== 'Object') { - return false; - } - if ($isConcatSpreadable) { - var spreadable = Get(O, $isConcatSpreadable); - if (typeof spreadable !== 'undefined') { - return ToBoolean(spreadable); - } - } - return IsArray(O); -}; diff --git a/build/node_modules/es-abstract/2020/IsConstructor.js b/build/node_modules/es-abstract/2020/IsConstructor.js deleted file mode 100644 index fe626e18..00000000 --- a/build/node_modules/es-abstract/2020/IsConstructor.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../GetIntrinsic.js'); - -var $construct = GetIntrinsic('%Reflect.construct%', true); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -try { - DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); -} catch (e) { - // Accessor properties aren't supported - DefinePropertyOrThrow = null; -} - -// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor - -if (DefinePropertyOrThrow && $construct) { - var isConstructorMarker = {}; - var badArrayLike = {}; - DefinePropertyOrThrow(badArrayLike, 'length', { - '[[Get]]': function () { - throw isConstructorMarker; - }, - '[[Enumerable]]': true - }); - - module.exports = function IsConstructor(argument) { - try { - // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: - $construct(argument, badArrayLike); - } catch (err) { - return err === isConstructorMarker; - } - }; -} else { - module.exports = function IsConstructor(argument) { - // unfortunately there's no way to truly check this without try/catch `new argument` in old environments - return typeof argument === 'function' && !!argument.prototype; - }; -} diff --git a/build/node_modules/es-abstract/2020/IsDataDescriptor.js b/build/node_modules/es-abstract/2020/IsDataDescriptor.js deleted file mode 100644 index 00d14a60..00000000 --- a/build/node_modules/es-abstract/2020/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var assertRecord = require('../helpers/assertRecord'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/2020/IsExtensible.js b/build/node_modules/es-abstract/2020/IsExtensible.js deleted file mode 100644 index 9df5b80b..00000000 --- a/build/node_modules/es-abstract/2020/IsExtensible.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var $preventExtensions = $Object.preventExtensions; -var $isExtensible = $Object.isExtensible; - -// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o - -module.exports = $preventExtensions - ? function IsExtensible(obj) { - return !isPrimitive(obj) && $isExtensible(obj); - } - : function IsExtensible(obj) { - return !isPrimitive(obj); - }; diff --git a/build/node_modules/es-abstract/2020/IsGenericDescriptor.js b/build/node_modules/es-abstract/2020/IsGenericDescriptor.js deleted file mode 100644 index 95b1d353..00000000 --- a/build/node_modules/es-abstract/2020/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var assertRecord = require('../helpers/assertRecord'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/2020/IsInteger.js b/build/node_modules/es-abstract/2020/IsInteger.js deleted file mode 100644 index f4d1a2a7..00000000 --- a/build/node_modules/es-abstract/2020/IsInteger.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isinteger - -module.exports = function IsInteger(argument) { - if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { - return false; - } - var absValue = abs(argument); - return floor(absValue) === absValue; -}; diff --git a/build/node_modules/es-abstract/2020/IsNoTearConfiguration.js b/build/node_modules/es-abstract/2020/IsNoTearConfiguration.js deleted file mode 100644 index f0d28087..00000000 --- a/build/node_modules/es-abstract/2020/IsNoTearConfiguration.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); -var IsBigIntElementType = require('./IsBigIntElementType'); - -// https://262.ecma-international.org/11.0/#sec-isnotearconfiguration - -module.exports = function IsNoTearConfiguration(type, order) { - if (IsUnclampedIntegerElementType(type)) { - return true; - } - if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') { - return true; - } - return false; -}; diff --git a/build/node_modules/es-abstract/2020/IsNonNegativeInteger.js b/build/node_modules/es-abstract/2020/IsNonNegativeInteger.js deleted file mode 100644 index ae1f69c9..00000000 --- a/build/node_modules/es-abstract/2020/IsNonNegativeInteger.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var IsInteger = require('./IsInteger'); - -// https://262.ecma-international.org/11.0/#sec-isnonnegativeinteger - -module.exports = function IsNonNegativeInteger(argument) { - return !!IsInteger(argument) && argument >= 0; -}; diff --git a/build/node_modules/es-abstract/2020/IsPromise.js b/build/node_modules/es-abstract/2020/IsPromise.js deleted file mode 100644 index a551ae0c..00000000 --- a/build/node_modules/es-abstract/2020/IsPromise.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $PromiseThen = callBound('Promise.prototype.then', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ispromise - -module.exports = function IsPromise(x) { - if (Type(x) !== 'Object') { - return false; - } - if (!$PromiseThen) { // Promises are not supported - return false; - } - try { - $PromiseThen(x); // throws if not a promise - } catch (e) { - return false; - } - return true; -}; diff --git a/build/node_modules/es-abstract/2020/IsPropertyKey.js b/build/node_modules/es-abstract/2020/IsPropertyKey.js deleted file mode 100644 index f43ab581..00000000 --- a/build/node_modules/es-abstract/2020/IsPropertyKey.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey - -module.exports = function IsPropertyKey(argument) { - return typeof argument === 'string' || typeof argument === 'symbol'; -}; diff --git a/build/node_modules/es-abstract/2020/IsRegExp.js b/build/node_modules/es-abstract/2020/IsRegExp.js deleted file mode 100644 index e1054813..00000000 --- a/build/node_modules/es-abstract/2020/IsRegExp.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $match = GetIntrinsic('%Symbol.match%', true); - -var hasRegExpMatcher = require('is-regex'); - -var ToBoolean = require('./ToBoolean'); - -// https://ecma-international.org/ecma-262/6.0/#sec-isregexp - -module.exports = function IsRegExp(argument) { - if (!argument || typeof argument !== 'object') { - return false; - } - if ($match) { - var isRegExp = argument[$match]; - if (typeof isRegExp !== 'undefined') { - return ToBoolean(isRegExp); - } - } - return hasRegExpMatcher(argument); -}; diff --git a/build/node_modules/es-abstract/2020/IsStringPrefix.js b/build/node_modules/es-abstract/2020/IsStringPrefix.js deleted file mode 100644 index 4958544c..00000000 --- a/build/node_modules/es-abstract/2020/IsStringPrefix.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPrefixOf = require('../helpers/isPrefixOf'); - -// var callBound = require('call-bind/callBound'); - -// var $charAt = callBound('String.prototype.charAt'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-isstringprefix - -module.exports = function IsStringPrefix(p, q) { - if (Type(p) !== 'String') { - throw new $TypeError('Assertion failed: "p" must be a String'); - } - - if (Type(q) !== 'String') { - throw new $TypeError('Assertion failed: "q" must be a String'); - } - - return isPrefixOf(p, q); - /* - if (p === q || p === '') { - return true; - } - - var pLength = p.length; - var qLength = q.length; - if (pLength >= qLength) { - return false; - } - - // assert: pLength < qLength - - for (var i = 0; i < pLength; i += 1) { - if ($charAt(p, i) !== $charAt(q, i)) { - return false; - } - } - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2020/IsUnclampedIntegerElementType.js b/build/node_modules/es-abstract/2020/IsUnclampedIntegerElementType.js deleted file mode 100644 index 15237b1f..00000000 --- a/build/node_modules/es-abstract/2020/IsUnclampedIntegerElementType.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -// https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype - -module.exports = function IsUnclampedIntegerElementType(type) { - return type === 'Int8' - || type === 'Uint8' - || type === 'Int16' - || type === 'Uint16' - || type === 'Int32' - || type === 'Uint32'; -}; diff --git a/build/node_modules/es-abstract/2020/IsUnsignedElementType.js b/build/node_modules/es-abstract/2020/IsUnsignedElementType.js deleted file mode 100644 index 5eb1e7c4..00000000 --- a/build/node_modules/es-abstract/2020/IsUnsignedElementType.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// https://262.ecma-international.org/11.0/#sec-isunsignedelementtype - -module.exports = function IsUnsignedElementType(type) { - return type === 'Uint8' - || type === 'Uint8C' - || type === 'Uint16' - || type === 'Uint32' - || type === 'BigUint64'; -}; diff --git a/build/node_modules/es-abstract/2020/IterableToList.js b/build/node_modules/es-abstract/2020/IterableToList.js deleted file mode 100644 index d994d741..00000000 --- a/build/node_modules/es-abstract/2020/IterableToList.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $arrayPush = callBound('Array.prototype.push'); - -var GetIterator = require('./GetIterator'); -var IteratorStep = require('./IteratorStep'); -var IteratorValue = require('./IteratorValue'); - -// https://262.ecma-international.org/9.0/#sec-iterabletolist - -module.exports = function IterableToList(items, method) { - var iterator = GetIterator(items, 'sync', method); - var values = []; - var next = true; - while (next) { - next = IteratorStep(iterator); - if (next) { - var nextValue = IteratorValue(next); - $arrayPush(values, nextValue); - } - } - return values; -}; diff --git a/build/node_modules/es-abstract/2020/IteratorClose.js b/build/node_modules/es-abstract/2020/IteratorClose.js deleted file mode 100644 index dd1118df..00000000 --- a/build/node_modules/es-abstract/2020/IteratorClose.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Call = require('./Call'); -var GetMethod = require('./GetMethod'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose - -module.exports = function IteratorClose(iterator, completion) { - if (Type(iterator) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterator) is not Object'); - } - if (!IsCallable(completion)) { - throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record'); - } - var completionThunk = completion; - - var iteratorReturn = GetMethod(iterator, 'return'); - - if (typeof iteratorReturn === 'undefined') { - return completionThunk(); - } - - var completionRecord; - try { - var innerResult = Call(iteratorReturn, iterator, []); - } catch (e) { - // if we hit here, then "e" is the innerResult completion that needs re-throwing - - // if the completion is of type "throw", this will throw. - completionThunk(); - completionThunk = null; // ensure it's not called twice. - - // if not, then return the innerResult completion - throw e; - } - completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does - completionThunk = null; // ensure it's not called twice. - - if (Type(innerResult) !== 'Object') { - throw new $TypeError('iterator .return must return an object'); - } - - return completionRecord; -}; diff --git a/build/node_modules/es-abstract/2020/IteratorComplete.js b/build/node_modules/es-abstract/2020/IteratorComplete.js deleted file mode 100644 index ed4efa37..00000000 --- a/build/node_modules/es-abstract/2020/IteratorComplete.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToBoolean = require('./ToBoolean'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete - -module.exports = function IteratorComplete(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return ToBoolean(Get(iterResult, 'done')); -}; diff --git a/build/node_modules/es-abstract/2020/IteratorNext.js b/build/node_modules/es-abstract/2020/IteratorNext.js deleted file mode 100644 index cf80655b..00000000 --- a/build/node_modules/es-abstract/2020/IteratorNext.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Invoke = require('./Invoke'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext - -module.exports = function IteratorNext(iterator, value) { - var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); - if (Type(result) !== 'Object') { - throw new $TypeError('iterator next must return an object'); - } - return result; -}; diff --git a/build/node_modules/es-abstract/2020/IteratorStep.js b/build/node_modules/es-abstract/2020/IteratorStep.js deleted file mode 100644 index 41b9d1b2..00000000 --- a/build/node_modules/es-abstract/2020/IteratorStep.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var IteratorComplete = require('./IteratorComplete'); -var IteratorNext = require('./IteratorNext'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep - -module.exports = function IteratorStep(iterator) { - var result = IteratorNext(iterator); - var done = IteratorComplete(result); - return done === true ? false : result; -}; - diff --git a/build/node_modules/es-abstract/2020/IteratorValue.js b/build/node_modules/es-abstract/2020/IteratorValue.js deleted file mode 100644 index d15d8aeb..00000000 --- a/build/node_modules/es-abstract/2020/IteratorValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue - -module.exports = function IteratorValue(iterResult) { - if (Type(iterResult) !== 'Object') { - throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); - } - return Get(iterResult, 'value'); -}; - diff --git a/build/node_modules/es-abstract/2020/LengthOfArrayLike.js b/build/node_modules/es-abstract/2020/LengthOfArrayLike.js deleted file mode 100644 index 132c4d58..00000000 --- a/build/node_modules/es-abstract/2020/LengthOfArrayLike.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var ToLength = require('./ToLength'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-lengthofarraylike - -module.exports = function LengthOfArrayLike(obj) { - if (Type(obj) !== 'Object') { - throw new $TypeError('Assertion failed: `obj` must be an Object'); - } - return ToLength(Get(obj, 'length')); -}; - -// TODO: use this all over diff --git a/build/node_modules/es-abstract/2020/MakeDate.js b/build/node_modules/es-abstract/2020/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/2020/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/2020/MakeDay.js b/build/node_modules/es-abstract/2020/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/2020/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/2020/MakeTime.js b/build/node_modules/es-abstract/2020/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/2020/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/2020/MinFromTime.js b/build/node_modules/es-abstract/2020/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/2020/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/2020/MonthFromTime.js b/build/node_modules/es-abstract/2020/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/2020/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/2020/Number/add.js b/build/node_modules/es-abstract/2020/Number/add.js deleted file mode 100644 index c2c20631..00000000 --- a/build/node_modules/es-abstract/2020/Number/add.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-add - -module.exports = function NumberAdd(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { - return NaN; - } - - if ((x === Infinity && y === Infinity) || (x === -Infinity && y === -Infinity)) { - return x; - } - - if (x === Infinity) { - return x; - } - - if (y === Infinity) { - return y; - } - - if (x === y && x === 0) { - return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; - } - - if (x === -y || -x === y) { - return +0; - } - - // shortcut for the actual spec mechanics - return x + y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/bitwiseAND.js b/build/node_modules/es-abstract/2020/Number/bitwiseAND.js deleted file mode 100644 index a7159802..00000000 --- a/build/node_modules/es-abstract/2020/Number/bitwiseAND.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var NumberBitwiseOp = require('../NumberBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND - -module.exports = function NumberBitwiseAND(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - return NumberBitwiseOp('&', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/Number/bitwiseNOT.js b/build/node_modules/es-abstract/2020/Number/bitwiseNOT.js deleted file mode 100644 index ae8032a7..00000000 --- a/build/node_modules/es-abstract/2020/Number/bitwiseNOT.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var ToInt32 = require('../ToInt32'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT - -module.exports = function NumberBitwiseNOT(x) { - if (Type(x) !== 'Number') { - throw new $TypeError('Assertion failed: `x` argument must be a Number'); - } - var oldValue = ToInt32(x); - // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. - return ~oldValue; -}; diff --git a/build/node_modules/es-abstract/2020/Number/bitwiseOR.js b/build/node_modules/es-abstract/2020/Number/bitwiseOR.js deleted file mode 100644 index c5e67b96..00000000 --- a/build/node_modules/es-abstract/2020/Number/bitwiseOR.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var NumberBitwiseOp = require('../NumberBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR - -module.exports = function NumberBitwiseOR(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - return NumberBitwiseOp('|', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/Number/bitwiseXOR.js b/build/node_modules/es-abstract/2020/Number/bitwiseXOR.js deleted file mode 100644 index a4030e9a..00000000 --- a/build/node_modules/es-abstract/2020/Number/bitwiseXOR.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var NumberBitwiseOp = require('../NumberBitwiseOp'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR - -module.exports = function NumberBitwiseXOR(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - return NumberBitwiseOp('^', x, y); -}; diff --git a/build/node_modules/es-abstract/2020/Number/divide.js b/build/node_modules/es-abstract/2020/Number/divide.js deleted file mode 100644 index 65244625..00000000 --- a/build/node_modules/es-abstract/2020/Number/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isFinite = require('../../helpers/isFinite'); -var isNaN = require('../../helpers/isNaN'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide - -module.exports = function NumberDivide(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { - return NaN; - } - // shortcut for the actual spec mechanics - return x / y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/equal.js b/build/node_modules/es-abstract/2020/Number/equal.js deleted file mode 100644 index db68afa4..00000000 --- a/build/node_modules/es-abstract/2020/Number/equal.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal - -module.exports = function NumberEqual(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - if (isNaN(x) || isNaN(y)) { - return false; - } - // shortcut for the actual spec mechanics - return x === y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/exponentiate.js b/build/node_modules/es-abstract/2020/Number/exponentiate.js deleted file mode 100644 index bafa7b11..00000000 --- a/build/node_modules/es-abstract/2020/Number/exponentiate.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -// var isNegativeZero = require('is-negative-zero'); - -var $pow = GetIntrinsic('%Math.pow%'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -/* -var abs = require('../../helpers/abs'); -var isFinite = require('../../helpers/isFinite'); -var isNaN = require('../../helpers/isNaN'); - -var IsInteger = require('../IsInteger'); -*/ -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate - -/* eslint max-lines-per-function: 0, max-statements: 0 */ - -module.exports = function NumberExponentiate(base, exponent) { - if (Type(base) !== 'Number' || Type(exponent) !== 'Number') { - throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); - } - return $pow(base, exponent); - /* - if (isNaN(exponent)) { - return NaN; - } - if (exponent === 0) { - return 1; - } - if (isNaN(base)) { - return NaN; - } - var aB = abs(base); - if (aB > 1 && exponent === Infinity) { - return Infinity; - } - if (aB > 1 && exponent === -Infinity) { - return 0; - } - if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { - return NaN; - } - if (aB < 1 && exponent === Infinity) { - return +0; - } - if (aB < 1 && exponent === -Infinity) { - return Infinity; - } - if (base === Infinity) { - return exponent > 0 ? Infinity : 0; - } - if (base === -Infinity) { - var isOdd = true; - if (exponent > 0) { - return isOdd ? -Infinity : Infinity; - } - return isOdd ? -0 : 0; - } - if (exponent > 0) { - return isNegativeZero(base) ? Infinity : 0; - } - if (isNegativeZero(base)) { - if (exponent > 0) { - return isOdd ? -0 : 0; - } - return isOdd ? -Infinity : Infinity; - } - if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { - return NaN; - } - */ -}; diff --git a/build/node_modules/es-abstract/2020/Number/index.js b/build/node_modules/es-abstract/2020/Number/index.js deleted file mode 100644 index 63ec52da..00000000 --- a/build/node_modules/es-abstract/2020/Number/index.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var add = require('./add'); -var bitwiseAND = require('./bitwiseAND'); -var bitwiseNOT = require('./bitwiseNOT'); -var bitwiseOR = require('./bitwiseOR'); -var bitwiseXOR = require('./bitwiseXOR'); -var divide = require('./divide'); -var equal = require('./equal'); -var exponentiate = require('./exponentiate'); -var leftShift = require('./leftShift'); -var lessThan = require('./lessThan'); -var multiply = require('./multiply'); -var remainder = require('./remainder'); -var sameValue = require('./sameValue'); -var sameValueZero = require('./sameValueZero'); -var signedRightShift = require('./signedRightShift'); -var subtract = require('./subtract'); -var toString = require('./toString'); -var unaryMinus = require('./unaryMinus'); -var unsignedRightShift = require('./unsignedRightShift'); - -module.exports = { - add: add, - bitwiseAND: bitwiseAND, - bitwiseNOT: bitwiseNOT, - bitwiseOR: bitwiseOR, - bitwiseXOR: bitwiseXOR, - divide: divide, - equal: equal, - exponentiate: exponentiate, - leftShift: leftShift, - lessThan: lessThan, - multiply: multiply, - remainder: remainder, - sameValue: sameValue, - sameValueZero: sameValueZero, - signedRightShift: signedRightShift, - subtract: subtract, - toString: toString, - unaryMinus: unaryMinus, - unsignedRightShift: unsignedRightShift -}; diff --git a/build/node_modules/es-abstract/2020/Number/leftShift.js b/build/node_modules/es-abstract/2020/Number/leftShift.js deleted file mode 100644 index 804fde4c..00000000 --- a/build/node_modules/es-abstract/2020/Number/leftShift.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var ToInt32 = require('../ToInt32'); -var ToUint32 = require('../ToUint32'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-leftShift - -module.exports = function NumberLeftShift(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - var lnum = ToInt32(x); - var rnum = ToUint32(y); - - var shiftCount = rnum & 0x1F; - - return lnum << shiftCount; -}; diff --git a/build/node_modules/es-abstract/2020/Number/lessThan.js b/build/node_modules/es-abstract/2020/Number/lessThan.js deleted file mode 100644 index 5fcac24e..00000000 --- a/build/node_modules/es-abstract/2020/Number/lessThan.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan - -module.exports = function NumberLessThan(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - // If x is NaN, return undefined. - // If y is NaN, return undefined. - if (isNaN(x) || isNaN(y)) { - return void undefined; - } - - // shortcut for the actual spec mechanics - return x < y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/multiply.js b/build/node_modules/es-abstract/2020/Number/multiply.js deleted file mode 100644 index 2a6c478a..00000000 --- a/build/node_modules/es-abstract/2020/Number/multiply.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply - -module.exports = function NumberMultiply(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { - return NaN; - } - if (!isFinite(x) && !isFinite(y)) { - return x === y ? Infinity : -Infinity; - } - if (!isFinite(x) && y !== 0) { - return x > 0 ? Infinity : -Infinity; - } - if (!isFinite(y) && x !== 0) { - return y > 0 ? Infinity : -Infinity; - } - - // shortcut for the actual spec mechanics - return x * y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/remainder.js b/build/node_modules/es-abstract/2020/Number/remainder.js deleted file mode 100644 index bc610640..00000000 --- a/build/node_modules/es-abstract/2020/Number/remainder.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-remainder - -module.exports = function NumberRemainder(n, d) { - if (Type(n) !== 'Number' || Type(d) !== 'Number') { - throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); - } - - // If either operand is NaN, the result is NaN. - // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. - if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { - return NaN; - } - - // If the dividend is finite and the divisor is an infinity, the result equals the dividend. - // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. - if (!isFinite(d) || (n === 0 && d !== 0)) { - return n; - } - - // In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved… - return n % d; -}; diff --git a/build/node_modules/es-abstract/2020/Number/sameValue.js b/build/node_modules/es-abstract/2020/Number/sameValue.js deleted file mode 100644 index 19efc379..00000000 --- a/build/node_modules/es-abstract/2020/Number/sameValue.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var isNegativeZero = require('is-negative-zero'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); -var NumberSameValueZero = require('./sameValueZero'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue - -module.exports = function NumberSameValue(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - if (x === 0 && y === 0) { - return !(isNegativeZero(x) ^ isNegativeZero(y)); - } - return NumberSameValueZero(x, y); -}; diff --git a/build/node_modules/es-abstract/2020/Number/sameValueZero.js b/build/node_modules/es-abstract/2020/Number/sameValueZero.js deleted file mode 100644 index 5688198f..00000000 --- a/build/node_modules/es-abstract/2020/Number/sameValueZero.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero - -module.exports = function NumberSameValueZero(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - var xNaN = isNaN(x); - var yNaN = isNaN(y); - if (xNaN || yNaN) { - return xNaN === yNaN; - } - return x === y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/signedRightShift.js b/build/node_modules/es-abstract/2020/Number/signedRightShift.js deleted file mode 100644 index 043ca893..00000000 --- a/build/node_modules/es-abstract/2020/Number/signedRightShift.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var ToInt32 = require('../ToInt32'); -var ToUint32 = require('../ToUint32'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-signedRightShift - -module.exports = function NumberSignedRightShift(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - var lnum = ToInt32(x); - var rnum = ToUint32(y); - - var shiftCount = rnum & 0x1F; - - return lnum >> shiftCount; -}; diff --git a/build/node_modules/es-abstract/2020/Number/subtract.js b/build/node_modules/es-abstract/2020/Number/subtract.js deleted file mode 100644 index 3ff2dd24..00000000 --- a/build/node_modules/es-abstract/2020/Number/subtract.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-subtract - -module.exports = function NumberSubtract(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - return x - y; -}; diff --git a/build/node_modules/es-abstract/2020/Number/toString.js b/build/node_modules/es-abstract/2020/Number/toString.js deleted file mode 100644 index 4f133160..00000000 --- a/build/node_modules/es-abstract/2020/Number/toString.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring - -module.exports = function NumberToString(x) { - if (Type(x) !== 'Number') { - throw new $TypeError('Assertion failed: `x` must be a Number'); - } - - return $String(x); -}; diff --git a/build/node_modules/es-abstract/2020/Number/unaryMinus.js b/build/node_modules/es-abstract/2020/Number/unaryMinus.js deleted file mode 100644 index 794582ad..00000000 --- a/build/node_modules/es-abstract/2020/Number/unaryMinus.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var isNaN = require('../../helpers/isNaN'); - -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus - -module.exports = function NumberUnaryMinus(x) { - if (Type(x) !== 'Number') { - throw new $TypeError('Assertion failed: `x` argument must be a Number'); - } - if (isNaN(x)) { - return NaN; - } - return -x; -}; diff --git a/build/node_modules/es-abstract/2020/Number/unsignedRightShift.js b/build/node_modules/es-abstract/2020/Number/unsignedRightShift.js deleted file mode 100644 index 874439ee..00000000 --- a/build/node_modules/es-abstract/2020/Number/unsignedRightShift.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var ToInt32 = require('../ToInt32'); -var ToUint32 = require('../ToUint32'); -var Type = require('../Type'); - -// https://262.ecma-international.org/11.0/#sec-numeric-types-number-unsignedRightShift - -module.exports = function NumberUnsignedRightShift(x, y) { - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - - var lnum = ToInt32(x); - var rnum = ToUint32(y); - - var shiftCount = rnum & 0x1F; - - return lnum >>> shiftCount; -}; diff --git a/build/node_modules/es-abstract/2020/NumberBitwiseOp.js b/build/node_modules/es-abstract/2020/NumberBitwiseOp.js deleted file mode 100644 index 11425ffd..00000000 --- a/build/node_modules/es-abstract/2020/NumberBitwiseOp.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var ToInt32 = require('./ToInt32'); -var ToUint32 = require('./ToUint32'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-numberbitwiseop - -module.exports = function NumberBitwiseOp(op, x, y) { - if (op !== '&' && op !== '|' && op !== '^') { - throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); - } - if (Type(x) !== 'Number' || Type(y) !== 'Number') { - throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); - } - var lnum = ToInt32(x); - var rnum = ToUint32(y); - if (op === '&') { - return lnum & rnum; - } - if (op === '|') { - return lnum | rnum; - } - return lnum ^ rnum; -}; diff --git a/build/node_modules/es-abstract/2020/NumberToBigInt.js b/build/node_modules/es-abstract/2020/NumberToBigInt.js deleted file mode 100644 index a186988c..00000000 --- a/build/node_modules/es-abstract/2020/NumberToBigInt.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $BigInt = GetIntrinsic('%BigInt%', true); -var $RangeError = GetIntrinsic('%RangeError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-numbertobigint - -module.exports = function NumberToBigInt(number) { - if (Type(number) !== 'Number') { - throw new $TypeError('Assertion failed: `number` must be a String'); - } - if (!IsInteger(number)) { - throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); - } - return $BigInt(number); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryCreateFromConstructor.js b/build/node_modules/es-abstract/2020/OrdinaryCreateFromConstructor.js deleted file mode 100644 index 8f3bb829..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryCreateFromConstructor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); -var IsArray = require('./IsArray'); -var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); - -// https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor - -module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { - GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic - var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); - var slots = arguments.length < 3 ? [] : arguments[2]; - if (!IsArray(slots)) { - throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); - } - return OrdinaryObjectCreate(proto, slots); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryDefineOwnProperty.js b/build/node_modules/es-abstract/2020/OrdinaryDefineOwnProperty.js deleted file mode 100644 index 5d33aa6d..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryDefineOwnProperty.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var IsPropertyKey = require('./IsPropertyKey'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); -var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty - -module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (!$gOPD) { - // ES3/IE 8 fallback - if (IsAccessorDescriptor(Desc)) { - throw new $SyntaxError('This environment does not support accessor property descriptors.'); - } - var creatingNormalDataProperty = !(P in O) - && Desc['[[Writable]]'] - && Desc['[[Enumerable]]'] - && Desc['[[Configurable]]'] - && '[[Value]]' in Desc; - var settingExistingDataProperty = (P in O) - && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) - && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) - && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) - && '[[Value]]' in Desc; - if (creatingNormalDataProperty || settingExistingDataProperty) { - O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign - return SameValue(O[P], Desc['[[Value]]']); - } - throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); - } - var desc = $gOPD(O, P); - var current = desc && ToPropertyDescriptor(desc); - var extensible = IsExtensible(O); - return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js b/build/node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js deleted file mode 100644 index 3d11e9fa..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -var has = require('has'); - -var IsArray = require('./IsArray'); -var IsPropertyKey = require('./IsPropertyKey'); -var IsRegExp = require('./IsRegExp'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty - -module.exports = function OrdinaryGetOwnProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - if (!has(O, P)) { - return void 0; - } - if (!$gOPD) { - // ES3 / IE 8 fallback - var arrayLength = IsArray(O) && P === 'length'; - var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; - return { - '[[Configurable]]': !(arrayLength || regexLastIndex), - '[[Enumerable]]': $isEnumerable(O, P), - '[[Value]]': O[P], - '[[Writable]]': true - }; - } - return ToPropertyDescriptor($gOPD(O, P)); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryGetPrototypeOf.js b/build/node_modules/es-abstract/2020/OrdinaryGetPrototypeOf.js deleted file mode 100644 index ba17b988..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryGetPrototypeOf.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $getProto = require('../helpers/getProto'); - -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof - -module.exports = function OrdinaryGetPrototypeOf(O) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: O must be an Object'); - } - if (!$getProto) { - throw new $TypeError('This environment does not support fetching prototypes.'); - } - return $getProto(O); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryHasInstance.js b/build/node_modules/es-abstract/2020/OrdinaryHasInstance.js deleted file mode 100644 index 85a240ca..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryHasInstance.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance - -module.exports = function OrdinaryHasInstance(C, O) { - if (IsCallable(C) === false) { - return false; - } - if (Type(O) !== 'Object') { - return false; - } - var P = Get(C, 'prototype'); - if (Type(P) !== 'Object') { - throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); - } - return O instanceof C; -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryHasProperty.js b/build/node_modules/es-abstract/2020/OrdinaryHasProperty.js deleted file mode 100644 index dd09ca3b..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryHasProperty.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty - -module.exports = function OrdinaryHasProperty(O, P) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: P must be a Property Key'); - } - return P in O; -}; diff --git a/build/node_modules/es-abstract/2020/OrdinaryObjectCreate.js b/build/node_modules/es-abstract/2020/OrdinaryObjectCreate.js deleted file mode 100644 index 34810cd1..00000000 --- a/build/node_modules/es-abstract/2020/OrdinaryObjectCreate.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $ObjectCreate = GetIntrinsic('%Object.create%', true); -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var IsArray = require('./IsArray'); -var Type = require('./Type'); - -var hasProto = !({ __proto__: null } instanceof Object); - -// https://262.ecma-international.org/6.0/#sec-objectcreate - -module.exports = function OrdinaryObjectCreate(proto) { - if (proto !== null && Type(proto) !== 'Object') { - throw new $TypeError('Assertion failed: `proto` must be null or an object'); - } - var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; - if (!IsArray(additionalInternalSlotsList)) { - throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); - } - // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; - if (additionalInternalSlotsList.length > 0) { - throw new $SyntaxError('es-abstract does not yet support internal slots'); - // internalSlotsList.push(...additionalInternalSlotsList); - } - // var O = MakeBasicObject(internalSlotsList); - // setProto(O, proto); - // return O; - - if ($ObjectCreate) { - return $ObjectCreate(proto); - } - if (hasProto) { - return { __proto__: proto }; - } - - if (proto === null) { - throw new $SyntaxError('native Object.create support is required to create null objects'); - } - var T = function T() {}; - T.prototype = proto; - return new T(); -}; diff --git a/build/node_modules/es-abstract/2020/OrdinarySetPrototypeOf.js b/build/node_modules/es-abstract/2020/OrdinarySetPrototypeOf.js deleted file mode 100644 index d0ff7a7c..00000000 --- a/build/node_modules/es-abstract/2020/OrdinarySetPrototypeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $setProto = require('../helpers/setProto'); - -var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); -var Type = require('./Type'); - -// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof - -module.exports = function OrdinarySetPrototypeOf(O, V) { - if (Type(V) !== 'Object' && Type(V) !== 'Null') { - throw new $TypeError('Assertion failed: V must be Object or Null'); - } - /* - var extensible = IsExtensible(O); - var current = OrdinaryGetPrototypeOf(O); - if (SameValue(V, current)) { - return true; - } - if (!extensible) { - return false; - } - */ - try { - $setProto(O, V); - } catch (e) { - return false; - } - return OrdinaryGetPrototypeOf(O) === V; - /* - var p = V; - var done = false; - while (!done) { - if (p === null) { - done = true; - } else if (SameValue(p, O)) { - return false; - } else { - if (wat) { - done = true; - } else { - p = p.[[Prototype]]; - } - } - } - O.[[Prototype]] = V; - return true; - */ -}; diff --git a/build/node_modules/es-abstract/2020/PromiseResolve.js b/build/node_modules/es-abstract/2020/PromiseResolve.js deleted file mode 100644 index 6474b79c..00000000 --- a/build/node_modules/es-abstract/2020/PromiseResolve.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBind = require('call-bind'); - -var $resolve = GetIntrinsic('%Promise.resolve%', true); -var $PromiseResolve = $resolve && callBind($resolve); - -// https://262.ecma-international.org/9.0/#sec-promise-resolve - -module.exports = function PromiseResolve(C, x) { - if (!$PromiseResolve) { - throw new SyntaxError('This environment does not support Promises.'); - } - return $PromiseResolve(C, x); -}; - diff --git a/build/node_modules/es-abstract/2020/QuoteJSONString.js b/build/node_modules/es-abstract/2020/QuoteJSONString.js deleted file mode 100644 index c7ac054e..00000000 --- a/build/node_modules/es-abstract/2020/QuoteJSONString.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var forEach = require('../helpers/forEach'); -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); - -var Type = require('./Type'); -var UnicodeEscape = require('./UnicodeEscape'); -var UTF16Encoding = require('./UTF16Encoding'); -var UTF16DecodeString = require('./UTF16DecodeString'); - -var has = require('has'); - -// https://262.ecma-international.org/11.0/#sec-quotejsonstring - -var escapes = { - '\u0008': '\\b', - '\u0009': '\\t', - '\u000A': '\\n', - '\u000C': '\\f', - '\u000D': '\\r', - '\u0022': '\\"', - '\u005c': '\\\\' -}; - -module.exports = function QuoteJSONString(value) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `value` must be a String'); - } - var product = '"'; - if (value) { - forEach(UTF16DecodeString(value), function (C) { - if (has(escapes, C)) { - product += escapes[C]; - } else { - var cCharCode = $charCodeAt(C, 0); - if (cCharCode < 0x20 || isLeadingSurrogate(C) || isTrailingSurrogate(C)) { - product += UnicodeEscape(C); - } else { - product += UTF16Encoding(cCharCode); - } - } - }); - } - product += '"'; - return product; -}; diff --git a/build/node_modules/es-abstract/2020/RegExpCreate.js b/build/node_modules/es-abstract/2020/RegExpCreate.js deleted file mode 100644 index 68e31605..00000000 --- a/build/node_modules/es-abstract/2020/RegExpCreate.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RegExp = GetIntrinsic('%RegExp%'); - -// var RegExpAlloc = require('./RegExpAlloc'); -// var RegExpInitialize = require('./RegExpInitialize'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/6.0/#sec-regexpcreate - -module.exports = function RegExpCreate(P, F) { - // var obj = RegExpAlloc($RegExp); - // return RegExpInitialize(obj, P, F); - - // covers spec mechanics; bypass regex brand checking - var pattern = typeof P === 'undefined' ? '' : ToString(P); - var flags = typeof F === 'undefined' ? '' : ToString(F); - return new $RegExp(pattern, flags); -}; diff --git a/build/node_modules/es-abstract/2020/RegExpExec.js b/build/node_modules/es-abstract/2020/RegExpExec.js deleted file mode 100644 index 29fee172..00000000 --- a/build/node_modules/es-abstract/2020/RegExpExec.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var regexExec = require('call-bind/callBound')('RegExp.prototype.exec'); - -var Call = require('./Call'); -var Get = require('./Get'); -var IsCallable = require('./IsCallable'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec - -module.exports = function RegExpExec(R, S) { - if (Type(R) !== 'Object') { - throw new $TypeError('Assertion failed: `R` must be an Object'); - } - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - var exec = Get(R, 'exec'); - if (IsCallable(exec)) { - var result = Call(exec, R, [S]); - if (result === null || Type(result) === 'Object') { - return result; - } - throw new $TypeError('"exec" method must return `null` or an Object'); - } - return regexExec(R, S); -}; diff --git a/build/node_modules/es-abstract/2020/RequireObjectCoercible.js b/build/node_modules/es-abstract/2020/RequireObjectCoercible.js deleted file mode 100644 index 9008359d..00000000 --- a/build/node_modules/es-abstract/2020/RequireObjectCoercible.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../5/CheckObjectCoercible'); diff --git a/build/node_modules/es-abstract/2020/SameValue.js b/build/node_modules/es-abstract/2020/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/2020/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/2020/SameValueNonNumeric.js b/build/node_modules/es-abstract/2020/SameValueNonNumeric.js deleted file mode 100644 index f7ef12c0..00000000 --- a/build/node_modules/es-abstract/2020/SameValueNonNumeric.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric - -module.exports = function SameValueNonNumeric(x, y) { - var xType = Type(x); - if (xType === 'Number' || xType === 'Bigint') { - throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values'); - } - if (xType !== Type(y)) { - throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.'); - } - return SameValue(x, y); -}; diff --git a/build/node_modules/es-abstract/2020/SameValueZero.js b/build/node_modules/es-abstract/2020/SameValueZero.js deleted file mode 100644 index bf1a1486..00000000 --- a/build/node_modules/es-abstract/2020/SameValueZero.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero - -module.exports = function SameValueZero(x, y) { - return (x === y) || ($isNaN(x) && $isNaN(y)); -}; diff --git a/build/node_modules/es-abstract/2020/SecFromTime.js b/build/node_modules/es-abstract/2020/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/2020/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/2020/Set.js b/build/node_modules/es-abstract/2020/Set.js deleted file mode 100644 index ea49e813..00000000 --- a/build/node_modules/es-abstract/2020/Set.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - return false; - } -}()); - -// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw - -module.exports = function Set(O, P, V, Throw) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: `O` must be an Object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: `P` must be a Property Key'); - } - if (Type(Throw) !== 'Boolean') { - throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); - } - if (Throw) { - O[P] = V; // eslint-disable-line no-param-reassign - if (noThrowOnStrictViolation && !SameValue(O[P], V)) { - throw new $TypeError('Attempted to assign to readonly property.'); - } - return true; - } else { - try { - O[P] = V; // eslint-disable-line no-param-reassign - return noThrowOnStrictViolation ? SameValue(O[P], V) : true; - } catch (e) { - return false; - } - } -}; diff --git a/build/node_modules/es-abstract/2020/SetFunctionLength.js b/build/node_modules/es-abstract/2020/SetFunctionLength.js deleted file mode 100644 index a471b0c4..00000000 --- a/build/node_modules/es-abstract/2020/SetFunctionLength.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var HasOwnProperty = require('./HasOwnProperty'); -var IsExtensible = require('./IsExtensible'); -var IsNonNegativeInteger = require('./IsNonNegativeInteger'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-setfunctionlength - -module.exports = function SetFunctionLength(F, length) { - if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { - throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); - } - if (Type(length) !== 'Number') { - throw new $TypeError('Assertion failed: `length` must be a Number'); - } - if (!IsNonNegativeInteger(length)) { - throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); - } - return DefinePropertyOrThrow(F, 'length', { - '[[Configurable]]': true, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); -}; diff --git a/build/node_modules/es-abstract/2020/SetFunctionName.js b/build/node_modules/es-abstract/2020/SetFunctionName.js deleted file mode 100644 index f59cb7b9..00000000 --- a/build/node_modules/es-abstract/2020/SetFunctionName.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var getSymbolDescription = require('../helpers/getSymbolDescription'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsExtensible = require('./IsExtensible'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname - -module.exports = function SetFunctionName(F, name) { - if (typeof F !== 'function') { - throw new $TypeError('Assertion failed: `F` must be a function'); - } - if (!IsExtensible(F) || has(F, 'name')) { - throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); - } - var nameType = Type(name); - if (nameType !== 'Symbol' && nameType !== 'String') { - throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); - } - if (nameType === 'Symbol') { - var description = getSymbolDescription(name); - // eslint-disable-next-line no-param-reassign - name = typeof description === 'undefined' ? '' : '[' + description + ']'; - } - if (arguments.length > 2) { - var prefix = arguments[2]; - // eslint-disable-next-line no-param-reassign - name = prefix + ' ' + name; - } - return DefinePropertyOrThrow(F, 'name', { - '[[Value]]': name, - '[[Writable]]': false, - '[[Enumerable]]': false, - '[[Configurable]]': true - }); -}; diff --git a/build/node_modules/es-abstract/2020/SetIntegrityLevel.js b/build/node_modules/es-abstract/2020/SetIntegrityLevel.js deleted file mode 100644 index 1ac7d61e..00000000 --- a/build/node_modules/es-abstract/2020/SetIntegrityLevel.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); -var $preventExtensions = GetIntrinsic('%Object.preventExtensions%'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); - -var forEach = require('../helpers/forEach'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel - -module.exports = function SetIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - if (!$preventExtensions) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); - } - var status = $preventExtensions(O); - if (!status) { - return false; - } - if (!$gOPN) { - throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); - } - var theKeys = $gOPN(O); - if (level === 'sealed') { - forEach(theKeys, function (k) { - DefinePropertyOrThrow(O, k, { configurable: false }); - }); - } else if (level === 'frozen') { - forEach(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - var desc; - if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { - desc = { configurable: false }; - } else { - desc = { configurable: false, writable: false }; - } - DefinePropertyOrThrow(O, k, desc); - } - }); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2020/SpeciesConstructor.js b/build/node_modules/es-abstract/2020/SpeciesConstructor.js deleted file mode 100644 index 491eb9b8..00000000 --- a/build/node_modules/es-abstract/2020/SpeciesConstructor.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $species = GetIntrinsic('%Symbol.species%', true); -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsConstructor = require('./IsConstructor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor - -module.exports = function SpeciesConstructor(O, defaultConstructor) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (Type(C) !== 'Object') { - throw new $TypeError('O.constructor is not an Object'); - } - var S = $species ? C[$species] : void 0; - if (S == null) { - return defaultConstructor; - } - if (IsConstructor(S)) { - return S; - } - throw new $TypeError('no constructor found'); -}; diff --git a/build/node_modules/es-abstract/2020/SplitMatch.js b/build/node_modules/es-abstract/2020/SplitMatch.js deleted file mode 100644 index 8ab05355..00000000 --- a/build/node_modules/es-abstract/2020/SplitMatch.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var IsInteger = require('./IsInteger'); -var Type = require('./Type'); - -var $charAt = callBound('String.prototype.charAt'); - -// https://262.ecma-international.org/6.0/#sec-splitmatch - -module.exports = function SplitMatch(S, q, R) { - if (Type(S) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - if (!IsInteger(q)) { - throw new $TypeError('Assertion failed: `q` must be an integer'); - } - if (Type(R) !== 'String') { - throw new $TypeError('Assertion failed: `R` must be a String'); - } - var r = R.length; - var s = S.length; - if (q + r > s) { - return false; - } - - for (var i = 0; i < r; i += 1) { - if ($charAt(S, q + i) !== $charAt(R, i)) { - return false; - } - } - - return q + r; -}; diff --git a/build/node_modules/es-abstract/2020/StrictEqualityComparison.js b/build/node_modules/es-abstract/2020/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/2020/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/2020/StringCreate.js b/build/node_modules/es-abstract/2020/StringCreate.js deleted file mode 100644 index da0c0ea0..00000000 --- a/build/node_modules/es-abstract/2020/StringCreate.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); -var $StringPrototype = GetIntrinsic('%String.prototype%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); -var Type = require('./Type'); - -var setProto = require('../helpers/setProto'); - -// https://262.ecma-international.org/6.0/#sec-stringcreate - -module.exports = function StringCreate(value, prototype) { - if (Type(value) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a String'); - } - - var S = $Object(value); - if (S !== $StringPrototype) { - if (setProto) { - setProto(S, prototype); - } else { - throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); - } - } - - var length = value.length; - DefinePropertyOrThrow(S, 'length', { - '[[Configurable]]': false, - '[[Enumerable]]': false, - '[[Value]]': length, - '[[Writable]]': false - }); - - return S; -}; diff --git a/build/node_modules/es-abstract/2020/StringGetOwnProperty.js b/build/node_modules/es-abstract/2020/StringGetOwnProperty.js deleted file mode 100644 index b6f904ec..00000000 --- a/build/node_modules/es-abstract/2020/StringGetOwnProperty.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); -var $charAt = callBound('String.prototype.charAt'); -var $stringToString = callBound('String.prototype.toString'); - -var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); -var IsInteger = require('./IsInteger'); -var IsPropertyKey = require('./IsPropertyKey'); -var Type = require('./Type'); - -var isNegativeZero = require('is-negative-zero'); - -// https://262.ecma-international.org/8.0/#sec-stringgetownproperty - -module.exports = function StringGetOwnProperty(S, P) { - var str; - if (Type(S) === 'Object') { - try { - str = $stringToString(S); - } catch (e) { /**/ } - } - if (Type(str) !== 'String') { - throw new $TypeError('Assertion failed: `S` must be a boxed string object'); - } - if (!IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); - } - if (Type(P) !== 'String') { - return void undefined; - } - var index = CanonicalNumericIndexString(P); - var len = str.length; - if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { - return void undefined; - } - var resultStr = $charAt(S, index); - return { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': resultStr, - '[[Writable]]': false - }; -}; diff --git a/build/node_modules/es-abstract/2020/StringPad.js b/build/node_modules/es-abstract/2020/StringPad.js deleted file mode 100644 index cdf69001..00000000 --- a/build/node_modules/es-abstract/2020/StringPad.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var ToLength = require('./ToLength'); -var ToString = require('./ToString'); - -var $strSlice = callBound('String.prototype.slice'); - -// https://262.ecma-international.org/11.0/#sec-stringpad - -module.exports = function StringPad(O, maxLength, fillString, placement) { - if (placement !== 'start' && placement !== 'end') { - throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); - } - var S = ToString(O); - var intMaxLength = ToLength(maxLength); - var stringLength = S.length; - if (intMaxLength <= stringLength) { - return S; - } - var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); - if (filler === '') { - return S; - } - var fillLen = intMaxLength - stringLength; - - // the String value consisting of repeated concatenations of filler truncated to length fillLen. - var truncatedStringFiller = ''; - while (truncatedStringFiller.length < fillLen) { - truncatedStringFiller += filler; - } - truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); - - if (placement === 'start') { - return truncatedStringFiller + S; - } - return S + truncatedStringFiller; -}; diff --git a/build/node_modules/es-abstract/2020/SymbolDescriptiveString.js b/build/node_modules/es-abstract/2020/SymbolDescriptiveString.js deleted file mode 100644 index 1efd1316..00000000 --- a/build/node_modules/es-abstract/2020/SymbolDescriptiveString.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $SymbolToString = callBound('Symbol.prototype.toString', true); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring - -module.exports = function SymbolDescriptiveString(sym) { - if (Type(sym) !== 'Symbol') { - throw new $TypeError('Assertion failed: `sym` must be a Symbol'); - } - return $SymbolToString(sym); -}; diff --git a/build/node_modules/es-abstract/2020/TestIntegrityLevel.js b/build/node_modules/es-abstract/2020/TestIntegrityLevel.js deleted file mode 100644 index cf1649c1..00000000 --- a/build/node_modules/es-abstract/2020/TestIntegrityLevel.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var every = require('../helpers/every'); - -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsExtensible = require('./IsExtensible'); -var ToPropertyDescriptor = require('./ToPropertyDescriptor'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel - -module.exports = function TestIntegrityLevel(O, level) { - if (Type(O) !== 'Object') { - throw new $TypeError('Assertion failed: Type(O) is not Object'); - } - if (level !== 'sealed' && level !== 'frozen') { - throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); - } - var status = IsExtensible(O); - if (status) { - return false; - } - var theKeys = $gOPN(O); - return theKeys.length === 0 || every(theKeys, function (k) { - var currentDesc = $gOPD(O, k); - if (typeof currentDesc !== 'undefined') { - if (currentDesc.configurable) { - return false; - } - if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { - return false; - } - } - return true; - }); -}; diff --git a/build/node_modules/es-abstract/2020/TimeClip.js b/build/node_modules/es-abstract/2020/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/2020/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/2020/TimeFromYear.js b/build/node_modules/es-abstract/2020/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/2020/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/2020/TimeString.js b/build/node_modules/es-abstract/2020/TimeString.js deleted file mode 100644 index 051c4728..00000000 --- a/build/node_modules/es-abstract/2020/TimeString.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var padTimeComponent = require('../helpers/padTimeComponent'); - -var HourFromTime = require('./HourFromTime'); -var MinFromTime = require('./MinFromTime'); -var SecFromTime = require('./SecFromTime'); -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-timestring - -module.exports = function TimeString(tv) { - if (Type(tv) !== 'Number' || $isNaN(tv)) { - throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); - } - var hour = HourFromTime(tv); - var minute = MinFromTime(tv); - var second = SecFromTime(tv); - return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; -}; diff --git a/build/node_modules/es-abstract/2020/TimeWithinDay.js b/build/node_modules/es-abstract/2020/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/2020/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/2020/ToBoolean.js b/build/node_modules/es-abstract/2020/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/2020/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/2020/ToDateString.js b/build/node_modules/es-abstract/2020/ToDateString.js deleted file mode 100644 index e636a9ba..00000000 --- a/build/node_modules/es-abstract/2020/ToDateString.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Date = GetIntrinsic('%Date%'); - -var $isNaN = require('../helpers/isNaN'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-todatestring - -module.exports = function ToDateString(tv) { - if (Type(tv) !== 'Number') { - throw new $TypeError('Assertion failed: `tv` must be a Number'); - } - if ($isNaN(tv)) { - return 'Invalid Date'; - } - return $Date(tv); -}; diff --git a/build/node_modules/es-abstract/2020/ToIndex.js b/build/node_modules/es-abstract/2020/ToIndex.js deleted file mode 100644 index c0185d15..00000000 --- a/build/node_modules/es-abstract/2020/ToIndex.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $RangeError = GetIntrinsic('%RangeError%'); - -var ToInteger = require('./ToInteger'); -var ToLength = require('./ToLength'); -var SameValue = require('./SameValue'); - -// https://262.ecma-international.org/12.0/#sec-toindex - -module.exports = function ToIndex(value) { - if (typeof value === 'undefined') { - return 0; - } - var integerIndex = ToInteger(value); - if (integerIndex < 0) { - throw new $RangeError('index must be >= 0'); - } - var index = ToLength(integerIndex); - if (!SameValue(integerIndex, index)) { - throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); - } - return index; -}; diff --git a/build/node_modules/es-abstract/2020/ToInt16.js b/build/node_modules/es-abstract/2020/ToInt16.js deleted file mode 100644 index cb8e7934..00000000 --- a/build/node_modules/es-abstract/2020/ToInt16.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint16 = require('./ToUint16'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint16 - -module.exports = function ToInt16(argument) { - var int16bit = ToUint16(argument); - return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; -}; diff --git a/build/node_modules/es-abstract/2020/ToInt32.js b/build/node_modules/es-abstract/2020/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/2020/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/2020/ToInt8.js b/build/node_modules/es-abstract/2020/ToInt8.js deleted file mode 100644 index bc452d82..00000000 --- a/build/node_modules/es-abstract/2020/ToInt8.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var ToUint8 = require('./ToUint8'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toint8 - -module.exports = function ToInt8(argument) { - var int8bit = ToUint8(argument); - return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; -}; diff --git a/build/node_modules/es-abstract/2020/ToInteger.js b/build/node_modules/es-abstract/2020/ToInteger.js deleted file mode 100644 index 9210af89..00000000 --- a/build/node_modules/es-abstract/2020/ToInteger.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var ES5ToInteger = require('../5/ToInteger'); - -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/11.0/#sec-tointeger - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - if (number !== 0) { - number = ES5ToInteger(number); - } - return number === 0 ? 0 : number; -}; diff --git a/build/node_modules/es-abstract/2020/ToLength.js b/build/node_modules/es-abstract/2020/ToLength.js deleted file mode 100644 index 1bef9bed..00000000 --- a/build/node_modules/es-abstract/2020/ToLength.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); - -var ToInteger = require('./ToInteger'); - -module.exports = function ToLength(argument) { - var len = ToInteger(argument); - if (len <= 0) { return 0; } // includes converting -0 to +0 - if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } - return len; -}; diff --git a/build/node_modules/es-abstract/2020/ToNumber.js b/build/node_modules/es-abstract/2020/ToNumber.js deleted file mode 100644 index fcddeb66..00000000 --- a/build/node_modules/es-abstract/2020/ToNumber.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $Number = GetIntrinsic('%Number%'); -var $RegExp = GetIntrinsic('%RegExp%'); -var $parseInteger = GetIntrinsic('%parseInt%'); - -var callBound = require('call-bind/callBound'); -var regexTester = require('../helpers/regexTester'); -var isPrimitive = require('../helpers/isPrimitive'); - -var $strSlice = callBound('String.prototype.slice'); -var isBinary = regexTester(/^0b[01]+$/i); -var isOctal = regexTester(/^0o[0-7]+$/i); -var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); -var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); -var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); -var hasNonWS = regexTester(nonWSregex); - -// whitespace from: https://es5.github.io/#x15.5.4.20 -// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 -var ws = [ - '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', - '\u2029\uFEFF' -].join(''); -var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); -var $replace = callBound('String.prototype.replace'); -var $trim = function (value) { - return $replace(value, trimRegex, ''); -}; - -var ToPrimitive = require('./ToPrimitive'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tonumber - -module.exports = function ToNumber(argument) { - var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (typeof value === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a number'); - } - if (typeof value === 'bigint') { - throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); - } - if (typeof value === 'string') { - if (isBinary(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 2)); - } else if (isOctal(value)) { - return ToNumber($parseInteger($strSlice(value, 2), 8)); - } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { - return NaN; - } else { - var trimmed = $trim(value); - if (trimmed !== value) { - return ToNumber(trimmed); - } - } - } - return $Number(value); -}; diff --git a/build/node_modules/es-abstract/2020/ToNumeric.js b/build/node_modules/es-abstract/2020/ToNumeric.js deleted file mode 100644 index c1877609..00000000 --- a/build/node_modules/es-abstract/2020/ToNumeric.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); - -var isPrimitive = require('../helpers/isPrimitive'); - -var ToPrimitive = require('./ToPrimitive'); -var ToNumber = require('./ToNumber'); -var Type = require('./Type'); - -// https://262.ecma-international.org/6.0/#sec-tonumber - -module.exports = function ToNumeric(argument) { - var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); - if (Type(primValue) === 'BigInt') { - return primValue; - } - return ToNumber(primValue); -}; diff --git a/build/node_modules/es-abstract/2020/ToObject.js b/build/node_modules/es-abstract/2020/ToObject.js deleted file mode 100644 index cb26bac0..00000000 --- a/build/node_modules/es-abstract/2020/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toobject - -module.exports = function ToObject(value) { - RequireObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/2020/ToPrimitive.js b/build/node_modules/es-abstract/2020/ToPrimitive.js deleted file mode 100644 index 0fbe9b80..00000000 --- a/build/node_modules/es-abstract/2020/ToPrimitive.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var toPrimitive = require('es-to-primitive/es2015'); - -// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive - -module.exports = function ToPrimitive(input) { - if (arguments.length > 1) { - return toPrimitive(input, arguments[1]); - } - return toPrimitive(input); -}; diff --git a/build/node_modules/es-abstract/2020/ToPropertyDescriptor.js b/build/node_modules/es-abstract/2020/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/2020/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/2020/ToPropertyKey.js b/build/node_modules/es-abstract/2020/ToPropertyKey.js deleted file mode 100644 index fc1bf7d8..00000000 --- a/build/node_modules/es-abstract/2020/ToPropertyKey.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -var ToPrimitive = require('./ToPrimitive'); -var ToString = require('./ToString'); - -// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey - -module.exports = function ToPropertyKey(argument) { - var key = ToPrimitive(argument, $String); - return typeof key === 'symbol' ? key : ToString(key); -}; diff --git a/build/node_modules/es-abstract/2020/ToString.js b/build/node_modules/es-abstract/2020/ToString.js deleted file mode 100644 index 4d494e1e..00000000 --- a/build/node_modules/es-abstract/2020/ToString.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -// https://ecma-international.org/ecma-262/6.0/#sec-tostring - -module.exports = function ToString(argument) { - if (typeof argument === 'symbol') { - throw new $TypeError('Cannot convert a Symbol value to a string'); - } - return $String(argument); -}; diff --git a/build/node_modules/es-abstract/2020/ToUint16.js b/build/node_modules/es-abstract/2020/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/2020/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/2020/ToUint32.js b/build/node_modules/es-abstract/2020/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/2020/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/2020/ToUint8.js b/build/node_modules/es-abstract/2020/ToUint8.js deleted file mode 100644 index 2dfd97cb..00000000 --- a/build/node_modules/es-abstract/2020/ToUint8.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8 - -module.exports = function ToUint8(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x100); -}; diff --git a/build/node_modules/es-abstract/2020/ToUint8Clamp.js b/build/node_modules/es-abstract/2020/ToUint8Clamp.js deleted file mode 100644 index b0b8ce8e..00000000 --- a/build/node_modules/es-abstract/2020/ToUint8Clamp.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var floor = require('./floor'); - -var $isNaN = require('../helpers/isNaN'); - -// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp - -module.exports = function ToUint8Clamp(argument) { - var number = ToNumber(argument); - if ($isNaN(number) || number <= 0) { return 0; } - if (number >= 0xFF) { return 0xFF; } - var f = floor(argument); - if (f + 0.5 < number) { return f + 1; } - if (number < f + 0.5) { return f; } - if (f % 2 !== 0) { return f + 1; } - return f; -}; diff --git a/build/node_modules/es-abstract/2020/TrimString.js b/build/node_modules/es-abstract/2020/TrimString.js deleted file mode 100644 index 113dcf82..00000000 --- a/build/node_modules/es-abstract/2020/TrimString.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var trimStart = require('string.prototype.trimstart'); -var trimEnd = require('string.prototype.trimend'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var RequireObjectCoercible = require('./RequireObjectCoercible'); -var ToString = require('./ToString'); - -// https://262.ecma-international.org/10.0/#sec-trimstring - -module.exports = function TrimString(string, where) { - var str = RequireObjectCoercible(string); - var S = ToString(str); - var T; - if (where === 'start') { - T = trimStart(S); - } else if (where === 'end') { - T = trimEnd(S); - } else if (where === 'start+end') { - T = trimStart(trimEnd(S)); - } else { - throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); - } - return T; -}; diff --git a/build/node_modules/es-abstract/2020/Type.js b/build/node_modules/es-abstract/2020/Type.js deleted file mode 100644 index 555ca74e..00000000 --- a/build/node_modules/es-abstract/2020/Type.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var ES5Type = require('../5/Type'); - -// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values - -module.exports = function Type(x) { - if (typeof x === 'symbol') { - return 'Symbol'; - } - if (typeof x === 'bigint') { - return 'BigInt'; - } - return ES5Type(x); -}; diff --git a/build/node_modules/es-abstract/2020/UTF16DecodeString.js b/build/node_modules/es-abstract/2020/UTF16DecodeString.js deleted file mode 100644 index 8e27a21e..00000000 --- a/build/node_modules/es-abstract/2020/UTF16DecodeString.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $push = callBound('Array.prototype.push'); - -var CodePointAt = require('./CodePointAt'); -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodestring - -module.exports = function UTF16DecodeString(string) { - if (Type(string) !== 'String') { - throw new $TypeError('Assertion failed: `string` must be a String'); - } - var codePoints = []; - var size = string.length; - var position = 0; - while (position < size) { - var cp = CodePointAt(string, position); - $push(codePoints, cp['[[CodePoint]]']); - position += cp['[[CodeUnitCount]]']; - } - return codePoints; -}; diff --git a/build/node_modules/es-abstract/2020/UTF16DecodeSurrogatePair.js b/build/node_modules/es-abstract/2020/UTF16DecodeSurrogatePair.js deleted file mode 100644 index 2632e654..00000000 --- a/build/node_modules/es-abstract/2020/UTF16DecodeSurrogatePair.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); -var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); - -// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair - -module.exports = function UTF16DecodeSurrogatePair(lead, trail) { - if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { - throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); - } - // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - return $fromCharCode(lead) + $fromCharCode(trail); -}; diff --git a/build/node_modules/es-abstract/2020/UTF16Encoding.js b/build/node_modules/es-abstract/2020/UTF16Encoding.js deleted file mode 100644 index f381595f..00000000 --- a/build/node_modules/es-abstract/2020/UTF16Encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var isCodePoint = require('../helpers/isCodePoint'); - -// https://262.ecma-international.org/7.0/#sec-utf16encoding - -module.exports = function UTF16Encoding(cp) { - if (!isCodePoint(cp)) { - throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); - } - if (cp <= 65535) { - return $fromCharCode(cp); - } - var cu1 = floor((cp - 65536) / 1024) + 0xD800; - var cu2 = modulo(cp - 65536, 1024) + 0xDC00; - return $fromCharCode(cu1) + $fromCharCode(cu2); -}; diff --git a/build/node_modules/es-abstract/2020/UnicodeEscape.js b/build/node_modules/es-abstract/2020/UnicodeEscape.js deleted file mode 100644 index b708c90d..00000000 --- a/build/node_modules/es-abstract/2020/UnicodeEscape.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var callBound = require('call-bind/callBound'); - -var $charCodeAt = callBound('String.prototype.charCodeAt'); -var $numberToString = callBound('Number.prototype.toString'); -var $toLowerCase = callBound('String.prototype.toLowerCase'); - -var StringPad = require('./StringPad'); - -// https://262.ecma-international.org/11.0/#sec-unicodeescape - -module.exports = function UnicodeEscape(C) { - if (typeof C !== 'string' || C.length !== 1) { - throw new $TypeError('Assertion failed: `C` must be a single code unit'); - } - var n = $charCodeAt(C, 0); - if (n > 0xFFFF) { - throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); - } - - return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); -}; diff --git a/build/node_modules/es-abstract/2020/ValidateAndApplyPropertyDescriptor.js b/build/node_modules/es-abstract/2020/ValidateAndApplyPropertyDescriptor.js deleted file mode 100644 index a7fd218a..00000000 --- a/build/node_modules/es-abstract/2020/ValidateAndApplyPropertyDescriptor.js +++ /dev/null @@ -1,170 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var DefineOwnProperty = require('../helpers/DefineOwnProperty'); -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); -var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); - -var FromPropertyDescriptor = require('./FromPropertyDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsGenericDescriptor = require('./IsGenericDescriptor'); -var IsPropertyKey = require('./IsPropertyKey'); -var SameValue = require('./SameValue'); -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor -// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor - -// eslint-disable-next-line max-lines-per-function, max-statements, max-params -module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { - // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. - var oType = Type(O); - if (oType !== 'Undefined' && oType !== 'Object') { - throw new $TypeError('Assertion failed: O must be undefined or an Object'); - } - if (Type(extensible) !== 'Boolean') { - throw new $TypeError('Assertion failed: extensible must be a Boolean'); - } - if (!isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, Desc)) { - throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); - } - if (Type(current) !== 'Undefined' && !isPropertyDescriptor({ - Type: Type, - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor - }, current)) { - throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); - } - if (oType !== 'Undefined' && !IsPropertyKey(P)) { - throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); - } - if (Type(current) === 'Undefined') { - if (!extensible) { - return false; - } - if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': Desc['[[Configurable]]'], - '[[Enumerable]]': Desc['[[Enumerable]]'], - '[[Value]]': Desc['[[Value]]'], - '[[Writable]]': Desc['[[Writable]]'] - } - ); - } - } else { - if (!IsAccessorDescriptor(Desc)) { - throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - } - return true; - } - if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { - return true; - } - if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { - return true; // removed by ES2017, but should still be correct - } - // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor - if (!current['[[Configurable]]']) { - if (Desc['[[Configurable]]']) { - return false; - } - if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { - return false; - } - } - if (IsGenericDescriptor(Desc)) { - // no further validation is required. - } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - return false; - } - if (IsDataDescriptor(current)) { - if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Get]]': undefined - } - ); - } - } else if (oType !== 'Undefined') { - DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - { - '[[Configurable]]': current['[[Configurable]]'], - '[[Enumerable]]': current['[[Enumerable]]'], - '[[Value]]': undefined - } - ); - } - } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { - if (!current['[[Configurable]]'] && !current['[[Writable]]']) { - if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { - return false; - } - if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { - return false; - } - return true; - } - } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { - if (!current['[[Configurable]]']) { - if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { - return false; - } - if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { - return false; - } - return true; - } - } else { - throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); - } - if (oType !== 'Undefined') { - return DefineOwnProperty( - IsDataDescriptor, - SameValue, - FromPropertyDescriptor, - O, - P, - Desc - ); - } - return true; -}; diff --git a/build/node_modules/es-abstract/2020/WeekDay.js b/build/node_modules/es-abstract/2020/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/2020/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/2020/YearFromTime.js b/build/node_modules/es-abstract/2020/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/2020/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/2020/abs.js b/build/node_modules/es-abstract/2020/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/2020/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/2020/floor.js b/build/node_modules/es-abstract/2020/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/2020/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/2020/modulo.js b/build/node_modules/es-abstract/2020/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/2020/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/2020/msFromTime.js b/build/node_modules/es-abstract/2020/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/2020/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/2020/thisBigIntValue.js b/build/node_modules/es-abstract/2020/thisBigIntValue.js deleted file mode 100644 index 1fd12980..00000000 --- a/build/node_modules/es-abstract/2020/thisBigIntValue.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); - -var Type = require('./Type'); - -// https://262.ecma-international.org/11.0/#sec-thisbigintvalue - -module.exports = function thisBigIntValue(value) { - var type = Type(value); - if (type === 'BigInt') { - return value; - } - if (!$bigIntValueOf) { - throw new $TypeError('BigInt is not supported'); - } - return $bigIntValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2020/thisBooleanValue.js b/build/node_modules/es-abstract/2020/thisBooleanValue.js deleted file mode 100644 index 27075b9c..00000000 --- a/build/node_modules/es-abstract/2020/thisBooleanValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object - -module.exports = function thisBooleanValue(value) { - if (Type(value) === 'Boolean') { - return value; - } - - return $BooleanValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2020/thisNumberValue.js b/build/node_modules/es-abstract/2020/thisNumberValue.js deleted file mode 100644 index 92968dcd..00000000 --- a/build/node_modules/es-abstract/2020/thisNumberValue.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var Type = require('./Type'); - -var $NumberValueOf = callBound('Number.prototype.valueOf'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object - -module.exports = function thisNumberValue(value) { - if (Type(value) === 'Number') { - return value; - } - - return $NumberValueOf(value); -}; - diff --git a/build/node_modules/es-abstract/2020/thisStringValue.js b/build/node_modules/es-abstract/2020/thisStringValue.js deleted file mode 100644 index 8e4274d8..00000000 --- a/build/node_modules/es-abstract/2020/thisStringValue.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf'); - -var Type = require('./Type'); - -// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object - -module.exports = function thisStringValue(value) { - if (Type(value) === 'String') { - return value; - } - - return $StringValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2020/thisSymbolValue.js b/build/node_modules/es-abstract/2020/thisSymbolValue.js deleted file mode 100644 index 91a55254..00000000 --- a/build/node_modules/es-abstract/2020/thisSymbolValue.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); - -var Type = require('./Type'); - -// https://262.ecma-international.org/9.0/#sec-thissymbolvalue - -module.exports = function thisSymbolValue(value) { - if (!$SymbolValueOf) { - throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); - } - if (Type(value) === 'Symbol') { - return value; - } - return $SymbolValueOf(value); -}; diff --git a/build/node_modules/es-abstract/2020/thisTimeValue.js b/build/node_modules/es-abstract/2020/thisTimeValue.js deleted file mode 100644 index a9a47ace..00000000 --- a/build/node_modules/es-abstract/2020/thisTimeValue.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../2018/thisTimeValue'); diff --git a/build/node_modules/es-abstract/5/AbstractEqualityComparison.js b/build/node_modules/es-abstract/5/AbstractEqualityComparison.js deleted file mode 100644 index 568bb409..00000000 --- a/build/node_modules/es-abstract/5/AbstractEqualityComparison.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.3 - -module.exports = function AbstractEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType === yType) { - return x === y; // ES6+ specified this shortcut anyways. - } - if (x == null && y == null) { - return true; - } - if (xType === 'Number' && yType === 'String') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if (xType === 'String' && yType === 'Number') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (xType === 'Boolean') { - return AbstractEqualityComparison(ToNumber(x), y); - } - if (yType === 'Boolean') { - return AbstractEqualityComparison(x, ToNumber(y)); - } - if ((xType === 'String' || xType === 'Number') && yType === 'Object') { - return AbstractEqualityComparison(x, ToPrimitive(y)); - } - if (xType === 'Object' && (yType === 'String' || yType === 'Number')) { - return AbstractEqualityComparison(ToPrimitive(x), y); - } - return false; -}; diff --git a/build/node_modules/es-abstract/5/AbstractRelationalComparison.js b/build/node_modules/es-abstract/5/AbstractRelationalComparison.js deleted file mode 100644 index 0dfed5ff..00000000 --- a/build/node_modules/es-abstract/5/AbstractRelationalComparison.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Number = GetIntrinsic('%Number%'); -var $TypeError = GetIntrinsic('%TypeError%'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var isPrefixOf = require('../helpers/isPrefixOf'); - -var ToNumber = require('./ToNumber'); -var ToPrimitive = require('./ToPrimitive'); -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.8.5 - -// eslint-disable-next-line max-statements -module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { - if (Type(LeftFirst) !== 'Boolean') { - throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); - } - var px; - var py; - if (LeftFirst) { - px = ToPrimitive(x, $Number); - py = ToPrimitive(y, $Number); - } else { - py = ToPrimitive(y, $Number); - px = ToPrimitive(x, $Number); - } - var bothStrings = Type(px) === 'String' && Type(py) === 'String'; - if (!bothStrings) { - var nx = ToNumber(px); - var ny = ToNumber(py); - if ($isNaN(nx) || $isNaN(ny)) { - return undefined; - } - if ($isFinite(nx) && $isFinite(ny) && nx === ny) { - return false; - } - if (nx === Infinity) { - return false; - } - if (ny === Infinity) { - return true; - } - if (ny === -Infinity) { - return false; - } - if (nx === -Infinity) { - return true; - } - return nx < ny; // by now, these are both nonzero, finite, and not equal - } - if (isPrefixOf(py, px)) { - return false; - } - if (isPrefixOf(px, py)) { - return true; - } - return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f -}; diff --git a/build/node_modules/es-abstract/5/CheckObjectCoercible.js b/build/node_modules/es-abstract/5/CheckObjectCoercible.js deleted file mode 100644 index 9083c717..00000000 --- a/build/node_modules/es-abstract/5/CheckObjectCoercible.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -// http://262.ecma-international.org/5.1/#sec-9.10 - -module.exports = function CheckObjectCoercible(value, optMessage) { - if (value == null) { - throw new $TypeError(optMessage || ('Cannot call method on ' + value)); - } - return value; -}; diff --git a/build/node_modules/es-abstract/5/DateFromTime.js b/build/node_modules/es-abstract/5/DateFromTime.js deleted file mode 100644 index 20e4f2e4..00000000 --- a/build/node_modules/es-abstract/5/DateFromTime.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); -var MonthFromTime = require('./MonthFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.5 - -module.exports = function DateFromTime(t) { - var m = MonthFromTime(t); - var d = DayWithinYear(t); - if (m === 0) { - return d + 1; - } - if (m === 1) { - return d - 30; - } - var leap = InLeapYear(t); - if (m === 2) { - return d - 58 - leap; - } - if (m === 3) { - return d - 89 - leap; - } - if (m === 4) { - return d - 119 - leap; - } - if (m === 5) { - return d - 150 - leap; - } - if (m === 6) { - return d - 180 - leap; - } - if (m === 7) { - return d - 211 - leap; - } - if (m === 8) { - return d - 242 - leap; - } - if (m === 9) { - return d - 272 - leap; - } - if (m === 10) { - return d - 303 - leap; - } - if (m === 11) { - return d - 333 - leap; - } - throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); -}; diff --git a/build/node_modules/es-abstract/5/Day.js b/build/node_modules/es-abstract/5/Day.js deleted file mode 100644 index 51d01033..00000000 --- a/build/node_modules/es-abstract/5/Day.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function Day(t) { - return floor(t / msPerDay); -}; diff --git a/build/node_modules/es-abstract/5/DayFromYear.js b/build/node_modules/es-abstract/5/DayFromYear.js deleted file mode 100644 index 341bf22a..00000000 --- a/build/node_modules/es-abstract/5/DayFromYear.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var floor = require('./floor'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DayFromYear(y) { - return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); -}; - diff --git a/build/node_modules/es-abstract/5/DayWithinYear.js b/build/node_modules/es-abstract/5/DayWithinYear.js deleted file mode 100644 index 4c580940..00000000 --- a/build/node_modules/es-abstract/5/DayWithinYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var DayFromYear = require('./DayFromYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function DayWithinYear(t) { - return Day(t) - DayFromYear(YearFromTime(t)); -}; diff --git a/build/node_modules/es-abstract/5/DaysInYear.js b/build/node_modules/es-abstract/5/DaysInYear.js deleted file mode 100644 index 7116c690..00000000 --- a/build/node_modules/es-abstract/5/DaysInYear.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function DaysInYear(y) { - if (modulo(y, 4) !== 0) { - return 365; - } - if (modulo(y, 100) !== 0) { - return 366; - } - if (modulo(y, 400) !== 0) { - return 365; - } - return 366; -}; diff --git a/build/node_modules/es-abstract/5/FromPropertyDescriptor.js b/build/node_modules/es-abstract/5/FromPropertyDescriptor.js deleted file mode 100644 index 506f65c3..00000000 --- a/build/node_modules/es-abstract/5/FromPropertyDescriptor.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); - -var assertRecord = require('../helpers/assertRecord'); - -// https://262.ecma-international.org/5.1/#sec-8.10.4 - -module.exports = function FromPropertyDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return Desc; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (IsDataDescriptor(Desc)) { - return { - value: Desc['[[Value]]'], - writable: !!Desc['[[Writable]]'], - enumerable: !!Desc['[[Enumerable]]'], - configurable: !!Desc['[[Configurable]]'] - }; - } else if (IsAccessorDescriptor(Desc)) { - return { - get: Desc['[[Get]]'], - set: Desc['[[Set]]'], - enumerable: !!Desc['[[Enumerable]]'], - configurable: !!Desc['[[Configurable]]'] - }; - } else { - throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor'); - } -}; diff --git a/build/node_modules/es-abstract/5/HourFromTime.js b/build/node_modules/es-abstract/5/HourFromTime.js deleted file mode 100644 index f963bfb6..00000000 --- a/build/node_modules/es-abstract/5/HourFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerHour = timeConstants.msPerHour; -var HoursPerDay = timeConstants.HoursPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function HourFromTime(t) { - return modulo(floor(t / msPerHour), HoursPerDay); -}; diff --git a/build/node_modules/es-abstract/5/InLeapYear.js b/build/node_modules/es-abstract/5/InLeapYear.js deleted file mode 100644 index bfe0c451..00000000 --- a/build/node_modules/es-abstract/5/InLeapYear.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $EvalError = GetIntrinsic('%EvalError%'); - -var DaysInYear = require('./DaysInYear'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function InLeapYear(t) { - var days = DaysInYear(YearFromTime(t)); - if (days === 365) { - return 0; - } - if (days === 366) { - return 1; - } - throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); -}; diff --git a/build/node_modules/es-abstract/5/IsAccessorDescriptor.js b/build/node_modules/es-abstract/5/IsAccessorDescriptor.js deleted file mode 100644 index da64a302..00000000 --- a/build/node_modules/es-abstract/5/IsAccessorDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var Type = require('./Type'); - -var assertRecord = require('../helpers/assertRecord'); - -// https://262.ecma-international.org/5.1/#sec-8.10.1 - -module.exports = function IsAccessorDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/5/IsCallable.js b/build/node_modules/es-abstract/5/IsCallable.js deleted file mode 100644 index 3a69b192..00000000 --- a/build/node_modules/es-abstract/5/IsCallable.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.11 - -module.exports = require('is-callable'); diff --git a/build/node_modules/es-abstract/5/IsDataDescriptor.js b/build/node_modules/es-abstract/5/IsDataDescriptor.js deleted file mode 100644 index 9db441e9..00000000 --- a/build/node_modules/es-abstract/5/IsDataDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var has = require('has'); - -var Type = require('./Type'); - -var assertRecord = require('../helpers/assertRecord'); - -// https://262.ecma-international.org/5.1/#sec-8.10.2 - -module.exports = function IsDataDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { - return false; - } - - return true; -}; diff --git a/build/node_modules/es-abstract/5/IsGenericDescriptor.js b/build/node_modules/es-abstract/5/IsGenericDescriptor.js deleted file mode 100644 index b47bfc33..00000000 --- a/build/node_modules/es-abstract/5/IsGenericDescriptor.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var Type = require('./Type'); - -var assertRecord = require('../helpers/assertRecord'); - -// https://262.ecma-international.org/5.1/#sec-8.10.3 - -module.exports = function IsGenericDescriptor(Desc) { - if (typeof Desc === 'undefined') { - return false; - } - - assertRecord(Type, 'Property Descriptor', 'Desc', Desc); - - if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { - return true; - } - - return false; -}; diff --git a/build/node_modules/es-abstract/5/IsPropertyDescriptor.js b/build/node_modules/es-abstract/5/IsPropertyDescriptor.js deleted file mode 100644 index 4cfe79bb..00000000 --- a/build/node_modules/es-abstract/5/IsPropertyDescriptor.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -// TODO, semver-major: delete this - -var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); - -var Type = require('./Type'); -var IsDataDescriptor = require('./IsDataDescriptor'); -var IsAccessorDescriptor = require('./IsAccessorDescriptor'); - -// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type - -module.exports = function IsPropertyDescriptor(Desc) { - return isPropertyDescriptor({ - IsDataDescriptor: IsDataDescriptor, - IsAccessorDescriptor: IsAccessorDescriptor, - Type: Type - }, Desc); -}; diff --git a/build/node_modules/es-abstract/5/MakeDate.js b/build/node_modules/es-abstract/5/MakeDate.js deleted file mode 100644 index efeb6452..00000000 --- a/build/node_modules/es-abstract/5/MakeDate.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.13 - -module.exports = function MakeDate(day, time) { - if (!$isFinite(day) || !$isFinite(time)) { - return NaN; - } - return (day * msPerDay) + time; -}; diff --git a/build/node_modules/es-abstract/5/MakeDay.js b/build/node_modules/es-abstract/5/MakeDay.js deleted file mode 100644 index 13f56863..00000000 --- a/build/node_modules/es-abstract/5/MakeDay.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $DateUTC = GetIntrinsic('%Date.UTC%'); - -var $isFinite = require('../helpers/isFinite'); - -var DateFromTime = require('./DateFromTime'); -var Day = require('./Day'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var MonthFromTime = require('./MonthFromTime'); -var ToInteger = require('./ToInteger'); -var YearFromTime = require('./YearFromTime'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.12 - -module.exports = function MakeDay(year, month, date) { - if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { - return NaN; - } - var y = ToInteger(year); - var m = ToInteger(month); - var dt = ToInteger(date); - var ym = y + floor(m / 12); - var mn = modulo(m, 12); - var t = $DateUTC(ym, mn, 1); - if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { - return NaN; - } - return Day(t) + dt - 1; -}; diff --git a/build/node_modules/es-abstract/5/MakeTime.js b/build/node_modules/es-abstract/5/MakeTime.js deleted file mode 100644 index 34cb4dcc..00000000 --- a/build/node_modules/es-abstract/5/MakeTime.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var $isFinite = require('../helpers/isFinite'); -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var msPerMinute = timeConstants.msPerMinute; -var msPerHour = timeConstants.msPerHour; - -var ToInteger = require('./ToInteger'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.11 - -module.exports = function MakeTime(hour, min, sec, ms) { - if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { - return NaN; - } - var h = ToInteger(hour); - var m = ToInteger(min); - var s = ToInteger(sec); - var milli = ToInteger(ms); - var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; - return t; -}; diff --git a/build/node_modules/es-abstract/5/MinFromTime.js b/build/node_modules/es-abstract/5/MinFromTime.js deleted file mode 100644 index a0c631d4..00000000 --- a/build/node_modules/es-abstract/5/MinFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerMinute = timeConstants.msPerMinute; -var MinutesPerHour = timeConstants.MinutesPerHour; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function MinFromTime(t) { - return modulo(floor(t / msPerMinute), MinutesPerHour); -}; diff --git a/build/node_modules/es-abstract/5/MonthFromTime.js b/build/node_modules/es-abstract/5/MonthFromTime.js deleted file mode 100644 index a482a7df..00000000 --- a/build/node_modules/es-abstract/5/MonthFromTime.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var DayWithinYear = require('./DayWithinYear'); -var InLeapYear = require('./InLeapYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.4 - -module.exports = function MonthFromTime(t) { - var day = DayWithinYear(t); - if (0 <= day && day < 31) { - return 0; - } - var leap = InLeapYear(t); - if (31 <= day && day < (59 + leap)) { - return 1; - } - if ((59 + leap) <= day && day < (90 + leap)) { - return 2; - } - if ((90 + leap) <= day && day < (120 + leap)) { - return 3; - } - if ((120 + leap) <= day && day < (151 + leap)) { - return 4; - } - if ((151 + leap) <= day && day < (181 + leap)) { - return 5; - } - if ((181 + leap) <= day && day < (212 + leap)) { - return 6; - } - if ((212 + leap) <= day && day < (243 + leap)) { - return 7; - } - if ((243 + leap) <= day && day < (273 + leap)) { - return 8; - } - if ((273 + leap) <= day && day < (304 + leap)) { - return 9; - } - if ((304 + leap) <= day && day < (334 + leap)) { - return 10; - } - if ((334 + leap) <= day && day < (365 + leap)) { - return 11; - } -}; diff --git a/build/node_modules/es-abstract/5/SameValue.js b/build/node_modules/es-abstract/5/SameValue.js deleted file mode 100644 index b73939b2..00000000 --- a/build/node_modules/es-abstract/5/SameValue.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $isNaN = require('../helpers/isNaN'); - -// http://262.ecma-international.org/5.1/#sec-9.12 - -module.exports = function SameValue(x, y) { - if (x === y) { // 0 === -0, but they are not identical. - if (x === 0) { return 1 / x === 1 / y; } - return true; - } - return $isNaN(x) && $isNaN(y); -}; diff --git a/build/node_modules/es-abstract/5/SecFromTime.js b/build/node_modules/es-abstract/5/SecFromTime.js deleted file mode 100644 index fc2e4456..00000000 --- a/build/node_modules/es-abstract/5/SecFromTime.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var floor = require('./floor'); -var modulo = require('./modulo'); - -var timeConstants = require('../helpers/timeConstants'); -var msPerSecond = timeConstants.msPerSecond; -var SecondsPerMinute = timeConstants.SecondsPerMinute; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function SecFromTime(t) { - return modulo(floor(t / msPerSecond), SecondsPerMinute); -}; diff --git a/build/node_modules/es-abstract/5/StrictEqualityComparison.js b/build/node_modules/es-abstract/5/StrictEqualityComparison.js deleted file mode 100644 index f3435ba9..00000000 --- a/build/node_modules/es-abstract/5/StrictEqualityComparison.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var Type = require('./Type'); - -// https://262.ecma-international.org/5.1/#sec-11.9.6 - -module.exports = function StrictEqualityComparison(x, y) { - var xType = Type(x); - var yType = Type(y); - if (xType !== yType) { - return false; - } - if (xType === 'Undefined' || xType === 'Null') { - return true; - } - return x === y; // shortcut for steps 4-7 -}; diff --git a/build/node_modules/es-abstract/5/TimeClip.js b/build/node_modules/es-abstract/5/TimeClip.js deleted file mode 100644 index e416cab4..00000000 --- a/build/node_modules/es-abstract/5/TimeClip.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); -var $Number = GetIntrinsic('%Number%'); - -var $isFinite = require('../helpers/isFinite'); - -var abs = require('./abs'); -var ToNumber = require('./ToNumber'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.14 - -module.exports = function TimeClip(time) { - if (!$isFinite(time) || abs(time) > 8.64e15) { - return NaN; - } - return $Number(new $Date(ToNumber(time))); -}; - diff --git a/build/node_modules/es-abstract/5/TimeFromYear.js b/build/node_modules/es-abstract/5/TimeFromYear.js deleted file mode 100644 index f3518a41..00000000 --- a/build/node_modules/es-abstract/5/TimeFromYear.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -var DayFromYear = require('./DayFromYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function TimeFromYear(y) { - return msPerDay * DayFromYear(y); -}; diff --git a/build/node_modules/es-abstract/5/TimeWithinDay.js b/build/node_modules/es-abstract/5/TimeWithinDay.js deleted file mode 100644 index 2bba8338..00000000 --- a/build/node_modules/es-abstract/5/TimeWithinDay.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerDay = require('../helpers/timeConstants').msPerDay; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.2 - -module.exports = function TimeWithinDay(t) { - return modulo(t, msPerDay); -}; - diff --git a/build/node_modules/es-abstract/5/ToBoolean.js b/build/node_modules/es-abstract/5/ToBoolean.js deleted file mode 100644 index 466404bf..00000000 --- a/build/node_modules/es-abstract/5/ToBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.2 - -module.exports = function ToBoolean(value) { return !!value; }; diff --git a/build/node_modules/es-abstract/5/ToInt32.js b/build/node_modules/es-abstract/5/ToInt32.js deleted file mode 100644 index b879ccc4..00000000 --- a/build/node_modules/es-abstract/5/ToInt32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.5 - -module.exports = function ToInt32(x) { - return ToNumber(x) >> 0; -}; diff --git a/build/node_modules/es-abstract/5/ToInteger.js b/build/node_modules/es-abstract/5/ToInteger.js deleted file mode 100644 index d1c9b616..00000000 --- a/build/node_modules/es-abstract/5/ToInteger.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.4 - -module.exports = function ToInteger(value) { - var number = ToNumber(value); - if ($isNaN(number)) { return 0; } - if (number === 0 || !$isFinite(number)) { return number; } - return $sign(number) * floor(abs(number)); -}; diff --git a/build/node_modules/es-abstract/5/ToNumber.js b/build/node_modules/es-abstract/5/ToNumber.js deleted file mode 100644 index 2bfc74ca..00000000 --- a/build/node_modules/es-abstract/5/ToNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var ToPrimitive = require('./ToPrimitive'); - -// http://262.ecma-international.org/5.1/#sec-9.3 - -module.exports = function ToNumber(value) { - var prim = ToPrimitive(value, Number); - if (typeof prim !== 'string') { - return +prim; // eslint-disable-line no-implicit-coercion - } - - // eslint-disable-next-line no-control-regex - var trimmed = prim.replace(/^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g, ''); - if ((/^0[ob]|^[+-]0x/).test(trimmed)) { - return NaN; - } - - return +trimmed; // eslint-disable-line no-implicit-coercion -}; diff --git a/build/node_modules/es-abstract/5/ToObject.js b/build/node_modules/es-abstract/5/ToObject.js deleted file mode 100644 index 816e5375..00000000 --- a/build/node_modules/es-abstract/5/ToObject.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Object = GetIntrinsic('%Object%'); - -var CheckObjectCoercible = require('./CheckObjectCoercible'); - -// http://262.ecma-international.org/5.1/#sec-9.9 - -module.exports = function ToObject(value) { - CheckObjectCoercible(value); - return $Object(value); -}; diff --git a/build/node_modules/es-abstract/5/ToPrimitive.js b/build/node_modules/es-abstract/5/ToPrimitive.js deleted file mode 100644 index 56dfdb0c..00000000 --- a/build/node_modules/es-abstract/5/ToPrimitive.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// http://262.ecma-international.org/5.1/#sec-9.1 - -module.exports = require('es-to-primitive/es5'); diff --git a/build/node_modules/es-abstract/5/ToPropertyDescriptor.js b/build/node_modules/es-abstract/5/ToPropertyDescriptor.js deleted file mode 100644 index 53db8745..00000000 --- a/build/node_modules/es-abstract/5/ToPropertyDescriptor.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var has = require('has'); - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); - -var Type = require('./Type'); -var ToBoolean = require('./ToBoolean'); -var IsCallable = require('./IsCallable'); - -// https://262.ecma-international.org/5.1/#sec-8.10.5 - -module.exports = function ToPropertyDescriptor(Obj) { - if (Type(Obj) !== 'Object') { - throw new $TypeError('ToPropertyDescriptor requires an object'); - } - - var desc = {}; - if (has(Obj, 'enumerable')) { - desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); - } - if (has(Obj, 'configurable')) { - desc['[[Configurable]]'] = ToBoolean(Obj.configurable); - } - if (has(Obj, 'value')) { - desc['[[Value]]'] = Obj.value; - } - if (has(Obj, 'writable')) { - desc['[[Writable]]'] = ToBoolean(Obj.writable); - } - if (has(Obj, 'get')) { - var getter = Obj.get; - if (typeof getter !== 'undefined' && !IsCallable(getter)) { - throw new $TypeError('getter must be a function'); - } - desc['[[Get]]'] = getter; - } - if (has(Obj, 'set')) { - var setter = Obj.set; - if (typeof setter !== 'undefined' && !IsCallable(setter)) { - throw new $TypeError('setter must be a function'); - } - desc['[[Set]]'] = setter; - } - - if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { - throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); - } - return desc; -}; diff --git a/build/node_modules/es-abstract/5/ToString.js b/build/node_modules/es-abstract/5/ToString.js deleted file mode 100644 index c39faeb0..00000000 --- a/build/node_modules/es-abstract/5/ToString.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $String = GetIntrinsic('%String%'); - -// http://262.ecma-international.org/5.1/#sec-9.8 - -module.exports = function ToString(value) { - return $String(value); -}; - diff --git a/build/node_modules/es-abstract/5/ToUint16.js b/build/node_modules/es-abstract/5/ToUint16.js deleted file mode 100644 index 633ca846..00000000 --- a/build/node_modules/es-abstract/5/ToUint16.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var abs = require('./abs'); -var floor = require('./floor'); -var modulo = require('./modulo'); -var ToNumber = require('./ToNumber'); - -var $isNaN = require('../helpers/isNaN'); -var $isFinite = require('../helpers/isFinite'); -var $sign = require('../helpers/sign'); - -// http://262.ecma-international.org/5.1/#sec-9.7 - -module.exports = function ToUint16(value) { - var number = ToNumber(value); - if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } - var posInt = $sign(number) * floor(abs(number)); - return modulo(posInt, 0x10000); -}; diff --git a/build/node_modules/es-abstract/5/ToUint32.js b/build/node_modules/es-abstract/5/ToUint32.js deleted file mode 100644 index 2a8e9dd6..00000000 --- a/build/node_modules/es-abstract/5/ToUint32.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var ToNumber = require('./ToNumber'); - -// http://262.ecma-international.org/5.1/#sec-9.6 - -module.exports = function ToUint32(x) { - return ToNumber(x) >>> 0; -}; diff --git a/build/node_modules/es-abstract/5/Type.js b/build/node_modules/es-abstract/5/Type.js deleted file mode 100644 index f0230307..00000000 --- a/build/node_modules/es-abstract/5/Type.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -// https://262.ecma-international.org/5.1/#sec-8 - -module.exports = function Type(x) { - if (x === null) { - return 'Null'; - } - if (typeof x === 'undefined') { - return 'Undefined'; - } - if (typeof x === 'function' || typeof x === 'object') { - return 'Object'; - } - if (typeof x === 'number') { - return 'Number'; - } - if (typeof x === 'boolean') { - return 'Boolean'; - } - if (typeof x === 'string') { - return 'String'; - } -}; diff --git a/build/node_modules/es-abstract/5/WeekDay.js b/build/node_modules/es-abstract/5/WeekDay.js deleted file mode 100644 index 17cf94ca..00000000 --- a/build/node_modules/es-abstract/5/WeekDay.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var Day = require('./Day'); -var modulo = require('./modulo'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.6 - -module.exports = function WeekDay(t) { - return modulo(Day(t) + 4, 7); -}; diff --git a/build/node_modules/es-abstract/5/YearFromTime.js b/build/node_modules/es-abstract/5/YearFromTime.js deleted file mode 100644 index be06ecbc..00000000 --- a/build/node_modules/es-abstract/5/YearFromTime.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Date = GetIntrinsic('%Date%'); - -var callBound = require('call-bind/callBound'); - -var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); - -// https://262.ecma-international.org/5.1/#sec-15.9.1.3 - -module.exports = function YearFromTime(t) { - // largest y such that this.TimeFromYear(y) <= t - return $getUTCFullYear(new $Date(t)); -}; diff --git a/build/node_modules/es-abstract/5/abs.js b/build/node_modules/es-abstract/5/abs.js deleted file mode 100644 index 8bc45434..00000000 --- a/build/node_modules/es-abstract/5/abs.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $abs = GetIntrinsic('%Math.abs%'); - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function abs(x) { - return $abs(x); -}; diff --git a/build/node_modules/es-abstract/5/floor.js b/build/node_modules/es-abstract/5/floor.js deleted file mode 100644 index 8439df06..00000000 --- a/build/node_modules/es-abstract/5/floor.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -// var modulo = require('./modulo'); -var $floor = Math.floor; - -// http://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function floor(x) { - // return x - modulo(x, 1); - return $floor(x); -}; diff --git a/build/node_modules/es-abstract/5/modulo.js b/build/node_modules/es-abstract/5/modulo.js deleted file mode 100644 index b94bb52b..00000000 --- a/build/node_modules/es-abstract/5/modulo.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var mod = require('../helpers/mod'); - -// https://262.ecma-international.org/5.1/#sec-5.2 - -module.exports = function modulo(x, y) { - return mod(x, y); -}; diff --git a/build/node_modules/es-abstract/5/msFromTime.js b/build/node_modules/es-abstract/5/msFromTime.js deleted file mode 100644 index a6bae767..00000000 --- a/build/node_modules/es-abstract/5/msFromTime.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var modulo = require('./modulo'); - -var msPerSecond = require('../helpers/timeConstants').msPerSecond; - -// https://262.ecma-international.org/5.1/#sec-15.9.1.10 - -module.exports = function msFromTime(t) { - return modulo(t, msPerSecond); -}; diff --git a/build/node_modules/es-abstract/CHANGELOG.md b/build/node_modules/es-abstract/CHANGELOG.md deleted file mode 100644 index c409f841..00000000 --- a/build/node_modules/es-abstract/CHANGELOG.md +++ /dev/null @@ -1,486 +0,0 @@ -1.18.3 / 2021-05-27 -================= - * [Fix] `ES2020+`: `ToNumber`: ensure it throws on a BigInt (#130) - -1.18.2 / 2021-05-25 -================= - * [meta] add `helpers` to "exports" field, for back compat - -1.18.1 / 2021-05-25 -================= - * [readme] update and clarify entry points - * [meta] add "exports" field, with escape hatch - * [meta] add `sideEffects` field - * [meta] use `prepublishOnly`, for npm 7+ - * [eslint] clean up eslint rules - * [Deps] update `is-regex`, `is-string`, `object-inspect`, `unbox-primitive` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` - * [actions] disable fail-fast on matrix jobs - * [actions] use `node/install` action instead of `node/run` - * [actions] update codeql-analysis to new best practices - -1.18.0 / 2021-03-03 -================= - * [New] add `ES2020`, and a number of additional AOs: See the changelog entries for the prereleases for more information: - - [next.3](./CHANGELOG.md#1180-next3--2021-03-01) - - [next.2](./CHANGELOG.md#1180-next2--2021-01-17) - - [next.1](./CHANGELOG.md#1180-next1--2020-09-30) - - [next.0](./CHANGELOG.md#1180-next0--2020-08-14) - * [Refactor] `ES5+`: `Abstract Relational Comparison`: increase coverage - * [Tests] increase coverage - * [Tests] do not run coverage on node 0.6 - -1.18.0-next.3 / 2021-03-01 -================= - * [New] `ES2015`: add `StringGetIndexProperty` - * [New] `ES2015+`: add `RegExpCreate`, `SplitMatch`, `StringCreate` - * [New] `ES2016-ES2019`: add `UTF16Decode` - * [New] `ES2020+`: add `NumberToBigInt` - * [New] `ES2020+: add `BigInt::`/`Number::` methods: - * [Fix] `ES5`: `ToNumber`: properly refuse to parse ES6+ forms - * [Fix] `ES2015+`: `Invoke`: optional argumentsList must be a List of arguments, not a list of arguments - * [Fix] `ES2016+`: `UTF16Encoding`: properly return a string code point instead of a numeric code point - * [Fix] `ES2020`: `NumberBitwiseOp`: assert that x and y are Numbers - * [readme] remove travis/testling badge, fix repo URLs - * [meta] `ES2015`: add missing `CreateArrayIterator` AO - * [meta] `ES2015-ES2017`: add missing `DaylightSavingTA` AO - * [meta] rerun `npm run spackle` to update URLs left after 11d8c8df11c0d15d094a6035afed662e22b440ef - * [meta] update ecma URLs - * [meta] unignore 2020 operations list - * [meta] update operations scripts linting - * [meta] refactor getOps script to fetch all years at once - * [meta] refactor operations script to keep years in one place - * [meta] fix ES2015 spec URL - * [Deps] update `has-symbols`, `string.prototype.trimend`, `string.prototype.trimstart`, `get-intrinsic`, `is-callable`, `is-regex` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.indexof`, `aud`, `es-value-fixtures`, `object.fromentries`, `tape`, `diff` - * [operations] detect ES2020+ style `T::` numeric operations - * [Tests] increase coverage - * [Tests] `BigInt(1e17)` throws on node v10.4-v10.6 - * [Tests] improve coverage on `Number::` methods - * [Tests] `tape` v5 `.equal` now uses strict equality, so no more need for `is()` - * [Tests] improve BigInt:: and Number:: coverage - * [Tests] actually run all the helpers tests - * [Tests] ensure "expected missing" ops list is accurate - * [Tests] abstract away per-operation skips - * [Tests] skip BigInt:: tests on envs without BigInts - * [Tests] use `es-value-fixtures` - * [actions] update workflows - -1.18.0-next.2 / 2021-01-17 -================= - * [New] `helpers`: add `isByteValue`, `isCodePoint`, `some` - * [Fix] `ES2018+`: fix `GetSubstitution` with named captures - * [Fix] `ES2020`: `GetIterator`: add omitted `hint` parameter - * [Fix] `ES2018`/`ES2019`: `SetFunctionLength`: Infinities should throw - * [Fix] `ES2020`: `ToIndex` uses `SameValue` instead of `SameValueZero` - * [Fix] `ES2020`: `CopyDataProperties` uses `CreateDataPropertyOrThrow` instead of `CreateDataProperty` - * [Refactor] use extracted `call-bind` instead of local helpers - * [Refactor] use extracted `get-intrinsic` package - * [Deps] update `call-bind`, `get-intrinsic`, `is-callable`, `is-negative-zero`, `is-regex`, `object-inspect`, `object.assign`, `string.prototype.trimend`, `string.prototype.trimstart` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.indexof`, `aud`, `diff`, `functions-have-names`, `has-bigints`, `has-strict-mode`, `object-is`, `object.fromentries`, `tape` - * [actions] switch Automatic Rebase workflow to `pull_request_target` event - * [actions] add "Allow Edits" workflow - * [meta] pin cheerio to v1.0.0-rc.3, to fix getOps - * [meta] make all URLs consistent, and point to spec artifacts - * [meta] refactor `deltas` script; update eslint on operations scripts - * [meta] do not publish .github dir (#123) - * [Tests] add `v.notNonNegativeIntegers`, `v.nonConstructorFunctions` - * [Tests] migrate tests to Github Actions - * [Tests] run coverage on all tests - * [Tests] add `npm run test:ses` - -1.18.0-next.1 / 2020-09-30 -================= - * [Fix] `ES2020`: `ToInteger`: `-0` should always be normalized to `+0` (#116) - * [patch] `GetIntrinsic`: Adapt to override-mistake-fix pattern (#115) - * [Fix] `callBind`: ensure compatibility with SES - * [Deps] update `is-callable`, `object.assign` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config` - * [eslint] fix warning - * [Tests] temporarily allow SES tests to fail (#115) - * [Tests] ses-compat - initialize module after ses lockdown (#113) - * [Tests] [Refactor] use defineProperty helper rather than assignment - * [Tests] [Refactor] clean up defineProperty test helper - -1.18.0-next.0 / 2020-08-14 -================= - * [New] add `ES2020` - * [New] `GetIntrinsic`: add `%AggregateError%`, `%FinalizationRegistry%`, and `%WeakRef%` - * [New] `ES5`+: add `abs`, `floor`; use `modulo` consistently - * [New] `GetIntrinsic`: Cache accessed intrinsics (#98) - * [New] `GetIntrinsic`: Add ES201x function intrinsics (#97) - * [New] `ES2015`+: add `QuoteJSONString`, `OrdinaryCreateFromConstructor` - * [New] `ES2017`+: add `StringGetOwnProperty` - * [New] `ES2016`+: add `UTF16Encoding` - * [New] `ES2018`+: add `SetFunctionLength`, `UnicodeEscape` - * [New] add `isLeadingSurrogate`/`isTrailingSurrogate` helpers - * [Fix] `ES5`+: `ToPropertyDescriptor`: use intrinsic TypeError - * [Fix] `ES2018+`: `CopyDataProperties`/`NumberToString`: use intrinsic TypeError - * [Deps] update `is-regex`, `object-inspect` - * [Dev Deps] update `eslint` - -1.17.7 / 2020-09-30 -================= - * [Fix] `ES2020`: `ToInteger`: `-0` should always be normalized to `+0` (#116) - * [patch] `GetIntrinsic`: Adapt to override-mistake-fix pattern (#115) - * [Fix] `callBind`: ensure compatibility with SES - * [Deps] update `is-callable`, `is-regex`, `object-inspect`, `object.assign` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config` - -1.17.6 / 2020-06-13 -================= - * [Fix] `helpers/getSymbolDescription`: use the global Symbol registry when available (#92) - * [Fix] `ES2015+`: `IsConstructor`: when `Reflect.construct` is available, be spec-accurate (#93) - * [Fix] `ES2015+`: `Set`: Always return boolean value (#101) - * [Fix] `ES2015+`: `Set`: ensure exceptions are thrown in IE 9 when requested - * [Fix] Use `Reflect.apply(…)` if available (#99) - * [Fix] `helpers/floor`: module-cache `Math.floor` - * [Fix] `helpers/getSymbolDescription`: Prefer bound `description` getter when present - * [Fix] `2016`: Use `getIteratorMethod` in `IterableToArrayLike` (#94) - * [Fix] `helpers/OwnPropertyKeys`: Use `Reflect.ownKeys(…)` if available (#91) - * [Fix] `2018+`: Fix `CopyDataProperties` depending on `this` (#95) - * [meta] mark spackled files as autogenerated - * [meta] `Type`: fix spec URL - * [meta] `ES2015`: complete ops list - * [Deps] update `is‑callable`, `is‑regex` - * [Deps] switch from `string.prototype.trimleft`/`string.prototype.trimright` to `string.prototype.trimstart`/`string.prototype.trimend` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `in-publish`, `object-is`, `tape`; add `aud` - * [eslint] `helpers/isPropertyDescriptor`: fix indentation - * [Tests] `helpers/getSymbolDescription`: add test cases; some envs have `Symbol.for` but can not infer a name (#92) - * [Tests] try out CodeQL analysis - * [Tests] reformat expected missing ops - * [Tests] Run tests with `undefined` this (#96) - -1.17.5 / 2020-03-22 -================= - * [Fix] `CreateDataProperty`: update an existing property - * [Fix] run missing spackle from cd7504701879ddea0f5981e99cbcf93bfea9171d - * [Dev Deps] update `make-arrow-function`, `tape`, `@ljharb/eslint-config` - -1.17.4 / 2020-01-21 -================= - * [Fix] `2015+`: add code to handle IE 8’s problems - * [Tests] fix tests for IE 8 - -1.17.3 / 2020-01-19 -================= - * [Fix] `ObjectCreate` `2015+`: Fall back to `__proto__` and normal `new` in older browsers - * [Fix] `GetIntrinsic`: ensure the `allowMissing` property actually works on dotted intrinsics - -1.17.2 / 2020-01-14 -================= - * [Fix] `helpers/OwnPropertyKeys`: include non-enumerables too - -1.17.1 / 2020-01-14 -================= - * [Refactor] add `OwnPropertyKeys` helper, use it in `CopyDataProperties` - * [Refactor] `IteratorClose`: remove useless assignment - * [Dev Deps] update `eslint`, `tape`, `diff` - -1.17.0 / 2019-12-20 -================= - * [New] Split up each operation into its own file (prereleased) - * [Fix] `GetIntrinsic`: IE 8 has a broken `Object.getOwnPropertyDescriptor` - * [Fix] `object.assign` is a runtime dep (prereleased) - * [Refactor] `GetIntrinsic`: remove the internal property salts, since % already handles that - * [Refactor] `GetIntrinsic`: further simplification - * [Deps] update `is-callable`, `string.prototype.trimleft`, `string.prototype.trimright`, `is-regex` - * [Dev Deps] update `@ljharb/eslint-config`, `object-is`, `object.fromentries`, `tape` - * [Tests] add `.eslintignore` - * [meta] remove unused Makefile and associated utils - * [meta] only run spackle script in publish (#78) (prereleased) - -1.17.0-next.1 / 2019-12-11 -================= - * [Fix] `object.assign` is a runtime dep - * [meta] only run spackle script in publish (#78) - -1.17.0-next.0 / 2019-12-11 -================= - * [New] Split up each operation into its own file - -1.16.3 / 2019-12-04 -================= - * [Fix] `GetIntrinsic`: when given a path to a getter, return the actual getter - * [Dev Deps] update `eslint` - -1.16.2 / 2019-11-24 -================= - * [Fix] IE 6-7 lack JSON - * [Fix] IE 6-8 strings can’t use array slice, they need string slice - * [Dev Deps] update `eslint` - -1.16.1 / 2019-11-24 -================= - * [Fix] `GetIntrinsics`: turns out IE 8 throws when `Object.getOwnPropertyDescriptor(arguments);`, and does not throw on `callee` anyways - * [Deps] update `es-to-primitive`, `has-symbols`, `object-inspect` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` - * [meta] re-include year files inside `operations` - * [meta] add `funding` field - * [actions] add Automatic Rebase github action - * [Tests] use shared travis-ci config - * [Tests] disable `check-coverage`, and let codecov do it - -1.16.0 / 2019-10-18 -================= - * [New] `ES2015+`: add `SetFunctionName` - * [New] `ES2015+`: add `GetPrototypeFromConstructor`, with caveats - * [New] `ES2015+`: add `CreateListFromArrayLike` - * [New] `ES2016+`: add `OrdinarySetPrototypeOf` - * [New] `ES2016+`: add `OrdinaryGetPrototypeOf` - * [New] add `getSymbolDescription` and `getInferredName` helpers - * [Fix] `GetIterator`: add fallback for pre-Symbol environments, tests - * [Dev Deps] update `object.fromentries` - * [Tests] add `node` `v12.2` - -1.15.0 / 2019-10-02 -================= - * [New] `ES2018`+: add `DateString`, `TimeString` - * [New] `ES2015`+: add `ToDateString` - * [New] `ES5`+: add `msFromTime`, `SecFromTime`, `MinFromTime`, `HourFromTime`, `TimeWithinDay`, `Day`, `DayFromYear`, `TimeFromYear`, `YearFromTime`, `WeekDay`, `DaysInYear`, `InLeapYear`, `DayWithinYear`, `MonthFromTime`, `DateFromTime`, `MakeDay`, `MakeDate`, `MakeTime`, `TimeClip`, `modulo` - * [New] add `regexTester` helper - * [New] add `callBound` helper - * [New] add ES2020’s intrinsic dot notation - * [New] add `isPrefixOf` helper - * [New] add `maxSafeInteger` helper - * [Deps] update `string.prototype.trimleft`, `string.prototype.trimright` - * [Dev Deps] update `eslint` - * [Tests] on `node` `v12.11` - * [meta] npmignore operations scripts; add "deltas" - -1.14.2 / 2019-09-08 -================= - * [Fix] `ES2016`: `IterableToArrayLike`: add proper fallback for strings, pre-Symbols - * [Tests] on `node` `v12.10` - -1.14.1 / 2019-09-03 -================= - * [meta] republish with some extra files removed - -1.14.0 / 2019-09-02 -================= - * [New] add ES2019 - * [New] `ES2017+`: add `IterableToList` - * [New] `ES2016`: add `IterableToArrayLike` - * [New] `ES2015+`: add `ArrayCreate`, `ArraySetLength`, `OrdinaryDefineOwnProperty`, `OrdinaryGetOwnProperty`, `OrdinaryHasProperty`, `CreateHTML`, `GetOwnPropertyKeys`, `InstanceofOperator`, `SymbolDescriptiveString`, `GetSubstitution`, `ValidateAndApplyPropertyDescriptor`, `IsPromise`, `OrdinaryHasInstance`, `TestIntegrityLevel`, `SetIntegrityLevel` - * [New] add `callBind` helper, and use it - * [New] add helpers: `isPropertyDescriptor`, `every` - * [New] ES5+: add `Abstract Relational Comparison` - * [New] ES5+: add `Abstract Equality Comparison`, `Strict Equality Comparison` - * [Fix] `ES2015+`: `GetIterator`: only require native Symbols when `method` is omitted - * [Fix] `ES2015`: `Call`: error message now properly displays Symbols using `object-inspect` - * [Fix] `ES2015+`: `ValidateAndApplyPropertyDescriptor`: use ES2017 logic to bypass spec bugs - * [Fix] `ES2015+`: `CreateDataProperty`, `DefinePropertyOrThrow`, `ValidateAndApplyPropertyDescriptor`: add fallbacks for ES3 - * [Fix] `ES2015+`: `FromPropertyDescriptor`: no longer requires a fully complete Property Descriptor - * [Fix] `ES5`: `IsPropertyDescriptor`: call into `IsDataDescriptor` and `IsAccessorDescriptor` - * [Refactor] use `has-symbols` for Symbol detection - * [Fix] `helpers/assertRecord`: remove `console.log` - * [Deps] update `object-keys` - * [readme] add security note - * [meta] change http URLs to https - * [meta] linter cleanup - * [meta] fix getOps script - * [meta] add FUNDING.yml - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `semver`, `replace`, `cheerio`, `tape` - * [Tests] up to `node` `v12.9`, `v11.15`, `v10.16`, `v8.16`, `v6.17` - * [Tests] temporarily allow node 0.6 to fail; segfaulting in travis - * [Tests] use the values helper more in es5 tests - * [Tests] fix linting to apply to all files - * [Tests] run `npx aud` only on prod deps - * [Tests] add v.descriptors helpers - * [Tests] use `npx aud` instead of `npm audit` with hoops - * [Tests] use `eclint` instead of `editorconfig-tools` - * [Tests] some intrinsic cleanup - * [Tests] migrate es5 tests to use values helper - * [Tests] add some missing ES2015 ops - -1.13.0 / 2019-01-02 -================= - * [New] add ES2018 - * [New] add ES2015/ES2016: EnumerableOwnNames; ES2017: EnumerableOwnProperties - * [New] `ES2015+`: add `thisBooleanValue`, `thisNumberValue`, `thisStringValue`, `thisTimeValue` - * [New] `ES2015+`: add `DefinePropertyOrThrow`, `DeletePropertyOrThrow`, `CreateMethodProperty` - * [New] add `assertRecord` helper - * [Deps] update `is-callable`, `has`, `object-keys`, `es-to-primitive` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `semver`, `safe-publish-latest`, `replace` - * [Tests] use `npm audit` instead of `nsp` - * [Tests] remove `jscs` - * [Tests] up to `node` `v11.6`, `v10.15`, `v8.15`, `v6.16` - * [Tests] move descriptor factories to `values` helper - * [Tests] add `getOps` to programmatically fetch abstract operation names - -1.12.0 / 2018-05-31 -================= - * [New] add `GetIntrinsic` entry point - * [New] `ES2015`+: add `ObjectCreate` - * [Robustness]: `ES2015+`: ensure `Math.{abs,floor}` and `Function.call` are cached - -1.11.0 / 2018-03-21 -================= - * [New] `ES2015+`: add iterator abstract ops - * [Dev Deps] update `eslint`, `nsp`, `object.assign`, `semver`, `tape` - * [Tests] up to `node` `v9.8`, `v8.10`, `v6.13` - -1.10.0 / 2017-11-24 -================= - * [New] ES2015+: `AdvanceStringIndex` - * [Dev Deps] update `eslint`, `nsp` - * [Tests] require node 0.6 to pass again - * [Tests] up to `node` `v9.2`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS - -1.9.0 / 2017-09-30 -================= - * [New] `es2015+`: add `ArraySpeciesCreate` - * [New] ES2015+: add `CreateDataProperty` and `CreateDataPropertyOrThrow` - * [Tests] consolidate duplicated tests - * [Tests] increase coverage - * [Dev Deps] update `nsp`, `eslint` - -1.8.2 / 2017-09-03 -================= - * [Fix] `es2015`+: `ToNumber`: provide the proper hint for Date objects (#27) - * [Dev Deps] update `eslint` - -1.8.1 / 2017-08-30 -================= - * [Fix] ES2015+: `ToPropertyKey`: should return a symbol for Symbols (#26) - * [Deps] update `function-bind` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config` - * [Docs] github broke markdown parsing - -1.8.0 / 2017-08-04 -================= - * [New] add ES2017 - * [New] move es6+ to es2015+; leave es6/es7 as aliases - * [New] ES5+: add `IsPropertyDescriptor`, `IsAccessorDescriptor`, `IsDataDescriptor`, `IsGenericDescriptor`, `FromPropertyDescriptor`, `ToPropertyDescriptor` - * [New] ES2015+: add `CompletePropertyDescriptor`, `Set`, `HasOwnProperty`, `HasProperty`, `IsConcatSpreadable`, `Invoke`, `CreateIterResultObject`, `RegExpExec` - * [Fix] es7/es2016: do not mutate ES6 - * [Fix] assign helper only supports one source - * [Deps] update `is-regex` - * [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `semver`, `tape` - * [Tests] add tests for missing and excess operations - * [Tests] add codecov for coverage - * [Tests] up to `node` `v8.2`, `v7.10`, `v6.11`, `v4.8`; newer npm breaks on older node - * [Tests] use same lists of value types across tests; ensure tests are the same when ops are the same - * [Tests] ES2015: add ToNumber symbol tests - * [Tests] switch to `nyc` for code coverage - * [Tests] make IsRegExp tests consistent across editions - -1.7.0 / 2017-01-22 -================= - * [New] ES6: Add `GetMethod` (#16) - * [New] ES6: Add `GetV` (#16) - * [New] ES6: Add `Get` (#17) - * [Tests] up to `node` `v7.4`, `v6.9`, `v4.6`; improve test matrix - * [Dev Deps] update `tape`, `nsp`, `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` - -1.6.1 / 2016-08-21 -================= - * [Fix] ES6: IsConstructor should return true for `class` constructors. - -1.6.0 / 2016-08-20 -================= - * [New] ES5 / ES6: add `Type` - * [New] ES6: `SpeciesConstructor` - * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`; add `safe-publish-latest` - * [Tests] up to `node` `v6.4`, `v5.12`, `v4.5` - -1.5.1 / 2016-05-30 -================= - * [Fix] `ES.IsRegExp`: actually look up `Symbol.match` on the argument - * [Refactor] create `isNaN` helper - * [Deps] update `is-callable`, `function-bind` - * [Deps] update `es-to-primitive`, fix ES5 tests - * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape`, `nsp` - * [Tests] up to `node` `v6.2`, `v5.11`, `v4.4` - * [Tests] use pretest/posttest for linting/security - -1.5.0 / 2015-12-27 -================= - * [New] adds `Symbol.toPrimitive` support via `es-to-primitive` - * [Deps] update `is-callable`, `es-to-primitive` - * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `tape` - * [Tests] up to `node` `v5.3` - -1.4.3 / 2015-11-04 -================= - * [Fix] `ES6.ToNumber`: should give `NaN` for explicitly signed hex strings (#4) - * [Refactor] `ES6.ToNumber`: No need to double-trim - * [Refactor] group tests better - * [Tests] should still pass on `node` `v0.8` - -1.4.2 / 2015-11-02 -================= - * [Fix] ensure `ES.ToNumber` trims whitespace, and does not trim non-whitespace (#3) - -1.4.1 / 2015-10-31 -================= - * [Fix] ensure only 0-1 are valid binary and 0-7 are valid octal digits (#2) - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` - * [Tests] on `node` `v5.0` - * [Tests] fix npm upgrades for older node versions - * package.json: use object form of "authors", add "contributors" - -1.4.0 / 2015-09-26 -================= - * [Deps] update `is-callable` - * [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` - * [Tests] on `node` `v4.2` - * [New] Add `SameValueNonNumber` to ES7 - -1.3.2 / 2015-09-26 -================= - * [Fix] Fix `ES6.IsRegExp` to properly handle `Symbol.match`, per spec. - * [Tests] up to `io.js` `v3.3`, `node` `v4.1` - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` - -1.3.1 / 2015-08-15 -================= - * [Fix] Ensure that objects that `toString` to a binary or octal literal also convert properly - -1.3.0 / 2015-08-15 -================= - * [New] ES6’s ToNumber now supports binary and octal literals. - * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape` - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - * [Tests] up to `io.js` `v3.0` - -1.2.2 / 2015-07-28 -================= - * [Fix] Both `ES5.CheckObjectCoercible` and `ES6.RequireObjectCoercible` return the value if they don't throw. - * [Tests] Test on latest `io.js` versions. - * [Dev Deps] Update `eslint`, `jscs`, `tape`, `semver`, `covert`, `nsp` - -1.2.1 / 2015-03-20 -================= - * Fix `isFinite` helper. - -1.2.0 / 2015-03-19 -================= - * Use `es-to-primitive` for ToPrimitive methods. - * Test on latest `io.js` versions; allow failures on all but 2 latest `node`/`io.js` versions. - -1.1.2 / 2015-03-20 -================= - * Fix isFinite helper. - -1.1.1 / 2015-03-19 -================= - * Fix isPrimitive check for functions - * Update `eslint`, `editorconfig-tools`, `semver`, `nsp` - -1.1.0 / 2015-02-17 -================= - * Add ES7 export (non-default). - * All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. - * Test on `iojs-v1.2`. - -1.0.1 / 2015-01-30 -================= - * Use `is-callable` instead of an internal function. - * Update `tape`, `jscs`, `nsp`, `eslint` - -1.0.0 / 2015-01-10 -================= - * v1.0.0 diff --git a/build/node_modules/es-abstract/GetIntrinsic.js b/build/node_modules/es-abstract/GetIntrinsic.js deleted file mode 100644 index d7e67b47..00000000 --- a/build/node_modules/es-abstract/GetIntrinsic.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// TODO: remove, semver-major - -module.exports = require('get-intrinsic'); diff --git a/build/node_modules/es-abstract/LICENSE b/build/node_modules/es-abstract/LICENSE deleted file mode 100644 index 8c271c14..00000000 --- a/build/node_modules/es-abstract/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/es-abstract/README.md b/build/node_modules/es-abstract/README.md deleted file mode 100644 index 2d76a5d4..00000000 --- a/build/node_modules/es-abstract/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# es-abstract [![Version Badge][npm-version-svg]][package-url] - -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -ECMAScript spec abstract operations. - -Every operation is available by edition/year and by name - for example, `es-abstract/2020/Call` gives you the `Call` operation from ES2020, `es-abstract/5/Type` gives you the `Type` operation from ES5. - -All abstract operations are also available under an `es5`/`es2015`/`es2016`/`es2017`/`es2018`/`es2019`/`es2020` entry point, and as a property on the `main` export, but using deep imports is highly encouraged for bundle size and performance reasons. Non-deep entry points will be removed in the next semver-major release. - -## Example - -```js -var ES = require('es-abstract'); -var assert = require('assert'); - -assert(ES.isCallable(function () {})); -assert(!ES.isCallable(/a/g)); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -## Security - -Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. - -[package-url]: https://npmjs.org/package/es-abstract -[npm-version-svg]: https://versionbadg.es/ljharb/es-abstract.svg -[deps-svg]: https://david-dm.org/ljharb/es-abstract.svg -[deps-url]: https://david-dm.org/ljharb/es-abstract -[dev-deps-svg]: https://david-dm.org/ljharb/es-abstract/dev-status.svg -[dev-deps-url]: https://david-dm.org/ljharb/es-abstract#info=devDependencies -[npm-badge-png]: https://nodei.co/npm/es-abstract.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/es-abstract.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/es-abstract.svg -[downloads-url]: https://npm-stat.com/charts.html?package=es-abstract diff --git a/build/node_modules/es-abstract/es2015.js b/build/node_modules/es-abstract/es2015.js deleted file mode 100644 index 79be9674..00000000 --- a/build/node_modules/es-abstract/es2015.js +++ /dev/null @@ -1,123 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://ecma-international.org/ecma-262/6.0/#sec-abstract-operations -var ES6 = { - 'Abstract Equality Comparison': require('./2015/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2015/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2015/StrictEqualityComparison'), - abs: require('./2015/abs'), - AdvanceStringIndex: require('./2015/AdvanceStringIndex'), - ArrayCreate: require('./2015/ArrayCreate'), - ArraySetLength: require('./2015/ArraySetLength'), - ArraySpeciesCreate: require('./2015/ArraySpeciesCreate'), - Call: require('./2015/Call'), - CanonicalNumericIndexString: require('./2015/CanonicalNumericIndexString'), - CompletePropertyDescriptor: require('./2015/CompletePropertyDescriptor'), - CreateDataProperty: require('./2015/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2015/CreateDataPropertyOrThrow'), - CreateHTML: require('./2015/CreateHTML'), - CreateIterResultObject: require('./2015/CreateIterResultObject'), - CreateListFromArrayLike: require('./2015/CreateListFromArrayLike'), - CreateMethodProperty: require('./2015/CreateMethodProperty'), - DateFromTime: require('./2015/DateFromTime'), - Day: require('./2015/Day'), - DayFromYear: require('./2015/DayFromYear'), - DaysInYear: require('./2015/DaysInYear'), - DayWithinYear: require('./2015/DayWithinYear'), - DefinePropertyOrThrow: require('./2015/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2015/DeletePropertyOrThrow'), - EnumerableOwnNames: require('./2015/EnumerableOwnNames'), - floor: require('./2015/floor'), - FromPropertyDescriptor: require('./2015/FromPropertyDescriptor'), - Get: require('./2015/Get'), - GetIterator: require('./2015/GetIterator'), - GetMethod: require('./2015/GetMethod'), - GetOwnPropertyKeys: require('./2015/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2015/GetPrototypeFromConstructor'), - GetSubstitution: require('./2015/GetSubstitution'), - GetV: require('./2015/GetV'), - HasOwnProperty: require('./2015/HasOwnProperty'), - HasProperty: require('./2015/HasProperty'), - HourFromTime: require('./2015/HourFromTime'), - InLeapYear: require('./2015/InLeapYear'), - InstanceofOperator: require('./2015/InstanceofOperator'), - Invoke: require('./2015/Invoke'), - IsAccessorDescriptor: require('./2015/IsAccessorDescriptor'), - IsArray: require('./2015/IsArray'), - IsCallable: require('./2015/IsCallable'), - IsConcatSpreadable: require('./2015/IsConcatSpreadable'), - IsConstructor: require('./2015/IsConstructor'), - IsDataDescriptor: require('./2015/IsDataDescriptor'), - IsExtensible: require('./2015/IsExtensible'), - IsGenericDescriptor: require('./2015/IsGenericDescriptor'), - IsInteger: require('./2015/IsInteger'), - IsPromise: require('./2015/IsPromise'), - IsPropertyDescriptor: require('./2015/IsPropertyDescriptor'), - IsPropertyKey: require('./2015/IsPropertyKey'), - IsRegExp: require('./2015/IsRegExp'), - IteratorClose: require('./2015/IteratorClose'), - IteratorComplete: require('./2015/IteratorComplete'), - IteratorNext: require('./2015/IteratorNext'), - IteratorStep: require('./2015/IteratorStep'), - IteratorValue: require('./2015/IteratorValue'), - MakeDate: require('./2015/MakeDate'), - MakeDay: require('./2015/MakeDay'), - MakeTime: require('./2015/MakeTime'), - MinFromTime: require('./2015/MinFromTime'), - modulo: require('./2015/modulo'), - MonthFromTime: require('./2015/MonthFromTime'), - msFromTime: require('./2015/msFromTime'), - ObjectCreate: require('./2015/ObjectCreate'), - OrdinaryCreateFromConstructor: require('./2015/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2015/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2015/OrdinaryGetOwnProperty'), - OrdinaryHasInstance: require('./2015/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2015/OrdinaryHasProperty'), - QuoteJSONString: require('./2015/QuoteJSONString'), - RegExpCreate: require('./2015/RegExpCreate'), - RegExpExec: require('./2015/RegExpExec'), - RequireObjectCoercible: require('./2015/RequireObjectCoercible'), - SameValue: require('./2015/SameValue'), - SameValueZero: require('./2015/SameValueZero'), - SecFromTime: require('./2015/SecFromTime'), - Set: require('./2015/Set'), - SetFunctionName: require('./2015/SetFunctionName'), - SetIntegrityLevel: require('./2015/SetIntegrityLevel'), - SpeciesConstructor: require('./2015/SpeciesConstructor'), - SplitMatch: require('./2015/SplitMatch'), - StringCreate: require('./2015/StringCreate'), - StringGetIndexProperty: require('./2015/StringGetIndexProperty'), - SymbolDescriptiveString: require('./2015/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2015/TestIntegrityLevel'), - thisBooleanValue: require('./2015/thisBooleanValue'), - thisNumberValue: require('./2015/thisNumberValue'), - thisStringValue: require('./2015/thisStringValue'), - thisTimeValue: require('./2015/thisTimeValue'), - TimeClip: require('./2015/TimeClip'), - TimeFromYear: require('./2015/TimeFromYear'), - TimeWithinDay: require('./2015/TimeWithinDay'), - ToBoolean: require('./2015/ToBoolean'), - ToDateString: require('./2015/ToDateString'), - ToInt16: require('./2015/ToInt16'), - ToInt32: require('./2015/ToInt32'), - ToInt8: require('./2015/ToInt8'), - ToInteger: require('./2015/ToInteger'), - ToLength: require('./2015/ToLength'), - ToNumber: require('./2015/ToNumber'), - ToObject: require('./2015/ToObject'), - ToPrimitive: require('./2015/ToPrimitive'), - ToPropertyDescriptor: require('./2015/ToPropertyDescriptor'), - ToPropertyKey: require('./2015/ToPropertyKey'), - ToString: require('./2015/ToString'), - ToUint16: require('./2015/ToUint16'), - ToUint32: require('./2015/ToUint32'), - ToUint8: require('./2015/ToUint8'), - ToUint8Clamp: require('./2015/ToUint8Clamp'), - Type: require('./2015/Type'), - ValidateAndApplyPropertyDescriptor: require('./2015/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2015/WeekDay'), - YearFromTime: require('./2015/YearFromTime') -}; - -module.exports = ES6; diff --git a/build/node_modules/es-abstract/es2016.js b/build/node_modules/es-abstract/es2016.js deleted file mode 100644 index 6fbdb0cf..00000000 --- a/build/node_modules/es-abstract/es2016.js +++ /dev/null @@ -1,128 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://262.ecma-international.org/7.0/#sec-abstract-operations -var ES2016 = { - 'Abstract Equality Comparison': require('./2016/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2016/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2016/StrictEqualityComparison'), - abs: require('./2016/abs'), - AdvanceStringIndex: require('./2016/AdvanceStringIndex'), - ArrayCreate: require('./2016/ArrayCreate'), - ArraySetLength: require('./2016/ArraySetLength'), - ArraySpeciesCreate: require('./2016/ArraySpeciesCreate'), - Call: require('./2016/Call'), - CanonicalNumericIndexString: require('./2016/CanonicalNumericIndexString'), - CompletePropertyDescriptor: require('./2016/CompletePropertyDescriptor'), - CreateDataProperty: require('./2016/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2016/CreateDataPropertyOrThrow'), - CreateHTML: require('./2016/CreateHTML'), - CreateIterResultObject: require('./2016/CreateIterResultObject'), - CreateListFromArrayLike: require('./2016/CreateListFromArrayLike'), - CreateMethodProperty: require('./2016/CreateMethodProperty'), - DateFromTime: require('./2016/DateFromTime'), - Day: require('./2016/Day'), - DayFromYear: require('./2016/DayFromYear'), - DaysInYear: require('./2016/DaysInYear'), - DayWithinYear: require('./2016/DayWithinYear'), - DefinePropertyOrThrow: require('./2016/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2016/DeletePropertyOrThrow'), - EnumerableOwnNames: require('./2016/EnumerableOwnNames'), - floor: require('./2016/floor'), - FromPropertyDescriptor: require('./2016/FromPropertyDescriptor'), - Get: require('./2016/Get'), - GetIterator: require('./2016/GetIterator'), - GetMethod: require('./2016/GetMethod'), - GetOwnPropertyKeys: require('./2016/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2016/GetPrototypeFromConstructor'), - GetSubstitution: require('./2016/GetSubstitution'), - GetV: require('./2016/GetV'), - HasOwnProperty: require('./2016/HasOwnProperty'), - HasProperty: require('./2016/HasProperty'), - HourFromTime: require('./2016/HourFromTime'), - InLeapYear: require('./2016/InLeapYear'), - InstanceofOperator: require('./2016/InstanceofOperator'), - Invoke: require('./2016/Invoke'), - IsAccessorDescriptor: require('./2016/IsAccessorDescriptor'), - IsArray: require('./2016/IsArray'), - IsCallable: require('./2016/IsCallable'), - IsConcatSpreadable: require('./2016/IsConcatSpreadable'), - IsConstructor: require('./2016/IsConstructor'), - IsDataDescriptor: require('./2016/IsDataDescriptor'), - IsExtensible: require('./2016/IsExtensible'), - IsGenericDescriptor: require('./2016/IsGenericDescriptor'), - IsInteger: require('./2016/IsInteger'), - IsPromise: require('./2016/IsPromise'), - IsPropertyDescriptor: require('./2016/IsPropertyDescriptor'), - IsPropertyKey: require('./2016/IsPropertyKey'), - IsRegExp: require('./2016/IsRegExp'), - IterableToArrayLike: require('./2016/IterableToArrayLike'), - IteratorClose: require('./2016/IteratorClose'), - IteratorComplete: require('./2016/IteratorComplete'), - IteratorNext: require('./2016/IteratorNext'), - IteratorStep: require('./2016/IteratorStep'), - IteratorValue: require('./2016/IteratorValue'), - MakeDate: require('./2016/MakeDate'), - MakeDay: require('./2016/MakeDay'), - MakeTime: require('./2016/MakeTime'), - MinFromTime: require('./2016/MinFromTime'), - modulo: require('./2016/modulo'), - MonthFromTime: require('./2016/MonthFromTime'), - msFromTime: require('./2016/msFromTime'), - ObjectCreate: require('./2016/ObjectCreate'), - OrdinaryCreateFromConstructor: require('./2016/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2016/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2016/OrdinaryGetOwnProperty'), - OrdinaryGetPrototypeOf: require('./2016/OrdinaryGetPrototypeOf'), - OrdinaryHasInstance: require('./2016/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2016/OrdinaryHasProperty'), - OrdinarySetPrototypeOf: require('./2016/OrdinarySetPrototypeOf'), - QuoteJSONString: require('./2016/QuoteJSONString'), - RegExpCreate: require('./2016/RegExpCreate'), - RegExpExec: require('./2016/RegExpExec'), - RequireObjectCoercible: require('./2016/RequireObjectCoercible'), - SameValue: require('./2016/SameValue'), - SameValueNonNumber: require('./2016/SameValueNonNumber'), - SameValueZero: require('./2016/SameValueZero'), - SecFromTime: require('./2016/SecFromTime'), - Set: require('./2016/Set'), - SetFunctionName: require('./2016/SetFunctionName'), - SetIntegrityLevel: require('./2016/SetIntegrityLevel'), - SpeciesConstructor: require('./2016/SpeciesConstructor'), - SplitMatch: require('./2016/SplitMatch'), - StringCreate: require('./2016/StringCreate'), - SymbolDescriptiveString: require('./2016/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2016/TestIntegrityLevel'), - thisBooleanValue: require('./2016/thisBooleanValue'), - thisNumberValue: require('./2016/thisNumberValue'), - thisStringValue: require('./2016/thisStringValue'), - thisTimeValue: require('./2016/thisTimeValue'), - TimeClip: require('./2016/TimeClip'), - TimeFromYear: require('./2016/TimeFromYear'), - TimeWithinDay: require('./2016/TimeWithinDay'), - ToBoolean: require('./2016/ToBoolean'), - ToDateString: require('./2016/ToDateString'), - ToInt16: require('./2016/ToInt16'), - ToInt32: require('./2016/ToInt32'), - ToInt8: require('./2016/ToInt8'), - ToInteger: require('./2016/ToInteger'), - ToLength: require('./2016/ToLength'), - ToNumber: require('./2016/ToNumber'), - ToObject: require('./2016/ToObject'), - ToPrimitive: require('./2016/ToPrimitive'), - ToPropertyDescriptor: require('./2016/ToPropertyDescriptor'), - ToPropertyKey: require('./2016/ToPropertyKey'), - ToString: require('./2016/ToString'), - ToUint16: require('./2016/ToUint16'), - ToUint32: require('./2016/ToUint32'), - ToUint8: require('./2016/ToUint8'), - ToUint8Clamp: require('./2016/ToUint8Clamp'), - Type: require('./2016/Type'), - UTF16Decode: require('./2016/UTF16Decode'), - UTF16Encoding: require('./2016/UTF16Encoding'), - ValidateAndApplyPropertyDescriptor: require('./2016/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2016/WeekDay'), - YearFromTime: require('./2016/YearFromTime') -}; - -module.exports = ES2016; diff --git a/build/node_modules/es-abstract/es2017.js b/build/node_modules/es-abstract/es2017.js deleted file mode 100644 index 3cf0c007..00000000 --- a/build/node_modules/es-abstract/es2017.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://262.ecma-international.org/8.0/#sec-abstract-operations -var ES2017 = { - 'Abstract Equality Comparison': require('./2017/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2017/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2017/StrictEqualityComparison'), - abs: require('./2017/abs'), - AdvanceStringIndex: require('./2017/AdvanceStringIndex'), - ArrayCreate: require('./2017/ArrayCreate'), - ArraySetLength: require('./2017/ArraySetLength'), - ArraySpeciesCreate: require('./2017/ArraySpeciesCreate'), - Call: require('./2017/Call'), - CanonicalNumericIndexString: require('./2017/CanonicalNumericIndexString'), - CompletePropertyDescriptor: require('./2017/CompletePropertyDescriptor'), - CreateDataProperty: require('./2017/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2017/CreateDataPropertyOrThrow'), - CreateHTML: require('./2017/CreateHTML'), - CreateIterResultObject: require('./2017/CreateIterResultObject'), - CreateListFromArrayLike: require('./2017/CreateListFromArrayLike'), - CreateMethodProperty: require('./2017/CreateMethodProperty'), - DateFromTime: require('./2017/DateFromTime'), - Day: require('./2017/Day'), - DayFromYear: require('./2017/DayFromYear'), - DaysInYear: require('./2017/DaysInYear'), - DayWithinYear: require('./2017/DayWithinYear'), - DefinePropertyOrThrow: require('./2017/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2017/DeletePropertyOrThrow'), - EnumerableOwnProperties: require('./2017/EnumerableOwnProperties'), - floor: require('./2017/floor'), - FromPropertyDescriptor: require('./2017/FromPropertyDescriptor'), - Get: require('./2017/Get'), - GetIterator: require('./2017/GetIterator'), - GetMethod: require('./2017/GetMethod'), - GetOwnPropertyKeys: require('./2017/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2017/GetPrototypeFromConstructor'), - GetSubstitution: require('./2017/GetSubstitution'), - GetV: require('./2017/GetV'), - HasOwnProperty: require('./2017/HasOwnProperty'), - HasProperty: require('./2017/HasProperty'), - HourFromTime: require('./2017/HourFromTime'), - InLeapYear: require('./2017/InLeapYear'), - InstanceofOperator: require('./2017/InstanceofOperator'), - Invoke: require('./2017/Invoke'), - IsAccessorDescriptor: require('./2017/IsAccessorDescriptor'), - IsArray: require('./2017/IsArray'), - IsCallable: require('./2017/IsCallable'), - IsConcatSpreadable: require('./2017/IsConcatSpreadable'), - IsConstructor: require('./2017/IsConstructor'), - IsDataDescriptor: require('./2017/IsDataDescriptor'), - IsExtensible: require('./2017/IsExtensible'), - IsGenericDescriptor: require('./2017/IsGenericDescriptor'), - IsInteger: require('./2017/IsInteger'), - IsPromise: require('./2017/IsPromise'), - IsPropertyDescriptor: require('./2017/IsPropertyDescriptor'), - IsPropertyKey: require('./2017/IsPropertyKey'), - IsRegExp: require('./2017/IsRegExp'), - IterableToList: require('./2017/IterableToList'), - IteratorClose: require('./2017/IteratorClose'), - IteratorComplete: require('./2017/IteratorComplete'), - IteratorNext: require('./2017/IteratorNext'), - IteratorStep: require('./2017/IteratorStep'), - IteratorValue: require('./2017/IteratorValue'), - MakeDate: require('./2017/MakeDate'), - MakeDay: require('./2017/MakeDay'), - MakeTime: require('./2017/MakeTime'), - MinFromTime: require('./2017/MinFromTime'), - modulo: require('./2017/modulo'), - MonthFromTime: require('./2017/MonthFromTime'), - msFromTime: require('./2017/msFromTime'), - ObjectCreate: require('./2017/ObjectCreate'), - OrdinaryCreateFromConstructor: require('./2017/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2017/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2017/OrdinaryGetOwnProperty'), - OrdinaryGetPrototypeOf: require('./2017/OrdinaryGetPrototypeOf'), - OrdinaryHasInstance: require('./2017/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2017/OrdinaryHasProperty'), - OrdinarySetPrototypeOf: require('./2017/OrdinarySetPrototypeOf'), - QuoteJSONString: require('./2017/QuoteJSONString'), - RegExpCreate: require('./2017/RegExpCreate'), - RegExpExec: require('./2017/RegExpExec'), - RequireObjectCoercible: require('./2017/RequireObjectCoercible'), - SameValue: require('./2017/SameValue'), - SameValueNonNumber: require('./2017/SameValueNonNumber'), - SameValueZero: require('./2017/SameValueZero'), - SecFromTime: require('./2017/SecFromTime'), - Set: require('./2017/Set'), - SetFunctionName: require('./2017/SetFunctionName'), - SetIntegrityLevel: require('./2017/SetIntegrityLevel'), - SpeciesConstructor: require('./2017/SpeciesConstructor'), - SplitMatch: require('./2017/SplitMatch'), - StringCreate: require('./2017/StringCreate'), - StringGetOwnProperty: require('./2017/StringGetOwnProperty'), - SymbolDescriptiveString: require('./2017/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2017/TestIntegrityLevel'), - thisBooleanValue: require('./2017/thisBooleanValue'), - thisNumberValue: require('./2017/thisNumberValue'), - thisStringValue: require('./2017/thisStringValue'), - thisTimeValue: require('./2017/thisTimeValue'), - TimeClip: require('./2017/TimeClip'), - TimeFromYear: require('./2017/TimeFromYear'), - TimeWithinDay: require('./2017/TimeWithinDay'), - ToBoolean: require('./2017/ToBoolean'), - ToDateString: require('./2017/ToDateString'), - ToIndex: require('./2017/ToIndex'), - ToInt16: require('./2017/ToInt16'), - ToInt32: require('./2017/ToInt32'), - ToInt8: require('./2017/ToInt8'), - ToInteger: require('./2017/ToInteger'), - ToLength: require('./2017/ToLength'), - ToNumber: require('./2017/ToNumber'), - ToObject: require('./2017/ToObject'), - ToPrimitive: require('./2017/ToPrimitive'), - ToPropertyDescriptor: require('./2017/ToPropertyDescriptor'), - ToPropertyKey: require('./2017/ToPropertyKey'), - ToString: require('./2017/ToString'), - ToUint16: require('./2017/ToUint16'), - ToUint32: require('./2017/ToUint32'), - ToUint8: require('./2017/ToUint8'), - ToUint8Clamp: require('./2017/ToUint8Clamp'), - Type: require('./2017/Type'), - UTF16Decode: require('./2017/UTF16Decode'), - UTF16Encoding: require('./2017/UTF16Encoding'), - ValidateAndApplyPropertyDescriptor: require('./2017/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2017/WeekDay'), - YearFromTime: require('./2017/YearFromTime') -}; - -module.exports = ES2017; diff --git a/build/node_modules/es-abstract/es2018.js b/build/node_modules/es-abstract/es2018.js deleted file mode 100644 index 2beb9890..00000000 --- a/build/node_modules/es-abstract/es2018.js +++ /dev/null @@ -1,138 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://262.ecma-international.org/9.0/#sec-abstract-operations -var ES2018 = { - 'Abstract Equality Comparison': require('./2018/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2018/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2018/StrictEqualityComparison'), - abs: require('./2018/abs'), - AdvanceStringIndex: require('./2018/AdvanceStringIndex'), - ArrayCreate: require('./2018/ArrayCreate'), - ArraySetLength: require('./2018/ArraySetLength'), - ArraySpeciesCreate: require('./2018/ArraySpeciesCreate'), - Call: require('./2018/Call'), - CanonicalNumericIndexString: require('./2018/CanonicalNumericIndexString'), - CompletePropertyDescriptor: require('./2018/CompletePropertyDescriptor'), - CopyDataProperties: require('./2018/CopyDataProperties'), - CreateDataProperty: require('./2018/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2018/CreateDataPropertyOrThrow'), - CreateHTML: require('./2018/CreateHTML'), - CreateIterResultObject: require('./2018/CreateIterResultObject'), - CreateListFromArrayLike: require('./2018/CreateListFromArrayLike'), - CreateMethodProperty: require('./2018/CreateMethodProperty'), - DateFromTime: require('./2018/DateFromTime'), - DateString: require('./2018/DateString'), - Day: require('./2018/Day'), - DayFromYear: require('./2018/DayFromYear'), - DaysInYear: require('./2018/DaysInYear'), - DayWithinYear: require('./2018/DayWithinYear'), - DefinePropertyOrThrow: require('./2018/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2018/DeletePropertyOrThrow'), - EnumerableOwnPropertyNames: require('./2018/EnumerableOwnPropertyNames'), - floor: require('./2018/floor'), - FromPropertyDescriptor: require('./2018/FromPropertyDescriptor'), - Get: require('./2018/Get'), - GetIterator: require('./2018/GetIterator'), - GetMethod: require('./2018/GetMethod'), - GetOwnPropertyKeys: require('./2018/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2018/GetPrototypeFromConstructor'), - GetSubstitution: require('./2018/GetSubstitution'), - GetV: require('./2018/GetV'), - HasOwnProperty: require('./2018/HasOwnProperty'), - HasProperty: require('./2018/HasProperty'), - HourFromTime: require('./2018/HourFromTime'), - InLeapYear: require('./2018/InLeapYear'), - InstanceofOperator: require('./2018/InstanceofOperator'), - Invoke: require('./2018/Invoke'), - IsAccessorDescriptor: require('./2018/IsAccessorDescriptor'), - IsArray: require('./2018/IsArray'), - IsCallable: require('./2018/IsCallable'), - IsConcatSpreadable: require('./2018/IsConcatSpreadable'), - IsConstructor: require('./2018/IsConstructor'), - IsDataDescriptor: require('./2018/IsDataDescriptor'), - IsExtensible: require('./2018/IsExtensible'), - IsGenericDescriptor: require('./2018/IsGenericDescriptor'), - IsInteger: require('./2018/IsInteger'), - IsPromise: require('./2018/IsPromise'), - IsPropertyKey: require('./2018/IsPropertyKey'), - IsRegExp: require('./2018/IsRegExp'), - IsStringPrefix: require('./2018/IsStringPrefix'), - IterableToList: require('./2018/IterableToList'), - IteratorClose: require('./2018/IteratorClose'), - IteratorComplete: require('./2018/IteratorComplete'), - IteratorNext: require('./2018/IteratorNext'), - IteratorStep: require('./2018/IteratorStep'), - IteratorValue: require('./2018/IteratorValue'), - MakeDate: require('./2018/MakeDate'), - MakeDay: require('./2018/MakeDay'), - MakeTime: require('./2018/MakeTime'), - MinFromTime: require('./2018/MinFromTime'), - modulo: require('./2018/modulo'), - MonthFromTime: require('./2018/MonthFromTime'), - msFromTime: require('./2018/msFromTime'), - NumberToString: require('./2018/NumberToString'), - ObjectCreate: require('./2018/ObjectCreate'), - OrdinaryCreateFromConstructor: require('./2018/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2018/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2018/OrdinaryGetOwnProperty'), - OrdinaryGetPrototypeOf: require('./2018/OrdinaryGetPrototypeOf'), - OrdinaryHasInstance: require('./2018/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2018/OrdinaryHasProperty'), - OrdinarySetPrototypeOf: require('./2018/OrdinarySetPrototypeOf'), - PromiseResolve: require('./2018/PromiseResolve'), - QuoteJSONString: require('./2018/QuoteJSONString'), - RegExpCreate: require('./2018/RegExpCreate'), - RegExpExec: require('./2018/RegExpExec'), - RequireObjectCoercible: require('./2018/RequireObjectCoercible'), - SameValue: require('./2018/SameValue'), - SameValueNonNumber: require('./2018/SameValueNonNumber'), - SameValueZero: require('./2018/SameValueZero'), - SecFromTime: require('./2018/SecFromTime'), - Set: require('./2018/Set'), - SetFunctionLength: require('./2018/SetFunctionLength'), - SetFunctionName: require('./2018/SetFunctionName'), - SetIntegrityLevel: require('./2018/SetIntegrityLevel'), - SpeciesConstructor: require('./2018/SpeciesConstructor'), - SplitMatch: require('./2018/SplitMatch'), - StringCreate: require('./2018/StringCreate'), - StringGetOwnProperty: require('./2018/StringGetOwnProperty'), - SymbolDescriptiveString: require('./2018/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2018/TestIntegrityLevel'), - thisBooleanValue: require('./2018/thisBooleanValue'), - thisNumberValue: require('./2018/thisNumberValue'), - thisStringValue: require('./2018/thisStringValue'), - thisSymbolValue: require('./2018/thisSymbolValue'), - thisTimeValue: require('./2018/thisTimeValue'), - TimeClip: require('./2018/TimeClip'), - TimeFromYear: require('./2018/TimeFromYear'), - TimeString: require('./2018/TimeString'), - TimeWithinDay: require('./2018/TimeWithinDay'), - ToBoolean: require('./2018/ToBoolean'), - ToDateString: require('./2018/ToDateString'), - ToIndex: require('./2018/ToIndex'), - ToInt16: require('./2018/ToInt16'), - ToInt32: require('./2018/ToInt32'), - ToInt8: require('./2018/ToInt8'), - ToInteger: require('./2018/ToInteger'), - ToLength: require('./2018/ToLength'), - ToNumber: require('./2018/ToNumber'), - ToObject: require('./2018/ToObject'), - ToPrimitive: require('./2018/ToPrimitive'), - ToPropertyDescriptor: require('./2018/ToPropertyDescriptor'), - ToPropertyKey: require('./2018/ToPropertyKey'), - ToString: require('./2018/ToString'), - ToUint16: require('./2018/ToUint16'), - ToUint32: require('./2018/ToUint32'), - ToUint8: require('./2018/ToUint8'), - ToUint8Clamp: require('./2018/ToUint8Clamp'), - Type: require('./2018/Type'), - UnicodeEscape: require('./2018/UnicodeEscape'), - UTF16Decode: require('./2018/UTF16Decode'), - UTF16Encoding: require('./2018/UTF16Encoding'), - ValidateAndApplyPropertyDescriptor: require('./2018/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2018/WeekDay'), - YearFromTime: require('./2018/YearFromTime') -}; - -module.exports = ES2018; diff --git a/build/node_modules/es-abstract/es2019.js b/build/node_modules/es-abstract/es2019.js deleted file mode 100644 index a49e1152..00000000 --- a/build/node_modules/es-abstract/es2019.js +++ /dev/null @@ -1,141 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://262.ecma-international.org/10.0/#sec-abstract-operations -var ES2019 = { - 'Abstract Equality Comparison': require('./2019/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2019/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2019/StrictEqualityComparison'), - abs: require('./2019/abs'), - AddEntriesFromIterable: require('./2019/AddEntriesFromIterable'), - AdvanceStringIndex: require('./2019/AdvanceStringIndex'), - ArrayCreate: require('./2019/ArrayCreate'), - ArraySetLength: require('./2019/ArraySetLength'), - ArraySpeciesCreate: require('./2019/ArraySpeciesCreate'), - Call: require('./2019/Call'), - CanonicalNumericIndexString: require('./2019/CanonicalNumericIndexString'), - CompletePropertyDescriptor: require('./2019/CompletePropertyDescriptor'), - CopyDataProperties: require('./2019/CopyDataProperties'), - CreateDataProperty: require('./2019/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2019/CreateDataPropertyOrThrow'), - CreateHTML: require('./2019/CreateHTML'), - CreateIterResultObject: require('./2019/CreateIterResultObject'), - CreateListFromArrayLike: require('./2019/CreateListFromArrayLike'), - CreateMethodProperty: require('./2019/CreateMethodProperty'), - DateFromTime: require('./2019/DateFromTime'), - DateString: require('./2019/DateString'), - Day: require('./2019/Day'), - DayFromYear: require('./2019/DayFromYear'), - DaysInYear: require('./2019/DaysInYear'), - DayWithinYear: require('./2019/DayWithinYear'), - DefinePropertyOrThrow: require('./2019/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2019/DeletePropertyOrThrow'), - EnumerableOwnPropertyNames: require('./2019/EnumerableOwnPropertyNames'), - FlattenIntoArray: require('./2019/FlattenIntoArray'), - floor: require('./2019/floor'), - FromPropertyDescriptor: require('./2019/FromPropertyDescriptor'), - Get: require('./2019/Get'), - GetIterator: require('./2019/GetIterator'), - GetMethod: require('./2019/GetMethod'), - GetOwnPropertyKeys: require('./2019/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2019/GetPrototypeFromConstructor'), - GetSubstitution: require('./2019/GetSubstitution'), - GetV: require('./2019/GetV'), - HasOwnProperty: require('./2019/HasOwnProperty'), - HasProperty: require('./2019/HasProperty'), - HourFromTime: require('./2019/HourFromTime'), - InLeapYear: require('./2019/InLeapYear'), - InstanceofOperator: require('./2019/InstanceofOperator'), - Invoke: require('./2019/Invoke'), - IsAccessorDescriptor: require('./2019/IsAccessorDescriptor'), - IsArray: require('./2019/IsArray'), - IsCallable: require('./2019/IsCallable'), - IsConcatSpreadable: require('./2019/IsConcatSpreadable'), - IsConstructor: require('./2019/IsConstructor'), - IsDataDescriptor: require('./2019/IsDataDescriptor'), - IsExtensible: require('./2019/IsExtensible'), - IsGenericDescriptor: require('./2019/IsGenericDescriptor'), - IsInteger: require('./2019/IsInteger'), - IsPromise: require('./2019/IsPromise'), - IsPropertyKey: require('./2019/IsPropertyKey'), - IsRegExp: require('./2019/IsRegExp'), - IsStringPrefix: require('./2019/IsStringPrefix'), - IterableToList: require('./2019/IterableToList'), - IteratorClose: require('./2019/IteratorClose'), - IteratorComplete: require('./2019/IteratorComplete'), - IteratorNext: require('./2019/IteratorNext'), - IteratorStep: require('./2019/IteratorStep'), - IteratorValue: require('./2019/IteratorValue'), - MakeDate: require('./2019/MakeDate'), - MakeDay: require('./2019/MakeDay'), - MakeTime: require('./2019/MakeTime'), - MinFromTime: require('./2019/MinFromTime'), - modulo: require('./2019/modulo'), - MonthFromTime: require('./2019/MonthFromTime'), - msFromTime: require('./2019/msFromTime'), - NumberToString: require('./2019/NumberToString'), - ObjectCreate: require('./2019/ObjectCreate'), - OrdinaryCreateFromConstructor: require('./2019/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2019/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2019/OrdinaryGetOwnProperty'), - OrdinaryGetPrototypeOf: require('./2019/OrdinaryGetPrototypeOf'), - OrdinaryHasInstance: require('./2019/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2019/OrdinaryHasProperty'), - OrdinarySetPrototypeOf: require('./2019/OrdinarySetPrototypeOf'), - PromiseResolve: require('./2019/PromiseResolve'), - QuoteJSONString: require('./2019/QuoteJSONString'), - RegExpCreate: require('./2019/RegExpCreate'), - RegExpExec: require('./2019/RegExpExec'), - RequireObjectCoercible: require('./2019/RequireObjectCoercible'), - SameValue: require('./2019/SameValue'), - SameValueNonNumber: require('./2019/SameValueNonNumber'), - SameValueZero: require('./2019/SameValueZero'), - SecFromTime: require('./2019/SecFromTime'), - Set: require('./2019/Set'), - SetFunctionLength: require('./2019/SetFunctionLength'), - SetFunctionName: require('./2019/SetFunctionName'), - SetIntegrityLevel: require('./2019/SetIntegrityLevel'), - SpeciesConstructor: require('./2019/SpeciesConstructor'), - SplitMatch: require('./2019/SplitMatch'), - StringCreate: require('./2019/StringCreate'), - StringGetOwnProperty: require('./2019/StringGetOwnProperty'), - SymbolDescriptiveString: require('./2019/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2019/TestIntegrityLevel'), - thisBooleanValue: require('./2019/thisBooleanValue'), - thisNumberValue: require('./2019/thisNumberValue'), - thisStringValue: require('./2019/thisStringValue'), - thisSymbolValue: require('./2019/thisSymbolValue'), - thisTimeValue: require('./2019/thisTimeValue'), - TimeClip: require('./2019/TimeClip'), - TimeFromYear: require('./2019/TimeFromYear'), - TimeString: require('./2019/TimeString'), - TimeWithinDay: require('./2019/TimeWithinDay'), - ToBoolean: require('./2019/ToBoolean'), - ToDateString: require('./2019/ToDateString'), - ToIndex: require('./2019/ToIndex'), - ToInt16: require('./2019/ToInt16'), - ToInt32: require('./2019/ToInt32'), - ToInt8: require('./2019/ToInt8'), - ToInteger: require('./2019/ToInteger'), - ToLength: require('./2019/ToLength'), - ToNumber: require('./2019/ToNumber'), - ToObject: require('./2019/ToObject'), - ToPrimitive: require('./2019/ToPrimitive'), - ToPropertyDescriptor: require('./2019/ToPropertyDescriptor'), - ToPropertyKey: require('./2019/ToPropertyKey'), - ToString: require('./2019/ToString'), - ToUint16: require('./2019/ToUint16'), - ToUint32: require('./2019/ToUint32'), - ToUint8: require('./2019/ToUint8'), - ToUint8Clamp: require('./2019/ToUint8Clamp'), - TrimString: require('./2019/TrimString'), - Type: require('./2019/Type'), - UnicodeEscape: require('./2019/UnicodeEscape'), - UTF16Decode: require('./2019/UTF16Decode'), - UTF16Encoding: require('./2019/UTF16Encoding'), - ValidateAndApplyPropertyDescriptor: require('./2019/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2019/WeekDay'), - YearFromTime: require('./2019/YearFromTime') -}; - -module.exports = ES2019; diff --git a/build/node_modules/es-abstract/es2020.js b/build/node_modules/es-abstract/es2020.js deleted file mode 100644 index e6d1c794..00000000 --- a/build/node_modules/es-abstract/es2020.js +++ /dev/null @@ -1,159 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ -// https://ecma-international.org/ecma-262/11.0/#sec-abstract-operations -var ES2020 = { - 'Abstract Equality Comparison': require('./2020/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./2020/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./2020/StrictEqualityComparison'), - abs: require('./2020/abs'), - AddEntriesFromIterable: require('./2020/AddEntriesFromIterable'), - AdvanceStringIndex: require('./2020/AdvanceStringIndex'), - ArrayCreate: require('./2020/ArrayCreate'), - ArraySetLength: require('./2020/ArraySetLength'), - ArraySpeciesCreate: require('./2020/ArraySpeciesCreate'), - BigInt: require('./2020/BigInt'), - BigIntBitwiseOp: require('./2020/BigIntBitwiseOp'), - BinaryAnd: require('./2020/BinaryAnd'), - BinaryOr: require('./2020/BinaryOr'), - BinaryXor: require('./2020/BinaryXor'), - Call: require('./2020/Call'), - CanonicalNumericIndexString: require('./2020/CanonicalNumericIndexString'), - CodePointAt: require('./2020/CodePointAt'), - CompletePropertyDescriptor: require('./2020/CompletePropertyDescriptor'), - CopyDataProperties: require('./2020/CopyDataProperties'), - CreateDataProperty: require('./2020/CreateDataProperty'), - CreateDataPropertyOrThrow: require('./2020/CreateDataPropertyOrThrow'), - CreateHTML: require('./2020/CreateHTML'), - CreateIterResultObject: require('./2020/CreateIterResultObject'), - CreateListFromArrayLike: require('./2020/CreateListFromArrayLike'), - CreateMethodProperty: require('./2020/CreateMethodProperty'), - DateFromTime: require('./2020/DateFromTime'), - DateString: require('./2020/DateString'), - Day: require('./2020/Day'), - DayFromYear: require('./2020/DayFromYear'), - DaysInYear: require('./2020/DaysInYear'), - DayWithinYear: require('./2020/DayWithinYear'), - DefinePropertyOrThrow: require('./2020/DefinePropertyOrThrow'), - DeletePropertyOrThrow: require('./2020/DeletePropertyOrThrow'), - EnumerableOwnPropertyNames: require('./2020/EnumerableOwnPropertyNames'), - FlattenIntoArray: require('./2020/FlattenIntoArray'), - floor: require('./2020/floor'), - FromPropertyDescriptor: require('./2020/FromPropertyDescriptor'), - Get: require('./2020/Get'), - GetIterator: require('./2020/GetIterator'), - GetMethod: require('./2020/GetMethod'), - GetOwnPropertyKeys: require('./2020/GetOwnPropertyKeys'), - GetPrototypeFromConstructor: require('./2020/GetPrototypeFromConstructor'), - GetSubstitution: require('./2020/GetSubstitution'), - GetV: require('./2020/GetV'), - HasOwnProperty: require('./2020/HasOwnProperty'), - HasProperty: require('./2020/HasProperty'), - HourFromTime: require('./2020/HourFromTime'), - InLeapYear: require('./2020/InLeapYear'), - InstanceofOperator: require('./2020/InstanceofOperator'), - Invoke: require('./2020/Invoke'), - IsAccessorDescriptor: require('./2020/IsAccessorDescriptor'), - IsArray: require('./2020/IsArray'), - IsBigIntElementType: require('./2020/IsBigIntElementType'), - IsCallable: require('./2020/IsCallable'), - IsConcatSpreadable: require('./2020/IsConcatSpreadable'), - IsConstructor: require('./2020/IsConstructor'), - IsDataDescriptor: require('./2020/IsDataDescriptor'), - IsExtensible: require('./2020/IsExtensible'), - IsGenericDescriptor: require('./2020/IsGenericDescriptor'), - IsInteger: require('./2020/IsInteger'), - IsNonNegativeInteger: require('./2020/IsNonNegativeInteger'), - IsNoTearConfiguration: require('./2020/IsNoTearConfiguration'), - IsPromise: require('./2020/IsPromise'), - IsPropertyKey: require('./2020/IsPropertyKey'), - IsRegExp: require('./2020/IsRegExp'), - IsStringPrefix: require('./2020/IsStringPrefix'), - IsUnclampedIntegerElementType: require('./2020/IsUnclampedIntegerElementType'), - IsUnsignedElementType: require('./2020/IsUnsignedElementType'), - IterableToList: require('./2020/IterableToList'), - IteratorClose: require('./2020/IteratorClose'), - IteratorComplete: require('./2020/IteratorComplete'), - IteratorNext: require('./2020/IteratorNext'), - IteratorStep: require('./2020/IteratorStep'), - IteratorValue: require('./2020/IteratorValue'), - LengthOfArrayLike: require('./2020/LengthOfArrayLike'), - MakeDate: require('./2020/MakeDate'), - MakeDay: require('./2020/MakeDay'), - MakeTime: require('./2020/MakeTime'), - MinFromTime: require('./2020/MinFromTime'), - modulo: require('./2020/modulo'), - MonthFromTime: require('./2020/MonthFromTime'), - msFromTime: require('./2020/msFromTime'), - Number: require('./2020/Number'), - NumberBitwiseOp: require('./2020/NumberBitwiseOp'), - NumberToBigInt: require('./2020/NumberToBigInt'), - OrdinaryCreateFromConstructor: require('./2020/OrdinaryCreateFromConstructor'), - OrdinaryDefineOwnProperty: require('./2020/OrdinaryDefineOwnProperty'), - OrdinaryGetOwnProperty: require('./2020/OrdinaryGetOwnProperty'), - OrdinaryGetPrototypeOf: require('./2020/OrdinaryGetPrototypeOf'), - OrdinaryHasInstance: require('./2020/OrdinaryHasInstance'), - OrdinaryHasProperty: require('./2020/OrdinaryHasProperty'), - OrdinaryObjectCreate: require('./2020/OrdinaryObjectCreate'), - OrdinarySetPrototypeOf: require('./2020/OrdinarySetPrototypeOf'), - PromiseResolve: require('./2020/PromiseResolve'), - QuoteJSONString: require('./2020/QuoteJSONString'), - RegExpCreate: require('./2020/RegExpCreate'), - RegExpExec: require('./2020/RegExpExec'), - RequireObjectCoercible: require('./2020/RequireObjectCoercible'), - SameValue: require('./2020/SameValue'), - SameValueNonNumeric: require('./2020/SameValueNonNumeric'), - SameValueZero: require('./2020/SameValueZero'), - SecFromTime: require('./2020/SecFromTime'), - Set: require('./2020/Set'), - SetFunctionLength: require('./2020/SetFunctionLength'), - SetFunctionName: require('./2020/SetFunctionName'), - SetIntegrityLevel: require('./2020/SetIntegrityLevel'), - SpeciesConstructor: require('./2020/SpeciesConstructor'), - SplitMatch: require('./2020/SplitMatch'), - StringCreate: require('./2020/StringCreate'), - StringGetOwnProperty: require('./2020/StringGetOwnProperty'), - StringPad: require('./2020/StringPad'), - SymbolDescriptiveString: require('./2020/SymbolDescriptiveString'), - TestIntegrityLevel: require('./2020/TestIntegrityLevel'), - thisBigIntValue: require('./2020/thisBigIntValue'), - thisBooleanValue: require('./2020/thisBooleanValue'), - thisNumberValue: require('./2020/thisNumberValue'), - thisStringValue: require('./2020/thisStringValue'), - thisSymbolValue: require('./2020/thisSymbolValue'), - thisTimeValue: require('./2020/thisTimeValue'), - TimeClip: require('./2020/TimeClip'), - TimeFromYear: require('./2020/TimeFromYear'), - TimeString: require('./2020/TimeString'), - TimeWithinDay: require('./2020/TimeWithinDay'), - ToBoolean: require('./2020/ToBoolean'), - ToDateString: require('./2020/ToDateString'), - ToIndex: require('./2020/ToIndex'), - ToInt16: require('./2020/ToInt16'), - ToInt32: require('./2020/ToInt32'), - ToInt8: require('./2020/ToInt8'), - ToInteger: require('./2020/ToInteger'), - ToLength: require('./2020/ToLength'), - ToNumber: require('./2020/ToNumber'), - ToNumeric: require('./2020/ToNumeric'), - ToObject: require('./2020/ToObject'), - ToPrimitive: require('./2020/ToPrimitive'), - ToPropertyDescriptor: require('./2020/ToPropertyDescriptor'), - ToPropertyKey: require('./2020/ToPropertyKey'), - ToString: require('./2020/ToString'), - ToUint16: require('./2020/ToUint16'), - ToUint32: require('./2020/ToUint32'), - ToUint8: require('./2020/ToUint8'), - ToUint8Clamp: require('./2020/ToUint8Clamp'), - TrimString: require('./2020/TrimString'), - Type: require('./2020/Type'), - UnicodeEscape: require('./2020/UnicodeEscape'), - UTF16DecodeString: require('./2020/UTF16DecodeString'), - UTF16DecodeSurrogatePair: require('./2020/UTF16DecodeSurrogatePair'), - UTF16Encoding: require('./2020/UTF16Encoding'), - ValidateAndApplyPropertyDescriptor: require('./2020/ValidateAndApplyPropertyDescriptor'), - WeekDay: require('./2020/WeekDay'), - YearFromTime: require('./2020/YearFromTime') -}; - -module.exports = ES2020; diff --git a/build/node_modules/es-abstract/es5.js b/build/node_modules/es-abstract/es5.js deleted file mode 100644 index 46eb6e17..00000000 --- a/build/node_modules/es-abstract/es5.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -/* eslint global-require: 0 */ - -// https://es5.github.io/#x9 -module.exports = { - 'Abstract Equality Comparison': require('./5/AbstractEqualityComparison'), - 'Abstract Relational Comparison': require('./5/AbstractRelationalComparison'), - 'Strict Equality Comparison': require('./5/StrictEqualityComparison'), - abs: require('./5/abs'), - CheckObjectCoercible: require('./5/CheckObjectCoercible'), - DateFromTime: require('./5/DateFromTime'), - Day: require('./5/Day'), - DayFromYear: require('./5/DayFromYear'), - DaysInYear: require('./5/DaysInYear'), - DayWithinYear: require('./5/DayWithinYear'), - floor: require('./5/floor'), - FromPropertyDescriptor: require('./5/FromPropertyDescriptor'), - HourFromTime: require('./5/HourFromTime'), - InLeapYear: require('./5/InLeapYear'), - IsAccessorDescriptor: require('./5/IsAccessorDescriptor'), - IsCallable: require('./5/IsCallable'), - IsDataDescriptor: require('./5/IsDataDescriptor'), - IsGenericDescriptor: require('./5/IsGenericDescriptor'), - IsPropertyDescriptor: require('./5/IsPropertyDescriptor'), - MakeDate: require('./5/MakeDate'), - MakeDay: require('./5/MakeDay'), - MakeTime: require('./5/MakeTime'), - MinFromTime: require('./5/MinFromTime'), - modulo: require('./5/modulo'), - MonthFromTime: require('./5/MonthFromTime'), - msFromTime: require('./5/msFromTime'), - SameValue: require('./5/SameValue'), - SecFromTime: require('./5/SecFromTime'), - TimeClip: require('./5/TimeClip'), - TimeFromYear: require('./5/TimeFromYear'), - TimeWithinDay: require('./5/TimeWithinDay'), - ToBoolean: require('./5/ToBoolean'), - ToInt32: require('./5/ToInt32'), - ToInteger: require('./5/ToInteger'), - ToNumber: require('./5/ToNumber'), - ToObject: require('./5/ToObject'), - ToPrimitive: require('./5/ToPrimitive'), - ToPropertyDescriptor: require('./5/ToPropertyDescriptor'), - ToString: require('./5/ToString'), - ToUint16: require('./5/ToUint16'), - ToUint32: require('./5/ToUint32'), - Type: require('./5/Type'), - WeekDay: require('./5/WeekDay'), - YearFromTime: require('./5/YearFromTime') -}; diff --git a/build/node_modules/es-abstract/es6.js b/build/node_modules/es-abstract/es6.js deleted file mode 100644 index 2d1f4dc9..00000000 --- a/build/node_modules/es-abstract/es6.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./es2015'); diff --git a/build/node_modules/es-abstract/es7.js b/build/node_modules/es-abstract/es7.js deleted file mode 100644 index f2f15c0a..00000000 --- a/build/node_modules/es-abstract/es7.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./es2016'); diff --git a/build/node_modules/es-abstract/helpers/DefineOwnProperty.js b/build/node_modules/es-abstract/helpers/DefineOwnProperty.js deleted file mode 100644 index 1a378a41..00000000 --- a/build/node_modules/es-abstract/helpers/DefineOwnProperty.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); - -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = null; - } -} - -var callBound = require('call-bind/callBound'); - -var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); - -// eslint-disable-next-line max-params -module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) { - if (!$defineProperty) { - if (!IsDataDescriptor(desc)) { - // ES3 does not support getters/setters - return false; - } - if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) { - return false; - } - - // fallback for ES3 - if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) { - // a non-enumerable existing property - return false; - } - - // property does not exist at all, or exists but is enumerable - var V = desc['[[Value]]']; - // eslint-disable-next-line no-param-reassign - O[P] = V; // will use [[Define]] - return SameValue(O[P], V); - } - $defineProperty(O, P, FromPropertyDescriptor(desc)); - return true; -}; diff --git a/build/node_modules/es-abstract/helpers/OwnPropertyKeys.js b/build/node_modules/es-abstract/helpers/OwnPropertyKeys.js deleted file mode 100644 index 6baa986f..00000000 --- a/build/node_modules/es-abstract/helpers/OwnPropertyKeys.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBind = require('call-bind'); -var callBound = require('call-bind/callBound'); - -var $ownKeys = GetIntrinsic('%Reflect.ownKeys%', true); -var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%')); -var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); -var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); -var $gOPS = $SymbolValueOf ? GetIntrinsic('%Object.getOwnPropertySymbols%') : null; - -var keys = require('object-keys'); - -module.exports = $ownKeys || function OwnPropertyKeys(source) { - var ownKeys = ($gOPN || keys)(source); - if ($gOPS) { - $pushApply(ownKeys, $gOPS(source)); - } - return ownKeys; -}; diff --git a/build/node_modules/es-abstract/helpers/assertRecord.js b/build/node_modules/es-abstract/helpers/assertRecord.js deleted file mode 100644 index 623bc56d..00000000 --- a/build/node_modules/es-abstract/helpers/assertRecord.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $TypeError = GetIntrinsic('%TypeError%'); -var $SyntaxError = GetIntrinsic('%SyntaxError%'); - -var has = require('has'); - -var predicates = { - // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type - 'Property Descriptor': function isPropertyDescriptor(Type, Desc) { - if (Type(Desc) !== 'Object') { - return false; - } - var allowed = { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Get]]': true, - '[[Set]]': true, - '[[Value]]': true, - '[[Writable]]': true - }; - - for (var key in Desc) { // eslint-disable-line - if (has(Desc, key) && !allowed[key]) { - return false; - } - } - - var isData = has(Desc, '[[Value]]'); - var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]'); - if (isData && IsAccessor) { - throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); - } - return true; - } -}; - -module.exports = function assertRecord(Type, recordType, argumentName, value) { - var predicate = predicates[recordType]; - if (typeof predicate !== 'function') { - throw new $SyntaxError('unknown record type: ' + recordType); - } - if (!predicate(Type, value)) { - throw new $TypeError(argumentName + ' must be a ' + recordType); - } -}; diff --git a/build/node_modules/es-abstract/helpers/assign.js b/build/node_modules/es-abstract/helpers/assign.js deleted file mode 100644 index 56eeb1c1..00000000 --- a/build/node_modules/es-abstract/helpers/assign.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); - -var $assign = GetIntrinsic('%Object%').assign; - -module.exports = function assign(target, source) { - if ($assign) { - return $assign(target, source); - } - - // eslint-disable-next-line no-restricted-syntax - for (var key in source) { - if (has(source, key)) { - // eslint-disable-next-line no-param-reassign - target[key] = source[key]; - } - } - return target; -}; diff --git a/build/node_modules/es-abstract/helpers/callBind.js b/build/node_modules/es-abstract/helpers/callBind.js deleted file mode 100644 index 699dba70..00000000 --- a/build/node_modules/es-abstract/helpers/callBind.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// TODO; semver-major: remove - -module.exports = require('call-bind'); diff --git a/build/node_modules/es-abstract/helpers/callBound.js b/build/node_modules/es-abstract/helpers/callBound.js deleted file mode 100644 index 349030cb..00000000 --- a/build/node_modules/es-abstract/helpers/callBound.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -// TODO; semver-major: remove - -module.exports = require('call-bind/callBound'); diff --git a/build/node_modules/es-abstract/helpers/every.js b/build/node_modules/es-abstract/helpers/every.js deleted file mode 100644 index 42a45821..00000000 --- a/build/node_modules/es-abstract/helpers/every.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = function every(array, predicate) { - for (var i = 0; i < array.length; i += 1) { - if (!predicate(array[i], i, array)) { - return false; - } - } - return true; -}; diff --git a/build/node_modules/es-abstract/helpers/forEach.js b/build/node_modules/es-abstract/helpers/forEach.js deleted file mode 100644 index 35915a65..00000000 --- a/build/node_modules/es-abstract/helpers/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -module.exports = function forEach(array, callback) { - for (var i = 0; i < array.length; i += 1) { - callback(array[i], i, array); // eslint-disable-line callback-return - } -}; diff --git a/build/node_modules/es-abstract/helpers/getInferredName.js b/build/node_modules/es-abstract/helpers/getInferredName.js deleted file mode 100644 index 2dab6e77..00000000 --- a/build/node_modules/es-abstract/helpers/getInferredName.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var getInferredName; -try { - // eslint-disable-next-line no-new-func - getInferredName = Function('s', 'return { [s]() {} }[s].name;'); -} catch (e) {} - -var inferred = function () {}; -module.exports = getInferredName && inferred.name === 'inferred' ? getInferredName : null; diff --git a/build/node_modules/es-abstract/helpers/getIteratorMethod.js b/build/node_modules/es-abstract/helpers/getIteratorMethod.js deleted file mode 100644 index fe581f41..00000000 --- a/build/node_modules/es-abstract/helpers/getIteratorMethod.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var hasSymbols = require('has-symbols')(); -var GetIntrinsic = require('get-intrinsic'); -var callBound = require('call-bind/callBound'); - -var $iterator = GetIntrinsic('%Symbol.iterator%', true); -var $stringSlice = callBound('String.prototype.slice'); - -module.exports = function getIteratorMethod(ES, iterable) { - var usingIterator; - if (hasSymbols) { - usingIterator = ES.GetMethod(iterable, $iterator); - } else if (ES.IsArray(iterable)) { - usingIterator = function () { - var i = -1; - var arr = this; // eslint-disable-line no-invalid-this - return { - next: function () { - i += 1; - return { - done: i >= arr.length, - value: arr[i] - }; - } - }; - }; - } else if (ES.Type(iterable) === 'String') { - usingIterator = function () { - var i = 0; - return { - next: function () { - var nextIndex = ES.AdvanceStringIndex(iterable, i, true); - var value = $stringSlice(iterable, i, nextIndex); - i = nextIndex; - return { - done: nextIndex > iterable.length, - value: value - }; - } - }; - }; - } - return usingIterator; -}; diff --git a/build/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js b/build/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js deleted file mode 100644 index 79cf0488..00000000 --- a/build/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%'); -if ($gOPD) { - try { - $gOPD([], 'length'); - } catch (e) { - // IE 8 has a broken gOPD - $gOPD = null; - } -} - -module.exports = $gOPD; diff --git a/build/node_modules/es-abstract/helpers/getProto.js b/build/node_modules/es-abstract/helpers/getProto.js deleted file mode 100644 index c190c7bd..00000000 --- a/build/node_modules/es-abstract/helpers/getProto.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var originalGetProto = GetIntrinsic('%Object.getPrototypeOf%', true); -var $ArrayProto = GetIntrinsic('%Array.prototype%'); - -module.exports = originalGetProto || ( - // eslint-disable-next-line no-proto - [].__proto__ === $ArrayProto - ? function (O) { - return O.__proto__; // eslint-disable-line no-proto - } - : null -); diff --git a/build/node_modules/es-abstract/helpers/getSymbolDescription.js b/build/node_modules/es-abstract/helpers/getSymbolDescription.js deleted file mode 100644 index e31cad27..00000000 --- a/build/node_modules/es-abstract/helpers/getSymbolDescription.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBound = require('call-bind/callBound'); - -var $SyntaxError = GetIntrinsic('%SyntaxError%'); -var getGlobalSymbolDescription = GetIntrinsic('%Symbol.keyFor%', true); -var thisSymbolValue = callBound('%Symbol.prototype.valueOf%', true); -var symToStr = callBound('Symbol.prototype.toString', true); - -var getInferredName = require('./getInferredName'); - -/* eslint-disable consistent-return */ -module.exports = callBound('%Symbol.prototype.description%', true) || function getSymbolDescription(symbol) { - if (!thisSymbolValue) { - throw new $SyntaxError('Symbols are not supported in this environment'); - } - - // will throw if not a symbol primitive or wrapper object - var sym = thisSymbolValue(symbol); - - if (getInferredName) { - var name = getInferredName(sym); - if (name === '') { return; } - return name.slice(1, -1); // name.slice('['.length, -']'.length); - } - - var desc; - if (getGlobalSymbolDescription) { - desc = getGlobalSymbolDescription(sym); - if (typeof desc === 'string') { - return desc; - } - } - - desc = symToStr(sym).slice(7, -1); // str.slice('Symbol('.length, -')'.length); - if (desc) { - return desc; - } -}; diff --git a/build/node_modules/es-abstract/helpers/isByteValue.js b/build/node_modules/es-abstract/helpers/isByteValue.js deleted file mode 100644 index 1a7d0d35..00000000 --- a/build/node_modules/es-abstract/helpers/isByteValue.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isByteValue(value) { - return typeof value === 'number' && value >= 0 && value <= 255 && (value | 0) === value; -}; diff --git a/build/node_modules/es-abstract/helpers/isCodePoint.js b/build/node_modules/es-abstract/helpers/isCodePoint.js deleted file mode 100644 index acda02e9..00000000 --- a/build/node_modules/es-abstract/helpers/isCodePoint.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isCodePoint(cp) { - return typeof cp === 'number' && cp >= 0 && cp <= 0x10FFFF && (cp | 0) === cp; -}; diff --git a/build/node_modules/es-abstract/helpers/isFinite.js b/build/node_modules/es-abstract/helpers/isFinite.js deleted file mode 100644 index 9e7cd4f8..00000000 --- a/build/node_modules/es-abstract/helpers/isFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -var $isNaN = Number.isNaN || function (a) { return a !== a; }; - -module.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; }; diff --git a/build/node_modules/es-abstract/helpers/isLeadingSurrogate.js b/build/node_modules/es-abstract/helpers/isLeadingSurrogate.js deleted file mode 100644 index fec61b2a..00000000 --- a/build/node_modules/es-abstract/helpers/isLeadingSurrogate.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isLeadingSurrogate(charCode) { - return typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF; -}; diff --git a/build/node_modules/es-abstract/helpers/isNaN.js b/build/node_modules/es-abstract/helpers/isNaN.js deleted file mode 100644 index cb8631dc..00000000 --- a/build/node_modules/es-abstract/helpers/isNaN.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = Number.isNaN || function isNaN(a) { - return a !== a; -}; diff --git a/build/node_modules/es-abstract/helpers/isPrefixOf.js b/build/node_modules/es-abstract/helpers/isPrefixOf.js deleted file mode 100644 index 0f644d74..00000000 --- a/build/node_modules/es-abstract/helpers/isPrefixOf.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var $strSlice = require('call-bind/callBound')('String.prototype.slice'); - -module.exports = function isPrefixOf(prefix, string) { - if (prefix === string) { - return true; - } - if (prefix.length > string.length) { - return false; - } - return $strSlice(string, 0, prefix.length) === prefix; -}; diff --git a/build/node_modules/es-abstract/helpers/isPrimitive.js b/build/node_modules/es-abstract/helpers/isPrimitive.js deleted file mode 100644 index 06f0bf04..00000000 --- a/build/node_modules/es-abstract/helpers/isPrimitive.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isPrimitive(value) { - return value === null || (typeof value !== 'function' && typeof value !== 'object'); -}; diff --git a/build/node_modules/es-abstract/helpers/isPropertyDescriptor.js b/build/node_modules/es-abstract/helpers/isPropertyDescriptor.js deleted file mode 100644 index 900964d7..00000000 --- a/build/node_modules/es-abstract/helpers/isPropertyDescriptor.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var has = require('has'); -var $TypeError = GetIntrinsic('%TypeError%'); - -module.exports = function IsPropertyDescriptor(ES, Desc) { - if (ES.Type(Desc) !== 'Object') { - return false; - } - var allowed = { - '[[Configurable]]': true, - '[[Enumerable]]': true, - '[[Get]]': true, - '[[Set]]': true, - '[[Value]]': true, - '[[Writable]]': true - }; - - for (var key in Desc) { // eslint-disable-line no-restricted-syntax - if (has(Desc, key) && !allowed[key]) { - return false; - } - } - - if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) { - throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); - } - return true; -}; diff --git a/build/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js b/build/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js deleted file mode 100644 index a6162a1d..00000000 --- a/build/node_modules/es-abstract/helpers/isSamePropertyDescriptor.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var every = require('./every'); - -module.exports = function isSamePropertyDescriptor(ES, D1, D2) { - var fields = [ - '[[Configurable]]', - '[[Enumerable]]', - '[[Get]]', - '[[Set]]', - '[[Value]]', - '[[Writable]]' - ]; - return every(fields, function (field) { - if ((field in D1) !== (field in D2)) { - return false; - } - return ES.SameValue(D1[field], D2[field]); - }); -}; diff --git a/build/node_modules/es-abstract/helpers/isTrailingSurrogate.js b/build/node_modules/es-abstract/helpers/isTrailingSurrogate.js deleted file mode 100644 index 002930ac..00000000 --- a/build/node_modules/es-abstract/helpers/isTrailingSurrogate.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isTrailingSurrogate(charCode) { - return typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF; -}; diff --git a/build/node_modules/es-abstract/helpers/maxSafeInteger.js b/build/node_modules/es-abstract/helpers/maxSafeInteger.js deleted file mode 100644 index 89e5246f..00000000 --- a/build/node_modules/es-abstract/helpers/maxSafeInteger.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $Math = GetIntrinsic('%Math%'); -var $Number = GetIntrinsic('%Number%'); - -module.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1; diff --git a/build/node_modules/es-abstract/helpers/mod.js b/build/node_modules/es-abstract/helpers/mod.js deleted file mode 100644 index 67c8b78a..00000000 --- a/build/node_modules/es-abstract/helpers/mod.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var $floor = Math.floor; - -module.exports = function mod(number, modulo) { - var remain = number % modulo; - return $floor(remain >= 0 ? remain : remain + modulo); -}; diff --git a/build/node_modules/es-abstract/helpers/padTimeComponent.js b/build/node_modules/es-abstract/helpers/padTimeComponent.js deleted file mode 100644 index 0d8afc05..00000000 --- a/build/node_modules/es-abstract/helpers/padTimeComponent.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); - -var $strSlice = callBound('String.prototype.slice'); - -module.exports = function padTimeComponent(c, count) { - return $strSlice('00' + c, -(count || 2)); -}; diff --git a/build/node_modules/es-abstract/helpers/regexTester.js b/build/node_modules/es-abstract/helpers/regexTester.js deleted file mode 100644 index b1699fb4..00000000 --- a/build/node_modules/es-abstract/helpers/regexTester.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var $test = GetIntrinsic('RegExp.prototype.test'); - -var callBind = require('call-bind'); - -module.exports = function regexTester(regex) { - return callBind($test, regex); -}; diff --git a/build/node_modules/es-abstract/helpers/setProto.js b/build/node_modules/es-abstract/helpers/setProto.js deleted file mode 100644 index 0ee884fb..00000000 --- a/build/node_modules/es-abstract/helpers/setProto.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var originalSetProto = GetIntrinsic('%Object.setPrototypeOf%', true); -var $ArrayProto = GetIntrinsic('%Array.prototype%'); - -module.exports = originalSetProto || ( - // eslint-disable-next-line no-proto, no-negated-condition - [].__proto__ !== $ArrayProto - ? null - : function (O, proto) { - O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign - return O; - } -); diff --git a/build/node_modules/es-abstract/helpers/sign.js b/build/node_modules/es-abstract/helpers/sign.js deleted file mode 100644 index 598ea7d8..00000000 --- a/build/node_modules/es-abstract/helpers/sign.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function sign(number) { - return number >= 0 ? 1 : -1; -}; diff --git a/build/node_modules/es-abstract/helpers/some.js b/build/node_modules/es-abstract/helpers/some.js deleted file mode 100644 index c0b44050..00000000 --- a/build/node_modules/es-abstract/helpers/some.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = function some(array, predicate) { - for (var i = 0; i < array.length; i += 1) { - if (predicate(array[i], i, array)) { - return true; - } - } - return false; -}; diff --git a/build/node_modules/es-abstract/helpers/timeConstants.js b/build/node_modules/es-abstract/helpers/timeConstants.js deleted file mode 100644 index c275b40e..00000000 --- a/build/node_modules/es-abstract/helpers/timeConstants.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var HoursPerDay = 24; -var MinutesPerHour = 60; -var SecondsPerMinute = 60; -var msPerSecond = 1e3; -var msPerMinute = msPerSecond * SecondsPerMinute; -var msPerHour = msPerMinute * MinutesPerHour; -var msPerDay = 86400000; - -module.exports = { - HoursPerDay: HoursPerDay, - MinutesPerHour: MinutesPerHour, - SecondsPerMinute: SecondsPerMinute, - msPerSecond: msPerSecond, - msPerMinute: msPerMinute, - msPerHour: msPerHour, - msPerDay: msPerDay -}; diff --git a/build/node_modules/es-abstract/index.js b/build/node_modules/es-abstract/index.js deleted file mode 100644 index 5cd52929..00000000 --- a/build/node_modules/es-abstract/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var assign = require('./helpers/assign'); - -var ES5 = require('./es5'); -var ES2015 = require('./es2015'); -var ES2016 = require('./es2016'); -var ES2017 = require('./es2017'); -var ES2018 = require('./es2018'); -var ES2019 = require('./es2019'); -var ES2020 = require('./es2020'); - -var ES = { - ES5: ES5, - ES6: ES2015, - ES2015: ES2015, - ES7: ES2016, - ES2016: ES2016, - ES2017: ES2017, - ES2018: ES2018, - ES2019: ES2019, - ES2020: ES2020 -}; -assign(ES, ES5); -delete ES.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible -assign(ES, ES2015); - -module.exports = ES; diff --git a/build/node_modules/es-abstract/node_modules/object-keys/.editorconfig b/build/node_modules/es-abstract/node_modules/object-keys/.editorconfig deleted file mode 100644 index eaa21416..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = tab; -insert_final_newline = true; -quote_type = auto; -space_after_anonymous_functions = true; -space_after_control_statements = true; -spaces_around_operators = true; -trim_trailing_whitespace = true; -spaces_in_brackets = false; -end_of_line = lf; - diff --git a/build/node_modules/es-abstract/node_modules/object-keys/.eslintrc b/build/node_modules/es-abstract/node_modules/object-keys/.eslintrc deleted file mode 100644 index 9a8d5b0e..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 23], - "id-length": [2, { "min": 1, "max": 40 }], - "max-params": [2, 3], - "max-statements": [2, 23], - "max-statements-per-line": [2, { "max": 2 }], - "no-extra-parens": [1], - "no-invalid-this": [1], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": [2, "after"] - } -} diff --git a/build/node_modules/es-abstract/node_modules/object-keys/.travis.yml b/build/node_modules/es-abstract/node_modules/object-keys/.travis.yml deleted file mode 100644 index 94a6ce42..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,277 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "11.8" - - "10.15" - - "9.11" - - "8.15" - - "7.10" - - "6.16" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "11.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.15" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true - - env: COVERAGE=true - - env: POSTTEST=true diff --git a/build/node_modules/es-abstract/node_modules/object-keys/CHANGELOG.md b/build/node_modules/es-abstract/node_modules/object-keys/CHANGELOG.md deleted file mode 100644 index b7d92df2..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/CHANGELOG.md +++ /dev/null @@ -1,232 +0,0 @@ -1.1.1 / 2019-04-06 -================= - * [Fix] exclude deprecated Firefox keys (#53) - -1.1.0 / 2019-02-10 -================= - * [New] [Refactor] move full implementation to `implementation` entry point - * [Refactor] only evaluate the implementation if `Object.keys` is not present - * [Tests] up to `node` `v11.8`, `v10.15`, `v8.15`, `v6.16` - * [Tests] remove jscs - * [Tests] switch to `npm audit` from `nsp` - -1.0.12 / 2018-06-18 -================= - * [Fix] avoid accessing `window.applicationCache`, to avoid issues with latest Chrome on HTTP (#46) - -1.0.11 / 2016-07-05 -================= - * [Fix] exclude keys regarding the style (eg. `pageYOffset`) on `window` to avoid reflow (#32) - -1.0.10 / 2016-07-04 -================= - * [Fix] exclude `height` and `width` keys on `window` to avoid reflow (#31) - * [Fix] In IE 6, `window.external` makes `Object.keys` throw - * [Tests] up to `node` `v6.2`, `v5.10`, `v4.4` - * [Tests] use pretest/posttest for linting/security - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` - * [Dev Deps] remove unused eccheck script + dep - -1.0.9 / 2015-10-19 -================= - * [Fix] Blacklist 'frame' property on window (#16, #17) - * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` - -1.0.8 / 2015-10-14 -================= - * [Fix] wrap automation equality bug checking in try/catch, per [es5-shim#327](https://github.com/es-shims/es5-shim/issues/327) - * [Fix] Blacklist 'window.frameElement' per [es5-shim#322](https://github.com/es-shims/es5-shim/issues/322) - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - * [Tests] up to `io.js` `v3.3`, `node` `v4.2` - * [Dev Deps] update `eslint`, `tape`, `@ljharb/eslint-config`, `jscs` - -1.0.7 / 2015-07-18 -================= - * [Fix] A proper fix for 176f03335e90d5c8d0d8125a99f27819c9b9cdad / https://github.com/es-shims/es5-shim/issues/275 that doesn't break dontEnum/constructor fixes in IE 8. - * [Fix] Remove deprecation message in Chrome by touching deprecated window properties (#15) - * [Tests] Improve test output for automation equality bugfix - * [Tests] Test on `io.js` `v2.4` - -1.0.6 / 2015-07-09 -================= - * [Fix] Use an object lookup rather than ES5's `indexOf` (#14) - * [Tests] ES3 browsers don't have `Array.isArray` - * [Tests] Fix `no-shadow` rule, as well as an IE 8 bug caused by engine NFE shadowing bugs. - -1.0.5 / 2015-07-03 -================= - * [Fix] Fix a flabbergasting IE 8 bug where `localStorage.constructor.prototype === localStorage` throws - * [Tests] Test up to `io.js` `v2.3` - * [Dev Deps] Update `nsp`, `eslint` - -1.0.4 / 2015-05-23 -================= - * Fix a Safari 5.0 bug with `Object.keys` not working with `arguments` - * Test on latest `node` and `io.js` - * Update `jscs`, `tape`, `eslint`, `nsp`, `is`, `editorconfig-tools`, `covert` - -1.0.3 / 2015-01-06 -================= - * Revert "Make `object-keys` more robust against later environment tampering" to maintain ES3 compliance - -1.0.2 / 2014-12-28 -================= - * Update lots of dev dependencies - * Tweaks to README - * Make `object-keys` more robust against later environment tampering - -1.0.1 / 2014-09-03 -================= - * Update URLs and badges in README - -1.0.0 / 2014-08-26 -================= - * v1.0.0 - -0.6.1 / 2014-08-25 -================= - * v0.6.1 - * Updating dependencies (tape, covert, is) - * Update badges in readme - * Use separate var statements - -0.6.0 / 2014-04-23 -================= - * v0.6.0 - * Updating dependencies (tape, covert) - * Make sure boxed primitives, and arguments objects, work properly in ES3 browsers - * Improve test matrix: test all node versions, but only latest two stables are a failure - * Remove internal foreach shim. - -0.5.1 / 2014-03-09 -================= - * 0.5.1 - * Updating dependencies (tape, covert, is) - * Removing forEach from the module (but keeping it in tests) - -0.5.0 / 2014-01-30 -================= - * 0.5.0 - * Explicitly returning the shim, instead of returning native Object.keys when present - * Adding a changelog. - * Cleaning up IIFE wrapping - * Testing on node 0.4 through 0.11 - -0.4.0 / 2013-08-14 -================== - - * v0.4.0 - * In Chrome 4-10 and Safari 4, typeof (new RegExp) === 'function' - * If it's a string, make sure to use charAt instead of brackets. - * Only use Function#call if necessary. - * Making sure the context tests actually run. - * Better function detection - * Adding the android browser - * Fixing testling files - * Updating tape - * Removing the "is" dependency. - * Making an isArguments shim. - * Adding a local forEach shim and tests. - * Updating paths. - * Moving the shim test. - * v0.3.0 - -0.3.0 / 2013-05-18 -================== - - * README tweak. - * Fixing constructor enum issue. Fixes [#5](https://github.com/ljharb/object-keys/issues/5). - * Adding a test for [#5](https://github.com/ljharb/object-keys/issues/5) - * Updating readme. - * Updating dependencies. - * Giving credit to lodash. - * Make sure that a prototype's constructor property is not enumerable. Fixes [#3](https://github.com/ljharb/object-keys/issues/3). - * Adding additional tests to handle arguments objects, and to skip "prototype" in functions. Fixes [#2](https://github.com/ljharb/object-keys/issues/2). - * Fixing a typo on this test for [#3](https://github.com/ljharb/object-keys/issues/3). - * Adding node 0.10 to travis. - * Adding an IE < 9 test per [#3](https://github.com/ljharb/object-keys/issues/3) - * Adding an iOS 5 mobile Safari test per [#2](https://github.com/ljharb/object-keys/issues/2) - * Moving "indexof" and "is" to be dev dependencies. - * Making sure the shim works with functions. - * Flattening the tests. - -0.2.0 / 2013-05-10 -================== - - * v0.2.0 - * Object.keys should work with arrays. - -0.1.8 / 2013-05-10 -================== - - * v0.1.8 - * Upgrading dependencies. - * Using a simpler check. - * Fixing a bug in hasDontEnumBug browsers. - * Using the newest tape! - * Fixing this error test. - * "undefined" is probably a reserved word in ES3. - * Better test message. - -0.1.7 / 2013-04-17 -================== - - * Upgrading "is" once more. - * The key "null" is breaking some browsers. - -0.1.6 / 2013-04-17 -================== - - * v0.1.6 - * Upgrading "is" - -0.1.5 / 2013-04-14 -================== - - * Bumping version. - * Adding more testling browsers. - * Updating "is" - -0.1.4 / 2013-04-08 -================== - - * Using "is" instead of "is-extended". - -0.1.3 / 2013-04-07 -================== - - * Using "foreach" instead of my own shim. - * Removing "tap"; I'll just wait for "tape" to fix its node 0.10 bug. - -0.1.2 / 2013-04-03 -================== - - * Adding dependency status; moving links to an index at the bottom. - * Upgrading is-extended; version 0.1.2 - * Adding an npm version badge. - -0.1.1 / 2013-04-01 -================== - - * Adding Travis CI. - * Bumping the version. - * Adding indexOf since IE sucks. - * Adding a forEach shim since older browsers don't have Array#forEach. - * Upgrading tape - 0.3.2 uses Array#map - * Using explicit end instead of plan. - * Can't test with Array.isArray in older browsers. - * Using is-extended. - * Fixing testling files. - * JSHint/JSLint-ing. - * Removing an unused object. - * Using strict mode. - -0.1.0 / 2013-03-30 -================== - - * Changing the exports should have meant a higher version bump. - * Oops, fixing the repo URL. - * Adding more tests. - * 0.0.2 - * Merge branch 'export_one_thing'; closes [#1](https://github.com/ljharb/object-keys/issues/1) - * Move shim export to a separate file. diff --git a/build/node_modules/es-abstract/node_modules/object-keys/LICENSE b/build/node_modules/es-abstract/node_modules/object-keys/LICENSE deleted file mode 100644 index 28553fdd..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2013 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/es-abstract/node_modules/object-keys/README.md b/build/node_modules/es-abstract/node_modules/object-keys/README.md deleted file mode 100644 index ed4c2770..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/README.md +++ /dev/null @@ -1,76 +0,0 @@ -#object-keys [![Version Badge][npm-version-svg]][package-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -[![browser support][testling-svg]][testling-url] - -An Object.keys shim. Invoke its "shim" method to shim Object.keys if it is unavailable. - -Most common usage: -```js -var keys = Object.keys || require('object-keys'); -``` - -## Example - -```js -var keys = require('object-keys'); -var assert = require('assert'); -var obj = { - a: true, - b: true, - c: true -}; - -assert.deepEqual(keys(obj), ['a', 'b', 'c']); -``` - -```js -var keys = require('object-keys'); -var assert = require('assert'); -/* when Object.keys is not present */ -delete Object.keys; -var shimmedKeys = keys.shim(); -assert.equal(shimmedKeys, keys); -assert.deepEqual(Object.keys(obj), keys(obj)); -``` - -```js -var keys = require('object-keys'); -var assert = require('assert'); -/* when Object.keys is present */ -var shimmedKeys = keys.shim(); -assert.equal(shimmedKeys, Object.keys); -assert.deepEqual(Object.keys(obj), keys(obj)); -``` - -## Source -Implementation taken directly from [es5-shim][es5-shim-url], with modifications, including from [lodash][lodash-url]. - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.org/package/object-keys -[npm-version-svg]: http://versionbadg.es/ljharb/object-keys.svg -[travis-svg]: https://travis-ci.org/ljharb/object-keys.svg -[travis-url]: https://travis-ci.org/ljharb/object-keys -[deps-svg]: https://david-dm.org/ljharb/object-keys.svg -[deps-url]: https://david-dm.org/ljharb/object-keys -[dev-deps-svg]: https://david-dm.org/ljharb/object-keys/dev-status.svg -[dev-deps-url]: https://david-dm.org/ljharb/object-keys#info=devDependencies -[testling-svg]: https://ci.testling.com/ljharb/object-keys.png -[testling-url]: https://ci.testling.com/ljharb/object-keys -[es5-shim-url]: https://github.com/es-shims/es5-shim/blob/master/es5-shim.js#L542-589 -[lodash-url]: https://github.com/lodash/lodash -[npm-badge-png]: https://nodei.co/npm/object-keys.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/object-keys.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/object-keys.svg -[downloads-url]: http://npm-stat.com/charts.html?package=object-keys - diff --git a/build/node_modules/es-abstract/node_modules/object-keys/implementation.js b/build/node_modules/es-abstract/node_modules/object-keys/implementation.js deleted file mode 100644 index 5b329861..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/implementation.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -var keysShim; -if (!Object.keys) { - // modified from https://github.com/es-shims/es5-shim - var has = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - var isArgs = require('./isArguments'); // eslint-disable-line global-require - var isEnumerable = Object.prototype.propertyIsEnumerable; - var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); - var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); - var dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - var equalsConstructorPrototype = function (o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; - }; - var excludedKeys = { - $applicationCache: true, - $console: true, - $external: true, - $frame: true, - $frameElement: true, - $frames: true, - $innerHeight: true, - $innerWidth: true, - $onmozfullscreenchange: true, - $onmozfullscreenerror: true, - $outerHeight: true, - $outerWidth: true, - $pageXOffset: true, - $pageYOffset: true, - $parent: true, - $scrollLeft: true, - $scrollTop: true, - $scrollX: true, - $scrollY: true, - $self: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true, - $window: true - }; - var hasAutomationEqualityBug = (function () { - /* global window */ - if (typeof window === 'undefined') { return false; } - for (var k in window) { - try { - if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { - try { - equalsConstructorPrototype(window[k]); - } catch (e) { - return true; - } - } - } catch (e) { - return true; - } - } - return false; - }()); - var equalsConstructorPrototypeIfNotBuggy = function (o) { - /* global window */ - if (typeof window === 'undefined' || !hasAutomationEqualityBug) { - return equalsConstructorPrototype(o); - } - try { - return equalsConstructorPrototype(o); - } catch (e) { - return false; - } - }; - - keysShim = function keys(object) { - var isObject = object !== null && typeof object === 'object'; - var isFunction = toStr.call(object) === '[object Function]'; - var isArguments = isArgs(object); - var isString = isObject && toStr.call(object) === '[object String]'; - var theKeys = []; - - if (!isObject && !isFunction && !isArguments) { - throw new TypeError('Object.keys called on a non-object'); - } - - var skipProto = hasProtoEnumBug && isFunction; - if (isString && object.length > 0 && !has.call(object, 0)) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } - - if (isArguments && object.length > 0) { - for (var j = 0; j < object.length; ++j) { - theKeys.push(String(j)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && has.call(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); - - for (var k = 0; k < dontEnums.length; ++k) { - if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { - theKeys.push(dontEnums[k]); - } - } - } - return theKeys; - }; -} -module.exports = keysShim; diff --git a/build/node_modules/es-abstract/node_modules/object-keys/index.js b/build/node_modules/es-abstract/node_modules/object-keys/index.js deleted file mode 100644 index a43807d2..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/index.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var slice = Array.prototype.slice; -var isArgs = require('./isArguments'); - -var origKeys = Object.keys; -var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); - -var originalKeys = Object.keys; - -keysShim.shim = function shimObjectKeys() { - if (Object.keys) { - var keysWorksWithArguments = (function () { - // Safari 5.0 bug - var args = Object.keys(arguments); - return args && args.length === arguments.length; - }(1, 2)); - if (!keysWorksWithArguments) { - Object.keys = function keys(object) { // eslint-disable-line func-name-matching - if (isArgs(object)) { - return originalKeys(slice.call(object)); - } - return originalKeys(object); - }; - } - } else { - Object.keys = keysShim; - } - return Object.keys || keysShim; -}; - -module.exports = keysShim; diff --git a/build/node_modules/es-abstract/node_modules/object-keys/isArguments.js b/build/node_modules/es-abstract/node_modules/object-keys/isArguments.js deleted file mode 100644 index f2a2a901..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; - -module.exports = function isArguments(value) { - var str = toStr.call(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = str !== '[object Array]' && - value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - toStr.call(value.callee) === '[object Function]'; - } - return isArgs; -}; diff --git a/build/node_modules/es-abstract/node_modules/object-keys/package.json b/build/node_modules/es-abstract/node_modules/object-keys/package.json deleted file mode 100644 index 07115c39..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/package.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_from": "object-keys@^1.1.1", - "_id": "object-keys@1.1.1", - "_inBundle": false, - "_integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "_location": "/es-abstract/object-keys", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "object-keys@^1.1.1", - "name": "object-keys", - "escapedName": "object-keys", - "rawSpec": "^1.1.1", - "saveSpec": null, - "fetchSpec": "^1.1.1" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "_shasum": "1c47f272df277f3b1daf061677d9c82e2322c60e", - "_spec": "object-keys@^1.1.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/ljharb/object-keys/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net" - }, - { - "name": "Ivan Starkov", - "email": "istarkov@gmail.com" - }, - { - "name": "Gary Katsevman", - "email": "git@gkatsev.com" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "An Object.keys replacement, in case Object.keys is not available. From https://github.com/es-shims/es5-shim", - "devDependencies": { - "@ljharb/eslint-config": "^13.1.1", - "covert": "^1.1.1", - "eslint": "^5.13.0", - "foreach": "^2.0.5", - "indexof": "^0.0.1", - "is": "^3.3.0", - "tape": "^4.9.2" - }, - "engines": { - "node": ">= 0.4" - }, - "homepage": "https://github.com/ljharb/object-keys#readme", - "keywords": [ - "Object.keys", - "keys", - "ES5", - "shim" - ], - "license": "MIT", - "main": "index.js", - "name": "object-keys", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/object-keys.git" - }, - "scripts": { - "audit": "npm audit", - "coverage": "covert test/*.js", - "coverage-quiet": "covert test/*.js --quiet", - "lint": "eslint .", - "postaudit": "rm package-lock.json", - "posttest": "npm run --silent audit", - "preaudit": "npm install --package-lock --package-lock-only", - "pretest": "npm run --silent lint", - "test": "npm run --silent tests-only", - "tests-only": "node test/index.js" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.1" -} diff --git a/build/node_modules/es-abstract/node_modules/object-keys/test/index.js b/build/node_modules/es-abstract/node_modules/object-keys/test/index.js deleted file mode 100644 index 5402465a..00000000 --- a/build/node_modules/es-abstract/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('./isArguments'); - -require('./shim'); diff --git a/build/node_modules/es-abstract/operations/.eslintrc b/build/node_modules/es-abstract/operations/.eslintrc deleted file mode 100644 index bcd76f76..00000000 --- a/build/node_modules/es-abstract/operations/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "id-length": 0, - }, -} diff --git a/build/node_modules/es-abstract/operations/2015.js b/build/node_modules/es-abstract/operations/2015.js deleted file mode 100644 index 7607ef41..00000000 --- a/build/node_modules/es-abstract/operations/2015.js +++ /dev/null @@ -1,251 +0,0 @@ -'use strict'; - -module.exports = { - IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op - - abs: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/6.0/#sec-abstract-relational-comparison', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/6.0/#sec-addrestrictedfunctionproperties', - AdvanceStringIndex: 'https://262.ecma-international.org/6.0/#sec-advancestringindex', - AllocateArrayBuffer: 'https://262.ecma-international.org/6.0/#sec-allocatearraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/6.0/#sec-allocatetypedarray', - ArrayCreate: 'https://262.ecma-international.org/6.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/6.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/6.0/#sec-arrayspeciescreate', - BoundFunctionCreate: 'https://262.ecma-international.org/6.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/6.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring', - CharacterRange: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/6.0/#sec-clonearraybuffer', - CompletePropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/6.0/#sec-implicit-completion-values', - Construct: 'https://262.ecma-international.org/6.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/6.0/#sec-copydatablockbytes', - CreateArrayFromList: 'https://262.ecma-international.org/6.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/6.0/#sec-createarrayiterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/6.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/6.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/6.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/6.0/#sec-createdynamicfunction', - CreateHTML: 'https://262.ecma-international.org/6.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/6.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/6.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/6.0/#sec-createlistfromarraylike', - CreateListIterator: 'https://262.ecma-international.org/6.0/#sec-createlistiterator', - CreateMapIterator: 'https://262.ecma-international.org/6.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/6.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/6.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/6.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/6.0/#sec-createrealm', - CreateSetIterator: 'https://262.ecma-international.org/6.0/#sec-createsetiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/6.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/6.0/#sec-date-number', - Day: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day', - DayFromYear: 'https://262.ecma-international.org/6.0/#sec-year-number', - DaylightSavingTA: 'https://262.ecma-international.org/6.0/#sec-daylight-saving-time-adjustment', - DaysInYear: 'https://262.ecma-international.org/6.0/#sec-year-number', - DayWithinYear: 'https://262.ecma-international.org/6.0/#sec-month-number', - Decode: 'https://262.ecma-international.org/6.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/6.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/6.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/6.0/#sec-encode', - EnqueueJob: 'https://262.ecma-international.org/6.0/#sec-enqueuejob', - EnumerableOwnNames: 'https://262.ecma-international.org/6.0/#sec-enumerableownnames', - EscapeRegExpPattern: 'https://262.ecma-international.org/6.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/6.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/6.0/#sec-evaluatecall', - EvaluateDirectCall: 'https://262.ecma-international.org/6.0/#sec-evaluatedirectcall', - EvaluateNew: 'https://262.ecma-international.org/6.0/#sec-evaluatenew', - floor: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - ForBodyEvaluation: 'https://262.ecma-international.org/6.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind', - FromPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/6.0/#sec-fulfillpromise', - FunctionAllocate: 'https://262.ecma-international.org/6.0/#sec-functionallocate', - FunctionCreate: 'https://262.ecma-international.org/6.0/#sec-functioncreate', - FunctionInitialize: 'https://262.ecma-international.org/6.0/#sec-functioninitialize', - GeneratorFunctionCreate: 'https://262.ecma-international.org/6.0/#sec-generatorfunctioncreate', - GeneratorResume: 'https://262.ecma-international.org/6.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/6.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/6.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/6.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/6.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/6.0/#sec-get-o-p', - GetBase: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - GetFunctionRealm: 'https://262.ecma-international.org/6.0/#sec-getfunctionrealm', - GetGlobalObject: 'https://262.ecma-international.org/6.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/6.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/6.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/6.0/#sec-getmethod', - GetModuleNamespace: 'https://262.ecma-international.org/6.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/6.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/6.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor', - GetReferencedName: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - GetSubstitution: 'https://262.ecma-international.org/6.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/6.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/6.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/6.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/6.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/6.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/6.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/6.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/6.0/#sec-getviewvalue', - HasOwnProperty: 'https://262.ecma-international.org/6.0/#sec-hasownproperty', - HasPrimitiveBase: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - HasProperty: 'https://262.ecma-international.org/6.0/#sec-hasproperty', - HostResolveImportedModule: 'sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds', - ImportedLocalNames: 'https://262.ecma-international.org/6.0/#sec-importedlocalnames', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/6.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/6.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/6.0/#sec-year-number', - InstanceofOperator: 'https://262.ecma-international.org/6.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/6.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/6.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/6.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/6.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/6.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/6.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/6.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/6.0/#sec-isarray', - IsCallable: 'https://262.ecma-international.org/6.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/6.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/6.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/6.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/6.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/6.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/6.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/6.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/6.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/6.0/#sec-islabelledfunction', - IsPromise: 'https://262.ecma-international.org/6.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/6.0/#sec-ispropertykey', - IsPropertyReference: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - IsRegExp: 'https://262.ecma-international.org/6.0/#sec-isregexp', - IsStrictReference: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - IsSuperReference: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - IsUnresolvableReference: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues', - IsWordChar: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IteratorClose: 'https://262.ecma-international.org/6.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/6.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/6.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/6.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/6.0/#sec-iteratorvalue', - LocalTime: 'https://262.ecma-international.org/6.0/#sec-localtime', - LoopContinues: 'https://262.ecma-international.org/6.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/6.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/6.0/#sec-makeargsetter', - MakeClassConstructor: 'https://262.ecma-international.org/6.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/6.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/6.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/6.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/6.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/6.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/6.0/#sec-maketime', - max: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - min: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - MinFromTime: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds', - ModuleNamespaceCreate: 'https://262.ecma-international.org/6.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - MonthFromTime: 'https://262.ecma-international.org/6.0/#sec-month-number', - msFromTime: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds', - msPerDay: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/6.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/6.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/6.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/6.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/6.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/6.0/#sec-newpromisecapability', - NormalCompletion: 'https://262.ecma-international.org/6.0/#sec-normalcompletion', - ObjectCreate: 'https://262.ecma-international.org/6.0/#sec-objectcreate', - ObjectDefineProperties: 'https://262.ecma-international.org/6.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/6.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/6.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty', - OrdinaryHasInstance: 'https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty', - ParseModule: 'https://262.ecma-international.org/6.0/#sec-parsemodule', - PerformEval: 'https://262.ecma-international.org/6.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/6.0/#sec-performpromiseall', - PerformPromiseRace: 'https://262.ecma-international.org/6.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/6.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/6.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/6.0/#sec-preparefortailcall', - ProxyCreate: 'https://262.ecma-international.org/6.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/6.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/6.0/#sec-quotejsonstring', - RegExpAlloc: 'https://262.ecma-international.org/6.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/6.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/6.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/6.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/6.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/6.0/#sec-rejectpromise', - RepeatMatcher: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireObjectCoercible: 'https://262.ecma-international.org/6.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/6.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/6.0/#sec-resolvethisbinding', - SameValue: 'https://262.ecma-international.org/6.0/#sec-samevalue', - SameValueZero: 'https://262.ecma-international.org/6.0/#sec-samevaluezero', - SecFromTime: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds', - SerializeJSONArray: 'https://262.ecma-international.org/6.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/6.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/6.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/6.0/#sec-setdefaultglobalbindings', - SetFunctionName: 'https://262.ecma-international.org/6.0/#sec-setfunctionname', - SetIntegrityLevel: 'https://262.ecma-international.org/6.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/6.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/6.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/6.0/#sec-setviewvalue', - sign: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions', - SortCompare: 'https://262.ecma-international.org/6.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/6.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/6.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/6.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/6.0/#sec-stringcreate', - StringGetIndexProperty: 'https://262.ecma-international.org/6.0/#sec-stringgetindexproperty', - SymbolDescriptiveString: 'https://262.ecma-international.org/6.0/#sec-symboldescriptivestring', - TestIntegrityLevel: 'https://262.ecma-international.org/6.0/#sec-testintegritylevel', - thisBooleanValue: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object', - thisNumberValue: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object', - thisStringValue: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object', - thisTimeValue: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object', - TimeClip: 'https://262.ecma-international.org/6.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/6.0/#sec-year-number', - TimeWithinDay: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day', - ToBoolean: 'https://262.ecma-international.org/6.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/6.0/#sec-todatestring', - ToInt16: 'https://262.ecma-international.org/6.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/6.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/6.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/6.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/6.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/6.0/#sec-tonumber', - ToObject: 'https://262.ecma-international.org/6.0/#sec-toobject', - ToPrimitive: 'https://262.ecma-international.org/6.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/6.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/6.0/#sec-tostring', - ToUint16: 'https://262.ecma-international.org/6.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/6.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/6.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/6.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/6.0/#sec-triggerpromisereactions', - Type: 'https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values', - TypedArrayFrom: 'https://262.ecma-international.org/6.0/#sec-typedarrayfrom', - UpdateEmpty: 'https://262.ecma-international.org/6.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/6.0/#sec-utc-t', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor', - WeekDay: 'https://262.ecma-international.org/6.0/#sec-week-day', - YearFromTime: 'https://262.ecma-international.org/6.0/#sec-year-number' -}; diff --git a/build/node_modules/es-abstract/operations/2016.js b/build/node_modules/es-abstract/operations/2016.js deleted file mode 100644 index 3cfd8e7a..00000000 --- a/build/node_modules/es-abstract/operations/2016.js +++ /dev/null @@ -1,277 +0,0 @@ -'use strict'; - -module.exports = { - IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op - - abs: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/7.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/7.0/#sec-abstract-relational-comparison', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/7.0/#sec-addrestrictedfunctionproperties', - AdvanceStringIndex: 'https://262.ecma-international.org/7.0/#sec-advancestringindex', - AllocateArrayBuffer: 'https://262.ecma-international.org/7.0/#sec-allocatearraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/7.0/#sec-allocatetypedarray', - AllocateTypedArrayBuffer: 'https://262.ecma-international.org/7.0/#sec-allocatetypedarraybuffer', - ArrayCreate: 'https://262.ecma-international.org/7.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/7.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/7.0/#sec-arrayspeciescreate', - BlockDeclarationInstantiation: 'https://262.ecma-international.org/7.0/#sec-blockdeclarationinstantiation', - BoundFunctionCreate: 'https://262.ecma-international.org/7.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/7.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/7.0/#sec-canonicalnumericindexstring', - CharacterRange: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterRangeOrUnion: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/7.0/#sec-clonearraybuffer', - CompletePropertyDescriptor: 'https://262.ecma-international.org/7.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/7.0/#sec-completion-record-specification-type', - Construct: 'https://262.ecma-international.org/7.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/7.0/#sec-copydatablockbytes', - CreateArrayFromList: 'https://262.ecma-international.org/7.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/7.0/#sec-createarrayiterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/7.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/7.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/7.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/7.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/7.0/#sec-createdynamicfunction', - CreateHTML: 'https://262.ecma-international.org/7.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/7.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/7.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/7.0/#sec-createlistfromarraylike', - CreateListIterator: 'https://262.ecma-international.org/7.0/#sec-createlistiterator', - CreateMapIterator: 'https://262.ecma-international.org/7.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/7.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/7.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/7.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/7.0/#sec-createrealm', - CreateResolvingFunctions: 'https://262.ecma-international.org/7.0/#sec-createresolvingfunctions', - CreateSetIterator: 'https://262.ecma-international.org/7.0/#sec-createsetiterator', - CreateStringIterator: 'https://262.ecma-international.org/7.0/#sec-createstringiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/7.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/7.0/#sec-date-number', - Day: 'https://262.ecma-international.org/7.0/#sec-day-number-and-time-within-day', - DayFromYear: 'https://262.ecma-international.org/7.0/#sec-year-number', - DaylightSavingTA: 'https://262.ecma-international.org/7.0/#sec-daylight-saving-time-adjustment', - DaysInYear: 'https://262.ecma-international.org/7.0/#sec-year-number', - DayWithinYear: 'https://262.ecma-international.org/7.0/#sec-month-number', - Decode: 'https://262.ecma-international.org/7.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/7.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/7.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/7.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/7.0/#sec-encode', - EnqueueJob: 'https://262.ecma-international.org/7.0/#sec-enqueuejob', - EnumerableOwnNames: 'https://262.ecma-international.org/7.0/#sec-enumerableownnames', - EnumerateObjectProperties: 'https://262.ecma-international.org/7.0/#sec-enumerate-object-properties', - EscapeRegExpPattern: 'https://262.ecma-international.org/7.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/7.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/7.0/#sec-evaluatecall', - EvaluateDirectCall: 'https://262.ecma-international.org/7.0/#sec-evaluatedirectcall', - EvaluateNew: 'https://262.ecma-international.org/7.0/#sec-evaluatenew', - floor: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions', - ForBodyEvaluation: 'https://262.ecma-international.org/7.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind', - FromPropertyDescriptor: 'https://262.ecma-international.org/7.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/7.0/#sec-fulfillpromise', - FunctionAllocate: 'https://262.ecma-international.org/7.0/#sec-functionallocate', - FunctionCreate: 'https://262.ecma-international.org/7.0/#sec-functioncreate', - FunctionDeclarationInstantiation: 'https://262.ecma-international.org/7.0/#sec-functiondeclarationinstantiation', - FunctionInitialize: 'https://262.ecma-international.org/7.0/#sec-functioninitialize', - GeneratorFunctionCreate: 'https://262.ecma-international.org/7.0/#sec-generatorfunctioncreate', - GeneratorResume: 'https://262.ecma-international.org/7.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/7.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/7.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/7.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/7.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/7.0/#sec-get-o-p', - GetActiveScriptOrModule: 'https://262.ecma-international.org/7.0/#sec-getactivescriptormodule', - GetFunctionRealm: 'https://262.ecma-international.org/7.0/#sec-getfunctionrealm', - GetGlobalObject: 'https://262.ecma-international.org/7.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/7.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/7.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/7.0/#sec-getmethod', - GetModuleNamespace: 'https://262.ecma-international.org/7.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/7.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/7.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/7.0/#sec-getprototypefromconstructor', - GetSubstitution: 'https://262.ecma-international.org/7.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/7.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/7.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/7.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/7.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/7.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/7.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/7.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/7.0/#sec-getviewvalue', - GlobalDeclarationInstantiation: 'https://262.ecma-international.org/7.0/#sec-globaldeclarationinstantiation', - HasOwnProperty: 'https://262.ecma-international.org/7.0/#sec-hasownproperty', - HasProperty: 'https://262.ecma-international.org/7.0/#sec-hasproperty', - HostPromiseRejectionTracker: 'https://262.ecma-international.org/7.0/#sec-host-promise-rejection-tracker', - HostReportErrors: 'https://262.ecma-international.org/7.0/#sec-host-report-errors', - HostResolveImportedModule: 'https://262.ecma-international.org/7.0/#sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds', - IfAbruptRejectPromise: 'https://262.ecma-international.org/7.0/#sec-ifabruptrejectpromise', - ImportedLocalNames: 'https://262.ecma-international.org/7.0/#sec-importedlocalnames', - InitializeBoundName: 'https://262.ecma-international.org/7.0/#sec-initializeboundname', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/7.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/7.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/7.0/#sec-year-number', - InstanceofOperator: 'https://262.ecma-international.org/7.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/7.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/7.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/7.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/7.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/7.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/7.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/7.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/7.0/#sec-isarray', - IsCallable: 'https://262.ecma-international.org/7.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/7.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/7.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/7.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/7.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/7.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/7.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/7.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/7.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/7.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/7.0/#sec-islabelledfunction', - IsPromise: 'https://262.ecma-international.org/7.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/7.0/#sec-ispropertykey', - IsRegExp: 'https://262.ecma-international.org/7.0/#sec-isregexp', - IsWordChar: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IterableToArrayLike: 'https://262.ecma-international.org/7.0/#sec-iterabletoarraylike', - IteratorClose: 'https://262.ecma-international.org/7.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/7.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/7.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/7.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/7.0/#sec-iteratorvalue', - LocalTime: 'https://262.ecma-international.org/7.0/#sec-localtime', - LoopContinues: 'https://262.ecma-international.org/7.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/7.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/7.0/#sec-makeargsetter', - MakeClassConstructor: 'https://262.ecma-international.org/7.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/7.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/7.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/7.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/7.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/7.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/7.0/#sec-maketime', - max: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions', - min: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions', - MinFromTime: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds', - ModuleNamespaceCreate: 'https://262.ecma-international.org/7.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions', - MonthFromTime: 'https://262.ecma-international.org/7.0/#sec-month-number', - msFromTime: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/7.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/7.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/7.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/7.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/7.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/7.0/#sec-newpromisecapability', - NextJob: 'https://262.ecma-international.org/7.0/#sec-nextjob-result', - NormalCompletion: 'https://262.ecma-international.org/7.0/#sec-normalcompletion', - ObjectCreate: 'https://262.ecma-international.org/7.0/#sec-objectcreate', - ObjectDefineProperties: 'https://262.ecma-international.org/7.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/7.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/7.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/7.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/7.0/#sec-ordinarydefineownproperty', - OrdinaryDelete: 'https://262.ecma-international.org/7.0/#sec-ordinarydelete', - OrdinaryGet: 'https://262.ecma-international.org/7.0/#sec-ordinaryget', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/7.0/#sec-ordinarygetownproperty', - OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof', - OrdinaryHasInstance: 'https://262.ecma-international.org/7.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/7.0/#sec-ordinaryhasproperty', - OrdinaryIsExtensible: 'https://262.ecma-international.org/7.0/#sec-ordinaryisextensible', - OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/7.0/#sec-ordinaryownpropertykeys', - OrdinaryPreventExtensions: 'https://262.ecma-international.org/7.0/#sec-ordinarypreventextensions', - OrdinarySet: 'https://262.ecma-international.org/7.0/#sec-ordinaryset', - OrdinarySetPrototypeOf: 'https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof', - ParseModule: 'https://262.ecma-international.org/7.0/#sec-parsemodule', - ParseScript: 'https://262.ecma-international.org/7.0/#sec-parse-script', - PerformEval: 'https://262.ecma-international.org/7.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/7.0/#sec-performpromiseall', - PerformPromiseRace: 'https://262.ecma-international.org/7.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/7.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/7.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/7.0/#sec-preparefortailcall', - PromiseReactionJob: 'https://262.ecma-international.org/7.0/#sec-promisereactionjob', - PromiseResolveThenableJob: 'https://262.ecma-international.org/7.0/#sec-promiseresolvethenablejob', - ProxyCreate: 'https://262.ecma-international.org/7.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/7.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/7.0/#sec-quotejsonstring', - RegExpAlloc: 'https://262.ecma-international.org/7.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/7.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/7.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/7.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/7.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/7.0/#sec-rejectpromise', - RepeatMatcher: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireObjectCoercible: 'https://262.ecma-international.org/7.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/7.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/7.0/#sec-resolvethisbinding', - ReturnIfAbrupt: 'https://262.ecma-international.org/7.0/#sec-returnifabrupt', - SameValue: 'https://262.ecma-international.org/7.0/#sec-samevalue', - SameValueNonNumber: 'https://262.ecma-international.org/7.0/#sec-samevaluenonnumber', - SameValueZero: 'https://262.ecma-international.org/7.0/#sec-samevaluezero', - ScriptEvaluation: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-scriptevaluation', - ScriptEvaluationJob: 'https://262.ecma-international.org/7.0/#sec-scriptevaluationjob', - SecFromTime: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds', - SerializeJSONArray: 'https://262.ecma-international.org/7.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/7.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/7.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/7.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/7.0/#sec-setdefaultglobalbindings', - SetFunctionName: 'https://262.ecma-international.org/7.0/#sec-setfunctionname', - SetIntegrityLevel: 'https://262.ecma-international.org/7.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/7.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/7.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/7.0/#sec-setviewvalue', - SortCompare: 'https://262.ecma-international.org/7.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/7.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/7.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/7.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/7.0/#sec-stringcreate', - SymbolDescriptiveString: 'https://262.ecma-international.org/7.0/#sec-symboldescriptivestring', - TestIntegrityLevel: 'https://262.ecma-international.org/7.0/#sec-testintegritylevel', - thisBooleanValue: 'https://262.ecma-international.org/7.0/#sec-thisbooleanvalue', - thisNumberValue: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-number-prototype-object', - thisStringValue: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-string-prototype-object', - thisTimeValue: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-date-prototype-object', - TimeClip: 'https://262.ecma-international.org/7.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/7.0/#sec-year-number', - TimeWithinDay: 'https://262.ecma-international.org/7.0/#sec-day-number-and-time-within-day', - ToBoolean: 'https://262.ecma-international.org/7.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/7.0/#sec-todatestring', - ToInt16: 'https://262.ecma-international.org/7.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/7.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/7.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/7.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/7.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/7.0/#sec-tonumber', - ToObject: 'https://262.ecma-international.org/7.0/#sec-toobject', - TopLevelModuleEvaluationJob: 'https://262.ecma-international.org/7.0/#sec-toplevelmoduleevaluationjob', - ToPrimitive: 'https://262.ecma-international.org/7.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/7.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/7.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/7.0/#sec-tostring', - 'ToString Applied to the Number Type': 'https://262.ecma-international.org/7.0/#sec-tostring-applied-to-the-number-type', - ToUint16: 'https://262.ecma-international.org/7.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/7.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/7.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/7.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/7.0/#sec-triggerpromisereactions', - Type: 'https://262.ecma-international.org/7.0/#sec-ecmascript-data-types-and-values', - TypedArrayCreate: 'https://262.ecma-international.org/7.0/#typedarray-create', - TypedArraySpeciesCreate: 'https://262.ecma-international.org/7.0/#typedarray-species-create', - UpdateEmpty: 'https://262.ecma-international.org/7.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/7.0/#sec-utc-t', - UTF16Decode: 'https://262.ecma-international.org/7.0/#sec-utf16decode', - UTF16Encoding: 'https://262.ecma-international.org/7.0/#sec-utf16encoding', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/7.0/#sec-validateandapplypropertydescriptor', - ValidateTypedArray: 'https://262.ecma-international.org/7.0/#sec-validatetypedarray', - WeekDay: 'https://262.ecma-international.org/7.0/#sec-week-day', - YearFromTime: 'https://262.ecma-international.org/7.0/#sec-year-number' -}; diff --git a/build/node_modules/es-abstract/operations/2017.js b/build/node_modules/es-abstract/operations/2017.js deleted file mode 100644 index b3a313f5..00000000 --- a/build/node_modules/es-abstract/operations/2017.js +++ /dev/null @@ -1,325 +0,0 @@ -'use strict'; - -module.exports = { - IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op - - abs: 'https://262.ecma-international.org/8.0/#eqn-abs', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/8.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/8.0/#sec-abstract-relational-comparison', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/8.0/#sec-addrestrictedfunctionproperties', - AddWaiter: 'https://262.ecma-international.org/8.0/#sec-addwaiter', - AdvanceStringIndex: 'https://262.ecma-international.org/8.0/#sec-advancestringindex', - 'agent-order': 'https://262.ecma-international.org/8.0/#sec-agent-order', - AgentCanSuspend: 'https://262.ecma-international.org/8.0/#sec-agentcansuspend', - AgentSignifier: 'https://262.ecma-international.org/8.0/#sec-agentsignifier', - AllocateArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-allocatearraybuffer', - AllocateSharedArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-allocatesharedarraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/8.0/#sec-allocatetypedarray', - AllocateTypedArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-allocatetypedarraybuffer', - ArrayCreate: 'https://262.ecma-international.org/8.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/8.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/8.0/#sec-arrayspeciescreate', - AsyncFunctionAwait: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-await', - AsyncFunctionCreate: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-create', - AsyncFunctionStart: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-start', - AtomicLoad: 'https://262.ecma-international.org/8.0/#sec-atomicload', - AtomicReadModifyWrite: 'https://262.ecma-international.org/8.0/#sec-atomicreadmodifywrite', - BlockDeclarationInstantiation: 'https://262.ecma-international.org/8.0/#sec-blockdeclarationinstantiation', - BoundFunctionCreate: 'https://262.ecma-international.org/8.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/8.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/8.0/#sec-canonicalnumericindexstring', - CharacterRange: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterRangeOrUnion: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-clonearraybuffer', - CompletePropertyDescriptor: 'https://262.ecma-international.org/8.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/8.0/#sec-completion-record-specification-type', - ComposeWriteEventBytes: 'https://262.ecma-international.org/8.0/#sec-composewriteeventbytes', - Construct: 'https://262.ecma-international.org/8.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/8.0/#sec-copydatablockbytes', - CreateArrayFromList: 'https://262.ecma-international.org/8.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/8.0/#sec-createarrayiterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/8.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/8.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/8.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/8.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/8.0/#sec-createdynamicfunction', - CreateHTML: 'https://262.ecma-international.org/8.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/8.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/8.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/8.0/#sec-createlistfromarraylike', - CreateListIterator: 'https://262.ecma-international.org/8.0/#sec-createlistiterator', - CreateMapIterator: 'https://262.ecma-international.org/8.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/8.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/8.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/8.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/8.0/#sec-createrealm', - CreateResolvingFunctions: 'https://262.ecma-international.org/8.0/#sec-createresolvingfunctions', - CreateSetIterator: 'https://262.ecma-international.org/8.0/#sec-createsetiterator', - CreateSharedByteDataBlock: 'https://262.ecma-international.org/8.0/#sec-createsharedbytedatablock', - CreateStringIterator: 'https://262.ecma-international.org/8.0/#sec-createstringiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/8.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/8.0/#sec-date-number', - Day: 'https://262.ecma-international.org/8.0/#eqn-Day', - DayFromYear: 'https://262.ecma-international.org/8.0/#eqn-DaysFromYear', - DaylightSavingTA: 'https://262.ecma-international.org/8.0/#sec-daylight-saving-time-adjustment', - DaysInYear: 'https://262.ecma-international.org/8.0/#eqn-DaysInYear', - DayWithinYear: 'https://262.ecma-international.org/8.0/#eqn-DayWithinYear', - Decode: 'https://262.ecma-international.org/8.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/8.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/8.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/8.0/#sec-encode', - EnqueueJob: 'https://262.ecma-international.org/8.0/#sec-enqueuejob', - EnterCriticalSection: 'https://262.ecma-international.org/8.0/#sec-entercriticalsection', - EnumerableOwnProperties: 'https://262.ecma-international.org/8.0/#sec-enumerableownproperties', - EnumerateObjectProperties: 'https://262.ecma-international.org/8.0/#sec-enumerate-object-properties', - EscapeRegExpPattern: 'https://262.ecma-international.org/8.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/8.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/8.0/#sec-evaluatecall', - EvaluateDirectCall: 'https://262.ecma-international.org/8.0/#sec-evaluatedirectcall', - EvaluateNew: 'https://262.ecma-international.org/8.0/#sec-evaluatenew', - EventSet: 'https://262.ecma-international.org/8.0/#sec-event-set', - floor: 'https://262.ecma-international.org/8.0/#eqn-floor', - ForBodyEvaluation: 'https://262.ecma-international.org/8.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind', - FromPropertyDescriptor: 'https://262.ecma-international.org/8.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/8.0/#sec-fulfillpromise', - FunctionAllocate: 'https://262.ecma-international.org/8.0/#sec-functionallocate', - FunctionCreate: 'https://262.ecma-international.org/8.0/#sec-functioncreate', - FunctionDeclarationInstantiation: 'https://262.ecma-international.org/8.0/#sec-functiondeclarationinstantiation', - FunctionInitialize: 'https://262.ecma-international.org/8.0/#sec-functioninitialize', - GeneratorFunctionCreate: 'https://262.ecma-international.org/8.0/#sec-generatorfunctioncreate', - GeneratorResume: 'https://262.ecma-international.org/8.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/8.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/8.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/8.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/8.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/8.0/#sec-get-o-p', - GetActiveScriptOrModule: 'https://262.ecma-international.org/8.0/#sec-getactivescriptormodule', - GetBase: 'https://262.ecma-international.org/8.0/#ao-getbase', - GetFunctionRealm: 'https://262.ecma-international.org/8.0/#sec-getfunctionrealm', - GetGlobalObject: 'https://262.ecma-international.org/8.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/8.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/8.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/8.0/#sec-getmethod', - GetModifySetValueInBuffer: 'https://262.ecma-international.org/8.0/#sec-getmodifysetvalueinbuffer', - GetModuleNamespace: 'https://262.ecma-international.org/8.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/8.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/8.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/8.0/#sec-getprototypefromconstructor', - GetReferencedName: 'https://262.ecma-international.org/8.0/#ao-getreferencedname', - GetSubstitution: 'https://262.ecma-international.org/8.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/8.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/8.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/8.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/8.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/8.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/8.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/8.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/8.0/#sec-getviewvalue', - GetWaiterList: 'https://262.ecma-international.org/8.0/#sec-getwaiterlist', - GlobalDeclarationInstantiation: 'https://262.ecma-international.org/8.0/#sec-globaldeclarationinstantiation', - 'happens-before': 'https://262.ecma-international.org/8.0/#sec-happens-before', - HasOwnProperty: 'https://262.ecma-international.org/8.0/#sec-hasownproperty', - HasPrimitiveBase: 'https://262.ecma-international.org/8.0/#ao-hasprimitivebase', - HasProperty: 'https://262.ecma-international.org/8.0/#sec-hasproperty', - 'host-synchronizes-with': 'https://262.ecma-international.org/8.0/#sec-host-synchronizes-with', - HostEnsureCanCompileStrings: 'https://262.ecma-international.org/8.0/#sec-hostensurecancompilestrings', - HostEventSet: 'https://262.ecma-international.org/8.0/#sec-hosteventset', - HostPromiseRejectionTracker: 'https://262.ecma-international.org/8.0/#sec-host-promise-rejection-tracker', - HostReportErrors: 'https://262.ecma-international.org/8.0/#sec-host-report-errors', - HostResolveImportedModule: 'https://262.ecma-international.org/8.0/#sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/8.0/#eqn-HourFromTime', - IfAbruptRejectPromise: 'https://262.ecma-international.org/8.0/#sec-ifabruptrejectpromise', - ImportedLocalNames: 'https://262.ecma-international.org/8.0/#sec-importedlocalnames', - InitializeBoundName: 'https://262.ecma-international.org/8.0/#sec-initializeboundname', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/8.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/8.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/8.0/#eqn-InLeapYear', - InstanceofOperator: 'https://262.ecma-international.org/8.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/8.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/8.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/8.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/8.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/8.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/8.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/8.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/8.0/#sec-isarray', - IsCallable: 'https://262.ecma-international.org/8.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/8.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/8.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/8.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/8.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/8.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/8.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/8.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/8.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/8.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/8.0/#sec-islabelledfunction', - IsPromise: 'https://262.ecma-international.org/8.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/8.0/#sec-ispropertykey', - IsPropertyReference: 'https://262.ecma-international.org/8.0/#ao-ispropertyreference', - IsRegExp: 'https://262.ecma-international.org/8.0/#sec-isregexp', - IsSharedArrayBuffer: 'https://262.ecma-international.org/8.0/#sec-issharedarraybuffer', - IsStrictReference: 'https://262.ecma-international.org/8.0/#ao-isstrictreference', - IsSuperReference: 'https://262.ecma-international.org/8.0/#ao-issuperreference', - IsUnresolvableReference: 'https://262.ecma-international.org/8.0/#ao-isunresolvablereference', - IsWordChar: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IterableToList: 'https://262.ecma-international.org/8.0/#sec-iterabletolist', - IteratorClose: 'https://262.ecma-international.org/8.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/8.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/8.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/8.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/8.0/#sec-iteratorvalue', - LeaveCriticalSection: 'https://262.ecma-international.org/8.0/#sec-leavecriticalsection', - LocalTime: 'https://262.ecma-international.org/8.0/#sec-localtime', - LoopContinues: 'https://262.ecma-international.org/8.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/8.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/8.0/#sec-makeargsetter', - MakeClassConstructor: 'https://262.ecma-international.org/8.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/8.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/8.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/8.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/8.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/8.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/8.0/#sec-maketime', - max: 'https://262.ecma-international.org/8.0/#eqn-max', - 'memory-order': 'https://262.ecma-international.org/8.0/#sec-memory-order', - min: 'https://262.ecma-international.org/8.0/#eqn-min', - MinFromTime: 'https://262.ecma-international.org/8.0/#eqn-MinFromTime', - ModuleNamespaceCreate: 'https://262.ecma-international.org/8.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/8.0/#eqn-modulo', - MonthFromTime: 'https://262.ecma-international.org/8.0/#eqn-MonthFromTime', - msFromTime: 'https://262.ecma-international.org/8.0/#eqn-msFromTime', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/8.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/8.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/8.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/8.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/8.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/8.0/#sec-newpromisecapability', - NormalCompletion: 'https://262.ecma-international.org/8.0/#sec-normalcompletion', - NumberToRawBytes: 'https://262.ecma-international.org/8.0/#sec-numbertorawbytes', - ObjectCreate: 'https://262.ecma-international.org/8.0/#sec-objectcreate', - ObjectDefineProperties: 'https://262.ecma-international.org/8.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/8.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/8.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/8.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/8.0/#sec-ordinarydefineownproperty', - OrdinaryDelete: 'https://262.ecma-international.org/8.0/#sec-ordinarydelete', - OrdinaryGet: 'https://262.ecma-international.org/8.0/#sec-ordinaryget', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/8.0/#sec-ordinarygetownproperty', - OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/8.0/#sec-ordinarygetprototypeof', - OrdinaryHasInstance: 'https://262.ecma-international.org/8.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/8.0/#sec-ordinaryhasproperty', - OrdinaryIsExtensible: 'https://262.ecma-international.org/8.0/#sec-ordinaryisextensible', - OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/8.0/#sec-ordinaryownpropertykeys', - OrdinaryPreventExtensions: 'https://262.ecma-international.org/8.0/#sec-ordinarypreventextensions', - OrdinarySet: 'https://262.ecma-international.org/8.0/#sec-ordinaryset', - OrdinarySetPrototypeOf: 'https://262.ecma-international.org/8.0/#sec-ordinarysetprototypeof', - OrdinaryToPrimitive: 'https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive', - ParseModule: 'https://262.ecma-international.org/8.0/#sec-parsemodule', - ParseScript: 'https://262.ecma-international.org/8.0/#sec-parse-script', - PerformEval: 'https://262.ecma-international.org/8.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/8.0/#sec-performpromiseall', - PerformPromiseRace: 'https://262.ecma-international.org/8.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/8.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/8.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/8.0/#sec-preparefortailcall', - PromiseReactionJob: 'https://262.ecma-international.org/8.0/#sec-promisereactionjob', - PromiseResolveThenableJob: 'https://262.ecma-international.org/8.0/#sec-promiseresolvethenablejob', - ProxyCreate: 'https://262.ecma-international.org/8.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/8.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/8.0/#sec-quotejsonstring', - RawBytesToNumber: 'https://262.ecma-international.org/8.0/#sec-rawbytestonumber', - 'reads-bytes-from': 'https://262.ecma-international.org/8.0/#sec-reads-bytes-from', - 'reads-from': 'https://262.ecma-international.org/8.0/#sec-reads-from', - RegExpAlloc: 'https://262.ecma-international.org/8.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/8.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/8.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/8.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/8.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/8.0/#sec-rejectpromise', - RemoveWaiter: 'https://262.ecma-international.org/8.0/#sec-removewaiter', - RemoveWaiters: 'https://262.ecma-international.org/8.0/#sec-removewaiters', - RepeatMatcher: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireObjectCoercible: 'https://262.ecma-international.org/8.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/8.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/8.0/#sec-resolvethisbinding', - ReturnIfAbrupt: 'https://262.ecma-international.org/8.0/#sec-returnifabrupt', - RunJobs: 'https://262.ecma-international.org/8.0/#sec-runjobs', - SameValue: 'https://262.ecma-international.org/8.0/#sec-samevalue', - SameValueNonNumber: 'https://262.ecma-international.org/8.0/#sec-samevaluenonnumber', - SameValueZero: 'https://262.ecma-international.org/8.0/#sec-samevaluezero', - ScriptEvaluation: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-scriptevaluation', - ScriptEvaluationJob: 'https://262.ecma-international.org/8.0/#sec-scriptevaluationjob', - SecFromTime: 'https://262.ecma-international.org/8.0/#eqn-SecFromTime', - SerializeJSONArray: 'https://262.ecma-international.org/8.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/8.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/8.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/8.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/8.0/#sec-setdefaultglobalbindings', - SetFunctionName: 'https://262.ecma-international.org/8.0/#sec-setfunctionname', - SetImmutablePrototype: 'https://262.ecma-international.org/8.0/#sec-set-immutable-prototype', - SetIntegrityLevel: 'https://262.ecma-international.org/8.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/8.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/8.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/8.0/#sec-setviewvalue', - SharedDataBlockEventSet: 'https://262.ecma-international.org/8.0/#sec-sharedatablockeventset', - SortCompare: 'https://262.ecma-international.org/8.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/8.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/8.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/8.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/8.0/#sec-stringcreate', - StringGetOwnProperty: 'https://262.ecma-international.org/8.0/#sec-stringgetownproperty', - Suspend: 'https://262.ecma-international.org/8.0/#sec-suspend', - SymbolDescriptiveString: 'https://262.ecma-international.org/8.0/#sec-symboldescriptivestring', - 'synchronizes-with': 'https://262.ecma-international.org/8.0/#sec-synchronizes-with', - TestIntegrityLevel: 'https://262.ecma-international.org/8.0/#sec-testintegritylevel', - thisBooleanValue: 'https://262.ecma-international.org/8.0/#sec-thisbooleanvalue', - thisNumberValue: 'https://262.ecma-international.org/8.0/#sec-thisnumbervalue', - thisStringValue: 'https://262.ecma-international.org/8.0/#sec-thisstringvalue', - thisTimeValue: 'https://262.ecma-international.org/8.0/#sec-thistimevalue', - TimeClip: 'https://262.ecma-international.org/8.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/8.0/#eqn-TimeFromYear', - TimeWithinDay: 'https://262.ecma-international.org/8.0/#eqn-TimeWithinDay', - ToBoolean: 'https://262.ecma-international.org/8.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/8.0/#sec-todatestring', - ToIndex: 'https://262.ecma-international.org/8.0/#sec-toindex', - ToInt16: 'https://262.ecma-international.org/8.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/8.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/8.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/8.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/8.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/8.0/#sec-tonumber', - ToObject: 'https://262.ecma-international.org/8.0/#sec-toobject', - TopLevelModuleEvaluationJob: 'https://262.ecma-international.org/8.0/#sec-toplevelmoduleevaluationjob', - ToPrimitive: 'https://262.ecma-international.org/8.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/8.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/8.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/8.0/#sec-tostring', - 'ToString Applied to the Number Type': 'https://262.ecma-international.org/8.0/#sec-tostring-applied-to-the-number-type', - ToUint16: 'https://262.ecma-international.org/8.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/8.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/8.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/8.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/8.0/#sec-triggerpromisereactions', - Type: 'https://262.ecma-international.org/8.0/#sec-ecmascript-data-types-and-values', - TypedArrayCreate: 'https://262.ecma-international.org/8.0/#typedarray-create', - TypedArraySpeciesCreate: 'https://262.ecma-international.org/8.0/#typedarray-species-create', - UpdateEmpty: 'https://262.ecma-international.org/8.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/8.0/#sec-utc-t', - UTF16Decode: 'https://262.ecma-international.org/8.0/#sec-utf16decode', - UTF16Encoding: 'https://262.ecma-international.org/8.0/#sec-utf16encoding', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor', - ValidateAtomicAccess: 'https://262.ecma-international.org/8.0/#sec-validateatomicaccess', - ValidateSharedIntegerTypedArray: 'https://262.ecma-international.org/8.0/#sec-validatesharedintegertypedarray', - ValidateTypedArray: 'https://262.ecma-international.org/8.0/#sec-validatetypedarray', - ValueOfReadEvent: 'https://262.ecma-international.org/8.0/#sec-valueofreadevent', - WakeWaiter: 'https://262.ecma-international.org/8.0/#sec-wakewaiter', - WeekDay: 'https://262.ecma-international.org/8.0/#sec-week-day', - WordCharacters: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation', - YearFromTime: 'https://262.ecma-international.org/8.0/#eqn-YearFromTime' -}; diff --git a/build/node_modules/es-abstract/operations/2018.js b/build/node_modules/es-abstract/operations/2018.js deleted file mode 100644 index 10d10f21..00000000 --- a/build/node_modules/es-abstract/operations/2018.js +++ /dev/null @@ -1,350 +0,0 @@ -'use strict'; - -module.exports = { - abs: 'https://262.ecma-international.org/9.0/#eqn-abs', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/9.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/9.0/#sec-addrestrictedfunctionproperties', - AddWaiter: 'https://262.ecma-international.org/9.0/#sec-addwaiter', - AdvanceStringIndex: 'https://262.ecma-international.org/9.0/#sec-advancestringindex', - 'agent-order': 'https://262.ecma-international.org/9.0/#sec-agent-order', - AgentCanSuspend: 'https://262.ecma-international.org/9.0/#sec-agentcansuspend', - AgentSignifier: 'https://262.ecma-international.org/9.0/#sec-agentsignifier', - AllocateArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-allocatearraybuffer', - AllocateSharedArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-allocatesharedarraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/9.0/#sec-allocatetypedarray', - AllocateTypedArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-allocatetypedarraybuffer', - ArrayCreate: 'https://262.ecma-international.org/9.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/9.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/9.0/#sec-arrayspeciescreate', - AsyncFunctionCreate: 'https://262.ecma-international.org/9.0/#sec-async-functions-abstract-operations-async-function-create', - AsyncFunctionStart: 'https://262.ecma-international.org/9.0/#sec-async-functions-abstract-operations-async-function-start', - AsyncGeneratorEnqueue: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorenqueue', - AsyncGeneratorFunctionCreate: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorfunctioncreate', - AsyncGeneratorReject: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorreject', - AsyncGeneratorResolve: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorresolve', - AsyncGeneratorResumeNext: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorresumenext', - AsyncGeneratorStart: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorstart', - AsyncGeneratorYield: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratoryield', - AsyncIteratorClose: 'https://262.ecma-international.org/9.0/#sec-asynciteratorclose', - AtomicLoad: 'https://262.ecma-international.org/9.0/#sec-atomicload', - AtomicReadModifyWrite: 'https://262.ecma-international.org/9.0/#sec-atomicreadmodifywrite', - Await: 'https://262.ecma-international.org/9.0/#await', - BackreferenceMatcher: 'https://262.ecma-international.org/9.0/#sec-backreference-matcher', - BlockDeclarationInstantiation: 'https://262.ecma-international.org/9.0/#sec-blockdeclarationinstantiation', - BoundFunctionCreate: 'https://262.ecma-international.org/9.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/9.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/9.0/#sec-canonicalnumericindexstring', - CaseClauseIsSelected: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-caseclauseisselected', - CharacterRange: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterRangeOrUnion: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-clonearraybuffer', - CompletePropertyDescriptor: 'https://262.ecma-international.org/9.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/9.0/#sec-completion-record-specification-type', - ComposeWriteEventBytes: 'https://262.ecma-international.org/9.0/#sec-composewriteeventbytes', - Construct: 'https://262.ecma-international.org/9.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/9.0/#sec-copydatablockbytes', - CopyDataProperties: 'https://262.ecma-international.org/9.0/#sec-copydataproperties', - CreateArrayFromList: 'https://262.ecma-international.org/9.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/9.0/#sec-createarrayiterator', - CreateAsyncFromSyncIterator: 'https://262.ecma-international.org/9.0/#sec-createasyncfromsynciterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/9.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/9.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/9.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/9.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/9.0/#sec-createdynamicfunction', - CreateHTML: 'https://262.ecma-international.org/9.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/9.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/9.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/9.0/#sec-createlistfromarraylike', - CreateListIteratorRecord: 'https://262.ecma-international.org/9.0/#sec-createlistiteratorRecord', - CreateMapIterator: 'https://262.ecma-international.org/9.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/9.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/9.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/9.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/9.0/#sec-createrealm', - CreateResolvingFunctions: 'https://262.ecma-international.org/9.0/#sec-createresolvingfunctions', - CreateSetIterator: 'https://262.ecma-international.org/9.0/#sec-createsetiterator', - CreateSharedByteDataBlock: 'https://262.ecma-international.org/9.0/#sec-createsharedbytedatablock', - CreateStringIterator: 'https://262.ecma-international.org/9.0/#sec-createstringiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/9.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/9.0/#sec-date-number', - DateString: 'https://262.ecma-international.org/9.0/#sec-datestring', - Day: 'https://262.ecma-international.org/9.0/#eqn-Day', - DayFromYear: 'https://262.ecma-international.org/9.0/#eqn-DaysFromYear', - DaysInYear: 'https://262.ecma-international.org/9.0/#eqn-DaysInYear', - DayWithinYear: 'https://262.ecma-international.org/9.0/#eqn-DayWithinYear', - Decode: 'https://262.ecma-international.org/9.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/9.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/9.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/9.0/#sec-encode', - EnqueueJob: 'https://262.ecma-international.org/9.0/#sec-enqueuejob', - EnterCriticalSection: 'https://262.ecma-international.org/9.0/#sec-entercriticalsection', - EnumerableOwnPropertyNames: 'https://262.ecma-international.org/9.0/#sec-enumerableownpropertynames', - EnumerateObjectProperties: 'https://262.ecma-international.org/9.0/#sec-enumerate-object-properties', - EscapeRegExpPattern: 'https://262.ecma-international.org/9.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/9.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/9.0/#sec-evaluatecall', - EvaluateNew: 'https://262.ecma-international.org/9.0/#sec-evaluatenew', - EventSet: 'https://262.ecma-international.org/9.0/#sec-event-set', - floor: 'https://262.ecma-international.org/9.0/#eqn-floor', - ForBodyEvaluation: 'https://262.ecma-international.org/9.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind', - FromPropertyDescriptor: 'https://262.ecma-international.org/9.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/9.0/#sec-fulfillpromise', - FunctionAllocate: 'https://262.ecma-international.org/9.0/#sec-functionallocate', - FunctionCreate: 'https://262.ecma-international.org/9.0/#sec-functioncreate', - FunctionDeclarationInstantiation: 'https://262.ecma-international.org/9.0/#sec-functiondeclarationinstantiation', - FunctionInitialize: 'https://262.ecma-international.org/9.0/#sec-functioninitialize', - GeneratorFunctionCreate: 'https://262.ecma-international.org/9.0/#sec-generatorfunctioncreate', - GeneratorResume: 'https://262.ecma-international.org/9.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/9.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/9.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/9.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/9.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/9.0/#sec-get-o-p', - GetActiveScriptOrModule: 'https://262.ecma-international.org/9.0/#sec-getactivescriptormodule', - GetBase: 'https://262.ecma-international.org/9.0/#sec-getbase', - GetFunctionRealm: 'https://262.ecma-international.org/9.0/#sec-getfunctionrealm', - GetGeneratorKind: 'https://262.ecma-international.org/9.0/#sec-getgeneratorkind', - GetGlobalObject: 'https://262.ecma-international.org/9.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/9.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/9.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/9.0/#sec-getmethod', - GetModifySetValueInBuffer: 'https://262.ecma-international.org/9.0/#sec-getmodifysetvalueinbuffer', - GetModuleNamespace: 'https://262.ecma-international.org/9.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/9.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/9.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/9.0/#sec-getprototypefromconstructor', - GetReferencedName: 'https://262.ecma-international.org/9.0/#sec-getreferencedname', - GetSubstitution: 'https://262.ecma-international.org/9.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/9.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/9.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/9.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/9.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/9.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/9.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/9.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/9.0/#sec-getviewvalue', - GetWaiterList: 'https://262.ecma-international.org/9.0/#sec-getwaiterlist', - GlobalDeclarationInstantiation: 'https://262.ecma-international.org/9.0/#sec-globaldeclarationinstantiation', - 'happens-before': 'https://262.ecma-international.org/9.0/#sec-happens-before', - HasOwnProperty: 'https://262.ecma-international.org/9.0/#sec-hasownproperty', - HasPrimitiveBase: 'https://262.ecma-international.org/9.0/#sec-hasprimitivebase', - HasProperty: 'https://262.ecma-international.org/9.0/#sec-hasproperty', - 'host-synchronizes-with': 'https://262.ecma-international.org/9.0/#sec-host-synchronizes-with', - HostEnsureCanCompileStrings: 'https://262.ecma-international.org/9.0/#sec-hostensurecancompilestrings', - HostEventSet: 'https://262.ecma-international.org/9.0/#sec-hosteventset', - HostPromiseRejectionTracker: 'https://262.ecma-international.org/9.0/#sec-host-promise-rejection-tracker', - HostReportErrors: 'https://262.ecma-international.org/9.0/#sec-host-report-errors', - HostResolveImportedModule: 'https://262.ecma-international.org/9.0/#sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/9.0/#eqn-HourFromTime', - IfAbruptRejectPromise: 'https://262.ecma-international.org/9.0/#sec-ifabruptrejectpromise', - ImportedLocalNames: 'https://262.ecma-international.org/9.0/#sec-importedlocalnames', - InitializeBoundName: 'https://262.ecma-international.org/9.0/#sec-initializeboundname', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/9.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/9.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/9.0/#eqn-InLeapYear', - InnerModuleEvaluation: 'https://262.ecma-international.org/9.0/#sec-innermoduleevaluation', - InnerModuleInstantiation: 'https://262.ecma-international.org/9.0/#sec-innermoduleinstantiation', - InstanceofOperator: 'https://262.ecma-international.org/9.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/9.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/9.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/9.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/9.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/9.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/9.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/9.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/9.0/#sec-isarray', - IsCallable: 'https://262.ecma-international.org/9.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/9.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/9.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/9.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/9.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/9.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/9.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/9.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/9.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/9.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/9.0/#sec-islabelledfunction', - IsPromise: 'https://262.ecma-international.org/9.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/9.0/#sec-ispropertykey', - IsPropertyReference: 'https://262.ecma-international.org/9.0/#sec-ispropertyreference', - IsRegExp: 'https://262.ecma-international.org/9.0/#sec-isregexp', - IsSharedArrayBuffer: 'https://262.ecma-international.org/9.0/#sec-issharedarraybuffer', - IsStrictReference: 'https://262.ecma-international.org/9.0/#sec-isstrictreference', - IsStringPrefix: 'https://262.ecma-international.org/9.0/#sec-isstringprefix', - IsSuperReference: 'https://262.ecma-international.org/9.0/#sec-issuperreference', - IsUnresolvableReference: 'https://262.ecma-international.org/9.0/#sec-isunresolvablereference', - IsWordChar: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IterableToList: 'https://262.ecma-international.org/9.0/#sec-iterabletolist', - IteratorClose: 'https://262.ecma-international.org/9.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/9.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/9.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/9.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/9.0/#sec-iteratorvalue', - LeaveCriticalSection: 'https://262.ecma-international.org/9.0/#sec-leavecriticalsection', - LocalTime: 'https://262.ecma-international.org/9.0/#sec-localtime', - LoopContinues: 'https://262.ecma-international.org/9.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/9.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/9.0/#sec-makeargsetter', - MakeClassConstructor: 'https://262.ecma-international.org/9.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/9.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/9.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/9.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/9.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/9.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/9.0/#sec-maketime', - max: 'https://262.ecma-international.org/9.0/#eqn-max', - 'memory-order': 'https://262.ecma-international.org/9.0/#sec-memory-order', - min: 'https://262.ecma-international.org/9.0/#eqn-min', - MinFromTime: 'https://262.ecma-international.org/9.0/#eqn-MinFromTime', - ModuleDeclarationEnvironmentSetup: 'https://262.ecma-international.org/9.0/#sec-moduledeclarationenvironmentsetup', - ModuleExecution: 'https://262.ecma-international.org/9.0/#sec-moduleexecution', - ModuleNamespaceCreate: 'https://262.ecma-international.org/9.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/9.0/#eqn-modulo', - MonthFromTime: 'https://262.ecma-international.org/9.0/#eqn-MonthFromTime', - msFromTime: 'https://262.ecma-international.org/9.0/#eqn-msFromTime', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/9.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/9.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/9.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/9.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/9.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/9.0/#sec-newpromisecapability', - NormalCompletion: 'https://262.ecma-international.org/9.0/#sec-normalcompletion', - NumberToRawBytes: 'https://262.ecma-international.org/9.0/#sec-numbertorawbytes', - NumberToString: 'https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type', - ObjectCreate: 'https://262.ecma-international.org/9.0/#sec-objectcreate', - ObjectDefineProperties: 'https://262.ecma-international.org/9.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/9.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/9.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/9.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/9.0/#sec-ordinarydefineownproperty', - OrdinaryDelete: 'https://262.ecma-international.org/9.0/#sec-ordinarydelete', - OrdinaryGet: 'https://262.ecma-international.org/9.0/#sec-ordinaryget', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/9.0/#sec-ordinarygetownproperty', - OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/9.0/#sec-ordinarygetprototypeof', - OrdinaryHasInstance: 'https://262.ecma-international.org/9.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/9.0/#sec-ordinaryhasproperty', - OrdinaryIsExtensible: 'https://262.ecma-international.org/9.0/#sec-ordinaryisextensible', - OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/9.0/#sec-ordinaryownpropertykeys', - OrdinaryPreventExtensions: 'https://262.ecma-international.org/9.0/#sec-ordinarypreventextensions', - OrdinarySet: 'https://262.ecma-international.org/9.0/#sec-ordinaryset', - OrdinarySetPrototypeOf: 'https://262.ecma-international.org/9.0/#sec-ordinarysetprototypeof', - OrdinarySetWithOwnDescriptor: 'https://262.ecma-international.org/9.0/#sec-ordinarysetwithowndescriptor', - OrdinaryToPrimitive: 'https://262.ecma-international.org/9.0/#sec-ordinarytoprimitive', - ParseModule: 'https://262.ecma-international.org/9.0/#sec-parsemodule', - ParseScript: 'https://262.ecma-international.org/9.0/#sec-parse-script', - PerformEval: 'https://262.ecma-international.org/9.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/9.0/#sec-performpromiseall', - PerformPromiseRace: 'https://262.ecma-international.org/9.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/9.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/9.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/9.0/#sec-preparefortailcall', - PromiseReactionJob: 'https://262.ecma-international.org/9.0/#sec-promisereactionjob', - PromiseResolve: 'https://262.ecma-international.org/9.0/#sec-promise-resolve', - PromiseResolveThenableJob: 'https://262.ecma-international.org/9.0/#sec-promiseresolvethenablejob', - ProxyCreate: 'https://262.ecma-international.org/9.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/9.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/9.0/#sec-quotejsonstring', - RawBytesToNumber: 'https://262.ecma-international.org/9.0/#sec-rawbytestonumber', - 'reads-bytes-from': 'https://262.ecma-international.org/9.0/#sec-reads-bytes-from', - 'reads-from': 'https://262.ecma-international.org/9.0/#sec-reads-from', - RegExpAlloc: 'https://262.ecma-international.org/9.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/9.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/9.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/9.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/9.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/9.0/#sec-rejectpromise', - RemoveWaiter: 'https://262.ecma-international.org/9.0/#sec-removewaiter', - RemoveWaiters: 'https://262.ecma-international.org/9.0/#sec-removewaiters', - RepeatMatcher: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireObjectCoercible: 'https://262.ecma-international.org/9.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/9.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/9.0/#sec-resolvethisbinding', - ReturnIfAbrupt: 'https://262.ecma-international.org/9.0/#sec-returnifabrupt', - RunJobs: 'https://262.ecma-international.org/9.0/#sec-runjobs', - SameValue: 'https://262.ecma-international.org/9.0/#sec-samevalue', - SameValueNonNumber: 'https://262.ecma-international.org/9.0/#sec-samevaluenonnumber', - SameValueZero: 'https://262.ecma-international.org/9.0/#sec-samevaluezero', - ScriptEvaluation: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-scriptevaluation', - ScriptEvaluationJob: 'https://262.ecma-international.org/9.0/#sec-scriptevaluationjob', - SecFromTime: 'https://262.ecma-international.org/9.0/#eqn-SecFromTime', - SerializeJSONArray: 'https://262.ecma-international.org/9.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/9.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/9.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/9.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/9.0/#sec-setdefaultglobalbindings', - SetFunctionLength: 'https://262.ecma-international.org/9.0/#sec-setfunctionlength', - SetFunctionName: 'https://262.ecma-international.org/9.0/#sec-setfunctionname', - SetImmutablePrototype: 'https://262.ecma-international.org/9.0/#sec-set-immutable-prototype', - SetIntegrityLevel: 'https://262.ecma-international.org/9.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/9.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/9.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/9.0/#sec-setviewvalue', - SharedDataBlockEventSet: 'https://262.ecma-international.org/9.0/#sec-sharedatablockeventset', - SortCompare: 'https://262.ecma-international.org/9.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/9.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/9.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/9.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/9.0/#sec-stringcreate', - StringGetOwnProperty: 'https://262.ecma-international.org/9.0/#sec-stringgetownproperty', - Suspend: 'https://262.ecma-international.org/9.0/#sec-suspend', - SymbolDescriptiveString: 'https://262.ecma-international.org/9.0/#sec-symboldescriptivestring', - 'synchronizes-with': 'https://262.ecma-international.org/9.0/#sec-synchronizes-with', - TestIntegrityLevel: 'https://262.ecma-international.org/9.0/#sec-testintegritylevel', - thisBooleanValue: 'https://262.ecma-international.org/9.0/#sec-thisbooleanvalue', - thisNumberValue: 'https://262.ecma-international.org/9.0/#sec-thisnumbervalue', - thisStringValue: 'https://262.ecma-international.org/9.0/#sec-thisstringvalue', - thisSymbolValue: 'https://262.ecma-international.org/9.0/#sec-thissymbolvalue', - thisTimeValue: 'https://262.ecma-international.org/9.0/#sec-thistimevalue', - ThrowCompletion: 'https://262.ecma-international.org/9.0/#sec-throwcompletion', - TimeClip: 'https://262.ecma-international.org/9.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/9.0/#eqn-TimeFromYear', - TimeString: 'https://262.ecma-international.org/9.0/#sec-timestring', - TimeWithinDay: 'https://262.ecma-international.org/9.0/#eqn-TimeWithinDay', - TimeZoneString: 'https://262.ecma-international.org/9.0/#sec-timezoneestring', - ToBoolean: 'https://262.ecma-international.org/9.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/9.0/#sec-todatestring', - ToIndex: 'https://262.ecma-international.org/9.0/#sec-toindex', - ToInt16: 'https://262.ecma-international.org/9.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/9.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/9.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/9.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/9.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/9.0/#sec-tonumber', - ToObject: 'https://262.ecma-international.org/9.0/#sec-toobject', - TopLevelModuleEvaluationJob: 'https://262.ecma-international.org/9.0/#sec-toplevelmoduleevaluationjob', - ToPrimitive: 'https://262.ecma-international.org/9.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/9.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/9.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/9.0/#sec-tostring', - ToUint16: 'https://262.ecma-international.org/9.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/9.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/9.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/9.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/9.0/#sec-triggerpromisereactions', - Type: 'https://262.ecma-international.org/9.0/#sec-ecmascript-data-types-and-values', - TypedArrayCreate: 'https://262.ecma-international.org/9.0/#typedarray-create', - TypedArraySpeciesCreate: 'https://262.ecma-international.org/9.0/#typedarray-species-create', - UnicodeEscape: 'https://262.ecma-international.org/9.0/#sec-unicodeescape', - UnicodeMatchProperty: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-unicodematchproperty-p', - UnicodeMatchPropertyValue: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v', - UpdateEmpty: 'https://262.ecma-international.org/9.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/9.0/#sec-utc-t', - UTF16Decode: 'https://262.ecma-international.org/9.0/#sec-utf16decode', - UTF16Encoding: 'https://262.ecma-international.org/9.0/#sec-utf16encoding', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/9.0/#sec-validateandapplypropertydescriptor', - ValidateAtomicAccess: 'https://262.ecma-international.org/9.0/#sec-validateatomicaccess', - ValidateSharedIntegerTypedArray: 'https://262.ecma-international.org/9.0/#sec-validatesharedintegertypedarray', - ValidateTypedArray: 'https://262.ecma-international.org/9.0/#sec-validatetypedarray', - ValueOfReadEvent: 'https://262.ecma-international.org/9.0/#sec-valueofreadevent', - WakeWaiter: 'https://262.ecma-international.org/9.0/#sec-wakewaiter', - WeekDay: 'https://262.ecma-international.org/9.0/#sec-week-day', - WordCharacters: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-wordcharacters-abstract-operation', - YearFromTime: 'https://262.ecma-international.org/9.0/#eqn-YearFromTime' -}; diff --git a/build/node_modules/es-abstract/operations/2019.js b/build/node_modules/es-abstract/operations/2019.js deleted file mode 100644 index 57a4be4a..00000000 --- a/build/node_modules/es-abstract/operations/2019.js +++ /dev/null @@ -1,355 +0,0 @@ -'use strict'; - -module.exports = { - abs: 'https://262.ecma-international.org/10.0/#eqn-abs', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/10.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/10.0/#sec-abstract-relational-comparison', - AddEntriesFromIterable: 'https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/10.0/#sec-addrestrictedfunctionproperties', - AddWaiter: 'https://262.ecma-international.org/10.0/#sec-addwaiter', - AdvanceStringIndex: 'https://262.ecma-international.org/10.0/#sec-advancestringindex', - 'agent-order': 'https://262.ecma-international.org/10.0/#sec-agent-order', - AgentCanSuspend: 'https://262.ecma-international.org/10.0/#sec-agentcansuspend', - AgentSignifier: 'https://262.ecma-international.org/10.0/#sec-agentsignifier', - AllocateArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-allocatearraybuffer', - AllocateSharedArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-allocatesharedarraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/10.0/#sec-allocatetypedarray', - AllocateTypedArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-allocatetypedarraybuffer', - ArrayCreate: 'https://262.ecma-international.org/10.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/10.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/10.0/#sec-arrayspeciescreate', - AsyncFromSyncIteratorContinuation: 'https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation', - AsyncFunctionCreate: 'https://262.ecma-international.org/10.0/#sec-async-functions-abstract-operations-async-function-create', - AsyncFunctionStart: 'https://262.ecma-international.org/10.0/#sec-async-functions-abstract-operations-async-function-start', - AsyncGeneratorEnqueue: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorenqueue', - AsyncGeneratorFunctionCreate: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorfunctioncreate', - AsyncGeneratorReject: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorreject', - AsyncGeneratorResolve: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorresolve', - AsyncGeneratorResumeNext: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorresumenext', - AsyncGeneratorStart: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorstart', - AsyncGeneratorYield: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratoryield', - AsyncIteratorClose: 'https://262.ecma-international.org/10.0/#sec-asynciteratorclose', - AtomicLoad: 'https://262.ecma-international.org/10.0/#sec-atomicload', - AtomicReadModifyWrite: 'https://262.ecma-international.org/10.0/#sec-atomicreadmodifywrite', - Await: 'https://262.ecma-international.org/10.0/#await', - BackreferenceMatcher: 'https://262.ecma-international.org/10.0/#sec-backreference-matcher', - BlockDeclarationInstantiation: 'https://262.ecma-international.org/10.0/#sec-blockdeclarationinstantiation', - BoundFunctionCreate: 'https://262.ecma-international.org/10.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/10.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/10.0/#sec-canonicalnumericindexstring', - CaseClauseIsSelected: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-caseclauseisselected', - CharacterRange: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterRangeOrUnion: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-clonearraybuffer', - CompletePropertyDescriptor: 'https://262.ecma-international.org/10.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/10.0/#sec-completion-record-specification-type', - ComposeWriteEventBytes: 'https://262.ecma-international.org/10.0/#sec-composewriteeventbytes', - Construct: 'https://262.ecma-international.org/10.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/10.0/#sec-copydatablockbytes', - CopyDataProperties: 'https://262.ecma-international.org/10.0/#sec-copydataproperties', - CreateArrayFromList: 'https://262.ecma-international.org/10.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/10.0/#sec-createarrayiterator', - CreateAsyncFromSyncIterator: 'https://262.ecma-international.org/10.0/#sec-createasyncfromsynciterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/10.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/10.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/10.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/10.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/10.0/#sec-createdynamicfunction', - CreateHTML: 'https://262.ecma-international.org/10.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/10.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/10.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/10.0/#sec-createlistfromarraylike', - CreateListIteratorRecord: 'https://262.ecma-international.org/10.0/#sec-createlistiteratorRecord', - CreateMapIterator: 'https://262.ecma-international.org/10.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/10.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/10.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/10.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/10.0/#sec-createrealm', - CreateResolvingFunctions: 'https://262.ecma-international.org/10.0/#sec-createresolvingfunctions', - CreateSetIterator: 'https://262.ecma-international.org/10.0/#sec-createsetiterator', - CreateSharedByteDataBlock: 'https://262.ecma-international.org/10.0/#sec-createsharedbytedatablock', - CreateStringIterator: 'https://262.ecma-international.org/10.0/#sec-createstringiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/10.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/10.0/#sec-date-number', - DateString: 'https://262.ecma-international.org/10.0/#sec-datestring', - Day: 'https://262.ecma-international.org/10.0/#eqn-Day', - DayFromYear: 'https://262.ecma-international.org/10.0/#eqn-DaysFromYear', - DaysInYear: 'https://262.ecma-international.org/10.0/#eqn-DaysInYear', - DayWithinYear: 'https://262.ecma-international.org/10.0/#eqn-DayWithinYear', - Decode: 'https://262.ecma-international.org/10.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/10.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/10.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/10.0/#sec-encode', - EnqueueJob: 'https://262.ecma-international.org/10.0/#sec-enqueuejob', - EnterCriticalSection: 'https://262.ecma-international.org/10.0/#sec-entercriticalsection', - EnumerableOwnPropertyNames: 'https://262.ecma-international.org/10.0/#sec-enumerableownpropertynames', - EnumerateObjectProperties: 'https://262.ecma-international.org/10.0/#sec-enumerate-object-properties', - EscapeRegExpPattern: 'https://262.ecma-international.org/10.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/10.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/10.0/#sec-evaluatecall', - EvaluateNew: 'https://262.ecma-international.org/10.0/#sec-evaluatenew', - EventSet: 'https://262.ecma-international.org/10.0/#sec-event-set', - ExecuteModule: 'https://262.ecma-international.org/10.0/#sec-source-text-module-record-execute-module', - FlattenIntoArray: 'https://262.ecma-international.org/10.0/#sec-flattenintoarray', - floor: 'https://262.ecma-international.org/10.0/#eqn-floor', - ForBodyEvaluation: 'https://262.ecma-international.org/10.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind', - FromPropertyDescriptor: 'https://262.ecma-international.org/10.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/10.0/#sec-fulfillpromise', - FunctionAllocate: 'https://262.ecma-international.org/10.0/#sec-functionallocate', - FunctionCreate: 'https://262.ecma-international.org/10.0/#sec-functioncreate', - FunctionDeclarationInstantiation: 'https://262.ecma-international.org/10.0/#sec-functiondeclarationinstantiation', - FunctionInitialize: 'https://262.ecma-international.org/10.0/#sec-functioninitialize', - GeneratorFunctionCreate: 'https://262.ecma-international.org/10.0/#sec-generatorfunctioncreate', - GeneratorResume: 'https://262.ecma-international.org/10.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/10.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/10.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/10.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/10.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/10.0/#sec-get-o-p', - GetActiveScriptOrModule: 'https://262.ecma-international.org/10.0/#sec-getactivescriptormodule', - GetBase: 'https://262.ecma-international.org/10.0/#sec-getbase', - GetFunctionRealm: 'https://262.ecma-international.org/10.0/#sec-getfunctionrealm', - GetGeneratorKind: 'https://262.ecma-international.org/10.0/#sec-getgeneratorkind', - GetGlobalObject: 'https://262.ecma-international.org/10.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/10.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/10.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/10.0/#sec-getmethod', - GetModifySetValueInBuffer: 'https://262.ecma-international.org/10.0/#sec-getmodifysetvalueinbuffer', - GetModuleNamespace: 'https://262.ecma-international.org/10.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/10.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/10.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/10.0/#sec-getprototypefromconstructor', - GetReferencedName: 'https://262.ecma-international.org/10.0/#sec-getreferencedname', - GetSubstitution: 'https://262.ecma-international.org/10.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/10.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/10.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/10.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/10.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/10.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/10.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/10.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/10.0/#sec-getviewvalue', - GetWaiterList: 'https://262.ecma-international.org/10.0/#sec-getwaiterlist', - GlobalDeclarationInstantiation: 'https://262.ecma-international.org/10.0/#sec-globaldeclarationinstantiation', - 'happens-before': 'https://262.ecma-international.org/10.0/#sec-happens-before', - HasOwnProperty: 'https://262.ecma-international.org/10.0/#sec-hasownproperty', - HasPrimitiveBase: 'https://262.ecma-international.org/10.0/#sec-hasprimitivebase', - HasProperty: 'https://262.ecma-international.org/10.0/#sec-hasproperty', - 'host-synchronizes-with': 'https://262.ecma-international.org/10.0/#sec-host-synchronizes-with', - HostEnsureCanCompileStrings: 'https://262.ecma-international.org/10.0/#sec-hostensurecancompilestrings', - HostEventSet: 'https://262.ecma-international.org/10.0/#sec-hosteventset', - HostPromiseRejectionTracker: 'https://262.ecma-international.org/10.0/#sec-host-promise-rejection-tracker', - HostReportErrors: 'https://262.ecma-international.org/10.0/#sec-host-report-errors', - HostResolveImportedModule: 'https://262.ecma-international.org/10.0/#sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/10.0/#eqn-HourFromTime', - IfAbruptRejectPromise: 'https://262.ecma-international.org/10.0/#sec-ifabruptrejectpromise', - ImportedLocalNames: 'https://262.ecma-international.org/10.0/#sec-importedlocalnames', - InitializeBoundName: 'https://262.ecma-international.org/10.0/#sec-initializeboundname', - InitializeEnvironment: 'https://262.ecma-international.org/10.0/#sec-source-text-module-record-initialize-environment', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/10.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/10.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/10.0/#eqn-InLeapYear', - InnerModuleEvaluation: 'https://262.ecma-international.org/10.0/#sec-innermoduleevaluation', - InnerModuleInstantiation: 'https://262.ecma-international.org/10.0/#sec-innermoduleinstantiation', - InstanceofOperator: 'https://262.ecma-international.org/10.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/10.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/10.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/10.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/10.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/10.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/10.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/10.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/10.0/#sec-isarray', - IsCallable: 'https://262.ecma-international.org/10.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/10.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/10.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/10.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/10.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/10.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/10.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/10.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/10.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/10.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/10.0/#sec-islabelledfunction', - IsPromise: 'https://262.ecma-international.org/10.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/10.0/#sec-ispropertykey', - IsPropertyReference: 'https://262.ecma-international.org/10.0/#sec-ispropertyreference', - IsRegExp: 'https://262.ecma-international.org/10.0/#sec-isregexp', - IsSharedArrayBuffer: 'https://262.ecma-international.org/10.0/#sec-issharedarraybuffer', - IsStrictReference: 'https://262.ecma-international.org/10.0/#sec-isstrictreference', - IsStringPrefix: 'https://262.ecma-international.org/10.0/#sec-isstringprefix', - IsSuperReference: 'https://262.ecma-international.org/10.0/#sec-issuperreference', - IsUnresolvableReference: 'https://262.ecma-international.org/10.0/#sec-isunresolvablereference', - IsWordChar: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IterableToList: 'https://262.ecma-international.org/10.0/#sec-iterabletolist', - IteratorClose: 'https://262.ecma-international.org/10.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/10.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/10.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/10.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/10.0/#sec-iteratorvalue', - LeaveCriticalSection: 'https://262.ecma-international.org/10.0/#sec-leavecriticalsection', - LocalTime: 'https://262.ecma-international.org/10.0/#sec-localtime', - LoopContinues: 'https://262.ecma-international.org/10.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/10.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/10.0/#sec-makeargsetter', - MakeClassConstructor: 'https://262.ecma-international.org/10.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/10.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/10.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/10.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/10.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/10.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/10.0/#sec-maketime', - max: 'https://262.ecma-international.org/10.0/#eqn-max', - 'memory-order': 'https://262.ecma-international.org/10.0/#sec-memory-order', - min: 'https://262.ecma-international.org/10.0/#eqn-min', - MinFromTime: 'https://262.ecma-international.org/10.0/#eqn-MinFromTime', - ModuleNamespaceCreate: 'https://262.ecma-international.org/10.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/10.0/#eqn-modulo', - MonthFromTime: 'https://262.ecma-international.org/10.0/#eqn-MonthFromTime', - msFromTime: 'https://262.ecma-international.org/10.0/#eqn-msFromTime', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/10.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/10.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/10.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/10.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/10.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/10.0/#sec-newpromisecapability', - NormalCompletion: 'https://262.ecma-international.org/10.0/#sec-normalcompletion', - NotifyWaiter: 'https://262.ecma-international.org/10.0/#sec-notifywaiter', - NumberToRawBytes: 'https://262.ecma-international.org/10.0/#sec-numbertorawbytes', - NumberToString: 'https://262.ecma-international.org/10.0/#sec-tostring-applied-to-the-number-type', - ObjectCreate: 'https://262.ecma-international.org/10.0/#sec-objectcreate', - ObjectDefineProperties: 'https://262.ecma-international.org/10.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/10.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/10.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/10.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/10.0/#sec-ordinarydefineownproperty', - OrdinaryDelete: 'https://262.ecma-international.org/10.0/#sec-ordinarydelete', - OrdinaryGet: 'https://262.ecma-international.org/10.0/#sec-ordinaryget', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/10.0/#sec-ordinarygetownproperty', - OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/10.0/#sec-ordinarygetprototypeof', - OrdinaryHasInstance: 'https://262.ecma-international.org/10.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/10.0/#sec-ordinaryhasproperty', - OrdinaryIsExtensible: 'https://262.ecma-international.org/10.0/#sec-ordinaryisextensible', - OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/10.0/#sec-ordinaryownpropertykeys', - OrdinaryPreventExtensions: 'https://262.ecma-international.org/10.0/#sec-ordinarypreventextensions', - OrdinarySet: 'https://262.ecma-international.org/10.0/#sec-ordinaryset', - OrdinarySetPrototypeOf: 'https://262.ecma-international.org/10.0/#sec-ordinarysetprototypeof', - OrdinarySetWithOwnDescriptor: 'https://262.ecma-international.org/10.0/#sec-ordinarysetwithowndescriptor', - OrdinaryToPrimitive: 'https://262.ecma-international.org/10.0/#sec-ordinarytoprimitive', - ParseModule: 'https://262.ecma-international.org/10.0/#sec-parsemodule', - ParseScript: 'https://262.ecma-international.org/10.0/#sec-parse-script', - PerformEval: 'https://262.ecma-international.org/10.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/10.0/#sec-performpromiseall', - PerformPromiseRace: 'https://262.ecma-international.org/10.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/10.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/10.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/10.0/#sec-preparefortailcall', - PromiseReactionJob: 'https://262.ecma-international.org/10.0/#sec-promisereactionjob', - PromiseResolve: 'https://262.ecma-international.org/10.0/#sec-promise-resolve', - PromiseResolveThenableJob: 'https://262.ecma-international.org/10.0/#sec-promiseresolvethenablejob', - ProxyCreate: 'https://262.ecma-international.org/10.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/10.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/10.0/#sec-quotejsonstring', - RawBytesToNumber: 'https://262.ecma-international.org/10.0/#sec-rawbytestonumber', - 'reads-bytes-from': 'https://262.ecma-international.org/10.0/#sec-reads-bytes-from', - 'reads-from': 'https://262.ecma-international.org/10.0/#sec-reads-from', - RegExpAlloc: 'https://262.ecma-international.org/10.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/10.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/10.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/10.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/10.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/10.0/#sec-rejectpromise', - RemoveWaiter: 'https://262.ecma-international.org/10.0/#sec-removewaiter', - RemoveWaiters: 'https://262.ecma-international.org/10.0/#sec-removewaiters', - RepeatMatcher: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireObjectCoercible: 'https://262.ecma-international.org/10.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/10.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/10.0/#sec-resolvethisbinding', - ReturnIfAbrupt: 'https://262.ecma-international.org/10.0/#sec-returnifabrupt', - RunJobs: 'https://262.ecma-international.org/10.0/#sec-runjobs', - SameValue: 'https://262.ecma-international.org/10.0/#sec-samevalue', - SameValueNonNumber: 'https://262.ecma-international.org/10.0/#sec-samevaluenonnumber', - SameValueZero: 'https://262.ecma-international.org/10.0/#sec-samevaluezero', - ScriptEvaluation: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-scriptevaluation', - ScriptEvaluationJob: 'https://262.ecma-international.org/10.0/#sec-scriptevaluationjob', - SecFromTime: 'https://262.ecma-international.org/10.0/#eqn-SecFromTime', - SerializeJSONArray: 'https://262.ecma-international.org/10.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/10.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/10.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/10.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/10.0/#sec-setdefaultglobalbindings', - SetFunctionLength: 'https://262.ecma-international.org/10.0/#sec-setfunctionlength', - SetFunctionName: 'https://262.ecma-international.org/10.0/#sec-setfunctionname', - SetImmutablePrototype: 'https://262.ecma-international.org/10.0/#sec-set-immutable-prototype', - SetIntegrityLevel: 'https://262.ecma-international.org/10.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/10.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/10.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/10.0/#sec-setviewvalue', - SharedDataBlockEventSet: 'https://262.ecma-international.org/10.0/#sec-sharedatablockeventset', - SortCompare: 'https://262.ecma-international.org/10.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/10.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/10.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/10.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/10.0/#sec-stringcreate', - StringGetOwnProperty: 'https://262.ecma-international.org/10.0/#sec-stringgetownproperty', - Suspend: 'https://262.ecma-international.org/10.0/#sec-suspend', - SymbolDescriptiveString: 'https://262.ecma-international.org/10.0/#sec-symboldescriptivestring', - SynchronizeEventSet: 'https://262.ecma-international.org/10.0/#sec-synchronizeeventset', - 'synchronizes-with': 'https://262.ecma-international.org/10.0/#sec-synchronizes-with', - TestIntegrityLevel: 'https://262.ecma-international.org/10.0/#sec-testintegritylevel', - thisBooleanValue: 'https://262.ecma-international.org/10.0/#sec-thisbooleanvalue', - thisNumberValue: 'https://262.ecma-international.org/10.0/#sec-thisnumbervalue', - thisStringValue: 'https://262.ecma-international.org/10.0/#sec-thisstringvalue', - thisSymbolValue: 'https://262.ecma-international.org/10.0/#sec-thissymbolvalue', - thisTimeValue: 'https://262.ecma-international.org/10.0/#sec-thistimevalue', - ThrowCompletion: 'https://262.ecma-international.org/10.0/#sec-throwcompletion', - TimeClip: 'https://262.ecma-international.org/10.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/10.0/#eqn-TimeFromYear', - TimeString: 'https://262.ecma-international.org/10.0/#sec-timestring', - TimeWithinDay: 'https://262.ecma-international.org/10.0/#eqn-TimeWithinDay', - TimeZoneString: 'https://262.ecma-international.org/10.0/#sec-timezoneestring', - ToBoolean: 'https://262.ecma-international.org/10.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/10.0/#sec-todatestring', - ToIndex: 'https://262.ecma-international.org/10.0/#sec-toindex', - ToInt16: 'https://262.ecma-international.org/10.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/10.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/10.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/10.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/10.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/10.0/#sec-tonumber', - ToObject: 'https://262.ecma-international.org/10.0/#sec-toobject', - TopLevelModuleEvaluationJob: 'https://262.ecma-international.org/10.0/#sec-toplevelmoduleevaluationjob', - ToPrimitive: 'https://262.ecma-international.org/10.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/10.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/10.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/10.0/#sec-tostring', - ToUint16: 'https://262.ecma-international.org/10.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/10.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/10.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/10.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/10.0/#sec-triggerpromisereactions', - TrimString: 'https://262.ecma-international.org/10.0/#sec-trimstring', - Type: 'https://262.ecma-international.org/10.0/#sec-ecmascript-data-types-and-values', - TypedArrayCreate: 'https://262.ecma-international.org/10.0/#typedarray-create', - TypedArraySpeciesCreate: 'https://262.ecma-international.org/10.0/#typedarray-species-create', - UnicodeEscape: 'https://262.ecma-international.org/10.0/#sec-unicodeescape', - UnicodeMatchProperty: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-unicodematchproperty-p', - UnicodeMatchPropertyValue: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v', - UpdateEmpty: 'https://262.ecma-international.org/10.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/10.0/#sec-utc-t', - UTF16Decode: 'https://262.ecma-international.org/10.0/#sec-utf16decode', - UTF16Encoding: 'https://262.ecma-international.org/10.0/#sec-utf16encoding', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/10.0/#sec-validateandapplypropertydescriptor', - ValidateAtomicAccess: 'https://262.ecma-international.org/10.0/#sec-validateatomicaccess', - ValidateSharedIntegerTypedArray: 'https://262.ecma-international.org/10.0/#sec-validatesharedintegertypedarray', - ValidateTypedArray: 'https://262.ecma-international.org/10.0/#sec-validatetypedarray', - ValueOfReadEvent: 'https://262.ecma-international.org/10.0/#sec-valueofreadevent', - WeekDay: 'https://262.ecma-international.org/10.0/#sec-week-day', - WordCharacters: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-wordcharacters-abstract-operation', - YearFromTime: 'https://262.ecma-international.org/10.0/#eqn-YearFromTime' -}; diff --git a/build/node_modules/es-abstract/operations/2020.js b/build/node_modules/es-abstract/operations/2020.js deleted file mode 100644 index 9464726c..00000000 --- a/build/node_modules/es-abstract/operations/2020.js +++ /dev/null @@ -1,418 +0,0 @@ -'use strict'; - -module.exports = { - abs: 'https://262.ecma-international.org/11.0/#eqn-abs', - 'Abstract Equality Comparison': 'https://262.ecma-international.org/11.0/#sec-abstract-equality-comparison', - 'Abstract Relational Comparison': 'https://262.ecma-international.org/11.0/#sec-abstract-relational-comparison', - AddEntriesFromIterable: 'https://262.ecma-international.org/11.0/#sec-add-entries-from-iterable', - AddRestrictedFunctionProperties: 'https://262.ecma-international.org/11.0/#sec-addrestrictedfunctionproperties', - AddWaiter: 'https://262.ecma-international.org/11.0/#sec-addwaiter', - AdvanceStringIndex: 'https://262.ecma-international.org/11.0/#sec-advancestringindex', - 'agent-order': 'https://262.ecma-international.org/11.0/#sec-agent-order', - AgentCanSuspend: 'https://262.ecma-international.org/11.0/#sec-agentcansuspend', - AgentSignifier: 'https://262.ecma-international.org/11.0/#sec-agentsignifier', - AllocateArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-allocatearraybuffer', - AllocateSharedArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-allocatesharedarraybuffer', - AllocateTypedArray: 'https://262.ecma-international.org/11.0/#sec-allocatetypedarray', - AllocateTypedArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-allocatetypedarraybuffer', - ArrayCreate: 'https://262.ecma-international.org/11.0/#sec-arraycreate', - ArraySetLength: 'https://262.ecma-international.org/11.0/#sec-arraysetlength', - ArraySpeciesCreate: 'https://262.ecma-international.org/11.0/#sec-arrayspeciescreate', - AsyncFromSyncIteratorContinuation: 'https://262.ecma-international.org/11.0/#sec-asyncfromsynciteratorcontinuation', - AsyncFunctionStart: 'https://262.ecma-international.org/11.0/#sec-async-functions-abstract-operations-async-function-start', - AsyncGeneratorEnqueue: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorenqueue', - AsyncGeneratorReject: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorreject', - AsyncGeneratorResolve: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorresolve', - AsyncGeneratorResumeNext: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorresumenext', - AsyncGeneratorStart: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorstart', - AsyncGeneratorYield: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratoryield', - AsyncIteratorClose: 'https://262.ecma-international.org/11.0/#sec-asynciteratorclose', - AtomicLoad: 'https://262.ecma-international.org/11.0/#sec-atomicload', - AtomicReadModifyWrite: 'https://262.ecma-international.org/11.0/#sec-atomicreadmodifywrite', - Await: 'https://262.ecma-international.org/11.0/#await', - BackreferenceMatcher: 'https://262.ecma-international.org/11.0/#sec-backreference-matcher', - 'BigInt::add': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add', - 'BigInt::bitwiseAND': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND', - 'BigInt::bitwiseNOT': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT', - 'BigInt::bitwiseOR': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR', - 'BigInt::bitwiseXOR': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR', - 'BigInt::divide': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide', - 'BigInt::equal': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal', - 'BigInt::exponentiate': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate', - 'BigInt::leftShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift', - 'BigInt::lessThan': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan', - 'BigInt::multiply': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply', - 'BigInt::remainder': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder', - 'BigInt::sameValue': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue', - 'BigInt::sameValueZero': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero', - 'BigInt::signedRightShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift', - 'BigInt::subtract': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract', - 'BigInt::toString': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring', - 'BigInt::unaryMinus': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus', - 'BigInt::unsignedRightShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift', - BigIntBitwiseOp: 'https://262.ecma-international.org/11.0/#sec-bigintbitwiseop', - BinaryAnd: 'https://262.ecma-international.org/11.0/#sec-binaryand', - BinaryOr: 'https://262.ecma-international.org/11.0/#sec-binaryor', - BinaryXor: 'https://262.ecma-international.org/11.0/#sec-binaryxor', - BlockDeclarationInstantiation: 'https://262.ecma-international.org/11.0/#sec-blockdeclarationinstantiation', - BoundFunctionCreate: 'https://262.ecma-international.org/11.0/#sec-boundfunctioncreate', - Call: 'https://262.ecma-international.org/11.0/#sec-call', - Canonicalize: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-canonicalize-ch', - CanonicalNumericIndexString: 'https://262.ecma-international.org/11.0/#sec-canonicalnumericindexstring', - CaseClauseIsSelected: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-caseclauseisselected', - CharacterRange: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-characterrange-abstract-operation', - CharacterRangeOrUnion: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation', - CharacterSetMatcher: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation', - CloneArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-clonearraybuffer', - CodePointAt: 'https://262.ecma-international.org/11.0/#sec-codepointat', - CompletePropertyDescriptor: 'https://262.ecma-international.org/11.0/#sec-completepropertydescriptor', - Completion: 'https://262.ecma-international.org/11.0/#sec-completion-record-specification-type', - ComposeWriteEventBytes: 'https://262.ecma-international.org/11.0/#sec-composewriteeventbytes', - Construct: 'https://262.ecma-international.org/11.0/#sec-construct', - CopyDataBlockBytes: 'https://262.ecma-international.org/11.0/#sec-copydatablockbytes', - CopyDataProperties: 'https://262.ecma-international.org/11.0/#sec-copydataproperties', - CreateArrayFromList: 'https://262.ecma-international.org/11.0/#sec-createarrayfromlist', - CreateArrayIterator: 'https://262.ecma-international.org/11.0/#sec-createarrayiterator', - CreateAsyncFromSyncIterator: 'https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator', - CreateBuiltinFunction: 'https://262.ecma-international.org/11.0/#sec-createbuiltinfunction', - CreateByteDataBlock: 'https://262.ecma-international.org/11.0/#sec-createbytedatablock', - CreateDataProperty: 'https://262.ecma-international.org/11.0/#sec-createdataproperty', - CreateDataPropertyOrThrow: 'https://262.ecma-international.org/11.0/#sec-createdatapropertyorthrow', - CreateDynamicFunction: 'https://262.ecma-international.org/11.0/#sec-createdynamicfunction', - CreateForInIterator: 'https://262.ecma-international.org/11.0/#sec-createforiniterator', - CreateHTML: 'https://262.ecma-international.org/11.0/#sec-createhtml', - CreateIntrinsics: 'https://262.ecma-international.org/11.0/#sec-createintrinsics', - CreateIterResultObject: 'https://262.ecma-international.org/11.0/#sec-createiterresultobject', - CreateListFromArrayLike: 'https://262.ecma-international.org/11.0/#sec-createlistfromarraylike', - CreateListIteratorRecord: 'https://262.ecma-international.org/11.0/#sec-createlistiteratorRecord', - CreateMapIterator: 'https://262.ecma-international.org/11.0/#sec-createmapiterator', - CreateMappedArgumentsObject: 'https://262.ecma-international.org/11.0/#sec-createmappedargumentsobject', - CreateMethodProperty: 'https://262.ecma-international.org/11.0/#sec-createmethodproperty', - CreatePerIterationEnvironment: 'https://262.ecma-international.org/11.0/#sec-createperiterationenvironment', - CreateRealm: 'https://262.ecma-international.org/11.0/#sec-createrealm', - CreateRegExpStringIterator: 'https://262.ecma-international.org/11.0/#sec-createregexpstringiterator', - CreateResolvingFunctions: 'https://262.ecma-international.org/11.0/#sec-createresolvingfunctions', - CreateSetIterator: 'https://262.ecma-international.org/11.0/#sec-createsetiterator', - CreateSharedByteDataBlock: 'https://262.ecma-international.org/11.0/#sec-createsharedbytedatablock', - CreateStringIterator: 'https://262.ecma-international.org/11.0/#sec-createstringiterator', - CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/11.0/#sec-createunmappedargumentsobject', - DateFromTime: 'https://262.ecma-international.org/11.0/#sec-date-number', - DateString: 'https://262.ecma-international.org/11.0/#sec-datestring', - Day: 'https://262.ecma-international.org/11.0/#eqn-Day', - DayFromYear: 'https://262.ecma-international.org/11.0/#eqn-DaysFromYear', - DaysInYear: 'https://262.ecma-international.org/11.0/#eqn-DaysInYear', - DayWithinYear: 'https://262.ecma-international.org/11.0/#eqn-DayWithinYear', - Decode: 'https://262.ecma-international.org/11.0/#sec-decode', - DefinePropertyOrThrow: 'https://262.ecma-international.org/11.0/#sec-definepropertyorthrow', - DeletePropertyOrThrow: 'https://262.ecma-international.org/11.0/#sec-deletepropertyorthrow', - DetachArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-detacharraybuffer', - Encode: 'https://262.ecma-international.org/11.0/#sec-encode', - EnterCriticalSection: 'https://262.ecma-international.org/11.0/#sec-entercriticalsection', - EnumerableOwnPropertyNames: 'https://262.ecma-international.org/11.0/#sec-enumerableownpropertynames', - EnumerateObjectProperties: 'https://262.ecma-international.org/11.0/#sec-enumerate-object-properties', - EscapeRegExpPattern: 'https://262.ecma-international.org/11.0/#sec-escaperegexppattern', - EvalDeclarationInstantiation: 'https://262.ecma-international.org/11.0/#sec-evaldeclarationinstantiation', - EvaluateCall: 'https://262.ecma-international.org/11.0/#sec-evaluatecall', - EvaluateNew: 'https://262.ecma-international.org/11.0/#sec-evaluatenew', - EvaluatePropertyAccessWithExpressionKey: 'https://262.ecma-international.org/11.0/#sec-evaluate-property-access-with-expression-key', - EvaluatePropertyAccessWithIdentifierKey: 'https://262.ecma-international.org/11.0/#sec-evaluate-property-access-with-identifier-key', - EventSet: 'https://262.ecma-international.org/11.0/#sec-event-set', - ExecuteModule: 'https://262.ecma-international.org/11.0/#sec-source-text-module-record-execute-module', - FinishDynamicImport: 'https://262.ecma-international.org/11.0/#sec-finishdynamicimport', - FlattenIntoArray: 'https://262.ecma-international.org/11.0/#sec-flattenintoarray', - floor: 'https://262.ecma-international.org/11.0/#eqn-floor', - ForBodyEvaluation: 'https://262.ecma-international.org/11.0/#sec-forbodyevaluation', - 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset', - 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-forinofheadevaluation', - FromPropertyDescriptor: 'https://262.ecma-international.org/11.0/#sec-frompropertydescriptor', - FulfillPromise: 'https://262.ecma-international.org/11.0/#sec-fulfillpromise', - FunctionDeclarationInstantiation: 'https://262.ecma-international.org/11.0/#sec-functiondeclarationinstantiation', - GeneratorResume: 'https://262.ecma-international.org/11.0/#sec-generatorresume', - GeneratorResumeAbrupt: 'https://262.ecma-international.org/11.0/#sec-generatorresumeabrupt', - GeneratorStart: 'https://262.ecma-international.org/11.0/#sec-generatorstart', - GeneratorValidate: 'https://262.ecma-international.org/11.0/#sec-generatorvalidate', - GeneratorYield: 'https://262.ecma-international.org/11.0/#sec-generatoryield', - Get: 'https://262.ecma-international.org/11.0/#sec-get-o-p', - GetActiveScriptOrModule: 'https://262.ecma-international.org/11.0/#sec-getactivescriptormodule', - GetBase: 'https://262.ecma-international.org/11.0/#sec-getbase', - GetFunctionRealm: 'https://262.ecma-international.org/11.0/#sec-getfunctionrealm', - GetGeneratorKind: 'https://262.ecma-international.org/11.0/#sec-getgeneratorkind', - GetGlobalObject: 'https://262.ecma-international.org/11.0/#sec-getglobalobject', - GetIdentifierReference: 'https://262.ecma-international.org/11.0/#sec-getidentifierreference', - GetIterator: 'https://262.ecma-international.org/11.0/#sec-getiterator', - GetMethod: 'https://262.ecma-international.org/11.0/#sec-getmethod', - GetModifySetValueInBuffer: 'https://262.ecma-international.org/11.0/#sec-getmodifysetvalueinbuffer', - GetModuleNamespace: 'https://262.ecma-international.org/11.0/#sec-getmodulenamespace', - GetNewTarget: 'https://262.ecma-international.org/11.0/#sec-getnewtarget', - GetOwnPropertyKeys: 'https://262.ecma-international.org/11.0/#sec-getownpropertykeys', - GetPrototypeFromConstructor: 'https://262.ecma-international.org/11.0/#sec-getprototypefromconstructor', - GetReferencedName: 'https://262.ecma-international.org/11.0/#sec-getreferencedname', - GetSubstitution: 'https://262.ecma-international.org/11.0/#sec-getsubstitution', - GetSuperConstructor: 'https://262.ecma-international.org/11.0/#sec-getsuperconstructor', - GetTemplateObject: 'https://262.ecma-international.org/11.0/#sec-gettemplateobject', - GetThisEnvironment: 'https://262.ecma-international.org/11.0/#sec-getthisenvironment', - GetThisValue: 'https://262.ecma-international.org/11.0/#sec-getthisvalue', - GetV: 'https://262.ecma-international.org/11.0/#sec-getv', - GetValue: 'https://262.ecma-international.org/11.0/#sec-getvalue', - GetValueFromBuffer: 'https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer', - GetViewValue: 'https://262.ecma-international.org/11.0/#sec-getviewvalue', - GetWaiterList: 'https://262.ecma-international.org/11.0/#sec-getwaiterlist', - GlobalDeclarationInstantiation: 'https://262.ecma-international.org/11.0/#sec-globaldeclarationinstantiation', - 'happens-before': 'https://262.ecma-international.org/11.0/#sec-happens-before', - HasOwnProperty: 'https://262.ecma-international.org/11.0/#sec-hasownproperty', - HasPrimitiveBase: 'https://262.ecma-international.org/11.0/#sec-hasprimitivebase', - HasProperty: 'https://262.ecma-international.org/11.0/#sec-hasproperty', - 'host-synchronizes-with': 'https://262.ecma-international.org/11.0/#sec-host-synchronizes-with', - HostEnqueuePromiseJob: 'https://262.ecma-international.org/11.0/#sec-hostenqueuepromisejob', - HostEnsureCanCompileStrings: 'https://262.ecma-international.org/11.0/#sec-hostensurecancompilestrings', - HostEventSet: 'https://262.ecma-international.org/11.0/#sec-hosteventset', - HostFinalizeImportMeta: 'https://262.ecma-international.org/11.0/#sec-hostfinalizeimportmeta', - HostGetImportMetaProperties: 'https://262.ecma-international.org/11.0/#sec-hostgetimportmetaproperties', - HostImportModuleDynamically: 'https://262.ecma-international.org/11.0/#sec-hostimportmoduledynamically', - HostPromiseRejectionTracker: 'https://262.ecma-international.org/11.0/#sec-host-promise-rejection-tracker', - HostResolveImportedModule: 'https://262.ecma-international.org/11.0/#sec-hostresolveimportedmodule', - HourFromTime: 'https://262.ecma-international.org/11.0/#eqn-HourFromTime', - IfAbruptRejectPromise: 'https://262.ecma-international.org/11.0/#sec-ifabruptrejectpromise', - ImportedLocalNames: 'https://262.ecma-international.org/11.0/#sec-importedlocalnames', - InitializeBoundName: 'https://262.ecma-international.org/11.0/#sec-initializeboundname', - InitializeEnvironment: 'https://262.ecma-international.org/11.0/#sec-source-text-module-record-initialize-environment', - InitializeHostDefinedRealm: 'https://262.ecma-international.org/11.0/#sec-initializehostdefinedrealm', - InitializeReferencedBinding: 'https://262.ecma-international.org/11.0/#sec-initializereferencedbinding', - InLeapYear: 'https://262.ecma-international.org/11.0/#eqn-InLeapYear', - InnerModuleEvaluation: 'https://262.ecma-international.org/11.0/#sec-innermoduleevaluation', - InnerModuleLinking: 'https://262.ecma-international.org/11.0/#sec-InnerModuleLinking', - InstanceofOperator: 'https://262.ecma-international.org/11.0/#sec-instanceofoperator', - IntegerIndexedElementGet: 'https://262.ecma-international.org/11.0/#sec-integerindexedelementget', - IntegerIndexedElementSet: 'https://262.ecma-international.org/11.0/#sec-integerindexedelementset', - IntegerIndexedObjectCreate: 'https://262.ecma-international.org/11.0/#sec-integerindexedobjectcreate', - InternalizeJSONProperty: 'https://262.ecma-international.org/11.0/#sec-internalizejsonproperty', - Invoke: 'https://262.ecma-international.org/11.0/#sec-invoke', - IsAccessorDescriptor: 'https://262.ecma-international.org/11.0/#sec-isaccessordescriptor', - IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/11.0/#sec-isanonymousfunctiondefinition', - IsArray: 'https://262.ecma-international.org/11.0/#sec-isarray', - IsBigIntElementType: 'https://262.ecma-international.org/11.0/#sec-isbigintelementtype', - IsCallable: 'https://262.ecma-international.org/11.0/#sec-iscallable', - IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/11.0/#sec-iscompatiblepropertydescriptor', - IsConcatSpreadable: 'https://262.ecma-international.org/11.0/#sec-isconcatspreadable', - IsConstructor: 'https://262.ecma-international.org/11.0/#sec-isconstructor', - IsDataDescriptor: 'https://262.ecma-international.org/11.0/#sec-isdatadescriptor', - IsDetachedBuffer: 'https://262.ecma-international.org/11.0/#sec-isdetachedbuffer', - IsExtensible: 'https://262.ecma-international.org/11.0/#sec-isextensible-o', - IsGenericDescriptor: 'https://262.ecma-international.org/11.0/#sec-isgenericdescriptor', - IsInTailPosition: 'https://262.ecma-international.org/11.0/#sec-isintailposition', - IsInteger: 'https://262.ecma-international.org/11.0/#sec-isinteger', - IsLabelledFunction: 'https://262.ecma-international.org/11.0/#sec-islabelledfunction', - IsNonNegativeInteger: 'https://262.ecma-international.org/11.0/#sec-isnonnegativeinteger', - IsNoTearConfiguration: 'https://262.ecma-international.org/11.0/#sec-isnotearconfiguration', - IsPromise: 'https://262.ecma-international.org/11.0/#sec-ispromise', - IsPropertyKey: 'https://262.ecma-international.org/11.0/#sec-ispropertykey', - IsPropertyReference: 'https://262.ecma-international.org/11.0/#sec-ispropertyreference', - IsRegExp: 'https://262.ecma-international.org/11.0/#sec-isregexp', - IsSharedArrayBuffer: 'https://262.ecma-international.org/11.0/#sec-issharedarraybuffer', - IsStrictReference: 'https://262.ecma-international.org/11.0/#sec-isstrictreference', - IsStringPrefix: 'https://262.ecma-international.org/11.0/#sec-isstringprefix', - IsSuperReference: 'https://262.ecma-international.org/11.0/#sec-issuperreference', - IsUnclampedIntegerElementType: 'https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype', - IsUnresolvableReference: 'https://262.ecma-international.org/11.0/#sec-isunresolvablereference', - IsUnsignedElementType: 'https://262.ecma-international.org/11.0/#sec-isunsignedelementtype', - IsValidIntegerIndex: 'https://262.ecma-international.org/11.0/#sec-isvalidintegerindex', - IsValidRegularExpressionLiteral: 'https://262.ecma-international.org/11.0/#sec-isvalidregularexpressionliteral', - IsWordChar: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-iswordchar-abstract-operation', - IterableToList: 'https://262.ecma-international.org/11.0/#sec-iterabletolist', - IteratorClose: 'https://262.ecma-international.org/11.0/#sec-iteratorclose', - IteratorComplete: 'https://262.ecma-international.org/11.0/#sec-iteratorcomplete', - IteratorNext: 'https://262.ecma-international.org/11.0/#sec-iteratornext', - IteratorStep: 'https://262.ecma-international.org/11.0/#sec-iteratorstep', - IteratorValue: 'https://262.ecma-international.org/11.0/#sec-iteratorvalue', - LeaveCriticalSection: 'https://262.ecma-international.org/11.0/#sec-leavecriticalsection', - LengthOfArrayLike: 'https://262.ecma-international.org/11.0/#sec-lengthofarraylike', - LocalTime: 'https://262.ecma-international.org/11.0/#sec-localtime', - LocalTZA: 'https://262.ecma-international.org/11.0/#sec-local-time-zone-adjustment', - LoopContinues: 'https://262.ecma-international.org/11.0/#sec-loopcontinues', - MakeArgGetter: 'https://262.ecma-international.org/11.0/#sec-makearggetter', - MakeArgSetter: 'https://262.ecma-international.org/11.0/#sec-makeargsetter', - MakeBasicObject: 'https://262.ecma-international.org/11.0/#sec-makebasicobject', - MakeClassConstructor: 'https://262.ecma-international.org/11.0/#sec-makeclassconstructor', - MakeConstructor: 'https://262.ecma-international.org/11.0/#sec-makeconstructor', - MakeDate: 'https://262.ecma-international.org/11.0/#sec-makedate', - MakeDay: 'https://262.ecma-international.org/11.0/#sec-makeday', - MakeMethod: 'https://262.ecma-international.org/11.0/#sec-makemethod', - MakeSuperPropertyReference: 'https://262.ecma-international.org/11.0/#sec-makesuperpropertyreference', - MakeTime: 'https://262.ecma-international.org/11.0/#sec-maketime', - max: 'https://262.ecma-international.org/11.0/#eqn-max', - 'memory-order': 'https://262.ecma-international.org/11.0/#sec-memory-order', - min: 'https://262.ecma-international.org/11.0/#eqn-min', - MinFromTime: 'https://262.ecma-international.org/11.0/#eqn-MinFromTime', - ModuleNamespaceCreate: 'https://262.ecma-international.org/11.0/#sec-modulenamespacecreate', - modulo: 'https://262.ecma-international.org/11.0/#eqn-modulo', - MonthFromTime: 'https://262.ecma-international.org/11.0/#eqn-MonthFromTime', - msFromTime: 'https://262.ecma-international.org/11.0/#eqn-msFromTime', - NewDeclarativeEnvironment: 'https://262.ecma-international.org/11.0/#sec-newdeclarativeenvironment', - NewFunctionEnvironment: 'https://262.ecma-international.org/11.0/#sec-newfunctionenvironment', - NewGlobalEnvironment: 'https://262.ecma-international.org/11.0/#sec-newglobalenvironment', - NewModuleEnvironment: 'https://262.ecma-international.org/11.0/#sec-newmoduleenvironment', - NewObjectEnvironment: 'https://262.ecma-international.org/11.0/#sec-newobjectenvironment', - NewPromiseCapability: 'https://262.ecma-international.org/11.0/#sec-newpromisecapability', - NewPromiseReactionJob: 'https://262.ecma-international.org/11.0/#sec-newpromisereactionjob', - NewPromiseResolveThenableJob: 'https://262.ecma-international.org/11.0/#sec-newpromiseresolvethenablejob', - NormalCompletion: 'https://262.ecma-international.org/11.0/#sec-normalcompletion', - NotifyWaiter: 'https://262.ecma-international.org/11.0/#sec-notifywaiter', - 'Number::add': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-add', - 'Number::bitwiseAND': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND', - 'Number::bitwiseNOT': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT', - 'Number::bitwiseOR': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR', - 'Number::bitwiseXOR': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR', - 'Number::divide': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide', - 'Number::equal': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal', - 'Number::exponentiate': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate', - 'Number::leftShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-leftShift', - 'Number::lessThan': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan', - 'Number::multiply': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply', - 'Number::remainder': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-remainder', - 'Number::sameValue': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue', - 'Number::sameValueZero': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero', - 'Number::signedRightShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-signedRightShift', - 'Number::subtract': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-subtract', - 'Number::toString': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring', - 'Number::unaryMinus': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus', - 'Number::unsignedRightShift': 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-unsignedRightShift', - NumberBitwiseOp: 'https://262.ecma-international.org/11.0/#sec-numberbitwiseop', - NumberToBigInt: 'https://262.ecma-international.org/11.0/#sec-numbertobigint', - NumericToRawBytes: 'https://262.ecma-international.org/11.0/#sec-numerictorawbytes', - ObjectDefineProperties: 'https://262.ecma-international.org/11.0/#sec-objectdefineproperties', - OrdinaryCallBindThis: 'https://262.ecma-international.org/11.0/#sec-ordinarycallbindthis', - OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/11.0/#sec-ordinarycallevaluatebody', - OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/11.0/#sec-ordinarycreatefromconstructor', - OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/11.0/#sec-ordinarydefineownproperty', - OrdinaryDelete: 'https://262.ecma-international.org/11.0/#sec-ordinarydelete', - OrdinaryFunctionCreate: 'https://262.ecma-international.org/11.0/#sec-ordinaryfunctioncreate', - OrdinaryGet: 'https://262.ecma-international.org/11.0/#sec-ordinaryget', - OrdinaryGetOwnProperty: 'https://262.ecma-international.org/11.0/#sec-ordinarygetownproperty', - OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/11.0/#sec-ordinarygetprototypeof', - OrdinaryHasInstance: 'https://262.ecma-international.org/11.0/#sec-ordinaryhasinstance', - OrdinaryHasProperty: 'https://262.ecma-international.org/11.0/#sec-ordinaryhasproperty', - OrdinaryIsExtensible: 'https://262.ecma-international.org/11.0/#sec-ordinaryisextensible', - OrdinaryObjectCreate: 'https://262.ecma-international.org/11.0/#sec-ordinaryobjectcreate', - OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/11.0/#sec-ordinaryownpropertykeys', - OrdinaryPreventExtensions: 'https://262.ecma-international.org/11.0/#sec-ordinarypreventextensions', - OrdinarySet: 'https://262.ecma-international.org/11.0/#sec-ordinaryset', - OrdinarySetPrototypeOf: 'https://262.ecma-international.org/11.0/#sec-ordinarysetprototypeof', - OrdinarySetWithOwnDescriptor: 'https://262.ecma-international.org/11.0/#sec-ordinarysetwithowndescriptor', - OrdinaryToPrimitive: 'https://262.ecma-international.org/11.0/#sec-ordinarytoprimitive', - ParseModule: 'https://262.ecma-international.org/11.0/#sec-parsemodule', - ParseScript: 'https://262.ecma-international.org/11.0/#sec-parse-script', - PerformEval: 'https://262.ecma-international.org/11.0/#sec-performeval', - PerformPromiseAll: 'https://262.ecma-international.org/11.0/#sec-performpromiseall', - PerformPromiseAllSettled: 'https://262.ecma-international.org/11.0/#sec-performpromiseallsettled', - PerformPromiseRace: 'https://262.ecma-international.org/11.0/#sec-performpromiserace', - PerformPromiseThen: 'https://262.ecma-international.org/11.0/#sec-performpromisethen', - PrepareForOrdinaryCall: 'https://262.ecma-international.org/11.0/#sec-prepareforordinarycall', - PrepareForTailCall: 'https://262.ecma-international.org/11.0/#sec-preparefortailcall', - PromiseResolve: 'https://262.ecma-international.org/11.0/#sec-promise-resolve', - ProxyCreate: 'https://262.ecma-international.org/11.0/#sec-proxycreate', - PutValue: 'https://262.ecma-international.org/11.0/#sec-putvalue', - QuoteJSONString: 'https://262.ecma-international.org/11.0/#sec-quotejsonstring', - RawBytesToNumeric: 'https://262.ecma-international.org/11.0/#sec-rawbytestonumeric', - 'reads-bytes-from': 'https://262.ecma-international.org/11.0/#sec-reads-bytes-from', - 'reads-from': 'https://262.ecma-international.org/11.0/#sec-reads-from', - RegExpAlloc: 'https://262.ecma-international.org/11.0/#sec-regexpalloc', - RegExpBuiltinExec: 'https://262.ecma-international.org/11.0/#sec-regexpbuiltinexec', - RegExpCreate: 'https://262.ecma-international.org/11.0/#sec-regexpcreate', - RegExpExec: 'https://262.ecma-international.org/11.0/#sec-regexpexec', - RegExpInitialize: 'https://262.ecma-international.org/11.0/#sec-regexpinitialize', - RejectPromise: 'https://262.ecma-international.org/11.0/#sec-rejectpromise', - RemoveWaiter: 'https://262.ecma-international.org/11.0/#sec-removewaiter', - RemoveWaiters: 'https://262.ecma-international.org/11.0/#sec-removewaiters', - RepeatMatcher: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-repeatmatcher-abstract-operation', - RequireInternalSlot: 'https://262.ecma-international.org/11.0/#sec-requireinternalslot', - RequireObjectCoercible: 'https://262.ecma-international.org/11.0/#sec-requireobjectcoercible', - ResolveBinding: 'https://262.ecma-international.org/11.0/#sec-resolvebinding', - ResolveThisBinding: 'https://262.ecma-international.org/11.0/#sec-resolvethisbinding', - ReturnIfAbrupt: 'https://262.ecma-international.org/11.0/#sec-returnifabrupt', - SameValue: 'https://262.ecma-international.org/11.0/#sec-samevalue', - SameValueNonNumeric: 'https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric', - SameValueZero: 'https://262.ecma-international.org/11.0/#sec-samevaluezero', - ScriptEvaluation: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-scriptevaluation', - SecFromTime: 'https://262.ecma-international.org/11.0/#eqn-SecFromTime', - SerializeJSONArray: 'https://262.ecma-international.org/11.0/#sec-serializejsonarray', - SerializeJSONObject: 'https://262.ecma-international.org/11.0/#sec-serializejsonobject', - SerializeJSONProperty: 'https://262.ecma-international.org/11.0/#sec-serializejsonproperty', - Set: 'https://262.ecma-international.org/11.0/#sec-set-o-p-v-throw', - SetDefaultGlobalBindings: 'https://262.ecma-international.org/11.0/#sec-setdefaultglobalbindings', - SetFunctionLength: 'https://262.ecma-international.org/11.0/#sec-setfunctionlength', - SetFunctionName: 'https://262.ecma-international.org/11.0/#sec-setfunctionname', - SetImmutablePrototype: 'https://262.ecma-international.org/11.0/#sec-set-immutable-prototype', - SetIntegrityLevel: 'https://262.ecma-international.org/11.0/#sec-setintegritylevel', - SetRealmGlobalObject: 'https://262.ecma-international.org/11.0/#sec-setrealmglobalobject', - SetValueInBuffer: 'https://262.ecma-international.org/11.0/#sec-setvalueinbuffer', - SetViewValue: 'https://262.ecma-international.org/11.0/#sec-setviewvalue', - SharedDataBlockEventSet: 'https://262.ecma-international.org/11.0/#sec-sharedatablockeventset', - SortCompare: 'https://262.ecma-international.org/11.0/#sec-sortcompare', - SpeciesConstructor: 'https://262.ecma-international.org/11.0/#sec-speciesconstructor', - SplitMatch: 'https://262.ecma-international.org/11.0/#sec-splitmatch', - 'Strict Equality Comparison': 'https://262.ecma-international.org/11.0/#sec-strict-equality-comparison', - StringCreate: 'https://262.ecma-international.org/11.0/#sec-stringcreate', - StringGetOwnProperty: 'https://262.ecma-international.org/11.0/#sec-stringgetownproperty', - StringPad: 'https://262.ecma-international.org/11.0/#sec-stringpad', - StringToBigInt: 'https://262.ecma-international.org/11.0/#sec-stringtobigint', - Suspend: 'https://262.ecma-international.org/11.0/#sec-suspend', - SymbolDescriptiveString: 'https://262.ecma-international.org/11.0/#sec-symboldescriptivestring', - 'synchronizes-with': 'https://262.ecma-international.org/11.0/#sec-synchronizes-with', - TestIntegrityLevel: 'https://262.ecma-international.org/11.0/#sec-testintegritylevel', - thisBigIntValue: 'https://262.ecma-international.org/11.0/#sec-thisbigintvalue', - thisBooleanValue: 'https://262.ecma-international.org/11.0/#sec-thisbooleanvalue', - thisNumberValue: 'https://262.ecma-international.org/11.0/#sec-thisnumbervalue', - thisStringValue: 'https://262.ecma-international.org/11.0/#sec-thisstringvalue', - thisSymbolValue: 'https://262.ecma-international.org/11.0/#sec-thissymbolvalue', - thisTimeValue: 'https://262.ecma-international.org/11.0/#sec-thistimevalue', - ThrowCompletion: 'https://262.ecma-international.org/11.0/#sec-throwcompletion', - TimeClip: 'https://262.ecma-international.org/11.0/#sec-timeclip', - TimeFromYear: 'https://262.ecma-international.org/11.0/#eqn-TimeFromYear', - TimeString: 'https://262.ecma-international.org/11.0/#sec-timestring', - TimeWithinDay: 'https://262.ecma-international.org/11.0/#eqn-TimeWithinDay', - TimeZoneString: 'https://262.ecma-international.org/11.0/#sec-timezoneestring', - ToBigInt: 'https://262.ecma-international.org/11.0/#sec-tobigint', - ToBigInt64: 'https://262.ecma-international.org/11.0/#sec-tobigint64', - ToBigUint64: 'https://262.ecma-international.org/11.0/#sec-tobiguint64', - ToBoolean: 'https://262.ecma-international.org/11.0/#sec-toboolean', - ToDateString: 'https://262.ecma-international.org/11.0/#sec-todatestring', - ToIndex: 'https://262.ecma-international.org/11.0/#sec-toindex', - ToInt16: 'https://262.ecma-international.org/11.0/#sec-toint16', - ToInt32: 'https://262.ecma-international.org/11.0/#sec-toint32', - ToInt8: 'https://262.ecma-international.org/11.0/#sec-toint8', - ToInteger: 'https://262.ecma-international.org/11.0/#sec-tointeger', - ToLength: 'https://262.ecma-international.org/11.0/#sec-tolength', - ToNumber: 'https://262.ecma-international.org/11.0/#sec-tonumber', - ToNumeric: 'https://262.ecma-international.org/11.0/#sec-tonumeric', - ToObject: 'https://262.ecma-international.org/11.0/#sec-toobject', - ToPrimitive: 'https://262.ecma-international.org/11.0/#sec-toprimitive', - ToPropertyDescriptor: 'https://262.ecma-international.org/11.0/#sec-topropertydescriptor', - ToPropertyKey: 'https://262.ecma-international.org/11.0/#sec-topropertykey', - ToString: 'https://262.ecma-international.org/11.0/#sec-tostring', - ToUint16: 'https://262.ecma-international.org/11.0/#sec-touint16', - ToUint32: 'https://262.ecma-international.org/11.0/#sec-touint32', - ToUint8: 'https://262.ecma-international.org/11.0/#sec-touint8', - ToUint8Clamp: 'https://262.ecma-international.org/11.0/#sec-touint8clamp', - TriggerPromiseReactions: 'https://262.ecma-international.org/11.0/#sec-triggerpromisereactions', - TrimString: 'https://262.ecma-international.org/11.0/#sec-trimstring', - Type: 'https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values', - TypedArrayCreate: 'https://262.ecma-international.org/11.0/#typedarray-create', - TypedArraySpeciesCreate: 'https://262.ecma-international.org/11.0/#typedarray-species-create', - UnicodeEscape: 'https://262.ecma-international.org/11.0/#sec-unicodeescape', - UnicodeMatchProperty: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-unicodematchproperty-p', - UnicodeMatchPropertyValue: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v', - UpdateEmpty: 'https://262.ecma-international.org/11.0/#sec-updateempty', - UTC: 'https://262.ecma-international.org/11.0/#sec-utc-t', - UTF16DecodeString: 'https://262.ecma-international.org/11.0/#sec-utf16decodestring', - UTF16DecodeSurrogatePair: 'https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair', - UTF16Encode: 'https://262.ecma-international.org/11.0/#sec-utf16encode', - UTF16Encoding: 'https://262.ecma-international.org/11.0/#sec-utf16encoding', - ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/11.0/#sec-validateandapplypropertydescriptor', - ValidateAtomicAccess: 'https://262.ecma-international.org/11.0/#sec-validateatomicaccess', - ValidateSharedIntegerTypedArray: 'https://262.ecma-international.org/11.0/#sec-validatesharedintegertypedarray', - ValidateTypedArray: 'https://262.ecma-international.org/11.0/#sec-validatetypedarray', - ValueOfReadEvent: 'https://262.ecma-international.org/11.0/#sec-valueofreadevent', - WeekDay: 'https://262.ecma-international.org/11.0/#sec-week-day', - WordCharacters: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-wordcharacters-abstract-operation', - YearFromTime: 'https://262.ecma-international.org/11.0/#eqn-YearFromTime' -}; diff --git a/build/node_modules/es-abstract/package.json b/build/node_modules/es-abstract/package.json deleted file mode 100644 index b7529eab..00000000 --- a/build/node_modules/es-abstract/package.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "_from": "es-abstract@^1.18.0-next.2", - "_id": "es-abstract@1.18.3", - "_inBundle": false, - "_integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "_location": "/es-abstract", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "es-abstract@^1.18.0-next.2", - "name": "es-abstract", - "escapedName": "es-abstract", - "rawSpec": "^1.18.0-next.2", - "saveSpec": null, - "fetchSpec": "^1.18.0-next.2" - }, - "_requiredBy": [ - "/is-typed-array", - "/which-typed-array" - ], - "_resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "_shasum": "25c4c3380a27aa203c44b2b685bba94da31b63e0", - "_spec": "es-abstract@^1.18.0-next.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/is-typed-array", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/ljharb/es-abstract/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "deprecated": false, - "description": "ECMAScript spec abstract operations.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "array.prototype.indexof": "^1.0.2", - "aud": "^1.1.5", - "cheerio": "=1.0.0-rc.3", - "diff": "^5.0.0", - "eclint": "^2.8.1", - "es-value-fixtures": "^1.2.1", - "eslint": "^7.27.0", - "foreach": "^2.0.5", - "functions-have-names": "^1.2.2", - "has-bigints": "^1.0.1", - "has-strict-mode": "^1.0.1", - "in-publish": "^2.0.1", - "make-arrow-function": "^1.2.0", - "make-async-function": "^1.0.0", - "make-async-generator-function": "^1.0.0", - "make-generator-function": "^2.0.0", - "nyc": "^10.3.2", - "object.fromentries": "^2.0.4", - "safe-publish-latest": "^1.1.4", - "ses": "^0.10.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "exports": { - ".": "./index.js", - "./package.json": "./package.json", - "./2020/*": "./2020/*.js", - "./2019/*": "./2019/*.js", - "./2018/*": "./2018/*.js", - "./2017/*": "./2017/*.js", - "./2016/*": "./2016/*.js", - "./2015/*": "./2015/*.js", - "./helpers/*": "./helpers/*.js", - "./5/*": "./5/*.js", - "./": "./" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "greenkeeper": { - "//": "nyc is ignored because it requires node 4+, and we support older than that", - "ignore": [ - "nyc" - ] - }, - "homepage": "https://github.com/ljharb/es-abstract#readme", - "keywords": [ - "ECMAScript", - "ES", - "abstract", - "operation", - "abstract operation", - "JavaScript", - "ES5", - "ES6", - "ES7" - ], - "license": "MIT", - "main": "index.js", - "name": "es-abstract", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/es-abstract.git" - }, - "scripts": { - "eccheck": "eclint check *.js **/*.js > /dev/null", - "lint": "eslint .", - "postspackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs git add", - "posttest": "aud --production", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest && npm run spackle", - "prespackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs rm || true", - "pretest": "npm run lint", - "spackle": "node operations/spackle 1", - "test": "npm run tests-only && npm run test:ses", - "test:ses": "node test/ses-compat", - "tests-only": "nyc node test" - }, - "sideEffects": false, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "type": "commonjs", - "version": "1.18.3" -} diff --git a/build/node_modules/es-abstract/test/GetIntrinsic.js b/build/node_modules/es-abstract/test/GetIntrinsic.js deleted file mode 100644 index 2f21e764..00000000 --- a/build/node_modules/es-abstract/test/GetIntrinsic.js +++ /dev/null @@ -1,207 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var test = require('tape'); -var forEach = require('foreach'); -var debug = require('object-inspect'); -var generatorFns = require('make-generator-function')(); -var asyncFns = require('make-async-function').list(); -var asyncGenFns = require('make-async-generator-function')(); - -var callBound = require('call-bind/callBound'); -var v = require('es-value-fixtures'); -var $gOPD = require('../helpers/getOwnPropertyDescriptor'); -var defineProperty = require('./helpers/defineProperty'); - -var $isProto = callBound('%Object.prototype.isPrototypeOf%'); - -test('export', function (t) { - t.equal(typeof GetIntrinsic, 'function', 'it is a function'); - t.equal(GetIntrinsic.length, 2, 'function has length of 2'); - - t.end(); -}); - -test('throws', function (t) { - t['throws']( - function () { GetIntrinsic('not an intrinsic'); }, - SyntaxError, - 'nonexistent intrinsic throws a syntax error' - ); - - t['throws']( - function () { GetIntrinsic(''); }, - TypeError, - 'empty string intrinsic throws a type error' - ); - - t['throws']( - function () { GetIntrinsic('.'); }, - SyntaxError, - '"just a dot" intrinsic throws a syntax error' - ); - - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { GetIntrinsic(nonString); }, - TypeError, - debug(nonString) + ' is not a String' - ); - }); - - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { GetIntrinsic('%', nonBoolean); }, - TypeError, - debug(nonBoolean) + ' is not a Boolean' - ); - }); - - forEach([ - 'toString', - 'propertyIsEnumerable', - 'hasOwnProperty' - ], function (objectProtoMember) { - t['throws']( - function () { GetIntrinsic(objectProtoMember); }, - SyntaxError, - debug(objectProtoMember) + ' is not an intrinsic' - ); - }); - - t.end(); -}); - -test('base intrinsics', function (t) { - t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object'); - t.equal(GetIntrinsic('Object'), Object, 'Object yields Object'); - t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array'); - t.equal(GetIntrinsic('Array'), Array, 'Array yields Array'); - - t.end(); -}); - -test('dotted paths', function (t) { - t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString'); - t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString'); - t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push'); - t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push'); - - test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { - var original = GetIntrinsic('%ObjProto_toString%'); - - forEach([ - '%Object.prototype.toString%', - 'Object.prototype.toString', - '%ObjectPrototype.toString%', - 'ObjectPrototype.toString', - '%ObjProto_toString%', - 'ObjProto_toString' - ], function (name) { - defineProperty(Object.prototype, 'toString', { - value: function toString() { - return original.apply(this, arguments); - } - }); - st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString'); - }); - - defineProperty(Object.prototype, 'toString', { value: original }); - st.end(); - }); - - test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { - var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%'); - - forEach([ - '%Object.prototype.propertyIsEnumerable%', - 'Object.prototype.propertyIsEnumerable', - '%ObjectPrototype.propertyIsEnumerable%', - 'ObjectPrototype.propertyIsEnumerable' - ], function (name) { - // eslint-disable-next-line no-extend-native - Object.prototype.propertyIsEnumerable = function propertyIsEnumerable() { - return original.apply(this, arguments); - }; - st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable'); - }); - - // eslint-disable-next-line no-extend-native - Object.prototype.propertyIsEnumerable = original; - st.end(); - }); - - test('dotted path reports correct error', function (st) { - st['throws'](function () { - GetIntrinsic('%NonExistentIntrinsic.prototype.property%'); - }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%'); - - st['throws'](function () { - GetIntrinsic('%NonExistentIntrinsicPrototype.property%'); - }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%'); - - st.end(); - }); - - t.end(); -}); - -test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) { - var actual = $gOPD(Map.prototype, 'size'); - t.ok(actual, 'Map.prototype.size has a descriptor'); - t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function'); - t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it'); - t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it'); - - t.end(); -}); - -test('generator functions', { skip: !generatorFns.length }, function (t) { - var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%'); - var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%'); - var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%'); - - forEach(generatorFns, function (genFn) { - var fnName = genFn.name; - fnName = fnName ? "'" + fnName + "'" : 'genFn'; - - t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%'); - t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName); - t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype'); - }); - - t.end(); -}); - -test('async functions', { skip: !asyncFns.length }, function (t) { - var $AsyncFunction = GetIntrinsic('%AsyncFunction%'); - var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%'); - - forEach(asyncFns, function (asyncFn) { - var fnName = asyncFn.name; - fnName = fnName ? "'" + fnName + "'" : 'asyncFn'; - - t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%'); - t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName); - }); - - t.end(); -}); - -test('async generator functions', { skip: !asyncGenFns.length }, function (t) { - var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%'); - var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%'); - var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%'); - - forEach(asyncGenFns, function (asyncGenFn) { - var fnName = asyncGenFn.name; - fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn'; - - t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%'); - t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName); - t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype'); - }); - - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/diffOps.js b/build/node_modules/es-abstract/test/diffOps.js deleted file mode 100644 index 06641b18..00000000 --- a/build/node_modules/es-abstract/test/diffOps.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var keys = require('object-keys'); -var forEach = require('foreach'); -var indexOf = require('array.prototype.indexof'); -var has = require('has'); - -module.exports = function diffOperations(actual, expected, expectedMissing) { - var actualKeys = keys(actual); - var expectedKeys = keys(expected); - - var extra = []; - var missing = []; - var extraMissing = []; - - forEach(actualKeys, function (op) { - if (!(op in expected)) { - if (actual[op] && typeof actual[op] === 'object') { - forEach(keys(actual[op]), function (nestedOp) { - var fullNestedOp = op + '::' + nestedOp; - if (!(fullNestedOp in expected)) { - extra.push(fullNestedOp); - } else if (indexOf(expectedMissing, fullNestedOp) !== -1) { - extra.push(fullNestedOp); - } - }); - } else { - extra.push(op); - } - } else if (indexOf(expectedMissing, op) !== -1) { - extra.push(op); - } - }); - var checkMissing = function checkMissing(op, actualValue) { - if (typeof actualValue !== 'function' && indexOf(expectedMissing, op) === -1) { - missing.push(op); - } - }; - forEach(expectedKeys, function (op) { - if (op.indexOf('::') > -1) { - var parts = op.split('::'); - var value = actual[parts[0]]; - if (value && typeof value === 'object' && typeof value[parts[1]] === 'function') { - checkMissing(op, value[parts[1]]); - } - } else { - checkMissing(op, actual[op]); - } - }); - - forEach(expectedMissing, function (expectedOp) { - if (!has(expected, expectedOp)) { - extraMissing.push(expectedOp); - } - }); - - return { missing: missing, extra: extra, extraMissing: extraMissing }; -}; diff --git a/build/node_modules/es-abstract/test/es2015.js b/build/node_modules/es-abstract/test/es2015.js deleted file mode 100644 index 33a8ead4..00000000 --- a/build/node_modules/es-abstract/test/es2015.js +++ /dev/null @@ -1,144 +0,0 @@ -'use strict'; - -var ES = require('../').ES2015; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2015'); - -var expectedMissing = [ - 'AddRestrictedFunctionProperties', - 'AllocateArrayBuffer', - 'AllocateTypedArray', - 'BoundFunctionCreate', - 'Canonicalize', - 'CharacterRange', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateIntrinsics', - 'CreateListIterator', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateSetIterator', - 'CreateUnmappedArgumentsObject', - 'DaylightSavingTA', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnqueueJob', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateDirectCall', - 'EvaluateNew', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionAllocate', - 'FunctionCreate', - 'FunctionInitialize', - 'GeneratorFunctionCreate', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetBase', - 'GetFunctionRealm', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetReferencedName', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'HasPrimitiveBase', - 'HostResolveImportedModule', - 'ImportedLocalNames', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsPropertyReference', - 'IsStrictReference', - 'IsSuperReference', - 'IsUnresolvableReference', - 'IsWordChar', - 'LocalTime', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'min', - 'ModuleNamespaceCreate', - 'msPerDay', // constant - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NormalCompletion', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'ParseModule', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RepeatMatcher', - 'ResolveBinding', - 'ResolveThisBinding', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'sign', - 'SortCompare', // mystery access to `comparefn` arg - 'TriggerPromiseReactions', - 'TypedArrayFrom', - 'UpdateEmpty', // completion records - 'UTC' // depends on LocalTZA, DaylightSavingTA -]; - -require('./tests').es2015(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2015); diff --git a/build/node_modules/es-abstract/test/es2016.js b/build/node_modules/es-abstract/test/es2016.js deleted file mode 100644 index c813ac53..00000000 --- a/build/node_modules/es-abstract/test/es2016.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; - -var ES = require('../').ES2016; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2016'); - -var expectedMissing = [ - 'AddRestrictedFunctionProperties', - 'AllocateArrayBuffer', - 'AllocateTypedArray', - 'AllocateTypedArrayBuffer', - 'BlockDeclarationInstantiation', - 'BoundFunctionCreate', - 'Canonicalize', - 'CharacterRange', - 'CharacterRangeOrUnion', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateIntrinsics', - 'CreateListIterator', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateResolvingFunctions', - 'CreateSetIterator', - 'CreateStringIterator', - 'CreateUnmappedArgumentsObject', - 'DaylightSavingTA', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnqueueJob', - 'EnumerateObjectProperties', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateDirectCall', - 'EvaluateNew', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionAllocate', - 'FunctionCreate', - 'FunctionDeclarationInstantiation', - 'FunctionInitialize', - 'GeneratorFunctionCreate', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetActiveScriptOrModule', - 'GetFunctionRealm', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'GlobalDeclarationInstantiation', - 'HostPromiseRejectionTracker', - 'HostReportErrors', - 'HostResolveImportedModule', - 'IfAbruptRejectPromise', - 'ImportedLocalNames', - 'InitializeBoundName', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsWordChar', - 'LocalTime', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'min', - 'ModuleNamespaceCreate', - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NextJob', - 'NormalCompletion', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'OrdinaryDelete', - 'OrdinaryGet', - 'OrdinaryIsExtensible', - 'OrdinaryOwnPropertyKeys', - 'OrdinaryPreventExtensions', - 'OrdinarySet', - 'ParseModule', - 'ParseScript', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'PromiseReactionJob', - 'PromiseResolveThenableJob', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RepeatMatcher', - 'ResolveBinding', - 'ResolveThisBinding', - 'ReturnIfAbrupt', - 'ScriptEvaluation', - 'ScriptEvaluationJob', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'SortCompare', // mystery access to `comparefn` arg - 'TopLevelModuleEvaluationJob', - 'ToString Applied to the Number Type', - 'TriggerPromiseReactions', - 'TypedArrayCreate', - 'TypedArraySpeciesCreate', - 'UpdateEmpty', // completion records - 'UTC', // depends on LocalTZA, DaylightSavingTA - 'ValidateTypedArray' -]; - -require('./tests').es2016(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2016); diff --git a/build/node_modules/es-abstract/test/es2017.js b/build/node_modules/es-abstract/test/es2017.js deleted file mode 100644 index ab6ca6f9..00000000 --- a/build/node_modules/es-abstract/test/es2017.js +++ /dev/null @@ -1,211 +0,0 @@ -'use strict'; - -var ES = require('../').ES2017; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2017'); - -var expectedMissing = [ - 'AddWaiter', - 'agent-order', - 'AgentCanSuspend', - 'AgentSignifier', - 'AllocateArrayBuffer', - 'AllocateSharedArrayBuffer', - 'AllocateTypedArray', - 'AllocateTypedArrayBuffer', - 'AsyncFunctionAwait', - 'AsyncFunctionCreate', - 'AsyncFunctionStart', - 'AtomicLoad', - 'AtomicReadModifyWrite', - 'BlockDeclarationInstantiation', - 'BoundFunctionCreate', - 'Canonicalize', - 'CharacterRange', - 'CharacterRangeOrUnion', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'ComposeWriteEventBytes', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateIntrinsics', - 'CreateListIterator', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateResolvingFunctions', - 'CreateSetIterator', - 'CreateSharedByteDataBlock', - 'CreateStringIterator', - 'CreateUnmappedArgumentsObject', - 'DaylightSavingTA', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnqueueJob', - 'EnterCriticalSection', - 'EnumerateObjectProperties', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateDirectCall', - 'EvaluateNew', - 'EventSet', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionAllocate', - 'FunctionCreate', - 'FunctionDeclarationInstantiation', - 'FunctionInitialize', - 'GeneratorFunctionCreate', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetActiveScriptOrModule', - 'GetBase', - 'GetFunctionRealm', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModifySetValueInBuffer', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetReferencedName', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'GetWaiterList', - 'GlobalDeclarationInstantiation', - 'happens-before', - 'HasPrimitiveBase', - 'host-synchronizes-with', - 'HostEnsureCanCompileStrings', - 'HostEventSet', - 'HostPromiseRejectionTracker', - 'HostReportErrors', - 'HostResolveImportedModule', - 'IfAbruptRejectPromise', - 'ImportedLocalNames', - 'InitializeBoundName', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsPropertyReference', - 'IsSharedArrayBuffer', - 'IsStrictReference', - 'IsSuperReference', - 'IsUnresolvableReference', - 'IsWordChar', - 'LeaveCriticalSection', - 'LocalTime', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'memory-order', - 'min', - 'ModuleNamespaceCreate', - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NormalCompletion', - 'NumberToRawBytes', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'OrdinaryDelete', - 'OrdinaryGet', - 'OrdinaryIsExtensible', - 'OrdinaryOwnPropertyKeys', - 'OrdinaryPreventExtensions', - 'OrdinarySet', - 'OrdinaryToPrimitive', - 'ParseModule', - 'ParseScript', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'PromiseReactionJob', - 'PromiseResolveThenableJob', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RawBytesToNumber', - 'reads-bytes-from', - 'reads-from', - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RemoveWaiter', - 'RemoveWaiters', - 'RepeatMatcher', - 'ResolveBinding', - 'ResolveThisBinding', - 'ReturnIfAbrupt', - 'RunJobs', - 'ScriptEvaluation', - 'ScriptEvaluationJob', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetImmutablePrototype', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'SharedDataBlockEventSet', - 'SortCompare', // mystery access to `comparefn` arg - 'Suspend', - 'TopLevelModuleEvaluationJob', - 'ToString Applied to the Number Type', - 'TriggerPromiseReactions', - 'TypedArrayCreate', - 'TypedArraySpeciesCreate', - 'UpdateEmpty', // completion records - 'UTC', // depends on LocalTZA, DaylightSavingTA - 'ValidateAtomicAccess', - 'ValidateSharedIntegerTypedArray', - 'ValidateTypedArray', - 'ValueOfReadEvent', - 'WakeWaiter', - 'WordCharacters', // depends on Canonicalize - 'AddRestrictedFunctionProperties', - 'synchronizes-with' -]; - -require('./tests').es2017(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2017); diff --git a/build/node_modules/es-abstract/test/es2018.js b/build/node_modules/es-abstract/test/es2018.js deleted file mode 100644 index 112e9589..00000000 --- a/build/node_modules/es-abstract/test/es2018.js +++ /dev/null @@ -1,229 +0,0 @@ -'use strict'; - -var ES = require('../').ES2018; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2018'); - -var expectedMissing = [ - 'AddRestrictedFunctionProperties', - 'AddWaiter', - 'agent-order', - 'AgentCanSuspend', - 'AgentSignifier', - 'AllocateArrayBuffer', - 'AllocateSharedArrayBuffer', - 'AllocateTypedArray', - 'AllocateTypedArrayBuffer', - 'AsyncFunctionCreate', - 'AsyncFunctionStart', - 'AsyncGeneratorEnqueue', - 'AsyncGeneratorFunctionCreate', - 'AsyncGeneratorReject', - 'AsyncGeneratorResolve', - 'AsyncGeneratorResumeNext', - 'AsyncGeneratorStart', - 'AsyncGeneratorYield', - 'AsyncIteratorClose', - 'AtomicLoad', - 'AtomicReadModifyWrite', - 'Await', - 'BackreferenceMatcher', - 'BlockDeclarationInstantiation', - 'BoundFunctionCreate', - 'Canonicalize', - 'CaseClauseIsSelected', - 'CharacterRange', - 'CharacterRangeOrUnion', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'ComposeWriteEventBytes', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateAsyncFromSyncIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateIntrinsics', - 'CreateListIteratorRecord', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateResolvingFunctions', - 'CreateSetIterator', - 'CreateSharedByteDataBlock', - 'CreateStringIterator', - 'CreateUnmappedArgumentsObject', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnqueueJob', - 'EnterCriticalSection', - 'EnumerateObjectProperties', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateNew', - 'EventSet', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionAllocate', - 'FunctionCreate', - 'FunctionDeclarationInstantiation', - 'FunctionInitialize', - 'GeneratorFunctionCreate', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetActiveScriptOrModule', - 'GetBase', - 'GetFunctionRealm', - 'GetGeneratorKind', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModifySetValueInBuffer', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetReferencedName', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'GetWaiterList', - 'GlobalDeclarationInstantiation', - 'happens-before', - 'HasPrimitiveBase', - 'host-synchronizes-with', - 'HostEnsureCanCompileStrings', - 'HostEventSet', - 'HostPromiseRejectionTracker', - 'HostReportErrors', - 'HostResolveImportedModule', - 'IfAbruptRejectPromise', - 'ImportedLocalNames', - 'InitializeBoundName', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'InnerModuleEvaluation', - 'InnerModuleInstantiation', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsPropertyReference', - 'IsSharedArrayBuffer', - 'IsStrictReference', - 'IsSuperReference', - 'IsUnresolvableReference', - 'IsWordChar', - 'LeaveCriticalSection', - 'LocalTime', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'memory-order', - 'min', - 'ModuleDeclarationEnvironmentSetup', - 'ModuleExecution', - 'ModuleNamespaceCreate', - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NormalCompletion', - 'NumberToRawBytes', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'OrdinaryDelete', - 'OrdinaryGet', - 'OrdinaryIsExtensible', - 'OrdinaryOwnPropertyKeys', - 'OrdinaryPreventExtensions', - 'OrdinarySet', - 'OrdinarySetWithOwnDescriptor', - 'OrdinaryToPrimitive', - 'ParseModule', - 'ParseScript', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'PromiseReactionJob', - 'PromiseResolveThenableJob', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RawBytesToNumber', - 'reads-bytes-from', - 'reads-from', - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RemoveWaiter', - 'RemoveWaiters', - 'RepeatMatcher', - 'ResolveBinding', - 'ResolveThisBinding', - 'ReturnIfAbrupt', - 'RunJobs', - 'ScriptEvaluation', - 'ScriptEvaluationJob', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetImmutablePrototype', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'SharedDataBlockEventSet', - 'SortCompare', // mystery access to `comparefn` arg - 'Suspend', - 'synchronizes-with', - 'ThrowCompletion', - 'TimeZoneString', - 'TopLevelModuleEvaluationJob', - 'TriggerPromiseReactions', - 'TypedArrayCreate', - 'TypedArraySpeciesCreate', - 'UnicodeMatchProperty', - 'UnicodeMatchPropertyValue', - 'UpdateEmpty', // completion records - 'UTC', // depends on LocalTZA - 'ValidateAtomicAccess', - 'ValidateSharedIntegerTypedArray', - 'ValidateTypedArray', - 'ValueOfReadEvent', - 'WakeWaiter', - 'WordCharacters' // depends on Canonicalize -]; - -require('./tests').es2018(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2018); diff --git a/build/node_modules/es-abstract/test/es2019.js b/build/node_modules/es-abstract/test/es2019.js deleted file mode 100644 index a7cc84af..00000000 --- a/build/node_modules/es-abstract/test/es2019.js +++ /dev/null @@ -1,231 +0,0 @@ -'use strict'; - -var ES = require('../').ES2019; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2019'); - -var expectedMissing = [ - 'AddRestrictedFunctionProperties', - 'AddWaiter', - 'agent-order', - 'AgentCanSuspend', - 'AgentSignifier', - 'AllocateArrayBuffer', - 'AllocateSharedArrayBuffer', - 'AllocateTypedArray', - 'AllocateTypedArrayBuffer', - 'AsyncFromSyncIteratorContinuation', - 'AsyncFunctionCreate', - 'AsyncFunctionStart', - 'AsyncGeneratorEnqueue', - 'AsyncGeneratorFunctionCreate', - 'AsyncGeneratorReject', - 'AsyncGeneratorResolve', - 'AsyncGeneratorResumeNext', - 'AsyncGeneratorStart', - 'AsyncGeneratorYield', - 'AsyncIteratorClose', - 'AtomicLoad', - 'AtomicReadModifyWrite', - 'Await', - 'BackreferenceMatcher', - 'BlockDeclarationInstantiation', - 'BoundFunctionCreate', - 'Canonicalize', - 'CaseClauseIsSelected', - 'CharacterRange', - 'CharacterRangeOrUnion', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'ComposeWriteEventBytes', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateAsyncFromSyncIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateIntrinsics', - 'CreateListIteratorRecord', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateResolvingFunctions', - 'CreateSetIterator', - 'CreateSharedByteDataBlock', - 'CreateStringIterator', - 'CreateUnmappedArgumentsObject', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnqueueJob', - 'EnterCriticalSection', - 'EnumerateObjectProperties', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateNew', - 'EventSet', - 'ExecuteModule', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionAllocate', - 'FunctionCreate', - 'FunctionDeclarationInstantiation', - 'FunctionInitialize', - 'GeneratorFunctionCreate', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetActiveScriptOrModule', - 'GetBase', - 'GetFunctionRealm', - 'GetGeneratorKind', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModifySetValueInBuffer', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetReferencedName', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'GetWaiterList', - 'GlobalDeclarationInstantiation', - 'happens-before', - 'HasPrimitiveBase', - 'host-synchronizes-with', - 'HostEnsureCanCompileStrings', - 'HostEventSet', - 'HostPromiseRejectionTracker', - 'HostReportErrors', - 'HostResolveImportedModule', - 'IfAbruptRejectPromise', - 'ImportedLocalNames', - 'InitializeBoundName', - 'InitializeEnvironment', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'InnerModuleEvaluation', - 'InnerModuleInstantiation', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsPropertyReference', - 'IsSharedArrayBuffer', - 'IsStrictReference', - 'IsSuperReference', - 'IsUnresolvableReference', - 'IsWordChar', - 'LeaveCriticalSection', - 'LocalTime', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'memory-order', - 'min', - 'ModuleNamespaceCreate', - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NormalCompletion', - 'NotifyWaiter', - 'NumberToRawBytes', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'OrdinaryDelete', - 'OrdinaryGet', - 'OrdinaryIsExtensible', - 'OrdinaryOwnPropertyKeys', - 'OrdinaryPreventExtensions', - 'OrdinarySet', - 'OrdinarySetWithOwnDescriptor', - 'OrdinaryToPrimitive', - 'ParseModule', - 'ParseScript', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'PromiseReactionJob', - 'PromiseResolveThenableJob', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RawBytesToNumber', - 'reads-bytes-from', - 'reads-from', - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RemoveWaiter', - 'RemoveWaiters', - 'RepeatMatcher', - 'ResolveBinding', - 'ResolveThisBinding', - 'ReturnIfAbrupt', - 'RunJobs', - 'ScriptEvaluation', - 'ScriptEvaluationJob', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetImmutablePrototype', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'SharedDataBlockEventSet', - 'SortCompare', // mystery access to `comparefn` arg - 'Suspend', - 'SynchronizeEventSet', - 'synchronizes-with', - 'ThrowCompletion', - 'TimeZoneString', - 'TopLevelModuleEvaluationJob', - 'TriggerPromiseReactions', - 'TypedArrayCreate', - 'TypedArraySpeciesCreate', - 'UnicodeMatchProperty', - 'UnicodeMatchPropertyValue', - 'UpdateEmpty', // completion records - 'UTC', // depends on LocalTZA - 'ValidateAtomicAccess', - 'ValidateSharedIntegerTypedArray', - 'ValidateTypedArray', - 'ValueOfReadEvent', - 'WordCharacters' // depends on Canonicalize -]; - -require('./tests').es2019(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2019); diff --git a/build/node_modules/es-abstract/test/es2020.js b/build/node_modules/es-abstract/test/es2020.js deleted file mode 100644 index 83f0b3ae..00000000 --- a/build/node_modules/es-abstract/test/es2020.js +++ /dev/null @@ -1,240 +0,0 @@ -'use strict'; - -var ES = require('../').ES2020; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/2020'); - -var expectedMissing = [ - 'AddRestrictedFunctionProperties', - 'AddWaiter', - 'agent-order', - 'AgentCanSuspend', - 'AgentSignifier', - 'AllocateArrayBuffer', - 'AllocateSharedArrayBuffer', - 'AllocateTypedArray', - 'AllocateTypedArrayBuffer', - 'AsyncFromSyncIteratorContinuation', - 'AsyncFunctionStart', - 'AsyncGeneratorEnqueue', - 'AsyncGeneratorReject', - 'AsyncGeneratorResolve', - 'AsyncGeneratorResumeNext', - 'AsyncGeneratorStart', - 'AsyncGeneratorYield', - 'AsyncIteratorClose', - 'AtomicLoad', - 'AtomicReadModifyWrite', - 'Await', - 'BackreferenceMatcher', - 'BlockDeclarationInstantiation', - 'BoundFunctionCreate', - 'Canonicalize', - 'CaseClauseIsSelected', - 'CharacterRange', - 'CharacterRangeOrUnion', - 'CharacterSetMatcher', - 'CloneArrayBuffer', - 'Completion', - 'ComposeWriteEventBytes', - 'Construct', - 'CopyDataBlockBytes', - 'CreateArrayFromList', - 'CreateArrayIterator', - 'CreateAsyncFromSyncIterator', - 'CreateBuiltinFunction', - 'CreateByteDataBlock', - 'CreateDynamicFunction', - 'CreateForInIterator', - 'CreateIntrinsics', - 'CreateListIteratorRecord', - 'CreateMapIterator', - 'CreateMappedArgumentsObject', - 'CreatePerIterationEnvironment', - 'CreateRealm', - 'CreateRegExpStringIterator', - 'CreateResolvingFunctions', - 'CreateSetIterator', - 'CreateSharedByteDataBlock', - 'CreateStringIterator', - 'CreateUnmappedArgumentsObject', - 'Decode', - 'DetachArrayBuffer', - 'Encode', - 'EnterCriticalSection', - 'EnumerateObjectProperties', - 'EscapeRegExpPattern', - 'EvalDeclarationInstantiation', - 'EvaluateCall', - 'EvaluateNew', - 'EvaluatePropertyAccessWithExpressionKey', - 'EvaluatePropertyAccessWithIdentifierKey', - 'EventSet', - 'ExecuteModule', - 'FinishDynamicImport', - 'ForBodyEvaluation', - 'ForIn/OfBodyEvaluation', - 'ForIn/OfHeadEvaluation', - 'FulfillPromise', - 'FunctionDeclarationInstantiation', - 'GeneratorResume', - 'GeneratorResumeAbrupt', - 'GeneratorStart', - 'GeneratorValidate', - 'GeneratorYield', - 'GetActiveScriptOrModule', - 'GetBase', - 'GetFunctionRealm', - 'GetGeneratorKind', - 'GetGlobalObject', - 'GetIdentifierReference', - 'GetModifySetValueInBuffer', - 'GetModuleNamespace', - 'GetNewTarget', - 'GetReferencedName', - 'GetSuperConstructor', - 'GetTemplateObject', - 'GetThisEnvironment', - 'GetThisValue', - 'GetValue', - 'GetValueFromBuffer', - 'GetViewValue', - 'GetWaiterList', - 'GlobalDeclarationInstantiation', - 'happens-before', - 'HasPrimitiveBase', - 'host-synchronizes-with', - 'HostEnqueuePromiseJob', - 'HostEnsureCanCompileStrings', - 'HostEventSet', - 'HostFinalizeImportMeta', - 'HostGetImportMetaProperties', - 'HostImportModuleDynamically', - 'HostPromiseRejectionTracker', - 'HostResolveImportedModule', - 'IfAbruptRejectPromise', - 'ImportedLocalNames', - 'InitializeBoundName', - 'InitializeEnvironment', - 'InitializeHostDefinedRealm', - 'InitializeReferencedBinding', - 'InnerModuleEvaluation', - 'InnerModuleLinking', - 'IntegerIndexedElementGet', - 'IntegerIndexedElementSet', - 'IntegerIndexedObjectCreate', - 'InternalizeJSONProperty', - 'IsAnonymousFunctionDefinition', - 'IsCompatiblePropertyDescriptor', - 'IsDetachedBuffer', - 'IsInTailPosition', - 'IsLabelledFunction', - 'IsPropertyReference', - 'IsSharedArrayBuffer', - 'IsStrictReference', - 'IsSuperReference', - 'IsUnresolvableReference', - 'IsValidIntegerIndex', - 'IsValidRegularExpressionLiteral', - 'IsWordChar', - 'LeaveCriticalSection', - 'LocalTime', - 'LocalTZA', - 'LoopContinues', - 'MakeArgGetter', - 'MakeArgSetter', - 'MakeBasicObject', - 'MakeClassConstructor', - 'MakeConstructor', - 'MakeMethod', - 'MakeSuperPropertyReference', - 'max', - 'memory-order', - 'min', - 'ModuleNamespaceCreate', - 'NewDeclarativeEnvironment', - 'NewFunctionEnvironment', - 'NewGlobalEnvironment', - 'NewModuleEnvironment', - 'NewObjectEnvironment', - 'NewPromiseCapability', - 'NewPromiseReactionJob', - 'NewPromiseResolveThenableJob', - 'NormalCompletion', - 'NotifyWaiter', - 'NumericToRawBytes', - 'ObjectDefineProperties', - 'OrdinaryCallBindThis', - 'OrdinaryCallEvaluateBody', - 'OrdinaryDelete', - 'OrdinaryFunctionCreate', - 'OrdinaryGet', - 'OrdinaryIsExtensible', - 'OrdinaryOwnPropertyKeys', - 'OrdinaryPreventExtensions', - 'OrdinarySet', - 'OrdinarySetWithOwnDescriptor', - 'OrdinaryToPrimitive', - 'ParseModule', - 'ParseScript', - 'PerformEval', - 'PerformPromiseAll', - 'PerformPromiseAllSettled', - 'PerformPromiseRace', - 'PerformPromiseThen', - 'PrepareForOrdinaryCall', - 'PrepareForTailCall', - 'ProxyCreate', - 'PutValue', // takes a Reference - 'RawBytesToNumeric', - 'reads-bytes-from', - 'reads-from', - 'RegExpAlloc', // creates a regex with uninitialized internal lots - 'RegExpBuiltinExec', - 'RegExpInitialize', // initializes allocated regex's internal slots - 'RejectPromise', - 'RemoveWaiter', - 'RemoveWaiters', - 'RepeatMatcher', - 'RequireInternalSlot', - 'ResolveBinding', - 'ResolveThisBinding', - 'ReturnIfAbrupt', - 'ScriptEvaluation', - 'SerializeJSONArray', - 'SerializeJSONObject', - 'SerializeJSONProperty', - 'SetDefaultGlobalBindings', - 'SetImmutablePrototype', - 'SetRealmGlobalObject', - 'SetValueInBuffer', - 'SetViewValue', - 'SharedDataBlockEventSet', - 'SortCompare', // mystery access to `comparefn` arg - 'StringToBigInt', - 'Suspend', - 'synchronizes-with', - 'ThrowCompletion', - 'TimeZoneString', - 'ToBigInt', - 'ToBigInt64', - 'ToBigUint64', - 'TriggerPromiseReactions', - 'TypedArrayCreate', - 'TypedArraySpeciesCreate', - 'UnicodeMatchProperty', - 'UnicodeMatchPropertyValue', - 'UpdateEmpty', // completion records - 'UTC', // depends on LocalTZA - 'UTF16Encode', - 'ValidateAtomicAccess', - 'ValidateSharedIntegerTypedArray', - 'ValidateTypedArray', - 'ValueOfReadEvent', - 'WordCharacters' // depends on Canonicalize -]; - -require('./tests').es2020(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 2020); diff --git a/build/node_modules/es-abstract/test/es5.js b/build/node_modules/es-abstract/test/es5.js deleted file mode 100644 index c4033f67..00000000 --- a/build/node_modules/es-abstract/test/es5.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var ES = require('../').ES5; -var boundES = require('./helpers/createBoundESNamespace')(ES); - -var ops = require('../operations/es5'); - -var expectedMissing = [ - 'SplitMatch' -]; - -require('./tests').es5(boundES, ops, expectedMissing); - -require('./helpers/runManifestTest')(require('tape'), ES, 5); diff --git a/build/node_modules/es-abstract/test/es6.js b/build/node_modules/es-abstract/test/es6.js deleted file mode 100644 index e7c9d98a..00000000 --- a/build/node_modules/es-abstract/test/es6.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var test = require('tape'); - -var ES = require('../'); -var ES6 = ES.ES6; -var ES2015 = ES.ES2015; -var ES6entry = require('../es6'); - -test('legacy es6 export', function (t) { - t.equal(ES6, ES2015, 'main ES6 === main ES2015'); - t.end(); -}); - -test('legacy es6 entry point', function (t) { - t.equal(ES6, ES6entry, 'main ES6 === ES6 entry point'); - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/es7.js b/build/node_modules/es-abstract/test/es7.js deleted file mode 100644 index ee57e153..00000000 --- a/build/node_modules/es-abstract/test/es7.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var test = require('tape'); - -var ES = require('../'); -var ES7 = ES.ES7; -var ES2016 = ES.ES2016; -var ES7entry = require('../es7'); - -test('legacy es7 export', function (t) { - t.equal(ES7, ES2016, 'main ES7 === main ES2016'); - t.end(); -}); - -test('legacy es7 entry point', function (t) { - t.equal(ES7, ES7entry, 'main ES7 === ES7 entry point'); - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js b/build/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js deleted file mode 100644 index 9c2b4fc4..00000000 --- a/build/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -var test = require('tape'); -var hasSymbols = require('has-symbols')(); - -var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys'); -var defineProperty = require('./defineProperty'); - -test('OwnPropertyKeys', function (t) { - t.deepEqual(OwnPropertyKeys({ a: 1, b: 2 }).sort(), ['a', 'b'].sort(), 'returns own string keys'); - - t.test('Symbols', { skip: !hasSymbols }, function (st) { - var o = { a: 1 }; - var sym = Symbol(); - o[sym] = 2; - - st.deepEqual(OwnPropertyKeys(o), ['a', sym], 'returns own string and symbol keys'); - - st.end(); - }); - - t.test('non-enumerables', { skip: !defineProperty.oDP }, function (st) { - var o = { a: 1, b: 42, c: NaN }; - defineProperty(o, 'b', { enumerable: false, value: 42 }); - defineProperty(o, 'c', { enumerable: false, get: function () { return NaN; } }); - - if (hasSymbols) { - defineProperty(o, 'd', { enumerable: false, value: true }); - defineProperty(o, 'e', { enumerable: false, get: function () { return true; } }); - } - - st.deepEqual( - OwnPropertyKeys(o).sort(), - (hasSymbols ? ['a', 'b', 'c', 'd', 'e'] : ['a', 'b', 'c']).sort(), - 'returns non-enumerable own keys, including accessors and symbols if available' - ); - - st.end(); - }); - - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/helpers/assertRecord.js b/build/node_modules/es-abstract/test/helpers/assertRecord.js deleted file mode 100644 index 02311013..00000000 --- a/build/node_modules/es-abstract/test/helpers/assertRecord.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var forEach = require('foreach'); -var debug = require('object-inspect'); - -var assertRecord = require('../../helpers/assertRecord'); -var v = require('es-value-fixtures'); - -module.exports = function assertRecordTests(ES, test) { - test('Property Descriptor', function (t) { - var record = 'Property Descriptor'; - - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { assertRecord(ES.Type, record, 'arg', primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t['throws']( - function () { assertRecord(ES.Type, record, 'arg', { invalid: true }); }, - TypeError, - 'invalid keys not allowed on a Property Descriptor' - ); - - t.doesNotThrow( - function () { assertRecord(ES.Type, record, 'arg', {}); }, - 'empty object is an incomplete Property Descriptor' - ); - - t.doesNotThrow( - function () { assertRecord(ES.Type, record, 'arg', v.accessorDescriptor()); }, - 'accessor descriptor is a Property Descriptor' - ); - - t.doesNotThrow( - function () { assertRecord(ES.Type, record, 'arg', v.mutatorDescriptor()); }, - 'mutator descriptor is a Property Descriptor' - ); - - t.doesNotThrow( - function () { assertRecord(ES.Type, record, 'arg', v.dataDescriptor()); }, - 'data descriptor is a Property Descriptor' - ); - - t.doesNotThrow( - function () { assertRecord(ES.Type, record, 'arg', v.genericDescriptor()); }, - 'generic descriptor is a Property Descriptor' - ); - - t['throws']( - function () { assertRecord(ES.Type, record, 'arg', v.bothDescriptor()); }, - TypeError, - 'a Property Descriptor can not be both a Data and an Accessor Descriptor' - ); - - t.end(); - }); -}; diff --git a/build/node_modules/es-abstract/test/helpers/createBoundESNamespace.js b/build/node_modules/es-abstract/test/helpers/createBoundESNamespace.js deleted file mode 100644 index 0150404d..00000000 --- a/build/node_modules/es-abstract/test/helpers/createBoundESNamespace.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -var bind = require('function-bind'); - -var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys'); - -module.exports = function createBoundESNamespace(ES) { - var keys = OwnPropertyKeys(ES); - var result = {}; - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var prop = ES[key]; - if (typeof prop === 'function') { - prop = bind.call(prop, undefined); - } else if (prop && typeof prop === 'object') { - prop = createBoundESNamespace(prop); - } - result[key] = prop; - } - - return result; -}; diff --git a/build/node_modules/es-abstract/test/helpers/defineProperty.js b/build/node_modules/es-abstract/test/helpers/defineProperty.js deleted file mode 100644 index 03102a83..00000000 --- a/build/node_modules/es-abstract/test/helpers/defineProperty.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var GetIntrinsic = require('../../GetIntrinsic'); - -var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); - -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = null; - } -} - -module.exports = function defineProperty(O, P, Desc) { - if ($defineProperty) { - return $defineProperty(O, P, Desc); - } - if ((Desc.enumerable && Desc.configurable && Desc.writable) || !(P in O)) { - O[P] = Desc.value; // eslint-disable-line no-param-reassign - return O; - } - - throw new SyntaxError('helper does not yet support this configuration'); -}; -module.exports.oDP = $defineProperty; diff --git a/build/node_modules/es-abstract/test/helpers/getSymbolDescription.js b/build/node_modules/es-abstract/test/helpers/getSymbolDescription.js deleted file mode 100644 index 05be3bbb..00000000 --- a/build/node_modules/es-abstract/test/helpers/getSymbolDescription.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -var test = require('tape'); -var debug = require('object-inspect'); -var forEach = require('foreach'); -var has = require('has'); - -var v = require('es-value-fixtures'); -var getSymbolDescription = require('../../helpers/getSymbolDescription'); -var getInferredName = require('../../helpers/getInferredName'); - -test('getSymbolDescription', function (t) { - t.test('no symbols', { skip: v.hasSymbols }, function (st) { - st['throws']( - getSymbolDescription, - SyntaxError, - 'requires Symbol support' - ); - - st.end(); - }); - - forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) { - t['throws']( - function () { getSymbolDescription(nonSymbol); }, - v.hasSymbols ? TypeError : SyntaxError, - debug(nonSymbol) + ' is not a Symbol' - ); - }); - - t.test('with symbols', { skip: !v.hasSymbols }, function (st) { - forEach( - [ - [Symbol(), undefined], - [Symbol(undefined), undefined], - [Symbol(null), 'null'], - [Symbol.iterator, 'Symbol.iterator'], - [Symbol('foo'), 'foo'] - ], - function (pair) { - var sym = pair[0]; - var desc = pair[1]; - st.equal(getSymbolDescription(sym), desc, debug(sym) + ' description is ' + debug(desc)); - } - ); - - st.test('only possible when inference or native `Symbol.prototype.description` is supported', { - skip: !getInferredName && !has(Symbol.prototype, 'description') - }, function (s2t) { - s2t.equal(getSymbolDescription(Symbol('')), '', 'Symbol("") description is ""'); - - s2t.end(); - }); - - st.test('only possible when global symbols are supported', { - skip: !has(Symbol, 'for') || !has(Symbol, 'keyFor') - }, function (s2t) { - // eslint-disable-next-line no-restricted-properties - s2t.equal(getSymbolDescription(Symbol['for']('')), '', 'Symbol.for("") description is ""'); - s2t.end(); - }); - - st.end(); - }); - - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/helpers/index.js b/build/node_modules/es-abstract/test/helpers/index.js deleted file mode 100644 index 4260bc2f..00000000 --- a/build/node_modules/es-abstract/test/helpers/index.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -require('./getSymbolDescription'); -require('./isByteValue'); -require('./isCodePoint'); -require('./OwnPropertyKeys'); diff --git a/build/node_modules/es-abstract/test/helpers/isByteValue.js b/build/node_modules/es-abstract/test/helpers/isByteValue.js deleted file mode 100644 index f8949102..00000000 --- a/build/node_modules/es-abstract/test/helpers/isByteValue.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var test = require('tape'); -var forEach = require('foreach'); -var debug = require('object-inspect'); - -var isByteValue = require('../../helpers/isByteValue'); -var v = require('es-value-fixtures'); - -test('isByteValue', function (t) { - forEach([].concat( - v.notNonNegativeIntegers, - -1, - -42, - -Infinity, - Infinity, - v.nonIntegerNumbers - ), function (nonByteValue) { - t.equal(isByteValue(nonByteValue), false, debug(nonByteValue) + ' is not a byte value'); - }); - - for (var i = 0; i <= 255; i += 1) { - t.equal(isByteValue(i), true, i + ' is a byte value'); - } - t.equal(isByteValue(256), false, '256 is not a byte value'); - - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/helpers/isCodePoint.js b/build/node_modules/es-abstract/test/helpers/isCodePoint.js deleted file mode 100644 index 9106615a..00000000 --- a/build/node_modules/es-abstract/test/helpers/isCodePoint.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var test = require('tape'); -var forEach = require('foreach'); -var debug = require('object-inspect'); - -var isCodePoint = require('../../helpers/isCodePoint'); -var v = require('es-value-fixtures'); - -test('isCodePoint', function (t) { - forEach(v.notNonNegativeIntegers.concat(0x10FFFF + 1), function (nonCodePoints) { - t.equal(isCodePoint(nonCodePoints), false, debug(nonCodePoints) + ' is not a Code Point'); - }); - - forEach([-0, 0, 1, 7, 42, 0x10FFFF], function (codePoint) { - t.equal(isCodePoint(codePoint), true, debug(codePoint) + ' is a Code Point'); - }); - - t.end(); -}); diff --git a/build/node_modules/es-abstract/test/helpers/runManifestTest.js b/build/node_modules/es-abstract/test/helpers/runManifestTest.js deleted file mode 100644 index 2fdb4f21..00000000 --- a/build/node_modules/es-abstract/test/helpers/runManifestTest.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var path = require('path'); -var fs = require('fs'); - -var forEach = require('foreach'); -var keys = require('object-keys'); - -module.exports = function runManifestTest(test, ES, edition) { - test('ES' + edition + ' manifest', { skip: !fs.readdirSync }, function (t) { - var files = fs.readdirSync(path.join(__dirname, '../../' + edition), 'utf-8'); - var map = { - AbstractEqualityComparison: 'Abstract Equality Comparison', - AbstractRelationalComparison: 'Abstract Relational Comparison', - StrictEqualityComparison: 'Strict Equality Comparison' - }; - forEach(files, function (file) { - var name = path.basename(file, path.extname(file)); - var actual = ES[map[name] || name]; - var expected = require(path.join(__dirname, '../../' + edition + '/', file)); // eslint-disable-line global-require - t.equal(actual, expected, 'ES["' + name + '"] === ' + file); - }); - var actualCount = keys(ES).length; - t.equal(actualCount, files.length, 'expected ' + files.length + ' files, got ' + actualCount); - t.end(); - }); -}; diff --git a/build/node_modules/es-abstract/test/index.js b/build/node_modules/es-abstract/test/index.js deleted file mode 100644 index 5ebe3dbc..00000000 --- a/build/node_modules/es-abstract/test/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var ES = require('../'); -var test = require('tape'); -var keys = require('object-keys'); -var forEach = require('foreach'); - -var ESkeys = keys(ES).sort(); -var ES6keys = keys(ES.ES6).sort(); - -test('exposed properties', function (t) { - t.deepEqual(ESkeys, ES6keys.concat(['ES2020', 'ES2019', 'ES2018', 'ES2017', 'ES7', 'ES2016', 'ES6', 'ES2015', 'ES5']).sort(), 'main ES object keys match ES6 keys'); - t.end(); -}); - -test('methods match', function (t) { - forEach(ES6keys, function (key) { - t.equal(ES.ES6[key], ES[key], 'method ' + key + ' on main ES object is ES6 method'); - }); - t.end(); -}); - -require('./GetIntrinsic'); - -require('./helpers'); - -require('./es5'); -require('./es6'); -require('./es2015'); -require('./es7'); -require('./es2016'); -require('./es2017'); -require('./es2018'); -require('./es2019'); -require('./es2020'); diff --git a/build/node_modules/es-abstract/test/ses-compat.js b/build/node_modules/es-abstract/test/ses-compat.js deleted file mode 100644 index c3e60f4a..00000000 --- a/build/node_modules/es-abstract/test/ses-compat.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -/* globals lockdown */ -require('ses'); - -lockdown({ errorTaming: 'unsafe' }); - -require('.'); diff --git a/build/node_modules/es-abstract/test/tests.js b/build/node_modules/es-abstract/test/tests.js deleted file mode 100644 index e3ec4003..00000000 --- a/build/node_modules/es-abstract/test/tests.js +++ /dev/null @@ -1,6962 +0,0 @@ -'use strict'; - -var tape = require('tape'); - -var forEach = require('foreach'); -var debug = require('object-inspect'); -var assign = require('object.assign'); -var keys = require('object-keys'); -var has = require('has'); -var arrowFns = require('make-arrow-function').list(); -var hasStrictMode = require('has-strict-mode')(); -var functionsHaveNames = require('functions-have-names')(); -var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); -var hasBigInts = require('has-bigints')(); - -var $getProto = require('../helpers/getProto'); -var $setProto = require('../helpers/setProto'); -var defineProperty = require('./helpers/defineProperty'); -var getInferredName = require('../helpers/getInferredName'); -var getOwnPropertyDescriptor = require('../helpers/getOwnPropertyDescriptor'); -var assertRecordTests = require('./helpers/assertRecord'); -var v = require('es-value-fixtures'); -var diffOps = require('./diffOps'); - -var $BigInt = hasBigInts ? BigInt : null; - -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1; - -var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false - -// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated -var noThrowOnStrictViolation = (function () { - try { - delete [].length; - return true; - } catch (e) { - } - return false; -}()); - -var makeTest = function makeTest(skips) { - return function test(opName, maybeOpts, maybeCb) { - var origOpts = arguments.length > 2 ? maybeOpts : {}; - var opts = assign( - {}, - origOpts, - { skip: (skips && skips[opName]) || origOpts.skip } - ); - var cb = arguments.length > 2 ? maybeCb : maybeOpts; - return tape(opName, opts, cb); - }; -}; - -var leadingPoo = '\uD83D'; -var trailingPoo = '\uDCA9'; -var wholePoo = leadingPoo + trailingPoo; - -var getArraySubclassWithSpeciesConstructor = function getArraySubclass(speciesConstructor) { - var Bar = function Bar() { - var inst = []; - Object.setPrototypeOf(inst, Bar.prototype); - defineProperty(inst, 'constructor', { value: Bar }); - return inst; - }; - Bar.prototype = Object.create(Array.prototype); - Object.setPrototypeOf(Bar, Array); - defineProperty(Bar, Symbol.species, { value: speciesConstructor }); - - return Bar; -}; - -var testIterator = function (t, iterator, expected) { - var resultCount = 0; - var result; - while (result = iterator.next(), !result.done) { // eslint-disable-line no-sequences - t.deepEqual(result, { done: false, value: expected[resultCount] }, 'result ' + resultCount); - resultCount += 1; - } - t.equal(resultCount, expected.length, 'expected ' + expected.length + ', got ' + resultCount); -}; - -var hasSpecies = v.hasSymbols && Symbol.species; - -var hasLastIndex = 'lastIndex' in (/a/).exec('a'); // IE 8 -var hasGroups = 'groups' in (/a/).exec('a'); // modern engines -var kludgeMatch = function kludgeMatch(R, matchObject) { - if (hasGroups) { - assign(matchObject, { groups: matchObject.groups }); - } - if (hasLastIndex) { - assign(matchObject, { lastIndex: R.lastIndex }); - } - return matchObject; -}; - -var testEnumerableOwnNames = function (t, enumerableOwnNames) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { enumerableOwnNames(nonObject); }, - debug(nonObject) + ' is not an Object' - ); - }); - - var Child = function Child() { - this.own = {}; - }; - Child.prototype = { - inherited: {} - }; - - var obj = new Child(); - - t.equal('own' in obj, true, 'has "own"'); - t.equal(has(obj, 'own'), true, 'has own "own"'); - t.equal(Object.prototype.propertyIsEnumerable.call(obj, 'own'), true, 'has enumerable "own"'); - - t.equal('inherited' in obj, true, 'has "inherited"'); - t.equal(has(obj, 'inherited'), false, 'has non-own "inherited"'); - t.equal(has(Child.prototype, 'inherited'), true, 'Child.prototype has own "inherited"'); - t.equal(Child.prototype.inherited, obj.inherited, 'Child.prototype.inherited === obj.inherited'); - t.equal(Object.prototype.propertyIsEnumerable.call(Child.prototype, 'inherited'), true, 'has enumerable "inherited"'); - - t.equal('toString' in obj, true, 'has "toString"'); - t.equal(has(obj, 'toString'), false, 'has non-own "toString"'); - t.equal(has(Object.prototype, 'toString'), true, 'Object.prototype has own "toString"'); - t.equal(Object.prototype.toString, obj.toString, 'Object.prototype.toString === obj.toString'); - // eslint-disable-next-line no-useless-call - t.equal(Object.prototype.propertyIsEnumerable.call(Object.prototype, 'toString'), false, 'has non-enumerable "toString"'); - - return obj; -}; - -var testToNumber = function (t, ES, ToNumber) { - t.equal(NaN, ToNumber(undefined), 'undefined coerces to NaN'); - t.equal(ToNumber(null), 0, 'null coerces to +0'); - t.equal(ToNumber(false), 0, 'false coerces to +0'); - t.equal(1, ToNumber(true), 'true coerces to 1'); - - t.test('numbers', function (st) { - st.equal(NaN, ToNumber(NaN), 'NaN returns itself'); - forEach(v.zeroes.concat(v.infinities, 42), function (num) { - st.equal(num, ToNumber(num), num + ' returns itself'); - }); - forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) { - st.equal(+numString, ToNumber(numString), '"' + numString + '" coerces to ' + Number(numString)); - }); - st.end(); - }); - - t.test('objects', function (st) { - forEach(v.objects, function (object) { - st.equal(ToNumber(object), ToNumber(ES.ToPrimitive(object)), 'object ' + object + ' coerces to same as ToPrimitive of object does'); - }); - st['throws'](function () { return ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - st.end(); - }); - - // TODO: check if this applies to ES5 - t.test('binary literals', function (st) { - st.equal(ToNumber('0b10'), 2, '0b10 is 2'); - st.equal(ToNumber({ toString: function () { return '0b11'; } }), 3, 'Object that toStrings to 0b11 is 3'); - - st.equal(ToNumber('0b12'), NaN, '0b12 is NaN'); - st.equal(ToNumber({ toString: function () { return '0b112'; } }), NaN, 'Object that toStrings to 0b112 is NaN'); - st.end(); - }); - - // TODO: check if this applies to ES5 - t.test('octal literals', function (st) { - st.equal(ToNumber('0o10'), 8, '0o10 is 8'); - st.equal(ToNumber({ toString: function () { return '0o11'; } }), 9, 'Object that toStrings to 0o11 is 9'); - - st.equal(ToNumber('0o18'), NaN, '0o18 is NaN'); - st.equal(ToNumber({ toString: function () { return '0o118'; } }), NaN, 'Object that toStrings to 0o118 is NaN'); - st.end(); - }); - - // TODO: check if this applies to ES5 - t.test('signed hex numbers', function (st) { - st.equal(ToNumber('-0xF'), NaN, '-0xF is NaN'); - st.equal(ToNumber(' -0xF '), NaN, 'space-padded -0xF is NaN'); - st.equal(ToNumber('+0xF'), NaN, '+0xF is NaN'); - st.equal(ToNumber(' +0xF '), NaN, 'space-padded +0xF is NaN'); - - st.end(); - }); - - // TODO: check if this applies to ES5 - t.test('trimming of whitespace and non-whitespace characters', function (st) { - var whitespace = ' \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'; - st.equal(0, ToNumber(whitespace + 0 + whitespace), 'whitespace is trimmed'); - - // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace. - var nonWhitespaces = { - '\\u0085': '\u0085', - '\\u200b': '\u200b', - '\\ufffe': '\ufffe' - }; - - forEach(nonWhitespaces, function (desc, nonWS) { - st.equal(ToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed'); - }); - - st.end(); - }); - - // TODO: skip for ES5 - forEach(v.symbols, function (symbol) { - t['throws']( - function () { ToNumber(symbol); }, - TypeError, - 'Symbols can’t be converted to a Number: ' + debug(symbol) - ); - - var boxed = Object(symbol); - t['throws']( - function () { ToNumber(boxed); }, - TypeError, - 'boxed Symbols can’t be converted to a Number: ' + debug(boxed) - ); - }); - - // TODO: check if this applies to ES5 - t.test('dates', function (st) { - var invalid = new Date(NaN); - st.equal(ToNumber(invalid), NaN, 'invalid Date coerces to NaN'); - var now = +new Date(); - st.equal(ToNumber(new Date(now)), now, 'Date coerces to timestamp'); - st.end(); - }); -}; - -var es5 = function ES5(ES, ops, expectedMissing, skips) { - var test = makeTest(skips); - - test('has expected operations', function (t) { - var diff = diffOps(ES, ops, expectedMissing); - - t.deepEqual(diff.extra, [], 'no extra ops'); - - t.deepEqual(diff.missing, [], 'no unexpected missing ops'); - - t.deepEqual(diff.extraMissing, [], 'no unexpected "expected missing" ops'); - - t.end(); - }); - - test('ToPrimitive', function (t) { - t.test('primitives', function (st) { - var testPrimitive = function (primitive) { - st.equal(ES.ToPrimitive(primitive), primitive, debug(primitive) + ' is returned correctly'); - }; - forEach(v.primitives, testPrimitive); - st.end(); - }); - - t.test('objects', function (st) { - st.equal(ES.ToPrimitive(v.coercibleObject), 3, 'coercibleObject with no hint coerces to valueOf'); - st.equal(ES.ToPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString'); - st.equal(ES.ToPrimitive(v.coercibleObject, Number), 3, 'coercibleObject with hint Number coerces to valueOf'); - st.equal(ES.ToPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to NaN'); - st.equal(ES.ToPrimitive(v.coercibleObject, String), 42, 'coercibleObject with hint String coerces to nonstringified toString'); - st.equal(ES.ToPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString'); - st.equal(ES.ToPrimitive(v.coercibleFnObject), v.coercibleFnObject.toString(), 'coercibleFnObject coerces to toString'); - st.equal(ES.ToPrimitive(v.toStringOnlyObject), 7, 'toStringOnlyObject returns non-stringified toString'); - st.equal(ES.ToPrimitive(v.valueOfOnlyObject), 4, 'valueOfOnlyObject returns valueOf'); - st['throws'](function () { return ES.ToPrimitive(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError'); - st['throws'](function () { return ES.ToPrimitive(v.uncoercibleFnObject); }, TypeError, 'uncoercibleFnObject throws a TypeError'); - st.end(); - }); - - t.test('dates', function (st) { - var invalid = new Date(NaN); - st.equal(ES.ToPrimitive(invalid), Date.prototype.toString.call(invalid), 'invalid Date coerces to Date#toString'); - var now = new Date(); - st.equal(ES.ToPrimitive(now), Date.prototype.toString.call(now), 'Date coerces to Date#toString'); - st.end(); - }); - - t.end(); - }); - - test('ToBoolean', function (t) { - t.equal(false, ES.ToBoolean(undefined), 'undefined coerces to false'); - t.equal(false, ES.ToBoolean(null), 'null coerces to false'); - t.equal(false, ES.ToBoolean(false), 'false returns false'); - t.equal(true, ES.ToBoolean(true), 'true returns true'); - - t.test('numbers', function (st) { - forEach(v.zeroes.concat(NaN), function (falsyNumber) { - st.equal(false, ES.ToBoolean(falsyNumber), 'falsy number ' + falsyNumber + ' coerces to false'); - }); - forEach(v.infinities.concat([42, 1]), function (truthyNumber) { - st.equal(true, ES.ToBoolean(truthyNumber), 'truthy number ' + truthyNumber + ' coerces to true'); - }); - - st.end(); - }); - - t.equal(false, ES.ToBoolean(''), 'empty string coerces to false'); - t.equal(true, ES.ToBoolean('foo'), 'nonempty string coerces to true'); - - t.test('objects', function (st) { - forEach(v.objects, function (obj) { - st.equal(true, ES.ToBoolean(obj), 'object coerces to true'); - }); - st.equal(true, ES.ToBoolean(v.uncoercibleObject), 'uncoercibleObject coerces to true'); - - st.end(); - }); - - t.end(); - }); - - test('ToNumber', function (t) { - t.equal(NaN, ES.ToNumber(undefined), 'undefined coerces to NaN'); - t.equal(ES.ToNumber(null), 0, 'null coerces to +0'); - t.equal(ES.ToNumber(false), 0, 'false coerces to +0'); - t.equal(1, ES.ToNumber(true), 'true coerces to 1'); - - t.test('numbers', function (st) { - st.equal(NaN, ES.ToNumber(NaN), 'NaN returns itself'); - forEach(v.zeroes.concat(v.infinities, 42), function (num) { - st.equal(num, ES.ToNumber(num), num + ' returns itself'); - }); - forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) { - st.equal(+numString, ES.ToNumber(numString), '"' + numString + '" coerces to ' + Number(numString)); - }); - st.end(); - }); - - t.test('objects', function (st) { - forEach(v.objects, function (object) { - st.equal(ES.ToNumber(object), ES.ToNumber(ES.ToPrimitive(object)), 'object ' + object + ' coerces to same as ToPrimitive of object does'); - }); - st['throws'](function () { return ES.ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - st.end(); - }); - - t.test('binary literals', function (st) { - st.equal(ES.ToNumber('0b10'), NaN, '0b10 is NaN'); - st.equal(ES.ToNumber({ toString: function () { return '0b11'; } }), NaN, 'Object that toStrings to 0b11 is NaN'); - - st.equal(ES.ToNumber('0b12'), NaN, '0b12 is NaN'); - st.equal(ES.ToNumber({ toString: function () { return '0b112'; } }), NaN, 'Object that toStrings to 0b112 is NaN'); - st.end(); - }); - - t.test('octal literals', function (st) { - st.equal(ES.ToNumber('0o10'), NaN, '0o10 is NaN'); - st.equal(ES.ToNumber({ toString: function () { return '0o11'; } }), NaN, 'Object that toStrings to 0o11 is NaN'); - - st.equal(ES.ToNumber('0o18'), NaN, '0o18 is NaN'); - st.equal(ES.ToNumber({ toString: function () { return '0o118'; } }), NaN, 'Object that toStrings to 0o118 is NaN'); - st.end(); - }); - - t.test('signed hex numbers', function (st) { - st.equal(ES.ToNumber('-0xF'), NaN, '-0xF is NaN'); - st.equal(ES.ToNumber(' -0xF '), NaN, 'space-padded -0xF is NaN'); - st.equal(ES.ToNumber('+0xF'), NaN, '+0xF is NaN'); - st.equal(ES.ToNumber(' +0xF '), NaN, 'space-padded +0xF is NaN'); - - st.end(); - }); - - // TODO: check if this applies to ES5 - t.test('trimming of whitespace and non-whitespace characters', function (st) { - var whitespace = ' \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085'; - st.equal(ES.ToNumber(whitespace + 0 + whitespace), 0, 'whitespace is trimmed'); - - // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace. - var nonWhitespaces = { - '\\u200b': '\u200b', - '\\ufffe': '\ufffe' - }; - - forEach(nonWhitespaces, function (desc, nonWS) { - st.equal(ES.ToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed'); - }); - - st.end(); - }); - - t.test('dates', function (st) { - var invalid = new Date(NaN); - st.equal(ES.ToNumber(invalid), NaN, 'invalid Date coerces to NaN'); - var now = +new Date(); - st.equal(ES.ToNumber(new Date(now)), now, 'Date coerces to timestamp'); - st.end(); - }); - - t.end(); - }); - - test('ToInteger', function (t) { - forEach([NaN], function (num) { - t.equal(0, ES.ToInteger(num), debug(num) + ' returns +0'); - }); - forEach(v.zeroes.concat(v.infinities, 42), function (num) { - t.equal(num, ES.ToInteger(num), debug(num) + ' returns itself'); - t.equal(-num, ES.ToInteger(-num), '-' + debug(num) + ' returns itself'); - }); - t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3'); - t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.end(); - }); - - test('ToInt32', function (t) { - t.equal(ES.ToInt32(NaN), 0, 'NaN coerces to +0'); - forEach(v.zeroes.concat(v.infinities), function (num) { - t.equal(ES.ToInt32(num), 0, num + ' returns +0'); - t.equal(ES.ToInt32(-num), 0, '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToInt32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToInt32(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToInt32(0x100000000 - 1), -1, '2^32 - 1 returns -1'); - t.equal(ES.ToInt32(0x80000000), -0x80000000, '2^31 returns -2^31'); - t.equal(ES.ToInt32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1'); - forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) { - t.equal(ES.ToInt32(num), ES.ToInt32(ES.ToUint32(num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for 0x' + num.toString(16)); - t.equal(ES.ToInt32(-num), ES.ToInt32(ES.ToUint32(-num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for -0x' + num.toString(16)); - }); - t.end(); - }); - - test('ToUint32', function (t) { - t.equal(0, ES.ToUint32(NaN), 'NaN coerces to +0'); - forEach([0, Infinity], function (num) { - t.equal(0, ES.ToUint32(num), num + ' returns +0'); - t.equal(0, ES.ToUint32(-num), '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToUint32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToUint32(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToUint32(0x100000000 - 1), 0x100000000 - 1, '2^32 - 1 returns 2^32 - 1'); - t.equal(ES.ToUint32(0x80000000), 0x80000000, '2^31 returns 2^31'); - t.equal(ES.ToUint32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1'); - forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) { - t.equal(ES.ToUint32(num), ES.ToUint32(ES.ToInt32(num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for 0x' + num.toString(16)); - t.equal(ES.ToUint32(-num), ES.ToUint32(ES.ToInt32(-num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for -0x' + num.toString(16)); - }); - t.end(); - }); - - test('ToUint16', function (t) { - t.equal(0, ES.ToUint16(NaN), 'NaN coerces to +0'); - forEach([0, Infinity], function (num) { - t.equal(0, ES.ToUint16(num), num + ' returns +0'); - t.equal(0, ES.ToUint16(-num), '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToUint16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToUint16(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToUint16(0x100000000 - 1), 0x10000 - 1, '2^32 - 1 returns 2^16 - 1'); - t.equal(ES.ToUint16(0x80000000), 0, '2^31 returns +0'); - t.equal(ES.ToUint16(0x80000000 - 1), 0x10000 - 1, '2^31 - 1 returns 2^16 - 1'); - t.equal(ES.ToUint16(0x10000), 0, '2^16 returns +0'); - t.equal(ES.ToUint16(0x10000 - 1), 0x10000 - 1, '2^16 - 1 returns 2^16 - 1'); - t.end(); - }); - - test('ToString', function (t) { - forEach(v.objects.concat(v.nonSymbolPrimitives), function (item) { - t.equal(ES.ToString(item), String(item), 'ES.ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')'); - }); - - t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - - t.end(); - }); - - test('ToObject', function (t) { - t['throws'](function () { return ES.ToObject(undefined); }, TypeError, 'undefined throws'); - t['throws'](function () { return ES.ToObject(null); }, TypeError, 'null throws'); - forEach(v.numbers, function (number) { - var obj = ES.ToObject(number); - t.equal(typeof obj, 'object', 'number ' + number + ' coerces to object'); - t.equal(true, obj instanceof Number, 'object of ' + number + ' is Number object'); - t.equal(obj.valueOf(), number, 'object of ' + number + ' coerces to ' + number); - }); - t.end(); - }); - - test('CheckObjectCoercible', function (t) { - t['throws'](function () { return ES.CheckObjectCoercible(undefined); }, TypeError, 'undefined throws'); - t['throws'](function () { return ES.CheckObjectCoercible(null); }, TypeError, 'null throws'); - var checkCoercible = function (value) { - t.doesNotThrow(function () { return ES.CheckObjectCoercible(value); }, debug(value) + ' does not throw'); - }; - forEach(v.objects.concat(v.nonNullPrimitives), checkCoercible); - t.end(); - }); - - test('IsCallable', function (t) { - t.equal(true, ES.IsCallable(function () {}), 'function is callable'); - var nonCallables = [/a/g, {}, Object.prototype, NaN].concat(v.nonFunctions); - forEach(nonCallables, function (nonCallable) { - t.equal(false, ES.IsCallable(nonCallable), debug(nonCallable) + ' is not callable'); - }); - t.end(); - }); - - test('SameValue', function (t) { - t.equal(true, ES.SameValue(NaN, NaN), 'NaN is SameValue as NaN'); - t.equal(false, ES.SameValue(0, -0), '+0 is not SameValue as -0'); - forEach(v.objects.concat(v.primitives), function (val) { - t.equal(val === val, ES.SameValue(val, val), debug(val) + ' is SameValue to itself'); - }); - t.end(); - }); - - test('Type', function (t) { - t.equal(ES.Type(), 'Undefined', 'Type() is Undefined'); - t.equal(ES.Type(undefined), 'Undefined', 'Type(undefined) is Undefined'); - t.equal(ES.Type(null), 'Null', 'Type(null) is Null'); - t.equal(ES.Type(true), 'Boolean', 'Type(true) is Boolean'); - t.equal(ES.Type(false), 'Boolean', 'Type(false) is Boolean'); - t.equal(ES.Type(0), 'Number', 'Type(0) is Number'); - t.equal(ES.Type(NaN), 'Number', 'Type(NaN) is Number'); - t.equal(ES.Type('abc'), 'String', 'Type("abc") is String'); - t.equal(ES.Type(function () {}), 'Object', 'Type(function () {}) is Object'); - t.equal(ES.Type({}), 'Object', 'Type({}) is Object'); - - t.end(); - }); - - assertRecordTests(ES, test); - - test('IsAccessorDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.IsAccessorDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t.equal(ES.IsAccessorDescriptor(), false, 'no value is not an Accessor Descriptor'); - t.equal(ES.IsAccessorDescriptor(undefined), false, 'undefined value is not an Accessor Descriptor'); - - t.equal(ES.IsAccessorDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is an Accessor Descriptor'); - t.equal(ES.IsAccessorDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is an Accessor Descriptor'); - t.equal(ES.IsAccessorDescriptor(v.dataDescriptor()), false, 'data descriptor is not an Accessor Descriptor'); - t.equal(ES.IsAccessorDescriptor(v.genericDescriptor()), false, 'generic descriptor is not an Accessor Descriptor'); - - t.end(); - }); - - test('IsDataDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.IsDataDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t.equal(ES.IsDataDescriptor(), false, 'no value is not a Data Descriptor'); - t.equal(ES.IsDataDescriptor(undefined), false, 'undefined value is not a Data Descriptor'); - - t.equal(ES.IsDataDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a Data Descriptor'); - t.equal(ES.IsDataDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a Data Descriptor'); - t.equal(ES.IsDataDescriptor(v.dataDescriptor()), true, 'data descriptor is a Data Descriptor'); - t.equal(ES.IsDataDescriptor(v.genericDescriptor()), false, 'generic descriptor is not a Data Descriptor'); - - t.end(); - }); - - test('IsGenericDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.IsGenericDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t.equal(ES.IsGenericDescriptor(), false, 'no value is not a Data Descriptor'); - t.equal(ES.IsGenericDescriptor(undefined), false, 'undefined value is not a Data Descriptor'); - - t.equal(ES.IsGenericDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a generic Descriptor'); - t.equal(ES.IsGenericDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a generic Descriptor'); - t.equal(ES.IsGenericDescriptor(v.dataDescriptor()), false, 'data descriptor is not a generic Descriptor'); - - t.equal(ES.IsGenericDescriptor(v.genericDescriptor()), true, 'generic descriptor is a generic Descriptor'); - - t.end(); - }); - - test('FromPropertyDescriptor', function (t) { - t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined'); - t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined'); - - forEach(v.nonNullPrimitives.concat(null), function (primitive) { - t['throws']( - function () { ES.FromPropertyDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - var accessor = v.accessorDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(accessor), { - get: accessor['[[Get]]'], - set: accessor['[[Set]]'], - enumerable: !!accessor['[[Enumerable]]'], - configurable: !!accessor['[[Configurable]]'] - }); - - var mutator = v.mutatorDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(mutator), { - get: mutator['[[Get]]'], - set: mutator['[[Set]]'], - enumerable: !!mutator['[[Enumerable]]'], - configurable: !!mutator['[[Configurable]]'] - }); - var data = v.dataDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(data), { - value: data['[[Value]]'], - writable: data['[[Writable]]'], - enumerable: !!data['[[Enumerable]]'], - configurable: !!data['[[Configurable]]'] - }); - - t['throws']( - function () { ES.FromPropertyDescriptor(v.genericDescriptor()); }, - TypeError, - 'a complete Property Descriptor is required' - ); - - t.end(); - }); - - test('ToPropertyDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.ToPropertyDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - var accessor = v.accessorDescriptor(); - t.deepEqual(ES.ToPropertyDescriptor({ - get: accessor['[[Get]]'], - enumerable: !!accessor['[[Enumerable]]'], - configurable: !!accessor['[[Configurable]]'] - }), accessor); - - var mutator = v.mutatorDescriptor(); - t.deepEqual(ES.ToPropertyDescriptor({ - set: mutator['[[Set]]'], - enumerable: !!mutator['[[Enumerable]]'], - configurable: !!mutator['[[Configurable]]'] - }), mutator); - - var data = v.descriptors.nonConfigurable(v.dataDescriptor()); - t.deepEqual(ES.ToPropertyDescriptor({ - value: data['[[Value]]'], - writable: data['[[Writable]]'], - configurable: !!data['[[Configurable]]'] - }), data); - - var both = v.bothDescriptor(); - t['throws']( - function () { - ES.ToPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] }); - }, - TypeError, - 'data and accessor descriptors are mutually exclusive' - ); - - t['throws']( - function () { ES.ToPropertyDescriptor({ get: 'not callable' }); }, - TypeError, - '"get" must be undefined or callable' - ); - - t['throws']( - function () { ES.ToPropertyDescriptor({ set: 'not callable' }); }, - TypeError, - '"set" must be undefined or callable' - ); - - forEach(v.nonFunctions, function (nonFunction) { - if (typeof nonFunction !== 'undefined') { - t['throws']( - function () { ES.ToPropertyDescriptor({ get: nonFunction }); }, - TypeError, - '`.get` has ' + debug(nonFunction) + ', which is not a Function' - ); - t['throws']( - function () { ES.ToPropertyDescriptor({ set: nonFunction }); }, - TypeError, - '`.set` has ' + debug(nonFunction) + ', which is not a Function' - ); - } - }); - - forEach(['get', 'set'], function (accessorName) { - forEach(['value', 'writable'], function (dataName) { - var o = {}; - o[accessorName] = undefined; - o[dataName] = undefined; - - t['throws']( - function () { ES.ToPropertyDescriptor(o); }, - TypeError, - accessorName + ' + ' + dataName + ' is invalid' - ); - }); - }); - - t.end(); - }); - - test('Abstract Equality Comparison', function (t) { - t.test('same types use ===', function (st) { - forEach(v.primitives.concat(v.objects), function (value) { - st.equal(ES['Abstract Equality Comparison'](value, value), value === value, debug(value) + ' is abstractly equal to itself'); - }); - st.end(); - }); - - t.test('different types coerce', function (st) { - var pairs = [ - [null, undefined], - [3, '3'], - [true, '3'], - [true, 3], - [false, 0], - [false, '0'], - [3, [3]], - ['3', [3]], - [true, [1]], - [false, [0]], - [String(v.coercibleObject), v.coercibleObject], - [Number(String(v.coercibleObject)), v.coercibleObject], - [Number(v.coercibleObject), v.coercibleObject], - [String(Number(v.coercibleObject)), v.coercibleObject] - ]; - forEach(pairs, function (pair) { - var a = pair[0]; - var b = pair[1]; - // eslint-disable-next-line eqeqeq - st.equal(ES['Abstract Equality Comparison'](a, b), a == b, debug(a) + ' == ' + debug(b)); - // eslint-disable-next-line eqeqeq - st.equal(ES['Abstract Equality Comparison'](b, a), b == a, debug(b) + ' == ' + debug(a)); - }); - st.end(); - }); - - t.end(); - }); - - test('Strict Equality Comparison', function (t) { - t.test('same types use ===', function (st) { - forEach(v.primitives.concat(v.objects), function (value) { - st.equal(ES['Strict Equality Comparison'](value, value), value === value, debug(value) + ' is strictly equal to itself'); - }); - st.end(); - }); - - t.test('different types are not ===', function (st) { - var pairs = [ - [null, undefined], - [3, '3'], - [true, '3'], - [true, 3], - [false, 0], - [false, '0'], - [3, [3]], - ['3', [3]], - [true, [1]], - [false, [0]], - [String(v.coercibleObject), v.coercibleObject], - [Number(String(v.coercibleObject)), v.coercibleObject], - [Number(v.coercibleObject), v.coercibleObject], - [String(Number(v.coercibleObject)), v.coercibleObject] - ]; - forEach(pairs, function (pair) { - var a = pair[0]; - var b = pair[1]; - st.equal(ES['Strict Equality Comparison'](a, b), a === b, debug(a) + ' === ' + debug(b)); - st.equal(ES['Strict Equality Comparison'](b, a), b === a, debug(b) + ' === ' + debug(a)); - }); - st.end(); - }); - - t.end(); - }); - - test('Abstract Relational Comparison', function (t) { - t.test('at least one operand is NaN', function (st) { - st.equal(ES['Abstract Relational Comparison'](NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined'); - st.equal(ES['Abstract Relational Comparison']({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined'); - st.equal(ES['Abstract Relational Comparison'](NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined'); - st.equal(ES['Abstract Relational Comparison']({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined'); - st.end(); - }); - - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { ES['Abstract Relational Comparison'](3, 4, nonBoolean); }, - TypeError, - debug(nonBoolean) + ' is not a Boolean' - ); - }); - - forEach(v.zeroes, function (zero) { - t.equal(ES['Abstract Relational Comparison'](zero, 1, true), true, 'LeftFirst: ' + debug(zero) + ' is less than 1'); - t.equal(ES['Abstract Relational Comparison'](zero, 1, false), true, '!LeftFirst: ' + debug(zero) + ' is less than 1'); - t.equal(ES['Abstract Relational Comparison'](1, zero, true), false, 'LeftFirst: 1 is not less than ' + debug(zero)); - t.equal(ES['Abstract Relational Comparison'](1, zero, false), false, '!LeftFirst: 1 is not less than ' + debug(zero)); - - t.equal(ES['Abstract Relational Comparison'](zero, zero, true), false, 'LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); - t.equal(ES['Abstract Relational Comparison'](zero, zero, false), false, '!LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); - }); - - t.equal(ES['Abstract Relational Comparison'](Infinity, -Infinity, true), false, 'LeftFirst: ∞ is not less than -∞'); - t.equal(ES['Abstract Relational Comparison'](Infinity, -Infinity, false), false, '!LeftFirst: ∞ is not less than -∞'); - t.equal(ES['Abstract Relational Comparison'](-Infinity, Infinity, true), true, 'LeftFirst: -∞ is less than ∞'); - t.equal(ES['Abstract Relational Comparison'](-Infinity, Infinity, false), true, '!LeftFirst: -∞ is less than ∞'); - t.equal(ES['Abstract Relational Comparison'](-Infinity, 0, true), true, 'LeftFirst: -∞ is less than +0'); - t.equal(ES['Abstract Relational Comparison'](-Infinity, 0, false), true, '!LeftFirst: -∞ is less than +0'); - t.equal(ES['Abstract Relational Comparison'](0, -Infinity, true), false, 'LeftFirst: +0 is not less than -∞'); - t.equal(ES['Abstract Relational Comparison'](0, -Infinity, false), false, '!LeftFirst: +0 is not less than -∞'); - - t.equal(ES['Abstract Relational Comparison'](3, 4, true), true, 'LeftFirst: 3 is less than 4'); - t.equal(ES['Abstract Relational Comparison'](4, 3, true), false, 'LeftFirst: 3 is not less than 4'); - t.equal(ES['Abstract Relational Comparison'](3, 4, false), true, '!LeftFirst: 3 is less than 4'); - t.equal(ES['Abstract Relational Comparison'](4, 3, false), false, '!LeftFirst: 3 is not less than 4'); - - t.equal(ES['Abstract Relational Comparison']('3', '4', true), true, 'LeftFirst: "3" is less than "4"'); - t.equal(ES['Abstract Relational Comparison']('4', '3', true), false, 'LeftFirst: "3" is not less than "4"'); - t.equal(ES['Abstract Relational Comparison']('3', '4', false), true, '!LeftFirst: "3" is less than "4"'); - t.equal(ES['Abstract Relational Comparison']('4', '3', false), false, '!LeftFirst: "3" is not less than "4"'); - - t.equal(ES['Abstract Relational Comparison']('a', 'abc', true), true, 'LeftFirst: "a" is less than "abc"'); - t.equal(ES['Abstract Relational Comparison']('abc', 'a', true), false, 'LeftFirst: "abc" is not less than "a"'); - t.equal(ES['Abstract Relational Comparison']('a', 'abc', false), true, '!LeftFirst: "a" is less than "abc"'); - t.equal(ES['Abstract Relational Comparison']('abc', 'a', false), false, '!LeftFirst: "abc" is not less than "a"'); - - t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42'); - t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object'); - t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42'); - t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object'); - - t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"'); - t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object'); - t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"'); - t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object'); - - t.end(); - }); - - test('SecFromTime', function (t) { - var now = new Date(); - t.equal(ES.SecFromTime(now.getTime()), now.getUTCSeconds(), 'second from Date timestamp matches getUTCSeconds'); - t.end(); - }); - - test('MinFromTime', function (t) { - var now = new Date(); - t.equal(ES.MinFromTime(now.getTime()), now.getUTCMinutes(), 'minute from Date timestamp matches getUTCMinutes'); - t.end(); - }); - - test('HourFromTime', function (t) { - var now = new Date(); - t.equal(ES.HourFromTime(now.getTime()), now.getUTCHours(), 'hour from Date timestamp matches getUTCHours'); - t.end(); - }); - - test('msFromTime', function (t) { - var now = new Date(); - t.equal(ES.msFromTime(now.getTime()), now.getUTCMilliseconds(), 'ms from Date timestamp matches getUTCMilliseconds'); - t.end(); - }); - - var msPerSecond = 1e3; - var msPerMinute = 60 * msPerSecond; - var msPerHour = 60 * msPerMinute; - var msPerDay = 24 * msPerHour; - - test('Day', function (t) { - var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5); - var add = 2.5; - var later = new Date(time + (add * msPerDay)); - - t.equal(ES.Day(later.getTime()), ES.Day(time) + Math.floor(add), 'adding 2.5 days worth of ms, gives a Day delta of 2'); - t.end(); - }); - - test('DayFromYear', function (t) { - t.equal(ES.DayFromYear(2021) - ES.DayFromYear(2020), 366, '2021 is a leap year, has 366 days'); - t.equal(ES.DayFromYear(2020) - ES.DayFromYear(2019), 365, '2020 is not a leap year, has 365 days'); - t.equal(ES.DayFromYear(2019) - ES.DayFromYear(2018), 365, '2019 is not a leap year, has 365 days'); - t.equal(ES.DayFromYear(2018) - ES.DayFromYear(2017), 365, '2018 is not a leap year, has 365 days'); - t.equal(ES.DayFromYear(2017) - ES.DayFromYear(2016), 366, '2017 is a leap year, has 366 days'); - - t.end(); - }); - - test('TimeWithinDay', function (t) { - var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5); - var add = 2.5; - var later = new Date(time + (add * msPerDay)); - - t.equal(ES.TimeWithinDay(later.getTime()), ES.TimeWithinDay(time) + (0.5 * msPerDay), 'adding 2.5 days worth of ms, gives a TimeWithinDay delta of +0.5'); - t.end(); - }); - - test('TimeFromYear', function (t) { - for (var i = 1900; i < 2100; i += 1) { - t.equal(ES.TimeFromYear(i), Date.UTC(i, 0, 1), 'TimeFromYear matches a Date object’s year: ' + i); - } - t.end(); - }); - - test('YearFromTime', function (t) { - for (var i = 1900; i < 2100; i += 1) { - t.equal(ES.YearFromTime(Date.UTC(i, 0, 1)), i, 'YearFromTime matches a Date object’s year on 1/1: ' + i); - t.equal(ES.YearFromTime(Date.UTC(i, 10, 1)), i, 'YearFromTime matches a Date object’s year on 10/1: ' + i); - } - t.end(); - }); - - test('WeekDay', function (t) { - var now = new Date(); - var today = now.getUTCDay(); - for (var i = 0; i < 7; i += 1) { - var weekDay = ES.WeekDay(now.getTime() + (i * msPerDay)); - t.equal(weekDay, (today + i) % 7, i + ' days after today (' + today + '), WeekDay is ' + weekDay); - } - t.end(); - }); - - test('DaysInYear', function (t) { - t.equal(ES.DaysInYear(2021), 365, '2021 is not a leap year'); - t.equal(ES.DaysInYear(2020), 366, '2020 is a leap year'); - t.equal(ES.DaysInYear(2019), 365, '2019 is not a leap year'); - t.equal(ES.DaysInYear(2018), 365, '2018 is not a leap year'); - t.equal(ES.DaysInYear(2017), 365, '2017 is not a leap year'); - t.equal(ES.DaysInYear(2016), 366, '2016 is a leap year'); - t.equal(ES.DaysInYear(2000), 366, '2000 is a leap year'); - t.equal(ES.DaysInYear(1900), 365, '1900 is not a leap year'); - - t.end(); - }); - - test('InLeapYear', function (t) { - t.equal(ES.InLeapYear(Date.UTC(2021, 0, 1)), 0, '2021 is not a leap year'); - t.equal(ES.InLeapYear(Date.UTC(2020, 0, 1)), 1, '2020 is a leap year'); - t.equal(ES.InLeapYear(Date.UTC(2019, 0, 1)), 0, '2019 is not a leap year'); - t.equal(ES.InLeapYear(Date.UTC(2018, 0, 1)), 0, '2018 is not a leap year'); - t.equal(ES.InLeapYear(Date.UTC(2017, 0, 1)), 0, '2017 is not a leap year'); - t.equal(ES.InLeapYear(Date.UTC(2016, 0, 1)), 1, '2016 is a leap year'); - - t.end(); - }); - - test('DayWithinYear', function (t) { - t.equal(ES.DayWithinYear(Date.UTC(2019, 0, 1)), 0, '1/1 is the 1st day'); - t.equal(ES.DayWithinYear(Date.UTC(2019, 11, 31)), 364, '12/31 is the 365th day in a non leap year'); - t.equal(ES.DayWithinYear(Date.UTC(2016, 11, 31)), 365, '12/31 is the 366th day in a leap year'); - - t.end(); - }); - - test('MonthFromTime', function (t) { - t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 1)), 0, 'non-leap: 1/1 gives January'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 31)), 0, 'non-leap: 1/31 gives January'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 1)), 1, 'non-leap: 2/1 gives February'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 28)), 1, 'non-leap: 2/28 gives February'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 29)), 2, 'non-leap: 2/29 gives March'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 1)), 2, 'non-leap: 3/1 gives March'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 31)), 2, 'non-leap: 3/31 gives March'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 1)), 3, 'non-leap: 4/1 gives April'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 30)), 3, 'non-leap: 4/30 gives April'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 1)), 4, 'non-leap: 5/1 gives May'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 31)), 4, 'non-leap: 5/31 gives May'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 1)), 5, 'non-leap: 6/1 gives June'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 30)), 5, 'non-leap: 6/30 gives June'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 1)), 6, 'non-leap: 7/1 gives July'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 31)), 6, 'non-leap: 7/31 gives July'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 1)), 7, 'non-leap: 8/1 gives August'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 30)), 7, 'non-leap: 8/30 gives August'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 1)), 8, 'non-leap: 9/1 gives September'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 30)), 8, 'non-leap: 9/30 gives September'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 1)), 9, 'non-leap: 10/1 gives October'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 31)), 9, 'non-leap: 10/31 gives October'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 1)), 10, 'non-leap: 11/1 gives November'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 30)), 10, 'non-leap: 11/30 gives November'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 1)), 11, 'non-leap: 12/1 gives December'); - t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 31)), 11, 'non-leap: 12/31 gives December'); - - t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 1)), 0, 'leap: 1/1 gives January'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 31)), 0, 'leap: 1/31 gives January'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 1)), 1, 'leap: 2/1 gives February'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 28)), 1, 'leap: 2/28 gives February'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 29)), 1, 'leap: 2/29 gives February'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 1)), 2, 'leap: 3/1 gives March'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 31)), 2, 'leap: 3/31 gives March'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 1)), 3, 'leap: 4/1 gives April'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 30)), 3, 'leap: 4/30 gives April'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 1)), 4, 'leap: 5/1 gives May'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 31)), 4, 'leap: 5/31 gives May'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 1)), 5, 'leap: 6/1 gives June'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 30)), 5, 'leap: 6/30 gives June'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 1)), 6, 'leap: 7/1 gives July'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 31)), 6, 'leap: 7/31 gives July'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 1)), 7, 'leap: 8/1 gives August'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 30)), 7, 'leap: 8/30 gives August'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 1)), 8, 'leap: 9/1 gives September'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 30)), 8, 'leap: 9/30 gives September'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 1)), 9, 'leap: 10/1 gives October'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 31)), 9, 'leap: 10/31 gives October'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 1)), 10, 'leap: 11/1 gives November'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 30)), 10, 'leap: 11/30 gives November'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 1)), 11, 'leap: 12/1 gives December'); - t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 31)), 11, 'leap: 12/31 gives December'); - t.end(); - }); - - test('DateFromTime', function (t) { - var i; - for (i = 1; i <= 28; i += 1) { - t.equal(ES.DateFromTime(Date.UTC(2019, 1, i)), i, '2019.02.' + i + ' is date ' + i); - } - for (i = 1; i <= 29; i += 1) { - t.equal(ES.DateFromTime(Date.UTC(2016, 1, i)), i, '2016.02.' + i + ' is date ' + i); - } - for (i = 1; i <= 30; i += 1) { - t.equal(ES.DateFromTime(Date.UTC(2019, 2, i)), i, '2019.03.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 3, i)), i, '2019.04.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 5, i)), i, '2019.06.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 7, i)), i, '2019.08.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 8, i)), i, '2019.09.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 10, i)), i, '2019.11.' + i + ' is date ' + i); - } - for (i = 1; i <= 31; i += 1) { - t.equal(ES.DateFromTime(Date.UTC(2019, 0, i)), i, '2019.01.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 4, i)), i, '2019.05.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 6, i)), i, '2019.07.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 9, i)), i, '2019.10.' + i + ' is date ' + i); - t.equal(ES.DateFromTime(Date.UTC(2019, 11, i)), i, '2019.12.' + i + ' is date ' + i); - } - t.end(); - }); - - test('MakeDay', function (t) { - forEach([NaN, Infinity, -Infinity], function (nonFiniteNumber) { - t.equal(ES.MakeDay(nonFiniteNumber, 0, 0), NaN, 'year: ' + debug(nonFiniteNumber) + ' is not finite'); - t.equal(ES.MakeDay(0, nonFiniteNumber, 0), NaN, 'month: ' + debug(nonFiniteNumber) + ' is not finite'); - t.equal(ES.MakeDay(0, 0, nonFiniteNumber), NaN, 'date: ' + debug(nonFiniteNumber) + ' is not finite'); - }); - - var day2015 = 16687; - t.equal(ES.MakeDay(2015, 8, 9), day2015, '2015.09.09 is day 16687'); - var day2016 = day2015 + 366; // 2016 is a leap year - t.equal(ES.MakeDay(2016, 8, 9), day2016, '2015.09.09 is day 17053'); - var day2017 = day2016 + 365; - t.equal(ES.MakeDay(2017, 8, 9), day2017, '2017.09.09 is day 17418'); - var day2018 = day2017 + 365; - t.equal(ES.MakeDay(2018, 8, 9), day2018, '2018.09.09 is day 17783'); - var day2019 = day2018 + 365; - t.equal(ES.MakeDay(2019, 8, 9), day2019, '2019.09.09 is day 18148'); - - t.end(); - }); - - test('MakeDate', function (t) { - forEach(v.infinities.concat(NaN), function (nonFiniteNumber) { - t.equal(ES.MakeDate(nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `day`'); - t.equal(ES.MakeDate(0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`'); - }); - t.equal(ES.MakeDate(0, 0), 0, 'zero day and zero time is zero date'); - t.equal(ES.MakeDate(0, 123), 123, 'zero day and nonzero time is a date of the "time"'); - t.equal(ES.MakeDate(1, 0), msPerDay, 'day of 1 and zero time is a date of "ms per day"'); - t.equal(ES.MakeDate(3, 0), 3 * msPerDay, 'day of 3 and zero time is a date of thrice "ms per day"'); - t.equal(ES.MakeDate(1, 123), msPerDay + 123, 'day of 1 and nonzero time is a date of "ms per day" plus the "time"'); - t.equal(ES.MakeDate(3, 123), (3 * msPerDay) + 123, 'day of 3 and nonzero time is a date of thrice "ms per day" plus the "time"'); - - t.end(); - }); - - test('MakeTime', function (t) { - forEach(v.infinities.concat(NaN), function (nonFiniteNumber) { - t.equal(ES.MakeTime(nonFiniteNumber, 0, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `hour`'); - t.equal(ES.MakeTime(0, nonFiniteNumber, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `min`'); - t.equal(ES.MakeTime(0, 0, nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `sec`'); - t.equal(ES.MakeTime(0, 0, 0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `ms`'); - }); - - t.equal( - ES.MakeTime(1.2, 2.3, 3.4, 4.5), - (1 * msPerHour) + (2 * msPerMinute) + (3 * msPerSecond) + 4, - 'all numbers are converted to integer, multiplied by the right number of ms, and summed' - ); - - t.end(); - }); - - test('TimeClip', function (t) { - forEach(v.infinities.concat(NaN), function (nonFiniteNumber) { - t.equal(ES.TimeClip(nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`'); - }); - t.equal(ES.TimeClip(8.64e15 + 1), NaN, '8.64e15 is the largest magnitude considered "finite"'); - t.equal(ES.TimeClip(-8.64e15 - 1), NaN, '-8.64e15 is the largest magnitude considered "finite"'); - - forEach(v.zeroes.concat([-10, 10, +new Date()]), function (time) { - t.looseEqual(ES.TimeClip(time), time, debug(time) + ' is a time of ' + debug(time)); - }); - - t.end(); - }); - - test('modulo', function (t) { - t.equal(3 % 2, 1, '+3 % 2 is +1'); - t.equal(ES.modulo(3, 2), 1, '+3 mod 2 is +1'); - - t.equal(-3 % 2, -1, '-3 % 2 is -1'); - t.equal(ES.modulo(-3, 2), 1, '-3 mod 2 is +1'); - t.end(); - }); -}; - -var es2015 = function ES2015(ES, ops, expectedMissing, skips) { - es5(ES, ops, expectedMissing, assign(assign({}, skips), { - CheckObjectCoercible: true, - FromPropertyDescriptor: true, - ToNumber: true, - ToString: true, - Type: true - })); - var test = makeTest(skips); - - var getNamelessFunction = function () { - var f = Object(function () {}); - try { - delete f.name; - } catch (e) { /**/ } - return f; - }; - - test('AdvanceStringIndex', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.AdvanceStringIndex(nonString); }, - TypeError, - '"S" argument must be a String; ' + debug(nonString) + ' is not' - ); - }); - - var notInts = v.nonNumbers.concat( - v.nonIntegerNumbers, - v.infinities, - [NaN, [], new Date(), Math.pow(2, 53), -1] - ); - forEach(notInts, function (nonInt) { - t['throws']( - function () { ES.AdvanceStringIndex('abc', nonInt); }, - TypeError, - '"index" argument must be an integer, ' + debug(nonInt) + ' is not.' - ); - }); - - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { ES.AdvanceStringIndex('abc', 0, nonBoolean); }, - TypeError, - debug(nonBoolean) + ' is not a Boolean' - ); - }); - - var str = 'a' + wholePoo + 'c'; - - t.test('non-unicode mode', function (st) { - for (var i = 0; i < str.length + 2; i += 1) { - st.equal(ES.AdvanceStringIndex(str, i, false), i + 1, i + ' advances to ' + (i + 1)); - } - - st.end(); - }); - - t.test('unicode mode', function (st) { - st.equal(ES.AdvanceStringIndex(str, 0, true), 1, '0 advances to 1'); - st.equal(ES.AdvanceStringIndex(str, 1, true), 3, '1 advances to 3'); - st.equal(ES.AdvanceStringIndex(str, 2, true), 3, '2 advances to 3'); - st.equal(ES.AdvanceStringIndex(str, 3, true), 4, '3 advances to 4'); - st.equal(ES.AdvanceStringIndex(str, 4, true), 5, '4 advances to 5'); - - st.end(); - }); - - t.test('lone surrogates', function (st) { - var halfPoo = 'a' + leadingPoo + 'c'; - - st.equal(ES.AdvanceStringIndex(halfPoo, 0, true), 1, '0 advances to 1'); - st.equal(ES.AdvanceStringIndex(halfPoo, 1, true), 2, '1 advances to 2'); - st.equal(ES.AdvanceStringIndex(halfPoo, 2, true), 3, '2 advances to 3'); - st.equal(ES.AdvanceStringIndex(halfPoo, 3, true), 4, '3 advances to 4'); - - st.end(); - }); - - t.test('surrogate pairs', function (st) { - var lowestPair = String.fromCharCode('0xD800') + String.fromCharCode('0xDC00'); - var highestPair = String.fromCharCode('0xDBFF') + String.fromCharCode('0xDFFF'); - - st.equal(ES.AdvanceStringIndex(lowestPair, 0, true), 2, 'lowest surrogate pair, 0 -> 2'); - st.equal(ES.AdvanceStringIndex(highestPair, 0, true), 2, 'highest surrogate pair, 0 -> 2'); - st.equal(ES.AdvanceStringIndex(wholePoo, 0, true), 2, 'poop, 0 -> 2'); - - st.end(); - }); - - t.end(); - }); - - test('ArrayCreate', function (t) { - forEach(v.nonIntegerNumbers.concat([-1]), function (nonIntegerNumber) { - t['throws']( - function () { ES.ArrayCreate(nonIntegerNumber); }, - TypeError, - 'length must be an integer number >= 0' - ); - }); - - t['throws']( - function () { ES.ArrayCreate(Math.pow(2, 32)); }, - RangeError, - 'length must be < 2**32' - ); - - t.deepEqual(ES.ArrayCreate(-0), [], 'length of -0 creates an empty array'); - t.deepEqual(ES.ArrayCreate(0), [], 'length of +0 creates an empty array'); - // eslint-disable-next-line no-sparse-arrays, comma-spacing - t.deepEqual(ES.ArrayCreate(1), [,], 'length of 1 creates a sparse array of length 1'); - // eslint-disable-next-line no-sparse-arrays, comma-spacing - t.deepEqual(ES.ArrayCreate(2), [,,], 'length of 2 creates a sparse array of length 2'); - - t.test('proto argument', { skip: !$setProto }, function (st) { - var fakeProto = { - push: { toString: function () { return 'not array push'; } } - }; - st.equal(ES.ArrayCreate(0, fakeProto).push, fakeProto.push, 'passing the proto argument works'); - st.end(); - }); - - t.end(); - }); - - test('ArraySetLength', function (t) { - forEach(v.primitives.concat(v.objects), function (nonArray) { - t['throws']( - function () { ES.ArraySetLength(nonArray, { '[[Value]]': 0 }); }, - TypeError, - 'A: ' + debug(nonArray) + ' is not an Array' - ); - }); - - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.ArraySetLength([], primitive); }, - TypeError, - 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t.test('making length nonwritable', { skip: !getOwnPropertyDescriptor }, function (st) { - var a = []; - ES.ArraySetLength(a, { '[[Writable]]': false }); - st.deepEqual( - getOwnPropertyDescriptor(a, 'length'), - { - configurable: false, - enumerable: false, - value: 0, - writable: false - }, - 'without a value, length becomes nonwritable' - ); - st.end(); - }); - - forEach([-1, Math.pow(2, 32)].concat(v.nonIntegerNumbers), function (nonLength) { - t['throws']( - function () { ES.ArraySetLength([], { '[[Value]]': nonLength }); }, - RangeError, - 'a non-integer, negative, or > (2**31 - 1) is not a valid length: ' + debug(nonLength) - ); - }); - - var arr = []; - ES.ArraySetLength(arr, { '[[Value]]': 7 }); - t.equal(arr.length, 7, 'array now has a length of 7'); - - t.end(); - }); - - test('ArraySpeciesCreate', function (t) { - t.test('errors', function (st) { - var testNonNumber = function (nonNumber) { - st['throws']( - function () { ES.ArraySpeciesCreate([], nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a number' - ); - }; - forEach(v.nonNumbers, testNonNumber); - - st['throws']( - function () { ES.ArraySpeciesCreate([], -1); }, - TypeError, - '-1 is not >= 0' - ); - st['throws']( - function () { ES.ArraySpeciesCreate([], -Infinity); }, - TypeError, - '-Infinity is not >= 0' - ); - - var testNonIntegers = function (nonInteger) { - st['throws']( - function () { ES.ArraySpeciesCreate([], nonInteger); }, - TypeError, - debug(nonInteger) + ' is not an integer' - ); - }; - forEach(v.nonIntegerNumbers, testNonIntegers); - - st.end(); - }); - - t.test('works with a non-array', function (st) { - forEach(v.objects.concat(v.primitives), function (nonArray) { - var arr = ES.ArraySpeciesCreate(nonArray, 0); - st.ok(ES.IsArray(arr), 'is an array'); - st.equal(arr.length, 0, 'length is correct'); - st.equal(arr.constructor, Array, 'constructor is correct'); - }); - - st.end(); - }); - - t.test('works with a normal array', function (st) { - var len = 2; - var orig = [1, 2, 3]; - var arr = ES.ArraySpeciesCreate(orig, len); - - st.ok(ES.IsArray(arr), 'is an array'); - st.equal(arr.length, len, 'length is correct'); - st.equal(arr.constructor, orig.constructor, 'constructor is correct'); - - st.end(); - }); - - t.test('-0 length produces +0 length', function (st) { - var len = -0; - st.equal(len, -0, '-0 is negative zero'); - st.notEqual(len, 0, '-0 is not positive zero'); - - var orig = [1, 2, 3]; - var arr = ES.ArraySpeciesCreate(orig, len); - - st.equal(ES.IsArray(arr), true); - st.equal(arr.length, 0); - st.equal(arr.constructor, orig.constructor); - - st.end(); - }); - - t.test('works with species construtor', { skip: !hasSpecies }, function (st) { - var sentinel = {}; - var Foo = function Foo(len) { - this.length = len; - this.sentinel = sentinel; - }; - var Bar = getArraySubclassWithSpeciesConstructor(Foo); - var bar = new Bar(); - - st.equal(ES.IsArray(bar), true, 'Bar instance is an array'); - - var arr = ES.ArraySpeciesCreate(bar, 3); - st.equal(arr.constructor, Foo, 'result used species constructor'); - st.equal(arr.length, 3, 'length property is correct'); - st.equal(arr.sentinel, sentinel, 'Foo constructor was exercised'); - - st.end(); - }); - - t.test('works with null species constructor', { skip: !hasSpecies }, function (st) { - var Bar = getArraySubclassWithSpeciesConstructor(null); - var bar = new Bar(); - - st.equal(ES.IsArray(bar), true, 'Bar instance is an array'); - - var arr = ES.ArraySpeciesCreate(bar, 3); - st.equal(arr.constructor, Array, 'result used default constructor'); - st.equal(arr.length, 3, 'length property is correct'); - - st.end(); - }); - - t.test('works with undefined species constructor', { skip: !hasSpecies }, function (st) { - var Bar = getArraySubclassWithSpeciesConstructor(); - var bar = new Bar(); - - st.equal(ES.IsArray(bar), true, 'Bar instance is an array'); - - var arr = ES.ArraySpeciesCreate(bar, 3); - st.equal(arr.constructor, Array, 'result used default constructor'); - st.equal(arr.length, 3, 'length property is correct'); - - st.end(); - }); - - t.test('throws with object non-construtor species constructor', { skip: !hasSpecies }, function (st) { - forEach(v.objects, function (obj) { - var Bar = getArraySubclassWithSpeciesConstructor(obj); - var bar = new Bar(); - - st.equal(ES.IsArray(bar), true, 'Bar instance is an array'); - - st['throws']( - function () { ES.ArraySpeciesCreate(bar, 3); }, - TypeError, - debug(obj) + ' is not a constructor' - ); - }); - - st.end(); - }); - - t.end(); - }); - - test('Call', function (t) { - var receiver = {}; - var notFuncs = v.nonFunctions.concat([/a/g, new RegExp('a', 'g')]); - t.plan(notFuncs.length + v.nonArrays.length + 5); - - forEach(notFuncs, function (notFunc) { - t['throws']( - function () { return ES.Call(notFunc, receiver); }, - TypeError, - debug(notFunc) + ' (' + typeof notFunc + ') is not callable' - ); - }); - - forEach(v.nonArrays, function (nonArray) { - t['throws']( - function () { ES.Call(Function.prototype, null, nonArray); }, - TypeError, - debug(nonArray) + ' is not an array' - ); - }); - - ES.Call( - function (a, b) { - t.equal(this, receiver, 'context matches expected'); - t.deepEqual([a, b], [1, 2], 'named args are correct'); - t.equal(arguments.length, 3, 'extra argument was passed'); - t.equal(arguments[2], 3, 'extra argument was correct'); - }, - receiver, - [1, 2, 3] - ); - - t.test('Call doesn’t use func.apply', function (st) { - st.plan(4); - - var bad = function (a, b) { - st.equal(this, receiver, 'context matches expected'); - st.deepEqual([a, b], [1, 2], 'named args are correct'); - st.equal(arguments.length, 3, 'extra argument was passed'); - st.equal(arguments[2], 3, 'extra argument was correct'); - }; - - defineProperty(bad, 'apply', { - value: function () { - st.fail('bad.apply shouldn’t get called'); - } - }); - - ES.Call(bad, receiver, [1, 2, 3]); - st.end(); - }); - - t.end(); - }); - - test('CanonicalNumericIndexString', function (t) { - var throwsOnNonString = function (notString) { - t['throws']( - function () { return ES.CanonicalNumericIndexString(notString); }, - TypeError, - debug(notString) + ' is not a string' - ); - }; - forEach(v.objects.concat(v.numbers), throwsOnNonString); - t.equal(ES.CanonicalNumericIndexString('-0'), -0, '"-0" returns -0'); - for (var i = -50; i < 50; i += 10) { - t.equal(i, ES.CanonicalNumericIndexString(String(i)), '"' + i + '" returns ' + i); - t.equal(undefined, ES.CanonicalNumericIndexString(String(i) + 'a'), '"' + i + 'a" returns undefined'); - } - t.end(); - }); - - test('CompletePropertyDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.CompletePropertyDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - var generic = v.genericDescriptor(); - t.deepEqual( - ES.CompletePropertyDescriptor(generic), - { - '[[Configurable]]': !!generic['[[Configurable]]'], - '[[Enumerable]]': !!generic['[[Enumerable]]'], - '[[Value]]': undefined, - '[[Writable]]': false - }, - 'completes a Generic Descriptor' - ); - - var data = v.dataDescriptor(); - t.deepEqual( - ES.CompletePropertyDescriptor(data), - { - '[[Configurable]]': !!data['[[Configurable]]'], - '[[Enumerable]]': false, - '[[Value]]': data['[[Value]]'], - '[[Writable]]': !!data['[[Writable]]'] - }, - 'completes a Data Descriptor' - ); - - var accessor = v.accessorDescriptor(); - t.deepEqual( - ES.CompletePropertyDescriptor(accessor), - { - '[[Get]]': accessor['[[Get]]'], - '[[Enumerable]]': !!accessor['[[Enumerable]]'], - '[[Configurable]]': !!accessor['[[Configurable]]'], - '[[Set]]': undefined - }, - 'completes an Accessor Descriptor' - ); - - var mutator = v.mutatorDescriptor(); - t.deepEqual( - ES.CompletePropertyDescriptor(mutator), - { - '[[Set]]': mutator['[[Set]]'], - '[[Enumerable]]': !!mutator['[[Enumerable]]'], - '[[Configurable]]': !!mutator['[[Configurable]]'], - '[[Get]]': undefined - }, - 'completes a mutator Descriptor' - ); - - t['throws']( - function () { ES.CompletePropertyDescriptor(v.bothDescriptor()); }, - TypeError, - 'data and accessor descriptors are mutually exclusive' - ); - - t.end(); - }); - - test('CreateDataProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.CreateDataProperty(primitive); }, - TypeError, - debug(primitive) + ' is not an object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.CreateDataProperty({}, nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a property key' - ); - }); - - var sentinel = { id: 'sentinel' }; - var secondSentinel = { id: 'second sentinel' }; - forEach(v.propertyKeys, function (propertyKey) { - var obj = {}; - var status = ES.CreateDataProperty(obj, propertyKey, sentinel); - t.equal(status, true, 'status is true'); - t.equal( - obj[propertyKey], - sentinel, - debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' - ); - var secondStatus = ES.CreateDataProperty(obj, propertyKey, secondSentinel); - t.equal(secondStatus, true, 'second status is true'); - t.equal( - obj[propertyKey], - secondSentinel, - debug(secondSentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' - ); - - t.test('with defineProperty', { skip: !defineProperty.oDP }, function (st) { - var nonWritable = defineProperty({}, propertyKey, { configurable: true, writable: false }); - - var nonWritableStatus = ES.CreateDataProperty(nonWritable, propertyKey, sentinel); - st.equal(nonWritableStatus, false, 'create data property failed'); - st.notEqual( - nonWritable[propertyKey], - sentinel, - debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonwritable' - ); - - var nonConfigurable = defineProperty({}, propertyKey, { configurable: false, writable: true }); - - var nonConfigurableStatus = ES.CreateDataProperty(nonConfigurable, propertyKey, sentinel); - st.equal(nonConfigurableStatus, false, 'create data property failed'); - st.notEqual( - nonConfigurable[propertyKey], - sentinel, - debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonconfigurable' - ); - st.end(); - }); - }); - - t.end(); - }); - - test('CreateDataPropertyOrThrow', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.CreateDataPropertyOrThrow(primitive); }, - TypeError, - debug(primitive) + ' is not an object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.CreateDataPropertyOrThrow({}, nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a property key' - ); - }); - - var sentinel = {}; - forEach(v.propertyKeys, function (propertyKey) { - var obj = {}; - var status = ES.CreateDataPropertyOrThrow(obj, propertyKey, sentinel); - t.equal(status, true, 'status is true'); - t.equal( - obj[propertyKey], - sentinel, - debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' - ); - - if (typeof Object.preventExtensions === 'function') { - var notExtensible = {}; - Object.preventExtensions(notExtensible); - - t['throws']( - function () { ES.CreateDataPropertyOrThrow(notExtensible, propertyKey, sentinel); }, - TypeError, - 'can not install ' + debug(propertyKey) + ' on non-extensible object' - ); - t.notEqual( - notExtensible[propertyKey], - sentinel, - debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object' - ); - } - }); - - t.end(); - }); - - test('CreateListFromArrayLike', function (t) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { ES.CreateListFromArrayLike(nonObject); }, - TypeError, - debug(nonObject) + ' is not an Object' - ); - }); - forEach(v.nonArrays, function (nonArray) { - t['throws']( - function () { ES.CreateListFromArrayLike({}, nonArray); }, - TypeError, - debug(nonArray) + ' is not an Array' - ); - }); - - t.deepEqual( - ES.CreateListFromArrayLike({ length: 2, 0: 'a', 1: 'b', 2: 'c' }), - ['a', 'b'], - 'arraylike stops at the length' - ); - - t.end(); - }); - - test('CreateHTML', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.CreateHTML('', nonString, '', ''); }, - TypeError, - 'tag: ' + debug(nonString) + ' is not a String' - ); - t['throws']( - function () { ES.CreateHTML('', '', nonString, ''); }, - TypeError, - 'attribute: ' + debug(nonString) + ' is not a String' - ); - }); - - t.equal( - ES.CreateHTML( - { toString: function () { return 'the string'; } }, - 'some HTML tag!', - '' - ), - 'the string', - 'works with an empty string attribute value' - ); - - t.equal( - ES.CreateHTML( - { toString: function () { return 'the string'; } }, - 'some HTML tag!', - 'attr', - 'value "with quotes"' - ), - 'the string', - 'works with an attribute, and a value with quotes' - ); - - t.end(); - }); - - test('CreateMethodProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.CreateMethodProperty(primitive, 'key'); }, - TypeError, - 'O must be an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.CreateMethodProperty({}, nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.test('defines correctly', function (st) { - var obj = {}; - var key = 'the key'; - var value = { foo: 'bar' }; - - st.equal(ES.CreateMethodProperty(obj, key, value), true, 'defines property successfully'); - st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) { - s2t.deepEqual( - getOwnPropertyDescriptor(obj, key), - { - configurable: true, - enumerable: false, - value: value, - writable: true - }, - 'sets the correct property descriptor' - ); - - s2t.end(); - }); - st.equal(obj[key], value, 'sets the correct value'); - - st.end(); - }); - - t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { - var obj = Object.freeze({ foo: 'bar' }); - st['throws']( - function () { ES.CreateMethodProperty(obj, 'foo', { value: 'baz' }); }, - TypeError, - 'nonconfigurable key can not be defined' - ); - - st.end(); - }); - - t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { - st['throws']( - function () { ES.CreateMethodProperty(function () {}, 'name', { value: 'baz' }); }, - TypeError, - 'nonconfigurable function name can not be defined' - ); - st.end(); - }); - - t.end(); - }); - - test('CreateIterResultObject', function (t) { - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { ES.CreateIterResultObject({}, nonBoolean); }, - TypeError, - '"done" argument must be a boolean; ' + debug(nonBoolean) + ' is not' - ); - }); - - var value = {}; - t.deepEqual( - ES.CreateIterResultObject(value, true), - { value: value, done: true }, - 'creates a "done" iteration result' - ); - t.deepEqual( - ES.CreateIterResultObject(value, false), - { value: value, done: false }, - 'creates a "not done" iteration result' - ); - - t.end(); - }); - - test('DefinePropertyOrThrow', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.DefinePropertyOrThrow(primitive, 'key', {}); }, - TypeError, - 'O must be an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.DefinePropertyOrThrow({}, nonPropertyKey, {}); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.test('defines correctly', function (st) { - var obj = {}; - var key = 'the key'; - var descriptor = { - configurable: true, - enumerable: false, - value: { foo: 'bar' }, - writable: true - }; - - st.equal(ES.DefinePropertyOrThrow(obj, key, descriptor), true, 'defines property successfully'); - st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) { - s2t.deepEqual( - getOwnPropertyDescriptor(obj, key), - descriptor, - 'sets the correct property descriptor' - ); - - s2t.end(); - }); - st.deepEqual(obj[key], descriptor.value, 'sets the correct value'); - - st.end(); - }); - - t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { - var obj = Object.freeze({ foo: 'bar' }); - st['throws']( - function () { - ES.DefinePropertyOrThrow(obj, 'foo', { configurable: true, value: 'baz' }); - }, - TypeError, - 'nonconfigurable key can not be defined' - ); - - st.end(); - }); - - t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { - st['throws']( - function () { - ES.DefinePropertyOrThrow(function () {}, 'name', { configurable: true, value: 'baz' }); - }, - TypeError, - 'nonconfigurable function name can not be defined' - ); - st.end(); - }); - - t.end(); - }); - - test('DeletePropertyOrThrow', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.DeletePropertyOrThrow(primitive, 'key', {}); }, - TypeError, - 'O must be an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.DeletePropertyOrThrow({}, nonPropertyKey, {}); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.test('defines correctly', function (st) { - var obj = { 'the key': 42 }; - var key = 'the key'; - - st.equal(ES.DeletePropertyOrThrow(obj, key), true, 'deletes property successfully'); - st.equal(key in obj, false, 'key is no longer in the object'); - - st.end(); - }); - - t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { - var obj = Object.freeze({ foo: 'bar' }); - st['throws']( - function () { ES.DeletePropertyOrThrow(obj, 'foo'); }, - TypeError, - 'nonconfigurable key can not be deleted' - ); - - st.end(); - }); - - t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { - st['throws']( - function () { ES.DeletePropertyOrThrow(function () {}, 'name'); }, - TypeError, - 'nonconfigurable function name can not be deleted' - ); - st.end(); - }); - - t.end(); - }); - - test('EnumerableOwnNames', function (t) { - var obj = testEnumerableOwnNames(t, function (O) { return ES.EnumerableOwnNames(O); }); - - t.deepEqual( - ES.EnumerableOwnNames(obj), - ['own'], - 'returns enumerable own names' - ); - - t.end(); - }); - - test('FromPropertyDescriptor', function (t) { - t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined'); - t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined'); - - forEach(v.nonUndefinedPrimitives, function (primitive) { - t['throws']( - function () { ES.FromPropertyDescriptor(primitive); }, - TypeError, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - var accessor = v.accessorDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(accessor), { - get: accessor['[[Get]]'], - enumerable: !!accessor['[[Enumerable]]'], - configurable: !!accessor['[[Configurable]]'] - }); - - var mutator = v.mutatorDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(mutator), { - set: mutator['[[Set]]'], - enumerable: !!mutator['[[Enumerable]]'], - configurable: !!mutator['[[Configurable]]'] - }); - var data = v.dataDescriptor(); - t.deepEqual(ES.FromPropertyDescriptor(data), { - value: data['[[Value]]'], - writable: data['[[Writable]]'] - }); - - t.deepEqual(ES.FromPropertyDescriptor(v.genericDescriptor()), { - enumerable: false, - configurable: true - }); - - var both = v.bothDescriptor(); - t['throws']( - function () { - ES.FromPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] }); - }, - TypeError, - 'data and accessor descriptors are mutually exclusive' - ); - - t.end(); - }); - - test('Get', function (t) { - t['throws'](function () { return ES.Get('a', 'a'); }, TypeError, 'Throws a TypeError if `O` is not an Object'); - t['throws'](function () { return ES.Get({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key'); - - var value = {}; - t.test('Symbols', { skip: !v.hasSymbols }, function (st) { - var sym = Symbol('sym'); - var obj = {}; - obj[sym] = value; - st.equal(ES.Get(obj, sym), value, 'returns property `P` if it exists on object `O`'); - st.end(); - }); - t.equal(ES.Get({ a: value }, 'a'), value, 'returns property `P` if it exists on object `O`'); - t.end(); - }); - - test('GetIterator', function (t) { - var arr = [1, 2]; - testIterator(t, ES.GetIterator(arr), arr); - - testIterator(t, ES.GetIterator('abc'), 'abc'.split('')); - - var sentinel = {}; - forEach(v.primitives, function (nonObject) { - var method = function () { - return nonObject; - }; - t['throws']( - function () { ES.GetIterator(sentinel, method); }, - TypeError, - debug(nonObject) + ' is not an Object; iterator method must return an Object' - ); - }); - - var i = 0; - var manualMethod = function () { - t.equal(this, sentinel, 'receiver is expected object'); - return { - next: function () { - var value = arr[i]; - i += 1; - return { - done: i > arr.length, - value: value - }; - } - }; - }; - testIterator(t, ES.GetIterator(sentinel, manualMethod), arr); - - t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) { - var m = new Map(); - m.set(1, 'a'); - m.set(2, 'b'); - - testIterator(st, ES.GetIterator(m), [[1, 'a'], [2, 'b']]); - - forEach(v.primitives, function (nonObject) { - var badIterable = {}; - badIterable[Symbol.iterator] = function () { - return nonObject; - }; - st['throws']( - function () { return ES.GetIterator(badIterable); }, - TypeError, - debug(nonObject) + ' is not an Object; iterator method must return an Object' - ); - }); - - st.end(); - }); - - t.end(); - }); - - test('GetMethod', function (t) { - t['throws'](function () { return ES.GetMethod({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key'); - t.equal(ES.GetMethod({}, 'a'), undefined, 'returns undefined in property is undefined'); - t.equal(ES.GetMethod({ a: null }, 'a'), undefined, 'returns undefined if property is null'); - t.equal(ES.GetMethod({ a: undefined }, 'a'), undefined, 'returns undefined if property is undefined'); - var obj = { a: function () {} }; - t['throws'](function () { ES.GetMethod({ a: 'b' }, 'a'); }, TypeError, 'throws TypeError if property exists and is not callable'); - t.equal(ES.GetMethod(obj, 'a'), obj.a, 'returns property if it is callable'); - t.end(); - }); - - test('GetOwnPropertyKeys', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.GetOwnPropertyKeys(primitive, 'String'); }, - TypeError, - 'O: ' + debug(primitive) + ' is not an Object' - ); - }); - - t['throws']( - function () { ES.GetOwnPropertyKeys({}, 'not string or symbol'); }, - TypeError, - 'Type: must be "String" or "Symbol"' - ); - - t.test('Symbols', { skip: !v.hasSymbols }, function (st) { - var O = { a: 1 }; - O[Symbol.iterator] = true; - var s = Symbol('test'); - defineProperty(O, s, { enumerable: false, value: true }); - - st.deepEqual( - ES.GetOwnPropertyKeys(O, 'Symbol'), - [Symbol.iterator, s], - 'works with Symbols, enumerable or not' - ); - - st.end(); - }); - - t.test('non-enumerable names', { skip: !defineProperty.oDP }, function (st) { - var O = { a: 1 }; - defineProperty(O, 'b', { enumerable: false, value: 2 }); - if (v.hasSymbols) { - O[Symbol.iterator] = true; - } - - st.deepEqual( - ES.GetOwnPropertyKeys(O, 'String').sort(), - ['a', 'b'].sort(), - 'works with Strings, enumerable or not' - ); - - st.end(); - }); - - t.deepEqual( - ES.GetOwnPropertyKeys({ a: 1, b: 2 }, 'String').sort(), - ['a', 'b'].sort(), - 'works with enumerable keys' - ); - - t.end(); - }); - - test('GetPrototypeFromConstructor', function (t) { - forEach(v.nonFunctions, function (nonFunction) { - t['throws']( - function () { ES.GetPrototypeFromConstructor(nonFunction, '%Array%'); }, - TypeError, - debug(nonFunction) + ' is not a constructor' - ); - }); - - forEach(arrowFns, function (arrowFn) { - t['throws']( - function () { ES.GetPrototypeFromConstructor(arrowFn, '%Array%'); }, - TypeError, - debug(arrowFn) + ' is not a constructor' - ); - }); - - var f = function () {}; - t.equal( - ES.GetPrototypeFromConstructor(f, '%Array.prototype%'), - f.prototype, - 'function with normal `prototype` property returns it' - ); - forEach([true, 'foo', 42], function (truthyPrimitive) { - f.prototype = truthyPrimitive; - t.equal( - ES.GetPrototypeFromConstructor(f, '%Array.prototype%'), - Array.prototype, - 'function with non-object `prototype` property (' + debug(truthyPrimitive) + ') returns default intrinsic' - ); - }); - - t.end(); - }); - - test('GetSubstitution', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.GetSubstitution(nonString, '', 0, [], ''); }, - TypeError, - '`matched`: ' + debug(nonString) + ' is not a String' - ); - - t['throws']( - function () { ES.GetSubstitution('', nonString, 0, [], ''); }, - TypeError, - '`str`: ' + debug(nonString) + ' is not a String' - ); - - t['throws']( - function () { ES.GetSubstitution('', '', 0, [], nonString); }, - TypeError, - '`replacement`: ' + debug(nonString) + ' is not a String' - ); - - if (canDistinguishSparseFromUndefined || typeof nonString !== 'undefined') { - t['throws']( - function () { ES.GetSubstitution('', '', 0, [nonString], ''); }, - TypeError, - '`captures`: ' + debug([nonString]) + ' is not an Array of strings' - ); - } - }); - - forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { - t['throws']( - function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], ''); }, - TypeError, - '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer' - ); - }); - - forEach(v.nonArrays, function (nonArray) { - t['throws']( - function () { ES.GetSubstitution('', '', 0, nonArray, ''); }, - TypeError, - '`captures`: ' + debug(nonArray) + ' is not an Array' - ); - }); - - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], '123'), - '123', - 'returns the substitution' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '$$2$'), - '$2$', - 'supports $$, and trailing $' - ); - - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$&<'), - '>abcdef<', - 'supports $&' - ); - - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$`<'), - '><', - 'supports $` at position 0' - ); - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], '>$`<'), - '>ab<', - 'supports $` at position > 0' - ); - - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 7, [], ">$'<"), - '><', - "supports $' at a position where there's less than `matched.length` chars left" - ); - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], ">$'<"), - '>ghi<', - "supports $' at a position where there's more than `matched.length` chars left" - ); - - for (var i = 0; i < 100; i += 1) { - var captures = []; - captures[i] = 'test'; - if (i > 0) { - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i + '<'), - '>undefined<', - 'supports $' + i + ' with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i), - '>undefined', - 'supports $' + i + ' at the end of the replacement, with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i + '<'), - '><', - 'supports $' + i + ' with a capture at that index' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i), - '>', - 'supports $' + i + ' at the end of the replacement, with a capture at that index' - ); - } - if (i < 10) { - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i + '<'), - i === 0 ? '><' : '>undefined<', - 'supports $0' + i + ' with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i), - i === 0 ? '>' : '>undefined', - 'supports $0' + i + ' at the end of the replacement, with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i + '<'), - '><', - 'supports $0' + i + ' with a capture at that index' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i), - '>', - 'supports $0' + i + ' at the end of the replacement, with a capture at that index' - ); - } - } - - t.end(); - }); - - test('GetV', function (t) { - t['throws'](function () { return ES.GetV({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key'); - var obj = { a: function () {} }; - t.equal(ES.GetV(obj, 'a'), obj.a, 'returns property if it exists'); - t.equal(ES.GetV(obj, 'b'), undefined, 'returns undefiend if property does not exist'); - t.end(); - }); - - test('HasOwnProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.HasOwnProperty(primitive, 'key'); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonKey) { - t['throws']( - function () { ES.HasOwnProperty({}, nonKey); }, - TypeError, - debug(nonKey) + ' is not a Property Key' - ); - }); - - t.equal(ES.HasOwnProperty({}, 'toString'), false, 'inherited properties are not own'); - t.equal( - ES.HasOwnProperty({ toString: 1 }, 'toString'), - true, - 'shadowed inherited own properties are own' - ); - t.equal(ES.HasOwnProperty({ a: 1 }, 'a'), true, 'own properties are own'); - - t.end(); - }); - - test('HasProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.HasProperty(primitive, 'key'); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonKey) { - t['throws']( - function () { ES.HasProperty({}, nonKey); }, - TypeError, - debug(nonKey) + ' is not a Property Key' - ); - }); - - t.equal(ES.HasProperty({}, 'nope'), false, 'object does not have nonexistent properties'); - t.equal(ES.HasProperty({}, 'toString'), true, 'object has inherited properties'); - t.equal( - ES.HasProperty({ toString: 1 }, 'toString'), - true, - 'object has shadowed inherited own properties' - ); - t.equal(ES.HasProperty({ a: 1 }, 'a'), true, 'object has own properties'); - - t.end(); - }); - - test('InstanceofOperator', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.InstanceofOperator(primitive, function () {}); }, - TypeError, - debug(primitive) + ' is not an object' - ); - }); - - forEach(v.nonFunctions, function (nonFunction) { - t['throws']( - function () { ES.InstanceofOperator({}, nonFunction); }, - TypeError, - debug(nonFunction) + ' is not callable' - ); - }); - - var C = function C() {}; - var D = function D() {}; - - t.equal(ES.InstanceofOperator(new C(), C), true, 'constructor function has an instance of itself'); - t.equal(ES.InstanceofOperator(new D(), C), false, 'constructor/instance mismatch is false'); - t.equal(ES.InstanceofOperator(new C(), D), false, 'instance/constructor mismatch is false'); - t.equal(ES.InstanceofOperator({}, C), false, 'plain object is not an instance of a constructor'); - t.equal(ES.InstanceofOperator({}, Object), true, 'plain object is an instance of Object'); - - t.test('Symbol.hasInstance', { skip: !v.hasSymbols || !Symbol.hasInstance }, function (st) { - st.plan(5); - - var O = {}; - var C2 = function () {}; - st.equal(ES.InstanceofOperator(O, C2), false, 'O is not an instance of C2'); - - defineProperty(C2, Symbol.hasInstance, { - configurable: true, - value: function (obj) { - st.equal(this, C2, 'hasInstance receiver is C2'); - st.equal(obj, O, 'hasInstance argument is O'); - - return {}; // testing coercion to boolean - } - }); - - st.equal(ES.InstanceofOperator(O, C2), true, 'O is now an instance of C2'); - - defineProperty(C2, Symbol.hasInstance, { - configurable: true, - value: undefined - }); - - st.equal(ES.InstanceofOperator(O, C2), false, 'O is no longer an instance of C2'); - - st.end(); - }); - - t.end(); - }); - - test('Invoke', function (t) { - forEach(v.nonPropertyKeys, function (nonKey) { - t['throws']( - function () { ES.Invoke({}, nonKey); }, - TypeError, - debug(nonKey) + ' is not a Property Key' - ); - }); - - t['throws']( - function () { ES.Invoke({ o: false }, 'o'); }, - TypeError, - 'fails on a non-function' - ); - - forEach(v.nonArrays, function (nonArray) { - t['throws']( - function () { ES.Invoke({}, '', nonArray); }, - TypeError, - debug(nonArray) + ' is not an Array' - ); - }); - - t.test('invoked callback', function (st) { - var aValue = {}; - var bValue = {}; - var obj = { - f: function (a) { - st.equal(arguments.length, 2, '2 args passed'); - st.equal(a, aValue, 'first arg is correct'); - st.equal(arguments[1], bValue, 'second arg is correct'); - } - }; - st.plan(3); - ES.Invoke(obj, 'f', [aValue, bValue]); - }); - - t.end(); - }); - - test('IsArray', function (t) { - t.equal(true, ES.IsArray([]), '[] is array'); - t.equal(false, ES.IsArray({}), '{} is not array'); - t.equal(false, ES.IsArray({ length: 1, 0: true }), 'arraylike object is not array'); - forEach(v.objects.concat(v.primitives), function (value) { - t.equal(false, ES.IsArray(value), debug(value) + ' is not array'); - }); - t.end(); - }); - - test('IsConcatSpreadable', function (t) { - forEach(v.primitives, function (primitive) { - t.equal(ES.IsConcatSpreadable(primitive), false, debug(primitive) + ' is not an Object'); - }); - - var hasSymbolConcatSpreadable = v.hasSymbols && Symbol.isConcatSpreadable; - t.test('Symbol.isConcatSpreadable', { skip: !hasSymbolConcatSpreadable }, function (st) { - forEach(v.falsies, function (falsy) { - var obj = {}; - obj[Symbol.isConcatSpreadable] = falsy; - st.equal( - ES.IsConcatSpreadable(obj), - false, - 'an object with ' + debug(falsy) + ' as Symbol.isConcatSpreadable is not concat spreadable' - ); - }); - - forEach(v.truthies, function (truthy) { - var obj = {}; - obj[Symbol.isConcatSpreadable] = truthy; - st.equal( - ES.IsConcatSpreadable(obj), - true, - 'an object with ' + debug(truthy) + ' as Symbol.isConcatSpreadable is concat spreadable' - ); - }); - - st.end(); - }); - - forEach(v.objects, function (object) { - t.equal( - ES.IsConcatSpreadable(object), - false, - 'non-array without Symbol.isConcatSpreadable is not concat spreadable' - ); - }); - - t.equal(ES.IsConcatSpreadable([]), true, 'arrays are concat spreadable'); - - t.end(); - }); - - test('IsConstructor', function (t) { - t.equal(true, ES.IsConstructor(function () {}), 'function is constructor'); - t.equal(false, ES.IsConstructor(/a/g), 'regex is not constructor'); - forEach(v.objects, function (object) { - t.equal(false, ES.IsConstructor(object), object + ' object is not constructor'); - }); - - try { - var arrow = Function('return () => {}')(); // eslint-disable-line no-new-func - t.equal(ES.IsConstructor(arrow), false, 'arrow function is not constructor'); - } catch (e) { - t.comment('SKIP: arrow function syntax not supported.'); - } - - try { - var foo = Function('return class Foo {}')(); // eslint-disable-line no-new-func - t.equal(ES.IsConstructor(foo), true, 'class is constructor'); - } catch (e) { - t.comment('SKIP: class syntax not supported.'); - } - - if (typeof Reflect !== 'object' || typeof Proxy !== 'function' || has(Proxy, 'prototype')) { - t.comment('SKIP: Proxy is constructor'); - } else { - t.equal(ES.IsConstructor(Proxy), true, 'Proxy is constructor'); - } - - t.end(); - }); - - test('IsExtensible', function (t) { - forEach(v.objects, function (object) { - t.equal(true, ES.IsExtensible(object), debug(object) + ' object is extensible'); - }); - forEach(v.primitives, function (primitive) { - t.equal(false, ES.IsExtensible(primitive), debug(primitive) + ' is not extensible'); - }); - if (Object.preventExtensions) { - t.equal(false, ES.IsExtensible(Object.preventExtensions({})), 'object with extensions prevented is not extensible'); - } - t.end(); - }); - - test('IsPromise', { skip: typeof Promise !== 'function' }, function (t) { - forEach(v.objects.concat(v.primitives), function (nonPromise) { - t.equal(ES.IsPromise(nonPromise), false, debug(nonPromise) + ' is not a Promise'); - }); - - var thenable = { then: Promise.prototype.then }; - t.equal(ES.IsPromise(thenable), false, 'generic thenable is not a Promise'); - - t.equal(ES.IsPromise(Promise.resolve()), true, 'Promise is a Promise'); - - t.end(); - }); - - test('IsPropertyDescriptor', function (t) { - forEach(v.primitives, function (primitive) { - t.equal( - ES.IsPropertyDescriptor(primitive), - false, - debug(primitive) + ' is not a Property Descriptor' - ); - }); - - t.equal(ES.IsPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor'); - - t.equal(ES.IsPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor'); - - t.equal(ES.IsPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor'); - t.equal(ES.IsPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor'); - t.equal(ES.IsPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor'); - t.equal(ES.IsPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor'); - - t['throws']( - function () { ES.IsPropertyDescriptor(v.bothDescriptor()); }, - TypeError, - 'a Property Descriptor can not be both a Data and an Accessor Descriptor' - ); - - t['throws']( - function () { ES.IsPropertyDescriptor(v.bothDescriptorWritable()); }, - TypeError, - 'a Property Descriptor can not be both a Data and an Accessor Descriptor' - ); - - t.end(); - }); - - test('IsPropertyKey', function (t) { - forEach(v.numbers.concat(v.objects), function (notKey) { - t.equal(false, ES.IsPropertyKey(notKey), debug(notKey) + ' is not property key'); - }); - - t.equal(true, ES.IsPropertyKey('foo'), 'string is property key'); - - forEach(v.symbols, function (symbol) { - t.equal(true, ES.IsPropertyKey(symbol), debug(symbol) + ' is property key'); - }); - t.end(); - }); - - test('IsRegExp', function (t) { - forEach([/a/g, new RegExp('a', 'g')], function (regex) { - t.equal(true, ES.IsRegExp(regex), regex + ' is regex'); - }); - - forEach(v.objects.concat(v.primitives), function (nonRegex) { - t.equal(false, ES.IsRegExp(nonRegex), debug(nonRegex) + ' is not regex'); - }); - - t.test('Symbol.match', { skip: !v.hasSymbols || !Symbol.match }, function (st) { - var obj = {}; - obj[Symbol.match] = true; - st.equal(true, ES.IsRegExp(obj), 'object with truthy Symbol.match is regex'); - - var regex = /a/; - defineProperty(regex, Symbol.match, { value: false }); - st.equal(false, ES.IsRegExp(regex), 'regex with falsy Symbol.match is not regex'); - - st.end(); - }); - - t.end(); - }); - - test('IsInteger', function (t) { - for (var i = -100; i < 100; i += 10) { - t.equal(true, ES.IsInteger(i), i + ' is integer'); - t.equal(false, ES.IsInteger(i + 0.2), (i + 0.2) + ' is not integer'); - } - t.equal(true, ES.IsInteger(-0), '-0 is integer'); - var notInts = v.nonNumbers.concat(v.nonIntegerNumbers, v.infinities, [NaN, [], new Date()]); - forEach(notInts, function (notInt) { - t.equal(false, ES.IsInteger(notInt), debug(notInt) + ' is not integer'); - }); - t.equal(false, ES.IsInteger(v.uncoercibleObject), 'uncoercibleObject is not integer'); - t.end(); - }); - - test('IteratorNext', function (t) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { ES.IteratorNext(nonObject); }, - TypeError, - debug(nonObject) + ' is not an Object' - ); - - t['throws']( - function () { ES.IteratorNext({ next: function () { return nonObject; } }); }, - TypeError, - '`next()` returns ' + debug(nonObject) + ', which is not an Object' - ); - }); - - var iterator = { - next: function (value) { - return [arguments.length, value]; - } - }; - t.deepEqual( - ES.IteratorNext(iterator), - [0, undefined], - 'returns expected value from `.next()`; `next` receives expected 0 arguments' - ); - t.deepEqual( - ES.IteratorNext(iterator, iterator), - [1, iterator], - 'returns expected value from `.next()`; `next` receives expected 1 argument' - ); - - t.end(); - }); - - test('IteratorComplete', function (t) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { ES.IteratorComplete(nonObject); }, - TypeError, - debug(nonObject) + ' is not an Object' - ); - }); - - forEach(v.truthies, function (truthy) { - t.equal(ES.IteratorComplete({ done: truthy }), true, '{ done: ' + debug(truthy) + ' } is true'); - }); - - forEach(v.falsies, function (falsy) { - t.equal(ES.IteratorComplete({ done: falsy }), false, '{ done: ' + debug(falsy) + ' } is false'); - }); - - t.end(); - }); - - test('IteratorValue', function (t) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { ES.IteratorValue(nonObject); }, - TypeError, - debug(nonObject) + ' is not an Object' - ); - }); - - var sentinel = {}; - t.equal(ES.IteratorValue({ value: sentinel }), sentinel, 'Gets `.value` off the object'); - - t.end(); - }); - - test('IteratorStep', function (t) { - t.deepEqual( - ES.IteratorStep({ - next: function () { - return { - done: false, - value: [1, arguments.length] - }; - } - }), - { done: false, value: [1, 0] }, - 'not-done iterator result yields iterator result' - ); - t.deepEqual( - ES.IteratorStep({ - next: function () { - return { - done: true, - value: [2, arguments.length] - }; - } - }), - false, - 'done iterator result yields false' - ); - - t.end(); - }); - - test('IteratorClose', function (t) { - forEach(v.primitives, function (nonObject) { - t['throws']( - function () { ES.IteratorClose(nonObject); }, - TypeError, - debug(nonObject) + ' is not an Object' - ); - - t['throws']( - function () { ES.IteratorClose({ 'return': function () { return nonObject; } }, function () {}); }, - TypeError, - '`.return` returns ' + debug(nonObject) + ', which is not an Object' - ); - }); - - forEach(v.nonFunctions, function (nonFunction) { - t['throws']( - function () { ES.IteratorClose({}, nonFunction); }, - TypeError, - debug(nonFunction) + ' is not a thunk for a Completion Record' - ); - - if (nonFunction != null) { - t['throws']( - function () { ES.IteratorClose({ 'return': nonFunction }, function () {}); }, - TypeError, - '`.return` of ' + debug(nonFunction) + ' is not a Function' - ); - } - }); - - var sentinel = {}; - t.equal( - ES.IteratorClose({ 'return': undefined }, function () { return sentinel; }), - sentinel, - 'when `.return` is `undefined`, invokes and returns the completion thunk' - ); - - /* eslint no-throw-literal: 0 */ - t['throws']( - function () { ES.IteratorClose({ 'return': function () { throw sentinel; } }, function () {}); }, - sentinel, - '`.return` that throws, when completionThunk does not, throws exception from `.return`' - ); - t['throws']( - function () { ES.IteratorClose({ 'return': function () { throw sentinel; } }, function () { throw -1; }); }, - -1, - '`.return` that throws, when completionThunk does too, throws exception from completionThunk' - ); - t['throws']( - function () { ES.IteratorClose({ 'return': function () { } }, function () { throw -1; }); }, - -1, - '`.return` that does not throw, when completionThunk does, throws exception from completionThunk' - ); - - t.equal( - ES.IteratorClose({ 'return': function () { return sentinel; } }, function () { return 42; }), - 42, - 'when `.return` and completionThunk do not throw, and `.return` returns an Object, returns completionThunk' - ); - - t.end(); - }); - - test('ObjectCreate', function (t) { - forEach(v.nonNullPrimitives, function (value) { - t['throws']( - function () { ES.ObjectCreate(value); }, - TypeError, - debug(value) + ' is not null, or an object' - ); - }); - - t.test('proto arg', function (st) { - var Parent = function Parent() {}; - Parent.prototype.foo = {}; - var child = ES.ObjectCreate(Parent.prototype); - st.equal(child instanceof Parent, true, 'child is instanceof Parent'); - st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype'); - - st.end(); - }); - - t.test('internal slots arg', function (st) { - st.doesNotThrow(function () { ES.ObjectCreate({}, []); }, 'an empty slot list is valid'); - - st['throws']( - function () { ES.ObjectCreate({}, ['a']); }, - SyntaxError, - 'internal slots are not supported' - ); - - st.end(); - }); - - t.test('null proto', { skip: !Object.create && !$setProto }, function (st) { - st.equal('toString' in {}, true, 'normal objects have toString'); - st.equal('toString' in ES.ObjectCreate(null), false, 'makes a null object'); - - st.end(); - }); - - t.test('null proto when no native Object.create', { skip: Object.create || $setProto }, function (st) { - st['throws']( - function () { ES.ObjectCreate(null); }, - SyntaxError, - 'without a native Object.create, can not create null objects' - ); - - st.end(); - }); - - t.end(); - }); - - test('OrdinaryCreateFromConstructor', function (t) { - forEach(v.nonFunctions, function (nonFunction) { - t['throws']( - function () { ES.OrdinaryCreateFromConstructor(nonFunction, '%Array.prototype%'); }, - TypeError, - debug(nonFunction) + ' is not a constructor' - ); - }); - - forEach(arrowFns, function (arrowFn) { - t['throws']( - function () { ES.OrdinaryCreateFromConstructor(arrowFn, '%Array.prototype%'); }, - TypeError, - debug(arrowFn) + ' is not a constructor' - ); - }); - - t.test('proto arg', function (st) { - var Parent = function Parent() {}; - Parent.prototype.foo = {}; - var child = ES.OrdinaryCreateFromConstructor(Parent, '%Array.prototype%'); - st.equal(child instanceof Parent, true, 'child is instanceof Parent'); - st.equal(child instanceof Array, false, 'child is not instanceof Array'); - st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype'); - - st.end(); - }); - - t.test('internal slots arg', function (st) { - st.doesNotThrow( - function () { ES.OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', []); }, - 'an empty slot list is valid' - ); - - st['throws']( - function () { ES.OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', ['a']); }, - SyntaxError, - 'internal slots are not supported' - ); - - st.end(); - }); - - t.end(); - }); - - test('OrdinaryGetOwnProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.OrdinaryGetOwnProperty(primitive, ''); }, - TypeError, - 'O: ' + debug(primitive) + ' is not an Object' - ); - }); - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.OrdinaryGetOwnProperty({}, nonPropertyKey); }, - TypeError, - 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.equal(ES.OrdinaryGetOwnProperty({}, 'not in the object'), undefined, 'missing property yields undefined'); - t.equal(ES.OrdinaryGetOwnProperty({}, 'toString'), undefined, 'inherited non-own property yields undefined'); - - t.deepEqual( - ES.OrdinaryGetOwnProperty({ a: 1 }, 'a'), - ES.ToPropertyDescriptor({ - configurable: true, - enumerable: true, - value: 1, - writable: true - }), - 'own assigned data property yields expected descriptor' - ); - - t.deepEqual( - ES.OrdinaryGetOwnProperty(/a/, 'lastIndex'), - ES.ToPropertyDescriptor({ - configurable: false, - enumerable: false, - value: 0, - writable: true - }), - 'regex lastIndex yields expected descriptor' - ); - - t.deepEqual( - ES.OrdinaryGetOwnProperty([], 'length'), - ES.ToPropertyDescriptor({ - configurable: false, - enumerable: false, - value: 0, - writable: true - }), - 'array length yields expected descriptor' - ); - - if (!Object.isFrozen || !Object.isFrozen(Object.prototype)) { - t.deepEqual( - ES.OrdinaryGetOwnProperty(Object.prototype, 'toString'), - ES.ToPropertyDescriptor({ - configurable: true, - enumerable: false, - value: Object.prototype.toString, - writable: true - }), - 'own non-enumerable data property yields expected descriptor' - ); - } - - t.test('ES5+', { skip: !defineProperty.oDP }, function (st) { - var O = {}; - defineProperty(O, 'foo', { - configurable: false, - enumerable: false, - value: O, - writable: true - }); - - st.deepEqual( - ES.OrdinaryGetOwnProperty(O, 'foo'), - ES.ToPropertyDescriptor({ - configurable: false, - enumerable: false, - value: O, - writable: true - }), - 'defined own property yields expected descriptor' - ); - - st.end(); - }); - - t.end(); - }); - - test('OrdinaryDefineOwnProperty', { skip: !getOwnPropertyDescriptor }, function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.OrdinaryDefineOwnProperty(primitive, {}, []); }, - TypeError, - 'O: ' + debug(primitive) + ' is not an Object' - ); - }); - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.OrdinaryDefineOwnProperty({}, nonPropertyKey, v.genericDescriptor()); }, - TypeError, - 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.OrdinaryDefineOwnProperty(primitive, '', v.genericDescriptor()); }, - TypeError, - 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' - ); - }); - - var O = {}; - var P = 'property key'; - var Desc = v.accessorDescriptor(); - t.equal( - ES.OrdinaryDefineOwnProperty(O, P, Desc), - true, - 'operation is successful' - ); - t.deepEqual( - getOwnPropertyDescriptor(O, P), - ES.FromPropertyDescriptor(ES.CompletePropertyDescriptor(Desc)), - 'expected property descriptor is defined' - ); - - t.end(); - }); - - test('OrdinaryHasInstance', function (t) { - forEach(v.nonFunctions, function (nonFunction) { - t.equal(ES.OrdinaryHasInstance(nonFunction, {}), false, debug(nonFunction) + ' is not callable'); - }); - - forEach(v.primitives, function (primitive) { - t.equal(ES.OrdinaryHasInstance(function () {}, primitive), false, debug(primitive) + ' is not an object'); - }); - - var C = function C() {}; - var D = function D() {}; - t.equal(ES.OrdinaryHasInstance(C, new C()), true, 'constructor function has an instance of itself'); - t.equal(ES.OrdinaryHasInstance(C, new D()), false, 'constructor/instance mismatch is false'); - t.equal(ES.OrdinaryHasInstance(D, new C()), false, 'instance/constructor mismatch is false'); - t.equal(ES.OrdinaryHasInstance(C, {}), false, 'plain object is not an instance of a constructor'); - t.equal(ES.OrdinaryHasInstance(Object, {}), true, 'plain object is an instance of Object'); - - t.end(); - }); - - test('OrdinaryHasProperty', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.OrdinaryHasProperty(primitive, ''); }, - TypeError, - debug(primitive) + ' is not an object' - ); - }); - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.OrdinaryHasProperty({}, nonPropertyKey); }, - TypeError, - 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.equal(ES.OrdinaryHasProperty({ a: 1 }, 'a'), true, 'own property is true'); - t.equal(ES.OrdinaryHasProperty({}, 'toString'), true, 'inherited property is true'); - t.equal(ES.OrdinaryHasProperty({}, 'nope'), false, 'absent property is false'); - - t.end(); - }); - - test('QuoteJSONString', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.QuoteJSONString(nonString); }, - TypeError, - debug(nonString) + ' is not a String' - ); - }); - - t.equal(ES.QuoteJSONString(''), '""', '"" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('a'), '"a"', '"a" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('"'), '"\\""', '"\\"" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\b'), '"\\b"', '"\\b" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\t'), '"\\t"', '"\\t" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\n'), '"\\n"', '"\\n" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\f'), '"\\f"', '"\\f" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\r'), '"\\r"', '"\\r" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted'); - t.equal(ES.QuoteJSONString('\u0019'), '"\\u0019"', '"\\u0019" gets properly JSON-quoted'); - - t.end(); - }); - - test('RegExpCreate', function (t) { - forEach(v.nonStrings, function (nonString) { - if (typeof nonString !== 'symbol') { - var p = typeof nonString === 'undefined' ? '' : nonString; - t.equal( - String(ES.RegExpCreate(p, 'g')), - '/' + (String(p) || '(?:)') + '/g', - debug(nonString) + ' becomes `/' + String(p) + '/g`' - ); - } - }); - - t.deepEqual(ES.RegExpCreate(), new RegExp(), 'undefined pattern and flags yields empty regex'); - - t.end(); - }); - - test('RegExpExec', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.RegExpExec(primitive); }, - TypeError, - '"R" argument must be an object; ' + debug(primitive) + ' is not' - ); - }); - - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.RegExpExec({}, nonString); }, - TypeError, - '"S" argument must be a String; ' + debug(nonString) + ' is not' - ); - }); - - t.test('gets and calls a callable "exec"', function (st) { - var str = '123'; - var o = { - exec: function (S) { - st.equal(this, o, '"exec" receiver is R'); - st.equal(S, str, '"exec" argument is S'); - - return null; - } - }; - st.plan(2); - ES.RegExpExec(o, str); - st.end(); - }); - - t.test('throws if a callable "exec" returns a non-null non-object', function (st) { - var str = '123'; - st.plan(v.nonNullPrimitives.length); - forEach(v.nonNullPrimitives, function (nonNullPrimitive) { - st['throws']( - function () { ES.RegExpExec({ exec: function () { return nonNullPrimitive; } }, str); }, - TypeError, - '"exec" method must return `null` or an Object; ' + debug(nonNullPrimitive) + ' is not' - ); - }); - st.end(); - }); - - t.test('actual regex that should match against a string', function (st) { - var S = 'aabc'; - var R = /a/g; - var match1 = ES.RegExpExec(R, S); - var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S })); - var match2 = ES.RegExpExec(R, S); - var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S })); - var match3 = ES.RegExpExec(R, S); - st.deepEqual(match1, expected1, 'match object 1 is as expected'); - st.deepEqual(match2, expected2, 'match object 2 is as expected'); - st.equal(match3, null, 'match 3 is null as expected'); - st.end(); - }); - - t.test('actual regex that should match against a string, with shadowed "exec"', function (st) { - var S = 'aabc'; - var R = /a/g; - defineProperty(R, 'exec', { value: undefined }); - var match1 = ES.RegExpExec(R, S); - var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S })); - var match2 = ES.RegExpExec(R, S); - var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S })); - var match3 = ES.RegExpExec(R, S); - st.deepEqual(match1, expected1, 'match object 1 is as expected'); - st.deepEqual(match2, expected2, 'match object 2 is as expected'); - st.equal(match3, null, 'match 3 is null as expected'); - st.end(); - }); - t.end(); - }); - - test('RequireObjectCoercible', function (t) { - t.equal(false, 'CheckObjectCoercible' in ES, 'CheckObjectCoercible -> RequireObjectCoercible in ES6'); - t['throws'](function () { return ES.RequireObjectCoercible(undefined); }, TypeError, 'undefined throws'); - t['throws'](function () { return ES.RequireObjectCoercible(null); }, TypeError, 'null throws'); - var isCoercible = function (value) { - t.doesNotThrow(function () { return ES.RequireObjectCoercible(value); }, debug(value) + ' does not throw'); - }; - forEach(v.objects.concat(v.nonNullPrimitives), isCoercible); - t.end(); - }); - - test('SameValueZero', function (t) { - t.equal(true, ES.SameValueZero(NaN, NaN), 'NaN is SameValueZero as NaN'); - t.equal(true, ES.SameValueZero(0, -0), '+0 is SameValueZero as -0'); - forEach(v.objects.concat(v.primitives), function (val) { - t.equal(val === val, ES.SameValueZero(val, val), debug(val) + ' is SameValueZero to itself'); - }); - t.end(); - }); - - test('Set', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.Set(primitive, '', null, false); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonKey) { - t['throws']( - function () { ES.Set({}, nonKey, null, false); }, - TypeError, - debug(nonKey) + ' is not a Property Key' - ); - }); - - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { ES.Set({}, '', null, nonBoolean); }, - TypeError, - debug(nonBoolean) + ' is not a Boolean' - ); - }); - - var o = {}; - var value = {}; - ES.Set(o, 'key', value, true); - t.deepEqual(o, { key: value }, 'key is set'); - - t.test('nonwritable', { skip: !defineProperty.oDP }, function (st) { - var obj = { a: value }; - defineProperty(obj, 'a', { writable: false }); - - st['throws']( - function () { ES.Set(obj, 'a', {}, true); }, - TypeError, - 'can not Set nonwritable property' - ); - - st.doesNotThrow( - function () { - st.equal(ES.Set(obj, 'a', {}, false), false, 'unsuccessful Set returns false'); - }, - 'setting Throw to false prevents an exception' - ); - - st.end(); - }); - - t.test('nonconfigurable', { skip: !defineProperty.oDP }, function (st) { - var obj = { a: value }; - defineProperty(obj, 'a', { configurable: false }); - - st.equal(ES.Set(obj, 'a', value, true), true, 'successful Set returns true'); - st.deepEqual(obj, { a: value }, 'key is set'); - - st.end(); - }); - - t.test('doesn’t call [[Get]] in conforming strict mode environments', { skip: noThrowOnStrictViolation }, function (st) { - var getterCalled = false; - var setterCalls = 0; - var obj = {}; - defineProperty(obj, 'a', { - get: function () { - getterCalled = true; - }, - set: function () { - setterCalls += 1; - } - }); - - st.equal(ES.Set(obj, 'a', value, false), true, 'successful Set returns true'); - st.equal(setterCalls, 1, 'setter was called once'); - st.equal(getterCalled, false, 'getter was not called'); - - st.end(); - }); - - t.end(); - }); - - test('SetFunctionName', function (t) { - forEach(v.nonFunctions, function (nonFunction) { - t['throws']( - function () { ES.SetFunctionName(nonFunction, ''); }, - TypeError, - debug(nonFunction) + ' is not a Function' - ); - }); - - t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) { - var f = getNamelessFunction(); - Object.preventExtensions(f); - st['throws']( - function () { ES.SetFunctionName(f, ''); }, - TypeError, - 'throws on a non-extensible function' - ); - st.end(); - }); - - t.test('has an own name property', { skip: !functionsHaveNames }, function (st) { - st['throws']( - function () { ES.SetFunctionName(function g() {}, ''); }, - TypeError, - 'throws if function has an own `name` property' - ); - st.end(); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.SetFunctionName(getNamelessFunction(), nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a Symbol or String' - ); - }); - - t.test('symbols', { skip: !v.hasSymbols || has(getNamelessFunction(), 'name') }, function (st) { - var pairs = [ - [Symbol(), ''], - [Symbol(undefined), ''], - [Symbol(null), '[null]'], - [Symbol(''), getInferredName ? '[]' : ''], - [Symbol.iterator, '[Symbol.iterator]'], - [Symbol('foo'), '[foo]'] - ]; - forEach(pairs, function (pair) { - var sym = pair[0]; - var desc = pair[1]; - var f = getNamelessFunction(); - ES.SetFunctionName(f, sym); - st.equal(f.name, desc, debug(sym) + ' yields a name of ' + debug(desc)); - }); - - st.end(); - }); - - var f = getNamelessFunction(); - t.test('when names are configurable', { skip: !functionsHaveConfigurableNames || has(f, 'name') }, function (st) { - // without prefix - st.notEqual(f.name, 'foo', 'precondition'); - ES.SetFunctionName(f, 'foo'); - st.equal(f.name, 'foo', 'function name is set without a prefix'); - - // with prefix - var g = getNamelessFunction(); - st.notEqual(g.name, 'pre- foo', 'precondition'); - ES.SetFunctionName(g, 'foo', 'pre-'); - st.equal(g.name, 'pre- foo', 'function name is set with a prefix'); - - st.end(); - }); - - t.end(); - }); - - test('SetIntegrityLevel', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.SetIntegrityLevel(primitive); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - t['throws']( - function () { ES.SetIntegrityLevel({}); }, - /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/, - '`level` must be `"sealed"` or `"frozen"`' - ); - - var O = { a: 1 }; - t.test('sealed', { skip: !Object.preventExtensions || noThrowOnStrictViolation }, function (st) { - st.equal(ES.SetIntegrityLevel(O, 'sealed'), true); - st['throws']( - function () { O.b = 2; }, - /^TypeError: (Cannot|Can't) add property b, object is not extensible$/, - 'sealing prevent new properties from being added' - ); - O.a = 2; - st.equal(O.a, 2, 'pre-frozen, existing properties are mutable'); - st.end(); - }); - - t.test('frozen', { skip: !Object.freeze || noThrowOnStrictViolation }, function (st) { - st.equal(ES.SetIntegrityLevel(O, 'frozen'), true); - st['throws']( - function () { O.a = 3; }, - /^TypeError: Cannot assign to read only property 'a' of /, - 'freezing prevents existing properties from being mutated' - ); - st.end(); - }); - - t.end(); - }); - - test('SpeciesConstructor', function (t) { - t['throws'](function () { ES.SpeciesConstructor(null); }, TypeError); - t['throws'](function () { ES.SpeciesConstructor(undefined); }, TypeError); - - var defaultConstructor = function Foo() {}; - - t.equal( - ES.SpeciesConstructor({ constructor: undefined }, defaultConstructor), - defaultConstructor, - 'undefined constructor returns defaultConstructor' - ); - - t['throws']( - function () { return ES.SpeciesConstructor({ constructor: null }, defaultConstructor); }, - TypeError, - 'non-undefined non-object constructor throws' - ); - - t.test('with Symbol.species', { skip: !hasSpecies }, function (st) { - var Bar = function Bar() {}; - Bar[Symbol.species] = null; - - st.equal( - ES.SpeciesConstructor(new Bar(), defaultConstructor), - defaultConstructor, - 'undefined/null Symbol.species returns default constructor' - ); - - var Baz = function Baz() {}; - Baz[Symbol.species] = Bar; - st.equal( - ES.SpeciesConstructor(new Baz(), defaultConstructor), - Bar, - 'returns Symbol.species constructor value' - ); - - Baz[Symbol.species] = {}; - st['throws']( - function () { ES.SpeciesConstructor(new Baz(), defaultConstructor); }, - TypeError, - 'throws when non-constructor non-null non-undefined species value found' - ); - - st.end(); - }); - - t.end(); - }); - - test('SplitMatch', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.SplitMatch(nonString, 0, ''); }, - TypeError, - 'S: ' + debug(nonString) + ' is not a String' - ); - t['throws']( - function () { ES.SplitMatch('', 0, nonString); }, - TypeError, - 'R: ' + debug(nonString) + ' is not a String' - ); - }); - - forEach(v.nonNumbers.concat(v.nonIntegerNumbers), function (nonIntegerNumber) { - t['throws']( - function () { ES.SplitMatch('', nonIntegerNumber, ''); }, - TypeError, - 'q: ' + debug(nonIntegerNumber) + ' is not an integer' - ); - }); - - t.equal(ES.SplitMatch('abc', 0, 'a'), 1, '"a" is found at index 0, before index 1, in "abc"'); - t.equal(ES.SplitMatch('abc', 1, 'a'), false, '"a" is not found at index 1 in "abc"'); - t.equal(ES.SplitMatch('abc', 2, 'a'), false, '"a" is not found at index 2 in "abc"'); - - t.equal(ES.SplitMatch('abc', 0, 'b'), false, '"a" is not found at index 0 in "abc"'); - t.equal(ES.SplitMatch('abc', 1, 'b'), 2, '"b" is found at index 1, before index 2, in "abc"'); - t.equal(ES.SplitMatch('abc', 2, 'b'), false, '"a" is not found at index 2 in "abc"'); - - t.equal(ES.SplitMatch('abc', 0, 'c'), false, '"a" is not found at index 0 in "abc"'); - t.equal(ES.SplitMatch('abc', 1, 'c'), false, '"a" is not found at index 1 in "abc"'); - t.equal(ES.SplitMatch('abc', 2, 'c'), 3, '"c" is found at index 2, before index 3, in "abc"'); - - t.equal(ES.SplitMatch('a', 0, 'ab'), false, 'R longer than S yields false'); - - var s = 'a' + wholePoo + 'c'; - t.equal(ES.SplitMatch(s, 1, wholePoo), 3, debug(wholePoo) + ' is found at index 1, before index 3, in ' + debug(s)); - - t.end(); - }); - - test('StringCreate', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.StringCreate(nonString); }, - TypeError, - debug(nonString) + ' is not a String' - ); - }); - - t.deepEqual(ES.StringCreate('foo', String.prototype), Object('foo'), '"foo" with `String.prototype` makes `Object("foo")'); - - if ($setProto) { - var proto = {}; - t.equal($getProto(ES.StringCreate('', proto)), proto, '[[Prototype]] is set as expected'); - } else { - t['throws']( - function () { ES.StringCreate('', proto); }, - SyntaxError, - 'setting [[Prototype]] is not supported in this env' - ); - } - - t.equal(ES.StringCreate('a', String.prototype).length, 'a'.length, 'length is preserved'); - - t.end(); - }); - - test('StringGetIndexProperty', function (t) { - forEach(v.nonStrings.concat(v.strings), function (nonStringObjects) { - t['throws']( - function () { ES.StringGetIndexProperty(nonStringObjects); }, - TypeError, - debug(nonStringObjects) + ' is not a boxed String Object' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.StringGetIndexProperty('', nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - forEach(v.symbols, function (symbol) { - t.equal( - ES.StringGetIndexProperty(Object('a'), symbol), - undefined, - debug(symbol) + ' is a Property Key, but not a String' - ); - }); - - // a string where CanonicalNumericIndexString returns undefined, a non-integer, or -0 - forEach(['-1', '-0', 'undefined'].concat(v.nonIntegerNumbers), function (nonIndex) { - var S = Object('abc'); - t.equal( - ES.StringGetIndexProperty(S, String(nonIndex)), - undefined, - debug(nonIndex) + ' is not an index inside ' + debug(S) - ); - }); - - forEach(v.strings, function (str) { - var S = Object(str); - for (var i = 0; i < str.length; i += 1) { - var desc = { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': str.charAt(i), - '[[Writable]]': false - }; - t.deepEqual( - ES.StringGetIndexProperty(S, String(i)), - desc, - 'boxed String ' + debug(S) + ' at index ' + debug(i) + ' is ' + debug(desc) - ); - } - t.equal( - ES.StringGetIndexProperty(S, String(str.length)), - undefined, - 'boxed String ' + debug(S) + ' at OOB index ' + debug(str.length) + ' is `undefined' - ); - }); - - t.end(); - }); - - test('SymbolDescriptiveString', function (t) { - forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) { - t['throws']( - function () { ES.SymbolDescriptiveString(nonSymbol); }, - TypeError, - debug(nonSymbol) + ' is not a Symbol' - ); - }); - - t.test('Symbols', { skip: !v.hasSymbols }, function (st) { - st.equal(ES.SymbolDescriptiveString(Symbol()), 'Symbol()', 'undefined description'); - st.equal(ES.SymbolDescriptiveString(Symbol('')), 'Symbol()', 'empty string description'); - st.equal(ES.SymbolDescriptiveString(Symbol.iterator), 'Symbol(Symbol.iterator)', 'well-known symbol'); - st.equal(ES.SymbolDescriptiveString(Symbol('foo')), 'Symbol(foo)', 'string description'); - - st.end(); - }); - - t.end(); - }); - - test('TestIntegrityLevel', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.TestIntegrityLevel(primitive); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - t['throws']( - function () { ES.TestIntegrityLevel({ a: 1 }); }, - /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/, - '`level` must be `"sealed"` or `"frozen"`' - ); - - t.equal(ES.TestIntegrityLevel({ a: 1 }, 'sealed'), false, 'basic object is not sealed'); - t.equal(ES.TestIntegrityLevel({ a: 1 }, 'frozen'), false, 'basic object is not frozen'); - - t.test('preventExtensions', { skip: !Object.preventExtensions }, function (st) { - var o = Object.preventExtensions({ a: 1 }); - st.equal(ES.TestIntegrityLevel(o, 'sealed'), false, 'nonextensible object is not sealed'); - st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'nonextensible object is not frozen'); - - var empty = Object.preventExtensions({}); - st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty nonextensible object is sealed'); - st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty nonextensible object is frozen'); - st.end(); - }); - - t.test('seal', { skip: !Object.seal }, function (st) { - var o = Object.seal({ a: 1 }); - st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'sealed object is sealed'); - st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'sealed object is not frozen'); - - var empty = Object.seal({}); - st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty sealed object is sealed'); - st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty sealed object is frozen'); - - st.end(); - }); - - t.test('freeze', { skip: !Object.freeze }, function (st) { - var o = Object.freeze({ a: 1 }); - st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'frozen object is sealed'); - st.equal(ES.TestIntegrityLevel(o, 'frozen'), true, 'frozen object is frozen'); - - var empty = Object.freeze({}); - st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty frozen object is sealed'); - st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty frozen object is frozen'); - - st.end(); - }); - - t.end(); - }); - - test('thisNumberValue', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.thisNumberValue(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - forEach(v.numbers, function (number) { - t.equal(ES.thisNumberValue(number), number, debug(number) + ' is its own thisNumberValue'); - var obj = Object(number); - t.equal(ES.thisNumberValue(obj), number, debug(obj) + ' is the boxed thisNumberValue'); - }); - - t.end(); - }); - - test('thisBooleanValue', function (t) { - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { ES.thisBooleanValue(nonBoolean); }, - TypeError, - debug(nonBoolean) + ' is not a Boolean' - ); - }); - - forEach(v.booleans, function (boolean) { - t.equal(ES.thisBooleanValue(boolean), boolean, debug(boolean) + ' is its own thisBooleanValue'); - var obj = Object(boolean); - t.equal(ES.thisBooleanValue(obj), boolean, debug(obj) + ' is the boxed thisBooleanValue'); - }); - - t.end(); - }); - - test('thisStringValue', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.thisStringValue(nonString); }, - TypeError, - debug(nonString) + ' is not a String' - ); - }); - - forEach(v.strings, function (string) { - t.equal(ES.thisStringValue(string), string, debug(string) + ' is its own thisStringValue'); - var obj = Object(string); - t.equal(ES.thisStringValue(obj), string, debug(obj) + ' is the boxed thisStringValue'); - }); - - t.end(); - }); - - test('thisTimeValue', function (t) { - forEach(v.primitives.concat(v.objects), function (nonDate) { - t['throws']( - function () { ES.thisTimeValue(nonDate); }, - TypeError, - debug(nonDate) + ' is not a Date' - ); - }); - - forEach(v.timestamps, function (timestamp) { - var date = new Date(timestamp); - - t.equal(ES.thisTimeValue(date), timestamp, debug(date) + ' is its own thisTimeValue'); - }); - - t.end(); - }); - - test('ToDateString', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.ToDateString(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.ToDateString(NaN), 'Invalid Date', 'NaN becomes "Invalid Date"'); - var now = +new Date(); - t.equal(ES.ToDateString(now), Date(now), 'any timestamp becomes `Date(timestamp)`'); - t.end(); - }); - - test('ToInt16', function (t) { - t.equal(0, ES.ToInt16(NaN), 'NaN coerces to +0'); - forEach([0, Infinity], function (num) { - t.equal(0, ES.ToInt16(num), num + ' returns +0'); - t.equal(0, ES.ToInt16(-num), '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToInt16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToInt16(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToInt16(0x100000000 - 1), -1, '2^32 - 1 returns -1'); - t.equal(ES.ToInt16(0x80000000), 0, '2^31 returns +0'); - t.equal(ES.ToInt16(0x80000000 - 1), -1, '2^31 - 1 returns -1'); - t.equal(ES.ToInt16(0x10000), 0, '2^16 returns +0'); - t.equal(ES.ToInt16(0x10000 - 1), -1, '2^16 - 1 returns -1'); - t.end(); - }); - - test('ToInt8', function (t) { - t.equal(0, ES.ToInt8(NaN), 'NaN coerces to +0'); - forEach([0, Infinity], function (num) { - t.equal(0, ES.ToInt8(num), num + ' returns +0'); - t.equal(0, ES.ToInt8(-num), '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToInt8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToInt8(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToInt8(0x100000000 - 1), -1, '2^32 - 1 returns -1'); - t.equal(ES.ToInt8(0x80000000), 0, '2^31 returns +0'); - t.equal(ES.ToInt8(0x80000000 - 1), -1, '2^31 - 1 returns -1'); - t.equal(ES.ToInt8(0x10000), 0, '2^16 returns +0'); - t.equal(ES.ToInt8(0x10000 - 1), -1, '2^16 - 1 returns -1'); - t.equal(ES.ToInt8(0x100), 0, '2^8 returns +0'); - t.equal(ES.ToInt8(0x100 - 1), -1, '2^8 - 1 returns -1'); - t.equal(ES.ToInt8(0x10), 0x10, '2^4 returns 2^4'); - t.end(); - }); - - test('ToNumber', function (t) { - testToNumber(t, ES, ES.ToNumber); - - t.end(); - }); - - test('ToUint8', function (t) { - t.equal(0, ES.ToUint8(NaN), 'NaN coerces to +0'); - forEach([0, Infinity], function (num) { - t.equal(0, ES.ToUint8(num), num + ' returns +0'); - t.equal(0, ES.ToUint8(-num), '-' + num + ' returns +0'); - }); - t['throws'](function () { return ES.ToUint8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.equal(ES.ToUint8(0x100000000), 0, '2^32 returns +0'); - t.equal(ES.ToUint8(0x100000000 - 1), 0x100 - 1, '2^32 - 1 returns 2^8 - 1'); - t.equal(ES.ToUint8(0x80000000), 0, '2^31 returns +0'); - t.equal(ES.ToUint8(0x80000000 - 1), 0x100 - 1, '2^31 - 1 returns 2^8 - 1'); - t.equal(ES.ToUint8(0x10000), 0, '2^16 returns +0'); - t.equal(ES.ToUint8(0x10000 - 1), 0x100 - 1, '2^16 - 1 returns 2^8 - 1'); - t.equal(ES.ToUint8(0x100), 0, '2^8 returns +0'); - t.equal(ES.ToUint8(0x100 - 1), 0x100 - 1, '2^8 - 1 returns 2^16 - 1'); - t.equal(ES.ToUint8(0x10), 0x10, '2^4 returns 2^4'); - t.equal(ES.ToUint8(0x10 - 1), 0x10 - 1, '2^4 - 1 returns 2^4 - 1'); - t.end(); - }); - - test('ToUint8Clamp', function (t) { - t.equal(0, ES.ToUint8Clamp(NaN), 'NaN coerces to +0'); - t.equal(0, ES.ToUint8Clamp(0), '+0 returns +0'); - t.equal(0, ES.ToUint8Clamp(-0), '-0 returns +0'); - t.equal(0, ES.ToUint8Clamp(-Infinity), '-Infinity returns +0'); - t['throws'](function () { return ES.ToUint8Clamp(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - forEach([255, 256, 0x100000, Infinity], function (number) { - t.equal(255, ES.ToUint8Clamp(number), number + ' coerces to 255'); - }); - t.equal(1, ES.ToUint8Clamp(1.49), '1.49 coerces to 1'); - t.equal(2, ES.ToUint8Clamp(1.5), '1.5 coerces to 2, because 2 is even'); - t.equal(2, ES.ToUint8Clamp(1.51), '1.51 coerces to 2'); - - t.equal(2, ES.ToUint8Clamp(2.49), '2.49 coerces to 2'); - t.equal(2, ES.ToUint8Clamp(2.5), '2.5 coerces to 2, because 2 is even'); - t.equal(3, ES.ToUint8Clamp(2.51), '2.51 coerces to 3'); - t.end(); - }); - - test('ToLength', function (t) { - t['throws'](function () { return ES.ToLength(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError'); - t.equal(3, ES.ToLength(v.coercibleObject), 'coercibleObject coerces to 3'); - t.equal(42, ES.ToLength('42.5'), '"42.5" coerces to 42'); - t.equal(7, ES.ToLength(7.3), '7.3 coerces to 7'); - forEach([-0, -1, -42, -Infinity], function (negative) { - t.equal(0, ES.ToLength(negative), negative + ' coerces to +0'); - }); - t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 1), '2^53 coerces to 2^53 - 1'); - t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 3), '2^53 + 2 coerces to 2^53 - 1'); - t.end(); - }); - - test('ToPropertyKey', function (t) { - forEach(v.objects.concat(v.nonSymbolPrimitives), function (value) { - t.equal(ES.ToPropertyKey(value), String(value), 'ToPropertyKey(value) === String(value) for non-Symbols'); - }); - - forEach(v.symbols, function (symbol) { - t.equal( - ES.ToPropertyKey(symbol), - symbol, - 'ToPropertyKey(' + debug(symbol) + ') === ' + debug(symbol) - ); - t.equal( - ES.ToPropertyKey(Object(symbol)), - symbol, - 'ToPropertyKey(' + debug(Object(symbol)) + ') === ' + debug(symbol) - ); - }); - - t.end(); - }); - - test('ToString', function (t) { - forEach(v.objects.concat(v.nonSymbolPrimitives), function (item) { - t.equal(ES.ToString(item), String(item), 'ES.ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')'); - }); - - t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - - forEach(v.symbols, function (symbol) { - t['throws'](function () { return ES.ToString(symbol); }, TypeError, debug(symbol) + ' throws'); - }); - t.end(); - }); - - test('Type', function (t) { - t.equal(ES.Type(), 'Undefined', 'Type() is Undefined'); - t.equal(ES.Type(undefined), 'Undefined', 'Type(undefined) is Undefined'); - t.equal(ES.Type(null), 'Null', 'Type(null) is Null'); - t.equal(ES.Type(true), 'Boolean', 'Type(true) is Boolean'); - t.equal(ES.Type(false), 'Boolean', 'Type(false) is Boolean'); - t.equal(ES.Type(0), 'Number', 'Type(0) is Number'); - t.equal(ES.Type(NaN), 'Number', 'Type(NaN) is Number'); - t.equal(ES.Type('abc'), 'String', 'Type("abc") is String'); - t.equal(ES.Type(function () {}), 'Object', 'Type(function () {}) is Object'); - t.equal(ES.Type({}), 'Object', 'Type({}) is Object'); - - t.test('symbols', { skip: !v.hasSymbols }, function (st) { - st.equal(ES.Type(Symbol.iterator), 'Symbol', 'Type(Symbol.iterator) is Symbol'); - st.end(); - }); - - t.end(); - }); - - test('ValidateAndApplyPropertyDescriptor', function (t) { - forEach(v.nonUndefinedPrimitives, function (nonUndefinedPrimitive) { - t['throws']( - function () { ES.ValidateAndApplyPropertyDescriptor(nonUndefinedPrimitive, '', false, v.genericDescriptor(), v.genericDescriptor()); }, - TypeError, - 'O: ' + debug(nonUndefinedPrimitive) + ' is not undefined or an Object' - ); - }); - - forEach(v.nonBooleans, function (nonBoolean) { - t['throws']( - function () { - return ES.ValidateAndApplyPropertyDescriptor( - undefined, - null, - nonBoolean, - v.genericDescriptor(), - v.genericDescriptor() - ); - }, - TypeError, - 'extensible: ' + debug(nonBoolean) + ' is not a Boolean' - ); - }); - - forEach(v.primitives, function (primitive) { - // Desc must be a Property Descriptor - t['throws']( - function () { - return ES.ValidateAndApplyPropertyDescriptor( - undefined, - null, - false, - primitive, - v.genericDescriptor() - ); - }, - TypeError, - 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' - ); - }); - - forEach(v.nonUndefinedPrimitives, function (primitive) { - // current must be undefined or a Property Descriptor - t['throws']( - function () { - return ES.ValidateAndApplyPropertyDescriptor( - undefined, - null, - false, - v.genericDescriptor(), - primitive - ); - }, - TypeError, - 'current: ' + debug(primitive) + ' is not a Property Descriptor or undefined' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - // if O is an object, P must be a property key - t['throws']( - function () { - return ES.ValidateAndApplyPropertyDescriptor( - {}, - nonPropertyKey, - false, - v.genericDescriptor(), - v.genericDescriptor() - ); - }, - TypeError, - 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.test('current is undefined', function (st) { - var propertyKey = 'howdy'; - - st.test('generic descriptor', function (s2t) { - var generic = v.genericDescriptor(); - generic['[[Enumerable]]'] = true; - var O = {}; - ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, generic); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, generic), - false, - 'when extensible is false, nothing happens' - ); - s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, generic), - true, - 'operation is successful' - ); - var expected = {}; - expected[propertyKey] = undefined; - s2t.deepEqual(O, expected, 'generic descriptor has been defined as an own data property'); - s2t.end(); - }); - - st.test('data descriptor', function (s2t) { - var data = v.dataDescriptor(); - data['[[Enumerable]]'] = true; - - var O = {}; - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, data), - true, - 'noop when O is undefined' - ); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, data), - false, - 'when extensible is false, nothing happens' - ); - s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, data), - true, - 'operation is successful' - ); - var expected = {}; - expected[propertyKey] = data['[[Value]]']; - s2t.deepEqual(O, expected, 'data descriptor has been defined as an own data property'); - s2t.end(); - }); - - st.test('accessor descriptor', { skip: !defineProperty.oDP }, function (s2t) { - var count = 0; - var accessor = v.accessorDescriptor(); - accessor['[[Enumerable]]'] = true; - accessor['[[Get]]'] = function () { - count += 1; - return count; - }; - - var O = {}; - ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, accessor); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, accessor), - false, - 'when extensible is false, nothing happens' - ); - s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); - s2t.equal( - ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, accessor), - true, - 'operation is successful' - ); - var expected = {}; - expected[propertyKey] = accessor['[[Get]]']() + 1; - s2t.deepEqual(O, expected, 'accessor descriptor has been defined as an own accessor property'); - s2t.end(); - }); - - st.end(); - }); - - t.test('every field in Desc is absent', { skip: 'it is unclear if having no fields qualifies Desc to be a Property Descriptor' }); - - forEach([v.dataDescriptor, v.accessorDescriptor, v.mutatorDescriptor], function (getDescriptor) { - t.equal( - ES.ValidateAndApplyPropertyDescriptor(undefined, 'property key', true, getDescriptor(), getDescriptor()), - true, - 'when Desc and current are the same, early return true' - ); - }); - - t.test('current is nonconfigurable', function (st) { - // note: these must not be generic descriptors, or else the algorithm returns an early true - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.configurable(v.dataDescriptor()), - v.descriptors.nonConfigurable(v.dataDescriptor()) - ), - false, - 'false if Desc is configurable' - ); - - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.enumerable(v.dataDescriptor()), - v.descriptors.nonEnumerable(v.dataDescriptor()) - ), - false, - 'false if Desc is Enumerable and current is not' - ); - - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.nonEnumerable(v.dataDescriptor()), - v.descriptors.enumerable(v.dataDescriptor()) - ), - false, - 'false if Desc is not Enumerable and current is' - ); - - var descLackingEnumerable = v.accessorDescriptor(); - delete descLackingEnumerable['[[Enumerable]]']; - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - descLackingEnumerable, - v.descriptors.enumerable(v.accessorDescriptor()) - ), - true, - 'not false if Desc lacks Enumerable' - ); - - st.end(); - }); - - t.test('Desc and current: one is a data descriptor, one is not', { skip: !defineProperty || !getOwnPropertyDescriptor }, function (st) { - // note: Desc must be configurable if current is nonconfigurable, to hit this branch - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.configurable(v.accessorDescriptor()), - v.descriptors.nonConfigurable(v.dataDescriptor()) - ), - false, - 'false if current (data) is nonconfigurable' - ); - - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.configurable(v.dataDescriptor()), - v.descriptors.nonConfigurable(v.accessorDescriptor()) - ), - false, - 'false if current (not data) is nonconfigurable' - ); - - // one is data and one is not, - // // if current is data, convert to accessor - // // else convert to data - - var startsWithData = { - 'property key': 42 - }; - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - startsWithData, - 'property key', - true, - v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor())), - v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor())) - ), - true, - 'operation is successful: current is data, Desc is accessor' - ); - var shouldBeAccessor = getOwnPropertyDescriptor(startsWithData, 'property key'); - st.equal(typeof shouldBeAccessor.get, 'function', 'has a getter'); - - var key = 'property key'; - var startsWithAccessor = {}; - defineProperty(startsWithAccessor, key, { - configurable: true, - enumerable: true, - get: function get() { return 42; } - }); - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - startsWithAccessor, - key, - true, - v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor())), - v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor(42))) - ), - true, - 'operation is successful: current is accessor, Desc is data' - ); - var shouldBeData = getOwnPropertyDescriptor(startsWithAccessor, 'property key'); - st.deepEqual(shouldBeData, { configurable: true, enumerable: true, value: 42, writable: false }, 'is a data property'); - - st.end(); - }); - - t.test('Desc and current are both data descriptors', function (st) { - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.writable(v.dataDescriptor()), - v.descriptors.nonWritable(v.descriptors.nonConfigurable(v.dataDescriptor())) - ), - false, - 'false if frozen current and writable Desc' - ); - - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.descriptors.configurable({ '[[Value]]': 42 }), - v.descriptors.nonWritable({ '[[Value]]': 7 }) - ), - false, - 'false if nonwritable current has a different value than Desc' - ); - - st.end(); - }); - - t.test('current is nonconfigurable; Desc and current are both accessor descriptors', function (st) { - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.mutatorDescriptor(), - v.descriptors.nonConfigurable(v.mutatorDescriptor()) - ), - false, - 'false if both Sets are not equal' - ); - - st.equal( - ES.ValidateAndApplyPropertyDescriptor( - undefined, - 'property key', - true, - v.accessorDescriptor(), - v.descriptors.nonConfigurable(v.accessorDescriptor()) - ), - false, - 'false if both Gets are not equal' - ); - - st.end(); - }); - - t.end(); - }); -}; - -var es2016 = function ES2016(ES, ops, expectedMissing, skips) { - es2015(ES, ops, expectedMissing, assign(assign({}, skips), { - StringGetIndexProperty: true - })); - var test = makeTest(skips); - - test('IterableToArrayLike', function (t) { - t.test('custom iterables', { skip: !v.hasSymbols }, function (st) { - var O = {}; - O[Symbol.iterator] = function () { - var i = -1; - return { - next: function () { - i += 1; - return { - done: i >= 5, - value: i - }; - } - }; - }; - st.deepEqual( - ES.IterableToArrayLike(O), - [0, 1, 2, 3, 4], - 'Symbol.iterator method is called and values collected' - ); - - st.end(); - }); - - t.deepEqual(ES.IterableToArrayLike('abc'), ['a', 'b', 'c'], 'a string of code units spreads'); - t.deepEqual(ES.IterableToArrayLike('💩'), ['💩'], 'a string of code points spreads'); - t.deepEqual(ES.IterableToArrayLike('a💩c'), ['a', '💩', 'c'], 'a string of code points and units spreads'); - - var arr = [1, 2, 3]; - t.deepEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a similar array'); - t.notEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a different, but similar, array'); - - var O = {}; - t.equal(ES.IterableToArrayLike(O), O, 'a non-iterable non-array non-string object is returned directly'); - - t.end(); - }); - - test('OrdinaryGetPrototypeOf', function (t) { - t.test('values', { skip: !$getProto }, function (st) { - st.equal(ES.OrdinaryGetPrototypeOf([]), Array.prototype, 'array [[Prototype]] is Array.prototype'); - st.equal(ES.OrdinaryGetPrototypeOf({}), Object.prototype, 'object [[Prototype]] is Object.prototype'); - st.equal(ES.OrdinaryGetPrototypeOf(/a/g), RegExp.prototype, 'regex [[Prototype]] is RegExp.prototype'); - st.equal(ES.OrdinaryGetPrototypeOf(Object('')), String.prototype, 'boxed string [[Prototype]] is String.prototype'); - st.equal(ES.OrdinaryGetPrototypeOf(Object(42)), Number.prototype, 'boxed number [[Prototype]] is Number.prototype'); - st.equal(ES.OrdinaryGetPrototypeOf(Object(true)), Boolean.prototype, 'boxed boolean [[Prototype]] is Boolean.prototype'); - if (v.hasSymbols) { - st.equal(ES.OrdinaryGetPrototypeOf(Object(Symbol.iterator)), Symbol.prototype, 'boxed symbol [[Prototype]] is Symbol.prototype'); - } - st.end(); - }); - - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.OrdinaryGetPrototypeOf(primitive); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - t.end(); - }); - - test('OrdinarySetPrototypeOf', { skip: !$getProto || !$setProto }, function (t) { - var a = []; - var proto = {}; - - t.equal(ES.OrdinaryGetPrototypeOf(a), Array.prototype, 'precondition'); - t.equal(ES.OrdinarySetPrototypeOf(a, proto), true, 'setting prototype is successful'); - t.equal(ES.OrdinaryGetPrototypeOf(a), proto, 'postcondition'); - - t.end(); - }); - - test('SameValueNonNumber', function (t) { - var willThrow = [ - [3, 4], - [NaN, 4], - [4, ''], - ['abc', true], - [{}, false] - ]; - forEach(willThrow, function (nums) { - t['throws'](function () { return ES.SameValueNonNumber.apply(ES, nums); }, TypeError, 'value must be same type and non-number'); - }); - - forEach(v.objects.concat(v.nonNumberPrimitives), function (val) { - t.equal(val === val, ES.SameValueNonNumber(val, val), debug(val) + ' is SameValueNonNumber to itself'); - }); - - t.end(); - }); - - test('UTF16Encoding', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.UTF16Encoding(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - t['throws']( - function () { ES.UTF16Encoding(-1); }, - TypeError, - '-1 is < 0' - ); - - t['throws']( - function () { ES.UTF16Encoding(0x10FFFF + 1); }, - TypeError, - '0x10FFFF + 1 is > 0x10FFFF' - ); - - t.equal(ES.UTF16Encoding(0xD83D), leadingPoo, '0xD83D is the first half of ' + wholePoo); - t.equal(ES.UTF16Encoding(0xDCA9), trailingPoo, '0xDCA9 is the last half of ' + wholePoo); - t.equal(ES.UTF16Encoding(0x1F4A9), wholePoo, '0xDCA9 is the last half of ' + wholePoo); - - t.end(); - }); - - test('UTF16Decode', function (t) { - t['throws']( - function () { ES.UTF16Decode('a'.charCodeAt(0), trailingPoo.charCodeAt(0)); }, - TypeError, - '"a" is not a leading surrogate' - ); - t['throws']( - function () { ES.UTF16Decode(leadingPoo.charCodeAt(0), 'b'.charCodeAt(0)); }, - TypeError, - '"b" is not a trailing surrogate' - ); - - t.equal(ES.UTF16Decode(leadingPoo.charCodeAt(0), trailingPoo.charCodeAt(0)), wholePoo); - - t.end(); - }); -}; - -var es2017 = function ES2017(ES, ops, expectedMissing, skips) { - es2016(ES, ops, expectedMissing, assign({}, skips, { - EnumerableOwnNames: true, - IterableToArrayLike: true - })); - var test = makeTest(skips); - - test('EnumerableOwnProperties', function (t) { - var obj = testEnumerableOwnNames(t, function (O) { - return ES.EnumerableOwnProperties(O, 'key'); - }); - - t.deepEqual( - ES.EnumerableOwnProperties(obj, 'value'), - [obj.own], - 'returns enumerable own values' - ); - - t.deepEqual( - ES.EnumerableOwnProperties(obj, 'key+value'), - [['own', obj.own]], - 'returns enumerable own entries' - ); - - t.end(); - }); - - test('IterableToList', function (t) { - var customIterator = function () { - var i = -1; - return { - next: function () { - i += 1; - return { - done: i >= 5, - value: i - }; - } - }; - }; - - t.deepEqual( - ES.IterableToList({}, customIterator), - [0, 1, 2, 3, 4], - 'iterator method is called and values collected' - ); - - t.test('Symbol support', { skip: !v.hasSymbols }, function (st) { - st.deepEqual(ES.IterableToList('abc', String.prototype[Symbol.iterator]), ['a', 'b', 'c'], 'a string of code units spreads'); - st.deepEqual(ES.IterableToList('☃', String.prototype[Symbol.iterator]), ['☃'], 'a string of code points spreads'); - - var arr = [1, 2, 3]; - st.deepEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a similar array'); - st.notEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a different, but similar, array'); - - st.end(); - }); - - t['throws']( - function () { ES.IterableToList({}, void 0); }, - TypeError, - 'non-function iterator method' - ); - - t.end(); - }); - - test('StringGetOwnProperty', function (t) { - forEach(v.nonStrings.concat(v.strings), function (nonBoxedString) { - t['throws']( - function () { ES.StringGetOwnProperty(nonBoxedString, '0'); }, - TypeError, - debug(nonBoxedString) + ' is not a boxed String' - ); - }); - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - t['throws']( - function () { ES.StringGetOwnProperty(Object(''), nonPropertyKey); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - t.equal(ES.StringGetOwnProperty(Object(''), '0'), undefined, 'empty boxed string yields undefined'); - - forEach(v.strings, function (string) { - if (string) { - var S = Object(string); - for (var i = 0; i < string.length; i += 1) { - var descriptor = ES.StringGetOwnProperty(S, String(i)); - t.deepEqual( - descriptor, - { - '[[Configurable]]': false, - '[[Enumerable]]': true, - '[[Value]]': string.charAt(i), - '[[Writable]]': false - }, - debug(string) + ': property ' + debug(String(i)) + ': returns expected descriptor' - ); - } - } - }); - - t.end(); - }); - - test('ToIndex', function (t) { - t.equal(ES.ToIndex(), 0, 'no value gives +0'); - t.equal(ES.ToIndex(undefined), 0, 'undefined value gives +0'); - t.equal(ES.ToIndex(-0), 0, '-0 gives +0'); - - t['throws'](function () { ES.ToIndex(-1); }, RangeError, 'negative numbers throw'); - - t['throws'](function () { ES.ToIndex(MAX_SAFE_INTEGER + 1); }, RangeError, 'too large numbers throw'); - - t.equal(ES.ToIndex(3), 3, 'numbers work'); - t.equal(ES.ToIndex(v.valueOfOnlyObject), 4, 'coercible objects are coerced'); - - t.end(); - }); -}; - -var es2018 = function ES2018(ES, ops, expectedMissing, skips) { - es2017(ES, ops, expectedMissing, assign({}, skips, { - EnumerableOwnProperties: true, - GetSubstitution: true, - IsPropertyDescriptor: true - })); - var test = makeTest(skips); - - test('CopyDataProperties', function (t) { - t.test('first argument: target', function (st) { - forEach(v.primitives, function (primitive) { - st['throws']( - function () { ES.CopyDataProperties(primitive, {}, []); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - st.end(); - }); - - t.test('second argument: source', function (st) { - var frozenTarget = Object.freeze ? Object.freeze({}) : {}; - forEach(v.nullPrimitives, function (nullish) { - st.equal( - ES.CopyDataProperties(frozenTarget, nullish, []), - frozenTarget, - debug(nullish) + ' "source" yields identical, unmodified target' - ); - }); - - forEach(v.nonNullPrimitives, function (objectCoercible) { - var target = {}; - var result = ES.CopyDataProperties(target, objectCoercible, []); - st.equal(result, target, 'result === target'); - st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible)); - }); - - st.test('enumerable accessor property', { skip: !defineProperty.oDP }, function (s2t) { - var target = {}; - var source = {}; - defineProperty(source, 'a', { - enumerable: true, - get: function () { return 42; } - }); - var result = ES.CopyDataProperties(target, source, []); - s2t.equal(result, target, 'result === target'); - s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source'); - s2t.end(); - }); - - st.end(); - }); - - t.test('third argument: excludedItems', function (st) { - forEach(v.objects.concat(v.primitives), function (nonArray) { - st['throws']( - function () { ES.CopyDataProperties({}, {}, nonArray); }, - TypeError, - debug(nonArray) + ' is not an Array' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - st['throws']( - function () { ES.CopyDataProperties({}, {}, [nonPropertyKey]); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - var result = ES.CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']); - st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded'); - - st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) { - var source = {}; - forEach(v.symbols, function (symbol) { - source[symbol] = true; - }); - - var includedSymbols = v.symbols.slice(1); - var excludedSymbols = v.symbols.slice(0, 1); - var target = ES.CopyDataProperties({}, source, excludedSymbols); - - forEach(includedSymbols, function (symbol) { - s2t.equal(has(target, symbol), true, debug(symbol) + ' is included'); - }); - - forEach(excludedSymbols, function (symbol) { - s2t.equal(has(target, symbol), false, debug(symbol) + ' is excluded'); - }); - - s2t.end(); - }); - - st.end(); - }); - - // TODO: CopyDataProperties does not throw when copying fails - - t.end(); - }); - - test('DateString', function (t) { - forEach(v.nonNumbers.concat(NaN), function (nonNumberOrNaN) { - t['throws']( - function () { ES.DateString(nonNumberOrNaN); }, - TypeError, - debug(nonNumberOrNaN) + ' is not a non-NaN Number' - ); - }); - - t.equal(ES.DateString(Date.UTC(2019, 8, 10, 7, 8, 9)), 'Tue Sep 10 2019'); - t.equal(ES.DateString(Date.UTC(2016, 1, 29, 7, 8, 9)), 'Mon Feb 29 2016'); // leap day - t.end(); - }); - - test('EnumerableOwnPropertyNames', function (t) { - var obj = testEnumerableOwnNames(t, function (O) { - return ES.EnumerableOwnPropertyNames(O, 'key'); - }); - - t.deepEqual( - ES.EnumerableOwnPropertyNames(obj, 'value'), - [obj.own], - 'returns enumerable own values' - ); - - t.deepEqual( - ES.EnumerableOwnPropertyNames(obj, 'key+value'), - [['own', obj.own]], - 'returns enumerable own entries' - ); - - t.end(); - }); - - test('GetSubstitution', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.GetSubstitution(nonString, '', 0, [], undefined, ''); }, - TypeError, - '`matched`: ' + debug(nonString) + ' is not a String' - ); - - t['throws']( - function () { ES.GetSubstitution('', nonString, 0, [], undefined, ''); }, - TypeError, - '`str`: ' + debug(nonString) + ' is not a String' - ); - - t['throws']( - function () { ES.GetSubstitution('', '', 0, [], undefined, nonString); }, - TypeError, - '`replacement`: ' + debug(nonString) + ' is not a String' - ); - - t['throws']( - function () { ES.GetSubstitution('', '', 0, [nonString], undefined, ''); }, - TypeError, - '`captures`: ' + debug([nonString]) + ' is not an Array of strings' - ); - }); - - forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { - t['throws']( - function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], undefined, ''); }, - TypeError, - '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer' - ); - }); - - forEach(v.nonArrays, function (nonArray) { - t['throws']( - function () { ES.GetSubstitution('', '', 0, nonArray, undefined, ''); }, - TypeError, - '`captures`: ' + debug(nonArray) + ' is not an Array' - ); - }); - - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '123'), - '123', - 'returns the substitution' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '$$2$'), - '$2$', - 'supports $$, and trailing $' - ); - - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$&<'), - '>abcdef<', - 'supports $&' - ); - - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$`<'), - '><', - 'supports $` at position 0' - ); - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '>$`<'), - '>ab<', - 'supports $` at position > 0' - ); - - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 7, [], undefined, ">$'<"), - '><', - "supports $' at a position where there's less than `matched.length` chars left" - ); - t.equal( - ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, ">$'<"), - '>ghi<', - "supports $' at a position where there's more than `matched.length` chars left" - ); - - for (var i = 0; i < 100; i += 1) { - var captures = []; - captures[i] = 'test'; - if (i > 0) { - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i + '<'), - '>undefined<', - 'supports $' + i + ' with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i), - '>undefined', - 'supports $' + i + ' at the end of the replacement, with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i + '<'), - '><', - 'supports $' + i + ' with a capture at that index' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i), - '>', - 'supports $' + i + ' at the end of the replacement, with a capture at that index' - ); - } - if (i < 10) { - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i + '<'), - i === 0 ? '><' : '>undefined<', - 'supports $0' + i + ' with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i), - i === 0 ? '>' : '>undefined', - 'supports $0' + i + ' at the end of the replacement, with no captures' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i + '<'), - '><', - 'supports $0' + i + ' with a capture at that index' - ); - t.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i), - '>', - 'supports $0' + i + ' at the end of the replacement, with a capture at that index' - ); - } - } - - t.test('named captures', function (st) { - var namedCaptures = { - foo: 'foo!' - }; - - st.equal( - ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, namedCaptures, 'a>$foo!> bitsN, - debug(bigInt32) + ' >> ' + debug(bitsN) + ' is ' + debug(bigInt32 >> bitsN) - ); - }); - }); - - t.end(); - }); - - test('BigInt::subtract', { skip: !hasBigInts }, function (t) { - forEach(v.nonBigInts, function (nonBigInt) { - t['throws']( - function () { ES.BigInt.subtract(nonBigInt, $BigInt(0)); }, - TypeError, - 'x: ' + debug(nonBigInt) + ' is not a BigInt' - ); - t['throws']( - function () { ES.BigInt.subtract($BigInt(0), nonBigInt); }, - TypeError, - 'y: ' + debug(nonBigInt) + ' is not a BigInt' - ); - }); - - t.equal(ES.BigInt.subtract($BigInt(0), $BigInt(0)), $BigInt(0), '0n - 0n is 0n'); - - forEach(v.bigints, function (bigint) { - t.equal(ES.BigInt.subtract(bigint, $BigInt(0)), bigint, debug(bigint) + ' - 0n produces ' + bigint); - t.equal(ES.BigInt.subtract(bigint, $BigInt(1)), bigint - $BigInt(1), debug(bigint) + ' - 1n produces ' + (bigint + $BigInt(1))); - t.equal(ES.BigInt.subtract(bigint, $BigInt(42)), bigint - $BigInt(42), debug(bigint) + ' - 42n produces ' + (bigint - $BigInt(42))); - }); - - t.end(); - }); - - test('BigInt::toString', function (t) { - forEach(v.nonBigInts, function (nonBigInt) { - t['throws']( - function () { ES.BigInt.toString(nonBigInt); }, - TypeError, - debug(nonBigInt) + ' is not a BigInt' - ); - }); - - forEach(v.bigints, function (bigint) { - t.equal(ES.BigInt.toString(bigint), String(bigint), debug(bigint) + ' stringifies to ' + bigint); - }); - - t.end(); - }); - - test('BigInt::unaryMinus', function (t) { - forEach(v.nonBigInts, function (nonBigInt) { - t['throws']( - function () { ES.BigInt.unaryMinus(nonBigInt); }, - TypeError, - debug(nonBigInt) + ' is not a BigInt' - ); - }); - - t.test('actual BigInts', { skip: !hasBigInts }, function (st) { - forEach(v.bigints, function (bigint) { - st.equal(ES.BigInt.unaryMinus(bigint), -bigint, debug(bigint) + ' produces -' + debug(bigint)); - }); - st.end(); - }); - - t.end(); - }); - - test('BigInt::unsignedRightShift', { skip: !hasBigInts }, function (t) { - forEach(v.nonBigInts, function (nonBigInt) { - t['throws']( - function () { ES.BigInt.unsignedRightShift(nonBigInt, $BigInt(0)); }, - TypeError, - 'x: ' + debug(nonBigInt) + ' is not a BigInt' - ); - t['throws']( - function () { ES.BigInt.unsignedRightShift($BigInt(0), nonBigInt); }, - TypeError, - 'y: ' + debug(nonBigInt) + ' is not a BigInt' - ); - }); - - forEach([0].concat(v.int32s), function (int32) { - var bigInt32 = $BigInt(int32); - forEach([1, 3, 5, 31, 32, 33], function (bits) { - var bitsN = $BigInt(bits); - t['throws']( - function () { ES.BigInt.unsignedRightShift(bigInt32, bitsN); }, - TypeError, - debug(bigInt32) + ' >>> ' + debug(bitsN) + ' throws' - ); - }); - }); - - t.end(); - }); - - test('BigIntBitwiseOp', { skip: !hasBigInts }, function (t) { - t['throws']( - function () { ES.BigIntBitwiseOp('invalid', BigInt(0), BigInt(0)); }, - TypeError, - 'throws with an invalid op' - ); - - t.equal(ES.BigIntBitwiseOp('&', BigInt(1), BigInt(2)), BigInt(1) & BigInt(2)); - t.equal(ES.BigIntBitwiseOp('|', BigInt(1), BigInt(2)), BigInt(1) | BigInt(2)); - t.equal(ES.BigIntBitwiseOp('^', BigInt(1), BigInt(2)), BigInt(1) ^ BigInt(2)); - - t.end(); - }); - - test('BinaryAnd', function (t) { - t.equal(ES.BinaryAnd(0, 0), 0); - t.equal(ES.BinaryAnd(0, 1), 0); - t.equal(ES.BinaryAnd(1, 0), 0); - t.equal(ES.BinaryAnd(1, 1), 1); - - forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) { - t['throws']( - function () { ES.BinaryAnd(0, nonBit); }, - TypeError - ); - t['throws']( - function () { ES.BinaryAnd(nonBit, 1); }, - TypeError - ); - }); - t.end(); - }); - - test('BinaryOr', function (t) { - t.equal(ES.BinaryOr(0, 0), 0); - t.equal(ES.BinaryOr(0, 1), 1); - t.equal(ES.BinaryOr(1, 0), 1); - t.equal(ES.BinaryOr(1, 1), 1); - - forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) { - t['throws']( - function () { ES.BinaryOr(0, nonBit); }, - TypeError - ); - t['throws']( - function () { ES.BinaryOr(nonBit, 1); }, - TypeError - ); - }); - t.end(); - }); - - test('BinaryXor', function (t) { - t.equal(ES.BinaryXor(0, 0), 0); - t.equal(ES.BinaryXor(0, 1), 1); - t.equal(ES.BinaryXor(1, 0), 1); - t.equal(ES.BinaryXor(1, 1), 0); - - forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) { - t['throws']( - function () { ES.BinaryXor(0, nonBit); }, - TypeError - ); - t['throws']( - function () { ES.BinaryXor(nonBit, 1); }, - TypeError - ); - }); - t.end(); - }); - - test('CodePointAt', function (t) { - t['throws']( - function () { ES.CodePointAt('abc', -1); }, - TypeError, - 'requires an index >= 0' - ); - t['throws']( - function () { ES.CodePointAt('abc', 3); }, - TypeError, - 'requires an index < string length' - ); - - t.deepEqual(ES.CodePointAt('abc', 0), { - '[[CodePoint]]': 'a', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - t.deepEqual(ES.CodePointAt('abc', 1), { - '[[CodePoint]]': 'b', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - t.deepEqual(ES.CodePointAt('abc', 2), { - '[[CodePoint]]': 'c', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - - var strWithHalfPoo = 'a' + leadingPoo + 'c'; - var strWithWholePoo = 'a' + wholePoo + 'd'; - - t.deepEqual(ES.CodePointAt(strWithHalfPoo, 0), { - '[[CodePoint]]': 'a', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - t.deepEqual(ES.CodePointAt(strWithHalfPoo, 1), { - '[[CodePoint]]': leadingPoo, - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': true - }); - t.deepEqual(ES.CodePointAt(strWithHalfPoo, 2), { - '[[CodePoint]]': 'c', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - - t.deepEqual(ES.CodePointAt(strWithWholePoo, 0), { - '[[CodePoint]]': 'a', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - t.deepEqual(ES.CodePointAt(strWithWholePoo, 1), { - '[[CodePoint]]': wholePoo, - '[[CodeUnitCount]]': 2, - '[[IsUnpairedSurrogate]]': false - }); - t.deepEqual(ES.CodePointAt(strWithWholePoo, 2), { - '[[CodePoint]]': trailingPoo, - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': true - }); - t.deepEqual(ES.CodePointAt(strWithWholePoo, 3), { - '[[CodePoint]]': 'd', - '[[CodeUnitCount]]': 1, - '[[IsUnpairedSurrogate]]': false - }); - - t.end(); - }); - - test('CopyDataProperties', function (t) { - t.test('first argument: target', function (st) { - forEach(v.primitives, function (primitive) { - st['throws']( - function () { ES.CopyDataProperties(primitive, {}, []); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - st.end(); - }); - - t.test('second argument: source', function (st) { - var frozenTarget = Object.freeze ? Object.freeze({}) : {}; - forEach(v.nullPrimitives, function (nullish) { - st.equal( - ES.CopyDataProperties(frozenTarget, nullish, []), - frozenTarget, - debug(nullish) + ' "source" yields identical, unmodified target' - ); - }); - - forEach(v.nonNullPrimitives, function (objectCoercible) { - var target = {}; - var result = ES.CopyDataProperties(target, objectCoercible, []); - st.equal(result, target, 'result === target'); - st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible)); - }); - - st.test('enumerable accessor property', { skip: !defineProperty.oDP }, function (s2t) { - var target = {}; - var source = {}; - defineProperty(source, 'a', { - enumerable: true, - get: function () { return 42; } - }); - var result = ES.CopyDataProperties(target, source, []); - s2t.equal(result, target, 'result === target'); - s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source'); - s2t.end(); - }); - - st.end(); - }); - - t.test('third argument: excludedItems', function (st) { - forEach(v.objects.concat(v.primitives), function (nonArray) { - st['throws']( - function () { ES.CopyDataProperties({}, {}, nonArray); }, - TypeError, - debug(nonArray) + ' is not an Array' - ); - }); - - forEach(v.nonPropertyKeys, function (nonPropertyKey) { - st['throws']( - function () { ES.CopyDataProperties({}, {}, [nonPropertyKey]); }, - TypeError, - debug(nonPropertyKey) + ' is not a Property Key' - ); - }); - - var result = ES.CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']); - st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded'); - - st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) { - var source = {}; - forEach(v.symbols, function (symbol) { - source[symbol] = true; - }); - - var includedSymbols = v.symbols.slice(1); - var excludedSymbols = v.symbols.slice(0, 1); - var target = ES.CopyDataProperties({}, source, excludedSymbols); - - forEach(includedSymbols, function (symbol) { - s2t.equal(has(target, symbol), true, debug(symbol) + ' is included'); - }); - - forEach(excludedSymbols, function (symbol) { - s2t.equal(has(target, symbol), false, debug(symbol) + ' is excluded'); - }); - - s2t.end(); - }); - - st.end(); - }); - - // TODO: CopyDataProperties throws when copying fails - - t.end(); - }); - - test('GetIterator', function (t) { - try { - ES.GetIterator({}, null); - } catch (e) { - t.ok(e.message.indexOf('Assertion failed: `hint` must be one of \'sync\' or \'async\'' >= 0)); - } - - var arr = [1, 2]; - testIterator(t, ES.GetIterator(arr), arr); - - testIterator(t, ES.GetIterator('abc'), 'abc'.split('')); - - t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) { - var m = new Map(); - m.set(1, 'a'); - m.set(2, 'b'); - - testIterator(st, ES.GetIterator(m), [[1, 'a'], [2, 'b']]); - - st.end(); - }); - - t.test('Symbol.asyncIterator', { skip: !v.hasSymbols || !Symbol.asyncIterator }, function (st) { - try { - ES.GetIterator(arr, 'async'); - } catch (e) { - st.ok(e.message.indexOf("async from sync iterators aren't currently supported") >= 0); - } - - var it = { - next: function () { - return Promise.resolve({ - done: true - }); - } - }; - var obj = {}; - obj[Symbol.asyncIterator] = function () { - return it; - }; - - st.equal(ES.GetIterator(obj, 'async'), it); - - st.end(); - }); - - t.end(); - }); - - var unclampedUnsignedIntegerTypes = [ - 'Int8', - 'Int16', - 'Int32' - ]; - var clampedTypes = [ - 'Uint8C' - ]; - var unclampedSignedIntegerTypes = [ - 'Uint8', - 'Uint16', - 'Uint32' - ]; - var unclampedIntegerTypes = unclampedUnsignedIntegerTypes.concat(unclampedSignedIntegerTypes); - var floatTypes = [ - 'Float32', - 'Float64' - ]; - var integerTypes = unclampedIntegerTypes.concat(clampedTypes, floatTypes); - var bigIntTypes = [ - 'BigInt64', - 'BigUint64' - ]; - var numberTypes = floatTypes.concat(integerTypes); - var nonIntegerTypes = floatTypes.concat(bigIntTypes); - var unsignedElementTypes = unclampedSignedIntegerTypes.concat([ - 'BigUint64' - ]); - var signedElementTypes = unclampedUnsignedIntegerTypes; - - test('IsBigIntElementType', function (t) { - forEach(bigIntTypes, function (type) { - t.equal( - ES.IsBigIntElementType(type), - true, - debug(type) + ' is a BigInt element type' - ); - }); - - forEach(numberTypes, function (type) { - t.equal( - ES.IsBigIntElementType(type), - false, - debug(type) + ' is not a BigInt element type' - ); - }); - - t.end(); - }); - - test('IsUnsignedElementType', function (t) { - forEach(unsignedElementTypes, function (type) { - t.equal( - ES.IsUnsignedElementType(type), - true, - debug(type) + ' is an unsigned element type' - ); - }); - - forEach(signedElementTypes, function (type) { - t.equal( - ES.IsUnsignedElementType(type), - false, - debug(type) + ' is not an unsigned element type' - ); - }); - - t.end(); - }); - - test('IsUnclampedIntegerElementType', function (t) { - forEach(unclampedIntegerTypes, function (type) { - t.equal( - ES.IsUnclampedIntegerElementType(type), - true, - debug(type) + ' is an unclamped integer element type' - ); - }); - - forEach(clampedTypes.concat(nonIntegerTypes), function (type) { - t.equal( - ES.IsUnclampedIntegerElementType(type), - false, - debug(type) + ' is not an unclamped integer element type' - ); - }); - - t.end(); - }); - - test('IsNonNegativeInteger', function (t) { - forEach(v.notNonNegativeIntegers, function (nonIntegerNumber) { - t.equal( - ES.IsNonNegativeInteger(nonIntegerNumber), - false, - debug(nonIntegerNumber) + ' is not a non-negative integer' - ); - }); - - forEach(v.zeroes.concat(v.integerNumbers), function (nonNegativeInteger) { - t.equal( - ES.IsNonNegativeInteger(nonNegativeInteger), - true, - debug(nonNegativeInteger) + ' is a non-negative integer' - ); - }); - - t.end(); - }); - - test('IsNoTearConfiguration', function (t) { - forEach(unclampedIntegerTypes, function (type) { - t.equal( - ES.IsNoTearConfiguration(type), - true, - debug(type) + ' with any order is a no-tear configuration' - ); - }); - - forEach(bigIntTypes, function (type) { - t.equal( - ES.IsNoTearConfiguration(type, 'Init'), - false, - debug(type) + ' with ' + debug('Init') + ' is not a no-tear configuration' - ); - - t.equal( - ES.IsNoTearConfiguration(type, 'Unordered'), - false, - debug(type) + ' with ' + debug('Unordered') + ' is not a no-tear configuration' - ); - - t.equal( - ES.IsNoTearConfiguration(type), - true, - debug(type) + ' with any other order is a no-tear configuration' - ); - }); - - forEach(clampedTypes, function (type) { - t.equal( - ES.IsNoTearConfiguration(type), - false, - debug(type) + ' with any order is not a no-tear configuration' - ); - }); - - t.end(); - }); - - test('LengthOfArrayLike', function (t) { - forEach(v.primitives, function (primitive) { - t['throws']( - function () { ES.LengthOfArrayLike(primitive); }, - TypeError, - debug(primitive) + ' is not an Object' - ); - }); - - t.equal(ES.LengthOfArrayLike([]), 0); - t.equal(ES.LengthOfArrayLike([1]), 1); - t.equal(ES.LengthOfArrayLike({ length: 42 }), 42); - - t.end(); - }); - - test('Number::add', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.add(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.add(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.add(+Infinity, +Infinity), +Infinity, '+∞ + +∞ is +∞'); - t.equal(ES.Number.add(-Infinity, -Infinity), -Infinity, '-∞ + -∞ is -∞'); - t.equal(ES.Number.add(+Infinity, -Infinity), NaN, '+∞ + -∞ is NaN'); - t.equal(ES.Number.add(-Infinity, +Infinity), NaN, '-∞ + +∞ is NaN'); - - t.equal(ES.Number.add(+0, +0), +0, '0 + 0 is +0'); - t.equal(ES.Number.add(+0, -0), +0, '0 + -0 is +0'); - t.equal(ES.Number.add(-0, +0), +0, '-0 + 0 is +0'); - t.equal(ES.Number.add(-0, -0), -0, '-0 + -0 is -0'); - - forEach(v.numbers, function (number) { - if (number !== 0) { - t.equal(ES.Number.add(number, 0), number, debug(number) + ' + 0 adds to ' + number); - } - t.equal(ES.Number.add(number, 1), number + 1, debug(number) + ' + 1 adds to ' + (number + 1)); - t.equal(ES.Number.add(1, number), number + 1, '1 + ' + debug(number) + ' adds to ' + (number + 1)); - t.equal(ES.Number.add(number, -42), number - 42, debug(number) + ' + -42 adds to ' + (number - 42)); - t.equal(ES.Number.add(-42, number), number - 42, '-42 + ' + debug(number) + ' adds to ' + (number - 42)); - }); - - t.end(); - }); - - test('Number::bitwiseAND', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.bitwiseAND(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.bitwiseAND(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.bitwiseAND(1, 2), 1 & 2); - - t.end(); - }); - - test('Number::bitwiseNOT', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.bitwiseNOT(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - forEach(v.int32s, function (int32) { - t.equal(ES.Number.bitwiseNOT(int32), ~int32, debug(int32) + ' becomes ~' + debug(int32)); - }); - - t.end(); - }); - - test('Number::bitwiseOR', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.bitwiseOR(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.bitwiseOR(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.bitwiseOR(1, 2), 1 | 2); - - t.end(); - }); - - test('Number::bitwiseXOR', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.bitwiseXOR(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.bitwiseXOR(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.bitwiseXOR(1, 2), 1 ^ 2); - - t.end(); - }); - - test('Number::divide', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.divide(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.divide(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.divide(Infinity, Infinity), NaN, '∞ / ∞ is NaN'); - t.equal(ES.Number.divide(-Infinity, Infinity), NaN, '-∞ / ∞ is NaN'); - t.equal(ES.Number.divide(Infinity, -Infinity), NaN, '∞ / -∞ is NaN'); - t.equal(ES.Number.divide(-Infinity, -Infinity), NaN, '-∞ / -∞ is NaN'); - - t.equal(ES.Number.divide(NaN, NaN), NaN, 'NaN / NaN is NaN'); - - t.equal(ES.Number.divide(+Infinity, +0), +Infinity, '+∞ / +0 is +∞'); - t.equal(ES.Number.divide(-Infinity, -0), +Infinity, '-∞ / -0 is +∞'); - t.equal(ES.Number.divide(+Infinity, -0), -Infinity, '+∞ / -0 is -∞'); - t.equal(ES.Number.divide(-Infinity, +0), -Infinity, '-∞ / +0 is -∞'); - - t.equal(ES.Number.divide(+0, +Infinity), +0, '+0 / +∞ is +0'); - t.equal(ES.Number.divide(-0, -Infinity), +0, '-0 / -∞ is +0'); - t.equal(ES.Number.divide(-0, +Infinity), -0, '-0 / +∞ is -0'); - t.equal(ES.Number.divide(+0, -Infinity), -0, '+0 / -∞ is -0'); - - forEach(v.numbers, function (number) { - if (number !== 0 && isFinite(number)) { - t.equal(ES.Number.divide(number, number), 1, debug(number) + ' divided by itself is 1'); - t.equal(ES.Number.divide(number, 2), number / 2, debug(number) + ' divided by 2 is half itself'); - } - }); - - t.end(); - }); - - test('Number::equal', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.equal(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.equal(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.equal(Infinity, Infinity), true, '∞ === ∞'); - t.equal(ES.Number.equal(-Infinity, Infinity), false, '-∞ !== ∞'); - t.equal(ES.Number.equal(Infinity, -Infinity), false, '∞ !== -∞'); - t.equal(ES.Number.equal(-Infinity, -Infinity), true, '-∞ === -∞'); - - t.equal(ES.Number.equal(NaN, NaN), false, 'NaN !== NaN'); - - t.equal(ES.Number.equal(Infinity, 0), false, '∞ !== 0'); - t.equal(ES.Number.equal(-Infinity, -0), false, '-∞ !== -0'); - t.equal(ES.Number.equal(Infinity, -0), false, '∞ !== -0'); - t.equal(ES.Number.equal(-Infinity, 0), false, '-∞ !== 0'); - - t.equal(ES.Number.equal(+0, +0), true, '+0 === +0'); - t.equal(ES.Number.equal(+0, -0), true, '+0 === -0'); - t.equal(ES.Number.equal(-0, +0), true, '-0 === +0'); - t.equal(ES.Number.equal(-0, -0), true, '-0 === -0'); - - forEach(v.numbers, function (number) { - if (isFinite(number)) { - t.equal(ES.Number.equal(number, number), true, debug(number) + ' is equal to itself'); - t.equal(ES.Number.equal(number, number + 1), false, debug(number) + ' is not equal to itself plus 1'); - } - }); - - t.end(); - }); - - test('Number::exponentiate', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.exponentiate(nonNumber, 0); }, - TypeError, - 'base: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.exponentiate(0, nonNumber); }, - TypeError, - 'exponent: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.exponentiate(0, 42), 0, '+0 ** 42 is +0'); - t.equal(ES.Number.exponentiate(0, -42), Infinity, '+0 ** 42 is +∞'); - t.equal(ES.Number.exponentiate(-0, 42), 0, '-0 ** 42 is +0'); - t.equal(ES.Number.exponentiate(-0, 41), -0, '-0 ** 41 is -0'); - t.equal(ES.Number.exponentiate(-0, -42), Infinity, '-0 ** 42 is +∞'); - t.equal(ES.Number.exponentiate(-0, -41), -Infinity, '-0 ** 41 is -∞'); - - t.equal(ES.Number.exponentiate(Infinity, 0), 1, '+∞ ** 0 is 1'); - t.equal(ES.Number.exponentiate(Infinity, -0), 1, '+∞ ** -0 is 1'); - t.equal(ES.Number.exponentiate(-Infinity, 0), 1, '-∞ ** 0 is 1'); - t.equal(ES.Number.exponentiate(-Infinity, -0), 1, '-∞ ** -0 is 1'); - - t.equal(ES.Number.exponentiate(Infinity, 1), Infinity, '+∞ ** 1 is +∞'); - t.equal(ES.Number.exponentiate(Infinity, 2), Infinity, '+∞ ** 2 is +∞'); - t.equal(ES.Number.exponentiate(Infinity, -1), +0, '+∞ ** -1 is +0'); - t.equal(ES.Number.exponentiate(Infinity, -2), +0, '+∞ ** -2 is +0'); - - t.equal(ES.Number.exponentiate(-Infinity, 1), -Infinity, '-∞ ** 1 is -∞'); - t.equal(ES.Number.exponentiate(-Infinity, 2), Infinity, '-∞ ** 2 is +∞'); - t.equal(ES.Number.exponentiate(-Infinity, -1), -0, '-∞ ** --1 is -0'); - t.equal(ES.Number.exponentiate(-Infinity, -2), +0, '-∞ ** --2 is +0'); - - t.equal(ES.Number.exponentiate(1.1, Infinity), Infinity, '1.1 ** +∞ is +∞'); - t.equal(ES.Number.exponentiate(1.1, -Infinity), 0, '1.1 ** -∞ is +0'); - t.equal(ES.Number.exponentiate(-1.1, Infinity), Infinity, '-1.1 ** +∞ is +∞'); - t.equal(ES.Number.exponentiate(-1.1, -Infinity), 0, '-1.1 ** -∞ is +0'); - - t.equal(ES.Number.exponentiate(1, Infinity), NaN, '1 ** +∞ is NaN'); - t.equal(ES.Number.exponentiate(1, -Infinity), NaN, '1 ** -∞ is NaN'); - t.equal(ES.Number.exponentiate(-1, Infinity), NaN, '-1 ** +∞ is NaN'); - t.equal(ES.Number.exponentiate(-1, -Infinity), NaN, '-1 ** -∞ is NaN'); - - t.equal(ES.Number.exponentiate(0.9, Infinity), 0, '0.9 ** +∞ is +0'); - t.equal(ES.Number.exponentiate(0.9, -Infinity), Infinity, '0.9 ** -∞ is ∞'); - t.equal(ES.Number.exponentiate(-0.9, Infinity), 0, '-0.9 ** +∞ is +0'); - t.equal(ES.Number.exponentiate(-0.9, -Infinity), Infinity, '-0.9 ** -∞ is +∞'); - - forEach(v.numbers.concat(NaN), function (number) { - t.equal(ES.Number.exponentiate(number, NaN), NaN, debug(number) + ' ** NaN is NaN'); - - if (number !== 0) { - t.equal(ES.Number.exponentiate(number, 0), 1, debug(number) + ' ** +0 is 1'); - t.equal(ES.Number.exponentiate(number, -0), 1, debug(number) + ' ** -0 is 1'); - t.equal(ES.Number.exponentiate(NaN, number), NaN, 'NaN ** ' + debug(number) + ' is NaN'); - } - - if (number !== 0 && isFinite(number)) { - t.equal(ES.Number.equal(number, number), true, debug(number) + ' is equal to itself'); - t.equal(ES.Number.equal(number, number + 1), false, debug(number) + ' is not equal to itself plus 1'); - } - }); - - t.end(); - }); - - test('Number::leftShift', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.leftShift(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.leftShift(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - forEach([0].concat(v.int32s), function (int32) { - forEach([1, 3, 5, 31, 32, 33], function (bits) { - t.equal(ES.Number.leftShift(int32, bits), int32 << bits, debug(int32) + ' << ' + bits + ' is ' + debug(int32 << bits)); - }); - }); - - t.end(); - }); - - test('Number::lessThan', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.lessThan(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.lessThan(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.lessThan(+0, -0), false, '+0 < -0 is false'); - t.equal(ES.Number.lessThan(+0, +0), false, '+0 < +0 is false'); - t.equal(ES.Number.lessThan(-0, +0), false, '-0 < +0 is false'); - t.equal(ES.Number.lessThan(-0, -0), false, '-0 < -0 is false'); - - t.equal(ES.Number.lessThan(NaN, NaN), undefined, 'NaN < NaN is undefined'); - - t.equal(ES.Number.lessThan(+Infinity, +Infinity), false, '+∞ < +∞ is false'); - t.equal(ES.Number.lessThan(+Infinity, -Infinity), false, '+∞ < -∞ is false'); - t.equal(ES.Number.lessThan(-Infinity, +Infinity), true, '-∞ < +∞ is true'); - t.equal(ES.Number.lessThan(-Infinity, -Infinity), false, '-∞ < -∞ is false'); - - forEach(v.numbers.concat(v.infinities), function (number) { - t.equal(ES.Number.lessThan(NaN, number), undefined, 'NaN < ' + debug(number) + ' is undefined'); - t.equal(ES.Number.lessThan(number, NaN), undefined, debug(number) + ' < NaN is undefined'); - - t.equal(ES.Number.lessThan(number, number), false, debug(number) + ' is not less than itself'); - - if (isFinite(number)) { - t.equal(ES.Number.lessThan(number, number + 1), true, debug(number) + ' < ' + debug(number + 1) + ' is true'); - t.equal(ES.Number.lessThan(number + 1, number), false, debug(number + 1) + ' < ' + debug(number) + ' is false'); - - t.equal(ES.Number.lessThan(Infinity, number), false, '+∞ < ' + debug(number) + ' is false'); - t.equal(ES.Number.lessThan(number, Infinity), true, debug(number) + ' < +∞ is true'); - t.equal(ES.Number.lessThan(-Infinity, number), true, '-∞ < ' + debug(number) + ' is true'); - t.equal(ES.Number.lessThan(number, -Infinity), false, debug(number) + ' < -∞ is false'); - } - }); - - t.end(); - }); - - test('Number::multiply', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.multiply(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.multiply(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - forEach([+0, -0, 1, -1], function (x) { - var expected = x === 0 ? NaN : Infinity; - t.equal(ES.Number.multiply(Infinity, x), expected, '+∞ * ' + debug(x) + ' is ' + debug(expected)); - t.equal(ES.Number.multiply(x, Infinity), expected, debug(x) + ' * +∞ is ' + debug(expected)); - t.equal(ES.Number.multiply(-Infinity, x), -expected, '-∞ * ' + debug(x) + ' is ' + debug(expected)); - t.equal(ES.Number.multiply(x, -Infinity), -expected, debug(x) + ' * -∞ is ' + debug(expected)); - }); - - t.equal(ES.Number.multiply(Infinity, Infinity), Infinity, '+∞ * +∞ is +∞'); - t.equal(ES.Number.multiply(Infinity, -Infinity), -Infinity, '+∞ * -∞ is -∞'); - t.equal(ES.Number.multiply(-Infinity, Infinity), -Infinity, '-∞ * +∞ is -∞'); - t.equal(ES.Number.multiply(-Infinity, -Infinity), Infinity, '-∞ * -∞ is +∞'); - - t.equal(ES.Number.multiply(+0, +0), +0, '0 * 0 is +0'); - t.equal(ES.Number.multiply(+0, -0), -0, '0 * -0 is -0'); - t.equal(ES.Number.multiply(-0, +0), -0, '-0 * 0 is -0'); - t.equal(ES.Number.multiply(-0, -0), +0, '-0 * -0 is +0'); - - forEach(v.numbers.concat(NaN), function (number) { - t.equal(ES.Number.multiply(NaN, number), NaN, 'NaN * ' + debug(number) + ' is NaN'); - t.equal(ES.Number.multiply(number, NaN), NaN, debug(number) + ' * NaN is NaN'); - - if (number !== 0 && isFinite(number)) { - t.equal(ES.Number.multiply(number, 0), number > 0 ? 0 : -0, debug(number) + ' * +0 produces ' + (number > 0 ? '+0' : '-0')); - t.equal(ES.Number.multiply(0, number), number > 0 ? 0 : -0, '+0 * ' + debug(number) + ' produces ' + (number > 0 ? '+0' : '-0')); - t.equal(ES.Number.multiply(number, -0), number > 0 ? -0 : 0, debug(number) + ' * -0 produces ' + (number > 0 ? '-0' : '+0')); - t.equal(ES.Number.multiply(-0, number), number > 0 ? -0 : 0, '-0 * ' + debug(number) + ' produces ' + (number > 0 ? '-0' : '+0')); - t.equal(ES.Number.multiply(number, 1), number, debug(number) + ' * 1 produces itself'); - t.equal(ES.Number.multiply(number, -42), number * -42, debug(number) + ' * -42 produces ' + (number - 42)); - } - }); - - t.end(); - }); - - test('Number::remainder', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.remainder(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.remainder(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.remainder(NaN, NaN), NaN, 'NaN % NaN is NaN'); - - t.equal(ES.Number.remainder(+0, +0), NaN, '+0 % +0 is NaN'); - t.equal(ES.Number.remainder(+0, -0), NaN, '+0 % -0 is NaN'); - t.equal(ES.Number.remainder(-0, +0), NaN, '-0 % +0 is NaN'); - t.equal(ES.Number.remainder(-0, -0), NaN, '-0 % -0 is NaN'); - - forEach(v.numbers, function (number) { - t.equal(ES.Number.remainder(number, NaN), NaN, debug(number) + ' % NaN is NaN'); - t.equal(ES.Number.remainder(NaN, number), NaN, 'NaN % ' + debug(number) + ' is NaN'); - - t.equal(ES.Number.remainder(Infinity, number), NaN, '+∞ % ' + debug(number) + ' is NaN'); - t.equal(ES.Number.remainder(-Infinity, number), NaN, '-∞ % ' + debug(number) + ' is NaN'); - t.equal(ES.Number.remainder(number, 0), NaN, debug(number) + ' % +0 is NaN'); - t.equal(ES.Number.remainder(number, -0), NaN, debug(number) + ' % -0 is NaN'); - - if (isFinite(number)) { - t.equal(ES.Number.remainder(number, Infinity), number, debug(number) + ' % +∞ is ' + debug(number)); - t.equal(ES.Number.remainder(number, -Infinity), number, debug(number) + ' % -∞ is ' + debug(number)); - if (number !== 0) { - t.equal(ES.Number.remainder(0, number), 0, '+0 % ' + debug(number) + ' is ' + debug(number)); - t.equal(ES.Number.remainder(-0, number), -0, '-0 % ' + debug(number) + ' is ' + debug(number)); - t.looseEqual(ES.Number.remainder(number * 2, number), 0, debug(number) + ' % ' + debug(number * 2) + ' is 0'); - } - } - }); - - t.end(); - }); - - test('Number::sameValue', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.sameValue(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.sameValue(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.ok(ES.Number.sameValue(NaN, NaN), true, 'NaN is the sameValue as NaN'); - - t.equal(ES.Number.sameValue(+0, +0), true, '+0 is sameValue as +0'); - t.equal(ES.Number.sameValue(+0, -0), false, '+0 is not sameValue as -0'); - t.equal(ES.Number.sameValue(-0, +0), false, '-0 is not sameValue as +0'); - t.equal(ES.Number.sameValue(-0, -0), true, '-0 is sameValue as -0'); - - forEach(v.numbers, function (number) { - t.ok(ES.Number.sameValue(number, number), debug(number) + ' is the sameValue as itself'); - }); - - t.end(); - }); - - test('Number::sameValueZero', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.sameValueZero(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.sameValueZero(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.ok(ES.Number.sameValueZero(NaN, NaN), true, 'NaN is the sameValueZero as NaN'); - - t.equal(ES.Number.sameValueZero(+0, +0), true, '+0 is sameValueZero as +0'); - t.equal(ES.Number.sameValueZero(+0, -0), true, '+0 is sameValueZero as -0'); - t.equal(ES.Number.sameValueZero(-0, +0), true, '-0 is sameValueZero as +0'); - t.equal(ES.Number.sameValueZero(-0, -0), true, '-0 is sameValueZero as -0'); - - forEach(v.numbers, function (number) { - t.ok(ES.Number.sameValueZero(number, number), debug(number) + ' is the sameValueZero as itself'); - }); - - t.end(); - }); - - test('Number::signedRightShift', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.signedRightShift(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.signedRightShift(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - forEach([0].concat(v.int32s), function (int32) { - forEach([1, 3, 5, 31, 32, 33], function (bits) { - t.equal(ES.Number.signedRightShift(int32, bits), int32 >> bits, debug(int32) + ' >> ' + bits + ' is ' + debug(int32 >> bits)); - }); - }); - - t.end(); - }); - - test('Number::subtract', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.subtract(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.subtract(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.subtract(+0, +0), +0, '0 - 0 is +0'); - t.equal(ES.Number.subtract(+0, -0), +0, '0 - -0 is +0'); - t.equal(ES.Number.subtract(-0, +0), -0, '-0 - 0 is -0'); - t.equal(ES.Number.subtract(-0, -0), +0, '-0 - -0 is +0'); - - forEach(v.numbers, function (number) { - if (number !== 0) { - t.equal(ES.Number.subtract(number, 0), number, debug(number) + ' - 0 produces ' + number); - } - t.equal(ES.Number.subtract(number, 1), number - 1, debug(number) + ' - 1 produces ' + (number + 1)); - t.equal(ES.Number.subtract(number, 42), number - 42, debug(number) + ' - 42 produces ' + (number - 42)); - }); - - t.end(); - }); - - test('Number::toString', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.toString(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - forEach(v.numbers, function (number) { - t.equal(ES.Number.toString(number), String(number), debug(number) + ' stringifies to ' + number); - }); - - t.end(); - }); - - test('Number::unaryMinus', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.unaryMinus(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.Number.unaryMinus(NaN), NaN, 'NaN produces NaN'); - - forEach(v.numbers, function (number) { - t.equal(ES.Number.unaryMinus(number), -number, debug(number) + ' produces -' + debug(number)); - }); - - t.end(); - }); - - test('Number::unsignedRightShift', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.Number.unsignedRightShift(nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.Number.unsignedRightShift(0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - forEach([0].concat(v.int32s), function (int32) { - forEach([1, 3, 5, 31, 32, 33], function (bits) { - t.equal(ES.Number.unsignedRightShift(int32, bits), int32 >>> bits, debug(int32) + ' >>> ' + bits + ' is ' + debug(int32 >>> bits)); - }); - }); - - t.end(); - }); - - test('NumberToBigInt', function (t) { - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.NumberToBigInt(nonNumber); }, - TypeError, - debug(nonNumber) + ' is not a Number' - ); - }); - - forEach(v.nonIntegerNumbers, function (nonIntegerNumber) { - t['throws']( - function () { ES.NumberToBigInt(nonIntegerNumber); }, - RangeError, - debug(nonIntegerNumber) + ' is not an integer' - ); - }); - - t.test('actual BigInts', { skip: !hasBigInts }, function (st) { - forEach(v.integerNumbers, function (int) { - if (int >= 1e17) { - // BigInt(1e17) throws on node v10.4 - v10.8 - try { - st.equal(ES.NumberToBigInt(int), $BigInt(int), debug(int) + ' becomes ' + debug($BigInt(int))); - } catch (e) { - st['throws']( - function () { $BigInt(int); }, - RangeError, - debug(int) + ' is too large on this engine to convert into a BigInt' - ); - } - } else { - st.equal(ES.NumberToBigInt(int), $BigInt(int), debug(int) + ' becomes ' + debug($BigInt(int))); - } - }); - st.end(); - }); - - t.end(); - }); - - test('OrdinaryObjectCreate', function (t) { - forEach(v.nonNullPrimitives, function (value) { - t['throws']( - function () { ES.OrdinaryObjectCreate(value); }, - TypeError, - debug(value) + ' is not null, or an object' - ); - }); - - t.test('proto arg', function (st) { - var Parent = function Parent() {}; - Parent.prototype.foo = {}; - var child = ES.OrdinaryObjectCreate(Parent.prototype); - st.equal(child instanceof Parent, true, 'child is instanceof Parent'); - st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype'); - - st.end(); - }); - - t.test('internal slots arg', function (st) { - st.doesNotThrow(function () { ES.OrdinaryObjectCreate({}, []); }, 'an empty slot list is valid'); - - st['throws']( - function () { ES.OrdinaryObjectCreate({}, ['a']); }, - SyntaxError, - 'internal slots are not supported' - ); - - st.end(); - }); - - t.test('null proto', { skip: !$setProto }, function (st) { - st.equal('toString' in {}, true, 'normal objects have toString'); - st.equal('toString' in ES.OrdinaryObjectCreate(null), false, 'makes a null object'); - - st.end(); - }); - - t.test('null proto when no native Object.create', { skip: $setProto }, function (st) { - st['throws']( - function () { ES.OrdinaryObjectCreate(null); }, - SyntaxError, - 'without a native Object.create, can not create null objects' - ); - - st.end(); - }); - - t.end(); - }); - - test('SameValueNonNumeric', function (t) { - var willThrow = [ - [3, 4], - [NaN, 4], - [4, ''], - ['abc', true], - [{}, false] - ]; - forEach(willThrow, function (nums) { - t['throws'](function () { return ES.SameValueNonNumeric.apply(ES, nums); }, TypeError, 'value must be same type and non-number'); - }); - - forEach(v.objects.concat(v.nonNumberPrimitives), function (val) { - t.equal(val === val, ES.SameValueNonNumeric(val, val), debug(val) + ' is SameValueNonNumeric to itself'); - }); - - t.end(); - }); - - test('StringPad', function (t) { - t.equal(ES.StringPad('a', 3, undefined, 'start'), ' a'); - t.equal(ES.StringPad('a', 3, undefined, 'end'), 'a '); - t.equal(ES.StringPad('a', 3, '0', 'start'), '00a'); - t.equal(ES.StringPad('a', 3, '0', 'end'), 'a00'); - t.equal(ES.StringPad('a', 3, '012', 'start'), '01a'); - t.equal(ES.StringPad('a', 3, '012', 'end'), 'a01'); - t.equal(ES.StringPad('a', 7, '012', 'start'), '012012a'); - t.equal(ES.StringPad('a', 7, '012', 'end'), 'a012012'); - - t.end(); - }); - - test('thisBigIntValue', { skip: !hasBigInts }, function (t) { - t.equal(ES.thisBigIntValue(BigInt(42)), BigInt(42)); - t.equal(ES.thisBigIntValue(Object(BigInt(42))), BigInt(42)); - - forEach(v.nonBigInts, function (nonBigInt) { - t['throws']( - function () { ES.thisBigIntValue(nonBigInt); }, - TypeError, - debug(nonBigInt) + ' is not a BigInt' - ); - }); - - t.end(); - }); - - test('ToInteger', function (t) { - forEach([0, -0, NaN], function (num) { - t.equal(0, ES.ToInteger(num), debug(num) + ' returns +0'); - }); - forEach([Infinity, 42], function (num) { - t.equal(num, ES.ToInteger(num), debug(num) + ' returns itself'); - t.equal(-num, ES.ToInteger(-num), '-' + debug(num) + ' returns itself'); - }); - t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3'); - t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); - t.end(); - }); - - test('ToNumber', function (t) { - testToNumber(t, ES, ES.ToNumber); - - forEach(v.bigints, function (bigInt) { - t['throws']( - function () { ES.ToNumber(bigInt); }, - TypeError, - 'ToNumber of ' + debug(bigInt) + ' throws' - ); - - var boxed = Object(bigInt); - t['throws']( - function () { ES.ToNumber(boxed); }, - TypeError, - 'ToNumber of ' + debug(boxed) + ' throws' - ); - }); - - t.end(); - }); - - test('UTF16DecodeSurrogatePair', function (t) { - t['throws']( - function () { ES.UTF16DecodeSurrogatePair('a'.charCodeAt(0), trailingPoo.charCodeAt(0)); }, - TypeError, - '"a" is not a leading surrogate' - ); - t['throws']( - function () { ES.UTF16DecodeSurrogatePair(leadingPoo.charCodeAt(0), 'b'.charCodeAt(0)); }, - TypeError, - '"b" is not a trailing surrogate' - ); - - t.equal(ES.UTF16DecodeSurrogatePair(leadingPoo.charCodeAt(0), trailingPoo.charCodeAt(0)), wholePoo); - - t.end(); - }); - - test('NumberBitwiseOp', function (t) { - t['throws']( - function () { ES.NumberBitwiseOp('invalid', 0, 0); }, - TypeError, - 'throws with an invalid op' - ); - - forEach(v.nonNumbers, function (nonNumber) { - t['throws']( - function () { ES.NumberBitwiseOp('&', nonNumber, 0); }, - TypeError, - 'x: ' + debug(nonNumber) + ' is not a Number' - ); - t['throws']( - function () { ES.NumberBitwiseOp('&', 0, nonNumber); }, - TypeError, - 'y: ' + debug(nonNumber) + ' is not a Number' - ); - }); - - t.equal(ES.NumberBitwiseOp('&', 1, 2), 1 & 2); - t.equal(ES.NumberBitwiseOp('|', 1, 2), 1 | 2); - t.equal(ES.NumberBitwiseOp('^', 1, 2), 1 ^ 2); - - t.end(); - }); - - test('ToNumeric', function (t) { - testToNumber(t, ES, ES.ToNumeric); - - t.test('BigInts', { skip: !hasBigInts }, function (st) { - st.equal(ES.ToNumeric(BigInt(42)), BigInt(42), debug(BigInt(42)) + ' is ' + debug(BigInt(42))); - st.equal(ES.ToNumeric(Object(BigInt(42))), BigInt(42), debug(Object(BigInt(42))) + ' is ' + debug(BigInt(42))); - - var valueOf = { valueOf: function () { return BigInt(7); } }; - st.equal(ES.ToNumeric(valueOf), valueOf.valueOf(), debug(valueOf) + ' is ' + debug(valueOf.valueOf())); - - var toPrimitive = {}; - var value = BigInt(-2); - toPrimitive[Symbol.toPrimitive] = function () { return value; }; - st.equal(ES.ToNumeric(toPrimitive), value, debug(toPrimitive) + ' is ' + debug(value)); - - st.end(); - }); - - t.end(); - }); - - test('UTF16DecodeString', function (t) { - forEach(v.nonStrings, function (nonString) { - t['throws']( - function () { ES.UTF16DecodeString(nonString); }, - TypeError, - debug(nonString) + ' is not a String' - ); - }); - - t.deepEqual(ES.UTF16DecodeString('abc'), ['a', 'b', 'c'], 'code units get split'); - t.deepEqual(ES.UTF16DecodeString('a' + wholePoo + 'c'), ['a', wholePoo, 'c'], 'code points get split too'); - - t.end(); - }); -}; - -module.exports = { - es5: es5, - es2015: es2015, - es2016: es2016, - es2017: es2017, - es2018: es2018, - es2019: es2019, - es2020: es2020 -}; diff --git a/build/node_modules/es-to-primitive/.eslintrc b/build/node_modules/es-to-primitive/.eslintrc deleted file mode 100644 index b6639b96..00000000 --- a/build/node_modules/es-to-primitive/.eslintrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 14], - "func-name-matching": 0, - "id-length": [2, { "min": 1, "max": 24, "properties": "never" }], - "max-statements": [2, 20], - "new-cap": [2, { "capIsNewExceptions": ["GetMethod"] }] - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "max-lines-per-function": [2, { "max": 68 }], - }, - } - ], -} diff --git a/build/node_modules/es-to-primitive/.github/FUNDING.yml b/build/node_modules/es-to-primitive/.github/FUNDING.yml deleted file mode 100644 index 9f928ae8..00000000 --- a/build/node_modules/es-to-primitive/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/es-to-primitive -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/es-to-primitive/.travis.yml b/build/node_modules/es-to-primitive/.travis.yml deleted file mode 100644 index d4c5a842..00000000 --- a/build/node_modules/es-to-primitive/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: ~> 1.0 -language: node_js -cache: - directories: - - "$(nvm cache dir)" -os: - - linux -import: - - ljharb/travis-ci:node/all.yml - - ljharb/travis-ci:node/pretest.yml - - ljharb/travis-ci:node/posttest.yml - - ljharb/travis-ci:node/coverage.yml -matrix: - allow_failures: - - env: COVERAGE=true diff --git a/build/node_modules/es-to-primitive/CHANGELOG.md b/build/node_modules/es-to-primitive/CHANGELOG.md deleted file mode 100644 index 0a5dda78..00000000 --- a/build/node_modules/es-to-primitive/CHANGELOG.md +++ /dev/null @@ -1,49 +0,0 @@ -1.2.1 / 2019-11-08 -================= - * [readme] remove testling URLs - * [meta] add `funding` field - * [meta] create FUNDING.yml - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `replace`, `semver`, `tape`, `function.prototype.name` - * [Tests] use shared travis-ci configs - * [Tests] Add es5 tests for `symbol` types (#45) - * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops - * [Tests] remove `jscs` - -1.2.0 / 2018-09-27 -================= - * [New] create ES2015 entry point/property, to replace ES6 - * [Fix] Ensure optional arguments are not part of the length (#29) - * [Deps] update `is-callable` - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `object-inspect`, `replace` - * [Tests] avoid util.inspect bug with `new Date(NaN)` on node v6.0 and v6.1. - * [Tests] up to `node` `v10.11`, `v9.11`, `v8.12`, `v6.14`, `v4.9` - -1.1.1 / 2016-01-03 -================= - * [Fix: ES5] fix coercion logic: ES5’s ToPrimitive does not coerce any primitive value, regardless of hint (#2) - -1.1.0 / 2015-12-27 -================= - * [New] add `Symbol.toPrimitive` support - * [Deps] update `is-callable`, `is-date-object` - * [Dev Deps] update `eslint`, `tape`, `semver`, `jscs`, `covert`, `nsp`, `@ljharb/eslint-config` - * [Dev Deps] remove unused deps - * [Tests] up to `node` `v5.3` - * [Tests] fix npm upgrades on older node versions - * [Tests] fix testling - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - -1.0.1 / 2016-01-03 -================= - * [Fix: ES5] fix coercion logic: ES5’s ToPrimitive does not coerce any primitive value, regardless of hint (#2) - * [Deps] update `is-callable`, `is-date-object` - * [Dev Deps] update `eslint`, `tape`, `semver`, `jscs`, `covert`, `nsp`, `@ljharb/eslint-config` - * [Dev Deps] remove unused deps - * [Tests] up to `node` `v5.3` - * [Tests] fix npm upgrades on older node versions - * [Tests] fix testling - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - -1.0.0 / 2015-03-19 -================= - * Initial release. diff --git a/build/node_modules/es-to-primitive/LICENSE b/build/node_modules/es-to-primitive/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/es-to-primitive/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/es-to-primitive/Makefile b/build/node_modules/es-to-primitive/Makefile deleted file mode 100644 index b9e4fe1a..00000000 --- a/build/node_modules/es-to-primitive/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. -$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) - - # The files that need updating when incrementing the version number. -VERSIONED_FILES := *.js *.json README* - - -# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. -# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment -# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. -export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") -UTILS := semver -# Make sure that all required utilities can be located. -UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) - -# Default target (by virtue of being the first non '.'-prefixed in the file). -.PHONY: _no-target-specified -_no-target-specified: - $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) - -# Lists all targets defined in this makefile. -.PHONY: list -list: - @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort - -# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). -.PHONY: test -test: - @npm test - -.PHONY: _ensure-tag -_ensure-tag: -ifndef TAG - $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) -endif - -CHANGELOG_ERROR = $(error No CHANGELOG specified) -.PHONY: _ensure-changelog -_ensure-changelog: - @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2) - -# Ensures that the git workspace is clean. -.PHONY: _ensure-clean -_ensure-clean: - @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } - -# Makes a release; invoke with `make TAG= release`. -.PHONY: release -release: _ensure-tag _ensure-changelog _ensure-clean - @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ - new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ - if printf "$$new_ver" | command grep -q '^[0-9]'; then \ - semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ - semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ - else \ - new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ - fi; \ - printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ - replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ - git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \ - git tag -a -m "v$$new_ver" "v$$new_ver" diff --git a/build/node_modules/es-to-primitive/README.md b/build/node_modules/es-to-primitive/README.md deleted file mode 100644 index 5ce322bf..00000000 --- a/build/node_modules/es-to-primitive/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# es-to-primitive [![Version Badge][npm-version-svg]][package-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -ECMAScript “ToPrimitive” algorithm. Provides ES5 and ES2015 versions. -When different versions of the spec conflict, the default export will be the latest version of the abstract operation. -Alternative versions will also be available under an `es5`/`es2015` exported property if you require a specific version. - -## Example - -```js -var toPrimitive = require('es-to-primitive'); -var assert = require('assert'); - -assert(toPrimitive(function () {}) === String(function () {})); - -var date = new Date(); -assert(toPrimitive(date) === String(date)); - -assert(toPrimitive({ valueOf: function () { return 3; } }) === 3); - -assert(toPrimitive(['a', 'b', 3]) === String(['a', 'b', 3])); - -var sym = Symbol(); -assert(toPrimitive(Object(sym)) === sym); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.org/package/es-to-primitive -[npm-version-svg]: http://versionbadg.es/ljharb/es-to-primitive.svg -[travis-svg]: https://travis-ci.org/ljharb/es-to-primitive.svg -[travis-url]: https://travis-ci.org/ljharb/es-to-primitive -[deps-svg]: https://david-dm.org/ljharb/es-to-primitive.svg -[deps-url]: https://david-dm.org/ljharb/es-to-primitive -[dev-deps-svg]: https://david-dm.org/ljharb/es-to-primitive/dev-status.svg -[dev-deps-url]: https://david-dm.org/ljharb/es-to-primitive#info=devDependencies -[npm-badge-png]: https://nodei.co/npm/es-to-primitive.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/es-to-primitive.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/es-to-primitive.svg -[downloads-url]: http://npm-stat.com/charts.html?package=es-to-primitive diff --git a/build/node_modules/es-to-primitive/es2015.js b/build/node_modules/es-to-primitive/es2015.js deleted file mode 100644 index 4a11a346..00000000 --- a/build/node_modules/es-to-primitive/es2015.js +++ /dev/null @@ -1,75 +0,0 @@ -'use strict'; - -var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; - -var isPrimitive = require('./helpers/isPrimitive'); -var isCallable = require('is-callable'); -var isDate = require('is-date-object'); -var isSymbol = require('is-symbol'); - -var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) { - if (typeof O === 'undefined' || O === null) { - throw new TypeError('Cannot call method on ' + O); - } - if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) { - throw new TypeError('hint must be "string" or "number"'); - } - var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; - var method, result, i; - for (i = 0; i < methodNames.length; ++i) { - method = O[methodNames[i]]; - if (isCallable(method)) { - result = method.call(O); - if (isPrimitive(result)) { - return result; - } - } - } - throw new TypeError('No default value'); -}; - -var GetMethod = function GetMethod(O, P) { - var func = O[P]; - if (func !== null && typeof func !== 'undefined') { - if (!isCallable(func)) { - throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function'); - } - return func; - } - return void 0; -}; - -// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive -module.exports = function ToPrimitive(input) { - if (isPrimitive(input)) { - return input; - } - var hint = 'default'; - if (arguments.length > 1) { - if (arguments[1] === String) { - hint = 'string'; - } else if (arguments[1] === Number) { - hint = 'number'; - } - } - - var exoticToPrim; - if (hasSymbols) { - if (Symbol.toPrimitive) { - exoticToPrim = GetMethod(input, Symbol.toPrimitive); - } else if (isSymbol(input)) { - exoticToPrim = Symbol.prototype.valueOf; - } - } - if (typeof exoticToPrim !== 'undefined') { - var result = exoticToPrim.call(input, hint); - if (isPrimitive(result)) { - return result; - } - throw new TypeError('unable to convert exotic object to primitive'); - } - if (hint === 'default' && (isDate(input) || isSymbol(input))) { - hint = 'string'; - } - return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint); -}; diff --git a/build/node_modules/es-to-primitive/es5.js b/build/node_modules/es-to-primitive/es5.js deleted file mode 100644 index 602aa362..00000000 --- a/build/node_modules/es-to-primitive/es5.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; - -var isPrimitive = require('./helpers/isPrimitive'); - -var isCallable = require('is-callable'); - -// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8 -var ES5internalSlots = { - '[[DefaultValue]]': function (O) { - var actualHint; - if (arguments.length > 1) { - actualHint = arguments[1]; - } else { - actualHint = toStr.call(O) === '[object Date]' ? String : Number; - } - - if (actualHint === String || actualHint === Number) { - var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString']; - var value, i; - for (i = 0; i < methods.length; ++i) { - if (isCallable(O[methods[i]])) { - value = O[methods[i]](); - if (isPrimitive(value)) { - return value; - } - } - } - throw new TypeError('No default value'); - } - throw new TypeError('invalid [[DefaultValue]] hint supplied'); - } -}; - -// http://ecma-international.org/ecma-262/5.1/#sec-9.1 -module.exports = function ToPrimitive(input) { - if (isPrimitive(input)) { - return input; - } - if (arguments.length > 1) { - return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]); - } - return ES5internalSlots['[[DefaultValue]]'](input); -}; diff --git a/build/node_modules/es-to-primitive/es6.js b/build/node_modules/es-to-primitive/es6.js deleted file mode 100644 index 2d1f4dc9..00000000 --- a/build/node_modules/es-to-primitive/es6.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./es2015'); diff --git a/build/node_modules/es-to-primitive/helpers/isPrimitive.js b/build/node_modules/es-to-primitive/helpers/isPrimitive.js deleted file mode 100644 index 06f0bf04..00000000 --- a/build/node_modules/es-to-primitive/helpers/isPrimitive.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function isPrimitive(value) { - return value === null || (typeof value !== 'function' && typeof value !== 'object'); -}; diff --git a/build/node_modules/es-to-primitive/index.js b/build/node_modules/es-to-primitive/index.js deleted file mode 100644 index e60d912e..00000000 --- a/build/node_modules/es-to-primitive/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var ES5 = require('./es5'); -var ES6 = require('./es6'); -var ES2015 = require('./es2015'); - -if (Object.defineProperty) { - Object.defineProperty(ES2015, 'ES5', { enumerable: false, value: ES5 }); - Object.defineProperty(ES2015, 'ES6', { enumerable: false, value: ES6 }); - Object.defineProperty(ES2015, 'ES2015', { enumerable: false, value: ES2015 }); -} else { - ES6.ES5 = ES5; - ES6.ES6 = ES6; - ES6.ES2015 = ES2015; -} - -module.exports = ES2015; diff --git a/build/node_modules/es-to-primitive/package.json b/build/node_modules/es-to-primitive/package.json deleted file mode 100644 index cb253e2a..00000000 --- a/build/node_modules/es-to-primitive/package.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "_from": "es-to-primitive@^1.2.1", - "_id": "es-to-primitive@1.2.1", - "_inBundle": false, - "_integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "_location": "/es-to-primitive", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "es-to-primitive@^1.2.1", - "name": "es-to-primitive", - "escapedName": "es-to-primitive", - "rawSpec": "^1.2.1", - "saveSpec": null, - "fetchSpec": "^1.2.1" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "_shasum": "e55cd4c9cdc188bcefb03b366c736323fc5c898a", - "_spec": "es-to-primitive@^1.2.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "bugs": { - "url": "https://github.com/ljharb/es-to-primitive/issues" - }, - "bundleDependencies": false, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "deprecated": false, - "description": "ECMAScript “ToPrimitive” algorithm. Provides ES5 and ES2015 versions.", - "devDependencies": { - "@ljharb/eslint-config": "^15.0.0", - "covert": "^1.1.1", - "eslint": "^6.6.0", - "foreach": "^2.0.5", - "function.prototype.name": "^1.1.1", - "has-symbols": "^1.0.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "replace": "^1.1.1", - "semver": "^6.3.0", - "tape": "^4.11.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/ljharb/es-to-primitive#readme", - "keywords": [ - "primitive", - "abstract", - "ecmascript", - "es5", - "es6", - "es2015", - "toPrimitive", - "coerce", - "type", - "object", - "string", - "number", - "boolean", - "symbol", - "null", - "undefined" - ], - "license": "MIT", - "main": "index.js", - "name": "es-to-primitive", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/es-to-primitive.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "coverage-quiet": "covert test/*.js --quiet", - "lint": "eslint .", - "posttest": "npx aud", - "pretest": "npm run --silent lint", - "test": "npm run --silent tests-only", - "tests-only": "node --es-staging test" - }, - "testling": { - "files": "test", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.2.1" -} diff --git a/build/node_modules/es-to-primitive/test/es2015.js b/build/node_modules/es-to-primitive/test/es2015.js deleted file mode 100644 index 80f4083d..00000000 --- a/build/node_modules/es-to-primitive/test/es2015.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -var test = require('tape'); -var toPrimitive = require('../es2015'); -var is = require('object-is'); -var forEach = require('foreach'); -var functionName = require('function.prototype.name'); -var debug = require('object-inspect'); - -var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; -var hasSymbolToPrimitive = hasSymbols && typeof Symbol.toPrimitive === 'symbol'; - -test('function properties', function (t) { - t.equal(toPrimitive.length, 1, 'length is 1'); - t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive'); - - t.end(); -}); - -var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc']; - -test('primitives', function (t) { - forEach(primitives, function (i) { - t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value'); - t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value'); - t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value'); - }); - t.end(); -}); - -test('Symbols', { skip: !hasSymbols }, function (t) { - var symbols = [ - Symbol('foo'), - Symbol.iterator, - Symbol['for']('foo') // eslint-disable-line no-restricted-properties - ]; - forEach(symbols, function (sym) { - t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value'); - t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value'); - t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value'); - }); - - var primitiveSym = Symbol('primitiveSym'); - var objectSym = Object(primitiveSym); - t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym)); - t.equal(toPrimitive(objectSym, String), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(primitiveSym)); - t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym)); - t.end(); -}); - -test('Arrays', function (t) { - var arrays = [[], ['a', 'b'], [1, 2]]; - forEach(arrays, function (arr) { - t.equal(toPrimitive(arr), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - t.equal(toPrimitive(arr, String), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - t.equal(toPrimitive(arr, Number), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - }); - t.end(); -}); - -test('Dates', function (t) { - var dates = [new Date(), new Date(0), new Date(NaN)]; - forEach(dates, function (date) { - t.equal(toPrimitive(date), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date'); - t.equal(toPrimitive(date, String), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date'); - t.ok(is(toPrimitive(date, Number), Number(date)), 'toPrimitive(' + debug(date) + ') returns the number version of the date'); - }); - t.end(); -}); - -var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } }; -var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } }; -var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } }; -var coercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return 42; } -}; -var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } }; -var uncoercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return function toStrFn() {}; } -}; - -test('Objects', function (t) { - t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf'); - t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf'); - t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to non-stringified toString'); - - t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to non-stringified toString'); - t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to non-stringified toString'); - t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to non-stringified toString'); - - t.equal(toPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString'); - t.equal(toPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to Object#toString'); - t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString'); - - t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns non-stringified toString'); - t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns non-stringified toString'); - t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns non-stringified toString'); - - t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns non-stringified valueOf'); - - t.test('Symbol.toPrimitive', { skip: !hasSymbolToPrimitive }, function (st) { - var overriddenObject = { toString: st.fail, valueOf: st.fail }; - overriddenObject[Symbol.toPrimitive] = function (hint) { return String(hint); }; - - st.equal(toPrimitive(overriddenObject), 'default', 'object with Symbol.toPrimitive + no hint invokes that'); - st.equal(toPrimitive(overriddenObject, Number), 'number', 'object with Symbol.toPrimitive + hint Number invokes that'); - st.equal(toPrimitive(overriddenObject, String), 'string', 'object with Symbol.toPrimitive + hint String invokes that'); - - var nullToPrimitive = { toString: coercibleObject.toString, valueOf: coercibleObject.valueOf }; - nullToPrimitive[Symbol.toPrimitive] = null; - st.equal(toPrimitive(nullToPrimitive), toPrimitive(coercibleObject), 'object with no hint + null Symbol.toPrimitive ignores it'); - st.equal(toPrimitive(nullToPrimitive, Number), toPrimitive(coercibleObject, Number), 'object with hint Number + null Symbol.toPrimitive ignores it'); - st.equal(toPrimitive(nullToPrimitive, String), toPrimitive(coercibleObject, String), 'object with hint String + null Symbol.toPrimitive ignores it'); - - st.test('exceptions', function (sst) { - var nonFunctionToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - nonFunctionToPrimitive[Symbol.toPrimitive] = {}; - sst['throws'](toPrimitive.bind(null, nonFunctionToPrimitive), TypeError, 'Symbol.toPrimitive returning a non-function throws'); - - var uncoercibleToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - uncoercibleToPrimitive[Symbol.toPrimitive] = function (hint) { - return { toString: function () { return hint; } }; - }; - sst['throws'](toPrimitive.bind(null, uncoercibleToPrimitive), TypeError, 'Symbol.toPrimitive returning an object throws'); - - var throwingToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - throwingToPrimitive[Symbol.toPrimitive] = function (hint) { throw new RangeError(hint); }; - sst['throws'](toPrimitive.bind(null, throwingToPrimitive), RangeError, 'Symbol.toPrimitive throwing throws'); - - sst.end(); - }); - - st.end(); - }); - - t.test('exceptions', function (st) { - st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError'); - - st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError'); - st.end(); - }); - t.end(); -}); diff --git a/build/node_modules/es-to-primitive/test/es5.js b/build/node_modules/es-to-primitive/test/es5.js deleted file mode 100644 index 79444b0b..00000000 --- a/build/node_modules/es-to-primitive/test/es5.js +++ /dev/null @@ -1,118 +0,0 @@ -'use strict'; - -var test = require('tape'); -var toPrimitive = require('../es5'); -var is = require('object-is'); -var forEach = require('foreach'); -var functionName = require('function.prototype.name'); -var debug = require('object-inspect'); -var hasSymbols = require('has-symbols')(); - -test('function properties', function (t) { - t.equal(toPrimitive.length, 1, 'length is 1'); - t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive'); - - t.end(); -}); - -var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc']; - -test('primitives', function (t) { - forEach(primitives, function (i) { - t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value'); - t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value'); - t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value'); - }); - t.end(); -}); - -test('Symbols', { skip: !hasSymbols }, function (t) { - var symbols = [ - Symbol('foo'), - Symbol.iterator, - Symbol['for']('foo') // eslint-disable-line no-restricted-properties - ]; - forEach(symbols, function (sym) { - t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value'); - t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value'); - t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value'); - }); - - var primitiveSym = Symbol('primitiveSym'); - var stringSym = Symbol.prototype.toString.call(primitiveSym); - var objectSym = Object(primitiveSym); - t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym)); - - // This is different from ES2015, as the ES5 algorithm doesn't account for the existence of Symbols: - t.equal(toPrimitive(objectSym, String), stringSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(stringSym)); - t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym)); - t.end(); -}); - -test('Arrays', function (t) { - var arrays = [[], ['a', 'b'], [1, 2]]; - forEach(arrays, function (arr) { - t.ok(is(toPrimitive(arr), arr.toString()), 'toPrimitive(' + debug(arr) + ') returns toString of the array'); - t.equal(toPrimitive(arr, String), arr.toString(), 'toPrimitive(' + debug(arr) + ') returns toString of the array'); - t.ok(is(toPrimitive(arr, Number), arr.toString()), 'toPrimitive(' + debug(arr) + ') returns toString of the array'); - }); - t.end(); -}); - -test('Dates', function (t) { - var dates = [new Date(), new Date(0), new Date(NaN)]; - forEach(dates, function (date) { - t.equal(toPrimitive(date), date.toString(), 'toPrimitive(' + debug(date) + ') returns toString of the date'); - t.equal(toPrimitive(date, String), date.toString(), 'toPrimitive(' + debug(date) + ') returns toString of the date'); - t.ok(is(toPrimitive(date, Number), date.valueOf()), 'toPrimitive(' + debug(date) + ') returns valueOf of the date'); - }); - t.end(); -}); - -var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } }; -var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } }; -var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } }; -var coercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return 42; } -}; -var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } }; -var uncoercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return function toStrFn() {}; } -}; - -test('Objects', function (t) { - t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf'); - t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to toString'); - t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf'); - - t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to toString'); - t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to toString'); - t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to toString'); - - t.ok(is(toPrimitive({}), '[object Object]'), '{} with no hint coerces to Object#toString'); - t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString'); - t.ok(is(toPrimitive({}, Number), '[object Object]'), '{} with hint Number coerces to Object#toString'); - - t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns toString'); - t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns toString'); - t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns toString'); - - t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf'); - - t.test('exceptions', function (st) { - st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError'); - - st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError'); - st.end(); - }); - - t.end(); -}); diff --git a/build/node_modules/es-to-primitive/test/es6.js b/build/node_modules/es-to-primitive/test/es6.js deleted file mode 100644 index 16ea0e8f..00000000 --- a/build/node_modules/es-to-primitive/test/es6.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -var test = require('tape'); -var toPrimitive = require('../es6'); -var is = require('object-is'); -var forEach = require('foreach'); -var functionName = require('function.prototype.name'); -var debug = require('object-inspect'); - -var hasSymbols = require('has-symbols')(); -var hasSymbolToPrimitive = hasSymbols && typeof Symbol.toPrimitive === 'symbol'; - -test('function properties', function (t) { - t.equal(toPrimitive.length, 1, 'length is 1'); - t.equal(functionName(toPrimitive), 'ToPrimitive', 'name is ToPrimitive'); - - t.end(); -}); - -var primitives = [null, undefined, true, false, 0, -0, 42, NaN, Infinity, -Infinity, '', 'abc']; - -test('primitives', function (t) { - forEach(primitives, function (i) { - t.ok(is(toPrimitive(i), i), 'toPrimitive(' + debug(i) + ') returns the same value'); - t.ok(is(toPrimitive(i, String), i), 'toPrimitive(' + debug(i) + ', String) returns the same value'); - t.ok(is(toPrimitive(i, Number), i), 'toPrimitive(' + debug(i) + ', Number) returns the same value'); - }); - t.end(); -}); - -test('Symbols', { skip: !hasSymbols }, function (t) { - var symbols = [ - Symbol('foo'), - Symbol.iterator, - Symbol['for']('foo') // eslint-disable-line no-restricted-properties - ]; - forEach(symbols, function (sym) { - t.equal(toPrimitive(sym), sym, 'toPrimitive(' + debug(sym) + ') returns the same value'); - t.equal(toPrimitive(sym, String), sym, 'toPrimitive(' + debug(sym) + ', String) returns the same value'); - t.equal(toPrimitive(sym, Number), sym, 'toPrimitive(' + debug(sym) + ', Number) returns the same value'); - }); - - var primitiveSym = Symbol('primitiveSym'); - var objectSym = Object(primitiveSym); - t.equal(toPrimitive(objectSym), primitiveSym, 'toPrimitive(' + debug(objectSym) + ') returns ' + debug(primitiveSym)); - t.equal(toPrimitive(objectSym, String), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', String) returns ' + debug(primitiveSym)); - t.equal(toPrimitive(objectSym, Number), primitiveSym, 'toPrimitive(' + debug(objectSym) + ', Number) returns ' + debug(primitiveSym)); - t.end(); -}); - -test('Arrays', function (t) { - var arrays = [[], ['a', 'b'], [1, 2]]; - forEach(arrays, function (arr) { - t.equal(toPrimitive(arr), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - t.equal(toPrimitive(arr, String), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - t.equal(toPrimitive(arr, Number), String(arr), 'toPrimitive(' + debug(arr) + ') returns the string version of the array'); - }); - t.end(); -}); - -test('Dates', function (t) { - var dates = [new Date(), new Date(0), new Date(NaN)]; - forEach(dates, function (date) { - t.equal(toPrimitive(date), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date'); - t.equal(toPrimitive(date, String), String(date), 'toPrimitive(' + debug(date) + ') returns the string version of the date'); - t.ok(is(toPrimitive(date, Number), Number(date)), 'toPrimitive(' + debug(date) + ') returns the number version of the date'); - }); - t.end(); -}); - -var coercibleObject = { valueOf: function () { return 3; }, toString: function () { return 42; } }; -var valueOfOnlyObject = { valueOf: function () { return 4; }, toString: function () { return {}; } }; -var toStringOnlyObject = { valueOf: function () { return {}; }, toString: function () { return 7; } }; -var coercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return 42; } -}; -var uncoercibleObject = { valueOf: function () { return {}; }, toString: function () { return {}; } }; -var uncoercibleFnObject = { - valueOf: function () { return function valueOfFn() {}; }, - toString: function () { return function toStrFn() {}; } -}; - -test('Objects', function (t) { - t.equal(toPrimitive(coercibleObject), coercibleObject.valueOf(), 'coercibleObject with no hint coerces to valueOf'); - t.equal(toPrimitive(coercibleObject, Number), coercibleObject.valueOf(), 'coercibleObject with hint Number coerces to valueOf'); - t.equal(toPrimitive(coercibleObject, String), coercibleObject.toString(), 'coercibleObject with hint String coerces to non-stringified toString'); - - t.equal(toPrimitive(coercibleFnObject), coercibleFnObject.toString(), 'coercibleFnObject coerces to non-stringified toString'); - t.equal(toPrimitive(coercibleFnObject, Number), coercibleFnObject.toString(), 'coercibleFnObject with hint Number coerces to non-stringified toString'); - t.equal(toPrimitive(coercibleFnObject, String), coercibleFnObject.toString(), 'coercibleFnObject with hint String coerces to non-stringified toString'); - - t.equal(toPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString'); - t.equal(toPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to Object#toString'); - t.equal(toPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString'); - - t.equal(toPrimitive(toStringOnlyObject), toStringOnlyObject.toString(), 'toStringOnlyObject returns non-stringified toString'); - t.equal(toPrimitive(toStringOnlyObject, Number), toStringOnlyObject.toString(), 'toStringOnlyObject with hint Number returns non-stringified toString'); - t.equal(toPrimitive(toStringOnlyObject, String), toStringOnlyObject.toString(), 'toStringOnlyObject with hint String returns non-stringified toString'); - - t.equal(toPrimitive(valueOfOnlyObject), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, Number), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint Number returns valueOf'); - t.equal(toPrimitive(valueOfOnlyObject, String), valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint String returns non-stringified valueOf'); - - t.test('Symbol.toPrimitive', { skip: !hasSymbolToPrimitive }, function (st) { - var overriddenObject = { toString: st.fail, valueOf: st.fail }; - overriddenObject[Symbol.toPrimitive] = function (hint) { return String(hint); }; - - st.equal(toPrimitive(overriddenObject), 'default', 'object with Symbol.toPrimitive + no hint invokes that'); - st.equal(toPrimitive(overriddenObject, Number), 'number', 'object with Symbol.toPrimitive + hint Number invokes that'); - st.equal(toPrimitive(overriddenObject, String), 'string', 'object with Symbol.toPrimitive + hint String invokes that'); - - var nullToPrimitive = { toString: coercibleObject.toString, valueOf: coercibleObject.valueOf }; - nullToPrimitive[Symbol.toPrimitive] = null; - st.equal(toPrimitive(nullToPrimitive), toPrimitive(coercibleObject), 'object with no hint + null Symbol.toPrimitive ignores it'); - st.equal(toPrimitive(nullToPrimitive, Number), toPrimitive(coercibleObject, Number), 'object with hint Number + null Symbol.toPrimitive ignores it'); - st.equal(toPrimitive(nullToPrimitive, String), toPrimitive(coercibleObject, String), 'object with hint String + null Symbol.toPrimitive ignores it'); - - st.test('exceptions', function (sst) { - var nonFunctionToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - nonFunctionToPrimitive[Symbol.toPrimitive] = {}; - sst['throws'](toPrimitive.bind(null, nonFunctionToPrimitive), TypeError, 'Symbol.toPrimitive returning a non-function throws'); - - var uncoercibleToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - uncoercibleToPrimitive[Symbol.toPrimitive] = function (hint) { - return { toString: function () { return hint; } }; - }; - sst['throws'](toPrimitive.bind(null, uncoercibleToPrimitive), TypeError, 'Symbol.toPrimitive returning an object throws'); - - var throwingToPrimitive = { toString: sst.fail, valueOf: sst.fail }; - throwingToPrimitive[Symbol.toPrimitive] = function (hint) { throw new RangeError(hint); }; - sst['throws'](toPrimitive.bind(null, throwingToPrimitive), RangeError, 'Symbol.toPrimitive throwing throws'); - - sst.end(); - }); - - st.end(); - }); - - t.test('exceptions', function (st) { - st['throws'](toPrimitive.bind(null, uncoercibleObject), TypeError, 'uncoercibleObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, Number), TypeError, 'uncoercibleObject with hint Number throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleObject, String), TypeError, 'uncoercibleObject with hint String throws a TypeError'); - - st['throws'](toPrimitive.bind(null, uncoercibleFnObject), TypeError, 'uncoercibleFnObject throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, Number), TypeError, 'uncoercibleFnObject with hint Number throws a TypeError'); - st['throws'](toPrimitive.bind(null, uncoercibleFnObject, String), TypeError, 'uncoercibleFnObject with hint String throws a TypeError'); - st.end(); - }); - t.end(); -}); diff --git a/build/node_modules/es-to-primitive/test/index.js b/build/node_modules/es-to-primitive/test/index.js deleted file mode 100644 index ad71f39e..00000000 --- a/build/node_modules/es-to-primitive/test/index.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var toPrimitive = require('../'); -var ES5 = require('../es5'); -var ES6 = require('../es6'); -var ES2015 = require('../es2015'); - -var test = require('tape'); - -test('default export', function (t) { - t.equal(toPrimitive, ES2015, 'default export is ES2015'); - t.equal(toPrimitive.ES5, ES5, 'ES5 property has ES5 method'); - t.equal(toPrimitive.ES6, ES6, 'ES6 property has ES6 method'); - t.equal(toPrimitive.ES2015, ES2015, 'ES2015 property has ES2015 method'); - t.end(); -}); - -require('./es5'); -require('./es6'); -require('./es2015'); diff --git a/build/node_modules/escalade/dist/index.js b/build/node_modules/escalade/dist/index.js new file mode 100644 index 00000000..ad236c49 --- /dev/null +++ b/build/node_modules/escalade/dist/index.js @@ -0,0 +1,22 @@ +const { dirname, resolve } = require('path'); +const { readdir, stat } = require('fs'); +const { promisify } = require('util'); + +const toStats = promisify(stat); +const toRead = promisify(readdir); + +module.exports = async function (start, callback) { + let dir = resolve('.', start); + let tmp, stats = await toStats(dir); + + if (!stats.isDirectory()) { + dir = dirname(dir); + } + + while (true) { + tmp = await callback(dir, await toRead(dir)); + if (tmp) return resolve(dir, tmp); + dir = dirname(tmp = dir); + if (tmp === dir) break; + } +} diff --git a/build/node_modules/escalade/dist/index.mjs b/build/node_modules/escalade/dist/index.mjs new file mode 100644 index 00000000..bf95be03 --- /dev/null +++ b/build/node_modules/escalade/dist/index.mjs @@ -0,0 +1,22 @@ +import { dirname, resolve } from 'path'; +import { readdir, stat } from 'fs'; +import { promisify } from 'util'; + +const toStats = promisify(stat); +const toRead = promisify(readdir); + +export default async function (start, callback) { + let dir = resolve('.', start); + let tmp, stats = await toStats(dir); + + if (!stats.isDirectory()) { + dir = dirname(dir); + } + + while (true) { + tmp = await callback(dir, await toRead(dir)); + if (tmp) return resolve(dir, tmp); + dir = dirname(tmp = dir); + if (tmp === dir) break; + } +} diff --git a/build/node_modules/escalade/index.d.ts b/build/node_modules/escalade/index.d.ts new file mode 100644 index 00000000..283e398d --- /dev/null +++ b/build/node_modules/escalade/index.d.ts @@ -0,0 +1,3 @@ +type Promisable = T | Promise; +export type Callback = (directory: string, files: string[]) => Promisable; +export default function (directory: string, callback: Callback): Promise; diff --git a/build/node_modules/escalade/license b/build/node_modules/escalade/license new file mode 100644 index 00000000..fa6089fa --- /dev/null +++ b/build/node_modules/escalade/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/escalade/package.json b/build/node_modules/escalade/package.json new file mode 100644 index 00000000..366a0dc5 --- /dev/null +++ b/build/node_modules/escalade/package.json @@ -0,0 +1,93 @@ +{ + "_from": "escalade@^3.1.1", + "_id": "escalade@3.1.1", + "_inBundle": false, + "_integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "_location": "/escalade", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "escalade@^3.1.1", + "name": "escalade", + "escapedName": "escalade", + "rawSpec": "^3.1.1", + "saveSpec": null, + "fetchSpec": "^3.1.1" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/escalade/-/escalade-3.1.1.tgz", + "_shasum": "d8cfdc7000965c5a0174b4a82eaa5c0552742e40", + "_spec": "escalade@^3.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs", + "author": { + "name": "Luke Edwards", + "email": "luke.edwards05@gmail.com", + "url": "https://lukeed.com" + }, + "bugs": { + "url": "https://github.com/lukeed/escalade/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A tiny (183B to 210B) and fast utility to ascend parent directories", + "devDependencies": { + "bundt": "1.1.1", + "esm": "3.2.25", + "uvu": "0.3.3" + }, + "engines": { + "node": ">=6" + }, + "exports": { + ".": [ + { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./dist/index.js" + ], + "./sync": [ + { + "import": "./sync/index.mjs", + "require": "./sync/index.js" + }, + "./sync/index.js" + ] + }, + "files": [ + "*.d.ts", + "dist", + "sync" + ], + "homepage": "https://github.com/lukeed/escalade#readme", + "keywords": [ + "find", + "parent", + "parents", + "directory", + "search", + "walk" + ], + "license": "MIT", + "main": "dist/index.js", + "modes": { + "sync": "src/sync.js", + "default": "src/async.js" + }, + "module": "dist/index.mjs", + "name": "escalade", + "repository": { + "type": "git", + "url": "git+https://github.com/lukeed/escalade.git" + }, + "scripts": { + "build": "bundt", + "pretest": "npm run build", + "test": "uvu -r esm test -i fixtures" + }, + "types": "index.d.ts", + "version": "3.1.1" +} diff --git a/build/node_modules/escalade/readme.md b/build/node_modules/escalade/readme.md new file mode 100644 index 00000000..4e2195c1 --- /dev/null +++ b/build/node_modules/escalade/readme.md @@ -0,0 +1,211 @@ +# escalade [![CI](https://github.com/lukeed/escalade/workflows/CI/badge.svg)](https://github.com/lukeed/escalade/actions) [![codecov](https://badgen.now.sh/codecov/c/github/lukeed/escalade)](https://codecov.io/gh/lukeed/escalade) + +> A tiny (183B to 210B) and [fast](#benchmarks) utility to ascend parent directories + +With [escalade](https://en.wikipedia.org/wiki/Escalade), you can scale parent directories until you've found what you're looking for.
Given an input file or directory, `escalade` will continue executing your callback function until either: + +1) the callback returns a truthy value +2) `escalade` has reached the system root directory (eg, `/`) + +> **Important:**
Please note that `escalade` only deals with direct ancestry – it will not dive into parents' sibling directories. + +--- + +**Notice:** As of v3.1.0, `escalade` now includes [Deno support](http://deno.land/x/escalade)! Please see [Deno Usage](#deno) below. + +--- + +## Install + +``` +$ npm install --save escalade +``` + + +## Modes + +There are two "versions" of `escalade` available: + +#### "async" +> **Node.js:** >= 8.x
+> **Size (gzip):** 210 bytes
+> **Availability:** [CommonJS](https://unpkg.com/escalade/dist/index.js), [ES Module](https://unpkg.com/escalade/dist/index.mjs) + +This is the primary/default mode. It makes use of `async`/`await` and [`util.promisify`](https://nodejs.org/api/util.html#util_util_promisify_original). + +#### "sync" +> **Node.js:** >= 6.x
+> **Size (gzip):** 183 bytes
+> **Availability:** [CommonJS](https://unpkg.com/escalade/sync/index.js), [ES Module](https://unpkg.com/escalade/sync/index.mjs) + +This is the opt-in mode, ideal for scenarios where `async` usage cannot be supported. + + +## Usage + +***Example Structure*** + +``` +/Users/lukeed + └── oss + ├── license + └── escalade + ├── package.json + └── test + └── fixtures + ├── index.js + └── foobar + └── demo.js +``` + +***Example Usage*** + +```js +//~> demo.js +import { join } from 'path'; +import escalade from 'escalade'; + +const input = join(__dirname, 'demo.js'); +// or: const input = __dirname; + +const pkg = await escalade(input, (dir, names) => { + console.log('~> dir:', dir); + console.log('~> names:', names); + console.log('---'); + + if (names.includes('package.json')) { + // will be resolved into absolute + return 'package.json'; + } +}); + +//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar +//~> names: ['demo.js'] +//--- +//~> dir: /Users/lukeed/oss/escalade/test/fixtures +//~> names: ['index.js', 'foobar'] +//--- +//~> dir: /Users/lukeed/oss/escalade/test +//~> names: ['fixtures'] +//--- +//~> dir: /Users/lukeed/oss/escalade +//~> names: ['package.json', 'test'] +//--- + +console.log(pkg); +//=> /Users/lukeed/oss/escalade/package.json + +// Now search for "missing123.txt" +// (Assume it doesn't exist anywhere!) +const missing = await escalade(input, (dir, names) => { + console.log('~> dir:', dir); + return names.includes('missing123.txt') && 'missing123.txt'; +}); + +//~> dir: /Users/lukeed/oss/escalade/test/fixtures/foobar +//~> dir: /Users/lukeed/oss/escalade/test/fixtures +//~> dir: /Users/lukeed/oss/escalade/test +//~> dir: /Users/lukeed/oss/escalade +//~> dir: /Users/lukeed/oss +//~> dir: /Users/lukeed +//~> dir: /Users +//~> dir: / + +console.log(missing); +//=> undefined +``` + +> **Note:** To run the above example with "sync" mode, import from `escalade/sync` and remove the `await` keyword. + + +## API + +### escalade(input, callback) +Returns: `string|void` or `Promise` + +When your `callback` locates a file, `escalade` will resolve/return with an absolute path.
+If your `callback` was never satisfied, then `escalade` will resolve/return with nothing (undefined). + +> **Important:**
The `sync` and `async` versions share the same API.
The **only** difference is that `sync` is not Promise-based. + +#### input +Type: `string` + +The path from which to start ascending. + +This may be a file or a directory path.
However, when `input` is a file, `escalade` will begin with its parent directory. + +> **Important:** Unless given an absolute path, `input` will be resolved from `process.cwd()` location. + +#### callback +Type: `Function` + +The callback to execute for each ancestry level. It always is given two arguments: + +1) `dir` - an absolute path of the current parent directory +2) `names` - a list (`string[]`) of contents _relative to_ the `dir` parent + +> **Note:** The `names` list can contain names of files _and_ directories. + +When your callback returns a _falsey_ value, then `escalade` will continue with `dir`'s parent directory, re-invoking your callback with new argument values. + +When your callback returns a string, then `escalade` stops iteration immediately.
+If the string is an absolute path, then it's left as is. Otherwise, the string is resolved into an absolute path _from_ the `dir` that housed the satisfying condition. + +> **Important:** Your `callback` can be a `Promise/AsyncFunction` when using the "async" version of `escalade`. + +## Benchmarks + +> Running on Node.js v10.13.0 + +``` +# Load Time + find-up 3.891ms + escalade 0.485ms + escalade/sync 0.309ms + +# Levels: 6 (target = "foo.txt"): + find-up x 24,856 ops/sec ±6.46% (55 runs sampled) + escalade x 73,084 ops/sec ±4.23% (73 runs sampled) + find-up.sync x 3,663 ops/sec ±1.12% (83 runs sampled) + escalade/sync x 9,360 ops/sec ±0.62% (88 runs sampled) + +# Levels: 12 (target = "package.json"): + find-up x 29,300 ops/sec ±10.68% (70 runs sampled) + escalade x 73,685 ops/sec ± 5.66% (66 runs sampled) + find-up.sync x 1,707 ops/sec ± 0.58% (91 runs sampled) + escalade/sync x 4,667 ops/sec ± 0.68% (94 runs sampled) + +# Levels: 18 (target = "missing123.txt"): + find-up x 21,818 ops/sec ±17.37% (14 runs sampled) + escalade x 67,101 ops/sec ±21.60% (20 runs sampled) + find-up.sync x 1,037 ops/sec ± 2.86% (88 runs sampled) + escalade/sync x 1,248 ops/sec ± 0.50% (93 runs sampled) +``` + +## Deno + +As of v3.1.0, `escalade` is available on the Deno registry. + +Please note that the [API](#api) is identical and that there are still [two modes](#modes) from which to choose: + +```ts +// Choose "async" mode +import escalade from 'https://deno.land/escalade/async.ts'; + +// Choose "sync" mode +import escalade from 'https://deno.land/escalade/sync.ts'; +``` + +> **Important:** The `allow-read` permission is required! + + +## Related + +- [premove](https://github.com/lukeed/premove) - A tiny (247B) utility to remove items recursively +- [totalist](https://github.com/lukeed/totalist) - A tiny (195B to 224B) utility to recursively list all (total) files in a directory +- [mk-dirs](https://github.com/lukeed/mk-dirs) - A tiny (420B) utility to make a directory and its parents, recursively + +## License + +MIT © [Luke Edwards](https://lukeed.com) diff --git a/build/node_modules/escalade/sync/index.d.ts b/build/node_modules/escalade/sync/index.d.ts new file mode 100644 index 00000000..746ddd39 --- /dev/null +++ b/build/node_modules/escalade/sync/index.d.ts @@ -0,0 +1,2 @@ +export type Callback = (directory: string, files: string[]) => string | false | void; +export default function (directory: string, callback: Callback): string | void; diff --git a/build/node_modules/escalade/sync/index.js b/build/node_modules/escalade/sync/index.js new file mode 100644 index 00000000..902cc46c --- /dev/null +++ b/build/node_modules/escalade/sync/index.js @@ -0,0 +1,18 @@ +const { dirname, resolve } = require('path'); +const { readdirSync, statSync } = require('fs'); + +module.exports = function (start, callback) { + let dir = resolve('.', start); + let tmp, stats = statSync(dir); + + if (!stats.isDirectory()) { + dir = dirname(dir); + } + + while (true) { + tmp = callback(dir, readdirSync(dir)); + if (tmp) return resolve(dir, tmp); + dir = dirname(tmp = dir); + if (tmp === dir) break; + } +} diff --git a/build/node_modules/escalade/sync/index.mjs b/build/node_modules/escalade/sync/index.mjs new file mode 100644 index 00000000..3cdc5bd1 --- /dev/null +++ b/build/node_modules/escalade/sync/index.mjs @@ -0,0 +1,18 @@ +import { dirname, resolve } from 'path'; +import { readdirSync, statSync } from 'fs'; + +export default function (start, callback) { + let dir = resolve('.', start); + let tmp, stats = statSync(dir); + + if (!stats.isDirectory()) { + dir = dirname(dir); + } + + while (true) { + tmp = callback(dir, readdirSync(dir)); + if (tmp) return resolve(dir, tmp); + dir = dirname(tmp = dir); + if (tmp === dir) break; + } +} diff --git a/build/node_modules/escape-string-regexp/index.d.ts b/build/node_modules/escape-string-regexp/index.d.ts new file mode 100644 index 00000000..7d34edc7 --- /dev/null +++ b/build/node_modules/escape-string-regexp/index.d.ts @@ -0,0 +1,18 @@ +/** +Escape RegExp special characters. + +You can also use this to escape a string that is inserted into the middle of a regex, for example, into a character class. + +@example +``` +import escapeStringRegexp = require('escape-string-regexp'); + +const escapedString = escapeStringRegexp('How much $ for a 🦄?'); +//=> 'How much \\$ for a 🦄\\?' + +new RegExp(escapedString); +``` +*/ +declare const escapeStringRegexp: (string: string) => string; + +export = escapeStringRegexp; diff --git a/build/node_modules/escape-string-regexp/index.js b/build/node_modules/escape-string-regexp/index.js index ac6572ca..387c5615 100644 --- a/build/node_modules/escape-string-regexp/index.js +++ b/build/node_modules/escape-string-regexp/index.js @@ -1,11 +1,13 @@ 'use strict'; -var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; - -module.exports = function (str) { - if (typeof str !== 'string') { +module.exports = string => { + if (typeof string !== 'string') { throw new TypeError('Expected a string'); } - return str.replace(matchOperatorsRe, '\\$&'); + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); }; diff --git a/build/node_modules/escape-string-regexp/license b/build/node_modules/escape-string-regexp/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/escape-string-regexp/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/escape-string-regexp/package.json b/build/node_modules/escape-string-regexp/package.json index f2efe4f9..64a0fffe 100644 --- a/build/node_modules/escape-string-regexp/package.json +++ b/build/node_modules/escape-string-regexp/package.json @@ -1,31 +1,31 @@ { - "_from": "escape-string-regexp@1.0.2", - "_id": "escape-string-regexp@1.0.2", + "_from": "escape-string-regexp@4.0.0", + "_id": "escape-string-regexp@4.0.0", "_inBundle": false, - "_integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "_integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "_location": "/escape-string-regexp", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "escape-string-regexp@1.0.2", + "raw": "escape-string-regexp@4.0.0", "name": "escape-string-regexp", "escapedName": "escape-string-regexp", - "rawSpec": "1.0.2", + "rawSpec": "4.0.0", "saveSpec": null, - "fetchSpec": "1.0.2" + "fetchSpec": "4.0.0" }, "_requiredBy": [ "/mocha" ], - "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "_shasum": "4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1", - "_spec": "escape-string-regexp@1.0.2", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "_shasum": "14ba83a5d373e3d311e5afca29cf5bfad965bf34", + "_spec": "escape-string-regexp@4.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" + "url": "https://sindresorhus.com" }, "bugs": { "url": "https://github.com/sindresorhus/escape-string-regexp/issues" @@ -34,24 +34,26 @@ "deprecated": false, "description": "Escape RegExp special characters", "devDependencies": { - "mocha": "*" + "ava": "^1.4.1", + "tsd": "^0.11.0", + "xo": "^0.28.3" }, "engines": { - "node": ">=0.8.0" + "node": ">=10" }, "files": [ - "index.js" + "index.js", + "index.d.ts" ], + "funding": "https://github.com/sponsors/sindresorhus", "homepage": "https://github.com/sindresorhus/escape-string-regexp#readme", "keywords": [ + "escape", "regex", "regexp", - "re", "regular", "expression", - "escape", "string", - "str", "special", "characters" ], @@ -62,7 +64,7 @@ "url": "git+https://github.com/sindresorhus/escape-string-regexp.git" }, "scripts": { - "test": "mocha" + "test": "xo && ava && tsd" }, - "version": "1.0.2" + "version": "4.0.0" } diff --git a/build/node_modules/escape-string-regexp/readme.md b/build/node_modules/escape-string-regexp/readme.md index 808a963a..2945dfcb 100644 --- a/build/node_modules/escape-string-regexp/readme.md +++ b/build/node_modules/escape-string-regexp/readme.md @@ -2,26 +2,33 @@ > Escape RegExp special characters - ## Install -```sh -$ npm install --save escape-string-regexp ``` - +$ npm install escape-string-regexp +``` ## Usage ```js -var escapeStringRegexp = require('escape-string-regexp'); +const escapeStringRegexp = require('escape-string-regexp'); -var escapedString = escapeStringRegexp('how much $ for a unicorn?'); -//=> how much \$ for a unicorn\? +const escapedString = escapeStringRegexp('How much $ for a 🦄?'); +//=> 'How much \\$ for a 🦄\\?' new RegExp(escapedString); ``` +You can also use this to escape a string that is inserted into the middle of a regex, for example, into a character class. -## License +--- -MIT © [Sindre Sorhus](http://sindresorhus.com) +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/build/node_modules/estree-walker/CHANGELOG.md b/build/node_modules/estree-walker/CHANGELOG.md index 06b21e96..20e8c7ea 100644 --- a/build/node_modules/estree-walker/CHANGELOG.md +++ b/build/node_modules/estree-walker/CHANGELOG.md @@ -1,5 +1,42 @@ # changelog +## 2.0.2 + +* Internal tidying up (change test runner, convert to JS) + +## 2.0.1 + +* Robustify `this.remove()`, pass current index to walker functions ([#18](https://github.com/Rich-Harris/estree-walker/pull/18)) + +## 2.0.0 + +* Add an `asyncWalk` export ([#20](https://github.com/Rich-Harris/estree-walker/pull/20)) +* Internal rewrite + +## 1.0.1 + +* Relax node type to `BaseNode` ([#17](https://github.com/Rich-Harris/estree-walker/pull/17)) + +## 1.0.0 + +* Don't cache child keys + +## 0.9.0 + +* Add `this.remove()` method + +## 0.8.1 + +* Fix pkg.files + +## 0.8.0 + +* Adopt `estree` types + +## 0.7.0 + +* Add a `this.replace(node)` method + ## 0.6.1 * Only traverse nodes that exist and have a type ([#9](https://github.com/Rich-Harris/estree-walker/pull/9)) diff --git a/build/node_modules/estree-walker/LICENSE b/build/node_modules/estree-walker/LICENSE new file mode 100644 index 00000000..63b62098 --- /dev/null +++ b/build/node_modules/estree-walker/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2015-20 [these people](https://github.com/Rich-Harris/estree-walker/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/estree-walker/README.md b/build/node_modules/estree-walker/README.md index 94dd4005..d877af36 100644 --- a/build/node_modules/estree-walker/README.md +++ b/build/node_modules/estree-walker/README.md @@ -30,6 +30,9 @@ walk( ast, { Inside the `enter` function, calling `this.skip()` will prevent the node's children being walked, or the `leave` function (which is optional) being called. +Call `this.replace(new_node)` in either `enter` or `leave` to replace the current node with a new one. + +Call `this.remove()` in either `enter` or `leave` to remove the current node. ## Why not use estraverse? diff --git a/build/node_modules/estree-walker/dist/esm/estree-walker.js b/build/node_modules/estree-walker/dist/esm/estree-walker.js new file mode 100644 index 00000000..a0beeeb4 --- /dev/null +++ b/build/node_modules/estree-walker/dist/esm/estree-walker.js @@ -0,0 +1,333 @@ +// @ts-check +/** @typedef { import('estree').BaseNode} BaseNode */ + +/** @typedef {{ + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; +}} WalkerContext */ + +class WalkerBase { + constructor() { + /** @type {boolean} */ + this.should_skip = false; + + /** @type {boolean} */ + this.should_remove = false; + + /** @type {BaseNode | null} */ + this.replacement = null; + + /** @type {WalkerContext} */ + this.context = { + skip: () => (this.should_skip = true), + remove: () => (this.should_remove = true), + replace: (node) => (this.replacement = node) + }; + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + * @param {BaseNode} node + */ + replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + */ + remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } + } +} + +// @ts-check + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker.js').WalkerContext} WalkerContext */ + +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => void} SyncHandler */ + +class SyncWalker extends WalkerBase { + /** + * + * @param {SyncHandler} enter + * @param {SyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {SyncHandler} */ + this.enter = enter; + + /** @type {SyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {BaseNode} + */ + visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!this.visit(value[i], node, key, i)) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } +} + +// @ts-check + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker').WalkerContext} WalkerContext */ + +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => Promise} AsyncHandler */ + +class AsyncWalker extends WalkerBase { + /** + * + * @param {AsyncHandler} enter + * @param {AsyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {AsyncHandler} */ + this.enter = enter; + + /** @type {AsyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {Promise} + */ + async visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + await this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!(await this.visit(value[i], node, key, i))) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + await this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + await this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } +} + +// @ts-check + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./sync.js').SyncHandler} SyncHandler */ +/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */ + +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: SyncHandler + * leave?: SyncHandler + * }} walker + * @returns {BaseNode} + */ +function walk(ast, { enter, leave }) { + const instance = new SyncWalker(enter, leave); + return instance.visit(ast, null); +} + +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: AsyncHandler + * leave?: AsyncHandler + * }} walker + * @returns {Promise} + */ +async function asyncWalk(ast, { enter, leave }) { + const instance = new AsyncWalker(enter, leave); + return await instance.visit(ast, null); +} + +export { asyncWalk, walk }; diff --git a/build/node_modules/estree-walker/dist/esm/package.json b/build/node_modules/estree-walker/dist/esm/package.json new file mode 100644 index 00000000..7c34deb5 --- /dev/null +++ b/build/node_modules/estree-walker/dist/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/build/node_modules/estree-walker/dist/umd/estree-walker.js b/build/node_modules/estree-walker/dist/umd/estree-walker.js new file mode 100644 index 00000000..46fed0f9 --- /dev/null +++ b/build/node_modules/estree-walker/dist/umd/estree-walker.js @@ -0,0 +1,344 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.estreeWalker = {})); +}(this, (function (exports) { 'use strict'; + + // @ts-check + /** @typedef { import('estree').BaseNode} BaseNode */ + + /** @typedef {{ + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; + }} WalkerContext */ + + class WalkerBase { + constructor() { + /** @type {boolean} */ + this.should_skip = false; + + /** @type {boolean} */ + this.should_remove = false; + + /** @type {BaseNode | null} */ + this.replacement = null; + + /** @type {WalkerContext} */ + this.context = { + skip: () => (this.should_skip = true), + remove: () => (this.should_remove = true), + replace: (node) => (this.replacement = node) + }; + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + * @param {BaseNode} node + */ + replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + */ + remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } + } + } + + // @ts-check + + /** @typedef { import('estree').BaseNode} BaseNode */ + /** @typedef { import('./walker.js').WalkerContext} WalkerContext */ + + /** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => void} SyncHandler */ + + class SyncWalker extends WalkerBase { + /** + * + * @param {SyncHandler} enter + * @param {SyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {SyncHandler} */ + this.enter = enter; + + /** @type {SyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {BaseNode} + */ + visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!this.visit(value[i], node, key, i)) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } + } + + // @ts-check + + /** @typedef { import('estree').BaseNode} BaseNode */ + /** @typedef { import('./walker').WalkerContext} WalkerContext */ + + /** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => Promise} AsyncHandler */ + + class AsyncWalker extends WalkerBase { + /** + * + * @param {AsyncHandler} enter + * @param {AsyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {AsyncHandler} */ + this.enter = enter; + + /** @type {AsyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {Promise} + */ + async visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + await this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!(await this.visit(value[i], node, key, i))) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + await this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + await this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } + } + + // @ts-check + + /** @typedef { import('estree').BaseNode} BaseNode */ + /** @typedef { import('./sync.js').SyncHandler} SyncHandler */ + /** @typedef { import('./async.js').AsyncHandler} AsyncHandler */ + + /** + * + * @param {BaseNode} ast + * @param {{ + * enter?: SyncHandler + * leave?: SyncHandler + * }} walker + * @returns {BaseNode} + */ + function walk(ast, { enter, leave }) { + const instance = new SyncWalker(enter, leave); + return instance.visit(ast, null); + } + + /** + * + * @param {BaseNode} ast + * @param {{ + * enter?: AsyncHandler + * leave?: AsyncHandler + * }} walker + * @returns {Promise} + */ + async function asyncWalk(ast, { enter, leave }) { + const instance = new AsyncWalker(enter, leave); + return await instance.visit(ast, null); + } + + exports.asyncWalk = asyncWalk; + exports.walk = walk; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/build/node_modules/estree-walker/package.json b/build/node_modules/estree-walker/package.json index bf37113f..5d0b1ed8 100644 --- a/build/node_modules/estree-walker/package.json +++ b/build/node_modules/estree-walker/package.json @@ -1,28 +1,27 @@ { - "_from": "estree-walker@^0.6.0", - "_id": "estree-walker@0.6.1", + "_from": "estree-walker@^2.0.1", + "_id": "estree-walker@2.0.2", "_inBundle": false, - "_integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "_integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "_location": "/estree-walker", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "estree-walker@^0.6.0", + "raw": "estree-walker@^2.0.1", "name": "estree-walker", "escapedName": "estree-walker", - "rawSpec": "^0.6.0", + "rawSpec": "^2.0.1", "saveSpec": null, - "fetchSpec": "^0.6.0" + "fetchSpec": "^2.0.1" }, "_requiredBy": [ - "/rollup-plugin-commonjs", - "/rollup-pluginutils" + "/@rollup/plugin-commonjs" ], - "_resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "_shasum": "53049143f40c6eb918b23671d1fe3219f3a1b362", - "_spec": "estree-walker@^0.6.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-commonjs", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-2.0.2.tgz", + "_shasum": "52f010178c2a4c117a7757cfe942adb7d2da4cac", + "_spec": "estree-walker@^2.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", "author": { "name": "Rich Harris" }, @@ -33,30 +32,37 @@ "deprecated": false, "description": "Traverse an ESTree-compliant AST", "devDependencies": { - "mocha": "^5.2.0", - "rollup": "^0.67.3" + "@types/estree": "0.0.42", + "rollup": "^2.10.9", + "typescript": "^3.7.5", + "uvu": "^0.5.1" + }, + "exports": { + "require": "./dist/umd/estree-walker.js", + "import": "./dist/esm/estree-walker.js" }, "files": [ "src", "dist", - "index.d.ts", + "types", "README.md" ], "homepage": "https://github.com/Rich-Harris/estree-walker#readme", "license": "MIT", - "main": "dist/estree-walker.umd.js", - "module": "src/estree-walker.js", + "main": "./dist/umd/estree-walker.js", + "module": "./dist/esm/estree-walker.js", "name": "estree-walker", + "private": false, "repository": { "type": "git", "url": "git+https://github.com/Rich-Harris/estree-walker.git" }, "scripts": { - "build": "rollup -c", - "prepublishOnly": "npm test", - "pretest": "npm run build", - "test": "mocha test/test.js" + "build": "tsc && rollup -c", + "prepublishOnly": "npm run build && npm test", + "test": "uvu test" }, - "typings": "index.d.ts", - "version": "0.6.1" + "type": "commonjs", + "types": "types/index.d.ts", + "version": "2.0.2" } diff --git a/build/node_modules/estree-walker/src/async.js b/build/node_modules/estree-walker/src/async.js new file mode 100644 index 00000000..54276b51 --- /dev/null +++ b/build/node_modules/estree-walker/src/async.js @@ -0,0 +1,118 @@ +// @ts-check +import { WalkerBase } from './walker.js'; + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker').WalkerContext} WalkerContext */ + +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => Promise} AsyncHandler */ + +export class AsyncWalker extends WalkerBase { + /** + * + * @param {AsyncHandler} enter + * @param {AsyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {AsyncHandler} */ + this.enter = enter; + + /** @type {AsyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {Promise} + */ + async visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + await this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!(await this.visit(value[i], node, key, i))) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + await this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + await this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } +} diff --git a/build/node_modules/estree-walker/src/index.js b/build/node_modules/estree-walker/src/index.js new file mode 100644 index 00000000..dcf4c720 --- /dev/null +++ b/build/node_modules/estree-walker/src/index.js @@ -0,0 +1,35 @@ +// @ts-check +import { SyncWalker } from './sync.js'; +import { AsyncWalker } from './async.js'; + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./sync.js').SyncHandler} SyncHandler */ +/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */ + +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: SyncHandler + * leave?: SyncHandler + * }} walker + * @returns {BaseNode} + */ +export function walk(ast, { enter, leave }) { + const instance = new SyncWalker(enter, leave); + return instance.visit(ast, null); +} + +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: AsyncHandler + * leave?: AsyncHandler + * }} walker + * @returns {Promise} + */ +export async function asyncWalk(ast, { enter, leave }) { + const instance = new AsyncWalker(enter, leave); + return await instance.visit(ast, null); +} diff --git a/build/node_modules/estree-walker/src/package.json b/build/node_modules/estree-walker/src/package.json new file mode 100644 index 00000000..1632c2c4 --- /dev/null +++ b/build/node_modules/estree-walker/src/package.json @@ -0,0 +1 @@ +{"type": "module"} \ No newline at end of file diff --git a/build/node_modules/estree-walker/src/sync.js b/build/node_modules/estree-walker/src/sync.js new file mode 100644 index 00000000..b3cea40a --- /dev/null +++ b/build/node_modules/estree-walker/src/sync.js @@ -0,0 +1,118 @@ +// @ts-check +import { WalkerBase } from './walker.js'; + +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker.js').WalkerContext} WalkerContext */ + +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => void} SyncHandler */ + +export class SyncWalker extends WalkerBase { + /** + * + * @param {SyncHandler} enter + * @param {SyncHandler} leave + */ + constructor(enter, leave) { + super(); + + /** @type {SyncHandler} */ + this.enter = enter; + + /** @type {SyncHandler} */ + this.leave = leave; + } + + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {BaseNode} + */ + visit(node, parent, prop, index) { + if (node) { + if (this.enter) { + const _should_skip = this.should_skip; + const _should_remove = this.should_remove; + const _replacement = this.replacement; + this.should_skip = false; + this.should_remove = false; + this.replacement = null; + + this.enter.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const skipped = this.should_skip; + const removed = this.should_remove; + + this.should_skip = _should_skip; + this.should_remove = _should_remove; + this.replacement = _replacement; + + if (skipped) return node; + if (removed) return null; + } + + for (const key in node) { + const value = node[key]; + + if (typeof value !== "object") { + continue; + } else if (Array.isArray(value)) { + for (let i = 0; i < value.length; i += 1) { + if (value[i] !== null && typeof value[i].type === 'string') { + if (!this.visit(value[i], node, key, i)) { + // removed + i--; + } + } + } + } else if (value !== null && typeof value.type === "string") { + this.visit(value, node, key, null); + } + } + + if (this.leave) { + const _replacement = this.replacement; + const _should_remove = this.should_remove; + this.replacement = null; + this.should_remove = false; + + this.leave.call(this.context, node, parent, prop, index); + + if (this.replacement) { + node = this.replacement; + this.replace(parent, prop, index, node); + } + + if (this.should_remove) { + this.remove(parent, prop, index); + } + + const removed = this.should_remove; + + this.replacement = _replacement; + this.should_remove = _should_remove; + + if (removed) return null; + } + } + + return node; + } +} diff --git a/build/node_modules/estree-walker/src/walker.js b/build/node_modules/estree-walker/src/walker.js new file mode 100644 index 00000000..3555d88a --- /dev/null +++ b/build/node_modules/estree-walker/src/walker.js @@ -0,0 +1,61 @@ +// @ts-check +/** @typedef { import('estree').BaseNode} BaseNode */ + +/** @typedef {{ + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; +}} WalkerContext */ + +export class WalkerBase { + constructor() { + /** @type {boolean} */ + this.should_skip = false; + + /** @type {boolean} */ + this.should_remove = false; + + /** @type {BaseNode | null} */ + this.replacement = null; + + /** @type {WalkerContext} */ + this.context = { + skip: () => (this.should_skip = true), + remove: () => (this.should_remove = true), + replace: (node) => (this.replacement = node) + }; + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + * @param {BaseNode} node + */ + replace(parent, prop, index, node) { + if (parent) { + if (index !== null) { + parent[prop][index] = node; + } else { + parent[prop] = node; + } + } + } + + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + */ + remove(parent, prop, index) { + if (parent) { + if (index !== null) { + parent[prop].splice(index, 1); + } else { + delete parent[prop]; + } + } + } +} diff --git a/build/node_modules/estree-walker/types/async.d.ts b/build/node_modules/estree-walker/types/async.d.ts new file mode 100644 index 00000000..c85bfdc5 --- /dev/null +++ b/build/node_modules/estree-walker/types/async.d.ts @@ -0,0 +1,53 @@ +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker').WalkerContext} WalkerContext */ +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => Promise} AsyncHandler */ +export class AsyncWalker extends WalkerBase { + /** + * + * @param {AsyncHandler} enter + * @param {AsyncHandler} leave + */ + constructor(enter: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise, leave: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise); + /** @type {AsyncHandler} */ + enter: AsyncHandler; + /** @type {AsyncHandler} */ + leave: AsyncHandler; + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {Promise} + */ + visit(node: import("estree").BaseNode, parent: import("estree").BaseNode, prop?: string, index?: number): Promise; + should_skip: any; + should_remove: any; + replacement: any; +} +export type BaseNode = import("estree").BaseNode; +export type WalkerContext = { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}; +export type AsyncHandler = (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise; +import { WalkerBase } from "./walker.js"; diff --git a/build/node_modules/estree-walker/types/index.d.ts b/build/node_modules/estree-walker/types/index.d.ts new file mode 100644 index 00000000..dfc3277d --- /dev/null +++ b/build/node_modules/estree-walker/types/index.d.ts @@ -0,0 +1,56 @@ +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./sync.js').SyncHandler} SyncHandler */ +/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */ +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: SyncHandler + * leave?: SyncHandler + * }} walker + * @returns {BaseNode} + */ +export function walk(ast: import("estree").BaseNode, { enter, leave }: { + enter?: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void; + leave?: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void; +}): import("estree").BaseNode; +/** + * + * @param {BaseNode} ast + * @param {{ + * enter?: AsyncHandler + * leave?: AsyncHandler + * }} walker + * @returns {Promise} + */ +export function asyncWalk(ast: import("estree").BaseNode, { enter, leave }: { + enter?: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise; + leave?: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise; +}): Promise; +export type BaseNode = import("estree").BaseNode; +export type SyncHandler = (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void; +export type AsyncHandler = (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => Promise; diff --git a/build/node_modules/estree-walker/types/sync.d.ts b/build/node_modules/estree-walker/types/sync.d.ts new file mode 100644 index 00000000..e9e4cc1e --- /dev/null +++ b/build/node_modules/estree-walker/types/sync.d.ts @@ -0,0 +1,53 @@ +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef { import('./walker.js').WalkerContext} WalkerContext */ +/** @typedef {( + * this: WalkerContext, + * node: BaseNode, + * parent: BaseNode, + * key: string, + * index: number + * ) => void} SyncHandler */ +export class SyncWalker extends WalkerBase { + /** + * + * @param {SyncHandler} enter + * @param {SyncHandler} leave + */ + constructor(enter: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void, leave: (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; + }, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void); + /** @type {SyncHandler} */ + enter: SyncHandler; + /** @type {SyncHandler} */ + leave: SyncHandler; + /** + * + * @param {BaseNode} node + * @param {BaseNode} parent + * @param {string} [prop] + * @param {number} [index] + * @returns {BaseNode} + */ + visit(node: import("estree").BaseNode, parent: import("estree").BaseNode, prop?: string, index?: number): import("estree").BaseNode; + should_skip: any; + should_remove: any; + replacement: any; +} +export type BaseNode = import("estree").BaseNode; +export type WalkerContext = { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}; +export type SyncHandler = (this: { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}, node: import("estree").BaseNode, parent: import("estree").BaseNode, key: string, index: number) => void; +import { WalkerBase } from "./walker.js"; diff --git a/build/node_modules/estree-walker/types/tsconfig.tsbuildinfo b/build/node_modules/estree-walker/types/tsconfig.tsbuildinfo new file mode 100644 index 00000000..799022fa --- /dev/null +++ b/build/node_modules/estree-walker/types/tsconfig.tsbuildinfo @@ -0,0 +1,345 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "fc43680ad3a1a4ec8c7b8d908af1ec9ddff87845346de5f02c735c9171fa98ea", + "signature": "fc43680ad3a1a4ec8c7b8d908af1ec9ddff87845346de5f02c735c9171fa98ea" + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "7994d44005046d1413ea31d046577cdda33b8b2470f30281fd9c8b3c99fe2d96", + "signature": "7994d44005046d1413ea31d046577cdda33b8b2470f30281fd9c8b3c99fe2d96" + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "5f217838d25704474d9ef93774f04164889169ca31475fe423a9de6758f058d1", + "signature": "5f217838d25704474d9ef93774f04164889169ca31475fe423a9de6758f058d1" + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "459097c7bdd88fc5731367e56591e4f465f2c9de81a35427a7bd473165c34743", + "signature": "459097c7bdd88fc5731367e56591e4f465f2c9de81a35427a7bd473165c34743" + }, + "../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "d93de5e8a7275cb9d47481410e13b3b1debb997e216490954b5d106e37e086de", + "signature": "d93de5e8a7275cb9d47481410e13b3b1debb997e216490954b5d106e37e086de" + }, + "../node_modules/typescript/lib/lib.dom.iterable.d.ts": { + "version": "8329c3401aa8708426c7760f14219170f69a2cb77e4519758cec6f5027270faf", + "signature": "8329c3401aa8708426c7760f14219170f69a2cb77e4519758cec6f5027270faf" + }, + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": { + "version": "fe4e59403e34c7ff747abe4ff6abbc7718229556d7c1a5b93473fb53156c913b", + "signature": "fe4e59403e34c7ff747abe4ff6abbc7718229556d7c1a5b93473fb53156c913b" + }, + "../node_modules/typescript/lib/lib.scripthost.d.ts": { + "version": "b9faa17292f17d2ad75e34fac77dd63a6403af1dba02d39cd0cbb9ffdf3de8b9", + "signature": "b9faa17292f17d2ad75e34fac77dd63a6403af1dba02d39cd0cbb9ffdf3de8b9" + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "734ddc145e147fbcd55f07d034f50ccff1086f5a880107665ec326fb368876f6", + "signature": "734ddc145e147fbcd55f07d034f50ccff1086f5a880107665ec326fb368876f6" + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "4a0862a21f4700de873db3b916f70e41570e2f558da77d2087c9490f5a0615d8", + "signature": "4a0862a21f4700de873db3b916f70e41570e2f558da77d2087c9490f5a0615d8" + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "765e0e9c9d74cf4d031ca8b0bdb269a853e7d81eda6354c8510218d03db12122", + "signature": "765e0e9c9d74cf4d031ca8b0bdb269a853e7d81eda6354c8510218d03db12122" + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "285958e7699f1babd76d595830207f18d719662a0c30fac7baca7df7162a9210", + "signature": "285958e7699f1babd76d595830207f18d719662a0c30fac7baca7df7162a9210" + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "d4deaafbb18680e3143e8b471acd650ed6f72a408a33137f0a0dd104fbe7f8ca", + "signature": "d4deaafbb18680e3143e8b471acd650ed6f72a408a33137f0a0dd104fbe7f8ca" + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "5e72f949a89717db444e3bd9433468890068bb21a5638d8ab15a1359e05e54fe", + "signature": "5e72f949a89717db444e3bd9433468890068bb21a5638d8ab15a1359e05e54fe" + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "f5b242136ae9bfb1cc99a5971cccc44e99947ae6b5ef6fd8aa54b5ade553b976", + "signature": "f5b242136ae9bfb1cc99a5971cccc44e99947ae6b5ef6fd8aa54b5ade553b976" + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "9ae2860252d6b5f16e2026d8a2c2069db7b2a3295e98b6031d01337b96437230", + "signature": "9ae2860252d6b5f16e2026d8a2c2069db7b2a3295e98b6031d01337b96437230" + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "3e0a459888f32b42138d5a39f706ff2d55d500ab1031e0988b5568b0f67c2303", + "signature": "3e0a459888f32b42138d5a39f706ff2d55d500ab1031e0988b5568b0f67c2303" + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3f96f1e570aedbd97bf818c246727151e873125d0512e4ae904330286c721bc0", + "signature": "3f96f1e570aedbd97bf818c246727151e873125d0512e4ae904330286c721bc0" + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "c2d60b2e558d44384e4704b00e6b3d154334721a911f094d3133c35f0917b408", + "signature": "c2d60b2e558d44384e4704b00e6b3d154334721a911f094d3133c35f0917b408" + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "b8667586a618c5cf64523d4e500ae39e781428abfb28f3de441fc66b56144b6f", + "signature": "b8667586a618c5cf64523d4e500ae39e781428abfb28f3de441fc66b56144b6f" + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "21df2e0059f14dcb4c3a0e125859f6b6ff01332ee24b0065a741d121250bc71c", + "signature": "21df2e0059f14dcb4c3a0e125859f6b6ff01332ee24b0065a741d121250bc71c" + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "c1759cb171c7619af0d2234f2f8fb2a871ee88e956e2ed91bb61778e41f272c6", + "signature": "c1759cb171c7619af0d2234f2f8fb2a871ee88e956e2ed91bb61778e41f272c6" + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "28569d59e07d4378cb3d54979c4c60f9f06305c9bb6999ffe6cab758957adc46", + "signature": "28569d59e07d4378cb3d54979c4c60f9f06305c9bb6999ffe6cab758957adc46" + }, + "../node_modules/typescript/lib/lib.es2017.full.d.ts": { + "version": "873c09f1c309389742d98b7b67419a8e0a5fa6f10ce59fd5149ecd31a2818594", + "signature": "873c09f1c309389742d98b7b67419a8e0a5fa6f10ce59fd5149ecd31a2818594" + }, + "../node_modules/@types/estree/index.d.ts": { + "version": "c2efad8a2f2d7fb931ff15c7959fb45340e74684cd665ddf0cbf9b3977be1644", + "signature": "c2efad8a2f2d7fb931ff15c7959fb45340e74684cd665ddf0cbf9b3977be1644" + }, + "../src/walker.js": { + "version": "4cc9d0e334d83a4cebeeac502de37a1aeeb953f6d4145a886d9eecea1f2142a7", + "signature": "075872468ccc19c83b03fd717fc9305b5f8ec09592210cf60279cb13eca2bd70" + }, + "../src/async.js": { + "version": "904efd145090ac40c3c98f29cc928332898a62ab642dd5921db2ae249bfe014a", + "signature": "da428f781d6dc6dfd4f4afd0dd5f25a780897dc8b57e5b30462491b7d08f32c0" + }, + "../src/sync.js": { + "version": "85bb22b85042f0a3717d8fac2fc8f62af16894652be34d1e08eb3e63785535f5", + "signature": "5b131a727db18c956611a5e33d08217df96d0f2e0f26d98b804d1ec2407e59ae" + }, + "../src/index.js": { + "version": "99128f4c6cb79cb1e3abf3f2ba96faedd2b820aab4fd7f743aab0b8d710a73af", + "signature": "c52be5c79280bfcfcf359c084c6f2f70f405b0ad14dde96b6703dbc5ef2261f5" + } + }, + "options": { + "allowJs": true, + "target": 4, + "module": 99, + "types": [ + "estree" + ], + "declaration": true, + "declarationDir": "./", + "emitDeclarationOnly": true, + "outDir": "./", + "newLine": 1, + "noImplicitAny": true, + "noImplicitThis": true, + "incremental": true, + "configFilePath": "../tsconfig.json" + }, + "referencedMap": { + "../src/walker.js": [ + "../node_modules/@types/estree/index.d.ts" + ], + "../src/async.js": [ + "../src/walker.js", + "../node_modules/@types/estree/index.d.ts" + ], + "../src/sync.js": [ + "../src/walker.js", + "../node_modules/@types/estree/index.d.ts" + ], + "../src/index.js": [ + "../src/sync.js", + "../src/async.js", + "../node_modules/@types/estree/index.d.ts" + ] + }, + "exportedModulesMap": { + "../src/walker.js": [ + "../node_modules/@types/estree/index.d.ts" + ], + "../src/async.js": [ + "../node_modules/@types/estree/index.d.ts" + ], + "../src/sync.js": [ + "../node_modules/@types/estree/index.d.ts" + ], + "../src/index.js": [ + "../node_modules/@types/estree/index.d.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.dom.d.ts", + "../node_modules/typescript/lib/lib.dom.iterable.d.ts", + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts", + "../node_modules/typescript/lib/lib.scripthost.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es2017.full.d.ts", + "../node_modules/@types/estree/index.d.ts", + "../src/walker.js", + [ + "../src/async.js", + [ + { + "file": "../src/async.js", + "start": 864, + "length": 12, + "messageText": "'_should_skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 907, + "length": 14, + "messageText": "'_should_remove' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 954, + "length": 12, + "messageText": "'_replacement' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 991, + "length": 24, + "messageText": "'should_skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 1021, + "length": 26, + "messageText": "'should_remove' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 1053, + "length": 23, + "messageText": "'replacement' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/async.js", + "start": 1643, + "length": 9, + "code": 7053, + "category": 1, + "messageText": { + "messageText": "Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'BaseNode'.", + "category": 1, + "code": 7053, + "next": [ + { + "messageText": "No index signature with a parameter of type 'string' was found on type 'BaseNode'.", + "category": 1, + "code": 7054 + } + ] + } + } + ] + ], + [ + "../src/sync.js", + [ + { + "file": "../src/sync.js", + "start": 837, + "length": 12, + "messageText": "'_should_skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 880, + "length": 14, + "messageText": "'_should_remove' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 927, + "length": 12, + "messageText": "'_replacement' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 964, + "length": 24, + "messageText": "'should_skip' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 994, + "length": 26, + "messageText": "'should_remove' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 1026, + "length": 23, + "messageText": "'replacement' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.", + "category": 1, + "code": 7022 + }, + { + "file": "../src/sync.js", + "start": 1610, + "length": 9, + "code": 7053, + "category": 1, + "messageText": { + "messageText": "Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'BaseNode'.", + "category": 1, + "code": 7053, + "next": [ + { + "messageText": "No index signature with a parameter of type 'string' was found on type 'BaseNode'.", + "category": 1, + "code": 7054 + } + ] + } + } + ] + ], + "../src/index.js" + ] + }, + "version": "3.7.5" +} \ No newline at end of file diff --git a/build/node_modules/estree-walker/types/walker.d.ts b/build/node_modules/estree-walker/types/walker.d.ts new file mode 100644 index 00000000..49d84416 --- /dev/null +++ b/build/node_modules/estree-walker/types/walker.d.ts @@ -0,0 +1,37 @@ +/** @typedef { import('estree').BaseNode} BaseNode */ +/** @typedef {{ + skip: () => void; + remove: () => void; + replace: (node: BaseNode) => void; +}} WalkerContext */ +export class WalkerBase { + /** @type {boolean} */ + should_skip: boolean; + /** @type {boolean} */ + should_remove: boolean; + /** @type {BaseNode | null} */ + replacement: BaseNode | null; + /** @type {WalkerContext} */ + context: WalkerContext; + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + * @param {BaseNode} node + */ + replace(parent: any, prop: string, index: number, node: import("estree").BaseNode): void; + /** + * + * @param {any} parent + * @param {string} prop + * @param {number} index + */ + remove(parent: any, prop: string, index: number): void; +} +export type BaseNode = import("estree").BaseNode; +export type WalkerContext = { + skip: () => void; + remove: () => void; + replace: (node: import("estree").BaseNode) => void; +}; diff --git a/build/node_modules/evp_bytestokey/package.json b/build/node_modules/evp_bytestokey/package.json index ab5d6fd9..cde08cba 100644 --- a/build/node_modules/evp_bytestokey/package.json +++ b/build/node_modules/evp_bytestokey/package.json @@ -20,7 +20,7 @@ "/browserify-cipher", "/parse-asn1" ], - "_resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "_shasum": "7fcbdb198dc71959432efe13842684e0525acb02", "_spec": "evp_bytestokey@^1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-cipher", diff --git a/build/node_modules/expect.js/package.json b/build/node_modules/expect.js/package.json index 9fc65e34..4a695e0d 100644 --- a/build/node_modules/expect.js/package.json +++ b/build/node_modules/expect.js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/expect.js/-/expect.js-0.3.1.tgz", "_shasum": "b0a59a0d2eff5437544ebf0ceaa6015841d09b5b", "_spec": "expect.js@~0.3.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", diff --git a/build/node_modules/extend/.editorconfig b/build/node_modules/extend/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/extend/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/extend/.eslintrc b/build/node_modules/extend/.eslintrc deleted file mode 100644 index a34cf283..00000000 --- a/build/node_modules/extend/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 20], - "eqeqeq": [2, "allow-null"], - "func-name-matching": [1], - "max-depth": [1, 4], - "max-statements": [2, 26], - "no-extra-parens": [1], - "no-magic-numbers": [0], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], - "sort-keys": [0], - } -} diff --git a/build/node_modules/extend/.jscs.json b/build/node_modules/extend/.jscs.json deleted file mode 100644 index 3cce01d7..00000000 --- a/build/node_modules/extend/.jscs.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 6 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": false, - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/build/node_modules/extend/.travis.yml b/build/node_modules/extend/.travis.yml deleted file mode 100644 index 5ccdfc49..00000000 --- a/build/node_modules/extend/.travis.yml +++ /dev/null @@ -1,230 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "10.7" - - "9.11" - - "8.11" - - "7.10" - - "6.14" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "10.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true diff --git a/build/node_modules/extend/CHANGELOG.md b/build/node_modules/extend/CHANGELOG.md deleted file mode 100644 index 2cf7de6f..00000000 --- a/build/node_modules/extend/CHANGELOG.md +++ /dev/null @@ -1,83 +0,0 @@ -3.0.2 / 2018-07-19 -================== - * [Fix] Prevent merging `__proto__` property (#48) - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` - * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` - -3.0.1 / 2017-04-27 -================== - * [Fix] deep extending should work with a non-object (#46) - * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` - * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. - * [Docs] Add example to readme (#34) - -3.0.0 / 2015-07-01 -================== - * [Possible breaking change] Use global "strict" directive (#32) - * [Tests] `int` is an ES3 reserved word - * [Tests] Test up to `io.js` `v2.3` - * [Tests] Add `npm run eslint` - * [Dev Deps] Update `covert`, `jscs` - -2.0.1 / 2015-04-25 -================== - * Use an inline `isArray` check, for ES3 browsers. (#27) - * Some old browsers fail when an identifier is `toString` - * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds - * Add license info to package.json (#25) - * Update `tape`, `jscs` - * Adding a CHANGELOG - -2.0.0 / 2014-10-01 -================== - * Increase code coverage to 100%; run code coverage as part of tests - * Add `npm run lint`; Run linter as part of tests - * Remove nodeType and setInterval checks in isPlainObject - * Updating `tape`, `jscs`, `covert` - * General style and README cleanup - -1.3.0 / 2014-06-20 -================== - * Add component.json for browser support (#18) - * Use SVG for badges in README (#16) - * Updating `tape`, `covert` - * Updating travis-ci to work with multiple node versions - * Fix `deep === false` bug (returning target as {}) (#14) - * Fixing constructor checks in isPlainObject - * Adding additional test coverage - * Adding `npm run coverage` - * Add LICENSE (#13) - * Adding a warning about `false`, per #11 - * General style and whitespace cleanup - -1.2.1 / 2013-09-14 -================== - * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 - * Updating `tape` - -1.2.0 / 2013-09-02 -================== - * Updating the README: add badges - * Adding a missing variable reference. - * Using `tape` instead of `buster` for tests; add more tests (#7) - * Adding node 0.10 to Travis CI (#6) - * Enabling "npm test" and cleaning up package.json (#5) - * Add Travis CI. - -1.1.3 / 2012-12-06 -================== - * Added unit tests. - * Ensure extend function is named. (Looks nicer in a stack trace.) - * README cleanup. - -1.1.1 / 2012-11-07 -================== - * README cleanup. - * Added installation instructions. - * Added a missing semicolon - -1.0.0 / 2012-04-08 -================== - * Initial commit - diff --git a/build/node_modules/extend/LICENSE b/build/node_modules/extend/LICENSE deleted file mode 100644 index e16d6a56..00000000 --- a/build/node_modules/extend/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Stefan Thomas - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/build/node_modules/extend/README.md b/build/node_modules/extend/README.md deleted file mode 100644 index 5b8249aa..00000000 --- a/build/node_modules/extend/README.md +++ /dev/null @@ -1,81 +0,0 @@ -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] - -# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] - -`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. - -Notes: - -* Since Node.js >= 4, - [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - now offers the same functionality natively (but without the "deep copy" option). - See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). -* Some native implementations of `Object.assign` in both Node.js and many - browsers (since NPM modules are for the browser too) may not be fully - spec-compliant. - Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for - a compliant candidate. - -## Installation - -This package is available on [npm][npm-url] as: `extend` - -``` sh -npm install extend -``` - -## Usage - -**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** - -*Extend one object with one or more others, returning the modified object.* - -**Example:** - -``` js -var extend = require('extend'); -extend(targetObject, object1, object2); -``` - -Keep in mind that the target object will be modified, and will be returned from extend(). - -If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). -Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. -Warning: passing `false` as the first argument is not supported. - -### Arguments - -* `deep` *Boolean* (optional) -If set, the merge becomes recursive (i.e. deep copy). -* `target` *Object* -The object to extend. -* `object1` *Object* -The object that will be merged into the first. -* `objectN` *Object* (Optional) -More objects to merge into the first. - -## License - -`node-extend` is licensed under the [MIT License][mit-license-url]. - -## Acknowledgements - -All credit to the jQuery authors for perfecting this amazing utility. - -Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. - -[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg -[travis-url]: https://travis-ci.org/justmoon/node-extend -[npm-url]: https://npmjs.org/package/extend -[mit-license-url]: http://opensource.org/licenses/MIT -[github-justmoon]: https://github.com/justmoon -[github-insin]: https://github.com/insin -[github-ljharb]: https://github.com/ljharb -[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg -[deps-svg]: https://david-dm.org/justmoon/node-extend.svg -[deps-url]: https://david-dm.org/justmoon/node-extend -[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg -[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies - diff --git a/build/node_modules/extend/component.json b/build/node_modules/extend/component.json deleted file mode 100644 index 1500a2f3..00000000 --- a/build/node_modules/extend/component.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "extend", - "author": "Stefan Thomas (http://www.justmoon.net)", - "version": "3.0.0", - "description": "Port of jQuery.extend for node.js and the browser.", - "scripts": [ - "index.js" - ], - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "keywords": [ - "extend", - "clone", - "merge" - ], - "repository" : { - "type": "git", - "url": "https://github.com/justmoon/node-extend.git" - }, - "dependencies": { - }, - "devDependencies": { - "tape" : "~3.0.0", - "covert": "~0.4.0", - "jscs": "~1.6.2" - } -} - diff --git a/build/node_modules/extend/index.js b/build/node_modules/extend/index.js deleted file mode 100644 index 2aa3faae..00000000 --- a/build/node_modules/extend/index.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict'; - -var hasOwn = Object.prototype.hasOwnProperty; -var toStr = Object.prototype.toString; -var defineProperty = Object.defineProperty; -var gOPD = Object.getOwnPropertyDescriptor; - -var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; -}; - -var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) { /**/ } - - return typeof key === 'undefined' || hasOwn.call(obj, key); -}; - -// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target -var setProperty = function setProperty(target, options) { - if (defineProperty && options.name === '__proto__') { - defineProperty(target, options.name, { - enumerable: true, - configurable: true, - value: options.newValue, - writable: true - }); - } else { - target[options.name] = options.newValue; - } -}; - -// Return undefined instead of __proto__ if '__proto__' is not an own property -var getProperty = function getProperty(obj, name) { - if (name === '__proto__') { - if (!hasOwn.call(obj, name)) { - return void 0; - } else if (gOPD) { - // In early versions of node, obj['__proto__'] is buggy when obj has - // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. - return gOPD(obj, name).value; - } - } - - return obj[name]; -}; - -module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { - target = {}; - } - - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = getProperty(target, name); - copy = getProperty(options, name); - - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); - - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - setProperty(target, { name: name, newValue: copy }); - } - } - } - } - } - - // Return the modified object - return target; -}; diff --git a/build/node_modules/extend/package.json b/build/node_modules/extend/package.json deleted file mode 100644 index 846ce67a..00000000 --- a/build/node_modules/extend/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "extend@^3.0.0", - "_id": "extend@3.0.2", - "_inBundle": false, - "_integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "_location": "/extend", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "extend@^3.0.0", - "name": "extend", - "escapedName": "extend", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/superagent" - ], - "_resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "_shasum": "f8b1136b4071fbd8eb140aff858b1019ec2915fa", - "_spec": "extend@^3.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", - "author": { - "name": "Stefan Thomas", - "email": "justmoon@members.fsf.org", - "url": "http://www.justmoon.net" - }, - "bugs": { - "url": "https://github.com/justmoon/node-extend/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Port of jQuery.extend for node.js and the browser", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "covert": "^1.1.0", - "eslint": "^4.19.1", - "jscs": "^3.0.7", - "tape": "^4.9.1" - }, - "homepage": "https://github.com/justmoon/node-extend#readme", - "keywords": [ - "extend", - "clone", - "merge" - ], - "license": "MIT", - "main": "index", - "name": "extend", - "repository": { - "type": "git", - "url": "git+https://github.com/justmoon/node-extend.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "eslint": "eslint *.js */*.js", - "jscs": "jscs *.js */*.js", - "lint": "npm run jscs && npm run eslint", - "posttest": "npm run coverage-quiet", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "node test" - }, - "version": "3.0.2" -} diff --git a/build/node_modules/fast-safe-stringify/index.d.ts b/build/node_modules/fast-safe-stringify/index.d.ts index 56f68653..9a9b1f00 100644 --- a/build/node_modules/fast-safe-stringify/index.d.ts +++ b/build/node_modules/fast-safe-stringify/index.d.ts @@ -1,8 +1,23 @@ -declare function stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; +declare function stringify( + value: any, + replacer?: (key: string, value: any) => any, + space?: string | number, + options?: { depthLimit: number | undefined; edgesLimit: number | undefined } +): string; declare namespace stringify { - export function stable(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; - export function stableStringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; + export function stable( + value: any, + replacer?: (key: string, value: any) => any, + space?: string | number, + options?: { depthLimit: number | undefined; edgesLimit: number | undefined } + ): string; + export function stableStringify( + value: any, + replacer?: (key: string, value: any) => any, + space?: string | number, + options?: { depthLimit: number | undefined; edgesLimit: number | undefined } + ): string; } export default stringify; diff --git a/build/node_modules/fast-safe-stringify/index.js b/build/node_modules/fast-safe-stringify/index.js index 670698d6..ecf7e519 100644 --- a/build/node_modules/fast-safe-stringify/index.js +++ b/build/node_modules/fast-safe-stringify/index.js @@ -3,59 +3,101 @@ stringify.default = stringify stringify.stable = deterministicStringify stringify.stableStringify = deterministicStringify +var LIMIT_REPLACE_NODE = '[...]' +var CIRCULAR_REPLACE_NODE = '[Circular]' + var arr = [] var replacerStack = [] +function defaultOptions () { + return { + depthLimit: Number.MAX_SAFE_INTEGER, + edgesLimit: Number.MAX_SAFE_INTEGER + } +} + // Regular stringify -function stringify (obj, replacer, spacer) { - decirc(obj, '', [], undefined) - var res - if (replacerStack.length === 0) { - res = JSON.stringify(obj, replacer, spacer) - } else { - res = JSON.stringify(obj, replaceGetterValues(replacer), spacer) +function stringify (obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions() } - while (arr.length !== 0) { - var part = arr.pop() - if (part.length === 4) { - Object.defineProperty(part[0], part[1], part[3]) + + decirc(obj, '', 0, [], undefined, 0, options) + var res + try { + if (replacerStack.length === 0) { + res = JSON.stringify(obj, replacer, spacer) } else { - part[0][part[1]] = part[2] + res = JSON.stringify(obj, replaceGetterValues(replacer), spacer) + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]') + } finally { + while (arr.length !== 0) { + var part = arr.pop() + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]) + } else { + part[0][part[1]] = part[2] + } } } return res } -function decirc (val, k, stack, parent) { + +function setReplace (replace, val, k, parent) { + var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k) + if (propertyDescriptor.get !== undefined) { + if (propertyDescriptor.configurable) { + Object.defineProperty(parent, k, { value: replace }) + arr.push([parent, k, val, propertyDescriptor]) + } else { + replacerStack.push([val, k, replace]) + } + } else { + parent[k] = replace + arr.push([parent, k, val]) + } +} + +function decirc (val, k, edgeIndex, stack, parent, depth, options) { + depth += 1 var i if (typeof val === 'object' && val !== null) { for (i = 0; i < stack.length; i++) { if (stack[i] === val) { - var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k) - if (propertyDescriptor.get !== undefined) { - if (propertyDescriptor.configurable) { - Object.defineProperty(parent, k, { value: '[Circular]' }) - arr.push([parent, k, val, propertyDescriptor]) - } else { - replacerStack.push([val, k]) - } - } else { - parent[k] = '[Circular]' - arr.push([parent, k, val]) - } + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent) return } } + + if ( + typeof options.depthLimit !== 'undefined' && + depth > options.depthLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + + if ( + typeof options.edgesLimit !== 'undefined' && + edgeIndex + 1 > options.edgesLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + stack.push(val) // Optimize for Arrays. Big arrays could kill the performance otherwise! if (Array.isArray(val)) { for (i = 0; i < val.length; i++) { - decirc(val[i], i, stack, val) + decirc(val[i], i, i, stack, val, depth, options) } } else { var keys = Object.keys(val) for (i = 0; i < keys.length; i++) { var key = keys[i] - decirc(val[key], key, stack, val) + decirc(val[key], key, i, stack, val, depth, options) } } stack.pop() @@ -73,53 +115,74 @@ function compareFunction (a, b) { return 0 } -function deterministicStringify (obj, replacer, spacer) { - var tmp = deterministicDecirc(obj, '', [], undefined) || obj - var res - if (replacerStack.length === 0) { - res = JSON.stringify(tmp, replacer, spacer) - } else { - res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer) +function deterministicStringify (obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions() } - while (arr.length !== 0) { - var part = arr.pop() - if (part.length === 4) { - Object.defineProperty(part[0], part[1], part[3]) + + var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj + var res + try { + if (replacerStack.length === 0) { + res = JSON.stringify(tmp, replacer, spacer) } else { - part[0][part[1]] = part[2] + res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer) + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]') + } finally { + // Ensure that we restore the object as it was. + while (arr.length !== 0) { + var part = arr.pop() + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]) + } else { + part[0][part[1]] = part[2] + } } } return res } -function deterministicDecirc (val, k, stack, parent) { +function deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) { + depth += 1 var i if (typeof val === 'object' && val !== null) { for (i = 0; i < stack.length; i++) { if (stack[i] === val) { - var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k) - if (propertyDescriptor.get !== undefined) { - if (propertyDescriptor.configurable) { - Object.defineProperty(parent, k, { value: '[Circular]' }) - arr.push([parent, k, val, propertyDescriptor]) - } else { - replacerStack.push([val, k]) - } - } else { - parent[k] = '[Circular]' - arr.push([parent, k, val]) - } + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent) + return + } + } + try { + if (typeof val.toJSON === 'function') { return } + } catch (_) { + return } - if (typeof val.toJSON === 'function') { + + if ( + typeof options.depthLimit !== 'undefined' && + depth > options.depthLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) return } + + if ( + typeof options.edgesLimit !== 'undefined' && + edgeIndex + 1 > options.edgesLimit + ) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent) + return + } + stack.push(val) // Optimize for Arrays. Big arrays could kill the performance otherwise! if (Array.isArray(val)) { for (i = 0; i < val.length; i++) { - deterministicDecirc(val[i], i, stack, val) + deterministicDecirc(val[i], i, i, stack, val, depth, options) } } else { // Create a temporary object in the required way @@ -127,10 +190,10 @@ function deterministicDecirc (val, k, stack, parent) { var keys = Object.keys(val).sort(compareFunction) for (i = 0; i < keys.length; i++) { var key = keys[i] - deterministicDecirc(val[key], key, stack, val) + deterministicDecirc(val[key], key, i, stack, val, depth, options) tmp[key] = val[key] } - if (parent !== undefined) { + if (typeof parent !== 'undefined') { arr.push([parent, k, val]) parent[k] = tmp } else { @@ -142,15 +205,20 @@ function deterministicDecirc (val, k, stack, parent) { } // wraps replacer function to handle values we couldn't replace -// and mark them as [Circular] +// and mark them as replaced value function replaceGetterValues (replacer) { - replacer = replacer !== undefined ? replacer : function (k, v) { return v } + replacer = + typeof replacer !== 'undefined' + ? replacer + : function (k, v) { + return v + } return function (key, val) { if (replacerStack.length > 0) { for (var i = 0; i < replacerStack.length; i++) { var part = replacerStack[i] if (part[1] === key && part[0] === val) { - val = '[Circular]' + val = part[2] replacerStack.splice(i, 1) break } diff --git a/build/node_modules/fast-safe-stringify/package.json b/build/node_modules/fast-safe-stringify/package.json index d285d4de..47e99e9b 100644 --- a/build/node_modules/fast-safe-stringify/package.json +++ b/build/node_modules/fast-safe-stringify/package.json @@ -1,27 +1,27 @@ { - "_from": "fast-safe-stringify@^2.0.4", - "_id": "fast-safe-stringify@2.0.7", + "_from": "fast-safe-stringify@^2.1.1", + "_id": "fast-safe-stringify@2.1.1", "_inBundle": false, - "_integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "_integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "_location": "/fast-safe-stringify", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "fast-safe-stringify@^2.0.4", + "raw": "fast-safe-stringify@^2.1.1", "name": "fast-safe-stringify", "escapedName": "fast-safe-stringify", - "rawSpec": "^2.0.4", + "rawSpec": "^2.1.1", "saveSpec": null, - "fetchSpec": "^2.0.4" + "fetchSpec": "^2.1.1" }, "_requiredBy": [ - "/logform" + "/superagent" ], - "_resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "_shasum": "124aa885899261f68aedb42a7c080de9da608743", - "_spec": "fast-safe-stringify@^2.0.4", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/logform", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "_shasum": "c406a83b6e70d9e35ce3b30a81141df30aeba884", + "_spec": "fast-safe-stringify@^2.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "author": { "name": "David Mark Clements" }, @@ -83,5 +83,5 @@ "test": "standard && tap --no-esm test.js test-stable.js" }, "typings": "index", - "version": "2.0.7" + "version": "2.1.1" } diff --git a/build/node_modules/fast-safe-stringify/readme.md b/build/node_modules/fast-safe-stringify/readme.md index 51ed1fb1..47179c94 100644 --- a/build/node_modules/fast-safe-stringify/readme.md +++ b/build/node_modules/fast-safe-stringify/readme.md @@ -2,7 +2,9 @@ Safe and fast serialization alternative to [JSON.stringify][]. -Gracefully handles circular structures instead of throwing. +Gracefully handles circular structures instead of throwing in most cases. +It could return an error string if the circular object is too complex to analyze, +e.g. in case there are proxies involved. Provides a deterministic ("stable") version as well that will also gracefully handle circular structures. See the example below for further information. @@ -11,7 +13,7 @@ handle circular structures. See the example below for further information. The same as [JSON.stringify][]. -`stringify(value[, replacer[, space]])` +`stringify(value[, replacer[, space[, options]]])` ```js const safeStringify = require('fast-safe-stringify') @@ -31,7 +33,15 @@ function replacer(key, value) { } return value } -const serialized = safeStringify(o, replacer, 2) + +// those are also defaults limits when no options object is passed into safeStringify +// configure it to lower the limit. +const options = { + depthLimit: Number.MAX_SAFE_INTEGER, + edgesLimit: Number.MAX_SAFE_INTEGER +}; + +const serialized = safeStringify(o, replacer, 2, options) // Key: "" Value: {"a":1,"o":"[Circular]"} // Key: "a" Value: 1 // Key: "o" Value: "[Circular]" @@ -41,6 +51,7 @@ console.log(serialized) // } ``` + Using the deterministic version also works the same: ```js @@ -60,6 +71,11 @@ A faster and side-effect free implementation is available in the [safe-stable-stringify][] module. However it is still considered experimental due to a new and more complex implementation. +### Replace strings constants + +- `[Circular]` - when same reference is found +- `[...]` - when some limit from options object is reached + ## Differences to JSON.stringify In general the behavior is identical to [JSON.stringify][]. The [`replacer`][] diff --git a/build/node_modules/fast-safe-stringify/test-stable.js b/build/node_modules/fast-safe-stringify/test-stable.js index 93d8bc4b..c55b95ca 100644 --- a/build/node_modules/fast-safe-stringify/test-stable.js +++ b/build/node_modules/fast-safe-stringify/test-stable.js @@ -2,15 +2,14 @@ const test = require('tap').test const fss = require('./').stable const clone = require('clone') const s = JSON.stringify +const stream = require('stream') test('circular reference to root', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.circle = fixture - const expected = s( - { circle: '[Circular]', name: 'Tywin Lannister' } - ) + const expected = s({ circle: '[Circular]', name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -22,50 +21,54 @@ test('circular getter reference to root', function (assert) { } } - const expected = s( - { circle: '[Circular]', name: 'Tywin Lannister' } - ) + const expected = s({ circle: '[Circular]', name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('nested circular reference to root', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.id = { circle: fixture } - const expected = s( - { id: { circle: '[Circular]' }, name: 'Tywin Lannister' } - ) + const expected = s({ id: { circle: '[Circular]' }, name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('child circular reference', function (assert) { - const fixture = { name: 'Tywin Lannister', child: { name: 'Tyrion Lannister' } } + const fixture = { + name: 'Tywin Lannister', + child: { name: 'Tyrion Lannister' } + } fixture.child.dinklage = fixture.child const expected = s({ child: { - dinklage: '[Circular]', name: 'Tyrion Lannister' + dinklage: '[Circular]', + name: 'Tyrion Lannister' }, name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('nested child circular reference', function (assert) { - const fixture = { name: 'Tywin Lannister', child: { name: 'Tyrion Lannister' } } + const fixture = { + name: 'Tywin Lannister', + child: { name: 'Tyrion Lannister' } + } fixture.child.actor = { dinklage: fixture.child } const expected = s({ child: { - actor: { dinklage: '[Circular]' }, name: 'Tyrion Lannister' + actor: { dinklage: '[Circular]' }, + name: 'Tyrion Lannister' }, name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -73,10 +76,11 @@ test('circular objects in an array', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.hand = [fixture, fixture] const expected = s({ - hand: ['[Circular]', '[Circular]'], name: 'Tywin Lannister' + hand: ['[Circular]', '[Circular]'], + name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -96,7 +100,7 @@ test('nested circular references in an array', function (assert) { ] }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -105,7 +109,7 @@ test('circular arrays', function (assert) { fixture.push(fixture, fixture) const expected = s(['[Circular]', '[Circular]']) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -120,7 +124,7 @@ test('nested circular arrays', function (assert) { { bastards: '[Circular]', name: 'Ramsay Bolton' } ]) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -132,7 +136,7 @@ test('repeated non-circular references in objects', function (assert) { } const expected = s(fixture) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -141,7 +145,7 @@ test('repeated non-circular references in arrays', function (assert) { const fixture = [daenerys, daenerys] const expected = s(fixture) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -155,24 +159,28 @@ test('double child circular reference', function (assert) { const cloned = clone(fixture) const expected = s({ childA: { - dinklage: '[Circular]', name: 'Tyrion Lannister' + dinklage: '[Circular]', + name: 'Tyrion Lannister' }, childB: { - dinklage: '[Circular]', name: 'Tyrion Lannister' + dinklage: '[Circular]', + name: 'Tyrion Lannister' }, name: 'Tywin Lannister' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) // check if the fixture has not been modified - assert.deepEqual(fixture, cloned) + assert.same(fixture, cloned) assert.end() }) test('child circular reference with toJSON', function (assert) { - // Create a test object that has an overriden `toJSON` property - TestObject.prototype.toJSON = function () { return { special: 'case' } } + // Create a test object that has an overridden `toJSON` property + TestObject.prototype.toJSON = function () { + return { special: 'case' } + } function TestObject (content) {} // Creating a simple circular object structure @@ -186,16 +194,22 @@ test('child circular reference with toJSON', function (assert) { otherParentObject.otherChildObject.otherParentObject = otherParentObject // Making sure our original tests work - assert.deepEqual(parentObject.childObject.parentObject, parentObject) - assert.deepEqual(otherParentObject.otherChildObject.otherParentObject, otherParentObject) + assert.same(parentObject.childObject.parentObject, parentObject) + assert.same( + otherParentObject.otherChildObject.otherParentObject, + otherParentObject + ) // Should both be idempotent assert.equal(fss(parentObject), '{"childObject":{"special":"case"}}') assert.equal(fss(otherParentObject), '{"special":"case"}') // Therefore the following assertion should be `true` - assert.deepEqual(parentObject.childObject.parentObject, parentObject) - assert.deepEqual(otherParentObject.otherChildObject.otherParentObject, otherParentObject) + assert.same(parentObject.childObject.parentObject, parentObject) + assert.same( + otherParentObject.otherChildObject.otherParentObject, + otherParentObject + ) assert.end() }) @@ -203,14 +217,14 @@ test('child circular reference with toJSON', function (assert) { test('null object', function (assert) { const expected = s(null) const actual = fss(null) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('null property', function (assert) { const expected = s({ f: null }) const actual = fss({ f: null }) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -257,7 +271,7 @@ test('nested child circular reference in toJSON', function (assert) { } }) const actual = fss(o) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -270,7 +284,7 @@ test('circular getters are restored when stringified', function (assert) { } fss(fixture) - assert.is(fixture.circle, fixture) + assert.equal(fixture.circle, fixture) assert.end() }) @@ -278,13 +292,15 @@ test('non-configurable circular getters use a replacer instead of markers', func const fixture = { name: 'Tywin Lannister' } Object.defineProperty(fixture, 'circle', { configurable: false, - get: function () { return fixture }, + get: function () { + return fixture + }, enumerable: true }) fss(fixture) - assert.is(fixture.circle, fixture) + assert.equal(fixture.circle, fixture) assert.end() }) @@ -293,19 +309,96 @@ test('getter child circular reference', function (assert) { name: 'Tywin Lannister', child: { name: 'Tyrion Lannister', - get dinklage () { return fixture.child } + get dinklage () { + return fixture.child + } }, - get self () { return fixture } + get self () { + return fixture + } } const expected = s({ child: { - dinklage: '[Circular]', name: 'Tyrion Lannister' + dinklage: '[Circular]', + name: 'Tyrion Lannister' }, name: 'Tywin Lannister', self: '[Circular]' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) + assert.end() +}) + +test('Proxy throwing', function (assert) { + assert.plan(1) + const s = new stream.PassThrough() + s.resume() + s.write('', () => { + assert.end() + }) + const actual = fss({ s, p: new Proxy({}, { get () { throw new Error('kaboom') } }) }) + assert.equal(actual, '"[unable to serialize, circular reference is too complex to analyze]"') +}) + +test('depthLimit option - will replace deep objects', function (assert) { + const fixture = { + name: 'Tywin Lannister', + child: { + name: 'Tyrion Lannister' + }, + get self () { + return fixture + } + } + + const expected = s({ + child: '[...]', + name: 'Tywin Lannister', + self: '[Circular]' + }) + const actual = fss(fixture, undefined, undefined, { + depthLimit: 1, + edgesLimit: 1 + }) + assert.equal(actual, expected) + assert.end() +}) + +test('edgesLimit option - will replace deep objects', function (assert) { + const fixture = { + object: { + 1: { test: 'test' }, + 2: { test: 'test' }, + 3: { test: 'test' }, + 4: { test: 'test' } + }, + array: [ + { test: 'test' }, + { test: 'test' }, + { test: 'test' }, + { test: 'test' } + ], + get self () { + return fixture + } + } + + const expected = s({ + array: [{ test: 'test' }, { test: 'test' }, { test: 'test' }, '[...]'], + object: { + 1: { test: 'test' }, + 2: { test: 'test' }, + 3: { test: 'test' }, + 4: '[...]' + }, + self: '[Circular]' + }) + const actual = fss(fixture, undefined, undefined, { + depthLimit: 3, + edgesLimit: 3 + }) + assert.equal(actual, expected) assert.end() }) diff --git a/build/node_modules/fast-safe-stringify/test.js b/build/node_modules/fast-safe-stringify/test.js index 7da5821c..a4170e96 100644 --- a/build/node_modules/fast-safe-stringify/test.js +++ b/build/node_modules/fast-safe-stringify/test.js @@ -2,15 +2,14 @@ const test = require('tap').test const fss = require('./') const clone = require('clone') const s = JSON.stringify +const stream = require('stream') test('circular reference to root', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.circle = fixture - const expected = s( - { name: 'Tywin Lannister', circle: '[Circular]' } - ) + const expected = s({ name: 'Tywin Lannister', circle: '[Circular]' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -21,50 +20,54 @@ test('circular getter reference to root', function (assert) { return fixture } } - const expected = s( - { name: 'Tywin Lannister', circle: '[Circular]' } - ) + const expected = s({ name: 'Tywin Lannister', circle: '[Circular]' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('nested circular reference to root', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.id = { circle: fixture } - const expected = s( - { name: 'Tywin Lannister', id: { circle: '[Circular]' } } - ) + const expected = s({ name: 'Tywin Lannister', id: { circle: '[Circular]' } }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('child circular reference', function (assert) { - const fixture = { name: 'Tywin Lannister', child: { name: 'Tyrion Lannister' } } + const fixture = { + name: 'Tywin Lannister', + child: { name: 'Tyrion Lannister' } + } fixture.child.dinklage = fixture.child const expected = s({ name: 'Tywin Lannister', child: { - name: 'Tyrion Lannister', dinklage: '[Circular]' + name: 'Tyrion Lannister', + dinklage: '[Circular]' } }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('nested child circular reference', function (assert) { - const fixture = { name: 'Tywin Lannister', child: { name: 'Tyrion Lannister' } } + const fixture = { + name: 'Tywin Lannister', + child: { name: 'Tyrion Lannister' } + } fixture.child.actor = { dinklage: fixture.child } const expected = s({ name: 'Tywin Lannister', child: { - name: 'Tyrion Lannister', actor: { dinklage: '[Circular]' } + name: 'Tyrion Lannister', + actor: { dinklage: '[Circular]' } } }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -72,10 +75,11 @@ test('circular objects in an array', function (assert) { const fixture = { name: 'Tywin Lannister' } fixture.hand = [fixture, fixture] const expected = s({ - name: 'Tywin Lannister', hand: ['[Circular]', '[Circular]'] + name: 'Tywin Lannister', + hand: ['[Circular]', '[Circular]'] }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -95,7 +99,7 @@ test('nested circular references in an array', function (assert) { ] }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -104,7 +108,7 @@ test('circular arrays', function (assert) { fixture.push(fixture, fixture) const expected = s(['[Circular]', '[Circular]']) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -119,7 +123,7 @@ test('nested circular arrays', function (assert) { { name: 'Ramsay Bolton', bastards: '[Circular]' } ]) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -131,7 +135,7 @@ test('repeated non-circular references in objects', function (assert) { } const expected = s(fixture) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -140,7 +144,7 @@ test('repeated non-circular references in arrays', function (assert) { const fixture = [daenerys, daenerys] const expected = s(fixture) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -155,23 +159,27 @@ test('double child circular reference', function (assert) { const expected = s({ name: 'Tywin Lannister', childA: { - name: 'Tyrion Lannister', dinklage: '[Circular]' + name: 'Tyrion Lannister', + dinklage: '[Circular]' }, childB: { - name: 'Tyrion Lannister', dinklage: '[Circular]' + name: 'Tyrion Lannister', + dinklage: '[Circular]' } }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) // check if the fixture has not been modified - assert.deepEqual(fixture, cloned) + assert.same(fixture, cloned) assert.end() }) test('child circular reference with toJSON', function (assert) { - // Create a test object that has an overriden `toJSON` property - TestObject.prototype.toJSON = function () { return { special: 'case' } } + // Create a test object that has an overridden `toJSON` property + TestObject.prototype.toJSON = function () { + return { special: 'case' } + } function TestObject (content) {} // Creating a simple circular object structure @@ -185,16 +193,22 @@ test('child circular reference with toJSON', function (assert) { otherParentObject.otherChildObject.otherParentObject = otherParentObject // Making sure our original tests work - assert.deepEqual(parentObject.childObject.parentObject, parentObject) - assert.deepEqual(otherParentObject.otherChildObject.otherParentObject, otherParentObject) + assert.same(parentObject.childObject.parentObject, parentObject) + assert.same( + otherParentObject.otherChildObject.otherParentObject, + otherParentObject + ) // Should both be idempotent assert.equal(fss(parentObject), '{"childObject":{"special":"case"}}') assert.equal(fss(otherParentObject), '{"special":"case"}') // Therefore the following assertion should be `true` - assert.deepEqual(parentObject.childObject.parentObject, parentObject) - assert.deepEqual(otherParentObject.otherChildObject.otherParentObject, otherParentObject) + assert.same(parentObject.childObject.parentObject, parentObject) + assert.same( + otherParentObject.otherChildObject.otherParentObject, + otherParentObject + ) assert.end() }) @@ -202,14 +216,14 @@ test('child circular reference with toJSON', function (assert) { test('null object', function (assert) { const expected = s(null) const actual = fss(null) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) test('null property', function (assert) { const expected = s({ f: null }) const actual = fss({ f: null }) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -250,7 +264,7 @@ test('nested child circular reference in toJSON', function (assert) { } }) const actual = fss(o) - assert.is(actual, expected) + assert.equal(actual, expected) assert.end() }) @@ -263,7 +277,7 @@ test('circular getters are restored when stringified', function (assert) { } fss(fixture) - assert.is(fixture.circle, fixture) + assert.equal(fixture.circle, fixture) assert.end() }) @@ -271,13 +285,15 @@ test('non-configurable circular getters use a replacer instead of markers', func const fixture = { name: 'Tywin Lannister' } Object.defineProperty(fixture, 'circle', { configurable: false, - get: function () { return fixture }, + get: function () { + return fixture + }, enumerable: true }) fss(fixture) - assert.is(fixture.circle, fixture) + assert.equal(fixture.circle, fixture) assert.end() }) @@ -286,19 +302,96 @@ test('getter child circular reference are replaced instead of marked', function name: 'Tywin Lannister', child: { name: 'Tyrion Lannister', - get dinklage () { return fixture.child } + get dinklage () { + return fixture.child + } }, - get self () { return fixture } + get self () { + return fixture + } } const expected = s({ name: 'Tywin Lannister', child: { - name: 'Tyrion Lannister', dinklage: '[Circular]' + name: 'Tyrion Lannister', + dinklage: '[Circular]' }, self: '[Circular]' }) const actual = fss(fixture) - assert.is(actual, expected) + assert.equal(actual, expected) + assert.end() +}) + +test('Proxy throwing', function (assert) { + assert.plan(1) + const s = new stream.PassThrough() + s.resume() + s.write('', () => { + assert.end() + }) + const actual = fss({ s, p: new Proxy({}, { get () { throw new Error('kaboom') } }) }) + assert.equal(actual, '"[unable to serialize, circular reference is too complex to analyze]"') +}) + +test('depthLimit option - will replace deep objects', function (assert) { + const fixture = { + name: 'Tywin Lannister', + child: { + name: 'Tyrion Lannister' + }, + get self () { + return fixture + } + } + + const expected = s({ + name: 'Tywin Lannister', + child: '[...]', + self: '[Circular]' + }) + const actual = fss(fixture, undefined, undefined, { + depthLimit: 1, + edgesLimit: 1 + }) + assert.equal(actual, expected) + assert.end() +}) + +test('edgesLimit option - will replace deep objects', function (assert) { + const fixture = { + object: { + 1: { test: 'test' }, + 2: { test: 'test' }, + 3: { test: 'test' }, + 4: { test: 'test' } + }, + array: [ + { test: 'test' }, + { test: 'test' }, + { test: 'test' }, + { test: 'test' } + ], + get self () { + return fixture + } + } + + const expected = s({ + object: { + 1: { test: 'test' }, + 2: { test: 'test' }, + 3: { test: 'test' }, + 4: '[...]' + }, + array: [{ test: 'test' }, { test: 'test' }, { test: 'test' }, '[...]'], + self: '[Circular]' + }) + const actual = fss(fixture, undefined, undefined, { + depthLimit: 3, + edgesLimit: 3 + }) + assert.equal(actual, expected) assert.end() }) diff --git a/build/node_modules/fecha/package.json b/build/node_modules/fecha/package.json index d59b2f5a..8f565ff8 100644 --- a/build/node_modules/fecha/package.json +++ b/build/node_modules/fecha/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/logform" ], - "_resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fecha/-/fecha-4.2.1.tgz", "_shasum": "0a83ad8f86ef62a091e22bb5a039cd03d23eecce", "_spec": "fecha@^4.2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/logform", diff --git a/build/node_modules/fill-range/LICENSE b/build/node_modules/fill-range/LICENSE new file mode 100644 index 00000000..9af4a67d --- /dev/null +++ b/build/node_modules/fill-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/fill-range/README.md b/build/node_modules/fill-range/README.md new file mode 100644 index 00000000..8d756fe9 --- /dev/null +++ b/build/node_modules/fill-range/README.md @@ -0,0 +1,237 @@ +# fill-range [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/fill-range.svg?style=flat)](https://www.npmjs.com/package/fill-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![NPM total downloads](https://img.shields.io/npm/dt/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fill-range.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fill-range) + +> Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex` + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save fill-range +``` + +## Usage + +Expands numbers and letters, optionally using a `step` as the last argument. _(Numbers may be defined as JavaScript numbers or strings)_. + +```js +const fill = require('fill-range'); +// fill(from, to[, step, options]); + +console.log(fill('1', '10')); //=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] +console.log(fill('1', '10', { toRegex: true })); //=> [1-9]|10 +``` + +**Params** + +* `from`: **{String|Number}** the number or letter to start with +* `to`: **{String|Number}** the number or letter to end with +* `step`: **{String|Number|Object|Function}** Optionally pass a [step](#optionsstep) to use. +* `options`: **{Object|Function}**: See all available [options](#options) + +## Examples + +By default, an array of values is returned. + +**Alphabetical ranges** + +```js +console.log(fill('a', 'e')); //=> ['a', 'b', 'c', 'd', 'e'] +console.log(fill('A', 'E')); //=> [ 'A', 'B', 'C', 'D', 'E' ] +``` + +**Numerical ranges** + +Numbers can be defined as actual numbers or strings. + +```js +console.log(fill(1, 5)); //=> [ 1, 2, 3, 4, 5 ] +console.log(fill('1', '5')); //=> [ 1, 2, 3, 4, 5 ] +``` + +**Negative ranges** + +Numbers can be defined as actual numbers or strings. + +```js +console.log(fill('-5', '-1')); //=> [ '-5', '-4', '-3', '-2', '-1' ] +console.log(fill('-5', '5')); //=> [ '-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5' ] +``` + +**Steps (increments)** + +```js +// numerical ranges with increments +console.log(fill('0', '25', 4)); //=> [ '0', '4', '8', '12', '16', '20', '24' ] +console.log(fill('0', '25', 5)); //=> [ '0', '5', '10', '15', '20', '25' ] +console.log(fill('0', '25', 6)); //=> [ '0', '6', '12', '18', '24' ] + +// alphabetical ranges with increments +console.log(fill('a', 'z', 4)); //=> [ 'a', 'e', 'i', 'm', 'q', 'u', 'y' ] +console.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ] +console.log(fill('a', 'z', 6)); //=> [ 'a', 'g', 'm', 's', 'y' ] +``` + +## Options + +### options.step + +**Type**: `number` (formatted as a string or number) + +**Default**: `undefined` + +**Description**: The increment to use for the range. Can be used with letters or numbers. + +**Example(s)** + +```js +// numbers +console.log(fill('1', '10', 2)); //=> [ '1', '3', '5', '7', '9' ] +console.log(fill('1', '10', 3)); //=> [ '1', '4', '7', '10' ] +console.log(fill('1', '10', 4)); //=> [ '1', '5', '9' ] + +// letters +console.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ] +console.log(fill('a', 'z', 7)); //=> [ 'a', 'h', 'o', 'v' ] +console.log(fill('a', 'z', 9)); //=> [ 'a', 'j', 's' ] +``` + +### options.strictRanges + +**Type**: `boolean` + +**Default**: `false` + +**Description**: By default, `null` is returned when an invalid range is passed. Enable this option to throw a `RangeError` on invalid ranges. + +**Example(s)** + +The following are all invalid: + +```js +fill('1.1', '2'); // decimals not supported in ranges +fill('a', '2'); // incompatible range values +fill(1, 10, 'foo'); // invalid "step" argument +``` + +### options.stringify + +**Type**: `boolean` + +**Default**: `undefined` + +**Description**: Cast all returned values to strings. By default, integers are returned as numbers. + +**Example(s)** + +```js +console.log(fill(1, 5)); //=> [ 1, 2, 3, 4, 5 ] +console.log(fill(1, 5, { stringify: true })); //=> [ '1', '2', '3', '4', '5' ] +``` + +### options.toRegex + +**Type**: `boolean` + +**Default**: `undefined` + +**Description**: Create a regex-compatible source string, instead of expanding values to an array. + +**Example(s)** + +```js +// alphabetical range +console.log(fill('a', 'e', { toRegex: true })); //=> '[a-e]' +// alphabetical with step +console.log(fill('a', 'z', 3, { toRegex: true })); //=> 'a|d|g|j|m|p|s|v|y' +// numerical range +console.log(fill('1', '100', { toRegex: true })); //=> '[1-9]|[1-9][0-9]|100' +// numerical range with zero padding +console.log(fill('000001', '100000', { toRegex: true })); +//=> '0{5}[1-9]|0{4}[1-9][0-9]|0{3}[1-9][0-9]{2}|0{2}[1-9][0-9]{3}|0[1-9][0-9]{4}|100000' +``` + +### options.transform + +**Type**: `function` + +**Default**: `undefined` + +**Description**: Customize each value in the returned array (or [string](#optionstoRegex)). _(you can also pass this function as the last argument to `fill()`)_. + +**Example(s)** + +```js +// add zero padding +console.log(fill(1, 5, value => String(value).padStart(4, '0'))); +//=> ['0001', '0002', '0003', '0004', '0005'] +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 116 | [jonschlinkert](https://github.com/jonschlinkert) | +| 4 | [paulmillr](https://github.com/paulmillr) | +| 2 | [realityking](https://github.com/realityking) | +| 2 | [bluelovers](https://github.com/bluelovers) | +| 1 | [edorivai](https://github.com/edorivai) | +| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +Please consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)! + + + + + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 08, 2019._ \ No newline at end of file diff --git a/build/node_modules/fill-range/index.js b/build/node_modules/fill-range/index.js new file mode 100644 index 00000000..97ce35a5 --- /dev/null +++ b/build/node_modules/fill-range/index.js @@ -0,0 +1,249 @@ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +const util = require('util'); +const toRegexRange = require('to-regex-range'); + +const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); + +const transform = toNumber => { + return value => toNumber === true ? Number(value) : String(value); +}; + +const isValidValue = value => { + return typeof value === 'number' || (typeof value === 'string' && value !== ''); +}; + +const isNumber = num => Number.isInteger(+num); + +const zeros = input => { + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while (value[++index] === '0'); + return index > 0; +}; + +const stringify = (start, end, options) => { + if (typeof start === 'string' || typeof end === 'string') { + return true; + } + return options.stringify === true; +}; + +const pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0')); + } + if (toNumber === false) { + return String(input); + } + return input; +}; + +const toMaxLen = (input, maxLength) => { + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) input = '0' + input; + return negative ? ('-' + input) : input; +}; + +const toSequence = (parts, options) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; + + if (parts.positives.length) { + positives = parts.positives.join('|'); + } + + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.join('|')})`; + } + + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + + if (options.wrap) { + return `(${prefix}${result})`; + } + + return result; +}; + +const toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } + + let start = String.fromCharCode(a); + if (a === b) return start; + + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; + +const toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return toRegexRange(start, end, options); +}; + +const rangeError = (...args) => { + return new RangeError('Invalid range arguments: ' + util.inspect(...args)); +}; + +const invalidRange = (start, end, options) => { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; +}; + +const invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; +}; + +const fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw rangeError([start, end]); + return []; + } + + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify(start, end, options) === false; + let format = options.transform || transform(toNumber); + + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + + let parts = { negatives: [], positives: [] }; + let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return step > 1 + ? toSequence(parts, options) + : toRegex(range, null, { wrap: false, ...options }); + } + + return range; +}; + +const fillLetters = (start, end, step = 1, options = {}) => { + if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) { + return invalidRange(start, end, options); + } + + + let format = options.transform || (val => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + + let range = []; + let index = 0; + + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + + return range; +}; + +const fill = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + + if (typeof step === 'function') { + return fill(start, end, 1, { transform: step }); + } + + if (isObject(step)) { + return fill(start, end, 0, step); + } + + let opts = { ...options }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + + if (!isNumber(step)) { + if (step != null && !isObject(step)) return invalidStep(step, opts); + return fill(start, end, 1, step); + } + + if (isNumber(start) && isNumber(end)) { + return fillNumbers(start, end, step, opts); + } + + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; + +module.exports = fill; diff --git a/build/node_modules/fill-range/package.json b/build/node_modules/fill-range/package.json new file mode 100644 index 00000000..df492205 --- /dev/null +++ b/build/node_modules/fill-range/package.json @@ -0,0 +1,114 @@ +{ + "_from": "fill-range@^7.0.1", + "_id": "fill-range@7.0.1", + "_inBundle": false, + "_integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "_location": "/fill-range", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fill-range@^7.0.1", + "name": "fill-range", + "escapedName": "fill-range", + "rawSpec": "^7.0.1", + "saveSpec": null, + "fetchSpec": "^7.0.1" + }, + "_requiredBy": [ + "/braces" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fill-range/-/fill-range-7.0.1.tgz", + "_shasum": "1919a6a7c75fe38b2c7c77e5198535da9acdda40", + "_spec": "fill-range@^7.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/braces", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/fill-range/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Edo Rivai", + "url": "edo.rivai.nl" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Paul Miller", + "url": "paulmillr.com" + }, + { + "name": "Rouven Weßling", + "url": "www.rouvenwessling.de" + }, + { + "url": "https://github.com/wtgtybhertgeghgtwtg" + } + ], + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "deprecated": false, + "description": "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`", + "devDependencies": { + "gulp-format-md": "^2.0.0", + "mocha": "^6.1.1" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/fill-range", + "keywords": [ + "alpha", + "alphabetical", + "array", + "bash", + "brace", + "expand", + "expansion", + "fill", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "regex", + "sh" + ], + "license": "MIT", + "main": "index.js", + "name": "fill-range", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/fill-range.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + }, + "version": "7.0.1" +} diff --git a/build/node_modules/find-up/index.d.ts b/build/node_modules/find-up/index.d.ts new file mode 100644 index 00000000..6746bb72 --- /dev/null +++ b/build/node_modules/find-up/index.d.ts @@ -0,0 +1,138 @@ +/* eslint-disable @typescript-eslint/unified-signatures */ +import {Options as LocatePathOptions} from 'locate-path'; + +declare const stop: unique symbol; + +declare namespace findUp { + interface Options extends LocatePathOptions {} + + type StopSymbol = typeof stop; + + type Match = string | StopSymbol | undefined; +} + +declare const findUp: { + sync: { + /** + Synchronously check if a path exists. + + @param path - Path to the file or directory. + @returns Whether the path exists. + + @example + ``` + import findUp = require('find-up'); + + console.log(findUp.sync.exists('/Users/sindresorhus/unicorn.png')); + //=> true + ``` + */ + exists: (path: string) => boolean; + + /** + Synchronously find a file or directory by walking up parent directories. + + @param name - Name of the file or directory to find. Can be multiple. + @returns The first path found (by respecting the order of `name`s) or `undefined` if none could be found. + */ + (name: string | readonly string[], options?: findUp.Options): string | undefined; + + /** + Synchronously find a file or directory by walking up parent directories. + + @param matcher - Called for each directory in the search. Return a path or `findUp.stop` to stop the search. + @returns The first path found or `undefined` if none could be found. + + @example + ``` + import path = require('path'); + import findUp = require('find-up'); + + console.log(findUp.sync(directory => { + const hasUnicorns = findUp.sync.exists(path.join(directory, 'unicorn.png')); + return hasUnicorns && directory; + }, {type: 'directory'})); + //=> '/Users/sindresorhus' + ``` + */ + (matcher: (directory: string) => findUp.Match, options?: findUp.Options): string | undefined; + }; + + /** + Check if a path exists. + + @param path - Path to a file or directory. + @returns Whether the path exists. + + @example + ``` + import findUp = require('find-up'); + + (async () => { + console.log(await findUp.exists('/Users/sindresorhus/unicorn.png')); + //=> true + })(); + ``` + */ + exists: (path: string) => Promise; + + /** + Return this in a `matcher` function to stop the search and force `findUp` to immediately return `undefined`. + */ + readonly stop: findUp.StopSymbol; + + /** + Find a file or directory by walking up parent directories. + + @param name - Name of the file or directory to find. Can be multiple. + @returns The first path found (by respecting the order of `name`s) or `undefined` if none could be found. + + @example + ``` + // / + // └── Users + // └── sindresorhus + // ├── unicorn.png + // └── foo + // └── bar + // ├── baz + // └── example.js + + // example.js + import findUp = require('find-up'); + + (async () => { + console.log(await findUp('unicorn.png')); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(['rainbow.png', 'unicorn.png'])); + //=> '/Users/sindresorhus/unicorn.png' + })(); + ``` + */ + (name: string | readonly string[], options?: findUp.Options): Promise; + + /** + Find a file or directory by walking up parent directories. + + @param matcher - Called for each directory in the search. Return a path or `findUp.stop` to stop the search. + @returns The first path found or `undefined` if none could be found. + + @example + ``` + import path = require('path'); + import findUp = require('find-up'); + + (async () => { + console.log(await findUp(async directory => { + const hasUnicorns = await findUp.exists(path.join(directory, 'unicorn.png')); + return hasUnicorns && directory; + }, {type: 'directory'})); + //=> '/Users/sindresorhus' + })(); + ``` + */ + (matcher: (directory: string) => (findUp.Match | Promise), options?: findUp.Options): Promise; +}; + +export = findUp; diff --git a/build/node_modules/find-up/index.js b/build/node_modules/find-up/index.js new file mode 100644 index 00000000..ce564e5d --- /dev/null +++ b/build/node_modules/find-up/index.js @@ -0,0 +1,89 @@ +'use strict'; +const path = require('path'); +const locatePath = require('locate-path'); +const pathExists = require('path-exists'); + +const stop = Symbol('findUp.stop'); + +module.exports = async (name, options = {}) => { + let directory = path.resolve(options.cwd || ''); + const {root} = path.parse(directory); + const paths = [].concat(name); + + const runMatcher = async locateOptions => { + if (typeof name !== 'function') { + return locatePath(paths, locateOptions); + } + + const foundPath = await name(locateOptions.cwd); + if (typeof foundPath === 'string') { + return locatePath([foundPath], locateOptions); + } + + return foundPath; + }; + + // eslint-disable-next-line no-constant-condition + while (true) { + // eslint-disable-next-line no-await-in-loop + const foundPath = await runMatcher({...options, cwd: directory}); + + if (foundPath === stop) { + return; + } + + if (foundPath) { + return path.resolve(directory, foundPath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +}; + +module.exports.sync = (name, options = {}) => { + let directory = path.resolve(options.cwd || ''); + const {root} = path.parse(directory); + const paths = [].concat(name); + + const runMatcher = locateOptions => { + if (typeof name !== 'function') { + return locatePath.sync(paths, locateOptions); + } + + const foundPath = name(locateOptions.cwd); + if (typeof foundPath === 'string') { + return locatePath.sync([foundPath], locateOptions); + } + + return foundPath; + }; + + // eslint-disable-next-line no-constant-condition + while (true) { + const foundPath = runMatcher({...options, cwd: directory}); + + if (foundPath === stop) { + return; + } + + if (foundPath) { + return path.resolve(directory, foundPath); + } + + if (directory === root) { + return; + } + + directory = path.dirname(directory); + } +}; + +module.exports.exists = pathExists; + +module.exports.sync.exists = pathExists.sync; + +module.exports.stop = stop; diff --git a/build/node_modules/find-up/license b/build/node_modules/find-up/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/find-up/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/find-up/package.json b/build/node_modules/find-up/package.json new file mode 100644 index 00000000..d8e83316 --- /dev/null +++ b/build/node_modules/find-up/package.json @@ -0,0 +1,86 @@ +{ + "_from": "find-up@5.0.0", + "_id": "find-up@5.0.0", + "_inBundle": false, + "_integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "_location": "/find-up", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "find-up@5.0.0", + "name": "find-up", + "escapedName": "find-up", + "rawSpec": "5.0.0", + "saveSpec": null, + "fetchSpec": "5.0.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/find-up/-/find-up-5.0.0.tgz", + "_shasum": "4c92819ecb7083561e4f4a240a86be5198f536fc", + "_spec": "find-up@5.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/find-up/issues" + }, + "bundleDependencies": false, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "deprecated": false, + "description": "Find a file or directory by walking up parent directories", + "devDependencies": { + "ava": "^2.1.0", + "is-path-inside": "^2.1.0", + "tempy": "^0.6.0", + "tsd": "^0.13.1", + "xo": "^0.33.0" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/find-up#readme", + "keywords": [ + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "walk", + "walking", + "path" + ], + "license": "MIT", + "name": "find-up", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/find-up.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.0.0" +} diff --git a/build/node_modules/find-up/readme.md b/build/node_modules/find-up/readme.md new file mode 100644 index 00000000..7ad908a7 --- /dev/null +++ b/build/node_modules/find-up/readme.md @@ -0,0 +1,151 @@ +# find-up [![Build Status](https://travis-ci.com/sindresorhus/find-up.svg?branch=master)](https://travis-ci.com/github/sindresorhus/find-up) + +> Find a file or directory by walking up parent directories + +## Install + +``` +$ npm install find-up +``` + +## Usage + +``` +/ +└── Users + └── sindresorhus + ├── unicorn.png + └── foo + └── bar + ├── baz + └── example.js +``` + +`example.js` + +```js +const path = require('path'); +const findUp = require('find-up'); + +(async () => { + console.log(await findUp('unicorn.png')); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(['rainbow.png', 'unicorn.png'])); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(async directory => { + const hasUnicorns = await findUp.exists(path.join(directory, 'unicorn.png')); + return hasUnicorns && directory; + }, {type: 'directory'})); + //=> '/Users/sindresorhus' +})(); +``` + +## API + +### findUp(name, options?) +### findUp(matcher, options?) + +Returns a `Promise` for either the path or `undefined` if it couldn't be found. + +### findUp([...name], options?) + +Returns a `Promise` for either the first path found (by respecting the order of the array) or `undefined` if none could be found. + +### findUp.sync(name, options?) +### findUp.sync(matcher, options?) + +Returns a path or `undefined` if it couldn't be found. + +### findUp.sync([...name], options?) + +Returns the first path found (by respecting the order of the array) or `undefined` if none could be found. + +#### name + +Type: `string` + +Name of the file or directory to find. + +#### matcher + +Type: `Function` + +A function that will be called with each directory until it returns a `string` with the path, which stops the search, or the root directory has been reached and nothing was found. Useful if you want to match files with certain patterns, set of permissions, or other advanced use-cases. + +When using async mode, the `matcher` may optionally be an async or promise-returning function that returns the path. + +#### options + +Type: `object` + +##### cwd + +Type: `string`\ +Default: `process.cwd()` + +Directory to start from. + +##### type + +Type: `string`\ +Default: `'file'`\ +Values: `'file'` `'directory'` + +The type of paths that can match. + +##### allowSymlinks + +Type: `boolean`\ +Default: `true` + +Allow symbolic links to match if they point to the chosen path type. + +### findUp.exists(path) + +Returns a `Promise` of whether the path exists. + +### findUp.sync.exists(path) + +Returns a `boolean` of whether the path exists. + +#### path + +Type: `string` + +Path to a file or directory. + +### findUp.stop + +A [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) that can be returned by a `matcher` function to stop the search and cause `findUp` to immediately return `undefined`. Useful as a performance optimization in case the current working directory is deeply nested in the filesystem. + +```js +const path = require('path'); +const findUp = require('find-up'); + +(async () => { + await findUp(directory => { + return path.basename(directory) === 'work' ? findUp.stop : 'logo.png'; + }); +})(); +``` + +## Related + +- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module +- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file +- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package +- [resolve-from](https://github.com/sindresorhus/resolve-from) - Resolve the path of a module like `require.resolve()` but from a given path + +--- + +
+ + Get professional support for 'find-up' with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/build/node_modules/flat/.travis.yml b/build/node_modules/flat/.travis.yml new file mode 100644 index 00000000..f35768a9 --- /dev/null +++ b/build/node_modules/flat/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "6" + - "7" + - "8" + - "10" + - "12" + - "14" diff --git a/build/node_modules/flat/LICENSE b/build/node_modules/flat/LICENSE new file mode 100644 index 00000000..d99b6554 --- /dev/null +++ b/build/node_modules/flat/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2014, Hugh Kennedy +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/flat/README.md b/build/node_modules/flat/README.md new file mode 100644 index 00000000..a036a9f2 --- /dev/null +++ b/build/node_modules/flat/README.md @@ -0,0 +1,236 @@ +# flat [![Build Status](https://secure.travis-ci.org/hughsk/flat.png?branch=master)](http://travis-ci.org/hughsk/flat) + +Take a nested Javascript object and flatten it, or unflatten an object with +delimited keys. + +## Installation + +``` bash +$ npm install flat +``` + +## Methods + +### flatten(original, options) + +Flattens the object - it'll return an object one level deep, regardless of how +nested the original object was: + +``` javascript +var flatten = require('flat') + +flatten({ + key1: { + keyA: 'valueI' + }, + key2: { + keyB: 'valueII' + }, + key3: { a: { b: { c: 2 } } } +}) + +// { +// 'key1.keyA': 'valueI', +// 'key2.keyB': 'valueII', +// 'key3.a.b.c': 2 +// } +``` + +### unflatten(original, options) + +Flattening is reversible too, you can call `flatten.unflatten()` on an object: + +``` javascript +var unflatten = require('flat').unflatten + +unflatten({ + 'three.levels.deep': 42, + 'three.levels': { + nested: true + } +}) + +// { +// three: { +// levels: { +// deep: 42, +// nested: true +// } +// } +// } +``` + +## Options + +### delimiter + +Use a custom delimiter for (un)flattening your objects, instead of `.`. + +### safe + +When enabled, both `flat` and `unflatten` will preserve arrays and their +contents. This is disabled by default. + +``` javascript +var flatten = require('flat') + +flatten({ + this: [ + { contains: 'arrays' }, + { preserving: { + them: 'for you' + }} + ] +}, { + safe: true +}) + +// { +// 'this': [ +// { contains: 'arrays' }, +// { preserving: { +// them: 'for you' +// }} +// ] +// } +``` + +### object + +When enabled, arrays will not be created automatically when calling unflatten, like so: + +``` javascript +unflatten({ + 'hello.you.0': 'ipsum', + 'hello.you.1': 'lorem', + 'hello.other.world': 'foo' +}, { object: true }) + +// hello: { +// you: { +// 0: 'ipsum', +// 1: 'lorem', +// }, +// other: { world: 'foo' } +// } +``` + +### overwrite + +When enabled, existing keys in the unflattened object may be overwritten if they cannot hold a newly encountered nested value: + +```javascript +unflatten({ + 'TRAVIS': 'true', + 'TRAVIS.DIR': '/home/travis/build/kvz/environmental' +}, { overwrite: true }) + +// TRAVIS: { +// DIR: '/home/travis/build/kvz/environmental' +// } +``` + +Without `overwrite` set to `true`, the `TRAVIS` key would already have been set to a string, thus could not accept the nested `DIR` element. + +This only makes sense on ordered arrays, and since we're overwriting data, should be used with care. + + +### maxDepth + +Maximum number of nested objects to flatten. + +``` javascript +var flatten = require('flat') + +flatten({ + key1: { + keyA: 'valueI' + }, + key2: { + keyB: 'valueII' + }, + key3: { a: { b: { c: 2 } } } +}, { maxDepth: 2 }) + +// { +// 'key1.keyA': 'valueI', +// 'key2.keyB': 'valueII', +// 'key3.a': { b: { c: 2 } } +// } +``` + +### transformKey + +Transform each part of a flat key before and after flattening. + +```javascript +var flatten = require('flat') +var unflatten = require('flat').unflatten + +flatten({ + key1: { + keyA: 'valueI' + }, + key2: { + keyB: 'valueII' + }, + key3: { a: { b: { c: 2 } } } +}, { + transformKey: function(key){ + return '__' + key + '__'; + } +}) + +// { +// '__key1__.__keyA__': 'valueI', +// '__key2__.__keyB__': 'valueII', +// '__key3__.__a__.__b__.__c__': 2 +// } + +unflatten({ + '__key1__.__keyA__': 'valueI', + '__key2__.__keyB__': 'valueII', + '__key3__.__a__.__b__.__c__': 2 +}, { + transformKey: function(key){ + return key.substring(2, key.length - 2) + } +}) + +// { +// key1: { +// keyA: 'valueI' +// }, +// key2: { +// keyB: 'valueII' +// }, +// key3: { a: { b: { c: 2 } } } +// } +``` + +## Command Line Usage + +`flat` is also available as a command line tool. You can run it with +[`npx`](https://ghub.io/npx): + +```sh +npx flat foo.json +``` + +Or install the `flat` command globally: + +```sh +npm i -g flat && flat foo.json +``` + +Accepts a filename as an argument: + +```sh +flat foo.json +``` + +Also accepts JSON on stdin: + +```sh +cat foo.json | flat +``` diff --git a/build/node_modules/flat/cli.js b/build/node_modules/flat/cli.js new file mode 100755 index 00000000..e4f96b37 --- /dev/null +++ b/build/node_modules/flat/cli.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') +const readline = require('readline') + +const flat = require('./index') + +const filepath = process.argv.slice(2)[0] +if (filepath) { + // Read from file + const file = path.resolve(process.cwd(), filepath) + fs.accessSync(file, fs.constants.R_OK) // allow to throw if not readable + out(require(file)) +} else if (process.stdin.isTTY) { + usage(0) +} else { + // Read from newline-delimited STDIN + const lines = [] + readline.createInterface({ + input: process.stdin, + output: process.stdout, + terminal: false + }) + .on('line', line => lines.push(line)) + .on('close', () => out(JSON.parse(lines.join('\n')))) +} + +function out (data) { + process.stdout.write(JSON.stringify(flat(data), null, 2)) +} + +function usage (code) { + console.log(` +Usage: + +flat foo.json +cat foo.json | flat +`) + + process.exit(code || 0) +} diff --git a/build/node_modules/flat/index.js b/build/node_modules/flat/index.js new file mode 100644 index 00000000..2a5d7ca0 --- /dev/null +++ b/build/node_modules/flat/index.js @@ -0,0 +1,158 @@ +module.exports = flatten +flatten.flatten = flatten +flatten.unflatten = unflatten + +function isBuffer (obj) { + return obj && + obj.constructor && + (typeof obj.constructor.isBuffer === 'function') && + obj.constructor.isBuffer(obj) +} + +function keyIdentity (key) { + return key +} + +function flatten (target, opts) { + opts = opts || {} + + const delimiter = opts.delimiter || '.' + const maxDepth = opts.maxDepth + const transformKey = opts.transformKey || keyIdentity + const output = {} + + function step (object, prev, currentDepth) { + currentDepth = currentDepth || 1 + Object.keys(object).forEach(function (key) { + const value = object[key] + const isarray = opts.safe && Array.isArray(value) + const type = Object.prototype.toString.call(value) + const isbuffer = isBuffer(value) + const isobject = ( + type === '[object Object]' || + type === '[object Array]' + ) + + const newKey = prev + ? prev + delimiter + transformKey(key) + : transformKey(key) + + if (!isarray && !isbuffer && isobject && Object.keys(value).length && + (!opts.maxDepth || currentDepth < maxDepth)) { + return step(value, newKey, currentDepth + 1) + } + + output[newKey] = value + }) + } + + step(target) + + return output +} + +function unflatten (target, opts) { + opts = opts || {} + + const delimiter = opts.delimiter || '.' + const overwrite = opts.overwrite || false + const transformKey = opts.transformKey || keyIdentity + const result = {} + + const isbuffer = isBuffer(target) + if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') { + return target + } + + // safely ensure that the key is + // an integer. + function getkey (key) { + const parsedKey = Number(key) + + return ( + isNaN(parsedKey) || + key.indexOf('.') !== -1 || + opts.object + ) ? key + : parsedKey + } + + function addKeys (keyPrefix, recipient, target) { + return Object.keys(target).reduce(function (result, key) { + result[keyPrefix + delimiter + key] = target[key] + + return result + }, recipient) + } + + function isEmpty (val) { + const type = Object.prototype.toString.call(val) + const isArray = type === '[object Array]' + const isObject = type === '[object Object]' + + if (!val) { + return true + } else if (isArray) { + return !val.length + } else if (isObject) { + return !Object.keys(val).length + } + } + + target = Object.keys(target).reduce(function (result, key) { + const type = Object.prototype.toString.call(target[key]) + const isObject = (type === '[object Object]' || type === '[object Array]') + if (!isObject || isEmpty(target[key])) { + result[key] = target[key] + return result + } else { + return addKeys( + key, + result, + flatten(target[key], opts) + ) + } + }, {}) + + Object.keys(target).forEach(function (key) { + const split = key.split(delimiter).map(transformKey) + let key1 = getkey(split.shift()) + let key2 = getkey(split[0]) + let recipient = result + + while (key2 !== undefined) { + if (key1 === '__proto__') { + return + } + + const type = Object.prototype.toString.call(recipient[key1]) + const isobject = ( + type === '[object Object]' || + type === '[object Array]' + ) + + // do not write over falsey, non-undefined values if overwrite is false + if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') { + return + } + + if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) { + recipient[key1] = ( + typeof key2 === 'number' && + !opts.object ? [] : {} + ) + } + + recipient = recipient[key1] + if (split.length > 0) { + key1 = getkey(split.shift()) + key2 = getkey(split[0]) + } + } + + // unflatten again for 'messy objects' + recipient[key1] = unflatten(target[key], opts) + }) + + return result +} diff --git a/build/node_modules/flat/package.json b/build/node_modules/flat/package.json new file mode 100644 index 00000000..4fe4e63e --- /dev/null +++ b/build/node_modules/flat/package.json @@ -0,0 +1,68 @@ +{ + "_from": "flat@^5.0.2", + "_id": "flat@5.0.2", + "_inBundle": false, + "_integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "_location": "/flat", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "flat@^5.0.2", + "name": "flat", + "escapedName": "flat", + "rawSpec": "^5.0.2", + "saveSpec": null, + "fetchSpec": "^5.0.2" + }, + "_requiredBy": [ + "/yargs-unparser" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/flat/-/flat-5.0.2.tgz", + "_shasum": "8ca6fe332069ffa9d324c327198c598259ceb241", + "_spec": "flat@^5.0.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs-unparser", + "author": { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com", + "url": "http://hughskennedy.com" + }, + "bin": { + "flat": "cli.js" + }, + "bugs": { + "url": "https://github.com/hughsk/flat/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Take a nested Javascript object and flatten it, or unflatten an object with delimited keys", + "devDependencies": { + "mocha": "~8.1.1", + "standard": "^14.3.4" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/hughsk/flat", + "keywords": [ + "flat", + "json", + "flatten", + "unflatten", + "split", + "object", + "nested" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "name": "flat", + "repository": { + "type": "git", + "url": "git://github.com/hughsk/flat.git" + }, + "scripts": { + "test": "mocha -u tdd --reporter spec && standard cli.js index.js test/index.js" + }, + "version": "5.0.2" +} diff --git a/build/node_modules/flat/test/test.js b/build/node_modules/flat/test/test.js new file mode 100644 index 00000000..7f4ee3df --- /dev/null +++ b/build/node_modules/flat/test/test.js @@ -0,0 +1,643 @@ +/* globals suite test */ + +const assert = require('assert') +const path = require('path') +const { exec } = require('child_process') +const pkg = require('../package.json') +const flat = require('../index') + +const flatten = flat.flatten +const unflatten = flat.unflatten + +const primitives = { + String: 'good morning', + Number: 1234.99, + Boolean: true, + Date: new Date(), + null: null, + undefined: undefined +} + +suite('Flatten Primitives', function () { + Object.keys(primitives).forEach(function (key) { + const value = primitives[key] + + test(key, function () { + assert.deepStrictEqual(flatten({ + hello: { + world: value + } + }), { + 'hello.world': value + }) + }) + }) +}) + +suite('Unflatten Primitives', function () { + Object.keys(primitives).forEach(function (key) { + const value = primitives[key] + + test(key, function () { + assert.deepStrictEqual(unflatten({ + 'hello.world': value + }), { + hello: { + world: value + } + }) + }) + }) +}) + +suite('Flatten', function () { + test('Nested once', function () { + assert.deepStrictEqual(flatten({ + hello: { + world: 'good morning' + } + }), { + 'hello.world': 'good morning' + }) + }) + + test('Nested twice', function () { + assert.deepStrictEqual(flatten({ + hello: { + world: { + again: 'good morning' + } + } + }), { + 'hello.world.again': 'good morning' + }) + }) + + test('Multiple Keys', function () { + assert.deepStrictEqual(flatten({ + hello: { + lorem: { + ipsum: 'again', + dolor: 'sit' + } + }, + world: { + lorem: { + ipsum: 'again', + dolor: 'sit' + } + } + }), { + 'hello.lorem.ipsum': 'again', + 'hello.lorem.dolor': 'sit', + 'world.lorem.ipsum': 'again', + 'world.lorem.dolor': 'sit' + }) + }) + + test('Custom Delimiter', function () { + assert.deepStrictEqual(flatten({ + hello: { + world: { + again: 'good morning' + } + } + }, { + delimiter: ':' + }), { + 'hello:world:again': 'good morning' + }) + }) + + test('Empty Objects', function () { + assert.deepStrictEqual(flatten({ + hello: { + empty: { + nested: {} + } + } + }), { + 'hello.empty.nested': {} + }) + }) + + if (typeof Buffer !== 'undefined') { + test('Buffer', function () { + assert.deepStrictEqual(flatten({ + hello: { + empty: { + nested: Buffer.from('test') + } + } + }), { + 'hello.empty.nested': Buffer.from('test') + }) + }) + } + + if (typeof Uint8Array !== 'undefined') { + test('typed arrays', function () { + assert.deepStrictEqual(flatten({ + hello: { + empty: { + nested: new Uint8Array([1, 2, 3, 4]) + } + } + }), { + 'hello.empty.nested': new Uint8Array([1, 2, 3, 4]) + }) + }) + } + + test('Custom Depth', function () { + assert.deepStrictEqual(flatten({ + hello: { + world: { + again: 'good morning' + } + }, + lorem: { + ipsum: { + dolor: 'good evening' + } + } + }, { + maxDepth: 2 + }), { + 'hello.world': { + again: 'good morning' + }, + 'lorem.ipsum': { + dolor: 'good evening' + } + }) + }) + + test('Transformed Keys', function () { + assert.deepStrictEqual(flatten({ + hello: { + world: { + again: 'good morning' + } + }, + lorem: { + ipsum: { + dolor: 'good evening' + } + } + }, { + transformKey: function (key) { + return '__' + key + '__' + } + }), { + '__hello__.__world__.__again__': 'good morning', + '__lorem__.__ipsum__.__dolor__': 'good evening' + }) + }) + + test('Should keep number in the left when object', function () { + assert.deepStrictEqual(flatten({ + hello: { + '0200': 'world', + '0500': 'darkness my old friend' + } + }), { + 'hello.0200': 'world', + 'hello.0500': 'darkness my old friend' + }) + }) +}) + +suite('Unflatten', function () { + test('Nested once', function () { + assert.deepStrictEqual({ + hello: { + world: 'good morning' + } + }, unflatten({ + 'hello.world': 'good morning' + })) + }) + + test('Nested twice', function () { + assert.deepStrictEqual({ + hello: { + world: { + again: 'good morning' + } + } + }, unflatten({ + 'hello.world.again': 'good morning' + })) + }) + + test('Multiple Keys', function () { + assert.deepStrictEqual({ + hello: { + lorem: { + ipsum: 'again', + dolor: 'sit' + } + }, + world: { + greet: 'hello', + lorem: { + ipsum: 'again', + dolor: 'sit' + } + } + }, unflatten({ + 'hello.lorem.ipsum': 'again', + 'hello.lorem.dolor': 'sit', + 'world.lorem.ipsum': 'again', + 'world.lorem.dolor': 'sit', + world: { greet: 'hello' } + })) + }) + + test('nested objects do not clobber each other when a.b inserted before a', function () { + const x = {} + x['foo.bar'] = { t: 123 } + x.foo = { p: 333 } + assert.deepStrictEqual(unflatten(x), { + foo: { + bar: { + t: 123 + }, + p: 333 + } + }) + }) + + test('Custom Delimiter', function () { + assert.deepStrictEqual({ + hello: { + world: { + again: 'good morning' + } + } + }, unflatten({ + 'hello world again': 'good morning' + }, { + delimiter: ' ' + })) + }) + + test('Overwrite', function () { + assert.deepStrictEqual({ + travis: { + build: { + dir: '/home/travis/build/kvz/environmental' + } + } + }, unflatten({ + travis: 'true', + travis_build_dir: '/home/travis/build/kvz/environmental' + }, { + delimiter: '_', + overwrite: true + })) + }) + + test('Transformed Keys', function () { + assert.deepStrictEqual(unflatten({ + '__hello__.__world__.__again__': 'good morning', + '__lorem__.__ipsum__.__dolor__': 'good evening' + }, { + transformKey: function (key) { + return key.substring(2, key.length - 2) + } + }), { + hello: { + world: { + again: 'good morning' + } + }, + lorem: { + ipsum: { + dolor: 'good evening' + } + } + }) + }) + + test('Messy', function () { + assert.deepStrictEqual({ + hello: { world: 'again' }, + lorem: { ipsum: 'another' }, + good: { + morning: { + hash: { + key: { + nested: { + deep: { + and: { + even: { + deeper: { still: 'hello' } + } + } + } + } + } + }, + again: { testing: { this: 'out' } } + } + } + }, unflatten({ + 'hello.world': 'again', + 'lorem.ipsum': 'another', + 'good.morning': { + 'hash.key': { + 'nested.deep': { + 'and.even.deeper.still': 'hello' + } + } + }, + 'good.morning.again': { + 'testing.this': 'out' + } + })) + }) + + suite('Overwrite + non-object values in key positions', function () { + test('non-object keys + overwrite should be overwritten', function () { + assert.deepStrictEqual(flat.unflatten({ a: null, 'a.b': 'c' }, { overwrite: true }), { a: { b: 'c' } }) + assert.deepStrictEqual(flat.unflatten({ a: 0, 'a.b': 'c' }, { overwrite: true }), { a: { b: 'c' } }) + assert.deepStrictEqual(flat.unflatten({ a: 1, 'a.b': 'c' }, { overwrite: true }), { a: { b: 'c' } }) + assert.deepStrictEqual(flat.unflatten({ a: '', 'a.b': 'c' }, { overwrite: true }), { a: { b: 'c' } }) + }) + + test('overwrite value should not affect undefined keys', function () { + assert.deepStrictEqual(flat.unflatten({ a: undefined, 'a.b': 'c' }, { overwrite: true }), { a: { b: 'c' } }) + assert.deepStrictEqual(flat.unflatten({ a: undefined, 'a.b': 'c' }, { overwrite: false }), { a: { b: 'c' } }) + }) + + test('if no overwrite, should ignore nested values under non-object key', function () { + assert.deepStrictEqual(flat.unflatten({ a: null, 'a.b': 'c' }), { a: null }) + assert.deepStrictEqual(flat.unflatten({ a: 0, 'a.b': 'c' }), { a: 0 }) + assert.deepStrictEqual(flat.unflatten({ a: 1, 'a.b': 'c' }), { a: 1 }) + assert.deepStrictEqual(flat.unflatten({ a: '', 'a.b': 'c' }), { a: '' }) + }) + }) + + suite('.safe', function () { + test('Should protect arrays when true', function () { + assert.deepStrictEqual(flatten({ + hello: [ + { world: { again: 'foo' } }, + { lorem: 'ipsum' } + ], + another: { + nested: [{ array: { too: 'deep' } }] + }, + lorem: { + ipsum: 'whoop' + } + }, { + safe: true + }), { + hello: [ + { world: { again: 'foo' } }, + { lorem: 'ipsum' } + ], + 'lorem.ipsum': 'whoop', + 'another.nested': [{ array: { too: 'deep' } }] + }) + }) + + test('Should not protect arrays when false', function () { + assert.deepStrictEqual(flatten({ + hello: [ + { world: { again: 'foo' } }, + { lorem: 'ipsum' } + ] + }, { + safe: false + }), { + 'hello.0.world.again': 'foo', + 'hello.1.lorem': 'ipsum' + }) + }) + + test('Empty objects should not be removed', function () { + assert.deepStrictEqual(unflatten({ + foo: [], + bar: {} + }), { foo: [], bar: {} }) + }) + }) + + suite('.object', function () { + test('Should create object instead of array when true', function () { + const unflattened = unflatten({ + 'hello.you.0': 'ipsum', + 'hello.you.1': 'lorem', + 'hello.other.world': 'foo' + }, { + object: true + }) + assert.deepStrictEqual({ + hello: { + you: { + 0: 'ipsum', + 1: 'lorem' + }, + other: { world: 'foo' } + } + }, unflattened) + assert(!Array.isArray(unflattened.hello.you)) + }) + + test('Should create object instead of array when nested', function () { + const unflattened = unflatten({ + hello: { + 'you.0': 'ipsum', + 'you.1': 'lorem', + 'other.world': 'foo' + } + }, { + object: true + }) + assert.deepStrictEqual({ + hello: { + you: { + 0: 'ipsum', + 1: 'lorem' + }, + other: { world: 'foo' } + } + }, unflattened) + assert(!Array.isArray(unflattened.hello.you)) + }) + + test('Should keep the zero in the left when object is true', function () { + const unflattened = unflatten({ + 'hello.0200': 'world', + 'hello.0500': 'darkness my old friend' + }, { + object: true + }) + + assert.deepStrictEqual({ + hello: { + '0200': 'world', + '0500': 'darkness my old friend' + } + }, unflattened) + }) + + test('Should not create object when false', function () { + const unflattened = unflatten({ + 'hello.you.0': 'ipsum', + 'hello.you.1': 'lorem', + 'hello.other.world': 'foo' + }, { + object: false + }) + assert.deepStrictEqual({ + hello: { + you: ['ipsum', 'lorem'], + other: { world: 'foo' } + } + }, unflattened) + assert(Array.isArray(unflattened.hello.you)) + }) + }) + + if (typeof Buffer !== 'undefined') { + test('Buffer', function () { + assert.deepStrictEqual(unflatten({ + 'hello.empty.nested': Buffer.from('test') + }), { + hello: { + empty: { + nested: Buffer.from('test') + } + } + }) + }) + } + + if (typeof Uint8Array !== 'undefined') { + test('typed arrays', function () { + assert.deepStrictEqual(unflatten({ + 'hello.empty.nested': new Uint8Array([1, 2, 3, 4]) + }), { + hello: { + empty: { + nested: new Uint8Array([1, 2, 3, 4]) + } + } + }) + }) + } + + test('should not pollute prototype', function () { + unflatten({ + '__proto__.polluted': true + }) + unflatten({ + 'prefix.__proto__.polluted': true + }) + unflatten({ + 'prefix.0.__proto__.polluted': true + }) + + assert.notStrictEqual({}.polluted, true) + }) +}) + +suite('Arrays', function () { + test('Should be able to flatten arrays properly', function () { + assert.deepStrictEqual({ + 'a.0': 'foo', + 'a.1': 'bar' + }, flatten({ + a: ['foo', 'bar'] + })) + }) + + test('Should be able to revert and reverse array serialization via unflatten', function () { + assert.deepStrictEqual({ + a: ['foo', 'bar'] + }, unflatten({ + 'a.0': 'foo', + 'a.1': 'bar' + })) + }) + + test('Array typed objects should be restored by unflatten', function () { + assert.strictEqual( + Object.prototype.toString.call(['foo', 'bar']) + , Object.prototype.toString.call(unflatten({ + 'a.0': 'foo', + 'a.1': 'bar' + }).a) + ) + }) + + test('Do not include keys with numbers inside them', function () { + assert.deepStrictEqual(unflatten({ + '1key.2_key': 'ok' + }), { + '1key': { + '2_key': 'ok' + } + }) + }) +}) + +suite('Order of Keys', function () { + test('Order of keys should not be changed after round trip flatten/unflatten', function () { + const obj = { + b: 1, + abc: { + c: [{ + d: 1, + bca: 1, + a: 1 + }] + }, + a: 1 + } + const result = unflatten( + flatten(obj) + ) + + assert.deepStrictEqual(Object.keys(obj), Object.keys(result)) + assert.deepStrictEqual(Object.keys(obj.abc), Object.keys(result.abc)) + assert.deepStrictEqual(Object.keys(obj.abc.c[0]), Object.keys(result.abc.c[0])) + }) +}) + +suite('CLI', function () { + test('can take filename', function (done) { + const cli = path.resolve(__dirname, '..', pkg.bin) + const pkgJSON = path.resolve(__dirname, '..', 'package.json') + exec(`${cli} ${pkgJSON}`, (err, stdout, stderr) => { + assert.ifError(err) + assert.strictEqual(stdout.trim(), JSON.stringify(flatten(pkg), null, 2)) + done() + }) + }) + + test('exits with usage if no file', function (done) { + const cli = path.resolve(__dirname, '..', pkg.bin) + const pkgJSON = path.resolve(__dirname, '..', 'package.json') + exec(`${cli} ${pkgJSON}`, (err, stdout, stderr) => { + assert.ifError(err) + assert.strictEqual(stdout.trim(), JSON.stringify(flatten(pkg), null, 2)) + done() + }) + }) + + test('can take piped file', function (done) { + const cli = path.resolve(__dirname, '..', pkg.bin) + const pkgJSON = path.resolve(__dirname, '..', 'package.json') + exec(`cat ${pkgJSON} | ${cli}`, (err, stdout, stderr) => { + assert.ifError(err) + assert.strictEqual(stdout.trim(), JSON.stringify(flatten(pkg), null, 2)) + done() + }) + }) +}) diff --git a/build/node_modules/fn.name/package.json b/build/node_modules/fn.name/package.json index cafc2569..6684f057 100644 --- a/build/node_modules/fn.name/package.json +++ b/build/node_modules/fn.name/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/one-time" ], - "_resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fn.name/-/fn.name-1.1.0.tgz", "_shasum": "26cad8017967aea8731bc42961d04a3d5988accc", "_spec": "fn.name@1.x.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/one-time", diff --git a/build/node_modules/foreach/package.json b/build/node_modules/foreach/package.json index f752d7f6..2ee06665 100644 --- a/build/node_modules/foreach/package.json +++ b/build/node_modules/foreach/package.json @@ -16,11 +16,9 @@ "fetchSpec": "~2.0.1" }, "_requiredBy": [ - "/is-typed-array", - "/object-keys", - "/which-typed-array" + "/object-keys" ], - "_resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/foreach/-/foreach-2.0.5.tgz", "_shasum": "0bee005018aeb260d0a3af3ae658dd0136ec1b99", "_spec": "foreach@~2.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/object-keys", diff --git a/build/node_modules/form-data/README.md b/build/node_modules/form-data/README.md deleted file mode 100644 index f6b2ae91..00000000 --- a/build/node_modules/form-data/README.md +++ /dev/null @@ -1,350 +0,0 @@ -# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) - -A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface - -[![Linux Build](https://img.shields.io/travis/form-data/form-data/v2.5.1.svg?label=linux:4.x-12.x)](https://travis-ci.org/form-data/form-data) -[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v2.5.1.svg?label=macos:4.x-12.x)](https://travis-ci.org/form-data/form-data) -[![Windows Build](https://img.shields.io/travis/form-data/form-data/v2.5.1.svg?label=windows:4.x-12.x)](https://travis-ci.org/form-data/form-data) - -[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v2.5.1.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) -[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) - -## Install - -``` -npm install --save form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's [request](https://github.com/request/request) stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Custom options - -You can provide custom options, such as `maxDataSize`: - -``` javascript -var FormData = require('form-data'); - -var form = new FormData({ maxDataSize: 20971520 }); -form.append('my_field', 'my value'); -form.append('my_buffer', /* something big */); -``` - -List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', // ... or: - filepath: 'photos/toys/unicycle.jpg', - contentType: 'image/jpeg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: - -``` javascript -form.submit({ - host: 'example.com', - path: '/surelynot.php', - headers: {'x-test-header': 'test-header-value'} -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -### Methods - -- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). -- [_Array_ getHeaders( [**Array** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) -- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) -- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) -- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) -- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) -- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) -- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) -- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) - -#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) -Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. -```javascript -var form = new FormData(); -form.append( 'my_string', 'my value' ); -form.append( 'my_integer', 1 ); -form.append( 'my_boolean', true ); -form.append( 'my_buffer', new Buffer(10) ); -form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) ) -``` - -You may provide a string for options, or an object. -```javascript -// Set filename by providing a string for options -form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' ); - -// provide an object. -form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} ); -``` - -#### _Array_ getHeaders( [**Array** _userHeaders_] ) -This method ads the correct `content-type` header to the provided array of `userHeaders`. - -#### _String_ getBoundary() -Return the boundary of the formData. A boundary consists of 26 `-` followed by 24 numbers -for example: -```javascript ---------------------------515890814546601021194782 -``` -_Note: The boundary must be unique and may not appear in the data._ - -#### _Buffer_ getBuffer() -Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. -```javascript -var form = new FormData(); -form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) ); -form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') ); - -axios.post( 'https://example.com/path/to/api', - form.getBuffer(), - form.getHeaders() - ) -``` -**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. - -#### _Integer_ getLengthSync() -Same as `getLength` but synchronous. - -_Note: getLengthSync __doesn't__ calculate streams length._ - -#### _Integer_ getLength( **function** _callback_ ) -Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated -```javascript -this.getLength(function(err, length) { - if (err) { - this._error(err); - return; - } - - // add content length - request.setHeader('Content-Length', length); - - ... -}.bind(this)); -``` - -#### _Boolean_ hasKnownLength() -Checks if the length of added values is known. - -#### _Request_ submit( _params_, **function** _callback_ ) -Submit the form to a web application. -```javascript -var form = new FormData(); -form.append( 'my_string', 'Hello World' ); - -form.submit( 'http://example.com/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); -} ); -``` - -#### _String_ toString() -Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. - -### Integration with other libraries - -#### Request - -Form submission using [request](https://github.com/request/request): - -```javascript -var formData = { - my_field: 'my_value', - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), -}; - -request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). - -#### node-fetch - -You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): - -```javascript -var form = new FormData(); - -form.append('a', 1); - -fetch('http://example.com', { method: 'POST', body: form }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); -``` - -#### axios - -In Node.js you can post a file using [axios](https://github.com/axios/axios): -```javascript -const form = new FormData(); -const stream = fs.createReadStream(PATH_TO_FILE); - -form.append('image', stream); - -// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` -const formHeaders = form.getHeaders(); - -axios.post('http://example.com', form, { - headers: { - ...formHeaders, - }, -}) -.then(response => response) -.catch(error => error) -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- Starting version `2.x` FormData has dropped support for `node@0.10.x`. - -## License - -Form-Data is released under the [MIT](License) license. diff --git a/build/node_modules/form-data/README.md.bak b/build/node_modules/form-data/README.md.bak index 6077db9a..298a1a24 100644 --- a/build/node_modules/form-data/README.md.bak +++ b/build/node_modules/form-data/README.md.bak @@ -6,11 +6,11 @@ The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface] [xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface -[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:4.x-12.x)](https://travis-ci.org/form-data/form-data) -[![MacOS Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=macos:4.x-12.x)](https://travis-ci.org/form-data/form-data) -[![Windows Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=windows:4.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Linux Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data) -[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v4.0.0.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) [![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) ## Install @@ -187,8 +187,9 @@ form.submit({ ### Methods - [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). -- [_Array_ getHeaders( [**Array** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) - [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary) - [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) - [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) - [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) @@ -216,15 +217,19 @@ form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' ); form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} ); ``` -#### _Array_ getHeaders( [**Array** _userHeaders_] ) -This method ads the correct `content-type` header to the provided array of `userHeaders`. +#### _Headers_ getHeaders( [**Headers** _userHeaders_] ) +This method adds the correct `content-type` header to the provided array of `userHeaders`. #### _String_ getBoundary() -Return the boundary of the formData. A boundary consists of 26 `-` followed by 24 numbers +Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers for example: ```javascript --------------------------515890814546601021194782 ``` + +#### _Void_ setBoundary(String _boundary_) +Set the boundary string, overriding the default behavior described above. + _Note: The boundary must be unique and may not appear in the data._ #### _Buffer_ getBuffer() @@ -343,7 +348,10 @@ axios.post('http://example.com', form, { ## Notes - ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```). +- ```submit``` will not add `content-length` if form length is unknown or not calculable. - Starting version `2.x` FormData has dropped support for `node@0.10.x`. +- Starting version `3.x` FormData has dropped support for `node@4.x`. ## License diff --git a/build/node_modules/form-data/Readme.md b/build/node_modules/form-data/Readme.md new file mode 100644 index 00000000..298a1a24 --- /dev/null +++ b/build/node_modules/form-data/Readme.md @@ -0,0 +1,358 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v4.0.0.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function(response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function(err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Custom options + +You can provide custom options, such as `maxDataSize`: + +``` javascript +var FormData = require('form-data'); + +var form = new FormData({ maxDataSize: 20971520 }); +form.append('my_field', 'my value'); +form.append('my_buffer', /* something big */); +``` + +List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function(res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function(err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function(err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', // ... or: + filepath: 'photos/toys/unicycle.jpg', + contentType: 'image/jpeg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: {'x-test-header': 'test-header-value'} +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +### Methods + +- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). +- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary) +- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) +- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) +- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) +- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) +- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) +- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) + +#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) +Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. +```javascript +var form = new FormData(); +form.append( 'my_string', 'my value' ); +form.append( 'my_integer', 1 ); +form.append( 'my_boolean', true ); +form.append( 'my_buffer', new Buffer(10) ); +form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) ) +``` + +You may provide a string for options, or an object. +```javascript +// Set filename by providing a string for options +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' ); + +// provide an object. +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} ); +``` + +#### _Headers_ getHeaders( [**Headers** _userHeaders_] ) +This method adds the correct `content-type` header to the provided array of `userHeaders`. + +#### _String_ getBoundary() +Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers +for example: +```javascript +--------------------------515890814546601021194782 +``` + +#### _Void_ setBoundary(String _boundary_) +Set the boundary string, overriding the default behavior described above. + +_Note: The boundary must be unique and may not appear in the data._ + +#### _Buffer_ getBuffer() +Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. +```javascript +var form = new FormData(); +form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) ); +form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') ); + +axios.post( 'https://example.com/path/to/api', + form.getBuffer(), + form.getHeaders() + ) +``` +**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. + +#### _Integer_ getLengthSync() +Same as `getLength` but synchronous. + +_Note: getLengthSync __doesn't__ calculate streams length._ + +#### _Integer_ getLength( **function** _callback_ ) +Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated +```javascript +this.getLength(function(err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + ... +}.bind(this)); +``` + +#### _Boolean_ hasKnownLength() +Checks if the length of added values is known. + +#### _Request_ submit( _params_, **function** _callback_ ) +Submit the form to a web application. +```javascript +var form = new FormData(); +form.append( 'my_string', 'Hello World' ); + +form.submit( 'http://example.com/', function(err, res) { + // res – response object (http.IncomingMessage) // + res.resume(); +} ); +``` + +#### _String_ toString() +Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function(res) { + return res.json(); + }).then(function(json) { + console.log(json); + }); +``` + +#### axios + +In Node.js you can post a file using [axios](https://github.com/axios/axios): +```javascript +const form = new FormData(); +const stream = fs.createReadStream(PATH_TO_FILE); + +form.append('image', stream); + +// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` +const formHeaders = form.getHeaders(); + +axios.post('http://example.com', form, { + headers: { + ...formHeaders, + }, +}) +.then(response => response) +.catch(error => error) +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```). +- ```submit``` will not add `content-length` if form length is unknown or not calculable. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. +- Starting version `3.x` FormData has dropped support for `node@4.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/build/node_modules/form-data/index.d.ts b/build/node_modules/form-data/index.d.ts index 255292d7..295e9e9b 100644 --- a/build/node_modules/form-data/index.d.ts +++ b/build/node_modules/form-data/index.d.ts @@ -9,7 +9,17 @@ import * as http from 'http'; export = FormData; -interface Options { +// Extracted because @types/node doesn't export interfaces. +interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + read?(this: stream.Readable, size: number): void; + destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean; +} + +interface Options extends ReadableOptions { writable?: boolean; readable?: boolean; dataSize?: number; @@ -20,12 +30,13 @@ interface Options { declare class FormData extends stream.Readable { constructor(options?: Options); append(key: string, value: any, options?: FormData.AppendOptions | string): void; - getHeaders(): FormData.Headers; + getHeaders(userHeaders?: FormData.Headers): FormData.Headers; submit( params: string | FormData.SubmitOptions, callback?: (error: Error | null, response: http.IncomingMessage) => void ): http.ClientRequest; getBuffer(): Buffer; + setBoundary(boundary: string): void; getBoundary(): string; getLength(callback: (err: Error | null, length: number) => void): void; getLengthSync(): number; diff --git a/build/node_modules/form-data/lib/form_data.js b/build/node_modules/form-data/lib/form_data.js index 9c07e32c..18dc819c 100644 --- a/build/node_modules/form-data/lib/form_data.js +++ b/build/node_modules/form-data/lib/form_data.js @@ -5,6 +5,7 @@ var http = require('http'); var https = require('https'); var parseUrl = require('url').parse; var fs = require('fs'); +var Stream = require('stream').Stream; var mime = require('mime-types'); var asynckit = require('asynckit'); var populate = require('./populate.js'); @@ -25,7 +26,7 @@ util.inherits(FormData, CombinedStream); */ function FormData(options) { if (!(this instanceof FormData)) { - return new FormData(); + return new FormData(options); } this._overheadLength = 0; @@ -100,8 +101,8 @@ FormData.prototype._trackLength = function(header, value, options) { Buffer.byteLength(header) + FormData.LINE_BREAK.length; - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { + // empty or either doesn't have path or not an http response or not a stream + if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) { return; } @@ -305,6 +306,10 @@ FormData.prototype.getHeaders = function(userHeaders) { return formHeaders; }; +FormData.prototype.setBoundary = function(boundary) { + this._boundary = boundary; +}; + FormData.prototype.getBoundary = function() { if (!this._boundary) { this._generateBoundary(); @@ -452,18 +457,31 @@ FormData.prototype.submit = function(params, cb) { // get content length and fire away this.getLength(function(err, length) { - if (err) { + if (err && err !== 'Unknown stream') { this._error(err); return; } // add content length - request.setHeader('Content-Length', length); + if (length) { + request.setHeader('Content-Length', length); + } this.pipe(request); if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); + var onResponse; + + var callback = function (error, responce) { + request.removeListener('error', callback); + request.removeListener('response', onResponse); + + return cb.call(this, error, responce); + }; + + onResponse = callback.bind(this, null); + + request.on('error', callback); + request.on('response', onResponse); } }.bind(this)); diff --git a/build/node_modules/form-data/package.json b/build/node_modules/form-data/package.json index c47c5144..5094ef83 100644 --- a/build/node_modules/form-data/package.json +++ b/build/node_modules/form-data/package.json @@ -1,26 +1,26 @@ { - "_from": "form-data@^2.3.1", - "_id": "form-data@2.5.1", + "_from": "form-data@^4.0.0", + "_id": "form-data@4.0.0", "_inBundle": false, - "_integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "_integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "_location": "/form-data", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "form-data@^2.3.1", + "raw": "form-data@^4.0.0", "name": "form-data", "escapedName": "form-data", - "rawSpec": "^2.3.1", + "rawSpec": "^4.0.0", "saveSpec": null, - "fetchSpec": "^2.3.1" + "fetchSpec": "^4.0.0" }, "_requiredBy": [ "/superagent" ], - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "_shasum": "f2cbec57b5e59e23716e128fe44d4e5dd23895f4", - "_spec": "form-data@^2.3.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/form-data/-/form-data-4.0.0.tgz", + "_shasum": "93919daeaf361ee529584b9b31664dc12c9fa452", + "_spec": "form-data@^4.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "author": { "name": "Felix Geisendörfer", @@ -34,7 +34,7 @@ "bundleDependencies": false, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "deprecated": false, @@ -53,16 +53,16 @@ "is-node-modern": "^1.0.0", "istanbul": "^0.4.5", "obake": "^0.1.2", - "phantomjs-prebuilt": "^2.1.13", "pkgfiles": "^2.3.0", "pre-commit": "^1.1.3", + "puppeteer": "^1.19.0", "request": "^2.88.0", "rimraf": "^2.7.1", "tape": "^4.6.2", "typescript": "^3.5.2" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" }, "homepage": "https://github.com/form-data/form-data#readme", "license": "MIT", @@ -97,5 +97,5 @@ "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md" }, "typings": "./index.d.ts", - "version": "2.5.1" + "version": "4.0.0" } diff --git a/build/node_modules/formatio/AUTHORS b/build/node_modules/formatio/AUTHORS deleted file mode 100644 index 103c176c..00000000 --- a/build/node_modules/formatio/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -Buster.JS Format was written by -Christian Johansen, christian@cjohansen.no -August Lilleaas, august.lilleaas@gmail.com -Dave Geddes, davidcgeddes@gmail.com -Stein Magnus Jodal, stein.magnus@jodal.no -Tek Nynja, github@teknynja.com diff --git a/build/node_modules/formatio/LICENSE b/build/node_modules/formatio/LICENSE deleted file mode 100644 index d5908f3a..00000000 --- a/build/node_modules/formatio/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -(The BSD License) - -Copyright (c) 2010-2012, Christian Johansen (christian@cjohansen.no) and -August Lilleaas (august.lilleaas@gmail.com). All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Christian Johansen nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/formatio/Readme.md b/build/node_modules/formatio/Readme.md deleted file mode 100644 index 91cdf7b2..00000000 --- a/build/node_modules/formatio/Readme.md +++ /dev/null @@ -1,244 +0,0 @@ -# formatio - -[![Build status](https://secure.travis-ci.org/busterjs/formatio.png?branch=master)](http://travis-ci.org/busterjs/formatio) - -> The cheesy object formatter - -Pretty formatting of arbitrary JavaScript values. Currently only supports ascii -formatting, suitable for command-line utilities. Like `JSON.stringify`, it -formats objects recursively, but unlike `JSON.stringify`, it can handle -regular expressions, functions, circular objects and more. - -`formatio` is a general-purpose library. It works in browsers (including old -and rowdy ones, like IE6) and Node. It will define itself as an AMD module if -you want it to (i.e. if there's a `define` function available). - - -## Running tests - -``` -npm test -``` - -Or use Buster.JS manually: - -``` -node_modules/buster/bin/buster-test --help -``` - - -## `formatio.ascii` API - -`formatio.ascii` can take any JavaScript object and format it nicely as plain -text. It uses the helper functions described below to format different types of -objects. - - -### `formatio.ascii(object)` - -`object` can be any kind of object, including DOM elements. - - -**Simple object** - -```javascript -var formatio = require("formatio"); - -var object = { name: "Christian" }; -console.log(formatio.ascii(object)); - -// Outputs: -// { name: "Christian" } -``` - - -**Complex object** - -```javascript -var formatio = require("formatio"); - -var developer = { - name: "Christian", - interests: ["Programming", "Guitar", "TV"], - - location: { - language: "Norway", - city: "Oslo", - - getLatLon: function getLatLon(callback) { - // ... - }, - - distanceTo: function distanceTo(location) { - } - }, - - speak: function () { - return "Oh hi!"; - } -}; - -console.log(formatio.ascii(developer)); - -// Outputs: -// { -// interests: ["Programming", "Guitar", "TV"], -// location: { -// city: "Oslo", -// distanceTo: function distanceTo() {}, -// getLatLon: function getLatLon() {}, -// language: "Norway" -// }, -// name: "Christian", -// speak: function () {} -// } -``` - - -**Custom constructor** - -If the object to format is not a generic `Object` object, **formatio** -displays the type of object (i.e. name of constructor). Set the -`excludeConstructors` (see below) property to control what constructors to -include in formatted output. - -```javascript -var formatio = require("formatio"); - -function Person(name) { this.name = name; } - -var dude = new Person("Dude"); -console.log(format.ascii(dude)); - -// Outputs: -// [Person] { name: "Dude" } -``` - - -**DOM elements** - -DOM elements are formatted as abbreviated HTML source. 20 characters of -`innerHTML` is included, and if the content is longer, it is truncated with -`"[...]"`. Future editions will add the possibility to format nested markup -structures. - -```javascript -var p = document.createElement("p"); -p.id = "sample"; -p.className = "notice"; -p.setAttribute("data-custom", "42"); -p.innerHTML = "Hey there, here's some text for ya there buddy"; - -console.log(formatio.ascii(p)); - -// Outputs -// <p id="sample" class="notice" data-custom="42">Hey there, here's so[...]</p> -``` - - -### `formatio.ascii.func(func)` - -Formats a function like `"function [name]() {}"`. The name is retrieved from -`formatio.functionName`. - - -### `formatio.ascii.array(array)` - -Formats an array as `"[item1, item2, item3]"` where each item is formatted -with `formatio.ascii`. Circular references are represented in the resulting -string as `"[Circular]"`. - - -### `formatio.ascii.object(object)` - -Formats all properties of the object with `formatio.ascii`. If the object can -be fully represented in 80 characters, it's formatted in one line. Otherwise, -it's nicely indented over as many lines as necessary. Circular references are -represented by `"[Circular]"`. - -Objects created with custom constructors will be formatted as -`"[ConstructorName] { ... }"`. Set the `excludeConstructors` property to -control what constructors are included in the output like this. - - -### `formatio.ascii.element(element)` - -Formats a DOM element as HTML source. The tag name is represented in lower-case -and all attributes and their values are included. The element's content is -included, up to 20 characters. If the length exceeds 20 characters, it's -truncated with a `"[...]"`. - - -### `formatio.functionName(func)` - -Guesses a function's name. If the function defines the `displayName` property -(used by `some debugging tools `_) it is -preferred. If it is not found, the `name` property is tried. If no name can be -found this way, an attempt is made to find the function name by looking at the -function's `toString()` representation. - - -### `formatio.constructorName(object)` - -Attempts to guess the name of the constructor that created the object. It does -so by getting the name of `object.constructor` using `functionName`. If a -name is found, `excludeConstructors` is consulted. If the constructor name -matches any of these elements, an empty string is returned, otherwise the name -is returned. - - -## `formatio.ascii` properties - -### `quoteStrings(true)` - -Whether or not to quote simple strings. When set to `false`, simple strings -are not quoted. Strings in arrays and objects will still be quoted, but -`ascii("Some string")` will not gain additional quotes. - -### `limitChildrenCount(number)` - -This property allows to limit the number of printed array elements or object -properties. When set to 0, all elements will be included in output, any number -greater than zero will set the limit to that number. - -### `excludeConstructors (["Object", /^.$/])` - -An array of strings and/or regular expressions naming constructors that should -be stripped from the formatted output. The default value skips objects created -by `Object` and constructors that have one character names (which are -typically used in `Object.create` shims). - -While you can set this property directly on `formatio.ascii`, it is -recommended to create an instance of `formatio.ascii` and override the -property on that object. - -**Strings** represent constructor names that should not be represented in the -formatted output. **Regular expressions** are tested against constructor names -when formatting. If the expression is a match, the constructor name is not -included in the formatted output. - -```javascript -function Person(name) { - this.name = name; -} - -var person = new Person("Chris"); -console.log(formatio.ascii(person)); - -// Outputs -// [Person] { name: "Chris" } - -var formatter = Object.create(formatio); -formatter.excludeConstructors = ["Object", /^.$/, "Person"]; -console.log(formatter.ascii(person)); - -// Outputs -// { name: "Chris" } - -// Global overwrite, generally not recommended -formatio.excludeConstructors = ["Object", /^.$/, "Person"]; -console.log(formatio.ascii(person)); - -// Outputs -// { name: "Chris" } -``` diff --git a/build/node_modules/formatio/autolint.js b/build/node_modules/formatio/autolint.js deleted file mode 100644 index 62ded413..00000000 --- a/build/node_modules/formatio/autolint.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - paths: [ - "lib/*.js", - "test/*.js" - ], - linterOptions: { - node: true, - browser: true, - plusplus: true, - vars: true, - nomen: true, - forin: true, - sloppy: true, - regexp: true, - predef: [ - "samsam", - "define", - "assert", - "refute", - "buster" - ] - } -}; diff --git a/build/node_modules/formatio/buster.js b/build/node_modules/formatio/buster.js deleted file mode 100644 index 697bab1d..00000000 --- a/build/node_modules/formatio/buster.js +++ /dev/null @@ -1,14 +0,0 @@ -exports["Browser"] = { - // TODO: Needs fixing - environment: "browser", - libs: [ - "node_modules/samsam/lib/samsam.js" - ], - sources: ["lib/*.js"], - tests: ["test/*-test.js"] -}; - -exports["Node"] = { - extends: "Browser", - environment: "node" -}; diff --git a/build/node_modules/formatio/lib/formatio.js b/build/node_modules/formatio/lib/formatio.js deleted file mode 100644 index ffe234ac..00000000 --- a/build/node_modules/formatio/lib/formatio.js +++ /dev/null @@ -1,213 +0,0 @@ -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - "use strict"; - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); diff --git a/build/node_modules/formatio/package.json b/build/node_modules/formatio/package.json deleted file mode 100644 index 3ba4293c..00000000 --- a/build/node_modules/formatio/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "formatio@1.1.1", - "_id": "formatio@1.1.1", - "_inBundle": false, - "_integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "_location": "/formatio", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "formatio@1.1.1", - "name": "formatio", - "escapedName": "formatio", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/sinon" - ], - "_resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "_shasum": "5ed3ccd636551097383465d996199100e86161e9", - "_spec": "formatio@1.1.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", - "author": { - "name": "Christian Johansen" - }, - "bugs": { - "url": "https://github.com/busterjs/formatio/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Christian Johansen", - "email": "christian@cjohansen.no", - "url": "http://cjohansen.no" - }, - { - "name": "August Lilleaas", - "email": "august.lilleaas@gmail.com", - "url": "http://augustl.com" - }, - { - "name": "Dave Geddes", - "email": "davidcgeddes@gmail.com" - }, - { - "name": "Stein Magnus Jodal", - "email": "stein.magnus@jodal.no" - }, - { - "name": "Tek Nynja", - "email": "github@teknynja.com" - } - ], - "dependencies": { - "samsam": "~1.1" - }, - "deprecated": "This package is unmaintained. Use @sinonjs/formatio instead", - "description": "Human-readable object formatting", - "devDependencies": { - "buster": "*" - }, - "homepage": "http://busterjs.org/docs/formatio/", - "main": "./lib/formatio", - "name": "formatio", - "repository": { - "type": "git", - "url": "git+https://github.com/busterjs/formatio.git" - }, - "scripts": { - "test": "node node_modules/buster/bin/buster-test --node", - "test-debug": "node --debug-brk node_modules/buster/bin/buster-test --node" - }, - "version": "1.1.1" -} diff --git a/build/node_modules/formatio/test/formatio-test.js b/build/node_modules/formatio/test/formatio-test.js deleted file mode 100644 index 5edb20e9..00000000 --- a/build/node_modules/formatio/test/formatio-test.js +++ /dev/null @@ -1,476 +0,0 @@ -/*global formatio*/ -((typeof module === "object" && typeof require === "function" && function (t) { - t(require("buster"), require("../lib/formatio")); -}) || function (t) { - t(buster, formatio); -})(function (buster, formatio) { - - var assert = buster.referee.assert; - var refute = buster.referee.refute; - - function getArrayOfNumbers(size){ - var array = new Array(), - i; - - for (i = 0; i < size; i++){ - array[i] = i; - } - - return array - } - - function getObjectWithManyProperties(size){ - var object = {}; - - for (i = 0; i < size; i++) { - object[i.toString()] = i; - } - - return object; - } - - buster.testCase("formatio.ascii", { - "formats strings with quotes": function () { - assert.equals(formatio.ascii("A string"), '"A string"'); - }, - - "formats booleans without quotes": function () { - assert.equals(formatio.ascii(true), "true"); - assert.equals(formatio.ascii(false), "false"); - }, - - "formats null and undefined without quotes": function () { - assert.equals(formatio.ascii(null), "null"); - assert.equals(formatio.ascii(undefined), "undefined"); - }, - - "formats numbers without quotes": function () { - assert.equals(formatio.ascii(3), "3"); - assert.equals(formatio.ascii(3987.56), "3987.56"); - assert.equals(formatio.ascii(-980.0), "-980"); - assert.equals(formatio.ascii(NaN), "NaN"); - assert.equals(formatio.ascii(Infinity), "Infinity"); - assert.equals(formatio.ascii(-Infinity), "-Infinity"); - assert.equals(formatio.ascii(-0), "-0"); - }, - - "formats regexp using toString": function () { - assert.equals(formatio.ascii(/[a-zA-Z0-9]+\.?/), - "/[a-zA-Z0-9]+\\.?/"); - }, - - "formats functions with name": function () { - var fn = function doIt() {}; - assert.equals(formatio.ascii(fn), "function doIt() {}"); - }, - - "formats functions without name": function () { - assert.equals(formatio.ascii(function () {}), "function () {}"); - }, - - "formats functions with display name": function () { - function doIt() {} - doIt.displayName = "ohHai"; - - assert.equals(formatio.ascii(doIt), "function ohHai() {}"); - }, - - "shortens functions with long bodies": function () { - function doIt() { - var i; - function hey() {} - for (i = 0; i < 10; i++) { console.log(i); } - } - - assert.equals(formatio.ascii(doIt), "function doIt() {}"); - }, - - "formats functions with no name or display name": function () { - function doIt() {} - doIt.name = ""; - - assert.equals(formatio.ascii(doIt), "function doIt() {}"); - }, - - "formats arrays": function () { - function ohNo() { return "Oh yes!"; } - - var array = ["String", 123, /a-z/, null]; - - var str = formatio.ascii(array); - assert.equals(str, '["String", 123, /a-z/, null]'); - - str = formatio.ascii([ohNo, array]); - assert.equals(str, - '[function ohNo() {}, ["String", 123, /a-z/, null]]'); - }, - - "does not trip on circular arrays": function () { - var array = ["String", 123, /a-z/]; - array.push(array); - - var str = formatio.ascii(array); - assert.equals(str, '["String", 123, /a-z/, [Circular]]'); - }, - - "limit formatted array length": { - "should stop at given limit" : function () { - var array = getArrayOfNumbers(300); - var configuredFormatio = formatio.configure({ - limitChildrenCount : 30 - }); - var str = configuredFormatio.ascii(array); - - refute.contains(str, "30"); - assert.contains(str, "29"); - assert.contains(str, "[... 270 more elements]"); - }, - - "should only format as many elements as exists" : function(){ - var array = getArrayOfNumbers(10); - configuredFormatio = formatio.configure({ - limitChildrenCount : 30 - }); - var str = configuredFormatio.ascii(array); - - refute.contains(str, "10"); - assert.contains(str, "9"); - refute.contains(str, "undefined"); - refute.contains(str, "[..."); - }, - - "should format all array elements if no config is used" : function () { - var array = getArrayOfNumbers(300); - var str = formatio.ascii(array); - - assert.contains(str, "100"); - assert.contains(str, "299]"); - refute.contains(str, "[..."); - }, - }, - - "limit count of formated object properties": { - setUp: function() { - this.testobject = {}; - for (i = 0; i < 300; i++) { - this.testobject[i.toString()] = i; - } - }, - - "should stop at given limit" : function () { - var object = getObjectWithManyProperties(300); - configuredFormatio = formatio.configure({ - limitChildrenCount : 30 - }); - var str = configuredFormatio.ascii(object); - - // returned formation may not be in the original order - assert.equals(30 + 3, str.split("\n").length); - assert.contains(str, "[... 270 more elements]"); - }, - - "should only format as many properties as exists" : function(){ - var object = getObjectWithManyProperties(10); - configuredFormatio = formatio.configure({ - limitChildrenCount : 30 - }); - var str = configuredFormatio.ascii(object); - - refute.contains(str, "10"); - assert.contains(str, "9"); - refute.contains(str, "undefined"); - refute.contains(str, "[..."); - }, - - "should format all properties if no config is used" : function () { - var object = getObjectWithManyProperties(300); - var str = formatio.ascii(object); - - assert.equals(300 + 2, str.split("\n").length); - }, - }, - - "formats object": function () { - var object = { - id: 42, - hello: function () {}, - prop: "Some", - more: "properties", - please: "Gimme some more", - "oh hi": 42, - seriously: "many properties" - }; - - var expected = "{\n hello: function () {},\n id: 42,\n " + - "more: \"properties\",\n \"oh hi\": 42,\n please: " + - "\"Gimme some more\",\n prop: \"Some\"," + - "\n seriously: \"many properties\"\n}"; - - assert.equals(formatio.ascii(object), expected); - }, - - "formats short object on one line": function () { - var object = { - id: 42, - hello: function () {}, - prop: "Some" - }; - - var expected = "{ hello: function () {}, id: 42, prop: \"Some\" }"; - assert.equals(formatio.ascii(object), expected); - }, - - "formats object with a non-function toString": function () { - var object = { toString: 42 }; - assert.equals(formatio.ascii(object), "{ toString: 42 }"); - }, - - "formats nested object": function () { - var object = { - id: 42, - hello: function () {}, - prop: "Some", - obj: { - num: 23, - string: "Here you go you little mister" - } - }; - - var expected = "{\n hello: function () {},\n id: 42,\n obj" + - ": { num: 23, string: \"Here you go you little mister\"" + - " },\n prop: \"Some\"\n}"; - - assert.equals(formatio.ascii(object), expected); - }, - - "includes constructor if known and not Object": function () { - function Person(name) { - this.name = name; - } - - var person = new Person("Christian"); - - assert.equals(formatio.ascii(person), - "[Person] { name: \"Christian\" }"); - }, - - "does not include one letter constructors": function () { - function F(name) { - this.name = name; - } - - var person = new F("Christian"); - - assert.equals(formatio.ascii(person), "{ name: \"Christian\" }"); - }, - - "includes one letter constructors when configured so": function () { - function C(name) { - this.name = name; - } - - var person = new C("Christian"); - var formatter = formatio.configure({ excludeConstructors: [] }); - - assert.equals(formatter.ascii(person), - "[C] { name: \"Christian\" }"); - }, - - "excludes constructors when configured to do so": function () { - function Person(name) { - this.name = name; - } - - var person = new Person("Christian"); - var formatter = formatio.configure({ excludeConstructors: ["Person"] }); - - assert.equals(formatter.ascii(person), "{ name: \"Christian\" }"); - }, - - "excludes constructors by pattern when configured so": function () { - function Person(name) { this.name = name; } - function Ninja(name) { this.name = name; } - function Pervert(name) { this.name = name; } - - var person = new Person("Christian"); - var ninja = new Ninja("Haruhachi"); - var pervert = new Pervert("Mr. Garrison"); - var formatter = formatio.configure({ excludeConstructors: [/^Per/] }); - - assert.equals(formatter.ascii(person), "{ name: \"Christian\" }"); - assert.equals(formatter.ascii(ninja), - "[Ninja] { name: \"Haruhachi\" }"); - assert.equals(formatter.ascii(pervert), - "{ name: \"Mr. Garrison\" }"); - }, - - "excludes constructors when run on other objects": function () { - function Person(name) { this.name = name; } - - var person = new Person("Christian"); - var formatter = { ascii: formatio.ascii }; - formatter.excludeConstructors = ["Person"]; - - assert.equals(formatter.ascii(person), "{ name: \"Christian\" }"); - }, - - "excludes default constructors when run on other objects": function () { - var person = { name: "Christian" }; - var formatter = { ascii: formatio.ascii }; - - assert.equals(formatter.ascii(person), "{ name: \"Christian\" }"); - }, - - "does not trip on circular formatting": function () { - var object = {}; - object.foo = object; - - assert.equals(formatio.ascii(object), "{ foo: [Circular] }"); - }, - - "does not trip on indirect circular formatting": function () { - var object = { someProp: {} }; - object.someProp.foo = object; - - assert.equals(formatio.ascii(object), - "{ someProp: { foo: [Circular] } }"); - }, - - "formats nested array nicely": function () { - var object = { people: ["Chris", "August"] }; - - assert.equals(formatio.ascii(object), - "{ people: [\"Chris\", \"August\"] }"); - }, - - "does not rely on object's hasOwnProperty": function () { - // Create object with no "own" properties to get past - // Object.keys test and no .hasOwnProperty() function - var Obj = function () {}; - Obj.prototype = { hasOwnProperty: undefined }; - var object = new Obj(); - - assert.equals(formatio.ascii(object), "{ }"); - }, - - "handles cyclic structures": function () { - var obj = {}; - obj.list1 = [obj]; - obj.list2 = [obj]; - obj.list3 = [{ prop: obj }]; - - refute.exception(function () { - formatio.ascii(obj); - }); - }, - - "unquoted strings": { - setUp: function () { - this.formatter = formatio.configure({ quoteStrings: false }); - }, - - "does not quote strings": function () { - assert.equals(this.formatter.ascii("Hey there"), "Hey there"); - }, - - "quotes string properties": function () { - var obj = { hey: "Mister" }; - assert.equals(this.formatter.ascii(obj), "{ hey: \"Mister\" }"); - } - }, - - "numbers": { - "formats object with 0": function () { - var str = formatio.ascii({ me: 0 }); - refute.match(str, "-0"); - }, - - "formats object with -0": function () { - var str = formatio.ascii({ me: -0 }); - assert.match(str, "-0"); - } - }, - - "DOM elements": { - requiresSupportFor: { "DOM": typeof document !== "undefined" }, - - "formats dom element": function () { - var element = document.createElement("div"); - - assert.equals(formatio.ascii(element), "
"); - }, - - "formats dom element with attributes": function () { - var element = document.createElement("div"); - element.className = "hey there"; - element.id = "ohyeah"; - var str = formatio.ascii(element); - - assert.match(str, /
<\/div>/); - assert.match(str, /class="hey there"/); - assert.match(str, /id="ohyeah"/); - }, - - "formats dom element with content": function () { - var element = document.createElement("div"); - element.innerHTML = "Oh hi!"; - - assert.equals(formatio.ascii(element), "
Oh hi!
"); - }, - - "truncates dom element content": function () { - var element = document.createElement("div"); - element.innerHTML = "Oh hi! I'm Christian, and this " + - "is a lot of content"; - - assert.equals(formatio.ascii(element), - "
Oh hi! I'm Christian[...]
"); - }, - - "includes attributes and truncated content": function () { - var element = document.createElement("div"); - element.id = "anid"; - element.lang = "en"; - element.innerHTML = "Oh hi! I'm Christian, and this " + - "is a lot of content"; - var str = formatio.ascii(element); - - assert.match(str, - /
Oh hi! I'm Christian\[\.\.\.\]<\/div>/); - assert.match(str, /lang="en"/); - assert.match(str, /id="anid"/); - }, - - "formats document object as toString": function () { - var str; - buster.assertions.refute.exception(function () { - str = formatio.ascii(document); - }); - - assert.equals(str, "[object HTMLDocument]"); - }, - - "formats window object as toString": function () { - var str; - buster.assertions.refute.exception(function () { - str = formatio.ascii(window); - }); - - assert.equals(str, "[object Window]"); - } - }, - - "global object": { - requiresSupportFor: { "global": typeof global !== "undefined" }, - - "formats global object as toString": function () { - var str; - buster.assertions.refute.exception(function () { - str = formatio.ascii(global); - }); - - assert.equals(str, "[object global]"); - } - } - }); -}); diff --git a/build/node_modules/formidable/LICENSE b/build/node_modules/formidable/LICENSE index 7c66bea2..5e7ad117 100644 --- a/build/node_modules/formidable/LICENSE +++ b/build/node_modules/formidable/LICENSE @@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/build/node_modules/formidable/README.md b/build/node_modules/formidable/README.md index e6c5075e..de675980 100644 --- a/build/node_modules/formidable/README.md +++ b/build/node_modules/formidable/README.md @@ -6,13 +6,6 @@ > A Node.js module for parsing form data, especially file uploads. -### Important Notes - -- This README is for the upcoming (end of February) v2 release! -- Every version prior and including `v1.2.2` is deprecated, please upgrade! -- Install with `formidable@canary` until v2 land officially in `latest` -- see more about the changes in the [CHANGELOG.md](https://github.com/node-formidable/formidable/blob/master/CHANGELOG.md) - [![Code style][codestyle-img]][codestyle-url] [![codecoverage][codecov-img]][codecov-url] [![linux build status][linux-build-img]][build-url] @@ -22,7 +15,7 @@ If you have any _how-to_ kind of questions, please read the [Contributing Guide][contributing-url] and [Code of Conduct][code_of_conduct-url] documents.
For bugs reports and feature requests, [please create an -issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore) +issue][open-issue-url] or ping [@tunnckoCore / @3a1FcBx0](https://twitter.com/3a1FcBx0) at Twitter. [![Conventional Commits][ccommits-img]][ccommits-url] @@ -46,7 +39,9 @@ use._ [![][npm-weekly-img]][npmv-url] [![][npm-monthly-img]][npmv-url] [![][npm-yearly-img]][npmv-url] [![][npm-alltime-img]][npmv-url] -## Status: Maintained [![npm version][npmv-canary-img]][npmv-url] +## Project Status: Maintained + +_Check [VERSION NOTES](https://github.com/node-formidable/formidable/blob/master/VERSION_NOTES.md) for more information on v1, v2, and v3 plans, NPM dist-tags and branches._ This module was initially developed by [**@felixge**](https://github.com/felixge) for @@ -58,20 +53,14 @@ and is used in production for years. Currently, we are few maintainers trying to deal with it. :) More contributors are always welcome! :heart: Jump on [issue #412](https://github.com/felixge/node-formidable/issues/412) which is -closed, but if you are interested we can discuss it and add you after strict rules, like -enabling Two-Factor Auth in your npm and GitHub accounts. - -_**Note:** The github `master` branch is a "canary" branch - try it with `npm i formidable@canary`. -Do not expect (for now) things from it to be inside the`latest` "dist-tag" in the -Npm. The`formidable@latest`is the`v1.2.1` version and probably it will be the -last`v1` release!_ - -_**Note: v2 is coming soon!**_ +closed, but if you are interested we can discuss it and add you after strict +rules, like enabling Two-Factor Auth in your npm and GitHub accounts. ## Highlights - [Fast (~900-2500 mb/sec)](#benchmarks) & streaming multipart parser -- Automatically writing file uploads to disk (soon optionally) +- Automatically writing file uploads to disk (optional, see + [`options.fileWriteStreamHandler`](#options)) - [Plugins API](#useplugin-plugin) - allowing custom parsers and plugins - Low memory footprint - Graceful error handling @@ -83,22 +72,21 @@ This project requires `Node.js >= 10.13`. Install it using [yarn](https://yarnpkg.com) or [npm](https://npmjs.com).
_We highly recommend to use Yarn when you think to contribute to this project._ +This is a low-level package, and if you're using a high-level framework it _may_ +already be included. Check the examples below and the [examples/](https://github.com/node-formidable/formidable/tree/master/examples) folder. + ```sh +# v2 npm install formidable -# or the canary version -npm install formidable@canary -``` - -or with Yarn v1/v2 +npm install formidable@latest +npm install formidable@v2 -```sh -yarn add formidable -# or the canary version -yarn add formidable@canary +# or v3 +npm install formidable@v3 ``` -This is a low-level package, and if you're using a high-level framework it _may_ -already be included. Check the examples below and the `examples/` folder. +_**Note:** In near future v3 will be published on the `latest` NPM dist-tag. Future not ready releases will continue to be published on `canary` dist-tag._ + ## Examples @@ -119,7 +107,12 @@ const server = http.createServer((req, res) => { const form = formidable({ multiples: true }); form.parse(req, (err, fields, files) => { - res.writeHead(200, { 'content-type': 'application/json' }); + if (err) { + res.writeHead(err.httpCode || 400, { 'Content-Type': 'text/plain' }); + res.end(String(err)); + return; + } + res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ fields, files }, null, 2)); }); @@ -127,7 +120,7 @@ const server = http.createServer((req, res) => { } // show a file upload form - res.writeHead(200, { 'content-type': 'text/html' }); + res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(`

With Node.js "http" module

@@ -150,7 +143,7 @@ stream, so something like the following example should work just fine, without any third-party [Express.js](https://ghub.now.sh/express) middleware. Or try the -[examples/with-express.js](https://github.com/node-formidable/node-formidable/blob/master/examples/with-express.js) +[examples/with-express.js](https://github.com/node-formidable/formidable/blob/master/examples/with-express.js) ```js const express = require('express'); @@ -212,7 +205,7 @@ app.use(async (ctx, next) => { if (ctx.url === '/api/upload' && ctx.method.toLowerCase() === 'post') { const form = formidable({ multiples: true }); - // not very elegant, but that's for now if you don't want touse `koa-better-body` + // not very elegant, but that's for now if you don't want to use `koa-better-body` // or other middlewares. await new Promise((resolve, reject) => { form.parse(ctx.req, (err, fields, files) => { @@ -255,7 +248,7 @@ app.listen(3000, () => { }); ``` -## Benchmarks (for v2) +## Benchmarks The benchmark is quite old, from the old codebase. But maybe quite true though. Previously the numbers was around ~500 mb/sec. Currently with moving to the new @@ -287,7 +280,7 @@ Benchmarked on 8GB RAM, Xeon X3440 (2.53 GHz, 4 cores, 8 threads) 2566.42 mb/sec ``` -![benchmark January 29th, 2020](./benchmark-2020-01-29_xeon-x3440.png) +![benchmark January 29th, 2020](./benchmark/2020-01-29_xeon-x3440.png) ## API @@ -317,31 +310,52 @@ const form = new Formidable(options); ### Options -See it's defaults in [src/Formidable.js](./src/Formidable.js#L14-L22) (the -`DEFAULT_OPTIONS` constant). +See it's defaults in [src/Formidable.js DEFAULT_OPTIONS](./src/Formidable.js) +(the `DEFAULT_OPTIONS` constant). - `options.encoding` **{string}** - default `'utf-8'`; sets encoding for incoming form fields, - `options.uploadDir` **{string}** - default `os.tmpdir()`; the directory for - placing file uploads in. You can move them later by using `fs.rename()` + placing file uploads in. You can move them later by using `fs.rename()`. - `options.keepExtensions` **{boolean}** - default `false`; to include the extensions of the original files or not +- `options.allowEmptyFiles` **{boolean}** - default `true`; allow upload empty + files +- `options.minFileSize` **{number}** - default `1` (1byte); the minium size of + uploaded file. - `options.maxFileSize` **{number}** - default `200 * 1024 * 1024` (200mb); limit the size of uploaded file. -- `options.maxFields` **{number}** - default `1000`; limit the number of fields - that the Querystring parser will decode, set 0 for unlimited +- `options.maxFields` **{number}** - default `1000`; limit the number of fields, set 0 for unlimited - `options.maxFieldsSize` **{number}** - default `20 * 1024 * 1024` (20mb); limit the amount of memory all fields together (except files) can allocate in bytes. -- `options.hash` **{boolean}** - default `false`; include checksums calculated +- `options.hashAlgorithm` **{string | false}** - default `false`; include checksums calculated for incoming files, set this to some hash algorithm, see [crypto.createHash](https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm_options) for available algorithms +- `options.fileWriteStreamHandler` **{function}** - default `null`, which by + default writes to host machine file system every file parsed; The function + should return an instance of a + [Writable stream](https://nodejs.org/api/stream.html#stream_class_stream_writable) + that will receive the uploaded file data. With this option, you can have any + custom behavior regarding where the uploaded file data will be streamed for. + If you are looking to write the file uploaded in other types of cloud storages + (AWS S3, Azure blob storage, Google cloud storage) or private file storage, + this is the option you're looking for. When this option is defined the default + behavior of writing the file in the host machine file system is lost. - `options.multiples` **{boolean}** - default `false`; when you call the `.parse` method, the `files` argument (of the callback) will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute. Also, the `fields` argument will contain arrays of values for fields that have names ending with '[]'. +- `options.filename` **{function}** - default `undefined` Use it to control + newFilename. Must return a string. Will be joined with options.uploadDir. + +- `options.filter` **{function}** - default function that always returns true. + Use it to filter files before they are uploaded. Must return a boolean. + + +#### `options.filename` **{function}** function (name, ext, part, form) -> string _**Note:** If this size of combined fields, or size of some file is exceeded, an `'error'` event is fired._ @@ -356,6 +370,20 @@ form.bytesReceived; form.bytesExpected; ``` +#### `options.filter` **{function}** function ({name, originalFilename, mimetype}) -> boolean + +**Note:** use an outside variable to cancel all uploads upon the first error + +```js +const options = { + filter: function ({name, originalFilename, mimetype}) { + // keep only images + return mimetype && mimetype.includes("image"); + } +}; +``` + + ### .parse(request, callback) Parses an incoming Node.js `request` containing form data. If `callback` is @@ -377,6 +405,41 @@ multipart stream. Doing so will disable any `'field'` / `'file'` events processing which would occur otherwise, making you fully responsible for handling the processing. +About `uploadDir`, given the following directory structure +``` +project-name +├── src +│ └── server.js +│ +└── uploads + └── image.jpg +``` + +`__dirname` would be the same directory as the source file itself (src) + + +```js + `${__dirname}/../uploads` +``` + +to put files in uploads. + +Omitting `__dirname` would make the path relative to the current working directory. This would be the same if server.js is launched from src but not project-name. + + +`null` will use default which is `os.tmpdir()` + +Note: If the directory does not exist, the uploaded files are __silently discarded__. To make sure it exists: + +```js +import {createNecessaryDirectoriesSync} from "filesac"; + + +const uploadPath = `${__dirname}/../uploads`; +createNecessaryDirectoriesSync(`${uploadPath}/x`); +``` + + In the example below, we listen on couple of events and direct them to the `data` listener, so you can do whatever you choose there, based on whether its before the file been emitted, the header value, the header name, on field, on @@ -388,12 +451,12 @@ later. ```js form.once('error', console.error); -form.on('fileBegin', (filename, file) => { - form.emit('data', { name: 'fileBegin', filename, value: file }); +form.on('fileBegin', (formname, file) => { + form.emit('data', { name: 'fileBegin', formname, value: file }); }); -form.on('file', (filename, file) => { - form.emit('data', { name: 'file', key: filename, value: file }); +form.on('file', (formname, file) => { + form.emit('data', { name: 'file', formname, value: file }); }); form.on('field', (fieldName, fieldValue) => { @@ -405,7 +468,7 @@ form.once('end', () => { }); // If you want to customize whatever you want... -form.on('data', ({ name, key, value, buffer, start, end, ...more }) => { +form.on('data', ({ name, key, value, buffer, start, end, formname, ...more }) => { if (name === 'partBegin') { } if (name === 'partData') { @@ -423,10 +486,10 @@ form.on('data', ({ name, key, value, buffer, start, end, ...more }) => { console.log('field value:', value); } if (name === 'file') { - console.log('file:', key, value); + console.log('file:', formname, value); } if (name === 'fileBegin') { - console.log('fileBegin:', key, value); + console.log('fileBegin:', formname, value); } }); ``` @@ -481,7 +544,7 @@ you can remove it from the `options.enabledPlugins`, like so const { Formidable } = require('formidable'); const form = new Formidable({ - hash: 'sha1', + hashAlgorithm: 'sha1', enabledPlugins: ['octetstream', 'querystring', 'json'], }); ``` @@ -504,7 +567,7 @@ inspiration, you can for example validate the mime-type. const form = formidable(); form.onPart = (part) => { - part.on('data', (buffer) { + part.on('data', (buffer) => { // do whatever you want here }); }; @@ -516,11 +579,11 @@ fields) ```js const form = formidable(); -form.onPart = function(part) { +form.onPart = function (part) { // let formidable handle only non-file parts - if (part.filename === '' || !part.mime) { + if (part.originalFilename === '' || !part.mimetype) { // used internally, please do not override! - form.handlePart(part); + form._handlePart(part); } }; ``` @@ -536,20 +599,24 @@ export interface File { // The path this file is being written to. You can modify this in the `'fileBegin'` event in // case you are unhappy with the way formidable generates a temporary path for your files. - file.path: string; + file.filepath: string; // The name this file had according to the uploading client. - file.name: string | null; + file.originalFilename: string | null; + + // calculated based on options provided + file.newFilename: string | null; // The mime type of this file, according to the uploading client. - file.type: string | null; + file.mimetype: string | null; // A Date object (or `null`) containing the time this file was last written to. // Mostly here for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/). - file.lastModifiedDate: Date | null; + file.mtime: Date | null; - // If `options.hash` calculation was set, you can read the hex digest out of this var. - file.hash: string | 'sha1' | 'md5' | 'sha256' | null; + file.hashAlgorithm: false | |'sha1' | 'md5' | 'sha256' + // If `options.hashAlgorithm` calculation was set, you can read the hex digest out of this var (at the end it will be a string) + file.hash: string | object | null; } ``` @@ -585,7 +652,14 @@ you want to stream the file to somewhere else while buffering the upload on the file system. ```js -form.on('fileBegin', (name, file) => {}); +form.on('fileBegin', (formName, file) => { + // accessible here + // formName the name in the form () or http filename for octetstream + // file.originalFilename http filename or null if there was a parsing error + // file.newFilename generated hexoid or what options.filename returned + // file.filepath default pathnme as per options.uploadDir and options.filename + // file.filepath = CUSTOM_PATH // to change the final path +}); ``` #### `'file'` @@ -594,7 +668,11 @@ Emitted whenever a field / file pair has been received. `file` is an instance of `File`. ```js -form.on('file', (name, file) => {}); +form.on('file', (formname, file) => { + // same as fileBegin, except + // it is too late to change file.filepath + // file.hash is available if options.hash was used +}); ``` #### `'error'` @@ -603,6 +681,8 @@ Emitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events. +May have `error.httpCode` and `error.code` attached. + ```js form.on('error', (err) => {}); ``` @@ -627,6 +707,10 @@ finished flushing to disk. This is a great place for you to send your response. form.on('end', () => {}); ``` +## Changelog + +[./CHANGELOG.md](./CHANGELOG.md) + ## Ports & Credits - [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ @@ -639,8 +723,8 @@ form.on('end', () => {}); If the documentation is unclear or has a typo, please click on the page's `Edit` button (pencil icon) and suggest a correction. If you would like to help us fix -a bug or add a new feature, please check our -[Contributing Guide](./CONTRIBUTING.md). Pull requests are welcome! +a bug or add a new feature, please check our [Contributing +Guide][contributing-url]. Pull requests are welcome! Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): @@ -679,6 +763,13 @@ Thanks goes to these wonderful people +From a [Felix blog post](https://felixge.de/2013/03/11/the-pull-request-hack/): + +- [Sven Lito](https://github.com/svnlto) for fixing bugs and merging patches +- [egirshov](https://github.com/egirshov) for contributing many improvements to the node-formidable multipart parser +- [Andrew Kelley](https://github.com/superjoe30) for also helping with fixing bugs and making improvements +- [Mike Frey](https://github.com/mikefrey) for contributing JSON support + ## License Formidable is licensed under the [MIT License][license-url]. @@ -688,14 +779,14 @@ Formidable is licensed under the [MIT License][license-url]. [codestyle-url]: https://github.com/airbnb/javascript [codestyle-img]: https://badgen.net/badge/code%20style/airbnb%20%2B%20prettier/ff5a5f?icon=airbnb&cache=300 -[codecov-url]: https://codecov.io/gh/node-formidable/node-formidable -[codecov-img]: https://badgen.net/codecov/c/github/node-formidable/node-formidable/master?icon=codecov +[codecov-url]: https://codecov.io/gh/node-formidable/formidable +[codecov-img]: https://badgen.net/codecov/c/github/node-formidable/formidable/master?icon=codecov [npmv-canary-img]: https://badgen.net/npm/v/formidable/canary?icon=npm [npmv-dev-img]: https://badgen.net/npm/v/formidable/dev?icon=npm [npmv-img]: https://badgen.net/npm/v/formidable?icon=npm [npmv-url]: https://npmjs.com/package/formidable [license-img]: https://badgen.net/npm/license/formidable -[license-url]: https://github.com/node-formidable/node-formidable/blob/master/LICENSE +[license-url]: https://github.com/node-formidable/formidable/blob/master/LICENSE [chat-img]: https://badgen.net/badge/chat/on%20gitter/46BC99?icon=gitter [chat-url]: https://gitter.im/node-formidable/Lobby [libera-manifesto-url]: https://liberamanifesto.com @@ -704,8 +795,8 @@ Formidable is licensed under the [MIT License][license-url]. [renovateapp-img]: https://badgen.net/badge/renovate/enabled/green?cache=300 [prs-welcome-img]: https://badgen.net/badge/PRs/welcome/green?cache=300 [prs-welcome-url]: http://makeapullrequest.com -[twitter-url]: https://twitter.com/tunnckoCore -[twitter-img]: https://badgen.net/twitter/follow/tunnckoCore?icon=twitter&color=1da1f2&cache=300 +[twitter-url]: https://twitter.com/3a1fcBx0 +[twitter-img]: https://badgen.net/twitter/follow/3a1fcBx0?icon=twitter&color=1da1f2&cache=300 [npm-weekly-img]: https://badgen.net/npm/dw/formidable?icon=npm&cache=300 [npm-monthly-img]: https://badgen.net/npm/dm/formidable?icon=npm&cache=300 @@ -717,10 +808,10 @@ Formidable is licensed under the [MIT License][license-url]. [ccommits-url]: https://conventionalcommits.org/ [ccommits-img]: https://badgen.net/badge/conventional%20commits/v1.0.0/green?cache=300 -[contributing-url]: https://github.com/node-formidable/node-formidable/blob/master/CONTRIBUTING.md -[code_of_conduct-url]: https://github.com/node-formidable/node-formidable/blob/master/CODE_OF_CONDUCT.md +[contributing-url]: https://github.com/node-formidable/.github/blob/master/CONTRIBUTING.md +[code_of_conduct-url]: https://github.com/node-formidable/.github/blob/master/CODE_OF_CONDUCT.md -[open-issue-url]: https://github.com/node-formidable/node-formidable/issues/new +[open-issue-url]: https://github.com/node-formidable/formidable/issues/new [tidelift-url]: https://tidelift.com/subscription/pkg/npm-formidable?utm_source=npm-formidable&utm_medium=referral&utm_campaign=enterprise [tidelift-img]: https://badgen.net/badge/tidelift/subscription/4B5168?labelColor=F6914D @@ -728,8 +819,8 @@ Formidable is licensed under the [MIT License][license-url]. [kofi-url]: https://ko-fi.com/tunnckoCore/commissions [kofi-img]: https://badgen.net/badge/ko-fi/support/29abe0c2?cache=300&icon=https://rawcdn.githack.com/tunnckoCore/badgen-icons/f8264c6414e0bec449dd86f2241d50a9b89a1203/icons/kofi.svg -[linux-build-img]: https://badgen-net.charlike.now.sh/github/checks/node-formidable/node-formidable?label=linux%20build&icon=github -[macos-build-img]: https://badgen-net.charlike.now.sh/github/checks/node-formidable/node-formidable?label=macos%20build&icon=github -[windows-build-img]: https://badgen-net.charlike.now.sh/github/checks/node-formidable/node-formidable?label=windows%20build&icon=github -[build-url]: https://github.com/node-formidable/node-formidable/actions?query=workflow%3Anodejs +[linux-build-img]: https://badgen.net/github/checks/node-formidable/formidable/master/ubuntu?cache=300&label=linux%20build&icon=github +[macos-build-img]: https://badgen.net/github/checks/node-formidable/formidable/master/macos?cache=300&label=macos%20build&icon=github +[windows-build-img]: https://badgen.net/github/checks/node-formidable/formidable/master/windows?cache=300&label=windows%20build&icon=github +[build-url]: https://github.com/node-formidable/formidable/actions?query=workflow%3Anodejs diff --git a/build/node_modules/formidable/benchmark-2020-01-29_xeon-x3440.png b/build/node_modules/formidable/benchmark-2020-01-29_xeon-x3440.png deleted file mode 100644 index ef6f0fbb676d5659acd90ed3a1ec5f25a877e704..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25658 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 Sdj{SBk&{w>RP^vk(0>3fPd!Tj diff --git a/build/node_modules/formidable/lib/file.js b/build/node_modules/formidable/lib/file.js deleted file mode 100644 index 50d34c09..00000000 --- a/build/node_modules/formidable/lib/file.js +++ /dev/null @@ -1,81 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -var util = require('util'), - fs = require('fs'), - EventEmitter = require('events').EventEmitter, - crypto = require('crypto'); - -function File(properties) { - EventEmitter.call(this); - - this.size = 0; - this.path = null; - this.name = null; - this.type = null; - this.hash = null; - this.lastModifiedDate = null; - - this._writeStream = null; - - for (var key in properties) { - this[key] = properties[key]; - } - - if(typeof this.hash === 'string') { - this.hash = crypto.createHash(properties.hash); - } else { - this.hash = null; - } -} -module.exports = File; -util.inherits(File, EventEmitter); - -File.prototype.open = function() { - this._writeStream = new fs.WriteStream(this.path); -}; - -File.prototype.toJSON = function() { - var json = { - size: this.size, - path: this.path, - name: this.name, - type: this.type, - mtime: this.lastModifiedDate, - length: this.length, - filename: this.filename, - mime: this.mime - }; - if (this.hash && this.hash != "") { - json.hash = this.hash; - } - return json; -}; - -File.prototype.write = function(buffer, cb) { - var self = this; - if (self.hash) { - self.hash.update(buffer); - } - - if (this._writeStream.closed) { - return cb(); - } - - this._writeStream.write(buffer, function() { - self.lastModifiedDate = new Date(); - self.size += buffer.length; - self.emit('progress', self.size); - cb(); - }); -}; - -File.prototype.end = function(cb) { - var self = this; - if (self.hash) { - self.hash = self.hash.digest('hex'); - } - this._writeStream.end(function() { - self.emit('end'); - cb(); - }); -}; diff --git a/build/node_modules/formidable/lib/incoming_form.js b/build/node_modules/formidable/lib/incoming_form.js deleted file mode 100644 index dbd920b8..00000000 --- a/build/node_modules/formidable/lib/incoming_form.js +++ /dev/null @@ -1,558 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -var crypto = require('crypto'); -var fs = require('fs'); -var util = require('util'), - path = require('path'), - File = require('./file'), - MultipartParser = require('./multipart_parser').MultipartParser, - QuerystringParser = require('./querystring_parser').QuerystringParser, - OctetParser = require('./octet_parser').OctetParser, - JSONParser = require('./json_parser').JSONParser, - StringDecoder = require('string_decoder').StringDecoder, - EventEmitter = require('events').EventEmitter, - Stream = require('stream').Stream, - os = require('os'); - -function IncomingForm(opts) { - if (!(this instanceof IncomingForm)) return new IncomingForm(opts); - EventEmitter.call(this); - - opts=opts||{}; - - this.error = null; - this.ended = false; - - this.maxFields = opts.maxFields || 1000; - this.maxFieldsSize = opts.maxFieldsSize || 20 * 1024 * 1024; - this.maxFileSize = opts.maxFileSize || 200 * 1024 * 1024; - this.keepExtensions = opts.keepExtensions || false; - this.uploadDir = opts.uploadDir || (os.tmpdir && os.tmpdir()) || os.tmpDir(); - this.encoding = opts.encoding || 'utf-8'; - this.headers = null; - this.type = null; - this.hash = opts.hash || false; - this.multiples = opts.multiples || false; - - this.bytesReceived = null; - this.bytesExpected = null; - - this._parser = null; - this._flushing = 0; - this._fieldsSize = 0; - this._fileSize = 0; - this.openedFiles = []; - - return this; -} -util.inherits(IncomingForm, EventEmitter); -exports.IncomingForm = IncomingForm; - -IncomingForm.prototype.parse = function(req, cb) { - this.pause = function() { - try { - req.pause(); - } catch (err) { - // the stream was destroyed - if (!this.ended) { - // before it was completed, crash & burn - this._error(err); - } - return false; - } - return true; - }; - - this.resume = function() { - try { - req.resume(); - } catch (err) { - // the stream was destroyed - if (!this.ended) { - // before it was completed, crash & burn - this._error(err); - } - return false; - } - - return true; - }; - - // Setup callback first, so we don't miss anything from data events emitted - // immediately. - if (cb) { - var fields = {}, files = {}; - this - .on('field', function(name, value) { - fields[name] = value; - }) - .on('file', function(name, file) { - if (this.multiples) { - if (files[name]) { - if (!Array.isArray(files[name])) { - files[name] = [files[name]]; - } - files[name].push(file); - } else { - files[name] = file; - } - } else { - files[name] = file; - } - }) - .on('error', function(err) { - cb(err, fields, files); - }) - .on('end', function() { - cb(null, fields, files); - }); - } - - // Parse headers and setup the parser, ready to start listening for data. - this.writeHeaders(req.headers); - - // Start listening for data. - var self = this; - req - .on('error', function(err) { - self._error(err); - }) - .on('aborted', function() { - self.emit('aborted'); - self._error(new Error('Request aborted')); - }) - .on('data', function(buffer) { - self.write(buffer); - }) - .on('end', function() { - if (self.error) { - return; - } - - var err = self._parser.end(); - if (err) { - self._error(err); - } - }); - - return this; -}; - -IncomingForm.prototype.writeHeaders = function(headers) { - this.headers = headers; - this._parseContentLength(); - this._parseContentType(); -}; - -IncomingForm.prototype.write = function(buffer) { - if (this.error) { - return; - } - if (!this._parser) { - this._error(new Error('uninitialized parser')); - return; - } - - this.bytesReceived += buffer.length; - this.emit('progress', this.bytesReceived, this.bytesExpected); - - var bytesParsed = this._parser.write(buffer); - if (bytesParsed !== buffer.length) { - this._error(new Error('parser error, '+bytesParsed+' of '+buffer.length+' bytes parsed')); - } - - return bytesParsed; -}; - -IncomingForm.prototype.pause = function() { - // this does nothing, unless overwritten in IncomingForm.parse - return false; -}; - -IncomingForm.prototype.resume = function() { - // this does nothing, unless overwritten in IncomingForm.parse - return false; -}; - -IncomingForm.prototype.onPart = function(part) { - // this method can be overwritten by the user - this.handlePart(part); -}; - -IncomingForm.prototype.handlePart = function(part) { - var self = this; - - // This MUST check exactly for undefined. You can not change it to !part.filename. - if (part.filename === undefined) { - var value = '' - , decoder = new StringDecoder(this.encoding); - - part.on('data', function(buffer) { - self._fieldsSize += buffer.length; - if (self._fieldsSize > self.maxFieldsSize) { - self._error(new Error('maxFieldsSize exceeded, received '+self._fieldsSize+' bytes of field data')); - return; - } - value += decoder.write(buffer); - }); - - part.on('end', function() { - self.emit('field', part.name, value); - }); - return; - } - - this._flushing++; - - var file = new File({ - path: this._uploadPath(part.filename), - name: part.filename, - type: part.mime, - hash: self.hash - }); - - this.emit('fileBegin', part.name, file); - - file.open(); - this.openedFiles.push(file); - - part.on('data', function(buffer) { - self._fileSize += buffer.length; - if (self._fileSize > self.maxFileSize) { - self._error(new Error('maxFileSize exceeded, received '+self._fileSize+' bytes of file data')); - return; - } - if (buffer.length == 0) { - return; - } - self.pause(); - file.write(buffer, function() { - self.resume(); - }); - }); - - part.on('end', function() { - file.end(function() { - self._flushing--; - self.emit('file', part.name, file); - self._maybeEnd(); - }); - }); -}; - -function dummyParser(self) { - return { - end: function () { - self.ended = true; - self._maybeEnd(); - return null; - } - }; -} - -IncomingForm.prototype._parseContentType = function() { - if (this.bytesExpected === 0) { - this._parser = dummyParser(this); - return; - } - - if (!this.headers['content-type']) { - this._error(new Error('bad content-type header, no content-type')); - return; - } - - if (this.headers['content-type'].match(/octet-stream/i)) { - this._initOctetStream(); - return; - } - - if (this.headers['content-type'].match(/urlencoded/i)) { - this._initUrlencoded(); - return; - } - - if (this.headers['content-type'].match(/multipart/i)) { - var m = this.headers['content-type'].match(/boundary=(?:"([^"]+)"|([^;]+))/i); - if (m) { - this._initMultipart(m[1] || m[2]); - } else { - this._error(new Error('bad content-type header, no multipart boundary')); - } - return; - } - - if (this.headers['content-type'].match(/json/i)) { - this._initJSONencoded(); - return; - } - - this._error(new Error('bad content-type header, unknown content-type: '+this.headers['content-type'])); -}; - -IncomingForm.prototype._error = function(err) { - if (this.error || this.ended) { - return; - } - - this.error = err; - this.emit('error', err); - - if (Array.isArray(this.openedFiles)) { - this.openedFiles.forEach(function(file) { - file._writeStream.destroy(); - setTimeout(fs.unlink, 0, file.path, function(error) { }); - }); - } -}; - -IncomingForm.prototype._parseContentLength = function() { - this.bytesReceived = 0; - if (this.headers['content-length']) { - this.bytesExpected = parseInt(this.headers['content-length'], 10); - } else if (this.headers['transfer-encoding'] === undefined) { - this.bytesExpected = 0; - } - - if (this.bytesExpected !== null) { - this.emit('progress', this.bytesReceived, this.bytesExpected); - } -}; - -IncomingForm.prototype._newParser = function() { - return new MultipartParser(); -}; - -IncomingForm.prototype._initMultipart = function(boundary) { - this.type = 'multipart'; - - var parser = new MultipartParser(), - self = this, - headerField, - headerValue, - part; - - parser.initWithBoundary(boundary); - - parser.onPartBegin = function() { - part = new Stream(); - part.readable = true; - part.headers = {}; - part.name = null; - part.filename = null; - part.mime = null; - - part.transferEncoding = 'binary'; - part.transferBuffer = ''; - - headerField = ''; - headerValue = ''; - }; - - parser.onHeaderField = function(b, start, end) { - headerField += b.toString(self.encoding, start, end); - }; - - parser.onHeaderValue = function(b, start, end) { - headerValue += b.toString(self.encoding, start, end); - }; - - parser.onHeaderEnd = function() { - headerField = headerField.toLowerCase(); - part.headers[headerField] = headerValue; - - // matches either a quoted-string or a token (RFC 2616 section 19.5.1) - var m = headerValue.match(/\bname=("([^"]*)"|([^\(\)<>@,;:\\"\/\[\]\?=\{\}\s\t/]+))/i); - if (headerField == 'content-disposition') { - if (m) { - part.name = m[2] || m[3] || ''; - } - - part.filename = self._fileName(headerValue); - } else if (headerField == 'content-type') { - part.mime = headerValue; - } else if (headerField == 'content-transfer-encoding') { - part.transferEncoding = headerValue.toLowerCase(); - } - - headerField = ''; - headerValue = ''; - }; - - parser.onHeadersEnd = function() { - switch(part.transferEncoding){ - case 'binary': - case '7bit': - case '8bit': - parser.onPartData = function(b, start, end) { - part.emit('data', b.slice(start, end)); - }; - - parser.onPartEnd = function() { - part.emit('end'); - }; - break; - - case 'base64': - parser.onPartData = function(b, start, end) { - part.transferBuffer += b.slice(start, end).toString('ascii'); - - /* - four bytes (chars) in base64 converts to three bytes in binary - encoding. So we should always work with a number of bytes that - can be divided by 4, it will result in a number of buytes that - can be divided vy 3. - */ - var offset = parseInt(part.transferBuffer.length / 4, 10) * 4; - part.emit('data', new Buffer(part.transferBuffer.substring(0, offset), 'base64')); - part.transferBuffer = part.transferBuffer.substring(offset); - }; - - parser.onPartEnd = function() { - part.emit('data', new Buffer(part.transferBuffer, 'base64')); - part.emit('end'); - }; - break; - - default: - return self._error(new Error('unknown transfer-encoding')); - } - - self.onPart(part); - }; - - - parser.onEnd = function() { - self.ended = true; - self._maybeEnd(); - }; - - this._parser = parser; -}; - -IncomingForm.prototype._fileName = function(headerValue) { - // matches either a quoted-string or a token (RFC 2616 section 19.5.1) - var m = headerValue.match(/\bfilename=("(.*?)"|([^\(\)<>@,;:\\"\/\[\]\?=\{\}\s\t/]+))($|;\s)/i); - if (!m) return; - - var match = m[2] || m[3] || ''; - var filename = match.substr(match.lastIndexOf('\\') + 1); - filename = filename.replace(/%22/g, '"'); - filename = filename.replace(/&#([\d]{4});/g, function(m, code) { - return String.fromCharCode(code); - }); - return filename; -}; - -IncomingForm.prototype._initUrlencoded = function() { - this.type = 'urlencoded'; - - var parser = new QuerystringParser(this.maxFields) - , self = this; - - parser.onField = function(key, val) { - self.emit('field', key, val); - }; - - parser.onEnd = function() { - self.ended = true; - self._maybeEnd(); - }; - - this._parser = parser; -}; - -IncomingForm.prototype._initOctetStream = function() { - this.type = 'octet-stream'; - var filename = this.headers['x-file-name']; - var mime = this.headers['content-type']; - - var file = new File({ - path: this._uploadPath(filename), - name: filename, - type: mime - }); - - this.emit('fileBegin', filename, file); - file.open(); - this.openedFiles.push(file); - this._flushing++; - - var self = this; - - self._parser = new OctetParser(); - - //Keep track of writes that haven't finished so we don't emit the file before it's done being written - var outstandingWrites = 0; - - self._parser.on('data', function(buffer){ - self.pause(); - outstandingWrites++; - - file.write(buffer, function() { - outstandingWrites--; - self.resume(); - - if(self.ended){ - self._parser.emit('doneWritingFile'); - } - }); - }); - - self._parser.on('end', function(){ - self._flushing--; - self.ended = true; - - var done = function(){ - file.end(function() { - self.emit('file', 'file', file); - self._maybeEnd(); - }); - }; - - if(outstandingWrites === 0){ - done(); - } else { - self._parser.once('doneWritingFile', done); - } - }); -}; - -IncomingForm.prototype._initJSONencoded = function() { - this.type = 'json'; - - var parser = new JSONParser(this) - , self = this; - - parser.onField = function(key, val) { - self.emit('field', key, val); - }; - - parser.onEnd = function() { - self.ended = true; - self._maybeEnd(); - }; - - this._parser = parser; -}; - -IncomingForm.prototype._uploadPath = function(filename) { - var buf = crypto.randomBytes(16); - var name = 'upload_' + buf.toString('hex'); - - if (this.keepExtensions) { - var ext = path.extname(filename); - ext = ext.replace(/(\.[a-z0-9]+).*/i, '$1'); - - name += ext; - } - - return path.join(this.uploadDir, name); -}; - -IncomingForm.prototype._maybeEnd = function() { - if (!this.ended || this._flushing || this.error) { - return; - } - - this.emit('end'); -}; diff --git a/build/node_modules/formidable/lib/index.js b/build/node_modules/formidable/lib/index.js deleted file mode 100644 index 7a6e3e10..00000000 --- a/build/node_modules/formidable/lib/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var IncomingForm = require('./incoming_form').IncomingForm; -IncomingForm.IncomingForm = IncomingForm; -module.exports = IncomingForm; diff --git a/build/node_modules/formidable/lib/json_parser.js b/build/node_modules/formidable/lib/json_parser.js deleted file mode 100644 index 28a23bad..00000000 --- a/build/node_modules/formidable/lib/json_parser.js +++ /dev/null @@ -1,30 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -var Buffer = require('buffer').Buffer; - -function JSONParser(parent) { - this.parent = parent; - this.chunks = []; - this.bytesWritten = 0; -} -exports.JSONParser = JSONParser; - -JSONParser.prototype.write = function(buffer) { - this.bytesWritten += buffer.length; - this.chunks.push(buffer); - return buffer.length; -}; - -JSONParser.prototype.end = function() { - try { - var fields = JSON.parse(Buffer.concat(this.chunks)); - for (var field in fields) { - this.onField(field, fields[field]); - } - } catch (e) { - this.parent.emit('error', e); - } - this.data = null; - - this.onEnd(); -}; diff --git a/build/node_modules/formidable/lib/multipart_parser.js b/build/node_modules/formidable/lib/multipart_parser.js deleted file mode 100644 index 36de2b0d..00000000 --- a/build/node_modules/formidable/lib/multipart_parser.js +++ /dev/null @@ -1,332 +0,0 @@ -var Buffer = require('buffer').Buffer, - s = 0, - S = - { PARSER_UNINITIALIZED: s++, - START: s++, - START_BOUNDARY: s++, - HEADER_FIELD_START: s++, - HEADER_FIELD: s++, - HEADER_VALUE_START: s++, - HEADER_VALUE: s++, - HEADER_VALUE_ALMOST_DONE: s++, - HEADERS_ALMOST_DONE: s++, - PART_DATA_START: s++, - PART_DATA: s++, - PART_END: s++, - END: s++ - }, - - f = 1, - F = - { PART_BOUNDARY: f, - LAST_BOUNDARY: f *= 2 - }, - - LF = 10, - CR = 13, - SPACE = 32, - HYPHEN = 45, - COLON = 58, - A = 97, - Z = 122, - - lower = function(c) { - return c | 0x20; - }; - -for (s in S) { - exports[s] = S[s]; -} - -function MultipartParser() { - this.boundary = null; - this.boundaryChars = null; - this.lookbehind = null; - this.state = S.PARSER_UNINITIALIZED; - - this.index = null; - this.flags = 0; -} -exports.MultipartParser = MultipartParser; - -MultipartParser.stateToString = function(stateNumber) { - for (var state in S) { - var number = S[state]; - if (number === stateNumber) return state; - } -}; - -MultipartParser.prototype.initWithBoundary = function(str) { - this.boundary = new Buffer(str.length+4); - this.boundary.write('\r\n--', 0); - this.boundary.write(str, 4); - this.lookbehind = new Buffer(this.boundary.length+8); - this.state = S.START; - - this.boundaryChars = {}; - for (var i = 0; i < this.boundary.length; i++) { - this.boundaryChars[this.boundary[i]] = true; - } -}; - -MultipartParser.prototype.write = function(buffer) { - var self = this, - i = 0, - len = buffer.length, - prevIndex = this.index, - index = this.index, - state = this.state, - flags = this.flags, - lookbehind = this.lookbehind, - boundary = this.boundary, - boundaryChars = this.boundaryChars, - boundaryLength = this.boundary.length, - boundaryEnd = boundaryLength - 1, - bufferLength = buffer.length, - c, - cl, - - mark = function(name) { - self[name+'Mark'] = i; - }, - clear = function(name) { - delete self[name+'Mark']; - }, - callback = function(name, buffer, start, end) { - if (start !== undefined && start === end) { - return; - } - - var callbackSymbol = 'on'+name.substr(0, 1).toUpperCase()+name.substr(1); - if (callbackSymbol in self) { - self[callbackSymbol](buffer, start, end); - } - }, - dataCallback = function(name, clear) { - var markSymbol = name+'Mark'; - if (!(markSymbol in self)) { - return; - } - - if (!clear) { - callback(name, buffer, self[markSymbol], buffer.length); - self[markSymbol] = 0; - } else { - callback(name, buffer, self[markSymbol], i); - delete self[markSymbol]; - } - }; - - for (i = 0; i < len; i++) { - c = buffer[i]; - switch (state) { - case S.PARSER_UNINITIALIZED: - return i; - case S.START: - index = 0; - state = S.START_BOUNDARY; - case S.START_BOUNDARY: - if (index == boundary.length - 2) { - if (c == HYPHEN) { - flags |= F.LAST_BOUNDARY; - } else if (c != CR) { - return i; - } - index++; - break; - } else if (index - 1 == boundary.length - 2) { - if (flags & F.LAST_BOUNDARY && c == HYPHEN){ - callback('end'); - state = S.END; - flags = 0; - } else if (!(flags & F.LAST_BOUNDARY) && c == LF) { - index = 0; - callback('partBegin'); - state = S.HEADER_FIELD_START; - } else { - return i; - } - break; - } - - if (c != boundary[index+2]) { - index = -2; - } - if (c == boundary[index+2]) { - index++; - } - break; - case S.HEADER_FIELD_START: - state = S.HEADER_FIELD; - mark('headerField'); - index = 0; - case S.HEADER_FIELD: - if (c == CR) { - clear('headerField'); - state = S.HEADERS_ALMOST_DONE; - break; - } - - index++; - if (c == HYPHEN) { - break; - } - - if (c == COLON) { - if (index == 1) { - // empty header field - return i; - } - dataCallback('headerField', true); - state = S.HEADER_VALUE_START; - break; - } - - cl = lower(c); - if (cl < A || cl > Z) { - return i; - } - break; - case S.HEADER_VALUE_START: - if (c == SPACE) { - break; - } - - mark('headerValue'); - state = S.HEADER_VALUE; - case S.HEADER_VALUE: - if (c == CR) { - dataCallback('headerValue', true); - callback('headerEnd'); - state = S.HEADER_VALUE_ALMOST_DONE; - } - break; - case S.HEADER_VALUE_ALMOST_DONE: - if (c != LF) { - return i; - } - state = S.HEADER_FIELD_START; - break; - case S.HEADERS_ALMOST_DONE: - if (c != LF) { - return i; - } - - callback('headersEnd'); - state = S.PART_DATA_START; - break; - case S.PART_DATA_START: - state = S.PART_DATA; - mark('partData'); - case S.PART_DATA: - prevIndex = index; - - if (index === 0) { - // boyer-moore derrived algorithm to safely skip non-boundary data - i += boundaryEnd; - while (i < bufferLength && !(buffer[i] in boundaryChars)) { - i += boundaryLength; - } - i -= boundaryEnd; - c = buffer[i]; - } - - if (index < boundary.length) { - if (boundary[index] == c) { - if (index === 0) { - dataCallback('partData', true); - } - index++; - } else { - index = 0; - } - } else if (index == boundary.length) { - index++; - if (c == CR) { - // CR = part boundary - flags |= F.PART_BOUNDARY; - } else if (c == HYPHEN) { - // HYPHEN = end boundary - flags |= F.LAST_BOUNDARY; - } else { - index = 0; - } - } else if (index - 1 == boundary.length) { - if (flags & F.PART_BOUNDARY) { - index = 0; - if (c == LF) { - // unset the PART_BOUNDARY flag - flags &= ~F.PART_BOUNDARY; - callback('partEnd'); - callback('partBegin'); - state = S.HEADER_FIELD_START; - break; - } - } else if (flags & F.LAST_BOUNDARY) { - if (c == HYPHEN) { - callback('partEnd'); - callback('end'); - state = S.END; - flags = 0; - } else { - index = 0; - } - } else { - index = 0; - } - } - - if (index > 0) { - // when matching a possible boundary, keep a lookbehind reference - // in case it turns out to be a false lead - lookbehind[index-1] = c; - } else if (prevIndex > 0) { - // if our boundary turned out to be rubbish, the captured lookbehind - // belongs to partData - callback('partData', lookbehind, 0, prevIndex); - prevIndex = 0; - mark('partData'); - - // reconsider the current character even so it interrupted the sequence - // it could be the beginning of a new sequence - i--; - } - - break; - case S.END: - break; - default: - return i; - } - } - - dataCallback('headerField'); - dataCallback('headerValue'); - dataCallback('partData'); - - this.index = index; - this.state = state; - this.flags = flags; - - return len; -}; - -MultipartParser.prototype.end = function() { - var callback = function(self, name) { - var callbackSymbol = 'on'+name.substr(0, 1).toUpperCase()+name.substr(1); - if (callbackSymbol in self) { - self[callbackSymbol](); - } - }; - if ((this.state == S.HEADER_FIELD_START && this.index === 0) || - (this.state == S.PART_DATA && this.index == this.boundary.length)) { - callback(this, 'partEnd'); - callback(this, 'end'); - } else if (this.state != S.END) { - return new Error('MultipartParser.end(): stream ended unexpectedly: ' + this.explain()); - } -}; - -MultipartParser.prototype.explain = function() { - return 'state = ' + MultipartParser.stateToString(this.state); -}; diff --git a/build/node_modules/formidable/lib/octet_parser.js b/build/node_modules/formidable/lib/octet_parser.js deleted file mode 100644 index 6e8b5515..00000000 --- a/build/node_modules/formidable/lib/octet_parser.js +++ /dev/null @@ -1,20 +0,0 @@ -var EventEmitter = require('events').EventEmitter - , util = require('util'); - -function OctetParser(options){ - if(!(this instanceof OctetParser)) return new OctetParser(options); - EventEmitter.call(this); -} - -util.inherits(OctetParser, EventEmitter); - -exports.OctetParser = OctetParser; - -OctetParser.prototype.write = function(buffer) { - this.emit('data', buffer); - return buffer.length; -}; - -OctetParser.prototype.end = function() { - this.emit('end'); -}; diff --git a/build/node_modules/formidable/lib/querystring_parser.js b/build/node_modules/formidable/lib/querystring_parser.js deleted file mode 100644 index fcaffe0a..00000000 --- a/build/node_modules/formidable/lib/querystring_parser.js +++ /dev/null @@ -1,27 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -// This is a buffering parser, not quite as nice as the multipart one. -// If I find time I'll rewrite this to be fully streaming as well -var querystring = require('querystring'); - -function QuerystringParser(maxKeys) { - this.maxKeys = maxKeys; - this.buffer = ''; -} -exports.QuerystringParser = QuerystringParser; - -QuerystringParser.prototype.write = function(buffer) { - this.buffer += buffer.toString('ascii'); - return buffer.length; -}; - -QuerystringParser.prototype.end = function() { - var fields = querystring.parse(this.buffer, '&', '=', { maxKeys: this.maxKeys }); - for (var field in fields) { - this.onField(field, fields[field]); - } - this.buffer = ''; - - this.onEnd(); -}; - diff --git a/build/node_modules/formidable/node_modules/qs/.editorconfig b/build/node_modules/formidable/node_modules/qs/.editorconfig new file mode 100644 index 00000000..b442a9f9 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/.editorconfig @@ -0,0 +1,33 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 160 + +[test/*] +max_line_length = off + +[LICENSE.md] +indent_size = off + +[*.md] +max_line_length = off + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[LICENSE] +indent_size = 2 +max_line_length = off diff --git a/build/node_modules/formidable/node_modules/qs/.eslintignore b/build/node_modules/formidable/node_modules/qs/.eslintignore new file mode 100644 index 00000000..1521c8b7 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/build/node_modules/formidable/node_modules/qs/.eslintrc b/build/node_modules/formidable/node_modules/qs/.eslintrc new file mode 100644 index 00000000..e3bde898 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": 0, + "consistent-return": 1, + "func-name-matching": 0, + "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], + "indent": [2, 4], + "max-lines-per-function": [2, { "max": 150 }], + "max-params": [2, 14], + "max-statements": [2, 52], + "multiline-comment-style": 0, + "no-continue": 1, + "no-magic-numbers": 0, + "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], + "operator-linebreak": [2, "before"], + } +} diff --git a/build/node_modules/formidable/node_modules/qs/.github/FUNDING.yml b/build/node_modules/formidable/node_modules/qs/.github/FUNDING.yml new file mode 100644 index 00000000..0355f4f5 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/qs +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/build/node_modules/formidable/node_modules/qs/.github/workflows/rebase.yml b/build/node_modules/formidable/node_modules/qs/.github/workflows/rebase.yml new file mode 100644 index 00000000..436cb79d --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/.github/workflows/rebase.yml @@ -0,0 +1,15 @@ +name: Automatic Rebase + +on: [pull_request] + +jobs: + _: + name: "Automatic Rebase" + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - uses: ljharb/rebase@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/node_modules/formidable/node_modules/qs/CHANGELOG.md b/build/node_modules/formidable/node_modules/qs/CHANGELOG.md new file mode 100644 index 00000000..f09f6942 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/CHANGELOG.md @@ -0,0 +1,339 @@ +## **6.9.3** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.9.2** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [meta] ignore eclint transitive audit warning +- [meta] fix indentation in package.json +- [meta] add tidelift marketing copy +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `has-symbols`, `tape`, `mkdirp`, `iconv-lite` +- [actions] add automatic rebasing / merge commit blocking + +## **6.9.1** +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [Fix] `parse`: with comma true, do not split non-string values (#334) +- [meta] add `funding` field +- [Dev Deps] update `eslint`, `@ljharb/eslint-config` +- [Tests] use shared travis-ci config + +## **6.9.0** +- [New] `parse`/`stringify`: Pass extra key/value argument to `decoder` (#333) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `evalmd` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] add `posttest` using `npx aud` to run `npm audit` without a lockfile +- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16` +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray + +## **6.8.2** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.8.1** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [fix] `parse`: with comma true, do not split non-string values (#334) +- [meta] add tidelift marketing copy +- [meta] add `funding` field +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `safe-publish-latest`, `evalmd`, `has-symbols`, `iconv-lite`, `mkdirp`, `object-inspect` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] use shared travis-ci configs +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray +- [actions] add automatic rebasing / merge commit blocking + +## **6.8.0** +- [New] add `depth=false` to preserve the original key; [Fix] `depth=0` should preserve the original key (#326) +- [New] [Fix] stringify symbols and bigints +- [Fix] ensure node 0.12 can stringify Symbols +- [Fix] fix for an impossible situation: when the formatter is called with a non-string value +- [Refactor] `formats`: tiny bit of cleanup. +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `safe-publish-latest`, `iconv-lite`, `tape` +- [Tests] add tests for `depth=0` and `depth=false` behavior, both current and intuitive/intended (#326) +- [Tests] use `eclint` instead of `editorconfig-tools` +- [docs] readme: add security note +- [meta] add github sponsorship +- [meta] add FUNDING.yml +- [meta] Clean up license text so it’s properly detected as BSD-3-Clause + +## **6.7.2** +- [Fix] proper comma parsing of URL-encoded commas (#361) +- [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336) + +## **6.7.1** +- [Fix] `parse`: Fix parsing array from object with `comma` true (#359) +- [Fix] `parse`: with comma true, handle field that holds an array of arrays (#335) +- [fix] `parse`: with comma true, do not split non-string values (#334) +- [Fix] `parse`: throw a TypeError instead of an Error for bad charset (#349) +- [Fix] fix for an impossible situation: when the formatter is called with a non-string value +- [Refactor] `formats`: tiny bit of cleanup. +- readme: add security note +- [meta] add tidelift marketing copy +- [meta] add `funding` field +- [meta] add FUNDING.yml +- [meta] Clean up license text so it’s properly detected as BSD-3-Clause +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `safe-publish-latest`, `evalmd`, `iconv-lite`, `mkdirp`, `object-inspect`, `browserify` +- [Tests] `parse`: add passing `arrayFormat` tests +- [Tests] use shared travis-ci configs +- [Tests] `Buffer.from` in node v5.0-v5.9 and v4.0-v4.4 requires a TypedArray +- [Tests] add tests for `depth=0` and `depth=false` behavior, both current and intuitive/intended +- [Tests] use `eclint` instead of `editorconfig-tools` +- [actions] add automatic rebasing / merge commit blocking + +## **6.7.0** +- [New] `stringify`/`parse`: add `comma` as an `arrayFormat` option (#276, #219) +- [Fix] correctly parse nested arrays (#212) +- [Fix] `utils.merge`: avoid a crash with a null target and a truthy non-array source, also with an array source +- [Robustness] `stringify`: cache `Object.prototype.hasOwnProperty` +- [Refactor] `utils`: `isBuffer`: small tweak; add tests +- [Refactor] use cached `Array.isArray` +- [Refactor] `parse`/`stringify`: make a function to normalize the options +- [Refactor] `utils`: reduce observable [[Get]]s +- [Refactor] `stringify`/`utils`: cache `Array.isArray` +- [Tests] always use `String(x)` over `x.toString()` +- [Tests] fix Buffer tests to work in node < 4.5 and node < 5.10 +- [Tests] temporarily allow coverage to fail + +## **6.6.0** +- [New] Add support for iso-8859-1, utf8 "sentinel" and numeric entities (#268) +- [New] move two-value combine to a `utils` function (#189) +- [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) +- [Fix] when `parseArrays` is false, properly handle keys ending in `[]` (#260) +- [Fix] `stringify`: do not crash in an obscure combo of `interpretNumericEntities`, a bad custom `decoder`, & `iso-8859-1` +- [Fix] `utils`: `merge`: fix crash when `source` is a truthy primitive & no options are provided +- [refactor] `stringify`: Avoid arr = arr.concat(...), push to the existing instance (#269) +- [Refactor] `parse`: only need to reassign the var once +- [Refactor] `parse`/`stringify`: clean up `charset` options checking; fix defaults +- [Refactor] add missing defaults +- [Refactor] `parse`: one less `concat` call +- [Refactor] `utils`: `compactQueue`: make it explicitly side-effecting +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`, `iconv-lite`, `safe-publish-latest`, `tape` +- [Tests] up to `node` `v10.10`, `v9.11`, `v8.12`, `v6.14`, `v4.9`; pin included builds to LTS + +## **6.5.2** +- [Fix] use `safer-buffer` instead of `Buffer` constructor +- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) +- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` + +## **6.5.1** +- [Fix] Fix parsing & compacting very deep objects (#224) +- [Refactor] name utils functions +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` +- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node +- [Tests] Use precise dist for Node.js 0.6 runtime (#225) +- [Tests] make 0.6 required, now that it’s passing +- [Tests] on `node` `v8.2`; fix npm on node 0.6 + +## **6.5.0** +- [New] add `utils.assign` +- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) +- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) +- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) +- [Fix] do not mutate `options` argument (#207) +- [Refactor] `parse`: cache index to reuse in else statement (#182) +- [Docs] add various badges to readme (#208) +- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` +- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 +- [Tests] add `editorconfig-tools` + +## **6.4.0** +- [New] `qs.stringify`: add `encodeValuesOnly` option +- [Fix] follow `allowPrototypes` option during merge (#201, #201) +- [Fix] support keys starting with brackets (#202, #200) +- [Fix] chmod a-x +- [Dev Deps] update `eslint` +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds +- [eslint] reduce warnings + +## **6.3.2** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Dev Deps] update `eslint` +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.3.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` +- [Tests] on all node minors; improve test matrix +- [Docs] document stringify option `allowDots` (#195) +- [Docs] add empty object and array values example (#195) +- [Docs] Fix minor inconsistency/typo (#192) +- [Docs] document stringify option `sort` (#191) +- [Refactor] `stringify`: throw faster with an invalid encoder +- [Refactor] remove unnecessary escapes (#184) +- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) + +## **6.3.0** +- [New] Add support for RFC 1738 (#174, #173) +- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) +- [Fix] ensure `utils.merge` handles merging two arrays +- [Refactor] only constructors should be capitalized +- [Refactor] capitalized var names are for constructors only +- [Refactor] avoid using a sparse array +- [Robustness] `formats`: cache `String#replace` +- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` +- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix +- [Tests] flesh out arrayLimit/arrayFormat tests (#107) +- [Tests] skip Object.create tests when null objects are not available +- [Tests] Turn on eslint for test files (#175) + +## **6.2.3** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.2.2** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## **6.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values +- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` +- [Tests] remove `parallelshell` since it does not reliably report failures +- [Tests] up to `node` `v6.3`, `v5.12` +- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` + +## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) +- [New] pass Buffers to the encoder/decoder directly (#161) +- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) +- [Fix] fix compacting of nested sparse arrays (#150) + +## **6.1.2 +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.1.1** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties + +## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) +- [New] allowDots option for `stringify` (#151) +- [Fix] "sort" option should work at a depth of 3 or more (#151) +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## **6.0.4** +- [Fix] follow `allowPrototypes` option during merge (#201, #200) +- [Fix] chmod a-x +- [Fix] support keys starting with brackets (#202, #200) +- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds + +## **6.0.3** +- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties +- [Fix] Restore `dist` directory; will be removed in v7 (#148) + +## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) +- Revert ES6 requirement and restore support for node down to v0.8. + +## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) +- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json + +## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) +- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 + +## **5.2.1** +- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values + +## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) +- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string + +## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) +- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional +- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify + +## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) +- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false +- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm + +## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) +- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional + +## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) +- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" + +## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) +- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties +- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost +- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing +- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object +- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option +- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. +- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 +- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 +- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign +- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute + +## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) +- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function + +## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) +- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option + +## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) +- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 +- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader + +## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) +- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object + +## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) +- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". + +## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) +- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 + +## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) +- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? +- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 +- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 + +## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) +- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number + +## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) +- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array +- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x + +## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) +- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value +- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty +- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? + +## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) +- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 +- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects + +## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) +- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present +- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays +- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge +- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? + +## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) +- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter + +## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) +- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? +- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit +- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 + +## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) +- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values + +## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) +- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters +- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block + +## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) +- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument +- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed + +## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) +- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted +- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null +- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README + +## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) +- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/build/node_modules/formidable/node_modules/qs/LICENSE.md b/build/node_modules/formidable/node_modules/qs/LICENSE.md new file mode 100644 index 00000000..fecf6b69 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/LICENSE.md @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/formidable/node_modules/qs/README.md b/build/node_modules/formidable/node_modules/qs/README.md new file mode 100644 index 00000000..84f2534e --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/README.md @@ -0,0 +1,604 @@ +# qs [![Version Badge][2]][1] + +[![Build Status][3]][4] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +A querystring parsing and stringifying library with some added security. + +Lead Maintainer: [Jordan Harband](https://github.com/ljharb) + +The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). + +## Usage + +```javascript +var qs = require('qs'); +var assert = require('assert'); + +var obj = qs.parse('a=c'); +assert.deepEqual(obj, { a: 'c' }); + +var str = qs.stringify(obj); +assert.equal(str, 'a=c'); +``` + +### Parsing Objects + +[](#preventEval) +```javascript +qs.parse(string, [options]); +``` + +**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. +For example, the string `'foo[bar]=baz'` converts to: + +```javascript +assert.deepEqual(qs.parse('foo[bar]=baz'), { + foo: { + bar: 'baz' + } +}); +``` + +When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: + +```javascript +var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); +assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); +``` + +By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. + +```javascript +var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); +assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); +``` + +URI encoded strings work too: + +```javascript +assert.deepEqual(qs.parse('a%5Bb%5D=c'), { + a: { b: 'c' } +}); +``` + +You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: + +```javascript +assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { + foo: { + bar: { + baz: 'foobarbaz' + } + } +}); +``` + +By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like +`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: + +```javascript +var expected = { + a: { + b: { + c: { + d: { + e: { + f: { + '[g][h][i]': 'j' + } + } + } + } + } + } +}; +var string = 'a[b][c][d][e][f][g][h][i]=j'; +assert.deepEqual(qs.parse(string), expected); +``` + +This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: + +```javascript +var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); +assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); +``` + +The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. + +For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: + +```javascript +var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); +assert.deepEqual(limited, { a: 'b' }); +``` + +To bypass the leading question mark, use `ignoreQueryPrefix`: + +```javascript +var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); +assert.deepEqual(prefixed, { a: 'b', c: 'd' }); +``` + +An optional delimiter can also be passed: + +```javascript +var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); +assert.deepEqual(delimited, { a: 'b', c: 'd' }); +``` + +Delimiters can be a regular expression too: + +```javascript +var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); +assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); +``` + +Option `allowDots` can be used to enable dot notation: + +```javascript +var withDots = qs.parse('a.b=c', { allowDots: true }); +assert.deepEqual(withDots, { a: { b: 'c' } }); +``` + +If you have to deal with legacy browsers or services, there's +also support for decoding percent-encoded octets as iso-8859-1: + +```javascript +var oldCharset = qs.parse('a=%A7', { charset: 'iso-8859-1' }); +assert.deepEqual(oldCharset, { a: '§' }); +``` + +Some services add an initial `utf8=✓` value to forms so that old +Internet Explorer versions are more likely to submit the form as +utf-8. Additionally, the server can check the value against wrong +encodings of the checkmark character and detect that a query string +or `application/x-www-form-urlencoded` body was *not* sent as +utf-8, eg. if the form had an `accept-charset` parameter or the +containing page had a different character set. + +**qs** supports this mechanism via the `charsetSentinel` option. +If specified, the `utf8` parameter will be omitted from the +returned object. It will be used to switch to `iso-8859-1`/`utf-8` +mode depending on how the checkmark is encoded. + +**Important**: When you specify both the `charset` option and the +`charsetSentinel` option, the `charset` will be overridden when +the request contains a `utf8` parameter from which the actual +charset can be deduced. In that sense the `charset` will behave +as the default charset rather than the authoritative charset. + +```javascript +var detectedAsUtf8 = qs.parse('utf8=%E2%9C%93&a=%C3%B8', { + charset: 'iso-8859-1', + charsetSentinel: true +}); +assert.deepEqual(detectedAsUtf8, { a: 'ø' }); + +// Browsers encode the checkmark as ✓ when submitting as iso-8859-1: +var detectedAsIso8859_1 = qs.parse('utf8=%26%2310003%3B&a=%F8', { + charset: 'utf-8', + charsetSentinel: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: 'ø' }); +``` + +If you want to decode the `&#...;` syntax to the actual character, +you can specify the `interpretNumericEntities` option as well: + +```javascript +var detectedAsIso8859_1 = qs.parse('a=%26%239786%3B', { + charset: 'iso-8859-1', + interpretNumericEntities: true +}); +assert.deepEqual(detectedAsIso8859_1, { a: '☺' }); +``` + +It also works when the charset has been detected in `charsetSentinel` +mode. + +### Parsing Arrays + +**qs** can also parse arrays using a similar `[]` notation: + +```javascript +var withArray = qs.parse('a[]=b&a[]=c'); +assert.deepEqual(withArray, { a: ['b', 'c'] }); +``` + +You may specify an index as well: + +```javascript +var withIndexes = qs.parse('a[1]=c&a[0]=b'); +assert.deepEqual(withIndexes, { a: ['b', 'c'] }); +``` + +Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number +to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving +their order: + +```javascript +var noSparse = qs.parse('a[1]=b&a[15]=c'); +assert.deepEqual(noSparse, { a: ['b', 'c'] }); +``` + +Note that an empty string is also a value, and will be preserved: + +```javascript +var withEmptyString = qs.parse('a[]=&a[]=b'); +assert.deepEqual(withEmptyString, { a: ['', 'b'] }); + +var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); +assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); +``` + +**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will +instead be converted to an object with the index as the key. This is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array. + +```javascript +var withMaxIndex = qs.parse('a[100]=b'); +assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); +``` + +This limit can be overridden by passing an `arrayLimit` option: + +```javascript +var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); +assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); +``` + +To disable array parsing entirely, set `parseArrays` to `false`. + +```javascript +var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); +assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); +``` + +If you mix notations, **qs** will merge the two items into an object: + +```javascript +var mixedNotation = qs.parse('a[0]=b&a[b]=c'); +assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); +``` + +You can also create arrays of objects: + +```javascript +var arraysOfObjects = qs.parse('a[][b]=c'); +assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); +``` + +Some people use comma to join array, **qs** can parse it: +```javascript +var arraysOfObjects = qs.parse('a=b,c', { comma: true }) +assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] }) +``` +(_this cannot convert nested objects, such as `a={b:1},{c:d}`_) + +### Stringifying + +[](#preventEval) +```javascript +qs.stringify(object, [options]); +``` + +When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: + +```javascript +assert.equal(qs.stringify({ a: 'b' }), 'a=b'); +assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); +``` + +This encoding can be disabled by setting the `encode` option to `false`: + +```javascript +var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); +assert.equal(unencoded, 'a[b]=c'); +``` + +Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: +```javascript +var encodedValues = qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } +); +assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); +``` + +This encoding can also be replaced by a custom encoding method set as `encoder` option: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { + // Passed in values `a`, `b`, `c` + return // Return encoded string +}}) +``` + +_(Note: the `encoder` option does not apply if `encode` is `false`)_ + +Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str) { + // Passed in values `x`, `z` + return // Return decoded string +}}) +``` + +You can encode keys and values using different logic by using the type argument provided to the encoder: + +```javascript +var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return // Encoded key + } else if (type === 'value') { + return // Encoded value + } +}}) +``` + +The type argument is also provided to the decoder: + +```javascript +var decoded = qs.parse('x=z', { decoder: function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return // Decoded key + } else if (type === 'value') { + return // Decoded value + } +}}) +``` + +Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. + +When arrays are stringified, by default they are given explicit indices: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }); +// 'a[0]=b&a[1]=c&a[2]=d' +``` + +You may override this by setting the `indices` option to `false`: + +```javascript +qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); +// 'a=b&a=c&a=d' +``` + +You may use the `arrayFormat` option to specify the format of the output array: + +```javascript +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) +// 'a[0]=b&a[1]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) +// 'a[]=b&a[]=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) +// 'a=b&a=c' +qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' }) +// 'a=b,c' +``` + +When objects are stringified, by default they use bracket notation: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); +// 'a[b][c]=d&a[b][e]=f' +``` + +You may override this to use dot notation by setting the `allowDots` option to `true`: + +```javascript +qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); +// 'a.b.c=d&a.b.e=f' +``` + +Empty strings and null values will omit the value, but the equals sign (=) remains in place: + +```javascript +assert.equal(qs.stringify({ a: '' }), 'a='); +``` + +Key with no values (such as an empty object or array) will return nothing: + +```javascript +assert.equal(qs.stringify({ a: [] }), ''); +assert.equal(qs.stringify({ a: {} }), ''); +assert.equal(qs.stringify({ a: [{}] }), ''); +assert.equal(qs.stringify({ a: { b: []} }), ''); +assert.equal(qs.stringify({ a: { b: {}} }), ''); +``` + +Properties that are set to `undefined` will be omitted entirely: + +```javascript +assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); +``` + +The query string may optionally be prepended with a question mark: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); +``` + +The delimiter may be overridden with stringify as well: + +```javascript +assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); +``` + +If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: + +```javascript +var date = new Date(7); +assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); +assert.equal( + qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), + 'a=7' +); +``` + +You may use the `sort` option to affect the order of parameter keys: + +```javascript +function alphabeticalSort(a, b) { + return a.localeCompare(b); +} +assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); +``` + +Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. +If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you +pass an array, it will be used to select properties and array indices for stringification: + +```javascript +function filterFunc(prefix, value) { + if (prefix == 'b') { + // Return an `undefined` value to omit a property. + return; + } + if (prefix == 'e[f]') { + return value.getTime(); + } + if (prefix == 'e[g][0]') { + return value * 2; + } + return value; +} +qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); +// 'a=b&c=d&e[f]=123&e[g][0]=4' +qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); +// 'a=b&e=f' +qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); +// 'a[0]=b&a[2]=d' +``` + +### Handling of `null` values + +By default, `null` values are treated like empty strings: + +```javascript +var withNull = qs.stringify({ a: null, b: '' }); +assert.equal(withNull, 'a=&b='); +``` + +Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. + +```javascript +var equalsInsensitive = qs.parse('a&b='); +assert.deepEqual(equalsInsensitive, { a: '', b: '' }); +``` + +To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` +values have no `=` sign: + +```javascript +var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); +assert.equal(strictNull, 'a&b='); +``` + +To parse values without `=` back to `null` use the `strictNullHandling` flag: + +```javascript +var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); +assert.deepEqual(parsedStrictNull, { a: null, b: '' }); +``` + +To completely skip rendering keys with `null` values, use the `skipNulls` flag: + +```javascript +var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); +assert.equal(nullsSkipped, 'a=b'); +``` + +If you're communicating with legacy systems, you can switch to `iso-8859-1` +using the `charset` option: + +```javascript +var iso = qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }); +assert.equal(iso, '%E6=%E6'); +``` + +Characters that don't exist in `iso-8859-1` will be converted to numeric +entities, similar to what browsers do: + +```javascript +var numeric = qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }); +assert.equal(numeric, 'a=%26%239786%3B'); +``` + +You can use the `charsetSentinel` option to announce the character by +including an `utf8=✓` parameter with the proper encoding if the checkmark, +similar to what Ruby on Rails and others do when submitting forms. + +```javascript +var sentinel = qs.stringify({ a: '☺' }, { charsetSentinel: true }); +assert.equal(sentinel, 'utf8=%E2%9C%93&a=%E2%98%BA'); + +var isoSentinel = qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }); +assert.equal(isoSentinel, 'utf8=%26%2310003%3B&a=%E6'); +``` + +### Dealing with special character sets + +By default the encoding and decoding of characters is done in `utf-8`, +and `iso-8859-1` support is also built in via the `charset` parameter. + +If you wish to encode querystrings to a different character set (i.e. +[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the +[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: + +```javascript +var encoder = require('qs-iconv/encoder')('shift_jis'); +var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); +assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); +``` + +This also works for decoding of query strings: + +```javascript +var decoder = require('qs-iconv/decoder')('shift_jis'); +var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); +assert.deepEqual(obj, { a: 'こんにちは!' }); +``` + +### RFC 3986 and RFC 1738 space encoding + +RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. +In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. + +``` +assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); +assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); +``` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +## qs for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of qs and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-qs?utm_source=npm-qs&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +[1]: https://npmjs.org/package/qs +[2]: http://versionbadg.es/ljharb/qs.svg +[3]: https://api.travis-ci.org/ljharb/qs.svg +[4]: https://travis-ci.org/ljharb/qs +[5]: https://david-dm.org/ljharb/qs.svg +[6]: https://david-dm.org/ljharb/qs +[7]: https://david-dm.org/ljharb/qs/dev-status.svg +[8]: https://david-dm.org/ljharb/qs?type=dev +[9]: https://ci.testling.com/ljharb/qs.png +[10]: https://ci.testling.com/ljharb/qs +[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: http://img.shields.io/npm/l/qs.svg +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/qs.svg +[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/build/node_modules/formidable/node_modules/qs/dist/qs.js b/build/node_modules/formidable/node_modules/qs/dist/qs.js new file mode 100644 index 00000000..752629db --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/dist/qs.js @@ -0,0 +1,832 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1) { + return val.split(','); + } + + return val; +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = maybeMap( + parseArrayValue(part.slice(pos + 1), options), + function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + } + ); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; // eslint-disable-line no-param-reassign + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + // eslint-disable-next-line no-implicit-coercion, no-extra-parens + depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; + +},{"./utils":5}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' + || typeof v === 'number' + || typeof v === 'boolean' + || typeof v === 'symbol' + || typeof v === 'bigint'; +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key') : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key'); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value'))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + /* eslint no-param-reassign: 0 */ + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = str; + if (typeof str === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; + +},{}]},{},[2])(2) +}); diff --git a/build/node_modules/formidable/node_modules/qs/lib/formats.js b/build/node_modules/formidable/node_modules/qs/lib/formats.js new file mode 100644 index 00000000..a4ecca78 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/lib/formats.js @@ -0,0 +1,26 @@ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; + +var util = require('./utils'); + +var Format = { + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; + +module.exports = util.assign( + { + 'default': Format.RFC3986, + formatters: { + RFC1738: function (value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function (value) { + return String(value); + } + } + }, + Format +); diff --git a/build/node_modules/formidable/node_modules/qs/lib/index.js b/build/node_modules/formidable/node_modules/qs/lib/index.js new file mode 100644 index 00000000..0d6a97dc --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/lib/index.js @@ -0,0 +1,11 @@ +'use strict'; + +var stringify = require('./stringify'); +var parse = require('./parse'); +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; diff --git a/build/node_modules/formidable/node_modules/qs/lib/parse.js b/build/node_modules/formidable/node_modules/qs/lib/parse.js new file mode 100644 index 00000000..49d5c042 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/lib/parse.js @@ -0,0 +1,268 @@ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: '&', + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1000, + parseArrays: true, + plainObjects: false, + strictNullHandling: false +}; + +var interpretNumericEntities = function (str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +var parseArrayValue = function (val, options) { + if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { + return val.split(','); + } + + return val; +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +}; + +// This is what browsers will submit when the ✓ character occurs in an +// application/x-www-form-urlencoded body and the encoding of the page containing +// the form is iso-8859-1, or when the submitted form has an accept-charset +// attribute of iso-8859-1. Presumably also with other charsets that do not contain +// the ✓ character, such as us-ascii. +var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') + +// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. +var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; // Keep track of where the utf8 sentinel was found + var i; + + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + skipIndex = i; + i = parts.length; // The eslint settings do not allow break; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = maybeMap( + parseArrayValue(part.slice(pos + 1), options), + function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + } + ); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function (chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === '') { + obj = { 0: leaf }; + } else if ( + !isNaN(index) + && root !== cleanRoot + && String(index) === cleanRoot + && index >= 0 + && (options.parseArrays && index <= options.arrayLimit) + ) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; // eslint-disable-line no-param-reassign + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + // Transform dot notation to bracket notation + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + + // The regex chunks + + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + + // Get the parent + + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + + // Stash the parent if it exists + + var keys = []; + if (parent) { + // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + // Loop through children appending to the array until we hit depth + + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + + // If there's a remainder, just add whatever is left + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + // eslint-disable-next-line no-implicit-coercion, no-extra-parens + depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + + // Iterate over the keys and setup the new object + + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + return utils.compact(obj); +}; diff --git a/build/node_modules/formidable/node_modules/qs/lib/stringify.js b/build/node_modules/formidable/node_modules/qs/lib/stringify.js new file mode 100644 index 00000000..72ded14a --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/lib/stringify.js @@ -0,0 +1,279 @@ +'use strict'; + +var utils = require('./utils'); +var formats = require('./formats'); +var has = Object.prototype.hasOwnProperty; + +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; + +var isArray = Array.isArray; +var push = Array.prototype.push; +var pushToArray = function (arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; + +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + // deprecated + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' + || typeof v === 'number' + || typeof v === 'boolean' + || typeof v === 'symbol' + || typeof v === 'bigint'; +}; + +var stringify = function stringify( + object, + prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset +) { + var obj = object; + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = obj.join(','); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key') : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key'); + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value'))]; + } + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (skipNulls && obj[key] === null) { + continue; + } + + if (isArray(obj)) { + pushToArray(values, stringify( + obj[key], + typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix, + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } else { + pushToArray(values, stringify( + obj[key], + prefix + (allowDots ? '.' + key : '[' + key + ']'), + generateArrayPrefix, + strictNullHandling, + skipNulls, + encoder, + filter, + sort, + allowDots, + serializeDate, + formatter, + encodeValuesOnly, + charset + )); + } + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + + var filter = defaults.filter; + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (typeof obj !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify( + obj[key], + key, + generateArrayPrefix, + options.strictNullHandling, + options.skipNulls, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.formatter, + options.encodeValuesOnly, + options.charset + )); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark + prefix += 'utf8=%26%2310003%3B&'; + } else { + // encodeURIComponent('✓') + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; diff --git a/build/node_modules/formidable/node_modules/qs/lib/utils.js b/build/node_modules/formidable/node_modules/qs/lib/utils.js new file mode 100644 index 00000000..bb972417 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/lib/utils.js @@ -0,0 +1,236 @@ +'use strict'; + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = (function () { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}()); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + /* eslint no-param-reassign: 0 */ + if (!source) { + return target; + } + + if (typeof source !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === 'object') { + if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || typeof target !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function (str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + if (charset === 'iso-8859-1') { + // unescape never throws, no try...catch needed: + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + // utf-8 + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset) { + // This code was originally written by Brian White (mscdex) for the io.js core querystring library. + // It has been adapted here for stricter adherence to RFC 3986 + if (str.length === 0) { + return str; + } + + var string = str; + if (typeof str === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if ( + c === 0x2D // - + || c === 0x2E // . + || c === 0x5F // _ + || c === 0x7E // ~ + || (c >= 0x30 && c <= 0x39) // 0-9 + || (c >= 0x41 && c <= 0x5A) // a-z + || (c >= 0x61 && c <= 0x7A) // A-Z + ) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); + continue; + } + + i += 1; + c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + out += hexTable[0xF0 | (c >> 18)] + + hexTable[0x80 | ((c >> 12) & 0x3F)] + + hexTable[0x80 | ((c >> 6) & 0x3F)] + + hexTable[0x80 | (c & 0x3F)]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ obj: { o: value }, prop: 'o' }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj: obj, prop: key }); + refs.push(val); + } + } + } + + compactQueue(queue); + + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + merge: merge +}; diff --git a/build/node_modules/formidable/node_modules/qs/package.json b/build/node_modules/formidable/node_modules/qs/package.json new file mode 100644 index 00000000..cf0aea46 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/package.json @@ -0,0 +1,97 @@ +{ + "_from": "qs@6.9.3", + "_id": "qs@6.9.3", + "_inBundle": false, + "_integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "_location": "/formidable/qs", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "qs@6.9.3", + "name": "qs", + "escapedName": "qs", + "rawSpec": "6.9.3", + "saveSpec": null, + "fetchSpec": "6.9.3" + }, + "_requiredBy": [ + "/formidable" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/qs/-/qs-6.9.3.tgz", + "_shasum": "bfadcd296c2d549f1dffa560619132c977f5008e", + "_spec": "qs@6.9.3", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/formidable", + "bugs": { + "url": "https://github.com/ljharb/qs/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "dependencies": {}, + "deprecated": false, + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "devDependencies": { + "@ljharb/eslint-config": "^16.0.0", + "browserify": "^16.5.0", + "covert": "^1.1.1", + "eclint": "^2.8.1", + "eslint": "^6.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "iconv-lite": "^0.5.1", + "mkdirp": "^0.5.4", + "object-inspect": "^1.7.0", + "qs-iconv": "^1.0.4", + "safe-publish-latest": "^1.1.4", + "safer-buffer": "^2.1.2", + "tape": "^5.0.0-next.5" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "greenkeeper": { + "ignore": [ + "iconv-lite", + "mkdirp" + ] + }, + "homepage": "https://github.com/ljharb/qs", + "keywords": [ + "querystring", + "qs", + "query", + "url", + "parse", + "stringify" + ], + "license": "BSD-3-Clause", + "main": "lib/index.js", + "name": "qs", + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/qs.git" + }, + "scripts": { + "coverage": "covert test", + "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", + "lint": "eslint lib/*.js test/*.js", + "postlint": "eclint check * lib/* test/*", + "posttest": "npx aud --production", + "prepublish": "safe-publish-latest && npm run dist", + "pretest": "npm run --silent readme && npm run --silent lint", + "readme": "evalmd README.md", + "test": "npm run --silent coverage", + "tests-only": "node test" + }, + "version": "6.9.3" +} diff --git a/build/node_modules/formidable/node_modules/qs/test/.eslintrc b/build/node_modules/formidable/node_modules/qs/test/.eslintrc new file mode 100644 index 00000000..8ab8536a --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/test/.eslintrc @@ -0,0 +1,18 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "consistent-return": 2, + "function-paren-newline": 0, + "max-lines": 0, + "max-lines-per-function": 0, + "max-nested-callbacks": [2, 3], + "max-statements": 0, + "no-buffer-constructor": 0, + "no-extend-native": 0, + "no-magic-numbers": 0, + "no-throw-literal": 0, + "object-curly-newline": 0, + "sort-keys": 0, + } +} diff --git a/build/node_modules/formidable/node_modules/qs/test/index.js b/build/node_modules/formidable/node_modules/qs/test/index.js new file mode 100644 index 00000000..5e6bc8fb --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/test/index.js @@ -0,0 +1,7 @@ +'use strict'; + +require('./parse'); + +require('./stringify'); + +require('./utils'); diff --git a/build/node_modules/formidable/node_modules/qs/test/parse.js b/build/node_modules/formidable/node_modules/qs/test/parse.js new file mode 100644 index 00000000..b6ec1b72 --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/test/parse.js @@ -0,0 +1,772 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; + +test('parse()', function (t) { + t.test('parses a simple string', function (st) { + st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); + st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); + st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); + st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); + st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); + st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); + st.deepEqual(qs.parse('foo'), { foo: '' }); + st.deepEqual(qs.parse('foo='), { foo: '' }); + st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); + st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); + st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); + st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); + st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); + st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); + st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); + st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { + cht: 'p3', + chd: 't:60,40', + chs: '250x100', + chl: 'Hello|World' + }); + st.end(); + }); + + t.test('arrayFormat: brackets allows only explicit arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'brackets' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'brackets' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: indices allows only indexed arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'indices' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'indices' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: comma allows only comma-separated arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'comma' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'comma' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('arrayFormat: repeat allows only repeated values', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b,c', { arrayFormat: 'repeat' }), { a: 'b,c' }); + st.deepEqual(qs.parse('a=b&a=c', { arrayFormat: 'repeat' }), { a: ['b', 'c'] }); + st.end(); + }); + + t.test('allows enabling dot notation', function (st) { + st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); + st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); + t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); + t.deepEqual( + qs.parse('a[b][c][d][e][f][g][h]=i'), + { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, + 'defaults to a depth of 5' + ); + + t.test('only parses one level when depth = 1', function (st) { + st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); + st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); + st.end(); + }); + + t.test('uses original key when depth = 0', function (st) { + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: 0 }), { 'a[0]': 'b', 'a[1]': 'c' }); + st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: 0 }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' }); + st.end(); + }); + + t.test('uses original key when depth = false', function (st) { + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { depth: false }), { 'a[0]': 'b', 'a[1]': 'c' }); + st.deepEqual(qs.parse('a[0][0]=b&a[0][1]=c&a[1]=d&e=2', { depth: false }), { 'a[0][0]': 'b', 'a[0][1]': 'c', 'a[1]': 'd', e: '2' }); + st.end(); + }); + + t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); + + t.test('parses an explicit array', function (st) { + st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); + st.end(); + }); + + t.test('parses a mix of simple and explicit arrays', function (st) { + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); + + st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); + + st.end(); + }); + + t.test('parses a nested array', function (st) { + st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); + st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); + st.end(); + }); + + t.test('allows to specify array indices', function (st) { + st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); + st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); + st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); + st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); + st.end(); + }); + + t.test('limits specific array indices to arrayLimit', function (st) { + st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); + st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); + st.end(); + }); + + t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); + + t.test('supports encoded = signs', function (st) { + st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); + st.end(); + }); + + t.test('is ok with url encoded strings', function (st) { + st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); + st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); + st.end(); + }); + + t.test('allows brackets in the value', function (st) { + st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); + st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); + st.end(); + }); + + t.test('allows empty values', function (st) { + st.deepEqual(qs.parse(''), {}); + st.deepEqual(qs.parse(null), {}); + st.deepEqual(qs.parse(undefined), {}); + st.end(); + }); + + t.test('transforms arrays to objects', function (st) { + st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); + st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); + st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); + st.end(); + }); + + t.test('transforms arrays to objects (dot notation)', function (st) { + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); + st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); + st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); + st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); + st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); + st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); + st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); + st.end(); + }); + + t.test('correctly prunes undefined values when converting an array to an object', function (st) { + st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); + st.end(); + }); + + t.test('supports malformed uri characters', function (st) { + st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); + st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); + st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); + st.end(); + }); + + t.test('doesn\'t produce empty keys', function (st) { + st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); + st.end(); + }); + + t.test('cannot access Object prototype', function (st) { + qs.parse('constructor[prototype][bad]=bad'); + qs.parse('bad[constructor][prototype][bad]=bad'); + st.equal(typeof Object.prototype.bad, 'undefined'); + st.end(); + }); + + t.test('parses arrays of objects', function (st) { + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); + st.end(); + }); + + t.test('allows for empty strings in arrays', function (st) { + st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); + + st.deepEqual( + qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 20 + array indices: null then empty string works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', null, 'c', ''] }, + 'with arrayLimit 0 + array brackets: null then empty string works' + ); + + st.deepEqual( + qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 20 + array indices: empty string then null works' + ); + st.deepEqual( + qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), + { a: ['b', '', 'c', null] }, + 'with arrayLimit 0 + array brackets: empty string then null works' + ); + + st.deepEqual( + qs.parse('a[]=&a[]=b&a[]=c'), + { a: ['', 'b', 'c'] }, + 'array brackets: empty strings work' + ); + st.end(); + }); + + t.test('compacts sparse arrays', function (st) { + st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); + st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); + st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); + st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); + st.end(); + }); + + t.test('parses semi-parsed strings', function (st) { + st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); + st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); + st.end(); + }); + + t.test('parses buffers correctly', function (st) { + var b = SaferBuffer.from('test'); + st.deepEqual(qs.parse({ a: b }), { a: b }); + st.end(); + }); + + t.test('parses jquery-param strings', function (st) { + // readable = 'filter[0][]=int1&filter[0][]==&filter[0][]=77&filter[]=and&filter[2][]=int2&filter[2][]==&filter[2][]=8' + var encoded = 'filter%5B0%5D%5B%5D=int1&filter%5B0%5D%5B%5D=%3D&filter%5B0%5D%5B%5D=77&filter%5B%5D=and&filter%5B2%5D%5B%5D=int2&filter%5B2%5D%5B%5D=%3D&filter%5B2%5D%5B%5D=8'; + var expected = { filter: [['int1', '=', '77'], 'and', ['int2', '=', '8']] }; + st.deepEqual(qs.parse(encoded), expected); + st.end(); + }); + + t.test('continues parsing when no parent is found', function (st) { + st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); + st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); + st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); + st.end(); + }); + + t.test('does not error when parsing a very long array', function (st) { + var str = 'a[]=a'; + while (Buffer.byteLength(str) < 128 * 1024) { + str = str + '&' + str; + } + + st.doesNotThrow(function () { + qs.parse(str); + }); + + st.end(); + }); + + t.test('should not throw when a native prototype has an enumerable property', function (st) { + Object.prototype.crash = ''; + Array.prototype.crash = ''; + st.doesNotThrow(qs.parse.bind(null, 'a=b')); + st.deepEqual(qs.parse('a=b'), { a: 'b' }); + st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); + st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); + delete Object.prototype.crash; + delete Array.prototype.crash; + st.end(); + }); + + t.test('parses a string with an alternative string delimiter', function (st) { + st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('parses a string with an alternative RegExp delimiter', function (st) { + st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not use non-splittable objects as delimiters', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding parameter limit', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); + st.end(); + }); + + t.test('allows setting the parameter limit to Infinity', function (st) { + st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('allows overriding array limit', function (st) { + st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); + st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); + st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); + st.end(); + }); + + t.test('allows disabling array parsing', function (st) { + var indices = qs.parse('a[0]=b&a[1]=c', { parseArrays: false }); + st.deepEqual(indices, { a: { 0: 'b', 1: 'c' } }); + st.equal(Array.isArray(indices.a), false, 'parseArrays:false, indices case is not an array'); + + var emptyBrackets = qs.parse('a[]=b', { parseArrays: false }); + st.deepEqual(emptyBrackets, { a: { 0: 'b' } }); + st.equal(Array.isArray(emptyBrackets.a), false, 'parseArrays:false, empty brackets case is not an array'); + + st.end(); + }); + + t.test('allows for query string prefix', function (st) { + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); + st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); + st.end(); + }); + + t.test('parses an object', function (st) { + var input = { + 'user[name]': { 'pop[bob]': 3 }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses string with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo=bar,tee', { comma: true }), { foo: ['bar', 'tee'] }); + st.deepEqual(qs.parse('foo[bar]=coffee,tee', { comma: true }), { foo: { bar: ['coffee', 'tee'] } }); + st.deepEqual(qs.parse('foo=', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true }), { foo: '' }); + st.deepEqual(qs.parse('foo', { comma: true, strictNullHandling: true }), { foo: null }); + st.end(); + }); + + t.test('parses values with comma as array divider', function (st) { + st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: false }), { foo: 'bar,tee' }); + st.deepEqual(qs.parse({ foo: 'bar,tee' }, { comma: true }), { foo: ['bar', 'tee'] }); + st.end(); + }); + + t.test('use number decoder, parses string that has one number with comma option enabled', function (st) { + var decoder = function (str, defaultDecoder, charset, type) { + if (!isNaN(Number(str))) { + return parseFloat(str); + } + return defaultDecoder(str, defaultDecoder, charset, type); + }; + + st.deepEqual(qs.parse('foo=1', { comma: true, decoder: decoder }), { foo: 1 }); + st.deepEqual(qs.parse('foo=0', { comma: true, decoder: decoder }), { foo: 0 }); + + st.end(); + }); + + t.test('parses brackets holds array of arrays when having two parts of strings with comma as array divider', function (st) { + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=4,5,6', { comma: true }), { foo: [['1', '2', '3'], ['4', '5', '6']] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=', { comma: true }), { foo: [['1', '2', '3'], ''] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=,', { comma: true }), { foo: [['1', '2', '3'], ['', '']] }); + st.deepEqual(qs.parse('foo[]=1,2,3&foo[]=a', { comma: true }), { foo: [['1', '2', '3'], 'a'] }); + + st.end(); + }); + + t.test('parses comma delimited array while having percent-encoded comma treated as normal text', function (st) { + st.deepEqual(qs.parse('foo=a%2Cb', { comma: true }), { foo: 'a,b' }); + st.deepEqual(qs.parse('foo=a%2C%20b,d', { comma: true }), { foo: ['a, b', 'd'] }); + st.deepEqual(qs.parse('foo=a%2C%20b,c%2C%20d', { comma: true }), { foo: ['a, b', 'c, d'] }); + + st.end(); + }); + + t.test('parses an object in dot notation', function (st) { + var input = { + 'user.name': { 'pop[bob]': 3 }, + 'user.email.': null + }; + + var expected = { + user: { + name: { 'pop[bob]': 3 }, + email: null + } + }; + + var result = qs.parse(input, { allowDots: true }); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('parses an object and not child values', function (st) { + var input = { + 'user[name]': { 'pop[bob]': { test: 3 } }, + 'user[email]': null + }; + + var expected = { + user: { + name: { 'pop[bob]': { test: 3 } }, + email: null + } + }; + + var result = qs.parse(input); + + st.deepEqual(result, expected); + st.end(); + }); + + t.test('does not blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.parse('a=b&c=d'); + global.Buffer = tempBuffer; + st.deepEqual(result, { a: 'b', c: 'd' }); + st.end(); + }); + + t.test('does not crash when parsing circular references', function (st) { + var a = {}; + a.b = a; + + var parsed; + + st.doesNotThrow(function () { + parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + st.equal('bar' in parsed.foo, true); + st.equal('baz' in parsed.foo, true); + st.equal(parsed.foo.bar, 'baz'); + st.deepEqual(parsed.foo.baz, a); + st.end(); + }); + + t.test('does not crash when parsing deep objects', function (st) { + var parsed; + var str = 'foo'; + + for (var i = 0; i < 5000; i++) { + str += '[p]'; + } + + str += '=bar'; + + st.doesNotThrow(function () { + parsed = qs.parse(str, { depth: 5000 }); + }); + + st.equal('foo' in parsed, true, 'parsed has "foo" property'); + + var depth = 0; + var ref = parsed.foo; + while ((ref = ref.p)) { + depth += 1; + } + + st.equal(depth, 5000, 'parsed is 5000 properties deep'); + + st.end(); + }); + + t.test('parses null objects correctly', { skip: !Object.create }, function (st) { + var a = Object.create(null); + a.b = 'c'; + + st.deepEqual(qs.parse(a), { b: 'c' }); + var result = qs.parse({ a: a }); + st.equal('a' in result, true, 'result has "a" property'); + st.deepEqual(result.a, a); + st.end(); + }); + + t.test('parses dates correctly', function (st) { + var now = new Date(); + st.deepEqual(qs.parse({ a: now }), { a: now }); + st.end(); + }); + + t.test('parses regular expressions correctly', function (st) { + var re = /^test$/; + st.deepEqual(qs.parse({ a: re }), { a: re }); + st.end(); + }); + + t.test('does not allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: false }), + {}, + 'bare "toString" results in {}' + ); + + st.end(); + }); + + t.test('can allow overwriting prototype properties', function (st) { + st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); + st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); + + st.deepEqual( + qs.parse('toString', { allowPrototypes: true }), + { toString: '' }, + 'bare "toString" results in { toString: "" }' + ); + + st.end(); + }); + + t.test('params starting with a closing bracket', function (st) { + st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); + st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); + st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); + st.end(); + }); + + t.test('params starting with a starting bracket', function (st) { + st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); + st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); + st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); + st.end(); + }); + + t.test('add keys to objects', function (st) { + st.deepEqual( + qs.parse('a[b]=c&a=d'), + { a: { b: 'c', d: true } }, + 'can add keys to objects' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString'), + { a: { b: 'c' } }, + 'can not overwrite prototype' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), + { a: { b: 'c', toString: true } }, + 'can overwrite prototype with allowPrototypes true' + ); + + st.deepEqual( + qs.parse('a[b]=c&a=toString', { plainObjects: true }), + { __proto__: null, a: { __proto__: null, b: 'c', toString: true } }, + 'can overwrite prototype with plainObjects true' + ); + + st.end(); + }); + + t.test('can return null objects', { skip: !Object.create }, function (st) { + var expected = Object.create(null); + expected.a = Object.create(null); + expected.a.b = 'c'; + expected.a.hasOwnProperty = 'd'; + st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); + st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); + var expectedArray = Object.create(null); + expectedArray.a = Object.create(null); + expectedArray.a[0] = 'b'; + expectedArray.a.c = 'd'; + st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); + st.end(); + }); + + t.test('can parse with custom encoding', function (st) { + st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { + decoder: function (str) { + var reg = /%([0-9A-F]{2})/ig; + var result = []; + var parts = reg.exec(str); + while (parts) { + result.push(parseInt(parts[1], 16)); + parts = reg.exec(str); + } + return String(iconv.decode(SaferBuffer.from(result), 'shift_jis')); + } + }), { 県: '大阪府' }); + st.end(); + }); + + t.test('receives the default decoder as a second argument', function (st) { + st.plan(1); + qs.parse('a', { + decoder: function (str, defaultDecoder) { + st.equal(defaultDecoder, utils.decode); + } + }); + st.end(); + }); + + t.test('throws error with wrong decoder', function (st) { + st['throws'](function () { + qs.parse({}, { decoder: 'string' }); + }, new TypeError('Decoder has to be a function.')); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.parse('a[b]=true', options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.parse('a=b', { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('parses an iso-8859-1 string if asked to', function (st) { + st.deepEqual(qs.parse('%A2=%BD', { charset: 'iso-8859-1' }), { '¢': '½' }); + st.end(); + }); + + var urlEncodedCheckmarkInUtf8 = '%E2%9C%93'; + var urlEncodedOSlashInUtf8 = '%C3%B8'; + var urlEncodedNumCheckmark = '%26%2310003%3B'; + var urlEncodedNumSmiley = '%26%239786%3B'; + + t.test('prefers an utf-8 charset specified by the utf8 sentinel to a default charset of iso-8859-1', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'iso-8859-1' }), { ø: 'ø' }); + st.end(); + }); + + t.test('prefers an iso-8859-1 charset specified by the utf8 sentinel to a default charset of utf-8', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('does not require the utf8 sentinel to be defined before the parameters whose decoding it affects', function (st) { + st.deepEqual(qs.parse('a=' + urlEncodedOSlashInUtf8 + '&utf8=' + urlEncodedNumCheckmark, { charsetSentinel: true, charset: 'utf-8' }), { a: 'ø' }); + st.end(); + }); + + t.test('should ignore an utf8 sentinel with an unknown value', function (st) { + st.deepEqual(qs.parse('utf8=foo&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true, charset: 'utf-8' }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to utf-8 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedCheckmarkInUtf8 + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { ø: 'ø' }); + st.end(); + }); + + t.test('uses the utf8 sentinel to switch to iso-8859-1 when no default charset is given', function (st) { + st.deepEqual(qs.parse('utf8=' + urlEncodedNumCheckmark + '&' + urlEncodedOSlashInUtf8 + '=' + urlEncodedOSlashInUtf8, { charsetSentinel: true }), { 'ø': 'ø' }); + st.end(); + }); + + t.test('interprets numeric entities in iso-8859-1 when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('handles a custom decoder returning `null`, in the `iso-8859-1` charset, when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=&bar=' + urlEncodedNumSmiley, { + charset: 'iso-8859-1', + decoder: function (str, defaultDecoder, charset) { + return str ? defaultDecoder(str, defaultDecoder, charset) : null; + }, + interpretNumericEntities: true + }), { foo: null, bar: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities in iso-8859-1 when `interpretNumericEntities` is absent', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'iso-8859-1' }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret numeric entities when the charset is utf-8, even when `interpretNumericEntities`', function (st) { + st.deepEqual(qs.parse('foo=' + urlEncodedNumSmiley, { charset: 'utf-8', interpretNumericEntities: true }), { foo: '☺' }); + st.end(); + }); + + t.test('does not interpret %uXXXX syntax in iso-8859-1 mode', function (st) { + st.deepEqual(qs.parse('%u263A=%u263A', { charset: 'iso-8859-1' }), { '%u263A': '%u263A' }); + st.end(); + }); + + t.test('allows for decoding keys and values differently', function (st) { + var decoder = function (str, defaultDecoder, charset, type) { + if (type === 'key') { + return defaultDecoder(str, defaultDecoder, charset, type).toLowerCase(); + } + if (type === 'value') { + return defaultDecoder(str, defaultDecoder, charset, type).toUpperCase(); + } + throw 'this should never happen! type: ' + type; + }; + + st.deepEqual(qs.parse('KeY=vAlUe', { decoder: decoder }), { key: 'VALUE' }); + st.end(); + }); + + t.end(); +}); diff --git a/build/node_modules/formidable/node_modules/qs/test/stringify.js b/build/node_modules/formidable/node_modules/qs/test/stringify.js new file mode 100644 index 00000000..760d08cb --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/test/stringify.js @@ -0,0 +1,738 @@ +'use strict'; + +var test = require('tape'); +var qs = require('../'); +var utils = require('../lib/utils'); +var iconv = require('iconv-lite'); +var SaferBuffer = require('safer-buffer').Buffer; +var hasSymbols = require('has-symbols'); +var hasBigInt = typeof BigInt === 'function'; + +test('stringify()', function (t) { + t.test('stringifies a querystring object', function (st) { + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: 1 }), 'a=1'); + st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); + st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); + st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); + st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); + st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); + st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); + st.end(); + }); + + t.test('stringifies falsy values', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(null, { strictNullHandling: true }), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(0), ''); + st.end(); + }); + + t.test('stringifies symbols', { skip: !hasSymbols() }, function (st) { + st.equal(qs.stringify(Symbol.iterator), ''); + st.equal(qs.stringify([Symbol.iterator]), '0=Symbol%28Symbol.iterator%29'); + st.equal(qs.stringify({ a: Symbol.iterator }), 'a=Symbol%28Symbol.iterator%29'); + st.equal( + qs.stringify({ a: [Symbol.iterator] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), + 'a[]=Symbol%28Symbol.iterator%29' + ); + st.end(); + }); + + t.test('stringifies bigints', { skip: !hasBigInt }, function (st) { + var three = BigInt(3); + var encodeWithN = function (value, defaultEncoder, charset) { + var result = defaultEncoder(value, defaultEncoder, charset); + return typeof value === 'bigint' ? result + 'n' : result; + }; + st.equal(qs.stringify(three), ''); + st.equal(qs.stringify([three]), '0=3'); + st.equal(qs.stringify([three], { encoder: encodeWithN }), '0=3n'); + st.equal(qs.stringify({ a: three }), 'a=3'); + st.equal(qs.stringify({ a: three }, { encoder: encodeWithN }), 'a=3n'); + st.equal( + qs.stringify({ a: [three] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), + 'a[]=3' + ); + st.equal( + qs.stringify({ a: [three] }, { encodeValuesOnly: true, encoder: encodeWithN, arrayFormat: 'brackets' }), + 'a[]=3n' + ); + st.end(); + }); + + t.test('adds query prefix', function (st) { + st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); + st.end(); + }); + + t.test('with query prefix, outputs blank string given an empty object', function (st) { + st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); + st.end(); + }); + + t.test('stringifies nested falsy values', function (st) { + st.equal(qs.stringify({ a: { b: { c: null } } }), 'a%5Bb%5D%5Bc%5D='); + st.equal(qs.stringify({ a: { b: { c: null } } }, { strictNullHandling: true }), 'a%5Bb%5D%5Bc%5D'); + st.equal(qs.stringify({ a: { b: { c: false } } }), 'a%5Bb%5D%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies a nested object', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies a nested object with dots notation', function (st) { + st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); + st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); + st.end(); + }); + + t.test('stringifies an array value', function (st) { + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), + 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'comma' }), + 'a=b%2Cc%2Cd', + 'comma => comma' + ); + st.equal( + qs.stringify({ a: ['b', 'c', 'd'] }), + 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', + 'default => indices' + ); + st.end(); + }); + + t.test('omits nulls when asked', function (st) { + st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); + st.end(); + }); + + t.test('omits nested nulls when asked', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('omits array indices when asked', function (st) { + st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); + st.end(); + }); + + t.test('stringifies a nested array value', function (st) { + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.end(); + }); + + t.test('stringifies a nested array value with dots notation', function (st) { + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a.b[0]=c&a.b[1]=d', + 'indices: stringifies with dots + indices' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a.b[]=c&a.b[]=d', + 'brackets: stringifies with dots + brackets' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false, arrayFormat: 'comma' } + ), + 'a.b=c,d', + 'comma: stringifies with dots + comma' + ); + st.equal( + qs.stringify( + { a: { b: ['c', 'd'] } }, + { allowDots: true, encode: false } + ), + 'a.b[0]=c&a.b[1]=d', + 'default: stringifies with dots + indices' + ); + st.end(); + }); + + t.test('stringifies an object inside an array', function (st) { + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D=c', // a[0][b]=c + 'indices => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D=c', // a[][b]=c + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 'c' }] }), + 'a%5B0%5D%5Bb%5D=c', + 'default => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'indices => indices' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), + 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', + 'brackets => brackets' + ); + + st.equal( + qs.stringify({ a: [{ b: { c: [1] } }] }), + 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an array with mixed objects and primitives', function (st) { + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'indices => indices' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + 'a[][b]=1&a[]=2&a[]=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + 'a[0][b]=1&a[1]=2&a[2]=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('stringifies an object inside an array with dots notation', function (st) { + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b=c', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b=c', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: 'c' }] }, + { allowDots: true, encode: false } + ), + 'a[0].b=c', + 'default => indices' + ); + + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'indices' } + ), + 'a[0].b.c[0]=1', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false, arrayFormat: 'brackets' } + ), + 'a[].b.c[]=1', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: [{ b: { c: [1] } }] }, + { allowDots: true, encode: false } + ), + 'a[0].b.c[0]=1', + 'default => indices' + ); + + st.end(); + }); + + t.test('does not omit object keys when indices = false', function (st) { + st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when indices=true', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); + st.end(); + }); + + t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); + st.end(); + }); + + t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { + st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); + st.end(); + }); + + t.test('stringifies a complicated object', function (st) { + st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); + st.end(); + }); + + t.test('stringifies an empty value', function (st) { + st.equal(qs.stringify({ a: '' }), 'a='); + st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); + + st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); + st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); + + st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); + st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); + + st.end(); + }); + + t.test('stringifies a null object', { skip: !Object.create }, function (st) { + var obj = Object.create(null); + obj.a = 'b'; + st.equal(qs.stringify(obj), 'a=b'); + st.end(); + }); + + t.test('returns an empty string for invalid input', function (st) { + st.equal(qs.stringify(undefined), ''); + st.equal(qs.stringify(false), ''); + st.equal(qs.stringify(null), ''); + st.equal(qs.stringify(''), ''); + st.end(); + }); + + t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { + var obj = { a: Object.create(null) }; + + obj.a.b = 'c'; + st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); + st.end(); + }); + + t.test('drops keys with a value of undefined', function (st) { + st.equal(qs.stringify({ a: undefined }), ''); + + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); + st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); + st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); + st.end(); + }); + + t.test('url encodes values', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.end(); + }); + + t.test('stringifies a date', function (st) { + var now = new Date(); + var str = 'a=' + encodeURIComponent(now.toISOString()); + st.equal(qs.stringify({ a: now }), str); + st.end(); + }); + + t.test('stringifies the weird object from qs', function (st) { + st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); + st.end(); + }); + + t.test('skips properties that are part of the object prototype', function (st) { + Object.prototype.crash = 'test'; + st.equal(qs.stringify({ a: 'b' }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); + delete Object.prototype.crash; + st.end(); + }); + + t.test('stringifies boolean values', function (st) { + st.equal(qs.stringify({ a: true }), 'a=true'); + st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); + st.equal(qs.stringify({ b: false }), 'b=false'); + st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); + st.end(); + }); + + t.test('stringifies buffer values', function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); + st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); + st.end(); + }); + + t.test('stringifies an object using an alternative delimiter', function (st) { + st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); + st.end(); + }); + + t.test('doesn\'t blow up when Buffer global is missing', function (st) { + var tempBuffer = global.Buffer; + delete global.Buffer; + var result = qs.stringify({ a: 'b', c: 'd' }); + global.Buffer = tempBuffer; + st.equal(result, 'a=b&c=d'); + st.end(); + }); + + t.test('selects properties when filter=array', function (st) { + st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); + st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); + + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'indices => indices' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } + ), + 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', + 'brackets => brackets' + ); + st.equal( + qs.stringify( + { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, + { filter: ['a', 'b', 0, 2] } + ), + 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', + 'default => indices' + ); + + st.end(); + }); + + t.test('supports custom representations when filter=function', function (st) { + var calls = 0; + var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; + var filterFunc = function (prefix, value) { + calls += 1; + if (calls === 1) { + st.equal(prefix, '', 'prefix is empty'); + st.equal(value, obj); + } else if (prefix === 'c') { + return void 0; + } else if (value instanceof Date) { + st.equal(prefix, 'e[f]'); + return value.getTime(); + } + return value; + }; + + st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); + st.equal(calls, 5); + st.end(); + }); + + t.test('can disable uri encoding', function (st) { + st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); + st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); + st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); + st.end(); + }); + + t.test('can sort the keys', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); + st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); + st.end(); + }); + + t.test('can sort the keys at depth 3 or more too', function (st) { + var sort = function (a, b) { + return a.localeCompare(b); + }; + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: sort, encode: false } + ), + 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' + ); + st.equal( + qs.stringify( + { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, + { sort: null, encode: false } + ), + 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' + ); + st.end(); + }); + + t.test('can stringify with custom encoding', function (st) { + st.equal(qs.stringify({ 県: '大阪府', '': '' }, { + encoder: function (str) { + if (str.length === 0) { + return ''; + } + var buf = iconv.encode(str, 'shiftjis'); + var result = []; + for (var i = 0; i < buf.length; ++i) { + result.push(buf.readUInt8(i).toString(16)); + } + return '%' + result.join('%'); + } + }), '%8c%a7=%91%e5%8d%e3%95%7b&='); + st.end(); + }); + + t.test('receives the default encoder as a second argument', function (st) { + st.plan(2); + qs.stringify({ a: 1 }, { + encoder: function (str, defaultEncoder) { + st.equal(defaultEncoder, utils.encode); + } + }); + st.end(); + }); + + t.test('throws error with wrong encoder', function (st) { + st['throws'](function () { + qs.stringify({}, { encoder: 'string' }); + }, new TypeError('Encoder has to be a function.')); + st.end(); + }); + + t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { + st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { + encoder: function (buffer) { + if (typeof buffer === 'string') { + return buffer; + } + return String.fromCharCode(buffer.readUInt8(0) + 97); + } + }), 'a=b'); + + st.equal(qs.stringify({ a: SaferBuffer.from('a b') }, { + encoder: function (buffer) { + return buffer; + } + }), 'a=a b'); + st.end(); + }); + + t.test('serializeDate option', function (st) { + var date = new Date(); + st.equal( + qs.stringify({ a: date }), + 'a=' + date.toISOString().replace(/:/g, '%3A'), + 'default is toISOString' + ); + + var mutatedDate = new Date(); + mutatedDate.toISOString = function () { + throw new SyntaxError(); + }; + st['throws'](function () { + mutatedDate.toISOString(); + }, SyntaxError); + st.equal( + qs.stringify({ a: mutatedDate }), + 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), + 'toISOString works even when method is not locally present' + ); + + var specificDate = new Date(6); + st.equal( + qs.stringify( + { a: specificDate }, + { serializeDate: function (d) { return d.getTime() * 7; } } + ), + 'a=42', + 'custom serializeDate function called' + ); + + st.end(); + }); + + t.test('RFC 1738 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC1738 }), 'a+b=a+b'); + st.end(); + }); + + t.test('RFC 3986 spaces serialization', function (st) { + st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }, { format: qs.formats.RFC3986 }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Backward compatibility to RFC 3986', function (st) { + st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); + st.equal(qs.stringify({ 'a b': SaferBuffer.from('a b') }), 'a%20b=a%20b'); + st.end(); + }); + + t.test('Edge cases and unknown formats', function (st) { + ['UFO1234', false, 1234, null, {}, []].forEach( + function (format) { + st['throws']( + function () { + qs.stringify({ a: 'b c' }, { format: format }); + }, + new TypeError('Unknown format option provided.') + ); + } + ); + st.end(); + }); + + t.test('encodeValuesOnly', function (st) { + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, + { encodeValuesOnly: true } + ), + 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' + ); + st.equal( + qs.stringify( + { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } + ), + 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' + ); + st.end(); + }); + + t.test('encodeValuesOnly - strictNullHandling', function (st) { + st.equal( + qs.stringify( + { a: { b: null } }, + { encodeValuesOnly: true, strictNullHandling: true } + ), + 'a[b]' + ); + st.end(); + }); + + t.test('throws if an invalid charset is specified', function (st) { + st['throws'](function () { + qs.stringify({ a: 'b' }, { charset: 'foobar' }); + }, new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined')); + st.end(); + }); + + t.test('respects a charset of iso-8859-1', function (st) { + st.equal(qs.stringify({ æ: 'æ' }, { charset: 'iso-8859-1' }), '%E6=%E6'); + st.end(); + }); + + t.test('encodes unrepresentable chars as numeric entities in iso-8859-1 mode', function (st) { + st.equal(qs.stringify({ a: '☺' }, { charset: 'iso-8859-1' }), 'a=%26%239786%3B'); + st.end(); + }); + + t.test('respects an explicit charset of utf-8 (the default)', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charset: 'utf-8' }), 'a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is utf-8', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'utf-8' }), 'utf8=%E2%9C%93&a=%C3%A6'); + st.end(); + }); + + t.test('adds the right sentinel when instructed to and the charset is iso-8859-1', function (st) { + st.equal(qs.stringify({ a: 'æ' }, { charsetSentinel: true, charset: 'iso-8859-1' }), 'utf8=%26%2310003%3B&a=%E6'); + st.end(); + }); + + t.test('does not mutate the options argument', function (st) { + var options = {}; + qs.stringify({}, options); + st.deepEqual(options, {}); + st.end(); + }); + + t.test('strictNullHandling works with custom filter', function (st) { + var filter = function (prefix, value) { + return value; + }; + + var options = { strictNullHandling: true, filter: filter }; + st.equal(qs.stringify({ key: null }, options), 'key'); + st.end(); + }); + + t.test('strictNullHandling works with null serializeDate', function (st) { + var serializeDate = function () { + return null; + }; + var options = { strictNullHandling: true, serializeDate: serializeDate }; + var date = new Date(); + st.equal(qs.stringify({ key: date }, options), 'key'); + st.end(); + }); + + t.test('allows for encoding keys and values differently', function (st) { + var encoder = function (str, defaultEncoder, charset, type) { + if (type === 'key') { + return defaultEncoder(str, defaultEncoder, charset, type).toLowerCase(); + } + if (type === 'value') { + return defaultEncoder(str, defaultEncoder, charset, type).toUpperCase(); + } + throw 'this should never happen! type: ' + type; + }; + + st.deepEqual(qs.stringify({ KeY: 'vAlUe' }, { encoder: encoder }), 'key=VALUE'); + st.end(); + }); + + t.end(); +}); diff --git a/build/node_modules/formidable/node_modules/qs/test/utils.js b/build/node_modules/formidable/node_modules/qs/test/utils.js new file mode 100644 index 00000000..aa84dfdc --- /dev/null +++ b/build/node_modules/formidable/node_modules/qs/test/utils.js @@ -0,0 +1,136 @@ +'use strict'; + +var test = require('tape'); +var inspect = require('object-inspect'); +var SaferBuffer = require('safer-buffer').Buffer; +var forEach = require('for-each'); +var utils = require('../lib/utils'); + +test('merge()', function (t) { + t.deepEqual(utils.merge(null, true), [null, true], 'merges true into null'); + + t.deepEqual(utils.merge(null, [42]), [null, 42], 'merges null into an array'); + + t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); + + var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); + t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); + + var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); + t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); + + var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); + t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); + + var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); + t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); + + var noOptionsNonObjectSource = utils.merge({ foo: 'baz' }, 'bar'); + t.deepEqual(noOptionsNonObjectSource, { foo: 'baz', bar: true }); + + t.test( + 'avoids invoking array setters unnecessarily', + { skip: typeof Object.defineProperty !== 'function' }, + function (st) { + var setCount = 0; + var getCount = 0; + var observed = []; + Object.defineProperty(observed, 0, { + get: function () { + getCount += 1; + return { bar: 'baz' }; + }, + set: function () { setCount += 1; } + }); + utils.merge(observed, [null]); + st.equal(setCount, 0); + st.equal(getCount, 1); + observed[0] = observed[0]; // eslint-disable-line no-self-assign + st.equal(setCount, 1); + st.equal(getCount, 2); + st.end(); + } + ); + + t.end(); +}); + +test('assign()', function (t) { + var target = { a: 1, b: 2 }; + var source = { b: 3, c: 4 }; + var result = utils.assign(target, source); + + t.equal(result, target, 'returns the target'); + t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); + t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); + + t.end(); +}); + +test('combine()', function (t) { + t.test('both arrays', function (st) { + var a = [1]; + var b = [2]; + var combined = utils.combine(a, b); + + st.deepEqual(a, [1], 'a is not mutated'); + st.deepEqual(b, [2], 'b is not mutated'); + st.notEqual(a, combined, 'a !== combined'); + st.notEqual(b, combined, 'b !== combined'); + st.deepEqual(combined, [1, 2], 'combined is a + b'); + + st.end(); + }); + + t.test('one array, one non-array', function (st) { + var aN = 1; + var a = [aN]; + var bN = 2; + var b = [bN]; + + var combinedAnB = utils.combine(aN, b); + st.deepEqual(b, [bN], 'b is not mutated'); + st.notEqual(aN, combinedAnB, 'aN + b !== aN'); + st.notEqual(a, combinedAnB, 'aN + b !== a'); + st.notEqual(bN, combinedAnB, 'aN + b !== bN'); + st.notEqual(b, combinedAnB, 'aN + b !== b'); + st.deepEqual([1, 2], combinedAnB, 'first argument is array-wrapped when not an array'); + + var combinedABn = utils.combine(a, bN); + st.deepEqual(a, [aN], 'a is not mutated'); + st.notEqual(aN, combinedABn, 'a + bN !== aN'); + st.notEqual(a, combinedABn, 'a + bN !== a'); + st.notEqual(bN, combinedABn, 'a + bN !== bN'); + st.notEqual(b, combinedABn, 'a + bN !== b'); + st.deepEqual([1, 2], combinedABn, 'second argument is array-wrapped when not an array'); + + st.end(); + }); + + t.test('neither is an array', function (st) { + var combined = utils.combine(1, 2); + st.notEqual(1, combined, '1 + 2 !== 1'); + st.notEqual(2, combined, '1 + 2 !== 2'); + st.deepEqual([1, 2], combined, 'both arguments are array-wrapped when not an array'); + + st.end(); + }); + + t.end(); +}); + +test('isBuffer()', function (t) { + forEach([null, undefined, true, false, '', 'abc', 42, 0, NaN, {}, [], function () {}, /a/g], function (x) { + t.equal(utils.isBuffer(x), false, inspect(x) + ' is not a buffer'); + }); + + var fakeBuffer = { constructor: Buffer }; + t.equal(utils.isBuffer(fakeBuffer), false, 'fake buffer is not a buffer'); + + var saferBuffer = SaferBuffer.from('abc'); + t.equal(utils.isBuffer(saferBuffer), true, 'SaferBuffer instance is a buffer'); + + var buffer = Buffer.from && Buffer.alloc ? Buffer.from('abc') : new Buffer('abc'); + t.equal(utils.isBuffer(buffer), true, 'real Buffer instance is a buffer'); + t.end(); +}); diff --git a/build/node_modules/formidable/package.json b/build/node_modules/formidable/package.json index 3a09f373..c9e8e240 100644 --- a/build/node_modules/formidable/package.json +++ b/build/node_modules/formidable/package.json @@ -1,57 +1,129 @@ { - "_from": "formidable@^1.2.0", - "_id": "formidable@1.2.2", + "_from": "formidable@^2.0.1", + "_id": "formidable@2.0.1", "_inBundle": false, - "_integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", + "_integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", "_location": "/formidable", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "formidable@^1.2.0", + "raw": "formidable@^2.0.1", "name": "formidable", "escapedName": "formidable", - "rawSpec": "^1.2.0", + "rawSpec": "^2.0.1", "saveSpec": null, - "fetchSpec": "^1.2.0" + "fetchSpec": "^2.0.1" }, "_requiredBy": [ "/superagent" ], - "_resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "_shasum": "bf69aea2972982675f00865342b982986f6b8dd9", - "_spec": "formidable@^1.2.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/formidable/-/formidable-2.0.1.tgz", + "_shasum": "4310bc7965d185536f9565184dee74fbb75557ff", + "_spec": "formidable@^2.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "bugs": { "url": "https://github.com/node-formidable/formidable/issues" }, "bundleDependencies": false, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, "deprecated": false, "description": "A node.js module for parsing form data, especially file uploads.", "devDependencies": { - "findit": "^0.1.2", - "gently": "^0.8.0", - "hashish": "^0.0.4", - "request": "^2.11.4", - "urun": "^0.0.6", - "utest": "^0.0.8" + "@commitlint/cli": "8.3.5", + "@commitlint/config-conventional": "8.3.4", + "@tunnckocore/prettier-config": "1.3.8", + "del-cli": "3.0.0", + "eslint": "6.8.0", + "eslint-config-airbnb-base": "14.1.0", + "eslint-config-prettier": "6.11.0", + "eslint-plugin-import": "2.20.2", + "eslint-plugin-prettier": "3.1.3", + "express": "4.17.1", + "husky": "4.2.5", + "jest": "25.4.0", + "koa": "2.11.0", + "lint-staged": "10.2.7", + "make-dir-cli": "2.0.0", + "nyc": "15.0.1", + "prettier": "2.0.5", + "prettier-plugin-pkgjson": "0.2.8", + "request": "2.88.2", + "supertest": "4.0.2" }, "files": [ - "lib", - "benchmark-2020-01-29_xeon-x3440.png" + "src" ], "funding": "https://ko-fi.com/tunnckoCore/commissions", "homepage": "https://github.com/node-formidable/formidable", + "husky": { + "hooks": { + "pre-commit": "git status --porcelain && yarn lint-staged", + "commit-msg": "yarn commitlint -E HUSKY_GIT_PARAMS" + } + }, + "jest": { + "verbose": true + }, + "keywords": [ + "multipart", + "form", + "data", + "querystring", + "www", + "json", + "ulpoad", + "file" + ], "license": "MIT", - "main": "./lib/index.js", + "lint-staged": { + "!*.{js,jsx,ts,tsx}": [ + "yarn run fmt:prepare" + ], + "*.{js,jsx,ts,tsx}": [ + "yarn run lint" + ] + }, + "main": "./src/index.js", "name": "formidable", + "publishConfig": { + "access": "public", + "tag": "v2" + }, + "renovate": { + "extends": [ + "@tunnckocore", + ":pinAllExceptPeerDependencies" + ] + }, "repository": { "type": "git", "url": "git+https://github.com/node-formidable/formidable.git" }, "scripts": { - "clean": "rm test/tmp/*", - "test": "node test/run.js" + "bench": "node benchmark", + "fmt": "yarn run fmt:prepare '**/*'", + "fmt:prepare": "prettier --write", + "lint": "yarn run lint:prepare .", + "lint:prepare": "eslint --cache --fix --quiet --format codeframe", + "postreinstall": "yarn setup", + "pretest": "del-cli ./test/tmp && make-dir ./test/tmp", + "pretest:ci": "yarn run pretest", + "reinstall": "del-cli ./node_modules ./yarn.lock", + "setup": "yarn", + "test": "jest --coverage", + "test:ci": "nyc jest --coverage", + "test:jest": "jest --coverage" }, - "version": "1.2.2" + "version": "2.0.1" } diff --git a/build/node_modules/formidable/src/Formidable.js b/build/node_modules/formidable/src/Formidable.js new file mode 100644 index 00000000..05427008 --- /dev/null +++ b/build/node_modules/formidable/src/Formidable.js @@ -0,0 +1,617 @@ +/* eslint-disable class-methods-use-this */ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const os = require('os'); +const path = require('path'); +const hexoid = require('hexoid'); +const once = require('once'); +const dezalgo = require('dezalgo'); +const { EventEmitter } = require('events'); +const { StringDecoder } = require('string_decoder'); +const qs = require('qs'); + +const toHexoId = hexoid(25); +const DEFAULT_OPTIONS = { + maxFields: 1000, + maxFieldsSize: 20 * 1024 * 1024, + maxFileSize: 200 * 1024 * 1024, + minFileSize: 1, + allowEmptyFiles: true, + keepExtensions: false, + encoding: 'utf-8', + hashAlgorithm: false, + uploadDir: os.tmpdir(), + multiples: false, + enabledPlugins: ['octetstream', 'querystring', 'multipart', 'json'], + fileWriteStreamHandler: null, + defaultInvalidName: 'invalid-name', + filter: function () { + return true; + }, +}; + +const PersistentFile = require('./PersistentFile'); +const VolatileFile = require('./VolatileFile'); +const DummyParser = require('./parsers/Dummy'); +const MultipartParser = require('./parsers/Multipart'); +const errors = require('./FormidableError.js'); + +const { FormidableError } = errors; + +function hasOwnProp(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +class IncomingForm extends EventEmitter { + constructor(options = {}) { + super(); + + this.options = { ...DEFAULT_OPTIONS, ...options }; + + const dir = path.resolve( + this.options.uploadDir || this.options.uploaddir || os.tmpdir(), + ); + + this.uploaddir = dir; + this.uploadDir = dir; + + // initialize with null + [ + 'error', + 'headers', + 'type', + 'bytesExpected', + 'bytesReceived', + '_parser', + ].forEach((key) => { + this[key] = null; + }); + + this._setUpRename(); + + this._flushing = 0; + this._fieldsSize = 0; + this._fileSize = 0; + this._plugins = []; + this.openedFiles = []; + + this.options.enabledPlugins = [] + .concat(this.options.enabledPlugins) + .filter(Boolean); + + if (this.options.enabledPlugins.length === 0) { + throw new FormidableError( + 'expect at least 1 enabled builtin plugin, see options.enabledPlugins', + errors.missingPlugin, + ); + } + + this.options.enabledPlugins.forEach((pluginName) => { + const plgName = pluginName.toLowerCase(); + // eslint-disable-next-line import/no-dynamic-require, global-require + this.use(require(path.join(__dirname, 'plugins', `${plgName}.js`))); + }); + + this._setUpMaxFields(); + } + + use(plugin) { + if (typeof plugin !== 'function') { + throw new FormidableError( + '.use: expect `plugin` to be a function', + errors.pluginFunction, + ); + } + this._plugins.push(plugin.bind(this)); + return this; + } + + parse(req, cb) { + this.pause = () => { + try { + req.pause(); + } catch (err) { + // the stream was destroyed + if (!this.ended) { + // before it was completed, crash & burn + this._error(err); + } + return false; + } + return true; + }; + + this.resume = () => { + try { + req.resume(); + } catch (err) { + // the stream was destroyed + if (!this.ended) { + // before it was completed, crash & burn + this._error(err); + } + return false; + } + + return true; + }; + + // Setup callback first, so we don't miss anything from data events emitted immediately. + if (cb) { + const callback = once(dezalgo(cb)); + const fields = {}; + let mockFields = ''; + const files = {}; + + this.on('field', (name, value) => { + if ( + this.options.multiples && + (this.type === 'multipart' || this.type === 'urlencoded') + ) { + const mObj = { [name]: value }; + mockFields = mockFields + ? `${mockFields}&${qs.stringify(mObj)}` + : `${qs.stringify(mObj)}`; + } else { + fields[name] = value; + } + }); + this.on('file', (name, file) => { + // TODO: too much nesting + if (this.options.multiples) { + if (hasOwnProp(files, name)) { + if (!Array.isArray(files[name])) { + files[name] = [files[name]]; + } + files[name].push(file); + } else { + files[name] = file; + } + } else { + files[name] = file; + } + }); + this.on('error', (err) => { + callback(err, fields, files); + }); + this.on('end', () => { + if (this.options.multiples) { + Object.assign(fields, qs.parse(mockFields)); + } + callback(null, fields, files); + }); + } + + // Parse headers and setup the parser, ready to start listening for data. + this.writeHeaders(req.headers); + + // Start listening for data. + req + .on('error', (err) => { + this._error(err); + }) + .on('aborted', () => { + this.emit('aborted'); + this._error(new FormidableError('Request aborted', errors.aborted)); + }) + .on('data', (buffer) => { + try { + this.write(buffer); + } catch (err) { + this._error(err); + } + }) + .on('end', () => { + if (this.error) { + return; + } + if (this._parser) { + this._parser.end(); + } + this._maybeEnd(); + }); + + return this; + } + + writeHeaders(headers) { + this.headers = headers; + this._parseContentLength(); + this._parseContentType(); + + if (!this._parser) { + this._error( + new FormidableError( + 'no parser found', + errors.noParser, + 415, // Unsupported Media Type + ), + ); + return; + } + + this._parser.once('error', (error) => { + this._error(error); + }); + } + + write(buffer) { + if (this.error) { + return null; + } + if (!this._parser) { + this._error( + new FormidableError('uninitialized parser', errors.uninitializedParser), + ); + return null; + } + + this.bytesReceived += buffer.length; + this.emit('progress', this.bytesReceived, this.bytesExpected); + + this._parser.write(buffer); + + return this.bytesReceived; + } + + pause() { + // this does nothing, unless overwritten in IncomingForm.parse + return false; + } + + resume() { + // this does nothing, unless overwritten in IncomingForm.parse + return false; + } + + onPart(part) { + // this method can be overwritten by the user + this._handlePart(part); + } + + _handlePart(part) { + if (part.originalFilename && typeof part.originalFilename !== 'string') { + this._error( + new FormidableError( + `the part.originalFilename should be string when it exists`, + errors.filenameNotString, + ), + ); + return; + } + + // This MUST check exactly for undefined. You can not change it to !part.originalFilename. + + // todo: uncomment when switch tests to Jest + // console.log(part); + + // ? NOTE(@tunnckocore): no it can be any falsey value, it most probably depends on what's returned + // from somewhere else. Where recently I changed the return statements + // and such thing because code style + // ? NOTE(@tunnckocore): or even better, if there is no mimetype, then it's for sure a field + // ? NOTE(@tunnckocore): originalFilename is an empty string when a field? + if (!part.mimetype) { + let value = ''; + const decoder = new StringDecoder( + part.transferEncoding || this.options.encoding, + ); + + part.on('data', (buffer) => { + this._fieldsSize += buffer.length; + if (this._fieldsSize > this.options.maxFieldsSize) { + this._error( + new FormidableError( + `options.maxFieldsSize (${this.options.maxFieldsSize} bytes) exceeded, received ${this._fieldsSize} bytes of field data`, + errors.maxFieldsSizeExceeded, + 413, // Payload Too Large + ), + ); + return; + } + value += decoder.write(buffer); + }); + + part.on('end', () => { + this.emit('field', part.name, value); + }); + return; + } + + if (!this.options.filter(part)) { + return; + } + + this._flushing += 1; + + const newFilename = this._getNewName(part); + const filepath = this._joinDirectoryName(newFilename); + const file = this._newFile({ + newFilename, + filepath, + originalFilename: part.originalFilename, + mimetype: part.mimetype, + }); + file.on('error', (err) => { + this._error(err); + }); + this.emit('fileBegin', part.name, file); + + file.open(); + this.openedFiles.push(file); + + part.on('data', (buffer) => { + this._fileSize += buffer.length; + if (this._fileSize < this.options.minFileSize) { + this._error( + new FormidableError( + `options.minFileSize (${this.options.minFileSize} bytes) inferior, received ${this._fileSize} bytes of file data`, + errors.smallerThanMinFileSize, + 400, + ), + ); + return; + } + if (this._fileSize > this.options.maxFileSize) { + this._error( + new FormidableError( + `options.maxFileSize (${this.options.maxFileSize} bytes) exceeded, received ${this._fileSize} bytes of file data`, + errors.biggerThanMaxFileSize, + 413, + ), + ); + return; + } + if (buffer.length === 0) { + return; + } + this.pause(); + file.write(buffer, () => { + this.resume(); + }); + }); + + part.on('end', () => { + if (!this.options.allowEmptyFiles && this._fileSize === 0) { + this._error( + new FormidableError( + `options.allowEmptyFiles is false, file size should be greather than 0`, + errors.noEmptyFiles, + 400, + ), + ); + return; + } + + file.end(() => { + this._flushing -= 1; + this.emit('file', part.name, file); + this._maybeEnd(); + }); + }); + } + + // eslint-disable-next-line max-statements + _parseContentType() { + if (this.bytesExpected === 0) { + this._parser = new DummyParser(this, this.options); + return; + } + + if (!this.headers['content-type']) { + this._error( + new FormidableError( + 'bad content-type header, no content-type', + errors.missingContentType, + 400, + ), + ); + return; + } + + const results = []; + const _dummyParser = new DummyParser(this, this.options); + + // eslint-disable-next-line no-plusplus + for (let idx = 0; idx < this._plugins.length; idx++) { + const plugin = this._plugins[idx]; + + let pluginReturn = null; + + try { + pluginReturn = plugin(this, this.options) || this; + } catch (err) { + // directly throw from the `form.parse` method; + // there is no other better way, except a handle through options + const error = new FormidableError( + `plugin on index ${idx} failed with: ${err.message}`, + errors.pluginFailed, + 500, + ); + error.idx = idx; + throw error; + } + + Object.assign(this, pluginReturn); + + // todo: use Set/Map and pass plugin name instead of the `idx` index + this.emit('plugin', idx, pluginReturn); + results.push(pluginReturn); + } + + this.emit('pluginsResults', results); + + // NOTE: probably not needed, because we check options.enabledPlugins in the constructor + // if (results.length === 0 /* && results.length !== this._plugins.length */) { + // this._error( + // new Error( + // `bad content-type header, unknown content-type: ${this.headers['content-type']}`, + // ), + // ); + // } + } + + _error(err, eventName = 'error') { + // if (!err && this.error) { + // this.emit('error', this.error); + // return; + // } + if (this.error || this.ended) { + return; + } + + this.error = err; + this.emit(eventName, err); + + if (Array.isArray(this.openedFiles)) { + this.openedFiles.forEach((file) => { + file.destroy(); + }); + } + } + + _parseContentLength() { + this.bytesReceived = 0; + if (this.headers['content-length']) { + this.bytesExpected = parseInt(this.headers['content-length'], 10); + } else if (this.headers['transfer-encoding'] === undefined) { + this.bytesExpected = 0; + } + + if (this.bytesExpected !== null) { + this.emit('progress', this.bytesReceived, this.bytesExpected); + } + } + + _newParser() { + return new MultipartParser(this.options); + } + + _newFile({ filepath, originalFilename, mimetype, newFilename }) { + return this.options.fileWriteStreamHandler + ? new VolatileFile({ + newFilename, + filepath, + originalFilename, + mimetype, + createFileWriteStream: this.options.fileWriteStreamHandler, + hashAlgorithm: this.options.hashAlgorithm, + }) + : new PersistentFile({ + newFilename, + filepath, + originalFilename, + mimetype, + hashAlgorithm: this.options.hashAlgorithm, + }); + } + + _getFileName(headerValue) { + // matches either a quoted-string or a token (RFC 2616 section 19.5.1) + const m = headerValue.match( + /\bfilename=("(.*?)"|([^()<>{}[\]@,;:"?=\s/\t]+))($|;\s)/i, + ); + if (!m) return null; + + const match = m[2] || m[3] || ''; + let originalFilename = match.substr(match.lastIndexOf('\\') + 1); + originalFilename = originalFilename.replace(/%22/g, '"'); + originalFilename = originalFilename.replace(/&#([\d]{4});/g, (_, code) => + String.fromCharCode(code), + ); + + return originalFilename; + } + + _getExtension(str) { + if (!str) { + return ''; + } + + const basename = path.basename(str); + const firstDot = basename.indexOf('.'); + const lastDot = basename.lastIndexOf('.'); + const extname = path.extname(basename).replace(/(\.[a-z0-9]+).*/i, '$1'); + + if (firstDot === lastDot) { + return extname; + } + + return basename.slice(firstDot, lastDot) + extname; + } + + + + _joinDirectoryName(name) { + const newPath = path.join(this.uploadDir, name); + + // prevent directory traversal attacks + if (!newPath.startsWith(this.uploadDir)) { + return path.join(this.uploadDir, this.options.defaultInvalidName); + } + + return newPath; + } + + _setUpRename() { + const hasRename = typeof this.options.filename === 'function'; + if (hasRename) { + this._getNewName = (part) => { + let ext = ''; + let name = this.options.defaultInvalidName; + if (part.originalFilename) { + // can be null + ({ ext, name } = path.parse(part.originalFilename)); + if (this.options.keepExtensions !== true) { + ext = ''; + } + } + return this.options.filename.call(this, name, ext, part, this); + }; + } else { + this._getNewName = (part) => { + const name = toHexoId(); + + if (part && this.options.keepExtensions) { + const originalFilename = typeof part === 'string' ? part : part.originalFilename; + return `${name}${this._getExtension(originalFilename)}`; + } + + return name; + } + } + } + + _setUpMaxFields() { + if (this.options.maxFields !== 0) { + let fieldsCount = 0; + this.on('field', () => { + fieldsCount += 1; + if (fieldsCount > this.options.maxFields) { + this._error( + new FormidableError( + `options.maxFields (${this.options.maxFields}) exceeded`, + errors.maxFieldsExceeded, + 413, + ), + ); + } + }); + } + } + + _maybeEnd() { + // console.log('ended', this.ended); + // console.log('_flushing', this._flushing); + // console.log('error', this.error); + if (!this.ended || this._flushing || this.error) { + return; + } + + this.emit('end'); + } +} + +IncomingForm.DEFAULT_OPTIONS = DEFAULT_OPTIONS; +module.exports = IncomingForm; diff --git a/build/node_modules/formidable/src/FormidableError.js b/build/node_modules/formidable/src/FormidableError.js new file mode 100644 index 00000000..da5c25f5 --- /dev/null +++ b/build/node_modules/formidable/src/FormidableError.js @@ -0,0 +1,45 @@ +/* eslint-disable no-plusplus */ + +const missingPlugin = 1000; +const pluginFunction = 1001; +const aborted = 1002; +const noParser = 1003; +const uninitializedParser = 1004; +const filenameNotString = 1005; +const maxFieldsSizeExceeded = 1006; +const maxFieldsExceeded = 1007; +const smallerThanMinFileSize = 1008; +const biggerThanMaxFileSize = 1009; +const noEmptyFiles = 1010; +const missingContentType = 1011; +const malformedMultipart = 1012; +const missingMultipartBoundary = 1013; +const unknownTransferEncoding = 1014; + +const FormidableError = class extends Error { + constructor(message, internalCode, httpCode = 500) { + super(message); + this.code = internalCode; + this.httpCode = httpCode; + } +}; + +module.exports = { + missingPlugin, + pluginFunction, + aborted, + noParser, + uninitializedParser, + filenameNotString, + maxFieldsSizeExceeded, + maxFieldsExceeded, + smallerThanMinFileSize, + biggerThanMaxFileSize, + noEmptyFiles, + missingContentType, + malformedMultipart, + missingMultipartBoundary, + unknownTransferEncoding, + + FormidableError, +}; diff --git a/build/node_modules/formidable/src/PersistentFile.js b/build/node_modules/formidable/src/PersistentFile.js new file mode 100644 index 00000000..3a28aa70 --- /dev/null +++ b/build/node_modules/formidable/src/PersistentFile.js @@ -0,0 +1,87 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const fs = require('fs'); +const crypto = require('crypto'); +const { EventEmitter } = require('events'); + +class PersistentFile extends EventEmitter { + constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm }) { + super(); + + this.lastModifiedDate = null; + Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm }); + + this.size = 0; + this._writeStream = null; + + if (typeof this.hashAlgorithm === 'string') { + this.hash = crypto.createHash(this.hashAlgorithm); + } else { + this.hash = null; + } + } + + open() { + this._writeStream = new fs.WriteStream(this.filepath); + this._writeStream.on('error', (err) => { + this.emit('error', err); + }); + } + + toJSON() { + const json = { + size: this.size, + filepath: this.filepath, + newFilename: this.newFilename, + mimetype: this.mimetype, + mtime: this.lastModifiedDate, + length: this.length, + originalFilename: this.originalFilename, + }; + if (this.hash && this.hash !== '') { + json.hash = this.hash; + } + return json; + } + + toString() { + return `PersistentFile: ${this._file.newFilename}, Original: ${this._file.originalFilename}, Path: ${this._file.filepath}`; + } + + write(buffer, cb) { + if (this.hash) { + this.hash.update(buffer); + } + + if (this._writeStream.closed) { + cb(); + return; + } + + this._writeStream.write(buffer, () => { + this.lastModifiedDate = new Date(); + this.size += buffer.length; + this.emit('progress', this.size); + cb(); + }); + } + + end(cb) { + if (this.hash) { + this.hash = this.hash.digest('hex'); + } + this._writeStream.end(() => { + this.emit('end'); + cb(); + }); + } + + destroy() { + this._writeStream.destroy(); + fs.unlink(this.filepath, () => {}); + } +} + +module.exports = PersistentFile; diff --git a/build/node_modules/formidable/src/VolatileFile.js b/build/node_modules/formidable/src/VolatileFile.js new file mode 100644 index 00000000..01af4286 --- /dev/null +++ b/build/node_modules/formidable/src/VolatileFile.js @@ -0,0 +1,82 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const crypto = require('crypto'); +const { EventEmitter } = require('events'); + +class VolatileFile extends EventEmitter { + constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream }) { + super(); + + this.lastModifiedDate = null; + Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm, createFileWriteStream }); + + this.size = 0; + this._writeStream = null; + + if (typeof this.hashAlgorithm === 'string') { + this.hash = crypto.createHash(this.hashAlgorithm); + } else { + this.hash = null; + } + } + + open() { + this._writeStream = this.createFileWriteStream(this); + this._writeStream.on('error', (err) => { + this.emit('error', err); + }); + } + + destroy() { + this._writeStream.destroy(); + } + + toJSON() { + const json = { + size: this.size, + newFilename: this.newFilename, + length: this.length, + originalFilename: this.originalFilename, + mimetype: this.mimetype, + }; + if (this.hash && this.hash !== '') { + json.hash = this.hash; + } + return json; + } + + toString() { + return `VolatileFile: ${this.originalFilename}`; + } + + write(buffer, cb) { + if (this.hash) { + this.hash.update(buffer); + } + + if (this._writeStream.closed || this._writeStream.destroyed) { + cb(); + return; + } + + this._writeStream.write(buffer, () => { + this.size += buffer.length; + this.emit('progress', this.size); + cb(); + }); + } + + end(cb) { + if (this.hash) { + this.hash = this.hash.digest('hex'); + } + this._writeStream.end(() => { + this.emit('end'); + cb(); + }); + } +} + +module.exports = VolatileFile; diff --git a/build/node_modules/formidable/src/index.js b/build/node_modules/formidable/src/index.js new file mode 100644 index 00000000..bf555a92 --- /dev/null +++ b/build/node_modules/formidable/src/index.js @@ -0,0 +1,38 @@ +'use strict'; + +const PersistentFile = require('./PersistentFile'); +const VolatileFile = require('./VolatileFile'); +const Formidable = require('./Formidable'); +const FormidableError = require('./FormidableError'); + +const plugins = require('./plugins/index'); +const parsers = require('./parsers/index'); + +// make it available without requiring the `new` keyword +// if you want it access `const formidable.IncomingForm` as v1 +const formidable = (...args) => new Formidable(...args); + +module.exports = Object.assign(formidable, { + errors: FormidableError, + File: PersistentFile, + PersistentFile, + VolatileFile, + Formidable, + formidable, + + // alias + IncomingForm: Formidable, + + // parsers + ...parsers, + parsers, + + // misc + defaultOptions: Formidable.DEFAULT_OPTIONS, + enabledPlugins: Formidable.DEFAULT_OPTIONS.enabledPlugins, + + // plugins + plugins: { + ...plugins, + }, +}); diff --git a/build/node_modules/formidable/src/parsers/Dummy.js b/build/node_modules/formidable/src/parsers/Dummy.js new file mode 100644 index 00000000..63409597 --- /dev/null +++ b/build/node_modules/formidable/src/parsers/Dummy.js @@ -0,0 +1,21 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Transform } = require('stream'); + +class DummyParser extends Transform { + constructor(incomingForm, options = {}) { + super(); + this.globalOptions = { ...options }; + this.incomingForm = incomingForm; + } + + _flush(callback) { + this.incomingForm.ended = true; + this.incomingForm._maybeEnd(); + callback(); + } +} + +module.exports = DummyParser; diff --git a/build/node_modules/formidable/src/parsers/JSON.js b/build/node_modules/formidable/src/parsers/JSON.js new file mode 100644 index 00000000..9a096c25 --- /dev/null +++ b/build/node_modules/formidable/src/parsers/JSON.js @@ -0,0 +1,35 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Transform } = require('stream'); + +class JSONParser extends Transform { + constructor(options = {}) { + super({ readableObjectMode: true }); + this.chunks = []; + this.globalOptions = { ...options }; + } + + _transform(chunk, encoding, callback) { + this.chunks.push(String(chunk)); // todo consider using a string decoder + callback(); + } + + _flush(callback) { + try { + const fields = JSON.parse(this.chunks.join('')); + Object.keys(fields).forEach((key) => { + const value = fields[key]; + this.push({ key, value }); + }); + } catch (e) { + callback(e); + return; + } + this.chunks = null; + callback(); + } +} + +module.exports = JSONParser; diff --git a/build/node_modules/formidable/src/parsers/Multipart.js b/build/node_modules/formidable/src/parsers/Multipart.js new file mode 100644 index 00000000..23a298aa --- /dev/null +++ b/build/node_modules/formidable/src/parsers/Multipart.js @@ -0,0 +1,347 @@ +/* eslint-disable no-fallthrough */ +/* eslint-disable no-bitwise */ +/* eslint-disable no-plusplus */ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Transform } = require('stream'); +const errors = require('../FormidableError.js'); + +const { FormidableError } = errors; + +let s = 0; +const STATE = { + PARSER_UNINITIALIZED: s++, + START: s++, + START_BOUNDARY: s++, + HEADER_FIELD_START: s++, + HEADER_FIELD: s++, + HEADER_VALUE_START: s++, + HEADER_VALUE: s++, + HEADER_VALUE_ALMOST_DONE: s++, + HEADERS_ALMOST_DONE: s++, + PART_DATA_START: s++, + PART_DATA: s++, + PART_END: s++, + END: s++, +}; + +let f = 1; +const FBOUNDARY = { PART_BOUNDARY: f, LAST_BOUNDARY: (f *= 2) }; + +const LF = 10; +const CR = 13; +const SPACE = 32; +const HYPHEN = 45; +const COLON = 58; +const A = 97; +const Z = 122; + +function lower(c) { + return c | 0x20; +} + +exports.STATES = {}; + +Object.keys(STATE).forEach((stateName) => { + exports.STATES[stateName] = STATE[stateName]; +}); + +class MultipartParser extends Transform { + constructor(options = {}) { + super({ readableObjectMode: true }); + this.boundary = null; + this.boundaryChars = null; + this.lookbehind = null; + this.bufferLength = 0; + this.state = STATE.PARSER_UNINITIALIZED; + + this.globalOptions = { ...options }; + this.index = null; + this.flags = 0; + } + + _flush(done) { + if ( + (this.state === STATE.HEADER_FIELD_START && this.index === 0) || + (this.state === STATE.PART_DATA && this.index === this.boundary.length) + ) { + this._handleCallback('partEnd'); + this._handleCallback('end'); + done(); + } else if (this.state !== STATE.END) { + done( + new FormidableError( + `MultipartParser.end(): stream ended unexpectedly: ${this.explain()}`, + errors.malformedMultipart, + 400, + ), + ); + } + } + + initWithBoundary(str) { + this.boundary = Buffer.from(`\r\n--${str}`); + this.lookbehind = Buffer.alloc(this.boundary.length + 8); + this.state = STATE.START; + this.boundaryChars = {}; + + for (let i = 0; i < this.boundary.length; i++) { + this.boundaryChars[this.boundary[i]] = true; + } + } + + // eslint-disable-next-line max-params + _handleCallback(name, buf, start, end) { + if (start !== undefined && start === end) { + return; + } + this.push({ name, buffer: buf, start, end }); + } + + // eslint-disable-next-line max-statements + _transform(buffer, _, done) { + let i = 0; + let prevIndex = this.index; + let { index, state, flags } = this; + const { lookbehind, boundary, boundaryChars } = this; + const boundaryLength = boundary.length; + const boundaryEnd = boundaryLength - 1; + this.bufferLength = buffer.length; + let c = null; + let cl = null; + + const setMark = (name, idx) => { + this[`${name}Mark`] = typeof idx === 'number' ? idx : i; + }; + + const clearMarkSymbol = (name) => { + delete this[`${name}Mark`]; + }; + + const dataCallback = (name, shouldClear) => { + const markSymbol = `${name}Mark`; + if (!(markSymbol in this)) { + return; + } + + if (!shouldClear) { + this._handleCallback(name, buffer, this[markSymbol], buffer.length); + setMark(name, 0); + } else { + this._handleCallback(name, buffer, this[markSymbol], i); + clearMarkSymbol(name); + } + }; + + for (i = 0; i < this.bufferLength; i++) { + c = buffer[i]; + switch (state) { + case STATE.PARSER_UNINITIALIZED: + return i; + case STATE.START: + index = 0; + state = STATE.START_BOUNDARY; + case STATE.START_BOUNDARY: + if (index === boundary.length - 2) { + if (c === HYPHEN) { + flags |= FBOUNDARY.LAST_BOUNDARY; + } else if (c !== CR) { + return i; + } + index++; + break; + } else if (index - 1 === boundary.length - 2) { + if (flags & FBOUNDARY.LAST_BOUNDARY && c === HYPHEN) { + this._handleCallback('end'); + state = STATE.END; + flags = 0; + } else if (!(flags & FBOUNDARY.LAST_BOUNDARY) && c === LF) { + index = 0; + this._handleCallback('partBegin'); + state = STATE.HEADER_FIELD_START; + } else { + return i; + } + break; + } + + if (c !== boundary[index + 2]) { + index = -2; + } + if (c === boundary[index + 2]) { + index++; + } + break; + case STATE.HEADER_FIELD_START: + state = STATE.HEADER_FIELD; + setMark('headerField'); + index = 0; + case STATE.HEADER_FIELD: + if (c === CR) { + clearMarkSymbol('headerField'); + state = STATE.HEADERS_ALMOST_DONE; + break; + } + + index++; + if (c === HYPHEN) { + break; + } + + if (c === COLON) { + if (index === 1) { + // empty header field + return i; + } + dataCallback('headerField', true); + state = STATE.HEADER_VALUE_START; + break; + } + + cl = lower(c); + if (cl < A || cl > Z) { + return i; + } + break; + case STATE.HEADER_VALUE_START: + if (c === SPACE) { + break; + } + + setMark('headerValue'); + state = STATE.HEADER_VALUE; + case STATE.HEADER_VALUE: + if (c === CR) { + dataCallback('headerValue', true); + this._handleCallback('headerEnd'); + state = STATE.HEADER_VALUE_ALMOST_DONE; + } + break; + case STATE.HEADER_VALUE_ALMOST_DONE: + if (c !== LF) { + return i; + } + state = STATE.HEADER_FIELD_START; + break; + case STATE.HEADERS_ALMOST_DONE: + if (c !== LF) { + return i; + } + + this._handleCallback('headersEnd'); + state = STATE.PART_DATA_START; + break; + case STATE.PART_DATA_START: + state = STATE.PART_DATA; + setMark('partData'); + case STATE.PART_DATA: + prevIndex = index; + + if (index === 0) { + // boyer-moore derrived algorithm to safely skip non-boundary data + i += boundaryEnd; + while (i < this.bufferLength && !(buffer[i] in boundaryChars)) { + i += boundaryLength; + } + i -= boundaryEnd; + c = buffer[i]; + } + + if (index < boundary.length) { + if (boundary[index] === c) { + if (index === 0) { + dataCallback('partData', true); + } + index++; + } else { + index = 0; + } + } else if (index === boundary.length) { + index++; + if (c === CR) { + // CR = part boundary + flags |= FBOUNDARY.PART_BOUNDARY; + } else if (c === HYPHEN) { + // HYPHEN = end boundary + flags |= FBOUNDARY.LAST_BOUNDARY; + } else { + index = 0; + } + } else if (index - 1 === boundary.length) { + if (flags & FBOUNDARY.PART_BOUNDARY) { + index = 0; + if (c === LF) { + // unset the PART_BOUNDARY flag + flags &= ~FBOUNDARY.PART_BOUNDARY; + this._handleCallback('partEnd'); + this._handleCallback('partBegin'); + state = STATE.HEADER_FIELD_START; + break; + } + } else if (flags & FBOUNDARY.LAST_BOUNDARY) { + if (c === HYPHEN) { + this._handleCallback('partEnd'); + this._handleCallback('end'); + state = STATE.END; + flags = 0; + } else { + index = 0; + } + } else { + index = 0; + } + } + + if (index > 0) { + // when matching a possible boundary, keep a lookbehind reference + // in case it turns out to be a false lead + lookbehind[index - 1] = c; + } else if (prevIndex > 0) { + // if our boundary turned out to be rubbish, the captured lookbehind + // belongs to partData + this._handleCallback('partData', lookbehind, 0, prevIndex); + prevIndex = 0; + setMark('partData'); + + // reconsider the current character even so it interrupted the sequence + // it could be the beginning of a new sequence + i--; + } + + break; + case STATE.END: + break; + default: + return i; + } + } + + dataCallback('headerField'); + dataCallback('headerValue'); + dataCallback('partData'); + + this.index = index; + this.state = state; + this.flags = flags; + + done(); + return this.bufferLength; + } + + explain() { + return `state = ${MultipartParser.stateToString(this.state)}`; + } +} + +// eslint-disable-next-line consistent-return +MultipartParser.stateToString = (stateNumber) => { + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (const stateName in STATE) { + const number = STATE[stateName]; + if (number === stateNumber) return stateName; + } +}; + +module.exports = Object.assign(MultipartParser, { STATES: exports.STATES }); diff --git a/build/node_modules/formidable/src/parsers/OctetStream.js b/build/node_modules/formidable/src/parsers/OctetStream.js new file mode 100644 index 00000000..cdf55f23 --- /dev/null +++ b/build/node_modules/formidable/src/parsers/OctetStream.js @@ -0,0 +1,12 @@ +'use strict'; + +const { PassThrough } = require('stream'); + +class OctetStreamParser extends PassThrough { + constructor(options = {}) { + super(); + this.globalOptions = { ...options }; + } +} + +module.exports = OctetStreamParser; diff --git a/build/node_modules/formidable/src/parsers/Querystring.js b/build/node_modules/formidable/src/parsers/Querystring.js new file mode 100644 index 00000000..a0d4243d --- /dev/null +++ b/build/node_modules/formidable/src/parsers/Querystring.js @@ -0,0 +1,38 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Transform } = require('stream'); +const querystring = require('querystring'); + +// This is a buffering parser, not quite as nice as the multipart one. +// If I find time I'll rewrite this to be fully streaming as well +class QuerystringParser extends Transform { + constructor(options = {}) { + super({ readableObjectMode: true }); + this.globalOptions = { ...options }; + this.buffer = ''; + this.bufferLength = 0; + } + + _transform(buffer, encoding, callback) { + this.buffer += buffer.toString('ascii'); + this.bufferLength = this.buffer.length; + callback(); + } + + _flush(callback) { + const fields = querystring.parse(this.buffer, '&', '='); + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (const key in fields) { + this.push({ + key, + value: fields[key], + }); + } + this.buffer = ''; + callback(); + } +} + +module.exports = QuerystringParser; diff --git a/build/node_modules/formidable/src/parsers/StreamingQuerystring.js b/build/node_modules/formidable/src/parsers/StreamingQuerystring.js new file mode 100644 index 00000000..06d7577a --- /dev/null +++ b/build/node_modules/formidable/src/parsers/StreamingQuerystring.js @@ -0,0 +1,121 @@ +// not used +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Transform } = require('stream'); +const errors = require('../FormidableError.js'); + +const { FormidableError } = errors; + +const AMPERSAND = 38; +const EQUALS = 61; + +class QuerystringParser extends Transform { + constructor(options = {}) { + super({ readableObjectMode: true }); + + const { maxFieldSize } = options; + this.maxFieldLength = maxFieldSize; + this.buffer = Buffer.from(''); + this.fieldCount = 0; + this.sectionStart = 0; + this.key = ''; + this.readingKey = true; + } + + _transform(buffer, encoding, callback) { + let len = buffer.length; + if (this.buffer && this.buffer.length) { + // we have some data left over from the last write which we are in the middle of processing + len += this.buffer.length; + buffer = Buffer.concat([this.buffer, buffer], len); + } + + for (let i = this.buffer.length || 0; i < len; i += 1) { + const c = buffer[i]; + if (this.readingKey) { + // KEY, check for = + if (c === EQUALS) { + this.key = this.getSection(buffer, i); + this.readingKey = false; + this.sectionStart = i + 1; + } else if (c === AMPERSAND) { + // just key, no value. Prepare to read another key + this.emitField(this.getSection(buffer, i)); + this.sectionStart = i + 1; + } + // VALUE, check for & + } else if (c === AMPERSAND) { + this.emitField(this.key, this.getSection(buffer, i)); + this.sectionStart = i + 1; + } + + if ( + this.maxFieldLength && + i - this.sectionStart === this.maxFieldLength + ) { + callback( + new FormidableError( + `${ + this.readingKey ? 'Key' : `Value for ${this.key}` + } longer than maxFieldLength`, + ), + errors.maxFieldsSizeExceeded, + 413, + ); + } + } + + // Prepare the remaining key or value (from sectionStart to the end) for the next write() or for end() + len -= this.sectionStart; + if (len) { + // i.e. Unless the last character was a & or = + this.buffer = Buffer.from(this.buffer, 0, this.sectionStart); + } else this.buffer = null; + + this.sectionStart = 0; + callback(); + } + + _flush(callback) { + // Emit the last field + if (this.readingKey) { + // we only have a key if there's something in the buffer. We definitely have no value + if (this.buffer && this.buffer.length){ + this.emitField(this.buffer.toString('ascii')); + } + } else { + // We have a key, we may or may not have a value + this.emitField( + this.key, + this.buffer && this.buffer.length && this.buffer.toString('ascii'), + ); + } + this.buffer = ''; + callback(); + } + + getSection(buffer, i) { + if (i === this.sectionStart) return ''; + + return buffer.toString('ascii', this.sectionStart, i); + } + + emitField(key, val) { + this.key = ''; + this.readingKey = true; + this.push({ key, value: val || '' }); + } +} + +module.exports = QuerystringParser; + +// const q = new QuerystringParser({maxFieldSize: 100}); +// (async function() { +// for await (const chunk of q) { +// console.log(chunk); +// } +// })(); +// q.write("a=b&c=d") +// q.end() diff --git a/build/node_modules/formidable/src/parsers/index.js b/build/node_modules/formidable/src/parsers/index.js new file mode 100644 index 00000000..bbf9ef63 --- /dev/null +++ b/build/node_modules/formidable/src/parsers/index.js @@ -0,0 +1,17 @@ +'use strict'; + +const JSONParser = require('./JSON'); +const DummyParser = require('./Dummy'); +const MultipartParser = require('./Multipart'); +const OctetStreamParser = require('./OctetStream'); +const QueryStringParser = require('./Querystring'); + +Object.assign(exports, { + JSONParser, + DummyParser, + MultipartParser, + OctetStreamParser, + OctetstreamParser: OctetStreamParser, + QueryStringParser, + QuerystringParser: QueryStringParser, +}); diff --git a/build/node_modules/formidable/src/plugins/index.js b/build/node_modules/formidable/src/plugins/index.js new file mode 100644 index 00000000..cbd491af --- /dev/null +++ b/build/node_modules/formidable/src/plugins/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const octetstream = require('./octetstream'); +const querystring = require('./querystring'); +const multipart = require('./multipart'); +const json = require('./json'); + +Object.assign(exports, { + octetstream, + querystring, + multipart, + json, +}); diff --git a/build/node_modules/formidable/src/plugins/json.js b/build/node_modules/formidable/src/plugins/json.js new file mode 100644 index 00000000..20d3b261 --- /dev/null +++ b/build/node_modules/formidable/src/plugins/json.js @@ -0,0 +1,38 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const JSONParser = require('../parsers/JSON'); + +// the `options` is also available through the `this.options` / `formidable.options` +module.exports = function plugin(formidable, options) { + // the `this` context is always formidable, as the first argument of a plugin + // but this allows us to customize/test each plugin + + /* istanbul ignore next */ + const self = this || formidable; + + if (/json/i.test(self.headers['content-type'])) { + init.call(self, self, options); + } +}; + +// Note that it's a good practice (but it's up to you) to use the `this.options` instead +// of the passed `options` (second) param, because when you decide +// to test the plugin you can pass custom `this` context to it (and so `this.options`) +function init(_self, _opts) { + this.type = 'json'; + + const parser = new JSONParser(this.options); + + parser.on('data', ({ key, value }) => { + this.emit('field', key, value); + }); + + parser.once('end', () => { + this.ended = true; + this._maybeEnd(); + }); + + this._parser = parser; +} diff --git a/build/node_modules/formidable/src/plugins/multipart.js b/build/node_modules/formidable/src/plugins/multipart.js new file mode 100644 index 00000000..ba07373b --- /dev/null +++ b/build/node_modules/formidable/src/plugins/multipart.js @@ -0,0 +1,173 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const { Stream } = require('stream'); +const MultipartParser = require('../parsers/Multipart'); +const errors = require('../FormidableError.js'); + +const { FormidableError } = errors; + +// the `options` is also available through the `options` / `formidable.options` +module.exports = function plugin(formidable, options) { + // the `this` context is always formidable, as the first argument of a plugin + // but this allows us to customize/test each plugin + + /* istanbul ignore next */ + const self = this || formidable; + + // NOTE: we (currently) support both multipart/form-data and multipart/related + const multipart = /multipart/i.test(self.headers['content-type']); + + if (multipart) { + const m = self.headers['content-type'].match( + /boundary=(?:"([^"]+)"|([^;]+))/i, + ); + if (m) { + const initMultipart = createInitMultipart(m[1] || m[2]); + initMultipart.call(self, self, options); // lgtm [js/superfluous-trailing-arguments] + } else { + const err = new FormidableError( + 'bad content-type header, no multipart boundary', + errors.missingMultipartBoundary, + 400, + ); + self._error(err); + } + } +}; + +// Note that it's a good practice (but it's up to you) to use the `this.options` instead +// of the passed `options` (second) param, because when you decide +// to test the plugin you can pass custom `this` context to it (and so `this.options`) +function createInitMultipart(boundary) { + return function initMultipart() { + this.type = 'multipart'; + + const parser = new MultipartParser(this.options); + let headerField; + let headerValue; + let part; + + parser.initWithBoundary(boundary); + + // eslint-disable-next-line max-statements, consistent-return + parser.on('data', ({ name, buffer, start, end }) => { + if (name === 'partBegin') { + part = new Stream(); + part.readable = true; + part.headers = {}; + part.name = null; + part.originalFilename = null; + part.mimetype = null; + + part.transferEncoding = this.options.encoding; + part.transferBuffer = ''; + + headerField = ''; + headerValue = ''; + } else if (name === 'headerField') { + headerField += buffer.toString(this.options.encoding, start, end); + } else if (name === 'headerValue') { + headerValue += buffer.toString(this.options.encoding, start, end); + } else if (name === 'headerEnd') { + headerField = headerField.toLowerCase(); + part.headers[headerField] = headerValue; + + // matches either a quoted-string or a token (RFC 2616 section 19.5.1) + const m = headerValue.match( + // eslint-disable-next-line no-useless-escape + /\bname=("([^"]*)"|([^\(\)<>@,;:\\"\/\[\]\?=\{\}\s\t/]+))/i, + ); + if (headerField === 'content-disposition') { + if (m) { + part.name = m[2] || m[3] || ''; + } + + part.originalFilename = this._getFileName(headerValue); + } else if (headerField === 'content-type') { + part.mimetype = headerValue; + } else if (headerField === 'content-transfer-encoding') { + part.transferEncoding = headerValue.toLowerCase(); + } + + headerField = ''; + headerValue = ''; + } else if (name === 'headersEnd') { + switch (part.transferEncoding) { + case 'binary': + case '7bit': + case '8bit': + case 'utf-8': { + const dataPropagation = (ctx) => { + if (ctx.name === 'partData') { + part.emit('data', ctx.buffer.slice(ctx.start, ctx.end)); + } + }; + const dataStopPropagation = (ctx) => { + if (ctx.name === 'partEnd') { + part.emit('end'); + parser.off('data', dataPropagation); + parser.off('data', dataStopPropagation); + } + }; + parser.on('data', dataPropagation); + parser.on('data', dataStopPropagation); + break; + } + case 'base64': { + const dataPropagation = (ctx) => { + if (ctx.name === 'partData') { + part.transferBuffer += ctx.buffer + .slice(ctx.start, ctx.end) + .toString('ascii'); + + /* + four bytes (chars) in base64 converts to three bytes in binary + encoding. So we should always work with a number of bytes that + can be divided by 4, it will result in a number of buytes that + can be divided vy 3. + */ + const offset = parseInt(part.transferBuffer.length / 4, 10) * 4; + part.emit( + 'data', + Buffer.from( + part.transferBuffer.substring(0, offset), + 'base64', + ), + ); + part.transferBuffer = part.transferBuffer.substring(offset); + } + }; + const dataStopPropagation = (ctx) => { + if (ctx.name === 'partEnd') { + part.emit('data', Buffer.from(part.transferBuffer, 'base64')); + part.emit('end'); + parser.off('data', dataPropagation); + parser.off('data', dataStopPropagation); + } + }; + parser.on('data', dataPropagation); + parser.on('data', dataStopPropagation); + break; + } + default: + return this._error( + new FormidableError( + 'unknown transfer-encoding', + errors.unknownTransferEncoding, + 501, + ), + ); + } + + this.onPart(part); + } else if (name === 'end') { + this.ended = true; + this._maybeEnd(); + } + }); + + this._parser = parser; + }; +} diff --git a/build/node_modules/formidable/src/plugins/octetstream.js b/build/node_modules/formidable/src/plugins/octetstream.js new file mode 100644 index 00000000..96fee406 --- /dev/null +++ b/build/node_modules/formidable/src/plugins/octetstream.js @@ -0,0 +1,86 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const OctetStreamParser = require('../parsers/OctetStream'); + +// the `options` is also available through the `options` / `formidable.options` +module.exports = function plugin(formidable, options) { + // the `this` context is always formidable, as the first argument of a plugin + // but this allows us to customize/test each plugin + + /* istanbul ignore next */ + const self = this || formidable; + + if (/octet-stream/i.test(self.headers['content-type'])) { + init.call(self, self, options); + } + + return self; +}; + +// Note that it's a good practice (but it's up to you) to use the `this.options` instead +// of the passed `options` (second) param, because when you decide +// to test the plugin you can pass custom `this` context to it (and so `this.options`) +function init(_self, _opts) { + this.type = 'octet-stream'; + const originalFilename = this.headers['x-file-name']; + const mimetype = this.headers['content-type']; + + const thisPart = { + originalFilename, + mimetype, + }; + const newFilename = this._getNewName(thisPart); + const filepath = this._joinDirectoryName(newFilename); + const file = this._newFile({ + newFilename, + filepath, + originalFilename, + mimetype, + }); + + this.emit('fileBegin', originalFilename, file); + file.open(); + this.openedFiles.push(file); + this._flushing += 1; + + this._parser = new OctetStreamParser(this.options); + + // Keep track of writes that haven't finished so we don't emit the file before it's done being written + let outstandingWrites = 0; + + this._parser.on('data', (buffer) => { + this.pause(); + outstandingWrites += 1; + + file.write(buffer, () => { + outstandingWrites -= 1; + this.resume(); + + if (this.ended) { + this._parser.emit('doneWritingFile'); + } + }); + }); + + this._parser.on('end', () => { + this._flushing -= 1; + this.ended = true; + + const done = () => { + file.end(() => { + this.emit('file', 'file', file); + this._maybeEnd(); + }); + }; + + if (outstandingWrites === 0) { + done(); + } else { + this._parser.once('doneWritingFile', done); + } + }); + + return this; +} diff --git a/build/node_modules/formidable/src/plugins/querystring.js b/build/node_modules/formidable/src/plugins/querystring.js new file mode 100644 index 00000000..c9dcf1ec --- /dev/null +++ b/build/node_modules/formidable/src/plugins/querystring.js @@ -0,0 +1,42 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const QuerystringParser = require('../parsers/Querystring'); + +// the `options` is also available through the `this.options` / `formidable.options` +module.exports = function plugin(formidable, options) { + // the `this` context is always formidable, as the first argument of a plugin + // but this allows us to customize/test each plugin + + /* istanbul ignore next */ + const self = this || formidable; + + if (/urlencoded/i.test(self.headers['content-type'])) { + init.call(self, self, options); + } + + return self; +}; + +// Note that it's a good practice (but it's up to you) to use the `this.options` instead +// of the passed `options` (second) param, because when you decide +// to test the plugin you can pass custom `this` context to it (and so `this.options`) +function init(_self, _opts) { + this.type = 'urlencoded'; + + const parser = new QuerystringParser(this.options); + + parser.on('data', ({ key, value }) => { + this.emit('field', key, value); + }); + + parser.once('end', () => { + this.ended = true; + this._maybeEnd(); + }); + + this._parser = parser; + + return this; +} diff --git a/build/node_modules/fs.realpath/LICENSE b/build/node_modules/fs.realpath/LICENSE new file mode 100644 index 00000000..5bd884c2 --- /dev/null +++ b/build/node_modules/fs.realpath/LICENSE @@ -0,0 +1,43 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/fs.realpath/README.md b/build/node_modules/fs.realpath/README.md new file mode 100644 index 00000000..a42ceac6 --- /dev/null +++ b/build/node_modules/fs.realpath/README.md @@ -0,0 +1,33 @@ +# fs.realpath + +A backwards-compatible fs.realpath for Node v6 and above + +In Node v6, the JavaScript implementation of fs.realpath was replaced +with a faster (but less resilient) native implementation. That raises +new and platform-specific errors and cannot handle long or excessively +symlink-looping paths. + +This module handles those cases by detecting the new errors and +falling back to the JavaScript implementation. On versions of Node +prior to v6, it has no effect. + +## USAGE + +```js +var rp = require('fs.realpath') + +// async version +rp.realpath(someLongAndLoopingPath, function (er, real) { + // the ELOOP was handled, but it was a bit slower +}) + +// sync version +var real = rp.realpathSync(someLongAndLoopingPath) + +// monkeypatch at your own risk! +// This replaces the fs.realpath/fs.realpathSync builtins +rp.monkeypatch() + +// un-do the monkeypatching +rp.unmonkeypatch() +``` diff --git a/build/node_modules/fs.realpath/index.js b/build/node_modules/fs.realpath/index.js new file mode 100644 index 00000000..b09c7c7e --- /dev/null +++ b/build/node_modules/fs.realpath/index.js @@ -0,0 +1,66 @@ +module.exports = realpath +realpath.realpath = realpath +realpath.sync = realpathSync +realpath.realpathSync = realpathSync +realpath.monkeypatch = monkeypatch +realpath.unmonkeypatch = unmonkeypatch + +var fs = require('fs') +var origRealpath = fs.realpath +var origRealpathSync = fs.realpathSync + +var version = process.version +var ok = /^v[0-5]\./.test(version) +var old = require('./old.js') + +function newError (er) { + return er && er.syscall === 'realpath' && ( + er.code === 'ELOOP' || + er.code === 'ENOMEM' || + er.code === 'ENAMETOOLONG' + ) +} + +function realpath (p, cache, cb) { + if (ok) { + return origRealpath(p, cache, cb) + } + + if (typeof cache === 'function') { + cb = cache + cache = null + } + origRealpath(p, cache, function (er, result) { + if (newError(er)) { + old.realpath(p, cache, cb) + } else { + cb(er, result) + } + }) +} + +function realpathSync (p, cache) { + if (ok) { + return origRealpathSync(p, cache) + } + + try { + return origRealpathSync(p, cache) + } catch (er) { + if (newError(er)) { + return old.realpathSync(p, cache) + } else { + throw er + } + } +} + +function monkeypatch () { + fs.realpath = realpath + fs.realpathSync = realpathSync +} + +function unmonkeypatch () { + fs.realpath = origRealpath + fs.realpathSync = origRealpathSync +} diff --git a/build/node_modules/fs.realpath/old.js b/build/node_modules/fs.realpath/old.js new file mode 100644 index 00000000..b40305e7 --- /dev/null +++ b/build/node_modules/fs.realpath/old.js @@ -0,0 +1,303 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var pathModule = require('path'); +var isWindows = process.platform === 'win32'; +var fs = require('fs'); + +// JavaScript implementation of realpath, ported from node pre-v6 + +var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); + +function rethrow() { + // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and + // is fairly slow to generate. + var callback; + if (DEBUG) { + var backtrace = new Error; + callback = debugCallback; + } else + callback = missingCallback; + + return callback; + + function debugCallback(err) { + if (err) { + backtrace.message = err.message; + err = backtrace; + missingCallback(err); + } + } + + function missingCallback(err) { + if (err) { + if (process.throwDeprecation) + throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs + else if (!process.noDeprecation) { + var msg = 'fs: missing callback ' + (err.stack || err.message); + if (process.traceDeprecation) + console.trace(msg); + else + console.error(msg); + } + } + } +} + +function maybeCallback(cb) { + return typeof cb === 'function' ? cb : rethrow(); +} + +var normalize = pathModule.normalize; + +// Regexp that finds the next partion of a (partial) path +// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] +if (isWindows) { + var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; +} else { + var nextPartRe = /(.*?)(?:[\/]+|$)/g; +} + +// Regex to find the device root, including trailing slash. E.g. 'c:\\'. +if (isWindows) { + var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; +} else { + var splitRootRe = /^[\/]*/; +} + +exports.realpathSync = function realpathSync(p, cache) { + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return cache[p]; + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstatSync(base); + knownHard[base] = true; + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + // NB: p.length changes. + while (pos < p.length) { + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + continue; + } + + var resolvedLink; + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // some known symbolic link. no need to stat again. + resolvedLink = cache[base]; + } else { + var stat = fs.lstatSync(base); + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + continue; + } + + // read the link if it wasn't read before + // dev/ino always return 0 on windows, so skip the check. + var linkTarget = null; + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + linkTarget = seenLinks[id]; + } + } + if (linkTarget === null) { + fs.statSync(base); + linkTarget = fs.readlinkSync(base); + } + resolvedLink = pathModule.resolve(previous, linkTarget); + // track this, if given a cache. + if (cache) cache[base] = resolvedLink; + if (!isWindows) seenLinks[id] = linkTarget; + } + + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } + + if (cache) cache[original] = p; + + return p; +}; + + +exports.realpath = function realpath(p, cache, cb) { + if (typeof cb !== 'function') { + cb = maybeCallback(cache); + cache = null; + } + + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return process.nextTick(cb.bind(null, null, cache[p])); + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstat(base, function(err) { + if (err) return cb(err); + knownHard[base] = true; + LOOP(); + }); + } else { + process.nextTick(LOOP); + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + function LOOP() { + // stop if scanned past end of path + if (pos >= p.length) { + if (cache) cache[original] = p; + return cb(null, p); + } + + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + return process.nextTick(LOOP); + } + + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // known symbolic link. no need to stat again. + return gotResolvedLink(cache[base]); + } + + return fs.lstat(base, gotStat); + } + + function gotStat(err, stat) { + if (err) return cb(err); + + // if not a symlink, skip to the next path part + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + return process.nextTick(LOOP); + } + + // stat & read the link if not read before + // call gotTarget as soon as the link target is known + // dev/ino always return 0 on windows, so skip the check. + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + return gotTarget(null, seenLinks[id], base); + } + } + fs.stat(base, function(err) { + if (err) return cb(err); + + fs.readlink(base, function(err, target) { + if (!isWindows) seenLinks[id] = target; + gotTarget(err, target); + }); + }); + } + + function gotTarget(err, target, base) { + if (err) return cb(err); + + var resolvedLink = pathModule.resolve(previous, target); + if (cache) cache[base] = resolvedLink; + gotResolvedLink(resolvedLink); + } + + function gotResolvedLink(resolvedLink) { + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } +}; diff --git a/build/node_modules/fs.realpath/package.json b/build/node_modules/fs.realpath/package.json new file mode 100644 index 00000000..25c707ec --- /dev/null +++ b/build/node_modules/fs.realpath/package.json @@ -0,0 +1,59 @@ +{ + "_from": "fs.realpath@^1.0.0", + "_id": "fs.realpath@1.0.0", + "_inBundle": false, + "_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "_location": "/fs.realpath", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fs.realpath@^1.0.0", + "name": "fs.realpath", + "escapedName": "fs.realpath", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", + "_spec": "fs.realpath@^1.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/fs.realpath/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", + "devDependencies": {}, + "files": [ + "old.js", + "index.js" + ], + "homepage": "https://github.com/isaacs/fs.realpath#readme", + "keywords": [ + "realpath", + "fs", + "polyfill" + ], + "license": "ISC", + "main": "index.js", + "name": "fs.realpath", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/fs.realpath.git" + }, + "scripts": { + "test": "tap test/*.js --cov" + }, + "version": "1.0.0" +} diff --git a/build/node_modules/function-bind/package.json b/build/node_modules/function-bind/package.json index bc6b67f8..391d5555 100644 --- a/build/node_modules/function-bind/package.json +++ b/build/node_modules/function-bind/package.json @@ -17,13 +17,10 @@ }, "_requiredBy": [ "/call-bind", - "/es-abstract", "/get-intrinsic", - "/has", - "/unbox-primitive", - "/which-typed-array" + "/has" ], - "_resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/function-bind/-/function-bind-1.1.1.tgz", "_shasum": "a56899d3ea3c9bab874bb9773b7c5ede92f4895d", "_spec": "function-bind@^1.1.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/call-bind", diff --git a/build/node_modules/fwd-stream/node_modules/isarray/package.json b/build/node_modules/fwd-stream/node_modules/isarray/package.json index 7fdd1134..77fd7089 100644 --- a/build/node_modules/fwd-stream/node_modules/isarray/package.json +++ b/build/node_modules/fwd-stream/node_modules/isarray/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/fwd-stream/readable-stream" ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", "_spec": "isarray@0.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/fwd-stream/node_modules/readable-stream", diff --git a/build/node_modules/fwd-stream/node_modules/readable-stream/package.json b/build/node_modules/fwd-stream/node_modules/readable-stream/package.json index abc2aadf..686cfe41 100644 --- a/build/node_modules/fwd-stream/node_modules/readable-stream/package.json +++ b/build/node_modules/fwd-stream/node_modules/readable-stream/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/fwd-stream" ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.0.34.tgz", "_shasum": "125820e34bc842d2f2aaafafe4c2916ee32c157c", "_spec": "readable-stream@~1.0.26-4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/fwd-stream", diff --git a/build/node_modules/fwd-stream/node_modules/string_decoder/package.json b/build/node_modules/fwd-stream/node_modules/string_decoder/package.json index 0ec885e5..9c0b1ae5 100644 --- a/build/node_modules/fwd-stream/node_modules/string_decoder/package.json +++ b/build/node_modules/fwd-stream/node_modules/string_decoder/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/fwd-stream/readable-stream" ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", "_spec": "string_decoder@~0.10.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/fwd-stream/node_modules/readable-stream", diff --git a/build/node_modules/fwd-stream/package.json b/build/node_modules/fwd-stream/package.json index bcb94d28..ccf687b1 100644 --- a/build/node_modules/fwd-stream/package.json +++ b/build/node_modules/fwd-stream/package.json @@ -5,7 +5,7 @@ "_integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", "_location": "/fwd-stream", "_phantomChildren": { - "core-util-is": "1.0.2", + "core-util-is": "1.0.3", "inherits": "2.0.4" }, "_requested": { @@ -21,7 +21,7 @@ "_requiredBy": [ "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fwd-stream/-/fwd-stream-1.0.4.tgz", "_shasum": "ed281cabed46feecf921ee32dc4c50b372ac7cfa", "_spec": "fwd-stream@^1.0.4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/get-caller-file/LICENSE.md b/build/node_modules/get-caller-file/LICENSE.md new file mode 100644 index 00000000..bf3e1c07 --- /dev/null +++ b/build/node_modules/get-caller-file/LICENSE.md @@ -0,0 +1,6 @@ +ISC License (ISC) +Copyright 2018 Stefan Penner + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/get-caller-file/README.md b/build/node_modules/get-caller-file/README.md new file mode 100644 index 00000000..a7d8c079 --- /dev/null +++ b/build/node_modules/get-caller-file/README.md @@ -0,0 +1,41 @@ +# get-caller-file + +[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file) +[![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master) + +This is a utility, which allows a function to figure out from which file it was invoked. It does so by inspecting v8's stack trace at the time it is invoked. + +Inspired by http://stackoverflow.com/questions/13227489 + +*note: this relies on Node/V8 specific APIs, as such other runtimes may not work* + +## Installation + +```bash +yarn add get-caller-file +``` + +## Usage + +Given: + +```js +// ./foo.js +const getCallerFile = require('get-caller-file'); + +module.exports = function() { + return getCallerFile(); // figures out who called it +}; +``` + +```js +// index.js +const foo = require('./foo'); + +foo() // => /full/path/to/this/file/index.js +``` + + +## Options: + +* `getCallerFile(position = 2)`: where position is stack frame whos fileName we want. diff --git a/build/node_modules/get-caller-file/index.d.ts b/build/node_modules/get-caller-file/index.d.ts new file mode 100644 index 00000000..babed696 --- /dev/null +++ b/build/node_modules/get-caller-file/index.d.ts @@ -0,0 +1,2 @@ +declare const _default: (position?: number) => any; +export = _default; diff --git a/build/node_modules/get-caller-file/index.js b/build/node_modules/get-caller-file/index.js new file mode 100644 index 00000000..57304f80 --- /dev/null +++ b/build/node_modules/get-caller-file/index.js @@ -0,0 +1,22 @@ +"use strict"; +// Call this function in a another function to find out the file from +// which that function was called from. (Inspects the v8 stack trace) +// +// Inspired by http://stackoverflow.com/questions/13227489 +module.exports = function getCallerFile(position) { + if (position === void 0) { position = 2; } + if (position >= Error.stackTraceLimit) { + throw new TypeError('getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `' + position + '` and Error.stackTraceLimit was: `' + Error.stackTraceLimit + '`'); + } + var oldPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = function (_, stack) { return stack; }; + var stack = new Error().stack; + Error.prepareStackTrace = oldPrepareStackTrace; + if (stack !== null && typeof stack === 'object') { + // stack[0] holds this file + // stack[1] holds where this function was called + // stack[2] holds the file we're interested in + return stack[position] ? stack[position].getFileName() : undefined; + } +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/node_modules/get-caller-file/index.js.map b/build/node_modules/get-caller-file/index.js.map new file mode 100644 index 00000000..89c655c0 --- /dev/null +++ b/build/node_modules/get-caller-file/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0DAA0D;AAE1D,iBAAS,SAAS,aAAa,CAAC,QAAY;IAAZ,yBAAA,EAAA,YAAY;IAC1C,IAAI,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;QACrC,MAAM,IAAI,SAAS,CAAC,kGAAkG,GAAG,QAAQ,GAAG,oCAAoC,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;KACzM;IAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACrD,KAAK,CAAC,iBAAiB,GAAG,UAAC,CAAC,EAAE,KAAK,IAAM,OAAA,KAAK,EAAL,CAAK,CAAC;IAC/C,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,KAAK,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;IAG/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC/C,2BAA2B;QAC3B,gDAAgD;QAChD,8CAA8C;QAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC7E;AACH,CAAC,CAAC"} \ No newline at end of file diff --git a/build/node_modules/get-caller-file/package.json b/build/node_modules/get-caller-file/package.json new file mode 100644 index 00000000..6422da60 --- /dev/null +++ b/build/node_modules/get-caller-file/package.json @@ -0,0 +1,69 @@ +{ + "_from": "get-caller-file@^2.0.5", + "_id": "get-caller-file@2.0.5", + "_inBundle": false, + "_integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "_location": "/get-caller-file", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "get-caller-file@^2.0.5", + "name": "get-caller-file", + "escapedName": "get-caller-file", + "rawSpec": "^2.0.5", + "saveSpec": null, + "fetchSpec": "^2.0.5" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "_shasum": "4f94412a82db32f36e3b0b9741f8a97feb031f7e", + "_spec": "get-caller-file@^2.0.5", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs", + "author": { + "name": "Stefan Penner" + }, + "bugs": { + "url": "https://github.com/stefanpenner/get-caller-file/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file) [![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)", + "devDependencies": { + "@types/chai": "^4.1.7", + "@types/ensure-posix-path": "^1.0.0", + "@types/mocha": "^5.2.6", + "@types/node": "^11.10.5", + "chai": "^4.1.2", + "ensure-posix-path": "^1.0.1", + "mocha": "^5.2.0", + "typescript": "^3.3.3333" + }, + "directories": { + "test": "tests" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + }, + "files": [ + "index.js", + "index.js.map", + "index.d.ts" + ], + "homepage": "https://github.com/stefanpenner/get-caller-file#readme", + "license": "ISC", + "main": "index.js", + "name": "get-caller-file", + "repository": { + "type": "git", + "url": "git+https://github.com/stefanpenner/get-caller-file.git" + }, + "scripts": { + "prepare": "tsc", + "test": "mocha test", + "test:debug": "mocha test" + }, + "version": "2.0.5" +} diff --git a/build/node_modules/get-intrinsic/package.json b/build/node_modules/get-intrinsic/package.json index 8aac8f22..cd3f483e 100644 --- a/build/node_modules/get-intrinsic/package.json +++ b/build/node_modules/get-intrinsic/package.json @@ -17,10 +17,9 @@ }, "_requiredBy": [ "/call-bind", - "/es-abstract", "/side-channel" ], - "_resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "_shasum": "15f59f376f855c446963948f0d24cd3637b4abc6", "_spec": "get-intrinsic@^1.0.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/side-channel", diff --git a/build/node_modules/glob-parent/CHANGELOG.md b/build/node_modules/glob-parent/CHANGELOG.md new file mode 100644 index 00000000..fb9de961 --- /dev/null +++ b/build/node_modules/glob-parent/CHANGELOG.md @@ -0,0 +1,110 @@ +### [5.1.2](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2) (2021-03-06) + + +### Bug Fixes + +* eliminate ReDoS ([#36](https://github.com/gulpjs/glob-parent/issues/36)) ([f923116](https://github.com/gulpjs/glob-parent/commit/f9231168b0041fea3f8f954b3cceb56269fc6366)) + +### [5.1.1](https://github.com/gulpjs/glob-parent/compare/v5.1.0...v5.1.1) (2021-01-27) + + +### Bug Fixes + +* unescape exclamation mark ([#26](https://github.com/gulpjs/glob-parent/issues/26)) ([a98874f](https://github.com/gulpjs/glob-parent/commit/a98874f1a59e407f4fb1beb0db4efa8392da60bb)) + +## [5.1.0](https://github.com/gulpjs/glob-parent/compare/v5.0.0...v5.1.0) (2021-01-27) + + +### Features + +* add `flipBackslashes` option to disable auto conversion of slashes (closes [#24](https://github.com/gulpjs/glob-parent/issues/24)) ([#25](https://github.com/gulpjs/glob-parent/issues/25)) ([eecf91d](https://github.com/gulpjs/glob-parent/commit/eecf91d5e3834ed78aee39c4eaaae654d76b87b3)) + +## [5.0.0](https://github.com/gulpjs/glob-parent/compare/v4.0.0...v5.0.0) (2021-01-27) + + +### ⚠ BREAKING CHANGES + +* Drop support for node <6 & bump dependencies + +### Miscellaneous Chores + +* Drop support for node <6 & bump dependencies ([896c0c0](https://github.com/gulpjs/glob-parent/commit/896c0c00b4e7362f60b96e7fc295ae929245255a)) + +## [4.0.0](https://github.com/gulpjs/glob-parent/compare/v3.1.0...v4.0.0) (2021-01-27) + + +### ⚠ BREAKING CHANGES + +* question marks are valid path characters on Windows so avoid flagging as a glob when alone +* Update is-glob dependency + +### Features + +* hoist regexps and strings for performance gains ([4a80667](https://github.com/gulpjs/glob-parent/commit/4a80667c69355c76a572a5892b0f133c8e1f457e)) +* question marks are valid path characters on Windows so avoid flagging as a glob when alone ([2a551dd](https://github.com/gulpjs/glob-parent/commit/2a551dd0dc3235e78bf3c94843d4107072d17841)) +* Update is-glob dependency ([e41fcd8](https://github.com/gulpjs/glob-parent/commit/e41fcd895d1f7bc617dba45c9d935a7949b9c281)) + +## [3.1.0](https://github.com/gulpjs/glob-parent/compare/v3.0.1...v3.1.0) (2021-01-27) + + +### Features + +* allow basic win32 backslash use ([272afa5](https://github.com/gulpjs/glob-parent/commit/272afa5fd070fc0f796386a5993d4ee4a846988b)) +* handle extglobs (parentheses) containing separators ([7db1bdb](https://github.com/gulpjs/glob-parent/commit/7db1bdb0756e55fd14619e8ce31aa31b17b117fd)) +* new approach to braces/brackets handling ([8269bd8](https://github.com/gulpjs/glob-parent/commit/8269bd89290d99fac9395a354fb56fdcdb80f0be)) +* pre-process braces/brackets sections ([9ef8a87](https://github.com/gulpjs/glob-parent/commit/9ef8a87f66b1a43d0591e7a8e4fc5a18415ee388)) +* preserve escaped brace/bracket at end of string ([8cfb0ba](https://github.com/gulpjs/glob-parent/commit/8cfb0ba84202d51571340dcbaf61b79d16a26c76)) + + +### Bug Fixes + +* trailing escaped square brackets ([99ec9fe](https://github.com/gulpjs/glob-parent/commit/99ec9fecc60ee488ded20a94dd4f18b4f55c4ccf)) + +### [3.0.1](https://github.com/gulpjs/glob-parent/compare/v3.0.0...v3.0.1) (2021-01-27) + + +### Features + +* use path-dirname ponyfill ([cdbea5f](https://github.com/gulpjs/glob-parent/commit/cdbea5f32a58a54e001a75ddd7c0fccd4776aacc)) + + +### Bug Fixes + +* unescape glob-escaped dirnames on output ([598c533](https://github.com/gulpjs/glob-parent/commit/598c533bdf49c1428bc063aa9b8db40c5a86b030)) + +## [3.0.0](https://github.com/gulpjs/glob-parent/compare/v2.0.0...v3.0.0) (2021-01-27) + + +### ⚠ BREAKING CHANGES + +* update is-glob dependency + +### Features + +* update is-glob dependency ([5c5f8ef](https://github.com/gulpjs/glob-parent/commit/5c5f8efcee362a8e7638cf8220666acd8784f6bd)) + +## [2.0.0](https://github.com/gulpjs/glob-parent/compare/v1.3.0...v2.0.0) (2021-01-27) + + +### Features + +* move up to dirname regardless of glob characters ([f97fb83](https://github.com/gulpjs/glob-parent/commit/f97fb83be2e0a9fc8d3b760e789d2ecadd6aa0c2)) + +## [1.3.0](https://github.com/gulpjs/glob-parent/compare/v1.2.0...v1.3.0) (2021-01-27) + +## [1.2.0](https://github.com/gulpjs/glob-parent/compare/v1.1.0...v1.2.0) (2021-01-27) + + +### Reverts + +* feat: make regex test strings smaller ([dc80fa9](https://github.com/gulpjs/glob-parent/commit/dc80fa9658dca20549cfeba44bbd37d5246fcce0)) + +## [1.1.0](https://github.com/gulpjs/glob-parent/compare/v1.0.0...v1.1.0) (2021-01-27) + + +### Features + +* make regex test strings smaller ([cd83220](https://github.com/gulpjs/glob-parent/commit/cd832208638f45169f986d80fcf66e401f35d233)) + +## 1.0.0 (2021-01-27) + diff --git a/build/node_modules/glob-parent/LICENSE b/build/node_modules/glob-parent/LICENSE new file mode 100644 index 00000000..63222d7a --- /dev/null +++ b/build/node_modules/glob-parent/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2015, 2019 Elan Shanker + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/glob-parent/README.md b/build/node_modules/glob-parent/README.md new file mode 100644 index 00000000..36a27938 --- /dev/null +++ b/build/node_modules/glob-parent/README.md @@ -0,0 +1,137 @@ +

+ + + +

+ +# glob-parent + +[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url] + +Extract the non-magic parent path from a glob string. + +## Usage + +```js +var globParent = require('glob-parent'); + +globParent('path/to/*.js'); // 'path/to' +globParent('/root/path/to/*.js'); // '/root/path/to' +globParent('/*.js'); // '/' +globParent('*.js'); // '.' +globParent('**/*.js'); // '.' +globParent('path/{to,from}'); // 'path' +globParent('path/!(to|from)'); // 'path' +globParent('path/?(to|from)'); // 'path' +globParent('path/+(to|from)'); // 'path' +globParent('path/*(to|from)'); // 'path' +globParent('path/@(to|from)'); // 'path' +globParent('path/**/*'); // 'path' + +// if provided a non-glob path, returns the nearest dir +globParent('path/foo/bar.js'); // 'path/foo' +globParent('path/foo/'); // 'path/foo' +globParent('path/foo'); // 'path' (see issue #3 for details) +``` + +## API + +### `globParent(maybeGlobString, [options])` + +Takes a string and returns the part of the path before the glob begins. Be aware of Escaping rules and Limitations below. + +#### options + +```js +{ + // Disables the automatic conversion of slashes for Windows + flipBackslashes: true +} +``` + +## Escaping + +The following characters have special significance in glob patterns and must be escaped if you want them to be treated as regular path characters: + +- `?` (question mark) unless used as a path segment alone +- `*` (asterisk) +- `|` (pipe) +- `(` (opening parenthesis) +- `)` (closing parenthesis) +- `{` (opening curly brace) +- `}` (closing curly brace) +- `[` (opening bracket) +- `]` (closing bracket) + +**Example** + +```js +globParent('foo/[bar]/') // 'foo' +globParent('foo/\\[bar]/') // 'foo/[bar]' +``` + +## Limitations + +### Braces & Brackets +This library attempts a quick and imperfect method of determining which path +parts have glob magic without fully parsing/lexing the pattern. There are some +advanced use cases that can trip it up, such as nested braces where the outer +pair is escaped and the inner one contains a path separator. If you find +yourself in the unlikely circumstance of being affected by this or need to +ensure higher-fidelity glob handling in your library, it is recommended that you +pre-process your input with [expand-braces] and/or [expand-brackets]. + +### Windows +Backslashes are not valid path separators for globs. If a path with backslashes +is provided anyway, for simple cases, glob-parent will replace the path +separator for you and return the non-glob parent path (now with +forward-slashes, which are still valid as Windows path separators). + +This cannot be used in conjunction with escape characters. + +```js +// BAD +globParent('C:\\Program Files \\(x86\\)\\*.ext') // 'C:/Program Files /(x86/)' + +// GOOD +globParent('C:/Program Files\\(x86\\)/*.ext') // 'C:/Program Files (x86)' +``` + +If you are using escape characters for a pattern without path parts (i.e. +relative to `cwd`), prefix with `./` to avoid confusing glob-parent. + +```js +// BAD +globParent('foo \\[bar]') // 'foo ' +globParent('foo \\[bar]*') // 'foo ' + +// GOOD +globParent('./foo \\[bar]') // 'foo [bar]' +globParent('./foo \\[bar]*') // '.' +``` + +## License + +ISC + +[expand-braces]: https://github.com/jonschlinkert/expand-braces +[expand-brackets]: https://github.com/jonschlinkert/expand-brackets + +[downloads-image]: https://img.shields.io/npm/dm/glob-parent.svg +[npm-url]: https://www.npmjs.com/package/glob-parent +[npm-image]: https://img.shields.io/npm/v/glob-parent.svg + +[azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=2&branchName=master +[azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/glob-parent?branchName=master + +[travis-url]: https://travis-ci.org/gulpjs/glob-parent +[travis-image]: https://img.shields.io/travis/gulpjs/glob-parent.svg?label=travis-ci + +[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-parent +[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-parent.svg?label=appveyor + +[coveralls-url]: https://coveralls.io/r/gulpjs/glob-parent +[coveralls-image]: https://img.shields.io/coveralls/gulpjs/glob-parent/master.svg + +[gitter-url]: https://gitter.im/gulpjs/gulp +[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg diff --git a/build/node_modules/glob-parent/index.js b/build/node_modules/glob-parent/index.js new file mode 100644 index 00000000..09e257ea --- /dev/null +++ b/build/node_modules/glob-parent/index.js @@ -0,0 +1,42 @@ +'use strict'; + +var isGlob = require('is-glob'); +var pathPosixDirname = require('path').posix.dirname; +var isWin32 = require('os').platform() === 'win32'; + +var slash = '/'; +var backslash = /\\/g; +var enclosure = /[\{\[].*[\}\]]$/; +var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; +var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + +/** + * @param {string} str + * @param {Object} opts + * @param {boolean} [opts.flipBackslashes=true] + * @returns {string} + */ +module.exports = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + + // flip windows path separators + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } + + // special case for strings ending in enclosure containing path separator + if (enclosure.test(str)) { + str += slash; + } + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do { + str = pathPosixDirname(str); + } while (isGlob(str) || globby.test(str)); + + // remove escape chars and return result + return str.replace(escaped, '$1'); +}; diff --git a/build/node_modules/glob-parent/package.json b/build/node_modules/glob-parent/package.json new file mode 100644 index 00000000..fd497b54 --- /dev/null +++ b/build/node_modules/glob-parent/package.json @@ -0,0 +1,90 @@ +{ + "_from": "glob-parent@~5.1.2", + "_id": "glob-parent@5.1.2", + "_inBundle": false, + "_integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "_location": "/glob-parent", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "glob-parent@~5.1.2", + "name": "glob-parent", + "escapedName": "glob-parent", + "rawSpec": "~5.1.2", + "saveSpec": null, + "fetchSpec": "~5.1.2" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/glob-parent/-/glob-parent-5.1.2.tgz", + "_shasum": "869832c58034fe68a4093c17dc15e8340d8401c4", + "_spec": "glob-parent@~5.1.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chokidar", + "author": { + "name": "Gulp Team", + "email": "team@gulpjs.com", + "url": "https://gulpjs.com/" + }, + "bugs": { + "url": "https://github.com/gulpjs/glob-parent/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Elan Shanker", + "url": "https://github.com/es128" + }, + { + "name": "Blaine Bublitz", + "email": "blaine.bublitz@gmail.com" + } + ], + "dependencies": { + "is-glob": "^4.0.1" + }, + "deprecated": false, + "description": "Extract the non-magic parent path from a glob string.", + "devDependencies": { + "coveralls": "^3.0.11", + "eslint": "^2.13.1", + "eslint-config-gulp": "^3.0.1", + "expect": "^1.20.2", + "mocha": "^6.0.2", + "nyc": "^13.3.0" + }, + "engines": { + "node": ">= 6" + }, + "files": [ + "LICENSE", + "index.js" + ], + "homepage": "https://github.com/gulpjs/glob-parent#readme", + "keywords": [ + "glob", + "parent", + "strip", + "path", + "dirname", + "directory", + "base", + "wildcard" + ], + "license": "ISC", + "main": "index.js", + "name": "glob-parent", + "repository": { + "type": "git", + "url": "git+https://github.com/gulpjs/glob-parent.git" + }, + "scripts": { + "azure-pipelines": "nyc mocha --async-only --reporter xunit -O output=test.xunit", + "coveralls": "nyc report --reporter=text-lcov | coveralls", + "lint": "eslint .", + "pretest": "npm run lint", + "test": "nyc mocha --async-only" + }, + "version": "5.1.2" +} diff --git a/build/node_modules/glob/.npmignore b/build/node_modules/glob/.npmignore deleted file mode 100644 index 2af4b71c..00000000 --- a/build/node_modules/glob/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.swp -test/a/ diff --git a/build/node_modules/glob/.travis.yml b/build/node_modules/glob/.travis.yml deleted file mode 100644 index baa0031d..00000000 --- a/build/node_modules/glob/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.8 diff --git a/build/node_modules/glob/LICENSE b/build/node_modules/glob/LICENSE index 0c44ae71..42ca266d 100644 --- a/build/node_modules/glob/LICENSE +++ b/build/node_modules/glob/LICENSE @@ -1,27 +1,21 @@ -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. +The ISC License -The BSD License +Copyright (c) Isaac Z. Schlueter and Contributors -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. +## Glob Logo -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Glob's logo created by Tanya Brassie , licensed +under a Creative Commons Attribution-ShareAlike 4.0 International License +https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/build/node_modules/glob/README.md b/build/node_modules/glob/README.md index cc691645..83f0c83a 100644 --- a/build/node_modules/glob/README.md +++ b/build/node_modules/glob/README.md @@ -2,21 +2,20 @@ Match files using the patterns the shell uses, like stars and stuff. +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + This is a glob implementation in JavaScript. It uses the `minimatch` library to do its matching. -## Attention: node-glob users! - -The API has changed dramatically between 2.x and 3.x. This library is -now 100% JavaScript, and the integer flags have been replaced with an -options object. +![a fun cartoon logo made of glob characters](logo/glob.png) -Also, there's an event emitter class, proper tests, and all the other -things you've come to expect from node modules. +## Usage -And best of all, no compilation! +Install with npm -## Usage +``` +npm i glob +``` ```javascript var glob = require("glob") @@ -30,46 +29,108 @@ glob("**/*.js", options, function (er, files) { }) ``` -## Features +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. -Please see the [minimatch -documentation](https://github.com/isaacs/minimatch) for more details. +### Dots -Supports these glob features: +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. -See: +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: * `man sh` -* `man bash` +* `man bash` (Search for "Pattern Matching") * `man 3 fnmatch` * `man 5 gitignore` * [minimatch documentation](https://github.com/isaacs/minimatch) +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + ## glob(pattern, [options], cb) -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern Perform an asynchronous glob search. ## glob.sync(pattern, [options]) -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array} filenames found matching the pattern +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern Perform a synchronous glob search. ## Class: glob.Glob -Create a Glob object by instanting the `glob.Glob` class. +Create a Glob object by instantiating the `glob.Glob` class. ```javascript var Glob = require("glob").Glob @@ -81,11 +142,11 @@ immediately. ### new glob.Glob(pattern, [options], [cb]) -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern Note that if the `sync` flag is set in the options, then matches will be immediately available on the `g.found` member. @@ -94,21 +155,24 @@ be immediately available on the `g.found` member. * `minimatch` The minimatch object that the glob uses. * `options` The options object passed in. -* `error` The error encountered. When an error is encountered, the - glob object is in an undefined state, and should be discarded. * `aborted` Boolean which is set to true when calling `abort()`. There is no way at this time to continue a glob search after aborting, but you can re-use the statCache to avoid having to duplicate syscalls. -* `statCache` Collection of all the stat results the glob search - performed. * `cache` Convenience object. Each field has the following possible values: * `false` - Path does not exist * `true` - Path exists - * `1` - Path exists, and is not a directory - * `2` - Path exists, and is a directory + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory * `[file, entries, ...]` - Path exists, is a directory, and the array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. ### Events @@ -116,14 +180,17 @@ be immediately available on the `g.found` member. matches found. If the `nonull` option is set, and no match was found, then the `matches` list contains the original pattern. The matches are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. * `error` Emitted when an unexpected error is encountered, or whenever any fs error occurs if `options.strict` is set. * `abort` When `abort()` is called, this event is raised. ### Methods -* `abort` Stop the search. +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever ### Options @@ -133,7 +200,14 @@ or have glob-specific ramifications. All options are false by default, unless otherwise noted. -All options are added to the glob object, as well. +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. * `cwd` The current working directory in which to search. Defaults to `process.cwd()`. @@ -151,36 +225,60 @@ All options are added to the glob object, as well. * `nosort` Don't sort the results. * `stat` Set to true to stat *all* results. This reduces performance somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. It will cause - ELOOP to be triggered one level sooner in the case of cyclical - symbolic links. -* `silent` When an unusual error is encountered - when attempting to read a directory, a warning will be printed to - stderr. Set the `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered - when attempting to read a directory, the process will just continue on - in search of other matches. Set the `strict` option to raise an error - in these cases. + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. * `cache` See `cache` property above. Pass in a previously generated cache object to save some fs calls. * `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary to - set this, you may pass the statCache from one glob() call to the + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the options object of another, if you know that the filesystem will not change between calls. (See "Race Conditions" below.) -* `sync` Perform a synchronous glob search. +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. * `nounique` In some cases, brace-expanded patterns can result in the same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. - Set this flag to disable that behavior. + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. * `nonull` Set to never return an empty set, instead returning a set containing the pattern itself. This is the default in glob(3). -* `nocase` Perform a case-insensitive match. Note that case-insensitive - filesystems will sometimes result in glob returning results that are - case-insensitively matched anyway, since readdir and stat will not - raise an error. * `debug` Set to enable debug logging in minimatch and glob. -* `globDebug` Set to enable debug logging in glob, but not minimatch. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `absolute` Set to true to always receive absolute paths for matched + files. Unlike `realpath`, this also affects the values returned in + the `match` event. +* `fs` File-system object with Node's `fs` API. By default, the built-in + `fs` module will be used. Set to a volume provided by a library like + `memfs` to avoid using the "real" file-system. ## Comparisons to other fnmatch/glob implementations @@ -188,23 +286,16 @@ While strict compliance with the existing standards is a worthwhile goal, some discrepancies exist between node-glob and other implementations, and are intentional. -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - The double-star character `**` is supported by default, unless the `noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only +and bash 4.3, where `**` only has special significance if it is the only thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but `a/**b` will not. +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + If an escaped pattern has no matches, and the `nonull` flag is set, then glob returns the pattern as-provided, rather than interpreting the character escapes. For example, @@ -218,6 +309,16 @@ other interpretation of the glob pattern. Thus, a pattern like **first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are checked for validity. Since those two are valid, matching proceeds. +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + ## Windows **Please only use forward-slashes in glob expressions.** @@ -248,3 +349,30 @@ calls. Users are thus advised not to use a glob result as a guarantee of filesystem state in the face of rapid changes. For the vast majority of operations, this is never a problem. + +## Glob Logo +Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` + +![](oh-my-glob.gif) diff --git a/build/node_modules/glob/common.js b/build/node_modules/glob/common.js new file mode 100644 index 00000000..8e363b6c --- /dev/null +++ b/build/node_modules/glob/common.js @@ -0,0 +1,236 @@ +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var fs = require("fs") +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasort (a, b) { + return a.localeCompare(b, 'en') +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + self.absolute = !!options.absolute + self.fs = options.fs || fs + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/build/node_modules/glob/examples/g.js b/build/node_modules/glob/examples/g.js deleted file mode 100644 index be122df0..00000000 --- a/build/node_modules/glob/examples/g.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "test/a/**/[cg]/../[cg]" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true, sync:true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/build/node_modules/glob/examples/usr-local.js b/build/node_modules/glob/examples/usr-local.js deleted file mode 100644 index 327a425e..00000000 --- a/build/node_modules/glob/examples/usr-local.js +++ /dev/null @@ -1,9 +0,0 @@ -var Glob = require("../").Glob - -var pattern = "{./*/*,/*,/usr/local/*}" -console.log(pattern) - -var mg = new Glob(pattern, {mark: true}, function (er, matches) { - console.log("matches", matches) -}) -console.log("after") diff --git a/build/node_modules/glob/glob.js b/build/node_modules/glob/glob.js index f0118a4f..afcf8275 100644 --- a/build/node_modules/glob/glob.js +++ b/build/node_modules/glob/glob.js @@ -1,24 +1,30 @@ // Approach: // // 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern) +// 2. For each pattern in the set, PROCESS(pattern, false) // 3. Store matches per-set, then uniq them // -// PROCESS(pattern) +// PROCESS(pattern, inGlobStar) // Get the first [n] items from pattern that are all strings // Join these together. This is PREFIX. // If there is no more remaining, then stat(PREFIX) and // add to matches if it succeeds. END. -// readdir(PREFIX) as ENTRIES -// If fails, END +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES // If pattern[n] is GLOBSTAR // // handle the case where the globstar match is empty // // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $]) +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) // // handle other cases. // for ENTRY in ENTRIES (not dotfiles) // // attach globstar + tail onto the entry -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $]) +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) // // else // not globstar // for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) @@ -32,130 +38,99 @@ // `true` for files, and [children,...] for directories, or `false` for // things that don't exist. - - module.exports = glob -var fs = require("graceful-fs") -, minimatch = require("minimatch") -, Minimatch = minimatch.Minimatch -, inherits = require("inherits") -, EE = require("events").EventEmitter -, path = require("path") -, isDir = {} -, assert = require("assert").ok +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') function glob (pattern, options, cb) { - if (typeof options === "function") cb = options, options = {} + if (typeof options === 'function') cb = options, options = {} if (!options) options = {} - if (typeof options === "number") { - deprecated() - return + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) } - var g = new Glob(pattern, options, cb) - return g.sync ? g.found : g + return new Glob(pattern, options, cb) } -glob.fnmatch = deprecated +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync -function deprecated () { - throw new Error("glob's interface has changed. Please see the docs.") -} +// old api surface +glob.glob = glob -glob.sync = globSync -function globSync (pattern, options) { - if (typeof options === "number") { - deprecated() - return +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin } - options = options || {} - options.sync = true - return glob(pattern, options) + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin } +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (!(this instanceof Glob)) { - return new Glob(pattern, options, cb) - } - - if (typeof cb === "function") { - this.on("error", cb) - this.on("end", function (matches) { - cb(null, matches) - }) - } + var g = new Glob(pattern, options) + var set = g.minimatch.set - options = options || {} + if (!pattern) + return false - this.EOF = {} - this._emitQueue = [] + if (set.length > 1) + return true - this.maxDepth = options.maxDepth || 1000 - this.maxLength = options.maxLength || Infinity - this.cache = options.cache || {} - this.statCache = options.statCache || {} - - this.changedCwd = false - var cwd = process.cwd() - if (!options.hasOwnProperty("cwd")) this.cwd = cwd - else { - this.cwd = options.cwd - this.changedCwd = path.resolve(options.cwd) !== cwd + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true } - this.root = options.root || path.resolve(this.cwd, "/") - this.root = path.resolve(this.root) - if (process.platform === "win32") - this.root = this.root.replace(/\\/g, "/") - - this.nomount = !!options.nomount + return false +} - if (!pattern) { - throw new Error("must provide pattern") +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null } - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) } - this.strict = options.strict !== false - this.dot = !!options.dot - this.mark = !!options.mark - this.sync = !!options.sync - this.nounique = !!options.nounique - this.nonull = !!options.nonull - this.nosort = !!options.nosort - this.nocase = !!options.nocase - this.stat = !!options.stat - - this.debug = !!options.debug || !!options.globDebug - if (this.debug) - this.log = console.error - - this.silent = !!options.silent - - var mm = this.minimatch = new Minimatch(pattern, options) - this.options = mm.options - pattern = this.pattern = mm.pattern - - this.error = null - this.aborted = false - - // list of all the patterns that ** has resolved do, so - // we can avoid visiting multiple times. - this._globstars = {} + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) - EE.call(this) + setopts(this, pattern, options) + this._didRealPath = false // process each pattern in the minimatch set var n = this.minimatch.set.length @@ -166,163 +141,175 @@ function Glob (pattern, options, cb) { // Keep them as a list so we can fill in when nonull is set. this.matches = new Array(n) - this.minimatch.set.forEach(iterator.bind(this)) - function iterator (pattern, i, set) { - this._process(pattern, 0, i, function (er) { - if (er) this.emit("error", er) - if (-- n <= 0) this._finish() + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) }) } -} -Glob.prototype.log = function () {} + var self = this + this._processing = 0 -Glob.prototype._finish = function () { - assert(this instanceof Glob) + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this - var nou = this.nounique - , all = nou ? [] : {} - - for (var i = 0, l = this.matches.length; i < l; i ++) { - var matches = this.matches[i] - this.log("matches[%d] =", i, matches) - // do like the shell, and spit out the literal glob - if (!matches) { - if (this.nonull) { - var literal = this.minimatch.globSet[i] - if (nou) all.push(literal) - else all[literal] = true + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() } - } else { - // had matches - var m = Object.keys(matches) - if (nou) all.push.apply(all, m) - else m.forEach(function (m) { - all[m] = true - }) } } +} - if (!nou) all = Object.keys(all) +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return - if (!this.nosort) { - all = all.sort(this.nocase ? alphasorti : alphasort) - } + if (this.realpath && !this._didRealpath) + return this._realpath() - if (this.mark) { - // at *some* point we statted all of these - all = all.map(function (m) { - var sc = this.cache[m] - if (!sc) - return m - var isDir = (Array.isArray(sc) || sc === 2) - if (isDir && m.slice(-1) !== "/") { - return m + "/" - } - if (!isDir && m.slice(-1) === "/") { - return m.replace(/\/+$/, "") - } - return m - }, this) - } + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true - this.log("emitting end", all) + var n = this.matches.length + if (n === 0) + return this._finish() - this.EOF = this.found = all - this.emitMatch(this.EOF) + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } } -function alphasorti (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return alphasort(a, b) +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) } -function alphasort (a, b) { - return a > b ? 1 : a < b ? -1 : 0 +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) } Glob.prototype.abort = function () { this.aborted = true - this.emit("abort") + this.emit('abort') } Glob.prototype.pause = function () { - if (this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = true - this.emit("pause") + if (!this.paused) { + this.paused = true + this.emit('pause') + } } Glob.prototype.resume = function () { - if (!this.paused) return - if (this.sync) - this.emit("error", new Error("Can't pause/resume sync glob")) - this.paused = false - this.emit("resume") - this._processEmitQueue() - //process.nextTick(this.emit.bind(this, "resume")) -} - -Glob.prototype.emitMatch = function (m) { - if (!this.stat || this.statCache[m] || m === this.EOF) { - this._emitQueue.push(m) - this._processEmitQueue() - } else { - this._stat(m, function(exists, isDir) { - if (exists) { - this._emitQueue.push(m) - this._processEmitQueue() + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) } - }) - } -} - -Glob.prototype._processEmitQueue = function (m) { - while (!this._processingEmitQueue && - !this.paused) { - this._processingEmitQueue = true - var m = this._emitQueue.shift() - if (!m) { - this._processingEmitQueue = false - break } - - this.log('emit!', m === this.EOF ? "end" : "match") - - this.emit(m === this.EOF ? "end" : "match", m) - this._processingEmitQueue = false } } -Glob.prototype._process = function (pattern, depth, index, cb_) { +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { assert(this instanceof Glob) + assert(typeof cb === 'function') - var cb = function cb (er, res) { - assert(this instanceof Glob) - if (this.paused) { - if (!this._processQueue) { - this._processQueue = [] - this.once("resume", function () { - var q = this._processQueue - this._processQueue = null - q.forEach(function (cb) { cb() }) - }) - } - this._processQueue.push(cb_.bind(this, er, res)) - } else { - cb_.call(this, er, res) - } - }.bind(this) + if (this.aborted) + return - if (this.aborted) return cb() + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } - if (depth > this.maxDepth) return cb() + //console.error('PROCESS %d', this._processing, pattern) // Get the first [n] parts of pattern that are all strings. var n = 0 - while (typeof pattern[n] === "string") { + while (typeof pattern[n] === 'string') { n ++ } // now n is the index of the first one that is *not* a string. @@ -332,28 +319,7 @@ Glob.prototype._process = function (pattern, depth, index, cb_) { switch (n) { // if not, then this is rather simple case pattern.length: - prefix = pattern.join("/") - this._stat(prefix, function (exists, isDir) { - // either it's there, or it isn't. - // nothing more to do, either way. - if (exists) { - if (prefix && isAbsolute(prefix) && !this.nomount) { - if (prefix.charAt(0) === "/") { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - } - } - - if (process.platform === "win32") - prefix = prefix.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][prefix] = true - this.emitMatch(prefix) - } - return cb() - }) + this._processSimple(pattern.join('/'), index, cb) return case 0: @@ -364,312 +330,458 @@ Glob.prototype._process = function (pattern, depth, index, cb_) { default: // pattern has some string bits in the front. - // whatever it starts with, whether that's "absolute" like /foo/bar, - // or "relative" like "../baz" - prefix = pattern.slice(0, n) - prefix = prefix.join("/") + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') break } + var remain = pattern.slice(n) + // get the list of entries. var read - if (prefix === null) read = "." - else if (isAbsolute(prefix) || isAbsolute(pattern.join("/"))) { - if (!prefix || !isAbsolute(prefix)) { - prefix = path.join("/", prefix) - } - read = prefix = path.resolve(prefix) + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix - // if (process.platform === "win32") - // read = prefix = prefix.replace(/^[a-zA-Z]:|\\/g, "/") + var abs = this._makeAbs(read) - this.log('absolute: ', prefix, this.root, pattern, read) - } else { - read = prefix - } + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() - this.log('readdir(%j)', read, this.cwd, this.root) + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} - return this._readdir(read, function (er, entries) { - if (er) { - // not a directory! - // this means that, whatever else comes after this, it can never match - return cb() +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) } + } - // globstar is special - if (pattern[n] === minimatch.GLOBSTAR) { - // test without the globstar, and with every child both below - // and replacing the globstar. - var s = [ pattern.slice(0, n).concat(pattern.slice(n + 1)) ] - entries.forEach(function (e) { - if (e.charAt(0) === "." && !this.dot) return - // instead of the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1))) - // below the globstar - s.push(pattern.slice(0, n).concat(e).concat(pattern.slice(n))) - }, this) - - s = s.filter(function (pattern) { - var key = gsKey(pattern) - var seen = !this._globstars[key] - this._globstars[key] = true - return seen - }, this) - - if (!s.length) - return cb() + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } - // now asyncForEach over this - var l = s.length - , errState = null - s.forEach(function (gsPattern) { - this._process(gsPattern, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l <= 0) return cb() - }) - }, this) + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } - return + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} - // not a globstar - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = pattern[n] - var rawGlob = pattern[n]._glob - , dotOk = this.dot || rawGlob.charAt(0) === "." +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return - entries = entries.filter(function (e) { - return (e.charAt(0) !== "." || dotOk) && - e.match(pattern[n]) - }) + if (isIgnored(this, e)) + return - // If n === pattern.length - 1, then there's no need for the extra stat - // *unless* the user has specified "mark" or "stat" explicitly. - // We know that they exist, since the readdir returned them. - if (n === pattern.length - 1 && - !this.mark && - !this.stat) { - entries.forEach(function (e) { - if (prefix) { - if (prefix !== "/") e = prefix + "/" + e - else e = prefix + e - } - if (e.charAt(0) === "/" && !this.nomount) { - e = path.join(this.root, e) - } - - if (process.platform === "win32") - e = e.replace(/\\/g, "/") - - this.matches[index] = this.matches[index] || {} - this.matches[index][e] = true - this.emitMatch(e) - }, this) - return cb.call(this) - } + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + var abs = isAbsolute(e) ? e : this._makeAbs(e) - // now test all the remaining entries as stand-ins for that part - // of the pattern. - var l = entries.length - , errState = null - if (l === 0) return cb() // no matches possible - entries.forEach(function (e) { - var p = pattern.slice(0, n).concat(e).concat(pattern.slice(n + 1)) - this._process(p, depth + 1, index, function (er) { - if (errState) return - if (er) return cb(errState = er) - if (--l === 0) return cb.call(this) - }) - }, this) - }) + if (this.mark) + e = this._mark(e) -} + if (this.absolute) + e = abs -function gsKey (pattern) { - return '**' + pattern.map(function (p) { - return (p === minimatch.GLOBSTAR) ? '**' : (''+p) - }).join('/') + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) } -Glob.prototype._stat = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + self.fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() + + var isSym = lstat && lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterStat(f, abs, cb, er) + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) } - this.log('stat', [this.cwd, f, '=', abs]) + var self = this + self.fs.readdir(abs, readdirCb(this, abs, cb)) +} - if (!this.stat && this.cache.hasOwnProperty(f)) { - var exists = this.cache[f] - , isDir = exists && (Array.isArray(exists) || exists === 2) - if (this.sync) return cb.call(this, !!exists, isDir) - return process.nextTick(cb.bind(this, !!exists, isDir)) +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) } +} - var stat = this.statCache[abs] - if (this.sync || stat) { - var er - try { - stat = fs.statSync(abs) - } catch (e) { - er = e +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true } - this._afterStat(f, abs, cb, er, stat) - } else { - fs.stat(abs, this._afterStat.bind(this, f, abs, cb)) } + + this.cache[abs] = entries + return cb(null, entries) } -Glob.prototype._afterStat = function (f, abs, cb, er, stat) { - var exists - assert(this instanceof Glob) +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break - if (abs.slice(-1) === "/" && stat && !stat.isDirectory()) { - this.log("should be ENOTDIR, fake it") + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break - er = new Error("ENOTDIR, not a directory '" + abs + "'") - er.path = abs - er.code = "ENOTDIR" - stat = null + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break } - var emit = !this.statCache[abs] - this.statCache[abs] = stat + return cb() +} - if (er || !stat) { - exists = false - } else { - exists = stat.isDirectory() ? 2 : 1 - if (emit) - this.emit('stat', f, stat) - } - this.cache[f] = this.cache[f] || exists - cb.call(this, !!exists, exists === 2) +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) } -Glob.prototype._readdir = function (f, cb) { - assert(this instanceof Glob) - var abs = f - if (f.charAt(0) === "/") { - abs = path.join(this.root, f) - } else if (isAbsolute(f)) { - abs = f - } else if (this.changedCwd) { - abs = path.resolve(this.cwd, f) - } - if (f.length > this.maxLength) { - var er = new Error("Path name too long") - er.code = "ENAMETOOLONG" - er.path = f - return this._afterReaddir(f, abs, cb, er) - } +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) - this.log('readdir', [this.cwd, f, abs]) - if (this.cache.hasOwnProperty(f)) { - var c = this.cache[f] - if (Array.isArray(c)) { - if (this.sync) return cb.call(this, null, c) - return process.nextTick(cb.bind(this, null, c)) - } + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() - if (!c || c === 1) { - // either ENOENT or ENOTDIR - var code = c ? "ENOTDIR" : "ENOENT" - , er = new Error((c ? "Not a directory" : "Not found") + ": " + f) - er.path = f - er.code = code - this.log(f, er) - if (this.sync) return cb.call(this, er) - return process.nextTick(cb.bind(this, er)) - } + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) - // at this point, c === 2, meaning it's a dir, but we haven't - // had to read it yet, or c === true, meaning it's *something* - // but we don't have any idea what. Need to read it, either way. + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) } - if (this.sync) { - var er, entries - try { - entries = fs.readdirSync(abs) - } catch (e) { - er = e + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' } - return this._afterReaddir(f, abs, cb, er, entries) } - fs.readdir(abs, this._afterReaddir.bind(this, f, abs, cb)) + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() } -Glob.prototype._afterReaddir = function (f, abs, cb, er, entries) { - assert(this instanceof Glob) - if (entries && !er) { - this.cache[f] = entries - // if we haven't asked to stat everything for suresies, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. This also gets us one step - // further into ELOOP territory. - if (!this.mark && !this.stat) { - entries.forEach(function (e) { - if (f === "/") e = f + e - else e = f + "/" + e - this.cache[e] = true - }, this) - } +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' - return cb.call(this, er, entries) + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. } - // now handle errors, and cache the information - if (er) switch (er.code) { - case "ENOTDIR": // totally normal. means it *does* exist. - this.cache[f] = 1 - return cb.call(this, er) - case "ENOENT": // not terribly unusual - case "ELOOP": - case "ENAMETOOLONG": - case "UNKNOWN": - this.cache[f] = false - return cb.call(this, er) - default: // some unusual error. Treat as failure. - this.cache[f] = false - if (this.strict) this.emit("error", er) - if (!this.silent) console.error("glob error", er) - return cb.call(this, er) + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + self.fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return self.fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } } } -var isAbsolute = process.platform === "win32" ? absWin : absUnix +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat -function absWin (p) { - if (absUnix(p)) return true - // pull off the device/UNC bit from a windows path. - // from node's lib/path.js - var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/ - , result = splitDeviceRe.exec(p) - , device = result[1] || '' - , isUnc = device && device.charAt(1) !== ':' - , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) - return isAbsolute -} + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return cb() -function absUnix (p) { - return p.charAt(0) === "/" || p === "" + return cb(null, c, stat) } diff --git a/build/node_modules/glob/package.json b/build/node_modules/glob/package.json index 8a76a086..40946790 100644 --- a/build/node_modules/glob/package.json +++ b/build/node_modules/glob/package.json @@ -1,27 +1,28 @@ { - "_from": "glob@3.2.3", - "_id": "glob@3.2.3", + "_from": "glob@^7.1.6", + "_id": "glob@7.2.0", "_inBundle": false, - "_integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "_integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "_location": "/glob", "_phantomChildren": {}, "_requested": { - "type": "version", + "type": "range", "registry": true, - "raw": "glob@3.2.3", + "raw": "glob@^7.1.6", "name": "glob", "escapedName": "glob", - "rawSpec": "3.2.3", + "rawSpec": "^7.1.6", "saveSpec": null, - "fetchSpec": "3.2.3" + "fetchSpec": "^7.1.6" }, "_requiredBy": [ + "/@rollup/plugin-commonjs", "/mocha" ], - "_resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", - "_shasum": "e313eeb249c7affaa5c475286b0e115b59839467", - "_spec": "glob@3.2.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/glob/-/glob-7.2.0.tgz", + "_shasum": "d15535af7732e02e948f4c41628bd910293f6023", + "_spec": "glob@^7.1.6", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -32,22 +33,35 @@ }, "bundleDependencies": false, "dependencies": { - "graceful-fs": "~2.0.0", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", "inherits": "2", - "minimatch": "~0.2.11" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "deprecated": false, "description": "a little globber", "devDependencies": { + "memfs": "^3.2.0", "mkdirp": "0", - "rimraf": "1", - "tap": "~0.4.0" + "rimraf": "^2.2.8", + "tap": "^15.0.6", + "tick": "0.0.6" }, "engines": { "node": "*" }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, "homepage": "https://github.com/isaacs/node-glob#readme", - "license": "BSD", + "license": "ISC", "main": "glob.js", "name": "glob", "repository": { @@ -55,7 +69,18 @@ "url": "git://github.com/isaacs/node-glob.git" }, "scripts": { - "test": "tap test/*.js" + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "tap": { + "before": "test/00-setup.js", + "after": "test/zz-cleanup.js", + "jobs": 1 }, - "version": "3.2.3" + "version": "7.2.0" } diff --git a/build/node_modules/glob/sync.js b/build/node_modules/glob/sync.js new file mode 100644 index 00000000..4f46f905 --- /dev/null +++ b/build/node_modules/glob/sync.js @@ -0,0 +1,483 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = rp.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, this.fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = this.fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/build/node_modules/glob/test/00-setup.js b/build/node_modules/glob/test/00-setup.js deleted file mode 100644 index 245afafd..00000000 --- a/build/node_modules/glob/test/00-setup.js +++ /dev/null @@ -1,176 +0,0 @@ -// just a little pre-run script to set up the fixtures. -// zz-finish cleans it up - -var mkdirp = require("mkdirp") -var path = require("path") -var i = 0 -var tap = require("tap") -var fs = require("fs") -var rimraf = require("rimraf") - -var files = -[ "a/.abcdef/x/y/z/a" -, "a/abcdef/g/h" -, "a/abcfed/g/h" -, "a/b/c/d" -, "a/bc/e/f" -, "a/c/d/c/b" -, "a/cb/e/f" -] - -var symlinkTo = path.resolve(__dirname, "a/symlink/a/b/c") -var symlinkFrom = "../.." - -files = files.map(function (f) { - return path.resolve(__dirname, f) -}) - -tap.test("remove fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "remove fixtures") - t.end() - }) -}) - -files.forEach(function (f) { - tap.test(f, function (t) { - var d = path.dirname(f) - mkdirp(d, 0755, function (er) { - if (er) { - t.fail(er) - return t.bailout() - } - fs.writeFile(f, "i like tests", function (er) { - t.ifError(er, "make file") - t.end() - }) - }) - }) -}) - -if (process.platform !== "win32") { - tap.test("symlinky", function (t) { - var d = path.dirname(symlinkTo) - console.error("mkdirp", d) - mkdirp(d, 0755, function (er) { - t.ifError(er) - fs.symlink(symlinkFrom, symlinkTo, "dir", function (er) { - t.ifError(er, "make symlink") - t.end() - }) - }) - }) -} - -;["foo","bar","baz","asdf","quux","qwer","rewq"].forEach(function (w) { - w = "/tmp/glob-test/" + w - tap.test("create " + w, function (t) { - mkdirp(w, function (er) { - if (er) - throw er - t.pass(w) - t.end() - }) - }) -}) - - -// generate the bash pattern test-fixtures if possible -if (process.platform === "win32" || !process.env.TEST_REGEN) { - console.error("Windows, or TEST_REGEN unset. Using cached fixtures.") - return -} - -var spawn = require("child_process").spawn; -var globs = - // put more patterns here. - // anything that would be directly in / should be in /tmp/glob-test - ["test/a/*/+(c|g)/./d" - ,"test/a/**/[cg]/../[cg]" - ,"test/a/{b,c,d,e,f}/**/g" - ,"test/a/b/**" - ,"test/**/g" - ,"test/a/abc{fed,def}/g/h" - ,"test/a/abc{fed/g,def}/**/" - ,"test/a/abc{fed/g,def}/**///**/" - ,"test/**/a/**/" - ,"test/+(a|b|c)/a{/,bc*}/**" - ,"test/*/*/*/f" - ,"test/**/f" - ,"test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**" - ,"{./*/*,/tmp/glob-test/*}" - ,"{/tmp/glob-test/*,*}" // evil owl face! how you taunt me! - ,"test/a/!(symlink)/**" - ] -var bashOutput = {} -var fs = require("fs") - -globs.forEach(function (pattern) { - tap.test("generate fixture " + pattern, function (t) { - var cmd = "shopt -s globstar && " + - "shopt -s extglob && " + - "shopt -s nullglob && " + - // "shopt >&2; " + - "eval \'for i in " + pattern + "; do echo $i; done\'" - var cp = spawn("bash", ["-c", cmd], { cwd: path.dirname(__dirname) }) - var out = [] - cp.stdout.on("data", function (c) { - out.push(c) - }) - cp.stderr.pipe(process.stderr) - cp.on("close", function (code) { - out = flatten(out) - if (!out) - out = [] - else - out = cleanResults(out.split(/\r*\n/)) - - bashOutput[pattern] = out - t.notOk(code, "bash test should finish nicely") - t.end() - }) - }) -}) - -tap.test("save fixtures", function (t) { - var fname = path.resolve(__dirname, "bash-results.json") - var data = JSON.stringify(bashOutput, null, 2) + "\n" - fs.writeFile(fname, data, function (er) { - t.ifError(er) - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -function flatten (chunks) { - var s = 0 - chunks.forEach(function (c) { s += c.length }) - var out = new Buffer(s) - s = 0 - chunks.forEach(function (c) { - c.copy(out, s) - s += c.length - }) - - return out.toString().trim() -} - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} diff --git a/build/node_modules/glob/test/bash-comparison.js b/build/node_modules/glob/test/bash-comparison.js deleted file mode 100644 index 239ed1a9..00000000 --- a/build/node_modules/glob/test/bash-comparison.js +++ /dev/null @@ -1,63 +0,0 @@ -// basic test -// show that it does the same thing by default as the shell. -var tap = require("tap") -, child_process = require("child_process") -, bashResults = require("./bash-results.json") -, globs = Object.keys(bashResults) -, glob = require("../") -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -globs.forEach(function (pattern) { - var expect = bashResults[pattern] - // anything regarding the symlink thing will fail on windows, so just skip it - if (process.platform === "win32" && - expect.some(function (m) { - return /\/symlink\//.test(m) - })) - return - - tap.test(pattern, function (t) { - glob(pattern, function (er, matches) { - if (er) - throw er - - // sort and unmark, just to match the shell results - matches = cleanResults(matches) - - t.deepEqual(matches, expect, pattern) - t.end() - }) - }) - - tap.test(pattern + " sync", function (t) { - var matches = cleanResults(glob.sync(pattern)) - - t.deepEqual(matches, expect, "should match shell") - t.end() - }) -}) - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') - }) -} diff --git a/build/node_modules/glob/test/bash-results.json b/build/node_modules/glob/test/bash-results.json deleted file mode 100644 index a9bc347d..00000000 --- a/build/node_modules/glob/test/bash-results.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "test/a/*/+(c|g)/./d": [ - "test/a/b/c/./d" - ], - "test/a/**/[cg]/../[cg]": [ - "test/a/abcdef/g/../g", - "test/a/abcfed/g/../g", - "test/a/b/c/../c", - "test/a/c/../c", - "test/a/c/d/c/../c", - "test/a/symlink/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/../c" - ], - "test/a/{b,c,d,e,f}/**/g": [], - "test/a/b/**": [ - "test/a/b", - "test/a/b/c", - "test/a/b/c/d" - ], - "test/**/g": [ - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed,def}/g/h": [ - "test/a/abcdef/g/h", - "test/a/abcfed/g/h" - ], - "test/a/abc{fed/g,def}/**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/a/abc{fed/g,def}/**///**/": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed/g" - ], - "test/**/a/**/": [ - "test/a", - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/b", - "test/a/b/c", - "test/a/bc", - "test/a/bc/e", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/cb", - "test/a/cb/e", - "test/a/symlink", - "test/a/symlink/a", - "test/a/symlink/a/b", - "test/a/symlink/a/b/c", - "test/a/symlink/a/b/c/a", - "test/a/symlink/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b" - ], - "test/+(a|b|c)/a{/,bc*}/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h" - ], - "test/*/*/*/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/**/f": [ - "test/a/bc/e/f", - "test/a/cb/e/f" - ], - "test/a/symlink/a/b/c/a/b/c/a/b/c//a/b/c////a/b/c/**/b/c/**": [ - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b", - "test/a/symlink/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c/a/b/c" - ], - "{./*/*,/tmp/glob-test/*}": [ - "./examples/g.js", - "./examples/usr-local.js", - "./node_modules/graceful-fs", - "./node_modules/inherits", - "./node_modules/minimatch", - "./node_modules/mkdirp", - "./node_modules/rimraf", - "./node_modules/tap", - "./test/00-setup.js", - "./test/a", - "./test/bash-comparison.js", - "./test/bash-results.json", - "./test/cwd-test.js", - "./test/globstar-match.js", - "./test/mark.js", - "./test/nocase-nomagic.js", - "./test/pause-resume.js", - "./test/root-nomount.js", - "./test/root.js", - "./test/stat.js", - "./test/zz-cleanup.js", - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq" - ], - "{/tmp/glob-test/*,*}": [ - "/tmp/glob-test/asdf", - "/tmp/glob-test/bar", - "/tmp/glob-test/baz", - "/tmp/glob-test/foo", - "/tmp/glob-test/quux", - "/tmp/glob-test/qwer", - "/tmp/glob-test/rewq", - "examples", - "glob.js", - "LICENSE", - "node_modules", - "package.json", - "README.md", - "test" - ], - "test/a/!(symlink)/**": [ - "test/a/abcdef", - "test/a/abcdef/g", - "test/a/abcdef/g/h", - "test/a/abcfed", - "test/a/abcfed/g", - "test/a/abcfed/g/h", - "test/a/b", - "test/a/b/c", - "test/a/b/c/d", - "test/a/bc", - "test/a/bc/e", - "test/a/bc/e/f", - "test/a/c", - "test/a/c/d", - "test/a/c/d/c", - "test/a/c/d/c/b", - "test/a/cb", - "test/a/cb/e", - "test/a/cb/e/f" - ] -} diff --git a/build/node_modules/glob/test/cwd-test.js b/build/node_modules/glob/test/cwd-test.js deleted file mode 100644 index 352c27ef..00000000 --- a/build/node_modules/glob/test/cwd-test.js +++ /dev/null @@ -1,55 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing cwd and searching for **/d", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('**/d', function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('a', function (t) { - glob('**/d', {cwd:path.resolve('a')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'b/c/d', 'c/d' ]) - t.end() - }) - }) - - t.test('a/b', function (t) { - glob('**/d', {cwd:path.resolve('a/b')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('a/b/', function (t) { - glob('**/d', {cwd:path.resolve('a/b/')}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'c/d' ]) - t.end() - }) - }) - - t.test('.', function (t) { - glob('**/d', {cwd: process.cwd()}, function (er, matches) { - t.ifError(er) - t.like(matches, [ 'a/b/c/d', 'a/c/d' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/build/node_modules/glob/test/globstar-match.js b/build/node_modules/glob/test/globstar-match.js deleted file mode 100644 index 9b234fa2..00000000 --- a/build/node_modules/glob/test/globstar-match.js +++ /dev/null @@ -1,19 +0,0 @@ -var Glob = require("../glob.js").Glob -var test = require('tap').test - -test('globstar should not have dupe matches', function(t) { - var pattern = 'a/**/[gh]' - var g = new Glob(pattern, { cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - console.error('match %j', m) - matches.push(m) - }) - g.on('end', function(set) { - console.error('set', set) - matches = matches.sort() - set = set.sort() - t.same(matches, set, 'should have same set of matches') - t.end() - }) -}) diff --git a/build/node_modules/glob/test/mark.js b/build/node_modules/glob/test/mark.js deleted file mode 100644 index ed68a335..00000000 --- a/build/node_modules/glob/test/mark.js +++ /dev/null @@ -1,74 +0,0 @@ -var test = require("tap").test -var glob = require('../') -process.chdir(__dirname) - -test("mark, no / on pattern", function (t) { - glob("a/*", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - - if (process.platform !== "win32") - expect.push('a/symlink/') - - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, no / on pattern", function (t) { - glob("a/*", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef', - 'a/abcfed', - 'a/b', - 'a/bc', - 'a/c', - 'a/cb' ] - - if (process.platform !== "win32") - expect.push('a/symlink') - t.same(results, expect) - t.end() - }) -}) - -test("mark=true, / on pattern", function (t) { - glob("a/*/", {mark: true}, function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) - -test("mark=false, / on pattern", function (t) { - glob("a/*/", function (er, results) { - if (er) - throw er - var expect = [ 'a/abcdef/', - 'a/abcfed/', - 'a/b/', - 'a/bc/', - 'a/c/', - 'a/cb/' ] - if (process.platform !== "win32") - expect.push('a/symlink/') - t.same(results, expect) - t.end() - }) -}) diff --git a/build/node_modules/glob/test/nocase-nomagic.js b/build/node_modules/glob/test/nocase-nomagic.js deleted file mode 100644 index d8629709..00000000 --- a/build/node_modules/glob/test/nocase-nomagic.js +++ /dev/null @@ -1,113 +0,0 @@ -var fs = require('graceful-fs'); -var test = require('tap').test; -var glob = require('../'); - -test('mock fs', function(t) { - var stat = fs.stat - var statSync = fs.statSync - var readdir = fs.readdir - var readdirSync = fs.readdirSync - - function fakeStat(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = { isDirectory: function() { return true } } - break - case '/tmp/a': - ret = { isDirectory: function() { return false } } - break - } - return ret - } - - fs.stat = function(path, cb) { - var f = fakeStat(path); - if (f) { - process.nextTick(function() { - cb(null, f) - }) - } else { - stat.call(fs, path, cb) - } - } - - fs.statSync = function(path) { - return fakeStat(path) || statSync.call(fs, path) - } - - function fakeReaddir(path) { - var ret - switch (path.toLowerCase()) { - case '/tmp': case '/tmp/': - ret = [ 'a', 'A' ] - break - case '/': - ret = ['tmp', 'tMp', 'tMP', 'TMP'] - } - return ret - } - - fs.readdir = function(path, cb) { - var f = fakeReaddir(path) - if (f) - process.nextTick(function() { - cb(null, f) - }) - else - readdir.call(fs, path, cb) - } - - fs.readdirSync = function(path) { - return fakeReaddir(path) || readdirSync.call(fs, path) - } - - t.pass('mocked') - t.end() -}) - -test('nocase, nomagic', function(t) { - var n = 2 - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/a', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) - glob('/tmp/A', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - if (--n === 0) t.end() - }) -}) - -test('nocase, with some magic', function(t) { - t.plan(2) - var want = [ '/TMP/A', - '/TMP/a', - '/tMP/A', - '/tMP/a', - '/tMp/A', - '/tMp/a', - '/tmp/A', - '/tmp/a' ] - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) - glob('/tmp/*', { nocase: true }, function(er, res) { - if (er) - throw er - t.same(res.sort(), want) - }) -}) diff --git a/build/node_modules/glob/test/pause-resume.js b/build/node_modules/glob/test/pause-resume.js deleted file mode 100644 index e1ffbab1..00000000 --- a/build/node_modules/glob/test/pause-resume.js +++ /dev/null @@ -1,73 +0,0 @@ -// show that no match events happen while paused. -var tap = require("tap") -, child_process = require("child_process") -// just some gnarly pattern with lots of matches -, pattern = "test/a/!(symlink)/**" -, bashResults = require("./bash-results.json") -, patterns = Object.keys(bashResults) -, glob = require("../") -, Glob = glob.Glob -, path = require("path") - -// run from the root of the project -// this is usually where you're at anyway, but be sure. -process.chdir(path.resolve(__dirname, "..")) - -function alphasort (a, b) { - a = a.toLowerCase() - b = b.toLowerCase() - return a > b ? 1 : a < b ? -1 : 0 -} - -function cleanResults (m) { - // normalize discrepancies in ordering, duplication, - // and ending slashes. - return m.map(function (m) { - return m.replace(/\/+/g, "/").replace(/\/$/, "") - }).sort(alphasort).reduce(function (set, f) { - if (f !== set[set.length - 1]) set.push(f) - return set - }, []).sort(alphasort).map(function (f) { - // de-windows - return (process.platform !== 'win32') ? f - : f.replace(/^[a-zA-Z]:\\\\/, '/').replace(/\\/g, '/') - }) -} - -var globResults = [] -tap.test("use a Glob object, and pause/resume it", function (t) { - var g = new Glob(pattern) - , paused = false - , res = [] - , expect = bashResults[pattern] - - g.on("pause", function () { - console.error("pause") - }) - - g.on("resume", function () { - console.error("resume") - }) - - g.on("match", function (m) { - t.notOk(g.paused, "must not be paused") - globResults.push(m) - g.pause() - t.ok(g.paused, "must be paused") - setTimeout(g.resume.bind(g), 10) - }) - - g.on("end", function (matches) { - t.pass("reached glob end") - globResults = cleanResults(globResults) - matches = cleanResults(matches) - t.deepEqual(matches, globResults, - "end event matches should be the same as match events") - - t.deepEqual(matches, expect, - "glob matches should be the same as bash results") - - t.end() - }) -}) - diff --git a/build/node_modules/glob/test/root-nomount.js b/build/node_modules/glob/test/root-nomount.js deleted file mode 100644 index 3ac5979b..00000000 --- a/build/node_modules/glob/test/root-nomount.js +++ /dev/null @@ -1,39 +0,0 @@ -var tap = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -tap.test("changing root and searching for /b*/**", function (t) { - var glob = require('../') - var path = require('path') - t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.', nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) - }) - - t.test('a', function (t) { - glob('/b*/**', { globDebug: true, root: path.resolve('a'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b'), nomount: true }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ]) - t.end() - }) - }) - - t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() - }) - - t.end() -}) diff --git a/build/node_modules/glob/test/root.js b/build/node_modules/glob/test/root.js deleted file mode 100644 index 95c23f99..00000000 --- a/build/node_modules/glob/test/root.js +++ /dev/null @@ -1,46 +0,0 @@ -var t = require("tap") - -var origCwd = process.cwd() -process.chdir(__dirname) - -var glob = require('../') -var path = require('path') - -t.test('.', function (t) { - glob('/b*/**', { globDebug: true, root: '.' }, function (er, matches) { - t.ifError(er) - t.like(matches, []) - t.end() - }) -}) - - -t.test('a', function (t) { - console.error("root=" + path.resolve('a')) - glob('/b*/**', { globDebug: true, root: path.resolve('a') }, function (er, matches) { - t.ifError(er) - var wanted = [ - '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' - ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - }) - - t.like(matches, wanted) - t.end() - }) -}) - -t.test('root=a, cwd=a/b', function (t) { - glob('/b*/**', { globDebug: true, root: 'a', cwd: path.resolve('a/b') }, function (er, matches) { - t.ifError(er) - t.like(matches, [ '/b', '/b/c', '/b/c/d', '/bc', '/bc/e', '/bc/e/f' ].map(function (m) { - return path.join(path.resolve('a'), m).replace(/\\/g, '/') - })) - t.end() - }) -}) - -t.test('cd -', function (t) { - process.chdir(origCwd) - t.end() -}) diff --git a/build/node_modules/glob/test/stat.js b/build/node_modules/glob/test/stat.js deleted file mode 100644 index 62917114..00000000 --- a/build/node_modules/glob/test/stat.js +++ /dev/null @@ -1,32 +0,0 @@ -var glob = require('../') -var test = require('tap').test -var path = require('path') - -test('stat all the things', function(t) { - var g = new glob.Glob('a/*abc*/**', { stat: true, cwd: __dirname }) - var matches = [] - g.on('match', function(m) { - matches.push(m) - }) - var stats = [] - g.on('stat', function(m) { - stats.push(m) - }) - g.on('end', function(eof) { - stats = stats.sort() - matches = matches.sort() - eof = eof.sort() - t.same(stats, matches) - t.same(eof, matches) - var cache = Object.keys(this.statCache) - t.same(cache.map(function (f) { - return path.relative(__dirname, f) - }).sort(), matches) - - cache.forEach(function(c) { - t.equal(typeof this.statCache[c], 'object') - }, this) - - t.end() - }) -}) diff --git a/build/node_modules/glob/test/zz-cleanup.js b/build/node_modules/glob/test/zz-cleanup.js deleted file mode 100644 index e085f0fa..00000000 --- a/build/node_modules/glob/test/zz-cleanup.js +++ /dev/null @@ -1,11 +0,0 @@ -// remove the fixtures -var tap = require("tap") -, rimraf = require("rimraf") -, path = require("path") - -tap.test("cleanup fixtures", function (t) { - rimraf(path.resolve(__dirname, "a"), function (er) { - t.ifError(er, "removed") - t.end() - }) -}) diff --git a/build/node_modules/graceful-fs/.npmignore b/build/node_modules/graceful-fs/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/build/node_modules/graceful-fs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/build/node_modules/graceful-fs/README.md b/build/node_modules/graceful-fs/README.md deleted file mode 100644 index eb1a1093..00000000 --- a/build/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over fs module - -graceful-fs: - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. diff --git a/build/node_modules/graceful-fs/graceful-fs.js b/build/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index c84db910..00000000 --- a/build/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,160 +0,0 @@ -// Monkey-patching the fs module. -// It's ugly, but there is simply no other way to do this. -var fs = module.exports = require('fs') - -var assert = require('assert') - -// fix up some busted stuff, mostly on windows and old nodes -require('./polyfills.js') - -// The EMFILE enqueuing stuff - -var util = require('util') - -function noop () {} - -var debug = noop -if (util.debuglog) - debug = util.debuglog('gfs') -else if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS: ' + m.split(/\n/).join('\nGFS: ') - console.error(m) - } - -if (/\bgfs\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug('fds', fds) - debug(queue) - assert.equal(queue.length, 0) - }) -} - - -var originalOpen = fs.open -fs.open = open - -function open(path, flags, mode, cb) { - if (typeof mode === "function") cb = mode, mode = null - if (typeof cb !== "function") cb = noop - new OpenReq(path, flags, mode, cb) -} - -function OpenReq(path, flags, mode, cb) { - this.path = path - this.flags = flags - this.mode = mode - this.cb = cb - Req.call(this) -} - -util.inherits(OpenReq, Req) - -OpenReq.prototype.process = function() { - originalOpen.call(fs, this.path, this.flags, this.mode, this.done) -} - -var fds = {} -OpenReq.prototype.done = function(er, fd) { - debug('open done', er, fd) - if (fd) - fds['fd' + fd] = this.path - Req.prototype.done.call(this, er, fd) -} - - -var originalReaddir = fs.readdir -fs.readdir = readdir - -function readdir(path, cb) { - if (typeof cb !== "function") cb = noop - new ReaddirReq(path, cb) -} - -function ReaddirReq(path, cb) { - this.path = path - this.cb = cb - Req.call(this) -} - -util.inherits(ReaddirReq, Req) - -ReaddirReq.prototype.process = function() { - originalReaddir.call(fs, this.path, this.done) -} - -ReaddirReq.prototype.done = function(er, files) { - if (files && files.sort) - files = files.sort() - Req.prototype.done.call(this, er, files) - onclose() -} - - -var originalClose = fs.close -fs.close = close - -function close (fd, cb) { - debug('close', fd) - if (typeof cb !== "function") cb = noop - delete fds['fd' + fd] - originalClose.call(fs, fd, function(er) { - onclose() - cb(er) - }) -} - - -var originalCloseSync = fs.closeSync -fs.closeSync = closeSync - -function closeSync (fd) { - try { - return originalCloseSync(fd) - } finally { - onclose() - } -} - - -// Req class -function Req () { - // start processing - this.done = this.done.bind(this) - this.failures = 0 - this.process() -} - -Req.prototype.done = function (er, result) { - var tryAgain = false - if (er) { - var code = er.code - var tryAgain = code === "EMFILE" - if (process.platform === "win32") - tryAgain = tryAgain || code === "OK" - } - - if (tryAgain) { - this.failures ++ - enqueue(this) - } else { - var cb = this.cb - cb(er, result) - } -} - -var queue = [] - -function enqueue(req) { - queue.push(req) - debug('enqueue %d %s', queue.length, req.constructor.name, req) -} - -function onclose() { - var req = queue.shift() - if (req) { - debug('process', req.constructor.name, req) - req.process() - } -} diff --git a/build/node_modules/graceful-fs/package.json b/build/node_modules/graceful-fs/package.json deleted file mode 100644 index d54f2e4d..00000000 --- a/build/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "graceful-fs@~2.0.0", - "_id": "graceful-fs@2.0.3", - "_inBundle": false, - "_integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", - "_location": "/graceful-fs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "graceful-fs@~2.0.0", - "name": "graceful-fs", - "escapedName": "graceful-fs", - "rawSpec": "~2.0.0", - "saveSpec": null, - "fetchSpec": "~2.0.0" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "_shasum": "7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0", - "_spec": "graceful-fs@~2.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/glob", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "bundleDependencies": false, - "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", - "description": "A drop-in replacement for fs, making various improvements.", - "directories": { - "test": "test" - }, - "engines": { - "node": ">=0.4.0" - }, - "homepage": "https://github.com/isaacs/node-graceful-fs#readme", - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "BSD", - "main": "graceful-fs.js", - "name": "graceful-fs", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-graceful-fs.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "2.0.3" -} diff --git a/build/node_modules/graceful-fs/polyfills.js b/build/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index afc83b3f..00000000 --- a/build/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,228 +0,0 @@ -var fs = require('fs') -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -// (re-)implement some things that are known busted or missing. - -// lchmod, broken prior to 0.6.2 -// back-port the fix here. -if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - fs.lchmod = function (path, mode, callback) { - callback = callback || noop - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var err, err2 - try { - var ret = fs.fchmodSync(fd, mode) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } -} - - -// lutimes implementation, or no-op -if (!fs.lutimes) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - cb = cb || noop - if (er) return cb(er) - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - return cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - , err - , err2 - , ret - - try { - var ret = fs.futimesSync(fd, at, mt) - } catch (er) { - err = er - } - try { - fs.closeSync(fd) - } catch (er) { - err2 = er - } - if (err || err2) throw (err || err2) - return ret - } - - } else if (fs.utimensat && constants.hasOwnProperty("AT_SYMLINK_NOFOLLOW")) { - // maybe utimensat will be bound soonish? - fs.lutimes = function (path, at, mt, cb) { - fs.utimensat(path, at, mt, constants.AT_SYMLINK_NOFOLLOW, cb) - } - - fs.lutimesSync = function (path, at, mt) { - return fs.utimensatSync(path, at, mt, constants.AT_SYMLINK_NOFOLLOW) - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - - -// https://github.com/isaacs/node-graceful-fs/issues/4 -// Chown should not fail on einval or eperm if non-root. - -fs.chown = chownFix(fs.chown) -fs.fchown = chownFix(fs.fchown) -fs.lchown = chownFix(fs.lchown) - -fs.chownSync = chownFixSync(fs.chownSync) -fs.fchownSync = chownFixSync(fs.fchownSync) -fs.lchownSync = chownFixSync(fs.lchownSync) - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er, res) { - if (chownErOk(er)) er = null - cb(er, res) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - -function chownErOk (er) { - // if there's no getuid, or if getuid() is something other than 0, - // and the error is EINVAL or EPERM, then just ignore it. - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // When running as root, or if other types of errors are encountered, - // then it's strict. - if (!er || (!process.getuid || process.getuid() !== 0) - && (er.code === "EINVAL" || er.code === "EPERM")) return true -} - - -// if lchmod/lchown do not exist, then make them no-ops -if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - process.nextTick(cb) - } - fs.lchmodSync = function () {} -} -if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - process.nextTick(cb) - } - fs.lchownSync = function () {} -} - - - -// on Windows, A/V software can lock the directory, causing this -// to fail with an EACCES or EPERM if the directory contains newly -// created files. Try again on failure, for up to 1 second. -if (process.platform === "win32") { - var rename_ = fs.rename - fs.rename = function rename (from, to, cb) { - var start = Date.now() - rename_(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return rename_(from, to, CB) - } - cb(er) - }) - } -} - - -// if read() returns EAGAIN, then just try it again. -var read = fs.read -fs.read = function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return read.call(fs, fd, buffer, offset, length, position, callback) -} - -var readSync = fs.readSync -fs.readSync = function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } -} - diff --git a/build/node_modules/graceful-fs/test/open.js b/build/node_modules/graceful-fs/test/open.js deleted file mode 100644 index 104f36b0..00000000 --- a/build/node_modules/graceful-fs/test/open.js +++ /dev/null @@ -1,39 +0,0 @@ -var test = require('tap').test -var fs = require('../graceful-fs.js') - -test('graceful fs is monkeypatched fs', function (t) { - t.equal(fs, require('fs')) - t.end() -}) - -test('open an existing file works', function (t) { - var fd = fs.openSync(__filename, 'r') - fs.closeSync(fd) - fs.open(__filename, 'r', function (er, fd) { - if (er) throw er - fs.close(fd, function (er) { - if (er) throw er - t.pass('works') - t.end() - }) - }) -}) - -test('open a non-existing file throws', function (t) { - var er - try { - var fd = fs.openSync('this file does not exist', 'r') - } catch (x) { - er = x - } - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - - fs.open('neither does this file', 'r', function (er, fd) { - t.ok(er, 'should throw') - t.notOk(fd, 'should not get an fd') - t.equal(er.code, 'ENOENT') - t.end() - }) -}) diff --git a/build/node_modules/graceful-fs/test/readdir-sort.js b/build/node_modules/graceful-fs/test/readdir-sort.js deleted file mode 100644 index aeaedf1c..00000000 --- a/build/node_modules/graceful-fs/test/readdir-sort.js +++ /dev/null @@ -1,21 +0,0 @@ -var test = require("tap").test -var fs = require("fs") - -var readdir = fs.readdir -fs.readdir = function(path, cb) { - process.nextTick(function() { - cb(null, ["b", "z", "a"]) - }) -} - -var g = require("../") - -test("readdir reorder", function (t) { - g.readdir("whatevers", function (er, files) { - if (er) - throw er - console.error(files) - t.same(files, [ "a", "b", "z" ]) - t.end() - }) -}) diff --git a/build/node_modules/growl/.eslintrc.json b/build/node_modules/growl/.eslintrc.json new file mode 100644 index 00000000..f067e891 --- /dev/null +++ b/build/node_modules/growl/.eslintrc.json @@ -0,0 +1,14 @@ +{ + "extends": ["airbnb-base", "eslint:recommended", "plugin:node/recommended"], + "plugins": [ + "import", + "node" + ], + "rules": { + "no-console": ["error", { "allow": ["warn", "error"] }] + }, + "env": { + "node": true, + "es6": true + } +} diff --git a/build/node_modules/growl/.tags b/build/node_modules/growl/.tags new file mode 100644 index 00000000..ce68994f --- /dev/null +++ b/build/node_modules/growl/.tags @@ -0,0 +1,195 @@ +name /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "name": "growl",$/;" function line:2 +version /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "version": "1.10.1",$/;" function line:3 +description /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "description": "Growl unobtrusive notifications",$/;" function line:4 +author /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "author": "TJ Holowaychuk ",$/;" function line:5 +maintainers /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "maintainers": [$/;" function line:6 +repository /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "repository": {$/;" function line:10 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "type": "git",$/;" function line:11 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "url": "git:\/\/github.com\/tj\/node-growl.git"$/;" function line:12 +main /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "main": ".\/lib\/growl.js",$/;" function line:14 +license /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "license": "MIT",$/;" function line:15 +devDependencies /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "devDependencies": {$/;" function line:16 +eslint /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "eslint": "^4.2.0",$/;" function line:17 +eslint-config-airbnb-base /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "eslint-config-airbnb-base": "^11.2.0",$/;" function line:18 +eslint-plugin-import /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "eslint-plugin-import": "^2.7.0"$/;" function line:19 +scripts /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "scripts": {$/;" function line:21 +test /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "test": "node test.js",$/;" function line:22 +lint /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "lint": "eslint --ext js lib "$/;" function line:23 +engines /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "engines": {$/;" function line:25 +node /Users/timosand/Dropbox/Documents/Projects/node-growl/package.json /^ "node": ">=4.x"$/;" function line:26 +extends /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "extends": ["airbnb-base", "eslint:recommended", "plugin:node\/recommended"],$/;" function line:2 +plugins /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "plugins": [$/;" function line:3 +rules /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "rules": {$/;" function line:7 +no-console /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "no-console": ["error", { "allow": ["warn", "error"] }]$/;" function line:8 +env /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "env": {$/;" function line:10 +node /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "node": true,$/;" function line:11 +es6 /Users/timosand/Dropbox/Documents/Projects/node-growl/.eslintrc.json /^ "es6": true$/;" function line:12 +language /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^language: node_js$/;" function line:1 +dist /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^dist: trusty$/;" function line:2 +os /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^os:$/;" function line:3 +node_js /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^node_js:$/;" function line:6 +before_install /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^before_install:$/;" function line:12 +jobs /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^jobs:$/;" function line:14 +include /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^ include:$/;" function line:15 +script /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^ script: npm run lint$/;" function line:17 +script /Users/timosand/Dropbox/Documents/Projects/node-growl/.travis.yml /^ script: npm test$/;" function line:19 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^let cmd;$/;" variable line:15 +which /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function which(name) {$/;" function line:17 +loc /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let loc;$/;" variable line:19 +len /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ for (let i = 0, len = paths.length; i < len; i += 1) {$/;" variable line:21 +loc /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ loc = path.join(paths[i], name);$/;" variable line:22 +setupCmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function setupCmd() {$/;" function line:28 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:32 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:32 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-NotificationCenter',$/;" string line:33 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-NotificationCenter',$/;" variable line:33 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'terminal-notifier',$/;" string line:34 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'terminal-notifier',$/;" variable line:34 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-message',$/;" string line:35 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-message',$/;" variable line:35 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" string line:36 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" variable line:36 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" string line:37 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" variable line:37 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-appIcon',$/;" string line:38 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-appIcon',$/;" variable line:38 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sound: '-sound',$/;" string line:39 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sound: '-sound',$/;" variable line:39 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '-open',$/;" string line:40 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '-open',$/;" variable line:40 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:41 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:41 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-execute',$/;" string line:42 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-execute',$/;" variable line:42 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" array line:43 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" variable line:43 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:47 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:47 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-Growl',$/;" string line:48 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-Growl',$/;" variable line:48 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" string line:49 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" variable line:49 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" string line:50 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" variable line:50 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '--sticky',$/;" string line:51 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '--sticky',$/;" variable line:51 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '--url',$/;" string line:52 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '--url',$/;" variable line:52 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:53 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:53 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '--priority',$/;" string line:54 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '--priority',$/;" variable line:54 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:55 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:55 +0 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 0,$/;" variable line:58 +1 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 1,$/;" variable line:59 +2 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 2,$/;" variable line:60 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:70 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:73 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:73 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux-Growl',$/;" string line:74 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux-Growl',$/;" variable line:74 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growl',$/;" string line:75 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growl',$/;" variable line:75 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" string line:76 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" variable line:76 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" string line:77 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" variable line:77 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" string line:78 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" variable line:78 +host /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ host: {$/;" object line:79 +host /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ host: {$/;" variable line:79 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-H',$/;" string line:80 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-H',$/;" variable line:80 +hostname /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ hostname: '192.168.33.1',$/;" string line:81 +hostname /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ hostname: '192.168.33.1',$/;" variable line:81 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:85 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:85 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux',$/;" string line:86 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux',$/;" variable line:86 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'notify-send',$/;" string line:87 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'notify-send',$/;" variable line:87 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" string line:88 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" variable line:88 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '-t 0',$/;" string line:89 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '-t 0',$/;" variable line:89 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-i',$/;" string line:90 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-i',$/;" variable line:90 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:91 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:91 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-u',$/;" string line:92 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-u',$/;" variable line:92 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:93 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:93 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:101 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:103 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:103 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Windows',$/;" string line:104 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Windows',$/;" variable line:104 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" string line:105 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" variable line:105 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" string line:106 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" variable line:106 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '\/s:true',$/;" string line:107 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '\/s:true',$/;" variable line:107 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '\/t:',$/;" string line:108 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '\/t:',$/;" variable line:108 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '\/i:',$/;" string line:109 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '\/i:',$/;" variable line:109 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '\/cu:',$/;" string line:110 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '\/cu:',$/;" variable line:110 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:111 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:111 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '\/p:',$/;" string line:112 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '\/p:',$/;" variable line:112 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:113 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:113 +0 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 0,$/;" variable line:116 +1 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 1,$/;" variable line:117 +2 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 2,$/;" variable line:118 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:122 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:124 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' })$/;" string line:151 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' })$/;" variable line:151 +opts /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function growl(msg, opts, callback) {$/;" variable line:162 +growl /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function growl(msg, opts, callback) {$/;" function line:162 +image /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let image;$/;" variable line:163 +noop /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ const fn = callback || function noop() {};$/;" function line:165 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:170 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:170 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Custom',$/;" string line:171 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Custom',$/;" variable line:171 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: options.exec,$/;" variable line:172 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" array line:173 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" variable line:173 +return /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ return;$/;" variable line:180 +image /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ image = options.image;$/;" variable line:186 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let flag;$/;" variable line:189 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = ext === 'icns' && 'iconpath';$/;" variable line:191 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (\/^[A-Z]\/.test(image) && 'appIcon');$/;" variable line:192 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (\/^png|gif|jpe?g$\/.test(ext) && 'image');$/;" variable line:193 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (ext && (image = ext) && 'icon');$/;" variable line:194 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || 'icon';$/;" variable line:195 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:197 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:201 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:206 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:209 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:211 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:246 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:264 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:273 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:282 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:287 +command /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let command = customCmd.replace(\/(^|[^%])%s\/g, `$1${message}`);$/;" variable line:293 +command /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ command = splitCmd.shift();$/;" variable line:296 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:303 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:306 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stdout = '';$/;" string line:311 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stdout = '';$/;" variable line:311 +stderr /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stderr = '';$/;" string line:312 +stderr /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stderr = '';$/;" variable line:312 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let error;$/;" variable line:313 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ error = err;$/;" variable line:317 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ error = error || code === 0 ? null : code;$/;" variable line:329 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ fn(error, stdout, stderr);$/;" variable line:331 +exports /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^module.exports = growl;$/;" variable line:341 diff --git a/build/node_modules/growl/.tags1 b/build/node_modules/growl/.tags1 new file mode 100644 index 00000000..b68beb30 --- /dev/null +++ b/build/node_modules/growl/.tags1 @@ -0,0 +1,166 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.8 // +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^let cmd;$/;" variable line:15 +which /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function which(name) {$/;" function line:17 +loc /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let loc;$/;" variable line:19 +len /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ for (let i = 0, len = paths.length; i < len; i += 1) {$/;" variable line:21 +loc /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ loc = path.join(paths[i], name);$/;" variable line:22 +setupCmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function setupCmd() {$/;" function line:28 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:32 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:32 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-NotificationCenter',$/;" string line:33 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-NotificationCenter',$/;" variable line:33 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'terminal-notifier',$/;" string line:34 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'terminal-notifier',$/;" variable line:34 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-message',$/;" string line:35 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-message',$/;" variable line:35 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" string line:36 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" variable line:36 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" string line:37 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" variable line:37 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-appIcon',$/;" string line:38 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-appIcon',$/;" variable line:38 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sound: '-sound',$/;" string line:39 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sound: '-sound',$/;" variable line:39 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '-open',$/;" string line:40 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '-open',$/;" variable line:40 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:41 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:41 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-execute',$/;" string line:42 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-execute',$/;" variable line:42 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" array line:43 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" variable line:43 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:47 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:47 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-Growl',$/;" string line:48 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Darwin-Growl',$/;" variable line:48 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" string line:49 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" variable line:49 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" string line:50 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" variable line:50 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '--sticky',$/;" string line:51 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '--sticky',$/;" variable line:51 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '--url',$/;" string line:52 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '--url',$/;" variable line:52 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:53 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:53 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '--priority',$/;" string line:54 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '--priority',$/;" variable line:54 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:55 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:55 +0 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 0,$/;" variable line:58 +1 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 1,$/;" variable line:59 +2 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 2,$/;" variable line:60 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:70 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:73 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:73 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux-Growl',$/;" string line:74 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux-Growl',$/;" variable line:74 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growl',$/;" string line:75 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growl',$/;" variable line:75 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" string line:76 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '-m',$/;" variable line:76 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" string line:77 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '-title',$/;" variable line:77 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" string line:78 +subtitle /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ subtitle: '-subtitle',$/;" variable line:78 +host /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ host: {$/;" object line:79 +host /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ host: {$/;" variable line:79 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-H',$/;" string line:80 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-H',$/;" variable line:80 +hostname /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ hostname: '192.168.33.1',$/;" string line:81 +hostname /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ hostname: '192.168.33.1',$/;" variable line:81 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:85 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:85 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux',$/;" string line:86 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Linux',$/;" variable line:86 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'notify-send',$/;" string line:87 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'notify-send',$/;" variable line:87 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" string line:88 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" variable line:88 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '-t 0',$/;" string line:89 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '-t 0',$/;" variable line:89 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-i',$/;" string line:90 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '-i',$/;" variable line:90 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:91 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:91 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-u',$/;" string line:92 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '-u',$/;" variable line:92 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:93 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:93 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:101 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:103 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:103 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Windows',$/;" string line:104 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Windows',$/;" variable line:104 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" string line:105 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: 'growlnotify',$/;" variable line:105 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" string line:106 +msg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ msg: '',$/;" variable line:106 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '\/s:true',$/;" string line:107 +sticky /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ sticky: '\/s:true',$/;" variable line:107 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '\/t:',$/;" string line:108 +title /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ title: '\/t:',$/;" variable line:108 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '\/i:',$/;" string line:109 +icon /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ icon: '\/i:',$/;" variable line:109 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '\/cu:',$/;" string line:110 +url /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ url: '\/cu:',$/;" variable line:110 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" object line:111 +priority /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ priority: {$/;" variable line:111 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '\/p:',$/;" string line:112 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd: '\/p:',$/;" variable line:112 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" array line:113 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [$/;" variable line:113 +0 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 0,$/;" variable line:116 +1 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 1,$/;" variable line:117 +2 /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ 2,$/;" variable line:118 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:122 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:124 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' })$/;" string line:151 +sound /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' })$/;" variable line:151 +opts /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function growl(msg, opts, callback) {$/;" variable line:162 +growl /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^function growl(msg, opts, callback) {$/;" function line:162 +image /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let image;$/;" variable line:163 +noop /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ const fn = callback || function noop() {};$/;" function line:165 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" object line:170 +cmd /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ cmd = {$/;" variable line:170 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Custom',$/;" string line:171 +type /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ type: 'Custom',$/;" variable line:171 +pkg /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ pkg: options.exec,$/;" variable line:172 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" array line:173 +range /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ range: [],$/;" variable line:173 +return /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ return;$/;" variable line:180 +image /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ image = options.image;$/;" variable line:186 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let flag;$/;" variable line:189 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = ext === 'icns' && 'iconpath';$/;" variable line:191 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (\/^[A-Z]\/.test(image) && 'appIcon');$/;" variable line:192 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (\/^png|gif|jpe?g$\/.test(ext) && 'image');$/;" variable line:193 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || (ext && (image = ext) && 'icon');$/;" variable line:194 +flag /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ flag = flag || 'icon';$/;" variable line:195 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:197 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:201 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:206 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:209 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:211 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:246 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:264 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:273 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:282 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:287 +command /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let command = customCmd.replace(\/(^|[^%])%s\/g, `$1${message}`);$/;" variable line:293 +command /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ command = splitCmd.shift();$/;" variable line:296 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:303 +break /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ break;$/;" variable line:306 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stdout = '';$/;" string line:311 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stdout = '';$/;" variable line:311 +stderr /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stderr = '';$/;" string line:312 +stderr /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let stderr = '';$/;" variable line:312 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ let error;$/;" variable line:313 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ error = err;$/;" variable line:317 +error /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ error = error || code === 0 ? null : code;$/;" variable line:329 +stdout /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^ fn(error, stdout, stderr);$/;" variable line:331 +exports /Users/timosand/Dropbox/Documents/Projects/node-growl/lib/growl.js /^module.exports = growl;$/;" variable line:341 diff --git a/build/node_modules/growl/.travis.yml b/build/node_modules/growl/.travis.yml new file mode 100644 index 00000000..072adfc0 --- /dev/null +++ b/build/node_modules/growl/.travis.yml @@ -0,0 +1,21 @@ +language: node_js +dist: trusty +os: + - linux + - osx +node_js: +- '4' +- '5' +- '6' +- '7' +- 'node' +before_install: + - npm i -g npm@latest + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y libnotify-bin; fi +jobs: + include: + - stage: lint + script: npm run lint + - stage: test + script: npm test diff --git a/build/node_modules/growl/History.md b/build/node_modules/growl/History.md index a4b7b49f..dfbc2e4b 100644 --- a/build/node_modules/growl/History.md +++ b/build/node_modules/growl/History.md @@ -1,3 +1,17 @@ +1.10.5 / 2018-04-04 +================== + +* Fix callbacks not receiving errors (#72) [chadrickman] + +1.10.4 / 2018-01-29 +================== + +* Fix notifications on linux when using notify-send (#70) [hmshwt] + +1.9.3 / 2016-09-05 +================== + + * fixed command injection vulnerability 1.7.0 / 2012-12-30 ================== diff --git a/build/node_modules/growl/Readme.md b/build/node_modules/growl/Readme.md index 48d717cc..54128b43 100644 --- a/build/node_modules/growl/Readme.md +++ b/build/node_modules/growl/Readme.md @@ -1,30 +1,31 @@ # Growl for nodejs +[![Build Status](https://travis-ci.org/tj/node-growl.svg?branch=master)](https://travis-ci.org/tj/node-growl) -Growl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). +Growl support for Nodejs. This is essentially a port of my [Ruby Growl Library](http://github.com/visionmedia/growl). Ubuntu/Linux support added thanks to [@niftylettuce](http://github.com/niftylettuce). ## Installation -### Install +### Install ### Mac OS X (Darwin): Install [growlnotify(1)](http://growl.info/extras.php#growlnotify). On OS X 10.8, Notification Center is supported using [terminal-notifier](https://github.com/alloy/terminal-notifier). To install: - - $ sudo gem install terminal-notifier - + + $ sudo gem install terminal-notifier + Install [npm](http://npmjs.org/) and run: - - $ npm install growl + + $ npm install growl ### Ubuntu (Linux): Install `notify-send` through the [libnotify-bin](http://packages.ubuntu.com/libnotify-bin) package: - $ sudo apt-get install libnotify-bin + $ sudo apt-get install libnotify-bin Install [npm](http://npmjs.org/) and run: - - $ npm install growl + + $ npm install growl ### Windows: @@ -33,27 +34,29 @@ Growl support for Nodejs. This is essentially a port of my [Ruby Growl Library]( Download [growlnotify](http://www.growlforwindows.com/gfw/help/growlnotify.aspx) - **IMPORTANT :** Unpack growlnotify to a folder that is present in your path! Install [npm](http://npmjs.org/) and run: - - $ npm install growl + + $ npm install growl ## Examples Callback functions are optional - var growl = require('growl') - growl('You have mail!') - growl('5 new messages', { sticky: true }) - growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) - growl('Message with title', { title: 'Title'}) - growl('Set priority', { priority: 2 }) - growl('Show Safari icon', { image: 'Safari' }) - growl('Show icon', { image: 'path/to/icon.icns' }) - growl('Show image', { image: 'path/to/my.image.png' }) - growl('Show png filesystem icon', { image: 'png' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }) - growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){ - // ... notified - }) +```javascript +var growl = require('growl') +growl('You have mail!') +growl('5 new messages', { sticky: true }) +growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) +growl('Message with title', { title: 'Title'}) +growl('Set priority', { priority: 2 }) +growl('Show Safari icon', { image: 'Safari' }) +growl('Show icon', { image: 'path/to/icon.icns' }) +growl('Show image', { image: 'path/to/my.image.png' }) +growl('Show png filesystem icon', { image: 'png' }) +growl('Show pdf filesystem icon', { image: 'article.pdf' }) +growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(err){ + // ... notified +}) +``` ## Options @@ -72,12 +75,19 @@ Callback functions are optional - capitalized word sets --appIcon - filename uses extname as --icon - otherwise treated as --icon - -## License + - exec + - manually specify a shell command instead + - appends message to end of shell command + - or, replaces `%s` with message + - optionally prepends title (example: `title: message`) + - examples: `{exec: 'tmux display-message'}`, `{exec: 'echo "%s" > messages.log}` + +## License (The MIT License) Copyright (c) 2009 TJ Holowaychuk +Copyright (c) 2016 Joshua Boy Nicolai Appelman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/build/node_modules/growl/lib/growl.js b/build/node_modules/growl/lib/growl.js index c034c3ef..eb4efa8c 100644 --- a/build/node_modules/growl/lib/growl.js +++ b/build/node_modules/growl/lib/growl.js @@ -1,115 +1,130 @@ +'use strict'; + // Growl - Copyright TJ Holowaychuk (MIT Licensed) /** * Module dependencies. */ -var exec = require('child_process').exec - , fs = require('fs') - , path = require('path') - , exists = fs.existsSync || path.existsSync - , os = require('os') - , quote = JSON.stringify - , cmd; +const spawn = require('child_process').spawn; +const fs = require('fs'); +const path = require('path'); +const os = require('os'); + +const exists = fs.existsSync || path.existsSync; +let cmd; function which(name) { - var paths = process.env.PATH.split(':'); - var loc; - - for (var i = 0, len = paths.length; i < len; ++i) { + const paths = process.env.PATH.split(':'); + let loc; + + for (let i = 0, len = paths.length; i < len; i += 1) { loc = path.join(paths[i], name); if (exists(loc)) return loc; } + return false; } -switch(os.type()) { - case 'Darwin': - if (which('terminal-notifier')) { - cmd = { - type: "Darwin-NotificationCenter" - , pkg: "terminal-notifier" - , msg: '-message' - , title: '-title' - , subtitle: '-subtitle' - , priority: { - cmd: '-execute' - , range: [] - } - }; - } else { +function setupCmd() { + switch (os.type()) { + case 'Darwin': + if (which('terminal-notifier')) { + cmd = { + type: 'Darwin-NotificationCenter', + pkg: 'terminal-notifier', + msg: '-message', + title: '-title', + subtitle: '-subtitle', + icon: '-appIcon', + sound: '-sound', + url: '-open', + priority: { + cmd: '-execute', + range: [], + }, + }; + } else { + cmd = { + type: 'Darwin-Growl', + pkg: 'growlnotify', + msg: '-m', + sticky: '--sticky', + url: '--url', + priority: { + cmd: '--priority', + range: [ + -2, + -1, + 0, + 1, + 2, + 'Very Low', + 'Moderate', + 'Normal', + 'High', + 'Emergency', + ], + }, + }; + } + break; + case 'Linux': + if (which('growl')) { + cmd = { + type: 'Linux-Growl', + pkg: 'growl', + msg: '-m', + title: '-title', + subtitle: '-subtitle', + host: { + cmd: '-H', + hostname: '192.168.33.1', + }, + }; + } else { + cmd = { + type: 'Linux', + pkg: 'notify-send', + msg: '', + sticky: '-t', + icon: '-i', + priority: { + cmd: '-u', + range: [ + 'low', + 'normal', + 'critical', + ], + }, + }; + } + break; + case 'Windows_NT': cmd = { - type: "Darwin-Growl" - , pkg: "growlnotify" - , msg: '-m' - , sticky: '--sticky' - , priority: { - cmd: '--priority' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - , "Very Low" - , "Moderate" - , "Normal" - , "High" - , "Emergency" - ] - } + type: 'Windows', + pkg: 'growlnotify', + msg: '', + sticky: '/s:true', + title: '/t:', + icon: '/i:', + url: '/cu:', + priority: { + cmd: '/p:', + range: [ + -2, + -1, + 0, + 1, + 2, + ], + }, }; - } - break; - case 'Linux': - cmd = { - type: "Linux" - , pkg: "notify-send" - , msg: '' - , sticky: '-t 0' - , icon: '-i' - , priority: { - cmd: '-u' - , range: [ - "low" - , "normal" - , "critical" - ] - } - }; - break; - case 'Windows_NT': - cmd = { - type: "Windows" - , pkg: "growlnotify" - , msg: '' - , sticky: '/s:true' - , title: '/t:' - , icon: '/i:' - , priority: { - cmd: '/p:' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - ] - } - }; - break; + break; + default: + break; + } } -/** - * Expose `growl`. - */ - -exports = module.exports = growl; - -/** - * Node-growl version. - */ - -exports.version = '1.4.1' /** * Send growl notification _msg_ with _options_. @@ -120,6 +135,8 @@ exports.version = '1.4.1' * - sticky Make the notification stick (defaults to false) * - priority Specify an int or named key (default is 0) * - name Application name (defaults to growlnotify) + * - sound Sound efect ( in OSx defined in preferences -> sound -> effects) + * works only in OSX > 10.8x * - image * - path to an icon sets --iconpath * - path to an image sets --image @@ -131,104 +148,193 @@ exports.version = '1.4.1' * * growl('New email') * growl('5 new emails', { title: 'Thunderbird' }) + * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' }) * growl('Email sent', function(){ * // ... notification sent * }) * * @param {string} msg - * @param {object} options - * @param {function} fn + * @param {object} opts + * @param {function} callback * @api public */ -function growl(msg, options, fn) { - var image - , args - , options = options || {} - , fn = fn || function(){}; +function growl(msg, opts, callback) { + let image; + const options = opts || {}; + const fn = callback || function noop() {}; + + setupCmd(); + + if (options.exec) { + cmd = { + type: 'Custom', + pkg: options.exec, + range: [], + }; + } // noop - if (!cmd) return fn(new Error('growl not supported on this platform')); - args = [cmd.pkg]; + if (!cmd) { + fn(new Error('growl not supported on this platform')); + return; + } + const args = [cmd.pkg]; // image - if (image = options.image) { - switch(cmd.type) { - case 'Darwin-Growl': - var flag, ext = path.extname(image).substr(1) - flag = flag || ext == 'icns' && 'iconpath' - flag = flag || /^[A-Z]/.test(image) && 'appIcon' - flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image' - flag = flag || ext && (image = ext) && 'icon' - flag = flag || 'icon' - args.push('--' + flag, quote(image)) + if (image || options.image) { + image = options.image; + switch (cmd.type) { + case 'Darwin-Growl': { + let flag; + const ext = path.extname(image).substr(1); + flag = ext === 'icns' && 'iconpath'; + flag = flag || (/^[A-Z]/.test(image) && 'appIcon'); + flag = flag || (/^png|gif|jpe?g$/.test(ext) && 'image'); + flag = flag || (ext && (image = ext) && 'icon'); + flag = flag || 'icon'; + args.push(`--${flag}`, image); + break; + } + case 'Darwin-NotificationCenter': + args.push(cmd.icon, image); break; case 'Linux': - args.push(cmd.icon, quote(image)); + args.push(cmd.icon, image); // libnotify defaults to sticky, set a hint for transient notifications if (!options.sticky) args.push('--hint=int:transient:1'); break; case 'Windows': - args.push(cmd.icon + quote(image)); + args.push(cmd.icon + image); + break; + default: break; } } // sticky if (options.sticky) args.push(cmd.sticky); + if (options.sticky && cmd.type === 'Linux') args.push('0'); // priority if (options.priority) { - var priority = options.priority + ''; - var checkindexOf = cmd.priority.range.indexOf(priority); - if (~cmd.priority.range.indexOf(priority)) { + const priority = `${options.priority}`; + const checkindexOf = cmd.priority.range.indexOf(priority); + if (checkindexOf > -1) { args.push(cmd.priority, options.priority); } } + // sound + if (options.sound && cmd.type === 'Darwin-NotificationCenter') { + args.push(cmd.sound, options.sound); + } + // name - if (options.name && cmd.type === "Darwin-Growl") { + if (options.name && cmd.type === 'Darwin-Growl') { args.push('--name', options.name); } - switch(cmd.type) { + switch (cmd.type) { case 'Darwin-Growl': args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); + args.push(msg.replace(/\\n/g, '\n')); + if (options.title) args.push(options.title); + if (options.url) { + args.push(cmd.url); + args.push(options.url); + } break; - case 'Darwin-NotificationCenter': + case 'Darwin-NotificationCenter': { args.push(cmd.msg); - args.push(quote(msg)); + const stringifiedMsg = msg; + const escapedMsg = stringifiedMsg.replace(/\\n/g, '\n'); + args.push(escapedMsg); if (options.title) { args.push(cmd.title); - args.push(quote(options.title)); + args.push(options.title); } if (options.subtitle) { args.push(cmd.subtitle); - args.push(quote(options.subtitle)); + args.push(options.subtitle); + } + if (options.url) { + args.push(cmd.url); + args.push(options.url); } break; - case 'Darwin-Growl': + } + case 'Linux-Growl': args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); + args.push(msg.replace(/\\n/g, '\n')); + if (options.title) args.push(options.title); + if (cmd.host) { + args.push(cmd.host.cmd, cmd.host.hostname); + } break; case 'Linux': - if (options.title) { - args.push(quote(options.title)); - args.push(cmd.msg); - args.push(quote(msg)); - } else { - args.push(quote(msg)); - } + if (options.title) args.push(options.title); + args.push(msg.replace(/\\n/g, '\n')); break; case 'Windows': - args.push(quote(msg)); - if (options.title) args.push(cmd.title + quote(options.title)); + args.push(msg.replace(/\\n/g, '\n')); + if (options.title) args.push(cmd.title + options.title); + if (options.url) args.push(cmd.url + options.url); + break; + case 'Custom': { + const customCmd = args[0]; + const message = options.title + ? `${options.title}: ${msg}` + : msg; + let command = customCmd.replace(/(^|[^%])%s/g, `$1${message}`); + const splitCmd = command.split(' '); + if (splitCmd.length > 1) { + command = splitCmd.shift(); + Array.prototype.push.apply(args, splitCmd); + } + if (customCmd.indexOf('%s') < 0) { + args.push(message); + } + args[0] = command; + break; + } + default: break; } + const cmdToExec = args.shift(); + + const child = spawn(cmdToExec, args); + let stdout = ''; + let stderr = ''; + let error; + + const now = new Date(); + const timestamp = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}.${now.getMilliseconds()}` + + stderr += `[${timestamp}][node-growl] : Executed command '${cmdToExec}' with arguments '${args}'\n[stderr] : `; + + child.on('error', (err) => { + console.error('An error occured.', err); + error = err; + }); + + child.stdout.on('data', (data) => { + stdout += data; + }); + + child.stderr.on('data', (data) => { + stderr += data; + }); + + child.on('close', () => { + if (typeof fn === 'function') { + fn(error, stdout, stderr); + } + }); +} + +/** + * Expose `growl`. + */ - // execute - exec(args.join(' '), fn); -}; +module.exports = growl; diff --git a/build/node_modules/growl/package.json b/build/node_modules/growl/package.json index 42029e50..867d39e9 100644 --- a/build/node_modules/growl/package.json +++ b/build/node_modules/growl/package.json @@ -1,49 +1,67 @@ { - "_from": "growl@1.8.1", - "_id": "growl@1.8.1", + "_from": "growl@1.10.5", + "_id": "growl@1.10.5", "_inBundle": false, - "_integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=", + "_integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "_location": "/growl", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "growl@1.8.1", + "raw": "growl@1.10.5", "name": "growl", "escapedName": "growl", - "rawSpec": "1.8.1", + "rawSpec": "1.10.5", "saveSpec": null, - "fetchSpec": "1.8.1" + "fetchSpec": "1.10.5" }, "_requiredBy": [ "/mocha" ], - "_resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz", - "_shasum": "4b2dec8d907e93db336624dcec0183502f8c9428", - "_spec": "growl@1.8.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/growl/-/growl-1.10.5.tgz", + "_shasum": "f2735dc2283674fa67478b10181059355c369e5e", + "_spec": "growl@1.10.5", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "bugs": { - "url": "https://github.com/visionmedia/node-growl/issues" + "url": "https://github.com/tj/node-growl/issues" }, "bundleDependencies": false, "deprecated": false, "description": "Growl unobtrusive notifications", - "homepage": "https://github.com/visionmedia/node-growl#readme", + "devDependencies": { + "eslint": "^4.8.0", + "eslint-config-airbnb-base": "^12.0.1", + "eslint-plugin-import": "^2.7.0", + "eslint-plugin-node": "^5.2.0" + }, + "engines": { + "node": ">=4.x" + }, + "homepage": "https://github.com/tj/node-growl#readme", + "license": "MIT", "main": "./lib/growl.js", "maintainers": [ { - "name": "Joshua Appelman", + "name": "Joshua Boy Nicolai Appelman", "email": "joshua@jbnicolai.nl" + }, + { + "name": "Timo Sand", + "email": "timo.sand@iki.fi" } ], "name": "growl", "repository": { "type": "git", - "url": "git://github.com/visionmedia/node-growl.git" + "url": "git://github.com/tj/node-growl.git" + }, + "scripts": { + "lint": "eslint --ext js lib ", + "test": "node test.js" }, - "version": "1.8.1" + "version": "1.10.5" } diff --git a/build/node_modules/growl/test.js b/build/node_modules/growl/test.js index cf22d90b..3b1d2296 100644 --- a/build/node_modules/growl/test.js +++ b/build/node_modules/growl/test.js @@ -1,6 +1,7 @@ var growl = require('./lib/growl') +growl('Support sound notifications', {title: 'Make a sound', sound: 'purr'}); growl('You have mail!') growl('5 new messages', { sticky: true }) growl('5 new emails', { title: 'Email Client', image: 'Safari', sticky: true }) @@ -16,5 +17,15 @@ growl('Show pdf filesystem icon', { image: 'article.pdf' }, function(){ }) growl('Show pdf filesystem icon', { title: 'Use show()', image: 'article.pdf' }) growl('here \' are \n some \\ characters that " need escaping', {}, function(error, stdout, stderr) { - if (error !== null) throw new Error('escaping failed:\n' + stdout + stderr); + if (error) throw new Error('escaping failed:\n' + stdout + stderr); }) +growl('Allow custom notifiers', { exec: 'echo XXX %s' }, function(error, stdout, stderr) { + console.log(stdout); +}) +growl('Allow custom notifiers', { title: 'test', exec: 'echo YYY' }, function(error, stdout, stderr) { + console.log(stdout); +}) +growl('Allow custom notifiers', { title: 'test', exec: 'echo ZZZ %s' }, function(error, stdout, stderr) { + console.log(stdout); +}) +growl('Open a URL', { url: 'https://npmjs.org/package/growl' }); diff --git a/build/node_modules/has-bigints/.eslintignore b/build/node_modules/has-bigints/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/has-bigints/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/has-bigints/.eslintrc b/build/node_modules/has-bigints/.eslintrc deleted file mode 100644 index 699b23b6..00000000 --- a/build/node_modules/has-bigints/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "operator-linebreak": [2, "before"], - }, -} diff --git a/build/node_modules/has-bigints/.github/FUNDING.yml b/build/node_modules/has-bigints/.github/FUNDING.yml deleted file mode 100644 index 5b597c84..00000000 --- a/build/node_modules/has-bigints/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/has-bigints -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/has-bigints/.nycrc b/build/node_modules/has-bigints/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/has-bigints/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/has-bigints/CHANGELOG.md b/build/node_modules/has-bigints/CHANGELOG.md deleted file mode 100644 index 48f9dc23..00000000 --- a/build/node_modules/has-bigints/CHANGELOG.md +++ /dev/null @@ -1,43 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.1](https://github.com/inspect-js/has-bigints/compare/v1.0.0...v1.0.1) - 2020-12-13 - -### Commits - -- [Tests] use shared travis-ci configs [`46a0d6b`](https://github.com/inspect-js/has-bigints/commit/46a0d6be7ed83bd7f5ead11e4eab7fc91570a448) -- [Tests] migrate tests to Github Actions [`91a38fa`](https://github.com/inspect-js/has-bigints/commit/91a38fa4b85a420b8cf4926b3799e6ceb60d8690) -- [meta] do not publish github action workflow files [`69aacba`](https://github.com/inspect-js/has-bigints/commit/69aacba320c1221e7fee1c71bde600bce063f24b) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`64e2c08`](https://github.com/inspect-js/has-bigints/commit/64e2c0895b21ac91a137452fd2455932f62a2fc1) -- [Tests] run `nyc` on all tests; use `tape` runner [`8009375`](https://github.com/inspect-js/has-bigints/commit/8009375e5ec9faca6bbc09441002af5c5e59ff20) -- [actions] add automatic rebasing / merge commit blocking [`e599917`](https://github.com/inspect-js/has-bigints/commit/e599917fd1f751c9a6c0daac70acb243f8c3a01d) -- [actions] add "Allow Edits" workflow [`bd0126e`](https://github.com/inspect-js/has-bigints/commit/bd0126eba2d67e9b9d588bced34413f507698154) -- [readme] remove travis badge [`8e02a73`](https://github.com/inspect-js/has-bigints/commit/8e02a73db34827d24d2945f2db822973a0b49925) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `auto-changelog`, `safe-publish-latest` [`95859f2`](https://github.com/inspect-js/has-bigints/commit/95859f28f23f5733481c52a501063802cf64f75b) -- [Dev Deps] update `auto-changelog`, `in-publish`, `tape` [`0588f41`](https://github.com/inspect-js/has-bigints/commit/0588f415c6cc01d6b34668680044e03b2998e03f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`5b024a6`](https://github.com/inspect-js/has-bigints/commit/5b024a664a8b7d2d2f750a4c11ce20c395b6f12a) -- [meta] add `version` scripts [`4788d61`](https://github.com/inspect-js/has-bigints/commit/4788d61101c009e4e2c1b4d944c263de06192c6a) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`be0e0de`](https://github.com/inspect-js/has-bigints/commit/be0e0de08298dfe483c5d7a2675e5133abeabc53) -- [Dev Deps] update `auto-changelog`; add `aud` [`13a8d1b`](https://github.com/inspect-js/has-bigints/commit/13a8d1bf1f661871d890bfa174de9514f016cdd9) -- [actions] fix action name [`f873d9a`](https://github.com/inspect-js/has-bigints/commit/f873d9a2f10718662528a755b12c61202f4e4afa) -- [meta] add `funding` field [`1b51f49`](https://github.com/inspect-js/has-bigints/commit/1b51f4921df1faf85d2679a0e4ba97ef015a73b7) -- [Dev Deps] update `auto-changelog` [`2322461`](https://github.com/inspect-js/has-bigints/commit/2322461789810434c447439f155eb3ca23eb29fb) -- [Tests] only audit prod deps [`aabdade`](https://github.com/inspect-js/has-bigints/commit/aabdadeaa1e126b91a2fbd82263cc49651ff5e7b) - -## v1.0.0 - 2019-08-10 - -### Commits - -- [Tests] add `.travis.yml` [`9730412`](https://github.com/inspect-js/has-bigints/commit/973041241dc172474bb9457aad41790fe54fec88) -- Initial commit [`65f7c38`](https://github.com/inspect-js/has-bigints/commit/65f7c3889d9a98e214e26d650723cbfc49338463) -- [Tests] add tests [`e374a78`](https://github.com/inspect-js/has-bigints/commit/e374a78033d457badcd47e06752fdec7f62e6c39) -- readme [`5d39092`](https://github.com/inspect-js/has-bigints/commit/5d3909249da442867180fb747eef27543627d250) -- npm init [`1be2e3d`](https://github.com/inspect-js/has-bigints/commit/1be2e3d69db6718901e6845cfc38a07cc46dfd96) -- implementation [`b7bc812`](https://github.com/inspect-js/has-bigints/commit/b7bc8121db1fb1a827625c4cb0608935e3dcbe31) -- [Tests] add linting [`04533be`](https://github.com/inspect-js/has-bigints/commit/04533bef57f60e322238f71f32ee3ae0c988bac4) -- [meta] create FUNDING.yml [`cf824a7`](https://github.com/inspect-js/has-bigints/commit/cf824a7d02e867957d8db17ee0a4c70c8ee5ff23) -- Only apps should have lockfiles [`64e8242`](https://github.com/inspect-js/has-bigints/commit/64e82429f1dca99f624dc971ff13516dee28d353) diff --git a/build/node_modules/has-bigints/LICENSE b/build/node_modules/has-bigints/LICENSE deleted file mode 100644 index 3900dd7e..00000000 --- a/build/node_modules/has-bigints/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/has-bigints/README.md b/build/node_modules/has-bigints/README.md deleted file mode 100644 index 38470798..00000000 --- a/build/node_modules/has-bigints/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# has-bigints [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Determine if the JS environment has BigInt support. - -## Example - -```js -var hasBigInts = require('has-bigints'); - -hasBigInts() === true; // if the environment has native BigInt support. Not polyfillable, not forgeable. -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/has-bigints -[2]: https://versionbadg.es/ljharb/has-bigints.svg -[5]: https://david-dm.org/ljharb/has-bigints.svg -[6]: https://david-dm.org/ljharb/has-bigints -[7]: https://david-dm.org/ljharb/has-bigints/dev-status.svg -[8]: https://david-dm.org/ljharb/has-bigints#info=devDependencies -[9]: https://ci.testling.com/ljharb/has-bigints.png -[10]: https://ci.testling.com/ljharb/has-bigints -[11]: https://nodei.co/npm/has-bigints.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/has-bigints.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/has-bigints.svg -[downloads-url]: https://npm-stat.com/charts.html?package=has-bigints diff --git a/build/node_modules/has-bigints/index.js b/build/node_modules/has-bigints/index.js deleted file mode 100644 index dd9af1df..00000000 --- a/build/node_modules/has-bigints/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var $BigInt = global.BigInt; - -module.exports = function hasNativeBigInts() { - return typeof $BigInt === 'function' - && typeof BigInt === 'function' - && typeof $BigInt(42) === 'bigint' // eslint-disable-line no-magic-numbers - && typeof BigInt(42) === 'bigint'; // eslint-disable-line no-magic-numbers -}; diff --git a/build/node_modules/has-bigints/package.json b/build/node_modules/has-bigints/package.json deleted file mode 100644 index 933634bf..00000000 --- a/build/node_modules/has-bigints/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "has-bigints@^1.0.1", - "_id": "has-bigints@1.0.1", - "_inBundle": false, - "_integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "_location": "/has-bigints", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "has-bigints@^1.0.1", - "name": "has-bigints", - "escapedName": "has-bigints", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/unbox-primitive" - ], - "_resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "_shasum": "64fe6acb020673e3b78db035a5af69aa9d07b113", - "_spec": "has-bigints@^1.0.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/unbox-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/ljharb/has-bigints/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Determine if the JS environment has BigInt support.", - "devDependencies": { - "@ljharb/eslint-config": "^17.3.0", - "aud": "^1.1.3", - "auto-changelog": "^2.2.1", - "eslint": "^7.15.0", - "in-publish": "^2.0.1", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/ljharb/has-bigints#readme", - "keywords": [ - "BigInt", - "bigints", - "typeof", - "ES2020" - ], - "license": "MIT", - "main": "index.js", - "name": "has-bigints", - "repository": { - "type": "git", - "url": "git+https://github.com/ljharb/has-bigints.git" - }, - "scripts": { - "lint": "eslint --ext=js,mjs .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.1" -} diff --git a/build/node_modules/has-bigints/test/index.js b/build/node_modules/has-bigints/test/index.js deleted file mode 100644 index efbc98b5..00000000 --- a/build/node_modules/has-bigints/test/index.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var test = require('tape'); -var hasBigInts = require('..'); - -test('interface', function (t) { - t.equal(typeof hasBigInts, 'function', 'is a function'); - t.equal(typeof hasBigInts(), 'boolean', 'returns a boolean'); - t.end(); -}); - -test('BigInts are supported', { skip: !hasBigInts() }, function (t) { - t.equal(typeof BigInt, 'function', 'global BigInt is a function'); - if (typeof BigInt !== 'function') { - return; - } - - t.equal(BigInt(42), BigInt(42), '42n === 42n'); - t['throws']( - function () { BigInt(NaN); }, - RangeError, - 'NaN is not an integer; BigInt(NaN) throws' - ); - - t['throws']( - function () { BigInt(Infinity); }, - RangeError, - 'Infinity is not an integer; BigInt(Infinity) throws' - ); - - t['throws']( - function () { BigInt(1.1); }, - RangeError, - '1.1 is not an integer; BigInt(1.1) throws' - ); - - t.end(); -}); - -test('BigInts are not supported', { skip: hasBigInts() }, function (t) { - t.equal(typeof BigInt, 'undefined', 'global BigInt is undefined'); - - t.end(); -}); diff --git a/build/node_modules/has-flag/index.d.ts b/build/node_modules/has-flag/index.d.ts new file mode 100644 index 00000000..a0a48c89 --- /dev/null +++ b/build/node_modules/has-flag/index.d.ts @@ -0,0 +1,39 @@ +/** +Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag. + +@param flag - CLI flag to look for. The `--` prefix is optional. +@param argv - CLI arguments. Default: `process.argv`. +@returns Whether the flag exists. + +@example +``` +// $ ts-node foo.ts -f --unicorn --foo=bar -- --rainbow + +// foo.ts +import hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('f'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` +*/ +declare function hasFlag(flag: string, argv?: string[]): boolean; + +export = hasFlag; diff --git a/build/node_modules/has-flag/index.js b/build/node_modules/has-flag/index.js new file mode 100644 index 00000000..b6f80b1f --- /dev/null +++ b/build/node_modules/has-flag/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +}; diff --git a/build/node_modules/has-flag/license b/build/node_modules/has-flag/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/has-flag/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/has-flag/package.json b/build/node_modules/has-flag/package.json new file mode 100644 index 00000000..bc70f9d6 --- /dev/null +++ b/build/node_modules/has-flag/package.json @@ -0,0 +1,80 @@ +{ + "_from": "has-flag@^4.0.0", + "_id": "has-flag@4.0.0", + "_inBundle": false, + "_integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "_location": "/has-flag", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "has-flag@^4.0.0", + "name": "has-flag", + "escapedName": "has-flag", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/chalk/supports-color", + "/sinon/supports-color", + "/supports-color" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has-flag/-/has-flag-4.0.0.tgz", + "_shasum": "944771fd9c81c81265c4d6941860da06bb59479b", + "_spec": "has-flag@^4.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chalk/node_modules/supports-color", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/has-flag/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if argv has a specific flag", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/has-flag#readme", + "keywords": [ + "has", + "check", + "detect", + "contains", + "find", + "flag", + "cli", + "command-line", + "argv", + "process", + "arg", + "args", + "argument", + "arguments", + "getopt", + "minimist", + "optimist" + ], + "license": "MIT", + "name": "has-flag", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/has-flag.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.0.0" +} diff --git a/build/node_modules/has-flag/readme.md b/build/node_modules/has-flag/readme.md new file mode 100644 index 00000000..3f72dff2 --- /dev/null +++ b/build/node_modules/has-flag/readme.md @@ -0,0 +1,89 @@ +# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag) + +> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag + +Correctly stops looking after an `--` argument terminator. + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + + +## Install + +``` +$ npm install has-flag +``` + + +## Usage + +```js +// foo.js +const hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('f'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` + +``` +$ node foo.js -f --unicorn --foo=bar -- --rainbow +``` + + +## API + +### hasFlag(flag, [argv]) + +Returns a boolean for whether the flag exists. + +#### flag + +Type: `string` + +CLI flag to look for. The `--` prefix is optional. + +#### argv + +Type: `string[]`
+Default: `process.argv` + +CLI arguments. + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/build/node_modules/has-symbols/.eslintignore b/build/node_modules/has-symbols/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/has-symbols/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/has-symbols/.nycrc b/build/node_modules/has-symbols/.nycrc index 1826526e..bdd626ce 100644 --- a/build/node_modules/has-symbols/.nycrc +++ b/build/node_modules/has-symbols/.nycrc @@ -2,10 +2,6 @@ "all": true, "check-coverage": false, "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, "exclude": [ "coverage", "test" diff --git a/build/node_modules/has-symbols/CHANGELOG.md b/build/node_modules/has-symbols/CHANGELOG.md index 852ca042..cd532a2b 100644 --- a/build/node_modules/has-symbols/CHANGELOG.md +++ b/build/node_modules/has-symbols/CHANGELOG.md @@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v1.0.3](https://github.com/inspect-js/has-symbols/compare/v1.0.2...v1.0.3) - 2022-03-01 + +### Commits + +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`518b28f`](https://github.com/inspect-js/has-symbols/commit/518b28f6c5a516cbccae30794e40aa9f738b1693) +- [meta] add `bugs` and `homepage` fields; reorder package.json [`c480b13`](https://github.com/inspect-js/has-symbols/commit/c480b13fd6802b557e1cef9749872cb5fdeef744) +- [actions] reuse common workflows [`01d0ee0`](https://github.com/inspect-js/has-symbols/commit/01d0ee0a8d97c0947f5edb73eb722027a77b2b07) +- [actions] update codecov uploader [`6424ebe`](https://github.com/inspect-js/has-symbols/commit/6424ebe86b2c9c7c3d2e9bd4413a4e4f168cb275) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`dfa7e7f`](https://github.com/inspect-js/has-symbols/commit/dfa7e7ff38b594645d8c8222aab895157fa7e282) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0c8d436`](https://github.com/inspect-js/has-symbols/commit/0c8d43685c45189cea9018191d4fd7eca91c9d02) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`9026554`](https://github.com/inspect-js/has-symbols/commit/902655442a1bf88e72b42345494ef0c60f5d36ab) +- [readme] add actions and codecov badges [`eaa9682`](https://github.com/inspect-js/has-symbols/commit/eaa9682f990f481d3acf7a1c7600bec36f7b3adc) +- [Dev Deps] update `eslint`, `tape` [`bc7a3ba`](https://github.com/inspect-js/has-symbols/commit/bc7a3ba46f27b7743f8a2579732d59d1b9ac791e) +- [Dev Deps] update `eslint`, `auto-changelog` [`0ace00a`](https://github.com/inspect-js/has-symbols/commit/0ace00af08a88cdd1e6ce0d60357d941c60c2d9f) +- [meta] use `prepublishOnly` script for npm 7+ [`093f72b`](https://github.com/inspect-js/has-symbols/commit/093f72bc2b0ed00c781f444922a5034257bf561d) +- [Tests] test on all 16 minors [`9b80d3d`](https://github.com/inspect-js/has-symbols/commit/9b80d3d9102529f04c20ec5b1fcc6e38426c6b03) + ## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27 ### Fixed diff --git a/build/node_modules/has-symbols/README.md b/build/node_modules/has-symbols/README.md index 3875d7e5..33905f0f 100644 --- a/build/node_modules/has-symbols/README.md +++ b/build/node_modules/has-symbols/README.md @@ -1,5 +1,7 @@ # has-symbols [![Version Badge][2]][1] +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] [![dependency status][5]][6] [![dev dependency status][7]][8] [![License][license-image]][license-url] @@ -38,3 +40,7 @@ Simply clone the repo, `npm install`, and run `npm test` [license-url]: LICENSE [downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg [downloads-url]: https://npm-stat.com/charts.html?package=has-symbols +[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols +[actions-url]: https://github.com/inspect-js/has-symbols/actions diff --git a/build/node_modules/has-symbols/package.json b/build/node_modules/has-symbols/package.json index 589c58a1..9579dc3a 100644 --- a/build/node_modules/has-symbols/package.json +++ b/build/node_modules/has-symbols/package.json @@ -1,8 +1,8 @@ { "_from": "has-symbols@^1.0.1", - "_id": "has-symbols@1.0.2", + "_id": "has-symbols@1.0.3", "_inBundle": false, - "_integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "_integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "_location": "/has-symbols", "_phantomChildren": {}, "_requested": { @@ -16,17 +16,10 @@ "fetchSpec": "^1.0.1" }, "_requiredBy": [ - "/es-abstract", - "/get-intrinsic", - "/is-regex", - "/is-symbol", - "/is-typed-array", - "/object.assign", - "/unbox-primitive", - "/which-typed-array" + "/get-intrinsic" ], - "_resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "_shasum": "165d3070c00309752a1236a479331e3ac56f1423", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has-symbols/-/has-symbols-1.0.3.tgz", + "_shasum": "bb7b2c4349251dce87b125f7bdf874aa7c8b39f8", "_spec": "has-symbols@^1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/get-intrinsic", "author": { @@ -43,7 +36,7 @@ "hideCredit": true }, "bugs": { - "url": "https://github.com/inspect-js/has-symbols/issues" + "url": "https://github.com/ljharb/has-symbols/issues" }, "bundleDependencies": false, "contributors": [ @@ -56,15 +49,15 @@ "deprecated": false, "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", "devDependencies": { - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", - "auto-changelog": "^2.2.1", + "@ljharb/eslint-config": "^20.2.3", + "aud": "^2.0.0", + "auto-changelog": "^2.4.0", "core-js": "^2.6.12", - "eslint": "^7.20.0", + "eslint": "=8.8.0", "get-own-property-symbols": "^0.9.5", "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.0" + "safe-publish-latest": "^2.0.0", + "tape": "^5.5.2" }, "engines": { "node": ">= 0.4" @@ -77,7 +70,7 @@ "core-js" ] }, - "homepage": "https://github.com/inspect-js/has-symbols#readme", + "homepage": "https://github.com/ljharb/has-symbols#readme", "keywords": [ "Symbol", "symbols", @@ -99,7 +92,8 @@ "lint": "eslint --ext=js,mjs .", "posttest": "aud --production", "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", "pretest": "npm run --silent lint", "test": "npm run tests-only", "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", @@ -128,5 +122,5 @@ "android-browser/4.2" ] }, - "version": "1.0.2" + "version": "1.0.3" } diff --git a/build/node_modules/has/package.json b/build/node_modules/has/package.json index bd80e104..0e505253 100644 --- a/build/node_modules/has/package.json +++ b/build/node_modules/has/package.json @@ -16,11 +16,10 @@ "fetchSpec": "^1.0.3" }, "_requiredBy": [ - "/es-abstract", "/get-intrinsic", "/is-core-module" ], - "_resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has/-/has-1.0.3.tgz", "_shasum": "722d7cbfc1f6aa8241f16dd814e011e1f41e8796", "_spec": "has@^1.0.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/get-intrinsic", diff --git a/build/node_modules/hash-base/node_modules/readable-stream/CONTRIBUTING.md b/build/node_modules/hash-base/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58d..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/build/node_modules/hash-base/node_modules/readable-stream/GOVERNANCE.md b/build/node_modules/hash-base/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93f..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/build/node_modules/hash-base/node_modules/readable-stream/LICENSE b/build/node_modules/hash-base/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b2..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" diff --git a/build/node_modules/hash-base/node_modules/readable-stream/README.md b/build/node_modules/hash-base/node_modules/readable-stream/README.md deleted file mode 100644 index 6f035ab1..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# readable-stream - -***Node.js core streams for userland*** [![Build Status](https://travis-ci.com/nodejs/readable-stream.svg?branch=master)](https://travis-ci.com/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readabe-stream.svg)](https://saucelabs.com/u/readabe-stream) - -```bash -npm install --save readable-stream -``` - -This package is a mirror of the streams implementations in Node.js. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v10.19.0/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -## Version 3.x.x - -v3.x.x of `readable-stream` is a cut from Node 10. This version supports Node 6, 8, and 10, as well as evergreen browsers, IE 11 and latest Safari. The breaking changes introduced by v3 are composed by the combined breaking changes in [Node v9](https://nodejs.org/en/blog/release/v9.0.0/) and [Node v10](https://nodejs.org/en/blog/release/v10.0.0/), as follows: - -1. Error codes: https://github.com/nodejs/node/pull/13310, - https://github.com/nodejs/node/pull/13291, - https://github.com/nodejs/node/pull/16589, - https://github.com/nodejs/node/pull/15042, - https://github.com/nodejs/node/pull/15665, - https://github.com/nodejs/readable-stream/pull/344 -2. 'readable' have precedence over flowing - https://github.com/nodejs/node/pull/18994 -3. make virtual methods errors consistent - https://github.com/nodejs/node/pull/18813 -4. updated streams error handling - https://github.com/nodejs/node/pull/18438 -5. writable.end should return this. - https://github.com/nodejs/node/pull/18780 -6. readable continues to read when push('') - https://github.com/nodejs/node/pull/18211 -7. add custom inspect to BufferList - https://github.com/nodejs/node/pull/17907 -8. always defer 'readable' with nextTick - https://github.com/nodejs/node/pull/17979 - -## Version 2.x.x -v2.x.x of `readable-stream` is a cut of the stream module from Node 8 (there have been no semver-major changes from Node 4 to 8). This version supports all Node.js versions from 0.8, as well as evergreen browsers and IE 10 & 11. - -### Big Thanks - -Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs][sauce] - -# Usage - -You can swap your `require('stream')` with `require('readable-stream')` -without any changes, if you are just using one of the main classes and -functions. - -```js -const { - Readable, - Writable, - Transform, - Duplex, - pipeline, - finished -} = require('readable-stream') -```` - -Note that `require('stream')` will return `Stream`, while -`require('readable-stream')` will return `Readable`. We discourage using -whatever is exported directly, but rather use one of the properties as -shown in the example above. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - - -## Team Members - -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> -* **Yoshua Wyuts** ([@yoshuawuyts](https://github.com/yoshuawuyts)) <yoshuawuyts@gmail.com> - -[sauce]: https://saucelabs.com diff --git a/build/node_modules/hash-base/node_modules/readable-stream/errors-browser.js b/build/node_modules/hash-base/node_modules/readable-stream/errors-browser.js deleted file mode 100644 index fb8e73e1..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/errors-browser.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; - -function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } - -var codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error; - } - - function getMessage(arg1, arg2, arg3) { - if (typeof message === 'string') { - return message; - } else { - return message(arg1, arg2, arg3); - } - } - - var NodeError = - /*#__PURE__*/ - function (_Base) { - _inheritsLoose(NodeError, _Base); - - function NodeError(arg1, arg2, arg3) { - return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; - } - - return NodeError; - }(Base); - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - codes[code] = NodeError; -} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js - - -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - var len = expected.length; - expected = expected.map(function (i) { - return String(i); - }); - - if (len > 2) { - return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; - } else if (len === 2) { - return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); - } else { - return "of ".concat(thing, " ").concat(expected[0]); - } - } else { - return "of ".concat(thing, " ").concat(String(expected)); - } -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith - - -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith - - -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - - return str.substring(this_len - search.length, this_len) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes - - -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"'; -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - var determiner; - - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - var msg; - - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } else { - var type = includes(name, '.') ? 'property' : 'argument'; - msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } - - msg += ". Received type ".concat(typeof actual); - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented'; -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg; -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); -module.exports.codes = codes; diff --git a/build/node_modules/hash-base/node_modules/readable-stream/errors.js b/build/node_modules/hash-base/node_modules/readable-stream/errors.js deleted file mode 100644 index 8471526d..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/errors.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; - -const codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error - } - - function getMessage (arg1, arg2, arg3) { - if (typeof message === 'string') { - return message - } else { - return message(arg1, arg2, arg3) - } - } - - class NodeError extends Base { - constructor (arg1, arg2, arg3) { - super(getMessage(arg1, arg2, arg3)); - } - } - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - - codes[code] = NodeError; -} - -// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - const len = expected.length; - expected = expected.map((i) => String(i)); - if (len > 2) { - return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` + - expected[len - 1]; - } else if (len === 2) { - return `one of ${thing} ${expected[0]} or ${expected[1]}`; - } else { - return `of ${thing} ${expected[0]}`; - } - } else { - return `of ${thing} ${String(expected)}`; - } -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - return str.substring(this_len - search.length, this_len) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"' -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - let determiner; - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - let msg; - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`; - } else { - const type = includes(name, '.') ? 'property' : 'argument'; - msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`; - } - - msg += `. Received type ${typeof actual}`; - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented' -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); - -module.exports.codes = codes; diff --git a/build/node_modules/hash-base/node_modules/readable-stream/experimentalWarning.js b/build/node_modules/hash-base/node_modules/readable-stream/experimentalWarning.js deleted file mode 100644 index 78e84149..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/experimentalWarning.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -var experimentalWarnings = new Set(); - -function emitExperimentalWarning(feature) { - if (experimentalWarnings.has(feature)) return; - var msg = feature + ' is an experimental feature. This feature could ' + - 'change at any time'; - experimentalWarnings.add(feature); - process.emitWarning(msg, 'ExperimentalWarning'); -} - -function noop() {} - -module.exports.emitExperimentalWarning = process.emitWarning - ? emitExperimentalWarning - : noop; diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 67525192..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. -'use strict'; -/**/ - -var objectKeys = Object.keys || function (obj) { - var keys = []; - - for (var key in obj) { - keys.push(key); - } - - return keys; -}; -/**/ - - -module.exports = Duplex; - -var Readable = require('./_stream_readable'); - -var Writable = require('./_stream_writable'); - -require('inherits')(Duplex, Readable); - -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); - - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; - - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; - - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); // the no-half-open enforcer - -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; // no more data can be written. - // But allow more writes to happen in this tick. - - process.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 32e7414c..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -require('inherits')(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 192d4514..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; - -module.exports = Readable; -/**/ - -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; -/**/ - -var EE = require('events').EventEmitter; - -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ - - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -/**/ - - -var debugUtil = require('util'); - -var debug; - -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; -} -/**/ - - -var BufferList = require('./internal/streams/buffer_list'); - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. - - -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; - -require('inherits')(Readable, Stream); - -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - - this.sync = true; // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') - - this.autoDestroy = !!options.autoDestroy; // has it been destroyed - - this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s - - this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled - - this.readingMore = false; - this.decoder = null; - this.encoding = null; - - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); // legacy - - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } - - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; - -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; // Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. - - -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; // Unshift should *always* be something directly out of read() - - -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; - - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; - - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. - - - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } - - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } - - return er; -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; // backwards compatibility. - - -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 - - this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: - - var p = this._readableState.buffer.head; - var content = ''; - - while (p !== null) { - content += decoder.write(p.data); - p = p.next; - } - - this._readableState.buffer.clear(); - - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; // Don't raise the hwm > 1GB - - -var MAX_HWM = 0x40000000; - -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - - return n; -} // This function is designed to be inlinable, so please take care when making -// changes to the function body. - - -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } // If we're asking for more than the current hwm, then raise the hwm. - - - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; // Don't have enough - - if (!state.ended) { - state.needReadable = true; - return 0; - } - - return state.length; -} // you can override either this method, or the async _read(n) below. - - -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. - - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - // if we need a readable event, then we need to do some reading. - - - var doRead = state.needReadable; - debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some - - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - - - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; // if the length is currently zero, then we *need* a readable event. - - if (state.length === 0) state.needReadable = true; // call internal read method - - this._read(state.highWaterMark); - - state.sync = false; // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. - - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - return ret; -}; - -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; - - if (state.decoder) { - var chunk = state.decoder.end(); - - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - - state.ended = true; - - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; - - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} // Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. - - -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; - - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } -} - -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); - - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. - - - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} // at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. - - -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) // didn't get any data, stop spinning. - break; - } - - state.readingMore = false; -} // abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. - - -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - - case 1: - state.pipes = [state.pipes, dest]; - break; - - default: - state.pipes.push(dest); - break; - } - - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - - - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; - - function cleanup() { - debug('cleanup'); // cleanup event handlers once the pipe is broken - - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - src.on('data', ondata); - - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); - - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } - - src.pause(); - } - } // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - - - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } // Make sure our error handler is attached before userland ones. - - - prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. - - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - - dest.once('close', onclose); - - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } // tell the dest that it's being piped to - - - dest.emit('pipe', src); // start the flow if it hasn't been started already. - - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; // if we're not piping anywhere, then do nothing. - - if (state.pipesCount === 0) return this; // just one destination. most common case. - - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; // got a match. - - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } // slow case. multiple pipe destinations. - - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - } - - return this; - } // try to find the right one. - - - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; // set up data events if they are asked for -// Ensure readable listeners eventually get something - - -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; - - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused - - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); - - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } - } - - return res; -}; - -Readable.prototype.addListener = Readable.prototype.on; - -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); - - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; - - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} // pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. - - -Readable.prototype.resume = function () { - var state = this._readableState; - - if (!state.flowing) { - debug('resume'); // we flow only if there is no one listening - // for readable, but we still have to call - // resume() - - state.flowing = !state.readableListening; - resume(this, state); - } - - state.paused = false; - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - debug('resume', state.reading); - - if (!state.reading) { - stream.read(0); - } - - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - - this._readableState.paused = true; - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - - while (state.flowing && stream.read() !== null) { - ; - } -} // wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. - - -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); - - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode - - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - - if (!ret) { - paused = true; - stream.pause(); - } - }); // proxy all the other methods. - // important when wrapping filters and duplexes. - - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } // proxy certain important events. - - - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } // when we try to consume some more bytes, simply unpause the - // underlying stream. - - - this._read = function (n) { - debug('wrapped _read', n); - - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); - } - - return createReadableStreamAsyncIterator(this); - }; -} - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); // exposed for testing purposes only. - -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; - } -}); // Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. - -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); - } - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); - - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. - - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; - - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } - } - } -} - -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = require('./internal/streams/from'); - } - - return from(Readable, iterable, opts); - }; -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - - return -1; -} \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 41a738c4..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. -'use strict'; - -module.exports = Transform; - -var _require$codes = require('../errors').codes, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, - ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; - -var Duplex = require('./_stream_duplex'); - -require('inherits')(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - - if (cb === null) { - return this.emit('error', new ERR_MULTIPLE_CALLBACK()); - } - - ts.writechunk = null; - ts.writecb = null; - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; // start out asking for a readable event once data is transformed. - - this._readableState.needReadable = true; // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } // When the writable side finishes, then flush out anything remaining. - - - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function' && !this._readableState.destroyed) { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; // This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. - - -Transform.prototype._transform = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; // Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. - - -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && !ts.transforming) { - ts.transforming = true; - - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); // TODO(BridgeAR): Write a test for these two error cases - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - - if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); - if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); - return stream.push(null); -} \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index a2634d7c..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,697 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. -'use strict'; - -module.exports = Writable; -/* */ - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} // It seems a linked list but it is not -// there will be only 2 of these for each stream - - -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ - - -var Duplex; -/**/ - -Writable.WritableState = WritableState; -/**/ - -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; - -var errorOrDestroy = destroyImpl.errorOrDestroy; - -require('inherits')(Writable, Stream); - -function nop() {} - -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream - // contains buffers or objects. - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called - - this.finalCalled = false; // drain event flag. - - this.needDrain = false; // at the start of calling end() - - this.ending = false; // when end() has been called, and returned - - this.ended = false; // when 'finish' is emitted - - this.finished = false; // has it been destroyed - - this.destroyed = false; // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - - this.length = 0; // a flag to see when we're in the middle of a write. - - this.writing = false; // when true all writes will be buffered until .uncork() call - - this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - - this.sync = true; // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - - this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) - - this.onwrite = function (er) { - onwrite(stream, er); - }; // the callback that the user supplies to write(chunk,encoding,cb) - - - this.writecb = null; // the amount that is being written when _write is called. - - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - - this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - - this.prefinished = false; // True if the error was already emitted and should not be thrown again - - this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') - - this.autoDestroy = !!options.autoDestroy; // count buffered requests - - this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - - while (current) { - out.push(current); - current = current.next; - } - - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); // Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. - - -var realHasInstance; - -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); // legacy. - - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} // Otherwise people can pipe Writable streams, which is just wrong. - - -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; - -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb - - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} // Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. - - -function validChunk(stream, state, chunk, cb) { - var er; - - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); - } - - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; - } - - return true; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; -}; - -Writable.prototype.cork = function () { - this._writableState.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); // if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. - -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. - - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); // this can emit finish, and it will always happen - // after error - - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); // this can emit finish, but finish must - // always follow error - - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} // Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. - - -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} // if there's something in the buffer waiting, then process it - - -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - - state.pendingcb++; - state.lastBufferedRequest = null; - - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks - - if (state.corked) { - state.corked = 1; - this.uncork(); - } // ignore unnecessary end() calls. - - - if (!state.ending) endWritable(this, state, cb); - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} - -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - - if (err) { - errorOrDestroy(stream, err); - } - - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} - -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - - if (need) { - prefinish(stream, state); - - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; - - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); - } - } - } - } - - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } - - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } // reuse the free corkReq. - - - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; - } - - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._writableState.destroyed = value; - } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; - -Writable.prototype._destroy = function (err, cb) { - cb(err); -}; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js deleted file mode 100644 index 9fb615a2..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js +++ /dev/null @@ -1,207 +0,0 @@ -'use strict'; - -var _Object$setPrototypeO; - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var finished = require('./end-of-stream'); - -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); - -function createIterResult(value, done) { - return { - value: value, - done: done - }; -} - -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - - if (resolve !== null) { - var data = iter[kStream].read(); // we defer if data is null - // we can be expecting either 'end' or - // 'error' - - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } - } -} - -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} - -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } - - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} - -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, - - next: function next() { - var _this = this; - - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; - - if (error !== null) { - return Promise.reject(error); - } - - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); - } - - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - - - var lastPromise = this[kLastPromise]; - var promise; - - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - - promise = new Promise(this[kHandlePromise]); - } - - this[kLastPromise] = promise; - return promise; - } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; - - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } - - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); - -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; - - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); - - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise - // returned by next() and store the error - - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } - - iterator[kError] = err; - return; - } - - var resolve = iterator[kLastResolve]; - - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); - } - - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; -}; - -module.exports = createReadableStreamAsyncIterator; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js deleted file mode 100644 index cdea425f..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var _require = require('buffer'), - Buffer = _require.Buffer; - -var _require2 = require('util'), - inspect = _require2.inspect; - -var custom = inspect && inspect.custom || 'inspect'; - -function copyBuffer(src, target, offset) { - Buffer.prototype.copy.call(src, target, offset); -} - -module.exports = -/*#__PURE__*/ -function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - _createClass(BufferList, [{ - key: "push", - value: function push(v) { - var entry = { - data: v, - next: null - }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - } - }, { - key: "unshift", - value: function unshift(v) { - var entry = { - data: v, - next: this.head - }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - } - }, { - key: "shift", - value: function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - } - }, { - key: "clear", - value: function clear() { - this.head = this.tail = null; - this.length = 0; - } - }, { - key: "join", - value: function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - - while (p = p.next) { - ret += s + p.data; - } - - return ret; - } - }, { - key: "concat", - value: function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - - return ret; - } // Consumes a specified amount of bytes or characters from the buffered data. - - }, { - key: "consume", - value: function consume(n, hasStrings) { - var ret; - - if (n < this.head.data.length) { - // `slice` is the same for buffers and strings. - ret = this.head.data.slice(0, n); - this.head.data = this.head.data.slice(n); - } else if (n === this.head.data.length) { - // First chunk is a perfect match. - ret = this.shift(); - } else { - // Result spans more than one buffer. - ret = hasStrings ? this._getString(n) : this._getBuffer(n); - } - - return ret; - } - }, { - key: "first", - value: function first() { - return this.head.data; - } // Consumes a specified amount of characters from the buffered data. - - }, { - key: "_getString", - value: function _getString(n) { - var p = this.head; - var c = 1; - var ret = p.data; - n -= ret.length; - - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = str.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Consumes a specified amount of bytes from the buffered data. - - }, { - key: "_getBuffer", - value: function _getBuffer(n) { - var ret = Buffer.allocUnsafe(n); - var p = this.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = buf.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Make sure the linked list only shows the minimal necessary information. - - }, { - key: custom, - value: function value(_, options) { - return inspect(this, _objectSpread({}, options, { - // Only inspect one level. - depth: 0, - // It should not recurse. - customInspect: false - })); - } - }]); - - return BufferList; -}(); \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 3268a16f..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; // undocumented cb() API, needed for core, not for public API - -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } - - return this; - } // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - - if (this._readableState) { - this._readableState.destroyed = true; - } // if this is a duplex stream mark the writable part as destroyed as well - - - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); - } - }); - - return this; -} - -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} - -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy -}; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js deleted file mode 100644 index 831f286d..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +++ /dev/null @@ -1,104 +0,0 @@ -// Ported from https://github.com/mafintosh/end-of-stream with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - callback.apply(this, args); - }; -} - -function noop() {} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function eos(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once(callback || noop); - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - - var onlegacyfinish = function onlegacyfinish() { - if (!stream.writable) onfinish(); - }; - - var writableEnded = stream._writableState && stream._writableState.finished; - - var onfinish = function onfinish() { - writable = false; - writableEnded = true; - if (!readable) callback.call(stream); - }; - - var readableEnded = stream._readableState && stream._readableState.endEmitted; - - var onend = function onend() { - readable = false; - readableEnded = true; - if (!writable) callback.call(stream); - }; - - var onerror = function onerror(err) { - callback.call(stream, err); - }; - - var onclose = function onclose() { - var err; - - if (readable && !readableEnded) { - if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - - if (writable && !writableEnded) { - if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - }; - - var onrequest = function onrequest() { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !stream._writableState) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -} - -module.exports = eos; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js deleted file mode 100644 index a4ce56f3..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - throw new Error('Readable.from is not available in the browser') -}; diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from.js deleted file mode 100644 index 6c412844..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE; - -function from(Readable, iterable, opts) { - var iterator; - - if (iterable && typeof iterable.next === 'function') { - iterator = iterable; - } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable); - - var readable = new Readable(_objectSpread({ - objectMode: true - }, opts)); // Reading boolean to protect against _read - // being called before last iteration completion. - - var reading = false; - - readable._read = function () { - if (!reading) { - reading = true; - next(); - } - }; - - function next() { - return _next2.apply(this, arguments); - } - - function _next2() { - _next2 = _asyncToGenerator(function* () { - try { - var _ref = yield iterator.next(), - value = _ref.value, - done = _ref.done; - - if (done) { - readable.push(null); - } else if (readable.push((yield value))) { - next(); - } else { - reading = false; - } - } catch (err) { - readable.destroy(err); - } - }); - return _next2.apply(this, arguments); - } - - return readable; -} - -module.exports = from; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js deleted file mode 100644 index 65899098..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js +++ /dev/null @@ -1,97 +0,0 @@ -// Ported from https://github.com/mafintosh/pump with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var eos; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - callback.apply(void 0, arguments); - }; -} - -var _require$codes = require('../../../errors').codes, - ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; - -function noop(err) { - // Rethrow the error if it exists to avoid swallowing it - if (err) throw err; -} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function destroyer(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - if (eos === undefined) eos = require('./end-of-stream'); - eos(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; // request.destroy just do .end - .abort is what we want - - if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') return stream.destroy(); - callback(err || new ERR_STREAM_DESTROYED('pipe')); - }; -} - -function call(fn) { - fn(); -} - -function pipe(from, to) { - return from.pipe(to); -} - -function popCallback(streams) { - if (!streams.length) return noop; - if (typeof streams[streams.length - 1] !== 'function') return noop; - return streams.pop(); -} - -function pipeline() { - for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { - streams[_key] = arguments[_key]; - } - - var callback = popCallback(streams); - if (Array.isArray(streams[0])) streams = streams[0]; - - if (streams.length < 2) { - throw new ERR_MISSING_ARGS('streams'); - } - - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -} - -module.exports = pipeline; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js deleted file mode 100644 index 19887eb8..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; - -function highWaterMarkFrom(options, isDuplex, duplexKey) { - return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; -} - -function getHighWaterMark(state, options, duplexKey, isDuplex) { - var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); - - if (hwm != null) { - if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { - var name = isDuplex ? duplexKey : 'highWaterMark'; - throw new ERR_INVALID_OPT_VALUE(name, hwm); - } - - return Math.floor(hwm); - } // Default value - - - return state.objectMode ? 16 : 16 * 1024; -} - -module.exports = { - getHighWaterMark: getHighWaterMark -}; \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3fd..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream.js b/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b6..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/build/node_modules/hash-base/node_modules/readable-stream/package.json b/build/node_modules/hash-base/node_modules/readable-stream/package.json deleted file mode 100644 index 9da62ba1..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "readable-stream@^3.6.0", - "_id": "readable-stream@3.6.0", - "_inBundle": false, - "_integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "_location": "/hash-base/readable-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "readable-stream@^3.6.0", - "name": "readable-stream", - "escapedName": "readable-stream", - "rawSpec": "^3.6.0", - "saveSpec": null, - "fetchSpec": "^3.6.0" - }, - "_requiredBy": [ - "/hash-base" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "_shasum": "337bbda3adc0706bd3e024426a286d4b4b2c9198", - "_spec": "readable-stream@^3.6.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/hash-base", - "browser": { - "util": false, - "worker_threads": false, - "./errors": "./errors-browser.js", - "./readable.js": "./readable-browser.js", - "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "deprecated": false, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "@babel/cli": "^7.2.0", - "@babel/core": "^7.2.0", - "@babel/polyfill": "^7.0.0", - "@babel/preset-env": "^7.2.0", - "airtap": "0.0.9", - "assert": "^1.4.0", - "bl": "^2.0.0", - "deep-strict-equal": "^0.2.0", - "events.once": "^2.0.2", - "glob": "^7.1.2", - "gunzip-maybe": "^1.4.1", - "hyperquest": "^2.1.3", - "lolex": "^2.6.0", - "nyc": "^11.0.0", - "pump": "^3.0.0", - "rimraf": "^2.6.2", - "tap": "^12.0.0", - "tape": "^4.9.0", - "tar-fs": "^1.16.2", - "util-promisify": "^2.1.0" - }, - "engines": { - "node": ">= 6" - }, - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "name": "readable-stream", - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "ci": "TAP=1 tap --no-esm test/parallel/*.js test/ours/*.js | tee test.tap", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov", - "test": "tap -J --no-esm test/parallel/*.js test/ours/*.js", - "test-browser-local": "airtap --open --local -- test/browser.js", - "test-browsers": "airtap --sauce-connect --loopback airtap.local -- test/browser.js", - "update-browser-errors": "babel -o errors-browser.js errors.js" - }, - "version": "3.6.0" -} diff --git a/build/node_modules/hash-base/node_modules/readable-stream/readable-browser.js b/build/node_modules/hash-base/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index adbf60de..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,9 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); -exports.finished = require('./lib/internal/streams/end-of-stream.js'); -exports.pipeline = require('./lib/internal/streams/pipeline.js'); diff --git a/build/node_modules/hash-base/node_modules/readable-stream/readable.js b/build/node_modules/hash-base/node_modules/readable-stream/readable.js deleted file mode 100644 index 9e0ca120..00000000 --- a/build/node_modules/hash-base/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,16 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream.Readable; - Object.assign(module.exports, Stream); - module.exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); - exports.finished = require('./lib/internal/streams/end-of-stream.js'); - exports.pipeline = require('./lib/internal/streams/pipeline.js'); -} diff --git a/build/node_modules/hash-base/node_modules/safe-buffer/LICENSE b/build/node_modules/hash-base/node_modules/safe-buffer/LICENSE deleted file mode 100644 index 0c068cee..00000000 --- a/build/node_modules/hash-base/node_modules/safe-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/build/node_modules/hash-base/node_modules/safe-buffer/README.md b/build/node_modules/hash-base/node_modules/safe-buffer/README.md deleted file mode 100644 index e9a81afd..00000000 --- a/build/node_modules/hash-base/node_modules/safe-buffer/README.md +++ /dev/null @@ -1,584 +0,0 @@ -# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/safe-buffer -[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg -[npm-url]: https://npmjs.org/package/safe-buffer -[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg -[downloads-url]: https://npmjs.org/package/safe-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Safer Node.js Buffer API - -**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, -`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** - -**Uses the built-in implementation when available.** - -## install - -``` -npm install safe-buffer -``` - -## usage - -The goal of this package is to provide a safe replacement for the node.js `Buffer`. - -It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to -the top of your node.js modules: - -```js -var Buffer = require('safe-buffer').Buffer - -// Existing buffer code will continue to work without issues: - -new Buffer('hey', 'utf8') -new Buffer([1, 2, 3], 'utf8') -new Buffer(obj) -new Buffer(16) // create an uninitialized buffer (potentially unsafe) - -// But you can use these new explicit APIs to make clear what you want: - -Buffer.from('hey', 'utf8') // convert from many types to a Buffer -Buffer.alloc(16) // create a zero-filled buffer (safe) -Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) -``` - -## api - -### Class Method: Buffer.from(array) - - -* `array` {Array} - -Allocates a new `Buffer` using an `array` of octets. - -```js -const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); - // creates a new Buffer containing ASCII bytes - // ['b','u','f','f','e','r'] -``` - -A `TypeError` will be thrown if `array` is not an `Array`. - -### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) - - -* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or - a `new ArrayBuffer()` -* `byteOffset` {Number} Default: `0` -* `length` {Number} Default: `arrayBuffer.length - byteOffset` - -When passed a reference to the `.buffer` property of a `TypedArray` instance, -the newly created `Buffer` will share the same allocated memory as the -TypedArray. - -```js -const arr = new Uint16Array(2); -arr[0] = 5000; -arr[1] = 4000; - -const buf = Buffer.from(arr.buffer); // shares the memory with arr; - -console.log(buf); - // Prints: - -// changing the TypedArray changes the Buffer also -arr[1] = 6000; - -console.log(buf); - // Prints: -``` - -The optional `byteOffset` and `length` arguments specify a memory range within -the `arrayBuffer` that will be shared by the `Buffer`. - -```js -const ab = new ArrayBuffer(10); -const buf = Buffer.from(ab, 0, 2); -console.log(buf.length); - // Prints: 2 -``` - -A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. - -### Class Method: Buffer.from(buffer) - - -* `buffer` {Buffer} - -Copies the passed `buffer` data onto a new `Buffer` instance. - -```js -const buf1 = Buffer.from('buffer'); -const buf2 = Buffer.from(buf1); - -buf1[0] = 0x61; -console.log(buf1.toString()); - // 'auffer' -console.log(buf2.toString()); - // 'buffer' (copy is not changed) -``` - -A `TypeError` will be thrown if `buffer` is not a `Buffer`. - -### Class Method: Buffer.from(str[, encoding]) - - -* `str` {String} String to encode. -* `encoding` {String} Encoding to use, Default: `'utf8'` - -Creates a new `Buffer` containing the given JavaScript string `str`. If -provided, the `encoding` parameter identifies the character encoding. -If not provided, `encoding` defaults to `'utf8'`. - -```js -const buf1 = Buffer.from('this is a tést'); -console.log(buf1.toString()); - // prints: this is a tést -console.log(buf1.toString('ascii')); - // prints: this is a tC)st - -const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); -console.log(buf2.toString()); - // prints: this is a tést -``` - -A `TypeError` will be thrown if `str` is not a string. - -### Class Method: Buffer.alloc(size[, fill[, encoding]]) - - -* `size` {Number} -* `fill` {Value} Default: `undefined` -* `encoding` {String} Default: `utf8` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the -`Buffer` will be *zero-filled*. - -```js -const buf = Buffer.alloc(5); -console.log(buf); - // -``` - -The `size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -If `fill` is specified, the allocated `Buffer` will be initialized by calling -`buf.fill(fill)`. See [`buf.fill()`][] for more information. - -```js -const buf = Buffer.alloc(5, 'a'); -console.log(buf); - // -``` - -If both `fill` and `encoding` are specified, the allocated `Buffer` will be -initialized by calling `buf.fill(fill, encoding)`. For example: - -```js -const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); -console.log(buf); - // -``` - -Calling `Buffer.alloc(size)` can be significantly slower than the alternative -`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance -contents will *never contain sensitive data*. - -A `TypeError` will be thrown if `size` is not a number. - -### Class Method: Buffer.allocUnsafe(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must -be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit -architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is -thrown. A zero-length Buffer will be created if a `size` less than or equal to -0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -```js -const buf = Buffer.allocUnsafe(5); -console.log(buf); - // - // (octets will be different, every time) -buf.fill(0); -console.log(buf); - // -``` - -A `TypeError` will be thrown if `size` is not a number. - -Note that the `Buffer` module pre-allocates an internal `Buffer` instance of -size `Buffer.poolSize` that is used as a pool for the fast allocation of new -`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated -`new Buffer(size)` constructor) only when `size` is less than or equal to -`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default -value of `Buffer.poolSize` is `8192` but can be modified. - -Use of this pre-allocated internal memory pool is a key difference between -calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. -Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer -pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal -Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The -difference is subtle but can be important when an application requires the -additional performance that `Buffer.allocUnsafe(size)` provides. - -### Class Method: Buffer.allocUnsafeSlow(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The -`size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, -allocations under 4KB are, by default, sliced from a single pre-allocated -`Buffer`. This allows applications to avoid the garbage collection overhead of -creating many individually allocated Buffers. This approach improves both -performance and memory usage by eliminating the need to track and cleanup as -many `Persistent` objects. - -However, in the case where a developer may need to retain a small chunk of -memory from a pool for an indeterminate amount of time, it may be appropriate -to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then -copy out the relevant bits. - -```js -// need to keep around a few small chunks of memory -const store = []; - -socket.on('readable', () => { - const data = socket.read(); - // allocate for retained data - const sb = Buffer.allocUnsafeSlow(10); - // copy the data into the new allocation - data.copy(sb, 0, 0, 10); - store.push(sb); -}); -``` - -Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* -a developer has observed undue memory retention in their applications. - -A `TypeError` will be thrown if `size` is not a number. - -### All the Rest - -The rest of the `Buffer` API is exactly the same as in node.js. -[See the docs](https://nodejs.org/api/buffer.html). - - -## Related links - -- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) -- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) - -## Why is `Buffer` unsafe? - -Today, the node.js `Buffer` constructor is overloaded to handle many different argument -types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), -`ArrayBuffer`, and also `Number`. - -The API is optimized for convenience: you can throw any type at it, and it will try to do -what you want. - -Because the Buffer constructor is so powerful, you often see code like this: - -```js -// Convert UTF-8 strings to hex -function toHex (str) { - return new Buffer(str).toString('hex') -} -``` - -***But what happens if `toHex` is called with a `Number` argument?*** - -### Remote Memory Disclosure - -If an attacker can make your program call the `Buffer` constructor with a `Number` -argument, then they can make it allocate uninitialized memory from the node.js process. -This could potentially disclose TLS private keys, user data, or database passwords. - -When the `Buffer` constructor is passed a `Number` argument, it returns an -**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like -this, you **MUST** overwrite the contents before returning it to the user. - -From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): - -> `new Buffer(size)` -> -> - `size` Number -> -> The underlying memory for `Buffer` instances created in this way is not initialized. -> **The contents of a newly created `Buffer` are unknown and could contain sensitive -> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. - -(Emphasis our own.) - -Whenever the programmer intended to create an uninitialized `Buffer` you often see code -like this: - -```js -var buf = new Buffer(16) - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### Would this ever be a problem in real code? - -Yes. It's surprisingly common to forget to check the type of your variables in a -dynamically-typed language like JavaScript. - -Usually the consequences of assuming the wrong type is that your program crashes with an -uncaught exception. But the failure mode for forgetting to check the type of arguments to -the `Buffer` constructor is more catastrophic. - -Here's an example of a vulnerable service that takes a JSON payload and converts it to -hex: - -```js -// Take a JSON payload {str: "some string"} and convert it to hex -var server = http.createServer(function (req, res) { - var data = '' - req.setEncoding('utf8') - req.on('data', function (chunk) { - data += chunk - }) - req.on('end', function () { - var body = JSON.parse(data) - res.end(new Buffer(body.str).toString('hex')) - }) -}) - -server.listen(8080) -``` - -In this example, an http client just has to send: - -```json -{ - "str": 1000 -} -``` - -and it will get back 1,000 bytes of uninitialized memory from the server. - -This is a very serious bug. It's similar in severity to the -[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process -memory by remote attackers. - - -### Which real-world packages were vulnerable? - -#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) - -[Mathias Buus](https://github.com/mafintosh) and I -([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, -[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow -anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get -them to reveal 20 bytes at a time of uninitialized memory from the node.js process. - -Here's -[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) -that fixed it. We released a new fixed version, created a -[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all -vulnerable versions on npm so users will get a warning to upgrade to a newer version. - -#### [`ws`](https://www.npmjs.com/package/ws) - -That got us wondering if there were other vulnerable packages. Sure enough, within a short -period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the -most popular WebSocket implementation in node.js. - -If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as -expected, then uninitialized server memory would be disclosed to the remote peer. - -These were the vulnerable methods: - -```js -socket.send(number) -socket.ping(number) -socket.pong(number) -``` - -Here's a vulnerable socket server with some echo functionality: - -```js -server.on('connection', function (socket) { - socket.on('message', function (message) { - message = JSON.parse(message) - if (message.type === 'echo') { - socket.send(message.data) // send back the user's message - } - }) -}) -``` - -`socket.send(number)` called on the server, will disclose server memory. - -Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue -was fixed, with a more detailed explanation. Props to -[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the -[Node Security Project disclosure](https://nodesecurity.io/advisories/67). - - -### What's the solution? - -It's important that node.js offers a fast way to get memory otherwise performance-critical -applications would needlessly get a lot slower. - -But we need a better way to *signal our intent* as programmers. **When we want -uninitialized memory, we should request it explicitly.** - -Sensitive functionality should not be packed into a developer-friendly API that loosely -accepts many different types. This type of API encourages the lazy practice of passing -variables in without checking the type very carefully. - -#### A new API: `Buffer.allocUnsafe(number)` - -The functionality of creating buffers with uninitialized memory should be part of another -API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that -frequently gets user input of all sorts of different types passed into it. - -```js -var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### How do we fix node.js core? - -We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as -`semver-major`) which defends against one case: - -```js -var str = 16 -new Buffer(str, 'utf8') -``` - -In this situation, it's implied that the programmer intended the first argument to be a -string, since they passed an encoding as a second argument. Today, node.js will allocate -uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not -what the programmer intended. - -But this is only a partial solution, since if the programmer does `new Buffer(variable)` -(without an `encoding` parameter) there's no way to know what they intended. If `variable` -is sometimes a number, then uninitialized memory will sometimes be returned. - -### What's the real long-term fix? - -We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when -we need uninitialized memory. But that would break 1000s of packages. - -~~We believe the best solution is to:~~ - -~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ - -~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ - -#### Update - -We now support adding three new APIs: - -- `Buffer.from(value)` - convert from any type to a buffer -- `Buffer.alloc(size)` - create a zero-filled buffer -- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size - -This solves the core problem that affected `ws` and `bittorrent-dht` which is -`Buffer(variable)` getting tricked into taking a number argument. - -This way, existing code continues working and the impact on the npm ecosystem will be -minimal. Over time, npm maintainers can migrate performance-critical code to use -`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. - - -### Conclusion - -We think there's a serious design issue with the `Buffer` API as it exists today. It -promotes insecure software by putting high-risk functionality into a convenient API -with friendly "developer ergonomics". - -This wasn't merely a theoretical exercise because we found the issue in some of the -most popular npm packages. - -Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of -`buffer`. - -```js -var Buffer = require('safe-buffer').Buffer -``` - -Eventually, we hope that node.js core can switch to this new, safer behavior. We believe -the impact on the ecosystem would be minimal since it's not a breaking change. -Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while -older, insecure packages would magically become safe from this attack vector. - - -## links - -- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) -- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) -- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) - - -## credit - -The original issues in `bittorrent-dht` -([disclosure](https://nodesecurity.io/advisories/68)) and -`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by -[Mathias Buus](https://github.com/mafintosh) and -[Feross Aboukhadijeh](http://feross.org/). - -Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues -and for his work running the [Node Security Project](https://nodesecurity.io/). - -Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and -auditing the code. - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/build/node_modules/hash-base/node_modules/safe-buffer/index.d.ts b/build/node_modules/hash-base/node_modules/safe-buffer/index.d.ts deleted file mode 100644 index e9fed809..00000000 --- a/build/node_modules/hash-base/node_modules/safe-buffer/index.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -declare module "safe-buffer" { - export class Buffer { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; - } -} \ No newline at end of file diff --git a/build/node_modules/hash-base/node_modules/safe-buffer/index.js b/build/node_modules/hash-base/node_modules/safe-buffer/index.js deleted file mode 100644 index f8d3ec98..00000000 --- a/build/node_modules/hash-base/node_modules/safe-buffer/index.js +++ /dev/null @@ -1,65 +0,0 @@ -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.prototype = Object.create(Buffer.prototype) - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} diff --git a/build/node_modules/hash-base/node_modules/safe-buffer/package.json b/build/node_modules/hash-base/node_modules/safe-buffer/package.json deleted file mode 100644 index 404f149a..00000000 --- a/build/node_modules/hash-base/node_modules/safe-buffer/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "safe-buffer@^5.2.0", - "_id": "safe-buffer@5.2.1", - "_inBundle": false, - "_integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "_location": "/hash-base/safe-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "safe-buffer@^5.2.0", - "name": "safe-buffer", - "escapedName": "safe-buffer", - "rawSpec": "^5.2.0", - "saveSpec": null, - "fetchSpec": "^5.2.0" - }, - "_requiredBy": [ - "/hash-base" - ], - "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "_shasum": "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", - "_spec": "safe-buffer@^5.2.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/hash-base", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "https://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/safe-buffer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Safer Node.js Buffer API", - "devDependencies": { - "standard": "*", - "tape": "^5.0.0" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "homepage": "https://github.com/feross/safe-buffer", - "keywords": [ - "buffer", - "buffer allocate", - "node security", - "safe", - "safe-buffer", - "security", - "uninitialized" - ], - "license": "MIT", - "main": "index.js", - "name": "safe-buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/safe-buffer.git" - }, - "scripts": { - "test": "standard && tape test/*.js" - }, - "types": "index.d.ts", - "version": "5.2.1" -} diff --git a/build/node_modules/hash-base/package.json b/build/node_modules/hash-base/package.json index c9d374b4..99c20eb3 100644 --- a/build/node_modules/hash-base/package.json +++ b/build/node_modules/hash-base/package.json @@ -4,11 +4,7 @@ "_inBundle": false, "_integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "_location": "/hash-base", - "_phantomChildren": { - "inherits": "2.0.4", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, + "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, @@ -23,7 +19,7 @@ "/md5.js", "/ripemd160" ], - "_resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hash-base/-/hash-base-3.1.0.tgz", "_shasum": "55c381d9e06e1d2997a883b4a3fddfe7f0d3af33", "_spec": "hash-base@^3.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/md5.js", diff --git a/build/node_modules/hash.js/package.json b/build/node_modules/hash.js/package.json index f0469934..ece9be55 100644 --- a/build/node_modules/hash.js/package.json +++ b/build/node_modules/hash.js/package.json @@ -19,7 +19,7 @@ "/elliptic", "/hmac-drbg" ], - "_resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hash.js/-/hash.js-1.1.7.tgz", "_shasum": "0babca538e8d4ee4a0f8988d68866537a003cf42", "_spec": "hash.js@^1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/elliptic", diff --git a/build/node_modules/he/LICENSE-MIT.txt b/build/node_modules/he/LICENSE-MIT.txt new file mode 100644 index 00000000..a41e0a7e --- /dev/null +++ b/build/node_modules/he/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/he/README.md b/build/node_modules/he/README.md new file mode 100644 index 00000000..b2223a91 --- /dev/null +++ b/build/node_modules/he/README.md @@ -0,0 +1,379 @@ +# he [![Build status](https://travis-ci.org/mathiasbynens/he.svg?branch=master)](https://travis-ci.org/mathiasbynens/he) [![Code coverage status](https://codecov.io/github/mathiasbynens/he/coverage.svg?branch=master)](https://codecov.io/github/mathiasbynens/he?branch=master) [![Dependency status](https://gemnasium.com/mathiasbynens/he.svg)](https://gemnasium.com/mathiasbynens/he) + +_he_ (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports [all standardized named character references as per HTML](https://html.spec.whatwg.org/multipage/syntax.html#named-character-references), handles [ambiguous ampersands](https://mathiasbynens.be/notes/ambiguous-ampersands) and other edge cases [just like a browser would](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references), has an extensive test suite, and — contrary to many other JavaScript solutions — _he_ handles astral Unicode symbols just fine. [An online demo is available.](https://mothereff.in/html-entities) + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install he +``` + +Via [Bower](http://bower.io/): + +```bash +bower install he +``` + +Via [Component](https://github.com/component/component): + +```bash +component install mathiasbynens/he +``` + +In a browser: + +```html + +``` + +In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): + +```js +var he = require('he'); +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('he.js'); +``` + +Using an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require( + { + 'paths': { + 'he': 'path/to/he' + } + }, + ['he'], + function(he) { + console.log(he); + } +); +``` + +## API + +### `he.version` + +A string representing the semantic version number. + +### `he.encode(text, options)` + +This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and `&`, `<`, `>`, `"`, `'`, and `` ` ``, replacing them with character references. + +```js +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +As long as the input string contains [allowed code points](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream) only, the return value of this function is always valid HTML. Any [(invalid) code points that cannot be represented using a character reference](https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides) in the input are not encoded: + +```js +he.encode('foo \0 bar'); +// → 'foo \0 bar' +``` + +However, enabling [the `strict` option](https://github.com/mathiasbynens/he#strict) causes invalid code points to throw an exception. With `strict` enabled, `he.encode` either throws (if the input contains invalid code points) or returns a string of valid HTML. + +The `options` object is optional. It recognizes the following properties: + +#### `useNamedReferences` + +The default value for the `useNamedReferences` option is `false`. This means that `encode()` will not use any named character references (e.g. `©`) in the output — hexadecimal escapes (e.g. `©`) will be used instead. Set it to `true` to enable the use of named references. + +**Note that if compatibility with older browsers is a concern, this option should remain disabled.** + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disallow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `decimal` + +The default value for the `decimal` option is `false`. If the option is enabled, `encode` will generally use decimal escapes (e.g. `©`) rather than hexadecimal escapes (e.g. `©`). Beside of this replacement, the basic behavior remains the same when combined with other options. For example: if both options `useNamedReferences` and `decimal` are enabled, named references (e.g. `©`) are used over decimal escapes. HTML entities without a named reference are encoded using decimal escapes. + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly disable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': false +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly enable decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly allow named references and decimal escapes: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'useNamedReferences': true, + 'decimal': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `encodeEverything` + +The default value for the `encodeEverything` option is `false`. This means that `encode()` will not use any character references for printable ASCII symbols that don’t need escaping. Set it to `true` to encode every symbol in the input string. When set to `true`, this option takes precedence over `allowUnsafeSymbols` (i.e. setting the latter to `true` in such a case has no effect). + +```js +// Using the global default setting (defaults to `false`): +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' + +// Passing an `options` object to `encode`, to explicitly encode all symbols: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' + +// This setting can be combined with the `useNamedReferences` option: +he.encode('foo © bar ≠ baz 𝌆 qux', { + 'encodeEverything': true, + 'useNamedReferences': true +}); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `encode()` will encode any HTML text content you feed it, even if it contains any symbols that cause [parse errors](https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.encode('\x01'); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable error-tolerant mode: +he.encode('\x01', { + 'strict': false +}); +// → '' + +// Passing an `options` object to `encode`, to explicitly enable strict mode: +he.encode('\x01', { + 'strict': true +}); +// → Parse error +``` + +#### `allowUnsafeSymbols` + +The default value for the `allowUnsafeSymbols` option is `false`. This means that characters that are unsafe for use in HTML content (`&`, `<`, `>`, `"`, `'`, and `` ` ``) will be encoded. When set to `true`, only non-ASCII characters will be encoded. If the `encodeEverything` option is set to `true`, this option will be ignored. + +```js +he.encode('foo © and & ampersand', { + 'allowUnsafeSymbols': true +}); +// → 'foo © and & ampersand' +``` + +#### Overriding default `encode` options globally + +The global default setting can be overridden by modifying the `he.encode.options` object. This saves you from passing in an `options` object for every call to `encode` if you want to use the non-default setting. + +```js +// Read the global default setting: +he.encode.options.useNamedReferences; +// → `false` by default + +// Override the global default setting: +he.encode.options.useNamedReferences = true; + +// Using the global default setting, which is now `true`: +he.encode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +### `he.decode(html, options)` + +This function takes a string of HTML and decodes any named and numerical character references in it using [the algorithm described in section 12.2.4.69 of the HTML spec](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). + +```js +he.decode('foo © bar ≠ baz 𝌆 qux'); +// → 'foo © bar ≠ baz 𝌆 qux' +``` + +The `options` object is optional. It recognizes the following properties: + +#### `isAttributeValue` + +The default value for the `isAttributeValue` option is `false`. This means that `decode()` will decode the string as if it were used in [a text context in an HTML document](https://html.spec.whatwg.org/multipage/syntax.html#data-state). HTML has different rules for [parsing character references in attribute values](https://html.spec.whatwg.org/multipage/syntax.html#character-reference-in-attribute-value-state) — set this option to `true` to treat the input string as if it were used as an attribute value. + +```js +// Using the global default setting (defaults to `false`, i.e. HTML text context): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML text context: +he.decode('foo&bar', { + 'isAttributeValue': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly assume an HTML attribute value context: +he.decode('foo&bar', { + 'isAttributeValue': true +}); +// → 'foo&bar' +``` + +#### `strict` + +The default value for the `strict` option is `false`. This means that `decode()` will decode any HTML text content you feed it, even if it contains any entities that cause [parse errors](https://html.spec.whatwg.org/multipage/syntax.html#tokenizing-character-references). To throw an error when such invalid HTML is encountered, set the `strict` option to `true`. This option makes it possible to use _he_ as part of HTML parsers and HTML validators. + +```js +// Using the global default setting (defaults to `false`, i.e. error-tolerant mode): +he.decode('foo&bar'); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable error-tolerant mode: +he.decode('foo&bar', { + 'strict': false +}); +// → 'foo&bar' + +// Passing an `options` object to `decode`, to explicitly enable strict mode: +he.decode('foo&bar', { + 'strict': true +}); +// → Parse error +``` + +#### Overriding default `decode` options globally + +The global default settings for the `decode` function can be overridden by modifying the `he.decode.options` object. This saves you from passing in an `options` object for every call to `decode` if you want to use a non-default setting. + +```js +// Read the global default setting: +he.decode.options.isAttributeValue; +// → `false` by default + +// Override the global default setting: +he.decode.options.isAttributeValue = true; + +// Using the global default setting, which is now `true`: +he.decode('foo&bar'); +// → 'foo&bar' +``` + +### `he.escape(text)` + +This function takes a string of text and escapes it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, `'`, and `` ` ``. + +```js +he.escape(''); +// → '<img src='x' onerror="prompt(1)">' +``` + +### `he.unescape(html, options)` + +`he.unescape` is an alias for `he.decode`. It takes a string of HTML and decodes any named and numerical character references in it. + +### Using the `he` binary + +To use the `he` binary in your shell, simply install _he_ globally using npm: + +```bash +npm install -g he +``` + +After that you will be able to encode/decode HTML entities from the command line: + +```bash +$ he --encode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --encode --use-named-refs 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz + +$ he --decode 'föo ♥ bår 𝌆 baz' +föo ♥ bår 𝌆 baz +``` + +Read a local text file, encode it for use in an HTML text context, and save the result to a new file: + +```bash +$ he --encode < foo.txt > foo-escaped.html +``` + +Or do the same with an online text file: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --encode > escaped.html +``` + +Or, the opposite — read a local file containing a snippet of HTML in a text context, decode it back to plain text, and save the result to a new file: + +```bash +$ he --decode < foo-escaped.html > foo.txt +``` + +Or do the same with an online HTML snippet: + +```bash +$ curl -sL "http://git.io/HnfEaw" | he --decode > decoded.txt +``` + +See `he --help` for the full list of options. + +## Support + +_he_ has been tested in at least: + +* Chrome 27-50 +* Firefox 3-45 +* Safari 4-9 +* Opera 10-12, 15–37 +* IE 6–11 +* Edge +* Narwhal 0.3.2 +* Node.js v0.10, v0.12, v4, v5 +* PhantomJS 1.9.0 +* Rhino 1.7RC4 +* RingoJS 0.8-0.11 + +## Unit tests & code coverage + +After cloning this repository, run `npm install` to install the dependencies needed for he development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. + +Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, and web browsers as well, use `grunt test`. + +To generate the code coverage report, use `grunt cover`. + +## Acknowledgements + +Thanks to [Simon Pieters](https://simon.html5.org/) ([@zcorpan](https://twitter.com/zcorpan)) for the many suggestions. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +_he_ is available under the [MIT](https://mths.be/mit) license. diff --git a/build/node_modules/he/bin/he b/build/node_modules/he/bin/he new file mode 100755 index 00000000..cfdfd6c3 --- /dev/null +++ b/build/node_modules/he/bin/he @@ -0,0 +1,148 @@ +#!/usr/bin/env node +(function() { + + var fs = require('fs'); + var he = require('../he.js'); + var strings = process.argv.splice(2); + var stdin = process.stdin; + var data; + var timeout; + var action; + var options = {}; + var log = console.log; + + var main = function() { + var option = strings[0]; + var count = 0; + + if (/^(?:-h|--help|undefined)$/.test(option)) { + log( + 'he v%s - https://mths.be/he', + he.version + ); + log([ + '\nUsage:\n', + '\the [--escape] string', + '\the [--encode] [--use-named-refs] [--everything] [--allow-unsafe] [--decimal] string', + '\the [--decode] [--attribute] [--strict] string', + '\the [-v | --version]', + '\the [-h | --help]', + '\nExamples:\n', + '\the --escape \\', + '\techo \'© 𝌆\' | he --decode' + ].join('\n')); + return process.exit(option ? 0 : 1); + } + + if (/^(?:-v|--version)$/.test(option)) { + log('v%s', he.version); + return process.exit(0); + } + + strings.forEach(function(string) { + // Process options + if (string == '--escape') { + action = 'escape'; + return; + } + if (string == '--encode') { + action = 'encode'; + return; + } + if (string == '--use-named-refs') { + action = 'encode'; + options.useNamedReferences = true; + return; + } + if (string == '--everything') { + action = 'encode'; + options.encodeEverything = true; + return; + } + if (string == '--allow-unsafe') { + action = 'encode'; + options.allowUnsafeSymbols = true; + return; + } + if (string == '--decimal') { + action = 'encode'; + options.decimal = true; + return; + } + if (string == '--decode') { + action = 'decode'; + return; + } + if (string == '--attribute') { + action = 'decode'; + options.isAttributeValue = true; + return; + } + if (string == '--strict') { + action = 'decode'; + options.strict = true; + return; + } + // Process string(s) + var result; + if (!action) { + log('Error: he requires at least one option and a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + try { + result = he[action](string, options); + log(result); + count++; + } catch(error) { + log(error.message + '\n'); + log('Error: failed to %s.', action); + log('If you think this is a bug in he, please report it:'); + log('https://github.com/mathiasbynens/he/issues/new'); + log( + '\nStack trace using he@%s:\n', + he.version + ); + log(error.stack); + return process.exit(1); + } + }); + if (!count) { + log('Error: he requires a string argument.'); + log('Try `he --help` for more information.'); + return process.exit(1); + } + // Return with exit status 0 outside of the `forEach` loop, in case + // multiple strings were passed in. + return process.exit(0); + }; + + if (stdin.isTTY) { + // handle shell arguments + main(); + } else { + // Either the script is called from within a non-TTY context, or `stdin` + // content is being piped in. + if (!process.stdout.isTTY) { + // The script was called from a non-TTY context. This is a rather uncommon + // use case we don’t actively support. However, we don’t want the script + // to wait forever in such cases, so… + timeout = setTimeout(function() { + // …if no piped data arrived after a whole minute, handle shell + // arguments instead. + main(); + }, 60000); + } + data = ''; + stdin.on('data', function(chunk) { + clearTimeout(timeout); + data += chunk; + }); + stdin.on('end', function() { + strings.push(data.trim()); + main(); + }); + stdin.resume(); + } + +}()); diff --git a/build/node_modules/he/he.js b/build/node_modules/he/he.js new file mode 100644 index 00000000..14a58e9d --- /dev/null +++ b/build/node_modules/he/he.js @@ -0,0 +1,345 @@ +/*! https://mths.be/he v1.2.0 by @mathias | MIT license */ +;(function(root) { + + // Detect free variables `exports`. + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module`. + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; + var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return escapeBmpSymbol(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal' : false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + + if ($1) { + reference = $1; + // Note: there is no need to check `has(decodeMap, reference)`. + return decodeMap[reference]; + } + + if ($2) { + // Decode named character references without trailing `;`, e.g. `&`. + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $2; + next = $3; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + } + + if ($4) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $4; + semicolon = $5; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + + if ($6) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $6; + semicolon = $7; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + + // If we’re still here, `if ($7)` is implied; it’s an ambiguous + // ampersand for sure. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '1.2.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return he; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + +}(this)); diff --git a/build/node_modules/he/man/he.1 b/build/node_modules/he/man/he.1 new file mode 100644 index 00000000..7696628a --- /dev/null +++ b/build/node_modules/he/man/he.1 @@ -0,0 +1,78 @@ +.Dd April 5, 2016 +.Dt he 1 +.Sh NAME +.Nm he +.Nd encode/decode HTML entities just like a browser would +.Sh SYNOPSIS +.Nm +.Op Fl -escape Ar string +.br +.Op Fl -encode Ar string +.br +.Op Fl -encode Fl -use-named-refs Fl -everything Fl -allow-unsafe Ar string +.br +.Op Fl -decode Ar string +.br +.Op Fl -decode Fl -attribute Ar string +.br +.Op Fl -decode Fl -strict Ar string +.br +.Op Fl v | -version +.br +.Op Fl h | -help +.Sh DESCRIPTION +.Nm +encodes/decodes HTML entities in strings just like a browser would. +.Sh OPTIONS +.Bl -ohang -offset +.It Sy "--escape" +Take a string of text and escape it for use in text contexts in XML or HTML documents. Only the following characters are escaped: `&`, `<`, `>`, `"`, and `'`. +.It Sy "--encode" +Take a string of text and encode any symbols that aren't printable ASCII symbols and that can be replaced with character references. For example, it would turn `©` into `©`, but it wouldn't turn `+` into `+` since there is no point in doing so. Additionally, it replaces any remaining non-ASCII symbols with a hexadecimal escape sequence (e.g. `𝌆`). The return value of this function is always valid HTML. +.It Sy "--encode --use-named-refs" +Enable the use of named character references (like `©`) in the output. If compatibility with older browsers is a concern, don't use this option. +.It Sy "--encode --everything" +Encode every symbol in the input string, even safe printable ASCII symbols. +.It Sy "--encode --allow-unsafe" +Encode non-ASCII characters only. This leaves unsafe HTML/XML symbols like `&`, `<`, `>`, `"`, and `'` intact. +.It Sy "--encode --decimal" +Use decimal digits rather than hexadecimal digits for encoded character references, e.g. output `©` instead of `©`. +.It Sy "--decode" +Takes a string of HTML and decode any named and numerical character references in it using the algorithm described in the HTML spec. +.It Sy "--decode --attribute" +Parse the input as if it was an HTML attribute value rather than a string in an HTML text content. +.It Sy "--decode --strict" +Throw an error if an invalid character reference is encountered. +.It Sy "-v, --version" +Print he's version. +.It Sy "-h, --help" +Show the help screen. +.El +.Sh EXIT STATUS +The +.Nm he +utility exits with one of the following values: +.Pp +.Bl -tag -width flag -compact +.It Li 0 +.Nm +did what it was instructed to do successfully; either it encoded/decoded the input and printed the result, or it printed the version or usage message. +.It Li 1 +.Nm +encountered an error. +.El +.Sh EXAMPLES +.Bl -ohang -offset +.It Sy "he --escape ''" +Print an escaped version of the given string that is safe for use in HTML text contexts, escaping only `&`, `<`, `>`, `"`, and `'`. +.It Sy "he --decode '©𝌆'" +Print the decoded version of the given HTML string. +.It Sy "echo\ '©𝌆'\ |\ he --decode" +Print the decoded version of the HTML string that gets piped in. +.El +.Sh BUGS +he's bug tracker is located at . +.Sh AUTHOR +Mathias Bynens +.Sh WWW + diff --git a/build/node_modules/he/package.json b/build/node_modules/he/package.json new file mode 100644 index 00000000..6332182e --- /dev/null +++ b/build/node_modules/he/package.json @@ -0,0 +1,90 @@ +{ + "_from": "he@1.2.0", + "_id": "he@1.2.0", + "_inBundle": false, + "_integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "_location": "/he", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "he@1.2.0", + "name": "he", + "escapedName": "he", + "rawSpec": "1.2.0", + "saveSpec": null, + "fetchSpec": "1.2.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/he/-/he-1.2.0.tgz", + "_shasum": "84ae65fa7eafb165fddb61566ae14baf05664f0f", + "_spec": "he@1.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bin": { + "he": "bin/he" + }, + "bugs": { + "url": "https://github.com/mathiasbynens/he/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A robust HTML entities encoder/decoder with full Unicode support.", + "devDependencies": { + "codecov.io": "^0.1.6", + "grunt": "^0.4.5", + "grunt-cli": "^1.3.1", + "grunt-shell": "^1.1.1", + "grunt-template": "^0.2.3", + "istanbul": "^0.4.2", + "jsesc": "^1.0.0", + "lodash": "^4.8.2", + "qunit-extras": "^1.4.5", + "qunitjs": "~1.11.0", + "regenerate": "^1.2.1", + "regexgen": "^1.3.0", + "requirejs": "^2.1.22", + "sort-object": "^3.0.2" + }, + "directories": { + "bin": "bin", + "man": "man", + "test": "tests" + }, + "files": [ + "LICENSE-MIT.txt", + "he.js", + "bin/", + "man/" + ], + "homepage": "https://mths.be/he", + "keywords": [ + "string", + "entities", + "entity", + "html", + "encode", + "decode", + "unicode" + ], + "license": "MIT", + "main": "he.js", + "man": [ + "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/he/man/he.1" + ], + "name": "he", + "repository": { + "type": "git", + "url": "git+https://github.com/mathiasbynens/he.git" + }, + "scripts": { + "build": "grunt build", + "test": "node tests/tests.js" + }, + "version": "1.2.0" +} diff --git a/build/node_modules/hexoid/dist/index.js b/build/node_modules/hexoid/dist/index.js new file mode 100644 index 00000000..a867b573 --- /dev/null +++ b/build/node_modules/hexoid/dist/index.js @@ -0,0 +1,15 @@ +var IDX=256, HEX=[]; +while (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1); + +module.exports = function (len) { + len = len || 16; + var str='', num=0; + return function () { + if (!str || num === 256) { + str=''; num=(1+len)/2 | 0; + while (num--) str += HEX[256 * Math.random() | 0]; + str = str.substring(num=0, len-2); + } + return str + HEX[num++]; + }; +} diff --git a/build/node_modules/hexoid/dist/index.min.js b/build/node_modules/hexoid/dist/index.min.js new file mode 100644 index 00000000..4df2f2d3 --- /dev/null +++ b/build/node_modules/hexoid/dist/index.min.js @@ -0,0 +1 @@ +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):n.hexoid=e()}(this,(function(){for(var n=256,e=[];n--;)e[n]=(n+256).toString(16).substring(1);return function(n){n=n||16;var t="",o=0;return function(){if(!t||256===o){for(t="",o=(1+n)/2|0;o--;)t+=e[256*Math.random()|0];t=t.substring(o=0,n-2)}return t+e[o++]}}})); \ No newline at end of file diff --git a/build/node_modules/hexoid/dist/index.mjs b/build/node_modules/hexoid/dist/index.mjs new file mode 100644 index 00000000..b5e3feae --- /dev/null +++ b/build/node_modules/hexoid/dist/index.mjs @@ -0,0 +1,15 @@ +var IDX=256, HEX=[]; +while (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1); + +export default function (len) { + len = len || 16; + var str='', num=0; + return function () { + if (!str || num === 256) { + str=''; num=(1+len)/2 | 0; + while (num--) str += HEX[256 * Math.random() | 0]; + str = str.substring(num=0, len-2); + } + return str + HEX[num++]; + }; +} diff --git a/build/node_modules/hexoid/hexoid.d.ts b/build/node_modules/hexoid/hexoid.d.ts new file mode 100644 index 00000000..9b030692 --- /dev/null +++ b/build/node_modules/hexoid/hexoid.d.ts @@ -0,0 +1 @@ +export default function (len?: number): () => string; diff --git a/build/node_modules/hexoid/license b/build/node_modules/hexoid/license new file mode 100644 index 00000000..fa6089fa --- /dev/null +++ b/build/node_modules/hexoid/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/hexoid/package.json b/build/node_modules/hexoid/package.json new file mode 100644 index 00000000..f9245e24 --- /dev/null +++ b/build/node_modules/hexoid/package.json @@ -0,0 +1,73 @@ +{ + "_from": "hexoid@1.0.0", + "_id": "hexoid@1.0.0", + "_inBundle": false, + "_integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "_location": "/hexoid", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "hexoid@1.0.0", + "name": "hexoid", + "escapedName": "hexoid", + "rawSpec": "1.0.0", + "saveSpec": null, + "fetchSpec": "1.0.0" + }, + "_requiredBy": [ + "/formidable" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hexoid/-/hexoid-1.0.0.tgz", + "_shasum": "ad10c6573fb907de23d9ec63a711267d9dc9bc18", + "_spec": "hexoid@1.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/formidable", + "author": { + "name": "Luke Edwards", + "email": "luke.edwards05@gmail.com", + "url": "https://lukeed.com" + }, + "bugs": { + "url": "https://github.com/lukeed/hexoid/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A tiny (190B) and extremely fast utility to generate random IDs of fixed length", + "devDependencies": { + "bundt": "1.0.0", + "esm": "3.2.25", + "tap-spec": "5.0.0", + "tape": "4.9.1" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "*.d.ts", + "dist" + ], + "homepage": "https://github.com/lukeed/hexoid#readme", + "keywords": [ + "id", + "uid", + "uuid", + "random", + "generate" + ], + "license": "MIT", + "main": "dist/index.js", + "module": "dist/index.mjs", + "name": "hexoid", + "repository": { + "type": "git", + "url": "git+https://github.com/lukeed/hexoid.git" + }, + "scripts": { + "build": "bundt", + "pretest": "npm run build", + "test": "tape -r esm test/*.js | tap-spec" + }, + "types": "hexoid.d.ts", + "unpkg": "dist/index.min.js", + "version": "1.0.0" +} diff --git a/build/node_modules/hexoid/readme.md b/build/node_modules/hexoid/readme.md new file mode 100644 index 00000000..b5a48faa --- /dev/null +++ b/build/node_modules/hexoid/readme.md @@ -0,0 +1,119 @@ +# hexoid [![build status](https://badgen.net/github/status/lukeed/hexoid)](https://github.com/lukeed/hexoid/actions) [![codecov](https://badgen.now.sh/codecov/c/github/lukeed/hexoid)](https://codecov.io/gh/lukeed/hexoid) + +> A tiny (190B) and [extremely fast](#benchmarks) utility to generate random IDs of fixed length + +_**Hexadecimal object IDs.** Available for Node.js and the browser._
Generate randomized output strings of fixed length using lowercased hexadecimal pairs. + +> **Notice:** Please note that this is not a cryptographically secure (CSPRNG) generator. + +Additionally, this module is delivered as: + +* **CommonJS**: [`dist/index.js`](https://unpkg.com/hexoid/dist/index.js) +* **ES Module**: [`dist/index.mjs`](https://unpkg.com/hexoid/dist/index.mjs) +* **UMD**: [`dist/index.min.js`](https://unpkg.com/hexoid/dist/index.min.js) + +## Install + +``` +$ npm install --save hexoid +``` + + +## Usage + +```js +import hexoid from 'hexoid'; + +const toID = hexoid(); +// length = 16 (default) +toID(); //=> '52032fedb951da00' +toID(); //=> '52032fedb951da01' +toID(); //=> '52032fedb951da02' + +// customize length +hexoid(25)(); //=> '065359875047c63a037200e00' +hexoid(32)(); //=> 'ca8e4aec7f139d94fcab9cab2eb89f00' +hexoid(48)(); //=> 'c19a4deb5cdeca68534930e67bd0a2f4ed45988724d8d200' +``` + + +## API + +### hexoid(length?) +Returns: `() => string` + +Creates the function that will generate strings. + +#### length +Type: `Number`
+Default: `16` + +Then length of the output string. + +> **Important:** Your risk of collisions decreases with longer strings!
Please be aware of the [Birthday Problem](https://betterexplained.com/articles/understanding-the-birthday-paradox/)! You may need more combinations than you'd expect. + +The **maximum combinations** are known given the following formula: + +```js +const combos = 256 ** (len/2); +``` + + +## Benchmarks + +> Running on Node.js v10.13.0 + +``` +Validation (length = 16): + ✔ hashids/fixed (example: "LkQWjnegYbwZ1p0G") + ✔ nanoid/non-secure (example: "sLlVL5X3M5k2fo58") + ✔ uid (example: "3d0ckwcnjiuu91hj") + ✔ hexoid (example: "de96b62e663ef300") +Benchmark (length = 16): + hashids/fixed x 349,462 ops/sec ±0.28% (93 runs sampled) + nanoid/non-secure x 3,337,573 ops/sec ±0.28% (96 runs sampled) + uid x 3,553,482 ops/sec ±0.51% (90 runs sampled) + hexoid x 81,081,364 ops/sec ±0.18% (96 runs sampled) + + +Validation (length = 25): + ✔ cuid (example: "ck7lj5hbf00000v7c9gox6yfh") + ✔ hashids/fixed (example: "r9JOyLkQWjnegYbwZ1p0GDXNm") + ✔ nanoid/non-secure (example: "hI202PVPJQRNrP6o6z4pXz4m0") + ✔ uid (example: "9904e9w130buxaw7n8358mn2f") + ✔ hexoid (example: "01dfab2c14e37768eb7605a00") +Benchmark (length = 25): + cuid x 161,636 ops/sec ±1.36% (89 runs sampled) + hashids/fixed x 335,439 ops/sec ±2.40% (94 runs sampled) + nanoid/non-secure x 2,254,073 ops/sec ±0.23% (96 runs sampled) + uid x 2,483,275 ops/sec ±0.38% (95 runs sampled) + hexoid x 75,715,843 ops/sec ±0.27% (95 runs sampled) + + +Validation (length = 36): + ✔ uuid/v1 (example: "c3dc1ed0-629a-11ea-8bfb-8ffc49585f54") + ✔ uuid/v4 (example: "8c89f0ca-f01e-4c84-bd71-e645bab84552") + ✔ hashids/fixed (example: "EVq3Pr9JOyLkQWjnegYbwZ1p0GDXNmRBlAxg") + ✔ @lukeed/uuid (example: "069ad676-48f9-4452-b11d-f20c3872dc1f") + ✔ nanoid/non-secure (example: "jAZjrcDmHH6P1rT9EFdCdHUpF440SjAKwb2A") + ✔ uid (example: "5mhi30lgy5d0glmuy81llelbzdko518ow1sx") + ✔ hexoid (example: "615209331f0b4630acf69999ccfc95a23200") +Benchmark (length = 36): + uuid/v1 x 1,487,947 ops/sec ±0.18% (98 runs sampled) + uuid/v4 x 334,868 ops/sec ±1.08% (90 runs sampled) + @lukeed/uuid x 6,352,445 ops/sec ±0.27% (91 runs sampled) + hashids/fixed x 322,914 ops/sec ±0.27% (93 runs sampled) + nanoid/non-secure x 1,592,708 ops/sec ±0.25% (91 runs sampled) + uid x 1,789,492 ops/sec ±0.29% (92 runs sampled) + hexoid x 71,746,692 ops/sec ±0.29% (93 runs sampled) +``` + +## Related + +- [uid](https://github.com/lukeed/uid) - A smaller (134B) but slower variant of this module with a different API +- [@lukeed/uuid](https://github.com/lukeed/uuid) - A tiny (230B), fast, and cryptographically secure UUID (V4) generator for Node and the browser + + +## License + +MIT © [Luke Edwards](https://lukeed.com) diff --git a/build/node_modules/hmac-drbg/package.json b/build/node_modules/hmac-drbg/package.json index 9e57096c..a1d9d2d0 100644 --- a/build/node_modules/hmac-drbg/package.json +++ b/build/node_modules/hmac-drbg/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/elliptic" ], - "_resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "_shasum": "d2745701025a6c775a6c545793ed502fc0c649a1", "_spec": "hmac-drbg@^1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/elliptic", diff --git a/build/node_modules/idb-wrapper/package.json b/build/node_modules/idb-wrapper/package.json index a3e317b5..38f63d8c 100644 --- a/build/node_modules/idb-wrapper/package.json +++ b/build/node_modules/idb-wrapper/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js" ], - "_resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/idb-wrapper/-/idb-wrapper-1.7.2.tgz", "_shasum": "8251afd5e77fe95568b1c16152eb44b396767ea2", "_spec": "idb-wrapper@^1.5.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js", diff --git a/build/node_modules/indexof/package.json b/build/node_modules/indexof/package.json index 3f476383..7430a953 100644 --- a/build/node_modules/indexof/package.json +++ b/build/node_modules/indexof/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/object-keys" ], - "_resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/indexof/-/indexof-0.0.1.tgz", "_shasum": "82dc336d232b9062179d05ab3293a66059fd435d", "_spec": "indexof@~0.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/object-keys", diff --git a/build/node_modules/inflight/LICENSE b/build/node_modules/inflight/LICENSE new file mode 100644 index 00000000..05eeeb88 --- /dev/null +++ b/build/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/inflight/README.md b/build/node_modules/inflight/README.md new file mode 100644 index 00000000..6dc89291 --- /dev/null +++ b/build/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/build/node_modules/inflight/inflight.js b/build/node_modules/inflight/inflight.js new file mode 100644 index 00000000..48202b3c --- /dev/null +++ b/build/node_modules/inflight/inflight.js @@ -0,0 +1,54 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/build/node_modules/inflight/package.json b/build/node_modules/inflight/package.json new file mode 100644 index 00000000..414293e0 --- /dev/null +++ b/build/node_modules/inflight/package.json @@ -0,0 +1,58 @@ +{ + "_from": "inflight@^1.0.4", + "_id": "inflight@1.0.6", + "_inBundle": false, + "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "_location": "/inflight", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "inflight@^1.0.4", + "name": "inflight", + "escapedName": "inflight", + "rawSpec": "^1.0.4", + "saveSpec": null, + "fetchSpec": "^1.0.4" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/inflight/-/inflight-1.0.6.tgz", + "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "_spec": "inflight@^1.0.4", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "bundleDependencies": false, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "deprecated": false, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^7.1.2" + }, + "files": [ + "inflight.js" + ], + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "name": "inflight", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/inflight.git" + }, + "scripts": { + "test": "tap test.js --100" + }, + "version": "1.0.6" +} diff --git a/build/node_modules/inherits/package.json b/build/node_modules/inherits/package.json index 099cfed4..11cb02fc 100644 --- a/build/node_modules/inherits/package.json +++ b/build/node_modules/inherits/package.json @@ -1,5 +1,5 @@ { - "_from": "inherits@~2.0.3", + "_from": "inherits@^2.0.3", "_id": "inherits@2.0.4", "_inBundle": false, "_integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", @@ -8,12 +8,12 @@ "_requested": { "type": "range", "registry": true, - "raw": "inherits@~2.0.3", + "raw": "inherits@^2.0.3", "name": "inherits", "escapedName": "inherits", - "rawSpec": "~2.0.3", + "rawSpec": "^2.0.3", "saveSpec": null, - "fetchSpec": "~2.0.3" + "fetchSpec": "^2.0.3" }, "_requiredBy": [ "/asn1.js", @@ -21,9 +21,9 @@ "/browserify-aes", "/browserify-des", "/browserify-sign", - "/browserify-sign/readable-stream", "/cipher-base", "/concat-stream", + "/concat-stream/readable-stream", "/create-hash", "/create-hmac", "/crypto-browserify", @@ -32,20 +32,17 @@ "/fwd-stream/readable-stream", "/glob", "/hash-base", - "/hash-base/readable-stream", "/hash.js", "/level-blobs/readable-stream", "/levelup/readable-stream", "/md5.js", "/readable-stream", "/ripemd160", - "/sha.js", - "/util", - "/winston/readable-stream" + "/sha.js" ], - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/inherits/-/inherits-2.0.4.tgz", "_shasum": "0fa2c64f932917c3433a0ded55363aae37416b7c", - "_spec": "inherits@~2.0.3", + "_spec": "inherits@^2.0.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", "browser": "./inherits_browser.js", "bugs": { diff --git a/build/node_modules/is-arguments/.editorconfig b/build/node_modules/is-arguments/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/is-arguments/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-arguments/.eslintignore b/build/node_modules/is-arguments/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-arguments/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-arguments/.eslintrc b/build/node_modules/is-arguments/.eslintrc deleted file mode 100644 index 6d42c6ed..00000000 --- a/build/node_modules/is-arguments/.eslintrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "id-length": [2, { "min": 1, "max": 25 }], - "operator-linebreak": [2, "after"] - } -} diff --git a/build/node_modules/is-arguments/.github/FUNDING.yml b/build/node_modules/is-arguments/.github/FUNDING.yml deleted file mode 100644 index d29bb40e..00000000 --- a/build/node_modules/is-arguments/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-arguments -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-arguments/.github/workflows/node-4+.yml b/build/node_modules/is-arguments/.github/workflows/node-4+.yml deleted file mode 100644 index ba174e1d..00000000 --- a/build/node_modules/is-arguments/.github/workflows/node-4+.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: 'Tests: node.js' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - latest: ${{ steps.set-matrix.outputs.requireds }} - minors: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: '>=4' - - latest: - needs: [matrix] - name: 'latest minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.latest) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - minors: - needs: [matrix, latest] - name: 'non-latest minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.minors) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - - node: - name: 'node 4+' - needs: [latest, minors] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-arguments/.github/workflows/node-iojs.yml b/build/node_modules/is-arguments/.github/workflows/node-iojs.yml deleted file mode 100644 index f707c3cf..00000000 --- a/build/node_modules/is-arguments/.github/workflows/node-iojs.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: 'Tests: node.js (io.js)' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - latest: ${{ steps.set-matrix.outputs.requireds }} - minors: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: 'iojs' - - latest: - needs: [matrix] - name: 'latest minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.latest) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - skip-ls-check: true - - minors: - needs: [matrix, latest] - name: 'non-latest minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.minors) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - skip-ls-check: true - - node: - name: 'io.js' - needs: [latest, minors] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-arguments/.github/workflows/node-pretest.yml b/build/node_modules/is-arguments/.github/workflows/node-pretest.yml deleted file mode 100644 index 3921e0ae..00000000 --- a/build/node_modules/is-arguments/.github/workflows/node-pretest.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: 'Tests: pretest/posttest' - -on: [pull_request, push] - -jobs: - pretest: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run pretest' - with: - node-version: 'lts/*' - command: 'pretest' - - posttest: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run posttest' - with: - node-version: 'lts/*' - command: 'posttest' diff --git a/build/node_modules/is-arguments/.github/workflows/node-zero.yml b/build/node_modules/is-arguments/.github/workflows/node-zero.yml deleted file mode 100644 index 2435bf2c..00000000 --- a/build/node_modules/is-arguments/.github/workflows/node-zero.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Tests: node.js (0.x)' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - stable: ${{ steps.set-matrix.outputs.requireds }} - unstable: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: '0.x' - - stable: - needs: [matrix] - name: 'stable minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.stable) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }} - skip-ls-check: true - - unstable: - needs: [matrix, stable] - name: 'unstable minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.unstable) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }} - skip-ls-check: true - - node: - name: 'node 0.x' - needs: [stable, unstable] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-arguments/.github/workflows/rebase.yml b/build/node_modules/is-arguments/.github/workflows/rebase.yml deleted file mode 100644 index 027aed07..00000000 --- a/build/node_modules/is-arguments/.github/workflows/rebase.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Automatic Rebase - -on: [pull_request_target] - -jobs: - _: - name: "Automatic Rebase" - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/rebase@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/node_modules/is-arguments/.github/workflows/require-allow-edits.yml b/build/node_modules/is-arguments/.github/workflows/require-allow-edits.yml deleted file mode 100644 index 549d7b48..00000000 --- a/build/node_modules/is-arguments/.github/workflows/require-allow-edits.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Require “Allow Edits” - -on: [pull_request_target] - -jobs: - _: - name: "Require “Allow Edits”" - - runs-on: ubuntu-latest - - steps: - - uses: ljharb/require-allow-edits@main diff --git a/build/node_modules/is-arguments/.nycrc b/build/node_modules/is-arguments/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/is-arguments/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-arguments/CHANGELOG.md b/build/node_modules/is-arguments/CHANGELOG.md deleted file mode 100644 index 943fe35a..00000000 --- a/build/node_modules/is-arguments/CHANGELOG.md +++ /dev/null @@ -1,163 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.1.0](https://github.com/inspect-js/is-arguments/compare/v1.0.4...v1.1.0) - 2020-12-04 - -### Commits - -- [Tests] use shared travis-ci configs [`fd59a37`](https://github.com/inspect-js/is-arguments/commit/fd59a3779f004f36ea8e5ac90b0de9b97ff60755) -- [Tests] migrate tests to Github Actions [`982a0d6`](https://github.com/inspect-js/is-arguments/commit/982a0d68495b68e2b6ca8f4caa9f8a909ec56755) -- [Tests] remove `jscs` [`927d4b5`](https://github.com/inspect-js/is-arguments/commit/927d4b5c17b12c40f445491e52a11d5bed311ef6) -- [meta] add `auto-changelog` [`ef0634b`](https://github.com/inspect-js/is-arguments/commit/ef0634b0c07a12d9144c4db168cb79963326ec6d) -- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`1689f8b`](https://github.com/inspect-js/is-arguments/commit/1689f8bf533c8ab8cd95caf953905e3a204c0cdc) -- [Tests] up to `node` `v11.7`, `v10.15`, `v8.15`, `v6.16` [`145aaeb`](https://github.com/inspect-js/is-arguments/commit/145aaeb5a35e7abd3a8a5c9ec87c6e37f16ed068) -- [readme] fix repo URLs, remove defunct badges [`cc484a3`](https://github.com/inspect-js/is-arguments/commit/cc484a3ae787125eccc30a05c63b7ff6a1581591) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`c888738`](https://github.com/inspect-js/is-arguments/commit/c888738ef1cf84b973169bbe6219b795de4acfc2) -- [Tests] run `nyc` on all tests [`0de8efb`](https://github.com/inspect-js/is-arguments/commit/0de8efb8091a3dd5708812cd26ad541f7dca773a) -- [actions] add automatic rebasing / merge commit blocking [`818775a`](https://github.com/inspect-js/is-arguments/commit/818775aa0c66064965517be554c3bcc57ec0d721) -- [Robustness] use `call-bind` [`31d0199`](https://github.com/inspect-js/is-arguments/commit/31d0199c1a560f113ff099a2f43068cdfe0af79e) -- [actions] add "Allow Edits" workflow [`0c55f7d`](https://github.com/inspect-js/is-arguments/commit/0c55f7d254ff335291d9cee39501b247f7248fb9) -- [meta] create FUNDING.yml [`ca7ed59`](https://github.com/inspect-js/is-arguments/commit/ca7ed597bac29790ac6233ff1bdff7704b870e96) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`1ae5053`](https://github.com/inspect-js/is-arguments/commit/1ae505390efff099c50d0bc786a3ecc8d5303b04) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`; add `safe-publish-latest` [`433f4a5`](https://github.com/inspect-js/is-arguments/commit/433f4a5573810fe689c5e56ad9fe69b6a2229b8c) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`78ea4e8`](https://github.com/inspect-js/is-arguments/commit/78ea4e8261bc326c1ae7e9e50bb655e8bf128c6b) -- [Tests] use `npm audit` instead of `nsp` [`07fb85b`](https://github.com/inspect-js/is-arguments/commit/07fb85bf396880648c2d4285273968d478df4711) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`2204add`](https://github.com/inspect-js/is-arguments/commit/2204add22fcc15b1ee6aaae90578595b4f6d9647) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` [`ce150c0`](https://github.com/inspect-js/is-arguments/commit/ce150c0c47504779ce812b1aefe044fcad1286af) -- [Tests] fix tests from 0de8efb [`ee45fc3`](https://github.com/inspect-js/is-arguments/commit/ee45fc387b655de6feac101c478af111d488e144) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`03a312c`](https://github.com/inspect-js/is-arguments/commit/03a312cdae0aa058cfd094c996acb2af4e785484) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`25d2ef8`](https://github.com/inspect-js/is-arguments/commit/25d2ef8da0b90c834d1fa6b83410205832e271d4) -- [Dev Deps] update `auto-changelog`, `tape` [`0fe60b7`](https://github.com/inspect-js/is-arguments/commit/0fe60b74b7f1254c386e14d0ea6d9cc074fdf12c) -- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`4a9cbd0`](https://github.com/inspect-js/is-arguments/commit/4a9cbd0c91fd945ccc97c219d34e0840b0965586) -- [Dev Deps] update `auto-changelog`; add `aud` [`d9ff7d5`](https://github.com/inspect-js/is-arguments/commit/d9ff7d5f521eec5942019b1d7b38ace475da142f) -- [meta] add `funding` field [`adec2d2`](https://github.com/inspect-js/is-arguments/commit/adec2d293022ee3ec87479eaeae81bfec1ea1b18) -- [Tests] only audit prod deps [`f474960`](https://github.com/inspect-js/is-arguments/commit/f474960795eeb6087fc79eed8b787aa067b22ab1) - -## [v1.0.4](https://github.com/inspect-js/is-arguments/compare/v1.0.3...v1.0.4) - 2018-11-05 - -### Commits - -- [Fix] Fix errors about `in` operator. [`4d12e23`](https://github.com/inspect-js/is-arguments/commit/4d12e23fab8701207b7715fe7502db35c6edd3dd) - -## [v1.0.3](https://github.com/inspect-js/is-arguments/compare/v1.0.2...v1.0.3) - 2018-11-02 - -### Fixed - -- [Fix] add awareness of Symbol.toStringTag [`#20`](https://github.com/inspect-js/is-arguments/issues/20) - -### Commits - -- [Tests] up to `node` `v8.1`; `v7.10`, `v6.11`, `v4.8`; improve matrix; newer npm fails on older node [`ea5f23c`](https://github.com/inspect-js/is-arguments/commit/ea5f23c322234e18248b0acafe0f45333d5d78ec) -- [Tests] up to `node` `v9.1`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS. [`697a0a1`](https://github.com/inspect-js/is-arguments/commit/697a0a143d3b82f84956e4cca407c7eea228526b) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`40045c5`](https://github.com/inspect-js/is-arguments/commit/40045c5fe6ebb86f96125da96f7bfb9637579ce4) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `jscs`, `tape` [`08abc0d`](https://github.com/inspect-js/is-arguments/commit/08abc0d2e31c34514a58711f6203e41d06c3b81f) -- [Tests] up to `node` `v11.1`, `v10.13`, `v8.12` [`bf8d275`](https://github.com/inspect-js/is-arguments/commit/bf8d275ecf855c40c9c3f9c3ccf76874d4ce2497) -- [Tests] up to `node` `v7.0`, `v6.9`, `v4.6`; improve test matrix [`f813d86`](https://github.com/inspect-js/is-arguments/commit/f813d86b38f10d2e1f495597ca2a58d25a21339e) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`e4f9aee`](https://github.com/inspect-js/is-arguments/commit/e4f9aee64f0f7f2f9d8132992b81d133b5d3c9c7) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`6c98d11`](https://github.com/inspect-js/is-arguments/commit/6c98d1171a043a4ab21d70b813379a4162ac3702) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`8e3178d`](https://github.com/inspect-js/is-arguments/commit/8e3178db172bc3ac889343aa3e38c24cc92aed08) -- package.json: use object form of "author", add "contributors" [`decc4fe`](https://github.com/inspect-js/is-arguments/commit/decc4feb9b31bd9f68b7a5f67aed39d32c9a6ab3) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`514902a`](https://github.com/inspect-js/is-arguments/commit/514902abde6b7d9397c9dbcd90f19fd78b70725a) -- [Tests] up to `node` `v5.6`, `v4.3` [`f11f47c`](https://github.com/inspect-js/is-arguments/commit/f11f47c5c1dae8adfda7ba1319de3b6e03db7925) -- [Dev Deps] add `npm run security` [`4adf82c`](https://github.com/inspect-js/is-arguments/commit/4adf82c0c9259eb81db18848a314b36db1c48d36) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`f587aeb`](https://github.com/inspect-js/is-arguments/commit/f587aeb3ec04f2d22c2a8fd7686a2153d0fd50d2) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `tape` [`4f587bb`](https://github.com/inspect-js/is-arguments/commit/4f587bb7a2c499b1aa2e2aea60da8c0ee91c9df2) -- [Tests] up to `node` `v6.2`, `v5.11` [`36939c5`](https://github.com/inspect-js/is-arguments/commit/36939c5e1d8ce56c356a3f2144983839d86b3ae8) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `tape` [`d779cc8`](https://github.com/inspect-js/is-arguments/commit/d779cc875bd6fa15d861a134065d629159051331) -- Only apps should have lockfiles [`f50ce65`](https://github.com/inspect-js/is-arguments/commit/f50ce65fe94728b6f127a0c11f2efc6473f56cf3) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`3025559`](https://github.com/inspect-js/is-arguments/commit/30255597cf578068e5a28d7a6e29076355132c87) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`3b9ddee`](https://github.com/inspect-js/is-arguments/commit/3b9ddeef740608d84d2b825b9a90e4adf049c905) -- [Tests] up to `v5.8`, `v4.4` [`d4902cf`](https://github.com/inspect-js/is-arguments/commit/d4902cfb07e0bfaa0788a7847fcaaba91c8e3435) -- [Tests] fix npm upgrades for older nodes [`c617dd3`](https://github.com/inspect-js/is-arguments/commit/c617dd3a7b6a70162cbeb985009620acd69c029d) -- [Tests] up to `node` `v5.3` [`cdd2a61`](https://github.com/inspect-js/is-arguments/commit/cdd2a617c3d1810149683596fe90024ae9dcc549) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`7719172`](https://github.com/inspect-js/is-arguments/commit/77191721ef92ce9dc72fdae8e1cfdc2ec74317d9) -- [Dev Deps] update `es5-shim`, `tape`, `nsp`, `eslint` [`6a5f82b`](https://github.com/inspect-js/is-arguments/commit/6a5f82bc6d9407e64fc4c7794d546e4db8ab61ed) -- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` [`c896c1c`](https://github.com/inspect-js/is-arguments/commit/c896c1c4629ff3c8cda25e0c3e607d2950ff4ba9) -- [Tests] Use `pretest` for running the linter. [`83db117`](https://github.com/inspect-js/is-arguments/commit/83db1173fde93c2d8a490663ce850321b018eab2) -- [Dev Deps] update `@ljharb/eslint-config`, `eslint` [`57fdc63`](https://github.com/inspect-js/is-arguments/commit/57fdc636dea2f5c641e2d0c0dfbe0ac589acb69a) -- [Tests] up to `node` `v7.2` [`aa3eacf`](https://github.com/inspect-js/is-arguments/commit/aa3eacf27001a92aab4874f7d29f693ed6221b4a) -- [Tests] up to `node` `v5.10` [`94ff6d7`](https://github.com/inspect-js/is-arguments/commit/94ff6d72c095cae00a4df06043976dc3e414f49b) -- [Tests] on `node` `v4.2` [`cdb1fb5`](https://github.com/inspect-js/is-arguments/commit/cdb1fb5babe08c845570cbae218c0b96753c1152) - -## [v1.0.2](https://github.com/inspect-js/is-arguments/compare/v1.0.1...v1.0.2) - 2015-09-21 - -### Commits - -- Update `eslint`, use my personal shared config. [`8e211f4`](https://github.com/inspect-js/is-arguments/commit/8e211f46b17ae8d89aa5484b4b3b853d3d1b3fa9) -- In modern engines, only export the "is standard arguments" check. [`e8aa23f`](https://github.com/inspect-js/is-arguments/commit/e8aa23fc19f6d1c3c952174391a4903d90fcd622) -- Update `jscs`, `eslint`, `@ljharb/eslint-config` [`8a90bca`](https://github.com/inspect-js/is-arguments/commit/8a90bcad88025736a7c127123f1473af35bae6f7) -- Update `eslint` [`2214b5d`](https://github.com/inspect-js/is-arguments/commit/2214b5dac911e1eb949179f9034aa37ba7c079d7) -- Update `eslint` [`ca97c5b`](https://github.com/inspect-js/is-arguments/commit/ca97c5b22e7cf4f30d90ee1519988ecd4bf36887) -- [Dev Deps] update `jscs` [`ca6a477`](https://github.com/inspect-js/is-arguments/commit/ca6a477c16c70c0e5f29d56713237703ab610fdf) -- Update `covert`, `jscs`, `eslint` [`232d92a`](https://github.com/inspect-js/is-arguments/commit/232d92ab1dff7b0ad64024726cda437b32ce1906) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`460d700`](https://github.com/inspect-js/is-arguments/commit/460d700bdb5d8b261995e3d8f3e6b3eda4f91bcf) -- Test up to `io.js` `v2.3` [`7ef2293`](https://github.com/inspect-js/is-arguments/commit/7ef229388819ae1f1c1d55dbe741c90977cc3a3f) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`29f3d71`](https://github.com/inspect-js/is-arguments/commit/29f3d71eb516326409bd24bc7e6d4ebb6a872d01) -- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` [`1c79a85`](https://github.com/inspect-js/is-arguments/commit/1c79a85d670d8dc5dbb1831ee0de0c8858a94775) -- `toString` as a variable name breaks in some older browsers. [`1e59f2b`](https://github.com/inspect-js/is-arguments/commit/1e59f2bf79454188145de5275a64996eafc94420) -- Update `tape`, `eslint` [`1efbefd`](https://github.com/inspect-js/is-arguments/commit/1efbefd84df6ae802245ebe6371cd15255ee23e7) -- Test up to `io.js` `v2.5` [`0760acc`](https://github.com/inspect-js/is-arguments/commit/0760acc3139d1930efebc4321c1f96ba1406e2de) -- Test up to `io.js` `v2.1` [`4c2245f`](https://github.com/inspect-js/is-arguments/commit/4c2245f3deccdb3ec70e4f79e5e8aac697f35d08) -- [Dev Deps] update `tape` [`348980e`](https://github.com/inspect-js/is-arguments/commit/348980e1666b66724e37c9df63d18d540a51d5fe) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`91d8c4f`](https://github.com/inspect-js/is-arguments/commit/91d8c4fd4516aae483fa2dd9c4a5b44c48e773f0) -- Update `tape` [`ec9b92a`](https://github.com/inspect-js/is-arguments/commit/ec9b92a244f7a077fe1df58af89f56a39d4d2600) -- Update `tape` [`6bc8969`](https://github.com/inspect-js/is-arguments/commit/6bc8969c40b2b2cd1c767933b7ef3d8ff65bf67f) -- Test on `io.js` `v3.0` [`33d9578`](https://github.com/inspect-js/is-arguments/commit/33d957814d515855583e98e652624e5920cc9496) - -## [v1.0.1](https://github.com/inspect-js/is-arguments/compare/v1.0.0...v1.0.1) - 2015-04-29 - -### Commits - -- Update `jscs`, add `npm run eslint` [`13a5f01`](https://github.com/inspect-js/is-arguments/commit/13a5f015aa67cb2402b5fdb21c68180ff7036a14) -- Using my standard jscs.json file [`d669fc4`](https://github.com/inspect-js/is-arguments/commit/d669fc49c0db56457eb55a77a2f9c40916ad6361) -- Adding `npm run lint` [`ece5d05`](https://github.com/inspect-js/is-arguments/commit/ece5d0581fadcff99b181d67b54eacb4869cfb98) -- Test on latest `io.js` [`908b092`](https://github.com/inspect-js/is-arguments/commit/908b092912fa9c89c20a41fdd117b21e857bfc84) -- Adding license and downloads badges [`05fd28b`](https://github.com/inspect-js/is-arguments/commit/05fd28b28d857ecb2220d0ac6267f36ec1e65eae) -- Make sure old and unstable nodes don't break Travis [`16ee7ea`](https://github.com/inspect-js/is-arguments/commit/16ee7eae70015864a8b3f2fe03463ecb4d707451) -- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`9846c79`](https://github.com/inspect-js/is-arguments/commit/9846c79d1999432538ea757c0dbf61ab3f0d54cd) -- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`27c014d`](https://github.com/inspect-js/is-arguments/commit/27c014d217d41d33b0bb1735e38184b871d86311) -- Use SVG instead of PNG badges [`ea01e68`](https://github.com/inspect-js/is-arguments/commit/ea01e68896722351c63912e37cc37541f9b78780) -- Remove unused links in README [`f5baaff`](https://github.com/inspect-js/is-arguments/commit/f5baaff1931bb9d48b20270a94d99121a3176dba) -- Test on latest `io.js` versions [`293e2c4`](https://github.com/inspect-js/is-arguments/commit/293e2c4d1edfdf9c6db88663314599ecde08a945) -- Update `tape`, `jscs` [`d72ab08`](https://github.com/inspect-js/is-arguments/commit/d72ab08147ab5256e1efd61c01b719796699faf0) -- Update `jscs` [`5f6e6d4`](https://github.com/inspect-js/is-arguments/commit/5f6e6d42645845b5663b5fef716e2963686aad8d) -- Update `tape`, `jscs` [`39ae55b`](https://github.com/inspect-js/is-arguments/commit/39ae55b6ef0c3d6206116bd7500bc601485d8698) -- Update `tape`, `jscs` [`594d928`](https://github.com/inspect-js/is-arguments/commit/594d92852cf7a4d93c8ff5ac157fdae9dbefc133) -- Updating dependencies [`183ac15`](https://github.com/inspect-js/is-arguments/commit/183ac151d27032fce4aaf3fa095cce9b086eb651) -- Update `tape` [`77b9cea`](https://github.com/inspect-js/is-arguments/commit/77b9ceae8dcb2c2e73d85f512d0d0309427c4011) -- Lock covert to v1.0.0. [`28d9052`](https://github.com/inspect-js/is-arguments/commit/28d9052eaa99f36ca5c61f35645b5e14ddf6f8f9) -- Updating tape [`d9ee2ac`](https://github.com/inspect-js/is-arguments/commit/d9ee2ac24045fa81ffed356410cfc2d878bc8b4b) -- Updating jscs [`c0cab8f`](https://github.com/inspect-js/is-arguments/commit/c0cab8fd6c0509153142a3cc79a7a4dceba322be) -- Updating jscs [`c59352a`](https://github.com/inspect-js/is-arguments/commit/c59352ae99c0d813168c19b9c888182ea11ae17a) -- Run linter as part of tests [`8b8154e`](https://github.com/inspect-js/is-arguments/commit/8b8154ef5b2566250baed70807affdbba93c3bcf) -- Oops, properly running code coverage checks during tests. [`cc441d0`](https://github.com/inspect-js/is-arguments/commit/cc441d0c488486c688e513f7d129f4f8ea2ee323) -- Updating covert. [`142db90`](https://github.com/inspect-js/is-arguments/commit/142db90aa3448995232c419419523b67a953b012) -- Updating tape [`265fd0f`](https://github.com/inspect-js/is-arguments/commit/265fd0ff3ee71ab8aa3d2d90be74066c1aa7c9c0) -- Updating tape [`7e9aec6`](https://github.com/inspect-js/is-arguments/commit/7e9aec654b8f5fe0bb2f8c940c84da8ec29a2102) -- Updating covert [`d96860a`](https://github.com/inspect-js/is-arguments/commit/d96860ab520ae62a37e80ad259b936ace09954d9) -- Updating tape [`1ec32a0`](https://github.com/inspect-js/is-arguments/commit/1ec32a0c02f53192a94521d63d4cf8fbb567fc84) -- Run code coverage as part of tests [`155ab22`](https://github.com/inspect-js/is-arguments/commit/155ab227902287c5eec653c25bec2cc4b530e635) -- Coverage does not work currently on node 0.6. [`9acf696`](https://github.com/inspect-js/is-arguments/commit/9acf696a1f3e202990fea494615377b40a380b79) -- Testing node 0.6 again [`a23ca07`](https://github.com/inspect-js/is-arguments/commit/a23ca07427cf3801b82e6a93d9a8904f392f4b20) - -## [v1.0.0](https://github.com/inspect-js/is-arguments/compare/v0.1.0...v1.0.0) - 2014-01-07 - -### Commits - -- :metal: 1.0.0 [`fc08874`](https://github.com/inspect-js/is-arguments/commit/fc08874107ac74fca91bd678843dbf7ea3a4c54a) - -## v0.1.0 - 2014-01-07 - -### Commits - -- package.json [`c547055`](https://github.com/inspect-js/is-arguments/commit/c54705585e907f1ef22473bff656904e49d22db2) -- read me! [`72ed639`](https://github.com/inspect-js/is-arguments/commit/72ed639c5db9c8732073ec1d30f14b493bb976da) -- Initial commit [`d2e0264`](https://github.com/inspect-js/is-arguments/commit/d2e0264bed7948b6c4f7bfde12ab351bffbf4cc1) -- Tests. [`032ed16`](https://github.com/inspect-js/is-arguments/commit/032ed16abf54466a75333e1da2ceef780fb58c1e) -- Implementation. [`71c312d`](https://github.com/inspect-js/is-arguments/commit/71c312d76d3b4b99cf7a1e0b442e9492069fba2b) -- Travis CI [`5500a66`](https://github.com/inspect-js/is-arguments/commit/5500a664de6b4484850f02b74641baa6e7d74c50) -- Running code coverage as part of tests. [`88ad34a`](https://github.com/inspect-js/is-arguments/commit/88ad34a133188cea28aa26a9f583653ea3a0260e) diff --git a/build/node_modules/is-arguments/LICENSE b/build/node_modules/is-arguments/LICENSE deleted file mode 100644 index 47b7b507..00000000 --- a/build/node_modules/is-arguments/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-arguments/README.md b/build/node_modules/is-arguments/README.md deleted file mode 100644 index 3872cbff..00000000 --- a/build/node_modules/is-arguments/README.md +++ /dev/null @@ -1,42 +0,0 @@ -#is-arguments [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this an arguments object? It's a harder question than you think. - -## Example - -```js -var isArguments = require('is-arguments'); -var assert = require('assert'); - -assert.equal(isArguments({}), false); -assert.equal(isArguments([]), false); -(function () { - assert.equal(isArguments(arguments), true); -}()) -``` - -## Caveats -If you have modified an actual `arguments` object by giving it a `Symbol.toStringTag` property, then this package will return `false`. - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-arguments -[2]: http://versionbadg.es/inspect-js/is-arguments.svg -[5]: https://david-dm.org/inspect-js/is-arguments.svg -[6]: https://david-dm.org/inspect-js/is-arguments -[7]: https://david-dm.org/inspect-js/is-arguments/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-arguments#info=devDependencies -[11]: https://nodei.co/npm/is-arguments.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-arguments.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-arguments.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-arguments - diff --git a/build/node_modules/is-arguments/index.js b/build/node_modules/is-arguments/index.js deleted file mode 100644 index 805f977e..00000000 --- a/build/node_modules/is-arguments/index.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; -var callBound = require('call-bind/callBound'); - -var $toString = callBound('Object.prototype.toString'); - -var isStandardArguments = function isArguments(value) { - if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) { - return false; - } - return $toString(value) === '[object Arguments]'; -}; - -var isLegacyArguments = function isArguments(value) { - if (isStandardArguments(value)) { - return true; - } - return value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - $toString(value) !== '[object Array]' && - $toString(value.callee) === '[object Function]'; -}; - -var supportsStandardArguments = (function () { - return isStandardArguments(arguments); -}()); - -isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests - -module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; diff --git a/build/node_modules/is-arguments/package.json b/build/node_modules/is-arguments/package.json deleted file mode 100644 index 2fcc181e..00000000 --- a/build/node_modules/is-arguments/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_from": "is-arguments@^1.0.4", - "_id": "is-arguments@1.1.0", - "_inBundle": false, - "_integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "_location": "/is-arguments", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-arguments@^1.0.4", - "name": "is-arguments", - "escapedName": "is-arguments", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/util" - ], - "_resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "_shasum": "62353031dfbee07ceb34656a6bde59efecae8dd9", - "_spec": "is-arguments@^1.0.4", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/util", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-arguments/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": { - "call-bind": "^1.0.0" - }, - "deprecated": false, - "description": "Is this an arguments object? It's a harder question than you think.", - "devDependencies": { - "@ljharb/eslint-config": "^17.3.0", - "aud": "^1.1.3", - "auto-changelog": "^2.2.1", - "eslint": "^7.14.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-arguments", - "keywords": [ - "arguments", - "js", - "javascript", - "is-arguments", - "is", - "object" - ], - "license": "MIT", - "main": "index.js", - "name": "is-arguments", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-arguments.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", - "pretest": "npm run --silent lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.0" -} diff --git a/build/node_modules/is-arguments/test/index.js b/build/node_modules/is-arguments/test/index.js deleted file mode 100644 index 818b7b02..00000000 --- a/build/node_modules/is-arguments/test/index.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isArguments = require('../'); -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -test('primitives', function (t) { - t.notOk(isArguments([]), 'array is not arguments'); - t.notOk(isArguments({}), 'object is not arguments'); - t.notOk(isArguments(''), 'empty string is not arguments'); - t.notOk(isArguments('foo'), 'string is not arguments'); - t.notOk(isArguments({ length: 2 }), 'naive array-like is not arguments'); - t.end(); -}); - -test('arguments object', function (t) { - t.ok(isArguments(arguments), 'arguments is arguments'); - t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); - t.end(); -}); - -test('old-style arguments object', function (t) { - var isLegacyArguments = isArguments.isLegacyArguments || isArguments; - var fakeOldArguments = { - callee: function () {}, - length: 3 - }; - t.ok(isLegacyArguments(fakeOldArguments), 'old-style arguments is arguments'); - t.end(); -}); - -test('Symbol.toStringTag', { skip: !hasToStringTag }, function (t) { - var obj = {}; - obj[Symbol.toStringTag] = 'Arguments'; - t.notOk(isArguments(obj), 'object with faked toStringTag is not arguments'); - - var args = (function () { - return arguments; - }()); - args[Symbol.toStringTag] = 'Arguments'; - t.notOk(isArguments(obj), 'real arguments with faked toStringTag is not arguments'); - - t.end(); -}); diff --git a/build/node_modules/is-arrayish/package.json b/build/node_modules/is-arrayish/package.json index 980e3cee..c1550289 100644 --- a/build/node_modules/is-arrayish/package.json +++ b/build/node_modules/is-arrayish/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/simple-swizzle" ], - "_resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-arrayish/-/is-arrayish-0.3.2.tgz", "_shasum": "4574a2ae56f7ab206896fb431eaeed066fdf8f03", "_spec": "is-arrayish@^0.3.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/simple-swizzle", diff --git a/build/node_modules/is-bigint/.eslintignore b/build/node_modules/is-bigint/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-bigint/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-bigint/.eslintrc b/build/node_modules/is-bigint/.eslintrc deleted file mode 100644 index c8872383..00000000 --- a/build/node_modules/is-bigint/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "globals": { - "BigInt": true, - }, - - "rules": { - "new-cap": [2, { "capIsNewExceptions": ["BigInt"] }], - "operator-linebreak": [2, "before"], - }, -} diff --git a/build/node_modules/is-bigint/.github/FUNDING.yml b/build/node_modules/is-bigint/.github/FUNDING.yml deleted file mode 100644 index 59d03ba7..00000000 --- a/build/node_modules/is-bigint/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-bigint -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-bigint/.nycrc b/build/node_modules/is-bigint/.nycrc deleted file mode 100644 index bdd626ce..00000000 --- a/build/node_modules/is-bigint/.nycrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-bigint/CHANGELOG.md b/build/node_modules/is-bigint/CHANGELOG.md deleted file mode 100644 index b62ddcf1..00000000 --- a/build/node_modules/is-bigint/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.2](https://github.com/inspect-js/is-bigint/compare/v1.0.1...v1.0.2) - 2021-05-04 - -### Commits - -- [meta] do not publish github action workflow files [`276d677`](https://github.com/inspect-js/is-bigint/commit/276d677d1eac61e990a2f2b523c7cdef70784865) -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`cea7fb6`](https://github.com/inspect-js/is-bigint/commit/cea7fb6e882ad7e2f550de2bd9317a4409bcd735) -- [readme] fix repo URLs; remove travis badge [`c8e7c36`](https://github.com/inspect-js/is-bigint/commit/c8e7c3651f3303fddafa61cf29cfbb79ea2d5d4b) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-symbols`, `object-inspect`, `tape` [`32f3d90`](https://github.com/inspect-js/is-bigint/commit/32f3d909363045fe5d40dde9e4db354344ab4d50) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `tape` [`c2f20f5`](https://github.com/inspect-js/is-bigint/commit/c2f20f577d84e68b4e3224abb51024fbc4b9b2ba) -- [meta] remove unneeded token; update checkout action [`94e46e9`](https://github.com/inspect-js/is-bigint/commit/94e46e92a1a85ec022c8febf8d5d3c2369b46e97) -- [meta] use `prepublishOnly` script for npm 7+ [`3e663ec`](https://github.com/inspect-js/is-bigint/commit/3e663ecb09bfdc5dbaaa37aaef4adf28b5e49035) - -## [v1.0.1](https://github.com/inspect-js/is-bigint/compare/v1.0.0...v1.0.1) - 2020-11-30 - -### Commits - -- [Tests] use shared travis-ci configs [`28f1211`](https://github.com/inspect-js/is-bigint/commit/28f1211132ad2a6495d816140680fa16c12eb6f3) -- [Tests] migrate tests to Github Actions [`0998c64`](https://github.com/inspect-js/is-bigint/commit/0998c6443d603028f8b988bcdd52d23dbf513031) -- [meta] add `auto-changelog` [`2352de6`](https://github.com/inspect-js/is-bigint/commit/2352de6df8385b256d75ce50c360947243a599f6) -- [Tests] run `nyc` on all tests [`9c16a9a`](https://github.com/inspect-js/is-bigint/commit/9c16a9a5ddaf7c2c578542ab8f00dd4e72eff541) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `auto-changelog`, `object-inspect`, `tape` [`4cd0edd`](https://github.com/inspect-js/is-bigint/commit/4cd0edd1917f789501291315c9eac5f895fd719e) -- [actions] add automatic rebasing / merge commit blocking [`f0f4b91`](https://github.com/inspect-js/is-bigint/commit/f0f4b91dba029dbca5b3cd27ef91c4fb8e3ec51a) -- [actions] add "Allow Edits" workflow [`7f4f46e`](https://github.com/inspect-js/is-bigint/commit/7f4f46ec07679c00e22287ec55b39ff1e4f809cf) -- [meta] create FUNDING.yml [`2d0cb9a`](https://github.com/inspect-js/is-bigint/commit/2d0cb9ae8ddf635f2c472ce49f95f717f2c432bf) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud` [`0ee110e`](https://github.com/inspect-js/is-bigint/commit/0ee110effdcaa96d90f21a0ec6e625941f77c45a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `has-symbols`, `object-inspect`, `tape` [`5bb7f3a`](https://github.com/inspect-js/is-bigint/commit/5bb7f3a8de6ec5ee2aa573c22e41884f3d2d1cc3) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`d3d67d0`](https://github.com/inspect-js/is-bigint/commit/d3d67d05f8a3f4cb07085811629f56ef872949c3) -- [Dev Deps] update `auto-changelog`, `tape` [`54e270f`](https://github.com/inspect-js/is-bigint/commit/54e270fa29856dba90f86785fa61bffc79a2825d) -- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`d82bfe7`](https://github.com/inspect-js/is-bigint/commit/d82bfe75c63aeda40f7e473c57f26cea8790ba3a) -- [Dev Deps] update `auto-changelog`; add `aud` [`9c34bd1`](https://github.com/inspect-js/is-bigint/commit/9c34bd1873f08d77c82d8e54ad90c5a1a035e7ea) -- [Tests] add missing `posttest` script [`0690bd9`](https://github.com/inspect-js/is-bigint/commit/0690bd9868d4d8b43424b4224cdbb8659a1c6423) -- [meta] add `funding` field [`7ca36d0`](https://github.com/inspect-js/is-bigint/commit/7ca36d06ebcf6b01a592ecd6758bd2b39c0fb0db) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`5ffa8da`](https://github.com/inspect-js/is-bigint/commit/5ffa8dad9f634891cf739ee118f1b43142b0f01d) -- [Dev Deps] update `eslint` [`8512c2f`](https://github.com/inspect-js/is-bigint/commit/8512c2f29a9267fe8fe19209bcf77df94f127172) -- [Tests] only audit prod deps [`f2147dc`](https://github.com/inspect-js/is-bigint/commit/f2147dc54e72594985e8f6db3932a4f0819dc4db) -- [readme] fix header [`d6eff75`](https://github.com/inspect-js/is-bigint/commit/d6eff75d00471f465768deb92867e878c27733b3) - -## v1.0.0 - 2018-09-20 - -### Commits - -- [Tests] add tests [`847f12a`](https://github.com/inspect-js/is-bigint/commit/847f12af125fcefb75ed3517550feedf7dd73e88) -- Initial commit [`b53f3c6`](https://github.com/inspect-js/is-bigint/commit/b53f3c6754e7fd7a9982ff5b1466c4dc9799dad9) -- readme [`66c15fe`](https://github.com/inspect-js/is-bigint/commit/66c15fe1a0d965b8c78bf3a3bfc289dcfec53ee1) -- Implementation [`c2c0974`](https://github.com/inspect-js/is-bigint/commit/c2c0974397825a2a56e1ea8af0546171309d4805) -- package.json [`98b174c`](https://github.com/inspect-js/is-bigint/commit/98b174c24b070053f0548e58f9b87bc9dbdf922a) -- Only apps should have lockfiles [`a77c74b`](https://github.com/inspect-js/is-bigint/commit/a77c74bd8ca5f058f1e6165ae7b33bb84adef98c) diff --git a/build/node_modules/is-bigint/LICENSE b/build/node_modules/is-bigint/LICENSE deleted file mode 100644 index 9dd868f0..00000000 --- a/build/node_modules/is-bigint/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/is-bigint/README.md b/build/node_modules/is-bigint/README.md deleted file mode 100644 index 1bf8c5f9..00000000 --- a/build/node_modules/is-bigint/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# is-bigint [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this an ES BigInt value? - -## Example - -```js -var isBigInt = require('is-bigint'); -assert(!isBigInt(function () {})); -assert(!isBigInt(null)); -assert(!isBigInt(function* () { yield 42; return Infinity; }); -assert(!isBigInt(Symbol('foo'))); - -assert(isBigInt(1n)); -assert(isBigInt(Object(1n))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-bigint -[2]: https://versionbadg.es/inspect-js/is-bigint.svg -[5]: https://david-dm.org/inspect-js/is-bigint.svg -[6]: https://david-dm.org/inspect-js/is-bigint -[7]: https://david-dm.org/inspect-js/is-bigint/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-bigint#info=devDependencies -[11]: https://nodei.co/npm/is-bigint.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-bigint.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-bigint.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-bigint diff --git a/build/node_modules/is-bigint/index.js b/build/node_modules/is-bigint/index.js deleted file mode 100644 index 6ce59c8a..00000000 --- a/build/node_modules/is-bigint/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -if (typeof BigInt === 'function') { - var bigIntValueOf = BigInt.prototype.valueOf; - var tryBigInt = function tryBigIntObject(value) { - try { - bigIntValueOf.call(value); - return true; - } catch (e) { - } - return false; - }; - - module.exports = function isBigInt(value) { - if ( - value === null - || typeof value === 'undefined' - || typeof value === 'boolean' - || typeof value === 'string' - || typeof value === 'number' - || typeof value === 'symbol' - || typeof value === 'function' - ) { - return false; - } - if (typeof value === 'bigint') { - return true; - } - - return tryBigInt(value); - }; -} else { - module.exports = function isBigInt(value) { - return false && value; - }; -} diff --git a/build/node_modules/is-bigint/package.json b/build/node_modules/is-bigint/package.json deleted file mode 100644 index cbaa9a56..00000000 --- a/build/node_modules/is-bigint/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_from": "is-bigint@^1.0.1", - "_id": "is-bigint@1.0.2", - "_inBundle": false, - "_integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "_location": "/is-bigint", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-bigint@^1.0.1", - "name": "is-bigint", - "escapedName": "is-bigint", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/which-boxed-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "_shasum": "ffb381442503235ad245ea89e45b3dbff040ee5a", - "_spec": "is-bigint@^1.0.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/which-boxed-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-bigint/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Is this value an ES BigInt?", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "eslint": "^7.25.0", - "has-symbols": "^1.0.2", - "nyc": "^10.3.2", - "object-inspect": "^1.10.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-bigint#readme", - "keywords": [ - "bigint", - "es", - "integer", - "is" - ], - "license": "MIT", - "main": "index.js", - "name": "is-bigint", - "repository": { - "type": "git", - "url": "git+https://github.com/inspect-js/is-bigint.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.2" -} diff --git a/build/node_modules/is-bigint/test/.eslintrc b/build/node_modules/is-bigint/test/.eslintrc deleted file mode 100644 index 1ac0d47b..00000000 --- a/build/node_modules/is-bigint/test/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "rules": { - "max-statements-per-line": [2, { "max": 2 }], - "no-restricted-properties": 0, - "symbol-description": 0, - } -} diff --git a/build/node_modules/is-bigint/test/index.js b/build/node_modules/is-bigint/test/index.js deleted file mode 100644 index 069f73d7..00000000 --- a/build/node_modules/is-bigint/test/index.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -var test = require('tape'); -var inspect = require('object-inspect'); -var isBigInt = require('..'); - -var debug = function (v, m) { return inspect(v) + ' ' + m; }; - -var forEach = function (arr, func) { - var i; - for (i = 0; i < arr.length; ++i) { - func(arr[i], i, arr); - } -}; - -var hasSymbols = require('has-symbols')(); -var hasBigInts = typeof BigInt === 'function'; - -test('non-BigInt values', function (t) { - var nonBigInts = [ - true, - false, - Object(true), - Object(false), - null, - undefined, - {}, - [], - /a/g, - 'string', - 42, - new Date(), - function () {}, - NaN - ]; - if (hasSymbols) { - nonBigInts.push(Symbol.iterator, Symbol('foo')); - } - t.plan(nonBigInts.length); - forEach(nonBigInts, function (nonBigInt) { - t.equal(false, isBigInt(nonBigInt), debug(nonBigInt, 'is not a BigInt')); - }); - t.end(); -}); - -test('faked BigInt values', function (t) { - t.test('real BigInt valueOf', { skip: !hasBigInts }, function (st) { - var fakeBigInt = { valueOf: function () { return BigInt(42); } }; - st.equal(false, isBigInt(fakeBigInt), 'object with valueOf returning a BigInt is not a BigInt'); - st.end(); - }); - - t.test('faked @@toStringTag', { skip: !hasBigInts || !hasSymbols || !Symbol.toStringTag }, function (st) { - var fakeBigInt = { valueOf: function () { return BigInt(42); } }; - fakeBigInt[Symbol.toStringTag] = 'BigInt'; - st.equal(false, isBigInt(fakeBigInt), 'object with fake BigInt @@toStringTag and valueOf returning a BigInt is not a BigInt'); - - var notSoFakeBigInt = { valueOf: function () { return 42; } }; - notSoFakeBigInt[Symbol.toStringTag] = 'BigInt'; - st.equal(false, isBigInt(notSoFakeBigInt), 'object with fake BigInt @@toStringTag and valueOf not returning a BigInt is not a BigInt'); - st.end(); - }); - - var fakeBigIntString = { toString: function () { return '42n'; } }; - t.equal(false, isBigInt(fakeBigIntString), 'object with toString returning 42n is not a BigInt'); - - t.end(); -}); - -test('BigInt support', { skip: !hasBigInts }, function (t) { - forEach([ - Function('return 42n')(), // eslint-disable-line no-new-func - BigInt(42), - Object(BigInt(42)) - ], function (bigInt) { - t.equal(true, isBigInt(bigInt), debug(bigInt, 'is a BigInt')); - }); - - t.end(); -}); diff --git a/build/node_modules/is-binary-path/index.d.ts b/build/node_modules/is-binary-path/index.d.ts new file mode 100644 index 00000000..19dcd432 --- /dev/null +++ b/build/node_modules/is-binary-path/index.d.ts @@ -0,0 +1,17 @@ +/** +Check if a file path is a binary file. + +@example +``` +import isBinaryPath = require('is-binary-path'); + +isBinaryPath('source/unicorn.png'); +//=> true + +isBinaryPath('source/unicorn.txt'); +//=> false +``` +*/ +declare function isBinaryPath(filePath: string): boolean; + +export = isBinaryPath; diff --git a/build/node_modules/is-binary-path/index.js b/build/node_modules/is-binary-path/index.js new file mode 100644 index 00000000..ef7548c8 --- /dev/null +++ b/build/node_modules/is-binary-path/index.js @@ -0,0 +1,7 @@ +'use strict'; +const path = require('path'); +const binaryExtensions = require('binary-extensions'); + +const extensions = new Set(binaryExtensions); + +module.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase()); diff --git a/build/node_modules/is-binary-path/license b/build/node_modules/is-binary-path/license new file mode 100644 index 00000000..401b1c73 --- /dev/null +++ b/build/node_modules/is-binary-path/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2019 Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-binary-path/package.json b/build/node_modules/is-binary-path/package.json new file mode 100644 index 00000000..9c90dc0a --- /dev/null +++ b/build/node_modules/is-binary-path/package.json @@ -0,0 +1,72 @@ +{ + "_from": "is-binary-path@~2.1.0", + "_id": "is-binary-path@2.1.0", + "_inBundle": false, + "_integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "_location": "/is-binary-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-binary-path@~2.1.0", + "name": "is-binary-path", + "escapedName": "is-binary-path", + "rawSpec": "~2.1.0", + "saveSpec": null, + "fetchSpec": "~2.1.0" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "_shasum": "ea1f7f3b80f064236e83470f86c09c254fb45b09", + "_spec": "is-binary-path@~2.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chokidar", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-binary-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "deprecated": false, + "description": "Check if a file path is a binary file", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/is-binary-path#readme", + "keywords": [ + "binary", + "extensions", + "extension", + "file", + "path", + "check", + "detect", + "is" + ], + "license": "MIT", + "name": "is-binary-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-binary-path.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.1.0" +} diff --git a/build/node_modules/is-binary-path/readme.md b/build/node_modules/is-binary-path/readme.md new file mode 100644 index 00000000..b4ab0251 --- /dev/null +++ b/build/node_modules/is-binary-path/readme.md @@ -0,0 +1,34 @@ +# is-binary-path [![Build Status](https://travis-ci.org/sindresorhus/is-binary-path.svg?branch=master)](https://travis-ci.org/sindresorhus/is-binary-path) + +> Check if a file path is a binary file + + +## Install + +``` +$ npm install is-binary-path +``` + + +## Usage + +```js +const isBinaryPath = require('is-binary-path'); + +isBinaryPath('source/unicorn.png'); +//=> true + +isBinaryPath('source/unicorn.txt'); +//=> false +``` + + +## Related + +- [binary-extensions](https://github.com/sindresorhus/binary-extensions) - List of binary file extensions +- [is-text-path](https://github.com/sindresorhus/is-text-path) - Check if a filepath is a text file + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com), [Paul Miller](https://paulmillr.com) diff --git a/build/node_modules/is-boolean-object/.editorconfig b/build/node_modules/is-boolean-object/.editorconfig deleted file mode 100644 index 8d93cc1d..00000000 --- a/build/node_modules/is-boolean-object/.editorconfig +++ /dev/null @@ -1,22 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[.github/workflows/*.yml] -indent_style = off -indent_size = off -max_line_length = off - -[{CHANGELOG.md,*.json}] -max_line_length = off diff --git a/build/node_modules/is-boolean-object/.eslintignore b/build/node_modules/is-boolean-object/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-boolean-object/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-boolean-object/.eslintrc b/build/node_modules/is-boolean-object/.eslintrc deleted file mode 100644 index a0729161..00000000 --- a/build/node_modules/is-boolean-object/.eslintrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-nested-callbacks": [2, 3] - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "prefer-regex-literals": 0, - }, - }, - { - "files": "test-corejs.js", - "extends": "@ljharb/eslint-config/tests", - }, - ], -} diff --git a/build/node_modules/is-boolean-object/.github/FUNDING.yml b/build/node_modules/is-boolean-object/.github/FUNDING.yml deleted file mode 100644 index fd049965..00000000 --- a/build/node_modules/is-boolean-object/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-boolean-object -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-boolean-object/.nycrc b/build/node_modules/is-boolean-object/.nycrc deleted file mode 100644 index a69aa2d8..00000000 --- a/build/node_modules/is-boolean-object/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test", - "test-corejs.js" - ] -} diff --git a/build/node_modules/is-boolean-object/CHANGELOG.md b/build/node_modules/is-boolean-object/CHANGELOG.md deleted file mode 100644 index 25a891ad..00000000 --- a/build/node_modules/is-boolean-object/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.1.1](https://github.com/inspect-js/is-boolean-object/compare/v1.1.0...v1.1.1) - 2021-05-07 - -### Commits - -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`7201c41`](https://github.com/inspect-js/is-boolean-object/commit/7201c41fc1fd9d64b51716b80fc63d95064a4a59) -- [Tests] run tests with core-js as well [`9590e61`](https://github.com/inspect-js/is-boolean-object/commit/9590e6135505e2e3f69c6d8785a539fca1b1e594) -- [meta] do not publish github action workflow files [`341472b`](https://github.com/inspect-js/is-boolean-object/commit/341472bbe9855030c7eda9340ee4284244f0a4ad) -- [readme] update repo URLs; remove travis badge [`9fdbbc6`](https://github.com/inspect-js/is-boolean-object/commit/9fdbbc64b2a70ee93fcfd95fc6c94c7ec2bbedd4) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1cd35c9`](https://github.com/inspect-js/is-boolean-object/commit/1cd35c9b9b0b4af203f20bda0d7fd60798e57f99) -- [readme] add actions and codecov badges [`03769fe`](https://github.com/inspect-js/is-boolean-object/commit/03769feb1466f03b1345882ca0e4f8cacbbce9ce) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`db6598c`](https://github.com/inspect-js/is-boolean-object/commit/db6598c4cabcd0ffd2ba9b4525b53907f8b2ff1f) -- [Fix] do not use `Object.prototype.toString` when `Symbol.toStringTag` is shammed [`e0b8a9f`](https://github.com/inspect-js/is-boolean-object/commit/e0b8a9f0fc1290a0a29c75967d56bc1c17eb8d2d) -- [readme] remove defunct testling badge [`986a621`](https://github.com/inspect-js/is-boolean-object/commit/986a6217da7385f7063e1d4e4bf5be2892d00c20) -- [meta] use `prepublishOnly` script for npm 7+ [`7bb3b29`](https://github.com/inspect-js/is-boolean-object/commit/7bb3b2902008ca07af4185ca98bc41b3222d579f) -- [Deps] update `call-bind` [`3af6a71`](https://github.com/inspect-js/is-boolean-object/commit/3af6a71e1004c79567630ac9944b9f2cc184ac77) -- [meta] do not publish corejs test file [`d911f03`](https://github.com/inspect-js/is-boolean-object/commit/d911f0368b6922645d15b9e28f3ed92e1badcef4) -- [actions] update workflows [`9bb3d90`](https://github.com/inspect-js/is-boolean-object/commit/9bb3d9015f377280324b162a3062d21936707216) - -## [v1.1.0](https://github.com/inspect-js/is-boolean-object/compare/v1.0.1...v1.1.0) - 2020-12-05 - -### Commits - -- [Tests] migrate tests to Github Actions [`6cdb652`](https://github.com/inspect-js/is-boolean-object/commit/6cdb652add3c6e44c2f7fe07c5ca4c0d14ddc2c1) -- [Tests] run `nyc` on all tests [`9a33076`](https://github.com/inspect-js/is-boolean-object/commit/9a33076d14869bf5120a6ca3903bcb9a008cf2e5) -- [Tests] add .editorconfig [`bb401c0`](https://github.com/inspect-js/is-boolean-object/commit/bb401c084416b010d64e0c5a74465b37addab31f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`5cb2405`](https://github.com/inspect-js/is-boolean-object/commit/5cb24052ca84d840e929f05cd1fe6c03b85ec032) -- [Robustness] use `call-bind` to avoid a dependency on `.call` [`76d87ae`](https://github.com/inspect-js/is-boolean-object/commit/76d87ae74235a9995d39bcf5783c04c744c34520) -- [actions] add "Allow Edits" workflow [`337206a`](https://github.com/inspect-js/is-boolean-object/commit/337206af74bd7c340bc938ab6dc0535c08490b3d) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`11f0481`](https://github.com/inspect-js/is-boolean-object/commit/11f0481efca28a241a35d384e2a302b1bcdc9a37) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`b9602c8`](https://github.com/inspect-js/is-boolean-object/commit/b9602c8ca11be138722187c1fb0a5b25a57a4edc) -- [Dev Deps] update `auto-changelog`, `tape`; add `aud` [`999e9e2`](https://github.com/inspect-js/is-boolean-object/commit/999e9e224d4eec8b20fc9c3431e9ba42caad79c9) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`bbb6728`](https://github.com/inspect-js/is-boolean-object/commit/bbb6728b9410f9d3e2d266523a477127e5e4c16f) - -## [v1.0.1](https://github.com/inspect-js/is-boolean-object/compare/v1.0.0...v1.0.1) - 2019-12-18 - -### Commits - -- [Tests] use shared travis-ci configs [`a1778b8`](https://github.com/inspect-js/is-boolean-object/commit/a1778b81ab4fe4479176de854e4e233cc441f183) -- Update `eslint`; use my personal shared `eslint` config. [`2c42c50`](https://github.com/inspect-js/is-boolean-object/commit/2c42c50a0654044b6c7e2a4ab18227e8c275464b) -- [Tests] remove `jscs` [`3807025`](https://github.com/inspect-js/is-boolean-object/commit/380702504fabc47fe22f61c4847379023d31a657) -- [Tests] up to `node` `v8.4`, `v7.10`, `v6.11`, `v5.12`, `v4.8`; improve matrix; newer npm breaks in older node; improve scripts. [`a02b986`](https://github.com/inspect-js/is-boolean-object/commit/a02b98682b285de09e2c5a895627771d6a7f552c) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is`, `jscs`, `nsp`, `semver`, `tape` [`d9030a9`](https://github.com/inspect-js/is-boolean-object/commit/d9030a99b8e274c76ae5f23f31d9d085a7e25272) -- Update `eslint`, `nsp` [`a1b6388`](https://github.com/inspect-js/is-boolean-object/commit/a1b6388fabd0de51a02c567953826344ef05890c) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9`; use `nvm install-latest-npm` [`17a0fd3`](https://github.com/inspect-js/is-boolean-object/commit/17a0fd391e32635ec3434baca0d062f8abeeb592) -- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`0b1818f`](https://github.com/inspect-js/is-boolean-object/commit/0b1818fdcaebc6133e515dfe3b5a8930b38999b5) -- [meta] remove unused Makefile and associated utilities [`33dc0ae`](https://github.com/inspect-js/is-boolean-object/commit/33dc0ae35a03e91f81b1bb3db5ba763dacadbfa2) -- Update `covert`, `jscs`, `eslint`, `semver` [`7e513c1`](https://github.com/inspect-js/is-boolean-object/commit/7e513c12998a651c14f62b3ecfb7215a5cc5ee8f) -- [Tests] up to `node` `v11.4`, `v10.14`, `v8.14`, `v6.15` [`992b849`](https://github.com/inspect-js/is-boolean-object/commit/992b84933760e0fe6ba2cee74ad7fff507f28128) -- [meta] add `auto-changelog` [`63d71b8`](https://github.com/inspect-js/is-boolean-object/commit/63d71b8beb9aeb77cab3d2db2cf643f1b8b1a55c) -- Update `tape`, `eslint`, `semver` [`76aea69`](https://github.com/inspect-js/is-boolean-object/commit/76aea699fb315ac460799182d707c388b4a4e017) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`a6cbec0`](https://github.com/inspect-js/is-boolean-object/commit/a6cbec09940b6f2c7cf366526a94c0c4756508f5) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape`; add `safe-publish-latest` [`7cf6bb0`](https://github.com/inspect-js/is-boolean-object/commit/7cf6bb05ba7bac504df680dd9ca625fba6dccb5a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` [`57d713c`](https://github.com/inspect-js/is-boolean-object/commit/57d713cca2ccbbbf1da1142ee5e8236d12551f76) -- [actions] add automatic rebasing / merge commit blocking [`f7a2bdb`](https://github.com/inspect-js/is-boolean-object/commit/f7a2bdb905e07d75c65593359f81bfeda9fe9826) -- [meta] create FUNDING.yml [`9765e73`](https://github.com/inspect-js/is-boolean-object/commit/9765e738cccdd5ff6c89b21324119a2bf4064fbd) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is`, `replace`, `semver`, `tape` [`5c16b56`](https://github.com/inspect-js/is-boolean-object/commit/5c16b56a5a2d36c6a70c1bd396b3a6c931f655db) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`5717aad`](https://github.com/inspect-js/is-boolean-object/commit/5717aadd8b0e8c76ccb194d1845ad8cc120f29c6) -- [Dev Deps] update `is`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`80b924d`](https://github.com/inspect-js/is-boolean-object/commit/80b924dd270188e1e928f4141078bee14d810e9b) -- [Dev Deps] update `jscs` [`2e5479e`](https://github.com/inspect-js/is-boolean-object/commit/2e5479e56b6d33288582cfe8c254ca081e79500c) -- Test up to `io.js` `v2.2` [`93379a4`](https://github.com/inspect-js/is-boolean-object/commit/93379a4b48ba719113006ab08bbe6679c8a27293) -- [Tests] remove `nsp`; use `npm audit`; allow to fail for now [`36ae30a`](https://github.com/inspect-js/is-boolean-object/commit/36ae30acffe4a892ea0882a793b8a90f09d08fdf) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`ef76976`](https://github.com/inspect-js/is-boolean-object/commit/ef76976db22f2867fca2ee377fdbc9da81f0d142) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`a1182bd`](https://github.com/inspect-js/is-boolean-object/commit/a1182bd99e5d31e113107241f0d697e71b27bf7b) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`4f79b47`](https://github.com/inspect-js/is-boolean-object/commit/4f79b474f0643fd2c9dbc863949a61cf01255b6f) -- [Tests] up to `node` `v10.3` [`5e96464`](https://github.com/inspect-js/is-boolean-object/commit/5e96464fc08eacc45f5f58fe7800ddbc45e40cea) -- [Dev Deps] update `eslint`, `nsp`, `semver`, `tape` [`e1eb3fa`](https://github.com/inspect-js/is-boolean-object/commit/e1eb3fad8bad65140db3bd2381bb3bea6a9c6242) -- Only apps should have lockfiles. [`c7f301f`](https://github.com/inspect-js/is-boolean-object/commit/c7f301ff368f9e04f7f64a2ce9b6ae1aec803e69) -- [meta] add `funding` field [`fad0366`](https://github.com/inspect-js/is-boolean-object/commit/fad03662becea5db7cef29d816d173ad771be86a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`80d39d9`](https://github.com/inspect-js/is-boolean-object/commit/80d39d90205d3bb564acb80b0625e90c267347fd) -- [Tests] use `eclint` instead of `editorconfig-tools` [`980e91b`](https://github.com/inspect-js/is-boolean-object/commit/980e91b186a728f77366ba16b7bebc813b9cc3b0) -- [Dev Deps] Update `tape`, `eslint` [`9960830`](https://github.com/inspect-js/is-boolean-object/commit/9960830876a3672686c569fde3d43bb7983955f1) -- Test up to `io.js` `v3.0` [`a3c3cd0`](https://github.com/inspect-js/is-boolean-object/commit/a3c3cd087d7fcefbf4f3525c05f4cee3b6e5b0ef) -- [Dev Deps] update `tape` [`217fbd6`](https://github.com/inspect-js/is-boolean-object/commit/217fbd6bb2989f9304ad95cd49697da7fe03b8d5) -- [Tests] only audit prod deps [`89284ee`](https://github.com/inspect-js/is-boolean-object/commit/89284ee17dce1d044df0ca9e006072f25742bbaf) -- [Performance] only use toStringTag code path when the value has that property [`2863bc5`](https://github.com/inspect-js/is-boolean-object/commit/2863bc5b72680f05ace8e66fddcf48966b942d55) -- [Dev Deps] update `replace` [`53e72a5`](https://github.com/inspect-js/is-boolean-object/commit/53e72a5ceca5b3a82e6407829f9227df9df6d329) -- [Enhancement] slight optimization for `null` [`a90a3c4`](https://github.com/inspect-js/is-boolean-object/commit/a90a3c4464d0300e23384d96fb4281b55b7fd723) -- [Dev Deps] update `tape` [`9377bd5`](https://github.com/inspect-js/is-boolean-object/commit/9377bd5110e99d8ec550f24ef3f6ead62a8f1f50) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`3085530`](https://github.com/inspect-js/is-boolean-object/commit/30855304841854f79e406372f524efe4bc7d8c04) -- Test on `io.js` `v2.4` [`8af335c`](https://github.com/inspect-js/is-boolean-object/commit/8af335ca82a0eeba4a0a593775e4caf744834ec4) -- Test on `io.js` `v2.3` [`1eb3424`](https://github.com/inspect-js/is-boolean-object/commit/1eb3424bef528551f5c99a754281a51d92e40ab1) - -## v1.0.0 - 2015-04-28 - -### Commits - -- Dotfiles [`6b9b998`](https://github.com/inspect-js/is-boolean-object/commit/6b9b998bb238a32d4829c9f9bf274e5ca15023ee) -- `make release` [`d5e50b3`](https://github.com/inspect-js/is-boolean-object/commit/d5e50b33a3cd8d8abe7de8ae36e2944c24ce76ba) -- package.json [`117676a`](https://github.com/inspect-js/is-boolean-object/commit/117676a48609e636d4257c1b35c695ff20939211) -- Read me [`ef327a7`](https://github.com/inspect-js/is-boolean-object/commit/ef327a74c7f73e64cfa3c20a9620ef7accf8b762) -- Initial commit [`2346886`](https://github.com/inspect-js/is-boolean-object/commit/2346886252b9637c1af6851a3fc2cbc98bc986aa) -- Tests [`67211f8`](https://github.com/inspect-js/is-boolean-object/commit/67211f8bff1a49e5df219935765b83573c097353) -- Implementation [`2d88bd6`](https://github.com/inspect-js/is-boolean-object/commit/2d88bd6e1ef0f07f5a639775eb89f3b78e12eb65) diff --git a/build/node_modules/is-boolean-object/LICENSE b/build/node_modules/is-boolean-object/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-boolean-object/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-boolean-object/README.md b/build/node_modules/is-boolean-object/README.md deleted file mode 100644 index a77f3e9d..00000000 --- a/build/node_modules/is-boolean-object/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# is-boolean-object [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS Boolean? This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isBoolean = require('is-boolean-object'); -var assert = require('assert'); - -assert.notOk(isBoolean(undefined)); -assert.notOk(isBoolean(null)); -assert.notOk(isBoolean('foo')); -assert.notOk(isBoolean(function () {})); -assert.notOk(isBoolean([])); -assert.notOk(isBoolean({})); -assert.notOk(isBoolean(/a/g)); -assert.notOk(isBoolean(new RegExp('a', 'g'))); -assert.notOk(isBoolean(new Date())); -assert.notOk(isBoolean(42)); -assert.notOk(isBoolean(NaN)); -assert.notOk(isBoolean(Infinity)); - -assert.ok(isBoolean(new Boolean(42))); -assert.ok(isBoolean(false)); -assert.ok(isBoolean(Object(false))); -assert.ok(isBoolean(true)); -assert.ok(isBoolean(Object(true))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-boolean-object -[2]: https://versionbadg.es/inspect-js/is-boolean-object.svg -[5]: https://david-dm.org/inspect-js/is-boolean-object.svg -[6]: https://david-dm.org/inspect-js/is-boolean-object -[7]: https://david-dm.org/inspect-js/is-boolean-object/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-boolean-object#info=devDependencies -[11]: https://nodei.co/npm/is-boolean-object.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-boolean-object.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-boolean-object.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-boolean-object -[codecov-image]: https://codecov.io/gh/inspect-js/is-boolean-object/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-boolean-object/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-boolean-object -[actions-url]: https://github.com/inspect-js/is-boolean-object/actions diff --git a/build/node_modules/is-boolean-object/index.js b/build/node_modules/is-boolean-object/index.js deleted file mode 100644 index 0cd8e777..00000000 --- a/build/node_modules/is-boolean-object/index.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $boolToStr = callBound('Boolean.prototype.toString'); -var $toString = callBound('Object.prototype.toString'); - -var tryBooleanObject = function booleanBrandCheck(value) { - try { - $boolToStr(value); - return true; - } catch (e) { - return false; - } -}; -var boolClass = '[object Boolean]'; -var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; - -module.exports = function isBoolean(value) { - if (typeof value === 'boolean') { - return true; - } - if (value === null || typeof value !== 'object') { - return false; - } - return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass; -}; diff --git a/build/node_modules/is-boolean-object/package.json b/build/node_modules/is-boolean-object/package.json deleted file mode 100644 index 954886bd..00000000 --- a/build/node_modules/is-boolean-object/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_from": "is-boolean-object@^1.1.0", - "_id": "is-boolean-object@1.1.1", - "_inBundle": false, - "_integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "_location": "/is-boolean-object", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-boolean-object@^1.1.0", - "name": "is-boolean-object", - "escapedName": "is-boolean-object", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/which-boxed-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "_shasum": "3c0878f035cb821228d350d2e1e36719716a3de8", - "_spec": "is-boolean-object@^1.1.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/which-boxed-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-boolean-object/issues" - }, - "bundleDependencies": false, - "dependencies": { - "call-bind": "^1.0.2" - }, - "deprecated": false, - "description": "Is this value a JS Boolean? This module works cross-realm/iframe, and despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^3.12.0", - "eclint": "^2.8.1", - "eslint": "^7.25.0", - "foreach": "^2.0.5", - "indexof": "^0.0.1", - "is": "^3.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-boolean-object#readme", - "keywords": [ - "Boolean", - "ES6", - "toStringTag", - "@@toStringTag", - "Boolean object", - "true", - "false", - "is-boolean" - ], - "license": "MIT", - "main": "index.js", - "name": "is-boolean-object", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-boolean-object.git" - }, - "scripts": { - "eccheck": "eclint check $(git ls-files)", - "lint": "eslint --ext=js,mjs .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prelint": "npm run eccheck", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only && npm run test:harmony && npm run test:corejs", - "test:corejs": "nyc tape test-corejs.js", - "test:harmony": "node --harmony --es-staging test", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.1" -} diff --git a/build/node_modules/is-boolean-object/test/index.js b/build/node_modules/is-boolean-object/test/index.js deleted file mode 100644 index 9ca4b34e..00000000 --- a/build/node_modules/is-boolean-object/test/index.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isBoolean = require('../'); -var hasSymbols = require('has-symbols/shams')(); - -test('not Booleans', function (t) { - t.test('primitives', function (st) { - st.notOk(isBoolean(), 'undefined is not Boolean'); - st.notOk(isBoolean(null), 'null is not Boolean'); - st.notOk(isBoolean(0), '0 is not Boolean'); - st.notOk(isBoolean(NaN), 'NaN is not Boolean'); - st.notOk(isBoolean(Infinity), 'Infinity is not Boolean'); - st.notOk(isBoolean('foo'), 'string is not Boolean'); - st.end(); - }); - - t.test('objects', function (st) { - st.notOk(isBoolean(Object(42)), 'number object is not Boolean'); - st.notOk(isBoolean([]), 'array is not Boolean'); - st.notOk(isBoolean({}), 'object is not Boolean'); - st.notOk(isBoolean(function () {}), 'function is not Boolean'); - st.notOk(isBoolean(/a/g), 'regex literal is not Boolean'); - st.notOk(isBoolean(new RegExp('a', 'g')), 'regex object is not Boolean'); - st.notOk(isBoolean(new Date()), 'new Date() is not Boolean'); - st.end(); - }); - - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var fakeBoolean = { - toString: function () { return 'true'; }, - valueOf: function () { return true; } - }; - fakeBoolean[Symbol.toStringTag] = 'Boolean'; - t.notOk(isBoolean(fakeBoolean), 'fake Boolean with @@toStringTag "Boolean" is not Boolean'); - t.end(); -}); - -test('Booleans', function (t) { - t.ok(isBoolean(true), 'true is Boolean'); - t.ok(isBoolean(false), 'false is Boolean'); - t.ok(isBoolean(Object(true)), 'Object(true) is Boolean'); - t.ok(isBoolean(Object(false)), 'Object(false) is Boolean'); - t.end(); -}); diff --git a/build/node_modules/is-callable/.editorconfig b/build/node_modules/is-callable/.editorconfig deleted file mode 100644 index 46236311..00000000 --- a/build/node_modules/is-callable/.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 -max_line_length = off - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-callable/.eslintignore b/build/node_modules/is-callable/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-callable/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-callable/.eslintrc b/build/node_modules/is-callable/.eslintrc deleted file mode 100644 index 631b8f36..00000000 --- a/build/node_modules/is-callable/.eslintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "id-length": 0, - "max-statements": [2, 14], - "max-statements-per-line": [2, { "max": 2 }], - "operator-linebreak": [2, "before"], - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "no-throw-literal": 0, - }, - }, - ], -} diff --git a/build/node_modules/is-callable/.github/FUNDING.yml b/build/node_modules/is-callable/.github/FUNDING.yml deleted file mode 100644 index 0fdebd06..00000000 --- a/build/node_modules/is-callable/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-callable -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-callable/.github/main.workflow b/build/node_modules/is-callable/.github/main.workflow deleted file mode 100644 index 04944811..00000000 --- a/build/node_modules/is-callable/.github/main.workflow +++ /dev/null @@ -1,14 +0,0 @@ -workflow "Autorebase branch on merge commits" { - on = "push" - resolves = ["rebase"] -} - -workflow "Autorebase PR on merge commits" { - on = "pull_request" - resolves = ["rebase"] -} - - action "rebase" { - uses = "ljharb/rebase@latest" - secrets = ["GITHUB_TOKEN"] -} diff --git a/build/node_modules/is-callable/.istanbul.yml b/build/node_modules/is-callable/.istanbul.yml deleted file mode 100644 index 9affe0bc..00000000 --- a/build/node_modules/is-callable/.istanbul.yml +++ /dev/null @@ -1,47 +0,0 @@ -verbose: false -instrumentation: - root: . - extensions: - - .js - - .jsx - default-excludes: true - excludes: [] - variable: __coverage__ - compact: true - preserve-comments: false - complete-copy: false - save-baseline: false - baseline-file: ./coverage/coverage-baseline.raw.json - include-all-sources: false - include-pid: false - es-modules: false - auto-wrap: false -reporting: - print: summary - reports: - - html - dir: ./coverage - summarizer: pkg - report-config: {} - watermarks: - statements: [50, 80] - functions: [50, 80] - branches: [50, 80] - lines: [50, 80] -hooks: - hook-run-in-context: false - post-require-hook: null - handle-sigint: false -check: - global: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] - each: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] diff --git a/build/node_modules/is-callable/.nycrc b/build/node_modules/is-callable/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/is-callable/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-callable/CHANGELOG.md b/build/node_modules/is-callable/CHANGELOG.md deleted file mode 100644 index 6b88f5b7..00000000 --- a/build/node_modules/is-callable/CHANGELOG.md +++ /dev/null @@ -1,94 +0,0 @@ -1.2.3 / 2021-01-31 -================= - * [Fix] `document.all` is callable (do not use `document.all`!) - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` - * [Tests] migrate tests to Github Actions - * [actions] add "Allow Edits" workflow - * [actions] switch Automatic Rebase workflow to `pull_request_target` event - -1.2.2 / 2020-09-21 -================= - * [Fix] include actual fix from 579179e - * [Dev Deps] update `eslint` - -1.2.1 / 2020-09-09 -================= - * [Fix] phantomjs‘ Reflect.apply does not throw properly on a bad array-like - * [Dev Deps] update `eslint`, `@ljharb/eslint-config` - * [meta] fix eclint error - -1.2.0 / 2020-06-02 -================= - * [New] use `Reflect.apply`‑based callability detection - * [readme] add install instructions (#55) - * [meta] only run `aud` on prod deps - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `make-arrow-function`, `make-generator-function`; add `aud`, `safe-publish-latest`, `make-async-function` - * [Tests] add tests for function proxies (#53, #25) - -1.1.5 / 2019-12-18 -================= - * [meta] remove unused Makefile and associated utilities - * [meta] add `funding` field; add FUNDING.yml - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `semver`, `tape`, `covert`, `rimraf` - * [Tests] use shared travis configs - * [Tests] use `eccheck` over `editorconfig-tools` - * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops - * [Tests] remove `jscs` - * [actions] add automatic rebasing / merge commit blocking - -1.1.4 / 2018-07-02 -================= - * [Fix] improve `class` and arrow function detection (#30, #31) - * [Tests] on all latest node minors; improve matrix - * [Dev Deps] update all dev deps - -1.1.3 / 2016-02-27 -================= - * [Fix] ensure “class “ doesn’t screw up “class” detection - * [Tests] up to `node` `v5.7`, `v4.3` - * [Dev Deps] update to `eslint` v2, `@ljharb/eslint-config`, `jscs` - -1.1.2 / 2016-01-15 -================= - * [Fix] Make sure comments don’t screw up “class” detection (#4) - * [Tests] up to `node` `v5.3` - * [Tests] Add `parallelshell`, run both `--es-staging` and stock tests at once - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` - * [Refactor] convert `isNonES6ClassFn` into `isES6ClassFn` - -1.1.1 / 2015-11-30 -================= - * [Fix] do not throw when a non-function has a function in its [[Prototype]] (#2) - * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `semver` - * [Tests] up to `node` `v5.1` - * [Tests] no longer allow node 0.8 to fail. - * [Tests] fix npm upgrades in older nodes - -1.1.0 / 2015-10-02 -================= - * [Fix] Some browsers report TypedArray constructors as `typeof object` - * [New] return false for "class" constructors, when possible. - * [Tests] up to `io.js` `v3.3`, `node` `v4.1` - * [Dev Deps] update `eslint`, `editorconfig-tools`, `nsp`, `tape`, `semver`, `jscs`, `covert`, `make-arrow-function` - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - -1.0.4 / 2015-01-30 -================= - * If @@toStringTag is not present, use the old-school Object#toString test. - -1.0.3 / 2015-01-29 -================= - * Add tests to ensure arrow functions are callable. - * Refactor to aid optimization of non-try/catch code. - -1.0.2 / 2015-01-29 -================= - * Fix broken package.json - -1.0.1 / 2015-01-29 -================= - * Add early exit for typeof not "function" - -1.0.0 / 2015-01-29 -================= - * Initial release. diff --git a/build/node_modules/is-callable/LICENSE b/build/node_modules/is-callable/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-callable/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-callable/README.md b/build/node_modules/is-callable/README.md deleted file mode 100644 index b5c965c4..00000000 --- a/build/node_modules/is-callable/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# is-callable [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -[![browser support][9]][10] - -Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag. - -## Example - -```js -var isCallable = require('is-callable'); -var assert = require('assert'); - -assert.notOk(isCallable(undefined)); -assert.notOk(isCallable(null)); -assert.notOk(isCallable(false)); -assert.notOk(isCallable(true)); -assert.notOk(isCallable([])); -assert.notOk(isCallable({})); -assert.notOk(isCallable(/a/g)); -assert.notOk(isCallable(new RegExp('a', 'g'))); -assert.notOk(isCallable(new Date())); -assert.notOk(isCallable(42)); -assert.notOk(isCallable(NaN)); -assert.notOk(isCallable(Infinity)); -assert.notOk(isCallable(new Number(42))); -assert.notOk(isCallable('foo')); -assert.notOk(isCallable(Object('foo'))); - -assert.ok(isCallable(function () {})); -assert.ok(isCallable(function* () {})); -assert.ok(isCallable(x => x * x)); -``` - -## Install - -Install with - -``` -npm install is-callable -``` - -## Tests - -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-callable -[2]: http://versionbadg.es/ljharb/is-callable.svg -[3]: https://travis-ci.org/ljharb/is-callable.svg -[4]: https://travis-ci.org/ljharb/is-callable -[5]: https://david-dm.org/ljharb/is-callable.svg -[6]: https://david-dm.org/ljharb/is-callable -[7]: https://david-dm.org/ljharb/is-callable/dev-status.svg -[8]: https://david-dm.org/ljharb/is-callable#info=devDependencies -[9]: https://ci.testling.com/ljharb/is-callable.png -[10]: https://ci.testling.com/ljharb/is-callable -[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-callable.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-callable.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-callable diff --git a/build/node_modules/is-callable/index.js b/build/node_modules/is-callable/index.js deleted file mode 100644 index f36d71db..00000000 --- a/build/node_modules/is-callable/index.js +++ /dev/null @@ -1,74 +0,0 @@ -'use strict'; - -var fnToStr = Function.prototype.toString; -var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; -var badArrayLike; -var isCallableMarker; -if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { - try { - badArrayLike = Object.defineProperty({}, 'length', { - get: function () { - throw isCallableMarker; - } - }); - isCallableMarker = {}; - // eslint-disable-next-line no-throw-literal - reflectApply(function () { throw 42; }, null, badArrayLike); - } catch (_) { - if (_ !== isCallableMarker) { - reflectApply = null; - } - } -} else { - reflectApply = null; -} - -var constructorRegex = /^\s*class\b/; -var isES6ClassFn = function isES6ClassFunction(value) { - try { - var fnStr = fnToStr.call(value); - return constructorRegex.test(fnStr); - } catch (e) { - return false; // not a function - } -}; - -var tryFunctionObject = function tryFunctionToStr(value) { - try { - if (isES6ClassFn(value)) { return false; } - fnToStr.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var fnClass = '[object Function]'; -var genClass = '[object GeneratorFunction]'; -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; -/* globals document: false */ -var documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {}; - -module.exports = reflectApply - ? function isCallable(value) { - if (value === documentDotAll) { return true; } - if (!value) { return false; } - if (typeof value !== 'function' && typeof value !== 'object') { return false; } - if (typeof value === 'function' && !value.prototype) { return true; } - try { - reflectApply(value, null, badArrayLike); - } catch (e) { - if (e !== isCallableMarker) { return false; } - } - return !isES6ClassFn(value); - } - : function isCallable(value) { - if (value === documentDotAll) { return true; } - if (!value) { return false; } - if (typeof value !== 'function' && typeof value !== 'object') { return false; } - if (typeof value === 'function' && !value.prototype) { return true; } - if (hasToStringTag) { return tryFunctionObject(value); } - if (isES6ClassFn(value)) { return false; } - var strClass = toStr.call(value); - return strClass === fnClass || strClass === genClass; - }; diff --git a/build/node_modules/is-callable/package.json b/build/node_modules/is-callable/package.json deleted file mode 100644 index d0c7f33e..00000000 --- a/build/node_modules/is-callable/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "_from": "is-callable@^1.2.3", - "_id": "is-callable@1.2.3", - "_inBundle": false, - "_integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "_location": "/is-callable", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-callable@^1.2.3", - "name": "is-callable", - "escapedName": "is-callable", - "rawSpec": "^1.2.3", - "saveSpec": null, - "fetchSpec": "^1.2.3" - }, - "_requiredBy": [ - "/es-abstract", - "/es-to-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "_shasum": "8b1e0500b73a1d76c70487636f368e519de8db8e", - "_spec": "is-callable@^1.2.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/ljharb/is-callable/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.5.0", - "aud": "^1.1.3", - "covert": "^1.1.1", - "eclint": "^2.8.1", - "eslint": "^7.19.0", - "foreach": "^2.0.5", - "istanbul": "1.1.0-alpha.1", - "istanbul-merge": "^1.1.1", - "make-arrow-function": "^1.2.0", - "make-async-function": "^1.0.0", - "make-generator-function": "^2.0.0", - "rimraf": "^2.7.1", - "safe-publish-latest": "^1.1.4", - "tape": "^5.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "greenkeeper": { - "ignore": [ - "rimraf" - ] - }, - "homepage": "https://github.com/ljharb/is-callable#readme", - "keywords": [ - "Function", - "function", - "callable", - "generator", - "generator function", - "arrow", - "arrow function", - "ES6", - "toStringTag", - "@@toStringTag" - ], - "license": "MIT", - "main": "index.js", - "name": "is-callable", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-callable.git" - }, - "scripts": { - "coverage": "npm run --silent istanbul", - "covert": "covert test", - "covert:quiet": "covert test --quiet", - "istanbul": "npm run --silent istanbul:clean && npm run --silent istanbul:std && npm run --silent istanbul:harmony && npm run --silent istanbul:merge && istanbul check", - "istanbul:clean": "rimraf coverage coverage-std coverage-harmony", - "istanbul:harmony": "node --harmony ./node_modules/istanbul/lib/cli.js cover test --dir coverage-harmony", - "istanbul:merge": "istanbul-merge --out coverage/coverage.raw.json coverage-harmony/coverage.raw.json coverage-std/coverage.raw.json && istanbul report html", - "istanbul:std": "istanbul cover test --report html --dir coverage-std", - "lint": "eslint .", - "posttest": "npx aud --production", - "prelint": "eclint check *", - "prepublish": "safe-publish-latest", - "pretest": "npm run --silent lint", - "test": "npm run --silent tests-only", - "test:staging": "node --es-staging test", - "test:stock": "node test", - "tests-only": "npm run --silent test:stock && npm run --silent test:staging" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.2.3" -} diff --git a/build/node_modules/is-callable/test/index.js b/build/node_modules/is-callable/test/index.js deleted file mode 100644 index 2eacb0ee..00000000 --- a/build/node_modules/is-callable/test/index.js +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -/* globals Proxy */ -/* eslint no-magic-numbers: 1 */ - -var test = require('tape'); -var isCallable = require('../'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; -var generators = require('make-generator-function')(); -var arrows = require('make-arrow-function').list(); -var asyncs = require('make-async-function').list(); -var weirdlyCommentedArrowFn; -try { - /* eslint-disable no-new-func */ - weirdlyCommentedArrowFn = Function('return cl/*/**/=>/**/ass - 1;')(); - /* eslint-enable no-new-func */ -} catch (e) { /**/ } -var forEach = require('foreach'); - -var noop = function () {}; -var classFake = function classFake() { }; // eslint-disable-line func-name-matching -var returnClass = function () { return ' class '; }; -var return3 = function () { return 3; }; -/* for coverage */ -noop(); -classFake(); -returnClass(); -return3(); -/* end for coverage */ - -var proxy; -if (typeof Proxy === 'function') { - try { - proxy = new Proxy(function () {}, {}); - // for coverage - proxy(); - String(proxy); - } catch (_) { - // If `Reflect` is supported, then `Function.prototype.toString` isn't used for callability detection. - if (typeof Reflect !== 'object') { - // Older engines throw a `TypeError` when `Function.prototype.toString` is called on a Proxy object. - proxy = null; - } - } -} - -var invokeFunction = function invokeFunctionString(str) { - var result; - try { - /* eslint-disable no-new-func */ - var fn = Function(str); - /* eslint-enable no-new-func */ - result = fn(); - } catch (e) {} - return result; -}; - -var classConstructor = invokeFunction('"use strict"; return class Foo {}'); - -var commentedClass = invokeFunction('"use strict"; return class/*kkk*/\n//blah\n Bar\n//blah\n {}'); -var commentedClassOneLine = invokeFunction('"use strict"; return class/**/A{}'); -var classAnonymous = invokeFunction('"use strict"; return class{}'); -var classAnonymousCommentedOneLine = invokeFunction('"use strict"; return class/*/*/{}'); - -test('not callables', function (t) { - t.test('non-number/string primitives', function (st) { - st.notOk(isCallable(), 'undefined is not callable'); - st.notOk(isCallable(null), 'null is not callable'); - st.notOk(isCallable(false), 'false is not callable'); - st.notOk(isCallable(true), 'true is not callable'); - st.end(); - }); - - t.notOk(isCallable([]), 'array is not callable'); - t.notOk(isCallable({}), 'object is not callable'); - t.notOk(isCallable(/a/g), 'regex literal is not callable'); - t.notOk(isCallable(new RegExp('a', 'g')), 'regex object is not callable'); - t.notOk(isCallable(new Date()), 'new Date() is not callable'); - - t.test('numbers', function (st) { - st.notOk(isCallable(42), 'number is not callable'); - st.notOk(isCallable(Object(42)), 'number object is not callable'); - st.notOk(isCallable(NaN), 'NaN is not callable'); - st.notOk(isCallable(Infinity), 'Infinity is not callable'); - st.end(); - }); - - t.test('strings', function (st) { - st.notOk(isCallable('foo'), 'string primitive is not callable'); - st.notOk(isCallable(Object('foo')), 'string object is not callable'); - st.end(); - }); - - t.test('non-function with function in its [[Prototype]] chain', function (st) { - var Foo = function Bar() {}; - Foo.prototype = noop; - st.equal(true, isCallable(Foo), 'sanity check: Foo is callable'); - st.equal(false, isCallable(new Foo()), 'instance of Foo is not callable'); - st.end(); - }); - - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var fakeFunction = { - toString: function () { return String(return3); }, - valueOf: return3 - }; - fakeFunction[Symbol.toStringTag] = 'Function'; - t.equal(String(fakeFunction), String(return3)); - t.equal(Number(fakeFunction), return3()); - t.notOk(isCallable(fakeFunction), 'fake Function with @@toStringTag "Function" is not callable'); - t.end(); -}); - -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array' -]; - -test('Functions', function (t) { - t.ok(isCallable(noop), 'function is callable'); - t.ok(isCallable(classFake), 'function with name containing "class" is callable'); - t.ok(isCallable(returnClass), 'function with string " class " is callable'); - t.ok(isCallable(isCallable), 'isCallable is callable'); - t.end(); -}); - -test('Typed Arrays', function (st) { - forEach(typedArrayNames, function (typedArray) { - /* istanbul ignore if : covered in node 0.6 */ - if (typeof global[typedArray] === 'undefined') { - st.comment('# SKIP typed array "' + typedArray + '" not supported'); - } else { - st.ok(isCallable(global[typedArray]), typedArray + ' is callable'); - } - }); - st.end(); -}); - -test('Generators', { skip: generators.length === 0 }, function (t) { - forEach(generators, function (genFn) { - t.ok(isCallable(genFn), 'generator function ' + genFn + ' is callable'); - }); - t.end(); -}); - -test('Arrow functions', { skip: arrows.length === 0 }, function (t) { - forEach(arrows, function (arrowFn) { - t.ok(isCallable(arrowFn), 'arrow function ' + arrowFn + ' is callable'); - }); - t.ok(isCallable(weirdlyCommentedArrowFn), 'weirdly commented arrow functions are callable'); - t.end(); -}); - -test('"Class" constructors', { skip: !classConstructor || !commentedClass || !commentedClassOneLine || !classAnonymous }, function (t) { - t.notOk(isCallable(classConstructor), 'class constructors are not callable'); - t.notOk(isCallable(commentedClass), 'class constructors with comments in the signature are not callable'); - t.notOk(isCallable(commentedClassOneLine), 'one-line class constructors with comments in the signature are not callable'); - t.notOk(isCallable(classAnonymous), 'anonymous class constructors are not callable'); - t.notOk(isCallable(classAnonymousCommentedOneLine), 'anonymous one-line class constructors with comments in the signature are not callable'); - t.end(); -}); - -test('`async function`s', { skip: asyncs.length === 0 }, function (t) { - forEach(asyncs, function (asyncFn) { - t.ok(isCallable(asyncFn), '`async function` ' + asyncFn + ' is callable'); - }); - t.end(); -}); - -test('proxies of functions', { skip: !proxy }, function (t) { - t.ok(isCallable(proxy), 'proxies of functions are callable'); - t.end(); -}); - -test('throwing functions', function (t) { - t.plan(1); - - var thrower = function (a) { return a.b; }; - t.ok(isCallable(thrower), 'a function that throws is callable'); -}); - -/* globals document: false */ -test('document.all', { skip: typeof document !== 'object' }, function (t) { - t.notOk(isCallable(document), 'document is not callable'); - t.ok(isCallable(document.all), 'document.all is callable'); - - t.end(); -}); diff --git a/build/node_modules/is-core-module/.eslintignore b/build/node_modules/is-core-module/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-core-module/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-core-module/.eslintrc b/build/node_modules/is-core-module/.eslintrc index 9c7d5168..05b25c85 100644 --- a/build/node_modules/is-core-module/.eslintrc +++ b/build/node_modules/is-core-module/.eslintrc @@ -3,7 +3,6 @@ "root": true, "rules": { "func-style": 1, - "operator-linebreak": [2, "before"], }, "overrides": [ { diff --git a/build/node_modules/is-core-module/CHANGELOG.md b/build/node_modules/is-core-module/CHANGELOG.md index f2148ddd..f4f1674a 100644 --- a/build/node_modules/is-core-module/CHANGELOG.md +++ b/build/node_modules/is-core-module/CHANGELOG.md @@ -5,6 +5,50 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.8.1](https://github.com/inspect-js/is-core-module/compare/v2.8.0...v2.8.1) - 2022-01-05 + +### Commits + +- [actions] reuse common workflows [`cd2cf9b`](https://github.com/inspect-js/is-core-module/commit/cd2cf9b3b66c8d328f65610efe41e9325db7716d) +- [Fix] update node 0.4 results [`062195d`](https://github.com/inspect-js/is-core-module/commit/062195d89f0876a88b95d378b43f7fcc1205bc5b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0790b62`](https://github.com/inspect-js/is-core-module/commit/0790b6222848c6167132f9f73acc3520fa8d1298) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`7d139a6`](https://github.com/inspect-js/is-core-module/commit/7d139a6d767709eabf0a0251e074ec1fb230c06e) +- [Tests] run `nyc` in `tests-only`, not `test` [`780e8a0`](https://github.com/inspect-js/is-core-module/commit/780e8a049951c71cf78b1707f0871c48a28bde14) + +## [v2.8.0](https://github.com/inspect-js/is-core-module/compare/v2.7.0...v2.8.0) - 2021-10-14 + +### Commits + +- [actions] update codecov uploader [`0cfe94e`](https://github.com/inspect-js/is-core-module/commit/0cfe94e106a7d005ea03e008c0a21dec13a77904) +- [New] add `readline/promises` to node v17+ [`4f78c30`](https://github.com/inspect-js/is-core-module/commit/4f78c3008b1b58b4db6dc91d99610b1bc859da7e) +- [Tests] node ^14.18 supports `node:` prefixes for CJS [`43e2f17`](https://github.com/inspect-js/is-core-module/commit/43e2f177452cea2f0eaf34f61b5407217bbdb6f4) + +## [v2.7.0](https://github.com/inspect-js/is-core-module/compare/v2.6.0...v2.7.0) - 2021-09-27 + +### Commits + +- [New] node `v14.18` added `node:`-prefixed core modules to `require` [`6d943ab`](https://github.com/inspect-js/is-core-module/commit/6d943abe81382b9bbe344384d80fbfebe1cc0526) +- [Tests] add coverage for Object.prototype pollution [`c6baf5f`](https://github.com/inspect-js/is-core-module/commit/c6baf5f942311a1945c1af41167bb80b84df2af7) +- [Dev Deps] update `@ljharb/eslint-config` [`6717f00`](https://github.com/inspect-js/is-core-module/commit/6717f000d063ea57beb772bded36c2f056ac404c) +- [eslint] fix linter warning [`594c10b`](https://github.com/inspect-js/is-core-module/commit/594c10bb7d39d7eb00925c90924199ff596184b2) +- [meta] add `sideEffects` flag [`c32cfa5`](https://github.com/inspect-js/is-core-module/commit/c32cfa5195632944c4dd4284a142b8476e75be13) + +## [v2.6.0](https://github.com/inspect-js/is-core-module/compare/v2.5.0...v2.6.0) - 2021-08-17 + +### Commits + +- [Dev Deps] update `eslint`, `tape` [`6cc928f`](https://github.com/inspect-js/is-core-module/commit/6cc928f8a4bba66aeeccc4f6beeac736d4bd3081) +- [New] add `stream/consumers` to node `>= 16.7` [`a1a423e`](https://github.com/inspect-js/is-core-module/commit/a1a423e467e4cc27df180234fad5bab45943e67d) +- [Refactor] Remove duplicated `&&` operand [`86faea7`](https://github.com/inspect-js/is-core-module/commit/86faea738213a2433c62d1098488dc9314dca832) +- [Tests] include prereleases [`a4da7a6`](https://github.com/inspect-js/is-core-module/commit/a4da7a6abf7568e2aa4fd98e69452179f1850963) + +## [v2.5.0](https://github.com/inspect-js/is-core-module/compare/v2.4.0...v2.5.0) - 2021-07-12 + +### Commits + +- [Dev Deps] update `auto-changelog`, `eslint` [`6334cc9`](https://github.com/inspect-js/is-core-module/commit/6334cc94f3af7469685bd8f236740991baaf2705) +- [New] add `stream/web` to node v16.5+ [`17ac59b`](https://github.com/inspect-js/is-core-module/commit/17ac59b662d63e220a2e5728625f005c24f177b2) + ## [v2.4.0](https://github.com/inspect-js/is-core-module/compare/v2.3.0...v2.4.0) - 2021-05-09 ### Commits diff --git a/build/node_modules/is-core-module/core.json b/build/node_modules/is-core-module/core.json index 44a92a1a..d2752948 100644 --- a/build/node_modules/is-core-module/core.json +++ b/build/node_modules/is-core-module/core.json @@ -1,130 +1,136 @@ { "assert": true, - "node:assert": ">= 16", + "node:assert": [">= 14.18 && < 15", ">= 16"], "assert/strict": ">= 15", "node:assert/strict": ">= 16", "async_hooks": ">= 8", - "node:async_hooks": ">= 16", - "buffer_ieee754": "< 0.9.7", + "node:async_hooks": [">= 14.18 && < 15", ">= 16"], + "buffer_ieee754": ">= 0.5 && < 0.9.7", "buffer": true, - "node:buffer": ">= 16", + "node:buffer": [">= 14.18 && < 15", ">= 16"], "child_process": true, - "node:child_process": ">= 16", - "cluster": true, - "node:cluster": ">= 16", + "node:child_process": [">= 14.18 && < 15", ">= 16"], + "cluster": ">= 0.5", + "node:cluster": [">= 14.18 && < 15", ">= 16"], "console": true, - "node:console": ">= 16", + "node:console": [">= 14.18 && < 15", ">= 16"], "constants": true, - "node:constants": ">= 16", + "node:constants": [">= 14.18 && < 15", ">= 16"], "crypto": true, - "node:crypto": ">= 16", + "node:crypto": [">= 14.18 && < 15", ">= 16"], "_debug_agent": ">= 1 && < 8", "_debugger": "< 8", "dgram": true, - "node:dgram": ">= 16", + "node:dgram": [">= 14.18 && < 15", ">= 16"], "diagnostics_channel": [">= 14.17 && < 15", ">= 15.1"], - "node:diagnostics_channel": ">= 16", + "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"], "dns": true, - "node:dns": ">= 16", + "node:dns": [">= 14.18 && < 15", ">= 16"], "dns/promises": ">= 15", "node:dns/promises": ">= 16", "domain": ">= 0.7.12", - "node:domain": ">= 16", + "node:domain": [">= 14.18 && < 15", ">= 16"], "events": true, - "node:events": ">= 16", + "node:events": [">= 14.18 && < 15", ">= 16"], "freelist": "< 6", "fs": true, - "node:fs": ">= 16", + "node:fs": [">= 14.18 && < 15", ">= 16"], "fs/promises": [">= 10 && < 10.1", ">= 14"], - "node:fs/promises": ">= 16", + "node:fs/promises": [">= 14.18 && < 15", ">= 16"], "_http_agent": ">= 0.11.1", - "node:_http_agent": ">= 16", + "node:_http_agent": [">= 14.18 && < 15", ">= 16"], "_http_client": ">= 0.11.1", - "node:_http_client": ">= 16", + "node:_http_client": [">= 14.18 && < 15", ">= 16"], "_http_common": ">= 0.11.1", - "node:_http_common": ">= 16", + "node:_http_common": [">= 14.18 && < 15", ">= 16"], "_http_incoming": ">= 0.11.1", - "node:_http_incoming": ">= 16", + "node:_http_incoming": [">= 14.18 && < 15", ">= 16"], "_http_outgoing": ">= 0.11.1", - "node:_http_outgoing": ">= 16", + "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"], "_http_server": ">= 0.11.1", - "node:_http_server": ">= 16", + "node:_http_server": [">= 14.18 && < 15", ">= 16"], "http": true, - "node:http": ">= 16", + "node:http": [">= 14.18 && < 15", ">= 16"], "http2": ">= 8.8", - "node:http2": ">= 16", + "node:http2": [">= 14.18 && < 15", ">= 16"], "https": true, - "node:https": ">= 16", + "node:https": [">= 14.18 && < 15", ">= 16"], "inspector": ">= 8", - "node:inspector": ">= 16", + "node:inspector": [">= 14.18 && < 15", ">= 16"], "_linklist": "< 8", "module": true, - "node:module": ">= 16", + "node:module": [">= 14.18 && < 15", ">= 16"], "net": true, - "node:net": ">= 16", + "node:net": [">= 14.18 && < 15", ">= 16"], "node-inspect/lib/_inspect": ">= 7.6 && < 12", "node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12", "node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12", "os": true, - "node:os": ">= 16", + "node:os": [">= 14.18 && < 15", ">= 16"], "path": true, - "node:path": ">= 16", + "node:path": [">= 14.18 && < 15", ">= 16"], "path/posix": ">= 15.3", "node:path/posix": ">= 16", "path/win32": ">= 15.3", "node:path/win32": ">= 16", "perf_hooks": ">= 8.5", - "node:perf_hooks": ">= 16", + "node:perf_hooks": [">= 14.18 && < 15", ">= 16"], "process": ">= 1", - "node:process": ">= 16", - "punycode": true, - "node:punycode": ">= 16", + "node:process": [">= 14.18 && < 15", ">= 16"], + "punycode": ">= 0.5", + "node:punycode": [">= 14.18 && < 15", ">= 16"], "querystring": true, - "node:querystring": ">= 16", + "node:querystring": [">= 14.18 && < 15", ">= 16"], "readline": true, - "node:readline": ">= 16", + "node:readline": [">= 14.18 && < 15", ">= 16"], + "readline/promises": ">= 17", + "node:readline/promises": ">= 17", "repl": true, - "node:repl": ">= 16", + "node:repl": [">= 14.18 && < 15", ">= 16"], "smalloc": ">= 0.11.5 && < 3", "_stream_duplex": ">= 0.9.4", - "node:_stream_duplex": ">= 16", + "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"], "_stream_transform": ">= 0.9.4", - "node:_stream_transform": ">= 16", + "node:_stream_transform": [">= 14.18 && < 15", ">= 16"], "_stream_wrap": ">= 1.4.1", - "node:_stream_wrap": ">= 16", + "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"], "_stream_passthrough": ">= 0.9.4", - "node:_stream_passthrough": ">= 16", + "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"], "_stream_readable": ">= 0.9.4", - "node:_stream_readable": ">= 16", + "node:_stream_readable": [">= 14.18 && < 15", ">= 16"], "_stream_writable": ">= 0.9.4", - "node:_stream_writable": ">= 16", + "node:_stream_writable": [">= 14.18 && < 15", ">= 16"], "stream": true, - "node:stream": ">= 16", + "node:stream": [">= 14.18 && < 15", ">= 16"], + "stream/consumers": ">= 16.7", + "node:stream/consumers": ">= 16.7", "stream/promises": ">= 15", "node:stream/promises": ">= 16", + "stream/web": ">= 16.5", + "node:stream/web": ">= 16.5", "string_decoder": true, - "node:string_decoder": ">= 16", - "sys": [">= 0.6 && < 0.7", ">= 0.8"], - "node:sys": ">= 16", + "node:string_decoder": [">= 14.18 && < 15", ">= 16"], + "sys": [">= 0.4 && < 0.7", ">= 0.8"], + "node:sys": [">= 14.18 && < 15", ">= 16"], "timers": true, - "node:timers": ">= 16", + "node:timers": [">= 14.18 && < 15", ">= 16"], "timers/promises": ">= 15", "node:timers/promises": ">= 16", "_tls_common": ">= 0.11.13", - "node:_tls_common": ">= 16", + "node:_tls_common": [">= 14.18 && < 15", ">= 16"], "_tls_legacy": ">= 0.11.3 && < 10", "_tls_wrap": ">= 0.11.3", - "node:_tls_wrap": ">= 16", + "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"], "tls": true, - "node:tls": ">= 16", + "node:tls": [">= 14.18 && < 15", ">= 16"], "trace_events": ">= 10", - "node:trace_events": ">= 16", + "node:trace_events": [">= 14.18 && < 15", ">= 16"], "tty": true, - "node:tty": ">= 16", + "node:tty": [">= 14.18 && < 15", ">= 16"], "url": true, - "node:url": ">= 16", + "node:url": [">= 14.18 && < 15", ">= 16"], "util": true, - "node:util": ">= 16", + "node:util": [">= 14.18 && < 15", ">= 16"], "util/types": ">= 15.3", "node:util/types": ">= 16", "v8/tools/arguments": ">= 10 && < 12", @@ -135,12 +141,12 @@ "v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"], "v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"], "v8": ">= 1", - "node:v8": ">= 16", + "node:v8": [">= 14.18 && < 15", ">= 16"], "vm": true, - "node:vm": ">= 16", + "node:vm": [">= 14.18 && < 15", ">= 16"], "wasi": ">= 13.4 && < 13.5", "worker_threads": ">= 11.7", - "node:worker_threads": ">= 16", - "zlib": true, - "node:zlib": ">= 16" + "node:worker_threads": [">= 14.18 && < 15", ">= 16"], + "zlib": ">= 0.5", + "node:zlib": [">= 14.18 && < 15", ">= 16"] } diff --git a/build/node_modules/is-core-module/index.js b/build/node_modules/is-core-module/index.js index f5a69cf7..f9637e0e 100644 --- a/build/node_modules/is-core-module/index.js +++ b/build/node_modules/is-core-module/index.js @@ -44,7 +44,7 @@ function versionIncluded(nodeVersion, specifierValue) { } var current = typeof nodeVersion === 'undefined' - ? process.versions && process.versions.node && process.versions.node + ? process.versions && process.versions.node : nodeVersion; if (typeof current !== 'string') { diff --git a/build/node_modules/is-core-module/package.json b/build/node_modules/is-core-module/package.json index 72af2c2f..8de94ba1 100644 --- a/build/node_modules/is-core-module/package.json +++ b/build/node_modules/is-core-module/package.json @@ -1,26 +1,26 @@ { - "_from": "is-core-module@^2.2.0", - "_id": "is-core-module@2.4.0", + "_from": "is-core-module@^2.8.1", + "_id": "is-core-module@2.8.1", "_inBundle": false, - "_integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "_integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "_location": "/is-core-module", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "is-core-module@^2.2.0", + "raw": "is-core-module@^2.8.1", "name": "is-core-module", "escapedName": "is-core-module", - "rawSpec": "^2.2.0", + "rawSpec": "^2.8.1", "saveSpec": null, - "fetchSpec": "^2.2.0" + "fetchSpec": "^2.8.1" }, "_requiredBy": [ "/resolve" ], - "_resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "_shasum": "8e9fc8e15027b011418026e98f0e6f4d86305cc1", - "_spec": "is-core-module@^2.2.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-core-module/-/is-core-module-2.8.1.tgz", + "_shasum": "f59fdfca701d5879d0a6b100a40aa1560ce27211", + "_spec": "is-core-module@^2.8.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/resolve", "author": { "name": "Jordan Harband", @@ -44,14 +44,14 @@ "deprecated": false, "description": "Is this specifier a node.js core module?", "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", + "@ljharb/eslint-config": "^20.1.0", "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "eslint": "^7.26.0", + "auto-changelog": "^2.3.0", + "eslint": "^8.6.0", "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", + "safe-publish-latest": "^2.0.0", "semver": "^6.3.0", - "tape": "^5.2.2" + "tape": "^5.4.0" }, "exports": { ".": [ @@ -88,9 +88,10 @@ "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", - "test": "nyc npm run tests-only", - "tests-only": "tape 'test/**/*.js'", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", "version": "auto-changelog && git add CHANGELOG.md" }, - "version": "2.4.0" + "sideEffects": false, + "version": "2.8.1" } diff --git a/build/node_modules/is-core-module/test/index.js b/build/node_modules/is-core-module/test/index.js index 281c7e9a..b688cd22 100644 --- a/build/node_modules/is-core-module/test/index.js +++ b/build/node_modules/is-core-module/test/index.js @@ -6,7 +6,7 @@ var semver = require('semver'); var isCore = require('../'); var data = require('../core.json'); -var supportsNodePrefix = semver.satisfies(process.versions.node, '>= 16'); +var supportsNodePrefix = semver.satisfies(process.versions.node, '^14.18 || >= 16', { includePrerelease: true }); test('core modules', function (t) { t.test('isCore()', function (st) { @@ -104,5 +104,27 @@ test('core modules', function (t) { st.end(); }); + t.test('Object.prototype pollution', function (st) { + /* eslint no-extend-native: 1 */ + var nonKey = 'not a core module'; + st.teardown(function () { + delete Object.prototype.fs; + delete Object.prototype.path; + delete Object.prototype.http; + delete Object.prototype[nonKey]; + }); + Object.prototype.fs = false; + Object.prototype.path = '>= 999999999'; + Object.prototype.http = data.http; + Object.prototype[nonKey] = true; + + st.equal(isCore('fs'), true, 'fs is a core module even if Object.prototype lies'); + st.equal(isCore('path'), true, 'path is a core module even if Object.prototype lies'); + st.equal(isCore('http'), true, 'path is a core module even if Object.prototype matches data'); + st.equal(isCore(nonKey), false, '"' + nonKey + '" is not a core module even if Object.prototype lies'); + + st.end(); + }); + t.end(); }); diff --git a/build/node_modules/is-date-object/.editorconfig b/build/node_modules/is-date-object/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/is-date-object/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-date-object/.eslintignore b/build/node_modules/is-date-object/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-date-object/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-date-object/.eslintrc b/build/node_modules/is-date-object/.eslintrc deleted file mode 100644 index 1228f975..00000000 --- a/build/node_modules/is-date-object/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-statements": [2, 12] - } -} diff --git a/build/node_modules/is-date-object/.github/FUNDING.yml b/build/node_modules/is-date-object/.github/FUNDING.yml deleted file mode 100644 index 9cfa9fde..00000000 --- a/build/node_modules/is-date-object/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-date-object -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-date-object/.jscs.json b/build/node_modules/is-date-object/.jscs.json deleted file mode 100644 index b4d9b8b4..00000000 --- a/build/node_modules/is-date-object/.jscs.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "ForInStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 1 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": "asc-insensitive", - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/build/node_modules/is-date-object/.nycrc b/build/node_modules/is-date-object/.nycrc deleted file mode 100644 index a69aa2d8..00000000 --- a/build/node_modules/is-date-object/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test", - "test-corejs.js" - ] -} diff --git a/build/node_modules/is-date-object/CHANGELOG.md b/build/node_modules/is-date-object/CHANGELOG.md deleted file mode 100644 index 0f4fbbd9..00000000 --- a/build/node_modules/is-date-object/CHANGELOG.md +++ /dev/null @@ -1,106 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.4](https://github.com/inspect-js/is-date-object/compare/v1.0.3...v1.0.4) - 2021-05-07 - -### Commits - -- [Fix] do not use `Object.prototype.toString` when `Symbol.toStringTag` is shammed [`8943a4a`](https://github.com/inspect-js/is-date-object/commit/8943a4a5035b3f2c8cee9a5edabb55579c16983d) -- [readme] make all URLs https [`1d4d6cd`](https://github.com/inspect-js/is-date-object/commit/1d4d6cd37365c3a36f98e3f82cfe6262227437db) -- [Dev Deps] update `eslint` [`a7abeaa`](https://github.com/inspect-js/is-date-object/commit/a7abeaa2409d3a34fccebcb5b362e0b90d0a8883) - -## [v1.0.3](https://github.com/inspect-js/is-date-object/compare/v1.0.2...v1.0.3) - 2021-05-05 - -### Commits - -- [Tests] migrate tests to Github Actions [`023504f`](https://github.com/inspect-js/is-date-object/commit/023504f4d48fc8788ff52ee525a1d9ec74fa7df5) -- [readme] add actions and codecov badges [`e63305f`](https://github.com/inspect-js/is-date-object/commit/e63305f2fb9ff3eb0dab7e0716585507a4f95a75) -- [meta] do not publish github action workflow files [`017d906`](https://github.com/inspect-js/is-date-object/commit/017d90679b6b1c16b398c0157904f91f56160219) -- [Tests] run `nyc` on all tests [`0376b6f`](https://github.com/inspect-js/is-date-object/commit/0376b6fb7a0ffcc42107c3c579ba0b3ab635b9e4) -- [readme] fix repo URLs; remove defunct badges [`1c148c6`](https://github.com/inspect-js/is-date-object/commit/1c148c6cb6eb0892b3186e814df3367dabb9732d) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`c7a3f54`](https://github.com/inspect-js/is-date-object/commit/c7a3f54a207a6056ffafaa58178889ea1b1b77f7) -- [actions] add "Allow Edits" workflow [`e79b5b2`](https://github.com/inspect-js/is-date-object/commit/e79b5b25c173c3201e8b42a614d5f12c48b74a86) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`da28980`](https://github.com/inspect-js/is-date-object/commit/da28980c5fe86528585b2a420319ca8fc35f763a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`5cabae9`](https://github.com/inspect-js/is-date-object/commit/5cabae9f00bf458a470bde68b734540b8ab78c3b) -- [readme] add actions and codecov badges [`33dfb88`](https://github.com/inspect-js/is-date-object/commit/33dfb881b7abf668cd3bf956e2947a1ece552f25) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`745eb04`](https://github.com/inspect-js/is-date-object/commit/745eb0462ef3838df65f41f4a95453cc4f0aa06e) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`466c62b`](https://github.com/inspect-js/is-date-object/commit/466c62b45af5a5a83963f6ef8617da887b0ab272) -- [actions] use checkout v2; remove unneeded env [`ff87a16`](https://github.com/inspect-js/is-date-object/commit/ff87a161e36d76d081d70933bf801a357c3b25fe) -- [Dev Deps] update `auto-changelog`, `tape` [`93188f5`](https://github.com/inspect-js/is-date-object/commit/93188f58e4b2c2b5e978a61a45380101d01f9838) -- [meta] use `prepublishOnly` script for npm 7+ [`1d0e3ea`](https://github.com/inspect-js/is-date-object/commit/1d0e3ea672971f02bb48c88b49079789ab41f574) -- [actions] update workflows [`4d1a235`](https://github.com/inspect-js/is-date-object/commit/4d1a2358de35a9fbe23a1dee10735748ed276301) -- [Dev Deps] update `auto-changelog`; add `aud` [`67be59a`](https://github.com/inspect-js/is-date-object/commit/67be59aa3c0ba44b982aaefb7e42adfb14eb279b) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`a6661c2`](https://github.com/inspect-js/is-date-object/commit/a6661c26af701a7782f6e06ad1b34587ce2b09bc) -- [Tests] only audit prod deps [`dd4a47f`](https://github.com/inspect-js/is-date-object/commit/dd4a47f8bcf82c3090826d890a7766f50d6f7af9) - -## [v1.0.2](https://github.com/inspect-js/is-date-object/compare/v1.0.1...v1.0.2) - 2019-12-18 - -### Commits - -- [Tests] use shared travis-ci configs [`8a378b8`](https://github.com/inspect-js/is-date-object/commit/8a378b8fd6a4202fffc9ec193aca02efe937bc35) -- [Tests] on all node minors; use `nvm install-latest-npm`; fix scripts; improve matrix [`6e97a21`](https://github.com/inspect-js/is-date-object/commit/6e97a21276cf448ce424fb9ea13edd4587f289f1) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is`, `jscs`, `nsp`, `semver`, `tape` [`8472b90`](https://github.com/inspect-js/is-date-object/commit/8472b90f82e5153c22e7a8a7726a5cc6110e93d7) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`ae73e38`](https://github.com/inspect-js/is-date-object/commit/ae73e3890df7da0bc4449088e30340cb4df3294d) -- [meta] add `auto-changelog` [`82f8f47`](https://github.com/inspect-js/is-date-object/commit/82f8f473a6ee45e2b66810cb743e0122c18381c5) -- [meta] remove unused Makefile and associated utilities [`788a2cd`](https://github.com/inspect-js/is-date-object/commit/788a2cdfd0bc8f1903967219897f6d00c4c6a26b) -- [Tests] up to `node` `v11.4`, `v10.14`, `v8.14`, `v6.15` [`b9caf7c`](https://github.com/inspect-js/is-date-object/commit/b9caf7c814e5e2549454cb444f8b739f9ce1a388) -- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v8.15`, `v6.17`; use `nvm install-latest-npm` [`cda0abc`](https://github.com/inspect-js/is-date-object/commit/cda0abc04a21c9b5ec72eabd010155c988032056) -- [Tests] up to `node` `v12.10`, `v10.16`, `v8.16` [`49bc482`](https://github.com/inspect-js/is-date-object/commit/49bc482fd9f71436b663c07144083a8423697299) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `semver`, `tape`; add `safe-publish-latest` [`f77fec4`](https://github.com/inspect-js/is-date-object/commit/f77fec48057e156b2276b4c14cf303306116b9f6) -- [actions] add automatic rebasing / merge commit blocking [`68605fc`](https://github.com/inspect-js/is-date-object/commit/68605fcb6bc0341ff0aae14a94bf5d18e1bc73be) -- [meta] create FUNDING.yml [`4f82d88`](https://github.com/inspect-js/is-date-object/commit/4f82d88e1e6ac1b97f0ce96aa0aa057ad758a581) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`3cbf28a`](https://github.com/inspect-js/is-date-object/commit/3cbf28a185ced940cfce8a09fa8479cc83575876) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config@`, `is`, `semver`, `tape` [`abf9fb0`](https://github.com/inspect-js/is-date-object/commit/abf9fb0d55ef0697e64e888d74f2e5fe53d7cdcb) -- [Tests] switch from `nsp` to `npm audit` [`6543c7d`](https://github.com/inspect-js/is-date-object/commit/6543c7d559d1fb79215b46c8b79e0e3e2a83f5de) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`ba5d2d7`](https://github.com/inspect-js/is-date-object/commit/ba5d2d7fc0975d7c03b8f2b7f43a09af93e365ba) -- [Dev Deps] update `eslint`, `nsp`, `semver`, `tape` [`c1e3525`](https://github.com/inspect-js/is-date-object/commit/c1e3525afa76a696f7cf1b58aab7f55d220b2c20) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`14e4824`](https://github.com/inspect-js/is-date-object/commit/14e4824188c85207ed3b86627b09e9f64b135db7) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` [`68ead64`](https://github.com/inspect-js/is-date-object/commit/68ead64a07e0de282ea3cd38e12cc8b0e0f6d3cd) -- [Dev Deps] update `eslint`, semver`, `tape`, `semver` [`f55453f`](https://github.com/inspect-js/is-date-object/commit/f55453f200903277465d7e9307a9c49120a4f419) -- Only apps should have lockfiles [`6c848eb`](https://github.com/inspect-js/is-date-object/commit/6c848eba982cc58053d4cca08c01f12a433f3695) -- [Tests] remove `jscs` [`3fd3a62`](https://github.com/inspect-js/is-date-object/commit/3fd3a62121607ad074b7fc977f3fc6575b66f755) -- [Dev Deps] update `eslint`, `tape` [`77d3130`](https://github.com/inspect-js/is-date-object/commit/77d3130a0039e5dae24c17de790dd510c265edc6) -- [meta] add `funding` field [`9ef6d58`](https://github.com/inspect-js/is-date-object/commit/9ef6d5888bf829a5812b3b091dc99839d48c355e) - -## [v1.0.1](https://github.com/inspect-js/is-date-object/compare/v1.0.0...v1.0.1) - 2015-09-27 - -### Commits - -- Update `tape`, `semver`, `eslint`; use my personal shared `eslint` config. [`731aa13`](https://github.com/inspect-js/is-date-object/commit/731aa134b0b8dc84e302d0b2264a415cb456ccab) -- Update `is`, `tape`, `covert`, `jscs`, `editorconfig-tools`, `nsp`, `eslint`, `semver` [`53e43a6`](https://github.com/inspect-js/is-date-object/commit/53e43a627dd01757cf3d469599f3dffd9d72b150) -- Update `eslint` [`d2fc304`](https://github.com/inspect-js/is-date-object/commit/d2fc3046f087b0026448ffde0cf46b1f741cbd4e) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`c9568df`](https://github.com/inspect-js/is-date-object/commit/c9568df228fa698dc6fcc9553b5d612e7ee427aa) -- Test on latest `node` and `io.js` versions. [`a21d537`](https://github.com/inspect-js/is-date-object/commit/a21d537562166ebd18bde3a262fd157dd774ae17) -- Update `nsp`, `eslint`, `semver` [`9e1d908`](https://github.com/inspect-js/is-date-object/commit/9e1d9087c0c79c34fcb2abfc701cdfa1efcb327c) -- Update `covert`, `jscs`, `eslint`, `semver` [`f198f6b`](https://github.com/inspect-js/is-date-object/commit/f198f6b997912da10a3d821a089e1581edc730a0) -- [Dev Deps] update `tape`, `jscs`, `eslint` [`ab9bdbb`](https://github.com/inspect-js/is-date-object/commit/ab9bdbbc189cef033346508db47cd1feb04a69d3) -- If `@@toStringTag` is not present, use the old-school `Object#toString` test. [`c03afce`](https://github.com/inspect-js/is-date-object/commit/c03afce001368b29eb929900075749b113a252c8) -- [Dev Deps] update `jscs`, `nsp`, `tape`, `eslint`, `@ljharb/eslint-config` [`9d94ccb`](https://github.com/inspect-js/is-date-object/commit/9d94ccbab4160d2fa649123e37951d86b69a8b15) -- [Dev Deps] update `is`, `eslint`, `@ljharb/eslint-config`, `semver` [`35cbff7`](https://github.com/inspect-js/is-date-object/commit/35cbff7f7c8216fbb79c799f74b2336eaf0d726a) -- Test up to `io.js` `v2.3` [`be5d11e`](https://github.com/inspect-js/is-date-object/commit/be5d11e7ebd9473d7ae554179b3769082485f6f4) -- [Tests] on `io.js` `v3.3`, up to `node` `v4.1` [`20221a3`](https://github.com/inspect-js/is-date-object/commit/20221a34858d2b21e23bdc2c08df23f0bc08d11e) -- [Tests] up to `io.js` `v3.2 ` [`7009b4a`](https://github.com/inspect-js/is-date-object/commit/7009b4a9999e14eacbdf6068afd82f478473f007) -- Test on `io.js` `v2.1` [`68b29b1`](https://github.com/inspect-js/is-date-object/commit/68b29b19a07e6589a7ca37ab764be28f144ac88e) -- Remove `editorconfig-tools` [`8d3972c`](https://github.com/inspect-js/is-date-object/commit/8d3972c1795fdcfd337680e11ab610e4885fb079) -- [Dev Deps] update `tape` [`204945d`](https://github.com/inspect-js/is-date-object/commit/204945d8658a3513ca6315ddf795e4034adb4545) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`7bff214`](https://github.com/inspect-js/is-date-object/commit/7bff214dcb2317b96219921476f990814afbb401) -- Test on `io.js` `v2.5` [`92f7bd6`](https://github.com/inspect-js/is-date-object/commit/92f7bd6747e3259b0ddc9c287876f46a9cd4c270) -- Test on `io.js` `v2.4` [`ebb34bf`](https://github.com/inspect-js/is-date-object/commit/ebb34bf1f58949768063f86ac012f1ca5d7cf6d9) -- Fix tests for faked @@toStringTag [`3b9c26c`](https://github.com/inspect-js/is-date-object/commit/3b9c26c15040af6a87f8d77ce6c85a7bef7a4304) -- Test on `io.js` `v3.0` [`5eedf4b`](https://github.com/inspect-js/is-date-object/commit/5eedf4bea76380a08813fd0977469c2480302a82) - -## v1.0.0 - 2015-01-28 - -### Commits - -- Dotfiles. [`5b6a929`](https://github.com/inspect-js/is-date-object/commit/5b6a9298c6f70882e78e66d64c9c019f85790f52) -- `make release` [`e8d40ce`](https://github.com/inspect-js/is-date-object/commit/e8d40ceca85acd0aa4b2753faa6e41c0c54cf6c3) -- package.json [`a107259`](https://github.com/inspect-js/is-date-object/commit/a1072591ea510a2998298be6cef827b123f4643f) -- Read me [`eb92695`](https://github.com/inspect-js/is-date-object/commit/eb92695664bdee8fc49891cd73aa2f41075f53cb) -- Initial commit [`4fc7755`](https://github.com/inspect-js/is-date-object/commit/4fc7755ff12f1d7a55cf841d486bf6b2350fe5a0) -- Tests. [`b6f432f`](https://github.com/inspect-js/is-date-object/commit/b6f432fb6801c5ff8d89cfec7601d59478e23dd1) -- Implementation. [`dd0fd96`](https://github.com/inspect-js/is-date-object/commit/dd0fd96c4016a66cec7cd59db0fde37c2ef3cdb5) diff --git a/build/node_modules/is-date-object/LICENSE b/build/node_modules/is-date-object/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-date-object/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-date-object/README.md b/build/node_modules/is-date-object/README.md deleted file mode 100644 index 1c084add..00000000 --- a/build/node_modules/is-date-object/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# is-date-object [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS Date object? This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isDate = require('is-date-object'); -var assert = require('assert'); - -assert.notOk(isDate(undefined)); -assert.notOk(isDate(null)); -assert.notOk(isDate(false)); -assert.notOk(isDate(true)); -assert.notOk(isDate(42)); -assert.notOk(isDate('foo')); -assert.notOk(isDate(function () {})); -assert.notOk(isDate([])); -assert.notOk(isDate({})); -assert.notOk(isDate(/a/g)); -assert.notOk(isDate(new RegExp('a', 'g'))); - -assert.ok(isDate(new Date())); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-date-object -[2]: https://versionbadg.es/inspect-js/is-date-object.svg -[5]: https://david-dm.org/inspect-js/is-date-object.svg -[6]: https://david-dm.org/inspect-js/is-date-object -[7]: https://david-dm.org/inspect-js/is-date-object/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-date-object#info=devDependencies -[11]: https://nodei.co/npm/is-date-object.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-date-object.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-date-object.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-date-object -[codecov-image]: https://codecov.io/gh/inspect-js/is-date-object/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-date-object/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-date-object -[actions-url]: https://github.com/inspect-js/is-date-object/actions diff --git a/build/node_modules/is-date-object/index.js b/build/node_modules/is-date-object/index.js deleted file mode 100644 index 996c5bb1..00000000 --- a/build/node_modules/is-date-object/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var getDay = Date.prototype.getDay; -var tryDateObject = function tryDateGetDayCall(value) { - try { - getDay.call(value); - return true; - } catch (e) { - return false; - } -}; - -var toStr = Object.prototype.toString; -var dateClass = '[object Date]'; -var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; - -module.exports = function isDateObject(value) { - if (typeof value !== 'object' || value === null) { - return false; - } - return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass; -}; diff --git a/build/node_modules/is-date-object/package.json b/build/node_modules/is-date-object/package.json deleted file mode 100644 index e8ff9242..00000000 --- a/build/node_modules/is-date-object/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_from": "is-date-object@^1.0.1", - "_id": "is-date-object@1.0.4", - "_inBundle": false, - "_integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "_location": "/is-date-object", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-date-object@^1.0.1", - "name": "is-date-object", - "escapedName": "is-date-object", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/es-to-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "_shasum": "550cfcc03afada05eea3dd30981c7b09551f73e5", - "_spec": "is-date-object@^1.0.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-to-primitive", - "author": { - "name": "Jordan Harband" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-date-object/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Is this value a JS Date object? This module works cross-realm/iframe, and despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^3.12.0", - "eslint": "^7.26.0", - "foreach": "^2.0.5", - "indexof": "^0.0.1", - "is": "^3.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-date-object#readme", - "keywords": [ - "Date", - "ES6", - "toStringTag", - "@@toStringTag", - "Date object" - ], - "license": "MIT", - "main": "index.js", - "name": "is-date-object", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-date-object.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only && npm run test:corejs", - "test:corejs": "nyc tape test-corejs.js", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.4" -} diff --git a/build/node_modules/is-date-object/test/index.js b/build/node_modules/is-date-object/test/index.js deleted file mode 100644 index 3b2d93f5..00000000 --- a/build/node_modules/is-date-object/test/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isDate = require('../'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator !== 'undefined'; - -test('not Dates', function (t) { - t.notOk(isDate(), 'undefined is not Date'); - t.notOk(isDate(null), 'null is not Date'); - t.notOk(isDate(false), 'false is not Date'); - t.notOk(isDate(true), 'true is not Date'); - t.notOk(isDate(42), 'number is not Date'); - t.notOk(isDate('foo'), 'string is not Date'); - t.notOk(isDate([]), 'array is not Date'); - t.notOk(isDate({}), 'object is not Date'); - t.notOk(isDate(function () {}), 'function is not Date'); - t.notOk(isDate(/a/g), 'regex literal is not Date'); - t.notOk(isDate(new RegExp('a', 'g')), 'regex object is not Date'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var realDate = new Date(); - var fakeDate = { - toString: function () { return String(realDate); }, - valueOf: function () { return realDate.getTime(); } - }; - fakeDate[Symbol.toStringTag] = 'Date'; - t.notOk(isDate(fakeDate), 'fake Date with @@toStringTag "Date" is not Date'); - t.end(); -}); - -test('Dates', function (t) { - t.ok(isDate(new Date()), 'new Date() is Date'); - t.end(); -}); diff --git a/build/node_modules/is-extglob/LICENSE b/build/node_modules/is-extglob/LICENSE new file mode 100644 index 00000000..842218cf --- /dev/null +++ b/build/node_modules/is-extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/is-extglob/README.md b/build/node_modules/is-extglob/README.md new file mode 100644 index 00000000..0416af5c --- /dev/null +++ b/build/node_modules/is-extglob/README.md @@ -0,0 +1,107 @@ +# is-extglob [![NPM version](https://img.shields.io/npm/v/is-extglob.svg?style=flat)](https://www.npmjs.com/package/is-extglob) [![NPM downloads](https://img.shields.io/npm/dm/is-extglob.svg?style=flat)](https://npmjs.org/package/is-extglob) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-extglob.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-extglob +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Escaped extglobs: + +```js +isExtglob('\\?(abc)'); +isExtglob('\\@(abc)'); +isExtglob('\\!(abc)'); +isExtglob('\\*(abc)'); +isExtglob('\\+(abc)'); +``` + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## History + +**v2.0** + +Adds support for escaping. Escaped exglobs no longer return true. + +## About + +### Related projects + +* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob "Returns `true` if an array has a glob pattern.") +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/is-extglob/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 12, 2016._ \ No newline at end of file diff --git a/build/node_modules/is-extglob/index.js b/build/node_modules/is-extglob/index.js new file mode 100644 index 00000000..c1d986fc --- /dev/null +++ b/build/node_modules/is-extglob/index.js @@ -0,0 +1,20 @@ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + + return false; +}; diff --git a/build/node_modules/is-extglob/package.json b/build/node_modules/is-extglob/package.json new file mode 100644 index 00000000..2efb1caa --- /dev/null +++ b/build/node_modules/is-extglob/package.json @@ -0,0 +1,100 @@ +{ + "_from": "is-extglob@^2.1.1", + "_id": "is-extglob@2.1.1", + "_inBundle": false, + "_integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "_location": "/is-extglob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-extglob@^2.1.1", + "name": "is-extglob", + "escapedName": "is-extglob", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/is-glob" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-extglob/-/is-extglob-2.1.1.tgz", + "_shasum": "a88c02535791f02ed37c76a1b9ea9773c833f8c2", + "_spec": "is-extglob@^2.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/is-glob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-extglob/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Returns true if a string has an extglob.", + "devDependencies": { + "gulp-format-md": "^0.1.10", + "mocha": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-extglob", + "keywords": [ + "bash", + "braces", + "check", + "exec", + "expression", + "extglob", + "glob", + "globbing", + "globstar", + "is", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "license": "MIT", + "main": "index.js", + "name": "is-extglob", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-extglob.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "has-glob", + "is-glob", + "micromatch" + ] + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ], + "lint": { + "reflinks": true + } + }, + "version": "2.1.1" +} diff --git a/build/node_modules/is-fullwidth-code-point/index.d.ts b/build/node_modules/is-fullwidth-code-point/index.d.ts new file mode 100644 index 00000000..729d2020 --- /dev/null +++ b/build/node_modules/is-fullwidth-code-point/index.d.ts @@ -0,0 +1,17 @@ +/** +Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms). + +@param codePoint - The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + +@example +``` +import isFullwidthCodePoint from 'is-fullwidth-code-point'; + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` +*/ +export default function isFullwidthCodePoint(codePoint: number): boolean; diff --git a/build/node_modules/is-fullwidth-code-point/index.js b/build/node_modules/is-fullwidth-code-point/index.js new file mode 100644 index 00000000..671f97f7 --- /dev/null +++ b/build/node_modules/is-fullwidth-code-point/index.js @@ -0,0 +1,50 @@ +/* eslint-disable yoda */ +'use strict'; + +const isFullwidthCodePoint = codePoint => { + if (Number.isNaN(codePoint)) { + return false; + } + + // Code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + codePoint >= 0x1100 && ( + codePoint <= 0x115F || // Hangul Jamo + codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET + codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= codePoint && codePoint <= 0x4DBF) || + // CJK Unified Ideographs .. Yi Radicals + (0x4E00 <= codePoint && codePoint <= 0xA4C6) || + // Hangul Jamo Extended-A + (0xA960 <= codePoint && codePoint <= 0xA97C) || + // Hangul Syllables + (0xAC00 <= codePoint && codePoint <= 0xD7A3) || + // CJK Compatibility Ideographs + (0xF900 <= codePoint && codePoint <= 0xFAFF) || + // Vertical Forms + (0xFE10 <= codePoint && codePoint <= 0xFE19) || + // CJK Compatibility Forms .. Small Form Variants + (0xFE30 <= codePoint && codePoint <= 0xFE6B) || + // Halfwidth and Fullwidth Forms + (0xFF01 <= codePoint && codePoint <= 0xFF60) || + (0xFFE0 <= codePoint && codePoint <= 0xFFE6) || + // Kana Supplement + (0x1B000 <= codePoint && codePoint <= 0x1B001) || + // Enclosed Ideographic Supplement + (0x1F200 <= codePoint && codePoint <= 0x1F251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= codePoint && codePoint <= 0x3FFFD) + ) + ) { + return true; + } + + return false; +}; + +module.exports = isFullwidthCodePoint; +module.exports.default = isFullwidthCodePoint; diff --git a/build/node_modules/is-fullwidth-code-point/license b/build/node_modules/is-fullwidth-code-point/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/is-fullwidth-code-point/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-fullwidth-code-point/package.json b/build/node_modules/is-fullwidth-code-point/package.json new file mode 100644 index 00000000..56562325 --- /dev/null +++ b/build/node_modules/is-fullwidth-code-point/package.json @@ -0,0 +1,74 @@ +{ + "_from": "is-fullwidth-code-point@^3.0.0", + "_id": "is-fullwidth-code-point@3.0.0", + "_inBundle": false, + "_integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "_location": "/is-fullwidth-code-point", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-fullwidth-code-point@^3.0.0", + "name": "is-fullwidth-code-point", + "escapedName": "is-fullwidth-code-point", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/string-width" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "_shasum": "f116f8064fe90b3f7844a38997c0b75051269f1d", + "_spec": "is-fullwidth-code-point@^3.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme", + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "string", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "is-fullwidth-code-point", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "version": "3.0.0" +} diff --git a/build/node_modules/is-fullwidth-code-point/readme.md b/build/node_modules/is-fullwidth-code-point/readme.md new file mode 100644 index 00000000..4236bba9 --- /dev/null +++ b/build/node_modules/is-fullwidth-code-point/readme.md @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt(0)); +//=> true + +isFullwidthCodePoint('a'.codePointAt(0)); +//=> false +``` + + +## API + +### isFullwidthCodePoint(codePoint) + +#### codePoint + +Type: `number` + +The [code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/build/node_modules/is-generator-function/.eslintignore b/build/node_modules/is-generator-function/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-generator-function/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-generator-function/.eslintrc b/build/node_modules/is-generator-function/.eslintrc deleted file mode 100644 index d7f41a52..00000000 --- a/build/node_modules/is-generator-function/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "no-new-func": 1 - }, -} diff --git a/build/node_modules/is-generator-function/.nvmrc b/build/node_modules/is-generator-function/.nvmrc deleted file mode 100644 index 64f5a0a6..00000000 --- a/build/node_modules/is-generator-function/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -node diff --git a/build/node_modules/is-generator-function/.nycrc b/build/node_modules/is-generator-function/.nycrc deleted file mode 100644 index bdd626ce..00000000 --- a/build/node_modules/is-generator-function/.nycrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-generator-function/CHANGELOG.md b/build/node_modules/is-generator-function/CHANGELOG.md deleted file mode 100644 index 73b0fb18..00000000 --- a/build/node_modules/is-generator-function/CHANGELOG.md +++ /dev/null @@ -1,208 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.9](https://github.com/inspect-js/is-generator-function/compare/v1.0.8...v1.0.9) - 2021-05-05 - -### Fixed - -- [Fix] avoid calling `Function` until absolutely necessary [`#41`](https://github.com/inspect-js/is-generator-function/issues/41) - -### Commits - -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`612862b`](https://github.com/inspect-js/is-generator-function/commit/612862b5fefc2dc1c7e1f5e7478563a5b53f7b23) -- [meta] do not publish github action workflow files [`c13855d`](https://github.com/inspect-js/is-generator-function/commit/c13855dc11947589ed7314840a9cc5ae04db90f4) -- [readme] fix repo URLs; remove travis badge [`bd11a2a`](https://github.com/inspect-js/is-generator-function/commit/bd11a2af1b644cfa352346dcbf6f4cec48b00b78) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`23f54d4`](https://github.com/inspect-js/is-generator-function/commit/23f54d49da035c1ca79227faee9bacfde2d46884) -- [readme] add actions and codecov badges [`9e759ef`](https://github.com/inspect-js/is-generator-function/commit/9e759ef8e8f098fe1fa3cd9cca98f79f9e8b8b22) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`6305f8d`](https://github.com/inspect-js/is-generator-function/commit/6305f8d71ccfa4656bdd280c2616e88fc5ca184b) -- [meta] remove explicit audit level config [`db4391c`](https://github.com/inspect-js/is-generator-function/commit/db4391c68cf8162245d32734685be7c73c2f03c7) -- [meta] use `prepublishOnly` script for npm 7+ [`82c5b18`](https://github.com/inspect-js/is-generator-function/commit/82c5b183a605f1d25af15ec8242c8a8f88a26bfa) -- [Dev Deps] pin `core-js` v3 to < v3.9 [`5f6cc2a`](https://github.com/inspect-js/is-generator-function/commit/5f6cc2ac94a65d7d592775bac6dce573220ccea2) -- [Tests] avoid running harmony tests on node 16+ [`c41526b`](https://github.com/inspect-js/is-generator-function/commit/c41526b8cd1d376f9ca73b56a5ee076db0f9f1c1) -- [actions] update workflows [`a348c5d`](https://github.com/inspect-js/is-generator-function/commit/a348c5d6d4b06041ae0ece9f3765dc13ec9df354) - -## [v1.0.8](https://github.com/inspect-js/is-generator-function/compare/v1.0.7...v1.0.8) - 2020-12-02 - -### Fixed - -- [Refactor] improve performance in non-toStringTag envs [`#9`](https://github.com/inspect-js/is-generator-function/issues/9) - -### Commits - -- [Tests] use shared travis-ci configs [`98c84ec`](https://github.com/inspect-js/is-generator-function/commit/98c84ecd38d7d64b2aa070fa2c240be4373be131) -- [Tests] migrate tests to Github Actions [`52ea2e2`](https://github.com/inspect-js/is-generator-function/commit/52ea2e2e14da2278c7844a18af4aaef1cc8bb3bb) -- [meta] add `auto-changelog` [`a31c8d9`](https://github.com/inspect-js/is-generator-function/commit/a31c8d9e8fe4f397e1f8da5b1297050542cd00c3) -- [Tests] remove `jscs` [`c30694e`](https://github.com/inspect-js/is-generator-function/commit/c30694e5e1739a37c455b8bfae4cc7c4347292de) -- [meta] remove unused Makefile and associated utilities [`23a8dd7`](https://github.com/inspect-js/is-generator-function/commit/23a8dd75ea554642aadb1313c1cbbd11fe69eb1d) -- [Tests] up to `node` `v11.4`, `v10.14`, `v8.14`, `v6.15` [`9711495`](https://github.com/inspect-js/is-generator-function/commit/9711495e58fa9477167d7dbc582749981c3f5ee5) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `make-generator-function`; add `safe-publish-latest` [`3afb4d0`](https://github.com/inspect-js/is-generator-function/commit/3afb4d033587eeddfd2dc840ff98c10f3abea48e) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`f1e9b0f`](https://github.com/inspect-js/is-generator-function/commit/f1e9b0f150e77357ecd4afac5873a3bd3ada7b02) -- [Tests] up to `node` `v11.13`, `v10.15`, `v8.15`, `v6.17` [`433ca64`](https://github.com/inspect-js/is-generator-function/commit/433ca64d5500371516598bebb19fc00370e7c9c7) -- [Tests] run `nyc` on all tests [`84d8e18`](https://github.com/inspect-js/is-generator-function/commit/84d8e18c441c4c181e51a339559040f95adc4d94) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`ec51a9f`](https://github.com/inspect-js/is-generator-function/commit/ec51a9f2e6f5da5ae5e8b446e0112eeaa0853954) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape` [`180fb0d`](https://github.com/inspect-js/is-generator-function/commit/180fb0dbd1a9d6975344d2deb4338c9071e865b1) -- [actions] add automatic rebasing / merge commit blocking [`7e0f94b`](https://github.com/inspect-js/is-generator-function/commit/7e0f94b055308abc8469e526980991a12a87cfaf) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`, `replace`, `semver`, `core-js` [`75768b3`](https://github.com/inspect-js/is-generator-function/commit/75768b30b7d4c92231ed53ec72d2f4ae81274d4c) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `replace`, `semver`, `tape` [`d6413cd`](https://github.com/inspect-js/is-generator-function/commit/d6413cd0bfc27c924619200efe39d9956d6fb638) -- [actions] add "Allow Edits" workflow [`e73fec7`](https://github.com/inspect-js/is-generator-function/commit/e73fec71e5d1c99246a6f905091e133860931245) -- [Dev Deps] update `core-js`, `eslint`, `nsp`, `semver`, `tape` [`6746c73`](https://github.com/inspect-js/is-generator-function/commit/6746c733fa535f724700726356a9156d491b54ae) -- [Tests] switch from `nsp` to `npm audit`; allow it to fail for now [`301aa25`](https://github.com/inspect-js/is-generator-function/commit/301aa2557b4b99962a0e48191c4719c5a95eb69b) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`d978937`](https://github.com/inspect-js/is-generator-function/commit/d978937e3c86b3e239e0ceecc2324134806e0a32) -- Revert "[Refactor] improve performance in non-toStringTag envs" [`3892c18`](https://github.com/inspect-js/is-generator-function/commit/3892c18f95a8b5ea57f9893e6d8dce89fec4af30) -- [Tests] test on both core-js 3 and 2 [`fac5447`](https://github.com/inspect-js/is-generator-function/commit/fac54476693d1b8573cbd36bc3c6eb74cbeb7468) -- [Tests] use `npx aud` instead of `npm audit` with hoops [`e12897f`](https://github.com/inspect-js/is-generator-function/commit/e12897feae0185f89592dfe1a02a2a4520180313) -- [meta] add `funding` field [`60711d1`](https://github.com/inspect-js/is-generator-function/commit/60711d122a4ef7ab6a9bee6044a26352ba7f86bd) -- [Fix] `Object.getPrototypeOf` does not exist in all engines [`7484531`](https://github.com/inspect-js/is-generator-function/commit/7484531c55a61fdb7e8d819ce9aa363f29b2c704) -- [Dev Deps] update `auto-changelog`, `tape` [`fe92b74`](https://github.com/inspect-js/is-generator-function/commit/fe92b743baaf206e3ee849c551171f0a56b7fa23) -- [Dev Deps] update `eslint`, `tape` [`2f16f77`](https://github.com/inspect-js/is-generator-function/commit/2f16f77aae4c9aafe65fb29854f46b783d853c58) -- [Dev Deps] update `core-js`, `replace` [`c67825a`](https://github.com/inspect-js/is-generator-function/commit/c67825a62b7bad7911a1bdb5af237d86229aa4bc) -- [Tests] on `node` `v10.1` [`b00dbcc`](https://github.com/inspect-js/is-generator-function/commit/b00dbcce7a9f6df4fb35e99fac79560389a9a272) -- [actions] update rebase action to use checkout v2 [`85c7947`](https://github.com/inspect-js/is-generator-function/commit/85c7947d7474468a5e6dd30b00f632e43f45c21d) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`d2fd827`](https://github.com/inspect-js/is-generator-function/commit/d2fd827cf87a90d647d93185f6d5e332fb7b1bb4) -- [Dev Deps] update `@ljharb/eslint-config` [`791766e`](https://github.com/inspect-js/is-generator-function/commit/791766e4f12a96d3b9949128f813dadd428d0891) - -## [v1.0.7](https://github.com/inspect-js/is-generator-function/compare/v1.0.6...v1.0.7) - 2017-12-27 - -### Fixed - -- [Tests] run tests with uglify-register [`#16`](https://github.com/inspect-js/is-generator-function/issues/16) -- Exclude `testling.html` from npm package. [`#8`](https://github.com/inspect-js/is-generator-function/issues/8) - -### Commits - -- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` to ensure new npm doesn’t break old node; remove osx builds [`365004b`](https://github.com/inspect-js/is-generator-function/commit/365004b20b302dceb7bd2cee91814f0a55ae3253) -- [Tests] up to `node` `v9.2`, `v8.9`, `v6.12`; pin included builds to LTS [`33916ea`](https://github.com/inspect-js/is-generator-function/commit/33916eadddccf2a39c8cf0160f82c9a5d4a20ecb) -- [Dev Deps] update `core-js`, `eslint`, `nsp` [`b4ce014`](https://github.com/inspect-js/is-generator-function/commit/b4ce0144a8b56fc3089b96f1b8818c6e793e552f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `nsp`, `semver`, `tape` [`e4b499f`](https://github.com/inspect-js/is-generator-function/commit/e4b499fbe2e5e24593eb25bd63dfc2a1520aaa04) -- [Tests] up to `node` `v7.4`, `v4.7` [`ce642b6`](https://github.com/inspect-js/is-generator-function/commit/ce642b63f0f9c4f56ca3daefbf8b0d4cbda8c0a4) -- Only apps should have lockfiles. [`ea4dfb1`](https://github.com/inspect-js/is-generator-function/commit/ea4dfb15554de3a22656415cda985ceaf449be00) -- [Tests] on `node` `v9.3` [`307d9c1`](https://github.com/inspect-js/is-generator-function/commit/307d9c144fed8a4aec412d3e9ccc117d1c08e167) -- fix: example code missing ) after argument list [`05f62c7`](https://github.com/inspect-js/is-generator-function/commit/05f62c712a9ca08b0efcabe883affd7c0734f51c) -- [Tests] update `uglify-register` [`7376bec`](https://github.com/inspect-js/is-generator-function/commit/7376bec6c3c8ee16cf16feb285798be23e6c2c89) -- [Dev Deps] update `eslint` [`c3f5895`](https://github.com/inspect-js/is-generator-function/commit/c3f58952033c93918aa5b5ac527520b26c2460f8) - -## [v1.0.6](https://github.com/inspect-js/is-generator-function/compare/v1.0.5...v1.0.6) - 2016-12-20 - -### Fixed - -- [Fix] fix `is-generator-function` in an env without native generators, with core-js. [`#33`](https://github.com/ljharb/is-equal/issues/33) - -### Commits - -- [Tests] fix linting errors. [`9d12cdb`](https://github.com/inspect-js/is-generator-function/commit/9d12cdb4bb43c63801173635a7db92ced8f720d8) - -## [v1.0.5](https://github.com/inspect-js/is-generator-function/compare/v1.0.4...v1.0.5) - 2016-12-19 - -### Commits - -- Update `tape`, `semver`, `eslint`; use my personal shared `eslint` config. [`3a1192c`](https://github.com/inspect-js/is-generator-function/commit/3a1192cbf25ee5a1ca64e64c20d169c643ceb860) -- Add `npm run eslint` [`ae191b6`](https://github.com/inspect-js/is-generator-function/commit/ae191b61d3ec65de63bcd7b2c1ab08f2f9a94ead) -- [Tests] improve test matrix [`0d0837f`](https://github.com/inspect-js/is-generator-function/commit/0d0837fe00bed00ced94ef5a7bfdbd7e8e295656) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config`, `semver`, `nsp` [`6523655`](https://github.com/inspect-js/is-generator-function/commit/652365556b5f8eea69b4612a183b5026c952e776) -- Update `jscs`, `tape`, `semver` [`c185388`](https://github.com/inspect-js/is-generator-function/commit/c185388111ee6c0df1498a76d9c565167b5d20cd) -- Update `eslint` [`9959dbc`](https://github.com/inspect-js/is-generator-function/commit/9959dbc1450214658dc4789574b68de826ec33a7) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`5945497`](https://github.com/inspect-js/is-generator-function/commit/5945497bc564655ed5ea1bb6f12610a9afc33a33) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`1754eae`](https://github.com/inspect-js/is-generator-function/commit/1754eaec79e43835bd154c81fba064b558f7ad1b) -- Update `eslint`, `semver`, `nsp` [`a40f7af`](https://github.com/inspect-js/is-generator-function/commit/a40f7afab3f6ba43193e5464faf51692f6f2199d) -- Update `covert`, `jscs`, `eslint`, `semver` [`f7c3504`](https://github.com/inspect-js/is-generator-function/commit/f7c35049406adc784b23b6b0fbfdd34b4ca8c183) -- [Fix] account for Safari 10 which reports the wrong toString on generator functions. [`3a3a52b`](https://github.com/inspect-js/is-generator-function/commit/3a3a52bdba46e03ae333af9519bf471207bf6cec) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config`, `semver`, `nsp` [`aaab6c3`](https://github.com/inspect-js/is-generator-function/commit/aaab6c3a331c8c8793f8f43aa1d452cc12b92c0d) -- [Dev Deps] update `jscs` [`e24641c`](https://github.com/inspect-js/is-generator-function/commit/e24641ca69ae3ee232837e9153c8b43b046cfe69) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`c43c5ad`](https://github.com/inspect-js/is-generator-function/commit/c43c5ade8b3b62fa27fac3e5104ab3df93278878) -- Add `npm run security` via `nsp` [`24256ca`](https://github.com/inspect-js/is-generator-function/commit/24256ca5f5308930e86c3dc75b70bbfe1033e9b6) -- Test up to `io.js` `v2.3` [`730233f`](https://github.com/inspect-js/is-generator-function/commit/730233f0ca376887c698c01799b60ee54424bf9f) -- [Tests] use pretest/posttest for linting/security [`3e6b860`](https://github.com/inspect-js/is-generator-function/commit/3e6b8603453e4d127cd1acef720f1ce214d8f69a) -- [Refactor] remove useless `Object#toString` check. [`9d4d7ac`](https://github.com/inspect-js/is-generator-function/commit/9d4d7ac23f6f2f75098903b4fe4f74e1d39a2226) -- [Dev Deps] Update `tape`, `eslint` [`34673b8`](https://github.com/inspect-js/is-generator-function/commit/34673b86aecddf149284bd8bbca5ab54e6e59694) -- Test up to `io.js` `v2.1` [`1e91585`](https://github.com/inspect-js/is-generator-function/commit/1e915850246cbd691606567850f35665a650e490) -- Test on two latest `io.js` versions. [`8702608`](https://github.com/inspect-js/is-generator-function/commit/87026087a1e3b43ba9f8dc7a5b6c2b58d572ff25) -- Test on `iojs-v1.5` and `iojs-v1.6` [`c74935e`](https://github.com/inspect-js/is-generator-function/commit/c74935ec9c187e9640f862607873aa096ddcf9fc) -- Latest `node` now supports generators. [`beb3bfe`](https://github.com/inspect-js/is-generator-function/commit/beb3bfe3d425cc0ece9a02e286727e36d53f5050) -- [Dev Deps] update `tape` [`c6e6587`](https://github.com/inspect-js/is-generator-function/commit/c6e658765c94b9edc282848f13e7bce882711c8c) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`0039875`](https://github.com/inspect-js/is-generator-function/commit/0039875e6c587255470088c7867cfa314713626b) -- Test on `io.js` `v2.5` [`0017408`](https://github.com/inspect-js/is-generator-function/commit/001740801d2a29f9a25a8824b064286910601e8c) -- Test on `io.js` `v2.4` [`bc013e2`](https://github.com/inspect-js/is-generator-function/commit/bc013e20b99a89b3f592038196d69f871b39caf0) -- Test on `io.js` `v3.0` [`e195030`](https://github.com/inspect-js/is-generator-function/commit/e1950306f4e0a107101e9aeae89cfac2c18e33de) - -## [v1.0.4](https://github.com/inspect-js/is-generator-function/compare/v1.0.3...v1.0.4) - 2015-03-03 - -### Fixed - -- Add support for detecting concise generator methods. [`#2`](https://github.com/inspect-js/is-generator-function/issues/2) - -### Commits - -- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`6562e80`](https://github.com/inspect-js/is-generator-function/commit/6562e8015cf318056522a39d7a8e6ad121f9cf4c) -- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`592f768`](https://github.com/inspect-js/is-generator-function/commit/592f76853bcc5b46351d8842df7fd1483214d870) -- Test on latest `io.js` [`edca329`](https://github.com/inspect-js/is-generator-function/commit/edca329a4b3ddc19b5ac9491f7678240a73f4e0b) -- Forgot to add `replace` in 209fac444b4bd90eaa8df279457c4a15e6bba6d2 [`3ebfb38`](https://github.com/inspect-js/is-generator-function/commit/3ebfb380c73e29447689f0924248a5c801260371) -- Update `semver` [`c21baa5`](https://github.com/inspect-js/is-generator-function/commit/c21baa5acfe51e6bbe324c13ce5d4b6770ecfb27) -- Update `jscs` [`71a68f4`](https://github.com/inspect-js/is-generator-function/commit/71a68f47044af23ed2cd819d122202a59c2e6967) -- Update `tape` [`32c03cf`](https://github.com/inspect-js/is-generator-function/commit/32c03cf5701634f47c8d47fc383c97365adb3bb3) - -## [v1.0.3](https://github.com/inspect-js/is-generator-function/compare/v1.0.2...v1.0.3) - 2015-01-31 - -### Commits - -- `make release` [`209fac4`](https://github.com/inspect-js/is-generator-function/commit/209fac444b4bd90eaa8df279457c4a15e6bba6d2) -- Run tests against a faked @@toStringTag [`c9ba1ea`](https://github.com/inspect-js/is-generator-function/commit/c9ba1ea8163bd2e7a0f537da8fbaead0efa96a24) -- Add `sudo: false` to speed up travis-ci tests. [`a4b41e1`](https://github.com/inspect-js/is-generator-function/commit/a4b41e1b9c3856c671922f64bf5b7b41eb9ec0d6) -- Bail out early when typeof is not "function" [`a62e7a5`](https://github.com/inspect-js/is-generator-function/commit/a62e7a547307f5ba62a39e374f2cc2f46705eabc) - -## [v1.0.2](https://github.com/inspect-js/is-generator-function/compare/v1.0.1...v1.0.2) - 2015-01-20 - -### Commits - -- Update `tape`, `jscs` [`354d343`](https://github.com/inspect-js/is-generator-function/commit/354d3437426c274221ad21a2a580e9f31bfb07e3) -- Update `jscs` [`e0b6203`](https://github.com/inspect-js/is-generator-function/commit/e0b620323be47b3925fe3cd660c063a06cfde4aa) -- Fix tests in newer v8 (and io.js) [`36f0545`](https://github.com/inspect-js/is-generator-function/commit/36f054590d4f5fa994af5f2e7d592840bf9f9d27) - -## [v1.0.1](https://github.com/inspect-js/is-generator-function/compare/v1.0.0...v1.0.1) - 2014-12-14 - -### Commits - -- Use my standard jscs.json file. [`7624ca3`](https://github.com/inspect-js/is-generator-function/commit/7624ca3053cacec69d9a58e40c54e6635d8f980b) -- Use `make-generator-function` instead of a local module. [`9234a57`](https://github.com/inspect-js/is-generator-function/commit/9234a5771a3237baf3fe609540e74ce982fe6932) -- Adding license and downloads badges [`9463b6a`](https://github.com/inspect-js/is-generator-function/commit/9463b6a0c6bf254e213a2f5306f37e9849c8bb1a) -- Using single quotes exclusively. [`4b4d71f`](https://github.com/inspect-js/is-generator-function/commit/4b4d71f9e0d3753b6f2bd764ae910601352ff19e) -- Use SVG badges instead of PNG [`eaaaf41`](https://github.com/inspect-js/is-generator-function/commit/eaaaf41900c2e69c801062e8c7bb247bd3d2e402) -- Updating jscs. [`780758e`](https://github.com/inspect-js/is-generator-function/commit/780758ef1ae5e6a7a422fc8e3ac1265f53e33135) -- Update `tape`, `jscs` [`6b8f959`](https://github.com/inspect-js/is-generator-function/commit/6b8f95928274d770e9b66359e38c982a2b161e74) -- Update `tape`, `jscs` [`6e1334d`](https://github.com/inspect-js/is-generator-function/commit/6e1334d12899bed116ab3c4e82994fdfc8f8c279) -- Lock covert to v1.0.0. [`3dd5c74`](https://github.com/inspect-js/is-generator-function/commit/3dd5c74921a59481d5a699444a879ef0f80ef7c5) -- Updating `tape` [`99f61a3`](https://github.com/inspect-js/is-generator-function/commit/99f61a30692b7c00d06a6d29ac3022b242d4f1d4) -- Updating jscs [`171d96d`](https://github.com/inspect-js/is-generator-function/commit/171d96deef2bff8a840b0ef9563ad9366c8fcd98) -- Updating jscs [`847795e`](https://github.com/inspect-js/is-generator-function/commit/847795e9f951f5d28195f0bdb85ec26b427d2d33) -- Updating jscs [`cad09d8`](https://github.com/inspect-js/is-generator-function/commit/cad09d88873f2595545977f0ce9ed8ccde78b625) -- Updating covert [`8617860`](https://github.com/inspect-js/is-generator-function/commit/86178604dccea5b73ad2b386b275657366735529) -- Adding an .nvmrc file. [`1fa3ea4`](https://github.com/inspect-js/is-generator-function/commit/1fa3ea4f04139fdc28e2c0e553efd917be1f5744) - -## [v1.0.0](https://github.com/inspect-js/is-generator-function/compare/v0.0.0...v1.0.0) - 2014-08-09 - -### Commits - -- Adding `npm run lint` [`ed9cf0a`](https://github.com/inspect-js/is-generator-function/commit/ed9cf0a240ae8b3c4bf682e5ff37757d9eb6cffc) -- Make sure old and unstable nodes don't break Travis [`80a7ee7`](https://github.com/inspect-js/is-generator-function/commit/80a7ee782dc832869bccf857213ef76685303738) -- Updating tape [`d5f141f`](https://github.com/inspect-js/is-generator-function/commit/d5f141f0017aefb003911a1eb9c9b615069f1cf0) -- Fix npm upgrading on node 0.8 [`2ee0f08`](https://github.com/inspect-js/is-generator-function/commit/2ee0f08a56f493fb5d4299c7bda9cd52c41a98a2) -- Updating dependencies [`accf688`](https://github.com/inspect-js/is-generator-function/commit/accf688e8c20f05d0f24c1ff8efdaa24def0882c) -- Updating covert [`38d22e6`](https://github.com/inspect-js/is-generator-function/commit/38d22e6cdc939bb3f2cbfc5fff41473a694d4fe5) -- Updating tape [`49c1f00`](https://github.com/inspect-js/is-generator-function/commit/49c1f00cf5c66c87a8678d9c78a6b411cf1af986) -- Updating tape [`75cb7df`](https://github.com/inspect-js/is-generator-function/commit/75cb7dfef5254f4a9941a3bd77471cb783bb6fbd) -- Updating tape [`4142cc0`](https://github.com/inspect-js/is-generator-function/commit/4142cc092e157b92a6107112b2c3f3dc9b154367) -- Better code coverage [`1831d64`](https://github.com/inspect-js/is-generator-function/commit/1831d64d859ae8d45cc9aea30248d8cabc3d1e1d) - -## v0.0.0 - 2014-02-09 - -### Commits - -- Tests. [`f46e936`](https://github.com/inspect-js/is-generator-function/commit/f46e9368db04e0725a56e2bd0a246ab52123ed35) -- package.json [`189db32`](https://github.com/inspect-js/is-generator-function/commit/189db324e627257de94b68d1e6005c21ba74ebad) -- Initial commit [`8096cee`](https://github.com/inspect-js/is-generator-function/commit/8096ceedf7c9caece9acfd0ff4a0bd6eafa5dfdf) -- README. [`9eda97f`](https://github.com/inspect-js/is-generator-function/commit/9eda97fbc33113a519121a6515e777985730f3f7) -- Implementation. [`c5c3a8d`](https://github.com/inspect-js/is-generator-function/commit/c5c3a8d5dccae465c69958fc38c4ceba8b1354cc) -- Adding Travis CI [`9a6503e`](https://github.com/inspect-js/is-generator-function/commit/9a6503ebce8c9521c82e8ed1ec1b79bc856d0c5c) diff --git a/build/node_modules/is-generator-function/LICENSE b/build/node_modules/is-generator-function/LICENSE deleted file mode 100644 index 47b7b507..00000000 --- a/build/node_modules/is-generator-function/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-generator-function/README.md b/build/node_modules/is-generator-function/README.md deleted file mode 100644 index 519a4235..00000000 --- a/build/node_modules/is-generator-function/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# is-generator-function [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this a native generator function? - -## Example - -```js -var isGeneratorFunction = require('is-generator-function'); -assert(!isGeneratorFunction(function () {})); -assert(!isGeneratorFunction(null)); -assert(isGeneratorFunction(function* () { yield 42; return Infinity; })); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-generator-function -[2]: https://versionbadg.es/inspect-js/is-generator-function.svg -[5]: https://david-dm.org/inspect-js/is-generator-function.svg -[6]: https://david-dm.org/inspect-js/is-generator-function -[7]: https://david-dm.org/inspect-js/is-generator-function/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-generator-function#info=devDependencies -[11]: https://nodei.co/npm/is-generator-function.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-generator-function.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-generator-function.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-generator-function -[codecov-image]: https://codecov.io/gh/inspect-js/is-generator-function/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-generator-function/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-generator-function -[actions-url]: https://github.com/inspect-js/is-generator-function/actions diff --git a/build/node_modules/is-generator-function/index.js b/build/node_modules/is-generator-function/index.js deleted file mode 100644 index a3873e13..00000000 --- a/build/node_modules/is-generator-function/index.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; -var fnToStr = Function.prototype.toString; -var isFnRegex = /^\s*(?:function)?\*/; -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; -var getProto = Object.getPrototypeOf; -var getGeneratorFunc = function () { // eslint-disable-line consistent-return - if (!hasToStringTag) { - return false; - } - try { - return Function('return function*() {}')(); - } catch (e) { - } -}; -var GeneratorFunction; - -module.exports = function isGeneratorFunction(fn) { - if (typeof fn !== 'function') { - return false; - } - if (isFnRegex.test(fnToStr.call(fn))) { - return true; - } - if (!hasToStringTag) { - var str = toStr.call(fn); - return str === '[object GeneratorFunction]'; - } - if (!getProto) { - return false; - } - if (typeof GeneratorFunction === 'undefined') { - var generatorFunc = getGeneratorFunc(); - GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; - } - return getProto(fn) === GeneratorFunction; -}; diff --git a/build/node_modules/is-generator-function/package.json b/build/node_modules/is-generator-function/package.json deleted file mode 100644 index 9891610c..00000000 --- a/build/node_modules/is-generator-function/package.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "_from": "is-generator-function@^1.0.7", - "_id": "is-generator-function@1.0.9", - "_inBundle": false, - "_integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", - "_location": "/is-generator-function", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-generator-function@^1.0.7", - "name": "is-generator-function", - "escapedName": "is-generator-function", - "rawSpec": "^1.0.7", - "saveSpec": null, - "fetchSpec": "^1.0.7" - }, - "_requiredBy": [ - "/util" - ], - "_resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "_shasum": "e5f82c2323673e7fcad3d12858c83c4039f6399c", - "_spec": "is-generator-function@^1.0.7", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/util", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-generator-function/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Determine if a function is a native generator function.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^2.6.5 || ^3 <3.9", - "eslint": "^7.25.0", - "make-generator-function": "^2.0.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2", - "uglify-register": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-generator-function#readme", - "keywords": [ - "generator", - "generator function", - "es6", - "es2015", - "yield", - "function", - "function*" - ], - "license": "MIT", - "main": "index.js", - "name": "is-generator-function", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-generator-function.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "test:all": "npm run test:index && npm run test:corejs && npm run test:uglified", - "test:corejs": "node test/corejs", - "test:harmony": "node --es-staging --harmony test && node --es-staging --harmony test/corejs && node --es-staging --harmony test/uglified", - "test:index": "node test", - "test:uglified": "node test/uglified", - "tests-only": "nyc npm run test:all", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.9" -} diff --git a/build/node_modules/is-generator-function/test/corejs.js b/build/node_modules/is-generator-function/test/corejs.js deleted file mode 100644 index 73f0c89c..00000000 --- a/build/node_modules/is-generator-function/test/corejs.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('core-js'); - -require('./'); diff --git a/build/node_modules/is-generator-function/test/index.js b/build/node_modules/is-generator-function/test/index.js deleted file mode 100644 index a7fab258..00000000 --- a/build/node_modules/is-generator-function/test/index.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -/* globals window */ - -var test = require('tape'); -var isGeneratorFunction = require('../index'); -var generatorFuncs = require('make-generator-function')(); -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -var forEach = function (arr, func) { - var i; - for (i = 0; i < arr.length; ++i) { - func(arr[i], i, arr); - } -}; - -test('returns false for non-functions', function (t) { - var nonFuncs = [ - true, - false, - null, - undefined, - {}, - [], - /a/g, - 'string', - 42, - new Date() - ]; - t.plan(nonFuncs.length); - forEach(nonFuncs, function (nonFunc) { - t.notOk(isGeneratorFunction(nonFunc), nonFunc + ' is not a function'); - }); - t.end(); -}); - -test('returns false for non-generator functions', function (t) { - var func = function () {}; - t.notOk(isGeneratorFunction(func), 'anonymous function is not an generator function'); - - var namedFunc = function foo() {}; - t.notOk(isGeneratorFunction(namedFunc), 'named function is not an generator function'); - - if (typeof window === 'undefined') { - t.skip('window.alert is not an generator function'); - } else { - t.notOk(isGeneratorFunction(window.alert), 'window.alert is not an generator function'); - } - t.end(); -}); - -var fakeToString = function () { return 'function* () { return "TOTALLY REAL I SWEAR!"; }'; }; - -test('returns false for non-generator function with faked toString', function (t) { - var func = function () {}; - func.toString = fakeToString; - - t.notEqual(String(func), Function.prototype.toString.apply(func), 'faked toString is not real toString'); - t.notOk(isGeneratorFunction(func), 'anonymous function with faked toString is not a generator function'); - t.end(); -}); - -test('returns false for non-generator function with faked @@toStringTag', { skip: !hasToStringTag || generatorFuncs.length === 0 }, function (t) { - var generatorFunc = generatorFuncs[0]; - var fakeGenFunction = { - toString: function () { return String(generatorFunc); }, - valueOf: function () { return generatorFunc; } - }; - fakeGenFunction[Symbol.toStringTag] = 'GeneratorFunction'; - t.notOk(isGeneratorFunction(fakeGenFunction), 'fake GeneratorFunction with @@toStringTag "GeneratorFunction" is not a generator function'); - t.end(); -}); - -test('returns true for generator functions', function (t) { - if (generatorFuncs.length > 0) { - forEach(generatorFuncs, function (generatorFunc) { - t.ok(isGeneratorFunction(generatorFunc), generatorFunc + ' is generator function'); - }); - } else { - t.skip('generator function is generator function - this environment does not support ES6 generator functions. Please run `node --harmony`, or use a supporting browser.'); - } - t.end(); -}); diff --git a/build/node_modules/is-generator-function/test/uglified.js b/build/node_modules/is-generator-function/test/uglified.js deleted file mode 100644 index fd82b553..00000000 --- a/build/node_modules/is-generator-function/test/uglified.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -require('uglify-register/api').register({ - exclude: [/\/node_modules\//, /\/test\//], - uglify: { mangle: true } -}); - -require('./'); diff --git a/build/node_modules/is-glob/LICENSE b/build/node_modules/is-glob/LICENSE new file mode 100644 index 00000000..3f2eca18 --- /dev/null +++ b/build/node_modules/is-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/is-glob/README.md b/build/node_modules/is-glob/README.md new file mode 100644 index 00000000..740724b2 --- /dev/null +++ b/build/node_modules/is-glob/README.md @@ -0,0 +1,206 @@ +# is-glob [![NPM version](https://img.shields.io/npm/v/is-glob.svg?style=flat)](https://www.npmjs.com/package/is-glob) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![NPM total downloads](https://img.shields.io/npm/dt/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![Build Status](https://img.shields.io/github/workflow/status/micromatch/is-glob/dev)](https://github.com/micromatch/is-glob/actions) + +> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-glob +``` + +You might also be interested in [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob). + +## Usage + +```js +var isGlob = require('is-glob'); +``` + +### Default behavior + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js'); +isGlob('*.js'); +isGlob('**/abc.js'); +isGlob('abc/*.js'); +isGlob('abc/(aaa|bbb).js'); +isGlob('abc/[a-z].js'); +isGlob('abc/{a,b}.js'); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js'); +isGlob('abc/!(a).js'); +isGlob('abc/+(a).js'); +isGlob('abc/*(a).js'); +isGlob('abc/?(a).js'); +//=> true +``` + +**False** + +Escaped globs or extglobs return `false`: + +```js +isGlob('abc/\\@(a).js'); +isGlob('abc/\\!(a).js'); +isGlob('abc/\\+(a).js'); +isGlob('abc/\\*(a).js'); +isGlob('abc/\\?(a).js'); +isGlob('\\!foo.js'); +isGlob('\\*.js'); +isGlob('\\*\\*/abc.js'); +isGlob('abc/\\*.js'); +isGlob('abc/\\(aaa|bbb).js'); +isGlob('abc/\\[a-z].js'); +isGlob('abc/\\{a,b}.js'); +//=> false +``` + +Patterns that do not have glob patterns return `false`: + +```js +isGlob('abc.js'); +isGlob('abc/def/ghi.js'); +isGlob('foo.js'); +isGlob('abc/@.js'); +isGlob('abc/+.js'); +isGlob('abc/?.js'); +isGlob(); +isGlob(null); +//=> false +``` + +Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)): + +```js +isGlob(['**/*.js']); +isGlob(['foo.js']); +//=> false +``` + +### Option strict + +When `options.strict === false` the behavior is less strict in determining if a pattern is a glob. Meaning that +some patterns that would return `false` may return `true`. This is done so that matching libraries like [micromatch](https://github.com/micromatch/micromatch) have a chance at determining if the pattern is a glob or not. + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js', {strict: false}); +isGlob('*.js', {strict: false}); +isGlob('**/abc.js', {strict: false}); +isGlob('abc/*.js', {strict: false}); +isGlob('abc/(aaa|bbb).js', {strict: false}); +isGlob('abc/[a-z].js', {strict: false}); +isGlob('abc/{a,b}.js', {strict: false}); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js', {strict: false}); +isGlob('abc/!(a).js', {strict: false}); +isGlob('abc/+(a).js', {strict: false}); +isGlob('abc/*(a).js', {strict: false}); +isGlob('abc/?(a).js', {strict: false}); +//=> true +``` + +**False** + +Escaped globs or extglobs return `false`: + +```js +isGlob('\\!foo.js', {strict: false}); +isGlob('\\*.js', {strict: false}); +isGlob('\\*\\*/abc.js', {strict: false}); +isGlob('abc/\\*.js', {strict: false}); +isGlob('abc/\\(aaa|bbb).js', {strict: false}); +isGlob('abc/\\[a-z].js', {strict: false}); +isGlob('abc/\\{a,b}.js', {strict: false}); +//=> false +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit") +* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks") +* [update](https://www.npmjs.com/package/update): Be scalable! Update is a new, open source developer framework and CLI for automating updates… [more](https://github.com/update/update) | [homepage](https://github.com/update/update "Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.") +* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb "Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 47 | [jonschlinkert](https://github.com/jonschlinkert) | +| 5 | [doowb](https://github.com/doowb) | +| 1 | [phated](https://github.com/phated) | +| 1 | [danhper](https://github.com/danhper) | +| 1 | [paulmillr](https://github.com/paulmillr) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 27, 2019._ \ No newline at end of file diff --git a/build/node_modules/is-glob/index.js b/build/node_modules/is-glob/index.js new file mode 100644 index 00000000..620f563e --- /dev/null +++ b/build/node_modules/is-glob/index.js @@ -0,0 +1,150 @@ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +var isExtglob = require('is-extglob'); +var chars = { '{': '}', '(': ')', '[': ']'}; +var strictCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while (index < str.length) { + if (str[index] === '*') { + return true; + } + + if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) { + return true; + } + + if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') { + if (closeSquareIndex < index) { + closeSquareIndex = str.indexOf(']', index); + } + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + } + } + + if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') { + closeCurlyIndex = str.indexOf('}', index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { + return true; + } + } + } + + if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') { + closeParenIndex = str.indexOf(')', index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + + if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') { + if (pipeIndex < index) { + pipeIndex = str.indexOf('|', index); + } + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') { + closeParenIndex = str.indexOf(')', pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf('\\', pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +var relaxedCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + while (index < str.length) { + if (/[*?{}()[\]]/.test(str[index])) { + return true; + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +module.exports = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) { + return true; + } + + var check = strictCheck; + + // optionally relax check + if (options && options.strict === false) { + check = relaxedCheck; + } + + return check(str); +}; diff --git a/build/node_modules/is-glob/package.json b/build/node_modules/is-glob/package.json new file mode 100644 index 00000000..7b0cb18e --- /dev/null +++ b/build/node_modules/is-glob/package.json @@ -0,0 +1,122 @@ +{ + "_from": "is-glob@~4.0.1", + "_id": "is-glob@4.0.3", + "_inBundle": false, + "_integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "_location": "/is-glob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-glob@~4.0.1", + "name": "is-glob", + "escapedName": "is-glob", + "rawSpec": "~4.0.1", + "saveSpec": null, + "fetchSpec": "~4.0.1" + }, + "_requiredBy": [ + "/chokidar", + "/glob-parent" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-glob/-/is-glob-4.0.3.tgz", + "_shasum": "64f61e42cbbb2eec2071a9dac0b28ba1e65d5084", + "_spec": "is-glob@~4.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chokidar", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/micromatch/is-glob/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Brian Woodward", + "url": "https://twitter.com/doowb" + }, + { + "name": "Daniel Perez", + "url": "https://tuvistavie.com" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + } + ], + "dependencies": { + "is-extglob": "^2.1.1" + }, + "deprecated": false, + "description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.", + "devDependencies": { + "gulp-format-md": "^0.1.10", + "mocha": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/micromatch/is-glob", + "keywords": [ + "bash", + "braces", + "check", + "exec", + "expression", + "extglob", + "glob", + "globbing", + "globstar", + "is", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "license": "MIT", + "main": "index.js", + "name": "is-glob", + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/is-glob.git" + }, + "scripts": { + "test": "mocha && node benchmark.js" + }, + "verb": { + "layout": "default", + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "assemble", + "base", + "update", + "verb" + ] + }, + "reflinks": [ + "assemble", + "bach", + "base", + "composer", + "gulp", + "has-glob", + "is-valid-glob", + "micromatch", + "npm", + "scaffold", + "verb", + "vinyl" + ] + }, + "version": "4.0.3" +} diff --git a/build/node_modules/is-module/package.json b/build/node_modules/is-module/package.json index e8fe2bb4..c69d32ac 100644 --- a/build/node_modules/is-module/package.json +++ b/build/node_modules/is-module/package.json @@ -16,12 +16,12 @@ "fetchSpec": "^1.0.0" }, "_requiredBy": [ - "/rollup-plugin-node-resolve" + "/@rollup/plugin-node-resolve" ], - "_resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-module/-/is-module-1.0.0.tgz", "_shasum": "3258fb69f78c14d5b815d664336b4cffb6441591", "_spec": "is-module@^1.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-resolve", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-node-resolve", "author": { "name": "Jonathan Ong", "email": "me@jongleberry.com", diff --git a/build/node_modules/is-negative-zero/.editorconfig b/build/node_modules/is-negative-zero/.editorconfig deleted file mode 100644 index aaac3258..00000000 --- a/build/node_modules/is-negative-zero/.editorconfig +++ /dev/null @@ -1,8 +0,0 @@ -root = true - -[*] -indent_style = tab -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/build/node_modules/is-negative-zero/.eslintignore b/build/node_modules/is-negative-zero/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-negative-zero/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-negative-zero/.eslintrc b/build/node_modules/is-negative-zero/.eslintrc deleted file mode 100644 index 9079df72..00000000 --- a/build/node_modules/is-negative-zero/.eslintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-statements": [2, 14], - "no-extra-parens": [1], - "no-magic-numbers": 0 - } -} diff --git a/build/node_modules/is-negative-zero/.github/workflows/node-4+.yml b/build/node_modules/is-negative-zero/.github/workflows/node-4+.yml deleted file mode 100644 index ba174e1d..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/node-4+.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: 'Tests: node.js' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - latest: ${{ steps.set-matrix.outputs.requireds }} - minors: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: '>=4' - - latest: - needs: [matrix] - name: 'latest minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.latest) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - minors: - needs: [matrix, latest] - name: 'non-latest minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.minors) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - - node: - name: 'node 4+' - needs: [latest, minors] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-negative-zero/.github/workflows/node-iojs.yml b/build/node_modules/is-negative-zero/.github/workflows/node-iojs.yml deleted file mode 100644 index f707c3cf..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/node-iojs.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: 'Tests: node.js (io.js)' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - latest: ${{ steps.set-matrix.outputs.requireds }} - minors: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: 'iojs' - - latest: - needs: [matrix] - name: 'latest minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.latest) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - skip-ls-check: true - - minors: - needs: [matrix, latest] - name: 'non-latest minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.minors) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - skip-ls-check: true - - node: - name: 'io.js' - needs: [latest, minors] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-negative-zero/.github/workflows/node-pretest.yml b/build/node_modules/is-negative-zero/.github/workflows/node-pretest.yml deleted file mode 100644 index 3921e0ae..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/node-pretest.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: 'Tests: pretest/posttest' - -on: [pull_request, push] - -jobs: - pretest: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run pretest' - with: - node-version: 'lts/*' - command: 'pretest' - - posttest: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run posttest' - with: - node-version: 'lts/*' - command: 'posttest' diff --git a/build/node_modules/is-negative-zero/.github/workflows/node-zero.yml b/build/node_modules/is-negative-zero/.github/workflows/node-zero.yml deleted file mode 100644 index 2435bf2c..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/node-zero.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: 'Tests: node.js (0.x)' - -on: [pull_request, push] - -jobs: - matrix: - runs-on: ubuntu-latest - outputs: - stable: ${{ steps.set-matrix.outputs.requireds }} - unstable: ${{ steps.set-matrix.outputs.optionals }} - steps: - - uses: ljharb/actions/node/matrix@main - id: set-matrix - with: - preset: '0.x' - - stable: - needs: [matrix] - name: 'stable minors' - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.stable) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }} - skip-ls-check: true - - unstable: - needs: [matrix, stable] - name: 'unstable minors' - continue-on-error: true - if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }} - runs-on: ubuntu-latest - - strategy: - matrix: ${{ fromJson(needs.matrix.outputs.unstable) }} - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/actions/node/run@main - name: 'npm install && npm run tests-only' - with: - node-version: ${{ matrix.node-version }} - command: 'tests-only' - cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }} - skip-ls-check: true - - node: - name: 'node 0.x' - needs: [stable, unstable] - runs-on: ubuntu-latest - steps: - - run: 'echo tests completed' diff --git a/build/node_modules/is-negative-zero/.github/workflows/rebase.yml b/build/node_modules/is-negative-zero/.github/workflows/rebase.yml deleted file mode 100644 index 027aed07..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/rebase.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Automatic Rebase - -on: [pull_request_target] - -jobs: - _: - name: "Automatic Rebase" - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: ljharb/rebase@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/node_modules/is-negative-zero/.github/workflows/require-allow-edits.yml b/build/node_modules/is-negative-zero/.github/workflows/require-allow-edits.yml deleted file mode 100644 index 549d7b48..00000000 --- a/build/node_modules/is-negative-zero/.github/workflows/require-allow-edits.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Require “Allow Edits” - -on: [pull_request_target] - -jobs: - _: - name: "Require “Allow Edits”" - - runs-on: ubuntu-latest - - steps: - - uses: ljharb/require-allow-edits@main diff --git a/build/node_modules/is-negative-zero/.nycrc b/build/node_modules/is-negative-zero/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/is-negative-zero/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-negative-zero/CHANGELOG.md b/build/node_modules/is-negative-zero/CHANGELOG.md deleted file mode 100644 index 71d9b9a9..00000000 --- a/build/node_modules/is-negative-zero/CHANGELOG.md +++ /dev/null @@ -1,117 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v2.0.1](https://github.com/inspect-js/is-negative-zero/compare/v2.0.0...v2.0.1) - 2020-12-04 - -### Commits - -- [Tests] use shared travis-ci configs [`5b92482`](https://github.com/inspect-js/is-negative-zero/commit/5b92482ed26e55e1aafcc6b6310d279958af8204) -- [Tests] up to `node` `v11.7`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.16`, `v5.12`, `v4.9`; use `nvm install-latest-npm`; fix test scripts [`0f5d2f8`](https://github.com/inspect-js/is-negative-zero/commit/0f5d2f85ea7fe83de47f39b6b35e489b866d88a7) -- [Tests] migrate tests to Github Actions [`b80f05a`](https://github.com/inspect-js/is-negative-zero/commit/b80f05adb11a6a3232860fb50272b101aacb504f) -- [Tests] remove `jscs` [`7ccaf41`](https://github.com/inspect-js/is-negative-zero/commit/7ccaf4100281b614d61d7c9122e6f87943a89295) -- [meta] add missing changelog [`992bdde`](https://github.com/inspect-js/is-negative-zero/commit/992bddee362cbae71f2cdfd8666f4774b252412e) -- [readme] fix repo URLs; remove defunct badges [`80fd18d`](https://github.com/inspect-js/is-negative-zero/commit/80fd18d2b0191321afe0e1b572200e4c025eb664) -- [Tests] run `nyc` on all tests [`df26f14`](https://github.com/inspect-js/is-negative-zero/commit/df26f14b0b854d82b0d3ca7b4949811c9f151357) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`d7723aa`](https://github.com/inspect-js/is-negative-zero/commit/d7723aa70e5b478adc36d98e1338abe741c1906a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`9fdaabe`](https://github.com/inspect-js/is-negative-zero/commit/9fdaabecfdb25e6e860e5007a91b60ee0f20734f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`f07eeb2`](https://github.com/inspect-js/is-negative-zero/commit/f07eeb2740037c53f270e95d2f62edc051cafc56) -- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`bd5c751`](https://github.com/inspect-js/is-negative-zero/commit/bd5c751fa4850ba8726dc1c197ed6c843a227b05) -- [actions] add automatic rebasing / merge commit blocking [`5666a91`](https://github.com/inspect-js/is-negative-zero/commit/5666a917db6bdcee63c0a3e28e5e281359975abc) -- [meta] add `auto-changelog` [`f70fb2b`](https://github.com/inspect-js/is-negative-zero/commit/f70fb2b5b9ea53dc52729310717553648292189e) -- [actions] add "Allow Edits" workflow [`2b040a8`](https://github.com/inspect-js/is-negative-zero/commit/2b040a87d362f17d8cab2b0d48058b80e426ad4e) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`; add `safe-publish-latest` [`09e2e53`](https://github.com/inspect-js/is-negative-zero/commit/09e2e537390225c1d1a6912be64267eaec6ea367) -- [Tests] use `npm audit` instead of `nsp` [`7df2669`](https://github.com/inspect-js/is-negative-zero/commit/7df2669013ac9328d424e9d8c82a53a0458f0888) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`4ff97c5`](https://github.com/inspect-js/is-negative-zero/commit/4ff97c5891c7a241a91c03fb54bd83e78570ef22) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`9e8cb7b`](https://github.com/inspect-js/is-negative-zero/commit/9e8cb7bca46d325ecf202187c0fde7da8722bcab) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `nsp` [`70b9888`](https://github.com/inspect-js/is-negative-zero/commit/70b988802a99c84ab7eb8da287bb8ff0efc5c055) -- [Dev Deps] update `jscs` [`59d0c42`](https://github.com/inspect-js/is-negative-zero/commit/59d0c42131020b74e68fd444798b9a3bf247fb2d) -- Add `npm run security` [`eb418ed`](https://github.com/inspect-js/is-negative-zero/commit/eb418ed7e79216808c206388fbd360cc7a75655f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`86a758d`](https://github.com/inspect-js/is-negative-zero/commit/86a758d42eb7d17a18f7f584c337d8820b842758) -- Only apps should have lockfiles [`a0ab621`](https://github.com/inspect-js/is-negative-zero/commit/a0ab6215590bf6adb3eaf1ff9e7c036d72e807ec) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`5c51349`](https://github.com/inspect-js/is-negative-zero/commit/5c513498fc5a8b2fd06f5e0c1b38b8e93c3477ac) -- [meta] add `funding` field [`1d0b2f4`](https://github.com/inspect-js/is-negative-zero/commit/1d0b2f43bf5bf75176859a440346b3e338ee510e) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`9b12367`](https://github.com/inspect-js/is-negative-zero/commit/9b12367706f1c269a3df406c8e2c211558671a15) -- [Dev Deps] update `auto-changelog`, `tape` [`6d98b8d`](https://github.com/inspect-js/is-negative-zero/commit/6d98b8d1f512c3844d4062215c793070084d1164) -- [Dev Deps] Update `tape`, `eslint` [`a258cdb`](https://github.com/inspect-js/is-negative-zero/commit/a258cdb86691725482d1d43a1f9e7953c3c6733f) -- [Dev Deps] update `auto-changelog`; add `aud` [`2ca2afb`](https://github.com/inspect-js/is-negative-zero/commit/2ca2afb9efef4ebc8b3c19046ab1ab3ad516ea9a) -- Test up to `io.js` `v3.0` [`1254ae8`](https://github.com/inspect-js/is-negative-zero/commit/1254ae80b7706616331ac914654d7a17bff31039) -- [Dev Deps] update `auto-changelog` [`4b54722`](https://github.com/inspect-js/is-negative-zero/commit/4b547228fceaae8f9eccabc9ad8a49046492348d) -- [Tests] only audit prod deps [`86d298b`](https://github.com/inspect-js/is-negative-zero/commit/86d298b56db90f81617ee5d942476eda34afb374) -- [Dev Deps] update `tape` [`3a47e27`](https://github.com/inspect-js/is-negative-zero/commit/3a47e2730f889539f666ef0eb09a93fb9c80bfd1) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`128d9bd`](https://github.com/inspect-js/is-negative-zero/commit/128d9bd4c12385fb5e478ac3dd3138fa4360a777) - -## [v2.0.0](https://github.com/inspect-js/is-negative-zero/compare/v1.0.0...v2.0.0) - 2015-07-24 - -### Commits - -- Update `tape`, `eslint`; use my personal shared `eslint` config. [`648d002`](https://github.com/inspect-js/is-negative-zero/commit/648d0029b177886428a11b07307f233ae2d3175b) -- Add `npm run eslint` [`5a52d80`](https://github.com/inspect-js/is-negative-zero/commit/5a52d80ab052e377044b9b181991a32afaaa3090) -- Using my standard jscs.json file [`5a667d9`](https://github.com/inspect-js/is-negative-zero/commit/5a667d9f8b7402ca3bd134080cd4435b5c7f1462) -- Adding `npm run lint` [`9a85ed9`](https://github.com/inspect-js/is-negative-zero/commit/9a85ed934da65d8733a38bf6ad3c89fd62115194) -- Update `tape`, `covert`, `jscs` [`c6cd3a6`](https://github.com/inspect-js/is-negative-zero/commit/c6cd3a64ea5b98100e10537549f50a9eeadc30ec) -- Update `eslint` [`e9c9b6e`](https://github.com/inspect-js/is-negative-zero/commit/e9c9b6e9623f021b7f3ae4091bf9ea2571ab02b4) -- Test on latest `io.js` [`2f7c8a9`](https://github.com/inspect-js/is-negative-zero/commit/2f7c8a9d174066400c072841d7bcf02cf90f8ebf) -- Adding license and downloads badges [`717087a`](https://github.com/inspect-js/is-negative-zero/commit/717087a013b4cfc9dc7847d3d4a64faf19341be4) -- Remove Number type coercion. [`481295d`](https://github.com/inspect-js/is-negative-zero/commit/481295dbd09dbf81d196dc77382f1b92f534de3f) -- Test up to `io.js` `v2.1` [`139a84a`](https://github.com/inspect-js/is-negative-zero/commit/139a84a3dbdec29682044c6e7ac884a7382ae6e1) -- Update `eslint` [`2f5fbfb`](https://github.com/inspect-js/is-negative-zero/commit/2f5fbfbc436ccd8676fc36fcd9f0edcdda33a1e7) -- Update `eslint` [`53cb4c5`](https://github.com/inspect-js/is-negative-zero/commit/53cb4c5eccecdf2d874e78e5c38cca762ed76a9d) -- Test on `io.js` `v2.2` [`98a1824`](https://github.com/inspect-js/is-negative-zero/commit/98a1824c86366f8a03cf303f46acecd67409f94b) -- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`772d6cd`](https://github.com/inspect-js/is-negative-zero/commit/772d6cdf397e6fc1b26e5ed5f279d07a5ead6df8) -- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`3e6147e`](https://github.com/inspect-js/is-negative-zero/commit/3e6147ebb5ecdfda4a2bffa441572fe017c7bb73) -- Use SVG badges instead of PNG [`d986cb4`](https://github.com/inspect-js/is-negative-zero/commit/d986cb450e5bd4f373041255b69e18f47c252a1e) -- Update `tape`, `jscs` [`9f9d7e7`](https://github.com/inspect-js/is-negative-zero/commit/9f9d7e751bcf4ceeed8e36e75e31d29c76326b3f) -- Update `jscs` [`079eaf6`](https://github.com/inspect-js/is-negative-zero/commit/079eaf699d53e7e32c54e5233259a00f5f494d9a) -- Update `tape`, `jscs` [`cffe3fc`](https://github.com/inspect-js/is-negative-zero/commit/cffe3fc17c6bfaa6996bf7402446b160631a04b3) -- Update `tape`, `jscs` [`3a16616`](https://github.com/inspect-js/is-negative-zero/commit/3a166165ae8770d59c296794d28547379cebec58) -- Use consistent quotes [`9509a81`](https://github.com/inspect-js/is-negative-zero/commit/9509a8110027b12c5762ba48d03b649a921847d5) -- Test on `io.js` `v2.4` [`a9150a3`](https://github.com/inspect-js/is-negative-zero/commit/a9150a3397db339d992e9e4e6ddb52d1237fd617) -- Test on `io.js` `v2.3` [`36d7acf`](https://github.com/inspect-js/is-negative-zero/commit/36d7acf5bb9193a2b35585e2c49ae8be9f45a55e) -- Lock covert to v1.0.0. [`29d8917`](https://github.com/inspect-js/is-negative-zero/commit/29d89171c3aad69ace372edbf641ec3a5468c760) -- Updating jscs [`fe09c8a`](https://github.com/inspect-js/is-negative-zero/commit/fe09c8a6d16c637ecd83a9a8a7f6192faef0754a) -- Updating jscs [`5877bc7`](https://github.com/inspect-js/is-negative-zero/commit/5877bc7c2ed44c1ecc5d31e1c484c523450722d8) -- Running linter as part of tests [`9e77756`](https://github.com/inspect-js/is-negative-zero/commit/9e777563905f511d915ec7257e2637811b911bd6) -- Updating covert [`520a695`](https://github.com/inspect-js/is-negative-zero/commit/520a695164465b88c76860a638baafd4192bce5c) - -## [v1.0.0](https://github.com/inspect-js/is-negative-zero/compare/v0.1.1...v1.0.0) - 2014-08-08 - -### Commits - -- Updating tape [`31d1942`](https://github.com/inspect-js/is-negative-zero/commit/31d19422ecd9d453677851a9d5a8d9372a16fb39) -- Updating tape [`e7143bf`](https://github.com/inspect-js/is-negative-zero/commit/e7143bf3b67d8881b1b6ee0444637647d7bb1d2b) - -## [v0.1.1](https://github.com/inspect-js/is-negative-zero/compare/v0.1.0...v0.1.1) - 2014-05-13 - -### Merged - -- Simplify code [`#1`](https://github.com/inspect-js/is-negative-zero/pull/1) - -### Commits - -- Adding a trailing newline [`61fb37f`](https://github.com/inspect-js/is-negative-zero/commit/61fb37f677e871cca53d9309e765d808ddddfd5a) - -## [v0.1.0](https://github.com/inspect-js/is-negative-zero/compare/v0.0.0...v0.1.0) - 2014-05-13 - -### Commits - -- Make sure old and unstable nodes don't break Travis [`f627215`](https://github.com/inspect-js/is-negative-zero/commit/f627215527a95dc1ca014600650e00f15fe122c5) -- Updating deps [`b502f48`](https://github.com/inspect-js/is-negative-zero/commit/b502f48e807d7671cb07e2ca247ae2daa62e4165) -- Oops, negative numbers were negative zero! [`746cb97`](https://github.com/inspect-js/is-negative-zero/commit/746cb975d82c0fa0c5058e8e031807f9afcfd6db) -- Updating covert [`99ef4ed`](https://github.com/inspect-js/is-negative-zero/commit/99ef4ed97d2f76f2a5afbef029bf794f1b5bcffa) -- Updating tape [`ee9cfc2`](https://github.com/inspect-js/is-negative-zero/commit/ee9cfc2fd0039bdb65b6493ce0b8e47d18aa17cd) -- Testing on node 0.6 again [`6a9bf0a`](https://github.com/inspect-js/is-negative-zero/commit/6a9bf0a09e210cca09c7a8a225d08ef1e6789b5a) - -## v0.0.0 - 2014-01-19 - -### Commits - -- package.json [`8411d92`](https://github.com/inspect-js/is-negative-zero/commit/8411d92ec787fd522a1b5e65154ae88e9024a23f) -- read me [`5c8bf3c`](https://github.com/inspect-js/is-negative-zero/commit/5c8bf3ce4867dbf2997ef01ea6b712aa294ec959) -- Initial commit [`c06f7dc`](https://github.com/inspect-js/is-negative-zero/commit/c06f7dcf926f5b35ba678787a0f16cdd7b544054) -- Tests. [`5c554d4`](https://github.com/inspect-js/is-negative-zero/commit/5c554d405bfb323a7413fde395d8dc39c5316356) -- Travis CI [`334d000`](https://github.com/inspect-js/is-negative-zero/commit/334d000941fc926493cc7dbdb4e5f7ae481a311b) -- Implementation. [`4ef4491`](https://github.com/inspect-js/is-negative-zero/commit/4ef449189c36d471d283e40aa20a8ebfa4985882) diff --git a/build/node_modules/is-negative-zero/LICENSE b/build/node_modules/is-negative-zero/LICENSE deleted file mode 100644 index 47b7b507..00000000 --- a/build/node_modules/is-negative-zero/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-negative-zero/README.md b/build/node_modules/is-negative-zero/README.md deleted file mode 100644 index b60b4d36..00000000 --- a/build/node_modules/is-negative-zero/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# is-negative-zero [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value negative zero? === will lie to you. - -## Example - -```js -var isNegativeZero = require('is-negative-zero'); -var assert = require('assert'); - -assert.notOk(isNegativeZero(undefined)); -assert.notOk(isNegativeZero(null)); -assert.notOk(isNegativeZero(false)); -assert.notOk(isNegativeZero(true)); -assert.notOk(isNegativeZero(0)); -assert.notOk(isNegativeZero(42)); -assert.notOk(isNegativeZero(Infinity)); -assert.notOk(isNegativeZero(-Infinity)); -assert.notOk(isNegativeZero(NaN)); -assert.notOk(isNegativeZero('foo')); -assert.notOk(isNegativeZero(function () {})); -assert.notOk(isNegativeZero([])); -assert.notOk(isNegativeZero({})); - -assert.ok(isNegativeZero(-0)); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-negative-zero -[2]: http://versionbadg.es/inspect-js/is-negative-zero.svg -[3]: https://travis-ci.org/inspect-js/is-negative-zero.svg -[4]: https://travis-ci.org/inspect-js/is-negative-zero -[5]: https://david-dm.org/inspect-js/is-negative-zero.svg -[6]: https://david-dm.org/inspect-js/is-negative-zero -[7]: https://david-dm.org/inspect-js/is-negative-zero/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-negative-zero#info=devDependencies -[11]: https://nodei.co/npm/is-negative-zero.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-negative-zero.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-negative-zero.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-negative-zero - diff --git a/build/node_modules/is-negative-zero/index.js b/build/node_modules/is-negative-zero/index.js deleted file mode 100644 index 400e5d1f..00000000 --- a/build/node_modules/is-negative-zero/index.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -module.exports = function isNegativeZero(number) { - return number === 0 && (1 / number) === -Infinity; -}; - diff --git a/build/node_modules/is-negative-zero/package.json b/build/node_modules/is-negative-zero/package.json deleted file mode 100644 index c0d1bb36..00000000 --- a/build/node_modules/is-negative-zero/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_from": "is-negative-zero@^2.0.1", - "_id": "is-negative-zero@2.0.1", - "_inBundle": false, - "_integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "_location": "/is-negative-zero", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-negative-zero@^2.0.1", - "name": "is-negative-zero", - "escapedName": "is-negative-zero", - "rawSpec": "^2.0.1", - "saveSpec": null, - "fetchSpec": "^2.0.1" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "_shasum": "3de746c18dda2319241a53675908d8f766f11c24", - "_spec": "is-negative-zero@^2.0.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-negative-zero/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Is this value negative zero? === will lie to you", - "devDependencies": { - "@ljharb/eslint-config": "^17.3.0", - "aud": "^1.1.3", - "auto-changelog": "^2.2.1", - "eslint": "^7.14.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-negative-zero", - "keywords": [ - "is", - "negative", - "zero", - "negative zero", - "number", - "positive", - "0", - "-0" - ], - "license": "MIT", - "main": "index.js", - "name": "is-negative-zero", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-negative-zero.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..12.0", - "opera/15.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "2.0.1" -} diff --git a/build/node_modules/is-negative-zero/test/index.js b/build/node_modules/is-negative-zero/test/index.js deleted file mode 100644 index 8fd7d16b..00000000 --- a/build/node_modules/is-negative-zero/test/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isNegativeZero = require('../'); - -test('not negative zero', function (t) { - t.notOk(isNegativeZero(), 'undefined is not negative zero'); - t.notOk(isNegativeZero(null), 'null is not negative zero'); - t.notOk(isNegativeZero(false), 'false is not negative zero'); - t.notOk(isNegativeZero(true), 'true is not negative zero'); - t.notOk(isNegativeZero(0), 'positive zero is not negative zero'); - t.notOk(isNegativeZero(Infinity), 'Infinity is not negative zero'); - t.notOk(isNegativeZero(-Infinity), '-Infinity is not negative zero'); - t.notOk(isNegativeZero(NaN), 'NaN is not negative zero'); - t.notOk(isNegativeZero('foo'), 'string is not negative zero'); - t.notOk(isNegativeZero([]), 'array is not negative zero'); - t.notOk(isNegativeZero({}), 'object is not negative zero'); - t.notOk(isNegativeZero(function () {}), 'function is not negative zero'); - t.notOk(isNegativeZero(-1), '-1 is not negative zero'); - - t.end(); -}); - -test('negative zero', function (t) { - t.ok(isNegativeZero(-0), 'negative zero is negative zero'); - t.end(); -}); - diff --git a/build/node_modules/is-number-object/.editorconfig b/build/node_modules/is-number-object/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/is-number-object/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-number-object/.eslintignore b/build/node_modules/is-number-object/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-number-object/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-number-object/.eslintrc b/build/node_modules/is-number-object/.eslintrc deleted file mode 100644 index a6dec947..00000000 --- a/build/node_modules/is-number-object/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "func-name-matching": 0, - }, -} diff --git a/build/node_modules/is-number-object/.github/FUNDING.yml b/build/node_modules/is-number-object/.github/FUNDING.yml deleted file mode 100644 index 17f4dc55..00000000 --- a/build/node_modules/is-number-object/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-number-object -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-number-object/.nycrc b/build/node_modules/is-number-object/.nycrc deleted file mode 100644 index bdd626ce..00000000 --- a/build/node_modules/is-number-object/.nycrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-number-object/CHANGELOG.md b/build/node_modules/is-number-object/CHANGELOG.md deleted file mode 100644 index d6954eb1..00000000 --- a/build/node_modules/is-number-object/CHANGELOG.md +++ /dev/null @@ -1,105 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.5](https://github.com/inspect-js/is-number-object/compare/v1.0.4...v1.0.5) - 2021-05-07 - -### Commits - -- [Tests] migrate tests to Github Actions [`9666737`](https://github.com/inspect-js/is-number-object/commit/96667372f8e36f70516218f86318f957f8c175ad) -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`7815ce2`](https://github.com/inspect-js/is-number-object/commit/7815ce21cb5662c2d1651b3ec302f186aa8a016b) -- [meta] do not publish github action workflow files [`80ccb75`](https://github.com/inspect-js/is-number-object/commit/80ccb7509f91732675b018cc1a636d649a92889e) -- [Tests] run `nyc` on all tests [`c9ffb74`](https://github.com/inspect-js/is-number-object/commit/c9ffb74443690ef22f9aa7dd35855fd1e3be5184) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`7e84161`](https://github.com/inspect-js/is-number-object/commit/7e84161d089c87ef42e3639ac1889642624ebd28) -- [readme] add actions and codecov badges [`0c5ec7a`](https://github.com/inspect-js/is-number-object/commit/0c5ec7aa87dac27bdcda2365124c3aa0ccf9c278) -- [actions] add Require Allow Edits workflow [`dd0fb74`](https://github.com/inspect-js/is-number-object/commit/dd0fb74b2ecb630ea7778a6f06dcc017323a3c1d) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-symbols`, `tape` [`2d36f80`](https://github.com/inspect-js/is-number-object/commit/2d36f809a7b9896958b0b0f3b69be0067caedb45) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`77d3140`](https://github.com/inspect-js/is-number-object/commit/77d3140557d483e467ce070b21bf384e9a7562d5) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`75d4abf`](https://github.com/inspect-js/is-number-object/commit/75d4abf34168e69d73f621c696a16179ddc0873c) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`0c2a917`](https://github.com/inspect-js/is-number-object/commit/0c2a917e4802b102888759fad912bd9faa5587f7) -- [Fix] do not use `Object.prototype.toString` when `Symbol.toStringTag` is shammed [`8b6ebc4`](https://github.com/inspect-js/is-number-object/commit/8b6ebc489db14a0c369214e081413f326fc0d598) -- [Dev Deps] update `auto-changelog`, `tape`; add `aud` [`62045fc`](https://github.com/inspect-js/is-number-object/commit/62045fcaddb9e4d3ef81068e99d07d21cd62023b) -- [actions] use checkout v2; remove unneeded env [`d48cd06`](https://github.com/inspect-js/is-number-object/commit/d48cd06720ea71f278a6d35c6f0a8ec04242a58f) -- [meta] use `prepublishOnly` script for npm 7+ [`827ab0d`](https://github.com/inspect-js/is-number-object/commit/827ab0d52d25f46d232ae7442ece270dec2de1df) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`bfed500`](https://github.com/inspect-js/is-number-object/commit/bfed500e6cc3cd3b9e7ffea78429c59857035791) -- [meta] remove explicit audit level config [`ce23e5e`](https://github.com/inspect-js/is-number-object/commit/ce23e5e49fbebe190267d8c99ddfd880a963b7ee) -- [meta] gitignore coverage output [`f1ad981`](https://github.com/inspect-js/is-number-object/commit/f1ad98106549c1c88322d8cb206068ea4c5bd424) - -## [v1.0.4](https://github.com/inspect-js/is-number-object/compare/v1.0.3...v1.0.4) - 2019-12-18 - -### Commits - -- [Tests] use shared travis-ci configs [`792b5aa`](https://github.com/inspect-js/is-number-object/commit/792b5aa5e7313ddf5507f7283bb7d5d5c646b11b) -- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v5.12`, `v4.9`; use `nvm install-latest-npm` [`dc66db7`](https://github.com/inspect-js/is-number-object/commit/dc66db7dd1eca0263f6602597eb40601519e912e) -- Update `eslint`, `tape`, `semver`; use my personal shared `eslint` config [`7660fed`](https://github.com/inspect-js/is-number-object/commit/7660fed03a7060eb5c91e74b9a17303d4fac1056) -- [Tests] remove `jscs` [`f1fee97`](https://github.com/inspect-js/is-number-object/commit/f1fee97423478bcc653c844fadda55138d9b9a54) -- [meta] add `auto-changelog` [`4b1c225`](https://github.com/inspect-js/is-number-object/commit/4b1c2253770eb18761a1e8b157772028d6f742c4) -- [meta] remove unused Makefile and associated utilities [`379b979`](https://github.com/inspect-js/is-number-object/commit/379b9793d9c61d7889e53bd9de9578dca9964ebc) -- Update `covert`, `jscs`, `eslint`, `semver` [`16d2af8`](https://github.com/inspect-js/is-number-object/commit/16d2af82a6c93aee614f7a4b2c468411c743e95f) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `is`, `replace`, `semver`, `tape` [`21c0f04`](https://github.com/inspect-js/is-number-object/commit/21c0f0431984b87443c6acb9f003368feb7b4368) -- Update `is`, `tape`, `covert`, `jscs`, `editorconfig-tools`, `nsp`, `eslint`, `semver`. Add `replace`. Use `^` instead of `~`. [`19d6ee3`](https://github.com/inspect-js/is-number-object/commit/19d6ee3a3d4a87764d57316804fd8b882ba5197c) -- Update `eslint` [`d32754b`](https://github.com/inspect-js/is-number-object/commit/d32754bcca0033e01eba531c4353d1239e992203) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace` [`1df8165`](https://github.com/inspect-js/is-number-object/commit/1df8165dd63d9f2f78ccb78e905d0a6b3e302884) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`675372b`](https://github.com/inspect-js/is-number-object/commit/675372b115fb20b5034f40bcbb5560c6c0512746) -- [readme] clean up readme; remove testling; fix repo URLs [`80e29c4`](https://github.com/inspect-js/is-number-object/commit/80e29c4d6d0811fc361e95ee83b81280bf3ae3f5) -- [Tests] up to `node` `v12.7`, `v10.16`, `v8.16` [`287a968`](https://github.com/inspect-js/is-number-object/commit/287a9687b1fc3d091ec231c06f19a19ff7b0e8f6) -- Test on latest `iojs` and `node` versions. [`11c98a2`](https://github.com/inspect-js/is-number-object/commit/11c98a23b232cb21c7daab797fd63875c2970681) -- [actions] add automatic rebasing / merge commit blocking [`022d026`](https://github.com/inspect-js/is-number-object/commit/022d026129df445f239ba2ecd8d47a2786242d75) -- [meta] create FUNDING.yml [`7f52710`](https://github.com/inspect-js/is-number-object/commit/7f527107168aad7108b7c262d295dcf44e03214d) -- [Dev Deps] update `is`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`bc8cd50`](https://github.com/inspect-js/is-number-object/commit/bc8cd508fe4440168f9b049be3ddf93c56c06c49) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`1f9200b`](https://github.com/inspect-js/is-number-object/commit/1f9200b7c56840dc23eeeca5d0ee4f64a0446e08) -- [Tests] up to `node` `v12.11` [`706d50a`](https://github.com/inspect-js/is-number-object/commit/706d50a779b90feb3f4d2ae88d8189d19b913073) -- [Dev Deps] update `jscs` [`e3591a4`](https://github.com/inspect-js/is-number-object/commit/e3591a445b1af25d46632eafea51efa07b4eb6dc) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`baf4ee7`](https://github.com/inspect-js/is-number-object/commit/baf4ee749fb65ec12e9cab102e77aa0e14312109) -- Update `nsp`, `eslint` [`61b18d5`](https://github.com/inspect-js/is-number-object/commit/61b18d5b44542fddf4950534d506b20d8c8b1f44) -- Update `eslint`, `semver` [`52e61bd`](https://github.com/inspect-js/is-number-object/commit/52e61bd4334c0a1afacd147fd0bc1e2c1be10df5) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `has-symbols`; add `safe-publish-latest` [`79db7f6`](https://github.com/inspect-js/is-number-object/commit/79db7f610d2bcf5f0d6e8ca834f7402504101072) -- Only apps should have lockfiles [`677b9b4`](https://github.com/inspect-js/is-number-object/commit/677b9b4fb6ad9d7b984cb0f89c8b5a6df143b29a) -- Test on `io.js` `v2.2` [`e8a38b2`](https://github.com/inspect-js/is-number-object/commit/e8a38b2fe73b841b0ed55d9f60573d460a4f2a62) -- [meta] add `funding` field [`85315e7`](https://github.com/inspect-js/is-number-object/commit/85315e75c119a2aef70a766f2ddc1079b64d006b) -- [Dev Deps] update `eslint`, `tape` [`f3581aa`](https://github.com/inspect-js/is-number-object/commit/f3581aaea310546f6ee4612990468d39f058d320) -- [Tests] use `eclint` instead of `editorconfig-tools` [`7b53680`](https://github.com/inspect-js/is-number-object/commit/7b5368071000eb1c715aeeee5ff47ffdbee9fe5c) -- [Dev Deps] update `semver`, `tape` [`d6b524a`](https://github.com/inspect-js/is-number-object/commit/d6b524ac2e8c0240c436cbe8828671e383d51fd5) -- [Dev Deps] Update `tape`, `eslint` [`be19203`](https://github.com/inspect-js/is-number-object/commit/be19203dee0aa70ff8f09823bf880a38b824e1ed) -- Test up to `io.js` `v2.1` [`feb7ba6`](https://github.com/inspect-js/is-number-object/commit/feb7ba63a0816f1d36419ce240f96e9b4e4c90ba) -- Test up to `io.js` `v3.0` [`7be1f0a`](https://github.com/inspect-js/is-number-object/commit/7be1f0a25dc59b6606be9ee1ace38cb7039a59d2) -- [Dev Deps] update `tape` [`d9a2318`](https://github.com/inspect-js/is-number-object/commit/d9a2318bc82477e9321e961def11e28d364e5562) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`a6cd411`](https://github.com/inspect-js/is-number-object/commit/a6cd411c6bd92691a48b52683afce584c2c6b21b) -- Test on `io.js` `v2.4` [`46c2e7f`](https://github.com/inspect-js/is-number-object/commit/46c2e7f2ce8ad7f8ab3c1da827d93fc2780eff06) -- Test on `io.js` `v2.3` [`9c344b0`](https://github.com/inspect-js/is-number-object/commit/9c344b0df83628908a1f776a3f2e5fc4fae1d4d2) -- Fix tests for faked @@toStringTag [`f8c446e`](https://github.com/inspect-js/is-number-object/commit/f8c446e9fc320c23807717356e259529f494b9f3) - -## [v1.0.3](https://github.com/inspect-js/is-number-object/compare/v1.0.2...v1.0.3) - 2015-01-29 - -### Commits - -- If @@toStringTag is not present, use the old-school Object#toString test. [`9b2a4df`](https://github.com/inspect-js/is-number-object/commit/9b2a4df6ccf903e89198d4244eeb7f47a7056327) - -## [v1.0.2](https://github.com/inspect-js/is-number-object/compare/v1.0.1...v1.0.2) - 2015-01-29 - -### Commits - -- Improve optimizability of the non-try/catch part. [`7e6be2f`](https://github.com/inspect-js/is-number-object/commit/7e6be2fd2346557fc81bd544ac8745021c50e266) -- Fix package.json [`4f2ebea`](https://github.com/inspect-js/is-number-object/commit/4f2ebeae09c45e1eefeb2c10a011ff2ef0aca921) - -## [v1.0.1](https://github.com/inspect-js/is-number-object/compare/v1.0.0...v1.0.1) - 2015-01-29 - -### Commits - -- Use Object() instead of new Number() [`1aaa746`](https://github.com/inspect-js/is-number-object/commit/1aaa746c26878a0f698aabea4d88215311f2a38d) -- Add early exits for typeof number, or typeof not "object". [`eae4337`](https://github.com/inspect-js/is-number-object/commit/eae43375d3f88e04bb10eabd954e5a6b66ad5305) - -## v1.0.0 - 2015-01-28 - -### Commits - -- Dotfiles. [`9c74e3e`](https://github.com/inspect-js/is-number-object/commit/9c74e3eb2b10398d4022de7c4015531e874f06c8) -- `make release` [`a99e5ae`](https://github.com/inspect-js/is-number-object/commit/a99e5aeb3995a7d543fc5833722bc02011fabad6) -- package.json [`4fed9ef`](https://github.com/inspect-js/is-number-object/commit/4fed9ef7c35ccfc45ca8acd3c92c9cb91c7daa6d) -- Read me [`c91d6ba`](https://github.com/inspect-js/is-number-object/commit/c91d6ba00de79eaaac5fec7c9d8866d61d0abb62) -- Initial commit [`629fb96`](https://github.com/inspect-js/is-number-object/commit/629fb969f076e0802c799b368c7b02556bb0750e) -- Tests. [`a39de62`](https://github.com/inspect-js/is-number-object/commit/a39de624785cc204ed7c0ea5518f1c878870ceb1) -- Implementation. [`aedd91e`](https://github.com/inspect-js/is-number-object/commit/aedd91e6fc23f00852ad1266b6c19f32b7f93a22) diff --git a/build/node_modules/is-number-object/LICENSE b/build/node_modules/is-number-object/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-number-object/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-number-object/README.md b/build/node_modules/is-number-object/README.md deleted file mode 100644 index a5f1e5b1..00000000 --- a/build/node_modules/is-number-object/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# is-number-object [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS Number object? This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isNumber = require('is-number-object'); -var assert = require('assert'); - -assert.notOk(isNumber(undefined)); -assert.notOk(isNumber(null)); -assert.notOk(isNumber(false)); -assert.notOk(isNumber(true)); -assert.notOk(isNumber('foo')); -assert.notOk(isNumber(function () {})); -assert.notOk(isNumber([])); -assert.notOk(isNumber({})); -assert.notOk(isNumber(/a/g)); -assert.notOk(isNumber(new RegExp('a', 'g'))); -assert.notOk(isNumber(new Date())); - -assert.ok(isNumber(42)); -assert.ok(isNumber(NaN)); -assert.ok(isNumber(Infinity)); -assert.ok(isNumber(new Number(42))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-number-object -[2]: https://versionbadg.es/inspect-js/is-number-object.svg -[5]: https://david-dm.org/inspect-js/is-number-object.svg -[6]: https://david-dm.org/inspect-js/is-number-object -[7]: https://david-dm.org/inspect-js/is-number-object/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-number-object#info=devDependencies -[11]: https://nodei.co/npm/is-number-object.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-number-object.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-number-object.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-number-object -[codecov-image]: https://codecov.io/gh/inspect-js/is-number-object/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-number-object/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-number-object -[actions-url]: https://github.com/inspect-js/is-number-object/actions diff --git a/build/node_modules/is-number-object/index.js b/build/node_modules/is-number-object/index.js deleted file mode 100644 index 637a4b98..00000000 --- a/build/node_modules/is-number-object/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var numToStr = Number.prototype.toString; -var tryNumberObject = function tryNumberObject(value) { - try { - numToStr.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var numClass = '[object Number]'; -var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; - -module.exports = function isNumberObject(value) { - if (typeof value === 'number') { - return true; - } - if (typeof value !== 'object') { - return false; - } - return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass; -}; diff --git a/build/node_modules/is-number-object/package.json b/build/node_modules/is-number-object/package.json deleted file mode 100644 index e26981df..00000000 --- a/build/node_modules/is-number-object/package.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "_from": "is-number-object@^1.0.4", - "_id": "is-number-object@1.0.5", - "_inBundle": false, - "_integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "_location": "/is-number-object", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-number-object@^1.0.4", - "name": "is-number-object", - "escapedName": "is-number-object", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/which-boxed-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "_shasum": "6edfaeed7950cff19afedce9fbfca9ee6dd289eb", - "_spec": "is-number-object@^1.0.4", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/which-boxed-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-number-object/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Is this value a JS Number object? This module works cross-realm/iframe, and despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^3.12.0", - "eclint": "^2.8.1", - "eslint": "^7.25.0", - "foreach": "^2.0.5", - "has-symbols": "^1.0.2", - "indexof": "^0.0.1", - "is": "^3.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-number-object#readme", - "keywords": [ - "Number", - "ES6", - "toStringTag", - "@@toStringTag", - "Number object" - ], - "license": "MIT", - "main": "index.js", - "name": "is-number-object", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-number-object.git" - }, - "scripts": { - "eccheck": "eclint check *.js **/*.js > /dev/null", - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.5" -} diff --git a/build/node_modules/is-number-object/test/corejs.js b/build/node_modules/is-number-object/test/corejs.js deleted file mode 100644 index 73f0c89c..00000000 --- a/build/node_modules/is-number-object/test/corejs.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('core-js'); - -require('./'); diff --git a/build/node_modules/is-number-object/test/index.js b/build/node_modules/is-number-object/test/index.js deleted file mode 100644 index 04ada7dd..00000000 --- a/build/node_modules/is-number-object/test/index.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isNumber = require('../'); -var hasSymbols = require('has-symbols/shams')(); - -test('not Numbers', function (t) { - t.notOk(isNumber(), 'undefined is not Number'); - t.notOk(isNumber(null), 'null is not Number'); - t.notOk(isNumber(false), 'false is not Number'); - t.notOk(isNumber(true), 'true is not Number'); - t.notOk(isNumber('foo'), 'string is not Number'); - t.notOk(isNumber([]), 'array is not Number'); - t.notOk(isNumber({}), 'object is not Number'); - t.notOk(isNumber(function () {}), 'function is not Number'); - t.notOk(isNumber(/a/g), 'regex literal is not Number'); - t.notOk(isNumber(new RegExp('a', 'g')), 'regex object is not Number'); - t.notOk(isNumber(new Date()), 'new Date() is not Number'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var fakeNumber = { - toString: function () { return '7'; }, - valueOf: function () { return 42; } - }; - fakeNumber[Symbol.toStringTag] = 'Number'; - t.notOk(isNumber(fakeNumber), 'fake Number with @@toStringTag "Number" is not Number'); - t.end(); -}); - -test('Numbers', function (t) { - t.ok(isNumber(42), 'number is Number'); - t.ok(isNumber(Object(42)), 'number object is Number'); - t.ok(isNumber(NaN), 'NaN is Number'); - t.ok(isNumber(Infinity), 'Infinity is Number'); - t.end(); -}); diff --git a/build/node_modules/is-number/LICENSE b/build/node_modules/is-number/LICENSE new file mode 100644 index 00000000..9af4a67d --- /dev/null +++ b/build/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/is-number/README.md b/build/node_modules/is-number/README.md new file mode 100644 index 00000000..eb8149e8 --- /dev/null +++ b/build/node_modules/is-number/README.md @@ -0,0 +1,187 @@ +# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number) + +> Returns true if the value is a finite number. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-number +``` + +## Why is this needed? + +In JavaScript, it's not always as straightforward as it should be to reliably check if a value is a number. It's common for devs to use `+`, `-`, or `Number()` to cast a string value to a number (for example, when values are returned from user input, regex matches, parsers, etc). But there are many non-intuitive edge cases that yield unexpected results: + +```js +console.log(+[]); //=> 0 +console.log(+''); //=> 0 +console.log(+' '); //=> 0 +console.log(typeof NaN); //=> 'number' +``` + +This library offers a performant way to smooth out edge cases like these. + +## Usage + +```js +const isNumber = require('is-number'); +``` + +See the [tests](./test.js) for more examples. + +### true + +```js +isNumber(5e3); // true +isNumber(0xff); // true +isNumber(-1.1); // true +isNumber(0); // true +isNumber(1); // true +isNumber(1.1); // true +isNumber(10); // true +isNumber(10.10); // true +isNumber(100); // true +isNumber('-1.1'); // true +isNumber('0'); // true +isNumber('012'); // true +isNumber('0xff'); // true +isNumber('1'); // true +isNumber('1.1'); // true +isNumber('10'); // true +isNumber('10.10'); // true +isNumber('100'); // true +isNumber('5e3'); // true +isNumber(parseInt('012')); // true +isNumber(parseFloat('012')); // true +``` + +### False + +Everything else is false, as you would expect: + +```js +isNumber(Infinity); // false +isNumber(NaN); // false +isNumber(null); // false +isNumber(undefined); // false +isNumber(''); // false +isNumber(' '); // false +isNumber('foo'); // false +isNumber([1]); // false +isNumber([]); // false +isNumber(function () {}); // false +isNumber({}); // false +``` + +## Release history + +### 7.0.0 + +* Refactor. Now uses `.isFinite` if it exists. +* Performance is about the same as v6.0 when the value is a string or number. But it's now 3x-4x faster when the value is not a string or number. + +### 6.0.0 + +* Optimizations, thanks to @benaadams. + +### 5.0.0 + +**Breaking changes** + +* removed support for `instanceof Number` and `instanceof String` + +## Benchmarks + +As with all benchmarks, take these with a grain of salt. See the [benchmarks](./benchmark/index.js) for more detail. + +``` +# all +v7.0 x 413,222 ops/sec ±2.02% (86 runs sampled) +v6.0 x 111,061 ops/sec ±1.29% (85 runs sampled) +parseFloat x 317,596 ops/sec ±1.36% (86 runs sampled) +fastest is 'v7.0' + +# string +v7.0 x 3,054,496 ops/sec ±1.05% (89 runs sampled) +v6.0 x 2,957,781 ops/sec ±0.98% (88 runs sampled) +parseFloat x 3,071,060 ops/sec ±1.13% (88 runs sampled) +fastest is 'parseFloat,v7.0' + +# number +v7.0 x 3,146,895 ops/sec ±0.89% (89 runs sampled) +v6.0 x 3,214,038 ops/sec ±1.07% (89 runs sampled) +parseFloat x 3,077,588 ops/sec ±1.07% (87 runs sampled) +fastest is 'v6.0' +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") +* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.") +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 49 | [jonschlinkert](https://github.com/jonschlinkert) | +| 5 | [charlike-old](https://github.com/charlike-old) | +| 1 | [benaadams](https://github.com/benaadams) | +| 1 | [realityking](https://github.com/realityking) | + +### Author + +**Jon Schlinkert** + +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 15, 2018._ \ No newline at end of file diff --git a/build/node_modules/is-number/index.js b/build/node_modules/is-number/index.js new file mode 100644 index 00000000..27f19b75 --- /dev/null +++ b/build/node_modules/is-number/index.js @@ -0,0 +1,18 @@ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; diff --git a/build/node_modules/is-number/package.json b/build/node_modules/is-number/package.json new file mode 100644 index 00000000..a615e46a --- /dev/null +++ b/build/node_modules/is-number/package.json @@ -0,0 +1,122 @@ +{ + "_from": "is-number@^7.0.0", + "_id": "is-number@7.0.0", + "_inBundle": false, + "_integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "_location": "/is-number", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-number@^7.0.0", + "name": "is-number", + "escapedName": "is-number", + "rawSpec": "^7.0.0", + "saveSpec": null, + "fetchSpec": "^7.0.0" + }, + "_requiredBy": [ + "/to-regex-range" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-number/-/is-number-7.0.0.tgz", + "_shasum": "7535345b896734d5f80c4d06c50955527a14f12b", + "_spec": "is-number@^7.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/to-regex-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Olsten Larck", + "url": "https://i.am.charlike.online" + }, + { + "name": "Rouven Weßling", + "url": "www.rouvenwessling.de" + } + ], + "deprecated": false, + "description": "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.", + "devDependencies": { + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "gulp-format-md": "^1.0.0", + "mocha": "^3.5.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/is-number", + "keywords": [ + "cast", + "check", + "coerce", + "coercion", + "finite", + "integer", + "is", + "isnan", + "is-nan", + "is-num", + "is-number", + "isnumber", + "isfinite", + "istype", + "kind", + "math", + "nan", + "num", + "number", + "numeric", + "parseFloat", + "parseInt", + "test", + "type", + "typeof", + "value" + ], + "license": "MIT", + "main": "index.js", + "name": "is-number", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/is-number.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "related": { + "list": [ + "is-plain-object", + "is-primitive", + "isobject", + "kind-of" + ] + }, + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + }, + "version": "7.0.0" +} diff --git a/build/node_modules/is-object/package.json b/build/node_modules/is-object/package.json index a6aa942f..f47e3896 100644 --- a/build/node_modules/is-object/package.json +++ b/build/node_modules/is-object/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-sublevel/xtend" ], - "_resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-object/-/is-object-0.1.2.tgz", "_shasum": "00efbc08816c33cfc4ac8251d132e10dc65098d7", "_spec": "is-object@~0.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel/node_modules/xtend", diff --git a/build/node_modules/is-plain-obj/index.d.ts b/build/node_modules/is-plain-obj/index.d.ts new file mode 100644 index 00000000..ac2614d7 --- /dev/null +++ b/build/node_modules/is-plain-obj/index.d.ts @@ -0,0 +1,29 @@ +/** +Check if a value is a plain object. + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +@example +``` +import isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` +*/ +declare function isPlainObj(value: unknown): value is object; + +export = isPlainObj; diff --git a/build/node_modules/is-plain-obj/index.js b/build/node_modules/is-plain-obj/index.js new file mode 100644 index 00000000..95079ec6 --- /dev/null +++ b/build/node_modules/is-plain-obj/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = value => { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } + + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; diff --git a/build/node_modules/is-plain-obj/license b/build/node_modules/is-plain-obj/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/is-plain-obj/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-plain-obj/package.json b/build/node_modules/is-plain-obj/package.json new file mode 100644 index 00000000..76e00d54 --- /dev/null +++ b/build/node_modules/is-plain-obj/package.json @@ -0,0 +1,70 @@ +{ + "_from": "is-plain-obj@^2.1.0", + "_id": "is-plain-obj@2.1.0", + "_inBundle": false, + "_integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "_location": "/is-plain-obj", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-plain-obj@^2.1.0", + "name": "is-plain-obj", + "escapedName": "is-plain-obj", + "rawSpec": "^2.1.0", + "saveSpec": null, + "fetchSpec": "^2.1.0" + }, + "_requiredBy": [ + "/yargs-unparser" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "_shasum": "45e42e37fccf1f40da8e5f76ee21515840c09287", + "_spec": "is-plain-obj@^2.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs-unparser", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-plain-obj/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if a value is a plain object", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/is-plain-obj#readme", + "keywords": [ + "object", + "is", + "check", + "test", + "type", + "plain", + "vanilla", + "pure", + "simple" + ], + "license": "MIT", + "name": "is-plain-obj", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-plain-obj.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.1.0" +} diff --git a/build/node_modules/is-plain-obj/readme.md b/build/node_modules/is-plain-obj/readme.md new file mode 100644 index 00000000..13571a87 --- /dev/null +++ b/build/node_modules/is-plain-obj/readme.md @@ -0,0 +1,54 @@ +# is-plain-obj [![Build Status](https://travis-ci.org/sindresorhus/is-plain-obj.svg?branch=master)](https://travis-ci.org/sindresorhus/is-plain-obj) + +> Check if a value is a plain object + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + + +## Install + +``` +$ npm install is-plain-obj +``` + + +## Usage + +```js +const isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` + + +## Related + +- [is-obj](https://github.com/sindresorhus/is-obj) - Check if a value is an object +- [is](https://github.com/sindresorhus/is) - Type check values + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/build/node_modules/is-reference/CHANGELOG.md b/build/node_modules/is-reference/CHANGELOG.md new file mode 100644 index 00000000..ce00a26d --- /dev/null +++ b/build/node_modules/is-reference/CHANGELOG.md @@ -0,0 +1,37 @@ +# is-reference changelog + +## 1.2.1 + +* Relax version range for `@types/estree` + +## 1.2.0 + +* Handle class fields ([#](https://github.com/Rich-Harris/is-reference/pull/8)) + +## 1.1.4 + +* Disregarded imported specifiers if they differ from local specifiers + +## 1.1.3 + +* Handle expressions without a Program + +## 1.1.2 + +* Ignore labels in break/continue statements ([#4](https://github.com/Rich-Harris/is-reference/pull/4)) + +## 1.1.1 + +* Prevent false positives with labeled statements + +## 1.1.0 + +* Rewrite in TypeScript, add declarations + +## 1.0.1 + +* Ensure `isReference` returns a boolean + +## 1.0.0 + +* First release diff --git a/build/node_modules/is-reference/README.md b/build/node_modules/is-reference/README.md new file mode 100644 index 00000000..1989fca5 --- /dev/null +++ b/build/node_modules/is-reference/README.md @@ -0,0 +1,61 @@ +# is-reference + +Utility for determining whether an AST node is a reference. + +`foo` is a reference in these cases: + +```js +console.log( foo ); +var foo; +function foo () {} +function bar ( foo ) {} +export { foo as x }; +``` + +`foo` is *not* a reference in these cases: + +```js +var obj = { foo: 1 }; +console.log( obj.foo ); +export { x as foo }; +``` + +In all cases, `foo` is an `Identifier` node, but the two kinds must be treated differently for the purposes of scope analysis etc. (The examples are non-exhaustive.) + + +## Installation + +```bash +npm install is-reference +``` + + +## Usage + +Example using [Acorn](https://github.com/ternjs/acorn) and [estree-walker](https://github.com/Rich-Harris/estree-walker): + +```js +const { parse } = require( 'acorn' ); +const { walk } = require( 'estree-walker' ); +const isReference = require( 'is-reference' ); + +const identifiers = []; +const references = []; + +const ast = parse( `var a = b.c;` ); + +walk( ast, { + enter ( node, parent ) { + if ( node.type === 'Identifier' ) identifiers.push( node ); + if ( isReference( node, parent ) ) references.push( node ); + } +}); + +identifiers.forEach( node => console.log( node.name ) ); // a, b, c +references.forEach( node => console.log( node.name ) ); // a, b +``` + + +## License + +MIT diff --git a/build/node_modules/is-reference/dist/is-reference.es.js b/build/node_modules/is-reference/dist/is-reference.es.js new file mode 100644 index 00000000..6b26a4c0 --- /dev/null +++ b/build/node_modules/is-reference/dist/is-reference.es.js @@ -0,0 +1,31 @@ +function isReference(node, parent) { + if (node.type === 'MemberExpression') { + return !node.computed && isReference(node.object, node); + } + if (node.type === 'Identifier') { + if (!parent) + return true; + switch (parent.type) { + // disregard `bar` in `foo.bar` + case 'MemberExpression': return parent.computed || node === parent.object; + // disregard the `foo` in `class {foo(){}}` but keep it in `class {[foo](){}}` + case 'MethodDefinition': return parent.computed; + // disregard the `foo` in `class {foo=bar}` but keep it in `class {[foo]=bar}` and `class {bar=foo}` + case 'FieldDefinition': return parent.computed || node === parent.value; + // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }` + case 'Property': return parent.computed || node === parent.value; + // disregard the `bar` in `export { foo as bar }` or + // the foo in `import { foo as bar }` + case 'ExportSpecifier': + case 'ImportSpecifier': return node === parent.local; + // disregard the `foo` in `foo: while (...) { ... break foo; ... continue foo;}` + case 'LabeledStatement': + case 'BreakStatement': + case 'ContinueStatement': return false; + default: return true; + } + } + return false; +} + +export default isReference; diff --git a/build/node_modules/is-reference/dist/is-reference.js b/build/node_modules/is-reference/dist/is-reference.js new file mode 100644 index 00000000..28ca76e1 --- /dev/null +++ b/build/node_modules/is-reference/dist/is-reference.js @@ -0,0 +1,39 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.isReference = factory()); +}(this, (function () { 'use strict'; + + function isReference(node, parent) { + if (node.type === 'MemberExpression') { + return !node.computed && isReference(node.object, node); + } + if (node.type === 'Identifier') { + if (!parent) + return true; + switch (parent.type) { + // disregard `bar` in `foo.bar` + case 'MemberExpression': return parent.computed || node === parent.object; + // disregard the `foo` in `class {foo(){}}` but keep it in `class {[foo](){}}` + case 'MethodDefinition': return parent.computed; + // disregard the `foo` in `class {foo=bar}` but keep it in `class {[foo]=bar}` and `class {bar=foo}` + case 'FieldDefinition': return parent.computed || node === parent.value; + // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }` + case 'Property': return parent.computed || node === parent.value; + // disregard the `bar` in `export { foo as bar }` or + // the foo in `import { foo as bar }` + case 'ExportSpecifier': + case 'ImportSpecifier': return node === parent.local; + // disregard the `foo` in `foo: while (...) { ... break foo; ... continue foo;}` + case 'LabeledStatement': + case 'BreakStatement': + case 'ContinueStatement': return false; + default: return true; + } + } + return false; + } + + return isReference; + +}))); diff --git a/build/node_modules/is-reference/dist/types/index.d.ts b/build/node_modules/is-reference/dist/types/index.d.ts new file mode 100644 index 00000000..c3328325 --- /dev/null +++ b/build/node_modules/is-reference/dist/types/index.d.ts @@ -0,0 +1,2 @@ +import { Node } from 'estree'; +export default function isReference(node: Node, parent: Node): boolean; diff --git a/build/node_modules/is-reference/package.json b/build/node_modules/is-reference/package.json new file mode 100644 index 00000000..5db846b6 --- /dev/null +++ b/build/node_modules/is-reference/package.json @@ -0,0 +1,76 @@ +{ + "_from": "is-reference@^1.2.1", + "_id": "is-reference@1.2.1", + "_inBundle": false, + "_integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "_location": "/is-reference", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-reference@^1.2.1", + "name": "is-reference", + "escapedName": "is-reference", + "rawSpec": "^1.2.1", + "saveSpec": null, + "fetchSpec": "^1.2.1" + }, + "_requiredBy": [ + "/@rollup/plugin-commonjs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-reference/-/is-reference-1.2.1.tgz", + "_shasum": "8b2dac0b371f4bc994fdeaba9eb542d03002d0b7", + "_spec": "is-reference@^1.2.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", + "author": { + "name": "Rich Harris" + }, + "bugs": { + "url": "https://github.com/Rich-Harris/is-reference/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@types/estree": "*" + }, + "deprecated": false, + "description": "Determine whether an AST node is a reference", + "devDependencies": { + "acorn": "^7.2.0", + "acorn-class-fields": "^0.3.2", + "acorn-static-class-features": "^0.2.1", + "estree-walker": "^2.0.1", + "mocha": "^7.1.2", + "rollup": "^2.10.3", + "rollup-plugin-typescript": "^1.0.1", + "tslib": "^2.0.0", + "typescript": "^3.9.2" + }, + "files": [ + "dist/*.js", + "dist/types/**/*.d.ts" + ], + "homepage": "https://github.com/Rich-Harris/is-reference#readme", + "keywords": [ + "ast", + "javascript", + "estree", + "acorn" + ], + "license": "MIT", + "main": "dist/is-reference.js", + "module": "dist/is-reference.es.js", + "name": "is-reference", + "repository": { + "type": "git", + "url": "git+https://github.com/Rich-Harris/is-reference.git" + }, + "scripts": { + "build": "rollup -c && tsc --emitDeclarationOnly", + "prepare": "npm run build", + "prepublishOnly": "npm test", + "pretest": "npm run build", + "test": "mocha" + }, + "types": "dist/types/index.d.ts", + "version": "1.2.1" +} diff --git a/build/node_modules/is-regex/.editorconfig b/build/node_modules/is-regex/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/is-regex/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-regex/.eslintignore b/build/node_modules/is-regex/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-regex/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-regex/.eslintrc b/build/node_modules/is-regex/.eslintrc deleted file mode 100644 index 1f6f1277..00000000 --- a/build/node_modules/is-regex/.eslintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "id-length": [1], - "operator-linebreak": [2, "before"], - }, - - "overrides": [ - { - "files": ["test/**/*.js"], - "globals": { - "Proxy": false, - }, - }, - ], -} diff --git a/build/node_modules/is-regex/.nycrc b/build/node_modules/is-regex/.nycrc deleted file mode 100644 index a69aa2d8..00000000 --- a/build/node_modules/is-regex/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test", - "test-corejs.js" - ] -} diff --git a/build/node_modules/is-regex/CHANGELOG.md b/build/node_modules/is-regex/CHANGELOG.md deleted file mode 100644 index 3b2a48c0..00000000 --- a/build/node_modules/is-regex/CHANGELOG.md +++ /dev/null @@ -1,190 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.1.3](https://github.com/inspect-js/is-regex/compare/v1.1.2...v1.1.3) - 2021-05-07 - -### Commits - -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`c681ab9`](https://github.com/inspect-js/is-regex/commit/c681ab99c07f8b3b7ae5f652b3105a30bce94f69) -- [Fix] do not use `Object.prototype.toString` when `Symbol.toStringTag` is shammed [`ca019fd`](https://github.com/inspect-js/is-regex/commit/ca019fdb828dc7d32e323213403ac9995d8604e3) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`605a66f`](https://github.com/inspect-js/is-regex/commit/605a66f278900f1c8ae9d1dfcec31e5f61b10ad3) -- [readme] add actions and codecov badges [`8d7c6f0`](https://github.com/inspect-js/is-regex/commit/8d7c6f0e007bd982f21b958e0abc98b8a84e2a24) -- [meta] use `prepublishOnly` script for npm 7+ [`8e50e91`](https://github.com/inspect-js/is-regex/commit/8e50e91f51aa5038745526710ef2e030527982a7) -- [Deps] update `has-symbols` [`4742c81`](https://github.com/inspect-js/is-regex/commit/4742c81260c3db9a8c9ef57110981fb6175f58e0) - -## [v1.1.2](https://github.com/inspect-js/is-regex/compare/v1.1.1...v1.1.2) - 2021-02-01 - -### Commits - -- [Tests] migrate tests to Github Actions [`cc1686e`](https://github.com/inspect-js/is-regex/commit/cc1686e25f446ca6948f43b3f180d6e55e31fb4e) -- [readme] fix repo URLs; remove travis badge [`d1d1da6`](https://github.com/inspect-js/is-regex/commit/d1d1da647bb4e91589606f12470cd27a47b3bb81) -- [meta] do not publish github action workflow files [`9f84b99`](https://github.com/inspect-js/is-regex/commit/9f84b993a995f057b4d2d097ef47b1ff9c84115d) -- [Tests] run `nyc` on all tests [`c37aab9`](https://github.com/inspect-js/is-regex/commit/c37aab9d332c4834b08ada94736c45ab1d39cd2f) -- [Robustness] use `call-bind` [`fbb61bf`](https://github.com/inspect-js/is-regex/commit/fbb61bf3e19ccc178e6ed1e0d7ab9cc7c7167393) -- [actions] add "Allow Edits" workflow [`9022b53`](https://github.com/inspect-js/is-regex/commit/9022b53cb05b0f105cd179800cf96e055b249f08) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`d60f28f`](https://github.com/inspect-js/is-regex/commit/d60f28f7f2fb21dade7bce302b3e0246206423d3) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`2c35c43`](https://github.com/inspect-js/is-regex/commit/2c35c437edf3eeb37129eea2404d8f465d27620f) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`1009e25`](https://github.com/inspect-js/is-regex/commit/1009e259d49a63753dc6e79e2b876a30c00c6de6) -- [meta] gitignore coverage output [`3b5fa9e`](https://github.com/inspect-js/is-regex/commit/3b5fa9ed2882c65ee81dff979f79f1a2751d3772) -- [actions] update workflows [`1843ef6`](https://github.com/inspect-js/is-regex/commit/1843ef65b8b8c24a44e91bc4ed5ee60dffc31c2d) - -## [v1.1.1](https://github.com/inspect-js/is-regex/compare/v1.1.0...v1.1.1) - 2020-08-03 - -### Commits - -- [Performance] Re-add lastIndex check to improve performance [`d8495cd`](https://github.com/inspect-js/is-regex/commit/d8495cd22d475ddca250818921b6088f631c1972) -- [Dev Deps] update `auto-changelog`, `eslint` [`778fa6b`](https://github.com/inspect-js/is-regex/commit/778fa6b9d2b182ee6d73993e103532855e956f85) - -## [v1.1.0](https://github.com/inspect-js/is-regex/compare/v1.0.5...v1.1.0) - 2020-06-03 - -### Commits - -- [New] use `badStringifier`‑based RegExp detection [`31eff67`](https://github.com/inspect-js/is-regex/commit/31eff673243d65c3d6c05848c0eb52f5380f1be3) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`fc91458`](https://github.com/inspect-js/is-regex/commit/fc914588187b8bb00d8d792c84f06a6e15d883c1) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`; add `safe-publish-latest` [`d43ed83`](https://github.com/inspect-js/is-regex/commit/d43ed83db54ea727bb0b1b77a50af79d1edb8a6d) -- [Dev Deps] update `auto-changelog`, `tape`; add `aud` [`56647d1`](https://github.com/inspect-js/is-regex/commit/56647d196be34ef3c118ad67726e75169fbcb875) -- [meta] only run `aud` on prod deps [`e0865b8`](https://github.com/inspect-js/is-regex/commit/e0865b8360b0ac1b9d17b7b81ae5f339e5c9036b) - -## [v1.0.5](https://github.com/inspect-js/is-regex/compare/v1.0.4...v1.0.5) - 2019-12-15 - -### Commits - -- [Tests] use shared travis-ci configs [`af728b2`](https://github.com/inspect-js/is-regex/commit/af728b21c5cc9e41234fb4015594bffdcfff597c) -- [Tests] remove `jscs` [`1b8cfe8`](https://github.com/inspect-js/is-regex/commit/1b8cfe8cfb14820c196775f19d370276e4034791) -- [meta] add `auto-changelog` [`c3131d8`](https://github.com/inspect-js/is-regex/commit/c3131d8ab5d06ea5fa05a4bb2ad28bbfb81668ad) -- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`, `v4.8`; newer npm fails on older nodes [`660b658`](https://github.com/inspect-js/is-regex/commit/660b6585d1a9607dbdae879b70ce2f6a5684616c) -- [Tests] up to `node` `v9.3`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS [`7c25218`](https://github.com/inspect-js/is-regex/commit/7c25218d540ab17c18e4ae333677c5725806a778) -- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`fa95547`](https://github.com/inspect-js/is-regex/commit/fa955478950a5ba0a920010d5daaa29487500b30) -- [meta] remove unused Makefile and associated utilities [`9fd2a29`](https://github.com/inspect-js/is-regex/commit/9fd2a29dc57ed125f3d61e94f6254a9dd8ee0044) -- [Tests] up to `node` `v11.3`, `v10.14`, `v8.14`, `v6.15` [`7f2ac41`](https://github.com/inspect-js/is-regex/commit/7f2ac41ef5dc4d53bfe2fb1c24486c688a2537bd) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`6fa2b0f`](https://github.com/inspect-js/is-regex/commit/6fa2b0fe171a5b02086a06679a92d989e83a8b8e) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`697e1de`](https://github.com/inspect-js/is-regex/commit/697e1de1c9e69f08e591cc0040d81fdbbde6fe4e) -- [actions] add automatic rebasing / merge commit blocking [`ad86dc9`](https://github.com/inspect-js/is-regex/commit/ad86dc97a52e4f66fbfb3b8c9c78da3963588b54) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `replace`, `semver`, `tape` [`5c99c8e`](https://github.com/inspect-js/is-regex/commit/5c99c8e384d5ce2ef434be5853c301477cf35456) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape` [`bb63686`](https://github.com/inspect-js/is-regex/commit/bb63686a9d0fc586d121549cf484da95edec3b0a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config@`, `replace`, `semver`, `tape` [`ddf3670`](https://github.com/inspect-js/is-regex/commit/ddf36705e5f7bd29832721e4a23abf06195032c6) -- [Dev Deps] update `tape`, `nsp`, `eslint`, `@ljharb/eslint-config` [`e7b5a62`](https://github.com/inspect-js/is-regex/commit/e7b5a626eef3b9648c7d52d4620ce2e2a98a9ab8) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`c803db5`](https://github.com/inspect-js/is-regex/commit/c803db5cd94cf9e0a559617adbc1e4c9d22007ff) -- [Tests] switch from `nsp` to `npm audit` [`b7239be`](https://github.com/inspect-js/is-regex/commit/b7239be9da263a0f7066f79d087eaf700a9613e9) -- [Dev Deps] update `eslint`, `nsp`, `semver`, `tape` [`347ee6c`](https://github.com/inspect-js/is-regex/commit/347ee6c67ba0f56b03f21a5abe743658f6515963) -- Only apps should have lockfiles. [`3866575`](https://github.com/inspect-js/is-regex/commit/38665755ecf028061f15816059e26023890a0dc7) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`d099a39`](https://github.com/inspect-js/is-regex/commit/d099a3943eb7e156a3e64fb8b74e11d7c83a4bec) -- [meta] add `funding` field [`741aecd`](https://github.com/inspect-js/is-regex/commit/741aecd92cd49868b3606c8cc99ce299e5f3c7d5) -- [Tests] use `eclint` instead of `editorconfig-tools` [`bc6aa75`](https://github.com/inspect-js/is-regex/commit/bc6aa7539e506788709b96f7bf3d7549850a81c3) -- [Tests] on `node` `v10.1` [`262226f`](https://github.com/inspect-js/is-regex/commit/262226f08fa34dff9a8dffd16daabb3dc6e262eb) -- [Dev Deps] update `eslint` [`31fd719`](https://github.com/inspect-js/is-regex/commit/31fd719dd59a6111ca710cdb0d19a8adadf9b8c6) -- [Deps] update `has` [`e9e25a3`](https://github.com/inspect-js/is-regex/commit/e9e25a3de7e89faaa6aadf5010477074140e8218) -- [Dev Deps] update `replace` [`aeeb968`](https://github.com/inspect-js/is-regex/commit/aeeb968bf5a4fc07f0fa6905f2c699fc563b6c32) -- [Tests] set audit level [`2a6290e`](https://github.com/inspect-js/is-regex/commit/2a6290e78b58bf14b734d7998fe53b4a84db5e44) -- [Tests] remove `nsp` [`fc74c2b`](https://github.com/inspect-js/is-regex/commit/fc74c2bb6970a7f3280abe6eff3b492d77d89c9f) - -## [v1.0.4](https://github.com/inspect-js/is-regex/compare/v1.0.3...v1.0.4) - 2017-02-18 - -### Fixed - -- [Fix] ensure that `lastIndex` is not mutated [`#3`](https://github.com/inspect-js/is-regex/issues/3) - -### Commits - -- Update `eslint`, `tape`, `semver`; use my personal shared `eslint` config [`c4a41c3`](https://github.com/inspect-js/is-regex/commit/c4a41c3a8203a3919b01cd0d1b577daadf30a452) -- [Tests] on all node minors; improve test matrix [`58d7508`](https://github.com/inspect-js/is-regex/commit/58d7508a36eb92bd76717486b9e78bde502ffe3e) -- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`7290076`](https://github.com/inspect-js/is-regex/commit/729007606e9ed162953d1f5812c37eb06c554ec2) -- Update `covert`, `jscs`, `eslint`, `semver` [`dabc729`](https://github.com/inspect-js/is-regex/commit/dabc729cfc4458264c6f7642004d41dd5c214bfd) -- Update `eslint` [`a946b05`](https://github.com/inspect-js/is-regex/commit/a946b051159396b4311c564880f96e3d00e8b8e2) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`1744dde`](https://github.com/inspect-js/is-regex/commit/1744dde77526841f216fa2c1c866c5a82b1638c0) -- [Refactor] when try/catch is needed, bail early if the value lacks an own `lastIndex` data property. [`288ad93`](https://github.com/inspect-js/is-regex/commit/288ad93dbfed9f6828de20de67105ee6d6504425) -- Update `editorconfig-tools`, `eslint`, `semver`, `replace` [`4d895c6`](https://github.com/inspect-js/is-regex/commit/4d895c68a0cdbb5803185928963c15147aad0404) -- Update `eslint`, `tape`, `semver` [`f387f03`](https://github.com/inspect-js/is-regex/commit/f387f03b260b56372bfca301d4e79c4067633854) -- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`55e480f`](https://github.com/inspect-js/is-regex/commit/55e480f407cafb6c21a6c32aef04ccaa3ba4216c) -- [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`89d9528`](https://github.com/inspect-js/is-regex/commit/89d95285b364913ebcd8ac7e0872570fe009a5d3) -- [Dev Deps] update `jscs` [`eb222a8`](https://github.com/inspect-js/is-regex/commit/eb222a8435e59909354f3700fd4880e4ce1cb13e) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`c65429c`](https://github.com/inspect-js/is-regex/commit/c65429cea0366508c10ad2ab773af7b83a34fc81) -- Update `nsp`, `eslint` [`c60fbd8`](https://github.com/inspect-js/is-regex/commit/c60fbd8680f7fb3508ec3c5be8ebb788672516c8) -- Update `eslint`, `semver` [`6a62116`](https://github.com/inspect-js/is-regex/commit/6a621168c63616bf004ca8b1f885b4eb8a58a3e5) -- [Tests] on `node` `v7.5`, `v4.7` [`e764651`](https://github.com/inspect-js/is-regex/commit/e764651336f5da5e239e9fe8869f3a3201c19d2b) -- Test up to `io.js` `v2.1` [`3bf326a`](https://github.com/inspect-js/is-regex/commit/3bf326a9bcd530fd16c9fc806e249a68e25ab7e3) -- Test on the latest `io.js` versions. [`693d047`](https://github.com/inspect-js/is-regex/commit/693d0477631c5d7671f6c99eca5594ffffa75771) -- [Refactor] use an early return instead of a ternary. [`31eaca2`](https://github.com/inspect-js/is-regex/commit/31eaca28b7d0aaac0599fe7a569b93b842f8ab16) -- Test on `io.js` `v2.2` [`c18c55a`](https://github.com/inspect-js/is-regex/commit/c18c55aee6358d70531f935e98851e42b698d93c) -- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`a1c237d`](https://github.com/inspect-js/is-regex/commit/a1c237d35f880fe0bcbc9275254611a6a2300aaf) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`aa3ea0f`](https://github.com/inspect-js/is-regex/commit/aa3ea0f148af31d75f7ef8a800412729d82def04) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`d97831d`](https://github.com/inspect-js/is-regex/commit/d97831d0e2ccd3d00d1f7354b7f81e2575f90953) -- [Dev Deps] Update `tape`, `eslint` [`95e6def`](https://github.com/inspect-js/is-regex/commit/95e6defe3178c45dc9df16e474e558979d5f5c05) -- Update `eslint`, `nsp` [`3844c93`](https://github.com/inspect-js/is-regex/commit/3844c935cfe7c52fae0dc74d27e884c417cb4616) -- Update `tape`, `jscs` [`0d6dac8`](https://github.com/inspect-js/is-regex/commit/0d6dac818ed251910171965932f021291919e770) -- Fix tests for faked @@toStringTag [`2ebef9f`](https://github.com/inspect-js/is-regex/commit/2ebef9f0759843e9a063de7a512b46e3e7daea7e) -- Test up to `io.js` `v3.0` [`ec1d2d4`](https://github.com/inspect-js/is-regex/commit/ec1d2d44481fa0fa11448527da8030c99fe47a12) -- [Refactor] bail earlier when the value is falsy. [`a9e333e`](https://github.com/inspect-js/is-regex/commit/a9e333e2ac8912ca05b7e31d30e4eea683c0da4b) -- [Dev Deps] update `tape` [`8cdcaae`](https://github.com/inspect-js/is-regex/commit/8cdcaae07be8c790cdb99849e6076ea7702a4c84) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`281c4ef`](https://github.com/inspect-js/is-regex/commit/281c4efeb71c86dd380e741bcaee3f7dbf956151) -- Test on `io.js` `v2.4` [`4d54c68`](https://github.com/inspect-js/is-regex/commit/4d54c68a81b5332a3b76259d8aa8f514be5efd13) -- Test on `io.js` `v2.3` [`23170f5`](https://github.com/inspect-js/is-regex/commit/23170f5cae632d0377de73bd2febc53db8aebbc9) -- Test on `iojs-v1.6` [`4487ad0`](https://github.com/inspect-js/is-regex/commit/4487ad0194a5684223bfa2690da4e0a441f7132a) - -## [v1.0.3](https://github.com/inspect-js/is-regex/compare/v1.0.2...v1.0.3) - 2015-01-29 - -### Commits - -- Update npm run scripts. [`dc528dd`](https://github.com/inspect-js/is-regex/commit/dc528dd25e775089bc0a3f5a8f7ae7ffc4cdf52a) -- Add toStringTag tests. [`f48a83a`](https://github.com/inspect-js/is-regex/commit/f48a83a78720b78ab60ca586c16f6f3dbcfec825) -- If @@toStringTag is not present, use the old-school Object#toString test. [`50b0ffd`](https://github.com/inspect-js/is-regex/commit/50b0ffd9c7fdbd54aee8cde1b07e680ae84f6a0d) - -## [v1.0.2](https://github.com/inspect-js/is-regex/compare/v1.0.1...v1.0.2) - 2015-01-29 - -### Commits - -- `make release` [`a1de7ec`](https://github.com/inspect-js/is-regex/commit/a1de7eca4cecc8015fd27804669f8fc61bd16a68) -- Improve optimization by separating the try/catch, and bailing out early when not typeof "object". [`5ab7632`](https://github.com/inspect-js/is-regex/commit/5ab76322a348487fa8b16761e83f6824c3c27d11) - -## [v1.0.1](https://github.com/inspect-js/is-regex/compare/v1.0.0...v1.0.1) - 2015-01-28 - -### Commits - -- Using my standard jscs.json file [`1f1733a`](https://github.com/inspect-js/is-regex/commit/1f1733ac8433cdcceb25356f86b74136a4477cb9) -- Adding `npm run lint` [`51ea70f`](https://github.com/inspect-js/is-regex/commit/51ea70fa7e461d022f611c195f343ea8d0333d71) -- Use RegExp#exec to test if something is a regex, which works even with ES6 @@toStringTag. [`042c8c7`](https://github.com/inspect-js/is-regex/commit/042c8c734faade9015932b61f1e8ea4f3a93b1b3) -- Adding license and downloads badges [`366d619`](https://github.com/inspect-js/is-regex/commit/366d61965d3a4119126e78e09b2166bbcddd0c5a) -- Use SVG badges instead of PNG [`6a32e4f`](https://github.com/inspect-js/is-regex/commit/6a32e4fc87d7d3a3787b800dd033c9293aead6df) -- Update `tape`, `jscs` [`f1b9462`](https://github.com/inspect-js/is-regex/commit/f1b9462f86d1b69de07176e7f277f668757ba964) -- Update `jscs` [`1bff23f`](https://github.com/inspect-js/is-regex/commit/1bff23ff0fe88c8263e8bf04cf99e290af96d5b0) -- Update `tape`, `jscs` [`c22ea2e`](https://github.com/inspect-js/is-regex/commit/c22ea2e7967f45618deed01ff5ea483f918be216) -- Update `tape`, `jscs` [`b0479db`](https://github.com/inspect-js/is-regex/commit/b0479db99a1b1b872d1618fb0a71f0c74a78b29b) -- Use consistent quotes [`1a6e347`](https://github.com/inspect-js/is-regex/commit/1a6e34730d9270f3f20519139faa4c4e6ec2e1f5) -- Make travis builds faster. [`090a4ea`](https://github.com/inspect-js/is-regex/commit/090a4ea7c5fa709d108d596e3bc304e6ce973dec) -- Update `tape` [`7d76129`](https://github.com/inspect-js/is-regex/commit/7d7612928bdd43230fbd835db71797249ca24f35) -- Lock covert to v1.0.0. [`9a90b03`](https://github.com/inspect-js/is-regex/commit/9a90b03fb390e66f874223a34c58ba2bb109edd3) -- Updating tape [`bfbc7f5`](https://github.com/inspect-js/is-regex/commit/bfbc7f593a007acd0411152bbb55f724dc4ca935) -- Updating jscs [`13ad511`](https://github.com/inspect-js/is-regex/commit/13ad511d80cd67300c2c0c5387fc4b3b423e2768) -- Updating jscs [`cda1945`](https://github.com/inspect-js/is-regex/commit/cda1945d603dfe99e24d5a909a931d366451bc4d) -- Updating jscs [`de96c99`](https://github.com/inspect-js/is-regex/commit/de96c99d4bf5787df671de6df9138b6547a6545b) -- Running linter as part of tests [`2cb6567`](https://github.com/inspect-js/is-regex/commit/2cb656733b1ed0af14ad11fb584006d22de0c69d) -- Updating covert [`a56ae74`](https://github.com/inspect-js/is-regex/commit/a56ae74ec8d5f0473295a8b10519a18580f16624) -- Updating tape [`ffe47f7`](https://github.com/inspect-js/is-regex/commit/ffe47f7fe9cf6d16896b4bdc286bd1d0805d5c49) - -## [v1.0.0](https://github.com/inspect-js/is-regex/compare/v0.0.0...v1.0.0) - 2014-05-19 - -### Commits - -- Make sure old and unstable nodes don't break Travis [`05da747`](https://github.com/inspect-js/is-regex/commit/05da7478f960dc131ec3ad864e27e8c6b7d74a80) -- toString is a reserved var name in old Opera [`885c48c`](https://github.com/inspect-js/is-regex/commit/885c48c120f921a55f1842b0607d3e7875379821) -- Updating deps [`2ca0e79`](https://github.com/inspect-js/is-regex/commit/2ca0e79a2443ca34d85e8b2ea2e26f55855b74a7) -- Updating tape. [`9678435`](https://github.com/inspect-js/is-regex/commit/96784355611deb0c23b9064be774216d76e3e457) -- Updating covert [`c3bb898`](https://github.com/inspect-js/is-regex/commit/c3bb8985a422e3e0c81f9c43899b6c19a72c755f) -- Updating tape [`7811708`](https://github.com/inspect-js/is-regex/commit/78117089688258b8f939b397b37897b5b3e30f74) -- Testing on node 0.6 again [`dec36ae`](https://github.com/inspect-js/is-regex/commit/dec36ae58a39a3f80e832b702c3e19406363c160) -- Run code coverage as part of tests [`e6f4ebe`](https://github.com/inspect-js/is-regex/commit/e6f4ebec26894543747603f2cb360e839f2ca290) - -## v0.0.0 - 2014-01-15 - -### Commits - -- package.json [`aa60d43`](https://github.com/inspect-js/is-regex/commit/aa60d43d2c8adb9fdd47f5898e5e1e570bd238d8) -- read me [`861e944`](https://github.com/inspect-js/is-regex/commit/861e944de88e84010eaa662ea9ea9f17c90cff8c) -- Initial commit [`d0cdd71`](https://github.com/inspect-js/is-regex/commit/d0cdd71a637d8490b7ee3eaaf75c7e31d0f9242f) -- Tests. [`b533f74`](https://github.com/inspect-js/is-regex/commit/b533f741a88dff002790fb7af054b2a74e72d4da) -- Implementation. [`3c9a8c0`](https://github.com/inspect-js/is-regex/commit/3c9a8c06994003cdfffeb3620f251f4c4cae7755) -- Travis CI [`742c440`](https://github.com/inspect-js/is-regex/commit/742c4407015f9108875fd108fde137f5245e9e7a) diff --git a/build/node_modules/is-regex/LICENSE b/build/node_modules/is-regex/LICENSE deleted file mode 100644 index 47b7b507..00000000 --- a/build/node_modules/is-regex/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-regex/README.md b/build/node_modules/is-regex/README.md deleted file mode 100644 index d61332bd..00000000 --- a/build/node_modules/is-regex/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# is-regex [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS regex? -This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isRegex = require('is-regex'); -var assert = require('assert'); - -assert.notOk(isRegex(undefined)); -assert.notOk(isRegex(null)); -assert.notOk(isRegex(false)); -assert.notOk(isRegex(true)); -assert.notOk(isRegex(42)); -assert.notOk(isRegex('foo')); -assert.notOk(isRegex(function () {})); -assert.notOk(isRegex([])); -assert.notOk(isRegex({})); - -assert.ok(isRegex(/a/g)); -assert.ok(isRegex(new RegExp('a', 'g'))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-regex -[2]: https://versionbadg.es/inspect-js/is-regex.svg -[5]: https://david-dm.org/inspect-js/is-regex.svg -[6]: https://david-dm.org/inspect-js/is-regex -[7]: https://david-dm.org/inspect-js/is-regex/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-regex#info=devDependencies -[11]: https://nodei.co/npm/is-regex.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-regex.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-regex.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-regex -[codecov-image]: https://codecov.io/gh/inspect-js/is-regex/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-regex/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-regex -[actions-url]: https://github.com/inspect-js/is-regex/actions diff --git a/build/node_modules/is-regex/index.js b/build/node_modules/is-regex/index.js deleted file mode 100644 index 80a2d335..00000000 --- a/build/node_modules/is-regex/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var hasSymbols = require('has-symbols/shams')(); -var hasToStringTag = hasSymbols && !!Symbol.toStringTag; -var has; -var $exec; -var isRegexMarker; -var badStringifier; - -if (hasToStringTag) { - has = callBound('Object.prototype.hasOwnProperty'); - $exec = callBound('RegExp.prototype.exec'); - isRegexMarker = {}; - - var throwRegexMarker = function () { - throw isRegexMarker; - }; - badStringifier = { - toString: throwRegexMarker, - valueOf: throwRegexMarker - }; - - if (typeof Symbol.toPrimitive === 'symbol') { - badStringifier[Symbol.toPrimitive] = throwRegexMarker; - } -} - -var $toString = callBound('Object.prototype.toString'); -var gOPD = Object.getOwnPropertyDescriptor; -var regexClass = '[object RegExp]'; - -module.exports = hasToStringTag - // eslint-disable-next-line consistent-return - ? function isRegex(value) { - if (!value || typeof value !== 'object') { - return false; - } - - var descriptor = gOPD(value, 'lastIndex'); - var hasLastIndexDataProperty = descriptor && has(descriptor, 'value'); - if (!hasLastIndexDataProperty) { - return false; - } - - try { - $exec(value, badStringifier); - } catch (e) { - return e === isRegexMarker; - } - } - : function isRegex(value) { - // In older browsers, typeof regex incorrectly returns 'function' - if (!value || (typeof value !== 'object' && typeof value !== 'function')) { - return false; - } - - return $toString(value) === regexClass; - }; diff --git a/build/node_modules/is-regex/package.json b/build/node_modules/is-regex/package.json deleted file mode 100644 index 84b5ba6b..00000000 --- a/build/node_modules/is-regex/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_from": "is-regex@^1.1.3", - "_id": "is-regex@1.1.3", - "_inBundle": false, - "_integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "_location": "/is-regex", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-regex@^1.1.3", - "name": "is-regex", - "escapedName": "is-regex", - "rawSpec": "^1.1.3", - "saveSpec": null, - "fetchSpec": "^1.1.3" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "_shasum": "d029f9aff6448b93ebbe3f33dac71511fdcbef9f", - "_spec": "is-regex@^1.1.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-regex/issues" - }, - "bundleDependencies": false, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "deprecated": false, - "description": "Is this value a JS regex? Works cross-realm/iframe, and despite ES6 @@toStringTag", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^3.12.0", - "eclint": "^2.8.1", - "eslint": "^7.26.0", - "foreach": "^2.0.5", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-regex", - "keywords": [ - "regex", - "regexp", - "is", - "regular expression", - "regular", - "expression" - ], - "license": "MIT", - "main": "index.js", - "name": "is-regex", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-regex.git" - }, - "scripts": { - "eccheck": "eclint check *.js **/*.js > /dev/null", - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only && npm run test:harmony", - "test:corejs": "nyc tape test-corejs.js", - "test:harmony": "nyc node --harmony --es-staging test", - "tests-only": "nyc node test", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.3" -} diff --git a/build/node_modules/is-regex/test/index.js b/build/node_modules/is-regex/test/index.js deleted file mode 100644 index 93ea4e4a..00000000 --- a/build/node_modules/is-regex/test/index.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; - -var hasSymbols = require('has-symbols/shams')(); -var hasToStringTag = hasSymbols && !!Symbol.toStringTag; -var forEach = require('foreach'); -var test = require('tape'); -var isRegex = require('..'); - -test('not regexes', function (t) { - t.notOk(isRegex(), 'undefined is not regex'); - t.notOk(isRegex(null), 'null is not regex'); - t.notOk(isRegex(false), 'false is not regex'); - t.notOk(isRegex(true), 'true is not regex'); - t.notOk(isRegex(42), 'number is not regex'); - t.notOk(isRegex('foo'), 'string is not regex'); - t.notOk(isRegex([]), 'array is not regex'); - t.notOk(isRegex({}), 'object is not regex'); - t.notOk(isRegex(function () {}), 'function is not regex'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasToStringTag }, function (t) { - var regex = /a/g; - var fakeRegex = { - toString: function () { return String(regex); }, - valueOf: function () { return regex; } - }; - fakeRegex[Symbol.toStringTag] = 'RegExp'; - t.notOk(isRegex(fakeRegex), 'fake RegExp with @@toStringTag "RegExp" is not regex'); - t.end(); -}); - -test('regexes', function (t) { - t.ok(isRegex(/a/g), 'regex literal is regex'); - t.ok(isRegex(new RegExp('a', 'g')), 'regex object is regex'); - t.end(); -}); - -test('does not mutate regexes', function (t) { - t.test('lastIndex is a marker object', function (st) { - var regex = /a/; - var marker = {}; - regex.lastIndex = marker; - st.equal(regex.lastIndex, marker, 'lastIndex is the marker object'); - st.ok(isRegex(regex), 'is regex'); - st.equal(regex.lastIndex, marker, 'lastIndex is the marker object after isRegex'); - st.end(); - }); - - t.test('lastIndex is nonzero', function (st) { - var regex = /a/; - regex.lastIndex = 3; - st.equal(regex.lastIndex, 3, 'lastIndex is 3'); - st.ok(isRegex(regex), 'is regex'); - st.equal(regex.lastIndex, 3, 'lastIndex is 3 after isRegex'); - st.end(); - }); - - t.end(); -}); - -test('does not perform operations observable to Proxies', { skip: typeof Proxy !== 'function' }, function (t) { - var Handler = function () { - this.trapCalls = []; - }; - - forEach([ - 'defineProperty', - 'deleteProperty', - 'get', - 'getOwnPropertyDescriptor', - 'getPrototypeOf', - 'has', - 'isExtensible', - 'ownKeys', - 'preventExtensions', - 'set', - 'setPrototypeOf' - ], function (trapName) { - Handler.prototype[trapName] = function () { - this.trapCalls.push(trapName); - return Reflect[trapName].apply(Reflect, arguments); - }; - }); - - t.test('proxy of object', function (st) { - var handler = new Handler(); - var proxy = new Proxy({ lastIndex: 0 }, handler); - - st.equal(isRegex(proxy), false, 'proxy of plain object is not regex'); - st.deepEqual(handler.trapCalls, ['getOwnPropertyDescriptor'], 'no unexpected proxy traps were triggered'); - st.end(); - }); - - t.test('proxy of RegExp instance', function (st) { - var handler = new Handler(); - var proxy = new Proxy(/a/, handler); - - st.equal(isRegex(proxy), false, 'proxy of RegExp instance is not regex'); - st.deepEqual(handler.trapCalls, ['getOwnPropertyDescriptor'], 'no unexpected proxy traps were triggered'); - st.end(); - }); - - t.end(); -}); diff --git a/build/node_modules/is-stream/index.d.ts b/build/node_modules/is-stream/index.d.ts index b61027f1..eee2e83e 100644 --- a/build/node_modules/is-stream/index.d.ts +++ b/build/node_modules/is-stream/index.d.ts @@ -1,4 +1,3 @@ -/// import * as stream from 'stream'; declare const isStream: { diff --git a/build/node_modules/is-stream/index.js b/build/node_modules/is-stream/index.js index a8d571f1..2e43434d 100644 --- a/build/node_modules/is-stream/index.js +++ b/build/node_modules/is-stream/index.js @@ -23,7 +23,6 @@ isStream.duplex = stream => isStream.transform = stream => isStream.duplex(stream) && - typeof stream._transform === 'function' && - typeof stream._transformState === 'object'; + typeof stream._transform === 'function'; module.exports = isStream; diff --git a/build/node_modules/is-stream/license b/build/node_modules/is-stream/license index e7af2f77..fa7ceba3 100644 --- a/build/node_modules/is-stream/license +++ b/build/node_modules/is-stream/license @@ -1,6 +1,6 @@ MIT License -Copyright (c) Sindre Sorhus (sindresorhus.com) +Copyright (c) Sindre Sorhus (https://sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/build/node_modules/is-stream/package.json b/build/node_modules/is-stream/package.json index 9cd93eb9..a9cd53bf 100644 --- a/build/node_modules/is-stream/package.json +++ b/build/node_modules/is-stream/package.json @@ -1,8 +1,8 @@ { "_from": "is-stream@^2.0.0", - "_id": "is-stream@2.0.0", + "_id": "is-stream@2.0.1", "_inBundle": false, - "_integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "_integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "_location": "/is-stream", "_phantomChildren": {}, "_requested": { @@ -18,14 +18,14 @@ "_requiredBy": [ "/winston" ], - "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "_shasum": "bde9c32680d6fae04129d6ac9d921ce7815f78e3", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-stream/-/is-stream-2.0.1.tgz", + "_shasum": "fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077", "_spec": "is-stream@^2.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" + "url": "https://sindresorhus.com" }, "bugs": { "url": "https://github.com/sindresorhus/is-stream/issues" @@ -47,6 +47,7 @@ "index.js", "index.d.ts" ], + "funding": "https://github.com/sponsors/sindresorhus", "homepage": "https://github.com/sindresorhus/is-stream#readme", "keywords": [ "stream", @@ -69,5 +70,5 @@ "scripts": { "test": "xo && ava && tsd" }, - "version": "2.0.0" + "version": "2.0.1" } diff --git a/build/node_modules/is-stream/readme.md b/build/node_modules/is-stream/readme.md index fdeadb9f..19308e73 100644 --- a/build/node_modules/is-stream/readme.md +++ b/build/node_modules/is-stream/readme.md @@ -1,15 +1,13 @@ -# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) +# is-stream > Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) - ## Install ``` $ npm install is-stream ``` - ## Usage ```js @@ -23,7 +21,6 @@ isStream({}); //=> false ``` - ## API ### isStream(stream) @@ -46,12 +43,18 @@ Returns a `boolean` for whether it's a [`stream.Duplex`](https://nodejs.org/api/ Returns a `boolean` for whether it's a [`stream.Transform`](https://nodejs.org/api/stream.html#stream_class_stream_transform). - ## Related - [is-file-stream](https://github.com/jamestalmage/is-file-stream) - Detect if a stream is a file stream - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/build/node_modules/is-string/.eslintignore b/build/node_modules/is-string/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-string/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-string/.eslintrc b/build/node_modules/is-string/.eslintrc deleted file mode 100644 index 5bf1191f..00000000 --- a/build/node_modules/is-string/.eslintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "func-name-matching": 0, - "max-statements": [2, 15] - }, - - "overrides": [ - { - "files": ["test.js"], - "rules": { - "no-magic-numbers": 0, - }, - }, - ], -} diff --git a/build/node_modules/is-string/.github/FUNDING.yml b/build/node_modules/is-string/.github/FUNDING.yml deleted file mode 100644 index 519746be..00000000 --- a/build/node_modules/is-string/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-string -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-string/.nycrc b/build/node_modules/is-string/.nycrc deleted file mode 100644 index a69aa2d8..00000000 --- a/build/node_modules/is-string/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test", - "test-corejs.js" - ] -} diff --git a/build/node_modules/is-string/CHANGELOG.md b/build/node_modules/is-string/CHANGELOG.md deleted file mode 100644 index 9334c53a..00000000 --- a/build/node_modules/is-string/CHANGELOG.md +++ /dev/null @@ -1,107 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - -## [v1.0.6](https://github.com/inspect-js/is-string/compare/v1.0.5...v1.0.6) - 2021-05-07 - -### Commits - -- [Tests] migrate tests to Github Actions [`c7790c8`](https://github.com/inspect-js/is-string/commit/c7790c89e5077251fe7ca32ac29eeee02f1b2751) -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`1e52bbd`](https://github.com/inspect-js/is-string/commit/1e52bbd19b1608f6932c0335d9981824584c3186) -- [Fix] do not use `Object.prototype.toString` when `Symbol.toStringTag` is shammed [`83337eb`](https://github.com/inspect-js/is-string/commit/83337ebf55308b7bb9c1befae420760e0f8d8016) -- [meta] do not publish github action workflow files [`b25aea2`](https://github.com/inspect-js/is-string/commit/b25aea2e8a53ed9e9090cf96481590cdc00a0957) -- [readme] update badges [`759ccd9`](https://github.com/inspect-js/is-string/commit/759ccd94de4a2000231a179f91af6b5c12c11e00) -- [Tests] run `nyc` on all tests [`dc02f70`](https://github.com/inspect-js/is-string/commit/dc02f7080c355f0d24368c1622db09f7cc30cdbd) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `auto-changelog`, `tape`; add `aud` [`a0f76fa`](https://github.com/inspect-js/is-string/commit/a0f76fa1990bb580948f9e2daa89bdcda3fae7f0) -- [actions] add "Allow Edits" workflow [`9ec3902`](https://github.com/inspect-js/is-string/commit/9ec390295b4faef7744d2b579c1050be66168cb7) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`57fbe21`](https://github.com/inspect-js/is-string/commit/57fbe215da83a3b601855a9c6543ad1a96de5702) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`191e55f`](https://github.com/inspect-js/is-string/commit/191e55ff1fa782654ffcce2df922e23345b56690) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`1ea2b81`](https://github.com/inspect-js/is-string/commit/1ea2b81e866775a7890e75c44c742204124aa354) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`105d1b9`](https://github.com/inspect-js/is-string/commit/105d1b9851e366ef23c2a27d4064e0d36da25939) -- [Dev Deps] update `auto-changelog`, `tape`; add `aud` [`114cfad`](https://github.com/inspect-js/is-string/commit/114cfad854d8860421f847cd99a3bdb8ef1353dc) -- [meta] use `prepublishOnly` script for npm 7+ [`fc38f26`](https://github.com/inspect-js/is-string/commit/fc38f26adb486f50880c5771d145ab2bffb6247a) -- [meta] gitignore coverage output [`3419127`](https://github.com/inspect-js/is-string/commit/34191278f1fa09ba4da801a6fd7a32e31050e759) -- [actions] update rebase action to use checkout v2 [`334eca0`](https://github.com/inspect-js/is-string/commit/334eca02d40f4cf7dc15a8e7d5ff06852028abb5) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`7a332e9`](https://github.com/inspect-js/is-string/commit/7a332e963f1ab717fafa671e0fa8a1b20c53d861) -- [meta] remove explicit audit level config [`04630b1`](https://github.com/inspect-js/is-string/commit/04630b1b535084322ddeae8efb79a8810d7cf325) - -## [v1.0.5](https://github.com/inspect-js/is-string/compare/v1.0.4...v1.0.5) - 2019-12-18 - -### Commits - -- [Tests] use shared travis-ci configs [`4121d6b`](https://github.com/inspect-js/is-string/commit/4121d6b168ae1d54a81791ee6877f9813cab6253) -- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v5.12`, `v4.9`; use `nvm install-latest-npm` [`e7a3e89`](https://github.com/inspect-js/is-string/commit/e7a3e89ccb9638d73f45dbcb2a42e509bd3153c4) -- Update `eslint`, `tape`, `semver`; use my personal shared `eslint` config [`6c380a7`](https://github.com/inspect-js/is-string/commit/6c380a70011714370e754fa0df95f56cdcaa3e60) -- [Tests] remove `jscs` [`3d49592`](https://github.com/inspect-js/is-string/commit/3d49592b9880fcb1a23b67286445281131a553e3) -- Update `is`, `tape`, `covert`, `jscs`, `editorconfig-tools`, `eslint`, `nsp`, `semver`. [`cc6983d`](https://github.com/inspect-js/is-string/commit/cc6983d06bc98f4ae9b7c9439d5d73c7318d8acd) -- [meta] add `auto-changelog` [`b857897`](https://github.com/inspect-js/is-string/commit/b85789723ce3a7064536598e0fcdd495257c6134) -- [meta] remove unused Makefile and associated utilities [`3f0f51c`](https://github.com/inspect-js/is-string/commit/3f0f51cbae1f97dbe1466eee88d105b3df0d2f0a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is`, `covert`, `tape`, `semver` [`9d4a95e`](https://github.com/inspect-js/is-string/commit/9d4a95e4473fe8195501878525b5af5948aa45c9) -- Update `eslint` [`e861b4b`](https://github.com/inspect-js/is-string/commit/e861b4bc71f5390670aebdff91119a1f8aeeb88a) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`172e2dd`](https://github.com/inspect-js/is-string/commit/172e2dd1a0b9eb042bcb9a80ff5e774a90ff0695) -- Test on `node` and `io.js` latest. [`fd426cd`](https://github.com/inspect-js/is-string/commit/fd426cd18b22b0d0e1731598125393dcfe0c5704) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` [`23bdf83`](https://github.com/inspect-js/is-string/commit/23bdf83cf42138eba09f45bd0b040b069f9839d4) -- [actions] add automatic rebasing / merge commit blocking [`96153c0`](https://github.com/inspect-js/is-string/commit/96153c0d687a7fda2261f4c02add5d0b41e8aed7) -- [meta] create FUNDING.yml [`66ae246`](https://github.com/inspect-js/is-string/commit/66ae246d6cdaa4ccbc21f7c144b672139b8ccef6) -- [Dev Deps] update `is`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`817361a`](https://github.com/inspect-js/is-string/commit/817361a9673cd1ec9854b52578a980159f7d8701) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `semver`, `tape` [`fc35d3f`](https://github.com/inspect-js/is-string/commit/fc35d3feb40921bb22e1639903cb7f2fab77814b) -- [Dev Deps] update `jscs` [`886767e`](https://github.com/inspect-js/is-string/commit/886767e04e5ad59ac0bc926a87233cc8546c8b4f) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`3410922`](https://github.com/inspect-js/is-string/commit/341092203c11a3b92eee55a7ecb7b8265e8fcecd) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`4d6c73b`](https://github.com/inspect-js/is-string/commit/4d6c73b507bcd39050ef71e554069f72fc5b222a) -- Update `nsp`, `eslint` [`b11de49`](https://github.com/inspect-js/is-string/commit/b11de4910beee1ffe1e67fbe25ec6707ca796b27) -- Update `eslint`, `semver` [`0777977`](https://github.com/inspect-js/is-string/commit/0777977757a85a1db75831d03a14b4b1fde05d7e) -- Only apps should have lockfiles [`78b49ff`](https://github.com/inspect-js/is-string/commit/78b49ffd04d4cd8c57d9e7b485421fbf3641b41b) -- [meta] add `funding` field [`81328a6`](https://github.com/inspect-js/is-string/commit/81328a6ef3eee989164127e4c0c82f1da73d3567) -- [Dev Deps] update `eslint`, `tape` [`fc9a225`](https://github.com/inspect-js/is-string/commit/fc9a225b27935f7c9c2704281d7fddd3614d3cb8) -- [Tests] use `eclint` instead of `editorconfig-tools` [`59c2c61`](https://github.com/inspect-js/is-string/commit/59c2c610dbd8e8ca1e4aa3fa9c9f93205cab9b07) -- [Dev Deps] Update `tape`, `eslint` [`a429816`](https://github.com/inspect-js/is-string/commit/a429816688e23c81948b4ae72324c26c27849b7c) -- Test on `io.js` `v2.2` [`08b476e`](https://github.com/inspect-js/is-string/commit/08b476ed0734a70e3091c04ddd2f173a2df21eb2) -- Test up to `io.js` `v3.0` [`22637ef`](https://github.com/inspect-js/is-string/commit/22637ef9e0030533df85cf1992fc099a88b1924c) -- [meta] add `safe-publish-latest` [`20ccb48`](https://github.com/inspect-js/is-string/commit/20ccb48fd85f0245eb893507d00003090da020d0) -- [Dev Deps] update `tape` [`06b58a0`](https://github.com/inspect-js/is-string/commit/06b58a048c2a820e5611ad2bd9ddfbe893295a57) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`ea7cf84`](https://github.com/inspect-js/is-string/commit/ea7cf849b952c924d1687a302098251a7b827c80) -- Test on `io.js` `v2.4` [`66ec3ea`](https://github.com/inspect-js/is-string/commit/66ec3ea390b364583a792799b53857fd186ccc88) -- Test on `io.js` `v2.3` [`ca6e796`](https://github.com/inspect-js/is-string/commit/ca6e796f16ec433b88962162fde8012f28e18f1e) -- Fix tests for faked @@toStringTag [`3cce832`](https://github.com/inspect-js/is-string/commit/3cce8329133dfd233987359df151018b3b136be1) - -## [v1.0.4](https://github.com/inspect-js/is-string/compare/v1.0.3...v1.0.4) - 2015-01-29 - -### Commits - -- If @@toStringTag is not present, use the old-school Object#toString test. [`30675ec`](https://github.com/inspect-js/is-string/commit/30675ecb5c5cc43873918661a414a1d0f8b77325) - -## [v1.0.3](https://github.com/inspect-js/is-string/compare/v1.0.2...v1.0.3) - 2015-01-29 - -### Commits - -- Refactor to aid optimization of non-try/catch code. [`9b2772a`](https://github.com/inspect-js/is-string/commit/9b2772abe09ba8cbaa631322cc226ee906d2db22) - -## [v1.0.2](https://github.com/inspect-js/is-string/compare/v1.0.1...v1.0.2) - 2015-01-29 - -### Commits - -- Fix broken package.json [`dc921d3`](https://github.com/inspect-js/is-string/commit/dc921d332b64e4041162f04e4712b0dc687863a5) - -## [v1.0.1](https://github.com/inspect-js/is-string/compare/v1.0.0...v1.0.1) - 2015-01-29 - -### Commits - -- Fix eslint config. [`c4e05bd`](https://github.com/inspect-js/is-string/commit/c4e05bd171da6002d432e451fd48912db8b048e0) -- Add early exits for typeof "string", or typeof not "object". [`82f41d3`](https://github.com/inspect-js/is-string/commit/82f41d36a599bc6a06152792c84c7683e412c513) - -## v1.0.0 - 2015-01-29 - -### Commits - -- Dotfiles. [`45bc9dd`](https://github.com/inspect-js/is-string/commit/45bc9dd60201722344986a6c7536be9ea9ccefbf) -- `make release` [`23707f5`](https://github.com/inspect-js/is-string/commit/23707f5ecfdf00afb0e57c06ac07f7f49cdeb606) -- package.json [`575ad81`](https://github.com/inspect-js/is-string/commit/575ad811c61b156cfbcc60ff61947183c6ebe6a2) -- Read me [`3f67c9a`](https://github.com/inspect-js/is-string/commit/3f67c9a0725f811845d38646a19322895cd03981) -- Initial commit [`2c26a7a`](https://github.com/inspect-js/is-string/commit/2c26a7a2e41dec77be2c59d5847f29a6ab7c0b29) -- Tests. [`38c987b`](https://github.com/inspect-js/is-string/commit/38c987b8513b0ac03b0897e0fce7de8135d4ee0f) -- Implementation. [`0471d59`](https://github.com/inspect-js/is-string/commit/0471d59078d7f3f77619913ec21c57c0af27114c) diff --git a/build/node_modules/is-string/LICENSE b/build/node_modules/is-string/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-string/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-string/README.md b/build/node_modules/is-string/README.md deleted file mode 100644 index d9d7edf8..00000000 --- a/build/node_modules/is-string/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# is-string [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS String object or primitive? This module works cross-realm/iframe, and despite ES6 @@toStringTag. - -## Example - -```js -var isString = require('is-string'); -var assert = require('assert'); - -assert.notOk(isString(undefined)); -assert.notOk(isString(null)); -assert.notOk(isString(false)); -assert.notOk(isString(true)); -assert.notOk(isString(function () {})); -assert.notOk(isString([])); -assert.notOk(isString({})); -assert.notOk(isString(/a/g)); -assert.notOk(isString(new RegExp('a', 'g'))); -assert.notOk(isString(new Date())); -assert.notOk(isString(42)); -assert.notOk(isString(NaN)); -assert.notOk(isString(Infinity)); -assert.notOk(isString(new Number(42))); - -assert.ok(isString('foo')); -assert.ok(isString(Object('foo'))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-string -[2]: https://versionbadg.es/inspect-js/is-string.svg -[5]: https://david-dm.org/inspect-js/is-string.svg -[6]: https://david-dm.org/inspect-js/is-string -[7]: https://david-dm.org/inspect-js/is-string/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-string#info=devDependencies -[11]: https://nodei.co/npm/is-string.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-string.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-string.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-string -[codecov-image]: https://codecov.io/gh/inspect-js/is-string/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-string/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-string -[actions-url]: https://github.com/inspect-js/is-string/actions diff --git a/build/node_modules/is-string/index.js b/build/node_modules/is-string/index.js deleted file mode 100644 index 5f77f03d..00000000 --- a/build/node_modules/is-string/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var strValue = String.prototype.valueOf; -var tryStringObject = function tryStringObject(value) { - try { - strValue.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var strClass = '[object String]'; -var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; - -module.exports = function isString(value) { - if (typeof value === 'string') { - return true; - } - if (typeof value !== 'object') { - return false; - } - return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass; -}; diff --git a/build/node_modules/is-string/package.json b/build/node_modules/is-string/package.json deleted file mode 100644 index 95aeb6d6..00000000 --- a/build/node_modules/is-string/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_from": "is-string@^1.0.6", - "_id": "is-string@1.0.6", - "_inBundle": false, - "_integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "_location": "/is-string", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-string@^1.0.6", - "name": "is-string", - "escapedName": "is-string", - "rawSpec": "^1.0.6", - "saveSpec": null, - "fetchSpec": "^1.0.6" - }, - "_requiredBy": [ - "/es-abstract", - "/which-boxed-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "_shasum": "3fe5d5992fb0d93404f32584d4b0179a71b54a5f", - "_spec": "is-string@^1.0.6", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false - }, - "bugs": { - "url": "https://github.com/ljharb/is-string/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Is this value a JS String object or primitive? This module works cross-realm/iframe, and despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "core-js": "^3.12.0", - "eclint": "^2.8.1", - "eslint": "^7.26.0", - "foreach": "^2.0.5", - "indexof": "^0.0.1", - "is": "^3.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/ljharb/is-string#readme", - "keywords": [ - "String", - "string", - "ES6", - "toStringTag", - "@@toStringTag", - "String object" - ], - "license": "MIT", - "main": "index.js", - "name": "is-string", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-string.git" - }, - "scripts": { - "eccheck": "eclint check *.js **/*.js > /dev/null", - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only && npm run test:corejs", - "test:corejs": "nyc tape test-corejs.js", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.6" -} diff --git a/build/node_modules/is-string/test/index.js b/build/node_modules/is-string/test/index.js deleted file mode 100644 index 8fbba42a..00000000 --- a/build/node_modules/is-string/test/index.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isString = require('../'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator !== 'undefined'; - -test('not Strings', function (t) { - t.notOk(isString(), 'undefined is not String'); - t.notOk(isString(null), 'null is not String'); - t.notOk(isString(false), 'false is not String'); - t.notOk(isString(true), 'true is not String'); - t.notOk(isString([]), 'array is not String'); - t.notOk(isString({}), 'object is not String'); - t.notOk(isString(function () {}), 'function is not String'); - t.notOk(isString(/a/g), 'regex literal is not String'); - t.notOk(isString(new RegExp('a', 'g')), 'regex object is not String'); - t.notOk(isString(new Date()), 'new Date() is not String'); - t.notOk(isString(42), 'number is not String'); - t.notOk(isString(Object(42)), 'number object is not String'); - t.notOk(isString(NaN), 'NaN is not String'); - t.notOk(isString(Infinity), 'Infinity is not String'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var fakeString = { - toString: function () { return '7'; }, - valueOf: function () { return '42'; } - }; - fakeString[Symbol.toStringTag] = 'String'; - t.notOk(isString(fakeString), 'fake String with @@toStringTag "String" is not String'); - t.end(); -}); - -test('Strings', function (t) { - t.ok(isString('foo'), 'string primitive is String'); - t.ok(isString(Object('foo')), 'string object is String'); - t.end(); -}); diff --git a/build/node_modules/is-symbol/.editorconfig b/build/node_modules/is-symbol/.editorconfig deleted file mode 100644 index eaa21416..00000000 --- a/build/node_modules/is-symbol/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = tab; -insert_final_newline = true; -quote_type = auto; -space_after_anonymous_functions = true; -space_after_control_statements = true; -spaces_around_operators = true; -trim_trailing_whitespace = true; -spaces_in_brackets = false; -end_of_line = lf; - diff --git a/build/node_modules/is-symbol/.eslintignore b/build/node_modules/is-symbol/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-symbol/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-symbol/.eslintrc b/build/node_modules/is-symbol/.eslintrc deleted file mode 100644 index 046dd071..00000000 --- a/build/node_modules/is-symbol/.eslintrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "overrides": [ - { - "files": "test/**", - "rules": { - "no-restricted-properties": 0, - }, - }, - ], -} diff --git a/build/node_modules/is-symbol/.github/FUNDING.yml b/build/node_modules/is-symbol/.github/FUNDING.yml deleted file mode 100644 index a65600e7..00000000 --- a/build/node_modules/is-symbol/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-symbol -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-symbol/.nycrc b/build/node_modules/is-symbol/.nycrc deleted file mode 100644 index bdd626ce..00000000 --- a/build/node_modules/is-symbol/.nycrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-symbol/CHANGELOG.md b/build/node_modules/is-symbol/CHANGELOG.md deleted file mode 100644 index ce8dd991..00000000 --- a/build/node_modules/is-symbol/CHANGELOG.md +++ /dev/null @@ -1,113 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.4](https://github.com/inspect-js/is-symbol/compare/v1.0.3...v1.0.4) - 2021-05-08 - -### Commits - -- [Tests] migrate tests to Github Actions [`997d43c`](https://github.com/inspect-js/is-symbol/commit/997d43c091d1f8d3a2b3d7dfb17a73cdc5a75dde) -- [actions] use `node/install` instead of `node/run`; use `codecov` action [`fe0ccb7`](https://github.com/inspect-js/is-symbol/commit/fe0ccb7b7b64e74e095ef782dcc1d24d6c4b0be4) -- [meta] remove unused Makefile and associated utilities [`3ab2748`](https://github.com/inspect-js/is-symbol/commit/3ab2748ab6c2de21fc24f131bb880c68ba0b7b34) -- [meta] do not publish github action workflow files [`f20fafe`](https://github.com/inspect-js/is-symbol/commit/f20fafeb21585c7b4871ea19f104fd7696734fe8) -- [Tests] run `nyc` on all tests [`5c332fc`](https://github.com/inspect-js/is-symbol/commit/5c332fc92cecbed4a2041bc0c52b991b4a593f34) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`c5a58a8`](https://github.com/inspect-js/is-symbol/commit/c5a58a8bea390a9b02e1c8c4aac30c223370297b) -- [readme] fix repo URLs; remove travis badge [`bcd9258`](https://github.com/inspect-js/is-symbol/commit/bcd9258d161fe709148fcc47962df3372c544727) -- [actions] add "Allow Edits" workflow [`33ae2d3`](https://github.com/inspect-js/is-symbol/commit/33ae2d3940e9daa6003a84c232874ee558b2fb44) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` [`e53def0`](https://github.com/inspect-js/is-symbol/commit/e53def0b77c38cbfae87fd8bbfd78953b845ea94) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect` [`ae36504`](https://github.com/inspect-js/is-symbol/commit/ae365048c0c1b13457faa78658b80561f5a0bcd0) -- [readme] add actions and codecov badges [`aae7f09`](https://github.com/inspect-js/is-symbol/commit/aae7f09bd59d36df69d3b66d9b351c39fe072330) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`d993fae`](https://github.com/inspect-js/is-symbol/commit/d993fae6d89856d4ab7818874be597249cb8a8cc) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`51808a5`](https://github.com/inspect-js/is-symbol/commit/51808a55f272023201f40a59b2459ec6305bf73a) -- [Dev Deps] update `auto-changelog`, `tape` [`c90040f`](https://github.com/inspect-js/is-symbol/commit/c90040f0aeded8d0071a78d5cd593b385f8828ee) -- [Dev Deps] update `eslint`, `tape` [`9fee159`](https://github.com/inspect-js/is-symbol/commit/9fee159403d499a5ed2f5cb5db03747d09ab1766) -- [meta] use `prepublishOnly` script for npm 7+ [`b166afc`](https://github.com/inspect-js/is-symbol/commit/b166afc3ae3c6d11721a9558ddb112a28261688d) -- [meta] gitignore coverage output [`4a0fe3a`](https://github.com/inspect-js/is-symbol/commit/4a0fe3aa074b933074fcc231ce739005e1fec195) -- [actions] update workflows [`fbcbc9e`](https://github.com/inspect-js/is-symbol/commit/fbcbc9eb5bfe2cf9a77d5bd86bb1dece8e5f81d0) -- [Dev Deps] update `auto-changelog`; add `aud` [`e66ab98`](https://github.com/inspect-js/is-symbol/commit/e66ab989e48b81b48bd443d35dba0071950c5d7a) -- [Deps] update `has-symbols` [`6ce7de5`](https://github.com/inspect-js/is-symbol/commit/6ce7de53c866c068de2c28d97b3a64cf6d5f6a76) -- [actions] update rebase action to use checkout v2 [`1173c79`](https://github.com/inspect-js/is-symbol/commit/1173c79914076d73aec9aebc22dce4122e7bd3ae) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`94a6348`](https://github.com/inspect-js/is-symbol/commit/94a6348f6274eac9bf4c5a6057b4f6120fc7d1d1) -- [Tests] only audit prod deps [`0692681`](https://github.com/inspect-js/is-symbol/commit/06926811fa029fe0fded5d0af4553a7808c143d1) -- [meta] do not publish .nvmrc file [`ed47833`](https://github.com/inspect-js/is-symbol/commit/ed478333c72384f8dbeb51e5fd501238f52a4972) - -## [v1.0.3](https://github.com/inspect-js/is-symbol/compare/v1.0.2...v1.0.3) - 2019-11-20 - -### Commits - -- [Tests] use shared travis-ci configs [`034afdd`](https://github.com/inspect-js/is-symbol/commit/034afdd677c1b72b76751f3e5131acc927a32916) -- [Tests] remove `jscs` [`0c026a0`](https://github.com/inspect-js/is-symbol/commit/0c026a06815e46a33a8a5b4b1be8965d32d38e5c) -- [meta] add `auto-changelog` [`9a1776b`](https://github.com/inspect-js/is-symbol/commit/9a1776bb49f3e6ac12a5b3a447edcc651216891b) -- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`23a6db4`](https://github.com/inspect-js/is-symbol/commit/23a6db49a338d19eab19d876745513820bb6a9dc) -- [Tests] up to `node` `v11.7`, `v10.15`, `v8.15`, `v6.16` [`892d92e`](https://github.com/inspect-js/is-symbol/commit/892d92e7c40f3c0577583a98134106181c38bb7e) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `semver`, `tape` [`c2e6d6a`](https://github.com/inspect-js/is-symbol/commit/c2e6d6a71f839522bbd124b7419f5fc42ffff6d3) -- [readme] fix repo URLs [`655c288`](https://github.com/inspect-js/is-symbol/commit/655c288a815856e647dba4b6049b1743cec3533c) -- [actions] add automatic rebasing / merge commit blocking [`97b1229`](https://github.com/inspect-js/is-symbol/commit/97b12296bf8fa1ce0c6121bf3de56c413da10aae) -- [meta] add FUNDING.yml [`94c64a3`](https://github.com/inspect-js/is-symbol/commit/94c64a367a1c34f960cf6007fc65cfbbcba34ba3) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape`, `semver` [`71ab543`](https://github.com/inspect-js/is-symbol/commit/71ab543e09b820378362f4f66248addd410c6388) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `semver`, `tape` [`c6212f9`](https://github.com/inspect-js/is-symbol/commit/c6212f94e28622c94bb37189ffc241ee88b5b1dd) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `object-inspect` [`91bc802`](https://github.com/inspect-js/is-symbol/commit/91bc802e18e63f4e8230ee0148302ce849e2f733) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`8cbe69c`](https://github.com/inspect-js/is-symbol/commit/8cbe69c3fafe9cfbe7d27f710c88d02d2d2c6a00) -- [Tests] use `npm audit` instead of `nsp` [`741b51d`](https://github.com/inspect-js/is-symbol/commit/741b51dac868f6b22736c204910d257bcf4d5044) -- [meta] add `funding` field [`65b58d1`](https://github.com/inspect-js/is-symbol/commit/65b58d1e9fc572712d462d615e6b2418627d8fb9) -- [Deps] update `has-symbols` [`9cb5b2a`](https://github.com/inspect-js/is-symbol/commit/9cb5b2a9a3b89e8e0246be8df4fff3f5ceac7309) - -## [v1.0.2](https://github.com/inspect-js/is-symbol/compare/v1.0.1...v1.0.2) - 2018-09-20 - -### Commits - -- Update `eslint`, `tape`, `semver`; use my personal shared `eslint` config [`e86aaea`](https://github.com/inspect-js/is-symbol/commit/e86aaea8d81356801ecfc60540523e9b809a55f4) -- [Tests] on all node minors; improve test matrix [`50bc07f`](https://github.com/inspect-js/is-symbol/commit/50bc07f2ff73e5499b02a61f0a00ea48a84ae213) -- [Dev Deps] update `tape`, `jscs`, `nsp`, `semver`, `eslint`, `@ljharb/eslint-config` [`45e17bd`](https://github.com/inspect-js/is-symbol/commit/45e17bdf145846f30122348a94c5e506b90836ba) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9`; use `nvm install-latest-npm` [`44402cb`](https://github.com/inspect-js/is-symbol/commit/44402cb82d4499e947b48b31b14667d1ebe7e2b4) -- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`, `v4.8`; improve matrix; old npm breaks on newer nodes [`9047c23`](https://github.com/inspect-js/is-symbol/commit/9047c232857ecb80551a21cc0b1cc4c91d28da1f) -- Update `tape`, `covert`, `jscs`, `semver` [`d57d1ce`](https://github.com/inspect-js/is-symbol/commit/d57d1ce3fc0b740885a1ed5c0738d4a27b29ab07) -- Add `npm run eslint` [`0d75a66`](https://github.com/inspect-js/is-symbol/commit/0d75a6638ad6f7ff7d5bc958531a6328fb13e3fe) -- Update `eslint` [`042fb3a`](https://github.com/inspect-js/is-symbol/commit/042fb3aec590f0c0d205b15812b285ad95cfff6b) -- [Refactor] use `has-symbols` and `object-inspect` [`129bc68`](https://github.com/inspect-js/is-symbol/commit/129bc68dd619b789b9956ac9b63b46257ee1060c) -- [Tests] up to `node` `v10.11`, `v8.12` [`c1822e8`](https://github.com/inspect-js/is-symbol/commit/c1822e84d6cc0cee9f1c2893e91b1aa999ad41db) -- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`089d2cf`](https://github.com/inspect-js/is-symbol/commit/089d2cf7cad87b75aa534769af11524ad2e79080) -- [Tests] up to `node` `v8.4`; newer npm breaks on older node [`05ce701`](https://github.com/inspect-js/is-symbol/commit/05ce701e3c1be8b3266ffac49806832e410491c1) -- All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. [`241e6a6`](https://github.com/inspect-js/is-symbol/commit/241e6a655c0e19e9dcf0ae88e7fddd4cde394c5c) -- Test on latest `node` and `io.js` versions. [`5c8d5de`](https://github.com/inspect-js/is-symbol/commit/5c8d5deb9b7c01a8cdf959082a3d619c19751b0a) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `semver`, `tape` [`06047bf`](https://github.com/inspect-js/is-symbol/commit/06047bf72b20a66c0b455e80856b2d00b1910391) -- [Dev Deps] update `jscs`, `nsp`, `semver`, `eslint`, `@ljharb/eslint-config` [`9d25dd7`](https://github.com/inspect-js/is-symbol/commit/9d25dd79347c89f98207a3bad39f667f1f8a410e) -- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`ce173bd`](https://github.com/inspect-js/is-symbol/commit/ce173bda6e146907e3061a0e70463107d955de35) -- Update `nsp`, `eslint` [`29e5214`](https://github.com/inspect-js/is-symbol/commit/29e52140fac2049b4a32e175787bb3b184a1dd72) -- Update `semver`, `eslint` [`53be884`](https://github.com/inspect-js/is-symbol/commit/53be884c2811f7a4452581003d9cdaf6f9bddd3c) -- [Dev Deps] update `eslint`, `nsp`, `semver`, `tape` [`3bd149c`](https://github.com/inspect-js/is-symbol/commit/3bd149c869c099b07104b06c0692755a01f8298c) -- [Dev Deps] update `jscs` [`69b4231`](https://github.com/inspect-js/is-symbol/commit/69b4231632b170e5ddb350db2f0c59e6cad6f548) -- Test up to `io.js` `v2.1` [`0b61ac7`](https://github.com/inspect-js/is-symbol/commit/0b61ac7ac4de390296aeefb9395549592ea87da4) -- [Dev Deps] update `tape` [`5e1b200`](https://github.com/inspect-js/is-symbol/commit/5e1b2008c910bcdabee299a1ac599143ea07c3f9) -- Only apps should have lockfiles. [`a191ff5`](https://github.com/inspect-js/is-symbol/commit/a191ff5f0320fc16db42fdaa40f0c21d4326255e) -- [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config` [`97c87ef`](https://github.com/inspect-js/is-symbol/commit/97c87ef52b966f211e231092a54ef6ed05c99a26) -- Test on `io.js` `v2.2` [`42560e4`](https://github.com/inspect-js/is-symbol/commit/42560e466e17cbbb9fa71c0121f4bbbcf266c887) -- [Dev Deps] Update `tape`, `eslint` [`149b2f2`](https://github.com/inspect-js/is-symbol/commit/149b2f20bde92b2da12ccfeb8988beb2dc95c37c) -- [Tests] fix test messages [`28bd1ed`](https://github.com/inspect-js/is-symbol/commit/28bd1eda310590e13ada19cbd718c85c25d8a0c5) -- Test up to `io.js` `v3.0` [`c0dcc98`](https://github.com/inspect-js/is-symbol/commit/c0dcc98313d17151ec043e5452df306618be865e) -- `node` now supports Symbols now. [`d1853ad`](https://github.com/inspect-js/is-symbol/commit/d1853adf6369ab9d4c4516bdb032c2e42f52f90a) -- [Dev Deps] update `tape` [`f7a6575`](https://github.com/inspect-js/is-symbol/commit/f7a6575fbdef13abcc412c63d22b56943ed85969) -- Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. [`aae9c6a`](https://github.com/inspect-js/is-symbol/commit/aae9c6a724578659976ea74e11ec9fe35608607b) -- Test on `io.js` `v2.4` [`ab8f449`](https://github.com/inspect-js/is-symbol/commit/ab8f4492115270cc00a479915b02ac1bac75dfed) -- Test on `io.js` `v2.3` [`58ce871`](https://github.com/inspect-js/is-symbol/commit/58ce871674e857955b333aa057eeecd68b40e988) - -## [v1.0.1](https://github.com/inspect-js/is-symbol/compare/v1.0.0...v1.0.1) - 2015-01-26 - -### Commits - -- Correct package description. [`f4d15b9`](https://github.com/inspect-js/is-symbol/commit/f4d15b928b4b754b097a84f7c3ceac73c486aceb) - -## v1.0.0 - 2015-01-24 - -### Commits - -- Dotfiles. [`5d9a744`](https://github.com/inspect-js/is-symbol/commit/5d9a7441f724630070e9bd74a995191cafa1064b) -- Tests. [`8af5663`](https://github.com/inspect-js/is-symbol/commit/8af56631950dcee48b36f517837273193a6ba119) -- `make release` [`6293446`](https://github.com/inspect-js/is-symbol/commit/629344654a72e7fc8059607d6a86c64b002c3e5d) -- package.json [`7d4082c`](https://github.com/inspect-js/is-symbol/commit/7d4082ca9502118e70d24f526704d45a1a7f2067) -- Initial commit [`cbb179f`](https://github.com/inspect-js/is-symbol/commit/cbb179f677bd3dcb56ac5e3f0a7a9af503fd8952) -- Read me. [`099a775`](https://github.com/inspect-js/is-symbol/commit/099a775e7e751706283ae1cab7a8635c094773a9) -- Implementation. [`cb51248`](https://github.com/inspect-js/is-symbol/commit/cb51248eedaf55e0b8ad7dacdab179db2d76e96e) diff --git a/build/node_modules/is-symbol/LICENSE b/build/node_modules/is-symbol/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-symbol/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-symbol/README.md b/build/node_modules/is-symbol/README.md deleted file mode 100644 index 5432594c..00000000 --- a/build/node_modules/is-symbol/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# is-symbol [![Version Badge][2]][1] - -[![github actions][actions-image]][actions-url] -[![coverage][codecov-image]][codecov-url] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this an ES6 Symbol value? - -## Example - -```js -var isSymbol = require('is-symbol'); -assert(!isSymbol(function () {})); -assert(!isSymbol(null)); -assert(!isSymbol(function* () { yield 42; return Infinity; }); - -assert(isSymbol(Symbol.iterator)); -assert(isSymbol(Symbol('foo'))); -assert(isSymbol(Symbol.for('foo'))); -assert(isSymbol(Object(Symbol('foo')))); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-symbol -[2]: https://versionbadg.es/inspect-js/is-symbol.svg -[5]: https://david-dm.org/inspect-js/is-symbol.svg -[6]: https://david-dm.org/inspect-js/is-symbol -[7]: https://david-dm.org/inspect-js/is-symbol/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-symbol#info=devDependencies -[11]: https://nodei.co/npm/is-symbol.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/is-symbol.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/is-symbol.svg -[downloads-url]: https://npm-stat.com/charts.html?package=is-symbol -[codecov-image]: https://codecov.io/gh/inspect-js/is-symbol/branch/main/graphs/badge.svg -[codecov-url]: https://app.codecov.io/gh/inspect-js/is-symbol/ -[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-symbol -[actions-url]: https://github.com/inspect-js/is-symbol/actions diff --git a/build/node_modules/is-symbol/index.js b/build/node_modules/is-symbol/index.js deleted file mode 100644 index 3d653e27..00000000 --- a/build/node_modules/is-symbol/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; -var hasSymbols = require('has-symbols')(); - -if (hasSymbols) { - var symToStr = Symbol.prototype.toString; - var symStringRegex = /^Symbol\(.*\)$/; - var isSymbolObject = function isRealSymbolObject(value) { - if (typeof value.valueOf() !== 'symbol') { - return false; - } - return symStringRegex.test(symToStr.call(value)); - }; - - module.exports = function isSymbol(value) { - if (typeof value === 'symbol') { - return true; - } - if (toStr.call(value) !== '[object Symbol]') { - return false; - } - try { - return isSymbolObject(value); - } catch (e) { - return false; - } - }; -} else { - - module.exports = function isSymbol(value) { - // this environment does not support Symbols. - return false && value; - }; -} diff --git a/build/node_modules/is-symbol/package.json b/build/node_modules/is-symbol/package.json deleted file mode 100644 index de304970..00000000 --- a/build/node_modules/is-symbol/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_from": "is-symbol@^1.0.2", - "_id": "is-symbol@1.0.4", - "_inBundle": false, - "_integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "_location": "/is-symbol", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-symbol@^1.0.2", - "name": "is-symbol", - "escapedName": "is-symbol", - "rawSpec": "^1.0.2", - "saveSpec": null, - "fetchSpec": "^1.0.2" - }, - "_requiredBy": [ - "/es-to-primitive", - "/which-boxed-primitive" - ], - "_resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "_shasum": "a6dac93b635b063ca6872236de88910a57af139c", - "_spec": "is-symbol@^1.0.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-to-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/is-symbol/issues" - }, - "bundleDependencies": false, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "deprecated": false, - "description": "Determine if a value is an ES6 Symbol or not.", - "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", - "aud": "^1.1.5", - "auto-changelog": "^2.2.1", - "eslint": "^7.26.0", - "nyc": "^10.3.2", - "object-inspect": "^1.10.3", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-symbol#readme", - "keywords": [ - "symbol", - "es6", - "is", - "Symbol" - ], - "license": "MIT", - "main": "index.js", - "name": "is-symbol", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-symbol.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || npm run prepublishOnly", - "prepublishOnly": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.4" -} diff --git a/build/node_modules/is-symbol/test/index.js b/build/node_modules/is-symbol/test/index.js deleted file mode 100644 index e01f035c..00000000 --- a/build/node_modules/is-symbol/test/index.js +++ /dev/null @@ -1,92 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isSymbol = require('../index'); - -var forEach = function (arr, func) { - var i; - for (i = 0; i < arr.length; ++i) { - func(arr[i], i, arr); - } -}; - -var hasSymbols = require('has-symbols')(); -var inspect = require('object-inspect'); -var debug = function (v, m) { return inspect(v) + ' ' + m; }; - -test('non-symbol values', function (t) { - var nonSymbols = [ - true, - false, - Object(true), - Object(false), - null, - undefined, - {}, - [], - /a/g, - 'string', - 42, - new Date(), - function () {}, - NaN - ]; - t.plan(nonSymbols.length); - forEach(nonSymbols, function (nonSymbol) { - t.equal(false, isSymbol(nonSymbol), debug(nonSymbol, 'is not a symbol')); - }); - t.end(); -}); - -test('faked symbol values', function (t) { - t.test('real symbol valueOf', { skip: !hasSymbols }, function (st) { - var fakeSymbol = { valueOf: function () { return Symbol('foo'); } }; - st.equal(false, isSymbol(fakeSymbol), 'object with valueOf returning a symbol is not a symbol'); - st.end(); - }); - - t.test('faked @@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (st) { - var fakeSymbol = { valueOf: function () { return Symbol('foo'); } }; - fakeSymbol[Symbol.toStringTag] = 'Symbol'; - st.equal(false, isSymbol(fakeSymbol), 'object with fake Symbol @@toStringTag and valueOf returning a symbol is not a symbol'); - var notSoFakeSymbol = { valueOf: function () { return 42; } }; - notSoFakeSymbol[Symbol.toStringTag] = 'Symbol'; - st.equal(false, isSymbol(notSoFakeSymbol), 'object with fake Symbol @@toStringTag and valueOf not returning a symbol is not a symbol'); - st.end(); - }); - - var fakeSymbolString = { toString: function () { return 'Symbol(foo)'; } }; - t.equal(false, isSymbol(fakeSymbolString), 'object with toString returning Symbol(foo) is not a symbol'); - - t.end(); -}); - -test('Symbol support', { skip: !hasSymbols }, function (t) { - t.test('well-known Symbols', function (st) { - var isWellKnown = function filterer(name) { - return name !== 'for' && name !== 'keyFor' && !(name in filterer); - }; - var wellKnownSymbols = Object.getOwnPropertyNames(Symbol).filter(isWellKnown); - wellKnownSymbols.forEach(function (name) { - var sym = Symbol[name]; - st.equal(true, isSymbol(sym), debug(sym, ' is a symbol')); - }); - st.end(); - }); - - t.test('user-created symbols', function (st) { - var symbols = [ - Symbol(), - Symbol('foo'), - Symbol['for']('foo'), - Object(Symbol('object')) - ]; - symbols.forEach(function (sym) { - st.equal(true, isSymbol(sym), debug(sym, ' is a symbol')); - }); - st.end(); - }); - - t.end(); -}); - diff --git a/build/node_modules/is-typed-array/.editorconfig b/build/node_modules/is-typed-array/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/is-typed-array/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/is-typed-array/.eslintignore b/build/node_modules/is-typed-array/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/is-typed-array/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/is-typed-array/.eslintrc b/build/node_modules/is-typed-array/.eslintrc deleted file mode 100644 index 344c5b65..00000000 --- a/build/node_modules/is-typed-array/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-statements-per-line": [2, { "max": 2 }] - }, -} diff --git a/build/node_modules/is-typed-array/.github/FUNDING.yml b/build/node_modules/is-typed-array/.github/FUNDING.yml deleted file mode 100644 index 7dd24b96..00000000 --- a/build/node_modules/is-typed-array/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/is-typed-array -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/is-typed-array/.nycrc b/build/node_modules/is-typed-array/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/is-typed-array/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/is-typed-array/CHANGELOG.md b/build/node_modules/is-typed-array/CHANGELOG.md deleted file mode 100644 index e2f05739..00000000 --- a/build/node_modules/is-typed-array/CHANGELOG.md +++ /dev/null @@ -1,71 +0,0 @@ -1.1.5 / 2021-02-14 -================= - * [meta] do not publish github action workflow files or nyc output - * [Deps] update `call-bind`, `es-abstract` - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `is-callable`, `tape` - -1.1.4 / 2020-12-05 -================= - * [readme] fix repo URLs, remove defunct badges - * [Deps] update `available-typed-arrays`, `es-abstract`; use `call-bind` where applicable - * [meta] gitignore nyc output - * [meta] only audit prod deps - * [actions] add "Allow Edits" workflow - * [actions] switch Automatic Rebase workflow to `pull_request_target` event - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is-callable`, `make-arrow-function`, `make-generator-function`, `object-inspect`, `tape`; add `aud` - * [Tests] migrate tests to Github Actions - * [Tests] run `nyc` on all tests - -1.1.3 / 2020-01-24 -================= - * [Refactor] use `es-abstract`’s `callBound`, `available-typed-arrays`, `has-symbols` - -1.1.2 / 2020-01-20 -================= - * [Fix] in envs without Symbol.toStringTag, dc8a8cc made arrays return `true` - * [Tests] add `evalmd` to `prelint` - -1.1.1 / 2020-01-18 -================= - * [Robustness] don’t rely on Array.prototype.indexOf existing - * [meta] remove unused Makefile and associated utilities - * [meta] add `funding` field; create FUNDING.yml - * [actions] add automatic rebasing / merge commit blocking - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is-callable`, `replace`, `semver`, `tape`; add `safe-publish-latest` - * [Tests] use shared travis-ci configs - * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops - -1.1.0 / 2019-02-16 -================= - * [New] add `BigInt64Array` and `BigUint64Array` - * [Refactor] use an array instead of an object for storing Typed Array names - * [meta] ignore `test.html` - * [Tests] up to `node` `v11.10`, `v10.15`, `v8.15`, `v7.10`, `v6.16`, `v5.10`, `v4.9` - * [Tests] remove `jscs` - * [Tests] use `npm audit` instead of `nsp` - * [Dev Deps] update `eslint`,` @ljharb/eslint-config`, `is-callable`, `tape`, `replace`, `semver` - * [Dev Deps] remove unused eccheck script + dep - -1.0.4 / 2016-03-19 -================= - * [Fix] `Symbol.toStringTag` is on the super-`[[Prototype]]` of Float32Array, not the `[[Prototype]]` (#3) - * [Tests] up to `node` `v5.9`, `v4.4` - * [Tests] use pretest/posttest for linting/security - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `is-callable` - -1.0.3 / 2015-10-13 -================= - * [Deps] Add missing `foreach` dependency (#1) - -1.0.2 / 2015-10-05 -================= - * [Deps] Remove unneeded "isarray" dependency - * [Dev Deps] update `eslint`, `@ljharb/eslint-config` - -1.0.1 / 2015-10-02 -================= - * Rerelease: avoid instanceof and the constructor property; work cross-realm; work with Symbol.toStringTag. - -1.0.0 / 2015-05-06 -================= - * Initial release. diff --git a/build/node_modules/is-typed-array/LICENSE b/build/node_modules/is-typed-array/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/is-typed-array/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/is-typed-array/README.md b/build/node_modules/is-typed-array/README.md deleted file mode 100644 index 9afdf8f5..00000000 --- a/build/node_modules/is-typed-array/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# is-typed-array [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Is this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag. - -## Example - -```js -var isTypedArray = require('is-typed-array'); -var assert = require('assert'); - -assert.equal(false, isTypedArray(undefined)); -assert.equal(false, isTypedArray(null)); -assert.equal(false, isTypedArray(false)); -assert.equal(false, isTypedArray(true)); -assert.equal(false, isTypedArray([])); -assert.equal(false, isTypedArray({})); -assert.equal(false, isTypedArray(/a/g)); -assert.equal(false, isTypedArray(new RegExp('a', 'g'))); -assert.equal(false, isTypedArray(new Date())); -assert.equal(false, isTypedArray(42)); -assert.equal(false, isTypedArray(NaN)); -assert.equal(false, isTypedArray(Infinity)); -assert.equal(false, isTypedArray(new Number(42))); -assert.equal(false, isTypedArray('foo')); -assert.equal(false, isTypedArray(Object('foo'))); -assert.equal(false, isTypedArray(function () {})); -assert.equal(false, isTypedArray(function* () {})); -assert.equal(false, isTypedArray(x => x * x)); -assert.equal(false, isTypedArray([])); - -assert.ok(isTypedArray(new Int8Array())); -assert.ok(isTypedArray(new Uint8Array())); -assert.ok(isTypedArray(new Uint8ClampedArray())); -assert.ok(isTypedArray(new Int16Array())); -assert.ok(isTypedArray(new Uint16Array())); -assert.ok(isTypedArray(new Int32Array())); -assert.ok(isTypedArray(new Uint32Array())); -assert.ok(isTypedArray(new Float32Array())); -assert.ok(isTypedArray(new Float64Array())); -assert.ok(isTypedArray(new BigInt64Array())); -assert.ok(isTypedArray(new BigUint64Array())); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-typed-array -[2]: http://versionbadg.es/inspect-js/is-typed-array.svg -[5]: https://david-dm.org/inspect-js/is-typed-array.svg -[6]: https://david-dm.org/inspect-js/is-typed-array -[7]: https://david-dm.org/inspect-js/is-typed-array/dev-status.svg -[8]: https://david-dm.org/inspect-js/is-typed-array#info=devDependencies -[11]: https://nodei.co/npm/is-typed-array.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-typed-array.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-typed-array.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-typed-array diff --git a/build/node_modules/is-typed-array/index.js b/build/node_modules/is-typed-array/index.js deleted file mode 100644 index a769ced2..00000000 --- a/build/node_modules/is-typed-array/index.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var forEach = require('foreach'); -var availableTypedArrays = require('available-typed-arrays'); -var callBound = require('call-bind/callBound'); - -var $toString = callBound('Object.prototype.toString'); -var hasSymbols = require('has-symbols')(); -var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol'; - -var typedArrays = availableTypedArrays(); - -var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { - for (var i = 0; i < array.length; i += 1) { - if (array[i] === value) { - return i; - } - } - return -1; -}; -var $slice = callBound('String.prototype.slice'); -var toStrTags = {}; -var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); -var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); -if (hasToStringTag && gOPD && getPrototypeOf) { - forEach(typedArrays, function (typedArray) { - var arr = new global[typedArray](); - if (!(Symbol.toStringTag in arr)) { - throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.'); - } - var proto = getPrototypeOf(arr); - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor) { - var superProto = getPrototypeOf(proto); - descriptor = gOPD(superProto, Symbol.toStringTag); - } - toStrTags[typedArray] = descriptor.get; - }); -} - -var tryTypedArrays = function tryAllTypedArrays(value) { - var anyTrue = false; - forEach(toStrTags, function (getter, typedArray) { - if (!anyTrue) { - try { - anyTrue = getter.call(value) === typedArray; - } catch (e) { /**/ } - } - }); - return anyTrue; -}; - -module.exports = function isTypedArray(value) { - if (!value || typeof value !== 'object') { return false; } - if (!hasToStringTag) { - var tag = $slice($toString(value), 8, -1); - return $indexOf(typedArrays, tag) > -1; - } - if (!gOPD) { return false; } - return tryTypedArrays(value); -}; diff --git a/build/node_modules/is-typed-array/package.json b/build/node_modules/is-typed-array/package.json deleted file mode 100644 index d2c1a1d2..00000000 --- a/build/node_modules/is-typed-array/package.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "_from": "is-typed-array@^1.1.3", - "_id": "is-typed-array@1.1.5", - "_inBundle": false, - "_integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "_location": "/is-typed-array", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-typed-array@^1.1.3", - "name": "is-typed-array", - "escapedName": "is-typed-array", - "rawSpec": "^1.1.3", - "saveSpec": null, - "fetchSpec": "^1.1.3" - }, - "_requiredBy": [ - "/util", - "/which-typed-array" - ], - "_resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "_shasum": "f32e6e096455e329eb7b423862456aa213f0eb4e", - "_spec": "is-typed-array@^1.1.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/util", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/inspect-js/is-typed-array/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - }, - "deprecated": false, - "description": "Is this value a JS Typed Array? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", - "eslint": "^7.20.0", - "evalmd": "^0.0.19", - "is-callable": "^1.2.3", - "make-arrow-function": "^1.2.0", - "make-generator-function": "^2.0.0", - "nyc": "^10.3.2", - "object-inspect": "^1.9.0", - "safe-publish-latest": "^1.1.4", - "tape": "^5.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/is-typed-array#readme", - "keywords": [ - "array", - "TypedArray", - "typed array", - "is", - "typed", - "Int8Array", - "Uint8Array", - "Uint8ClampedArray", - "Int16Array", - "Uint16Array", - "Int32Array", - "Uint32Array", - "Float32Array", - "Float64Array", - "ES6", - "toStringTag", - "Symbol.toStringTag", - "@@toStringTag" - ], - "license": "MIT", - "main": "index.js", - "name": "is-typed-array", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/is-typed-array.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "prelint": "evalmd README.md", - "prepublish": "safe-publish-latest", - "pretest": "npm run --silent lint", - "test": "npm run tests-only && npm run test:harmony", - "test:harmony": "nyc node --harmony --es-staging test", - "tests-only": "nyc tape test" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.5" -} diff --git a/build/node_modules/is-typed-array/test/index.js b/build/node_modules/is-typed-array/test/index.js deleted file mode 100644 index e54700c8..00000000 --- a/build/node_modules/is-typed-array/test/index.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -var test = require('tape'); -var isTypedArray = require('../'); -var isCallable = require('is-callable'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; -var generators = require('make-generator-function')(); -var arrowFn = require('make-arrow-function')(); -var forEach = require('foreach'); -var inspect = require('object-inspect'); - -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'BigInt64Array', - 'BigUint64Array' -]; - -test('not arrays', function (t) { - t.test('non-number/string primitives', function (st) { - st.notOk(isTypedArray(), 'undefined is not typed array'); - st.notOk(isTypedArray(null), 'null is not typed array'); - st.notOk(isTypedArray(false), 'false is not typed array'); - st.notOk(isTypedArray(true), 'true is not typed array'); - st.end(); - }); - - t.notOk(isTypedArray({}), 'object is not typed array'); - t.notOk(isTypedArray(/a/g), 'regex literal is not typed array'); - // eslint-disable-next-line prefer-regex-literals - t.notOk(isTypedArray(new RegExp('a', 'g')), 'regex object is not typed array'); - t.notOk(isTypedArray(new Date()), 'new Date() is not typed array'); - - t.test('numbers', function (st) { - st.notOk(isTypedArray(42), 'number is not typed array'); - st.notOk(isTypedArray(Object(42)), 'number object is not typed array'); - st.notOk(isTypedArray(NaN), 'NaN is not typed array'); - st.notOk(isTypedArray(Infinity), 'Infinity is not typed array'); - st.end(); - }); - - t.test('strings', function (st) { - st.notOk(isTypedArray('foo'), 'string primitive is not typed array'); - st.notOk(isTypedArray(Object('foo')), 'string object is not typed array'); - st.end(); - }); - - t.end(); -}); - -test('Functions', function (t) { - t.notOk(isTypedArray(function () {}), 'function is not typed array'); - t.end(); -}); - -test('Generators', { skip: generators.length === 0 }, function (t) { - forEach(generators, function (genFn) { - t.notOk(isTypedArray(genFn), 'generator function ' + inspect(genFn) + ' is not typed array'); - }); - t.end(); -}); - -test('Arrow functions', { skip: !arrowFn }, function (t) { - t.notOk(isTypedArray(arrowFn), 'arrow function is not typed array'); - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - forEach(typedArrayNames, function (typedArray) { - if (typeof global[typedArray] === 'function') { - var fakeTypedArray = []; - fakeTypedArray[Symbol.toStringTag] = typedArray; - t.notOk(isTypedArray(fakeTypedArray), 'faked ' + typedArray + ' is not typed array'); - } else { - t.comment('# SKIP ' + typedArray + ' is not supported'); - } - }); - t.end(); -}); - -test('non-Typed Arrays', function (t) { - t.notOk(isTypedArray([]), '[] is not typed array'); - t.end(); -}); - -test('Typed Arrays', function (t) { - forEach(typedArrayNames, function (typedArray) { - var TypedArray = global[typedArray]; - if (isCallable(TypedArray)) { - var arr = new TypedArray(10); - t.ok(isTypedArray(arr), 'new ' + typedArray + '(10) is typed array'); - } else { - t.comment('# SKIP ' + typedArray + ' is not supported'); - } - }); - t.end(); -}); diff --git a/build/node_modules/is-unicode-supported/index.d.ts b/build/node_modules/is-unicode-supported/index.d.ts new file mode 100644 index 00000000..275b37bd --- /dev/null +++ b/build/node_modules/is-unicode-supported/index.d.ts @@ -0,0 +1,14 @@ +/** +Detect whether the terminal supports Unicode. + +@example +``` +import isUnicodeSupported = require('is-unicode-supported'); + +isUnicodeSupported(); +//=> true +``` +*/ +declare function isUnicodeSupported(): boolean; + +export = isUnicodeSupported; diff --git a/build/node_modules/is-unicode-supported/index.js b/build/node_modules/is-unicode-supported/index.js new file mode 100644 index 00000000..b5a11bee --- /dev/null +++ b/build/node_modules/is-unicode-supported/index.js @@ -0,0 +1,13 @@ +'use strict'; + +module.exports = () => { + if (process.platform !== 'win32') { + return true; + } + + return Boolean(process.env.CI) || + Boolean(process.env.WT_SESSION) || // Windows Terminal + process.env.TERM_PROGRAM === 'vscode' || + process.env.TERM === 'xterm-256color' || + process.env.TERM === 'alacritty'; +}; diff --git a/build/node_modules/is-unicode-supported/license b/build/node_modules/is-unicode-supported/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/is-unicode-supported/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/is-unicode-supported/package.json b/build/node_modules/is-unicode-supported/package.json new file mode 100644 index 00000000..608a4e68 --- /dev/null +++ b/build/node_modules/is-unicode-supported/package.json @@ -0,0 +1,73 @@ +{ + "_from": "is-unicode-supported@^0.1.0", + "_id": "is-unicode-supported@0.1.0", + "_inBundle": false, + "_integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "_location": "/is-unicode-supported", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-unicode-supported@^0.1.0", + "name": "is-unicode-supported", + "escapedName": "is-unicode-supported", + "rawSpec": "^0.1.0", + "saveSpec": null, + "fetchSpec": "^0.1.0" + }, + "_requiredBy": [ + "/log-symbols" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "_shasum": "3f26c76a809593b52bfa2ecb5710ed2779b522a7", + "_spec": "is-unicode-supported@^0.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/log-symbols", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-unicode-supported/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Detect whether the terminal supports Unicode", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/is-unicode-supported#readme", + "keywords": [ + "terminal", + "unicode", + "detect", + "utf8", + "console", + "shell", + "support", + "supports", + "supported", + "check", + "detection" + ], + "license": "MIT", + "name": "is-unicode-supported", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-unicode-supported.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "0.1.0" +} diff --git a/build/node_modules/is-unicode-supported/readme.md b/build/node_modules/is-unicode-supported/readme.md new file mode 100644 index 00000000..a82e34d4 --- /dev/null +++ b/build/node_modules/is-unicode-supported/readme.md @@ -0,0 +1,35 @@ +# is-unicode-supported + +> Detect whether the terminal supports Unicode + +This can be useful to decide whether to use Unicode characters or fallback ASCII characters in command-line output. + +Note that the check is quite naive. It just assumes all non-Windows terminals support Unicode and hard-codes which Windows terminals that do support Unicode. However, I have been using this logic in some popular packages for years without problems. + +## Install + +``` +$ npm install is-unicode-supported +``` + +## Usage + +```js +const isUnicodeSupported = require('is-unicode-supported'); + +isUnicodeSupported(); +//=> true +``` + +## API + +### isUnicodeSupported() + +Returns a `boolean` for whether the terminal supports Unicode. + +## Related + +- [is-interactive](https://github.com/sindresorhus/is-interactive) - Check if stdout or stderr is interactive +- [supports-color](https://github.com/chalk/supports-color) - Detect whether a terminal supports color +- [figures](https://github.com/sindresorhus/figures) - Unicode symbols with Windows fallbacks +- [log-symbols](https://github.com/sindresorhus/log-symbols) - Colored symbols for various log levels diff --git a/build/node_modules/is/package.json b/build/node_modules/is/package.json index 3fe8783b..ae13b010 100644 --- a/build/node_modules/is/package.json +++ b/build/node_modules/is/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/object-keys" ], - "_resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is/-/is-0.2.7.tgz", "_shasum": "3b34a2c48f359972f35042849193ae7264b63562", "_spec": "is@~0.2.6", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/object-keys", diff --git a/build/node_modules/isarray/package.json b/build/node_modules/isarray/package.json index bc1ebba2..f18f6791 100644 --- a/build/node_modules/isarray/package.json +++ b/build/node_modules/isarray/package.json @@ -16,12 +16,12 @@ "fetchSpec": "~1.0.0" }, "_requiredBy": [ - "/readable-stream" + "/concat-stream/readable-stream" ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-1.0.0.tgz", "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", "_spec": "isarray@~1.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/concat-stream/node_modules/readable-stream", "author": { "name": "Julian Gruber", "email": "mail@juliangruber.com", diff --git a/build/node_modules/isbuffer/package.json b/build/node_modules/isbuffer/package.json index c199bcee..39b75eaf 100644 --- a/build/node_modules/isbuffer/package.json +++ b/build/node_modules/isbuffer/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js" ], - "_resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isbuffer/-/isbuffer-0.0.0.tgz", "_shasum": "38c146d9df528b8bf9b0701c3d43cf12df3fc39b", "_spec": "isbuffer@~0.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js", diff --git a/build/node_modules/isexe/.npmignore b/build/node_modules/isexe/.npmignore new file mode 100644 index 00000000..c1cb757a --- /dev/null +++ b/build/node_modules/isexe/.npmignore @@ -0,0 +1,2 @@ +.nyc_output/ +coverage/ diff --git a/build/node_modules/isexe/LICENSE b/build/node_modules/isexe/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/build/node_modules/isexe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/isexe/README.md b/build/node_modules/isexe/README.md new file mode 100644 index 00000000..35769e84 --- /dev/null +++ b/build/node_modules/isexe/README.md @@ -0,0 +1,51 @@ +# isexe + +Minimal module to check if a file is executable, and a normal file. + +Uses `fs.stat` and tests against the `PATHEXT` environment variable on +Windows. + +## USAGE + +```javascript +var isexe = require('isexe') +isexe('some-file-name', function (err, isExe) { + if (err) { + console.error('probably file does not exist or something', err) + } else if (isExe) { + console.error('this thing can be run') + } else { + console.error('cannot be run') + } +}) + +// same thing but synchronous, throws errors +var isExe = isexe.sync('some-file-name') + +// treat errors as just "not executable" +isexe('maybe-missing-file', { ignoreErrors: true }, callback) +var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) +``` + +## API + +### `isexe(path, [options], [callback])` + +Check if the path is executable. If no callback provided, and a +global `Promise` object is available, then a Promise will be returned. + +Will raise whatever errors may be raised by `fs.stat`, unless +`options.ignoreErrors` is set to true. + +### `isexe.sync(path, [options])` + +Same as `isexe` but returns the value and throws any errors raised. + +### Options + +* `ignoreErrors` Treat all errors as "no, this is not executable", but + don't raise them. +* `uid` Number to use as the user id +* `gid` Number to use as the group id +* `pathExt` List of path extensions to use instead of `PATHEXT` + environment variable on Windows. diff --git a/build/node_modules/isexe/index.js b/build/node_modules/isexe/index.js new file mode 100644 index 00000000..553fb32b --- /dev/null +++ b/build/node_modules/isexe/index.js @@ -0,0 +1,57 @@ +var fs = require('fs') +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = require('./windows.js') +} else { + core = require('./mode.js') +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} diff --git a/build/node_modules/isexe/mode.js b/build/node_modules/isexe/mode.js new file mode 100644 index 00000000..1995ea4a --- /dev/null +++ b/build/node_modules/isexe/mode.js @@ -0,0 +1,41 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} diff --git a/build/node_modules/isexe/package.json b/build/node_modules/isexe/package.json new file mode 100644 index 00000000..febfd15c --- /dev/null +++ b/build/node_modules/isexe/package.json @@ -0,0 +1,60 @@ +{ + "_from": "isexe@^2.0.0", + "_id": "isexe@2.0.0", + "_inBundle": false, + "_integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "_location": "/isexe", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "isexe@^2.0.0", + "name": "isexe", + "escapedName": "isexe", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/which" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isexe/-/isexe-2.0.0.tgz", + "_shasum": "e8fbf374dc556ff8947a10dcb0572d633f2cfa10", + "_spec": "isexe@^2.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/which", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/isexe/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Minimal module to check if a file is executable.", + "devDependencies": { + "mkdirp": "^0.5.1", + "rimraf": "^2.5.0", + "tap": "^10.3.0" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/isaacs/isexe#readme", + "keywords": [], + "license": "ISC", + "main": "index.js", + "name": "isexe", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/isexe.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "2.0.0" +} diff --git a/build/node_modules/isexe/test/basic.js b/build/node_modules/isexe/test/basic.js new file mode 100644 index 00000000..d926df64 --- /dev/null +++ b/build/node_modules/isexe/test/basic.js @@ -0,0 +1,221 @@ +var t = require('tap') +var fs = require('fs') +var path = require('path') +var fixture = path.resolve(__dirname, 'fixtures') +var meow = fixture + '/meow.cat' +var mine = fixture + '/mine.cat' +var ours = fixture + '/ours.cat' +var fail = fixture + '/fail.false' +var noent = fixture + '/enoent.exe' +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') + +var isWindows = process.platform === 'win32' +var hasAccess = typeof fs.access === 'function' +var winSkip = isWindows && 'windows' +var accessSkip = !hasAccess && 'no fs.access function' +var hasPromise = typeof Promise === 'function' +var promiseSkip = !hasPromise && 'no global Promise' + +function reset () { + delete require.cache[require.resolve('../')] + return require('../') +} + +t.test('setup fixtures', function (t) { + rimraf.sync(fixture) + mkdirp.sync(fixture) + fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') + fs.chmodSync(meow, parseInt('0755', 8)) + fs.writeFileSync(fail, '#!/usr/bin/env false\n') + fs.chmodSync(fail, parseInt('0644', 8)) + fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') + fs.chmodSync(mine, parseInt('0744', 8)) + fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') + fs.chmodSync(ours, parseInt('0754', 8)) + t.end() +}) + +t.test('promise', { skip: promiseSkip }, function (t) { + var isexe = reset() + t.test('meow async', function (t) { + isexe(meow).then(function (is) { + t.ok(is) + t.end() + }) + }) + t.test('fail async', function (t) { + isexe(fail).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.test('noent async', function (t) { + isexe(noent).catch(function (er) { + t.ok(er) + t.end() + }) + }) + t.test('noent ignore async', function (t) { + isexe(noent, { ignoreErrors: true }).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.end() +}) + +t.test('no promise', function (t) { + global.Promise = null + var isexe = reset() + t.throws('try to meow a promise', function () { + isexe(meow) + }) + t.end() +}) + +t.test('access', { skip: accessSkip || winSkip }, function (t) { + runTest(t) +}) + +t.test('mode', { skip: winSkip }, function (t) { + delete fs.access + delete fs.accessSync + var isexe = reset() + t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) + t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) + runTest(t) +}) + +t.test('windows', function (t) { + global.TESTING_WINDOWS = true + var pathExt = '.EXE;.CAT;.CMD;.COM' + t.test('pathExt option', function (t) { + runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) + }) + t.test('pathExt env', function (t) { + process.env.PATHEXT = pathExt + runTest(t) + }) + t.test('no pathExt', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: '', skipFail: true }) + }) + t.test('pathext with empty entry', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: ';' + pathExt, skipFail: true }) + }) + t.end() +}) + +t.test('cleanup', function (t) { + rimraf.sync(fixture) + t.end() +}) + +function runTest (t, options) { + var isexe = reset() + + var optionsIgnore = Object.create(options || {}) + optionsIgnore.ignoreErrors = true + + if (!options || !options.skipFail) { + t.notOk(isexe.sync(fail, options)) + } + t.notOk(isexe.sync(noent, optionsIgnore)) + if (!options) { + t.ok(isexe.sync(meow)) + } else { + t.ok(isexe.sync(meow, options)) + } + + t.ok(isexe.sync(mine, options)) + t.ok(isexe.sync(ours, options)) + t.throws(function () { + isexe.sync(noent, options) + }) + + t.test('meow async', function (t) { + if (!options) { + isexe(meow, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } else { + isexe(meow, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } + }) + + t.test('mine async', function (t) { + isexe(mine, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + t.test('ours async', function (t) { + isexe(ours, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + if (!options || !options.skipFail) { + t.test('fail async', function (t) { + isexe(fail, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + } + + t.test('noent async', function (t) { + isexe(noent, options, function (er, is) { + t.ok(er) + t.notOk(is) + t.end() + }) + }) + + t.test('noent ignore async', function (t) { + isexe(noent, optionsIgnore, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.test('directory is not executable', function (t) { + isexe(__dirname, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.end() +} diff --git a/build/node_modules/isexe/windows.js b/build/node_modules/isexe/windows.js new file mode 100644 index 00000000..34996734 --- /dev/null +++ b/build/node_modules/isexe/windows.js @@ -0,0 +1,42 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} diff --git a/build/node_modules/jade/.npmignore b/build/node_modules/jade/.npmignore deleted file mode 100644 index b9af3d4b..00000000 --- a/build/node_modules/jade/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -test -support -benchmarks -examples -lib-cov -coverage.html -.gitmodules -.travis.yml -History.md -Readme.md -Makefile -test/ -support/ -benchmarks/ -examples/ diff --git a/build/node_modules/jade/LICENSE b/build/node_modules/jade/LICENSE deleted file mode 100644 index 8ad0e0d3..00000000 --- a/build/node_modules/jade/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2010 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/jade/bin/jade b/build/node_modules/jade/bin/jade deleted file mode 100755 index 7e6002f9..00000000 --- a/build/node_modules/jade/bin/jade +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var fs = require('fs') - , program = require('commander') - , path = require('path') - , basename = path.basename - , dirname = path.dirname - , resolve = path.resolve - , join = path.join - , mkdirp = require('mkdirp') - , jade = require('../'); - -// jade options - -var options = {}; - -// options - -program - .version(jade.version) - .usage('[options] [dir|file ...]') - .option('-o, --obj ', 'javascript options object') - .option('-O, --out ', 'output the compiled html to ') - .option('-p, --path ', 'filename used to resolve includes') - .option('-P, --pretty', 'compile pretty html output') - .option('-c, --client', 'compile for client-side runtime.js') - .option('-D, --no-debug', 'compile without debugging (smaller functions)') - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' # translate jade the templates dir'); - console.log(' $ jade templates'); - console.log(''); - console.log(' # create {foo,bar}.html'); - console.log(' $ jade {foo,bar}.jade'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ jade < my.jade > my.html'); - console.log(''); - console.log(' # jade over stdio'); - console.log(' $ echo "h1 Jade!" | jade'); - console.log(''); - console.log(' # foo, bar dirs rendering to /tmp'); - console.log(' $ jade foo bar --out /tmp '); - console.log(''); -}); - -program.parse(process.argv); - -// options given, parse them - -if (program.obj) options = eval('(' + program.obj + ')'); - -// --filename - -if (program.path) options.filename = program.path; - -// --no-debug - -options.compileDebug = program.debug; - -// --client - -options.client = program.client; - -// --pretty - -options.pretty = program.pretty; - -// left-over args are file paths - -var files = program.args; - -// compile files - -if (files.length) { - console.log(); - files.forEach(renderFile); - process.on('exit', console.log); -// stdio -} else { - stdin(); -} - -/** - * Compile from stdin. - */ - -function stdin() { - var buf = ''; - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(chunk){ buf += chunk; }); - process.stdin.on('end', function(){ - var fn = jade.compile(buf, options); - var output = options.client - ? fn.toString() - : fn(options); - process.stdout.write(output); - }).resume(); -} - -/** - * Process the given path, compiling the jade files found. - * Always walk the subdirectories. - */ - -function renderFile(path) { - var re = /\.jade$/; - fs.lstat(path, function(err, stat) { - if (err) throw err; - // Found jade file - if (stat.isFile() && re.test(path)) { - fs.readFile(path, 'utf8', function(err, str){ - if (err) throw err; - options.filename = path; - var fn = jade.compile(str, options); - var extname = options.client ? '.js' : '.html'; - path = path.replace(re, extname); - if (program.out) path = join(program.out, basename(path)); - var dir = resolve(dirname(path)); - mkdirp(dir, 0755, function(err){ - if (err) throw err; - var output = options.client - ? fn.toString() - : fn(options); - fs.writeFile(path, output, function(err){ - if (err) throw err; - console.log(' \033[90mrendered \033[36m%s\033[0m', path); - }); - }); - }); - // Found directory - } else if (stat.isDirectory()) { - fs.readdir(path, function(err, files) { - if (err) throw err; - files.map(function(filename) { - return path + '/' + filename; - }).forEach(renderFile); - }); - } - }); -} diff --git a/build/node_modules/jade/index.js b/build/node_modules/jade/index.js deleted file mode 100644 index 8ad059f7..00000000 --- a/build/node_modules/jade/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.JADE_COV - ? require('./lib-cov/jade') - : require('./lib/jade'); \ No newline at end of file diff --git a/build/node_modules/jade/jade.js b/build/node_modules/jade/jade.js deleted file mode 100644 index 1983a203..00000000 --- a/build/node_modules/jade/jade.js +++ /dev/null @@ -1,3586 +0,0 @@ -(function() { - -// CommonJS require() - -function require(p){ - var path = require.resolve(p) - , mod = require.modules[path]; - if (!mod) throw new Error('failed to require "' + p + '"'); - if (!mod.exports) { - mod.exports = {}; - mod.call(mod.exports, mod, mod.exports, require.relative(path)); - } - return mod.exports; - } - -require.modules = {}; - -require.resolve = function (path){ - var orig = path - , reg = path + '.js' - , index = path + '/index.js'; - return require.modules[reg] && reg - || require.modules[index] && index - || orig; - }; - -require.register = function (path, fn){ - require.modules[path] = fn; - }; - -require.relative = function (parent) { - return function(p){ - if ('.' != p.charAt(0)) return require(p); - - var path = parent.split('/') - , segs = p.split('/'); - path.pop(); - - for (var i = 0; i < segs.length; i++) { - var seg = segs[i]; - if ('..' == seg) path.pop(); - else if ('.' != seg) path.push(seg); - } - - return require(path.join('/')); - }; - }; - - -require.register("compiler.js", function(module, exports, require){ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - - - if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } - } - - if (!String.prototype.trimLeft) { - String.prototype.trimLeft = function(){ - return this.replace(/^\s+/, ''); - } - } - - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push(' }\n'); - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} -}); // module: compiler.js - -require.register("doctypes.js", function(module, exports, require){ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; -}); // module: doctypes.js - -require.register("filters.js", function(module, exports, require){ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; - -}); // module: filters.js - -require.register("inline-tags.js", function(module, exports, require){ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; -}); // module: inline-tags.js - -require.register("jade.js", function(module, exports, require){ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') - -/** - * Library version. - */ - -exports.version = '0.26.1'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; - -}); // module: jade.js - -require.register("lexer.js", function(module, exports, require){ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; - -}); // module: lexer.js - -require.register("nodes/attrs.js", function(module, exports, require){ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype = new Node; -Attrs.prototype.constructor = Attrs; - - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; - -}); // module: nodes/attrs.js - -require.register("nodes/block-comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype = new Node; -BlockComment.prototype.constructor = BlockComment; - -}); // module: nodes/block-comment.js - -require.register("nodes/block.js", function(module, exports, require){ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype = new Node; -Block.prototype.constructor = Block; - - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - - -}); // module: nodes/block.js - -require.register("nodes/case.js", function(module, exports, require){ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype = new Node; -Case.prototype.constructor = Case; - - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype = new Node; -When.prototype.constructor = When; - - - -}); // module: nodes/case.js - -require.register("nodes/code.js", function(module, exports, require){ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype = new Node; -Code.prototype.constructor = Code; - -}); // module: nodes/code.js - -require.register("nodes/comment.js", function(module, exports, require){ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype = new Node; -Comment.prototype.constructor = Comment; - -}); // module: nodes/comment.js - -require.register("nodes/doctype.js", function(module, exports, require){ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype = new Node; -Doctype.prototype.constructor = Doctype; - -}); // module: nodes/doctype.js - -require.register("nodes/each.js", function(module, exports, require){ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype = new Node; -Each.prototype.constructor = Each; - -}); // module: nodes/each.js - -require.register("nodes/filter.js", function(module, exports, require){ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype = new Node; -Filter.prototype.constructor = Filter; - -}); // module: nodes/filter.js - -require.register("nodes/index.js", function(module, exports, require){ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); - -}); // module: nodes/index.js - -require.register("nodes/literal.js", function(module, exports, require){ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype = new Node; -Literal.prototype.constructor = Literal; - - -}); // module: nodes/literal.js - -require.register("nodes/mixin.js", function(module, exports, require){ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype = new Attrs; -Mixin.prototype.constructor = Mixin; - - - -}); // module: nodes/mixin.js - -require.register("nodes/node.js", function(module, exports, require){ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; - -}); // module: nodes/node.js - -require.register("nodes/tag.js", function(module, exports, require){ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype = new Attrs; -Tag.prototype.constructor = Tag; - - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; -}); // module: nodes/tag.js - -require.register("nodes/text.js", function(module, exports, require){ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype = new Node; -Text.prototype.constructor = Text; - - -/** - * Flag as text. - */ - -Text.prototype.isText = true; -}); // module: nodes/text.js - -require.register("parser.js", function(module, exports, require){ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; - -}); // module: parser.js - -require.register("runtime.js", function(module, exports, require){ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - -}); // module: runtime.js - -require.register("self-closing.js", function(module, exports, require){ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; -}); // module: self-closing.js - -require.register("utils.js", function(module, exports, require){ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; -}); // module: utils.js - -window.jade = require("jade"); -})(); diff --git a/build/node_modules/jade/jade.md b/build/node_modules/jade/jade.md deleted file mode 100644 index 051dc031..00000000 --- a/build/node_modules/jade/jade.md +++ /dev/null @@ -1,510 +0,0 @@ - -# Jade - - The jade template engine for node.js - -## Synopsis - - jade [-h|--help] [-v|--version] [-o|--obj STR] - [-O|--out DIR] [-p|--path PATH] [-P|--pretty] - [-c|--client] [-D|--no-debug] - -## Examples - - translate jade the templates dir - - $ jade templates - - create {foo,bar}.html - - $ jade {foo,bar}.jade - - jade over stdio - - $ jade < my.jade > my.html - - jade over s - - $ echo "h1 Jade!" | jade - - foo, bar dirs rendering to /tmp - - $ jade foo bar --out /tmp - - compile client-side templates without debugging - instrumentation, making the output javascript - very light-weight. This requires runtime.js - in your projects. - - $ jade --client --no-debug < my.jade - -## Tags - - Tags are simply nested via whitespace, closing - tags defined for you. These indents are called "blocks". - - ul - li - a Foo - li - a Bar - - You may have several tags in one "block": - - ul - li - a Foo - a Bar - a Baz - -## Self-closing Tags - - Some tags are flagged as self-closing by default, such - as `meta`, `link`, and so on. To explicitly self-close - a tag simply append the `/` character: - - foo/ - foo(bar='baz')/ - - Would yield: - - - - -## Attributes - - Tag attributes look similar to HTML, however - the values are regular JavaScript, here are - some examples: - - a(href='google.com') Google - a(class='button', href='google.com') Google - - As mentioned the attribute values are just JavaScript, - this means ternary operations and other JavaScript expressions - work just fine: - - body(class=user.authenticated ? 'authenticated' : 'anonymous') - a(href=user.website || 'http://google.com') - - Multiple lines work too: - - input(type='checkbox', - name='agreement', - checked) - - Multiple lines without the comma work fine: - - input(type='checkbox' - name='agreement' - checked) - - Funky whitespace? fine: - - input( - type='checkbox' - name='agreement' - checked) - -## Boolean attributes - - Boolean attributes are mirrored by Jade, and accept - bools, aka _true_ or _false_. When no value is specified - _true_ is assumed. For example: - - input(type="checkbox", checked) - // => "" - - For example if the checkbox was for an agreement, perhaps `user.agreed` - was _true_ the following would also output 'checked="checked"': - - input(type="checkbox", checked=user.agreed) - -## Class attributes - - The _class_ attribute accepts an array of classes, - this can be handy when generated from a javascript - function etc: - - classes = ['foo', 'bar', 'baz'] - a(class=classes) - // => "" - -## Class literal - - Classes may be defined using a ".CLASSNAME" syntax: - - .button - // => "
" - - Or chained: - - .large.button - // => "
" - - The previous defaulted to divs, however you - may also specify the tag type: - - h1.title My Title - // => "

My Title

" - -## Id literal - - Much like the class literal there's an id literal: - - #user-1 - // => "
" - - Again we may specify the tag as well: - - ul#menu - li: a(href='/home') Home - li: a(href='/store') Store - li: a(href='/contact') Contact - - Finally all of these may be used in any combination, - the following are all valid tags: - - a.button#contact(style: 'color: red') Contact - a.button(style: 'color: red')#contact Contact - a(style: 'color: red').button#contact Contact - -## Block expansion - - Jade supports the concept of "block expansion", in which - using a trailing ":" after a tag will inject a block: - - ul - li: a Foo - li: a Bar - li: a Baz - -## Text - - Arbitrary text may follow tags: - - p Welcome to my site - - yields: - -

Welcome to my site

- -## Pipe text - - Another form of text is "pipe" text. Pipes act - as the text margin for large bodies of text. - - p - | This is a large - | body of text for - | this tag. - | - | Nothing too - | exciting. - - yields: - -

This is a large - body of text for - this tag. - - Nothing too - exciting. -

- - Using pipes we can also specify regular Jade tags - within the text: - - p - | Click to visit - a(href='http://google.com') Google - | if you want. - -## Text only tags - - As an alternative to pipe text you may add - a trailing "." to indicate that the block - contains nothing but plain-text, no tags: - - p. - This is a large - body of text for - this tag. - - Nothing too - exciting. - - Some tags are text-only by default, for example - _script_, _textarea_, and _style_ tags do not - contain nested HTML so Jade implies the trailing ".": - - script - if (foo) { - bar(); - } - - style - body { - padding: 50px; - font: 14px Helvetica; - } - -## Template script tags - - Sometimes it's useful to define HTML in script - tags using Jade, typically for client-side templates. - - To do this simply give the _script_ tag an arbitrary - _type_ attribute such as _text/x-template_: - - script(type='text/template') - h1 Look! - p Jade still works in here! - -## Interpolation - - Both plain-text and piped-text support interpolation, - which comes in two forms, escapes and non-escaped. The - following will output the _user.name_ in the paragraph - but HTML within it will be escaped to prevent XSS attacks: - - p Welcome #{user.name} - - The following syntax is identical however it will _not_ escape - HTML, and should only be used with strings that you trust: - - p Welcome !{user.name} - -## Inline HTML - - Sometimes constructing small inline snippets of HTML - in Jade can be annoying, luckily we can add plain - HTML as well: - - p Welcome #{user.name} - -## Code - - To buffer output with Jade simply use _=_ at the beginning - of a line or after a tag. This method escapes any HTML - present in the string. - - p= user.description - - To buffer output unescaped use the _!=_ variant, but again - be careful of XSS. - - p!= user.description - - The final way to mess with JavaScript code in Jade is the unbuffered - _-_, which can be used for conditionals, defining variables etc: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) { - h2 Description - p.description= user.description - - } - - When compiled blocks are wrapped in anonymous functions, so the - following is also valid, without braces: - - - var user = { description: 'foo bar baz' } - #user - - if (user.description) - h2 Description - p.description= user.description - - If you really want you could even use `.forEach()` and others: - - - users.forEach(function(user){ - .user - h2= user.name - p User #{user.name} is #{user.age} years old - - }) - - Taking this further Jade provides some syntax for conditionals, - iteration, switch statements etc. Let's look at those next! - -## Assignment - - Jade's first-class assignment is simple, simply use the _=_ - operator and Jade will _var_ it for you. The following are equivalent: - - - var user = { name: 'tobi' } - user = { name: 'tobi' } - -## Conditionals - - Jade's first-class conditional syntax allows for optional - parenthesis, and you may now omit the leading _-_ otherwise - it's identical, still just regular javascript: - - user = { description: 'foo bar baz' } - #user - if user.description - h2 Description - p.description= user.description - - Jade provides the negated version, _unless_ as well, the following - are equivalent: - - - if (!(user.isAnonymous)) - p You're logged in as #{user.name} - - unless user.isAnonymous - p You're logged in as #{user.name} - -## Iteration - - JavaScript's _for_ loops don't look very declarative, so Jade - also provides its own _for_ loop construct, aliased as _each_: - - for user in users - .user - h2= user.name - p user #{user.name} is #{user.age} year old - - As mentioned _each_ is identical: - - each user in users - .user - h2= user.name - - If necessary the index is available as well: - - for user, i in users - .user(class='user-#{i}') - h2= user.name - - Remember, it's just JavaScript: - - ul#letters - for letter in ['a', 'b', 'c'] - li= letter - -## Mixins - - Mixins provide a way to define jade "functions" which "mix in" - their contents when called. This is useful for abstracting - out large fragments of Jade. - - The simplest possible mixin which accepts no arguments might - look like this: - - mixin hello - p Hello - - You use a mixin by placing `+` before the name: - - +hello - - For something a little more dynamic, mixins can take - arguments, the mixin itself is converted to a javascript - function internally: - - mixin hello(user) - p Hello #{user} - - +hello('Tobi') - - Yields: - -

Hello Tobi

- - Mixins may optionally take blocks, when a block is passed - its contents becomes the implicit `block` argument. For - example here is a mixin passed a block, and also invoked - without passing a block: - - mixin article(title) - .article - .article-wrapper - h1= title - if block - block - else - p No content provided - - +article('Hello world') - - +article('Hello world') - p This is my - p Amazing article - - yields: - -
-
-

Hello world

-

No content provided

-
-
- -
-
-

Hello world

-

This is my

-

Amazing article

-
-
- - Mixins can even take attributes, just like a tag. When - attributes are passed they become the implicit `attributes` - argument. Individual attributes can be accessed just like - normal object properties: - - mixin centered - .centered(class=attributes.class) - block - - +centered.bold Hello world - - +centered.red - p This is my - p Amazing article - - yields: - -
Hello world
-
-

This is my

-

Amazing article

-
- - If you use `attributes` directly, *all* passed attributes - get used: - - mixin link - a.menu(attributes) - block - - +link.highlight(href='#top') Top - +link#sec1.plain(href='#section1') Section 1 - +link#sec2.plain(href='#section2') Section 2 - - yields: - - Top - Section 1 - Section 2 - - If you pass arguments, they must directly follow the mixin: - - mixin list(arr) - if block - .title - block - ul(attributes) - each item in arr - li= item - - +list(['foo', 'bar', 'baz'])(id='myList', class='bold') - - yields: - -
    -
  • foo
  • -
  • bar
  • -
  • baz
  • -
diff --git a/build/node_modules/jade/jade.min.js b/build/node_modules/jade/jade.min.js deleted file mode 100644 index 72e4535e..00000000 --- a/build/node_modules/jade/jade.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(){function require(p){var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');return mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path))),mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&®||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p.charAt(0))return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i",this.doctype=doctype,this.terse="5"==name||"html"==name,this.xml=0==this.doctype.indexOf("1&&!escape&&block.nodes[0].isText&&block.nodes[1].isText&&this.prettyIndent(1,!0);for(var i=0;i0&&!escape&&block.nodes[i].isText&&block.nodes[i-1].isText&&this.prettyIndent(1,!1),this.visit(block.nodes[i]),block.nodes[i+1]&&block.nodes[i].isText&&block.nodes[i+1].isText&&this.buffer("\\n")},visitDoctype:function(doctype){doctype&&(doctype.val||!this.doctype)&&this.setDoctype(doctype.val||"default"),this.doctype&&this.buffer(this.doctype),this.hasCompiledDoctype=!0},visitMixin:function(mixin){var name=mixin.name.replace(/-/g,"_")+"_mixin",args=mixin.args||"",block=mixin.block,attrs=mixin.attrs,pp=this.pp;if(mixin.call){pp&&this.buf.push("__indent.push('"+Array(this.indents+1).join(" ")+"');");if(block||attrs.length){this.buf.push(name+".call({");if(block){this.buf.push("block: function(){"),this.parentIndents++;var _indents=this.indents;this.indents=0,this.visit(mixin.block),this.indents=_indents,this.parentIndents--,attrs.length?this.buf.push("},"):this.buf.push("}")}if(attrs.length){var val=this.attrs(attrs);val.inherits?this.buf.push("attributes: merge({"+val.buf+"}, attributes), escaped: merge("+val.escaped+", escaped, true)"):this.buf.push("attributes: {"+val.buf+"}, escaped: "+val.escaped)}args?this.buf.push("}, "+args+");"):this.buf.push("});")}else this.buf.push(name+"("+args+");");pp&&this.buf.push("__indent.pop();")}else this.buf.push("var "+name+" = function("+args+"){"),this.buf.push("var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};"),this.parentIndents++,this.visit(block),this.parentIndents--,this.buf.push("};")},visitTag:function(tag){this.indents++;var name=tag.name,pp=this.pp;tag.buffer&&(name="' + ("+name+") + '"),this.hasCompiledTag||(!this.hasCompiledDoctype&&"html"==name&&this.visitDoctype(),this.hasCompiledTag=!0),pp&&!tag.isInline()&&this.prettyIndent(0,!0),(~selfClosing.indexOf(name)||tag.selfClosing)&&!this.xml?(this.buffer("<"+name),this.visitAttributes(tag.attrs),this.terse?this.buffer(">"):this.buffer("/>")):(tag.attrs.length?(this.buffer("<"+name),tag.attrs.length&&this.visitAttributes(tag.attrs),this.buffer(">")):this.buffer("<"+name+">"),tag.code&&this.visitCode(tag.code),this.escape="pre"==tag.name,this.visit(tag.block),pp&&!tag.isInline()&&"pre"!=tag.name&&!tag.canInline()&&this.prettyIndent(0,!0),this.buffer("")),this.indents--},visitFilter:function(filter){var fn=filters[filter.name];if(!fn)throw filter.isASTFilter?new Error('unknown ast filter "'+filter.name+':"'):new Error('unknown filter ":'+filter.name+'"');if(filter.isASTFilter)this.buf.push(fn(filter.block,this,filter.attrs));else{var text=filter.block.nodes.map(function(node){return node.val}).join("\n");filter.attrs=filter.attrs||{},filter.attrs.filename=this.options.filename,this.buffer(utils.text(fn(text,filter.attrs)))}},visitText:function(text){text=utils.text(text.val.replace(/\\/g,"\\\\")),this.escape&&(text=escape(text)),this.buffer(text)},visitComment:function(comment){if(!comment.buffer)return;this.pp&&this.prettyIndent(1,!0),this.buffer("")},visitBlockComment:function(comment){if(!comment.buffer)return;0==comment.val.trim().indexOf("if")?(this.buffer("")):(this.buffer(""))},visitCode:function(code){if(code.buffer){var val=code.val.trimLeft();this.buf.push("var __val__ = "+val),val='null == __val__ ? "" : __val__',code.escape&&(val="escape("+val+")"),this.buf.push("buf.push("+val+");")}else this.buf.push(code.val);code.block&&(code.buffer||this.buf.push("{"),this.visit(code.block),code.buffer||this.buf.push("}"))},visitEach:function(each){this.buf.push("// iterate "+each.obj+"\n"+";(function(){\n"+" if ('number' == typeof "+each.obj+".length) {\n"+" for (var "+each.key+" = 0, $$l = "+each.obj+".length; "+each.key+" < $$l; "+each.key+"++) {\n"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n } else {\n for (var "+each.key+" in "+each.obj+") {\n"+" if ("+each.obj+".hasOwnProperty("+each.key+")){"+" var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push(" }\n"),this.buf.push(" }\n }\n}).call(this);\n")},visitAttributes:function(attrs){var val=this.attrs(attrs);val.inherits?this.buf.push("buf.push(attrs(merge({ "+val.buf+" }, attributes), merge("+val.escaped+", escaped, true)));"):val.constant?(eval("var buf={"+val.buf+"};"),this.buffer(runtime.attrs(buf,JSON.parse(val.escaped)),!0)):this.buf.push("buf.push(attrs({ "+val.buf+" }, "+val.escaped+"));")},attrs:function(attrs){var buf=[],classes=[],escaped={},constant=attrs.every(function(attr){return isConstant(attr.val)}),inherits=!1;return this.terse&&buf.push("terse: true"),attrs.forEach(function(attr){if(attr.name=="attributes")return inherits=!0;escaped[attr.name]=attr.escaped;if(attr.name=="class")classes.push("("+attr.val+")");else{var pair="'"+attr.name+"':("+attr.val+")";buf.push(pair)}}),classes.length&&(classes=classes.join(" + ' ' + "),buf.push("class: "+classes)),{buf:buf.join(", ").replace("class:",'"class":'),escaped:JSON.stringify(escaped),inherits:inherits,constant:constant}}};function isConstant(val){if(/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val))return!0;if(!isNaN(Number(val)))return!0;var matches;return(matches=/^ *\[(.*)\] *$/.exec(val))?matches[1].split(",").every(isConstant):!1}function escape(html){return String(html).replace(/&(?!\w+;)/g,"&").replace(//g,">").replace(/"/g,""")}}),require.register("doctypes.js",function(module,exports,require){module.exports={5:"","default":"",xml:'',transitional:'',strict:'',frameset:'',1.1:'',basic:'',mobile:''}}),require.register("filters.js",function(module,exports,require){module.exports={cdata:function(str){return""},sass:function(str){str=str.replace(/\\n/g,"\n");var sass=require("sass").render(str).replace(/\n/g,"\\n");return'"},stylus:function(str,options){var ret;str=str.replace(/\\n/g,"\n");var stylus=require("stylus");return stylus(str,options).render(function(err,css){if(err)throw err;ret=css.replace(/\n/g,"\\n")}),'"},less:function(str){var ret;return str=str.replace(/\\n/g,"\n"),require("less").render(str,function(err,css){if(err)throw err;ret='"}),ret},markdown:function(str){var md;try{md=require("markdown")}catch(err){try{md=require("discount")}catch(err){try{md=require("markdown-js")}catch(err){try{md=require("marked")}catch(err){throw new Error("Cannot find markdown library, install markdown, discount, or marked.")}}}}return str=str.replace(/\\n/g,"\n"),md.parse(str).replace(/\n/g,"\\n").replace(/'/g,"'")},coffeescript:function(str){str=str.replace(/\\n/g,"\n");var js=require("coffee-script").compile(str).replace(/\\/g,"\\\\").replace(/\n/g,"\\n");return'"}}}),require.register("inline-tags.js",function(module,exports,require){module.exports=["a","abbr","acronym","b","br","code","em","font","i","img","ins","kbd","map","samp","small","span","strong","sub","sup"]}),require.register("jade.js",function(module,exports,require){var Parser=require("./parser"),Lexer=require("./lexer"),Compiler=require("./compiler"),runtime=require("./runtime");exports.version="0.26.1",exports.selfClosing=require("./self-closing"),exports.doctypes=require("./doctypes"),exports.filters=require("./filters"),exports.utils=require("./utils"),exports.Compiler=Compiler,exports.Parser=Parser,exports.Lexer=Lexer,exports.nodes=require("./nodes"),exports.runtime=runtime,exports.cache={};function parse(str,options){try{var parser=new Parser(str,options.filename,options),compiler=new(options.compiler||Compiler)(parser.parse(),options),js=compiler.compile();return options.debug&&console.error("\nCompiled Function:\n\n%s",js.replace(/^/gm," ")),"var buf = [];\n"+(options.self?"var self = locals || {};\n"+js:"with (locals || {}) {\n"+js+"\n}\n")+'return buf.join("");'}catch(err){parser=parser.context(),runtime.rethrow(err,parser.filename,parser.lexer.lineno)}}exports.compile=function(str,options){var options=options||{},client=options.client,filename=options.filename?JSON.stringify(options.filename):"undefined",fn;return options.compileDebug!==!1?fn=["var __jade = [{ lineno: 1, filename: "+filename+" }];","try {",parse(String(str),options),"} catch (err) {"," rethrow(err, __jade[0].filename, __jade[0].lineno);","}"].join("\n"):fn=parse(String(str),options),client&&(fn="attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n"+fn),fn=new Function("locals, attrs, escape, rethrow, merge",fn),client?fn:function(locals){return fn(locals,runtime.attrs,runtime.escape,runtime.rethrow,runtime.merge)}},exports.render=function(str,options,fn){"function"==typeof options&&(fn=options,options={});if(options.cache&&!options.filename)return fn(new Error('the "filename" option is required for caching'));try{var path=options.filename,tmpl=options.cache?exports.cache[path]||(exports.cache[path]=exports.compile(str,options)):exports.compile(str,options);fn(null,tmpl(options))}catch(err){fn(err)}},exports.renderFile=function(path,options,fn){var key=path+":string";"function"==typeof options&&(fn=options,options={});try{options.filename=path;var str=options.cache?exports.cache[key]||(exports.cache[key]=fs.readFileSync(path,"utf8")):fs.readFileSync(path,"utf8");exports.render(str,options,fn)}catch(err){fn(err)}},exports.__express=exports.renderFile}),require.register("lexer.js",function(module,exports,require){var Lexer=module.exports=function Lexer(str,options){options=options||{},this.input=str.replace(/\r\n|\r/g,"\n"),this.colons=options.colons,this.deferredTokens=[],this.lastIndents=0,this.lineno=1,this.stash=[],this.indentStack=[],this.indentRe=null,this.pipeless=!1};Lexer.prototype={tok:function(type,val){return{type:type,line:this.lineno,val:val}},consume:function(len){this.input=this.input.substr(len)},scan:function(regexp,type){var captures;if(captures=regexp.exec(this.input))return this.consume(captures[0].length),this.tok(type,captures[1])},defer:function(tok){this.deferredTokens.push(tok)},lookahead:function(n){var fetch=n-this.stash.length;while(fetch-->0)this.stash.push(this.next());return this.stash[--n]},indexOfDelimiters:function(start,end){var str=this.input,nstart=0,nend=0,pos=0;for(var i=0,len=str.length;iindents)this.stash.push(this.tok("outdent")),this.indentStack.shift();tok=this.stash.pop()}else indents&&indents!=this.indentStack[0]?(this.indentStack.unshift(indents),tok=this.tok("indent",indents)):tok=this.tok("newline");return tok}},pipelessText:function(){if(this.pipeless){if("\n"==this.input[0])return;var i=this.input.indexOf("\n");-1==i&&(i=this.input.length);var str=this.input.substr(0,i);return this.consume(str.length),this.tok("text",str)}},colon:function(){return this.scan(/^: */,":")},advance:function(){return this.stashed()||this.next()},next:function(){return this.deferred()||this.blank()||this.eos()||this.pipelessText()||this.yield()||this.doctype()||this.interpolation()||this["case"]()||this.when()||this["default"]()||this["extends"]()||this.append()||this.prepend()||this.block()||this.include()||this.mixin()||this.call()||this.conditional()||this.each()||this["while"]()||this.assignment()||this.tag()||this.filter()||this.code()||this.id()||this.className()||this.attrs()||this.indent()||this.comment()||this.colon()||this.text()}}}),require.register("nodes/attrs.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Attrs=module.exports=function Attrs(){this.attrs=[]};Attrs.prototype=new Node,Attrs.prototype.constructor=Attrs,Attrs.prototype.setAttribute=function(name,val,escaped){return this.attrs.push({name:name,val:val,escaped:escaped}),this},Attrs.prototype.removeAttribute=function(name){for(var i=0,len=this.attrs.length;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err}}),require.register("self-closing.js",function(module,exports,require){module.exports=["meta","img","link","input","source","area","base","col","br","hr"]}),require.register("utils.js",function(module,exports,require){var interpolate=exports.interpolate=function(str){return str.replace(/(\\)?([#!]){(.*?)}/g,function(str,escape,flag,code){return escape?str:"' + "+("!"==flag?"":"escape")+"((interp = "+code.replace(/\\'/g,"'")+") == null ? '' : interp) + '"})},escape=exports.escape=function(str){return str.replace(/'/g,"\\'")};exports.text=function(str){return interpolate(escape(str))}}),window.jade=require("jade")})(); \ No newline at end of file diff --git a/build/node_modules/jade/lib/compiler.js b/build/node_modules/jade/lib/compiler.js deleted file mode 100644 index 516ac83d..00000000 --- a/build/node_modules/jade/lib/compiler.js +++ /dev/null @@ -1,642 +0,0 @@ - -/*! - * Jade - Compiler - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var nodes = require('./nodes') - , filters = require('./filters') - , doctypes = require('./doctypes') - , selfClosing = require('./self-closing') - , runtime = require('./runtime') - , utils = require('./utils'); - -// if browser -// -// if (!Object.keys) { -// Object.keys = function(obj){ -// var arr = []; -// for (var key in obj) { -// if (obj.hasOwnProperty(key)) { -// arr.push(key); -// } -// } -// return arr; -// } -// } -// -// if (!String.prototype.trimLeft) { -// String.prototype.trimLeft = function(){ -// return this.replace(/^\s+/, ''); -// } -// } -// -// end - - -/** - * Initialize `Compiler` with the given `node`. - * - * @param {Node} node - * @param {Object} options - * @api public - */ - -var Compiler = module.exports = function Compiler(node, options) { - this.options = options = options || {}; - this.node = node; - this.hasCompiledDoctype = false; - this.hasCompiledTag = false; - this.pp = options.pretty || false; - this.debug = false !== options.compileDebug; - this.indents = 0; - this.parentIndents = 0; - if (options.doctype) this.setDoctype(options.doctype); -}; - -/** - * Compiler prototype. - */ - -Compiler.prototype = { - - /** - * Compile parse tree to JavaScript. - * - * @api public - */ - - compile: function(){ - this.buf = ['var interp;']; - if (this.pp) this.buf.push("var __indent = [];"); - this.lastBufferedIdx = -1; - this.visit(this.node); - return this.buf.join('\n'); - }, - - /** - * Sets the default doctype `name`. Sets terse mode to `true` when - * html 5 is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {string} name - * @api public - */ - - setDoctype: function(name){ - var doctype = doctypes[(name || 'default').toLowerCase()]; - doctype = doctype || ''; - this.doctype = doctype; - this.terse = '5' == name || 'html' == name; - this.xml = 0 == this.doctype.indexOf(' 1 && !escape && block.nodes[0].isText && block.nodes[1].isText) - this.prettyIndent(1, true); - - for (var i = 0; i < len; ++i) { - // Pretty print text - if (pp && i > 0 && !escape && block.nodes[i].isText && block.nodes[i-1].isText) - this.prettyIndent(1, false); - - this.visit(block.nodes[i]); - // Multiple text nodes are separated by newlines - if (block.nodes[i+1] && block.nodes[i].isText && block.nodes[i+1].isText) - this.buffer('\\n'); - } - }, - - /** - * Visit `doctype`. Sets terse mode to `true` when html 5 - * is used, causing self-closing tags to end with ">" vs "/>", - * and boolean attributes are not mirrored. - * - * @param {Doctype} doctype - * @api public - */ - - visitDoctype: function(doctype){ - if (doctype && (doctype.val || !this.doctype)) { - this.setDoctype(doctype.val || 'default'); - } - - if (this.doctype) this.buffer(this.doctype); - this.hasCompiledDoctype = true; - }, - - /** - * Visit `mixin`, generating a function that - * may be called within the template. - * - * @param {Mixin} mixin - * @api public - */ - - visitMixin: function(mixin){ - var name = mixin.name.replace(/-/g, '_') + '_mixin' - , args = mixin.args || '' - , block = mixin.block - , attrs = mixin.attrs - , pp = this.pp; - - if (mixin.call) { - if (pp) this.buf.push("__indent.push('" + Array(this.indents + 1).join(' ') + "');") - if (block || attrs.length) { - - this.buf.push(name + '.call({'); - - if (block) { - this.buf.push('block: function(){'); - - // Render block with no indents, dynamically added when rendered - this.parentIndents++; - var _indents = this.indents; - this.indents = 0; - this.visit(mixin.block); - this.indents = _indents; - this.parentIndents--; - - if (attrs.length) { - this.buf.push('},'); - } else { - this.buf.push('}'); - } - } - - if (attrs.length) { - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push('attributes: merge({' + val.buf - + '}, attributes), escaped: merge(' + val.escaped + ', escaped, true)'); - } else { - this.buf.push('attributes: {' + val.buf + '}, escaped: ' + val.escaped); - } - } - - if (args) { - this.buf.push('}, ' + args + ');'); - } else { - this.buf.push('});'); - } - - } else { - this.buf.push(name + '(' + args + ');'); - } - if (pp) this.buf.push("__indent.pop();") - } else { - this.buf.push('var ' + name + ' = function(' + args + '){'); - this.buf.push('var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {};'); - this.parentIndents++; - this.visit(block); - this.parentIndents--; - this.buf.push('};'); - } - }, - - /** - * Visit `tag` buffering tag markup, generating - * attributes, visiting the `tag`'s code and block. - * - * @param {Tag} tag - * @api public - */ - - visitTag: function(tag){ - this.indents++; - var name = tag.name - , pp = this.pp; - - if (tag.buffer) name = "' + (" + name + ") + '"; - - if (!this.hasCompiledTag) { - if (!this.hasCompiledDoctype && 'html' == name) { - this.visitDoctype(); - } - this.hasCompiledTag = true; - } - - // pretty print - if (pp && !tag.isInline()) - this.prettyIndent(0, true); - - if ((~selfClosing.indexOf(name) || tag.selfClosing) && !this.xml) { - this.buffer('<' + name); - this.visitAttributes(tag.attrs); - this.terse - ? this.buffer('>') - : this.buffer('/>'); - } else { - // Optimize attributes buffering - if (tag.attrs.length) { - this.buffer('<' + name); - if (tag.attrs.length) this.visitAttributes(tag.attrs); - this.buffer('>'); - } else { - this.buffer('<' + name + '>'); - } - if (tag.code) this.visitCode(tag.code); - this.escape = 'pre' == tag.name; - this.visit(tag.block); - - // pretty print - if (pp && !tag.isInline() && 'pre' != tag.name && !tag.canInline()) - this.prettyIndent(0, true); - - this.buffer(''); - } - this.indents--; - }, - - /** - * Visit `filter`, throwing when the filter does not exist. - * - * @param {Filter} filter - * @api public - */ - - visitFilter: function(filter){ - var fn = filters[filter.name]; - - // unknown filter - if (!fn) { - if (filter.isASTFilter) { - throw new Error('unknown ast filter "' + filter.name + ':"'); - } else { - throw new Error('unknown filter ":' + filter.name + '"'); - } - } - - if (filter.isASTFilter) { - this.buf.push(fn(filter.block, this, filter.attrs)); - } else { - var text = filter.block.nodes.map(function(node){ return node.val }).join('\n'); - filter.attrs = filter.attrs || {}; - filter.attrs.filename = this.options.filename; - this.buffer(utils.text(fn(text, filter.attrs))); - } - }, - - /** - * Visit `text` node. - * - * @param {Text} text - * @api public - */ - - visitText: function(text){ - text = utils.text(text.val.replace(/\\/g, '\\\\')); - if (this.escape) text = escape(text); - this.buffer(text); - }, - - /** - * Visit a `comment`, only buffering when the buffer flag is set. - * - * @param {Comment} comment - * @api public - */ - - visitComment: function(comment){ - if (!comment.buffer) return; - if (this.pp) this.prettyIndent(1, true); - this.buffer(''); - }, - - /** - * Visit a `BlockComment`. - * - * @param {Comment} comment - * @api public - */ - - visitBlockComment: function(comment){ - if (!comment.buffer) return; - if (0 == comment.val.trim().indexOf('if')) { - this.buffer(''); - } else { - this.buffer(''); - } - }, - - /** - * Visit `code`, respecting buffer / escape flags. - * If the code is followed by a block, wrap it in - * a self-calling function. - * - * @param {Code} code - * @api public - */ - - visitCode: function(code){ - // Wrap code blocks with {}. - // we only wrap unbuffered code blocks ATM - // since they are usually flow control - - // Buffer code - if (code.buffer) { - var val = code.val.trimLeft(); - this.buf.push('var __val__ = ' + val); - val = 'null == __val__ ? "" : __val__'; - if (code.escape) val = 'escape(' + val + ')'; - this.buf.push("buf.push(" + val + ");"); - } else { - this.buf.push(code.val); - } - - // Block support - if (code.block) { - if (!code.buffer) this.buf.push('{'); - this.visit(code.block); - if (!code.buffer) this.buf.push('}'); - } - }, - - /** - * Visit `each` block. - * - * @param {Each} each - * @api public - */ - - visitEach: function(each){ - this.buf.push('' - + '// iterate ' + each.obj + '\n' - + ';(function(){\n' - + ' if (\'number\' == typeof ' + each.obj + '.length) {\n' - + ' for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n' - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - this.buf.push('' - + ' }\n' - + ' } else {\n' - + ' for (var ' + each.key + ' in ' + each.obj + ') {\n' - // if browser - // + ' if (' + each.obj + '.hasOwnProperty(' + each.key + ')){' - // end - + ' var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n'); - - this.visit(each.block); - - // if browser - // this.buf.push(' }\n'); - // end - - this.buf.push(' }\n }\n}).call(this);\n'); - }, - - /** - * Visit `attrs`. - * - * @param {Array} attrs - * @api public - */ - - visitAttributes: function(attrs){ - var val = this.attrs(attrs); - if (val.inherits) { - this.buf.push("buf.push(attrs(merge({ " + val.buf + - " }, attributes), merge(" + val.escaped + ", escaped, true)));"); - } else if (val.constant) { - eval('var buf={' + val.buf + '};'); - this.buffer(runtime.attrs(buf, JSON.parse(val.escaped)), true); - } else { - this.buf.push("buf.push(attrs({ " + val.buf + " }, " + val.escaped + "));"); - } - }, - - /** - * Compile attributes. - */ - - attrs: function(attrs){ - var buf = [] - , classes = [] - , escaped = {} - , constant = attrs.every(function(attr){ return isConstant(attr.val) }) - , inherits = false; - - if (this.terse) buf.push('terse: true'); - - attrs.forEach(function(attr){ - if (attr.name == 'attributes') return inherits = true; - escaped[attr.name] = attr.escaped; - if (attr.name == 'class') { - classes.push('(' + attr.val + ')'); - } else { - var pair = "'" + attr.name + "':(" + attr.val + ')'; - buf.push(pair); - } - }); - - if (classes.length) { - classes = classes.join(" + ' ' + "); - buf.push("class: " + classes); - } - - return { - buf: buf.join(', ').replace('class:', '"class":'), - escaped: JSON.stringify(escaped), - inherits: inherits, - constant: constant - }; - } -}; - -/** - * Check if expression can be evaluated to a constant - * - * @param {String} expression - * @return {Boolean} - * @api private - */ - -function isConstant(val){ - // Check strings/literals - if (/^ *("([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'|true|false|null|undefined) *$/i.test(val)) - return true; - - // Check numbers - if (!isNaN(Number(val))) - return true; - - // Check arrays - var matches; - if (matches = /^ *\[(.*)\] *$/.exec(val)) - return matches[1].split(',').every(isConstant); - - return false; -} - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -function escape(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -} \ No newline at end of file diff --git a/build/node_modules/jade/lib/doctypes.js b/build/node_modules/jade/lib/doctypes.js deleted file mode 100644 index e87ca1e4..00000000 --- a/build/node_modules/jade/lib/doctypes.js +++ /dev/null @@ -1,18 +0,0 @@ - -/*! - * Jade - doctypes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - '5': '' - , 'default': '' - , 'xml': '' - , 'transitional': '' - , 'strict': '' - , 'frameset': '' - , '1.1': '' - , 'basic': '' - , 'mobile': '' -}; \ No newline at end of file diff --git a/build/node_modules/jade/lib/filters.js b/build/node_modules/jade/lib/filters.js deleted file mode 100644 index fdb634cb..00000000 --- a/build/node_modules/jade/lib/filters.js +++ /dev/null @@ -1,97 +0,0 @@ - -/*! - * Jade - filters - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = { - - /** - * Wrap text with CDATA block. - */ - - cdata: function(str){ - return ''; - }, - - /** - * Transform sass to css, wrapped in style tags. - */ - - sass: function(str){ - str = str.replace(/\\n/g, '\n'); - var sass = require('sass').render(str).replace(/\n/g, '\\n'); - return ''; - }, - - /** - * Transform stylus to css, wrapped in style tags. - */ - - stylus: function(str, options){ - var ret; - str = str.replace(/\\n/g, '\n'); - var stylus = require('stylus'); - stylus(str, options).render(function(err, css){ - if (err) throw err; - ret = css.replace(/\n/g, '\\n'); - }); - return ''; - }, - - /** - * Transform less to css, wrapped in style tags. - */ - - less: function(str){ - var ret; - str = str.replace(/\\n/g, '\n'); - require('less').render(str, function(err, css){ - if (err) throw err; - ret = ''; - }); - return ret; - }, - - /** - * Transform markdown to html. - */ - - markdown: function(str){ - var md; - - // support markdown / discount - try { - md = require('markdown'); - } catch (err){ - try { - md = require('discount'); - } catch (err) { - try { - md = require('markdown-js'); - } catch (err) { - try { - md = require('marked'); - } catch (err) { - throw new - Error('Cannot find markdown library, install markdown, discount, or marked.'); - } - } - } - } - - str = str.replace(/\\n/g, '\n'); - return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'''); - }, - - /** - * Transform coffeescript to javascript. - */ - - coffeescript: function(str){ - str = str.replace(/\\n/g, '\n'); - var js = require('coffee-script').compile(str).replace(/\\/g, '\\\\').replace(/\n/g, '\\n'); - return ''; - } -}; diff --git a/build/node_modules/jade/lib/inline-tags.js b/build/node_modules/jade/lib/inline-tags.js deleted file mode 100644 index 491de0b5..00000000 --- a/build/node_modules/jade/lib/inline-tags.js +++ /dev/null @@ -1,28 +0,0 @@ - -/*! - * Jade - inline tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'a' - , 'abbr' - , 'acronym' - , 'b' - , 'br' - , 'code' - , 'em' - , 'font' - , 'i' - , 'img' - , 'ins' - , 'kbd' - , 'map' - , 'samp' - , 'small' - , 'span' - , 'strong' - , 'sub' - , 'sup' -]; \ No newline at end of file diff --git a/build/node_modules/jade/lib/jade.js b/build/node_modules/jade/lib/jade.js deleted file mode 100644 index 00f0abb1..00000000 --- a/build/node_modules/jade/lib/jade.js +++ /dev/null @@ -1,237 +0,0 @@ -/*! - * Jade - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Parser = require('./parser') - , Lexer = require('./lexer') - , Compiler = require('./compiler') - , runtime = require('./runtime') -// if node - , fs = require('fs'); -// end - -/** - * Library version. - */ - -exports.version = '0.26.3'; - -/** - * Expose self closing tags. - */ - -exports.selfClosing = require('./self-closing'); - -/** - * Default supported doctypes. - */ - -exports.doctypes = require('./doctypes'); - -/** - * Text filters. - */ - -exports.filters = require('./filters'); - -/** - * Utilities. - */ - -exports.utils = require('./utils'); - -/** - * Expose `Compiler`. - */ - -exports.Compiler = Compiler; - -/** - * Expose `Parser`. - */ - -exports.Parser = Parser; - -/** - * Expose `Lexer`. - */ - -exports.Lexer = Lexer; - -/** - * Nodes. - */ - -exports.nodes = require('./nodes'); - -/** - * Jade runtime helpers. - */ - -exports.runtime = runtime; - -/** - * Template function cache. - */ - -exports.cache = {}; - -/** - * Parse the given `str` of jade and return a function body. - * - * @param {String} str - * @param {Object} options - * @return {String} - * @api private - */ - -function parse(str, options){ - try { - // Parse - var parser = new Parser(str, options.filename, options); - - // Compile - var compiler = new (options.compiler || Compiler)(parser.parse(), options) - , js = compiler.compile(); - - // Debug compiler - if (options.debug) { - console.error('\nCompiled Function:\n\n\033[90m%s\033[0m', js.replace(/^/gm, ' ')); - } - - return '' - + 'var buf = [];\n' - + (options.self - ? 'var self = locals || {};\n' + js - : 'with (locals || {}) {\n' + js + '\n}\n') - + 'return buf.join("");'; - } catch (err) { - parser = parser.context(); - runtime.rethrow(err, parser.filename, parser.lexer.lineno); - } -} - -/** - * Compile a `Function` representation of the given jade `str`. - * - * Options: - * - * - `compileDebug` when `false` debugging code is stripped from the compiled template - * - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()` - * for use with the Jade client-side runtime.js - * - * @param {String} str - * @param {Options} options - * @return {Function} - * @api public - */ - -exports.compile = function(str, options){ - var options = options || {} - , client = options.client - , filename = options.filename - ? JSON.stringify(options.filename) - : 'undefined' - , fn; - - if (options.compileDebug !== false) { - fn = [ - 'var __jade = [{ lineno: 1, filename: ' + filename + ' }];' - , 'try {' - , parse(String(str), options) - , '} catch (err) {' - , ' rethrow(err, __jade[0].filename, __jade[0].lineno);' - , '}' - ].join('\n'); - } else { - fn = parse(String(str), options); - } - - if (client) { - fn = 'attrs = attrs || jade.attrs; escape = escape || jade.escape; rethrow = rethrow || jade.rethrow; merge = merge || jade.merge;\n' + fn; - } - - fn = new Function('locals, attrs, escape, rethrow, merge', fn); - - if (client) return fn; - - return function(locals){ - return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow, runtime.merge); - }; -}; - -/** - * Render the given `str` of jade and invoke - * the callback `fn(err, str)`. - * - * Options: - * - * - `cache` enable template caching - * - `filename` filename required for `include` / `extends` and caching - * - * @param {String} str - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -exports.render = function(str, options, fn){ - // swap args - if ('function' == typeof options) { - fn = options, options = {}; - } - - // cache requires .filename - if (options.cache && !options.filename) { - return fn(new Error('the "filename" option is required for caching')); - } - - try { - var path = options.filename; - var tmpl = options.cache - ? exports.cache[path] || (exports.cache[path] = exports.compile(str, options)) - : exports.compile(str, options); - fn(null, tmpl(options)); - } catch (err) { - fn(err); - } -}; - -/** - * Render a Jade file at the given `path` and callback `fn(err, str)`. - * - * @param {String} path - * @param {Object|Function} options or callback - * @param {Function} fn - * @api public - */ - -exports.renderFile = function(path, options, fn){ - var key = path + ':string'; - - if ('function' == typeof options) { - fn = options, options = {}; - } - - try { - options.filename = path; - var str = options.cache - ? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) - : fs.readFileSync(path, 'utf8'); - exports.render(str, options, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Express support. - */ - -exports.__express = exports.renderFile; diff --git a/build/node_modules/jade/lib/lexer.js b/build/node_modules/jade/lib/lexer.js deleted file mode 100644 index bca314a9..00000000 --- a/build/node_modules/jade/lib/lexer.js +++ /dev/null @@ -1,771 +0,0 @@ - -/*! - * Jade - Lexer - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize `Lexer` with the given `str`. - * - * Options: - * - * - `colons` allow colons for attr delimiters - * - * @param {String} str - * @param {Object} options - * @api private - */ - -var Lexer = module.exports = function Lexer(str, options) { - options = options || {}; - this.input = str.replace(/\r\n|\r/g, '\n'); - this.colons = options.colons; - this.deferredTokens = []; - this.lastIndents = 0; - this.lineno = 1; - this.stash = []; - this.indentStack = []; - this.indentRe = null; - this.pipeless = false; -}; - -/** - * Lexer prototype. - */ - -Lexer.prototype = { - - /** - * Construct a token with the given `type` and `val`. - * - * @param {String} type - * @param {String} val - * @return {Object} - * @api private - */ - - tok: function(type, val){ - return { - type: type - , line: this.lineno - , val: val - } - }, - - /** - * Consume the given `len` of input. - * - * @param {Number} len - * @api private - */ - - consume: function(len){ - this.input = this.input.substr(len); - }, - - /** - * Scan for `type` with the given `regexp`. - * - * @param {String} type - * @param {RegExp} regexp - * @return {Object} - * @api private - */ - - scan: function(regexp, type){ - var captures; - if (captures = regexp.exec(this.input)) { - this.consume(captures[0].length); - return this.tok(type, captures[1]); - } - }, - - /** - * Defer the given `tok`. - * - * @param {Object} tok - * @api private - */ - - defer: function(tok){ - this.deferredTokens.push(tok); - }, - - /** - * Lookahead `n` tokens. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - var fetch = n - this.stash.length; - while (fetch-- > 0) this.stash.push(this.next()); - return this.stash[--n]; - }, - - /** - * Return the indexOf `start` / `end` delimiters. - * - * @param {String} start - * @param {String} end - * @return {Number} - * @api private - */ - - indexOfDelimiters: function(start, end){ - var str = this.input - , nstart = 0 - , nend = 0 - , pos = 0; - for (var i = 0, len = str.length; i < len; ++i) { - if (start == str.charAt(i)) { - ++nstart; - } else if (end == str.charAt(i)) { - if (++nend == nstart) { - pos = i; - break; - } - } - } - return pos; - }, - - /** - * Stashed token. - */ - - stashed: function() { - return this.stash.length - && this.stash.shift(); - }, - - /** - * Deferred token. - */ - - deferred: function() { - return this.deferredTokens.length - && this.deferredTokens.shift(); - }, - - /** - * end-of-source. - */ - - eos: function() { - if (this.input.length) return; - if (this.indentStack.length) { - this.indentStack.shift(); - return this.tok('outdent'); - } else { - return this.tok('eos'); - } - }, - - /** - * Blank line. - */ - - blank: function() { - var captures; - if (captures = /^\n *\n/.exec(this.input)) { - this.consume(captures[0].length - 1); - if (this.pipeless) return this.tok('text', ''); - return this.next(); - } - }, - - /** - * Comment. - */ - - comment: function() { - var captures; - if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('comment', captures[2]); - tok.buffer = '-' != captures[1]; - return tok; - } - }, - - /** - * Interpolated tag. - */ - - interpolation: function() { - var captures; - if (captures = /^#\{(.*?)\}/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('interpolation', captures[1]); - } - }, - - /** - * Tag. - */ - - tag: function() { - var captures; - if (captures = /^(\w[-:\w]*)(\/?)/.exec(this.input)) { - this.consume(captures[0].length); - var tok, name = captures[1]; - if (':' == name[name.length - 1]) { - name = name.slice(0, -1); - tok = this.tok('tag', name); - this.defer(this.tok(':')); - while (' ' == this.input[0]) this.input = this.input.substr(1); - } else { - tok = this.tok('tag', name); - } - tok.selfClosing = !! captures[2]; - return tok; - } - }, - - /** - * Filter. - */ - - filter: function() { - return this.scan(/^:(\w+)/, 'filter'); - }, - - /** - * Doctype. - */ - - doctype: function() { - return this.scan(/^(?:!!!|doctype) *([^\n]+)?/, 'doctype'); - }, - - /** - * Id. - */ - - id: function() { - return this.scan(/^#([\w-]+)/, 'id'); - }, - - /** - * Class. - */ - - className: function() { - return this.scan(/^\.([\w-]+)/, 'class'); - }, - - /** - * Text. - */ - - text: function() { - return this.scan(/^(?:\| ?| ?)?([^\n]+)/, 'text'); - }, - - /** - * Extends. - */ - - "extends": function() { - return this.scan(/^extends? +([^\n]+)/, 'extends'); - }, - - /** - * Block prepend. - */ - - prepend: function() { - var captures; - if (captures = /^prepend +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'prepend' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block append. - */ - - append: function() { - var captures; - if (captures = /^append +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = 'append' - , name = captures[1] - , tok = this.tok('block', name); - tok.mode = mode; - return tok; - } - }, - - /** - * Block. - */ - - block: function() { - var captures; - if (captures = /^block\b *(?:(prepend|append) +)?([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var mode = captures[1] || 'replace' - , name = captures[2] - , tok = this.tok('block', name); - - tok.mode = mode; - return tok; - } - }, - - /** - * Yield. - */ - - yield: function() { - return this.scan(/^yield */, 'yield'); - }, - - /** - * Include. - */ - - include: function() { - return this.scan(/^include +([^\n]+)/, 'include'); - }, - - /** - * Case. - */ - - "case": function() { - return this.scan(/^case +([^\n]+)/, 'case'); - }, - - /** - * When. - */ - - when: function() { - return this.scan(/^when +([^:\n]+)/, 'when'); - }, - - /** - * Default. - */ - - "default": function() { - return this.scan(/^default */, 'default'); - }, - - /** - * Assignment. - */ - - assignment: function() { - var captures; - if (captures = /^(\w+) += *([^;\n]+)( *;? *)/.exec(this.input)) { - this.consume(captures[0].length); - var name = captures[1] - , val = captures[2]; - return this.tok('code', 'var ' + name + ' = (' + val + ');'); - } - }, - - /** - * Call mixin. - */ - - call: function(){ - var captures; - if (captures = /^\+([-\w]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('call', captures[1]); - - // Check for args (not attributes) - if (captures = /^ *\((.*?)\)/.exec(this.input)) { - if (!/^ *[-\w]+ *=/.test(captures[1])) { - this.consume(captures[0].length); - tok.args = captures[1]; - } - } - - return tok; - } - }, - - /** - * Mixin. - */ - - mixin: function(){ - var captures; - if (captures = /^mixin +([-\w]+)(?: *\((.*)\))?/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('mixin', captures[1]); - tok.args = captures[2]; - return tok; - } - }, - - /** - * Conditional. - */ - - conditional: function() { - var captures; - if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) { - this.consume(captures[0].length); - var type = captures[1] - , js = captures[2]; - - switch (type) { - case 'if': js = 'if (' + js + ')'; break; - case 'unless': js = 'if (!(' + js + '))'; break; - case 'else if': js = 'else if (' + js + ')'; break; - case 'else': js = 'else'; break; - } - - return this.tok('code', js); - } - }, - - /** - * While. - */ - - "while": function() { - var captures; - if (captures = /^while +([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - return this.tok('code', 'while (' + captures[1] + ')'); - } - }, - - /** - * Each. - */ - - each: function() { - var captures; - if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var tok = this.tok('each', captures[1]); - tok.key = captures[2] || '$index'; - tok.code = captures[3]; - return tok; - } - }, - - /** - * Code. - */ - - code: function() { - var captures; - if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) { - this.consume(captures[0].length); - var flags = captures[1]; - captures[1] = captures[2]; - var tok = this.tok('code', captures[1]); - tok.escape = flags[0] === '='; - tok.buffer = flags[0] === '=' || flags[1] === '='; - return tok; - } - }, - - /** - * Attributes. - */ - - attrs: function() { - if ('(' == this.input.charAt(0)) { - var index = this.indexOfDelimiters('(', ')') - , str = this.input.substr(1, index-1) - , tok = this.tok('attrs') - , len = str.length - , colons = this.colons - , states = ['key'] - , escapedAttr - , key = '' - , val = '' - , quote - , c - , p; - - function state(){ - return states[states.length - 1]; - } - - function interpolate(attr) { - return attr.replace(/#\{([^}]+)\}/g, function(_, expr){ - return quote + " + (" + expr + ") + " + quote; - }); - } - - this.consume(index + 1); - tok.attrs = {}; - tok.escaped = {}; - - function parse(c) { - var real = c; - // TODO: remove when people fix ":" - if (colons && ':' == c) c = '='; - switch (c) { - case ',': - case '\n': - switch (state()) { - case 'expr': - case 'array': - case 'string': - case 'object': - val += c; - break; - default: - states.push('key'); - val = val.trim(); - key = key.trim(); - if ('' == key) return; - key = key.replace(/^['"]|['"]$/g, '').replace('!', ''); - tok.escaped[key] = escapedAttr; - tok.attrs[key] = '' == val - ? true - : interpolate(val); - key = val = ''; - } - break; - case '=': - switch (state()) { - case 'key char': - key += real; - break; - case 'val': - case 'expr': - case 'array': - case 'string': - case 'object': - val += real; - break; - default: - escapedAttr = '!' != p; - states.push('val'); - } - break; - case '(': - if ('val' == state() - || 'expr' == state()) states.push('expr'); - val += c; - break; - case ')': - if ('expr' == state() - || 'val' == state()) states.pop(); - val += c; - break; - case '{': - if ('val' == state()) states.push('object'); - val += c; - break; - case '}': - if ('object' == state()) states.pop(); - val += c; - break; - case '[': - if ('val' == state()) states.push('array'); - val += c; - break; - case ']': - if ('array' == state()) states.pop(); - val += c; - break; - case '"': - case "'": - switch (state()) { - case 'key': - states.push('key char'); - break; - case 'key char': - states.pop(); - break; - case 'string': - if (c == quote) states.pop(); - val += c; - break; - default: - states.push('string'); - val += c; - quote = c; - } - break; - case '': - break; - default: - switch (state()) { - case 'key': - case 'key char': - key += c; - break; - default: - val += c; - } - } - p = c; - } - - for (var i = 0; i < len; ++i) { - parse(str.charAt(i)); - } - - parse(','); - - if ('/' == this.input.charAt(0)) { - this.consume(1); - tok.selfClosing = true; - } - - return tok; - } - }, - - /** - * Indent | Outdent | Newline. - */ - - indent: function() { - var captures, re; - - // established regexp - if (this.indentRe) { - captures = this.indentRe.exec(this.input); - // determine regexp - } else { - // tabs - re = /^\n(\t*) */; - captures = re.exec(this.input); - - // spaces - if (captures && !captures[1].length) { - re = /^\n( *)/; - captures = re.exec(this.input); - } - - // established - if (captures && captures[1].length) this.indentRe = re; - } - - if (captures) { - var tok - , indents = captures[1].length; - - ++this.lineno; - this.consume(indents + 1); - - if (' ' == this.input[0] || '\t' == this.input[0]) { - throw new Error('Invalid indentation, you can use tabs or spaces but not both'); - } - - // blank line - if ('\n' == this.input[0]) return this.tok('newline'); - - // outdent - if (this.indentStack.length && indents < this.indentStack[0]) { - while (this.indentStack.length && this.indentStack[0] > indents) { - this.stash.push(this.tok('outdent')); - this.indentStack.shift(); - } - tok = this.stash.pop(); - // indent - } else if (indents && indents != this.indentStack[0]) { - this.indentStack.unshift(indents); - tok = this.tok('indent', indents); - // newline - } else { - tok = this.tok('newline'); - } - - return tok; - } - }, - - /** - * Pipe-less text consumed only when - * pipeless is true; - */ - - pipelessText: function() { - if (this.pipeless) { - if ('\n' == this.input[0]) return; - var i = this.input.indexOf('\n'); - if (-1 == i) i = this.input.length; - var str = this.input.substr(0, i); - this.consume(str.length); - return this.tok('text', str); - } - }, - - /** - * ':' - */ - - colon: function() { - return this.scan(/^: */, ':'); - }, - - /** - * Return the next token object, or those - * previously stashed by lookahead. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.stashed() - || this.next(); - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - next: function() { - return this.deferred() - || this.blank() - || this.eos() - || this.pipelessText() - || this.yield() - || this.doctype() - || this.interpolation() - || this["case"]() - || this.when() - || this["default"]() - || this["extends"]() - || this.append() - || this.prepend() - || this.block() - || this.include() - || this.mixin() - || this.call() - || this.conditional() - || this.each() - || this["while"]() - || this.assignment() - || this.tag() - || this.filter() - || this.code() - || this.id() - || this.className() - || this.attrs() - || this.indent() - || this.comment() - || this.colon() - || this.text(); - } -}; diff --git a/build/node_modules/jade/lib/nodes/attrs.js b/build/node_modules/jade/lib/nodes/attrs.js deleted file mode 100644 index 5de9b59c..00000000 --- a/build/node_modules/jade/lib/nodes/attrs.js +++ /dev/null @@ -1,77 +0,0 @@ - -/*! - * Jade - nodes - Attrs - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'), - Block = require('./block'); - -/** - * Initialize a `Attrs` node. - * - * @api public - */ - -var Attrs = module.exports = function Attrs() { - this.attrs = []; -}; - -/** - * Inherit from `Node`. - */ - -Attrs.prototype.__proto__ = Node.prototype; - -/** - * Set attribute `name` to `val`, keep in mind these become - * part of a raw js object literal, so to quote a value you must - * '"quote me"', otherwise or example 'user.name' is literal JavaScript. - * - * @param {String} name - * @param {String} val - * @param {Boolean} escaped - * @return {Tag} for chaining - * @api public - */ - -Attrs.prototype.setAttribute = function(name, val, escaped){ - this.attrs.push({ name: name, val: val, escaped: escaped }); - return this; -}; - -/** - * Remove attribute `name` when present. - * - * @param {String} name - * @api public - */ - -Attrs.prototype.removeAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - delete this.attrs[i]; - } - } -}; - -/** - * Get attribute value by `name`. - * - * @param {String} name - * @return {String} - * @api public - */ - -Attrs.prototype.getAttribute = function(name){ - for (var i = 0, len = this.attrs.length; i < len; ++i) { - if (this.attrs[i] && this.attrs[i].name == name) { - return this.attrs[i].val; - } - } -}; diff --git a/build/node_modules/jade/lib/nodes/block-comment.js b/build/node_modules/jade/lib/nodes/block-comment.js deleted file mode 100644 index 4f41e4a5..00000000 --- a/build/node_modules/jade/lib/nodes/block-comment.js +++ /dev/null @@ -1,33 +0,0 @@ - -/*! - * Jade - nodes - BlockComment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `BlockComment` with the given `block`. - * - * @param {String} val - * @param {Block} block - * @param {Boolean} buffer - * @api public - */ - -var BlockComment = module.exports = function BlockComment(val, block, buffer) { - this.block = block; - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -BlockComment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/block.js b/build/node_modules/jade/lib/nodes/block.js deleted file mode 100644 index bb00a1d9..00000000 --- a/build/node_modules/jade/lib/nodes/block.js +++ /dev/null @@ -1,121 +0,0 @@ - -/*! - * Jade - nodes - Block - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Block` with an optional `node`. - * - * @param {Node} node - * @api public - */ - -var Block = module.exports = function Block(node){ - this.nodes = []; - if (node) this.push(node); -}; - -/** - * Inherit from `Node`. - */ - -Block.prototype.__proto__ = Node.prototype; - -/** - * Block flag. - */ - -Block.prototype.isBlock = true; - -/** - * Replace the nodes in `other` with the nodes - * in `this` block. - * - * @param {Block} other - * @api private - */ - -Block.prototype.replace = function(other){ - other.nodes = this.nodes; -}; - -/** - * Pust the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.push = function(node){ - return this.nodes.push(node); -}; - -/** - * Check if this block is empty. - * - * @return {Boolean} - * @api public - */ - -Block.prototype.isEmpty = function(){ - return 0 == this.nodes.length; -}; - -/** - * Unshift the given `node`. - * - * @param {Node} node - * @return {Number} - * @api public - */ - -Block.prototype.unshift = function(node){ - return this.nodes.unshift(node); -}; - -/** - * Return the "last" block, or the first `yield` node. - * - * @return {Block} - * @api private - */ - -Block.prototype.includeBlock = function(){ - var ret = this - , node; - - for (var i = 0, len = this.nodes.length; i < len; ++i) { - node = this.nodes[i]; - if (node.yield) return node; - else if (node.textOnly) continue; - else if (node.includeBlock) ret = node.includeBlock(); - else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock(); - } - - return ret; -}; - -/** - * Return a clone of this block. - * - * @return {Block} - * @api private - */ - -Block.prototype.clone = function(){ - var clone = new Block; - for (var i = 0, len = this.nodes.length; i < len; ++i) { - clone.push(this.nodes[i].clone()); - } - return clone; -}; - diff --git a/build/node_modules/jade/lib/nodes/case.js b/build/node_modules/jade/lib/nodes/case.js deleted file mode 100644 index 08ff0337..00000000 --- a/build/node_modules/jade/lib/nodes/case.js +++ /dev/null @@ -1,43 +0,0 @@ - -/*! - * Jade - nodes - Case - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a new `Case` with `expr`. - * - * @param {String} expr - * @api public - */ - -var Case = exports = module.exports = function Case(expr, block){ - this.expr = expr; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Case.prototype.__proto__ = Node.prototype; - -var When = exports.When = function When(expr, block){ - this.expr = expr; - this.block = block; - this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -When.prototype.__proto__ = Node.prototype; - diff --git a/build/node_modules/jade/lib/nodes/code.js b/build/node_modules/jade/lib/nodes/code.js deleted file mode 100644 index babc6759..00000000 --- a/build/node_modules/jade/lib/nodes/code.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Code - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Code` node with the given code `val`. - * Code may also be optionally buffered and escaped. - * - * @param {String} val - * @param {Boolean} buffer - * @param {Boolean} escape - * @api public - */ - -var Code = module.exports = function Code(val, buffer, escape) { - this.val = val; - this.buffer = buffer; - this.escape = escape; - if (val.match(/^ *else/)) this.debug = false; -}; - -/** - * Inherit from `Node`. - */ - -Code.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/comment.js b/build/node_modules/jade/lib/nodes/comment.js deleted file mode 100644 index 2e1469e7..00000000 --- a/build/node_modules/jade/lib/nodes/comment.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Comment - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Comment` with the given `val`, optionally `buffer`, - * otherwise the comment may render in the output. - * - * @param {String} val - * @param {Boolean} buffer - * @api public - */ - -var Comment = module.exports = function Comment(val, buffer) { - this.val = val; - this.buffer = buffer; -}; - -/** - * Inherit from `Node`. - */ - -Comment.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/doctype.js b/build/node_modules/jade/lib/nodes/doctype.js deleted file mode 100644 index b8f33e56..00000000 --- a/build/node_modules/jade/lib/nodes/doctype.js +++ /dev/null @@ -1,29 +0,0 @@ - -/*! - * Jade - nodes - Doctype - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Doctype` with the given `val`. - * - * @param {String} val - * @api public - */ - -var Doctype = module.exports = function Doctype(val) { - this.val = val; -}; - -/** - * Inherit from `Node`. - */ - -Doctype.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/each.js b/build/node_modules/jade/lib/nodes/each.js deleted file mode 100644 index f54101f1..00000000 --- a/build/node_modules/jade/lib/nodes/each.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Each - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize an `Each` node, representing iteration - * - * @param {String} obj - * @param {String} val - * @param {String} key - * @param {Block} block - * @api public - */ - -var Each = module.exports = function Each(obj, val, key, block) { - this.obj = obj; - this.val = val; - this.key = key; - this.block = block; -}; - -/** - * Inherit from `Node`. - */ - -Each.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/filter.js b/build/node_modules/jade/lib/nodes/filter.js deleted file mode 100644 index 851a0040..00000000 --- a/build/node_modules/jade/lib/nodes/filter.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*! - * Jade - nodes - Filter - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node') - , Block = require('./block'); - -/** - * Initialize a `Filter` node with the given - * filter `name` and `block`. - * - * @param {String} name - * @param {Block|Node} block - * @api public - */ - -var Filter = module.exports = function Filter(name, block, attrs) { - this.name = name; - this.block = block; - this.attrs = attrs; - this.isASTFilter = !block.nodes.every(function(node){ return node.isText }); -}; - -/** - * Inherit from `Node`. - */ - -Filter.prototype.__proto__ = Node.prototype; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/index.js b/build/node_modules/jade/lib/nodes/index.js deleted file mode 100644 index 386ad2f9..00000000 --- a/build/node_modules/jade/lib/nodes/index.js +++ /dev/null @@ -1,20 +0,0 @@ - -/*! - * Jade - nodes - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -exports.Node = require('./node'); -exports.Tag = require('./tag'); -exports.Code = require('./code'); -exports.Each = require('./each'); -exports.Case = require('./case'); -exports.Text = require('./text'); -exports.Block = require('./block'); -exports.Mixin = require('./mixin'); -exports.Filter = require('./filter'); -exports.Comment = require('./comment'); -exports.Literal = require('./literal'); -exports.BlockComment = require('./block-comment'); -exports.Doctype = require('./doctype'); diff --git a/build/node_modules/jade/lib/nodes/literal.js b/build/node_modules/jade/lib/nodes/literal.js deleted file mode 100644 index fde586be..00000000 --- a/build/node_modules/jade/lib/nodes/literal.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Jade - nodes - Literal - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Literal` node with the given `str. - * - * @param {String} str - * @api public - */ - -var Literal = module.exports = function Literal(str) { - this.str = str - .replace(/\\/g, "\\\\") - .replace(/\n|\r\n/g, "\\n") - .replace(/'/g, "\\'"); -}; - -/** - * Inherit from `Node`. - */ - -Literal.prototype.__proto__ = Node.prototype; diff --git a/build/node_modules/jade/lib/nodes/mixin.js b/build/node_modules/jade/lib/nodes/mixin.js deleted file mode 100644 index 8407bc79..00000000 --- a/build/node_modules/jade/lib/nodes/mixin.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Mixin - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'); - -/** - * Initialize a new `Mixin` with `name` and `block`. - * - * @param {String} name - * @param {String} args - * @param {Block} block - * @api public - */ - -var Mixin = module.exports = function Mixin(name, args, block, call){ - this.name = name; - this.args = args; - this.block = block; - this.attrs = []; - this.call = call; -}; - -/** - * Inherit from `Attrs`. - */ - -Mixin.prototype.__proto__ = Attrs.prototype; - diff --git a/build/node_modules/jade/lib/nodes/node.js b/build/node_modules/jade/lib/nodes/node.js deleted file mode 100644 index e98f042c..00000000 --- a/build/node_modules/jade/lib/nodes/node.js +++ /dev/null @@ -1,25 +0,0 @@ - -/*! - * Jade - nodes - Node - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Initialize a `Node`. - * - * @api public - */ - -var Node = module.exports = function Node(){}; - -/** - * Clone this node (return itself) - * - * @return {Node} - * @api private - */ - -Node.prototype.clone = function(){ - return this; -}; diff --git a/build/node_modules/jade/lib/nodes/tag.js b/build/node_modules/jade/lib/nodes/tag.js deleted file mode 100644 index 4b6728ad..00000000 --- a/build/node_modules/jade/lib/nodes/tag.js +++ /dev/null @@ -1,95 +0,0 @@ - -/*! - * Jade - nodes - Tag - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Attrs = require('./attrs'), - Block = require('./block'), - inlineTags = require('../inline-tags'); - -/** - * Initialize a `Tag` node with the given tag `name` and optional `block`. - * - * @param {String} name - * @param {Block} block - * @api public - */ - -var Tag = module.exports = function Tag(name, block) { - this.name = name; - this.attrs = []; - this.block = block || new Block; -}; - -/** - * Inherit from `Attrs`. - */ - -Tag.prototype.__proto__ = Attrs.prototype; - -/** - * Clone this tag. - * - * @return {Tag} - * @api private - */ - -Tag.prototype.clone = function(){ - var clone = new Tag(this.name, this.block.clone()); - clone.line = this.line; - clone.attrs = this.attrs; - clone.textOnly = this.textOnly; - return clone; -}; - -/** - * Check if this tag is an inline tag. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.isInline = function(){ - return ~inlineTags.indexOf(this.name); -}; - -/** - * Check if this tag's contents can be inlined. Used for pretty printing. - * - * @return {Boolean} - * @api private - */ - -Tag.prototype.canInline = function(){ - var nodes = this.block.nodes; - - function isInline(node){ - // Recurse if the node is a block - if (node.isBlock) return node.nodes.every(isInline); - return node.isText || (node.isInline && node.isInline()); - } - - // Empty tag - if (!nodes.length) return true; - - // Text-only or inline-only tag - if (1 == nodes.length) return isInline(nodes[0]); - - // Multi-line inline-only tag - if (this.block.nodes.every(isInline)) { - for (var i = 1, len = nodes.length; i < len; ++i) { - if (nodes[i-1].isText && nodes[i].isText) - return false; - } - return true; - } - - // Mixed tag - return false; -}; \ No newline at end of file diff --git a/build/node_modules/jade/lib/nodes/text.js b/build/node_modules/jade/lib/nodes/text.js deleted file mode 100644 index 3b5dd557..00000000 --- a/build/node_modules/jade/lib/nodes/text.js +++ /dev/null @@ -1,36 +0,0 @@ - -/*! - * Jade - nodes - Text - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Node = require('./node'); - -/** - * Initialize a `Text` node with optional `line`. - * - * @param {String} line - * @api public - */ - -var Text = module.exports = function Text(line) { - this.val = ''; - if ('string' == typeof line) this.val = line; -}; - -/** - * Inherit from `Node`. - */ - -Text.prototype.__proto__ = Node.prototype; - -/** - * Flag as text. - */ - -Text.prototype.isText = true; \ No newline at end of file diff --git a/build/node_modules/jade/lib/parser.js b/build/node_modules/jade/lib/parser.js deleted file mode 100644 index 92f2af0c..00000000 --- a/build/node_modules/jade/lib/parser.js +++ /dev/null @@ -1,710 +0,0 @@ - -/*! - * Jade - Parser - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Lexer = require('./lexer') - , nodes = require('./nodes'); - -/** - * Initialize `Parser` with the given input `str` and `filename`. - * - * @param {String} str - * @param {String} filename - * @param {Object} options - * @api public - */ - -var Parser = exports = module.exports = function Parser(str, filename, options){ - this.input = str; - this.lexer = new Lexer(str, options); - this.filename = filename; - this.blocks = {}; - this.mixins = {}; - this.options = options; - this.contexts = [this]; -}; - -/** - * Tags that may not contain tags. - */ - -var textOnly = exports.textOnly = ['script', 'style']; - -/** - * Parser prototype. - */ - -Parser.prototype = { - - /** - * Push `parser` onto the context stack, - * or pop and return a `Parser`. - */ - - context: function(parser){ - if (parser) { - this.contexts.push(parser); - } else { - return this.contexts.pop(); - } - }, - - /** - * Return the next token object. - * - * @return {Object} - * @api private - */ - - advance: function(){ - return this.lexer.advance(); - }, - - /** - * Skip `n` tokens. - * - * @param {Number} n - * @api private - */ - - skip: function(n){ - while (n--) this.advance(); - }, - - /** - * Single token lookahead. - * - * @return {Object} - * @api private - */ - - peek: function() { - return this.lookahead(1); - }, - - /** - * Return lexer lineno. - * - * @return {Number} - * @api private - */ - - line: function() { - return this.lexer.lineno; - }, - - /** - * `n` token lookahead. - * - * @param {Number} n - * @return {Object} - * @api private - */ - - lookahead: function(n){ - return this.lexer.lookahead(n); - }, - - /** - * Parse input returning a string of js for evaluation. - * - * @return {String} - * @api public - */ - - parse: function(){ - var block = new nodes.Block, parser; - block.line = this.line(); - - while ('eos' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - - if (parser = this.extending) { - this.context(parser); - var ast = parser.parse(); - this.context(); - // hoist mixins - for (var name in this.mixins) - ast.unshift(this.mixins[name]); - return ast; - } - - return block; - }, - - /** - * Expect the given type, or throw an exception. - * - * @param {String} type - * @api private - */ - - expect: function(type){ - if (this.peek().type === type) { - return this.advance(); - } else { - throw new Error('expected "' + type + '", but got "' + this.peek().type + '"'); - } - }, - - /** - * Accept the given `type`. - * - * @param {String} type - * @api private - */ - - accept: function(type){ - if (this.peek().type === type) { - return this.advance(); - } - }, - - /** - * tag - * | doctype - * | mixin - * | include - * | filter - * | comment - * | text - * | each - * | code - * | yield - * | id - * | class - * | interpolation - */ - - parseExpr: function(){ - switch (this.peek().type) { - case 'tag': - return this.parseTag(); - case 'mixin': - return this.parseMixin(); - case 'block': - return this.parseBlock(); - case 'case': - return this.parseCase(); - case 'when': - return this.parseWhen(); - case 'default': - return this.parseDefault(); - case 'extends': - return this.parseExtends(); - case 'include': - return this.parseInclude(); - case 'doctype': - return this.parseDoctype(); - case 'filter': - return this.parseFilter(); - case 'comment': - return this.parseComment(); - case 'text': - return this.parseText(); - case 'each': - return this.parseEach(); - case 'code': - return this.parseCode(); - case 'call': - return this.parseCall(); - case 'interpolation': - return this.parseInterpolation(); - case 'yield': - this.advance(); - var block = new nodes.Block; - block.yield = true; - return block; - case 'id': - case 'class': - var tok = this.advance(); - this.lexer.defer(this.lexer.tok('tag', 'div')); - this.lexer.defer(tok); - return this.parseExpr(); - default: - throw new Error('unexpected token "' + this.peek().type + '"'); - } - }, - - /** - * Text - */ - - parseText: function(){ - var tok = this.expect('text') - , node = new nodes.Text(tok.val); - node.line = this.line(); - return node; - }, - - /** - * ':' expr - * | block - */ - - parseBlockExpansion: function(){ - if (':' == this.peek().type) { - this.advance(); - return new nodes.Block(this.parseExpr()); - } else { - return this.block(); - } - }, - - /** - * case - */ - - parseCase: function(){ - var val = this.expect('case').val - , node = new nodes.Case(val); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * when - */ - - parseWhen: function(){ - var val = this.expect('when').val - return new nodes.Case.When(val, this.parseBlockExpansion()); - }, - - /** - * default - */ - - parseDefault: function(){ - this.expect('default'); - return new nodes.Case.When('default', this.parseBlockExpansion()); - }, - - /** - * code - */ - - parseCode: function(){ - var tok = this.expect('code') - , node = new nodes.Code(tok.val, tok.buffer, tok.escape) - , block - , i = 1; - node.line = this.line(); - while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i; - block = 'indent' == this.lookahead(i).type; - if (block) { - this.skip(i-1); - node.block = this.block(); - } - return node; - }, - - /** - * comment - */ - - parseComment: function(){ - var tok = this.expect('comment') - , node; - - if ('indent' == this.peek().type) { - node = new nodes.BlockComment(tok.val, this.block(), tok.buffer); - } else { - node = new nodes.Comment(tok.val, tok.buffer); - } - - node.line = this.line(); - return node; - }, - - /** - * doctype - */ - - parseDoctype: function(){ - var tok = this.expect('doctype') - , node = new nodes.Doctype(tok.val); - node.line = this.line(); - return node; - }, - - /** - * filter attrs? text-block - */ - - parseFilter: function(){ - var block - , tok = this.expect('filter') - , attrs = this.accept('attrs'); - - this.lexer.pipeless = true; - block = this.parseTextBlock(); - this.lexer.pipeless = false; - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * tag ':' attrs? block - */ - - parseASTFilter: function(){ - var block - , tok = this.expect('tag') - , attrs = this.accept('attrs'); - - this.expect(':'); - block = this.block(); - - var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs); - node.line = this.line(); - return node; - }, - - /** - * each block - */ - - parseEach: function(){ - var tok = this.expect('each') - , node = new nodes.Each(tok.code, tok.val, tok.key); - node.line = this.line(); - node.block = this.block(); - return node; - }, - - /** - * 'extends' name - */ - - parseExtends: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - if (!this.filename) - throw new Error('the "filename" option is required to extend templates'); - - var path = this.expect('extends').val.trim() - , dir = dirname(this.filename); - - var path = join(dir, path + '.jade') - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - - parser.blocks = this.blocks; - parser.contexts = this.contexts; - this.extending = parser; - - // TODO: null node - return new nodes.Literal(''); - }, - - /** - * 'block' name block - */ - - parseBlock: function(){ - var block = this.expect('block') - , mode = block.mode - , name = block.val.trim(); - - block = 'indent' == this.peek().type - ? this.block() - : new nodes.Block(new nodes.Literal('')); - - var prev = this.blocks[name]; - - if (prev) { - switch (prev.mode) { - case 'append': - block.nodes = block.nodes.concat(prev.nodes); - prev = block; - break; - case 'prepend': - block.nodes = prev.nodes.concat(block.nodes); - prev = block; - break; - } - } - - block.mode = mode; - return this.blocks[name] = prev || block; - }, - - /** - * include block? - */ - - parseInclude: function(){ - var path = require('path') - , fs = require('fs') - , dirname = path.dirname - , basename = path.basename - , join = path.join; - - var path = this.expect('include').val.trim() - , dir = dirname(this.filename); - - if (!this.filename) - throw new Error('the "filename" option is required to use includes'); - - // no extension - if (!~basename(path).indexOf('.')) { - path += '.jade'; - } - - // non-jade - if ('.jade' != path.substr(-5)) { - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8'); - return new nodes.Literal(str); - } - - var path = join(dir, path) - , str = fs.readFileSync(path, 'utf8') - , parser = new Parser(str, path, this.options); - parser.blocks = this.blocks; - parser.mixins = this.mixins; - - this.context(parser); - var ast = parser.parse(); - this.context(); - ast.filename = path; - - if ('indent' == this.peek().type) { - ast.includeBlock().push(this.block()); - } - - return ast; - }, - - /** - * call ident block - */ - - parseCall: function(){ - var tok = this.expect('call') - , name = tok.val - , args = tok.args - , mixin = new nodes.Mixin(name, args, new nodes.Block, true); - - this.tag(mixin); - if (mixin.block.isEmpty()) mixin.block = null; - return mixin; - }, - - /** - * mixin block - */ - - parseMixin: function(){ - var tok = this.expect('mixin') - , name = tok.val - , args = tok.args - , mixin; - - // definition - if ('indent' == this.peek().type) { - mixin = new nodes.Mixin(name, args, this.block(), false); - this.mixins[name] = mixin; - return mixin; - // call - } else { - return new nodes.Mixin(name, args, null, true); - } - }, - - /** - * indent (text | newline)* outdent - */ - - parseTextBlock: function(){ - var block = new nodes.Block; - block.line = this.line(); - var spaces = this.expect('indent').val; - if (null == this._spaces) this._spaces = spaces; - var indent = Array(spaces - this._spaces + 1).join(' '); - while ('outdent' != this.peek().type) { - switch (this.peek().type) { - case 'newline': - this.advance(); - break; - case 'indent': - this.parseTextBlock().nodes.forEach(function(node){ - block.push(node); - }); - break; - default: - var text = new nodes.Text(indent + this.advance().val); - text.line = this.line(); - block.push(text); - } - } - - if (spaces == this._spaces) this._spaces = null; - this.expect('outdent'); - return block; - }, - - /** - * indent expr* outdent - */ - - block: function(){ - var block = new nodes.Block; - block.line = this.line(); - this.expect('indent'); - while ('outdent' != this.peek().type) { - if ('newline' == this.peek().type) { - this.advance(); - } else { - block.push(this.parseExpr()); - } - } - this.expect('outdent'); - return block; - }, - - /** - * interpolation (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseInterpolation: function(){ - var tok = this.advance(); - var tag = new nodes.Tag(tok.val); - tag.buffer = true; - return this.tag(tag); - }, - - /** - * tag (attrs | class | id)* (text | code | ':')? newline* block? - */ - - parseTag: function(){ - // ast-filter look-ahead - var i = 2; - if ('attrs' == this.lookahead(i).type) ++i; - if (':' == this.lookahead(i).type) { - if ('indent' == this.lookahead(++i).type) { - return this.parseASTFilter(); - } - } - - var tok = this.advance() - , tag = new nodes.Tag(tok.val); - - tag.selfClosing = tok.selfClosing; - - return this.tag(tag); - }, - - /** - * Parse tag. - */ - - tag: function(tag){ - var dot; - - tag.line = this.line(); - - // (attrs | class | id)* - out: - while (true) { - switch (this.peek().type) { - case 'id': - case 'class': - var tok = this.advance(); - tag.setAttribute(tok.type, "'" + tok.val + "'"); - continue; - case 'attrs': - var tok = this.advance() - , obj = tok.attrs - , escaped = tok.escaped - , names = Object.keys(obj); - - if (tok.selfClosing) tag.selfClosing = true; - - for (var i = 0, len = names.length; i < len; ++i) { - var name = names[i] - , val = obj[name]; - tag.setAttribute(name, val, escaped[name]); - } - continue; - default: - break out; - } - } - - // check immediate '.' - if ('.' == this.peek().val) { - dot = tag.textOnly = true; - this.advance(); - } - - // (text | code | ':')? - switch (this.peek().type) { - case 'text': - tag.block.push(this.parseText()); - break; - case 'code': - tag.code = this.parseCode(); - break; - case ':': - this.advance(); - tag.block = new nodes.Block; - tag.block.push(this.parseExpr()); - break; - } - - // newline* - while ('newline' == this.peek().type) this.advance(); - - tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name); - - // script special-case - if ('script' == tag.name) { - var type = tag.getAttribute('type'); - if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) { - tag.textOnly = false; - } - } - - // block? - if ('indent' == this.peek().type) { - if (tag.textOnly) { - this.lexer.pipeless = true; - tag.block = this.parseTextBlock(); - this.lexer.pipeless = false; - } else { - var block = this.block(); - if (tag.block) { - for (var i = 0, len = block.nodes.length; i < len; ++i) { - tag.block.push(block.nodes[i]); - } - } else { - tag.block = block; - } - } - } - - return tag; - } -}; diff --git a/build/node_modules/jade/lib/runtime.js b/build/node_modules/jade/lib/runtime.js deleted file mode 100644 index fb711f5e..00000000 --- a/build/node_modules/jade/lib/runtime.js +++ /dev/null @@ -1,174 +0,0 @@ - -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; diff --git a/build/node_modules/jade/lib/self-closing.js b/build/node_modules/jade/lib/self-closing.js deleted file mode 100644 index 05487712..00000000 --- a/build/node_modules/jade/lib/self-closing.js +++ /dev/null @@ -1,19 +0,0 @@ - -/*! - * Jade - self closing tags - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -module.exports = [ - 'meta' - , 'img' - , 'link' - , 'input' - , 'source' - , 'area' - , 'base' - , 'col' - , 'br' - , 'hr' -]; \ No newline at end of file diff --git a/build/node_modules/jade/lib/utils.js b/build/node_modules/jade/lib/utils.js deleted file mode 100644 index ff46d022..00000000 --- a/build/node_modules/jade/lib/utils.js +++ /dev/null @@ -1,49 +0,0 @@ - -/*! - * Jade - utils - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Convert interpolation in the given string to JavaScript. - * - * @param {String} str - * @return {String} - * @api private - */ - -var interpolate = exports.interpolate = function(str){ - return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){ - return escape - ? str - : "' + " - + ('!' == flag ? '' : 'escape') - + "((interp = " + code.replace(/\\'/g, "'") - + ") == null ? '' : interp) + '"; - }); -}; - -/** - * Escape single quotes in `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -var escape = exports.escape = function(str) { - return str.replace(/'/g, "\\'"); -}; - -/** - * Interpolate, and escape the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.text = function(str){ - return interpolate(escape(str)); -}; \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/commander/.npmignore b/build/node_modules/jade/node_modules/commander/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/build/node_modules/jade/node_modules/commander/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/build/node_modules/jade/node_modules/commander/History.md b/build/node_modules/jade/node_modules/commander/History.md deleted file mode 100644 index 4961d2e2..00000000 --- a/build/node_modules/jade/node_modules/commander/History.md +++ /dev/null @@ -1,107 +0,0 @@ - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/build/node_modules/jade/node_modules/commander/Makefile b/build/node_modules/jade/node_modules/commander/Makefile deleted file mode 100644 index 00746255..00000000 --- a/build/node_modules/jade/node_modules/commander/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -TESTS = $(shell find test/test.*.js) - -test: - @./test/run $(TESTS) - -.PHONY: test \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/commander/Readme.md b/build/node_modules/jade/node_modules/commander/Readme.md deleted file mode 100644 index b8328c37..00000000 --- a/build/node_modules/jade/node_modules/commander/Readme.md +++ /dev/null @@ -1,262 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineappe'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineappe - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .prompt(msg, fn) - - Single-line prompt: - -```js -program.prompt('name: ', function(name){ - console.log('hi %s', name); -}); -``` - - Multi-line prompt: - -```js -program.prompt('description:', function(name){ - console.log('hi %s', name); -}); -``` - - Coercion: - -```js -program.prompt('Age: ', Number, function(age){ - console.log('age: %j', age); -}); -``` - -```js -program.prompt('Birthdate: ', Date, function(date){ - console.log('date: %s', date); -}); -``` - -## .password(msg[, mask], fn) - -Prompt for password without echoing: - -```js -program.password('Password: ', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -Prompt for password with mask char "*": - -```js -program.password('Password: ', '*', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -## .confirm(msg, fn) - - Confirm with the given `msg`: - -```js -program.confirm('continue? ', function(ok){ - console.log(' got %j', ok); -}); -``` - -## .choose(list, fn) - - Let the user choose from a `list`: - -```js -var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - -console.log('Choose the coolest pet:'); -program.choose(list, function(i){ - console.log('you chose %d "%s"', i, list[i]); -}); -``` - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/commander/index.js b/build/node_modules/jade/node_modules/commander/index.js deleted file mode 100644 index 06ec1e4b..00000000 --- a/build/node_modules/jade/node_modules/commander/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/commander'); \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/commander/lib/commander.js b/build/node_modules/jade/node_modules/commander/lib/commander.js deleted file mode 100644 index 5ba87ebb..00000000 --- a/build/node_modules/jade/node_modules/commander/lib/commander.js +++ /dev/null @@ -1,1026 +0,0 @@ - -/*! - * commander - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , path = require('path') - , tty = require('tty') - , basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this.args = []; - this.name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - return cmd; -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self.args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self.args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this.name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - self.args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self.args.length) { - args[self.args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // store raw args - this.rawArgs = argv; - - // guess name - if (!this.name) this.name = basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - this.args = parsed.args; - return this.parseArgs(this.args, parsed.unknown); -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0]) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || '-' == arg[0]) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this.args.length ? ' ' + args : ''); - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return cmd.name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args - + (cmd.description() - ? '\n' + cmd.description() - : ''); - }).join('\n\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this.name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Prompt for a `Number`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForNumber = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseNumber(val){ - val = Number(val); - if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber); - fn(val); - }); -}; - -/** - * Prompt for a `Date`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForDate = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseDate(val){ - val = new Date(val); - if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate); - fn(val); - }); -}; - -/** - * Single-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptSingleLine = function(str, fn){ - if ('function' == typeof arguments[2]) { - return this['promptFor' + (fn.name || fn)](str, arguments[2]); - } - - process.stdout.write(str); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', function(val){ - fn(val.trim()); - }).resume(); -}; - -/** - * Multi-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptMultiLine = function(str, fn){ - var buf = []; - console.log(str); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(val){ - if ('\n' == val || '\r\n' == val) { - process.stdin.removeAllListeners('data'); - fn(buf.join('\n')); - } else { - buf.push(val.trimRight()); - } - }).resume(); -}; - -/** - * Prompt `str` and callback `fn(val)` - * - * Commander supports single-line and multi-line prompts. - * To issue a single-line prompt simply add white-space - * to the end of `str`, something like "name: ", whereas - * for a multi-line prompt omit this "description:". - * - * - * Examples: - * - * program.prompt('Username: ', function(name){ - * console.log('hi %s', name); - * }); - * - * program.prompt('Description:', function(desc){ - * console.log('description was "%s"', desc.trim()); - * }); - * - * @param {String|Object} str - * @param {Function} fn - * @api public - */ - -Command.prototype.prompt = function(str, fn){ - var self = this; - - if ('string' == typeof str) { - if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments); - this.promptMultiLine(str, fn); - } else { - var keys = Object.keys(str) - , obj = {}; - - function next() { - var key = keys.shift() - , label = str[key]; - - if (!key) return fn(obj); - self.prompt(label, function(val){ - obj[key] = val; - next(); - }); - } - - next(); - } -}; - -/** - * Prompt for password with `str`, `mask` char and callback `fn(val)`. - * - * The mask string defaults to '', aka no output is - * written while typing, you may want to use "*" etc. - * - * Examples: - * - * program.password('Password: ', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * program.password('Password: ', '*', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {String} mask - * @param {Function} fn - * @api public - */ - -Command.prototype.password = function(str, mask, fn){ - var self = this - , buf = ''; - - // default mask - if ('function' == typeof mask) { - fn = mask; - mask = ''; - } - - process.stdin.resume(); - tty.setRawMode(true); - process.stdout.write(str); - - // keypress - process.stdin.on('keypress', function(c, key){ - if (key && 'enter' == key.name) { - console.log(); - process.stdin.removeAllListeners('keypress'); - tty.setRawMode(false); - if (!buf.trim().length) return self.password(str, mask, fn); - fn(buf); - return; - } - - if (key && key.ctrl && 'c' == key.name) { - console.log('%s', buf); - process.exit(); - } - - process.stdout.write(mask); - buf += c; - }).resume(); -}; - -/** - * Confirmation prompt with `str` and callback `fn(bool)` - * - * Examples: - * - * program.confirm('continue? ', function(ok){ - * console.log(' got %j', ok); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {Function} fn - * @api public - */ - - -Command.prototype.confirm = function(str, fn, verbose){ - var self = this; - this.prompt(str, function(ok){ - if (!ok.trim()) { - if (!verbose) str += '(yes or no) '; - return self.confirm(str, fn, true); - } - fn(parseBool(ok)); - }); -}; - -/** - * Choice prompt with `list` of items and callback `fn(index, item)` - * - * Examples: - * - * var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - * - * console.log('Choose the coolest pet:'); - * program.choose(list, function(i){ - * console.log('you chose %d "%s"', i, list[i]); - * process.stdin.destroy(); - * }); - * - * @param {Array} list - * @param {Number|Function} index or fn - * @param {Function} fn - * @api public - */ - -Command.prototype.choose = function(list, index, fn){ - var self = this - , hasDefault = 'number' == typeof index; - - if (!hasDefault) { - fn = index; - index = null; - } - - list.forEach(function(item, i){ - if (hasDefault && i == index) { - console.log('* %d) %s', i + 1, item); - } else { - console.log(' %d) %s', i + 1, item); - } - }); - - function again() { - self.prompt(' : ', function(val){ - val = parseInt(val, 10) - 1; - if (hasDefault && isNaN(val)) val = index; - - if (null == list[val]) { - again(); - } else { - fn(val, list[val]); - } - }); - } - - again(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Parse a boolean `str`. - * - * @param {String} str - * @return {Boolean} - * @api private - */ - -function parseBool(str) { - return /^y|yes|ok|true$/i.test(str); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - process.stdout.write(cmd.helpInformation()); - cmd.emit('--help'); - process.exit(0); - } - } -} diff --git a/build/node_modules/jade/node_modules/commander/package.json b/build/node_modules/jade/node_modules/commander/package.json deleted file mode 100644 index bee840f1..00000000 --- a/build/node_modules/jade/node_modules/commander/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "commander@0.6.1", - "_id": "commander@0.6.1", - "_inBundle": false, - "_integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "_location": "/jade/commander", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "commander@0.6.1", - "name": "commander", - "escapedName": "commander", - "rawSpec": "0.6.1", - "saveSpec": null, - "fetchSpec": "0.6.1" - }, - "_requiredBy": [ - "/jade" - ], - "_resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "_shasum": "fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06", - "_spec": "commander@0.6.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/jade", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bugs": { - "url": "https://github.com/visionmedia/commander.js/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "the complete solution for node.js command-line programs", - "devDependencies": { - "should": ">= 0.0.1" - }, - "engines": { - "node": ">= 0.4.x" - }, - "homepage": "https://github.com/visionmedia/commander.js#readme", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "main": "index", - "name": "commander", - "repository": { - "type": "git", - "url": "git+https://github.com/visionmedia/commander.js.git" - }, - "scripts": { - "test": "make test" - }, - "version": "0.6.1" -} diff --git a/build/node_modules/jade/node_modules/mkdirp/.gitignore.orig b/build/node_modules/jade/node_modules/mkdirp/.gitignore.orig deleted file mode 100644 index 9303c347..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/.gitignore.orig +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/mkdirp/.gitignore.rej b/build/node_modules/jade/node_modules/mkdirp/.gitignore.rej deleted file mode 100644 index 69244ff8..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/.gitignore.rej +++ /dev/null @@ -1,5 +0,0 @@ ---- /dev/null -+++ .gitignore -@@ -0,0 +1,2 @@ -+node_modules/ -+npm-debug.log \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/mkdirp/.npmignore b/build/node_modules/jade/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/mkdirp/LICENSE b/build/node_modules/jade/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/build/node_modules/jade/node_modules/mkdirp/README.markdown b/build/node_modules/jade/node_modules/mkdirp/README.markdown deleted file mode 100644 index b4dd75fd..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/README.markdown +++ /dev/null @@ -1,54 +0,0 @@ -mkdirp -====== - -Like `mkdir -p`, but in node.js! - -example -======= - -pow.js ------- - var mkdirp = require('mkdirp'); - - mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') - }); - -Output - pow! - -And now /tmp/foo/bar/baz exists, huzzah! - -methods -======= - -var mkdirp = require('mkdirp'); - -mkdirp(dir, mode, cb) ---------------------- - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -mkdirp.sync(dir, mode) ----------------------- - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -install -======= - -With [npm](http://npmjs.org) do: - - npm install mkdirp - -license -======= - -MIT/X11 diff --git a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js b/build/node_modules/jade/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig b/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig deleted file mode 100644 index 77414622..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.orig +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej b/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej deleted file mode 100644 index 81e7f431..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/examples/pow.js.rej +++ /dev/null @@ -1,19 +0,0 @@ ---- examples/pow.js -+++ examples/pow.js -@@ -1,6 +1,15 @@ --var mkdirp = require('mkdirp').mkdirp; -+var mkdirp = require('../').mkdirp, -+ mkdirpSync = require('../').mkdirpSync; - - mkdirp('/tmp/foo/bar/baz', 0755, function (err) { - if (err) console.error(err) - else console.log('pow!') - }); -+ -+try { -+ mkdirpSync('/tmp/bar/foo/baz', 0755); -+ console.log('double pow!'); -+} -+catch (ex) { -+ console.log(ex); -+} \ No newline at end of file diff --git a/build/node_modules/jade/node_modules/mkdirp/index.js b/build/node_modules/jade/node_modules/mkdirp/index.js deleted file mode 100644 index 25f43adf..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/index.js +++ /dev/null @@ -1,79 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, mode, f) { - if (typeof mode === 'function' || mode === undefined) { - f = mode; - mode = 0777 & (~process.umask()); - } - - var cb = f || function () {}; - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - fs.mkdir(p, mode, function (er) { - if (!er) return cb(); - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er) { - if (er) cb(er); - else mkdirP(p, mode, cb); - }); - break; - - case 'EEXIST': - fs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original EEXIST be the failure reason. - if (er2 || !stat.isDirectory()) cb(er) - else cb(); - }); - break; - - default: - cb(er); - break; - } - }); -} - -mkdirP.sync = function sync (p, mode) { - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - try { - fs.mkdirSync(p, mode) - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - var err1 = sync(path.dirname(p), mode) - if (err1) throw err1; - else return sync(p, mode); - break; - - case 'EEXIST' : - var stat; - try { - stat = fs.statSync(p); - } - catch (err1) { - throw err0 - } - if (!stat.isDirectory()) throw err0; - else return null; - break; - default : - throw err0 - break; - } - } - - return null; -}; diff --git a/build/node_modules/jade/node_modules/mkdirp/package.json b/build/node_modules/jade/node_modules/mkdirp/package.json deleted file mode 100644 index 641b94eb..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "mkdirp@0.3.0", - "_id": "mkdirp@0.3.0", - "_inBundle": false, - "_integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "_location": "/jade/mkdirp", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "mkdirp@0.3.0", - "name": "mkdirp", - "escapedName": "mkdirp", - "rawSpec": "0.3.0", - "saveSpec": null, - "fetchSpec": "0.3.0" - }, - "_requiredBy": [ - "/jade" - ], - "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "_shasum": "1bbf5ab1ba827af23575143490426455f481fe1e", - "_spec": "mkdirp@0.3.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/jade", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "bundleDependencies": false, - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "description": "Recursively mkdir, like `mkdir -p`", - "devDependencies": { - "tap": "0.0.x" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/substack/node-mkdirp#readme", - "keywords": [ - "mkdir", - "directory" - ], - "license": "MIT/X11", - "main": "./index", - "name": "mkdirp", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.3.0" -} diff --git a/build/node_modules/jade/node_modules/mkdirp/test/chmod.js b/build/node_modules/jade/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = 0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = 0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/clobber.js b/build/node_modules/jade/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, 0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/mkdirp.js b/build/node_modules/jade/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70c..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('woo', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/perm.js b/build/node_modules/jade/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abbd..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('async perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', 0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/perm_sync.js b/build/node_modules/jade/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f609..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); - -test('sync root perm', function (t) { - t.plan(1); - - var file = '/tmp'; - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/race.js b/build/node_modules/jade/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a04476..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('race', function (t) { - t.plan(4); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file, function () { - if (--res === 0) t.end(); - }); - - mk(file, function () { - if (--res === 0) t.end(); - }); - - function mk (file, cb) { - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - if (cb) cb(); - } - }) - }) - }); - } -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/rel.js b/build/node_modules/jade/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 79858243..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('rel', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - process.chdir(cwd); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/sync.js b/build/node_modules/jade/node_modules/mkdirp/test/sync.js deleted file mode 100644 index e0e389de..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,27 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - var err = mkdirp.sync(file, 0755); - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/umask.js b/build/node_modules/jade/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe2..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('implicit mode from umask', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/build/node_modules/jade/node_modules/mkdirp/test/umask_sync.js b/build/node_modules/jade/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 83cba560..00000000 --- a/build/node_modules/jade/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,27 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('umask sync modes', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - var err = mkdirp.sync(file); - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, (0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) -}); diff --git a/build/node_modules/jade/package.json b/build/node_modules/jade/package.json deleted file mode 100644 index f849bd37..00000000 --- a/build/node_modules/jade/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "jade@0.26.3", - "_id": "jade@0.26.3", - "_inBundle": false, - "_integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "_location": "/jade", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "jade@0.26.3", - "name": "jade", - "escapedName": "jade", - "rawSpec": "0.26.3", - "saveSpec": null, - "fetchSpec": "0.26.3" - }, - "_requiredBy": [ - "/mocha" - ], - "_resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "_shasum": "8f10d7977d8d79f2f6ff862a81b0513ccb25686c", - "_spec": "jade@0.26.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bin": { - "jade": "./bin/jade" - }, - "bugs": { - "url": "https://github.com/visionmedia/jade/issues" - }, - "bundleDependencies": false, - "component": { - "scripts": { - "jade": "runtime.js" - } - }, - "dependencies": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", - "description": "Jade template engine", - "devDependencies": { - "less": "*", - "markdown": "*", - "mocha": "*", - "should": "*", - "stylus": "*", - "uglify-js": "*", - "uubench": "*" - }, - "homepage": "https://github.com/visionmedia/jade#readme", - "main": "./index.js", - "man": [ - "./jade.1" - ], - "name": "jade", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/jade.git" - }, - "scripts": { - "prepublish": "npm prune" - }, - "version": "0.26.3" -} diff --git a/build/node_modules/jade/runtime.js b/build/node_modules/jade/runtime.js deleted file mode 100644 index 0f549077..00000000 --- a/build/node_modules/jade/runtime.js +++ /dev/null @@ -1,179 +0,0 @@ - -jade = (function(exports){ -/*! - * Jade - runtime - * Copyright(c) 2010 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Lame Array.isArray() polyfill for now. - */ - -if (!Array.isArray) { - Array.isArray = function(arr){ - return '[object Array]' == Object.prototype.toString.call(arr); - }; -} - -/** - * Lame Object.keys() polyfill for now. - */ - -if (!Object.keys) { - Object.keys = function(obj){ - var arr = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - arr.push(key); - } - } - return arr; - } -} - -/** - * Merge two attribute objects giving precedence - * to values in object `b`. Classes are special-cased - * allowing for arrays and merging/joining appropriately - * resulting in a string. - * - * @param {Object} a - * @param {Object} b - * @return {Object} a - * @api private - */ - -exports.merge = function merge(a, b) { - var ac = a['class']; - var bc = b['class']; - - if (ac || bc) { - ac = ac || []; - bc = bc || []; - if (!Array.isArray(ac)) ac = [ac]; - if (!Array.isArray(bc)) bc = [bc]; - ac = ac.filter(nulls); - bc = bc.filter(nulls); - a['class'] = ac.concat(bc).join(' '); - } - - for (var key in b) { - if (key != 'class') { - a[key] = b[key]; - } - } - - return a; -}; - -/** - * Filter null `val`s. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function nulls(val) { - return val != null; -} - -/** - * Render the given attributes object. - * - * @param {Object} obj - * @param {Object} escaped - * @return {String} - * @api private - */ - -exports.attrs = function attrs(obj, escaped){ - var buf = [] - , terse = obj.terse; - - delete obj.terse; - var keys = Object.keys(obj) - , len = keys.length; - - if (len) { - buf.push(''); - for (var i = 0; i < len; ++i) { - var key = keys[i] - , val = obj[key]; - - if ('boolean' == typeof val || null == val) { - if (val) { - terse - ? buf.push(key) - : buf.push(key + '="' + key + '"'); - } - } else if (0 == key.indexOf('data') && 'string' != typeof val) { - buf.push(key + "='" + JSON.stringify(val) + "'"); - } else if ('class' == key && Array.isArray(val)) { - buf.push(key + '="' + exports.escape(val.join(' ')) + '"'); - } else if (escaped && escaped[key]) { - buf.push(key + '="' + exports.escape(val) + '"'); - } else { - buf.push(key + '="' + val + '"'); - } - } - } - - return buf.join(' '); -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function escape(html){ - return String(html) - .replace(/&(?!(\w+|\#\d+);)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - -/** - * Re-throw the given `err` in context to the - * the jade in `filename` at the given `lineno`. - * - * @param {Error} err - * @param {String} filename - * @param {String} lineno - * @api private - */ - -exports.rethrow = function rethrow(err, filename, lineno){ - if (!filename) throw err; - - var context = 3 - , str = require('fs').readFileSync(filename, 'utf8') - , lines = str.split('\n') - , start = Math.max(lineno - context, 0) - , end = Math.min(lines.length, lineno + context); - - // Error context - var context = lines.slice(start, end).map(function(line, i){ - var curr = i + start + 1; - return (curr == lineno ? ' > ' : ' ') - + curr - + '| ' - + line; - }).join('\n'); - - // Alter exception message - err.path = filename; - err.message = (filename || 'Jade') + ':' + lineno - + '\n' + context + '\n\n' + err.message; - throw err; -}; - - return exports; - -})({}); diff --git a/build/node_modules/jade/runtime.min.js b/build/node_modules/jade/runtime.min.js deleted file mode 100644 index 1714efb0..00000000 --- a/build/node_modules/jade/runtime.min.js +++ /dev/null @@ -1 +0,0 @@ -jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a};function nulls(val){return val!=null}return exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err},exports}({}); \ No newline at end of file diff --git a/build/node_modules/jade/test.jade b/build/node_modules/jade/test.jade deleted file mode 100644 index b3a89889..00000000 --- a/build/node_modules/jade/test.jade +++ /dev/null @@ -1,7 +0,0 @@ -p. - This is a large - body of text for - this tag. - - Nothing too - exciting. \ No newline at end of file diff --git a/build/node_modules/jade/testing/head.jade b/build/node_modules/jade/testing/head.jade deleted file mode 100644 index 85154062..00000000 --- a/build/node_modules/jade/testing/head.jade +++ /dev/null @@ -1,5 +0,0 @@ -head - script(src='/jquery.js') - yield - if false - script(src='/jquery.ui.js') diff --git a/build/node_modules/jade/testing/index.jade b/build/node_modules/jade/testing/index.jade deleted file mode 100644 index 1032c5fa..00000000 --- a/build/node_modules/jade/testing/index.jade +++ /dev/null @@ -1,22 +0,0 @@ - -tag = 'p' -foo = 'bar' - -#{tag} value -#{tag}(foo='bar') value -#{foo ? 'a' : 'li'}(something) here - -mixin item(icon) - li - if attributes.href - a(attributes) - img.icon(src=icon) - block - else - span(attributes) - img.icon(src=icon) - block - -ul - +item('contact') Contact - +item(href='/contact') Contact diff --git a/build/node_modules/jade/testing/index.js b/build/node_modules/jade/testing/index.js deleted file mode 100644 index 226e8c01..00000000 --- a/build/node_modules/jade/testing/index.js +++ /dev/null @@ -1,11 +0,0 @@ - -/** - * Module dependencies. - */ - -var jade = require('../'); - -jade.renderFile('testing/index.jade', { pretty: true, debug: true, compileDebug: false }, function(err, str){ - if (err) throw err; - console.log(str); -}); \ No newline at end of file diff --git a/build/node_modules/jade/testing/layout.jade b/build/node_modules/jade/testing/layout.jade deleted file mode 100644 index 6923cf15..00000000 --- a/build/node_modules/jade/testing/layout.jade +++ /dev/null @@ -1,6 +0,0 @@ -html - include head - script(src='/caustic.js') - script(src='/app.js') - body - block content \ No newline at end of file diff --git a/build/node_modules/jade/testing/user.jade b/build/node_modules/jade/testing/user.jade deleted file mode 100644 index 3c636b7c..00000000 --- a/build/node_modules/jade/testing/user.jade +++ /dev/null @@ -1,7 +0,0 @@ -h1 Tobi -p Is a ferret - -ul - li: a foo - li: a bar - li: a baz \ No newline at end of file diff --git a/build/node_modules/jade/testing/user.js b/build/node_modules/jade/testing/user.js deleted file mode 100644 index 2ecc45ed..00000000 --- a/build/node_modules/jade/testing/user.js +++ /dev/null @@ -1,27 +0,0 @@ -function anonymous(locals, attrs, escape, rethrow) { -var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow; -var __jade = [{ lineno: 1, filename: "testing/user.jade" }]; -try { -var buf = []; -with (locals || {}) { -var interp; -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -__jade.unshift({ lineno: 1, filename: __jade[0].filename }); -buf.push('

Tobi'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

'); -__jade.shift(); -__jade.unshift({ lineno: 2, filename: __jade[0].filename }); -buf.push('

Is a ferret'); -__jade.unshift({ lineno: undefined, filename: __jade[0].filename }); -__jade.shift(); -buf.push('

'); -__jade.shift(); -__jade.shift(); -} -return buf.join(""); -} catch (err) { - rethrow(err, __jade[0].filename, __jade[0].lineno); -} -} \ No newline at end of file diff --git a/build/node_modules/js-yaml/CHANGELOG.md b/build/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 00000000..ff2375e0 --- /dev/null +++ b/build/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,616 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [4.1.0] - 2021-04-15 +### Added +- Types are now exported as `yaml.types.XXX`. +- Every type now has `options` property with original arguments kept as they were + (see `yaml.types.int.options` as an example). + +### Changed +- `Schema.extend()` now keeps old type order in case of conflicts + (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). + + +## [4.0.0] - 2021-01-03 +### Changed +- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. +- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are + moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. +- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` + instead which are all now safe by default. +- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use + `yaml.DEFAULT_SCHEMA` instead. +- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. +- `!!binary` now always mapped to `Uint8Array` on load. +- Reduced nesting of `/lib` folder. +- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, + `0o1234` is octal, `1:23` is parsed as string instead of base60). +- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. +- Line and column in exceptions are now formatted as `(X:Y)` instead of + `at line X, column Y` (also present in compact format), #332. +- Code snippet created in exceptions now contains multiple lines with line numbers. +- `dump()` now serializes `undefined` as `null` in collections and removes keys with + `undefined` in mappings, #571. +- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. +- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. +- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. + +### Added +- Added `.mjs` (es modules) support. +- Added `quotingType` and `forceQuotes` options for dumper to configure + string literal style, #290, #529. +- Added `styles: { '!!null': 'empty' }` option for dumper + (serializes `{ foo: null }` as "`foo: `"), #570. +- Added `replacer` option (similar to option in JSON.stringify), #339. +- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. + +### Fixed +- Astral characters are no longer encoded by `dump()`, #587. +- "duplicate mapping key" exception now points at the correct column, #452. +- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception + instead of producing null, #321. +- `__proto__` key no longer overrides object prototype, #164. +- Removed `bower.json`. +- Tags are now url-decoded in `load()` and url-encoded in `dump()` + (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). +- Anchors now work correctly with empty nodes, #301. +- Fix incorrect parsing of invalid block mapping syntax, #418. +- Throw an error if block sequence/mapping indent contains a tab, #80. + + +## [3.14.1] - 2020-12-07 +### Security +- Fix possible code execution in (already unsafe) `.load()` (in &anchor). + + +## [3.14.0] - 2020-05-22 +### Changed +- Support `safe/loadAll(input, options)` variant of call. +- CI: drop outdated nodejs versions. +- Dev deps bump. + +### Fixed +- Quote `=` in plain scalars #519. +- Check the node type for `!` tag in case user manually specifies it. +- Verify that there are no null-bytes in input. +- Fix wrong quote position when writing condensed flow, #526. + + +## [3.13.1] - 2019-04-05 +### Security +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +## [3.13.0] - 2019-03-20 +### Security +- Security fix: `safeLoad()` can hang when arrays with nested refs + used as key. Now throws exception for nested arrays. #475. + + +## [3.12.2] - 2019-02-26 +### Fixed +- Fix `noArrayIndent` option for root level, #468. + + +## [3.12.1] - 2019-01-05 +### Added +- Added `noArrayIndent` option, #432. + + +## [3.12.0] - 2018-06-02 +### Changed +- Support arrow functions without a block statement, #421. + + +## [3.11.0] - 2018-03-05 +### Added +- Add arrow functions suport for `!!js/function`. + +### Fixed +- Fix dump in bin/octal/hex formats for negative integers, #399. + + +## [3.10.0] - 2017-09-10 +### Fixed +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +## [3.9.1] - 2017-07-08 +### Fixed +- Ensure stack is present for custom errors in node 7.+, #351. + + +## [3.9.0] - 2017-07-08 +### Added +- Add `condenseFlow` option (to create pretty URL query params), #346. + +### Fixed +- Support array return from safeLoadAll/loadAll, #350. + + +## [3.8.4] - 2017-05-08 +### Fixed +- Dumper: prevent space after dash for arrays that wrap, #343. + + +## [3.8.3] - 2017-04-05 +### Fixed +- Should not allow numbers to begin and end with underscore, #335. + + +## [3.8.2] - 2017-03-02 +### Fixed +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +## [3.8.1] - 2017-02-07 +### Changed +- Maintenance: update browserified build. + + +## [3.8.0] - 2017-02-07 +### Fixed +- Fix reported position for `duplicated mapping key` errors. + Now points to block start instead of block end. + (#243, thanks to @shockey). + + +## [3.7.0] - 2016-11-12 +### Added +- Support polymorphism for tags (#300, thanks to @monken). + +### Fixed +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). + + +## [3.6.1] - 2016-05-11 +### Fixed +- Fix output cut on a pipe, #286. + + +## [3.6.0] - 2016-04-16 +### Fixed +- Dumper rewrite, fix multiple bugs with trailing `\n`. + Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +## [3.5.5] - 2016-03-17 +### Fixed +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +## [3.5.4] - 2016-03-09 +### Added +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +## [3.5.3] - 2016-02-11 +### Changed +- Maintenance release. + + +## [3.5.2] - 2016-01-11 +### Changed +- Maintenance: missed comma in bower config. + + +## [3.5.1] - 2016-01-11 +### Changed +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +## [3.5.0] - 2016-01-10 +### Fixed +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +## [3.4.6] - 2015-11-26 +### Changed +- Use standalone `inherit` to keep browserified files clear. + + +## [3.4.5] - 2015-11-23 +### Added +- Added `lineWidth` option to dumper. + + +## [3.4.4] - 2015-11-21 +### Fixed +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +## [3.4.3] - 2015-10-10 +### Changed +- Maintenance release - deps bump (esprima, argparse). + + +## [3.4.2] - 2015-09-09 +### Fixed +- Fixed serialization of duplicated entries in sequences, #205. + Thanks to @vogelsgesang. + + +## [3.4.1] - 2015-09-05 +### Fixed +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +## [3.4.0] - 2015-08-23 +### Changed +- Don't throw on warnings anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Reworked internals of error class. + +### Fixed +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Fixed heading line breaks in some scalars (regression). + + +## [3.3.1] - 2015-05-13 +### Added +- Added `.sortKeys` dumper option, thanks to @rjmunro. + +### Fixed +- Fixed astral characters support, #191. + + +## [3.3.0] - 2015-04-26 +### Changed +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +## [3.2.7] - 2015-02-19 +### Changed +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +## [3.2.6] - 2015-02-07 +### Fixed +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +## [3.2.5] - 2014-12-28 +### Fixed +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +## [3.2.4] - 2014-12-19 +### Fixed +- Fixed resolving of !!null tag on an empty node. + + +## [3.2.3] - 2014-11-08 +### Fixed +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +## [3.2.2] - 2014-09-07 +### Fixed +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +## [3.2.1] - 2014-08-24 +### Fixed +- Nothig new. Just fix npm publish error. + + +## [3.2.0] - 2014-08-24 +### Added +- Added input piping support to CLI. + +### Fixed +- Fixed typo, that could cause hand on initial indent (#139). + + +## [3.1.0] - 2014-07-07 +### Changed +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +## [3.0.2] - 2014-02-27 +### Fixed +- Fixed bug: "constructor" string parsed as `null`. + + +## [3.0.1] - 2013-12-22 +### Fixed +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +## [3.0.0] - 2013-12-16 +### Changed +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +## [2.1.3] - 2013-10-16 +### Fixed +- Fix wrong loading of empty block scalars. + + +## [2.1.2] - 2013-10-07 +### Fixed +- Fix unwanted line breaks in folded scalars. + + +## [2.1.1] - 2013-10-02 +### Fixed +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +## [2.1.0] - 2013-06-05 +### Added +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Add `skipInvalid` dumper option. + +### Changed +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Use `safeLoad` for `require` extension. + +### Fixed +- Bug fix: export `NIL` constant from the public interface. + + +## [2.0.5] - 2013-04-26 +### Security +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +## [2.0.4] - 2013-04-08 +### Changed +- Updated .npmignore to reduce package size + + +## [2.0.3] - 2013-02-26 +### Fixed +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +## [2.0.2] - 2013-02-15 +### Fixed +- Fixed input validation: tabs are printable characters. + + +## [2.0.1] - 2013-02-09 +### Fixed +- Fixed error, when options not passed to function cass + + +## [2.0.0] - 2013-02-09 +### Changed +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +## [1.0.3] - 2012-11-05 +### Fixed +- Fixed utf-8 files loading. + + +## [1.0.2] - 2012-08-02 +### Fixed +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +## [1.0.1] - 2012-07-07 +### Fixed +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +## [1.0.0] - 2012-07-01 +### Changed +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +## [0.3.7] - 2012-02-28 +### Fixed +- Fix export of `addConstructor()`. Closes #39. + + +## [0.3.6] - 2012-02-22 +### Changed +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch + +### Fixed +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +## [0.3.5] - 2012-01-10 +### Fixed +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +## [0.3.4] - 2011-12-24 +### Fixed +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +## [0.3.3] - 2011-12-20 +### Added +- adds `compact` stringification of Errors. + +### Changed +- jsyaml executable moved to separate module. + + +## [0.3.2] - 2011-12-16 +### Added +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + +### Fixed +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. + + +## [0.3.1] - 2011-11-18 +### Added +- Added AMD support for browserified version. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. + +### Changed +- Wrapped browserified js-yaml into closure. + +### Fixed +- Fixed the resolvement of non-specific tags. Closes #17. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +## [0.3.0] - 2011-11-09 +### Added +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. + +### Fixed +- Removed JS.Class dependency. Closes #3. +- Fixed timestamp bug when fraction was given. + + +## [0.2.2] - 2011-11-06 +### Fixed +- Fixed crash on docs without ---. Closes #8. +- Fixed multiline string parse +- Fixed tests/comments for using array as key + + +## [0.2.1] - 2011-11-02 +### Fixed +- Fixed short file read (<4k). Closes #9. + + +## [0.2.0] - 2011-11-02 +### Changed +- First public release + + +[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 +[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 +[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 +[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 +[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 +[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 +[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 +[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 +[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 +[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 +[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 +[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 +[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 +[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 +[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 +[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 +[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 +[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 +[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 +[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 +[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 +[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 +[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 +[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 +[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 +[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 +[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 +[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 +[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 +[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 +[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 +[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 +[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 +[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 +[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 +[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 +[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 +[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 +[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 +[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 +[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 +[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 +[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 +[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 +[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 +[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 +[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 +[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 +[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 +[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 +[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 +[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 +[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/build/node_modules/js-yaml/LICENSE b/build/node_modules/js-yaml/LICENSE new file mode 100644 index 00000000..09d3a29e --- /dev/null +++ b/build/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/js-yaml/README.md b/build/node_modules/js-yaml/README.md new file mode 100644 index 00000000..3cbc4bd2 --- /dev/null +++ b/build/node_modules/js-yaml/README.md @@ -0,0 +1,246 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) +for more info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### load (string [ , options ]) + +Parses `string` as single YAML document. Returns either a +plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### loadAll (string [, iterator] [, options ]) + +Same as `load()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.loadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### dump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. +- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. +- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. +- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "0o1", "0o52", "0o16172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +dump(object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScript types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for +extra types. + + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/build/node_modules/js-yaml/bin/js-yaml.js b/build/node_modules/js-yaml/bin/js-yaml.js new file mode 100755 index 00000000..a182f1af --- /dev/null +++ b/build/node_modules/js-yaml/bin/js-yaml.js @@ -0,0 +1,126 @@ +#!/usr/bin/env node + + +'use strict'; + +/*eslint-disable no-console*/ + + +var fs = require('fs'); +var argparse = require('argparse'); +var yaml = require('..'); + + +//////////////////////////////////////////////////////////////////////////////// + + +var cli = new argparse.ArgumentParser({ + prog: 'js-yaml', + add_help: true +}); + +cli.add_argument('-v', '--version', { + action: 'version', + version: require('../package.json').version +}); + +cli.add_argument('-c', '--compact', { + help: 'Display errors in compact mode', + action: 'store_true' +}); + +// deprecated (not needed after we removed output colors) +// option suppressed, but not completely removed for compatibility +cli.add_argument('-j', '--to-json', { + help: argparse.SUPPRESS, + dest: 'json', + action: 'store_true' +}); + +cli.add_argument('-t', '--trace', { + help: 'Show stack trace on error', + action: 'store_true' +}); + +cli.add_argument('file', { + help: 'File to read, utf-8 encoded without BOM', + nargs: '?', + default: '-' +}); + + +//////////////////////////////////////////////////////////////////////////////// + + +var options = cli.parse_args(); + + +//////////////////////////////////////////////////////////////////////////////// + +function readFile(filename, encoding, callback) { + if (options.file === '-') { + // read from stdin + + var chunks = []; + + process.stdin.on('data', function (chunk) { + chunks.push(chunk); + }); + + process.stdin.on('end', function () { + return callback(null, Buffer.concat(chunks).toString(encoding)); + }); + } else { + fs.readFile(filename, encoding, callback); + } +} + +readFile(options.file, 'utf8', function (error, input) { + var output, isYaml; + + if (error) { + if (error.code === 'ENOENT') { + console.error('File not found: ' + options.file); + process.exit(2); + } + + console.error( + options.trace && error.stack || + error.message || + String(error)); + + process.exit(1); + } + + try { + output = JSON.parse(input); + isYaml = false; + } catch (err) { + if (err instanceof SyntaxError) { + try { + output = []; + yaml.loadAll(input, function (doc) { output.push(doc); }, {}); + isYaml = true; + + if (output.length === 0) output = null; + else if (output.length === 1) output = output[0]; + + } catch (e) { + if (options.trace && err.stack) console.error(e.stack); + else console.error(e.toString(options.compact)); + + process.exit(1); + } + } else { + console.error( + options.trace && err.stack || + err.message || + String(err)); + + process.exit(1); + } + } + + if (isYaml) console.log(JSON.stringify(output, null, ' ')); + else console.log(yaml.dump(output)); +}); diff --git a/build/node_modules/js-yaml/dist/js-yaml.js b/build/node_modules/js-yaml/dist/js-yaml.js new file mode 100644 index 00000000..4cc0ddf6 --- /dev/null +++ b/build/node_modules/js-yaml/dist/js-yaml.js @@ -0,0 +1,3874 @@ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jsyaml = {})); +}(this, (function (exports) { 'use strict'; + + function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); + } + + + function isObject(subject) { + return (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 = { + 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 + + + function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; + + if (!exception.mark) return message; + + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } + + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } + + return message + ' ' + where; + } + + + function YAMLException$1(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } + } + + + // Inherit from Error + YAMLException$1.prototype = Object.create(Error.prototype); + YAMLException$1.prototype.constructor = YAMLException$1; + + + YAMLException$1.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); + }; + + + var exception = YAMLException$1; + + // get snippet for a single line, respecting maxLength + function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; + } + + + function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; + } + + + function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); + } + + + var snippet = makeSnippet; + + var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + '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$1(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.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.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } + } + + var type = Type$1; + + /*eslint-disable max-len*/ + + + + + + function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; + } + + + function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; + } + + + function Schema$1(definition) { + return this.extend(definition); + } + + + Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema$1.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; + }; + + + var schema = Schema$1; + + var str = new type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } + }); + + var seq = new type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } + }); + + var map = new type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } + }); + + var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] + }); + + 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('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' + }); + + 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('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' + }); + + 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 + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + 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 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; 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) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; + } + + function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + 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.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); + } + + function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); + } + + var int = new type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } + }); + + var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?: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 `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; + } + + function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + 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; + } + 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.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return 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.isNegativeZero(object)); + } + + var float = new type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' + }); + + var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] + }); + + var core = json; + + var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + + var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + + function 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 + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (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('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp + }); + + function resolveYamlMerge(data) { + return data === '<<' || data === null; + } + + var merge = new type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge + }); + + /*eslint-disable no-bitwise*/ + + + + + + // [ 64, 65, 66 ] -> [ padding, CR, LF ] + var 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. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; + } + + function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (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 + + tailbits = (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); + } + + return new Uint8Array(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. + + for (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 + + tail = 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(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; + } + + var binary = new type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary + }); + + var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; + var _toString$2 = 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$2.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty$3.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('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap + }); + + 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('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs + }); + + 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('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet + }); + + var _default = core.extend({ + implicit: [ + timestamp, + merge + ], + explicit: [ + binary, + omap, + pairs, + set + ] + }); + + /*eslint-disable max-len,no-use-before-define*/ + + + + + + + + var _hasOwnProperty$1 = 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 _class(obj) { return Object.prototype.toString.call(obj); } + + 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) { + /* eslint-disable indent */ + 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 + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); + } + + var simpleEscapeCheck = new Array(256); // integer, for fast access + var simpleEscapeMap = new Array(256); + for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); + } + + + function State$1(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + 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; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + + } + + + function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = snippet(mark); + + return new exception(message, mark); + } + + 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$1.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'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + 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$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } + } + + function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + 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$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _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; + state.firstTabInLine = -1; + } + + function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + 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 + // in parent on each call, for efficiency. No needs to test here again. + if ((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? + } 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, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + 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'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + 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; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + 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, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } 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. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (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. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.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; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + 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, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + 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, _keyLine, _keyLineStart, _keyPos); + 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`. + } + + } 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`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + 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, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + 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 mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (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); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.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 (!_hasOwnProperty$1.call(state.anchorMap, 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 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. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + 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.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + 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 = Object.create(null); + state.anchorMap = Object.create(null); + + 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$1.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 + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State$1(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.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) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var 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 exception('expected a single document in the stream, but found more'); + } + + + var loadAll_1 = loadAll$1; + var load_1 = load$1; + + var loader = { + loadAll: loadAll_1, + load: load_1 + }; + + /*eslint-disable no-use-before-define*/ + + + + + + var _toString = Object.prototype.toString; + var _hasOwnProperty = Object.prototype.hasOwnProperty; + + var CHAR_BOM = 0xFEFF; + var CHAR_TAB = 0x09; /* Tab */ + var CHAR_LINE_FEED = 0x0A; /* LF */ + var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ + 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_EQUALS = 0x3D; /* = */ + 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' + ]; + + var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + + 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.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 exception('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; + } + + + var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + + function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.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.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + 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. + function indentString(string, spaces) { + var ind = common.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.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 + function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; + } + + // Returns true if the character can be printed without escaping. + // From YAML 1.2: "any allowed characters known to be non-printable + // should also be escaped. [However,] This isn’t mandatory" + // Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. + function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); + } + + // [34] ns-char ::= nb-char - s-white + // [27] nb-char ::= c-printable - b-char - c-byte-order-mark + // [26] b-char ::= b-line-feed | b-carriage-return + // Including s-white (for some reason, examples doesn't match specs in this aspect) + // ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark + function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; + } + + // [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out + // c = flow-in ⇒ ns-plain-safe-in + // c = block-key ⇒ ns-plain-safe-out + // c = flow-key ⇒ ns-plain-safe-in + // [128] ns-plain-safe-out ::= ns-char + // [129] ns-plain-safe-in ::= ns-char - c-flow-indicator + // [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) + // | ( /* An ns-char preceding */ “#” ) + // | ( “:” /* Followed by an ns-plain-safe(c) */ ) + function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' + } + + // Simplified test for values allowed as the first character in plain style. + function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && 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 + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; + } + + // Simplified test for values allowed as the last character in plain style. + function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; + } + + // Same as 'string'.codePointAt(pos), but works in older browsers. + function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; + } + + // Determines whether block indentation indicator is required. + function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); + } + + var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + + // Determines which scalar styles are possible and returns the preferred style. + // lineWidth = -1 => no limit. + // Pre-conditions: str.length > 0. + // Post-conditions: + // STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. + // STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). + // STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). + function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + + // Note: line breaking/folding is implemented for only the folded style. + // NB. We drop the last trailing newline (if any) of a returned block scalar + // since the dumper adds its own newline. This always works: + // • No ending newline => unaffected; already using strip "-" chomping. + // • Ending newline => removed then restored. + // Importantly, this keeps the "+" chomp indicator from gaining an extra line. + function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var 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. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + 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) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); + } + + // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. + function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var 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.) + function 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. + // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. + function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var 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. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var 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. + // Picks the longest line under the limit each time, + // otherwise settles for the shortest line over the limit. + // NB. More-indented lines *cannot* be folded, as that would add an extra \n. + function 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. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (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 + } + + // Escapes a double-quoted string. + function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; + } + + function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; + } + + function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _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. + } + + 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 (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _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 + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + 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. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. + } + + 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 === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; + } + + // Serializes `object` and writes it to global `result`. + // Returns true on success, or false on invalid object. + // + function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + 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)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + 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, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + 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 === '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(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; + } + + var dump_1 = dump$1; + + var dumper = { + dump: dump_1 + }; + + function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; + } + + + var Type = type; + var Schema = schema; + var FAILSAFE_SCHEMA = failsafe; + var JSON_SCHEMA = json; + var CORE_SCHEMA = core; + var DEFAULT_SCHEMA = _default; + var load = loader.load; + var loadAll = loader.loadAll; + var dump = dumper.dump; + var YAMLException = exception; + + // Re-export all types in case user wants to create custom schema + var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str + }; + + // Removed functions from JS-YAML 3.0.x + var safeLoad = renamed('safeLoad', 'load'); + var safeLoadAll = renamed('safeLoadAll', 'loadAll'); + var safeDump = renamed('safeDump', 'dump'); + + var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump + }; + + exports.CORE_SCHEMA = CORE_SCHEMA; + exports.DEFAULT_SCHEMA = DEFAULT_SCHEMA; + exports.FAILSAFE_SCHEMA = FAILSAFE_SCHEMA; + exports.JSON_SCHEMA = JSON_SCHEMA; + exports.Schema = Schema; + exports.Type = Type; + exports.YAMLException = YAMLException; + exports.default = jsYaml; + exports.dump = dump; + exports.load = load; + exports.loadAll = loadAll; + exports.safeDump = safeDump; + exports.safeLoad = safeLoad; + exports.safeLoadAll = safeLoadAll; + exports.types = types; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/build/node_modules/js-yaml/dist/js-yaml.min.js b/build/node_modules/js-yaml/dist/js-yaml.min.js new file mode 100644 index 00000000..bdd8eef5 --- /dev/null +++ b/build/node_modules/js-yaml/dist/js-yaml.min.js @@ -0,0 +1,2 @@ +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})}(this,(function(e){"use strict";function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var I=/^[-+]?[0-9]+e/;var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),O=b.extend({implicit:[A,v,C,S]}),j=O,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var F=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=T.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var E=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var L=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=M;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=M,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=M;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString;var U=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ie=new Array(256),re=new Array(256),oe=0;oe<256;oe++)ie[oe]=te(oe)?1:0,re[oe]=te(oe);function ae(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function le(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function ce(e,t){throw le(e,t)}function se(e,t){e.onWarning&&e.onWarning.call(null,le(e,t))}var ue={YAML:function(e,t,n){var i,r,o;null!==e.version&&ce(e,"duplication of %YAML directive"),1!==n.length&&ce(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ce(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&se(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ce(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],G.test(i)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&ce(e,'there is a previously declared suffix for "'+i+'" tag handle'),V.test(r)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){ce(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function pe(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function be(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ce(e,"tab characters must not be used in indentation")),45===i)&&z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,we(e,t,3,!1,!0),a.push(e.result),ge(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),we(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(de(e,f,d,h,g,m,a,l,c),h=g=m=null),ge(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)ce(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?ce(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(Q(a)){do{a=e.input.charCodeAt(++e.position)}while(Q(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!J(a)&&0!==a)}for(;0!==a;){for(he(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Re(e){return/^\n* /.test(e)}function Be(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=De(s=Ye(e,0))&&s!==Oe&&!_e(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!_e(e)&&58!==e}(Ye(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!De(u=Ye(e,c)))return 5;m=m&&qe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Ye(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!De(u))return 5;m=m&&qe(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&Re(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function Ke(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Te.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(Be(t,c,e.indent,l,(function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+We(Me(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,He(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+He(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Ye(e,r),!(t=je[i])&&De(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Fe(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Re(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function We(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function He(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ve(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ge(e,n,!1)||Ge(e,n,!0);var c,s=Ie.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Le(e,t)),Ve(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ve(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Ze(e,t){var n,i,r=[],o=[];for(Je(e,r,o),n=0,i=o.length;n maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} + + +function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; +} + + +function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); +} + + +var snippet = makeSnippet; + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + '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$1(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.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.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +var type = Type$1; + +/*eslint-disable max-len*/ + + + + + +function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema$1(definition) { + return this.extend(definition); +} + + +Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema$1.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; +}; + + +var schema = Schema$1; + +var str = new type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); + +var seq = new type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); + +var map = new type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); + +var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] +}); + +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('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); + +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('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + +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 + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + 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 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; 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) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + 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.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +var int = new type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?: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 `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + 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; + } + 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.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return 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.isNegativeZero(object)); +} + +var float = new type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + +var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] +}); + +var core = json; + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function 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 + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (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('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +var merge = new type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +/*eslint-disable no-bitwise*/ + + + + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var 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. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (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 + + tailbits = (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); + } + + return new Uint8Array(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. + + for (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 + + tail = 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(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +} + +var binary = new type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = 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$2.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty$3.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('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + +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('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + +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('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + +var _default = core.extend({ + implicit: [ + timestamp, + merge + ], + explicit: [ + binary, + omap, + pairs, + set + ] +}); + +/*eslint-disable max-len,no-use-before-define*/ + + + + + + + +var _hasOwnProperty$1 = 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 _class(obj) { return Object.prototype.toString.call(obj); } + +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) { + /* eslint-disable indent */ + 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 + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State$1(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + 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; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = snippet(mark); + + return new exception(message, mark); +} + +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$1.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'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + 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$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + 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$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _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; + state.firstTabInLine = -1; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + 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 + // in parent on each call, for efficiency. No needs to test here again. + if ((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? + } 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, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + 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'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + 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; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + 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, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } 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. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (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. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.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; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + 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, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + 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, _keyLine, _keyLineStart, _keyPos); + 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`. + } + + } 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`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + 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, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + 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 mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (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); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.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 (!_hasOwnProperty$1.call(state.anchorMap, 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 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. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + 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.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + 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 = Object.create(null); + state.anchorMap = Object.create(null); + + 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$1.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 + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State$1(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.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) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var 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 exception('expected a single document in the stream, but found more'); +} + + +var loadAll_1 = loadAll$1; +var load_1 = load$1; + +var loader = { + loadAll: loadAll_1, + load: load_1 +}; + +/*eslint-disable no-use-before-define*/ + + + + + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +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_EQUALS = 0x3D; /* = */ +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' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +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.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 exception('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + + +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + +function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.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.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + 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. +function indentString(string, spaces) { + var ind = common.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.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 +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && 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 + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} + +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var 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. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + 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) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var 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.) +function 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. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var 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. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var 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. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function 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. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (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 +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _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. +} + +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 (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _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 + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + 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. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +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 === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + 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)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + 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, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + 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 === '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(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; +} + +var dump_1 = dump$1; + +var dumper = { + dump: dump_1 +}; + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +var Type = type; +var Schema = schema; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; + +// Re-export all types in case user wants to create custom schema +var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str +}; + +// Removed functions from JS-YAML 3.0.x +var safeLoad = renamed('safeLoad', 'load'); +var safeLoadAll = renamed('safeLoadAll', 'loadAll'); +var safeDump = renamed('safeDump', 'dump'); + +var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump +}; + +export default jsYaml; +export { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types }; diff --git a/build/node_modules/js-yaml/index.js b/build/node_modules/js-yaml/index.js new file mode 100644 index 00000000..bcb7eba7 --- /dev/null +++ b/build/node_modules/js-yaml/index.js @@ -0,0 +1,47 @@ +'use strict'; + + +var loader = require('./lib/loader'); +var dumper = require('./lib/dumper'); + + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +module.exports.Type = require('./lib/type'); +module.exports.Schema = require('./lib/schema'); +module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./lib/schema/json'); +module.exports.CORE_SCHEMA = require('./lib/schema/core'); +module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.dump = dumper.dump; +module.exports.YAMLException = require('./lib/exception'); + +// Re-export all types in case user wants to create custom schema +module.exports.types = { + binary: require('./lib/type/binary'), + float: require('./lib/type/float'), + map: require('./lib/type/map'), + null: require('./lib/type/null'), + pairs: require('./lib/type/pairs'), + set: require('./lib/type/set'), + timestamp: require('./lib/type/timestamp'), + bool: require('./lib/type/bool'), + int: require('./lib/type/int'), + merge: require('./lib/type/merge'), + omap: require('./lib/type/omap'), + seq: require('./lib/type/seq'), + str: require('./lib/type/str') +}; + +// Removed functions from JS-YAML 3.0.x +module.exports.safeLoad = renamed('safeLoad', 'load'); +module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); +module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/build/node_modules/js-yaml/lib/common.js b/build/node_modules/js-yaml/lib/common.js new file mode 100644 index 00000000..25ef7d8e --- /dev/null +++ b/build/node_modules/js-yaml/lib/common.js @@ -0,0 +1,59 @@ +'use strict'; + + +function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { + return (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); +} + + +module.exports.isNothing = isNothing; +module.exports.isObject = isObject; +module.exports.toArray = toArray; +module.exports.repeat = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend = extend; diff --git a/build/node_modules/js-yaml/lib/dumper.js b/build/node_modules/js-yaml/lib/dumper.js new file mode 100644 index 00000000..f357a6ae --- /dev/null +++ b/build/node_modules/js-yaml/lib/dumper.js @@ -0,0 +1,965 @@ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var DEFAULT_SCHEMA = require('./schema/default'); + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +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_EQUALS = 0x3D; /* = */ +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' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +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.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('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + + +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + +function State(options) { + this.schema = options['schema'] || DEFAULT_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.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.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + 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. +function indentString(string, spaces) { + var ind = common.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.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 +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && 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 + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} + +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var 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. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + 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('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var 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.) +function 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. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var 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. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var 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. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function 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. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (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 +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _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. +} + +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 (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _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 + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + 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. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +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 === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + 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)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + 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, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + 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 === '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(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; +} + +module.exports.dump = dump; diff --git a/build/node_modules/js-yaml/lib/exception.js b/build/node_modules/js-yaml/lib/exception.js new file mode 100644 index 00000000..7f62daae --- /dev/null +++ b/build/node_modules/js-yaml/lib/exception.js @@ -0,0 +1,55 @@ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + + +function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; + + if (!exception.mark) return message; + + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } + + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } + + return message + ' ' + where; +} + + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); +}; + + +module.exports = YAMLException; diff --git a/build/node_modules/js-yaml/lib/loader.js b/build/node_modules/js-yaml/lib/loader.js new file mode 100644 index 00000000..39f13f56 --- /dev/null +++ b/build/node_modules/js-yaml/lib/loader.js @@ -0,0 +1,1727 @@ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var makeSnippet = require('./snippet'); +var DEFAULT_SCHEMA = require('./schema/default'); + + +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 _class(obj) { return Object.prototype.toString.call(obj); } + +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) { + /* eslint-disable indent */ + 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 + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var 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_SCHEMA; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + 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; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = makeSnippet(mark); + + return new YAMLException(message, mark); +} + +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'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + 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, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + 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.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _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; + state.firstTabInLine = -1; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + 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 + // in parent on each call, for efficiency. No needs to test here again. + if ((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? + } 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, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + 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'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + 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; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + 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, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } 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. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (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. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.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; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + 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, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + 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, _keyLine, _keyLineStart, _keyPos); + 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`. + } + + } 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`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + 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, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + 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 mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (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); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + 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 (!_hasOwnProperty.call(state.anchorMap, 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 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. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + 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.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + 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 = Object.create(null); + state.anchorMap = Object.create(null); + + 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 + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.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(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(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('expected a single document in the stream, but found more'); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; diff --git a/build/node_modules/js-yaml/lib/schema.js b/build/node_modules/js-yaml/lib/schema.js new file mode 100644 index 00000000..65b41f40 --- /dev/null +++ b/build/node_modules/js-yaml/lib/schema.js @@ -0,0 +1,121 @@ +'use strict'; + +/*eslint-disable max-len*/ + +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema(definition) { + return this.extend(definition); +} + + +Schema.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof Type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type) { + if (!(type instanceof Type)) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type.loadKind && type.loadKind !== 'scalar') { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type.multi) { + throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type) { + if (!(type instanceof Type)) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; +}; + + +module.exports = Schema; diff --git a/build/node_modules/js-yaml/lib/schema/core.js b/build/node_modules/js-yaml/lib/schema/core.js new file mode 100644 index 00000000..608b26de --- /dev/null +++ b/build/node_modules/js-yaml/lib/schema/core.js @@ -0,0 +1,11 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +module.exports = require('./json'); diff --git a/build/node_modules/js-yaml/lib/schema/default.js b/build/node_modules/js-yaml/lib/schema/default.js new file mode 100644 index 00000000..3af0520d --- /dev/null +++ b/build/node_modules/js-yaml/lib/schema/default.js @@ -0,0 +1,22 @@ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +module.exports = require('./core').extend({ + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); diff --git a/build/node_modules/js-yaml/lib/schema/failsafe.js b/build/node_modules/js-yaml/lib/schema/failsafe.js new file mode 100644 index 00000000..b7a33eb7 --- /dev/null +++ b/build/node_modules/js-yaml/lib/schema/failsafe.js @@ -0,0 +1,17 @@ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); diff --git a/build/node_modules/js-yaml/lib/schema/json.js b/build/node_modules/js-yaml/lib/schema/json.js new file mode 100644 index 00000000..b73df78e --- /dev/null +++ b/build/node_modules/js-yaml/lib/schema/json.js @@ -0,0 +1,19 @@ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +module.exports = require('./failsafe').extend({ + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); diff --git a/build/node_modules/js-yaml/lib/snippet.js b/build/node_modules/js-yaml/lib/snippet.js new file mode 100644 index 00000000..00e2133c --- /dev/null +++ b/build/node_modules/js-yaml/lib/snippet.js @@ -0,0 +1,101 @@ +'use strict'; + + +var common = require('./common'); + + +// get snippet for a single line, respecting maxLength +function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} + + +function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; +} + + +function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); +} + + +module.exports = makeSnippet; diff --git a/build/node_modules/js-yaml/lib/type.js b/build/node_modules/js-yaml/lib/type.js new file mode 100644 index 00000000..5e57877f --- /dev/null +++ b/build/node_modules/js-yaml/lib/type.js @@ -0,0 +1,66 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + '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(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.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.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; diff --git a/build/node_modules/js-yaml/lib/type/binary.js b/build/node_modules/js-yaml/lib/type/binary.js new file mode 100644 index 00000000..e1523513 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/binary.js @@ -0,0 +1,125 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + + +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var 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. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (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 + + tailbits = (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); + } + + return new Uint8Array(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. + + for (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 + + tail = 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(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); diff --git a/build/node_modules/js-yaml/lib/type/bool.js b/build/node_modules/js-yaml/lib/type/bool.js new file mode 100644 index 00000000..cb774593 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/bool.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../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]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/build/node_modules/js-yaml/lib/type/float.js b/build/node_modules/js-yaml/lib/type/float.js new file mode 100644 index 00000000..74d77ec2 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/float.js @@ -0,0 +1,97 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?: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 `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + 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; + } + 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.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return 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.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); diff --git a/build/node_modules/js-yaml/lib/type/int.js b/build/node_modules/js-yaml/lib/type/int.js new file mode 100644 index 00000000..3fe3a443 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/int.js @@ -0,0 +1,156 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../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 + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + 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 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; 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) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + 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.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); diff --git a/build/node_modules/js-yaml/lib/type/map.js b/build/node_modules/js-yaml/lib/type/map.js new file mode 100644 index 00000000..f327beeb --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/map.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); diff --git a/build/node_modules/js-yaml/lib/type/merge.js b/build/node_modules/js-yaml/lib/type/merge.js new file mode 100644 index 00000000..ae08a864 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/merge.js @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); diff --git a/build/node_modules/js-yaml/lib/type/null.js b/build/node_modules/js-yaml/lib/type/null.js new file mode 100644 index 00000000..315ca4e2 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/null.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../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; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); diff --git a/build/node_modules/js-yaml/lib/type/omap.js b/build/node_modules/js-yaml/lib/type/omap.js new file mode 100644 index 00000000..b2b5323b --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/omap.js @@ -0,0 +1,44 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = 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.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 : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); diff --git a/build/node_modules/js-yaml/lib/type/pairs.js b/build/node_modules/js-yaml/lib/type/pairs.js new file mode 100644 index 00000000..74b52403 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/pairs.js @@ -0,0 +1,53 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = 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.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; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); diff --git a/build/node_modules/js-yaml/lib/type/seq.js b/build/node_modules/js-yaml/lib/type/seq.js new file mode 100644 index 00000000..be8f77f2 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/seq.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); diff --git a/build/node_modules/js-yaml/lib/type/set.js b/build/node_modules/js-yaml/lib/type/set.js new file mode 100644 index 00000000..f885a329 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/set.js @@ -0,0 +1,29 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); diff --git a/build/node_modules/js-yaml/lib/type/str.js b/build/node_modules/js-yaml/lib/type/str.js new file mode 100644 index 00000000..27acc106 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/str.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); diff --git a/build/node_modules/js-yaml/lib/type/timestamp.js b/build/node_modules/js-yaml/lib/type/timestamp.js new file mode 100644 index 00000000..8fa9c586 --- /dev/null +++ b/build/node_modules/js-yaml/lib/type/timestamp.js @@ -0,0 +1,88 @@ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function 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 + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (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(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); diff --git a/build/node_modules/js-yaml/package.json b/build/node_modules/js-yaml/package.json new file mode 100644 index 00000000..3079a29a --- /dev/null +++ b/build/node_modules/js-yaml/package.json @@ -0,0 +1,113 @@ +{ + "_from": "js-yaml@4.1.0", + "_id": "js-yaml@4.1.0", + "_inBundle": false, + "_integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "_location": "/js-yaml", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "js-yaml@4.1.0", + "name": "js-yaml", + "escapedName": "js-yaml", + "rawSpec": "4.1.0", + "saveSpec": null, + "fetchSpec": "4.1.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/js-yaml/-/js-yaml-4.1.0.tgz", + "_shasum": "c1fb65f8f5017901cdd2c951864ba18458a10602", + "_spec": "js-yaml@4.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Vladimir Zapparov", + "email": "dervus.grim@gmail.com" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "bugs": { + "url": "https://github.com/nodeca/js-yaml/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Aleksey V Zapparov", + "email": "ixti@member.fsf.org", + "url": "http://www.ixti.net/" + }, + { + "name": "Vitaly Puzrin", + "email": "vitaly@rcdesign.ru", + "url": "https://github.com/puzrin" + }, + { + "name": "Martin Grenfell", + "email": "martin.grenfell@gmail.com", + "url": "http://got-ravings.blogspot.com" + } + ], + "dependencies": { + "argparse": "^2.0.1" + }, + "deprecated": false, + "description": "YAML 1.2 parser and serializer", + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^2.8.0", + "gh-pages": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "rollup": "^2.34.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-terser": "^7.0.2", + "shelljs": "^0.8.4" + }, + "exports": { + ".": { + "import": "./dist/js-yaml.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "homepage": "https://github.com/nodeca/js-yaml#readme", + "jsdelivr": "dist/js-yaml.min.js", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "license": "MIT", + "module": "./dist/js-yaml.mjs", + "name": "js-yaml", + "repository": { + "type": "git", + "url": "git+https://github.com/nodeca/js-yaml.git" + }, + "scripts": { + "browserify": "rollup -c support/rollup.config.js", + "coverage": "npm run lint && nyc mocha && nyc report --reporter html", + "demo": "npm run lint && node support/build_demo.js", + "gh-demo": "npm run demo && gh-pages -d demo -f", + "lint": "eslint .", + "prepublishOnly": "npm run gh-demo", + "test": "npm run lint && mocha" + }, + "unpkg": "dist/js-yaml.min.js", + "version": "4.1.0" +} diff --git a/build/node_modules/just-extend/LICENSE b/build/node_modules/just-extend/LICENSE new file mode 100644 index 00000000..5d2c6e57 --- /dev/null +++ b/build/node_modules/just-extend/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 angus croll + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/just-extend/README.md b/build/node_modules/just-extend/README.md new file mode 100644 index 00000000..52dd1347 --- /dev/null +++ b/build/node_modules/just-extend/README.md @@ -0,0 +1,36 @@ +## just-extend + +Part of a [library](../../../../) of zero-dependency npm modules that do just do one thing. +Guilt-free utilities for every occasion. + +[Try it now](http://anguscroll.com/just/just-extend) + +```js +import extend from 'just-extend'; + +var obj = {a: 3, b: 5}; +extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} +obj; // {a: 4, b: 5, c: 8} + +var obj = {a: 3, b: 5}; +extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} +obj; // {a: 3, b: 5} + +var arr = [1, 2, 3]; +var obj = {a: 3, b: 5}; +extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} +arr.push(4); +obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + +var arr = [1, 2, 3]; +var obj = {a: 3, b: 5}; +extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} +arr.push(4); +obj; // {a: 3, b: 5, c: [1, 2, 3]} + +extend({a: 4, b: 5}); // {a: 4, b: 5} +extend({a: 4, b: 5}, 3); {a: 4, b: 5} +extend({a: 4, b: 5}, true); {a: 4, b: 5} +extend('hello', {a: 4, b: 5}); // throws +extend(3, {a: 4, b: 5}); // throws +``` diff --git a/build/node_modules/just-extend/index.d.ts b/build/node_modules/just-extend/index.d.ts new file mode 100644 index 00000000..cea7e54f --- /dev/null +++ b/build/node_modules/just-extend/index.d.ts @@ -0,0 +1,4 @@ +// Definitions by: Peter Safranek +declare function extend(obj1: object, ...objn: any[]): object; +declare function extend(deep: boolean, obj1: object, ...objn: any[]): object; +export = extend; \ No newline at end of file diff --git a/build/node_modules/just-extend/index.js b/build/node_modules/just-extend/index.js new file mode 100644 index 00000000..c8ff99c2 --- /dev/null +++ b/build/node_modules/just-extend/index.js @@ -0,0 +1,72 @@ +module.exports = extend; + +/* + var obj = {a: 3, b: 5}; + extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 4, b: 5, c: 8} + + var obj = {a: 3, b: 5}; + extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 3, b: 5} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3]} + + extend({a: 4, b: 5}); // {a: 4, b: 5} + extend({a: 4, b: 5}, 3); {a: 4, b: 5} + extend({a: 4, b: 5}, true); {a: 4, b: 5} + extend('hello', {a: 4, b: 5}); // throws + extend(3, {a: 4, b: 5}); // throws +*/ + +function extend(/* [deep], obj1, obj2, [objn] */) { + var args = [].slice.call(arguments); + var deep = false; + if (typeof args[0] == 'boolean') { + deep = args.shift(); + } + var result = args[0]; + if (isUnextendable(result)) { + throw new Error('extendee must be an object'); + } + var extenders = args.slice(1); + var len = extenders.length; + for (var i = 0; i < len; i++) { + var extender = extenders[i]; + for (var key in extender) { + if (Object.prototype.hasOwnProperty.call(extender, key)) { + var value = extender[key]; + if (deep && isCloneable(value)) { + var base = Array.isArray(value) ? [] : {}; + result[key] = extend( + true, + Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key]) + ? result[key] + : base, + value + ); + } else { + result[key] = value; + } + } + } + } + return result; +} + +function isCloneable(obj) { + return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]'; +} + +function isUnextendable(val) { + return !val || (typeof val != 'object' && typeof val != 'function'); +} diff --git a/build/node_modules/just-extend/index.tests.ts b/build/node_modules/just-extend/index.tests.ts new file mode 100644 index 00000000..df85e6da --- /dev/null +++ b/build/node_modules/just-extend/index.tests.ts @@ -0,0 +1,62 @@ +import extend = require("./index"); + +// OK + +// Pass single `object`. +extend({}); +extend([]); +extend(() => {}); + +// Pass single `object`, then `any`. +extend({}, 0); +extend({}, ""); +extend({}, false); +extend({}, null); +extend({}, undefined); +extend({}, {}); +extend({}, []); +extend({}, () => {}); + +// Pass variadic args. +extend({}, 0, "", false, null, undefined, {}, [], () => {}); + +// Pass `boolean`, then single `object`. +extend(true, {}); +extend(true, []); +extend(true, () => {}); + +// Pass `boolean`, single `object`, then `any`. +extend(true, {}, 0); +extend(true, {}, ""); +extend(true, {}, false); +extend(true, {}, null); +extend(true, {}, undefined); +extend(true, {}, {}); +extend(true, {}, []); +extend(true, {}, () => {}); + +// Pass `boolean`, then variadic args. +extend(true, {}, 0, "", false, null, undefined, {}, [], () => {}); + +// Not OK + +// Incorrect extendee `object`. +// @ts-expect-error +extend(); +// @ts-expect-error +extend(0); +// @ts-expect-error +extend(""); +// @ts-expect-error +extend(false); +// @ts-expect-error +extend(); + +// @ts-expect-error +extend(true, 0); +// @ts-expect-error +extend(true, ""); +// @ts-expect-error +extend(true, false); +// @ts-expect-error +extend(true); diff --git a/build/node_modules/just-extend/package.json b/build/node_modules/just-extend/package.json new file mode 100644 index 00000000..2809b3a5 --- /dev/null +++ b/build/node_modules/just-extend/package.json @@ -0,0 +1,58 @@ +{ + "_from": "just-extend@^4.0.2", + "_id": "just-extend@4.2.1", + "_inBundle": false, + "_integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "_location": "/just-extend", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "just-extend@^4.0.2", + "name": "just-extend", + "escapedName": "just-extend", + "rawSpec": "^4.0.2", + "saveSpec": null, + "fetchSpec": "^4.0.2" + }, + "_requiredBy": [ + "/nise" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/just-extend/-/just-extend-4.2.1.tgz", + "_shasum": "ef5e589afb61e5d66b24eca749409a8939a8c744", + "_spec": "just-extend@^4.0.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/nise", + "author": { + "name": "Angus Croll" + }, + "bugs": { + "url": "https://github.com/angus-c/just/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "extend an object", + "homepage": "https://github.com/angus-c/just#readme", + "keywords": [ + "object", + "assign", + "clone", + "copy", + "merge", + "deep-copy", + "extend", + "no-dependencies", + "just" + ], + "license": "MIT", + "main": "index.js", + "name": "just-extend", + "repository": { + "type": "git", + "url": "git+https://github.com/angus-c/just.git" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "types": "index.d.ts", + "version": "4.2.1" +} diff --git a/build/node_modules/kuler/package.json b/build/node_modules/kuler/package.json index 7743f582..74eb3ec4 100644 --- a/build/node_modules/kuler/package.json +++ b/build/node_modules/kuler/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/@dabh/diagnostics" ], - "_resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/kuler/-/kuler-2.0.0.tgz", "_shasum": "e2c570a3800388fb44407e851531c1d670b061b3", "_spec": "kuler@^2.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@dabh/diagnostics", diff --git a/build/node_modules/level-blobs/node_modules/isarray/package.json b/build/node_modules/level-blobs/node_modules/isarray/package.json index 8e1c999f..b5019599 100644 --- a/build/node_modules/level-blobs/node_modules/isarray/package.json +++ b/build/node_modules/level-blobs/node_modules/isarray/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-blobs/readable-stream" ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", "_spec": "isarray@0.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-blobs/node_modules/readable-stream", diff --git a/build/node_modules/level-blobs/node_modules/readable-stream/package.json b/build/node_modules/level-blobs/node_modules/readable-stream/package.json index 9d29e661..42faac77 100644 --- a/build/node_modules/level-blobs/node_modules/readable-stream/package.json +++ b/build/node_modules/level-blobs/node_modules/readable-stream/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-blobs" ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.1.14.tgz", "_shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9", "_spec": "readable-stream@^1.0.26-4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-blobs", diff --git a/build/node_modules/level-blobs/node_modules/string_decoder/package.json b/build/node_modules/level-blobs/node_modules/string_decoder/package.json index 3b972daf..91839420 100644 --- a/build/node_modules/level-blobs/node_modules/string_decoder/package.json +++ b/build/node_modules/level-blobs/node_modules/string_decoder/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-blobs/readable-stream" ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", "_spec": "string_decoder@~0.10.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-blobs/node_modules/readable-stream", diff --git a/build/node_modules/level-blobs/package.json b/build/node_modules/level-blobs/package.json index a1ed31bc..480e3165 100644 --- a/build/node_modules/level-blobs/package.json +++ b/build/node_modules/level-blobs/package.json @@ -5,7 +5,7 @@ "_integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", "_location": "/level-blobs", "_phantomChildren": { - "core-util-is": "1.0.2", + "core-util-is": "1.0.3", "inherits": "2.0.4" }, "_requested": { @@ -21,7 +21,7 @@ "_requiredBy": [ "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-blobs/-/level-blobs-0.1.7.tgz", "_shasum": "9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf", "_spec": "level-blobs@^0.1.7", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/level-filesystem/package.json b/build/node_modules/level-filesystem/package.json index 2dd0ef09..a32ea67b 100644 --- a/build/node_modules/level-filesystem/package.json +++ b/build/node_modules/level-filesystem/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/browserify-fs" ], - "_resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-filesystem/-/level-filesystem-1.2.0.tgz", "_shasum": "a00aca9919c4a4dfafdca6a8108d225aadff63b3", "_spec": "level-filesystem@^1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-fs", diff --git a/build/node_modules/level-fix-range/package.json b/build/node_modules/level-fix-range/package.json index 7514787a..9f180649 100644 --- a/build/node_modules/level-fix-range/package.json +++ b/build/node_modules/level-fix-range/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-peek" ], - "_resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-fix-range/-/level-fix-range-1.0.2.tgz", "_shasum": "bf15b915ae36d8470c821e883ddf79cd16420828", "_spec": "level-fix-range@~1.0.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-peek", diff --git a/build/node_modules/level-hooks/package.json b/build/node_modules/level-hooks/package.json index 4aadb708..d5dd94a7 100644 --- a/build/node_modules/level-hooks/package.json +++ b/build/node_modules/level-hooks/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-sublevel" ], - "_resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-hooks/-/level-hooks-4.5.0.tgz", "_shasum": "1b9ae61922930f3305d1a61fc4d83c8102c0dd93", "_spec": "level-hooks@>=4.4.0 <5", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel", diff --git a/build/node_modules/level-js/node_modules/object-keys/package.json b/build/node_modules/level-js/node_modules/object-keys/package.json index 249bb361..989af4cb 100644 --- a/build/node_modules/level-js/node_modules/object-keys/package.json +++ b/build/node_modules/level-js/node_modules/object-keys/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js/xtend" ], - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-keys/-/object-keys-0.4.0.tgz", "_shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336", "_spec": "object-keys@~0.4.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js/node_modules/xtend", diff --git a/build/node_modules/level-js/node_modules/xtend/package.json b/build/node_modules/level-js/node_modules/xtend/package.json index dd22bc26..98f4caea 100644 --- a/build/node_modules/level-js/node_modules/xtend/package.json +++ b/build/node_modules/level-js/node_modules/xtend/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js" ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.1.2.tgz", "_shasum": "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b", "_spec": "xtend@~2.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js", diff --git a/build/node_modules/level-js/package.json b/build/node_modules/level-js/package.json index 9d2140cf..25cc8d3b 100644 --- a/build/node_modules/level-js/package.json +++ b/build/node_modules/level-js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/browserify-fs" ], - "_resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-js/-/level-js-2.2.4.tgz", "_shasum": "bc055f4180635d4489b561c9486fa370e8c11697", "_spec": "level-js@^2.1.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-fs", diff --git a/build/node_modules/level-peek/package.json b/build/node_modules/level-peek/package.json index 519185db..bb2e2c32 100644 --- a/build/node_modules/level-peek/package.json +++ b/build/node_modules/level-peek/package.json @@ -19,7 +19,7 @@ "/level-blobs", "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-peek/-/level-peek-1.0.6.tgz", "_shasum": "bec51c72a82ee464d336434c7c876c3fcbcce77f", "_spec": "level-peek@^1.0.6", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/level-sublevel/node_modules/level-fix-range/package.json b/build/node_modules/level-sublevel/node_modules/level-fix-range/package.json index e97d045d..1cab5419 100644 --- a/build/node_modules/level-sublevel/node_modules/level-fix-range/package.json +++ b/build/node_modules/level-sublevel/node_modules/level-fix-range/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-sublevel" ], - "_resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-fix-range/-/level-fix-range-2.0.0.tgz", "_shasum": "c417d62159442151a19d9a2367868f1724c2d548", "_spec": "level-fix-range@2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel", diff --git a/build/node_modules/level-sublevel/node_modules/xtend/package.json b/build/node_modules/level-sublevel/node_modules/xtend/package.json index a44fe052..c4a2cb50 100644 --- a/build/node_modules/level-sublevel/node_modules/xtend/package.json +++ b/build/node_modules/level-sublevel/node_modules/xtend/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-sublevel" ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.0.6.tgz", "_shasum": "5ea657a6dba447069c2e59c58a1138cb0c5e6cee", "_spec": "xtend@~2.0.4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel", diff --git a/build/node_modules/level-sublevel/package.json b/build/node_modules/level-sublevel/package.json index 91115080..1745633a 100644 --- a/build/node_modules/level-sublevel/package.json +++ b/build/node_modules/level-sublevel/package.json @@ -22,7 +22,7 @@ "_requiredBy": [ "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-sublevel/-/level-sublevel-5.2.3.tgz", "_shasum": "744c12c72d2e72be78dde3b9b5cd84d62191413a", "_spec": "level-sublevel@^5.2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/levelup/node_modules/.bin/semver b/build/node_modules/levelup/node_modules/.bin/semver new file mode 120000 index 00000000..317eb293 --- /dev/null +++ b/build/node_modules/levelup/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/build/node_modules/levelup/node_modules/isarray/package.json b/build/node_modules/levelup/node_modules/isarray/package.json index bff2ec9a..061df864 100644 --- a/build/node_modules/levelup/node_modules/isarray/package.json +++ b/build/node_modules/levelup/node_modules/isarray/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/levelup/readable-stream" ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", "_spec": "isarray@0.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup/node_modules/readable-stream", diff --git a/build/node_modules/levelup/node_modules/prr/package.json b/build/node_modules/levelup/node_modules/prr/package.json index 1a95305a..4ef8f78f 100644 --- a/build/node_modules/levelup/node_modules/prr/package.json +++ b/build/node_modules/levelup/node_modules/prr/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/levelup" ], - "_resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/prr/-/prr-0.0.0.tgz", "_shasum": "1a84b85908325501411853d0081ee3fa86e2926a", "_spec": "prr@~0.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup", diff --git a/build/node_modules/levelup/node_modules/readable-stream/package.json b/build/node_modules/levelup/node_modules/readable-stream/package.json index 06c86cc7..9b66ecbd 100644 --- a/build/node_modules/levelup/node_modules/readable-stream/package.json +++ b/build/node_modules/levelup/node_modules/readable-stream/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/levelup" ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.0.34.tgz", "_shasum": "125820e34bc842d2f2aaafafe4c2916ee32c157c", "_spec": "readable-stream@~1.0.26", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup", diff --git a/build/node_modules/semver/.npmignore b/build/node_modules/levelup/node_modules/semver/.npmignore similarity index 100% rename from build/node_modules/semver/.npmignore rename to build/node_modules/levelup/node_modules/semver/.npmignore diff --git a/build/node_modules/graceful-fs/LICENSE b/build/node_modules/levelup/node_modules/semver/LICENSE similarity index 100% rename from build/node_modules/graceful-fs/LICENSE rename to build/node_modules/levelup/node_modules/semver/LICENSE diff --git a/build/node_modules/semver/Makefile b/build/node_modules/levelup/node_modules/semver/Makefile similarity index 100% rename from build/node_modules/semver/Makefile rename to build/node_modules/levelup/node_modules/semver/Makefile diff --git a/build/node_modules/levelup/node_modules/semver/README.md b/build/node_modules/levelup/node_modules/semver/README.md new file mode 100644 index 00000000..4e95b846 --- /dev/null +++ b/build/node_modules/levelup/node_modules/semver/README.md @@ -0,0 +1,158 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Usage + + $ npm install semver + + semver.valid('1.2.3') // '1.2.3' + semver.valid('a.b.c') // null + semver.clean(' =v1.2.3 ') // '1.2.3' + semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true + semver.gt('1.2.3', '9.8.7') // false + semver.lt('1.2.3', '9.8.7') // true + +As a command-line utility: + + $ semver -h + + Usage: semver [ [...]] [-r | -i | -d ] + Test if version(s) satisfy the supplied range(s), and sort them. + + Multiple versions or ranges may be supplied, unless increment + or decrement options are specified. In that case, only a single + version may be used, and it is incremented by the specified level + + Program exits successfully if any valid version satisfies + all supplied ranges, and prints all satisfying versions. + + If no versions are valid, or ranges are not satisfied, + then exits failure. + + Versions are printed in ascending order, so supplying + multiple versions to the utility will just sort them. + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +The following range styles are supported: + +* `1.2.3` A specific version. When nothing else will do. Must be a full + version number, with major, minor, and patch versions specified. + Note that build metadata is still ignored, so `1.2.3+build2012` will + satisfy this range. +* `>1.2.3` Greater than a specific version. +* `<1.2.3` Less than a specific version. If there is no prerelease + tag on the version range, then no prerelease version will be allowed + either, even though these are technically "less than". +* `>=1.2.3` Greater than or equal to. Note that prerelease versions + are NOT equal to their "normal" equivalents, so `1.2.3-beta` will + not satisfy this range, but `2.3.0-beta` will. +* `<=1.2.3` Less than or equal to. In this case, prerelease versions + ARE allowed, so `1.2.3-beta` would satisfy. +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` +* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to `1.2.3`". When + using tilde operators, prerelease versions are supported as well, + but a prerelease of the next significant digit will NOT be + satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`. +* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with `1.2.3`". When + using caret operators, anything from the specified version (including + prerelease) will be supported up to, but not including, the next + major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`, + while `1.2.2` and `2.0.0-beta` will not. +* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with `0.1.3`". `0.x.x` versions are + special: the first non-zero component indicates potentially breaking changes, + meaning the caret operator matches any version with the same first non-zero + component starting at the specified version. +* `^0.0.2` := `=0.0.2` "Only the version `0.0.2` is considered compatible" +* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" +* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with `1.2`" +* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" +* `1.2.*` Same as `1.2.x`. +* `1.2` Same as `1.2.x`. +* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" +* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with `1`" +* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" +* `1.*` Same as `1.x`. +* `1` Same as `1.x`. +* `*` Any version whatsoever. +* `x` Same as `*`. +* `""` (just an empty string) Same as `*`. + + +Ranges can be joined with either a space (which implies "and") or a +`||` (which implies "or"). + +## Functions + +All methods and classes take a final `loose` boolean argument that, if +true, will be more forgiving about not-quite-valid semver strings. +The resulting output will always be 100% strict, of course. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. + + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. diff --git a/build/node_modules/semver/bin/semver b/build/node_modules/levelup/node_modules/semver/bin/semver similarity index 100% rename from build/node_modules/semver/bin/semver rename to build/node_modules/levelup/node_modules/semver/bin/semver diff --git a/build/node_modules/semver/foot.js b/build/node_modules/levelup/node_modules/semver/foot.js similarity index 100% rename from build/node_modules/semver/foot.js rename to build/node_modules/levelup/node_modules/semver/foot.js diff --git a/build/node_modules/semver/head.js b/build/node_modules/levelup/node_modules/semver/head.js similarity index 100% rename from build/node_modules/semver/head.js rename to build/node_modules/levelup/node_modules/semver/head.js diff --git a/build/node_modules/levelup/node_modules/semver/package.json b/build/node_modules/levelup/node_modules/semver/package.json new file mode 100644 index 00000000..89d8c7f6 --- /dev/null +++ b/build/node_modules/levelup/node_modules/semver/package.json @@ -0,0 +1,53 @@ +{ + "_from": "semver@~2.3.1", + "_id": "semver@2.3.2", + "_inBundle": false, + "_integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "_location": "/levelup/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@~2.3.1", + "name": "semver", + "escapedName": "semver", + "rawSpec": "~2.3.1", + "saveSpec": null, + "fetchSpec": "~2.3.1" + }, + "_requiredBy": [ + "/levelup" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/semver/-/semver-2.3.2.tgz", + "_shasum": "b9848f25d6cf36333073ec9ef8856d42f1233e52", + "_spec": "semver@~2.3.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup", + "bin": { + "semver": "./bin/semver" + }, + "browser": "semver.browser.js", + "bugs": { + "url": "https://github.com/isaacs/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "0.x >=0.0.4", + "uglify-js": "~2.3.6" + }, + "homepage": "https://github.com/isaacs/node-semver#readme", + "license": "BSD", + "main": "semver.js", + "min": "semver.min.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-semver.git" + }, + "scripts": { + "prepublish": "make", + "test": "tap test/*.js" + }, + "version": "2.3.2" +} diff --git a/build/node_modules/semver/semver.browser.js b/build/node_modules/levelup/node_modules/semver/semver.browser.js similarity index 100% rename from build/node_modules/semver/semver.browser.js rename to build/node_modules/levelup/node_modules/semver/semver.browser.js diff --git a/build/node_modules/semver/semver.browser.js.gz b/build/node_modules/levelup/node_modules/semver/semver.browser.js.gz similarity index 100% rename from build/node_modules/semver/semver.browser.js.gz rename to build/node_modules/levelup/node_modules/semver/semver.browser.js.gz diff --git a/build/node_modules/semver/semver.js b/build/node_modules/levelup/node_modules/semver/semver.js similarity index 100% rename from build/node_modules/semver/semver.js rename to build/node_modules/levelup/node_modules/semver/semver.js diff --git a/build/node_modules/semver/semver.min.js b/build/node_modules/levelup/node_modules/semver/semver.min.js similarity index 100% rename from build/node_modules/semver/semver.min.js rename to build/node_modules/levelup/node_modules/semver/semver.min.js diff --git a/build/node_modules/semver/semver.min.js.gz b/build/node_modules/levelup/node_modules/semver/semver.min.js.gz similarity index 100% rename from build/node_modules/semver/semver.min.js.gz rename to build/node_modules/levelup/node_modules/semver/semver.min.js.gz diff --git a/build/node_modules/semver/test/amd.js b/build/node_modules/levelup/node_modules/semver/test/amd.js similarity index 100% rename from build/node_modules/semver/test/amd.js rename to build/node_modules/levelup/node_modules/semver/test/amd.js diff --git a/build/node_modules/semver/test/gtr.js b/build/node_modules/levelup/node_modules/semver/test/gtr.js similarity index 100% rename from build/node_modules/semver/test/gtr.js rename to build/node_modules/levelup/node_modules/semver/test/gtr.js diff --git a/build/node_modules/semver/test/index.js b/build/node_modules/levelup/node_modules/semver/test/index.js similarity index 100% rename from build/node_modules/semver/test/index.js rename to build/node_modules/levelup/node_modules/semver/test/index.js diff --git a/build/node_modules/semver/test/ltr.js b/build/node_modules/levelup/node_modules/semver/test/ltr.js similarity index 100% rename from build/node_modules/semver/test/ltr.js rename to build/node_modules/levelup/node_modules/semver/test/ltr.js diff --git a/build/node_modules/semver/test/no-module.js b/build/node_modules/levelup/node_modules/semver/test/no-module.js similarity index 100% rename from build/node_modules/semver/test/no-module.js rename to build/node_modules/levelup/node_modules/semver/test/no-module.js diff --git a/build/node_modules/levelup/node_modules/string_decoder/package.json b/build/node_modules/levelup/node_modules/string_decoder/package.json index db2c4a28..ed19c645 100644 --- a/build/node_modules/levelup/node_modules/string_decoder/package.json +++ b/build/node_modules/levelup/node_modules/string_decoder/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/levelup/readable-stream" ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "_shasum": "62e203bc41766c6c28c9fc84301dab1c5310fa94", "_spec": "string_decoder@~0.10.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup/node_modules/readable-stream", diff --git a/build/node_modules/levelup/node_modules/xtend/package.json b/build/node_modules/levelup/node_modules/xtend/package.json index eacde36d..560ec492 100644 --- a/build/node_modules/levelup/node_modules/xtend/package.json +++ b/build/node_modules/levelup/node_modules/xtend/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/levelup" ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-3.0.0.tgz", "_shasum": "5cce7407baf642cba7becda568111c493f59665a", "_spec": "xtend@~3.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup", diff --git a/build/node_modules/levelup/package.json b/build/node_modules/levelup/package.json index 685b5159..ec6a2050 100644 --- a/build/node_modules/levelup/package.json +++ b/build/node_modules/levelup/package.json @@ -5,7 +5,7 @@ "_integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", "_location": "/levelup", "_phantomChildren": { - "core-util-is": "1.0.2", + "core-util-is": "1.0.3", "inherits": "2.0.4" }, "_requested": { @@ -21,7 +21,7 @@ "_requiredBy": [ "/browserify-fs" ], - "_resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/levelup/-/levelup-0.18.6.tgz", "_shasum": "e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb", "_spec": "levelup@^0.18.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-fs", diff --git a/build/node_modules/locate-path/index.d.ts b/build/node_modules/locate-path/index.d.ts new file mode 100644 index 00000000..a714f1d3 --- /dev/null +++ b/build/node_modules/locate-path/index.d.ts @@ -0,0 +1,83 @@ +declare namespace locatePath { + interface Options { + /** + Current working directory. + + @default process.cwd() + */ + readonly cwd?: string; + + /** + Type of path to match. + + @default 'file' + */ + readonly type?: 'file' | 'directory'; + + /** + Allow symbolic links to match if they point to the requested path type. + + @default true + */ + readonly allowSymlinks?: boolean; + } + + interface AsyncOptions extends Options { + /** + Number of concurrently pending promises. Minimum: `1`. + + @default Infinity + */ + readonly concurrency?: number; + + /** + Preserve `paths` order when searching. + + Disable this to improve performance if you don't care about the order. + + @default true + */ + readonly preserveOrder?: boolean; + } +} + +declare const locatePath: { + /** + Synchronously get the first path that exists on disk of multiple paths. + + @param paths - Paths to check. + @returns The first path that exists or `undefined` if none exists. + */ + sync: ( + paths: Iterable, + options?: locatePath.Options + ) => string | undefined; + + /** + Get the first path that exists on disk of multiple paths. + + @param paths - Paths to check. + @returns The first path that exists or `undefined` if none exists. + + @example + ``` + import locatePath = require('locate-path'); + + const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' + ]; + + (async () => { + console(await locatePath(files)); + //=> 'rainbow' + })(); + ``` + */ + (paths: Iterable, options?: locatePath.AsyncOptions): Promise< + string | undefined + >; +}; + +export = locatePath; diff --git a/build/node_modules/locate-path/index.js b/build/node_modules/locate-path/index.js new file mode 100644 index 00000000..a6358e54 --- /dev/null +++ b/build/node_modules/locate-path/index.js @@ -0,0 +1,68 @@ +'use strict'; +const path = require('path'); +const fs = require('fs'); +const {promisify} = require('util'); +const pLocate = require('p-locate'); + +const fsStat = promisify(fs.stat); +const fsLStat = promisify(fs.lstat); + +const typeMappings = { + directory: 'isDirectory', + file: 'isFile' +}; + +function checkType({type}) { + if (type in typeMappings) { + return; + } + + throw new Error(`Invalid type specified: ${type}`); +} + +const matchType = (type, stat) => type === undefined || stat[typeMappings[type]](); + +module.exports = async (paths, options) => { + options = { + cwd: process.cwd(), + type: 'file', + allowSymlinks: true, + ...options + }; + + checkType(options); + + const statFn = options.allowSymlinks ? fsStat : fsLStat; + + return pLocate(paths, async path_ => { + try { + const stat = await statFn(path.resolve(options.cwd, path_)); + return matchType(options.type, stat); + } catch { + return false; + } + }, options); +}; + +module.exports.sync = (paths, options) => { + options = { + cwd: process.cwd(), + allowSymlinks: true, + type: 'file', + ...options + }; + + checkType(options); + + const statFn = options.allowSymlinks ? fs.statSync : fs.lstatSync; + + for (const path_ of paths) { + try { + const stat = statFn(path.resolve(options.cwd, path_)); + + if (matchType(options.type, stat)) { + return path_; + } + } catch {} + } +}; diff --git a/build/node_modules/locate-path/license b/build/node_modules/locate-path/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/locate-path/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/locate-path/package.json b/build/node_modules/locate-path/package.json new file mode 100644 index 00000000..8b96aa8e --- /dev/null +++ b/build/node_modules/locate-path/package.json @@ -0,0 +1,78 @@ +{ + "_from": "locate-path@^6.0.0", + "_id": "locate-path@6.0.0", + "_inBundle": false, + "_integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "_location": "/locate-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "locate-path@^6.0.0", + "name": "locate-path", + "escapedName": "locate-path", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/find-up" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/locate-path/-/locate-path-6.0.0.tgz", + "_shasum": "55321eb309febbc59c4801d931a72452a681d286", + "_spec": "locate-path@^6.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/find-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/locate-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-locate": "^5.0.0" + }, + "deprecated": false, + "description": "Get the first path that exists on disk of multiple paths", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.13.1", + "xo": "^0.32.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/locate-path#readme", + "keywords": [ + "locate", + "path", + "paths", + "file", + "files", + "exists", + "find", + "finder", + "search", + "searcher", + "array", + "iterable", + "iterator" + ], + "license": "MIT", + "name": "locate-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/locate-path.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "6.0.0" +} diff --git a/build/node_modules/locate-path/readme.md b/build/node_modules/locate-path/readme.md new file mode 100644 index 00000000..1002bcd6 --- /dev/null +++ b/build/node_modules/locate-path/readme.md @@ -0,0 +1,125 @@ +# locate-path [![Build Status](https://travis-ci.com/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.com/github/sindresorhus/locate-path) + +> Get the first path that exists on disk of multiple paths + +## Install + +``` +$ npm install locate-path +``` + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const locatePath = require('locate-path'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + console(await locatePath(files)); + //=> 'rainbow' +})(); +``` + +## API + +### locatePath(paths, options?) + +Returns a `Promise` for the first path that exists or `undefined` if none exists. + +#### paths + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `object` + +##### concurrency + +Type: `number`\ +Default: `Infinity`\ +Minimum: `1` + +Number of concurrently pending promises. + +##### preserveOrder + +Type: `boolean`\ +Default: `true` + +Preserve `paths` order when searching. + +Disable this to improve performance if you don't care about the order. + +##### cwd + +Type: `string`\ +Default: `process.cwd()` + +Current working directory. + +##### type + +Type: `string`\ +Default: `'file'`\ +Values: `'file' | 'directory'` + +The type of paths that can match. + +##### allowSymlinks + +Type: `boolean`\ +Default: `true` + +Allow symbolic links to match if they point to the chosen path type. + +### locatePath.sync(paths, options?) + +Returns the first path that exists or `undefined` if none exists. + +#### paths + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `object` + +##### cwd + +Same as above. + +##### type + +Same as above. + +##### allowSymlinks + +Same as above. + +## Related + +- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists + +--- + +
diff --git a/build/node_modules/lodash.get/LICENSE b/build/node_modules/lodash.get/LICENSE new file mode 100644 index 00000000..e0c69d56 --- /dev/null +++ b/build/node_modules/lodash.get/LICENSE @@ -0,0 +1,47 @@ +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/build/node_modules/lodash.get/README.md b/build/node_modules/lodash.get/README.md new file mode 100644 index 00000000..90796144 --- /dev/null +++ b/build/node_modules/lodash.get/README.md @@ -0,0 +1,18 @@ +# lodash.get v4.4.2 + +The [lodash](https://lodash.com/) method `_.get` exported as a [Node.js](https://nodejs.org/) module. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.get +``` + +In Node.js: +```js +var get = require('lodash.get'); +``` + +See the [documentation](https://lodash.com/docs#get) or [package source](https://github.com/lodash/lodash/blob/4.4.2-npm-packages/lodash.get) for more details. diff --git a/build/node_modules/lodash.get/index.js b/build/node_modules/lodash.get/index.js new file mode 100644 index 00000000..0eaadec5 --- /dev/null +++ b/build/node_modules/lodash.get/index.js @@ -0,0 +1,931 @@ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/build/node_modules/lodash.get/package.json b/build/node_modules/lodash.get/package.json new file mode 100644 index 00000000..6ac39d1e --- /dev/null +++ b/build/node_modules/lodash.get/package.json @@ -0,0 +1,69 @@ +{ + "_from": "lodash.get@^4.4.2", + "_id": "lodash.get@4.4.2", + "_inBundle": false, + "_integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "_location": "/lodash.get", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "lodash.get@^4.4.2", + "name": "lodash.get", + "escapedName": "lodash.get", + "rawSpec": "^4.4.2", + "saveSpec": null, + "fetchSpec": "^4.4.2" + }, + "_requiredBy": [ + "/@sinonjs/samsam" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/lodash.get/-/lodash.get-4.4.2.tgz", + "_shasum": "2d177f652fa31e939b4438d5341499dfa3825e99", + "_spec": "lodash.get@^4.4.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@sinonjs/samsam", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "bugs": { + "url": "https://github.com/lodash/lodash/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine.bublitz@gmail.com", + "url": "https://github.com/phated" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "https://mathiasbynens.be/" + } + ], + "deprecated": false, + "description": "The lodash method `_.get` exported as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "keywords": [ + "lodash-modularized", + "get" + ], + "license": "MIT", + "name": "lodash.get", + "repository": { + "type": "git", + "url": "git+https://github.com/lodash/lodash.git" + }, + "scripts": { + "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" + }, + "version": "4.4.2" +} diff --git a/build/node_modules/log-symbols/browser.js b/build/node_modules/log-symbols/browser.js new file mode 100644 index 00000000..a66f8ec4 --- /dev/null +++ b/build/node_modules/log-symbols/browser.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + info: 'ℹ️', + success: '✅', + warning: '⚠️', + error: '❌️' +}; diff --git a/build/node_modules/log-symbols/index.d.ts b/build/node_modules/log-symbols/index.d.ts new file mode 100644 index 00000000..8e4bdc59 --- /dev/null +++ b/build/node_modules/log-symbols/index.d.ts @@ -0,0 +1,25 @@ +/** +Colored symbols for various log levels. + +Includes fallbacks for Windows CMD which only supports a [limited character set](https://en.wikipedia.org/wiki/Code_page_437). + +@example +``` +import logSymbols = require('log-symbols'); + +console.log(logSymbols.success, 'Finished successfully!'); +// Terminals with Unicode support: ✔ Finished successfully! +// Terminals without Unicode support: √ Finished successfully! +``` +*/ +declare const logSymbols: { + readonly info: string; + + readonly success: string; + + readonly warning: string; + + readonly error: string; +}; + +export = logSymbols; diff --git a/build/node_modules/log-symbols/index.js b/build/node_modules/log-symbols/index.js new file mode 100644 index 00000000..12347e09 --- /dev/null +++ b/build/node_modules/log-symbols/index.js @@ -0,0 +1,19 @@ +'use strict'; +const chalk = require('chalk'); +const isUnicodeSupported = require('is-unicode-supported'); + +const main = { + info: chalk.blue('ℹ'), + success: chalk.green('✔'), + warning: chalk.yellow('⚠'), + error: chalk.red('✖') +}; + +const fallback = { + info: chalk.blue('i'), + success: chalk.green('√'), + warning: chalk.yellow('‼'), + error: chalk.red('×') +}; + +module.exports = isUnicodeSupported() ? main : fallback; diff --git a/build/node_modules/log-symbols/license b/build/node_modules/log-symbols/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/log-symbols/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/log-symbols/package.json b/build/node_modules/log-symbols/package.json new file mode 100644 index 00000000..13695ae3 --- /dev/null +++ b/build/node_modules/log-symbols/package.json @@ -0,0 +1,84 @@ +{ + "_from": "log-symbols@4.1.0", + "_id": "log-symbols@4.1.0", + "_inBundle": false, + "_integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "_location": "/log-symbols", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "log-symbols@4.1.0", + "name": "log-symbols", + "escapedName": "log-symbols", + "rawSpec": "4.1.0", + "saveSpec": null, + "fetchSpec": "4.1.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/log-symbols/-/log-symbols-4.1.0.tgz", + "_shasum": "3fbdbb95b4683ac9fc785111e792e558d4abd503", + "_spec": "log-symbols@4.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/sindresorhus/log-symbols/issues" + }, + "bundleDependencies": false, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "deprecated": false, + "description": "Colored symbols for various log levels. Example: `✔︎ Success`", + "devDependencies": { + "ava": "^2.4.0", + "strip-ansi": "^6.0.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts", + "browser.js" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/log-symbols#readme", + "keywords": [ + "unicode", + "cli", + "cmd", + "command-line", + "characters", + "symbol", + "symbols", + "figure", + "figures", + "fallback", + "windows", + "log", + "logging", + "terminal", + "stdout" + ], + "license": "MIT", + "name": "log-symbols", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/log-symbols.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.1.0" +} diff --git a/build/node_modules/log-symbols/readme.md b/build/node_modules/log-symbols/readme.md new file mode 100644 index 00000000..d464eae9 --- /dev/null +++ b/build/node_modules/log-symbols/readme.md @@ -0,0 +1,51 @@ +# log-symbols + + + +> Colored symbols for various log levels + +Includes fallbacks for Windows CMD which only supports a [limited character set](https://en.wikipedia.org/wiki/Code_page_437). + +## Install + +``` +$ npm install log-symbols +``` + +## Usage + +```js +const logSymbols = require('log-symbols'); + +console.log(logSymbols.success, 'Finished successfully!'); +// Terminals with Unicode support: ✔ Finished successfully! +// Terminals without Unicode support: √ Finished successfully! +``` + +## API + +### logSymbols + +#### info +#### success +#### warning +#### error + +## Related + +- [figures](https://github.com/sindresorhus/figures) - Unicode symbols with Windows CMD fallbacks +- [py-log-symbols](https://github.com/ManrajGrover/py-log-symbols) - Python port +- [log-symbols](https://github.com/palash25/log-symbols) - Ruby port +- [guumaster/logsymbols](https://github.com/guumaster/logsymbols) - Golang port + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/build/node_modules/logform/.eslintrc b/build/node_modules/logform/.eslintrc index db77059d..39607966 100644 --- a/build/node_modules/logform/.eslintrc +++ b/build/node_modules/logform/.eslintrc @@ -1,5 +1,5 @@ { - "extends": "populist", + "extends": "@dabh/eslint-config-populist", "rules": { "no-undefined": 0, "strict": 0 diff --git a/build/node_modules/logform/.travis.yml b/build/node_modules/logform/.travis.yml deleted file mode 100644 index f7e50624..00000000 --- a/build/node_modules/logform/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -sudo: false -language: node_js -node_js: - - "10" - - "12" - - "14" - -before_install: - - travis_retry npm install - -script: - - npm test - -notifications: - email: - - travis@nodejitsu.com - irc: "irc.freenode.org#nodejitsu" diff --git a/build/node_modules/logform/CHANGELOG.md b/build/node_modules/logform/CHANGELOG.md index e8401a14..4e7f481c 100644 --- a/build/node_modules/logform/CHANGELOG.md +++ b/build/node_modules/logform/CHANGELOG.md @@ -1,5 +1,29 @@ # CHANGELOG +### 2.4.0 +**2022/02/12** + +- Updated all dependencies +- [#135] Use CLI levels (not NPM levels) in `CliFormat` (this was likely a typo originally) +- [#134] Expose `safe-stable-stringify` 2.x options as parameters in `JsonOptions` + +### 2.3.2 +**2022/01/09** + +This update, which also used up version number 2.3.1, pinned the version of the `colors` dependency +due to vandalism by a developer of that package, as noted [here](https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/). +[As discussed in the `winston` package](https://github.com/winstonjs/winston/issues/2011), all users should update to this (or a later version, should one exist) ASAP. + +### 2.3.0 +**2021/09/21** + +- Update dependencies +- Removing some superfluous semicolons & commas lint +- Avoid dynamic requires [#117] +- Replace JSON stringify library "fast-safe-stringify" by "safe-stable-stringify" [#98] +- More correctly format errors even if the “message” property is enumerable [#101] +- Fix errors and ms export for browsers [#106] + ### 2.2.0 **2020/06/21** diff --git a/build/node_modules/logform/README.md b/build/node_modules/logform/README.md index 05dfe45f..f58fe8b8 100644 --- a/build/node_modules/logform/README.md +++ b/build/node_modules/logform/README.md @@ -43,7 +43,7 @@ message. The object itself is mutable. Every `info` must have at least the ``` js const info = { - level: 'info', // Level of the logging message + level: 'info', // Level of the logging message message: 'Hey! Log something?' // Descriptive message being logged. } ``` @@ -57,10 +57,10 @@ const { level, message, ...meta } = info; Several of the formats in `logform` itself add additional properties: | Property | Format added by | Description | -| ----------- | --------------- | ----------- | +| ----------- | --------------- | ----------- | | `splat` | `splat()` | String interpolation splat for `%d %s`-style messages. | | `timestamp` | `timestamp()` | timestamp the message was received. | -| `label` | `label()` | Custom label associated with each message. | +| `label` | `label()` | Custom label associated with each message. | | `ms` | `ms()` | Number of milliseconds since the previous log message. | As a consumer you may add whatever properties you wish – _internal state is @@ -105,7 +105,7 @@ They are expected to return one of two things: - **An `info` Object** representing the modified `info` argument. Object references need not be preserved if immutability is preferred. All current built-in formats consider `info` mutable, but [immutablejs] is being considered for future releases. - **A falsey value** indicating that the `info` argument should be ignored by the caller. (See: [Filtering `info` Objects](#filtering-info-objects)) below. -`logform.format` is designed to be as simple as possible. To define a new format simple pass it a `transform(info, opts)` function to get a new `Format`. +`logform.format` is designed to be as simple as possible. To define a new format simple pass it a `transform(info, opts)` function to get a new `Format`. The named `Format` returned can be used to create as many copies of the given `Format` as desired: @@ -114,7 +114,7 @@ const { format } = require('logform'); const volume = format((info, opts) => { if (opts.yell) { - info.message = info.message.toUpperCase(); + info.message = info.message.toUpperCase(); } else if (opts.whisper) { info.message = info.message.toLowerCase(); } @@ -135,9 +135,9 @@ console.dir(scream.transform({ // `volume` can be used multiple times to create different formats. const whisper = volume({ whisper: true }); -console.dir(whisper.transform({ - level: 'info', - message: `WHY ARE THEY MAKING US YELL SO MUCH!` +console.dir(whisper.transform({ + level: 'info', + message: `WHY ARE THEY MAKING US YELL SO MUCH!` }), whisper.options); // { // level: 'info' @@ -369,12 +369,11 @@ console.log(info); ### JSON -The `json` format uses `fast-safe-stringify` to finalize the message. +The `json` format uses `safe-stable-stringify` to finalize the message. It accepts the following options: * **replacer**: A function that influences how the `info` is stringified. * **space**: The number of white space used to format the json. -* **stable**: If set to `true` the objects' attributes will always be stringified in alphabetical order. ```js const { format } = require('logform'); @@ -384,7 +383,6 @@ const jsonFormat = format.json(); const info = jsonFormat.transform({ level: 'info', message: 'my message', - stable: true, }); console.log(info); // { level: 'info', @@ -494,7 +492,7 @@ This was previously exposed as `{ padLevels: true }` to transports in `winston < The `prettyPrint` format finalizes the message using `util.inspect`. It accepts the following options: -* **depth**: A `number` that specifies the maximum depth of the `info` object being stringified by `util.inspect`. Defaults to `2`. +* **depth**: A `number` that specifies the maximum depth of the `info` object being stringified by `util.inspect`. Defaults to `2`. * **colorize**: Colorizes the message if set to `true`. Defaults to `false`. The `prettyPrint` format should not be used in production because it may impact performance negatively and block the event loop. @@ -607,11 +605,11 @@ This was previously exposed implicitly in `winston < 3.0.0`. ### Timestamp -The `timestamp` format adds a timestamp to the info. +The `timestamp` format adds a timestamp to the info. It accepts the following options: * **format**: Either the format as a string accepted by the [fecha](https://github.com/taylorhakes/fecha) module or a function that returns a formatted date. If no format is provided `new Date().toISOString()` will be used. -* **alias**: The name of an alias for the timestamp property, that will be added to the `info` object. +* **alias**: The name of an alias for the timestamp property, that will be added to the `info` object. ```js const { format } = require('logform'); @@ -637,9 +635,9 @@ It was previously available in `winston < 3.0.0` as `{ timestamp: true }` and `{ The `uncolorize` format strips colors from `info` objects. It accepts the following options: -* **level**: Disables the uncolorize format for `info.level` if set to `false`. -* **message**: Disables the uncolorize format for `info.message` if set to `false`. -* **raw**: Disables the uncolorize format for `info[MESSAGE]` if set to `false`. +* **level**: Disables the uncolorize format for `info.level` if set to `false`. +* **message**: Disables the uncolorize format for `info.message` if set to `false`. +* **raw**: Disables the uncolorize format for `info[MESSAGE]` if set to `false`. This was previously exposed as `{ stripColors: true }` to transports in `winston < 3.0.0`. diff --git a/build/node_modules/logform/browser.js b/build/node_modules/logform/browser.js index a675b82b..843044b1 100644 --- a/build/node_modules/logform/browser.js +++ b/build/node_modules/logform/browser.js @@ -21,12 +21,14 @@ exports.levels = require('././levels'); // Object.defineProperty(format, 'align', { value: require('./align') }); Object.defineProperty(format, 'cli', { value: require('./cli') }); -Object.defineProperty(format, 'combine', { value: require('./combine') }); Object.defineProperty(format, 'colorize', { value: require('./colorize') }); +Object.defineProperty(format, 'combine', { value: require('./combine') }); +Object.defineProperty(format, 'errors', { value: require('./errors') }); Object.defineProperty(format, 'json', { value: require('./json') }); Object.defineProperty(format, 'label', { value: require('./label') }); Object.defineProperty(format, 'logstash', { value: require('./logstash') }); Object.defineProperty(format, 'metadata', { value: require('./metadata') }); +Object.defineProperty(format, 'ms', { value: require('./ms') }); Object.defineProperty(format, 'padLevels', { value: require('./pad-levels') }); Object.defineProperty(format, 'prettyPrint', { value: require('./pretty-print') }); Object.defineProperty(format, 'printf', { value: require('./printf') }); diff --git a/build/node_modules/logform/cli.js b/build/node_modules/logform/cli.js index 2337e47b..4fc74b77 100644 --- a/build/node_modules/logform/cli.js +++ b/build/node_modules/logform/cli.js @@ -12,7 +12,7 @@ const { configs, MESSAGE } = require('triple-beam'); class CliFormat { constructor(opts = {}) { if (!opts.levels) { - opts.levels = configs.npm.levels; + opts.levels = configs.cli.levels; } this.colorizer = new Colorizer(opts); diff --git a/build/node_modules/logform/colorize.js b/build/node_modules/logform/colorize.js index ba6860e2..0186c6ec 100644 --- a/build/node_modules/logform/colorize.js +++ b/build/node_modules/logform/colorize.js @@ -1,6 +1,6 @@ 'use strict'; -const colors = require('colors/safe'); +const colors = require('@colors/colors/safe'); const { LEVEL, MESSAGE } = require('triple-beam'); // @@ -58,7 +58,7 @@ class Colorizer { /* * function colorize (lookup, level, message) - * Performs multi-step colorization using colors/safe + * Performs multi-step colorization using @colors/colors/safe */ colorize(lookup, level, message) { if (typeof message === 'undefined') { diff --git a/build/node_modules/logform/dist/browser.js b/build/node_modules/logform/dist/browser.js index b89538b8..2e6530b2 100644 --- a/build/node_modules/logform/dist/browser.js +++ b/build/node_modules/logform/dist/browser.js @@ -25,11 +25,14 @@ Object.defineProperty(format, 'align', { Object.defineProperty(format, 'cli', { value: require('./cli') }); +Object.defineProperty(format, 'colorize', { + value: require('./colorize') +}); Object.defineProperty(format, 'combine', { value: require('./combine') }); -Object.defineProperty(format, 'colorize', { - value: require('./colorize') +Object.defineProperty(format, 'errors', { + value: require('./errors') }); Object.defineProperty(format, 'json', { value: require('./json') @@ -43,6 +46,9 @@ Object.defineProperty(format, 'logstash', { Object.defineProperty(format, 'metadata', { value: require('./metadata') }); +Object.defineProperty(format, 'ms', { + value: require('./ms') +}); Object.defineProperty(format, 'padLevels', { value: require('./pad-levels') }); diff --git a/build/node_modules/logform/dist/cli.js b/build/node_modules/logform/dist/cli.js index 7a0306d8..ae8a0f35 100644 --- a/build/node_modules/logform/dist/cli.js +++ b/build/node_modules/logform/dist/cli.js @@ -4,7 +4,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var _require = require('./colorize'), Colorizer = _require.Colorizer; @@ -28,7 +28,7 @@ var CliFormat = /*#__PURE__*/function () { _classCallCheck(this, CliFormat); if (!opts.levels) { - opts.levels = configs.npm.levels; + opts.levels = configs.cli.levels; } this.colorizer = new Colorizer(opts); diff --git a/build/node_modules/logform/dist/colorize.js b/build/node_modules/logform/dist/colorize.js index 79b9ef30..0b090d3a 100644 --- a/build/node_modules/logform/dist/colorize.js +++ b/build/node_modules/logform/dist/colorize.js @@ -4,9 +4,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -var colors = require('colors/safe'); +var colors = require('@colors/colors/safe'); var _require = require('triple-beam'), LEVEL = _require.LEVEL, @@ -49,19 +49,19 @@ var Colorizer = /*#__PURE__*/function () { _createClass(Colorizer, [{ key: "addColors", - + value: /* * Adds the colors Object to the set of allColors * known by the Colorizer * * @param {Object} colors Set of color mappings to add. */ - value: function addColors(clrs) { + function addColors(clrs) { return Colorizer.addColors(clrs); } /* * function colorize (lookup, level, message) - * Performs multi-step colorization using colors/safe + * Performs multi-step colorization using @colors/colors/safe */ }, { diff --git a/build/node_modules/logform/dist/errors.js b/build/node_modules/logform/dist/errors.js index d26b71bb..9d924d27 100644 --- a/build/node_modules/logform/dist/errors.js +++ b/build/node_modules/logform/dist/errors.js @@ -33,8 +33,8 @@ module.exports = format(function (einfo, _ref) { if (!(einfo.message instanceof Error)) return einfo; // Assign all enumerable properties and the // message property from the error provided. - Object.assign(einfo, einfo.message); var err = einfo.message; + Object.assign(einfo, err); einfo.message = err.message; einfo[MESSAGE] = err.message; // Assign the stack if requested. diff --git a/build/node_modules/logform/dist/format.js b/build/node_modules/logform/dist/format.js index 97eedff9..a45b04d1 100644 --- a/build/node_modules/logform/dist/format.js +++ b/build/node_modules/logform/dist/format.js @@ -4,15 +4,19 @@ * the format when it is invalid. */ -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +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); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } @@ -20,7 +24,7 @@ function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } @@ -43,7 +47,7 @@ var InvalidFormatError = /*#__PURE__*/function (_Error) { return _this; } - return InvalidFormatError; + return _createClass(InvalidFormatError); }( /*#__PURE__*/_wrapNativeSuper(Error)); /* * function format (formatFn) diff --git a/build/node_modules/logform/dist/index.js b/build/node_modules/logform/dist/index.js index cb652fd9..5ab44fe6 100644 --- a/build/node_modules/logform/dist/index.js +++ b/build/node_modules/logform/dist/index.js @@ -22,11 +22,10 @@ exports.levels = require('./levels'); * as a lazy-loaded getter. */ -function exposeFormat(name, path) { - path = path || name; +function exposeFormat(name, requireFormat) { Object.defineProperty(format, name, { get: function get() { - return require("./".concat(path, ".js")); + return requireFormat(); }, configurable: true }); @@ -35,20 +34,54 @@ function exposeFormat(name, path) { // -exposeFormat('align'); -exposeFormat('errors'); -exposeFormat('cli'); -exposeFormat('combine'); -exposeFormat('colorize'); -exposeFormat('json'); -exposeFormat('label'); -exposeFormat('logstash'); -exposeFormat('metadata'); -exposeFormat('ms'); -exposeFormat('padLevels', 'pad-levels'); -exposeFormat('prettyPrint', 'pretty-print'); -exposeFormat('printf'); -exposeFormat('simple'); -exposeFormat('splat'); -exposeFormat('timestamp'); -exposeFormat('uncolorize'); \ No newline at end of file +exposeFormat('align', function () { + return require('./align'); +}); +exposeFormat('errors', function () { + return require('./errors'); +}); +exposeFormat('cli', function () { + return require('./cli'); +}); +exposeFormat('combine', function () { + return require('./combine'); +}); +exposeFormat('colorize', function () { + return require('./colorize'); +}); +exposeFormat('json', function () { + return require('./json'); +}); +exposeFormat('label', function () { + return require('./label'); +}); +exposeFormat('logstash', function () { + return require('./logstash'); +}); +exposeFormat('metadata', function () { + return require('./metadata'); +}); +exposeFormat('ms', function () { + return require('./ms'); +}); +exposeFormat('padLevels', function () { + return require('./pad-levels'); +}); +exposeFormat('prettyPrint', function () { + return require('./pretty-print'); +}); +exposeFormat('printf', function () { + return require('./printf'); +}); +exposeFormat('simple', function () { + return require('./simple'); +}); +exposeFormat('splat', function () { + return require('./splat'); +}); +exposeFormat('timestamp', function () { + return require('./timestamp'); +}); +exposeFormat('uncolorize', function () { + return require('./uncolorize'); +}); \ No newline at end of file diff --git a/build/node_modules/logform/dist/json.js b/build/node_modules/logform/dist/json.js index 06685ef6..0e4ff342 100644 --- a/build/node_modules/logform/dist/json.js +++ b/build/node_modules/logform/dist/json.js @@ -5,7 +5,7 @@ var format = require('./format'); var _require = require('triple-beam'), MESSAGE = _require.MESSAGE; -var jsonStringify = require('fast-safe-stringify'); +var stringify = require('safe-stable-stringify'); /* * function replacer (key, value) * Handles proper stringification of Buffer and bigint output. @@ -13,8 +13,9 @@ var jsonStringify = require('fast-safe-stringify'); function replacer(key, value) { - if (value instanceof Buffer) return value.toString('base64'); // eslint-disable-next-line valid-typeof - + // safe-stable-stringify does support BigInt, however, it doesn't wrap the value in quotes. + // Leading to a loss in fidelity if the resulting string is parsed. + // It would also be a breaking change for logform. if (typeof value === 'bigint') return value.toString(); return value; } @@ -26,8 +27,8 @@ function replacer(key, value) { */ -module.exports = format(function (info) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - info[MESSAGE] = (opts.stable ? jsonStringify.stableStringify : jsonStringify)(info, opts.replacer || replacer, opts.space); +module.exports = format(function (info, opts) { + var jsonStringify = stringify.configure(opts); + info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space); return info; }); \ No newline at end of file diff --git a/build/node_modules/logform/dist/logstash.js b/build/node_modules/logform/dist/logstash.js index 4a20983c..df52e4f9 100644 --- a/build/node_modules/logform/dist/logstash.js +++ b/build/node_modules/logform/dist/logstash.js @@ -5,7 +5,7 @@ var format = require('./format'); var _require = require('triple-beam'), MESSAGE = _require.MESSAGE; -var jsonStringify = require('fast-safe-stringify'); +var jsonStringify = require('safe-stable-stringify'); /* * function logstash (info) * Returns a new instance of the LogStash Format that turns a diff --git a/build/node_modules/logform/dist/pad-levels.js b/build/node_modules/logform/dist/pad-levels.js index 2f039ebc..985e7441 100644 --- a/build/node_modules/logform/dist/pad-levels.js +++ b/build/node_modules/logform/dist/pad-levels.js @@ -7,7 +7,7 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } @@ -17,7 +17,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var _require = require('triple-beam'), configs = _require.configs, @@ -44,7 +44,7 @@ var Padder = /*#__PURE__*/function () { _createClass(Padder, [{ key: "transform", - + value: /** * Prepends the padding onto the `message` based on the `LEVEL` of * the `info`. This is based on the behavior of `winston@2` which also @@ -56,7 +56,7 @@ var Padder = /*#__PURE__*/function () { * @param {Object} opts Options passed along to this instance. * @returns {Info} Modified logform info object. */ - value: function transform(info, opts) { + function transform(info, opts) { info.message = "".concat(this.paddings[info[LEVEL]]).concat(info.message); if (info[MESSAGE]) { diff --git a/build/node_modules/logform/dist/printf.js b/build/node_modules/logform/dist/printf.js index fcfa11db..77e47abb 100644 --- a/build/node_modules/logform/dist/printf.js +++ b/build/node_modules/logform/dist/printf.js @@ -4,7 +4,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var _require = require('triple-beam'), MESSAGE = _require.MESSAGE; diff --git a/build/node_modules/logform/dist/simple.js b/build/node_modules/logform/dist/simple.js index 52f12cd3..9f1ae086 100644 --- a/build/node_modules/logform/dist/simple.js +++ b/build/node_modules/logform/dist/simple.js @@ -6,7 +6,7 @@ var format = require('./format'); var _require = require('triple-beam'), MESSAGE = _require.MESSAGE; -var jsonStringify = require('fast-safe-stringify'); +var jsonStringify = require('safe-stable-stringify'); /* * function simple (info) * Returns a new instance of the simple format TransformStream diff --git a/build/node_modules/logform/dist/splat.js b/build/node_modules/logform/dist/splat.js index 0ab6bc38..50191df0 100644 --- a/build/node_modules/logform/dist/splat.js +++ b/build/node_modules/logform/dist/splat.js @@ -6,7 +6,7 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } @@ -16,7 +16,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var util = require('util'); diff --git a/build/node_modules/logform/dist/uncolorize.js b/build/node_modules/logform/dist/uncolorize.js index 0dc47c26..cf0d2564 100644 --- a/build/node_modules/logform/dist/uncolorize.js +++ b/build/node_modules/logform/dist/uncolorize.js @@ -1,6 +1,6 @@ 'use strict'; -var colors = require('colors/safe'); +var colors = require('@colors/colors/safe'); var format = require('./format'); diff --git a/build/node_modules/logform/errors.js b/build/node_modules/logform/errors.js index b7a09757..b71f4dea 100644 --- a/build/node_modules/logform/errors.js +++ b/build/node_modules/logform/errors.js @@ -28,8 +28,8 @@ module.exports = format((einfo, { stack }) => { // Assign all enumerable properties and the // message property from the error provided. - Object.assign(einfo, einfo.message); const err = einfo.message; + Object.assign(einfo, err); einfo.message = err.message; einfo[MESSAGE] = err.message; diff --git a/build/node_modules/logform/index.d.ts b/build/node_modules/logform/index.d.ts index e37a6e80..02ae253a 100644 --- a/build/node_modules/logform/index.d.ts +++ b/build/node_modules/logform/index.d.ts @@ -83,6 +83,42 @@ export interface JsonOptions { * The number of white space used to format the json. */ space?: number; + + // The following options come from safe-stable-stringify + // https://github.com/BridgeAR/safe-stable-stringify/blob/main/index.d.ts + + /** + * If `true`, bigint values are converted to a number. Otherwise, they are ignored. + * This option is ignored by default as Logform stringifies BigInt in the default replacer. + * @default true + */ + bigint?: boolean, + /** + * Defines the value for circular references. + * Set to `undefined`, circular properties are not serialized (array entries are replaced with null). + * Set to `Error`, to throw on circular references. + * @default "[Circular]" + */ + circularValue?: string | null | TypeErrorConstructor | ErrorConstructor, + /** + * If `true`, guarantee a deterministic key order instead of relying on the insertion order. + * @default true + */ + deterministic?: boolean, + /** + * Maximum number of entries to serialize per object (at least one). + * The serialized output contains information about how many entries have not been serialized. + * Ignored properties are counted as well (e.g., properties with symbol values). + * Using the array replacer overrules this option. + * @default Infinity + */ + maximumBreadth?: number, + /** + * Maximum number of object nesting levels (at least 1) that will be serialized. + * Objects at the maximum level are serialized as `"[Object]"` and arrays as `"[Array]"`. + * @default Infinity + */ + maximumDepth?: number, } export interface LabelOptions { diff --git a/build/node_modules/logform/index.js b/build/node_modules/logform/index.js index 2e663aa7..0edfc050 100644 --- a/build/node_modules/logform/index.js +++ b/build/node_modules/logform/index.js @@ -21,11 +21,10 @@ exports.levels = require('./levels'); * Exposes a sub-format on the main format object * as a lazy-loaded getter. */ -function exposeFormat(name, path) { - path = path || name; +function exposeFormat(name, requireFormat) { Object.defineProperty(format, name, { get() { - return require(`./${path}.js`); + return requireFormat(); }, configurable: true }); @@ -34,20 +33,20 @@ function exposeFormat(name, path) { // // Setup all transports as lazy-loaded getters. // -exposeFormat('align'); -exposeFormat('errors'); -exposeFormat('cli'); -exposeFormat('combine'); -exposeFormat('colorize'); -exposeFormat('json'); -exposeFormat('label'); -exposeFormat('logstash'); -exposeFormat('metadata'); -exposeFormat('ms'); -exposeFormat('padLevels', 'pad-levels'); -exposeFormat('prettyPrint', 'pretty-print'); -exposeFormat('printf'); -exposeFormat('simple'); -exposeFormat('splat'); -exposeFormat('timestamp'); -exposeFormat('uncolorize'); +exposeFormat('align', function () { return require('./align'); }); +exposeFormat('errors', function () { return require('./errors'); }); +exposeFormat('cli', function () { return require('./cli'); }); +exposeFormat('combine', function () { return require('./combine'); }); +exposeFormat('colorize', function () { return require('./colorize'); }); +exposeFormat('json', function () { return require('./json'); }); +exposeFormat('label', function () { return require('./label'); }); +exposeFormat('logstash', function () { return require('./logstash'); }); +exposeFormat('metadata', function () { return require('./metadata'); }); +exposeFormat('ms', function () { return require('./ms'); }); +exposeFormat('padLevels', function () { return require('./pad-levels'); }); +exposeFormat('prettyPrint', function () { return require('./pretty-print'); }); +exposeFormat('printf', function () { return require('./printf'); }); +exposeFormat('simple', function () { return require('./simple'); }); +exposeFormat('splat', function () { return require('./splat'); }); +exposeFormat('timestamp', function () { return require('./timestamp'); }); +exposeFormat('uncolorize', function () { return require('./uncolorize'); }); diff --git a/build/node_modules/logform/json.js b/build/node_modules/logform/json.js index dac12a68..fb91c976 100644 --- a/build/node_modules/logform/json.js +++ b/build/node_modules/logform/json.js @@ -2,16 +2,16 @@ const format = require('./format'); const { MESSAGE } = require('triple-beam'); -const jsonStringify = require('fast-safe-stringify'); +const stringify = require('safe-stable-stringify'); /* * function replacer (key, value) * Handles proper stringification of Buffer and bigint output. */ function replacer(key, value) { - if (value instanceof Buffer) - return value.toString('base64'); - // eslint-disable-next-line valid-typeof + // safe-stable-stringify does support BigInt, however, it doesn't wrap the value in quotes. + // Leading to a loss in fidelity if the resulting string is parsed. + // It would also be a breaking change for logform. if (typeof value === 'bigint') return value.toString(); return value; @@ -23,8 +23,8 @@ function replacer(key, value) { * object into pure JSON. This was previously exposed as { json: true } * to transports in `winston < 3.0.0`. */ -module.exports = format((info, opts = {}) => { - info[MESSAGE] = (opts.stable ? jsonStringify.stableStringify - : jsonStringify)(info, opts.replacer || replacer, opts.space); +module.exports = format((info, opts) => { + const jsonStringify = stringify.configure(opts); + info[MESSAGE] = jsonStringify(info, opts.replacer || replacer, opts.space); return info; }); diff --git a/build/node_modules/logform/logstash.js b/build/node_modules/logform/logstash.js index aac8492f..3493733d 100644 --- a/build/node_modules/logform/logstash.js +++ b/build/node_modules/logform/logstash.js @@ -2,7 +2,7 @@ const format = require('./format'); const { MESSAGE } = require('triple-beam'); -const jsonStringify = require('fast-safe-stringify'); +const jsonStringify = require('safe-stable-stringify'); /* * function logstash (info) diff --git a/build/node_modules/logform/package.json b/build/node_modules/logform/package.json index 2b0b47e4..acb44431 100644 --- a/build/node_modules/logform/package.json +++ b/build/node_modules/logform/package.json @@ -1,26 +1,27 @@ { - "_from": "logform@^2.2.0", - "_id": "logform@2.2.0", + "_from": "logform@^2.4.0", + "_id": "logform@2.4.0", "_inBundle": false, - "_integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "_integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", "_location": "/logform", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "logform@^2.2.0", + "raw": "logform@^2.4.0", "name": "logform", "escapedName": "logform", - "rawSpec": "^2.2.0", + "rawSpec": "^2.4.0", "saveSpec": null, - "fetchSpec": "^2.2.0" + "fetchSpec": "^2.4.0" }, "_requiredBy": [ - "/winston" + "/winston", + "/winston-transport" ], - "_resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "_shasum": "40f036d19161fc76b68ab50fdc7fe495544492f2", - "_spec": "logform@^2.2.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/logform/-/logform-2.4.0.tgz", + "_shasum": "131651715a17d50f09c2a2c1a524ff1a4164bcfe", + "_spec": "logform@^2.4.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", "author": { "name": "Charlie Robbins", @@ -32,10 +33,10 @@ }, "bundleDependencies": false, "dependencies": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.5.0", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" }, "deprecated": false, @@ -44,9 +45,10 @@ "@babel/cli": "^7.10.3", "@babel/core": "^7.10.3", "@babel/preset-env": "^7.10.3", + "@dabh/eslint-config-populist": "^5.0.0", "assume": "^2.2.0", - "eslint-config-populist": "^4.1.0", - "mocha": "^8.0.1", + "eslint": "^8.8.0", + "mocha": "^9.2.0", "nyc": "^15.1.0", "rimraf": "^3.0.2" }, @@ -66,11 +68,11 @@ }, "scripts": { "build": "rimraf dist && babel *.js -d ./dist", - "lint": "populist *.js test/*.js examples/*.js", + "lint": "eslint *.js test/*.js examples/*.js --resolve-plugins-relative-to ./node_modules/@dabh/eslint-config-populist", "prepublishOnly": "npm run build", "pretest": "npm run lint && npm run build", "test": "nyc mocha test/*.test.js" }, "types": "./index.d.ts", - "version": "2.2.0" + "version": "2.4.0" } diff --git a/build/node_modules/logform/simple.js b/build/node_modules/logform/simple.js index 09f822cc..af3254ba 100644 --- a/build/node_modules/logform/simple.js +++ b/build/node_modules/logform/simple.js @@ -3,7 +3,7 @@ const format = require('./format'); const { MESSAGE } = require('triple-beam'); -const jsonStringify = require('fast-safe-stringify'); +const jsonStringify = require('safe-stable-stringify'); /* * function simple (info) diff --git a/build/node_modules/logform/uncolorize.js b/build/node_modules/logform/uncolorize.js index baae0f04..8bd864ef 100644 --- a/build/node_modules/logform/uncolorize.js +++ b/build/node_modules/logform/uncolorize.js @@ -1,6 +1,6 @@ 'use strict'; -const colors = require('colors/safe'); +const colors = require('@colors/colors/safe'); const format = require('./format'); const { MESSAGE } = require('triple-beam'); diff --git a/build/node_modules/lolex/.editorconfig b/build/node_modules/lolex/.editorconfig deleted file mode 100644 index bdfa15e4..00000000 --- a/build/node_modules/lolex/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -; EditorConfig file: http://EditorConfig.org -; Install the "EditorConfig" plugin into your editor to use - -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true - -# Matches the exact files either package.json or .travis.yml -[{package.json, .travis.yml}] -indent_style = space -indent_size = 2 diff --git a/build/node_modules/lolex/.jslintrc b/build/node_modules/lolex/.jslintrc deleted file mode 100644 index fdb799f4..00000000 --- a/build/node_modules/lolex/.jslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "evil":true, - "vars":true, - "plusplus":true -} diff --git a/build/node_modules/lolex/.min-wd b/build/node_modules/lolex/.min-wd deleted file mode 100644 index 40f963f1..00000000 --- a/build/node_modules/lolex/.min-wd +++ /dev/null @@ -1,13 +0,0 @@ -{ - "sauceLabs": true, - "browsers": [{ - "name": "chrome" - }, { - "name": "internet explorer", - "version": "9", - "url": "http://maxantoni.de/doctype.html" - }, { - "name": "internet explorer", - "version": "10" - }] -} diff --git a/build/node_modules/lolex/.npmignore b/build/node_modules/lolex/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/build/node_modules/lolex/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/build/node_modules/lolex/.travis.yml b/build/node_modules/lolex/.travis.yml deleted file mode 100644 index c28affeb..00000000 --- a/build/node_modules/lolex/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: node_js - -sudo: false - -node_js: - - "0.10" - - "0.12" -script: - - "./script/ci-test.sh" - diff --git a/build/node_modules/lolex/Readme.md b/build/node_modules/lolex/Readme.md deleted file mode 100644 index 69b0488a..00000000 --- a/build/node_modules/lolex/Readme.md +++ /dev/null @@ -1,139 +0,0 @@ -# Lolex [![Build Status](https://secure.travis-ci.org/sinonjs/lolex.png)](http://travis-ci.org/sinonjs/lolex) - -JavaScript implementation of the timer APIs; `setTimeout`, `clearTimeout`, -`setImmediate`, `clearImmediate`, `setInterval`, `clearInterval`, and -`requestAnimationFrame`, along with a clock instance that controls the flow of -time. Lolex also provides a `Date` implementation that gets its time from the -clock. - -Lolex can be used to simulate passing time in automated tests and other -situations where you want the scheduling semantics, but don't want to actually -wait. Lolex is extracted from [Sinon.JS](https://github.com/sinonjs/sinon.js). - -## Installation - -Lolex can be installed using `npm`: - -```sh -npm install lolex -``` - -If you want to use Lolex in a browser, you have a few options. Releases are -hosted on the [sinonjs.org](http://sinonjs.org/download/) website. You can also -get the node module and build a file for the browser using browserify: - -```sh -npm install lolex -npm install browserify # If you don't already have it globally installed -browserify node_modules/lolex/lolex.js -``` - -## Usage - -To use lolex, create a new clock, schedule events on it using the timer -functions and pass time using the `tick` method. - -```js -// In the browser distribution, a global `lolex` is already available -var lolex = require("lolex"); -var clock = lolex.createClock(); - -clock.setTimeout(function () { - console.log("The poblano is a mild chili pepper originating in the state of Puebla, Mexico."); -}, 15); - -// ... - -clock.tick(15); -``` - -Upon executing the last line, an interesting fact about the -[Poblano](http://en.wikipedia.org/wiki/Poblano) will be printed synchronously to -the screen. If you want to simulate asynchronous behavior, you have to use your -imagination when calling the various functions. - -### Faking the native timers - -When using lolex to test timers, you will most likely want to replace the native -timers such that calling `setTimeout` actually schedules a callback with your -clock instance, not the browser's internals. - -To hijack timers in another context, use the `install` method. You can then call -`uninstall` later to restore things as they were again. - -```js -var lolex = require("lolex"); -var clock = lolex.install(window); - -window.setTimeout(fn, 15); // Schedules with clock.setTimeout - -clock.uninstall(); - -// window.setTimeout is restored to the native implementation -``` - -In 90% av the times, you want to install the timers onto the global object. -Calling `install` with no arguments achieves this: - -```js -var clock = lolex.install(); - -// Equivalent to -// var clock = lolex.install(typeof global !== "undefined" ? global : window); -``` - -## API Reference - -### `var clock = lolex.createClock([now])` - -### `var clock = lolex.install([context[, now[, toFake]]])` - -### `var clock = lolex.install([now[, toFake]])` - -### `var id = clock.setTimeout(callback, timeout)` - -### `clock.clearTimeout(id)` - -### `var id = clock.setInterval(callback, timeout)` - -### `clock.clearInterval(id)` - -### `var id = clock.setImmediate(callback)` - -### `clock.clearImmediate(id)` - -### `clock.tick(time)` - -### `clock.setSystemTime([now])` -This simulates a user changing the system clock while your program is running. -It affects the current time but it does not in itself cause e.g. timers to fire; they will fire exactly as they would have done without the call to setSystemTime(). - -### `clock.uninstall()` - -### `Date` - -## Running tests - -Lolex has a comprehensive test suite. If you're thinking of contributing bug -fixes or suggest new features, you need to make sure you have not broken any -tests. You are also expected to add tests for any new behavior. - -### On node: - -```sh -npm test -``` - -Or, if you prefer slightly less verbose output: - -``` -mocha ./test/lolex-test.js -``` - -### In the browser - - - -## License - -BSD 3-clause "New" or "Revised" License (see LICENSE file) diff --git a/build/node_modules/lolex/lolex.js b/build/node_modules/lolex/lolex.js deleted file mode 100644 index 6120035f..00000000 --- a/build/node_modules/lolex/lolex.js +++ /dev/null @@ -1,525 +0,0 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/build/node_modules/lolex/package.json b/build/node_modules/lolex/package.json deleted file mode 100644 index d822cada..00000000 --- a/build/node_modules/lolex/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "lolex@1.3.2", - "_id": "lolex@1.3.2", - "_inBundle": false, - "_integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "_location": "/lolex", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "lolex@1.3.2", - "name": "lolex", - "escapedName": "lolex", - "rawSpec": "1.3.2", - "saveSpec": null, - "fetchSpec": "1.3.2" - }, - "_requiredBy": [ - "/sinon" - ], - "_resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "_shasum": "7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31", - "_spec": "lolex@1.3.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", - "author": { - "name": "Christian Johansen" - }, - "bugs": { - "url": "http://github.com/sinonjs/lolex/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Fake JavaScript timers", - "devDependencies": { - "browserify": ">=5.9 <6", - "jslint": "^0.6.6", - "mocha": ">=1.21 <2", - "mochify": ">=1.0 <2", - "referee": "~1.0", - "sinon": "~1.10" - }, - "homepage": "http://github.com/sinonjs/lolex", - "license": "BSD-3-Clause", - "main": "./src/lolex.js", - "name": "lolex", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/sinonjs/lolex.git" - }, - "scripts": { - "bundle": "browserify -s lolex -o lolex.js src/lolex.js", - "lint": "$(npm bin)/jslint src/**/*.js", - "test": "npm run lint && npm run test-node && npm run test-headless && npm run test-cloud", - "test-cloud": "mochify --wd", - "test-headless": "mochify", - "test-node": "mocha -R dot" - }, - "version": "1.3.2" -} diff --git a/build/node_modules/lolex/script/ci-test.sh b/build/node_modules/lolex/script/ci-test.sh deleted file mode 100755 index cb8e2f4e..00000000 --- a/build/node_modules/lolex/script/ci-test.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -eu - -npm run test-node -npm run test-headless \ No newline at end of file diff --git a/build/node_modules/lolex/src/lolex.js b/build/node_modules/lolex/src/lolex.js deleted file mode 100644 index b7da9b31..00000000 --- a/build/node_modules/lolex/src/lolex.js +++ /dev/null @@ -1,519 +0,0 @@ -/*global global, window*/ -/** - * @author Christian Johansen (christian@cjohansen.no) and contributors - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (global) { - "use strict"; - - // Make properties writable in IE, as per - // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html - // JSLint being anal - var glbl = global; - - global.setTimeout = glbl.setTimeout; - global.clearTimeout = glbl.clearTimeout; - global.setInterval = glbl.setInterval; - global.clearInterval = glbl.clearInterval; - global.Date = glbl.Date; - - // setImmediate is not a standard function - // avoid adding the prop to the window object if not present - if('setImmediate' in global) { - global.setImmediate = glbl.setImmediate; - global.clearImmediate = glbl.clearImmediate; - } - - // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() - // browsers, a number. - // see https://github.com/cjohansen/Sinon.JS/pull/436 - - var NOOP = function () { return undefined; }; - var timeoutResult = setTimeout(NOOP, 0); - var addTimerReturnsObject = typeof timeoutResult === "object"; - clearTimeout(timeoutResult); - - var NativeDate = Date; - var uniqueTimerId = 1; - - /** - * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into - * number of milliseconds. This is used to support human-readable strings passed - * to clock.tick() - */ - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); diff --git a/build/node_modules/lolex/test/lolex-test.js b/build/node_modules/lolex/test/lolex-test.js deleted file mode 100644 index a1ef996f..00000000 --- a/build/node_modules/lolex/test/lolex-test.js +++ /dev/null @@ -1,1260 +0,0 @@ -/*global - describe, - beforeEach, - afterEach, - it, - assert -*/ -/** - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -if (typeof require === "function" && typeof module === "object") { - var referee = require("referee"); - var lolex = require("../src/lolex"); - var sinon = require("sinon"); - - global.lolex = lolex; // For testing eval -} - -var assert = referee.assert; -var refute = referee.refute; -var GlobalDate = Date; -var NOOP = function NOOP() { return undefined; }; - -describe("lolex", function () { - - describe("setTimeout", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - lolex.evalCalled = false; - }); - - afterEach(function () { - delete lolex.evalCalled; - }); - - it("throws if no arguments", function () { - var clock = this.clock; - - assert.exception(function () { clock.setTimeout(); }); - }); - - it("returns numeric id or object with numeric id", function () { - var result = this.clock.setTimeout(""); - - if (typeof result === 'object') { - assert.isNumber(result.id); - } else { - assert.isNumber(result); - } - }); - - it("returns unique id", function () { - var id1 = this.clock.setTimeout(""); - var id2 = this.clock.setTimeout(""); - - refute.equals(id2, id1); - }); - - it("sets timers on instance", function () { - var clock1 = lolex.createClock(); - var clock2 = lolex.createClock(); - var stubs = [sinon.stub(), sinon.stub()]; - - clock1.setTimeout(stubs[0], 100); - clock2.setTimeout(stubs[1], 100); - clock2.tick(200); - - assert.isFalse(stubs[0].called); - assert(stubs[1].called); - }); - - it("evals non-function callbacks", function () { - this.clock.setTimeout("lolex.evalCalled = true", 10); - this.clock.tick(10); - - assert(lolex.evalCalled); - }); - - it("passes setTimeout parameters", function () { - var clock = lolex.createClock(); - var stub = sinon.stub(); - - clock.setTimeout(stub, 2, "the first", "the second"); - - clock.tick(3); - - assert.isTrue(stub.calledWithExactly("the first", "the second")); - }); - - it("calls correct timeout on recursive tick", function () { - var clock = lolex.createClock(); - var stub = sinon.stub(); - var recurseCallback = function () { clock.tick(100); }; - - clock.setTimeout(recurseCallback, 50); - clock.setTimeout(stub, 100); - - clock.tick(50); - assert(stub.called); - }); - - it("does not depend on this", function () { - var clock = lolex.createClock(); - var stub = sinon.stub(); - var setTimeout = clock.setTimeout; - - setTimeout(stub, 100); - - clock.tick(100); - assert(stub.called); - }); - - it("is not influenced by forward system clock changes", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub, 5000); - this.clock.tick(1000); - this.clock.setSystemTime((new this.clock.Date()).getTime() + 1000); - this.clock.tick(3990); - assert.equals(stub.callCount, 0); - this.clock.tick(20); - assert.equals(stub.callCount, 1); - }); - - it("is not influenced by backward system clock changes", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub, 5000); - this.clock.tick(1000); - this.clock.setSystemTime((new this.clock.Date()).getTime() - 1000); - this.clock.tick(3990); - assert.equals(stub.callCount, 0); - this.clock.tick(20); - assert.equals(stub.callCount, 1); - }); - }); - - describe("setImmediate", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("returns numeric id or object with numeric id", function () { - var result = this.clock.setImmediate(NOOP); - - if (typeof result === 'object') { - assert.isNumber(result.id); - } else { - assert.isNumber(result); - } - }); - - it("calls the given callback immediately", function () { - var stub = sinon.stub(); - - this.clock.setImmediate(stub); - this.clock.tick(0); - - assert(stub.called); - }); - - it("throws if no arguments", function () { - var clock = this.clock; - - assert.exception(function () { - clock.setImmediate(); - }); - }); - - it("manages separate timers per clock instance", function () { - var clock1 = lolex.createClock(); - var clock2 = lolex.createClock(); - var stubs = [sinon.stub(), sinon.stub()]; - - clock1.setImmediate(stubs[0]); - clock2.setImmediate(stubs[1]); - clock2.tick(0); - - assert.isFalse(stubs[0].called); - assert(stubs[1].called); - }); - - it("passes extra parameters through to the callback", function () { - var stub = sinon.stub(); - - this.clock.setImmediate(stub, 'value1', 2); - this.clock.tick(1); - - assert(stub.calledWithExactly('value1', 2)); - }); - - it("calls the given callback before setTimeout", function () { - var stub1 = sinon.stub.create(); - var stub2 = sinon.stub.create(); - - this.clock.setTimeout(stub1, 0); - this.clock.setImmediate(stub2); - this.clock.tick(0); - - assert(stub1.calledOnce); - assert(stub2.calledOnce); - assert(stub2.calledBefore(stub1)); - }); - - it("does not stuck next tick even if nested", function () { - var clock = this.clock; - - clock.setImmediate(function f() { - clock.setImmediate(f); - }); - - clock.tick(0); - }); - }); - - describe("clearImmediate", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("removes immediate callbacks", function () { - var callback = sinon.stub(); - - var id = this.clock.setImmediate(callback); - this.clock.clearImmediate(id); - this.clock.tick(1); - - assert.isFalse(callback.called); - }); - - it("does not remove timeout", function () { - var callback = sinon.stub(); - - var id = this.clock.setTimeout(callback, 50); - assert.exception(function() { - this.clock.clearImmediate(id); - }); - this.clock.tick(55); - - assert.isTrue(callback.called); - }); - - it("does not remove interval", function () { - var callback = sinon.stub(); - - var id = this.clock.setInterval(callback, 50); - assert.exception(function() { - this.clock.clearImmediate(id); - }); - this.clock.tick(55); - - assert.isTrue(callback.called); - }); - - }); - - describe("tick", function () { - - beforeEach(function () { - this.clock = lolex.install(0); - }); - - afterEach(function () { - this.clock.uninstall(); - }); - - it("triggers immediately without specified delay", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub); - - this.clock.tick(0); - - assert(stub.called); - }); - - it("does not trigger without sufficient delay", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub, 100); - this.clock.tick(10); - - assert.isFalse(stub.called); - }); - - it("triggers after sufficient delay", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub, 100); - this.clock.tick(100); - - assert(stub.called); - }); - - it("triggers simultaneous timers", function () { - var spies = [sinon.spy(), sinon.spy()]; - this.clock.setTimeout(spies[0], 100); - this.clock.setTimeout(spies[1], 100); - - this.clock.tick(100); - - assert(spies[0].called); - assert(spies[1].called); - }); - - it("triggers multiple simultaneous timers", function () { - var spies = [sinon.spy(), sinon.spy(), sinon.spy(), sinon.spy()]; - this.clock.setTimeout(spies[0], 100); - this.clock.setTimeout(spies[1], 100); - this.clock.setTimeout(spies[2], 99); - this.clock.setTimeout(spies[3], 100); - - this.clock.tick(100); - - assert(spies[0].called); - assert(spies[1].called); - assert(spies[2].called); - assert(spies[3].called); - }); - - it("triggers multiple simultaneous timers with zero callAt", function () { - var test = this; - var spies = [ - sinon.spy(function () { - test.clock.setTimeout(spies[1], 0); - }), - sinon.spy(), - sinon.spy() - ]; - - // First spy calls another setTimeout with delay=0 - this.clock.setTimeout(spies[0], 0); - this.clock.setTimeout(spies[2], 10); - - this.clock.tick(10); - - assert(spies[0].called); - assert(spies[1].called); - assert(spies[2].called); - }); - - it("waits after setTimeout was called", function () { - this.clock.tick(100); - var stub = sinon.stub(); - this.clock.setTimeout(stub, 150); - this.clock.tick(50); - - assert.isFalse(stub.called); - this.clock.tick(100); - assert(stub.called); - }); - - it("mini integration test", function () { - var stubs = [sinon.stub(), sinon.stub(), sinon.stub()]; - this.clock.setTimeout(stubs[0], 100); - this.clock.setTimeout(stubs[1], 120); - this.clock.tick(10); - this.clock.tick(89); - assert.isFalse(stubs[0].called); - assert.isFalse(stubs[1].called); - this.clock.setTimeout(stubs[2], 20); - this.clock.tick(1); - assert(stubs[0].called); - assert.isFalse(stubs[1].called); - assert.isFalse(stubs[2].called); - this.clock.tick(19); - assert.isFalse(stubs[1].called); - assert(stubs[2].called); - this.clock.tick(1); - assert(stubs[1].called); - }); - - it("triggers even when some throw", function () { - var clock = this.clock; - var stubs = [sinon.stub().throws(), sinon.stub()]; - - clock.setTimeout(stubs[0], 100); - clock.setTimeout(stubs[1], 120); - - assert.exception(function () { - clock.tick(120); - }); - - assert(stubs[0].called); - assert(stubs[1].called); - }); - - it("calls function with global object or null (strict mode) as this", function () { - var clock = this.clock; - var stub = sinon.stub().throws(); - clock.setTimeout(stub, 100); - - assert.exception(function () { - clock.tick(100); - }); - - assert(stub.calledOn(global) || stub.calledOn(null)); - }); - - it("triggers in the order scheduled", function () { - var spies = [sinon.spy(), sinon.spy()]; - this.clock.setTimeout(spies[0], 13); - this.clock.setTimeout(spies[1], 11); - - this.clock.tick(15); - - assert(spies[1].calledBefore(spies[0])); - }); - - it("creates updated Date while ticking", function () { - var spy = sinon.spy(); - - this.clock.setInterval(function () { - spy(new Date().getTime()); - }, 10); - - this.clock.tick(100); - - assert.equals(spy.callCount, 10); - assert(spy.calledWith(10)); - assert(spy.calledWith(20)); - assert(spy.calledWith(30)); - assert(spy.calledWith(40)); - assert(spy.calledWith(50)); - assert(spy.calledWith(60)); - assert(spy.calledWith(70)); - assert(spy.calledWith(80)); - assert(spy.calledWith(90)); - assert(spy.calledWith(100)); - }); - - it("fires timer in intervals of 13", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 13); - - this.clock.tick(500); - - assert.equals(spy.callCount, 38); - }); - - it("fires timers in correct order", function () { - var spy13 = sinon.spy(); - var spy10 = sinon.spy(); - - this.clock.setInterval(function () { - spy13(new Date().getTime()); - }, 13); - - this.clock.setInterval(function () { - spy10(new Date().getTime()); - }, 10); - - this.clock.tick(500); - - assert.equals(spy13.callCount, 38); - assert.equals(spy10.callCount, 50); - - assert(spy13.calledWith(416)); - assert(spy10.calledWith(320)); - - assert(spy10.getCall(0).calledBefore(spy13.getCall(0))); - assert(spy10.getCall(4).calledBefore(spy13.getCall(3))); - }); - - it("triggers timeouts and intervals in the order scheduled", function () { - var spies = [sinon.spy(), sinon.spy()]; - this.clock.setInterval(spies[0], 10); - this.clock.setTimeout(spies[1], 50); - - this.clock.tick(100); - - assert(spies[0].calledBefore(spies[1])); - assert.equals(spies[0].callCount, 10); - assert.equals(spies[1].callCount, 1); - }); - - it("does not fire canceled intervals", function () { - var id; - var callback = sinon.spy(function () { - if (callback.callCount === 3) { - clearInterval(id); - } - }); - - id = this.clock.setInterval(callback, 10); - this.clock.tick(100); - - assert.equals(callback.callCount, 3); - }); - - it("passes 6 seconds", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 4000); - - this.clock.tick("08"); - - assert.equals(spy.callCount, 2); - }); - - it("passes 1 minute", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 6000); - - this.clock.tick("01:00"); - - assert.equals(spy.callCount, 10); - }); - - it("passes 2 hours, 34 minutes and 12 seconds", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 10000); - - this.clock.tick("02:34:10"); - - assert.equals(spy.callCount, 925); - }); - - it("throws for invalid format", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 10000); - var test = this; - - assert.exception(function () { - test.clock.tick("12:02:34:10"); - }); - - assert.equals(spy.callCount, 0); - }); - - it("throws for invalid minutes", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 10000); - var test = this; - - assert.exception(function () { - test.clock.tick("67:10"); - }); - - assert.equals(spy.callCount, 0); - }); - - it("throws for negative minutes", function () { - var spy = sinon.spy(); - this.clock.setInterval(spy, 10000); - var test = this; - - assert.exception(function () { - test.clock.tick("-7:10"); - }); - - assert.equals(spy.callCount, 0); - }); - - it("treats missing argument as 0", function () { - this.clock.tick(); - - assert.equals(this.clock.now, 0); - }); - - it("fires nested setTimeout calls properly", function () { - var i = 0; - var clock = this.clock; - - var callback = function () { - ++i; - clock.setTimeout(function () { - callback(); - }, 100); - }; - - callback(); - - clock.tick(1000); - - assert.equals(i, 11); - }); - - it("does not silently catch errors", function () { - var clock = this.clock; - - clock.setTimeout(function () { - throw new Error("oh no!"); - }, 1000); - - assert.exception(function () { - clock.tick(1000); - }); - }); - - it("returns the current now value", function () { - var clock = this.clock; - var value = clock.tick(200); - assert.equals(clock.now, value); - }); - }); - - describe("clearTimeout", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("removes timeout", function () { - var stub = sinon.stub(); - var id = this.clock.setTimeout(stub, 50); - this.clock.clearTimeout(id); - this.clock.tick(50); - - assert.isFalse(stub.called); - }); - - it("does not remove interval", function () { - var stub = sinon.stub(); - var id = this.clock.setInterval(stub, 50); - assert.exception(function() { - this.clock.clearTimeout(id); - }); - this.clock.tick(50); - - assert.isTrue(stub.called); - }); - - it("does not remove immediate", function () { - var stub = sinon.stub(); - var id = this.clock.setImmediate(stub); - assert.exception(function() { - this.clock.clearTimeout(id); - }); - this.clock.tick(50); - - assert.isTrue(stub.called); - }); - - it("ignores null argument", function () { - this.clock.clearTimeout(null); - assert(true); // doesn't fail - }); - }); - - describe("reset", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("empties timeouts queue", function () { - var stub = sinon.stub(); - this.clock.setTimeout(stub); - this.clock.reset(); - this.clock.tick(0); - - assert.isFalse(stub.called); - }); - }); - - describe("setInterval", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("throws if no arguments", function () { - var clock = this.clock; - - assert.exception(function () { - clock.setInterval(); - }); - }); - - it("returns numeric id or object with numeric id", function () { - var result = this.clock.setInterval(""); - - if (typeof result === 'object') { - assert.isNumber(result.id); - } else { - assert.isNumber(result); - } - }); - - it("returns unique id", function () { - var id1 = this.clock.setInterval(""); - var id2 = this.clock.setInterval(""); - - refute.equals(id2, id1); - }); - - it("schedules recurring timeout", function () { - var stub = sinon.stub(); - this.clock.setInterval(stub, 10); - this.clock.tick(99); - - assert.equals(stub.callCount, 9); - }); - - it("is not influenced by forward system clock changes", function () { - var stub = sinon.stub(); - this.clock.setInterval(stub, 10); - this.clock.tick(11); - assert.equals(stub.callCount, 1); - this.clock.setSystemTime((new this.clock.Date()).getTime() + 1000); - this.clock.tick(8); - assert.equals(stub.callCount, 1); - this.clock.tick(3); - assert.equals(stub.callCount, 2); - }); - - it("is not influenced by backward system clock changes", function () { - var stub = sinon.stub(); - this.clock.setInterval(stub, 10); - this.clock.tick(5); - this.clock.setSystemTime((new this.clock.Date()).getTime() - 1000); - this.clock.tick(6); - assert.equals(stub.callCount, 1); - this.clock.tick(10); - assert.equals(stub.callCount, 2); - }); - - it("does not schedule recurring timeout when cleared", function () { - var clock = this.clock; - var id; - var stub = sinon.spy(function () { - if (stub.callCount === 3) { - clock.clearInterval(id); - } - }); - - id = this.clock.setInterval(stub, 10); - this.clock.tick(100); - - assert.equals(stub.callCount, 3); - }); - - it("passes setTimeout parameters", function () { - var clock = lolex.createClock(); - var stub = sinon.stub(); - - clock.setInterval(stub, 2, "the first", "the second"); - - clock.tick(3); - - assert.isTrue(stub.calledWithExactly("the first", "the second")); - }); - }); - - describe("clearInterval", function () { - - beforeEach(function () { - this.clock = lolex.createClock(); - }); - - it("removes interval", function () { - var stub = sinon.stub(); - var id = this.clock.setInterval(stub, 50); - this.clock.clearInterval(id); - this.clock.tick(50); - - assert.isFalse(stub.called); - }); - - it("does not remove timeout", function () { - var stub = sinon.stub(); - var id = this.clock.setTimeout(stub, 50); - assert.exception(function() { - this.clock.clearInterval(id); - }); - this.clock.tick(50); - assert.isTrue(stub.called); - }); - - it("does not remove immediate", function () { - var stub = sinon.stub(); - var id = this.clock.setImmediate(stub); - assert.exception(function() { - this.clock.clearInterval(id); - }); - this.clock.tick(50); - - assert.isTrue(stub.called); - }); - - it("ignores null argument", function () { - this.clock.clearInterval(null); - assert(true); // doesn't fail - }); - }); - - describe("date", function () { - - beforeEach(function () { - this.now = new GlobalDate().getTime() - 3000; - this.clock = lolex.createClock(this.now); - this.Date = global.Date; - }); - - afterEach(function () { - global.Date = this.Date; - }); - - it("provides date constructor", function () { - assert.isFunction(this.clock.Date); - }); - - it("creates real Date objects", function () { - var date = new this.clock.Date(); - - assert(Date.prototype.isPrototypeOf(date)); - }); - - it("creates real Date objects when called as function", function () { - var date = this.clock.Date(); - - assert(Date.prototype.isPrototypeOf(date)); - }); - - it("creates real Date objects when Date constructor is gone", function () { - var realDate = new Date(); - Date = NOOP; - global.Date = NOOP; - - var date = new this.clock.Date(); - - assert.same(date.constructor.prototype, realDate.constructor.prototype); - }); - - it("creates Date objects representing clock time", function () { - var date = new this.clock.Date(); - - assert.equals(date.getTime(), new Date(this.now).getTime()); - }); - - it("returns Date object representing clock time", function () { - var date = this.clock.Date(); - - assert.equals(date.getTime(), new Date(this.now).getTime()); - }); - - it("listens to ticking clock", function () { - var date1 = new this.clock.Date(); - this.clock.tick(3); - var date2 = new this.clock.Date(); - - assert.equals(date2.getTime() - date1.getTime(), 3); - }); - - it("listens to system clock changes", function () { - var date1 = new this.clock.Date(); - this.clock.setSystemTime(date1.getTime() + 1000); - var date2 = new this.clock.Date(); - - assert.equals(date2.getTime() - date1.getTime(), 1000); - }); - - it("creates regular date when passing timestamp", function () { - var date = new Date(); - var fakeDate = new this.clock.Date(date.getTime()); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with timestamp", function () { - var date = new Date(); - var fakeDate = this.clock.Date(date.getTime()); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing year, month", function () { - var date = new Date(2010, 4); - var fakeDate = new this.clock.Date(2010, 4); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with year, month", function () { - var date = new Date(2010, 4); - var fakeDate = this.clock.Date(2010, 4); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing y, m, d", function () { - var date = new Date(2010, 4, 2); - var fakeDate = new this.clock.Date(2010, 4, 2); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with y, m, d", function () { - var date = new Date(2010, 4, 2); - var fakeDate = this.clock.Date(2010, 4, 2); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing y, m, d, h", function () { - var date = new Date(2010, 4, 2, 12); - var fakeDate = new this.clock.Date(2010, 4, 2, 12); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with y, m, d, h", function () { - var date = new Date(2010, 4, 2, 12); - var fakeDate = this.clock.Date(2010, 4, 2, 12); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing y, m, d, h, m", function () { - var date = new Date(2010, 4, 2, 12, 42); - var fakeDate = new this.clock.Date(2010, 4, 2, 12, 42); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with y, m, d, h, m", function () { - var date = new Date(2010, 4, 2, 12, 42); - var fakeDate = this.clock.Date(2010, 4, 2, 12, 42); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing y, m, d, h, m, s", function () { - var date = new Date(2010, 4, 2, 12, 42, 53); - var fakeDate = new this.clock.Date(2010, 4, 2, 12, 42, 53); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with y, m, d, h, m, s", function () { - var date = new Date(2010, 4, 2, 12, 42, 53); - var fakeDate = this.clock.Date(2010, 4, 2, 12, 42, 53); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("creates regular date when passing y, m, d, h, m, s, ms", function () { - var date = new Date(2010, 4, 2, 12, 42, 53, 498); - var fakeDate = new this.clock.Date(2010, 4, 2, 12, 42, 53, 498); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("returns regular date when calling with y, m, d, h, m, s, ms", function () { - var date = new Date(2010, 4, 2, 12, 42, 53, 498); - var fakeDate = this.clock.Date(2010, 4, 2, 12, 42, 53, 498); - - assert.equals(fakeDate.getTime(), date.getTime()); - }); - - it("mirrors native Date.prototype", function () { - assert.same(this.clock.Date.prototype, Date.prototype); - }); - - it("supports now method if present", function () { - assert.same(typeof this.clock.Date.now, typeof Date.now); - }); - - if (Date.now) { - describe("now", function () { - it("returns clock.now", function () { - var clock_now = this.clock.Date.now(); - var global_now = GlobalDate.now(); - - assert(this.now <= clock_now && clock_now <= global_now); - }); - }); - } else { - describe("unsupported now", function () { - it("is undefined", function () { - refute.defined(this.clock.Date.now); - }); - }); - } - - it("mirrors parse method", function () { - assert.same(this.clock.Date.parse, Date.parse); - }); - - it("mirrors UTC method", function () { - assert.same(this.clock.Date.UTC, Date.UTC); - }); - - it("mirrors toUTCString method", function () { - assert.same(this.clock.Date.prototype.toUTCString, Date.prototype.toUTCString); - }); - - if (Date.toSource) { - describe("toSource", function () { - - it("is mirrored", function () { - assert.same(this.clock.Date.toSource(), Date.toSource()); - }); - - }); - } else { - describe("unsupported toSource", function () { - - it("is undefined", function () { - refute.defined(this.clock.Date.toSource); - }); - - }); - } - - it("mirrors toString", function () { - assert.same(this.clock.Date.toString(), Date.toString()); - }); - }); - - describe("stubTimers", function () { - - beforeEach(function () { - this.dateNow = global.Date.now; - }); - - afterEach(function () { - if (this.clock) { - this.clock.uninstall(); - } - - clearTimeout(this.timer); - if (this.dateNow === undefined) { - delete global.Date.now; - } else { - global.Date.now = this.dateNow; - } - }); - - it("returns clock object", function () { - this.clock = lolex.install(); - - assert.isObject(this.clock); - assert.isFunction(this.clock.tick); - }); - - it("has clock property", function () { - this.clock = lolex.install(); - - assert.same(setTimeout.clock, this.clock); - assert.same(clearTimeout.clock, this.clock); - assert.same(setInterval.clock, this.clock); - assert.same(clearInterval.clock, this.clock); - assert.same(Date.clock, this.clock); - }); - - it("sets initial timestamp", function () { - this.clock = lolex.install(1400); - - assert.equals(this.clock.now, 1400); - }); - - it("replaces global setTimeout", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - - setTimeout(stub, 1000); - this.clock.tick(1000); - - assert(stub.called); - }); - - it("global fake setTimeout should return id", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - - var to = setTimeout(stub, 1000); - - if (typeof (setTimeout(NOOP, 0)) === 'object') { - assert.isNumber(to.id); - assert.isFunction(to.ref); - assert.isFunction(to.unref); - } else { - assert.isNumber(to); - } - }); - - it("replaces global clearTimeout", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - - clearTimeout(setTimeout(stub, 1000)); - this.clock.tick(1000); - - assert.isFalse(stub.called); - }); - - it("uninstalls global setTimeout", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - this.clock.uninstall(); - - this.timer = setTimeout(stub, 1000); - this.clock.tick(1000); - - assert.isFalse(stub.called); - assert.same(setTimeout, lolex.timers.setTimeout); - }); - - it("uninstalls global clearTimeout", function () { - this.clock = lolex.install(); - sinon.stub(); - this.clock.uninstall(); - - assert.same(clearTimeout, lolex.timers.clearTimeout); - }); - - it("replaces global setInterval", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - - setInterval(stub, 500); - this.clock.tick(1000); - - assert(stub.calledTwice); - }); - - it("replaces global clearInterval", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - - clearInterval(setInterval(stub, 500)); - this.clock.tick(1000); - - assert.isFalse(stub.called); - }); - - it("uninstalls global setInterval", function () { - this.clock = lolex.install(); - var stub = sinon.stub(); - this.clock.uninstall(); - - this.timer = setInterval(stub, 1000); - this.clock.tick(1000); - - assert.isFalse(stub.called); - assert.same(setInterval, lolex.timers.setInterval); - }); - - it("uninstalls global clearInterval", function () { - this.clock = lolex.install(); - sinon.stub(); - this.clock.uninstall(); - - assert.same(clearInterval, lolex.timers.clearInterval); - }); - - if (global.__proto__) { - delete global.hasOwnPropertyTest; - global.__proto__.hasOwnPropertyTest = function() {}; - - if (!global.hasOwnProperty("hasOwnPropertyTest")) { - it("deletes global property on uninstall if it was inherited onto the global object", function () { - // Give the global object an inherited 'tick' method - delete global.tick; - global.__proto__.tick = function() { }; - - this.clock = lolex.install(0, ['tick']); - assert.isTrue(global.hasOwnProperty("tick")); - this.clock.uninstall(); - - assert.isFalse(global.hasOwnProperty("tick")); - delete global.__proto__.tick; - }); - } - - delete global.__proto__.hasOwnPropertyTest; - } - - it("uninstalls global property on uninstall if it is present on the global object itself", function () { - // Directly give the global object a tick method - global.tick = NOOP; - - this.clock = lolex.install(0, ['tick']); - assert.isTrue(global.hasOwnProperty("tick")); - this.clock.uninstall(); - - assert.isTrue(global.hasOwnProperty("tick")); - delete global.tick; - }); - - it("fakes Date constructor", function () { - this.clock = lolex.install(0); - var now = new Date(); - - refute.same(Date, lolex.timers.Date); - assert.equals(now.getTime(), 0); - }); - - it("fake Date constructor should mirror Date's properties", function () { - this.clock = lolex.install(0); - - assert(!!Date.parse); - assert(!!Date.UTC); - }); - - it("decide on Date.now support at call-time when supported", function () { - global.Date.now = NOOP; - this.clock = lolex.install(0); - - assert.equals(typeof Date.now, "function"); - }); - - it("decide on Date.now support at call-time when unsupported", function () { - global.Date.now = undefined; - this.clock = lolex.install(0); - - refute.defined(Date.now); - }); - - // TODO: The following tests causes test suite instability - - it("mirrors custom Date properties", function () { - var f = function () { }; - global.Date.format = f; - this.clock = lolex.install(); - - assert.equals(Date.format, f); - }); - - it("uninstalls Date constructor", function () { - this.clock = lolex.install(0); - this.clock.uninstall(); - - assert.same(GlobalDate, lolex.timers.Date); - }); - - it("fakes provided methods", function () { - this.clock = lolex.install(0, ["setTimeout", "Date", "setImmediate"]); - - refute.same(setTimeout, lolex.timers.setTimeout); - refute.same(Date, lolex.timers.Date); - }); - - it("resets faked methods", function () { - this.clock = lolex.install(0, ["setTimeout", "Date", "setImmediate"]); - this.clock.uninstall(); - - assert.same(setTimeout, lolex.timers.setTimeout); - assert.same(Date, lolex.timers.Date); - }); - - it("does not fake methods not provided", function () { - this.clock = lolex.install(0, ["setTimeout", "Date", "setImmediate"]); - - assert.same(clearTimeout, lolex.timers.clearTimeout); - assert.same(setInterval, lolex.timers.setInterval); - assert.same(clearInterval, lolex.timers.clearInterval); - }); - - it("does not be able to use date object for now", function () { - assert.exception(function () { - lolex.install(new Date(2011, 9, 1)); - }); - }); - }); -}); diff --git a/build/node_modules/lru-cache/.npmignore b/build/node_modules/lru-cache/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/build/node_modules/lru-cache/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/build/node_modules/lru-cache/.travis.yml b/build/node_modules/lru-cache/.travis.yml deleted file mode 100644 index 4af02b3d..00000000 --- a/build/node_modules/lru-cache/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - '0.8' - - '0.10' - - '0.12' - - 'iojs' -before_install: - - npm install -g npm@latest diff --git a/build/node_modules/lru-cache/CONTRIBUTORS b/build/node_modules/lru-cache/CONTRIBUTORS deleted file mode 100644 index 4a0bc503..00000000 --- a/build/node_modules/lru-cache/CONTRIBUTORS +++ /dev/null @@ -1,14 +0,0 @@ -# Authors, sorted by whether or not they are me -Isaac Z. Schlueter -Brian Cottingham -Carlos Brito Lage -Jesse Dailey -Kevin O'Hara -Marco Rogers -Mark Cavage -Marko Mikulicic -Nathan Rajlich -Satheesh Natesan -Trent Mick -ashleybrener -n4kz diff --git a/build/node_modules/lru-cache/README.md b/build/node_modules/lru-cache/README.md index c06814e0..435dfebb 100644 --- a/build/node_modules/lru-cache/README.md +++ b/build/node_modules/lru-cache/README.md @@ -2,20 +2,40 @@ A cache object that deletes the least-recently-used items. +[![Build Status](https://travis-ci.org/isaacs/node-lru-cache.svg?branch=master)](https://travis-ci.org/isaacs/node-lru-cache) [![Coverage Status](https://coveralls.io/repos/isaacs/node-lru-cache/badge.svg?service=github)](https://coveralls.io/github/isaacs/node-lru-cache) + +## Installation: + +```javascript +npm install lru-cache --save +``` + ## Usage: ```javascript var LRU = require("lru-cache") , options = { max: 500 - , length: function (n) { return n * 2 } + , length: function (n, key) { return n * 2 + key.length } , dispose: function (key, n) { n.close() } , maxAge: 1000 * 60 * 60 } - , cache = LRU(options) - , otherCache = LRU(50) // sets just the max size + , cache = new LRU(options) + , otherCache = new LRU(50) // sets just the max size cache.set("key", "value") cache.get("key") // "value" +// non-string keys ARE fully supported +// but note that it must be THE SAME object, not +// just a JSON-equivalent object. +var someObject = { a: 1 } +cache.set(someObject, 'a value') +// Object keys are not toString()-ed +cache.set('[object Object]', 'a different value') +assert.equal(cache.get(someObject), 'a value') +// A similar object with same keys/values won't work, +// because it's a different object identity +assert.equal(cache.get({ a: 1 }), undefined) + cache.reset() // empty the cache ``` @@ -24,38 +44,24 @@ If you put more stuff in it, then items will fall out. If you try to put an oversized thing in it, then it'll fall out right away. -## Keys should always be Strings or Numbers - -Note: this module will print warnings to `console.error` if you use a -key that is not a String or Number. Because items are stored in an -object, which coerces keys to a string, it won't go well for you if -you try to use a key that is not a unique string, it'll cause surprise -collisions. For example: - -```JavaScript -// Bad Example! Dont' do this! -var cache = LRU() -var a = {} -var b = {} -cache.set(a, 'this is a') -cache.set(b, 'this is b') -console.log(cache.get(a)) // prints: 'this is b' -``` - ## Options * `max` The maximum size of the cache, checked by applying the length function to all values in the cache. Not setting this is kind of silly, since that's the whole purpose of this lib, but it defaults - to `Infinity`. + to `Infinity`. Setting it to a non-number or negative number will + throw a `TypeError`. Setting it to 0 makes it be `Infinity`. * `maxAge` Maximum age in ms. Items are not pro-actively pruned out as they age, but if you try to get an item that is too old, it'll drop it and return undefined instead of giving it to you. + Setting this to a negative value will make everything seem old! + Setting it to a non-number will throw a `TypeError`. * `length` Function that is used to calculate the length of stored items. If you're storing strings or buffers, then you probably want - to do something like `function(n){return n.length}`. The default is - `function(n){return 1}`, which is fine if you want to store `max` - like-sized things. + to do something like `function(n, key){return n.length}`. The default is + `function(){return 1}`, which is fine if you want to store `max` + like-sized things. The item is passed as the first argument, and + the key is passed as the second argumnet. * `dispose` Function that is called on items when they are dropped from the cache. This can be handy if you want to close file descriptors or do other cleanup tasks when items are no longer @@ -69,6 +75,15 @@ console.log(cache.get(a)) // prints: 'this is b' `stale:true`, it'll return the stale value before deleting it. If you don't set this, then it'll return `undefined` when you try to get a stale entry, as if it had already been deleted. +* `noDisposeOnSet` By default, if you set a `dispose()` method, then + it'll be called whenever a `set()` operation overwrites an existing + key. If you set this option, `dispose()` will only be called when a + key falls out of the cache, not when it is overwritten. +* `updateAgeOnGet` When using time-expiring entries with `maxAge`, + setting this to `true` will make each item's effective time update + to the current time whenever it is retrieved from cache, causing it + to not expire. (It can still fall out of cache based on recency of + use, of course.) ## API @@ -76,8 +91,12 @@ console.log(cache.get(a)) // prints: 'this is b' * `get(key) => value` Both of these will update the "recently used"-ness of the key. - They do what you think. `max` is optional and overrides the - cache `max` option if provided. + They do what you think. `maxAge` is optional and overrides the + cache `maxAge` option if provided. + + If the key is not found, `get()` will return `undefined`. + + The key and val can be any value. * `peek(key)` @@ -107,6 +126,12 @@ console.log(cache.get(a)) // prints: 'this is b' in the cache, in order of recent-ness. (Ie, more recently used items are iterated over first.) +* `rforEach(function(value,key,cache), [thisp])` + + The same as `cache.forEach(...)` but items are iterated over in + reverse order. (ie, less recently used items are iterated over + first.) + * `keys()` Return an array of the keys in the cache. @@ -115,7 +140,7 @@ console.log(cache.get(a)) // prints: 'this is b' Return an array of the values in the cache. -* `length()` +* `length` Return total length of objects in cache taking into account `length` options function. @@ -135,3 +160,7 @@ console.log(cache.get(a)) // prints: 'this is b' Loads another cache entries array, obtained with `sourceCache.dump()`, into the cache. The destination cache is reset before loading new entries + +* `prune()` + + Manually iterates over the entire cache proactively pruning old entries diff --git a/build/node_modules/lru-cache/index.js b/build/node_modules/lru-cache/index.js new file mode 100644 index 00000000..573b6b85 --- /dev/null +++ b/build/node_modules/lru-cache/index.js @@ -0,0 +1,334 @@ +'use strict' + +// A linked list to keep track of recently-used-ness +const Yallist = require('yallist') + +const MAX = Symbol('max') +const LENGTH = Symbol('length') +const LENGTH_CALCULATOR = Symbol('lengthCalculator') +const ALLOW_STALE = Symbol('allowStale') +const MAX_AGE = Symbol('maxAge') +const DISPOSE = Symbol('dispose') +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') +const LRU_LIST = Symbol('lruList') +const CACHE = Symbol('cache') +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') + +const naiveLength = () => 1 + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options } + + if (!options) + options = {} + + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + const max = this[MAX] = options.max || Infinity + + const lc = options.length || naiveLength + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc + this[ALLOW_STALE] = options.stale || false + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0 + this[DISPOSE] = options.dispose + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false + this.reset() + } + + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') + + this[MAX] = mL || Infinity + trim(this) + } + get max () { + return this[MAX] + } + + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale + } + get allowStale () { + return this[ALLOW_STALE] + } + + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') + + this[MAX_AGE] = mA + trim(this) + } + get maxAge () { + return this[MAX_AGE] + } + + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength + + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC + this[LENGTH] = 0 + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) + this[LENGTH] += hit.length + }) + } + trim(this) + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } + + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } + + rforEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev + forEachStep(this, fn, walker, thisp) + walker = prev + } + } + + forEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next + forEachStep(this, fn, walker, thisp) + walker = next + } + } + + keys () { + return this[LRU_LIST].toArray().map(k => k.key) + } + + values () { + return this[LRU_LIST].toArray().map(k => k.value) + } + + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) + } + + this[CACHE] = new Map() // hash of items by key + this[LRU_LIST] = new Yallist() // list of items in order of use recency + this[LENGTH] = 0 // length of items in the list + } + + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) + } + + dumpLru () { + return this[LRU_LIST] + } + + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE] + + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') + + const now = maxAge ? Date.now() : 0 + const len = this[LENGTH_CALCULATOR](value, key) + + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)) + return false + } + + const node = this[CACHE].get(key) + const item = node.value + + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value) + } + + item.now = now + item.maxAge = maxAge + item.value = value + this[LENGTH] += len - item.length + item.length = len + this.get(key) + trim(this) + return true + } + + const hit = new Entry(key, value, len, now, maxAge) + + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value) + + return false + } + + this[LENGTH] += hit.length + this[LRU_LIST].unshift(hit) + this[CACHE].set(key, this[LRU_LIST].head) + trim(this) + return true + } + + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value + return !isStale(this, hit) + } + + get (key) { + return get(this, key, true) + } + + peek (key) { + return get(this, key, false) + } + + pop () { + const node = this[LRU_LIST].tail + if (!node) + return null + + del(this, node) + return node.value + } + + del (key) { + del(this, this[CACHE].get(key)) + } + + load (arr) { + // reset the cache + this.reset() + + const now = Date.now() + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l] + const expiresAt = hit.e || 0 + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v) + else { + const maxAge = expiresAt - now + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge) + } + } + } + } + + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)) + } +} + +const get = (self, key, doUse) => { + const node = self[CACHE].get(key) + if (node) { + const hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now() + self[LRU_LIST].unshiftNode(node) + } + } + return hit.value + } +} + +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) +} + +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev + del(self, walker) + walker = prev + } + } +} + +const del = (self, node) => { + if (node) { + const hit = node.value + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value) + + self[LENGTH] -= hit.length + self[CACHE].delete(hit.key) + self[LRU_LIST].removeNode(node) + } +} + +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key + this.value = value + this.length = length + this.now = now + this.maxAge = maxAge || 0 + } +} + +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + hit = undefined + } + if (hit) + fn.call(thisp, hit.value, hit.key, self) +} + +module.exports = LRUCache diff --git a/build/node_modules/lru-cache/lib/lru-cache.js b/build/node_modules/lru-cache/lib/lru-cache.js deleted file mode 100644 index 2bbe653b..00000000 --- a/build/node_modules/lru-cache/lib/lru-cache.js +++ /dev/null @@ -1,334 +0,0 @@ -;(function () { // closure for web browsers - -if (typeof module === 'object' && module.exports) { - module.exports = LRUCache -} else { - // just set the global for non-node platforms. - this.LRUCache = LRUCache -} - -function hOP (obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key) -} - -function naiveLength () { return 1 } - -var didTypeWarning = false -function typeCheckKey(key) { - if (!didTypeWarning && typeof key !== 'string' && typeof key !== 'number') { - didTypeWarning = true - console.error(new TypeError("LRU: key must be a string or number. Almost certainly a bug! " + typeof key).stack) - } -} - -function LRUCache (options) { - if (!(this instanceof LRUCache)) - return new LRUCache(options) - - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - this._max = options.max - // Kind of weird to have a default max of Infinity, but oh well. - if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) - this._max = Infinity - - this._lengthCalculator = options.length || naiveLength - if (typeof this._lengthCalculator !== "function") - this._lengthCalculator = naiveLength - - this._allowStale = options.stale || false - this._maxAge = options.maxAge || null - this._dispose = options.dispose - this.reset() -} - -// resize the cache when the max changes. -Object.defineProperty(LRUCache.prototype, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - this._max = mL - if (this._length > this._max) trim(this) - } - , get : function () { return this._max } - , enumerable : true - }) - -// resize the cache when the lengthCalculator changes. -Object.defineProperty(LRUCache.prototype, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - this._lengthCalculator = naiveLength - this._length = this._itemCount - for (var key in this._cache) { - this._cache[key].length = 1 - } - } else { - this._lengthCalculator = lC - this._length = 0 - for (var key in this._cache) { - this._cache[key].length = this._lengthCalculator(this._cache[key].value) - this._length += this._cache[key].length - } - } - - if (this._length > this._max) trim(this) - } - , get : function () { return this._lengthCalculator } - , enumerable : true - }) - -Object.defineProperty(LRUCache.prototype, "length", - { get : function () { return this._length } - , enumerable : true - }) - - -Object.defineProperty(LRUCache.prototype, "itemCount", - { get : function () { return this._itemCount } - , enumerable : true - }) - -LRUCache.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0 - var itemCount = this._itemCount - - for (var k = this._mru - 1; k >= 0 && i < itemCount; k--) if (this._lruList[k]) { - i++ - var hit = this._lruList[k] - if (isStale(this, hit)) { - del(this, hit) - if (!this._allowStale) hit = undefined - } - if (hit) { - fn.call(thisp, hit.value, hit.key, this) - } - } -} - -LRUCache.prototype.keys = function () { - var keys = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - keys[i++] = hit.key - } - return keys -} - -LRUCache.prototype.values = function () { - var values = new Array(this._itemCount) - var i = 0 - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - values[i++] = hit.value - } - return values -} - -LRUCache.prototype.reset = function () { - if (this._dispose && this._cache) { - for (var k in this._cache) { - this._dispose(k, this._cache[k].value) - } - } - - this._cache = Object.create(null) // hash of items by key - this._lruList = Object.create(null) // list of items in order of use recency - this._mru = 0 // most recently used - this._lru = 0 // least recently used - this._length = 0 // number of items in the list - this._itemCount = 0 -} - -LRUCache.prototype.dump = function () { - var arr = [] - var i = 0 - - for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { - var hit = this._lruList[k] - if (!isStale(this, hit)) { - //Do not store staled hits - ++i - arr.push({ - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }); - } - } - //arr has the most read first - return arr -} - -LRUCache.prototype.dumpLru = function () { - return this._lruList -} - -LRUCache.prototype.set = function (key, value, maxAge) { - maxAge = maxAge || this._maxAge - typeCheckKey(key) - - var now = maxAge ? Date.now() : 0 - var len = this._lengthCalculator(value) - - if (hOP(this._cache, key)) { - if (len > this._max) { - del(this, this._cache[key]) - return false - } - // dispose of the old one before overwriting - if (this._dispose) - this._dispose(key, this._cache[key].value) - - this._cache[key].now = now - this._cache[key].maxAge = maxAge - this._cache[key].value = value - this._length += (len - this._cache[key].length) - this._cache[key].length = len - this.get(key) - - if (this._length > this._max) - trim(this) - - return true - } - - var hit = new Entry(key, value, this._mru++, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this._max) { - if (this._dispose) this._dispose(key, value) - return false - } - - this._length += hit.length - this._lruList[hit.lu] = this._cache[key] = hit - this._itemCount ++ - - if (this._length > this._max) - trim(this) - - return true -} - -LRUCache.prototype.has = function (key) { - typeCheckKey(key) - if (!hOP(this._cache, key)) return false - var hit = this._cache[key] - if (isStale(this, hit)) { - return false - } - return true -} - -LRUCache.prototype.get = function (key) { - typeCheckKey(key) - return get(this, key, true) -} - -LRUCache.prototype.peek = function (key) { - typeCheckKey(key) - return get(this, key, false) -} - -LRUCache.prototype.pop = function () { - var hit = this._lruList[this._lru] - del(this, hit) - return hit || null -} - -LRUCache.prototype.del = function (key) { - typeCheckKey(key) - del(this, this._cache[key]) -} - -LRUCache.prototype.load = function (arr) { - //reset the cache - this.reset(); - - var now = Date.now() - //A previous serialized cache has the most recent items first - for (var l = arr.length - 1; l >= 0; l-- ) { - var hit = arr[l] - typeCheckKey(hit.k) - var expiresAt = hit.e || 0 - if (expiresAt === 0) { - //the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - } else { - var maxAge = expiresAt - now - //dont add already expired items - if (maxAge > 0) this.set(hit.k, hit.v, maxAge) - } - } -} - -function get (self, key, doUse) { - typeCheckKey(key) - var hit = self._cache[key] - if (hit) { - if (isStale(self, hit)) { - del(self, hit) - if (!self._allowStale) hit = undefined - } else { - if (doUse) use(self, hit) - } - if (hit) hit = hit.value - } - return hit -} - -function isStale(self, hit) { - if (!hit || (!hit.maxAge && !self._maxAge)) return false - var stale = false; - var diff = Date.now() - hit.now - if (hit.maxAge) { - stale = diff > hit.maxAge - } else { - stale = self._maxAge && (diff > self._maxAge) - } - return stale; -} - -function use (self, hit) { - shiftLU(self, hit) - hit.lu = self._mru ++ - self._lruList[hit.lu] = hit -} - -function trim (self) { - while (self._lru < self._mru && self._length > self._max) - del(self, self._lruList[self._lru]) -} - -function shiftLU (self, hit) { - delete self._lruList[ hit.lu ] - while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ -} - -function del (self, hit) { - if (hit) { - if (self._dispose) self._dispose(hit.key, hit.value) - self._length -= hit.length - self._itemCount -- - delete self._cache[ hit.key ] - shiftLU(self, hit) - } -} - -// classy, since V8 prefers predictable objects. -function Entry (key, value, lu, length, now, maxAge) { - this.key = key - this.value = value - this.lu = lu - this.length = length - this.now = now - if (maxAge) this.maxAge = maxAge -} - -})() diff --git a/build/node_modules/lru-cache/package.json b/build/node_modules/lru-cache/package.json index 8d23bfce..41ea8f6d 100644 --- a/build/node_modules/lru-cache/package.json +++ b/build/node_modules/lru-cache/package.json @@ -1,27 +1,27 @@ { - "_from": "lru-cache@2", - "_id": "lru-cache@2.7.3", + "_from": "lru-cache@^6.0.0", + "_id": "lru-cache@6.0.0", "_inBundle": false, - "_integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "_integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "_location": "/lru-cache", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "lru-cache@2", + "raw": "lru-cache@^6.0.0", "name": "lru-cache", "escapedName": "lru-cache", - "rawSpec": "2", + "rawSpec": "^6.0.0", "saveSpec": null, - "fetchSpec": "2" + "fetchSpec": "^6.0.0" }, "_requiredBy": [ - "/minimatch" + "/semver" ], - "_resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "_shasum": "6d4524e8b955f95d4f5b58851ce21dd72fb4e952", - "_spec": "lru-cache@2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/minimatch", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/lru-cache/-/lru-cache-6.0.0.tgz", + "_shasum": "6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94", + "_spec": "lru-cache@^6.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/semver", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me" @@ -30,12 +30,21 @@ "url": "https://github.com/isaacs/node-lru-cache/issues" }, "bundleDependencies": false, + "dependencies": { + "yallist": "^4.0.0" + }, "deprecated": false, "description": "A cache object that deletes the least-recently-used items.", "devDependencies": { - "tap": "^1.2.0", - "weak": "" + "benchmark": "^2.1.4", + "tap": "^14.10.7" + }, + "engines": { + "node": ">=10" }, + "files": [ + "index.js" + ], "homepage": "https://github.com/isaacs/node-lru-cache#readme", "keywords": [ "mru", @@ -43,14 +52,18 @@ "cache" ], "license": "ISC", - "main": "lib/lru-cache.js", + "main": "index.js", "name": "lru-cache", "repository": { "type": "git", "url": "git://github.com/isaacs/node-lru-cache.git" }, "scripts": { - "test": "tap test --gc" + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "snap": "tap", + "test": "tap" }, - "version": "2.7.3" + "version": "6.0.0" } diff --git a/build/node_modules/lru-cache/test/basic.js b/build/node_modules/lru-cache/test/basic.js deleted file mode 100644 index b47225f1..00000000 --- a/build/node_modules/lru-cache/test/basic.js +++ /dev/null @@ -1,396 +0,0 @@ -var test = require("tap").test - , LRU = require("../") - -test("basic", function (t) { - var cache = new LRU({max: 10}) - cache.set("key", "value") - t.equal(cache.get("key"), "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.length, 1) - t.equal(cache.max, 10) - t.end() -}) - -test("least recently set", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - cache.get("a") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), "A") - t.end() -}) - -test("del", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.del("a") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("max", function (t) { - var cache = new LRU(3) - - // test changing the max, verify that the LRU items get dropped. - cache.max = 100 - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - - // now remove the max restriction, and try again. - cache.max = "hello" - for (var i = 0; i < 100; i ++) cache.set(i, i) - t.equal(cache.length, 100) - for (var i = 0; i < 100; i ++) { - t.equal(cache.get(i), i) - } - // should trigger an immediate resize - cache.max = 3 - t.equal(cache.length, 3) - for (var i = 0; i < 97; i ++) { - t.equal(cache.get(i), undefined) - } - for (var i = 98; i < 100; i ++) { - t.equal(cache.get(i), i) - } - t.end() -}) - -test("reset", function (t) { - var cache = new LRU(10) - cache.set("a", "A") - cache.set("b", "B") - cache.reset() - t.equal(cache.length, 0) - t.equal(cache.max, 10) - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.end() -}) - - -test("basic with weighed length", function (t) { - var cache = new LRU({ - max: 100, - length: function (item) { return item.size } - }) - cache.set("key", {val: "value", size: 50}) - t.equal(cache.get("key").val, "value") - t.equal(cache.get("nada"), undefined) - t.equal(cache.lengthCalculator(cache.get("key")), 50) - t.equal(cache.length, 50) - t.equal(cache.max, 100) - t.end() -}) - - -test("weighed length item too large", function (t) { - var cache = new LRU({ - max: 10, - length: function (item) { return item.size } - }) - t.equal(cache.max, 10) - - // should fall out immediately - cache.set("key", {val: "value", size: 50}) - - t.equal(cache.length, 0) - t.equal(cache.get("key"), undefined) - t.end() -}) - -test("least recently set with weighed length", function (t) { - var cache = new LRU({ - max:8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.set("d", "DDDD") - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("c"), "CCC") - t.equal(cache.get("b"), undefined) - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("lru recently gotten with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - cache.get("a") - cache.get("b") - cache.set("d", "DDDD") - t.equal(cache.get("c"), undefined) - t.equal(cache.get("d"), "DDDD") - t.equal(cache.get("b"), "BB") - t.equal(cache.get("a"), "A") - t.end() -}) - -test("lru recently updated with weighed length", function (t) { - var cache = new LRU({ - max: 8, - length: function (item) { return item.length } - }) - cache.set("a", "A") - cache.set("b", "BB") - cache.set("c", "CCC") - t.equal(cache.length, 6) //CCC BB A - cache.set("a", "+A") - t.equal(cache.length, 7) //+A CCC BB - cache.set("b", "++BB") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("c", "oversized") - t.equal(cache.length, 6) //++BB +A - t.equal(cache.get("c"), undefined) - - cache.set("a", "oversized") - t.equal(cache.length, 4) //++BB - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), "++BB") - t.end() -}) - -test("set returns proper booleans", function(t) { - var cache = new LRU({ - max: 5, - length: function (item) { return item.length } - }) - - t.equal(cache.set("a", "A"), true) - - // should return false for max exceeded - t.equal(cache.set("b", "donuts"), false) - - t.equal(cache.set("b", "B"), true) - t.equal(cache.set("c", "CCCC"), true) - t.end() -}) - -test("drop the old items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A") - - setTimeout(function () { - cache.set("b", "b") - t.equal(cache.get("a"), "A") - }, 25) - - setTimeout(function () { - cache.set("c", "C") - // timed out - t.notOk(cache.get("a")) - }, 60 + 25) - - setTimeout(function () { - t.notOk(cache.get("b")) - t.equal(cache.get("c"), "C") - }, 90) - - setTimeout(function () { - t.notOk(cache.get("c")) - t.end() - }, 155) -}) - -test("individual item can have it's own maxAge", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - cache.set("a", "A", 20) - setTimeout(function () { - t.notOk(cache.get("a")) - t.end() - }, 25) -}) - -test("individual item can have it's own maxAge > cache's", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 20 - }) - - cache.set("a", "A", 50) - setTimeout(function () { - t.equal(cache.get("a"), "A") - t.end() - }, 25) -}) - -test("disposal function", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - dispose: function (k, n) { - disposed = n - } - }) - - cache.set(1, 1) - cache.set(2, 2) - t.equal(disposed, 1) - cache.set(3, 3) - t.equal(disposed, 2) - cache.reset() - t.equal(disposed, 3) - t.end() -}) - -test("disposal function on too big of item", function(t) { - var disposed = false - var cache = new LRU({ - max: 1, - length: function (k) { - return k.length - }, - dispose: function (k, n) { - disposed = n - } - }) - var obj = [ 1, 2 ] - - t.equal(disposed, false) - cache.set("obj", obj) - t.equal(disposed, obj) - t.end() -}) - -test("has()", function(t) { - var cache = new LRU({ - max: 1, - maxAge: 10 - }) - - cache.set('foo', 'bar') - t.equal(cache.has('foo'), true) - cache.set('blu', 'baz') - t.equal(cache.has('foo'), false) - t.equal(cache.has('blu'), true) - setTimeout(function() { - t.equal(cache.has('blu'), false) - t.end() - }, 15) -}) - -test("stale", function(t) { - var cache = new LRU({ - maxAge: 10, - stale: true - }) - - cache.set('foo', 'bar') - t.equal(cache.get('foo'), 'bar') - t.equal(cache.has('foo'), true) - setTimeout(function() { - t.equal(cache.has('foo'), false) - t.equal(cache.get('foo'), 'bar') - t.equal(cache.get('foo'), undefined) - t.end() - }, 15) -}) - -test("lru update via set", function(t) { - var cache = LRU({ max: 2 }); - - cache.set('foo', 1); - cache.set('bar', 2); - cache.del('bar'); - cache.set('baz', 3); - cache.set('qux', 4); - - t.equal(cache.get('foo'), undefined) - t.equal(cache.get('bar'), undefined) - t.equal(cache.get('baz'), 3) - t.equal(cache.get('qux'), 4) - t.end() -}) - -test("least recently set w/ peek", function (t) { - var cache = new LRU(2) - cache.set("a", "A") - cache.set("b", "B") - t.equal(cache.peek("a"), "A") - cache.set("c", "C") - t.equal(cache.get("c"), "C") - t.equal(cache.get("b"), "B") - t.equal(cache.get("a"), undefined) - t.end() -}) - -test("pop the least used item", function (t) { - var cache = new LRU(3) - , last - - cache.set("a", "A") - cache.set("b", "B") - cache.set("c", "C") - - t.equal(cache.length, 3) - t.equal(cache.max, 3) - - // Ensure we pop a, c, b - cache.get("b", "B") - - last = cache.pop() - t.equal(last.key, "a") - t.equal(last.value, "A") - t.equal(cache.length, 2) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "c") - t.equal(last.value, "C") - t.equal(cache.length, 1) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last.key, "b") - t.equal(last.value, "B") - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - last = cache.pop() - t.equal(last, null) - t.equal(cache.length, 0) - t.equal(cache.max, 3) - - t.end() -}) diff --git a/build/node_modules/lru-cache/test/foreach.js b/build/node_modules/lru-cache/test/foreach.js deleted file mode 100644 index 4190417c..00000000 --- a/build/node_modules/lru-cache/test/foreach.js +++ /dev/null @@ -1,120 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('forEach', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 9 - l.forEach(function (val, key, cache) { - t.equal(cache, l) - t.equal(key, i.toString()) - t.equal(val, i.toString(2)) - i -= 1 - }) - - // get in order of most recently used - l.get(6) - l.get(8) - - var order = [ 8, 6, 9, 7, 5 ] - var i = 0 - - l.forEach(function (val, key, cache) { - var j = order[i ++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - t.end() -}) - -test('keys() and values()', function (t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - t.similar(l.keys(), ['9', '8', '7', '6', '5']) - t.similar(l.values(), ['1001', '1000', '111', '110', '101']) - - // get in order of most recently used - l.get(6) - l.get(8) - - t.similar(l.keys(), ['8', '6', '9', '7', '5']) - t.similar(l.values(), ['1000', '110', '1001', '111', '101']) - - t.end() -}) - -test('all entries are iterated over', function(t) { - var l = new LRU(5) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function (val, key, cache) { - if (i > 0) { - cache.del(key) - } - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 1) - - t.end() -}) - -test('all stale entries are removed', function(t) { - var l = new LRU({ max: 5, maxAge: -5, stale: true }) - for (var i = 0; i < 10; i ++) { - l.set(i.toString(), i.toString(2)) - } - - var i = 0 - l.forEach(function () { - i += 1 - }) - - t.equal(i, 5) - t.equal(l.keys().length, 0) - - t.end() -}) - -test('expires', function (t) { - var l = new LRU({ - max: 10, - maxAge: 50 - }) - for (var i = 0; i < 10; i++) { - l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined)) - } - - var i = 0 - var order = [ 8, 6, 4, 2, 0 ] - setTimeout(function () { - l.forEach(function (val, key, cache) { - var j = order[i++] - t.equal(cache, l) - t.equal(key, j.toString()) - t.equal(val, j.toString(2)) - }) - t.equal(i, order.length); - - setTimeout(function () { - var count = 0; - l.forEach(function (val, key, cache) { count++; }) - t.equal(0, count); - t.end() - }, 25) - - }, 26) -}) diff --git a/build/node_modules/lru-cache/test/memory-leak.js b/build/node_modules/lru-cache/test/memory-leak.js deleted file mode 100644 index b5912f6f..00000000 --- a/build/node_modules/lru-cache/test/memory-leak.js +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node --expose_gc - - -var weak = require('weak'); -var test = require('tap').test -var LRU = require('../') -var l = new LRU({ max: 10 }) -var refs = 0 -function X() { - refs ++ - weak(this, deref) -} - -function deref() { - refs -- -} - -test('no leaks', function (t) { - // fill up the cache - for (var i = 0; i < 100; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var start = process.memoryUsage() - - // capture the memory - var startRefs = refs - - // do it again, but more - for (var i = 0; i < 10000; i++) { - l.set(i, new X); - // throw some gets in there, too. - if (i % 2 === 0) - l.get(i / 2) - } - - gc() - - var end = process.memoryUsage() - t.equal(refs, startRefs, 'no leaky refs') - - console.error('start: %j\n' + - 'end: %j', start, end); - t.pass(); - t.end(); -}) diff --git a/build/node_modules/lru-cache/test/serialize.js b/build/node_modules/lru-cache/test/serialize.js deleted file mode 100644 index 1094194a..00000000 --- a/build/node_modules/lru-cache/test/serialize.js +++ /dev/null @@ -1,216 +0,0 @@ -var test = require('tap').test -var LRU = require('../') - -test('dump', function (t) { - var cache = new LRU() - - t.equal(cache.dump().length, 0, "nothing in dump for empty cache") - - cache.set("a", "A") - cache.set("b", "B") - t.deepEqual(cache.dump(), [ - { k: "b", v: "B", e: 0 }, - { k: "a", v: "A", e: 0 } - ]) - - cache.set("a", "A"); - t.deepEqual(cache.dump(), [ - { k: "a", v: "A", e: 0 }, - { k: "b", v: "B", e: 0 } - ]) - - cache.get("b"); - t.deepEqual(cache.dump(), [ - { k: "b", v: "B", e: 0 }, - { k: "a", v: "A", e: 0 } - ]) - - cache.del("a"); - t.deepEqual(cache.dump(), [ - { k: "b", v: "B", e: 0 } - ]) - - t.end() -}) - -test("do not dump stale items", function(t) { - var cache = new LRU({ - max: 5, - maxAge: 50 - }) - - //expires at 50 - cache.set("a", "A") - - setTimeout(function () { - //expires at 75 - cache.set("b", "B") - var s = cache.dump() - t.equal(s.length, 2) - t.equal(s[0].k, "b") - t.equal(s[1].k, "a") - }, 25) - - setTimeout(function () { - //expires at 110 - cache.set("c", "C") - var s = cache.dump() - t.equal(s.length, 2) - t.equal(s[0].k, "c") - t.equal(s[1].k, "b") - }, 60) - - setTimeout(function () { - //expires at 130 - cache.set("d", "D", 40) - var s = cache.dump() - t.equal(s.length, 2) - t.equal(s[0].k, "d") - t.equal(s[1].k, "c") - }, 90) - - setTimeout(function () { - var s = cache.dump() - t.equal(s.length, 1) - t.equal(s[0].k, "d") - }, 120) - - setTimeout(function () { - var s = cache.dump() - t.deepEqual(s, []) - t.end() - }, 155) -}) - -test("load basic cache", function(t) { - var cache = new LRU(), - copy = new LRU() - - cache.set("a", "A") - cache.set("b", "B") - - copy.load(cache.dump()) - t.deepEquals(cache.dump(), copy.dump()) - - t.end() -}) - - -test("load staled cache", function(t) { - var cache = new LRU({maxAge: 50}), - copy = new LRU({maxAge: 50}), - arr - - //expires at 50 - cache.set("a", "A") - setTimeout(function () { - //expires at 80 - cache.set("b", "B") - arr = cache.dump() - t.equal(arr.length, 2) - }, 30) - - setTimeout(function () { - copy.load(arr) - t.equal(copy.get("a"), undefined) - t.equal(copy.get("b"), "B") - }, 60) - - setTimeout(function () { - t.equal(copy.get("b"), undefined) - t.end() - }, 90) -}) - -test("load to other size cache", function(t) { - var cache = new LRU({max: 2}), - copy = new LRU({max: 1}) - - cache.set("a", "A") - cache.set("b", "B") - - copy.load(cache.dump()) - t.equal(copy.get("a"), undefined) - t.equal(copy.get("b"), "B") - - //update the last read from original cache - cache.get("a") - copy.load(cache.dump()) - t.equal(copy.get("a"), "A") - t.equal(copy.get("b"), undefined) - - t.end() -}) - - -test("load to other age cache", function(t) { - var cache = new LRU({maxAge: 50}), - aged = new LRU({maxAge: 100}), - simple = new LRU(), - arr, - expired - - //created at 0 - //a would be valid till 0 + 50 - cache.set("a", "A") - setTimeout(function () { - //created at 20 - //b would be valid till 20 + 50 - cache.set("b", "B") - //b would be valid till 20 + 70 - cache.set("c", "C", 70) - arr = cache.dump() - t.equal(arr.length, 3) - }, 20) - - setTimeout(function () { - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), "B") - t.equal(cache.get("c"), "C") - - aged.load(arr) - t.equal(aged.get("a"), undefined) - t.equal(aged.get("b"), "B") - t.equal(aged.get("c"), "C") - - simple.load(arr) - t.equal(simple.get("a"), undefined) - t.equal(simple.get("b"), "B") - t.equal(simple.get("c"), "C") - }, 60) - - setTimeout(function () { - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.equal(cache.get("c"), "C") - - aged.load(arr) - t.equal(aged.get("a"), undefined) - t.equal(aged.get("b"), undefined) - t.equal(aged.get("c"), "C") - - simple.load(arr) - t.equal(simple.get("a"), undefined) - t.equal(simple.get("b"), undefined) - t.equal(simple.get("c"), "C") - }, 80) - - setTimeout(function () { - t.equal(cache.get("a"), undefined) - t.equal(cache.get("b"), undefined) - t.equal(cache.get("c"), undefined) - - aged.load(arr) - t.equal(aged.get("a"), undefined) - t.equal(aged.get("b"), undefined) - t.equal(aged.get("c"), undefined) - - simple.load(arr) - t.equal(simple.get("a"), undefined) - t.equal(simple.get("b"), undefined) - t.equal(simple.get("c"), undefined) - t.end() - }, 100) - -}) - diff --git a/build/node_modules/ltgt/package.json b/build/node_modules/ltgt/package.json index dcdcda9b..094f633a 100644 --- a/build/node_modules/ltgt/package.json +++ b/build/node_modules/ltgt/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js" ], - "_resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ltgt/-/ltgt-2.2.1.tgz", "_shasum": "f35ca91c493f7b73da0e07495304f17b31f87ee5", "_spec": "ltgt@^2.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js", diff --git a/build/node_modules/magic-string/CHANGELOG.md b/build/node_modules/magic-string/CHANGELOG.md deleted file mode 100644 index 257d46d6..00000000 --- a/build/node_modules/magic-string/CHANGELOG.md +++ /dev/null @@ -1,394 +0,0 @@ -# magic-string changelog - -## 0.25.7 - -* fix bundle mappings after remove and move in multiple sources ([#172](https://github.com/Rich-Harris/magic-string/issues/172)) - -## 0.25.6 - -* Use bitwise operators for small performance boost ([#171](https://github.com/Rich-Harris/magic-string/pull/171)) - -## 0.25.5 - -* Use a bitset to reduce memory consumption ([#167](https://github.com/Rich-Harris/magic-string/issues/167)) - -## 0.25.4 - -* Clone `intro` and `outro` ([#162](https://github.com/Rich-Harris/magic-string/issues/162)) - -## 0.25.3 - -* Fix typing of `SourceMap.version`. - -## 0.25.2 - -* Remove deprecated `new Buffer(...)` -* Handle characters outside Latin1 range when generating a sourcemap in browser ([#154](https://github.com/Rich-Harris/magic-string/issues/154)) - -## 0.25.1 - -* Additional types for index.d.ts ([#148](https://github.com/Rich-Harris/magic-string/pull/148)) - -## 0.25.0 - -* Add `length` method ([#145](https://github.com/Rich-Harris/magic-string/pull/145)) -* Fix trimming chunks with intro/outro ([#144](https://github.com/Rich-Harris/magic-string/pull/144)) - -## 0.24.1 - -* Add `lastLine` and `lastChar` methods ([#142](https://github.com/Rich-Harris/magic-string/pull/142)) - -## 0.24.0 - -* Add `isEmpty` methods ([#137](https://github.com/Rich-Harris/magic-string/pull/137)) -* Fix a potential race condition ([#136](https://github.com/Rich-Harris/magic-string/pull/136)) -* Fix CJS/ES bundles inlining `sourcemap-codec` in 0.23.2. - -## 0.23.2 - -* Add `generateDecodedMap` methods ([#134](https://github.com/Rich-Harris/magic-string/pull/134)) - -## 0.23.1 - -* Performance ([#132](https://github.com/Rich-Harris/magic-string/pull/132)) - -## 0.23.0 - -* Use `sourcemap-codec` for improved performance ([#133](https://github.com/Rich-Harris/magic-string/pull/133)) - -## 0.22.5 - -* Add TypeScript interfaces used by rollup ([#131](https://github.com/Rich-Harris/magic-string/pull/131)) -* Remove src directory from npm package - -## 0.22.4 - -* `contentOnly` and `storeName` are both optional - -## 0.22.3 - -* Add `original` to TS definitions - -## 0.22.2 - -* Avoid `declare module` ([#127](https://github.com/Rich-Harris/magic-string/pull/127)) - -## 0.22.1 - -* Update TypeScript definitions ([#124](https://github.com/Rich-Harris/magic-string/pull/124)) - -## 0.22.0 - -* Prevent `overwrite` state corruption ([#115](https://github.com/Rich-Harris/magic-string/issues/115)) -* Various bugfixes ([#126](https://github.com/Rich-Harris/magic-string/pull/126)) - -## 0.21.3 - -* Clone `indentExclusionRanges` correctly ([#122](https://github.com/Rich-Harris/magic-string/pull/122)) -* Fix more typings ([#122](https://github.com/Rich-Harris/magic-string/pull/122)) - -## 0.21.2 - -* Add `default` property referencing self in index-legacy.js, to work around TypeScript bug ([#121](https://github.com/Rich-Harris/magic-string/pull/121)) - -## 0.21.1 - -* Add typings file to package - -## 0.21.0 - -* Add TypeScript bindings ([#119](https://github.com/Rich-Harris/magic-string/pull/119)) - -## 0.20.0 - -* The fourth argument to `overwrite` is a `{storeName, contentOnly}` options object. `storeName: true` is equivalent to `true` before. `contentOnly` will preserve existing appends/prepends to the chunk in question - -## 0.19.1 - -* Prevent overwrites across a split point (i.e. following a `move`) -* Implement `remove` separately to `overwrite` - -## 0.19.0 - -* More accurate bundle sourcemaps ([#114](https://github.com/Rich-Harris/magic-string/pull/114)) - -## 0.18.0 - -* Optimisation – remove empty chunks following `overwrite` or `remove` ([#113](https://github.com/Rich-Harris/magic-string/pull/113)) - -## 0.17.0 - -* Add `appendLeft`, `appendRight`, `prependLeft`, `prependRight` methods ([#109](https://github.com/Rich-Harris/magic-string/issues/109)) -* `insertLeft` and `insertRight` are deprecated in favour of `appendLeft` and `prependRight` respectively - -## 0.16.0 - -* Include inserts in range for `overwrite` and `remove` operations ([#89](https://github.com/Rich-Harris/magic-string/pull/89)) -* Make options optional for `bundle.generateMap(...)` ([#73](https://github.com/Rich-Harris/magic-string/pull/73)) - -## 0.15.2 - -* Generate correct bundle sourcemap with prepended/appended content - -## 0.15.1 - -* Minor sourcemap fixes - -## 0.15.0 - -* Use named export of `Bundle` in ES build, so ES consumers of magic-string can tree-shake it out - -## 0.14.0 - -* Throw if overwrite of zero-length range is attempted -* Correctly handle redundant move operations - -## 0.13.1 - -* Fix a bevy of `s.slice()` issues ([#62](https://github.com/Rich-Harris/magic-string/pull/62)) - -## 0.13.0 - -* Breaking: `insertAfter` is now `insertLeft`, `insertBefore` is now `insertRight` -* Breaking: `insert` is no longer available. Use `insertLeft` and `insertRight` -* Significant performance improvements - -## 0.12.1 - -* Fix sourcemap generation with `insertAfter` and `insertBefore` - -## 0.12.0 - -* Add `insertAfter` and `insertBefore` methods - -## 0.11.4 - -* Fix two regression bugs with `trim()` -* More informative error message on illegal removals - -## 0.11.3 - -* Fix trim methods to ensure correct sourcemaps with trimmed content ([#53](https://github.com/Rich-Harris/magic-string/pull/53)) - -## 0.11.2 - -* Support sourcemaps with moved content - -## 0.11.1 - -* Use `findIndex` helper for 0.12 support - -## 0.11.0 - -* Add experimental `move()` method -* Refactor internals to support `move()` - -## 0.10.2 - -* Do not overwrite inserts at the end of patched ranges ([#35](https://github.com/Rich-Harris/magic-string/pull/35)) - -## 0.10.1 - -* Zero-length inserts are not removed on adjacent overwrites - -## 0.10.0 - -* Complete rewrite, resulting in ~40x speed increase ([#30](https://github.com/Rich-Harris/magic-string/pull/30)) -* Breaking – `magicString.locate` and `locateOrigin` are deprecated -* More forgiving rules about contiguous patches, and which ranges are valid with `magicString.slice(...)` - -## 0.9.1 - -* Update deps - -## 0.9.0 - -* Update build process - -## 0.8.0 - -* Add an ES6 build, change default UMD build to CommonJS (but keeping existing UMD build with bundled dependencies) -* Make properties non-enumerable, for cleaner logging -* Update dependencies - -## 0.7.0 - -* The `names` array is populated when generating sourcemaps, and mappings include name indices where appropriate ([#16](https://github.com/Rich-Harris/magic-string/issues/16)) -* Replaced content is mapped correctly in sourcemaps ([#15](https://github.com/Rich-Harris/magic-string/issues/15)) - -## 0.6.6 - -* Adjust mappings correctly when removing replaced content -* Error correctly when removed characters are used as slice anchors - -## 0.6.5 - -* Fix `jsnext:main` in package.json - -## 0.6.4 - -* Fix bug with positive integer coercion - -## 0.6.3 - -* Intro content is correctly indented -* Content following an intro with trailing newline is correctly indented - -## 0.6.2 - -* Noop indents are still chainable (fixes bug introduced in 0.6.1) - -## 0.6.1 - -* Indenting with an empty string is a noop - -## 0.6.0 - -* Use rollup for bundling, instead of esperanto - -## 0.5.3 - -* Correct sourcemap generation with bundles containing varied separators -* `s.clone()` clones indent exclusion ranges and sourcemap locations - -## 0.5.2 - -* `s.slice()` accepts negative numbers, and the second argument can be omitted (means 'original string length'), just like `String.prototype.slice` -* More informative error message when trying to overwrite content illegally - -## 0.5.1 - -* Allow bundle separator to be the empty string -* Indenting is handled correctly with empty string separator - -## 0.5.0 - -* `s.replace()` is deprecated in favour of `s.overwrite()` (identical signature) -* `bundle.addSource()` can take a `MagicString` instance as its sole argument, for convenience -* The `options` in `new MagicString(str, options)` can include `filename` and `indentExclusionRanges` options, which will be used when bundling -* New method: `s.snip( start, end )` - -## 0.4.9 - -* `file` option is optional when generating a bundle sourcemap - -## 0.4.7 - -* Repeated insertions at position 0 behave the same as other positions ([#10](https://github.com/Rich-Harris/magic-string/pull/10)) - -## 0.4.6 - -* Overlapping ranges can be removed -* Non-string content is rejected ([#9](https://github.com/Rich-Harris/magic-string/pull/9)) - -## 0.4.5 - -* Implement `source.addSourcemapLocation()` - -## 0.4.4 - -* Another Windows fix, this time for file paths when bundling - -## 0.4.3 - -* Handle Windows-style CRLF newlines when determining whether a line is empty - -## 0.4.2 - -* Fix typo in package.json (d'oh again) -* Use only relative paths for internal modules - makes bundling with dependents (i.e. esperanto) possible - -## 0.4.1 - -* Includes correct files in npm package (d'oh) - -## 0.4.0 - -* Using experimental Esperanto feature ([esperantojs/esperanto#68](https://github.com/esperantojs/esperanto/issues/68)) to generate version with `vlq` dependency included - -## 0.3.1 - -* Fixes a bug whereby multiple insertions at the same location would cause text to repeat ([#5](https://github.com/Rich-Harris/magic-string/issues/5)) - -## 0.3.0 - -* Breaking change - `source.indentStr` is `null` if no lines are indented. Use `source.getIndentString()` for the old behaviour (guess, and if no lines are indented, return `\t`) -* `bundle.getIndentString()` ignores sources with no indented lines when guessing indentation ([#3](https://github.com/Rich-Harris/magic-string/issues/3)) - -## 0.2.7 - -* `source.trimLines()` removes empty lines from start/end of source, leaving other whitespace untouched -* Indentation is not added to an empty source - -## 0.2.6 - -* Performance improvement - adjustments are only made when necessary - -## 0.2.5 - -* Single spaces are ignored when guessing indentation - experience shows these are more likely to be e.g. JSDoc comments than actual indentation -* `bundle.addSource()` can take an `indentExclusionRanges` option - -## 0.2.4 - -* Empty lines are not indented - -## 0.2.3 - -* Fixes edge case with bundle sourcemaps - -## 0.2.2 - -* Make `sources` paths in sourcemaps relative to `options.file` - -## 0.2.1 - -* Minor fix for `bundle.indent()` - -## 0.2.0 - -* Implement `MagicString.Bundle` for concatenating magic strings - -## 0.1.10 - -* Fix sourcemap encoding - -## 0.1.9 - -* Better performance when indenting large chunks of code - -## 0.1.8 - -* Sourcemaps generated with `s.generateMap()` have a `toUrl()` method that generates a DataURI - -## 0.1.7 - -* Implement `s.insert( index, content )` - roughly equivalent to `s.replace( index, index, content )` - -## 0.1.6 - -* Version bump for npm's benefit - -## 0.1.5 - -* `s.indent({ exclude: [ x, y ] })` prevents lines between (original) characters `x` and `y` from being indented. Multiple exclusion ranges are also supported (e.g. `exclude: [[a, b], [c, d]]`) - -## 0.1.4 - -* `s.locate()` doesn't throw out-of-bound error if index is equal to original string's length - -## 0.1.3 - -* `s.trim()` returns `this` (i.e. is chainable) - -## 0.1.2 - -* Implement `s.slice()` - -## 0.1.1 - -* Implement `s.trim()` - -## 0.1.0 - -* First release diff --git a/build/node_modules/magic-string/README.md b/build/node_modules/magic-string/README.md index 6115cbad..d2287093 100644 --- a/build/node_modules/magic-string/README.md +++ b/build/node_modules/magic-string/README.md @@ -38,32 +38,34 @@ To use in browser, grab the [magic-string.umd.js](https://unpkg.com/magic-string These examples assume you're in node.js, or something similar: ```js -var MagicString = require( 'magic-string' ); -var s = new MagicString( 'problems = 99' ); +import MagicString from 'magic-string'; +import fs from 'fs' -s.overwrite( 0, 8, 'answer' ); +const s = new MagicString('problems = 99'); + +s.overwrite(0, 8, 'answer'); s.toString(); // 'answer = 99' -s.overwrite( 11, 13, '42' ); // character indices always refer to the original string +s.overwrite(11, 13, '42'); // character indices always refer to the original string s.toString(); // 'answer = 42' -s.prepend( 'var ' ).append( ';' ); // most methods are chainable +s.prepend('var ').append(';'); // most methods are chainable s.toString(); // 'var answer = 42;' -var map = s.generateMap({ +const map = s.generateMap({ source: 'source.js', file: 'converted.js.map', includeContent: true }); // generates a v3 sourcemap -require( 'fs' ).writeFile( 'converted.js', s.toString() ); -require( 'fs' ).writeFile( 'converted.js.map', map.toString() ); +fs.writeFileSync('converted.js', s.toString()); +fs.writeFileSync('converted.js.map', map.toString()); ``` You can pass an options argument: ```js -var s = new MagicString( someCode, { +const s = new MagicString(someCode, { // both these options will be used if you later // call `bundle.addSource( s )` - see below filename: 'foo.js', @@ -200,16 +202,16 @@ Returns true if the resulting source is empty (disregarding white space). To concatenate several sources, use `MagicString.Bundle`: ```js -var bundle = new MagicString.Bundle(); +const bundle = new MagicString.Bundle(); bundle.addSource({ filename: 'foo.js', - content: new MagicString( 'var answer = 42;' ) + content: new MagicString('var answer = 42;') }); bundle.addSource({ filename: 'bar.js', - content: new MagicString( 'console.log( answer )' ) + content: new MagicString('console.log( answer )') }); // Advanced: a source can include an `indentExclusionRanges` property @@ -217,8 +219,8 @@ bundle.addSource({ // - see documentation above bundle.indent() // optionally, pass an indent string, otherwise it will be guessed - .prepend( '(function () {\n' ) - .append( '}());' ); + .prepend('(function () {\n') + .append('}());'); bundle.toString(); // (function () { @@ -227,7 +229,7 @@ bundle.toString(); // }()); // options are as per `s.generateMap()` above -var map = bundle.generateMap({ +const map = bundle.generateMap({ file: 'bundle.js', includeContent: true, hires: true @@ -237,12 +239,12 @@ var map = bundle.generateMap({ As an alternative syntax, if you a) don't have `filename` or `indentExclusionRanges` options, or b) passed those in when you used `new MagicString(...)`, you can simply pass the `MagicString` instance itself: ```js -var bundle = new MagicString.Bundle(); -var source = new MagicString( someCode, { +const bundle = new MagicString.Bundle(); +const source = new MagicString(someCode, { filename: 'foo.js' }); -bundle.addSource( source ); +bundle.addSource(source); ``` ## License diff --git a/build/node_modules/magic-string/dist/magic-string.cjs.js b/build/node_modules/magic-string/dist/magic-string.cjs.js index 7a1d4482..4be44d8e 100644 --- a/build/node_modules/magic-string/dist/magic-string.cjs.js +++ b/build/node_modules/magic-string/dist/magic-string.cjs.js @@ -29,7 +29,7 @@ var Chunk = function Chunk(start, end, content) { // we make these non-enumerable, for sanity while debugging Object.defineProperties(this, { previous: { writable: true, value: null }, - next: { writable: true, value: null } + next: { writable: true, value: null }, }); }; @@ -139,7 +139,6 @@ Chunk.prototype.trimEnd = function trimEnd (rx) { this.split(this.start + trimmed.length).edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -160,7 +159,6 @@ Chunk.prototype.trimStart = function trimStart (rx) { this.edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -345,7 +343,7 @@ var n = '\n'; var warned = { insertLeft: false, insertRight: false, - storeName: false + storeName: false, }; var MagicString = function MagicString(string, options) { @@ -354,19 +352,19 @@ var MagicString = function MagicString(string, options) { var chunk = new Chunk(0, string.length, string); Object.defineProperties(this, { - original: { writable: true, value: string }, - outro: { writable: true, value: '' }, - intro: { writable: true, value: '' }, - firstChunk: { writable: true, value: chunk }, - lastChunk: { writable: true, value: chunk }, - lastSearchedChunk: { writable: true, value: chunk }, - byStart: { writable: true, value: {} }, - byEnd: { writable: true, value: {} }, - filename: { writable: true, value: options.filename }, + original: { writable: true, value: string }, + outro: { writable: true, value: '' }, + intro: { writable: true, value: '' }, + firstChunk: { writable: true, value: chunk }, + lastChunk: { writable: true, value: chunk }, + lastSearchedChunk: { writable: true, value: chunk }, + byStart: { writable: true, value: {} }, + byEnd: { writable: true, value: {} }, + filename: { writable: true, value: options.filename }, indentExclusionRanges: { writable: true, value: options.indentExclusionRanges }, - sourcemapLocations: { writable: true, value: new BitSet() }, - storedNames: { writable: true, value: {} }, - indentStr: { writable: true, value: guessIndent(string) } + sourcemapLocations: { writable: true, value: new BitSet() }, + storedNames: { writable: true, value: {} }, + indentStr: { writable: true, value: guessIndent(string) }, }); this.byStart[0] = chunk; @@ -452,7 +450,7 @@ MagicString.prototype.clone = function clone () { }; MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; options = options || {}; @@ -479,7 +477,7 @@ MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) chunk.storeName ? names.indexOf(chunk.original) : -1 ); } else { - mappings.addUneditedChunk(sourceIndex, chunk, this$1.original, loc, this$1.sourcemapLocations); + mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations); } if (chunk.outro.length) { mappings.advance(chunk.outro); } @@ -490,7 +488,7 @@ MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) sources: [options.source ? getRelativePath(options.file || '', options.source) : null], sourcesContent: options.includeContent ? [this.original] : [null], names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -588,12 +586,16 @@ MagicString.prototype.indent = function indent (indentStr, options) { }; MagicString.prototype.insert = function insert () { - throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'); + throw new Error( + 'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)' + ); }; MagicString.prototype.insertLeft = function insertLeft (index, content) { if (!warned.insertLeft) { - console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead' + ); // eslint-disable-line no-console warned.insertLeft = true; } @@ -602,7 +604,9 @@ MagicString.prototype.insertLeft = function insertLeft (index, content) { MagicString.prototype.insertRight = function insertRight (index, content) { if (!warned.insertRight) { - console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead' + ); // eslint-disable-line no-console warned.insertRight = true; } @@ -654,14 +658,18 @@ MagicString.prototype.overwrite = function overwrite (start, end, content, optio if (end > this.original.length) { throw new Error('end is out of bounds'); } if (start === end) - { throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); } + { throw new Error( + 'Cannot overwrite a zero-length range – use appendLeft or prependRight instead' + ); } this._split(start); this._split(end); if (options === true) { if (!warned.storeName) { - console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console + console.warn( + 'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string' + ); // eslint-disable-line no-console warned.storeName = true; } @@ -672,28 +680,23 @@ MagicString.prototype.overwrite = function overwrite (start, end, content, optio if (storeName) { var original = this.original.slice(start, end); - this.storedNames[original] = true; + Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true }); } var first = this.byStart[start]; var last = this.byEnd[end]; if (first) { - if (end > first.end && first.next !== this.byStart[first.end]) { - throw new Error('Cannot overwrite across a split point'); - } - - first.edit(content, storeName, contentOnly); - - if (first !== last) { - var chunk = first.next; - while (chunk !== last) { - chunk.edit('', false); - chunk = chunk.next; + var chunk = first; + while (chunk !== last) { + if (chunk.next !== this.byStart[chunk.end]) { + throw new Error('Cannot overwrite across a split point'); } - + chunk = chunk.next; chunk.edit('', false); } + + first.edit(content, storeName, contentOnly); } else { // must be inserting at the end var newChunk = new Chunk(start, end, '').edit(content, storeName); @@ -767,53 +770,43 @@ MagicString.prototype.remove = function remove (start, end) { }; MagicString.prototype.lastChar = function lastChar () { - if (this.outro.length) - { return this.outro[this.outro.length - 1]; } + if (this.outro.length) { return this.outro[this.outro.length - 1]; } var chunk = this.lastChunk; do { - if (chunk.outro.length) - { return chunk.outro[chunk.outro.length - 1]; } - if (chunk.content.length) - { return chunk.content[chunk.content.length - 1]; } - if (chunk.intro.length) - { return chunk.intro[chunk.intro.length - 1]; } - } while (chunk = chunk.previous); - if (this.intro.length) - { return this.intro[this.intro.length - 1]; } + if (chunk.outro.length) { return chunk.outro[chunk.outro.length - 1]; } + if (chunk.content.length) { return chunk.content[chunk.content.length - 1]; } + if (chunk.intro.length) { return chunk.intro[chunk.intro.length - 1]; } + } while ((chunk = chunk.previous)); + if (this.intro.length) { return this.intro[this.intro.length - 1]; } return ''; }; MagicString.prototype.lastLine = function lastLine () { var lineIndex = this.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.outro.substr(lineIndex + 1); } + if (lineIndex !== -1) { return this.outro.substr(lineIndex + 1); } var lineStr = this.outro; var chunk = this.lastChunk; do { if (chunk.outro.length > 0) { lineIndex = chunk.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.outro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.outro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.outro + lineStr; } if (chunk.content.length > 0) { lineIndex = chunk.content.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.content.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.content.substr(lineIndex + 1) + lineStr; } lineStr = chunk.content + lineStr; } if (chunk.intro.length > 0) { lineIndex = chunk.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.intro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.intro + lineStr; } - } while (chunk = chunk.previous); + } while ((chunk = chunk.previous)); lineIndex = this.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return this.intro.substr(lineIndex + 1) + lineStr; } return this.intro + lineStr; }; @@ -927,11 +920,13 @@ MagicString.prototype.toString = function toString () { MagicString.prototype.isEmpty = function isEmpty () { var chunk = this.firstChunk; do { - if (chunk.intro.length && chunk.intro.trim() || - chunk.content.length && chunk.content.trim() || - chunk.outro.length && chunk.outro.trim()) + if ( + (chunk.intro.length && chunk.intro.trim()) || + (chunk.content.length && chunk.content.trim()) || + (chunk.outro.length && chunk.outro.trim()) + ) { return false; } - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return true; }; @@ -940,7 +935,7 @@ MagicString.prototype.length = function length () { var length = 0; do { length += chunk.intro.length + chunk.content.length + chunk.outro.length; - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return length; }; @@ -1036,12 +1031,14 @@ Bundle.prototype.addSource = function addSource (source) { return this.addSource({ content: source, filename: source.filename, - separator: this.separator + separator: this.separator, }); } if (!isObject(source) || !source.content) { - throw new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'); + throw new Error( + 'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`' + ); } ['filename', 'indentExclusionRanges', 'separator'].forEach(function (option) { @@ -1072,7 +1069,7 @@ Bundle.prototype.addSource = function addSource (source) { Bundle.prototype.append = function append (str, options) { this.addSource({ content: new MagicString(str), - separator: (options && options.separator) || '' + separator: (options && options.separator) || '', }); return this; @@ -1081,14 +1078,14 @@ Bundle.prototype.append = function append (str, options) { Bundle.prototype.clone = function clone () { var bundle = new Bundle({ intro: this.intro, - separator: this.separator + separator: this.separator, }); this.sources.forEach(function (source) { bundle.addSource({ filename: source.filename, content: source.content.clone(), - separator: source.separator + separator: source.separator, }); }); @@ -1096,7 +1093,7 @@ Bundle.prototype.clone = function clone () { }; Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; if ( options === void 0 ) options = {}; var names = []; @@ -1114,10 +1111,10 @@ Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { this.sources.forEach(function (source, i) { if (i > 0) { - mappings.advance(this$1.separator); + mappings.advance(this$1$1.separator); } - var sourceIndex = source.filename ? this$1.uniqueSourceIndexByFilename[source.filename] : -1; + var sourceIndex = source.filename ? this$1$1.uniqueSourceIndexByFilename[source.filename] : -1; var magicString = source.content; var locate = getLocator(magicString.original); @@ -1168,7 +1165,7 @@ Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { return options.includeContent ? source.content : null; }), names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -1196,7 +1193,7 @@ Bundle.prototype.getIndentString = function getIndentString () { }; Bundle.prototype.indent = function indent (indentStr) { - var this$1 = this; + var this$1$1 = this; if (!arguments.length) { indentStr = this.getIndentString(); @@ -1207,12 +1204,12 @@ Bundle.prototype.indent = function indent (indentStr) { var trailingNewline = !this.intro || this.intro.slice(-1) === '\n'; this.sources.forEach(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var indentStart = trailingNewline || (i > 0 && /\r?\n$/.test(separator)); source.content.indent(indentStr, { exclude: source.indentExclusionRanges, - indentStart: indentStart //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) + indentStart: indentStart, //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) }); trailingNewline = source.content.lastChar() === '\n'; @@ -1235,11 +1232,11 @@ Bundle.prototype.prepend = function prepend (str) { }; Bundle.prototype.toString = function toString () { - var this$1 = this; + var this$1$1 = this; var body = this.sources .map(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var str = (i > 0 ? separator : '') + source.content.toString(); return str; @@ -1250,15 +1247,16 @@ Bundle.prototype.toString = function toString () { }; Bundle.prototype.isEmpty = function isEmpty () { - if (this.intro.length && this.intro.trim()) - { return false; } - if (this.sources.some(function (source) { return !source.content.isEmpty(); })) - { return false; } + if (this.intro.length && this.intro.trim()) { return false; } + if (this.sources.some(function (source) { return !source.content.isEmpty(); })) { return false; } return true; }; Bundle.prototype.length = function length () { - return this.sources.reduce(function (length, source) { return length + source.content.length(); }, this.intro.length); + return this.sources.reduce( + function (length, source) { return length + source.content.length(); }, + this.intro.length + ); }; Bundle.prototype.trimLines = function trimLines () { diff --git a/build/node_modules/magic-string/dist/magic-string.cjs.js.map b/build/node_modules/magic-string/dist/magic-string.cjs.js.map index 44ff11e6..964c77e3 100644 --- a/build/node_modules/magic-string/dist/magic-string.cjs.js.map +++ b/build/node_modules/magic-string/dist/magic-string.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"magic-string.cjs.js","sources":["../src/BitSet.js","../src/Chunk.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js","../src/index-legacy.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null }\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = str => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = str => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter(line => /^\\t+/.test(line));\n\tconst spaced = lines.filter(line => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) }\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext(chunk => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach(exclusion => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = match => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead');\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tthis.storedNames[original] = true;\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tif (end > first.end && first.next !== this.byStart[first.end]) {\n\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\n\t\t\tif (first !== last) {\n\t\t\t\tlet chunk = first.next;\n\t\t\t\twhile (chunk !== last) {\n\t\t\t\t\tchunk.edit('', false);\n\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length)\n\t\t\treturn this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length)\n\t\t\t\treturn chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length)\n\t\t\t\treturn chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length)\n\t\t\t\treturn chunk.intro[chunk.intro.length - 1];\n\t\t} while (chunk = chunk.previous);\n\t\tif (this.intro.length)\n\t\t\treturn this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while (chunk = chunk.previous);\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${\n\t\t\t\t\tchunk.original\n\t\t\t\t}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (chunk.intro.length && chunk.intro.trim() ||\n\t\t\t\t\tchunk.content.length && chunk.content.trim() ||\n\t\t\t\t\tchunk.outro.length && chunk.outro.trim())\n\t\t\t\treturn false;\n\t\t} while (chunk = chunk.next);\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while (chunk = chunk.next);\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`');\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach(option => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || ''\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator\n\t\t});\n\n\t\tthis.sources.forEach(source => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach(source => {\n\t\t\tObject.keys(source.content.storedNames).forEach(name => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext(chunk => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map(source => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map(source => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach(source => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty () {\n\t\tif (this.intro.length && this.intro.trim())\n\t\t\treturn false;\n\t\tif (this.sources.some(source => !source.content.isEmpty()))\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce((length, source) => length + source.content.length(), this.intro.length);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport Bundle from './Bundle.js';\nimport SourceMap from './SourceMap.js';\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nexport default MagicString;\n"],"names":["const","let","encode","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"magic-string.cjs.js","sources":["../src/BitSet.js","../src/Chunk.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js","../src/index-legacy.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null },\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = (str) => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = (str) => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) },\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true });\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport Bundle from './Bundle.js';\nimport SourceMap from './SourceMap.js';\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nexport default MagicString;\n"],"names":["const","let","encode","this"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/magic-string/dist/magic-string.es.js b/build/node_modules/magic-string/dist/magic-string.es.js index 56a22e46..f6b409a6 100644 --- a/build/node_modules/magic-string/dist/magic-string.es.js +++ b/build/node_modules/magic-string/dist/magic-string.es.js @@ -27,7 +27,7 @@ var Chunk = function Chunk(start, end, content) { // we make these non-enumerable, for sanity while debugging Object.defineProperties(this, { previous: { writable: true, value: null }, - next: { writable: true, value: null } + next: { writable: true, value: null }, }); }; @@ -137,7 +137,6 @@ Chunk.prototype.trimEnd = function trimEnd (rx) { this.split(this.start + trimmed.length).edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -158,7 +157,6 @@ Chunk.prototype.trimStart = function trimStart (rx) { this.edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -343,7 +341,7 @@ var n = '\n'; var warned = { insertLeft: false, insertRight: false, - storeName: false + storeName: false, }; var MagicString = function MagicString(string, options) { @@ -352,19 +350,19 @@ var MagicString = function MagicString(string, options) { var chunk = new Chunk(0, string.length, string); Object.defineProperties(this, { - original: { writable: true, value: string }, - outro: { writable: true, value: '' }, - intro: { writable: true, value: '' }, - firstChunk: { writable: true, value: chunk }, - lastChunk: { writable: true, value: chunk }, - lastSearchedChunk: { writable: true, value: chunk }, - byStart: { writable: true, value: {} }, - byEnd: { writable: true, value: {} }, - filename: { writable: true, value: options.filename }, + original: { writable: true, value: string }, + outro: { writable: true, value: '' }, + intro: { writable: true, value: '' }, + firstChunk: { writable: true, value: chunk }, + lastChunk: { writable: true, value: chunk }, + lastSearchedChunk: { writable: true, value: chunk }, + byStart: { writable: true, value: {} }, + byEnd: { writable: true, value: {} }, + filename: { writable: true, value: options.filename }, indentExclusionRanges: { writable: true, value: options.indentExclusionRanges }, - sourcemapLocations: { writable: true, value: new BitSet() }, - storedNames: { writable: true, value: {} }, - indentStr: { writable: true, value: guessIndent(string) } + sourcemapLocations: { writable: true, value: new BitSet() }, + storedNames: { writable: true, value: {} }, + indentStr: { writable: true, value: guessIndent(string) }, }); this.byStart[0] = chunk; @@ -450,7 +448,7 @@ MagicString.prototype.clone = function clone () { }; MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; options = options || {}; @@ -477,7 +475,7 @@ MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) chunk.storeName ? names.indexOf(chunk.original) : -1 ); } else { - mappings.addUneditedChunk(sourceIndex, chunk, this$1.original, loc, this$1.sourcemapLocations); + mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations); } if (chunk.outro.length) { mappings.advance(chunk.outro); } @@ -488,7 +486,7 @@ MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) sources: [options.source ? getRelativePath(options.file || '', options.source) : null], sourcesContent: options.includeContent ? [this.original] : [null], names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -586,12 +584,16 @@ MagicString.prototype.indent = function indent (indentStr, options) { }; MagicString.prototype.insert = function insert () { - throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'); + throw new Error( + 'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)' + ); }; MagicString.prototype.insertLeft = function insertLeft (index, content) { if (!warned.insertLeft) { - console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead' + ); // eslint-disable-line no-console warned.insertLeft = true; } @@ -600,7 +602,9 @@ MagicString.prototype.insertLeft = function insertLeft (index, content) { MagicString.prototype.insertRight = function insertRight (index, content) { if (!warned.insertRight) { - console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead' + ); // eslint-disable-line no-console warned.insertRight = true; } @@ -652,14 +656,18 @@ MagicString.prototype.overwrite = function overwrite (start, end, content, optio if (end > this.original.length) { throw new Error('end is out of bounds'); } if (start === end) - { throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); } + { throw new Error( + 'Cannot overwrite a zero-length range – use appendLeft or prependRight instead' + ); } this._split(start); this._split(end); if (options === true) { if (!warned.storeName) { - console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console + console.warn( + 'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string' + ); // eslint-disable-line no-console warned.storeName = true; } @@ -670,28 +678,23 @@ MagicString.prototype.overwrite = function overwrite (start, end, content, optio if (storeName) { var original = this.original.slice(start, end); - this.storedNames[original] = true; + Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true }); } var first = this.byStart[start]; var last = this.byEnd[end]; if (first) { - if (end > first.end && first.next !== this.byStart[first.end]) { - throw new Error('Cannot overwrite across a split point'); - } - - first.edit(content, storeName, contentOnly); - - if (first !== last) { - var chunk = first.next; - while (chunk !== last) { - chunk.edit('', false); - chunk = chunk.next; + var chunk = first; + while (chunk !== last) { + if (chunk.next !== this.byStart[chunk.end]) { + throw new Error('Cannot overwrite across a split point'); } - + chunk = chunk.next; chunk.edit('', false); } + + first.edit(content, storeName, contentOnly); } else { // must be inserting at the end var newChunk = new Chunk(start, end, '').edit(content, storeName); @@ -765,53 +768,43 @@ MagicString.prototype.remove = function remove (start, end) { }; MagicString.prototype.lastChar = function lastChar () { - if (this.outro.length) - { return this.outro[this.outro.length - 1]; } + if (this.outro.length) { return this.outro[this.outro.length - 1]; } var chunk = this.lastChunk; do { - if (chunk.outro.length) - { return chunk.outro[chunk.outro.length - 1]; } - if (chunk.content.length) - { return chunk.content[chunk.content.length - 1]; } - if (chunk.intro.length) - { return chunk.intro[chunk.intro.length - 1]; } - } while (chunk = chunk.previous); - if (this.intro.length) - { return this.intro[this.intro.length - 1]; } + if (chunk.outro.length) { return chunk.outro[chunk.outro.length - 1]; } + if (chunk.content.length) { return chunk.content[chunk.content.length - 1]; } + if (chunk.intro.length) { return chunk.intro[chunk.intro.length - 1]; } + } while ((chunk = chunk.previous)); + if (this.intro.length) { return this.intro[this.intro.length - 1]; } return ''; }; MagicString.prototype.lastLine = function lastLine () { var lineIndex = this.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.outro.substr(lineIndex + 1); } + if (lineIndex !== -1) { return this.outro.substr(lineIndex + 1); } var lineStr = this.outro; var chunk = this.lastChunk; do { if (chunk.outro.length > 0) { lineIndex = chunk.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.outro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.outro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.outro + lineStr; } if (chunk.content.length > 0) { lineIndex = chunk.content.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.content.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.content.substr(lineIndex + 1) + lineStr; } lineStr = chunk.content + lineStr; } if (chunk.intro.length > 0) { lineIndex = chunk.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.intro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.intro + lineStr; } - } while (chunk = chunk.previous); + } while ((chunk = chunk.previous)); lineIndex = this.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return this.intro.substr(lineIndex + 1) + lineStr; } return this.intro + lineStr; }; @@ -925,11 +918,13 @@ MagicString.prototype.toString = function toString () { MagicString.prototype.isEmpty = function isEmpty () { var chunk = this.firstChunk; do { - if (chunk.intro.length && chunk.intro.trim() || - chunk.content.length && chunk.content.trim() || - chunk.outro.length && chunk.outro.trim()) + if ( + (chunk.intro.length && chunk.intro.trim()) || + (chunk.content.length && chunk.content.trim()) || + (chunk.outro.length && chunk.outro.trim()) + ) { return false; } - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return true; }; @@ -938,7 +933,7 @@ MagicString.prototype.length = function length () { var length = 0; do { length += chunk.intro.length + chunk.content.length + chunk.outro.length; - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return length; }; @@ -1034,12 +1029,14 @@ Bundle.prototype.addSource = function addSource (source) { return this.addSource({ content: source, filename: source.filename, - separator: this.separator + separator: this.separator, }); } if (!isObject(source) || !source.content) { - throw new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'); + throw new Error( + 'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`' + ); } ['filename', 'indentExclusionRanges', 'separator'].forEach(function (option) { @@ -1070,7 +1067,7 @@ Bundle.prototype.addSource = function addSource (source) { Bundle.prototype.append = function append (str, options) { this.addSource({ content: new MagicString(str), - separator: (options && options.separator) || '' + separator: (options && options.separator) || '', }); return this; @@ -1079,14 +1076,14 @@ Bundle.prototype.append = function append (str, options) { Bundle.prototype.clone = function clone () { var bundle = new Bundle({ intro: this.intro, - separator: this.separator + separator: this.separator, }); this.sources.forEach(function (source) { bundle.addSource({ filename: source.filename, content: source.content.clone(), - separator: source.separator + separator: source.separator, }); }); @@ -1094,7 +1091,7 @@ Bundle.prototype.clone = function clone () { }; Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; if ( options === void 0 ) options = {}; var names = []; @@ -1112,10 +1109,10 @@ Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { this.sources.forEach(function (source, i) { if (i > 0) { - mappings.advance(this$1.separator); + mappings.advance(this$1$1.separator); } - var sourceIndex = source.filename ? this$1.uniqueSourceIndexByFilename[source.filename] : -1; + var sourceIndex = source.filename ? this$1$1.uniqueSourceIndexByFilename[source.filename] : -1; var magicString = source.content; var locate = getLocator(magicString.original); @@ -1166,7 +1163,7 @@ Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { return options.includeContent ? source.content : null; }), names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -1194,7 +1191,7 @@ Bundle.prototype.getIndentString = function getIndentString () { }; Bundle.prototype.indent = function indent (indentStr) { - var this$1 = this; + var this$1$1 = this; if (!arguments.length) { indentStr = this.getIndentString(); @@ -1205,12 +1202,12 @@ Bundle.prototype.indent = function indent (indentStr) { var trailingNewline = !this.intro || this.intro.slice(-1) === '\n'; this.sources.forEach(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var indentStart = trailingNewline || (i > 0 && /\r?\n$/.test(separator)); source.content.indent(indentStr, { exclude: source.indentExclusionRanges, - indentStart: indentStart //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) + indentStart: indentStart, //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) }); trailingNewline = source.content.lastChar() === '\n'; @@ -1233,11 +1230,11 @@ Bundle.prototype.prepend = function prepend (str) { }; Bundle.prototype.toString = function toString () { - var this$1 = this; + var this$1$1 = this; var body = this.sources .map(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var str = (i > 0 ? separator : '') + source.content.toString(); return str; @@ -1248,15 +1245,16 @@ Bundle.prototype.toString = function toString () { }; Bundle.prototype.isEmpty = function isEmpty () { - if (this.intro.length && this.intro.trim()) - { return false; } - if (this.sources.some(function (source) { return !source.content.isEmpty(); })) - { return false; } + if (this.intro.length && this.intro.trim()) { return false; } + if (this.sources.some(function (source) { return !source.content.isEmpty(); })) { return false; } return true; }; Bundle.prototype.length = function length () { - return this.sources.reduce(function (length, source) { return length + source.content.length(); }, this.intro.length); + return this.sources.reduce( + function (length, source) { return length + source.content.length(); }, + this.intro.length + ); }; Bundle.prototype.trimLines = function trimLines () { @@ -1303,6 +1301,5 @@ Bundle.prototype.trimEnd = function trimEnd (charType) { return this; }; -export default MagicString; -export { Bundle, SourceMap }; +export { Bundle, SourceMap, MagicString as default }; //# sourceMappingURL=magic-string.es.js.map diff --git a/build/node_modules/magic-string/dist/magic-string.es.js.map b/build/node_modules/magic-string/dist/magic-string.es.js.map index 6a6969a1..4624dd8f 100644 --- a/build/node_modules/magic-string/dist/magic-string.es.js.map +++ b/build/node_modules/magic-string/dist/magic-string.es.js.map @@ -1 +1 @@ -{"version":3,"file":"magic-string.es.js","sources":["../src/BitSet.js","../src/Chunk.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null }\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = str => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = str => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter(line => /^\\t+/.test(line));\n\tconst spaced = lines.filter(line => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) }\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext(chunk => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach(exclusion => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = match => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead');\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tthis.storedNames[original] = true;\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tif (end > first.end && first.next !== this.byStart[first.end]) {\n\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\n\t\t\tif (first !== last) {\n\t\t\t\tlet chunk = first.next;\n\t\t\t\twhile (chunk !== last) {\n\t\t\t\t\tchunk.edit('', false);\n\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length)\n\t\t\treturn this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length)\n\t\t\t\treturn chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length)\n\t\t\t\treturn chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length)\n\t\t\t\treturn chunk.intro[chunk.intro.length - 1];\n\t\t} while (chunk = chunk.previous);\n\t\tif (this.intro.length)\n\t\t\treturn this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while (chunk = chunk.previous);\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${\n\t\t\t\t\tchunk.original\n\t\t\t\t}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (chunk.intro.length && chunk.intro.trim() ||\n\t\t\t\t\tchunk.content.length && chunk.content.trim() ||\n\t\t\t\t\tchunk.outro.length && chunk.outro.trim())\n\t\t\t\treturn false;\n\t\t} while (chunk = chunk.next);\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while (chunk = chunk.next);\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`');\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach(option => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || ''\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator\n\t\t});\n\n\t\tthis.sources.forEach(source => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach(source => {\n\t\t\tObject.keys(source.content.storedNames).forEach(name => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext(chunk => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map(source => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map(source => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach(source => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty () {\n\t\tif (this.intro.length && this.intro.trim())\n\t\t\treturn false;\n\t\tif (this.sources.some(source => !source.content.isEmpty()))\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce((length, source) => length + source.content.length(), this.intro.length);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n"],"names":["const","let","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"magic-string.es.js","sources":["../src/BitSet.js","../src/Chunk.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null },\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = (str) => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = (str) => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) },\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true });\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n"],"names":["const","let","this"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/magic-string/dist/magic-string.umd.js b/build/node_modules/magic-string/dist/magic-string.umd.js index 7c8f62cb..573a4e1b 100644 --- a/build/node_modules/magic-string/dist/magic-string.umd.js +++ b/build/node_modules/magic-string/dist/magic-string.umd.js @@ -1,8 +1,8 @@ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.MagicString = factory()); -}(this, function () { 'use strict'; + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MagicString = factory()); +})(this, (function () { 'use strict'; var BitSet = function BitSet(arg) { this.bits = arg instanceof BitSet ? arg.bits.slice() : []; @@ -31,7 +31,7 @@ // we make these non-enumerable, for sanity while debugging Object.defineProperties(this, { previous: { writable: true, value: null }, - next: { writable: true, value: null } + next: { writable: true, value: null }, }); }; @@ -141,7 +141,6 @@ this.split(this.start + trimmed.length).edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -162,7 +161,6 @@ this.edit('', undefined, true); } return true; - } else { this.edit('', undefined, true); @@ -171,7 +169,11 @@ } }; + var charToInteger = {}; var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + for (var i = 0; i < chars.length; i++) { + charToInteger[chars.charCodeAt(i)] = i; + } function encode(decoded) { var sourceFileIndex = 0; // second field var sourceCodeLine = 0; // third field @@ -214,7 +216,7 @@ num = num < 0 ? (-num << 1) | 1 : num << 1; do { var clamped = num & 31; - num >>= 5; + num >>>= 5; if (num > 0) { clamped |= 32; } @@ -399,7 +401,7 @@ var warned = { insertLeft: false, insertRight: false, - storeName: false + storeName: false, }; var MagicString = function MagicString(string, options) { @@ -408,19 +410,19 @@ var chunk = new Chunk(0, string.length, string); Object.defineProperties(this, { - original: { writable: true, value: string }, - outro: { writable: true, value: '' }, - intro: { writable: true, value: '' }, - firstChunk: { writable: true, value: chunk }, - lastChunk: { writable: true, value: chunk }, - lastSearchedChunk: { writable: true, value: chunk }, - byStart: { writable: true, value: {} }, - byEnd: { writable: true, value: {} }, - filename: { writable: true, value: options.filename }, + original: { writable: true, value: string }, + outro: { writable: true, value: '' }, + intro: { writable: true, value: '' }, + firstChunk: { writable: true, value: chunk }, + lastChunk: { writable: true, value: chunk }, + lastSearchedChunk: { writable: true, value: chunk }, + byStart: { writable: true, value: {} }, + byEnd: { writable: true, value: {} }, + filename: { writable: true, value: options.filename }, indentExclusionRanges: { writable: true, value: options.indentExclusionRanges }, - sourcemapLocations: { writable: true, value: new BitSet() }, - storedNames: { writable: true, value: {} }, - indentStr: { writable: true, value: guessIndent(string) } + sourcemapLocations: { writable: true, value: new BitSet() }, + storedNames: { writable: true, value: {} }, + indentStr: { writable: true, value: guessIndent(string) }, }); this.byStart[0] = chunk; @@ -506,7 +508,7 @@ }; MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; options = options || {}; @@ -533,7 +535,7 @@ chunk.storeName ? names.indexOf(chunk.original) : -1 ); } else { - mappings.addUneditedChunk(sourceIndex, chunk, this$1.original, loc, this$1.sourcemapLocations); + mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations); } if (chunk.outro.length) { mappings.advance(chunk.outro); } @@ -544,7 +546,7 @@ sources: [options.source ? getRelativePath(options.file || '', options.source) : null], sourcesContent: options.includeContent ? [this.original] : [null], names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -642,12 +644,16 @@ }; MagicString.prototype.insert = function insert () { - throw new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'); + throw new Error( + 'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)' + ); }; MagicString.prototype.insertLeft = function insertLeft (index, content) { if (!warned.insertLeft) { - console.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead' + ); // eslint-disable-line no-console warned.insertLeft = true; } @@ -656,7 +662,9 @@ MagicString.prototype.insertRight = function insertRight (index, content) { if (!warned.insertRight) { - console.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console + console.warn( + 'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead' + ); // eslint-disable-line no-console warned.insertRight = true; } @@ -708,14 +716,18 @@ if (end > this.original.length) { throw new Error('end is out of bounds'); } if (start === end) - { throw new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead'); } + { throw new Error( + 'Cannot overwrite a zero-length range – use appendLeft or prependRight instead' + ); } this._split(start); this._split(end); if (options === true) { if (!warned.storeName) { - console.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console + console.warn( + 'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string' + ); // eslint-disable-line no-console warned.storeName = true; } @@ -726,28 +738,23 @@ if (storeName) { var original = this.original.slice(start, end); - this.storedNames[original] = true; + Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true }); } var first = this.byStart[start]; var last = this.byEnd[end]; if (first) { - if (end > first.end && first.next !== this.byStart[first.end]) { - throw new Error('Cannot overwrite across a split point'); - } - - first.edit(content, storeName, contentOnly); - - if (first !== last) { - var chunk = first.next; - while (chunk !== last) { - chunk.edit('', false); - chunk = chunk.next; + var chunk = first; + while (chunk !== last) { + if (chunk.next !== this.byStart[chunk.end]) { + throw new Error('Cannot overwrite across a split point'); } - + chunk = chunk.next; chunk.edit('', false); } + + first.edit(content, storeName, contentOnly); } else { // must be inserting at the end var newChunk = new Chunk(start, end, '').edit(content, storeName); @@ -821,53 +828,43 @@ }; MagicString.prototype.lastChar = function lastChar () { - if (this.outro.length) - { return this.outro[this.outro.length - 1]; } + if (this.outro.length) { return this.outro[this.outro.length - 1]; } var chunk = this.lastChunk; do { - if (chunk.outro.length) - { return chunk.outro[chunk.outro.length - 1]; } - if (chunk.content.length) - { return chunk.content[chunk.content.length - 1]; } - if (chunk.intro.length) - { return chunk.intro[chunk.intro.length - 1]; } - } while (chunk = chunk.previous); - if (this.intro.length) - { return this.intro[this.intro.length - 1]; } + if (chunk.outro.length) { return chunk.outro[chunk.outro.length - 1]; } + if (chunk.content.length) { return chunk.content[chunk.content.length - 1]; } + if (chunk.intro.length) { return chunk.intro[chunk.intro.length - 1]; } + } while ((chunk = chunk.previous)); + if (this.intro.length) { return this.intro[this.intro.length - 1]; } return ''; }; MagicString.prototype.lastLine = function lastLine () { var lineIndex = this.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.outro.substr(lineIndex + 1); } + if (lineIndex !== -1) { return this.outro.substr(lineIndex + 1); } var lineStr = this.outro; var chunk = this.lastChunk; do { if (chunk.outro.length > 0) { lineIndex = chunk.outro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.outro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.outro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.outro + lineStr; } if (chunk.content.length > 0) { lineIndex = chunk.content.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.content.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.content.substr(lineIndex + 1) + lineStr; } lineStr = chunk.content + lineStr; } if (chunk.intro.length > 0) { lineIndex = chunk.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return chunk.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return chunk.intro.substr(lineIndex + 1) + lineStr; } lineStr = chunk.intro + lineStr; } - } while (chunk = chunk.previous); + } while ((chunk = chunk.previous)); lineIndex = this.intro.lastIndexOf(n); - if (lineIndex !== -1) - { return this.intro.substr(lineIndex + 1) + lineStr; } + if (lineIndex !== -1) { return this.intro.substr(lineIndex + 1) + lineStr; } return this.intro + lineStr; }; @@ -981,11 +978,13 @@ MagicString.prototype.isEmpty = function isEmpty () { var chunk = this.firstChunk; do { - if (chunk.intro.length && chunk.intro.trim() || - chunk.content.length && chunk.content.trim() || - chunk.outro.length && chunk.outro.trim()) + if ( + (chunk.intro.length && chunk.intro.trim()) || + (chunk.content.length && chunk.content.trim()) || + (chunk.outro.length && chunk.outro.trim()) + ) { return false; } - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return true; }; @@ -994,7 +993,7 @@ var length = 0; do { length += chunk.intro.length + chunk.content.length + chunk.outro.length; - } while (chunk = chunk.next); + } while ((chunk = chunk.next)); return length; }; @@ -1090,12 +1089,14 @@ return this.addSource({ content: source, filename: source.filename, - separator: this.separator + separator: this.separator, }); } if (!isObject(source) || !source.content) { - throw new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'); + throw new Error( + 'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`' + ); } ['filename', 'indentExclusionRanges', 'separator'].forEach(function (option) { @@ -1126,7 +1127,7 @@ Bundle.prototype.append = function append (str, options) { this.addSource({ content: new MagicString(str), - separator: (options && options.separator) || '' + separator: (options && options.separator) || '', }); return this; @@ -1135,14 +1136,14 @@ Bundle.prototype.clone = function clone () { var bundle = new Bundle({ intro: this.intro, - separator: this.separator + separator: this.separator, }); this.sources.forEach(function (source) { bundle.addSource({ filename: source.filename, content: source.content.clone(), - separator: source.separator + separator: source.separator, }); }); @@ -1150,7 +1151,7 @@ }; Bundle.prototype.generateDecodedMap = function generateDecodedMap (options) { - var this$1 = this; + var this$1$1 = this; if ( options === void 0 ) options = {}; var names = []; @@ -1168,10 +1169,10 @@ this.sources.forEach(function (source, i) { if (i > 0) { - mappings.advance(this$1.separator); + mappings.advance(this$1$1.separator); } - var sourceIndex = source.filename ? this$1.uniqueSourceIndexByFilename[source.filename] : -1; + var sourceIndex = source.filename ? this$1$1.uniqueSourceIndexByFilename[source.filename] : -1; var magicString = source.content; var locate = getLocator(magicString.original); @@ -1222,7 +1223,7 @@ return options.includeContent ? source.content : null; }), names: names, - mappings: mappings.raw + mappings: mappings.raw, }; }; @@ -1250,7 +1251,7 @@ }; Bundle.prototype.indent = function indent (indentStr) { - var this$1 = this; + var this$1$1 = this; if (!arguments.length) { indentStr = this.getIndentString(); @@ -1261,12 +1262,12 @@ var trailingNewline = !this.intro || this.intro.slice(-1) === '\n'; this.sources.forEach(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var indentStart = trailingNewline || (i > 0 && /\r?\n$/.test(separator)); source.content.indent(indentStr, { exclude: source.indentExclusionRanges, - indentStart: indentStart //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) + indentStart: indentStart, //: trailingNewline || /\r?\n$/.test( separator ) //true///\r?\n/.test( separator ) }); trailingNewline = source.content.lastChar() === '\n'; @@ -1289,11 +1290,11 @@ }; Bundle.prototype.toString = function toString () { - var this$1 = this; + var this$1$1 = this; var body = this.sources .map(function (source, i) { - var separator = source.separator !== undefined ? source.separator : this$1.separator; + var separator = source.separator !== undefined ? source.separator : this$1$1.separator; var str = (i > 0 ? separator : '') + source.content.toString(); return str; @@ -1304,15 +1305,16 @@ }; Bundle.prototype.isEmpty = function isEmpty () { - if (this.intro.length && this.intro.trim()) - { return false; } - if (this.sources.some(function (source) { return !source.content.isEmpty(); })) - { return false; } + if (this.intro.length && this.intro.trim()) { return false; } + if (this.sources.some(function (source) { return !source.content.isEmpty(); })) { return false; } return true; }; Bundle.prototype.length = function length () { - return this.sources.reduce(function (length, source) { return length + source.content.length(); }, this.intro.length); + return this.sources.reduce( + function (length, source) { return length + source.content.length(); }, + this.intro.length + ); }; Bundle.prototype.trimLines = function trimLines () { diff --git a/build/node_modules/magic-string/dist/magic-string.umd.js.map b/build/node_modules/magic-string/dist/magic-string.umd.js.map index 0ec5b5b2..70607d02 100644 --- a/build/node_modules/magic-string/dist/magic-string.umd.js.map +++ b/build/node_modules/magic-string/dist/magic-string.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"magic-string.umd.js","sources":["../src/BitSet.js","../src/Chunk.js","../node_modules/sourcemap-codec/dist/sourcemap-codec.es.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js","../src/index-legacy.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null }\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","var charToInteger = {};\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfor (var i = 0; i < chars.length; i++) {\n charToInteger[chars.charCodeAt(i)] = i;\n}\nfunction decode(mappings) {\n var generatedCodeColumn = 0; // first field\n var sourceFileIndex = 0; // second field\n var sourceCodeLine = 0; // third field\n var sourceCodeColumn = 0; // fourth field\n var nameIndex = 0; // fifth field\n var decoded = [];\n var line = [];\n var segment = [];\n for (var i = 0, j = 0, shift = 0, value = 0, len = mappings.length; i < len; i++) {\n var c = mappings.charCodeAt(i);\n if (c === 44) { // \",\"\n if (segment.length)\n line.push(new Int32Array(segment));\n segment = [];\n j = 0;\n }\n else if (c === 59) { // \";\"\n if (segment.length)\n line.push(new Int32Array(segment));\n segment = [];\n j = 0;\n decoded.push(line);\n line = [];\n generatedCodeColumn = 0;\n }\n else {\n var integer = charToInteger[c];\n if (integer === undefined) {\n throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n }\n var hasContinuationBit = integer & 32;\n integer &= 31;\n value += integer << shift;\n if (hasContinuationBit) {\n shift += 5;\n }\n else {\n var shouldNegate = value & 1;\n value >>= 1;\n var num = shouldNegate ? -value : value;\n if (j == 0) {\n generatedCodeColumn += num;\n segment.push(generatedCodeColumn);\n }\n else if (j === 1) {\n sourceFileIndex += num;\n segment.push(sourceFileIndex);\n }\n else if (j === 2) {\n sourceCodeLine += num;\n segment.push(sourceCodeLine);\n }\n else if (j === 3) {\n sourceCodeColumn += num;\n segment.push(sourceCodeColumn);\n }\n else if (j === 4) {\n nameIndex += num;\n segment.push(nameIndex);\n }\n j++;\n value = shift = 0; // reset\n }\n }\n }\n if (segment.length)\n line.push(new Int32Array(segment));\n decoded.push(line);\n return decoded;\n}\nfunction encode(decoded) {\n var sourceFileIndex = 0; // second field\n var sourceCodeLine = 0; // third field\n var sourceCodeColumn = 0; // fourth field\n var nameIndex = 0; // fifth field\n var mappings = '';\n for (var i = 0; i < decoded.length; i++) {\n var line = decoded[i];\n if (i > 0)\n mappings += ';';\n if (line.length === 0)\n continue;\n var generatedCodeColumn = 0; // first field\n var lineMappings = [];\n for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n var segment = line_1[_i];\n var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n generatedCodeColumn = segment[0];\n if (segment.length > 1) {\n segmentMappings +=\n encodeInteger(segment[1] - sourceFileIndex) +\n encodeInteger(segment[2] - sourceCodeLine) +\n encodeInteger(segment[3] - sourceCodeColumn);\n sourceFileIndex = segment[1];\n sourceCodeLine = segment[2];\n sourceCodeColumn = segment[3];\n }\n if (segment.length === 5) {\n segmentMappings += encodeInteger(segment[4] - nameIndex);\n nameIndex = segment[4];\n }\n lineMappings.push(segmentMappings);\n }\n mappings += lineMappings.join(',');\n }\n return mappings;\n}\nfunction encodeInteger(num) {\n var result = '';\n num = num < 0 ? (-num << 1) | 1 : num << 1;\n do {\n var clamped = num & 31;\n num >>= 5;\n if (num > 0) {\n clamped |= 32;\n }\n result += chars[clamped];\n } while (num > 0);\n return result;\n}\n\nexport { decode, encode };\n//# sourceMappingURL=sourcemap-codec.es.js.map\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = str => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = str => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter(line => /^\\t+/.test(line));\n\tconst spaced = lines.filter(line => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) }\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext(chunk => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach(exclusion => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = match => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error('magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)');\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn('magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn('magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error('Cannot overwrite a zero-length range – use appendLeft or prependRight instead');\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn('The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tthis.storedNames[original] = true;\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tif (end > first.end && first.next !== this.byStart[first.end]) {\n\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\n\t\t\tif (first !== last) {\n\t\t\t\tlet chunk = first.next;\n\t\t\t\twhile (chunk !== last) {\n\t\t\t\t\tchunk.edit('', false);\n\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length)\n\t\t\treturn this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length)\n\t\t\t\treturn chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length)\n\t\t\t\treturn chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length)\n\t\t\t\treturn chunk.intro[chunk.intro.length - 1];\n\t\t} while (chunk = chunk.previous);\n\t\tif (this.intro.length)\n\t\t\treturn this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1)\n\t\t\t\t\treturn chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while (chunk = chunk.previous);\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1)\n\t\t\treturn this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${\n\t\t\t\t\tchunk.original\n\t\t\t\t}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (chunk.intro.length && chunk.intro.trim() ||\n\t\t\t\t\tchunk.content.length && chunk.content.trim() ||\n\t\t\t\t\tchunk.outro.length && chunk.outro.trim())\n\t\t\t\treturn false;\n\t\t} while (chunk = chunk.next);\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while (chunk = chunk.next);\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error('bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`');\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach(option => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || ''\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator\n\t\t});\n\n\t\tthis.sources.forEach(source => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach(source => {\n\t\t\tObject.keys(source.content.storedNames).forEach(name => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext(chunk => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map(source => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map(source => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach(source => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty () {\n\t\tif (this.intro.length && this.intro.trim())\n\t\t\treturn false;\n\t\tif (this.sources.some(source => !source.content.isEmpty()))\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce((length, source) => length + source.content.length(), this.intro.length);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport Bundle from './Bundle.js';\nimport SourceMap from './SourceMap.js';\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nexport default MagicString;\n"],"names":["const","let","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"magic-string.umd.js","sources":["../src/BitSet.js","../src/Chunk.js","../node_modules/sourcemap-codec/dist/sourcemap-codec.es.js","../src/SourceMap.js","../src/utils/guessIndent.js","../src/utils/getRelativePath.js","../src/utils/isObject.js","../src/utils/getLocator.js","../src/utils/Mappings.js","../src/MagicString.js","../src/Bundle.js","../src/index-legacy.js"],"sourcesContent":["export default class BitSet {\n\tconstructor(arg) {\n\t\tthis.bits = arg instanceof BitSet ? arg.bits.slice() : [];\n\t}\n\n\tadd(n) {\n\t\tthis.bits[n >> 5] |= 1 << (n & 31);\n\t}\n\n\thas(n) {\n\t\treturn !!(this.bits[n >> 5] & (1 << (n & 31)));\n\t}\n}\n","export default class Chunk {\n\tconstructor(start, end, content) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t\tthis.original = content;\n\n\t\tthis.intro = '';\n\t\tthis.outro = '';\n\n\t\tthis.content = content;\n\t\tthis.storeName = false;\n\t\tthis.edited = false;\n\n\t\t// we make these non-enumerable, for sanity while debugging\n\t\tObject.defineProperties(this, {\n\t\t\tprevious: { writable: true, value: null },\n\t\t\tnext: { writable: true, value: null },\n\t\t});\n\t}\n\n\tappendLeft(content) {\n\t\tthis.outro += content;\n\t}\n\n\tappendRight(content) {\n\t\tthis.intro = this.intro + content;\n\t}\n\n\tclone() {\n\t\tconst chunk = new Chunk(this.start, this.end, this.original);\n\n\t\tchunk.intro = this.intro;\n\t\tchunk.outro = this.outro;\n\t\tchunk.content = this.content;\n\t\tchunk.storeName = this.storeName;\n\t\tchunk.edited = this.edited;\n\n\t\treturn chunk;\n\t}\n\n\tcontains(index) {\n\t\treturn this.start < index && index < this.end;\n\t}\n\n\teachNext(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.next;\n\t\t}\n\t}\n\n\teachPrevious(fn) {\n\t\tlet chunk = this;\n\t\twhile (chunk) {\n\t\t\tfn(chunk);\n\t\t\tchunk = chunk.previous;\n\t\t}\n\t}\n\n\tedit(content, storeName, contentOnly) {\n\t\tthis.content = content;\n\t\tif (!contentOnly) {\n\t\t\tthis.intro = '';\n\t\t\tthis.outro = '';\n\t\t}\n\t\tthis.storeName = storeName;\n\n\t\tthis.edited = true;\n\n\t\treturn this;\n\t}\n\n\tprependLeft(content) {\n\t\tthis.outro = content + this.outro;\n\t}\n\n\tprependRight(content) {\n\t\tthis.intro = content + this.intro;\n\t}\n\n\tsplit(index) {\n\t\tconst sliceIndex = index - this.start;\n\n\t\tconst originalBefore = this.original.slice(0, sliceIndex);\n\t\tconst originalAfter = this.original.slice(sliceIndex);\n\n\t\tthis.original = originalBefore;\n\n\t\tconst newChunk = new Chunk(index, this.end, originalAfter);\n\t\tnewChunk.outro = this.outro;\n\t\tthis.outro = '';\n\n\t\tthis.end = index;\n\n\t\tif (this.edited) {\n\t\t\t// TODO is this block necessary?...\n\t\t\tnewChunk.edit('', false);\n\t\t\tthis.content = '';\n\t\t} else {\n\t\t\tthis.content = originalBefore;\n\t\t}\n\n\t\tnewChunk.next = this.next;\n\t\tif (newChunk.next) newChunk.next.previous = newChunk;\n\t\tnewChunk.previous = this;\n\t\tthis.next = newChunk;\n\n\t\treturn newChunk;\n\t}\n\n\ttoString() {\n\t\treturn this.intro + this.content + this.outro;\n\t}\n\n\ttrimEnd(rx) {\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.start + trimmed.length).edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\tif (this.intro.length) return true;\n\t\t}\n\t}\n\n\ttrimStart(rx) {\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tconst trimmed = this.content.replace(rx, '');\n\n\t\tif (trimmed.length) {\n\t\t\tif (trimmed !== this.content) {\n\t\t\t\tthis.split(this.end - trimmed.length);\n\t\t\t\tthis.edit('', undefined, true);\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.edit('', undefined, true);\n\n\t\t\tthis.outro = this.outro.replace(rx, '');\n\t\t\tif (this.outro.length) return true;\n\t\t}\n\t}\n}\n","var charToInteger = {};\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfor (var i = 0; i < chars.length; i++) {\n charToInteger[chars.charCodeAt(i)] = i;\n}\nfunction decode(mappings) {\n var decoded = [];\n var line = [];\n var segment = [\n 0,\n 0,\n 0,\n 0,\n 0,\n ];\n var j = 0;\n for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n var c = mappings.charCodeAt(i);\n if (c === 44) { // \",\"\n segmentify(line, segment, j);\n j = 0;\n }\n else if (c === 59) { // \";\"\n segmentify(line, segment, j);\n j = 0;\n decoded.push(line);\n line = [];\n segment[0] = 0;\n }\n else {\n var integer = charToInteger[c];\n if (integer === undefined) {\n throw new Error('Invalid character (' + String.fromCharCode(c) + ')');\n }\n var hasContinuationBit = integer & 32;\n integer &= 31;\n value += integer << shift;\n if (hasContinuationBit) {\n shift += 5;\n }\n else {\n var shouldNegate = value & 1;\n value >>>= 1;\n if (shouldNegate) {\n value = value === 0 ? -0x80000000 : -value;\n }\n segment[j] += value;\n j++;\n value = shift = 0; // reset\n }\n }\n }\n segmentify(line, segment, j);\n decoded.push(line);\n return decoded;\n}\nfunction segmentify(line, segment, j) {\n // This looks ugly, but we're creating specialized arrays with a specific\n // length. This is much faster than creating a new array (which v8 expands to\n // a capacity of 17 after pushing the first item), or slicing out a subarray\n // (which is slow). Length 4 is assumed to be the most frequent, followed by\n // length 5 (since not everything will have an associated name), followed by\n // length 1 (it's probably rare for a source substring to not have an\n // associated segment data).\n if (j === 4)\n line.push([segment[0], segment[1], segment[2], segment[3]]);\n else if (j === 5)\n line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n else if (j === 1)\n line.push([segment[0]]);\n}\nfunction encode(decoded) {\n var sourceFileIndex = 0; // second field\n var sourceCodeLine = 0; // third field\n var sourceCodeColumn = 0; // fourth field\n var nameIndex = 0; // fifth field\n var mappings = '';\n for (var i = 0; i < decoded.length; i++) {\n var line = decoded[i];\n if (i > 0)\n mappings += ';';\n if (line.length === 0)\n continue;\n var generatedCodeColumn = 0; // first field\n var lineMappings = [];\n for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {\n var segment = line_1[_i];\n var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n generatedCodeColumn = segment[0];\n if (segment.length > 1) {\n segmentMappings +=\n encodeInteger(segment[1] - sourceFileIndex) +\n encodeInteger(segment[2] - sourceCodeLine) +\n encodeInteger(segment[3] - sourceCodeColumn);\n sourceFileIndex = segment[1];\n sourceCodeLine = segment[2];\n sourceCodeColumn = segment[3];\n }\n if (segment.length === 5) {\n segmentMappings += encodeInteger(segment[4] - nameIndex);\n nameIndex = segment[4];\n }\n lineMappings.push(segmentMappings);\n }\n mappings += lineMappings.join(',');\n }\n return mappings;\n}\nfunction encodeInteger(num) {\n var result = '';\n num = num < 0 ? (-num << 1) | 1 : num << 1;\n do {\n var clamped = num & 31;\n num >>>= 5;\n if (num > 0) {\n clamped |= 32;\n }\n result += chars[clamped];\n } while (num > 0);\n return result;\n}\n\nexport { decode, encode };\n//# sourceMappingURL=sourcemap-codec.es.js.map\n","import { encode } from 'sourcemap-codec';\n\nlet btoa = () => {\n\tthrow new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');\n};\nif (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n\tbtoa = (str) => window.btoa(unescape(encodeURIComponent(str)));\n} else if (typeof Buffer === 'function') {\n\tbtoa = (str) => Buffer.from(str, 'utf-8').toString('base64');\n}\n\nexport default class SourceMap {\n\tconstructor(properties) {\n\t\tthis.version = 3;\n\t\tthis.file = properties.file;\n\t\tthis.sources = properties.sources;\n\t\tthis.sourcesContent = properties.sourcesContent;\n\t\tthis.names = properties.names;\n\t\tthis.mappings = encode(properties.mappings);\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this);\n\t}\n\n\ttoUrl() {\n\t\treturn 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());\n\t}\n}\n","export default function guessIndent(code) {\n\tconst lines = code.split('\\n');\n\n\tconst tabbed = lines.filter((line) => /^\\t+/.test(line));\n\tconst spaced = lines.filter((line) => /^ {2,}/.test(line));\n\n\tif (tabbed.length === 0 && spaced.length === 0) {\n\t\treturn null;\n\t}\n\n\t// More lines tabbed than spaced? Assume tabs, and\n\t// default to tabs in the case of a tie (or nothing\n\t// to go on)\n\tif (tabbed.length >= spaced.length) {\n\t\treturn '\\t';\n\t}\n\n\t// Otherwise, we need to guess the multiple\n\tconst min = spaced.reduce((previous, current) => {\n\t\tconst numSpaces = /^ +/.exec(current)[0].length;\n\t\treturn Math.min(numSpaces, previous);\n\t}, Infinity);\n\n\treturn new Array(min + 1).join(' ');\n}\n","export default function getRelativePath(from, to) {\n\tconst fromParts = from.split(/[/\\\\]/);\n\tconst toParts = to.split(/[/\\\\]/);\n\n\tfromParts.pop(); // get dirname\n\n\twhile (fromParts[0] === toParts[0]) {\n\t\tfromParts.shift();\n\t\ttoParts.shift();\n\t}\n\n\tif (fromParts.length) {\n\t\tlet i = fromParts.length;\n\t\twhile (i--) fromParts[i] = '..';\n\t}\n\n\treturn fromParts.concat(toParts).join('/');\n}\n","const toString = Object.prototype.toString;\n\nexport default function isObject(thing) {\n\treturn toString.call(thing) === '[object Object]';\n}\n","export default function getLocator(source) {\n\tconst originalLines = source.split('\\n');\n\tconst lineOffsets = [];\n\n\tfor (let i = 0, pos = 0; i < originalLines.length; i++) {\n\t\tlineOffsets.push(pos);\n\t\tpos += originalLines[i].length + 1;\n\t}\n\n\treturn function locate(index) {\n\t\tlet i = 0;\n\t\tlet j = lineOffsets.length;\n\t\twhile (i < j) {\n\t\t\tconst m = (i + j) >> 1;\n\t\t\tif (index < lineOffsets[m]) {\n\t\t\t\tj = m;\n\t\t\t} else {\n\t\t\t\ti = m + 1;\n\t\t\t}\n\t\t}\n\t\tconst line = i - 1;\n\t\tconst column = index - lineOffsets[line];\n\t\treturn { line, column };\n\t};\n}\n","export default class Mappings {\n\tconstructor(hires) {\n\t\tthis.hires = hires;\n\t\tthis.generatedCodeLine = 0;\n\t\tthis.generatedCodeColumn = 0;\n\t\tthis.raw = [];\n\t\tthis.rawSegments = this.raw[this.generatedCodeLine] = [];\n\t\tthis.pending = null;\n\t}\n\n\taddEdit(sourceIndex, content, loc, nameIndex) {\n\t\tif (content.length) {\n\t\t\tconst segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];\n\t\t\tif (nameIndex >= 0) {\n\t\t\t\tsegment.push(nameIndex);\n\t\t\t}\n\t\t\tthis.rawSegments.push(segment);\n\t\t} else if (this.pending) {\n\t\t\tthis.rawSegments.push(this.pending);\n\t\t}\n\n\t\tthis.advance(content);\n\t\tthis.pending = null;\n\t}\n\n\taddUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {\n\t\tlet originalCharIndex = chunk.start;\n\t\tlet first = true;\n\n\t\twhile (originalCharIndex < chunk.end) {\n\t\t\tif (this.hires || first || sourcemapLocations.has(originalCharIndex)) {\n\t\t\t\tthis.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);\n\t\t\t}\n\n\t\t\tif (original[originalCharIndex] === '\\n') {\n\t\t\t\tloc.line += 1;\n\t\t\t\tloc.column = 0;\n\t\t\t\tthis.generatedCodeLine += 1;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t\tthis.generatedCodeColumn = 0;\n\t\t\t\tfirst = true;\n\t\t\t} else {\n\t\t\t\tloc.column += 1;\n\t\t\t\tthis.generatedCodeColumn += 1;\n\t\t\t\tfirst = false;\n\t\t\t}\n\n\t\t\toriginalCharIndex += 1;\n\t\t}\n\n\t\tthis.pending = null;\n\t}\n\n\tadvance(str) {\n\t\tif (!str) return;\n\n\t\tconst lines = str.split('\\n');\n\n\t\tif (lines.length > 1) {\n\t\t\tfor (let i = 0; i < lines.length - 1; i++) {\n\t\t\t\tthis.generatedCodeLine++;\n\t\t\t\tthis.raw[this.generatedCodeLine] = this.rawSegments = [];\n\t\t\t}\n\t\t\tthis.generatedCodeColumn = 0;\n\t\t}\n\n\t\tthis.generatedCodeColumn += lines[lines.length - 1].length;\n\t}\n}\n","import BitSet from './BitSet.js';\nimport Chunk from './Chunk.js';\nimport SourceMap from './SourceMap.js';\nimport guessIndent from './utils/guessIndent.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\nimport Stats from './utils/Stats.js';\n\nconst n = '\\n';\n\nconst warned = {\n\tinsertLeft: false,\n\tinsertRight: false,\n\tstoreName: false,\n};\n\nexport default class MagicString {\n\tconstructor(string, options = {}) {\n\t\tconst chunk = new Chunk(0, string.length, string);\n\n\t\tObject.defineProperties(this, {\n\t\t\toriginal: { writable: true, value: string },\n\t\t\toutro: { writable: true, value: '' },\n\t\t\tintro: { writable: true, value: '' },\n\t\t\tfirstChunk: { writable: true, value: chunk },\n\t\t\tlastChunk: { writable: true, value: chunk },\n\t\t\tlastSearchedChunk: { writable: true, value: chunk },\n\t\t\tbyStart: { writable: true, value: {} },\n\t\t\tbyEnd: { writable: true, value: {} },\n\t\t\tfilename: { writable: true, value: options.filename },\n\t\t\tindentExclusionRanges: { writable: true, value: options.indentExclusionRanges },\n\t\t\tsourcemapLocations: { writable: true, value: new BitSet() },\n\t\t\tstoredNames: { writable: true, value: {} },\n\t\t\tindentStr: { writable: true, value: guessIndent(string) },\n\t\t});\n\n\t\tif (DEBUG) {\n\t\t\tObject.defineProperty(this, 'stats', { value: new Stats() });\n\t\t}\n\n\t\tthis.byStart[0] = chunk;\n\t\tthis.byEnd[string.length] = chunk;\n\t}\n\n\taddSourcemapLocation(char) {\n\t\tthis.sourcemapLocations.add(char);\n\t}\n\n\tappend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.outro += content;\n\t\treturn this;\n\t}\n\n\tappendLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendLeft');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendLeft(content);\n\t\t} else {\n\t\t\tthis.intro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendLeft');\n\t\treturn this;\n\t}\n\n\tappendRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('appendRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.appendRight(content);\n\t\t} else {\n\t\t\tthis.outro += content;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('appendRight');\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst cloned = new MagicString(this.original, { filename: this.filename });\n\n\t\tlet originalChunk = this.firstChunk;\n\t\tlet clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());\n\n\t\twhile (originalChunk) {\n\t\t\tcloned.byStart[clonedChunk.start] = clonedChunk;\n\t\t\tcloned.byEnd[clonedChunk.end] = clonedChunk;\n\n\t\t\tconst nextOriginalChunk = originalChunk.next;\n\t\t\tconst nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();\n\n\t\t\tif (nextClonedChunk) {\n\t\t\t\tclonedChunk.next = nextClonedChunk;\n\t\t\t\tnextClonedChunk.previous = clonedChunk;\n\n\t\t\t\tclonedChunk = nextClonedChunk;\n\t\t\t}\n\n\t\t\toriginalChunk = nextOriginalChunk;\n\t\t}\n\n\t\tcloned.lastChunk = clonedChunk;\n\n\t\tif (this.indentExclusionRanges) {\n\t\t\tcloned.indentExclusionRanges = this.indentExclusionRanges.slice();\n\t\t}\n\n\t\tcloned.sourcemapLocations = new BitSet(this.sourcemapLocations);\n\n\t\tcloned.intro = this.intro;\n\t\tcloned.outro = this.outro;\n\n\t\treturn cloned;\n\t}\n\n\tgenerateDecodedMap(options) {\n\t\toptions = options || {};\n\n\t\tconst sourceIndex = 0;\n\t\tconst names = Object.keys(this.storedNames);\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tconst locate = getLocator(this.original);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.firstChunk.eachNext((chunk) => {\n\t\t\tconst loc = locate(chunk.start);\n\n\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tmappings.addEdit(\n\t\t\t\t\tsourceIndex,\n\t\t\t\t\tchunk.content,\n\t\t\t\t\tloc,\n\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);\n\t\t\t}\n\n\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: [options.source ? getRelativePath(options.file || '', options.source) : null],\n\t\t\tsourcesContent: options.includeContent ? [this.original] : [null],\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\treturn this.indentStr === null ? '\\t' : this.indentStr;\n\t}\n\n\tindent(indentStr, options) {\n\t\tconst pattern = /^[^\\r\\n]/gm;\n\n\t\tif (isObject(indentStr)) {\n\t\t\toptions = indentStr;\n\t\t\tindentStr = undefined;\n\t\t}\n\n\t\tindentStr = indentStr !== undefined ? indentStr : this.indentStr || '\\t';\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\toptions = options || {};\n\n\t\t// Process exclusion ranges\n\t\tconst isExcluded = {};\n\n\t\tif (options.exclude) {\n\t\t\tconst exclusions =\n\t\t\t\ttypeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;\n\t\t\texclusions.forEach((exclusion) => {\n\t\t\t\tfor (let i = exclusion[0]; i < exclusion[1]; i += 1) {\n\t\t\t\t\tisExcluded[i] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet shouldIndentNextCharacter = options.indentStart !== false;\n\t\tconst replacer = (match) => {\n\t\t\tif (shouldIndentNextCharacter) return `${indentStr}${match}`;\n\t\t\tshouldIndentNextCharacter = true;\n\t\t\treturn match;\n\t\t};\n\n\t\tthis.intro = this.intro.replace(pattern, replacer);\n\n\t\tlet charIndex = 0;\n\t\tlet chunk = this.firstChunk;\n\n\t\twhile (chunk) {\n\t\t\tconst end = chunk.end;\n\n\t\t\tif (chunk.edited) {\n\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\tchunk.content = chunk.content.replace(pattern, replacer);\n\n\t\t\t\t\tif (chunk.content.length) {\n\t\t\t\t\t\tshouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcharIndex = chunk.start;\n\n\t\t\t\twhile (charIndex < end) {\n\t\t\t\t\tif (!isExcluded[charIndex]) {\n\t\t\t\t\t\tconst char = this.original[charIndex];\n\n\t\t\t\t\t\tif (char === '\\n') {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = true;\n\t\t\t\t\t\t} else if (char !== '\\r' && shouldIndentNextCharacter) {\n\t\t\t\t\t\t\tshouldIndentNextCharacter = false;\n\n\t\t\t\t\t\t\tif (charIndex === chunk.start) {\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._splitChunk(chunk, charIndex);\n\t\t\t\t\t\t\t\tchunk = chunk.next;\n\t\t\t\t\t\t\t\tchunk.prependRight(indentStr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcharIndex += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcharIndex = chunk.end;\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tthis.outro = this.outro.replace(pattern, replacer);\n\n\t\treturn this;\n\t}\n\n\tinsert() {\n\t\tthrow new Error(\n\t\t\t'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'\n\t\t);\n\t}\n\n\tinsertLeft(index, content) {\n\t\tif (!warned.insertLeft) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertLeft = true;\n\t\t}\n\n\t\treturn this.appendLeft(index, content);\n\t}\n\n\tinsertRight(index, content) {\n\t\tif (!warned.insertRight) {\n\t\t\tconsole.warn(\n\t\t\t\t'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'\n\t\t\t); // eslint-disable-line no-console\n\t\t\twarned.insertRight = true;\n\t\t}\n\n\t\treturn this.prependRight(index, content);\n\t}\n\n\tmove(start, end, index) {\n\t\tif (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');\n\n\t\tif (DEBUG) this.stats.time('move');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\t\tthis._split(index);\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tconst oldLeft = first.previous;\n\t\tconst oldRight = last.next;\n\n\t\tconst newRight = this.byStart[index];\n\t\tif (!newRight && last === this.lastChunk) return this;\n\t\tconst newLeft = newRight ? newRight.previous : this.lastChunk;\n\n\t\tif (oldLeft) oldLeft.next = oldRight;\n\t\tif (oldRight) oldRight.previous = oldLeft;\n\n\t\tif (newLeft) newLeft.next = first;\n\t\tif (newRight) newRight.previous = last;\n\n\t\tif (!first.previous) this.firstChunk = last.next;\n\t\tif (!last.next) {\n\t\t\tthis.lastChunk = first.previous;\n\t\t\tthis.lastChunk.next = null;\n\t\t}\n\n\t\tfirst.previous = newLeft;\n\t\tlast.next = newRight || null;\n\n\t\tif (!newLeft) this.firstChunk = first;\n\t\tif (!newRight) this.lastChunk = last;\n\n\t\tif (DEBUG) this.stats.timeEnd('move');\n\t\treturn this;\n\t}\n\n\toverwrite(start, end, content, options) {\n\t\tif (typeof content !== 'string') throw new TypeError('replacement content must be a string');\n\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (end > this.original.length) throw new Error('end is out of bounds');\n\t\tif (start === end)\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot overwrite a zero-length range – use appendLeft or prependRight instead'\n\t\t\t);\n\n\t\tif (DEBUG) this.stats.time('overwrite');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tif (options === true) {\n\t\t\tif (!warned.storeName) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'\n\t\t\t\t); // eslint-disable-line no-console\n\t\t\t\twarned.storeName = true;\n\t\t\t}\n\n\t\t\toptions = { storeName: true };\n\t\t}\n\t\tconst storeName = options !== undefined ? options.storeName : false;\n\t\tconst contentOnly = options !== undefined ? options.contentOnly : false;\n\n\t\tif (storeName) {\n\t\t\tconst original = this.original.slice(start, end);\n\t\t\tObject.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true });\n\t\t}\n\n\t\tconst first = this.byStart[start];\n\t\tconst last = this.byEnd[end];\n\n\t\tif (first) {\n\t\t\tlet chunk = first;\n\t\t\twhile (chunk !== last) {\n\t\t\t\tif (chunk.next !== this.byStart[chunk.end]) {\n\t\t\t\t\tthrow new Error('Cannot overwrite across a split point');\n\t\t\t\t}\n\t\t\t\tchunk = chunk.next;\n\t\t\t\tchunk.edit('', false);\n\t\t\t}\n\n\t\t\tfirst.edit(content, storeName, contentOnly);\n\t\t} else {\n\t\t\t// must be inserting at the end\n\t\t\tconst newChunk = new Chunk(start, end, '').edit(content, storeName);\n\n\t\t\t// TODO last chunk in the array may not be the last chunk, if it's moved...\n\t\t\tlast.next = newChunk;\n\t\t\tnewChunk.previous = last;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('overwrite');\n\t\treturn this;\n\t}\n\n\tprepend(content) {\n\t\tif (typeof content !== 'string') throw new TypeError('outro content must be a string');\n\n\t\tthis.intro = content + this.intro;\n\t\treturn this;\n\t}\n\n\tprependLeft(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byEnd[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependLeft(content);\n\t\t} else {\n\t\t\tthis.intro = content + this.intro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tprependRight(index, content) {\n\t\tif (typeof content !== 'string') throw new TypeError('inserted content must be a string');\n\n\t\tif (DEBUG) this.stats.time('insertRight');\n\n\t\tthis._split(index);\n\n\t\tconst chunk = this.byStart[index];\n\n\t\tif (chunk) {\n\t\t\tchunk.prependRight(content);\n\t\t} else {\n\t\t\tthis.outro = content + this.outro;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('insertRight');\n\t\treturn this;\n\t}\n\n\tremove(start, end) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tif (start === end) return this;\n\n\t\tif (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');\n\t\tif (start > end) throw new Error('end must be greater than start');\n\n\t\tif (DEBUG) this.stats.time('remove');\n\n\t\tthis._split(start);\n\t\tthis._split(end);\n\n\t\tlet chunk = this.byStart[start];\n\n\t\twhile (chunk) {\n\t\t\tchunk.intro = '';\n\t\t\tchunk.outro = '';\n\t\t\tchunk.edit('');\n\n\t\t\tchunk = end > chunk.end ? this.byStart[chunk.end] : null;\n\t\t}\n\n\t\tif (DEBUG) this.stats.timeEnd('remove');\n\t\treturn this;\n\t}\n\n\tlastChar() {\n\t\tif (this.outro.length) return this.outro[this.outro.length - 1];\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];\n\t\t\tif (chunk.content.length) return chunk.content[chunk.content.length - 1];\n\t\t\tif (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];\n\t\t} while ((chunk = chunk.previous));\n\t\tif (this.intro.length) return this.intro[this.intro.length - 1];\n\t\treturn '';\n\t}\n\n\tlastLine() {\n\t\tlet lineIndex = this.outro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.outro.substr(lineIndex + 1);\n\t\tlet lineStr = this.outro;\n\t\tlet chunk = this.lastChunk;\n\t\tdo {\n\t\t\tif (chunk.outro.length > 0) {\n\t\t\t\tlineIndex = chunk.outro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.outro + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.content.length > 0) {\n\t\t\t\tlineIndex = chunk.content.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.content + lineStr;\n\t\t\t}\n\n\t\t\tif (chunk.intro.length > 0) {\n\t\t\t\tlineIndex = chunk.intro.lastIndexOf(n);\n\t\t\t\tif (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;\n\t\t\t\tlineStr = chunk.intro + lineStr;\n\t\t\t}\n\t\t} while ((chunk = chunk.previous));\n\t\tlineIndex = this.intro.lastIndexOf(n);\n\t\tif (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;\n\t\treturn this.intro + lineStr;\n\t}\n\n\tslice(start = 0, end = this.original.length) {\n\t\twhile (start < 0) start += this.original.length;\n\t\twhile (end < 0) end += this.original.length;\n\n\t\tlet result = '';\n\n\t\t// find start chunk\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk && (chunk.start > start || chunk.end <= start)) {\n\t\t\t// found end chunk before start\n\t\t\tif (chunk.start < end && chunk.end >= end) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\tif (chunk && chunk.edited && chunk.start !== start)\n\t\t\tthrow new Error(`Cannot use replaced character ${start} as slice start anchor.`);\n\n\t\tconst startChunk = chunk;\n\t\twhile (chunk) {\n\t\t\tif (chunk.intro && (startChunk !== chunk || chunk.start === start)) {\n\t\t\t\tresult += chunk.intro;\n\t\t\t}\n\n\t\t\tconst containsEnd = chunk.start < end && chunk.end >= end;\n\t\t\tif (containsEnd && chunk.edited && chunk.end !== end)\n\t\t\t\tthrow new Error(`Cannot use replaced character ${end} as slice end anchor.`);\n\n\t\t\tconst sliceStart = startChunk === chunk ? start - chunk.start : 0;\n\t\t\tconst sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;\n\n\t\t\tresult += chunk.content.slice(sliceStart, sliceEnd);\n\n\t\t\tif (chunk.outro && (!containsEnd || chunk.end === end)) {\n\t\t\t\tresult += chunk.outro;\n\t\t\t}\n\n\t\t\tif (containsEnd) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// TODO deprecate this? not really very useful\n\tsnip(start, end) {\n\t\tconst clone = this.clone();\n\t\tclone.remove(0, start);\n\t\tclone.remove(end, clone.original.length);\n\n\t\treturn clone;\n\t}\n\n\t_split(index) {\n\t\tif (this.byStart[index] || this.byEnd[index]) return;\n\n\t\tif (DEBUG) this.stats.time('_split');\n\n\t\tlet chunk = this.lastSearchedChunk;\n\t\tconst searchForward = index > chunk.end;\n\n\t\twhile (chunk) {\n\t\t\tif (chunk.contains(index)) return this._splitChunk(chunk, index);\n\n\t\t\tchunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];\n\t\t}\n\t}\n\n\t_splitChunk(chunk, index) {\n\t\tif (chunk.edited && chunk.content.length) {\n\t\t\t// zero-length edited chunks are a special case (overlapping replacements)\n\t\t\tconst loc = getLocator(this.original)(index);\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – \"${chunk.original}\")`\n\t\t\t);\n\t\t}\n\n\t\tconst newChunk = chunk.split(index);\n\n\t\tthis.byEnd[index] = chunk;\n\t\tthis.byStart[index] = newChunk;\n\t\tthis.byEnd[newChunk.end] = newChunk;\n\n\t\tif (chunk === this.lastChunk) this.lastChunk = newChunk;\n\n\t\tthis.lastSearchedChunk = chunk;\n\t\tif (DEBUG) this.stats.timeEnd('_split');\n\t\treturn true;\n\t}\n\n\ttoString() {\n\t\tlet str = this.intro;\n\n\t\tlet chunk = this.firstChunk;\n\t\twhile (chunk) {\n\t\t\tstr += chunk.toString();\n\t\t\tchunk = chunk.next;\n\t\t}\n\n\t\treturn str + this.outro;\n\t}\n\n\tisEmpty() {\n\t\tlet chunk = this.firstChunk;\n\t\tdo {\n\t\t\tif (\n\t\t\t\t(chunk.intro.length && chunk.intro.trim()) ||\n\t\t\t\t(chunk.content.length && chunk.content.trim()) ||\n\t\t\t\t(chunk.outro.length && chunk.outro.trim())\n\t\t\t)\n\t\t\t\treturn false;\n\t\t} while ((chunk = chunk.next));\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\tlet chunk = this.firstChunk;\n\t\tlet length = 0;\n\t\tdo {\n\t\t\tlength += chunk.intro.length + chunk.content.length + chunk.outro.length;\n\t\t} while ((chunk = chunk.next));\n\t\treturn length;\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimEndAborted(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tthis.outro = this.outro.replace(rx, '');\n\t\tif (this.outro.length) return true;\n\n\t\tlet chunk = this.lastChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimEnd(rx);\n\n\t\t\t// if chunk was trimmed, we have a new lastChunk\n\t\t\tif (chunk.end !== end) {\n\t\t\t\tif (this.lastChunk === chunk) {\n\t\t\t\t\tthis.lastChunk = chunk.next;\n\t\t\t\t}\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.previous;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimEnd(charType) {\n\t\tthis.trimEndAborted(charType);\n\t\treturn this;\n\t}\n\ttrimStartAborted(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\n\t\tthis.intro = this.intro.replace(rx, '');\n\t\tif (this.intro.length) return true;\n\n\t\tlet chunk = this.firstChunk;\n\n\t\tdo {\n\t\t\tconst end = chunk.end;\n\t\t\tconst aborted = chunk.trimStart(rx);\n\n\t\t\tif (chunk.end !== end) {\n\t\t\t\t// special case...\n\t\t\t\tif (chunk === this.lastChunk) this.lastChunk = chunk.next;\n\n\t\t\t\tthis.byEnd[chunk.end] = chunk;\n\t\t\t\tthis.byStart[chunk.next.start] = chunk.next;\n\t\t\t\tthis.byEnd[chunk.next.end] = chunk.next;\n\t\t\t}\n\n\t\t\tif (aborted) return true;\n\t\t\tchunk = chunk.next;\n\t\t} while (chunk);\n\n\t\treturn false;\n\t}\n\n\ttrimStart(charType) {\n\t\tthis.trimStartAborted(charType);\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport SourceMap from './SourceMap.js';\nimport getRelativePath from './utils/getRelativePath.js';\nimport isObject from './utils/isObject.js';\nimport getLocator from './utils/getLocator.js';\nimport Mappings from './utils/Mappings.js';\n\nconst hasOwnProp = Object.prototype.hasOwnProperty;\n\nexport default class Bundle {\n\tconstructor(options = {}) {\n\t\tthis.intro = options.intro || '';\n\t\tthis.separator = options.separator !== undefined ? options.separator : '\\n';\n\t\tthis.sources = [];\n\t\tthis.uniqueSources = [];\n\t\tthis.uniqueSourceIndexByFilename = {};\n\t}\n\n\taddSource(source) {\n\t\tif (source instanceof MagicString) {\n\t\t\treturn this.addSource({\n\t\t\t\tcontent: source,\n\t\t\t\tfilename: source.filename,\n\t\t\t\tseparator: this.separator,\n\t\t\t});\n\t\t}\n\n\t\tif (!isObject(source) || !source.content) {\n\t\t\tthrow new Error(\n\t\t\t\t'bundle.addSource() takes an object with a `content` property, which should be an instance of MagicString, and an optional `filename`'\n\t\t\t);\n\t\t}\n\n\t\t['filename', 'indentExclusionRanges', 'separator'].forEach((option) => {\n\t\t\tif (!hasOwnProp.call(source, option)) source[option] = source.content[option];\n\t\t});\n\n\t\tif (source.separator === undefined) {\n\t\t\t// TODO there's a bunch of this sort of thing, needs cleaning up\n\t\t\tsource.separator = this.separator;\n\t\t}\n\n\t\tif (source.filename) {\n\t\t\tif (!hasOwnProp.call(this.uniqueSourceIndexByFilename, source.filename)) {\n\t\t\t\tthis.uniqueSourceIndexByFilename[source.filename] = this.uniqueSources.length;\n\t\t\t\tthis.uniqueSources.push({ filename: source.filename, content: source.content.original });\n\t\t\t} else {\n\t\t\t\tconst uniqueSource = this.uniqueSources[this.uniqueSourceIndexByFilename[source.filename]];\n\t\t\t\tif (source.content.original !== uniqueSource.content) {\n\t\t\t\t\tthrow new Error(`Illegal source: same filename (${source.filename}), different contents`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.sources.push(source);\n\t\treturn this;\n\t}\n\n\tappend(str, options) {\n\t\tthis.addSource({\n\t\t\tcontent: new MagicString(str),\n\t\t\tseparator: (options && options.separator) || '',\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone() {\n\t\tconst bundle = new Bundle({\n\t\t\tintro: this.intro,\n\t\t\tseparator: this.separator,\n\t\t});\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tbundle.addSource({\n\t\t\t\tfilename: source.filename,\n\t\t\t\tcontent: source.content.clone(),\n\t\t\t\tseparator: source.separator,\n\t\t\t});\n\t\t});\n\n\t\treturn bundle;\n\t}\n\n\tgenerateDecodedMap(options = {}) {\n\t\tconst names = [];\n\t\tthis.sources.forEach((source) => {\n\t\t\tObject.keys(source.content.storedNames).forEach((name) => {\n\t\t\t\tif (!~names.indexOf(name)) names.push(name);\n\t\t\t});\n\t\t});\n\n\t\tconst mappings = new Mappings(options.hires);\n\n\t\tif (this.intro) {\n\t\t\tmappings.advance(this.intro);\n\t\t}\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\tmappings.advance(this.separator);\n\t\t\t}\n\n\t\t\tconst sourceIndex = source.filename ? this.uniqueSourceIndexByFilename[source.filename] : -1;\n\t\t\tconst magicString = source.content;\n\t\t\tconst locate = getLocator(magicString.original);\n\n\t\t\tif (magicString.intro) {\n\t\t\t\tmappings.advance(magicString.intro);\n\t\t\t}\n\n\t\t\tmagicString.firstChunk.eachNext((chunk) => {\n\t\t\t\tconst loc = locate(chunk.start);\n\n\t\t\t\tif (chunk.intro.length) mappings.advance(chunk.intro);\n\n\t\t\t\tif (source.filename) {\n\t\t\t\t\tif (chunk.edited) {\n\t\t\t\t\t\tmappings.addEdit(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk.content,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tchunk.storeName ? names.indexOf(chunk.original) : -1\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmappings.addUneditedChunk(\n\t\t\t\t\t\t\tsourceIndex,\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tmagicString.original,\n\t\t\t\t\t\t\tloc,\n\t\t\t\t\t\t\tmagicString.sourcemapLocations\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmappings.advance(chunk.content);\n\t\t\t\t}\n\n\t\t\t\tif (chunk.outro.length) mappings.advance(chunk.outro);\n\t\t\t});\n\n\t\t\tif (magicString.outro) {\n\t\t\t\tmappings.advance(magicString.outro);\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tfile: options.file ? options.file.split(/[/\\\\]/).pop() : null,\n\t\t\tsources: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.file ? getRelativePath(options.file, source.filename) : source.filename;\n\t\t\t}),\n\t\t\tsourcesContent: this.uniqueSources.map((source) => {\n\t\t\t\treturn options.includeContent ? source.content : null;\n\t\t\t}),\n\t\t\tnames,\n\t\t\tmappings: mappings.raw,\n\t\t};\n\t}\n\n\tgenerateMap(options) {\n\t\treturn new SourceMap(this.generateDecodedMap(options));\n\t}\n\n\tgetIndentString() {\n\t\tconst indentStringCounts = {};\n\n\t\tthis.sources.forEach((source) => {\n\t\t\tconst indentStr = source.content.indentStr;\n\n\t\t\tif (indentStr === null) return;\n\n\t\t\tif (!indentStringCounts[indentStr]) indentStringCounts[indentStr] = 0;\n\t\t\tindentStringCounts[indentStr] += 1;\n\t\t});\n\n\t\treturn (\n\t\t\tObject.keys(indentStringCounts).sort((a, b) => {\n\t\t\t\treturn indentStringCounts[a] - indentStringCounts[b];\n\t\t\t})[0] || '\\t'\n\t\t);\n\t}\n\n\tindent(indentStr) {\n\t\tif (!arguments.length) {\n\t\t\tindentStr = this.getIndentString();\n\t\t}\n\n\t\tif (indentStr === '') return this; // noop\n\n\t\tlet trailingNewline = !this.intro || this.intro.slice(-1) === '\\n';\n\n\t\tthis.sources.forEach((source, i) => {\n\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\tconst indentStart = trailingNewline || (i > 0 && /\\r?\\n$/.test(separator));\n\n\t\t\tsource.content.indent(indentStr, {\n\t\t\t\texclude: source.indentExclusionRanges,\n\t\t\t\tindentStart, //: trailingNewline || /\\r?\\n$/.test( separator ) //true///\\r?\\n/.test( separator )\n\t\t\t});\n\n\t\t\ttrailingNewline = source.content.lastChar() === '\\n';\n\t\t});\n\n\t\tif (this.intro) {\n\t\t\tthis.intro =\n\t\t\t\tindentStr +\n\t\t\t\tthis.intro.replace(/^[^\\n]/gm, (match, index) => {\n\t\t\t\t\treturn index > 0 ? indentStr + match : match;\n\t\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tprepend(str) {\n\t\tthis.intro = str + this.intro;\n\t\treturn this;\n\t}\n\n\ttoString() {\n\t\tconst body = this.sources\n\t\t\t.map((source, i) => {\n\t\t\t\tconst separator = source.separator !== undefined ? source.separator : this.separator;\n\t\t\t\tconst str = (i > 0 ? separator : '') + source.content.toString();\n\n\t\t\t\treturn str;\n\t\t\t})\n\t\t\t.join('');\n\n\t\treturn this.intro + body;\n\t}\n\n\tisEmpty() {\n\t\tif (this.intro.length && this.intro.trim()) return false;\n\t\tif (this.sources.some((source) => !source.content.isEmpty())) return false;\n\t\treturn true;\n\t}\n\n\tlength() {\n\t\treturn this.sources.reduce(\n\t\t\t(length, source) => length + source.content.length(),\n\t\t\tthis.intro.length\n\t\t);\n\t}\n\n\ttrimLines() {\n\t\treturn this.trim('[\\\\r\\\\n]');\n\t}\n\n\ttrim(charType) {\n\t\treturn this.trimStart(charType).trimEnd(charType);\n\t}\n\n\ttrimStart(charType) {\n\t\tconst rx = new RegExp('^' + (charType || '\\\\s') + '+');\n\t\tthis.intro = this.intro.replace(rx, '');\n\n\t\tif (!this.intro) {\n\t\t\tlet source;\n\t\t\tlet i = 0;\n\n\t\t\tdo {\n\t\t\t\tsource = this.sources[i++];\n\t\t\t\tif (!source) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while (!source.content.trimStartAborted(charType));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\ttrimEnd(charType) {\n\t\tconst rx = new RegExp((charType || '\\\\s') + '+$');\n\n\t\tlet source;\n\t\tlet i = this.sources.length - 1;\n\n\t\tdo {\n\t\t\tsource = this.sources[i--];\n\t\t\tif (!source) {\n\t\t\t\tthis.intro = this.intro.replace(rx, '');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} while (!source.content.trimEndAborted(charType));\n\n\t\treturn this;\n\t}\n}\n","import MagicString from './MagicString.js';\nimport Bundle from './Bundle.js';\nimport SourceMap from './SourceMap.js';\n\nMagicString.Bundle = Bundle;\nMagicString.SourceMap = SourceMap;\nMagicString.default = MagicString; // work around TypeScript bug https://github.com/Rich-Harris/magic-string/pull/121\n\nexport default MagicString;\n"],"names":["const","let","this"],"mappings":";;;;;;CAAe,IAAM,MAAM,GAC1B,eAAW,CAAC,GAAG,EAAE;CAClB,CAAE,IAAI,CAAC,IAAI,GAAG,GAAG,YAAY,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;CAC3D,EAAC;AACF;kBACC,oBAAI,CAAC,EAAE;CACR,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;CACpC,EAAC;AACF;kBACC,oBAAI,CAAC,EAAE;CACR,CAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;CAChD;;CCXc,IAAM,KAAK,GACzB,cAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE;CAClC,CAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACrB,CAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;CACjB,CAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC1B;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;CAClB,CAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;CACA,CAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;CACzB,CAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;CACzB,CAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtB;CACA;CACA,CAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;CAChC,EAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CAC5C,EAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CACxC,EAAG,CAAC,CAAC;CACJ,EAAC;AACF;iBACC,kCAAW,OAAO,EAAE;CACrB,CAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;CACvB,EAAC;AACF;iBACC,oCAAY,OAAO,EAAE;CACtB,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;CACnC,EAAC;AACF;iBACC,0BAAQ;CACT,CAAEA,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/D;CACA,CAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;CAC3B,CAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;CAC3B,CAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;CAC/B,CAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;CACnC,CAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B;CACA,CAAE,OAAO,KAAK,CAAC;CACd,EAAC;AACF;iBACC,8BAAS,KAAK,EAAE;CACjB,CAAE,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;CAC/C,EAAC;AACF;iBACC,8BAAS,EAAE,EAAE;CACd,CAAEC,IAAI,KAAK,GAAG,IAAI,CAAC;CACnB,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,EAAE,CAAC,KAAK,CAAC,CAAC;CACb,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG;CACF,EAAC;AACF;iBACC,sCAAa,EAAE,EAAE;CAClB,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC;CACnB,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,EAAE,CAAC,KAAK,CAAC,CAAC;CACb,EAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC1B,EAAG;CACF,EAAC;AACF;iBACC,sBAAK,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE;CACvC,CAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;CACzB,CAAE,IAAI,CAAC,WAAW,EAAE;CACpB,EAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;CACnB,EAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;CACnB,EAAG;CACH,CAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B;CACA,CAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACrB;CACA,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;iBACC,oCAAY,OAAO,EAAE;CACtB,CAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CACnC,EAAC;AACF;iBACC,sCAAa,OAAO,EAAE;CACvB,CAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CACnC,EAAC;AACF;iBACC,wBAAM,KAAK,EAAE;CACd,CAAED,IAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxC;CACA,CAAEA,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CAC5D,CAAEA,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACxD;CACA,CAAE,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;AACjC;CACA,CAAEA,IAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;CAC7D,CAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;CAC9B,CAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB;CACA,CAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACnB;CACA,CAAE,IAAI,IAAI,CAAC,MAAM,EAAE;CACnB;CACA,EAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAC5B,EAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;CACrB,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;CACjC,EAAG;AACH;CACA,CAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;CAC5B,CAAE,IAAI,QAAQ,CAAC,IAAI,IAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAC;CACvD,CAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;CAC3B,CAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvB;CACA,CAAE,OAAO,QAAQ,CAAC;CACjB,EAAC;AACF;iBACC,gCAAW;CACZ,CAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CAC/C,EAAC;AACF;iBACC,4BAAQ,EAAE,EAAE;CACb,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC1C,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;AACrC;CACA,CAAEA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;CACA,CAAE,IAAI,OAAO,CAAC,MAAM,EAAE;CACtB,EAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;CACjC,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;CACtE,GAAI;CACJ,EAAG,OAAO,IAAI,CAAC;CACf,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;CACA,EAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC3C,EAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;CACtC,EAAG;CACF,EAAC;AACF;iBACC,gCAAU,EAAE,EAAE;CACf,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC1C,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;AACrC;CACA,CAAEA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C;CACA,CAAE,IAAI,OAAO,CAAC,MAAM,EAAE;CACtB,EAAG,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;CACjC,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C,GAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;CACnC,GAAI;CACJ,EAAG,OAAO,IAAI,CAAC;CACf,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC;CACA,EAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC3C,EAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;CACtC,EAAG;CACF;;CCxJD,IAAI,aAAa,GAAG,EAAE,CAAC;CACvB,IAAI,KAAK,GAAG,mEAAmE,CAAC;CAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;CACvC,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC3C,CAAC;CAmED,SAAS,MAAM,CAAC,OAAO,EAAE;CACzB,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC;CAC5B,IAAI,IAAI,cAAc,GAAG,CAAC,CAAC;CAC3B,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC;CAC7B,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;CACtB,IAAI,IAAI,QAAQ,GAAG,EAAE,CAAC;CACtB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;CAC7C,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9B,QAAQ,IAAI,CAAC,GAAG,CAAC;CACjB,YAAY,QAAQ,IAAI,GAAG,CAAC;CAC5B,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;CAC7B,YAAY,SAAS;CACrB,QAAQ,IAAI,mBAAmB,GAAG,CAAC,CAAC;CACpC,QAAQ,IAAI,YAAY,GAAG,EAAE,CAAC;CAC9B,QAAQ,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;CAClE,YAAY,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;CACrC,YAAY,IAAI,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;CAClF,YAAY,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7C,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;CACpC,gBAAgB,eAAe;CAC/B,oBAAoB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;CAC/D,wBAAwB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;CAClE,wBAAwB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;CACrE,gBAAgB,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7C,gBAAgB,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C,gBAAgB,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9C,aAAa;CACb,YAAY,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;CACtC,gBAAgB,eAAe,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACzE,gBAAgB,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACvC,aAAa;CACb,YAAY,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;CAC/C,SAAS;CACT,QAAQ,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC3C,KAAK;CACL,IAAI,OAAO,QAAQ,CAAC;CACpB,CAAC;CACD,SAAS,aAAa,CAAC,GAAG,EAAE;CAC5B,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;CACpB,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAC/C,IAAI,GAAG;CACP,QAAQ,IAAI,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;CAC/B,QAAQ,GAAG,MAAM,CAAC,CAAC;CACnB,QAAQ,IAAI,GAAG,GAAG,CAAC,EAAE;CACrB,YAAY,OAAO,IAAI,EAAE,CAAC;CAC1B,SAAS;CACT,QAAQ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;CACjC,KAAK,QAAQ,GAAG,GAAG,CAAC,EAAE;CACtB,IAAI,OAAO,MAAM,CAAC;CAClB;;CCtHAC,IAAI,IAAI,eAAS;CACjB,CAAC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;CAC5F,CAAC,CAAC;CACF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;CACxE,CAAC,IAAI,aAAI,GAAG,WAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAC,CAAC;CAChE,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;CACzC,CAAC,IAAI,aAAI,GAAG,WAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAC,CAAC;CAC9D,CAAC;AACD;CACe,IAAM,SAAS,GAC7B,kBAAW,CAAC,UAAU,EAAE;CACzB,CAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;CACnB,CAAE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;CAC9B,CAAE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;CACpC,CAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;CAClD,CAAE,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;CAChC,CAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;CAC7C,EAAC;AACF;qBACC,gCAAW;CACZ,CAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CAC7B,EAAC;AACF;qBACC,0BAAQ;CACT,CAAE,OAAO,6CAA6C,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC9E;;CC3Bc,SAAS,WAAW,CAAC,IAAI,EAAE;CAC1C,CAACD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;CACA,CAACA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,WAAE,IAAI,WAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAC,CAAC,CAAC;CAC1D,CAACA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,WAAE,IAAI,WAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAC,CAAC,CAAC;AAC5D;CACA,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;CACjD,EAAE,OAAO,IAAI,CAAC;CACd,EAAE;AACF;CACA;CACA;CACA;CACA,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;CACrC,EAAE,OAAO,IAAI,CAAC;CACd,EAAE;AACF;CACA;CACA,CAACA,IAAM,GAAG,GAAG,MAAM,CAAC,MAAM,WAAE,QAAQ,EAAE,OAAO,EAAK;CAClD,EAAEA,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CAClD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;CACvC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACd;CACA,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CACrC;;CCxBe,SAAS,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE;CAClD,CAACA,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACvC,CAACA,IAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC;CACA,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACjB;CACA,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;CACrC,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;CACpB,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;CAClB,EAAE;AACF;CACA,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;CACvB,EAAEC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;CAC3B,EAAE,OAAO,CAAC,EAAE,IAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAC;CAClC,EAAE;AACF;CACA,CAAC,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC5C;;CCjBAD,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3C;CACe,SAAS,QAAQ,CAAC,KAAK,EAAE;CACxC,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;CACnD;;CCJe,SAAS,UAAU,CAAC,MAAM,EAAE;CAC3C,CAACA,IAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CAC1C,CAACA,IAAM,WAAW,GAAG,EAAE,CAAC;AACxB;CACA,CAAC,KAAKC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;CACzD,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CACxB,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;CACrC,EAAE;AACF;CACA,CAAC,OAAO,SAAS,MAAM,CAAC,KAAK,EAAE;CAC/B,EAAEA,IAAI,CAAC,GAAG,CAAC,CAAC;CACZ,EAAEA,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;CAC7B,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;CAChB,GAAGD,IAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;CAC1B,GAAG,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE;CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;CACV,IAAI,MAAM;CACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACd,IAAI;CACJ,GAAG;CACH,EAAEA,IAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;CACrB,EAAEA,IAAM,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;CAC3C,EAAE,OAAO,QAAE,IAAI,UAAE,MAAM,EAAE,CAAC;CAC1B,EAAE,CAAC;CACH;;CCxBe,IAAM,QAAQ,GAC5B,iBAAW,CAAC,KAAK,EAAE;CACpB,CAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;CACrB,CAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;CAC7B,CAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;CAC/B,CAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;CAChB,CAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;CAC3D,CAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;CACrB,EAAC;AACF;oBACC,4BAAQ,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;CAC/C,CAAE,IAAI,OAAO,CAAC,MAAM,EAAE;CACtB,EAAGA,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjF,EAAG,IAAI,SAAS,IAAI,CAAC,EAAE;CACvB,GAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;CAC5B,GAAI;CACJ,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CAClC,EAAG,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;CAC3B,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;CACvC,EAAG;AACH;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;CACxB,CAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;CACrB,EAAC;AACF;oBACC,8CAAiB,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,kBAAkB,EAAE;CACzE,CAAEC,IAAI,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC;CACtC,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC;AACnB;CACA,CAAE,OAAO,iBAAiB,GAAG,KAAK,CAAC,GAAG,EAAE;CACxC,EAAG,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;CACzE,GAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CACzF,GAAI;AACJ;CACA,EAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;CAC7C,GAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;CAClB,GAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;CACnB,GAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;CAChC,GAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;CAC7D,GAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;CACjC,GAAI,KAAK,GAAG,IAAI,CAAC;CACjB,GAAI,MAAM;CACV,GAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CACpB,GAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;CAClC,GAAI,KAAK,GAAG,KAAK,CAAC;CAClB,GAAI;AACJ;CACA,EAAG,iBAAiB,IAAI,CAAC,CAAC;CAC1B,EAAG;AACH;CACA,CAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;CACrB,EAAC;AACF;oBACC,4BAAQ,GAAG,EAAE;CACd,CAAE,IAAI,CAAC,GAAG,IAAE,SAAO;AACnB;CACA,CAAED,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC;CACA,CAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;CACxB,EAAG,KAAKC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;CAC9C,GAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;CAC7B,GAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;CAC7D,GAAI;CACJ,EAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;CAChC,EAAG;AACH;CACA,CAAE,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;CAC5D;;CCzDDD,IAAM,CAAC,GAAG,IAAI,CAAC;AACf;CACAA,IAAM,MAAM,GAAG;CACf,CAAC,UAAU,EAAE,KAAK;CAClB,CAAC,WAAW,EAAE,KAAK;CACnB,CAAC,SAAS,EAAE,KAAK;CACjB,CAAC,CAAC;AACF;KACqB,WAAW,GAC/B,oBAAW,CAAC,MAAM,EAAE,OAAY,EAAE;mCAAP,GAAG;AAAK;CACpC,CAAEA,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD;CACA,CAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;CAChC,EAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;CAC9C,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CACvC,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CACvC,EAAG,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;CAC/C,EAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;CAC9C,EAAG,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;CACtD,EAAG,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CACzC,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CACvC,EAAG,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;CACxD,EAAG,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE;CAClF,EAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,EAAE;CAC9D,EAAG,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CAC7C,EAAG,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE;CAC5D,EAAG,CAAC,CAAC;AAKL;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;CAC1B,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;CACnC,EAAC;AACF;uBACC,sDAAqB,IAAI,EAAE;CAC5B,CAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;CACnC,EAAC;AACF;uBACC,0BAAO,OAAO,EAAE;CACjB,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,GAAC;AACzF;CACA,CAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;CACxB,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,kCAAW,KAAK,EAAE,OAAO,EAAE;CAC5B,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,GAAC;AAG5F;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;CACA,CAAE,IAAI,KAAK,EAAE;CACb,EAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;CAC7B,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;CACzB,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,oCAAY,KAAK,EAAE,OAAO,EAAE;CAC7B,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,GAAC;AAG5F;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;CACA,CAAE,IAAI,KAAK,EAAE;CACb,EAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CAC9B,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;CACzB,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,0BAAQ;CACT,CAAEA,IAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7E;CACA,CAAEC,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;CACtC,CAAEA,IAAI,WAAW,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3F;CACA,CAAE,OAAO,aAAa,EAAE;CACxB,EAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;CACnD,EAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAC/C;CACA,EAAGD,IAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC;CAChD,EAAGA,IAAM,eAAe,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC1E;CACA,EAAG,IAAI,eAAe,EAAE;CACxB,GAAI,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC;CACvC,GAAI,eAAe,CAAC,QAAQ,GAAG,WAAW,CAAC;AAC3C;CACA,GAAI,WAAW,GAAG,eAAe,CAAC;CAClC,GAAI;AACJ;CACA,EAAG,aAAa,GAAG,iBAAiB,CAAC;CACrC,EAAG;AACH;CACA,CAAE,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;AACjC;CACA,CAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE;CAClC,EAAG,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;CACrE,EAAG;AACH;CACA,CAAE,MAAM,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClE;CACA,CAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;CAC5B,CAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B;CACA,CAAE,OAAO,MAAM,CAAC;CACf,EAAC;AACF;uBACC,kDAAmB,OAAO,EAAE;;AAAC;CAC9B,CAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;CACA,CAAEA,IAAM,WAAW,GAAG,CAAC,CAAC;CACxB,CAAEA,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CAC9C,CAAEA,IAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;CACA,CAAEA,IAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C;CACA,CAAE,IAAI,IAAI,CAAC,KAAK,EAAE;CAClB,EAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CAChC,EAAG;AACH;CACA,CAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,WAAE,KAAK,EAAK;CACtC,EAAGA,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC;CACA,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAC;AACzD;CACA,EAAG,IAAI,KAAK,CAAC,MAAM,EAAE;CACrB,GAAI,QAAQ,CAAC,OAAO;CACpB,IAAK,WAAW;CAChB,IAAK,KAAK,CAAC,OAAO;CAClB,IAAK,GAAG;CACR,IAAK,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CACzD,IAAK,CAAC;CACN,GAAI,MAAM;CACV,GAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAEE,QAAI,CAAC,QAAQ,EAAE,GAAG,EAAEA,QAAI,CAAC,kBAAkB,CAAC,CAAC;CAC/F,GAAI;AACJ;CACA,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAC;CACzD,EAAG,CAAC,CAAC;AACL;CACA,CAAE,OAAO;CACT,EAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;CAChE,EAAG,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACzF,EAAG,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;CACpE,SAAG,KAAK;CACR,EAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;CACzB,EAAG,CAAC;CACH,EAAC;AACF;uBACC,oCAAY,OAAO,EAAE;CACtB,CAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;CACxD,EAAC;AACF;uBACC,8CAAkB;CACnB,CAAE,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;CACxD,EAAC;AACF;uBACC,0BAAO,SAAS,EAAE,OAAO,EAAE;CAC5B,CAAEF,IAAM,OAAO,GAAG,YAAY,CAAC;AAC/B;CACA,CAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;CAC3B,EAAG,OAAO,GAAG,SAAS,CAAC;CACvB,EAAG,SAAS,GAAG,SAAS,CAAC;CACzB,EAAG;AACH;CACA,CAAE,SAAS,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;AAC3E;CACA,CAAE,IAAI,SAAS,KAAK,EAAE,IAAE,OAAO,IAAI,GAAC;AACpC;CACA,CAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;CACA;CACA,CAAEA,IAAM,UAAU,GAAG,EAAE,CAAC;AACxB;CACA,CAAE,IAAI,OAAO,CAAC,OAAO,EAAE;CACvB,EAAGA,IAAM,UAAU;CACnB,GAAI,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CACjF,EAAG,UAAU,CAAC,OAAO,WAAE,SAAS,EAAK;CACrC,GAAI,KAAKC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;CACzD,IAAK,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1B,IAAK;CACL,GAAI,CAAC,CAAC;CACN,EAAG;AACH;CACA,CAAEA,IAAI,yBAAyB,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;CAChE,CAAED,IAAM,QAAQ,aAAI,KAAK,EAAK;CAC9B,EAAG,IAAI,yBAAyB,IAAE,aAAU,YAAY,SAAQ;CAChE,EAAG,yBAAyB,GAAG,IAAI,CAAC;CACpC,EAAG,OAAO,KAAK,CAAC;CAChB,EAAG,CAAC;AACJ;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;CACA,CAAEC,IAAI,SAAS,GAAG,CAAC,CAAC;CACpB,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;CACA,CAAE,OAAO,KAAK,EAAE;CAChB,EAAGD,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB;CACA,EAAG,IAAI,KAAK,CAAC,MAAM,EAAE;CACrB,GAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;CAChC,IAAK,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9D;CACA,IAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;CAC/B,KAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;CACnF,KAAM;CACN,IAAK;CACL,GAAI,MAAM;CACV,GAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AAC5B;CACA,GAAI,OAAO,SAAS,GAAG,GAAG,EAAE;CAC5B,IAAK,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;CACjC,KAAMA,IAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5C;CACA,KAAM,IAAI,IAAI,KAAK,IAAI,EAAE;CACzB,MAAO,yBAAyB,GAAG,IAAI,CAAC;CACxC,MAAO,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,yBAAyB,EAAE;CAC7D,MAAO,yBAAyB,GAAG,KAAK,CAAC;AACzC;CACA,MAAO,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE;CACtC,OAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;CACtC,OAAQ,MAAM;CACd,OAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;CAC3C,OAAQ,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CAC3B,OAAQ,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;CACtC,OAAQ;CACR,MAAO;CACP,KAAM;AACN;CACA,IAAK,SAAS,IAAI,CAAC,CAAC;CACpB,IAAK;CACL,GAAI;AACJ;CACA,EAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;CACzB,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG;AACH;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACrD;CACA,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,4BAAS;CACV,CAAE,MAAM,IAAI,KAAK;CACjB,EAAG,iFAAiF;CACpF,EAAG,CAAC;CACH,EAAC;AACF;uBACC,kCAAW,KAAK,EAAE,OAAO,EAAE;CAC5B,CAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;CAC1B,EAAG,OAAO,CAAC,IAAI;CACf,GAAI,oFAAoF;CACxF,GAAI,CAAC;CACL,EAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CAC5B,EAAG;AACH;CACA,CAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACxC,EAAC;AACF;uBACC,oCAAY,KAAK,EAAE,OAAO,EAAE;CAC7B,CAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;CAC3B,EAAG,OAAO,CAAC,IAAI;CACf,GAAI,uFAAuF;CAC3F,GAAI,CAAC;CACL,EAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;CAC7B,EAAG;AACH;CACA,CAAE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CAC1C,EAAC;AACF;uBACC,sBAAK,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;CACzB,CAAE,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,GAAC;AAG/F;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CACrB,CAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACnB,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CACpC,CAAEA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;CACA,CAAEA,IAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;CACjC,CAAEA,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B;CACA,CAAEA,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CACvC,CAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,IAAE,OAAO,IAAI,GAAC;CACxD,CAAEA,IAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;AAChE;CACA,CAAE,IAAI,OAAO,IAAE,OAAO,CAAC,IAAI,GAAG,QAAQ,GAAC;CACvC,CAAE,IAAI,QAAQ,IAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,GAAC;AAC5C;CACA,CAAE,IAAI,OAAO,IAAE,OAAO,CAAC,IAAI,GAAG,KAAK,GAAC;CACpC,CAAE,IAAI,QAAQ,IAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAC;AACzC;CACA,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAC;CACnD,CAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;CAClB,EAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;CACnC,EAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;CAC9B,EAAG;AACH;CACA,CAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;CAC3B,CAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC;AAC/B;CACA,CAAE,IAAI,CAAC,OAAO,IAAE,IAAI,CAAC,UAAU,GAAG,KAAK,GAAC;CACxC,CAAE,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,SAAS,GAAG,IAAI,GAAC;CAGvC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,gCAAU,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;CACzC,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,GAAC;AAC/F;CACA,CAAE,OAAO,KAAK,GAAG,CAAC,IAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;CAClD,CAAE,OAAO,GAAG,GAAG,CAAC,IAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;AAC9C;CACA,CAAE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,GAAC;CAC1E,CAAE,IAAI,KAAK,KAAK,GAAG;CACnB,IAAG,MAAM,IAAI,KAAK;CAClB,GAAI,+EAA+E;CACnF,GAAI,GAAC;AAGL;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CACrB,CAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;CACA,CAAE,IAAI,OAAO,KAAK,IAAI,EAAE;CACxB,EAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;CAC1B,GAAI,OAAO,CAAC,IAAI;CAChB,IAAK,+HAA+H;CACpI,IAAK,CAAC;CACN,GAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,GAAI;AACJ;CACA,EAAG,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;CACjC,EAAG;CACH,CAAEA,IAAM,SAAS,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;CACtE,CAAEA,IAAM,WAAW,GAAG,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1E;CACA,CAAE,IAAI,SAAS,EAAE;CACjB,EAAGA,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;CACpD,EAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;CACxG,EAAG;AACH;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CACpC,CAAEA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B;CACA,CAAE,IAAI,KAAK,EAAE;CACb,EAAGC,IAAI,KAAK,GAAG,KAAK,CAAC;CACrB,EAAG,OAAO,KAAK,KAAK,IAAI,EAAE;CAC1B,GAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;CAChD,IAAK,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;CAC9D,IAAK;CACL,GAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACvB,GAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAC1B,GAAI;AACJ;CACA,EAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;CAC/C,EAAG,MAAM;CACT;CACA,EAAGD,IAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvE;CACA;CACA,EAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;CACxB,EAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;CAC5B,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,4BAAQ,OAAO,EAAE;CAClB,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,GAAC;AACzF;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CACpC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,oCAAY,KAAK,EAAE,OAAO,EAAE;CAC7B,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,GAAC;AAG5F;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC;CACA,CAAE,IAAI,KAAK,EAAE;CACb,EAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CAC9B,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CACrC,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,sCAAa,KAAK,EAAE,OAAO,EAAE;CAC9B,CAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,GAAC;AAG5F;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB;CACA,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC;CACA,CAAE,IAAI,KAAK,EAAE;CACb,EAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;CAC/B,EAAG,MAAM;CACT,EAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CACrC,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,0BAAO,KAAK,EAAE,GAAG,EAAE;CACpB,CAAE,OAAO,KAAK,GAAG,CAAC,IAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;CAClD,CAAE,OAAO,GAAG,GAAG,CAAC,IAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;AAC9C;CACA,CAAE,IAAI,KAAK,KAAK,GAAG,IAAE,OAAO,IAAI,GAAC;AACjC;CACA,CAAE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,GAAC;CAC7F,CAAE,IAAI,KAAK,GAAG,GAAG,IAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,GAAC;AAGrE;CACA,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;CACrB,CAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB;CACA,CAAEC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC;CACA,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;CACpB,EAAG,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;CACpB,EAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB;CACA,EAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC5D,EAAG;CAGH,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,gCAAW;CACZ,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAC;CAClE,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;CAC7B,CAAE,GAAG;CACL,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAC;CACtE,EAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAC;CAC5E,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAC;CACtE,EAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;CACrC,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAC;CAClE,CAAE,OAAO,EAAE,CAAC;CACX,EAAC;AACF;uBACC,gCAAW;CACZ,CAAEA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAE,IAAI,SAAS,KAAK,CAAC,CAAC,IAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAC;CAChE,CAAEA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;CAC3B,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;CAC7B,CAAE,GAAG;CACL,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;CAC/B,GAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC3C,GAAI,IAAI,SAAS,KAAK,CAAC,CAAC,IAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAC;CAC7E,GAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;CACpC,GAAI;AACJ;CACA,EAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;CACjC,GAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC7C,GAAI,IAAI,SAAS,KAAK,CAAC,CAAC,IAAE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAC;CAC/E,GAAI,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;CACtC,GAAI;AACJ;CACA,EAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;CAC/B,GAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC3C,GAAI,IAAI,SAAS,KAAK,CAAC,CAAC,IAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAC;CAC7E,GAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;CACpC,GAAI;CACJ,EAAG,SAAS,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG;CACrC,CAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CACxC,CAAE,IAAI,SAAS,KAAK,CAAC,CAAC,IAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAC;CAC1E,CAAE,OAAO,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;CAC7B,EAAC;AACF;uBACC,wBAAM,KAAS,EAAE,GAA0B,EAAE;gCAAlC,GAAG;4BAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;AAAS;CAC/C,CAAE,OAAO,KAAK,GAAG,CAAC,IAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;CAClD,CAAE,OAAO,GAAG,GAAG,CAAC,IAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAC;AAC9C;CACA,CAAEA,IAAI,MAAM,GAAG,EAAE,CAAC;AAClB;CACA;CACA,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;CAC9B,CAAE,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;CAC/D;CACA,EAAG,IAAI,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE;CAC9C,GAAI,OAAO,MAAM,CAAC;CAClB,GAAI;AACJ;CACA,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG;AACH;CACA,CAAE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;CACpD,IAAG,MAAM,IAAI,KAAK,qCAAkC,KAAK,8BAA0B,GAAC;AACpF;CACA,CAAED,IAAM,UAAU,GAAG,KAAK,CAAC;CAC3B,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;CACvE,GAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;CAC1B,GAAI;AACJ;CACA,EAAGA,IAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;CAC7D,EAAG,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;CACvD,KAAI,MAAM,IAAI,KAAK,qCAAkC,GAAG,4BAAwB,GAAC;AACjF;CACA,EAAGA,IAAM,UAAU,GAAG,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;CACrE,EAAGA,IAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAChG;CACA,EAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACvD;CACA,EAAG,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;CAC3D,GAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;CAC1B,GAAI;AACJ;CACA,EAAG,IAAI,WAAW,EAAE;CACpB,GAAI,MAAM;CACV,GAAI;AACJ;CACA,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG;AACH;CACA,CAAE,OAAO,MAAM,CAAC;CACf,EAAC;AACF;CACC;uBACA,sBAAK,KAAK,EAAE,GAAG,EAAE;CAClB,CAAEA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;CAC7B,CAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;CACzB,CAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C;CACA,CAAE,OAAO,KAAK,CAAC;CACd,EAAC;AACF;uBACC,0BAAO,KAAK,EAAE;CACf,CAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAE,SAAO;AAGvD;CACA,CAAEC,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;CACrC,CAAED,IAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1C;CACA,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAC;AACpE;CACA,EAAG,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;CAC7E,EAAG;CACF,EAAC;AACF;uBACC,oCAAY,KAAK,EAAE,KAAK,EAAE;CAC3B,CAAE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;CAC5C;CACA,EAAGA,IAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;CAChD,EAAG,MAAM,IAAI,KAAK;CAClB,6DAA0D,GAAG,CAAC,KAAI,UAAI,GAAG,CAAC,OAAM,cAAO,KAAK,CAAC,SAAQ;CACrG,GAAI,CAAC;CACL,EAAG;AACH;CACA,CAAEA,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtC;CACA,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;CAC5B,CAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;CACjC,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACtC;CACA,CAAE,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAC;AAC1D;CACA,CAAE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;CAEjC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,gCAAW;CACZ,CAAEC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB;CACA,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;CAC9B,CAAE,OAAO,KAAK,EAAE;CAChB,EAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;CAC3B,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG;AACH;CACA,CAAE,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;CACzB,EAAC;AACF;uBACC,8BAAU;CACX,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;CAC9B,CAAE,GAAG;CACL,EAAG;CACH,GAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;CAC7C,IAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;CAClD,IAAK,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;CAC9C;CACA,KAAI,OAAO,KAAK,GAAC;CACjB,EAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;CACjC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;uBACC,4BAAS;CACV,CAAEA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;CAC9B,CAAEA,IAAI,MAAM,GAAG,CAAC,CAAC;CACjB,CAAE,GAAG;CACL,EAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;CAC5E,EAAG,SAAS,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG;CACjC,CAAE,OAAO,MAAM,CAAC;CACf,EAAC;AACF;uBACC,kCAAY;CACb,CAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9B,EAAC;AACF;uBACC,sBAAK,QAAQ,EAAE;CAChB,CAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnD,EAAC;AACF;uBACC,0CAAe,QAAQ,EAAE;CAC1B,CAAED,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC1C,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;AACrC;CACA,CAAEC,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B;CACA,CAAE,GAAG;CACL,EAAGD,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;CACzB,EAAGA,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC;CACA;CACA,EAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;CAC1B,GAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;CAClC,IAAK,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;CACjC,IAAK;AACL;CACA,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAClC,GAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;CAChD,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;CAC5C,GAAI;AACJ;CACA,EAAG,IAAI,OAAO,IAAE,OAAO,IAAI,GAAC;CAC5B,EAAG,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC1B,EAAG,QAAQ,KAAK,EAAE;AAClB;CACA,CAAE,OAAO,KAAK,CAAC;CACd,EAAC;AACF;uBACC,4BAAQ,QAAQ,EAAE;CACnB,CAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;CAChC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;uBACD,8CAAiB,QAAQ,EAAE;CAC5B,CAAEA,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACzD;CACA,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC1C,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,OAAO,IAAI,GAAC;AACrC;CACA,CAAEC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9B;CACA,CAAE,GAAG;CACL,EAAGD,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;CACzB,EAAGA,IAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvC;CACA,EAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;CAC1B;CACA,GAAI,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,GAAC;AAC9D;CACA,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAClC,GAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;CAChD,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;CAC5C,GAAI;AACJ;CACA,EAAG,IAAI,OAAO,IAAE,OAAO,IAAI,GAAC;CAC5B,EAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;CACtB,EAAG,QAAQ,KAAK,EAAE;AAClB;CACA,CAAE,OAAO,KAAK,CAAC;CACd,EAAC;AACF;uBACC,gCAAU,QAAQ,EAAE;CACrB,CAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;CAClC,CAAE,OAAO,IAAI,CAAC;CACb;;CClsBDA,IAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACnD;CACe,IAAM,MAAM,GAC1B,eAAW,CAAC,OAAY,EAAE;mCAAP,GAAG;AAAK;CAC5B,CAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;CACnC,CAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAC9E,CAAE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;CACpB,CAAE,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;CAC1B,CAAE,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;CACvC,EAAC;AACF;kBACC,gCAAU,MAAM,EAAE;CACnB,CAAE,IAAI,MAAM,YAAY,WAAW,EAAE;CACrC,EAAG,OAAO,IAAI,CAAC,SAAS,CAAC;CACzB,GAAI,OAAO,EAAE,MAAM;CACnB,GAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;CAC7B,GAAI,SAAS,EAAE,IAAI,CAAC,SAAS;CAC7B,GAAI,CAAC,CAAC;CACN,EAAG;AACH;CACA,CAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;CAC5C,EAAG,MAAM,IAAI,KAAK;CAClB,GAAI,sIAAsI;CAC1I,GAAI,CAAC;CACL,EAAG;AACH;CACA,CAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC,OAAO,WAAE,MAAM,EAAK;CACzE,EAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAC;CACjF,EAAG,CAAC,CAAC;AACL;CACA,CAAE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;CACtC;CACA,EAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;CACrC,EAAG;AACH;CACA,CAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;CACvB,EAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;CAC5E,GAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;CAClF,GAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC7F,GAAI,MAAM;CACV,GAAIA,IAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC/F,GAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,OAAO,EAAE;CAC1D,IAAK,MAAM,IAAI,KAAK,uCAAmC,MAAM,CAAC,SAAQ,4BAAwB,CAAC;CAC/F,IAAK;CACL,GAAI;CACJ,EAAG;AACH;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,0BAAO,GAAG,EAAE,OAAO,EAAE;CACtB,CAAE,IAAI,CAAC,SAAS,CAAC;CACjB,EAAG,OAAO,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC;CAChC,EAAG,SAAS,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE;CAClD,EAAG,CAAC,CAAC;AACL;CACA,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,0BAAQ;CACT,CAAEA,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC;CAC5B,EAAG,KAAK,EAAE,IAAI,CAAC,KAAK;CACpB,EAAG,SAAS,EAAE,IAAI,CAAC,SAAS;CAC5B,EAAG,CAAC,CAAC;AACL;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,WAAE,MAAM,EAAK;CACnC,EAAG,MAAM,CAAC,SAAS,CAAC;CACpB,GAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;CAC7B,GAAI,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;CACnC,GAAI,SAAS,EAAE,MAAM,CAAC,SAAS;CAC/B,GAAI,CAAC,CAAC;CACN,EAAG,CAAC,CAAC;AACL;CACA,CAAE,OAAO,MAAM,CAAC;CACf,EAAC;AACF;kBACC,kDAAmB,OAAY,EAAE;;oCAAP,GAAG;AAAK;CACnC,CAAEA,IAAM,KAAK,GAAG,EAAE,CAAC;CACnB,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,WAAE,MAAM,EAAK;CACnC,EAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,WAAE,IAAI,EAAK;CAC7D,GAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAC;CAChD,GAAI,CAAC,CAAC;CACN,EAAG,CAAC,CAAC;AACL;CACA,CAAEA,IAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C;CACA,CAAE,IAAI,IAAI,CAAC,KAAK,EAAE;CAClB,EAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CAChC,EAAG;AACH;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,WAAE,MAAM,EAAE,CAAC,EAAK;CACtC,EAAG,IAAI,CAAC,GAAG,CAAC,EAAE;CACd,GAAI,QAAQ,CAAC,OAAO,CAACE,QAAI,CAAC,SAAS,CAAC,CAAC;CACrC,GAAI;AACJ;CACA,EAAGF,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAGE,QAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;CAChG,EAAGF,IAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;CACtC,EAAGA,IAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnD;CACA,EAAG,IAAI,WAAW,CAAC,KAAK,EAAE;CAC1B,GAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CACxC,GAAI;AACJ;CACA,EAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,WAAE,KAAK,EAAK;CAC9C,GAAIA,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC;CACA,GAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAC;AAC1D;CACA,GAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;CACzB,IAAK,IAAI,KAAK,CAAC,MAAM,EAAE;CACvB,KAAM,QAAQ,CAAC,OAAO;CACtB,MAAO,WAAW;CAClB,MAAO,KAAK,CAAC,OAAO;CACpB,MAAO,GAAG;CACV,MAAO,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;CAC3D,MAAO,CAAC;CACR,KAAM,MAAM;CACZ,KAAM,QAAQ,CAAC,gBAAgB;CAC/B,MAAO,WAAW;CAClB,MAAO,KAAK;CACZ,MAAO,WAAW,CAAC,QAAQ;CAC3B,MAAO,GAAG;CACV,MAAO,WAAW,CAAC,kBAAkB;CACrC,MAAO,CAAC;CACR,KAAM;CACN,IAAK,MAAM;CACX,IAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACrC,IAAK;AACL;CACA,GAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAC;CAC1D,GAAI,CAAC,CAAC;AACN;CACA,EAAG,IAAI,WAAW,CAAC,KAAK,EAAE;CAC1B,GAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CACxC,GAAI;CACJ,EAAG,CAAC,CAAC;AACL;CACA,CAAE,OAAO;CACT,EAAG,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;CAChE,EAAG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,WAAE,MAAM,EAAK;CAC/C,GAAI,OAAO,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;CAC3F,GAAI,CAAC;CACL,EAAG,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,WAAE,MAAM,EAAK;CACtD,GAAI,OAAO,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC1D,GAAI,CAAC;CACL,SAAG,KAAK;CACR,EAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG;CACzB,EAAG,CAAC;CACH,EAAC;AACF;kBACC,oCAAY,OAAO,EAAE;CACtB,CAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;CACxD,EAAC;AACF;kBACC,8CAAkB;CACnB,CAAEA,IAAM,kBAAkB,GAAG,EAAE,CAAC;AAChC;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,WAAE,MAAM,EAAK;CACnC,EAAGA,IAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAC9C;CACA,EAAG,IAAI,SAAS,KAAK,IAAI,IAAE,SAAO;AAClC;CACA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,GAAC;CACzE,EAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CACtC,EAAG,CAAC,CAAC;AACL;CACA,CAAE;CACF,EAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,WAAE,CAAC,EAAE,CAAC,EAAK;CAClD,GAAI,OAAO,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;CACzD,GAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;CAChB,GAAI;CACH,EAAC;AACF;kBACC,0BAAO,SAAS,EAAE;;AAAC;CACpB,CAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;CACzB,EAAG,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;CACtC,EAAG;AACH;CACA,CAAE,IAAI,SAAS,KAAK,EAAE,IAAE,OAAO,IAAI,GAAC;AACpC;CACA,CAAEC,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACrE;CACA,CAAE,IAAI,CAAC,OAAO,CAAC,OAAO,WAAE,MAAM,EAAE,CAAC,EAAK;CACtC,EAAGD,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAGE,QAAI,CAAC,SAAS,CAAC;CACxF,EAAGF,IAAM,WAAW,GAAG,eAAe,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9E;CACA,EAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE;CACpC,GAAI,OAAO,EAAE,MAAM,CAAC,qBAAqB;CACzC,gBAAI,WAAW;CACf,GAAI,CAAC,CAAC;AACN;CACA,EAAG,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;CACxD,EAAG,CAAC,CAAC;AACL;CACA,CAAE,IAAI,IAAI,CAAC,KAAK,EAAE;CAClB,EAAG,IAAI,CAAC,KAAK;CACb,GAAI,SAAS;CACb,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,YAAG,KAAK,EAAE,KAAK,EAAK;CACrD,IAAK,OAAO,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;CAClD,IAAK,CAAC,CAAC;CACP,EAAG;AACH;CACA,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,4BAAQ,GAAG,EAAE;CACd,CAAE,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;CAChC,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,gCAAW;;AAAC;CACb,CAAEA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO;CAC3B,GAAI,GAAG,WAAE,MAAM,EAAE,CAAC,EAAK;CACvB,GAAIA,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAGE,QAAI,CAAC,SAAS,CAAC;CACzF,GAAIF,IAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACrE;CACA,GAAI,OAAO,GAAG,CAAC;CACf,GAAI,CAAC;CACL,GAAI,IAAI,CAAC,EAAE,CAAC,CAAC;AACb;CACA,CAAE,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;CAC1B,EAAC;AACF;kBACC,8BAAU;CACX,CAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAE,OAAO,KAAK,GAAC;CAC3D,CAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,WAAE,MAAM,WAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,KAAE,CAAC,IAAE,OAAO,KAAK,GAAC;CAC7E,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,4BAAS;CACV,CAAE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;CAC5B,YAAI,MAAM,EAAE,MAAM,WAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,KAAE;CACvD,EAAG,IAAI,CAAC,KAAK,CAAC,MAAM;CACpB,EAAG,CAAC;CACH,EAAC;AACF;kBACC,kCAAY;CACb,CAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;CAC9B,EAAC;AACF;kBACC,sBAAK,QAAQ,EAAE;CAChB,CAAE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnD,EAAC;AACF;kBACC,gCAAU,QAAQ,EAAE;CACrB,CAAEA,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;CACzD,CAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1C;CACA,CAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;CACnB,EAAGC,IAAI,MAAM,CAAC;CACd,EAAGA,IAAI,CAAC,GAAG,CAAC,CAAC;AACb;CACA,EAAG,GAAG;CACN,GAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC/B,GAAI,IAAI,CAAC,MAAM,EAAE;CACjB,IAAK,MAAM;CACX,IAAK;CACL,GAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;CACxD,EAAG;AACH;CACA,CAAE,OAAO,IAAI,CAAC;CACb,EAAC;AACF;kBACC,4BAAQ,QAAQ,EAAE;CACnB,CAAED,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACpD;CACA,CAAEC,IAAI,MAAM,CAAC;CACb,CAAEA,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC;CACA,CAAE,GAAG;CACL,EAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC9B,EAAG,IAAI,CAAC,MAAM,EAAE;CAChB,GAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC5C,GAAI,MAAM;CACV,GAAI;CACJ,EAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AACrD;CACA,CAAE,OAAO,IAAI,CAAC;CACb;;CC1RD,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;CAC5B,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;CAClC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/build/node_modules/magic-string/index.d.ts b/build/node_modules/magic-string/index.d.ts index 251701ca..343c49dc 100644 --- a/build/node_modules/magic-string/index.d.ts +++ b/build/node_modules/magic-string/index.d.ts @@ -4,10 +4,27 @@ export interface BundleOptions { } export interface SourceMapOptions { - hires: boolean; - file: string; - source: string; - includeContent: boolean; + /** + * Whether the mapping should be high-resolution. + * Hi-res mappings map every single character, meaning (for example) your devtools will always + * be able to pinpoint the exact location of function calls and so on. + * With lo-res mappings, devtools may only be able to identify the correct + * line - but they're quicker to generate and less bulky. + * If sourcemap locations have been specified with s.addSourceMapLocation(), they will be used here. + */ + hires?: boolean; + /** + * The filename where you plan to write the sourcemap. + */ + file?: string; + /** + * The filename of the file containing the original source. + */ + source?: string; + /** + * Whether to include the original content in the map's sourcesContent array. + */ + includeContent?: boolean; } export type SourceMapSegment = @@ -33,7 +50,14 @@ export class SourceMap { names: string[]; mappings: string; + /** + * Returns the equivalent of `JSON.stringify(map)` + */ toString(): string; + /** + * Returns a DataURI containing the sourcemap. Useful for doing this sort of thing: + * `generateMap(options?: SourceMapOptions): SourceMap;` + */ toUrl(): string; } @@ -42,8 +66,8 @@ export class Bundle { addSource(source: MagicString | { filename?: string, content: MagicString }): Bundle; append(str: string, options?: BundleOptions): Bundle; clone(): Bundle; - generateMap(options?: Partial): SourceMap; - generateDecodedMap(options?: Partial): DecodedSourceMap; + generateMap(options?: SourceMapOptions): SourceMap; + generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap; getIndentString(): string; indent(indentStr?: string): Bundle; indentExclusionRanges: ExclusionRange | Array; @@ -60,13 +84,13 @@ export class Bundle { export type ExclusionRange = [ number, number ]; export interface MagicStringOptions { - filename: string, - indentExclusionRanges: ExclusionRange | Array; + filename?: string, + indentExclusionRanges?: ExclusionRange | Array; } export interface IndentOptions { - exclude: ExclusionRange | Array; - indentStart: boolean; + exclude?: ExclusionRange | Array; + indentStart?: boolean; } export interface OverwriteOptions { @@ -76,36 +100,122 @@ export interface OverwriteOptions { export default class MagicString { constructor(str: string, options?: MagicStringOptions); + /** + * Adds the specified character index (with respect to the original string) to sourcemap mappings, if `hires` is false. + */ addSourcemapLocation(char: number): void; + /** + * Appends the specified content to the end of the string. + */ append(content: string): MagicString; + /** + * Appends the specified content at the index in the original string. + * If a range *ending* with index is subsequently moved, the insert will be moved with it. + * See also `s.prependLeft(...)`. + */ appendLeft(index: number, content: string): MagicString; + /** + * Appends the specified content at the index in the original string. + * If a range *starting* with index is subsequently moved, the insert will be moved with it. + * See also `s.prependRight(...)`. + */ appendRight(index: number, content: string): MagicString; + /** + * Does what you'd expect. + */ clone(): MagicString; - generateMap(options?: Partial): SourceMap; - generateDecodedMap(options?: Partial): DecodedSourceMap; + /** + * Generates a version 3 sourcemap. + */ + generateMap(options?: SourceMapOptions): SourceMap; + /** + * Generates a sourcemap object with raw mappings in array form, rather than encoded as a string. + * Useful if you need to manipulate the sourcemap further, but most of the time you will use `generateMap` instead. + */ + generateDecodedMap(options?: SourceMapOptions): DecodedSourceMap; getIndentString(): string; + /** + * Prefixes each line of the string with prefix. + * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character. + */ indent(options?: IndentOptions): MagicString; + /** + * Prefixes each line of the string with prefix. + * If prefix is not supplied, the indentation will be guessed from the original content, falling back to a single tab character. + * + * The options argument can have an exclude property, which is an array of [start, end] character ranges. + * These ranges will be excluded from the indentation - useful for (e.g.) multiline strings. + */ indent(indentStr?: string, options?: IndentOptions): MagicString; indentExclusionRanges: ExclusionRange | Array; + /** + * Moves the characters from `start and `end` to `index`. + */ move(start: number, end: number, index: number): MagicString; + /** + * Replaces the characters from `start` to `end` with `content`. The same restrictions as `s.remove()` apply. + * + * The fourth argument is optional. It can have a storeName property — if true, the original name will be stored + * for later inclusion in a sourcemap's names array — and a contentOnly property which determines whether only + * the content is overwritten, or anything that was appended/prepended to the range as well. + */ overwrite(start: number, end: number, content: string, options?: boolean | OverwriteOptions): MagicString; + /** + * Prepends the string with the specified content. + */ prepend(content: string): MagicString; + /** + * Same as `s.appendLeft(...)`, except that the inserted content will go *before* any previous appends or prepends at index + */ prependLeft(index: number, content: string): MagicString; + /** + * Same as `s.appendRight(...)`, except that the inserted content will go *before* any previous appends or prepends at `index` + */ prependRight(index: number, content: string): MagicString; + /** + * Removes the characters from `start` to `end` (of the original string, **not** the generated string). + * Removing the same content twice, or making removals that partially overlap, will cause an error. + */ remove(start: number, end: number): MagicString; + /** + * Returns the content of the generated string that corresponds to the slice between `start` and `end` of the original string. + * Throws error if the indices are for characters that were already removed. + */ slice(start: number, end: number): string; + /** + * Returns a clone of `s`, with all content before the `start` and `end` characters of the original string removed. + */ snip(start: number, end: number): MagicString; + /** + * Trims content matching `charType` (defaults to `\s`, i.e. whitespace) from the start and end. + */ trim(charType?: string): MagicString; + /** + * Trims content matching `charType` (defaults to `\s`, i.e. whitespace) from the start. + */ trimStart(charType?: string): MagicString; + /** + * Trims content matching `charType` (defaults to `\s`, i.e. whitespace) from the end. + */ trimEnd(charType?: string): MagicString; + /** + * Removes empty lines from the start and end. + */ trimLines(): MagicString; lastChar(): string; lastLine(): string; + /** + * Returns true if the resulting source is empty (disregarding white space). + */ isEmpty(): boolean; length(): number; original: string; + /** + * Returns the generated string. + */ + toString(): string; } diff --git a/build/node_modules/magic-string/package.json b/build/node_modules/magic-string/package.json index fc47aced..ab5ef0a0 100644 --- a/build/node_modules/magic-string/package.json +++ b/build/node_modules/magic-string/package.json @@ -1,27 +1,27 @@ { - "_from": "magic-string@^0.25.2", - "_id": "magic-string@0.25.7", + "_from": "magic-string@^0.25.7", + "_id": "magic-string@0.25.9", "_inBundle": false, - "_integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "_integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "_location": "/magic-string", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "magic-string@^0.25.2", + "raw": "magic-string@^0.25.7", "name": "magic-string", "escapedName": "magic-string", - "rawSpec": "^0.25.2", + "rawSpec": "^0.25.7", "saveSpec": null, - "fetchSpec": "^0.25.2" + "fetchSpec": "^0.25.7" }, "_requiredBy": [ - "/rollup-plugin-commonjs" + "/@rollup/plugin-commonjs" ], - "_resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "_shasum": "3f497d6fd34c669c6798dcb821f2ef31f5445051", - "_spec": "magic-string@^0.25.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-commonjs", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.25.9.tgz", + "_shasum": "de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c", + "_spec": "magic-string@^0.25.7", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", "author": { "name": "Rich Harris" }, @@ -30,20 +30,22 @@ }, "bundleDependencies": false, "dependencies": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" }, "deprecated": false, "description": "Modify strings, generate sourcemaps", "devDependencies": { - "eslint": "^5.16.0", - "mocha": "^5.2.0", - "prettier": "^1.18.2", - "rollup": "^1.16.3", - "rollup-plugin-buble": "^0.19.6", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-replace": "^2.2.0", + "@rollup/plugin-buble": "^0.21.3", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-replace": "^4.0.0", + "bumpp": "^7.1.1", + "conventional-changelog-cli": "^2.2.2", + "eslint": "^7.32.0", + "mocha": "^9.2.1", + "prettier": "^2.5.1", + "rollup": "^2.69.0", "source-map": "^0.6.1", - "source-map-support": "^0.5.12" + "source-map-support": "^0.5.21" }, "files": [ "dist/*", @@ -69,14 +71,16 @@ }, "scripts": { "build": "rollup -c", + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", "format": "prettier --single-quote --print-width 100 --use-tabs --write src/*.js src/**/*.js", "lint": "eslint src test", "prepare": "npm run build", "prepublishOnly": "rm -rf dist && npm test", "pretest": "npm run lint && npm run build", + "release": "bumpp -x \"npm run changelog\" --all --commit --tag --push && npm publish", "test": "mocha", "watch": "rollup -cw" }, "typings": "index.d.ts", - "version": "0.25.7" + "version": "0.25.9" } diff --git a/build/node_modules/md5.js/package.json b/build/node_modules/md5.js/package.json index af397d70..45349c84 100644 --- a/build/node_modules/md5.js/package.json +++ b/build/node_modules/md5.js/package.json @@ -19,7 +19,7 @@ "/create-hash", "/evp_bytestokey" ], - "_resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/md5.js/-/md5.js-1.3.5.tgz", "_shasum": "b5d07b8e3216e3e27cd728d72f70d1e6a342005f", "_spec": "md5.js@^1.3.4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/create-hash", diff --git a/build/node_modules/methods/package.json b/build/node_modules/methods/package.json index 38927ee4..536a383e 100644 --- a/build/node_modules/methods/package.json +++ b/build/node_modules/methods/package.json @@ -1,5 +1,5 @@ { - "_from": "methods@^1.1.1", + "_from": "methods@^1.1.2", "_id": "methods@1.1.2", "_inBundle": false, "_integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", @@ -8,19 +8,19 @@ "_requested": { "type": "range", "registry": true, - "raw": "methods@^1.1.1", + "raw": "methods@^1.1.2", "name": "methods", "escapedName": "methods", - "rawSpec": "^1.1.1", + "rawSpec": "^1.1.2", "saveSpec": null, - "fetchSpec": "^1.1.1" + "fetchSpec": "^1.1.2" }, "_requiredBy": [ "/superagent" ], - "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/methods/-/methods-1.1.2.tgz", "_shasum": "5529a4d67654134edcc5266656835b0f851afcee", - "_spec": "methods@^1.1.1", + "_spec": "methods@^1.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "browser": { "http": false diff --git a/build/node_modules/miller-rabin/node_modules/bn.js/package.json b/build/node_modules/miller-rabin/node_modules/bn.js/package.json index c2f15bb7..7b70af70 100644 --- a/build/node_modules/miller-rabin/node_modules/bn.js/package.json +++ b/build/node_modules/miller-rabin/node_modules/bn.js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/miller-rabin" ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "_shasum": "775b3f278efbb9718eec7361f483fb36fbbfea88", "_spec": "bn.js@^4.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/miller-rabin", diff --git a/build/node_modules/miller-rabin/package.json b/build/node_modules/miller-rabin/package.json index 64710c03..23c744dc 100644 --- a/build/node_modules/miller-rabin/package.json +++ b/build/node_modules/miller-rabin/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/diffie-hellman" ], - "_resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/miller-rabin/-/miller-rabin-4.0.1.tgz", "_shasum": "f080351c865b0dc562a8462966daa53543c78a4d", "_spec": "miller-rabin@^4.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/diffie-hellman", diff --git a/build/node_modules/mime-db/HISTORY.md b/build/node_modules/mime-db/HISTORY.md index ff9438ee..7436f641 100644 --- a/build/node_modules/mime-db/HISTORY.md +++ b/build/node_modules/mime-db/HISTORY.md @@ -1,3 +1,30 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + 1.48.0 / 2021-05-30 =================== diff --git a/build/node_modules/mime-db/LICENSE b/build/node_modules/mime-db/LICENSE index a7ae8ee9..0751cb10 100644 --- a/build/node_modules/mime-db/LICENSE +++ b/build/node_modules/mime-db/LICENSE @@ -1,22 +1,23 @@ +(The MIT License) -The MIT License (MIT) +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong me@jongleberry.com +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/mime-db/README.md b/build/node_modules/mime-db/README.md index 41c696a3..5a8fcfe4 100644 --- a/build/node_modules/mime-db/README.md +++ b/build/node_modules/mime-db/README.md @@ -6,7 +6,7 @@ [![Build Status][ci-image]][ci-url] [![Coverage Status][coveralls-image]][coveralls-url] -This is a database of all mime types. +This is a large database of mime types and information about them. It consists of a single, public JSON file and does not include any logic, allowing it to remain as un-opinionated as possible with an API. It aggregates data from the following sources: diff --git a/build/node_modules/mime-db/db.json b/build/node_modules/mime-db/db.json index 067e0ce8..eb9c42c4 100644 --- a/build/node_modules/mime-db/db.json +++ b/build/node_modules/mime-db/db.json @@ -22,6 +22,9 @@ "application/a2l": { "source": "iana" }, + "application/ace+cbor": { + "source": "iana" + }, "application/activemessage": { "source": "iana" }, @@ -91,6 +94,9 @@ "source": "apache", "extensions": ["aw"] }, + "application/at+jwt": { + "source": "iana" + }, "application/atf": { "source": "iana" }, @@ -244,6 +250,10 @@ "application/cfw": { "source": "iana" }, + "application/city+json": { + "source": "iana", + "compressible": true + }, "application/clr": { "source": "iana" }, @@ -287,7 +297,8 @@ }, "application/cpl+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["cpl"] }, "application/csrattrs": { "source": "iana" @@ -322,6 +333,11 @@ "compressible": true, "extensions": ["mpd"] }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, "application/dashdelta": { "source": "iana" }, @@ -491,6 +507,10 @@ "source": "iana", "compressible": true }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, "application/fastinfoset": { "source": "iana" }, @@ -777,6 +797,7 @@ "extensions": ["mads"] }, "application/manifest+json": { + "source": "iana", "charset": "UTF-8", "compressible": true, "extensions": ["webmanifest"] @@ -857,7 +878,8 @@ }, "application/media-policy-dataset+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["mpf"] }, "application/media_control+xml": { "source": "iana", @@ -896,6 +918,9 @@ "application/mipc": { "source": "iana" }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, "application/mmt-aei+xml": { "source": "iana", "compressible": true, @@ -1010,6 +1035,9 @@ "application/oauth-authz-req+jwt": { "source": "iana" }, + "application/oblivious-dns-message": { + "source": "iana" + }, "application/ocsp-request": { "source": "iana" }, @@ -1062,6 +1090,13 @@ "source": "iana", "extensions": ["oxps"] }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, "application/p2p-overlay+xml": { "source": "iana", "compressible": true, @@ -1095,7 +1130,8 @@ "extensions": ["pgp"] }, "application/pgp-keys": { - "source": "iana" + "source": "iana", + "extensions": ["asc"] }, "application/pgp-signature": { "source": "iana", @@ -1515,6 +1551,10 @@ "compressible": true, "extensions": ["srx"] }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, "application/spirits-event+xml": { "source": "iana", "compressible": true @@ -1632,6 +1672,9 @@ "application/tnauthlist": { "source": "iana" }, + "application/token-introspection+jwt": { + "source": "iana" + }, "application/toml": { "compressible": true, "extensions": ["toml"] @@ -1640,7 +1683,8 @@ "source": "iana" }, "application/trig": { - "source": "iana" + "source": "iana", + "extensions": ["trig"] }, "application/ttml+xml": { "source": "iana", @@ -1992,6 +2036,10 @@ "application/vnd.afpc.modca-pagesegment": { "source": "iana" }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, "application/vnd.ah-barcode": { "source": "iana" }, @@ -2053,6 +2101,12 @@ "source": "iana", "extensions": ["atx"] }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, "application/vnd.apache.thrift.binary": { "source": "iana" }, @@ -2608,6 +2662,10 @@ "application/vnd.ecip.rlp": { "source": "iana" }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, "application/vnd.ecowin.chart": { "source": "iana", "extensions": ["mag"] @@ -2765,6 +2823,10 @@ "application/vnd.etsi.tsl.der": { "source": "iana" }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, "application/vnd.eudora.data": { "source": "iana" }, @@ -2795,6 +2857,10 @@ "application/vnd.f-secure.mobile": { "source": "iana" }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.fastcopy-disk-image": { "source": "iana" }, @@ -3085,6 +3151,16 @@ "source": "iana", "extensions": ["les"] }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, "application/vnd.hp-hpgl": { "source": "iana", "extensions": ["hpgl"] @@ -3498,6 +3574,10 @@ "source": "iana", "compressible": true }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, "application/vnd.maxmind.maxmind-db": { "source": "iana" }, @@ -3827,6 +3907,10 @@ "source": "iana", "extensions": ["taglet"] }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, "application/vnd.ncd.control": { "source": "iana" }, @@ -4288,6 +4372,9 @@ "compressible": true, "extensions": ["osm"] }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, "application/vnd.openxmlformats-officedocument.custom-properties+xml": { "source": "iana", "compressible": true @@ -4819,6 +4906,9 @@ "application/vnd.renlearn.rlprint": { "source": "iana" }, + "application/vnd.resilient.logic": { + "source": "iana" + }, "application/vnd.restful+json": { "source": "iana", "compressible": true @@ -5108,6 +5198,10 @@ "source": "iana", "compressible": true }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, "application/vnd.symbian.install": { "source": "apache", "extensions": ["sis","sisx"] @@ -5283,6 +5377,10 @@ "application/vnd.verimatrix.vcas": { "source": "iana" }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, "application/vnd.veryant.thin": { "source": "iana" }, @@ -5494,7 +5592,8 @@ }, "application/watcherinfo+xml": { "source": "iana", - "compressible": true + "compressible": true, + "extensions": ["wif"] }, "application/webpush-options+json": { "source": "iana", @@ -5770,6 +5869,15 @@ "source": "apache", "extensions": ["iso"] }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, "application/x-java-archive-diff": { "source": "nginx", "extensions": ["jardiff"] @@ -6905,10 +7013,12 @@ "extensions": ["apng"] }, "image/avci": { - "source": "iana" + "source": "iana", + "extensions": ["avci"] }, "image/avcs": { - "source": "iana" + "source": "iana", + "extensions": ["avcs"] }, "image/avif": { "source": "iana", @@ -7142,6 +7252,7 @@ }, "image/vnd.microsoft.icon": { "source": "iana", + "compressible": true, "extensions": ["ico"] }, "image/vnd.mix": { @@ -7151,6 +7262,7 @@ "source": "iana" }, "image/vnd.ms-dds": { + "compressible": true, "extensions": ["dds"] }, "image/vnd.ms-modi": { @@ -7401,6 +7513,24 @@ "source": "iana", "extensions": ["obj"] }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, "model/stl": { "source": "iana", "extensions": ["stl"] @@ -7822,6 +7952,10 @@ "source": "iana", "charset": "UTF-8" }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, "text/vnd.ficlab.flt": { "source": "iana" }, @@ -8091,6 +8225,9 @@ "source": "apache", "extensions": ["jpm","jpgm"] }, + "video/jxsv": { + "source": "iana" + }, "video/mj2": { "source": "iana", "extensions": ["mj2","mjp2"] @@ -8298,6 +8435,9 @@ "video/vp8": { "source": "iana" }, + "video/vp9": { + "source": "iana" + }, "video/webm": { "source": "apache", "compressible": false, diff --git a/build/node_modules/mime-db/index.js b/build/node_modules/mime-db/index.js index 551031f6..ec2be30d 100644 --- a/build/node_modules/mime-db/index.js +++ b/build/node_modules/mime-db/index.js @@ -1,6 +1,7 @@ /*! * mime-db * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */ diff --git a/build/node_modules/mime-db/package.json b/build/node_modules/mime-db/package.json index 9568b3ee..cbe2e209 100644 --- a/build/node_modules/mime-db/package.json +++ b/build/node_modules/mime-db/package.json @@ -1,26 +1,26 @@ { - "_from": "mime-db@1.48.0", - "_id": "mime-db@1.48.0", + "_from": "mime-db@1.52.0", + "_id": "mime-db@1.52.0", "_inBundle": false, - "_integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "_integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "_location": "/mime-db", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "mime-db@1.48.0", + "raw": "mime-db@1.52.0", "name": "mime-db", "escapedName": "mime-db", - "rawSpec": "1.48.0", + "rawSpec": "1.52.0", "saveSpec": null, - "fetchSpec": "1.48.0" + "fetchSpec": "1.52.0" }, "_requiredBy": [ "/mime-types" ], - "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "_shasum": "e35b31045dd7eada3aaad537ed88a33afbef2d1d", - "_spec": "mime-db@1.48.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime-db/-/mime-db-1.52.0.tgz", + "_shasum": "bbabcdc02859f4987301c856e3387ce5ec43bf70", + "_spec": "mime-db@1.52.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mime-types", "bugs": { "url": "https://github.com/jshttp/mime-db/issues" @@ -48,18 +48,19 @@ "bluebird": "3.7.2", "co": "4.6.0", "cogent": "1.0.1", - "csv-parse": "4.15.4", - "eslint": "7.27.0", + "csv-parse": "4.16.3", + "eslint": "7.32.0", "eslint-config-standard": "15.0.1", - "eslint-plugin-import": "2.23.4", - "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.1.0", + "eslint-plugin-promise": "5.1.1", "eslint-plugin-standard": "4.1.0", "gnode": "0.1.2", - "mocha": "8.4.0", + "media-typer": "1.1.0", + "mocha": "9.2.1", "nyc": "15.1.0", - "raw-body": "2.4.1", + "raw-body": "2.5.0", "stream-to-array": "2.3.0" }, "engines": { @@ -98,5 +99,5 @@ "update": "npm run fetch && npm run build", "version": "node scripts/version-history.js && git add HISTORY.md" }, - "version": "1.48.0" + "version": "1.52.0" } diff --git a/build/node_modules/mime-types/HISTORY.md b/build/node_modules/mime-types/HISTORY.md index 19e45a15..c5043b75 100644 --- a/build/node_modules/mime-types/HISTORY.md +++ b/build/node_modules/mime-types/HISTORY.md @@ -1,10 +1,38 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + 2.1.31 / 2021-06-01 =================== * deps: mime-db@1.48.0 - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` - Add new upstream MIME types - - Mark `text/yaml` as compressible 2.1.30 / 2021-04-02 =================== @@ -82,7 +110,6 @@ - Add extension `.nq` to `application/n-quads` - Add extension `.nt` to `application/n-triples` - Add new upstream MIME types - - Mark `text/less` as compressible 2.1.21 / 2018-10-19 =================== @@ -335,7 +362,6 @@ * deps: mime-db@~1.1.0 - Add new mime types - - Add additional compressible - Update charsets 2.0.1 / 2014-09-07 diff --git a/build/node_modules/mime-types/README.md b/build/node_modules/mime-types/README.md index c978ac27..48d2fb47 100644 --- a/build/node_modules/mime-types/README.md +++ b/build/node_modules/mime-types/README.md @@ -103,7 +103,7 @@ A map of extensions by content-type. [MIT](LICENSE) [ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci -[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml [coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master [coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master [node-version-image]: https://badgen.net/npm/node/mime-types diff --git a/build/node_modules/mime-types/package.json b/build/node_modules/mime-types/package.json index c2cfeef4..6ce81d98 100644 --- a/build/node_modules/mime-types/package.json +++ b/build/node_modules/mime-types/package.json @@ -1,8 +1,8 @@ { "_from": "mime-types@^2.1.12", - "_id": "mime-types@2.1.31", + "_id": "mime-types@2.1.35", "_inBundle": false, - "_integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "_integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "_location": "/mime-types", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/form-data" ], - "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "_shasum": "a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime-types/-/mime-types-2.1.35.tgz", + "_shasum": "381a871b62a734450660ae3deee44813f70d959a", "_spec": "mime-types@^2.1.12", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/form-data", "bugs": { @@ -43,19 +43,19 @@ } ], "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.52.0" }, "deprecated": false, "description": "The ultimate javascript content-type utility.", "devDependencies": { - "eslint": "7.27.0", + "eslint": "7.32.0", "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.23.4", - "eslint-plugin-markdown": "2.2.0", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.1.0", + "eslint-plugin-promise": "5.2.0", "eslint-plugin-standard": "4.1.0", - "mocha": "8.4.0", + "mocha": "9.2.2", "nyc": "15.1.0" }, "engines": { @@ -83,5 +83,5 @@ "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc --reporter=html --reporter=text npm test" }, - "version": "2.1.31" + "version": "2.1.35" } diff --git a/build/node_modules/mime/CHANGELOG.md b/build/node_modules/mime/CHANGELOG.md index f1275350..dd254310 100644 --- a/build/node_modules/mime/CHANGELOG.md +++ b/build/node_modules/mime/CHANGELOG.md @@ -1,164 +1,296 @@ # Changelog -## v1.6.0 (24/11/2017) -*No changelog for this release.* +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [2.6.0](https://github.com/broofa/mime/compare/v2.5.2...v2.6.0) (2021-11-02) + + +### Features + +* mime-db@1.50.0 ([cef0cc4](https://github.com/broofa/mime/commit/cef0cc484ff6d05ff1e12b54ca3e8b856fbc14d8)) + +### [2.5.2](https://github.com/broofa/mime/compare/v2.5.0...v2.5.2) (2021-02-17) + + +### Bug Fixes + +* update to mime-db@1.46.0, fixes [#253](https://github.com/broofa/mime/issues/253) ([f10e6aa](https://github.com/broofa/mime/commit/f10e6aa62e1356de7e2491d7fb4374c8dac65800)) + +## [2.5.0](https://github.com/broofa/mime/compare/v2.4.7...v2.5.0) (2021-01-16) + + +### Features + +* improved CLI ([#244](https://github.com/broofa/mime/issues/244)) ([c8a8356](https://github.com/broofa/mime/commit/c8a8356e3b27f3ef46b64b89b428fdb547b14d5f)) + +### [2.4.7](https://github.com/broofa/mime/compare/v2.4.6...v2.4.7) (2020-12-16) + + +### Bug Fixes + +* update to latest mime-db ([43b09ef](https://github.com/broofa/mime/commit/43b09eff0233eacc449af2b1f99a19ba9e104a44)) + +### [2.4.6](https://github.com/broofa/mime/compare/v2.4.5...v2.4.6) (2020-05-27) + + +### Bug Fixes + +* add cli.js to package.json files ([#237](https://github.com/broofa/mime/issues/237)) ([6c070bc](https://github.com/broofa/mime/commit/6c070bc298fa12a48e2ed126fbb9de641a1e7ebc)) + +### [2.4.5](https://github.com/broofa/mime/compare/v2.4.4...v2.4.5) (2020-05-01) + + +### Bug Fixes + +* fix [#236](https://github.com/broofa/mime/issues/236) ([7f4ecd0](https://github.com/broofa/mime/commit/7f4ecd0d850ed22c9e3bfda2c11fc74e4dde12a7)) +* update to latest mime-db ([c5cb3f2](https://github.com/broofa/mime/commit/c5cb3f2ab8b07642a066efbde1142af1b90c927b)) + +### [2.4.4](https://github.com/broofa/mime/compare/v2.4.3...v2.4.4) (2019-06-07) + + + +### [2.4.3](https://github.com/broofa/mime/compare/v2.4.2...v2.4.3) (2019-05-15) + + + +### [2.4.2](https://github.com/broofa/mime/compare/v2.4.1...v2.4.2) (2019-04-07) + + +### Bug Fixes + +* don't use arrow function introduced in 2.4.1 ([2e00b5c](https://github.com/broofa/mime/commit/2e00b5c)) + + + +### [2.4.1](https://github.com/broofa/mime/compare/v2.4.0...v2.4.1) (2019-04-03) + + +### Bug Fixes + +* update MDN and mime-db types ([3e567a9](https://github.com/broofa/mime/commit/3e567a9)) + + + +# [2.4.0](https://github.com/broofa/mime/compare/v2.3.1...v2.4.0) (2018-11-26) + + +### Features + +* Bind exported methods ([9d2a7b8](https://github.com/broofa/mime/commit/9d2a7b8)) +* update to mime-db@1.37.0 ([49e6e41](https://github.com/broofa/mime/commit/49e6e41)) + + + +### [2.3.1](https://github.com/broofa/mime/compare/v2.3.0...v2.3.1) (2018-04-11) ---- -## v2.0.4 (24/11/2017) -- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/node-mime/issues/182) -- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/node-mime/issues/181) +### Bug Fixes + +* fix [#198](https://github.com/broofa/mime/issues/198) ([25ca180](https://github.com/broofa/mime/commit/25ca180)) + + + +# [2.3.0](https://github.com/broofa/mime/compare/v2.2.2...v2.3.0) (2018-04-11) + + +### Bug Fixes + +* fix [#192](https://github.com/broofa/mime/issues/192) ([5c35df6](https://github.com/broofa/mime/commit/5c35df6)) + + +### Features + +* add travis-ci testing ([d64160f](https://github.com/broofa/mime/commit/d64160f)) + + + +### [2.2.2](https://github.com/broofa/mime/compare/v2.2.1...v2.2.2) (2018-03-30) + + +### Bug Fixes + +* update types files to mime-db@1.32.0 ([85aac16](https://github.com/broofa/mime/commit/85aac16)) + + +### [2.2.1](https://github.com/broofa/mime/compare/v2.2.0...v2.2.1) (2018-03-30) + + +### Bug Fixes + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([b5c83fb](https://github.com/broofa/mime/commit/b5c83fb)) + + + +# [2.2.0](https://github.com/broofa/mime/compare/v2.1.0...v2.2.0) (2018-01-04) + + +### Features + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([10f82ac](https://github.com/broofa/mime/commit/10f82ac)) + + + +# [2.1.0](https://github.com/broofa/mime/compare/v2.0.5...v2.1.0) (2017-12-22) + + +### Features + +* Upgrade to mime-db@1.32.0. Fixes [#185](https://github.com/broofa/mime/issues/185) ([3f775ba](https://github.com/broofa/mime/commit/3f775ba)) + + + +### [2.0.5](https://github.com/broofa/mime/compare/v2.0.1...v2.0.5) (2017-12-22) + + +### Bug Fixes + +* ES5 support (back to node v0.4) ([f14ccb6](https://github.com/broofa/mime/commit/f14ccb6)) + + + +# Changelog + +### v2.0.4 (24/11/2017) +- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/mime/issues/182) +- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/mime/issues/181) --- ## v1.5.0 (22/11/2017) -- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/node-mime/issues/179) -- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/node-mime/issues/178) -- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/node-mime/issues/176) -- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/node-mime/issues/175) -- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/node-mime/issues/167) +- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/mime/issues/179) +- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/mime/issues/178) +- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/mime/issues/176) +- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/mime/issues/175) +- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/mime/issues/167) --- -## v2.0.3 (25/09/2017) +### v2.0.3 (25/09/2017) *No changelog for this release.* --- -## v1.4.1 (25/09/2017) -- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/node-mime/issues/172) +### v1.4.1 (25/09/2017) +- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/mime/issues/172) --- -## v2.0.2 (15/09/2017) -- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/node-mime/issues/165) -- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/node-mime/issues/164) -- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/node-mime/issues/163) -- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/node-mime/issues/162) -- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/node-mime/issues/161) -- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/node-mime/issues/160) -- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/node-mime/issues/152) -- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/node-mime/issues/139) -- [**V2**] reset mime-types [#124](https://github.com/broofa/node-mime/issues/124) -- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/node-mime/issues/113) +### v2.0.2 (15/09/2017) +- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/mime/issues/165) +- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/mime/issues/164) +- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/mime/issues/163) +- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/mime/issues/162) +- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/mime/issues/161) +- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/mime/issues/160) +- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/mime/issues/152) +- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/mime/issues/139) +- [**V2**] reset mime-types [#124](https://github.com/broofa/mime/issues/124) +- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/mime/issues/113) --- -## v2.0.1 (14/09/2017) -- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/node-mime/issues/171) -- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/node-mime/issues/170) +### v2.0.1 (14/09/2017) +- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/mime/issues/171) +- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/mime/issues/170) --- ## v2.0.0 (12/09/2017) -- [**closed**] woff and woff2 [#168](https://github.com/broofa/node-mime/issues/168) +- [**closed**] woff and woff2 [#168](https://github.com/broofa/mime/issues/168) --- ## v1.4.0 (28/08/2017) -- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/node-mime/issues/159) -- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/node-mime/issues/158) -- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/node-mime/issues/157) -- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/node-mime/issues/147) -- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/node-mime/issues/135) -- [**closed**] requested features [#131](https://github.com/broofa/node-mime/issues/131) -- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/node-mime/issues/129) -- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/node-mime/issues/120) -- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/node-mime/issues/118) -- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/node-mime/issues/108) -- [**closed**] don't make default_type global [#78](https://github.com/broofa/node-mime/issues/78) -- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/node-mime/issues/74) - ---- - -## v1.3.6 (11/05/2017) -- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/node-mime/issues/154) -- [**closed**] Error while installing mime [#153](https://github.com/broofa/node-mime/issues/153) -- [**closed**] application/manifest+json [#149](https://github.com/broofa/node-mime/issues/149) -- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/node-mime/issues/141) -- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/node-mime/issues/140) -- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/node-mime/issues/130) -- [**closed**] how to support plist? [#126](https://github.com/broofa/node-mime/issues/126) -- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/node-mime/issues/123) -- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/node-mime/issues/121) -- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/node-mime/issues/117) - ---- - -## v1.3.4 (06/02/2015) -*No changelog for this release.* +- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/mime/issues/159) +- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/mime/issues/158) +- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/mime/issues/157) +- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/mime/issues/147) +- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/mime/issues/135) +- [**closed**] requested features [#131](https://github.com/broofa/mime/issues/131) +- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/mime/issues/129) +- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/mime/issues/120) +- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/mime/issues/118) +- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/mime/issues/108) +- [**closed**] don't make default_type global [#78](https://github.com/broofa/mime/issues/78) +- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/mime/issues/74) --- -## v1.3.3 (06/02/2015) +### v1.3.6 (11/05/2017) +- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/mime/issues/154) +- [**closed**] Error while installing mime [#153](https://github.com/broofa/mime/issues/153) +- [**closed**] application/manifest+json [#149](https://github.com/broofa/mime/issues/149) +- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/mime/issues/141) +- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/mime/issues/140) +- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/mime/issues/130) +- [**closed**] how to support plist? [#126](https://github.com/broofa/mime/issues/126) +- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/mime/issues/123) +- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/mime/issues/121) +- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/mime/issues/117) + +--- + +### v1.3.4 (06/02/2015) *No changelog for this release.* --- -## v1.3.1 (05/02/2015) -- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/node-mime/issues/111) -- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/node-mime/issues/110) -- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/node-mime/issues/94) -- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/node-mime/issues/77) +### v1.3.3 (06/02/2015) +*No changelog for this release.* --- -## v1.3.0 (05/02/2015) -- [**closed**] Add common name? [#114](https://github.com/broofa/node-mime/issues/114) -- [**closed**] application/x-yaml [#104](https://github.com/broofa/node-mime/issues/104) -- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/node-mime/issues/102) -- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/node-mime/issues/99) -- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/node-mime/issues/98) -- [**closed**] collaborators [#88](https://github.com/broofa/node-mime/issues/88) -- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/node-mime/issues/87) -- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/node-mime/issues/86) -- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/node-mime/issues/81) -- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/node-mime/issues/68) +### v1.3.1 (05/02/2015) +- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/mime/issues/111) +- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/mime/issues/110) +- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/mime/issues/94) +- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/mime/issues/77) --- -## v1.2.11 (15/08/2013) -- [**closed**] Update mime.types [#65](https://github.com/broofa/node-mime/issues/65) -- [**closed**] Publish a new version [#63](https://github.com/broofa/node-mime/issues/63) -- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/node-mime/issues/55) -- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/node-mime/issues/52) +## v1.3.0 (05/02/2015) +- [**closed**] Add common name? [#114](https://github.com/broofa/mime/issues/114) +- [**closed**] application/x-yaml [#104](https://github.com/broofa/mime/issues/104) +- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/mime/issues/102) +- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/mime/issues/99) +- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/mime/issues/98) +- [**closed**] collaborators [#88](https://github.com/broofa/mime/issues/88) +- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/mime/issues/87) +- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/mime/issues/86) +- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/mime/issues/81) +- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/mime/issues/68) --- -## v1.2.10 (25/07/2013) -- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/node-mime/issues/62) -- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/node-mime/issues/51) +### v1.2.11 (15/08/2013) +- [**closed**] Update mime.types [#65](https://github.com/broofa/mime/issues/65) +- [**closed**] Publish a new version [#63](https://github.com/broofa/mime/issues/63) +- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/mime/issues/55) +- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/mime/issues/52) --- -## v1.2.9 (17/01/2013) -- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/node-mime/issues/49) -- [**closed**] Please add semicolon [#46](https://github.com/broofa/node-mime/issues/46) -- [**closed**] parse full mime types [#43](https://github.com/broofa/node-mime/issues/43) +### v1.2.10 (25/07/2013) +- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/mime/issues/62) +- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/mime/issues/51) --- -## v1.2.8 (10/01/2013) -- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/node-mime/issues/47) -- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/node-mime/issues/45) +### v1.2.9 (17/01/2013) +- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/mime/issues/49) +- [**closed**] Please add semicolon [#46](https://github.com/broofa/mime/issues/46) +- [**closed**] parse full mime types [#43](https://github.com/broofa/mime/issues/43) --- -## v1.2.7 (19/10/2012) -- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/node-mime/issues/41) -- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/node-mime/issues/36) -- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/node-mime/issues/30) -- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/node-mime/issues/27) +### v1.2.8 (10/01/2013) +- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/mime/issues/47) +- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/mime/issues/45) --- -## v1.2.5 (16/02/2012) -- [**closed**] When looking up a types, check hasOwnProperty [#23](https://github.com/broofa/node-mime/issues/23) -- [**closed**] Bump version to 1.2.2 [#18](https://github.com/broofa/node-mime/issues/18) -- [**closed**] No license [#16](https://github.com/broofa/node-mime/issues/16) -- [**closed**] Some types missing that are used by html5/css3 [#13](https://github.com/broofa/node-mime/issues/13) -- [**closed**] npm install fails for 1.2.1 [#12](https://github.com/broofa/node-mime/issues/12) -- [**closed**] image/pjpeg + image/x-png [#10](https://github.com/broofa/node-mime/issues/10) -- [**closed**] symlink [#8](https://github.com/broofa/node-mime/issues/8) -- [**closed**] gzip [#2](https://github.com/broofa/node-mime/issues/2) -- [**closed**] ALL CAPS filenames return incorrect mime type [#1](https://github.com/broofa/node-mime/issues/1) +### v1.2.7 (19/10/2012) +- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/mime/issues/41) +- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/mime/issues/36) +- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/mime/issues/30) +- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/mime/issues/27) diff --git a/build/node_modules/mime/Mime.js b/build/node_modules/mime/Mime.js new file mode 100644 index 00000000..969a66e4 --- /dev/null +++ b/build/node_modules/mime/Mime.js @@ -0,0 +1,97 @@ +'use strict'; + +/** + * @param typeMap [Object] Map of MIME type -> Array[extensions] + * @param ... + */ +function Mime() { + this._types = Object.create(null); + this._extensions = Object.create(null); + + for (let i = 0; i < arguments.length; i++) { + this.define(arguments[i]); + } + + this.define = this.define.bind(this); + this.getType = this.getType.bind(this); + this.getExtension = this.getExtension.bind(this); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * If a type declares an extension that has already been defined, an error will + * be thrown. To suppress this error and force the extension to be associated + * with the new type, pass `force`=true. Alternatively, you may prefix the + * extension with "*" to map the type to extension, without mapping the + * extension to the type. + * + * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']}); + * + * + * @param map (Object) type definitions + * @param force (Boolean) if true, force overriding of existing definitions + */ +Mime.prototype.define = function(typeMap, force) { + for (let type in typeMap) { + let extensions = typeMap[type].map(function(t) { + return t.toLowerCase(); + }); + type = type.toLowerCase(); + + for (let i = 0; i < extensions.length; i++) { + const ext = extensions[i]; + + // '*' prefix = not the preferred type for this extension. So fixup the + // extension, and skip it. + if (ext[0] === '*') { + continue; + } + + if (!force && (ext in this._types)) { + throw new Error( + 'Attempt to change mapping for "' + ext + + '" extension from "' + this._types[ext] + '" to "' + type + + '". Pass `force=true` to allow this, otherwise remove "' + ext + + '" from the list of extensions for "' + type + '".' + ); + } + + this._types[ext] = type; + } + + // Use first extension as default + if (force || !this._extensions[type]) { + const ext = extensions[0]; + this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1); + } + } +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.getType = function(path) { + path = String(path); + let last = path.replace(/^.*[/\\]/, '').toLowerCase(); + let ext = last.replace(/^.*\./, '').toLowerCase(); + + let hasPath = last.length < path.length; + let hasDot = ext.length < last.length - 1; + + return (hasDot || !hasPath) && this._types[ext] || null; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.getExtension = function(type) { + type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; + return type && this._extensions[type.toLowerCase()] || null; +}; + +module.exports = Mime; diff --git a/build/node_modules/mime/README.md b/build/node_modules/mime/README.md index 506fbe55..b08316f2 100644 --- a/build/node_modules/mime/README.md +++ b/build/node_modules/mime/README.md @@ -1,90 +1,187 @@ -# mime + +# Mime -Comprehensive MIME type mapping API based on mime-db module. +A comprehensive, compact MIME type module. -## Install +[![Build Status](https://travis-ci.org/broofa/mime.svg?branch=master)](https://travis-ci.org/broofa/mime) -Install with [npm](http://github.com/isaacs/npm): +## Version 2 Notes - npm install mime +Version 2 is a breaking change from 1.x as the semver implies. Specifically: -## Contributing / Testing +* `lookup()` renamed to `getType()` +* `extension()` renamed to `getExtension()` +* `charset()` and `load()` methods have been removed - npm run test +If you prefer the legacy version of this module please `npm install mime@^1`. Version 1 docs may be found [here](https://github.com/broofa/mime/tree/v1.4.0). -## Command Line +## Install + +### NPM +``` +npm install mime +``` - mime [path_string] +### Browser -E.g. +It is recommended that you use a bundler such as +[webpack](https://webpack.github.io/) or [browserify](http://browserify.org/) to +package your code. However, browser-ready versions are available via wzrd.in. +E.g. For the full version: - > mime scripts/jquery.js - application/javascript + + + +Or, for the `mime/lite` version: -## API - Queries + + -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. +## Quick Start -```js -var mime = require('mime'); +For the full version (800+ MIME types, 1,000+ extensions): -mime.lookup('/path/to/file.txt'); // => 'text/plain' -mime.lookup('file.txt'); // => 'text/plain' -mime.lookup('.TXT'); // => 'text/plain' -mime.lookup('htm'); // => 'text/html' +```javascript +const mime = require('mime'); + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getExtension('text/plain'); // ⇨ 'txt' ``` -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) +See [Mime API](#mime-api) below for API details. + +## Lite Version -### mime.extension(type) -Get the default extension for `type` +There is also a "lite" version of this module that omits vendor-specific +(`*/vnd.*`) and experimental (`*/x-*`) types. It weighs in at ~2.5KB, compared +to 8KB for the full version. To load the lite version: -```js -mime.extension('text/html'); // => 'html' -mime.extension('application/octet-stream'); // => 'bin' +```javascript +const mime = require('mime/lite'); ``` -### mime.charsets.lookup() +## Mime .vs. mime-types .vs. mime-db modules + +For those of you wondering about the difference between these [popular] NPM modules, +here's a brief rundown ... + +[`mime-db`](https://github.com/jshttp/mime-db) is "the source of +truth" for MIME type information. It is not an API. Rather, it is a canonical +dataset of mime type definitions pulled from IANA, Apache, NGINX, and custom mappings +submitted by the Node.js community. + +[`mime-types`](https://github.com/jshttp/mime-types) is a thin +wrapper around mime-db that provides an API drop-in compatible(ish) with `mime @ < v1.3.6` API. + +`mime` is, as of v2, a self-contained module bundled with a pre-optimized version +of the `mime-db` dataset. It provides a simplified API with the following characteristics: + +* Intelligently resolved type conflicts (See [mime-score](https://github.com/broofa/mime-score) for details) +* Method naming consistent with industry best-practices +* Compact footprint. E.g. The minified+compressed sizes of the various modules: + +Module | Size +--- | --- +`mime-db` | 18 KB +`mime-types` | same as mime-db +`mime` | 8 KB +`mime/lite` | 2 KB + +## Mime API -Map mime-type to charset +Both `require('mime')` and `require('mime/lite')` return instances of the MIME +class, documented below. -```js -mime.charsets.lookup('text/plain'); // => 'UTF-8' +Note: Inputs to this API are case-insensitive. Outputs (returned values) will +be lowercase. + +### new Mime(typeMap, ... more maps) + +Most users of this module will not need to create Mime instances directly. +However if you would like to create custom mappings, you may do so as follows +... + +```javascript +// Require Mime class +const Mime = require('mime/Mime'); + +// Define mime type -> extensions map +const typeMap = { + 'text/abc': ['abc', 'alpha', 'bet'], + 'text/def': ['leppard'] +}; + +// Create and use Mime instance +const myMime = new Mime(typeMap); +myMime.getType('abc'); // ⇨ 'text/abc' +myMime.getExtension('text/def'); // ⇨ 'leppard' ``` -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) +If more than one map argument is provided, each map is `define()`ed (see below), in order. -## API - Defining Custom Types +### mime.getType(pathOrExtension) -Custom type mappings can be added on a per-project basis via the following APIs. +Get mime type for the given path or extension. E.g. -### mime.define() +```javascript +mime.getType('js'); // ⇨ 'application/javascript' +mime.getType('json'); // ⇨ 'application/json' -Add custom mime/extension mappings +mime.getType('txt'); // ⇨ 'text/plain' +mime.getType('dir/text.txt'); // ⇨ 'text/plain' +mime.getType('dir\\text.txt'); // ⇨ 'text/plain' +mime.getType('.text.txt'); // ⇨ 'text/plain' +mime.getType('.txt'); // ⇨ 'text/plain' +``` -```js -mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... -}); +`null` is returned in cases where an extension is not detected or recognized -mime.lookup('x-sft'); // => 'text/x-some-format' +```javascript +mime.getType('foo/txt'); // ⇨ null +mime.getType('bogus_type'); // ⇨ null ``` -The first entry in the extensions array is returned by `mime.extension()`. E.g. +### mime.getExtension(type) +Get extension for the given mime type. Charset options (often included in +Content-Type headers) are ignored. -```js -mime.extension('text/x-some-format'); // => 'x-sf' +```javascript +mime.getExtension('text/plain'); // ⇨ 'txt' +mime.getExtension('application/json'); // ⇨ 'json' +mime.getExtension('text/html; charset=utf8'); // ⇨ 'html' ``` -### mime.load(filepath) +### mime.define(typeMap[, force = false]) + +Define [more] type mappings. + +`typeMap` is a map of type -> extensions, as documented in `new Mime`, above. + +By default this method will throw an error if you try to map a type to an +extension that is already assigned to another type. Passing `true` for the +`force` argument will suppress this behavior (overriding any previous mapping). -Load mappings from an Apache ".types" format file +```javascript +mime.define({'text/x-abc': ['abc', 'abcd']}); -```js -mime.load('./my_project.types'); +mime.getType('abcd'); // ⇨ 'text/x-abc' +mime.getExtension('text/x-abc') // ⇨ 'abc' ``` -The .types file format is simple - See the `types` dir for examples. + +## Command Line + + mime [path_or_extension] + +E.g. + + > mime scripts/jquery.js + application/javascript + +---- +Markdown generated from [src/README_js.md](src/README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/build/node_modules/mime/cli.js b/build/node_modules/mime/cli.js index 20b1ffeb..ab70a49c 100755 --- a/build/node_modules/mime/cli.js +++ b/build/node_modules/mime/cli.js @@ -1,8 +1,46 @@ #!/usr/bin/env node -var mime = require('./mime.js'); -var file = process.argv[2]; -var type = mime.lookup(file); +'use strict'; + +process.title = 'mime'; +let mime = require('.'); +let pkg = require('./package.json'); +let args = process.argv.splice(2); + +if (args.includes('--version') || args.includes('-v') || args.includes('--v')) { + console.log(pkg.version); + process.exit(0); +} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) { + console.log(pkg.name); + process.exit(0); +} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) { + console.log(pkg.name + ' - ' + pkg.description + '\n'); + console.log(`Usage: + + mime [flags] [path_or_extension] + + Flags: + --help, -h Show this message + --version, -v Display the version + --name, -n Print the name of the program + + Note: the command will exit after it executes if a command is specified + The path_or_extension is the path to the file or the extension of the file. + + Examples: + mime --help + mime --version + mime --name + mime -v + mime src/log.js + mime new.py + mime foo.sh + `); + process.exit(0); +} + +let file = args[0]; +let type = mime.getType(file); process.stdout.write(type + '\n'); diff --git a/build/node_modules/mime/index.js b/build/node_modules/mime/index.js new file mode 100644 index 00000000..fadcf8d6 --- /dev/null +++ b/build/node_modules/mime/index.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard'), require('./types/other')); diff --git a/build/node_modules/mime/lite.js b/build/node_modules/mime/lite.js new file mode 100644 index 00000000..835cffb3 --- /dev/null +++ b/build/node_modules/mime/lite.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard')); diff --git a/build/node_modules/mime/mime.js b/build/node_modules/mime/mime.js deleted file mode 100644 index d7efbde7..00000000 --- a/build/node_modules/mime/mime.js +++ /dev/null @@ -1,108 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts[i]]) { - console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts[i]] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Define built-in types -mime.define(require('./types.json')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/build/node_modules/mime/package.json b/build/node_modules/mime/package.json index 1d820197..e7ec9fd3 100644 --- a/build/node_modules/mime/package.json +++ b/build/node_modules/mime/package.json @@ -1,26 +1,26 @@ { - "_from": "mime@^1.4.1", - "_id": "mime@1.6.0", + "_from": "mime@^2.5.0", + "_id": "mime@2.6.0", "_inBundle": false, - "_integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "_integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "_location": "/mime", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "mime@^1.4.1", + "raw": "mime@^2.5.0", "name": "mime", "escapedName": "mime", - "rawSpec": "^1.4.1", + "rawSpec": "^2.5.0", "saveSpec": null, - "fetchSpec": "^1.4.1" + "fetchSpec": "^2.5.0" }, "_requiredBy": [ "/superagent" ], - "_resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "_shasum": "32cd9e5c64553bd58d19a568af452acff04981b1", - "_spec": "mime@^1.4.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime/-/mime-2.6.0.tgz", + "_shasum": "a2a682a95cd4d0cb1d6257e28f83da7e35800367", + "_spec": "mime@^2.5.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "author": { "name": "Robert Kieffer", @@ -31,43 +31,51 @@ "mime": "cli.js" }, "bugs": { - "url": "https://github.com/broofa/node-mime/issues" + "url": "https://github.com/broofa/mime/issues" }, "bundleDependencies": false, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], + "contributors": [], "dependencies": {}, "deprecated": false, "description": "A comprehensive library for mime-type mapping", "devDependencies": { - "github-release-notes": "0.13.1", - "mime-db": "1.31.0", - "mime-score": "1.1.0" + "benchmark": "*", + "chalk": "4.1.2", + "eslint": "8.1.0", + "mime-db": "1.50.0", + "mime-score": "1.2.0", + "mime-types": "2.1.33", + "mocha": "9.1.3", + "runmd": "*", + "standard-version": "9.3.2" }, "engines": { - "node": ">=4" + "node": ">=4.0.0" }, - "homepage": "https://github.com/broofa/node-mime#readme", + "files": [ + "index.js", + "lite.js", + "Mime.js", + "cli.js", + "/types" + ], + "homepage": "https://github.com/broofa/mime#readme", "keywords": [ "util", "mime" ], "license": "MIT", - "main": "mime.js", "name": "mime", "repository": { - "url": "git+https://github.com/broofa/node-mime.git", + "url": "git+https://github.com/broofa/mime.git", "type": "git" }, "scripts": { - "changelog": "gren changelog --tags=all --generate --override", - "prepare": "node src/build.js", - "test": "node src/test.js" + "benchmark": "node src/benchmark.js", + "md": "runmd --watch --output README.md src/README_js.md", + "prepare": "node src/build.js && runmd --output README.md src/README_js.md", + "release": "standard-version", + "test": "mocha src/test.js" }, - "version": "1.6.0" + "version": "2.6.0" } diff --git a/build/node_modules/mime/src/build.js b/build/node_modules/mime/src/build.js deleted file mode 100755 index 4928e48b..00000000 --- a/build/node_modules/mime/src/build.js +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const mimeScore = require('mime-score'); - -let db = require('mime-db'); -let chalk = require('chalk'); - -const STANDARD_FACET_SCORE = 900; - -const byExtension = {}; - -// Clear out any conflict extensions in mime-db -for (let type in db) { - let entry = db[type]; - entry.type = type; - - if (!entry.extensions) continue; - - entry.extensions.forEach(ext => { - if (ext in byExtension) { - const e0 = entry; - const e1 = byExtension[ext]; - e0.pri = mimeScore(e0.type, e0.source); - e1.pri = mimeScore(e1.type, e1.source); - - let drop = e0.pri < e1.pri ? e0 : e1; - let keep = e0.pri >= e1.pri ? e0 : e1; - drop.extensions = drop.extensions.filter(e => e !== ext); - - console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`); - } - byExtension[ext] = entry; - }); -} - -function writeTypesFile(types, path) { - fs.writeFileSync(path, JSON.stringify(types)); -} - -// Segregate into standard and non-standard types based on facet per -// https://tools.ietf.org/html/rfc6838#section-3.1 -const types = {}; - -Object.keys(db).sort().forEach(k => { - const entry = db[k]; - types[entry.type] = entry.extensions; -}); - -writeTypesFile(types, path.join(__dirname, '..', 'types.json')); diff --git a/build/node_modules/mime/src/test.js b/build/node_modules/mime/src/test.js deleted file mode 100644 index 42958a20..00000000 --- a/build/node_modules/mime/src/test.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('../mime'); -var assert = require('assert'); -var path = require('path'); - -// -// Test mime lookups -// - -assert.equal('text/plain', mime.lookup('text.txt')); // normal file -assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase -assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file -assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file -assert.equal('text/plain', mime.lookup('.txt')); // nameless -assert.equal('text/plain', mime.lookup('txt')); // extension-only -assert.equal('text/plain', mime.lookup('/txt')); // extension-less () -assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less -assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized -assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -assert.equal('txt', mime.extension(mime.types.text)); -assert.equal('html', mime.extension(mime.types.htm)); -assert.equal('bin', mime.extension('application/octet-stream')); -assert.equal('bin', mime.extension('application/octet-stream ')); -assert.equal('html', mime.extension(' text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); -assert.equal('html', mime.extension('text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html ; charset=UTF-8')); -assert.equal('html', mime.extension('text/html;charset=UTF-8')); -assert.equal('html', mime.extension('text/Html;charset=UTF-8')); -assert.equal(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -assert.equal('font/woff', mime.lookup('file.woff')); -assert.equal('application/octet-stream', mime.lookup('file.buffer')); -// TODO: Uncomment once #157 is resolved -// assert.equal('audio/mp4', mime.lookup('file.m4a')); -assert.equal('font/otf', mime.lookup('file.otf')); - -// -// Test charsets -// - -assert.equal('UTF-8', mime.charsets.lookup('text/plain')); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.js)); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.json)); -assert.equal(undefined, mime.charsets.lookup(mime.types.bin)); -assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -console.log('\nAll tests passed'); diff --git a/build/node_modules/mime/types.json b/build/node_modules/mime/types.json deleted file mode 100644 index bec78abd..00000000 --- a/build/node_modules/mime/types.json +++ /dev/null @@ -1 +0,0 @@ -{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":[],"application/font-woff2":[],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":[],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":[],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":[],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":[],"application/x-msdownload":["com","bat"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":[],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":[],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":[],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":[],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":[],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":[],"audio/x-wav":[],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":[],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":[],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":[],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":[],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":[],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} \ No newline at end of file diff --git a/build/node_modules/mime/types/other.js b/build/node_modules/mime/types/other.js new file mode 100644 index 00000000..bb6a0353 --- /dev/null +++ b/build/node_modules/mime/types/other.js @@ -0,0 +1 @@ +module.exports = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}; \ No newline at end of file diff --git a/build/node_modules/mime/types/standard.js b/build/node_modules/mime/types/standard.js new file mode 100644 index 00000000..5ee9937e --- /dev/null +++ b/build/node_modules/mime/types/standard.js @@ -0,0 +1 @@ +module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]}; \ No newline at end of file diff --git a/build/node_modules/minimalistic-assert/package.json b/build/node_modules/minimalistic-assert/package.json index 78af3d55..86734fcf 100644 --- a/build/node_modules/minimalistic-assert/package.json +++ b/build/node_modules/minimalistic-assert/package.json @@ -22,7 +22,7 @@ "/hash.js", "/hmac-drbg" ], - "_resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "_shasum": "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7", "_spec": "minimalistic-assert@^1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/des.js", diff --git a/build/node_modules/minimalistic-crypto-utils/package.json b/build/node_modules/minimalistic-crypto-utils/package.json index 4946ce07..b044d3c2 100644 --- a/build/node_modules/minimalistic-crypto-utils/package.json +++ b/build/node_modules/minimalistic-crypto-utils/package.json @@ -19,7 +19,7 @@ "/elliptic", "/hmac-drbg" ], - "_resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "_shasum": "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a", "_spec": "minimalistic-crypto-utils@^1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/elliptic", diff --git a/build/node_modules/minimatch/.npmignore b/build/node_modules/minimatch/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/build/node_modules/minimatch/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/build/node_modules/minimatch/LICENSE b/build/node_modules/minimatch/LICENSE index 05a40109..19129e31 100644 --- a/build/node_modules/minimatch/LICENSE +++ b/build/node_modules/minimatch/LICENSE @@ -1,23 +1,15 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. +The ISC License -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Copyright (c) Isaac Z. Schlueter and Contributors -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -THE SOFTWARE IS PROVIDED "AS IS", 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. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/minimatch/README.md b/build/node_modules/minimatch/README.md index 978268e2..33ede1d6 100644 --- a/build/node_modules/minimatch/README.md +++ b/build/node_modules/minimatch/README.md @@ -2,13 +2,11 @@ A minimal matching utility. -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) +[![Build Status](https://travis-ci.org/isaacs/minimatch.svg?branch=master)](http://travis-ci.org/isaacs/minimatch) This is the matching library used internally by npm. -Eventually, it will replace the C binding in node-glob. - It works by converting glob expressions into JavaScript `RegExp` objects. @@ -39,7 +37,7 @@ See: ## Minimatch Class -Create a minimatch object by instanting the `minimatch.Minimatch` class. +Create a minimatch object by instantiating the `minimatch.Minimatch` class. ```javascript var Minimatch = require("minimatch").Minimatch @@ -84,13 +82,6 @@ var mm = new Minimatch(pattern, options) All other methods are internal, and will be called as necessary. -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - ### minimatch(path, pattern, options) Main export. Tests a path against the pattern using the options. @@ -157,8 +148,8 @@ Perform a case-insensitive match. ### nonull When a match is not found by `minimatch.match`, return a list containing -the pattern itself. When set, an empty list is returned if there are -no matches. +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. ### matchBase @@ -180,6 +171,27 @@ Suppress the behavior of treating a leading `!` character as negation. Returns from negate expressions the same as if they were not negated. (Ie, true on a hit, false on a miss.) +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### allowWindowsEscape + +Windows path separator `\` is by default converted to `/`, which +prohibits the usage of `\` as a escape character. This flag skips that +behavior and allows using the escape character. ## Comparisons to other fnmatch/glob implementations diff --git a/build/node_modules/minimatch/minimatch.js b/build/node_modules/minimatch/minimatch.js index c633f89f..fda45ade 100644 --- a/build/node_modules/minimatch/minimatch.js +++ b/build/node_modules/minimatch/minimatch.js @@ -1,65 +1,44 @@ -;(function (require, exports, module, platform) { - -if (module) module.exports = minimatch -else exports.minimatch = minimatch +module.exports = minimatch +minimatch.Minimatch = Minimatch -if (!require) { - require = function (id) { - switch (id) { - case "sigmund": return function sigmund (obj) { - return JSON.stringify(obj) - } - case "path": return { basename: function (f) { - f = f.split(/[\/\\]/) - var e = f.pop() - if (!e) e = f.pop() - return e - }} - case "lru-cache": return function LRUCache () { - // not quite an LRU, but still space-limited. - var cache = {} - var cnt = 0 - this.set = function (k, v) { - cnt ++ - if (cnt >= 100) cache = {} - cache[k] = v - } - this.get = function (k) { return cache[k] } - } - } - } +var path = (function () { try { return require('path') } catch (e) {}}()) || { + sep: '/' } +minimatch.sep = path.sep -minimatch.Minimatch = Minimatch +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU({max: 100}) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - , sigmund = require("sigmund") +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' - // * => any number of characters - , star = qmark + "*?" +// * => any number of characters +var star = qmark + '*?' - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') // "abc" -> { a:true, b:true, c:true } function charSet (s) { - return s.split("").reduce(function (set, c) { + return s.split('').reduce(function (set, c) { set[c] = true return set }, {}) @@ -77,84 +56,91 @@ function filter (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] }) + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) return t } minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return minimatch + } var orig = minimatch var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) + return orig(p, pattern, ext(def, options)) } m.Minimatch = function Minimatch (pattern, options) { return new orig.Minimatch(pattern, ext(def, options)) } + m.Minimatch.defaults = function defaults (options) { + return orig.defaults(ext(def, options)).Minimatch + } + + m.filter = function filter (pattern, options) { + return orig.filter(pattern, ext(def, options)) + } + + m.defaults = function defaults (options) { + return orig.defaults(ext(def, options)) + } + + m.makeRe = function makeRe (pattern, options) { + return orig.makeRe(pattern, ext(def, options)) + } + + m.braceExpand = function braceExpand (pattern, options) { + return orig.braceExpand(pattern, ext(def, options)) + } + + m.match = function (list, pattern, options) { + return orig.match(list, pattern, ext(def, options)) + } return m } Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch return minimatch.defaults(def).Minimatch } - function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } + assertValidPattern(pattern) if (!options) options = {} // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { + if (!options.nocomment && pattern.charAt(0) === '#') { return false } - // "" only matches "" - if (pattern.trim() === "") return p === "" - return new Minimatch(pattern, options).match(p) } function Minimatch (pattern, options) { if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) + return new Minimatch(pattern, options) } - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } + assertValidPattern(pattern) if (!options) options = {} + pattern = pattern.trim() - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - pattern = pattern.split("\\").join("/") + // windows support: need to use /, not \ + if (!options.allowWindowsEscape && path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') } - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + sigmund(options) - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) - this.options = options this.set = [] this.pattern = pattern @@ -162,23 +148,21 @@ function Minimatch (pattern, options) { this.negate = false this.comment = false this.empty = false + this.partial = !!options.partial // make the set of regexps etc. this.make() } -Minimatch.prototype.debug = function() {} +Minimatch.prototype.debug = function () {} Minimatch.prototype.make = make function make () { - // don't do it more than once. - if (this._made) return - var pattern = this.pattern var options = this.options // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { + if (!options.nocomment && pattern.charAt(0) === '#') { this.comment = true return } @@ -193,7 +177,7 @@ function make () { // step 2: expand braces var set = this.globSet = this.braceExpand() - if (options.debug) this.debug = console.error + if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) } this.debug(this.pattern, set) @@ -217,7 +201,7 @@ function make () { // filter out everything that didn't compile properly. set = set.filter(function (s) { - return -1 === s.indexOf(false) + return s.indexOf(false) === -1 }) this.debug(this.pattern, set) @@ -228,17 +212,17 @@ function make () { Minimatch.prototype.parseNegate = parseNegate function parseNegate () { var pattern = this.pattern - , negate = false - , options = this.options - , negateOffset = 0 + 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 ++) { + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { negate = !negate - negateOffset ++ + negateOffset++ } if (negateOffset) this.pattern = pattern.substr(negateOffset) @@ -256,201 +240,44 @@ function parseNegate () { // a{2..}b -> a{2..}b // a{b}c -> a{b}c minimatch.braceExpand = function (pattern, options) { - return new Minimatch(pattern, options).braceExpand() + return braceExpand(pattern, options) } Minimatch.prototype.braceExpand = braceExpand -function braceExpand (pattern, options) { - options = options || this.options - pattern = typeof pattern === "undefined" - ? this.pattern : pattern - - if (typeof pattern === "undefined") { - throw new Error("undefined pattern") - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - var escaping = false - // examples and comments refer to this crazy pattern: - // a{b,c{d,e},{f,g}h}x{y,z} - // expected: - // abxy - // abxz - // acdxy - // acdxz - // acexy - // acexz - // afhxy - // afhxz - // aghxy - // aghxz - - // everything before the first \{ is just a prefix. - // So, we pluck that off, and work with the rest, - // and then prepend it to everything we find. - if (pattern.charAt(0) !== "{") { - this.debug(pattern) - var prefix = null - for (var i = 0, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug(i, c) - if (c === "\\") { - escaping = !escaping - } else if (c === "{" && !escaping) { - prefix = pattern.substr(0, i) - break - } - } - - // actually no sets, all { were escaped. - if (prefix === null) { - this.debug("no sets") - return [pattern] - } - - var tail = braceExpand.call(this, pattern.substr(i), options) - return tail.map(function (t) { - return prefix + t - }) - } - - // now we have something like: - // {b,c{d,e},{f,g}h}x{y,z} - // walk through the set, expanding each part, until - // the set ends. then, we'll expand the suffix. - // If the set only has a single member, then'll put the {} back - - // first, handle numeric sets, since they're easier - var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) - if (numset) { - this.debug("numset", numset[1], numset[2]) - var suf = braceExpand.call(this, pattern.substr(numset[0].length), options) - , start = +numset[1] - , end = +numset[2] - , inc = start > end ? -1 : 1 - , set = [] - for (var i = start; i != (end + inc); i += inc) { - // append all the suffixes - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - set.push(i + suf[ii]) - } +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} } - return set } - // ok, walk through the set - // We hope, somewhat optimistically, that there - // will be a } at the end. - // If the closing brace isn't found, then the pattern is - // interpreted as braceExpand("\\" + pattern) so that - // the leading \{ will be interpreted literally. - var i = 1 // skip the \{ - , depth = 1 - , set = [] - , member = "" - , sawEnd = false - , escaping = false - - function addMember () { - set.push(member) - member = "" - } - - this.debug("Entering for") - FOR: for (i = 1, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - this.debug("", i, c) - - if (escaping) { - escaping = false - member += "\\" + c - } else { - switch (c) { - case "\\": - escaping = true - continue - - case "{": - depth ++ - member += "{" - continue - - case "}": - depth -- - // if this closes the actual set, then we're done - if (depth === 0) { - addMember() - // pluck off the close-brace - i ++ - break FOR - } else { - member += c - continue - } - - case ",": - if (depth === 1) { - addMember() - } else { - member += c - } - continue + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern - default: - member += c - continue - } // switch - } // else - } // for + assertValidPattern(pattern) - // now we've either finished the set, and the suffix is - // pattern.substr(i), or we have *not* closed the set, - // and need to escape the leading brace - if (depth !== 0) { - this.debug("didn't close", pattern) - return braceExpand.call(this, "\\" + pattern, options) + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern] } - // x{y,z} -> ["xy", "xz"] - this.debug("set", set) - this.debug("suffix", pattern.substr(i)) - var suf = braceExpand.call(this, pattern.substr(i), options) - // ["b", "c{d,e}","{f,g}h"] -> - // [["b"], ["cd", "ce"], ["fh", "gh"]] - var addBraces = set.length === 1 - this.debug("set pre-expanded", set) - set = set.map(function (p) { - return braceExpand.call(this, p, options) - }, this) - this.debug("set expanded", set) - - - // [["b"], ["cd", "ce"], ["fh", "gh"]] -> - // ["b", "cd", "ce", "fh", "gh"] - set = set.reduce(function (l, r) { - return l.concat(r) - }) + return expand(pattern) +} - if (addBraces) { - set = set.map(function (s) { - return "{" + s + "}" - }) +var MAX_PATTERN_LENGTH = 1024 * 64 +var assertValidPattern = function (pattern) { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern') } - // now attach the suffixes. - var ret = [] - for (var i = 0, l = set.length; i < l; i ++) { - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - ret.push(set[i] + suf[ii]) - } + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long') } - return ret } // parse a component of the expanded set. @@ -467,90 +294,98 @@ function braceExpand (pattern, options) { Minimatch.prototype.parse = parse var SUBPARSE = {} function parse (pattern, isSub) { + assertValidPattern(pattern) + var options = this.options // shortcuts - if (!options.noglobstar && pattern === "**") return GLOBSTAR - if (pattern === "") return "" - - var re = "" - , hasMagic = !!options.nocase - , escaping = false - // ? => one single character - , patternListStack = [] - , plType - , stateChar - , inClass = false - , reClassStart = -1 - , classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - , patternStart = pattern.charAt(0) === "." ? "" // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" - : "(?!\\.)" - , self = this + if (pattern === '**') { + if (!options.noglobstar) + return GLOBSTAR + else + pattern = '*' + } + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this function clearStateChar () { if (stateChar) { // we had some state-tracking character // that wasn't consumed by this pass. switch (stateChar) { - case "*": + case '*': re += star hasMagic = true - break - case "?": + break + case '?': re += qmark hasMagic = true - break + break default: - re += "\\"+stateChar - break + 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) + 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. if (escaping && reSpecials[c]) { - re += "\\" + c + re += '\\' + c escaping = false continue } - SWITCH: switch (c) { - case "/": + switch (c) { + /* istanbul ignore next */ + case '/': { // completely not allowed, even escaped. // Should already be path-split by now. return false + } - case "\\": + case '\\': clearStateChar() escaping = true - continue + continue // the various stateChar values // for the "extglob" stuff. - case "?": - case "*": - case "+": - case "@": - case "!": - this.debug("%s\t%s %s %j <-- stateChar", pattern, i, re, c) + case '?': + 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 // the glob [!a] means [^a] in regexp if (inClass) { this.debug(' in class') - if (c === "!" && i === classStart + 1) c = "^" + if (c === '!' && i === classStart + 1) c = '^' re += c continue } @@ -565,70 +400,68 @@ function parse (pattern, isSub) { // just clear the statechar *now*, rather than even diving into // the patternList stuff. if (options.noext) clearStateChar() - continue + continue - case "(": + case '(': if (inClass) { - re += "(" + re += '(' continue } if (!stateChar) { - re += "\\(" + re += '\\(' continue } - plType = stateChar - patternListStack.push({ type: plType - , start: i - 1 - , reStart: re.length }) + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) // negation is (?:(?!js)[^/]*) - re += stateChar === "!" ? "(?:(?!" : "(?:" + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' this.debug('plType %j %j', stateChar, re) stateChar = false - continue + continue - case ")": + case ')': if (inClass || !patternListStack.length) { - re += "\\)" + re += '\\)' continue } clearStateChar() hasMagic = true - re += ")" - plType = patternListStack.pop().type + var pl = patternListStack.pop() // negation is (?:(?!js)[^/]*) // The others are (?:) - switch (plType) { - case "!": - re += "[^/]*?)" - break - case "?": - case "+": - case "*": re += plType - case "@": break // the default anyway + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) } - continue + pl.reEnd = re.length + continue - case "|": + case '|': if (inClass || !patternListStack.length || escaping) { - re += "\\|" + re += '\\|' escaping = false continue } clearStateChar() - re += "|" - continue + re += '|' + continue // these are mostly the same in regexp and glob - case "[": + case '[': // swallow any state-tracking char before the [ clearStateChar() if (inClass) { - re += "\\" + c + re += '\\' + c continue } @@ -636,24 +469,45 @@ function parse (pattern, isSub) { classStart = i reClassStart = re.length re += c - continue + continue - case "]": + case ']': // a right bracket shall lose its special // meaning and represent itself in // a bracket expression if it occurs // first in the list. -- POSIX.2 2.8.3.2 if (i === classStart + 1 || !inClass) { - re += "\\" + c + re += '\\' + c escaping = false continue } + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + // finish up the class. hasMagic = true inClass = false re += c - continue + continue default: // swallow any state char that wasn't consumed @@ -663,8 +517,8 @@ function parse (pattern, isSub) { // no need escaping = false } else if (reSpecials[c] - && !(c === "^" && inClass)) { - re += "\\" + && !(c === '^' && inClass)) { + re += '\\' } re += c @@ -672,7 +526,6 @@ function parse (pattern, isSub) { } // switch } // for - // handle the case where we left a class open. // "[abc" is valid, equivalent to "\[abc" if (inClass) { @@ -680,9 +533,9 @@ function parse (pattern, isSub) { // this is a huge pita. We now have to re-walk // the contents of the would-be class to re-translate // any characters that were passed through as-is - var cs = pattern.substr(classStart + 1) - , sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + "\\[" + sp[0] + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] hasMagic = hasMagic || sp[1] } @@ -692,14 +545,14 @@ function parse (pattern, isSub) { // and escape any | chars that were passed through as-is for the regexp. // Go through and escape them, taking care not to double-escape any // | chars that were already escaped. - var pl - while (pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) + for (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 | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { if (!$2) { // the | isn't already escaped, so escape it. - $2 = "\\" + $2 = '\\' } // need to escape all those slashes *again*, without escaping the @@ -708,46 +561,79 @@ function parse (pattern, isSub) { // it exactly after itself. That's why this trick works. // // I am sorry that you have to see this. - return $1 + $1 + $2 + "|" + return $1 + $1 + $2 + '|' }) - this.debug("tail=%j\n %s", tail, tail) - var t = pl.type === "*" ? star - : pl.type === "?" ? qmark - : "\\" + pl.type + 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 + re = re.slice(0, pl.reStart) + t + '\\(' + tail } // handle trailing things that only matter at the very end. clearStateChar() if (escaping) { // trailing \\ - re += "\\\\" + re += '\\\\' } // only need to apply the nodot start if the re starts with // something that could conceivably capture a dot var addPatternStart = false switch (re.charAt(0)) { - case ".": - case "[": - case "(": addPatternStart = true + case '[': case '.': case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (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 + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var 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 // it doesn't match against an empty path part. // Otherwise a/* will match a/, which it should not. - if (re !== "" && hasMagic) re = "(?=.)" + re + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } - if (addPatternStart) re = patternStart + re + if (addPatternStart) { + re = patternStart + re + } // parsing just a piece of a larger pattern. if (isSub === SUBPARSE) { - return [ re, hasMagic ] + return [re, hasMagic] } // skip the regexp for non-magical patterns @@ -757,8 +643,16 @@ function parse (pattern, isSub) { return globUnescape(pattern) } - var flags = options.nocase ? "i" : "" - , regExp = new RegExp("^" + re + "$", flags) + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) /* istanbul ignore next - should be impossible */ { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } regExp._glob = pattern regExp._src = re @@ -782,68 +676,72 @@ function makeRe () { // when you just want to work with a regex. var set = this.set - if (!set.length) return this.regexp = false + if (!set.length) { + this.regexp = false + return this.regexp + } var options = this.options var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - , flags = options.nocase ? "i" : "" + : 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("|") + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') // must match entire pattern // ending in a * or ** will make it less strict. - re = "^(?:" + re + ")$" + re = '^(?:' + re + ')$' // can match anything, as long as it's not this. - if (this.negate) re = "^(?!" + re + ").*$" + if (this.negate) re = '^(?!' + re + ').*$' try { - return this.regexp = new RegExp(re, flags) - } catch (ex) { - return this.regexp = false + this.regexp = new RegExp(re, flags) + } catch (ex) /* istanbul ignore next - should be impossible */ { + this.regexp = false } + return this.regexp } minimatch.match = function (list, pattern, options) { + options = options || {} var mm = new Minimatch(pattern, options) list = list.filter(function (f) { return mm.match(f) }) - if (options.nonull && !list.length) { + 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) +Minimatch.prototype.match = function match (f, partial) { + if (typeof partial === 'undefined') partial = this.partial + this.debug('match', f, this.pattern) // short-circuit in the case of busted things. // comments, etc. if (this.comment) return false - if (this.empty) return f === "" + if (this.empty) return f === '' - if (f === "/" && partial) return true + if (f === '/' && partial) return true var options = this.options // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (platform === "win32") { - f = f.split("\\").join("/") + if (path.sep !== '/') { + f = f.split(path.sep).join('/') } // treat the test path as a set of pathparts. f = f.split(slashSplit) - this.debug(this.pattern, "split", f) + this.debug(this.pattern, 'split', f) // just ONE of the pattern sets in this.set needs to match // in order for it to be valid. If negating, then just one @@ -851,14 +749,21 @@ function match (f, partial) { // Either way, return on the first hit. var set = this.set - this.debug(this.pattern, "set", set) + this.debug(this.pattern, 'set', set) - var splitFile = path.basename(f.join("/")).split("/") + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } - for (var i = 0, l = set.length; i < l; i ++) { - var pattern = set[i], file = f + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f if (options.matchBase && pattern.length === 1) { - file = splitFile + file = [filename] } var hit = this.matchOne(file, pattern, partial) if (hit) { @@ -881,28 +786,26 @@ function match (f, partial) { Minimatch.prototype.matchOne = function (file, pattern, partial) { var options = this.options - this.debug("matchOne", - { "this": this - , file: file - , pattern: pattern }) + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) - this.debug("matchOne", file.length, pattern.length) + this.debug('matchOne', file.length, pattern.length) - for ( var fi = 0 - , pi = 0 - , fl = file.length - , pl = pattern.length + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length ; (fi < fl) && (pi < pl) - ; fi ++, pi ++ ) { - - this.debug("matchOne loop") + ; fi++, pi++) { + this.debug('matchOne loop') var p = pattern[pi] - , f = file[fi] + var f = file[fi] this.debug(pattern, p, f) // should be impossible. // some invalid regexp stuff in the set. + /* istanbul ignore if */ if (p === false) return false if (p === GLOBSTAR) { @@ -931,7 +834,7 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { // - matchOne(z/c, c) -> no // - matchOne(c, c) yes, hit var fr = fi - , pr = pi + 1 + var pr = pi + 1 if (pr === pl) { this.debug('** at the end') // a ** at the end will just swallow the rest. @@ -940,19 +843,18 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { // options.dot is set. // . and .. are *never* matched by **, for explosively // exponential reasons. - for ( ; fi < fl; fi ++) { - if (file[fi] === "." || file[fi] === ".." || - (!options.dot && file[fi].charAt(0) === ".")) return false + for (; 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. - WHILE: while (fr < fl) { + while (fr < fl) { var swallowee = file[fr] - this.debug('\nglobstar while', - file, fr, pattern, pr, swallowee) + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) // XXX remove this slice. Just pass the start index. if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { @@ -962,23 +864,25 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { } else { // can't swallow "." or ".." ever. // can only swallow ".foo" when explicitly asked. - if (swallowee === "." || swallowee === ".." || - (!options.dot && swallowee.charAt(0) === ".")) { - this.debug("dot detected!", file, fr, pattern, pr) - break WHILE + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break } // ** swallows a segment, and continue. this.debug('globstar swallow a segment, and continue') - fr ++ + fr++ } } + // no match was found. // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then + // If there's more *pattern* left, then + /* istanbul ignore if */ if (partial) { // ran out of file - this.debug("\n>>> no match, partial?", file, fr, pattern, pr) + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) if (fr === fl) return true } return false @@ -988,16 +892,12 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { // non-magic patterns just have to match exactly // patterns with magic have been turned into regexps. var hit - if (typeof p === "string") { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug("string match", p, f, hit) + if (typeof p === 'string') { + hit = f === p + this.debug('string match', p, f, hit) } else { hit = f.match(p) - this.debug("pattern match", p, f, hit) + this.debug('pattern match', p, f, hit) } if (!hit) return false @@ -1024,32 +924,24 @@ Minimatch.prototype.matchOne = function (file, pattern, partial) { // this is ok if we're doing the match as part of // a glob fs traversal. return partial - } else if (pi === pl) { + } else /* istanbul ignore else */ if (pi === pl) { // ran out of pattern, still have file left. // this is only acceptable if we're on the very last // empty segment of a file with a trailing slash. // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") - return emptyFileEnd + return (fi === fl - 1) && (file[fi] === '') } // should be unreachable. - throw new Error("wtf?") + /* istanbul ignore next */ + throw new Error('wtf?') } - // replace stuff like \* with * function globUnescape (s) { - return s.replace(/\\(.)/g, "$1") + return s.replace(/\\(.)/g, '$1') } - function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') } - -})( typeof require === "function" ? require : null, - this, - typeof module === "object" ? module : null, - typeof process === "object" ? process.platform : "win32" - ) diff --git a/build/node_modules/minimatch/package.json b/build/node_modules/minimatch/package.json index dfa95161..508a25e2 100644 --- a/build/node_modules/minimatch/package.json +++ b/build/node_modules/minimatch/package.json @@ -1,26 +1,26 @@ { - "_from": "minimatch@~0.2.11", - "_id": "minimatch@0.2.14", + "_from": "minimatch@^3.0.4", + "_id": "minimatch@3.1.2", "_inBundle": false, - "_integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "_integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "_location": "/minimatch", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "minimatch@~0.2.11", + "raw": "minimatch@^3.0.4", "name": "minimatch", "escapedName": "minimatch", - "rawSpec": "~0.2.11", + "rawSpec": "^3.0.4", "saveSpec": null, - "fetchSpec": "~0.2.11" + "fetchSpec": "^3.0.4" }, "_requiredBy": [ "/glob" ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "_shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a", - "_spec": "minimatch@~0.2.11", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimatch/-/minimatch-3.1.2.tgz", + "_shasum": "19cd194bfd3e428f049a70817c038d89ab4be35b", + "_spec": "minimatch@^3.0.4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/glob", "author": { "name": "Isaac Z. Schlueter", @@ -32,30 +32,35 @@ }, "bundleDependencies": false, "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "brace-expansion": "^1.1.7" }, - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "deprecated": false, "description": "a glob matcher in javascript", "devDependencies": { - "tap": "" + "tap": "^15.1.6" }, "engines": { "node": "*" }, + "files": [ + "minimatch.js" + ], "homepage": "https://github.com/isaacs/minimatch#readme", - "license": { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, + "license": "ISC", "main": "minimatch.js", "name": "minimatch", + "publishConfig": { + "tag": "v3-legacy" + }, "repository": { "type": "git", "url": "git://github.com/isaacs/minimatch.git" }, "scripts": { - "test": "tap test/*.js" + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap" }, - "version": "0.2.14" + "version": "3.1.2" } diff --git a/build/node_modules/minimatch/test/basic.js b/build/node_modules/minimatch/test/basic.js deleted file mode 100644 index ae7ac73c..00000000 --- a/build/node_modules/minimatch/test/basic.js +++ /dev/null @@ -1,399 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - - -var patterns = - [ "http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - // https://github.com/isaacs/minimatch/issues/5 - , function () { - files = [ 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' - , 'a/b/.x' - , 'a/b/.x/' - , 'a/.x/b' - , '.x' - , '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b/.x/c' - , '.x/.x' ] - } - , ["**/.x/**", [ '.x/' - , '.x/a' - , '.x/a/b' - , 'a/.x/b' - , 'a/b/.x/' - , 'a/b/.x/c' - , 'a/b/.x/c/d' - , 'a/b/.x/c/d/e' ] ] - - ] - -var regexps = - [ '/^(?:(?=.)a[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:(?=.)X[^/]*?)$/', - '/^(?:\\*)$/', - '/^(?:(?=.)\\*[^/]*?)$/', - '/^(?:\\*\\*)$/', - '/^(?:(?=.)b[^/]*?\\/)$/', - '/^(?:(?=.)c[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:\\.\\.\\/(?!\\.)(?=.)[^/]*?\\/)$/', - '/^(?:s\\/(?=.)\\.\\.[^/]*?\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/1\\/)$/', - '/^(?:\\/\\^root:\\/\\{s\\/(?=.)\\^[^:][^/]*?:[^:][^/]*?:\\([^:]\\)[^/]*?\\.[^/]*?\\$\\/\u0001\\/)$/', - '/^(?:(?!\\.)(?=.)[a-c]b[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[a-y][^/]*?[^c])$/', - '/^(?:(?=.)a[^/]*?[^c])$/', - '/^(?:(?=.)a[X-]b)$/', - '/^(?:(?!\\.)(?=.)[^a-c][^/]*?)$/', - '/^(?:a\\*b\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?=.)a\\*[^/]\\/(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\\\\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\![^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.\\*)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[b]c)$/', - '/^(?:(?=.)a[^/]c)$/', - '/^(?:a\\*c)$/', - 'false', - '/^(?:(?!\\.)(?=.)[^/]*?\\/(?=.)man[^/]*?\\/(?=.)bash\\.[^/]*?)$/', - '/^(?:man\\/man1\\/bash\\.1)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?=.)a[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/]k[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/][^/]*?[^/]*?cd[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?k[^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[-abc])$/', - '/^(?:(?!\\.)(?=.)[abc-])$/', - '/^(?:\\\\)$/', - '/^(?:(?!\\.)(?=.)[\\\\])$/', - '/^(?:(?!\\.)(?=.)[\\[])$/', - '/^(?:\\[)$/', - '/^(?:(?=.)\\[(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[\\]])$/', - '/^(?:(?!\\.)(?=.)[\\]-])$/', - '/^(?:(?!\\.)(?=.)[a-z])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/])$/', - '/^(?:(?!\\.)(?=.)[^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?c)$/', - '/^(?:(?!\\.)(?=.)[^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?c[^/]*?[^/][^/]*?[^/]*?)$/', - '/^(?:(?=.)a[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/][^/][^/][^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?[^/]*?)$/', - '/^(?:\\[\\])$/', - '/^(?:\\[abc)$/', - '/^(?:(?=.)XYZ)$/i', - '/^(?:(?=.)ab[^/]*?)$/i', - '/^(?:(?!\\.)(?=.)[ia][^/][ck])$/i', - '/^(?:\\/(?!\\.)(?=.)[^/]*?|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:\\/(?!\\.)(?=.)[^/]|(?!\\.)(?=.)[^/]*?)$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?)$/', - '/^(?:a\\/(?!(?:^|\\/)\\.{1,2}(?:$|\\/))(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:a\\/(?!\\.)(?=.)[^/]*?\\/b)$/', - '/^(?:a\\/(?=.)\\.[^/]*?\\/b)$/', - '/^(?:(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\/b\\))$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?=.)\\[(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)\\[(?=.)#a[^/]*?)$/', - '/^(?:(?=.)\\+\\(a\\|[^/]*?\\|c\\\\\\\\\\|d\\\\\\\\\\|e\\\\\\\\\\\\\\\\\\|f\\\\\\\\\\\\\\\\\\|g)$/', - '/^(?:(?!\\.)(?=.)(?:a|b)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:a|(?!\\.)(?=.)[^/]*?\\(b\\|c|d\\))$/', - '/^(?:a|(?!\\.)(?=.)(?:b|c)*|(?!\\.)(?=.)(?:b|d)*)$/', - '/^(?:(?!\\.)(?=.)(?:a|b|c)*|(?!\\.)(?=.)(?:a|c)*)$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\(a\\|b\\|c\\)|(?!\\.)(?=.)[^/]*?\\(a\\|c\\))$/', - '/^(?:(?=.)a[^/]b)$/', - '/^(?:(?=.)#[^/]*?)$/', - '/^(?!^(?:(?=.)a[^/]*?)$).*$/', - '/^(?:(?=.)\\!a[^/]*?)$/', - '/^(?:(?=.)a[^/]*?)$/', - '/^(?!^(?:(?=.)\\!a[^/]*?)$).*$/', - '/^(?:(?!\\.)(?=.)[^/]*?\\.(?:(?!js)[^/]*?))$/', - '/^(?:(?:(?!(?:\\/|^)\\.).)*?\\/\\.x\\/(?:(?!(?:\\/|^)\\.).)*?)$/' ] -var re = 0; - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - patterns.forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var m = new mm.Minimatch(pattern, options) - var r = m.makeRe() - var expectRe = regexps[re++] - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - - t.equal(tapOpts.re, expectRe, tapOpts) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/build/node_modules/minimatch/test/brace-expand.js b/build/node_modules/minimatch/test/brace-expand.js deleted file mode 100644 index 7ee278a2..00000000 --- a/build/node_modules/minimatch/test/brace-expand.js +++ /dev/null @@ -1,33 +0,0 @@ -var tap = require("tap") - , minimatch = require("../") - -tap.test("brace expansion", function (t) { - // [ pattern, [expanded] ] - ; [ [ "a{b,c{d,e},{f,g}h}x{y,z}" - , [ "abxy" - , "abxz" - , "acdxy" - , "acdxz" - , "acexy" - , "acexz" - , "afhxy" - , "afhxz" - , "aghxy" - , "aghxz" ] ] - , [ "a{1..5}b" - , [ "a1b" - , "a2b" - , "a3b" - , "a4b" - , "a5b" ] ] - , [ "a{b}c", ["a{b}c"] ] - ].forEach(function (tc) { - var p = tc[0] - , expect = tc[1] - t.equivalent(minimatch.braceExpand(p), expect, p) - }) - console.error("ending") - t.end() -}) - - diff --git a/build/node_modules/minimatch/test/caching.js b/build/node_modules/minimatch/test/caching.js deleted file mode 100644 index 0fec4b0f..00000000 --- a/build/node_modules/minimatch/test/caching.js +++ /dev/null @@ -1,14 +0,0 @@ -var Minimatch = require("../minimatch.js").Minimatch -var tap = require("tap") -tap.test("cache test", function (t) { - var mm1 = new Minimatch("a?b") - var mm2 = new Minimatch("a?b") - t.equal(mm1, mm2, "should get the same object") - // the lru should drop it after 100 entries - for (var i = 0; i < 100; i ++) { - new Minimatch("a"+i) - } - mm2 = new Minimatch("a?b") - t.notEqual(mm1, mm2, "cache should have dropped") - t.end() -}) diff --git a/build/node_modules/minimatch/test/defaults.js b/build/node_modules/minimatch/test/defaults.js deleted file mode 100644 index 25f1f601..00000000 --- a/build/node_modules/minimatch/test/defaults.js +++ /dev/null @@ -1,274 +0,0 @@ -// http://www.bashcookbook.com/bashinfo/source/bash-1.14.7/tests/glob-test -// -// TODO: Some of these tests do very bad things with backslashes, and will -// most likely fail badly on windows. They should probably be skipped. - -var tap = require("tap") - , globalBefore = Object.keys(global) - , mm = require("../") - , files = [ "a", "b", "c", "d", "abc" - , "abd", "abe", "bb", "bcd" - , "ca", "cb", "dd", "de" - , "bdir/", "bdir/cfile"] - , next = files.concat([ "a-b", "aXb" - , ".x", ".y" ]) - -tap.test("basic tests", function (t) { - var start = Date.now() - - // [ pattern, [matches], MM opts, files, TAP opts] - ; [ "http://www.bashcookbook.com/bashinfo" + - "/source/bash-1.14.7/tests/glob-test" - , ["a*", ["a", "abc", "abd", "abe"]] - , ["X*", ["X*"], {nonull: true}] - - // allow null glob expansion - , ["X*", []] - - // isaacs: Slightly different than bash/sh/ksh - // \\* is not un-escaped to literal "*" in a failed match, - // but it does make it get treated as a literal star - , ["\\*", ["\\*"], {nonull: true}] - , ["\\**", ["\\**"], {nonull: true}] - , ["\\*\\*", ["\\*\\*"], {nonull: true}] - - , ["b*/", ["bdir/"]] - , ["c*", ["c", "ca", "cb"]] - , ["**", files] - - , ["\\.\\./*/", ["\\.\\./*/"], {nonull: true}] - , ["s/\\..*//", ["s/\\..*//"], {nonull: true}] - - , "legendary larry crashes bashes" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\\1/"], {nonull: true}] - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/" - , ["/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/"], {nonull: true}] - - , "character classes" - , ["[a-c]b*", ["abc", "abd", "abe", "bb", "cb"]] - , ["[a-y]*[^c]", ["abd", "abe", "bb", "bcd", - "bdir/", "ca", "cb", "dd", "de"]] - , ["a*[^c]", ["abd", "abe"]] - , function () { files.push("a-b", "aXb") } - , ["a[X-]b", ["a-b", "aXb"]] - , function () { files.push(".x", ".y") } - , ["[^a-c]*", ["d", "dd", "de"]] - , function () { files.push("a*b/", "a*b/ooo") } - , ["a\\*b/*", ["a*b/ooo"]] - , ["a\\*?/*", ["a*b/ooo"]] - , ["*\\\\!*", [], {null: true}, ["echo !7"]] - , ["*\\!*", ["echo !7"], null, ["echo !7"]] - , ["*.\\*", ["r.*"], null, ["r.*"]] - , ["a[b]c", ["abc"]] - , ["a[\\b]c", ["abc"]] - , ["a?c", ["abc"]] - , ["a\\*c", [], {null: true}, ["abc"]] - , ["", [""], { null: true }, [""]] - - , "http://www.opensource.apple.com/source/bash/bash-23/" + - "bash/tests/glob-test" - , function () { files.push("man/", "man/man1/", "man/man1/bash.1") } - , ["*/man*/bash.*", ["man/man1/bash.1"]] - , ["man/man1/bash.1", ["man/man1/bash.1"]] - , ["a***c", ["abc"], null, ["abc"]] - , ["a*****?c", ["abc"], null, ["abc"]] - , ["?*****??", ["abc"], null, ["abc"]] - , ["*****??", ["abc"], null, ["abc"]] - , ["?*****?c", ["abc"], null, ["abc"]] - , ["?***?****c", ["abc"], null, ["abc"]] - , ["?***?****?", ["abc"], null, ["abc"]] - , ["?***?****", ["abc"], null, ["abc"]] - , ["*******c", ["abc"], null, ["abc"]] - , ["*******?", ["abc"], null, ["abc"]] - , ["a*cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??k***", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a**?**cd**?**??***k**", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["a****c**?**??*****", ["abcdecdhjk"], null, ["abcdecdhjk"]] - , ["[-abc]", ["-"], null, ["-"]] - , ["[abc-]", ["-"], null, ["-"]] - , ["\\", ["\\"], null, ["\\"]] - , ["[\\\\]", ["\\"], null, ["\\"]] - , ["[[]", ["["], null, ["["]] - , ["[", ["["], null, ["["]] - , ["[*", ["[abc"], null, ["[abc"]] - , "a right bracket shall lose its special meaning and\n" + - "represent itself in a bracket expression if it occurs\n" + - "first in the list. -- POSIX.2 2.8.3.2" - , ["[]]", ["]"], null, ["]"]] - , ["[]-]", ["]"], null, ["]"]] - , ["[a-\z]", ["p"], null, ["p"]] - , ["??**********?****?", [], { null: true }, ["abc"]] - , ["??**********?****c", [], { null: true }, ["abc"]] - , ["?************c****?****", [], { null: true }, ["abc"]] - , ["*c*?**", [], { null: true }, ["abc"]] - , ["a*****c*?**", [], { null: true }, ["abc"]] - , ["a********???*******", [], { null: true }, ["abc"]] - , ["[]", [], { null: true }, ["a"]] - , ["[abc", [], { null: true }, ["["]] - - , "nocase tests" - , ["XYZ", ["xYz"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["ab*", ["ABC"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - , ["[ia]?[ck]", ["ABC", "IjK"], { nocase: true, null: true } - , ["xYz", "ABC", "IjK"]] - - // [ pattern, [matches], MM opts, files, TAP opts] - , "onestar/twostar" - , ["{/*,*}", [], {null: true}, ["/asdf/asdf/asdf"]] - , ["{/?,*}", ["/a", "bb"], {null: true} - , ["/a", "/b/b", "/a/b/c", "bb"]] - - , "dots should not match unless requested" - , ["**", ["a/b"], {}, ["a/b", "a/.d", ".a/.d"]] - - // .. and . can only match patterns starting with ., - // even when options.dot is set. - , function () { - files = ["a/./b", "a/../b", "a/c/b", "a/.d/b"] - } - , ["a/*/b", ["a/c/b", "a/.d/b"], {dot: true}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: true}] - , ["a/*/b", ["a/c/b"], {dot:false}] - , ["a/.*/b", ["a/./b", "a/../b", "a/.d/b"], {dot: false}] - - - // this also tests that changing the options needs - // to change the cache key, even if the pattern is - // the same! - , ["**", ["a/b","a/.d",".a/.d"], { dot: true } - , [ ".a/.d", "a/.d", "a/b"]] - - , "paren sets cannot contain slashes" - , ["*(a/b)", ["*(a/b)"], {nonull: true}, ["a/b"]] - - // brace sets trump all else. - // - // invalid glob pattern. fails on bash4 and bsdglob. - // however, in this implementation, it's easier just - // to do the intuitive thing, and let brace-expansion - // actually come before parsing any extglob patterns, - // like the documentation seems to say. - // - // XXX: if anyone complains about this, either fix it - // or tell them to grow up and stop complaining. - // - // bash/bsdglob says this: - // , ["*(a|{b),c)}", ["*(a|{b),c)}"], {}, ["a", "ab", "ac", "ad"]] - // but we do this instead: - , ["*(a|{b),c)}", ["a", "ab", "ac"], {}, ["a", "ab", "ac", "ad"]] - - // test partial parsing in the presence of comment/negation chars - , ["[!a*", ["[!ab"], {}, ["[!ab", "[ab"]] - , ["[#a*", ["[#ab"], {}, ["[#ab", "[ab"]] - - // like: {a,b|c\\,d\\\|e} except it's unclosed, so it has to be escaped. - , ["+(a|*\\|c\\\\|d\\\\\\|e\\\\\\\\|f\\\\\\\\\\|g" - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g"] - , {} - , ["+(a|b\\|c\\\\|d\\\\|e\\\\\\\\|f\\\\\\\\|g", "a", "b\\c"]] - - - // crazy nested {,,} and *(||) tests. - , function () { - files = [ "a", "b", "c", "d" - , "ab", "ac", "ad" - , "bc", "cb" - , "bc,d", "c,db", "c,d" - , "d)", "(b|c", "*(b|c" - , "b|c", "b|cc", "cb|c" - , "x(a|b|c)", "x(a|c)" - , "(a|b|c)", "(a|c)"] - } - , ["*(a|{b,c})", ["a", "b", "c", "ab", "ac"]] - , ["{a,*(b|c,d)}", ["a","(b|c", "*(b|c", "d)"]] - // a - // *(b|c) - // *(b|d) - , ["{a,*(b|{c,d})}", ["a","b", "bc", "cb", "c", "d"]] - , ["*(a|{b|c,c})", ["a", "b", "c", "ab", "ac", "bc", "cb"]] - - - // test various flag settings. - , [ "*(a|{b|c,c})", ["x(a|b|c)", "x(a|c)", "(a|b|c)", "(a|c)"] - , { noext: true } ] - , ["a?b", ["x/y/acb", "acb/"], {matchBase: true} - , ["x/y/acb", "acb/", "acb/d/e", "x/y/acb/d"] ] - , ["#*", ["#a", "#b"], {nocomment: true}, ["#a", "#b", "c#d"]] - - - // begin channelling Boole and deMorgan... - , "negation tests" - , function () { - files = ["d", "e", "!ab", "!abc", "a!b", "\\!a"] - } - - // anything that is NOT a* matches. - , ["!a*", ["\\!a", "d", "e", "!ab", "!abc"]] - - // anything that IS !a* matches. - , ["!a*", ["!ab", "!abc"], {nonegate: true}] - - // anything that IS a* matches - , ["!!a*", ["a!b"]] - - // anything that is NOT !a* matches - , ["!\\!a*", ["a!b", "d", "e", "\\!a"]] - - // negation nestled within a pattern - , function () { - files = [ "foo.js" - , "foo.bar" - // can't match this one without negative lookbehind. - , "foo.js.js" - , "blar.js" - , "foo." - , "boo.js.boo" ] - } - , ["*.!(js)", ["foo.bar", "foo.", "boo.js.boo"] ] - - ].forEach(function (c) { - if (typeof c === "function") return c() - if (typeof c === "string") return t.comment(c) - - var pattern = c[0] - , expect = c[1].sort(alpha) - , options = c[2] || {} - , f = c[3] || files - , tapOpts = c[4] || {} - - // options.debug = true - var Class = mm.defaults(options).Minimatch - var m = new Class(pattern, {}) - var r = m.makeRe() - tapOpts.re = String(r) || JSON.stringify(r) - tapOpts.files = JSON.stringify(f) - tapOpts.pattern = pattern - tapOpts.set = m.set - tapOpts.negated = m.negate - - var actual = mm.match(f, pattern, options) - actual.sort(alpha) - - t.equivalent( actual, expect - , JSON.stringify(pattern) + " " + JSON.stringify(expect) - , tapOpts ) - }) - - t.comment("time=" + (Date.now() - start) + "ms") - t.end() -}) - -tap.test("global leak test", function (t) { - var globalAfter = Object.keys(global) - t.equivalent(globalAfter, globalBefore, "no new globals, please") - t.end() -}) - -function alpha (a, b) { - return a > b ? 1 : -1 -} diff --git a/build/node_modules/minimatch/test/extglob-ending-with-state-char.js b/build/node_modules/minimatch/test/extglob-ending-with-state-char.js deleted file mode 100644 index 6676e262..00000000 --- a/build/node_modules/minimatch/test/extglob-ending-with-state-char.js +++ /dev/null @@ -1,8 +0,0 @@ -var test = require('tap').test -var minimatch = require('../') - -test('extglob ending with statechar', function(t) { - t.notOk(minimatch('ax', 'a?(b*)')) - t.ok(minimatch('ax', '?(a*|b)')) - t.end() -}) diff --git a/build/node_modules/minimist/index.js b/build/node_modules/minimist/index.js index d2afe5e4..d9c3eb79 100644 --- a/build/node_modules/minimist/index.js +++ b/build/node_modules/minimist/index.js @@ -70,7 +70,7 @@ module.exports = function (args, opts) { var o = obj; for (var i = 0; i < keys.length-1; i++) { var key = keys[i]; - if (key === '__proto__') return; + if (isConstructorOrProto(o, key)) return; if (o[key] === undefined) o[key] = {}; if (o[key] === Object.prototype || o[key] === Number.prototype || o[key] === String.prototype) o[key] = {}; @@ -79,7 +79,7 @@ module.exports = function (args, opts) { } var key = keys[keys.length - 1]; - if (key === '__proto__') return; + if (isConstructorOrProto(o, key)) return; if (o === Object.prototype || o === Number.prototype || o === String.prototype) o = {}; if (o === Array.prototype) o = []; @@ -243,3 +243,7 @@ function isNumber (x) { return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); } + +function isConstructorOrProto (obj, key) { + return key === 'constructor' && typeof obj[key] === 'function' || key === '__proto__'; +} diff --git a/build/node_modules/minimist/package.json b/build/node_modules/minimist/package.json index 7501ee27..934dfac3 100644 --- a/build/node_modules/minimist/package.json +++ b/build/node_modules/minimist/package.json @@ -1,26 +1,26 @@ { - "_from": "minimist@^1.2.5", - "_id": "minimist@1.2.5", + "_from": "minimist@^1.2.6", + "_id": "minimist@1.2.6", "_inBundle": false, - "_integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "_integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "_location": "/minimist", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "minimist@^1.2.5", + "raw": "minimist@^1.2.6", "name": "minimist", "escapedName": "minimist", - "rawSpec": "^1.2.5", + "rawSpec": "^1.2.6", "saveSpec": null, - "fetchSpec": "^1.2.5" + "fetchSpec": "^1.2.6" }, "_requiredBy": [ "/mkdirp" ], - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "_shasum": "67d66014b66a6a8aaa0c083c5fd58df4e4e97602", - "_spec": "minimist@^1.2.5", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimist/-/minimist-1.2.6.tgz", + "_shasum": "8637a5b759ea0d6e98702cfb3a9283323c93af44", + "_spec": "minimist@^1.2.6", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mkdirp", "author": { "name": "James Halliday", @@ -69,5 +69,5 @@ "opera/12" ] }, - "version": "1.2.5" + "version": "1.2.6" } diff --git a/build/node_modules/minimist/readme.markdown b/build/node_modules/minimist/readme.markdown index 5fd97ab1..859d1ab4 100644 --- a/build/node_modules/minimist/readme.markdown +++ b/build/node_modules/minimist/readme.markdown @@ -34,7 +34,10 @@ $ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz Previous versions had a prototype pollution bug that could cause privilege escalation in some circumstances when handling untrusted user input. -Please use version 1.2.3 or later: https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) # methods diff --git a/build/node_modules/minimist/test/proto.js b/build/node_modules/minimist/test/proto.js index 8649107e..4ac62df2 100644 --- a/build/node_modules/minimist/test/proto.js +++ b/build/node_modules/minimist/test/proto.js @@ -42,3 +42,19 @@ test('proto pollution (constructor)', function (t) { t.equal(argv.y, undefined); t.end(); }); + +test('proto pollution (constructor function)', function (t) { + var argv = parse(['--_.concat.constructor.prototype.y', '123']); + function fnToBeTested() {} + t.equal(fnToBeTested.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); + +// powered by snyk - https://github.com/backstage/backstage/issues/10343 +test('proto pollution (constructor function) snyk', function (t) { + var argv = parse('--_.constructor.constructor.prototype.foo bar'.split(' ')); + t.equal((function(){}).foo, undefined); + t.equal(argv.y, undefined); + t.end(); +}) diff --git a/build/node_modules/mkdirp/index.js b/build/node_modules/mkdirp/index.js index 468d7cd8..0890ac3b 100644 --- a/build/node_modules/mkdirp/index.js +++ b/build/node_modules/mkdirp/index.js @@ -21,7 +21,7 @@ function mkdirP (p, opts, f, made) { } if (!made) made = null; - var cb = f || function () {}; + var cb = f || /* istanbul ignore next */ function () {}; p = path.resolve(p); xfs.mkdir(p, mode, function (er) { @@ -31,8 +31,10 @@ function mkdirP (p, opts, f, made) { } switch (er.code) { case 'ENOENT': + /* istanbul ignore if */ if (path.dirname(p) === p) return cb(er); mkdirP(path.dirname(p), opts, function (er, made) { + /* istanbul ignore if */ if (er) cb(er, made); else mkdirP(p, opts, cb, made); }); @@ -87,9 +89,10 @@ mkdirP.sync = function sync (p, opts, made) { try { stat = xfs.statSync(p); } - catch (err1) { + catch (err1) /* istanbul ignore next */ { throw err0; } + /* istanbul ignore if */ if (!stat.isDirectory()) throw err0; break; } diff --git a/build/node_modules/mkdirp/package.json b/build/node_modules/mkdirp/package.json index 4e5db40b..5e03498e 100644 --- a/build/node_modules/mkdirp/package.json +++ b/build/node_modules/mkdirp/package.json @@ -1,8 +1,8 @@ { "_from": "mkdirp@^0.5.1", - "_id": "mkdirp@0.5.5", + "_id": "mkdirp@0.5.6", "_inBundle": false, - "_integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "_integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "_location": "/mkdirp", "_phantomChildren": {}, "_requested": { @@ -18,8 +18,8 @@ "_requiredBy": [ "/configparser" ], - "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "_shasum": "d91cefd62d1436ca0f41620e251288d420099def", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mkdirp/-/mkdirp-0.5.6.tgz", + "_shasum": "7def03d2432dcae4ba1d611445c48396062255f6", "_spec": "mkdirp@^0.5.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/configparser", "author": { @@ -35,13 +35,12 @@ }, "bundleDependencies": false, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "deprecated": false, "description": "Recursively mkdir, like `mkdir -p`", "devDependencies": { - "mock-fs": "^3.7.0", - "tap": "^5.4.2" + "tap": "^16.0.1" }, "files": [ "bin", @@ -65,5 +64,5 @@ "scripts": { "test": "tap test/*.js" }, - "version": "0.5.5" + "version": "0.5.6" } diff --git a/build/node_modules/mocha/HISTORY.md b/build/node_modules/mocha/HISTORY.md deleted file mode 100644 index 5a9a3633..00000000 --- a/build/node_modules/mocha/HISTORY.md +++ /dev/null @@ -1,1042 +0,0 @@ - -2.3.4 / 2015-11-15 -================== - - * Update debug dependency to 2.2.0 - * remove duplication of mocha.opts on process.argv - * Fix typo in test/reporters/nyan.js - -2.3.3 / 2015-09-19 -================== - - * [#1875] - Fix Markdown reporter exceeds maximum call stack size ([@danielstjules]) - * [#1864] - Fix xunit missing output with --reporter-options output ([@danielstjules]) - * [#1846] - Support all harmony flags ([@danielstjules]) - * Fix fragile xunit reporter spec ([@danielstjules]) - * [#1669] - Fix catch uncaught errors outside test suite execution ([@danielstjules]) - * [#1868] - Revert jade to support npm < v1.3.7 ([@danielstjules]) - * [#1766] - Don't remove modules/components from stack trace in the browser ([@danielstjules]) - * [#1798] - Fix correctly attribute mutiple done err with hooks ([@danielstjules]) - * Fix use utils.reduce for IE8 compatibility ([@wsw0108]) - * Some linting errors fixed by [@danielstjules] - * Call the inspect() function if message is not set ([@kevinburke]) - -[#1875]: https://github.com/mochajs/mocha/issues/1875 -[#1864]: https://github.com/mochajs/mocha/issues/1864 -[#1846]: https://github.com/mochajs/mocha/issues/1846 -[#1669]: https://github.com/mochajs/mocha/issues/1669 -[#1868]: https://github.com/mochajs/mocha/issues/1868 -[#1766]: https://github.com/mochajs/mocha/issues/1766 -[#1798]: https://github.com/mochajs/mocha/issues/1798 -[@danielstjules]: https://github.com/danielstjules -[@wsw0108]: https://github.com/wsw0108 -[@kevinburke]: https://github.com/kevinburke - -2.3.2 / 2015-09-07 -================== - * [#1868] - Fix compatibility with older versions of NPM ([@boneskull]) - - [#1868]: https://github.com/mochajs/mocha/issues/1868 - -2.3.1 / 2015-09-06 -================== - - * [#1812] - Fix: Bail flag causes before() hooks to be run even after a failure ([@aaroncrows]) - - [#1812]: https://github.com/mochajs/mocha/issues/1812 - [aaroncrows]: https://github.com/aaroncrows - -2.3.0 / 2015-08-30 -================== - - * [#553] - added --allowUncaught option ([@amsul]) - * [#1490] - Allow --async-only to be satisfied by returning a promise ([@jlai]) - * [#1829] - support --max-old-space-size ([@gigadude]) - * [#1811] - upgrade Jade dependency ([@outsideris]) - * [#1769] - Fix async hook error handling ([@ajaykodali]) - * [#1230] - More descriptive beforeEach/afterEach messages ([@duncanbeevers]) - * [#1787] - Scope loading behaviour instead of using early return ([@aryeguy]) - * [#1789] - Fix: html-runner crashing ([@sunesimonsen]) - * [#1749] - Fix maximum call stack error on large amount of tests ([@tinganho]) - * [#1230] - Decorate failed hook titles with test title ([@duncanbeevers]) - * [#1260] - Build using Browserify ([@ndhoule]) - * [#1728] - Don't use `__proto__` ([@ndhoule]) - * [#1781] - Fix hook error tests ([@glenjamin]) - * [#1754] - Allow boolean --reporter-options ([@papandreou]) - * [#1766] - Fix overly aggressive stack suppression ([@moll]) - * [#1752] - Avoid potential infinite loop ([@gsilk]) - * [#1761] - Fix problems running under PhantomJS ([@chromakode]) - * [#1700] - Fix more problems running under PhantomJS ([@jbnicolai]) - * [#1774] - Support escaped spaces in CLI options ([@adamgruber]) - * [#1687] - Fix HTML reporter links with special chars ([@benvinegar]) - * [#1359] - Adopt code style and enforce it using ESLint ([@ndhoule] w/ assist from [@jbnicolai] & [@boneskull]) - * various refactors ([@jbnicolai]) - * [#1758] - Add cross-frame compatible Error checking ([@outdooricon]) - * [#1741] - Remove moot `version` property from bower.json ([@kkirsche]) - * [#1739] - Improve `HISTORY.md` ([@rstacruz]) - * [#1730] - Support more io.js flags ([@ryedog]) - * [#1349] - Allow HTML in HTML reporter errors ([@papandreou] / [@sunesimonsen]) - * [#1572] - Prevent default browser behavior for failure/pass links ([@jschilli]) - * [#1630] - Support underscored harmony flags ([@dominicbarnes]) - * [#1718] - Support more harmony flags ([@slyg]) - * [#1689] - Add stack to JSON-stream reporter ([@jonathandelgado]) - * [#1654] - Fix `ReferenceError` "location is not defined" ([@jakemmarsh]) - - [#553]: https://github.com/mochajs/mocha/issues/553 - [#1490]: https://github.com/mochajs/mocha/issues/1490 - [#1829]: https://github.com/mochajs/mocha/issues/1829 - [#1811]: https://github.com/mochajs/mocha/issues/1811 - [#1769]: https://github.com/mochajs/mocha/issues/1769 - [#1230]: https://github.com/mochajs/mocha/issues/1230 - [#1787]: https://github.com/mochajs/mocha/issues/1787 - [#1789]: https://github.com/mochajs/mocha/issues/1789 - [#1749]: https://github.com/mochajs/mocha/issues/1749 - [#1230]: https://github.com/mochajs/mocha/issues/1230 - [#1260]: https://github.com/mochajs/mocha/issues/1260 - [#1728]: https://github.com/mochajs/mocha/issues/1728 - [#1781]: https://github.com/mochajs/mocha/issues/1781 - [#1754]: https://github.com/mochajs/mocha/issues/1754 - [#1766]: https://github.com/mochajs/mocha/issues/1766 - [#1752]: https://github.com/mochajs/mocha/issues/1752 - [#1761]: https://github.com/mochajs/mocha/issues/1761 - [#1700]: https://github.com/mochajs/mocha/issues/1700 - [#1774]: https://github.com/mochajs/mocha/issues/1774 - [#1687]: https://github.com/mochajs/mocha/issues/1687 - [#1359]: https://github.com/mochajs/mocha/issues/1359 - [#1758]: https://github.com/mochajs/mocha/issues/1758 - [#1741]: https://github.com/mochajs/mocha/issues/1741 - [#1739]: https://github.com/mochajs/mocha/issues/1739 - [#1730]: https://github.com/mochajs/mocha/issues/1730 - [#1349]: https://github.com/mochajs/mocha/issues/1349 - [#1572]: https://github.com/mochajs/mocha/issues/1572 - [#1630]: https://github.com/mochajs/mocha/issues/1630 - [#1718]: https://github.com/mochajs/mocha/issues/1718 - [#1689]: https://github.com/mochajs/mocha/issues/1689 - [#1654]: https://github.com/mochajs/mocha/issues/1654 - [@adamgruber]: https://github.com/adamgruber - [@ajaykodali]: https://github.com/ajaykodali - [@amsul]: https://github.com/amsul - [@aryeguy]: https://github.com/aryeguy - [@benvinegar]: https://github.com/benvinegar - [@boneskull]: https://github.com/boneskull - [@chromakode]: https://github.com/chromakode - [@dominicbarnes]: https://github.com/dominicbarnes - [@duncanbeevers]: https://github.com/duncanbeevers - [@gigadude]: https://github.com/gigadude - [@glenjamin]: https://github.com/glenjamin - [@gsilk]: https://github.com/gsilk - [@jakemmarsh]: https://github.com/jakemmarsh - [@jbnicolai]: https://github.com/jbnicolai - [@jlai]: https://github.com/jlai - [@jonathandelgado]: https://github.com/jonathandelgado - [@jschilli]: https://github.com/jschilli - [@kkirsche]: https://github.com/kkirsche - [@moll]: https://github.com/moll - [@ndhoule]: https://github.com/ndhoule - [@outdooricon]: https://github.com/outdooricon - [@outsideris]: https://github.com/outsideris - [@papandreou]: https://github.com/papandreou - [@rstacruz]: https://github.com/rstacruz - [@ryedog]: https://github.com/ryedog - [@slyg]: https://github.com/slyg - [@sunesimonsen]: https://github.com/sunesimonsen - [@tinganho]: https://github.com/tinganho - -2.2.5 / 2015-05-14 -================== - - * [#1699] - Upgrade jsdiff to v1.4.0 ([@nylen]) - * [#1648] - fix diff background colors in the console ([@nylen]) - * [#1327] - fix tests running twice, a regression issue. ([#1686], [@danielstjules]) - * [#1675] - add integration tests ([@danielstjules]) - * [#1682] - use a valid SPDX license identifier in package.json ([@kemitchell]) - * [#1660] - fix assertion of invalid dates ([#1661], [@a8m]) - * [#1241] - fix issue with multiline diffs appearing as single line ([#1655], [@a8m]) - -[#1699]: https://github.com/mochajs/mocha/issues/1699 -[#1648]: https://github.com/mochajs/mocha/issues/1648 -[#1327]: https://github.com/mochajs/mocha/issues/1327 -[#1686]: https://github.com/mochajs/mocha/issues/1686 -[#1675]: https://github.com/mochajs/mocha/issues/1675 -[#1682]: https://github.com/mochajs/mocha/issues/1682 -[#1660]: https://github.com/mochajs/mocha/issues/1660 -[#1661]: https://github.com/mochajs/mocha/issues/1661 -[#1241]: https://github.com/mochajs/mocha/issues/1241 -[#1655]: https://github.com/mochajs/mocha/issues/1655 -[@nylen]: https://github.com/nylen -[@danielstjules]: https://github.com/danielstjules -[@kemitchell]: https://github.com/kemitchell -[@a8m]: https://github.com/a8m - -2.2.4 / 2015-04-08 -================== - - * Load mocha.opts in _mocha for now (close #1645) - -2.2.3 / 2015-04-07 -================== - - * fix(reporter/base): string diff - issue #1241 - * fix(reporter/base): string diff - issue #1241 - * fix(reporter/base): don't show diffs for errors without expectation - * fix(reporter/base): don't assume error message is first line of stack - * improve: dry up reporter/base test - * fix(reporter/base): explicitly ignore showDiff #1614 - * Add iojs to travis build - * Pass `--allow-natives-syntax` flag to node. - * Support --harmony_classes flag for io.js - * Fix 1556: Update utils.clean to handle newlines in func declarations - * Fix 1606: fix err handling in IE <= 8 and non-ES5 browsers - * Fix 1585: make _mocha executable again - * chore(package.json): add a8m as a contributor - * Fixed broken link on html-cov reporter - * support --es_staging flag - * fix issue where menu overlaps content. - * update contributors in package.json - * Remove trailing whitespace from reporter output - * Remove contributors list from readme - * log third-party reporter errors - * [Fix] Exclude not own properties when looping on options - * fix: support node args in mocha.opts (close #1573) - * fix(reporter/base): string diff - issue #1241 - -2.2.1 / 2015-03-09 -================== - - * Fix passing of args intended for node/iojs. - -2.2.0 / 2015-03-06 -================== - - * Update mocha.js - * Add --fgrep. Use grep for RegExp, fgrep for str - * Ignore async global errors after spec resolution - * Fixing errors that prevent mocha.js from loading in the browser - fixes #1558 - * fix(utils): issue #1558 + make - * add ability to delay root suite; closes #362, closes #1124 - * fix insanity in http tests - * update travis: add node 0.12, add gitter, remove slack - * building - * resolve #1548: ensure the environment's "node" executable is used - * reporters/base: use supports-color to detect colorable term - * travis: use docker containers - * small fix: commander option for --expose-gc - * Ignore asynchronous errors after global failure - * Improve error output when a test fails with a non-error - * updated travis badge, uses svg instead of img - * Allow skip from test context for #332 - * [JSHINT] Unnecessary semicolon fixed in bin/_mocha - * Added a reminder about the done() callback to test timeout error messages - * fixes #1496, in Mocha.run(fn), check if fn exists before executing it, added tests too - * Add Harmony Proxy flag for iojs - * test(utils|ms|*): test existing units - * add support for some iojs flags - * fix(utils.stringify): issue #1229, diff viewer - * Remove slack link - * Prevent multiple 'grep=' querystring params in html reporter - * Use grep as regexp (close #1381) - * utils.stringify should handle objects without an Object prototype - * in runnable test, comparing to undefined error's message rather than a literal - * Fix test running output truncation on async STDIO - * ammended for deprecated customFds option in child_process - -2.1.0 / 2014-12-23 -================== - - * showDiff: don’t stringify strings - * Clean up unused module dependencies. - * Filter zero-length strings from mocha.opts - * only write to stdout in reporters - * Revert "only write to stdout in reporters" - * Print colored output only to a tty - * update summary in README.md - * rename Readme.md/History.md to README.md/HISTORY.md because neurotic - * add .mailmap to fix "git shortlog" or "git summary" output - * fixes #1461: nyan-reporter now respects Base.useColors, fixed bug where Base.color would not return a string when str wasn't a string. - * Use existing test URL builder in failed replay links - * modify .travis.yml: use travis_retry; closes #1449 - * fix -t 0 behavior; closes #1446 - * fix tests (whoops) - * improve diff behavior - * Preserve pathname when linking to individual tests - * Fix test - * Tiny typo in comments fixed - * after hooks now being called on failed tests when using bail, fixes #1093 - * fix throwing undefined/null now makes tests fail, fixes #1395 - * compiler extensions are added as watched extensions, removed non-standard extensions from watch regex, resolves #1221 - * prefix/namespace for suite titles in markdown reporter, fixes #554 - * fix more bad markdown in CONTRIBUTING.md - * fix bad markdown in CONTRIBUTING.md - * add setImmediate/clearImmediate to globals; closes #1435 - * Fix buffer diffs (closes #1132, closes #1433) - * add a CONTRIBUTING.md. closes #882 - * fix intermittent build failures (maybe). closes #1407 - * add Slack notification to .travis.yml - * Fix slack link - * Add slack room to readme - * Update maintainers - * update maintainers and contributors - * resolves #1393: kill children with more effort on SIGINT - * xunit reporter support for optionally writing to a file - * if a reporter has a .done method, call it before exiting - * add support for reporter options - * only write to stdout in reporters - -2.0.0 / 2014-10-21 -================== - - * remove: support for node 0.6.x, 0.4.x - * fix: landing reporter with non ansi characters (#211) - * fix: html reporter - preserve query params when navigating to suites/tests (#1358) - * fix: json stream reporter add error message to failed test - * fix: fixes for visionmedia -> mochajs - * fix: use stdio, fixes node deprecation warnings (#1391) - -1.21.5 / 2014-10-11 -================== - - * fix: build for NodeJS v0.6.x - * fix: do not attempt to highlight syntax when non-HTML reporter is used - * update: escape-string-regexp to 1.0.2. - * fix: botched indentation in canonicalize() - * fix: .gitignore: ignore .patch and .diff files - * fix: changed 'Catched' to 'Caught' in uncaught exception error handler messages - * add: `pending` field for json reporter - * fix: Runner.prototype.uncaught: don't double-end runnables that already have a state. - * fix: --recursive, broken by f0facd2e - * update: replaces escapeRegexp with the escape-string-regexp package. - * update: commander to 2.3.0. - * update: diff to 1.0.8. - * fix: ability to disable syntax highlighting (#1329) - * fix: added empty object to errorJSON() call to catch when no error is present - * fix: never time out after calling enableTimeouts(false) - * fix: timeout(0) will work at suite level (#1300) - * Fix for --watch+only() issue (#888 ) - * fix: respect err.showDiff, add Base reporter test (#810) - -1.22.1-3 / 2014-07-27 -================== - - * fix: disabling timeouts with this.timeout(0) (#1301) - -1.22.1-3 / 2014-07-27 -================== - - * fix: local uis and reporters (#1288) - * fix: building 1.21.0's changes in the browser (#1284) - -1.21.0 / 2014-07-23 -================== - - * add: --no-timeouts option (#1262, #1268) - * add: --*- deprecation node flags (#1217) - * add: --watch-extensions argument (#1247) - * change: spec reporter is default (#1228) - * fix: diff output showing incorrect +/- (#1182) - * fix: diffs of circular structures (#1179) - * fix: re-render the progress bar when progress has changed only (#1151) - * fix support for environments with global and window (#1159) - * fix: reverting to previously defined onerror handler (#1178) - * fix: stringify non error objects passed to done() (#1270) - * fix: using local ui, reporters (#1267) - * fix: cleaning es6 arrows (#1176) - * fix: don't include attrs in failure tag for xunit (#1244) - * fix: fail tests that return a promise if promise is rejected w/o a reason (#1224) - * fix: showing failed tests in doc reporter (#1117) - * fix: dot reporter dots being off (#1204) - * fix: catch empty throws (#1219) - * fix: honoring timeout for sync operations (#1242) - * update: growl to 1.8.0 - -1.20.1 / 2014-06-03 -================== - - * update: should dev dependency to ~4.0.0 (#1231) - -1.20.0 / 2014-05-28 -================== - - * add: filenames to suite objects (#1222) - -1.19.0 / 2014-05-17 -================== - - * add: browser script option to package.json - * add: export file in Mocha.Test objects (#1174) - * add: add docs for wrapped node flags - * fix: mocha.run() to return error status in browser (#1216) - * fix: clean() to show failure details (#1205) - * fix: regex that generates html for new keyword (#1201) - * fix: sibling suites have inherited but separate contexts (#1164) - - -1.18.2 / 2014-03-18 -================== - - * fix: html runner was prevented from using #mocha as the default root el (#1162) - -1.18.1 / 2014-03-18 -================== - - * fix: named before/after hooks in bdd, tdd, qunit interfaces (#1161) - -1.18.0 / 2014-03-13 -================== - - * add: promise support (#329) - * add: named before/after hooks (#966) - -1.17.1 / 2014-01-22 -================== - - * fix: expected messages in should.js (should.js#168) - * fix: expect errno global in node versions < v0.9.11 (#1111) - * fix: unreliable checkGlobals optimization (#1110) - -1.17.0 / 2014-01-09 -================== - - * add: able to require globals (describe, it, etc.) through mocha (#1077) - * fix: abort previous run on --watch change (#1100) - * fix: reset context for each --watch triggered run (#1099) - * fix: error when cli can't resolve path or pattern (#799) - * fix: canonicalize objects before stringifying and diffing them (#1079) - * fix: make CR call behave like carriage return for non tty (#1087) - - -1.16.2 / 2013-12-23 -================== - - * fix: couple issues with ie 8 (#1082, #1081) - * fix: issue running the xunit reporter in browsers (#1068) - * fix: issue with firefox < 3.5 (#725) - - -1.16.1 / 2013-12-19 -================== - - * fix: recompiled for missed changes from the last release - - -1.16.0 / 2013-12-19 -================== - - * add: Runnable.globals(arr) for per test global whitelist (#1046) - * add: mocha.throwError(err) for assertion libs to call (#985) - * remove: --watch's spinner (#806) - * fix: duplicate test output for multi-line specs in spec reporter (#1006) - * fix: gracefully exit on SIGINT (#1063) - * fix expose the specified ui only in the browser (#984) - * fix: ensure process exit code is preserved when using --no-exit (#1059) - * fix: return true from window.onerror handler (#868) - * fix: xunit reporter to use process.stdout.write (#1068) - * fix: utils.clean(str) indentation (#761) - * fix: xunit reporter returning test duration a NaN (#1039) - -1.15.1 / 2013-12-03 -================== - - * fix: recompiled for missed changes from the last release - -1.15.0 / 2013-12-02 -================== - - * add: `--no-exit` to prevent `process.exit()` (#1018) - * fix: using inline diffs (#1044) - * fix: show pending test details in xunit reporter (#1051) - * fix: faster global leak detection (#1024) - * fix: yui compression (#1035) - * fix: wrapping long lines in test results (#1030, #1031) - * fix: handle errors in hooks (#1043) - -1.14.0 / 2013-11-02 -================== - - * add: unified diff (#862) - * add: set MOCHA_COLORS env var to use colors (#965) - * add: able to override tests links in html reporters (#776) - * remove: teamcity reporter (#954) - * update: commander dependency to 2.0.0 (#1010) - * fix: mocha --ui will try to require the ui if not built in, as --reporter does (#1022) - * fix: send cursor commands only if isatty (#184, #1003) - * fix: include assertion message in base reporter (#993, #991) - * fix: consistent return of it, it.only, and describe, describe.only (#840) - -1.13.0 / 2013-09-15 -================== - - * add: sort test files with --sort (#813) - * update: diff depedency to 1.0.7 - * update: glob dependency to 3.2.3 (#927) - * fix: diffs show whitespace differences (#976) - * fix: improve global leaks (#783) - * fix: firefox window.getInterface leak - * fix: accessing iframe via window[iframeIndex] leak - * fix: faster global leak checking - * fix: reporter pending css selector (#970) - -1.12.1 / 2013-08-29 -================== - - * remove test.js from .gitignore - * update included version of ms.js - -1.12.0 / 2013-07-01 -================== - - * add: prevent diffs for differing types. Closes #900 - * add `Mocha.process` hack for phantomjs - * fix: use compilers with requires - * fix regexps in diffs. Closes #890 - * fix xunit NaN on failure. Closes #894 - * fix: strip tab indentation in `clean` utility method - * fix: textmate bundle installation - -1.11.0 / 2013-06-12 -================== - - * add --prof support - * add --harmony support - * add --harmony-generators support - * add "Uncaught " prefix to uncaught exceptions - * add web workers support - * add `suite.skip()` - * change to output # of pending / passing even on failures. Closes #872 - * fix: prevent hooks from being called if we are bailing - * fix `this.timeout(0)` - -1.10.0 / 2013-05-21 -================== - - * add add better globbing support for windows via `glob` module - * add support to pass through flags such as --debug-brk=1234. Closes #852 - * add test.only, test.skip to qunit interface - * change to always use word-based diffs for now. Closes #733 - * change `mocha init` tests.html to index.html - * fix `process` global leak in the browser - * fix: use resolve() instead of join() for --require - * fix: filterLeaks() condition to not consider indices in global object as leaks - * fix: restrict mocha.css styling to #mocha id - * fix: save timer references to avoid Sinon interfering in the browser build. - -1.9.0 / 2013-04-03 -================== - - * add improved setImmediate implementation - * replace --ignore-leaks with --check-leaks - * change default of ignoreLeaks to true. Closes #791 - * remove scrolling for HTML reporter - * fix retina support - * fix tmbundle, restrict to js scope - -1.8.2 / 2013-03-11 -================== - - * add `setImmediate` support for 0.10.x - * fix mocha -w spinner on windows - -1.8.1 / 2013-01-09 -================== - - * fix .bail() arity check causing it to default to true - -1.8.0 / 2013-01-08 -================== - - * add Mocha() options bail support - * add `Mocha#bail()` method - * add instanceof check back for inheriting from Error - * add component.json - * add diff.js to browser build - * update growl - * fix TAP reporter failures comment :D - -1.7.4 / 2012-12-06 -================== - - * add total number of passes and failures to TAP - * remove .bind() calls. re #680 - * fix indexOf. Closes #680 - -1.7.3 / 2012-11-30 -================== - - * fix uncaught error support for the browser - * revert uncaught "fix" which breaks node - -1.7.2 / 2012-11-28 -================== - - * fix uncaught errors to expose the original error message - -1.7.0 / 2012-11-07 -================== - - * add `--async-only` support to prevent false positives for missing `done()` - * add sorting by filename in code coverage - * add HTML 5 doctype to browser template. - * add play button to html reporter to rerun a single test - * add `this.timeout(ms)` as Suite#timeout(ms). Closes #599 - * update growl dependency to 1.6.x - * fix encoding of test-case ?grep. Closes #637 - * fix unicode chars on windows - * fix dom globals in Opera/IE. Closes #243 - * fix markdown reporter a tags - * fix `this.timeout("5s")` support - -1.6.0 / 2012-10-02 -================== - - * add object diffs when `err.showDiff` is present - * add hiding of empty suites when pass/failures are toggled - * add faster `.length` checks to `checkGlobals()` before performing the filter - -1.5.0 / 2012-09-21 -================== - - * add `ms()` to `.slow()` and `.timeout()` - * add `Mocha#checkLeaks()` to re-enable global leak checks - * add `this.slow()` option [aheckmann] - * add tab, CR, LF to error diffs for now - * add faster `.checkGlobals()` solution [guille] - * remove `fn.call()` from reduce util - * remove `fn.call()` from filter util - * fix forEach. Closes #582 - * fix relaying of signals [TooTallNate] - * fix TAP reporter grep number - -1.4.2 / 2012-09-01 -================== - - * add support to multiple `Mocha#globals()` calls, and strings - * add `mocha.reporter()` constructor support [jfirebaugh] - * add `mocha.timeout()` - * move query-string parser to utils.js - * move highlight code to utils.js - * fix third-party reporter support [exogen] - * fix client-side API to match node-side [jfirebaugh] - * fix mocha in iframe [joliss] - -1.4.1 / 2012-08-28 -================== - - * add missing `Markdown` export - * fix `Mocha#grep()`, escape regexp strings - * fix reference error when `devicePixelRatio` is not defined. Closes #549 - -1.4.0 / 2012-08-22 -================== - - * add mkdir -p to `mocha init`. Closes #539 - * add `.only()`. Closes #524 - * add `.skip()`. Closes #524 - * change str.trim() to use utils.trim(). Closes #533 - * fix HTML progress indicator retina display - * fix url-encoding of click-to-grep HTML functionality - -1.3.2 / 2012-08-01 -================== - - * fix exports double-execution regression. Closes #531 - -1.3.1 / 2012-08-01 -================== - - * add passes/failures toggling to HTML reporter - * add pending state to `xit()` and `xdescribe()` [Brian Moore] - * add the @charset "UTF-8"; to fix #522 with FireFox. [Jonathan Creamer] - * add border-bottom to #stats links - * add check for runnable in `Runner#uncaught()`. Closes #494 - * add 0.4 and 0.6 back to travis.yml - * add `-E, --growl-errors` to growl on failures only - * add prefixes to debug() names. Closes #497 - * add `Mocha#invert()` to js api - * change dot reporter to use sexy unicode dots - * fix error when clicking pending test in HTML reporter - * fix `make tm` - -1.3.0 / 2012-07-05 -================== - - * add window scrolling to `HTML` reporter - * add v8 `--trace-*` option support - * add support for custom reports via `--reporter MODULE` - * add `--invert` switch to invert `--grep` matches - * fix export of `Nyan` reporter. Closes #495 - * fix escaping of `HTML` suite titles. Closes #486 - * fix `done()` called multiple times with an error test - * change `--grep` - regexp escape the input - -1.2.2 / 2012-06-28 -================== - - * Added 0.8.0 support - -1.2.1 / 2012-06-25 -================== - - * Added `this.test.error(err)` support to after each hooks. Closes #287 - * Added: export top-level suite on global mocha object (mocha.suite). Closes #448 - * Fixed `js` code block format error in markdown reporter - * Fixed deprecation warning when using `path.existsSync` - * Fixed --globals with wildcard - * Fixed chars in nyan when his head moves back - * Remove `--growl` from test/mocha.opts. Closes #289 - -1.2.0 / 2012-06-17 -================== - - * Added `nyan` reporter [Atsuya Takagi] - * Added `mocha init ` to copy client files - * Added "specify" synonym for "it" [domenic] - * Added global leak wildcard support [nathanbowser] - * Fixed runner emitter leak. closes #432 - * Fixed omission of .js extension. Closes #454 - -1.1.0 / 2012-05-30 -================== - - * Added: check each `mocha(1)` arg for directories to walk - * Added `--recursive` [tricknotes] - * Added `context` for BDD [hokaccha] - * Added styling for new clickable titles - * Added clickable suite titles to HTML reporter - * Added warning when strings are thrown as errors - * Changed: green arrows again in HTML reporter styling - * Changed ul/li elements instead of divs for better copy-and-pasting [joliss] - * Fixed issue #325 - add better grep support to js api - * Fixed: save timer references to avoid Sinon interfering. - -1.0.3 / 2012-04-30 -================== - - * Fixed string diff newlines - * Fixed: removed mocha.css target. Closes #401 - -1.0.2 / 2012-04-25 -================== - - * Added HTML reporter duration. Closes #47 - * Fixed: one postMessage event listener [exogen] - * Fixed: allow --globals to be used multiple times. Closes #100 [brendannee] - * Fixed #158: removes jquery include from browser tests - * Fixed grep. Closes #372 [brendannee] - * Fixed #166 - When grepping don't display the empty suites - * Removed test/browser/style.css. Closes #385 - -1.0.1 / 2012-04-04 -================== - - * Fixed `.timeout()` in hooks - * Fixed: allow callback for `mocha.run()` in client version - * Fixed browser hook error display. Closes #361 - -1.0.0 / 2012-03-24 -================== - - * Added js API. Closes #265 - * Added: initial run of tests with `--watch`. Closes #345 - * Added: mark `location` as a global on the CS. Closes #311 - * Added `markdown` reporter (github flavour) - * Added: scrolling menu to coverage.html. Closes #335 - * Added source line to html report for Safari [Tyson Tate] - * Added "min" reporter, useful for `--watch` [Jakub Nešetřil] - * Added support for arbitrary compilers via . Closes #338 [Ian Young] - * Added Teamcity export to lib/reporters/index [Michael Riley] - * Fixed chopping of first char in error reporting. Closes #334 [reported by topfunky] - * Fixed terrible FF / Opera stack traces - -0.14.1 / 2012-03-06 -================== - - * Added lib-cov to _.npmignore_ - * Added reporter to `mocha.run([reporter])` as argument - * Added some margin-top to the HTML reporter - * Removed jQuery dependency - * Fixed `--watch`: purge require cache. Closes #266 - -0.14.0 / 2012-03-01 -================== - - * Added string diff support for terminal reporters - -0.13.0 / 2012-02-23 -================== - - * Added preliminary test coverage support. Closes #5 - * Added `HTMLCov` reporter - * Added `JSONCov` reporter [kunklejr] - * Added `xdescribe()` and `xit()` to the BDD interface. Closes #263 (docs * Changed: make json reporter output pretty json - * Fixed node-inspector support, swapped `--debug` for `debug` to match node. -needed) -Closes #247 - -0.12.1 / 2012-02-14 -================== - - * Added `npm docs mocha` support [TooTallNate] - * Added a `Context` object used for hook and test-case this. Closes #253 - * Fixed `Suite#clone()` `.ctx` reference. Closes #262 - -0.12.0 / 2012-02-02 -================== - - * Added .coffee `--watch` support. Closes #242 - * Added support to `--require` files relative to the CWD. Closes #241 - * Added quick n dirty syntax highlighting. Closes #248 - * Changed: made HTML progress indicator smaller - * Fixed xunit errors attribute [dhendo] - -0.10.2 / 2012-01-21 -================== - - * Fixed suite count in reporter stats. Closes #222 - * Fixed `done()` after timeout error reporting [Phil Sung] - * Changed the 0-based errors to 1 - -0.10.1 / 2012-01-17 -================== - - * Added support for node 0.7.x - * Fixed absolute path support. Closes #215 [kompiro] - * Fixed `--no-colors` option [Jussi Virtanen] - * Fixed Arial CSS typo in the correct file - -0.10.0 / 2012-01-13 -================== - - * Added `-b, --bail` to exit on first exception [guillermo] - * Added support for `-gc` / `--expose-gc` [TooTallNate] - * Added `qunit`-inspired interface - * Added MIT LICENSE. Closes #194 - * Added: `--watch` all .js in the CWD. Closes #139 - * Fixed `self.test` reference in runner. Closes #189 - * Fixed double reporting of uncaught exceptions after timeout. Closes #195 - -0.8.2 / 2012-01-05 -================== - - * Added test-case context support. Closes #113 - * Fixed exit status. Closes #187 - * Update commander. Closes #190 - -0.8.1 / 2011-12-30 -================== - - * Fixed reporting of uncaught exceptions. Closes #183 - * Fixed error message defaulting [indutny] - * Changed mocha(1) from bash to node for windows [Nathan Rajlich] - -0.8.0 / 2011-12-28 -================== - - * Added `XUnit` reporter [FeeFighters/visionmedia] - * Added `say(1)` notification support [Maciej Małecki] - * Changed: fail when done() is invoked with a non-Error. Closes #171 - * Fixed `err.stack`, defaulting to message. Closes #180 - * Fixed: `make tm` mkdir -p the dest. Closes #137 - * Fixed mocha(1) --help bin name - * Fixed `-d` for `--debug` support - -0.7.1 / 2011-12-22 -================== - - * Removed `mocha-debug(1)`, use `mocha --debug` - * Fixed CWD relative requires - * Fixed growl issue on windows [Raynos] - * Fixed: platform specific line endings [TooTallNate] - * Fixed: escape strings in HTML reporter. Closes #164 - -0.7.0 / 2011-12-18 -================== - - * Added support for IE{7,8} [guille] - * Changed: better browser nextTick implementation [guille] - -0.6.0 / 2011-12-18 -================== - - * Added setZeroTimeout timeout for browser (nicer stack traces). Closes #153 - * Added "view source" on hover for HTML reporter to make it obvious - * Changed: replace custom growl with growl lib - * Fixed duplicate reporting for HTML reporter. Closes #154 - * Fixed silent hook errors in the HTML reporter. Closes #150 - -0.5.0 / 2011-12-14 -================== - - * Added: push node_modules directory onto module.paths for relative require Closes #93 - * Added teamcity reporter [blindsey] - * Fixed: recover from uncaught exceptions for tests. Closes #94 - * Fixed: only emit "test end" for uncaught within test, not hook - -0.4.0 / 2011-12-14 -================== - - * Added support for test-specific timeouts via `this.timeout(0)`. Closes #134 - * Added guillermo's client-side EventEmitter. Closes #132 - * Added progress indicator to the HTML reporter - * Fixed slow browser tests. Closes #135 - * Fixed "suite" color for light terminals - * Fixed `require()` leak spotted by [guillermo] - -0.3.6 / 2011-12-09 -================== - - * Removed suite merging (for now) - -0.3.5 / 2011-12-08 -================== - - * Added support for `window.onerror` [guillermo] - * Fixed: clear timeout on uncaught exceptions. Closes #131 [guillermo] - * Added `mocha.css` to PHONY list. - * Added `mocha.js` to PHONY list. - -0.3.4 / 2011-12-08 -================== - - * Added: allow `done()` to be called with non-Error - * Added: return Runner from `mocha.run()`. Closes #126 - * Fixed: run afterEach even on failures. Closes #125 - * Fixed clobbering of current runnable. Closes #121 - -0.3.3 / 2011-12-08 -================== - - * Fixed hook timeouts. Closes #120 - * Fixed uncaught exceptions in hooks - -0.3.2 / 2011-12-05 -================== - - * Fixed weird reporting when `err.message` is not present - -0.3.1 / 2011-12-04 -================== - - * Fixed hook event emitter leak. Closes #117 - * Fixed: export `Spec` constructor. Closes #116 - -0.3.0 / 2011-12-04 -================== - - * Added `-w, --watch`. Closes #72 - * Added `--ignore-leaks` to ignore global leak checking - * Added browser `?grep=pattern` support - * Added `--globals ` to specify accepted globals. Closes #99 - * Fixed `mocha-debug(1)` on some systems. Closes #232 - * Fixed growl total, use `runner.total` - -0.2.0 / 2011-11-30 -================== - - * Added `--globals ` to specify accepted globals. Closes #99 - * Fixed funky highlighting of messages. Closes #97 - * Fixed `mocha-debug(1)`. Closes #232 - * Fixed growl total, use runner.total - -0.1.0 / 2011-11-29 -================== - - * Added `suiteSetup` and `suiteTeardown` to TDD interface [David Henderson] - * Added growl icons. Closes #84 - * Fixed coffee-script support - -0.0.8 / 2011-11-25 -================== - - * Fixed: use `Runner#total` for accurate reporting - -0.0.7 / 2011-11-25 -================== - - * Added `Hook` - * Added `Runnable` - * Changed: `Test` is `Runnable` - * Fixed global leak reporting in hooks - * Fixed: > 2 calls to done() only report the error once - * Fixed: clear timer on failure. Closes #80 - -0.0.6 / 2011-11-25 -================== - - * Fixed return on immediate async error. Closes #80 - -0.0.5 / 2011-11-24 -================== - - * Fixed: make mocha.opts whitespace less picky [kkaefer] - -0.0.4 / 2011-11-24 -================== - - * Added `--interfaces` - * Added `--reporters` - * Added `-c, --colors`. Closes #69 - * Fixed hook timeouts - -0.0.3 / 2011-11-23 -================== - - * Added `-C, --no-colors` to explicitly disable - * Added coffee-script support - -0.0.2 / 2011-11-22 -================== - - * Fixed global leak detection due to Safari bind() change - * Fixed: escape html entities in Doc reporter - * Fixed: escape html entities in HTML reporter - * Fixed pending test support for HTML reporter. Closes #66 - -0.0.1 / 2011-11-22 -================== - - * Added `--timeout` second shorthand support, ex `--timeout 3s`. - * Fixed "test end" event for uncaughtExceptions. Closes #61 - -0.0.1-alpha6 / 2011-11-19 -================== - - * Added travis CI support (needs enabling when public) - * Added preliminary browser support - * Added `make mocha.css` target. Closes #45 - * Added stack trace to TAP errors. Closes #52 - * Renamed tearDown to teardown. Closes #49 - * Fixed: cascading hooksc. Closes #30 - * Fixed some colors for non-tty - * Fixed errors thrown in sync test-cases due to nextTick - * Fixed Base.window.width... again give precedence to 0.6.x - -0.0.1-alpha5 / 2011-11-17 -================== - - * Added `doc` reporter. Closes #33 - * Added suite merging. Closes #28 - * Added TextMate bundle and `make tm`. Closes #20 - -0.0.1-alpha4 / 2011-11-15 -================== - - * Fixed getWindowSize() for 0.4.x - -0.0.1-alpha3 / 2011-11-15 -================== - - * Added `-s, --slow ` to specify "slow" test threshold - * Added `mocha-debug(1)` - * Added `mocha.opts` support. Closes #31 - * Added: default [files] to _test/*.js_ - * Added protection against multiple calls to `done()`. Closes #35 - * Changed: bright yellow for slow Dot reporter tests - -0.0.1-alpha1 / 2011-11-08 -================== - - * Missed this one :) - -0.0.1-alpha1 / 2011-11-08 -================== - - * Initial release diff --git a/build/node_modules/mocha/LICENSE b/build/node_modules/mocha/LICENSE index ca47f261..5c622532 100644 --- a/build/node_modules/mocha/LICENSE +++ b/build/node_modules/mocha/LICENSE @@ -1,6 +1,6 @@ (The MIT License) -Copyright (c) 2011-2015 TJ Holowaychuk +Copyright (c) 2011-2022 OpenJS Foundation and contributors, https://openjsf.org Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/build/node_modules/mocha/README.md b/build/node_modules/mocha/README.md index 44692d35..0e5b677e 100644 --- a/build/node_modules/mocha/README.md +++ b/build/node_modules/mocha/README.md @@ -1,11 +1,70 @@ -[![Build Status](https://api.travis-ci.org/mochajs/mocha.svg?branch=master)](http://travis-ci.org/mochajs/mocha) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mochajs/mocha?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +

+ Mocha test framework +

- [![Mocha test framework](http://f.cl.ly/items/3l1k0n2A1U3M1I1L210p/Screen%20Shot%202012-02-24%20at%202.21.43%20PM.png)](http://mochajs.org) +

☕️ Simple, flexible, fun JavaScript test framework for Node.js & The Browser ☕️

- Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://mochajs.org). +

+GitHub Actions Build Status +Coverage Status +FOSSA Status +Gitter +OpenCollective +OpenCollective +

+ +

+NPM Version +Node Version +

+ +


Mocha Browser Support h/t SauceLabs

## Links - - [Google Group](http://groups.google.com/group/mochajs) - - [Wiki](https://github.com/mochajs/mocha/wiki) - - Mocha [Extensions and reporters](https://github.com/mochajs/mocha/wiki) +- **[Documentation](https://mochajs.org/)** +- **[Release Notes / History / Changes](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)** +- [Code of Conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) +- [Contributing](https://github.com/mochajs/mocha/blob/master/.github/CONTRIBUTING.md) +- [Gitter Chatroom](https://gitter.im/mochajs/mocha) (ask questions here!) +- [Issue Tracker](https://github.com/mochajs/mocha/issues) + +## Backers + +[Become a backer](https://opencollective.com/mochajs) and show your support to our open source project on [our site](https://mochajs.org/#backers). + + + +## Sponsors + +Does your company use Mocha? Ask your manager or marketing team if your company would be interested in supporting our project. Support will allow the maintainers to dedicate more time for maintenance and new features for everyone. Also, your company's logo will show [on GitHub](https://github.com/mochajs/mocha#readme) and on [our site](https://mochajs.org#sponsors) - who doesn't want a little extra exposure? [Here's the info](https://opencollective.com/mochajs). + +[![MochaJS Sponsor](https://opencollective.com/mochajs/tiers/sponsors/0/avatar)](https://opencollective.com/mochajs/tiers/sponsors/0/website) +[![MochaJS Sponsor](https://opencollective.com/mochajs/tiers/sponsors/1/avatar)](https://opencollective.com/mochajs/tiers/sponsors/1/website) +[![MochaJS Sponsor](https://opencollective.com/mochajs/tiers/sponsors/2/avatar)](https://opencollective.com/mochajs/tiers/sponsors/2/website) +[![MochaJS Sponsor](https://opencollective.com/mochajs/tiers/sponsors/3/avatar)](https://opencollective.com/mochajs/tiers/sponsors/3/website) + +## Development + +You might want to know that: + +- Mocha is one of the _most-depended-upon_ modules on npm (source: [libraries.io](https://libraries.io/search?order=desc&platforms=NPM&sort=dependents_count)), and +- Mocha is an _independent_ open-source project, maintained exclusively by volunteers. + +You might want to help: + +- New to contributing to Mocha? Check out this list of [good first issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-issue) +- Mocha could use a hand with [these issues](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) +- The [maintainer's handbook](https://github.com/mochajs/mocha/blob/master/MAINTAINERS.md) explains how things get done + +Finally, come [chat with the maintainers](https://gitter.im/mochajs/contributors) on Gitter if you want to help with: + +- Triaging issues, answering questions +- Review, merging, and closing pull requests +- Other project-maintenance-y things + +## License + +Copyright 2011-2022 OpenJS Foundation and contributors. Licensed [MIT](https://github.com/mochajs/mocha/blob/master/LICENSE). + +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha?ref=badge_large) diff --git a/build/node_modules/mocha/images/error.png b/build/node_modules/mocha/assets/growl/error.png similarity index 100% rename from build/node_modules/mocha/images/error.png rename to build/node_modules/mocha/assets/growl/error.png diff --git a/build/node_modules/mocha/images/ok.png b/build/node_modules/mocha/assets/growl/ok.png similarity index 100% rename from build/node_modules/mocha/images/ok.png rename to build/node_modules/mocha/assets/growl/ok.png diff --git a/build/node_modules/mocha/bin/.eslintrc b/build/node_modules/mocha/bin/.eslintrc deleted file mode 100644 index db742463..00000000 --- a/build/node_modules/mocha/bin/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ ---- -rules: - no-process-exit: 0 diff --git a/build/node_modules/mocha/bin/_mocha b/build/node_modules/mocha/bin/_mocha index f8068835..2ea83174 100755 --- a/build/node_modules/mocha/bin/_mocha +++ b/build/node_modules/mocha/bin/_mocha @@ -1,489 +1,10 @@ #!/usr/bin/env node +'use strict'; /** - * Module dependencies. + * This file remains for backwards compatibility only. + * Don't put stuff in this file. + * @see module:lib/cli */ -var program = require('commander'), - path = require('path'), - fs = require('fs'), - resolve = path.resolve, - exists = fs.existsSync || path.existsSync, - Mocha = require('../'), - utils = Mocha.utils, - join = path.join, - cwd = process.cwd(), - getOptions = require('./options'), - mocha = new Mocha; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date - , setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; - -/** - * Files. - */ - -var files = []; - -/** - * Globals. - */ - -var globals = []; - -/** - * Requires. - */ - -var requires = []; - -/** - * Images. - */ - -var images = { - fail: __dirname + '/../images/error.png' - , pass: __dirname + '/../images/ok.png' -}; - -// options - -program - .version(JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version) - .usage('[debug] [options] [files]') - .option('-A, --async-only', "force all tests to take a callback (async) or return a promise") - .option('-c, --colors', 'force enabling of colors') - .option('-C, --no-colors', 'force disabling of colors') - .option('-G, --growl', 'enable growl notification support') - .option('-O, --reporter-options ', 'reporter-specific options') - .option('-R, --reporter ', 'specify the reporter to use', 'spec') - .option('-S, --sort', "sort test files") - .option('-b, --bail', "bail after first test failure") - .option('-d, --debug', "enable node's debugger, synonym for node --debug") - .option('-g, --grep ', 'only run tests matching ') - .option('-f, --fgrep ', 'only run tests containing ') - .option('-gc, --expose-gc', 'expose gc extension') - .option('-i, --invert', 'inverts --grep and --fgrep matches') - .option('-r, --require ', 'require the given module') - .option('-s, --slow ', '"slow" test threshold in milliseconds [75]') - .option('-t, --timeout ', 'set test-case timeout in milliseconds [2000]') - .option('-u, --ui ', 'specify user-interface (bdd|tdd|exports)', 'bdd') - .option('-w, --watch', 'watch files for changes') - .option('--check-leaks', 'check for global variable leaks') - .option('--full-trace', 'display the full stack trace') - .option('--compilers :,...', 'use the given module(s) to compile files', list, []) - .option('--debug-brk', "enable node's debugger breaking on the first line") - .option('--globals ', 'allow the given comma-delimited global [names]', list, []) - .option('--es_staging', 'enable all staged features') - .option('--harmony<_classes,_generators,...>', 'all node --harmony* flags are available') - .option('--inline-diffs', 'display actual/expected differences inline within each string') - .option('--interfaces', 'display available interfaces') - .option('--no-deprecation', 'silence deprecation warnings') - .option('--no-exit', 'require a clean shutdown of the event loop: mocha will not call process.exit') - .option('--no-timeouts', 'disables timeouts, given implicitly with --debug') - .option('--opts ', 'specify opts path', 'test/mocha.opts') - .option('--prof', 'log statistical profiling information') - .option('--recursive', 'include sub directories') - .option('--reporters', 'display available reporters') - .option('--throw-deprecation', 'throw an exception anytime a deprecated function is used') - .option('--trace', 'trace function calls') - .option('--trace-deprecation', 'show stack traces on deprecations') - .option('--watch-extensions ,...', 'additional extensions to monitor with --watch', list, []) - .option('--delay', 'wait for async suite definition') - -program.name = 'mocha'; - -// init command - -program - .command('init ') - .description('initialize a client-side mocha setup at ') - .action(function(path){ - var mkdir = require('mkdirp'); - mkdir.sync(path); - var css = fs.readFileSync(join(__dirname, '..', 'mocha.css')); - var js = fs.readFileSync(join(__dirname, '..', 'mocha.js')); - var tmpl = fs.readFileSync(join(__dirname, '..', 'lib/template.html')); - fs.writeFileSync(join(path, 'mocha.css'), css); - fs.writeFileSync(join(path, 'mocha.js'), js); - fs.writeFileSync(join(path, 'tests.js'), ''); - fs.writeFileSync(join(path, 'index.html'), tmpl); - process.exit(0); - }); - -// --globals - -program.on('globals', function(val){ - globals = globals.concat(list(val)); -}); - -// --reporters - -program.on('reporters', function(){ - console.log(); - console.log(' dot - dot matrix'); - console.log(' doc - html documentation'); - console.log(' spec - hierarchical spec list'); - console.log(' json - single json object'); - console.log(' progress - progress bar'); - console.log(' list - spec-style listing'); - console.log(' tap - test-anything-protocol'); - console.log(' landing - unicode landing strip'); - console.log(' xunit - xunit reporter'); - console.log(' html-cov - HTML test coverage'); - console.log(' json-cov - JSON test coverage'); - console.log(' min - minimal reporter (great with --watch)'); - console.log(' json-stream - newline delimited json events'); - console.log(' markdown - markdown documentation (github flavour)'); - console.log(' nyan - nyan cat!'); - console.log(); - process.exit(); -}); - -// --interfaces - -program.on('interfaces', function(){ - console.log(''); - console.log(' bdd'); - console.log(' tdd'); - console.log(' qunit'); - console.log(' exports'); - console.log(''); - process.exit(); -}); - -// -r, --require - -module.paths.push(cwd, join(cwd, 'node_modules')); - -program.on('require', function(mod){ - var abs = exists(mod) || exists(mod + '.js'); - if (abs) mod = resolve(mod); - requires.push(mod); -}); - -// load mocha.opts into process.argv - -getOptions(); - -// parse args - -program.parse(process.argv); - -// infinite stack traces - -Error.stackTraceLimit = Infinity; // TODO: config - -// reporter options - -var reporterOptions = {}; -if (program.reporterOptions !== undefined) { - program.reporterOptions.split(",").forEach(function(opt) { - var L = opt.split("="); - if (L.length > 2 || L.length === 0) { - throw new Error("invalid reporter option '" + opt + "'"); - } else if (L.length === 2) { - reporterOptions[L[0]] = L[1]; - } else { - reporterOptions[L[0]] = true; - } - }); -} - -// reporter - -mocha.reporter(program.reporter, reporterOptions); - -// interface - -mocha.ui(program.ui); - -// load reporter - -try { - Reporter = require('../lib/reporters/' + program.reporter); -} catch (err) { - try { - Reporter = require(program.reporter); - } catch (err) { - throw new Error('reporter "' + program.reporter + '" does not exist'); - } -} - -// --no-colors - -if (!program.colors) mocha.useColors(false); - -// --colors - -if (~process.argv.indexOf('--colors') || - ~process.argv.indexOf('-c')) { - mocha.useColors(true); -} - -// --inline-diffs - -if (program.inlineDiffs) mocha.useInlineDiffs(true); - -// --slow - -if (program.slow) mocha.suite.slow(program.slow); - -// --no-timeouts - -if (!program.timeouts) mocha.enableTimeouts(false); - -// --timeout - -if (program.timeout) mocha.suite.timeout(program.timeout); - -// --bail - -mocha.suite.bail(program.bail); - -// --grep - -if (program.grep) mocha.grep(new RegExp(program.grep)); - -// --fgrep - -if (program.fgrep) mocha.grep(program.fgrep); - -// --invert - -if (program.invert) mocha.invert(); - -// --check-leaks - -if (program.checkLeaks) mocha.checkLeaks(); - -// --stack-trace - -if(program.fullTrace) mocha.fullTrace(); - -// --growl - -if (program.growl) mocha.growl(); - -// --async-only - -if (program.asyncOnly) mocha.asyncOnly(); - -// --delay - -if (program.delay) mocha.delay(); - -// --globals - -mocha.globals(globals); - -// custom compiler support - -var extensions = ['js']; -program.compilers.forEach(function(c) { - var compiler = c.split(':') - , ext = compiler[0] - , mod = compiler[1]; - - if (mod[0] == '.') mod = join(process.cwd(), mod); - require(mod); - extensions.push(ext); - program.watchExtensions.push(ext); -}); - -// requires - -requires.forEach(function(mod) { - require(mod); -}); - -//args - -var args = program.args; - -// default files to test/*.{js,coffee} - -if (!args.length) args.push('test'); - -args.forEach(function(arg){ - files = files.concat(utils.lookupFiles(arg, extensions, program.recursive)); -}); - -// resolve - -files = files.map(function(path){ - return resolve(path); -}); - -if (program.sort) { - files.sort(); -} - -// --watch - -var runner; -if (program.watch) { - console.log(); - hideCursor(); - process.on('SIGINT', function(){ - showCursor(); - console.log('\n'); - process.exit(); - }); - - - var watchFiles = utils.files(cwd, [ 'js' ].concat(program.watchExtensions)); - var runAgain = false; - - function loadAndRun() { - try { - mocha.files = files; - runAgain = false; - runner = mocha.run(function(){ - runner = null; - if (runAgain) { - rerun(); - } - }); - } catch(e) { - console.log(e.stack); - } - } - - function purge() { - watchFiles.forEach(function(file){ - delete require.cache[file]; - }); - } - - loadAndRun(); - - function rerun() { - purge(); - stop() - if (!program.grep) - mocha.grep(null); - mocha.suite = mocha.suite.clone(); - mocha.suite.ctx = new Mocha.Context; - mocha.ui(program.ui); - loadAndRun(); - } - - utils.watch(watchFiles, function(){ - runAgain = true; - if (runner) { - runner.abort(); - } else { - rerun(); - } - }); - -} else { - -// load - - mocha.files = files; - runner = mocha.run(program.exit ? exit : exitLater); - -} - -function exitLater(code) { - process.on('exit', function() { process.exit(code) }) -} - -function exit(code) { - // flush output for Node.js Windows pipe bug - // https://github.com/joyent/node/issues/6247 is just one bug example - // https://github.com/visionmedia/mocha/issues/333 has a good discussion - function done() { - if (!(draining--)) process.exit(code); - } - - var draining = 0; - var streams = [process.stdout, process.stderr]; - - streams.forEach(function(stream){ - // submit empty write request and wait for completion - draining += 1; - stream.write('', done); - }); - - done(); -} - -process.on('SIGINT', function() { runner.abort(); }) - -// enable growl notifications - -function growl(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function(){ - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: images.fail }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha' - , title: 'Passed' - , image: images.pass - }); - } - }); -} - -/** - * Parse list. - */ - -function list(str) { - return str.split(/ *, */); -} - -/** - * Hide the cursor. - */ - -function hideCursor(){ - process.stdout.write('\u001b[?25l'); -} - -/** - * Show the cursor. - */ - -function showCursor(){ - process.stdout.write('\u001b[?25h'); -} - -/** - * Stop play()ing. - */ - -function stop() { - process.stdout.write('\u001b[2K'); - clearInterval(play.timer); -} - -/** - * Play the given array of strings. - */ - -function play(arr, interval) { - var len = arr.length - , interval = interval || 100 - , i = 0; - - play.timer = setInterval(function(){ - var str = arr[i++ % len]; - process.stdout.write('\u001b[0G' + str); - }, interval); -} +require('../lib/cli').main(); diff --git a/build/node_modules/mocha/bin/mocha b/build/node_modules/mocha/bin/mocha index 031ef56b..fb58e65f 100755 --- a/build/node_modules/mocha/bin/mocha +++ b/build/node_modules/mocha/bin/mocha @@ -1,64 +1,142 @@ #!/usr/bin/env node +'use strict'; + +/** + * This wrapper executable checks for known node flags and appends them when found, + * before invoking the "real" executable (`lib/cli/cli.js`) + * + * @module bin/mocha + * @private + */ + +const {loadOptions} = require('../lib/cli/options'); +const { + unparseNodeFlags, + isNodeFlag, + impliesNoTimeouts +} = require('../lib/cli/node-flags'); +const unparse = require('yargs-unparser'); +const debug = require('debug')('mocha:cli:mocha'); +const {aliases} = require('../lib/cli/run-option-metadata'); + +const mochaArgs = {}; +const nodeArgs = {}; +let hasInspect = false; + +const opts = loadOptions(process.argv.slice(2)); +debug('loaded opts', opts); + /** - * This tiny wrapper file checks for known node flags and appends them - * when found, before invoking the "real" _mocha(1) executable. + * Given option/command `value`, disable timeouts if applicable + * @param {string} [value] - Value to check + * @ignore */ +const disableTimeouts = value => { + if (impliesNoTimeouts(value)) { + debug('option %s disabled timeouts', value); + mochaArgs.timeout = 0; + } +}; + +/** + * If `value` begins with `v8-` and is not explicitly `v8-options`, remove prefix + * @param {string} [value] - Value to check + * @returns {string} `value` with prefix (maybe) removed + * @ignore + */ +const trimV8Option = value => + value !== 'v8-options' && /^v8-/.test(value) ? value.slice(3) : value; -var spawn = require('child_process').spawn, - path = require('path'), - fs = require('fs'), - args = [path.join(__dirname, '_mocha')]; - -process.argv.slice(2).forEach(function(arg){ - var flag = arg.split('=')[0]; - - switch (flag) { - case '-d': - args.unshift('--debug'); - args.push('--no-timeouts'); - break; - case 'debug': - case '--debug': - case '--debug-brk': - args.unshift(arg); - args.push('--no-timeouts'); - break; - case '-gc': - case '--expose-gc': - args.unshift('--expose-gc'); - break; - case '--gc-global': - case '--es_staging': - case '--no-deprecation': - case '--prof': - case '--throw-deprecation': - case '--trace-deprecation': - case '--allow-natives-syntax': - args.unshift(arg); - break; - default: - if (0 == arg.indexOf('--harmony')) args.unshift(arg); - else if (0 == arg.indexOf('--trace')) args.unshift(arg); - else if (0 == arg.indexOf('--max-old-space-size')) args.unshift(arg); - else args.push(arg); - break; +// sort options into "node" and "mocha" buckets +Object.keys(opts).forEach(opt => { + if (isNodeFlag(opt)) { + nodeArgs[trimV8Option(opt)] = opts[opt]; + } else { + mochaArgs[opt] = opts[opt]; } }); -var proc = spawn(process.execPath, args, { stdio: 'inherit' }); -proc.on('exit', function (code, signal) { - process.on('exit', function(){ - if (signal) { - process.kill(process.pid, signal); - } else { - process.exit(code); - } +// disable 'timeout' for debugFlags +Object.keys(nodeArgs).forEach(opt => disableTimeouts(opt)); +mochaArgs['node-option'] && + mochaArgs['node-option'].forEach(opt => disableTimeouts(opt)); + +// Native debugger handling +// see https://nodejs.org/api/debugger.html#debugger_debugger +// look for 'inspect' that would launch this debugger, +// remove it from Mocha's opts and prepend it to Node's opts. +// A deprecation warning will be printed by node, if applicable. +// (mochaArgs._ are "positional" arguments, not prefixed with - or --) +if (mochaArgs._) { + const i = mochaArgs._.findIndex(val => val === 'inspect'); + if (i > -1) { + mochaArgs._.splice(i, 1); + disableTimeouts('inspect'); + hasInspect = true; + } +} + +if (mochaArgs['node-option'] || Object.keys(nodeArgs).length || hasInspect) { + const {spawn} = require('child_process'); + const mochaPath = require.resolve('../lib/cli/cli.js'); + + const nodeArgv = + (mochaArgs['node-option'] && mochaArgs['node-option'].map(v => '--' + v)) || + unparseNodeFlags(nodeArgs); + + if (hasInspect) nodeArgv.unshift('inspect'); + delete mochaArgs['node-option']; + + debug('final node argv', nodeArgv); + + const args = [].concat( + nodeArgv, + mochaPath, + unparse(mochaArgs, {alias: aliases}) + ); + + debug( + 'forking child process via command: %s %s', + process.execPath, + args.join(' ') + ); + + const proc = spawn(process.execPath, args, { + stdio: 'inherit' }); -}); -// terminate children. -process.on('SIGINT', function () { - proc.kill('SIGINT'); // calls runner.abort() - proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die. -}); + proc.on('exit', (code, signal) => { + process.on('exit', () => { + if (signal) { + process.kill(process.pid, signal); + } else { + process.exit(code); + } + }); + }); + + // terminate children. + process.on('SIGINT', () => { + // XXX: a previous comment said this would abort the runner, but I can't see that it does + // anything with the default runner. + debug('main process caught SIGINT'); + proc.kill('SIGINT'); + // if running in parallel mode, we will have a proper SIGINT handler, so the below won't + // be needed. + if (!args.parallel || args.jobs < 2) { + // win32 does not support SIGTERM, so use next best thing. + if (require('os').platform() === 'win32') { + proc.kill('SIGKILL'); + } else { + // using SIGKILL won't cleanly close the output streams, which can result + // in cut-off text or a befouled terminal. + debug('sending SIGTERM to child process'); + proc.kill('SIGTERM'); + } + } + }); +} else { + debug('running Mocha in-process'); + require('../lib/cli/cli').main([], mochaArgs); +} diff --git a/build/node_modules/mocha/bin/options.js b/build/node_modules/mocha/bin/options.js deleted file mode 100644 index 6e12d516..00000000 --- a/build/node_modules/mocha/bin/options.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Dependencies. - */ - -var fs = require('fs'); - -/** - * Export `getOptions`. - */ - -module.exports = getOptions; - -/** - * Get options. - */ - -function getOptions() { - var optsPath = process.argv.indexOf('--opts') !== -1 - ? process.argv[process.argv.indexOf('--opts') + 1] - : 'test/mocha.opts'; - - try { - var opts = fs.readFileSync(optsPath, 'utf8') - .replace(/\\\s/g, '%20') - .split(/\s/) - .filter(Boolean) - .map(function(value) { - return value.replace(/%20/g, ' '); - }); - - process.argv = process.argv - .slice(0, 2) - .concat(opts.concat(process.argv.slice(2))); - } catch (err) { - // ignore - } -} diff --git a/build/node_modules/mocha/browser-entry.js b/build/node_modules/mocha/browser-entry.js new file mode 100644 index 00000000..67517db3 --- /dev/null +++ b/build/node_modules/mocha/browser-entry.js @@ -0,0 +1,226 @@ +'use strict'; + +/* eslint no-unused-vars: off */ +/* eslint-env commonjs */ + +/** + * Shim process.stdout. + */ + +process.stdout = require('browser-stdout')({label: false}); + +var parseQuery = require('./lib/browser/parse-query'); +var highlightTags = require('./lib/browser/highlight-tags'); +var Mocha = require('./lib/mocha'); + +/** + * Create a Mocha instance. + * + * @return {undefined} + */ + +var mocha = new Mocha({reporter: 'html'}); + +/** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + +var Date = global.Date; +var setTimeout = global.setTimeout; +var setInterval = global.setInterval; +var clearTimeout = global.clearTimeout; +var clearInterval = global.clearInterval; + +var uncaughtExceptionHandlers = []; + +var originalOnerrorHandler = global.onerror; + +/** + * Remove uncaughtException listener. + * Revert to original onerror handler if previously defined. + */ + +process.removeListener = function (e, fn) { + if (e === 'uncaughtException') { + if (originalOnerrorHandler) { + global.onerror = originalOnerrorHandler; + } else { + global.onerror = function () {}; + } + var i = uncaughtExceptionHandlers.indexOf(fn); + if (i !== -1) { + uncaughtExceptionHandlers.splice(i, 1); + } + } +}; + +/** + * Implements listenerCount for 'uncaughtException'. + */ + +process.listenerCount = function (name) { + if (name === 'uncaughtException') { + return uncaughtExceptionHandlers.length; + } + return 0; +}; + +/** + * Implements uncaughtException listener. + */ + +process.on = function (e, fn) { + if (e === 'uncaughtException') { + global.onerror = function (err, url, line) { + fn(new Error(err + ' (' + url + ':' + line + ')')); + return !mocha.options.allowUncaught; + }; + uncaughtExceptionHandlers.push(fn); + } +}; + +process.listeners = function (e) { + if (e === 'uncaughtException') { + return uncaughtExceptionHandlers; + } + return []; +}; + +// The BDD UI is registered by default, but no UI will be functional in the +// browser without an explicit call to the overridden `mocha.ui` (see below). +// Ensure that this default UI does not expose its methods to the global scope. +mocha.suite.removeAllListeners('pre-require'); + +var immediateQueue = []; +var immediateTimeout; + +function timeslice() { + var immediateStart = new Date().getTime(); + while (immediateQueue.length && new Date().getTime() - immediateStart < 100) { + immediateQueue.shift()(); + } + if (immediateQueue.length) { + immediateTimeout = setTimeout(timeslice, 0); + } else { + immediateTimeout = null; + } +} + +/** + * High-performance override of Runner.immediately. + */ + +Mocha.Runner.immediately = function (callback) { + immediateQueue.push(callback); + if (!immediateTimeout) { + immediateTimeout = setTimeout(timeslice, 0); + } +}; + +/** + * Function to allow assertion libraries to throw errors directly into mocha. + * This is useful when running tests in a browser because window.onerror will + * only receive the 'message' attribute of the Error. + */ +mocha.throwError = function (err) { + uncaughtExceptionHandlers.forEach(function (fn) { + fn(err); + }); + throw err; +}; + +/** + * Override ui to ensure that the ui functions are initialized. + * Normally this would happen in Mocha.prototype.loadFiles. + */ + +mocha.ui = function (ui) { + Mocha.prototype.ui.call(this, ui); + this.suite.emit('pre-require', global, null, this); + return this; +}; + +/** + * Setup mocha with the given setting options. + */ + +mocha.setup = function (opts) { + if (typeof opts === 'string') { + opts = {ui: opts}; + } + if (opts.delay === true) { + this.delay(); + } + var self = this; + Object.keys(opts) + .filter(function (opt) { + return opt !== 'delay'; + }) + .forEach(function (opt) { + if (Object.prototype.hasOwnProperty.call(opts, opt)) { + self[opt](opts[opt]); + } + }); + return this; +}; + +/** + * Run mocha, returning the Runner. + */ + +mocha.run = function (fn) { + var options = mocha.options; + mocha.globals('location'); + + var query = parseQuery(global.location.search || ''); + if (query.grep) { + mocha.grep(query.grep); + } + if (query.fgrep) { + mocha.fgrep(query.fgrep); + } + if (query.invert) { + mocha.invert(); + } + + return Mocha.prototype.run.call(mocha, function (err) { + // The DOM Document is not available in Web Workers. + var document = global.document; + if ( + document && + document.getElementById('mocha') && + options.noHighlighting !== true + ) { + highlightTags('code'); + } + if (fn) { + fn(err); + } + }); +}; + +/** + * Expose the process shim. + * https://github.com/mochajs/mocha/pull/916 + */ + +Mocha.process = process; + +/** + * Expose mocha. + */ +global.Mocha = Mocha; +global.mocha = mocha; + +// for bundlers: enable `import {describe, it} from 'mocha'` +// `bdd` interface only +// prettier-ignore +[ + 'describe', 'context', 'it', 'specify', + 'xdescribe', 'xcontext', 'xit', 'xspecify', + 'before', 'beforeEach', 'afterEach', 'after' +].forEach(function(key) { + mocha[key] = global[key]; +}); + +module.exports = mocha; diff --git a/build/node_modules/mocha/index.js b/build/node_modules/mocha/index.js index 169b2717..d2b7d196 100644 --- a/build/node_modules/mocha/index.js +++ b/build/node_modules/mocha/index.js @@ -1,3 +1,3 @@ -module.exports = process.env.COV - ? require('./lib-cov/mocha') - : require('./lib/mocha'); +'use strict'; + +module.exports = require('./lib/mocha'); diff --git a/build/node_modules/mocha/lib/browser/debug.js b/build/node_modules/mocha/lib/browser/debug.js deleted file mode 100644 index ba232896..00000000 --- a/build/node_modules/mocha/lib/browser/debug.js +++ /dev/null @@ -1,4 +0,0 @@ -/* eslint-disable no-unused-vars */ -module.exports = function(type) { - return function() {}; -}; diff --git a/build/node_modules/mocha/lib/browser/diff.js b/build/node_modules/mocha/lib/browser/diff.js deleted file mode 100644 index c084609a..00000000 --- a/build/node_modules/mocha/lib/browser/diff.js +++ /dev/null @@ -1,369 +0,0 @@ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -var JsDiff = (function() { - /*jshint maxparams: 5*/ - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - var Diff = function(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - }; - Diff.prototype = { - diff: function(oldString, newString) { - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return [{ value: newString }]; - } - if (!newString) { - return [{ value: oldString, removed: true }]; - } - if (!oldString) { - return [{ value: newString, added: true }]; - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0 - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) { - return bestPath[0].components; - } - - for (var editLength = 1; editLength <= maxEditLength; editLength++) { - for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) { - var basePath; - var addPath = bestPath[diagonalPath-1], - removePath = bestPath[diagonalPath+1]; - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath-1] = undefined; - } - - var canAdd = addPath && addPath.newPos+1 < newLen; - var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - this.pushComponent(basePath.components, oldString[oldPos], undefined, true); - } else { - basePath = clonePath(addPath); - basePath.newPos++; - this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined); - } - - var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath); - - if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) { - return basePath.components; - } else { - bestPath[diagonalPath] = basePath; - } - } - } - }, - - pushComponent: function(components, value, added, removed) { - var last = components[components.length-1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length-1] = - {value: this.join(last.value, value), added: added, removed: removed }; - } else { - components.push({value: value, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath; - while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) { - newPos++; - oldPos++; - - this.pushComponent(basePath.components, newString[newPos], undefined, undefined); - } - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) { - return true; - } else { - return left === right; - } - }, - join: function(left, right) { - return left + right; - }, - tokenize: function(value) { - return value; - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - LineDiff.tokenize = function(value) { - var retLines = [], - lines = value.split(/^/m); - - for(var i = 0; i < lines.length; i++) { - var line = lines[i], - lastLine = lines[i - 1]; - - // Merge lines that may contain windows new lines - if (line == '\n' && lastLine && lastLine[lastLine.length - 1] === '\r') { - retLines[retLines.length - 1] += '\n'; - } else if (line) { - retLines.push(line); - } - } - - return retLines; - }; - - return { - Diff: Diff, - - diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); }, - diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); }, - diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); }, - diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); }, - - diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - ret.push('Index: ' + fileName); - ret.push('==================================================================='); - ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = LineDiff.diff(oldStr, newStr); - if (!diff[diff.length-1].value) { - diff.pop(); // Remove trailing newline add - } - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - function contextLines(lines) { - return lines.map(function(entry) { return ' ' + entry; }); - } - function eofNL(curRange, i, current) { - var last = diff[diff.length-2], - isLast = i === diff.length-2, - isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed); - - // Figure out if this is the last line for the given file and missing NL - if (!/\n$/.test(current.value) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - if (!oldRangeStart) { - var prev = diff[i-1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; })); - eofNL(curRange, i, current); - - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length-2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize) - + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; newRangeStart = 0; curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'); - var diff = []; - var remEOFNL = false, - addEOFNL = false; - - for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) { - if(diffstr[i][0] === '@') { - var meh = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - diff.unshift({ - start:meh[3], - oldlength:meh[2], - oldlines:[], - newlength:meh[4], - newlines:[] - }); - } else if(diffstr[i][0] === '+') { - diff[0].newlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '-') { - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === ' ') { - diff[0].newlines.push(diffstr[i].substr(1)); - diff[0].oldlines.push(diffstr[i].substr(1)); - } else if(diffstr[i][0] === '\\') { - if (diffstr[i-1][0] === '+') { - remEOFNL = true; - } else if(diffstr[i-1][0] === '-') { - addEOFNL = true; - } - } - } - - var str = oldStr.split('\n'); - for (var i = diff.length - 1; i >= 0; i--) { - var d = diff[i]; - for (var j = 0; j < d.oldlength; j++) { - if(str[d.start-1+j] !== d.oldlines[j]) { - return false; - } - } - Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines)); - } - - if (remEOFNL) { - while (!str[str.length-1]) { - str.pop(); - } - } else if (addEOFNL) { - str.push(''); - } - return str.join('\n'); - }, - - convertChangesToXML: function(changes){ - var ret = []; - for ( var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes){ - var ret = [], change; - for ( var i = 0; i < changes.length; i++) { - change = changes[i]; - ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]); - } - return ret; - } - }; -})(); - -if (typeof module !== 'undefined') { - module.exports = JsDiff; -} diff --git a/build/node_modules/mocha/lib/browser/events.js b/build/node_modules/mocha/lib/browser/events.js deleted file mode 100644 index 31401691..00000000 --- a/build/node_modules/mocha/lib/browser/events.js +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Module exports. - */ - -exports.EventEmitter = EventEmitter; - -/** - * Object#hasOwnProperty reference. - */ -var objToString = Object.prototype.toString; - -/** - * Check if a value is an array. - * - * @api private - * @param {*} val The value to test. - * @return {boolean} true if the value is a boolean, otherwise false. - */ -function isArray(val) { - return objToString.call(val) === '[object Array]'; -} - -/** - * Event emitter constructor. - * - * @api public - */ -function EventEmitter() {} - -/** - * Add a listener. - * - * @api public - * @param {string} name Event name. - * @param {Function} fn Event handler. - * @return {EventEmitter} Emitter instance. - */ -EventEmitter.prototype.on = function(name, fn) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = fn; - } else if (isArray(this.$events[name])) { - this.$events[name].push(fn); - } else { - this.$events[name] = [this.$events[name], fn]; - } - - return this; -}; - -EventEmitter.prototype.addListener = EventEmitter.prototype.on; - -/** - * Adds a volatile listener. - * - * @api public - * @param {string} name Event name. - * @param {Function} fn Event handler. - * @return {EventEmitter} Emitter instance. - */ -EventEmitter.prototype.once = function(name, fn) { - var self = this; - - function on() { - self.removeListener(name, on); - fn.apply(this, arguments); - } - - on.listener = fn; - this.on(name, on); - - return this; -}; - -/** - * Remove a listener. - * - * @api public - * @param {string} name Event name. - * @param {Function} fn Event handler. - * @return {EventEmitter} Emitter instance. - */ -EventEmitter.prototype.removeListener = function(name, fn) { - if (this.$events && this.$events[name]) { - var list = this.$events[name]; - - if (isArray(list)) { - var pos = -1; - - for (var i = 0, l = list.length; i < l; i++) { - if (list[i] === fn || (list[i].listener && list[i].listener === fn)) { - pos = i; - break; - } - } - - if (pos < 0) { - return this; - } - - list.splice(pos, 1); - - if (!list.length) { - delete this.$events[name]; - } - } else if (list === fn || (list.listener && list.listener === fn)) { - delete this.$events[name]; - } - } - - return this; -}; - -/** - * Remove all listeners for an event. - * - * @api public - * @param {string} name Event name. - * @return {EventEmitter} Emitter instance. - */ -EventEmitter.prototype.removeAllListeners = function(name) { - if (name === undefined) { - this.$events = {}; - return this; - } - - if (this.$events && this.$events[name]) { - this.$events[name] = null; - } - - return this; -}; - -/** - * Get all listeners for a given event. - * - * @api public - * @param {string} name Event name. - * @return {EventEmitter} Emitter instance. - */ -EventEmitter.prototype.listeners = function(name) { - if (!this.$events) { - this.$events = {}; - } - - if (!this.$events[name]) { - this.$events[name] = []; - } - - if (!isArray(this.$events[name])) { - this.$events[name] = [this.$events[name]]; - } - - return this.$events[name]; -}; - -/** - * Emit an event. - * - * @api public - * @param {string} name Event name. - * @return {boolean} true if at least one handler was invoked, else false. - */ -EventEmitter.prototype.emit = function(name) { - if (!this.$events) { - return false; - } - - var handler = this.$events[name]; - - if (!handler) { - return false; - } - - var args = Array.prototype.slice.call(arguments, 1); - - if (typeof handler === 'function') { - handler.apply(this, args); - } else if (isArray(handler)) { - var listeners = handler.slice(); - - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i].apply(this, args); - } - } else { - return false; - } - - return true; -}; diff --git a/build/node_modules/mocha/lib/browser/growl.js b/build/node_modules/mocha/lib/browser/growl.js new file mode 100644 index 00000000..29d185de --- /dev/null +++ b/build/node_modules/mocha/lib/browser/growl.js @@ -0,0 +1,169 @@ +'use strict'; + +/** + * Web Notifications module. + * @module Growl + */ + +/** + * Save timer references to avoid Sinon interfering (see GH-237). + */ +var Date = global.Date; +var setTimeout = global.setTimeout; +var EVENT_RUN_END = require('../runner').constants.EVENT_RUN_END; +var isBrowser = require('../utils').isBrowser; + +/** + * Checks if browser notification support exists. + * + * @public + * @see {@link https://caniuse.com/#feat=notifications|Browser support (notifications)} + * @see {@link https://caniuse.com/#feat=promises|Browser support (promises)} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlCapable} + * @return {boolean} whether browser notification support exists + */ +exports.isCapable = function () { + var hasNotificationSupport = 'Notification' in window; + var hasPromiseSupport = typeof Promise === 'function'; + return isBrowser() && hasNotificationSupport && hasPromiseSupport; +}; + +/** + * Implements browser notifications as a pseudo-reporter. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/notification|Notification API} + * @see {@link https://developers.google.com/web/fundamentals/push-notifications/display-a-notification|Displaying a Notification} + * @see {@link Growl#isPermitted} + * @see {@link Mocha#_growl} + * @param {Runner} runner - Runner instance. + */ +exports.notify = function (runner) { + var promise = isPermitted(); + + /** + * Attempt notification. + */ + var sendNotification = function () { + // If user hasn't responded yet... "No notification for you!" (Seinfeld) + Promise.race([promise, Promise.resolve(undefined)]) + .then(canNotify) + .then(function () { + display(runner); + }) + .catch(notPermitted); + }; + + runner.once(EVENT_RUN_END, sendNotification); +}; + +/** + * Checks if browser notification is permitted by user. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission|Notification.permission} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlPermitted} + * @returns {Promise} promise determining if browser notification + * permissible when fulfilled. + */ +function isPermitted() { + var permitted = { + granted: function allow() { + return Promise.resolve(true); + }, + denied: function deny() { + return Promise.resolve(false); + }, + default: function ask() { + return Notification.requestPermission().then(function (permission) { + return permission === 'granted'; + }); + } + }; + + return permitted[Notification.permission](); +} + +/** + * @summary + * Determines if notification should proceed. + * + * @description + * Notification shall not proceed unless `value` is true. + * + * `value` will equal one of: + *
    + *
  • true (from `isPermitted`)
  • + *
  • false (from `isPermitted`)
  • + *
  • undefined (from `Promise.race`)
  • + *
+ * + * @private + * @param {boolean|undefined} value - Determines if notification permissible. + * @returns {Promise} Notification can proceed + */ +function canNotify(value) { + if (!value) { + var why = value === false ? 'blocked' : 'unacknowledged'; + var reason = 'not permitted by user (' + why + ')'; + return Promise.reject(new Error(reason)); + } + return Promise.resolve(); +} + +/** + * Displays the notification. + * + * @private + * @param {Runner} runner - Runner instance. + */ +function display(runner) { + var stats = runner.stats; + var symbol = { + cross: '\u274C', + tick: '\u2705' + }; + var logo = require('../../package.json').notifyLogo; + var _message; + var message; + var title; + + if (stats.failures) { + _message = stats.failures + ' of ' + stats.tests + ' tests failed'; + message = symbol.cross + ' ' + _message; + title = 'Failed'; + } else { + _message = stats.passes + ' tests passed in ' + stats.duration + 'ms'; + message = symbol.tick + ' ' + _message; + title = 'Passed'; + } + + // Send notification + var options = { + badge: logo, + body: message, + dir: 'ltr', + icon: logo, + lang: 'en-US', + name: 'mocha', + requireInteraction: false, + timestamp: Date.now() + }; + var notification = new Notification(title, options); + + // Autoclose after brief delay (makes various browsers act same) + var FORCE_DURATION = 4000; + setTimeout(notification.close.bind(notification), FORCE_DURATION); +} + +/** + * As notifications are tangential to our purpose, just log the error. + * + * @private + * @param {Error} err - Why notification didn't happen. + */ +function notPermitted(err) { + console.error('notification error:', err.message); +} diff --git a/build/node_modules/mocha/lib/browser/highlight-tags.js b/build/node_modules/mocha/lib/browser/highlight-tags.js new file mode 100644 index 00000000..d98896e7 --- /dev/null +++ b/build/node_modules/mocha/lib/browser/highlight-tags.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Highlight the given string of `js`. + * + * @private + * @param {string} js + * @return {string} + */ +function highlight(js) { + return js + .replace(//g, '>') + .replace(/\/\/(.*)/gm, '//$1') + .replace(/('.*?')/gm, '$1') + .replace(/(\d+\.\d+)/gm, '$1') + .replace(/(\d+)/gm, '$1') + .replace( + /\bnew[ \t]+(\w+)/gm, + 'new $1' + ) + .replace( + /\b(function|new|throw|return|var|if|else)\b/gm, + '$1' + ); +} + +/** + * Highlight the contents of tag `name`. + * + * @private + * @param {string} name + */ +module.exports = function highlightTags(name) { + var code = document.getElementById('mocha').getElementsByTagName(name); + for (var i = 0, len = code.length; i < len; ++i) { + code[i].innerHTML = highlight(code[i].innerHTML); + } +}; diff --git a/build/node_modules/mocha/lib/browser/parse-query.js b/build/node_modules/mocha/lib/browser/parse-query.js new file mode 100644 index 00000000..3a7ac1ab --- /dev/null +++ b/build/node_modules/mocha/lib/browser/parse-query.js @@ -0,0 +1,24 @@ +'use strict'; + +/** + * Parse the given `qs`. + * + * @private + * @param {string} qs + * @return {Object} + */ +module.exports = function parseQuery(qs) { + return qs + .replace('?', '') + .split('&') + .reduce(function (obj, pair) { + var i = pair.indexOf('='); + var key = pair.slice(0, i); + var val = pair.slice(++i); + + // Due to how the URLSearchParams API treats spaces + obj[key] = decodeURIComponent(val.replace(/\+/g, '%20')); + + return obj; + }, {}); +}; diff --git a/build/node_modules/mocha/lib/browser/progress.js b/build/node_modules/mocha/lib/browser/progress.js index 3186b6ec..30d45f6a 100644 --- a/build/node_modules/mocha/lib/browser/progress.js +++ b/build/node_modules/mocha/lib/browser/progress.js @@ -1,3 +1,9 @@ +'use strict'; + +/** + @module browser/Progress +*/ + /** * Expose `Progress`. */ @@ -17,11 +23,11 @@ function Progress() { /** * Set progress size to `size`. * - * @api public + * @public * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.size = function(size) { +Progress.prototype.size = function (size) { this._size = size; return this; }; @@ -29,11 +35,11 @@ Progress.prototype.size = function(size) { /** * Set text to `text`. * - * @api public + * @public * @param {string} text * @return {Progress} Progress instance. */ -Progress.prototype.text = function(text) { +Progress.prototype.text = function (text) { this._text = text; return this; }; @@ -41,11 +47,11 @@ Progress.prototype.text = function(text) { /** * Set font size to `size`. * - * @api public + * @public * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.fontSize = function(size) { +Progress.prototype.fontSize = function (size) { this._fontSize = size; return this; }; @@ -56,7 +62,7 @@ Progress.prototype.fontSize = function(size) { * @param {string} family * @return {Progress} Progress instance. */ -Progress.prototype.font = function(family) { +Progress.prototype.font = function (family) { this._font = family; return this; }; @@ -67,7 +73,7 @@ Progress.prototype.font = function(family) { * @param {number} n * @return {Progress} Progress instance. */ -Progress.prototype.update = function(n) { +Progress.prototype.update = function (n) { this.percent = n; return this; }; @@ -78,7 +84,7 @@ Progress.prototype.update = function(n) { * @param {CanvasRenderingContext2d} ctx * @return {Progress} Progress instance. */ -Progress.prototype.draw = function(ctx) { +Progress.prototype.draw = function (ctx) { try { var percent = Math.min(this.percent, 100); var size = this._size; @@ -110,7 +116,7 @@ Progress.prototype.draw = function(ctx) { var w = ctx.measureText(text).width; ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1); - } catch (err) { + } catch (ignore) { // don't fail if we can't render progress } return this; diff --git a/build/node_modules/mocha/lib/browser/template.html b/build/node_modules/mocha/lib/browser/template.html new file mode 100644 index 00000000..4ebd4af4 --- /dev/null +++ b/build/node_modules/mocha/lib/browser/template.html @@ -0,0 +1,20 @@ + + + + + Mocha + + + + +
+ + + + + + diff --git a/build/node_modules/mocha/lib/browser/tty.js b/build/node_modules/mocha/lib/browser/tty.js deleted file mode 100644 index 840d6699..00000000 --- a/build/node_modules/mocha/lib/browser/tty.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.isatty = function isatty() { - return true; -}; - -exports.getWindowSize = function getWindowSize() { - if ('innerHeight' in global) { - return [global.innerHeight, global.innerWidth]; - } - // In a Web Worker, the DOM Window is not available. - return [640, 480]; -}; diff --git a/build/node_modules/mocha/lib/cli/cli.js b/build/node_modules/mocha/lib/cli/cli.js new file mode 100755 index 00000000..977a3415 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/cli.js @@ -0,0 +1,89 @@ +#!/usr/bin/env node + +'use strict'; + +/** + * Contains CLI entry point and public API for programmatic usage in Node.js. + * - Option parsing is handled by {@link https://npm.im/yargs yargs}. + * - If executed via `node`, this module will run {@linkcode module:lib/cli.main main()}. + * @public + * @module lib/cli + */ + +const debug = require('debug')('mocha:cli:cli'); +const symbols = require('log-symbols'); +const yargs = require('yargs/yargs'); +const path = require('path'); +const { + loadRc, + loadPkgRc, + loadOptions, + YARGS_PARSER_CONFIG +} = require('./options'); +const lookupFiles = require('./lookup-files'); +const commands = require('./commands'); +const ansi = require('ansi-colors'); +const {repository, homepage, version, gitter} = require('../../package.json'); +const {cwd} = require('../utils'); + +/** + * - Accepts an `Array` of arguments + * - Modifies {@link https://nodejs.org/api/modules.html#modules_module_paths Node.js' search path} for easy loading of consumer modules + * - Sets {@linkcode https://nodejs.org/api/errors.html#errors_error_stacktracelimit Error.stackTraceLimit} to `Infinity` + * @public + * @summary Mocha's main command-line entry-point. + * @param {string[]} argv - Array of arguments to parse, or by default the lovely `process.argv.slice(2)` + * @param {object} [mochaArgs] - Object of already parsed Mocha arguments (by bin/mocha) + */ +exports.main = (argv = process.argv.slice(2), mochaArgs) => { + debug('entered main with raw args', argv); + // ensure we can require() from current working directory + if (typeof module.paths !== 'undefined') { + module.paths.push(cwd(), path.resolve('node_modules')); + } + + Error.stackTraceLimit = Infinity; // configurable via --stack-trace-limit? + + var args = mochaArgs || loadOptions(argv); + + yargs() + .scriptName('mocha') + .command(commands.run) + .command(commands.init) + .updateStrings({ + 'Positionals:': 'Positional Arguments', + 'Options:': 'Other Options', + 'Commands:': 'Commands' + }) + .fail((msg, err, yargs) => { + debug('caught error sometime before command handler: %O', err); + yargs.showHelp(); + console.error(`\n${symbols.error} ${ansi.red('ERROR:')} ${msg}`); + process.exitCode = 1; + }) + .help('help', 'Show usage information & exit') + .alias('help', 'h') + .version('version', 'Show version number & exit', version) + .alias('version', 'V') + .wrap(process.stdout.columns ? Math.min(process.stdout.columns, 80) : 80) + .epilog( + `Mocha Resources + Chat: ${ansi.magenta(gitter)} + GitHub: ${ansi.blue(repository.url)} + Docs: ${ansi.yellow(homepage)} + ` + ) + .parserConfiguration(YARGS_PARSER_CONFIG) + .config(args) + .parse(args._); +}; + +exports.lookupFiles = lookupFiles; +exports.loadOptions = loadOptions; +exports.loadPkgRc = loadPkgRc; +exports.loadRc = loadRc; + +// allow direct execution +if (require.main === module) { + exports.main(); +} diff --git a/build/node_modules/mocha/lib/cli/collect-files.js b/build/node_modules/mocha/lib/cli/collect-files.js new file mode 100644 index 00000000..39934cbf --- /dev/null +++ b/build/node_modules/mocha/lib/cli/collect-files.js @@ -0,0 +1,92 @@ +'use strict'; + +const path = require('path'); +const ansi = require('ansi-colors'); +const debug = require('debug')('mocha:cli:run:helpers'); +const minimatch = require('minimatch'); +const {NO_FILES_MATCH_PATTERN} = require('../errors').constants; +const lookupFiles = require('./lookup-files'); +const {castArray} = require('../utils'); + +/** + * Exports a function that collects test files from CLI parameters. + * @see module:lib/cli/run-helpers + * @see module:lib/cli/watch-run + * @module + * @private + */ + +/** + * Smash together an array of test files in the correct order + * @param {FileCollectionOptions} [opts] - Options + * @returns {string[]} List of files to test + * @private + */ +module.exports = ({ + ignore, + extension, + file: fileArgs, + recursive, + sort, + spec +} = {}) => { + const unmatched = []; + const specFiles = spec.reduce((specFiles, arg) => { + try { + const moreSpecFiles = castArray(lookupFiles(arg, extension, recursive)) + .filter(filename => + ignore.every(pattern => !minimatch(filename, pattern)) + ) + .map(filename => path.resolve(filename)); + return [...specFiles, ...moreSpecFiles]; + } catch (err) { + if (err.code === NO_FILES_MATCH_PATTERN) { + unmatched.push({message: err.message, pattern: err.pattern}); + return specFiles; + } + + throw err; + } + }, []); + + // ensure we don't sort the stuff from fileArgs; order is important! + if (sort) { + specFiles.sort(); + } + + // add files given through --file to be ran first + const files = [ + ...fileArgs.map(filepath => path.resolve(filepath)), + ...specFiles + ]; + debug('test files (in order): ', files); + + if (!files.length) { + // give full message details when only 1 file is missing + const noneFoundMsg = + unmatched.length === 1 + ? `Error: No test files found: ${JSON.stringify(unmatched[0].pattern)}` // stringify to print escaped characters raw + : 'Error: No test files found'; + console.error(ansi.red(noneFoundMsg)); + process.exit(1); + } else { + // print messages as a warning + unmatched.forEach(warning => { + console.warn(ansi.yellow(`Warning: ${warning.message}`)); + }); + } + + return files; +}; + +/** + * An object to configure how Mocha gathers test files + * @private + * @typedef {Object} FileCollectionOptions + * @property {string[]} extension - File extensions to use + * @property {string[]} spec - Files, dirs, globs to run + * @property {string[]} ignore - Files, dirs, globs to ignore + * @property {string[]} file - List of additional files to include + * @property {boolean} recursive - Find files recursively + * @property {boolean} sort - Sort test files + */ diff --git a/build/node_modules/mocha/lib/cli/commands.js b/build/node_modules/mocha/lib/cli/commands.js new file mode 100644 index 00000000..eb10c683 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/commands.js @@ -0,0 +1,13 @@ +'use strict'; + +/** + * Exports Yargs commands + * @see https://git.io/fpJ0G + * @private + * @module + */ + +exports.init = require('./init'); + +// default command +exports.run = require('./run'); diff --git a/build/node_modules/mocha/lib/cli/config.js b/build/node_modules/mocha/lib/cli/config.js new file mode 100644 index 00000000..ac719833 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/config.js @@ -0,0 +1,100 @@ +'use strict'; + +/** + * Responsible for loading / finding Mocha's "rc" files. + * + * @private + * @module + */ + +const fs = require('fs'); +const path = require('path'); +const debug = require('debug')('mocha:cli:config'); +const findUp = require('find-up'); +const {createUnparsableFileError} = require('../errors'); +const utils = require('../utils'); + +/** + * These are the valid config files, in order of precedence; + * e.g., if `.mocharc.js` is present, then `.mocharc.yaml` and the rest + * will be ignored. + * The user should still be able to explicitly specify a file. + * @private + */ +exports.CONFIG_FILES = [ + '.mocharc.cjs', + '.mocharc.js', + '.mocharc.yaml', + '.mocharc.yml', + '.mocharc.jsonc', + '.mocharc.json' +]; + +/** + * Parsers for various config filetypes. Each accepts a filepath and + * returns an object (but could throw) + */ +const parsers = (exports.parsers = { + yaml: filepath => require('js-yaml').load(fs.readFileSync(filepath, 'utf8')), + js: filepath => { + let cwdFilepath; + try { + debug('parsers: load cwd-relative path: "%s"', path.resolve(filepath)); + cwdFilepath = require.resolve(path.resolve(filepath)); // evtl. throws + return require(cwdFilepath); + } catch (err) { + if (cwdFilepath) throw err; + + debug('parsers: retry load as module-relative path: "%s"', filepath); + return require(filepath); + } + }, + json: filepath => + JSON.parse( + require('strip-json-comments')(fs.readFileSync(filepath, 'utf8')) + ) +}); + +/** + * Loads and parses, based on file extension, a config file. + * "JSON" files may have comments. + * + * @private + * @param {string} filepath - Config file path to load + * @returns {Object} Parsed config object + */ +exports.loadConfig = filepath => { + let config = {}; + debug('loadConfig: trying to parse config at %s', filepath); + + const ext = path.extname(filepath); + try { + if (ext === '.yml' || ext === '.yaml') { + config = parsers.yaml(filepath); + } else if (ext === '.js' || ext === '.cjs') { + config = parsers.js(filepath); + } else { + config = parsers.json(filepath); + } + } catch (err) { + throw createUnparsableFileError( + `Unable to read/parse ${filepath}: ${err}`, + filepath + ); + } + return config; +}; + +/** + * Find ("find up") config file starting at `cwd` + * + * @param {string} [cwd] - Current working directory + * @returns {string|null} Filepath to config, if found + */ +exports.findConfig = (cwd = utils.cwd()) => { + const filepath = findUp.sync(exports.CONFIG_FILES, {cwd}); + if (filepath) { + debug('findConfig: found config file %s', filepath); + } + return filepath; +}; diff --git a/build/node_modules/mocha/lib/cli/index.js b/build/node_modules/mocha/lib/cli/index.js new file mode 100644 index 00000000..f20314ea --- /dev/null +++ b/build/node_modules/mocha/lib/cli/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./cli'); diff --git a/build/node_modules/mocha/lib/cli/init.js b/build/node_modules/mocha/lib/cli/init.js new file mode 100644 index 00000000..3847aff8 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/init.js @@ -0,0 +1,36 @@ +'use strict'; + +/** + * Command module for "init" command + * + * @private + * @module + */ + +const fs = require('fs'); +const path = require('path'); + +exports.command = 'init '; + +exports.description = 'create a client-side Mocha setup at '; + +exports.builder = yargs => + yargs.positional('path', { + type: 'string', + normalize: true + }); + +exports.handler = argv => { + const destdir = argv.path; + const srcdir = path.join(__dirname, '..', '..'); + fs.mkdirSync(destdir, {recursive: true}); + const css = fs.readFileSync(path.join(srcdir, 'mocha.css')); + const js = fs.readFileSync(path.join(srcdir, 'mocha.js')); + const tmpl = fs.readFileSync( + path.join(srcdir, 'lib', 'browser', 'template.html') + ); + fs.writeFileSync(path.join(destdir, 'mocha.css'), css); + fs.writeFileSync(path.join(destdir, 'mocha.js'), js); + fs.writeFileSync(path.join(destdir, 'tests.spec.js'), ''); + fs.writeFileSync(path.join(destdir, 'index.html'), tmpl); +}; diff --git a/build/node_modules/mocha/lib/cli/lookup-files.js b/build/node_modules/mocha/lib/cli/lookup-files.js new file mode 100644 index 00000000..00b98a7a --- /dev/null +++ b/build/node_modules/mocha/lib/cli/lookup-files.js @@ -0,0 +1,145 @@ +'use strict'; +/** + * Contains `lookupFiles`, which takes some globs/dirs/options and returns a list of files. + * @module + * @private + */ + +var fs = require('fs'); +var path = require('path'); +var glob = require('glob'); +var errors = require('../errors'); +var createNoFilesMatchPatternError = errors.createNoFilesMatchPatternError; +var createMissingArgumentError = errors.createMissingArgumentError; +const debug = require('debug')('mocha:cli:lookup-files'); + +/** + * Determines if pathname would be a "hidden" file (or directory) on UN*X. + * + * @description + * On UN*X, pathnames beginning with a full stop (aka dot) are hidden during + * typical usage. Dotfiles, plain-text configuration files, are prime examples. + * + * @see {@link http://xahlee.info/UnixResource_dir/writ/unix_origin_of_dot_filename.html|Origin of Dot File Names} + * + * @private + * @param {string} pathname - Pathname to check for match. + * @return {boolean} whether pathname would be considered a hidden file. + * @example + * isHiddenOnUnix('.profile'); // => true + */ +const isHiddenOnUnix = pathname => path.basename(pathname).startsWith('.'); + +/** + * Determines if pathname has a matching file extension. + * + * Supports multi-part extensions. + * + * @private + * @param {string} pathname - Pathname to check for match. + * @param {string[]} exts - List of file extensions, w/-or-w/o leading period + * @return {boolean} `true` if file extension matches. + * @example + * hasMatchingExtname('foo.html', ['js', 'css']); // false + * hasMatchingExtname('foo.js', ['.js']); // true + * hasMatchingExtname('foo.js', ['js']); // ture + */ +const hasMatchingExtname = (pathname, exts = []) => + exts + .map(ext => (ext.startsWith('.') ? ext : `.${ext}`)) + .some(ext => pathname.endsWith(ext)); + +/** + * Lookup file names at the given `path`. + * + * @description + * Filenames are returned in _traversal_ order by the OS/filesystem. + * **Make no assumption that the names will be sorted in any fashion.** + * + * @public + * @alias module:lib/cli.lookupFiles + * @param {string} filepath - Base path to start searching from. + * @param {string[]} [extensions=[]] - File extensions to look for. + * @param {boolean} [recursive=false] - Whether to recurse into subdirectories. + * @return {string[]} An array of paths. + * @throws {Error} if no files match pattern. + * @throws {TypeError} if `filepath` is directory and `extensions` not provided. + */ +module.exports = function lookupFiles( + filepath, + extensions = [], + recursive = false +) { + const files = []; + let stat; + + if (!fs.existsSync(filepath)) { + let pattern; + if (glob.hasMagic(filepath)) { + // Handle glob as is without extensions + pattern = filepath; + } else { + // glob pattern e.g. 'filepath+(.js|.ts)' + const strExtensions = extensions + .map(ext => (ext.startsWith('.') ? ext : `.${ext}`)) + .join('|'); + pattern = `${filepath}+(${strExtensions})`; + debug('looking for files using glob pattern: %s', pattern); + } + files.push(...glob.sync(pattern, {nodir: true})); + if (!files.length) { + throw createNoFilesMatchPatternError( + `Cannot find any files matching pattern "${filepath}"`, + filepath + ); + } + return files; + } + + // Handle file + try { + stat = fs.statSync(filepath); + if (stat.isFile()) { + return filepath; + } + } catch (err) { + // ignore error + return; + } + + // Handle directory + fs.readdirSync(filepath).forEach(dirent => { + const pathname = path.join(filepath, dirent); + let stat; + + try { + stat = fs.statSync(pathname); + if (stat.isDirectory()) { + if (recursive) { + files.push(...lookupFiles(pathname, extensions, recursive)); + } + return; + } + } catch (ignored) { + return; + } + if (!extensions.length) { + throw createMissingArgumentError( + `Argument '${extensions}' required when argument '${filepath}' is a directory`, + 'extensions', + 'array' + ); + } + + if ( + !stat.isFile() || + !hasMatchingExtname(pathname, extensions) || + isHiddenOnUnix(pathname) + ) { + return; + } + files.push(pathname); + }); + + return files; +}; diff --git a/build/node_modules/mocha/lib/cli/node-flags.js b/build/node_modules/mocha/lib/cli/node-flags.js new file mode 100644 index 00000000..25ca2669 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/node-flags.js @@ -0,0 +1,85 @@ +'use strict'; + +/** + * Some settings and code related to Mocha's handling of Node.js/V8 flags. + * @private + * @module + */ + +const nodeFlags = process.allowedNodeEnvironmentFlags; +const {isMochaFlag} = require('./run-option-metadata'); +const unparse = require('yargs-unparser'); + +/** + * These flags are considered "debug" flags. + * @see {@link impliesNoTimeouts} + * @private + */ +const debugFlags = new Set(['inspect', 'inspect-brk']); + +/** + * Mocha has historical support for various `node` and V8 flags which might not + * appear in `process.allowedNodeEnvironmentFlags`. + * These include: + * - `--preserve-symlinks` + * - `--harmony-*` + * - `--gc-global` + * - `--trace-*` + * - `--es-staging` + * - `--use-strict` + * - `--v8-*` (but *not* `--v8-options`) + * @summary Whether or not to pass a flag along to the `node` executable. + * @param {string} flag - Flag to test + * @param {boolean} [bareword=true] - If `false`, we expect `flag` to have one or two leading dashes. + * @returns {boolean} If the flag is considered a "Node" flag. + * @private + */ +exports.isNodeFlag = (flag, bareword = true) => { + if (!bareword) { + // check if the flag begins with dashes; if not, not a node flag. + if (!/^--?/.test(flag)) { + return false; + } + // strip the leading dashes to match against subsequent checks + flag = flag.replace(/^--?/, ''); + } + return ( + // check actual node flags from `process.allowedNodeEnvironmentFlags`, + // then historical support for various V8 and non-`NODE_OPTIONS` flags + // and also any V8 flags with `--v8-` prefix + (!isMochaFlag(flag) && nodeFlags && nodeFlags.has(flag)) || + debugFlags.has(flag) || + /(?:preserve-symlinks(?:-main)?|harmony(?:[_-]|$)|(?:trace[_-].+$)|gc[_-]global$|es[_-]staging$|use[_-]strict$|v8[_-](?!options).+?$)/.test( + flag + ) + ); +}; + +/** + * Returns `true` if the flag is a "debug-like" flag. These require timeouts + * to be suppressed, or pausing the debugger on breakpoints will cause test failures. + * @param {string} flag - Flag to test + * @returns {boolean} + * @private + */ +exports.impliesNoTimeouts = flag => debugFlags.has(flag); + +/** + * All non-strictly-boolean arguments to node--those with values--must specify those values using `=`, e.g., `--inspect=0.0.0.0`. + * Unparse these arguments using `yargs-unparser` (which would result in `--inspect 0.0.0.0`), then supply `=` where we have values. + * There's probably an easier or more robust way to do this; fixes welcome + * @param {Object} opts - Arguments object + * @returns {string[]} Unparsed arguments using `=` to specify values + * @private + */ +exports.unparseNodeFlags = opts => { + var args = unparse(opts); + return args.length + ? args + .join(' ') + .split(/\b/) + .map(arg => (arg === ' ' ? '=' : arg)) + .join('') + .split(' ') + : []; +}; diff --git a/build/node_modules/mocha/lib/cli/one-and-dones.js b/build/node_modules/mocha/lib/cli/one-and-dones.js new file mode 100644 index 00000000..21bad6fd --- /dev/null +++ b/build/node_modules/mocha/lib/cli/one-and-dones.js @@ -0,0 +1,69 @@ +'use strict'; + +/** + * Contains "command" code for "one-and-dones"--options passed + * to Mocha which cause it to just dump some info and exit. + * See {@link module:lib/cli/one-and-dones.ONE_AND_DONE_ARGS ONE_AND_DONE_ARGS} for more info. + * @module + * @private + */ + +const Mocha = require('../mocha'); + +/** + * Dumps a sorted list of the enumerable, lower-case keys of some object + * to `STDOUT`. + * @param {Object} obj - Object, ostensibly having some enumerable keys + * @ignore + * @private + */ +const showKeys = obj => { + console.log(); + const keys = Object.keys(obj); + const maxKeyLength = keys.reduce((max, key) => Math.max(max, key.length), 0); + keys + .filter( + key => /^[a-z]/.test(key) && !obj[key].browserOnly && !obj[key].abstract + ) + .sort() + .forEach(key => { + const description = obj[key].description; + console.log( + ` ${key.padEnd(maxKeyLength + 1)}${ + description ? `- ${description}` : '' + }` + ); + }); + console.log(); +}; + +/** + * Handlers for one-and-done options + * @namespace + * @private + */ +exports.ONE_AND_DONES = { + /** + * Dump list of built-in interfaces + * @private + */ + 'list-interfaces': () => { + showKeys(Mocha.interfaces); + }, + /** + * Dump list of built-in reporters + * @private + */ + 'list-reporters': () => { + showKeys(Mocha.reporters); + } +}; + +/** + * A Set of all one-and-done options + * @type Set + * @private + */ +exports.ONE_AND_DONE_ARGS = new Set( + ['help', 'h', 'version', 'V'].concat(Object.keys(exports.ONE_AND_DONES)) +); diff --git a/build/node_modules/mocha/lib/cli/options.js b/build/node_modules/mocha/lib/cli/options.js new file mode 100644 index 00000000..8fa9470e --- /dev/null +++ b/build/node_modules/mocha/lib/cli/options.js @@ -0,0 +1,261 @@ +'use strict'; + +/** + * Main entry point for handling filesystem-based configuration, + * whether that's a config file or `package.json` or whatever. + * @module lib/cli/options + * @private + */ + +const fs = require('fs'); +const ansi = require('ansi-colors'); +const yargsParser = require('yargs-parser'); +const {types, aliases} = require('./run-option-metadata'); +const {ONE_AND_DONE_ARGS} = require('./one-and-dones'); +const mocharc = require('../mocharc.json'); +const {list} = require('./run-helpers'); +const {loadConfig, findConfig} = require('./config'); +const findUp = require('find-up'); +const debug = require('debug')('mocha:cli:options'); +const {isNodeFlag} = require('./node-flags'); +const {createUnparsableFileError} = require('../errors'); + +/** + * The `yargs-parser` namespace + * @external yargsParser + * @see {@link https://npm.im/yargs-parser} + */ + +/** + * An object returned by a configured `yargs-parser` representing arguments + * @memberof external:yargsParser + * @interface Arguments + */ + +/** + * Base yargs parser configuration + * @private + */ +const YARGS_PARSER_CONFIG = { + 'combine-arrays': true, + 'short-option-groups': false, + 'dot-notation': false, + 'strip-aliased': true +}; + +/** + * This is the config pulled from the `yargs` property of Mocha's + * `package.json`, but it also disables camel case expansion as to + * avoid outputting non-canonical keynames, as we need to do some + * lookups. + * @private + * @ignore + */ +const configuration = Object.assign({}, YARGS_PARSER_CONFIG, { + 'camel-case-expansion': false +}); + +/** + * This is a really fancy way to: + * - `array`-type options: ensure unique values and evtl. split comma-delimited lists + * - `boolean`/`number`/`string`- options: use last element when given multiple times + * This is passed as the `coerce` option to `yargs-parser` + * @private + * @ignore + */ +const globOptions = ['spec', 'ignore']; +const coerceOpts = Object.assign( + types.array.reduce( + (acc, arg) => + Object.assign(acc, { + [arg]: v => Array.from(new Set(globOptions.includes(arg) ? v : list(v))) + }), + {} + ), + types.boolean + .concat(types.string, types.number) + .reduce( + (acc, arg) => + Object.assign(acc, {[arg]: v => (Array.isArray(v) ? v.pop() : v)}), + {} + ) +); + +/** + * We do not have a case when multiple arguments are ever allowed after a flag + * (e.g., `--foo bar baz quux`), so we fix the number of arguments to 1 across + * the board of non-boolean options. + * This is passed as the `narg` option to `yargs-parser` + * @private + * @ignore + */ +const nargOpts = types.array + .concat(types.string, types.number) + .reduce((acc, arg) => Object.assign(acc, {[arg]: 1}), {}); + +/** + * Wrapper around `yargs-parser` which applies our settings + * @param {string|string[]} args - Arguments to parse + * @param {Object} defaultValues - Default values of mocharc.json + * @param {...Object} configObjects - `configObjects` for yargs-parser + * @private + * @ignore + */ +const parse = (args = [], defaultValues = {}, ...configObjects) => { + // save node-specific args for special handling. + // 1. when these args have a "=" they should be considered to have values + // 2. if they don't, they just boolean flags + // 3. to avoid explicitly defining the set of them, we tell yargs-parser they + // are ALL boolean flags. + // 4. we can then reapply the values after yargs-parser is done. + const nodeArgs = (Array.isArray(args) ? args : args.split(' ')).reduce( + (acc, arg) => { + const pair = arg.split('='); + let flag = pair[0]; + if (isNodeFlag(flag, false)) { + flag = flag.replace(/^--?/, ''); + return arg.includes('=') + ? acc.concat([[flag, pair[1]]]) + : acc.concat([[flag, true]]); + } + return acc; + }, + [] + ); + + const result = yargsParser.detailed(args, { + configuration, + configObjects, + default: defaultValues, + coerce: coerceOpts, + narg: nargOpts, + alias: aliases, + string: types.string, + array: types.array, + number: types.number, + boolean: types.boolean.concat(nodeArgs.map(pair => pair[0])) + }); + if (result.error) { + console.error(ansi.red(`Error: ${result.error.message}`)); + process.exit(1); + } + + // reapply "=" arg values from above + nodeArgs.forEach(([key, value]) => { + result.argv[key] = value; + }); + + return result.argv; +}; + +/** + * Given path to config file in `args.config`, attempt to load & parse config file. + * @param {Object} [args] - Arguments object + * @param {string|boolean} [args.config] - Path to config file or `false` to skip + * @public + * @alias module:lib/cli.loadRc + * @returns {external:yargsParser.Arguments|void} Parsed config, or nothing if `args.config` is `false` + */ +const loadRc = (args = {}) => { + if (args.config !== false) { + const config = args.config || findConfig(); + return config ? loadConfig(config) : {}; + } +}; + +module.exports.loadRc = loadRc; + +/** + * Given path to `package.json` in `args.package`, attempt to load config from `mocha` prop. + * @param {Object} [args] - Arguments object + * @param {string|boolean} [args.config] - Path to `package.json` or `false` to skip + * @public + * @alias module:lib/cli.loadPkgRc + * @returns {external:yargsParser.Arguments|void} Parsed config, or nothing if `args.package` is `false` + */ +const loadPkgRc = (args = {}) => { + let result; + if (args.package === false) { + return result; + } + result = {}; + const filepath = args.package || findUp.sync(mocharc.package); + if (filepath) { + try { + const pkg = JSON.parse(fs.readFileSync(filepath, 'utf8')); + if (pkg.mocha) { + debug('`mocha` prop of package.json parsed: %O', pkg.mocha); + result = pkg.mocha; + } else { + debug('no config found in %s', filepath); + } + } catch (err) { + if (args.package) { + throw createUnparsableFileError( + `Unable to read/parse ${filepath}: ${err}`, + filepath + ); + } + debug('failed to read default package.json at %s; ignoring', filepath); + } + } + return result; +}; + +module.exports.loadPkgRc = loadPkgRc; + +/** + * Priority list: + * + * 1. Command-line args + * 2. RC file (`.mocharc.c?js`, `.mocharc.ya?ml`, `mocharc.json`) + * 3. `mocha` prop of `package.json` + * 4. default configuration (`lib/mocharc.json`) + * + * If a {@link module:lib/cli/one-and-dones.ONE_AND_DONE_ARGS "one-and-done" option} is present in the `argv` array, no external config files will be read. + * @summary Parses options read from `.mocharc.*` and `package.json`. + * @param {string|string[]} [argv] - Arguments to parse + * @public + * @alias module:lib/cli.loadOptions + * @returns {external:yargsParser.Arguments} Parsed args from everything + */ +const loadOptions = (argv = []) => { + let args = parse(argv); + // short-circuit: look for a flag that would abort loading of options + if ( + Array.from(ONE_AND_DONE_ARGS).reduce( + (acc, arg) => acc || arg in args, + false + ) + ) { + return args; + } + + const rcConfig = loadRc(args); + const pkgConfig = loadPkgRc(args); + + if (rcConfig) { + args.config = false; + args._ = args._.concat(rcConfig._ || []); + } + if (pkgConfig) { + args.package = false; + args._ = args._.concat(pkgConfig._ || []); + } + + args = parse(args._, mocharc, args, rcConfig || {}, pkgConfig || {}); + + // recombine positional arguments and "spec" + if (args.spec) { + args._ = args._.concat(args.spec); + delete args.spec; + } + + // make unique + args._ = Array.from(new Set(args._)); + + return args; +}; + +module.exports.loadOptions = loadOptions; +module.exports.YARGS_PARSER_CONFIG = YARGS_PARSER_CONFIG; diff --git a/build/node_modules/mocha/lib/cli/run-helpers.js b/build/node_modules/mocha/lib/cli/run-helpers.js new file mode 100644 index 00000000..078ca7e4 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/run-helpers.js @@ -0,0 +1,243 @@ +'use strict'; + +/** + * Helper scripts for the `run` command + * @see module:lib/cli/run + * @module + * @private + */ + +const fs = require('fs'); +const path = require('path'); +const debug = require('debug')('mocha:cli:run:helpers'); +const {watchRun, watchParallelRun} = require('./watch-run'); +const collectFiles = require('./collect-files'); +const {format} = require('util'); +const {createInvalidLegacyPluginError} = require('../errors'); +const {requireOrImport} = require('../nodejs/esm-utils'); +const PluginLoader = require('../plugin-loader'); + +/** + * Exits Mocha when tests + code under test has finished execution (default) + * @param {number} code - Exit code; typically # of failures + * @ignore + * @private + */ +const exitMochaLater = code => { + process.on('exit', () => { + process.exitCode = Math.min(code, 255); + }); +}; + +/** + * Exits Mocha when Mocha itself has finished execution, regardless of + * what the tests or code under test is doing. + * @param {number} code - Exit code; typically # of failures + * @ignore + * @private + */ +const exitMocha = code => { + const clampedCode = Math.min(code, 255); + let draining = 0; + + // Eagerly set the process's exit code in case stream.write doesn't + // execute its callback before the process terminates. + process.exitCode = clampedCode; + + // flush output for Node.js Windows pipe bug + // https://github.com/joyent/node/issues/6247 is just one bug example + // https://github.com/visionmedia/mocha/issues/333 has a good discussion + const done = () => { + if (!draining--) { + process.exit(clampedCode); + } + }; + + const streams = [process.stdout, process.stderr]; + + streams.forEach(stream => { + // submit empty write request and wait for completion + draining += 1; + stream.write('', done); + }); + + done(); +}; + +/** + * Coerce a comma-delimited string (or array thereof) into a flattened array of + * strings + * @param {string|string[]} str - Value to coerce + * @returns {string[]} Array of strings + * @private + */ +exports.list = str => + Array.isArray(str) ? exports.list(str.join(',')) : str.split(/ *, */); + +/** + * `require()` the modules as required by `--require `. + * + * Returns array of `mochaHooks` exports, if any. + * @param {string[]} requires - Modules to require + * @returns {Promise} Plugin implementations + * @private + */ +exports.handleRequires = async (requires = [], {ignoredPlugins = []} = {}) => { + const pluginLoader = PluginLoader.create({ignore: ignoredPlugins}); + for await (const mod of requires) { + let modpath = mod; + // this is relative to cwd + if (fs.existsSync(mod) || fs.existsSync(`${mod}.js`)) { + modpath = path.resolve(mod); + debug('resolved required file %s to %s', mod, modpath); + } + const requiredModule = await requireOrImport(modpath); + if (requiredModule && typeof requiredModule === 'object') { + if (pluginLoader.load(requiredModule)) { + debug('found one or more plugin implementations in %s', modpath); + } + } + debug('loaded required module "%s"', mod); + } + const plugins = await pluginLoader.finalize(); + if (Object.keys(plugins).length) { + debug('finalized plugin implementations: %O', plugins); + } + return plugins; +}; + +/** + * Collect and load test files, then run mocha instance. + * @param {Mocha} mocha - Mocha instance + * @param {Options} [opts] - Command line options + * @param {boolean} [opts.exit] - Whether or not to force-exit after tests are complete + * @param {Object} fileCollectParams - Parameters that control test + * file collection. See `lib/cli/collect-files.js`. + * @returns {Promise} + * @private + */ +const singleRun = async (mocha, {exit}, fileCollectParams) => { + const files = collectFiles(fileCollectParams); + debug('single run with %d file(s)', files.length); + mocha.files = files; + + // handles ESM modules + await mocha.loadFilesAsync(); + return mocha.run(exit ? exitMocha : exitMochaLater); +}; + +/** + * Collect files and run tests (using `BufferedRunner`). + * + * This is `async` for consistency. + * + * @param {Mocha} mocha - Mocha instance + * @param {Options} options - Command line options + * @param {Object} fileCollectParams - Parameters that control test + * file collection. See `lib/cli/collect-files.js`. + * @returns {Promise} + * @ignore + * @private + */ +const parallelRun = async (mocha, options, fileCollectParams) => { + const files = collectFiles(fileCollectParams); + debug('executing %d test file(s) in parallel mode', files.length); + mocha.files = files; + + // note that we DO NOT load any files here; this is handled by the worker + return mocha.run(options.exit ? exitMocha : exitMochaLater); +}; + +/** + * Actually run tests. Delegates to one of four different functions: + * - `singleRun`: run tests in serial & exit + * - `watchRun`: run tests in serial, rerunning as files change + * - `parallelRun`: run tests in parallel & exit + * - `watchParallelRun`: run tests in parallel, rerunning as files change + * @param {Mocha} mocha - Mocha instance + * @param {Options} opts - Command line options + * @private + * @returns {Promise} + */ +exports.runMocha = async (mocha, options) => { + const { + watch = false, + extension = [], + ignore = [], + file = [], + parallel = false, + recursive = false, + sort = false, + spec = [] + } = options; + + const fileCollectParams = { + ignore, + extension, + file, + recursive, + sort, + spec + }; + + let run; + if (watch) { + run = parallel ? watchParallelRun : watchRun; + } else { + run = parallel ? parallelRun : singleRun; + } + + return run(mocha, options, fileCollectParams); +}; + +/** + * Used for `--reporter` and `--ui`. Ensures there's only one, and asserts that + * it actually exists. This must be run _after_ requires are processed (see + * {@link handleRequires}), as it'll prevent interfaces from loading otherwise. + * @param {Object} opts - Options object + * @param {"reporter"|"ui"} pluginType - Type of plugin. + * @param {Object} [map] - Used as a cache of sorts; + * `Mocha.reporters` where each key corresponds to a reporter name, + * `Mocha.interfaces` where each key corresponds to an interface name. + * @private + */ +exports.validateLegacyPlugin = (opts, pluginType, map = {}) => { + /** + * This should be a unique identifier; either a string (present in `map`), + * or a resolvable (via `require.resolve`) module ID/path. + * @type {string} + */ + const pluginId = opts[pluginType]; + + if (Array.isArray(pluginId)) { + throw createInvalidLegacyPluginError( + `"--${pluginType}" can only be specified once`, + pluginType + ); + } + + const createUnknownError = err => + createInvalidLegacyPluginError( + format('Could not load %s "%s":\n\n %O', pluginType, pluginId, err), + pluginType, + pluginId + ); + + // if this exists, then it's already loaded, so nothing more to do. + if (!map[pluginId]) { + let foundId; + try { + foundId = require.resolve(pluginId); + map[pluginId] = require(foundId); + } catch (err) { + if (foundId) throw createUnknownError(err); + + // Try to load reporters from a cwd-relative path + try { + map[pluginId] = require(path.resolve(pluginId)); + } catch (e) { + throw createUnknownError(e); + } + } + } +}; diff --git a/build/node_modules/mocha/lib/cli/run-option-metadata.js b/build/node_modules/mocha/lib/cli/run-option-metadata.js new file mode 100644 index 00000000..984ad4b7 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/run-option-metadata.js @@ -0,0 +1,117 @@ +'use strict'; + +/** + * Metadata about various options of the `run` command + * @see module:lib/cli/run + * @module + * @private + */ + +/** + * Dictionary of yargs option types to list of options having said type + * @type {{string:string[]}} + * @private + */ +const TYPES = (exports.types = { + array: [ + 'extension', + 'file', + 'global', + 'ignore', + 'node-option', + 'reporter-option', + 'require', + 'spec', + 'watch-files', + 'watch-ignore' + ], + boolean: [ + 'allow-uncaught', + 'async-only', + 'bail', + 'check-leaks', + 'color', + 'delay', + 'diff', + 'dry-run', + 'exit', + 'fail-zero', + 'forbid-only', + 'forbid-pending', + 'full-trace', + 'growl', + 'inline-diffs', + 'invert', + 'list-interfaces', + 'list-reporters', + 'no-colors', + 'parallel', + 'recursive', + 'sort', + 'watch' + ], + number: ['retries', 'jobs'], + string: [ + 'config', + 'fgrep', + 'grep', + 'package', + 'reporter', + 'ui', + 'slow', + 'timeout' + ] +}); + +/** + * Option aliases keyed by canonical option name. + * Arrays used to reduce + * @type {{string:string[]}} + * @private + */ +exports.aliases = { + 'async-only': ['A'], + bail: ['b'], + color: ['c', 'colors'], + fgrep: ['f'], + global: ['globals'], + grep: ['g'], + growl: ['G'], + ignore: ['exclude'], + invert: ['i'], + jobs: ['j'], + 'no-colors': ['C'], + 'node-option': ['n'], + parallel: ['p'], + reporter: ['R'], + 'reporter-option': ['reporter-options', 'O'], + require: ['r'], + slow: ['s'], + sort: ['S'], + timeout: ['t', 'timeouts'], + ui: ['u'], + watch: ['w'] +}; + +const ALL_MOCHA_FLAGS = Object.keys(TYPES).reduce((acc, key) => { + // gets all flags from each of the fields in `types`, adds those, + // then adds aliases of each flag (if any) + TYPES[key].forEach(flag => { + acc.add(flag); + const aliases = exports.aliases[flag] || []; + aliases.forEach(alias => { + acc.add(alias); + }); + }); + return acc; +}, new Set()); + +/** + * Returns `true` if the provided `flag` is known to Mocha. + * @param {string} flag - Flag to check + * @returns {boolean} If `true`, this is a Mocha flag + * @private + */ +exports.isMochaFlag = flag => { + return ALL_MOCHA_FLAGS.has(flag.replace(/^--?/, '')); +}; diff --git a/build/node_modules/mocha/lib/cli/run.js b/build/node_modules/mocha/lib/cli/run.js new file mode 100644 index 00000000..85f88bc6 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/run.js @@ -0,0 +1,379 @@ +'use strict'; + +/** + * Definition for Mocha's default ("run tests") command + * + * @module + * @private + */ + +const symbols = require('log-symbols'); +const ansi = require('ansi-colors'); +const Mocha = require('../mocha'); +const { + createUnsupportedError, + createInvalidArgumentValueError, + createMissingArgumentError +} = require('../errors'); + +const { + list, + handleRequires, + validateLegacyPlugin, + runMocha +} = require('./run-helpers'); +const {ONE_AND_DONES, ONE_AND_DONE_ARGS} = require('./one-and-dones'); +const debug = require('debug')('mocha:cli:run'); +const defaults = require('../mocharc'); +const {types, aliases} = require('./run-option-metadata'); + +/** + * Logical option groups + * @constant + */ +const GROUPS = { + FILES: 'File Handling', + FILTERS: 'Test Filters', + NODEJS: 'Node.js & V8', + OUTPUT: 'Reporting & Output', + RULES: 'Rules & Behavior', + CONFIG: 'Configuration' +}; + +exports.command = ['$0 [spec..]', 'inspect']; + +exports.describe = 'Run tests with Mocha'; + +exports.builder = yargs => + yargs + .options({ + 'allow-uncaught': { + description: 'Allow uncaught errors to propagate', + group: GROUPS.RULES + }, + 'async-only': { + description: + 'Require all tests to use a callback (async) or return a Promise', + group: GROUPS.RULES + }, + bail: { + description: 'Abort ("bail") after first test failure', + group: GROUPS.RULES + }, + 'check-leaks': { + description: 'Check for global variable leaks', + group: GROUPS.RULES + }, + color: { + description: 'Force-enable color output', + group: GROUPS.OUTPUT + }, + config: { + config: true, + defaultDescription: '(nearest rc file)', + description: 'Path to config file', + group: GROUPS.CONFIG + }, + delay: { + description: 'Delay initial execution of root suite', + group: GROUPS.RULES + }, + diff: { + default: true, + description: 'Show diff on failure', + group: GROUPS.OUTPUT + }, + 'dry-run': { + description: 'Report tests without executing them', + group: GROUPS.RULES + }, + exit: { + description: 'Force Mocha to quit after tests complete', + group: GROUPS.RULES + }, + extension: { + default: defaults.extension, + description: 'File extension(s) to load', + group: GROUPS.FILES, + requiresArg: true, + coerce: list + }, + 'fail-zero': { + description: 'Fail test run if no test(s) encountered', + group: GROUPS.RULES + }, + fgrep: { + conflicts: 'grep', + description: 'Only run tests containing this string', + group: GROUPS.FILTERS, + requiresArg: true + }, + file: { + defaultDescription: '(none)', + description: + 'Specify file(s) to be loaded prior to root suite execution', + group: GROUPS.FILES, + normalize: true, + requiresArg: true + }, + 'forbid-only': { + description: 'Fail if exclusive test(s) encountered', + group: GROUPS.RULES + }, + 'forbid-pending': { + description: 'Fail if pending test(s) encountered', + group: GROUPS.RULES + }, + 'full-trace': { + description: 'Display full stack traces', + group: GROUPS.OUTPUT + }, + global: { + coerce: list, + description: 'List of allowed global variables', + group: GROUPS.RULES, + requiresArg: true + }, + grep: { + coerce: value => (!value ? null : value), + conflicts: 'fgrep', + description: 'Only run tests matching this string or regexp', + group: GROUPS.FILTERS, + requiresArg: true + }, + growl: { + description: 'Enable Growl notifications', + group: GROUPS.OUTPUT + }, + ignore: { + defaultDescription: '(none)', + description: 'Ignore file(s) or glob pattern(s)', + group: GROUPS.FILES, + requiresArg: true + }, + 'inline-diffs': { + description: + 'Display actual/expected differences inline within each string', + group: GROUPS.OUTPUT + }, + invert: { + description: 'Inverts --grep and --fgrep matches', + group: GROUPS.FILTERS + }, + jobs: { + description: + 'Number of concurrent jobs for --parallel; use 1 to run in serial', + defaultDescription: '(number of CPU cores - 1)', + requiresArg: true, + group: GROUPS.RULES + }, + 'list-interfaces': { + conflicts: Array.from(ONE_AND_DONE_ARGS), + description: 'List built-in user interfaces & exit' + }, + 'list-reporters': { + conflicts: Array.from(ONE_AND_DONE_ARGS), + description: 'List built-in reporters & exit' + }, + 'no-colors': { + description: 'Force-disable color output', + group: GROUPS.OUTPUT, + hidden: true + }, + 'node-option': { + description: 'Node or V8 option (no leading "--")', + group: GROUPS.CONFIG + }, + package: { + description: 'Path to package.json for config', + group: GROUPS.CONFIG, + normalize: true, + requiresArg: true + }, + parallel: { + description: 'Run tests in parallel', + group: GROUPS.RULES + }, + recursive: { + description: 'Look for tests in subdirectories', + group: GROUPS.FILES + }, + reporter: { + default: defaults.reporter, + description: 'Specify reporter to use', + group: GROUPS.OUTPUT, + requiresArg: true + }, + 'reporter-option': { + coerce: opts => + list(opts).reduce((acc, opt) => { + const pair = opt.split('='); + + if (pair.length > 2 || !pair.length) { + throw createInvalidArgumentValueError( + `invalid reporter option '${opt}'`, + '--reporter-option', + opt, + 'expected "key=value" format' + ); + } + + acc[pair[0]] = pair.length === 2 ? pair[1] : true; + return acc; + }, {}), + description: 'Reporter-specific options ()', + group: GROUPS.OUTPUT, + requiresArg: true + }, + require: { + defaultDescription: '(none)', + description: 'Require module', + group: GROUPS.FILES, + requiresArg: true + }, + retries: { + description: 'Retry failed tests this many times', + group: GROUPS.RULES + }, + slow: { + default: defaults.slow, + description: 'Specify "slow" test threshold (in milliseconds)', + group: GROUPS.RULES + }, + sort: { + description: 'Sort test files', + group: GROUPS.FILES + }, + timeout: { + default: defaults.timeout, + description: 'Specify test timeout threshold (in milliseconds)', + group: GROUPS.RULES + }, + ui: { + default: defaults.ui, + description: 'Specify user interface', + group: GROUPS.RULES, + requiresArg: true + }, + watch: { + description: 'Watch files in the current working directory for changes', + group: GROUPS.FILES + }, + 'watch-files': { + description: 'List of paths or globs to watch', + group: GROUPS.FILES, + requiresArg: true, + coerce: list + }, + 'watch-ignore': { + description: 'List of paths or globs to exclude from watching', + group: GROUPS.FILES, + requiresArg: true, + coerce: list, + default: defaults['watch-ignore'] + } + }) + .positional('spec', { + default: ['test'], + description: 'One or more files, directories, or globs to test', + type: 'array' + }) + .check(argv => { + // "one-and-dones"; let yargs handle help and version + Object.keys(ONE_AND_DONES).forEach(opt => { + if (argv[opt]) { + ONE_AND_DONES[opt].call(null, yargs); + process.exit(); + } + }); + + // yargs.implies() isn't flexible enough to handle this + if (argv.invert && !('fgrep' in argv || 'grep' in argv)) { + throw createMissingArgumentError( + '"--invert" requires one of "--fgrep " or "--grep "', + '--fgrep|--grep', + 'string|regexp' + ); + } + + if (argv.parallel) { + // yargs.conflicts() can't deal with `--file foo.js --no-parallel`, either + if (argv.file) { + throw createUnsupportedError( + '--parallel runs test files in a non-deterministic order, and is mutually exclusive with --file' + ); + } + + // or this + if (argv.sort) { + throw createUnsupportedError( + '--parallel runs test files in a non-deterministic order, and is mutually exclusive with --sort' + ); + } + + if (argv.reporter === 'progress') { + throw createUnsupportedError( + '--reporter=progress is mutually exclusive with --parallel' + ); + } + + if (argv.reporter === 'markdown') { + throw createUnsupportedError( + '--reporter=markdown is mutually exclusive with --parallel' + ); + } + + if (argv.reporter === 'json-stream') { + throw createUnsupportedError( + '--reporter=json-stream is mutually exclusive with --parallel' + ); + } + } + + if (argv.compilers) { + throw createUnsupportedError( + `--compilers is DEPRECATED and no longer supported. + See https://git.io/vdcSr for migration information.` + ); + } + + if (argv.opts) { + throw createUnsupportedError( + `--opts: configuring Mocha via 'mocha.opts' is DEPRECATED and no longer supported. + Please use a configuration file instead.` + ); + } + + return true; + }) + .middleware(async (argv, yargs) => { + // currently a failing middleware does not work nicely with yargs' `fail()`. + try { + // load requires first, because it can impact "plugin" validation + const plugins = await handleRequires(argv.require); + validateLegacyPlugin(argv, 'reporter', Mocha.reporters); + validateLegacyPlugin(argv, 'ui', Mocha.interfaces); + Object.assign(argv, plugins); + } catch (err) { + // this could be a bad --require, bad reporter, ui, etc. + console.error(`\n${symbols.error} ${ansi.red('ERROR:')}`, err); + yargs.exit(1); + } + }) + .array(types.array) + .boolean(types.boolean) + .string(types.string) + .number(types.number) + .alias(aliases); + +exports.handler = async function (argv) { + debug('post-yargs config', argv); + const mocha = new Mocha(argv); + + try { + await runMocha(mocha, argv); + } catch (err) { + console.error('\n' + (err.stack || `Error: ${err.message || err}`)); + process.exit(1); + } +}; diff --git a/build/node_modules/mocha/lib/cli/watch-run.js b/build/node_modules/mocha/lib/cli/watch-run.js new file mode 100644 index 00000000..a77ed7a9 --- /dev/null +++ b/build/node_modules/mocha/lib/cli/watch-run.js @@ -0,0 +1,377 @@ +'use strict'; + +const logSymbols = require('log-symbols'); +const debug = require('debug')('mocha:cli:watch'); +const path = require('path'); +const chokidar = require('chokidar'); +const Context = require('../context'); +const collectFiles = require('./collect-files'); + +/** + * Exports the `watchRun` function that runs mocha in "watch" mode. + * @see module:lib/cli/run-helpers + * @module + * @private + */ + +/** + * Run Mocha in parallel "watch" mode + * @param {Mocha} mocha - Mocha instance + * @param {Object} opts - Options + * @param {string[]} [opts.watchFiles] - List of paths and patterns to + * watch. If not provided all files with an extension included in + * `fileCollectionParams.extension` are watched. See first argument of + * `chokidar.watch`. + * @param {string[]} opts.watchIgnore - List of paths and patterns to + * exclude from watching. See `ignored` option of `chokidar`. + * @param {FileCollectionOptions} fileCollectParams - Parameters that control test + * @private + */ +exports.watchParallelRun = ( + mocha, + {watchFiles, watchIgnore}, + fileCollectParams +) => { + debug('creating parallel watcher'); + + return createWatcher(mocha, { + watchFiles, + watchIgnore, + beforeRun({mocha}) { + // I don't know why we're cloning the root suite. + const rootSuite = mocha.suite.clone(); + + // ensure we aren't leaking event listeners + mocha.dispose(); + + // this `require` is needed because the require cache has been cleared. the dynamic + // exports set via the below call to `mocha.ui()` won't work properly if a + // test depends on this module. + const Mocha = require('../mocha'); + + // ... and now that we've gotten a new module, we need to use it again due + // to `mocha.ui()` call + const newMocha = new Mocha(mocha.options); + // don't know why this is needed + newMocha.suite = rootSuite; + // nor this + newMocha.suite.ctx = new Context(); + + // reset the list of files + newMocha.files = collectFiles(fileCollectParams); + + // because we've swapped out the root suite (see the `run` inner function + // in `createRerunner`), we need to call `mocha.ui()` again to set up the context/globals. + newMocha.ui(newMocha.options.ui); + + // we need to call `newMocha.rootHooks` to set up rootHooks for the new + // suite + newMocha.rootHooks(newMocha.options.rootHooks); + + // in parallel mode, the main Mocha process doesn't actually load the + // files. this flag prevents `mocha.run()` from autoloading. + newMocha.lazyLoadFiles(true); + return newMocha; + }, + fileCollectParams + }); +}; + +/** + * Run Mocha in "watch" mode + * @param {Mocha} mocha - Mocha instance + * @param {Object} opts - Options + * @param {string[]} [opts.watchFiles] - List of paths and patterns to + * watch. If not provided all files with an extension included in + * `fileCollectionParams.extension` are watched. See first argument of + * `chokidar.watch`. + * @param {string[]} opts.watchIgnore - List of paths and patterns to + * exclude from watching. See `ignored` option of `chokidar`. + * @param {FileCollectionOptions} fileCollectParams - Parameters that control test + * file collection. See `lib/cli/collect-files.js`. + * @private + */ +exports.watchRun = (mocha, {watchFiles, watchIgnore}, fileCollectParams) => { + debug('creating serial watcher'); + + return createWatcher(mocha, { + watchFiles, + watchIgnore, + beforeRun({mocha}) { + mocha.unloadFiles(); + + // I don't know why we're cloning the root suite. + const rootSuite = mocha.suite.clone(); + + // ensure we aren't leaking event listeners + mocha.dispose(); + + // this `require` is needed because the require cache has been cleared. the dynamic + // exports set via the below call to `mocha.ui()` won't work properly if a + // test depends on this module. + const Mocha = require('../mocha'); + + // ... and now that we've gotten a new module, we need to use it again due + // to `mocha.ui()` call + const newMocha = new Mocha(mocha.options); + // don't know why this is needed + newMocha.suite = rootSuite; + // nor this + newMocha.suite.ctx = new Context(); + + // reset the list of files + newMocha.files = collectFiles(fileCollectParams); + + // because we've swapped out the root suite (see the `run` inner function + // in `createRerunner`), we need to call `mocha.ui()` again to set up the context/globals. + newMocha.ui(newMocha.options.ui); + + // we need to call `newMocha.rootHooks` to set up rootHooks for the new + // suite + newMocha.rootHooks(newMocha.options.rootHooks); + + return newMocha; + }, + fileCollectParams + }); +}; + +/** + * Bootstraps a chokidar watcher. Handles keyboard input & signals + * @param {Mocha} mocha - Mocha instance + * @param {Object} opts + * @param {BeforeWatchRun} [opts.beforeRun] - Function to call before + * `mocha.run()` + * @param {string[]} [opts.watchFiles] - List of paths and patterns to watch. If + * not provided all files with an extension included in + * `fileCollectionParams.extension` are watched. See first argument of + * `chokidar.watch`. + * @param {string[]} [opts.watchIgnore] - List of paths and patterns to exclude + * from watching. See `ignored` option of `chokidar`. + * @param {FileCollectionOptions} opts.fileCollectParams - List of extensions to watch if `opts.watchFiles` is not given. + * @returns {FSWatcher} + * @ignore + * @private + */ +const createWatcher = ( + mocha, + {watchFiles, watchIgnore, beforeRun, fileCollectParams} +) => { + if (!watchFiles) { + watchFiles = fileCollectParams.extension.map(ext => `**/*.${ext}`); + } + + debug('ignoring files matching: %s', watchIgnore); + let globalFixtureContext; + + // we handle global fixtures manually + mocha.enableGlobalSetup(false).enableGlobalTeardown(false); + + const watcher = chokidar.watch(watchFiles, { + ignored: watchIgnore, + ignoreInitial: true + }); + + const rerunner = createRerunner(mocha, watcher, { + beforeRun + }); + + watcher.on('ready', async () => { + if (!globalFixtureContext) { + debug('triggering global setup'); + globalFixtureContext = await mocha.runGlobalSetup(); + } + rerunner.run(); + }); + + watcher.on('all', () => { + rerunner.scheduleRun(); + }); + + hideCursor(); + process.on('exit', () => { + showCursor(); + }); + + // this is for testing. + // win32 cannot gracefully shutdown via a signal from a parent + // process; a `SIGINT` from a parent will cause the process + // to immediately exit. during normal course of operation, a user + // will type Ctrl-C and the listener will be invoked, but this + // is not possible in automated testing. + // there may be another way to solve this, but it too will be a hack. + // for our watch tests on win32 we must _fork_ mocha with an IPC channel + if (process.connected) { + process.on('message', msg => { + if (msg === 'SIGINT') { + process.emit('SIGINT'); + } + }); + } + + let exiting = false; + process.on('SIGINT', async () => { + showCursor(); + console.error(`${logSymbols.warning} [mocha] cleaning up, please wait...`); + if (!exiting) { + exiting = true; + if (mocha.hasGlobalTeardownFixtures()) { + debug('running global teardown'); + try { + await mocha.runGlobalTeardown(globalFixtureContext); + } catch (err) { + console.error(err); + } + } + process.exit(130); + } + }); + + // Keyboard shortcut for restarting when "rs\n" is typed (ala Nodemon) + process.stdin.resume(); + process.stdin.setEncoding('utf8'); + process.stdin.on('data', data => { + const str = data.toString().trim().toLowerCase(); + if (str === 'rs') rerunner.scheduleRun(); + }); + + return watcher; +}; + +/** + * Create an object that allows you to rerun tests on the mocha instance. + * + * @param {Mocha} mocha - Mocha instance + * @param {FSWatcher} watcher - chokidar `FSWatcher` instance + * @param {Object} [opts] - Options! + * @param {BeforeWatchRun} [opts.beforeRun] - Function to call before `mocha.run()` + * @returns {Rerunner} + * @ignore + * @private + */ +const createRerunner = (mocha, watcher, {beforeRun} = {}) => { + // Set to a `Runner` when mocha is running. Set to `null` when mocha is not + // running. + let runner = null; + + // true if a file has changed during a test run + let rerunScheduled = false; + + const run = () => { + try { + mocha = beforeRun ? beforeRun({mocha, watcher}) || mocha : mocha; + runner = mocha.run(() => { + debug('finished watch run'); + runner = null; + blastCache(watcher); + if (rerunScheduled) { + rerun(); + } else { + console.error(`${logSymbols.info} [mocha] waiting for changes...`); + } + }); + } catch (e) { + console.error(e.stack); + } + }; + + const scheduleRun = () => { + if (rerunScheduled) { + return; + } + + rerunScheduled = true; + if (runner) { + runner.abort(); + } else { + rerun(); + } + }; + + const rerun = () => { + rerunScheduled = false; + eraseLine(); + run(); + }; + + return { + scheduleRun, + run + }; +}; + +/** + * Return the list of absolute paths watched by a chokidar watcher. + * + * @param watcher - Instance of a chokidar watcher + * @return {string[]} - List of absolute paths + * @ignore + * @private + */ +const getWatchedFiles = watcher => { + const watchedDirs = watcher.getWatched(); + return Object.keys(watchedDirs).reduce( + (acc, dir) => [ + ...acc, + ...watchedDirs[dir].map(file => path.join(dir, file)) + ], + [] + ); +}; + +/** + * Hide the cursor. + * @ignore + * @private + */ +const hideCursor = () => { + process.stdout.write('\u001b[?25l'); +}; + +/** + * Show the cursor. + * @ignore + * @private + */ +const showCursor = () => { + process.stdout.write('\u001b[?25h'); +}; + +/** + * Erases the line on stdout + * @private + */ +const eraseLine = () => { + process.stdout.write('\u001b[2K'); +}; + +/** + * Blast all of the watched files out of `require.cache` + * @param {FSWatcher} watcher - chokidar FSWatcher + * @ignore + * @private + */ +const blastCache = watcher => { + const files = getWatchedFiles(watcher); + files.forEach(file => { + delete require.cache[file]; + }); + debug('deleted %d file(s) from the require cache', files.length); +}; + +/** + * Callback to be run before `mocha.run()` is called. + * Optionally, it can return a new `Mocha` instance. + * @callback BeforeWatchRun + * @private + * @param {{mocha: Mocha, watcher: FSWatcher}} options + * @returns {Mocha} + */ + +/** + * Object containing run control methods + * @typedef {Object} Rerunner + * @private + * @property {Function} run - Calls `mocha.run()` + * @property {Function} scheduleRun - Schedules another call to `run` + */ diff --git a/build/node_modules/mocha/lib/context.js b/build/node_modules/mocha/lib/context.js index 0b0242fe..388d3082 100644 --- a/build/node_modules/mocha/lib/context.js +++ b/build/node_modules/mocha/lib/context.js @@ -1,3 +1,7 @@ +'use strict'; +/** + * @module Context + */ /** * Expose `Context`. */ @@ -7,18 +11,18 @@ module.exports = Context; /** * Initialize a new `Context`. * - * @api private + * @private */ function Context() {} /** * Set or get the context `Runnable` to `runnable`. * - * @api private + * @private * @param {Runnable} runnable - * @return {Context} + * @return {Context} context */ -Context.prototype.runnable = function(runnable) { +Context.prototype.runnable = function (runnable) { if (!arguments.length) { return this._runnable; } @@ -27,13 +31,13 @@ Context.prototype.runnable = function(runnable) { }; /** - * Set test timeout `ms`. + * Set or get test timeout `ms`. * - * @api private + * @private * @param {number} ms * @return {Context} self */ -Context.prototype.timeout = function(ms) { +Context.prototype.timeout = function (ms) { if (!arguments.length) { return this.runnable().timeout(); } @@ -42,25 +46,16 @@ Context.prototype.timeout = function(ms) { }; /** - * Set test timeout `enabled`. - * - * @api private - * @param {boolean} enabled - * @return {Context} self - */ -Context.prototype.enableTimeouts = function(enabled) { - this.runnable().enableTimeouts(enabled); - return this; -}; - -/** - * Set test slowness threshold `ms`. + * Set or get test slowness threshold `ms`. * - * @api private + * @private * @param {number} ms * @return {Context} self */ -Context.prototype.slow = function(ms) { +Context.prototype.slow = function (ms) { + if (!arguments.length) { + return this.runnable().slow(); + } this.runnable().slow(ms); return this; }; @@ -68,22 +63,24 @@ Context.prototype.slow = function(ms) { /** * Mark a test as skipped. * - * @api private - * @return {Context} self + * @private + * @throws Pending */ -Context.prototype.skip = function() { +Context.prototype.skip = function () { this.runnable().skip(); - return this; }; /** - * Inspect the context void of `._runnable`. + * Set or get a number of allowed retries on failed tests * - * @api private - * @return {string} + * @private + * @param {number} n + * @return {Context} self */ -Context.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { - return key === 'runnable' || key === 'test' ? undefined : val; - }, 2); +Context.prototype.retries = function (n) { + if (!arguments.length) { + return this.runnable().retries(); + } + this.runnable().retries(n); + return this; }; diff --git a/build/node_modules/mocha/lib/errors.js b/build/node_modules/mocha/lib/errors.js new file mode 100644 index 00000000..bcc7291c --- /dev/null +++ b/build/node_modules/mocha/lib/errors.js @@ -0,0 +1,563 @@ +'use strict'; + +const {format} = require('util'); + +/** + * Contains error codes, factory functions to create throwable error objects, + * and warning/deprecation functions. + * @module + */ + +/** + * process.emitWarning or a polyfill + * @see https://nodejs.org/api/process.html#process_process_emitwarning_warning_options + * @ignore + */ +const emitWarning = (msg, type) => { + if (process.emitWarning) { + process.emitWarning(msg, type); + } else { + /* istanbul ignore next */ + process.nextTick(function () { + console.warn(type + ': ' + msg); + }); + } +}; + +/** + * Show a deprecation warning. Each distinct message is only displayed once. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ +const deprecate = msg => { + msg = String(msg); + if (msg && !deprecate.cache[msg]) { + deprecate.cache[msg] = true; + emitWarning(msg, 'DeprecationWarning'); + } +}; +deprecate.cache = {}; + +/** + * Show a generic warning. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ +const warn = msg => { + if (msg) { + emitWarning(msg); + } +}; + +/** + * When Mocha throws exceptions (or rejects `Promise`s), it attempts to assign a `code` property to the `Error` object, for easier handling. These are the potential values of `code`. + * @public + * @namespace + * @memberof module:lib/errors + */ +var constants = { + /** + * An unrecoverable error. + * @constant + * @default + */ + FATAL: 'ERR_MOCHA_FATAL', + + /** + * The type of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_TYPE: 'ERR_MOCHA_INVALID_ARG_TYPE', + + /** + * The value of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_VALUE: 'ERR_MOCHA_INVALID_ARG_VALUE', + + /** + * Something was thrown, but it wasn't an `Error` + * @constant + * @default + */ + INVALID_EXCEPTION: 'ERR_MOCHA_INVALID_EXCEPTION', + + /** + * An interface (e.g., `Mocha.interfaces`) is unknown or invalid + * @constant + * @default + */ + INVALID_INTERFACE: 'ERR_MOCHA_INVALID_INTERFACE', + + /** + * A reporter (.e.g, `Mocha.reporters`) is unknown or invalid + * @constant + * @default + */ + INVALID_REPORTER: 'ERR_MOCHA_INVALID_REPORTER', + + /** + * `done()` was called twice in a `Test` or `Hook` callback + * @constant + * @default + */ + MULTIPLE_DONE: 'ERR_MOCHA_MULTIPLE_DONE', + + /** + * No files matched the pattern provided by the user + * @constant + * @default + */ + NO_FILES_MATCH_PATTERN: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN', + + /** + * Known, but unsupported behavior of some kind + * @constant + * @default + */ + UNSUPPORTED: 'ERR_MOCHA_UNSUPPORTED', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_RUNNING: 'ERR_MOCHA_INSTANCE_ALREADY_RUNNING', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_DISPOSED: 'ERR_MOCHA_INSTANCE_ALREADY_DISPOSED', + + /** + * Use of `only()` w/ `--forbid-only` results in this error. + * @constant + * @default + */ + FORBIDDEN_EXCLUSIVITY: 'ERR_MOCHA_FORBIDDEN_EXCLUSIVITY', + + /** + * To be thrown when a user-defined plugin implementation (e.g., `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_IMPLEMENTATION: 'ERR_MOCHA_INVALID_PLUGIN_IMPLEMENTATION', + + /** + * To be thrown when a builtin or third-party plugin definition (the _definition_ of `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_DEFINITION: 'ERR_MOCHA_INVALID_PLUGIN_DEFINITION', + + /** + * When a runnable exceeds its allowed run time. + * @constant + * @default + */ + TIMEOUT: 'ERR_MOCHA_TIMEOUT', + + /** + * Input file is not able to be parsed + * @constant + * @default + */ + UNPARSABLE_FILE: 'ERR_MOCHA_UNPARSABLE_FILE' +}; + +/** + * A set containing all string values of all Mocha error constants, for use by {@link isMochaError}. + * @private + */ +const MOCHA_ERRORS = new Set(Object.values(constants)); + +/** + * Creates an error object to be thrown when no files to be tested could be found using specified pattern. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} pattern - User-specified argument value. + * @returns {Error} instance detailing the error condition + */ +function createNoFilesMatchPatternError(message, pattern) { + var err = new Error(message); + err.code = constants.NO_FILES_MATCH_PATTERN; + err.pattern = pattern; + return err; +} + +/** + * Creates an error object to be thrown when the reporter specified in the options was not found. + * + * @public + * @param {string} message - Error message to be displayed. + * @param {string} reporter - User-specified reporter value. + * @returns {Error} instance detailing the error condition + */ +function createInvalidReporterError(message, reporter) { + var err = new TypeError(message); + err.code = constants.INVALID_REPORTER; + err.reporter = reporter; + return err; +} + +/** + * Creates an error object to be thrown when the interface specified in the options was not found. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} ui - User-specified interface value. + * @returns {Error} instance detailing the error condition + */ +function createInvalidInterfaceError(message, ui) { + var err = new Error(message); + err.code = constants.INVALID_INTERFACE; + err.interface = ui; + return err; +} + +/** + * Creates an error object to be thrown when a behavior, option, or parameter is unsupported. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ +function createUnsupportedError(message) { + var err = new Error(message); + err.code = constants.UNSUPPORTED; + return err; +} + +/** + * Creates an error object to be thrown when an argument is missing. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ +function createMissingArgumentError(message, argument, expected) { + return createInvalidArgumentTypeError(message, argument, expected); +} + +/** + * Creates an error object to be thrown when an argument did not use the supported type + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ +function createInvalidArgumentTypeError(message, argument, expected) { + var err = new TypeError(message); + err.code = constants.INVALID_ARG_TYPE; + err.argument = argument; + err.expected = expected; + err.actual = typeof argument; + return err; +} + +/** + * Creates an error object to be thrown when an argument did not use the supported value + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} value - Argument value. + * @param {string} [reason] - Why value is invalid. + * @returns {Error} instance detailing the error condition + */ +function createInvalidArgumentValueError(message, argument, value, reason) { + var err = new TypeError(message); + err.code = constants.INVALID_ARG_VALUE; + err.argument = argument; + err.value = value; + err.reason = typeof reason !== 'undefined' ? reason : 'is invalid'; + return err; +} + +/** + * Creates an error object to be thrown when an exception was caught, but the `Error` is falsy or undefined. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ +function createInvalidExceptionError(message, value) { + var err = new Error(message); + err.code = constants.INVALID_EXCEPTION; + err.valueType = typeof value; + err.value = value; + return err; +} + +/** + * Creates an error object to be thrown when an unrecoverable error occurs. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ +function createFatalError(message, value) { + var err = new Error(message); + err.code = constants.FATAL; + err.valueType = typeof value; + err.value = value; + return err; +} + +/** + * Dynamically creates a plugin-type-specific error based on plugin type + * @param {string} message - Error message + * @param {"reporter"|"ui"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ +function createInvalidLegacyPluginError(message, pluginType, pluginId) { + switch (pluginType) { + case 'reporter': + return createInvalidReporterError(message, pluginId); + case 'ui': + return createInvalidInterfaceError(message, pluginId); + default: + throw new Error('unknown pluginType "' + pluginType + '"'); + } +} + +/** + * **DEPRECATED**. Use {@link createInvalidLegacyPluginError} instead Dynamically creates a plugin-type-specific error based on plugin type + * @deprecated + * @param {string} message - Error message + * @param {"reporter"|"interface"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ +function createInvalidPluginError(...args) { + deprecate('Use createInvalidLegacyPluginError() instead'); + return createInvalidLegacyPluginError(...args); +} + +/** + * Creates an error object to be thrown when a mocha object's `run` method is executed while it is already disposed. + * @param {string} message The error message to be displayed. + * @param {boolean} cleanReferencesAfterRun the value of `cleanReferencesAfterRun` + * @param {Mocha} instance the mocha instance that throw this error + * @static + */ +function createMochaInstanceAlreadyDisposedError( + message, + cleanReferencesAfterRun, + instance +) { + var err = new Error(message); + err.code = constants.INSTANCE_ALREADY_DISPOSED; + err.cleanReferencesAfterRun = cleanReferencesAfterRun; + err.instance = instance; + return err; +} + +/** + * Creates an error object to be thrown when a mocha object's `run` method is called while a test run is in progress. + * @param {string} message The error message to be displayed. + * @static + * @public + */ +function createMochaInstanceAlreadyRunningError(message, instance) { + var err = new Error(message); + err.code = constants.INSTANCE_ALREADY_RUNNING; + err.instance = instance; + return err; +} + +/** + * Creates an error object to be thrown when done() is called multiple times in a test + * + * @public + * @param {Runnable} runnable - Original runnable + * @param {Error} [originalErr] - Original error, if any + * @returns {Error} instance detailing the error condition + * @static + */ +function createMultipleDoneError(runnable, originalErr) { + var title; + try { + title = format('<%s>', runnable.fullTitle()); + if (runnable.parent.root) { + title += ' (of root suite)'; + } + } catch (ignored) { + title = format('<%s> (of unknown suite)', runnable.title); + } + var message = format( + 'done() called multiple times in %s %s', + runnable.type ? runnable.type : 'unknown runnable', + title + ); + if (runnable.file) { + message += format(' of file %s', runnable.file); + } + if (originalErr) { + message += format('; in addition, done() received error: %s', originalErr); + } + + var err = new Error(message); + err.code = constants.MULTIPLE_DONE; + err.valueType = typeof originalErr; + err.value = originalErr; + return err; +} + +/** + * Creates an error object to be thrown when `.only()` is used with + * `--forbid-only`. + * @static + * @public + * @param {Mocha} mocha - Mocha instance + * @returns {Error} Error with code {@link constants.FORBIDDEN_EXCLUSIVITY} + */ +function createForbiddenExclusivityError(mocha) { + var err = new Error( + mocha.isWorker + ? '`.only` is not supported in parallel mode' + : '`.only` forbidden by --forbid-only' + ); + err.code = constants.FORBIDDEN_EXCLUSIVITY; + return err; +} + +/** + * Creates an error object to be thrown when a plugin definition is invalid + * @static + * @param {string} msg - Error message + * @param {PluginDefinition} [pluginDef] - Problematic plugin definition + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ +function createInvalidPluginDefinitionError(msg, pluginDef) { + const err = new Error(msg); + err.code = constants.INVALID_PLUGIN_DEFINITION; + err.pluginDef = pluginDef; + return err; +} + +/** + * Creates an error object to be thrown when a plugin implementation (user code) is invalid + * @static + * @param {string} msg - Error message + * @param {Object} [opts] - Plugin definition and user-supplied implementation + * @param {PluginDefinition} [opts.pluginDef] - Plugin Definition + * @param {*} [opts.pluginImpl] - Plugin Implementation (user-supplied) + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ +function createInvalidPluginImplementationError( + msg, + {pluginDef, pluginImpl} = {} +) { + const err = new Error(msg); + err.code = constants.INVALID_PLUGIN_IMPLEMENTATION; + err.pluginDef = pluginDef; + err.pluginImpl = pluginImpl; + return err; +} + +/** + * Creates an error object to be thrown when a runnable exceeds its allowed run time. + * @static + * @param {string} msg - Error message + * @param {number} [timeout] - Timeout in ms + * @param {string} [file] - File, if given + * @returns {MochaTimeoutError} + */ +function createTimeoutError(msg, timeout, file) { + const err = new Error(msg); + err.code = constants.TIMEOUT; + err.timeout = timeout; + err.file = file; + return err; +} + +/** + * Creates an error object to be thrown when file is unparsable + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} filename - File name + * @returns {Error} Error with code {@link constants.UNPARSABLE_FILE} + */ +function createUnparsableFileError(message, filename) { + var err = new Error(message); + err.code = constants.UNPARSABLE_FILE; + return err; +} + +/** + * Returns `true` if an error came out of Mocha. + * _Can suffer from false negatives, but not false positives._ + * @static + * @public + * @param {*} err - Error, or anything + * @returns {boolean} + */ +const isMochaError = err => + Boolean(err && typeof err === 'object' && MOCHA_ERRORS.has(err.code)); + +module.exports = { + constants, + createFatalError, + createForbiddenExclusivityError, + createInvalidArgumentTypeError, + createInvalidArgumentValueError, + createInvalidExceptionError, + createInvalidInterfaceError, + createInvalidLegacyPluginError, + createInvalidPluginDefinitionError, + createInvalidPluginError, + createInvalidPluginImplementationError, + createInvalidReporterError, + createMissingArgumentError, + createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError, + createMultipleDoneError, + createNoFilesMatchPatternError, + createTimeoutError, + createUnparsableFileError, + createUnsupportedError, + deprecate, + isMochaError, + warn +}; + +/** + * The error thrown when a Runnable times out + * @memberof module:lib/errors + * @typedef {Error} MochaTimeoutError + * @property {constants.TIMEOUT} code - Error code + * @property {number?} timeout Timeout in ms + * @property {string?} file Filepath, if given + */ diff --git a/build/node_modules/mocha/lib/hook.js b/build/node_modules/mocha/lib/hook.js index 0417e013..862271e7 100644 --- a/build/node_modules/mocha/lib/hook.js +++ b/build/node_modules/mocha/lib/hook.js @@ -1,9 +1,8 @@ -/** - * Module dependencies. - */ +'use strict'; var Runnable = require('./runnable'); -var inherits = require('./utils').inherits; +const {inherits, constants} = require('./utils'); +const {MOCHA_ID_PROP_NAME} = constants; /** * Expose `Hook`. @@ -12,11 +11,12 @@ var inherits = require('./utils').inherits; module.exports = Hook; /** - * Initialize a new `Hook` with the given `title` and callback `fn`. + * Initialize a new `Hook` with the given `title` and callback `fn` * + * @class + * @extends Runnable * @param {String} title * @param {Function} fn - * @api private */ function Hook(title, fn) { Runnable.call(this, title, fn); @@ -28,14 +28,23 @@ function Hook(title, fn) { */ inherits(Hook, Runnable); +/** + * Resets the state for a next run. + */ +Hook.prototype.reset = function () { + Runnable.prototype.reset.call(this); + delete this._error; +}; + /** * Get or set the test `err`. * + * @memberof Hook + * @public * @param {Error} err * @return {Error} - * @api public */ -Hook.prototype.error = function(err) { +Hook.prototype.error = function (err) { if (!arguments.length) { err = this._error; this._error = null; @@ -44,3 +53,37 @@ Hook.prototype.error = function(err) { this._error = err; }; + +/** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ +Hook.prototype.serialize = function serialize() { + return { + $$currentRetry: this.currentRetry(), + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + $$titlePath: this.titlePath(), + ctx: + this.ctx && this.ctx.currentTest + ? { + currentTest: { + title: this.ctx.currentTest.title, + [MOCHA_ID_PROP_NAME]: this.ctx.currentTest.id + } + } + : {}, + duration: this.duration, + file: this.file, + parent: { + $$fullTitle: this.parent.fullTitle(), + [MOCHA_ID_PROP_NAME]: this.parent.id + }, + state: this.state, + title: this.title, + type: this.type, + [MOCHA_ID_PROP_NAME]: this.id + }; +}; diff --git a/build/node_modules/mocha/lib/interfaces/bdd.js b/build/node_modules/mocha/lib/interfaces/bdd.js index 253f24e4..bf1ffe88 100644 --- a/build/node_modules/mocha/lib/interfaces/bdd.js +++ b/build/node_modules/mocha/lib/interfaces/bdd.js @@ -1,10 +1,8 @@ -/** - * Module dependencies. - */ +'use strict'; -var Suite = require('../suite'); var Test = require('../test'); -var escapeRe = require('escape-string-regexp'); +var EVENT_FILE_PRE_REQUIRE = + require('../suite').constants.EVENT_FILE_PRE_REQUIRE; /** * BDD-style interface: @@ -23,11 +21,11 @@ var escapeRe = require('escape-string-regexp'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function bddInterface(suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { - var common = require('./common')(suites, context); + suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) { + var common = require('./common')(suites, context, mocha); context.before = common.before; context.after = common.after; @@ -40,35 +38,39 @@ module.exports = function(suite) { * and/or tests. */ - context.describe = context.context = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.file = file; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; + context.describe = context.context = function (title, fn) { + return common.suite.create({ + title: title, + file: file, + fn: fn + }); }; /** * Pending describe. */ - context.xdescribe = context.xcontext = context.describe.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; + context.xdescribe = + context.xcontext = + context.describe.skip = + function (title, fn) { + return common.suite.skip({ + title: title, + file: file, + fn: fn + }); + }; /** * Exclusive suite. */ - context.describe.only = function(title, fn) { - var suite = context.describe(title, fn); - mocha.grep(suite.fullTitle()); - return suite; + context.describe.only = function (title, fn) { + return common.suite.only({ + title: title, + file: file, + fn: fn + }); }; /** @@ -77,9 +79,9 @@ module.exports = function(suite) { * acting as a thunk. */ - context.it = context.specify = function(title, fn) { + context.it = context.specify = function (title, fn) { var suite = suites[0]; - if (suite.pending) { + if (suite.isPending()) { fn = null; } var test = new Test(title, fn); @@ -92,19 +94,21 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.it.only = function(title, fn) { - var test = context.it(title, fn); - var reString = '^' + escapeRe(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - return test; + context.it.only = function (title, fn) { + return common.test.only(mocha, context.it(title, fn)); }; /** * Pending test case. */ - context.xit = context.xspecify = context.it.skip = function(title) { - context.it(title); - }; + context.xit = + context.xspecify = + context.it.skip = + function (title) { + return context.it(title); + }; }); }; + +module.exports.description = 'BDD or RSpec style [default]'; diff --git a/build/node_modules/mocha/lib/interfaces/common.js b/build/node_modules/mocha/lib/interfaces/common.js index 4a21c16c..ba8b5f85 100644 --- a/build/node_modules/mocha/lib/interfaces/common.js +++ b/build/node_modules/mocha/lib/interfaces/common.js @@ -1,19 +1,47 @@ 'use strict'; +/** + @module interfaces/common +*/ + +var Suite = require('../suite'); +var errors = require('../errors'); +var createMissingArgumentError = errors.createMissingArgumentError; +var createUnsupportedError = errors.createUnsupportedError; +var createForbiddenExclusivityError = errors.createForbiddenExclusivityError; + /** * Functions common to more than one interface. * + * @private * @param {Suite[]} suites * @param {Context} context + * @param {Mocha} mocha * @return {Object} An object containing common functions. */ -module.exports = function(suites, context) { +module.exports = function (suites, context, mocha) { + /** + * Check if the suite should be tested. + * + * @private + * @param {Suite} suite - suite to check + * @returns {boolean} + */ + function shouldBeTested(suite) { + return ( + !mocha.options.grep || + (mocha.options.grep && + mocha.options.grep.test(suite.fullTitle()) && + !mocha.options.invert) + ); + } + return { /** * This is only present if flag --delay is passed into Mocha. It triggers * root suite execution. * - * @param {Suite} suite The root wuite. + * @param {Suite} suite The root suite. * @return {Function} A function which runs the root suite */ runWithSuite: function runWithSuite(suite) { @@ -28,7 +56,7 @@ module.exports = function(suites, context) { * @param {string} name * @param {Function} fn */ - before: function(name, fn) { + before: function (name, fn) { suites[0].beforeAll(name, fn); }, @@ -38,7 +66,7 @@ module.exports = function(suites, context) { * @param {string} name * @param {Function} fn */ - after: function(name, fn) { + after: function (name, fn) { suites[0].afterAll(name, fn); }, @@ -48,7 +76,7 @@ module.exports = function(suites, context) { * @param {string} name * @param {Function} fn */ - beforeEach: function(name, fn) { + beforeEach: function (name, fn) { suites[0].beforeEach(name, fn); }, @@ -58,17 +86,106 @@ module.exports = function(suites, context) { * @param {string} name * @param {Function} fn */ - afterEach: function(name, fn) { + afterEach: function (name, fn) { suites[0].afterEach(name, fn); }, + suite: { + /** + * Create an exclusive Suite; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + only: function only(opts) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + opts.isOnly = true; + return this.create(opts); + }, + + /** + * Create a Suite, but skip it; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + skip: function skip(opts) { + opts.pending = true; + return this.create(opts); + }, + + /** + * Creates a suite. + * + * @param {Object} opts Options + * @param {string} opts.title Title of Suite + * @param {Function} [opts.fn] Suite Function (not always applicable) + * @param {boolean} [opts.pending] Is Suite pending? + * @param {string} [opts.file] Filepath where this Suite resides + * @param {boolean} [opts.isOnly] Is Suite exclusive? + * @returns {Suite} + */ + create: function create(opts) { + var suite = Suite.create(suites[0], opts.title); + suite.pending = Boolean(opts.pending); + suite.file = opts.file; + suites.unshift(suite); + if (opts.isOnly) { + suite.markOnly(); + } + if ( + suite.pending && + mocha.options.forbidPending && + shouldBeTested(suite) + ) { + throw createUnsupportedError('Pending test forbidden'); + } + if (typeof opts.fn === 'function') { + opts.fn.call(suite); + suites.shift(); + } else if (typeof opts.fn === 'undefined' && !suite.pending) { + throw createMissingArgumentError( + 'Suite "' + + suite.fullTitle() + + '" was defined but no callback was supplied. ' + + 'Supply a callback or explicitly skip the suite.', + 'callback', + 'function' + ); + } else if (!opts.fn && suite.pending) { + suites.shift(); + } + + return suite; + } + }, + test: { + /** + * Exclusive test-case. + * + * @param {Object} mocha + * @param {Function} test + * @returns {*} + */ + only: function (mocha, test) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + test.markOnly(); + return test; + }, + /** * Pending test case. * * @param {string} title */ - skip: function(title) { + skip: function (title) { context.test(title); } } diff --git a/build/node_modules/mocha/lib/interfaces/exports.js b/build/node_modules/mocha/lib/interfaces/exports.js index a64692ae..79b762b5 100644 --- a/build/node_modules/mocha/lib/interfaces/exports.js +++ b/build/node_modules/mocha/lib/interfaces/exports.js @@ -1,12 +1,9 @@ -/** - * Module dependencies. - */ - +'use strict'; var Suite = require('../suite'); var Test = require('../test'); /** - * TDD-style interface: + * Exports-style (as Node.js module) interface: * * exports.Array = { * '#indexOf()': { @@ -22,10 +19,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('require', visit); + suite.on(Suite.constants.EVENT_FILE_REQUIRE, visit); function visit(obj, file) { var suite; @@ -53,9 +50,11 @@ module.exports = function(suite) { } else { suite = Suite.create(suites[0], key); suites.unshift(suite); - visit(obj[key]); + visit(obj[key], file); suites.shift(); } } } }; + +module.exports.description = 'Node.js module ("exports") style'; diff --git a/build/node_modules/mocha/lib/interfaces/index.js b/build/node_modules/mocha/lib/interfaces/index.js index 4f825d15..0bd810ab 100644 --- a/build/node_modules/mocha/lib/interfaces/index.js +++ b/build/node_modules/mocha/lib/interfaces/index.js @@ -1,3 +1,5 @@ +'use strict'; + exports.bdd = require('./bdd'); exports.tdd = require('./tdd'); exports.qunit = require('./qunit'); diff --git a/build/node_modules/mocha/lib/interfaces/qunit.js b/build/node_modules/mocha/lib/interfaces/qunit.js index be7f50fb..71cad080 100644 --- a/build/node_modules/mocha/lib/interfaces/qunit.js +++ b/build/node_modules/mocha/lib/interfaces/qunit.js @@ -1,10 +1,8 @@ -/** - * Module dependencies. - */ +'use strict'; -var Suite = require('../suite'); var Test = require('../test'); -var escapeRe = require('escape-string-regexp'); +var EVENT_FILE_PRE_REQUIRE = + require('../suite').constants.EVENT_FILE_PRE_REQUIRE; /** * QUnit-style interface: @@ -31,11 +29,11 @@ var escapeRe = require('escape-string-regexp'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function qUnitInterface(suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { - var common = require('./common')(suites, context); + suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) { + var common = require('./common')(suites, context, mocha); context.before = common.before; context.after = common.after; @@ -46,23 +44,30 @@ module.exports = function(suite) { * Describe a "suite" with the given `title`. */ - context.suite = function(title) { + context.suite = function (title) { if (suites.length > 1) { suites.shift(); } - var suite = Suite.create(suites[0], title); - suite.file = file; - suites.unshift(suite); - return suite; + return common.suite.create({ + title: title, + file: file, + fn: false + }); }; /** - * Exclusive test-case. + * Exclusive Suite. */ - context.suite.only = function(title, fn) { - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); + context.suite.only = function (title) { + if (suites.length > 1) { + suites.shift(); + } + return common.suite.only({ + title: title, + file: file, + fn: false + }); }; /** @@ -71,7 +76,7 @@ module.exports = function(suite) { * acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var test = new Test(title, fn); test.file = file; suites[0].addTest(test); @@ -82,12 +87,12 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { - var test = context.test(title, fn); - var reString = '^' + escapeRe(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); + context.test.only = function (title, fn) { + return common.test.only(mocha, context.test(title, fn)); }; context.test.skip = common.test.skip; }); }; + +module.exports.description = 'QUnit style'; diff --git a/build/node_modules/mocha/lib/interfaces/tdd.js b/build/node_modules/mocha/lib/interfaces/tdd.js index fb22a791..f52ae0cb 100644 --- a/build/node_modules/mocha/lib/interfaces/tdd.js +++ b/build/node_modules/mocha/lib/interfaces/tdd.js @@ -1,10 +1,8 @@ -/** - * Module dependencies. - */ +'use strict'; -var Suite = require('../suite'); var Test = require('../test'); -var escapeRe = require('escape-string-regexp'); +var EVENT_FILE_PRE_REQUIRE = + require('../suite').constants.EVENT_FILE_PRE_REQUIRE; /** * TDD-style interface: @@ -31,11 +29,11 @@ var escapeRe = require('escape-string-regexp'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { - var common = require('./common')(suites, context); + suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) { + var common = require('./common')(suites, context, mocha); context.setup = common.beforeEach; context.teardown = common.afterEach; @@ -47,41 +45,43 @@ module.exports = function(suite) { * Describe a "suite" with the given `title` and callback `fn` containing * nested suites and/or tests. */ - context.suite = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.file = file; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; + context.suite = function (title, fn) { + return common.suite.create({ + title: title, + file: file, + fn: fn + }); }; /** * Pending suite. */ - context.suite.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); + context.suite.skip = function (title, fn) { + return common.suite.skip({ + title: title, + file: file, + fn: fn + }); }; /** * Exclusive test-case. */ - context.suite.only = function(title, fn) { - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); + context.suite.only = function (title, fn) { + return common.suite.only({ + title: title, + file: file, + fn: fn + }); }; /** * Describe a specification or test-case with the given `title` and * callback `fn` acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var suite = suites[0]; - if (suite.pending) { + if (suite.isPending()) { fn = null; } var test = new Test(title, fn); @@ -94,12 +94,13 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { - var test = context.test(title, fn); - var reString = '^' + escapeRe(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); + context.test.only = function (title, fn) { + return common.test.only(mocha, context.test(title, fn)); }; context.test.skip = common.test.skip; }); }; + +module.exports.description = + 'traditional "suite"/"test" instead of BDD\'s "describe"/"it"'; diff --git a/build/node_modules/mocha/lib/mocha.js b/build/node_modules/mocha/lib/mocha.js index eb6c8d07..cee11f3a 100644 --- a/build/node_modules/mocha/lib/mocha.js +++ b/build/node_modules/mocha/lib/mocha.js @@ -1,440 +1,884 @@ +'use strict'; + /*! * mocha * Copyright(c) 2011 TJ Holowaychuk * MIT Licensed */ -/** - * Module dependencies. - */ - var escapeRe = require('escape-string-regexp'); var path = require('path'); -var reporters = require('./reporters'); +var builtinReporters = require('./reporters'); +var growl = require('./nodejs/growl'); var utils = require('./utils'); +var mocharc = require('./mocharc.json'); +var Suite = require('./suite'); +var esmUtils = require('./nodejs/esm-utils'); +var createStatsCollector = require('./stats-collector'); +const { + createInvalidReporterError, + createInvalidInterfaceError, + createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError, + createUnsupportedError +} = require('./errors'); +const {EVENT_FILE_PRE_REQUIRE, EVENT_FILE_POST_REQUIRE, EVENT_FILE_REQUIRE} = + Suite.constants; +var debug = require('debug')('mocha:mocha'); + +exports = module.exports = Mocha; /** - * Expose `Mocha`. + * A Mocha instance is a finite state machine. + * These are the states it can be in. + * @private */ - -exports = module.exports = Mocha; +var mochaStates = utils.defineConstants({ + /** + * Initial state of the mocha instance + * @private + */ + INIT: 'init', + /** + * Mocha instance is running tests + * @private + */ + RUNNING: 'running', + /** + * Mocha instance is done running tests and references to test functions and hooks are cleaned. + * You can reset this state by unloading the test files. + * @private + */ + REFERENCES_CLEANED: 'referencesCleaned', + /** + * Mocha instance is disposed and can no longer be used. + * @private + */ + DISPOSED: 'disposed' +}); /** * To require local UIs and reporters when running in node. */ -if (!process.browser) { - var cwd = process.cwd(); +if (!utils.isBrowser() && typeof module.paths !== 'undefined') { + var cwd = utils.cwd(); module.paths.push(cwd, path.join(cwd, 'node_modules')); } /** * Expose internals. + * @private */ exports.utils = utils; exports.interfaces = require('./interfaces'); -exports.reporters = reporters; +/** + * @public + * @memberof Mocha + */ +exports.reporters = builtinReporters; exports.Runnable = require('./runnable'); exports.Context = require('./context'); +/** + * + * @memberof Mocha + */ exports.Runner = require('./runner'); -exports.Suite = require('./suite'); +exports.Suite = Suite; exports.Hook = require('./hook'); exports.Test = require('./test'); -/** - * Return image `name` path. - * - * @api private - * @param {string} name - * @return {string} - */ -function image(name) { - return path.join(__dirname, '../images', name + '.png'); -} +let currentContext; +exports.afterEach = function (...args) { + return (currentContext.afterEach || currentContext.teardown).apply( + this, + args + ); +}; +exports.after = function (...args) { + return (currentContext.after || currentContext.suiteTeardown).apply( + this, + args + ); +}; +exports.beforeEach = function (...args) { + return (currentContext.beforeEach || currentContext.setup).apply(this, args); +}; +exports.before = function (...args) { + return (currentContext.before || currentContext.suiteSetup).apply(this, args); +}; +exports.describe = function (...args) { + return (currentContext.describe || currentContext.suite).apply(this, args); +}; +exports.describe.only = function (...args) { + return (currentContext.describe || currentContext.suite).only.apply( + this, + args + ); +}; +exports.describe.skip = function (...args) { + return (currentContext.describe || currentContext.suite).skip.apply( + this, + args + ); +}; +exports.it = function (...args) { + return (currentContext.it || currentContext.test).apply(this, args); +}; +exports.it.only = function (...args) { + return (currentContext.it || currentContext.test).only.apply(this, args); +}; +exports.it.skip = function (...args) { + return (currentContext.it || currentContext.test).skip.apply(this, args); +}; +exports.xdescribe = exports.describe.skip; +exports.xit = exports.it.skip; +exports.setup = exports.beforeEach; +exports.suiteSetup = exports.before; +exports.suiteTeardown = exports.after; +exports.suite = exports.describe; +exports.teardown = exports.afterEach; +exports.test = exports.it; +exports.run = function (...args) { + return currentContext.run.apply(this, args); +}; /** - * Set up mocha with `options`. - * - * Options: - * - * - `ui` name "bdd", "tdd", "exports" etc - * - `reporter` reporter instance, defaults to `mocha.reporters.spec` - * - `globals` array of accepted globals - * - `timeout` timeout in milliseconds - * - `bail` bail on the first test failure - * - `slow` milliseconds to wait before considering a test slow - * - `ignoreLeaks` ignore global leaks - * - `fullTrace` display the full stack-trace on failing - * - `grep` string or regexp to filter tests with + * Constructs a new Mocha instance with `options`. * - * @param {Object} options - * @api public + * @public + * @class Mocha + * @param {Object} [options] - Settings object. + * @param {boolean} [options.allowUncaught] - Propagate uncaught errors? + * @param {boolean} [options.asyncOnly] - Force `done` callback or promise? + * @param {boolean} [options.bail] - Bail after first test failure? + * @param {boolean} [options.checkLeaks] - Check for global variable leaks? + * @param {boolean} [options.color] - Color TTY output from reporter? + * @param {boolean} [options.delay] - Delay root suite execution? + * @param {boolean} [options.diff] - Show diff on failure? + * @param {boolean} [options.dryRun] - Report tests without running them? + * @param {boolean} [options.failZero] - Fail test run if zero tests? + * @param {string} [options.fgrep] - Test filter given string. + * @param {boolean} [options.forbidOnly] - Tests marked `only` fail the suite? + * @param {boolean} [options.forbidPending] - Pending tests fail the suite? + * @param {boolean} [options.fullTrace] - Full stacktrace upon failure? + * @param {string[]} [options.global] - Variables expected in global scope. + * @param {RegExp|string} [options.grep] - Test filter given regular expression. + * @param {boolean} [options.growl] - Enable desktop notifications? + * @param {boolean} [options.inlineDiffs] - Display inline diffs? + * @param {boolean} [options.invert] - Invert test filter matches? + * @param {boolean} [options.noHighlighting] - Disable syntax highlighting? + * @param {string|constructor} [options.reporter] - Reporter name or constructor. + * @param {Object} [options.reporterOption] - Reporter settings object. + * @param {number} [options.retries] - Number of times to retry failed tests. + * @param {number} [options.slow] - Slow threshold value. + * @param {number|string} [options.timeout] - Timeout threshold value. + * @param {string} [options.ui] - Interface name. + * @param {boolean} [options.parallel] - Run jobs in parallel. + * @param {number} [options.jobs] - Max number of worker processes for parallel runs. + * @param {MochaRootHookObject} [options.rootHooks] - Hooks to bootstrap the root suite with. + * @param {string[]} [options.require] - Pathname of `rootHooks` plugin for parallel runs. + * @param {boolean} [options.isWorker] - Should be `true` if `Mocha` process is running in a worker process. */ -function Mocha(options) { - options = options || {}; +function Mocha(options = {}) { + options = {...mocharc, ...options}; this.files = []; this.options = options; - if (options.grep) { - this.grep(new RegExp(options.grep)); - } - if (options.fgrep) { - this.grep(options.fgrep); - } - this.suite = new exports.Suite('', new exports.Context()); - this.ui(options.ui); - this.bail(options.bail); - this.reporter(options.reporter, options.reporterOptions); - if (typeof options.timeout !== 'undefined' && options.timeout !== null) { - this.timeout(options.timeout); + // root suite + this.suite = new exports.Suite('', new exports.Context(), true); + this._cleanReferencesAfterRun = true; + this._state = mochaStates.INIT; + + this.grep(options.grep) + .fgrep(options.fgrep) + .ui(options.ui) + .reporter( + options.reporter, + options.reporterOption || options.reporterOptions // for backwards compability + ) + .slow(options.slow) + .global(options.global); + + // this guard exists because Suite#timeout does not consider `undefined` to be valid input + if (typeof options.timeout !== 'undefined') { + this.timeout(options.timeout === false ? 0 : options.timeout); } - this.useColors(options.useColors); - if (options.enableTimeouts !== null) { - this.enableTimeouts(options.enableTimeouts); + + if ('retries' in options) { + this.retries(options.retries); } - if (options.slow) { - this.slow(options.slow); + + [ + 'allowUncaught', + 'asyncOnly', + 'bail', + 'checkLeaks', + 'color', + 'delay', + 'diff', + 'dryRun', + 'failZero', + 'forbidOnly', + 'forbidPending', + 'fullTrace', + 'growl', + 'inlineDiffs', + 'invert' + ].forEach(function (opt) { + if (options[opt]) { + this[opt](); + } + }, this); + + if (options.rootHooks) { + this.rootHooks(options.rootHooks); } - this.suite.on('pre-require', function(context) { - exports.afterEach = context.afterEach || context.teardown; - exports.after = context.after || context.suiteTeardown; - exports.beforeEach = context.beforeEach || context.setup; - exports.before = context.before || context.suiteSetup; - exports.describe = context.describe || context.suite; - exports.it = context.it || context.test; - exports.setup = context.setup || context.beforeEach; - exports.suiteSetup = context.suiteSetup || context.before; - exports.suiteTeardown = context.suiteTeardown || context.after; - exports.suite = context.suite || context.describe; - exports.teardown = context.teardown || context.afterEach; - exports.test = context.test || context.it; - exports.run = context.run; - }); + /** + * The class which we'll instantiate in {@link Mocha#run}. Defaults to + * {@link Runner} in serial mode; changes in parallel mode. + * @memberof Mocha + * @private + */ + this._runnerClass = exports.Runner; + + /** + * Whether or not to call {@link Mocha#loadFiles} implicitly when calling + * {@link Mocha#run}. If this is `true`, then it's up to the consumer to call + * {@link Mocha#loadFiles} _or_ {@link Mocha#loadFilesAsync}. + * @private + * @memberof Mocha + */ + this._lazyLoadFiles = false; + + /** + * It's useful for a Mocha instance to know if it's running in a worker process. + * We could derive this via other means, but it's helpful to have a flag to refer to. + * @memberof Mocha + * @private + */ + this.isWorker = Boolean(options.isWorker); + + this.globalSetup(options.globalSetup) + .globalTeardown(options.globalTeardown) + .enableGlobalSetup(options.enableGlobalSetup) + .enableGlobalTeardown(options.enableGlobalTeardown); + + if ( + options.parallel && + (typeof options.jobs === 'undefined' || options.jobs > 1) + ) { + debug('attempting to enable parallel mode'); + this.parallelMode(true); + } } /** - * Enable or disable bailing on the first failure. + * Enables or disables bailing on the first failure. * - * @api public - * @param {boolean} [bail] + * @public + * @see [CLI option](../#-bail-b) + * @param {boolean} [bail=true] - Whether to bail on first error. + * @returns {Mocha} this + * @chainable */ -Mocha.prototype.bail = function(bail) { - if (!arguments.length) { - bail = true; - } - this.suite.bail(bail); +Mocha.prototype.bail = function (bail) { + this.suite.bail(bail !== false); return this; }; /** - * Add test `file`. + * @summary + * Adds `file` to be loaded for execution. + * + * @description + * Useful for generic setup code that must be included within test suite. * - * @api public - * @param {string} file + * @public + * @see [CLI option](../#-file-filedirectoryglob) + * @param {string} file - Pathname of file to be loaded. + * @returns {Mocha} this + * @chainable */ -Mocha.prototype.addFile = function(file) { +Mocha.prototype.addFile = function (file) { this.files.push(file); return this; }; /** - * Set reporter to `reporter`, defaults to "spec". + * Sets reporter to `reporter`, defaults to "spec". * - * @param {String|Function} reporter name or constructor - * @param {Object} reporterOptions optional options - * @api public - * @param {string|Function} reporter name or constructor - * @param {Object} reporterOptions optional options + * @public + * @see [CLI option](../#-reporter-name-r-name) + * @see [Reporters](../#reporters) + * @param {String|Function} reporterName - Reporter name or constructor. + * @param {Object} [reporterOptions] - Options used to configure the reporter. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested reporter cannot be loaded + * @example + * + * // Use XUnit reporter and direct its output to file + * mocha.reporter('xunit', { output: '/path/to/testspec.xunit.xml' }); */ -Mocha.prototype.reporter = function(reporter, reporterOptions) { - if (typeof reporter === 'function') { - this._reporter = reporter; +Mocha.prototype.reporter = function (reporterName, reporterOptions) { + if (typeof reporterName === 'function') { + this._reporter = reporterName; } else { - reporter = reporter || 'spec'; - var _reporter; + reporterName = reporterName || 'spec'; + var reporter; // Try to load a built-in reporter. - if (reporters[reporter]) { - _reporter = reporters[reporter]; + if (builtinReporters[reporterName]) { + reporter = builtinReporters[reporterName]; } // Try to load reporters from process.cwd() and node_modules - if (!_reporter) { + if (!reporter) { + let foundReporter; try { - _reporter = require(reporter); + foundReporter = require.resolve(reporterName); + reporter = require(foundReporter); } catch (err) { - err.message.indexOf('Cannot find module') !== -1 - ? console.warn('"' + reporter + '" reporter not found') - : console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack); + if (foundReporter) { + throw createInvalidReporterError(err.message, foundReporter); + } + // Try to load reporters from a cwd-relative path + try { + reporter = require(path.resolve(reporterName)); + } catch (e) { + throw createInvalidReporterError(e.message, reporterName); + } } } - if (!_reporter && reporter === 'teamcity') { - console.warn('The Teamcity reporter was moved to a package named ' - + 'mocha-teamcity-reporter ' - + '(https://npmjs.org/package/mocha-teamcity-reporter).'); - } - if (!_reporter) { - throw new Error('invalid reporter "' + reporter + '"'); - } - this._reporter = _reporter; + this._reporter = reporter; } + this.options.reporterOption = reporterOptions; + // alias option name is used in built-in reporters xunit/tap/progress this.options.reporterOptions = reporterOptions; return this; }; /** - * Set test UI `name`, defaults to "bdd". + * Sets test UI `name`, defaults to "bdd". * - * @api public - * @param {string} bdd + * @public + * @see [CLI option](../#-ui-name-u-name) + * @see [Interface DSLs](../#interfaces) + * @param {string|Function} [ui=bdd] - Interface name or class. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested interface cannot be loaded */ -Mocha.prototype.ui = function(name) { - name = name || 'bdd'; - this._ui = exports.interfaces[name]; - if (!this._ui) { - try { - this._ui = require(name); - } catch (err) { - throw new Error('invalid interface "' + name + '"'); +Mocha.prototype.ui = function (ui) { + var bindInterface; + if (typeof ui === 'function') { + bindInterface = ui; + } else { + ui = ui || 'bdd'; + bindInterface = exports.interfaces[ui]; + if (!bindInterface) { + try { + bindInterface = require(ui); + } catch (err) { + throw createInvalidInterfaceError(`invalid interface '${ui}'`, ui); + } } } - this._ui = this._ui(this.suite); + bindInterface(this.suite); + + this.suite.on(EVENT_FILE_PRE_REQUIRE, function (context) { + currentContext = context; + }); + return this; }; /** - * Load registered files. + * Loads `files` prior to execution. Does not support ES Modules. + * + * @description + * The implementation relies on Node's `require` to execute + * the test interface functions and will be subject to its cache. + * Supports only CommonJS modules. To load ES modules, use Mocha#loadFilesAsync. * - * @api private + * @private + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @see {@link Mocha#loadFilesAsync} + * @param {Function} [fn] - Callback invoked upon completion. */ -Mocha.prototype.loadFiles = function(fn) { +Mocha.prototype.loadFiles = function (fn) { var self = this; var suite = this.suite; - var pending = this.files.length; - this.files.forEach(function(file) { + this.files.forEach(function (file) { file = path.resolve(file); - suite.emit('pre-require', global, file, self); - suite.emit('require', require(file), file, self); - suite.emit('post-require', global, file, self); - --pending || (fn && fn()); + suite.emit(EVENT_FILE_PRE_REQUIRE, global, file, self); + suite.emit(EVENT_FILE_REQUIRE, require(file), file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, global, file, self); }); + fn && fn(); }; /** - * Enable growl support. + * Loads `files` prior to execution. Supports Node ES Modules. * - * @api private + * @description + * The implementation relies on Node's `require` and `import` to execute + * the test interface functions and will be subject to its cache. + * Supports both CJS and ESM modules. + * + * @public + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @returns {Promise} + * @example + * + * // loads ESM (and CJS) test files asynchronously, then runs root suite + * mocha.loadFilesAsync() + * .then(() => mocha.run(failures => process.exitCode = failures ? 1 : 0)) + * .catch(() => process.exitCode = 1); */ -Mocha.prototype._growl = function(runner, reporter) { - var notify = require('growl'); +Mocha.prototype.loadFilesAsync = function () { + var self = this; + var suite = this.suite; + this.lazyLoadFiles(true); - runner.on('end', function() { - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha', - title: 'Passed', - image: image('ok') - }); + return esmUtils.loadFilesAsync( + this.files, + function (file) { + suite.emit(EVENT_FILE_PRE_REQUIRE, global, file, self); + }, + function (file, resultModule) { + suite.emit(EVENT_FILE_REQUIRE, resultModule, file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, global, file, self); } + ); +}; + +/** + * Removes a previously loaded file from Node's `require` cache. + * + * @private + * @static + * @see {@link Mocha#unloadFiles} + * @param {string} file - Pathname of file to be unloaded. + */ +Mocha.unloadFile = function (file) { + if (utils.isBrowser()) { + throw createUnsupportedError( + 'unloadFile() is only suported in a Node.js environment' + ); + } + return require('./nodejs/file-unloader').unloadFile(file); +}; + +/** + * Unloads `files` from Node's `require` cache. + * + * @description + * This allows required files to be "freshly" reloaded, providing the ability + * to reuse a Mocha instance programmatically. + * Note: does not clear ESM module files from the cache + * + * Intended for consumers — not used internally + * + * @public + * @see {@link Mocha#run} + * @returns {Mocha} this + * @chainable + */ +Mocha.prototype.unloadFiles = function () { + if (this._state === mochaStates.DISPOSED) { + throw createMochaInstanceAlreadyDisposedError( + 'Mocha instance is already disposed, it cannot be used again.', + this._cleanReferencesAfterRun, + this + ); + } + + this.files.forEach(function (file) { + Mocha.unloadFile(file); }); + this._state = mochaStates.INIT; + return this; +}; + +/** + * Sets `grep` filter after escaping RegExp special characters. + * + * @public + * @see {@link Mocha#grep} + * @param {string} str - Value to be converted to a regexp. + * @returns {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title begins with `"foo"` followed by a period + * mocha.fgrep('foo.'); + */ +Mocha.prototype.fgrep = function (str) { + if (!str) { + return this; + } + return this.grep(new RegExp(escapeRe(str))); }; /** - * Add regexp to grep, if `re` is a string it is escaped. + * @summary + * Sets `grep` filter used to select specific tests for execution. + * + * @description + * If `re` is a regexp-like string, it will be converted to regexp. + * The regexp is tested against the full title of each test (i.e., the + * name of the test preceded by titles of each its ancestral suites). + * As such, using an exact-match fixed pattern against the + * test name itself will not yield any matches. + *
+ * Previous filter value will be overwritten on each call! + * + * @public + * @see [CLI option](../#-grep-regexp-g-regexp) + * @see {@link Mocha#fgrep} + * @see {@link Mocha#invert} + * @param {RegExp|String} re - Regular expression used to select tests. + * @return {Mocha} this + * @chainable + * @example * - * @param {RegExp|String} re - * @return {Mocha} - * @api public - * @param {RegExp|string} re - * @return {Mocha} + * // Select tests whose full title contains `"match"`, ignoring case + * mocha.grep(/match/i); + * @example + * + * // Same as above but with regexp-like string argument + * mocha.grep('/match/i'); + * @example + * + * // ## Anti-example + * // Given embedded test `it('only-this-test')`... + * mocha.grep('/^only-this-test$/'); // NO! Use `.only()` to do this! */ -Mocha.prototype.grep = function(re) { - this.options.grep = typeof re === 'string' ? new RegExp(escapeRe(re)) : re; +Mocha.prototype.grep = function (re) { + if (utils.isString(re)) { + // extract args if it's regex-like, i.e: [string, pattern, flag] + var arg = re.match(/^\/(.*)\/([gimy]{0,4})$|.*/); + this.options.grep = new RegExp(arg[1] || arg[0], arg[2]); + } else { + this.options.grep = re; + } return this; }; /** - * Invert `.grep()` matches. + * Inverts `grep` matches. * - * @return {Mocha} - * @api public + * @public + * @see {@link Mocha#grep} + * @return {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title does *not* contain `"match"`, ignoring case + * mocha.grep(/match/i).invert(); */ -Mocha.prototype.invert = function() { +Mocha.prototype.invert = function () { this.options.invert = true; return this; }; /** - * Ignore global leaks. + * Enables or disables checking for global variables leaked while running tests. * - * @param {Boolean} ignore - * @return {Mocha} - * @api public - * @param {boolean} ignore - * @return {Mocha} + * @public + * @see [CLI option](../#-check-leaks) + * @param {boolean} [checkLeaks=true] - Whether to check for global variable leaks. + * @return {Mocha} this + * @chainable + */ +Mocha.prototype.checkLeaks = function (checkLeaks) { + this.options.checkLeaks = checkLeaks !== false; + return this; +}; + +/** + * Enables or disables whether or not to dispose after each test run. + * Disable this to ensure you can run the test suite multiple times. + * If disabled, be sure to dispose mocha when you're done to prevent memory leaks. + * @public + * @see {@link Mocha#dispose} + * @param {boolean} cleanReferencesAfterRun + * @return {Mocha} this + * @chainable */ -Mocha.prototype.ignoreLeaks = function(ignore) { - this.options.ignoreLeaks = Boolean(ignore); +Mocha.prototype.cleanReferencesAfterRun = function (cleanReferencesAfterRun) { + this._cleanReferencesAfterRun = cleanReferencesAfterRun !== false; return this; }; /** - * Enable global leak checking. + * Manually dispose this mocha instance. Mark this instance as `disposed` and unable to run more tests. + * It also removes function references to tests functions and hooks, so variables trapped in closures can be cleaned by the garbage collector. + * @public + */ +Mocha.prototype.dispose = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError( + 'Cannot dispose while the mocha instance is still running tests.' + ); + } + this.unloadFiles(); + this._previousRunner && this._previousRunner.dispose(); + this.suite.dispose(); + this._state = mochaStates.DISPOSED; +}; + +/** + * Displays full stack trace upon test failure. * - * @return {Mocha} - * @api public + * @public + * @see [CLI option](../#-full-trace) + * @param {boolean} [fullTrace=true] - Whether to print full stacktrace upon failure. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.checkLeaks = function() { - this.options.ignoreLeaks = false; +Mocha.prototype.fullTrace = function (fullTrace) { + this.options.fullTrace = fullTrace !== false; return this; }; /** - * Display long stack-trace on failing + * Enables desktop notification support if prerequisite software installed. * - * @return {Mocha} - * @api public + * @public + * @see [CLI option](../#-growl-g) + * @return {Mocha} this + * @chainable */ -Mocha.prototype.fullTrace = function() { - this.options.fullStackTrace = true; +Mocha.prototype.growl = function () { + this.options.growl = this.isGrowlCapable(); + if (!this.options.growl) { + var detail = utils.isBrowser() + ? 'notification support not available in this browser...' + : 'notification support prerequisites not installed...'; + console.error(detail + ' cannot enable!'); + } return this; }; /** - * Enable growl support. + * @summary + * Determines if Growl support seems likely. + * + * @description + * Not available when run in browser. + * + * @private + * @see {@link Growl#isCapable} + * @see {@link Mocha#growl} + * @return {boolean} whether Growl support can be expected + */ +Mocha.prototype.isGrowlCapable = growl.isCapable; + +/** + * Implements desktop notifications using a pseudo-reporter. * - * @return {Mocha} - * @api public + * @private + * @see {@link Mocha#growl} + * @see {@link Growl#notify} + * @param {Runner} runner - Runner instance. */ -Mocha.prototype.growl = function() { - this.options.growl = true; +Mocha.prototype._growl = growl.notify; + +/** + * Specifies whitelist of variable names to be expected in global scope. + * + * @public + * @see [CLI option](../#-global-variable-name) + * @see {@link Mocha#checkLeaks} + * @param {String[]|String} global - Accepted global variable name(s). + * @return {Mocha} this + * @chainable + * @example + * + * // Specify variables to be expected in global scope + * mocha.global(['jQuery', 'MyLib']); + */ +Mocha.prototype.global = function (global) { + this.options.global = (this.options.global || []) + .concat(global) + .filter(Boolean) + .filter(function (elt, idx, arr) { + return arr.indexOf(elt) === idx; + }); return this; }; +// for backwards compability, 'globals' is an alias of 'global' +Mocha.prototype.globals = Mocha.prototype.global; /** - * Ignore `globals` array or string. + * Enables or disables TTY color output by screen-oriented reporters. * - * @param {Array|String} globals - * @return {Mocha} - * @api public - * @param {Array|string} globals - * @return {Mocha} + * @public + * @see [CLI option](../#-color-c-colors) + * @param {boolean} [color=true] - Whether to enable color output. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.globals = function(globals) { - this.options.globals = (this.options.globals || []).concat(globals); +Mocha.prototype.color = function (color) { + this.options.color = color !== false; return this; }; /** - * Emit color output. + * Enables or disables reporter to use inline diffs (rather than +/-) + * in test failure output. * - * @param {Boolean} colors - * @return {Mocha} - * @api public - * @param {boolean} colors - * @return {Mocha} + * @public + * @see [CLI option](../#-inline-diffs) + * @param {boolean} [inlineDiffs=true] - Whether to use inline diffs. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.useColors = function(colors) { - if (colors !== undefined) { - this.options.useColors = colors; - } +Mocha.prototype.inlineDiffs = function (inlineDiffs) { + this.options.inlineDiffs = inlineDiffs !== false; return this; }; /** - * Use inline diffs rather than +/-. + * Enables or disables reporter to include diff in test failure output. * - * @param {Boolean} inlineDiffs - * @return {Mocha} - * @api public - * @param {boolean} inlineDiffs - * @return {Mocha} + * @public + * @see [CLI option](../#-diff) + * @param {boolean} [diff=true] - Whether to show diff on failure. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.useInlineDiffs = function(inlineDiffs) { - this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs; +Mocha.prototype.diff = function (diff) { + this.options.diff = diff !== false; return this; }; /** - * Set the timeout in milliseconds. + * @summary + * Sets timeout threshold value. + * + * @description + * A string argument can use shorthand (such as "2s") and will be converted. + * If the value is `0`, timeouts will be disabled. + * + * @public + * @see [CLI option](../#-timeout-ms-t-ms) + * @see [Timeouts](../#timeouts) + * @param {number|string} msecs - Timeout threshold value. + * @return {Mocha} this + * @chainable + * @example * - * @param {Number} timeout - * @return {Mocha} - * @api public - * @param {number} timeout - * @return {Mocha} + * // Sets timeout to one second + * mocha.timeout(1000); + * @example + * + * // Same as above but using string argument + * mocha.timeout('1s'); */ -Mocha.prototype.timeout = function(timeout) { - this.suite.timeout(timeout); +Mocha.prototype.timeout = function (msecs) { + this.suite.timeout(msecs); return this; }; /** - * Set slowness threshold in milliseconds. + * Sets the number of times to retry failed tests. + * + * @public + * @see [CLI option](../#-retries-n) + * @see [Retry Tests](../#retry-tests) + * @param {number} retry - Number of times to retry failed tests. + * @return {Mocha} this + * @chainable + * @example * - * @param {Number} slow - * @return {Mocha} - * @api public - * @param {number} slow - * @return {Mocha} + * // Allow any failed test to retry one more time + * mocha.retries(1); */ -Mocha.prototype.slow = function(slow) { - this.suite.slow(slow); +Mocha.prototype.retries = function (retry) { + this.suite.retries(retry); return this; }; /** - * Enable timeouts. + * Sets slowness threshold value. + * + * @public + * @see [CLI option](../#-slow-ms-s-ms) + * @param {number} msecs - Slowness threshold value. + * @return {Mocha} this + * @chainable + * @example + * + * // Sets "slow" threshold to half a second + * mocha.slow(500); + * @example * - * @param {Boolean} enabled - * @return {Mocha} - * @api public - * @param {boolean} enabled - * @return {Mocha} + * // Same as above but using string argument + * mocha.slow('0.5s'); */ -Mocha.prototype.enableTimeouts = function(enabled) { - this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true); +Mocha.prototype.slow = function (msecs) { + this.suite.slow(msecs); return this; }; /** - * Makes all tests async (accepting a callback) + * Forces all tests to either accept a `done` callback or return a promise. * - * @return {Mocha} - * @api public + * @public + * @see [CLI option](../#-async-only-a) + * @param {boolean} [asyncOnly=true] - Whether to force `done` callback or promise. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.asyncOnly = function() { - this.options.asyncOnly = true; +Mocha.prototype.asyncOnly = function (asyncOnly) { + this.options.asyncOnly = asyncOnly !== false; return this; }; /** - * Disable syntax highlighting (in browser). + * Disables syntax highlighting (in browser). * - * @api public + * @public + * @return {Mocha} this + * @chainable */ -Mocha.prototype.noHighlighting = function() { +Mocha.prototype.noHighlighting = function () { this.options.noHighlighting = true; return this; }; /** - * Enable uncaught errors to propagate (in browser). + * Enables or disables uncaught errors to propagate. * - * @return {Mocha} - * @api public + * @public + * @see [CLI option](../#-allow-uncaught) + * @param {boolean} [allowUncaught=true] - Whether to propagate uncaught errors. + * @return {Mocha} this + * @chainable */ -Mocha.prototype.allowUncaught = function() { - this.options.allowUncaught = true; +Mocha.prototype.allowUncaught = function (allowUncaught) { + this.options.allowUncaught = allowUncaught !== false; return this; }; /** - * Delay root suite execution. - * @returns {Mocha} + * @summary + * Delays root suite execution. + * + * @description + * Used to perform async operations before any suites are run. + * + * @public + * @see [delayed root suite](../#delayed-root-suite) + * @returns {Mocha} this + * @chainable */ Mocha.prototype.delay = function delay() { this.options.delay = true; @@ -442,46 +886,477 @@ Mocha.prototype.delay = function delay() { }; /** - * Run tests and invoke `fn()` when complete. + * Enables or disables running tests in dry-run mode. + * + * @public + * @see [CLI option](../#-dry-run) + * @param {boolean} [dryRun=true] - Whether to activate dry-run mode. + * @return {Mocha} this + * @chainable + */ +Mocha.prototype.dryRun = function (dryRun) { + this.options.dryRun = dryRun !== false; + return this; +}; + +/** + * Fails test run if no tests encountered with exit-code 1. + * + * @public + * @see [CLI option](../#-fail-zero) + * @param {boolean} [failZero=true] - Whether to fail test run. + * @return {Mocha} this + * @chainable + */ +Mocha.prototype.failZero = function (failZero) { + this.options.failZero = failZero !== false; + return this; +}; + +/** + * Causes tests marked `only` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-only) + * @param {boolean} [forbidOnly=true] - Whether tests marked `only` fail the suite. + * @returns {Mocha} this + * @chainable + */ +Mocha.prototype.forbidOnly = function (forbidOnly) { + this.options.forbidOnly = forbidOnly !== false; + return this; +}; + +/** + * Causes pending tests and tests marked `skip` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-pending) + * @param {boolean} [forbidPending=true] - Whether pending tests fail the suite. + * @returns {Mocha} this + * @chainable + */ +Mocha.prototype.forbidPending = function (forbidPending) { + this.options.forbidPending = forbidPending !== false; + return this; +}; + +/** + * Throws an error if mocha is in the wrong state to be able to transition to a "running" state. + * @private + */ +Mocha.prototype._guardRunningStateTransition = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError( + 'Mocha instance is currently running tests, cannot start a next test run until this one is done', + this + ); + } + if ( + this._state === mochaStates.DISPOSED || + this._state === mochaStates.REFERENCES_CLEANED + ) { + throw createMochaInstanceAlreadyDisposedError( + 'Mocha instance is already disposed, cannot start a new test run. Please create a new mocha instance. Be sure to set disable `cleanReferencesAfterRun` when you want to reuse the same mocha instance for multiple test runs.', + this._cleanReferencesAfterRun, + this + ); + } +}; + +/** + * Mocha version as specified by "package.json". * - * @api public - * @param {Function} fn - * @return {Runner} + * @name Mocha#version + * @type string + * @readonly */ -Mocha.prototype.run = function(fn) { - if (this.files.length) { +Object.defineProperty(Mocha.prototype, 'version', { + value: require('../package.json').version, + configurable: false, + enumerable: true, + writable: false +}); + +/** + * Callback to be invoked when test execution is complete. + * + * @private + * @callback DoneCB + * @param {number} failures - Number of failures that occurred. + */ + +/** + * Runs root suite and invokes `fn()` when complete. + * + * @description + * To run tests multiple times (or to run tests in files that are + * already in the `require` cache), make sure to clear them from + * the cache first! + * + * @public + * @see {@link Mocha#unloadFiles} + * @see {@link Runner#run} + * @param {DoneCB} [fn] - Callback invoked when test execution completed. + * @returns {Runner} runner instance + * @example + * + * // exit with non-zero status if there were test failures + * mocha.run(failures => process.exitCode = failures ? 1 : 0); + */ +Mocha.prototype.run = function (fn) { + this._guardRunningStateTransition(); + this._state = mochaStates.RUNNING; + if (this._previousRunner) { + this._previousRunner.dispose(); + this.suite.reset(); + } + if (this.files.length && !this._lazyLoadFiles) { this.loadFiles(); } var suite = this.suite; var options = this.options; options.files = this.files; - var runner = new exports.Runner(suite, options.delay); + const runner = new this._runnerClass(suite, { + cleanReferencesAfterRun: this._cleanReferencesAfterRun, + delay: options.delay, + dryRun: options.dryRun, + failZero: options.failZero + }); + createStatsCollector(runner); var reporter = new this._reporter(runner, options); - runner.ignoreLeaks = options.ignoreLeaks !== false; - runner.fullStackTrace = options.fullStackTrace; + runner.checkLeaks = options.checkLeaks === true; + runner.fullStackTrace = options.fullTrace; runner.asyncOnly = options.asyncOnly; runner.allowUncaught = options.allowUncaught; + runner.forbidOnly = options.forbidOnly; + runner.forbidPending = options.forbidPending; if (options.grep) { runner.grep(options.grep, options.invert); } - if (options.globals) { - runner.globals(options.globals); + if (options.global) { + runner.globals(options.global); } if (options.growl) { - this._growl(runner, reporter); + this._growl(runner); } - if (options.useColors !== undefined) { - exports.reporters.Base.useColors = options.useColors; + if (options.color !== undefined) { + exports.reporters.Base.useColors = options.color; } - exports.reporters.Base.inlineDiffs = options.useInlineDiffs; + exports.reporters.Base.inlineDiffs = options.inlineDiffs; + exports.reporters.Base.hideDiff = !options.diff; - function done(failures) { - if (reporter.done) { + const done = failures => { + this._previousRunner = runner; + this._state = this._cleanReferencesAfterRun + ? mochaStates.REFERENCES_CLEANED + : mochaStates.INIT; + fn = fn || utils.noop; + if (typeof reporter.done === 'function') { reporter.done(failures, fn); } else { - fn && fn(failures); + fn(failures); + } + }; + + const runAsync = async runner => { + const context = + this.options.enableGlobalSetup && this.hasGlobalSetupFixtures() + ? await this.runGlobalSetup(runner) + : {}; + const failureCount = await runner.runAsync({ + files: this.files, + options + }); + if (this.options.enableGlobalTeardown && this.hasGlobalTeardownFixtures()) { + await this.runGlobalTeardown(runner, {context}); } + return failureCount; + }; + + // no "catch" here is intentional. errors coming out of + // Runner#run are considered uncaught/unhandled and caught + // by the `process` event listeners. + // also: returning anything other than `runner` would be a breaking + // change + runAsync(runner).then(done); + + return runner; +}; + +/** + * Assigns hooks to the root suite + * @param {MochaRootHookObject} [hooks] - Hooks to assign to root suite + * @chainable + */ +Mocha.prototype.rootHooks = function rootHooks({ + beforeAll = [], + beforeEach = [], + afterAll = [], + afterEach = [] +} = {}) { + beforeAll = utils.castArray(beforeAll); + beforeEach = utils.castArray(beforeEach); + afterAll = utils.castArray(afterAll); + afterEach = utils.castArray(afterEach); + beforeAll.forEach(hook => { + this.suite.beforeAll(hook); + }); + beforeEach.forEach(hook => { + this.suite.beforeEach(hook); + }); + afterAll.forEach(hook => { + this.suite.afterAll(hook); + }); + afterEach.forEach(hook => { + this.suite.afterEach(hook); + }); + return this; +}; + +/** + * Toggles parallel mode. + * + * Must be run before calling {@link Mocha#run}. Changes the `Runner` class to + * use; also enables lazy file loading if not already done so. + * + * Warning: when passed `false` and lazy loading has been enabled _via any means_ (including calling `parallelMode(true)`), this method will _not_ disable lazy loading. Lazy loading is a prerequisite for parallel + * mode, but parallel mode is _not_ a prerequisite for lazy loading! + * @param {boolean} [enable] - If `true`, enable; otherwise disable. + * @throws If run in browser + * @throws If Mocha not in `INIT` state + * @returns {Mocha} + * @chainable + * @public + */ +Mocha.prototype.parallelMode = function parallelMode(enable = true) { + if (utils.isBrowser()) { + throw createUnsupportedError('parallel mode is only supported in Node.js'); + } + const parallel = Boolean(enable); + if ( + parallel === this.options.parallel && + this._lazyLoadFiles && + this._runnerClass !== exports.Runner + ) { + return this; } + if (this._state !== mochaStates.INIT) { + throw createUnsupportedError( + 'cannot change parallel mode after having called run()' + ); + } + this.options.parallel = parallel; + + // swap Runner class + this._runnerClass = parallel + ? require('./nodejs/parallel-buffered-runner') + : exports.Runner; - return runner.run(done); + // lazyLoadFiles may have been set `true` otherwise (for ESM loading), + // so keep `true` if so. + return this.lazyLoadFiles(this._lazyLoadFiles || parallel); +}; + +/** + * Disables implicit call to {@link Mocha#loadFiles} in {@link Mocha#run}. This + * setting is used by watch mode, parallel mode, and for loading ESM files. + * @todo This should throw if we've already loaded files; such behavior + * necessitates adding a new state. + * @param {boolean} [enable] - If `true`, disable eager loading of files in + * {@link Mocha#run} + * @chainable + * @public + */ +Mocha.prototype.lazyLoadFiles = function lazyLoadFiles(enable) { + this._lazyLoadFiles = enable === true; + debug('set lazy load to %s', enable); + return this; +}; + +/** + * Configures one or more global setup fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [setupFns] - Global setup fixture(s) + * @returns {Mocha} + */ +Mocha.prototype.globalSetup = function globalSetup(setupFns = []) { + setupFns = utils.castArray(setupFns); + this.options.globalSetup = setupFns; + debug('configured %d global setup functions', setupFns.length); + return this; }; + +/** + * Configures one or more global teardown fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [teardownFns] - Global teardown fixture(s) + * @returns {Mocha} + */ +Mocha.prototype.globalTeardown = function globalTeardown(teardownFns = []) { + teardownFns = utils.castArray(teardownFns); + this.options.globalTeardown = teardownFns; + debug('configured %d global teardown functions', teardownFns.length); + return this; +}; + +/** + * Run any global setup fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalSetup` option is `false`; see {@link Mocha#enableGlobalSetup}. + * + * The context object this function resolves with should be consumed by {@link Mocha#runGlobalTeardown}. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ +Mocha.prototype.runGlobalSetup = async function runGlobalSetup(context = {}) { + const {globalSetup} = this.options; + if (globalSetup && globalSetup.length) { + debug('run(): global setup starting'); + await this._runGlobalFixtures(globalSetup, context); + debug('run(): global setup complete'); + } + return context; +}; + +/** + * Run any global teardown fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalTeardown` option is `false`; see {@link Mocha#enableGlobalTeardown}. + * + * Should be called with context object returned by {@link Mocha#runGlobalSetup}, if applicable. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ +Mocha.prototype.runGlobalTeardown = async function runGlobalTeardown( + context = {} +) { + const {globalTeardown} = this.options; + if (globalTeardown && globalTeardown.length) { + debug('run(): global teardown starting'); + await this._runGlobalFixtures(globalTeardown, context); + } + debug('run(): global teardown complete'); + return context; +}; + +/** + * Run global fixtures sequentially with context `context` + * @private + * @param {MochaGlobalFixture[]} [fixtureFns] - Fixtures to run + * @param {object} [context] - context object + * @returns {Promise} context object + */ +Mocha.prototype._runGlobalFixtures = async function _runGlobalFixtures( + fixtureFns = [], + context = {} +) { + for await (const fixtureFn of fixtureFns) { + await fixtureFn.call(context); + } + return context; +}; + +/** + * Toggle execution of any global setup fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global setup fixture + * @returns {Mocha} + */ +Mocha.prototype.enableGlobalSetup = function enableGlobalSetup(enabled = true) { + this.options.enableGlobalSetup = Boolean(enabled); + return this; +}; + +/** + * Toggle execution of any global teardown fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global teardown fixture + * @returns {Mocha} + */ +Mocha.prototype.enableGlobalTeardown = function enableGlobalTeardown( + enabled = true +) { + this.options.enableGlobalTeardown = Boolean(enabled); + return this; +}; + +/** + * Returns `true` if one or more global setup fixtures have been supplied. + * @public + * @returns {boolean} + */ +Mocha.prototype.hasGlobalSetupFixtures = function hasGlobalSetupFixtures() { + return Boolean(this.options.globalSetup.length); +}; + +/** + * Returns `true` if one or more global teardown fixtures have been supplied. + * @public + * @returns {boolean} + */ +Mocha.prototype.hasGlobalTeardownFixtures = + function hasGlobalTeardownFixtures() { + return Boolean(this.options.globalTeardown.length); + }; + +/** + * An alternative way to define root hooks that works with parallel runs. + * @typedef {Object} MochaRootHookObject + * @property {Function|Function[]} [beforeAll] - "Before all" hook(s) + * @property {Function|Function[]} [beforeEach] - "Before each" hook(s) + * @property {Function|Function[]} [afterAll] - "After all" hook(s) + * @property {Function|Function[]} [afterEach] - "After each" hook(s) + */ + +/** + * An function that returns a {@link MochaRootHookObject}, either sync or async. + @callback MochaRootHookFunction + * @returns {MochaRootHookObject|Promise} + */ + +/** + * A function that's invoked _once_ which is either sync or async. + * Can be a "teardown" or "setup". These will all share the same context. + * @callback MochaGlobalFixture + * @returns {void|Promise} + */ + +/** + * An object making up all necessary parts of a plugin loader and aggregator + * @typedef {Object} PluginDefinition + * @property {string} exportName - Named export to use + * @property {string} [optionName] - Option name for Mocha constructor (use `exportName` if omitted) + * @property {PluginValidator} [validate] - Validator function + * @property {PluginFinalizer} [finalize] - Finalizer/aggregator function + */ + +/** + * A (sync) function to assert a user-supplied plugin implementation is valid. + * + * Defined in a {@link PluginDefinition}. + + * @callback PluginValidator + * @param {*} value - Value to check + * @this {PluginDefinition} + * @returns {void} + */ + +/** + * A function to finalize plugins impls of a particular ilk + * @callback PluginFinalizer + * @param {Array<*>} impls - User-supplied implementations + * @returns {Promise<*>|*} + */ diff --git a/build/node_modules/mocha/lib/mocharc.json b/build/node_modules/mocha/lib/mocharc.json new file mode 100644 index 00000000..51c3fce6 --- /dev/null +++ b/build/node_modules/mocha/lib/mocharc.json @@ -0,0 +1,10 @@ +{ + "diff": true, + "extension": ["js", "cjs", "mjs"], + "package": "./package.json", + "reporter": "spec", + "slow": 75, + "timeout": 2000, + "ui": "bdd", + "watch-ignore": ["node_modules", ".git"] +} diff --git a/build/node_modules/mocha/lib/ms.js b/build/node_modules/mocha/lib/ms.js deleted file mode 100644 index 12fddc18..00000000 --- a/build/node_modules/mocha/lib/ms.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @api public - * @param {string|number} val - * @param {Object} options - * @return {string|number} - */ -module.exports = function(val, options) { - options = options || {}; - if (typeof val === 'string') { - return parse(val); - } - // https://github.com/mochajs/mocha/pull/1035 - return options['long'] ? longFormat(val) : shortFormat(val); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @api private - * @param {string} str - * @return {number} - */ -function parse(str) { - var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 's': - return n * s; - case 'ms': - return n; - default: - // No default case - } -} - -/** - * Short format for `ms`. - * - * @api private - * @param {number} ms - * @return {string} - */ -function shortFormat(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @api private - * @param {number} ms - * @return {string} - */ -function longFormat(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; -} - -/** - * Pluralization helper. - * - * @api private - * @param {number} ms - * @param {number} n - * @param {string} name - */ -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} diff --git a/build/node_modules/mocha/lib/nodejs/buffered-worker-pool.js b/build/node_modules/mocha/lib/nodejs/buffered-worker-pool.js new file mode 100644 index 00000000..fe4abf94 --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/buffered-worker-pool.js @@ -0,0 +1,188 @@ +/** + * A wrapper around a third-party child process worker pool implementation. + * Used by {@link module:buffered-runner}. + * @private + * @module buffered-worker-pool + */ + +'use strict'; + +const serializeJavascript = require('serialize-javascript'); +const workerpool = require('workerpool'); +const {deserialize} = require('./serializer'); +const debug = require('debug')('mocha:parallel:buffered-worker-pool'); +const {createInvalidArgumentTypeError} = require('../errors'); + +const WORKER_PATH = require.resolve('./worker.js'); + +/** + * A mapping of Mocha `Options` objects to serialized values. + * + * This is helpful because we tend to same the same options over and over + * over IPC. + * @type {WeakMap} + */ +let optionsCache = new WeakMap(); + +/** + * These options are passed into the [workerpool](https://npm.im/workerpool) module. + * @type {Partial} + */ +const WORKER_POOL_DEFAULT_OPTS = { + // use child processes, not worker threads! + workerType: 'process', + // ensure the same flags sent to `node` for this `mocha` invocation are passed + // along to children + forkOpts: {execArgv: process.execArgv}, + maxWorkers: workerpool.cpus - 1 +}; + +/** + * A wrapper around a third-party worker pool implementation. + * @private + */ +class BufferedWorkerPool { + /** + * Creates an underlying worker pool instance; determines max worker count + * @param {Partial} [opts] - Options + */ + constructor(opts = {}) { + const maxWorkers = Math.max( + 1, + typeof opts.maxWorkers === 'undefined' + ? WORKER_POOL_DEFAULT_OPTS.maxWorkers + : opts.maxWorkers + ); + + /* istanbul ignore next */ + if (workerpool.cpus < 2) { + // TODO: decide whether we should warn + debug( + 'not enough CPU cores available to run multiple jobs; avoid --parallel on this machine' + ); + } else if (maxWorkers >= workerpool.cpus) { + // TODO: decide whether we should warn + debug( + '%d concurrent job(s) requested, but only %d core(s) available', + maxWorkers, + workerpool.cpus + ); + } + /* istanbul ignore next */ + debug( + 'run(): starting worker pool of max size %d, using node args: %s', + maxWorkers, + process.execArgv.join(' ') + ); + + let counter = 0; + const onCreateWorker = ({forkOpts}) => { + return { + forkOpts: { + ...forkOpts, + // adds an incremental id to all workers, which can be useful to allocate resources for each process + env: {...process.env, MOCHA_WORKER_ID: counter++} + } + }; + }; + + this.options = { + ...WORKER_POOL_DEFAULT_OPTS, + ...opts, + maxWorkers, + onCreateWorker + }; + this._pool = workerpool.pool(WORKER_PATH, this.options); + } + + /** + * Terminates all workers in the pool. + * @param {boolean} [force] - Whether to force-kill workers. By default, lets workers finish their current task before termination. + * @private + * @returns {Promise} + */ + async terminate(force = false) { + /* istanbul ignore next */ + debug('terminate(): terminating with force = %s', force); + return this._pool.terminate(force); + } + + /** + * Adds a test file run to the worker pool queue for execution by a worker process. + * + * Handles serialization/deserialization. + * + * @param {string} filepath - Filepath of test + * @param {Options} [options] - Options for Mocha instance + * @private + * @returns {Promise} + */ + async run(filepath, options = {}) { + if (!filepath || typeof filepath !== 'string') { + throw createInvalidArgumentTypeError( + 'Expected a non-empty filepath', + 'filepath', + 'string' + ); + } + const serializedOptions = BufferedWorkerPool.serializeOptions(options); + const result = await this._pool.exec('run', [filepath, serializedOptions]); + return deserialize(result); + } + + /** + * Returns stats about the state of the worker processes in the pool. + * + * Used for debugging. + * + * @private + */ + stats() { + return this._pool.stats(); + } + + /** + * Instantiates a {@link WorkerPool}. + * @private + */ + static create(...args) { + return new BufferedWorkerPool(...args); + } + + /** + * Given Mocha options object `opts`, serialize into a format suitable for + * transmission over IPC. + * + * @param {Options} [opts] - Mocha options + * @private + * @returns {string} Serialized options + */ + static serializeOptions(opts = {}) { + if (!optionsCache.has(opts)) { + const serialized = serializeJavascript(opts, { + unsafe: true, // this means we don't care about XSS + ignoreFunction: true // do not serialize functions + }); + optionsCache.set(opts, serialized); + /* istanbul ignore next */ + debug( + 'serializeOptions(): serialized options %O to: %s', + opts, + serialized + ); + } + return optionsCache.get(opts); + } + + /** + * Resets internal cache of serialized options objects. + * + * For testing/debugging + * @private + */ + static resetOptionsCache() { + optionsCache = new WeakMap(); + } +} + +exports.BufferedWorkerPool = BufferedWorkerPool; diff --git a/build/node_modules/mocha/lib/nodejs/esm-utils.js b/build/node_modules/mocha/lib/nodejs/esm-utils.js new file mode 100644 index 00000000..9a854be3 --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/esm-utils.js @@ -0,0 +1,124 @@ +const path = require('path'); +const url = require('url'); + +const formattedImport = async file => { + if (path.isAbsolute(file)) { + try { + return await import(url.pathToFileURL(file)); + } catch (err) { + // This is a hack created because ESM in Node.js (at least in Node v15.5.1) does not emit + // the location of the syntax error in the error thrown. + // This is problematic because the user can't see what file has the problem, + // so we add the file location to the error. + // This `if` should be removed once Node.js fixes the problem. + if ( + err instanceof SyntaxError && + err.message && + err.stack && + !err.stack.includes(file) + ) { + const newErrorWithFilename = new SyntaxError(err.message); + newErrorWithFilename.stack = err.stack.replace( + /^SyntaxError/, + `SyntaxError[ @${file} ]` + ); + throw newErrorWithFilename; + } + throw err; + } + } + return import(file); +}; + +const hasStableEsmImplementation = (() => { + const [major, minor] = process.version.split('.'); + // ESM is stable from v12.22.0 onward + // https://nodejs.org/api/esm.html#esm_modules_ecmascript_modules + const majorNumber = parseInt(major.slice(1), 10); + const minorNumber = parseInt(minor, 10); + return majorNumber > 12 || (majorNumber === 12 && minorNumber >= 22); +})(); + +exports.requireOrImport = hasStableEsmImplementation + ? async file => { + if (path.extname(file) === '.mjs') { + return formattedImport(file); + } + try { + return dealWithExports(await formattedImport(file)); + } catch (err) { + if ( + err.code === 'ERR_MODULE_NOT_FOUND' || + err.code === 'ERR_UNKNOWN_FILE_EXTENSION' || + err.code === 'ERR_UNSUPPORTED_DIR_IMPORT' + ) { + try { + // Importing a file usually works, but the resolution of `import` is the ESM + // resolution algorithm, and not the CJS resolution algorithm. So in this case + // if we fail, we may have failed because we tried the ESM resolution and failed + // So we try to `require` it + return require(file); + } catch (requireErr) { + if ( + requireErr.code === 'ERR_REQUIRE_ESM' || + (requireErr instanceof SyntaxError && + requireErr + .toString() + .includes('Cannot use import statement outside a module')) + ) { + // ERR_REQUIRE_ESM happens when the test file is a JS file, but via type:module is actually ESM, + // AND has an import to a file that doesn't exist. + // This throws an `ERR_MODULE_NOT_FOUND` error above, + // and when we try to `require` it here, it throws an `ERR_REQUIRE_ESM`. + // What we want to do is throw the original error (the `ERR_MODULE_NOT_FOUND`), + // and not the `ERR_REQUIRE_ESM` error, which is a red herring. + // + // SyntaxError happens when in an edge case: when we're using an ESM loader that loads + // a `test.ts` file (i.e. unrecognized extension), and that file includes an unknown + // import (which thows an ERR_MODULE_NOT_FOUND). require-ing it will throw the + // syntax error, because we cannot require a file that has import-s. + throw err; + } else { + throw requireErr; + } + } + } else { + throw err; + } + } + } + : implementationOfRequireOrImportForUnstableEsm; + +function dealWithExports(module) { + if (module.default) { + return module.default; + } else { + return {...module, default: undefined}; + } +} + +exports.loadFilesAsync = async (files, preLoadFunc, postLoadFunc) => { + for (const file of files) { + preLoadFunc(file); + const result = await exports.requireOrImport(path.resolve(file)); + postLoadFunc(file, result); + } +}; + +/* istanbul ignore next */ +async function implementationOfRequireOrImportForUnstableEsm(file) { + if (path.extname(file) === '.mjs') { + return formattedImport(file); + } + // This is currently the only known way of figuring out whether a file is CJS or ESM in + // Node.js that doesn't necessitate calling `import` first. + try { + return require(file); + } catch (err) { + if (err.code === 'ERR_REQUIRE_ESM') { + return formattedImport(file); + } else { + throw err; + } + } +} diff --git a/build/node_modules/mocha/lib/nodejs/file-unloader.js b/build/node_modules/mocha/lib/nodejs/file-unloader.js new file mode 100644 index 00000000..50a81783 --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/file-unloader.js @@ -0,0 +1,15 @@ +'use strict'; + +/** + * This module should not be in the browser bundle, so it's here. + * @private + * @module + */ + +/** + * Deletes a file from the `require` cache. + * @param {string} file - File + */ +exports.unloadFile = file => { + delete require.cache[require.resolve(file)]; +}; diff --git a/build/node_modules/mocha/lib/nodejs/growl.js b/build/node_modules/mocha/lib/nodejs/growl.js new file mode 100644 index 00000000..6664d67c --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/growl.js @@ -0,0 +1,137 @@ +'use strict'; + +/** + * Desktop Notifications module. + * @module Growl + */ + +const os = require('os'); +const path = require('path'); +const {sync: which} = require('which'); +const {EVENT_RUN_END} = require('../runner').constants; +const {isBrowser} = require('../utils'); + +/** + * @summary + * Checks if Growl notification support seems likely. + * + * @description + * Glosses over the distinction between an unsupported platform + * and one that lacks prerequisite software installations. + * + * @public + * @see {@link https://github.com/tj/node-growl/blob/master/README.md|Prerequisite Installs} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlCapable} + * @return {boolean} whether Growl notification support can be expected + */ +exports.isCapable = () => { + if (!isBrowser()) { + return getSupportBinaries().reduce( + (acc, binary) => acc || Boolean(which(binary, {nothrow: true})), + false + ); + } + return false; +}; + +/** + * Implements desktop notifications as a pseudo-reporter. + * + * @public + * @see {@link Mocha#_growl} + * @param {Runner} runner - Runner instance. + */ +exports.notify = runner => { + runner.once(EVENT_RUN_END, () => { + display(runner); + }); +}; + +/** + * Displays the notification. + * + * @private + * @param {Runner} runner - Runner instance. + */ +const display = runner => { + const growl = require('growl'); + const stats = runner.stats; + const symbol = { + cross: '\u274C', + tick: '\u2705' + }; + let _message; + let message; + let title; + + if (stats.failures) { + _message = `${stats.failures} of ${stats.tests} tests failed`; + message = `${symbol.cross} ${_message}`; + title = 'Failed'; + } else { + _message = `${stats.passes} tests passed in ${stats.duration}ms`; + message = `${symbol.tick} ${_message}`; + title = 'Passed'; + } + + // Send notification + const options = { + image: logo(), + name: 'mocha', + title + }; + growl(message, options, onCompletion); +}; + +/** + * @summary + * Callback for result of attempted Growl notification. + * + * @description + * Despite its appearance, this is not an Error-first + * callback -- all parameters are populated regardless of success. + * + * @private + * @callback Growl~growlCB + * @param {*} err - Error object, or null if successful. + */ +function onCompletion(err) { + if (err) { + // As notifications are tangential to our purpose, just log the error. + const message = + err.code === 'ENOENT' ? 'prerequisite software not found' : err.message; + console.error('notification error:', message); + } +} + +/** + * Returns Mocha logo image path. + * + * @private + * @return {string} Pathname of Mocha logo + */ +const logo = () => { + return path.join(__dirname, '..', 'assets', 'mocha-logo-96.png'); +}; + +/** + * @summary + * Gets platform-specific Growl support binaries. + * + * @description + * Somewhat brittle dependency on `growl` package implementation, but it + * rarely changes. + * + * @private + * @see {@link https://github.com/tj/node-growl/blob/master/lib/growl.js#L28-L126|setupCmd} + * @return {string[]} names of Growl support binaries + */ +const getSupportBinaries = () => { + const binaries = { + Darwin: ['terminal-notifier', 'growlnotify'], + Linux: ['notify-send', 'growl'], + Windows_NT: ['growlnotify.exe'] + }; + return binaries[os.type()] || []; +}; diff --git a/build/node_modules/mocha/lib/nodejs/parallel-buffered-runner.js b/build/node_modules/mocha/lib/nodejs/parallel-buffered-runner.js new file mode 100644 index 00000000..76a9bee5 --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/parallel-buffered-runner.js @@ -0,0 +1,433 @@ +/** + * A test Runner that uses a {@link module:buffered-worker-pool}. + * @module parallel-buffered-runner + * @private + */ + +'use strict'; + +const allSettled = require('@ungap/promise-all-settled').bind(Promise); +const Runner = require('../runner'); +const {EVENT_RUN_BEGIN, EVENT_RUN_END} = Runner.constants; +const debug = require('debug')('mocha:parallel:parallel-buffered-runner'); +const {BufferedWorkerPool} = require('./buffered-worker-pool'); +const {setInterval, clearInterval} = global; +const {createMap, constants} = require('../utils'); +const {MOCHA_ID_PROP_NAME} = constants; +const {createFatalError} = require('../errors'); + +const DEFAULT_WORKER_REPORTER = require.resolve( + './reporters/parallel-buffered' +); + +/** + * List of options to _not_ serialize for transmission to workers + */ +const DENY_OPTIONS = [ + 'globalSetup', + 'globalTeardown', + 'parallel', + 'p', + 'jobs', + 'j' +]; + +/** + * Outputs a debug statement with worker stats + * @param {BufferedWorkerPool} pool - Worker pool + */ +/* istanbul ignore next */ +const debugStats = pool => { + const {totalWorkers, busyWorkers, idleWorkers, pendingTasks} = pool.stats(); + debug( + '%d/%d busy workers; %d idle; %d tasks queued', + busyWorkers, + totalWorkers, + idleWorkers, + pendingTasks + ); +}; + +/** + * The interval at which we will display stats for worker processes in debug mode + */ +const DEBUG_STATS_INTERVAL = 5000; + +const ABORTED = 'ABORTED'; +const IDLE = 'IDLE'; +const ABORTING = 'ABORTING'; +const RUNNING = 'RUNNING'; +const BAILING = 'BAILING'; +const BAILED = 'BAILED'; +const COMPLETE = 'COMPLETE'; + +const states = createMap({ + [IDLE]: new Set([RUNNING, ABORTING]), + [RUNNING]: new Set([COMPLETE, BAILING, ABORTING]), + [COMPLETE]: new Set(), + [ABORTED]: new Set(), + [ABORTING]: new Set([ABORTED]), + [BAILING]: new Set([BAILED, ABORTING]), + [BAILED]: new Set([COMPLETE, ABORTING]) +}); + +/** + * This `Runner` delegates tests runs to worker threads. Does not execute any + * {@link Runnable}s by itself! + * @public + */ +class ParallelBufferedRunner extends Runner { + constructor(...args) { + super(...args); + + let state = IDLE; + Object.defineProperty(this, '_state', { + get() { + return state; + }, + set(newState) { + if (states[state].has(newState)) { + state = newState; + } else { + throw new Error(`invalid state transition: ${state} => ${newState}`); + } + } + }); + + this._workerReporter = DEFAULT_WORKER_REPORTER; + this._linkPartialObjects = false; + this._linkedObjectMap = new Map(); + + this.once(Runner.constants.EVENT_RUN_END, () => { + this._state = COMPLETE; + }); + } + + /** + * Returns a mapping function to enqueue a file in the worker pool and return results of its execution. + * @param {BufferedWorkerPool} pool - Worker pool + * @param {Options} options - Mocha options + * @returns {FileRunner} Mapping function + * @private + */ + _createFileRunner(pool, options) { + /** + * Emits event and sets `BAILING` state, if necessary. + * @param {Object} event - Event having `eventName`, maybe `data` and maybe `error` + * @param {number} failureCount - Failure count + */ + const emitEvent = (event, failureCount) => { + this.emit(event.eventName, event.data, event.error); + if ( + this._state !== BAILING && + event.data && + event.data._bail && + (failureCount || event.error) + ) { + debug('run(): nonzero failure count & found bail flag'); + // we need to let the events complete for this file, as the worker + // should run any cleanup hooks + this._state = BAILING; + } + }; + + /** + * Given an event, recursively find any objects in its data that have ID's, and create object references to already-seen objects. + * @param {Object} event - Event having `eventName`, maybe `data` and maybe `error` + */ + const linkEvent = event => { + const stack = [{parent: event, prop: 'data'}]; + while (stack.length) { + const {parent, prop} = stack.pop(); + const obj = parent[prop]; + let newObj; + if (obj && typeof obj === 'object') { + if (obj[MOCHA_ID_PROP_NAME]) { + const id = obj[MOCHA_ID_PROP_NAME]; + newObj = this._linkedObjectMap.has(id) + ? Object.assign(this._linkedObjectMap.get(id), obj) + : obj; + this._linkedObjectMap.set(id, newObj); + parent[prop] = newObj; + } else { + throw createFatalError( + 'Object missing ID received in event data', + obj + ); + } + } + Object.keys(newObj).forEach(key => { + const value = obj[key]; + if (value && typeof value === 'object' && value[MOCHA_ID_PROP_NAME]) { + stack.push({obj: value, parent: newObj, prop: key}); + } + }); + } + }; + + return async file => { + debug('run(): enqueueing test file %s', file); + try { + const {failureCount, events} = await pool.run(file, options); + + if (this._state === BAILED) { + // short-circuit after a graceful bail. if this happens, + // some other worker has bailed. + // TODO: determine if this is the desired behavior, or if we + // should report the events of this run anyway. + return; + } + debug( + 'run(): completed run of file %s; %d failures / %d events', + file, + failureCount, + events.length + ); + this.failures += failureCount; // can this ever be non-numeric? + let event = events.shift(); + + if (this._linkPartialObjects) { + while (event) { + linkEvent(event); + emitEvent(event, failureCount); + event = events.shift(); + } + } else { + while (event) { + emitEvent(event, failureCount); + event = events.shift(); + } + } + if (this._state === BAILING) { + debug('run(): terminating pool due to "bail" flag'); + this._state = BAILED; + await pool.terminate(); + } + } catch (err) { + if (this._state === BAILED || this._state === ABORTING) { + debug( + 'run(): worker pool terminated with intent; skipping file %s', + file + ); + } else { + // this is an uncaught exception + debug('run(): encountered uncaught exception: %O', err); + if (this.allowUncaught) { + // still have to clean up + this._state = ABORTING; + await pool.terminate(true); + } + throw err; + } + } finally { + debug('run(): done running file %s', file); + } + }; + } + + /** + * Listen on `Process.SIGINT`; terminate pool if caught. + * Returns the listener for later call to `process.removeListener()`. + * @param {BufferedWorkerPool} pool - Worker pool + * @returns {SigIntListener} Listener + * @private + */ + _bindSigIntListener(pool) { + const sigIntListener = async () => { + debug('run(): caught a SIGINT'); + this._state = ABORTING; + + try { + debug('run(): force-terminating worker pool'); + await pool.terminate(true); + } catch (err) { + console.error( + `Error while attempting to force-terminate worker pool: ${err}` + ); + process.exitCode = 1; + } finally { + process.nextTick(() => { + debug('run(): imminent death'); + this._state = ABORTED; + process.kill(process.pid, 'SIGINT'); + }); + } + }; + + process.once('SIGINT', sigIntListener); + + return sigIntListener; + } + + /** + * Runs Mocha tests by creating a thread pool, then delegating work to the + * worker threads. + * + * Each worker receives one file, and as workers become available, they take a + * file from the queue and run it. The worker thread execution is treated like + * an RPC--it returns a `Promise` containing serialized information about the + * run. The information is processed as it's received, and emitted to a + * {@link Reporter}, which is likely listening for these events. + * + * @param {Function} callback - Called with an exit code corresponding to + * number of test failures. + * @param {{files: string[], options: Options}} opts - Files to run and + * command-line options, respectively. + */ + run(callback, {files, options = {}} = {}) { + /** + * Listener on `Process.SIGINT` which tries to cleanly terminate the worker pool. + */ + let sigIntListener; + + // assign the reporter the worker will use, which will be different than the + // main process' reporter + options = {...options, reporter: this._workerReporter}; + + // This function should _not_ return a `Promise`; its parent (`Runner#run`) + // returns this instance, so this should do the same. However, we want to make + // use of `async`/`await`, so we use this IIFE. + (async () => { + /** + * This is an interval that outputs stats about the worker pool every so often + */ + let debugInterval; + + /** + * @type {BufferedWorkerPool} + */ + let pool; + + try { + pool = BufferedWorkerPool.create({maxWorkers: options.jobs}); + + sigIntListener = this._bindSigIntListener(pool); + + /* istanbul ignore next */ + debugInterval = setInterval( + () => debugStats(pool), + DEBUG_STATS_INTERVAL + ).unref(); + + // this is set for uncaught exception handling in `Runner#uncaught` + // TODO: `Runner` should be using a state machine instead. + this.started = true; + this._state = RUNNING; + + this.emit(EVENT_RUN_BEGIN); + + options = {...options}; + DENY_OPTIONS.forEach(opt => { + delete options[opt]; + }); + + const results = await allSettled( + files.map(this._createFileRunner(pool, options)) + ); + + // note that pool may already be terminated due to --bail + await pool.terminate(); + + results + .filter(({status}) => status === 'rejected') + .forEach(({reason}) => { + if (this.allowUncaught) { + // yep, just the first one. + throw reason; + } + // "rejected" will correspond to uncaught exceptions. + // unlike the serial runner, the parallel runner can always recover. + this.uncaught(reason); + }); + + if (this._state === ABORTING) { + return; + } + + this.emit(EVENT_RUN_END); + debug('run(): completing with failure count %d', this.failures); + callback(this.failures); + } catch (err) { + // this `nextTick` takes us out of the `Promise` scope, so the + // exception will not be caught and returned as a rejected `Promise`, + // which would lead to an `unhandledRejection` event. + process.nextTick(() => { + debug('run(): re-throwing uncaught exception'); + throw err; + }); + } finally { + clearInterval(debugInterval); + process.removeListener('SIGINT', sigIntListener); + } + })(); + return this; + } + + /** + * Toggle partial object linking behavior; used for building object references from + * unique ID's. + * @param {boolean} [value] - If `true`, enable partial object linking, otherwise disable + * @returns {Runner} + * @chainable + * @public + * @example + * // this reporter needs proper object references when run in parallel mode + * class MyReporter() { + * constructor(runner) { + * this.runner.linkPartialObjects(true) + * .on(EVENT_SUITE_BEGIN, suite => { + // this Suite may be the same object... + * }) + * .on(EVENT_TEST_BEGIN, test => { + * // ...as the `test.parent` property + * }); + * } + * } + */ + linkPartialObjects(value) { + this._linkPartialObjects = Boolean(value); + return super.linkPartialObjects(value); + } + + /** + * If this class is the `Runner` in use, then this is going to return `true`. + * + * For use by reporters. + * @returns {true} + * @public + */ + isParallelMode() { + return true; + } + + /** + * Configures an alternate reporter for worker processes to use. Subclasses + * using worker processes should implement this. + * @public + * @param {string} path - Absolute path to alternate reporter for worker processes to use + * @returns {Runner} + * @throws When in serial mode + * @chainable + */ + workerReporter(reporter) { + this._workerReporter = reporter; + return this; + } +} + +module.exports = ParallelBufferedRunner; + +/** + * Listener function intended to be bound to `Process.SIGINT` event + * @private + * @callback SigIntListener + * @returns {Promise} + */ + +/** + * A function accepting a test file path and returning the results of a test run + * @private + * @callback FileRunner + * @param {string} filename - File to run + * @returns {Promise} + */ diff --git a/build/node_modules/mocha/lib/nodejs/reporters/parallel-buffered.js b/build/node_modules/mocha/lib/nodejs/reporters/parallel-buffered.js new file mode 100644 index 00000000..840d718e --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/reporters/parallel-buffered.js @@ -0,0 +1,165 @@ +/** + * "Buffered" reporter used internally by a worker process when running in parallel mode. + * @module nodejs/reporters/parallel-buffered + * @public + */ + +'use strict'; + +/** + * Module dependencies. + */ + +const { + EVENT_SUITE_BEGIN, + EVENT_SUITE_END, + EVENT_TEST_FAIL, + EVENT_TEST_PASS, + EVENT_TEST_PENDING, + EVENT_TEST_BEGIN, + EVENT_TEST_END, + EVENT_TEST_RETRY, + EVENT_DELAY_BEGIN, + EVENT_DELAY_END, + EVENT_HOOK_BEGIN, + EVENT_HOOK_END, + EVENT_RUN_END +} = require('../../runner').constants; +const {SerializableEvent, SerializableWorkerResult} = require('../serializer'); +const debug = require('debug')('mocha:reporters:buffered'); +const Base = require('../../reporters/base'); + +/** + * List of events to listen to; these will be buffered and sent + * when `Mocha#run` is complete (via {@link ParallelBuffered#done}). + */ +const EVENT_NAMES = [ + EVENT_SUITE_BEGIN, + EVENT_SUITE_END, + EVENT_TEST_BEGIN, + EVENT_TEST_PENDING, + EVENT_TEST_FAIL, + EVENT_TEST_PASS, + EVENT_TEST_RETRY, + EVENT_TEST_END, + EVENT_HOOK_BEGIN, + EVENT_HOOK_END +]; + +/** + * Like {@link EVENT_NAMES}, except we expect these events to only be emitted + * by the `Runner` once. + */ +const ONCE_EVENT_NAMES = [EVENT_DELAY_BEGIN, EVENT_DELAY_END]; + +/** + * The `ParallelBuffered` reporter is used by each worker process in "parallel" + * mode, by default. Instead of reporting to to `STDOUT`, etc., it retains a + * list of events it receives and hands these off to the callback passed into + * {@link Mocha#run}. That callback will then return the data to the main + * process. + * @public + */ +class ParallelBuffered extends Base { + /** + * Calls {@link ParallelBuffered#createListeners} + * @param {Runner} runner + */ + constructor(runner, opts) { + super(runner, opts); + + /** + * Retained list of events emitted from the {@link Runner} instance. + * @type {BufferedEvent[]} + * @public + */ + this.events = []; + + /** + * Map of `Runner` event names to listeners (for later teardown) + * @public + * @type {Map} + */ + this.listeners = new Map(); + + this.createListeners(runner); + } + + /** + * Returns a new listener which saves event data in memory to + * {@link ParallelBuffered#events}. Listeners are indexed by `eventName` and stored + * in {@link ParallelBuffered#listeners}. This is a defensive measure, so that we + * don't a) leak memory or b) remove _other_ listeners that may not be + * associated with this reporter. + * + * Subclasses could override this behavior. + * + * @public + * @param {string} eventName - Name of event to create listener for + * @returns {EventListener} + */ + createListener(eventName) { + const listener = (runnable, err) => { + this.events.push(SerializableEvent.create(eventName, runnable, err)); + }; + return this.listeners.set(eventName, listener).get(eventName); + } + + /** + * Creates event listeners (using {@link ParallelBuffered#createListener}) for each + * reporter-relevant event emitted by a {@link Runner}. This array is drained when + * {@link ParallelBuffered#done} is called by {@link Runner#run}. + * + * Subclasses could override this behavior. + * @public + * @param {Runner} runner - Runner instance + * @returns {ParallelBuffered} + * @chainable + */ + createListeners(runner) { + EVENT_NAMES.forEach(evt => { + runner.on(evt, this.createListener(evt)); + }); + ONCE_EVENT_NAMES.forEach(evt => { + runner.once(evt, this.createListener(evt)); + }); + + runner.once(EVENT_RUN_END, () => { + debug('received EVENT_RUN_END'); + this.listeners.forEach((listener, evt) => { + runner.removeListener(evt, listener); + this.listeners.delete(evt); + }); + }); + + return this; + } + + /** + * Calls the {@link Mocha#run} callback (`callback`) with the test failure + * count and the array of {@link BufferedEvent} objects. Resets the array. + * + * This is called directly by `Runner#run` and should not be called by any other consumer. + * + * Subclasses could override this. + * + * @param {number} failures - Number of failed tests + * @param {Function} callback - The callback passed to {@link Mocha#run}. + * @public + */ + done(failures, callback) { + callback(SerializableWorkerResult.create(this.events, failures)); + this.events = []; // defensive + } +} + +/** + * Serializable event data from a `Runner`. Keys of the `data` property + * beginning with `__` will be converted into a function which returns the value + * upon deserialization. + * @typedef {Object} BufferedEvent + * @property {string} name - Event name + * @property {object} data - Event parameters + */ + +module.exports = ParallelBuffered; diff --git a/build/node_modules/mocha/lib/nodejs/serializer.js b/build/node_modules/mocha/lib/nodejs/serializer.js new file mode 100644 index 00000000..b25c493b --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/serializer.js @@ -0,0 +1,412 @@ +/** + * Serialization/deserialization classes and functions for communication between a main Mocha process and worker processes. + * @module serializer + * @private + */ + +'use strict'; + +const {type} = require('../utils'); +const {createInvalidArgumentTypeError} = require('../errors'); +// this is not named `mocha:parallel:serializer` because it's noisy and it's +// helpful to be able to write `DEBUG=mocha:parallel*` and get everything else. +const debug = require('debug')('mocha:serializer'); + +const SERIALIZABLE_RESULT_NAME = 'SerializableWorkerResult'; +const SERIALIZABLE_TYPES = new Set(['object', 'array', 'function', 'error']); + +/** + * The serializable result of a test file run from a worker. + * @private + */ +class SerializableWorkerResult { + /** + * Creates instance props; of note, the `__type` prop. + * + * Note that the failure count is _redundant_ and could be derived from the + * list of events; but since we're already doing the work, might as well use + * it. + * @param {SerializableEvent[]} [events=[]] - Events to eventually serialize + * @param {number} [failureCount=0] - Failure count + */ + constructor(events = [], failureCount = 0) { + /** + * The number of failures in this run + * @type {number} + */ + this.failureCount = failureCount; + /** + * All relevant events emitted from the {@link Runner}. + * @type {SerializableEvent[]} + */ + this.events = events; + + /** + * Symbol-like value needed to distinguish when attempting to deserialize + * this object (once it's been received over IPC). + * @type {Readonly<"SerializableWorkerResult">} + */ + Object.defineProperty(this, '__type', { + value: SERIALIZABLE_RESULT_NAME, + enumerable: true, + writable: false + }); + } + + /** + * Instantiates a new {@link SerializableWorkerResult}. + * @param {...any} args - Args to constructor + * @returns {SerializableWorkerResult} + */ + static create(...args) { + return new SerializableWorkerResult(...args); + } + + /** + * Serializes each {@link SerializableEvent} in our `events` prop; + * makes this object read-only. + * @returns {Readonly} + */ + serialize() { + this.events.forEach(event => { + event.serialize(); + }); + return Object.freeze(this); + } + + /** + * Deserializes a {@link SerializedWorkerResult} into something reporters can + * use; calls {@link SerializableEvent.deserialize} on each item in its + * `events` prop. + * @param {SerializedWorkerResult} obj + * @returns {SerializedWorkerResult} + */ + static deserialize(obj) { + obj.events.forEach(event => { + SerializableEvent.deserialize(event); + }); + return obj; + } + + /** + * Returns `true` if this is a {@link SerializedWorkerResult} or a + * {@link SerializableWorkerResult}. + * @param {*} value - A value to check + * @returns {boolean} If true, it's deserializable + */ + static isSerializedWorkerResult(value) { + return ( + value instanceof SerializableWorkerResult || + (type(value) === 'object' && value.__type === SERIALIZABLE_RESULT_NAME) + ); + } +} + +/** + * Represents an event, emitted by a {@link Runner}, which is to be transmitted + * over IPC. + * + * Due to the contents of the event data, it's not possible to send them + * verbatim. When received by the main process--and handled by reporters--these + * objects are expected to contain {@link Runnable} instances. This class + * provides facilities to perform the translation via serialization and + * deserialization. + * @private + */ +class SerializableEvent { + /** + * Constructs a `SerializableEvent`, throwing if we receive unexpected data. + * + * Practically, events emitted from `Runner` have a minumum of zero (0) + * arguments-- (for example, {@link Runnable.constants.EVENT_RUN_BEGIN}) and a + * maximum of two (2) (for example, + * {@link Runnable.constants.EVENT_TEST_FAIL}, where the second argument is an + * `Error`). The first argument, if present, is a {@link Runnable}. This + * constructor's arguments adhere to this convention. + * @param {string} eventName - A non-empty event name. + * @param {any} [originalValue] - Some data. Corresponds to extra arguments + * passed to `EventEmitter#emit`. + * @param {Error} [originalError] - An error, if there's an error. + * @throws If `eventName` is empty, or `originalValue` is a non-object. + */ + constructor(eventName, originalValue, originalError) { + if (!eventName) { + throw createInvalidArgumentTypeError( + 'Empty `eventName` string argument', + 'eventName', + 'string' + ); + } + /** + * The event name. + * @memberof SerializableEvent + */ + this.eventName = eventName; + const originalValueType = type(originalValue); + if (originalValueType !== 'object' && originalValueType !== 'undefined') { + throw createInvalidArgumentTypeError( + `Expected object but received ${originalValueType}`, + 'originalValue', + 'object' + ); + } + /** + * An error, if present. + * @memberof SerializableEvent + */ + Object.defineProperty(this, 'originalError', { + value: originalError, + enumerable: false + }); + + /** + * The raw value. + * + * We don't want this value sent via IPC; making it non-enumerable will do that. + * + * @memberof SerializableEvent + */ + Object.defineProperty(this, 'originalValue', { + value: originalValue, + enumerable: false + }); + } + + /** + * In case you hated using `new` (I do). + * + * @param {...any} args - Args for {@link SerializableEvent#constructor}. + * @returns {SerializableEvent} A new `SerializableEvent` + */ + static create(...args) { + return new SerializableEvent(...args); + } + + /** + * Used internally by {@link SerializableEvent#serialize}. + * @ignore + * @param {Array} pairs - List of parent/key tuples to process; modified in-place. This JSDoc type is an approximation + * @param {object} parent - Some parent object + * @param {string} key - Key to inspect + * @param {WeakSet} seenObjects - For avoiding circular references + */ + static _serialize(pairs, parent, key, seenObjects) { + let value = parent[key]; + if (seenObjects.has(value)) { + parent[key] = Object.create(null); + return; + } + let _type = type(value); + if (_type === 'error') { + // we need to reference the stack prop b/c it's lazily-loaded. + // `__type` is necessary for deserialization to create an `Error` later. + // `message` is apparently not enumerable, so we must handle it specifically. + value = Object.assign(Object.create(null), value, { + stack: value.stack, + message: value.message, + __type: 'Error' + }); + parent[key] = value; + // after this, set the result of type(value) to be `object`, and we'll throw + // whatever other junk is in the original error into the new `value`. + _type = 'object'; + } + switch (_type) { + case 'object': + if (type(value.serialize) === 'function') { + parent[key] = value.serialize(); + } else { + // by adding props to the `pairs` array, we will process it further + pairs.push( + ...Object.keys(value) + .filter(key => SERIALIZABLE_TYPES.has(type(value[key]))) + .map(key => [value, key]) + ); + } + break; + case 'function': + // we _may_ want to dig in to functions for some assertion libraries + // that might put a usable property on a function. + // for now, just zap it. + delete parent[key]; + break; + case 'array': + pairs.push( + ...value + .filter(value => SERIALIZABLE_TYPES.has(type(value))) + .map((value, index) => [value, index]) + ); + break; + } + } + + /** + * Modifies this object *in place* (for theoretical memory consumption & + * performance reasons); serializes `SerializableEvent#originalValue` (placing + * the result in `SerializableEvent#data`) and `SerializableEvent#error`. + * Freezes this object. The result is an object that can be transmitted over + * IPC. + * If this quickly becomes unmaintainable, we will want to move towards immutable + * objects post-haste. + */ + serialize() { + // given a parent object and a key, inspect the value and decide whether + // to replace it, remove it, or add it to our `pairs` array to further process. + // this is recursion in loop form. + const originalValue = this.originalValue; + const result = Object.assign(Object.create(null), { + data: + type(originalValue) === 'object' && + type(originalValue.serialize) === 'function' + ? originalValue.serialize() + : originalValue, + error: this.originalError + }); + + const pairs = Object.keys(result).map(key => [result, key]); + const seenObjects = new WeakSet(); + + let pair; + while ((pair = pairs.shift())) { + SerializableEvent._serialize(pairs, ...pair, seenObjects); + seenObjects.add(pair[0]); + } + + this.data = result.data; + this.error = result.error; + + return Object.freeze(this); + } + + /** + * Used internally by {@link SerializableEvent.deserialize}; creates an `Error` + * from an `Error`-like (serialized) object + * @ignore + * @param {Object} value - An Error-like value + * @returns {Error} Real error + */ + static _deserializeError(value) { + const error = new Error(value.message); + error.stack = value.stack; + Object.assign(error, value); + delete error.__type; + return error; + } + + /** + * Used internally by {@link SerializableEvent.deserialize}; recursively + * deserializes an object in-place. + * @param {object|Array} parent - Some object or array + * @param {string|number} key - Some prop name or array index within `parent` + */ + static _deserializeObject(parent, key) { + if (key === '__proto__') { + delete parent[key]; + return; + } + const value = parent[key]; + // keys beginning with `$$` are converted into functions returning the value + // and renamed, stripping the `$$` prefix. + // functions defined this way cannot be array members! + if (type(key) === 'string' && key.startsWith('$$')) { + const newKey = key.slice(2); + parent[newKey] = () => value; + delete parent[key]; + key = newKey; + } + if (type(value) === 'array') { + value.forEach((_, idx) => { + SerializableEvent._deserializeObject(value, idx); + }); + } else if (type(value) === 'object') { + if (value.__type === 'Error') { + parent[key] = SerializableEvent._deserializeError(value); + } else { + Object.keys(value).forEach(key => { + SerializableEvent._deserializeObject(value, key); + }); + } + } + } + + /** + * Deserialize value returned from a worker into something more useful. + * Does not return the same object. + * @todo do this in a loop instead of with recursion (if necessary) + * @param {SerializedEvent} obj - Object returned from worker + * @returns {SerializedEvent} Deserialized result + */ + static deserialize(obj) { + if (!obj) { + throw createInvalidArgumentTypeError('Expected value', obj); + } + + obj = Object.assign(Object.create(null), obj); + + if (obj.data) { + Object.keys(obj.data).forEach(key => { + SerializableEvent._deserializeObject(obj.data, key); + }); + } + + if (obj.error) { + obj.error = SerializableEvent._deserializeError(obj.error); + } + + return obj; + } +} + +/** + * "Serializes" a value for transmission over IPC as a message. + * + * If value is an object and has a `serialize()` method, call that method; otherwise return the object and hope for the best. + * + * @param {*} [value] - A value to serialize + */ +exports.serialize = function serialize(value) { + const result = + type(value) === 'object' && type(value.serialize) === 'function' + ? value.serialize() + : value; + debug('serialized: %O', result); + return result; +}; + +/** + * "Deserializes" a "message" received over IPC. + * + * This could be expanded with other objects that need deserialization, + * but at present time we only care about {@link SerializableWorkerResult} objects. + * + * @param {*} [value] - A "message" to deserialize + */ +exports.deserialize = function deserialize(value) { + const result = SerializableWorkerResult.isSerializedWorkerResult(value) + ? SerializableWorkerResult.deserialize(value) + : value; + debug('deserialized: %O', result); + return result; +}; + +exports.SerializableEvent = SerializableEvent; +exports.SerializableWorkerResult = SerializableWorkerResult; + +/** + * The result of calling `SerializableEvent.serialize`, as received + * by the deserializer. + * @private + * @typedef {Object} SerializedEvent + * @property {object?} data - Optional serialized data + * @property {object?} error - Optional serialized `Error` + */ + +/** + * The result of calling `SerializableWorkerResult.serialize` as received + * by the deserializer. + * @private + * @typedef {Object} SerializedWorkerResult + * @property {number} failureCount - Number of failures + * @property {SerializedEvent[]} events - Serialized events + * @property {"SerializedWorkerResult"} __type - Symbol-like to denote the type of object this is + */ diff --git a/build/node_modules/mocha/lib/nodejs/worker.js b/build/node_modules/mocha/lib/nodejs/worker.js new file mode 100644 index 00000000..cf5655e8 --- /dev/null +++ b/build/node_modules/mocha/lib/nodejs/worker.js @@ -0,0 +1,151 @@ +/** + * A worker process. Consumes {@link module:reporters/parallel-buffered} reporter. + * @module worker + * @private + */ + +'use strict'; + +const { + createInvalidArgumentTypeError, + createInvalidArgumentValueError +} = require('../errors'); +const workerpool = require('workerpool'); +const Mocha = require('../mocha'); +const {handleRequires, validateLegacyPlugin} = require('../cli/run-helpers'); +const d = require('debug'); +const debug = d.debug(`mocha:parallel:worker:${process.pid}`); +const isDebugEnabled = d.enabled(`mocha:parallel:worker:${process.pid}`); +const {serialize} = require('./serializer'); +const {setInterval, clearInterval} = global; + +let rootHooks; + +if (workerpool.isMainThread) { + throw new Error( + 'This script is intended to be run as a worker (by the `workerpool` package).' + ); +} + +/** + * Initializes some stuff on the first call to {@link run}. + * + * Handles `--require` and `--ui`. Does _not_ handle `--reporter`, + * as only the `Buffered` reporter is used. + * + * **This function only runs once per worker**; it overwrites itself with a no-op + * before returning. + * + * @param {Options} argv - Command-line options + */ +let bootstrap = async argv => { + // globalSetup and globalTeardown do not run in workers + const plugins = await handleRequires(argv.require, { + ignoredPlugins: ['mochaGlobalSetup', 'mochaGlobalTeardown'] + }); + validateLegacyPlugin(argv, 'ui', Mocha.interfaces); + + rootHooks = plugins.rootHooks; + bootstrap = () => {}; + debug('bootstrap(): finished with args: %O', argv); +}; + +/** + * Runs a single test file in a worker thread. + * @param {string} filepath - Filepath of test file + * @param {string} [serializedOptions] - **Serialized** options. This string will be eval'd! + * @see https://npm.im/serialize-javascript + * @returns {Promise<{failures: number, events: BufferedEvent[]}>} - Test + * failure count and list of events. + */ +async function run(filepath, serializedOptions = '{}') { + if (!filepath) { + throw createInvalidArgumentTypeError( + 'Expected a non-empty "filepath" argument', + 'file', + 'string' + ); + } + + debug('run(): running test file %s', filepath); + + if (typeof serializedOptions !== 'string') { + throw createInvalidArgumentTypeError( + 'run() expects second parameter to be a string which was serialized by the `serialize-javascript` module', + 'serializedOptions', + 'string' + ); + } + let argv; + try { + // eslint-disable-next-line no-eval + argv = eval('(' + serializedOptions + ')'); + } catch (err) { + throw createInvalidArgumentValueError( + 'run() was unable to deserialize the options', + 'serializedOptions', + serializedOptions + ); + } + + const opts = Object.assign({ui: 'bdd'}, argv, { + // if this was true, it would cause infinite recursion. + parallel: false, + // this doesn't work in parallel mode + forbidOnly: true, + // it's useful for a Mocha instance to know if it's running in a worker process. + isWorker: true + }); + + await bootstrap(opts); + + opts.rootHooks = rootHooks; + + const mocha = new Mocha(opts).addFile(filepath); + + try { + await mocha.loadFilesAsync(); + } catch (err) { + debug('run(): could not load file %s: %s', filepath, err); + throw err; + } + + return new Promise((resolve, reject) => { + let debugInterval; + /* istanbul ignore next */ + if (isDebugEnabled) { + debugInterval = setInterval(() => { + debug('run(): still running %s...', filepath); + }, 5000).unref(); + } + mocha.run(result => { + // Runner adds these; if we don't remove them, we'll get a leak. + process.removeAllListeners('uncaughtException'); + process.removeAllListeners('unhandledRejection'); + + try { + const serialized = serialize(result); + debug( + 'run(): completed run with %d test failures; returning to main process', + typeof result.failures === 'number' ? result.failures : 0 + ); + resolve(serialized); + } catch (err) { + // TODO: figure out exactly what the sad path looks like here. + // rejection should only happen if an error is "unrecoverable" + debug('run(): serialization failed; rejecting: %O', err); + reject(err); + } finally { + clearInterval(debugInterval); + } + }); + }); +} + +// this registers the `run` function. +workerpool.worker({run}); + +debug('started worker process'); + +// for testing +exports.run = run; diff --git a/build/node_modules/mocha/lib/pending.js b/build/node_modules/mocha/lib/pending.js index c847e04e..cf9cc84a 100644 --- a/build/node_modules/mocha/lib/pending.js +++ b/build/node_modules/mocha/lib/pending.js @@ -1,7 +1,8 @@ +'use strict'; /** - * Expose `Pending`. - */ + @module Pending +*/ module.exports = Pending; diff --git a/build/node_modules/mocha/lib/plugin-loader.js b/build/node_modules/mocha/lib/plugin-loader.js new file mode 100644 index 00000000..075ad91b --- /dev/null +++ b/build/node_modules/mocha/lib/plugin-loader.js @@ -0,0 +1,286 @@ +/** + * Provides a way to load "plugins" as provided by the user. + * + * Currently supports: + * + * - Root hooks + * - Global fixtures (setup/teardown) + * @private + * @module plugin + */ + +'use strict'; + +const debug = require('debug')('mocha:plugin-loader'); +const { + createInvalidPluginDefinitionError, + createInvalidPluginImplementationError +} = require('./errors'); +const {castArray} = require('./utils'); + +/** + * Built-in plugin definitions. + */ +const MochaPlugins = [ + /** + * Root hook plugin definition + * @type {PluginDefinition} + */ + { + exportName: 'mochaHooks', + optionName: 'rootHooks', + validate(value) { + if ( + Array.isArray(value) || + (typeof value !== 'function' && typeof value !== 'object') + ) { + throw createInvalidPluginImplementationError( + `mochaHooks must be an object or a function returning (or fulfilling with) an object` + ); + } + }, + async finalize(rootHooks) { + if (rootHooks.length) { + const rootHookObjects = await Promise.all( + rootHooks.map(async hook => + typeof hook === 'function' ? hook() : hook + ) + ); + + return rootHookObjects.reduce( + (acc, hook) => { + hook = { + beforeAll: [], + beforeEach: [], + afterAll: [], + afterEach: [], + ...hook + }; + return { + beforeAll: [...acc.beforeAll, ...castArray(hook.beforeAll)], + beforeEach: [...acc.beforeEach, ...castArray(hook.beforeEach)], + afterAll: [...acc.afterAll, ...castArray(hook.afterAll)], + afterEach: [...acc.afterEach, ...castArray(hook.afterEach)] + }; + }, + {beforeAll: [], beforeEach: [], afterAll: [], afterEach: []} + ); + } + } + }, + /** + * Global setup fixture plugin definition + * @type {PluginDefinition} + */ + { + exportName: 'mochaGlobalSetup', + optionName: 'globalSetup', + validate(value) { + let isValid = true; + if (Array.isArray(value)) { + if (value.some(item => typeof item !== 'function')) { + isValid = false; + } + } else if (typeof value !== 'function') { + isValid = false; + } + if (!isValid) { + throw createInvalidPluginImplementationError( + `mochaGlobalSetup must be a function or an array of functions`, + {pluginDef: this, pluginImpl: value} + ); + } + } + }, + /** + * Global teardown fixture plugin definition + * @type {PluginDefinition} + */ + { + exportName: 'mochaGlobalTeardown', + optionName: 'globalTeardown', + validate(value) { + let isValid = true; + if (Array.isArray(value)) { + if (value.some(item => typeof item !== 'function')) { + isValid = false; + } + } else if (typeof value !== 'function') { + isValid = false; + } + if (!isValid) { + throw createInvalidPluginImplementationError( + `mochaGlobalTeardown must be a function or an array of functions`, + {pluginDef: this, pluginImpl: value} + ); + } + } + } +]; + +/** + * Contains a registry of [plugin definitions]{@link PluginDefinition} and discovers plugin implementations in user-supplied code. + * + * - [load()]{@link #load} should be called for all required modules + * - The result of [finalize()]{@link #finalize} should be merged into the options for the [Mocha]{@link Mocha} constructor. + * @private + */ +class PluginLoader { + /** + * Initializes plugin names, plugin map, etc. + * @param {PluginLoaderOptions} [opts] - Options + */ + constructor({pluginDefs = MochaPlugins, ignore = []} = {}) { + /** + * Map of registered plugin defs + * @type {Map} + */ + this.registered = new Map(); + + /** + * Cache of known `optionName` values for checking conflicts + * @type {Set} + */ + this.knownOptionNames = new Set(); + + /** + * Cache of known `exportName` values for checking conflicts + * @type {Set} + */ + this.knownExportNames = new Set(); + + /** + * Map of user-supplied plugin implementations + * @type {Map>} + */ + this.loaded = new Map(); + + /** + * Set of ignored plugins by export name + * @type {Set} + */ + this.ignoredExportNames = new Set(castArray(ignore)); + + castArray(pluginDefs).forEach(pluginDef => { + this.register(pluginDef); + }); + + debug( + 'registered %d plugin defs (%d ignored)', + this.registered.size, + this.ignoredExportNames.size + ); + } + + /** + * Register a plugin + * @param {PluginDefinition} pluginDef - Plugin definition + */ + register(pluginDef) { + if (!pluginDef || typeof pluginDef !== 'object') { + throw createInvalidPluginDefinitionError( + 'pluginDef is non-object or falsy', + pluginDef + ); + } + if (!pluginDef.exportName) { + throw createInvalidPluginDefinitionError( + `exportName is expected to be a non-empty string`, + pluginDef + ); + } + let {exportName} = pluginDef; + if (this.ignoredExportNames.has(exportName)) { + debug( + 'refusing to register ignored plugin with export name "%s"', + exportName + ); + return; + } + exportName = String(exportName); + pluginDef.optionName = String(pluginDef.optionName || exportName); + if (this.knownExportNames.has(exportName)) { + throw createInvalidPluginDefinitionError( + `Plugin definition conflict: ${exportName}; exportName must be unique`, + pluginDef + ); + } + this.loaded.set(exportName, []); + this.registered.set(exportName, pluginDef); + this.knownExportNames.add(exportName); + this.knownOptionNames.add(pluginDef.optionName); + debug('registered plugin def "%s"', exportName); + } + + /** + * Inspects a module's exports for known plugins and keeps them in memory. + * + * @param {*} requiredModule - The exports of a module loaded via `--require` + * @returns {boolean} If one or more plugins was found, return `true`. + */ + load(requiredModule) { + // we should explicitly NOT fail if other stuff is exported. + // we only care about the plugins we know about. + if (requiredModule && typeof requiredModule === 'object') { + return Array.from(this.knownExportNames).reduce( + (pluginImplFound, pluginName) => { + const pluginImpl = requiredModule[pluginName]; + if (pluginImpl) { + const plugin = this.registered.get(pluginName); + if (typeof plugin.validate === 'function') { + plugin.validate(pluginImpl); + } + this.loaded.set(pluginName, [ + ...this.loaded.get(pluginName), + ...castArray(pluginImpl) + ]); + return true; + } + return pluginImplFound; + }, + false + ); + } + return false; + } + + /** + * Call the `finalize()` function of each known plugin definition on the plugins found by [load()]{@link PluginLoader#load}. + * + * Output suitable for passing as input into {@link Mocha} constructor. + * @returns {Promise} Object having keys corresponding to registered plugin definitions' `optionName` prop (or `exportName`, if none), and the values are the implementations as provided by a user. + */ + async finalize() { + const finalizedPlugins = Object.create(null); + + for await (const [exportName, pluginImpls] of this.loaded.entries()) { + if (pluginImpls.length) { + const plugin = this.registered.get(exportName); + finalizedPlugins[plugin.optionName] = + typeof plugin.finalize === 'function' + ? await plugin.finalize(pluginImpls) + : pluginImpls; + } + } + + debug('finalized plugins: %O', finalizedPlugins); + return finalizedPlugins; + } + + /** + * Constructs a {@link PluginLoader} + * @param {PluginLoaderOptions} [opts] - Plugin loader options + */ + static create({pluginDefs = MochaPlugins, ignore = []} = {}) { + return new PluginLoader({pluginDefs, ignore}); + } +} + +module.exports = PluginLoader; + +/** + * Options for {@link PluginLoader} + * @typedef {Object} PluginLoaderOptions + * @property {PluginDefinition[]} [pluginDefs] - Plugin definitions + * @property {string[]} [ignore] - A list of plugins to ignore when loading + */ diff --git a/build/node_modules/mocha/lib/reporters/base.js b/build/node_modules/mocha/lib/reporters/base.js index bb107ba2..40b59964 100644 --- a/build/node_modules/mocha/lib/reporters/base.js +++ b/build/node_modules/mocha/lib/reporters/base.js @@ -1,12 +1,29 @@ +'use strict'; +/** + * @module Base + */ /** * Module dependencies. */ -var tty = require('tty'); var diff = require('diff'); -var ms = require('../ms'); +var milliseconds = require('ms'); var utils = require('../utils'); -var supportsColor = process.browser ? null : require('supports-color'); +var supportsColor = require('supports-color'); +var symbols = require('log-symbols'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + +const isBrowser = utils.isBrowser(); + +function getBrowserWindowSize() { + if ('innerHeight' in global) { + return [global.innerHeight, global.innerWidth]; + } + // In a Web Worker, the DOM Window is not available. + return [640, 480]; +} /** * Expose `Base`. @@ -15,29 +32,23 @@ var supportsColor = process.browser ? null : require('supports-color'); exports = module.exports = Base; /** - * Save timer references to avoid Sinon interfering. - * See: https://github.com/mochajs/mocha/issues/237 + * Check if both stdio streams are associated with a tty. */ -/* eslint-disable no-unused-vars, no-native-reassign */ -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ +var isatty = isBrowser || (process.stdout.isTTY && process.stderr.isTTY); /** - * Check if both stdio streams are associated with a tty. + * Save log references to avoid tests interfering (see GH-3604). */ - -var isatty = tty.isatty(1) && tty.isatty(2); +var consoleLog = console.log; /** * Enable coloring by default, except in the browser interface. */ -exports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COLORS !== undefined)); +exports.useColors = + !isBrowser && + (supportsColor.stdout || process.env.MOCHA_COLORS !== undefined); /** * Inline diffs instead of +/- @@ -45,6 +56,11 @@ exports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COL exports.inlineDiffs = false; +/** + * Truncate diffs longer than this value to avoid slow performance + */ +exports.maxDiffSize = 8192; + /** * Default color map. */ @@ -68,7 +84,9 @@ exports.colors = { light: 90, 'diff gutter': 90, 'diff added': 32, - 'diff removed': 31 + 'diff removed': 31, + 'diff added inline': '30;42', + 'diff removed inline': '30;41' }; /** @@ -76,35 +94,30 @@ exports.colors = { */ exports.symbols = { - ok: '✓', - err: '✖', - dot: '․' + ok: symbols.success, + err: symbols.error, + dot: '.', + comma: ',', + bang: '!' }; -// With node.js on Windows: use symbols available in terminal default fonts -if (process.platform === 'win32') { - exports.symbols.ok = '\u221A'; - exports.symbols.err = '\u00D7'; - exports.symbols.dot = '.'; -} - /** * Color `str` with the given `type`, * allowing colors to be disabled, * as well as user-defined color * schemes. * + * @private * @param {string} type * @param {string} str * @return {string} - * @api private */ -var color = exports.color = function(type, str) { +var color = (exports.color = function (type, str) { if (!exports.useColors) { return String(str); } return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; +}); /** * Expose term window size, with some defaults for when stderr is not a tty. @@ -115,9 +128,11 @@ exports.window = { }; if (isatty) { - exports.window.width = process.stdout.getWindowSize - ? process.stdout.getWindowSize(1)[0] - : tty.getWindowSize()[1]; + if (isBrowser) { + exports.window.width = getBrowserWindowSize()[1]; + } else { + exports.window.width = process.stdout.getWindowSize(1)[0]; + } } /** @@ -125,23 +140,23 @@ if (isatty) { */ exports.cursor = { - hide: function() { + hide: function () { isatty && process.stdout.write('\u001b[?25l'); }, - show: function() { + show: function () { isatty && process.stdout.write('\u001b[?25h'); }, - deleteLine: function() { + deleteLine: function () { isatty && process.stdout.write('\u001b[2K'); }, - beginningOfLine: function() { + beginningOfLine: function () { isatty && process.stdout.write('\u001b[0G'); }, - CR: function() { + CR: function () { if (isatty) { exports.cursor.deleteLine(); exports.cursor.beginningOfLine(); @@ -151,37 +166,102 @@ exports.cursor = { } }; +var showDiff = (exports.showDiff = function (err) { + return ( + err && + err.showDiff !== false && + sameType(err.actual, err.expected) && + err.expected !== undefined + ); +}); + +function stringifyDiffObjs(err) { + if (!utils.isString(err.actual) || !utils.isString(err.expected)) { + err.actual = utils.stringify(err.actual); + err.expected = utils.stringify(err.expected); + } +} + /** - * Outut the given `failures` as a list. + * Returns a diff between 2 strings with coloured ANSI output. + * + * @description + * The diff will be either inline or unified dependent on the value + * of `Base.inlineDiff`. * - * @param {Array} failures - * @api public + * @param {string} actual + * @param {string} expected + * @return {string} Diff */ -exports.list = function(failures) { - console.log(); - failures.forEach(function(test, i) { +var generateDiff = (exports.generateDiff = function (actual, expected) { + try { + var maxLen = exports.maxDiffSize; + var skipped = 0; + if (maxLen > 0) { + skipped = Math.max(actual.length - maxLen, expected.length - maxLen); + actual = actual.slice(0, maxLen); + expected = expected.slice(0, maxLen); + } + let result = exports.inlineDiffs + ? inlineDiff(actual, expected) + : unifiedDiff(actual, expected); + if (skipped > 0) { + result = `${result}\n [mocha] output truncated to ${maxLen} characters, see "maxDiffSize" reporter-option\n`; + } + return result; + } catch (err) { + var msg = + '\n ' + + color('diff added', '+ expected') + + ' ' + + color('diff removed', '- actual: failed to generate Mocha diff') + + '\n'; + return msg; + } +}); + +/** + * Outputs the given `failures` as a list. + * + * @public + * @memberof Mocha.reporters.Base + * @variation 1 + * @param {Object[]} failures - Each is Test instance with corresponding + * Error property + */ +exports.list = function (failures) { + var multipleErr, multipleTest; + Base.consoleLog(); + failures.forEach(function (test, i) { // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); + var fmt = + color('error title', ' %s) %s:\n') + + color('error message', ' %s') + + color('error stack', '\n%s\n'); // msg var msg; - var err = test.err; + var err; + if (test.err && test.err.multiple) { + if (multipleTest !== test) { + multipleTest = test; + multipleErr = [test.err].concat(test.err.multiple); + } + err = multipleErr.shift(); + } else { + err = test.err; + } var message; - if (err.message) { - message = err.message; - } else if (typeof err.inspect === 'function') { + if (typeof err.inspect === 'function') { message = err.inspect() + ''; + } else if (err.message && typeof err.message.toString === 'function') { + message = err.message + ''; } else { message = ''; } var stack = err.stack || message; - var index = stack.indexOf(message); - var actual = err.actual; - var expected = err.expected; - var escape = true; + var index = message ? stack.indexOf(message) : -1; if (index === -1) { msg = message; @@ -197,71 +277,64 @@ exports.list = function(failures) { msg = 'Uncaught ' + msg; } // explicitly show diff - if (err.showDiff !== false && sameType(actual, expected) && expected !== undefined) { - escape = false; - if (!(utils.isString(actual) && utils.isString(expected))) { - err.actual = actual = utils.stringify(actual); - err.expected = expected = utils.stringify(expected); - } - - fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); + if (!exports.hideDiff && showDiff(err)) { + stringifyDiffObjs(err); + fmt = + color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); var match = message.match(/^([^:]+): expected/); msg = '\n ' + color('error message', match ? match[1] : msg); - if (exports.inlineDiffs) { - msg += inlineDiff(err, escape); - } else { - msg += unifiedDiff(err, escape); - } + msg += generateDiff(err.actual, err.expected); } // indent stack trace stack = stack.replace(/^/gm, ' '); - console.log(fmt, (i + 1), test.fullTitle(), msg, stack); + // indented test title + var testTitle = ''; + test.titlePath().forEach(function (str, index) { + if (index !== 0) { + testTitle += '\n '; + } + for (var i = 0; i < index; i++) { + testTitle += ' '; + } + testTitle += str; + }); + + Base.consoleLog(fmt, i + 1, testTitle, msg, stack); }); }; /** - * Initialize a new `Base` reporter. + * Constructs a new `Base` reporter instance. * - * All other reporters generally - * inherit from this reporter, providing - * stats such as test duration, number - * of tests passed / failed etc. + * @description + * All other reporters generally inherit from this reporter. * - * @param {Runner} runner - * @api public + * @public + * @class + * @memberof Mocha.reporters + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ - -function Base(runner) { - var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; - var failures = this.failures = []; +function Base(runner, options) { + var failures = (this.failures = []); if (!runner) { - return; + throw new TypeError('Missing runner argument'); } + this.options = options || {}; this.runner = runner; + this.stats = runner.stats; // assigned so Reporters keep a closer reference - runner.stats = stats; - - runner.on('start', function() { - stats.start = new Date(); - }); - - runner.on('suite', function(suite) { - stats.suites = stats.suites || 0; - suite.root || stats.suites++; - }); - - runner.on('test end', function() { - stats.tests = stats.tests || 0; - stats.tests++; - }); - - runner.on('pass', function(test) { - stats.passes = stats.passes || 0; + var maxDiffSizeOpt = + this.options.reporterOption && this.options.reporterOption.maxDiffSize; + if (maxDiffSizeOpt !== undefined && !isNaN(Number(maxDiffSizeOpt))) { + exports.maxDiffSize = Number(maxDiffSizeOpt); + } + runner.on(EVENT_TEST_PASS, function (test) { if (test.duration > test.slow()) { test.speed = 'slow'; } else if (test.duration > test.slow() / 2) { @@ -269,73 +342,66 @@ function Base(runner) { } else { test.speed = 'fast'; } - - stats.passes++; }); - runner.on('fail', function(test, err) { - stats.failures = stats.failures || 0; - stats.failures++; - test.err = err; + runner.on(EVENT_TEST_FAIL, function (test, err) { + if (showDiff(err)) { + stringifyDiffObjs(err); + } + // more than one error per test + if (test.err && err instanceof Error) { + test.err.multiple = (test.err.multiple || []).concat(err); + } else { + test.err = err; + } failures.push(test); }); - - runner.on('end', function() { - stats.end = new Date(); - stats.duration = new Date() - stats.start; - }); - - runner.on('pending', function() { - stats.pending++; - }); } /** - * Output common epilogue used by many of - * the bundled reporters. + * Outputs common epilogue used by many of the bundled reporters. * - * @api public + * @public + * @memberof Mocha.reporters */ -Base.prototype.epilogue = function() { +Base.prototype.epilogue = function () { var stats = this.stats; var fmt; - console.log(); + Base.consoleLog(); // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); + fmt = + color('bright pass', ' ') + + color('green', ' %d passing') + + color('light', ' (%s)'); - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); + Base.consoleLog(fmt, stats.passes || 0, milliseconds(stats.duration)); // pending if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); + fmt = color('pending', ' ') + color('pending', ' %d pending'); - console.log(fmt, stats.pending); + Base.consoleLog(fmt, stats.pending); } // failures if (stats.failures) { fmt = color('fail', ' %d failing'); - console.log(fmt, stats.failures); + Base.consoleLog(fmt, stats.failures); Base.list(this.failures); - console.log(); + Base.consoleLog(); } - console.log(); + Base.consoleLog(); }; /** - * Pad the given `str` to `len`. + * Pads the given `str` to `len`. * - * @api private + * @private * @param {string} str * @param {string} len * @return {string} @@ -346,33 +412,36 @@ function pad(str, len) { } /** - * Returns an inline diff between 2 strings with coloured ANSI output + * Returns inline diff between 2 strings with coloured ANSI output. * - * @api private - * @param {Error} err with actual/expected - * @param {boolean} escape + * @private + * @param {String} actual + * @param {String} expected * @return {string} Diff */ -function inlineDiff(err, escape) { - var msg = errorDiff(err, 'WordsWithSpace', escape); +function inlineDiff(actual, expected) { + var msg = errorDiff(actual, expected); // linenos var lines = msg.split('\n'); if (lines.length > 4) { var width = String(lines.length).length; - msg = lines.map(function(str, i) { - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); + msg = lines + .map(function (str, i) { + return pad(++i, width) + ' |' + ' ' + str; + }) + .join('\n'); } // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; + msg = + '\n' + + color('diff removed inline', 'actual') + + ' ' + + color('diff added inline', 'expected') + + '\n\n' + + msg + + '\n'; // indent msg = msg.replace(/^/gm, ' '); @@ -380,27 +449,24 @@ function inlineDiff(err, escape) { } /** - * Returns a unified diff between two strings. + * Returns unified diff between two strings with coloured ANSI output. * - * @api private - * @param {Error} err with actual/expected - * @param {boolean} escape + * @private + * @param {String} actual + * @param {String} expected * @return {string} The diff. */ -function unifiedDiff(err, escape) { +function unifiedDiff(actual, expected) { var indent = ' '; function cleanUp(line) { - if (escape) { - line = escapeInvisibles(line); - } if (line[0] === '+') { return indent + colorLines('diff added', line); } if (line[0] === '-') { return indent + colorLines('diff removed', line); } - if (line.match(/\@\@/)) { - return null; + if (line.match(/@@/)) { + return '--'; } if (line.match(/\\ No newline/)) { return null; @@ -410,63 +476,56 @@ function unifiedDiff(err, escape) { function notBlank(line) { return typeof line !== 'undefined' && line !== null; } - var msg = diff.createPatch('string', err.actual, err.expected); - var lines = msg.split('\n').splice(4); - return '\n ' - + colorLines('diff added', '+ expected') + ' ' - + colorLines('diff removed', '- actual') - + '\n\n' - + lines.map(cleanUp).filter(notBlank).join('\n'); + var msg = diff.createPatch('string', actual, expected); + var lines = msg.split('\n').splice(5); + return ( + '\n ' + + colorLines('diff added', '+ expected') + + ' ' + + colorLines('diff removed', '- actual') + + '\n\n' + + lines.map(cleanUp).filter(notBlank).join('\n') + ); } /** - * Return a character diff for `err`. + * Returns character diff for `err`. * - * @api private - * @param {Error} err - * @param {string} type - * @param {boolean} escape - * @return {string} + * @private + * @param {String} actual + * @param {String} expected + * @return {string} the diff */ -function errorDiff(err, type, escape) { - var actual = escape ? escapeInvisibles(err.actual) : err.actual; - var expected = escape ? escapeInvisibles(err.expected) : err.expected; - return diff['diff' + type](actual, expected).map(function(str) { - if (str.added) { - return colorLines('diff added', str.value); - } - if (str.removed) { - return colorLines('diff removed', str.value); - } - return str.value; - }).join(''); -} - -/** - * Returns a string with all invisible characters in plain text - * - * @api private - * @param {string} line - * @return {string} - */ -function escapeInvisibles(line) { - return line.replace(/\t/g, '') - .replace(/\r/g, '') - .replace(/\n/g, '\n'); +function errorDiff(actual, expected) { + return diff + .diffWordsWithSpace(actual, expected) + .map(function (str) { + if (str.added) { + return colorLines('diff added inline', str.value); + } + if (str.removed) { + return colorLines('diff removed inline', str.value); + } + return str.value; + }) + .join(''); } /** - * Color lines for `str`, using the color `name`. + * Colors lines for `str`, using the color `name`. * - * @api private + * @private * @param {string} name * @param {string} str * @return {string} */ function colorLines(name, str) { - return str.split('\n').map(function(str) { - return color(name, str); - }).join('\n'); + return str + .split('\n') + .map(function (str) { + return color(name, str); + }) + .join('\n'); } /** @@ -475,9 +534,9 @@ function colorLines(name, str) { var objToString = Object.prototype.toString; /** - * Check that a / b have the same type. + * Checks that a / b have the same type. * - * @api private + * @private * @param {Object} a * @param {Object} b * @return {boolean} @@ -485,3 +544,7 @@ var objToString = Object.prototype.toString; function sameType(a, b) { return objToString.call(a) === objToString.call(b); } + +Base.consoleLog = consoleLog; + +Base.abstract = true; diff --git a/build/node_modules/mocha/lib/reporters/doc.js b/build/node_modules/mocha/lib/reporters/doc.js index 8c1fd3ad..b2c3e488 100644 --- a/build/node_modules/mocha/lib/reporters/doc.js +++ b/build/node_modules/mocha/lib/reporters/doc.js @@ -1,9 +1,18 @@ +'use strict'; +/** + * @module Doc + */ /** * Module dependencies. */ var Base = require('./base'); var utils = require('../utils'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = constants.EVENT_SUITE_END; /** * Expose `Doc`. @@ -12,13 +21,17 @@ var utils = require('../utils'); exports = module.exports = Doc; /** - * Initialize a new `Doc` reporter. + * Constructs a new `Doc` reporter instance. * - * @param {Runner} runner - * @api public + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Doc(runner) { - Base.call(this, runner); +function Doc(runner, options) { + Base.call(this, runner, options); var indents = 2; @@ -26,37 +39,57 @@ function Doc(runner) { return Array(indents).join(' '); } - runner.on('suite', function(suite) { + runner.on(EVENT_SUITE_BEGIN, function (suite) { if (suite.root) { return; } ++indents; - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); ++indents; - console.log('%s

%s

', indent(), utils.escape(suite.title)); - console.log('%s
', indent()); + Base.consoleLog('%s

%s

', indent(), utils.escape(suite.title)); + Base.consoleLog('%s
', indent()); }); - runner.on('suite end', function(suite) { + runner.on(EVENT_SUITE_END, function (suite) { if (suite.root) { return; } - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); --indents; - console.log('%s
', indent()); + Base.consoleLog('%s
', indent()); --indents; }); - runner.on('pass', function(test) { - console.log('%s
%s
', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
%s
', indent(), code); + runner.on(EVENT_TEST_PASS, function (test) { + Base.consoleLog('%s
%s
', indent(), utils.escape(test.title)); + Base.consoleLog('%s
%s
', indent(), utils.escape(test.file)); + var code = utils.escape(utils.clean(test.body)); + Base.consoleLog('%s
%s
', indent(), code); }); - runner.on('fail', function(test, err) { - console.log('%s
%s
', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
%s
', indent(), code); - console.log('%s
%s
', indent(), utils.escape(err)); + runner.on(EVENT_TEST_FAIL, function (test, err) { + Base.consoleLog( + '%s
%s
', + indent(), + utils.escape(test.title) + ); + Base.consoleLog( + '%s
%s
', + indent(), + utils.escape(test.file) + ); + var code = utils.escape(utils.clean(test.body)); + Base.consoleLog( + '%s
%s
', + indent(), + code + ); + Base.consoleLog( + '%s
%s
', + indent(), + utils.escape(err) + ); }); } + +Doc.description = 'HTML documentation'; diff --git a/build/node_modules/mocha/lib/reporters/dot.js b/build/node_modules/mocha/lib/reporters/dot.js index e905dc68..c67ac8ff 100644 --- a/build/node_modules/mocha/lib/reporters/dot.js +++ b/build/node_modules/mocha/lib/reporters/dot.js @@ -1,10 +1,19 @@ +'use strict'; +/** + * @module Dot + */ /** * Module dependencies. */ var Base = require('./base'); var inherits = require('../utils').inherits; -var color = Base.color; +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var EVENT_RUN_END = constants.EVENT_RUN_END; /** * Expose `Dot`. @@ -13,49 +22,53 @@ var color = Base.color; exports = module.exports = Dot; /** - * Initialize a new `Dot` matrix test reporter. + * Constructs a new `Dot` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Dot(runner) { - Base.call(this, runner); +function Dot(runner, options) { + Base.call(this, runner, options); var self = this; - var width = Base.window.width * .75 | 0; + var width = (Base.window.width * 0.75) | 0; var n = -1; - runner.on('start', function() { + runner.on(EVENT_RUN_BEGIN, function () { process.stdout.write('\n'); }); - runner.on('pending', function() { + runner.on(EVENT_TEST_PENDING, function () { if (++n % width === 0) { process.stdout.write('\n '); } - process.stdout.write(color('pending', Base.symbols.dot)); + process.stdout.write(Base.color('pending', Base.symbols.comma)); }); - runner.on('pass', function(test) { + runner.on(EVENT_TEST_PASS, function (test) { if (++n % width === 0) { process.stdout.write('\n '); } if (test.speed === 'slow') { - process.stdout.write(color('bright yellow', Base.symbols.dot)); + process.stdout.write(Base.color('bright yellow', Base.symbols.dot)); } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); + process.stdout.write(Base.color(test.speed, Base.symbols.dot)); } }); - runner.on('fail', function() { + runner.on(EVENT_TEST_FAIL, function () { if (++n % width === 0) { process.stdout.write('\n '); } - process.stdout.write(color('fail', Base.symbols.dot)); + process.stdout.write(Base.color('fail', Base.symbols.bang)); }); - runner.on('end', function() { - console.log(); + runner.once(EVENT_RUN_END, function () { + process.stdout.write('\n'); self.epilogue(); }); } @@ -64,3 +77,5 @@ function Dot(runner) { * Inherit from `Base.prototype`. */ inherits(Dot, Base); + +Dot.description = 'dot matrix representation'; diff --git a/build/node_modules/mocha/lib/reporters/html-cov.js b/build/node_modules/mocha/lib/reporters/html-cov.js deleted file mode 100644 index e3f2dd91..00000000 --- a/build/node_modules/mocha/lib/reporters/html-cov.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Module dependencies. - */ - -var JSONCov = require('./json-cov'); -var readFileSync = require('fs').readFileSync; -var join = require('path').join; - -/** - * Expose `HTMLCov`. - */ - -exports = module.exports = HTMLCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @api public - * @param {Runner} runner - */ -function HTMLCov(runner) { - var jade = require('jade'); - var file = join(__dirname, '/templates/coverage.jade'); - var str = readFileSync(file, 'utf8'); - var fn = jade.compile(str, { filename: file }); - var self = this; - - JSONCov.call(this, runner, false); - - runner.on('end', function() { - process.stdout.write(fn({ - cov: self.cov, - coverageClass: coverageClass - })); - }); -} - -/** - * Return coverage class for a given coverage percentage. - * - * @api private - * @param {number} coveragePctg - * @return {string} - */ -function coverageClass(coveragePctg) { - if (coveragePctg >= 75) { - return 'high'; - } - if (coveragePctg >= 50) { - return 'medium'; - } - if (coveragePctg >= 25) { - return 'low'; - } - return 'terrible'; -} diff --git a/build/node_modules/mocha/lib/reporters/html.js b/build/node_modules/mocha/lib/reporters/html.js index 62643ecb..f0fb538a 100644 --- a/build/node_modules/mocha/lib/reporters/html.js +++ b/build/node_modules/mocha/lib/reporters/html.js @@ -1,5 +1,9 @@ -/* eslint-env browser */ +'use strict'; +/* eslint-env browser */ +/** + * @module HTML + */ /** * Module dependencies. */ @@ -8,19 +12,19 @@ var Base = require('./base'); var utils = require('../utils'); var Progress = require('../browser/progress'); var escapeRe = require('escape-string-regexp'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = constants.EVENT_SUITE_END; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; var escape = utils.escape; /** * Save timer references to avoid Sinon interfering (see GH-237). */ -/* eslint-disable no-unused-vars, no-native-reassign */ var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ /** * Expose `HTML`. @@ -32,21 +36,28 @@ exports = module.exports = HTML; * Stats template. */ -var statsTemplate = ''; +var statsTemplate = + ''; + +var playIcon = '‣'; /** - * Initialize a new `HTML` reporter. + * Constructs a new `HTML` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function HTML(runner) { - Base.call(this, runner); +function HTML(runner, options) { + Base.call(this, runner, options); var self = this; var stats = this.stats; @@ -80,9 +91,10 @@ function HTML(runner) { } // pass toggle - on(passesLink, 'click', function() { + on(passesLink, 'click', function (evt) { + evt.preventDefault(); unhide(); - var name = (/pass/).test(report.className) ? '' : ' pass'; + var name = /pass/.test(report.className) ? '' : ' pass'; report.className = report.className.replace(/fail|pass/g, '') + name; if (report.className.trim()) { hideSuitesWithout('test pass'); @@ -90,9 +102,10 @@ function HTML(runner) { }); // failure toggle - on(failuresLink, 'click', function() { + on(failuresLink, 'click', function (evt) { + evt.preventDefault(); unhide(); - var name = (/fail/).test(report.className) ? '' : ' fail'; + var name = /fail/.test(report.className) ? '' : ' fail'; report.className = report.className.replace(/fail|pass/g, '') + name; if (report.className.trim()) { hideSuitesWithout('test fail'); @@ -106,14 +119,18 @@ function HTML(runner) { progress.size(40); } - runner.on('suite', function(suite) { + runner.on(EVENT_SUITE_BEGIN, function (suite) { if (suite.root) { return; } // suite var url = self.suiteURL(suite); - var el = fragment('
  • %s

  • ', url, escape(suite.title)); + var el = fragment( + '
  • %s

  • ', + url, + escape(suite.title) + ); // container stack[0].appendChild(el); @@ -121,92 +138,112 @@ function HTML(runner) { el.appendChild(stack[0]); }); - runner.on('suite end', function(suite) { + runner.on(EVENT_SUITE_END, function (suite) { if (suite.root) { + updateStats(); return; } stack.shift(); }); - runner.on('fail', function(test) { - if (test.type === 'hook') { - runner.emit('test end', test); - } + runner.on(EVENT_TEST_PASS, function (test) { + var url = self.testURL(test); + var markup = + '
  • %e%ems ' + + '' + + playIcon + + '

  • '; + var el = fragment(markup, test.speed, test.title, test.duration, url); + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); }); - runner.on('test end', function(test) { - // TODO: add to stats - var percent = stats.tests / this.total * 100 | 0; - if (progress) { - progress.update(percent).draw(ctx); + runner.on(EVENT_TEST_FAIL, function (test) { + var el = fragment( + '
  • %e ' + + playIcon + + '

  • ', + test.title, + self.testURL(test) + ); + var stackString; // Note: Includes leading newline + var message = test.err.toString(); + + // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we + // check for the result of the stringifying. + if (message === '[object Error]') { + message = test.err.message; } - // update stats - var ms = new Date() - stats.start; - text(passes, stats.passes); - text(failures, stats.failures); - text(duration, (ms / 1000).toFixed(2)); - - // test - var el; - if (test.state === 'passed') { - var url = self.testURL(test); - el = fragment('
  • %e%ems

  • ', test.speed, test.title, test.duration, url); - } else if (test.pending) { - el = fragment('
  • %e

  • ', test.title); - } else { - el = fragment('
  • %e

  • ', test.title, self.testURL(test)); - var stackString; // Note: Includes leading newline - var message = test.err.toString(); - - // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we - // check for the result of the stringifying. - if (message === '[object Error]') { - message = test.err.message; - } - - if (test.err.stack) { - var indexOfMessage = test.err.stack.indexOf(test.err.message); - if (indexOfMessage === -1) { - stackString = test.err.stack; - } else { - stackString = test.err.stack.substr(test.err.message.length + indexOfMessage); - } - } else if (test.err.sourceURL && test.err.line !== undefined) { - // Safari doesn't give you a stack. Let's at least provide a source line. - stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')'; - } - - stackString = stackString || ''; - - if (test.err.htmlMessage && stackString) { - el.appendChild(fragment('
    %s\n
    %e
    ', test.err.htmlMessage, stackString)); - } else if (test.err.htmlMessage) { - el.appendChild(fragment('
    %s
    ', test.err.htmlMessage)); + if (test.err.stack) { + var indexOfMessage = test.err.stack.indexOf(test.err.message); + if (indexOfMessage === -1) { + stackString = test.err.stack; } else { - el.appendChild(fragment('
    %e%e
    ', message, stackString)); + stackString = test.err.stack.substr( + test.err.message.length + indexOfMessage + ); } + } else if (test.err.sourceURL && test.err.line !== undefined) { + // Safari doesn't give you a stack. Let's at least provide a source line. + stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')'; } - // toggle code - // TODO: defer - if (!test.pending) { - var h2 = el.getElementsByTagName('h2')[0]; + stackString = stackString || ''; + + if (test.err.htmlMessage && stackString) { + el.appendChild( + fragment( + '
    %s\n
    %e
    ', + test.err.htmlMessage, + stackString + ) + ); + } else if (test.err.htmlMessage) { + el.appendChild( + fragment('
    %s
    ', test.err.htmlMessage) + ); + } else { + el.appendChild( + fragment('
    %e%e
    ', message, stackString) + ); + } - on(h2, 'click', function() { - pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; - }); + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); + }); - var pre = fragment('
    %e
    ', utils.clean(test.fn.toString())); - el.appendChild(pre); - pre.style.display = 'none'; - } + runner.on(EVENT_TEST_PENDING, function (test) { + var el = fragment( + '
  • %e

  • ', + test.title + ); + appendToStack(el); + updateStats(); + }); + function appendToStack(el) { // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. if (stack[0]) { stack[0].appendChild(el); } - }); + } + + function updateStats() { + // TODO: add to stats + var percent = ((stats.tests / runner.total) * 100) | 0; + if (progress) { + progress.update(percent).draw(ctx); + } + + // update stats + var ms = new Date() - stats.start; + text(passes, stats.passes); + text(failures, stats.failures); + text(duration, (ms / 1000).toFixed(2)); + } } /** @@ -223,7 +260,12 @@ function makeUrl(s) { search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?'); } - return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeRe(s)); + return ( + window.location.pathname + + (search ? search + '&' : '?') + + 'grep=' + + encodeURIComponent(escapeRe(s)) + ); } /** @@ -231,7 +273,7 @@ function makeUrl(s) { * * @param {Object} [suite] */ -HTML.prototype.suiteURL = function(suite) { +HTML.prototype.suiteURL = function (suite) { return makeUrl(suite.fullTitle()); }; @@ -240,10 +282,28 @@ HTML.prototype.suiteURL = function(suite) { * * @param {Object} [test] */ -HTML.prototype.testURL = function(test) { +HTML.prototype.testURL = function (test) { return makeUrl(test.fullTitle()); }; +/** + * Adds code toggle functionality for the provided test's list element. + * + * @param {HTMLLIElement} el + * @param {string} contents + */ +HTML.prototype.addCodeToggle = function (el, contents) { + var h2 = el.getElementsByTagName('h2')[0]; + + on(h2, 'click', function () { + pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; + }); + + var pre = fragment('
    %e
    ', utils.clean(contents)); + el.appendChild(pre); + pre.style.display = 'none'; +}; + /** * Display error `msg`. * @@ -263,10 +323,12 @@ function fragment(html) { var div = document.createElement('div'); var i = 1; - div.innerHTML = html.replace(/%([se])/g, function(_, type) { + div.innerHTML = html.replace(/%([se])/g, function (_, type) { switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); + case 's': + return String(args[i++]); + case 'e': + return escape(args[i++]); // no default } }); @@ -295,8 +357,8 @@ function hideSuitesWithout(classname) { */ function unhide() { var els = document.getElementsByClassName('suite hidden'); - for (var i = 0; i < els.length; ++i) { - els[i].className = els[i].className.replace('suite hidden', 'suite'); + while (els.length > 0) { + els[0].className = els[0].className.replace('suite hidden', 'suite'); } } @@ -324,3 +386,5 @@ function on(el, event, fn) { el.attachEvent('on' + event, fn); } } + +HTML.browserOnly = true; diff --git a/build/node_modules/mocha/lib/reporters/index.js b/build/node_modules/mocha/lib/reporters/index.js index 51f5cffe..d3b5481e 100644 --- a/build/node_modules/mocha/lib/reporters/index.js +++ b/build/node_modules/mocha/lib/reporters/index.js @@ -1,3 +1,5 @@ +'use strict'; + // Alias exports to a their normalized format Mocha#reporter to prevent a need // for dynamic (try/catch) requires, which Browserify doesn't handle. exports.Base = exports.base = require('./base'); @@ -14,6 +16,4 @@ exports.XUnit = exports.xunit = require('./xunit'); exports.Markdown = exports.markdown = require('./markdown'); exports.Progress = exports.progress = require('./progress'); exports.Landing = exports.landing = require('./landing'); -exports.JSONCov = exports['json-cov'] = require('./json-cov'); -exports.HTMLCov = exports['html-cov'] = require('./html-cov'); exports.JSONStream = exports['json-stream'] = require('./json-stream'); diff --git a/build/node_modules/mocha/lib/reporters/json-cov.js b/build/node_modules/mocha/lib/reporters/json-cov.js deleted file mode 100644 index ed444e41..00000000 --- a/build/node_modules/mocha/lib/reporters/json-cov.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSONCov`. - */ - -exports = module.exports = JSONCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @api public - * @param {Runner} runner - * @param {boolean} output - */ -function JSONCov(runner, output) { - Base.call(this, runner); - - output = arguments.length === 1 || output; - var self = this; - var tests = []; - var failures = []; - var passes = []; - - runner.on('test end', function(test) { - tests.push(test); - }); - - runner.on('pass', function(test) { - passes.push(test); - }); - - runner.on('fail', function(test) { - failures.push(test); - }); - - runner.on('end', function() { - var cov = global._$jscoverage || {}; - var result = self.cov = map(cov); - result.stats = self.stats; - result.tests = tests.map(clean); - result.failures = failures.map(clean); - result.passes = passes.map(clean); - if (!output) { - return; - } - process.stdout.write(JSON.stringify(result, null, 2)); - }); -} - -/** - * Map jscoverage data to a JSON structure - * suitable for reporting. - * - * @api private - * @param {Object} cov - * @return {Object} - */ - -function map(cov) { - var ret = { - instrumentation: 'node-jscoverage', - sloc: 0, - hits: 0, - misses: 0, - coverage: 0, - files: [] - }; - - for (var filename in cov) { - if (Object.prototype.hasOwnProperty.call(cov, filename)) { - var data = coverage(filename, cov[filename]); - ret.files.push(data); - ret.hits += data.hits; - ret.misses += data.misses; - ret.sloc += data.sloc; - } - } - - ret.files.sort(function(a, b) { - return a.filename.localeCompare(b.filename); - }); - - if (ret.sloc > 0) { - ret.coverage = (ret.hits / ret.sloc) * 100; - } - - return ret; -} - -/** - * Map jscoverage data for a single source file - * to a JSON structure suitable for reporting. - * - * @api private - * @param {string} filename name of the source file - * @param {Object} data jscoverage coverage data - * @return {Object} - */ -function coverage(filename, data) { - var ret = { - filename: filename, - coverage: 0, - hits: 0, - misses: 0, - sloc: 0, - source: {} - }; - - data.source.forEach(function(line, num) { - num++; - - if (data[num] === 0) { - ret.misses++; - ret.sloc++; - } else if (data[num] !== undefined) { - ret.hits++; - ret.sloc++; - } - - ret.source[num] = { - source: line, - coverage: data[num] === undefined ? '' : data[num] - }; - }); - - ret.coverage = ret.hits / ret.sloc * 100; - - return ret; -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @api private - * @param {Object} test - * @return {Object} - */ -function clean(test) { - return { - duration: test.duration, - fullTitle: test.fullTitle(), - title: test.title - }; -} diff --git a/build/node_modules/mocha/lib/reporters/json-stream.js b/build/node_modules/mocha/lib/reporters/json-stream.js index c8f0e113..b20c000d 100644 --- a/build/node_modules/mocha/lib/reporters/json-stream.js +++ b/build/node_modules/mocha/lib/reporters/json-stream.js @@ -1,59 +1,92 @@ +'use strict'; +/** + * @module JSONStream + */ /** * Module dependencies. */ var Base = require('./base'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_RUN_END = constants.EVENT_RUN_END; /** - * Expose `List`. + * Expose `JSONStream`. */ -exports = module.exports = List; +exports = module.exports = JSONStream; /** - * Initialize a new `List` test reporter. + * Constructs a new `JSONStream` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function List(runner) { - Base.call(this, runner); +function JSONStream(runner, options) { + Base.call(this, runner, options); var self = this; var total = runner.total; - runner.on('start', function() { - console.log(JSON.stringify(['start', { total: total }])); + runner.once(EVENT_RUN_BEGIN, function () { + writeEvent(['start', {total: total}]); }); - runner.on('pass', function(test) { - console.log(JSON.stringify(['pass', clean(test)])); + runner.on(EVENT_TEST_PASS, function (test) { + writeEvent(['pass', clean(test)]); }); - runner.on('fail', function(test, err) { + runner.on(EVENT_TEST_FAIL, function (test, err) { test = clean(test); test.err = err.message; test.stack = err.stack || null; - console.log(JSON.stringify(['fail', test])); + writeEvent(['fail', test]); }); - runner.on('end', function() { - process.stdout.write(JSON.stringify(['end', self.stats])); + runner.once(EVENT_RUN_END, function () { + writeEvent(['end', self.stats]); }); } /** - * Return a plain-object representation of `test` - * free of cyclic properties etc. + * Mocha event to be written to the output stream. + * @typedef {Array} JSONStream~MochaEvent + */ + +/** + * Writes Mocha event to reporter output stream. * - * @api private - * @param {Object} test - * @return {Object} + * @private + * @param {JSONStream~MochaEvent} event - Mocha event to be output. + */ +function writeEvent(event) { + process.stdout.write(JSON.stringify(event) + '\n'); +} + +/** + * Returns an object literal representation of `test` + * free of cyclic properties, etc. + * + * @private + * @param {Test} test - Instance used as data source. + * @return {Object} object containing pared-down test instance data */ function clean(test) { return { title: test.title, fullTitle: test.fullTitle(), - duration: test.duration + file: test.file, + duration: test.duration, + currentRetry: test.currentRetry(), + speed: test.speed }; } + +JSONStream.description = 'newline delimited JSON events'; diff --git a/build/node_modules/mocha/lib/reporters/json.js b/build/node_modules/mocha/lib/reporters/json.js index 35b760e2..6194d874 100644 --- a/build/node_modules/mocha/lib/reporters/json.js +++ b/build/node_modules/mocha/lib/reporters/json.js @@ -1,8 +1,22 @@ +'use strict'; +/** + * @module JSON + */ /** * Module dependencies. */ var Base = require('./base'); +var fs = require('fs'); +var path = require('path'); +const createUnsupportedError = require('../errors').createUnsupportedError; +const utils = require('../utils'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_TEST_END = constants.EVENT_TEST_END; +var EVENT_RUN_END = constants.EVENT_RUN_END; /** * Expose `JSON`. @@ -11,37 +25,49 @@ var Base = require('./base'); exports = module.exports = JSONReporter; /** - * Initialize a new `JSON` reporter. + * Constructs a new `JSON` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class JSON + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function JSONReporter(runner) { - Base.call(this, runner); +function JSONReporter(runner, options = {}) { + Base.call(this, runner, options); var self = this; var tests = []; var pending = []; var failures = []; var passes = []; + var output; + + if (options.reporterOption && options.reporterOption.output) { + if (utils.isBrowser()) { + throw createUnsupportedError('file output not supported in browser'); + } + output = options.reporterOption.output; + } - runner.on('test end', function(test) { + runner.on(EVENT_TEST_END, function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on(EVENT_TEST_PASS, function (test) { passes.push(test); }); - runner.on('fail', function(test) { + runner.on(EVENT_TEST_FAIL, function (test) { failures.push(test); }); - runner.on('pending', function(test) { + runner.on(EVENT_TEST_PENDING, function (test) { pending.push(test); }); - runner.on('end', function() { + runner.once(EVENT_RUN_END, function () { var obj = { stats: self.stats, tests: tests.map(clean), @@ -52,7 +78,20 @@ function JSONReporter(runner) { runner.testResults = obj; - process.stdout.write(JSON.stringify(obj, null, 2)); + var json = JSON.stringify(obj, null, 2); + if (output) { + try { + fs.mkdirSync(path.dirname(output), {recursive: true}); + fs.writeFileSync(output, json); + } catch (err) { + console.error( + `${Base.symbols.err} [mocha] writing output to "${output}" failed: ${err.message}\n` + ); + process.stdout.write(json); + } + } else { + process.stdout.write(json); + } }); } @@ -60,30 +99,64 @@ function JSONReporter(runner) { * Return a plain-object representation of `test` * free of cyclic properties etc. * - * @api private + * @private * @param {Object} test * @return {Object} */ function clean(test) { + var err = test.err || {}; + if (err instanceof Error) { + err = errorJSON(err); + } + return { title: test.title, fullTitle: test.fullTitle(), + file: test.file, duration: test.duration, - err: errorJSON(test.err || {}) + currentRetry: test.currentRetry(), + speed: test.speed, + err: cleanCycles(err) }; } /** - * Transform `error` into a JSON object. + * Replaces any circular references inside `obj` with '[object Object]' + * + * @private + * @param {Object} obj + * @return {Object} + */ +function cleanCycles(obj) { + var cache = []; + return JSON.parse( + JSON.stringify(obj, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Instead of going in a circle, we'll print [object Object] + return '' + value; + } + cache.push(value); + } + + return value; + }) + ); +} + +/** + * Transform an Error object into a JSON object. * - * @api private + * @private * @param {Error} err * @return {Object} */ function errorJSON(err) { var res = {}; - Object.getOwnPropertyNames(err).forEach(function(key) { + Object.getOwnPropertyNames(err).forEach(function (key) { res[key] = err[key]; }, err); return res; } + +JSONReporter.description = 'single JSON object'; diff --git a/build/node_modules/mocha/lib/reporters/landing.js b/build/node_modules/mocha/lib/reporters/landing.js index b66b2000..4188c7cd 100644 --- a/build/node_modules/mocha/lib/reporters/landing.js +++ b/build/node_modules/mocha/lib/reporters/landing.js @@ -1,9 +1,19 @@ +'use strict'; +/** + * @module Landing + */ /** * Module dependencies. */ var Base = require('./base'); var inherits = require('../utils').inherits; +var constants = require('../runner').constants; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_END = constants.EVENT_TEST_END; +var STATE_FAILED = require('../runnable').constants.STATE_FAILED; + var cursor = Base.cursor; var color = Base.color; @@ -32,38 +42,42 @@ Base.colors['plane crash'] = 31; Base.colors.runway = 90; /** - * Initialize a new `Landing` reporter. + * Constructs a new `Landing` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Landing(runner) { - Base.call(this, runner); +function Landing(runner, options) { + Base.call(this, runner, options); var self = this; - var width = Base.window.width * .75 | 0; - var total = runner.total; + var width = (Base.window.width * 0.75) | 0; var stream = process.stdout; + var plane = color('plane', '✈'); var crashed = -1; var n = 0; + var total = 0; function runway() { var buf = Array(width).join('-'); return ' ' + color('runway', buf); } - runner.on('start', function() { + runner.on(EVENT_RUN_BEGIN, function () { stream.write('\n\n\n '); cursor.hide(); }); - runner.on('test end', function(test) { + runner.on(EVENT_TEST_END, function (test) { // check if the plane crashed - var col = crashed === -1 ? width * ++n / total | 0 : crashed; - + var col = crashed === -1 ? ((width * ++n) / ++total) | 0 : crashed; // show the crash - if (test.state === 'failed') { + if (test.state === STATE_FAILED) { plane = color('plane crash', '✈'); crashed = col; } @@ -79,14 +93,24 @@ function Landing(runner) { stream.write('\u001b[0m'); }); - runner.on('end', function() { + runner.once(EVENT_RUN_END, function () { cursor.show(); - console.log(); + process.stdout.write('\n'); self.epilogue(); }); + + // if cursor is hidden when we ctrl-C, then it will remain hidden unless... + process.once('SIGINT', function () { + cursor.show(); + process.nextTick(function () { + process.kill(process.pid, 'SIGINT'); + }); + }); } /** * Inherit from `Base.prototype`. */ inherits(Landing, Base); + +Landing.description = 'Unicode landing strip'; diff --git a/build/node_modules/mocha/lib/reporters/list.js b/build/node_modules/mocha/lib/reporters/list.js index 0e5f910d..aebdd65e 100644 --- a/build/node_modules/mocha/lib/reporters/list.js +++ b/build/node_modules/mocha/lib/reporters/list.js @@ -1,9 +1,20 @@ +'use strict'; +/** + * @module List + */ /** * Module dependencies. */ var Base = require('./base'); var inherits = require('../utils').inherits; +var constants = require('../runner').constants; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_BEGIN = constants.EVENT_TEST_BEGIN; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; var color = Base.color; var cursor = Base.cursor; @@ -14,48 +25,54 @@ var cursor = Base.cursor; exports = module.exports = List; /** - * Initialize a new `List` test reporter. + * Constructs a new `List` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function List(runner) { - Base.call(this, runner); +function List(runner, options) { + Base.call(this, runner, options); var self = this; var n = 0; - runner.on('start', function() { - console.log(); + runner.on(EVENT_RUN_BEGIN, function () { + Base.consoleLog(); }); - runner.on('test', function(test) { + runner.on(EVENT_TEST_BEGIN, function (test) { process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); }); - runner.on('pending', function(test) { - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); + runner.on(EVENT_TEST_PENDING, function (test) { + var fmt = color('checkmark', ' -') + color('pending', ' %s'); + Base.consoleLog(fmt, test.fullTitle()); }); - runner.on('pass', function(test) { - var fmt = color('checkmark', ' ' + Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); + runner.on(EVENT_TEST_PASS, function (test) { + var fmt = + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s: ') + + color(test.speed, '%dms'); cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); + Base.consoleLog(fmt, test.fullTitle(), test.duration); }); - runner.on('fail', function(test) { + runner.on(EVENT_TEST_FAIL, function (test) { cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); + Base.consoleLog(color('fail', ' %d) %s'), ++n, test.fullTitle()); }); - runner.on('end', self.epilogue.bind(self)); + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); } /** * Inherit from `Base.prototype`. */ inherits(List, Base); + +List.description = 'like "spec" reporter but flat'; diff --git a/build/node_modules/mocha/lib/reporters/markdown.js b/build/node_modules/mocha/lib/reporters/markdown.js index 88b1f4db..f65726fc 100644 --- a/build/node_modules/mocha/lib/reporters/markdown.js +++ b/build/node_modules/mocha/lib/reporters/markdown.js @@ -1,9 +1,18 @@ +'use strict'; +/** + * @module Markdown + */ /** * Module dependencies. */ var Base = require('./base'); var utils = require('../utils'); +var constants = require('../runner').constants; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = constants.EVENT_SUITE_END; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; /** * Constants @@ -18,13 +27,17 @@ var SUITE_PREFIX = '$'; exports = module.exports = Markdown; /** - * Initialize a new `Markdown` reporter. + * Constructs a new `Markdown` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Markdown(runner) { - Base.call(this, runner); +function Markdown(runner, options) { + Base.call(this, runner, options); var level = 0; var buf = ''; @@ -37,8 +50,8 @@ function Markdown(runner) { var ret = obj; var key = SUITE_PREFIX + suite.title; - obj = obj[key] = obj[key] || { suite: suite }; - suite.suites.forEach(function(suite) { + obj = obj[key] = obj[key] || {suite: suite}; + suite.suites.forEach(function (suite) { mapTOC(suite, obj); }); @@ -70,28 +83,30 @@ function Markdown(runner) { generateTOC(runner.suite); - runner.on('suite', function(suite) { + runner.on(EVENT_SUITE_BEGIN, function (suite) { ++level; var slug = utils.slug(suite.fullTitle()); buf += '' + '\n'; buf += title(suite.title) + '\n'; }); - runner.on('suite end', function() { + runner.on(EVENT_SUITE_END, function () { --level; }); - runner.on('pass', function(test) { - var code = utils.clean(test.fn.toString()); + runner.on(EVENT_TEST_PASS, function (test) { + var code = utils.clean(test.body); buf += test.title + '.\n'; buf += '\n```js\n'; buf += code + '\n'; buf += '```\n\n'; }); - runner.on('end', function() { + runner.once(EVENT_RUN_END, function () { process.stdout.write('# TOC\n'); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); }); } + +Markdown.description = 'GitHub Flavored Markdown'; diff --git a/build/node_modules/mocha/lib/reporters/min.js b/build/node_modules/mocha/lib/reporters/min.js index 2b48212c..4de98e6f 100644 --- a/build/node_modules/mocha/lib/reporters/min.js +++ b/build/node_modules/mocha/lib/reporters/min.js @@ -1,9 +1,16 @@ +'use strict'; +/** + * @module Min + */ /** * Module dependencies. */ var Base = require('./base'); var inherits = require('../utils').inherits; +var constants = require('../runner').constants; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; /** * Expose `Min`. @@ -12,25 +19,34 @@ var inherits = require('../utils').inherits; exports = module.exports = Min; /** - * Initialize a new `Min` minimal test reporter (best used with --watch). + * Constructs a new `Min` reporter instance. * - * @api public - * @param {Runner} runner + * @description + * This minimal test reporter is best used with '--watch'. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Min(runner) { - Base.call(this, runner); +function Min(runner, options) { + Base.call(this, runner, options); - runner.on('start', function() { + runner.on(EVENT_RUN_BEGIN, function () { // clear screen process.stdout.write('\u001b[2J'); // set cursor position process.stdout.write('\u001b[1;3H'); }); - runner.on('end', this.epilogue.bind(this)); + runner.once(EVENT_RUN_END, this.epilogue.bind(this)); } /** * Inherit from `Base.prototype`. */ inherits(Min, Base); + +Min.description = 'essentially just a summary'; diff --git a/build/node_modules/mocha/lib/reporters/nyan.js b/build/node_modules/mocha/lib/reporters/nyan.js index ba1b0509..e7b3fa8f 100644 --- a/build/node_modules/mocha/lib/reporters/nyan.js +++ b/build/node_modules/mocha/lib/reporters/nyan.js @@ -1,9 +1,19 @@ +'use strict'; +/** + * @module Nyan + */ /** * Module dependencies. */ var Base = require('./base'); +var constants = require('../runner').constants; var inherits = require('../utils').inherits; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; /** * Expose `Dot`. @@ -12,18 +22,21 @@ var inherits = require('../utils').inherits; exports = module.exports = NyanCat; /** - * Initialize a new `Dot` matrix test reporter. + * Constructs a new `Nyan` reporter instance. * - * @param {Runner} runner - * @api public + * @public + * @class Nyan + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ - -function NyanCat(runner) { - Base.call(this, runner); +function NyanCat(runner, options) { + Base.call(this, runner, options); var self = this; - var width = Base.window.width * .75 | 0; - var nyanCatWidth = this.nyanCatWidth = 11; + var width = (Base.window.width * 0.75) | 0; + var nyanCatWidth = (this.nyanCatWidth = 11); this.colorIndex = 0; this.numberOfLines = 4; @@ -31,26 +44,26 @@ function NyanCat(runner) { this.scoreboardWidth = 5; this.tick = 0; this.trajectories = [[], [], [], []]; - this.trajectoryWidthMax = (width - nyanCatWidth); + this.trajectoryWidthMax = width - nyanCatWidth; - runner.on('start', function() { + runner.on(EVENT_RUN_BEGIN, function () { Base.cursor.hide(); self.draw(); }); - runner.on('pending', function() { + runner.on(EVENT_TEST_PENDING, function () { self.draw(); }); - runner.on('pass', function() { + runner.on(EVENT_TEST_PASS, function () { self.draw(); }); - runner.on('fail', function() { + runner.on(EVENT_TEST_FAIL, function () { self.draw(); }); - runner.on('end', function() { + runner.once(EVENT_RUN_END, function () { Base.cursor.show(); for (var i = 0; i < self.numberOfLines; i++) { write('\n'); @@ -67,10 +80,10 @@ inherits(NyanCat, Base); /** * Draw the nyan cat * - * @api private + * @private */ -NyanCat.prototype.draw = function() { +NyanCat.prototype.draw = function () { this.appendRainbow(); this.drawScoreboard(); this.drawRainbow(); @@ -82,10 +95,10 @@ NyanCat.prototype.draw = function() { * Draw the "scoreboard" showing the number * of passes, failures and pending tests. * - * @api private + * @private */ -NyanCat.prototype.drawScoreboard = function() { +NyanCat.prototype.drawScoreboard = function () { var stats = this.stats; function draw(type, n) { @@ -105,10 +118,10 @@ NyanCat.prototype.drawScoreboard = function() { /** * Append the rainbow. * - * @api private + * @private */ -NyanCat.prototype.appendRainbow = function() { +NyanCat.prototype.appendRainbow = function () { var segment = this.tick ? '_' : '-'; var rainbowified = this.rainbowify(segment); @@ -124,13 +137,13 @@ NyanCat.prototype.appendRainbow = function() { /** * Draw the rainbow. * - * @api private + * @private */ -NyanCat.prototype.drawRainbow = function() { +NyanCat.prototype.drawRainbow = function () { var self = this; - this.trajectories.forEach(function(line) { + this.trajectories.forEach(function (line) { write('\u001b[' + self.scoreboardWidth + 'C'); write(line.join('')); write('\n'); @@ -142,9 +155,9 @@ NyanCat.prototype.drawRainbow = function() { /** * Draw the nyan cat * - * @api private + * @private */ -NyanCat.prototype.drawNyanCat = function() { +NyanCat.prototype.drawNyanCat = function () { var self = this; var startWidth = this.scoreboardWidth + this.trajectories[0].length; var dist = '\u001b[' + startWidth + 'C'; @@ -176,11 +189,11 @@ NyanCat.prototype.drawNyanCat = function() { /** * Draw nyan cat face. * - * @api private + * @private * @return {string} */ -NyanCat.prototype.face = function() { +NyanCat.prototype.face = function () { var stats = this.stats; if (stats.failures) { return '( x .x)'; @@ -195,37 +208,37 @@ NyanCat.prototype.face = function() { /** * Move cursor up `n`. * - * @api private + * @private * @param {number} n */ -NyanCat.prototype.cursorUp = function(n) { +NyanCat.prototype.cursorUp = function (n) { write('\u001b[' + n + 'A'); }; /** * Move cursor down `n`. * - * @api private + * @private * @param {number} n */ -NyanCat.prototype.cursorDown = function(n) { +NyanCat.prototype.cursorDown = function (n) { write('\u001b[' + n + 'B'); }; /** * Generate rainbow colors. * - * @api private + * @private * @return {Array} */ -NyanCat.prototype.generateColors = function() { +NyanCat.prototype.generateColors = function () { var colors = []; - for (var i = 0; i < (6 * 7); i++) { + for (var i = 0; i < 6 * 7; i++) { var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); + var n = i * (1.0 / 6); var r = Math.floor(3 * Math.sin(n) + 3); var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); @@ -238,11 +251,11 @@ NyanCat.prototype.generateColors = function() { /** * Apply rainbow to the given `str`. * - * @api private + * @private * @param {string} str * @return {string} */ -NyanCat.prototype.rainbowify = function(str) { +NyanCat.prototype.rainbowify = function (str) { if (!Base.useColors) { return str; } @@ -259,3 +272,5 @@ NyanCat.prototype.rainbowify = function(str) { function write(string) { process.stdout.write(string); } + +NyanCat.description = '"nyan cat"'; diff --git a/build/node_modules/mocha/lib/reporters/progress.js b/build/node_modules/mocha/lib/reporters/progress.js index 5349ca89..4f6d8794 100644 --- a/build/node_modules/mocha/lib/reporters/progress.js +++ b/build/node_modules/mocha/lib/reporters/progress.js @@ -1,8 +1,16 @@ +'use strict'; +/** + * @module Progress + */ /** * Module dependencies. */ var Base = require('./base'); +var constants = require('../runner').constants; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_TEST_END = constants.EVENT_TEST_END; +var EVENT_RUN_END = constants.EVENT_RUN_END; var inherits = require('../utils').inherits; var color = Base.color; var cursor = Base.cursor; @@ -20,41 +28,46 @@ exports = module.exports = Progress; Base.colors.progress = 90; /** - * Initialize a new `Progress` bar test reporter. + * Constructs a new `Progress` reporter instance. * - * @api public - * @param {Runner} runner - * @param {Object} options + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ function Progress(runner, options) { - Base.call(this, runner); + Base.call(this, runner, options); var self = this; - var width = Base.window.width * .50 | 0; + var width = (Base.window.width * 0.5) | 0; var total = runner.total; var complete = 0; var lastN = -1; // default chars options = options || {}; - options.open = options.open || '['; - options.complete = options.complete || '▬'; - options.incomplete = options.incomplete || Base.symbols.dot; - options.close = options.close || ']'; - options.verbose = false; + var reporterOptions = options.reporterOptions || {}; + + options.open = reporterOptions.open || '['; + options.complete = reporterOptions.complete || '▬'; + options.incomplete = reporterOptions.incomplete || Base.symbols.dot; + options.close = reporterOptions.close || ']'; + options.verbose = reporterOptions.verbose || false; // tests started - runner.on('start', function() { - console.log(); + runner.on(EVENT_RUN_BEGIN, function () { + process.stdout.write('\n'); cursor.hide(); }); // tests complete - runner.on('test end', function() { + runner.on(EVENT_TEST_END, function () { complete++; var percent = complete / total; - var n = width * percent | 0; + var n = (width * percent) | 0; var i = width - n; if (n === lastN && !options.verbose) { @@ -76,9 +89,9 @@ function Progress(runner, options) { // tests are complete, output some stats // and the failures if any - runner.on('end', function() { + runner.once(EVENT_RUN_END, function () { cursor.show(); - console.log(); + process.stdout.write('\n'); self.epilogue(); }); } @@ -87,3 +100,5 @@ function Progress(runner, options) { * Inherit from `Base.prototype`. */ inherits(Progress, Base); + +Progress.description = 'a progress bar'; diff --git a/build/node_modules/mocha/lib/reporters/spec.js b/build/node_modules/mocha/lib/reporters/spec.js index 77a73c4f..8497249f 100644 --- a/build/node_modules/mocha/lib/reporters/spec.js +++ b/build/node_modules/mocha/lib/reporters/spec.js @@ -1,11 +1,22 @@ +'use strict'; +/** + * @module Spec + */ /** * Module dependencies. */ var Base = require('./base'); +var constants = require('../runner').constants; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; +var EVENT_SUITE_END = constants.EVENT_SUITE_END; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; var inherits = require('../utils').inherits; var color = Base.color; -var cursor = Base.cursor; /** * Expose `Spec`. @@ -14,13 +25,17 @@ var cursor = Base.cursor; exports = module.exports = Spec; /** - * Initialize a new `Spec` test reporter. + * Constructs a new `Spec` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function Spec(runner) { - Base.call(this, runner); +function Spec(runner, options) { + Base.call(this, runner, options); var self = this; var indents = 0; @@ -30,54 +45,55 @@ function Spec(runner) { return Array(indents).join(' '); } - runner.on('start', function() { - console.log(); + runner.on(EVENT_RUN_BEGIN, function () { + Base.consoleLog(); }); - runner.on('suite', function(suite) { + runner.on(EVENT_SUITE_BEGIN, function (suite) { ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); + Base.consoleLog(color('suite', '%s%s'), indent(), suite.title); }); - runner.on('suite end', function() { + runner.on(EVENT_SUITE_END, function () { --indents; if (indents === 1) { - console.log(); + Base.consoleLog(); } }); - runner.on('pending', function(test) { + runner.on(EVENT_TEST_PENDING, function (test) { var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); + Base.consoleLog(fmt, test.title); }); - runner.on('pass', function(test) { + runner.on(EVENT_TEST_PASS, function (test) { var fmt; if (test.speed === 'fast') { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s'); - cursor.CR(); - console.log(fmt, test.title); + fmt = + indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s'); + Base.consoleLog(fmt, test.title); } else { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s') - + color(test.speed, ' (%dms)'); - cursor.CR(); - console.log(fmt, test.title, test.duration); + fmt = + indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); + Base.consoleLog(fmt, test.title, test.duration); } }); - runner.on('fail', function(test) { - cursor.CR(); - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); + runner.on(EVENT_TEST_FAIL, function (test) { + Base.consoleLog(indent() + color('fail', ' %d) %s'), ++n, test.title); }); - runner.on('end', self.epilogue.bind(self)); + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); } /** * Inherit from `Base.prototype`. */ inherits(Spec, Base); + +Spec.description = 'hierarchical & verbose [default]'; diff --git a/build/node_modules/mocha/lib/reporters/tap.js b/build/node_modules/mocha/lib/reporters/tap.js index d9b1b953..37fa8b57 100644 --- a/build/node_modules/mocha/lib/reporters/tap.js +++ b/build/node_modules/mocha/lib/reporters/tap.js @@ -1,8 +1,22 @@ +'use strict'; +/** + * @module TAP + */ /** * Module dependencies. */ +var util = require('util'); var Base = require('./base'); +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var EVENT_TEST_END = constants.EVENT_TEST_END; +var inherits = require('../utils').inherits; +var sprintf = util.format; /** * Expose `TAP`. @@ -11,58 +25,269 @@ var Base = require('./base'); exports = module.exports = TAP; /** - * Initialize a new `TAP` reporter. + * Constructs a new `TAP` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ -function TAP(runner) { - Base.call(this, runner); +function TAP(runner, options) { + Base.call(this, runner, options); + var self = this; var n = 1; - var passes = 0; - var failures = 0; - runner.on('start', function() { - var total = runner.grepTotal(runner.suite); - console.log('%d..%d', 1, total); + var tapVersion = '12'; + if (options && options.reporterOptions) { + if (options.reporterOptions.tapVersion) { + tapVersion = options.reporterOptions.tapVersion.toString(); + } + } + + this._producer = createProducer(tapVersion); + + runner.once(EVENT_RUN_BEGIN, function () { + self._producer.writeVersion(); }); - runner.on('test end', function() { + runner.on(EVENT_TEST_END, function () { ++n; }); - runner.on('pending', function(test) { - console.log('ok %d %s # SKIP -', n, title(test)); + runner.on(EVENT_TEST_PENDING, function (test) { + self._producer.writePending(n, test); }); - runner.on('pass', function(test) { - passes++; - console.log('ok %d %s', n, title(test)); + runner.on(EVENT_TEST_PASS, function (test) { + self._producer.writePass(n, test); }); - runner.on('fail', function(test, err) { - failures++; - console.log('not ok %d %s', n, title(test)); - if (err.stack) { - console.log(err.stack.replace(/^/gm, ' ')); - } + runner.on(EVENT_TEST_FAIL, function (test, err) { + self._producer.writeFail(n, test, err); }); - runner.on('end', function() { - console.log('# tests ' + (passes + failures)); - console.log('# pass ' + passes); - console.log('# fail ' + failures); + runner.once(EVENT_RUN_END, function () { + self._producer.writeEpilogue(runner.stats); }); } /** - * Return a TAP-safe title of `test` + * Inherit from `Base.prototype`. + */ +inherits(TAP, Base); + +/** + * Returns a TAP-safe title of `test`. * - * @api private - * @param {Object} test - * @return {String} + * @private + * @param {Test} test - Test instance. + * @return {String} title with any hash character removed */ function title(test) { return test.fullTitle().replace(/#/g, ''); } + +/** + * Writes newline-terminated formatted string to reporter output stream. + * + * @private + * @param {string} format - `printf`-like format string + * @param {...*} [varArgs] - Format string arguments + */ +function println(format, varArgs) { + var vargs = Array.from(arguments); + vargs[0] += '\n'; + process.stdout.write(sprintf.apply(null, vargs)); +} + +/** + * Returns a `tapVersion`-appropriate TAP producer instance, if possible. + * + * @private + * @param {string} tapVersion - Version of TAP specification to produce. + * @returns {TAPProducer} specification-appropriate instance + * @throws {Error} if specification version has no associated producer. + */ +function createProducer(tapVersion) { + var producers = { + 12: new TAP12Producer(), + 13: new TAP13Producer() + }; + var producer = producers[tapVersion]; + + if (!producer) { + throw new Error( + 'invalid or unsupported TAP version: ' + JSON.stringify(tapVersion) + ); + } + + return producer; +} + +/** + * @summary + * Constructs a new TAPProducer. + * + * @description + * Only to be used as an abstract base class. + * + * @private + * @constructor + */ +function TAPProducer() {} + +/** + * Writes the TAP version to reporter output stream. + * + * @abstract + */ +TAPProducer.prototype.writeVersion = function () {}; + +/** + * Writes the plan to reporter output stream. + * + * @abstract + * @param {number} ntests - Number of tests that are planned to run. + */ +TAPProducer.prototype.writePlan = function (ntests) { + println('%d..%d', 1, ntests); +}; + +/** + * Writes that test passed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that passed. + * @param {Test} test - Instance containing test information. + */ +TAPProducer.prototype.writePass = function (n, test) { + println('ok %d %s', n, title(test)); +}; + +/** + * Writes that test was skipped to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that was skipped. + * @param {Test} test - Instance containing test information. + */ +TAPProducer.prototype.writePending = function (n, test) { + println('ok %d %s # SKIP -', n, title(test)); +}; + +/** + * Writes that test failed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that failed. + * @param {Test} test - Instance containing test information. + * @param {Error} err - Reason the test failed. + */ +TAPProducer.prototype.writeFail = function (n, test, err) { + println('not ok %d %s', n, title(test)); +}; + +/** + * Writes the summary epilogue to reporter output stream. + * + * @abstract + * @param {Object} stats - Object containing run statistics. + */ +TAPProducer.prototype.writeEpilogue = function (stats) { + // :TBD: Why is this not counting pending tests? + println('# tests ' + (stats.passes + stats.failures)); + println('# pass ' + stats.passes); + // :TBD: Why are we not showing pending results? + println('# fail ' + stats.failures); + this.writePlan(stats.passes + stats.failures + stats.pending); +}; + +/** + * @summary + * Constructs a new TAP12Producer. + * + * @description + * Produces output conforming to the TAP12 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-specification.html|Specification} + */ +function TAP12Producer() { + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + if (err.message) { + println(err.message.replace(/^/gm, ' ')); + } + if (err.stack) { + println(err.stack.replace(/^/gm, ' ')); + } + }; +} + +/** + * Inherit from `TAPProducer.prototype`. + */ +inherits(TAP12Producer, TAPProducer); + +/** + * @summary + * Constructs a new TAP13Producer. + * + * @description + * Produces output conforming to the TAP13 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-version-13-specification.html|Specification} + */ +function TAP13Producer() { + /** + * Writes the TAP version to reporter output stream. + * @override + */ + this.writeVersion = function () { + println('TAP version 13'); + }; + + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + var emitYamlBlock = err.message != null || err.stack != null; + if (emitYamlBlock) { + println(indent(1) + '---'); + if (err.message) { + println(indent(2) + 'message: |-'); + println(err.message.replace(/^/gm, indent(3))); + } + if (err.stack) { + println(indent(2) + 'stack: |-'); + println(err.stack.replace(/^/gm, indent(3))); + } + println(indent(1) + '...'); + } + }; + + function indent(level) { + return Array(level + 1).join(' '); + } +} + +/** + * Inherit from `TAPProducer.prototype`. + */ +inherits(TAP13Producer, TAPProducer); + +TAP.description = 'TAP-compatible output'; diff --git a/build/node_modules/mocha/lib/reporters/templates/coverage.jade b/build/node_modules/mocha/lib/reporters/templates/coverage.jade deleted file mode 100644 index edd59d88..00000000 --- a/build/node_modules/mocha/lib/reporters/templates/coverage.jade +++ /dev/null @@ -1,51 +0,0 @@ -doctype html -html - head - title Coverage - meta(charset='utf-8') - include script.html - include style.html - body - #coverage - h1#overview Coverage - include menu - - #stats(class=coverageClass(cov.coverage)) - .percentage #{cov.coverage | 0}% - .sloc= cov.sloc - .hits= cov.hits - .misses= cov.misses - - #files - for file in cov.files - .file - h2(id=file.filename)= file.filename - #stats(class=coverageClass(file.coverage)) - .percentage #{file.coverage | 0}% - .sloc= file.sloc - .hits= file.hits - .misses= file.misses - - table#source - thead - tr - th Line - th Hits - th Source - tbody - for line, number in file.source - if line.coverage > 0 - tr.hit - td.line= number - td.hits= line.coverage - td.source= line.source - else if 0 === line.coverage - tr.miss - td.line= number - td.hits 0 - td.source= line.source - else - tr - td.line= number - td.hits - td.source= line.source || ' ' diff --git a/build/node_modules/mocha/lib/reporters/templates/menu.jade b/build/node_modules/mocha/lib/reporters/templates/menu.jade deleted file mode 100644 index c682e3f0..00000000 --- a/build/node_modules/mocha/lib/reporters/templates/menu.jade +++ /dev/null @@ -1,13 +0,0 @@ -#menu - li - a(href='#overview') overview - for file in cov.files - li - span.cov(class=coverageClass(file.coverage)) #{file.coverage | 0} - a(href='##{file.filename}') - segments = file.filename.split('/') - basename = segments.pop() - if segments.length - span.dirname= segments.join('/') + '/' - span.basename= basename - a#logo(href='http://mochajs.org/') m diff --git a/build/node_modules/mocha/lib/reporters/templates/script.html b/build/node_modules/mocha/lib/reporters/templates/script.html deleted file mode 100644 index 073cf793..00000000 --- a/build/node_modules/mocha/lib/reporters/templates/script.html +++ /dev/null @@ -1,34 +0,0 @@ - diff --git a/build/node_modules/mocha/lib/reporters/templates/style.html b/build/node_modules/mocha/lib/reporters/templates/style.html deleted file mode 100644 index 4c9c37cf..00000000 --- a/build/node_modules/mocha/lib/reporters/templates/style.html +++ /dev/null @@ -1,324 +0,0 @@ - diff --git a/build/node_modules/mocha/lib/reporters/xunit.js b/build/node_modules/mocha/lib/reporters/xunit.js index d9f58b9f..ec788c5d 100644 --- a/build/node_modules/mocha/lib/reporters/xunit.js +++ b/build/node_modules/mocha/lib/reporters/xunit.js @@ -1,24 +1,30 @@ +'use strict'; +/** + * @module XUnit + */ /** * Module dependencies. */ var Base = require('./base'); var utils = require('../utils'); -var inherits = utils.inherits; var fs = require('fs'); +var path = require('path'); +var errors = require('../errors'); +var createUnsupportedError = errors.createUnsupportedError; +var constants = require('../runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var STATE_FAILED = require('../runnable').constants.STATE_FAILED; +var inherits = utils.inherits; var escape = utils.escape; /** * Save timer references to avoid Sinon interfering (see GH-237). */ - -/* eslint-disable no-unused-vars, no-native-reassign */ var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ /** * Expose `XUnit`. @@ -27,49 +33,77 @@ var clearInterval = global.clearInterval; exports = module.exports = XUnit; /** - * Initialize a new `XUnit` reporter. + * Constructs a new `XUnit` reporter instance. * - * @api public - * @param {Runner} runner + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options */ function XUnit(runner, options) { - Base.call(this, runner); + Base.call(this, runner, options); var stats = this.stats; var tests = []; var self = this; - if (options.reporterOptions && options.reporterOptions.output) { - if (!fs.createWriteStream) { - throw new Error('file output not supported in browser'); + // the name of the test suite, as it will appear in the resulting XML file + var suiteName; + + // the default name of the test suite if none is provided + var DEFAULT_SUITE_NAME = 'Mocha Tests'; + + if (options && options.reporterOptions) { + if (options.reporterOptions.output) { + if (!fs.createWriteStream) { + throw createUnsupportedError('file output not supported in browser'); + } + + fs.mkdirSync(path.dirname(options.reporterOptions.output), { + recursive: true + }); + self.fileStream = fs.createWriteStream(options.reporterOptions.output); } - self.fileStream = fs.createWriteStream(options.reporterOptions.output); + + // get the suite name from the reporter options (if provided) + suiteName = options.reporterOptions.suiteName; } - runner.on('pending', function(test) { + // fall back to the default suite name + suiteName = suiteName || DEFAULT_SUITE_NAME; + + runner.on(EVENT_TEST_PENDING, function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on(EVENT_TEST_PASS, function (test) { tests.push(test); }); - runner.on('fail', function(test) { + runner.on(EVENT_TEST_FAIL, function (test) { tests.push(test); }); - runner.on('end', function() { - self.write(tag('testsuite', { - name: 'Mocha Tests', - tests: stats.tests, - failures: stats.failures, - errors: stats.failures, - skipped: stats.tests - stats.failures - stats.passes, - timestamp: (new Date()).toUTCString(), - time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(function(t) { + runner.once(EVENT_RUN_END, function () { + self.write( + tag( + 'testsuite', + { + name: suiteName, + tests: stats.tests, + failures: 0, + errors: stats.failures, + skipped: stats.tests - stats.failures - stats.passes, + timestamp: new Date().toUTCString(), + time: stats.duration / 1000 || 0 + }, + false + ) + ); + + tests.forEach(function (t) { self.test(t); }); @@ -88,9 +122,9 @@ inherits(XUnit, Base); * @param failures * @param {Function} fn */ -XUnit.prototype.done = function(failures, fn) { +XUnit.prototype.done = function (failures, fn) { if (this.fileStream) { - this.fileStream.end(function() { + this.fileStream.end(function () { fn(failures); }); } else { @@ -103,11 +137,13 @@ XUnit.prototype.done = function(failures, fn) { * * @param {string} line */ -XUnit.prototype.write = function(line) { +XUnit.prototype.write = function (line) { if (this.fileStream) { this.fileStream.write(line + '\n'); + } else if (typeof process === 'object' && process.stdout) { + process.stdout.write(line + '\n'); } else { - console.log(line); + Base.consoleLog(line); } }; @@ -116,17 +152,35 @@ XUnit.prototype.write = function(line) { * * @param {Test} test */ -XUnit.prototype.test = function(test) { +XUnit.prototype.test = function (test) { + Base.useColors = false; + var attrs = { classname: test.parent.fullTitle(), name: test.title, - time: (test.duration / 1000) || 0 + time: test.duration / 1000 || 0 }; - if (test.state === 'failed') { + if (test.state === STATE_FAILED) { var err = test.err; - this.write(tag('testcase', attrs, false, tag('failure', {}, false, cdata(escape(err.message) + '\n' + err.stack)))); - } else if (test.pending) { + var diff = + !Base.hideDiff && Base.showDiff(err) + ? '\n' + Base.generateDiff(err.actual, err.expected) + : ''; + this.write( + tag( + 'testcase', + attrs, + false, + tag( + 'failure', + {}, + false, + escape(err.message) + escape(diff) + '\n' + escape(err.stack) + ) + ) + ); + } else if (test.isPending()) { this.write(tag('testcase', attrs, false, tag('skipped', {}, true))); } else { this.write(tag('testcase', attrs, true)); @@ -160,10 +214,4 @@ function tag(name, attrs, close, content) { return tag; } -/** - * Return cdata escaped CDATA `str`. - */ - -function cdata(str) { - return ''; -} +XUnit.description = 'XUnit-compatible XML output'; diff --git a/build/node_modules/mocha/lib/runnable.js b/build/node_modules/mocha/lib/runnable.js index 07501785..fef49410 100644 --- a/build/node_modules/mocha/lib/runnable.js +++ b/build/node_modules/mocha/lib/runnable.js @@ -1,83 +1,112 @@ -/** - * Module dependencies. - */ +'use strict'; var EventEmitter = require('events').EventEmitter; var Pending = require('./pending'); var debug = require('debug')('mocha:runnable'); -var milliseconds = require('./ms'); +var milliseconds = require('ms'); var utils = require('./utils'); -var inherits = utils.inherits; +const { + createInvalidExceptionError, + createMultipleDoneError, + createTimeoutError +} = require('./errors'); /** * Save timer references to avoid Sinon interfering (see GH-237). + * @private */ - -/* eslint-disable no-unused-vars, no-native-reassign */ var Date = global.Date; var setTimeout = global.setTimeout; -var setInterval = global.setInterval; var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ - -/** - * Object#toString(). - */ - var toString = Object.prototype.toString; -/** - * Expose `Runnable`. - */ - module.exports = Runnable; /** * Initialize a new `Runnable` with the given `title` and callback `fn`. * + * @class + * @extends external:EventEmitter + * @public * @param {String} title * @param {Function} fn - * @api private - * @param {string} title - * @param {Function} fn */ function Runnable(title, fn) { this.title = title; this.fn = fn; + this.body = (fn || '').toString(); this.async = fn && fn.length; this.sync = !this.async; this._timeout = 2000; this._slow = 75; - this._enableTimeouts = true; - this.timedOut = false; - this._trace = new Error('done() called multiple times'); + this._retries = -1; + utils.assignNewMochaID(this); + Object.defineProperty(this, 'id', { + get() { + return utils.getMochaID(this); + } + }); + this.reset(); } /** * Inherit from `EventEmitter.prototype`. */ -inherits(Runnable, EventEmitter); +utils.inherits(Runnable, EventEmitter); /** - * Set & get timeout `ms`. + * Resets the state initially or for a next run. + */ +Runnable.prototype.reset = function () { + this.timedOut = false; + this._currentRetry = 0; + this.pending = false; + delete this.state; + delete this.err; +}; + +/** + * Get current timeout value in msecs. * - * @api private - * @param {number|string} ms - * @return {Runnable|number} ms or Runnable instance. + * @private + * @returns {number} current timeout threshold value */ -Runnable.prototype.timeout = function(ms) { +/** + * @summary + * Set timeout threshold value (msecs). + * + * @description + * A string argument can use shorthand (e.g., "2s") and will be converted. + * The value will be clamped to range [0, 2^31-1]. + * If clamped value matches either range endpoint, timeouts will be disabled. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value} + * @param {number|string} ms - Timeout threshold value. + * @returns {Runnable} this + * @chainable + */ +Runnable.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } - if (ms === 0) { - this._enableTimeouts = false; - } if (typeof ms === 'string') { ms = milliseconds(ms); } - debug('timeout %d', ms); - this._timeout = ms; + + // Clamp to range + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = utils.clamp(ms, range); + + // see #1652 for reasoning + if (ms === range[0] || ms === range[1]) { + this._timeout = 0; + } else { + this._timeout = ms; + } + debug('timeout %d', this._timeout); + if (this.timer) { this.resetTimeout(); } @@ -85,119 +114,150 @@ Runnable.prototype.timeout = function(ms) { }; /** - * Set & get slow `ms`. + * Set or get slow `ms`. * - * @api private + * @private * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.slow = function(ms) { - if (!arguments.length) { +Runnable.prototype.slow = function (ms) { + if (!arguments.length || typeof ms === 'undefined') { return this._slow; } if (typeof ms === 'string') { ms = milliseconds(ms); } - debug('timeout %d', ms); + debug('slow %d', ms); this._slow = ms; return this; }; /** - * Set and get whether timeout is `enabled`. + * Halt and mark as pending. * - * @api private - * @param {boolean} enabled - * @return {Runnable|boolean} enabled or Runnable instance. + * @memberof Mocha.Runnable + * @public */ -Runnable.prototype.enableTimeouts = function(enabled) { +Runnable.prototype.skip = function () { + this.pending = true; + throw new Pending('sync skip; aborting execution'); +}; + +/** + * Check if this runnable or its parent suite is marked as pending. + * + * @private + */ +Runnable.prototype.isPending = function () { + return this.pending || (this.parent && this.parent.isPending()); +}; + +/** + * Return `true` if this Runnable has failed. + * @return {boolean} + * @private + */ +Runnable.prototype.isFailed = function () { + return !this.isPending() && this.state === constants.STATE_FAILED; +}; + +/** + * Return `true` if this Runnable has passed. + * @return {boolean} + * @private + */ +Runnable.prototype.isPassed = function () { + return !this.isPending() && this.state === constants.STATE_PASSED; +}; + +/** + * Set or get number of retries. + * + * @private + */ +Runnable.prototype.retries = function (n) { if (!arguments.length) { - return this._enableTimeouts; + return this._retries; } - debug('enableTimeouts %s', enabled); - this._enableTimeouts = enabled; - return this; + this._retries = n; }; /** - * Halt and mark as pending. + * Set or get current retry * - * @api private + * @private */ -Runnable.prototype.skip = function() { - throw new Pending(); +Runnable.prototype.currentRetry = function (n) { + if (!arguments.length) { + return this._currentRetry; + } + this._currentRetry = n; }; /** * Return the full title generated by recursively concatenating the parent's * full title. * - * @api public + * @memberof Mocha.Runnable + * @public * @return {string} */ -Runnable.prototype.fullTitle = function() { - return this.parent.fullTitle() + ' ' + this.title; +Runnable.prototype.fullTitle = function () { + return this.titlePath().join(' '); }; /** - * Clear the timeout. + * Return the title path generated by concatenating the parent's title path with the title. * - * @api private + * @memberof Mocha.Runnable + * @public + * @return {string} */ -Runnable.prototype.clearTimeout = function() { - clearTimeout(this.timer); +Runnable.prototype.titlePath = function () { + return this.parent.titlePath().concat([this.title]); }; /** - * Inspect the runnable void of private properties. + * Clear the timeout. * - * @api private - * @return {string} + * @private */ -Runnable.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { - if (key[0] === '_') { - return; - } - if (key === 'parent') { - return '#'; - } - if (key === 'ctx') { - return '#'; - } - return val; - }, 2); +Runnable.prototype.clearTimeout = function () { + clearTimeout(this.timer); }; /** * Reset the timeout. * - * @api private + * @private */ -Runnable.prototype.resetTimeout = function() { +Runnable.prototype.resetTimeout = function () { var self = this; - var ms = this.timeout() || 1e9; + var ms = this.timeout(); - if (!this._enableTimeouts) { + if (ms === 0) { return; } this.clearTimeout(); - this.timer = setTimeout(function() { - if (!self._enableTimeouts) { + this.timer = setTimeout(function () { + if (self.timeout() === 0) { return; } - self.callback(new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.')); + self.callback(self._timeoutError(ms)); self.timedOut = true; }, ms); }; /** - * Whitelist a list of globals for this test run. + * Set or get a list of whitelisted globals for this test run. * - * @api private + * @private * @param {string[]} globals */ -Runnable.prototype.globals = function(globals) { +Runnable.prototype.globals = function (globals) { + if (!arguments.length) { + return this._allowedGlobals; + } this._allowedGlobals = globals; }; @@ -205,14 +265,16 @@ Runnable.prototype.globals = function(globals) { * Run the test and invoke `fn(err)`. * * @param {Function} fn - * @api private + * @private */ -Runnable.prototype.run = function(fn) { +Runnable.prototype.run = function (fn) { var self = this; var start = new Date(); var ctx = this.ctx; var finished; - var emitted; + var errorWasHandled = false; + + if (this.isPending()) return fn(); // Sometimes the ctx exists, but it is not runnable if (ctx && ctx.runnable) { @@ -221,11 +283,11 @@ Runnable.prototype.run = function(fn) { // called multiple times function multiple(err) { - if (emitted) { + if (errorWasHandled) { return; } - emitted = true; - self.emit('error', err || new Error('done() called multiple times; stacktrace may be inaccurate')); + errorWasHandled = true; + self.emit('error', createMultipleDoneError(self, err)); } // finished @@ -234,68 +296,94 @@ Runnable.prototype.run = function(fn) { if (self.timedOut) { return; } + if (finished) { - return multiple(err || self._trace); + return multiple(err); } self.clearTimeout(); self.duration = new Date() - start; finished = true; - if (!err && self.duration > ms && self._enableTimeouts) { - err = new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.'); + if (!err && self.duration > ms && ms > 0) { + err = self._timeoutError(ms); } fn(err); } - // for .resetTimeout() + // for .resetTimeout() and Runner#uncaught() this.callback = done; + if (this.fn && typeof this.fn.call !== 'function') { + done( + new TypeError( + 'A runnable must be passed a function as its second argument.' + ) + ); + return; + } + // explicit async with `done` argument if (this.async) { this.resetTimeout(); - if (this.allowUncaught) { - return callFnAsync(this.fn); - } + // allows skip() to be used in an explicit async context + this.skip = function asyncSkip() { + this.pending = true; + done(); + // halt execution, the uncaught handler will ignore the failure. + throw new Pending('async skip; aborting execution'); + }; + try { callFnAsync(this.fn); } catch (err) { - done(utils.getError(err)); + // handles async runnables which actually run synchronously + errorWasHandled = true; + if (err instanceof Pending) { + return; // done() is already called in this.skip() + } else if (this.allowUncaught) { + throw err; + } + done(Runnable.toValueOrError(err)); } return; } - if (this.allowUncaught) { - callFn(this.fn); - done(); - return; - } - // sync or promise-returning try { - if (this.pending) { - done(); - } else { - callFn(this.fn); - } + callFn(this.fn); } catch (err) { - done(utils.getError(err)); + errorWasHandled = true; + if (err instanceof Pending) { + return done(); + } else if (this.allowUncaught) { + throw err; + } + done(Runnable.toValueOrError(err)); } function callFn(fn) { var result = fn.call(ctx); if (result && typeof result.then === 'function') { self.resetTimeout(); - result - .then(function() { + result.then( + function () { done(); + // Return null so libraries like bluebird do not warn about + // subsequently constructed Promises. + return null; }, - function(reason) { + function (reason) { done(reason || new Error('Promise rejected with no or falsy reason')); - }); + } + ); } else { if (self.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()` or returning a promise')); + return done( + new Error( + '--async-only option in use without declaring `done()` or returning a promise' + ) + ); } done(); @@ -303,18 +391,86 @@ Runnable.prototype.run = function(fn) { } function callFnAsync(fn) { - fn.call(ctx, function(err) { + var result = fn.call(ctx, function (err) { if (err instanceof Error || toString.call(err) === '[object Error]') { return done(err); } if (err) { if (Object.prototype.toString.call(err) === '[object Object]') { - return done(new Error('done() invoked with non-Error: ' - + JSON.stringify(err))); + return done( + new Error('done() invoked with non-Error: ' + JSON.stringify(err)) + ); } return done(new Error('done() invoked with non-Error: ' + err)); } + if (result && utils.isPromise(result)) { + return done( + new Error( + 'Resolution method is overspecified. Specify a callback *or* return a Promise; not both.' + ) + ); + } + done(); }); } }; + +/** + * Instantiates a "timeout" error + * + * @param {number} ms - Timeout (in milliseconds) + * @returns {Error} a "timeout" error + * @private + */ +Runnable.prototype._timeoutError = function (ms) { + let msg = `Timeout of ${ms}ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.`; + if (this.file) { + msg += ' (' + this.file + ')'; + } + return createTimeoutError(msg, ms, this.file); +}; + +var constants = utils.defineConstants( + /** + * {@link Runnable}-related constants. + * @public + * @memberof Runnable + * @readonly + * @static + * @alias constants + * @enum {string} + */ + { + /** + * Value of `state` prop when a `Runnable` has failed + */ + STATE_FAILED: 'failed', + /** + * Value of `state` prop when a `Runnable` has passed + */ + STATE_PASSED: 'passed', + /** + * Value of `state` prop when a `Runnable` has been skipped by user + */ + STATE_PENDING: 'pending' + } +); + +/** + * Given `value`, return identity if truthy, otherwise create an "invalid exception" error and return that. + * @param {*} [value] - Value to return, if present + * @returns {*|Error} `value`, otherwise an `Error` + * @private + */ +Runnable.toValueOrError = function (value) { + return ( + value || + createInvalidExceptionError( + 'Runnable failed with falsy or undefined exception. Please throw an Error instead.', + value + ) + ); +}; + +Runnable.constants = constants; diff --git a/build/node_modules/mocha/lib/runner.js b/build/node_modules/mocha/lib/runner.js index d7656cda..23a43c6f 100644 --- a/build/node_modules/mocha/lib/runner.js +++ b/build/node_modules/mocha/lib/runner.js @@ -1,25 +1,39 @@ +'use strict'; + /** * Module dependencies. + * @private */ - var EventEmitter = require('events').EventEmitter; var Pending = require('./pending'); var utils = require('./utils'); -var inherits = utils.inherits; var debug = require('debug')('mocha:runner'); var Runnable = require('./runnable'); -var filter = utils.filter; -var indexOf = utils.indexOf; -var keys = utils.keys; +var Suite = require('./suite'); +var HOOK_TYPE_BEFORE_EACH = Suite.constants.HOOK_TYPE_BEFORE_EACH; +var HOOK_TYPE_AFTER_EACH = Suite.constants.HOOK_TYPE_AFTER_EACH; +var HOOK_TYPE_AFTER_ALL = Suite.constants.HOOK_TYPE_AFTER_ALL; +var HOOK_TYPE_BEFORE_ALL = Suite.constants.HOOK_TYPE_BEFORE_ALL; +var EVENT_ROOT_SUITE_RUN = Suite.constants.EVENT_ROOT_SUITE_RUN; +var STATE_FAILED = Runnable.constants.STATE_FAILED; +var STATE_PASSED = Runnable.constants.STATE_PASSED; +var STATE_PENDING = Runnable.constants.STATE_PENDING; var stackFilter = utils.stackTraceFilter(); var stringify = utils.stringify; -var type = utils.type; -var undefinedError = utils.undefinedError; + +const { + createInvalidExceptionError, + createUnsupportedError, + createFatalError, + isMochaError, + constants: errorConstants +} = require('./errors'); /** * Non-enumerable globals. + * @private + * @readonly */ - var globals = [ 'setTimeout', 'clearTimeout', @@ -31,81 +45,271 @@ var globals = [ 'clearImmediate' ]; -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - * @param {Suite} suite Root suite - * @param {boolean} [delay] Whether or not to delay execution of root suite - * until ready. - */ -function Runner(suite, delay) { - var self = this; - this._globals = []; - this._abort = false; - this._delay = delay; - this.suite = suite; - this.started = false; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test) { - self.checkGlobals(test); - }); - this.on('hook end', function(hook) { - self.checkGlobals(hook); - }); - this._defaultGrep = /.*/; - this.grep(this._defaultGrep); - this.globals(this.globalProps().concat(extraGlobals())); +var constants = utils.defineConstants( + /** + * {@link Runner}-related constants. + * @public + * @memberof Runner + * @readonly + * @alias constants + * @static + * @enum {string} + */ + { + /** + * Emitted when {@link Hook} execution begins + */ + EVENT_HOOK_BEGIN: 'hook', + /** + * Emitted when {@link Hook} execution ends + */ + EVENT_HOOK_END: 'hook end', + /** + * Emitted when Root {@link Suite} execution begins (all files have been parsed and hooks/tests are ready for execution) + */ + EVENT_RUN_BEGIN: 'start', + /** + * Emitted when Root {@link Suite} execution has been delayed via `delay` option + */ + EVENT_DELAY_BEGIN: 'waiting', + /** + * Emitted when delayed Root {@link Suite} execution is triggered by user via `global.run()` + */ + EVENT_DELAY_END: 'ready', + /** + * Emitted when Root {@link Suite} execution ends + */ + EVENT_RUN_END: 'end', + /** + * Emitted when {@link Suite} execution begins + */ + EVENT_SUITE_BEGIN: 'suite', + /** + * Emitted when {@link Suite} execution ends + */ + EVENT_SUITE_END: 'suite end', + /** + * Emitted when {@link Test} execution begins + */ + EVENT_TEST_BEGIN: 'test', + /** + * Emitted when {@link Test} execution ends + */ + EVENT_TEST_END: 'test end', + /** + * Emitted when {@link Test} execution fails + */ + EVENT_TEST_FAIL: 'fail', + /** + * Emitted when {@link Test} execution succeeds + */ + EVENT_TEST_PASS: 'pass', + /** + * Emitted when {@link Test} becomes pending + */ + EVENT_TEST_PENDING: 'pending', + /** + * Emitted when {@link Test} execution has failed, but will retry + */ + EVENT_TEST_RETRY: 'retry', + /** + * Initial state of Runner + */ + STATE_IDLE: 'idle', + /** + * State set to this value when the Runner has started running + */ + STATE_RUNNING: 'running', + /** + * State set to this value when the Runner has stopped + */ + STATE_STOPPED: 'stopped' + } +); + +class Runner extends EventEmitter { + /** + * Initialize a `Runner` at the Root {@link Suite}, which represents a hierarchy of {@link Suite|Suites} and {@link Test|Tests}. + * + * @extends external:EventEmitter + * @public + * @class + * @param {Suite} suite - Root suite + * @param {Object|boolean} [opts] - Options. If `boolean` (deprecated), whether to delay execution of root suite until ready. + * @param {boolean} [opts.cleanReferencesAfterRun] - Whether to clean references to test fns and hooks when a suite is done. + * @param {boolean} [opts.delay] - Whether to delay execution of root suite until ready. + * @param {boolean} [opts.dryRun] - Whether to report tests without running them. + * @param {boolean} [opts.failZero] - Whether to fail test run if zero tests encountered. + */ + constructor(suite, opts) { + super(); + if (opts === undefined) { + opts = {}; + } + if (typeof opts === 'boolean') { + // TODO: remove this + require('./errors').deprecate( + '"Runner(suite: Suite, delay: boolean)" is deprecated. Use "Runner(suite: Suite, {delay: boolean})" instead.' + ); + this._delay = opts; + opts = {}; + } else { + this._delay = opts.delay; + } + var self = this; + this._globals = []; + this._abort = false; + this.suite = suite; + this._opts = opts; + this.state = constants.STATE_IDLE; + this.total = suite.total(); + this.failures = 0; + /** + * @type {Map>>} + */ + this._eventListeners = new Map(); + this.on(constants.EVENT_TEST_END, function (test) { + if (test.type === 'test' && test.retriedTest() && test.parent) { + var idx = + test.parent.tests && test.parent.tests.indexOf(test.retriedTest()); + if (idx > -1) test.parent.tests[idx] = test; + } + self.checkGlobals(test); + }); + this.on(constants.EVENT_HOOK_END, function (hook) { + self.checkGlobals(hook); + }); + this._defaultGrep = /.*/; + this.grep(this._defaultGrep); + this.globals(this.globalProps()); + + this.uncaught = this._uncaught.bind(this); + this.unhandled = (reason, promise) => { + if (isMochaError(reason)) { + debug( + 'trapped unhandled rejection coming out of Mocha; forwarding to uncaught handler:', + reason + ); + this.uncaught(reason); + } else { + debug( + 'trapped unhandled rejection from (probably) user code; re-emitting on process' + ); + this._removeEventListener( + process, + 'unhandledRejection', + this.unhandled + ); + try { + process.emit('unhandledRejection', reason, promise); + } finally { + this._addEventListener(process, 'unhandledRejection', this.unhandled); + } + } + }; + } } /** * Wrapper for setImmediate, process.nextTick, or browser polyfill. * * @param {Function} fn - * @api private + * @private */ Runner.immediately = global.setImmediate || process.nextTick; /** - * Inherit from `EventEmitter.prototype`. + * Replacement for `target.on(eventName, listener)` that does bookkeeping to remove them when this runner instance is disposed. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {string} fn - Listener function + * @private + */ +Runner.prototype._addEventListener = function (target, eventName, listener) { + debug( + '_addEventListener(): adding for event %s; %d current listeners', + eventName, + target.listenerCount(eventName) + ); + /* istanbul ignore next */ + if ( + this._eventListeners.has(target) && + this._eventListeners.get(target).has(eventName) && + this._eventListeners.get(target).get(eventName).has(listener) + ) { + debug( + 'warning: tried to attach duplicate event listener for %s', + eventName + ); + return; + } + target.on(eventName, listener); + const targetListeners = this._eventListeners.has(target) + ? this._eventListeners.get(target) + : new Map(); + const targetEventListeners = targetListeners.has(eventName) + ? targetListeners.get(eventName) + : new Set(); + targetEventListeners.add(listener); + targetListeners.set(eventName, targetEventListeners); + this._eventListeners.set(target, targetListeners); +}; + +/** + * Replacement for `target.removeListener(eventName, listener)` that also updates the bookkeeping. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {function} listener - Listener function + * @private + */ +Runner.prototype._removeEventListener = function (target, eventName, listener) { + target.removeListener(eventName, listener); + + if (this._eventListeners.has(target)) { + const targetListeners = this._eventListeners.get(target); + if (targetListeners.has(eventName)) { + const targetEventListeners = targetListeners.get(eventName); + targetEventListeners.delete(listener); + if (!targetEventListeners.size) { + targetListeners.delete(eventName); + } + } + if (!targetListeners.size) { + this._eventListeners.delete(target); + } + } else { + debug('trying to remove listener for untracked object %s', target); + } +}; + +/** + * Removes all event handlers set during a run on this instance. + * Remark: this does _not_ clean/dispose the tests or suites themselves. */ -inherits(Runner, EventEmitter); +Runner.prototype.dispose = function () { + this.removeAllListeners(); + this._eventListeners.forEach((targetListeners, target) => { + targetListeners.forEach((targetEventListeners, eventName) => { + targetEventListeners.forEach(listener => { + target.removeListener(eventName, listener); + }); + }); + }); + this._eventListeners.clear(); +}; /** * Run tests with full titles matching `re`. Updates runner.total * with number of tests matched. * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public + * @public + * @memberof Runner * @param {RegExp} re * @param {boolean} invert * @return {Runner} Runner instance. */ -Runner.prototype.grep = function(re, invert) { - debug('grep %s', re); +Runner.prototype.grep = function (re, invert) { + debug('grep(): setting to %s', re); this._grep = re; this._invert = invert; this.total = this.grepTotal(this.suite); @@ -116,17 +320,16 @@ Runner.prototype.grep = function(re, invert) { * Returns the number of tests matching the grep search for the * given suite. * - * @param {Suite} suite - * @return {Number} - * @api public + * @memberof Runner + * @public * @param {Suite} suite * @return {number} */ -Runner.prototype.grepTotal = function(suite) { +Runner.prototype.grepTotal = function (suite) { var self = this; var total = 0; - suite.eachTest(function(test) { + suite.eachTest(function (test) { var match = self._grep.test(test.fullTitle()); if (self._invert) { match = !match; @@ -143,14 +346,14 @@ Runner.prototype.grepTotal = function(suite) { * Return a list of global properties. * * @return {Array} - * @api private + * @private */ -Runner.prototype.globalProps = function() { - var props = keys(global); +Runner.prototype.globalProps = function () { + var props = Object.keys(global); // non-enumerables for (var i = 0; i < globals.length; ++i) { - if (~indexOf(props, globals[i])) { + if (~props.indexOf(globals[i])) { continue; } props.push(globals[i]); @@ -162,17 +365,16 @@ Runner.prototype.globalProps = function() { /** * Allow the given `arr` of globals. * - * @param {Array} arr - * @return {Runner} for chaining - * @api public + * @public + * @memberof Runner * @param {Array} arr * @return {Runner} Runner instance. */ -Runner.prototype.globals = function(arr) { +Runner.prototype.globals = function (arr) { if (!arguments.length) { return this._globals; } - debug('globals %j', arr); + debug('globals(): setting to %O', arr); this._globals = this._globals.concat(arr); return this; }; @@ -180,10 +382,10 @@ Runner.prototype.globals = function(arr) { /** * Check for global variable leaks. * - * @api private + * @private */ -Runner.prototype.checkGlobals = function(test) { - if (this.ignoreLeaks) { +Runner.prototype.checkGlobals = function (test) { + if (!this.checkLeaks) { return; } var ok = this._globals; @@ -203,78 +405,79 @@ Runner.prototype.checkGlobals = function(test) { leaks = filterLeaks(ok, globals); this._globals = this._globals.concat(leaks); - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); + if (leaks.length) { + var msg = `global leak(s) detected: ${leaks.map(e => `'${e}'`).join(', ')}`; + this.fail(test, new Error(msg)); } }; /** * Fail the given `test`. * - * @api private - * @param {Test} test - * @param {Error} err - */ -Runner.prototype.fail = function(test, err) { - ++this.failures; - test.state = 'failed'; - - if (!(err instanceof Error || err && typeof err.message === 'string')) { - err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)'); - } - - err.stack = (this.fullStackTrace || !err.stack) - ? err.stack - : stackFilter(err.stack); - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures work in the following pattern: - * - If bail, then exit + * If `test` is a hook, failures work in the following pattern: + * - If bail, run corresponding `after each` and `after` hooks, + * then exit * - Failed `before` hook skips all tests in a suite and subsuites, * but jumps to corresponding `after` hook * - Failed `before each` hook skips remaining tests in a * suite and jumps to corresponding `after each` hook, * which is run only once - * - Failed `after` hook does not alter - * execution order + * - Failed `after` hook does not alter execution order * - Failed `after each` hook skips remaining tests in a * suite and subsuites, but executes other `after each` * hooks * - * @api private - * @param {Hook} hook + * @private + * @param {Runnable} test * @param {Error} err + * @param {boolean} [force=false] - Whether to fail a pending test. */ -Runner.prototype.failHook = function(hook, err) { - if (hook.ctx && hook.ctx.currentTest) { - hook.originalTitle = hook.originalTitle || hook.title; - hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; +Runner.prototype.fail = function (test, err, force) { + force = force === true; + if (test.isPending() && !force) { + return; + } + if (this.state === constants.STATE_STOPPED) { + if (err.code === errorConstants.MULTIPLE_DONE) { + throw err; + } + throw createFatalError( + 'Test failed after root suite execution completed!', + err + ); } - this.fail(hook, err); - if (this.suite.bail()) { - this.emit('end'); + ++this.failures; + debug('total number of failures: %d', this.failures); + test.state = STATE_FAILED; + + if (!isError(err)) { + err = thrown2Error(err); + } + + try { + err.stack = + this.fullStackTrace || !err.stack ? err.stack : stackFilter(err.stack); + } catch (ignore) { + // some environments do not take kindly to monkeying with the stack } + + this.emit(constants.EVENT_TEST_FAIL, test, err); }; /** * Run hook `name` callbacks and then invoke `fn()`. * - * @api private + * @private * @param {string} name * @param {Function} fn */ -Runner.prototype.hook = function(name, fn) { +Runner.prototype.hook = function (name, fn) { + if (this._opts.dryRun) return fn(); + var suite = this.suite; - var hooks = suite['_' + name]; + var hooks = suite.getHooks(name); var self = this; function next(i) { @@ -284,38 +487,87 @@ Runner.prototype.hook = function(name, fn) { } self.currentRunnable = hook; - hook.ctx.currentTest = self.test; + if (name === HOOK_TYPE_BEFORE_ALL) { + hook.ctx.currentTest = hook.parent.tests[0]; + } else if (name === HOOK_TYPE_AFTER_ALL) { + hook.ctx.currentTest = hook.parent.tests[hook.parent.tests.length - 1]; + } else { + hook.ctx.currentTest = self.test; + } + + setHookTitle(hook); - self.emit('hook', hook); + hook.allowUncaught = self.allowUncaught; + + self.emit(constants.EVENT_HOOK_BEGIN, hook); if (!hook.listeners('error').length) { - hook.on('error', function(err) { - self.failHook(hook, err); + self._addEventListener(hook, 'error', function (err) { + self.fail(hook, err); }); } - hook.run(function(err) { + hook.run(function cbHookRun(err) { var testError = hook.error(); if (testError) { self.fail(self.test, testError); } - if (err) { - if (err instanceof Pending) { - suite.pending = true; + // conditional skip + if (hook.pending) { + if (name === HOOK_TYPE_AFTER_EACH) { + // TODO define and implement use case + if (self.test) { + self.test.pending = true; + } + } else if (name === HOOK_TYPE_BEFORE_EACH) { + if (self.test) { + self.test.pending = true; + } + self.emit(constants.EVENT_HOOK_END, hook); + hook.pending = false; // activates hook for next test + return fn(new Error('abort hookDown')); + } else if (name === HOOK_TYPE_BEFORE_ALL) { + suite.tests.forEach(function (test) { + test.pending = true; + }); + suite.suites.forEach(function (suite) { + suite.pending = true; + }); + hooks = []; } else { - self.failHook(hook, err); - - // stop executing hooks, notify callee of hook err - return fn(err); + hook.pending = false; + var errForbid = createUnsupportedError('`this.skip` forbidden'); + self.fail(hook, errForbid); + return fn(errForbid); } + } else if (err) { + self.fail(hook, err); + // stop executing hooks, notify callee of hook err + return fn(err); } - self.emit('hook end', hook); + self.emit(constants.EVENT_HOOK_END, hook); delete hook.ctx.currentTest; + setHookTitle(hook); next(++i); }); + + function setHookTitle(hook) { + hook.originalTitle = hook.originalTitle || hook.title; + if (hook.ctx && hook.ctx.currentTest) { + hook.title = `${hook.originalTitle} for "${hook.ctx.currentTest.title}"`; + } else { + var parentTitle; + if (hook.parent.title) { + parentTitle = hook.parent.title; + } else { + parentTitle = hook.parent.root ? '{root}' : ''; + } + hook.title = `${hook.originalTitle} in "${parentTitle}"`; + } + } } - Runner.immediately(function() { + Runner.immediately(function () { next(0); }); }; @@ -324,12 +576,12 @@ Runner.prototype.hook = function(name, fn) { * Run hook `name` for the given array of `suites` * in order, and callback `fn(err, errSuite)`. * - * @api private + * @private * @param {string} name * @param {Array} suites * @param {Function} fn */ -Runner.prototype.hooks = function(name, suites, fn) { +Runner.prototype.hooks = function (name, suites, fn) { var self = this; var orig = this.suite; @@ -341,7 +593,7 @@ Runner.prototype.hooks = function(name, suites, fn) { return fn(); } - self.hook(name, function(err) { + self.hook(name, function (err) { if (err) { var errSuite = self.suite; self.suite = orig; @@ -356,25 +608,25 @@ Runner.prototype.hooks = function(name, suites, fn) { }; /** - * Run hooks from the top level down. + * Run 'afterEach' hooks from bottom up. * * @param {String} name * @param {Function} fn - * @api private + * @private */ -Runner.prototype.hookUp = function(name, fn) { +Runner.prototype.hookUp = function (name, fn) { var suites = [this.suite].concat(this.parents()).reverse(); this.hooks(name, suites, fn); }; /** - * Run hooks from the bottom up. + * Run 'beforeEach' hooks from top level down. * * @param {String} name * @param {Function} fn - * @api private + * @private */ -Runner.prototype.hookDown = function(name, fn) { +Runner.prototype.hookDown = function (name, fn) { var suites = [this.suite].concat(this.parents()); this.hooks(name, suites, fn); }; @@ -384,9 +636,9 @@ Runner.prototype.hookDown = function(name, fn) { * closest to furthest. * * @return {Array} - * @api private + * @private */ -Runner.prototype.parents = function() { +Runner.prototype.parents = function () { var suite = this.suite; var suites = []; while (suite.parent) { @@ -400,24 +652,29 @@ Runner.prototype.parents = function() { * Run the current test and callback `fn(err)`. * * @param {Function} fn - * @api private + * @private */ -Runner.prototype.runTest = function(fn) { +Runner.prototype.runTest = function (fn) { + if (this._opts.dryRun) return Runner.immediately(fn); + var self = this; var test = this.test; + if (!test) { + return; + } + if (this.asyncOnly) { test.asyncOnly = true; } - + this._addEventListener(test, 'error', function (err) { + self.fail(test, err); + }); if (this.allowUncaught) { test.allowUncaught = true; return test.run(fn); } try { - test.on('error', function(err) { - self.fail(test, err); - }); test.run(fn); } catch (err) { fn(err); @@ -427,11 +684,11 @@ Runner.prototype.runTest = function(fn) { /** * Run tests in the given `suite` and invoke the callback `fn()` when complete. * - * @api private + * @private * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runTests = function(suite, fn) { +Runner.prototype.runTests = function (suite, fn) { var self = this; var tests = suite.tests.slice(); var test; @@ -445,8 +702,7 @@ Runner.prototype.runTests = function(suite, fn) { self.suite = after ? errSuite.parent : errSuite; if (self.suite) { - // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { + self.hookUp(HOOK_TYPE_AFTER_EACH, function (err2, errSuite2) { self.suite = orig; // some hooks may fail even now if (err2) { @@ -465,7 +721,7 @@ Runner.prototype.runTests = function(suite, fn) { function next(err, errSuite) { // if we bail after first err if (self.failures && suite._bail) { - return fn(); + tests = []; } if (self._abort) { @@ -506,47 +762,77 @@ Runner.prototype.runTests = function(suite, fn) { return; } - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); + // static skip, no hooks are executed + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants.EVENT_TEST_PENDING, test); + } + self.emit(constants.EVENT_TEST_END, test); return next(); } // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite) { - if (suite.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); + self.emit(constants.EVENT_TEST_BEGIN, (self.test = test)); + self.hookDown(HOOK_TYPE_BEFORE_EACH, function (err, errSuite) { + // conditional skip within beforeEach + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants.EVENT_TEST_PENDING, test); + } + self.emit(constants.EVENT_TEST_END, test); + // skip inner afterEach hooks below errSuite level + var origSuite = self.suite; + self.suite = errSuite || self.suite; + return self.hookUp(HOOK_TYPE_AFTER_EACH, function (e, eSuite) { + self.suite = origSuite; + next(e, eSuite); + }); } if (err) { return hookErr(err, errSuite, false); } self.currentRunnable = self.test; - self.runTest(function(err) { + self.runTest(function (err) { test = self.test; - - if (err) { - if (err instanceof Pending) { - self.emit('pending', test); + // conditional skip within it + if (test.pending) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); } else { - self.fail(test, err); + test.state = STATE_PENDING; + self.emit(constants.EVENT_TEST_PENDING, test); } - self.emit('test end', test); - - if (err instanceof Pending) { - return next(); + self.emit(constants.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else if (err) { + var retry = test.currentRetry(); + if (retry < test.retries()) { + var clonedTest = test.clone(); + clonedTest.currentRetry(retry + 1); + tests.unshift(clonedTest); + + self.emit(constants.EVENT_TEST_RETRY, test, err); + + // Early return + hook trigger so that it doesn't + // increment the count wrong + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else { + self.fail(test, err); } - - return self.hookUp('afterEach', next); + self.emit(constants.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); } - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); + test.state = STATE_PASSED; + self.emit(constants.EVENT_TEST_PASS, test); + self.emit(constants.EVENT_TEST_END, test); + self.hookUp(HOOK_TYPE_AFTER_EACH, next); }); }); } @@ -559,23 +845,23 @@ Runner.prototype.runTests = function(suite, fn) { /** * Run the given `suite` and invoke the callback `fn()` when complete. * - * @api private + * @private * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runSuite = function(suite, fn) { +Runner.prototype.runSuite = function (suite, fn) { var i = 0; var self = this; var total = this.grepTotal(suite); - var afterAllHookCalled = false; - debug('run suite %s', suite.fullTitle()); + debug('runSuite(): running %s', suite.fullTitle()); if (!total || (self.failures && suite._bail)) { + debug('runSuite(): bailing'); return fn(); } - this.emit('suite', this.suite = suite); + this.emit(constants.EVENT_SUITE_BEGIN, (this.suite = suite)); function next(errSuite) { if (errSuite) { @@ -603,7 +889,7 @@ Runner.prototype.runSuite = function(suite, fn) { // huge recursive loop and thus a maximum call stack error. // See comment in `this.runTests()` for more information. if (self._grep !== self._defaultGrep) { - Runner.immediately(function() { + Runner.immediately(function () { self.runSuite(curr, next); }); } else { @@ -615,22 +901,18 @@ Runner.prototype.runSuite = function(suite, fn) { self.suite = suite; self.nextSuite = next; - if (afterAllHookCalled) { + // remove reference to test + delete self.test; + + self.hook(HOOK_TYPE_AFTER_ALL, function () { + self.emit(constants.EVENT_SUITE_END, suite); fn(errSuite); - } else { - // mark that the afterAll block has been called once - // and so can be skipped if there is an error in it. - afterAllHookCalled = true; - self.hook('afterAll', function() { - self.emit('suite end', suite); - fn(errSuite); - }); - } + }); } this.nextSuite = next; - this.hook('beforeAll', function(err) { + this.hook(HOOK_TYPE_BEFORE_ALL, function (err) { if (err) { return done(); } @@ -639,19 +921,60 @@ Runner.prototype.runSuite = function(suite, fn) { }; /** - * Handle uncaught exceptions. + * Handle uncaught exceptions within runner. * - * @param {Error} err - * @api private + * This function is bound to the instance as `Runner#uncaught` at instantiation + * time. It's intended to be listening on the `Process.uncaughtException` event. + * In order to not leak EE listeners, we need to ensure no more than a single + * `uncaughtException` listener exists per `Runner`. The only way to do + * this--because this function needs the context (and we don't have lambdas)--is + * to use `Function.prototype.bind`. We need strict equality to unregister and + * _only_ unregister the _one_ listener we set from the + * `Process.uncaughtException` event; would be poor form to just remove + * everything. See {@link Runner#run} for where the event listener is registered + * and unregistered. + * @param {Error} err - Some uncaught error + * @private */ -Runner.prototype.uncaught = function(err) { +Runner.prototype._uncaught = function (err) { + // this is defensive to prevent future developers from mis-calling this function. + // it's more likely that it'd be called with the incorrect context--say, the global + // `process` object--than it would to be called with a context that is not a "subclass" + // of `Runner`. + if (!(this instanceof Runner)) { + throw createFatalError( + 'Runner#uncaught() called with invalid context', + this + ); + } + if (err instanceof Pending) { + debug('uncaught(): caught a Pending'); + return; + } + // browser does not exit script when throwing in global.onerror() + if (this.allowUncaught && !utils.isBrowser()) { + debug('uncaught(): bubbling exception due to --allow-uncaught'); + throw err; + } + + if (this.state === constants.STATE_STOPPED) { + debug('uncaught(): throwing after run has completed!'); + throw err; + } + if (err) { - debug('uncaught exception %s', err !== function() { - return this; - }.call(err) ? err : (err.message || err)); + debug('uncaught(): got truthy exception %O', err); } else { - debug('uncaught undefined exception'); - err = undefinedError(); + debug('uncaught(): undefined/falsy exception'); + err = createInvalidExceptionError( + 'Caught falsy/undefined exception which would otherwise be uncaught. No stack trace found; try a debugger', + err + ); + } + + if (!isError(err)) { + err = thrown2Error(err); + debug('uncaught(): converted "error" %o to Error', err); } err.uncaught = true; @@ -659,15 +982,18 @@ Runner.prototype.uncaught = function(err) { if (!runnable) { runnable = new Runnable('Uncaught error outside test suite'); + debug('uncaught(): no current Runnable; created a phony one'); runnable.parent = this.suite; - if (this.started) { + if (this.state === constants.STATE_RUNNING) { + debug('uncaught(): failing gracefully'); this.fail(runnable, err); } else { // Can't recover from this failure - this.emit('start'); + debug('uncaught(): test run has not yet started; unrecoverable'); + this.emit(constants.EVENT_RUN_BEGIN); this.fail(runnable, err); - this.emit('end'); + this.emit(constants.EVENT_RUN_END); } return; @@ -675,129 +1001,214 @@ Runner.prototype.uncaught = function(err) { runnable.clearTimeout(); - // Ignore errors if complete - if (runnable.state) { + if (runnable.isFailed()) { + debug('uncaught(): Runnable has already failed'); + // Ignore error if already failed return; - } - this.fail(runnable, err); - - // recover from test - if (runnable.type === 'test') { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); + } else if (runnable.isPending()) { + debug('uncaught(): pending Runnable wound up failing!'); + // report 'pending test' retrospectively as failed + this.fail(runnable, err, true); return; } - // recover from hooks - if (runnable.type === 'hook') { - var errSuite = this.suite; - // if hook failure is in afterEach block - if (runnable.fullTitle().indexOf('after each') > -1) { - return this.hookErr(err, errSuite, true); - } - // if hook failure is in beforeEach block - if (runnable.fullTitle().indexOf('before each') > -1) { - return this.hookErr(err, errSuite, false); - } - // if hook failure is in after or before blocks - return this.nextSuite(errSuite); + // we cannot recover gracefully if a Runnable has already passed + // then fails asynchronously + if (runnable.isPassed()) { + debug('uncaught(): Runnable has already passed; bailing gracefully'); + this.fail(runnable, err); + this.abort(); + } else { + debug('uncaught(): forcing Runnable to complete with Error'); + return runnable.callback(err); } - - // bail - this.emit('end'); }; /** * Run the root suite and invoke `fn(failures)` * on completion. * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - * @param {Function} fn - * @return {Runner} Runner instance. + * @public + * @memberof Runner + * @param {Function} fn - Callback when finished + * @param {{files: string[], options: Options}} [opts] - For subclasses + * @returns {Runner} Runner instance. */ -Runner.prototype.run = function(fn) { - var self = this; +Runner.prototype.run = function (fn, opts = {}) { var rootSuite = this.suite; + var options = opts.options || {}; - fn = fn || function() {}; + debug('run(): got options: %O', options); + fn = fn || function () {}; - function uncaught(err) { - self.uncaught(err); - } + const end = () => { + if (!this.total && this._opts.failZero) this.failures = 1; + + debug('run(): root suite completed; emitting %s', constants.EVENT_RUN_END); + this.emit(constants.EVENT_RUN_END); + }; + + const begin = () => { + debug('run(): emitting %s', constants.EVENT_RUN_BEGIN); + this.emit(constants.EVENT_RUN_BEGIN); + debug('run(): emitted %s', constants.EVENT_RUN_BEGIN); - function start() { - self.started = true; - self.emit('start'); - self.runSuite(rootSuite, function() { - debug('finished running'); - self.emit('end'); + this.runSuite(rootSuite, end); + }; + + const prepare = () => { + debug('run(): starting'); + // If there is an `only` filter + if (rootSuite.hasOnly()) { + rootSuite.filterOnly(); + debug('run(): filtered exclusive Runnables'); + } + this.state = constants.STATE_RUNNING; + if (this._delay) { + this.emit(constants.EVENT_DELAY_END); + debug('run(): "delay" ended'); + } + + return begin(); + }; + + // references cleanup to avoid memory leaks + if (this._opts.cleanReferencesAfterRun) { + this.on(constants.EVENT_SUITE_END, suite => { + suite.cleanReferences(); }); } - debug('start'); - // callback - this.on('end', function() { - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); + this.on(constants.EVENT_RUN_END, function () { + this.state = constants.STATE_STOPPED; + debug('run(): emitted %s', constants.EVENT_RUN_END); + fn(this.failures); }); - // uncaught exception - process.on('uncaughtException', uncaught); + this._removeEventListener(process, 'uncaughtException', this.uncaught); + this._removeEventListener(process, 'unhandledRejection', this.unhandled); + this._addEventListener(process, 'uncaughtException', this.uncaught); + this._addEventListener(process, 'unhandledRejection', this.unhandled); if (this._delay) { // for reporters, I guess. // might be nice to debounce some dots while we wait. - this.emit('waiting', rootSuite); - rootSuite.once('run', start); + this.emit(constants.EVENT_DELAY_BEGIN, rootSuite); + rootSuite.once(EVENT_ROOT_SUITE_RUN, prepare); + debug('run(): waiting for green light due to --delay'); } else { - start(); + Runner.immediately(prepare); } return this; }; +/** + * Toggle partial object linking behavior; used for building object references from + * unique ID's. Does nothing in serial mode, because the object references already exist. + * Subclasses can implement this (e.g., `ParallelBufferedRunner`) + * @abstract + * @param {boolean} [value] - If `true`, enable partial object linking, otherwise disable + * @returns {Runner} + * @chainable + * @public + * @example + * // this reporter needs proper object references when run in parallel mode + * class MyReporter() { + * constructor(runner) { + * this.runner.linkPartialObjects(true) + * .on(EVENT_SUITE_BEGIN, suite => { + // this Suite may be the same object... + * }) + * .on(EVENT_TEST_BEGIN, test => { + * // ...as the `test.parent` property + * }); + * } + * } + */ +Runner.prototype.linkPartialObjects = function (value) { + return this; +}; + +/* + * Like {@link Runner#run}, but does not accept a callback and returns a `Promise` instead of a `Runner`. + * This function cannot reject; an `unhandledRejection` event will bubble up to the `process` object instead. + * @public + * @memberof Runner + * @param {Object} [opts] - Options for {@link Runner#run} + * @returns {Promise} Failure count + */ +Runner.prototype.runAsync = async function runAsync(opts = {}) { + return new Promise(resolve => { + this.run(resolve, opts); + }); +}; + /** * Cleanly abort execution. * - * @api public + * @memberof Runner + * @public * @return {Runner} Runner instance. */ -Runner.prototype.abort = function() { - debug('aborting'); +Runner.prototype.abort = function () { + debug('abort(): aborting'); this._abort = true; return this; }; +/** + * Returns `true` if Mocha is running in parallel mode. For reporters. + * + * Subclasses should return an appropriate value. + * @public + * @returns {false} + */ +Runner.prototype.isParallelMode = function isParallelMode() { + return false; +}; + +/** + * Configures an alternate reporter for worker processes to use. Subclasses + * using worker processes should implement this. + * @public + * @param {string} path - Absolute path to alternate reporter for worker processes to use + * @returns {Runner} + * @throws When in serial mode + * @chainable + * @abstract + */ +Runner.prototype.workerReporter = function () { + throw createUnsupportedError('workerReporter() not supported in serial mode'); +}; + /** * Filter leaks with the given globals flagged as `ok`. * - * @api private + * @private * @param {Array} ok * @param {Array} globals * @return {Array} */ function filterLeaks(ok, globals) { - return filter(globals, function(key) { + return globals.filter(function (key) { // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) { + if (/^\d+/.test(key)) { return false; } // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && (/^getInterface/).test(key)) { + // if runner runs in an iframe, this iframe's window.getInterface method + // not init at first it is assigned in some seconds + if (global.navigator && /^getInterface/.test(key)) { return false; } // an iframe could be approached by window[iframeIndex] // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && (/^\d+/).test(key)) { + if (global.navigator && /^\d+/.test(key)) { return false; } @@ -806,7 +1217,7 @@ function filterLeaks(ok, globals) { return false; } - var matched = filter(ok, function(ok) { + var matched = ok.filter(function (ok) { if (~ok.indexOf('*')) { return key.indexOf(ok.split('*')[0]) === 0; } @@ -817,24 +1228,39 @@ function filterLeaks(ok, globals) { } /** - * Array of globals dependent on the environment. + * Check if argument is an instance of Error object or a duck-typed equivalent. * - * @return {Array} - * @api private + * @private + * @param {Object} err - object to check + * @param {string} err.message - error message + * @returns {boolean} */ -function extraGlobals() { - if (typeof process === 'object' && typeof process.version === 'string') { - var parts = process.version.split('.'); - var nodeVersion = utils.reduce(parts, function(a, v) { - return a << 8 | v; - }); +function isError(err) { + return err instanceof Error || (err && typeof err.message === 'string'); +} - // 'errno' was renamed to process._errno in v0.9.11. +/** + * + * Converts thrown non-extensible type into proper Error. + * + * @private + * @param {*} thrown - Non-extensible type thrown by code + * @return {Error} + */ +function thrown2Error(err) { + return new Error( + `the ${utils.canonicalType(err)} ${stringify( + err + )} was thrown, throw an Error :)` + ); +} - if (nodeVersion < 0x00090B) { - return ['errno']; - } - } +Runner.constants = constants; - return []; -} +/** + * Node.js' `EventEmitter` + * @external EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter} + */ + +module.exports = Runner; diff --git a/build/node_modules/mocha/lib/stats-collector.js b/build/node_modules/mocha/lib/stats-collector.js new file mode 100644 index 00000000..738fd5d7 --- /dev/null +++ b/build/node_modules/mocha/lib/stats-collector.js @@ -0,0 +1,83 @@ +'use strict'; + +/** + * Provides a factory function for a {@link StatsCollector} object. + * @module + */ + +var constants = require('./runner').constants; +var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; +var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; +var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; +var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; +var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; +var EVENT_RUN_END = constants.EVENT_RUN_END; +var EVENT_TEST_END = constants.EVENT_TEST_END; + +/** + * Test statistics collector. + * + * @public + * @typedef {Object} StatsCollector + * @property {number} suites - integer count of suites run. + * @property {number} tests - integer count of tests run. + * @property {number} passes - integer count of passing tests. + * @property {number} pending - integer count of pending tests. + * @property {number} failures - integer count of failed tests. + * @property {Date} start - time when testing began. + * @property {Date} end - time when testing concluded. + * @property {number} duration - number of msecs that testing took. + */ + +var Date = global.Date; + +/** + * Provides stats such as test duration, number of tests passed / failed etc., by listening for events emitted by `runner`. + * + * @private + * @param {Runner} runner - Runner instance + * @throws {TypeError} If falsy `runner` + */ +function createStatsCollector(runner) { + /** + * @type StatsCollector + */ + var stats = { + suites: 0, + tests: 0, + passes: 0, + pending: 0, + failures: 0 + }; + + if (!runner) { + throw new TypeError('Missing runner argument'); + } + + runner.stats = stats; + + runner.once(EVENT_RUN_BEGIN, function () { + stats.start = new Date(); + }); + runner.on(EVENT_SUITE_BEGIN, function (suite) { + suite.root || stats.suites++; + }); + runner.on(EVENT_TEST_PASS, function () { + stats.passes++; + }); + runner.on(EVENT_TEST_FAIL, function () { + stats.failures++; + }); + runner.on(EVENT_TEST_PENDING, function () { + stats.pending++; + }); + runner.on(EVENT_TEST_END, function () { + stats.tests++; + }); + runner.once(EVENT_RUN_END, function () { + stats.end = new Date(); + stats.duration = stats.end - stats.start; + }); +} + +module.exports = createStatsCollector; diff --git a/build/node_modules/mocha/lib/suite.js b/build/node_modules/mocha/lib/suite.js index 7834e284..43cb7556 100644 --- a/build/node_modules/mocha/lib/suite.js +++ b/build/node_modules/mocha/lib/suite.js @@ -1,13 +1,25 @@ +'use strict'; + /** * Module dependencies. + * @private */ +const {EventEmitter} = require('events'); +const Hook = require('./hook'); +var { + assignNewMochaID, + clamp, + constants: utilsConstants, + defineConstants, + getMochaID, + inherits, + isString +} = require('./utils'); +const debug = require('debug')('mocha:suite'); +const milliseconds = require('ms'); +const errors = require('./errors'); -var EventEmitter = require('events').EventEmitter; -var Hook = require('./hook'); -var utils = require('./utils'); -var inherits = utils.inherits; -var debug = require('debug')('mocha:suite'); -var milliseconds = require('./ms'); +const {MOCHA_ID_PROP_NAME} = utilsConstants; /** * Expose `Suite`. @@ -16,51 +28,69 @@ var milliseconds = require('./ms'); exports = module.exports = Suite; /** - * Create a new `Suite` with the given `title` and parent `Suite`. When a suite - * with the same title is already present, that suite is returned to provide - * nicer reporter and more flexible meta-testing. + * Create a new `Suite` with the given `title` and parent `Suite`. * - * @api public - * @param {Suite} parent - * @param {string} title + * @public + * @param {Suite} parent - Parent suite (required!) + * @param {string} title - Title * @return {Suite} */ -exports.create = function(parent, title) { +Suite.create = function (parent, title) { var suite = new Suite(title, parent.ctx); suite.parent = parent; - if (parent.pending) { - suite.pending = true; - } title = suite.fullTitle(); parent.addSuite(suite); return suite; }; /** - * Initialize a new `Suite` with the given `title` and `ctx`. + * Constructs a new `Suite` instance with the given `title`, `ctx`, and `isRoot`. * - * @api private - * @param {string} title - * @param {Context} parentContext + * @public + * @class + * @extends EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter|EventEmitter} + * @param {string} title - Suite title. + * @param {Context} parentContext - Parent context instance. + * @param {boolean} [isRoot=false] - Whether this is the root suite. */ -function Suite(title, parentContext) { +function Suite(title, parentContext, isRoot) { + if (!isString(title)) { + throw errors.createInvalidArgumentTypeError( + 'Suite argument "title" must be a string. Received type "' + + typeof title + + '"', + 'title', + 'string' + ); + } this.title = title; function Context() {} Context.prototype = parentContext; this.ctx = new Context(); this.suites = []; this.tests = []; + this.root = isRoot === true; this.pending = false; + this._retries = -1; this._beforeEach = []; this._beforeAll = []; this._afterEach = []; this._afterAll = []; - this.root = !title; this._timeout = 2000; - this._enableTimeouts = true; this._slow = 75; this._bail = false; - this.delayed = false; + this._onlyTests = []; + this._onlySuites = []; + assignNewMochaID(this); + + Object.defineProperty(this, 'id', { + get() { + return getMochaID(this); + } + }); + + this.reset(); } /** @@ -68,69 +98,90 @@ function Suite(title, parentContext) { */ inherits(Suite, EventEmitter); +/** + * Resets the state initially or for a next run. + */ +Suite.prototype.reset = function () { + this.delayed = false; + function doReset(thingToReset) { + thingToReset.reset(); + } + this.suites.forEach(doReset); + this.tests.forEach(doReset); + this._beforeEach.forEach(doReset); + this._afterEach.forEach(doReset); + this._beforeAll.forEach(doReset); + this._afterAll.forEach(doReset); +}; + /** * Return a clone of this `Suite`. * - * @api private + * @private * @return {Suite} */ -Suite.prototype.clone = function() { +Suite.prototype.clone = function () { var suite = new Suite(this.title); debug('clone'); suite.ctx = this.ctx; + suite.root = this.root; suite.timeout(this.timeout()); - suite.enableTimeouts(this.enableTimeouts()); + suite.retries(this.retries()); suite.slow(this.slow()); suite.bail(this.bail()); return suite; }; /** - * Set timeout `ms` or short-hand such as "2s". + * Set or get timeout `ms` or short-hand such as "2s". * - * @api private + * @private + * @todo Do not attempt to set value if `ms` is undefined * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.timeout = function(ms) { +Suite.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } - if (ms.toString() === '0') { - this._enableTimeouts = false; - } if (typeof ms === 'string') { ms = milliseconds(ms); } + + // Clamp to range + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = clamp(ms, range); + debug('timeout %d', ms); this._timeout = parseInt(ms, 10); return this; }; /** - * Set timeout to `enabled`. - * - * @api private - * @param {boolean} enabled - * @return {Suite|boolean} self or enabled - */ -Suite.prototype.enableTimeouts = function(enabled) { + * Set or get number of times to retry a failed test. + * + * @private + * @param {number|string} n + * @return {Suite|number} for chaining + */ +Suite.prototype.retries = function (n) { if (!arguments.length) { - return this._enableTimeouts; + return this._retries; } - debug('enableTimeouts %s', enabled); - this._enableTimeouts = enabled; + debug('retries %d', n); + this._retries = parseInt(n, 10) || 0; return this; }; /** - * Set slow `ms` or short-hand such as "2s". + * Set or get slow `ms` or short-hand such as "2s". * - * @api private + * @private * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.slow = function(ms) { +Suite.prototype.slow = function (ms) { if (!arguments.length) { return this._slow; } @@ -143,13 +194,13 @@ Suite.prototype.slow = function(ms) { }; /** - * Sets whether to bail after first error. + * Set or get whether to bail after first error. * - * @api private + * @private * @param {boolean} bail * @return {Suite|number} for chaining */ -Suite.prototype.bail = function(bail) { +Suite.prototype.bail = function (bail) { if (!arguments.length) { return this._bail; } @@ -158,16 +209,43 @@ Suite.prototype.bail = function(bail) { return this; }; +/** + * Check if this suite or its parent suite is marked as pending. + * + * @private + */ +Suite.prototype.isPending = function () { + return this.pending || (this.parent && this.parent.isPending()); +}; + +/** + * Generic hook-creator. + * @private + * @param {string} title - Title of hook + * @param {Function} fn - Hook callback + * @returns {Hook} A new hook + */ +Suite.prototype._createHook = function (title, fn) { + var hook = new Hook(title, fn); + hook.parent = this; + hook.timeout(this.timeout()); + hook.retries(this.retries()); + hook.slow(this.slow()); + hook.ctx = this.ctx; + hook.file = this.file; + return hook; +}; + /** * Run `fn(test[, done])` before running tests. * - * @api private + * @private * @param {string} title * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeAll = function(title, fn) { - if (this.pending) { +Suite.prototype.beforeAll = function (title, fn) { + if (this.isPending()) { return this; } if (typeof title === 'function') { @@ -176,27 +254,22 @@ Suite.prototype.beforeAll = function(title, fn) { } title = '"before all" hook' + (title ? ': ' + title : ''); - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; + var hook = this._createHook(title, fn); this._beforeAll.push(hook); - this.emit('beforeAll', hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_ALL, hook); return this; }; /** * Run `fn(test[, done])` after running tests. * - * @api private + * @private * @param {string} title * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterAll = function(title, fn) { - if (this.pending) { +Suite.prototype.afterAll = function (title, fn) { + if (this.isPending()) { return this; } if (typeof title === 'function') { @@ -205,27 +278,22 @@ Suite.prototype.afterAll = function(title, fn) { } title = '"after all" hook' + (title ? ': ' + title : ''); - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; + var hook = this._createHook(title, fn); this._afterAll.push(hook); - this.emit('afterAll', hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_ALL, hook); return this; }; /** * Run `fn(test[, done])` before each test case. * - * @api private + * @private * @param {string} title * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeEach = function(title, fn) { - if (this.pending) { +Suite.prototype.beforeEach = function (title, fn) { + if (this.isPending()) { return this; } if (typeof title === 'function') { @@ -234,27 +302,22 @@ Suite.prototype.beforeEach = function(title, fn) { } title = '"before each" hook' + (title ? ': ' + title : ''); - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; + var hook = this._createHook(title, fn); this._beforeEach.push(hook); - this.emit('beforeEach', hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_EACH, hook); return this; }; /** * Run `fn(test[, done])` after each test case. * - * @api private + * @private * @param {string} title * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterEach = function(title, fn) { - if (this.pending) { +Suite.prototype.afterEach = function (title, fn) { + if (this.isPending()) { return this; } if (typeof title === 'function') { @@ -263,50 +326,46 @@ Suite.prototype.afterEach = function(title, fn) { } title = '"after each" hook' + (title ? ': ' + title : ''); - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; + var hook = this._createHook(title, fn); this._afterEach.push(hook); - this.emit('afterEach', hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_EACH, hook); return this; }; /** * Add a test `suite`. * - * @api private + * @private * @param {Suite} suite * @return {Suite} for chaining */ -Suite.prototype.addSuite = function(suite) { +Suite.prototype.addSuite = function (suite) { suite.parent = this; + suite.root = false; suite.timeout(this.timeout()); - suite.enableTimeouts(this.enableTimeouts()); + suite.retries(this.retries()); suite.slow(this.slow()); suite.bail(this.bail()); this.suites.push(suite); - this.emit('suite', suite); + this.emit(constants.EVENT_SUITE_ADD_SUITE, suite); return this; }; /** * Add a `test` to this suite. * - * @api private + * @private * @param {Test} test * @return {Suite} for chaining */ -Suite.prototype.addTest = function(test) { +Suite.prototype.addTest = function (test) { test.parent = this; test.timeout(this.timeout()); - test.enableTimeouts(this.enableTimeouts()); + test.retries(this.retries()); test.slow(this.slow()); test.ctx = this.ctx; this.tests.push(test); - this.emit('test', test); + this.emit(constants.EVENT_SUITE_ADD_TEST, test); return this; }; @@ -314,42 +373,59 @@ Suite.prototype.addTest = function(test) { * Return the full title generated by recursively concatenating the parent's * full title. * - * @api public + * @memberof Suite + * @public * @return {string} */ -Suite.prototype.fullTitle = function() { +Suite.prototype.fullTitle = function () { + return this.titlePath().join(' '); +}; + +/** + * Return the title path generated by recursively concatenating the parent's + * title path. + * + * @memberof Suite + * @public + * @return {string} + */ +Suite.prototype.titlePath = function () { + var result = []; if (this.parent) { - var full = this.parent.fullTitle(); - if (full) { - return full + ' ' + this.title; - } + result = result.concat(this.parent.titlePath()); + } + if (!this.root) { + result.push(this.title); } - return this.title; + return result; }; /** * Return the total number of tests. * - * @api public + * @memberof Suite + * @public * @return {number} */ -Suite.prototype.total = function() { - return utils.reduce(this.suites, function(sum, suite) { - return sum + suite.total(); - }, 0) + this.tests.length; +Suite.prototype.total = function () { + return ( + this.suites.reduce(function (sum, suite) { + return sum + suite.total(); + }, 0) + this.tests.length + ); }; /** * Iterates through each suite recursively to find all tests. Applies a * function in the format `fn(test)`. * - * @api private + * @private * @param {Function} fn * @return {Suite} */ -Suite.prototype.eachTest = function(fn) { - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite) { +Suite.prototype.eachTest = function (fn) { + this.tests.forEach(fn); + this.suites.forEach(function (suite) { suite.eachTest(fn); }); return this; @@ -357,9 +433,234 @@ Suite.prototype.eachTest = function(fn) { /** * This will run the root suite if we happen to be running in delayed mode. + * @private */ Suite.prototype.run = function run() { if (this.root) { - this.emit('run'); + this.emit(constants.EVENT_ROOT_SUITE_RUN); } }; + +/** + * Determines whether a suite has an `only` test or suite as a descendant. + * + * @private + * @returns {Boolean} + */ +Suite.prototype.hasOnly = function hasOnly() { + return ( + this._onlyTests.length > 0 || + this._onlySuites.length > 0 || + this.suites.some(function (suite) { + return suite.hasOnly(); + }) + ); +}; + +/** + * Filter suites based on `isOnly` logic. + * + * @private + * @returns {Boolean} + */ +Suite.prototype.filterOnly = function filterOnly() { + if (this._onlyTests.length) { + // If the suite contains `only` tests, run those and ignore any nested suites. + this.tests = this._onlyTests; + this.suites = []; + } else { + // Otherwise, do not run any of the tests in this suite. + this.tests = []; + this._onlySuites.forEach(function (onlySuite) { + // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. + // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. + if (onlySuite.hasOnly()) { + onlySuite.filterOnly(); + } + }); + // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. + var onlySuites = this._onlySuites; + this.suites = this.suites.filter(function (childSuite) { + return onlySuites.indexOf(childSuite) !== -1 || childSuite.filterOnly(); + }); + } + // Keep the suite only if there is something to run + return this.tests.length > 0 || this.suites.length > 0; +}; + +/** + * Adds a suite to the list of subsuites marked `only`. + * + * @private + * @param {Suite} suite + */ +Suite.prototype.appendOnlySuite = function (suite) { + this._onlySuites.push(suite); +}; + +/** + * Marks a suite to be `only`. + * + * @private + */ +Suite.prototype.markOnly = function () { + this.parent && this.parent.appendOnlySuite(this); +}; + +/** + * Adds a test to the list of tests marked `only`. + * + * @private + * @param {Test} test + */ +Suite.prototype.appendOnlyTest = function (test) { + this._onlyTests.push(test); +}; + +/** + * Returns the array of hooks by hook name; see `HOOK_TYPE_*` constants. + * @private + */ +Suite.prototype.getHooks = function getHooks(name) { + return this['_' + name]; +}; + +/** + * cleans all references from this suite and all child suites. + */ +Suite.prototype.dispose = function () { + this.suites.forEach(function (suite) { + suite.dispose(); + }); + this.cleanReferences(); +}; + +/** + * Cleans up the references to all the deferred functions + * (before/after/beforeEach/afterEach) and tests of a Suite. + * These must be deleted otherwise a memory leak can happen, + * as those functions may reference variables from closures, + * thus those variables can never be garbage collected as long + * as the deferred functions exist. + * + * @private + */ +Suite.prototype.cleanReferences = function cleanReferences() { + function cleanArrReferences(arr) { + for (var i = 0; i < arr.length; i++) { + delete arr[i].fn; + } + } + + if (Array.isArray(this._beforeAll)) { + cleanArrReferences(this._beforeAll); + } + + if (Array.isArray(this._beforeEach)) { + cleanArrReferences(this._beforeEach); + } + + if (Array.isArray(this._afterAll)) { + cleanArrReferences(this._afterAll); + } + + if (Array.isArray(this._afterEach)) { + cleanArrReferences(this._afterEach); + } + + for (var i = 0; i < this.tests.length; i++) { + delete this.tests[i].fn; + } +}; + +/** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ +Suite.prototype.serialize = function serialize() { + return { + _bail: this._bail, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + root: this.root, + title: this.title, + [MOCHA_ID_PROP_NAME]: this.id, + parent: this.parent ? {[MOCHA_ID_PROP_NAME]: this.parent.id} : null + }; +}; + +var constants = defineConstants( + /** + * {@link Suite}-related constants. + * @public + * @memberof Suite + * @alias constants + * @readonly + * @static + * @enum {string} + */ + { + /** + * Event emitted after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_POST_REQUIRE: 'post-require', + /** + * Event emitted before a test file has been loaded. In browser, this is emitted once an interface has been selected. + */ + EVENT_FILE_PRE_REQUIRE: 'pre-require', + /** + * Event emitted immediately after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_REQUIRE: 'require', + /** + * Event emitted when `global.run()` is called (use with `delay` option). + */ + EVENT_ROOT_SUITE_RUN: 'run', + + /** + * Namespace for collection of a `Suite`'s "after all" hooks. + */ + HOOK_TYPE_AFTER_ALL: 'afterAll', + /** + * Namespace for collection of a `Suite`'s "after each" hooks. + */ + HOOK_TYPE_AFTER_EACH: 'afterEach', + /** + * Namespace for collection of a `Suite`'s "before all" hooks. + */ + HOOK_TYPE_BEFORE_ALL: 'beforeAll', + /** + * Namespace for collection of a `Suite`'s "before each" hooks. + */ + HOOK_TYPE_BEFORE_EACH: 'beforeEach', + + /** + * Emitted after a child `Suite` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_SUITE: 'suite', + /** + * Emitted after an "after all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_ALL: 'afterAll', + /** + * Emitted after an "after each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_EACH: 'afterEach', + /** + * Emitted after an "before all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_ALL: 'beforeAll', + /** + * Emitted after an "before each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_EACH: 'beforeEach', + /** + * Emitted after a `Test` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_TEST: 'test' + } +); + +Suite.constants = constants; diff --git a/build/node_modules/mocha/lib/template.html b/build/node_modules/mocha/lib/template.html deleted file mode 100644 index 36c5e0b6..00000000 --- a/build/node_modules/mocha/lib/template.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - Mocha - - - - - -
    - - - - - - diff --git a/build/node_modules/mocha/lib/test.js b/build/node_modules/mocha/lib/test.js index bb744e6f..0b8fe18b 100644 --- a/build/node_modules/mocha/lib/test.js +++ b/build/node_modules/mocha/lib/test.js @@ -1,30 +1,113 @@ -/** - * Module dependencies. - */ - +'use strict'; var Runnable = require('./runnable'); -var inherits = require('./utils').inherits; +var utils = require('./utils'); +var errors = require('./errors'); +var createInvalidArgumentTypeError = errors.createInvalidArgumentTypeError; +var isString = utils.isString; -/** - * Expose `Test`. - */ +const {MOCHA_ID_PROP_NAME} = utils.constants; module.exports = Test; /** * Initialize a new `Test` with the given `title` and callback `fn`. * - * @api private - * @param {String} title - * @param {Function} fn + * @public + * @class + * @extends Runnable + * @param {String} title - Test title (required) + * @param {Function} [fn] - Test callback. If omitted, the Test is considered "pending" */ function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; + if (!isString(title)) { + throw createInvalidArgumentTypeError( + 'Test argument "title" should be a string. Received type "' + + typeof title + + '"', + 'title', + 'string' + ); + } this.type = 'test'; + Runnable.call(this, title, fn); + this.reset(); } /** * Inherit from `Runnable.prototype`. */ -inherits(Test, Runnable); +utils.inherits(Test, Runnable); + +/** + * Resets the state initially or for a next run. + */ +Test.prototype.reset = function () { + Runnable.prototype.reset.call(this); + this.pending = !this.fn; + delete this.state; +}; + +/** + * Set or get retried test + * + * @private + */ +Test.prototype.retriedTest = function (n) { + if (!arguments.length) { + return this._retriedTest; + } + this._retriedTest = n; +}; + +/** + * Add test to the list of tests marked `only`. + * + * @private + */ +Test.prototype.markOnly = function () { + this.parent.appendOnlyTest(this); +}; + +Test.prototype.clone = function () { + var test = new Test(this.title, this.fn); + test.timeout(this.timeout()); + test.slow(this.slow()); + test.retries(this.retries()); + test.currentRetry(this.currentRetry()); + test.retriedTest(this.retriedTest() || this); + test.globals(this.globals()); + test.parent = this.parent; + test.file = this.file; + test.ctx = this.ctx; + return test; +}; + +/** + * Returns an minimal object suitable for transmission over IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ +Test.prototype.serialize = function serialize() { + return { + $$currentRetry: this._currentRetry, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.pending), + $$retriedTest: this._retriedTest || null, + $$slow: this._slow, + $$titlePath: this.titlePath(), + body: this.body, + duration: this.duration, + err: this.err, + parent: { + $$fullTitle: this.parent.fullTitle(), + [MOCHA_ID_PROP_NAME]: this.parent.id + }, + speed: this.speed, + state: this.state, + title: this.title, + type: this.type, + file: this.file, + [MOCHA_ID_PROP_NAME]: this.id + }; +}; diff --git a/build/node_modules/mocha/lib/utils.js b/build/node_modules/mocha/lib/utils.js index 0b970255..9db34cb1 100644 --- a/build/node_modules/mocha/lib/utils.js +++ b/build/node_modules/mocha/lib/utils.js @@ -1,255 +1,67 @@ -/* eslint-env browser */ +'use strict'; /** - * Module dependencies. + * Various utility functions used throughout Mocha's codebase. + * @module utils */ -var basename = require('path').basename; -var debug = require('debug')('mocha:watch'); -var exists = require('fs').existsSync || require('path').existsSync; -var glob = require('glob'); -var join = require('path').join; -var readdirSync = require('fs').readdirSync; -var statSync = require('fs').statSync; -var watchFile = require('fs').watchFile; - /** - * Ignored directories. + * Module dependencies. */ -var ignore = ['node_modules', '.git']; +const {nanoid} = require('nanoid/non-secure'); +var path = require('path'); +var util = require('util'); +var he = require('he'); -exports.inherits = require('util').inherits; +const MOCHA_ID_PROP_NAME = '__mocha_id__'; /** - * Escape special characters in the given string of html. + * Inherit the prototype methods from one constructor into another. * - * @api private - * @param {string} html - * @return {string} + * @param {function} ctor - Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor - Constructor function to inherit prototype from. + * @throws {TypeError} if either constructor is null, or if super constructor + * lacks a prototype. */ -exports.escape = function(html) { - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; +exports.inherits = util.inherits; /** - * Array#forEach (<=IE8) + * Escape special characters in the given string of html. * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} scope + * @private + * @param {string} html + * @return {string} */ -exports.forEach = function(arr, fn, scope) { - for (var i = 0, l = arr.length; i < l; i++) { - fn.call(scope, arr[i], i); - } +exports.escape = function (html) { + return he.encode(String(html), {useNamedReferences: false}); }; /** * Test if the given obj is type of string. * - * @api private + * @private * @param {Object} obj * @return {boolean} */ -exports.isString = function(obj) { +exports.isString = function (obj) { return typeof obj === 'string'; }; -/** - * Array#map (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} scope - * @return {Array} - */ -exports.map = function(arr, fn, scope) { - var result = []; - for (var i = 0, l = arr.length; i < l; i++) { - result.push(fn.call(scope, arr[i], i, arr)); - } - return result; -}; - -/** - * Array#indexOf (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Object} obj to find index of - * @param {number} start - * @return {number} - */ -exports.indexOf = function(arr, obj, start) { - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) { - return i; - } - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} val Initial value. - * @return {*} - */ -exports.reduce = function(arr, fn, val) { - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @return {Array} - */ -exports.filter = function(arr, fn) { - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) { - ret.push(val); - } - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @api private - * @param {Object} obj - * @return {Array} keys - */ -exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { - var keys = []; - var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @api private - * @param {Array} files - * @param {Function} fn - */ -exports.watch = function(files, fn) { - var options = { interval: 100 }; - files.forEach(function(file) { - debug('file %s', file); - watchFile(file, options, function(curr, prev) { - if (prev.mtime < curr.mtime) { - fn(file); - } - }); - }); -}; - -/** - * Array.isArray (<=IE8) - * - * @api private - * @param {Object} obj - * @return {Boolean} - */ -var isArray = typeof Array.isArray === 'function' ? Array.isArray : function(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; -}; - -/** - * Buffer.prototype.toJSON polyfill. - * - * @type {Function} - */ -if (typeof Buffer !== 'undefined' && Buffer.prototype) { - Buffer.prototype.toJSON = Buffer.prototype.toJSON || function() { - return Array.prototype.slice.call(this, 0); - }; -} - -/** - * Ignored files. - * - * @api private - * @param {string} path - * @return {boolean} - */ -function ignored(path) { - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @api private - * @param {string} dir - * @param {string[]} [ext=['.js']] - * @param {Array} [ret=[]] - * @return {Array} - */ -exports.files = function(dir, ext, ret) { - ret = ret || []; - ext = ext || ['js']; - - var re = new RegExp('\\.(' + ext.join('|') + ')$'); - - readdirSync(dir) - .filter(ignored) - .forEach(function(path) { - path = join(dir, path); - if (statSync(path).isDirectory()) { - exports.files(path, ext, ret); - } else if (path.match(re)) { - ret.push(path); - } - }); - - return ret; -}; - /** * Compute a slug from the given `str`. * - * @api private + * @private * @param {string} str * @return {string} */ -exports.slug = function(str) { +exports.slug = function (str) { return str .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); + .replace(/\s+/g, '-') + .replace(/[^-\w]/g, '') + .replace(/-{2,}/g, '-'); }; /** @@ -258,80 +70,26 @@ exports.slug = function(str) { * @param {string} str * @return {string} */ -exports.clean = function(str) { +exports.clean = function (str) { str = str - .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') - .replace(/^function *\(.*\)\s*{|\(.*\) *=> *{?/, '') - .replace(/\s+\}$/, ''); + .replace(/\r\n?|[\n\u2028\u2029]/g, '\n') + .replace(/^\uFEFF/, '') + // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content + .replace( + /^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, + '$1$2$3' + ); var spaces = str.match(/^\n?( *)/)[1].length; var tabs = str.match(/^\n?(\t*)/)[1].length; - var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); + var re = new RegExp( + '^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', + 'gm' + ); str = str.replace(re, ''); - return exports.trim(str); -}; - -/** - * Trim the given `str`. - * - * @api private - * @param {string} str - * @return {string} - */ -exports.trim = function(str) { - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @api private - * @param {string} qs - * @return {Object} - */ -exports.parseQuery = function(qs) { - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair) { - var i = pair.indexOf('='); - var key = pair.slice(0, i); - var val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @api private - * @param {string} js - * @return {string} - */ -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew[ \t]+(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1'); -} - -/** - * Highlight the contents of tag `name`. - * - * @api private - * @param {string} name - */ -exports.highlightTags = function(name) { - var code = document.getElementById('mocha').getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } + return str.trim(); }; /** @@ -343,15 +101,13 @@ exports.highlightTags = function(name) { * Objects w/ no properties return `'{}'` * All else: return result of `value.toString()` * - * @api private + * @private * @param {*} value The value to inspect. - * @param {string} [type] The type of the value, if known. + * @param {string} typeHint The type of the value * @returns {string} */ -function emptyRepresentation(value, type) { - type = type || exports.type(value); - - switch (type) { +function emptyRepresentation(value, typeHint) { + switch (typeHint) { case 'function': return '[Function]'; case 'object': @@ -367,10 +123,46 @@ function emptyRepresentation(value, type) { * Takes some variable and asks `Object.prototype.toString()` what it thinks it * is. * - * @api private + * @private * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString * @param {*} value The value to test. - * @returns {string} + * @returns {string} Computed type + * @example + * canonicalType({}) // 'object' + * canonicalType([]) // 'array' + * canonicalType(1) // 'number' + * canonicalType(false) // 'boolean' + * canonicalType(Infinity) // 'number' + * canonicalType(null) // 'null' + * canonicalType(new Date()) // 'date' + * canonicalType(/foo/) // 'regexp' + * canonicalType('type') // 'string' + * canonicalType(global) // 'global' + * canonicalType(new String('foo') // 'object' + * canonicalType(async function() {}) // 'asyncfunction' + * canonicalType(await import(name)) // 'module' + */ +var canonicalType = (exports.canonicalType = function canonicalType(value) { + if (value === undefined) { + return 'undefined'; + } else if (value === null) { + return 'null'; + } else if (Buffer.isBuffer(value)) { + return 'buffer'; + } + return Object.prototype.toString + .call(value) + .replace(/^\[.+\s(.+?)]$/, '$1') + .toLowerCase(); +}); + +/** + * + * Returns a general type or data structure of a variable + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures + * @param {*} value The value to test. + * @returns {string} One of undefined, boolean, number, string, bigint, symbol, object * @example * type({}) // 'object' * type([]) // 'array' @@ -378,22 +170,31 @@ function emptyRepresentation(value, type) { * type(false) // 'boolean' * type(Infinity) // 'number' * type(null) // 'null' - * type(new Date()) // 'date' - * type(/foo/) // 'regexp' + * type(new Date()) // 'object' + * type(/foo/) // 'object' * type('type') // 'string' - * type(global) // 'global' + * type(global) // 'object' + * type(new String('foo') // 'string' */ exports.type = function type(value) { - if (value === undefined) { - return 'undefined'; - } else if (value === null) { - return 'null'; - } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { - return 'buffer'; - } - return Object.prototype.toString.call(value) - .replace(/^\[.+\s(.+?)\]$/, '$1') - .toLowerCase(); + // Null is special + if (value === null) return 'null'; + const primitives = new Set([ + 'undefined', + 'boolean', + 'number', + 'string', + 'bigint', + 'symbol' + ]); + const _type = typeof value; + if (_type === 'function') return _type; + if (primitives.has(_type)) return _type; + if (value instanceof String) return 'string'; + if (value instanceof Error) return 'error'; + if (Array.isArray(value)) return 'array'; + + return _type; }; /** @@ -406,37 +207,53 @@ exports.type = function type(value) { * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of * JSON.stringify(). * - * @api private + * @private * @see exports.type * @param {*} value * @return {string} */ -exports.stringify = function(value) { - var type = exports.type(value); +exports.stringify = function (value) { + var typeHint = canonicalType(value); + + if (!~['object', 'array', 'function'].indexOf(typeHint)) { + if (typeHint === 'buffer') { + var json = Buffer.prototype.toJSON.call(value); + // Based on the toJSON result + return jsonStringify( + json.data && json.type ? json.data : json, + 2 + ).replace(/,(\n|$)/g, '$1'); + } - if (!~exports.indexOf(['object', 'array', 'function'], type)) { - if (type !== 'buffer') { + // IE7/IE8 has a bizarre String constructor; needs to be coerced + // into an array and back to obj. + if (typeHint === 'string' && typeof value === 'object') { + value = value.split('').reduce(function (acc, char, idx) { + acc[idx] = char; + return acc; + }, {}); + typeHint = 'object'; + } else { return jsonStringify(value); } - var json = value.toJSON(); - // Based on the toJSON result - return jsonStringify(json.data && json.type ? json.data : json, 2) - .replace(/,(\n|$)/g, '$1'); } for (var prop in value) { if (Object.prototype.hasOwnProperty.call(value, prop)) { - return jsonStringify(exports.canonicalize(value), 2).replace(/,(\n|$)/g, '$1'); + return jsonStringify( + exports.canonicalize(value, null, typeHint), + 2 + ).replace(/,(\n|$)/g, '$1'); } } - return emptyRepresentation(value, type); + return emptyRepresentation(value, typeHint); }; /** * like JSON.stringify but more sense. * - * @api private + * @private * @param {Object} object * @param {number=} spaces * @param {number=} depth @@ -450,16 +267,19 @@ function jsonStringify(object, spaces, depth) { depth = depth || 1; var space = spaces * depth; - var str = isArray(object) ? '[' : '{'; - var end = isArray(object) ? ']' : '}'; - var length = object.length || exports.keys(object).length; + var str = Array.isArray(object) ? '[' : '{'; + var end = Array.isArray(object) ? ']' : '}'; + var length = + typeof object.length === 'number' + ? object.length + : Object.keys(object).length; // `.repeat()` polyfill function repeat(s, n) { return new Array(n).join(s); } function _stringify(val) { - switch (exports.type(val)) { + switch (canonicalType(val)) { case 'null': case 'undefined': val = '[' + val + ']'; @@ -470,15 +290,18 @@ function jsonStringify(object, spaces, depth) { break; case 'boolean': case 'regexp': + case 'symbol': case 'number': - val = val === 0 && (1 / val) === -Infinity // `-0` - ? '-0' - : val.toString(); + val = + val === 0 && 1 / val === -Infinity // `-0` + ? '-0' + : val.toString(); + break; + case 'bigint': + val = val.toString() + 'n'; break; case 'date': - var sDate = isNaN(val.getTime()) // Invalid date - ? val.toString() - : val.toISOString(); + var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString(); val = '[Date: ' + sDate + ']'; break; case 'buffer': @@ -488,40 +311,34 @@ function jsonStringify(object, spaces, depth) { val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']'; break; default: - val = (val === '[Function]' || val === '[Circular]') - ? val - : JSON.stringify(val); // string + val = + val === '[Function]' || val === '[Circular]' + ? val + : JSON.stringify(val); // string } return val; } for (var i in object) { - if (!object.hasOwnProperty(i)) { + if (!Object.prototype.hasOwnProperty.call(object, i)) { continue; // not my business } --length; - str += '\n ' + repeat(' ', space) - + (isArray(object) ? '' : '"' + i + '": ') // key - + _stringify(object[i]) // value - + (length ? ',' : ''); // comma + str += + '\n ' + + repeat(' ', space) + + (Array.isArray(object) ? '' : '"' + i + '": ') + // key + _stringify(object[i]) + // value + (length ? ',' : ''); // comma } - return str + return ( + str + // [], {} - + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end) + ); } -/** - * Test if a value is a buffer. - * - * @api private - * @param {*} value The value to test. - * @return {boolean} True if `value` is a buffer, otherwise false - */ -exports.isBuffer = function(value) { - return typeof Buffer !== 'undefined' && Buffer.isBuffer(value); -}; - /** * Return a new Thing that has the keys in sorted order. Recursive. * @@ -534,18 +351,19 @@ exports.isBuffer = function(value) { * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again. * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()` * - * @api private + * @private * @see {@link exports.stringify} * @param {*} value Thing to inspect. May or may not have properties. * @param {Array} [stack=[]] Stack of seen values + * @param {string} [typeHint] Type hint * @return {(Object|Array|Function|string|undefined)} */ -exports.canonicalize = function(value, stack) { +exports.canonicalize = function canonicalize(value, stack, typeHint) { var canonicalizedObj; /* eslint-disable no-unused-vars */ var prop; /* eslint-enable no-unused-vars */ - var type = exports.type(value); + typeHint = typeHint || canonicalType(value); function withStack(value, fn) { stack.push(value); fn(); @@ -554,135 +372,59 @@ exports.canonicalize = function(value, stack) { stack = stack || []; - if (exports.indexOf(stack, value) !== -1) { + if (stack.indexOf(value) !== -1) { return '[Circular]'; } - switch (type) { + switch (typeHint) { case 'undefined': case 'buffer': case 'null': canonicalizedObj = value; break; case 'array': - withStack(value, function() { - canonicalizedObj = exports.map(value, function(item) { + withStack(value, function () { + canonicalizedObj = value.map(function (item) { return exports.canonicalize(item, stack); }); }); break; case 'function': - /* eslint-disable guard-for-in */ + /* eslint-disable-next-line no-unused-vars, no-unreachable-loop */ for (prop in value) { canonicalizedObj = {}; break; } /* eslint-enable guard-for-in */ if (!canonicalizedObj) { - canonicalizedObj = emptyRepresentation(value, type); + canonicalizedObj = emptyRepresentation(value, typeHint); break; } /* falls through */ case 'object': canonicalizedObj = canonicalizedObj || {}; - withStack(value, function() { - exports.forEach(exports.keys(value).sort(), function(key) { - canonicalizedObj[key] = exports.canonicalize(value[key], stack); - }); + withStack(value, function () { + Object.keys(value) + .sort() + .forEach(function (key) { + canonicalizedObj[key] = exports.canonicalize(value[key], stack); + }); }); break; case 'date': case 'number': case 'regexp': case 'boolean': + case 'symbol': canonicalizedObj = value; break; default: - canonicalizedObj = value.toString(); + canonicalizedObj = value + ''; } return canonicalizedObj; }; -/** - * Lookup file names at the given `path`. - * - * @api public - * @param {string} path Base path to start searching from. - * @param {string[]} extensions File extensions to look for. - * @param {boolean} recursive Whether or not to recurse into subdirectories. - * @return {string[]} An array of paths. - */ -exports.lookupFiles = function lookupFiles(path, extensions, recursive) { - var files = []; - var re = new RegExp('\\.(' + extensions.join('|') + ')$'); - - if (!exists(path)) { - if (exists(path + '.js')) { - path += '.js'; - } else { - files = glob.sync(path); - if (!files.length) { - throw new Error("cannot resolve path (or pattern) '" + path + "'"); - } - return files; - } - } - - try { - var stat = statSync(path); - if (stat.isFile()) { - return path; - } - } catch (err) { - // ignore error - return; - } - - readdirSync(path).forEach(function(file) { - file = join(path, file); - try { - var stat = statSync(file); - if (stat.isDirectory()) { - if (recursive) { - files = files.concat(lookupFiles(file, extensions, recursive)); - } - return; - } - } catch (err) { - // ignore error - return; - } - if (!stat.isFile() || !re.test(file) || basename(file)[0] === '.') { - return; - } - files.push(file); - }); - - return files; -}; - -/** - * Generate an undefined error with a message warning the user. - * - * @return {Error} - */ - -exports.undefinedError = function() { - return new Error('Caught undefined error, did you throw without specifying what?'); -}; - -/** - * Generate an undefined error if `err` is not defined. - * - * @param {Error} err - * @return {Error} - */ - -exports.getError = function(err) { - return err || exports.undefinedError(); -}; - /** * @summary * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`) @@ -692,34 +434,43 @@ exports.getError = function(err) { * (i.e: strip Mocha and internal node functions from stack trace). * @returns {Function} */ -exports.stackTraceFilter = function() { +exports.stackTraceFilter = function () { // TODO: Replace with `process.browser` - var slash = '/'; - var is = typeof document === 'undefined' ? { node: true } : { browser: true }; - var cwd = is.node - ? process.cwd() + slash - : (typeof location === 'undefined' ? window.location : location).href.replace(/\/[^\/]*$/, '/'); + var is = typeof document === 'undefined' ? {node: true} : {browser: true}; + var slash = path.sep; + var cwd; + if (is.node) { + cwd = exports.cwd() + slash; + } else { + cwd = ( + typeof location === 'undefined' ? window.location : location + ).href.replace(/\/[^/]*$/, '/'); + slash = '/'; + } function isMochaInternal(line) { - return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) - || (~line.indexOf('components' + slash + 'mochajs' + slash)) - || (~line.indexOf('components' + slash + 'mocha' + slash)) - || (~line.indexOf(slash + 'mocha.js')); + return ( + ~line.indexOf('node_modules' + slash + 'mocha' + slash) || + ~line.indexOf(slash + 'mocha.js') || + ~line.indexOf(slash + 'mocha.min.js') + ); } function isNodeInternal(line) { - return (~line.indexOf('(timers.js:')) - || (~line.indexOf('(events.js:')) - || (~line.indexOf('(node.js:')) - || (~line.indexOf('(module.js:')) - || (~line.indexOf('GeneratorFunctionPrototype.next (native)')) - || false; + return ( + ~line.indexOf('(timers.js:') || + ~line.indexOf('(events.js:') || + ~line.indexOf('(node.js:') || + ~line.indexOf('(module.js:') || + ~line.indexOf('GeneratorFunctionPrototype.next (native)') || + false + ); } - return function(stack) { + return function (stack) { stack = stack.split('\n'); - stack = exports.reduce(stack, function(list, line) { + stack = stack.reduce(function (list, line) { if (isMochaInternal(line)) { return list; } @@ -729,10 +480,161 @@ exports.stackTraceFilter = function() { } // Clean up cwd(absolute) - list.push(line.replace(cwd, '')); + if (/:\d+:\d+\)?$/.test(line)) { + line = line.replace('(' + cwd, '('); + } + + list.push(line); return list; }, []); return stack.join('\n'); }; }; + +/** + * Crude, but effective. + * @public + * @param {*} value + * @returns {boolean} Whether or not `value` is a Promise + */ +exports.isPromise = function isPromise(value) { + return ( + typeof value === 'object' && + value !== null && + typeof value.then === 'function' + ); +}; + +/** + * Clamps a numeric value to an inclusive range. + * + * @param {number} value - Value to be clamped. + * @param {number[]} range - Two element array specifying [min, max] range. + * @returns {number} clamped value + */ +exports.clamp = function clamp(value, range) { + return Math.min(Math.max(value, range[0]), range[1]); +}; + +/** + * It's a noop. + * @public + */ +exports.noop = function () {}; + +/** + * Creates a map-like object. + * + * @description + * A "map" is an object with no prototype, for our purposes. In some cases + * this would be more appropriate than a `Map`, especially if your environment + * doesn't support it. Recommended for use in Mocha's public APIs. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Custom_and_Null_objects|MDN:Map} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Custom_and_Null_objects|MDN:Object.create - Custom objects} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Custom_and_Null_objects|MDN:Object.assign} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} An object with no prototype, having `...obj` properties + */ +exports.createMap = function (obj) { + return Object.assign.apply( + null, + [Object.create(null)].concat(Array.prototype.slice.call(arguments)) + ); +}; + +/** + * Creates a read-only map-like object. + * + * @description + * This differs from {@link module:utils.createMap createMap} only in that + * the argument must be non-empty, because the result is frozen. + * + * @see {@link module:utils.createMap createMap} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} A frozen object with no prototype, having `...obj` properties + * @throws {TypeError} if argument is not a non-empty object. + */ +exports.defineConstants = function (obj) { + if (canonicalType(obj) !== 'object' || !Object.keys(obj).length) { + throw new TypeError('Invalid argument; expected a non-empty object'); + } + return Object.freeze(exports.createMap(obj)); +}; + +/** + * Returns current working directory + * + * Wrapper around `process.cwd()` for isolation + * @private + */ +exports.cwd = function cwd() { + return process.cwd(); +}; + +/** + * Returns `true` if Mocha is running in a browser. + * Checks for `process.browser`. + * @returns {boolean} + * @private + */ +exports.isBrowser = function isBrowser() { + return Boolean(process.browser); +}; + +/* + * Casts `value` to an array; useful for optionally accepting array parameters + * + * It follows these rules, depending on `value`. If `value` is... + * 1. `undefined`: return an empty Array + * 2. `null`: return an array with a single `null` element + * 3. Any other object: return the value of `Array.from()` _if_ the object is iterable + * 4. otherwise: return an array with a single element, `value` + * @param {*} value - Something to cast to an Array + * @returns {Array<*>} + */ +exports.castArray = function castArray(value) { + if (value === undefined) { + return []; + } + if (value === null) { + return [null]; + } + if ( + typeof value === 'object' && + (typeof value[Symbol.iterator] === 'function' || value.length !== undefined) + ) { + return Array.from(value); + } + return [value]; +}; + +exports.constants = exports.defineConstants({ + MOCHA_ID_PROP_NAME +}); + +/** + * Creates a new unique identifier + * @returns {string} Unique identifier + */ +exports.uniqueID = () => nanoid(); + +exports.assignNewMochaID = obj => { + const id = exports.uniqueID(); + Object.defineProperty(obj, MOCHA_ID_PROP_NAME, { + get() { + return id; + } + }); + return obj; +}; + +/** + * Retrieves a Mocha ID from an object, if present. + * @param {*} [obj] - Object + * @returns {string|void} + */ +exports.getMochaID = obj => + obj && typeof obj === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined; diff --git a/build/node_modules/mocha/mocha-es2018.js b/build/node_modules/mocha/mocha-es2018.js new file mode 100644 index 00000000..181f9e94 --- /dev/null +++ b/build/node_modules/mocha/mocha-es2018.js @@ -0,0 +1,19794 @@ +// mocha@9.2.2 in javascript ES2018 +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.mocha = factory()); +})(this, (function () { 'use strict'; + + var global$2 = (typeof global$1 !== "undefined" ? global$1 : + typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : {}); + + var global$1 = (typeof global$2 !== "undefined" ? global$2 : + typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : {}); + + // shim for using process in browser + // based off https://github.com/defunctzombie/node-process/blob/master/browser.js + + function defaultSetTimout$1() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout$1 () { + throw new Error('clearTimeout has not been defined'); + } + var cachedSetTimeout$1 = defaultSetTimout$1; + var cachedClearTimeout$1 = defaultClearTimeout$1; + if (typeof global$1.setTimeout === 'function') { + cachedSetTimeout$1 = setTimeout; + } + if (typeof global$1.clearTimeout === 'function') { + cachedClearTimeout$1 = clearTimeout; + } + + function runTimeout$1(fun) { + if (cachedSetTimeout$1 === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout$1 === defaultSetTimout$1 || !cachedSetTimeout$1) && setTimeout) { + cachedSetTimeout$1 = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout$1(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout$1.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout$1.call(this, fun, 0); + } + } + + + } + function runClearTimeout$1(marker) { + if (cachedClearTimeout$1 === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout$1 === defaultClearTimeout$1 || !cachedClearTimeout$1) && clearTimeout) { + cachedClearTimeout$1 = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout$1(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout$1.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout$1.call(this, marker); + } + } + + + + } + var queue$1 = []; + var draining$1 = false; + var currentQueue$1; + var queueIndex$1 = -1; + + function cleanUpNextTick$1() { + if (!draining$1 || !currentQueue$1) { + return; + } + draining$1 = false; + if (currentQueue$1.length) { + queue$1 = currentQueue$1.concat(queue$1); + } else { + queueIndex$1 = -1; + } + if (queue$1.length) { + drainQueue$1(); + } + } + + function drainQueue$1() { + if (draining$1) { + return; + } + var timeout = runTimeout$1(cleanUpNextTick$1); + draining$1 = true; + + var len = queue$1.length; + while(len) { + currentQueue$1 = queue$1; + queue$1 = []; + while (++queueIndex$1 < len) { + if (currentQueue$1) { + currentQueue$1[queueIndex$1].run(); + } + } + queueIndex$1 = -1; + len = queue$1.length; + } + currentQueue$1 = null; + draining$1 = false; + runClearTimeout$1(timeout); + } + function nextTick$1(fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue$1.push(new Item$1(fun, args)); + if (queue$1.length === 1 && !draining$1) { + runTimeout$1(drainQueue$1); + } + } + // v8 likes predictible objects + function Item$1(fun, array) { + this.fun = fun; + this.array = array; + } + Item$1.prototype.run = function () { + this.fun.apply(null, this.array); + }; + var title$1 = 'browser'; + var platform$1 = 'browser'; + var browser$4 = true; + var env$1 = {}; + var argv$1 = []; + var version$2 = ''; // empty string to avoid regexp issues + var versions$1 = {}; + var release$1 = {}; + var config$1 = {}; + + function noop$1() {} + + var on$1 = noop$1; + var addListener$1 = noop$1; + var once$1 = noop$1; + var off$1 = noop$1; + var removeListener$1 = noop$1; + var removeAllListeners$1 = noop$1; + var emit$1 = noop$1; + + function binding$1(name) { + throw new Error('process.binding is not supported'); + } + + function cwd$1 () { return '/' } + function chdir$1 (dir) { + throw new Error('process.chdir is not supported'); + }function umask$1() { return 0; } + + // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js + var performance$1 = global$1.performance || {}; + var performanceNow$1 = + performance$1.now || + performance$1.mozNow || + performance$1.msNow || + performance$1.oNow || + performance$1.webkitNow || + function(){ return (new Date()).getTime() }; + + // generate timestamp or delta + // see http://nodejs.org/api/process.html#process_process_hrtime + function hrtime$1(previousTimestamp){ + var clocktime = performanceNow$1.call(performance$1)*1e-3; + var seconds = Math.floor(clocktime); + var nanoseconds = Math.floor((clocktime%1)*1e9); + if (previousTimestamp) { + seconds = seconds - previousTimestamp[0]; + nanoseconds = nanoseconds - previousTimestamp[1]; + if (nanoseconds<0) { + seconds--; + nanoseconds += 1e9; + } + } + return [seconds,nanoseconds] + } + + var startTime$1 = new Date(); + function uptime$1() { + var currentTime = new Date(); + var dif = currentTime - startTime$1; + return dif / 1000; + } + + var process$1 = { + nextTick: nextTick$1, + title: title$1, + browser: browser$4, + env: env$1, + argv: argv$1, + version: version$2, + versions: versions$1, + on: on$1, + addListener: addListener$1, + once: once$1, + off: off$1, + removeListener: removeListener$1, + removeAllListeners: removeAllListeners$1, + emit: emit$1, + binding: binding$1, + cwd: cwd$1, + chdir: chdir$1, + umask: umask$1, + hrtime: hrtime$1, + platform: platform$1, + release: release$1, + config: config$1, + uptime: uptime$1 + }; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function getCjsExportFromNamespace (n) { + return n && n['default'] || n; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + var domain; + + // This constructor is used to store event handlers. Instantiating this is + // faster than explicitly calling `Object.create(null)` to get a "clean" empty + // object (tested with v8 v4.9). + function EventHandlers() {} + EventHandlers.prototype = Object.create(null); + + function EventEmitter$2() { + EventEmitter$2.init.call(this); + } + + // nodejs oddity + // require('events') === require('events').EventEmitter + EventEmitter$2.EventEmitter = EventEmitter$2; + + EventEmitter$2.usingDomains = false; + + EventEmitter$2.prototype.domain = undefined; + EventEmitter$2.prototype._events = undefined; + EventEmitter$2.prototype._maxListeners = undefined; + + // By default EventEmitters will print a warning if more than 10 listeners are + // added to it. This is a useful default which helps finding memory leaks. + EventEmitter$2.defaultMaxListeners = 10; + + EventEmitter$2.init = function() { + this.domain = null; + if (EventEmitter$2.usingDomains) { + // if there is an active domain, then attach to it. + if (domain.active ) ; + } + + if (!this._events || this._events === Object.getPrototypeOf(this)._events) { + this._events = new EventHandlers(); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; + }; + + // Obviously not all Emitters should be limited to 10. This function allows + // that to be increased. Set to zero for unlimited. + EventEmitter$2.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || isNaN(n)) + throw new TypeError('"n" argument must be a positive number'); + this._maxListeners = n; + return this; + }; + + function $getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter$2.defaultMaxListeners; + return that._maxListeners; + } + + EventEmitter$2.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); + }; + + // These standalone emit* functions are used to optimize calling of event + // handlers for fast cases because emit() itself often has a variable number of + // arguments and can be deoptimized because of that. These functions always have + // the same number of arguments and thus do not get deoptimized, so the code + // inside them can execute faster. + function emitNone(handler, isFn, self) { + if (isFn) + handler.call(self); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self); + } + } + function emitOne(handler, isFn, self, arg1) { + if (isFn) + handler.call(self, arg1); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1); + } + } + function emitTwo(handler, isFn, self, arg1, arg2) { + if (isFn) + handler.call(self, arg1, arg2); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1, arg2); + } + } + function emitThree(handler, isFn, self, arg1, arg2, arg3) { + if (isFn) + handler.call(self, arg1, arg2, arg3); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].call(self, arg1, arg2, arg3); + } + } + + function emitMany(handler, isFn, self, args) { + if (isFn) + handler.apply(self, args); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].apply(self, args); + } + } + + EventEmitter$2.prototype.emit = function emit(type) { + var er, handler, len, args, i, events, domain; + var doError = (type === 'error'); + + events = this._events; + if (events) + doError = (doError && events.error == null); + else if (!doError) + return false; + + domain = this.domain; + + // If there is no 'error' event listener then throw. + if (doError) { + er = arguments[1]; + if (domain) { + if (!er) + er = new Error('Uncaught, unspecified "error" event'); + er.domainEmitter = this; + er.domain = domain; + er.domainThrown = false; + domain.emit('error', er); + } else if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + return false; + } + + handler = events[type]; + + if (!handler) + return false; + + var isFn = typeof handler === 'function'; + len = arguments.length; + switch (len) { + // fast cases + case 1: + emitNone(handler, isFn, this); + break; + case 2: + emitOne(handler, isFn, this, arguments[1]); + break; + case 3: + emitTwo(handler, isFn, this, arguments[1], arguments[2]); + break; + case 4: + emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); + break; + // slower + default: + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + emitMany(handler, isFn, this, args); + } + + return true; + }; + + function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + + events = target._events; + if (!events) { + events = target._events = new EventHandlers(); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (!existing) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : + [existing, listener]; + } else { + // If we've already got an array, just append. + if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + } + + // Check for listener leak + if (!existing.warned) { + m = $getMaxListeners(target); + if (m && m > 0 && existing.length > m) { + existing.warned = true; + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + type + ' listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + emitWarning$1(w); + } + } + } + + return target; + } + function emitWarning$1(e) { + typeof console.warn === 'function' ? console.warn(e) : console.log(e); + } + EventEmitter$2.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); + }; + + EventEmitter$2.prototype.on = EventEmitter$2.prototype.addListener; + + EventEmitter$2.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + + function _onceWrap(target, type, listener) { + var fired = false; + function g() { + target.removeListener(type, g); + if (!fired) { + fired = true; + listener.apply(target, arguments); + } + } + g.listener = listener; + return g; + } + + EventEmitter$2.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + this.on(type, _onceWrap(this, type, listener)); + return this; + }; + + EventEmitter$2.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + + // emits a 'removeListener' event iff the listener was removed + EventEmitter$2.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + if (typeof listener !== 'function') + throw new TypeError('"listener" argument must be a function'); + + events = this._events; + if (!events) + return this; + + list = events[type]; + if (!list) + return this; + + if (list === listener || (list.listener && list.listener === listener)) { + if (--this._eventsCount === 0) + this._events = new EventHandlers(); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list[0] = undefined; + if (--this._eventsCount === 0) { + this._events = new EventHandlers(); + return this; + } else { + delete events[type]; + } + } else { + spliceOne(list, position); + } + + if (events.removeListener) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + + EventEmitter$2.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events; + + events = this._events; + if (!events) + return this; + + // not listening for removeListener, no need to emit + if (!events.removeListener) { + if (arguments.length === 0) { + this._events = new EventHandlers(); + this._eventsCount = 0; + } else if (events[type]) { + if (--this._eventsCount === 0) + this._events = new EventHandlers(); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + for (var i = 0, key; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = new EventHandlers(); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + do { + this.removeListener(type, listeners[listeners.length - 1]); + } while (listeners[0]); + } + + return this; + }; + + EventEmitter$2.prototype.listeners = function listeners(type) { + var evlistener; + var ret; + var events = this._events; + + if (!events) + ret = []; + else { + evlistener = events[type]; + if (!evlistener) + ret = []; + else if (typeof evlistener === 'function') + ret = [evlistener.listener || evlistener]; + else + ret = unwrapListeners(evlistener); + } + + return ret; + }; + + EventEmitter$2.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount$1.call(emitter, type); + } + }; + + EventEmitter$2.prototype.listenerCount = listenerCount$1; + function listenerCount$1(type) { + var events = this._events; + + if (events) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener) { + return evlistener.length; + } + } + + return 0; + } + + EventEmitter$2.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; + }; + + // About 1.5x faster than the two-arg version of Array#splice(). + function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) + list[i] = list[k]; + list.pop(); + } + + function arrayClone(arr, i) { + var copy = new Array(i); + while (i--) + copy[i] = arr[i]; + return copy; + } + + function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; + } + + var lookup$1 = []; + var revLookup$1 = []; + var Arr$1 = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + var inited$1 = false; + function init$1 () { + inited$1 = true; + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for (var i = 0, len = code.length; i < len; ++i) { + lookup$1[i] = code[i]; + revLookup$1[code.charCodeAt(i)] = i; + } + + revLookup$1['-'.charCodeAt(0)] = 62; + revLookup$1['_'.charCodeAt(0)] = 63; + } + + function toByteArray$1 (b64) { + if (!inited$1) { + init$1(); + } + var i, j, l, tmp, placeHolders, arr; + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0; + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr$1(len * 3 / 4 - placeHolders); + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? len - 4 : len; + + var L = 0; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (revLookup$1[b64.charCodeAt(i)] << 18) | (revLookup$1[b64.charCodeAt(i + 1)] << 12) | (revLookup$1[b64.charCodeAt(i + 2)] << 6) | revLookup$1[b64.charCodeAt(i + 3)]; + arr[L++] = (tmp >> 16) & 0xFF; + arr[L++] = (tmp >> 8) & 0xFF; + arr[L++] = tmp & 0xFF; + } + + if (placeHolders === 2) { + tmp = (revLookup$1[b64.charCodeAt(i)] << 2) | (revLookup$1[b64.charCodeAt(i + 1)] >> 4); + arr[L++] = tmp & 0xFF; + } else if (placeHolders === 1) { + tmp = (revLookup$1[b64.charCodeAt(i)] << 10) | (revLookup$1[b64.charCodeAt(i + 1)] << 4) | (revLookup$1[b64.charCodeAt(i + 2)] >> 2); + arr[L++] = (tmp >> 8) & 0xFF; + arr[L++] = tmp & 0xFF; + } + + return arr + } + + function tripletToBase64$1 (num) { + return lookup$1[num >> 18 & 0x3F] + lookup$1[num >> 12 & 0x3F] + lookup$1[num >> 6 & 0x3F] + lookup$1[num & 0x3F] + } + + function encodeChunk$1 (uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]); + output.push(tripletToBase64$1(tmp)); + } + return output.join('') + } + + function fromByteArray$1 (uint8) { + if (!inited$1) { + init$1(); + } + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var output = ''; + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk$1(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + output += lookup$1[tmp >> 2]; + output += lookup$1[(tmp << 4) & 0x3F]; + output += '=='; + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + (uint8[len - 1]); + output += lookup$1[tmp >> 10]; + output += lookup$1[(tmp >> 4) & 0x3F]; + output += lookup$1[(tmp << 2) & 0x3F]; + output += '='; + } + + parts.push(output); + + return parts.join('') + } + + function read$1 (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? (nBytes - 1) : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) + } + + function write$1 (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0); + var i = isLE ? 0 : (nBytes - 1); + var d = isLE ? 1 : -1; + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; + } + + var toString$2 = {}.toString; + + var isArray$2 = Array.isArray || function (arr) { + return toString$2.call(arr) == '[object Array]'; + }; + + var INSPECT_MAX_BYTES$1 = 50; + + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + Buffer$1.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined + ? global$1.TYPED_ARRAY_SUPPORT + : true; + + function kMaxLength$1 () { + return Buffer$1.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff + } + + function createBuffer$1 (that, length) { + if (kMaxLength$1() < length) { + throw new RangeError('Invalid typed array length') + } + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length); + that.__proto__ = Buffer$1.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer$1(length); + } + that.length = length; + } + + return that + } + + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + function Buffer$1 (arg, encodingOrOffset, length) { + if (!Buffer$1.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer$1)) { + return new Buffer$1(arg, encodingOrOffset, length) + } + + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe$1(this, arg) + } + return from$1(this, arg, encodingOrOffset, length) + } + + Buffer$1.poolSize = 8192; // not used by this implementation + + // TODO: Legacy, not needed anymore. Remove in next major version. + Buffer$1._augment = function (arr) { + arr.__proto__ = Buffer$1.prototype; + return arr + }; + + function from$1 (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer$1(that, value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString$1(that, value, encodingOrOffset) + } + + return fromObject$1(that, value) + } + + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + Buffer$1.from = function (value, encodingOrOffset, length) { + return from$1(null, value, encodingOrOffset, length) + }; + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + Buffer$1.prototype.__proto__ = Uint8Array.prototype; + Buffer$1.__proto__ = Uint8Array; + } + + function assertSize$1 (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } + } + + function alloc$1 (that, size, fill, encoding) { + assertSize$1(size); + if (size <= 0) { + return createBuffer$1(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer$1(that, size).fill(fill, encoding) + : createBuffer$1(that, size).fill(fill) + } + return createBuffer$1(that, size) + } + + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + Buffer$1.alloc = function (size, fill, encoding) { + return alloc$1(null, size, fill, encoding) + }; + + function allocUnsafe$1 (that, size) { + assertSize$1(size); + that = createBuffer$1(that, size < 0 ? 0 : checked$1(size) | 0); + if (!Buffer$1.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0; + } + } + return that + } + + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + Buffer$1.allocUnsafe = function (size) { + return allocUnsafe$1(null, size) + }; + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + Buffer$1.allocUnsafeSlow = function (size) { + return allocUnsafe$1(null, size) + }; + + function fromString$1 (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + + if (!Buffer$1.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + var length = byteLength$1(string, encoding) | 0; + that = createBuffer$1(that, length); + + var actual = that.write(string, encoding); + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual); + } + + return that + } + + function fromArrayLike$1 (that, array) { + var length = array.length < 0 ? 0 : checked$1(array.length) | 0; + that = createBuffer$1(that, length); + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255; + } + return that + } + + function fromArrayBuffer$1 (that, array, byteOffset, length) { + array.byteLength; // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array); + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset); + } else { + array = new Uint8Array(array, byteOffset, length); + } + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array; + that.__proto__ = Buffer$1.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike$1(that, array); + } + return that + } + + function fromObject$1 (that, obj) { + if (internalIsBuffer$1(obj)) { + var len = checked$1(obj.length) | 0; + that = createBuffer$1(that, len); + + if (that.length === 0) { + return that + } + + obj.copy(that, 0, 0, len); + return that + } + + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan$1(obj.length)) { + return createBuffer$1(that, 0) + } + return fromArrayLike$1(that, obj) + } + + if (obj.type === 'Buffer' && isArray$2(obj.data)) { + return fromArrayLike$1(that, obj.data) + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') + } + + function checked$1 (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength$1()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength$1().toString(16) + ' bytes') + } + return length | 0 + } + Buffer$1.isBuffer = isBuffer$2; + function internalIsBuffer$1 (b) { + return !!(b != null && b._isBuffer) + } + + Buffer$1.compare = function compare (a, b) { + if (!internalIsBuffer$1(a) || !internalIsBuffer$1(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + }; + + Buffer$1.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } + }; + + Buffer$1.concat = function concat (list, length) { + if (!isArray$2(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer$1.alloc(0) + } + + var i; + if (length === undefined) { + length = 0; + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + + var buffer = Buffer$1.allocUnsafe(length); + var pos = 0; + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + if (!internalIsBuffer$1(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer + }; + + function byteLength$1 (string, encoding) { + if (internalIsBuffer$1(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string; + } + + var len = string.length; + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes$1(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes$1(string).length + default: + if (loweredCase) return utf8ToBytes$1(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + } + Buffer$1.byteLength = byteLength$1; + + function slowToString$1 (encoding, start, end) { + var loweredCase = false; + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0; + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length; + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0; + start >>>= 0; + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8'; + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice$1(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice$1(this, start, end) + + case 'ascii': + return asciiSlice$1(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice$1(this, start, end) + + case 'base64': + return base64Slice$1(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice$1(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } + } + + // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect + // Buffer instances. + Buffer$1.prototype._isBuffer = true; + + function swap$1 (b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; + } + + Buffer$1.prototype.swap16 = function swap16 () { + var len = this.length; + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap$1(this, i, i + 1); + } + return this + }; + + Buffer$1.prototype.swap32 = function swap32 () { + var len = this.length; + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap$1(this, i, i + 3); + swap$1(this, i + 1, i + 2); + } + return this + }; + + Buffer$1.prototype.swap64 = function swap64 () { + var len = this.length; + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap$1(this, i, i + 7); + swap$1(this, i + 1, i + 6); + swap$1(this, i + 2, i + 5); + swap$1(this, i + 3, i + 4); + } + return this + }; + + Buffer$1.prototype.toString = function toString () { + var length = this.length | 0; + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice$1(this, 0, length) + return slowToString$1.apply(this, arguments) + }; + + Buffer$1.prototype.equals = function equals (b) { + if (!internalIsBuffer$1(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer$1.compare(this, b) === 0 + }; + + Buffer$1.prototype.inspect = function inspect () { + var str = ''; + var max = INSPECT_MAX_BYTES$1; + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); + if (this.length > max) str += ' ... '; + } + return '' + }; + + Buffer$1.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!internalIsBuffer$1(target)) { + throw new TypeError('Argument must be a Buffer') + } + + if (start === undefined) { + start = 0; + } + if (end === undefined) { + end = target ? target.length : 0; + } + if (thisStart === undefined) { + thisStart = 0; + } + if (thisEnd === undefined) { + thisEnd = this.length; + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + + if (this === target) return 0 + + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + }; + + // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + function bidirectionalIndexOf$1 (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + byteOffset = +byteOffset; // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1); + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0; + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer$1.from(val, encoding); + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (internalIsBuffer$1(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf$1(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + if (Buffer$1.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf$1(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') + } + + function arrayIndexOf$1 (arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i; + if (dir) { + var foundIndex = -1; + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + for (i = byteOffset; i >= 0; i--) { + var found = true; + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break + } + } + if (found) return i + } + } + + return -1 + } + + Buffer$1.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 + }; + + Buffer$1.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf$1(this, val, byteOffset, encoding, true) + }; + + Buffer$1.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf$1(this, val, byteOffset, encoding, false) + }; + + function hexWrite$1 (buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + if (!length) { + length = remaining; + } else { + length = Number(length); + if (length > remaining) { + length = remaining; + } + } + + // must be an even number of digits + var strLen = string.length; + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(parsed)) return i + buf[offset + i] = parsed; + } + return i + } + + function utf8Write$1 (buf, string, offset, length) { + return blitBuffer$1(utf8ToBytes$1(string, buf.length - offset), buf, offset, length) + } + + function asciiWrite$1 (buf, string, offset, length) { + return blitBuffer$1(asciiToBytes$1(string), buf, offset, length) + } + + function latin1Write$1 (buf, string, offset, length) { + return asciiWrite$1(buf, string, offset, length) + } + + function base64Write$1 (buf, string, offset, length) { + return blitBuffer$1(base64ToBytes$1(string), buf, offset, length) + } + + function ucs2Write$1 (buf, string, offset, length) { + return blitBuffer$1(utf16leToBytes$1(string, buf.length - offset), buf, offset, length) + } + + Buffer$1.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0; + if (isFinite(length)) { + length = length | 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8'; + + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite$1(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write$1(this, string, offset, length) + + case 'ascii': + return asciiWrite$1(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write$1(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write$1(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write$1(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + }; + + Buffer$1.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } + }; + + function base64Slice$1 (buf, start, end) { + if (start === 0 && end === buf.length) { + return fromByteArray$1(buf) + } else { + return fromByteArray$1(buf.slice(start, end)) + } + } + + function utf8Slice$1 (buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + + var i = start; + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1; + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + break + case 2: + secondByte = buf[i + 1]; + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F); + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + break + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F); + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + break + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F); + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + res.push(codePoint); + i += bytesPerSequence; + } + + return decodeCodePointsArray$1(res) + } + + // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + var MAX_ARGUMENTS_LENGTH$1 = 0x1000; + + function decodeCodePointsArray$1 (codePoints) { + var len = codePoints.length; + if (len <= MAX_ARGUMENTS_LENGTH$1) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = ''; + var i = 0; + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH$1) + ); + } + return res + } + + function asciiSlice$1 (buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + return ret + } + + function latin1Slice$1 (buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + return ret + } + + function hexSlice$1 (buf, start, end) { + var len = buf.length; + + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + + var out = ''; + for (var i = start; i < end; ++i) { + out += toHex$1(buf[i]); + } + return out + } + + function utf16leSlice$1 (buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + return res + } + + Buffer$1.prototype.slice = function slice (start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + + if (end < start) end = start; + + var newBuf; + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end); + newBuf.__proto__ = Buffer$1.prototype; + } else { + var sliceLen = end - start; + newBuf = new Buffer$1(sliceLen, undefined); + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start]; + } + } + + return newBuf + }; + + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + function checkOffset$1 (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') + } + + Buffer$1.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + return val + }; + + Buffer$1.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + checkOffset$1(offset, byteLength, this.length); + } + + var val = this[offset + --byteLength]; + var mul = 1; + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + + return val + }; + + Buffer$1.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 1, this.length); + return this[offset] + }; + + Buffer$1.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + return this[offset] | (this[offset + 1] << 8) + }; + + Buffer$1.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + return (this[offset] << 8) | this[offset + 1] + }; + + Buffer$1.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) + }; + + Buffer$1.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) + }; + + Buffer$1.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + mul *= 0x80; + + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + + return val + }; + + Buffer$1.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + mul *= 0x80; + + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + + return val + }; + + Buffer$1.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 1, this.length); + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) + }; + + Buffer$1.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + var val = this[offset] | (this[offset + 1] << 8); + return (val & 0x8000) ? val | 0xFFFF0000 : val + }; + + Buffer$1.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + var val = this[offset + 1] | (this[offset] << 8); + return (val & 0x8000) ? val | 0xFFFF0000 : val + }; + + Buffer$1.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) + }; + + Buffer$1.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) + }; + + Buffer$1.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return read$1(this, offset, true, 23, 4) + }; + + Buffer$1.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return read$1(this, offset, false, 23, 4) + }; + + Buffer$1.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 8, this.length); + return read$1(this, offset, true, 52, 8) + }; + + Buffer$1.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 8, this.length); + return read$1(this, offset, false, 52, 8) + }; + + function checkInt$1 (buf, value, offset, ext, max, min) { + if (!internalIsBuffer$1(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') + } + + Buffer$1.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt$1(this, value, offset, byteLength, maxBytes, 0); + } + + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF; + } + + return offset + byteLength + }; + + Buffer$1.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt$1(this, value, offset, byteLength, maxBytes, 0); + } + + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF; + } + + return offset + byteLength + }; + + Buffer$1.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 1, 0xff, 0); + if (!Buffer$1.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + this[offset] = (value & 0xff); + return offset + 1 + }; + + function objectWriteUInt16$1 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1; + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8; + } + } + + Buffer$1.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0xffff, 0); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + } else { + objectWriteUInt16$1(this, value, offset, true); + } + return offset + 2 + }; + + Buffer$1.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0xffff, 0); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8); + this[offset + 1] = (value & 0xff); + } else { + objectWriteUInt16$1(this, value, offset, false); + } + return offset + 2 + }; + + function objectWriteUInt32$1 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1; + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff; + } + } + + Buffer$1.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0xffffffff, 0); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24); + this[offset + 2] = (value >>> 16); + this[offset + 1] = (value >>> 8); + this[offset] = (value & 0xff); + } else { + objectWriteUInt32$1(this, value, offset, true); + } + return offset + 4 + }; + + Buffer$1.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0xffffffff, 0); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24); + this[offset + 1] = (value >>> 16); + this[offset + 2] = (value >>> 8); + this[offset + 3] = (value & 0xff); + } else { + objectWriteUInt32$1(this, value, offset, false); + } + return offset + 4 + }; + + Buffer$1.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + + checkInt$1(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF; + } + + return offset + byteLength + }; + + Buffer$1.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + + checkInt$1(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF; + } + + return offset + byteLength + }; + + Buffer$1.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 1, 0x7f, -0x80); + if (!Buffer$1.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + if (value < 0) value = 0xff + value + 1; + this[offset] = (value & 0xff); + return offset + 1 + }; + + Buffer$1.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0x7fff, -0x8000); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + } else { + objectWriteUInt16$1(this, value, offset, true); + } + return offset + 2 + }; + + Buffer$1.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0x7fff, -0x8000); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8); + this[offset + 1] = (value & 0xff); + } else { + objectWriteUInt16$1(this, value, offset, false); + } + return offset + 2 + }; + + Buffer$1.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + this[offset + 2] = (value >>> 16); + this[offset + 3] = (value >>> 24); + } else { + objectWriteUInt32$1(this, value, offset, true); + } + return offset + 4 + }; + + Buffer$1.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24); + this[offset + 1] = (value >>> 16); + this[offset + 2] = (value >>> 8); + this[offset + 3] = (value & 0xff); + } else { + objectWriteUInt32$1(this, value, offset, false); + } + return offset + 4 + }; + + function checkIEEE754$1 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') + } + + function writeFloat$1 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754$1(buf, value, offset, 4); + } + write$1(buf, value, offset, littleEndian, 23, 4); + return offset + 4 + } + + Buffer$1.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat$1(this, value, offset, true, noAssert) + }; + + Buffer$1.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat$1(this, value, offset, false, noAssert) + }; + + function writeDouble$1 (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754$1(buf, value, offset, 8); + } + write$1(buf, value, offset, littleEndian, 52, 8); + return offset + 8 + } + + Buffer$1.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble$1(this, value, offset, true, noAssert) + }; + + Buffer$1.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble$1(this, value, offset, false, noAssert) + }; + + // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + Buffer$1.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length; + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + + var len = end - start; + var i; + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else if (len < 1000 || !Buffer$1.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ); + } + + return len + }; + + // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + Buffer$1.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + if (val.length === 1) { + var code = val.charCodeAt(0); + if (code < 256) { + val = code; + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer$1.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255; + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + + if (!val) val = 0; + + var i; + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = internalIsBuffer$1(val) + ? val + : utf8ToBytes$1(new Buffer$1(val, encoding).toString()); + var len = bytes.length; + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + + return this + }; + + // HELPER FUNCTIONS + // ================ + + var INVALID_BASE64_RE$1 = /[^+\/0-9A-Za-z-_]/g; + + function base64clean$1 (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim$1(str).replace(INVALID_BASE64_RE$1, ''); + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '='; + } + return str + } + + function stringtrim$1 (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') + } + + function toHex$1 (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) + } + + function utf8ToBytes$1 (string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue + } + + // valid lead + leadSurrogate = codePoint; + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + + leadSurrogate = null; + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } else { + throw new Error('Invalid code point') + } + } + + return bytes + } + + function asciiToBytes$1 (str) { + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + return byteArray + } + + function utf16leToBytes$1 (str, units) { + var c, hi, lo; + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + + return byteArray + } + + + function base64ToBytes$1 (str) { + return toByteArray$1(base64clean$1(str)) + } + + function blitBuffer$1 (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i]; + } + return i + } + + function isnan$1 (val) { + return val !== val // eslint-disable-line no-self-compare + } + + + // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence + // The _isBuffer check is for Safari 5-7 support, because it's missing + // Object.prototype.constructor. Remove this eventually + function isBuffer$2(obj) { + return obj != null && (!!obj._isBuffer || isFastBuffer$1(obj) || isSlowBuffer$1(obj)) + } + + function isFastBuffer$1 (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) + } + + // For Node v0.10 support. Remove this eventually. + function isSlowBuffer$1 (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer$1(obj.slice(0, 0)) + } + + // shim for using process in browser + // based off https://github.com/defunctzombie/node-process/blob/master/browser.js + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); + } + var cachedSetTimeout = defaultSetTimout; + var cachedClearTimeout = defaultClearTimeout; + if (typeof global$1.setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } + if (typeof global$1.clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } + + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + function nextTick(fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + } + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + var title = 'browser'; + var platform = 'browser'; + var browser$3 = true; + var env = {}; + var argv = []; + var version$1 = ''; // empty string to avoid regexp issues + var versions = {}; + var release = {}; + var config = {}; + + function noop() {} + + var on = noop; + var addListener = noop; + var once = noop; + var off = noop; + var removeListener = noop; + var removeAllListeners = noop; + var emit = noop; + + function binding(name) { + throw new Error('process.binding is not supported'); + } + + function cwd () { return '/' } + function chdir (dir) { + throw new Error('process.chdir is not supported'); + }function umask() { return 0; } + + // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js + var performance = global$1.performance || {}; + var performanceNow = + performance.now || + performance.mozNow || + performance.msNow || + performance.oNow || + performance.webkitNow || + function(){ return (new Date()).getTime() }; + + // generate timestamp or delta + // see http://nodejs.org/api/process.html#process_process_hrtime + function hrtime(previousTimestamp){ + var clocktime = performanceNow.call(performance)*1e-3; + var seconds = Math.floor(clocktime); + var nanoseconds = Math.floor((clocktime%1)*1e9); + if (previousTimestamp) { + seconds = seconds - previousTimestamp[0]; + nanoseconds = nanoseconds - previousTimestamp[1]; + if (nanoseconds<0) { + seconds--; + nanoseconds += 1e9; + } + } + return [seconds,nanoseconds] + } + + var startTime = new Date(); + function uptime() { + var currentTime = new Date(); + var dif = currentTime - startTime; + return dif / 1000; + } + + var browser$1$1 = { + nextTick: nextTick, + title: title, + browser: browser$3, + env: env, + argv: argv, + version: version$1, + versions: versions, + on: on, + addListener: addListener, + once: once, + off: off, + removeListener: removeListener, + removeAllListeners: removeAllListeners, + emit: emit, + binding: binding, + cwd: cwd, + chdir: chdir, + umask: umask, + hrtime: hrtime, + platform: platform, + release: release, + config: config, + uptime: uptime + }; + + var process = browser$1$1; + + var inherits$2; + if (typeof Object.create === 'function'){ + inherits$2 = function inherits(ctor, superCtor) { + // implementation from standard node.js 'util' module + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; + } else { + inherits$2 = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; + } + var inherits$3 = inherits$2; + + var formatRegExp = /%[sdj%]/g; + function format$1(f) { + if (!isString$1(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; + } + + // Mark that a method should not be used. + // Returns a modified function which warns once by default. + // If --no-deprecation is set, then it is a no-op. + function deprecate$1(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global$1.process)) { + return function() { + return deprecate$1(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; + } + + var debugs = {}; + var debugEnviron; + function debuglog(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = 0; + debugs[set] = function() { + var msg = format$1.apply(null, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; + } + + /** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ + /* legacy: obj, showHidden, depth, colors*/ + function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + _extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); + } + + // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] + }; + + // Don't use 'blue' not visible on cmd.exe + inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' + }; + + + function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } + } + + + function stylizeNoColor(str, styleType) { + return str; + } + + + function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; + } + + + function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString$1(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError$1(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError$1(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray$1(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError$1(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); + } + + + function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString$1(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); + } + + + function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; + } + + + function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; + } + + + function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; + } + + + function reduceToSingleString(output, base, braces) { + var length = output.reduce(function(prev, cur) { + if (cur.indexOf('\n') >= 0) ; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; + } + + + // NOTE: These type checking functions intentionally don't use `instanceof` + // because it is fragile and can be easily faked with `Object.create()`. + function isArray$1(ar) { + return Array.isArray(ar); + } + + function isBoolean(arg) { + return typeof arg === 'boolean'; + } + + function isNull(arg) { + return arg === null; + } + + function isNullOrUndefined(arg) { + return arg == null; + } + + function isNumber(arg) { + return typeof arg === 'number'; + } + + function isString$1(arg) { + return typeof arg === 'string'; + } + + function isSymbol(arg) { + return typeof arg === 'symbol'; + } + + function isUndefined(arg) { + return arg === void 0; + } + + function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; + } + + function isObject(arg) { + return typeof arg === 'object' && arg !== null; + } + + function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; + } + + function isError$1(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); + } + + function isFunction(arg) { + return typeof arg === 'function'; + } + + function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; + } + + function isBuffer$1(maybeBuf) { + return isBuffer$2(maybeBuf); + } + + function objectToString(o) { + return Object.prototype.toString.call(o); + } + + + function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); + } + + + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + + // 26 Feb 16:19:34 + function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); + } + + + // log is just a thin wrapper to console.log that prepends a timestamp + function log() { + console.log('%s - %s', timestamp(), format$1.apply(null, arguments)); + } + + function _extend(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + + var util = { + inherits: inherits$3, + _extend: _extend, + log: log, + isBuffer: isBuffer$1, + isPrimitive: isPrimitive, + isFunction: isFunction, + isError: isError$1, + isDate: isDate, + isObject: isObject, + isRegExp: isRegExp, + isUndefined: isUndefined, + isSymbol: isSymbol, + isString: isString$1, + isNumber: isNumber, + isNullOrUndefined: isNullOrUndefined, + isNull: isNull, + isBoolean: isBoolean, + isArray: isArray$1, + inspect: inspect, + deprecate: deprecate$1, + format: format$1, + debuglog: debuglog + }; + + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + var inited = false; + function init () { + inited = true; + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; + } + + revLookup['-'.charCodeAt(0)] = 62; + revLookup['_'.charCodeAt(0)] = 63; + } + + function toByteArray (b64) { + if (!inited) { + init(); + } + var i, j, l, tmp, placeHolders, arr; + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0; + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(len * 3 / 4 - placeHolders); + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? len - 4 : len; + + var L = 0; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]; + arr[L++] = (tmp >> 16) & 0xFF; + arr[L++] = (tmp >> 8) & 0xFF; + arr[L++] = tmp & 0xFF; + } + + if (placeHolders === 2) { + tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4); + arr[L++] = tmp & 0xFF; + } else if (placeHolders === 1) { + tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2); + arr[L++] = (tmp >> 8) & 0xFF; + arr[L++] = tmp & 0xFF; + } + + return arr + } + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] + } + + function encodeChunk (uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]); + output.push(tripletToBase64(tmp)); + } + return output.join('') + } + + function fromByteArray (uint8) { + if (!inited) { + init(); + } + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var output = ''; + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + output += lookup[tmp >> 2]; + output += lookup[(tmp << 4) & 0x3F]; + output += '=='; + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + (uint8[len - 1]); + output += lookup[tmp >> 10]; + output += lookup[(tmp >> 4) & 0x3F]; + output += lookup[(tmp << 2) & 0x3F]; + output += '='; + } + + parts.push(output); + + return parts.join('') + } + + function read (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? (nBytes - 1) : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) + } + + function write (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0); + var i = isLE ? 0 : (nBytes - 1); + var d = isLE ? 1 : -1; + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; + } + + var toString$1 = {}.toString; + + var isArray = Array.isArray || function (arr) { + return toString$1.call(arr) == '[object Array]'; + }; + + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + + var INSPECT_MAX_BYTES = 50; + + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + Buffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined + ? global$1.TYPED_ARRAY_SUPPORT + : true; + + function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff + } + + function createBuffer (that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length') + } + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length); + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length); + } + that.length = length; + } + + return that + } + + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } + + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe(this, arg) + } + return from(this, arg, encodingOrOffset, length) + } + + Buffer.poolSize = 8192; // not used by this implementation + + // TODO: Legacy, not needed anymore. Remove in next major version. + Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype; + return arr + }; + + function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) + } + + return fromObject(that, value) + } + + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length) + }; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype; + Buffer.__proto__ = Uint8Array; + } + + function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } + } + + function alloc (that, size, fill, encoding) { + assertSize(size); + if (size <= 0) { + return createBuffer(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(that, size).fill(fill, encoding) + : createBuffer(that, size).fill(fill) + } + return createBuffer(that, size) + } + + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) + }; + + function allocUnsafe (that, size) { + assertSize(size); + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0); + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0; + } + } + return that + } + + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size) + }; + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size) + }; + + function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + var length = byteLength(string, encoding) | 0; + that = createBuffer(that, length); + + var actual = that.write(string, encoding); + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual); + } + + return that + } + + function fromArrayLike (that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + that = createBuffer(that, length); + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255; + } + return that + } + + function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength; // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array); + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset); + } else { + array = new Uint8Array(array, byteOffset, length); + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array; + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array); + } + return that + } + + function fromObject (that, obj) { + if (internalIsBuffer(obj)) { + var len = checked(obj.length) | 0; + that = createBuffer(that, len); + + if (that.length === 0) { + return that + } + + obj.copy(that, 0, 0, len); + return that + } + + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0) + } + return fromArrayLike(that, obj) + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data) + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') + } + + function checked (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 + } + Buffer.isBuffer = isBuffer; + function internalIsBuffer (b) { + return !!(b != null && b._isBuffer) + } + + Buffer.compare = function compare (a, b) { + if (!internalIsBuffer(a) || !internalIsBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + }; + + Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } + }; + + Buffer.concat = function concat (list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i; + if (length === undefined) { + length = 0; + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + + var buffer = Buffer.allocUnsafe(length); + var pos = 0; + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + if (!internalIsBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer + }; + + function byteLength (string, encoding) { + if (internalIsBuffer(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string; + } + + var len = string.length; + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + } + Buffer.byteLength = byteLength; + + function slowToString (encoding, start, end) { + var loweredCase = false; + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0; + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length; + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0; + start >>>= 0; + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8'; + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } + } + + // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect + // Buffer instances. + Buffer.prototype._isBuffer = true; + + function swap (b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; + } + + Buffer.prototype.swap16 = function swap16 () { + var len = this.length; + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + return this + }; + + Buffer.prototype.swap32 = function swap32 () { + var len = this.length; + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + return this + }; + + Buffer.prototype.swap64 = function swap64 () { + var len = this.length; + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + return this + }; + + Buffer.prototype.toString = function toString () { + var length = this.length | 0; + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) + }; + + Buffer.prototype.equals = function equals (b) { + if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 + }; + + Buffer.prototype.inspect = function inspect () { + var str = ''; + var max = INSPECT_MAX_BYTES; + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); + if (this.length > max) str += ' ... '; + } + return '' + }; + + Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!internalIsBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } + + if (start === undefined) { + start = 0; + } + if (end === undefined) { + end = target ? target.length : 0; + } + if (thisStart === undefined) { + thisStart = 0; + } + if (thisEnd === undefined) { + thisEnd = this.length; + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + + if (this === target) return 0 + + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 + }; + + // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + byteOffset = +byteOffset; // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1); + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0; + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding); + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (internalIsBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + if (Buffer.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') + } + + function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i; + if (dir) { + var foundIndex = -1; + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + for (i = byteOffset; i >= 0; i--) { + var found = true; + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break + } + } + if (found) return i + } + } + + return -1 + } + + Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 + }; + + Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) + }; + + Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) + }; + + function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + if (!length) { + length = remaining; + } else { + length = Number(length); + if (length > remaining) { + length = remaining; + } + } + + // must be an even number of digits + var strLen = string.length; + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(parsed)) return i + buf[offset + i] = parsed; + } + return i + } + + function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + } + + function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) + } + + function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) + } + + function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) + } + + function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + } + + Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0; + if (isFinite(length)) { + length = length | 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8'; + + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + }; + + Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } + }; + + function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return fromByteArray(buf) + } else { + return fromByteArray(buf.slice(start, end)) + } + } + + function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + + var i = start; + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1; + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + break + case 2: + secondByte = buf[i + 1]; + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F); + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + break + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F); + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + break + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F); + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + res.push(codePoint); + i += bytesPerSequence; + } + + return decodeCodePointsArray(res) + } + + // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + var MAX_ARGUMENTS_LENGTH = 0x1000; + + function decodeCodePointsArray (codePoints) { + var len = codePoints.length; + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = ''; + var i = 0; + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ); + } + return res + } + + function asciiSlice (buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + return ret + } + + function latin1Slice (buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + return ret + } + + function hexSlice (buf, start, end) { + var len = buf.length; + + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + + var out = ''; + for (var i = start; i < end; ++i) { + out += toHex(buf[i]); + } + return out + } + + function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + return res + } + + Buffer.prototype.slice = function slice (start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + + if (end < start) end = start; + + var newBuf; + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end); + newBuf.__proto__ = Buffer.prototype; + } else { + var sliceLen = end - start; + newBuf = new Buffer(sliceLen, undefined); + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start]; + } + } + + return newBuf + }; + + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') + } + + Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + return val + }; + + Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + checkOffset(offset, byteLength, this.length); + } + + var val = this[offset + --byteLength]; + var mul = 1; + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + + return val + }; + + Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset] + }; + + Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | (this[offset + 1] << 8) + }; + + Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return (this[offset] << 8) | this[offset + 1] + }; + + Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) + }; + + Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) + }; + + Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + mul *= 0x80; + + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + + return val + }; + + Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + mul *= 0x80; + + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + + return val + }; + + Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) + }; + + Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset] | (this[offset + 1] << 8); + return (val & 0x8000) ? val | 0xFFFF0000 : val + }; + + Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset + 1] | (this[offset] << 8); + return (val & 0x8000) ? val | 0xFFFF0000 : val + }; + + Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) + }; + + Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) + }; + + Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return read(this, offset, true, 23, 4) + }; + + Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return read(this, offset, false, 23, 4) + }; + + Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return read(this, offset, true, 52, 8) + }; + + Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return read(this, offset, false, 52, 8) + }; + + function checkInt (buf, value, offset, ext, max, min) { + if (!internalIsBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') + } + + Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF; + } + + return offset + byteLength + }; + + Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF; + } + + return offset + byteLength + }; + + Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + this[offset] = (value & 0xff); + return offset + 1 + }; + + function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1; + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8; + } + } + + Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + } else { + objectWriteUInt16(this, value, offset, true); + } + return offset + 2 + }; + + Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8); + this[offset + 1] = (value & 0xff); + } else { + objectWriteUInt16(this, value, offset, false); + } + return offset + 2 + }; + + function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1; + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff; + } + } + + Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24); + this[offset + 2] = (value >>> 16); + this[offset + 1] = (value >>> 8); + this[offset] = (value & 0xff); + } else { + objectWriteUInt32(this, value, offset, true); + } + return offset + 4 + }; + + Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24); + this[offset + 1] = (value >>> 16); + this[offset + 2] = (value >>> 8); + this[offset + 3] = (value & 0xff); + } else { + objectWriteUInt32(this, value, offset, false); + } + return offset + 4 + }; + + Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF; + } + + return offset + byteLength + }; + + Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF; + } + + return offset + byteLength + }; + + Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + if (value < 0) value = 0xff + value + 1; + this[offset] = (value & 0xff); + return offset + 1 + }; + + Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + } else { + objectWriteUInt16(this, value, offset, true); + } + return offset + 2 + }; + + Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8); + this[offset + 1] = (value & 0xff); + } else { + objectWriteUInt16(this, value, offset, false); + } + return offset + 2 + }; + + Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff); + this[offset + 1] = (value >>> 8); + this[offset + 2] = (value >>> 16); + this[offset + 3] = (value >>> 24); + } else { + objectWriteUInt32(this, value, offset, true); + } + return offset + 4 + }; + + Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24); + this[offset + 1] = (value >>> 16); + this[offset + 2] = (value >>> 8); + this[offset + 3] = (value & 0xff); + } else { + objectWriteUInt32(this, value, offset, false); + } + return offset + 4 + }; + + function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') + } + + function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4); + } + write(buf, value, offset, littleEndian, 23, 4); + return offset + 4 + } + + Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) + }; + + Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) + }; + + function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8); + } + write(buf, value, offset, littleEndian, 52, 8); + return offset + 8 + } + + Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) + }; + + Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) + }; + + // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length; + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + + var len = end - start; + var i; + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ); + } + + return len + }; + + // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + if (val.length === 1) { + var code = val.charCodeAt(0); + if (code < 256) { + val = code; + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255; + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + + if (!val) val = 0; + + var i; + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = internalIsBuffer(val) + ? val + : utf8ToBytes(new Buffer(val, encoding).toString()); + var len = bytes.length; + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + + return this + }; + + // HELPER FUNCTIONS + // ================ + + var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g; + + function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, ''); + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '='; + } + return str + } + + function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') + } + + function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) + } + + function utf8ToBytes (string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue + } + + // valid lead + leadSurrogate = codePoint; + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + + leadSurrogate = null; + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } else { + throw new Error('Invalid code point') + } + } + + return bytes + } + + function asciiToBytes (str) { + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + return byteArray + } + + function utf16leToBytes (str, units) { + var c, hi, lo; + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + + return byteArray + } + + + function base64ToBytes (str) { + return toByteArray(base64clean(str)) + } + + function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i]; + } + return i + } + + function isnan (val) { + return val !== val // eslint-disable-line no-self-compare + } + + + // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence + // The _isBuffer check is for Safari 5-7 support, because it's missing + // Object.prototype.constructor. Remove this eventually + function isBuffer(obj) { + return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj)) + } + + function isFastBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) + } + + // For Node v0.10 support. Remove this eventually. + function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0)) + } + + function BufferList() { + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function (v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function (v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function () { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function () { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function (s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function (n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + p.data.copy(ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + // Copyright Joyent, Inc. and other Node contributors. + var isBufferEncoding = Buffer.isEncoding + || function(encoding) { + switch (encoding && encoding.toLowerCase()) { + case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; + default: return false; + } + }; + + + function assertEncoding(encoding) { + if (encoding && !isBufferEncoding(encoding)) { + throw new Error('Unknown encoding: ' + encoding); + } + } + + // StringDecoder provides an interface for efficiently splitting a series of + // buffers into a series of JS strings without breaking apart multi-byte + // characters. CESU-8 is handled as part of the UTF-8 encoding. + // + // @TODO Handling all encodings inside a single object makes it very difficult + // to reason about this code, so it should be split up in the future. + // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code + // points as used by CESU-8. + function StringDecoder(encoding) { + this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); + assertEncoding(encoding); + switch (this.encoding) { + case 'utf8': + // CESU-8 represents each of Surrogate Pair by 3-bytes + this.surrogateSize = 3; + break; + case 'ucs2': + case 'utf16le': + // UTF-16 represents each of Surrogate Pair by 2-bytes + this.surrogateSize = 2; + this.detectIncompleteChar = utf16DetectIncompleteChar; + break; + case 'base64': + // Base-64 stores 3 bytes in 4 chars, and pads the remainder. + this.surrogateSize = 3; + this.detectIncompleteChar = base64DetectIncompleteChar; + break; + default: + this.write = passThroughWrite; + return; + } + + // Enough space to store all bytes of a single character. UTF-8 needs 4 + // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). + this.charBuffer = new Buffer(6); + // Number of bytes received for the current incomplete multi-byte character. + this.charReceived = 0; + // Number of bytes expected for the current incomplete multi-byte character. + this.charLength = 0; + } + + // write decodes the given buffer and returns it as JS string that is + // guaranteed to not contain any partial multi-byte characters. Any partial + // character found at the end of the buffer is buffered up, and will be + // returned when calling write again with the remaining bytes. + // + // Note: Converting a Buffer containing an orphan surrogate to a String + // currently works, but converting a String to a Buffer (via `new Buffer`, or + // Buffer#write) will replace incomplete surrogates with the unicode + // replacement character. See https://codereview.chromium.org/121173009/ . + StringDecoder.prototype.write = function(buffer) { + var charStr = ''; + // if our last write ended with an incomplete multibyte character + while (this.charLength) { + // determine how many remaining bytes this buffer has to offer for this char + var available = (buffer.length >= this.charLength - this.charReceived) ? + this.charLength - this.charReceived : + buffer.length; + + // add the new bytes to the char buffer + buffer.copy(this.charBuffer, this.charReceived, 0, available); + this.charReceived += available; + + if (this.charReceived < this.charLength) { + // still not enough chars in this buffer? wait for more ... + return ''; + } + + // remove bytes belonging to the current character from the buffer + buffer = buffer.slice(available, buffer.length); + + // get the character that was split + charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); + + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + var charCode = charStr.charCodeAt(charStr.length - 1); + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + this.charLength += this.surrogateSize; + charStr = ''; + continue; + } + this.charReceived = this.charLength = 0; + + // if there are no more bytes in this buffer, just emit our char + if (buffer.length === 0) { + return charStr; + } + break; + } + + // determine and set charLength / charReceived + this.detectIncompleteChar(buffer); + + var end = buffer.length; + if (this.charLength) { + // buffer the incomplete character bytes we got + buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); + end -= this.charReceived; + } + + charStr += buffer.toString(this.encoding, 0, end); + + var end = charStr.length - 1; + var charCode = charStr.charCodeAt(end); + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + var size = this.surrogateSize; + this.charLength += size; + this.charReceived += size; + this.charBuffer.copy(this.charBuffer, size, 0, size); + buffer.copy(this.charBuffer, 0, 0, size); + return charStr.substring(0, end); + } + + // or just emit the charStr + return charStr; + }; + + // detectIncompleteChar determines if there is an incomplete UTF-8 character at + // the end of the given buffer. If so, it sets this.charLength to the byte + // length that character, and sets this.charReceived to the number of bytes + // that are available for this character. + StringDecoder.prototype.detectIncompleteChar = function(buffer) { + // determine how many bytes we have to check at the end of this buffer + var i = (buffer.length >= 3) ? 3 : buffer.length; + + // Figure out if one of the last i bytes of our buffer announces an + // incomplete char. + for (; i > 0; i--) { + var c = buffer[buffer.length - i]; + + // See http://en.wikipedia.org/wiki/UTF-8#Description + + // 110XXXXX + if (i == 1 && c >> 5 == 0x06) { + this.charLength = 2; + break; + } + + // 1110XXXX + if (i <= 2 && c >> 4 == 0x0E) { + this.charLength = 3; + break; + } + + // 11110XXX + if (i <= 3 && c >> 3 == 0x1E) { + this.charLength = 4; + break; + } + } + this.charReceived = i; + }; + + StringDecoder.prototype.end = function(buffer) { + var res = ''; + if (buffer && buffer.length) + res = this.write(buffer); + + if (this.charReceived) { + var cr = this.charReceived; + var buf = this.charBuffer; + var enc = this.encoding; + res += buf.slice(0, cr).toString(enc); + } + + return res; + }; + + function passThroughWrite(buffer) { + return buffer.toString(this.encoding); + } + + function utf16DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 2; + this.charLength = this.charReceived ? 2 : 0; + } + + function base64DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 3; + this.charLength = this.charReceived ? 3 : 0; + } + + Readable.ReadableState = ReadableState; + + var debug$2 = debuglog('stream'); + inherits$3(Readable, EventEmitter$2); + + function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') { + return emitter.prependListener(event, fn); + } else { + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) + emitter.on(event, fn); + else if (Array.isArray(emitter._events[event])) + emitter._events[event].unshift(fn); + else + emitter._events[event] = [fn, emitter._events[event]]; + } + } + function listenerCount (emitter, type) { + return emitter.listeners(type).length; + } + function ReadableState(options, stream) { + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } + } + function Readable(options) { + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options && typeof options.read === 'function') this._read = options.read; + + EventEmitter$2.call(this); + } + + // Manually shove something into the read() buffer. + // This returns true if the highWaterMark has not been hit yet, + // similar to how Writable.write() returns true if you should + // write() some more. + Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer$1.from(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); + }; + + // Unshift should *always* be something directly out of read() + Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); + }; + + Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; + }; + + function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var _e = new Error('stream.unshift() after end event'); + stream.emit('error', _e); + } else { + var skipAdd; + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; + + // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); + } + + // if it's past the high water mark, we can push in some more. + // Also, if we have no data yet, we can stand some + // more bytes. This is to work around cases where hwm=0, + // such as the repl. Also, if the push() triggered a + // readable event, and the user called read(largeNumber) such that + // needReadable was set, then we ought to push more, so that another + // 'readable' event will be triggered. + function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); + } + + // backwards compatibility. + Readable.prototype.setEncoding = function (enc) { + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; + }; + + // Don't raise the hwm > 8MB + var MAX_HWM = 0x800000; + function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; + } + + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; + } + + // you can override either this method, or the async _read(n) below. + Readable.prototype.read = function (n) { + debug$2('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug$2('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug$2('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug$2('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug$2('reading or ended', doRead); + } else if (doRead) { + debug$2('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; + }; + + function chunkInvalid(state, chunk) { + var er = null; + if (!isBuffer$2(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; + } + + function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); + } + + // Don't emit readable right away in sync mode, because this can trigger + // another read() call => stack overflow. This way, it might trigger + // a nextTick recursion warning, but that's not so bad. + function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug$2('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream); + } + } + + function emitReadable_(stream) { + debug$2('emit readable'); + stream.emit('readable'); + flow(stream); + } + + // at this point, the user has presumably seen the 'readable' event, + // and called read() to consume some data. that may have triggered + // in turn another _read(n) call, in which case reading = true if + // it's in progress. + // However, if we're not ended, or reading, and the length < hwm, + // then go ahead and try to read some more preemptively. + function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + nextTick(maybeReadMore_, stream, state); + } + } + + function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug$2('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; + } + + // abstract method. to be overridden in specific implementation classes. + // call cb(er, data) where data is <= n in length. + // for virtual (non-string, non-buffer) streams, "length" is somewhat + // arbitrary, and perhaps not very meaningful. + Readable.prototype._read = function (n) { + this.emit('error', new Error('not implemented')); + }; + + Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug$2('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false); + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug$2('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug$2('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug$2('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug$2('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug$2('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug$2('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (listenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug$2('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug$2('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug$2('pipe resume'); + src.resume(); + } + + return dest; + }; + + function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug$2('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && src.listeners('data').length) { + state.flowing = true; + flow(src); + } + }; + } + + Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var _i = 0; _i < len; _i++) { + dests[_i].emit('unpipe', this); + }return this; + } + + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; + }; + + // set up data events if they are asked for + // Ensure readable listeners eventually get something + Readable.prototype.on = function (ev, fn) { + var res = EventEmitter$2.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; + }; + Readable.prototype.addListener = Readable.prototype.on; + + function nReadingNextTick(self) { + debug$2('readable nexttick read 0'); + self.read(0); + } + + // pause() and resume() are remnants of the legacy readable stream API + // If the user uses them, then switch into old mode. + Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug$2('resume'); + state.flowing = true; + resume(this, state); + } + return this; + }; + + function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + nextTick(resume_, stream, state); + } + } + + function resume_(stream, state) { + if (!state.reading) { + debug$2('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); + } + + Readable.prototype.pause = function () { + debug$2('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug$2('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; + }; + + function flow(stream) { + var state = stream._readableState; + debug$2('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} + } + + // wrap an old-style stream as the async data source. + // This is *not* part of the readable stream interface. + // It is an ugly unfortunate mess of history. + Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug$2('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug$2('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function (ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug$2('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; + }; + + // exposed for testing purposes only. + Readable._fromList = fromList; + + // Pluck off n bytes from an array of buffers. + // Length is the combined lengths of all the buffers in the list. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; + } + + // Extracts only enough buffered data to satisfy the amount requested. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; + } + + // Copies a specified amount of characters from the list of buffered data + // chunks. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; + } + + // Copies a specified amount of bytes from the list of buffered data chunks. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + function copyFromBuffer(n, list) { + var ret = Buffer$1.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; + } + + function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + nextTick(endReadableNT, state, stream); + } + } + + function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + } + + function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } + } + + function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; + } + + // A bit simpler than readable streams. + Writable.WritableState = WritableState; + inherits$3(Writable, EventEmitter$2); + + function nop() {} + + function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; + } + + function WritableState(options, stream) { + Object.defineProperty(this, 'buffer', { + get: deprecate$1(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); + } + + WritableState.prototype.getBuffer = function writableStateGetBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; + }; + function Writable(options) { + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + } + + EventEmitter$2.call(this); + } + + // Otherwise people can pipe Writable streams, which is just wrong. + Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); + }; + + function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + nextTick(cb, er); + } + + // If we get something that is not a buffer, string, null, or undefined, + // and we're not in objectMode, then that's an error. + // Otherwise stream chunks are all considered to be of length=1, and the + // watermarks determine how many objects to keep in the buffer, rather than + // how many bytes or characters. + function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + // Always throw error if a null is written + // if we are not in object mode then throw + // if it is not a buffer, string, or undefined. + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + nextTick(cb, er); + valid = false; + } + return valid; + } + + Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } + + return ret; + }; + + Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; + }; + + Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } + }; + + Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; + }; + + function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; + } + + // if we're already writing something, then just put this + // in the queue, and wait our turn. Otherwise, call _write + // If we return false, then we need a drain event, so set that flag. + function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; + } + + function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; + } + + function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) nextTick(cb, er);else cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } + + function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; + } + + function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + nextTick(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } + } + + function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); + } + + // Must force callback to be called on nextTick, so that we don't + // emit 'drain' before the write() consumer gets the 'false' return + // value, and has a chance to attach a 'drain' listener. + function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } + } + + // if there's something in the buffer waiting, then process it + function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; + } + + Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('not implemented')); + }; + + Writable.prototype._writev = null; + + Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); + }; + + function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + } + + function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } + } + + function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + return need; + } + + function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; + } + + // It seems a linked list but it is not + // there will be only 2 of these for each stream + function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; + } + + inherits$3(Duplex, Readable); + + var keys = Object.keys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } + function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); + } + + // the no-half-open enforcer + function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + nextTick(onEndNT, this); + } + + function onEndNT(self) { + self.end(); + } + + // a transform stream is a readable/writable stream where you do + inherits$3(Transform, Duplex); + + function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; + } + + function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } + } + function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er) { + done(stream, er); + });else done(stream); + }); + } + + Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); + }; + + // This is the part where you do stuff! + // override this function in implementation classes. + // 'chunk' is an input chunk. + // + // Call `push(newChunk)` to pass along transformed output + // to the readable side. You may call 'push' zero or more times. + // + // Call `cb(err)` when you are done with this chunk. If you pass + // an error, then that'll put the hurt on the whole operation. If you + // never call cb(), then you'll never get another chunk. + Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('Not implemented'); + }; + + Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } + }; + + // Doesn't matter what the args are here. + // _transform does all the work. + // That we got here means that the readable side wants more data. + Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } + }; + + function done(stream, er) { + if (er) return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('Calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); + } + + inherits$3(PassThrough, Transform); + function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); + } + + PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); + }; + + inherits$3(Stream, EventEmitter$2); + Stream.Readable = Readable; + Stream.Writable = Writable; + Stream.Duplex = Duplex; + Stream.Transform = Transform; + Stream.PassThrough = PassThrough; + + // Backwards-compat with node 0.4.x + Stream.Stream = Stream; + + // old-style streams. Note that the pipe method (the only relevant + // part of this class) is overridden in the Readable class. + + function Stream() { + EventEmitter$2.call(this); + } + + Stream.prototype.pipe = function(dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + + dest.end(); + } + + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EventEmitter$2.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; + }; + + var WritableStream = Stream.Writable; + var inherits$1 = util.inherits; + + var browserStdout = BrowserStdout; + + + inherits$1(BrowserStdout, WritableStream); + + function BrowserStdout(opts) { + if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts) + + opts = opts || {}; + WritableStream.call(this, opts); + this.label = (opts.label !== undefined) ? opts.label : 'stdout'; + } + + BrowserStdout.prototype._write = function(chunks, encoding, cb) { + var output = chunks.toString ? chunks.toString() : chunks; + if (this.label === false) { + console.log(output); + } else { + console.log(this.label+':', output); + } + nextTick$1(cb); + }; + + /** + * Parse the given `qs`. + * + * @private + * @param {string} qs + * @return {Object} + */ + var parseQuery = function parseQuery(qs) { + return qs + .replace('?', '') + .split('&') + .reduce(function (obj, pair) { + var i = pair.indexOf('='); + var key = pair.slice(0, i); + var val = pair.slice(++i); + + // Due to how the URLSearchParams API treats spaces + obj[key] = decodeURIComponent(val.replace(/\+/g, '%20')); + + return obj; + }, {}); + }; + + /** + * Highlight the given string of `js`. + * + * @private + * @param {string} js + * @return {string} + */ + function highlight(js) { + return js + .replace(//g, '>') + .replace(/\/\/(.*)/gm, '//$1') + .replace(/('.*?')/gm, '$1') + .replace(/(\d+\.\d+)/gm, '$1') + .replace(/(\d+)/gm, '$1') + .replace( + /\bnew[ \t]+(\w+)/gm, + 'new $1' + ) + .replace( + /\b(function|new|throw|return|var|if|else)\b/gm, + '$1' + ); + } + + /** + * Highlight the contents of tag `name`. + * + * @private + * @param {string} name + */ + var highlightTags = function highlightTags(name) { + var code = document.getElementById('mocha').getElementsByTagName(name); + for (var i = 0, len = code.length; i < len; ++i) { + code[i].innerHTML = highlight(code[i].innerHTML); + } + }; + + var escapeStringRegexp = string => { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } + + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); + }; + + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + + // resolves . and .. elements in a path array with directory names there + // must be no slashes, empty elements, or device names (c:\) in the array + // (so also no leading and trailing slashes - it does not distinguish + // relative and absolute paths) + function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; + } + + // Split a filename into [root, dir, basename, ext], unix version + // 'root' is just a slash, or nothing. + var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); + }; + + // path.resolve([from ...], to) + // posix version + function resolve() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : '/'; + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + } + // path.normalize(path) + // posix version + function normalize(path) { + var isPathAbsolute = isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isPathAbsolute).join('/'); + + if (!path && !isPathAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isPathAbsolute ? '/' : '') + path; + } + // posix version + function isAbsolute(path) { + return path.charAt(0) === '/'; + } + + // posix version + function join() { + var paths = Array.prototype.slice.call(arguments, 0); + return normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); + } + + + // path.relative(from, to) + // posix version + function relative(from, to) { + from = resolve(from).substr(1); + to = resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); + } + + var sep = '/'; + var delimiter = ':'; + + function dirname(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; + } + + function basename(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; + } + + + function extname(path) { + return splitPath(path)[3]; + } + var path = { + extname: extname, + basename: basename, + dirname: dirname, + sep: sep, + delimiter: delimiter, + relative: relative, + join: join, + isAbsolute: isAbsolute, + normalize: normalize, + resolve: resolve + }; + function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; + } + + // String.prototype.substr - negative index don't work in IE8 + var substr = 'ab'.substr(-1) === 'b' ? + function (str, start, len) { return str.substr(start, len) } : + function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } + ; + + var diff$1 = createCommonjsModule(function (module, exports) { + (function (global, factory) { + factory(exports) ; + }(commonjsGlobal, (function (exports) { + function Diff() {} + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } + + // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } + + // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } + + // See: http://code.google.com/p/google-diff-match-patch/wiki/API + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + + }))); + }); + + /** + * Helpers. + */ + + var s$1 = 1000; + var m$1 = s$1 * 60; + var h$1 = m$1 * 60; + var d$1 = h$1 * 24; + var w$1 = d$1 * 7; + var y$1 = d$1 * 365.25; + + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + var ms$1 = function (val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse$1(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong$1(val) : fmtShort$1(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); + }; + + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + function parse$1(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y$1; + case 'weeks': + case 'week': + case 'w': + return n * w$1; + case 'days': + case 'day': + case 'd': + return n * d$1; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h$1; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m$1; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s$1; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } + } + + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtShort$1(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d$1) { + return Math.round(ms / d$1) + 'd'; + } + if (msAbs >= h$1) { + return Math.round(ms / h$1) + 'h'; + } + if (msAbs >= m$1) { + return Math.round(ms / m$1) + 'm'; + } + if (msAbs >= s$1) { + return Math.round(ms / s$1) + 's'; + } + return ms + 'ms'; + } + + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtLong$1(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d$1) { + return plural$1(ms, msAbs, d$1, 'day'); + } + if (msAbs >= h$1) { + return plural$1(ms, msAbs, h$1, 'hour'); + } + if (msAbs >= m$1) { + return plural$1(ms, msAbs, m$1, 'minute'); + } + if (msAbs >= s$1) { + return plural$1(ms, msAbs, s$1, 'second'); + } + return ms + ' ms'; + } + + /** + * Pluralization helper. + */ + + function plural$1(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + + var browser$2 = true; + + let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'; + let customAlphabet = (alphabet, defaultSize = 21) => { + return (size = defaultSize) => { + let id = ''; + let i = size; + while (i--) { + id += alphabet[(Math.random() * alphabet.length) | 0]; + } + return id + } + }; + let nanoid = (size = 21) => { + let id = ''; + let i = size; + while (i--) { + id += urlAlphabet[(Math.random() * 64) | 0]; + } + return id + }; + + var nonSecure = /*#__PURE__*/Object.freeze({ + __proto__: null, + nanoid: nanoid, + customAlphabet: customAlphabet + }); + + var he = createCommonjsModule(function (module, exports) { + (function(root) { + + // Detect free variables `exports`. + var freeExports = exports; + + // Detect free variable `module`. + var freeModule = module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + // All astral symbols. + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + var regexAsciiWhitelist = /[\x01-\x7F]/g; + // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; + + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; + var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; + var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; + var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; + var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + var has = function(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function(array, value) { + var index = -1; + var length = array.length; + while (++index < length) { + if (array[index] == value) { + return true; + } + } + return false; + }; + + var merge = function(options, defaults) { + if (!options) { + return defaults; + } + var result = {}; + var key; + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + return result; + }; + + // Modified version of `ucs2encode`; see https://mths.be/punycode. + var codePointToSymbol = function(codePoint, strict) { + var output = ''; + if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + return '\uFFFD'; + } + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + return decodeMapNumeric[codePoint]; + } + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function(message) { + throw Error('Parse error: ' + message); + }; + + /*--------------------------------------------------------------------------*/ + + var encode = function(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function(symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + return escapeBmpSymbol(symbol); + }); + // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + if (useNamedReferences) { + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒') + .replace(/fj/g, 'fj'); + } + // Encode non-ASCII symbols. + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } + // Note: any remaining non-ASCII symbols are handled outside of the `if`. + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function(string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } + // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + string = string + .replace(/>\u20D2/g, '>⃒') + .replace(/<\u20D2/g, '<⃒'); + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function(string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + return string + // Encode astral symbols. + .replace(regexAstralSymbols, function($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) + // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; + // Expose default options (so they can be overridden globally). + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal' : false + }; + + var decode = function(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + + if ($1) { + reference = $1; + // Note: there is no need to check `has(decodeMap, reference)`. + return decodeMap[reference]; + } + + if ($2) { + // Decode named character references without trailing `;`, e.g. `&`. + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $2; + next = $3; + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + return $0; + } else { + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + // Note: there is no need to check `has(decodeMapLegacy, reference)`. + return decodeMapLegacy[reference] + (next || ''); + } + } + + if ($4) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $4; + semicolon = $5; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + + if ($6) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $6; + semicolon = $7; + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } + + // If we’re still here, `if ($7)` is implied; it’s an ambiguous + // ampersand for sure. https://mths.be/notes/ambiguous-ampersands + if (strict) { + parseError( + 'named character reference was not terminated by a semicolon' + ); + } + return $0; + }); + }; + // Expose default options (so they can be overridden globally). + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function(string) { + return string.replace(regexEscape, function($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + + /*--------------------------------------------------------------------------*/ + + var he = { + 'version': '1.2.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { // in Rhino or a web browser + root.he = he; + } + + }(commonjsGlobal)); + }); + + var utils = createCommonjsModule(function (module, exports) { + + /** + * Various utility functions used throughout Mocha's codebase. + * @module utils + */ + + /** + * Module dependencies. + */ + + const {nanoid} = nonSecure; + + + + + const MOCHA_ID_PROP_NAME = '__mocha_id__'; + + /** + * Inherit the prototype methods from one constructor into another. + * + * @param {function} ctor - Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor - Constructor function to inherit prototype from. + * @throws {TypeError} if either constructor is null, or if super constructor + * lacks a prototype. + */ + exports.inherits = util.inherits; + + /** + * Escape special characters in the given string of html. + * + * @private + * @param {string} html + * @return {string} + */ + exports.escape = function (html) { + return he.encode(String(html), {useNamedReferences: false}); + }; + + /** + * Test if the given obj is type of string. + * + * @private + * @param {Object} obj + * @return {boolean} + */ + exports.isString = function (obj) { + return typeof obj === 'string'; + }; + + /** + * Compute a slug from the given `str`. + * + * @private + * @param {string} str + * @return {string} + */ + exports.slug = function (str) { + return str + .toLowerCase() + .replace(/\s+/g, '-') + .replace(/[^-\w]/g, '') + .replace(/-{2,}/g, '-'); + }; + + /** + * Strip the function definition from `str`, and re-indent for pre whitespace. + * + * @param {string} str + * @return {string} + */ + exports.clean = function (str) { + str = str + .replace(/\r\n?|[\n\u2028\u2029]/g, '\n') + .replace(/^\uFEFF/, '') + // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content + .replace( + /^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, + '$1$2$3' + ); + + var spaces = str.match(/^\n?( *)/)[1].length; + var tabs = str.match(/^\n?(\t*)/)[1].length; + var re = new RegExp( + '^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', + 'gm' + ); + + str = str.replace(re, ''); + + return str.trim(); + }; + + /** + * If a value could have properties, and has none, this function is called, + * which returns a string representation of the empty value. + * + * Functions w/ no properties return `'[Function]'` + * Arrays w/ length === 0 return `'[]'` + * Objects w/ no properties return `'{}'` + * All else: return result of `value.toString()` + * + * @private + * @param {*} value The value to inspect. + * @param {string} typeHint The type of the value + * @returns {string} + */ + function emptyRepresentation(value, typeHint) { + switch (typeHint) { + case 'function': + return '[Function]'; + case 'object': + return '{}'; + case 'array': + return '[]'; + default: + return value.toString(); + } + } + + /** + * Takes some variable and asks `Object.prototype.toString()` what it thinks it + * is. + * + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString + * @param {*} value The value to test. + * @returns {string} Computed type + * @example + * canonicalType({}) // 'object' + * canonicalType([]) // 'array' + * canonicalType(1) // 'number' + * canonicalType(false) // 'boolean' + * canonicalType(Infinity) // 'number' + * canonicalType(null) // 'null' + * canonicalType(new Date()) // 'date' + * canonicalType(/foo/) // 'regexp' + * canonicalType('type') // 'string' + * canonicalType(global) // 'global' + * canonicalType(new String('foo') // 'object' + * canonicalType(async function() {}) // 'asyncfunction' + * canonicalType(await import(name)) // 'module' + */ + var canonicalType = (exports.canonicalType = function canonicalType(value) { + if (value === undefined) { + return 'undefined'; + } else if (value === null) { + return 'null'; + } else if (isBuffer$2(value)) { + return 'buffer'; + } + return Object.prototype.toString + .call(value) + .replace(/^\[.+\s(.+?)]$/, '$1') + .toLowerCase(); + }); + + /** + * + * Returns a general type or data structure of a variable + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures + * @param {*} value The value to test. + * @returns {string} One of undefined, boolean, number, string, bigint, symbol, object + * @example + * type({}) // 'object' + * type([]) // 'array' + * type(1) // 'number' + * type(false) // 'boolean' + * type(Infinity) // 'number' + * type(null) // 'null' + * type(new Date()) // 'object' + * type(/foo/) // 'object' + * type('type') // 'string' + * type(global) // 'object' + * type(new String('foo') // 'string' + */ + exports.type = function type(value) { + // Null is special + if (value === null) return 'null'; + const primitives = new Set([ + 'undefined', + 'boolean', + 'number', + 'string', + 'bigint', + 'symbol' + ]); + const _type = typeof value; + if (_type === 'function') return _type; + if (primitives.has(_type)) return _type; + if (value instanceof String) return 'string'; + if (value instanceof Error) return 'error'; + if (Array.isArray(value)) return 'array'; + + return _type; + }; + + /** + * Stringify `value`. Different behavior depending on type of value: + * + * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively. + * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes. + * - If `value` is an *empty* object, function, or array, return result of function + * {@link emptyRepresentation}. + * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of + * JSON.stringify(). + * + * @private + * @see exports.type + * @param {*} value + * @return {string} + */ + exports.stringify = function (value) { + var typeHint = canonicalType(value); + + if (!~['object', 'array', 'function'].indexOf(typeHint)) { + if (typeHint === 'buffer') { + var json = Buffer$1.prototype.toJSON.call(value); + // Based on the toJSON result + return jsonStringify( + json.data && json.type ? json.data : json, + 2 + ).replace(/,(\n|$)/g, '$1'); + } + + // IE7/IE8 has a bizarre String constructor; needs to be coerced + // into an array and back to obj. + if (typeHint === 'string' && typeof value === 'object') { + value = value.split('').reduce(function (acc, char, idx) { + acc[idx] = char; + return acc; + }, {}); + typeHint = 'object'; + } else { + return jsonStringify(value); + } + } + + for (var prop in value) { + if (Object.prototype.hasOwnProperty.call(value, prop)) { + return jsonStringify( + exports.canonicalize(value, null, typeHint), + 2 + ).replace(/,(\n|$)/g, '$1'); + } + } + + return emptyRepresentation(value, typeHint); + }; + + /** + * like JSON.stringify but more sense. + * + * @private + * @param {Object} object + * @param {number=} spaces + * @param {number=} depth + * @returns {*} + */ + function jsonStringify(object, spaces, depth) { + if (typeof spaces === 'undefined') { + // primitive types + return _stringify(object); + } + + depth = depth || 1; + var space = spaces * depth; + var str = Array.isArray(object) ? '[' : '{'; + var end = Array.isArray(object) ? ']' : '}'; + var length = + typeof object.length === 'number' + ? object.length + : Object.keys(object).length; + // `.repeat()` polyfill + function repeat(s, n) { + return new Array(n).join(s); + } + + function _stringify(val) { + switch (canonicalType(val)) { + case 'null': + case 'undefined': + val = '[' + val + ']'; + break; + case 'array': + case 'object': + val = jsonStringify(val, spaces, depth + 1); + break; + case 'boolean': + case 'regexp': + case 'symbol': + case 'number': + val = + val === 0 && 1 / val === -Infinity // `-0` + ? '-0' + : val.toString(); + break; + case 'bigint': + val = val.toString() + 'n'; + break; + case 'date': + var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString(); + val = '[Date: ' + sDate + ']'; + break; + case 'buffer': + var json = val.toJSON(); + // Based on the toJSON result + json = json.data && json.type ? json.data : json; + val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']'; + break; + default: + val = + val === '[Function]' || val === '[Circular]' + ? val + : JSON.stringify(val); // string + } + return val; + } + + for (var i in object) { + if (!Object.prototype.hasOwnProperty.call(object, i)) { + continue; // not my business + } + --length; + str += + '\n ' + + repeat(' ', space) + + (Array.isArray(object) ? '' : '"' + i + '": ') + // key + _stringify(object[i]) + // value + (length ? ',' : ''); // comma + } + + return ( + str + + // [], {} + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end) + ); + } + + /** + * Return a new Thing that has the keys in sorted order. Recursive. + * + * If the Thing... + * - has already been seen, return string `'[Circular]'` + * - is `undefined`, return string `'[undefined]'` + * - is `null`, return value `null` + * - is some other primitive, return the value + * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method + * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again. + * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()` + * + * @private + * @see {@link exports.stringify} + * @param {*} value Thing to inspect. May or may not have properties. + * @param {Array} [stack=[]] Stack of seen values + * @param {string} [typeHint] Type hint + * @return {(Object|Array|Function|string|undefined)} + */ + exports.canonicalize = function canonicalize(value, stack, typeHint) { + var canonicalizedObj; + /* eslint-disable no-unused-vars */ + var prop; + /* eslint-enable no-unused-vars */ + typeHint = typeHint || canonicalType(value); + function withStack(value, fn) { + stack.push(value); + fn(); + stack.pop(); + } + + stack = stack || []; + + if (stack.indexOf(value) !== -1) { + return '[Circular]'; + } + + switch (typeHint) { + case 'undefined': + case 'buffer': + case 'null': + canonicalizedObj = value; + break; + case 'array': + withStack(value, function () { + canonicalizedObj = value.map(function (item) { + return exports.canonicalize(item, stack); + }); + }); + break; + case 'function': + /* eslint-disable-next-line no-unused-vars, no-unreachable-loop */ + for (prop in value) { + canonicalizedObj = {}; + break; + } + /* eslint-enable guard-for-in */ + if (!canonicalizedObj) { + canonicalizedObj = emptyRepresentation(value, typeHint); + break; + } + /* falls through */ + case 'object': + canonicalizedObj = canonicalizedObj || {}; + withStack(value, function () { + Object.keys(value) + .sort() + .forEach(function (key) { + canonicalizedObj[key] = exports.canonicalize(value[key], stack); + }); + }); + break; + case 'date': + case 'number': + case 'regexp': + case 'boolean': + case 'symbol': + canonicalizedObj = value; + break; + default: + canonicalizedObj = value + ''; + } + + return canonicalizedObj; + }; + + /** + * @summary + * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`) + * @description + * When invoking this function you get a filter function that get the Error.stack as an input, + * and return a prettify output. + * (i.e: strip Mocha and internal node functions from stack trace). + * @returns {Function} + */ + exports.stackTraceFilter = function () { + // TODO: Replace with `process.browser` + var is = typeof document === 'undefined' ? {node: true} : {browser: true}; + var slash = path.sep; + var cwd; + if (is.node) { + cwd = exports.cwd() + slash; + } else { + cwd = ( + typeof location === 'undefined' ? window.location : location + ).href.replace(/\/[^/]*$/, '/'); + slash = '/'; + } + + function isMochaInternal(line) { + return ( + ~line.indexOf('node_modules' + slash + 'mocha' + slash) || + ~line.indexOf(slash + 'mocha.js') || + ~line.indexOf(slash + 'mocha.min.js') + ); + } + + function isNodeInternal(line) { + return ( + ~line.indexOf('(timers.js:') || + ~line.indexOf('(events.js:') || + ~line.indexOf('(node.js:') || + ~line.indexOf('(module.js:') || + ~line.indexOf('GeneratorFunctionPrototype.next (native)') || + false + ); + } + + return function (stack) { + stack = stack.split('\n'); + + stack = stack.reduce(function (list, line) { + if (isMochaInternal(line)) { + return list; + } + + if (is.node && isNodeInternal(line)) { + return list; + } + + // Clean up cwd(absolute) + if (/:\d+:\d+\)?$/.test(line)) { + line = line.replace('(' + cwd, '('); + } + + list.push(line); + return list; + }, []); + + return stack.join('\n'); + }; + }; + + /** + * Crude, but effective. + * @public + * @param {*} value + * @returns {boolean} Whether or not `value` is a Promise + */ + exports.isPromise = function isPromise(value) { + return ( + typeof value === 'object' && + value !== null && + typeof value.then === 'function' + ); + }; + + /** + * Clamps a numeric value to an inclusive range. + * + * @param {number} value - Value to be clamped. + * @param {number[]} range - Two element array specifying [min, max] range. + * @returns {number} clamped value + */ + exports.clamp = function clamp(value, range) { + return Math.min(Math.max(value, range[0]), range[1]); + }; + + /** + * It's a noop. + * @public + */ + exports.noop = function () {}; + + /** + * Creates a map-like object. + * + * @description + * A "map" is an object with no prototype, for our purposes. In some cases + * this would be more appropriate than a `Map`, especially if your environment + * doesn't support it. Recommended for use in Mocha's public APIs. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Custom_and_Null_objects|MDN:Map} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Custom_and_Null_objects|MDN:Object.create - Custom objects} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Custom_and_Null_objects|MDN:Object.assign} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} An object with no prototype, having `...obj` properties + */ + exports.createMap = function (obj) { + return Object.assign.apply( + null, + [Object.create(null)].concat(Array.prototype.slice.call(arguments)) + ); + }; + + /** + * Creates a read-only map-like object. + * + * @description + * This differs from {@link module:utils.createMap createMap} only in that + * the argument must be non-empty, because the result is frozen. + * + * @see {@link module:utils.createMap createMap} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} A frozen object with no prototype, having `...obj` properties + * @throws {TypeError} if argument is not a non-empty object. + */ + exports.defineConstants = function (obj) { + if (canonicalType(obj) !== 'object' || !Object.keys(obj).length) { + throw new TypeError('Invalid argument; expected a non-empty object'); + } + return Object.freeze(exports.createMap(obj)); + }; + + /** + * Returns current working directory + * + * Wrapper around `process.cwd()` for isolation + * @private + */ + exports.cwd = function cwd() { + return process$1.cwd(); + }; + + /** + * Returns `true` if Mocha is running in a browser. + * Checks for `process.browser`. + * @returns {boolean} + * @private + */ + exports.isBrowser = function isBrowser() { + return Boolean(browser$2); + }; + + /* + * Casts `value` to an array; useful for optionally accepting array parameters + * + * It follows these rules, depending on `value`. If `value` is... + * 1. `undefined`: return an empty Array + * 2. `null`: return an array with a single `null` element + * 3. Any other object: return the value of `Array.from()` _if_ the object is iterable + * 4. otherwise: return an array with a single element, `value` + * @param {*} value - Something to cast to an Array + * @returns {Array<*>} + */ + exports.castArray = function castArray(value) { + if (value === undefined) { + return []; + } + if (value === null) { + return [null]; + } + if ( + typeof value === 'object' && + (typeof value[Symbol.iterator] === 'function' || value.length !== undefined) + ) { + return Array.from(value); + } + return [value]; + }; + + exports.constants = exports.defineConstants({ + MOCHA_ID_PROP_NAME + }); + + /** + * Creates a new unique identifier + * @returns {string} Unique identifier + */ + exports.uniqueID = () => nanoid(); + + exports.assignNewMochaID = obj => { + const id = exports.uniqueID(); + Object.defineProperty(obj, MOCHA_ID_PROP_NAME, { + get() { + return id; + } + }); + return obj; + }; + + /** + * Retrieves a Mocha ID from an object, if present. + * @param {*} [obj] - Object + * @returns {string|void} + */ + exports.getMochaID = obj => + obj && typeof obj === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined; + }); + + var _nodeResolve_empty = {}; + + var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': _nodeResolve_empty + }); + + var browser$1 = { + info: 'ℹ️', + success: '✅', + warning: '⚠️', + error: '❌️' + }; + + /** + @module Pending + */ + + var pending = Pending; + + /** + * Initialize a new `Pending` error with the given message. + * + * @param {string} message + */ + function Pending(message) { + this.message = message; + } + + /** + * Helpers. + */ + + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + var ms = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); + }; + + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } + } + + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; + } + + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; + } + + /** + * Pluralization helper. + */ + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = ms; + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; + } + + var common$1 = setup; + + var browser = createCommonjsModule(function (module, exports) { + /* eslint-env browser */ + + /** + * This is the web browser implementation of `debug()`. + */ + + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; + })(); + + /** + * Colors. + */ + + exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' + ]; + + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + + // eslint-disable-next-line complexity + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); + } + + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + } + + /** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + exports.log = console.debug || console.log || (() => {}); + + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process$1 !== 'undefined' && 'env' in process$1) { + r = process$1.env.DEBUG; + } + + return r; + } + + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = common$1(exports); + + const {formatters} = module.exports; + + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + }); + + const {format} = util; + + /** + * Contains error codes, factory functions to create throwable error objects, + * and warning/deprecation functions. + * @module + */ + + /** + * process.emitWarning or a polyfill + * @see https://nodejs.org/api/process.html#process_process_emitwarning_warning_options + * @ignore + */ + const emitWarning = (msg, type) => { + if (process$1.emitWarning) { + process$1.emitWarning(msg, type); + } else { + /* istanbul ignore next */ + nextTick$1(function () { + console.warn(type + ': ' + msg); + }); + } + }; + + /** + * Show a deprecation warning. Each distinct message is only displayed once. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ + const deprecate = msg => { + msg = String(msg); + if (msg && !deprecate.cache[msg]) { + deprecate.cache[msg] = true; + emitWarning(msg, 'DeprecationWarning'); + } + }; + deprecate.cache = {}; + + /** + * Show a generic warning. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ + const warn = msg => { + if (msg) { + emitWarning(msg); + } + }; + + /** + * When Mocha throws exceptions (or rejects `Promise`s), it attempts to assign a `code` property to the `Error` object, for easier handling. These are the potential values of `code`. + * @public + * @namespace + * @memberof module:lib/errors + */ + var constants$4 = { + /** + * An unrecoverable error. + * @constant + * @default + */ + FATAL: 'ERR_MOCHA_FATAL', + + /** + * The type of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_TYPE: 'ERR_MOCHA_INVALID_ARG_TYPE', + + /** + * The value of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_VALUE: 'ERR_MOCHA_INVALID_ARG_VALUE', + + /** + * Something was thrown, but it wasn't an `Error` + * @constant + * @default + */ + INVALID_EXCEPTION: 'ERR_MOCHA_INVALID_EXCEPTION', + + /** + * An interface (e.g., `Mocha.interfaces`) is unknown or invalid + * @constant + * @default + */ + INVALID_INTERFACE: 'ERR_MOCHA_INVALID_INTERFACE', + + /** + * A reporter (.e.g, `Mocha.reporters`) is unknown or invalid + * @constant + * @default + */ + INVALID_REPORTER: 'ERR_MOCHA_INVALID_REPORTER', + + /** + * `done()` was called twice in a `Test` or `Hook` callback + * @constant + * @default + */ + MULTIPLE_DONE: 'ERR_MOCHA_MULTIPLE_DONE', + + /** + * No files matched the pattern provided by the user + * @constant + * @default + */ + NO_FILES_MATCH_PATTERN: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN', + + /** + * Known, but unsupported behavior of some kind + * @constant + * @default + */ + UNSUPPORTED: 'ERR_MOCHA_UNSUPPORTED', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_RUNNING: 'ERR_MOCHA_INSTANCE_ALREADY_RUNNING', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_DISPOSED: 'ERR_MOCHA_INSTANCE_ALREADY_DISPOSED', + + /** + * Use of `only()` w/ `--forbid-only` results in this error. + * @constant + * @default + */ + FORBIDDEN_EXCLUSIVITY: 'ERR_MOCHA_FORBIDDEN_EXCLUSIVITY', + + /** + * To be thrown when a user-defined plugin implementation (e.g., `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_IMPLEMENTATION: 'ERR_MOCHA_INVALID_PLUGIN_IMPLEMENTATION', + + /** + * To be thrown when a builtin or third-party plugin definition (the _definition_ of `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_DEFINITION: 'ERR_MOCHA_INVALID_PLUGIN_DEFINITION', + + /** + * When a runnable exceeds its allowed run time. + * @constant + * @default + */ + TIMEOUT: 'ERR_MOCHA_TIMEOUT', + + /** + * Input file is not able to be parsed + * @constant + * @default + */ + UNPARSABLE_FILE: 'ERR_MOCHA_UNPARSABLE_FILE' + }; + + /** + * A set containing all string values of all Mocha error constants, for use by {@link isMochaError}. + * @private + */ + const MOCHA_ERRORS = new Set(Object.values(constants$4)); + + /** + * Creates an error object to be thrown when no files to be tested could be found using specified pattern. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} pattern - User-specified argument value. + * @returns {Error} instance detailing the error condition + */ + function createNoFilesMatchPatternError(message, pattern) { + var err = new Error(message); + err.code = constants$4.NO_FILES_MATCH_PATTERN; + err.pattern = pattern; + return err; + } + + /** + * Creates an error object to be thrown when the reporter specified in the options was not found. + * + * @public + * @param {string} message - Error message to be displayed. + * @param {string} reporter - User-specified reporter value. + * @returns {Error} instance detailing the error condition + */ + function createInvalidReporterError(message, reporter) { + var err = new TypeError(message); + err.code = constants$4.INVALID_REPORTER; + err.reporter = reporter; + return err; + } + + /** + * Creates an error object to be thrown when the interface specified in the options was not found. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} ui - User-specified interface value. + * @returns {Error} instance detailing the error condition + */ + function createInvalidInterfaceError(message, ui) { + var err = new Error(message); + err.code = constants$4.INVALID_INTERFACE; + err.interface = ui; + return err; + } + + /** + * Creates an error object to be thrown when a behavior, option, or parameter is unsupported. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + function createUnsupportedError$2(message) { + var err = new Error(message); + err.code = constants$4.UNSUPPORTED; + return err; + } + + /** + * Creates an error object to be thrown when an argument is missing. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ + function createMissingArgumentError$1(message, argument, expected) { + return createInvalidArgumentTypeError$1(message, argument, expected); + } + + /** + * Creates an error object to be thrown when an argument did not use the supported type + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ + function createInvalidArgumentTypeError$1(message, argument, expected) { + var err = new TypeError(message); + err.code = constants$4.INVALID_ARG_TYPE; + err.argument = argument; + err.expected = expected; + err.actual = typeof argument; + return err; + } + + /** + * Creates an error object to be thrown when an argument did not use the supported value + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} value - Argument value. + * @param {string} [reason] - Why value is invalid. + * @returns {Error} instance detailing the error condition + */ + function createInvalidArgumentValueError(message, argument, value, reason) { + var err = new TypeError(message); + err.code = constants$4.INVALID_ARG_VALUE; + err.argument = argument; + err.value = value; + err.reason = typeof reason !== 'undefined' ? reason : 'is invalid'; + return err; + } + + /** + * Creates an error object to be thrown when an exception was caught, but the `Error` is falsy or undefined. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + function createInvalidExceptionError$2(message, value) { + var err = new Error(message); + err.code = constants$4.INVALID_EXCEPTION; + err.valueType = typeof value; + err.value = value; + return err; + } + + /** + * Creates an error object to be thrown when an unrecoverable error occurs. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + function createFatalError$1(message, value) { + var err = new Error(message); + err.code = constants$4.FATAL; + err.valueType = typeof value; + err.value = value; + return err; + } + + /** + * Dynamically creates a plugin-type-specific error based on plugin type + * @param {string} message - Error message + * @param {"reporter"|"ui"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ + function createInvalidLegacyPluginError(message, pluginType, pluginId) { + switch (pluginType) { + case 'reporter': + return createInvalidReporterError(message, pluginId); + case 'ui': + return createInvalidInterfaceError(message, pluginId); + default: + throw new Error('unknown pluginType "' + pluginType + '"'); + } + } + + /** + * **DEPRECATED**. Use {@link createInvalidLegacyPluginError} instead Dynamically creates a plugin-type-specific error based on plugin type + * @deprecated + * @param {string} message - Error message + * @param {"reporter"|"interface"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ + function createInvalidPluginError(...args) { + deprecate('Use createInvalidLegacyPluginError() instead'); + return createInvalidLegacyPluginError(...args); + } + + /** + * Creates an error object to be thrown when a mocha object's `run` method is executed while it is already disposed. + * @param {string} message The error message to be displayed. + * @param {boolean} cleanReferencesAfterRun the value of `cleanReferencesAfterRun` + * @param {Mocha} instance the mocha instance that throw this error + * @static + */ + function createMochaInstanceAlreadyDisposedError( + message, + cleanReferencesAfterRun, + instance + ) { + var err = new Error(message); + err.code = constants$4.INSTANCE_ALREADY_DISPOSED; + err.cleanReferencesAfterRun = cleanReferencesAfterRun; + err.instance = instance; + return err; + } + + /** + * Creates an error object to be thrown when a mocha object's `run` method is called while a test run is in progress. + * @param {string} message The error message to be displayed. + * @static + * @public + */ + function createMochaInstanceAlreadyRunningError(message, instance) { + var err = new Error(message); + err.code = constants$4.INSTANCE_ALREADY_RUNNING; + err.instance = instance; + return err; + } + + /** + * Creates an error object to be thrown when done() is called multiple times in a test + * + * @public + * @param {Runnable} runnable - Original runnable + * @param {Error} [originalErr] - Original error, if any + * @returns {Error} instance detailing the error condition + * @static + */ + function createMultipleDoneError$1(runnable, originalErr) { + var title; + try { + title = format('<%s>', runnable.fullTitle()); + if (runnable.parent.root) { + title += ' (of root suite)'; + } + } catch (ignored) { + title = format('<%s> (of unknown suite)', runnable.title); + } + var message = format( + 'done() called multiple times in %s %s', + runnable.type ? runnable.type : 'unknown runnable', + title + ); + if (runnable.file) { + message += format(' of file %s', runnable.file); + } + if (originalErr) { + message += format('; in addition, done() received error: %s', originalErr); + } + + var err = new Error(message); + err.code = constants$4.MULTIPLE_DONE; + err.valueType = typeof originalErr; + err.value = originalErr; + return err; + } + + /** + * Creates an error object to be thrown when `.only()` is used with + * `--forbid-only`. + * @static + * @public + * @param {Mocha} mocha - Mocha instance + * @returns {Error} Error with code {@link constants.FORBIDDEN_EXCLUSIVITY} + */ + function createForbiddenExclusivityError$1(mocha) { + var err = new Error( + mocha.isWorker + ? '`.only` is not supported in parallel mode' + : '`.only` forbidden by --forbid-only' + ); + err.code = constants$4.FORBIDDEN_EXCLUSIVITY; + return err; + } + + /** + * Creates an error object to be thrown when a plugin definition is invalid + * @static + * @param {string} msg - Error message + * @param {PluginDefinition} [pluginDef] - Problematic plugin definition + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ + function createInvalidPluginDefinitionError(msg, pluginDef) { + const err = new Error(msg); + err.code = constants$4.INVALID_PLUGIN_DEFINITION; + err.pluginDef = pluginDef; + return err; + } + + /** + * Creates an error object to be thrown when a plugin implementation (user code) is invalid + * @static + * @param {string} msg - Error message + * @param {Object} [opts] - Plugin definition and user-supplied implementation + * @param {PluginDefinition} [opts.pluginDef] - Plugin Definition + * @param {*} [opts.pluginImpl] - Plugin Implementation (user-supplied) + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ + function createInvalidPluginImplementationError( + msg, + {pluginDef, pluginImpl} = {} + ) { + const err = new Error(msg); + err.code = constants$4.INVALID_PLUGIN_IMPLEMENTATION; + err.pluginDef = pluginDef; + err.pluginImpl = pluginImpl; + return err; + } + + /** + * Creates an error object to be thrown when a runnable exceeds its allowed run time. + * @static + * @param {string} msg - Error message + * @param {number} [timeout] - Timeout in ms + * @param {string} [file] - File, if given + * @returns {MochaTimeoutError} + */ + function createTimeoutError$1(msg, timeout, file) { + const err = new Error(msg); + err.code = constants$4.TIMEOUT; + err.timeout = timeout; + err.file = file; + return err; + } + + /** + * Creates an error object to be thrown when file is unparsable + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} filename - File name + * @returns {Error} Error with code {@link constants.UNPARSABLE_FILE} + */ + function createUnparsableFileError(message, filename) { + var err = new Error(message); + err.code = constants$4.UNPARSABLE_FILE; + return err; + } + + /** + * Returns `true` if an error came out of Mocha. + * _Can suffer from false negatives, but not false positives._ + * @static + * @public + * @param {*} err - Error, or anything + * @returns {boolean} + */ + const isMochaError$1 = err => + Boolean(err && typeof err === 'object' && MOCHA_ERRORS.has(err.code)); + + var errors = { + constants: constants$4, + createFatalError: createFatalError$1, + createForbiddenExclusivityError: createForbiddenExclusivityError$1, + createInvalidArgumentTypeError: createInvalidArgumentTypeError$1, + createInvalidArgumentValueError, + createInvalidExceptionError: createInvalidExceptionError$2, + createInvalidInterfaceError, + createInvalidLegacyPluginError, + createInvalidPluginDefinitionError, + createInvalidPluginError, + createInvalidPluginImplementationError, + createInvalidReporterError, + createMissingArgumentError: createMissingArgumentError$1, + createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError, + createMultipleDoneError: createMultipleDoneError$1, + createNoFilesMatchPatternError, + createTimeoutError: createTimeoutError$1, + createUnparsableFileError, + createUnsupportedError: createUnsupportedError$2, + deprecate, + isMochaError: isMochaError$1, + warn + }; + + var EventEmitter$1 = EventEmitter$2.EventEmitter; + + var debug$1 = browser('mocha:runnable'); + + + const { + createInvalidExceptionError: createInvalidExceptionError$1, + createMultipleDoneError, + createTimeoutError + } = errors; + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + * @private + */ + var Date$4 = commonjsGlobal.Date; + var setTimeout$3 = commonjsGlobal.setTimeout; + var clearTimeout$1 = commonjsGlobal.clearTimeout; + var toString = Object.prototype.toString; + + var runnable = Runnable; + + /** + * Initialize a new `Runnable` with the given `title` and callback `fn`. + * + * @class + * @extends external:EventEmitter + * @public + * @param {String} title + * @param {Function} fn + */ + function Runnable(title, fn) { + this.title = title; + this.fn = fn; + this.body = (fn || '').toString(); + this.async = fn && fn.length; + this.sync = !this.async; + this._timeout = 2000; + this._slow = 75; + this._retries = -1; + utils.assignNewMochaID(this); + Object.defineProperty(this, 'id', { + get() { + return utils.getMochaID(this); + } + }); + this.reset(); + } + + /** + * Inherit from `EventEmitter.prototype`. + */ + utils.inherits(Runnable, EventEmitter$1); + + /** + * Resets the state initially or for a next run. + */ + Runnable.prototype.reset = function () { + this.timedOut = false; + this._currentRetry = 0; + this.pending = false; + delete this.state; + delete this.err; + }; + + /** + * Get current timeout value in msecs. + * + * @private + * @returns {number} current timeout threshold value + */ + /** + * @summary + * Set timeout threshold value (msecs). + * + * @description + * A string argument can use shorthand (e.g., "2s") and will be converted. + * The value will be clamped to range [0, 2^31-1]. + * If clamped value matches either range endpoint, timeouts will be disabled. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value} + * @param {number|string} ms - Timeout threshold value. + * @returns {Runnable} this + * @chainable + */ + Runnable.prototype.timeout = function (ms) { + if (!arguments.length) { + return this._timeout; + } + if (typeof ms === 'string') { + ms = ms$1(ms); + } + + // Clamp to range + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = utils.clamp(ms, range); + + // see #1652 for reasoning + if (ms === range[0] || ms === range[1]) { + this._timeout = 0; + } else { + this._timeout = ms; + } + debug$1('timeout %d', this._timeout); + + if (this.timer) { + this.resetTimeout(); + } + return this; + }; + + /** + * Set or get slow `ms`. + * + * @private + * @param {number|string} ms + * @return {Runnable|number} ms or Runnable instance. + */ + Runnable.prototype.slow = function (ms) { + if (!arguments.length || typeof ms === 'undefined') { + return this._slow; + } + if (typeof ms === 'string') { + ms = ms$1(ms); + } + debug$1('slow %d', ms); + this._slow = ms; + return this; + }; + + /** + * Halt and mark as pending. + * + * @memberof Mocha.Runnable + * @public + */ + Runnable.prototype.skip = function () { + this.pending = true; + throw new pending('sync skip; aborting execution'); + }; + + /** + * Check if this runnable or its parent suite is marked as pending. + * + * @private + */ + Runnable.prototype.isPending = function () { + return this.pending || (this.parent && this.parent.isPending()); + }; + + /** + * Return `true` if this Runnable has failed. + * @return {boolean} + * @private + */ + Runnable.prototype.isFailed = function () { + return !this.isPending() && this.state === constants$3.STATE_FAILED; + }; + + /** + * Return `true` if this Runnable has passed. + * @return {boolean} + * @private + */ + Runnable.prototype.isPassed = function () { + return !this.isPending() && this.state === constants$3.STATE_PASSED; + }; + + /** + * Set or get number of retries. + * + * @private + */ + Runnable.prototype.retries = function (n) { + if (!arguments.length) { + return this._retries; + } + this._retries = n; + }; + + /** + * Set or get current retry + * + * @private + */ + Runnable.prototype.currentRetry = function (n) { + if (!arguments.length) { + return this._currentRetry; + } + this._currentRetry = n; + }; + + /** + * Return the full title generated by recursively concatenating the parent's + * full title. + * + * @memberof Mocha.Runnable + * @public + * @return {string} + */ + Runnable.prototype.fullTitle = function () { + return this.titlePath().join(' '); + }; + + /** + * Return the title path generated by concatenating the parent's title path with the title. + * + * @memberof Mocha.Runnable + * @public + * @return {string} + */ + Runnable.prototype.titlePath = function () { + return this.parent.titlePath().concat([this.title]); + }; + + /** + * Clear the timeout. + * + * @private + */ + Runnable.prototype.clearTimeout = function () { + clearTimeout$1(this.timer); + }; + + /** + * Reset the timeout. + * + * @private + */ + Runnable.prototype.resetTimeout = function () { + var self = this; + var ms = this.timeout(); + + if (ms === 0) { + return; + } + this.clearTimeout(); + this.timer = setTimeout$3(function () { + if (self.timeout() === 0) { + return; + } + self.callback(self._timeoutError(ms)); + self.timedOut = true; + }, ms); + }; + + /** + * Set or get a list of whitelisted globals for this test run. + * + * @private + * @param {string[]} globals + */ + Runnable.prototype.globals = function (globals) { + if (!arguments.length) { + return this._allowedGlobals; + } + this._allowedGlobals = globals; + }; + + /** + * Run the test and invoke `fn(err)`. + * + * @param {Function} fn + * @private + */ + Runnable.prototype.run = function (fn) { + var self = this; + var start = new Date$4(); + var ctx = this.ctx; + var finished; + var errorWasHandled = false; + + if (this.isPending()) return fn(); + + // Sometimes the ctx exists, but it is not runnable + if (ctx && ctx.runnable) { + ctx.runnable(this); + } + + // called multiple times + function multiple(err) { + if (errorWasHandled) { + return; + } + errorWasHandled = true; + self.emit('error', createMultipleDoneError(self, err)); + } + + // finished + function done(err) { + var ms = self.timeout(); + if (self.timedOut) { + return; + } + + if (finished) { + return multiple(err); + } + + self.clearTimeout(); + self.duration = new Date$4() - start; + finished = true; + if (!err && self.duration > ms && ms > 0) { + err = self._timeoutError(ms); + } + fn(err); + } + + // for .resetTimeout() and Runner#uncaught() + this.callback = done; + + if (this.fn && typeof this.fn.call !== 'function') { + done( + new TypeError( + 'A runnable must be passed a function as its second argument.' + ) + ); + return; + } + + // explicit async with `done` argument + if (this.async) { + this.resetTimeout(); + + // allows skip() to be used in an explicit async context + this.skip = function asyncSkip() { + this.pending = true; + done(); + // halt execution, the uncaught handler will ignore the failure. + throw new pending('async skip; aborting execution'); + }; + + try { + callFnAsync(this.fn); + } catch (err) { + // handles async runnables which actually run synchronously + errorWasHandled = true; + if (err instanceof pending) { + return; // done() is already called in this.skip() + } else if (this.allowUncaught) { + throw err; + } + done(Runnable.toValueOrError(err)); + } + return; + } + + // sync or promise-returning + try { + callFn(this.fn); + } catch (err) { + errorWasHandled = true; + if (err instanceof pending) { + return done(); + } else if (this.allowUncaught) { + throw err; + } + done(Runnable.toValueOrError(err)); + } + + function callFn(fn) { + var result = fn.call(ctx); + if (result && typeof result.then === 'function') { + self.resetTimeout(); + result.then( + function () { + done(); + // Return null so libraries like bluebird do not warn about + // subsequently constructed Promises. + return null; + }, + function (reason) { + done(reason || new Error('Promise rejected with no or falsy reason')); + } + ); + } else { + if (self.asyncOnly) { + return done( + new Error( + '--async-only option in use without declaring `done()` or returning a promise' + ) + ); + } + + done(); + } + } + + function callFnAsync(fn) { + var result = fn.call(ctx, function (err) { + if (err instanceof Error || toString.call(err) === '[object Error]') { + return done(err); + } + if (err) { + if (Object.prototype.toString.call(err) === '[object Object]') { + return done( + new Error('done() invoked with non-Error: ' + JSON.stringify(err)) + ); + } + return done(new Error('done() invoked with non-Error: ' + err)); + } + if (result && utils.isPromise(result)) { + return done( + new Error( + 'Resolution method is overspecified. Specify a callback *or* return a Promise; not both.' + ) + ); + } + + done(); + }); + } + }; + + /** + * Instantiates a "timeout" error + * + * @param {number} ms - Timeout (in milliseconds) + * @returns {Error} a "timeout" error + * @private + */ + Runnable.prototype._timeoutError = function (ms) { + let msg = `Timeout of ${ms}ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.`; + if (this.file) { + msg += ' (' + this.file + ')'; + } + return createTimeoutError(msg, ms, this.file); + }; + + var constants$3 = utils.defineConstants( + /** + * {@link Runnable}-related constants. + * @public + * @memberof Runnable + * @readonly + * @static + * @alias constants + * @enum {string} + */ + { + /** + * Value of `state` prop when a `Runnable` has failed + */ + STATE_FAILED: 'failed', + /** + * Value of `state` prop when a `Runnable` has passed + */ + STATE_PASSED: 'passed', + /** + * Value of `state` prop when a `Runnable` has been skipped by user + */ + STATE_PENDING: 'pending' + } + ); + + /** + * Given `value`, return identity if truthy, otherwise create an "invalid exception" error and return that. + * @param {*} [value] - Value to return, if present + * @returns {*|Error} `value`, otherwise an `Error` + * @private + */ + Runnable.toValueOrError = function (value) { + return ( + value || + createInvalidExceptionError$1( + 'Runnable failed with falsy or undefined exception. Please throw an Error instead.', + value + ) + ); + }; + + Runnable.constants = constants$3; + + const {inherits, constants: constants$2} = utils; + const {MOCHA_ID_PROP_NAME: MOCHA_ID_PROP_NAME$1} = constants$2; + + /** + * Expose `Hook`. + */ + + var hook = Hook; + + /** + * Initialize a new `Hook` with the given `title` and callback `fn` + * + * @class + * @extends Runnable + * @param {String} title + * @param {Function} fn + */ + function Hook(title, fn) { + runnable.call(this, title, fn); + this.type = 'hook'; + } + + /** + * Inherit from `Runnable.prototype`. + */ + inherits(Hook, runnable); + + /** + * Resets the state for a next run. + */ + Hook.prototype.reset = function () { + runnable.prototype.reset.call(this); + delete this._error; + }; + + /** + * Get or set the test `err`. + * + * @memberof Hook + * @public + * @param {Error} err + * @return {Error} + */ + Hook.prototype.error = function (err) { + if (!arguments.length) { + err = this._error; + this._error = null; + return err; + } + + this._error = err; + }; + + /** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + Hook.prototype.serialize = function serialize() { + return { + $$currentRetry: this.currentRetry(), + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + $$titlePath: this.titlePath(), + ctx: + this.ctx && this.ctx.currentTest + ? { + currentTest: { + title: this.ctx.currentTest.title, + [MOCHA_ID_PROP_NAME$1]: this.ctx.currentTest.id + } + } + : {}, + duration: this.duration, + file: this.file, + parent: { + $$fullTitle: this.parent.fullTitle(), + [MOCHA_ID_PROP_NAME$1]: this.parent.id + }, + state: this.state, + title: this.title, + type: this.type, + [MOCHA_ID_PROP_NAME$1]: this.id + }; + }; + + var suite = createCommonjsModule(function (module, exports) { + + /** + * Module dependencies. + * @private + */ + const {EventEmitter} = EventEmitter$2; + + var { + assignNewMochaID, + clamp, + constants: utilsConstants, + defineConstants, + getMochaID, + inherits, + isString + } = utils; + const debug = browser('mocha:suite'); + + + + const {MOCHA_ID_PROP_NAME} = utilsConstants; + + /** + * Expose `Suite`. + */ + + module.exports = Suite; + + /** + * Create a new `Suite` with the given `title` and parent `Suite`. + * + * @public + * @param {Suite} parent - Parent suite (required!) + * @param {string} title - Title + * @return {Suite} + */ + Suite.create = function (parent, title) { + var suite = new Suite(title, parent.ctx); + suite.parent = parent; + title = suite.fullTitle(); + parent.addSuite(suite); + return suite; + }; + + /** + * Constructs a new `Suite` instance with the given `title`, `ctx`, and `isRoot`. + * + * @public + * @class + * @extends EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter|EventEmitter} + * @param {string} title - Suite title. + * @param {Context} parentContext - Parent context instance. + * @param {boolean} [isRoot=false] - Whether this is the root suite. + */ + function Suite(title, parentContext, isRoot) { + if (!isString(title)) { + throw errors.createInvalidArgumentTypeError( + 'Suite argument "title" must be a string. Received type "' + + typeof title + + '"', + 'title', + 'string' + ); + } + this.title = title; + function Context() {} + Context.prototype = parentContext; + this.ctx = new Context(); + this.suites = []; + this.tests = []; + this.root = isRoot === true; + this.pending = false; + this._retries = -1; + this._beforeEach = []; + this._beforeAll = []; + this._afterEach = []; + this._afterAll = []; + this._timeout = 2000; + this._slow = 75; + this._bail = false; + this._onlyTests = []; + this._onlySuites = []; + assignNewMochaID(this); + + Object.defineProperty(this, 'id', { + get() { + return getMochaID(this); + } + }); + + this.reset(); + } + + /** + * Inherit from `EventEmitter.prototype`. + */ + inherits(Suite, EventEmitter); + + /** + * Resets the state initially or for a next run. + */ + Suite.prototype.reset = function () { + this.delayed = false; + function doReset(thingToReset) { + thingToReset.reset(); + } + this.suites.forEach(doReset); + this.tests.forEach(doReset); + this._beforeEach.forEach(doReset); + this._afterEach.forEach(doReset); + this._beforeAll.forEach(doReset); + this._afterAll.forEach(doReset); + }; + + /** + * Return a clone of this `Suite`. + * + * @private + * @return {Suite} + */ + Suite.prototype.clone = function () { + var suite = new Suite(this.title); + debug('clone'); + suite.ctx = this.ctx; + suite.root = this.root; + suite.timeout(this.timeout()); + suite.retries(this.retries()); + suite.slow(this.slow()); + suite.bail(this.bail()); + return suite; + }; + + /** + * Set or get timeout `ms` or short-hand such as "2s". + * + * @private + * @todo Do not attempt to set value if `ms` is undefined + * @param {number|string} ms + * @return {Suite|number} for chaining + */ + Suite.prototype.timeout = function (ms) { + if (!arguments.length) { + return this._timeout; + } + if (typeof ms === 'string') { + ms = ms$1(ms); + } + + // Clamp to range + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = clamp(ms, range); + + debug('timeout %d', ms); + this._timeout = parseInt(ms, 10); + return this; + }; + + /** + * Set or get number of times to retry a failed test. + * + * @private + * @param {number|string} n + * @return {Suite|number} for chaining + */ + Suite.prototype.retries = function (n) { + if (!arguments.length) { + return this._retries; + } + debug('retries %d', n); + this._retries = parseInt(n, 10) || 0; + return this; + }; + + /** + * Set or get slow `ms` or short-hand such as "2s". + * + * @private + * @param {number|string} ms + * @return {Suite|number} for chaining + */ + Suite.prototype.slow = function (ms) { + if (!arguments.length) { + return this._slow; + } + if (typeof ms === 'string') { + ms = ms$1(ms); + } + debug('slow %d', ms); + this._slow = ms; + return this; + }; + + /** + * Set or get whether to bail after first error. + * + * @private + * @param {boolean} bail + * @return {Suite|number} for chaining + */ + Suite.prototype.bail = function (bail) { + if (!arguments.length) { + return this._bail; + } + debug('bail %s', bail); + this._bail = bail; + return this; + }; + + /** + * Check if this suite or its parent suite is marked as pending. + * + * @private + */ + Suite.prototype.isPending = function () { + return this.pending || (this.parent && this.parent.isPending()); + }; + + /** + * Generic hook-creator. + * @private + * @param {string} title - Title of hook + * @param {Function} fn - Hook callback + * @returns {Hook} A new hook + */ + Suite.prototype._createHook = function (title, fn) { + var hook$1 = new hook(title, fn); + hook$1.parent = this; + hook$1.timeout(this.timeout()); + hook$1.retries(this.retries()); + hook$1.slow(this.slow()); + hook$1.ctx = this.ctx; + hook$1.file = this.file; + return hook$1; + }; + + /** + * Run `fn(test[, done])` before running tests. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + Suite.prototype.beforeAll = function (title, fn) { + if (this.isPending()) { + return this; + } + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + title = '"before all" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + this._beforeAll.push(hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_ALL, hook); + return this; + }; + + /** + * Run `fn(test[, done])` after running tests. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + Suite.prototype.afterAll = function (title, fn) { + if (this.isPending()) { + return this; + } + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + title = '"after all" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + this._afterAll.push(hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_ALL, hook); + return this; + }; + + /** + * Run `fn(test[, done])` before each test case. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + Suite.prototype.beforeEach = function (title, fn) { + if (this.isPending()) { + return this; + } + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + title = '"before each" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + this._beforeEach.push(hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_EACH, hook); + return this; + }; + + /** + * Run `fn(test[, done])` after each test case. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + Suite.prototype.afterEach = function (title, fn) { + if (this.isPending()) { + return this; + } + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + title = '"after each" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + this._afterEach.push(hook); + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_EACH, hook); + return this; + }; + + /** + * Add a test `suite`. + * + * @private + * @param {Suite} suite + * @return {Suite} for chaining + */ + Suite.prototype.addSuite = function (suite) { + suite.parent = this; + suite.root = false; + suite.timeout(this.timeout()); + suite.retries(this.retries()); + suite.slow(this.slow()); + suite.bail(this.bail()); + this.suites.push(suite); + this.emit(constants.EVENT_SUITE_ADD_SUITE, suite); + return this; + }; + + /** + * Add a `test` to this suite. + * + * @private + * @param {Test} test + * @return {Suite} for chaining + */ + Suite.prototype.addTest = function (test) { + test.parent = this; + test.timeout(this.timeout()); + test.retries(this.retries()); + test.slow(this.slow()); + test.ctx = this.ctx; + this.tests.push(test); + this.emit(constants.EVENT_SUITE_ADD_TEST, test); + return this; + }; + + /** + * Return the full title generated by recursively concatenating the parent's + * full title. + * + * @memberof Suite + * @public + * @return {string} + */ + Suite.prototype.fullTitle = function () { + return this.titlePath().join(' '); + }; + + /** + * Return the title path generated by recursively concatenating the parent's + * title path. + * + * @memberof Suite + * @public + * @return {string} + */ + Suite.prototype.titlePath = function () { + var result = []; + if (this.parent) { + result = result.concat(this.parent.titlePath()); + } + if (!this.root) { + result.push(this.title); + } + return result; + }; + + /** + * Return the total number of tests. + * + * @memberof Suite + * @public + * @return {number} + */ + Suite.prototype.total = function () { + return ( + this.suites.reduce(function (sum, suite) { + return sum + suite.total(); + }, 0) + this.tests.length + ); + }; + + /** + * Iterates through each suite recursively to find all tests. Applies a + * function in the format `fn(test)`. + * + * @private + * @param {Function} fn + * @return {Suite} + */ + Suite.prototype.eachTest = function (fn) { + this.tests.forEach(fn); + this.suites.forEach(function (suite) { + suite.eachTest(fn); + }); + return this; + }; + + /** + * This will run the root suite if we happen to be running in delayed mode. + * @private + */ + Suite.prototype.run = function run() { + if (this.root) { + this.emit(constants.EVENT_ROOT_SUITE_RUN); + } + }; + + /** + * Determines whether a suite has an `only` test or suite as a descendant. + * + * @private + * @returns {Boolean} + */ + Suite.prototype.hasOnly = function hasOnly() { + return ( + this._onlyTests.length > 0 || + this._onlySuites.length > 0 || + this.suites.some(function (suite) { + return suite.hasOnly(); + }) + ); + }; + + /** + * Filter suites based on `isOnly` logic. + * + * @private + * @returns {Boolean} + */ + Suite.prototype.filterOnly = function filterOnly() { + if (this._onlyTests.length) { + // If the suite contains `only` tests, run those and ignore any nested suites. + this.tests = this._onlyTests; + this.suites = []; + } else { + // Otherwise, do not run any of the tests in this suite. + this.tests = []; + this._onlySuites.forEach(function (onlySuite) { + // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. + // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. + if (onlySuite.hasOnly()) { + onlySuite.filterOnly(); + } + }); + // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. + var onlySuites = this._onlySuites; + this.suites = this.suites.filter(function (childSuite) { + return onlySuites.indexOf(childSuite) !== -1 || childSuite.filterOnly(); + }); + } + // Keep the suite only if there is something to run + return this.tests.length > 0 || this.suites.length > 0; + }; + + /** + * Adds a suite to the list of subsuites marked `only`. + * + * @private + * @param {Suite} suite + */ + Suite.prototype.appendOnlySuite = function (suite) { + this._onlySuites.push(suite); + }; + + /** + * Marks a suite to be `only`. + * + * @private + */ + Suite.prototype.markOnly = function () { + this.parent && this.parent.appendOnlySuite(this); + }; + + /** + * Adds a test to the list of tests marked `only`. + * + * @private + * @param {Test} test + */ + Suite.prototype.appendOnlyTest = function (test) { + this._onlyTests.push(test); + }; + + /** + * Returns the array of hooks by hook name; see `HOOK_TYPE_*` constants. + * @private + */ + Suite.prototype.getHooks = function getHooks(name) { + return this['_' + name]; + }; + + /** + * cleans all references from this suite and all child suites. + */ + Suite.prototype.dispose = function () { + this.suites.forEach(function (suite) { + suite.dispose(); + }); + this.cleanReferences(); + }; + + /** + * Cleans up the references to all the deferred functions + * (before/after/beforeEach/afterEach) and tests of a Suite. + * These must be deleted otherwise a memory leak can happen, + * as those functions may reference variables from closures, + * thus those variables can never be garbage collected as long + * as the deferred functions exist. + * + * @private + */ + Suite.prototype.cleanReferences = function cleanReferences() { + function cleanArrReferences(arr) { + for (var i = 0; i < arr.length; i++) { + delete arr[i].fn; + } + } + + if (Array.isArray(this._beforeAll)) { + cleanArrReferences(this._beforeAll); + } + + if (Array.isArray(this._beforeEach)) { + cleanArrReferences(this._beforeEach); + } + + if (Array.isArray(this._afterAll)) { + cleanArrReferences(this._afterAll); + } + + if (Array.isArray(this._afterEach)) { + cleanArrReferences(this._afterEach); + } + + for (var i = 0; i < this.tests.length; i++) { + delete this.tests[i].fn; + } + }; + + /** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + Suite.prototype.serialize = function serialize() { + return { + _bail: this._bail, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + root: this.root, + title: this.title, + [MOCHA_ID_PROP_NAME]: this.id, + parent: this.parent ? {[MOCHA_ID_PROP_NAME]: this.parent.id} : null + }; + }; + + var constants = defineConstants( + /** + * {@link Suite}-related constants. + * @public + * @memberof Suite + * @alias constants + * @readonly + * @static + * @enum {string} + */ + { + /** + * Event emitted after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_POST_REQUIRE: 'post-require', + /** + * Event emitted before a test file has been loaded. In browser, this is emitted once an interface has been selected. + */ + EVENT_FILE_PRE_REQUIRE: 'pre-require', + /** + * Event emitted immediately after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_REQUIRE: 'require', + /** + * Event emitted when `global.run()` is called (use with `delay` option). + */ + EVENT_ROOT_SUITE_RUN: 'run', + + /** + * Namespace for collection of a `Suite`'s "after all" hooks. + */ + HOOK_TYPE_AFTER_ALL: 'afterAll', + /** + * Namespace for collection of a `Suite`'s "after each" hooks. + */ + HOOK_TYPE_AFTER_EACH: 'afterEach', + /** + * Namespace for collection of a `Suite`'s "before all" hooks. + */ + HOOK_TYPE_BEFORE_ALL: 'beforeAll', + /** + * Namespace for collection of a `Suite`'s "before each" hooks. + */ + HOOK_TYPE_BEFORE_EACH: 'beforeEach', + + /** + * Emitted after a child `Suite` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_SUITE: 'suite', + /** + * Emitted after an "after all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_ALL: 'afterAll', + /** + * Emitted after an "after each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_EACH: 'afterEach', + /** + * Emitted after an "before all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_ALL: 'beforeAll', + /** + * Emitted after an "before each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_EACH: 'beforeEach', + /** + * Emitted after a `Test` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_TEST: 'test' + } + ); + + Suite.constants = constants; + }); + + /** + * Module dependencies. + * @private + */ + var EventEmitter = EventEmitter$2.EventEmitter; + + + var debug = browser('mocha:runner'); + + + var HOOK_TYPE_BEFORE_EACH = suite.constants.HOOK_TYPE_BEFORE_EACH; + var HOOK_TYPE_AFTER_EACH = suite.constants.HOOK_TYPE_AFTER_EACH; + var HOOK_TYPE_AFTER_ALL = suite.constants.HOOK_TYPE_AFTER_ALL; + var HOOK_TYPE_BEFORE_ALL = suite.constants.HOOK_TYPE_BEFORE_ALL; + var EVENT_ROOT_SUITE_RUN = suite.constants.EVENT_ROOT_SUITE_RUN; + var STATE_FAILED = runnable.constants.STATE_FAILED; + var STATE_PASSED = runnable.constants.STATE_PASSED; + var STATE_PENDING = runnable.constants.STATE_PENDING; + var stackFilter = utils.stackTraceFilter(); + var stringify = utils.stringify; + + const { + createInvalidExceptionError, + createUnsupportedError: createUnsupportedError$1, + createFatalError, + isMochaError, + constants: errorConstants + } = errors; + + /** + * Non-enumerable globals. + * @private + * @readonly + */ + var globals = [ + 'setTimeout', + 'clearTimeout', + 'setInterval', + 'clearInterval', + 'XMLHttpRequest', + 'Date', + 'setImmediate', + 'clearImmediate' + ]; + + var constants$1 = utils.defineConstants( + /** + * {@link Runner}-related constants. + * @public + * @memberof Runner + * @readonly + * @alias constants + * @static + * @enum {string} + */ + { + /** + * Emitted when {@link Hook} execution begins + */ + EVENT_HOOK_BEGIN: 'hook', + /** + * Emitted when {@link Hook} execution ends + */ + EVENT_HOOK_END: 'hook end', + /** + * Emitted when Root {@link Suite} execution begins (all files have been parsed and hooks/tests are ready for execution) + */ + EVENT_RUN_BEGIN: 'start', + /** + * Emitted when Root {@link Suite} execution has been delayed via `delay` option + */ + EVENT_DELAY_BEGIN: 'waiting', + /** + * Emitted when delayed Root {@link Suite} execution is triggered by user via `global.run()` + */ + EVENT_DELAY_END: 'ready', + /** + * Emitted when Root {@link Suite} execution ends + */ + EVENT_RUN_END: 'end', + /** + * Emitted when {@link Suite} execution begins + */ + EVENT_SUITE_BEGIN: 'suite', + /** + * Emitted when {@link Suite} execution ends + */ + EVENT_SUITE_END: 'suite end', + /** + * Emitted when {@link Test} execution begins + */ + EVENT_TEST_BEGIN: 'test', + /** + * Emitted when {@link Test} execution ends + */ + EVENT_TEST_END: 'test end', + /** + * Emitted when {@link Test} execution fails + */ + EVENT_TEST_FAIL: 'fail', + /** + * Emitted when {@link Test} execution succeeds + */ + EVENT_TEST_PASS: 'pass', + /** + * Emitted when {@link Test} becomes pending + */ + EVENT_TEST_PENDING: 'pending', + /** + * Emitted when {@link Test} execution has failed, but will retry + */ + EVENT_TEST_RETRY: 'retry', + /** + * Initial state of Runner + */ + STATE_IDLE: 'idle', + /** + * State set to this value when the Runner has started running + */ + STATE_RUNNING: 'running', + /** + * State set to this value when the Runner has stopped + */ + STATE_STOPPED: 'stopped' + } + ); + + class Runner extends EventEmitter { + /** + * Initialize a `Runner` at the Root {@link Suite}, which represents a hierarchy of {@link Suite|Suites} and {@link Test|Tests}. + * + * @extends external:EventEmitter + * @public + * @class + * @param {Suite} suite - Root suite + * @param {Object|boolean} [opts] - Options. If `boolean` (deprecated), whether to delay execution of root suite until ready. + * @param {boolean} [opts.cleanReferencesAfterRun] - Whether to clean references to test fns and hooks when a suite is done. + * @param {boolean} [opts.delay] - Whether to delay execution of root suite until ready. + * @param {boolean} [opts.dryRun] - Whether to report tests without running them. + * @param {boolean} [opts.failZero] - Whether to fail test run if zero tests encountered. + */ + constructor(suite, opts) { + super(); + if (opts === undefined) { + opts = {}; + } + if (typeof opts === 'boolean') { + // TODO: remove this + errors.deprecate( + '"Runner(suite: Suite, delay: boolean)" is deprecated. Use "Runner(suite: Suite, {delay: boolean})" instead.' + ); + this._delay = opts; + opts = {}; + } else { + this._delay = opts.delay; + } + var self = this; + this._globals = []; + this._abort = false; + this.suite = suite; + this._opts = opts; + this.state = constants$1.STATE_IDLE; + this.total = suite.total(); + this.failures = 0; + /** + * @type {Map>>} + */ + this._eventListeners = new Map(); + this.on(constants$1.EVENT_TEST_END, function (test) { + if (test.type === 'test' && test.retriedTest() && test.parent) { + var idx = + test.parent.tests && test.parent.tests.indexOf(test.retriedTest()); + if (idx > -1) test.parent.tests[idx] = test; + } + self.checkGlobals(test); + }); + this.on(constants$1.EVENT_HOOK_END, function (hook) { + self.checkGlobals(hook); + }); + this._defaultGrep = /.*/; + this.grep(this._defaultGrep); + this.globals(this.globalProps()); + + this.uncaught = this._uncaught.bind(this); + this.unhandled = (reason, promise) => { + if (isMochaError(reason)) { + debug( + 'trapped unhandled rejection coming out of Mocha; forwarding to uncaught handler:', + reason + ); + this.uncaught(reason); + } else { + debug( + 'trapped unhandled rejection from (probably) user code; re-emitting on process' + ); + this._removeEventListener( + process$1, + 'unhandledRejection', + this.unhandled + ); + try { + process$1.emit('unhandledRejection', reason, promise); + } finally { + this._addEventListener(process$1, 'unhandledRejection', this.unhandled); + } + } + }; + } + } + + /** + * Wrapper for setImmediate, process.nextTick, or browser polyfill. + * + * @param {Function} fn + * @private + */ + Runner.immediately = commonjsGlobal.setImmediate || nextTick$1; + + /** + * Replacement for `target.on(eventName, listener)` that does bookkeeping to remove them when this runner instance is disposed. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {string} fn - Listener function + * @private + */ + Runner.prototype._addEventListener = function (target, eventName, listener) { + debug( + '_addEventListener(): adding for event %s; %d current listeners', + eventName, + target.listenerCount(eventName) + ); + /* istanbul ignore next */ + if ( + this._eventListeners.has(target) && + this._eventListeners.get(target).has(eventName) && + this._eventListeners.get(target).get(eventName).has(listener) + ) { + debug( + 'warning: tried to attach duplicate event listener for %s', + eventName + ); + return; + } + target.on(eventName, listener); + const targetListeners = this._eventListeners.has(target) + ? this._eventListeners.get(target) + : new Map(); + const targetEventListeners = targetListeners.has(eventName) + ? targetListeners.get(eventName) + : new Set(); + targetEventListeners.add(listener); + targetListeners.set(eventName, targetEventListeners); + this._eventListeners.set(target, targetListeners); + }; + + /** + * Replacement for `target.removeListener(eventName, listener)` that also updates the bookkeeping. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {function} listener - Listener function + * @private + */ + Runner.prototype._removeEventListener = function (target, eventName, listener) { + target.removeListener(eventName, listener); + + if (this._eventListeners.has(target)) { + const targetListeners = this._eventListeners.get(target); + if (targetListeners.has(eventName)) { + const targetEventListeners = targetListeners.get(eventName); + targetEventListeners.delete(listener); + if (!targetEventListeners.size) { + targetListeners.delete(eventName); + } + } + if (!targetListeners.size) { + this._eventListeners.delete(target); + } + } else { + debug('trying to remove listener for untracked object %s', target); + } + }; + + /** + * Removes all event handlers set during a run on this instance. + * Remark: this does _not_ clean/dispose the tests or suites themselves. + */ + Runner.prototype.dispose = function () { + this.removeAllListeners(); + this._eventListeners.forEach((targetListeners, target) => { + targetListeners.forEach((targetEventListeners, eventName) => { + targetEventListeners.forEach(listener => { + target.removeListener(eventName, listener); + }); + }); + }); + this._eventListeners.clear(); + }; + + /** + * Run tests with full titles matching `re`. Updates runner.total + * with number of tests matched. + * + * @public + * @memberof Runner + * @param {RegExp} re + * @param {boolean} invert + * @return {Runner} Runner instance. + */ + Runner.prototype.grep = function (re, invert) { + debug('grep(): setting to %s', re); + this._grep = re; + this._invert = invert; + this.total = this.grepTotal(this.suite); + return this; + }; + + /** + * Returns the number of tests matching the grep search for the + * given suite. + * + * @memberof Runner + * @public + * @param {Suite} suite + * @return {number} + */ + Runner.prototype.grepTotal = function (suite) { + var self = this; + var total = 0; + + suite.eachTest(function (test) { + var match = self._grep.test(test.fullTitle()); + if (self._invert) { + match = !match; + } + if (match) { + total++; + } + }); + + return total; + }; + + /** + * Return a list of global properties. + * + * @return {Array} + * @private + */ + Runner.prototype.globalProps = function () { + var props = Object.keys(commonjsGlobal); + + // non-enumerables + for (var i = 0; i < globals.length; ++i) { + if (~props.indexOf(globals[i])) { + continue; + } + props.push(globals[i]); + } + + return props; + }; + + /** + * Allow the given `arr` of globals. + * + * @public + * @memberof Runner + * @param {Array} arr + * @return {Runner} Runner instance. + */ + Runner.prototype.globals = function (arr) { + if (!arguments.length) { + return this._globals; + } + debug('globals(): setting to %O', arr); + this._globals = this._globals.concat(arr); + return this; + }; + + /** + * Check for global variable leaks. + * + * @private + */ + Runner.prototype.checkGlobals = function (test) { + if (!this.checkLeaks) { + return; + } + var ok = this._globals; + + var globals = this.globalProps(); + var leaks; + + if (test) { + ok = ok.concat(test._allowedGlobals || []); + } + + if (this.prevGlobalsLength === globals.length) { + return; + } + this.prevGlobalsLength = globals.length; + + leaks = filterLeaks(ok, globals); + this._globals = this._globals.concat(leaks); + + if (leaks.length) { + var msg = `global leak(s) detected: ${leaks.map(e => `'${e}'`).join(', ')}`; + this.fail(test, new Error(msg)); + } + }; + + /** + * Fail the given `test`. + * + * If `test` is a hook, failures work in the following pattern: + * - If bail, run corresponding `after each` and `after` hooks, + * then exit + * - Failed `before` hook skips all tests in a suite and subsuites, + * but jumps to corresponding `after` hook + * - Failed `before each` hook skips remaining tests in a + * suite and jumps to corresponding `after each` hook, + * which is run only once + * - Failed `after` hook does not alter execution order + * - Failed `after each` hook skips remaining tests in a + * suite and subsuites, but executes other `after each` + * hooks + * + * @private + * @param {Runnable} test + * @param {Error} err + * @param {boolean} [force=false] - Whether to fail a pending test. + */ + Runner.prototype.fail = function (test, err, force) { + force = force === true; + if (test.isPending() && !force) { + return; + } + if (this.state === constants$1.STATE_STOPPED) { + if (err.code === errorConstants.MULTIPLE_DONE) { + throw err; + } + throw createFatalError( + 'Test failed after root suite execution completed!', + err + ); + } + + ++this.failures; + debug('total number of failures: %d', this.failures); + test.state = STATE_FAILED; + + if (!isError(err)) { + err = thrown2Error(err); + } + + try { + err.stack = + this.fullStackTrace || !err.stack ? err.stack : stackFilter(err.stack); + } catch (ignore) { + // some environments do not take kindly to monkeying with the stack + } + + this.emit(constants$1.EVENT_TEST_FAIL, test, err); + }; + + /** + * Run hook `name` callbacks and then invoke `fn()`. + * + * @private + * @param {string} name + * @param {Function} fn + */ + + Runner.prototype.hook = function (name, fn) { + if (this._opts.dryRun) return fn(); + + var suite = this.suite; + var hooks = suite.getHooks(name); + var self = this; + + function next(i) { + var hook = hooks[i]; + if (!hook) { + return fn(); + } + self.currentRunnable = hook; + + if (name === HOOK_TYPE_BEFORE_ALL) { + hook.ctx.currentTest = hook.parent.tests[0]; + } else if (name === HOOK_TYPE_AFTER_ALL) { + hook.ctx.currentTest = hook.parent.tests[hook.parent.tests.length - 1]; + } else { + hook.ctx.currentTest = self.test; + } + + setHookTitle(hook); + + hook.allowUncaught = self.allowUncaught; + + self.emit(constants$1.EVENT_HOOK_BEGIN, hook); + + if (!hook.listeners('error').length) { + self._addEventListener(hook, 'error', function (err) { + self.fail(hook, err); + }); + } + + hook.run(function cbHookRun(err) { + var testError = hook.error(); + if (testError) { + self.fail(self.test, testError); + } + // conditional skip + if (hook.pending) { + if (name === HOOK_TYPE_AFTER_EACH) { + // TODO define and implement use case + if (self.test) { + self.test.pending = true; + } + } else if (name === HOOK_TYPE_BEFORE_EACH) { + if (self.test) { + self.test.pending = true; + } + self.emit(constants$1.EVENT_HOOK_END, hook); + hook.pending = false; // activates hook for next test + return fn(new Error('abort hookDown')); + } else if (name === HOOK_TYPE_BEFORE_ALL) { + suite.tests.forEach(function (test) { + test.pending = true; + }); + suite.suites.forEach(function (suite) { + suite.pending = true; + }); + hooks = []; + } else { + hook.pending = false; + var errForbid = createUnsupportedError$1('`this.skip` forbidden'); + self.fail(hook, errForbid); + return fn(errForbid); + } + } else if (err) { + self.fail(hook, err); + // stop executing hooks, notify callee of hook err + return fn(err); + } + self.emit(constants$1.EVENT_HOOK_END, hook); + delete hook.ctx.currentTest; + setHookTitle(hook); + next(++i); + }); + + function setHookTitle(hook) { + hook.originalTitle = hook.originalTitle || hook.title; + if (hook.ctx && hook.ctx.currentTest) { + hook.title = `${hook.originalTitle} for "${hook.ctx.currentTest.title}"`; + } else { + var parentTitle; + if (hook.parent.title) { + parentTitle = hook.parent.title; + } else { + parentTitle = hook.parent.root ? '{root}' : ''; + } + hook.title = `${hook.originalTitle} in "${parentTitle}"`; + } + } + } + + Runner.immediately(function () { + next(0); + }); + }; + + /** + * Run hook `name` for the given array of `suites` + * in order, and callback `fn(err, errSuite)`. + * + * @private + * @param {string} name + * @param {Array} suites + * @param {Function} fn + */ + Runner.prototype.hooks = function (name, suites, fn) { + var self = this; + var orig = this.suite; + + function next(suite) { + self.suite = suite; + + if (!suite) { + self.suite = orig; + return fn(); + } + + self.hook(name, function (err) { + if (err) { + var errSuite = self.suite; + self.suite = orig; + return fn(err, errSuite); + } + + next(suites.pop()); + }); + } + + next(suites.pop()); + }; + + /** + * Run 'afterEach' hooks from bottom up. + * + * @param {String} name + * @param {Function} fn + * @private + */ + Runner.prototype.hookUp = function (name, fn) { + var suites = [this.suite].concat(this.parents()).reverse(); + this.hooks(name, suites, fn); + }; + + /** + * Run 'beforeEach' hooks from top level down. + * + * @param {String} name + * @param {Function} fn + * @private + */ + Runner.prototype.hookDown = function (name, fn) { + var suites = [this.suite].concat(this.parents()); + this.hooks(name, suites, fn); + }; + + /** + * Return an array of parent Suites from + * closest to furthest. + * + * @return {Array} + * @private + */ + Runner.prototype.parents = function () { + var suite = this.suite; + var suites = []; + while (suite.parent) { + suite = suite.parent; + suites.push(suite); + } + return suites; + }; + + /** + * Run the current test and callback `fn(err)`. + * + * @param {Function} fn + * @private + */ + Runner.prototype.runTest = function (fn) { + if (this._opts.dryRun) return Runner.immediately(fn); + + var self = this; + var test = this.test; + + if (!test) { + return; + } + + if (this.asyncOnly) { + test.asyncOnly = true; + } + this._addEventListener(test, 'error', function (err) { + self.fail(test, err); + }); + if (this.allowUncaught) { + test.allowUncaught = true; + return test.run(fn); + } + try { + test.run(fn); + } catch (err) { + fn(err); + } + }; + + /** + * Run tests in the given `suite` and invoke the callback `fn()` when complete. + * + * @private + * @param {Suite} suite + * @param {Function} fn + */ + Runner.prototype.runTests = function (suite, fn) { + var self = this; + var tests = suite.tests.slice(); + var test; + + function hookErr(_, errSuite, after) { + // before/after Each hook for errSuite failed: + var orig = self.suite; + + // for failed 'after each' hook start from errSuite parent, + // otherwise start from errSuite itself + self.suite = after ? errSuite.parent : errSuite; + + if (self.suite) { + self.hookUp(HOOK_TYPE_AFTER_EACH, function (err2, errSuite2) { + self.suite = orig; + // some hooks may fail even now + if (err2) { + return hookErr(err2, errSuite2, true); + } + // report error suite + fn(errSuite); + }); + } else { + // there is no need calling other 'after each' hooks + self.suite = orig; + fn(errSuite); + } + } + + function next(err, errSuite) { + // if we bail after first err + if (self.failures && suite._bail) { + tests = []; + } + + if (self._abort) { + return fn(); + } + + if (err) { + return hookErr(err, errSuite, true); + } + + // next test + test = tests.shift(); + + // all done + if (!test) { + return fn(); + } + + // grep + var match = self._grep.test(test.fullTitle()); + if (self._invert) { + match = !match; + } + if (!match) { + // Run immediately only if we have defined a grep. When we + // define a grep — It can cause maximum callstack error if + // the grep is doing a large recursive loop by neglecting + // all tests. The run immediately function also comes with + // a performance cost. So we don't want to run immediately + // if we run the whole test suite, because running the whole + // test suite don't do any immediate recursive loops. Thus, + // allowing a JS runtime to breathe. + if (self._grep !== self._defaultGrep) { + Runner.immediately(next); + } else { + next(); + } + return; + } + + // static skip, no hooks are executed + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + self.emit(constants$1.EVENT_TEST_END, test); + return next(); + } + + // execute test and hook(s) + self.emit(constants$1.EVENT_TEST_BEGIN, (self.test = test)); + self.hookDown(HOOK_TYPE_BEFORE_EACH, function (err, errSuite) { + // conditional skip within beforeEach + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + self.emit(constants$1.EVENT_TEST_END, test); + // skip inner afterEach hooks below errSuite level + var origSuite = self.suite; + self.suite = errSuite || self.suite; + return self.hookUp(HOOK_TYPE_AFTER_EACH, function (e, eSuite) { + self.suite = origSuite; + next(e, eSuite); + }); + } + if (err) { + return hookErr(err, errSuite, false); + } + self.currentRunnable = self.test; + self.runTest(function (err) { + test = self.test; + // conditional skip within it + if (test.pending) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + self.emit(constants$1.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else if (err) { + var retry = test.currentRetry(); + if (retry < test.retries()) { + var clonedTest = test.clone(); + clonedTest.currentRetry(retry + 1); + tests.unshift(clonedTest); + + self.emit(constants$1.EVENT_TEST_RETRY, test, err); + + // Early return + hook trigger so that it doesn't + // increment the count wrong + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else { + self.fail(test, err); + } + self.emit(constants$1.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } + + test.state = STATE_PASSED; + self.emit(constants$1.EVENT_TEST_PASS, test); + self.emit(constants$1.EVENT_TEST_END, test); + self.hookUp(HOOK_TYPE_AFTER_EACH, next); + }); + }); + } + + this.next = next; + this.hookErr = hookErr; + next(); + }; + + /** + * Run the given `suite` and invoke the callback `fn()` when complete. + * + * @private + * @param {Suite} suite + * @param {Function} fn + */ + Runner.prototype.runSuite = function (suite, fn) { + var i = 0; + var self = this; + var total = this.grepTotal(suite); + + debug('runSuite(): running %s', suite.fullTitle()); + + if (!total || (self.failures && suite._bail)) { + debug('runSuite(): bailing'); + return fn(); + } + + this.emit(constants$1.EVENT_SUITE_BEGIN, (this.suite = suite)); + + function next(errSuite) { + if (errSuite) { + // current suite failed on a hook from errSuite + if (errSuite === suite) { + // if errSuite is current suite + // continue to the next sibling suite + return done(); + } + // errSuite is among the parents of current suite + // stop execution of errSuite and all sub-suites + return done(errSuite); + } + + if (self._abort) { + return done(); + } + + var curr = suite.suites[i++]; + if (!curr) { + return done(); + } + + // Avoid grep neglecting large number of tests causing a + // huge recursive loop and thus a maximum call stack error. + // See comment in `this.runTests()` for more information. + if (self._grep !== self._defaultGrep) { + Runner.immediately(function () { + self.runSuite(curr, next); + }); + } else { + self.runSuite(curr, next); + } + } + + function done(errSuite) { + self.suite = suite; + self.nextSuite = next; + + // remove reference to test + delete self.test; + + self.hook(HOOK_TYPE_AFTER_ALL, function () { + self.emit(constants$1.EVENT_SUITE_END, suite); + fn(errSuite); + }); + } + + this.nextSuite = next; + + this.hook(HOOK_TYPE_BEFORE_ALL, function (err) { + if (err) { + return done(); + } + self.runTests(suite, next); + }); + }; + + /** + * Handle uncaught exceptions within runner. + * + * This function is bound to the instance as `Runner#uncaught` at instantiation + * time. It's intended to be listening on the `Process.uncaughtException` event. + * In order to not leak EE listeners, we need to ensure no more than a single + * `uncaughtException` listener exists per `Runner`. The only way to do + * this--because this function needs the context (and we don't have lambdas)--is + * to use `Function.prototype.bind`. We need strict equality to unregister and + * _only_ unregister the _one_ listener we set from the + * `Process.uncaughtException` event; would be poor form to just remove + * everything. See {@link Runner#run} for where the event listener is registered + * and unregistered. + * @param {Error} err - Some uncaught error + * @private + */ + Runner.prototype._uncaught = function (err) { + // this is defensive to prevent future developers from mis-calling this function. + // it's more likely that it'd be called with the incorrect context--say, the global + // `process` object--than it would to be called with a context that is not a "subclass" + // of `Runner`. + if (!(this instanceof Runner)) { + throw createFatalError( + 'Runner#uncaught() called with invalid context', + this + ); + } + if (err instanceof pending) { + debug('uncaught(): caught a Pending'); + return; + } + // browser does not exit script when throwing in global.onerror() + if (this.allowUncaught && !utils.isBrowser()) { + debug('uncaught(): bubbling exception due to --allow-uncaught'); + throw err; + } + + if (this.state === constants$1.STATE_STOPPED) { + debug('uncaught(): throwing after run has completed!'); + throw err; + } + + if (err) { + debug('uncaught(): got truthy exception %O', err); + } else { + debug('uncaught(): undefined/falsy exception'); + err = createInvalidExceptionError( + 'Caught falsy/undefined exception which would otherwise be uncaught. No stack trace found; try a debugger', + err + ); + } + + if (!isError(err)) { + err = thrown2Error(err); + debug('uncaught(): converted "error" %o to Error', err); + } + err.uncaught = true; + + var runnable$1 = this.currentRunnable; + + if (!runnable$1) { + runnable$1 = new runnable('Uncaught error outside test suite'); + debug('uncaught(): no current Runnable; created a phony one'); + runnable$1.parent = this.suite; + + if (this.state === constants$1.STATE_RUNNING) { + debug('uncaught(): failing gracefully'); + this.fail(runnable$1, err); + } else { + // Can't recover from this failure + debug('uncaught(): test run has not yet started; unrecoverable'); + this.emit(constants$1.EVENT_RUN_BEGIN); + this.fail(runnable$1, err); + this.emit(constants$1.EVENT_RUN_END); + } + + return; + } + + runnable$1.clearTimeout(); + + if (runnable$1.isFailed()) { + debug('uncaught(): Runnable has already failed'); + // Ignore error if already failed + return; + } else if (runnable$1.isPending()) { + debug('uncaught(): pending Runnable wound up failing!'); + // report 'pending test' retrospectively as failed + this.fail(runnable$1, err, true); + return; + } + + // we cannot recover gracefully if a Runnable has already passed + // then fails asynchronously + if (runnable$1.isPassed()) { + debug('uncaught(): Runnable has already passed; bailing gracefully'); + this.fail(runnable$1, err); + this.abort(); + } else { + debug('uncaught(): forcing Runnable to complete with Error'); + return runnable$1.callback(err); + } + }; + + /** + * Run the root suite and invoke `fn(failures)` + * on completion. + * + * @public + * @memberof Runner + * @param {Function} fn - Callback when finished + * @param {{files: string[], options: Options}} [opts] - For subclasses + * @returns {Runner} Runner instance. + */ + Runner.prototype.run = function (fn, opts = {}) { + var rootSuite = this.suite; + var options = opts.options || {}; + + debug('run(): got options: %O', options); + fn = fn || function () {}; + + const end = () => { + if (!this.total && this._opts.failZero) this.failures = 1; + + debug('run(): root suite completed; emitting %s', constants$1.EVENT_RUN_END); + this.emit(constants$1.EVENT_RUN_END); + }; + + const begin = () => { + debug('run(): emitting %s', constants$1.EVENT_RUN_BEGIN); + this.emit(constants$1.EVENT_RUN_BEGIN); + debug('run(): emitted %s', constants$1.EVENT_RUN_BEGIN); + + this.runSuite(rootSuite, end); + }; + + const prepare = () => { + debug('run(): starting'); + // If there is an `only` filter + if (rootSuite.hasOnly()) { + rootSuite.filterOnly(); + debug('run(): filtered exclusive Runnables'); + } + this.state = constants$1.STATE_RUNNING; + if (this._delay) { + this.emit(constants$1.EVENT_DELAY_END); + debug('run(): "delay" ended'); + } + + return begin(); + }; + + // references cleanup to avoid memory leaks + if (this._opts.cleanReferencesAfterRun) { + this.on(constants$1.EVENT_SUITE_END, suite => { + suite.cleanReferences(); + }); + } + + // callback + this.on(constants$1.EVENT_RUN_END, function () { + this.state = constants$1.STATE_STOPPED; + debug('run(): emitted %s', constants$1.EVENT_RUN_END); + fn(this.failures); + }); + + this._removeEventListener(process$1, 'uncaughtException', this.uncaught); + this._removeEventListener(process$1, 'unhandledRejection', this.unhandled); + this._addEventListener(process$1, 'uncaughtException', this.uncaught); + this._addEventListener(process$1, 'unhandledRejection', this.unhandled); + + if (this._delay) { + // for reporters, I guess. + // might be nice to debounce some dots while we wait. + this.emit(constants$1.EVENT_DELAY_BEGIN, rootSuite); + rootSuite.once(EVENT_ROOT_SUITE_RUN, prepare); + debug('run(): waiting for green light due to --delay'); + } else { + Runner.immediately(prepare); + } + + return this; + }; + + /** + * Toggle partial object linking behavior; used for building object references from + * unique ID's. Does nothing in serial mode, because the object references already exist. + * Subclasses can implement this (e.g., `ParallelBufferedRunner`) + * @abstract + * @param {boolean} [value] - If `true`, enable partial object linking, otherwise disable + * @returns {Runner} + * @chainable + * @public + * @example + * // this reporter needs proper object references when run in parallel mode + * class MyReporter() { + * constructor(runner) { + * this.runner.linkPartialObjects(true) + * .on(EVENT_SUITE_BEGIN, suite => { + // this Suite may be the same object... + * }) + * .on(EVENT_TEST_BEGIN, test => { + * // ...as the `test.parent` property + * }); + * } + * } + */ + Runner.prototype.linkPartialObjects = function (value) { + return this; + }; + + /* + * Like {@link Runner#run}, but does not accept a callback and returns a `Promise` instead of a `Runner`. + * This function cannot reject; an `unhandledRejection` event will bubble up to the `process` object instead. + * @public + * @memberof Runner + * @param {Object} [opts] - Options for {@link Runner#run} + * @returns {Promise} Failure count + */ + Runner.prototype.runAsync = async function runAsync(opts = {}) { + return new Promise(resolve => { + this.run(resolve, opts); + }); + }; + + /** + * Cleanly abort execution. + * + * @memberof Runner + * @public + * @return {Runner} Runner instance. + */ + Runner.prototype.abort = function () { + debug('abort(): aborting'); + this._abort = true; + + return this; + }; + + /** + * Returns `true` if Mocha is running in parallel mode. For reporters. + * + * Subclasses should return an appropriate value. + * @public + * @returns {false} + */ + Runner.prototype.isParallelMode = function isParallelMode() { + return false; + }; + + /** + * Configures an alternate reporter for worker processes to use. Subclasses + * using worker processes should implement this. + * @public + * @param {string} path - Absolute path to alternate reporter for worker processes to use + * @returns {Runner} + * @throws When in serial mode + * @chainable + * @abstract + */ + Runner.prototype.workerReporter = function () { + throw createUnsupportedError$1('workerReporter() not supported in serial mode'); + }; + + /** + * Filter leaks with the given globals flagged as `ok`. + * + * @private + * @param {Array} ok + * @param {Array} globals + * @return {Array} + */ + function filterLeaks(ok, globals) { + return globals.filter(function (key) { + // Firefox and Chrome exposes iframes as index inside the window object + if (/^\d+/.test(key)) { + return false; + } + + // in firefox + // if runner runs in an iframe, this iframe's window.getInterface method + // not init at first it is assigned in some seconds + if (commonjsGlobal.navigator && /^getInterface/.test(key)) { + return false; + } + + // an iframe could be approached by window[iframeIndex] + // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak + if (commonjsGlobal.navigator && /^\d+/.test(key)) { + return false; + } + + // Opera and IE expose global variables for HTML element IDs (issue #243) + if (/^mocha-/.test(key)) { + return false; + } + + var matched = ok.filter(function (ok) { + if (~ok.indexOf('*')) { + return key.indexOf(ok.split('*')[0]) === 0; + } + return key === ok; + }); + return !matched.length && (!commonjsGlobal.navigator || key !== 'onerror'); + }); + } + + /** + * Check if argument is an instance of Error object or a duck-typed equivalent. + * + * @private + * @param {Object} err - object to check + * @param {string} err.message - error message + * @returns {boolean} + */ + function isError(err) { + return err instanceof Error || (err && typeof err.message === 'string'); + } + + /** + * + * Converts thrown non-extensible type into proper Error. + * + * @private + * @param {*} thrown - Non-extensible type thrown by code + * @return {Error} + */ + function thrown2Error(err) { + return new Error( + `the ${utils.canonicalType(err)} ${stringify( + err + )} was thrown, throw an Error :)` + ); + } + + Runner.constants = constants$1; + + /** + * Node.js' `EventEmitter` + * @external EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter} + */ + + var runner = Runner; + + var require$$10 = getCjsExportFromNamespace(_nodeResolve_empty$1); + + var base = createCommonjsModule(function (module, exports) { + /** + * @module Base + */ + /** + * Module dependencies. + */ + + + + + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + + const isBrowser = utils.isBrowser(); + + function getBrowserWindowSize() { + if ('innerHeight' in commonjsGlobal) { + return [commonjsGlobal.innerHeight, commonjsGlobal.innerWidth]; + } + // In a Web Worker, the DOM Window is not available. + return [640, 480]; + } + + /** + * Expose `Base`. + */ + + exports = module.exports = Base; + + /** + * Check if both stdio streams are associated with a tty. + */ + + var isatty = isBrowser || (process$1.stdout.isTTY && process$1.stderr.isTTY); + + /** + * Save log references to avoid tests interfering (see GH-3604). + */ + var consoleLog = console.log; + + /** + * Enable coloring by default, except in the browser interface. + */ + + exports.useColors = + !isBrowser && + (require$$10.stdout || process$1.env.MOCHA_COLORS !== undefined); + + /** + * Inline diffs instead of +/- + */ + + exports.inlineDiffs = false; + + /** + * Truncate diffs longer than this value to avoid slow performance + */ + exports.maxDiffSize = 8192; + + /** + * Default color map. + */ + + exports.colors = { + pass: 90, + fail: 31, + 'bright pass': 92, + 'bright fail': 91, + 'bright yellow': 93, + pending: 36, + suite: 0, + 'error title': 0, + 'error message': 31, + 'error stack': 90, + checkmark: 32, + fast: 90, + medium: 33, + slow: 31, + green: 32, + light: 90, + 'diff gutter': 90, + 'diff added': 32, + 'diff removed': 31, + 'diff added inline': '30;42', + 'diff removed inline': '30;41' + }; + + /** + * Default symbol map. + */ + + exports.symbols = { + ok: browser$1.success, + err: browser$1.error, + dot: '.', + comma: ',', + bang: '!' + }; + + /** + * Color `str` with the given `type`, + * allowing colors to be disabled, + * as well as user-defined color + * schemes. + * + * @private + * @param {string} type + * @param {string} str + * @return {string} + */ + var color = (exports.color = function (type, str) { + if (!exports.useColors) { + return String(str); + } + return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; + }); + + /** + * Expose term window size, with some defaults for when stderr is not a tty. + */ + + exports.window = { + width: 75 + }; + + if (isatty) { + if (isBrowser) { + exports.window.width = getBrowserWindowSize()[1]; + } else { + exports.window.width = process$1.stdout.getWindowSize(1)[0]; + } + } + + /** + * Expose some basic cursor interactions that are common among reporters. + */ + + exports.cursor = { + hide: function () { + isatty && process$1.stdout.write('\u001b[?25l'); + }, + + show: function () { + isatty && process$1.stdout.write('\u001b[?25h'); + }, + + deleteLine: function () { + isatty && process$1.stdout.write('\u001b[2K'); + }, + + beginningOfLine: function () { + isatty && process$1.stdout.write('\u001b[0G'); + }, + + CR: function () { + if (isatty) { + exports.cursor.deleteLine(); + exports.cursor.beginningOfLine(); + } else { + process$1.stdout.write('\r'); + } + } + }; + + var showDiff = (exports.showDiff = function (err) { + return ( + err && + err.showDiff !== false && + sameType(err.actual, err.expected) && + err.expected !== undefined + ); + }); + + function stringifyDiffObjs(err) { + if (!utils.isString(err.actual) || !utils.isString(err.expected)) { + err.actual = utils.stringify(err.actual); + err.expected = utils.stringify(err.expected); + } + } + + /** + * Returns a diff between 2 strings with coloured ANSI output. + * + * @description + * The diff will be either inline or unified dependent on the value + * of `Base.inlineDiff`. + * + * @param {string} actual + * @param {string} expected + * @return {string} Diff + */ + + var generateDiff = (exports.generateDiff = function (actual, expected) { + try { + var maxLen = exports.maxDiffSize; + var skipped = 0; + if (maxLen > 0) { + skipped = Math.max(actual.length - maxLen, expected.length - maxLen); + actual = actual.slice(0, maxLen); + expected = expected.slice(0, maxLen); + } + let result = exports.inlineDiffs + ? inlineDiff(actual, expected) + : unifiedDiff(actual, expected); + if (skipped > 0) { + result = `${result}\n [mocha] output truncated to ${maxLen} characters, see "maxDiffSize" reporter-option\n`; + } + return result; + } catch (err) { + var msg = + '\n ' + + color('diff added', '+ expected') + + ' ' + + color('diff removed', '- actual: failed to generate Mocha diff') + + '\n'; + return msg; + } + }); + + /** + * Outputs the given `failures` as a list. + * + * @public + * @memberof Mocha.reporters.Base + * @variation 1 + * @param {Object[]} failures - Each is Test instance with corresponding + * Error property + */ + exports.list = function (failures) { + var multipleErr, multipleTest; + Base.consoleLog(); + failures.forEach(function (test, i) { + // format + var fmt = + color('error title', ' %s) %s:\n') + + color('error message', ' %s') + + color('error stack', '\n%s\n'); + + // msg + var msg; + var err; + if (test.err && test.err.multiple) { + if (multipleTest !== test) { + multipleTest = test; + multipleErr = [test.err].concat(test.err.multiple); + } + err = multipleErr.shift(); + } else { + err = test.err; + } + var message; + if (typeof err.inspect === 'function') { + message = err.inspect() + ''; + } else if (err.message && typeof err.message.toString === 'function') { + message = err.message + ''; + } else { + message = ''; + } + var stack = err.stack || message; + var index = message ? stack.indexOf(message) : -1; + + if (index === -1) { + msg = message; + } else { + index += message.length; + msg = stack.slice(0, index); + // remove msg from stack + stack = stack.slice(index + 1); + } + + // uncaught + if (err.uncaught) { + msg = 'Uncaught ' + msg; + } + // explicitly show diff + if (!exports.hideDiff && showDiff(err)) { + stringifyDiffObjs(err); + fmt = + color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); + var match = message.match(/^([^:]+): expected/); + msg = '\n ' + color('error message', match ? match[1] : msg); + + msg += generateDiff(err.actual, err.expected); + } + + // indent stack trace + stack = stack.replace(/^/gm, ' '); + + // indented test title + var testTitle = ''; + test.titlePath().forEach(function (str, index) { + if (index !== 0) { + testTitle += '\n '; + } + for (var i = 0; i < index; i++) { + testTitle += ' '; + } + testTitle += str; + }); + + Base.consoleLog(fmt, i + 1, testTitle, msg, stack); + }); + }; + + /** + * Constructs a new `Base` reporter instance. + * + * @description + * All other reporters generally inherit from this reporter. + * + * @public + * @class + * @memberof Mocha.reporters + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Base(runner, options) { + var failures = (this.failures = []); + + if (!runner) { + throw new TypeError('Missing runner argument'); + } + this.options = options || {}; + this.runner = runner; + this.stats = runner.stats; // assigned so Reporters keep a closer reference + + var maxDiffSizeOpt = + this.options.reporterOption && this.options.reporterOption.maxDiffSize; + if (maxDiffSizeOpt !== undefined && !isNaN(Number(maxDiffSizeOpt))) { + exports.maxDiffSize = Number(maxDiffSizeOpt); + } + + runner.on(EVENT_TEST_PASS, function (test) { + if (test.duration > test.slow()) { + test.speed = 'slow'; + } else if (test.duration > test.slow() / 2) { + test.speed = 'medium'; + } else { + test.speed = 'fast'; + } + }); + + runner.on(EVENT_TEST_FAIL, function (test, err) { + if (showDiff(err)) { + stringifyDiffObjs(err); + } + // more than one error per test + if (test.err && err instanceof Error) { + test.err.multiple = (test.err.multiple || []).concat(err); + } else { + test.err = err; + } + failures.push(test); + }); + } + + /** + * Outputs common epilogue used by many of the bundled reporters. + * + * @public + * @memberof Mocha.reporters + */ + Base.prototype.epilogue = function () { + var stats = this.stats; + var fmt; + + Base.consoleLog(); + + // passes + fmt = + color('bright pass', ' ') + + color('green', ' %d passing') + + color('light', ' (%s)'); + + Base.consoleLog(fmt, stats.passes || 0, ms$1(stats.duration)); + + // pending + if (stats.pending) { + fmt = color('pending', ' ') + color('pending', ' %d pending'); + + Base.consoleLog(fmt, stats.pending); + } + + // failures + if (stats.failures) { + fmt = color('fail', ' %d failing'); + + Base.consoleLog(fmt, stats.failures); + + Base.list(this.failures); + Base.consoleLog(); + } + + Base.consoleLog(); + }; + + /** + * Pads the given `str` to `len`. + * + * @private + * @param {string} str + * @param {string} len + * @return {string} + */ + function pad(str, len) { + str = String(str); + return Array(len - str.length + 1).join(' ') + str; + } + + /** + * Returns inline diff between 2 strings with coloured ANSI output. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} Diff + */ + function inlineDiff(actual, expected) { + var msg = errorDiff(actual, expected); + + // linenos + var lines = msg.split('\n'); + if (lines.length > 4) { + var width = String(lines.length).length; + msg = lines + .map(function (str, i) { + return pad(++i, width) + ' |' + ' ' + str; + }) + .join('\n'); + } + + // legend + msg = + '\n' + + color('diff removed inline', 'actual') + + ' ' + + color('diff added inline', 'expected') + + '\n\n' + + msg + + '\n'; + + // indent + msg = msg.replace(/^/gm, ' '); + return msg; + } + + /** + * Returns unified diff between two strings with coloured ANSI output. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} The diff. + */ + function unifiedDiff(actual, expected) { + var indent = ' '; + function cleanUp(line) { + if (line[0] === '+') { + return indent + colorLines('diff added', line); + } + if (line[0] === '-') { + return indent + colorLines('diff removed', line); + } + if (line.match(/@@/)) { + return '--'; + } + if (line.match(/\\ No newline/)) { + return null; + } + return indent + line; + } + function notBlank(line) { + return typeof line !== 'undefined' && line !== null; + } + var msg = diff$1.createPatch('string', actual, expected); + var lines = msg.split('\n').splice(5); + return ( + '\n ' + + colorLines('diff added', '+ expected') + + ' ' + + colorLines('diff removed', '- actual') + + '\n\n' + + lines.map(cleanUp).filter(notBlank).join('\n') + ); + } + + /** + * Returns character diff for `err`. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} the diff + */ + function errorDiff(actual, expected) { + return diff$1 + .diffWordsWithSpace(actual, expected) + .map(function (str) { + if (str.added) { + return colorLines('diff added inline', str.value); + } + if (str.removed) { + return colorLines('diff removed inline', str.value); + } + return str.value; + }) + .join(''); + } + + /** + * Colors lines for `str`, using the color `name`. + * + * @private + * @param {string} name + * @param {string} str + * @return {string} + */ + function colorLines(name, str) { + return str + .split('\n') + .map(function (str) { + return color(name, str); + }) + .join('\n'); + } + + /** + * Object#toString reference. + */ + var objToString = Object.prototype.toString; + + /** + * Checks that a / b have the same type. + * + * @private + * @param {Object} a + * @param {Object} b + * @return {boolean} + */ + function sameType(a, b) { + return objToString.call(a) === objToString.call(b); + } + + Base.consoleLog = consoleLog; + + Base.abstract = true; + }); + + var dot = createCommonjsModule(function (module, exports) { + /** + * @module Dot + */ + /** + * Module dependencies. + */ + + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_RUN_END = constants.EVENT_RUN_END; + + /** + * Expose `Dot`. + */ + + module.exports = Dot; + + /** + * Constructs a new `Dot` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Dot(runner, options) { + base.call(this, runner, options); + + var self = this; + var width = (base.window.width * 0.75) | 0; + var n = -1; + + runner.on(EVENT_RUN_BEGIN, function () { + process$1.stdout.write('\n'); + }); + + runner.on(EVENT_TEST_PENDING, function () { + if (++n % width === 0) { + process$1.stdout.write('\n '); + } + process$1.stdout.write(base.color('pending', base.symbols.comma)); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + if (++n % width === 0) { + process$1.stdout.write('\n '); + } + if (test.speed === 'slow') { + process$1.stdout.write(base.color('bright yellow', base.symbols.dot)); + } else { + process$1.stdout.write(base.color(test.speed, base.symbols.dot)); + } + }); + + runner.on(EVENT_TEST_FAIL, function () { + if (++n % width === 0) { + process$1.stdout.write('\n '); + } + process$1.stdout.write(base.color('fail', base.symbols.bang)); + }); + + runner.once(EVENT_RUN_END, function () { + process$1.stdout.write('\n'); + self.epilogue(); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(Dot, base); + + Dot.description = 'dot matrix representation'; + }); + + var doc = createCommonjsModule(function (module, exports) { + /** + * @module Doc + */ + /** + * Module dependencies. + */ + + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + + /** + * Expose `Doc`. + */ + + module.exports = Doc; + + /** + * Constructs a new `Doc` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Doc(runner, options) { + base.call(this, runner, options); + + var indents = 2; + + function indent() { + return Array(indents).join(' '); + } + + runner.on(EVENT_SUITE_BEGIN, function (suite) { + if (suite.root) { + return; + } + ++indents; + base.consoleLog('%s
    ', indent()); + ++indents; + base.consoleLog('%s

    %s

    ', indent(), utils.escape(suite.title)); + base.consoleLog('%s
    ', indent()); + }); + + runner.on(EVENT_SUITE_END, function (suite) { + if (suite.root) { + return; + } + base.consoleLog('%s
    ', indent()); + --indents; + base.consoleLog('%s
    ', indent()); + --indents; + }); + + runner.on(EVENT_TEST_PASS, function (test) { + base.consoleLog('%s
    %s
    ', indent(), utils.escape(test.title)); + base.consoleLog('%s
    %s
    ', indent(), utils.escape(test.file)); + var code = utils.escape(utils.clean(test.body)); + base.consoleLog('%s
    %s
    ', indent(), code); + }); + + runner.on(EVENT_TEST_FAIL, function (test, err) { + base.consoleLog( + '%s
    %s
    ', + indent(), + utils.escape(test.title) + ); + base.consoleLog( + '%s
    %s
    ', + indent(), + utils.escape(test.file) + ); + var code = utils.escape(utils.clean(test.body)); + base.consoleLog( + '%s
    %s
    ', + indent(), + code + ); + base.consoleLog( + '%s
    %s
    ', + indent(), + utils.escape(err) + ); + }); + } + + Doc.description = 'HTML documentation'; + }); + + var tap = createCommonjsModule(function (module, exports) { + /** + * @module TAP + */ + /** + * Module dependencies. + */ + + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var inherits = utils.inherits; + var sprintf = util.format; + + /** + * Expose `TAP`. + */ + + module.exports = TAP; + + /** + * Constructs a new `TAP` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function TAP(runner, options) { + base.call(this, runner, options); + + var self = this; + var n = 1; + + var tapVersion = '12'; + if (options && options.reporterOptions) { + if (options.reporterOptions.tapVersion) { + tapVersion = options.reporterOptions.tapVersion.toString(); + } + } + + this._producer = createProducer(tapVersion); + + runner.once(EVENT_RUN_BEGIN, function () { + self._producer.writeVersion(); + }); + + runner.on(EVENT_TEST_END, function () { + ++n; + }); + + runner.on(EVENT_TEST_PENDING, function (test) { + self._producer.writePending(n, test); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + self._producer.writePass(n, test); + }); + + runner.on(EVENT_TEST_FAIL, function (test, err) { + self._producer.writeFail(n, test, err); + }); + + runner.once(EVENT_RUN_END, function () { + self._producer.writeEpilogue(runner.stats); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(TAP, base); + + /** + * Returns a TAP-safe title of `test`. + * + * @private + * @param {Test} test - Test instance. + * @return {String} title with any hash character removed + */ + function title(test) { + return test.fullTitle().replace(/#/g, ''); + } + + /** + * Writes newline-terminated formatted string to reporter output stream. + * + * @private + * @param {string} format - `printf`-like format string + * @param {...*} [varArgs] - Format string arguments + */ + function println(format, varArgs) { + var vargs = Array.from(arguments); + vargs[0] += '\n'; + process$1.stdout.write(sprintf.apply(null, vargs)); + } + + /** + * Returns a `tapVersion`-appropriate TAP producer instance, if possible. + * + * @private + * @param {string} tapVersion - Version of TAP specification to produce. + * @returns {TAPProducer} specification-appropriate instance + * @throws {Error} if specification version has no associated producer. + */ + function createProducer(tapVersion) { + var producers = { + 12: new TAP12Producer(), + 13: new TAP13Producer() + }; + var producer = producers[tapVersion]; + + if (!producer) { + throw new Error( + 'invalid or unsupported TAP version: ' + JSON.stringify(tapVersion) + ); + } + + return producer; + } + + /** + * @summary + * Constructs a new TAPProducer. + * + * @description + * Only to be used as an abstract base class. + * + * @private + * @constructor + */ + function TAPProducer() {} + + /** + * Writes the TAP version to reporter output stream. + * + * @abstract + */ + TAPProducer.prototype.writeVersion = function () {}; + + /** + * Writes the plan to reporter output stream. + * + * @abstract + * @param {number} ntests - Number of tests that are planned to run. + */ + TAPProducer.prototype.writePlan = function (ntests) { + println('%d..%d', 1, ntests); + }; + + /** + * Writes that test passed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that passed. + * @param {Test} test - Instance containing test information. + */ + TAPProducer.prototype.writePass = function (n, test) { + println('ok %d %s', n, title(test)); + }; + + /** + * Writes that test was skipped to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that was skipped. + * @param {Test} test - Instance containing test information. + */ + TAPProducer.prototype.writePending = function (n, test) { + println('ok %d %s # SKIP -', n, title(test)); + }; + + /** + * Writes that test failed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that failed. + * @param {Test} test - Instance containing test information. + * @param {Error} err - Reason the test failed. + */ + TAPProducer.prototype.writeFail = function (n, test, err) { + println('not ok %d %s', n, title(test)); + }; + + /** + * Writes the summary epilogue to reporter output stream. + * + * @abstract + * @param {Object} stats - Object containing run statistics. + */ + TAPProducer.prototype.writeEpilogue = function (stats) { + // :TBD: Why is this not counting pending tests? + println('# tests ' + (stats.passes + stats.failures)); + println('# pass ' + stats.passes); + // :TBD: Why are we not showing pending results? + println('# fail ' + stats.failures); + this.writePlan(stats.passes + stats.failures + stats.pending); + }; + + /** + * @summary + * Constructs a new TAP12Producer. + * + * @description + * Produces output conforming to the TAP12 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-specification.html|Specification} + */ + function TAP12Producer() { + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + if (err.message) { + println(err.message.replace(/^/gm, ' ')); + } + if (err.stack) { + println(err.stack.replace(/^/gm, ' ')); + } + }; + } + + /** + * Inherit from `TAPProducer.prototype`. + */ + inherits(TAP12Producer, TAPProducer); + + /** + * @summary + * Constructs a new TAP13Producer. + * + * @description + * Produces output conforming to the TAP13 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-version-13-specification.html|Specification} + */ + function TAP13Producer() { + /** + * Writes the TAP version to reporter output stream. + * @override + */ + this.writeVersion = function () { + println('TAP version 13'); + }; + + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + var emitYamlBlock = err.message != null || err.stack != null; + if (emitYamlBlock) { + println(indent(1) + '---'); + if (err.message) { + println(indent(2) + 'message: |-'); + println(err.message.replace(/^/gm, indent(3))); + } + if (err.stack) { + println(indent(2) + 'stack: |-'); + println(err.stack.replace(/^/gm, indent(3))); + } + println(indent(1) + '...'); + } + }; + + function indent(level) { + return Array(level + 1).join(' '); + } + } + + /** + * Inherit from `TAPProducer.prototype`. + */ + inherits(TAP13Producer, TAPProducer); + + TAP.description = 'TAP-compatible output'; + }); + + var fs = {}; + + var json = createCommonjsModule(function (module, exports) { + /** + * @module JSON + */ + /** + * Module dependencies. + */ + + + + + const createUnsupportedError = errors.createUnsupportedError; + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var EVENT_RUN_END = constants.EVENT_RUN_END; + + /** + * Expose `JSON`. + */ + + module.exports = JSONReporter; + + /** + * Constructs a new `JSON` reporter instance. + * + * @public + * @class JSON + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function JSONReporter(runner, options = {}) { + base.call(this, runner, options); + + var self = this; + var tests = []; + var pending = []; + var failures = []; + var passes = []; + var output; + + if (options.reporterOption && options.reporterOption.output) { + if (utils.isBrowser()) { + throw createUnsupportedError('file output not supported in browser'); + } + output = options.reporterOption.output; + } + + runner.on(EVENT_TEST_END, function (test) { + tests.push(test); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + passes.push(test); + }); + + runner.on(EVENT_TEST_FAIL, function (test) { + failures.push(test); + }); + + runner.on(EVENT_TEST_PENDING, function (test) { + pending.push(test); + }); + + runner.once(EVENT_RUN_END, function () { + var obj = { + stats: self.stats, + tests: tests.map(clean), + pending: pending.map(clean), + failures: failures.map(clean), + passes: passes.map(clean) + }; + + runner.testResults = obj; + + var json = JSON.stringify(obj, null, 2); + if (output) { + try { + fs.mkdirSync(path.dirname(output), {recursive: true}); + fs.writeFileSync(output, json); + } catch (err) { + console.error( + `${base.symbols.err} [mocha] writing output to "${output}" failed: ${err.message}\n` + ); + process$1.stdout.write(json); + } + } else { + process$1.stdout.write(json); + } + }); + } + + /** + * Return a plain-object representation of `test` + * free of cyclic properties etc. + * + * @private + * @param {Object} test + * @return {Object} + */ + function clean(test) { + var err = test.err || {}; + if (err instanceof Error) { + err = errorJSON(err); + } + + return { + title: test.title, + fullTitle: test.fullTitle(), + file: test.file, + duration: test.duration, + currentRetry: test.currentRetry(), + speed: test.speed, + err: cleanCycles(err) + }; + } + + /** + * Replaces any circular references inside `obj` with '[object Object]' + * + * @private + * @param {Object} obj + * @return {Object} + */ + function cleanCycles(obj) { + var cache = []; + return JSON.parse( + JSON.stringify(obj, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Instead of going in a circle, we'll print [object Object] + return '' + value; + } + cache.push(value); + } + + return value; + }) + ); + } + + /** + * Transform an Error object into a JSON object. + * + * @private + * @param {Error} err + * @return {Object} + */ + function errorJSON(err) { + var res = {}; + Object.getOwnPropertyNames(err).forEach(function (key) { + res[key] = err[key]; + }, err); + return res; + } + + JSONReporter.description = 'single JSON object'; + }); + + /** + @module browser/Progress + */ + + /** + * Expose `Progress`. + */ + + var progress$1 = Progress; + + /** + * Initialize a new `Progress` indicator. + */ + function Progress() { + this.percent = 0; + this.size(0); + this.fontSize(11); + this.font('helvetica, arial, sans-serif'); + } + + /** + * Set progress size to `size`. + * + * @public + * @param {number} size + * @return {Progress} Progress instance. + */ + Progress.prototype.size = function (size) { + this._size = size; + return this; + }; + + /** + * Set text to `text`. + * + * @public + * @param {string} text + * @return {Progress} Progress instance. + */ + Progress.prototype.text = function (text) { + this._text = text; + return this; + }; + + /** + * Set font size to `size`. + * + * @public + * @param {number} size + * @return {Progress} Progress instance. + */ + Progress.prototype.fontSize = function (size) { + this._fontSize = size; + return this; + }; + + /** + * Set font to `family`. + * + * @param {string} family + * @return {Progress} Progress instance. + */ + Progress.prototype.font = function (family) { + this._font = family; + return this; + }; + + /** + * Update percentage to `n`. + * + * @param {number} n + * @return {Progress} Progress instance. + */ + Progress.prototype.update = function (n) { + this.percent = n; + return this; + }; + + /** + * Draw on `ctx`. + * + * @param {CanvasRenderingContext2d} ctx + * @return {Progress} Progress instance. + */ + Progress.prototype.draw = function (ctx) { + try { + var percent = Math.min(this.percent, 100); + var size = this._size; + var half = size / 2; + var x = half; + var y = half; + var rad = half - 1; + var fontSize = this._fontSize; + + ctx.font = fontSize + 'px ' + this._font; + + var angle = Math.PI * 2 * (percent / 100); + ctx.clearRect(0, 0, size, size); + + // outer circle + ctx.strokeStyle = '#9f9f9f'; + ctx.beginPath(); + ctx.arc(x, y, rad, 0, angle, false); + ctx.stroke(); + + // inner circle + ctx.strokeStyle = '#eee'; + ctx.beginPath(); + ctx.arc(x, y, rad - 1, 0, angle, true); + ctx.stroke(); + + // text + var text = this._text || (percent | 0) + '%'; + var w = ctx.measureText(text).width; + + ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1); + } catch (ignore) { + // don't fail if we can't render progress + } + return this; + }; + + var html = createCommonjsModule(function (module, exports) { + + /* eslint-env browser */ + /** + * @module HTML + */ + /** + * Module dependencies. + */ + + + + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var escape = utils.escape; + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + var Date = commonjsGlobal.Date; + + /** + * Expose `HTML`. + */ + + module.exports = HTML; + + /** + * Stats template. + */ + + var statsTemplate = + ''; + + var playIcon = '‣'; + + /** + * Constructs a new `HTML` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function HTML(runner, options) { + base.call(this, runner, options); + + var self = this; + var stats = this.stats; + var stat = fragment(statsTemplate); + var items = stat.getElementsByTagName('li'); + var passes = items[1].getElementsByTagName('em')[0]; + var passesLink = items[1].getElementsByTagName('a')[0]; + var failures = items[2].getElementsByTagName('em')[0]; + var failuresLink = items[2].getElementsByTagName('a')[0]; + var duration = items[3].getElementsByTagName('em')[0]; + var canvas = stat.getElementsByTagName('canvas')[0]; + var report = fragment('
      '); + var stack = [report]; + var progress; + var ctx; + var root = document.getElementById('mocha'); + + if (canvas.getContext) { + var ratio = window.devicePixelRatio || 1; + canvas.style.width = canvas.width; + canvas.style.height = canvas.height; + canvas.width *= ratio; + canvas.height *= ratio; + ctx = canvas.getContext('2d'); + ctx.scale(ratio, ratio); + progress = new progress$1(); + } + + if (!root) { + return error('#mocha div missing, add it to your document'); + } + + // pass toggle + on(passesLink, 'click', function (evt) { + evt.preventDefault(); + unhide(); + var name = /pass/.test(report.className) ? '' : ' pass'; + report.className = report.className.replace(/fail|pass/g, '') + name; + if (report.className.trim()) { + hideSuitesWithout('test pass'); + } + }); + + // failure toggle + on(failuresLink, 'click', function (evt) { + evt.preventDefault(); + unhide(); + var name = /fail/.test(report.className) ? '' : ' fail'; + report.className = report.className.replace(/fail|pass/g, '') + name; + if (report.className.trim()) { + hideSuitesWithout('test fail'); + } + }); + + root.appendChild(stat); + root.appendChild(report); + + if (progress) { + progress.size(40); + } + + runner.on(EVENT_SUITE_BEGIN, function (suite) { + if (suite.root) { + return; + } + + // suite + var url = self.suiteURL(suite); + var el = fragment( + '
    • %s

    • ', + url, + escape(suite.title) + ); + + // container + stack[0].appendChild(el); + stack.unshift(document.createElement('ul')); + el.appendChild(stack[0]); + }); + + runner.on(EVENT_SUITE_END, function (suite) { + if (suite.root) { + updateStats(); + return; + } + stack.shift(); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + var url = self.testURL(test); + var markup = + '
    • %e%ems ' + + '' + + playIcon + + '

    • '; + var el = fragment(markup, test.speed, test.title, test.duration, url); + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); + }); + + runner.on(EVENT_TEST_FAIL, function (test) { + var el = fragment( + '
    • %e ' + + playIcon + + '

    • ', + test.title, + self.testURL(test) + ); + var stackString; // Note: Includes leading newline + var message = test.err.toString(); + + // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we + // check for the result of the stringifying. + if (message === '[object Error]') { + message = test.err.message; + } + + if (test.err.stack) { + var indexOfMessage = test.err.stack.indexOf(test.err.message); + if (indexOfMessage === -1) { + stackString = test.err.stack; + } else { + stackString = test.err.stack.substr( + test.err.message.length + indexOfMessage + ); + } + } else if (test.err.sourceURL && test.err.line !== undefined) { + // Safari doesn't give you a stack. Let's at least provide a source line. + stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')'; + } + + stackString = stackString || ''; + + if (test.err.htmlMessage && stackString) { + el.appendChild( + fragment( + '
      %s\n
      %e
      ', + test.err.htmlMessage, + stackString + ) + ); + } else if (test.err.htmlMessage) { + el.appendChild( + fragment('
      %s
      ', test.err.htmlMessage) + ); + } else { + el.appendChild( + fragment('
      %e%e
      ', message, stackString) + ); + } + + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); + }); + + runner.on(EVENT_TEST_PENDING, function (test) { + var el = fragment( + '
    • %e

    • ', + test.title + ); + appendToStack(el); + updateStats(); + }); + + function appendToStack(el) { + // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. + if (stack[0]) { + stack[0].appendChild(el); + } + } + + function updateStats() { + // TODO: add to stats + var percent = ((stats.tests / runner.total) * 100) | 0; + if (progress) { + progress.update(percent).draw(ctx); + } + + // update stats + var ms = new Date() - stats.start; + text(passes, stats.passes); + text(failures, stats.failures); + text(duration, (ms / 1000).toFixed(2)); + } + } + + /** + * Makes a URL, preserving querystring ("search") parameters. + * + * @param {string} s + * @return {string} A new URL. + */ + function makeUrl(s) { + var search = window.location.search; + + // Remove previous grep query parameter if present + if (search) { + search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?'); + } + + return ( + window.location.pathname + + (search ? search + '&' : '?') + + 'grep=' + + encodeURIComponent(escapeStringRegexp(s)) + ); + } + + /** + * Provide suite URL. + * + * @param {Object} [suite] + */ + HTML.prototype.suiteURL = function (suite) { + return makeUrl(suite.fullTitle()); + }; + + /** + * Provide test URL. + * + * @param {Object} [test] + */ + HTML.prototype.testURL = function (test) { + return makeUrl(test.fullTitle()); + }; + + /** + * Adds code toggle functionality for the provided test's list element. + * + * @param {HTMLLIElement} el + * @param {string} contents + */ + HTML.prototype.addCodeToggle = function (el, contents) { + var h2 = el.getElementsByTagName('h2')[0]; + + on(h2, 'click', function () { + pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; + }); + + var pre = fragment('
      %e
      ', utils.clean(contents)); + el.appendChild(pre); + pre.style.display = 'none'; + }; + + /** + * Display error `msg`. + * + * @param {string} msg + */ + function error(msg) { + document.body.appendChild(fragment('
      %s
      ', msg)); + } + + /** + * Return a DOM fragment from `html`. + * + * @param {string} html + */ + function fragment(html) { + var args = arguments; + var div = document.createElement('div'); + var i = 1; + + div.innerHTML = html.replace(/%([se])/g, function (_, type) { + switch (type) { + case 's': + return String(args[i++]); + case 'e': + return escape(args[i++]); + // no default + } + }); + + return div.firstChild; + } + + /** + * Check for suites that do not have elements + * with `classname`, and hide them. + * + * @param {text} classname + */ + function hideSuitesWithout(classname) { + var suites = document.getElementsByClassName('suite'); + for (var i = 0; i < suites.length; i++) { + var els = suites[i].getElementsByClassName(classname); + if (!els.length) { + suites[i].className += ' hidden'; + } + } + } + + /** + * Unhide .hidden suites. + */ + function unhide() { + var els = document.getElementsByClassName('suite hidden'); + while (els.length > 0) { + els[0].className = els[0].className.replace('suite hidden', 'suite'); + } + } + + /** + * Set an element's text contents. + * + * @param {HTMLElement} el + * @param {string} contents + */ + function text(el, contents) { + if (el.textContent) { + el.textContent = contents; + } else { + el.innerText = contents; + } + } + + /** + * Listen on `event` with callback `fn`. + */ + function on(el, event, fn) { + if (el.addEventListener) { + el.addEventListener(event, fn, false); + } else { + el.attachEvent('on' + event, fn); + } + } + + HTML.browserOnly = true; + }); + + var list = createCommonjsModule(function (module, exports) { + /** + * @module List + */ + /** + * Module dependencies. + */ + + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_BEGIN = constants.EVENT_TEST_BEGIN; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var color = base.color; + var cursor = base.cursor; + + /** + * Expose `List`. + */ + + module.exports = List; + + /** + * Constructs a new `List` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function List(runner, options) { + base.call(this, runner, options); + + var self = this; + var n = 0; + + runner.on(EVENT_RUN_BEGIN, function () { + base.consoleLog(); + }); + + runner.on(EVENT_TEST_BEGIN, function (test) { + process$1.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); + }); + + runner.on(EVENT_TEST_PENDING, function (test) { + var fmt = color('checkmark', ' -') + color('pending', ' %s'); + base.consoleLog(fmt, test.fullTitle()); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + var fmt = + color('checkmark', ' ' + base.symbols.ok) + + color('pass', ' %s: ') + + color(test.speed, '%dms'); + cursor.CR(); + base.consoleLog(fmt, test.fullTitle(), test.duration); + }); + + runner.on(EVENT_TEST_FAIL, function (test) { + cursor.CR(); + base.consoleLog(color('fail', ' %d) %s'), ++n, test.fullTitle()); + }); + + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(List, base); + + List.description = 'like "spec" reporter but flat'; + }); + + var min = createCommonjsModule(function (module, exports) { + /** + * @module Min + */ + /** + * Module dependencies. + */ + + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + + /** + * Expose `Min`. + */ + + module.exports = Min; + + /** + * Constructs a new `Min` reporter instance. + * + * @description + * This minimal test reporter is best used with '--watch'. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Min(runner, options) { + base.call(this, runner, options); + + runner.on(EVENT_RUN_BEGIN, function () { + // clear screen + process$1.stdout.write('\u001b[2J'); + // set cursor position + process$1.stdout.write('\u001b[1;3H'); + }); + + runner.once(EVENT_RUN_END, this.epilogue.bind(this)); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(Min, base); + + Min.description = 'essentially just a summary'; + }); + + var spec = createCommonjsModule(function (module, exports) { + /** + * @module Spec + */ + /** + * Module dependencies. + */ + + + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var inherits = utils.inherits; + var color = base.color; + + /** + * Expose `Spec`. + */ + + module.exports = Spec; + + /** + * Constructs a new `Spec` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Spec(runner, options) { + base.call(this, runner, options); + + var self = this; + var indents = 0; + var n = 0; + + function indent() { + return Array(indents).join(' '); + } + + runner.on(EVENT_RUN_BEGIN, function () { + base.consoleLog(); + }); + + runner.on(EVENT_SUITE_BEGIN, function (suite) { + ++indents; + base.consoleLog(color('suite', '%s%s'), indent(), suite.title); + }); + + runner.on(EVENT_SUITE_END, function () { + --indents; + if (indents === 1) { + base.consoleLog(); + } + }); + + runner.on(EVENT_TEST_PENDING, function (test) { + var fmt = indent() + color('pending', ' - %s'); + base.consoleLog(fmt, test.title); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + var fmt; + if (test.speed === 'fast') { + fmt = + indent() + + color('checkmark', ' ' + base.symbols.ok) + + color('pass', ' %s'); + base.consoleLog(fmt, test.title); + } else { + fmt = + indent() + + color('checkmark', ' ' + base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); + base.consoleLog(fmt, test.title, test.duration); + } + }); + + runner.on(EVENT_TEST_FAIL, function (test) { + base.consoleLog(indent() + color('fail', ' %d) %s'), ++n, test.title); + }); + + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(Spec, base); + + Spec.description = 'hierarchical & verbose [default]'; + }); + + var nyan = createCommonjsModule(function (module, exports) { + /** + * @module Nyan + */ + /** + * Module dependencies. + */ + + + var constants = runner.constants; + var inherits = utils.inherits; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + + /** + * Expose `Dot`. + */ + + module.exports = NyanCat; + + /** + * Constructs a new `Nyan` reporter instance. + * + * @public + * @class Nyan + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function NyanCat(runner, options) { + base.call(this, runner, options); + + var self = this; + var width = (base.window.width * 0.75) | 0; + var nyanCatWidth = (this.nyanCatWidth = 11); + + this.colorIndex = 0; + this.numberOfLines = 4; + this.rainbowColors = self.generateColors(); + this.scoreboardWidth = 5; + this.tick = 0; + this.trajectories = [[], [], [], []]; + this.trajectoryWidthMax = width - nyanCatWidth; + + runner.on(EVENT_RUN_BEGIN, function () { + base.cursor.hide(); + self.draw(); + }); + + runner.on(EVENT_TEST_PENDING, function () { + self.draw(); + }); + + runner.on(EVENT_TEST_PASS, function () { + self.draw(); + }); + + runner.on(EVENT_TEST_FAIL, function () { + self.draw(); + }); + + runner.once(EVENT_RUN_END, function () { + base.cursor.show(); + for (var i = 0; i < self.numberOfLines; i++) { + write('\n'); + } + self.epilogue(); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(NyanCat, base); + + /** + * Draw the nyan cat + * + * @private + */ + + NyanCat.prototype.draw = function () { + this.appendRainbow(); + this.drawScoreboard(); + this.drawRainbow(); + this.drawNyanCat(); + this.tick = !this.tick; + }; + + /** + * Draw the "scoreboard" showing the number + * of passes, failures and pending tests. + * + * @private + */ + + NyanCat.prototype.drawScoreboard = function () { + var stats = this.stats; + + function draw(type, n) { + write(' '); + write(base.color(type, n)); + write('\n'); + } + + draw('green', stats.passes); + draw('fail', stats.failures); + draw('pending', stats.pending); + write('\n'); + + this.cursorUp(this.numberOfLines); + }; + + /** + * Append the rainbow. + * + * @private + */ + + NyanCat.prototype.appendRainbow = function () { + var segment = this.tick ? '_' : '-'; + var rainbowified = this.rainbowify(segment); + + for (var index = 0; index < this.numberOfLines; index++) { + var trajectory = this.trajectories[index]; + if (trajectory.length >= this.trajectoryWidthMax) { + trajectory.shift(); + } + trajectory.push(rainbowified); + } + }; + + /** + * Draw the rainbow. + * + * @private + */ + + NyanCat.prototype.drawRainbow = function () { + var self = this; + + this.trajectories.forEach(function (line) { + write('\u001b[' + self.scoreboardWidth + 'C'); + write(line.join('')); + write('\n'); + }); + + this.cursorUp(this.numberOfLines); + }; + + /** + * Draw the nyan cat + * + * @private + */ + NyanCat.prototype.drawNyanCat = function () { + var self = this; + var startWidth = this.scoreboardWidth + this.trajectories[0].length; + var dist = '\u001b[' + startWidth + 'C'; + var padding = ''; + + write(dist); + write('_,------,'); + write('\n'); + + write(dist); + padding = self.tick ? ' ' : ' '; + write('_|' + padding + '/\\_/\\ '); + write('\n'); + + write(dist); + padding = self.tick ? '_' : '__'; + var tail = self.tick ? '~' : '^'; + write(tail + '|' + padding + this.face() + ' '); + write('\n'); + + write(dist); + padding = self.tick ? ' ' : ' '; + write(padding + '"" "" '); + write('\n'); + + this.cursorUp(this.numberOfLines); + }; + + /** + * Draw nyan cat face. + * + * @private + * @return {string} + */ + + NyanCat.prototype.face = function () { + var stats = this.stats; + if (stats.failures) { + return '( x .x)'; + } else if (stats.pending) { + return '( o .o)'; + } else if (stats.passes) { + return '( ^ .^)'; + } + return '( - .-)'; + }; + + /** + * Move cursor up `n`. + * + * @private + * @param {number} n + */ + + NyanCat.prototype.cursorUp = function (n) { + write('\u001b[' + n + 'A'); + }; + + /** + * Move cursor down `n`. + * + * @private + * @param {number} n + */ + + NyanCat.prototype.cursorDown = function (n) { + write('\u001b[' + n + 'B'); + }; + + /** + * Generate rainbow colors. + * + * @private + * @return {Array} + */ + NyanCat.prototype.generateColors = function () { + var colors = []; + + for (var i = 0; i < 6 * 7; i++) { + var pi3 = Math.floor(Math.PI / 3); + var n = i * (1.0 / 6); + var r = Math.floor(3 * Math.sin(n) + 3); + var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); + var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); + colors.push(36 * r + 6 * g + b + 16); + } + + return colors; + }; + + /** + * Apply rainbow to the given `str`. + * + * @private + * @param {string} str + * @return {string} + */ + NyanCat.prototype.rainbowify = function (str) { + if (!base.useColors) { + return str; + } + var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; + this.colorIndex += 1; + return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m'; + }; + + /** + * Stdout helper. + * + * @param {string} string A message to write to stdout. + */ + function write(string) { + process$1.stdout.write(string); + } + + NyanCat.description = '"nyan cat"'; + }); + + var xunit = createCommonjsModule(function (module, exports) { + /** + * @module XUnit + */ + /** + * Module dependencies. + */ + + + + + + + var createUnsupportedError = errors.createUnsupportedError; + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var STATE_FAILED = runnable.constants.STATE_FAILED; + var inherits = utils.inherits; + var escape = utils.escape; + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + var Date = commonjsGlobal.Date; + + /** + * Expose `XUnit`. + */ + + module.exports = XUnit; + + /** + * Constructs a new `XUnit` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function XUnit(runner, options) { + base.call(this, runner, options); + + var stats = this.stats; + var tests = []; + var self = this; + + // the name of the test suite, as it will appear in the resulting XML file + var suiteName; + + // the default name of the test suite if none is provided + var DEFAULT_SUITE_NAME = 'Mocha Tests'; + + if (options && options.reporterOptions) { + if (options.reporterOptions.output) { + if (!fs.createWriteStream) { + throw createUnsupportedError('file output not supported in browser'); + } + + fs.mkdirSync(path.dirname(options.reporterOptions.output), { + recursive: true + }); + self.fileStream = fs.createWriteStream(options.reporterOptions.output); + } + + // get the suite name from the reporter options (if provided) + suiteName = options.reporterOptions.suiteName; + } + + // fall back to the default suite name + suiteName = suiteName || DEFAULT_SUITE_NAME; + + runner.on(EVENT_TEST_PENDING, function (test) { + tests.push(test); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + tests.push(test); + }); + + runner.on(EVENT_TEST_FAIL, function (test) { + tests.push(test); + }); + + runner.once(EVENT_RUN_END, function () { + self.write( + tag( + 'testsuite', + { + name: suiteName, + tests: stats.tests, + failures: 0, + errors: stats.failures, + skipped: stats.tests - stats.failures - stats.passes, + timestamp: new Date().toUTCString(), + time: stats.duration / 1000 || 0 + }, + false + ) + ); + + tests.forEach(function (t) { + self.test(t); + }); + + self.write(''); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(XUnit, base); + + /** + * Override done to close the stream (if it's a file). + * + * @param failures + * @param {Function} fn + */ + XUnit.prototype.done = function (failures, fn) { + if (this.fileStream) { + this.fileStream.end(function () { + fn(failures); + }); + } else { + fn(failures); + } + }; + + /** + * Write out the given line. + * + * @param {string} line + */ + XUnit.prototype.write = function (line) { + if (this.fileStream) { + this.fileStream.write(line + '\n'); + } else if (typeof process$1 === 'object' && process$1.stdout) { + process$1.stdout.write(line + '\n'); + } else { + base.consoleLog(line); + } + }; + + /** + * Output tag for the given `test.` + * + * @param {Test} test + */ + XUnit.prototype.test = function (test) { + base.useColors = false; + + var attrs = { + classname: test.parent.fullTitle(), + name: test.title, + time: test.duration / 1000 || 0 + }; + + if (test.state === STATE_FAILED) { + var err = test.err; + var diff = + !base.hideDiff && base.showDiff(err) + ? '\n' + base.generateDiff(err.actual, err.expected) + : ''; + this.write( + tag( + 'testcase', + attrs, + false, + tag( + 'failure', + {}, + false, + escape(err.message) + escape(diff) + '\n' + escape(err.stack) + ) + ) + ); + } else if (test.isPending()) { + this.write(tag('testcase', attrs, false, tag('skipped', {}, true))); + } else { + this.write(tag('testcase', attrs, true)); + } + }; + + /** + * HTML tag helper. + * + * @param name + * @param attrs + * @param close + * @param content + * @return {string} + */ + function tag(name, attrs, close, content) { + var end = close ? '/>' : '>'; + var pairs = []; + var tag; + + for (var key in attrs) { + if (Object.prototype.hasOwnProperty.call(attrs, key)) { + pairs.push(key + '="' + escape(attrs[key]) + '"'); + } + } + + tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; + if (content) { + tag += content + '' + '\n'; + buf += title(suite.title) + '\n'; + }); + + runner.on(EVENT_SUITE_END, function () { + --level; + }); + + runner.on(EVENT_TEST_PASS, function (test) { + var code = utils.clean(test.body); + buf += test.title + '.\n'; + buf += '\n```js\n'; + buf += code + '\n'; + buf += '```\n\n'; + }); + + runner.once(EVENT_RUN_END, function () { + process$1.stdout.write('# TOC\n'); + process$1.stdout.write(generateTOC(runner.suite)); + process$1.stdout.write(buf); + }); + } + + Markdown.description = 'GitHub Flavored Markdown'; + }); + + var progress = createCommonjsModule(function (module, exports) { + /** + * @module Progress + */ + /** + * Module dependencies. + */ + + + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var inherits = utils.inherits; + var color = base.color; + var cursor = base.cursor; + + /** + * Expose `Progress`. + */ + + module.exports = Progress; + + /** + * General progress bar color. + */ + + base.colors.progress = 90; + + /** + * Constructs a new `Progress` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Progress(runner, options) { + base.call(this, runner, options); + + var self = this; + var width = (base.window.width * 0.5) | 0; + var total = runner.total; + var complete = 0; + var lastN = -1; + + // default chars + options = options || {}; + var reporterOptions = options.reporterOptions || {}; + + options.open = reporterOptions.open || '['; + options.complete = reporterOptions.complete || '▬'; + options.incomplete = reporterOptions.incomplete || base.symbols.dot; + options.close = reporterOptions.close || ']'; + options.verbose = reporterOptions.verbose || false; + + // tests started + runner.on(EVENT_RUN_BEGIN, function () { + process$1.stdout.write('\n'); + cursor.hide(); + }); + + // tests complete + runner.on(EVENT_TEST_END, function () { + complete++; + + var percent = complete / total; + var n = (width * percent) | 0; + var i = width - n; + + if (n === lastN && !options.verbose) { + // Don't re-render the line if it hasn't changed + return; + } + lastN = n; + + cursor.CR(); + process$1.stdout.write('\u001b[J'); + process$1.stdout.write(color('progress', ' ' + options.open)); + process$1.stdout.write(Array(n).join(options.complete)); + process$1.stdout.write(Array(i).join(options.incomplete)); + process$1.stdout.write(color('progress', options.close)); + if (options.verbose) { + process$1.stdout.write(color('progress', ' ' + complete + ' of ' + total)); + } + }); + + // tests are complete, output some stats + // and the failures if any + runner.once(EVENT_RUN_END, function () { + cursor.show(); + process$1.stdout.write('\n'); + self.epilogue(); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(Progress, base); + + Progress.description = 'a progress bar'; + }); + + var landing = createCommonjsModule(function (module, exports) { + /** + * @module Landing + */ + /** + * Module dependencies. + */ + + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var STATE_FAILED = runnable.constants.STATE_FAILED; + + var cursor = base.cursor; + var color = base.color; + + /** + * Expose `Landing`. + */ + + module.exports = Landing; + + /** + * Airplane color. + */ + + base.colors.plane = 0; + + /** + * Airplane crash color. + */ + + base.colors['plane crash'] = 31; + + /** + * Runway color. + */ + + base.colors.runway = 90; + + /** + * Constructs a new `Landing` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function Landing(runner, options) { + base.call(this, runner, options); + + var self = this; + var width = (base.window.width * 0.75) | 0; + var stream = process$1.stdout; + + var plane = color('plane', '✈'); + var crashed = -1; + var n = 0; + var total = 0; + + function runway() { + var buf = Array(width).join('-'); + return ' ' + color('runway', buf); + } + + runner.on(EVENT_RUN_BEGIN, function () { + stream.write('\n\n\n '); + cursor.hide(); + }); + + runner.on(EVENT_TEST_END, function (test) { + // check if the plane crashed + var col = crashed === -1 ? ((width * ++n) / ++total) | 0 : crashed; + // show the crash + if (test.state === STATE_FAILED) { + plane = color('plane crash', '✈'); + crashed = col; + } + + // render landing strip + stream.write('\u001b[' + (width + 1) + 'D\u001b[2A'); + stream.write(runway()); + stream.write('\n '); + stream.write(color('runway', Array(col).join('⋅'))); + stream.write(plane); + stream.write(color('runway', Array(width - col).join('⋅') + '\n')); + stream.write(runway()); + stream.write('\u001b[0m'); + }); + + runner.once(EVENT_RUN_END, function () { + cursor.show(); + process$1.stdout.write('\n'); + self.epilogue(); + }); + + // if cursor is hidden when we ctrl-C, then it will remain hidden unless... + process$1.once('SIGINT', function () { + cursor.show(); + nextTick$1(function () { + process$1.kill(process$1.pid, 'SIGINT'); + }); + }); + } + + /** + * Inherit from `Base.prototype`. + */ + inherits(Landing, base); + + Landing.description = 'Unicode landing strip'; + }); + + var jsonStream = createCommonjsModule(function (module, exports) { + /** + * @module JSONStream + */ + /** + * Module dependencies. + */ + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + + /** + * Expose `JSONStream`. + */ + + module.exports = JSONStream; + + /** + * Constructs a new `JSONStream` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + function JSONStream(runner, options) { + base.call(this, runner, options); + + var self = this; + var total = runner.total; + + runner.once(EVENT_RUN_BEGIN, function () { + writeEvent(['start', {total: total}]); + }); + + runner.on(EVENT_TEST_PASS, function (test) { + writeEvent(['pass', clean(test)]); + }); + + runner.on(EVENT_TEST_FAIL, function (test, err) { + test = clean(test); + test.err = err.message; + test.stack = err.stack || null; + writeEvent(['fail', test]); + }); + + runner.once(EVENT_RUN_END, function () { + writeEvent(['end', self.stats]); + }); + } + + /** + * Mocha event to be written to the output stream. + * @typedef {Array} JSONStream~MochaEvent + */ + + /** + * Writes Mocha event to reporter output stream. + * + * @private + * @param {JSONStream~MochaEvent} event - Mocha event to be output. + */ + function writeEvent(event) { + process$1.stdout.write(JSON.stringify(event) + '\n'); + } + + /** + * Returns an object literal representation of `test` + * free of cyclic properties, etc. + * + * @private + * @param {Test} test - Instance used as data source. + * @return {Object} object containing pared-down test instance data + */ + function clean(test) { + return { + title: test.title, + fullTitle: test.fullTitle(), + file: test.file, + duration: test.duration, + currentRetry: test.currentRetry(), + speed: test.speed + }; + } + + JSONStream.description = 'newline delimited JSON events'; + }); + + var reporters = createCommonjsModule(function (module, exports) { + + // Alias exports to a their normalized format Mocha#reporter to prevent a need + // for dynamic (try/catch) requires, which Browserify doesn't handle. + exports.Base = exports.base = base; + exports.Dot = exports.dot = dot; + exports.Doc = exports.doc = doc; + exports.TAP = exports.tap = tap; + exports.JSON = exports.json = json; + exports.HTML = exports.html = html; + exports.List = exports.list = list; + exports.Min = exports.min = min; + exports.Spec = exports.spec = spec; + exports.Nyan = exports.nyan = nyan; + exports.XUnit = exports.xunit = xunit; + exports.Markdown = exports.markdown = markdown; + exports.Progress = exports.progress = progress; + exports.Landing = exports.landing = landing; + exports.JSONStream = exports['json-stream'] = jsonStream; + }); + + var name = "mocha"; + var version = "9.2.2"; + var homepage = "https://mochajs.org/"; + var notifyLogo = "https://ibin.co/4QuRuGjXvl36.png"; + var _package = { + name: name, + version: version, + homepage: homepage, + notifyLogo: notifyLogo + }; + + var _package$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + name: name, + version: version, + homepage: homepage, + notifyLogo: notifyLogo, + 'default': _package + }); + + var require$$9 = getCjsExportFromNamespace(_package$1); + + /** + * Web Notifications module. + * @module Growl + */ + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + var Date$3 = commonjsGlobal.Date; + var setTimeout$2 = commonjsGlobal.setTimeout; + var EVENT_RUN_END$1 = runner.constants.EVENT_RUN_END; + var isBrowser = utils.isBrowser; + + /** + * Checks if browser notification support exists. + * + * @public + * @see {@link https://caniuse.com/#feat=notifications|Browser support (notifications)} + * @see {@link https://caniuse.com/#feat=promises|Browser support (promises)} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlCapable} + * @return {boolean} whether browser notification support exists + */ + var isCapable = function () { + var hasNotificationSupport = 'Notification' in window; + var hasPromiseSupport = typeof Promise === 'function'; + return isBrowser() && hasNotificationSupport && hasPromiseSupport; + }; + + /** + * Implements browser notifications as a pseudo-reporter. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/notification|Notification API} + * @see {@link https://developers.google.com/web/fundamentals/push-notifications/display-a-notification|Displaying a Notification} + * @see {@link Growl#isPermitted} + * @see {@link Mocha#_growl} + * @param {Runner} runner - Runner instance. + */ + var notify = function (runner) { + var promise = isPermitted(); + + /** + * Attempt notification. + */ + var sendNotification = function () { + // If user hasn't responded yet... "No notification for you!" (Seinfeld) + Promise.race([promise, Promise.resolve(undefined)]) + .then(canNotify) + .then(function () { + display(runner); + }) + .catch(notPermitted); + }; + + runner.once(EVENT_RUN_END$1, sendNotification); + }; + + /** + * Checks if browser notification is permitted by user. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission|Notification.permission} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlPermitted} + * @returns {Promise} promise determining if browser notification + * permissible when fulfilled. + */ + function isPermitted() { + var permitted = { + granted: function allow() { + return Promise.resolve(true); + }, + denied: function deny() { + return Promise.resolve(false); + }, + default: function ask() { + return Notification.requestPermission().then(function (permission) { + return permission === 'granted'; + }); + } + }; + + return permitted[Notification.permission](); + } + + /** + * @summary + * Determines if notification should proceed. + * + * @description + * Notification shall not proceed unless `value` is true. + * + * `value` will equal one of: + *
        + *
      • true (from `isPermitted`)
      • + *
      • false (from `isPermitted`)
      • + *
      • undefined (from `Promise.race`)
      • + *
      + * + * @private + * @param {boolean|undefined} value - Determines if notification permissible. + * @returns {Promise} Notification can proceed + */ + function canNotify(value) { + if (!value) { + var why = value === false ? 'blocked' : 'unacknowledged'; + var reason = 'not permitted by user (' + why + ')'; + return Promise.reject(new Error(reason)); + } + return Promise.resolve(); + } + + /** + * Displays the notification. + * + * @private + * @param {Runner} runner - Runner instance. + */ + function display(runner) { + var stats = runner.stats; + var symbol = { + cross: '\u274C', + tick: '\u2705' + }; + var logo = require$$9.notifyLogo; + var _message; + var message; + var title; + + if (stats.failures) { + _message = stats.failures + ' of ' + stats.tests + ' tests failed'; + message = symbol.cross + ' ' + _message; + title = 'Failed'; + } else { + _message = stats.passes + ' tests passed in ' + stats.duration + 'ms'; + message = symbol.tick + ' ' + _message; + title = 'Passed'; + } + + // Send notification + var options = { + badge: logo, + body: message, + dir: 'ltr', + icon: logo, + lang: 'en-US', + name: 'mocha', + requireInteraction: false, + timestamp: Date$3.now() + }; + var notification = new Notification(title, options); + + // Autoclose after brief delay (makes various browsers act same) + var FORCE_DURATION = 4000; + setTimeout$2(notification.close.bind(notification), FORCE_DURATION); + } + + /** + * As notifications are tangential to our purpose, just log the error. + * + * @private + * @param {Error} err - Why notification didn't happen. + */ + function notPermitted(err) { + console.error('notification error:', err.message); + } + + var growl = { + isCapable: isCapable, + notify: notify + }; + + var diff = true; + var extension = [ + "js", + "cjs", + "mjs" + ]; + var reporter = "spec"; + var slow = 75; + var timeout = 2000; + var ui = "bdd"; + var mocharc$1 = { + diff: diff, + extension: extension, + "package": "./package.json", + reporter: reporter, + slow: slow, + timeout: timeout, + ui: ui, + "watch-ignore": [ + "node_modules", + ".git" + ] + }; + + var mocharc$2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + diff: diff, + extension: extension, + reporter: reporter, + slow: slow, + timeout: timeout, + ui: ui, + 'default': mocharc$1 + }); + + /** + * Provides a factory function for a {@link StatsCollector} object. + * @module + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_END = constants.EVENT_TEST_END; + + /** + * Test statistics collector. + * + * @public + * @typedef {Object} StatsCollector + * @property {number} suites - integer count of suites run. + * @property {number} tests - integer count of tests run. + * @property {number} passes - integer count of passing tests. + * @property {number} pending - integer count of pending tests. + * @property {number} failures - integer count of failed tests. + * @property {Date} start - time when testing began. + * @property {Date} end - time when testing concluded. + * @property {number} duration - number of msecs that testing took. + */ + + var Date$2 = commonjsGlobal.Date; + + /** + * Provides stats such as test duration, number of tests passed / failed etc., by listening for events emitted by `runner`. + * + * @private + * @param {Runner} runner - Runner instance + * @throws {TypeError} If falsy `runner` + */ + function createStatsCollector(runner) { + /** + * @type StatsCollector + */ + var stats = { + suites: 0, + tests: 0, + passes: 0, + pending: 0, + failures: 0 + }; + + if (!runner) { + throw new TypeError('Missing runner argument'); + } + + runner.stats = stats; + + runner.once(EVENT_RUN_BEGIN, function () { + stats.start = new Date$2(); + }); + runner.on(EVENT_SUITE_BEGIN, function (suite) { + suite.root || stats.suites++; + }); + runner.on(EVENT_TEST_PASS, function () { + stats.passes++; + }); + runner.on(EVENT_TEST_FAIL, function () { + stats.failures++; + }); + runner.on(EVENT_TEST_PENDING, function () { + stats.pending++; + }); + runner.on(EVENT_TEST_END, function () { + stats.tests++; + }); + runner.once(EVENT_RUN_END, function () { + stats.end = new Date$2(); + stats.duration = stats.end - stats.start; + }); + } + + var statsCollector = createStatsCollector; + + var createInvalidArgumentTypeError = errors.createInvalidArgumentTypeError; + var isString = utils.isString; + + const {MOCHA_ID_PROP_NAME} = utils.constants; + + var test = Test; + + /** + * Initialize a new `Test` with the given `title` and callback `fn`. + * + * @public + * @class + * @extends Runnable + * @param {String} title - Test title (required) + * @param {Function} [fn] - Test callback. If omitted, the Test is considered "pending" + */ + function Test(title, fn) { + if (!isString(title)) { + throw createInvalidArgumentTypeError( + 'Test argument "title" should be a string. Received type "' + + typeof title + + '"', + 'title', + 'string' + ); + } + this.type = 'test'; + runnable.call(this, title, fn); + this.reset(); + } + + /** + * Inherit from `Runnable.prototype`. + */ + utils.inherits(Test, runnable); + + /** + * Resets the state initially or for a next run. + */ + Test.prototype.reset = function () { + runnable.prototype.reset.call(this); + this.pending = !this.fn; + delete this.state; + }; + + /** + * Set or get retried test + * + * @private + */ + Test.prototype.retriedTest = function (n) { + if (!arguments.length) { + return this._retriedTest; + } + this._retriedTest = n; + }; + + /** + * Add test to the list of tests marked `only`. + * + * @private + */ + Test.prototype.markOnly = function () { + this.parent.appendOnlyTest(this); + }; + + Test.prototype.clone = function () { + var test = new Test(this.title, this.fn); + test.timeout(this.timeout()); + test.slow(this.slow()); + test.retries(this.retries()); + test.currentRetry(this.currentRetry()); + test.retriedTest(this.retriedTest() || this); + test.globals(this.globals()); + test.parent = this.parent; + test.file = this.file; + test.ctx = this.ctx; + return test; + }; + + /** + * Returns an minimal object suitable for transmission over IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + Test.prototype.serialize = function serialize() { + return { + $$currentRetry: this._currentRetry, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.pending), + $$retriedTest: this._retriedTest || null, + $$slow: this._slow, + $$titlePath: this.titlePath(), + body: this.body, + duration: this.duration, + err: this.err, + parent: { + $$fullTitle: this.parent.fullTitle(), + [MOCHA_ID_PROP_NAME]: this.parent.id + }, + speed: this.speed, + state: this.state, + title: this.title, + type: this.type, + file: this.file, + [MOCHA_ID_PROP_NAME]: this.id + }; + }; + + /** + @module interfaces/common + */ + + + + var createMissingArgumentError = errors.createMissingArgumentError; + var createUnsupportedError = errors.createUnsupportedError; + var createForbiddenExclusivityError = errors.createForbiddenExclusivityError; + + /** + * Functions common to more than one interface. + * + * @private + * @param {Suite[]} suites + * @param {Context} context + * @param {Mocha} mocha + * @return {Object} An object containing common functions. + */ + var common = function (suites, context, mocha) { + /** + * Check if the suite should be tested. + * + * @private + * @param {Suite} suite - suite to check + * @returns {boolean} + */ + function shouldBeTested(suite) { + return ( + !mocha.options.grep || + (mocha.options.grep && + mocha.options.grep.test(suite.fullTitle()) && + !mocha.options.invert) + ); + } + + return { + /** + * This is only present if flag --delay is passed into Mocha. It triggers + * root suite execution. + * + * @param {Suite} suite The root suite. + * @return {Function} A function which runs the root suite + */ + runWithSuite: function runWithSuite(suite) { + return function run() { + suite.run(); + }; + }, + + /** + * Execute before running tests. + * + * @param {string} name + * @param {Function} fn + */ + before: function (name, fn) { + suites[0].beforeAll(name, fn); + }, + + /** + * Execute after running tests. + * + * @param {string} name + * @param {Function} fn + */ + after: function (name, fn) { + suites[0].afterAll(name, fn); + }, + + /** + * Execute before each test case. + * + * @param {string} name + * @param {Function} fn + */ + beforeEach: function (name, fn) { + suites[0].beforeEach(name, fn); + }, + + /** + * Execute after each test case. + * + * @param {string} name + * @param {Function} fn + */ + afterEach: function (name, fn) { + suites[0].afterEach(name, fn); + }, + + suite: { + /** + * Create an exclusive Suite; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + only: function only(opts) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + opts.isOnly = true; + return this.create(opts); + }, + + /** + * Create a Suite, but skip it; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + skip: function skip(opts) { + opts.pending = true; + return this.create(opts); + }, + + /** + * Creates a suite. + * + * @param {Object} opts Options + * @param {string} opts.title Title of Suite + * @param {Function} [opts.fn] Suite Function (not always applicable) + * @param {boolean} [opts.pending] Is Suite pending? + * @param {string} [opts.file] Filepath where this Suite resides + * @param {boolean} [opts.isOnly] Is Suite exclusive? + * @returns {Suite} + */ + create: function create(opts) { + var suite$1 = suite.create(suites[0], opts.title); + suite$1.pending = Boolean(opts.pending); + suite$1.file = opts.file; + suites.unshift(suite$1); + if (opts.isOnly) { + suite$1.markOnly(); + } + if ( + suite$1.pending && + mocha.options.forbidPending && + shouldBeTested(suite$1) + ) { + throw createUnsupportedError('Pending test forbidden'); + } + if (typeof opts.fn === 'function') { + opts.fn.call(suite$1); + suites.shift(); + } else if (typeof opts.fn === 'undefined' && !suite$1.pending) { + throw createMissingArgumentError( + 'Suite "' + + suite$1.fullTitle() + + '" was defined but no callback was supplied. ' + + 'Supply a callback or explicitly skip the suite.', + 'callback', + 'function' + ); + } else if (!opts.fn && suite$1.pending) { + suites.shift(); + } + + return suite$1; + } + }, + + test: { + /** + * Exclusive test-case. + * + * @param {Object} mocha + * @param {Function} test + * @returns {*} + */ + only: function (mocha, test) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + test.markOnly(); + return test; + }, + + /** + * Pending test case. + * + * @param {string} title + */ + skip: function (title) { + context.test(title); + } + } + }; + }; + + var EVENT_FILE_PRE_REQUIRE$2 = + suite.constants.EVENT_FILE_PRE_REQUIRE; + + /** + * BDD-style interface: + * + * describe('Array', function() { + * describe('#indexOf()', function() { + * it('should return -1 when not present', function() { + * // ... + * }); + * + * it('should return the index when present', function() { + * // ... + * }); + * }); + * }); + * + * @param {Suite} suite Root suite. + */ + var bdd$1 = function bddInterface(suite) { + var suites = [suite]; + + suite.on(EVENT_FILE_PRE_REQUIRE$2, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + + context.before = common$1.before; + context.after = common$1.after; + context.beforeEach = common$1.beforeEach; + context.afterEach = common$1.afterEach; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + /** + * Describe a "suite" with the given `title` + * and callback `fn` containing nested suites + * and/or tests. + */ + + context.describe = context.context = function (title, fn) { + return common$1.suite.create({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Pending describe. + */ + + context.xdescribe = + context.xcontext = + context.describe.skip = + function (title, fn) { + return common$1.suite.skip({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Exclusive suite. + */ + + context.describe.only = function (title, fn) { + return common$1.suite.only({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Describe a specification or test-case + * with the given `title` and callback `fn` + * acting as a thunk. + */ + + context.it = context.specify = function (title, fn) { + var suite = suites[0]; + if (suite.isPending()) { + fn = null; + } + var test$1 = new test(title, fn); + test$1.file = file; + suite.addTest(test$1); + return test$1; + }; + + /** + * Exclusive test-case. + */ + + context.it.only = function (title, fn) { + return common$1.test.only(mocha, context.it(title, fn)); + }; + + /** + * Pending test case. + */ + + context.xit = + context.xspecify = + context.it.skip = + function (title) { + return context.it(title); + }; + }); + }; + + var description$3 = 'BDD or RSpec style [default]'; + bdd$1.description = description$3; + + var EVENT_FILE_PRE_REQUIRE$1 = + suite.constants.EVENT_FILE_PRE_REQUIRE; + + /** + * TDD-style interface: + * + * suite('Array', function() { + * suite('#indexOf()', function() { + * suiteSetup(function() { + * + * }); + * + * test('should return -1 when not present', function() { + * + * }); + * + * test('should return the index when present', function() { + * + * }); + * + * suiteTeardown(function() { + * + * }); + * }); + * }); + * + * @param {Suite} suite Root suite. + */ + var tdd$1 = function (suite) { + var suites = [suite]; + + suite.on(EVENT_FILE_PRE_REQUIRE$1, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + + context.setup = common$1.beforeEach; + context.teardown = common$1.afterEach; + context.suiteSetup = common$1.before; + context.suiteTeardown = common$1.after; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + + /** + * Describe a "suite" with the given `title` and callback `fn` containing + * nested suites and/or tests. + */ + context.suite = function (title, fn) { + return common$1.suite.create({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Pending suite. + */ + context.suite.skip = function (title, fn) { + return common$1.suite.skip({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Exclusive test-case. + */ + context.suite.only = function (title, fn) { + return common$1.suite.only({ + title: title, + file: file, + fn: fn + }); + }; + + /** + * Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. + */ + context.test = function (title, fn) { + var suite = suites[0]; + if (suite.isPending()) { + fn = null; + } + var test$1 = new test(title, fn); + test$1.file = file; + suite.addTest(test$1); + return test$1; + }; + + /** + * Exclusive test-case. + */ + + context.test.only = function (title, fn) { + return common$1.test.only(mocha, context.test(title, fn)); + }; + + context.test.skip = common$1.test.skip; + }); + }; + + var description$2 = + 'traditional "suite"/"test" instead of BDD\'s "describe"/"it"'; + tdd$1.description = description$2; + + var EVENT_FILE_PRE_REQUIRE = + suite.constants.EVENT_FILE_PRE_REQUIRE; + + /** + * QUnit-style interface: + * + * suite('Array'); + * + * test('#length', function() { + * var arr = [1,2,3]; + * ok(arr.length == 3); + * }); + * + * test('#indexOf()', function() { + * var arr = [1,2,3]; + * ok(arr.indexOf(1) == 0); + * ok(arr.indexOf(2) == 1); + * ok(arr.indexOf(3) == 2); + * }); + * + * suite('String'); + * + * test('#length', function() { + * ok('foo'.length == 3); + * }); + * + * @param {Suite} suite Root suite. + */ + var qunit$1 = function qUnitInterface(suite) { + var suites = [suite]; + + suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + + context.before = common$1.before; + context.after = common$1.after; + context.beforeEach = common$1.beforeEach; + context.afterEach = common$1.afterEach; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + /** + * Describe a "suite" with the given `title`. + */ + + context.suite = function (title) { + if (suites.length > 1) { + suites.shift(); + } + return common$1.suite.create({ + title: title, + file: file, + fn: false + }); + }; + + /** + * Exclusive Suite. + */ + + context.suite.only = function (title) { + if (suites.length > 1) { + suites.shift(); + } + return common$1.suite.only({ + title: title, + file: file, + fn: false + }); + }; + + /** + * Describe a specification or test-case + * with the given `title` and callback `fn` + * acting as a thunk. + */ + + context.test = function (title, fn) { + var test$1 = new test(title, fn); + test$1.file = file; + suites[0].addTest(test$1); + return test$1; + }; + + /** + * Exclusive test-case. + */ + + context.test.only = function (title, fn) { + return common$1.test.only(mocha, context.test(title, fn)); + }; + + context.test.skip = common$1.test.skip; + }); + }; + + var description$1 = 'QUnit style'; + qunit$1.description = description$1; + + /** + * Exports-style (as Node.js module) interface: + * + * exports.Array = { + * '#indexOf()': { + * 'should return -1 when the value is not present': function() { + * + * }, + * + * 'should return the correct index when the value is present': function() { + * + * } + * } + * }; + * + * @param {Suite} suite Root suite. + */ + var exports$2 = function (suite$1) { + var suites = [suite$1]; + + suite$1.on(suite.constants.EVENT_FILE_REQUIRE, visit); + + function visit(obj, file) { + var suite$1; + for (var key in obj) { + if (typeof obj[key] === 'function') { + var fn = obj[key]; + switch (key) { + case 'before': + suites[0].beforeAll(fn); + break; + case 'after': + suites[0].afterAll(fn); + break; + case 'beforeEach': + suites[0].beforeEach(fn); + break; + case 'afterEach': + suites[0].afterEach(fn); + break; + default: + var test$1 = new test(key, fn); + test$1.file = file; + suites[0].addTest(test$1); + } + } else { + suite$1 = suite.create(suites[0], key); + suites.unshift(suite$1); + visit(obj[key], file); + suites.shift(); + } + } + } + }; + + var description = 'Node.js module ("exports") style'; + exports$2.description = description; + + var bdd = bdd$1; + var tdd = tdd$1; + var qunit = qunit$1; + var exports$1 = exports$2; + + var interfaces = { + bdd: bdd, + tdd: tdd, + qunit: qunit, + exports: exports$1 + }; + + /** + * @module Context + */ + /** + * Expose `Context`. + */ + + var context = Context; + + /** + * Initialize a new `Context`. + * + * @private + */ + function Context() {} + + /** + * Set or get the context `Runnable` to `runnable`. + * + * @private + * @param {Runnable} runnable + * @return {Context} context + */ + Context.prototype.runnable = function (runnable) { + if (!arguments.length) { + return this._runnable; + } + this.test = this._runnable = runnable; + return this; + }; + + /** + * Set or get test timeout `ms`. + * + * @private + * @param {number} ms + * @return {Context} self + */ + Context.prototype.timeout = function (ms) { + if (!arguments.length) { + return this.runnable().timeout(); + } + this.runnable().timeout(ms); + return this; + }; + + /** + * Set or get test slowness threshold `ms`. + * + * @private + * @param {number} ms + * @return {Context} self + */ + Context.prototype.slow = function (ms) { + if (!arguments.length) { + return this.runnable().slow(); + } + this.runnable().slow(ms); + return this; + }; + + /** + * Mark a test as skipped. + * + * @private + * @throws Pending + */ + Context.prototype.skip = function () { + this.runnable().skip(); + }; + + /** + * Set or get a number of allowed retries on failed tests + * + * @private + * @param {number} n + * @return {Context} self + */ + Context.prototype.retries = function (n) { + if (!arguments.length) { + return this.runnable().retries(); + } + this.runnable().retries(n); + return this; + }; + + var mocharc = getCjsExportFromNamespace(mocharc$2); + + var mocha$1 = createCommonjsModule(function (module, exports) { + + /*! + * mocha + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + + + + + + + + + + + const { + createInvalidReporterError, + createInvalidInterfaceError, + createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError, + createUnsupportedError + } = errors; + const {EVENT_FILE_PRE_REQUIRE, EVENT_FILE_POST_REQUIRE, EVENT_FILE_REQUIRE} = + suite.constants; + var debug = browser('mocha:mocha'); + + exports = module.exports = Mocha; + + /** + * A Mocha instance is a finite state machine. + * These are the states it can be in. + * @private + */ + var mochaStates = utils.defineConstants({ + /** + * Initial state of the mocha instance + * @private + */ + INIT: 'init', + /** + * Mocha instance is running tests + * @private + */ + RUNNING: 'running', + /** + * Mocha instance is done running tests and references to test functions and hooks are cleaned. + * You can reset this state by unloading the test files. + * @private + */ + REFERENCES_CLEANED: 'referencesCleaned', + /** + * Mocha instance is disposed and can no longer be used. + * @private + */ + DISPOSED: 'disposed' + }); + + /** + * To require local UIs and reporters when running in node. + */ + + if (!utils.isBrowser() && typeof module.paths !== 'undefined') { + var cwd = utils.cwd(); + module.paths.push(cwd, path.join(cwd, 'node_modules')); + } + + /** + * Expose internals. + * @private + */ + + exports.utils = utils; + exports.interfaces = interfaces; + /** + * @public + * @memberof Mocha + */ + exports.reporters = reporters; + exports.Runnable = runnable; + exports.Context = context; + /** + * + * @memberof Mocha + */ + exports.Runner = runner; + exports.Suite = suite; + exports.Hook = hook; + exports.Test = test; + + let currentContext; + exports.afterEach = function (...args) { + return (currentContext.afterEach || currentContext.teardown).apply( + this, + args + ); + }; + exports.after = function (...args) { + return (currentContext.after || currentContext.suiteTeardown).apply( + this, + args + ); + }; + exports.beforeEach = function (...args) { + return (currentContext.beforeEach || currentContext.setup).apply(this, args); + }; + exports.before = function (...args) { + return (currentContext.before || currentContext.suiteSetup).apply(this, args); + }; + exports.describe = function (...args) { + return (currentContext.describe || currentContext.suite).apply(this, args); + }; + exports.describe.only = function (...args) { + return (currentContext.describe || currentContext.suite).only.apply( + this, + args + ); + }; + exports.describe.skip = function (...args) { + return (currentContext.describe || currentContext.suite).skip.apply( + this, + args + ); + }; + exports.it = function (...args) { + return (currentContext.it || currentContext.test).apply(this, args); + }; + exports.it.only = function (...args) { + return (currentContext.it || currentContext.test).only.apply(this, args); + }; + exports.it.skip = function (...args) { + return (currentContext.it || currentContext.test).skip.apply(this, args); + }; + exports.xdescribe = exports.describe.skip; + exports.xit = exports.it.skip; + exports.setup = exports.beforeEach; + exports.suiteSetup = exports.before; + exports.suiteTeardown = exports.after; + exports.suite = exports.describe; + exports.teardown = exports.afterEach; + exports.test = exports.it; + exports.run = function (...args) { + return currentContext.run.apply(this, args); + }; + + /** + * Constructs a new Mocha instance with `options`. + * + * @public + * @class Mocha + * @param {Object} [options] - Settings object. + * @param {boolean} [options.allowUncaught] - Propagate uncaught errors? + * @param {boolean} [options.asyncOnly] - Force `done` callback or promise? + * @param {boolean} [options.bail] - Bail after first test failure? + * @param {boolean} [options.checkLeaks] - Check for global variable leaks? + * @param {boolean} [options.color] - Color TTY output from reporter? + * @param {boolean} [options.delay] - Delay root suite execution? + * @param {boolean} [options.diff] - Show diff on failure? + * @param {boolean} [options.dryRun] - Report tests without running them? + * @param {boolean} [options.failZero] - Fail test run if zero tests? + * @param {string} [options.fgrep] - Test filter given string. + * @param {boolean} [options.forbidOnly] - Tests marked `only` fail the suite? + * @param {boolean} [options.forbidPending] - Pending tests fail the suite? + * @param {boolean} [options.fullTrace] - Full stacktrace upon failure? + * @param {string[]} [options.global] - Variables expected in global scope. + * @param {RegExp|string} [options.grep] - Test filter given regular expression. + * @param {boolean} [options.growl] - Enable desktop notifications? + * @param {boolean} [options.inlineDiffs] - Display inline diffs? + * @param {boolean} [options.invert] - Invert test filter matches? + * @param {boolean} [options.noHighlighting] - Disable syntax highlighting? + * @param {string|constructor} [options.reporter] - Reporter name or constructor. + * @param {Object} [options.reporterOption] - Reporter settings object. + * @param {number} [options.retries] - Number of times to retry failed tests. + * @param {number} [options.slow] - Slow threshold value. + * @param {number|string} [options.timeout] - Timeout threshold value. + * @param {string} [options.ui] - Interface name. + * @param {boolean} [options.parallel] - Run jobs in parallel. + * @param {number} [options.jobs] - Max number of worker processes for parallel runs. + * @param {MochaRootHookObject} [options.rootHooks] - Hooks to bootstrap the root suite with. + * @param {string[]} [options.require] - Pathname of `rootHooks` plugin for parallel runs. + * @param {boolean} [options.isWorker] - Should be `true` if `Mocha` process is running in a worker process. + */ + function Mocha(options = {}) { + options = {...mocharc, ...options}; + this.files = []; + this.options = options; + // root suite + this.suite = new exports.Suite('', new exports.Context(), true); + this._cleanReferencesAfterRun = true; + this._state = mochaStates.INIT; + + this.grep(options.grep) + .fgrep(options.fgrep) + .ui(options.ui) + .reporter( + options.reporter, + options.reporterOption || options.reporterOptions // for backwards compability + ) + .slow(options.slow) + .global(options.global); + + // this guard exists because Suite#timeout does not consider `undefined` to be valid input + if (typeof options.timeout !== 'undefined') { + this.timeout(options.timeout === false ? 0 : options.timeout); + } + + if ('retries' in options) { + this.retries(options.retries); + } + + [ + 'allowUncaught', + 'asyncOnly', + 'bail', + 'checkLeaks', + 'color', + 'delay', + 'diff', + 'dryRun', + 'failZero', + 'forbidOnly', + 'forbidPending', + 'fullTrace', + 'growl', + 'inlineDiffs', + 'invert' + ].forEach(function (opt) { + if (options[opt]) { + this[opt](); + } + }, this); + + if (options.rootHooks) { + this.rootHooks(options.rootHooks); + } + + /** + * The class which we'll instantiate in {@link Mocha#run}. Defaults to + * {@link Runner} in serial mode; changes in parallel mode. + * @memberof Mocha + * @private + */ + this._runnerClass = exports.Runner; + + /** + * Whether or not to call {@link Mocha#loadFiles} implicitly when calling + * {@link Mocha#run}. If this is `true`, then it's up to the consumer to call + * {@link Mocha#loadFiles} _or_ {@link Mocha#loadFilesAsync}. + * @private + * @memberof Mocha + */ + this._lazyLoadFiles = false; + + /** + * It's useful for a Mocha instance to know if it's running in a worker process. + * We could derive this via other means, but it's helpful to have a flag to refer to. + * @memberof Mocha + * @private + */ + this.isWorker = Boolean(options.isWorker); + + this.globalSetup(options.globalSetup) + .globalTeardown(options.globalTeardown) + .enableGlobalSetup(options.enableGlobalSetup) + .enableGlobalTeardown(options.enableGlobalTeardown); + + if ( + options.parallel && + (typeof options.jobs === 'undefined' || options.jobs > 1) + ) { + debug('attempting to enable parallel mode'); + this.parallelMode(true); + } + } + + /** + * Enables or disables bailing on the first failure. + * + * @public + * @see [CLI option](../#-bail-b) + * @param {boolean} [bail=true] - Whether to bail on first error. + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.bail = function (bail) { + this.suite.bail(bail !== false); + return this; + }; + + /** + * @summary + * Adds `file` to be loaded for execution. + * + * @description + * Useful for generic setup code that must be included within test suite. + * + * @public + * @see [CLI option](../#-file-filedirectoryglob) + * @param {string} file - Pathname of file to be loaded. + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.addFile = function (file) { + this.files.push(file); + return this; + }; + + /** + * Sets reporter to `reporter`, defaults to "spec". + * + * @public + * @see [CLI option](../#-reporter-name-r-name) + * @see [Reporters](../#reporters) + * @param {String|Function} reporterName - Reporter name or constructor. + * @param {Object} [reporterOptions] - Options used to configure the reporter. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested reporter cannot be loaded + * @example + * + * // Use XUnit reporter and direct its output to file + * mocha.reporter('xunit', { output: '/path/to/testspec.xunit.xml' }); + */ + Mocha.prototype.reporter = function (reporterName, reporterOptions) { + if (typeof reporterName === 'function') { + this._reporter = reporterName; + } else { + reporterName = reporterName || 'spec'; + var reporter; + // Try to load a built-in reporter. + if (reporters[reporterName]) { + reporter = reporters[reporterName]; + } + // Try to load reporters from process.cwd() and node_modules + if (!reporter) { + let foundReporter; + try { + foundReporter = require.resolve(reporterName); + reporter = commonjsRequire(foundReporter); + } catch (err) { + if (foundReporter) { + throw createInvalidReporterError(err.message, foundReporter); + } + // Try to load reporters from a cwd-relative path + try { + reporter = commonjsRequire(path.resolve(reporterName)); + } catch (e) { + throw createInvalidReporterError(e.message, reporterName); + } + } + } + this._reporter = reporter; + } + this.options.reporterOption = reporterOptions; + // alias option name is used in built-in reporters xunit/tap/progress + this.options.reporterOptions = reporterOptions; + return this; + }; + + /** + * Sets test UI `name`, defaults to "bdd". + * + * @public + * @see [CLI option](../#-ui-name-u-name) + * @see [Interface DSLs](../#interfaces) + * @param {string|Function} [ui=bdd] - Interface name or class. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested interface cannot be loaded + */ + Mocha.prototype.ui = function (ui) { + var bindInterface; + if (typeof ui === 'function') { + bindInterface = ui; + } else { + ui = ui || 'bdd'; + bindInterface = exports.interfaces[ui]; + if (!bindInterface) { + try { + bindInterface = commonjsRequire(ui); + } catch (err) { + throw createInvalidInterfaceError(`invalid interface '${ui}'`, ui); + } + } + } + bindInterface(this.suite); + + this.suite.on(EVENT_FILE_PRE_REQUIRE, function (context) { + currentContext = context; + }); + + return this; + }; + + /** + * Loads `files` prior to execution. Does not support ES Modules. + * + * @description + * The implementation relies on Node's `require` to execute + * the test interface functions and will be subject to its cache. + * Supports only CommonJS modules. To load ES modules, use Mocha#loadFilesAsync. + * + * @private + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @see {@link Mocha#loadFilesAsync} + * @param {Function} [fn] - Callback invoked upon completion. + */ + Mocha.prototype.loadFiles = function (fn) { + var self = this; + var suite = this.suite; + this.files.forEach(function (file) { + file = path.resolve(file); + suite.emit(EVENT_FILE_PRE_REQUIRE, commonjsGlobal, file, self); + suite.emit(EVENT_FILE_REQUIRE, commonjsRequire(), file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, commonjsGlobal, file, self); + }); + fn && fn(); + }; + + /** + * Loads `files` prior to execution. Supports Node ES Modules. + * + * @description + * The implementation relies on Node's `require` and `import` to execute + * the test interface functions and will be subject to its cache. + * Supports both CJS and ESM modules. + * + * @public + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @returns {Promise} + * @example + * + * // loads ESM (and CJS) test files asynchronously, then runs root suite + * mocha.loadFilesAsync() + * .then(() => mocha.run(failures => process.exitCode = failures ? 1 : 0)) + * .catch(() => process.exitCode = 1); + */ + Mocha.prototype.loadFilesAsync = function () { + var self = this; + var suite = this.suite; + this.lazyLoadFiles(true); + + return require$$10.loadFilesAsync( + this.files, + function (file) { + suite.emit(EVENT_FILE_PRE_REQUIRE, commonjsGlobal, file, self); + }, + function (file, resultModule) { + suite.emit(EVENT_FILE_REQUIRE, resultModule, file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, commonjsGlobal, file, self); + } + ); + }; + + /** + * Removes a previously loaded file from Node's `require` cache. + * + * @private + * @static + * @see {@link Mocha#unloadFiles} + * @param {string} file - Pathname of file to be unloaded. + */ + Mocha.unloadFile = function (file) { + if (utils.isBrowser()) { + throw createUnsupportedError( + 'unloadFile() is only suported in a Node.js environment' + ); + } + return require$$10.unloadFile(file); + }; + + /** + * Unloads `files` from Node's `require` cache. + * + * @description + * This allows required files to be "freshly" reloaded, providing the ability + * to reuse a Mocha instance programmatically. + * Note: does not clear ESM module files from the cache + * + * Intended for consumers — not used internally + * + * @public + * @see {@link Mocha#run} + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.unloadFiles = function () { + if (this._state === mochaStates.DISPOSED) { + throw createMochaInstanceAlreadyDisposedError( + 'Mocha instance is already disposed, it cannot be used again.', + this._cleanReferencesAfterRun, + this + ); + } + + this.files.forEach(function (file) { + Mocha.unloadFile(file); + }); + this._state = mochaStates.INIT; + return this; + }; + + /** + * Sets `grep` filter after escaping RegExp special characters. + * + * @public + * @see {@link Mocha#grep} + * @param {string} str - Value to be converted to a regexp. + * @returns {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title begins with `"foo"` followed by a period + * mocha.fgrep('foo.'); + */ + Mocha.prototype.fgrep = function (str) { + if (!str) { + return this; + } + return this.grep(new RegExp(escapeStringRegexp(str))); + }; + + /** + * @summary + * Sets `grep` filter used to select specific tests for execution. + * + * @description + * If `re` is a regexp-like string, it will be converted to regexp. + * The regexp is tested against the full title of each test (i.e., the + * name of the test preceded by titles of each its ancestral suites). + * As such, using an exact-match fixed pattern against the + * test name itself will not yield any matches. + *
      + * Previous filter value will be overwritten on each call! + * + * @public + * @see [CLI option](../#-grep-regexp-g-regexp) + * @see {@link Mocha#fgrep} + * @see {@link Mocha#invert} + * @param {RegExp|String} re - Regular expression used to select tests. + * @return {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title contains `"match"`, ignoring case + * mocha.grep(/match/i); + * @example + * + * // Same as above but with regexp-like string argument + * mocha.grep('/match/i'); + * @example + * + * // ## Anti-example + * // Given embedded test `it('only-this-test')`... + * mocha.grep('/^only-this-test$/'); // NO! Use `.only()` to do this! + */ + Mocha.prototype.grep = function (re) { + if (utils.isString(re)) { + // extract args if it's regex-like, i.e: [string, pattern, flag] + var arg = re.match(/^\/(.*)\/([gimy]{0,4})$|.*/); + this.options.grep = new RegExp(arg[1] || arg[0], arg[2]); + } else { + this.options.grep = re; + } + return this; + }; + + /** + * Inverts `grep` matches. + * + * @public + * @see {@link Mocha#grep} + * @return {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title does *not* contain `"match"`, ignoring case + * mocha.grep(/match/i).invert(); + */ + Mocha.prototype.invert = function () { + this.options.invert = true; + return this; + }; + + /** + * Enables or disables checking for global variables leaked while running tests. + * + * @public + * @see [CLI option](../#-check-leaks) + * @param {boolean} [checkLeaks=true] - Whether to check for global variable leaks. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.checkLeaks = function (checkLeaks) { + this.options.checkLeaks = checkLeaks !== false; + return this; + }; + + /** + * Enables or disables whether or not to dispose after each test run. + * Disable this to ensure you can run the test suite multiple times. + * If disabled, be sure to dispose mocha when you're done to prevent memory leaks. + * @public + * @see {@link Mocha#dispose} + * @param {boolean} cleanReferencesAfterRun + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.cleanReferencesAfterRun = function (cleanReferencesAfterRun) { + this._cleanReferencesAfterRun = cleanReferencesAfterRun !== false; + return this; + }; + + /** + * Manually dispose this mocha instance. Mark this instance as `disposed` and unable to run more tests. + * It also removes function references to tests functions and hooks, so variables trapped in closures can be cleaned by the garbage collector. + * @public + */ + Mocha.prototype.dispose = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError( + 'Cannot dispose while the mocha instance is still running tests.' + ); + } + this.unloadFiles(); + this._previousRunner && this._previousRunner.dispose(); + this.suite.dispose(); + this._state = mochaStates.DISPOSED; + }; + + /** + * Displays full stack trace upon test failure. + * + * @public + * @see [CLI option](../#-full-trace) + * @param {boolean} [fullTrace=true] - Whether to print full stacktrace upon failure. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.fullTrace = function (fullTrace) { + this.options.fullTrace = fullTrace !== false; + return this; + }; + + /** + * Enables desktop notification support if prerequisite software installed. + * + * @public + * @see [CLI option](../#-growl-g) + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.growl = function () { + this.options.growl = this.isGrowlCapable(); + if (!this.options.growl) { + var detail = utils.isBrowser() + ? 'notification support not available in this browser...' + : 'notification support prerequisites not installed...'; + console.error(detail + ' cannot enable!'); + } + return this; + }; + + /** + * @summary + * Determines if Growl support seems likely. + * + * @description + * Not available when run in browser. + * + * @private + * @see {@link Growl#isCapable} + * @see {@link Mocha#growl} + * @return {boolean} whether Growl support can be expected + */ + Mocha.prototype.isGrowlCapable = growl.isCapable; + + /** + * Implements desktop notifications using a pseudo-reporter. + * + * @private + * @see {@link Mocha#growl} + * @see {@link Growl#notify} + * @param {Runner} runner - Runner instance. + */ + Mocha.prototype._growl = growl.notify; + + /** + * Specifies whitelist of variable names to be expected in global scope. + * + * @public + * @see [CLI option](../#-global-variable-name) + * @see {@link Mocha#checkLeaks} + * @param {String[]|String} global - Accepted global variable name(s). + * @return {Mocha} this + * @chainable + * @example + * + * // Specify variables to be expected in global scope + * mocha.global(['jQuery', 'MyLib']); + */ + Mocha.prototype.global = function (global) { + this.options.global = (this.options.global || []) + .concat(global) + .filter(Boolean) + .filter(function (elt, idx, arr) { + return arr.indexOf(elt) === idx; + }); + return this; + }; + // for backwards compability, 'globals' is an alias of 'global' + Mocha.prototype.globals = Mocha.prototype.global; + + /** + * Enables or disables TTY color output by screen-oriented reporters. + * + * @public + * @see [CLI option](../#-color-c-colors) + * @param {boolean} [color=true] - Whether to enable color output. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.color = function (color) { + this.options.color = color !== false; + return this; + }; + + /** + * Enables or disables reporter to use inline diffs (rather than +/-) + * in test failure output. + * + * @public + * @see [CLI option](../#-inline-diffs) + * @param {boolean} [inlineDiffs=true] - Whether to use inline diffs. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.inlineDiffs = function (inlineDiffs) { + this.options.inlineDiffs = inlineDiffs !== false; + return this; + }; + + /** + * Enables or disables reporter to include diff in test failure output. + * + * @public + * @see [CLI option](../#-diff) + * @param {boolean} [diff=true] - Whether to show diff on failure. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.diff = function (diff) { + this.options.diff = diff !== false; + return this; + }; + + /** + * @summary + * Sets timeout threshold value. + * + * @description + * A string argument can use shorthand (such as "2s") and will be converted. + * If the value is `0`, timeouts will be disabled. + * + * @public + * @see [CLI option](../#-timeout-ms-t-ms) + * @see [Timeouts](../#timeouts) + * @param {number|string} msecs - Timeout threshold value. + * @return {Mocha} this + * @chainable + * @example + * + * // Sets timeout to one second + * mocha.timeout(1000); + * @example + * + * // Same as above but using string argument + * mocha.timeout('1s'); + */ + Mocha.prototype.timeout = function (msecs) { + this.suite.timeout(msecs); + return this; + }; + + /** + * Sets the number of times to retry failed tests. + * + * @public + * @see [CLI option](../#-retries-n) + * @see [Retry Tests](../#retry-tests) + * @param {number} retry - Number of times to retry failed tests. + * @return {Mocha} this + * @chainable + * @example + * + * // Allow any failed test to retry one more time + * mocha.retries(1); + */ + Mocha.prototype.retries = function (retry) { + this.suite.retries(retry); + return this; + }; + + /** + * Sets slowness threshold value. + * + * @public + * @see [CLI option](../#-slow-ms-s-ms) + * @param {number} msecs - Slowness threshold value. + * @return {Mocha} this + * @chainable + * @example + * + * // Sets "slow" threshold to half a second + * mocha.slow(500); + * @example + * + * // Same as above but using string argument + * mocha.slow('0.5s'); + */ + Mocha.prototype.slow = function (msecs) { + this.suite.slow(msecs); + return this; + }; + + /** + * Forces all tests to either accept a `done` callback or return a promise. + * + * @public + * @see [CLI option](../#-async-only-a) + * @param {boolean} [asyncOnly=true] - Whether to force `done` callback or promise. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.asyncOnly = function (asyncOnly) { + this.options.asyncOnly = asyncOnly !== false; + return this; + }; + + /** + * Disables syntax highlighting (in browser). + * + * @public + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.noHighlighting = function () { + this.options.noHighlighting = true; + return this; + }; + + /** + * Enables or disables uncaught errors to propagate. + * + * @public + * @see [CLI option](../#-allow-uncaught) + * @param {boolean} [allowUncaught=true] - Whether to propagate uncaught errors. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.allowUncaught = function (allowUncaught) { + this.options.allowUncaught = allowUncaught !== false; + return this; + }; + + /** + * @summary + * Delays root suite execution. + * + * @description + * Used to perform async operations before any suites are run. + * + * @public + * @see [delayed root suite](../#delayed-root-suite) + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.delay = function delay() { + this.options.delay = true; + return this; + }; + + /** + * Enables or disables running tests in dry-run mode. + * + * @public + * @see [CLI option](../#-dry-run) + * @param {boolean} [dryRun=true] - Whether to activate dry-run mode. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.dryRun = function (dryRun) { + this.options.dryRun = dryRun !== false; + return this; + }; + + /** + * Fails test run if no tests encountered with exit-code 1. + * + * @public + * @see [CLI option](../#-fail-zero) + * @param {boolean} [failZero=true] - Whether to fail test run. + * @return {Mocha} this + * @chainable + */ + Mocha.prototype.failZero = function (failZero) { + this.options.failZero = failZero !== false; + return this; + }; + + /** + * Causes tests marked `only` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-only) + * @param {boolean} [forbidOnly=true] - Whether tests marked `only` fail the suite. + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.forbidOnly = function (forbidOnly) { + this.options.forbidOnly = forbidOnly !== false; + return this; + }; + + /** + * Causes pending tests and tests marked `skip` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-pending) + * @param {boolean} [forbidPending=true] - Whether pending tests fail the suite. + * @returns {Mocha} this + * @chainable + */ + Mocha.prototype.forbidPending = function (forbidPending) { + this.options.forbidPending = forbidPending !== false; + return this; + }; + + /** + * Throws an error if mocha is in the wrong state to be able to transition to a "running" state. + * @private + */ + Mocha.prototype._guardRunningStateTransition = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError( + 'Mocha instance is currently running tests, cannot start a next test run until this one is done', + this + ); + } + if ( + this._state === mochaStates.DISPOSED || + this._state === mochaStates.REFERENCES_CLEANED + ) { + throw createMochaInstanceAlreadyDisposedError( + 'Mocha instance is already disposed, cannot start a new test run. Please create a new mocha instance. Be sure to set disable `cleanReferencesAfterRun` when you want to reuse the same mocha instance for multiple test runs.', + this._cleanReferencesAfterRun, + this + ); + } + }; + + /** + * Mocha version as specified by "package.json". + * + * @name Mocha#version + * @type string + * @readonly + */ + Object.defineProperty(Mocha.prototype, 'version', { + value: require$$9.version, + configurable: false, + enumerable: true, + writable: false + }); + + /** + * Callback to be invoked when test execution is complete. + * + * @private + * @callback DoneCB + * @param {number} failures - Number of failures that occurred. + */ + + /** + * Runs root suite and invokes `fn()` when complete. + * + * @description + * To run tests multiple times (or to run tests in files that are + * already in the `require` cache), make sure to clear them from + * the cache first! + * + * @public + * @see {@link Mocha#unloadFiles} + * @see {@link Runner#run} + * @param {DoneCB} [fn] - Callback invoked when test execution completed. + * @returns {Runner} runner instance + * @example + * + * // exit with non-zero status if there were test failures + * mocha.run(failures => process.exitCode = failures ? 1 : 0); + */ + Mocha.prototype.run = function (fn) { + this._guardRunningStateTransition(); + this._state = mochaStates.RUNNING; + if (this._previousRunner) { + this._previousRunner.dispose(); + this.suite.reset(); + } + if (this.files.length && !this._lazyLoadFiles) { + this.loadFiles(); + } + var suite = this.suite; + var options = this.options; + options.files = this.files; + const runner = new this._runnerClass(suite, { + cleanReferencesAfterRun: this._cleanReferencesAfterRun, + delay: options.delay, + dryRun: options.dryRun, + failZero: options.failZero + }); + statsCollector(runner); + var reporter = new this._reporter(runner, options); + runner.checkLeaks = options.checkLeaks === true; + runner.fullStackTrace = options.fullTrace; + runner.asyncOnly = options.asyncOnly; + runner.allowUncaught = options.allowUncaught; + runner.forbidOnly = options.forbidOnly; + runner.forbidPending = options.forbidPending; + if (options.grep) { + runner.grep(options.grep, options.invert); + } + if (options.global) { + runner.globals(options.global); + } + if (options.growl) { + this._growl(runner); + } + if (options.color !== undefined) { + exports.reporters.Base.useColors = options.color; + } + exports.reporters.Base.inlineDiffs = options.inlineDiffs; + exports.reporters.Base.hideDiff = !options.diff; + + const done = failures => { + this._previousRunner = runner; + this._state = this._cleanReferencesAfterRun + ? mochaStates.REFERENCES_CLEANED + : mochaStates.INIT; + fn = fn || utils.noop; + if (typeof reporter.done === 'function') { + reporter.done(failures, fn); + } else { + fn(failures); + } + }; + + const runAsync = async runner => { + const context = + this.options.enableGlobalSetup && this.hasGlobalSetupFixtures() + ? await this.runGlobalSetup(runner) + : {}; + const failureCount = await runner.runAsync({ + files: this.files, + options + }); + if (this.options.enableGlobalTeardown && this.hasGlobalTeardownFixtures()) { + await this.runGlobalTeardown(runner, {context}); + } + return failureCount; + }; + + // no "catch" here is intentional. errors coming out of + // Runner#run are considered uncaught/unhandled and caught + // by the `process` event listeners. + // also: returning anything other than `runner` would be a breaking + // change + runAsync(runner).then(done); + + return runner; + }; + + /** + * Assigns hooks to the root suite + * @param {MochaRootHookObject} [hooks] - Hooks to assign to root suite + * @chainable + */ + Mocha.prototype.rootHooks = function rootHooks({ + beforeAll = [], + beforeEach = [], + afterAll = [], + afterEach = [] + } = {}) { + beforeAll = utils.castArray(beforeAll); + beforeEach = utils.castArray(beforeEach); + afterAll = utils.castArray(afterAll); + afterEach = utils.castArray(afterEach); + beforeAll.forEach(hook => { + this.suite.beforeAll(hook); + }); + beforeEach.forEach(hook => { + this.suite.beforeEach(hook); + }); + afterAll.forEach(hook => { + this.suite.afterAll(hook); + }); + afterEach.forEach(hook => { + this.suite.afterEach(hook); + }); + return this; + }; + + /** + * Toggles parallel mode. + * + * Must be run before calling {@link Mocha#run}. Changes the `Runner` class to + * use; also enables lazy file loading if not already done so. + * + * Warning: when passed `false` and lazy loading has been enabled _via any means_ (including calling `parallelMode(true)`), this method will _not_ disable lazy loading. Lazy loading is a prerequisite for parallel + * mode, but parallel mode is _not_ a prerequisite for lazy loading! + * @param {boolean} [enable] - If `true`, enable; otherwise disable. + * @throws If run in browser + * @throws If Mocha not in `INIT` state + * @returns {Mocha} + * @chainable + * @public + */ + Mocha.prototype.parallelMode = function parallelMode(enable = true) { + if (utils.isBrowser()) { + throw createUnsupportedError('parallel mode is only supported in Node.js'); + } + const parallel = Boolean(enable); + if ( + parallel === this.options.parallel && + this._lazyLoadFiles && + this._runnerClass !== exports.Runner + ) { + return this; + } + if (this._state !== mochaStates.INIT) { + throw createUnsupportedError( + 'cannot change parallel mode after having called run()' + ); + } + this.options.parallel = parallel; + + // swap Runner class + this._runnerClass = parallel + ? require$$10 + : exports.Runner; + + // lazyLoadFiles may have been set `true` otherwise (for ESM loading), + // so keep `true` if so. + return this.lazyLoadFiles(this._lazyLoadFiles || parallel); + }; + + /** + * Disables implicit call to {@link Mocha#loadFiles} in {@link Mocha#run}. This + * setting is used by watch mode, parallel mode, and for loading ESM files. + * @todo This should throw if we've already loaded files; such behavior + * necessitates adding a new state. + * @param {boolean} [enable] - If `true`, disable eager loading of files in + * {@link Mocha#run} + * @chainable + * @public + */ + Mocha.prototype.lazyLoadFiles = function lazyLoadFiles(enable) { + this._lazyLoadFiles = enable === true; + debug('set lazy load to %s', enable); + return this; + }; + + /** + * Configures one or more global setup fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [setupFns] - Global setup fixture(s) + * @returns {Mocha} + */ + Mocha.prototype.globalSetup = function globalSetup(setupFns = []) { + setupFns = utils.castArray(setupFns); + this.options.globalSetup = setupFns; + debug('configured %d global setup functions', setupFns.length); + return this; + }; + + /** + * Configures one or more global teardown fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [teardownFns] - Global teardown fixture(s) + * @returns {Mocha} + */ + Mocha.prototype.globalTeardown = function globalTeardown(teardownFns = []) { + teardownFns = utils.castArray(teardownFns); + this.options.globalTeardown = teardownFns; + debug('configured %d global teardown functions', teardownFns.length); + return this; + }; + + /** + * Run any global setup fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalSetup` option is `false`; see {@link Mocha#enableGlobalSetup}. + * + * The context object this function resolves with should be consumed by {@link Mocha#runGlobalTeardown}. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ + Mocha.prototype.runGlobalSetup = async function runGlobalSetup(context = {}) { + const {globalSetup} = this.options; + if (globalSetup && globalSetup.length) { + debug('run(): global setup starting'); + await this._runGlobalFixtures(globalSetup, context); + debug('run(): global setup complete'); + } + return context; + }; + + /** + * Run any global teardown fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalTeardown` option is `false`; see {@link Mocha#enableGlobalTeardown}. + * + * Should be called with context object returned by {@link Mocha#runGlobalSetup}, if applicable. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ + Mocha.prototype.runGlobalTeardown = async function runGlobalTeardown( + context = {} + ) { + const {globalTeardown} = this.options; + if (globalTeardown && globalTeardown.length) { + debug('run(): global teardown starting'); + await this._runGlobalFixtures(globalTeardown, context); + } + debug('run(): global teardown complete'); + return context; + }; + + /** + * Run global fixtures sequentially with context `context` + * @private + * @param {MochaGlobalFixture[]} [fixtureFns] - Fixtures to run + * @param {object} [context] - context object + * @returns {Promise} context object + */ + Mocha.prototype._runGlobalFixtures = async function _runGlobalFixtures( + fixtureFns = [], + context = {} + ) { + for await (const fixtureFn of fixtureFns) { + await fixtureFn.call(context); + } + return context; + }; + + /** + * Toggle execution of any global setup fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global setup fixture + * @returns {Mocha} + */ + Mocha.prototype.enableGlobalSetup = function enableGlobalSetup(enabled = true) { + this.options.enableGlobalSetup = Boolean(enabled); + return this; + }; + + /** + * Toggle execution of any global teardown fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global teardown fixture + * @returns {Mocha} + */ + Mocha.prototype.enableGlobalTeardown = function enableGlobalTeardown( + enabled = true + ) { + this.options.enableGlobalTeardown = Boolean(enabled); + return this; + }; + + /** + * Returns `true` if one or more global setup fixtures have been supplied. + * @public + * @returns {boolean} + */ + Mocha.prototype.hasGlobalSetupFixtures = function hasGlobalSetupFixtures() { + return Boolean(this.options.globalSetup.length); + }; + + /** + * Returns `true` if one or more global teardown fixtures have been supplied. + * @public + * @returns {boolean} + */ + Mocha.prototype.hasGlobalTeardownFixtures = + function hasGlobalTeardownFixtures() { + return Boolean(this.options.globalTeardown.length); + }; + + /** + * An alternative way to define root hooks that works with parallel runs. + * @typedef {Object} MochaRootHookObject + * @property {Function|Function[]} [beforeAll] - "Before all" hook(s) + * @property {Function|Function[]} [beforeEach] - "Before each" hook(s) + * @property {Function|Function[]} [afterAll] - "After all" hook(s) + * @property {Function|Function[]} [afterEach] - "After each" hook(s) + */ + + /** + * An function that returns a {@link MochaRootHookObject}, either sync or async. + @callback MochaRootHookFunction + * @returns {MochaRootHookObject|Promise} + */ + + /** + * A function that's invoked _once_ which is either sync or async. + * Can be a "teardown" or "setup". These will all share the same context. + * @callback MochaGlobalFixture + * @returns {void|Promise} + */ + + /** + * An object making up all necessary parts of a plugin loader and aggregator + * @typedef {Object} PluginDefinition + * @property {string} exportName - Named export to use + * @property {string} [optionName] - Option name for Mocha constructor (use `exportName` if omitted) + * @property {PluginValidator} [validate] - Validator function + * @property {PluginFinalizer} [finalize] - Finalizer/aggregator function + */ + + /** + * A (sync) function to assert a user-supplied plugin implementation is valid. + * + * Defined in a {@link PluginDefinition}. + + * @callback PluginValidator + * @param {*} value - Value to check + * @this {PluginDefinition} + * @returns {void} + */ + + /** + * A function to finalize plugins impls of a particular ilk + * @callback PluginFinalizer + * @param {Array<*>} impls - User-supplied implementations + * @returns {Promise<*>|*} + */ + }); + + /* eslint no-unused-vars: off */ + /* eslint-env commonjs */ + + /** + * Shim process.stdout. + */ + + process$1.stdout = browserStdout({label: false}); + + + + + + /** + * Create a Mocha instance. + * + * @return {undefined} + */ + + var mocha = new mocha$1({reporter: 'html'}); + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + var Date$1 = commonjsGlobal.Date; + var setTimeout$1 = commonjsGlobal.setTimeout; + commonjsGlobal.setInterval; + commonjsGlobal.clearTimeout; + commonjsGlobal.clearInterval; + + var uncaughtExceptionHandlers = []; + + var originalOnerrorHandler = commonjsGlobal.onerror; + + /** + * Remove uncaughtException listener. + * Revert to original onerror handler if previously defined. + */ + + process$1.removeListener = function (e, fn) { + if (e === 'uncaughtException') { + if (originalOnerrorHandler) { + commonjsGlobal.onerror = originalOnerrorHandler; + } else { + commonjsGlobal.onerror = function () {}; + } + var i = uncaughtExceptionHandlers.indexOf(fn); + if (i !== -1) { + uncaughtExceptionHandlers.splice(i, 1); + } + } + }; + + /** + * Implements listenerCount for 'uncaughtException'. + */ + + process$1.listenerCount = function (name) { + if (name === 'uncaughtException') { + return uncaughtExceptionHandlers.length; + } + return 0; + }; + + /** + * Implements uncaughtException listener. + */ + + process$1.on = function (e, fn) { + if (e === 'uncaughtException') { + commonjsGlobal.onerror = function (err, url, line) { + fn(new Error(err + ' (' + url + ':' + line + ')')); + return !mocha.options.allowUncaught; + }; + uncaughtExceptionHandlers.push(fn); + } + }; + + process$1.listeners = function (e) { + if (e === 'uncaughtException') { + return uncaughtExceptionHandlers; + } + return []; + }; + + // The BDD UI is registered by default, but no UI will be functional in the + // browser without an explicit call to the overridden `mocha.ui` (see below). + // Ensure that this default UI does not expose its methods to the global scope. + mocha.suite.removeAllListeners('pre-require'); + + var immediateQueue = []; + var immediateTimeout; + + function timeslice() { + var immediateStart = new Date$1().getTime(); + while (immediateQueue.length && new Date$1().getTime() - immediateStart < 100) { + immediateQueue.shift()(); + } + if (immediateQueue.length) { + immediateTimeout = setTimeout$1(timeslice, 0); + } else { + immediateTimeout = null; + } + } + + /** + * High-performance override of Runner.immediately. + */ + + mocha$1.Runner.immediately = function (callback) { + immediateQueue.push(callback); + if (!immediateTimeout) { + immediateTimeout = setTimeout$1(timeslice, 0); + } + }; + + /** + * Function to allow assertion libraries to throw errors directly into mocha. + * This is useful when running tests in a browser because window.onerror will + * only receive the 'message' attribute of the Error. + */ + mocha.throwError = function (err) { + uncaughtExceptionHandlers.forEach(function (fn) { + fn(err); + }); + throw err; + }; + + /** + * Override ui to ensure that the ui functions are initialized. + * Normally this would happen in Mocha.prototype.loadFiles. + */ + + mocha.ui = function (ui) { + mocha$1.prototype.ui.call(this, ui); + this.suite.emit('pre-require', commonjsGlobal, null, this); + return this; + }; + + /** + * Setup mocha with the given setting options. + */ + + mocha.setup = function (opts) { + if (typeof opts === 'string') { + opts = {ui: opts}; + } + if (opts.delay === true) { + this.delay(); + } + var self = this; + Object.keys(opts) + .filter(function (opt) { + return opt !== 'delay'; + }) + .forEach(function (opt) { + if (Object.prototype.hasOwnProperty.call(opts, opt)) { + self[opt](opts[opt]); + } + }); + return this; + }; + + /** + * Run mocha, returning the Runner. + */ + + mocha.run = function (fn) { + var options = mocha.options; + mocha.globals('location'); + + var query = parseQuery(commonjsGlobal.location.search || ''); + if (query.grep) { + mocha.grep(query.grep); + } + if (query.fgrep) { + mocha.fgrep(query.fgrep); + } + if (query.invert) { + mocha.invert(); + } + + return mocha$1.prototype.run.call(mocha, function (err) { + // The DOM Document is not available in Web Workers. + var document = commonjsGlobal.document; + if ( + document && + document.getElementById('mocha') && + options.noHighlighting !== true + ) { + highlightTags('code'); + } + if (fn) { + fn(err); + } + }); + }; + + /** + * Expose the process shim. + * https://github.com/mochajs/mocha/pull/916 + */ + + mocha$1.process = process$1; + + /** + * Expose mocha. + */ + commonjsGlobal.Mocha = mocha$1; + commonjsGlobal.mocha = mocha; + + // for bundlers: enable `import {describe, it} from 'mocha'` + // `bdd` interface only + // prettier-ignore + [ + 'describe', 'context', 'it', 'specify', + 'xdescribe', 'xcontext', 'xit', 'xspecify', + 'before', 'beforeEach', 'afterEach', 'after' + ].forEach(function(key) { + mocha[key] = commonjsGlobal[key]; + }); + + var browserEntry = mocha; + + return browserEntry; + +})); diff --git a/build/node_modules/mocha/mocha.css b/build/node_modules/mocha/mocha.css index 3b82ae91..4ca8fcb8 100644 --- a/build/node_modules/mocha/mocha.css +++ b/build/node_modules/mocha/mocha.css @@ -139,7 +139,6 @@ body { #mocha .test .html-error { overflow: auto; color: black; - line-height: 1.5; display: block; float: left; clear: left; @@ -148,23 +147,28 @@ body { padding: 15px; border: 1px solid #eee; max-width: 85%; /*(1)*/ + max-width: -webkit-calc(100% - 42px); + max-width: -moz-calc(100% - 42px); max-width: calc(100% - 42px); /*(2)*/ max-height: 300px; word-wrap: break-word; border-bottom-color: #ddd; - -webkit-border-radius: 3px; -webkit-box-shadow: 0 1px 3px #eee; - -moz-border-radius: 3px; -moz-box-shadow: 0 1px 3px #eee; + box-shadow: 0 1px 3px #eee; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; border-radius: 3px; } #mocha .test .html-error pre.error { border: none; - -webkit-border-radius: none; - -webkit-box-shadow: none; - -moz-border-radius: none; - -moz-box-shadow: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: 0; + -moz-box-shadow: 0; + box-shadow: 0; padding: 0; margin: 0; margin-top: 18px; @@ -185,13 +189,16 @@ body { padding: 15px; border: 1px solid #eee; max-width: 85%; /*(1)*/ + max-width: -webkit-calc(100% - 42px); + max-width: -moz-calc(100% - 42px); max-width: calc(100% - 42px); /*(2)*/ word-wrap: break-word; border-bottom-color: #ddd; - -webkit-border-radius: 3px; -webkit-box-shadow: 0 1px 3px #eee; - -moz-border-radius: 3px; -moz-box-shadow: 0 1px 3px #eee; + box-shadow: 0 1px 3px #eee; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; border-radius: 3px; } @@ -212,10 +219,12 @@ body { text-align: center; background: #eee; font-size: 15px; + -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; + -webkit-transition:opacity 200ms; + -moz-transition:opacity 200ms; + -o-transition:opacity 200ms; transition: opacity 200ms; opacity: 0.3; color: #888; @@ -261,6 +270,17 @@ body { #mocha-stats .progress { float: right; padding-top: 0; + + /** + * Set safe initial values, so mochas .progress does not inherit these + * properties from Bootstrap .progress (which causes .progress height to + * equal line height set in Bootstrap). + */ + height: auto; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + background-color: initial; } #mocha-stats em { diff --git a/build/node_modules/mocha/mocha.js b/build/node_modules/mocha/mocha.js index 84c384bd..c9bba611 100644 --- a/build/node_modules/mocha/mocha.js +++ b/build/node_modules/mocha/mocha.js @@ -1,12417 +1,31253 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1) { - suites.shift(); - } - var suite = Suite.create(suites[0], title); - suite.file = file; - suites.unshift(suite); - return suite; - }; - - /** - * Exclusive test-case. - */ - - context.suite.only = function(title, fn) { - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case - * with the given `title` and callback `fn` - * acting as a thunk. - */ - - context.test = function(title, fn) { - var test = new Test(title, fn); - test.file = file; - suites[0].addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn) { - var test = context.test(title, fn); - var reString = '^' + escapeRe(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - context.test.skip = common.test.skip; - }); -}; - -},{"../suite":37,"../test":38,"./common":9,"escape-string-regexp":68}],13:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var Suite = require('../suite'); -var Test = require('../test'); -var escapeRe = require('escape-string-regexp'); - -/** - * TDD-style interface: - * - * suite('Array', function() { - * suite('#indexOf()', function() { - * suiteSetup(function() { - * - * }); - * - * test('should return -1 when not present', function() { - * - * }); - * - * test('should return the index when present', function() { - * - * }); - * - * suiteTeardown(function() { - * - * }); - * }); - * }); - * - * @param {Suite} suite Root suite. - */ -module.exports = function(suite) { - var suites = [suite]; - - suite.on('pre-require', function(context, file, mocha) { - var common = require('./common')(suites, context); - - context.setup = common.beforeEach; - context.teardown = common.afterEach; - context.suiteSetup = common.before; - context.suiteTeardown = common.after; - context.run = mocha.options.delay && common.runWithSuite(suite); - - /** - * Describe a "suite" with the given `title` and callback `fn` containing - * nested suites and/or tests. - */ - context.suite = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.file = file; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - return suite; - }; - - /** - * Pending suite. - */ - context.suite.skip = function(title, fn) { - var suite = Suite.create(suites[0], title); - suite.pending = true; - suites.unshift(suite); - fn.call(suite); - suites.shift(); - }; - - /** - * Exclusive test-case. - */ - context.suite.only = function(title, fn) { - var suite = context.suite(title, fn); - mocha.grep(suite.fullTitle()); - }; - - /** - * Describe a specification or test-case with the given `title` and - * callback `fn` acting as a thunk. - */ - context.test = function(title, fn) { - var suite = suites[0]; - if (suite.pending) { - fn = null; - } - var test = new Test(title, fn); - test.file = file; - suite.addTest(test); - return test; - }; - - /** - * Exclusive test-case. - */ - - context.test.only = function(title, fn) { - var test = context.test(title, fn); - var reString = '^' + escapeRe(test.fullTitle()) + '$'; - mocha.grep(new RegExp(reString)); - }; - - context.test.skip = common.test.skip; - }); -}; - -},{"../suite":37,"../test":38,"./common":9,"escape-string-regexp":68}],14:[function(require,module,exports){ -(function (process,global,__dirname){ -/*! - * mocha - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var escapeRe = require('escape-string-regexp'); -var path = require('path'); -var reporters = require('./reporters'); -var utils = require('./utils'); - -/** - * Expose `Mocha`. - */ - -exports = module.exports = Mocha; - -/** - * To require local UIs and reporters when running in node. - */ - -if (!process.browser) { - var cwd = process.cwd(); - module.paths.push(cwd, path.join(cwd, 'node_modules')); -} - -/** - * Expose internals. - */ - -exports.utils = utils; -exports.interfaces = require('./interfaces'); -exports.reporters = reporters; -exports.Runnable = require('./runnable'); -exports.Context = require('./context'); -exports.Runner = require('./runner'); -exports.Suite = require('./suite'); -exports.Hook = require('./hook'); -exports.Test = require('./test'); - -/** - * Return image `name` path. - * - * @api private - * @param {string} name - * @return {string} - */ -function image(name) { - return path.join(__dirname, '../images', name + '.png'); -} - -/** - * Set up mocha with `options`. - * - * Options: - * - * - `ui` name "bdd", "tdd", "exports" etc - * - `reporter` reporter instance, defaults to `mocha.reporters.spec` - * - `globals` array of accepted globals - * - `timeout` timeout in milliseconds - * - `bail` bail on the first test failure - * - `slow` milliseconds to wait before considering a test slow - * - `ignoreLeaks` ignore global leaks - * - `fullTrace` display the full stack-trace on failing - * - `grep` string or regexp to filter tests with - * - * @param {Object} options - * @api public - */ -function Mocha(options) { - options = options || {}; - this.files = []; - this.options = options; - if (options.grep) { - this.grep(new RegExp(options.grep)); - } - if (options.fgrep) { - this.grep(options.fgrep); - } - this.suite = new exports.Suite('', new exports.Context()); - this.ui(options.ui); - this.bail(options.bail); - this.reporter(options.reporter, options.reporterOptions); - if (typeof options.timeout !== 'undefined' && options.timeout !== null) { - this.timeout(options.timeout); - } - this.useColors(options.useColors); - if (options.enableTimeouts !== null) { - this.enableTimeouts(options.enableTimeouts); - } - if (options.slow) { - this.slow(options.slow); - } - - this.suite.on('pre-require', function(context) { - exports.afterEach = context.afterEach || context.teardown; - exports.after = context.after || context.suiteTeardown; - exports.beforeEach = context.beforeEach || context.setup; - exports.before = context.before || context.suiteSetup; - exports.describe = context.describe || context.suite; - exports.it = context.it || context.test; - exports.setup = context.setup || context.beforeEach; - exports.suiteSetup = context.suiteSetup || context.before; - exports.suiteTeardown = context.suiteTeardown || context.after; - exports.suite = context.suite || context.describe; - exports.teardown = context.teardown || context.afterEach; - exports.test = context.test || context.it; - exports.run = context.run; - }); -} - -/** - * Enable or disable bailing on the first failure. - * - * @api public - * @param {boolean} [bail] - */ -Mocha.prototype.bail = function(bail) { - if (!arguments.length) { - bail = true; - } - this.suite.bail(bail); - return this; -}; - -/** - * Add test `file`. - * - * @api public - * @param {string} file - */ -Mocha.prototype.addFile = function(file) { - this.files.push(file); - return this; -}; - -/** - * Set reporter to `reporter`, defaults to "spec". - * - * @param {String|Function} reporter name or constructor - * @param {Object} reporterOptions optional options - * @api public - * @param {string|Function} reporter name or constructor - * @param {Object} reporterOptions optional options - */ -Mocha.prototype.reporter = function(reporter, reporterOptions) { - if (typeof reporter === 'function') { - this._reporter = reporter; - } else { - reporter = reporter || 'spec'; - var _reporter; - // Try to load a built-in reporter. - if (reporters[reporter]) { - _reporter = reporters[reporter]; - } - // Try to load reporters from process.cwd() and node_modules - if (!_reporter) { - try { - _reporter = require(reporter); - } catch (err) { - err.message.indexOf('Cannot find module') !== -1 - ? console.warn('"' + reporter + '" reporter not found') - : console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack); - } - } - if (!_reporter && reporter === 'teamcity') { - console.warn('The Teamcity reporter was moved to a package named ' - + 'mocha-teamcity-reporter ' - + '(https://npmjs.org/package/mocha-teamcity-reporter).'); - } - if (!_reporter) { - throw new Error('invalid reporter "' + reporter + '"'); - } - this._reporter = _reporter; - } - this.options.reporterOptions = reporterOptions; - return this; -}; - -/** - * Set test UI `name`, defaults to "bdd". - * - * @api public - * @param {string} bdd - */ -Mocha.prototype.ui = function(name) { - name = name || 'bdd'; - this._ui = exports.interfaces[name]; - if (!this._ui) { - try { - this._ui = require(name); - } catch (err) { - throw new Error('invalid interface "' + name + '"'); - } - } - this._ui = this._ui(this.suite); - return this; -}; - -/** - * Load registered files. - * - * @api private - */ -Mocha.prototype.loadFiles = function(fn) { - var self = this; - var suite = this.suite; - var pending = this.files.length; - this.files.forEach(function(file) { - file = path.resolve(file); - suite.emit('pre-require', global, file, self); - suite.emit('require', require(file), file, self); - suite.emit('post-require', global, file, self); - --pending || (fn && fn()); - }); -}; - -/** - * Enable growl support. - * - * @api private - */ -Mocha.prototype._growl = function(runner, reporter) { - var notify = require('growl'); - - runner.on('end', function() { - var stats = reporter.stats; - if (stats.failures) { - var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); - } else { - notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { - name: 'mocha', - title: 'Passed', - image: image('ok') - }); - } - }); -}; - -/** - * Add regexp to grep, if `re` is a string it is escaped. - * - * @param {RegExp|String} re - * @return {Mocha} - * @api public - * @param {RegExp|string} re - * @return {Mocha} - */ -Mocha.prototype.grep = function(re) { - this.options.grep = typeof re === 'string' ? new RegExp(escapeRe(re)) : re; - return this; -}; - -/** - * Invert `.grep()` matches. - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.invert = function() { - this.options.invert = true; - return this; -}; - -/** - * Ignore global leaks. - * - * @param {Boolean} ignore - * @return {Mocha} - * @api public - * @param {boolean} ignore - * @return {Mocha} - */ -Mocha.prototype.ignoreLeaks = function(ignore) { - this.options.ignoreLeaks = Boolean(ignore); - return this; -}; - -/** - * Enable global leak checking. - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.checkLeaks = function() { - this.options.ignoreLeaks = false; - return this; -}; - -/** - * Display long stack-trace on failing - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.fullTrace = function() { - this.options.fullStackTrace = true; - return this; -}; - -/** - * Enable growl support. - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.growl = function() { - this.options.growl = true; - return this; -}; - -/** - * Ignore `globals` array or string. - * - * @param {Array|String} globals - * @return {Mocha} - * @api public - * @param {Array|string} globals - * @return {Mocha} - */ -Mocha.prototype.globals = function(globals) { - this.options.globals = (this.options.globals || []).concat(globals); - return this; -}; - -/** - * Emit color output. - * - * @param {Boolean} colors - * @return {Mocha} - * @api public - * @param {boolean} colors - * @return {Mocha} - */ -Mocha.prototype.useColors = function(colors) { - if (colors !== undefined) { - this.options.useColors = colors; - } - return this; -}; - -/** - * Use inline diffs rather than +/-. - * - * @param {Boolean} inlineDiffs - * @return {Mocha} - * @api public - * @param {boolean} inlineDiffs - * @return {Mocha} - */ -Mocha.prototype.useInlineDiffs = function(inlineDiffs) { - this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs; - return this; -}; - -/** - * Set the timeout in milliseconds. - * - * @param {Number} timeout - * @return {Mocha} - * @api public - * @param {number} timeout - * @return {Mocha} - */ -Mocha.prototype.timeout = function(timeout) { - this.suite.timeout(timeout); - return this; -}; - -/** - * Set slowness threshold in milliseconds. - * - * @param {Number} slow - * @return {Mocha} - * @api public - * @param {number} slow - * @return {Mocha} - */ -Mocha.prototype.slow = function(slow) { - this.suite.slow(slow); - return this; -}; - -/** - * Enable timeouts. - * - * @param {Boolean} enabled - * @return {Mocha} - * @api public - * @param {boolean} enabled - * @return {Mocha} - */ -Mocha.prototype.enableTimeouts = function(enabled) { - this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true); - return this; -}; - -/** - * Makes all tests async (accepting a callback) - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.asyncOnly = function() { - this.options.asyncOnly = true; - return this; -}; - -/** - * Disable syntax highlighting (in browser). - * - * @api public - */ -Mocha.prototype.noHighlighting = function() { - this.options.noHighlighting = true; - return this; -}; - -/** - * Enable uncaught errors to propagate (in browser). - * - * @return {Mocha} - * @api public - */ -Mocha.prototype.allowUncaught = function() { - this.options.allowUncaught = true; - return this; -}; - -/** - * Delay root suite execution. - * @returns {Mocha} - */ -Mocha.prototype.delay = function delay() { - this.options.delay = true; - return this; -}; - -/** - * Run tests and invoke `fn()` when complete. - * - * @api public - * @param {Function} fn - * @return {Runner} - */ -Mocha.prototype.run = function(fn) { - if (this.files.length) { - this.loadFiles(); - } - var suite = this.suite; - var options = this.options; - options.files = this.files; - var runner = new exports.Runner(suite, options.delay); - var reporter = new this._reporter(runner, options); - runner.ignoreLeaks = options.ignoreLeaks !== false; - runner.fullStackTrace = options.fullStackTrace; - runner.asyncOnly = options.asyncOnly; - runner.allowUncaught = options.allowUncaught; - if (options.grep) { - runner.grep(options.grep, options.invert); - } - if (options.globals) { - runner.globals(options.globals); - } - if (options.growl) { - this._growl(runner, reporter); - } - if (options.useColors !== undefined) { - exports.reporters.Base.useColors = options.useColors; - } - exports.reporters.Base.inlineDiffs = options.useInlineDiffs; - - function done(failures) { - if (reporter.done) { - reporter.done(failures, fn); - } else { - fn && fn(failures); - } - } - - return runner.run(done); -}; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},"/lib") -},{"./context":6,"./hook":7,"./interfaces":11,"./reporters":22,"./runnable":35,"./runner":36,"./suite":37,"./test":38,"./utils":39,"_process":51,"escape-string-regexp":68,"growl":69,"path":41}],15:[function(require,module,exports){ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @api public - * @param {string|number} val - * @param {Object} options - * @return {string|number} - */ -module.exports = function(val, options) { - options = options || {}; - if (typeof val === 'string') { - return parse(val); - } - // https://github.com/mochajs/mocha/pull/1035 - return options['long'] ? longFormat(val) : shortFormat(val); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @api private - * @param {string} str - * @return {number} - */ -function parse(str) { - var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 's': - return n * s; - case 'ms': - return n; - default: - // No default case - } -} - -/** - * Short format for `ms`. - * - * @api private - * @param {number} ms - * @return {string} - */ -function shortFormat(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @api private - * @param {number} ms - * @return {string} - */ -function longFormat(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; -} - -/** - * Pluralization helper. - * - * @api private - * @param {number} ms - * @param {number} n - * @param {string} name - */ -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} - -},{}],16:[function(require,module,exports){ - -/** - * Expose `Pending`. - */ - -module.exports = Pending; - -/** - * Initialize a new `Pending` error with the given message. - * - * @param {string} message - */ -function Pending(message) { - this.message = message; -} - -},{}],17:[function(require,module,exports){ -(function (process,global){ -/** - * Module dependencies. - */ - -var tty = require('tty'); -var diff = require('diff'); -var ms = require('../ms'); -var utils = require('../utils'); -var supportsColor = process.browser ? null : require('supports-color'); - -/** - * Expose `Base`. - */ - -exports = module.exports = Base; - -/** - * Save timer references to avoid Sinon interfering. - * See: https://github.com/mochajs/mocha/issues/237 - */ - -/* eslint-disable no-unused-vars, no-native-reassign */ -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ - -/** - * Check if both stdio streams are associated with a tty. - */ - -var isatty = tty.isatty(1) && tty.isatty(2); - -/** - * Enable coloring by default, except in the browser interface. - */ - -exports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COLORS !== undefined)); - -/** - * Inline diffs instead of +/- - */ - -exports.inlineDiffs = false; - -/** - * Default color map. - */ - -exports.colors = { - pass: 90, - fail: 31, - 'bright pass': 92, - 'bright fail': 91, - 'bright yellow': 93, - pending: 36, - suite: 0, - 'error title': 0, - 'error message': 31, - 'error stack': 90, - checkmark: 32, - fast: 90, - medium: 33, - slow: 31, - green: 32, - light: 90, - 'diff gutter': 90, - 'diff added': 32, - 'diff removed': 31 -}; - -/** - * Default symbol map. - */ - -exports.symbols = { - ok: '✓', - err: '✖', - dot: '․' -}; - -// With node.js on Windows: use symbols available in terminal default fonts -if (process.platform === 'win32') { - exports.symbols.ok = '\u221A'; - exports.symbols.err = '\u00D7'; - exports.symbols.dot = '.'; -} - -/** - * Color `str` with the given `type`, - * allowing colors to be disabled, - * as well as user-defined color - * schemes. - * - * @param {string} type - * @param {string} str - * @return {string} - * @api private - */ -var color = exports.color = function(type, str) { - if (!exports.useColors) { - return String(str); - } - return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; - -/** - * Expose term window size, with some defaults for when stderr is not a tty. - */ - -exports.window = { - width: 75 -}; - -if (isatty) { - exports.window.width = process.stdout.getWindowSize - ? process.stdout.getWindowSize(1)[0] - : tty.getWindowSize()[1]; -} - -/** - * Expose some basic cursor interactions that are common among reporters. - */ - -exports.cursor = { - hide: function() { - isatty && process.stdout.write('\u001b[?25l'); - }, - - show: function() { - isatty && process.stdout.write('\u001b[?25h'); - }, - - deleteLine: function() { - isatty && process.stdout.write('\u001b[2K'); - }, - - beginningOfLine: function() { - isatty && process.stdout.write('\u001b[0G'); - }, - - CR: function() { - if (isatty) { - exports.cursor.deleteLine(); - exports.cursor.beginningOfLine(); - } else { - process.stdout.write('\r'); - } - } -}; - -/** - * Outut the given `failures` as a list. - * - * @param {Array} failures - * @api public - */ - -exports.list = function(failures) { - console.log(); - failures.forEach(function(test, i) { - // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); - - // msg - var msg; - var err = test.err; - var message; - if (err.message) { - message = err.message; - } else if (typeof err.inspect === 'function') { - message = err.inspect() + ''; - } else { - message = ''; - } - var stack = err.stack || message; - var index = stack.indexOf(message); - var actual = err.actual; - var expected = err.expected; - var escape = true; - - if (index === -1) { - msg = message; - } else { - index += message.length; - msg = stack.slice(0, index); - // remove msg from stack - stack = stack.slice(index + 1); - } - - // uncaught - if (err.uncaught) { - msg = 'Uncaught ' + msg; - } - // explicitly show diff - if (err.showDiff !== false && sameType(actual, expected) && expected !== undefined) { - escape = false; - if (!(utils.isString(actual) && utils.isString(expected))) { - err.actual = actual = utils.stringify(actual); - err.expected = expected = utils.stringify(expected); - } - - fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); - var match = message.match(/^([^:]+): expected/); - msg = '\n ' + color('error message', match ? match[1] : msg); - - if (exports.inlineDiffs) { - msg += inlineDiff(err, escape); - } else { - msg += unifiedDiff(err, escape); - } - } - - // indent stack trace - stack = stack.replace(/^/gm, ' '); - - console.log(fmt, (i + 1), test.fullTitle(), msg, stack); - }); -}; - -/** - * Initialize a new `Base` reporter. - * - * All other reporters generally - * inherit from this reporter, providing - * stats such as test duration, number - * of tests passed / failed etc. - * - * @param {Runner} runner - * @api public - */ - -function Base(runner) { - var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; - var failures = this.failures = []; - - if (!runner) { - return; - } - this.runner = runner; - - runner.stats = stats; - - runner.on('start', function() { - stats.start = new Date(); - }); - - runner.on('suite', function(suite) { - stats.suites = stats.suites || 0; - suite.root || stats.suites++; - }); - - runner.on('test end', function() { - stats.tests = stats.tests || 0; - stats.tests++; - }); - - runner.on('pass', function(test) { - stats.passes = stats.passes || 0; - - if (test.duration > test.slow()) { - test.speed = 'slow'; - } else if (test.duration > test.slow() / 2) { - test.speed = 'medium'; - } else { - test.speed = 'fast'; - } - - stats.passes++; - }); - - runner.on('fail', function(test, err) { - stats.failures = stats.failures || 0; - stats.failures++; - test.err = err; - failures.push(test); - }); - - runner.on('end', function() { - stats.end = new Date(); - stats.duration = new Date() - stats.start; - }); - - runner.on('pending', function() { - stats.pending++; - }); -} - -/** - * Output common epilogue used by many of - * the bundled reporters. - * - * @api public - */ -Base.prototype.epilogue = function() { - var stats = this.stats; - var fmt; - - console.log(); - - // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); - - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); - - // pending - if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); - - console.log(fmt, stats.pending); - } - - // failures - if (stats.failures) { - fmt = color('fail', ' %d failing'); - - console.log(fmt, stats.failures); - - Base.list(this.failures); - console.log(); - } - - console.log(); -}; - -/** - * Pad the given `str` to `len`. - * - * @api private - * @param {string} str - * @param {string} len - * @return {string} - */ -function pad(str, len) { - str = String(str); - return Array(len - str.length + 1).join(' ') + str; -} - -/** - * Returns an inline diff between 2 strings with coloured ANSI output - * - * @api private - * @param {Error} err with actual/expected - * @param {boolean} escape - * @return {string} Diff - */ -function inlineDiff(err, escape) { - var msg = errorDiff(err, 'WordsWithSpace', escape); - - // linenos - var lines = msg.split('\n'); - if (lines.length > 4) { - var width = String(lines.length).length; - msg = lines.map(function(str, i) { - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); - } - - // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; - - // indent - msg = msg.replace(/^/gm, ' '); - return msg; -} - -/** - * Returns a unified diff between two strings. - * - * @api private - * @param {Error} err with actual/expected - * @param {boolean} escape - * @return {string} The diff. - */ -function unifiedDiff(err, escape) { - var indent = ' '; - function cleanUp(line) { - if (escape) { - line = escapeInvisibles(line); - } - if (line[0] === '+') { - return indent + colorLines('diff added', line); - } - if (line[0] === '-') { - return indent + colorLines('diff removed', line); - } - if (line.match(/\@\@/)) { - return null; - } - if (line.match(/\\ No newline/)) { - return null; - } - return indent + line; - } - function notBlank(line) { - return typeof line !== 'undefined' && line !== null; - } - var msg = diff.createPatch('string', err.actual, err.expected); - var lines = msg.split('\n').splice(4); - return '\n ' - + colorLines('diff added', '+ expected') + ' ' - + colorLines('diff removed', '- actual') - + '\n\n' - + lines.map(cleanUp).filter(notBlank).join('\n'); -} - -/** - * Return a character diff for `err`. - * - * @api private - * @param {Error} err - * @param {string} type - * @param {boolean} escape - * @return {string} - */ -function errorDiff(err, type, escape) { - var actual = escape ? escapeInvisibles(err.actual) : err.actual; - var expected = escape ? escapeInvisibles(err.expected) : err.expected; - return diff['diff' + type](actual, expected).map(function(str) { - if (str.added) { - return colorLines('diff added', str.value); - } - if (str.removed) { - return colorLines('diff removed', str.value); - } - return str.value; - }).join(''); -} - -/** - * Returns a string with all invisible characters in plain text - * - * @api private - * @param {string} line - * @return {string} - */ -function escapeInvisibles(line) { - return line.replace(/\t/g, '') - .replace(/\r/g, '') - .replace(/\n/g, '\n'); -} - -/** - * Color lines for `str`, using the color `name`. - * - * @api private - * @param {string} name - * @param {string} str - * @return {string} - */ -function colorLines(name, str) { - return str.split('\n').map(function(str) { - return color(name, str); - }).join('\n'); -} - -/** - * Object#toString reference. - */ -var objToString = Object.prototype.toString; - -/** - * Check that a / b have the same type. - * - * @api private - * @param {Object} a - * @param {Object} b - * @return {boolean} - */ -function sameType(a, b) { - return objToString.call(a) === objToString.call(b); -} - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../ms":15,"../utils":39,"_process":51,"diff":67,"supports-color":41,"tty":5}],18:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var utils = require('../utils'); - -/** - * Expose `Doc`. - */ - -exports = module.exports = Doc; - -/** - * Initialize a new `Doc` reporter. - * - * @param {Runner} runner - * @api public - */ -function Doc(runner) { - Base.call(this, runner); - - var indents = 2; - - function indent() { - return Array(indents).join(' '); - } - - runner.on('suite', function(suite) { - if (suite.root) { - return; - } - ++indents; - console.log('%s
      ', indent()); - ++indents; - console.log('%s

      %s

      ', indent(), utils.escape(suite.title)); - console.log('%s
      ', indent()); - }); - - runner.on('suite end', function(suite) { - if (suite.root) { - return; - } - console.log('%s
      ', indent()); - --indents; - console.log('%s
      ', indent()); - --indents; - }); - - runner.on('pass', function(test) { - console.log('%s
      %s
      ', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
      %s
      ', indent(), code); - }); - - runner.on('fail', function(test, err) { - console.log('%s
      %s
      ', indent(), utils.escape(test.title)); - var code = utils.escape(utils.clean(test.fn.toString())); - console.log('%s
      %s
      ', indent(), code); - console.log('%s
      %s
      ', indent(), utils.escape(err)); - }); -} - -},{"../utils":39,"./base":17}],19:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; -var color = Base.color; - -/** - * Expose `Dot`. - */ - -exports = module.exports = Dot; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @api public - * @param {Runner} runner - */ -function Dot(runner) { - Base.call(this, runner); - - var self = this; - var width = Base.window.width * .75 | 0; - var n = -1; - - runner.on('start', function() { - process.stdout.write('\n'); - }); - - runner.on('pending', function() { - if (++n % width === 0) { - process.stdout.write('\n '); - } - process.stdout.write(color('pending', Base.symbols.dot)); - }); - - runner.on('pass', function(test) { - if (++n % width === 0) { - process.stdout.write('\n '); - } - if (test.speed === 'slow') { - process.stdout.write(color('bright yellow', Base.symbols.dot)); - } else { - process.stdout.write(color(test.speed, Base.symbols.dot)); - } - }); - - runner.on('fail', function() { - if (++n % width === 0) { - process.stdout.write('\n '); - } - process.stdout.write(color('fail', Base.symbols.dot)); - }); - - runner.on('end', function() { - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(Dot, Base); - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],20:[function(require,module,exports){ -(function (process,__dirname){ -/** - * Module dependencies. - */ - -var JSONCov = require('./json-cov'); -var readFileSync = require('fs').readFileSync; -var join = require('path').join; - -/** - * Expose `HTMLCov`. - */ - -exports = module.exports = HTMLCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @api public - * @param {Runner} runner - */ -function HTMLCov(runner) { - var jade = require('jade'); - var file = join(__dirname, '/templates/coverage.jade'); - var str = readFileSync(file, 'utf8'); - var fn = jade.compile(str, { filename: file }); - var self = this; - - JSONCov.call(this, runner, false); - - runner.on('end', function() { - process.stdout.write(fn({ - cov: self.cov, - coverageClass: coverageClass - })); - }); -} - -/** - * Return coverage class for a given coverage percentage. - * - * @api private - * @param {number} coveragePctg - * @return {string} - */ -function coverageClass(coveragePctg) { - if (coveragePctg >= 75) { - return 'high'; - } - if (coveragePctg >= 50) { - return 'medium'; - } - if (coveragePctg >= 25) { - return 'low'; - } - return 'terrible'; -} - -}).call(this,require('_process'),"/lib/reporters") -},{"./json-cov":23,"_process":51,"fs":41,"jade":41,"path":41}],21:[function(require,module,exports){ -(function (global){ -/* eslint-env browser */ - -/** - * Module dependencies. - */ - -var Base = require('./base'); -var utils = require('../utils'); -var Progress = require('../browser/progress'); -var escapeRe = require('escape-string-regexp'); -var escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -/* eslint-disable no-unused-vars, no-native-reassign */ -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ - -/** - * Expose `HTML`. - */ - -exports = module.exports = HTML; - -/** - * Stats template. - */ - -var statsTemplate = ''; - -/** - * Initialize a new `HTML` reporter. - * - * @api public - * @param {Runner} runner - */ -function HTML(runner) { - Base.call(this, runner); - - var self = this; - var stats = this.stats; - var stat = fragment(statsTemplate); - var items = stat.getElementsByTagName('li'); - var passes = items[1].getElementsByTagName('em')[0]; - var passesLink = items[1].getElementsByTagName('a')[0]; - var failures = items[2].getElementsByTagName('em')[0]; - var failuresLink = items[2].getElementsByTagName('a')[0]; - var duration = items[3].getElementsByTagName('em')[0]; - var canvas = stat.getElementsByTagName('canvas')[0]; - var report = fragment('
        '); - var stack = [report]; - var progress; - var ctx; - var root = document.getElementById('mocha'); - - if (canvas.getContext) { - var ratio = window.devicePixelRatio || 1; - canvas.style.width = canvas.width; - canvas.style.height = canvas.height; - canvas.width *= ratio; - canvas.height *= ratio; - ctx = canvas.getContext('2d'); - ctx.scale(ratio, ratio); - progress = new Progress(); - } - - if (!root) { - return error('#mocha div missing, add it to your document'); - } - - // pass toggle - on(passesLink, 'click', function() { - unhide(); - var name = (/pass/).test(report.className) ? '' : ' pass'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) { - hideSuitesWithout('test pass'); - } - }); - - // failure toggle - on(failuresLink, 'click', function() { - unhide(); - var name = (/fail/).test(report.className) ? '' : ' fail'; - report.className = report.className.replace(/fail|pass/g, '') + name; - if (report.className.trim()) { - hideSuitesWithout('test fail'); - } - }); - - root.appendChild(stat); - root.appendChild(report); - - if (progress) { - progress.size(40); - } - - runner.on('suite', function(suite) { - if (suite.root) { - return; - } - - // suite - var url = self.suiteURL(suite); - var el = fragment('
      • %s

      • ', url, escape(suite.title)); - - // container - stack[0].appendChild(el); - stack.unshift(document.createElement('ul')); - el.appendChild(stack[0]); - }); - - runner.on('suite end', function(suite) { - if (suite.root) { - return; - } - stack.shift(); - }); - - runner.on('fail', function(test) { - if (test.type === 'hook') { - runner.emit('test end', test); - } - }); - - runner.on('test end', function(test) { - // TODO: add to stats - var percent = stats.tests / this.total * 100 | 0; - if (progress) { - progress.update(percent).draw(ctx); - } - - // update stats - var ms = new Date() - stats.start; - text(passes, stats.passes); - text(failures, stats.failures); - text(duration, (ms / 1000).toFixed(2)); - - // test - var el; - if (test.state === 'passed') { - var url = self.testURL(test); - el = fragment('
      • %e%ems

      • ', test.speed, test.title, test.duration, url); - } else if (test.pending) { - el = fragment('
      • %e

      • ', test.title); - } else { - el = fragment('
      • %e

      • ', test.title, self.testURL(test)); - var stackString; // Note: Includes leading newline - var message = test.err.toString(); - - // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we - // check for the result of the stringifying. - if (message === '[object Error]') { - message = test.err.message; - } - - if (test.err.stack) { - var indexOfMessage = test.err.stack.indexOf(test.err.message); - if (indexOfMessage === -1) { - stackString = test.err.stack; - } else { - stackString = test.err.stack.substr(test.err.message.length + indexOfMessage); - } - } else if (test.err.sourceURL && test.err.line !== undefined) { - // Safari doesn't give you a stack. Let's at least provide a source line. - stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')'; - } - - stackString = stackString || ''; - - if (test.err.htmlMessage && stackString) { - el.appendChild(fragment('
        %s\n
        %e
        ', test.err.htmlMessage, stackString)); - } else if (test.err.htmlMessage) { - el.appendChild(fragment('
        %s
        ', test.err.htmlMessage)); - } else { - el.appendChild(fragment('
        %e%e
        ', message, stackString)); - } - } - - // toggle code - // TODO: defer - if (!test.pending) { - var h2 = el.getElementsByTagName('h2')[0]; - - on(h2, 'click', function() { - pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; - }); - - var pre = fragment('
        %e
        ', utils.clean(test.fn.toString())); - el.appendChild(pre); - pre.style.display = 'none'; - } - - // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. - if (stack[0]) { - stack[0].appendChild(el); - } - }); -} - -/** - * Makes a URL, preserving querystring ("search") parameters. - * - * @param {string} s - * @return {string} A new URL. - */ -function makeUrl(s) { - var search = window.location.search; - - // Remove previous grep query parameter if present - if (search) { - search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?'); - } - - return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeRe(s)); -} - -/** - * Provide suite URL. - * - * @param {Object} [suite] - */ -HTML.prototype.suiteURL = function(suite) { - return makeUrl(suite.fullTitle()); -}; - -/** - * Provide test URL. - * - * @param {Object} [test] - */ -HTML.prototype.testURL = function(test) { - return makeUrl(test.fullTitle()); -}; - -/** - * Display error `msg`. - * - * @param {string} msg - */ -function error(msg) { - document.body.appendChild(fragment('
        %s
        ', msg)); -} - -/** - * Return a DOM fragment from `html`. - * - * @param {string} html - */ -function fragment(html) { - var args = arguments; - var div = document.createElement('div'); - var i = 1; - - div.innerHTML = html.replace(/%([se])/g, function(_, type) { - switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); - // no default - } - }); - - return div.firstChild; -} - -/** - * Check for suites that do not have elements - * with `classname`, and hide them. - * - * @param {text} classname - */ -function hideSuitesWithout(classname) { - var suites = document.getElementsByClassName('suite'); - for (var i = 0; i < suites.length; i++) { - var els = suites[i].getElementsByClassName(classname); - if (!els.length) { - suites[i].className += ' hidden'; - } - } -} - -/** - * Unhide .hidden suites. - */ -function unhide() { - var els = document.getElementsByClassName('suite hidden'); - for (var i = 0; i < els.length; ++i) { - els[i].className = els[i].className.replace('suite hidden', 'suite'); - } -} - -/** - * Set an element's text contents. - * - * @param {HTMLElement} el - * @param {string} contents - */ -function text(el, contents) { - if (el.textContent) { - el.textContent = contents; - } else { - el.innerText = contents; - } -} - -/** - * Listen on `event` with callback `fn`. - */ -function on(el, event, fn) { - if (el.addEventListener) { - el.addEventListener(event, fn, false); - } else { - el.attachEvent('on' + event, fn); - } -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../browser/progress":4,"../utils":39,"./base":17,"escape-string-regexp":68}],22:[function(require,module,exports){ -// Alias exports to a their normalized format Mocha#reporter to prevent a need -// for dynamic (try/catch) requires, which Browserify doesn't handle. -exports.Base = exports.base = require('./base'); -exports.Dot = exports.dot = require('./dot'); -exports.Doc = exports.doc = require('./doc'); -exports.TAP = exports.tap = require('./tap'); -exports.JSON = exports.json = require('./json'); -exports.HTML = exports.html = require('./html'); -exports.List = exports.list = require('./list'); -exports.Min = exports.min = require('./min'); -exports.Spec = exports.spec = require('./spec'); -exports.Nyan = exports.nyan = require('./nyan'); -exports.XUnit = exports.xunit = require('./xunit'); -exports.Markdown = exports.markdown = require('./markdown'); -exports.Progress = exports.progress = require('./progress'); -exports.Landing = exports.landing = require('./landing'); -exports.JSONCov = exports['json-cov'] = require('./json-cov'); -exports.HTMLCov = exports['html-cov'] = require('./html-cov'); -exports.JSONStream = exports['json-stream'] = require('./json-stream'); - -},{"./base":17,"./doc":18,"./dot":19,"./html":21,"./html-cov":20,"./json":25,"./json-cov":23,"./json-stream":24,"./landing":26,"./list":27,"./markdown":28,"./min":29,"./nyan":30,"./progress":31,"./spec":32,"./tap":33,"./xunit":34}],23:[function(require,module,exports){ -(function (process,global){ -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSONCov`. - */ - -exports = module.exports = JSONCov; - -/** - * Initialize a new `JsCoverage` reporter. - * - * @api public - * @param {Runner} runner - * @param {boolean} output - */ -function JSONCov(runner, output) { - Base.call(this, runner); - - output = arguments.length === 1 || output; - var self = this; - var tests = []; - var failures = []; - var passes = []; - - runner.on('test end', function(test) { - tests.push(test); - }); - - runner.on('pass', function(test) { - passes.push(test); - }); - - runner.on('fail', function(test) { - failures.push(test); - }); - - runner.on('end', function() { - var cov = global._$jscoverage || {}; - var result = self.cov = map(cov); - result.stats = self.stats; - result.tests = tests.map(clean); - result.failures = failures.map(clean); - result.passes = passes.map(clean); - if (!output) { - return; - } - process.stdout.write(JSON.stringify(result, null, 2)); - }); -} - -/** - * Map jscoverage data to a JSON structure - * suitable for reporting. - * - * @api private - * @param {Object} cov - * @return {Object} - */ - -function map(cov) { - var ret = { - instrumentation: 'node-jscoverage', - sloc: 0, - hits: 0, - misses: 0, - coverage: 0, - files: [] - }; - - for (var filename in cov) { - if (Object.prototype.hasOwnProperty.call(cov, filename)) { - var data = coverage(filename, cov[filename]); - ret.files.push(data); - ret.hits += data.hits; - ret.misses += data.misses; - ret.sloc += data.sloc; - } - } - - ret.files.sort(function(a, b) { - return a.filename.localeCompare(b.filename); - }); - - if (ret.sloc > 0) { - ret.coverage = (ret.hits / ret.sloc) * 100; - } - - return ret; -} - -/** - * Map jscoverage data for a single source file - * to a JSON structure suitable for reporting. - * - * @api private - * @param {string} filename name of the source file - * @param {Object} data jscoverage coverage data - * @return {Object} - */ -function coverage(filename, data) { - var ret = { - filename: filename, - coverage: 0, - hits: 0, - misses: 0, - sloc: 0, - source: {} - }; - - data.source.forEach(function(line, num) { - num++; - - if (data[num] === 0) { - ret.misses++; - ret.sloc++; - } else if (data[num] !== undefined) { - ret.hits++; - ret.sloc++; - } - - ret.source[num] = { - source: line, - coverage: data[num] === undefined ? '' : data[num] - }; - }); - - ret.coverage = ret.hits / ret.sloc * 100; - - return ret; -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @api private - * @param {Object} test - * @return {Object} - */ -function clean(test) { - return { - duration: test.duration, - fullTitle: test.fullTitle(), - title: test.title - }; -} - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./base":17,"_process":51}],24:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @api public - * @param {Runner} runner - */ -function List(runner) { - Base.call(this, runner); - - var self = this; - var total = runner.total; - - runner.on('start', function() { - console.log(JSON.stringify(['start', { total: total }])); - }); - - runner.on('pass', function(test) { - console.log(JSON.stringify(['pass', clean(test)])); - }); - - runner.on('fail', function(test, err) { - test = clean(test); - test.err = err.message; - test.stack = err.stack || null; - console.log(JSON.stringify(['fail', test])); - }); - - runner.on('end', function() { - process.stdout.write(JSON.stringify(['end', self.stats])); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @api private - * @param {Object} test - * @return {Object} - */ -function clean(test) { - return { - title: test.title, - fullTitle: test.fullTitle(), - duration: test.duration - }; -} - -}).call(this,require('_process')) -},{"./base":17,"_process":51}],25:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `JSON`. - */ - -exports = module.exports = JSONReporter; - -/** - * Initialize a new `JSON` reporter. - * - * @api public - * @param {Runner} runner - */ -function JSONReporter(runner) { - Base.call(this, runner); - - var self = this; - var tests = []; - var pending = []; - var failures = []; - var passes = []; - - runner.on('test end', function(test) { - tests.push(test); - }); - - runner.on('pass', function(test) { - passes.push(test); - }); - - runner.on('fail', function(test) { - failures.push(test); - }); - - runner.on('pending', function(test) { - pending.push(test); - }); - - runner.on('end', function() { - var obj = { - stats: self.stats, - tests: tests.map(clean), - pending: pending.map(clean), - failures: failures.map(clean), - passes: passes.map(clean) - }; - - runner.testResults = obj; - - process.stdout.write(JSON.stringify(obj, null, 2)); - }); -} - -/** - * Return a plain-object representation of `test` - * free of cyclic properties etc. - * - * @api private - * @param {Object} test - * @return {Object} - */ -function clean(test) { - return { - title: test.title, - fullTitle: test.fullTitle(), - duration: test.duration, - err: errorJSON(test.err || {}) - }; -} - -/** - * Transform `error` into a JSON object. - * - * @api private - * @param {Error} err - * @return {Object} - */ -function errorJSON(err) { - var res = {}; - Object.getOwnPropertyNames(err).forEach(function(key) { - res[key] = err[key]; - }, err); - return res; -} - -}).call(this,require('_process')) -},{"./base":17,"_process":51}],26:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; -var cursor = Base.cursor; -var color = Base.color; - -/** - * Expose `Landing`. - */ - -exports = module.exports = Landing; - -/** - * Airplane color. - */ - -Base.colors.plane = 0; - -/** - * Airplane crash color. - */ - -Base.colors['plane crash'] = 31; - -/** - * Runway color. - */ - -Base.colors.runway = 90; - -/** - * Initialize a new `Landing` reporter. - * - * @api public - * @param {Runner} runner - */ -function Landing(runner) { - Base.call(this, runner); - - var self = this; - var width = Base.window.width * .75 | 0; - var total = runner.total; - var stream = process.stdout; - var plane = color('plane', '✈'); - var crashed = -1; - var n = 0; - - function runway() { - var buf = Array(width).join('-'); - return ' ' + color('runway', buf); - } - - runner.on('start', function() { - stream.write('\n\n\n '); - cursor.hide(); - }); - - runner.on('test end', function(test) { - // check if the plane crashed - var col = crashed === -1 ? width * ++n / total | 0 : crashed; - - // show the crash - if (test.state === 'failed') { - plane = color('plane crash', '✈'); - crashed = col; - } - - // render landing strip - stream.write('\u001b[' + (width + 1) + 'D\u001b[2A'); - stream.write(runway()); - stream.write('\n '); - stream.write(color('runway', Array(col).join('⋅'))); - stream.write(plane); - stream.write(color('runway', Array(width - col).join('⋅') + '\n')); - stream.write(runway()); - stream.write('\u001b[0m'); - }); - - runner.on('end', function() { - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(Landing, Base); - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],27:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; -var color = Base.color; -var cursor = Base.cursor; - -/** - * Expose `List`. - */ - -exports = module.exports = List; - -/** - * Initialize a new `List` test reporter. - * - * @api public - * @param {Runner} runner - */ -function List(runner) { - Base.call(this, runner); - - var self = this; - var n = 0; - - runner.on('start', function() { - console.log(); - }); - - runner.on('test', function(test) { - process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); - }); - - runner.on('pending', function(test) { - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); - console.log(fmt, test.fullTitle()); - }); - - runner.on('pass', function(test) { - var fmt = color('checkmark', ' ' + Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); - cursor.CR(); - console.log(fmt, test.fullTitle(), test.duration); - }); - - runner.on('fail', function(test) { - cursor.CR(); - console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(List, Base); - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],28:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var utils = require('../utils'); - -/** - * Constants - */ - -var SUITE_PREFIX = '$'; - -/** - * Expose `Markdown`. - */ - -exports = module.exports = Markdown; - -/** - * Initialize a new `Markdown` reporter. - * - * @api public - * @param {Runner} runner - */ -function Markdown(runner) { - Base.call(this, runner); - - var level = 0; - var buf = ''; - - function title(str) { - return Array(level).join('#') + ' ' + str; - } - - function mapTOC(suite, obj) { - var ret = obj; - var key = SUITE_PREFIX + suite.title; - - obj = obj[key] = obj[key] || { suite: suite }; - suite.suites.forEach(function(suite) { - mapTOC(suite, obj); - }); - - return ret; - } - - function stringifyTOC(obj, level) { - ++level; - var buf = ''; - var link; - for (var key in obj) { - if (key === 'suite') { - continue; - } - if (key !== SUITE_PREFIX) { - link = ' - [' + key.substring(1) + ']'; - link += '(#' + utils.slug(obj[key].suite.fullTitle()) + ')\n'; - buf += Array(level).join(' ') + link; - } - buf += stringifyTOC(obj[key], level); - } - return buf; - } - - function generateTOC(suite) { - var obj = mapTOC(suite, {}); - return stringifyTOC(obj, 0); - } - - generateTOC(runner.suite); - - runner.on('suite', function(suite) { - ++level; - var slug = utils.slug(suite.fullTitle()); - buf += '' + '\n'; - buf += title(suite.title) + '\n'; - }); - - runner.on('suite end', function() { - --level; - }); - - runner.on('pass', function(test) { - var code = utils.clean(test.fn.toString()); - buf += test.title + '.\n'; - buf += '\n```js\n'; - buf += code + '\n'; - buf += '```\n\n'; - }); - - runner.on('end', function() { - process.stdout.write('# TOC\n'); - process.stdout.write(generateTOC(runner.suite)); - process.stdout.write(buf); - }); -} - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],29:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; - -/** - * Expose `Min`. - */ - -exports = module.exports = Min; - -/** - * Initialize a new `Min` minimal test reporter (best used with --watch). - * - * @api public - * @param {Runner} runner - */ -function Min(runner) { - Base.call(this, runner); - - runner.on('start', function() { - // clear screen - process.stdout.write('\u001b[2J'); - // set cursor position - process.stdout.write('\u001b[1;3H'); - }); - - runner.on('end', this.epilogue.bind(this)); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(Min, Base); - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],30:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; - -/** - * Expose `Dot`. - */ - -exports = module.exports = NyanCat; - -/** - * Initialize a new `Dot` matrix test reporter. - * - * @param {Runner} runner - * @api public - */ - -function NyanCat(runner) { - Base.call(this, runner); - - var self = this; - var width = Base.window.width * .75 | 0; - var nyanCatWidth = this.nyanCatWidth = 11; - - this.colorIndex = 0; - this.numberOfLines = 4; - this.rainbowColors = self.generateColors(); - this.scoreboardWidth = 5; - this.tick = 0; - this.trajectories = [[], [], [], []]; - this.trajectoryWidthMax = (width - nyanCatWidth); - - runner.on('start', function() { - Base.cursor.hide(); - self.draw(); - }); - - runner.on('pending', function() { - self.draw(); - }); - - runner.on('pass', function() { - self.draw(); - }); - - runner.on('fail', function() { - self.draw(); - }); - - runner.on('end', function() { - Base.cursor.show(); - for (var i = 0; i < self.numberOfLines; i++) { - write('\n'); - } - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(NyanCat, Base); - -/** - * Draw the nyan cat - * - * @api private - */ - -NyanCat.prototype.draw = function() { - this.appendRainbow(); - this.drawScoreboard(); - this.drawRainbow(); - this.drawNyanCat(); - this.tick = !this.tick; -}; - -/** - * Draw the "scoreboard" showing the number - * of passes, failures and pending tests. - * - * @api private - */ - -NyanCat.prototype.drawScoreboard = function() { - var stats = this.stats; - - function draw(type, n) { - write(' '); - write(Base.color(type, n)); - write('\n'); - } - - draw('green', stats.passes); - draw('fail', stats.failures); - draw('pending', stats.pending); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Append the rainbow. - * - * @api private - */ - -NyanCat.prototype.appendRainbow = function() { - var segment = this.tick ? '_' : '-'; - var rainbowified = this.rainbowify(segment); - - for (var index = 0; index < this.numberOfLines; index++) { - var trajectory = this.trajectories[index]; - if (trajectory.length >= this.trajectoryWidthMax) { - trajectory.shift(); - } - trajectory.push(rainbowified); - } -}; - -/** - * Draw the rainbow. - * - * @api private - */ - -NyanCat.prototype.drawRainbow = function() { - var self = this; - - this.trajectories.forEach(function(line) { - write('\u001b[' + self.scoreboardWidth + 'C'); - write(line.join('')); - write('\n'); - }); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw the nyan cat - * - * @api private - */ -NyanCat.prototype.drawNyanCat = function() { - var self = this; - var startWidth = this.scoreboardWidth + this.trajectories[0].length; - var dist = '\u001b[' + startWidth + 'C'; - var padding = ''; - - write(dist); - write('_,------,'); - write('\n'); - - write(dist); - padding = self.tick ? ' ' : ' '; - write('_|' + padding + '/\\_/\\ '); - write('\n'); - - write(dist); - padding = self.tick ? '_' : '__'; - var tail = self.tick ? '~' : '^'; - write(tail + '|' + padding + this.face() + ' '); - write('\n'); - - write(dist); - padding = self.tick ? ' ' : ' '; - write(padding + '"" "" '); - write('\n'); - - this.cursorUp(this.numberOfLines); -}; - -/** - * Draw nyan cat face. - * - * @api private - * @return {string} - */ - -NyanCat.prototype.face = function() { - var stats = this.stats; - if (stats.failures) { - return '( x .x)'; - } else if (stats.pending) { - return '( o .o)'; - } else if (stats.passes) { - return '( ^ .^)'; - } - return '( - .-)'; -}; - -/** - * Move cursor up `n`. - * - * @api private - * @param {number} n - */ - -NyanCat.prototype.cursorUp = function(n) { - write('\u001b[' + n + 'A'); -}; - -/** - * Move cursor down `n`. - * - * @api private - * @param {number} n - */ - -NyanCat.prototype.cursorDown = function(n) { - write('\u001b[' + n + 'B'); -}; - -/** - * Generate rainbow colors. - * - * @api private - * @return {Array} - */ -NyanCat.prototype.generateColors = function() { - var colors = []; - - for (var i = 0; i < (6 * 7); i++) { - var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); - var r = Math.floor(3 * Math.sin(n) + 3); - var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); - var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); - colors.push(36 * r + 6 * g + b + 16); - } - - return colors; -}; - -/** - * Apply rainbow to the given `str`. - * - * @api private - * @param {string} str - * @return {string} - */ -NyanCat.prototype.rainbowify = function(str) { - if (!Base.useColors) { - return str; - } - var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; - this.colorIndex += 1; - return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m'; -}; - -/** - * Stdout helper. - * - * @param {string} string A message to write to stdout. - */ -function write(string) { - process.stdout.write(string); -} - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],31:[function(require,module,exports){ -(function (process){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; -var color = Base.color; -var cursor = Base.cursor; - -/** - * Expose `Progress`. - */ - -exports = module.exports = Progress; - -/** - * General progress bar color. - */ - -Base.colors.progress = 90; - -/** - * Initialize a new `Progress` bar test reporter. - * - * @api public - * @param {Runner} runner - * @param {Object} options - */ -function Progress(runner, options) { - Base.call(this, runner); - - var self = this; - var width = Base.window.width * .50 | 0; - var total = runner.total; - var complete = 0; - var lastN = -1; - - // default chars - options = options || {}; - options.open = options.open || '['; - options.complete = options.complete || '▬'; - options.incomplete = options.incomplete || Base.symbols.dot; - options.close = options.close || ']'; - options.verbose = false; - - // tests started - runner.on('start', function() { - console.log(); - cursor.hide(); - }); - - // tests complete - runner.on('test end', function() { - complete++; - - var percent = complete / total; - var n = width * percent | 0; - var i = width - n; - - if (n === lastN && !options.verbose) { - // Don't re-render the line if it hasn't changed - return; - } - lastN = n; - - cursor.CR(); - process.stdout.write('\u001b[J'); - process.stdout.write(color('progress', ' ' + options.open)); - process.stdout.write(Array(n).join(options.complete)); - process.stdout.write(Array(i).join(options.incomplete)); - process.stdout.write(color('progress', options.close)); - if (options.verbose) { - process.stdout.write(color('progress', ' ' + complete + ' of ' + total)); - } - }); - - // tests are complete, output some stats - // and the failures if any - runner.on('end', function() { - cursor.show(); - console.log(); - self.epilogue(); - }); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(Progress, Base); - -}).call(this,require('_process')) -},{"../utils":39,"./base":17,"_process":51}],32:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var inherits = require('../utils').inherits; -var color = Base.color; -var cursor = Base.cursor; - -/** - * Expose `Spec`. - */ - -exports = module.exports = Spec; - -/** - * Initialize a new `Spec` test reporter. - * - * @api public - * @param {Runner} runner - */ -function Spec(runner) { - Base.call(this, runner); - - var self = this; - var indents = 0; - var n = 0; - - function indent() { - return Array(indents).join(' '); - } - - runner.on('start', function() { - console.log(); - }); - - runner.on('suite', function(suite) { - ++indents; - console.log(color('suite', '%s%s'), indent(), suite.title); - }); - - runner.on('suite end', function() { - --indents; - if (indents === 1) { - console.log(); - } - }); - - runner.on('pending', function(test) { - var fmt = indent() + color('pending', ' - %s'); - console.log(fmt, test.title); - }); - - runner.on('pass', function(test) { - var fmt; - if (test.speed === 'fast') { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s'); - cursor.CR(); - console.log(fmt, test.title); - } else { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s') - + color(test.speed, ' (%dms)'); - cursor.CR(); - console.log(fmt, test.title, test.duration); - } - }); - - runner.on('fail', function(test) { - cursor.CR(); - console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); - }); - - runner.on('end', self.epilogue.bind(self)); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(Spec, Base); - -},{"../utils":39,"./base":17}],33:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var Base = require('./base'); - -/** - * Expose `TAP`. - */ - -exports = module.exports = TAP; - -/** - * Initialize a new `TAP` reporter. - * - * @api public - * @param {Runner} runner - */ -function TAP(runner) { - Base.call(this, runner); - - var n = 1; - var passes = 0; - var failures = 0; - - runner.on('start', function() { - var total = runner.grepTotal(runner.suite); - console.log('%d..%d', 1, total); - }); - - runner.on('test end', function() { - ++n; - }); - - runner.on('pending', function(test) { - console.log('ok %d %s # SKIP -', n, title(test)); - }); - - runner.on('pass', function(test) { - passes++; - console.log('ok %d %s', n, title(test)); - }); - - runner.on('fail', function(test, err) { - failures++; - console.log('not ok %d %s', n, title(test)); - if (err.stack) { - console.log(err.stack.replace(/^/gm, ' ')); - } - }); - - runner.on('end', function() { - console.log('# tests ' + (passes + failures)); - console.log('# pass ' + passes); - console.log('# fail ' + failures); - }); -} - -/** - * Return a TAP-safe title of `test` - * - * @api private - * @param {Object} test - * @return {String} - */ -function title(test) { - return test.fullTitle().replace(/#/g, ''); -} - -},{"./base":17}],34:[function(require,module,exports){ -(function (global){ -/** - * Module dependencies. - */ - -var Base = require('./base'); -var utils = require('../utils'); -var inherits = utils.inherits; -var fs = require('fs'); -var escape = utils.escape; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -/* eslint-disable no-unused-vars, no-native-reassign */ -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ - -/** - * Expose `XUnit`. - */ - -exports = module.exports = XUnit; - -/** - * Initialize a new `XUnit` reporter. - * - * @api public - * @param {Runner} runner - */ -function XUnit(runner, options) { - Base.call(this, runner); - - var stats = this.stats; - var tests = []; - var self = this; - - if (options.reporterOptions && options.reporterOptions.output) { - if (!fs.createWriteStream) { - throw new Error('file output not supported in browser'); - } - self.fileStream = fs.createWriteStream(options.reporterOptions.output); - } - - runner.on('pending', function(test) { - tests.push(test); - }); - - runner.on('pass', function(test) { - tests.push(test); - }); - - runner.on('fail', function(test) { - tests.push(test); - }); - - runner.on('end', function() { - self.write(tag('testsuite', { - name: 'Mocha Tests', - tests: stats.tests, - failures: stats.failures, - errors: stats.failures, - skipped: stats.tests - stats.failures - stats.passes, - timestamp: (new Date()).toUTCString(), - time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(function(t) { - self.test(t); - }); - - self.write(''); - }); -} - -/** - * Inherit from `Base.prototype`. - */ -inherits(XUnit, Base); - -/** - * Override done to close the stream (if it's a file). - * - * @param failures - * @param {Function} fn - */ -XUnit.prototype.done = function(failures, fn) { - if (this.fileStream) { - this.fileStream.end(function() { - fn(failures); - }); - } else { - fn(failures); - } -}; - -/** - * Write out the given line. - * - * @param {string} line - */ -XUnit.prototype.write = function(line) { - if (this.fileStream) { - this.fileStream.write(line + '\n'); - } else { - console.log(line); - } -}; - -/** - * Output tag for the given `test.` - * - * @param {Test} test - */ -XUnit.prototype.test = function(test) { - var attrs = { - classname: test.parent.fullTitle(), - name: test.title, - time: (test.duration / 1000) || 0 - }; - - if (test.state === 'failed') { - var err = test.err; - this.write(tag('testcase', attrs, false, tag('failure', {}, false, cdata(escape(err.message) + '\n' + err.stack)))); - } else if (test.pending) { - this.write(tag('testcase', attrs, false, tag('skipped', {}, true))); - } else { - this.write(tag('testcase', attrs, true)); - } -}; - -/** - * HTML tag helper. - * - * @param name - * @param attrs - * @param close - * @param content - * @return {string} - */ -function tag(name, attrs, close, content) { - var end = close ? '/>' : '>'; - var pairs = []; - var tag; - - for (var key in attrs) { - if (Object.prototype.hasOwnProperty.call(attrs, key)) { - pairs.push(key + '="' + escape(attrs[key]) + '"'); - } - } - - tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; - if (content) { - tag += content + ''; -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../utils":39,"./base":17,"fs":41}],35:[function(require,module,exports){ -(function (global){ -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var Pending = require('./pending'); -var debug = require('debug')('mocha:runnable'); -var milliseconds = require('./ms'); -var utils = require('./utils'); -var inherits = utils.inherits; - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -/* eslint-disable no-unused-vars, no-native-reassign */ -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; -/* eslint-enable no-unused-vars, no-native-reassign */ - -/** - * Object#toString(). - */ - -var toString = Object.prototype.toString; - -/** - * Expose `Runnable`. - */ - -module.exports = Runnable; - -/** - * Initialize a new `Runnable` with the given `title` and callback `fn`. - * - * @param {String} title - * @param {Function} fn - * @api private - * @param {string} title - * @param {Function} fn - */ -function Runnable(title, fn) { - this.title = title; - this.fn = fn; - this.async = fn && fn.length; - this.sync = !this.async; - this._timeout = 2000; - this._slow = 75; - this._enableTimeouts = true; - this.timedOut = false; - this._trace = new Error('done() called multiple times'); -} - -/** - * Inherit from `EventEmitter.prototype`. - */ -inherits(Runnable, EventEmitter); - -/** - * Set & get timeout `ms`. - * - * @api private - * @param {number|string} ms - * @return {Runnable|number} ms or Runnable instance. - */ -Runnable.prototype.timeout = function(ms) { - if (!arguments.length) { - return this._timeout; - } - if (ms === 0) { - this._enableTimeouts = false; - } - if (typeof ms === 'string') { - ms = milliseconds(ms); - } - debug('timeout %d', ms); - this._timeout = ms; - if (this.timer) { - this.resetTimeout(); - } - return this; -}; - -/** - * Set & get slow `ms`. - * - * @api private - * @param {number|string} ms - * @return {Runnable|number} ms or Runnable instance. - */ -Runnable.prototype.slow = function(ms) { - if (!arguments.length) { - return this._slow; - } - if (typeof ms === 'string') { - ms = milliseconds(ms); - } - debug('timeout %d', ms); - this._slow = ms; - return this; -}; - -/** - * Set and get whether timeout is `enabled`. - * - * @api private - * @param {boolean} enabled - * @return {Runnable|boolean} enabled or Runnable instance. - */ -Runnable.prototype.enableTimeouts = function(enabled) { - if (!arguments.length) { - return this._enableTimeouts; - } - debug('enableTimeouts %s', enabled); - this._enableTimeouts = enabled; - return this; -}; - -/** - * Halt and mark as pending. - * - * @api private - */ -Runnable.prototype.skip = function() { - throw new Pending(); -}; - -/** - * Return the full title generated by recursively concatenating the parent's - * full title. - * - * @api public - * @return {string} - */ -Runnable.prototype.fullTitle = function() { - return this.parent.fullTitle() + ' ' + this.title; -}; - -/** - * Clear the timeout. - * - * @api private - */ -Runnable.prototype.clearTimeout = function() { - clearTimeout(this.timer); -}; - -/** - * Inspect the runnable void of private properties. - * - * @api private - * @return {string} - */ -Runnable.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { - if (key[0] === '_') { - return; - } - if (key === 'parent') { - return '#'; - } - if (key === 'ctx') { - return '#'; - } - return val; - }, 2); -}; - -/** - * Reset the timeout. - * - * @api private - */ -Runnable.prototype.resetTimeout = function() { - var self = this; - var ms = this.timeout() || 1e9; - - if (!this._enableTimeouts) { - return; - } - this.clearTimeout(); - this.timer = setTimeout(function() { - if (!self._enableTimeouts) { - return; - } - self.callback(new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.')); - self.timedOut = true; - }, ms); -}; - -/** - * Whitelist a list of globals for this test run. - * - * @api private - * @param {string[]} globals - */ -Runnable.prototype.globals = function(globals) { - this._allowedGlobals = globals; -}; - -/** - * Run the test and invoke `fn(err)`. - * - * @param {Function} fn - * @api private - */ -Runnable.prototype.run = function(fn) { - var self = this; - var start = new Date(); - var ctx = this.ctx; - var finished; - var emitted; - - // Sometimes the ctx exists, but it is not runnable - if (ctx && ctx.runnable) { - ctx.runnable(this); - } - - // called multiple times - function multiple(err) { - if (emitted) { - return; - } - emitted = true; - self.emit('error', err || new Error('done() called multiple times; stacktrace may be inaccurate')); - } - - // finished - function done(err) { - var ms = self.timeout(); - if (self.timedOut) { - return; - } - if (finished) { - return multiple(err || self._trace); - } - - self.clearTimeout(); - self.duration = new Date() - start; - finished = true; - if (!err && self.duration > ms && self._enableTimeouts) { - err = new Error('timeout of ' + ms + 'ms exceeded. Ensure the done() callback is being called in this test.'); - } - fn(err); - } - - // for .resetTimeout() - this.callback = done; - - // explicit async with `done` argument - if (this.async) { - this.resetTimeout(); - - if (this.allowUncaught) { - return callFnAsync(this.fn); - } - try { - callFnAsync(this.fn); - } catch (err) { - done(utils.getError(err)); - } - return; - } - - if (this.allowUncaught) { - callFn(this.fn); - done(); - return; - } - - // sync or promise-returning - try { - if (this.pending) { - done(); - } else { - callFn(this.fn); - } - } catch (err) { - done(utils.getError(err)); - } - - function callFn(fn) { - var result = fn.call(ctx); - if (result && typeof result.then === 'function') { - self.resetTimeout(); - result - .then(function() { - done(); - }, - function(reason) { - done(reason || new Error('Promise rejected with no or falsy reason')); - }); - } else { - if (self.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()` or returning a promise')); - } - - done(); - } - } - - function callFnAsync(fn) { - fn.call(ctx, function(err) { - if (err instanceof Error || toString.call(err) === '[object Error]') { - return done(err); - } - if (err) { - if (Object.prototype.toString.call(err) === '[object Object]') { - return done(new Error('done() invoked with non-Error: ' - + JSON.stringify(err))); - } - return done(new Error('done() invoked with non-Error: ' + err)); - } - done(); - }); - } -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./ms":15,"./pending":16,"./utils":39,"debug":2,"events":3}],36:[function(require,module,exports){ -(function (process,global){ -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var Pending = require('./pending'); -var utils = require('./utils'); -var inherits = utils.inherits; -var debug = require('debug')('mocha:runner'); -var Runnable = require('./runnable'); -var filter = utils.filter; -var indexOf = utils.indexOf; -var keys = utils.keys; -var stackFilter = utils.stackTraceFilter(); -var stringify = utils.stringify; -var type = utils.type; -var undefinedError = utils.undefinedError; - -/** - * Non-enumerable globals. - */ - -var globals = [ - 'setTimeout', - 'clearTimeout', - 'setInterval', - 'clearInterval', - 'XMLHttpRequest', - 'Date', - 'setImmediate', - 'clearImmediate' -]; - -/** - * Expose `Runner`. - */ - -module.exports = Runner; - -/** - * Initialize a `Runner` for the given `suite`. - * - * Events: - * - * - `start` execution started - * - `end` execution complete - * - `suite` (suite) test suite execution started - * - `suite end` (suite) all tests (and sub-suites) have finished - * - `test` (test) test execution started - * - `test end` (test) test completed - * - `hook` (hook) hook execution started - * - `hook end` (hook) hook complete - * - `pass` (test) test passed - * - `fail` (test, err) test failed - * - `pending` (test) test pending - * - * @api public - * @param {Suite} suite Root suite - * @param {boolean} [delay] Whether or not to delay execution of root suite - * until ready. - */ -function Runner(suite, delay) { - var self = this; - this._globals = []; - this._abort = false; - this._delay = delay; - this.suite = suite; - this.started = false; - this.total = suite.total(); - this.failures = 0; - this.on('test end', function(test) { - self.checkGlobals(test); - }); - this.on('hook end', function(hook) { - self.checkGlobals(hook); - }); - this._defaultGrep = /.*/; - this.grep(this._defaultGrep); - this.globals(this.globalProps().concat(extraGlobals())); -} - -/** - * Wrapper for setImmediate, process.nextTick, or browser polyfill. - * - * @param {Function} fn - * @api private - */ -Runner.immediately = global.setImmediate || process.nextTick; - -/** - * Inherit from `EventEmitter.prototype`. - */ -inherits(Runner, EventEmitter); - -/** - * Run tests with full titles matching `re`. Updates runner.total - * with number of tests matched. - * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining - * @api public - * @param {RegExp} re - * @param {boolean} invert - * @return {Runner} Runner instance. - */ -Runner.prototype.grep = function(re, invert) { - debug('grep %s', re); - this._grep = re; - this._invert = invert; - this.total = this.grepTotal(this.suite); - return this; -}; - -/** - * Returns the number of tests matching the grep search for the - * given suite. - * - * @param {Suite} suite - * @return {Number} - * @api public - * @param {Suite} suite - * @return {number} - */ -Runner.prototype.grepTotal = function(suite) { - var self = this; - var total = 0; - - suite.eachTest(function(test) { - var match = self._grep.test(test.fullTitle()); - if (self._invert) { - match = !match; - } - if (match) { - total++; - } - }); - - return total; -}; - -/** - * Return a list of global properties. - * - * @return {Array} - * @api private - */ -Runner.prototype.globalProps = function() { - var props = keys(global); - - // non-enumerables - for (var i = 0; i < globals.length; ++i) { - if (~indexOf(props, globals[i])) { - continue; - } - props.push(globals[i]); - } - - return props; -}; - -/** - * Allow the given `arr` of globals. - * - * @param {Array} arr - * @return {Runner} for chaining - * @api public - * @param {Array} arr - * @return {Runner} Runner instance. - */ -Runner.prototype.globals = function(arr) { - if (!arguments.length) { - return this._globals; - } - debug('globals %j', arr); - this._globals = this._globals.concat(arr); - return this; -}; - -/** - * Check for global variable leaks. - * - * @api private - */ -Runner.prototype.checkGlobals = function(test) { - if (this.ignoreLeaks) { - return; - } - var ok = this._globals; - - var globals = this.globalProps(); - var leaks; - - if (test) { - ok = ok.concat(test._allowedGlobals || []); - } - - if (this.prevGlobalsLength === globals.length) { - return; - } - this.prevGlobalsLength = globals.length; - - leaks = filterLeaks(ok, globals); - this._globals = this._globals.concat(leaks); - - if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); - } else if (leaks.length) { - this.fail(test, new Error('global leak detected: ' + leaks[0])); - } -}; - -/** - * Fail the given `test`. - * - * @api private - * @param {Test} test - * @param {Error} err - */ -Runner.prototype.fail = function(test, err) { - ++this.failures; - test.state = 'failed'; - - if (!(err instanceof Error || err && typeof err.message === 'string')) { - err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)'); - } - - err.stack = (this.fullStackTrace || !err.stack) - ? err.stack - : stackFilter(err.stack); - - this.emit('fail', test, err); -}; - -/** - * Fail the given `hook` with `err`. - * - * Hook failures work in the following pattern: - * - If bail, then exit - * - Failed `before` hook skips all tests in a suite and subsuites, - * but jumps to corresponding `after` hook - * - Failed `before each` hook skips remaining tests in a - * suite and jumps to corresponding `after each` hook, - * which is run only once - * - Failed `after` hook does not alter - * execution order - * - Failed `after each` hook skips remaining tests in a - * suite and subsuites, but executes other `after each` - * hooks - * - * @api private - * @param {Hook} hook - * @param {Error} err - */ -Runner.prototype.failHook = function(hook, err) { - if (hook.ctx && hook.ctx.currentTest) { - hook.originalTitle = hook.originalTitle || hook.title; - hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; - } - - this.fail(hook, err); - if (this.suite.bail()) { - this.emit('end'); - } -}; - -/** - * Run hook `name` callbacks and then invoke `fn()`. - * - * @api private - * @param {string} name - * @param {Function} fn - */ - -Runner.prototype.hook = function(name, fn) { - var suite = this.suite; - var hooks = suite['_' + name]; - var self = this; - - function next(i) { - var hook = hooks[i]; - if (!hook) { - return fn(); - } - self.currentRunnable = hook; - - hook.ctx.currentTest = self.test; - - self.emit('hook', hook); - - if (!hook.listeners('error').length) { - hook.on('error', function(err) { - self.failHook(hook, err); - }); - } - - hook.run(function(err) { - var testError = hook.error(); - if (testError) { - self.fail(self.test, testError); - } - if (err) { - if (err instanceof Pending) { - suite.pending = true; - } else { - self.failHook(hook, err); - - // stop executing hooks, notify callee of hook err - return fn(err); - } - } - self.emit('hook end', hook); - delete hook.ctx.currentTest; - next(++i); - }); - } - - Runner.immediately(function() { - next(0); - }); -}; - -/** - * Run hook `name` for the given array of `suites` - * in order, and callback `fn(err, errSuite)`. - * - * @api private - * @param {string} name - * @param {Array} suites - * @param {Function} fn - */ -Runner.prototype.hooks = function(name, suites, fn) { - var self = this; - var orig = this.suite; - - function next(suite) { - self.suite = suite; - - if (!suite) { - self.suite = orig; - return fn(); - } - - self.hook(name, function(err) { - if (err) { - var errSuite = self.suite; - self.suite = orig; - return fn(err, errSuite); - } - - next(suites.pop()); - }); - } - - next(suites.pop()); -}; - -/** - * Run hooks from the top level down. - * - * @param {String} name - * @param {Function} fn - * @api private - */ -Runner.prototype.hookUp = function(name, fn) { - var suites = [this.suite].concat(this.parents()).reverse(); - this.hooks(name, suites, fn); -}; - -/** - * Run hooks from the bottom up. - * - * @param {String} name - * @param {Function} fn - * @api private - */ -Runner.prototype.hookDown = function(name, fn) { - var suites = [this.suite].concat(this.parents()); - this.hooks(name, suites, fn); -}; - -/** - * Return an array of parent Suites from - * closest to furthest. - * - * @return {Array} - * @api private - */ -Runner.prototype.parents = function() { - var suite = this.suite; - var suites = []; - while (suite.parent) { - suite = suite.parent; - suites.push(suite); - } - return suites; -}; - -/** - * Run the current test and callback `fn(err)`. - * - * @param {Function} fn - * @api private - */ -Runner.prototype.runTest = function(fn) { - var self = this; - var test = this.test; - - if (this.asyncOnly) { - test.asyncOnly = true; - } - - if (this.allowUncaught) { - test.allowUncaught = true; - return test.run(fn); - } - try { - test.on('error', function(err) { - self.fail(test, err); - }); - test.run(fn); - } catch (err) { - fn(err); - } -}; - -/** - * Run tests in the given `suite` and invoke the callback `fn()` when complete. - * - * @api private - * @param {Suite} suite - * @param {Function} fn - */ -Runner.prototype.runTests = function(suite, fn) { - var self = this; - var tests = suite.tests.slice(); - var test; - - function hookErr(_, errSuite, after) { - // before/after Each hook for errSuite failed: - var orig = self.suite; - - // for failed 'after each' hook start from errSuite parent, - // otherwise start from errSuite itself - self.suite = after ? errSuite.parent : errSuite; - - if (self.suite) { - // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { - self.suite = orig; - // some hooks may fail even now - if (err2) { - return hookErr(err2, errSuite2, true); - } - // report error suite - fn(errSuite); - }); - } else { - // there is no need calling other 'after each' hooks - self.suite = orig; - fn(errSuite); - } - } - - function next(err, errSuite) { - // if we bail after first err - if (self.failures && suite._bail) { - return fn(); - } - - if (self._abort) { - return fn(); - } - - if (err) { - return hookErr(err, errSuite, true); - } - - // next test - test = tests.shift(); - - // all done - if (!test) { - return fn(); - } - - // grep - var match = self._grep.test(test.fullTitle()); - if (self._invert) { - match = !match; - } - if (!match) { - // Run immediately only if we have defined a grep. When we - // define a grep — It can cause maximum callstack error if - // the grep is doing a large recursive loop by neglecting - // all tests. The run immediately function also comes with - // a performance cost. So we don't want to run immediately - // if we run the whole test suite, because running the whole - // test suite don't do any immediate recursive loops. Thus, - // allowing a JS runtime to breathe. - if (self._grep !== self._defaultGrep) { - Runner.immediately(next); - } else { - next(); - } - return; - } - - // pending - if (test.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - - // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite) { - if (suite.pending) { - self.emit('pending', test); - self.emit('test end', test); - return next(); - } - if (err) { - return hookErr(err, errSuite, false); - } - self.currentRunnable = self.test; - self.runTest(function(err) { - test = self.test; - - if (err) { - if (err instanceof Pending) { - self.emit('pending', test); - } else { - self.fail(test, err); - } - self.emit('test end', test); - - if (err instanceof Pending) { - return next(); - } - - return self.hookUp('afterEach', next); - } - - test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); - }); - }); - } - - this.next = next; - this.hookErr = hookErr; - next(); -}; - -/** - * Run the given `suite` and invoke the callback `fn()` when complete. - * - * @api private - * @param {Suite} suite - * @param {Function} fn - */ -Runner.prototype.runSuite = function(suite, fn) { - var i = 0; - var self = this; - var total = this.grepTotal(suite); - var afterAllHookCalled = false; - - debug('run suite %s', suite.fullTitle()); - - if (!total || (self.failures && suite._bail)) { - return fn(); - } - - this.emit('suite', this.suite = suite); - - function next(errSuite) { - if (errSuite) { - // current suite failed on a hook from errSuite - if (errSuite === suite) { - // if errSuite is current suite - // continue to the next sibling suite - return done(); - } - // errSuite is among the parents of current suite - // stop execution of errSuite and all sub-suites - return done(errSuite); - } - - if (self._abort) { - return done(); - } - - var curr = suite.suites[i++]; - if (!curr) { - return done(); - } - - // Avoid grep neglecting large number of tests causing a - // huge recursive loop and thus a maximum call stack error. - // See comment in `this.runTests()` for more information. - if (self._grep !== self._defaultGrep) { - Runner.immediately(function() { - self.runSuite(curr, next); - }); - } else { - self.runSuite(curr, next); - } - } - - function done(errSuite) { - self.suite = suite; - self.nextSuite = next; - - if (afterAllHookCalled) { - fn(errSuite); - } else { - // mark that the afterAll block has been called once - // and so can be skipped if there is an error in it. - afterAllHookCalled = true; - self.hook('afterAll', function() { - self.emit('suite end', suite); - fn(errSuite); - }); - } - } - - this.nextSuite = next; - - this.hook('beforeAll', function(err) { - if (err) { - return done(); - } - self.runTests(suite, next); - }); -}; - -/** - * Handle uncaught exceptions. - * - * @param {Error} err - * @api private - */ -Runner.prototype.uncaught = function(err) { - if (err) { - debug('uncaught exception %s', err !== function() { - return this; - }.call(err) ? err : (err.message || err)); - } else { - debug('uncaught undefined exception'); - err = undefinedError(); - } - err.uncaught = true; - - var runnable = this.currentRunnable; - - if (!runnable) { - runnable = new Runnable('Uncaught error outside test suite'); - runnable.parent = this.suite; - - if (this.started) { - this.fail(runnable, err); - } else { - // Can't recover from this failure - this.emit('start'); - this.fail(runnable, err); - this.emit('end'); - } - - return; - } - - runnable.clearTimeout(); - - // Ignore errors if complete - if (runnable.state) { - return; - } - this.fail(runnable, err); - - // recover from test - if (runnable.type === 'test') { - this.emit('test end', runnable); - this.hookUp('afterEach', this.next); - return; - } - - // recover from hooks - if (runnable.type === 'hook') { - var errSuite = this.suite; - // if hook failure is in afterEach block - if (runnable.fullTitle().indexOf('after each') > -1) { - return this.hookErr(err, errSuite, true); - } - // if hook failure is in beforeEach block - if (runnable.fullTitle().indexOf('before each') > -1) { - return this.hookErr(err, errSuite, false); - } - // if hook failure is in after or before blocks - return this.nextSuite(errSuite); - } - - // bail - this.emit('end'); -}; - -/** - * Run the root suite and invoke `fn(failures)` - * on completion. - * - * @param {Function} fn - * @return {Runner} for chaining - * @api public - * @param {Function} fn - * @return {Runner} Runner instance. - */ -Runner.prototype.run = function(fn) { - var self = this; - var rootSuite = this.suite; - - fn = fn || function() {}; - - function uncaught(err) { - self.uncaught(err); - } - - function start() { - self.started = true; - self.emit('start'); - self.runSuite(rootSuite, function() { - debug('finished running'); - self.emit('end'); - }); - } - - debug('start'); - - // callback - this.on('end', function() { - debug('end'); - process.removeListener('uncaughtException', uncaught); - fn(self.failures); - }); - - // uncaught exception - process.on('uncaughtException', uncaught); - - if (this._delay) { - // for reporters, I guess. - // might be nice to debounce some dots while we wait. - this.emit('waiting', rootSuite); - rootSuite.once('run', start); - } else { - start(); - } - - return this; -}; - -/** - * Cleanly abort execution. - * - * @api public - * @return {Runner} Runner instance. - */ -Runner.prototype.abort = function() { - debug('aborting'); - this._abort = true; - - return this; -}; - -/** - * Filter leaks with the given globals flagged as `ok`. - * - * @api private - * @param {Array} ok - * @param {Array} globals - * @return {Array} - */ -function filterLeaks(ok, globals) { - return filter(globals, function(key) { - // Firefox and Chrome exposes iframes as index inside the window object - if (/^d+/.test(key)) { - return false; - } - - // in firefox - // if runner runs in an iframe, this iframe's window.getInterface method not init at first - // it is assigned in some seconds - if (global.navigator && (/^getInterface/).test(key)) { - return false; - } - - // an iframe could be approached by window[iframeIndex] - // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && (/^\d+/).test(key)) { - return false; - } - - // Opera and IE expose global variables for HTML element IDs (issue #243) - if (/^mocha-/.test(key)) { - return false; - } - - var matched = filter(ok, function(ok) { - if (~ok.indexOf('*')) { - return key.indexOf(ok.split('*')[0]) === 0; - } - return key === ok; - }); - return !matched.length && (!global.navigator || key !== 'onerror'); - }); -} - -/** - * Array of globals dependent on the environment. - * - * @return {Array} - * @api private - */ -function extraGlobals() { - if (typeof process === 'object' && typeof process.version === 'string') { - var parts = process.version.split('.'); - var nodeVersion = utils.reduce(parts, function(a, v) { - return a << 8 | v; - }); - - // 'errno' was renamed to process._errno in v0.9.11. - - if (nodeVersion < 0x00090B) { - return ['errno']; - } - } - - return []; -} - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./pending":16,"./runnable":35,"./utils":39,"_process":51,"debug":2,"events":3}],37:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var Hook = require('./hook'); -var utils = require('./utils'); -var inherits = utils.inherits; -var debug = require('debug')('mocha:suite'); -var milliseconds = require('./ms'); - -/** - * Expose `Suite`. - */ - -exports = module.exports = Suite; - -/** - * Create a new `Suite` with the given `title` and parent `Suite`. When a suite - * with the same title is already present, that suite is returned to provide - * nicer reporter and more flexible meta-testing. - * - * @api public - * @param {Suite} parent - * @param {string} title - * @return {Suite} - */ -exports.create = function(parent, title) { - var suite = new Suite(title, parent.ctx); - suite.parent = parent; - if (parent.pending) { - suite.pending = true; - } - title = suite.fullTitle(); - parent.addSuite(suite); - return suite; -}; - -/** - * Initialize a new `Suite` with the given `title` and `ctx`. - * - * @api private - * @param {string} title - * @param {Context} parentContext - */ -function Suite(title, parentContext) { - this.title = title; - function Context() {} - Context.prototype = parentContext; - this.ctx = new Context(); - this.suites = []; - this.tests = []; - this.pending = false; - this._beforeEach = []; - this._beforeAll = []; - this._afterEach = []; - this._afterAll = []; - this.root = !title; - this._timeout = 2000; - this._enableTimeouts = true; - this._slow = 75; - this._bail = false; - this.delayed = false; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ -inherits(Suite, EventEmitter); - -/** - * Return a clone of this `Suite`. - * - * @api private - * @return {Suite} - */ -Suite.prototype.clone = function() { - var suite = new Suite(this.title); - debug('clone'); - suite.ctx = this.ctx; - suite.timeout(this.timeout()); - suite.enableTimeouts(this.enableTimeouts()); - suite.slow(this.slow()); - suite.bail(this.bail()); - return suite; -}; - -/** - * Set timeout `ms` or short-hand such as "2s". - * - * @api private - * @param {number|string} ms - * @return {Suite|number} for chaining - */ -Suite.prototype.timeout = function(ms) { - if (!arguments.length) { - return this._timeout; - } - if (ms.toString() === '0') { - this._enableTimeouts = false; - } - if (typeof ms === 'string') { - ms = milliseconds(ms); - } - debug('timeout %d', ms); - this._timeout = parseInt(ms, 10); - return this; -}; - -/** - * Set timeout to `enabled`. - * - * @api private - * @param {boolean} enabled - * @return {Suite|boolean} self or enabled - */ -Suite.prototype.enableTimeouts = function(enabled) { - if (!arguments.length) { - return this._enableTimeouts; - } - debug('enableTimeouts %s', enabled); - this._enableTimeouts = enabled; - return this; -}; - -/** - * Set slow `ms` or short-hand such as "2s". - * - * @api private - * @param {number|string} ms - * @return {Suite|number} for chaining - */ -Suite.prototype.slow = function(ms) { - if (!arguments.length) { - return this._slow; - } - if (typeof ms === 'string') { - ms = milliseconds(ms); - } - debug('slow %d', ms); - this._slow = ms; - return this; -}; - -/** - * Sets whether to bail after first error. - * - * @api private - * @param {boolean} bail - * @return {Suite|number} for chaining - */ -Suite.prototype.bail = function(bail) { - if (!arguments.length) { - return this._bail; - } - debug('bail %s', bail); - this._bail = bail; - return this; -}; - -/** - * Run `fn(test[, done])` before running tests. - * - * @api private - * @param {string} title - * @param {Function} fn - * @return {Suite} for chaining - */ -Suite.prototype.beforeAll = function(title, fn) { - if (this.pending) { - return this; - } - if (typeof title === 'function') { - fn = title; - title = fn.name; - } - title = '"before all" hook' + (title ? ': ' + title : ''); - - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeAll.push(hook); - this.emit('beforeAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after running tests. - * - * @api private - * @param {string} title - * @param {Function} fn - * @return {Suite} for chaining - */ -Suite.prototype.afterAll = function(title, fn) { - if (this.pending) { - return this; - } - if (typeof title === 'function') { - fn = title; - title = fn.name; - } - title = '"after all" hook' + (title ? ': ' + title : ''); - - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterAll.push(hook); - this.emit('afterAll', hook); - return this; -}; - -/** - * Run `fn(test[, done])` before each test case. - * - * @api private - * @param {string} title - * @param {Function} fn - * @return {Suite} for chaining - */ -Suite.prototype.beforeEach = function(title, fn) { - if (this.pending) { - return this; - } - if (typeof title === 'function') { - fn = title; - title = fn.name; - } - title = '"before each" hook' + (title ? ': ' + title : ''); - - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._beforeEach.push(hook); - this.emit('beforeEach', hook); - return this; -}; - -/** - * Run `fn(test[, done])` after each test case. - * - * @api private - * @param {string} title - * @param {Function} fn - * @return {Suite} for chaining - */ -Suite.prototype.afterEach = function(title, fn) { - if (this.pending) { - return this; - } - if (typeof title === 'function') { - fn = title; - title = fn.name; - } - title = '"after each" hook' + (title ? ': ' + title : ''); - - var hook = new Hook(title, fn); - hook.parent = this; - hook.timeout(this.timeout()); - hook.enableTimeouts(this.enableTimeouts()); - hook.slow(this.slow()); - hook.ctx = this.ctx; - this._afterEach.push(hook); - this.emit('afterEach', hook); - return this; -}; - -/** - * Add a test `suite`. - * - * @api private - * @param {Suite} suite - * @return {Suite} for chaining - */ -Suite.prototype.addSuite = function(suite) { - suite.parent = this; - suite.timeout(this.timeout()); - suite.enableTimeouts(this.enableTimeouts()); - suite.slow(this.slow()); - suite.bail(this.bail()); - this.suites.push(suite); - this.emit('suite', suite); - return this; -}; - -/** - * Add a `test` to this suite. - * - * @api private - * @param {Test} test - * @return {Suite} for chaining - */ -Suite.prototype.addTest = function(test) { - test.parent = this; - test.timeout(this.timeout()); - test.enableTimeouts(this.enableTimeouts()); - test.slow(this.slow()); - test.ctx = this.ctx; - this.tests.push(test); - this.emit('test', test); - return this; -}; - -/** - * Return the full title generated by recursively concatenating the parent's - * full title. - * - * @api public - * @return {string} - */ -Suite.prototype.fullTitle = function() { - if (this.parent) { - var full = this.parent.fullTitle(); - if (full) { - return full + ' ' + this.title; - } - } - return this.title; -}; - -/** - * Return the total number of tests. - * - * @api public - * @return {number} - */ -Suite.prototype.total = function() { - return utils.reduce(this.suites, function(sum, suite) { - return sum + suite.total(); - }, 0) + this.tests.length; -}; - -/** - * Iterates through each suite recursively to find all tests. Applies a - * function in the format `fn(test)`. - * - * @api private - * @param {Function} fn - * @return {Suite} - */ -Suite.prototype.eachTest = function(fn) { - utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite) { - suite.eachTest(fn); - }); - return this; -}; - -/** - * This will run the root suite if we happen to be running in delayed mode. - */ -Suite.prototype.run = function run() { - if (this.root) { - this.emit('run'); - } -}; - -},{"./hook":7,"./ms":15,"./utils":39,"debug":2,"events":3}],38:[function(require,module,exports){ -/** - * Module dependencies. - */ - -var Runnable = require('./runnable'); -var inherits = require('./utils').inherits; - -/** - * Expose `Test`. - */ - -module.exports = Test; - -/** - * Initialize a new `Test` with the given `title` and callback `fn`. - * - * @api private - * @param {String} title - * @param {Function} fn - */ -function Test(title, fn) { - Runnable.call(this, title, fn); - this.pending = !fn; - this.type = 'test'; -} - -/** - * Inherit from `Runnable.prototype`. - */ -inherits(Test, Runnable); - -},{"./runnable":35,"./utils":39}],39:[function(require,module,exports){ -(function (process,Buffer){ -/* eslint-env browser */ - -/** - * Module dependencies. - */ - -var basename = require('path').basename; -var debug = require('debug')('mocha:watch'); -var exists = require('fs').existsSync || require('path').existsSync; -var glob = require('glob'); -var join = require('path').join; -var readdirSync = require('fs').readdirSync; -var statSync = require('fs').statSync; -var watchFile = require('fs').watchFile; - -/** - * Ignored directories. - */ - -var ignore = ['node_modules', '.git']; - -exports.inherits = require('util').inherits; - -/** - * Escape special characters in the given string of html. - * - * @api private - * @param {string} html - * @return {string} - */ -exports.escape = function(html) { - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Array#forEach (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} scope - */ -exports.forEach = function(arr, fn, scope) { - for (var i = 0, l = arr.length; i < l; i++) { - fn.call(scope, arr[i], i); - } -}; - -/** - * Test if the given obj is type of string. - * - * @api private - * @param {Object} obj - * @return {boolean} - */ -exports.isString = function(obj) { - return typeof obj === 'string'; -}; - -/** - * Array#map (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} scope - * @return {Array} - */ -exports.map = function(arr, fn, scope) { - var result = []; - for (var i = 0, l = arr.length; i < l; i++) { - result.push(fn.call(scope, arr[i], i, arr)); - } - return result; -}; - -/** - * Array#indexOf (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Object} obj to find index of - * @param {number} start - * @return {number} - */ -exports.indexOf = function(arr, obj, start) { - for (var i = start || 0, l = arr.length; i < l; i++) { - if (arr[i] === obj) { - return i; - } - } - return -1; -}; - -/** - * Array#reduce (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @param {Object} val Initial value. - * @return {*} - */ -exports.reduce = function(arr, fn, val) { - var rval = val; - - for (var i = 0, l = arr.length; i < l; i++) { - rval = fn(rval, arr[i], i, arr); - } - - return rval; -}; - -/** - * Array#filter (<=IE8) - * - * @api private - * @param {Array} arr - * @param {Function} fn - * @return {Array} - */ -exports.filter = function(arr, fn) { - var ret = []; - - for (var i = 0, l = arr.length; i < l; i++) { - var val = arr[i]; - if (fn(val, i, arr)) { - ret.push(val); - } - } - - return ret; -}; - -/** - * Object.keys (<=IE8) - * - * @api private - * @param {Object} obj - * @return {Array} keys - */ -exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { - var keys = []; - var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8 - - for (var key in obj) { - if (has.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -/** - * Watch the given `files` for changes - * and invoke `fn(file)` on modification. - * - * @api private - * @param {Array} files - * @param {Function} fn - */ -exports.watch = function(files, fn) { - var options = { interval: 100 }; - files.forEach(function(file) { - debug('file %s', file); - watchFile(file, options, function(curr, prev) { - if (prev.mtime < curr.mtime) { - fn(file); - } - }); - }); -}; - -/** - * Array.isArray (<=IE8) - * - * @api private - * @param {Object} obj - * @return {Boolean} - */ -var isArray = typeof Array.isArray === 'function' ? Array.isArray : function(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; -}; - -/** - * Buffer.prototype.toJSON polyfill. - * - * @type {Function} - */ -if (typeof Buffer !== 'undefined' && Buffer.prototype) { - Buffer.prototype.toJSON = Buffer.prototype.toJSON || function() { - return Array.prototype.slice.call(this, 0); - }; -} - -/** - * Ignored files. - * - * @api private - * @param {string} path - * @return {boolean} - */ -function ignored(path) { - return !~ignore.indexOf(path); -} - -/** - * Lookup files in the given `dir`. - * - * @api private - * @param {string} dir - * @param {string[]} [ext=['.js']] - * @param {Array} [ret=[]] - * @return {Array} - */ -exports.files = function(dir, ext, ret) { - ret = ret || []; - ext = ext || ['js']; - - var re = new RegExp('\\.(' + ext.join('|') + ')$'); - - readdirSync(dir) - .filter(ignored) - .forEach(function(path) { - path = join(dir, path); - if (statSync(path).isDirectory()) { - exports.files(path, ext, ret); - } else if (path.match(re)) { - ret.push(path); - } - }); - - return ret; -}; - -/** - * Compute a slug from the given `str`. - * - * @api private - * @param {string} str - * @return {string} - */ -exports.slug = function(str) { - return str - .toLowerCase() - .replace(/ +/g, '-') - .replace(/[^-\w]/g, ''); -}; - -/** - * Strip the function definition from `str`, and re-indent for pre whitespace. - * - * @param {string} str - * @return {string} - */ -exports.clean = function(str) { - str = str - .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') - .replace(/^function *\(.*\)\s*{|\(.*\) *=> *{?/, '') - .replace(/\s+\}$/, ''); - - var spaces = str.match(/^\n?( *)/)[1].length; - var tabs = str.match(/^\n?(\t*)/)[1].length; - var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); - - str = str.replace(re, ''); - - return exports.trim(str); -}; - -/** - * Trim the given `str`. - * - * @api private - * @param {string} str - * @return {string} - */ -exports.trim = function(str) { - return str.replace(/^\s+|\s+$/g, ''); -}; - -/** - * Parse the given `qs`. - * - * @api private - * @param {string} qs - * @return {Object} - */ -exports.parseQuery = function(qs) { - return exports.reduce(qs.replace('?', '').split('&'), function(obj, pair) { - var i = pair.indexOf('='); - var key = pair.slice(0, i); - var val = pair.slice(++i); - - obj[key] = decodeURIComponent(val); - return obj; - }, {}); -}; - -/** - * Highlight the given string of `js`. - * - * @api private - * @param {string} js - * @return {string} - */ -function highlight(js) { - return js - .replace(//g, '>') - .replace(/\/\/(.*)/gm, '//$1') - .replace(/('.*?')/gm, '$1') - .replace(/(\d+\.\d+)/gm, '$1') - .replace(/(\d+)/gm, '$1') - .replace(/\bnew[ \t]+(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1'); -} - -/** - * Highlight the contents of tag `name`. - * - * @api private - * @param {string} name - */ -exports.highlightTags = function(name) { - var code = document.getElementById('mocha').getElementsByTagName(name); - for (var i = 0, len = code.length; i < len; ++i) { - code[i].innerHTML = highlight(code[i].innerHTML); - } -}; - -/** - * If a value could have properties, and has none, this function is called, - * which returns a string representation of the empty value. - * - * Functions w/ no properties return `'[Function]'` - * Arrays w/ length === 0 return `'[]'` - * Objects w/ no properties return `'{}'` - * All else: return result of `value.toString()` - * - * @api private - * @param {*} value The value to inspect. - * @param {string} [type] The type of the value, if known. - * @returns {string} - */ -function emptyRepresentation(value, type) { - type = type || exports.type(value); - - switch (type) { - case 'function': - return '[Function]'; - case 'object': - return '{}'; - case 'array': - return '[]'; - default: - return value.toString(); - } -} - -/** - * Takes some variable and asks `Object.prototype.toString()` what it thinks it - * is. - * - * @api private - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString - * @param {*} value The value to test. - * @returns {string} - * @example - * type({}) // 'object' - * type([]) // 'array' - * type(1) // 'number' - * type(false) // 'boolean' - * type(Infinity) // 'number' - * type(null) // 'null' - * type(new Date()) // 'date' - * type(/foo/) // 'regexp' - * type('type') // 'string' - * type(global) // 'global' - */ -exports.type = function type(value) { - if (value === undefined) { - return 'undefined'; - } else if (value === null) { - return 'null'; - } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { - return 'buffer'; - } - return Object.prototype.toString.call(value) - .replace(/^\[.+\s(.+?)\]$/, '$1') - .toLowerCase(); -}; - -/** - * Stringify `value`. Different behavior depending on type of value: - * - * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively. - * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes. - * - If `value` is an *empty* object, function, or array, return result of function - * {@link emptyRepresentation}. - * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of - * JSON.stringify(). - * - * @api private - * @see exports.type - * @param {*} value - * @return {string} - */ -exports.stringify = function(value) { - var type = exports.type(value); - - if (!~exports.indexOf(['object', 'array', 'function'], type)) { - if (type !== 'buffer') { - return jsonStringify(value); - } - var json = value.toJSON(); - // Based on the toJSON result - return jsonStringify(json.data && json.type ? json.data : json, 2) - .replace(/,(\n|$)/g, '$1'); - } - - for (var prop in value) { - if (Object.prototype.hasOwnProperty.call(value, prop)) { - return jsonStringify(exports.canonicalize(value), 2).replace(/,(\n|$)/g, '$1'); - } - } - - return emptyRepresentation(value, type); -}; - -/** - * like JSON.stringify but more sense. - * - * @api private - * @param {Object} object - * @param {number=} spaces - * @param {number=} depth - * @returns {*} - */ -function jsonStringify(object, spaces, depth) { - if (typeof spaces === 'undefined') { - // primitive types - return _stringify(object); - } - - depth = depth || 1; - var space = spaces * depth; - var str = isArray(object) ? '[' : '{'; - var end = isArray(object) ? ']' : '}'; - var length = object.length || exports.keys(object).length; - // `.repeat()` polyfill - function repeat(s, n) { - return new Array(n).join(s); - } - - function _stringify(val) { - switch (exports.type(val)) { - case 'null': - case 'undefined': - val = '[' + val + ']'; - break; - case 'array': - case 'object': - val = jsonStringify(val, spaces, depth + 1); - break; - case 'boolean': - case 'regexp': - case 'number': - val = val === 0 && (1 / val) === -Infinity // `-0` - ? '-0' - : val.toString(); - break; - case 'date': - var sDate = isNaN(val.getTime()) // Invalid date - ? val.toString() - : val.toISOString(); - val = '[Date: ' + sDate + ']'; - break; - case 'buffer': - var json = val.toJSON(); - // Based on the toJSON result - json = json.data && json.type ? json.data : json; - val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']'; - break; - default: - val = (val === '[Function]' || val === '[Circular]') - ? val - : JSON.stringify(val); // string - } - return val; - } - - for (var i in object) { - if (!object.hasOwnProperty(i)) { - continue; // not my business - } - --length; - str += '\n ' + repeat(' ', space) - + (isArray(object) ? '' : '"' + i + '": ') // key - + _stringify(object[i]) // value - + (length ? ',' : ''); // comma - } - - return str - // [], {} - + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); -} - -/** - * Test if a value is a buffer. - * - * @api private - * @param {*} value The value to test. - * @return {boolean} True if `value` is a buffer, otherwise false - */ -exports.isBuffer = function(value) { - return typeof Buffer !== 'undefined' && Buffer.isBuffer(value); -}; - -/** - * Return a new Thing that has the keys in sorted order. Recursive. - * - * If the Thing... - * - has already been seen, return string `'[Circular]'` - * - is `undefined`, return string `'[undefined]'` - * - is `null`, return value `null` - * - is some other primitive, return the value - * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method - * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again. - * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()` - * - * @api private - * @see {@link exports.stringify} - * @param {*} value Thing to inspect. May or may not have properties. - * @param {Array} [stack=[]] Stack of seen values - * @return {(Object|Array|Function|string|undefined)} - */ -exports.canonicalize = function(value, stack) { - var canonicalizedObj; - /* eslint-disable no-unused-vars */ - var prop; - /* eslint-enable no-unused-vars */ - var type = exports.type(value); - function withStack(value, fn) { - stack.push(value); - fn(); - stack.pop(); - } - - stack = stack || []; - - if (exports.indexOf(stack, value) !== -1) { - return '[Circular]'; - } - - switch (type) { - case 'undefined': - case 'buffer': - case 'null': - canonicalizedObj = value; - break; - case 'array': - withStack(value, function() { - canonicalizedObj = exports.map(value, function(item) { - return exports.canonicalize(item, stack); - }); - }); - break; - case 'function': - /* eslint-disable guard-for-in */ - for (prop in value) { - canonicalizedObj = {}; - break; - } - /* eslint-enable guard-for-in */ - if (!canonicalizedObj) { - canonicalizedObj = emptyRepresentation(value, type); - break; - } - /* falls through */ - case 'object': - canonicalizedObj = canonicalizedObj || {}; - withStack(value, function() { - exports.forEach(exports.keys(value).sort(), function(key) { - canonicalizedObj[key] = exports.canonicalize(value[key], stack); - }); - }); - break; - case 'date': - case 'number': - case 'regexp': - case 'boolean': - canonicalizedObj = value; - break; - default: - canonicalizedObj = value.toString(); - } - - return canonicalizedObj; -}; - -/** - * Lookup file names at the given `path`. - * - * @api public - * @param {string} path Base path to start searching from. - * @param {string[]} extensions File extensions to look for. - * @param {boolean} recursive Whether or not to recurse into subdirectories. - * @return {string[]} An array of paths. - */ -exports.lookupFiles = function lookupFiles(path, extensions, recursive) { - var files = []; - var re = new RegExp('\\.(' + extensions.join('|') + ')$'); - - if (!exists(path)) { - if (exists(path + '.js')) { - path += '.js'; - } else { - files = glob.sync(path); - if (!files.length) { - throw new Error("cannot resolve path (or pattern) '" + path + "'"); - } - return files; - } - } - - try { - var stat = statSync(path); - if (stat.isFile()) { - return path; - } - } catch (err) { - // ignore error - return; - } - - readdirSync(path).forEach(function(file) { - file = join(path, file); - try { - var stat = statSync(file); - if (stat.isDirectory()) { - if (recursive) { - files = files.concat(lookupFiles(file, extensions, recursive)); - } - return; - } - } catch (err) { - // ignore error - return; - } - if (!stat.isFile() || !re.test(file) || basename(file)[0] === '.') { - return; - } - files.push(file); - }); - - return files; -}; - -/** - * Generate an undefined error with a message warning the user. - * - * @return {Error} - */ - -exports.undefinedError = function() { - return new Error('Caught undefined error, did you throw without specifying what?'); -}; - -/** - * Generate an undefined error if `err` is not defined. - * - * @param {Error} err - * @return {Error} - */ - -exports.getError = function(err) { - return err || exports.undefinedError(); -}; - -/** - * @summary - * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`) - * @description - * When invoking this function you get a filter function that get the Error.stack as an input, - * and return a prettify output. - * (i.e: strip Mocha and internal node functions from stack trace). - * @returns {Function} - */ -exports.stackTraceFilter = function() { - // TODO: Replace with `process.browser` - var slash = '/'; - var is = typeof document === 'undefined' ? { node: true } : { browser: true }; - var cwd = is.node - ? process.cwd() + slash - : (typeof location === 'undefined' ? window.location : location).href.replace(/\/[^\/]*$/, '/'); - - function isMochaInternal(line) { - return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) - || (~line.indexOf('components' + slash + 'mochajs' + slash)) - || (~line.indexOf('components' + slash + 'mocha' + slash)) - || (~line.indexOf(slash + 'mocha.js')); - } - - function isNodeInternal(line) { - return (~line.indexOf('(timers.js:')) - || (~line.indexOf('(events.js:')) - || (~line.indexOf('(node.js:')) - || (~line.indexOf('(module.js:')) - || (~line.indexOf('GeneratorFunctionPrototype.next (native)')) - || false; - } - - return function(stack) { - stack = stack.split('\n'); - - stack = exports.reduce(stack, function(list, line) { - if (isMochaInternal(line)) { - return list; - } - - if (is.node && isNodeInternal(line)) { - return list; - } - - // Clean up cwd(absolute) - list.push(line.replace(cwd, '')); - return list; - }, []); - - return stack.join('\n'); - }; -}; - -}).call(this,require('_process'),require("buffer").Buffer) -},{"_process":51,"buffer":43,"debug":2,"fs":41,"glob":41,"path":41,"util":66}],40:[function(require,module,exports){ -(function (process){ -var WritableStream = require('stream').Writable -var inherits = require('util').inherits - -module.exports = BrowserStdout - - -inherits(BrowserStdout, WritableStream) - -function BrowserStdout(opts) { - if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts) - - opts = opts || {} - WritableStream.call(this, opts) - this.label = (opts.label !== undefined) ? opts.label : 'stdout' -} - -BrowserStdout.prototype._write = function(chunks, encoding, cb) { - var output = chunks.toString ? chunks.toString() : chunks - if (this.label === false) { - console.log(output) - } else { - console.log(this.label+':', output) - } - process.nextTick(cb) -} - -}).call(this,require('_process')) -},{"_process":51,"stream":63,"util":66}],41:[function(require,module,exports){ - -},{}],42:[function(require,module,exports){ -arguments[4][41][0].apply(exports,arguments) -},{"dup":41}],43:[function(require,module,exports){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -var base64 = require('base64-js') -var ieee754 = require('ieee754') -var isArray = require('is-array') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 // not used by this implementation - -var rootParent = {} - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property - * on objects. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = (function () { - function Bar () {} - try { - var arr = new Uint8Array(1) - arr.foo = function () { return 42 } - arr.constructor = Bar - return arr.foo() === 42 && // typed array instances can be augmented - arr.constructor === Bar && // constructor can be set - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -})() - -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} - -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (arg) { - if (!(this instanceof Buffer)) { - // Avoid going through an ArgumentsAdaptorTrampoline in the common case. - if (arguments.length > 1) return new Buffer(arg, arguments[1]) - return new Buffer(arg) - } - - this.length = 0 - this.parent = undefined - - // Common case. - if (typeof arg === 'number') { - return fromNumber(this, arg) - } - - // Slightly less common case. - if (typeof arg === 'string') { - return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') - } - - // Unusual. - return fromObject(this, arg) -} - -function fromNumber (that, length) { - that = allocate(that, length < 0 ? 0 : checked(length) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < length; i++) { - that[i] = 0 - } - } - return that -} - -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' - - // Assumption: byteLength() return value is always < kMaxLength. - var length = byteLength(string, encoding) | 0 - that = allocate(that, length) - - that.write(string, encoding) - return that -} - -function fromObject (that, object) { - if (Buffer.isBuffer(object)) return fromBuffer(that, object) - - if (isArray(object)) return fromArray(that, object) - - if (object == null) { - throw new TypeError('must start with number, buffer, array or string') - } - - if (typeof ArrayBuffer !== 'undefined') { - if (object.buffer instanceof ArrayBuffer) { - return fromTypedArray(that, object) - } - if (object instanceof ArrayBuffer) { - return fromArrayBuffer(that, object) - } - } - - if (object.length) return fromArrayLike(that, object) - - return fromJsonObject(that, object) -} - -function fromBuffer (that, buffer) { - var length = checked(buffer.length) | 0 - that = allocate(that, length) - buffer.copy(that, 0, 0, length) - return that -} - -function fromArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -// Duplicate of fromArray() to keep fromArray() monomorphic. -function fromTypedArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - // Truncating the elements is probably not what people expect from typed - // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior - // of the old Buffer constructor. - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -function fromArrayBuffer (that, array) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - array.byteLength - that = Buffer._augment(new Uint8Array(array)) - } else { - // Fallback: Return an object instance of the Buffer class - that = fromTypedArray(that, new Uint8Array(array)) - } - return that -} - -function fromArrayLike (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. -// Returns a zero-length buffer for inputs that don't conform to the spec. -function fromJsonObject (that, object) { - var array - var length = 0 - - if (object.type === 'Buffer' && isArray(object.data)) { - array = object.data - length = checked(array.length) | 0 - } - that = allocate(that, length) - - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -function allocate (that, length) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = Buffer._augment(new Uint8Array(length)) - } else { - // Fallback: Return an object instance of the Buffer class - that.length = length - that._isBuffer = true - } - - var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 - if (fromPool) that.parent = rootParent - - return that -} - -function checked (length) { - // Note: cannot use `length < kMaxLength` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (subject, encoding) { - if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) - - var buf = new Buffer(subject, encoding) - delete buf.parent - return buf -} - -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - var i = 0 - var len = Math.min(x, y) - while (i < len) { - if (a[i] !== b[i]) break - - ++i - } - - if (i !== len) { - x = a[i] - y = b[i] - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') - - if (list.length === 0) { - return new Buffer(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; i++) { - length += list[i].length - } - } - - var buf = new Buffer(length) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length - } - return buf -} - -function byteLength (string, encoding) { - if (typeof string !== 'string') string = '' + string - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'binary': - // Deprecated - case 'raw': - case 'raws': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -// pre-set for values that may exist in the future -Buffer.prototype.length = undefined -Buffer.prototype.parent = undefined - -function slowToString (encoding, start, end) { - var loweredCase = false - - start = start | 0 - end = end === undefined || end === Infinity ? this.length : end | 0 - - if (!encoding) encoding = 'utf8' - if (start < 0) start = 0 - if (end > this.length) end = this.length - if (end <= start) return '' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'binary': - return binarySlice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return 0 - return Buffer.compare(this, b) -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset) { - if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff - else if (byteOffset < -0x80000000) byteOffset = -0x80000000 - byteOffset >>= 0 - - if (this.length === 0) return -1 - if (byteOffset >= this.length) return -1 - - // Negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) - - if (typeof val === 'string') { - if (val.length === 0) return -1 // special case: looking for empty string always fails - return String.prototype.indexOf.call(this, val, byteOffset) - } - if (Buffer.isBuffer(val)) { - return arrayIndexOf(this, val, byteOffset) - } - if (typeof val === 'number') { - if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { - return Uint8Array.prototype.indexOf.call(this, val, byteOffset) - } - return arrayIndexOf(this, [ val ], byteOffset) - } - - function arrayIndexOf (arr, val, byteOffset) { - var foundIndex = -1 - for (var i = 0; byteOffset + i < arr.length; i++) { - if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex - } else { - foundIndex = -1 - } - } - return -1 - } - - throw new TypeError('val must be string, number or Buffer') -} - -// `get` is deprecated -Buffer.prototype.get = function get (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} - -// `set` is deprecated -Buffer.prototype.set = function set (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new Error('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; i++) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) throw new Error('Invalid hex string') - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function binaryWrite (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - // legacy write(string, encoding, offset, length) - remove in v0.13 - } else { - var swap = encoding - encoding = offset - offset = length | 0 - length = swap - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'binary': - return binaryWrite(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function binarySlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = Buffer._augment(this.subarray(start, end)) - } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } - } - - if (newBuf.length) newBuf.parent = this.parent || this - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = value - return offset + 1 -} - -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = value - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = value - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = value - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = value - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = value - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = value - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = value - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = value - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = value - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') - if (offset < 0) throw new RangeError('index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; i--) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; i++) { - target[i + targetStart] = this[i + start] - } - } else { - target._set(this.subarray(start, start + len), targetStart) - } - - return len -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function fill (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - if (end < start) throw new RangeError('end < start') - - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return - - if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') - if (end < 0 || end > this.length) throw new RangeError('end out of bounds') - - var i - if (typeof value === 'number') { - for (i = start; i < end; i++) { - this[i] = value - } - } else { - var bytes = utf8ToBytes(value.toString()) - var len = bytes.length - for (i = start; i < end; i++) { - this[i] = bytes[i % len] - } - } - - return this -} - -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function toArrayBuffer () { - if (typeof Uint8Array !== 'undefined') { - if (Buffer.TYPED_ARRAY_SUPPORT) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) { - buf[i] = this[i] - } - return buf.buffer - } - } else { - throw new TypeError('Buffer.toArrayBuffer not supported in this browser') - } -} - -// HELPER FUNCTIONS -// ================ - -var BP = Buffer.prototype - -/** - * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods - */ -Buffer._augment = function _augment (arr) { - arr.constructor = Buffer - arr._isBuffer = true - - // save reference to original Uint8Array set method before overwriting - arr._set = arr.set - - // deprecated - arr.get = BP.get - arr.set = BP.set - - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.equals = BP.equals - arr.compare = BP.compare - arr.indexOf = BP.indexOf - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUIntLE = BP.readUIntLE - arr.readUIntBE = BP.readUIntBE - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readIntLE = BP.readIntLE - arr.readIntBE = BP.readIntBE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUIntLE = BP.writeUIntLE - arr.writeUIntBE = BP.writeUIntBE - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeIntLE = BP.writeIntLE - arr.writeIntBE = BP.writeIntBE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer - - return arr -} - -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; i++) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -},{"base64-js":44,"ieee754":45,"is-array":46}],44:[function(require,module,exports){ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - var PLUS_URL_SAFE = '-'.charCodeAt(0) - var SLASH_URL_SAFE = '_'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS || - code === PLUS_URL_SAFE) - return 62 // '+' - if (code === SLASH || - code === SLASH_URL_SAFE) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) - -},{}],45:[function(require,module,exports){ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],46:[function(require,module,exports){ - -/** - * isArray - */ - -var isArray = Array.isArray; - -/** - * toString - */ - -var str = Object.prototype.toString; - -/** - * Whether or not the given `val` - * is an array. - * - * example: - * - * isArray([]); - * // > true - * isArray(arguments); - * // > false - * isArray(''); - * // > false - * - * @param {mixed} val - * @return {bool} - */ - -module.exports = isArray || function (val) { - return !! val && '[object Array]' == str.call(val); -}; - -},{}],47:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } - throw TypeError('Uncaught, unspecified "error" event.'); - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -},{}],48:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],49:[function(require,module,exports){ -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; - -},{}],50:[function(require,module,exports){ -exports.endianness = function () { return 'LE' }; - -exports.hostname = function () { - if (typeof location !== 'undefined') { - return location.hostname - } - else return ''; -}; - -exports.loadavg = function () { return [] }; - -exports.uptime = function () { return 0 }; - -exports.freemem = function () { - return Number.MAX_VALUE; -}; - -exports.totalmem = function () { - return Number.MAX_VALUE; -}; - -exports.cpus = function () { return [] }; - -exports.type = function () { return 'Browser' }; - -exports.release = function () { - if (typeof navigator !== 'undefined') { - return navigator.appVersion; - } - return ''; -}; - -exports.networkInterfaces -= exports.getNetworkInterfaces -= function () { return {} }; - -exports.arch = function () { return 'javascript' }; - -exports.platform = function () { return 'browser' }; - -exports.tmpdir = exports.tmpDir = function () { - return '/tmp'; -}; - -exports.EOL = '\n'; - -},{}],51:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],52:[function(require,module,exports){ -module.exports = require("./lib/_stream_duplex.js") - -},{"./lib/_stream_duplex.js":53}],53:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -module.exports = Duplex; - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} -/**/ - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -forEach(objectKeys(Writable.prototype), function(method) { - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; -}); - -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) - this.readable = false; - - if (options && options.writable === false) - this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(this.end.bind(this)); -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -}).call(this,require('_process')) -},{"./_stream_readable":55,"./_stream_writable":57,"_process":51,"core-util-is":58,"inherits":48}],54:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); -}; - -},{"./_stream_transform":56,"core-util-is":58,"inherits":48}],55:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Readable.ReadableState = ReadableState; - -var EE = require('events').EventEmitter; - -/**/ -if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -var Stream = require('stream'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var StringDecoder; - - -/**/ -var debug = require('util'); -if (debug && debug.debuglog) { - debug = debug.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - - -util.inherits(Readable, Stream); - -function ReadableState(options, stream) { - var Duplex = require('./_stream_duplex'); - - options = options || {}; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.readableObjectMode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - var Duplex = require('./_stream_duplex'); - - if (!(this instanceof Readable)) - return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; - - if (util.isString(chunk) && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (util.isNullOrUndefined(chunk)) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); - - if (!addToFront) - state.reading = false; - - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) - state.buffer.unshift(chunk); - else - state.buffer.push(chunk); - - if (state.needReadable) - emitReadable(stream); - } - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - - - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; -} - -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; - - if (state.objectMode) - return n === 0 ? 0 : 1; - - if (isNaN(n) || util.isNull(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } - - if (n <= 0) - return 0; - - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); - - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } - - return n; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - debug('read', n); - var state = this._readableState; - var nOrig = n; - - if (!util.isNumber(n) || n > 0) - state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) - endReadable(this); - else - emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) - endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } - - if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } - - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); - - var ret; - if (n > 0) - ret = fromList(n, state); - else - ret = null; - - if (util.isNull(ret)) { - state.needReadable = true; - n = 0; - } - - state.length -= n; - - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended && state.length === 0) - endReadable(this); - - if (!util.isNull(ret)) - this.emit('data', ret); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - - -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(function() { - maybeReadMore_(stream, state); - }); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - process.nextTick(endFn); - else - src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - src.removeListener('data', ondata); - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && - (!dest._writableState || dest._writableState.needDrain)) - ondrain(); - } - - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - if (false === ret) { - debug('false write response, pause', - src._readableState.awaitDrain); - src._readableState.awaitDrain++; - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); - } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) - dest.on('error', onerror); - else if (isArray(dest._events.error)) - dest._events.error.unshift(onerror); - else - dest._events.error = [onerror, dest._events.error]; - - - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) - state.awaitDrain--; - if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - - -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; - - if (!dest) - dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - // If listening to data, and it has not explicitly been paused, - // then call resume to start the flow of data on the next tick. - if (ev === 'data' && false !== this._readableState.flowing) { - this.resume(); - } - - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - var self = this; - process.nextTick(function() { - debug('readable nexttick read 0'); - self.read(0); - }); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - if (!state.reading) { - debug('resume read 0'); - this.read(0); - } - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(function() { - resume_(stream, state); - }); - } -} - -function resume_(stream, state) { - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) - stream.read(0); -} - -Readable.prototype.pause = function() { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - if (state.flowing) { - do { - var chunk = stream.read(); - } while (null !== chunk && state.flowing); - } -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function() { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function(chunk) { - debug('wrapped data'); - if (state.decoder) - chunk = state.decoder.write(chunk); - if (!chunk || !state.objectMode && !chunk.length) - return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (util.isFunction(stream[i]) && util.isUndefined(this[i])) { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - - - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; - - // nothing in the list, definitely empty. - if (list.length === 0) - return null; - - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); - - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); - - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); - - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); - - c += cpy; - } - } - } - - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - process.nextTick(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} - -}).call(this,require('_process')) -},{"./_stream_duplex":53,"_process":51,"buffer":43,"core-util-is":58,"events":47,"inherits":48,"isarray":49,"stream":63,"string_decoder/":64,"util":42}],56:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - - -function TransformState(options, stream) { - this.afterTransform = function(er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) - return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (!util.isNullOrUndefined(data)) - stream.push(data); - - if (cb) - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - - -function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); - - Duplex.call(this, options); - - this._transformState = new TransformState(options, this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - this.once('prefinish', function() { - if (util.isFunction(this._flush)) - this._flush(function(er) { - done(stream, er); - }); - else - done(stream); - }); -} - -Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error('not implemented'); -}; - -Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || - rs.needReadable || - rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function(n) { - var ts = this._transformState; - - if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - - -function done(stream, er) { - if (er) - return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var ts = stream._transformState; - - if (ws.length) - throw new Error('calling transform done when ws.length != 0'); - - if (ts.transforming) - throw new Error('calling transform done when still transforming'); - - return stream.push(null); -} - -},{"./_stream_duplex":53,"core-util-is":58,"inherits":48}],57:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. - -module.exports = Writable; - -/**/ -var Buffer = require('buffer').Buffer; -/**/ - -Writable.WritableState = WritableState; - - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Stream = require('stream'); - -util.inherits(Writable, Stream); - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} - -function WritableState(options, stream) { - var Duplex = require('./_stream_duplex'); - - options = options || {}; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.writableObjectMode; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.buffer = []; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; -} - -function Writable(options) { - var Duplex = require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) - return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; - - -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); - valid = false; - } - return valid; -} - -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (util.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; - - if (!util.isFunction(cb)) - cb = function() {}; - - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function() { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function() { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && - !state.corked && - !state.finished && - !state.bufferProcessing && - state.buffer.length) - clearBuffer(this, state); - } -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - util.isString(chunk)) { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - if (util.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) - state.needDrain = true; - - if (state.writing || state.corked) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, false, len, chunk, encoding, cb); - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) - stream._writev(chunk, state.onwrite); - else - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - state.pendingcb--; - cb(er); - }); - else { - state.pendingcb--; - cb(er); - } - - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); - - if (!finished && - !state.corked && - !state.bufferProcessing && - state.buffer.length) { - clearBuffer(stream, state); - } - - if (sync) { - process.nextTick(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - - if (stream._writev && state.buffer.length > 1) { - // Fast case, write everything using _writev() - var cbs = []; - for (var c = 0; c < state.buffer.length; c++) - cbs.push(state.buffer[c].callback); - - // count the one we are adding, as well. - // TODO(isaacs) clean this up - state.pendingcb++; - doWrite(stream, state, true, state.length, state.buffer, '', function(err) { - for (var i = 0; i < cbs.length; i++) { - state.pendingcb--; - cbs[i](err); - } - }); - - // Clear buffer - state.buffer = []; - } else { - // Slow case, write chunks one-by-one - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } - } - - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; - } - - state.bufferProcessing = false; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); - -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - - if (util.isFunction(chunk)) { - cb = chunk; - chunk = null; - encoding = null; - } else if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } - - if (!util.isNullOrUndefined(chunk)) - this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; - - -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} - -function prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); - } -} - -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else - prefinish(stream, state); - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - process.nextTick(cb); - else - stream.once('finish', cb); - } - state.ended = true; -} - -}).call(this,require('_process')) -},{"./_stream_duplex":53,"_process":51,"buffer":43,"core-util-is":58,"inherits":48,"stream":63}],58:[function(require,module,exports){ -(function (Buffer){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -function isBuffer(arg) { - return Buffer.isBuffer(arg); -} -exports.isBuffer = isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} -}).call(this,require("buffer").Buffer) -},{"buffer":43}],59:[function(require,module,exports){ -module.exports = require("./lib/_stream_passthrough.js") - -},{"./lib/_stream_passthrough.js":54}],60:[function(require,module,exports){ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = require('stream'); -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); - -},{"./lib/_stream_duplex.js":53,"./lib/_stream_passthrough.js":54,"./lib/_stream_readable.js":55,"./lib/_stream_transform.js":56,"./lib/_stream_writable.js":57,"stream":63}],61:[function(require,module,exports){ -module.exports = require("./lib/_stream_transform.js") - -},{"./lib/_stream_transform.js":56}],62:[function(require,module,exports){ -module.exports = require("./lib/_stream_writable.js") - -},{"./lib/_stream_writable.js":57}],63:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Stream; - -var EE = require('events').EventEmitter; -var inherits = require('inherits'); - -inherits(Stream, EE); -Stream.Readable = require('readable-stream/readable.js'); -Stream.Writable = require('readable-stream/writable.js'); -Stream.Duplex = require('readable-stream/duplex.js'); -Stream.Transform = require('readable-stream/transform.js'); -Stream.PassThrough = require('readable-stream/passthrough.js'); - -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; - - - -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. - -function Stream() { - EE.call(this); -} - -Stream.prototype.pipe = function(dest, options) { - var source = this; - - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); - } - } - } - - source.on('data', ondata); - - function ondrain() { - if (source.readable && source.resume) { - source.resume(); - } - } - - dest.on('drain', ondrain); - - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); - } - - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; - - dest.end(); - } - - - function onclose() { - if (didOnEnd) return; - didOnEnd = true; - - if (typeof dest.destroy === 'function') dest.destroy(); - } - - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. - } - } - - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); - - source.removeListener('error', onerror); - dest.removeListener('error', onerror); - - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); - - dest.removeListener('close', cleanup); - } - - source.on('end', cleanup); - source.on('close', cleanup); - - dest.on('close', cleanup); - - dest.emit('pipe', source); - - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; - -},{"events":47,"inherits":48,"readable-stream/duplex.js":52,"readable-stream/passthrough.js":59,"readable-stream/readable.js":60,"readable-stream/transform.js":61,"readable-stream/writable.js":62}],64:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var Buffer = require('buffer').Buffer; - -var isBufferEncoding = Buffer.isEncoding - || function(encoding) { - switch (encoding && encoding.toLowerCase()) { - case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; - default: return false; - } - } - - -function assertEncoding(encoding) { - if (encoding && !isBufferEncoding(encoding)) { - throw new Error('Unknown encoding: ' + encoding); - } -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. CESU-8 is handled as part of the UTF-8 encoding. -// -// @TODO Handling all encodings inside a single object makes it very difficult -// to reason about this code, so it should be split up in the future. -// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code -// points as used by CESU-8. -var StringDecoder = exports.StringDecoder = function(encoding) { - this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); - assertEncoding(encoding); - switch (this.encoding) { - case 'utf8': - // CESU-8 represents each of Surrogate Pair by 3-bytes - this.surrogateSize = 3; - break; - case 'ucs2': - case 'utf16le': - // UTF-16 represents each of Surrogate Pair by 2-bytes - this.surrogateSize = 2; - this.detectIncompleteChar = utf16DetectIncompleteChar; - break; - case 'base64': - // Base-64 stores 3 bytes in 4 chars, and pads the remainder. - this.surrogateSize = 3; - this.detectIncompleteChar = base64DetectIncompleteChar; - break; - default: - this.write = passThroughWrite; - return; - } - - // Enough space to store all bytes of a single character. UTF-8 needs 4 - // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). - this.charBuffer = new Buffer(6); - // Number of bytes received for the current incomplete multi-byte character. - this.charReceived = 0; - // Number of bytes expected for the current incomplete multi-byte character. - this.charLength = 0; -}; - - -// write decodes the given buffer and returns it as JS string that is -// guaranteed to not contain any partial multi-byte characters. Any partial -// character found at the end of the buffer is buffered up, and will be -// returned when calling write again with the remaining bytes. -// -// Note: Converting a Buffer containing an orphan surrogate to a String -// currently works, but converting a String to a Buffer (via `new Buffer`, or -// Buffer#write) will replace incomplete surrogates with the unicode -// replacement character. See https://codereview.chromium.org/121173009/ . -StringDecoder.prototype.write = function(buffer) { - var charStr = ''; - // if our last write ended with an incomplete multibyte character - while (this.charLength) { - // determine how many remaining bytes this buffer has to offer for this char - var available = (buffer.length >= this.charLength - this.charReceived) ? - this.charLength - this.charReceived : - buffer.length; - - // add the new bytes to the char buffer - buffer.copy(this.charBuffer, this.charReceived, 0, available); - this.charReceived += available; - - if (this.charReceived < this.charLength) { - // still not enough chars in this buffer? wait for more ... - return ''; - } - - // remove bytes belonging to the current character from the buffer - buffer = buffer.slice(available, buffer.length); - - // get the character that was split - charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); - - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - var charCode = charStr.charCodeAt(charStr.length - 1); - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - this.charLength += this.surrogateSize; - charStr = ''; - continue; - } - this.charReceived = this.charLength = 0; - - // if there are no more bytes in this buffer, just emit our char - if (buffer.length === 0) { - return charStr; - } - break; - } - - // determine and set charLength / charReceived - this.detectIncompleteChar(buffer); - - var end = buffer.length; - if (this.charLength) { - // buffer the incomplete character bytes we got - buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); - end -= this.charReceived; - } - - charStr += buffer.toString(this.encoding, 0, end); - - var end = charStr.length - 1; - var charCode = charStr.charCodeAt(end); - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - var size = this.surrogateSize; - this.charLength += size; - this.charReceived += size; - this.charBuffer.copy(this.charBuffer, size, 0, size); - buffer.copy(this.charBuffer, 0, 0, size); - return charStr.substring(0, end); - } - - // or just emit the charStr - return charStr; -}; - -// detectIncompleteChar determines if there is an incomplete UTF-8 character at -// the end of the given buffer. If so, it sets this.charLength to the byte -// length that character, and sets this.charReceived to the number of bytes -// that are available for this character. -StringDecoder.prototype.detectIncompleteChar = function(buffer) { - // determine how many bytes we have to check at the end of this buffer - var i = (buffer.length >= 3) ? 3 : buffer.length; - - // Figure out if one of the last i bytes of our buffer announces an - // incomplete char. - for (; i > 0; i--) { - var c = buffer[buffer.length - i]; - - // See http://en.wikipedia.org/wiki/UTF-8#Description - - // 110XXXXX - if (i == 1 && c >> 5 == 0x06) { - this.charLength = 2; - break; - } - - // 1110XXXX - if (i <= 2 && c >> 4 == 0x0E) { - this.charLength = 3; - break; - } - - // 11110XXX - if (i <= 3 && c >> 3 == 0x1E) { - this.charLength = 4; - break; - } - } - this.charReceived = i; -}; - -StringDecoder.prototype.end = function(buffer) { - var res = ''; - if (buffer && buffer.length) - res = this.write(buffer); - - if (this.charReceived) { - var cr = this.charReceived; - var buf = this.charBuffer; - var enc = this.encoding; - res += buf.slice(0, cr).toString(enc); - } - - return res; -}; - -function passThroughWrite(buffer) { - return buffer.toString(this.encoding); -} - -function utf16DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 2; - this.charLength = this.charReceived ? 2 : 0; -} - -function base64DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 3; - this.charLength = this.charReceived ? 3 : 0; -} - -},{"buffer":43}],65:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],66:[function(require,module,exports){ -(function (process,global){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":65,"_process":51,"inherits":48}],67:[function(require,module,exports){ -/* See LICENSE file for terms of use */ - -/* - * Text diff implementation. - * - * This library supports the following APIS: - * JsDiff.diffChars: Character by character diff - * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace - * JsDiff.diffLines: Line based diff - * - * JsDiff.diffCss: Diff targeted at CSS content - * - * These methods are based on the implementation proposed in - * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986). - * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927 - */ -(function(global, undefined) { - var objectPrototypeToString = Object.prototype.toString; - - /*istanbul ignore next*/ - function map(arr, mapper, that) { - if (Array.prototype.map) { - return Array.prototype.map.call(arr, mapper, that); - } - - var other = new Array(arr.length); - - for (var i = 0, n = arr.length; i < n; i++) { - other[i] = mapper.call(that, arr[i], i, arr); - } - return other; - } - function clonePath(path) { - return { newPos: path.newPos, components: path.components.slice(0) }; - } - function removeEmpty(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - if (array[i]) { - ret.push(array[i]); - } - } - return ret; - } - function escapeHTML(s) { - var n = s; - n = n.replace(/&/g, '&'); - n = n.replace(//g, '>'); - n = n.replace(/"/g, '"'); - - return n; - } - - // This function handles the presence of circular references by bailing out when encountering an - // object that is already on the "stack" of items being processed. - function canonicalize(obj, stack, replacementStack) { - stack = stack || []; - replacementStack = replacementStack || []; - - var i; - - for (i = 0; i < stack.length; i += 1) { - if (stack[i] === obj) { - return replacementStack[i]; - } - } - - var canonicalizedObj; - - if ('[object Array]' === objectPrototypeToString.call(obj)) { - stack.push(obj); - canonicalizedObj = new Array(obj.length); - replacementStack.push(canonicalizedObj); - for (i = 0; i < obj.length; i += 1) { - canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack); - } - stack.pop(); - replacementStack.pop(); - } else if (typeof obj === 'object' && obj !== null) { - stack.push(obj); - canonicalizedObj = {}; - replacementStack.push(canonicalizedObj); - var sortedKeys = [], - key; - for (key in obj) { - sortedKeys.push(key); - } - sortedKeys.sort(); - for (i = 0; i < sortedKeys.length; i += 1) { - key = sortedKeys[i]; - canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack); - } - stack.pop(); - replacementStack.pop(); - } else { - canonicalizedObj = obj; - } - return canonicalizedObj; - } - - function buildValues(components, newString, oldString, useLongestToken) { - var componentPos = 0, - componentLen = components.length, - newPos = 0, - oldPos = 0; - - for (; componentPos < componentLen; componentPos++) { - var component = components[componentPos]; - if (!component.removed) { - if (!component.added && useLongestToken) { - var value = newString.slice(newPos, newPos + component.count); - value = map(value, function(value, i) { - var oldValue = oldString[oldPos + i]; - return oldValue.length > value.length ? oldValue : value; - }); - - component.value = value.join(''); - } else { - component.value = newString.slice(newPos, newPos + component.count).join(''); - } - newPos += component.count; - - // Common case - if (!component.added) { - oldPos += component.count; - } - } else { - component.value = oldString.slice(oldPos, oldPos + component.count).join(''); - oldPos += component.count; - - // Reverse add and remove so removes are output first to match common convention - // The diffing algorithm is tied to add then remove output and this is the simplest - // route to get the desired output with minimal overhead. - if (componentPos && components[componentPos - 1].added) { - var tmp = components[componentPos - 1]; - components[componentPos - 1] = components[componentPos]; - components[componentPos] = tmp; - } - } - } - - return components; - } - - function Diff(ignoreWhitespace) { - this.ignoreWhitespace = ignoreWhitespace; - } - Diff.prototype = { - diff: function(oldString, newString, callback) { - var self = this; - - function done(value) { - if (callback) { - setTimeout(function() { callback(undefined, value); }, 0); - return true; - } else { - return value; - } - } - - // Handle the identity case (this is due to unrolling editLength == 0 - if (newString === oldString) { - return done([{ value: newString }]); - } - if (!newString) { - return done([{ value: oldString, removed: true }]); - } - if (!oldString) { - return done([{ value: newString, added: true }]); - } - - newString = this.tokenize(newString); - oldString = this.tokenize(oldString); - - var newLen = newString.length, oldLen = oldString.length; - var editLength = 1; - var maxEditLength = newLen + oldLen; - var bestPath = [{ newPos: -1, components: [] }]; - - // Seed editLength = 0, i.e. the content starts with the same values - var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); - if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { - // Identity per the equality and tokenizer - return done([{value: newString.join('')}]); - } - - // Main worker method. checks all permutations of a given edit length for acceptance. - function execEditLength() { - for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { - var basePath; - var addPath = bestPath[diagonalPath - 1], - removePath = bestPath[diagonalPath + 1], - oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; - if (addPath) { - // No one else is going to attempt to use this value, clear it - bestPath[diagonalPath - 1] = undefined; - } - - var canAdd = addPath && addPath.newPos + 1 < newLen, - canRemove = removePath && 0 <= oldPos && oldPos < oldLen; - if (!canAdd && !canRemove) { - // If this path is a terminal then prune - bestPath[diagonalPath] = undefined; - continue; - } - - // Select the diagonal that we want to branch from. We select the prior - // path whose position in the new string is the farthest from the origin - // and does not pass the bounds of the diff graph - if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); - self.pushComponent(basePath.components, undefined, true); - } else { - basePath = addPath; // No need to clone, we've pulled it from the list - basePath.newPos++; - self.pushComponent(basePath.components, true, undefined); - } - - oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); - - // If we have hit the end of both strings, then we are done - if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) { - return done(buildValues(basePath.components, newString, oldString, self.useLongestToken)); - } else { - // Otherwise track this path as a potential candidate and continue. - bestPath[diagonalPath] = basePath; - } - } - - editLength++; - } - - // Performs the length of edit iteration. Is a bit fugly as this has to support the - // sync and async mode which is never fun. Loops over execEditLength until a value - // is produced. - if (callback) { - (function exec() { - setTimeout(function() { - // This should not happen, but we want to be safe. - /*istanbul ignore next */ - if (editLength > maxEditLength) { - return callback(); - } - - if (!execEditLength()) { - exec(); - } - }, 0); - }()); - } else { - while (editLength <= maxEditLength) { - var ret = execEditLength(); - if (ret) { - return ret; - } - } - } - }, - - pushComponent: function(components, added, removed) { - var last = components[components.length - 1]; - if (last && last.added === added && last.removed === removed) { - // We need to clone here as the component clone operation is just - // as shallow array clone - components[components.length - 1] = {count: last.count + 1, added: added, removed: removed }; - } else { - components.push({count: 1, added: added, removed: removed }); - } - }, - extractCommon: function(basePath, newString, oldString, diagonalPath) { - var newLen = newString.length, - oldLen = oldString.length, - newPos = basePath.newPos, - oldPos = newPos - diagonalPath, - - commonCount = 0; - while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { - newPos++; - oldPos++; - commonCount++; - } - - if (commonCount) { - basePath.components.push({count: commonCount}); - } - - basePath.newPos = newPos; - return oldPos; - }, - - equals: function(left, right) { - var reWhitespace = /\S/; - return left === right || (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)); - }, - tokenize: function(value) { - return value.split(''); - } - }; - - var CharDiff = new Diff(); - - var WordDiff = new Diff(true); - var WordWithSpaceDiff = new Diff(); - WordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\s+|\b)/)); - }; - - var CssDiff = new Diff(true); - CssDiff.tokenize = function(value) { - return removeEmpty(value.split(/([{}:;,]|\s+)/)); - }; - - var LineDiff = new Diff(); - - var TrimmedLineDiff = new Diff(); - TrimmedLineDiff.ignoreTrim = true; - - LineDiff.tokenize = TrimmedLineDiff.tokenize = function(value) { - var retLines = [], - lines = value.split(/^/m); - for (var i = 0; i < lines.length; i++) { - var line = lines[i], - lastLine = lines[i - 1], - lastLineLastChar = lastLine && lastLine[lastLine.length - 1]; - - // Merge lines that may contain windows new lines - if (line === '\n' && lastLineLastChar === '\r') { - retLines[retLines.length - 1] = retLines[retLines.length - 1].slice(0, -1) + '\r\n'; - } else { - if (this.ignoreTrim) { - line = line.trim(); - // add a newline unless this is the last line. - if (i < lines.length - 1) { - line += '\n'; - } - } - retLines.push(line); - } - } - - return retLines; - }; - - var PatchDiff = new Diff(); - PatchDiff.tokenize = function(value) { - var ret = [], - linesAndNewlines = value.split(/(\n|\r\n)/); - - // Ignore the final empty token that occurs if the string ends with a new line - if (!linesAndNewlines[linesAndNewlines.length - 1]) { - linesAndNewlines.pop(); - } - - // Merge the content and line separators into single tokens - for (var i = 0; i < linesAndNewlines.length; i++) { - var line = linesAndNewlines[i]; - - if (i % 2) { - ret[ret.length - 1] += line; - } else { - ret.push(line); - } - } - return ret; - }; - - var SentenceDiff = new Diff(); - SentenceDiff.tokenize = function(value) { - return removeEmpty(value.split(/(\S.+?[.!?])(?=\s+|$)/)); - }; - - var JsonDiff = new Diff(); - // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a - // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: - JsonDiff.useLongestToken = true; - JsonDiff.tokenize = LineDiff.tokenize; - JsonDiff.equals = function(left, right) { - return LineDiff.equals(left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); - }; - - var JsDiff = { - Diff: Diff, - - diffChars: function(oldStr, newStr, callback) { return CharDiff.diff(oldStr, newStr, callback); }, - diffWords: function(oldStr, newStr, callback) { return WordDiff.diff(oldStr, newStr, callback); }, - diffWordsWithSpace: function(oldStr, newStr, callback) { return WordWithSpaceDiff.diff(oldStr, newStr, callback); }, - diffLines: function(oldStr, newStr, callback) { return LineDiff.diff(oldStr, newStr, callback); }, - diffTrimmedLines: function(oldStr, newStr, callback) { return TrimmedLineDiff.diff(oldStr, newStr, callback); }, - - diffSentences: function(oldStr, newStr, callback) { return SentenceDiff.diff(oldStr, newStr, callback); }, - - diffCss: function(oldStr, newStr, callback) { return CssDiff.diff(oldStr, newStr, callback); }, - diffJson: function(oldObj, newObj, callback) { - return JsonDiff.diff( - typeof oldObj === 'string' ? oldObj : JSON.stringify(canonicalize(oldObj), undefined, ' '), - typeof newObj === 'string' ? newObj : JSON.stringify(canonicalize(newObj), undefined, ' '), - callback - ); - }, - - createTwoFilesPatch: function(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader) { - var ret = []; - - if (oldFileName == newFileName) { - ret.push('Index: ' + oldFileName); - } - ret.push('==================================================================='); - ret.push('--- ' + oldFileName + (typeof oldHeader === 'undefined' ? '' : '\t' + oldHeader)); - ret.push('+++ ' + newFileName + (typeof newHeader === 'undefined' ? '' : '\t' + newHeader)); - - var diff = PatchDiff.diff(oldStr, newStr); - diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier - - // Formats a given set of lines for printing as context lines in a patch - function contextLines(lines) { - return map(lines, function(entry) { return ' ' + entry; }); - } - - // Outputs the no newline at end of file warning if needed - function eofNL(curRange, i, current) { - var last = diff[diff.length - 2], - isLast = i === diff.length - 2, - isLastOfType = i === diff.length - 3 && current.added !== last.added; - - // Figure out if this is the last line for the given file and missing NL - if (!(/\n$/.test(current.value)) && (isLast || isLastOfType)) { - curRange.push('\\ No newline at end of file'); - } - } - - var oldRangeStart = 0, newRangeStart = 0, curRange = [], - oldLine = 1, newLine = 1; - for (var i = 0; i < diff.length; i++) { - var current = diff[i], - lines = current.lines || current.value.replace(/\n$/, '').split('\n'); - current.lines = lines; - - if (current.added || current.removed) { - // If we have previous context, start with that - if (!oldRangeStart) { - var prev = diff[i - 1]; - oldRangeStart = oldLine; - newRangeStart = newLine; - - if (prev) { - curRange = contextLines(prev.lines.slice(-4)); - oldRangeStart -= curRange.length; - newRangeStart -= curRange.length; - } - } - - // Output our changes - curRange.push.apply(curRange, map(lines, function(entry) { - return (current.added ? '+' : '-') + entry; - })); - eofNL(curRange, i, current); - - // Track the updated file position - if (current.added) { - newLine += lines.length; - } else { - oldLine += lines.length; - } - } else { - // Identical context lines. Track line changes - if (oldRangeStart) { - // Close out any changes that have been output (or join overlapping) - if (lines.length <= 8 && i < diff.length - 2) { - // Overlapping - curRange.push.apply(curRange, contextLines(lines)); - } else { - // end the range and output - var contextSize = Math.min(lines.length, 4); - ret.push( - '@@ -' + oldRangeStart + ',' + (oldLine - oldRangeStart + contextSize) - + ' +' + newRangeStart + ',' + (newLine - newRangeStart + contextSize) - + ' @@'); - ret.push.apply(ret, curRange); - ret.push.apply(ret, contextLines(lines.slice(0, contextSize))); - if (lines.length <= 4) { - eofNL(ret, i, current); - } - - oldRangeStart = 0; - newRangeStart = 0; - curRange = []; - } - } - oldLine += lines.length; - newLine += lines.length; - } - } - - return ret.join('\n') + '\n'; - }, - - createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) { - return JsDiff.createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader); - }, - - applyPatch: function(oldStr, uniDiff) { - var diffstr = uniDiff.split('\n'), - hunks = [], - i = 0, - remEOFNL = false, - addEOFNL = false; - - // Skip to the first change hunk - while (i < diffstr.length && !(/^@@/.test(diffstr[i]))) { - i++; - } - - // Parse the unified diff - for (; i < diffstr.length; i++) { - if (diffstr[i][0] === '@') { - var chnukHeader = diffstr[i].split(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/); - hunks.unshift({ - start: chnukHeader[3], - oldlength: +chnukHeader[2], - removed: [], - newlength: chnukHeader[4], - added: [] - }); - } else if (diffstr[i][0] === '+') { - hunks[0].added.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === '-') { - hunks[0].removed.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === ' ') { - hunks[0].added.push(diffstr[i].substr(1)); - hunks[0].removed.push(diffstr[i].substr(1)); - } else if (diffstr[i][0] === '\\') { - if (diffstr[i - 1][0] === '+') { - remEOFNL = true; - } else if (diffstr[i - 1][0] === '-') { - addEOFNL = true; - } - } - } - - // Apply the diff to the input - var lines = oldStr.split('\n'); - for (i = hunks.length - 1; i >= 0; i--) { - var hunk = hunks[i]; - // Sanity check the input string. Bail if we don't match. - for (var j = 0; j < hunk.oldlength; j++) { - if (lines[hunk.start - 1 + j] !== hunk.removed[j]) { - return false; - } - } - Array.prototype.splice.apply(lines, [hunk.start - 1, hunk.oldlength].concat(hunk.added)); - } - - // Handle EOFNL insertion/removal - if (remEOFNL) { - while (!lines[lines.length - 1]) { - lines.pop(); - } - } else if (addEOFNL) { - lines.push(''); - } - return lines.join('\n'); - }, - - convertChangesToXML: function(changes) { - var ret = []; - for (var i = 0; i < changes.length; i++) { - var change = changes[i]; - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - - ret.push(escapeHTML(change.value)); - - if (change.added) { - ret.push(''); - } else if (change.removed) { - ret.push(''); - } - } - return ret.join(''); - }, - - // See: http://code.google.com/p/google-diff-match-patch/wiki/API - convertChangesToDMP: function(changes) { - var ret = [], - change, - operation; - for (var i = 0; i < changes.length; i++) { - change = changes[i]; - if (change.added) { - operation = 1; - } else if (change.removed) { - operation = -1; - } else { - operation = 0; - } - - ret.push([operation, change.value]); - } - return ret; - }, - - canonicalize: canonicalize - }; - - /*istanbul ignore next */ - /*global module */ - if (typeof module !== 'undefined' && module.exports) { - module.exports = JsDiff; - } else if (typeof define === 'function' && define.amd) { - /*global define */ - define([], function() { return JsDiff; }); - } else if (typeof global.JsDiff === 'undefined') { - global.JsDiff = JsDiff; - } -}(this)); - -},{}],68:[function(require,module,exports){ -'use strict'; - -var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; - -module.exports = function (str) { - if (typeof str !== 'string') { - throw new TypeError('Expected a string'); - } - - return str.replace(matchOperatorsRe, '\\$&'); -}; - -},{}],69:[function(require,module,exports){ -(function (process){ -// Growl - Copyright TJ Holowaychuk (MIT Licensed) - -/** - * Module dependencies. - */ - -var exec = require('child_process').exec - , fs = require('fs') - , path = require('path') - , exists = fs.existsSync || path.existsSync - , os = require('os') - , quote = JSON.stringify - , cmd; - -function which(name) { - var paths = process.env.PATH.split(':'); - var loc; - - for (var i = 0, len = paths.length; i < len; ++i) { - loc = path.join(paths[i], name); - if (exists(loc)) return loc; - } -} - -switch(os.type()) { - case 'Darwin': - if (which('terminal-notifier')) { - cmd = { - type: "Darwin-NotificationCenter" - , pkg: "terminal-notifier" - , msg: '-message' - , title: '-title' - , subtitle: '-subtitle' - , priority: { - cmd: '-execute' - , range: [] - } - }; - } else { - cmd = { - type: "Darwin-Growl" - , pkg: "growlnotify" - , msg: '-m' - , sticky: '--sticky' - , priority: { - cmd: '--priority' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - , "Very Low" - , "Moderate" - , "Normal" - , "High" - , "Emergency" - ] - } - }; - } - break; - case 'Linux': - cmd = { - type: "Linux" - , pkg: "notify-send" - , msg: '' - , sticky: '-t 0' - , icon: '-i' - , priority: { - cmd: '-u' - , range: [ - "low" - , "normal" - , "critical" - ] - } - }; - break; - case 'Windows_NT': - cmd = { - type: "Windows" - , pkg: "growlnotify" - , msg: '' - , sticky: '/s:true' - , title: '/t:' - , icon: '/i:' - , priority: { - cmd: '/p:' - , range: [ - -2 - , -1 - , 0 - , 1 - , 2 - ] - } - }; - break; -} - -/** - * Expose `growl`. - */ - -exports = module.exports = growl; - -/** - * Node-growl version. - */ - -exports.version = '1.4.1' - -/** - * Send growl notification _msg_ with _options_. - * - * Options: - * - * - title Notification title - * - sticky Make the notification stick (defaults to false) - * - priority Specify an int or named key (default is 0) - * - name Application name (defaults to growlnotify) - * - image - * - path to an icon sets --iconpath - * - path to an image sets --image - * - capitalized word sets --appIcon - * - filename uses extname as --icon - * - otherwise treated as --icon - * - * Examples: - * - * growl('New email') - * growl('5 new emails', { title: 'Thunderbird' }) - * growl('Email sent', function(){ - * // ... notification sent - * }) - * - * @param {string} msg - * @param {object} options - * @param {function} fn - * @api public - */ - -function growl(msg, options, fn) { - var image - , args - , options = options || {} - , fn = fn || function(){}; - - // noop - if (!cmd) return fn(new Error('growl not supported on this platform')); - args = [cmd.pkg]; - - // image - if (image = options.image) { - switch(cmd.type) { - case 'Darwin-Growl': - var flag, ext = path.extname(image).substr(1) - flag = flag || ext == 'icns' && 'iconpath' - flag = flag || /^[A-Z]/.test(image) && 'appIcon' - flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image' - flag = flag || ext && (image = ext) && 'icon' - flag = flag || 'icon' - args.push('--' + flag, quote(image)) - break; - case 'Linux': - args.push(cmd.icon, quote(image)); - // libnotify defaults to sticky, set a hint for transient notifications - if (!options.sticky) args.push('--hint=int:transient:1'); - break; - case 'Windows': - args.push(cmd.icon + quote(image)); - break; - } - } - - // sticky - if (options.sticky) args.push(cmd.sticky); - - // priority - if (options.priority) { - var priority = options.priority + ''; - var checkindexOf = cmd.priority.range.indexOf(priority); - if (~cmd.priority.range.indexOf(priority)) { - args.push(cmd.priority, options.priority); - } - } - - // name - if (options.name && cmd.type === "Darwin-Growl") { - args.push('--name', options.name); - } - - switch(cmd.type) { - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Darwin-NotificationCenter': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) { - args.push(cmd.title); - args.push(quote(options.title)); - } - if (options.subtitle) { - args.push(cmd.subtitle); - args.push(quote(options.subtitle)); - } - break; - case 'Darwin-Growl': - args.push(cmd.msg); - args.push(quote(msg)); - if (options.title) args.push(quote(options.title)); - break; - case 'Linux': - if (options.title) { - args.push(quote(options.title)); - args.push(cmd.msg); - args.push(quote(msg)); - } else { - args.push(quote(msg)); - } - break; - case 'Windows': - args.push(quote(msg)); - if (options.title) args.push(cmd.title + quote(options.title)); - break; - } - - // execute - exec(args.join(' '), fn); -}; - -}).call(this,require('_process')) -},{"_process":51,"child_process":41,"fs":41,"os":50,"path":41}],70:[function(require,module,exports){ -(function (process,global){ -/** - * Shim process.stdout. - */ - -process.stdout = require('browser-stdout')(); - -var Mocha = require('../'); - -/** - * Create a Mocha instance. - * - * @return {undefined} - */ - -var mocha = new Mocha({ reporter: 'html' }); - -/** - * Save timer references to avoid Sinon interfering (see GH-237). - */ - -var Date = global.Date; -var setTimeout = global.setTimeout; -var setInterval = global.setInterval; -var clearTimeout = global.clearTimeout; -var clearInterval = global.clearInterval; - -var uncaughtExceptionHandlers = []; - -var originalOnerrorHandler = global.onerror; - -/** - * Remove uncaughtException listener. - * Revert to original onerror handler if previously defined. - */ - -process.removeListener = function(e, fn){ - if ('uncaughtException' == e) { - if (originalOnerrorHandler) { - global.onerror = originalOnerrorHandler; - } else { - global.onerror = function() {}; - } - var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn); - if (i != -1) { uncaughtExceptionHandlers.splice(i, 1); } - } -}; - -/** - * Implements uncaughtException listener. - */ - -process.on = function(e, fn){ - if ('uncaughtException' == e) { - global.onerror = function(err, url, line){ - fn(new Error(err + ' (' + url + ':' + line + ')')); - return !mocha.allowUncaught; - }; - uncaughtExceptionHandlers.push(fn); - } -}; - -// The BDD UI is registered by default, but no UI will be functional in the -// browser without an explicit call to the overridden `mocha.ui` (see below). -// Ensure that this default UI does not expose its methods to the global scope. -mocha.suite.removeAllListeners('pre-require'); - -var immediateQueue = [] - , immediateTimeout; - -function timeslice() { - var immediateStart = new Date().getTime(); - while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { - immediateQueue.shift()(); - } - if (immediateQueue.length) { - immediateTimeout = setTimeout(timeslice, 0); - } else { - immediateTimeout = null; - } -} - -/** - * High-performance override of Runner.immediately. - */ - -Mocha.Runner.immediately = function(callback) { - immediateQueue.push(callback); - if (!immediateTimeout) { - immediateTimeout = setTimeout(timeslice, 0); - } -}; - -/** - * Function to allow assertion libraries to throw errors directly into mocha. - * This is useful when running tests in a browser because window.onerror will - * only receive the 'message' attribute of the Error. - */ -mocha.throwError = function(err) { - Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) { - fn(err); - }); - throw err; -}; - -/** - * Override ui to ensure that the ui functions are initialized. - * Normally this would happen in Mocha.prototype.loadFiles. - */ - -mocha.ui = function(ui){ - Mocha.prototype.ui.call(this, ui); - this.suite.emit('pre-require', global, null, this); - return this; -}; - -/** - * Setup mocha with the given setting options. - */ - -mocha.setup = function(opts){ - if ('string' == typeof opts) opts = { ui: opts }; - for (var opt in opts) this[opt](opts[opt]); - return this; -}; - -/** - * Run mocha, returning the Runner. - */ - -mocha.run = function(fn){ - var options = mocha.options; - mocha.globals('location'); - - var query = Mocha.utils.parseQuery(global.location.search || ''); - if (query.grep) mocha.grep(new RegExp(query.grep)); - if (query.fgrep) mocha.grep(query.fgrep); - if (query.invert) mocha.invert(); - - return Mocha.prototype.run.call(mocha, function(err){ - // The DOM Document is not available in Web Workers. - var document = global.document; - if (document && document.getElementById('mocha') && options.noHighlighting !== true) { - Mocha.utils.highlightTags('code'); - } - if (fn) fn(err); - }); -}; - -/** - * Expose the process shim. - * https://github.com/mochajs/mocha/pull/916 - */ - -Mocha.process = process; - -/** - * Expose mocha. - */ - -window.Mocha = Mocha; -window.mocha = mocha; - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../":1,"_process":51,"browser-stdout":40}]},{},[70]); +// mocha@9.2.2 transpiled to javascript ES5 +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.mocha = factory()); +})(this, (function () { 'use strict'; + + var regeneratorRuntime; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function getCjsExportFromNamespace (n) { + return n && n['default'] || n; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + var check = function (it) { + return it && it.Math == Math && it; + }; + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global_1 = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + var fails = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + // Detect IE8's incomplete defineProperty implementation + var descriptors = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; + }); + + var functionBindNative = !fails(function () { + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); + }); + + var call$2 = Function.prototype.call; + + var functionCall = functionBindNative ? call$2.bind(call$2) : function () { + return call$2.apply(call$2, arguments); + }; + + var $propertyIsEnumerable$2 = {}.propertyIsEnumerable; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getOwnPropertyDescriptor$3 = Object.getOwnPropertyDescriptor; + + // Nashorn ~ JDK8 bug + var NASHORN_BUG = getOwnPropertyDescriptor$3 && !$propertyIsEnumerable$2.call({ 1: 2 }, 1); + + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable + var f$8 = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$3(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable$2; + + var objectPropertyIsEnumerable = { + f: f$8 + }; + + var createPropertyDescriptor = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var FunctionPrototype$3 = Function.prototype; + var bind$2 = FunctionPrototype$3.bind; + var call$1 = FunctionPrototype$3.call; + var uncurryThis = functionBindNative && bind$2.bind(call$1, call$1); + + var functionUncurryThis = functionBindNative ? function (fn) { + return fn && uncurryThis(fn); + } : function (fn) { + return fn && function () { + return call$1.apply(fn, arguments); + }; + }; + + var toString$4 = functionUncurryThis({}.toString); + var stringSlice$8 = functionUncurryThis(''.slice); + + var classofRaw = function (it) { + return stringSlice$8(toString$4(it), 8, -1); + }; + + var Object$5 = global_1.Object; + var split = functionUncurryThis(''.split); + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var indexedObject = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !Object$5('z').propertyIsEnumerable(0); + }) ? function (it) { + return classofRaw(it) == 'String' ? split(it, '') : Object$5(it); + } : Object$5; + + var TypeError$m = global_1.TypeError; + + // `RequireObjectCoercible` abstract operation + // https://tc39.es/ecma262/#sec-requireobjectcoercible + var requireObjectCoercible = function (it) { + if (it == undefined) throw TypeError$m("Can't call method on " + it); + return it; + }; + + // toObject with fallback for non-array-like ES3 strings + + + + var toIndexedObject = function (it) { + return indexedObject(requireObjectCoercible(it)); + }; + + // `IsCallable` abstract operation + // https://tc39.es/ecma262/#sec-iscallable + var isCallable = function (argument) { + return typeof argument == 'function'; + }; + + var isObject$1 = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); + }; + + var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; + }; + + var getBuiltIn = function (namespace, method) { + return arguments.length < 2 ? aFunction(global_1[namespace]) : global_1[namespace] && global_1[namespace][method]; + }; + + var objectIsPrototypeOf = functionUncurryThis({}.isPrototypeOf); + + var engineUserAgent = getBuiltIn('navigator', 'userAgent') || ''; + + var process$5 = global_1.process; + var Deno = global_1.Deno; + var versions$2 = process$5 && process$5.versions || Deno && Deno.version; + var v8 = versions$2 && versions$2.v8; + var match, version$3; + + if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version$3 = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + + // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` + // so check `userAgent` even if `.v8` exists, but 0 + if (!version$3 && engineUserAgent) { + match = engineUserAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = engineUserAgent.match(/Chrome\/(\d+)/); + if (match) version$3 = +match[1]; + } + } + + var engineV8Version = version$3; + + /* eslint-disable es/no-symbol -- required for testing */ + + + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing + var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol(); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + return !String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && engineV8Version && engineV8Version < 41; + }); + + /* eslint-disable es/no-symbol -- required for testing */ + + + var useSymbolAsUid = nativeSymbol + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + var Object$4 = global_1.Object; + + var isSymbol$1 = useSymbolAsUid ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && objectIsPrototypeOf($Symbol.prototype, Object$4(it)); + }; + + var String$6 = global_1.String; + + var tryToString = function (argument) { + try { + return String$6(argument); + } catch (error) { + return 'Object'; + } + }; + + var TypeError$l = global_1.TypeError; + + // `Assert: IsCallable(argument) is true` + var aCallable = function (argument) { + if (isCallable(argument)) return argument; + throw TypeError$l(tryToString(argument) + ' is not a function'); + }; + + // `GetMethod` abstract operation + // https://tc39.es/ecma262/#sec-getmethod + var getMethod = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable(func); + }; + + var TypeError$k = global_1.TypeError; + + // `OrdinaryToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-ordinarytoprimitive + var ordinaryToPrimitive = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject$1(val = functionCall(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject$1(val = functionCall(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject$1(val = functionCall(fn, input))) return val; + throw TypeError$k("Can't convert object to primitive value"); + }; + + // eslint-disable-next-line es/no-object-defineproperty -- safe + var defineProperty$b = Object.defineProperty; + + var setGlobal = function (key, value) { + try { + defineProperty$b(global_1, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global_1[key] = value; + } return value; + }; + + var SHARED = '__core-js_shared__'; + var store$1 = global_1[SHARED] || setGlobal(SHARED, {}); + + var sharedStore = store$1; + + var shared = createCommonjsModule(function (module) { + (module.exports = function (key, value) { + return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: '3.21.1', + mode: 'global', + copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE', + source: 'https://github.com/zloirock/core-js' + }); + }); + + var Object$3 = global_1.Object; + + // `ToObject` abstract operation + // https://tc39.es/ecma262/#sec-toobject + var toObject = function (argument) { + return Object$3(requireObjectCoercible(argument)); + }; + + var hasOwnProperty$1 = functionUncurryThis({}.hasOwnProperty); + + // `HasOwnProperty` abstract operation + // https://tc39.es/ecma262/#sec-hasownproperty + var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty$1(toObject(it), key); + }; + + var id = 0; + var postfix = Math.random(); + var toString$3 = functionUncurryThis(1.0.toString); + + var uid = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$3(++id + postfix, 36); + }; + + var WellKnownSymbolsStore$1 = shared('wks'); + var Symbol$1 = global_1.Symbol; + var symbolFor = Symbol$1 && Symbol$1['for']; + var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid; + + var wellKnownSymbol = function (name) { + if (!hasOwnProperty_1(WellKnownSymbolsStore$1, name) || !(nativeSymbol || typeof WellKnownSymbolsStore$1[name] == 'string')) { + var description = 'Symbol.' + name; + if (nativeSymbol && hasOwnProperty_1(Symbol$1, name)) { + WellKnownSymbolsStore$1[name] = Symbol$1[name]; + } else if (useSymbolAsUid && symbolFor) { + WellKnownSymbolsStore$1[name] = symbolFor(description); + } else { + WellKnownSymbolsStore$1[name] = createWellKnownSymbol(description); + } + } return WellKnownSymbolsStore$1[name]; + }; + + var TypeError$j = global_1.TypeError; + var TO_PRIMITIVE$1 = wellKnownSymbol('toPrimitive'); + + // `ToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-toprimitive + var toPrimitive = function (input, pref) { + if (!isObject$1(input) || isSymbol$1(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE$1); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = functionCall(exoticToPrim, input, pref); + if (!isObject$1(result) || isSymbol$1(result)) return result; + throw TypeError$j("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); + }; + + // `ToPropertyKey` abstract operation + // https://tc39.es/ecma262/#sec-topropertykey + var toPropertyKey = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol$1(key) ? key : key + ''; + }; + + var document$3 = global_1.document; + // typeof document.createElement is 'object' in old IE + var EXISTS$1 = isObject$1(document$3) && isObject$1(document$3.createElement); + + var documentCreateElement = function (it) { + return EXISTS$1 ? document$3.createElement(it) : {}; + }; + + // Thanks to IE8 for its funny defineProperty + var ie8DomDefine = !descriptors && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(documentCreateElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; + }); + + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + var f$7 = descriptors ? $getOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (ie8DomDefine) try { + return $getOwnPropertyDescriptor$2(O, P); + } catch (error) { /* empty */ } + if (hasOwnProperty_1(O, P)) return createPropertyDescriptor(!functionCall(objectPropertyIsEnumerable.f, O, P), O[P]); + }; + + var objectGetOwnPropertyDescriptor = { + f: f$7 + }; + + // V8 ~ Chrome 36- + // https://bugs.chromium.org/p/v8/issues/detail?id=3334 + var v8PrototypeDefineBug = descriptors && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype != 42; + }); + + var String$5 = global_1.String; + var TypeError$i = global_1.TypeError; + + // `Assert: Type(argument) is Object` + var anObject = function (argument) { + if (isObject$1(argument)) return argument; + throw TypeError$i(String$5(argument) + ' is not an object'); + }; + + var TypeError$h = global_1.TypeError; + // eslint-disable-next-line es/no-object-defineproperty -- safe + var $defineProperty$1 = Object.defineProperty; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; + var ENUMERABLE = 'enumerable'; + var CONFIGURABLE$1 = 'configurable'; + var WRITABLE = 'writable'; + + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + var f$6 = descriptors ? v8PrototypeDefineBug ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor$1(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE$1 in Attributes ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty$1(O, P, Attributes); + } : $defineProperty$1 : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (ie8DomDefine) try { + return $defineProperty$1(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError$h('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + var objectDefineProperty = { + f: f$6 + }; + + var createNonEnumerableProperty = descriptors ? function (object, key, value) { + return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var functionToString$1 = functionUncurryThis(Function.toString); + + // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper + if (!isCallable(sharedStore.inspectSource)) { + sharedStore.inspectSource = function (it) { + return functionToString$1(it); + }; + } + + var inspectSource = sharedStore.inspectSource; + + var WeakMap$1 = global_1.WeakMap; + + var nativeWeakMap = isCallable(WeakMap$1) && /native code/.test(inspectSource(WeakMap$1)); + + var keys$4 = shared('keys'); + + var sharedKey = function (key) { + return keys$4[key] || (keys$4[key] = uid(key)); + }; + + var hiddenKeys$1 = {}; + + var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; + var TypeError$g = global_1.TypeError; + var WeakMap = global_1.WeakMap; + var set$2, get$1, has; + + var enforce = function (it) { + return has(it) ? get$1(it) : set$2(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject$1(it) || (state = get$1(it)).type !== TYPE) { + throw TypeError$g('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; + }; + + if (nativeWeakMap || sharedStore.state) { + var store = sharedStore.state || (sharedStore.state = new WeakMap()); + var wmget = functionUncurryThis(store.get); + var wmhas = functionUncurryThis(store.has); + var wmset = functionUncurryThis(store.set); + set$2 = function (it, metadata) { + if (wmhas(store, it)) throw new TypeError$g(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get$1 = function (it) { + return wmget(store, it) || {}; + }; + has = function (it) { + return wmhas(store, it); + }; + } else { + var STATE = sharedKey('state'); + hiddenKeys$1[STATE] = true; + set$2 = function (it, metadata) { + if (hasOwnProperty_1(it, STATE)) throw new TypeError$g(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get$1 = function (it) { + return hasOwnProperty_1(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwnProperty_1(it, STATE); + }; + } + + var internalState = { + set: set$2, + get: get$1, + has: has, + enforce: enforce, + getterFor: getterFor + }; + + var FunctionPrototype$2 = Function.prototype; + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var getDescriptor = descriptors && Object.getOwnPropertyDescriptor; + + var EXISTS = hasOwnProperty_1(FunctionPrototype$2, 'name'); + // additional protection from minified / mangled / dropped function names + var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; + var CONFIGURABLE = EXISTS && (!descriptors || (descriptors && getDescriptor(FunctionPrototype$2, 'name').configurable)); + + var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + + var redefine = createCommonjsModule(function (module) { + var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; + + var getInternalState = internalState.get; + var enforceInternalState = internalState.enforce; + var TEMPLATE = String(String).split('String'); + + (module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + var name = options && options.name !== undefined ? options.name : key; + var state; + if (isCallable(value)) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (!hasOwnProperty_1(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + createNonEnumerableProperty(value, 'name', name); + } + state = enforceInternalState(value); + if (!state.source) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } + } + if (O === global_1) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, 'toString', function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }); + }); + + var ceil = Math.ceil; + var floor$6 = Math.floor; + + // `ToIntegerOrInfinity` abstract operation + // https://tc39.es/ecma262/#sec-tointegerorinfinity + var toIntegerOrInfinity = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- safe + return number !== number || number === 0 ? 0 : (number > 0 ? floor$6 : ceil)(number); + }; + + var max$4 = Math.max; + var min$7 = Math.min; + + // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + var toAbsoluteIndex = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max$4(integer + length, 0) : min$7(integer, length); + }; + + var min$6 = Math.min; + + // `ToLength` abstract operation + // https://tc39.es/ecma262/#sec-tolength + var toLength = function (argument) { + return argument > 0 ? min$6(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + // `LengthOfArrayLike` abstract operation + // https://tc39.es/ecma262/#sec-lengthofarraylike + var lengthOfArrayLike = function (obj) { + return toLength(obj.length); + }; + + // `Array.prototype.{ indexOf, includes }` methods implementation + var createMethod$5 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; + }; + + var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$5(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$5(false) + }; + + var indexOf$2 = arrayIncludes.indexOf; + + + var push$6 = functionUncurryThis([].push); + + var objectKeysInternal = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwnProperty_1(hiddenKeys$1, key) && hasOwnProperty_1(O, key) && push$6(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwnProperty_1(O, key = names[i++])) { + ~indexOf$2(result, key) || push$6(result, key); + } + return result; + }; + + // IE8- don't enum bug keys + var enumBugKeys = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + + var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + // eslint-disable-next-line es/no-object-getownpropertynames -- safe + var f$5 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return objectKeysInternal(O, hiddenKeys); + }; + + var objectGetOwnPropertyNames = { + f: f$5 + }; + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe + var f$4 = Object.getOwnPropertySymbols; + + var objectGetOwnPropertySymbols = { + f: f$4 + }; + + var concat$2 = functionUncurryThis([].concat); + + // all object keys, includes non-enumerable and symbols + var ownKeys$1 = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = objectGetOwnPropertyNames.f(anObject(it)); + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + return getOwnPropertySymbols ? concat$2(keys, getOwnPropertySymbols(it)) : keys; + }; + + var copyConstructorProperties = function (target, source, exceptions) { + var keys = ownKeys$1(source); + var defineProperty = objectDefineProperty.f; + var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwnProperty_1(target, key) && !(exceptions && hasOwnProperty_1(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + + var replacement = /#|\.prototype\./; + + var isForced = function (feature, detection) { + var value = data[normalize$1(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; + }; + + var normalize$1 = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = 'N'; + var POLYFILL = isForced.POLYFILL = 'P'; + + var isForced_1 = isForced; + + var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + + + + + + + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key + */ + var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global_1; + } else if (STATIC) { + target = global_1[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global_1[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor$2(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } + }; + + // `IsArray` abstract operation + // https://tc39.es/ecma262/#sec-isarray + // eslint-disable-next-line es/no-array-isarray -- safe + var isArray$3 = Array.isArray || function isArray(argument) { + return classofRaw(argument) == 'Array'; + }; + + var TO_STRING_TAG$4 = wellKnownSymbol('toStringTag'); + var test$2 = {}; + + test$2[TO_STRING_TAG$4] = 'z'; + + var toStringTagSupport = String(test$2) === '[object z]'; + + var TO_STRING_TAG$3 = wellKnownSymbol('toStringTag'); + var Object$2 = global_1.Object; + + // ES3 wrong here + var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + + // fallback for IE11 Script Access Denied error + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } + }; + + // getting tag from ES6+ `Object.prototype.toString` + var classof = toStringTagSupport ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object$2(it), TO_STRING_TAG$3)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result; + }; + + var noop$2 = function () { /* empty */ }; + var empty = []; + var construct = getBuiltIn('Reflect', 'construct'); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec$2 = functionUncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.exec(noop$2); + + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop$2, empty, argument); + return true; + } catch (error) { + return false; + } + }; + + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec$2(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + + isConstructorLegacy.sham = true; + + // `IsConstructor` abstract operation + // https://tc39.es/ecma262/#sec-isconstructor + var isConstructor = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; + }) ? isConstructorLegacy : isConstructorModern; + + var SPECIES$6 = wellKnownSymbol('species'); + var Array$7 = global_1.Array; + + // a part of `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + var arraySpeciesConstructor = function (originalArray) { + var C; + if (isArray$3(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === Array$7 || isArray$3(C.prototype))) C = undefined; + else if (isObject$1(C)) { + C = C[SPECIES$6]; + if (C === null) C = undefined; + } + } return C === undefined ? Array$7 : C; + }; + + // `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + var arraySpeciesCreate = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + + var createProperty = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; + }; + + var SPECIES$5 = wellKnownSymbol('species'); + + var arrayMethodHasSpeciesSupport = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return engineV8Version >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES$5] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport('splice'); + + var TypeError$f = global_1.TypeError; + var max$3 = Math.max; + var min$5 = Math.min; + var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; + + // `Array.prototype.splice` method + // https://tc39.es/ecma262/#sec-array.prototype.splice + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 }, { + splice: function splice(start, deleteCount /* , ...items */) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var actualStart = toAbsoluteIndex(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min$5(max$3(toIntegerOrInfinity(deleteCount), 0), len - actualStart); + } + if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { + throw TypeError$f(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + } + A = arraySpeciesCreate(O, actualDeleteCount); + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty(A, k, O[from]); + } + A.length = actualDeleteCount; + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + } + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + O.length = len - actualDeleteCount + insertCount; + return A; + } + }); + + // `Object.prototype.toString` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.tostring + var objectToString$1 = toStringTagSupport ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; + }; + + // `Object.prototype.toString` method + // https://tc39.es/ecma262/#sec-object.prototype.tostring + if (!toStringTagSupport) { + redefine(Object.prototype, 'toString', objectToString$1, { unsafe: true }); + } + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` + + + var classList = documentCreateElement('span').classList; + var DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype; + + var domTokenListPrototype = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype; + + var bind$1 = functionUncurryThis(functionUncurryThis.bind); + + // optional / simple context binding + var functionBindContext = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : functionBindNative ? bind$1(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var push$5 = functionUncurryThis([].push); + + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation + var createMethod$4 = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = indexedObject(O); + var boundFunction = functionBindContext(callbackfn, that); + var length = lengthOfArrayLike(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push$5(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push$5(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod$4(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod$4(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod$4(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod$4(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod$4(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod$4(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod$4(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod$4(7) + }; + + var arrayMethodIsStrict = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call -- required for testing + method.call(null, argument || function () { return 1; }, 1); + }); + }; + + var $forEach$2 = arrayIteration.forEach; + + + var STRICT_METHOD$3 = arrayMethodIsStrict('forEach'); + + // `Array.prototype.forEach` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.foreach + var arrayForEach = !STRICT_METHOD$3 ? function forEach(callbackfn /* , thisArg */) { + return $forEach$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + // eslint-disable-next-line es/no-array-prototype-foreach -- safe + } : [].forEach; + + var handlePrototype$1 = function (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try { + createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach); + } catch (error) { + CollectionPrototype.forEach = arrayForEach; + } + }; + + for (var COLLECTION_NAME$1 in domIterables) { + if (domIterables[COLLECTION_NAME$1]) { + handlePrototype$1(global_1[COLLECTION_NAME$1] && global_1[COLLECTION_NAME$1].prototype); + } + } + + handlePrototype$1(domTokenListPrototype); + + var $filter$1 = arrayIteration.filter; + + + var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('filter'); + + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + // eslint-disable-next-line es/no-object-keys -- safe + var objectKeys = Object.keys || function keys(O) { + return objectKeysInternal(O, enumBugKeys); + }; + + var FAILS_ON_PRIMITIVES$5 = fails(function () { objectKeys(1); }); + + // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$5 }, { + keys: function keys(it) { + return objectKeys(toObject(it)); + } + }); + + var String$4 = global_1.String; + + var toString_1 = function (argument) { + if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return String$4(argument); + }; + + // `RegExp.prototype.flags` getter implementation + // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + var regexpFlags = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var $RegExp$2 = global_1.RegExp; + + var UNSUPPORTED_Y$3 = fails(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; + }); + + // UC Browser bug + // https://github.com/zloirock/core-js/issues/1008 + var MISSED_STICKY$1 = UNSUPPORTED_Y$3 || fails(function () { + return !$RegExp$2('a', 'y').sticky; + }); + + var BROKEN_CARET = UNSUPPORTED_Y$3 || fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; + }); + + var regexpStickyHelpers = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY$1, + UNSUPPORTED_Y: UNSUPPORTED_Y$3 + }; + + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + // eslint-disable-next-line es/no-object-defineproperties -- safe + var f$3 = descriptors && !v8PrototypeDefineBug ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) objectDefineProperty.f(O, key = keys[index++], props[key]); + return O; + }; + + var objectDefineProperties = { + f: f$3 + }; + + var html$1 = getBuiltIn('document', 'documentElement'); + + /* global ActiveXObject -- old IE, WSH */ + + + + + + + + + var GT = '>'; + var LT = '<'; + var PROTOTYPE$2 = 'prototype'; + var SCRIPT = 'script'; + var IE_PROTO$1 = sharedKey('IE_PROTO'); + + var EmptyConstructor = function () { /* empty */ }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; + + // Create object with fake `null` prototype: use iframe Object with cleared prototype + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html$1.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]]; + return NullProtoObject(); + }; + + hiddenKeys$1[IE_PROTO$1] = true; + + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + var objectCreate = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE$2] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE$2] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO$1] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : objectDefineProperties.f(result, Properties); + }; + + // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError + var $RegExp$1 = global_1.RegExp; + + var regexpUnsupportedDotAll = fails(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.exec('\n') && re.flags === 's'); + }); + + // babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError + var $RegExp = global_1.RegExp; + + var regexpUnsupportedNcg = fails(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || + 'b'.replace(re, '$c') !== 'bc'; + }); + + /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ + /* eslint-disable regexp/no-useless-quantifier -- testing */ + + + + + + + + var getInternalState$5 = internalState.get; + + + + var nativeReplace = shared('native-string-replace', String.prototype.replace); + var nativeExec = RegExp.prototype.exec; + var patchedExec = nativeExec; + var charAt$5 = functionUncurryThis(''.charAt); + var indexOf$1 = functionUncurryThis(''.indexOf); + var replace$4 = functionUncurryThis(''.replace); + var stringSlice$7 = functionUncurryThis(''.slice); + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + functionCall(nativeExec, re1, 'a'); + functionCall(nativeExec, re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + })(); + + var UNSUPPORTED_Y$2 = regexpStickyHelpers.BROKEN_CARET; + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2 || regexpUnsupportedDotAll || regexpUnsupportedNcg; + + if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState$5(re); + var str = toString_1(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = functionCall(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y$2 && re.sticky; + var flags = functionCall(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = replace$4(flags, 'y', ''); + if (indexOf$1(flags, 'g') === -1) { + flags += 'g'; + } + + strCopy = stringSlice$7(str, re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$5(str, re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = functionCall(nativeExec, sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = stringSlice$7(match.input, charsAdded); + match[0] = stringSlice$7(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + functionCall(nativeReplace, match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = objectCreate(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; + } + + var regexpExec = patchedExec; + + // `RegExp.prototype.exec` method + // https://tc39.es/ecma262/#sec-regexp.prototype.exec + _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, { + exec: regexpExec + }); + + // TODO: Remove from `core-js@4` since it's moved to entry points + + + + + + + + + var SPECIES$4 = wellKnownSymbol('species'); + var RegExpPrototype$2 = RegExp.prototype; + + var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES$4] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { execCalled = true; return null; }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + FORCED + ) { + var uncurriedNativeRegExpMethod = functionUncurryThis(/./[SYMBOL]); + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var uncurriedNativeMethod = functionUncurryThis(nativeMethod); + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype$2.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) }; + } + return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) }; + } + return { done: false }; + }); + + redefine(String.prototype, KEY, methods[0]); + redefine(RegExpPrototype$2, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty(RegExpPrototype$2[SYMBOL], 'sham', true); + }; + + // `SameValue` abstract operation + // https://tc39.es/ecma262/#sec-samevalue + // eslint-disable-next-line es/no-object-is -- safe + var sameValue = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; + }; + + var TypeError$e = global_1.TypeError; + + // `RegExpExec` abstract operation + // https://tc39.es/ecma262/#sec-regexpexec + var regexpExecAbstract = function (R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = functionCall(exec, R, S); + if (result !== null) anObject(result); + return result; + } + if (classofRaw(R) === 'RegExp') return functionCall(regexpExec, R, S); + throw TypeError$e('RegExp#exec called on incompatible receiver'); + }; + + // @@search logic + fixRegexpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.es/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible(this); + var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH); + return searcher ? functionCall(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString_1(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@search + function (string) { + var rx = anObject(this); + var S = toString_1(string); + var res = maybeCallNative(nativeSearch, rx, S); + + if (res.done) return res.value; + + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regexpExecAbstract(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; + }); + + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; + var TypeError$d = global_1.TypeError; + + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = engineV8Version >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); + + var isConcatSpreadable = function (O) { + if (!isObject$1(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray$3(O); + }; + + var FORCED$7 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + + // `Array.prototype.concat` method + // https://tc39.es/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + _export({ target: 'Array', proto: true, forced: FORCED$7 }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + if (n + len > MAX_SAFE_INTEGER) throw TypeError$d(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER) throw TypeError$d(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + + var global$2 = typeof global$1 !== "undefined" ? global$1 : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}; + + var global$1 = typeof global$2 !== "undefined" ? global$2 : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}; + + // based off https://github.com/defunctzombie/node-process/blob/master/browser.js + + function defaultSetTimout$1() { + throw new Error('setTimeout has not been defined'); + } + + function defaultClearTimeout$1() { + throw new Error('clearTimeout has not been defined'); + } + + var cachedSetTimeout$1 = defaultSetTimout$1; + var cachedClearTimeout$1 = defaultClearTimeout$1; + + if (typeof global$1.setTimeout === 'function') { + cachedSetTimeout$1 = setTimeout; + } + + if (typeof global$1.clearTimeout === 'function') { + cachedClearTimeout$1 = clearTimeout; + } + + function runTimeout$1(fun) { + if (cachedSetTimeout$1 === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout$1 === defaultSetTimout$1 || !cachedSetTimeout$1) && setTimeout) { + cachedSetTimeout$1 = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout$1(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout$1.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout$1.call(this, fun, 0); + } + } + } + + function runClearTimeout$1(marker) { + if (cachedClearTimeout$1 === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout$1 === defaultClearTimeout$1 || !cachedClearTimeout$1) && clearTimeout) { + cachedClearTimeout$1 = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout$1(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout$1.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout$1.call(this, marker); + } + } + } + + var queue$3 = []; + var draining$1 = false; + var currentQueue$1; + var queueIndex$1 = -1; + + function cleanUpNextTick$1() { + if (!draining$1 || !currentQueue$1) { + return; + } + + draining$1 = false; + + if (currentQueue$1.length) { + queue$3 = currentQueue$1.concat(queue$3); + } else { + queueIndex$1 = -1; + } + + if (queue$3.length) { + drainQueue$1(); + } + } + + function drainQueue$1() { + if (draining$1) { + return; + } + + var timeout = runTimeout$1(cleanUpNextTick$1); + draining$1 = true; + var len = queue$3.length; + + while (len) { + currentQueue$1 = queue$3; + queue$3 = []; + + while (++queueIndex$1 < len) { + if (currentQueue$1) { + currentQueue$1[queueIndex$1].run(); + } + } + + queueIndex$1 = -1; + len = queue$3.length; + } + + currentQueue$1 = null; + draining$1 = false; + runClearTimeout$1(timeout); + } + + function nextTick$1(fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue$3.push(new Item$1(fun, args)); + + if (queue$3.length === 1 && !draining$1) { + runTimeout$1(drainQueue$1); + } + } // v8 likes predictible objects + + function Item$1(fun, array) { + this.fun = fun; + this.array = array; + } + + Item$1.prototype.run = function () { + this.fun.apply(null, this.array); + }; + + var title$1 = 'browser'; + var platform$1 = 'browser'; + var browser$4 = true; + var env$1 = {}; + var argv$1 = []; + var version$2 = ''; // empty string to avoid regexp issues + + var versions$1 = {}; + var release$1 = {}; + var config$1 = {}; + + function noop$1() {} + + var on$1 = noop$1; + var addListener$1 = noop$1; + var once$1 = noop$1; + var off$1 = noop$1; + var removeListener$1 = noop$1; + var removeAllListeners$1 = noop$1; + var emit$1 = noop$1; + function binding$1(name) { + throw new Error('process.binding is not supported'); + } + function cwd$1() { + return '/'; + } + function chdir$1(dir) { + throw new Error('process.chdir is not supported'); + } + function umask$1() { + return 0; + } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js + + var performance$1 = global$1.performance || {}; + + var performanceNow$1 = performance$1.now || performance$1.mozNow || performance$1.msNow || performance$1.oNow || performance$1.webkitNow || function () { + return new Date().getTime(); + }; // generate timestamp or delta + // see http://nodejs.org/api/process.html#process_process_hrtime + + + function hrtime$1(previousTimestamp) { + var clocktime = performanceNow$1.call(performance$1) * 1e-3; + var seconds = Math.floor(clocktime); + var nanoseconds = Math.floor(clocktime % 1 * 1e9); + + if (previousTimestamp) { + seconds = seconds - previousTimestamp[0]; + nanoseconds = nanoseconds - previousTimestamp[1]; + + if (nanoseconds < 0) { + seconds--; + nanoseconds += 1e9; + } + } + + return [seconds, nanoseconds]; + } + var startTime$1 = new Date(); + function uptime$1() { + var currentTime = new Date(); + var dif = currentTime - startTime$1; + return dif / 1000; + } + var process$4 = { + nextTick: nextTick$1, + title: title$1, + browser: browser$4, + env: env$1, + argv: argv$1, + version: version$2, + versions: versions$1, + on: on$1, + addListener: addListener$1, + once: once$1, + off: off$1, + removeListener: removeListener$1, + removeAllListeners: removeAllListeners$1, + emit: emit$1, + binding: binding$1, + cwd: cwd$1, + chdir: chdir$1, + umask: umask$1, + hrtime: hrtime$1, + platform: platform$1, + release: release$1, + config: config$1, + uptime: uptime$1 + }; + + var PROPER_FUNCTION_NAME$3 = functionName.PROPER; + + + + + + + + var TO_STRING = 'toString'; + var RegExpPrototype$1 = RegExp.prototype; + var n$ToString = RegExpPrototype$1[TO_STRING]; + var getFlags$1 = functionUncurryThis(regexpFlags); + + var NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = PROPER_FUNCTION_NAME$3 && n$ToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.es/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = toString_1(R.source); + var rf = R.flags; + var f = toString_1(rf === undefined && objectIsPrototypeOf(RegExpPrototype$1, R) && !('flags' in RegExpPrototype$1) ? getFlags$1(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); + } + + var correctPrototypeGetter = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + var IE_PROTO = sharedKey('IE_PROTO'); + var Object$1 = global_1.Object; + var ObjectPrototype$3 = Object$1.prototype; + + // `Object.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.getprototypeof + var objectGetPrototypeOf = correctPrototypeGetter ? Object$1.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwnProperty_1(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof Object$1 ? ObjectPrototype$3 : null; + }; + + var FAILS_ON_PRIMITIVES$4 = fails(function () { objectGetPrototypeOf(1); }); + + // `Object.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.getprototypeof + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$4, sham: !correctPrototypeGetter }, { + getPrototypeOf: function getPrototypeOf(it) { + return objectGetPrototypeOf(toObject(it)); + } + }); + + var FUNCTION_NAME_EXISTS = functionName.EXISTS; + + var defineProperty$a = objectDefineProperty.f; + + var FunctionPrototype$1 = Function.prototype; + var functionToString = functionUncurryThis(FunctionPrototype$1.toString); + var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/; + var regExpExec = functionUncurryThis(nameRE.exec); + var NAME$1 = 'name'; + + // Function instances `.name` property + // https://tc39.es/ecma262/#sec-function-instances-name + if (descriptors && !FUNCTION_NAME_EXISTS) { + defineProperty$a(FunctionPrototype$1, NAME$1, { + configurable: true, + get: function () { + try { + return regExpExec(nameRE, functionToString(this))[1]; + } catch (error) { + return ''; + } + } + }); + } + + // `Reflect.ownKeys` method + // https://tc39.es/ecma262/#sec-reflect.ownkeys + _export({ target: 'Reflect', stat: true }, { + ownKeys: ownKeys$1 + }); + + var domain; // This constructor is used to store event handlers. Instantiating this is + // faster than explicitly calling `Object.create(null)` to get a "clean" empty + // object (tested with v8 v4.9). + + function EventHandlers() {} + + EventHandlers.prototype = Object.create(null); + + function EventEmitter$2() { + EventEmitter$2.init.call(this); + } + // require('events') === require('events').EventEmitter + + EventEmitter$2.EventEmitter = EventEmitter$2; + EventEmitter$2.usingDomains = false; + EventEmitter$2.prototype.domain = undefined; + EventEmitter$2.prototype._events = undefined; + EventEmitter$2.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are + // added to it. This is a useful default which helps finding memory leaks. + + EventEmitter$2.defaultMaxListeners = 10; + + EventEmitter$2.init = function () { + this.domain = null; + + if (EventEmitter$2.usingDomains) { + // if there is an active domain, then attach to it. + if (domain.active ) ; + } + + if (!this._events || this._events === Object.getPrototypeOf(this)._events) { + this._events = new EventHandlers(); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; + }; // Obviously not all Emitters should be limited to 10. This function allows + // that to be increased. Set to zero for unlimited. + + + EventEmitter$2.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || isNaN(n)) throw new TypeError('"n" argument must be a positive number'); + this._maxListeners = n; + return this; + }; + + function $getMaxListeners(that) { + if (that._maxListeners === undefined) return EventEmitter$2.defaultMaxListeners; + return that._maxListeners; + } + + EventEmitter$2.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); + }; // These standalone emit* functions are used to optimize calling of event + // handlers for fast cases because emit() itself often has a variable number of + // arguments and can be deoptimized because of that. These functions always have + // the same number of arguments and thus do not get deoptimized, so the code + // inside them can execute faster. + + + function emitNone(handler, isFn, self) { + if (isFn) handler.call(self);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + listeners[i].call(self); + } + } + } + + function emitOne(handler, isFn, self, arg1) { + if (isFn) handler.call(self, arg1);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + listeners[i].call(self, arg1); + } + } + } + + function emitTwo(handler, isFn, self, arg1, arg2) { + if (isFn) handler.call(self, arg1, arg2);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + listeners[i].call(self, arg1, arg2); + } + } + } + + function emitThree(handler, isFn, self, arg1, arg2, arg3) { + if (isFn) handler.call(self, arg1, arg2, arg3);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + listeners[i].call(self, arg1, arg2, arg3); + } + } + } + + function emitMany(handler, isFn, self, args) { + if (isFn) handler.apply(self, args);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) { + listeners[i].apply(self, args); + } + } + } + + EventEmitter$2.prototype.emit = function emit(type) { + var er, handler, len, args, i, events, domain; + var doError = type === 'error'; + events = this._events; + if (events) doError = doError && events.error == null;else if (!doError) return false; + domain = this.domain; // If there is no 'error' event listener then throw. + + if (doError) { + er = arguments[1]; + + if (domain) { + if (!er) er = new Error('Uncaught, unspecified "error" event'); + er.domainEmitter = this; + er.domain = domain; + er.domainThrown = false; + domain.emit('error', er); + } else if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + + return false; + } + + handler = events[type]; + if (!handler) return false; + var isFn = typeof handler === 'function'; + len = arguments.length; + + switch (len) { + // fast cases + case 1: + emitNone(handler, isFn, this); + break; + + case 2: + emitOne(handler, isFn, this, arguments[1]); + break; + + case 3: + emitTwo(handler, isFn, this, arguments[1], arguments[2]); + break; + + case 4: + emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); + break; + // slower + + default: + args = new Array(len - 1); + + for (i = 1; i < len; i++) { + args[i - 1] = arguments[i]; + } + + emitMany(handler, isFn, this, args); + } + return true; + }; + + function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = target._events; + + if (!events) { + events = target._events = new EventHandlers(); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener) { + target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + + events = target._events; + } + + existing = events[type]; + } + + if (!existing) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : [existing, listener]; + } else { + // If we've already got an array, just append. + if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + } // Check for listener leak + + + if (!existing.warned) { + m = $getMaxListeners(target); + + if (m && m > 0 && existing.length > m) { + existing.warned = true; + var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + type + ' listeners added. ' + 'Use emitter.setMaxListeners() to increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + emitWarning$1(w); + } + } + } + + return target; + } + + function emitWarning$1(e) { + typeof console.warn === 'function' ? console.warn(e) : console.log(e); + } + + EventEmitter$2.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); + }; + + EventEmitter$2.prototype.on = EventEmitter$2.prototype.addListener; + + EventEmitter$2.prototype.prependListener = function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + + function _onceWrap(target, type, listener) { + var fired = false; + + function g() { + target.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(target, arguments); + } + } + + g.listener = listener; + return g; + } + + EventEmitter$2.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.on(type, _onceWrap(this, type, listener)); + return this; + }; + + EventEmitter$2.prototype.prependOnceListener = function prependOnceListener(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; // emits a 'removeListener' event iff the listener was removed + + + EventEmitter$2.prototype.removeListener = function removeListener(type, listener) { + var list, events, position, i, originalListener; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = this._events; + if (!events) return this; + list = events[type]; + if (!list) return this; + + if (list === listener || list.listener && list.listener === listener) { + if (--this._eventsCount === 0) this._events = new EventHandlers();else { + delete events[type]; + if (events.removeListener) this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length; i-- > 0;) { + if (list[i] === listener || list[i].listener && list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) return this; + + if (list.length === 1) { + list[0] = undefined; + + if (--this._eventsCount === 0) { + this._events = new EventHandlers(); + return this; + } else { + delete events[type]; + } + } else { + spliceOne(list, position); + } + + if (events.removeListener) this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + + EventEmitter$2.prototype.removeAllListeners = function removeAllListeners(type) { + var listeners, events; + events = this._events; + if (!events) return this; // not listening for removeListener, no need to emit + + if (!events.removeListener) { + if (arguments.length === 0) { + this._events = new EventHandlers(); + this._eventsCount = 0; + } else if (events[type]) { + if (--this._eventsCount === 0) this._events = new EventHandlers();else delete events[type]; + } + + return this; + } // emit removeListener for all listeners on all events + + + if (arguments.length === 0) { + var keys = Object.keys(events); + + for (var i = 0, key; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + + this.removeAllListeners('removeListener'); + this._events = new EventHandlers(); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + do { + this.removeListener(type, listeners[listeners.length - 1]); + } while (listeners[0]); + } + + return this; + }; + + EventEmitter$2.prototype.listeners = function listeners(type) { + var evlistener; + var ret; + var events = this._events; + if (!events) ret = [];else { + evlistener = events[type]; + if (!evlistener) ret = [];else if (typeof evlistener === 'function') ret = [evlistener.listener || evlistener];else ret = unwrapListeners(evlistener); + } + return ret; + }; + + EventEmitter$2.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount$1.call(emitter, type); + } + }; + + EventEmitter$2.prototype.listenerCount = listenerCount$1; + + function listenerCount$1(type) { + var events = this._events; + + if (events) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener) { + return evlistener.length; + } + } + + return 0; + } + + EventEmitter$2.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; + }; // About 1.5x faster than the two-arg version of Array#splice(). + + + function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) { + list[i] = list[k]; + } + + list.pop(); + } + + function arrayClone(arr, i) { + var copy = new Array(i); + + while (i--) { + copy[i] = arr[i]; + } + + return copy; + } + + function unwrapListeners(arr) { + var ret = new Array(arr.length); + + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + + return ret; + } + + function _asyncIterator(iterable) { + var method, + async, + sync, + retry = 2; + + for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { + if (async && null != (method = iterable[async])) return method.call(iterable); + if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); + async = "@@asyncIterator", sync = "@@iterator"; + } + + throw new TypeError("Object is not async iterable"); + } + + function AsyncFromSyncIterator(s) { + function AsyncFromSyncIteratorContinuation(r) { + if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); + var done = r.done; + return Promise.resolve(r.value).then(function (value) { + return { + value: value, + done: done + }; + }); + } + + return AsyncFromSyncIterator = function (s) { + this.s = s, this.n = s.next; + }, AsyncFromSyncIterator.prototype = { + s: null, + n: null, + next: function () { + return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); + }, + return: function (value) { + var ret = this.s.return; + return void 0 === ret ? Promise.resolve({ + value: value, + done: !0 + }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); + }, + throw: function (value) { + var thr = this.s.return; + return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); + } + }, new AsyncFromSyncIterator(s); + } + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } + } + + function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); + } + + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); + } + + _next(undefined); + }); + }; + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a 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); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + Object.defineProperty(subClass, "prototype", { + writable: false + }); + if (superClass) _setPrototypeOf(subClass, superClass); + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } else if (call !== void 0) { + throw new TypeError("Derived constructors may only return object or undefined"); + } + + return _assertThisInitialized(self); + } + + function _createSuper(Derived) { + var hasNativeReflectConstruct = _isNativeReflectConstruct(); + + return function _createSuperInternal() { + var Super = _getPrototypeOf(Derived), + result; + + if (hasNativeReflectConstruct) { + var NewTarget = _getPrototypeOf(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var un$Join = functionUncurryThis([].join); + + var ES3_STRINGS = indexedObject != Object; + var STRICT_METHOD$2 = arrayMethodIsStrict('join', ','); + + // `Array.prototype.join` method + // https://tc39.es/ecma262/#sec-array.prototype.join + _export({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$2 }, { + join: function join(separator) { + return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator); + } + }); + + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + + // eslint-disable-next-line es/no-reflect -- safe + var functionApply = typeof Reflect == 'object' && Reflect.apply || (functionBindNative ? call.bind(apply) : function () { + return call.apply(apply, arguments); + }); + + var charAt$4 = functionUncurryThis(''.charAt); + var charCodeAt$1 = functionUncurryThis(''.charCodeAt); + var stringSlice$6 = functionUncurryThis(''.slice); + + var createMethod$3 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString_1(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt$1(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt$1(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt$4(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice$6(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$3(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$3(true) + }; + + var charAt$3 = stringMultibyte.charAt; + + // `AdvanceStringIndex` abstract operation + // https://tc39.es/ecma262/#sec-advancestringindex + var advanceStringIndex = function (S, index, unicode) { + return index + (unicode ? charAt$3(S, index).length : 1); + }; + + var floor$5 = Math.floor; + var charAt$2 = functionUncurryThis(''.charAt); + var replace$3 = functionUncurryThis(''.replace); + var stringSlice$5 = functionUncurryThis(''.slice); + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + + // `GetSubstitution` abstract operation + // https://tc39.es/ecma262/#sec-getsubstitution + var getSubstitution = function (matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace$3(replacement, symbols, function (match, ch) { + var capture; + switch (charAt$2(ch, 0)) { + case '$': return '$'; + case '&': return matched; + case '`': return stringSlice$5(str, 0, position); + case "'": return stringSlice$5(str, tailPos); + case '<': + capture = namedCaptures[stringSlice$5(ch, 1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor$5(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? charAt$2(ch, 1) : captures[f - 1] + charAt$2(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + }; + + var REPLACE = wellKnownSymbol('replace'); + var max$2 = Math.max; + var min$4 = Math.min; + var concat$1 = functionUncurryThis([].concat); + var push$4 = functionUncurryThis([].push); + var stringIndexOf$2 = functionUncurryThis(''.indexOf); + var stringSlice$4 = functionUncurryThis(''.slice); + + var maybeToString = function (it) { + return it === undefined ? it : String(it); + }; + + // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + var REPLACE_KEEPS_$0 = (function () { + // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing + return 'a'.replace(/./, '$0') === '$0'; + })(); + + // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; + })(); + + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive + return ''.replace(re, '$') !== '7'; + }); + + // @@replace logic + fixRegexpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE); + return replacer + ? functionCall(replacer, searchValue, O, replaceValue) + : functionCall(nativeReplace, toString_1(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function (string, replaceValue) { + var rx = anObject(this); + var S = toString_1(string); + + if ( + typeof replaceValue == 'string' && + stringIndexOf$2(replaceValue, UNSAFE_SUBSTITUTE) === -1 && + stringIndexOf$2(replaceValue, '$<') === -1 + ) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) return res.value; + } + + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) replaceValue = toString_1(replaceValue); + + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regexpExecAbstract(rx, S); + if (result === null) break; + + push$4(results, result); + if (!global) break; + + var matchStr = toString_1(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = toString_1(result[0]); + var position = max$2(min$4(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) push$4(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat$1([matched], captures, position, S); + if (namedCaptures !== undefined) push$4(replacerArgs, namedCaptures); + var replacement = toString_1(functionApply(replaceValue, undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice$4(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + stringSlice$4(S, nextSourcePosition); + } + ]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + + var String$3 = global_1.String; + var TypeError$c = global_1.TypeError; + + var aPossiblePrototype = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) return argument; + throw TypeError$c("Can't set " + String$3(argument) + ' as a prototype'); + }; + + /* eslint-disable no-proto -- safe */ + + + + + // `Object.setPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + // eslint-disable-next-line es/no-object-setprototypeof -- safe + var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + setter = functionUncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : undefined); + + // makes subclassing work correct for wrapped built-ins + var inheritIfRequired = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + objectSetPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && + NewTarget !== Wrapper && + isObject$1(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) objectSetPrototypeOf($this, NewTargetPrototype); + return $this; + }; + + // `thisNumberValue` abstract operation + // https://tc39.es/ecma262/#sec-thisnumbervalue + var thisNumberValue = functionUncurryThis(1.0.valueOf); + + // a string of all valid unicode whitespaces + var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + var replace$2 = functionUncurryThis(''.replace); + var whitespace = '[' + whitespaces + ']'; + var ltrim = RegExp('^' + whitespace + whitespace + '*'); + var rtrim = RegExp(whitespace + whitespace + '*$'); + + // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + var createMethod$2 = function (TYPE) { + return function ($this) { + var string = toString_1(requireObjectCoercible($this)); + if (TYPE & 1) string = replace$2(string, ltrim, ''); + if (TYPE & 2) string = replace$2(string, rtrim, ''); + return string; + }; + }; + + var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod$2(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod$2(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod$2(3) + }; + + var getOwnPropertyNames$3 = objectGetOwnPropertyNames.f; + var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + var defineProperty$9 = objectDefineProperty.f; + + var trim = stringTrim.trim; + + var NUMBER = 'Number'; + var NativeNumber = global_1[NUMBER]; + var NumberPrototype = NativeNumber.prototype; + var TypeError$b = global_1.TypeError; + var arraySlice$1 = functionUncurryThis(''.slice); + var charCodeAt = functionUncurryThis(''.charCodeAt); + + // `ToNumeric` abstract operation + // https://tc39.es/ecma262/#sec-tonumeric + var toNumeric = function (value) { + var primValue = toPrimitive(value, 'number'); + return typeof primValue == 'bigint' ? primValue : toNumber(primValue); + }; + + // `ToNumber` abstract operation + // https://tc39.es/ecma262/#sec-tonumber + var toNumber = function (argument) { + var it = toPrimitive(argument, 'number'); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol$1(it)) throw TypeError$b('Cannot convert a Symbol value to a number'); + if (typeof it == 'string' && it.length > 2) { + it = trim(it); + first = charCodeAt(it, 0); + if (first === 43 || first === 45) { + third = charCodeAt(it, 2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (charCodeAt(it, 1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i + default: return +it; + } + digits = arraySlice$1(it, 2); + length = digits.length; + for (index = 0; index < length; index++) { + code = charCodeAt(digits, index); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; + }; + + // `Number` constructor + // https://tc39.es/ecma262/#sec-number-constructor + if (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + var dummy = this; + // check on 1..constructor(foo) case + return objectIsPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); }) + ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n; + }; + for (var keys$3 = descriptors ? getOwnPropertyNames$3(NativeNumber) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' + + // ESNext + 'fromString,range' + ).split(','), j$1 = 0, key$1; keys$3.length > j$1; j$1++) { + if (hasOwnProperty_1(NativeNumber, key$1 = keys$3[j$1]) && !hasOwnProperty_1(NumberWrapper, key$1)) { + defineProperty$9(NumberWrapper, key$1, getOwnPropertyDescriptor$1(NativeNumber, key$1)); + } + } + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine(global_1, NUMBER, NumberWrapper); + } + + var MATCH$2 = wellKnownSymbol('match'); + + // `IsRegExp` abstract operation + // https://tc39.es/ecma262/#sec-isregexp + var isRegexp = function (it) { + var isRegExp; + return isObject$1(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp'); + }; + + var SPECIES$3 = wellKnownSymbol('species'); + + var setSpecies = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = objectDefineProperty.f; + + if (descriptors && Constructor && !Constructor[SPECIES$3]) { + defineProperty(Constructor, SPECIES$3, { + configurable: true, + get: function () { return this; } + }); + } + }; + + var defineProperty$8 = objectDefineProperty.f; + var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f; + + + + + + + + + var enforceInternalState = internalState.enforce; + + + + + + var MATCH$1 = wellKnownSymbol('match'); + var NativeRegExp = global_1.RegExp; + var RegExpPrototype = NativeRegExp.prototype; + var SyntaxError = global_1.SyntaxError; + var getFlags = functionUncurryThis(regexpFlags); + var exec$1 = functionUncurryThis(RegExpPrototype.exec); + var charAt$1 = functionUncurryThis(''.charAt); + var replace$1 = functionUncurryThis(''.replace); + var stringIndexOf$1 = functionUncurryThis(''.indexOf); + var stringSlice$3 = functionUncurryThis(''.slice); + // TODO: Use only propper RegExpIdentifierName + var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/; + var re1 = /a/g; + var re2 = /a/g; + + // "new" should create a new object, old webkit bug + var CORRECT_NEW = new NativeRegExp(re1) !== re1; + + var MISSED_STICKY = regexpStickyHelpers.MISSED_STICKY; + var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y; + + var BASE_FORCED = descriptors && + (!CORRECT_NEW || MISSED_STICKY || regexpUnsupportedDotAll || regexpUnsupportedNcg || fails(function () { + re2[MATCH$1] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; + })); + + var handleDotAll = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var brackets = false; + var chr; + for (; index <= length; index++) { + chr = charAt$1(string, index); + if (chr === '\\') { + result += chr + charAt$1(string, ++index); + continue; + } + if (!brackets && chr === '.') { + result += '[\\s\\S]'; + } else { + if (chr === '[') { + brackets = true; + } else if (chr === ']') { + brackets = false; + } result += chr; + } + } return result; + }; + + var handleNCG = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var named = []; + var names = {}; + var brackets = false; + var ncg = false; + var groupid = 0; + var groupname = ''; + var chr; + for (; index <= length; index++) { + chr = charAt$1(string, index); + if (chr === '\\') { + chr = chr + charAt$1(string, ++index); + } else if (chr === ']') { + brackets = false; + } else if (!brackets) switch (true) { + case chr === '[': + brackets = true; + break; + case chr === '(': + if (exec$1(IS_NCG, stringSlice$3(string, index + 1))) { + index += 2; + ncg = true; + } + result += chr; + groupid++; + continue; + case chr === '>' && ncg: + if (groupname === '' || hasOwnProperty_1(names, groupname)) { + throw new SyntaxError('Invalid capture group name'); + } + names[groupname] = true; + named[named.length] = [groupname, groupid]; + ncg = false; + groupname = ''; + continue; + } + if (ncg) groupname += chr; + else result += chr; + } return [result, named]; + }; + + // `RegExp` constructor + // https://tc39.es/ecma262/#sec-regexp-constructor + if (isForced_1('RegExp', BASE_FORCED)) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = objectIsPrototypeOf(RegExpPrototype, this); + var patternIsRegExp = isRegexp(pattern); + var flagsAreUndefined = flags === undefined; + var groups = []; + var rawPattern = pattern; + var rawFlags, dotAll, sticky, handled, result, state; + + if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) { + return pattern; + } + + if (patternIsRegExp || objectIsPrototypeOf(RegExpPrototype, pattern)) { + pattern = pattern.source; + if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags(rawPattern); + } + + pattern = pattern === undefined ? '' : toString_1(pattern); + flags = flags === undefined ? '' : toString_1(flags); + rawPattern = pattern; + + if (regexpUnsupportedDotAll && 'dotAll' in re1) { + dotAll = !!flags && stringIndexOf$1(flags, 's') > -1; + if (dotAll) flags = replace$1(flags, /s/g, ''); + } + + rawFlags = flags; + + if (MISSED_STICKY && 'sticky' in re1) { + sticky = !!flags && stringIndexOf$1(flags, 'y') > -1; + if (sticky && UNSUPPORTED_Y$1) flags = replace$1(flags, /y/g, ''); + } + + if (regexpUnsupportedNcg) { + handled = handleNCG(pattern); + pattern = handled[0]; + groups = handled[1]; + } + + result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper); + + if (dotAll || sticky || groups.length) { + state = enforceInternalState(result); + if (dotAll) { + state.dotAll = true; + state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags); + } + if (sticky) state.sticky = true; + if (groups.length) state.groups = groups; + } + + if (pattern !== rawPattern) try { + // fails in old engines, but we have no alternatives for unsupported regex syntax + createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern); + } catch (error) { /* empty */ } + + return result; + }; + + var proxy = function (key) { + key in RegExpWrapper || defineProperty$8(RegExpWrapper, key, { + configurable: true, + get: function () { return NativeRegExp[key]; }, + set: function (it) { NativeRegExp[key] = it; } + }); + }; + + for (var keys$2 = getOwnPropertyNames$2(NativeRegExp), index = 0; keys$2.length > index;) { + proxy(keys$2[index++]); + } + + RegExpPrototype.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype; + redefine(global_1, 'RegExp', RegExpWrapper); + } + + // https://tc39.es/ecma262/#sec-get-regexp-@@species + setSpecies('RegExp'); + + var Array$6 = global_1.Array; + var max$1 = Math.max; + + var arraySliceSimple = function (O, start, end) { + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + var result = Array$6(max$1(fin - k, 0)); + for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]); + result.length = n; + return result; + }; + + /* eslint-disable es/no-object-getownpropertynames -- safe */ + + + var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + + + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function (it) { + try { + return $getOwnPropertyNames$1(it); + } catch (error) { + return arraySliceSimple(windowNames); + } + }; + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + var f$2 = function getOwnPropertyNames(it) { + return windowNames && classofRaw(it) == 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames$1(toIndexedObject(it)); + }; + + var objectGetOwnPropertyNamesExternal = { + f: f$2 + }; + + var getOwnPropertyNames$1 = objectGetOwnPropertyNamesExternal.f; + + // eslint-disable-next-line es/no-object-getownpropertynames -- required for testing + var FAILS_ON_PRIMITIVES$3 = fails(function () { return !Object.getOwnPropertyNames(1); }); + + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$3 }, { + getOwnPropertyNames: getOwnPropertyNames$1 + }); + + var $map$1 = arrayIteration.map; + + + var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('map'); + + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, { + map: function map(callbackfn /* , thisArg */) { + return $map$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // @@match logic + fixRegexpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.es/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible(this); + var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH); + return matcher ? functionCall(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString_1(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@match + function (string) { + var rx = anObject(this); + var S = toString_1(string); + var res = maybeCallNative(nativeMatch, rx, S); + + if (res.done) return res.value; + + if (!rx.global) return regexpExecAbstract(rx, S); + + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regexpExecAbstract(rx, S)) !== null) { + var matchStr = toString_1(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; + }); + + var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + + + var FAILS_ON_PRIMITIVES$2 = fails(function () { nativeGetOwnPropertyDescriptor$1(1); }); + var FORCED$6 = !descriptors || FAILS_ON_PRIMITIVES$2; + + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + _export({ target: 'Object', stat: true, forced: FORCED$6, sham: !descriptors }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor$1(toIndexedObject(it), key); + } + }); + + var TypeError$a = global_1.TypeError; + + // `Assert: IsConstructor(argument) is true` + var aConstructor = function (argument) { + if (isConstructor(argument)) return argument; + throw TypeError$a(tryToString(argument) + ' is not a constructor'); + }; + + var SPECIES$2 = wellKnownSymbol('species'); + + // `SpeciesConstructor` abstract operation + // https://tc39.es/ecma262/#sec-speciesconstructor + var speciesConstructor = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES$2]) == undefined ? defaultConstructor : aConstructor(S); + }; + + var UNSUPPORTED_Y = regexpStickyHelpers.UNSUPPORTED_Y; + var MAX_UINT32 = 0xFFFFFFFF; + var min$3 = Math.min; + var $push = [].push; + var exec = functionUncurryThis(/./.exec); + var push$3 = functionUncurryThis($push); + var stringSlice$2 = functionUncurryThis(''.slice); + + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + // Weex JS has frozen built-in prototypes, so use try / catch wrapper + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + // eslint-disable-next-line regexp/no-empty-group -- required for testing + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; + }); + + // @@split logic + fixRegexpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + if ( + 'abbc'.split(/(b)*/)[1] == 'c' || + // eslint-disable-next-line regexp/no-empty-group -- required for testing + 'test'.split(/(?:)/, -1).length != 4 || + 'ab'.split(/(?:ab)*/).length != 2 || + '.'.split(/(.?)(.?)/).length != 4 || + // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing + '.'.split(/()()/).length > 1 || + ''.split(/.?/).length + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = toString_1(requireObjectCoercible(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; + // If `separator` is not a regex, use native split + if (!isRegexp(separator)) { + return functionCall(nativeSplit, string, separator, lim); + } + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = functionCall(regexpExec, separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + if (lastIndex > lastLastIndex) { + push$3(output, stringSlice$2(string, lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) functionApply($push, output, arraySliceSimple(match, 1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + if (lastLastIndex === string.length) { + if (lastLength || !exec(separatorCopy, '')) push$3(output, ''); + } else push$3(output, stringSlice$2(string, lastLastIndex)); + return output.length > lim ? arraySliceSimple(output, 0, lim) : output; + }; + // Chakra, V8 + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : functionCall(nativeSplit, this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [ + // `String.prototype.split` method + // https://tc39.es/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT); + return splitter + ? functionCall(splitter, separator, O, limit) + : functionCall(internalSplit, toString_1(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (string, limit) { + var rx = anObject(this); + var S = toString_1(string); + var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit); + + if (res.done) return res.value; + + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (UNSUPPORTED_Y ? 'g' : 'y'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = UNSUPPORTED_Y ? 0 : q; + var z = regexpExecAbstract(splitter, UNSUPPORTED_Y ? stringSlice$2(S, q) : S); + var e; + if ( + z === null || + (e = min$3(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + push$3(A, stringSlice$2(S, p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + push$3(A, z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + push$3(A, stringSlice$2(S, p)); + return A; + } + ]; + }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y); + + var UNSCOPABLES = wellKnownSymbol('unscopables'); + var ArrayPrototype$1 = Array.prototype; + + // Array.prototype[@@unscopables] + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + if (ArrayPrototype$1[UNSCOPABLES] == undefined) { + objectDefineProperty.f(ArrayPrototype$1, UNSCOPABLES, { + configurable: true, + value: objectCreate(null) + }); + } + + // add a key to Array.prototype[@@unscopables] + var addToUnscopables = function (key) { + ArrayPrototype$1[UNSCOPABLES][key] = true; + }; + + var iterators = {}; + + var ITERATOR$6 = wellKnownSymbol('iterator'); + var BUGGY_SAFARI_ITERATORS$1 = false; + + // `%IteratorPrototype%` object + // https://tc39.es/ecma262/#sec-%iteratorprototype%-object + var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator; + + /* eslint-disable es/no-array-prototype-keys -- safe */ + if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS$1 = true; + else { + PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$2 = PrototypeOfArrayIteratorPrototype; + } + } + + var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype$2[ITERATOR$6].call(test) !== test; + }); + + if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {}; + + // `%IteratorPrototype%[@@iterator]()` method + // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator + if (!isCallable(IteratorPrototype$2[ITERATOR$6])) { + redefine(IteratorPrototype$2, ITERATOR$6, function () { + return this; + }); + } + + var iteratorsCore = { + IteratorPrototype: IteratorPrototype$2, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1 + }; + + var defineProperty$7 = objectDefineProperty.f; + + + + var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag'); + + var setToStringTag = function (target, TAG, STATIC) { + if (target && !STATIC) target = target.prototype; + if (target && !hasOwnProperty_1(target, TO_STRING_TAG$2)) { + defineProperty$7(target, TO_STRING_TAG$2, { configurable: true, value: TAG }); + } + }; + + var IteratorPrototype$1 = iteratorsCore.IteratorPrototype; + + + + + + var returnThis$1 = function () { return this; }; + + var createIteratorConstructor = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false); + iterators[TO_STRING_TAG] = returnThis$1; + return IteratorConstructor; + }; + + var PROPER_FUNCTION_NAME$2 = functionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME$1 = functionName.CONFIGURABLE; + var IteratorPrototype = iteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = iteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR$5 = wellKnownSymbol('iterator'); + var KEYS = 'keys'; + var VALUES = 'values'; + var ENTRIES = 'entries'; + + var returnThis = function () { return this; }; + + var defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR$5] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (objectSetPrototypeOf) { + objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR$5])) { + redefine(CurrentIteratorPrototype, ITERATOR$5, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true); + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME$2 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (CONFIGURABLE_FUNCTION_NAME$1) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return functionCall(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if (IterablePrototype[ITERATOR$5] !== defaultIterator) { + redefine(IterablePrototype, ITERATOR$5, defaultIterator, { name: DEFAULT }); + } + iterators[NAME] = defaultIterator; + + return methods; + }; + + var defineProperty$6 = objectDefineProperty.f; + + + + + var ARRAY_ITERATOR = 'Array Iterator'; + var setInternalState$5 = internalState.set; + var getInternalState$4 = internalState.getterFor(ARRAY_ITERATOR); + + // `Array.prototype.entries` method + // https://tc39.es/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.es/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.es/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.es/ecma262/#sec-createarrayiterator + var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState$5(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); + // `%ArrayIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next + }, function () { + var state = getInternalState$4(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.es/ecma262/#sec-createunmappedargumentsobject + // https://tc39.es/ecma262/#sec-createmappedargumentsobject + var values = iterators.Arguments = iterators.Array; + + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + + // V8 ~ Chrome 45- bug + if (descriptors && values.name !== 'values') try { + defineProperty$6(values, 'name', { value: 'values' }); + } catch (error) { /* empty */ } + + var ITERATOR$4 = wellKnownSymbol('iterator'); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR$4] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); + } catch (error) { /* empty */ } + + var checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR$4] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; + }; + + // eslint-disable-next-line es/no-typed-arrays -- safe + var arrayBufferNative = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined'; + + var defineProperty$5 = objectDefineProperty.f; + + + + + + + var Int8Array$4 = global_1.Int8Array; + var Int8ArrayPrototype$1 = Int8Array$4 && Int8Array$4.prototype; + var Uint8ClampedArray$1 = global_1.Uint8ClampedArray; + var Uint8ClampedArrayPrototype = Uint8ClampedArray$1 && Uint8ClampedArray$1.prototype; + var TypedArray = Int8Array$4 && objectGetPrototypeOf(Int8Array$4); + var TypedArrayPrototype$1 = Int8ArrayPrototype$1 && objectGetPrototypeOf(Int8ArrayPrototype$1); + var ObjectPrototype$2 = Object.prototype; + var TypeError$9 = global_1.TypeError; + + var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag'); + var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG'); + var TYPED_ARRAY_CONSTRUCTOR$1 = uid('TYPED_ARRAY_CONSTRUCTOR'); + // Fixing native typed arrays in Opera Presto crashes the browser, see #595 + var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferNative && !!objectSetPrototypeOf && classof(global_1.opera) !== 'Opera'; + var TYPED_ARRAY_TAG_REQUIRED = false; + var NAME, Constructor, Prototype; + + var TypedArrayConstructorsList = { + Int8Array: 1, + Uint8Array: 1, + Uint8ClampedArray: 1, + Int16Array: 2, + Uint16Array: 2, + Int32Array: 4, + Uint32Array: 4, + Float32Array: 4, + Float64Array: 8 + }; + + var BigIntArrayConstructorsList = { + BigInt64Array: 8, + BigUint64Array: 8 + }; + + var isView = function isView(it) { + if (!isObject$1(it)) return false; + var klass = classof(it); + return klass === 'DataView' + || hasOwnProperty_1(TypedArrayConstructorsList, klass) + || hasOwnProperty_1(BigIntArrayConstructorsList, klass); + }; + + var isTypedArray = function (it) { + if (!isObject$1(it)) return false; + var klass = classof(it); + return hasOwnProperty_1(TypedArrayConstructorsList, klass) + || hasOwnProperty_1(BigIntArrayConstructorsList, klass); + }; + + var aTypedArray$m = function (it) { + if (isTypedArray(it)) return it; + throw TypeError$9('Target is not a typed array'); + }; + + var aTypedArrayConstructor$2 = function (C) { + if (isCallable(C) && (!objectSetPrototypeOf || objectIsPrototypeOf(TypedArray, C))) return C; + throw TypeError$9(tryToString(C) + ' is not a typed array constructor'); + }; + + var exportTypedArrayMethod$n = function (KEY, property, forced, options) { + if (!descriptors) return; + if (forced) for (var ARRAY in TypedArrayConstructorsList) { + var TypedArrayConstructor = global_1[ARRAY]; + if (TypedArrayConstructor && hasOwnProperty_1(TypedArrayConstructor.prototype, KEY)) try { + delete TypedArrayConstructor.prototype[KEY]; + } catch (error) { + // old WebKit bug - some methods are non-configurable + try { + TypedArrayConstructor.prototype[KEY] = property; + } catch (error2) { /* empty */ } + } + } + if (!TypedArrayPrototype$1[KEY] || forced) { + redefine(TypedArrayPrototype$1, KEY, forced ? property + : NATIVE_ARRAY_BUFFER_VIEWS$1 && Int8ArrayPrototype$1[KEY] || property, options); + } + }; + + var exportTypedArrayStaticMethod = function (KEY, property, forced) { + var ARRAY, TypedArrayConstructor; + if (!descriptors) return; + if (objectSetPrototypeOf) { + if (forced) for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global_1[ARRAY]; + if (TypedArrayConstructor && hasOwnProperty_1(TypedArrayConstructor, KEY)) try { + delete TypedArrayConstructor[KEY]; + } catch (error) { /* empty */ } + } + if (!TypedArray[KEY] || forced) { + // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable + try { + return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$1 && TypedArray[KEY] || property); + } catch (error) { /* empty */ } + } else return; + } + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global_1[ARRAY]; + if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) { + redefine(TypedArrayConstructor, KEY, property); + } + } + }; + + for (NAME in TypedArrayConstructorsList) { + Constructor = global_1[NAME]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR$1, Constructor); + else NATIVE_ARRAY_BUFFER_VIEWS$1 = false; + } + + for (NAME in BigIntArrayConstructorsList) { + Constructor = global_1[NAME]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR$1, Constructor); + } + + // WebKit bug - typed arrays constructors prototype is Object.prototype + if (!NATIVE_ARRAY_BUFFER_VIEWS$1 || !isCallable(TypedArray) || TypedArray === Function.prototype) { + // eslint-disable-next-line no-shadow -- safe + TypedArray = function TypedArray() { + throw TypeError$9('Incorrect invocation'); + }; + if (NATIVE_ARRAY_BUFFER_VIEWS$1) for (NAME in TypedArrayConstructorsList) { + if (global_1[NAME]) objectSetPrototypeOf(global_1[NAME], TypedArray); + } + } + + if (!NATIVE_ARRAY_BUFFER_VIEWS$1 || !TypedArrayPrototype$1 || TypedArrayPrototype$1 === ObjectPrototype$2) { + TypedArrayPrototype$1 = TypedArray.prototype; + if (NATIVE_ARRAY_BUFFER_VIEWS$1) for (NAME in TypedArrayConstructorsList) { + if (global_1[NAME]) objectSetPrototypeOf(global_1[NAME].prototype, TypedArrayPrototype$1); + } + } + + // WebKit bug - one more object in Uint8ClampedArray prototype chain + if (NATIVE_ARRAY_BUFFER_VIEWS$1 && objectGetPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$1) { + objectSetPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype$1); + } + + if (descriptors && !hasOwnProperty_1(TypedArrayPrototype$1, TO_STRING_TAG$1)) { + TYPED_ARRAY_TAG_REQUIRED = true; + defineProperty$5(TypedArrayPrototype$1, TO_STRING_TAG$1, { get: function () { + return isObject$1(this) ? this[TYPED_ARRAY_TAG] : undefined; + } }); + for (NAME in TypedArrayConstructorsList) if (global_1[NAME]) { + createNonEnumerableProperty(global_1[NAME], TYPED_ARRAY_TAG, NAME); + } + } + + var arrayBufferViewCore = { + NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$1, + TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR$1, + TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG, + aTypedArray: aTypedArray$m, + aTypedArrayConstructor: aTypedArrayConstructor$2, + exportTypedArrayMethod: exportTypedArrayMethod$n, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod, + isView: isView, + isTypedArray: isTypedArray, + TypedArray: TypedArray, + TypedArrayPrototype: TypedArrayPrototype$1 + }; + + /* eslint-disable no-new -- required for testing */ + + + + var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; + + var ArrayBuffer$2 = global_1.ArrayBuffer; + var Int8Array$3 = global_1.Int8Array; + + var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () { + Int8Array$3(1); + }) || !fails(function () { + new Int8Array$3(-1); + }) || !checkCorrectnessOfIteration(function (iterable) { + new Int8Array$3(); + new Int8Array$3(null); + new Int8Array$3(1.5); + new Int8Array$3(iterable); + }, true) || fails(function () { + // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill + return new Int8Array$3(new ArrayBuffer$2(2), 1, undefined).length !== 1; + }); + + var redefineAll = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; + }; + + var TypeError$8 = global_1.TypeError; + + var anInstance = function (it, Prototype) { + if (objectIsPrototypeOf(Prototype, it)) return it; + throw TypeError$8('Incorrect invocation'); + }; + + var RangeError$7 = global_1.RangeError; + + // `ToIndex` abstract operation + // https://tc39.es/ecma262/#sec-toindex + var toIndex = function (it) { + if (it === undefined) return 0; + var number = toIntegerOrInfinity(it); + var length = toLength(number); + if (number !== length) throw RangeError$7('Wrong length or index'); + return length; + }; + + // IEEE754 conversions based on https://github.com/feross/ieee754 + + + var Array$5 = global_1.Array; + var abs = Math.abs; + var pow$1 = Math.pow; + var floor$4 = Math.floor; + var log$2 = Math.log; + var LN2 = Math.LN2; + + var pack = function (number, mantissaLength, bytes) { + var buffer = Array$5(bytes); + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var rt = mantissaLength === 23 ? pow$1(2, -24) - pow$1(2, -77) : 0; + var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0; + var index = 0; + var exponent, mantissa, c; + number = abs(number); + // eslint-disable-next-line no-self-compare -- NaN check + if (number != number || number === Infinity) { + // eslint-disable-next-line no-self-compare -- NaN check + mantissa = number != number ? 1 : 0; + exponent = eMax; + } else { + exponent = floor$4(log$2(number) / LN2); + c = pow$1(2, -exponent); + if (number * c < 1) { + exponent--; + c *= 2; + } + if (exponent + eBias >= 1) { + number += rt / c; + } else { + number += rt * pow$1(2, 1 - eBias); + } + if (number * c >= 2) { + exponent++; + c /= 2; + } + if (exponent + eBias >= eMax) { + mantissa = 0; + exponent = eMax; + } else if (exponent + eBias >= 1) { + mantissa = (number * c - 1) * pow$1(2, mantissaLength); + exponent = exponent + eBias; + } else { + mantissa = number * pow$1(2, eBias - 1) * pow$1(2, mantissaLength); + exponent = 0; + } + } + while (mantissaLength >= 8) { + buffer[index++] = mantissa & 255; + mantissa /= 256; + mantissaLength -= 8; + } + exponent = exponent << mantissaLength | mantissa; + exponentLength += mantissaLength; + while (exponentLength > 0) { + buffer[index++] = exponent & 255; + exponent /= 256; + exponentLength -= 8; + } + buffer[--index] |= sign * 128; + return buffer; + }; + + var unpack = function (buffer, mantissaLength) { + var bytes = buffer.length; + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var nBits = exponentLength - 7; + var index = bytes - 1; + var sign = buffer[index--]; + var exponent = sign & 127; + var mantissa; + sign >>= 7; + while (nBits > 0) { + exponent = exponent * 256 + buffer[index--]; + nBits -= 8; + } + mantissa = exponent & (1 << -nBits) - 1; + exponent >>= -nBits; + nBits += mantissaLength; + while (nBits > 0) { + mantissa = mantissa * 256 + buffer[index--]; + nBits -= 8; + } + if (exponent === 0) { + exponent = 1 - eBias; + } else if (exponent === eMax) { + return mantissa ? NaN : sign ? -Infinity : Infinity; + } else { + mantissa = mantissa + pow$1(2, mantissaLength); + exponent = exponent - eBias; + } return (sign ? -1 : 1) * mantissa * pow$1(2, exponent - mantissaLength); + }; + + var ieee754 = { + pack: pack, + unpack: unpack + }; + + // `Array.prototype.fill` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.fill + var arrayFill = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = lengthOfArrayLike(O); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; + }; + + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + var defineProperty$4 = objectDefineProperty.f; + + + + + + var PROPER_FUNCTION_NAME$1 = functionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = functionName.CONFIGURABLE; + var getInternalState$3 = internalState.get; + var setInternalState$4 = internalState.set; + var ARRAY_BUFFER$1 = 'ArrayBuffer'; + var DATA_VIEW = 'DataView'; + var PROTOTYPE$1 = 'prototype'; + var WRONG_LENGTH = 'Wrong length'; + var WRONG_INDEX = 'Wrong index'; + var NativeArrayBuffer$1 = global_1[ARRAY_BUFFER$1]; + var $ArrayBuffer = NativeArrayBuffer$1; + var ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE$1]; + var $DataView = global_1[DATA_VIEW]; + var DataViewPrototype = $DataView && $DataView[PROTOTYPE$1]; + var ObjectPrototype$1 = Object.prototype; + var Array$4 = global_1.Array; + var RangeError$6 = global_1.RangeError; + var fill = functionUncurryThis(arrayFill); + var reverse = functionUncurryThis([].reverse); + + var packIEEE754 = ieee754.pack; + var unpackIEEE754 = ieee754.unpack; + + var packInt8 = function (number) { + return [number & 0xFF]; + }; + + var packInt16 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF]; + }; + + var packInt32 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF]; + }; + + var unpackInt32 = function (buffer) { + return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; + }; + + var packFloat32 = function (number) { + return packIEEE754(number, 23, 4); + }; + + var packFloat64 = function (number) { + return packIEEE754(number, 52, 8); + }; + + var addGetter = function (Constructor, key) { + defineProperty$4(Constructor[PROTOTYPE$1], key, { get: function () { return getInternalState$3(this)[key]; } }); + }; + + var get = function (view, count, index, isLittleEndian) { + var intIndex = toIndex(index); + var store = getInternalState$3(view); + if (intIndex + count > store.byteLength) throw RangeError$6(WRONG_INDEX); + var bytes = getInternalState$3(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = arraySliceSimple(bytes, start, start + count); + return isLittleEndian ? pack : reverse(pack); + }; + + var set$1 = function (view, count, index, conversion, value, isLittleEndian) { + var intIndex = toIndex(index); + var store = getInternalState$3(view); + if (intIndex + count > store.byteLength) throw RangeError$6(WRONG_INDEX); + var bytes = getInternalState$3(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = conversion(+value); + for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1]; + }; + + if (!arrayBufferNative) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, ArrayBufferPrototype); + var byteLength = toIndex(length); + setInternalState$4(this, { + bytes: fill(Array$4(byteLength), 0), + byteLength: byteLength + }); + if (!descriptors) this.byteLength = byteLength; + }; + + ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE$1]; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance(this, DataViewPrototype); + anInstance(buffer, ArrayBufferPrototype); + var bufferLength = getInternalState$3(buffer).byteLength; + var offset = toIntegerOrInfinity(byteOffset); + if (offset < 0 || offset > bufferLength) throw RangeError$6('Wrong offset'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); + if (offset + byteLength > bufferLength) throw RangeError$6(WRONG_LENGTH); + setInternalState$4(this, { + buffer: buffer, + byteLength: byteLength, + byteOffset: offset + }); + if (!descriptors) { + this.buffer = buffer; + this.byteLength = byteLength; + this.byteOffset = offset; + } + }; + + DataViewPrototype = $DataView[PROTOTYPE$1]; + + if (descriptors) { + addGetter($ArrayBuffer, 'byteLength'); + addGetter($DataView, 'buffer'); + addGetter($DataView, 'byteLength'); + addGetter($DataView, 'byteOffset'); + } + + redefineAll(DataViewPrototype, { + getInt8: function getInt8(byteOffset) { + return get(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset /* , littleEndian */) { + return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)); + }, + getUint32: function getUint32(byteOffset /* , littleEndian */) { + return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0; + }, + getFloat32: function getFloat32(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23); + }, + getFloat64: function getFloat64(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52); + }, + setInt8: function setInt8(byteOffset, value) { + set$1(this, 1, byteOffset, packInt8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set$1(this, 1, byteOffset, packInt8, value); + }, + setInt16: function setInt16(byteOffset, value /* , littleEndian */) { + set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint16: function setUint16(byteOffset, value /* , littleEndian */) { + set$1(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setInt32: function setInt32(byteOffset, value /* , littleEndian */) { + set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint32: function setUint32(byteOffset, value /* , littleEndian */) { + set$1(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { + set$1(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { + set$1(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined); + } + }); + } else { + var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$1 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1; + /* eslint-disable no-new -- required for testing */ + if (!fails(function () { + NativeArrayBuffer$1(1); + }) || !fails(function () { + new NativeArrayBuffer$1(-1); + }) || fails(function () { + new NativeArrayBuffer$1(); + new NativeArrayBuffer$1(1.5); + new NativeArrayBuffer$1(NaN); + return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME; + })) { + /* eslint-enable no-new -- required for testing */ + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, ArrayBufferPrototype); + return new NativeArrayBuffer$1(toIndex(length)); + }; + + $ArrayBuffer[PROTOTYPE$1] = ArrayBufferPrototype; + + for (var keys$1 = getOwnPropertyNames(NativeArrayBuffer$1), j = 0, key; keys$1.length > j;) { + if (!((key = keys$1[j++]) in $ArrayBuffer)) { + createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer$1[key]); + } + } + + ArrayBufferPrototype.constructor = $ArrayBuffer; + } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1); + } + + // WebKit bug - the same parent prototype for typed arrays and data view + if (objectSetPrototypeOf && objectGetPrototypeOf(DataViewPrototype) !== ObjectPrototype$1) { + objectSetPrototypeOf(DataViewPrototype, ObjectPrototype$1); + } + + // iOS Safari 7.x bug + var testView = new $DataView(new $ArrayBuffer(2)); + var $setInt8 = functionUncurryThis(DataViewPrototype.setInt8); + testView.setInt8(0, 2147483648); + testView.setInt8(1, 2147483649); + if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, { + setInt8: function setInt8(byteOffset, value) { + $setInt8(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + $setInt8(this, byteOffset, value << 24 >> 24); + } + }, { unsafe: true }); + } + + setToStringTag($ArrayBuffer, ARRAY_BUFFER$1); + setToStringTag($DataView, DATA_VIEW); + + var arrayBuffer = { + ArrayBuffer: $ArrayBuffer, + DataView: $DataView + }; + + var floor$3 = Math.floor; + + // `IsIntegralNumber` abstract operation + // https://tc39.es/ecma262/#sec-isintegralnumber + // eslint-disable-next-line es/no-number-isinteger -- safe + var isIntegralNumber = Number.isInteger || function isInteger(it) { + return !isObject$1(it) && isFinite(it) && floor$3(it) === it; + }; + + var RangeError$5 = global_1.RangeError; + + var toPositiveInteger = function (it) { + var result = toIntegerOrInfinity(it); + if (result < 0) throw RangeError$5("The argument can't be less than 0"); + return result; + }; + + var RangeError$4 = global_1.RangeError; + + var toOffset = function (it, BYTES) { + var offset = toPositiveInteger(it); + if (offset % BYTES) throw RangeError$4('Wrong offset'); + return offset; + }; + + var ITERATOR$3 = wellKnownSymbol('iterator'); + + var getIteratorMethod = function (it) { + if (it != undefined) return getMethod(it, ITERATOR$3) + || getMethod(it, '@@iterator') + || iterators[classof(it)]; + }; + + var TypeError$7 = global_1.TypeError; + + var getIterator = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(functionCall(iteratorMethod, argument)); + throw TypeError$7(tryToString(argument) + ' is not iterable'); + }; + + var ITERATOR$2 = wellKnownSymbol('iterator'); + var ArrayPrototype = Array.prototype; + + // check on default Array iterator + var isArrayIteratorMethod = function (it) { + return it !== undefined && (iterators.Array === it || ArrayPrototype[ITERATOR$2] === it); + }; + + var aTypedArrayConstructor$1 = arrayBufferViewCore.aTypedArrayConstructor; + + var typedArrayFrom = function from(source /* , mapfn, thisArg */) { + var C = aConstructor(this); + var O = toObject(source); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod(O); + var i, length, result, step, iterator, next; + if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + O = []; + while (!(step = functionCall(next, iterator)).done) { + O.push(step.value); + } + } + if (mapping && argumentsLength > 2) { + mapfn = functionBindContext(mapfn, arguments[2]); + } + length = lengthOfArrayLike(O); + result = new (aTypedArrayConstructor$1(C))(length); + for (i = 0; length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + var typedArrayConstructor = createCommonjsModule(function (module) { + + + + + + + + + + + + + + + + + + + + + + + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + + var forEach = arrayIteration.forEach; + + + + + + + var getInternalState = internalState.get; + var setInternalState = internalState.set; + var nativeDefineProperty = objectDefineProperty.f; + var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + var round = Math.round; + var RangeError = global_1.RangeError; + var ArrayBuffer = arrayBuffer.ArrayBuffer; + var ArrayBufferPrototype = ArrayBuffer.prototype; + var DataView = arrayBuffer.DataView; + var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; + var TYPED_ARRAY_CONSTRUCTOR = arrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR; + var TYPED_ARRAY_TAG = arrayBufferViewCore.TYPED_ARRAY_TAG; + var TypedArray = arrayBufferViewCore.TypedArray; + var TypedArrayPrototype = arrayBufferViewCore.TypedArrayPrototype; + var aTypedArrayConstructor = arrayBufferViewCore.aTypedArrayConstructor; + var isTypedArray = arrayBufferViewCore.isTypedArray; + var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; + var WRONG_LENGTH = 'Wrong length'; + + var fromList = function (C, list) { + aTypedArrayConstructor(C); + var index = 0; + var length = list.length; + var result = new C(length); + while (length > index) result[index] = list[index++]; + return result; + }; + + var addGetter = function (it, key) { + nativeDefineProperty(it, key, { get: function () { + return getInternalState(this)[key]; + } }); + }; + + var isArrayBuffer = function (it) { + var klass; + return objectIsPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer'; + }; + + var isTypedArrayIndex = function (target, key) { + return isTypedArray(target) + && !isSymbol$1(key) + && key in target + && isIntegralNumber(+key) + && key >= 0; + }; + + var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) { + key = toPropertyKey(key); + return isTypedArrayIndex(target, key) + ? createPropertyDescriptor(2, target[key]) + : nativeGetOwnPropertyDescriptor(target, key); + }; + + var wrappedDefineProperty = function defineProperty(target, key, descriptor) { + key = toPropertyKey(key); + if (isTypedArrayIndex(target, key) + && isObject$1(descriptor) + && hasOwnProperty_1(descriptor, 'value') + && !hasOwnProperty_1(descriptor, 'get') + && !hasOwnProperty_1(descriptor, 'set') + // TODO: add validation descriptor w/o calling accessors + && !descriptor.configurable + && (!hasOwnProperty_1(descriptor, 'writable') || descriptor.writable) + && (!hasOwnProperty_1(descriptor, 'enumerable') || descriptor.enumerable) + ) { + target[key] = descriptor.value; + return target; + } return nativeDefineProperty(target, key, descriptor); + }; + + if (descriptors) { + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + objectGetOwnPropertyDescriptor.f = wrappedGetOwnPropertyDescriptor; + objectDefineProperty.f = wrappedDefineProperty; + addGetter(TypedArrayPrototype, 'buffer'); + addGetter(TypedArrayPrototype, 'byteOffset'); + addGetter(TypedArrayPrototype, 'byteLength'); + addGetter(TypedArrayPrototype, 'length'); + } + + _export({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, { + getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor, + defineProperty: wrappedDefineProperty + }); + + module.exports = function (TYPE, wrapper, CLAMPED) { + var BYTES = TYPE.match(/\d+$/)[0] / 8; + var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array'; + var GETTER = 'get' + TYPE; + var SETTER = 'set' + TYPE; + var NativeTypedArrayConstructor = global_1[CONSTRUCTOR_NAME]; + var TypedArrayConstructor = NativeTypedArrayConstructor; + var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype; + var exported = {}; + + var getter = function (that, index) { + var data = getInternalState(that); + return data.view[GETTER](index * BYTES + data.byteOffset, true); + }; + + var setter = function (that, index, value) { + var data = getInternalState(that); + if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF; + data.view[SETTER](index * BYTES + data.byteOffset, value, true); + }; + + var addElement = function (that, index) { + nativeDefineProperty(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + TypedArrayConstructor = wrapper(function (that, data, offset, $length) { + anInstance(that, TypedArrayConstructorPrototype); + var index = 0; + var byteOffset = 0; + var buffer, byteLength, length; + if (!isObject$1(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new ArrayBuffer(byteLength); + } else if (isArrayBuffer(data)) { + buffer = data; + byteOffset = toOffset(offset, BYTES); + var $len = data.byteLength; + if ($length === undefined) { + if ($len % BYTES) throw RangeError(WRONG_LENGTH); + byteLength = $len - byteOffset; + if (byteLength < 0) throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if (isTypedArray(data)) { + return fromList(TypedArrayConstructor, data); + } else { + return functionCall(typedArrayFrom, TypedArrayConstructor, data); + } + setInternalState(that, { + buffer: buffer, + byteOffset: byteOffset, + byteLength: byteLength, + length: length, + view: new DataView(buffer) + }); + while (index < length) addElement(that, index++); + }); + + if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray); + TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = objectCreate(TypedArrayPrototype); + } else if (typedArrayConstructorsRequireWrappers) { + TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) { + anInstance(dummy, TypedArrayConstructorPrototype); + return inheritIfRequired(function () { + if (!isObject$1(data)) return new NativeTypedArrayConstructor(toIndex(data)); + if (isArrayBuffer(data)) return $length !== undefined + ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length) + : typedArrayOffset !== undefined + ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES)) + : new NativeTypedArrayConstructor(data); + if (isTypedArray(data)) return fromList(TypedArrayConstructor, data); + return functionCall(typedArrayFrom, TypedArrayConstructor, data); + }(), dummy, TypedArrayConstructor); + }); + + if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray); + forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) { + if (!(key in TypedArrayConstructor)) { + createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]); + } + }); + TypedArrayConstructor.prototype = TypedArrayConstructorPrototype; + } + + if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) { + createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor); + } + + createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor); + + if (TYPED_ARRAY_TAG) { + createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME); + } + + exported[CONSTRUCTOR_NAME] = TypedArrayConstructor; + + _export({ + global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS + }, exported); + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) { + createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES); + } + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) { + createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES); + } + + setSpecies(CONSTRUCTOR_NAME); + }; + } else module.exports = function () { /* empty */ }; + }); + + // `Uint8Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + typedArrayConstructor('Uint8', function (init) { + return function Uint8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var min$2 = Math.min; + + // `Array.prototype.copyWithin` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.copywithin + // eslint-disable-next-line es/no-array-prototype-copywithin -- safe + var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var to = toAbsoluteIndex(target, len); + var from = toAbsoluteIndex(start, len); + var end = arguments.length > 2 ? arguments[2] : undefined; + var count = min$2((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); + var inc = 1; + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + while (count-- > 0) { + if (from in O) O[to] = O[from]; + else delete O[to]; + to += inc; + from += inc; + } return O; + }; + + var u$ArrayCopyWithin = functionUncurryThis(arrayCopyWithin); + var aTypedArray$l = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$m = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.copyWithin` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin + exportTypedArrayMethod$m('copyWithin', function copyWithin(target, start /* , end */) { + return u$ArrayCopyWithin(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }); + + var $every = arrayIteration.every; + + var aTypedArray$k = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$l = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.every` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every + exportTypedArrayMethod$l('every', function every(callbackfn /* , thisArg */) { + return $every(aTypedArray$k(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var aTypedArray$j = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$k = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.fill` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill + exportTypedArrayMethod$k('fill', function fill(value /* , start, end */) { + var length = arguments.length; + return functionCall( + arrayFill, + aTypedArray$j(this), + value, + length > 1 ? arguments[1] : undefined, + length > 2 ? arguments[2] : undefined + ); + }); + + var arrayFromConstructorAndList = function (Constructor, list) { + var index = 0; + var length = lengthOfArrayLike(list); + var result = new Constructor(length); + while (length > index) result[index] = list[index++]; + return result; + }; + + var TYPED_ARRAY_CONSTRUCTOR = arrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR; + var aTypedArrayConstructor = arrayBufferViewCore.aTypedArrayConstructor; + + // a part of `TypedArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#typedarray-species-create + var typedArraySpeciesConstructor = function (originalArray) { + return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR])); + }; + + var typedArrayFromSpeciesAndList = function (instance, list) { + return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list); + }; + + var $filter = arrayIteration.filter; + + + var aTypedArray$i = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$j = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.filter` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter + exportTypedArrayMethod$j('filter', function filter(callbackfn /* , thisArg */) { + var list = $filter(aTypedArray$i(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return typedArrayFromSpeciesAndList(this, list); + }); + + var $find = arrayIteration.find; + + var aTypedArray$h = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$i = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.find` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find + exportTypedArrayMethod$i('find', function find(predicate /* , thisArg */) { + return $find(aTypedArray$h(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var $findIndex = arrayIteration.findIndex; + + var aTypedArray$g = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$h = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex + exportTypedArrayMethod$h('findIndex', function findIndex(predicate /* , thisArg */) { + return $findIndex(aTypedArray$g(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var $forEach$1 = arrayIteration.forEach; + + var aTypedArray$f = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$g = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.forEach` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach + exportTypedArrayMethod$g('forEach', function forEach(callbackfn /* , thisArg */) { + $forEach$1(aTypedArray$f(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var $includes$1 = arrayIncludes.includes; + + var aTypedArray$e = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$f = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.includes` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes + exportTypedArrayMethod$f('includes', function includes(searchElement /* , fromIndex */) { + return $includes$1(aTypedArray$e(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }); + + var $indexOf = arrayIncludes.indexOf; + + var aTypedArray$d = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$e = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof + exportTypedArrayMethod$e('indexOf', function indexOf(searchElement /* , fromIndex */) { + return $indexOf(aTypedArray$d(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ITERATOR$1 = wellKnownSymbol('iterator'); + var Uint8Array$2 = global_1.Uint8Array; + var arrayValues = functionUncurryThis(es_array_iterator.values); + var arrayKeys = functionUncurryThis(es_array_iterator.keys); + var arrayEntries = functionUncurryThis(es_array_iterator.entries); + var aTypedArray$c = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$d = arrayBufferViewCore.exportTypedArrayMethod; + var TypedArrayPrototype = Uint8Array$2 && Uint8Array$2.prototype; + + var GENERIC = !fails(function () { + TypedArrayPrototype[ITERATOR$1].call([1]); + }); + + var ITERATOR_IS_VALUES = !!TypedArrayPrototype + && TypedArrayPrototype.values + && TypedArrayPrototype[ITERATOR$1] === TypedArrayPrototype.values + && TypedArrayPrototype.values.name === 'values'; + + var typedArrayValues = function values() { + return arrayValues(aTypedArray$c(this)); + }; + + // `%TypedArray%.prototype.entries` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries + exportTypedArrayMethod$d('entries', function entries() { + return arrayEntries(aTypedArray$c(this)); + }, GENERIC); + // `%TypedArray%.prototype.keys` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys + exportTypedArrayMethod$d('keys', function keys() { + return arrayKeys(aTypedArray$c(this)); + }, GENERIC); + // `%TypedArray%.prototype.values` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values + exportTypedArrayMethod$d('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' }); + // `%TypedArray%.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator + exportTypedArrayMethod$d(ITERATOR$1, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' }); + + var aTypedArray$b = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$c = arrayBufferViewCore.exportTypedArrayMethod; + var $join = functionUncurryThis([].join); + + // `%TypedArray%.prototype.join` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join + exportTypedArrayMethod$c('join', function join(separator) { + return $join(aTypedArray$b(this), separator); + }); + + /* eslint-disable es/no-array-prototype-lastindexof -- safe */ + + + + + + + var min$1 = Math.min; + var $lastIndexOf = [].lastIndexOf; + var NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; + var STRICT_METHOD$1 = arrayMethodIsStrict('lastIndexOf'); + var FORCED$5 = NEGATIVE_ZERO || !STRICT_METHOD$1; + + // `Array.prototype.lastIndexOf` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.lastindexof + var arrayLastIndexOf = FORCED$5 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return functionApply($lastIndexOf, this, arguments) || 0; + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var index = length - 1; + if (arguments.length > 1) index = min$1(index, toIntegerOrInfinity(arguments[1])); + if (index < 0) index = length + index; + for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; + return -1; + } : $lastIndexOf; + + var aTypedArray$a = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$b = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.lastIndexOf` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof + exportTypedArrayMethod$b('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) { + var length = arguments.length; + return functionApply(arrayLastIndexOf, aTypedArray$a(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]); + }); + + var $map = arrayIteration.map; + + + var aTypedArray$9 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$a = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.map` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map + exportTypedArrayMethod$a('map', function map(mapfn /* , thisArg */) { + return $map(aTypedArray$9(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) { + return new (typedArraySpeciesConstructor(O))(length); + }); + }); + + var TypeError$6 = global_1.TypeError; + + // `Array.prototype.{ reduce, reduceRight }` methods implementation + var createMethod$1 = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aCallable(callbackfn); + var O = toObject(that); + var self = indexedObject(O); + var length = lengthOfArrayLike(O); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError$6('Reduce of empty array with no initial value'); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; + }; + + var arrayReduce = { + // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + left: createMethod$1(false), + // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + right: createMethod$1(true) + }; + + var $reduce = arrayReduce.left; + + var aTypedArray$8 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$9 = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.reduce` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce + exportTypedArrayMethod$9('reduce', function reduce(callbackfn /* , initialValue */) { + var length = arguments.length; + return $reduce(aTypedArray$8(this), callbackfn, length, length > 1 ? arguments[1] : undefined); + }); + + var $reduceRight = arrayReduce.right; + + var aTypedArray$7 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$8 = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.reduceRicht` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright + exportTypedArrayMethod$8('reduceRight', function reduceRight(callbackfn /* , initialValue */) { + var length = arguments.length; + return $reduceRight(aTypedArray$7(this), callbackfn, length, length > 1 ? arguments[1] : undefined); + }); + + var aTypedArray$6 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$7 = arrayBufferViewCore.exportTypedArrayMethod; + var floor$2 = Math.floor; + + // `%TypedArray%.prototype.reverse` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse + exportTypedArrayMethod$7('reverse', function reverse() { + var that = this; + var length = aTypedArray$6(that).length; + var middle = floor$2(length / 2); + var index = 0; + var value; + while (index < middle) { + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } return that; + }); + + var RangeError$3 = global_1.RangeError; + var Int8Array$2 = global_1.Int8Array; + var Int8ArrayPrototype = Int8Array$2 && Int8Array$2.prototype; + var $set = Int8ArrayPrototype && Int8ArrayPrototype.set; + var aTypedArray$5 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod; + + var WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + var array = new Uint8ClampedArray(2); + functionCall($set, array, { length: 1, 0: 3 }, 1); + return array[1] !== 3; + }); + + // https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other + var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () { + var array = new Int8Array$2(2); + array.set(1); + array.set('2', 1); + return array[0] !== 0 || array[1] !== 2; + }); + + // `%TypedArray%.prototype.set` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set + exportTypedArrayMethod$6('set', function set(arrayLike /* , offset */) { + aTypedArray$5(this); + var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); + var src = toObject(arrayLike); + if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return functionCall($set, this, src, offset); + var length = this.length; + var len = lengthOfArrayLike(src); + var index = 0; + if (len + offset > length) throw RangeError$3('Wrong length'); + while (index < len) this[offset + index] = src[index++]; + }, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG); + + var arraySlice = functionUncurryThis([].slice); + + var aTypedArray$4 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$5 = arrayBufferViewCore.exportTypedArrayMethod; + + var FORCED$4 = fails(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + new Int8Array(1).slice(); + }); + + // `%TypedArray%.prototype.slice` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice + exportTypedArrayMethod$5('slice', function slice(start, end) { + var list = arraySlice(aTypedArray$4(this), start, end); + var C = typedArraySpeciesConstructor(this); + var index = 0; + var length = list.length; + var result = new C(length); + while (length > index) result[index] = list[index++]; + return result; + }, FORCED$4); + + var $some = arrayIteration.some; + + var aTypedArray$3 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$4 = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.some` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some + exportTypedArrayMethod$4('some', function some(callbackfn /* , thisArg */) { + return $some(aTypedArray$3(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var floor$1 = Math.floor; + + var mergeSort = function (array, comparefn) { + var length = array.length; + var middle = floor$1(length / 2); + return length < 8 ? insertionSort(array, comparefn) : merge( + array, + mergeSort(arraySliceSimple(array, 0, middle), comparefn), + mergeSort(arraySliceSimple(array, middle), comparefn), + comparefn + ); + }; + + var insertionSort = function (array, comparefn) { + var length = array.length; + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + if (j !== i++) array[j] = element; + } return array; + }; + + var merge = function (array, left, right, comparefn) { + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + + while (lindex < llength || rindex < rlength) { + array[lindex + rindex] = (lindex < llength && rindex < rlength) + ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] + : lindex < llength ? left[lindex++] : right[rindex++]; + } return array; + }; + + var arraySort = mergeSort; + + var firefox = engineUserAgent.match(/firefox\/(\d+)/i); + + var engineFfVersion = !!firefox && +firefox[1]; + + var engineIsIeOrEdge = /MSIE|Trident/.test(engineUserAgent); + + var webkit = engineUserAgent.match(/AppleWebKit\/(\d+)\./); + + var engineWebkitVersion = !!webkit && +webkit[1]; + + var Array$3 = global_1.Array; + var aTypedArray$2 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$3 = arrayBufferViewCore.exportTypedArrayMethod; + var Uint16Array = global_1.Uint16Array; + var un$Sort$1 = Uint16Array && functionUncurryThis(Uint16Array.prototype.sort); + + // WebKit + var ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort$1 && !(fails(function () { + un$Sort$1(new Uint16Array(2), null); + }) && fails(function () { + un$Sort$1(new Uint16Array(2), {}); + })); + + var STABLE_SORT$1 = !!un$Sort$1 && !fails(function () { + // feature detection can be too slow, so check engines versions + if (engineV8Version) return engineV8Version < 74; + if (engineFfVersion) return engineFfVersion < 67; + if (engineIsIeOrEdge) return true; + if (engineWebkitVersion) return engineWebkitVersion < 602; + + var array = new Uint16Array(516); + var expected = Array$3(516); + var index, mod; + + for (index = 0; index < 516; index++) { + mod = index % 4; + array[index] = 515 - index; + expected[index] = index - 2 * mod + 3; + } + + un$Sort$1(array, function (a, b) { + return (a / 4 | 0) - (b / 4 | 0); + }); + + for (index = 0; index < 516; index++) { + if (array[index] !== expected[index]) return true; + } + }); + + var getSortCompare$1 = function (comparefn) { + return function (x, y) { + if (comparefn !== undefined) return +comparefn(x, y) || 0; + // eslint-disable-next-line no-self-compare -- NaN check + if (y !== y) return -1; + // eslint-disable-next-line no-self-compare -- NaN check + if (x !== x) return 1; + if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1; + return x > y; + }; + }; + + // `%TypedArray%.prototype.sort` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort + exportTypedArrayMethod$3('sort', function sort(comparefn) { + if (comparefn !== undefined) aCallable(comparefn); + if (STABLE_SORT$1) return un$Sort$1(this, comparefn); + + return arraySort(aTypedArray$2(this), getSortCompare$1(comparefn)); + }, !STABLE_SORT$1 || ACCEPT_INCORRECT_ARGUMENTS); + + var aTypedArray$1 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$2 = arrayBufferViewCore.exportTypedArrayMethod; + + // `%TypedArray%.prototype.subarray` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray + exportTypedArrayMethod$2('subarray', function subarray(begin, end) { + var O = aTypedArray$1(this); + var length = O.length; + var beginIndex = toAbsoluteIndex(begin, length); + var C = typedArraySpeciesConstructor(O); + return new C( + O.buffer, + O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT, + toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex) + ); + }); + + var Int8Array$1 = global_1.Int8Array; + var aTypedArray = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$1 = arrayBufferViewCore.exportTypedArrayMethod; + var $toLocaleString = [].toLocaleString; + + // iOS Safari 6.x fails here + var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails(function () { + $toLocaleString.call(new Int8Array$1(1)); + }); + + var FORCED$3 = fails(function () { + return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString(); + }) || !fails(function () { + Int8Array$1.prototype.toLocaleString.call([1, 2]); + }); + + // `%TypedArray%.prototype.toLocaleString` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring + exportTypedArrayMethod$1('toLocaleString', function toLocaleString() { + return functionApply( + $toLocaleString, + TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this), + arraySlice(arguments) + ); + }, FORCED$3); + + var exportTypedArrayMethod = arrayBufferViewCore.exportTypedArrayMethod; + + + + + var Uint8Array$1 = global_1.Uint8Array; + var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {}; + var arrayToString = [].toString; + var join$1 = functionUncurryThis([].join); + + if (fails(function () { arrayToString.call({}); })) { + arrayToString = function toString() { + return join$1(this); + }; + } + + var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString; + + // `%TypedArray%.prototype.toString` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring + exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD); + + var ARRAY_BUFFER = 'ArrayBuffer'; + var ArrayBuffer$1 = arrayBuffer[ARRAY_BUFFER]; + var NativeArrayBuffer = global_1[ARRAY_BUFFER]; + + // `ArrayBuffer` constructor + // https://tc39.es/ecma262/#sec-arraybuffer-constructor + _export({ global: true, forced: NativeArrayBuffer !== ArrayBuffer$1 }, { + ArrayBuffer: ArrayBuffer$1 + }); + + setSpecies(ARRAY_BUFFER); + + var f$1 = wellKnownSymbol; + + var wellKnownSymbolWrapped = { + f: f$1 + }; + + var path$1 = global_1; + + var defineProperty$3 = objectDefineProperty.f; + + var defineWellKnownSymbol = function (NAME) { + var Symbol = path$1.Symbol || (path$1.Symbol = {}); + if (!hasOwnProperty_1(Symbol, NAME)) defineProperty$3(Symbol, NAME, { + value: wellKnownSymbolWrapped.f(NAME) + }); + }; + + var $forEach = arrayIteration.forEach; + + var HIDDEN = sharedKey('hidden'); + var SYMBOL = 'Symbol'; + var PROTOTYPE = 'prototype'; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + + var setInternalState$3 = internalState.set; + var getInternalState$2 = internalState.getterFor(SYMBOL); + + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global_1.Symbol; + var SymbolPrototype$1 = $Symbol && $Symbol[PROTOTYPE]; + var TypeError$5 = global_1.TypeError; + var QObject = global_1.QObject; + var $stringify = getBuiltIn('JSON', 'stringify'); + var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + var nativeDefineProperty = objectDefineProperty.f; + var nativeGetOwnPropertyNames = objectGetOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = objectPropertyIsEnumerable.f; + var push$2 = functionUncurryThis([].push); + + var AllSymbols = shared('symbols'); + var ObjectPrototypeSymbols = shared('op-symbols'); + var StringToSymbolRegistry = shared('string-to-symbol-registry'); + var SymbolToStringRegistry = shared('symbol-to-string-registry'); + var WellKnownSymbolsStore = shared('wks'); + + // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDescriptor = descriptors && fails(function () { + return objectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a != 7; + }) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + } : nativeDefineProperty; + + var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = objectCreate(SymbolPrototype$1); + setInternalState$3(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!descriptors) symbol.description = description; + return symbol; + }; + + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwnProperty_1(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwnProperty_1(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (hasOwnProperty_1(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = objectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); + }; + + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!descriptors || functionCall($propertyIsEnumerable$1, properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; + }; + + var $create = function create(O, Properties) { + return Properties === undefined ? objectCreate(O) : $defineProperties(objectCreate(O), Properties); + }; + + var $propertyIsEnumerable$1 = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = functionCall(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwnProperty_1(AllSymbols, P) && !hasOwnProperty_1(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwnProperty_1(this, P) || !hasOwnProperty_1(AllSymbols, P) || hasOwnProperty_1(this, HIDDEN) && this[HIDDEN][P] + ? enumerable : true; + }; + + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwnProperty_1(AllSymbols, key) && !hasOwnProperty_1(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwnProperty_1(AllSymbols, key) && !(hasOwnProperty_1(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!hasOwnProperty_1(AllSymbols, key) && !hasOwnProperty_1(hiddenKeys$1, key)) push$2(result, key); + }); + return result; + }; + + var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (hasOwnProperty_1(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwnProperty_1(ObjectPrototype, key))) { + push$2(result, AllSymbols[key]); + } + }); + return result; + }; + + // `Symbol` constructor + // https://tc39.es/ecma262/#sec-symbol-constructor + if (!nativeSymbol) { + $Symbol = function Symbol() { + if (objectIsPrototypeOf(SymbolPrototype$1, this)) throw TypeError$5('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : toString_1(arguments[0]); + var tag = uid(description); + var setter = function (value) { + if (this === ObjectPrototype) functionCall(setter, ObjectPrototypeSymbols, value); + if (hasOwnProperty_1(this, HIDDEN) && hasOwnProperty_1(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); + }; + if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + SymbolPrototype$1 = $Symbol[PROTOTYPE]; + + redefine(SymbolPrototype$1, 'toString', function toString() { + return getInternalState$2(this).tag; + }); + + redefine($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + objectPropertyIsEnumerable.f = $propertyIsEnumerable$1; + objectDefineProperty.f = $defineProperty; + objectDefineProperties.f = $defineProperties; + objectGetOwnPropertyDescriptor.f = $getOwnPropertyDescriptor; + objectGetOwnPropertyNames.f = objectGetOwnPropertyNamesExternal.f = $getOwnPropertyNames; + objectGetOwnPropertySymbols.f = $getOwnPropertySymbols; + + wellKnownSymbolWrapped.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (descriptors) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty(SymbolPrototype$1, 'description', { + configurable: true, + get: function description() { + return getInternalState$2(this).description; + } + }); + { + redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable$1, { unsafe: true }); + } + } + } + + _export({ global: true, wrap: true, forced: !nativeSymbol, sham: !nativeSymbol }, { + Symbol: $Symbol + }); + + $forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); + }); + + _export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, { + // `Symbol.for` method + // https://tc39.es/ecma262/#sec-symbol.for + 'for': function (key) { + var string = toString_1(key); + if (hasOwnProperty_1(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.es/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol$1(sym)) throw TypeError$5(sym + ' is not a symbol'); + if (hasOwnProperty_1(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } + }); + + _export({ target: 'Object', stat: true, forced: !nativeSymbol, sham: !descriptors }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + + _export({ target: 'Object', stat: true, forced: !nativeSymbol }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.es/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives + // https://bugs.chromium.org/p/v8/issues/detail?id=3443 + _export({ target: 'Object', stat: true, forced: fails(function () { objectGetOwnPropertySymbols.f(1); }) }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return objectGetOwnPropertySymbols.f(toObject(it)); + } + }); + + // `JSON.stringify` method behavior with symbols + // https://tc39.es/ecma262/#sec-json.stringify + if ($stringify) { + var FORCED_JSON_STRINGIFY = !nativeSymbol || fails(function () { + var symbol = $Symbol(); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) != '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) != '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) != '{}'; + }); + + _export({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var $replacer = replacer; + if (!isObject$1(replacer) && it === undefined || isSymbol$1(it)) return; // IE8 returns string on undefined + if (!isArray$3(replacer)) replacer = function (key, value) { + if (isCallable($replacer)) value = functionCall($replacer, this, key, value); + if (!isSymbol$1(value)) return value; + }; + args[1] = replacer; + return functionApply($stringify, null, args); + } + }); + } + + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + if (!SymbolPrototype$1[TO_PRIMITIVE]) { + var valueOf = SymbolPrototype$1.valueOf; + // eslint-disable-next-line no-unused-vars -- required for .length + redefine(SymbolPrototype$1, TO_PRIMITIVE, function (hint) { + // TODO: improve hint logic + return functionCall(valueOf, this); + }); + } + // `Symbol.prototype[@@toStringTag]` property + // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag + setToStringTag($Symbol, SYMBOL); + + hiddenKeys$1[HIDDEN] = true; + + var defineProperty$2 = objectDefineProperty.f; + + + var NativeSymbol = global_1.Symbol; + var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + + if (descriptors && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) || + // Safari 12 bug + NativeSymbol().description !== undefined + )) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString_1(arguments[0]); + var result = objectIsPrototypeOf(SymbolPrototype, this) + ? new NativeSymbol(description) + // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + + var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)'; + var symbolToString = functionUncurryThis(SymbolPrototype.toString); + var symbolValueOf = functionUncurryThis(SymbolPrototype.valueOf); + var regexp = /^Symbol\((.*)\)[^)]+$/; + var replace = functionUncurryThis(''.replace); + var stringSlice$1 = functionUncurryThis(''.slice); + + defineProperty$2(SymbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = symbolValueOf(this); + var string = symbolToString(symbol); + if (hasOwnProperty_1(EmptyStringDescriptionStore, symbol)) return ''; + var desc = NATIVE_SYMBOL ? stringSlice$1(string, 7, -1) : replace(string, regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + + _export({ global: true, forced: true }, { + Symbol: SymbolWrapper + }); + } + + // `Symbol.species` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.species + defineWellKnownSymbol('species'); + + // `Array[@@species]` getter + // https://tc39.es/ecma262/#sec-get-array-@@species + setSpecies('Array'); + + // `Array.prototype.fill` method + // https://tc39.es/ecma262/#sec-array.prototype.fill + _export({ target: 'Array', proto: true }, { + fill: arrayFill + }); + + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('fill'); + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); + + var SPECIES$1 = wellKnownSymbol('species'); + var Array$2 = global_1.Array; + var max = Math.max; + + // `Array.prototype.slice` method + // https://tc39.es/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray$3(O)) { + Constructor = O.constructor; + // cross-realm fallback + if (isConstructor(Constructor) && (Constructor === Array$2 || isArray$3(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject$1(Constructor)) { + Constructor = Constructor[SPECIES$1]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === Array$2 || Constructor === undefined) { + return arraySlice(O, k, fin); + } + } + result = new (Constructor === undefined ? Array$2 : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + + var $includes = arrayIncludes.includes; + + + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + _export({ target: 'Array', proto: true }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('includes'); + + var TypeError$4 = global_1.TypeError; + + var notARegexp = function (it) { + if (isRegexp(it)) { + throw TypeError$4("The method doesn't accept regular expressions"); + } return it; + }; + + var MATCH = wellKnownSymbol('match'); + + var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { /* empty */ } + } return false; + }; + + var stringIndexOf = functionUncurryThis(''.indexOf); + + // `String.prototype.includes` method + // https://tc39.es/ecma262/#sec-string.prototype.includes + _export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~stringIndexOf( + toString_1(requireObjectCoercible(this)), + toString_1(notARegexp(searchString)), + arguments.length > 1 ? arguments[1] : undefined + ); + } + }); + + // `URL.prototype.toJSON` method + // https://url.spec.whatwg.org/#dom-url-tojson + _export({ target: 'URL', proto: true, enumerable: true }, { + toJSON: function toJSON() { + return functionCall(URL.prototype.toString, this); + } + }); + + var PROPER_FUNCTION_NAME = functionName.PROPER; + + + + var non = '\u200B\u0085\u180E'; + + // check that a method works with the correct list + // of whitespaces and has a correct name + var stringTrimForced = function (METHOD_NAME) { + return fails(function () { + return !!whitespaces[METHOD_NAME]() + || non[METHOD_NAME]() !== non + || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME); + }); + }; + + var $trim = stringTrim.trim; + + + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + _export({ target: 'String', proto: true, forced: stringTrimForced('trim') }, { + trim: function trim() { + return $trim(this); + } + }); + + var lookup$1 = []; + var revLookup$1 = []; + var Arr$1 = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + var inited$1 = false; + + function init$1() { + inited$1 = true; + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + for (var i = 0, len = code.length; i < len; ++i) { + lookup$1[i] = code[i]; + revLookup$1[code.charCodeAt(i)] = i; + } + + revLookup$1['-'.charCodeAt(0)] = 62; + revLookup$1['_'.charCodeAt(0)] = 63; + } + + function toByteArray$1(b64) { + if (!inited$1) { + init$1(); + } + + var i, j, l, tmp, placeHolders, arr; + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4'); + } // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + + + placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0; // base64 is 4/3 + up to two characters of the original data + + arr = new Arr$1(len * 3 / 4 - placeHolders); // if there are placeholders, only get up to the last complete 4 chars + + l = placeHolders > 0 ? len - 4 : len; + var L = 0; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = revLookup$1[b64.charCodeAt(i)] << 18 | revLookup$1[b64.charCodeAt(i + 1)] << 12 | revLookup$1[b64.charCodeAt(i + 2)] << 6 | revLookup$1[b64.charCodeAt(i + 3)]; + arr[L++] = tmp >> 16 & 0xFF; + arr[L++] = tmp >> 8 & 0xFF; + arr[L++] = tmp & 0xFF; + } + + if (placeHolders === 2) { + tmp = revLookup$1[b64.charCodeAt(i)] << 2 | revLookup$1[b64.charCodeAt(i + 1)] >> 4; + arr[L++] = tmp & 0xFF; + } else if (placeHolders === 1) { + tmp = revLookup$1[b64.charCodeAt(i)] << 10 | revLookup$1[b64.charCodeAt(i + 1)] << 4 | revLookup$1[b64.charCodeAt(i + 2)] >> 2; + arr[L++] = tmp >> 8 & 0xFF; + arr[L++] = tmp & 0xFF; + } + + return arr; + } + + function tripletToBase64$1(num) { + return lookup$1[num >> 18 & 0x3F] + lookup$1[num >> 12 & 0x3F] + lookup$1[num >> 6 & 0x3F] + lookup$1[num & 0x3F]; + } + + function encodeChunk$1(uint8, start, end) { + var tmp; + var output = []; + + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2]; + output.push(tripletToBase64$1(tmp)); + } + + return output.join(''); + } + + function fromByteArray$1(uint8) { + if (!inited$1) { + init$1(); + } + + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + + var output = ''; + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + // go through the array every three bytes, we'll deal with trailing stuff later + + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk$1(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); + } // pad the end with zeros, but make sure to not forget the extra bytes + + + if (extraBytes === 1) { + tmp = uint8[len - 1]; + output += lookup$1[tmp >> 2]; + output += lookup$1[tmp << 4 & 0x3F]; + output += '=='; + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + output += lookup$1[tmp >> 10]; + output += lookup$1[tmp >> 4 & 0x3F]; + output += lookup$1[tmp << 2 & 0x3F]; + output += '='; + } + + parts.push(output); + return parts.join(''); + } + + function read$1(buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); + } + function write$1(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = e << mLen | m; + eLen += mLen; + + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; + } + + var toString$2 = {}.toString; + var isArray$2 = Array.isArray || function (arr) { + return toString$2.call(arr) == '[object Array]'; + }; + + var INSPECT_MAX_BYTES$1 = 50; + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + + Buffer$1.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined ? global$1.TYPED_ARRAY_SUPPORT : true; + + function kMaxLength$1() { + return Buffer$1.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff; + } + + function createBuffer$1(that, length) { + if (kMaxLength$1() < length) { + throw new RangeError('Invalid typed array length'); + } + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length); + that.__proto__ = Buffer$1.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer$1(length); + } + + that.length = length; + } + + return that; + } + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + + function Buffer$1(arg, encodingOrOffset, length) { + if (!Buffer$1.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer$1)) { + return new Buffer$1(arg, encodingOrOffset, length); + } // Common case. + + + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error('If encoding is specified then the first argument must be a string'); + } + + return allocUnsafe$1(this, arg); + } + + return from$1(this, arg, encodingOrOffset, length); + } + Buffer$1.poolSize = 8192; // not used by this implementation + // TODO: Legacy, not needed anymore. Remove in next major version. + + Buffer$1._augment = function (arr) { + arr.__proto__ = Buffer$1.prototype; + return arr; + }; + + function from$1(that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number'); + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer$1(that, value, encodingOrOffset, length); + } + + if (typeof value === 'string') { + return fromString$1(that, value, encodingOrOffset); + } + + return fromObject$1(that, value); + } + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + + + Buffer$1.from = function (value, encodingOrOffset, length) { + return from$1(null, value, encodingOrOffset, length); + }; + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + Buffer$1.prototype.__proto__ = Uint8Array.prototype; + Buffer$1.__proto__ = Uint8Array; + } + + function assertSize$1(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number'); + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative'); + } + } + + function alloc$1(that, size, fill, encoding) { + assertSize$1(size); + + if (size <= 0) { + return createBuffer$1(that, size); + } + + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' ? createBuffer$1(that, size).fill(fill, encoding) : createBuffer$1(that, size).fill(fill); + } + + return createBuffer$1(that, size); + } + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + + + Buffer$1.alloc = function (size, fill, encoding) { + return alloc$1(null, size, fill, encoding); + }; + + function allocUnsafe$1(that, size) { + assertSize$1(size); + that = createBuffer$1(that, size < 0 ? 0 : checked$1(size) | 0); + + if (!Buffer$1.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0; + } + } + + return that; + } + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + + + Buffer$1.allocUnsafe = function (size) { + return allocUnsafe$1(null, size); + }; + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + + + Buffer$1.allocUnsafeSlow = function (size) { + return allocUnsafe$1(null, size); + }; + + function fromString$1(that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + + if (!Buffer$1.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding'); + } + + var length = byteLength$1(string, encoding) | 0; + that = createBuffer$1(that, length); + var actual = that.write(string, encoding); + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual); + } + + return that; + } + + function fromArrayLike$1(that, array) { + var length = array.length < 0 ? 0 : checked$1(array.length) | 0; + that = createBuffer$1(that, length); + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255; + } + + return that; + } + + function fromArrayBuffer$1(that, array, byteOffset, length) { + array.byteLength; // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds'); + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds'); + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array); + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset); + } else { + array = new Uint8Array(array, byteOffset, length); + } + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array; + that.__proto__ = Buffer$1.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike$1(that, array); + } + + return that; + } + + function fromObject$1(that, obj) { + if (internalIsBuffer$1(obj)) { + var len = checked$1(obj.length) | 0; + that = createBuffer$1(that, len); + + if (that.length === 0) { + return that; + } + + obj.copy(that, 0, 0, len); + return that; + } + + if (obj) { + if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan$1(obj.length)) { + return createBuffer$1(that, 0); + } + + return fromArrayLike$1(that, obj); + } + + if (obj.type === 'Buffer' && isArray$2(obj.data)) { + return fromArrayLike$1(that, obj.data); + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.'); + } + + function checked$1(length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength$1()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength$1().toString(16) + ' bytes'); + } + + return length | 0; + } + Buffer$1.isBuffer = isBuffer$2; + + function internalIsBuffer$1(b) { + return !!(b != null && b._isBuffer); + } + + Buffer$1.compare = function compare(a, b) { + if (!internalIsBuffer$1(a) || !internalIsBuffer$1(b)) { + throw new TypeError('Arguments must be Buffers'); + } + + if (a === b) return 0; + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; + + Buffer$1.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true; + + default: + return false; + } + }; + + Buffer$1.concat = function concat(list, length) { + if (!isArray$2(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + if (list.length === 0) { + return Buffer$1.alloc(0); + } + + var i; + + if (length === undefined) { + length = 0; + + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + + var buffer = Buffer$1.allocUnsafe(length); + var pos = 0; + + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + + if (!internalIsBuffer$1(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + buf.copy(buffer, pos); + pos += buf.length; + } + + return buffer; + }; + + function byteLength$1(string, encoding) { + if (internalIsBuffer$1(string)) { + return string.length; + } + + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength; + } + + if (typeof string !== 'string') { + string = '' + string; + } + + var len = string.length; + if (len === 0) return 0; // Use a for loop to avoid recursion + + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len; + + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes$1(string).length; + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2; + + case 'hex': + return len >>> 1; + + case 'base64': + return base64ToBytes$1(string).length; + + default: + if (loweredCase) return utf8ToBytes$1(string).length; // assume utf8 + + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + } + + Buffer$1.byteLength = byteLength$1; + + function slowToString$1(encoding, start, end) { + var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + + if (start === undefined || start < 0) { + start = 0; + } // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + + + if (start > this.length) { + return ''; + } + + if (end === undefined || end > this.length) { + end = this.length; + } + + if (end <= 0) { + return ''; + } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + + + end >>>= 0; + start >>>= 0; + + if (end <= start) { + return ''; + } + + if (!encoding) encoding = 'utf8'; + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice$1(this, start, end); + + case 'utf8': + case 'utf-8': + return utf8Slice$1(this, start, end); + + case 'ascii': + return asciiSlice$1(this, start, end); + + case 'latin1': + case 'binary': + return latin1Slice$1(this, start, end); + + case 'base64': + return base64Slice$1(this, start, end); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice$1(this, start, end); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } + } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect + // Buffer instances. + + + Buffer$1.prototype._isBuffer = true; + + function swap$1(b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; + } + + Buffer$1.prototype.swap16 = function swap16() { + var len = this.length; + + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits'); + } + + for (var i = 0; i < len; i += 2) { + swap$1(this, i, i + 1); + } + + return this; + }; + + Buffer$1.prototype.swap32 = function swap32() { + var len = this.length; + + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits'); + } + + for (var i = 0; i < len; i += 4) { + swap$1(this, i, i + 3); + swap$1(this, i + 1, i + 2); + } + + return this; + }; + + Buffer$1.prototype.swap64 = function swap64() { + var len = this.length; + + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits'); + } + + for (var i = 0; i < len; i += 8) { + swap$1(this, i, i + 7); + swap$1(this, i + 1, i + 6); + swap$1(this, i + 2, i + 5); + swap$1(this, i + 3, i + 4); + } + + return this; + }; + + Buffer$1.prototype.toString = function toString() { + var length = this.length | 0; + if (length === 0) return ''; + if (arguments.length === 0) return utf8Slice$1(this, 0, length); + return slowToString$1.apply(this, arguments); + }; + + Buffer$1.prototype.equals = function equals(b) { + if (!internalIsBuffer$1(b)) throw new TypeError('Argument must be a Buffer'); + if (this === b) return true; + return Buffer$1.compare(this, b) === 0; + }; + + Buffer$1.prototype.inspect = function inspect() { + var str = ''; + var max = INSPECT_MAX_BYTES$1; + + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); + if (this.length > max) str += ' ... '; + } + + return ''; + }; + + Buffer$1.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (!internalIsBuffer$1(target)) { + throw new TypeError('Argument must be a Buffer'); + } + + if (start === undefined) { + start = 0; + } + + if (end === undefined) { + end = target ? target.length : 0; + } + + if (thisStart === undefined) { + thisStart = 0; + } + + if (thisEnd === undefined) { + thisEnd = this.length; + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index'); + } + + if (thisStart >= thisEnd && start >= end) { + return 0; + } + + if (thisStart >= thisEnd) { + return -1; + } + + if (start >= end) { + return 1; + } + + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + + + function bidirectionalIndexOf$1(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1; // Normalize byteOffset + + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + + byteOffset = +byteOffset; // Coerce to Number. + + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : buffer.length - 1; + } // Normalize byteOffset: negative offsets start from the end of the buffer + + + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + + if (byteOffset >= buffer.length) { + if (dir) return -1;else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0;else return -1; + } // Normalize val + + + if (typeof val === 'string') { + val = Buffer$1.from(val, encoding); + } // Finally, search either indexOf (if dir is true) or lastIndexOf + + + if (internalIsBuffer$1(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1; + } + + return arrayIndexOf$1(buffer, val, byteOffset, encoding, dir); + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + + if (Buffer$1.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); + } + } + + return arrayIndexOf$1(buffer, [val], byteOffset, encoding, dir); + } + + throw new TypeError('val must be string, number or Buffer'); + } + + function arrayIndexOf$1(arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + + if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1; + } + + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + + function read(buf, i) { + if (indexSize === 1) { + return buf[i]; + } else { + return buf.readUInt16BE(i * indexSize); + } + } + + var i; + + if (dir) { + var foundIndex = -1; + + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + + for (i = byteOffset; i >= 0; i--) { + var found = true; + + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + + if (found) return i; + } + } + + return -1; + } + + Buffer$1.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; + }; + + Buffer$1.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf$1(this, val, byteOffset, encoding, true); + }; + + Buffer$1.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf$1(this, val, byteOffset, encoding, false); + }; + + function hexWrite$1(buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + + if (!length) { + length = remaining; + } else { + length = Number(length); + + if (length > remaining) { + length = remaining; + } + } // must be an even number of digits + + + var strLen = string.length; + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string'); + + if (length > strLen / 2) { + length = strLen / 2; + } + + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(parsed)) return i; + buf[offset + i] = parsed; + } + + return i; + } + + function utf8Write$1(buf, string, offset, length) { + return blitBuffer$1(utf8ToBytes$1(string, buf.length - offset), buf, offset, length); + } + + function asciiWrite$1(buf, string, offset, length) { + return blitBuffer$1(asciiToBytes$1(string), buf, offset, length); + } + + function latin1Write$1(buf, string, offset, length) { + return asciiWrite$1(buf, string, offset, length); + } + + function base64Write$1(buf, string, offset, length) { + return blitBuffer$1(base64ToBytes$1(string), buf, offset, length); + } + + function ucs2Write$1(buf, string, offset, length) { + return blitBuffer$1(utf16leToBytes$1(string, buf.length - offset), buf, offset, length); + } + + Buffer$1.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0; + + if (isFinite(length)) { + length = length | 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } // legacy write(string, encoding, offset, length) - remove in v0.13 + + } else { + throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); + } + + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds'); + } + + if (!encoding) encoding = 'utf8'; + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite$1(this, string, offset, length); + + case 'utf8': + case 'utf-8': + return utf8Write$1(this, string, offset, length); + + case 'ascii': + return asciiWrite$1(this, string, offset, length); + + case 'latin1': + case 'binary': + return latin1Write$1(this, string, offset, length); + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write$1(this, string, offset, length); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write$1(this, string, offset, length); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + }; + + Buffer$1.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + }; + }; + + function base64Slice$1(buf, start, end) { + if (start === 0 && end === buf.length) { + return fromByteArray$1(buf); + } else { + return fromByteArray$1(buf.slice(start, end)); + } + } + + function utf8Slice$1(buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + var i = start; + + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + + break; + + case 2: + secondByte = buf[i + 1]; + + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; + + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + + break; + + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; + + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + + break; + + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; + + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + res.push(codePoint); + i += bytesPerSequence; + } + + return decodeCodePointsArray$1(res); + } // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + + + var MAX_ARGUMENTS_LENGTH$1 = 0x1000; + + function decodeCodePointsArray$1(codePoints) { + var len = codePoints.length; + + if (len <= MAX_ARGUMENTS_LENGTH$1) { + return String.fromCharCode.apply(String, codePoints); // avoid extra slice() + } // Decode in chunks to avoid "call stack size exceeded". + + + var res = ''; + var i = 0; + + while (i < len) { + res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH$1)); + } + + return res; + } + + function asciiSlice$1(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + + return ret; + } + + function latin1Slice$1(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + + return ret; + } + + function hexSlice$1(buf, start, end) { + var len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + var out = ''; + + for (var i = start; i < end; ++i) { + out += toHex$1(buf[i]); + } + + return out; + } + + function utf16leSlice$1(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + + return res; + } + + Buffer$1.prototype.slice = function slice(start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + + if (end < start) end = start; + var newBuf; + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end); + newBuf.__proto__ = Buffer$1.prototype; + } else { + var sliceLen = end - start; + newBuf = new Buffer$1(sliceLen, undefined); + + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start]; + } + } + + return newBuf; + }; + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + + + function checkOffset$1(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); + } + + Buffer$1.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + return val; + }; + + Buffer$1.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + checkOffset$1(offset, byteLength, this.length); + } + + var val = this[offset + --byteLength]; + var mul = 1; + + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + + return val; + }; + + Buffer$1.prototype.readUInt8 = function readUInt8(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 1, this.length); + return this[offset]; + }; + + Buffer$1.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; + }; + + Buffer$1.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; + }; + + Buffer$1.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; + }; + + Buffer$1.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); + }; + + Buffer$1.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; + }; + + Buffer$1.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset$1(offset, byteLength, this.length); + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; + }; + + Buffer$1.prototype.readInt8 = function readInt8(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 1, this.length); + if (!(this[offset] & 0x80)) return this[offset]; + return (0xff - this[offset] + 1) * -1; + }; + + Buffer$1.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + var val = this[offset] | this[offset + 1] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; + }; + + Buffer$1.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 2, this.length); + var val = this[offset + 1] | this[offset] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; + }; + + Buffer$1.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; + }; + + Buffer$1.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; + }; + + Buffer$1.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return read$1(this, offset, true, 23, 4); + }; + + Buffer$1.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 4, this.length); + return read$1(this, offset, false, 23, 4); + }; + + Buffer$1.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 8, this.length); + return read$1(this, offset, true, 52, 8); + }; + + Buffer$1.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + if (!noAssert) checkOffset$1(offset, 8, this.length); + return read$1(this, offset, false, 52, 8); + }; + + function checkInt$1(buf, value, offset, ext, max, min) { + if (!internalIsBuffer$1(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + } + + Buffer$1.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt$1(this, value, offset, byteLength, maxBytes, 0); + } + + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; + }; + + Buffer$1.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt$1(this, value, offset, byteLength, maxBytes, 0); + } + + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; + }; + + Buffer$1.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 1, 0xff, 0); + if (!Buffer$1.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + this[offset] = value & 0xff; + return offset + 1; + }; + + function objectWriteUInt16$1(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8; + } + } + + Buffer$1.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0xffff, 0); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16$1(this, value, offset, true); + } + + return offset + 2; + }; + + Buffer$1.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0xffff, 0); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16$1(this, value, offset, false); + } + + return offset + 2; + }; + + function objectWriteUInt32$1(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff; + } + } + + Buffer$1.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 0xff; + } else { + objectWriteUInt32$1(this, value, offset, true); + } + + return offset + 4; + }; + + Buffer$1.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32$1(this, value, offset, false); + } + + return offset + 4; + }; + + Buffer$1.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt$1(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; + }; + + Buffer$1.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt$1(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; + }; + + Buffer$1.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 1, 0x7f, -0x80); + if (!Buffer$1.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + if (value < 0) value = 0xff + value + 1; + this[offset] = value & 0xff; + return offset + 1; + }; + + Buffer$1.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16$1(this, value, offset, true); + } + + return offset + 2; + }; + + Buffer$1.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16$1(this, value, offset, false); + } + + return offset + 2; + }; + + Buffer$1.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0x7fffffff, -0x80000000); + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + } else { + objectWriteUInt32$1(this, value, offset, true); + } + + return offset + 4; + }; + + Buffer$1.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt$1(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + + if (Buffer$1.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32$1(this, value, offset, false); + } + + return offset + 4; + }; + + function checkIEEE754$1(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + if (offset < 0) throw new RangeError('Index out of range'); + } + + function writeFloat$1(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754$1(buf, value, offset, 4); + } + + write$1(buf, value, offset, littleEndian, 23, 4); + return offset + 4; + } + + Buffer$1.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat$1(this, value, offset, true, noAssert); + }; + + Buffer$1.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat$1(this, value, offset, false, noAssert); + }; + + function writeDouble$1(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754$1(buf, value, offset, 8); + } + + write$1(buf, value, offset, littleEndian, 52, 8); + return offset + 8; + } + + Buffer$1.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble$1(this, value, offset, true, noAssert); + }; + + Buffer$1.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble$1(this, value, offset, false, noAssert); + }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + + + Buffer$1.prototype.copy = function copy(target, targetStart, start, end) { + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done + + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions + + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds'); + } + + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds'); + if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob? + + if (end > this.length) end = this.length; + + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + + var len = end - start; + var i; + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else if (len < 1000 || !Buffer$1.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart); + } + + return len; + }; // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + + + Buffer$1.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + + if (val.length === 1) { + var code = val.charCodeAt(0); + + if (code < 256) { + val = code; + } + } + + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string'); + } + + if (typeof encoding === 'string' && !Buffer$1.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + } else if (typeof val === 'number') { + val = val & 255; + } // Invalid ranges are not set to a default, so can range check early. + + + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index'); + } + + if (end <= start) { + return this; + } + + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + if (!val) val = 0; + var i; + + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = internalIsBuffer$1(val) ? val : utf8ToBytes$1(new Buffer$1(val, encoding).toString()); + var len = bytes.length; + + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + + return this; + }; // HELPER FUNCTIONS + // ================ + + + var INVALID_BASE64_RE$1 = /[^+\/0-9A-Za-z-_]/g; + + function base64clean$1(str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim$1(str).replace(INVALID_BASE64_RE$1, ''); // Node converts strings with length < 2 to '' + + if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + + while (str.length % 4 !== 0) { + str = str + '='; + } + + return str; + } + + function stringtrim$1(str) { + if (str.trim) return str.trim(); + return str.replace(/^\s+|\s+$/g, ''); + } + + function toHex$1(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); + } + + function utf8ToBytes$1(string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); // is surrogate component + + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } // valid lead + + + leadSurrogate = codePoint; + continue; + } // 2 leads in a row + + + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue; + } // valid surrogate pair + + + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + + leadSurrogate = null; // encode utf8 + + if (codePoint < 0x80) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break; + bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break; + bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break; + bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else { + throw new Error('Invalid code point'); + } + } + + return bytes; + } + + function asciiToBytes$1(str) { + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + + return byteArray; + } + + function utf16leToBytes$1(str, units) { + var c, hi, lo; + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + + return byteArray; + } + + function base64ToBytes$1(str) { + return toByteArray$1(base64clean$1(str)); + } + + function blitBuffer$1(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + + return i; + } + + function isnan$1(val) { + return val !== val; // eslint-disable-line no-self-compare + } // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence + // The _isBuffer check is for Safari 5-7 support, because it's missing + // Object.prototype.constructor. Remove this eventually + + + function isBuffer$2(obj) { + return obj != null && (!!obj._isBuffer || isFastBuffer$1(obj) || isSlowBuffer$1(obj)); + } + + function isFastBuffer$1(obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj); + } // For Node v0.10 support. Remove this eventually. + + + function isSlowBuffer$1(obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer$1(obj.slice(0, 0)); + } + + // based off https://github.com/defunctzombie/node-process/blob/master/browser.js + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + + function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); + } + + var cachedSetTimeout = defaultSetTimout; + var cachedClearTimeout = defaultClearTimeout; + + if (typeof global$1.setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } + + if (typeof global$1.clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } + + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + } + + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + } + + var queue$2 = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue$2 = currentQueue.concat(queue$2); + } else { + queueIndex = -1; + } + + if (queue$2.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue$2.length; + + while (len) { + currentQueue = queue$2; + queue$2 = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue$2.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + function nextTick(fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue$2.push(new Item(fun, args)); + + if (queue$2.length === 1 && !draining) { + runTimeout(drainQueue); + } + } // v8 likes predictible objects + + + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + + var title = 'browser'; + var platform = 'browser'; + var browser$3 = true; + var env = {}; + var argv = []; + var version$1 = ''; // empty string to avoid regexp issues + + var versions = {}; + var release = {}; + var config = {}; + + function noop() {} + + var on = noop; + var addListener = noop; + var once = noop; + var off = noop; + var removeListener = noop; + var removeAllListeners = noop; + var emit = noop; + + function binding(name) { + throw new Error('process.binding is not supported'); + } + + function cwd() { + return '/'; + } + + function chdir(dir) { + throw new Error('process.chdir is not supported'); + } + + function umask() { + return 0; + } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js + + + var performance = global$1.performance || {}; + + var performanceNow = performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function () { + return new Date().getTime(); + }; // generate timestamp or delta + // see http://nodejs.org/api/process.html#process_process_hrtime + + + function hrtime(previousTimestamp) { + var clocktime = performanceNow.call(performance) * 1e-3; + var seconds = Math.floor(clocktime); + var nanoseconds = Math.floor(clocktime % 1 * 1e9); + + if (previousTimestamp) { + seconds = seconds - previousTimestamp[0]; + nanoseconds = nanoseconds - previousTimestamp[1]; + + if (nanoseconds < 0) { + seconds--; + nanoseconds += 1e9; + } + } + + return [seconds, nanoseconds]; + } + + var startTime = new Date(); + + function uptime() { + var currentTime = new Date(); + var dif = currentTime - startTime; + return dif / 1000; + } + + var browser$1$1 = { + nextTick: nextTick, + title: title, + browser: browser$3, + env: env, + argv: argv, + version: version$1, + versions: versions, + on: on, + addListener: addListener, + once: once, + off: off, + removeListener: removeListener, + removeAllListeners: removeAllListeners, + emit: emit, + binding: binding, + cwd: cwd, + chdir: chdir, + umask: umask, + hrtime: hrtime, + platform: platform, + release: release, + config: config, + uptime: uptime + }; + var process$3 = browser$1$1; + + var inherits$2; + + if (typeof Object.create === 'function') { + inherits$2 = function inherits(ctor, superCtor) { + // implementation from standard node.js 'util' module + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; + } else { + inherits$2 = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + + var TempCtor = function TempCtor() {}; + + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; + } + + var inherits$3 = inherits$2; + + var formatRegExp = /%[sdj%]/g; + function format$1(f) { + if (!isString$1(f)) { + var objects = []; + + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function (x) { + if (x === '%%') return '%'; + if (i >= len) return x; + + switch (x) { + case '%s': + return String(args[i++]); + + case '%d': + return Number(args[i++]); + + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + + default: + return x; + } + }); + + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + + return str; + } + // Returns a modified function which warns once by default. + // If --no-deprecation is set, then it is a no-op. + + function deprecate$1(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global$1.process)) { + return function () { + return deprecate$1(fn, msg).apply(this, arguments); + }; + } + + if (process$3.noDeprecation === true) { + return fn; + } + + var warned = false; + + function deprecated() { + if (!warned) { + if (process$3.throwDeprecation) { + throw new Error(msg); + } else if (process$3.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + + warned = true; + } + + return fn.apply(this, arguments); + } + + return deprecated; + } + var debugs = {}; + var debugEnviron; + function debuglog(set) { + if (isUndefined(debugEnviron)) debugEnviron = process$3.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = 0; + + debugs[set] = function () { + var msg = format$1.apply(null, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function () {}; + } + } + + return debugs[set]; + } + /** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ + + /* legacy: obj, showHidden, depth, colors*/ + + function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; // legacy... + + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + _extend(ctx, opts); + } // set default options + + + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); + } // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + + inspect.colors = { + 'bold': [1, 22], + 'italic': [3, 23], + 'underline': [4, 24], + 'inverse': [7, 27], + 'white': [37, 39], + 'grey': [90, 39], + 'black': [30, 39], + 'blue': [34, 39], + 'cyan': [36, 39], + 'green': [32, 39], + 'magenta': [35, 39], + 'red': [31, 39], + 'yellow': [33, 39] + }; // Don't use 'blue' not visible on cmd.exe + + inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' + }; + + function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return "\x1B[" + inspect.colors[style][0] + 'm' + str + "\x1B[" + inspect.colors[style][1] + 'm'; + } else { + return str; + } + } + + function stylizeNoColor(str, styleType) { + return str; + } + + function arrayToHash(array) { + var hash = {}; + array.forEach(function (val, idx) { + hash[val] = true; + }); + return hash; + } + + function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special + value.inspect !== inspect && // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + + if (!isString$1(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + + return ret; + } // Primitive types cannot have properties + + + var primitive = formatPrimitive(ctx, value); + + if (primitive) { + return primitive; + } // Look up the keys of the object. + + + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + + + if (isError$1(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } // Some type of object without properties can be shortcutted. + + + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + + if (isError$1(value)) { + return formatError(value); + } + } + + var base = '', + array = false, + braces = ['{', '}']; // Make Array say that they are Array + + if (isArray$1(value)) { + array = true; + braces = ['[', ']']; + } // Make functions say that they are functions + + + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } // Make RegExps say that they are RegExps + + + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } // Make dates with properties first say the date + + + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } // Make error with message first say the error + + + if (isError$1(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + var output; + + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function (key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + return reduceToSingleString(output, base, braces); + } + + function formatPrimitive(ctx, value) { + if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); + + if (isString$1(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + + if (isNumber(value)) return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is "object", so special case here. + + if (isNull(value)) return ctx.stylize('null', 'null'); + } + + function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; + } + + function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); + } else { + output.push(''); + } + } + + keys.forEach(function (key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); + } + }); + return output; + } + + function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { + value: value[key] + }; + + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + + name = JSON.stringify('' + key); + + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; + } + + function reduceToSingleString(output, base, braces) { + var length = output.reduce(function (prev, cur) { + if (cur.indexOf('\n') >= 0) ; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; + } // NOTE: These type checking functions intentionally don't use `instanceof` + // because it is fragile and can be easily faked with `Object.create()`. + + + function isArray$1(ar) { + return Array.isArray(ar); + } + function isBoolean(arg) { + return typeof arg === 'boolean'; + } + function isNull(arg) { + return arg === null; + } + function isNullOrUndefined(arg) { + return arg == null; + } + function isNumber(arg) { + return typeof arg === 'number'; + } + function isString$1(arg) { + return typeof arg === 'string'; + } + function isSymbol(arg) { + return _typeof(arg) === 'symbol'; + } + function isUndefined(arg) { + return arg === void 0; + } + function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; + } + function isObject(arg) { + return _typeof(arg) === 'object' && arg !== null; + } + function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; + } + function isError$1(e) { + return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); + } + function isFunction(arg) { + return typeof arg === 'function'; + } + function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; + } + function isBuffer$1(maybeBuf) { + return isBuffer$2(maybeBuf); + } + + function objectToString(o) { + return Object.prototype.toString.call(o); + } + + function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); + } + + var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34 + + function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); + } // log is just a thin wrapper to console.log that prepends a timestamp + + + function log$1() { + console.log('%s - %s', timestamp(), format$1.apply(null, arguments)); + } + function _extend(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + var keys = Object.keys(add); + var i = keys.length; + + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + + return origin; + } + + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + + var util = { + inherits: inherits$3, + _extend: _extend, + log: log$1, + isBuffer: isBuffer$1, + isPrimitive: isPrimitive, + isFunction: isFunction, + isError: isError$1, + isDate: isDate, + isObject: isObject, + isRegExp: isRegExp, + isUndefined: isUndefined, + isSymbol: isSymbol, + isString: isString$1, + isNumber: isNumber, + isNullOrUndefined: isNullOrUndefined, + isNull: isNull, + isBoolean: isBoolean, + isArray: isArray$1, + inspect: inspect, + deprecate: deprecate$1, + format: format$1, + debuglog: debuglog + }; + + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + var inited = false; + + function init() { + inited = true; + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; + } + + revLookup['-'.charCodeAt(0)] = 62; + revLookup['_'.charCodeAt(0)] = 63; + } + + function toByteArray(b64) { + if (!inited) { + init(); + } + + var i, j, l, tmp, placeHolders, arr; + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4'); + } // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + + + placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0; // base64 is 4/3 + up to two characters of the original data + + arr = new Arr(len * 3 / 4 - placeHolders); // if there are placeholders, only get up to the last complete 4 chars + + l = placeHolders > 0 ? len - 4 : len; + var L = 0; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)]; + arr[L++] = tmp >> 16 & 0xFF; + arr[L++] = tmp >> 8 & 0xFF; + arr[L++] = tmp & 0xFF; + } + + if (placeHolders === 2) { + tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4; + arr[L++] = tmp & 0xFF; + } else if (placeHolders === 1) { + tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2; + arr[L++] = tmp >> 8 & 0xFF; + arr[L++] = tmp & 0xFF; + } + + return arr; + } + + function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; + } + + function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2]; + output.push(tripletToBase64(tmp)); + } + + return output.join(''); + } + + function fromByteArray(uint8) { + if (!inited) { + init(); + } + + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + + var output = ''; + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + // go through the array every three bytes, we'll deal with trailing stuff later + + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); + } // pad the end with zeros, but make sure to not forget the extra bytes + + + if (extraBytes === 1) { + tmp = uint8[len - 1]; + output += lookup[tmp >> 2]; + output += lookup[tmp << 4 & 0x3F]; + output += '=='; + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + output += lookup[tmp >> 10]; + output += lookup[tmp >> 4 & 0x3F]; + output += lookup[tmp << 2 & 0x3F]; + output += '='; + } + + parts.push(output); + return parts.join(''); + } + + function read(buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); + } + + function write(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = e << mLen | m; + eLen += mLen; + + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; + } + + var toString$1 = {}.toString; + + var isArray = Array.isArray || function (arr) { + return toString$1.call(arr) == '[object Array]'; + }; + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + + + var INSPECT_MAX_BYTES = 50; + /** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + + Buffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined ? global$1.TYPED_ARRAY_SUPPORT : true; + + function kMaxLength() { + return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff; + } + + function createBuffer(that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length'); + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length); + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length); + } + + that.length = length; + } + + return that; + } + /** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + + function Buffer(arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length); + } // Common case. + + + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error('If encoding is specified then the first argument must be a string'); + } + + return allocUnsafe(this, arg); + } + + return from(this, arg, encodingOrOffset, length); + } + + Buffer.poolSize = 8192; // not used by this implementation + // TODO: Legacy, not needed anymore. Remove in next major version. + + Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype; + return arr; + }; + + function from(that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number'); + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length); + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset); + } + + return fromObject(that, value); + } + /** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + + + Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length); + }; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype; + Buffer.__proto__ = Uint8Array; + } + + function assertSize(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number'); + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative'); + } + } + + function alloc(that, size, fill, encoding) { + assertSize(size); + + if (size <= 0) { + return createBuffer(that, size); + } + + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill); + } + + return createBuffer(that, size); + } + /** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + + + Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding); + }; + + function allocUnsafe(that, size) { + assertSize(size); + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0); + + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0; + } + } + + return that; + } + /** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + + + Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size); + }; + /** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + + + Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size); + }; + + function fromString(that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding'); + } + + var length = byteLength(string, encoding) | 0; + that = createBuffer(that, length); + var actual = that.write(string, encoding); + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual); + } + + return that; + } + + function fromArrayLike(that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + that = createBuffer(that, length); + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255; + } + + return that; + } + + function fromArrayBuffer(that, array, byteOffset, length) { + array.byteLength; // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds'); + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds'); + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array); + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset); + } else { + array = new Uint8Array(array, byteOffset, length); + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array; + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array); + } + + return that; + } + + function fromObject(that, obj) { + if (internalIsBuffer(obj)) { + var len = checked(obj.length) | 0; + that = createBuffer(that, len); + + if (that.length === 0) { + return that; + } + + obj.copy(that, 0, 0, len); + return that; + } + + if (obj) { + if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0); + } + + return fromArrayLike(that, obj); + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data); + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.'); + } + + function checked(length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes'); + } + + return length | 0; + } + + Buffer.isBuffer = isBuffer; + + function internalIsBuffer(b) { + return !!(b != null && b._isBuffer); + } + + Buffer.compare = function compare(a, b) { + if (!internalIsBuffer(a) || !internalIsBuffer(b)) { + throw new TypeError('Arguments must be Buffers'); + } + + if (a === b) return 0; + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; + + Buffer.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true; + + default: + return false; + } + }; + + Buffer.concat = function concat(list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + if (list.length === 0) { + return Buffer.alloc(0); + } + + var i; + + if (length === undefined) { + length = 0; + + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + + var buffer = Buffer.allocUnsafe(length); + var pos = 0; + + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + + if (!internalIsBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + buf.copy(buffer, pos); + pos += buf.length; + } + + return buffer; + }; + + function byteLength(string, encoding) { + if (internalIsBuffer(string)) { + return string.length; + } + + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength; + } + + if (typeof string !== 'string') { + string = '' + string; + } + + var len = string.length; + if (len === 0) return 0; // Use a for loop to avoid recursion + + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len; + + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length; + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2; + + case 'hex': + return len >>> 1; + + case 'base64': + return base64ToBytes(string).length; + + default: + if (loweredCase) return utf8ToBytes(string).length; // assume utf8 + + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + } + + Buffer.byteLength = byteLength; + + function slowToString(encoding, start, end) { + var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + + if (start === undefined || start < 0) { + start = 0; + } // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + + + if (start > this.length) { + return ''; + } + + if (end === undefined || end > this.length) { + end = this.length; + } + + if (end <= 0) { + return ''; + } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + + + end >>>= 0; + start >>>= 0; + + if (end <= start) { + return ''; + } + + if (!encoding) encoding = 'utf8'; + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end); + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end); + + case 'ascii': + return asciiSlice(this, start, end); + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end); + + case 'base64': + return base64Slice(this, start, end); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } + } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect + // Buffer instances. + + + Buffer.prototype._isBuffer = true; + + function swap(b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; + } + + Buffer.prototype.swap16 = function swap16() { + var len = this.length; + + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits'); + } + + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + + return this; + }; + + Buffer.prototype.swap32 = function swap32() { + var len = this.length; + + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits'); + } + + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + + return this; + }; + + Buffer.prototype.swap64 = function swap64() { + var len = this.length; + + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits'); + } + + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + + return this; + }; + + Buffer.prototype.toString = function toString() { + var length = this.length | 0; + if (length === 0) return ''; + if (arguments.length === 0) return utf8Slice(this, 0, length); + return slowToString.apply(this, arguments); + }; + + Buffer.prototype.equals = function equals(b) { + if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer'); + if (this === b) return true; + return Buffer.compare(this, b) === 0; + }; + + Buffer.prototype.inspect = function inspect() { + var str = ''; + var max = INSPECT_MAX_BYTES; + + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); + if (this.length > max) str += ' ... '; + } + + return ''; + }; + + Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (!internalIsBuffer(target)) { + throw new TypeError('Argument must be a Buffer'); + } + + if (start === undefined) { + start = 0; + } + + if (end === undefined) { + end = target ? target.length : 0; + } + + if (thisStart === undefined) { + thisStart = 0; + } + + if (thisEnd === undefined) { + thisEnd = this.length; + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index'); + } + + if (thisStart >= thisEnd && start >= end) { + return 0; + } + + if (thisStart >= thisEnd) { + return -1; + } + + if (start >= end) { + return 1; + } + + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; + }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, + // OR the last index of `val` in `buffer` at offset <= `byteOffset`. + // + // Arguments: + // - buffer - a Buffer to search + // - val - a string, Buffer, or number + // - byteOffset - an index into `buffer`; will be clamped to an int32 + // - encoding - an optional encoding, relevant is val is a string + // - dir - true for indexOf, false for lastIndexOf + + + function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1; // Normalize byteOffset + + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + + byteOffset = +byteOffset; // Coerce to Number. + + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : buffer.length - 1; + } // Normalize byteOffset: negative offsets start from the end of the buffer + + + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + + if (byteOffset >= buffer.length) { + if (dir) return -1;else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0;else return -1; + } // Normalize val + + + if (typeof val === 'string') { + val = Buffer.from(val, encoding); + } // Finally, search either indexOf (if dir is true) or lastIndexOf + + + if (internalIsBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1; + } + + return arrayIndexOf(buffer, val, byteOffset, encoding, dir); + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + + if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); + } + } + + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); + } + + throw new TypeError('val must be string, number or Buffer'); + } + + function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + + if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1; + } + + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + + function read(buf, i) { + if (indexSize === 1) { + return buf[i]; + } else { + return buf.readUInt16BE(i * indexSize); + } + } + + var i; + + if (dir) { + var foundIndex = -1; + + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + + for (i = byteOffset; i >= 0; i--) { + var found = true; + + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + + if (found) return i; + } + } + + return -1; + } + + Buffer.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; + }; + + Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true); + }; + + Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false); + }; + + function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + + if (!length) { + length = remaining; + } else { + length = Number(length); + + if (length > remaining) { + length = remaining; + } + } // must be an even number of digits + + + var strLen = string.length; + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string'); + + if (length > strLen / 2) { + length = strLen / 2; + } + + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(parsed)) return i; + buf[offset + i] = parsed; + } + + return i; + } + + function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); + } + + function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length); + } + + function latin1Write(buf, string, offset, length) { + return asciiWrite(buf, string, offset, length); + } + + function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length); + } + + function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); + } + + Buffer.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0; + + if (isFinite(length)) { + length = length | 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } // legacy write(string, encoding, offset, length) - remove in v0.13 + + } else { + throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); + } + + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds'); + } + + if (!encoding) encoding = 'utf8'; + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length); + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length); + + case 'ascii': + return asciiWrite(this, string, offset, length); + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length); + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } + }; + + Buffer.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + }; + }; + + function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return fromByteArray(buf); + } else { + return fromByteArray(buf.slice(start, end)); + } + } + + function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + var i = start; + + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + + break; + + case 2: + secondByte = buf[i + 1]; + + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; + + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + + break; + + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; + + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + + break; + + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; + + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + res.push(codePoint); + i += bytesPerSequence; + } + + return decodeCodePointsArray(res); + } // Based on http://stackoverflow.com/a/22747272/680742, the browser with + // the lowest limit is Chrome, with 0x10000 args. + // We go 1 magnitude less, for safety + + + var MAX_ARGUMENTS_LENGTH = 0x1000; + + function decodeCodePointsArray(codePoints) { + var len = codePoints.length; + + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints); // avoid extra slice() + } // Decode in chunks to avoid "call stack size exceeded". + + + var res = ''; + var i = 0; + + while (i < len) { + res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); + } + + return res; + } + + function asciiSlice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + + return ret; + } + + function latin1Slice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + + return ret; + } + + function hexSlice(buf, start, end) { + var len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + var out = ''; + + for (var i = start; i < end; ++i) { + out += toHex(buf[i]); + } + + return out; + } + + function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + + return res; + } + + Buffer.prototype.slice = function slice(start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + + if (end < start) end = start; + var newBuf; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end); + newBuf.__proto__ = Buffer.prototype; + } else { + var sliceLen = end - start; + newBuf = new Buffer(sliceLen, undefined); + + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start]; + } + } + + return newBuf; + }; + /* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + + + function checkOffset(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); + } + + Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + return val; + }; + + Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + checkOffset(offset, byteLength, this.length); + } + + var val = this[offset + --byteLength]; + var mul = 1; + + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + + return val; + }; + + Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset]; + }; + + Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; + }; + + Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; + }; + + Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; + }; + + Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); + }; + + Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; + }; + + Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; + }; + + Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 0x80)) return this[offset]; + return (0xff - this[offset] + 1) * -1; + }; + + Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset] | this[offset + 1] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; + }; + + Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset + 1] | this[offset] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; + }; + + Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; + }; + + Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; + }; + + Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return read(this, offset, true, 23, 4); + }; + + Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return read(this, offset, false, 23, 4); + }; + + Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return read(this, offset, true, 52, 8); + }; + + Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return read(this, offset, false, 52, 8); + }; + + function checkInt(buf, value, offset, ext, max, min) { + if (!internalIsBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + } + + Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; + }; + + Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; + }; + + Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + this[offset] = value & 0xff; + return offset + 1; + }; + + function objectWriteUInt16(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8; + } + } + + Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16(this, value, offset, true); + } + + return offset + 2; + }; + + Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16(this, value, offset, false); + } + + return offset + 2; + }; + + function objectWriteUInt32(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff; + } + } + + Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, true); + } + + return offset + 4; + }; + + Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, false); + } + + return offset + 4; + }; + + Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; + }; + + Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; + }; + + Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + if (value < 0) value = 0xff + value + 1; + this[offset] = value & 0xff; + return offset + 1; + }; + + Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16(this, value, offset, true); + } + + return offset + 2; + }; + + Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16(this, value, offset, false); + } + + return offset + 2; + }; + + Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + } else { + objectWriteUInt32(this, value, offset, true); + } + + return offset + 4; + }; + + Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, false); + } + + return offset + 4; + }; + + function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + if (offset < 0) throw new RangeError('Index out of range'); + } + + function writeFloat(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4); + } + + write(buf, value, offset, littleEndian, 23, 4); + return offset + 4; + } + + Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert); + }; + + Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert); + }; + + function writeDouble(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8); + } + + write(buf, value, offset, littleEndian, 52, 8); + return offset + 8; + } + + Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert); + }; + + Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert); + }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + + + Buffer.prototype.copy = function copy(target, targetStart, start, end) { + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done + + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions + + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds'); + } + + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds'); + if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob? + + if (end > this.length) end = this.length; + + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + + var len = end - start; + var i; + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart); + } + + return len; + }; // Usage: + // buffer.fill(number[, offset[, end]]) + // buffer.fill(buffer[, offset[, end]]) + // buffer.fill(string[, offset[, end]][, encoding]) + + + Buffer.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + + if (val.length === 1) { + var code = val.charCodeAt(0); + + if (code < 256) { + val = code; + } + } + + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string'); + } + + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + } else if (typeof val === 'number') { + val = val & 255; + } // Invalid ranges are not set to a default, so can range check early. + + + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index'); + } + + if (end <= start) { + return this; + } + + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + if (!val) val = 0; + var i; + + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = internalIsBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()); + var len = bytes.length; + + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + + return this; + }; // HELPER FUNCTIONS + // ================ + + + var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g; + + function base64clean(str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to '' + + if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + + while (str.length % 4 !== 0) { + str = str + '='; + } + + return str; + } + + function stringtrim(str) { + if (str.trim) return str.trim(); + return str.replace(/^\s+|\s+$/g, ''); + } + + function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); + } + + function utf8ToBytes(string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); // is surrogate component + + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } // valid lead + + + leadSurrogate = codePoint; + continue; + } // 2 leads in a row + + + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue; + } // valid surrogate pair + + + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + + leadSurrogate = null; // encode utf8 + + if (codePoint < 0x80) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break; + bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break; + bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break; + bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else { + throw new Error('Invalid code point'); + } + } + + return bytes; + } + + function asciiToBytes(str) { + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + + return byteArray; + } + + function utf16leToBytes(str, units) { + var c, hi, lo; + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + + return byteArray; + } + + function base64ToBytes(str) { + return toByteArray(base64clean(str)); + } + + function blitBuffer(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + + return i; + } + + function isnan(val) { + return val !== val; // eslint-disable-line no-self-compare + } // the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence + // The _isBuffer check is for Safari 5-7 support, because it's missing + // Object.prototype.constructor. Remove this eventually + + + function isBuffer(obj) { + return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj)); + } + + function isFastBuffer(obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj); + } // For Node v0.10 support. Remove this eventually. + + + function isSlowBuffer(obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0)); + } + + function BufferList() { + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function (v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function (v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function () { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function () { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function (s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + + while (p = p.next) { + ret += s + p.data; + } + + return ret; + }; + + BufferList.prototype.concat = function (n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + + while (p) { + p.data.copy(ret, i); + i += p.data.length; + p = p.next; + } + + return ret; + }; + + var isBufferEncoding = Buffer.isEncoding || function (encoding) { + switch (encoding && encoding.toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + case 'raw': + return true; + + default: + return false; + } + }; + + function assertEncoding(encoding) { + if (encoding && !isBufferEncoding(encoding)) { + throw new Error('Unknown encoding: ' + encoding); + } + } // StringDecoder provides an interface for efficiently splitting a series of + // buffers into a series of JS strings without breaking apart multi-byte + // characters. CESU-8 is handled as part of the UTF-8 encoding. + // + // @TODO Handling all encodings inside a single object makes it very difficult + // to reason about this code, so it should be split up in the future. + // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code + // points as used by CESU-8. + + + function StringDecoder(encoding) { + this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); + assertEncoding(encoding); + + switch (this.encoding) { + case 'utf8': + // CESU-8 represents each of Surrogate Pair by 3-bytes + this.surrogateSize = 3; + break; + + case 'ucs2': + case 'utf16le': + // UTF-16 represents each of Surrogate Pair by 2-bytes + this.surrogateSize = 2; + this.detectIncompleteChar = utf16DetectIncompleteChar; + break; + + case 'base64': + // Base-64 stores 3 bytes in 4 chars, and pads the remainder. + this.surrogateSize = 3; + this.detectIncompleteChar = base64DetectIncompleteChar; + break; + + default: + this.write = passThroughWrite; + return; + } // Enough space to store all bytes of a single character. UTF-8 needs 4 + // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). + + + this.charBuffer = new Buffer(6); // Number of bytes received for the current incomplete multi-byte character. + + this.charReceived = 0; // Number of bytes expected for the current incomplete multi-byte character. + + this.charLength = 0; + } + // guaranteed to not contain any partial multi-byte characters. Any partial + // character found at the end of the buffer is buffered up, and will be + // returned when calling write again with the remaining bytes. + // + // Note: Converting a Buffer containing an orphan surrogate to a String + // currently works, but converting a String to a Buffer (via `new Buffer`, or + // Buffer#write) will replace incomplete surrogates with the unicode + // replacement character. See https://codereview.chromium.org/121173009/ . + + StringDecoder.prototype.write = function (buffer) { + var charStr = ''; // if our last write ended with an incomplete multibyte character + + while (this.charLength) { + // determine how many remaining bytes this buffer has to offer for this char + var available = buffer.length >= this.charLength - this.charReceived ? this.charLength - this.charReceived : buffer.length; // add the new bytes to the char buffer + + buffer.copy(this.charBuffer, this.charReceived, 0, available); + this.charReceived += available; + + if (this.charReceived < this.charLength) { + // still not enough chars in this buffer? wait for more ... + return ''; + } // remove bytes belonging to the current character from the buffer + + + buffer = buffer.slice(available, buffer.length); // get the character that was split + + charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + + var charCode = charStr.charCodeAt(charStr.length - 1); + + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + this.charLength += this.surrogateSize; + charStr = ''; + continue; + } + + this.charReceived = this.charLength = 0; // if there are no more bytes in this buffer, just emit our char + + if (buffer.length === 0) { + return charStr; + } + + break; + } // determine and set charLength / charReceived + + + this.detectIncompleteChar(buffer); + var end = buffer.length; + + if (this.charLength) { + // buffer the incomplete character bytes we got + buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); + end -= this.charReceived; + } + + charStr += buffer.toString(this.encoding, 0, end); + var end = charStr.length - 1; + var charCode = charStr.charCodeAt(end); // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + var size = this.surrogateSize; + this.charLength += size; + this.charReceived += size; + this.charBuffer.copy(this.charBuffer, size, 0, size); + buffer.copy(this.charBuffer, 0, 0, size); + return charStr.substring(0, end); + } // or just emit the charStr + + + return charStr; + }; // detectIncompleteChar determines if there is an incomplete UTF-8 character at + // the end of the given buffer. If so, it sets this.charLength to the byte + // length that character, and sets this.charReceived to the number of bytes + // that are available for this character. + + + StringDecoder.prototype.detectIncompleteChar = function (buffer) { + // determine how many bytes we have to check at the end of this buffer + var i = buffer.length >= 3 ? 3 : buffer.length; // Figure out if one of the last i bytes of our buffer announces an + // incomplete char. + + for (; i > 0; i--) { + var c = buffer[buffer.length - i]; // See http://en.wikipedia.org/wiki/UTF-8#Description + // 110XXXXX + + if (i == 1 && c >> 5 == 0x06) { + this.charLength = 2; + break; + } // 1110XXXX + + + if (i <= 2 && c >> 4 == 0x0E) { + this.charLength = 3; + break; + } // 11110XXX + + + if (i <= 3 && c >> 3 == 0x1E) { + this.charLength = 4; + break; + } + } + + this.charReceived = i; + }; + + StringDecoder.prototype.end = function (buffer) { + var res = ''; + if (buffer && buffer.length) res = this.write(buffer); + + if (this.charReceived) { + var cr = this.charReceived; + var buf = this.charBuffer; + var enc = this.encoding; + res += buf.slice(0, cr).toString(enc); + } + + return res; + }; + + function passThroughWrite(buffer) { + return buffer.toString(this.encoding); + } + + function utf16DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 2; + this.charLength = this.charReceived ? 2 : 0; + } + + function base64DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 3; + this.charLength = this.charReceived ? 3 : 0; + } + + Readable.ReadableState = ReadableState; + var debug$2 = debuglog('stream'); + inherits$3(Readable, EventEmitter$2); + + function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') { + return emitter.prependListener(event, fn); + } else { + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + } + } + + function listenerCount(emitter, type) { + return emitter.listeners(type).length; + } + + function ReadableState(options, stream) { + options = options || {}; // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + + this.objectMode = !!options.objectMode; + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; // cast to ints. + + this.highWaterMark = ~~this.highWaterMark; // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + + this.sync = true; // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + + this.ranOut = false; // the number of writers that are awaiting a drain event in .pipe()s + + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled + + this.readingMore = false; + this.decoder = null; + this.encoding = null; + + if (options.encoding) { + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } + } + function Readable(options) { + if (!(this instanceof Readable)) return new Readable(options); + this._readableState = new ReadableState(options, this); // legacy + + this.readable = true; + if (options && typeof options.read === 'function') this._read = options.read; + EventEmitter$2.call(this); + } // Manually shove something into the read() buffer. + // This returns true if the highWaterMark has not been hit yet, + // similar to how Writable.write() returns true if you should + // write() some more. + + Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + + if (encoding !== state.encoding) { + chunk = Buffer$1.from(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); + }; // Unshift should *always* be something directly out of read() + + + Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); + }; + + Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; + }; + + function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var _e = new Error('stream.unshift() after end event'); + + stream.emit('error', _e); + } else { + var skipAdd; + + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); + } // if it's past the high water mark, we can push in some more. + // Also, if we have no data yet, we can stand some + // more bytes. This is to work around cases where hwm=0, + // such as the repl. Also, if the push() triggered a + // readable event, and the user called read(largeNumber) such that + // needReadable was set, then we ought to push more, so that another + // 'readable' event will be triggered. + + + function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); + } // backwards compatibility. + + + Readable.prototype.setEncoding = function (enc) { + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; + }; // Don't raise the hwm > 8MB + + + var MAX_HWM = 0x800000; + + function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + + return n; + } // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + + function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } // If we're asking for more than the current hwm, then raise the hwm. + + + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; // Don't have enough + + if (!state.ended) { + state.needReadable = true; + return 0; + } + + return state.length; + } // you can override either this method, or the async _read(n) below. + + + Readable.prototype.read = function (n) { + debug$2('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug$2('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. + + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + // if we need a readable event, then we need to do some reading. + + + var doRead = state.needReadable; + debug$2('need readable', doRead); // if we currently have less than the highWaterMark, then also read some + + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug$2('length less than watermark', doRead); + } // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + + + if (state.ended || state.reading) { + doRead = false; + debug$2('reading or ended', doRead); + } else if (doRead) { + debug$2('do read'); + state.reading = true; + state.sync = true; // if the length is currently zero, then we *need* a readable event. + + if (state.length === 0) state.needReadable = true; // call internal read method + + this._read(state.highWaterMark); + + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. + + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + return ret; + }; + + function chunkInvalid(state, chunk) { + var er = null; + + if (!isBuffer$2(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + return er; + } + + function onEofChunk(stream, state) { + if (state.ended) return; + + if (state.decoder) { + var chunk = state.decoder.end(); + + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + + state.ended = true; // emit 'readable' now to make sure it gets picked up. + + emitReadable(stream); + } // Don't emit readable right away in sync mode, because this can trigger + // another read() call => stack overflow. This way, it might trigger + // a nextTick recursion warning, but that's not so bad. + + + function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + + if (!state.emittedReadable) { + debug$2('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream); + } + } + + function emitReadable_(stream) { + debug$2('emit readable'); + stream.emit('readable'); + flow(stream); + } // at this point, the user has presumably seen the 'readable' event, + // and called read() to consume some data. that may have triggered + // in turn another _read(n) call, in which case reading = true if + // it's in progress. + // However, if we're not ended, or reading, and the length < hwm, + // then go ahead and try to read some more preemptively. + + + function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + nextTick(maybeReadMore_, stream, state); + } + } + + function maybeReadMore_(stream, state) { + var len = state.length; + + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug$2('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) // didn't get any data, stop spinning. + break;else len = state.length; + } + + state.readingMore = false; + } // abstract method. to be overridden in specific implementation classes. + // call cb(er, data) where data is <= n in length. + // for virtual (non-string, non-buffer) streams, "length" is somewhat + // arbitrary, and perhaps not very meaningful. + + + Readable.prototype._read = function (n) { + this.emit('error', new Error('not implemented')); + }; + + Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + + case 1: + state.pipes = [state.pipes, dest]; + break; + + default: + state.pipes.push(dest); + break; + } + + state.pipesCount += 1; + debug$2('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = !pipeOpts || pipeOpts.end !== false; + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + + function onunpipe(readable) { + debug$2('onunpipe'); + + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug$2('onend'); + dest.end(); + } // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + + + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + + function cleanup() { + debug$2('cleanup'); // cleanup event handlers once the pipe is broken + + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + cleanedUp = true; // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + + + var increasedAwaitDrain = false; + src.on('data', ondata); + + function ondata(chunk) { + debug$2('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug$2('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + + src.pause(); + } + } // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + + + function onerror(er) { + debug$2('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (listenerCount(dest, 'error') === 0) dest.emit('error', er); + } // Make sure our error handler is attached before userland ones. + + + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. + + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + + dest.once('close', onclose); + + function onfinish() { + debug$2('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + + dest.once('finish', onfinish); + + function unpipe() { + debug$2('unpipe'); + src.unpipe(dest); + } // tell the dest that it's being piped to + + + dest.emit('pipe', src); // start the flow if it hasn't been started already. + + if (!state.flowing) { + debug$2('pipe resume'); + src.resume(); + } + + return dest; + }; + + function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug$2('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + + if (state.awaitDrain === 0 && src.listeners('data').length) { + state.flowing = true; + flow(src); + } + }; + } + + Readable.prototype.unpipe = function (dest) { + var state = this._readableState; // if we're not piping anywhere, then do nothing. + + if (state.pipesCount === 0) return this; // just one destination. most common case. + + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. + + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } // slow case. multiple pipe destinations. + + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var _i = 0; _i < len; _i++) { + dests[_i].emit('unpipe', this); + } + + return this; + } // try to find the right one. + + + var i = indexOf(state.pipes, dest); + if (i === -1) return this; + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this); + return this; + }; // set up data events if they are asked for + // Ensure readable listeners eventually get something + + + Readable.prototype.on = function (ev, fn) { + var res = EventEmitter$2.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + + if (!state.reading) { + nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; + }; + + Readable.prototype.addListener = Readable.prototype.on; + + function nReadingNextTick(self) { + debug$2('readable nexttick read 0'); + self.read(0); + } // pause() and resume() are remnants of the legacy readable stream API + // If the user uses them, then switch into old mode. + + + Readable.prototype.resume = function () { + var state = this._readableState; + + if (!state.flowing) { + debug$2('resume'); + state.flowing = true; + resume(this, state); + } + + return this; + }; + + function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + nextTick(resume_, stream, state); + } + } + + function resume_(stream, state) { + if (!state.reading) { + debug$2('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); + } + + Readable.prototype.pause = function () { + debug$2('call pause flowing=%j', this._readableState.flowing); + + if (false !== this._readableState.flowing) { + debug$2('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + + return this; + }; + + function flow(stream) { + var state = stream._readableState; + debug$2('flow', state.flowing); + + while (state.flowing && stream.read() !== null) {} + } // wrap an old-style stream as the async data source. + // This is *not* part of the readable stream interface. + // It is an ugly unfortunate mess of history. + + + Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + var self = this; + stream.on('end', function () { + debug$2('wrapped end'); + + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + stream.on('data', function (chunk) { + debug$2('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode + + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = self.push(chunk); + + if (!ret) { + paused = true; + stream.pause(); + } + }); // proxy all the other methods. + // important when wrapping filters and duplexes. + + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } // proxy certain important events. + + + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function (ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); // when we try to consume some more bytes, simply unpause the + // underlying stream. + + self._read = function (n) { + debug$2('wrapped _read', n); + + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; + }; // exposed for testing purposes only. + + + Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. + // Length is the combined lengths of all the buffers in the list. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + return ret; + } // Extracts only enough buffered data to satisfy the amount requested. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + + function fromListPartial(n, list, hasStrings) { + var ret; + + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + + return ret; + } // Copies a specified amount of characters from the list of buffered data + // chunks. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + + function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; + } // Copies a specified amount of bytes from the list of buffered data chunks. + // This function is designed to be inlinable, so please take care when making + // changes to the function body. + + + function copyFromBuffer(n, list) { + var ret = Buffer$1.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; + } + + function endReadable(stream) { + var state = stream._readableState; // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + nextTick(endReadableNT, state, stream); + } + } + + function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + } + + function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } + } + + function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + + return -1; + } + + // A bit simpler than readable streams. + Writable.WritableState = WritableState; + inherits$3(Writable, EventEmitter$2); + + function nop() {} + + function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; + } + + function WritableState(options, stream) { + Object.defineProperty(this, 'buffer', { + get: deprecate$1(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + options = options || {}; // object stream flag to indicate whether or not this stream + // contains buffers or objects. + + this.objectMode = !!options.objectMode; + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; // cast to ints. + + this.highWaterMark = ~~this.highWaterMark; + this.needDrain = false; // at the start of calling end() + + this.ending = false; // when end() has been called, and returned + + this.ended = false; // when 'finish' is emitted + + this.finished = false; // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + + this.length = 0; // a flag to see when we're in the middle of a write. + + this.writing = false; // when true all writes will be buffered until .uncork() call + + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + + this.sync = true; // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + + this.onwrite = function (er) { + onwrite(stream, er); + }; // the callback that the user supplies to write(chunk,encoding,cb) + + + this.writecb = null; // the amount that is being written when _write is called. + + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + + this.prefinished = false; // True if the error was already emitted and should not be thrown again + + this.errorEmitted = false; // count buffered requests + + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + + this.corkedRequestsFree = new CorkedRequest(this); + } + + WritableState.prototype.getBuffer = function writableStateGetBuffer() { + var current = this.bufferedRequest; + var out = []; + + while (current) { + out.push(current); + current = current.next; + } + + return out; + }; + function Writable(options) { + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); + this._writableState = new WritableState(options, this); // legacy. + + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + } + + EventEmitter$2.call(this); + } // Otherwise people can pipe Writable streams, which is just wrong. + + Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); + }; + + function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb + + stream.emit('error', er); + nextTick(cb, er); + } // If we get something that is not a buffer, string, null, or undefined, + // and we're not in objectMode, then that's an error. + // Otherwise stream chunks are all considered to be of length=1, and the + // watermarks determine how many objects to keep in the buffer, rather than + // how many bytes or characters. + + + function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; // Always throw error if a null is written + // if we are not in object mode then throw + // if it is not a buffer, string, or undefined. + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + if (er) { + stream.emit('error', er); + nextTick(cb, er); + valid = false; + } + + return valid; + } + + Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } + return ret; + }; + + Writable.prototype.cork = function () { + var state = this._writableState; + state.corked++; + }; + + Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } + }; + + Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; + }; + + function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + + return chunk; + } // if we're already writing something, then just put this + // in the queue, and wait our turn. Otherwise, call _write + // If we return false, then we need a drain event, so set that flag. + + + function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. + + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; + } + + function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; + } + + function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) nextTick(cb, er);else cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } + + function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; + } + + function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + nextTick(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } + } + + function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); + } // Must force callback to be called on nextTick, so that we don't + // emit 'drain' before the write() consumer gets the 'false' return + // value, and has a chance to attach a 'drain' listener. + + + function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } + } // if there's something in the buffer waiting, then process it + + + function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + + state.pendingcb++; + state.lastBufferedRequest = null; + + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; + } + + Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('not implemented')); + }; + + Writable.prototype._writev = null; + + Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks + + if (state.corked) { + state.corked = 1; + this.uncork(); + } // ignore unnecessary end() calls. + + + if (!state.ending && !state.finished) endWritable(this, state, cb); + }; + + function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; + } + + function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } + } + + function finishMaybe(stream, state) { + var need = needFinish(state); + + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + + return need; + } + + function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + + if (cb) { + if (state.finished) nextTick(cb);else stream.once('finish', cb); + } + + state.ended = true; + stream.writable = false; + } // It seems a linked list but it is not + // there will be only 2 of these for each stream + + + function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; + } + + inherits$3(Duplex, Readable); + var keys = Object.keys(Writable.prototype); + + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } + function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + if (options && options.readable === false) this.readable = false; + if (options && options.writable === false) this.writable = false; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + this.once('end', onend); + } // the no-half-open enforcer + + function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. + // But allow more writes to happen in this tick. + + nextTick(onEndNT, this); + } + + function onEndNT(self) { + self.end(); + } + + // a transform stream is a readable/writable stream where you do + inherits$3(Transform, Duplex); + + function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; + } + + function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + ts.writechunk = null; + ts.writecb = null; + if (data !== null && data !== undefined) stream.push(data); + cb(er); + var rs = stream._readableState; + rs.reading = false; + + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } + } + function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = new TransformState(this); // when the writable side finishes, then flush out anything remaining. + + var stream = this; // start out asking for a readable event once data is transformed. + + this._readableState.needReadable = true; // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er) { + done(stream, er); + });else done(stream); + }); + } + + Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); + }; // This is the part where you do stuff! + // override this function in implementation classes. + // 'chunk' is an input chunk. + // + // Call `push(newChunk)` to pass along transformed output + // to the readable side. You may call 'push' zero or more times. + // + // Call `cb(err)` when you are done with this chunk. If you pass + // an error, then that'll put the hurt on the whole operation. If you + // never call cb(), then you'll never get another chunk. + + + Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('Not implemented'); + }; + + Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } + }; // Doesn't matter what the args are here. + // _transform does all the work. + // That we got here means that the readable side wants more data. + + + Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } + }; + + function done(stream, er) { + if (er) return stream.emit('error', er); // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + + var ws = stream._writableState; + var ts = stream._transformState; + if (ws.length) throw new Error('Calling transform done when ws.length != 0'); + if (ts.transforming) throw new Error('Calling transform done when still transforming'); + return stream.push(null); + } + + inherits$3(PassThrough, Transform); + function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); + } + + PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); + }; + + inherits$3(Stream, EventEmitter$2); + Stream.Readable = Readable; + Stream.Writable = Writable; + Stream.Duplex = Duplex; + Stream.Transform = Transform; + Stream.PassThrough = PassThrough; // Backwards-compat with node 0.4.x + + Stream.Stream = Stream; + // part of this class) is overridden in the Readable class. + + function Stream() { + EventEmitter$2.call(this); + } + + Stream.prototype.pipe = function (dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + + function onend() { + if (didOnEnd) return; + didOnEnd = true; + dest.end(); + } + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + if (typeof dest.destroy === 'function') dest.destroy(); + } // don't leave dangling pipes when there are errors. + + + function onerror(er) { + cleanup(); + + if (EventEmitter$2.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); // remove all the event listeners that were added. + + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + source.removeListener('end', onend); + source.removeListener('close', onclose); + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + dest.on('close', cleanup); + dest.emit('pipe', source); // Allow for unix-like usage: A.pipe(B).pipe(C) + + return dest; + }; + + var WritableStream = Stream.Writable; + var inherits$1 = util.inherits; + var browserStdout = BrowserStdout; + inherits$1(BrowserStdout, WritableStream); + + function BrowserStdout(opts) { + if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts); + opts = opts || {}; + WritableStream.call(this, opts); + this.label = opts.label !== undefined ? opts.label : 'stdout'; + } + + BrowserStdout.prototype._write = function (chunks, encoding, cb) { + var output = chunks.toString ? chunks.toString() : chunks; + + if (this.label === false) { + console.log(output); + } else { + console.log(this.label + ':', output); + } + + nextTick$1(cb); + }; + + var parseQuery = function parseQuery(qs) { + return qs.replace('?', '').split('&').reduce(function (obj, pair) { + var i = pair.indexOf('='); + var key = pair.slice(0, i); + var val = pair.slice(++i); // Due to how the URLSearchParams API treats spaces + + obj[key] = decodeURIComponent(val.replace(/\+/g, '%20')); + return obj; + }, {}); + }; + + function highlight(js) { + return js.replace(//g, '>').replace(/\/\/(.*)/gm, '//$1').replace(/('.*?')/gm, '$1').replace(/(\d+\.\d+)/gm, '$1').replace(/(\d+)/gm, '$1').replace(/\bnew[ \t]+(\w+)/gm, 'new $1').replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1'); + } + /** + * Highlight the contents of tag `name`. + * + * @private + * @param {string} name + */ + + + var highlightTags = function highlightTags(name) { + var code = document.getElementById('mocha').getElementsByTagName(name); + + for (var i = 0, len = code.length; i < len; ++i) { + code[i].innerHTML = highlight(code[i].innerHTML); + } + }; + + // `Symbol.iterator` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.iterator + defineWellKnownSymbol('iterator'); + + var charAt = stringMultibyte.charAt; + + + + + var STRING_ITERATOR = 'String Iterator'; + var setInternalState$2 = internalState.set; + var getInternalState$1 = internalState.getterFor(STRING_ITERATOR); + + // `String.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-string.prototype-@@iterator + defineIterator(String, 'String', function (iterated) { + setInternalState$2(this, { + type: STRING_ITERATOR, + string: toString_1(iterated), + index: 0 + }); + // `%StringIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next + }, function next() { + var state = getInternalState$1(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; + }); + + var ITERATOR = wellKnownSymbol('iterator'); + var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var ArrayValues = es_array_iterator.values; + + var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) { + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR] = ArrayValues; + } + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + if (domIterables[COLLECTION_NAME]) for (var METHOD_NAME in es_array_iterator) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, es_array_iterator[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = es_array_iterator[METHOD_NAME]; + } + } + } + }; + + for (var COLLECTION_NAME in domIterables) { + handlePrototype(global_1[COLLECTION_NAME] && global_1[COLLECTION_NAME].prototype, COLLECTION_NAME); + } + + handlePrototype(domTokenListPrototype, 'DOMTokenList'); + + // `Symbol.asyncIterator` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.asynciterator + defineWellKnownSymbol('asyncIterator'); + + // `Symbol.toStringTag` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.tostringtag + defineWellKnownSymbol('toStringTag'); + + // JSON[@@toStringTag] property + // https://tc39.es/ecma262/#sec-json-@@tostringtag + setToStringTag(global_1.JSON, 'JSON', true); + + // Math[@@toStringTag] property + // https://tc39.es/ecma262/#sec-math-@@tostringtag + setToStringTag(Math, 'Math', true); + + var nativePromiseConstructor = global_1.Promise; + + var iteratorClose = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = functionCall(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; + }; + + var TypeError$3 = global_1.TypeError; + + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + + var ResultPrototype = Result.prototype; + + var iterate = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = functionBindContext(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw TypeError$3(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && objectIsPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = iterator.next; + while (!(step = functionCall(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && objectIsPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + }; + + var TypeError$2 = global_1.TypeError; + + var validateArgumentsLength = function (passed, required) { + if (passed < required) throw TypeError$2('Not enough arguments'); + return passed; + }; + + var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(engineUserAgent); + + var engineIsNode = classofRaw(global_1.process) == 'process'; + + var set = global_1.setImmediate; + var clear = global_1.clearImmediate; + var process$2 = global_1.process; + var Dispatch = global_1.Dispatch; + var Function$1 = global_1.Function; + var MessageChannel = global_1.MessageChannel; + var String$2 = global_1.String; + var counter = 0; + var queue$1 = {}; + var ONREADYSTATECHANGE = 'onreadystatechange'; + var location$1, defer, channel, port; + + try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location$1 = global_1.location; + } catch (error) { /* empty */ } + + var run = function (id) { + if (hasOwnProperty_1(queue$1, id)) { + var fn = queue$1[id]; + delete queue$1[id]; + fn(); + } + }; + + var runner$1 = function (id) { + return function () { + run(id); + }; + }; + + var listener = function (event) { + run(event.data); + }; + + var post = function (id) { + // old engines have not location.origin + global_1.postMessage(String$2(id), location$1.protocol + '//' + location$1.host); + }; + + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function$1(handler); + var args = arraySlice(arguments, 1); + queue$1[++counter] = function () { + functionApply(fn, undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue$1[id]; + }; + // Node.js 0.8- + if (engineIsNode) { + defer = function (id) { + process$2.nextTick(runner$1(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner$1(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !engineIsIos) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = functionBindContext(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global_1.addEventListener && + isCallable(global_1.postMessage) && + !global_1.importScripts && + location$1 && location$1.protocol !== 'file:' && + !fails(post) + ) { + defer = post; + global_1.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in documentCreateElement('script')) { + defer = function (id) { + html$1.appendChild(documentCreateElement('script'))[ONREADYSTATECHANGE] = function () { + html$1.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner$1(id), 0); + }; + } + } + + var task$1 = { + set: set, + clear: clear + }; + + var engineIsIosPebble = /ipad|iphone|ipod/i.test(engineUserAgent) && global_1.Pebble !== undefined; + + var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(engineUserAgent); + + var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; + var macrotask = task$1.set; + + + + + + var MutationObserver = global_1.MutationObserver || global_1.WebKitMutationObserver; + var document$2 = global_1.document; + var process$1 = global_1.process; + var Promise$1 = global_1.Promise; + // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global_1, 'queueMicrotask'); + var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + + var flush, head, last, notify$2, toggle, node, promise, then; + + // modern engines have queueMicrotask method + if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (engineIsNode && (parent = process$1.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify$2(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!engineIsIos && !engineIsNode && !engineIsWebosWebkit && MutationObserver && document$2) { + toggle = true; + node = document$2.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify$2 = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!engineIsIosPebble && Promise$1 && Promise$1.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise$1.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise$1; + then = functionBindContext(promise.then, promise); + notify$2 = function () { + then(flush); + }; + // Node.js without promises + } else if (engineIsNode) { + notify$2 = function () { + process$1.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + // strange IE + webpack dev server bug - use .bind(global) + macrotask = functionBindContext(macrotask, global_1); + notify$2 = function () { + macrotask(flush); + }; + } + } + + var microtask = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify$2(); + } last = task; + }; + + var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); + }; + + // `NewPromiseCapability` abstract operation + // https://tc39.es/ecma262/#sec-newpromisecapability + var f = function (C) { + return new PromiseCapability(C); + }; + + var newPromiseCapability$1 = { + f: f + }; + + var promiseResolve = function (C, x) { + anObject(C); + if (isObject$1(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability$1.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + var hostReportErrors = function (a, b) { + var console = global_1.console; + if (console && console.error) { + arguments.length == 1 ? console.error(a) : console.error(a, b); + } + }; + + var perform = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } + }; + + var Queue = function () { + this.head = null; + this.tail = null; + }; + + Queue.prototype = { + add: function (item) { + var entry = { item: item, next: null }; + if (this.head) this.tail.next = entry; + else this.head = entry; + this.tail = entry; + }, + get: function () { + var entry = this.head; + if (entry) { + this.head = entry.next; + if (this.tail === entry) this.tail = null; + return entry.item; + } + } + }; + + var queue = Queue; + + var engineIsBrowser = typeof window == 'object'; + + var task = task$1.set; + + + + + + + + + + + + + + var SPECIES = wellKnownSymbol('species'); + var PROMISE = 'Promise'; + + var getInternalState = internalState.getterFor(PROMISE); + var setInternalState$1 = internalState.set; + var getInternalPromiseState = internalState.getterFor(PROMISE); + var NativePromisePrototype = nativePromiseConstructor && nativePromiseConstructor.prototype; + var PromiseConstructor = nativePromiseConstructor; + var PromisePrototype = NativePromisePrototype; + var TypeError$1 = global_1.TypeError; + var document$1 = global_1.document; + var process = global_1.process; + var newPromiseCapability = newPromiseCapability$1.f; + var newGenericPromiseCapability = newPromiseCapability; + + var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global_1.dispatchEvent); + var NATIVE_REJECTION_EVENT = isCallable(global_1.PromiseRejectionEvent); + var UNHANDLED_REJECTION = 'unhandledrejection'; + var REJECTION_HANDLED = 'rejectionhandled'; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var SUBCLASSING = false; + + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + + var FORCED$2 = isForced_1(PROMISE, function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && engineV8Version === 66) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (engineV8Version >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false; + // Detect correctness of subclassing with @@species support + var promise = new PromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return !GLOBAL_CORE_JS_PROMISE && engineIsBrowser && !NATIVE_REJECTION_EVENT; + }); + + var INCORRECT_ITERATION$1 = FORCED$2 || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); + }); + + // helpers + var isThenable = function (it) { + var then; + return isObject$1(it) && isCallable(then = it.then) ? then : false; + }; + + var callReaction = function (reaction, state) { + var value = state.value; + var ok = state.state == FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError$1('Promise-chain cycle')); + } else if (then = isThenable(result)) { + functionCall(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + }; + + var notify$1 = function (state, isReject) { + if (state.notified) return; + state.notified = true; + microtask(function () { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); + }; + + var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document$1.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global_1.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_REJECTION_EVENT && (handler = global_1['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); + }; + + var onUnhandled = function (state) { + functionCall(task, global_1, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (engineIsNode) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = engineIsNode || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); + }; + + var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; + }; + + var onHandleUnhandled = function (state) { + functionCall(task, global_1, function () { + var promise = state.facade; + if (engineIsNode) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); + }; + + var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; + }; + + var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify$1(state, true); + }; + + var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw TypeError$1("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + functionCall(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify$1(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } + }; + + // constructor polyfill + if (FORCED$2) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + functionCall(Internal, this); + var state = getInternalState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + PromisePrototype = PromiseConstructor.prototype; + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState$1(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new queue(), + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromisePrototype, { + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + // eslint-disable-next-line unicorn/no-thenable -- safe + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = engineIsNode ? process.domain : undefined; + if (state.state == PENDING) state.reactions.add(reaction); + else microtask(function () { + callReaction(reaction, state); + }); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.es/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + newPromiseCapability$1.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (isCallable(nativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + functionCall(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` + redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (objectSetPrototypeOf) { + objectSetPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } + } + + _export({ global: true, wrap: true, forced: FORCED$2 }, { + Promise: PromiseConstructor + }); + + setToStringTag(PromiseConstructor, PROMISE, false); + setSpecies(PROMISE); + + PromiseWrapper = getBuiltIn(PROMISE); + + // statics + _export({ target: PROMISE, stat: true, forced: FORCED$2 }, { + // `Promise.reject` method + // https://tc39.es/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + functionCall(capability.reject, undefined, r); + return capability.promise; + } + }); + + _export({ target: PROMISE, stat: true, forced: FORCED$2 }, { + // `Promise.resolve` method + // https://tc39.es/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve(this, x); + } + }); + + _export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, { + // `Promise.all` method + // https://tc39.es/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + functionCall($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.es/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + functionCall($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } + }); + + createCommonjsModule(function (module) { + /** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + var runtime = function (exports) { + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined$1; // More compressible than void 0. + + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + function define(obj, key, value) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + return obj[key]; + } + + try { + // IE 8 has a broken Object.defineProperty that only works on DOM objects. + define({}, ""); + } catch (err) { + define = function define(obj, key, value) { + return obj[key] = value; + }; + } + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + + generator._invoke = makeInvokeMethod(innerFn, self, context); + return generator; + } + + exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + + function tryCatch(fn, obj, arg) { + try { + return { + type: "normal", + arg: fn.call(obj, arg) + }; + } catch (err) { + return { + type: "throw", + arg: err + }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + + var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + + function Generator() {} + + function GeneratorFunction() {} + + function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + + + var IteratorPrototype = {}; + + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + + if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function (method) { + define(prototype, method, function (arg) { + return this._invoke(method, arg); + }); + }); + } + + exports.isGeneratorFunction = function (genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" : false; + }; + + exports.mark = function (genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + define(genFun, toStringTagSymbol, "GeneratorFunction"); + } + + genFun.prototype = Object.create(Gp); + return genFun; + }; // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + + + exports.awrap = function (arg) { + return { + __await: arg + }; + }; + + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + + if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { + return PromiseImpl.resolve(value.__await).then(function (value) { + invoke("next", value, resolve, reject); + }, function (err) { + invoke("throw", err, resolve, reject); + }); + } + + return PromiseImpl.resolve(value).then(function (unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. + result.value = unwrapped; + resolve(result); + }, function (error) { + // If a rejected Promise was yielded, throw the rejection back + // into the async generator function so it can be handled there. + return invoke("throw", error, resolve, reject); + }); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function (resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + + + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + + exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + + exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); + return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function (result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + + + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + var record = tryCatch(innerFn, self, context); + + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done ? GenStateCompleted : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + } else if (record.type === "throw") { + state = GenStateCompleted; // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + + + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + + if (method === undefined$1) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + // Note: ["return"] must be used for ES3 parsing compatibility. + if (delegate.iterator["return"]) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined$1; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError("The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (!info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). + + context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined$1; + } + } else { + // Re-yield the result returned by the delegate method. + return info; + } // The delegate iterator is finished, so forget it and continue with + // the outer generator. + + + context.delegate = null; + return ContinueSentinel; + } // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + + + defineIteratorMethods(Gp); + define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + + Gp[iteratorSymbol] = function () { + return this; + }; + + Gp.toString = function () { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { + tryLoc: locs[0] + }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ + tryLoc: "root" + }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + exports.keys = function (object) { + var keys = []; + + for (var key in object) { + keys.push(key); + } + + keys.reverse(); // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + + return function next() { + while (keys.length) { + var key = keys.pop(); + + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + + + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, + next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined$1; + next.done = true; + return next; + }; + + return next.next = next; + } + } // Return an iterator with no values. + + + return { + next: doneResult + }; + } + + exports.values = values; + + function doneResult() { + return { + value: undefined$1, + done: true + }; + } + + Context.prototype = { + constructor: Context, + reset: function reset(skipTempReset) { + this.prev = 0; + this.next = 0; // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + + this.sent = this._sent = undefined$1; + this.done = false; + this.delegate = null; + this.method = "next"; + this.arg = undefined$1; + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { + this[name] = undefined$1; + } + } + } + }, + stop: function stop() { + this.done = true; + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + dispatchException: function dispatchException(exception) { + if (this.done) { + throw exception; + } + + var context = this; + + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined$1; + } + + return !!caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + abrupt: function abrupt(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + complete: function complete(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + finish: function finish(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + "catch": function _catch(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + + return thrown; + } + } // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + + + throw new Error("illegal catch attempt"); + }, + delegateYield: function delegateYield(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined$1; + } + + return ContinueSentinel; + } + }; // Regardless of whether this script is executing as a CommonJS module + // or not, return the runtime object so that we can declare the variable + // regeneratorRuntime in the outer scope, which allows this module to be + // injected easily by `bin/regenerator --include-runtime script.js`. + + return exports; + }( // If this script is executing as a CommonJS module, use module.exports + // as the regeneratorRuntime namespace. Otherwise create a new empty + // object. Either way, the resulting object will be used to initialize + // the regeneratorRuntime variable at the top of this file. + module.exports ); + + try { + regeneratorRuntime = runtime; + } catch (accidentalStrictMode) { + // This module should not be running in strict mode, so the above + // assignment should always work unless something is misconfigured. Just + // in case runtime.js accidentally runs in strict mode, we can escape + // strict mode using a global Function call. This could conceivably fail + // if a Content Security Policy forbids using Function, but in that case + // the proper solution is to fix the accidental strict mode problem. If + // you've misconfigured your bundler to force strict mode and applied a + // CSP to forbid Function, and you're not willing to fix either of those + // problems, please detail your unique predicament in a GitHub issue. + Function("r", "regeneratorRuntime = r")(runtime); + } + }); + + var escapeStringRegexp = function escapeStringRegexp(string) { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + + + return string.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d'); + }; + + // Copyright Joyent, Inc. and other Node contributors. + // + // Permission is hereby granted, free of charge, to any person obtaining a + // copy of this software and associated documentation files (the + // "Software"), to deal in the Software without restriction, including + // without limitation the rights to use, copy, modify, merge, publish, + // distribute, sublicense, and/or sell copies of the Software, and to permit + // persons to whom the Software is furnished to do so, subject to the + // following conditions: + // + // The above copyright notice and this permission notice shall be included + // in all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + // USE OR OTHER DEALINGS IN THE SOFTWARE. + // resolves . and .. elements in a path array with directory names there + // must be no slashes, empty elements, or device names (c:\) in the array + // (so also no leading and trailing slashes - it does not distinguish + // relative and absolute paths) + function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } // if the path is allowed to go above the root, restore leading ..s + + + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; + } // Split a filename into [root, dir, basename, ext], unix version + // 'root' is just a slash, or nothing. + + + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + + var splitPath = function splitPath(filename) { + return splitPathRe.exec(filename).slice(1); + }; // path.resolve([from ...], to) + // posix version + + + function resolve() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : '/'; // Skip empty and invalid entries + + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + // Normalize the path + + + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) { + return !!p; + }), !resolvedAbsolute).join('/'); + return (resolvedAbsolute ? '/' : '') + resolvedPath || '.'; + } + // posix version + + function normalize(path) { + var isPathAbsolute = isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; // Normalize the path + + path = normalizeArray(filter(path.split('/'), function (p) { + return !!p; + }), !isPathAbsolute).join('/'); + + if (!path && !isPathAbsolute) { + path = '.'; + } + + if (path && trailingSlash) { + path += '/'; + } + + return (isPathAbsolute ? '/' : '') + path; + } + + function isAbsolute(path) { + return path.charAt(0) === '/'; + } // posix version + + function join() { + var paths = Array.prototype.slice.call(arguments, 0); + return normalize(filter(paths, function (p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + + return p; + }).join('/')); + } // path.relative(from, to) + // posix version + + function relative(from, to) { + from = resolve(from).substr(1); + to = resolve(to).substr(1); + + function trim(arr) { + var start = 0; + + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + } + var sep = '/'; + var delimiter = ':'; + function dirname(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; + } + function basename(path, ext) { + var f = splitPath(path)[2]; // TODO: make this comparison case-insensitive on windows? + + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + + return f; + } + function extname(path) { + return splitPath(path)[3]; + } + var path = { + extname: extname, + basename: basename, + dirname: dirname, + sep: sep, + delimiter: delimiter, + relative: relative, + join: join, + isAbsolute: isAbsolute, + normalize: normalize, + resolve: resolve + }; + + function filter(xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + + return res; + } // String.prototype.substr - negative index don't work in IE8 + + + var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { + return str.substr(start, len); + } : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + }; + + // call something on iterator step with safe closing on error + var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + }; + + var Array$1 = global_1.Array; + + // `Array.from` method implementation + // https://tc39.es/ecma262/#sec-array.from + var arrayFrom = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = functionBindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod && !(this == Array$1 && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (;!(step = functionCall(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : Array$1(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); + }); + + // `Array.from` method + // https://tc39.es/ecma262/#sec-array.from + _export({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: arrayFrom + }); + + var test$1 = []; + var un$Sort = functionUncurryThis(test$1.sort); + var push$1 = functionUncurryThis(test$1.push); + + // IE8- + var FAILS_ON_UNDEFINED = fails(function () { + test$1.sort(undefined); + }); + // V8 bug + var FAILS_ON_NULL = fails(function () { + test$1.sort(null); + }); + // Old WebKit + var STRICT_METHOD = arrayMethodIsStrict('sort'); + + var STABLE_SORT = !fails(function () { + // feature detection can be too slow, so check engines versions + if (engineV8Version) return engineV8Version < 70; + if (engineFfVersion && engineFfVersion > 3) return; + if (engineIsIeOrEdge) return true; + if (engineWebkitVersion) return engineWebkitVersion < 603; + + var result = ''; + var code, chr, value, index; + + // generate an array with more 512 elements (Chakra and old V8 fails only in this case) + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + + switch (code) { + case 66: case 69: case 70: case 72: value = 3; break; + case 68: case 71: value = 4; break; + default: value = 2; + } + + for (index = 0; index < 47; index++) { + test$1.push({ k: chr + index, v: value }); + } + } + + test$1.sort(function (a, b) { return b.v - a.v; }); + + for (index = 0; index < test$1.length; index++) { + chr = test$1[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) result += chr; + } + + return result !== 'DGBEFHACIJK'; + }); + + var FORCED$1 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT; + + var getSortCompare = function (comparefn) { + return function (x, y) { + if (y === undefined) return -1; + if (x === undefined) return 1; + if (comparefn !== undefined) return +comparefn(x, y) || 0; + return toString_1(x) > toString_1(y) ? 1 : -1; + }; + }; + + // `Array.prototype.sort` method + // https://tc39.es/ecma262/#sec-array.prototype.sort + _export({ target: 'Array', proto: true, forced: FORCED$1 }, { + sort: function sort(comparefn) { + if (comparefn !== undefined) aCallable(comparefn); + + var array = toObject(this); + + if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn); + + var items = []; + var arrayLength = lengthOfArrayLike(array); + var itemsLength, index; + + for (index = 0; index < arrayLength; index++) { + if (index in array) push$1(items, array[index]); + } + + arraySort(items, getSortCompare(comparefn)); + + itemsLength = items.length; + index = 0; + + while (index < itemsLength) array[index] = items[index++]; + while (index < arrayLength) delete array[index++]; + + return array; + } + }); + + var diff$1 = createCommonjsModule(function (module, exports) { + (function (global, factory) { + factory(exports) ; + })(commonjsGlobal, function (exports) { + + function Diff() {} + + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + + + function distanceIterator(start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; // If we have previous context, start with that + + + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; // Overlapping + + + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; // end the range and output + + + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; // Mine inserted + + + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; // Theirs inserted + + + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } // See: http://code.google.com/p/google-diff-match-patch/wiki/API + + + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + Object.defineProperty(exports, '__esModule', { + value: true + }); + }); + }); + + /** + * Helpers. + */ + var s$1 = 1000; + var m$1 = s$1 * 60; + var h$1 = m$1 * 60; + var d$1 = h$1 * 24; + var w$1 = d$1 * 7; + var y$1 = d$1 * 365.25; + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + var ms$1 = function ms(val, options) { + options = options || {}; + + var type = _typeof(val); + + if (type === 'string' && val.length > 0) { + return parse$1(val); + } else if (type === 'number' && isFinite(val)) { + return options["long"] ? fmtLong$1(val) : fmtShort$1(val); + } + + throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); + }; + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + + function parse$1(str) { + str = String(str); + + if (str.length > 100) { + return; + } + + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); + + if (!match) { + return; + } + + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y$1; + + case 'weeks': + case 'week': + case 'w': + return n * w$1; + + case 'days': + case 'day': + case 'd': + return n * d$1; + + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h$1; + + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m$1; + + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s$1; + + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + + default: + return undefined; + } + } + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtShort$1(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d$1) { + return Math.round(ms / d$1) + 'd'; + } + + if (msAbs >= h$1) { + return Math.round(ms / h$1) + 'h'; + } + + if (msAbs >= m$1) { + return Math.round(ms / m$1) + 'm'; + } + + if (msAbs >= s$1) { + return Math.round(ms / s$1) + 's'; + } + + return ms + 'ms'; + } + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtLong$1(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d$1) { + return plural$1(ms, msAbs, d$1, 'day'); + } + + if (msAbs >= h$1) { + return plural$1(ms, msAbs, h$1, 'hour'); + } + + if (msAbs >= m$1) { + return plural$1(ms, msAbs, m$1, 'minute'); + } + + if (msAbs >= s$1) { + return plural$1(ms, msAbs, s$1, 'second'); + } + + return ms + ' ms'; + } + /** + * Pluralization helper. + */ + + + function plural$1(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + + // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it + + + var arrayBufferNonExtensible = fails(function () { + if (typeof ArrayBuffer == 'function') { + var buffer = new ArrayBuffer(8); + // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe + if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 }); + } + }); + + // eslint-disable-next-line es/no-object-isextensible -- safe + var $isExtensible = Object.isExtensible; + var FAILS_ON_PRIMITIVES$1 = fails(function () { $isExtensible(1); }); + + // `Object.isExtensible` method + // https://tc39.es/ecma262/#sec-object.isextensible + var objectIsExtensible = (FAILS_ON_PRIMITIVES$1 || arrayBufferNonExtensible) ? function isExtensible(it) { + if (!isObject$1(it)) return false; + if (arrayBufferNonExtensible && classofRaw(it) == 'ArrayBuffer') return false; + return $isExtensible ? $isExtensible(it) : true; + } : $isExtensible; + + var freezing = !fails(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); + }); + + var internalMetadata = createCommonjsModule(function (module) { + var defineProperty = objectDefineProperty.f; + + + + + + + var REQUIRED = false; + var METADATA = uid('meta'); + var id = 0; + + var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + id++, // object ID + weakData: {} // weak collections IDs + } }); + }; + + var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject$1(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!hasOwnProperty_1(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!objectIsExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; + }; + + var getWeakData = function (it, create) { + if (!hasOwnProperty_1(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!objectIsExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; + }; + + // add metadata on freeze-family methods calling + var onFreeze = function (it) { + if (freezing && REQUIRED && objectIsExtensible(it) && !hasOwnProperty_1(it, METADATA)) setMetadata(it); + return it; + }; + + var enable = function () { + meta.enable = function () { /* empty */ }; + REQUIRED = true; + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + var splice = functionUncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + + // prevent exposing of metadata key + if (getOwnPropertyNames(test).length) { + objectGetOwnPropertyNames.f = function (it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } return result; + }; + + _export({ target: 'Object', stat: true, forced: true }, { + getOwnPropertyNames: objectGetOwnPropertyNamesExternal.f + }); + } + }; + + var meta = module.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }; + + hiddenKeys$1[METADATA] = true; + }); + + var collection = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global_1[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var uncurriedNativeMethod = functionUncurryThis(NativePrototype[KEY]); + redefine(NativePrototype, KEY, + KEY == 'add' ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject$1(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject$1(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject$1(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + var REPLACE = isForced_1( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })) + ); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + internalMetadata.enable(); + } else if (isForced_1(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + _export({ global: true, forced: Constructor != NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; + }; + + var defineProperty$1 = objectDefineProperty.f; + + + + + + + + + var fastKey = internalMetadata.fastKey; + + + var setInternalState = internalState.set; + var internalStateGetterFor = internalState.getterFor; + + var collectionStrong = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: objectCreate(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!descriptors) that.size = 0; + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (descriptors) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (descriptors) state.size = 0; + else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (descriptors) state.size--; + else that.size--; + } return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = functionBindContext(callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (descriptors) defineProperty$1(Prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == 'keys') return { value: entry.key, done: false }; + if (kind == 'values') return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + setSpecies(CONSTRUCTOR_NAME); + } + }; + + // `Set` constructor + // https://tc39.es/ecma262/#sec-set-objects + collection('Set', function (init) { + return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; + }, collectionStrong); + + // eslint-disable-next-line es/no-object-assign -- safe + var $assign = Object.assign; + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + var defineProperty = Object.defineProperty; + var concat = functionUncurryThis([].concat); + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + var objectAssign = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (descriptors && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet; + }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + while (argumentsLength > index) { + var S = indexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!descriptors || functionCall(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; + } : $assign; + + // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + // eslint-disable-next-line es/no-object-assign -- required for testing + _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { + assign: objectAssign + }); + + var onFreeze = internalMetadata.onFreeze; + + // eslint-disable-next-line es/no-object-freeze -- safe + var $freeze = Object.freeze; + var FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); }); + + // `Object.freeze` method + // https://tc39.es/ecma262/#sec-object.freeze + _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !freezing }, { + freeze: function freeze(it) { + return $freeze && isObject$1(it) ? $freeze(onFreeze(it)) : it; + } + }); + + var browser$2 = true; + + var urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'; + + var customAlphabet = function customAlphabet(alphabet) { + var defaultSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 21; + return function () { + var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultSize; + var id = ''; + var i = size; + + while (i--) { + id += alphabet[Math.random() * alphabet.length | 0]; + } + + return id; + }; + }; + + var nanoid = function nanoid() { + var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 21; + var id = ''; + var i = size; + + while (i--) { + id += urlAlphabet[Math.random() * 64 | 0]; + } + + return id; + }; + + var nonSecure = /*#__PURE__*/Object.freeze({ + __proto__: null, + nanoid: nanoid, + customAlphabet: customAlphabet + }); + + var he = createCommonjsModule(function (module, exports) { + + (function (root) { + // Detect free variables `exports`. + var freeExports = exports; // Detect free variable `module`. + + var freeModule = module && module.exports == freeExports && module; // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root`. + + var freeGlobal = _typeof(commonjsGlobal) == 'object' && commonjsGlobal; + + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + /*--------------------------------------------------------------------------*/ + // All astral symbols. + + + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; // All ASCII symbols (not just printable ASCII) except those listed in the + // first column of the overrides table. + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides + + var regexAsciiWhitelist = /[\x01-\x7F]/g; // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or + // code points listed in the first column of the overrides table on + // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. + + var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; + var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; + var encodeMap = { + '\xAD': 'shy', + "\u200C": 'zwnj', + "\u200D": 'zwj', + "\u200E": 'lrm', + "\u2063": 'ic', + "\u2062": 'it', + "\u2061": 'af', + "\u200F": 'rlm', + "\u200B": 'ZeroWidthSpace', + "\u2060": 'NoBreak', + "\u0311": 'DownBreve', + "\u20DB": 'tdot', + "\u20DC": 'DotDot', + '\t': 'Tab', + '\n': 'NewLine', + "\u2008": 'puncsp', + "\u205F": 'MediumSpace', + "\u2009": 'thinsp', + "\u200A": 'hairsp', + "\u2004": 'emsp13', + "\u2002": 'ensp', + "\u2005": 'emsp14', + "\u2003": 'emsp', + "\u2007": 'numsp', + '\xA0': 'nbsp', + "\u205F\u200A": 'ThickSpace', + "\u203E": 'oline', + '_': 'lowbar', + "\u2010": 'dash', + "\u2013": 'ndash', + "\u2014": 'mdash', + "\u2015": 'horbar', + ',': 'comma', + ';': 'semi', + "\u204F": 'bsemi', + ':': 'colon', + "\u2A74": 'Colone', + '!': 'excl', + '\xA1': 'iexcl', + '?': 'quest', + '\xBF': 'iquest', + '.': 'period', + "\u2025": 'nldr', + "\u2026": 'mldr', + '\xB7': 'middot', + '\'': 'apos', + "\u2018": 'lsquo', + "\u2019": 'rsquo', + "\u201A": 'sbquo', + "\u2039": 'lsaquo', + "\u203A": 'rsaquo', + '"': 'quot', + "\u201C": 'ldquo', + "\u201D": 'rdquo', + "\u201E": 'bdquo', + '\xAB': 'laquo', + '\xBB': 'raquo', + '(': 'lpar', + ')': 'rpar', + '[': 'lsqb', + ']': 'rsqb', + '{': 'lcub', + '}': 'rcub', + "\u2308": 'lceil', + "\u2309": 'rceil', + "\u230A": 'lfloor', + "\u230B": 'rfloor', + "\u2985": 'lopar', + "\u2986": 'ropar', + "\u298B": 'lbrke', + "\u298C": 'rbrke', + "\u298D": 'lbrkslu', + "\u298E": 'rbrksld', + "\u298F": 'lbrksld', + "\u2990": 'rbrkslu', + "\u2991": 'langd', + "\u2992": 'rangd', + "\u2993": 'lparlt', + "\u2994": 'rpargt', + "\u2995": 'gtlPar', + "\u2996": 'ltrPar', + "\u27E6": 'lobrk', + "\u27E7": 'robrk', + "\u27E8": 'lang', + "\u27E9": 'rang', + "\u27EA": 'Lang', + "\u27EB": 'Rang', + "\u27EC": 'loang', + "\u27ED": 'roang', + "\u2772": 'lbbrk', + "\u2773": 'rbbrk', + "\u2016": 'Vert', + '\xA7': 'sect', + '\xB6': 'para', + '@': 'commat', + '*': 'ast', + '/': 'sol', + 'undefined': null, + '&': 'amp', + '#': 'num', + '%': 'percnt', + "\u2030": 'permil', + "\u2031": 'pertenk', + "\u2020": 'dagger', + "\u2021": 'Dagger', + "\u2022": 'bull', + "\u2043": 'hybull', + "\u2032": 'prime', + "\u2033": 'Prime', + "\u2034": 'tprime', + "\u2057": 'qprime', + "\u2035": 'bprime', + "\u2041": 'caret', + '`': 'grave', + '\xB4': 'acute', + "\u02DC": 'tilde', + '^': 'Hat', + '\xAF': 'macr', + "\u02D8": 'breve', + "\u02D9": 'dot', + '\xA8': 'die', + "\u02DA": 'ring', + "\u02DD": 'dblac', + '\xB8': 'cedil', + "\u02DB": 'ogon', + "\u02C6": 'circ', + "\u02C7": 'caron', + '\xB0': 'deg', + '\xA9': 'copy', + '\xAE': 'reg', + "\u2117": 'copysr', + "\u2118": 'wp', + "\u211E": 'rx', + "\u2127": 'mho', + "\u2129": 'iiota', + "\u2190": 'larr', + "\u219A": 'nlarr', + "\u2192": 'rarr', + "\u219B": 'nrarr', + "\u2191": 'uarr', + "\u2193": 'darr', + "\u2194": 'harr', + "\u21AE": 'nharr', + "\u2195": 'varr', + "\u2196": 'nwarr', + "\u2197": 'nearr', + "\u2198": 'searr', + "\u2199": 'swarr', + "\u219D": 'rarrw', + "\u219D\u0338": 'nrarrw', + "\u219E": 'Larr', + "\u219F": 'Uarr', + "\u21A0": 'Rarr', + "\u21A1": 'Darr', + "\u21A2": 'larrtl', + "\u21A3": 'rarrtl', + "\u21A4": 'mapstoleft', + "\u21A5": 'mapstoup', + "\u21A6": 'map', + "\u21A7": 'mapstodown', + "\u21A9": 'larrhk', + "\u21AA": 'rarrhk', + "\u21AB": 'larrlp', + "\u21AC": 'rarrlp', + "\u21AD": 'harrw', + "\u21B0": 'lsh', + "\u21B1": 'rsh', + "\u21B2": 'ldsh', + "\u21B3": 'rdsh', + "\u21B5": 'crarr', + "\u21B6": 'cularr', + "\u21B7": 'curarr', + "\u21BA": 'olarr', + "\u21BB": 'orarr', + "\u21BC": 'lharu', + "\u21BD": 'lhard', + "\u21BE": 'uharr', + "\u21BF": 'uharl', + "\u21C0": 'rharu', + "\u21C1": 'rhard', + "\u21C2": 'dharr', + "\u21C3": 'dharl', + "\u21C4": 'rlarr', + "\u21C5": 'udarr', + "\u21C6": 'lrarr', + "\u21C7": 'llarr', + "\u21C8": 'uuarr', + "\u21C9": 'rrarr', + "\u21CA": 'ddarr', + "\u21CB": 'lrhar', + "\u21CC": 'rlhar', + "\u21D0": 'lArr', + "\u21CD": 'nlArr', + "\u21D1": 'uArr', + "\u21D2": 'rArr', + "\u21CF": 'nrArr', + "\u21D3": 'dArr', + "\u21D4": 'iff', + "\u21CE": 'nhArr', + "\u21D5": 'vArr', + "\u21D6": 'nwArr', + "\u21D7": 'neArr', + "\u21D8": 'seArr', + "\u21D9": 'swArr', + "\u21DA": 'lAarr', + "\u21DB": 'rAarr', + "\u21DD": 'zigrarr', + "\u21E4": 'larrb', + "\u21E5": 'rarrb', + "\u21F5": 'duarr', + "\u21FD": 'loarr', + "\u21FE": 'roarr', + "\u21FF": 'hoarr', + "\u2200": 'forall', + "\u2201": 'comp', + "\u2202": 'part', + "\u2202\u0338": 'npart', + "\u2203": 'exist', + "\u2204": 'nexist', + "\u2205": 'empty', + "\u2207": 'Del', + "\u2208": 'in', + "\u2209": 'notin', + "\u220B": 'ni', + "\u220C": 'notni', + "\u03F6": 'bepsi', + "\u220F": 'prod', + "\u2210": 'coprod', + "\u2211": 'sum', + '+': 'plus', + '\xB1': 'pm', + '\xF7': 'div', + '\xD7': 'times', + '<': 'lt', + "\u226E": 'nlt', + "<\u20D2": 'nvlt', + '=': 'equals', + "\u2260": 'ne', + "=\u20E5": 'bne', + "\u2A75": 'Equal', + '>': 'gt', + "\u226F": 'ngt', + ">\u20D2": 'nvgt', + '\xAC': 'not', + '|': 'vert', + '\xA6': 'brvbar', + "\u2212": 'minus', + "\u2213": 'mp', + "\u2214": 'plusdo', + "\u2044": 'frasl', + "\u2216": 'setmn', + "\u2217": 'lowast', + "\u2218": 'compfn', + "\u221A": 'Sqrt', + "\u221D": 'prop', + "\u221E": 'infin', + "\u221F": 'angrt', + "\u2220": 'ang', + "\u2220\u20D2": 'nang', + "\u2221": 'angmsd', + "\u2222": 'angsph', + "\u2223": 'mid', + "\u2224": 'nmid', + "\u2225": 'par', + "\u2226": 'npar', + "\u2227": 'and', + "\u2228": 'or', + "\u2229": 'cap', + "\u2229\uFE00": 'caps', + "\u222A": 'cup', + "\u222A\uFE00": 'cups', + "\u222B": 'int', + "\u222C": 'Int', + "\u222D": 'tint', + "\u2A0C": 'qint', + "\u222E": 'oint', + "\u222F": 'Conint', + "\u2230": 'Cconint', + "\u2231": 'cwint', + "\u2232": 'cwconint', + "\u2233": 'awconint', + "\u2234": 'there4', + "\u2235": 'becaus', + "\u2236": 'ratio', + "\u2237": 'Colon', + "\u2238": 'minusd', + "\u223A": 'mDDot', + "\u223B": 'homtht', + "\u223C": 'sim', + "\u2241": 'nsim', + "\u223C\u20D2": 'nvsim', + "\u223D": 'bsim', + "\u223D\u0331": 'race', + "\u223E": 'ac', + "\u223E\u0333": 'acE', + "\u223F": 'acd', + "\u2240": 'wr', + "\u2242": 'esim', + "\u2242\u0338": 'nesim', + "\u2243": 'sime', + "\u2244": 'nsime', + "\u2245": 'cong', + "\u2247": 'ncong', + "\u2246": 'simne', + "\u2248": 'ap', + "\u2249": 'nap', + "\u224A": 'ape', + "\u224B": 'apid', + "\u224B\u0338": 'napid', + "\u224C": 'bcong', + "\u224D": 'CupCap', + "\u226D": 'NotCupCap', + "\u224D\u20D2": 'nvap', + "\u224E": 'bump', + "\u224E\u0338": 'nbump', + "\u224F": 'bumpe', + "\u224F\u0338": 'nbumpe', + "\u2250": 'doteq', + "\u2250\u0338": 'nedot', + "\u2251": 'eDot', + "\u2252": 'efDot', + "\u2253": 'erDot', + "\u2254": 'colone', + "\u2255": 'ecolon', + "\u2256": 'ecir', + "\u2257": 'cire', + "\u2259": 'wedgeq', + "\u225A": 'veeeq', + "\u225C": 'trie', + "\u225F": 'equest', + "\u2261": 'equiv', + "\u2262": 'nequiv', + "\u2261\u20E5": 'bnequiv', + "\u2264": 'le', + "\u2270": 'nle', + "\u2264\u20D2": 'nvle', + "\u2265": 'ge', + "\u2271": 'nge', + "\u2265\u20D2": 'nvge', + "\u2266": 'lE', + "\u2266\u0338": 'nlE', + "\u2267": 'gE', + "\u2267\u0338": 'ngE', + "\u2268\uFE00": 'lvnE', + "\u2268": 'lnE', + "\u2269": 'gnE', + "\u2269\uFE00": 'gvnE', + "\u226A": 'll', + "\u226A\u0338": 'nLtv', + "\u226A\u20D2": 'nLt', + "\u226B": 'gg', + "\u226B\u0338": 'nGtv', + "\u226B\u20D2": 'nGt', + "\u226C": 'twixt', + "\u2272": 'lsim', + "\u2274": 'nlsim', + "\u2273": 'gsim', + "\u2275": 'ngsim', + "\u2276": 'lg', + "\u2278": 'ntlg', + "\u2277": 'gl', + "\u2279": 'ntgl', + "\u227A": 'pr', + "\u2280": 'npr', + "\u227B": 'sc', + "\u2281": 'nsc', + "\u227C": 'prcue', + "\u22E0": 'nprcue', + "\u227D": 'sccue', + "\u22E1": 'nsccue', + "\u227E": 'prsim', + "\u227F": 'scsim', + "\u227F\u0338": 'NotSucceedsTilde', + "\u2282": 'sub', + "\u2284": 'nsub', + "\u2282\u20D2": 'vnsub', + "\u2283": 'sup', + "\u2285": 'nsup', + "\u2283\u20D2": 'vnsup', + "\u2286": 'sube', + "\u2288": 'nsube', + "\u2287": 'supe', + "\u2289": 'nsupe', + "\u228A\uFE00": 'vsubne', + "\u228A": 'subne', + "\u228B\uFE00": 'vsupne', + "\u228B": 'supne', + "\u228D": 'cupdot', + "\u228E": 'uplus', + "\u228F": 'sqsub', + "\u228F\u0338": 'NotSquareSubset', + "\u2290": 'sqsup', + "\u2290\u0338": 'NotSquareSuperset', + "\u2291": 'sqsube', + "\u22E2": 'nsqsube', + "\u2292": 'sqsupe', + "\u22E3": 'nsqsupe', + "\u2293": 'sqcap', + "\u2293\uFE00": 'sqcaps', + "\u2294": 'sqcup', + "\u2294\uFE00": 'sqcups', + "\u2295": 'oplus', + "\u2296": 'ominus', + "\u2297": 'otimes', + "\u2298": 'osol', + "\u2299": 'odot', + "\u229A": 'ocir', + "\u229B": 'oast', + "\u229D": 'odash', + "\u229E": 'plusb', + "\u229F": 'minusb', + "\u22A0": 'timesb', + "\u22A1": 'sdotb', + "\u22A2": 'vdash', + "\u22AC": 'nvdash', + "\u22A3": 'dashv', + "\u22A4": 'top', + "\u22A5": 'bot', + "\u22A7": 'models', + "\u22A8": 'vDash', + "\u22AD": 'nvDash', + "\u22A9": 'Vdash', + "\u22AE": 'nVdash', + "\u22AA": 'Vvdash', + "\u22AB": 'VDash', + "\u22AF": 'nVDash', + "\u22B0": 'prurel', + "\u22B2": 'vltri', + "\u22EA": 'nltri', + "\u22B3": 'vrtri', + "\u22EB": 'nrtri', + "\u22B4": 'ltrie', + "\u22EC": 'nltrie', + "\u22B4\u20D2": 'nvltrie', + "\u22B5": 'rtrie', + "\u22ED": 'nrtrie', + "\u22B5\u20D2": 'nvrtrie', + "\u22B6": 'origof', + "\u22B7": 'imof', + "\u22B8": 'mumap', + "\u22B9": 'hercon', + "\u22BA": 'intcal', + "\u22BB": 'veebar', + "\u22BD": 'barvee', + "\u22BE": 'angrtvb', + "\u22BF": 'lrtri', + "\u22C0": 'Wedge', + "\u22C1": 'Vee', + "\u22C2": 'xcap', + "\u22C3": 'xcup', + "\u22C4": 'diam', + "\u22C5": 'sdot', + "\u22C6": 'Star', + "\u22C7": 'divonx', + "\u22C8": 'bowtie', + "\u22C9": 'ltimes', + "\u22CA": 'rtimes', + "\u22CB": 'lthree', + "\u22CC": 'rthree', + "\u22CD": 'bsime', + "\u22CE": 'cuvee', + "\u22CF": 'cuwed', + "\u22D0": 'Sub', + "\u22D1": 'Sup', + "\u22D2": 'Cap', + "\u22D3": 'Cup', + "\u22D4": 'fork', + "\u22D5": 'epar', + "\u22D6": 'ltdot', + "\u22D7": 'gtdot', + "\u22D8": 'Ll', + "\u22D8\u0338": 'nLl', + "\u22D9": 'Gg', + "\u22D9\u0338": 'nGg', + "\u22DA\uFE00": 'lesg', + "\u22DA": 'leg', + "\u22DB": 'gel', + "\u22DB\uFE00": 'gesl', + "\u22DE": 'cuepr', + "\u22DF": 'cuesc', + "\u22E6": 'lnsim', + "\u22E7": 'gnsim', + "\u22E8": 'prnsim', + "\u22E9": 'scnsim', + "\u22EE": 'vellip', + "\u22EF": 'ctdot', + "\u22F0": 'utdot', + "\u22F1": 'dtdot', + "\u22F2": 'disin', + "\u22F3": 'isinsv', + "\u22F4": 'isins', + "\u22F5": 'isindot', + "\u22F5\u0338": 'notindot', + "\u22F6": 'notinvc', + "\u22F7": 'notinvb', + "\u22F9": 'isinE', + "\u22F9\u0338": 'notinE', + "\u22FA": 'nisd', + "\u22FB": 'xnis', + "\u22FC": 'nis', + "\u22FD": 'notnivc', + "\u22FE": 'notnivb', + "\u2305": 'barwed', + "\u2306": 'Barwed', + "\u230C": 'drcrop', + "\u230D": 'dlcrop', + "\u230E": 'urcrop', + "\u230F": 'ulcrop', + "\u2310": 'bnot', + "\u2312": 'profline', + "\u2313": 'profsurf', + "\u2315": 'telrec', + "\u2316": 'target', + "\u231C": 'ulcorn', + "\u231D": 'urcorn', + "\u231E": 'dlcorn', + "\u231F": 'drcorn', + "\u2322": 'frown', + "\u2323": 'smile', + "\u232D": 'cylcty', + "\u232E": 'profalar', + "\u2336": 'topbot', + "\u233D": 'ovbar', + "\u233F": 'solbar', + "\u237C": 'angzarr', + "\u23B0": 'lmoust', + "\u23B1": 'rmoust', + "\u23B4": 'tbrk', + "\u23B5": 'bbrk', + "\u23B6": 'bbrktbrk', + "\u23DC": 'OverParenthesis', + "\u23DD": 'UnderParenthesis', + "\u23DE": 'OverBrace', + "\u23DF": 'UnderBrace', + "\u23E2": 'trpezium', + "\u23E7": 'elinters', + "\u2423": 'blank', + "\u2500": 'boxh', + "\u2502": 'boxv', + "\u250C": 'boxdr', + "\u2510": 'boxdl', + "\u2514": 'boxur', + "\u2518": 'boxul', + "\u251C": 'boxvr', + "\u2524": 'boxvl', + "\u252C": 'boxhd', + "\u2534": 'boxhu', + "\u253C": 'boxvh', + "\u2550": 'boxH', + "\u2551": 'boxV', + "\u2552": 'boxdR', + "\u2553": 'boxDr', + "\u2554": 'boxDR', + "\u2555": 'boxdL', + "\u2556": 'boxDl', + "\u2557": 'boxDL', + "\u2558": 'boxuR', + "\u2559": 'boxUr', + "\u255A": 'boxUR', + "\u255B": 'boxuL', + "\u255C": 'boxUl', + "\u255D": 'boxUL', + "\u255E": 'boxvR', + "\u255F": 'boxVr', + "\u2560": 'boxVR', + "\u2561": 'boxvL', + "\u2562": 'boxVl', + "\u2563": 'boxVL', + "\u2564": 'boxHd', + "\u2565": 'boxhD', + "\u2566": 'boxHD', + "\u2567": 'boxHu', + "\u2568": 'boxhU', + "\u2569": 'boxHU', + "\u256A": 'boxvH', + "\u256B": 'boxVh', + "\u256C": 'boxVH', + "\u2580": 'uhblk', + "\u2584": 'lhblk', + "\u2588": 'block', + "\u2591": 'blk14', + "\u2592": 'blk12', + "\u2593": 'blk34', + "\u25A1": 'squ', + "\u25AA": 'squf', + "\u25AB": 'EmptyVerySmallSquare', + "\u25AD": 'rect', + "\u25AE": 'marker', + "\u25B1": 'fltns', + "\u25B3": 'xutri', + "\u25B4": 'utrif', + "\u25B5": 'utri', + "\u25B8": 'rtrif', + "\u25B9": 'rtri', + "\u25BD": 'xdtri', + "\u25BE": 'dtrif', + "\u25BF": 'dtri', + "\u25C2": 'ltrif', + "\u25C3": 'ltri', + "\u25CA": 'loz', + "\u25CB": 'cir', + "\u25EC": 'tridot', + "\u25EF": 'xcirc', + "\u25F8": 'ultri', + "\u25F9": 'urtri', + "\u25FA": 'lltri', + "\u25FB": 'EmptySmallSquare', + "\u25FC": 'FilledSmallSquare', + "\u2605": 'starf', + "\u2606": 'star', + "\u260E": 'phone', + "\u2640": 'female', + "\u2642": 'male', + "\u2660": 'spades', + "\u2663": 'clubs', + "\u2665": 'hearts', + "\u2666": 'diams', + "\u266A": 'sung', + "\u2713": 'check', + "\u2717": 'cross', + "\u2720": 'malt', + "\u2736": 'sext', + "\u2758": 'VerticalSeparator', + "\u27C8": 'bsolhsub', + "\u27C9": 'suphsol', + "\u27F5": 'xlarr', + "\u27F6": 'xrarr', + "\u27F7": 'xharr', + "\u27F8": 'xlArr', + "\u27F9": 'xrArr', + "\u27FA": 'xhArr', + "\u27FC": 'xmap', + "\u27FF": 'dzigrarr', + "\u2902": 'nvlArr', + "\u2903": 'nvrArr', + "\u2904": 'nvHarr', + "\u2905": 'Map', + "\u290C": 'lbarr', + "\u290D": 'rbarr', + "\u290E": 'lBarr', + "\u290F": 'rBarr', + "\u2910": 'RBarr', + "\u2911": 'DDotrahd', + "\u2912": 'UpArrowBar', + "\u2913": 'DownArrowBar', + "\u2916": 'Rarrtl', + "\u2919": 'latail', + "\u291A": 'ratail', + "\u291B": 'lAtail', + "\u291C": 'rAtail', + "\u291D": 'larrfs', + "\u291E": 'rarrfs', + "\u291F": 'larrbfs', + "\u2920": 'rarrbfs', + "\u2923": 'nwarhk', + "\u2924": 'nearhk', + "\u2925": 'searhk', + "\u2926": 'swarhk', + "\u2927": 'nwnear', + "\u2928": 'toea', + "\u2929": 'tosa', + "\u292A": 'swnwar', + "\u2933": 'rarrc', + "\u2933\u0338": 'nrarrc', + "\u2935": 'cudarrr', + "\u2936": 'ldca', + "\u2937": 'rdca', + "\u2938": 'cudarrl', + "\u2939": 'larrpl', + "\u293C": 'curarrm', + "\u293D": 'cularrp', + "\u2945": 'rarrpl', + "\u2948": 'harrcir', + "\u2949": 'Uarrocir', + "\u294A": 'lurdshar', + "\u294B": 'ldrushar', + "\u294E": 'LeftRightVector', + "\u294F": 'RightUpDownVector', + "\u2950": 'DownLeftRightVector', + "\u2951": 'LeftUpDownVector', + "\u2952": 'LeftVectorBar', + "\u2953": 'RightVectorBar', + "\u2954": 'RightUpVectorBar', + "\u2955": 'RightDownVectorBar', + "\u2956": 'DownLeftVectorBar', + "\u2957": 'DownRightVectorBar', + "\u2958": 'LeftUpVectorBar', + "\u2959": 'LeftDownVectorBar', + "\u295A": 'LeftTeeVector', + "\u295B": 'RightTeeVector', + "\u295C": 'RightUpTeeVector', + "\u295D": 'RightDownTeeVector', + "\u295E": 'DownLeftTeeVector', + "\u295F": 'DownRightTeeVector', + "\u2960": 'LeftUpTeeVector', + "\u2961": 'LeftDownTeeVector', + "\u2962": 'lHar', + "\u2963": 'uHar', + "\u2964": 'rHar', + "\u2965": 'dHar', + "\u2966": 'luruhar', + "\u2967": 'ldrdhar', + "\u2968": 'ruluhar', + "\u2969": 'rdldhar', + "\u296A": 'lharul', + "\u296B": 'llhard', + "\u296C": 'rharul', + "\u296D": 'lrhard', + "\u296E": 'udhar', + "\u296F": 'duhar', + "\u2970": 'RoundImplies', + "\u2971": 'erarr', + "\u2972": 'simrarr', + "\u2973": 'larrsim', + "\u2974": 'rarrsim', + "\u2975": 'rarrap', + "\u2976": 'ltlarr', + "\u2978": 'gtrarr', + "\u2979": 'subrarr', + "\u297B": 'suplarr', + "\u297C": 'lfisht', + "\u297D": 'rfisht', + "\u297E": 'ufisht', + "\u297F": 'dfisht', + "\u299A": 'vzigzag', + "\u299C": 'vangrt', + "\u299D": 'angrtvbd', + "\u29A4": 'ange', + "\u29A5": 'range', + "\u29A6": 'dwangle', + "\u29A7": 'uwangle', + "\u29A8": 'angmsdaa', + "\u29A9": 'angmsdab', + "\u29AA": 'angmsdac', + "\u29AB": 'angmsdad', + "\u29AC": 'angmsdae', + "\u29AD": 'angmsdaf', + "\u29AE": 'angmsdag', + "\u29AF": 'angmsdah', + "\u29B0": 'bemptyv', + "\u29B1": 'demptyv', + "\u29B2": 'cemptyv', + "\u29B3": 'raemptyv', + "\u29B4": 'laemptyv', + "\u29B5": 'ohbar', + "\u29B6": 'omid', + "\u29B7": 'opar', + "\u29B9": 'operp', + "\u29BB": 'olcross', + "\u29BC": 'odsold', + "\u29BE": 'olcir', + "\u29BF": 'ofcir', + "\u29C0": 'olt', + "\u29C1": 'ogt', + "\u29C2": 'cirscir', + "\u29C3": 'cirE', + "\u29C4": 'solb', + "\u29C5": 'bsolb', + "\u29C9": 'boxbox', + "\u29CD": 'trisb', + "\u29CE": 'rtriltri', + "\u29CF": 'LeftTriangleBar', + "\u29CF\u0338": 'NotLeftTriangleBar', + "\u29D0": 'RightTriangleBar', + "\u29D0\u0338": 'NotRightTriangleBar', + "\u29DC": 'iinfin', + "\u29DD": 'infintie', + "\u29DE": 'nvinfin', + "\u29E3": 'eparsl', + "\u29E4": 'smeparsl', + "\u29E5": 'eqvparsl', + "\u29EB": 'lozf', + "\u29F4": 'RuleDelayed', + "\u29F6": 'dsol', + "\u2A00": 'xodot', + "\u2A01": 'xoplus', + "\u2A02": 'xotime', + "\u2A04": 'xuplus', + "\u2A06": 'xsqcup', + "\u2A0D": 'fpartint', + "\u2A10": 'cirfnint', + "\u2A11": 'awint', + "\u2A12": 'rppolint', + "\u2A13": 'scpolint', + "\u2A14": 'npolint', + "\u2A15": 'pointint', + "\u2A16": 'quatint', + "\u2A17": 'intlarhk', + "\u2A22": 'pluscir', + "\u2A23": 'plusacir', + "\u2A24": 'simplus', + "\u2A25": 'plusdu', + "\u2A26": 'plussim', + "\u2A27": 'plustwo', + "\u2A29": 'mcomma', + "\u2A2A": 'minusdu', + "\u2A2D": 'loplus', + "\u2A2E": 'roplus', + "\u2A2F": 'Cross', + "\u2A30": 'timesd', + "\u2A31": 'timesbar', + "\u2A33": 'smashp', + "\u2A34": 'lotimes', + "\u2A35": 'rotimes', + "\u2A36": 'otimesas', + "\u2A37": 'Otimes', + "\u2A38": 'odiv', + "\u2A39": 'triplus', + "\u2A3A": 'triminus', + "\u2A3B": 'tritime', + "\u2A3C": 'iprod', + "\u2A3F": 'amalg', + "\u2A40": 'capdot', + "\u2A42": 'ncup', + "\u2A43": 'ncap', + "\u2A44": 'capand', + "\u2A45": 'cupor', + "\u2A46": 'cupcap', + "\u2A47": 'capcup', + "\u2A48": 'cupbrcap', + "\u2A49": 'capbrcup', + "\u2A4A": 'cupcup', + "\u2A4B": 'capcap', + "\u2A4C": 'ccups', + "\u2A4D": 'ccaps', + "\u2A50": 'ccupssm', + "\u2A53": 'And', + "\u2A54": 'Or', + "\u2A55": 'andand', + "\u2A56": 'oror', + "\u2A57": 'orslope', + "\u2A58": 'andslope', + "\u2A5A": 'andv', + "\u2A5B": 'orv', + "\u2A5C": 'andd', + "\u2A5D": 'ord', + "\u2A5F": 'wedbar', + "\u2A66": 'sdote', + "\u2A6A": 'simdot', + "\u2A6D": 'congdot', + "\u2A6D\u0338": 'ncongdot', + "\u2A6E": 'easter', + "\u2A6F": 'apacir', + "\u2A70": 'apE', + "\u2A70\u0338": 'napE', + "\u2A71": 'eplus', + "\u2A72": 'pluse', + "\u2A73": 'Esim', + "\u2A77": 'eDDot', + "\u2A78": 'equivDD', + "\u2A79": 'ltcir', + "\u2A7A": 'gtcir', + "\u2A7B": 'ltquest', + "\u2A7C": 'gtquest', + "\u2A7D": 'les', + "\u2A7D\u0338": 'nles', + "\u2A7E": 'ges', + "\u2A7E\u0338": 'nges', + "\u2A7F": 'lesdot', + "\u2A80": 'gesdot', + "\u2A81": 'lesdoto', + "\u2A82": 'gesdoto', + "\u2A83": 'lesdotor', + "\u2A84": 'gesdotol', + "\u2A85": 'lap', + "\u2A86": 'gap', + "\u2A87": 'lne', + "\u2A88": 'gne', + "\u2A89": 'lnap', + "\u2A8A": 'gnap', + "\u2A8B": 'lEg', + "\u2A8C": 'gEl', + "\u2A8D": 'lsime', + "\u2A8E": 'gsime', + "\u2A8F": 'lsimg', + "\u2A90": 'gsiml', + "\u2A91": 'lgE', + "\u2A92": 'glE', + "\u2A93": 'lesges', + "\u2A94": 'gesles', + "\u2A95": 'els', + "\u2A96": 'egs', + "\u2A97": 'elsdot', + "\u2A98": 'egsdot', + "\u2A99": 'el', + "\u2A9A": 'eg', + "\u2A9D": 'siml', + "\u2A9E": 'simg', + "\u2A9F": 'simlE', + "\u2AA0": 'simgE', + "\u2AA1": 'LessLess', + "\u2AA1\u0338": 'NotNestedLessLess', + "\u2AA2": 'GreaterGreater', + "\u2AA2\u0338": 'NotNestedGreaterGreater', + "\u2AA4": 'glj', + "\u2AA5": 'gla', + "\u2AA6": 'ltcc', + "\u2AA7": 'gtcc', + "\u2AA8": 'lescc', + "\u2AA9": 'gescc', + "\u2AAA": 'smt', + "\u2AAB": 'lat', + "\u2AAC": 'smte', + "\u2AAC\uFE00": 'smtes', + "\u2AAD": 'late', + "\u2AAD\uFE00": 'lates', + "\u2AAE": 'bumpE', + "\u2AAF": 'pre', + "\u2AAF\u0338": 'npre', + "\u2AB0": 'sce', + "\u2AB0\u0338": 'nsce', + "\u2AB3": 'prE', + "\u2AB4": 'scE', + "\u2AB5": 'prnE', + "\u2AB6": 'scnE', + "\u2AB7": 'prap', + "\u2AB8": 'scap', + "\u2AB9": 'prnap', + "\u2ABA": 'scnap', + "\u2ABB": 'Pr', + "\u2ABC": 'Sc', + "\u2ABD": 'subdot', + "\u2ABE": 'supdot', + "\u2ABF": 'subplus', + "\u2AC0": 'supplus', + "\u2AC1": 'submult', + "\u2AC2": 'supmult', + "\u2AC3": 'subedot', + "\u2AC4": 'supedot', + "\u2AC5": 'subE', + "\u2AC5\u0338": 'nsubE', + "\u2AC6": 'supE', + "\u2AC6\u0338": 'nsupE', + "\u2AC7": 'subsim', + "\u2AC8": 'supsim', + "\u2ACB\uFE00": 'vsubnE', + "\u2ACB": 'subnE', + "\u2ACC\uFE00": 'vsupnE', + "\u2ACC": 'supnE', + "\u2ACF": 'csub', + "\u2AD0": 'csup', + "\u2AD1": 'csube', + "\u2AD2": 'csupe', + "\u2AD3": 'subsup', + "\u2AD4": 'supsub', + "\u2AD5": 'subsub', + "\u2AD6": 'supsup', + "\u2AD7": 'suphsub', + "\u2AD8": 'supdsub', + "\u2AD9": 'forkv', + "\u2ADA": 'topfork', + "\u2ADB": 'mlcp', + "\u2AE4": 'Dashv', + "\u2AE6": 'Vdashl', + "\u2AE7": 'Barv', + "\u2AE8": 'vBar', + "\u2AE9": 'vBarv', + "\u2AEB": 'Vbar', + "\u2AEC": 'Not', + "\u2AED": 'bNot', + "\u2AEE": 'rnmid', + "\u2AEF": 'cirmid', + "\u2AF0": 'midcir', + "\u2AF1": 'topcir', + "\u2AF2": 'nhpar', + "\u2AF3": 'parsim', + "\u2AFD": 'parsl', + "\u2AFD\u20E5": 'nparsl', + "\u266D": 'flat', + "\u266E": 'natur', + "\u266F": 'sharp', + '\xA4': 'curren', + '\xA2': 'cent', + '$': 'dollar', + '\xA3': 'pound', + '\xA5': 'yen', + "\u20AC": 'euro', + '\xB9': 'sup1', + '\xBD': 'half', + "\u2153": 'frac13', + '\xBC': 'frac14', + "\u2155": 'frac15', + "\u2159": 'frac16', + "\u215B": 'frac18', + '\xB2': 'sup2', + "\u2154": 'frac23', + "\u2156": 'frac25', + '\xB3': 'sup3', + '\xBE': 'frac34', + "\u2157": 'frac35', + "\u215C": 'frac38', + "\u2158": 'frac45', + "\u215A": 'frac56', + "\u215D": 'frac58', + "\u215E": 'frac78', + "\uD835\uDCB6": 'ascr', + "\uD835\uDD52": 'aopf', + "\uD835\uDD1E": 'afr', + "\uD835\uDD38": 'Aopf', + "\uD835\uDD04": 'Afr', + "\uD835\uDC9C": 'Ascr', + '\xAA': 'ordf', + '\xE1': 'aacute', + '\xC1': 'Aacute', + '\xE0': 'agrave', + '\xC0': 'Agrave', + "\u0103": 'abreve', + "\u0102": 'Abreve', + '\xE2': 'acirc', + '\xC2': 'Acirc', + '\xE5': 'aring', + '\xC5': 'angst', + '\xE4': 'auml', + '\xC4': 'Auml', + '\xE3': 'atilde', + '\xC3': 'Atilde', + "\u0105": 'aogon', + "\u0104": 'Aogon', + "\u0101": 'amacr', + "\u0100": 'Amacr', + '\xE6': 'aelig', + '\xC6': 'AElig', + "\uD835\uDCB7": 'bscr', + "\uD835\uDD53": 'bopf', + "\uD835\uDD1F": 'bfr', + "\uD835\uDD39": 'Bopf', + "\u212C": 'Bscr', + "\uD835\uDD05": 'Bfr', + "\uD835\uDD20": 'cfr', + "\uD835\uDCB8": 'cscr', + "\uD835\uDD54": 'copf', + "\u212D": 'Cfr', + "\uD835\uDC9E": 'Cscr', + "\u2102": 'Copf', + "\u0107": 'cacute', + "\u0106": 'Cacute', + "\u0109": 'ccirc', + "\u0108": 'Ccirc', + "\u010D": 'ccaron', + "\u010C": 'Ccaron', + "\u010B": 'cdot', + "\u010A": 'Cdot', + '\xE7': 'ccedil', + '\xC7': 'Ccedil', + "\u2105": 'incare', + "\uD835\uDD21": 'dfr', + "\u2146": 'dd', + "\uD835\uDD55": 'dopf', + "\uD835\uDCB9": 'dscr', + "\uD835\uDC9F": 'Dscr', + "\uD835\uDD07": 'Dfr', + "\u2145": 'DD', + "\uD835\uDD3B": 'Dopf', + "\u010F": 'dcaron', + "\u010E": 'Dcaron', + "\u0111": 'dstrok', + "\u0110": 'Dstrok', + '\xF0': 'eth', + '\xD0': 'ETH', + "\u2147": 'ee', + "\u212F": 'escr', + "\uD835\uDD22": 'efr', + "\uD835\uDD56": 'eopf', + "\u2130": 'Escr', + "\uD835\uDD08": 'Efr', + "\uD835\uDD3C": 'Eopf', + '\xE9': 'eacute', + '\xC9': 'Eacute', + '\xE8': 'egrave', + '\xC8': 'Egrave', + '\xEA': 'ecirc', + '\xCA': 'Ecirc', + "\u011B": 'ecaron', + "\u011A": 'Ecaron', + '\xEB': 'euml', + '\xCB': 'Euml', + "\u0117": 'edot', + "\u0116": 'Edot', + "\u0119": 'eogon', + "\u0118": 'Eogon', + "\u0113": 'emacr', + "\u0112": 'Emacr', + "\uD835\uDD23": 'ffr', + "\uD835\uDD57": 'fopf', + "\uD835\uDCBB": 'fscr', + "\uD835\uDD09": 'Ffr', + "\uD835\uDD3D": 'Fopf', + "\u2131": 'Fscr', + "\uFB00": 'fflig', + "\uFB03": 'ffilig', + "\uFB04": 'ffllig', + "\uFB01": 'filig', + 'fj': 'fjlig', + "\uFB02": 'fllig', + "\u0192": 'fnof', + "\u210A": 'gscr', + "\uD835\uDD58": 'gopf', + "\uD835\uDD24": 'gfr', + "\uD835\uDCA2": 'Gscr', + "\uD835\uDD3E": 'Gopf', + "\uD835\uDD0A": 'Gfr', + "\u01F5": 'gacute', + "\u011F": 'gbreve', + "\u011E": 'Gbreve', + "\u011D": 'gcirc', + "\u011C": 'Gcirc', + "\u0121": 'gdot', + "\u0120": 'Gdot', + "\u0122": 'Gcedil', + "\uD835\uDD25": 'hfr', + "\u210E": 'planckh', + "\uD835\uDCBD": 'hscr', + "\uD835\uDD59": 'hopf', + "\u210B": 'Hscr', + "\u210C": 'Hfr', + "\u210D": 'Hopf', + "\u0125": 'hcirc', + "\u0124": 'Hcirc', + "\u210F": 'hbar', + "\u0127": 'hstrok', + "\u0126": 'Hstrok', + "\uD835\uDD5A": 'iopf', + "\uD835\uDD26": 'ifr', + "\uD835\uDCBE": 'iscr', + "\u2148": 'ii', + "\uD835\uDD40": 'Iopf', + "\u2110": 'Iscr', + "\u2111": 'Im', + '\xED': 'iacute', + '\xCD': 'Iacute', + '\xEC': 'igrave', + '\xCC': 'Igrave', + '\xEE': 'icirc', + '\xCE': 'Icirc', + '\xEF': 'iuml', + '\xCF': 'Iuml', + "\u0129": 'itilde', + "\u0128": 'Itilde', + "\u0130": 'Idot', + "\u012F": 'iogon', + "\u012E": 'Iogon', + "\u012B": 'imacr', + "\u012A": 'Imacr', + "\u0133": 'ijlig', + "\u0132": 'IJlig', + "\u0131": 'imath', + "\uD835\uDCBF": 'jscr', + "\uD835\uDD5B": 'jopf', + "\uD835\uDD27": 'jfr', + "\uD835\uDCA5": 'Jscr', + "\uD835\uDD0D": 'Jfr', + "\uD835\uDD41": 'Jopf', + "\u0135": 'jcirc', + "\u0134": 'Jcirc', + "\u0237": 'jmath', + "\uD835\uDD5C": 'kopf', + "\uD835\uDCC0": 'kscr', + "\uD835\uDD28": 'kfr', + "\uD835\uDCA6": 'Kscr', + "\uD835\uDD42": 'Kopf', + "\uD835\uDD0E": 'Kfr', + "\u0137": 'kcedil', + "\u0136": 'Kcedil', + "\uD835\uDD29": 'lfr', + "\uD835\uDCC1": 'lscr', + "\u2113": 'ell', + "\uD835\uDD5D": 'lopf', + "\u2112": 'Lscr', + "\uD835\uDD0F": 'Lfr', + "\uD835\uDD43": 'Lopf', + "\u013A": 'lacute', + "\u0139": 'Lacute', + "\u013E": 'lcaron', + "\u013D": 'Lcaron', + "\u013C": 'lcedil', + "\u013B": 'Lcedil', + "\u0142": 'lstrok', + "\u0141": 'Lstrok', + "\u0140": 'lmidot', + "\u013F": 'Lmidot', + "\uD835\uDD2A": 'mfr', + "\uD835\uDD5E": 'mopf', + "\uD835\uDCC2": 'mscr', + "\uD835\uDD10": 'Mfr', + "\uD835\uDD44": 'Mopf', + "\u2133": 'Mscr', + "\uD835\uDD2B": 'nfr', + "\uD835\uDD5F": 'nopf', + "\uD835\uDCC3": 'nscr', + "\u2115": 'Nopf', + "\uD835\uDCA9": 'Nscr', + "\uD835\uDD11": 'Nfr', + "\u0144": 'nacute', + "\u0143": 'Nacute', + "\u0148": 'ncaron', + "\u0147": 'Ncaron', + '\xF1': 'ntilde', + '\xD1': 'Ntilde', + "\u0146": 'ncedil', + "\u0145": 'Ncedil', + "\u2116": 'numero', + "\u014B": 'eng', + "\u014A": 'ENG', + "\uD835\uDD60": 'oopf', + "\uD835\uDD2C": 'ofr', + "\u2134": 'oscr', + "\uD835\uDCAA": 'Oscr', + "\uD835\uDD12": 'Ofr', + "\uD835\uDD46": 'Oopf', + '\xBA': 'ordm', + '\xF3': 'oacute', + '\xD3': 'Oacute', + '\xF2': 'ograve', + '\xD2': 'Ograve', + '\xF4': 'ocirc', + '\xD4': 'Ocirc', + '\xF6': 'ouml', + '\xD6': 'Ouml', + "\u0151": 'odblac', + "\u0150": 'Odblac', + '\xF5': 'otilde', + '\xD5': 'Otilde', + '\xF8': 'oslash', + '\xD8': 'Oslash', + "\u014D": 'omacr', + "\u014C": 'Omacr', + "\u0153": 'oelig', + "\u0152": 'OElig', + "\uD835\uDD2D": 'pfr', + "\uD835\uDCC5": 'pscr', + "\uD835\uDD61": 'popf', + "\u2119": 'Popf', + "\uD835\uDD13": 'Pfr', + "\uD835\uDCAB": 'Pscr', + "\uD835\uDD62": 'qopf', + "\uD835\uDD2E": 'qfr', + "\uD835\uDCC6": 'qscr', + "\uD835\uDCAC": 'Qscr', + "\uD835\uDD14": 'Qfr', + "\u211A": 'Qopf', + "\u0138": 'kgreen', + "\uD835\uDD2F": 'rfr', + "\uD835\uDD63": 'ropf', + "\uD835\uDCC7": 'rscr', + "\u211B": 'Rscr', + "\u211C": 'Re', + "\u211D": 'Ropf', + "\u0155": 'racute', + "\u0154": 'Racute', + "\u0159": 'rcaron', + "\u0158": 'Rcaron', + "\u0157": 'rcedil', + "\u0156": 'Rcedil', + "\uD835\uDD64": 'sopf', + "\uD835\uDCC8": 'sscr', + "\uD835\uDD30": 'sfr', + "\uD835\uDD4A": 'Sopf', + "\uD835\uDD16": 'Sfr', + "\uD835\uDCAE": 'Sscr', + "\u24C8": 'oS', + "\u015B": 'sacute', + "\u015A": 'Sacute', + "\u015D": 'scirc', + "\u015C": 'Scirc', + "\u0161": 'scaron', + "\u0160": 'Scaron', + "\u015F": 'scedil', + "\u015E": 'Scedil', + '\xDF': 'szlig', + "\uD835\uDD31": 'tfr', + "\uD835\uDCC9": 'tscr', + "\uD835\uDD65": 'topf', + "\uD835\uDCAF": 'Tscr', + "\uD835\uDD17": 'Tfr', + "\uD835\uDD4B": 'Topf', + "\u0165": 'tcaron', + "\u0164": 'Tcaron', + "\u0163": 'tcedil', + "\u0162": 'Tcedil', + "\u2122": 'trade', + "\u0167": 'tstrok', + "\u0166": 'Tstrok', + "\uD835\uDCCA": 'uscr', + "\uD835\uDD66": 'uopf', + "\uD835\uDD32": 'ufr', + "\uD835\uDD4C": 'Uopf', + "\uD835\uDD18": 'Ufr', + "\uD835\uDCB0": 'Uscr', + '\xFA': 'uacute', + '\xDA': 'Uacute', + '\xF9': 'ugrave', + '\xD9': 'Ugrave', + "\u016D": 'ubreve', + "\u016C": 'Ubreve', + '\xFB': 'ucirc', + '\xDB': 'Ucirc', + "\u016F": 'uring', + "\u016E": 'Uring', + '\xFC': 'uuml', + '\xDC': 'Uuml', + "\u0171": 'udblac', + "\u0170": 'Udblac', + "\u0169": 'utilde', + "\u0168": 'Utilde', + "\u0173": 'uogon', + "\u0172": 'Uogon', + "\u016B": 'umacr', + "\u016A": 'Umacr', + "\uD835\uDD33": 'vfr', + "\uD835\uDD67": 'vopf', + "\uD835\uDCCB": 'vscr', + "\uD835\uDD19": 'Vfr', + "\uD835\uDD4D": 'Vopf', + "\uD835\uDCB1": 'Vscr', + "\uD835\uDD68": 'wopf', + "\uD835\uDCCC": 'wscr', + "\uD835\uDD34": 'wfr', + "\uD835\uDCB2": 'Wscr', + "\uD835\uDD4E": 'Wopf', + "\uD835\uDD1A": 'Wfr', + "\u0175": 'wcirc', + "\u0174": 'Wcirc', + "\uD835\uDD35": 'xfr', + "\uD835\uDCCD": 'xscr', + "\uD835\uDD69": 'xopf', + "\uD835\uDD4F": 'Xopf', + "\uD835\uDD1B": 'Xfr', + "\uD835\uDCB3": 'Xscr', + "\uD835\uDD36": 'yfr', + "\uD835\uDCCE": 'yscr', + "\uD835\uDD6A": 'yopf', + "\uD835\uDCB4": 'Yscr', + "\uD835\uDD1C": 'Yfr', + "\uD835\uDD50": 'Yopf', + '\xFD': 'yacute', + '\xDD': 'Yacute', + "\u0177": 'ycirc', + "\u0176": 'Ycirc', + '\xFF': 'yuml', + "\u0178": 'Yuml', + "\uD835\uDCCF": 'zscr', + "\uD835\uDD37": 'zfr', + "\uD835\uDD6B": 'zopf', + "\u2128": 'Zfr', + "\u2124": 'Zopf', + "\uD835\uDCB5": 'Zscr', + "\u017A": 'zacute', + "\u0179": 'Zacute', + "\u017E": 'zcaron', + "\u017D": 'Zcaron', + "\u017C": 'zdot', + "\u017B": 'Zdot', + "\u01B5": 'imped', + '\xFE': 'thorn', + '\xDE': 'THORN', + "\u0149": 'napos', + "\u03B1": 'alpha', + "\u0391": 'Alpha', + "\u03B2": 'beta', + "\u0392": 'Beta', + "\u03B3": 'gamma', + "\u0393": 'Gamma', + "\u03B4": 'delta', + "\u0394": 'Delta', + "\u03B5": 'epsi', + "\u03F5": 'epsiv', + "\u0395": 'Epsilon', + "\u03DD": 'gammad', + "\u03DC": 'Gammad', + "\u03B6": 'zeta', + "\u0396": 'Zeta', + "\u03B7": 'eta', + "\u0397": 'Eta', + "\u03B8": 'theta', + "\u03D1": 'thetav', + "\u0398": 'Theta', + "\u03B9": 'iota', + "\u0399": 'Iota', + "\u03BA": 'kappa', + "\u03F0": 'kappav', + "\u039A": 'Kappa', + "\u03BB": 'lambda', + "\u039B": 'Lambda', + "\u03BC": 'mu', + '\xB5': 'micro', + "\u039C": 'Mu', + "\u03BD": 'nu', + "\u039D": 'Nu', + "\u03BE": 'xi', + "\u039E": 'Xi', + "\u03BF": 'omicron', + "\u039F": 'Omicron', + "\u03C0": 'pi', + "\u03D6": 'piv', + "\u03A0": 'Pi', + "\u03C1": 'rho', + "\u03F1": 'rhov', + "\u03A1": 'Rho', + "\u03C3": 'sigma', + "\u03A3": 'Sigma', + "\u03C2": 'sigmaf', + "\u03C4": 'tau', + "\u03A4": 'Tau', + "\u03C5": 'upsi', + "\u03A5": 'Upsilon', + "\u03D2": 'Upsi', + "\u03C6": 'phi', + "\u03D5": 'phiv', + "\u03A6": 'Phi', + "\u03C7": 'chi', + "\u03A7": 'Chi', + "\u03C8": 'psi', + "\u03A8": 'Psi', + "\u03C9": 'omega', + "\u03A9": 'ohm', + "\u0430": 'acy', + "\u0410": 'Acy', + "\u0431": 'bcy', + "\u0411": 'Bcy', + "\u0432": 'vcy', + "\u0412": 'Vcy', + "\u0433": 'gcy', + "\u0413": 'Gcy', + "\u0453": 'gjcy', + "\u0403": 'GJcy', + "\u0434": 'dcy', + "\u0414": 'Dcy', + "\u0452": 'djcy', + "\u0402": 'DJcy', + "\u0435": 'iecy', + "\u0415": 'IEcy', + "\u0451": 'iocy', + "\u0401": 'IOcy', + "\u0454": 'jukcy', + "\u0404": 'Jukcy', + "\u0436": 'zhcy', + "\u0416": 'ZHcy', + "\u0437": 'zcy', + "\u0417": 'Zcy', + "\u0455": 'dscy', + "\u0405": 'DScy', + "\u0438": 'icy', + "\u0418": 'Icy', + "\u0456": 'iukcy', + "\u0406": 'Iukcy', + "\u0457": 'yicy', + "\u0407": 'YIcy', + "\u0439": 'jcy', + "\u0419": 'Jcy', + "\u0458": 'jsercy', + "\u0408": 'Jsercy', + "\u043A": 'kcy', + "\u041A": 'Kcy', + "\u045C": 'kjcy', + "\u040C": 'KJcy', + "\u043B": 'lcy', + "\u041B": 'Lcy', + "\u0459": 'ljcy', + "\u0409": 'LJcy', + "\u043C": 'mcy', + "\u041C": 'Mcy', + "\u043D": 'ncy', + "\u041D": 'Ncy', + "\u045A": 'njcy', + "\u040A": 'NJcy', + "\u043E": 'ocy', + "\u041E": 'Ocy', + "\u043F": 'pcy', + "\u041F": 'Pcy', + "\u0440": 'rcy', + "\u0420": 'Rcy', + "\u0441": 'scy', + "\u0421": 'Scy', + "\u0442": 'tcy', + "\u0422": 'Tcy', + "\u045B": 'tshcy', + "\u040B": 'TSHcy', + "\u0443": 'ucy', + "\u0423": 'Ucy', + "\u045E": 'ubrcy', + "\u040E": 'Ubrcy', + "\u0444": 'fcy', + "\u0424": 'Fcy', + "\u0445": 'khcy', + "\u0425": 'KHcy', + "\u0446": 'tscy', + "\u0426": 'TScy', + "\u0447": 'chcy', + "\u0427": 'CHcy', + "\u045F": 'dzcy', + "\u040F": 'DZcy', + "\u0448": 'shcy', + "\u0428": 'SHcy', + "\u0449": 'shchcy', + "\u0429": 'SHCHcy', + "\u044A": 'hardcy', + "\u042A": 'HARDcy', + "\u044B": 'ycy', + "\u042B": 'Ycy', + "\u044C": 'softcy', + "\u042C": 'SOFTcy', + "\u044D": 'ecy', + "\u042D": 'Ecy', + "\u044E": 'yucy', + "\u042E": 'YUcy', + "\u044F": 'yacy', + "\u042F": 'YAcy', + "\u2135": 'aleph', + "\u2136": 'beth', + "\u2137": 'gimel', + "\u2138": 'daleth' + }; + var regexEscape = /["&'<>`]/g; + var escapeMap = { + '"': '"', + '&': '&', + '\'': ''', + '<': '<', + // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the + // following is not strictly necessary unless it’s part of a tag or an + // unquoted attribute value. We’re only escaping it to support those + // situations, and for XML support. + '>': '>', + // In Internet Explorer ≤ 8, the backtick character can be used + // to break out of (un)quoted attribute values or HTML comments. + // See http://html5sec.org/#102, http://html5sec.org/#108, and + // http://html5sec.org/#133. + '`': '`' + }; + var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; + var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; + var decodeMap = { + 'aacute': '\xE1', + 'Aacute': '\xC1', + 'abreve': "\u0103", + 'Abreve': "\u0102", + 'ac': "\u223E", + 'acd': "\u223F", + 'acE': "\u223E\u0333", + 'acirc': '\xE2', + 'Acirc': '\xC2', + 'acute': '\xB4', + 'acy': "\u0430", + 'Acy': "\u0410", + 'aelig': '\xE6', + 'AElig': '\xC6', + 'af': "\u2061", + 'afr': "\uD835\uDD1E", + 'Afr': "\uD835\uDD04", + 'agrave': '\xE0', + 'Agrave': '\xC0', + 'alefsym': "\u2135", + 'aleph': "\u2135", + 'alpha': "\u03B1", + 'Alpha': "\u0391", + 'amacr': "\u0101", + 'Amacr': "\u0100", + 'amalg': "\u2A3F", + 'amp': '&', + 'AMP': '&', + 'and': "\u2227", + 'And': "\u2A53", + 'andand': "\u2A55", + 'andd': "\u2A5C", + 'andslope': "\u2A58", + 'andv': "\u2A5A", + 'ang': "\u2220", + 'ange': "\u29A4", + 'angle': "\u2220", + 'angmsd': "\u2221", + 'angmsdaa': "\u29A8", + 'angmsdab': "\u29A9", + 'angmsdac': "\u29AA", + 'angmsdad': "\u29AB", + 'angmsdae': "\u29AC", + 'angmsdaf': "\u29AD", + 'angmsdag': "\u29AE", + 'angmsdah': "\u29AF", + 'angrt': "\u221F", + 'angrtvb': "\u22BE", + 'angrtvbd': "\u299D", + 'angsph': "\u2222", + 'angst': '\xC5', + 'angzarr': "\u237C", + 'aogon': "\u0105", + 'Aogon': "\u0104", + 'aopf': "\uD835\uDD52", + 'Aopf': "\uD835\uDD38", + 'ap': "\u2248", + 'apacir': "\u2A6F", + 'ape': "\u224A", + 'apE': "\u2A70", + 'apid': "\u224B", + 'apos': '\'', + 'ApplyFunction': "\u2061", + 'approx': "\u2248", + 'approxeq': "\u224A", + 'aring': '\xE5', + 'Aring': '\xC5', + 'ascr': "\uD835\uDCB6", + 'Ascr': "\uD835\uDC9C", + 'Assign': "\u2254", + 'ast': '*', + 'asymp': "\u2248", + 'asympeq': "\u224D", + 'atilde': '\xE3', + 'Atilde': '\xC3', + 'auml': '\xE4', + 'Auml': '\xC4', + 'awconint': "\u2233", + 'awint': "\u2A11", + 'backcong': "\u224C", + 'backepsilon': "\u03F6", + 'backprime': "\u2035", + 'backsim': "\u223D", + 'backsimeq': "\u22CD", + 'Backslash': "\u2216", + 'Barv': "\u2AE7", + 'barvee': "\u22BD", + 'barwed': "\u2305", + 'Barwed': "\u2306", + 'barwedge': "\u2305", + 'bbrk': "\u23B5", + 'bbrktbrk': "\u23B6", + 'bcong': "\u224C", + 'bcy': "\u0431", + 'Bcy': "\u0411", + 'bdquo': "\u201E", + 'becaus': "\u2235", + 'because': "\u2235", + 'Because': "\u2235", + 'bemptyv': "\u29B0", + 'bepsi': "\u03F6", + 'bernou': "\u212C", + 'Bernoullis': "\u212C", + 'beta': "\u03B2", + 'Beta': "\u0392", + 'beth': "\u2136", + 'between': "\u226C", + 'bfr': "\uD835\uDD1F", + 'Bfr': "\uD835\uDD05", + 'bigcap': "\u22C2", + 'bigcirc': "\u25EF", + 'bigcup': "\u22C3", + 'bigodot': "\u2A00", + 'bigoplus': "\u2A01", + 'bigotimes': "\u2A02", + 'bigsqcup': "\u2A06", + 'bigstar': "\u2605", + 'bigtriangledown': "\u25BD", + 'bigtriangleup': "\u25B3", + 'biguplus': "\u2A04", + 'bigvee': "\u22C1", + 'bigwedge': "\u22C0", + 'bkarow': "\u290D", + 'blacklozenge': "\u29EB", + 'blacksquare': "\u25AA", + 'blacktriangle': "\u25B4", + 'blacktriangledown': "\u25BE", + 'blacktriangleleft': "\u25C2", + 'blacktriangleright': "\u25B8", + 'blank': "\u2423", + 'blk12': "\u2592", + 'blk14': "\u2591", + 'blk34': "\u2593", + 'block': "\u2588", + 'bne': "=\u20E5", + 'bnequiv': "\u2261\u20E5", + 'bnot': "\u2310", + 'bNot': "\u2AED", + 'bopf': "\uD835\uDD53", + 'Bopf': "\uD835\uDD39", + 'bot': "\u22A5", + 'bottom': "\u22A5", + 'bowtie': "\u22C8", + 'boxbox': "\u29C9", + 'boxdl': "\u2510", + 'boxdL': "\u2555", + 'boxDl': "\u2556", + 'boxDL': "\u2557", + 'boxdr': "\u250C", + 'boxdR': "\u2552", + 'boxDr': "\u2553", + 'boxDR': "\u2554", + 'boxh': "\u2500", + 'boxH': "\u2550", + 'boxhd': "\u252C", + 'boxhD': "\u2565", + 'boxHd': "\u2564", + 'boxHD': "\u2566", + 'boxhu': "\u2534", + 'boxhU': "\u2568", + 'boxHu': "\u2567", + 'boxHU': "\u2569", + 'boxminus': "\u229F", + 'boxplus': "\u229E", + 'boxtimes': "\u22A0", + 'boxul': "\u2518", + 'boxuL': "\u255B", + 'boxUl': "\u255C", + 'boxUL': "\u255D", + 'boxur': "\u2514", + 'boxuR': "\u2558", + 'boxUr': "\u2559", + 'boxUR': "\u255A", + 'boxv': "\u2502", + 'boxV': "\u2551", + 'boxvh': "\u253C", + 'boxvH': "\u256A", + 'boxVh': "\u256B", + 'boxVH': "\u256C", + 'boxvl': "\u2524", + 'boxvL': "\u2561", + 'boxVl': "\u2562", + 'boxVL': "\u2563", + 'boxvr': "\u251C", + 'boxvR': "\u255E", + 'boxVr': "\u255F", + 'boxVR': "\u2560", + 'bprime': "\u2035", + 'breve': "\u02D8", + 'Breve': "\u02D8", + 'brvbar': '\xA6', + 'bscr': "\uD835\uDCB7", + 'Bscr': "\u212C", + 'bsemi': "\u204F", + 'bsim': "\u223D", + 'bsime': "\u22CD", + 'bsol': '\\', + 'bsolb': "\u29C5", + 'bsolhsub': "\u27C8", + 'bull': "\u2022", + 'bullet': "\u2022", + 'bump': "\u224E", + 'bumpe': "\u224F", + 'bumpE': "\u2AAE", + 'bumpeq': "\u224F", + 'Bumpeq': "\u224E", + 'cacute': "\u0107", + 'Cacute': "\u0106", + 'cap': "\u2229", + 'Cap': "\u22D2", + 'capand': "\u2A44", + 'capbrcup': "\u2A49", + 'capcap': "\u2A4B", + 'capcup': "\u2A47", + 'capdot': "\u2A40", + 'CapitalDifferentialD': "\u2145", + 'caps': "\u2229\uFE00", + 'caret': "\u2041", + 'caron': "\u02C7", + 'Cayleys': "\u212D", + 'ccaps': "\u2A4D", + 'ccaron': "\u010D", + 'Ccaron': "\u010C", + 'ccedil': '\xE7', + 'Ccedil': '\xC7', + 'ccirc': "\u0109", + 'Ccirc': "\u0108", + 'Cconint': "\u2230", + 'ccups': "\u2A4C", + 'ccupssm': "\u2A50", + 'cdot': "\u010B", + 'Cdot': "\u010A", + 'cedil': '\xB8', + 'Cedilla': '\xB8', + 'cemptyv': "\u29B2", + 'cent': '\xA2', + 'centerdot': '\xB7', + 'CenterDot': '\xB7', + 'cfr': "\uD835\uDD20", + 'Cfr': "\u212D", + 'chcy': "\u0447", + 'CHcy': "\u0427", + 'check': "\u2713", + 'checkmark': "\u2713", + 'chi': "\u03C7", + 'Chi': "\u03A7", + 'cir': "\u25CB", + 'circ': "\u02C6", + 'circeq': "\u2257", + 'circlearrowleft': "\u21BA", + 'circlearrowright': "\u21BB", + 'circledast': "\u229B", + 'circledcirc': "\u229A", + 'circleddash': "\u229D", + 'CircleDot': "\u2299", + 'circledR': '\xAE', + 'circledS': "\u24C8", + 'CircleMinus': "\u2296", + 'CirclePlus': "\u2295", + 'CircleTimes': "\u2297", + 'cire': "\u2257", + 'cirE': "\u29C3", + 'cirfnint': "\u2A10", + 'cirmid': "\u2AEF", + 'cirscir': "\u29C2", + 'ClockwiseContourIntegral': "\u2232", + 'CloseCurlyDoubleQuote': "\u201D", + 'CloseCurlyQuote': "\u2019", + 'clubs': "\u2663", + 'clubsuit': "\u2663", + 'colon': ':', + 'Colon': "\u2237", + 'colone': "\u2254", + 'Colone': "\u2A74", + 'coloneq': "\u2254", + 'comma': ',', + 'commat': '@', + 'comp': "\u2201", + 'compfn': "\u2218", + 'complement': "\u2201", + 'complexes': "\u2102", + 'cong': "\u2245", + 'congdot': "\u2A6D", + 'Congruent': "\u2261", + 'conint': "\u222E", + 'Conint': "\u222F", + 'ContourIntegral': "\u222E", + 'copf': "\uD835\uDD54", + 'Copf': "\u2102", + 'coprod': "\u2210", + 'Coproduct': "\u2210", + 'copy': '\xA9', + 'COPY': '\xA9', + 'copysr': "\u2117", + 'CounterClockwiseContourIntegral': "\u2233", + 'crarr': "\u21B5", + 'cross': "\u2717", + 'Cross': "\u2A2F", + 'cscr': "\uD835\uDCB8", + 'Cscr': "\uD835\uDC9E", + 'csub': "\u2ACF", + 'csube': "\u2AD1", + 'csup': "\u2AD0", + 'csupe': "\u2AD2", + 'ctdot': "\u22EF", + 'cudarrl': "\u2938", + 'cudarrr': "\u2935", + 'cuepr': "\u22DE", + 'cuesc': "\u22DF", + 'cularr': "\u21B6", + 'cularrp': "\u293D", + 'cup': "\u222A", + 'Cup': "\u22D3", + 'cupbrcap': "\u2A48", + 'cupcap': "\u2A46", + 'CupCap': "\u224D", + 'cupcup': "\u2A4A", + 'cupdot': "\u228D", + 'cupor': "\u2A45", + 'cups': "\u222A\uFE00", + 'curarr': "\u21B7", + 'curarrm': "\u293C", + 'curlyeqprec': "\u22DE", + 'curlyeqsucc': "\u22DF", + 'curlyvee': "\u22CE", + 'curlywedge': "\u22CF", + 'curren': '\xA4', + 'curvearrowleft': "\u21B6", + 'curvearrowright': "\u21B7", + 'cuvee': "\u22CE", + 'cuwed': "\u22CF", + 'cwconint': "\u2232", + 'cwint': "\u2231", + 'cylcty': "\u232D", + 'dagger': "\u2020", + 'Dagger': "\u2021", + 'daleth': "\u2138", + 'darr': "\u2193", + 'dArr': "\u21D3", + 'Darr': "\u21A1", + 'dash': "\u2010", + 'dashv': "\u22A3", + 'Dashv': "\u2AE4", + 'dbkarow': "\u290F", + 'dblac': "\u02DD", + 'dcaron': "\u010F", + 'Dcaron': "\u010E", + 'dcy': "\u0434", + 'Dcy': "\u0414", + 'dd': "\u2146", + 'DD': "\u2145", + 'ddagger': "\u2021", + 'ddarr': "\u21CA", + 'DDotrahd': "\u2911", + 'ddotseq': "\u2A77", + 'deg': '\xB0', + 'Del': "\u2207", + 'delta': "\u03B4", + 'Delta': "\u0394", + 'demptyv': "\u29B1", + 'dfisht': "\u297F", + 'dfr': "\uD835\uDD21", + 'Dfr': "\uD835\uDD07", + 'dHar': "\u2965", + 'dharl': "\u21C3", + 'dharr': "\u21C2", + 'DiacriticalAcute': '\xB4', + 'DiacriticalDot': "\u02D9", + 'DiacriticalDoubleAcute': "\u02DD", + 'DiacriticalGrave': '`', + 'DiacriticalTilde': "\u02DC", + 'diam': "\u22C4", + 'diamond': "\u22C4", + 'Diamond': "\u22C4", + 'diamondsuit': "\u2666", + 'diams': "\u2666", + 'die': '\xA8', + 'DifferentialD': "\u2146", + 'digamma': "\u03DD", + 'disin': "\u22F2", + 'div': '\xF7', + 'divide': '\xF7', + 'divideontimes': "\u22C7", + 'divonx': "\u22C7", + 'djcy': "\u0452", + 'DJcy': "\u0402", + 'dlcorn': "\u231E", + 'dlcrop': "\u230D", + 'dollar': '$', + 'dopf': "\uD835\uDD55", + 'Dopf': "\uD835\uDD3B", + 'dot': "\u02D9", + 'Dot': '\xA8', + 'DotDot': "\u20DC", + 'doteq': "\u2250", + 'doteqdot': "\u2251", + 'DotEqual': "\u2250", + 'dotminus': "\u2238", + 'dotplus': "\u2214", + 'dotsquare': "\u22A1", + 'doublebarwedge': "\u2306", + 'DoubleContourIntegral': "\u222F", + 'DoubleDot': '\xA8', + 'DoubleDownArrow': "\u21D3", + 'DoubleLeftArrow': "\u21D0", + 'DoubleLeftRightArrow': "\u21D4", + 'DoubleLeftTee': "\u2AE4", + 'DoubleLongLeftArrow': "\u27F8", + 'DoubleLongLeftRightArrow': "\u27FA", + 'DoubleLongRightArrow': "\u27F9", + 'DoubleRightArrow': "\u21D2", + 'DoubleRightTee': "\u22A8", + 'DoubleUpArrow': "\u21D1", + 'DoubleUpDownArrow': "\u21D5", + 'DoubleVerticalBar': "\u2225", + 'downarrow': "\u2193", + 'Downarrow': "\u21D3", + 'DownArrow': "\u2193", + 'DownArrowBar': "\u2913", + 'DownArrowUpArrow': "\u21F5", + 'DownBreve': "\u0311", + 'downdownarrows': "\u21CA", + 'downharpoonleft': "\u21C3", + 'downharpoonright': "\u21C2", + 'DownLeftRightVector': "\u2950", + 'DownLeftTeeVector': "\u295E", + 'DownLeftVector': "\u21BD", + 'DownLeftVectorBar': "\u2956", + 'DownRightTeeVector': "\u295F", + 'DownRightVector': "\u21C1", + 'DownRightVectorBar': "\u2957", + 'DownTee': "\u22A4", + 'DownTeeArrow': "\u21A7", + 'drbkarow': "\u2910", + 'drcorn': "\u231F", + 'drcrop': "\u230C", + 'dscr': "\uD835\uDCB9", + 'Dscr': "\uD835\uDC9F", + 'dscy': "\u0455", + 'DScy': "\u0405", + 'dsol': "\u29F6", + 'dstrok': "\u0111", + 'Dstrok': "\u0110", + 'dtdot': "\u22F1", + 'dtri': "\u25BF", + 'dtrif': "\u25BE", + 'duarr': "\u21F5", + 'duhar': "\u296F", + 'dwangle': "\u29A6", + 'dzcy': "\u045F", + 'DZcy': "\u040F", + 'dzigrarr': "\u27FF", + 'eacute': '\xE9', + 'Eacute': '\xC9', + 'easter': "\u2A6E", + 'ecaron': "\u011B", + 'Ecaron': "\u011A", + 'ecir': "\u2256", + 'ecirc': '\xEA', + 'Ecirc': '\xCA', + 'ecolon': "\u2255", + 'ecy': "\u044D", + 'Ecy': "\u042D", + 'eDDot': "\u2A77", + 'edot': "\u0117", + 'eDot': "\u2251", + 'Edot': "\u0116", + 'ee': "\u2147", + 'efDot': "\u2252", + 'efr': "\uD835\uDD22", + 'Efr': "\uD835\uDD08", + 'eg': "\u2A9A", + 'egrave': '\xE8', + 'Egrave': '\xC8', + 'egs': "\u2A96", + 'egsdot': "\u2A98", + 'el': "\u2A99", + 'Element': "\u2208", + 'elinters': "\u23E7", + 'ell': "\u2113", + 'els': "\u2A95", + 'elsdot': "\u2A97", + 'emacr': "\u0113", + 'Emacr': "\u0112", + 'empty': "\u2205", + 'emptyset': "\u2205", + 'EmptySmallSquare': "\u25FB", + 'emptyv': "\u2205", + 'EmptyVerySmallSquare': "\u25AB", + 'emsp': "\u2003", + 'emsp13': "\u2004", + 'emsp14': "\u2005", + 'eng': "\u014B", + 'ENG': "\u014A", + 'ensp': "\u2002", + 'eogon': "\u0119", + 'Eogon': "\u0118", + 'eopf': "\uD835\uDD56", + 'Eopf': "\uD835\uDD3C", + 'epar': "\u22D5", + 'eparsl': "\u29E3", + 'eplus': "\u2A71", + 'epsi': "\u03B5", + 'epsilon': "\u03B5", + 'Epsilon': "\u0395", + 'epsiv': "\u03F5", + 'eqcirc': "\u2256", + 'eqcolon': "\u2255", + 'eqsim': "\u2242", + 'eqslantgtr': "\u2A96", + 'eqslantless': "\u2A95", + 'Equal': "\u2A75", + 'equals': '=', + 'EqualTilde': "\u2242", + 'equest': "\u225F", + 'Equilibrium': "\u21CC", + 'equiv': "\u2261", + 'equivDD': "\u2A78", + 'eqvparsl': "\u29E5", + 'erarr': "\u2971", + 'erDot': "\u2253", + 'escr': "\u212F", + 'Escr': "\u2130", + 'esdot': "\u2250", + 'esim': "\u2242", + 'Esim': "\u2A73", + 'eta': "\u03B7", + 'Eta': "\u0397", + 'eth': '\xF0', + 'ETH': '\xD0', + 'euml': '\xEB', + 'Euml': '\xCB', + 'euro': "\u20AC", + 'excl': '!', + 'exist': "\u2203", + 'Exists': "\u2203", + 'expectation': "\u2130", + 'exponentiale': "\u2147", + 'ExponentialE': "\u2147", + 'fallingdotseq': "\u2252", + 'fcy': "\u0444", + 'Fcy': "\u0424", + 'female': "\u2640", + 'ffilig': "\uFB03", + 'fflig': "\uFB00", + 'ffllig': "\uFB04", + 'ffr': "\uD835\uDD23", + 'Ffr': "\uD835\uDD09", + 'filig': "\uFB01", + 'FilledSmallSquare': "\u25FC", + 'FilledVerySmallSquare': "\u25AA", + 'fjlig': 'fj', + 'flat': "\u266D", + 'fllig': "\uFB02", + 'fltns': "\u25B1", + 'fnof': "\u0192", + 'fopf': "\uD835\uDD57", + 'Fopf': "\uD835\uDD3D", + 'forall': "\u2200", + 'ForAll': "\u2200", + 'fork': "\u22D4", + 'forkv': "\u2AD9", + 'Fouriertrf': "\u2131", + 'fpartint': "\u2A0D", + 'frac12': '\xBD', + 'frac13': "\u2153", + 'frac14': '\xBC', + 'frac15': "\u2155", + 'frac16': "\u2159", + 'frac18': "\u215B", + 'frac23': "\u2154", + 'frac25': "\u2156", + 'frac34': '\xBE', + 'frac35': "\u2157", + 'frac38': "\u215C", + 'frac45': "\u2158", + 'frac56': "\u215A", + 'frac58': "\u215D", + 'frac78': "\u215E", + 'frasl': "\u2044", + 'frown': "\u2322", + 'fscr': "\uD835\uDCBB", + 'Fscr': "\u2131", + 'gacute': "\u01F5", + 'gamma': "\u03B3", + 'Gamma': "\u0393", + 'gammad': "\u03DD", + 'Gammad': "\u03DC", + 'gap': "\u2A86", + 'gbreve': "\u011F", + 'Gbreve': "\u011E", + 'Gcedil': "\u0122", + 'gcirc': "\u011D", + 'Gcirc': "\u011C", + 'gcy': "\u0433", + 'Gcy': "\u0413", + 'gdot': "\u0121", + 'Gdot': "\u0120", + 'ge': "\u2265", + 'gE': "\u2267", + 'gel': "\u22DB", + 'gEl': "\u2A8C", + 'geq': "\u2265", + 'geqq': "\u2267", + 'geqslant': "\u2A7E", + 'ges': "\u2A7E", + 'gescc': "\u2AA9", + 'gesdot': "\u2A80", + 'gesdoto': "\u2A82", + 'gesdotol': "\u2A84", + 'gesl': "\u22DB\uFE00", + 'gesles': "\u2A94", + 'gfr': "\uD835\uDD24", + 'Gfr': "\uD835\uDD0A", + 'gg': "\u226B", + 'Gg': "\u22D9", + 'ggg': "\u22D9", + 'gimel': "\u2137", + 'gjcy': "\u0453", + 'GJcy': "\u0403", + 'gl': "\u2277", + 'gla': "\u2AA5", + 'glE': "\u2A92", + 'glj': "\u2AA4", + 'gnap': "\u2A8A", + 'gnapprox': "\u2A8A", + 'gne': "\u2A88", + 'gnE': "\u2269", + 'gneq': "\u2A88", + 'gneqq': "\u2269", + 'gnsim': "\u22E7", + 'gopf': "\uD835\uDD58", + 'Gopf': "\uD835\uDD3E", + 'grave': '`', + 'GreaterEqual': "\u2265", + 'GreaterEqualLess': "\u22DB", + 'GreaterFullEqual': "\u2267", + 'GreaterGreater': "\u2AA2", + 'GreaterLess': "\u2277", + 'GreaterSlantEqual': "\u2A7E", + 'GreaterTilde': "\u2273", + 'gscr': "\u210A", + 'Gscr': "\uD835\uDCA2", + 'gsim': "\u2273", + 'gsime': "\u2A8E", + 'gsiml': "\u2A90", + 'gt': '>', + 'Gt': "\u226B", + 'GT': '>', + 'gtcc': "\u2AA7", + 'gtcir': "\u2A7A", + 'gtdot': "\u22D7", + 'gtlPar': "\u2995", + 'gtquest': "\u2A7C", + 'gtrapprox': "\u2A86", + 'gtrarr': "\u2978", + 'gtrdot': "\u22D7", + 'gtreqless': "\u22DB", + 'gtreqqless': "\u2A8C", + 'gtrless': "\u2277", + 'gtrsim': "\u2273", + 'gvertneqq': "\u2269\uFE00", + 'gvnE': "\u2269\uFE00", + 'Hacek': "\u02C7", + 'hairsp': "\u200A", + 'half': '\xBD', + 'hamilt': "\u210B", + 'hardcy': "\u044A", + 'HARDcy': "\u042A", + 'harr': "\u2194", + 'hArr': "\u21D4", + 'harrcir': "\u2948", + 'harrw': "\u21AD", + 'Hat': '^', + 'hbar': "\u210F", + 'hcirc': "\u0125", + 'Hcirc': "\u0124", + 'hearts': "\u2665", + 'heartsuit': "\u2665", + 'hellip': "\u2026", + 'hercon': "\u22B9", + 'hfr': "\uD835\uDD25", + 'Hfr': "\u210C", + 'HilbertSpace': "\u210B", + 'hksearow': "\u2925", + 'hkswarow': "\u2926", + 'hoarr': "\u21FF", + 'homtht': "\u223B", + 'hookleftarrow': "\u21A9", + 'hookrightarrow': "\u21AA", + 'hopf': "\uD835\uDD59", + 'Hopf': "\u210D", + 'horbar': "\u2015", + 'HorizontalLine': "\u2500", + 'hscr': "\uD835\uDCBD", + 'Hscr': "\u210B", + 'hslash': "\u210F", + 'hstrok': "\u0127", + 'Hstrok': "\u0126", + 'HumpDownHump': "\u224E", + 'HumpEqual': "\u224F", + 'hybull': "\u2043", + 'hyphen': "\u2010", + 'iacute': '\xED', + 'Iacute': '\xCD', + 'ic': "\u2063", + 'icirc': '\xEE', + 'Icirc': '\xCE', + 'icy': "\u0438", + 'Icy': "\u0418", + 'Idot': "\u0130", + 'iecy': "\u0435", + 'IEcy': "\u0415", + 'iexcl': '\xA1', + 'iff': "\u21D4", + 'ifr': "\uD835\uDD26", + 'Ifr': "\u2111", + 'igrave': '\xEC', + 'Igrave': '\xCC', + 'ii': "\u2148", + 'iiiint': "\u2A0C", + 'iiint': "\u222D", + 'iinfin': "\u29DC", + 'iiota': "\u2129", + 'ijlig': "\u0133", + 'IJlig': "\u0132", + 'Im': "\u2111", + 'imacr': "\u012B", + 'Imacr': "\u012A", + 'image': "\u2111", + 'ImaginaryI': "\u2148", + 'imagline': "\u2110", + 'imagpart': "\u2111", + 'imath': "\u0131", + 'imof': "\u22B7", + 'imped': "\u01B5", + 'Implies': "\u21D2", + 'in': "\u2208", + 'incare': "\u2105", + 'infin': "\u221E", + 'infintie': "\u29DD", + 'inodot': "\u0131", + 'int': "\u222B", + 'Int': "\u222C", + 'intcal': "\u22BA", + 'integers': "\u2124", + 'Integral': "\u222B", + 'intercal': "\u22BA", + 'Intersection': "\u22C2", + 'intlarhk': "\u2A17", + 'intprod': "\u2A3C", + 'InvisibleComma': "\u2063", + 'InvisibleTimes': "\u2062", + 'iocy': "\u0451", + 'IOcy': "\u0401", + 'iogon': "\u012F", + 'Iogon': "\u012E", + 'iopf': "\uD835\uDD5A", + 'Iopf': "\uD835\uDD40", + 'iota': "\u03B9", + 'Iota': "\u0399", + 'iprod': "\u2A3C", + 'iquest': '\xBF', + 'iscr': "\uD835\uDCBE", + 'Iscr': "\u2110", + 'isin': "\u2208", + 'isindot': "\u22F5", + 'isinE': "\u22F9", + 'isins': "\u22F4", + 'isinsv': "\u22F3", + 'isinv': "\u2208", + 'it': "\u2062", + 'itilde': "\u0129", + 'Itilde': "\u0128", + 'iukcy': "\u0456", + 'Iukcy': "\u0406", + 'iuml': '\xEF', + 'Iuml': '\xCF', + 'jcirc': "\u0135", + 'Jcirc': "\u0134", + 'jcy': "\u0439", + 'Jcy': "\u0419", + 'jfr': "\uD835\uDD27", + 'Jfr': "\uD835\uDD0D", + 'jmath': "\u0237", + 'jopf': "\uD835\uDD5B", + 'Jopf': "\uD835\uDD41", + 'jscr': "\uD835\uDCBF", + 'Jscr': "\uD835\uDCA5", + 'jsercy': "\u0458", + 'Jsercy': "\u0408", + 'jukcy': "\u0454", + 'Jukcy': "\u0404", + 'kappa': "\u03BA", + 'Kappa': "\u039A", + 'kappav': "\u03F0", + 'kcedil': "\u0137", + 'Kcedil': "\u0136", + 'kcy': "\u043A", + 'Kcy': "\u041A", + 'kfr': "\uD835\uDD28", + 'Kfr': "\uD835\uDD0E", + 'kgreen': "\u0138", + 'khcy': "\u0445", + 'KHcy': "\u0425", + 'kjcy': "\u045C", + 'KJcy': "\u040C", + 'kopf': "\uD835\uDD5C", + 'Kopf': "\uD835\uDD42", + 'kscr': "\uD835\uDCC0", + 'Kscr': "\uD835\uDCA6", + 'lAarr': "\u21DA", + 'lacute': "\u013A", + 'Lacute': "\u0139", + 'laemptyv': "\u29B4", + 'lagran': "\u2112", + 'lambda': "\u03BB", + 'Lambda': "\u039B", + 'lang': "\u27E8", + 'Lang': "\u27EA", + 'langd': "\u2991", + 'langle': "\u27E8", + 'lap': "\u2A85", + 'Laplacetrf': "\u2112", + 'laquo': '\xAB', + 'larr': "\u2190", + 'lArr': "\u21D0", + 'Larr': "\u219E", + 'larrb': "\u21E4", + 'larrbfs': "\u291F", + 'larrfs': "\u291D", + 'larrhk': "\u21A9", + 'larrlp': "\u21AB", + 'larrpl': "\u2939", + 'larrsim': "\u2973", + 'larrtl': "\u21A2", + 'lat': "\u2AAB", + 'latail': "\u2919", + 'lAtail': "\u291B", + 'late': "\u2AAD", + 'lates': "\u2AAD\uFE00", + 'lbarr': "\u290C", + 'lBarr': "\u290E", + 'lbbrk': "\u2772", + 'lbrace': '{', + 'lbrack': '[', + 'lbrke': "\u298B", + 'lbrksld': "\u298F", + 'lbrkslu': "\u298D", + 'lcaron': "\u013E", + 'Lcaron': "\u013D", + 'lcedil': "\u013C", + 'Lcedil': "\u013B", + 'lceil': "\u2308", + 'lcub': '{', + 'lcy': "\u043B", + 'Lcy': "\u041B", + 'ldca': "\u2936", + 'ldquo': "\u201C", + 'ldquor': "\u201E", + 'ldrdhar': "\u2967", + 'ldrushar': "\u294B", + 'ldsh': "\u21B2", + 'le': "\u2264", + 'lE': "\u2266", + 'LeftAngleBracket': "\u27E8", + 'leftarrow': "\u2190", + 'Leftarrow': "\u21D0", + 'LeftArrow': "\u2190", + 'LeftArrowBar': "\u21E4", + 'LeftArrowRightArrow': "\u21C6", + 'leftarrowtail': "\u21A2", + 'LeftCeiling': "\u2308", + 'LeftDoubleBracket': "\u27E6", + 'LeftDownTeeVector': "\u2961", + 'LeftDownVector': "\u21C3", + 'LeftDownVectorBar': "\u2959", + 'LeftFloor': "\u230A", + 'leftharpoondown': "\u21BD", + 'leftharpoonup': "\u21BC", + 'leftleftarrows': "\u21C7", + 'leftrightarrow': "\u2194", + 'Leftrightarrow': "\u21D4", + 'LeftRightArrow': "\u2194", + 'leftrightarrows': "\u21C6", + 'leftrightharpoons': "\u21CB", + 'leftrightsquigarrow': "\u21AD", + 'LeftRightVector': "\u294E", + 'LeftTee': "\u22A3", + 'LeftTeeArrow': "\u21A4", + 'LeftTeeVector': "\u295A", + 'leftthreetimes': "\u22CB", + 'LeftTriangle': "\u22B2", + 'LeftTriangleBar': "\u29CF", + 'LeftTriangleEqual': "\u22B4", + 'LeftUpDownVector': "\u2951", + 'LeftUpTeeVector': "\u2960", + 'LeftUpVector': "\u21BF", + 'LeftUpVectorBar': "\u2958", + 'LeftVector': "\u21BC", + 'LeftVectorBar': "\u2952", + 'leg': "\u22DA", + 'lEg': "\u2A8B", + 'leq': "\u2264", + 'leqq': "\u2266", + 'leqslant': "\u2A7D", + 'les': "\u2A7D", + 'lescc': "\u2AA8", + 'lesdot': "\u2A7F", + 'lesdoto': "\u2A81", + 'lesdotor': "\u2A83", + 'lesg': "\u22DA\uFE00", + 'lesges': "\u2A93", + 'lessapprox': "\u2A85", + 'lessdot': "\u22D6", + 'lesseqgtr': "\u22DA", + 'lesseqqgtr': "\u2A8B", + 'LessEqualGreater': "\u22DA", + 'LessFullEqual': "\u2266", + 'LessGreater': "\u2276", + 'lessgtr': "\u2276", + 'LessLess': "\u2AA1", + 'lesssim': "\u2272", + 'LessSlantEqual': "\u2A7D", + 'LessTilde': "\u2272", + 'lfisht': "\u297C", + 'lfloor': "\u230A", + 'lfr': "\uD835\uDD29", + 'Lfr': "\uD835\uDD0F", + 'lg': "\u2276", + 'lgE': "\u2A91", + 'lHar': "\u2962", + 'lhard': "\u21BD", + 'lharu': "\u21BC", + 'lharul': "\u296A", + 'lhblk': "\u2584", + 'ljcy': "\u0459", + 'LJcy': "\u0409", + 'll': "\u226A", + 'Ll': "\u22D8", + 'llarr': "\u21C7", + 'llcorner': "\u231E", + 'Lleftarrow': "\u21DA", + 'llhard': "\u296B", + 'lltri': "\u25FA", + 'lmidot': "\u0140", + 'Lmidot': "\u013F", + 'lmoust': "\u23B0", + 'lmoustache': "\u23B0", + 'lnap': "\u2A89", + 'lnapprox': "\u2A89", + 'lne': "\u2A87", + 'lnE': "\u2268", + 'lneq': "\u2A87", + 'lneqq': "\u2268", + 'lnsim': "\u22E6", + 'loang': "\u27EC", + 'loarr': "\u21FD", + 'lobrk': "\u27E6", + 'longleftarrow': "\u27F5", + 'Longleftarrow': "\u27F8", + 'LongLeftArrow': "\u27F5", + 'longleftrightarrow': "\u27F7", + 'Longleftrightarrow': "\u27FA", + 'LongLeftRightArrow': "\u27F7", + 'longmapsto': "\u27FC", + 'longrightarrow': "\u27F6", + 'Longrightarrow': "\u27F9", + 'LongRightArrow': "\u27F6", + 'looparrowleft': "\u21AB", + 'looparrowright': "\u21AC", + 'lopar': "\u2985", + 'lopf': "\uD835\uDD5D", + 'Lopf': "\uD835\uDD43", + 'loplus': "\u2A2D", + 'lotimes': "\u2A34", + 'lowast': "\u2217", + 'lowbar': '_', + 'LowerLeftArrow': "\u2199", + 'LowerRightArrow': "\u2198", + 'loz': "\u25CA", + 'lozenge': "\u25CA", + 'lozf': "\u29EB", + 'lpar': '(', + 'lparlt': "\u2993", + 'lrarr': "\u21C6", + 'lrcorner': "\u231F", + 'lrhar': "\u21CB", + 'lrhard': "\u296D", + 'lrm': "\u200E", + 'lrtri': "\u22BF", + 'lsaquo': "\u2039", + 'lscr': "\uD835\uDCC1", + 'Lscr': "\u2112", + 'lsh': "\u21B0", + 'Lsh': "\u21B0", + 'lsim': "\u2272", + 'lsime': "\u2A8D", + 'lsimg': "\u2A8F", + 'lsqb': '[', + 'lsquo': "\u2018", + 'lsquor': "\u201A", + 'lstrok': "\u0142", + 'Lstrok': "\u0141", + 'lt': '<', + 'Lt': "\u226A", + 'LT': '<', + 'ltcc': "\u2AA6", + 'ltcir': "\u2A79", + 'ltdot': "\u22D6", + 'lthree': "\u22CB", + 'ltimes': "\u22C9", + 'ltlarr': "\u2976", + 'ltquest': "\u2A7B", + 'ltri': "\u25C3", + 'ltrie': "\u22B4", + 'ltrif': "\u25C2", + 'ltrPar': "\u2996", + 'lurdshar': "\u294A", + 'luruhar': "\u2966", + 'lvertneqq': "\u2268\uFE00", + 'lvnE': "\u2268\uFE00", + 'macr': '\xAF', + 'male': "\u2642", + 'malt': "\u2720", + 'maltese': "\u2720", + 'map': "\u21A6", + 'Map': "\u2905", + 'mapsto': "\u21A6", + 'mapstodown': "\u21A7", + 'mapstoleft': "\u21A4", + 'mapstoup': "\u21A5", + 'marker': "\u25AE", + 'mcomma': "\u2A29", + 'mcy': "\u043C", + 'Mcy': "\u041C", + 'mdash': "\u2014", + 'mDDot': "\u223A", + 'measuredangle': "\u2221", + 'MediumSpace': "\u205F", + 'Mellintrf': "\u2133", + 'mfr': "\uD835\uDD2A", + 'Mfr': "\uD835\uDD10", + 'mho': "\u2127", + 'micro': '\xB5', + 'mid': "\u2223", + 'midast': '*', + 'midcir': "\u2AF0", + 'middot': '\xB7', + 'minus': "\u2212", + 'minusb': "\u229F", + 'minusd': "\u2238", + 'minusdu': "\u2A2A", + 'MinusPlus': "\u2213", + 'mlcp': "\u2ADB", + 'mldr': "\u2026", + 'mnplus': "\u2213", + 'models': "\u22A7", + 'mopf': "\uD835\uDD5E", + 'Mopf': "\uD835\uDD44", + 'mp': "\u2213", + 'mscr': "\uD835\uDCC2", + 'Mscr': "\u2133", + 'mstpos': "\u223E", + 'mu': "\u03BC", + 'Mu': "\u039C", + 'multimap': "\u22B8", + 'mumap': "\u22B8", + 'nabla': "\u2207", + 'nacute': "\u0144", + 'Nacute': "\u0143", + 'nang': "\u2220\u20D2", + 'nap': "\u2249", + 'napE': "\u2A70\u0338", + 'napid': "\u224B\u0338", + 'napos': "\u0149", + 'napprox': "\u2249", + 'natur': "\u266E", + 'natural': "\u266E", + 'naturals': "\u2115", + 'nbsp': '\xA0', + 'nbump': "\u224E\u0338", + 'nbumpe': "\u224F\u0338", + 'ncap': "\u2A43", + 'ncaron': "\u0148", + 'Ncaron': "\u0147", + 'ncedil': "\u0146", + 'Ncedil': "\u0145", + 'ncong': "\u2247", + 'ncongdot': "\u2A6D\u0338", + 'ncup': "\u2A42", + 'ncy': "\u043D", + 'Ncy': "\u041D", + 'ndash': "\u2013", + 'ne': "\u2260", + 'nearhk': "\u2924", + 'nearr': "\u2197", + 'neArr': "\u21D7", + 'nearrow': "\u2197", + 'nedot': "\u2250\u0338", + 'NegativeMediumSpace': "\u200B", + 'NegativeThickSpace': "\u200B", + 'NegativeThinSpace': "\u200B", + 'NegativeVeryThinSpace': "\u200B", + 'nequiv': "\u2262", + 'nesear': "\u2928", + 'nesim': "\u2242\u0338", + 'NestedGreaterGreater': "\u226B", + 'NestedLessLess': "\u226A", + 'NewLine': '\n', + 'nexist': "\u2204", + 'nexists': "\u2204", + 'nfr': "\uD835\uDD2B", + 'Nfr': "\uD835\uDD11", + 'nge': "\u2271", + 'ngE': "\u2267\u0338", + 'ngeq': "\u2271", + 'ngeqq': "\u2267\u0338", + 'ngeqslant': "\u2A7E\u0338", + 'nges': "\u2A7E\u0338", + 'nGg': "\u22D9\u0338", + 'ngsim': "\u2275", + 'ngt': "\u226F", + 'nGt': "\u226B\u20D2", + 'ngtr': "\u226F", + 'nGtv': "\u226B\u0338", + 'nharr': "\u21AE", + 'nhArr': "\u21CE", + 'nhpar': "\u2AF2", + 'ni': "\u220B", + 'nis': "\u22FC", + 'nisd': "\u22FA", + 'niv': "\u220B", + 'njcy': "\u045A", + 'NJcy': "\u040A", + 'nlarr': "\u219A", + 'nlArr': "\u21CD", + 'nldr': "\u2025", + 'nle': "\u2270", + 'nlE': "\u2266\u0338", + 'nleftarrow': "\u219A", + 'nLeftarrow': "\u21CD", + 'nleftrightarrow': "\u21AE", + 'nLeftrightarrow': "\u21CE", + 'nleq': "\u2270", + 'nleqq': "\u2266\u0338", + 'nleqslant': "\u2A7D\u0338", + 'nles': "\u2A7D\u0338", + 'nless': "\u226E", + 'nLl': "\u22D8\u0338", + 'nlsim': "\u2274", + 'nlt': "\u226E", + 'nLt': "\u226A\u20D2", + 'nltri': "\u22EA", + 'nltrie': "\u22EC", + 'nLtv': "\u226A\u0338", + 'nmid': "\u2224", + 'NoBreak': "\u2060", + 'NonBreakingSpace': '\xA0', + 'nopf': "\uD835\uDD5F", + 'Nopf': "\u2115", + 'not': '\xAC', + 'Not': "\u2AEC", + 'NotCongruent': "\u2262", + 'NotCupCap': "\u226D", + 'NotDoubleVerticalBar': "\u2226", + 'NotElement': "\u2209", + 'NotEqual': "\u2260", + 'NotEqualTilde': "\u2242\u0338", + 'NotExists': "\u2204", + 'NotGreater': "\u226F", + 'NotGreaterEqual': "\u2271", + 'NotGreaterFullEqual': "\u2267\u0338", + 'NotGreaterGreater': "\u226B\u0338", + 'NotGreaterLess': "\u2279", + 'NotGreaterSlantEqual': "\u2A7E\u0338", + 'NotGreaterTilde': "\u2275", + 'NotHumpDownHump': "\u224E\u0338", + 'NotHumpEqual': "\u224F\u0338", + 'notin': "\u2209", + 'notindot': "\u22F5\u0338", + 'notinE': "\u22F9\u0338", + 'notinva': "\u2209", + 'notinvb': "\u22F7", + 'notinvc': "\u22F6", + 'NotLeftTriangle': "\u22EA", + 'NotLeftTriangleBar': "\u29CF\u0338", + 'NotLeftTriangleEqual': "\u22EC", + 'NotLess': "\u226E", + 'NotLessEqual': "\u2270", + 'NotLessGreater': "\u2278", + 'NotLessLess': "\u226A\u0338", + 'NotLessSlantEqual': "\u2A7D\u0338", + 'NotLessTilde': "\u2274", + 'NotNestedGreaterGreater': "\u2AA2\u0338", + 'NotNestedLessLess': "\u2AA1\u0338", + 'notni': "\u220C", + 'notniva': "\u220C", + 'notnivb': "\u22FE", + 'notnivc': "\u22FD", + 'NotPrecedes': "\u2280", + 'NotPrecedesEqual': "\u2AAF\u0338", + 'NotPrecedesSlantEqual': "\u22E0", + 'NotReverseElement': "\u220C", + 'NotRightTriangle': "\u22EB", + 'NotRightTriangleBar': "\u29D0\u0338", + 'NotRightTriangleEqual': "\u22ED", + 'NotSquareSubset': "\u228F\u0338", + 'NotSquareSubsetEqual': "\u22E2", + 'NotSquareSuperset': "\u2290\u0338", + 'NotSquareSupersetEqual': "\u22E3", + 'NotSubset': "\u2282\u20D2", + 'NotSubsetEqual': "\u2288", + 'NotSucceeds': "\u2281", + 'NotSucceedsEqual': "\u2AB0\u0338", + 'NotSucceedsSlantEqual': "\u22E1", + 'NotSucceedsTilde': "\u227F\u0338", + 'NotSuperset': "\u2283\u20D2", + 'NotSupersetEqual': "\u2289", + 'NotTilde': "\u2241", + 'NotTildeEqual': "\u2244", + 'NotTildeFullEqual': "\u2247", + 'NotTildeTilde': "\u2249", + 'NotVerticalBar': "\u2224", + 'npar': "\u2226", + 'nparallel': "\u2226", + 'nparsl': "\u2AFD\u20E5", + 'npart': "\u2202\u0338", + 'npolint': "\u2A14", + 'npr': "\u2280", + 'nprcue': "\u22E0", + 'npre': "\u2AAF\u0338", + 'nprec': "\u2280", + 'npreceq': "\u2AAF\u0338", + 'nrarr': "\u219B", + 'nrArr': "\u21CF", + 'nrarrc': "\u2933\u0338", + 'nrarrw': "\u219D\u0338", + 'nrightarrow': "\u219B", + 'nRightarrow': "\u21CF", + 'nrtri': "\u22EB", + 'nrtrie': "\u22ED", + 'nsc': "\u2281", + 'nsccue': "\u22E1", + 'nsce': "\u2AB0\u0338", + 'nscr': "\uD835\uDCC3", + 'Nscr': "\uD835\uDCA9", + 'nshortmid': "\u2224", + 'nshortparallel': "\u2226", + 'nsim': "\u2241", + 'nsime': "\u2244", + 'nsimeq': "\u2244", + 'nsmid': "\u2224", + 'nspar': "\u2226", + 'nsqsube': "\u22E2", + 'nsqsupe': "\u22E3", + 'nsub': "\u2284", + 'nsube': "\u2288", + 'nsubE': "\u2AC5\u0338", + 'nsubset': "\u2282\u20D2", + 'nsubseteq': "\u2288", + 'nsubseteqq': "\u2AC5\u0338", + 'nsucc': "\u2281", + 'nsucceq': "\u2AB0\u0338", + 'nsup': "\u2285", + 'nsupe': "\u2289", + 'nsupE': "\u2AC6\u0338", + 'nsupset': "\u2283\u20D2", + 'nsupseteq': "\u2289", + 'nsupseteqq': "\u2AC6\u0338", + 'ntgl': "\u2279", + 'ntilde': '\xF1', + 'Ntilde': '\xD1', + 'ntlg': "\u2278", + 'ntriangleleft': "\u22EA", + 'ntrianglelefteq': "\u22EC", + 'ntriangleright': "\u22EB", + 'ntrianglerighteq': "\u22ED", + 'nu': "\u03BD", + 'Nu': "\u039D", + 'num': '#', + 'numero': "\u2116", + 'numsp': "\u2007", + 'nvap': "\u224D\u20D2", + 'nvdash': "\u22AC", + 'nvDash': "\u22AD", + 'nVdash': "\u22AE", + 'nVDash': "\u22AF", + 'nvge': "\u2265\u20D2", + 'nvgt': ">\u20D2", + 'nvHarr': "\u2904", + 'nvinfin': "\u29DE", + 'nvlArr': "\u2902", + 'nvle': "\u2264\u20D2", + 'nvlt': "<\u20D2", + 'nvltrie': "\u22B4\u20D2", + 'nvrArr': "\u2903", + 'nvrtrie': "\u22B5\u20D2", + 'nvsim': "\u223C\u20D2", + 'nwarhk': "\u2923", + 'nwarr': "\u2196", + 'nwArr': "\u21D6", + 'nwarrow': "\u2196", + 'nwnear': "\u2927", + 'oacute': '\xF3', + 'Oacute': '\xD3', + 'oast': "\u229B", + 'ocir': "\u229A", + 'ocirc': '\xF4', + 'Ocirc': '\xD4', + 'ocy': "\u043E", + 'Ocy': "\u041E", + 'odash': "\u229D", + 'odblac': "\u0151", + 'Odblac': "\u0150", + 'odiv': "\u2A38", + 'odot': "\u2299", + 'odsold': "\u29BC", + 'oelig': "\u0153", + 'OElig': "\u0152", + 'ofcir': "\u29BF", + 'ofr': "\uD835\uDD2C", + 'Ofr': "\uD835\uDD12", + 'ogon': "\u02DB", + 'ograve': '\xF2', + 'Ograve': '\xD2', + 'ogt': "\u29C1", + 'ohbar': "\u29B5", + 'ohm': "\u03A9", + 'oint': "\u222E", + 'olarr': "\u21BA", + 'olcir': "\u29BE", + 'olcross': "\u29BB", + 'oline': "\u203E", + 'olt': "\u29C0", + 'omacr': "\u014D", + 'Omacr': "\u014C", + 'omega': "\u03C9", + 'Omega': "\u03A9", + 'omicron': "\u03BF", + 'Omicron': "\u039F", + 'omid': "\u29B6", + 'ominus': "\u2296", + 'oopf': "\uD835\uDD60", + 'Oopf': "\uD835\uDD46", + 'opar': "\u29B7", + 'OpenCurlyDoubleQuote': "\u201C", + 'OpenCurlyQuote': "\u2018", + 'operp': "\u29B9", + 'oplus': "\u2295", + 'or': "\u2228", + 'Or': "\u2A54", + 'orarr': "\u21BB", + 'ord': "\u2A5D", + 'order': "\u2134", + 'orderof': "\u2134", + 'ordf': '\xAA', + 'ordm': '\xBA', + 'origof': "\u22B6", + 'oror': "\u2A56", + 'orslope': "\u2A57", + 'orv': "\u2A5B", + 'oS': "\u24C8", + 'oscr': "\u2134", + 'Oscr': "\uD835\uDCAA", + 'oslash': '\xF8', + 'Oslash': '\xD8', + 'osol': "\u2298", + 'otilde': '\xF5', + 'Otilde': '\xD5', + 'otimes': "\u2297", + 'Otimes': "\u2A37", + 'otimesas': "\u2A36", + 'ouml': '\xF6', + 'Ouml': '\xD6', + 'ovbar': "\u233D", + 'OverBar': "\u203E", + 'OverBrace': "\u23DE", + 'OverBracket': "\u23B4", + 'OverParenthesis': "\u23DC", + 'par': "\u2225", + 'para': '\xB6', + 'parallel': "\u2225", + 'parsim': "\u2AF3", + 'parsl': "\u2AFD", + 'part': "\u2202", + 'PartialD': "\u2202", + 'pcy': "\u043F", + 'Pcy': "\u041F", + 'percnt': '%', + 'period': '.', + 'permil': "\u2030", + 'perp': "\u22A5", + 'pertenk': "\u2031", + 'pfr': "\uD835\uDD2D", + 'Pfr': "\uD835\uDD13", + 'phi': "\u03C6", + 'Phi': "\u03A6", + 'phiv': "\u03D5", + 'phmmat': "\u2133", + 'phone': "\u260E", + 'pi': "\u03C0", + 'Pi': "\u03A0", + 'pitchfork': "\u22D4", + 'piv': "\u03D6", + 'planck': "\u210F", + 'planckh': "\u210E", + 'plankv': "\u210F", + 'plus': '+', + 'plusacir': "\u2A23", + 'plusb': "\u229E", + 'pluscir': "\u2A22", + 'plusdo': "\u2214", + 'plusdu': "\u2A25", + 'pluse': "\u2A72", + 'PlusMinus': '\xB1', + 'plusmn': '\xB1', + 'plussim': "\u2A26", + 'plustwo': "\u2A27", + 'pm': '\xB1', + 'Poincareplane': "\u210C", + 'pointint': "\u2A15", + 'popf': "\uD835\uDD61", + 'Popf': "\u2119", + 'pound': '\xA3', + 'pr': "\u227A", + 'Pr': "\u2ABB", + 'prap': "\u2AB7", + 'prcue': "\u227C", + 'pre': "\u2AAF", + 'prE': "\u2AB3", + 'prec': "\u227A", + 'precapprox': "\u2AB7", + 'preccurlyeq': "\u227C", + 'Precedes': "\u227A", + 'PrecedesEqual': "\u2AAF", + 'PrecedesSlantEqual': "\u227C", + 'PrecedesTilde': "\u227E", + 'preceq': "\u2AAF", + 'precnapprox': "\u2AB9", + 'precneqq': "\u2AB5", + 'precnsim': "\u22E8", + 'precsim': "\u227E", + 'prime': "\u2032", + 'Prime': "\u2033", + 'primes': "\u2119", + 'prnap': "\u2AB9", + 'prnE': "\u2AB5", + 'prnsim': "\u22E8", + 'prod': "\u220F", + 'Product': "\u220F", + 'profalar': "\u232E", + 'profline': "\u2312", + 'profsurf': "\u2313", + 'prop': "\u221D", + 'Proportion': "\u2237", + 'Proportional': "\u221D", + 'propto': "\u221D", + 'prsim': "\u227E", + 'prurel': "\u22B0", + 'pscr': "\uD835\uDCC5", + 'Pscr': "\uD835\uDCAB", + 'psi': "\u03C8", + 'Psi': "\u03A8", + 'puncsp': "\u2008", + 'qfr': "\uD835\uDD2E", + 'Qfr': "\uD835\uDD14", + 'qint': "\u2A0C", + 'qopf': "\uD835\uDD62", + 'Qopf': "\u211A", + 'qprime': "\u2057", + 'qscr': "\uD835\uDCC6", + 'Qscr': "\uD835\uDCAC", + 'quaternions': "\u210D", + 'quatint': "\u2A16", + 'quest': '?', + 'questeq': "\u225F", + 'quot': '"', + 'QUOT': '"', + 'rAarr': "\u21DB", + 'race': "\u223D\u0331", + 'racute': "\u0155", + 'Racute': "\u0154", + 'radic': "\u221A", + 'raemptyv': "\u29B3", + 'rang': "\u27E9", + 'Rang': "\u27EB", + 'rangd': "\u2992", + 'range': "\u29A5", + 'rangle': "\u27E9", + 'raquo': '\xBB', + 'rarr': "\u2192", + 'rArr': "\u21D2", + 'Rarr': "\u21A0", + 'rarrap': "\u2975", + 'rarrb': "\u21E5", + 'rarrbfs': "\u2920", + 'rarrc': "\u2933", + 'rarrfs': "\u291E", + 'rarrhk': "\u21AA", + 'rarrlp': "\u21AC", + 'rarrpl': "\u2945", + 'rarrsim': "\u2974", + 'rarrtl': "\u21A3", + 'Rarrtl': "\u2916", + 'rarrw': "\u219D", + 'ratail': "\u291A", + 'rAtail': "\u291C", + 'ratio': "\u2236", + 'rationals': "\u211A", + 'rbarr': "\u290D", + 'rBarr': "\u290F", + 'RBarr': "\u2910", + 'rbbrk': "\u2773", + 'rbrace': '}', + 'rbrack': ']', + 'rbrke': "\u298C", + 'rbrksld': "\u298E", + 'rbrkslu': "\u2990", + 'rcaron': "\u0159", + 'Rcaron': "\u0158", + 'rcedil': "\u0157", + 'Rcedil': "\u0156", + 'rceil': "\u2309", + 'rcub': '}', + 'rcy': "\u0440", + 'Rcy': "\u0420", + 'rdca': "\u2937", + 'rdldhar': "\u2969", + 'rdquo': "\u201D", + 'rdquor': "\u201D", + 'rdsh': "\u21B3", + 'Re': "\u211C", + 'real': "\u211C", + 'realine': "\u211B", + 'realpart': "\u211C", + 'reals': "\u211D", + 'rect': "\u25AD", + 'reg': '\xAE', + 'REG': '\xAE', + 'ReverseElement': "\u220B", + 'ReverseEquilibrium': "\u21CB", + 'ReverseUpEquilibrium': "\u296F", + 'rfisht': "\u297D", + 'rfloor': "\u230B", + 'rfr': "\uD835\uDD2F", + 'Rfr': "\u211C", + 'rHar': "\u2964", + 'rhard': "\u21C1", + 'rharu': "\u21C0", + 'rharul': "\u296C", + 'rho': "\u03C1", + 'Rho': "\u03A1", + 'rhov': "\u03F1", + 'RightAngleBracket': "\u27E9", + 'rightarrow': "\u2192", + 'Rightarrow': "\u21D2", + 'RightArrow': "\u2192", + 'RightArrowBar': "\u21E5", + 'RightArrowLeftArrow': "\u21C4", + 'rightarrowtail': "\u21A3", + 'RightCeiling': "\u2309", + 'RightDoubleBracket': "\u27E7", + 'RightDownTeeVector': "\u295D", + 'RightDownVector': "\u21C2", + 'RightDownVectorBar': "\u2955", + 'RightFloor': "\u230B", + 'rightharpoondown': "\u21C1", + 'rightharpoonup': "\u21C0", + 'rightleftarrows': "\u21C4", + 'rightleftharpoons': "\u21CC", + 'rightrightarrows': "\u21C9", + 'rightsquigarrow': "\u219D", + 'RightTee': "\u22A2", + 'RightTeeArrow': "\u21A6", + 'RightTeeVector': "\u295B", + 'rightthreetimes': "\u22CC", + 'RightTriangle': "\u22B3", + 'RightTriangleBar': "\u29D0", + 'RightTriangleEqual': "\u22B5", + 'RightUpDownVector': "\u294F", + 'RightUpTeeVector': "\u295C", + 'RightUpVector': "\u21BE", + 'RightUpVectorBar': "\u2954", + 'RightVector': "\u21C0", + 'RightVectorBar': "\u2953", + 'ring': "\u02DA", + 'risingdotseq': "\u2253", + 'rlarr': "\u21C4", + 'rlhar': "\u21CC", + 'rlm': "\u200F", + 'rmoust': "\u23B1", + 'rmoustache': "\u23B1", + 'rnmid': "\u2AEE", + 'roang': "\u27ED", + 'roarr': "\u21FE", + 'robrk': "\u27E7", + 'ropar': "\u2986", + 'ropf': "\uD835\uDD63", + 'Ropf': "\u211D", + 'roplus': "\u2A2E", + 'rotimes': "\u2A35", + 'RoundImplies': "\u2970", + 'rpar': ')', + 'rpargt': "\u2994", + 'rppolint': "\u2A12", + 'rrarr': "\u21C9", + 'Rrightarrow': "\u21DB", + 'rsaquo': "\u203A", + 'rscr': "\uD835\uDCC7", + 'Rscr': "\u211B", + 'rsh': "\u21B1", + 'Rsh': "\u21B1", + 'rsqb': ']', + 'rsquo': "\u2019", + 'rsquor': "\u2019", + 'rthree': "\u22CC", + 'rtimes': "\u22CA", + 'rtri': "\u25B9", + 'rtrie': "\u22B5", + 'rtrif': "\u25B8", + 'rtriltri': "\u29CE", + 'RuleDelayed': "\u29F4", + 'ruluhar': "\u2968", + 'rx': "\u211E", + 'sacute': "\u015B", + 'Sacute': "\u015A", + 'sbquo': "\u201A", + 'sc': "\u227B", + 'Sc': "\u2ABC", + 'scap': "\u2AB8", + 'scaron': "\u0161", + 'Scaron': "\u0160", + 'sccue': "\u227D", + 'sce': "\u2AB0", + 'scE': "\u2AB4", + 'scedil': "\u015F", + 'Scedil': "\u015E", + 'scirc': "\u015D", + 'Scirc': "\u015C", + 'scnap': "\u2ABA", + 'scnE': "\u2AB6", + 'scnsim': "\u22E9", + 'scpolint': "\u2A13", + 'scsim': "\u227F", + 'scy': "\u0441", + 'Scy': "\u0421", + 'sdot': "\u22C5", + 'sdotb': "\u22A1", + 'sdote': "\u2A66", + 'searhk': "\u2925", + 'searr': "\u2198", + 'seArr': "\u21D8", + 'searrow': "\u2198", + 'sect': '\xA7', + 'semi': ';', + 'seswar': "\u2929", + 'setminus': "\u2216", + 'setmn': "\u2216", + 'sext': "\u2736", + 'sfr': "\uD835\uDD30", + 'Sfr': "\uD835\uDD16", + 'sfrown': "\u2322", + 'sharp': "\u266F", + 'shchcy': "\u0449", + 'SHCHcy': "\u0429", + 'shcy': "\u0448", + 'SHcy': "\u0428", + 'ShortDownArrow': "\u2193", + 'ShortLeftArrow': "\u2190", + 'shortmid': "\u2223", + 'shortparallel': "\u2225", + 'ShortRightArrow': "\u2192", + 'ShortUpArrow': "\u2191", + 'shy': '\xAD', + 'sigma': "\u03C3", + 'Sigma': "\u03A3", + 'sigmaf': "\u03C2", + 'sigmav': "\u03C2", + 'sim': "\u223C", + 'simdot': "\u2A6A", + 'sime': "\u2243", + 'simeq': "\u2243", + 'simg': "\u2A9E", + 'simgE': "\u2AA0", + 'siml': "\u2A9D", + 'simlE': "\u2A9F", + 'simne': "\u2246", + 'simplus': "\u2A24", + 'simrarr': "\u2972", + 'slarr': "\u2190", + 'SmallCircle': "\u2218", + 'smallsetminus': "\u2216", + 'smashp': "\u2A33", + 'smeparsl': "\u29E4", + 'smid': "\u2223", + 'smile': "\u2323", + 'smt': "\u2AAA", + 'smte': "\u2AAC", + 'smtes': "\u2AAC\uFE00", + 'softcy': "\u044C", + 'SOFTcy': "\u042C", + 'sol': '/', + 'solb': "\u29C4", + 'solbar': "\u233F", + 'sopf': "\uD835\uDD64", + 'Sopf': "\uD835\uDD4A", + 'spades': "\u2660", + 'spadesuit': "\u2660", + 'spar': "\u2225", + 'sqcap': "\u2293", + 'sqcaps': "\u2293\uFE00", + 'sqcup': "\u2294", + 'sqcups': "\u2294\uFE00", + 'Sqrt': "\u221A", + 'sqsub': "\u228F", + 'sqsube': "\u2291", + 'sqsubset': "\u228F", + 'sqsubseteq': "\u2291", + 'sqsup': "\u2290", + 'sqsupe': "\u2292", + 'sqsupset': "\u2290", + 'sqsupseteq': "\u2292", + 'squ': "\u25A1", + 'square': "\u25A1", + 'Square': "\u25A1", + 'SquareIntersection': "\u2293", + 'SquareSubset': "\u228F", + 'SquareSubsetEqual': "\u2291", + 'SquareSuperset': "\u2290", + 'SquareSupersetEqual': "\u2292", + 'SquareUnion': "\u2294", + 'squarf': "\u25AA", + 'squf': "\u25AA", + 'srarr': "\u2192", + 'sscr': "\uD835\uDCC8", + 'Sscr': "\uD835\uDCAE", + 'ssetmn': "\u2216", + 'ssmile': "\u2323", + 'sstarf': "\u22C6", + 'star': "\u2606", + 'Star': "\u22C6", + 'starf': "\u2605", + 'straightepsilon': "\u03F5", + 'straightphi': "\u03D5", + 'strns': '\xAF', + 'sub': "\u2282", + 'Sub': "\u22D0", + 'subdot': "\u2ABD", + 'sube': "\u2286", + 'subE': "\u2AC5", + 'subedot': "\u2AC3", + 'submult': "\u2AC1", + 'subne': "\u228A", + 'subnE': "\u2ACB", + 'subplus': "\u2ABF", + 'subrarr': "\u2979", + 'subset': "\u2282", + 'Subset': "\u22D0", + 'subseteq': "\u2286", + 'subseteqq': "\u2AC5", + 'SubsetEqual': "\u2286", + 'subsetneq': "\u228A", + 'subsetneqq': "\u2ACB", + 'subsim': "\u2AC7", + 'subsub': "\u2AD5", + 'subsup': "\u2AD3", + 'succ': "\u227B", + 'succapprox': "\u2AB8", + 'succcurlyeq': "\u227D", + 'Succeeds': "\u227B", + 'SucceedsEqual': "\u2AB0", + 'SucceedsSlantEqual': "\u227D", + 'SucceedsTilde': "\u227F", + 'succeq': "\u2AB0", + 'succnapprox': "\u2ABA", + 'succneqq': "\u2AB6", + 'succnsim': "\u22E9", + 'succsim': "\u227F", + 'SuchThat': "\u220B", + 'sum': "\u2211", + 'Sum': "\u2211", + 'sung': "\u266A", + 'sup': "\u2283", + 'Sup': "\u22D1", + 'sup1': '\xB9', + 'sup2': '\xB2', + 'sup3': '\xB3', + 'supdot': "\u2ABE", + 'supdsub': "\u2AD8", + 'supe': "\u2287", + 'supE': "\u2AC6", + 'supedot': "\u2AC4", + 'Superset': "\u2283", + 'SupersetEqual': "\u2287", + 'suphsol': "\u27C9", + 'suphsub': "\u2AD7", + 'suplarr': "\u297B", + 'supmult': "\u2AC2", + 'supne': "\u228B", + 'supnE': "\u2ACC", + 'supplus': "\u2AC0", + 'supset': "\u2283", + 'Supset': "\u22D1", + 'supseteq': "\u2287", + 'supseteqq': "\u2AC6", + 'supsetneq': "\u228B", + 'supsetneqq': "\u2ACC", + 'supsim': "\u2AC8", + 'supsub': "\u2AD4", + 'supsup': "\u2AD6", + 'swarhk': "\u2926", + 'swarr': "\u2199", + 'swArr': "\u21D9", + 'swarrow': "\u2199", + 'swnwar': "\u292A", + 'szlig': '\xDF', + 'Tab': '\t', + 'target': "\u2316", + 'tau': "\u03C4", + 'Tau': "\u03A4", + 'tbrk': "\u23B4", + 'tcaron': "\u0165", + 'Tcaron': "\u0164", + 'tcedil': "\u0163", + 'Tcedil': "\u0162", + 'tcy': "\u0442", + 'Tcy': "\u0422", + 'tdot': "\u20DB", + 'telrec': "\u2315", + 'tfr': "\uD835\uDD31", + 'Tfr': "\uD835\uDD17", + 'there4': "\u2234", + 'therefore': "\u2234", + 'Therefore': "\u2234", + 'theta': "\u03B8", + 'Theta': "\u0398", + 'thetasym': "\u03D1", + 'thetav': "\u03D1", + 'thickapprox': "\u2248", + 'thicksim': "\u223C", + 'ThickSpace': "\u205F\u200A", + 'thinsp': "\u2009", + 'ThinSpace': "\u2009", + 'thkap': "\u2248", + 'thksim': "\u223C", + 'thorn': '\xFE', + 'THORN': '\xDE', + 'tilde': "\u02DC", + 'Tilde': "\u223C", + 'TildeEqual': "\u2243", + 'TildeFullEqual': "\u2245", + 'TildeTilde': "\u2248", + 'times': '\xD7', + 'timesb': "\u22A0", + 'timesbar': "\u2A31", + 'timesd': "\u2A30", + 'tint': "\u222D", + 'toea': "\u2928", + 'top': "\u22A4", + 'topbot': "\u2336", + 'topcir': "\u2AF1", + 'topf': "\uD835\uDD65", + 'Topf': "\uD835\uDD4B", + 'topfork': "\u2ADA", + 'tosa': "\u2929", + 'tprime': "\u2034", + 'trade': "\u2122", + 'TRADE': "\u2122", + 'triangle': "\u25B5", + 'triangledown': "\u25BF", + 'triangleleft': "\u25C3", + 'trianglelefteq': "\u22B4", + 'triangleq': "\u225C", + 'triangleright': "\u25B9", + 'trianglerighteq': "\u22B5", + 'tridot': "\u25EC", + 'trie': "\u225C", + 'triminus': "\u2A3A", + 'TripleDot': "\u20DB", + 'triplus': "\u2A39", + 'trisb': "\u29CD", + 'tritime': "\u2A3B", + 'trpezium': "\u23E2", + 'tscr': "\uD835\uDCC9", + 'Tscr': "\uD835\uDCAF", + 'tscy': "\u0446", + 'TScy': "\u0426", + 'tshcy': "\u045B", + 'TSHcy': "\u040B", + 'tstrok': "\u0167", + 'Tstrok': "\u0166", + 'twixt': "\u226C", + 'twoheadleftarrow': "\u219E", + 'twoheadrightarrow': "\u21A0", + 'uacute': '\xFA', + 'Uacute': '\xDA', + 'uarr': "\u2191", + 'uArr': "\u21D1", + 'Uarr': "\u219F", + 'Uarrocir': "\u2949", + 'ubrcy': "\u045E", + 'Ubrcy': "\u040E", + 'ubreve': "\u016D", + 'Ubreve': "\u016C", + 'ucirc': '\xFB', + 'Ucirc': '\xDB', + 'ucy': "\u0443", + 'Ucy': "\u0423", + 'udarr': "\u21C5", + 'udblac': "\u0171", + 'Udblac': "\u0170", + 'udhar': "\u296E", + 'ufisht': "\u297E", + 'ufr': "\uD835\uDD32", + 'Ufr': "\uD835\uDD18", + 'ugrave': '\xF9', + 'Ugrave': '\xD9', + 'uHar': "\u2963", + 'uharl': "\u21BF", + 'uharr': "\u21BE", + 'uhblk': "\u2580", + 'ulcorn': "\u231C", + 'ulcorner': "\u231C", + 'ulcrop': "\u230F", + 'ultri': "\u25F8", + 'umacr': "\u016B", + 'Umacr': "\u016A", + 'uml': '\xA8', + 'UnderBar': '_', + 'UnderBrace': "\u23DF", + 'UnderBracket': "\u23B5", + 'UnderParenthesis': "\u23DD", + 'Union': "\u22C3", + 'UnionPlus': "\u228E", + 'uogon': "\u0173", + 'Uogon': "\u0172", + 'uopf': "\uD835\uDD66", + 'Uopf': "\uD835\uDD4C", + 'uparrow': "\u2191", + 'Uparrow': "\u21D1", + 'UpArrow': "\u2191", + 'UpArrowBar': "\u2912", + 'UpArrowDownArrow': "\u21C5", + 'updownarrow': "\u2195", + 'Updownarrow': "\u21D5", + 'UpDownArrow': "\u2195", + 'UpEquilibrium': "\u296E", + 'upharpoonleft': "\u21BF", + 'upharpoonright': "\u21BE", + 'uplus': "\u228E", + 'UpperLeftArrow': "\u2196", + 'UpperRightArrow': "\u2197", + 'upsi': "\u03C5", + 'Upsi': "\u03D2", + 'upsih': "\u03D2", + 'upsilon': "\u03C5", + 'Upsilon': "\u03A5", + 'UpTee': "\u22A5", + 'UpTeeArrow': "\u21A5", + 'upuparrows': "\u21C8", + 'urcorn': "\u231D", + 'urcorner': "\u231D", + 'urcrop': "\u230E", + 'uring': "\u016F", + 'Uring': "\u016E", + 'urtri': "\u25F9", + 'uscr': "\uD835\uDCCA", + 'Uscr': "\uD835\uDCB0", + 'utdot': "\u22F0", + 'utilde': "\u0169", + 'Utilde': "\u0168", + 'utri': "\u25B5", + 'utrif': "\u25B4", + 'uuarr': "\u21C8", + 'uuml': '\xFC', + 'Uuml': '\xDC', + 'uwangle': "\u29A7", + 'vangrt': "\u299C", + 'varepsilon': "\u03F5", + 'varkappa': "\u03F0", + 'varnothing': "\u2205", + 'varphi': "\u03D5", + 'varpi': "\u03D6", + 'varpropto': "\u221D", + 'varr': "\u2195", + 'vArr': "\u21D5", + 'varrho': "\u03F1", + 'varsigma': "\u03C2", + 'varsubsetneq': "\u228A\uFE00", + 'varsubsetneqq': "\u2ACB\uFE00", + 'varsupsetneq': "\u228B\uFE00", + 'varsupsetneqq': "\u2ACC\uFE00", + 'vartheta': "\u03D1", + 'vartriangleleft': "\u22B2", + 'vartriangleright': "\u22B3", + 'vBar': "\u2AE8", + 'Vbar': "\u2AEB", + 'vBarv': "\u2AE9", + 'vcy': "\u0432", + 'Vcy': "\u0412", + 'vdash': "\u22A2", + 'vDash': "\u22A8", + 'Vdash': "\u22A9", + 'VDash': "\u22AB", + 'Vdashl': "\u2AE6", + 'vee': "\u2228", + 'Vee': "\u22C1", + 'veebar': "\u22BB", + 'veeeq': "\u225A", + 'vellip': "\u22EE", + 'verbar': '|', + 'Verbar': "\u2016", + 'vert': '|', + 'Vert': "\u2016", + 'VerticalBar': "\u2223", + 'VerticalLine': '|', + 'VerticalSeparator': "\u2758", + 'VerticalTilde': "\u2240", + 'VeryThinSpace': "\u200A", + 'vfr': "\uD835\uDD33", + 'Vfr': "\uD835\uDD19", + 'vltri': "\u22B2", + 'vnsub': "\u2282\u20D2", + 'vnsup': "\u2283\u20D2", + 'vopf': "\uD835\uDD67", + 'Vopf': "\uD835\uDD4D", + 'vprop': "\u221D", + 'vrtri': "\u22B3", + 'vscr': "\uD835\uDCCB", + 'Vscr': "\uD835\uDCB1", + 'vsubne': "\u228A\uFE00", + 'vsubnE': "\u2ACB\uFE00", + 'vsupne': "\u228B\uFE00", + 'vsupnE': "\u2ACC\uFE00", + 'Vvdash': "\u22AA", + 'vzigzag': "\u299A", + 'wcirc': "\u0175", + 'Wcirc': "\u0174", + 'wedbar': "\u2A5F", + 'wedge': "\u2227", + 'Wedge': "\u22C0", + 'wedgeq': "\u2259", + 'weierp': "\u2118", + 'wfr': "\uD835\uDD34", + 'Wfr': "\uD835\uDD1A", + 'wopf': "\uD835\uDD68", + 'Wopf': "\uD835\uDD4E", + 'wp': "\u2118", + 'wr': "\u2240", + 'wreath': "\u2240", + 'wscr': "\uD835\uDCCC", + 'Wscr': "\uD835\uDCB2", + 'xcap': "\u22C2", + 'xcirc': "\u25EF", + 'xcup': "\u22C3", + 'xdtri': "\u25BD", + 'xfr': "\uD835\uDD35", + 'Xfr': "\uD835\uDD1B", + 'xharr': "\u27F7", + 'xhArr': "\u27FA", + 'xi': "\u03BE", + 'Xi': "\u039E", + 'xlarr': "\u27F5", + 'xlArr': "\u27F8", + 'xmap': "\u27FC", + 'xnis': "\u22FB", + 'xodot': "\u2A00", + 'xopf': "\uD835\uDD69", + 'Xopf': "\uD835\uDD4F", + 'xoplus': "\u2A01", + 'xotime': "\u2A02", + 'xrarr': "\u27F6", + 'xrArr': "\u27F9", + 'xscr': "\uD835\uDCCD", + 'Xscr': "\uD835\uDCB3", + 'xsqcup': "\u2A06", + 'xuplus': "\u2A04", + 'xutri': "\u25B3", + 'xvee': "\u22C1", + 'xwedge': "\u22C0", + 'yacute': '\xFD', + 'Yacute': '\xDD', + 'yacy': "\u044F", + 'YAcy': "\u042F", + 'ycirc': "\u0177", + 'Ycirc': "\u0176", + 'ycy': "\u044B", + 'Ycy': "\u042B", + 'yen': '\xA5', + 'yfr': "\uD835\uDD36", + 'Yfr': "\uD835\uDD1C", + 'yicy': "\u0457", + 'YIcy': "\u0407", + 'yopf': "\uD835\uDD6A", + 'Yopf': "\uD835\uDD50", + 'yscr': "\uD835\uDCCE", + 'Yscr': "\uD835\uDCB4", + 'yucy': "\u044E", + 'YUcy': "\u042E", + 'yuml': '\xFF', + 'Yuml': "\u0178", + 'zacute': "\u017A", + 'Zacute': "\u0179", + 'zcaron': "\u017E", + 'Zcaron': "\u017D", + 'zcy': "\u0437", + 'Zcy': "\u0417", + 'zdot': "\u017C", + 'Zdot': "\u017B", + 'zeetrf': "\u2128", + 'ZeroWidthSpace': "\u200B", + 'zeta': "\u03B6", + 'Zeta': "\u0396", + 'zfr': "\uD835\uDD37", + 'Zfr': "\u2128", + 'zhcy': "\u0436", + 'ZHcy': "\u0416", + 'zigrarr': "\u21DD", + 'zopf': "\uD835\uDD6B", + 'Zopf': "\u2124", + 'zscr': "\uD835\uDCCF", + 'Zscr': "\uD835\uDCB5", + 'zwj': "\u200D", + 'zwnj': "\u200C" + }; + var decodeMapLegacy = { + 'aacute': '\xE1', + 'Aacute': '\xC1', + 'acirc': '\xE2', + 'Acirc': '\xC2', + 'acute': '\xB4', + 'aelig': '\xE6', + 'AElig': '\xC6', + 'agrave': '\xE0', + 'Agrave': '\xC0', + 'amp': '&', + 'AMP': '&', + 'aring': '\xE5', + 'Aring': '\xC5', + 'atilde': '\xE3', + 'Atilde': '\xC3', + 'auml': '\xE4', + 'Auml': '\xC4', + 'brvbar': '\xA6', + 'ccedil': '\xE7', + 'Ccedil': '\xC7', + 'cedil': '\xB8', + 'cent': '\xA2', + 'copy': '\xA9', + 'COPY': '\xA9', + 'curren': '\xA4', + 'deg': '\xB0', + 'divide': '\xF7', + 'eacute': '\xE9', + 'Eacute': '\xC9', + 'ecirc': '\xEA', + 'Ecirc': '\xCA', + 'egrave': '\xE8', + 'Egrave': '\xC8', + 'eth': '\xF0', + 'ETH': '\xD0', + 'euml': '\xEB', + 'Euml': '\xCB', + 'frac12': '\xBD', + 'frac14': '\xBC', + 'frac34': '\xBE', + 'gt': '>', + 'GT': '>', + 'iacute': '\xED', + 'Iacute': '\xCD', + 'icirc': '\xEE', + 'Icirc': '\xCE', + 'iexcl': '\xA1', + 'igrave': '\xEC', + 'Igrave': '\xCC', + 'iquest': '\xBF', + 'iuml': '\xEF', + 'Iuml': '\xCF', + 'laquo': '\xAB', + 'lt': '<', + 'LT': '<', + 'macr': '\xAF', + 'micro': '\xB5', + 'middot': '\xB7', + 'nbsp': '\xA0', + 'not': '\xAC', + 'ntilde': '\xF1', + 'Ntilde': '\xD1', + 'oacute': '\xF3', + 'Oacute': '\xD3', + 'ocirc': '\xF4', + 'Ocirc': '\xD4', + 'ograve': '\xF2', + 'Ograve': '\xD2', + 'ordf': '\xAA', + 'ordm': '\xBA', + 'oslash': '\xF8', + 'Oslash': '\xD8', + 'otilde': '\xF5', + 'Otilde': '\xD5', + 'ouml': '\xF6', + 'Ouml': '\xD6', + 'para': '\xB6', + 'plusmn': '\xB1', + 'pound': '\xA3', + 'quot': '"', + 'QUOT': '"', + 'raquo': '\xBB', + 'reg': '\xAE', + 'REG': '\xAE', + 'sect': '\xA7', + 'shy': '\xAD', + 'sup1': '\xB9', + 'sup2': '\xB2', + 'sup3': '\xB3', + 'szlig': '\xDF', + 'thorn': '\xFE', + 'THORN': '\xDE', + 'times': '\xD7', + 'uacute': '\xFA', + 'Uacute': '\xDA', + 'ucirc': '\xFB', + 'Ucirc': '\xDB', + 'ugrave': '\xF9', + 'Ugrave': '\xD9', + 'uml': '\xA8', + 'uuml': '\xFC', + 'Uuml': '\xDC', + 'yacute': '\xFD', + 'Yacute': '\xDD', + 'yen': '\xA5', + 'yuml': '\xFF' + }; + var decodeMapNumeric = { + '0': "\uFFFD", + '128': "\u20AC", + '130': "\u201A", + '131': "\u0192", + '132': "\u201E", + '133': "\u2026", + '134': "\u2020", + '135': "\u2021", + '136': "\u02C6", + '137': "\u2030", + '138': "\u0160", + '139': "\u2039", + '140': "\u0152", + '142': "\u017D", + '145': "\u2018", + '146': "\u2019", + '147': "\u201C", + '148': "\u201D", + '149': "\u2022", + '150': "\u2013", + '151': "\u2014", + '152': "\u02DC", + '153': "\u2122", + '154': "\u0161", + '155': "\u203A", + '156': "\u0153", + '158': "\u017E", + '159': "\u0178" + }; + var invalidReferenceCodePoints = [1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 64976, 64977, 64978, 64979, 64980, 64981, 64982, 64983, 64984, 64985, 64986, 64987, 64988, 64989, 64990, 64991, 64992, 64993, 64994, 64995, 64996, 64997, 64998, 64999, 65000, 65001, 65002, 65003, 65004, 65005, 65006, 65007, 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111]; + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + + var has = function has(object, propertyName) { + return hasOwnProperty.call(object, propertyName); + }; + + var contains = function contains(array, value) { + var index = -1; + var length = array.length; + + while (++index < length) { + if (array[index] == value) { + return true; + } + } + + return false; + }; + + var merge = function merge(options, defaults) { + if (!options) { + return defaults; + } + + var result = {}; + var key; + + for (key in defaults) { + // A `hasOwnProperty` check is not needed here, since only recognized + // option names are used anyway. Any others are ignored. + result[key] = has(options, key) ? options[key] : defaults[key]; + } + + return result; + }; // Modified version of `ucs2encode`; see https://mths.be/punycode. + + + var codePointToSymbol = function codePointToSymbol(codePoint, strict) { + var output = ''; + + if (codePoint >= 0xD800 && codePoint <= 0xDFFF || codePoint > 0x10FFFF) { + // See issue #4: + // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is + // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD + // REPLACEMENT CHARACTER.” + if (strict) { + parseError('character reference outside the permissible Unicode range'); + } + + return "\uFFFD"; + } + + if (has(decodeMapNumeric, codePoint)) { + if (strict) { + parseError('disallowed character reference'); + } + + return decodeMapNumeric[codePoint]; + } + + if (strict && contains(invalidReferenceCodePoints, codePoint)) { + parseError('disallowed character reference'); + } + + if (codePoint > 0xFFFF) { + codePoint -= 0x10000; + output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + output += stringFromCharCode(codePoint); + return output; + }; + + var hexEscape = function hexEscape(codePoint) { + return '&#x' + codePoint.toString(16).toUpperCase() + ';'; + }; + + var decEscape = function decEscape(codePoint) { + return '&#' + codePoint + ';'; + }; + + var parseError = function parseError(message) { + throw Error('Parse error: ' + message); + }; + /*--------------------------------------------------------------------------*/ + + + var encode = function encode(string, options) { + options = merge(options, encode.options); + var strict = options.strict; + + if (strict && regexInvalidRawCodePoint.test(string)) { + parseError('forbidden code point'); + } + + var encodeEverything = options.encodeEverything; + var useNamedReferences = options.useNamedReferences; + var allowUnsafeSymbols = options.allowUnsafeSymbols; + var escapeCodePoint = options.decimal ? decEscape : hexEscape; + + var escapeBmpSymbol = function escapeBmpSymbol(symbol) { + return escapeCodePoint(symbol.charCodeAt(0)); + }; + + if (encodeEverything) { + // Encode ASCII symbols. + string = string.replace(regexAsciiWhitelist, function (symbol) { + // Use named references if requested & possible. + if (useNamedReferences && has(encodeMap, symbol)) { + return '&' + encodeMap[symbol] + ';'; + } + + return escapeBmpSymbol(symbol); + }); // Shorten a few escapes that represent two symbols, of which at least one + // is within the ASCII range. + + if (useNamedReferences) { + string = string.replace(/>\u20D2/g, '>⃒').replace(/<\u20D2/g, '<⃒').replace(/fj/g, 'fj'); + } // Encode non-ASCII symbols. + + + if (useNamedReferences) { + // Encode non-ASCII symbols that can be replaced with a named reference. + string = string.replace(regexEncodeNonAscii, function (string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } // Note: any remaining non-ASCII symbols are handled outside of the `if`. + + } else if (useNamedReferences) { + // Apply named character references. + // Encode `<>"'&` using named character references. + if (!allowUnsafeSymbols) { + string = string.replace(regexEscape, function (string) { + return '&' + encodeMap[string] + ';'; // no need to check `has()` here + }); + } // Shorten escapes that represent two symbols, of which at least one is + // `<>"'&`. + + + string = string.replace(/>\u20D2/g, '>⃒').replace(/<\u20D2/g, '<⃒'); // Encode non-ASCII symbols that can be replaced with a named reference. + + string = string.replace(regexEncodeNonAscii, function (string) { + // Note: there is no need to check `has(encodeMap, string)` here. + return '&' + encodeMap[string] + ';'; + }); + } else if (!allowUnsafeSymbols) { + // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled + // using named character references. + string = string.replace(regexEscape, escapeBmpSymbol); + } + + return string // Encode astral symbols. + .replace(regexAstralSymbols, function ($0) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + var high = $0.charCodeAt(0); + var low = $0.charCodeAt(1); + var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; + return escapeCodePoint(codePoint); + }) // Encode any remaining BMP symbols that are not printable ASCII symbols + // using a hexadecimal escape. + .replace(regexBmpWhitelist, escapeBmpSymbol); + }; // Expose default options (so they can be overridden globally). + + + encode.options = { + 'allowUnsafeSymbols': false, + 'encodeEverything': false, + 'strict': false, + 'useNamedReferences': false, + 'decimal': false + }; + + var decode = function decode(html, options) { + options = merge(options, decode.options); + var strict = options.strict; + + if (strict && regexInvalidEntity.test(html)) { + parseError('malformed character reference'); + } + + return html.replace(regexDecode, function ($0, $1, $2, $3, $4, $5, $6, $7, $8) { + var codePoint; + var semicolon; + var decDigits; + var hexDigits; + var reference; + var next; + + if ($1) { + reference = $1; // Note: there is no need to check `has(decodeMap, reference)`. + + return decodeMap[reference]; + } + + if ($2) { + // Decode named character references without trailing `;`, e.g. `&`. + // This is only a parse error if it gets converted to `&`, or if it is + // followed by `=` in an attribute context. + reference = $2; + next = $3; + + if (next && options.isAttributeValue) { + if (strict && next == '=') { + parseError('`&` did not start a character reference'); + } + + return $0; + } else { + if (strict) { + parseError('named character reference was not terminated by a semicolon'); + } // Note: there is no need to check `has(decodeMapLegacy, reference)`. + + + return decodeMapLegacy[reference] + (next || ''); + } + } + + if ($4) { + // Decode decimal escapes, e.g. `𝌆`. + decDigits = $4; + semicolon = $5; + + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + + codePoint = parseInt(decDigits, 10); + return codePointToSymbol(codePoint, strict); + } + + if ($6) { + // Decode hexadecimal escapes, e.g. `𝌆`. + hexDigits = $6; + semicolon = $7; + + if (strict && !semicolon) { + parseError('character reference was not terminated by a semicolon'); + } + + codePoint = parseInt(hexDigits, 16); + return codePointToSymbol(codePoint, strict); + } // If we’re still here, `if ($7)` is implied; it’s an ambiguous + // ampersand for sure. https://mths.be/notes/ambiguous-ampersands + + + if (strict) { + parseError('named character reference was not terminated by a semicolon'); + } + + return $0; + }); + }; // Expose default options (so they can be overridden globally). + + + decode.options = { + 'isAttributeValue': false, + 'strict': false + }; + + var escape = function escape(string) { + return string.replace(regexEscape, function ($0) { + // Note: there is no need to check `has(escapeMap, $0)` here. + return escapeMap[$0]; + }); + }; + /*--------------------------------------------------------------------------*/ + + + var he = { + 'version': '1.2.0', + 'encode': encode, + 'decode': decode, + 'escape': escape, + 'unescape': decode + }; // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + + if (freeExports && !freeExports.nodeType) { + if (freeModule) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = he; + } else { + // in Narwhal or RingoJS v0.7.0- + for (var key in he) { + has(he, key) && (freeExports[key] = he[key]); + } + } + } else { + // in Rhino or a web browser + root.he = he; + } + })(commonjsGlobal); + }); + + var utils = createCommonjsModule(function (module, exports) { + /** + * Various utility functions used throughout Mocha's codebase. + * @module utils + */ + + /** + * Module dependencies. + */ + + var nanoid = nonSecure.nanoid; + var MOCHA_ID_PROP_NAME = '__mocha_id__'; + /** + * Inherit the prototype methods from one constructor into another. + * + * @param {function} ctor - Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor - Constructor function to inherit prototype from. + * @throws {TypeError} if either constructor is null, or if super constructor + * lacks a prototype. + */ + + exports.inherits = util.inherits; + /** + * Escape special characters in the given string of html. + * + * @private + * @param {string} html + * @return {string} + */ + + exports.escape = function (html) { + return he.encode(String(html), { + useNamedReferences: false + }); + }; + /** + * Test if the given obj is type of string. + * + * @private + * @param {Object} obj + * @return {boolean} + */ + + + exports.isString = function (obj) { + return typeof obj === 'string'; + }; + /** + * Compute a slug from the given `str`. + * + * @private + * @param {string} str + * @return {string} + */ + + + exports.slug = function (str) { + return str.toLowerCase().replace(/\s+/g, '-').replace(/[^-\w]/g, '').replace(/-{2,}/g, '-'); + }; + /** + * Strip the function definition from `str`, and re-indent for pre whitespace. + * + * @param {string} str + * @return {string} + */ + + + exports.clean = function (str) { + str = str.replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content + .replace(/^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, '$1$2$3'); + var spaces = str.match(/^\n?( *)/)[1].length; + var tabs = str.match(/^\n?(\t*)/)[1].length; + var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', 'gm'); + str = str.replace(re, ''); + return str.trim(); + }; + /** + * If a value could have properties, and has none, this function is called, + * which returns a string representation of the empty value. + * + * Functions w/ no properties return `'[Function]'` + * Arrays w/ length === 0 return `'[]'` + * Objects w/ no properties return `'{}'` + * All else: return result of `value.toString()` + * + * @private + * @param {*} value The value to inspect. + * @param {string} typeHint The type of the value + * @returns {string} + */ + + + function emptyRepresentation(value, typeHint) { + switch (typeHint) { + case 'function': + return '[Function]'; + + case 'object': + return '{}'; + + case 'array': + return '[]'; + + default: + return value.toString(); + } + } + /** + * Takes some variable and asks `Object.prototype.toString()` what it thinks it + * is. + * + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString + * @param {*} value The value to test. + * @returns {string} Computed type + * @example + * canonicalType({}) // 'object' + * canonicalType([]) // 'array' + * canonicalType(1) // 'number' + * canonicalType(false) // 'boolean' + * canonicalType(Infinity) // 'number' + * canonicalType(null) // 'null' + * canonicalType(new Date()) // 'date' + * canonicalType(/foo/) // 'regexp' + * canonicalType('type') // 'string' + * canonicalType(global) // 'global' + * canonicalType(new String('foo') // 'object' + * canonicalType(async function() {}) // 'asyncfunction' + * canonicalType(await import(name)) // 'module' + */ + + + var canonicalType = exports.canonicalType = function canonicalType(value) { + if (value === undefined) { + return 'undefined'; + } else if (value === null) { + return 'null'; + } else if (isBuffer$2(value)) { + return 'buffer'; + } + + return Object.prototype.toString.call(value).replace(/^\[.+\s(.+?)]$/, '$1').toLowerCase(); + }; + /** + * + * Returns a general type or data structure of a variable + * @private + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures + * @param {*} value The value to test. + * @returns {string} One of undefined, boolean, number, string, bigint, symbol, object + * @example + * type({}) // 'object' + * type([]) // 'array' + * type(1) // 'number' + * type(false) // 'boolean' + * type(Infinity) // 'number' + * type(null) // 'null' + * type(new Date()) // 'object' + * type(/foo/) // 'object' + * type('type') // 'string' + * type(global) // 'object' + * type(new String('foo') // 'string' + */ + + + exports.type = function type(value) { + // Null is special + if (value === null) return 'null'; + var primitives = new Set(['undefined', 'boolean', 'number', 'string', 'bigint', 'symbol']); + + var _type = _typeof(value); + + if (_type === 'function') return _type; + if (primitives.has(_type)) return _type; + if (value instanceof String) return 'string'; + if (value instanceof Error) return 'error'; + if (Array.isArray(value)) return 'array'; + return _type; + }; + /** + * Stringify `value`. Different behavior depending on type of value: + * + * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively. + * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes. + * - If `value` is an *empty* object, function, or array, return result of function + * {@link emptyRepresentation}. + * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of + * JSON.stringify(). + * + * @private + * @see exports.type + * @param {*} value + * @return {string} + */ + + + exports.stringify = function (value) { + var typeHint = canonicalType(value); + + if (!~['object', 'array', 'function'].indexOf(typeHint)) { + if (typeHint === 'buffer') { + var json = Buffer$1.prototype.toJSON.call(value); // Based on the toJSON result + + return jsonStringify(json.data && json.type ? json.data : json, 2).replace(/,(\n|$)/g, '$1'); + } // IE7/IE8 has a bizarre String constructor; needs to be coerced + // into an array and back to obj. + + + if (typeHint === 'string' && _typeof(value) === 'object') { + value = value.split('').reduce(function (acc, _char, idx) { + acc[idx] = _char; + return acc; + }, {}); + typeHint = 'object'; + } else { + return jsonStringify(value); + } + } + + for (var prop in value) { + if (Object.prototype.hasOwnProperty.call(value, prop)) { + return jsonStringify(exports.canonicalize(value, null, typeHint), 2).replace(/,(\n|$)/g, '$1'); + } + } + + return emptyRepresentation(value, typeHint); + }; + /** + * like JSON.stringify but more sense. + * + * @private + * @param {Object} object + * @param {number=} spaces + * @param {number=} depth + * @returns {*} + */ + + + function jsonStringify(object, spaces, depth) { + if (typeof spaces === 'undefined') { + // primitive types + return _stringify(object); + } + + depth = depth || 1; + var space = spaces * depth; + var str = Array.isArray(object) ? '[' : '{'; + var end = Array.isArray(object) ? ']' : '}'; + var length = typeof object.length === 'number' ? object.length : Object.keys(object).length; // `.repeat()` polyfill + + function repeat(s, n) { + return new Array(n).join(s); + } + + function _stringify(val) { + switch (canonicalType(val)) { + case 'null': + case 'undefined': + val = '[' + val + ']'; + break; + + case 'array': + case 'object': + val = jsonStringify(val, spaces, depth + 1); + break; + + case 'boolean': + case 'regexp': + case 'symbol': + case 'number': + val = val === 0 && 1 / val === -Infinity // `-0` + ? '-0' : val.toString(); + break; + + case 'bigint': + val = val.toString() + 'n'; + break; + + case 'date': + var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString(); + val = '[Date: ' + sDate + ']'; + break; + + case 'buffer': + var json = val.toJSON(); // Based on the toJSON result + + json = json.data && json.type ? json.data : json; + val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']'; + break; + + default: + val = val === '[Function]' || val === '[Circular]' ? val : JSON.stringify(val); + // string + } + + return val; + } + + for (var i in object) { + if (!Object.prototype.hasOwnProperty.call(object, i)) { + continue; // not my business + } + + --length; + str += '\n ' + repeat(' ', space) + (Array.isArray(object) ? '' : '"' + i + '": ') + // key + _stringify(object[i]) + ( // value + length ? ',' : ''); // comma + } + + return str + ( // [], {} + str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); + } + /** + * Return a new Thing that has the keys in sorted order. Recursive. + * + * If the Thing... + * - has already been seen, return string `'[Circular]'` + * - is `undefined`, return string `'[undefined]'` + * - is `null`, return value `null` + * - is some other primitive, return the value + * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method + * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again. + * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()` + * + * @private + * @see {@link exports.stringify} + * @param {*} value Thing to inspect. May or may not have properties. + * @param {Array} [stack=[]] Stack of seen values + * @param {string} [typeHint] Type hint + * @return {(Object|Array|Function|string|undefined)} + */ + + + exports.canonicalize = function canonicalize(value, stack, typeHint) { + var canonicalizedObj; + /* eslint-disable no-unused-vars */ + + var prop; + /* eslint-enable no-unused-vars */ + + typeHint = typeHint || canonicalType(value); + + function withStack(value, fn) { + stack.push(value); + fn(); + stack.pop(); + } + + stack = stack || []; + + if (stack.indexOf(value) !== -1) { + return '[Circular]'; + } + + switch (typeHint) { + case 'undefined': + case 'buffer': + case 'null': + canonicalizedObj = value; + break; + + case 'array': + withStack(value, function () { + canonicalizedObj = value.map(function (item) { + return exports.canonicalize(item, stack); + }); + }); + break; + + case 'function': + /* eslint-disable-next-line no-unused-vars, no-unreachable-loop */ + for (prop in value) { + canonicalizedObj = {}; + break; + } + /* eslint-enable guard-for-in */ + + + if (!canonicalizedObj) { + canonicalizedObj = emptyRepresentation(value, typeHint); + break; + } + + /* falls through */ + + case 'object': + canonicalizedObj = canonicalizedObj || {}; + withStack(value, function () { + Object.keys(value).sort().forEach(function (key) { + canonicalizedObj[key] = exports.canonicalize(value[key], stack); + }); + }); + break; + + case 'date': + case 'number': + case 'regexp': + case 'boolean': + case 'symbol': + canonicalizedObj = value; + break; + + default: + canonicalizedObj = value + ''; + } + + return canonicalizedObj; + }; + /** + * @summary + * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`) + * @description + * When invoking this function you get a filter function that get the Error.stack as an input, + * and return a prettify output. + * (i.e: strip Mocha and internal node functions from stack trace). + * @returns {Function} + */ + + + exports.stackTraceFilter = function () { + // TODO: Replace with `process.browser` + var is = typeof document === 'undefined' ? { + node: true + } : { + browser: true + }; + var slash = path.sep; + var cwd; + + if (is.node) { + cwd = exports.cwd() + slash; + } else { + cwd = (typeof location === 'undefined' ? window.location : location).href.replace(/\/[^/]*$/, '/'); + slash = '/'; + } + + function isMochaInternal(line) { + return ~line.indexOf('node_modules' + slash + 'mocha' + slash) || ~line.indexOf(slash + 'mocha.js') || ~line.indexOf(slash + 'mocha.min.js'); + } + + function isNodeInternal(line) { + return ~line.indexOf('(timers.js:') || ~line.indexOf('(events.js:') || ~line.indexOf('(node.js:') || ~line.indexOf('(module.js:') || ~line.indexOf('GeneratorFunctionPrototype.next (native)') || false; + } + + return function (stack) { + stack = stack.split('\n'); + stack = stack.reduce(function (list, line) { + if (isMochaInternal(line)) { + return list; + } + + if (is.node && isNodeInternal(line)) { + return list; + } // Clean up cwd(absolute) + + + if (/:\d+:\d+\)?$/.test(line)) { + line = line.replace('(' + cwd, '('); + } + + list.push(line); + return list; + }, []); + return stack.join('\n'); + }; + }; + /** + * Crude, but effective. + * @public + * @param {*} value + * @returns {boolean} Whether or not `value` is a Promise + */ + + + exports.isPromise = function isPromise(value) { + return _typeof(value) === 'object' && value !== null && typeof value.then === 'function'; + }; + /** + * Clamps a numeric value to an inclusive range. + * + * @param {number} value - Value to be clamped. + * @param {number[]} range - Two element array specifying [min, max] range. + * @returns {number} clamped value + */ + + + exports.clamp = function clamp(value, range) { + return Math.min(Math.max(value, range[0]), range[1]); + }; + /** + * It's a noop. + * @public + */ + + + exports.noop = function () {}; + /** + * Creates a map-like object. + * + * @description + * A "map" is an object with no prototype, for our purposes. In some cases + * this would be more appropriate than a `Map`, especially if your environment + * doesn't support it. Recommended for use in Mocha's public APIs. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Custom_and_Null_objects|MDN:Map} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Custom_and_Null_objects|MDN:Object.create - Custom objects} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Custom_and_Null_objects|MDN:Object.assign} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} An object with no prototype, having `...obj` properties + */ + + + exports.createMap = function (obj) { + return Object.assign.apply(null, [Object.create(null)].concat(Array.prototype.slice.call(arguments))); + }; + /** + * Creates a read-only map-like object. + * + * @description + * This differs from {@link module:utils.createMap createMap} only in that + * the argument must be non-empty, because the result is frozen. + * + * @see {@link module:utils.createMap createMap} + * @param {...*} [obj] - Arguments to `Object.assign()`. + * @returns {Object} A frozen object with no prototype, having `...obj` properties + * @throws {TypeError} if argument is not a non-empty object. + */ + + + exports.defineConstants = function (obj) { + if (canonicalType(obj) !== 'object' || !Object.keys(obj).length) { + throw new TypeError('Invalid argument; expected a non-empty object'); + } + + return Object.freeze(exports.createMap(obj)); + }; + /** + * Returns current working directory + * + * Wrapper around `process.cwd()` for isolation + * @private + */ + + + exports.cwd = function cwd() { + return process$4.cwd(); + }; + /** + * Returns `true` if Mocha is running in a browser. + * Checks for `process.browser`. + * @returns {boolean} + * @private + */ + + + exports.isBrowser = function isBrowser() { + return Boolean(browser$2); + }; + /* + * Casts `value` to an array; useful for optionally accepting array parameters + * + * It follows these rules, depending on `value`. If `value` is... + * 1. `undefined`: return an empty Array + * 2. `null`: return an array with a single `null` element + * 3. Any other object: return the value of `Array.from()` _if_ the object is iterable + * 4. otherwise: return an array with a single element, `value` + * @param {*} value - Something to cast to an Array + * @returns {Array<*>} + */ + + + exports.castArray = function castArray(value) { + if (value === undefined) { + return []; + } + + if (value === null) { + return [null]; + } + + if (_typeof(value) === 'object' && (typeof value[Symbol.iterator] === 'function' || value.length !== undefined)) { + return Array.from(value); + } + + return [value]; + }; + + exports.constants = exports.defineConstants({ + MOCHA_ID_PROP_NAME: MOCHA_ID_PROP_NAME + }); + /** + * Creates a new unique identifier + * @returns {string} Unique identifier + */ + + exports.uniqueID = function () { + return nanoid(); + }; + + exports.assignNewMochaID = function (obj) { + var id = exports.uniqueID(); + Object.defineProperty(obj, MOCHA_ID_PROP_NAME, { + get: function get() { + return id; + } + }); + return obj; + }; + /** + * Retrieves a Mocha ID from an object, if present. + * @param {*} [obj] - Object + * @returns {string|void} + */ + + + exports.getMochaID = function (obj) { + return obj && _typeof(obj) === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined; + }; + }); + + var _nodeResolve_empty = {}; + + var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': _nodeResolve_empty + }); + + var browser$1 = { + info: 'ℹ️', + success: '✅', + warning: '⚠️', + error: '❌️' + }; + + // `Map` constructor + // https://tc39.es/ecma262/#sec-map-objects + collection('Map', function (init) { + return function Map() { return init(this, arguments.length ? arguments[0] : undefined); }; + }, collectionStrong); + + /** + @module Pending + */ + + var pending = Pending; + /** + * Initialize a new `Pending` error with the given message. + * + * @param {string} message + */ + + function Pending(message) { + this.message = message; + } + + /** + * Helpers. + */ + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + var ms = function ms(val, options) { + options = options || {}; + + var type = _typeof(val); + + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options["long"] ? fmtLong(val) : fmtShort(val); + } + + throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); + }; + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + + function parse(str) { + str = String(str); + + if (str.length > 100) { + return; + } + + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); + + if (!match) { + return; + } + + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + + case 'weeks': + case 'week': + case 'w': + return n * w; + + case 'days': + case 'day': + case 'd': + return n * d; + + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + + default: + return undefined; + } + } + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + + return ms + 'ms'; + } + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + + return ms + ' ms'; + } + /** + * Pluralization helper. + */ + + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + + function setup(env) { + createDebug.debug = createDebug; + createDebug["default"] = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = ms; + createDebug.destroy = destroy; + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + var enableOverride = null; + var namespacesCache; + var enabledCache; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: function get() { + if (enableOverride !== null) { + return enableOverride; + } + + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: function set(v) { + enableOverride = v; + } + }); // Env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { + return '-' + namespace; + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + + + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + return createDebug; + } + + var common$1 = setup; + + var browser = createCommonjsModule(function (module, exports) { + /* eslint-env browser */ + + /** + * This is the web browser implementation of `debug()`. + */ + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + + exports.destroy = function () { + var warned = false; + return function () { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; + }(); + /** + * Colors. + */ + + + exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + // eslint-disable-next-line complexity + + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); + } + /** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + + + exports.log = console.debug || console.log || function () {}; + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + + function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process$4 !== 'undefined' && 'env' in process$4) { + r = process$4.env.DEBUG; + } + + return r; + } + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = common$1(exports); + var formatters = module.exports.formatters; + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + }); + + var $propertyIsEnumerable = objectPropertyIsEnumerable.f; + + var propertyIsEnumerable = functionUncurryThis($propertyIsEnumerable); + var push = functionUncurryThis([].push); + + // `Object.{ entries, values }` methods implementation + var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!descriptors || propertyIsEnumerable(O, key)) { + push(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod(false) + }; + + var $values = objectToArray.values; + + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + _export({ target: 'Object', stat: true }, { + values: function values(O) { + return $values(O); + } + }); + + var format = util.format; + /** + * Contains error codes, factory functions to create throwable error objects, + * and warning/deprecation functions. + * @module + */ + + /** + * process.emitWarning or a polyfill + * @see https://nodejs.org/api/process.html#process_process_emitwarning_warning_options + * @ignore + */ + + var emitWarning = function emitWarning(msg, type) { + if (process$4.emitWarning) { + process$4.emitWarning(msg, type); + } else { + /* istanbul ignore next */ + nextTick$1(function () { + console.warn(type + ': ' + msg); + }); + } + }; + /** + * Show a deprecation warning. Each distinct message is only displayed once. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ + + + var deprecate = function deprecate(msg) { + msg = String(msg); + + if (msg && !deprecate.cache[msg]) { + deprecate.cache[msg] = true; + emitWarning(msg, 'DeprecationWarning'); + } + }; + + deprecate.cache = {}; + /** + * Show a generic warning. + * Ignores empty messages. + * + * @param {string} [msg] - Warning to print + * @private + */ + + var warn = function warn(msg) { + if (msg) { + emitWarning(msg); + } + }; + /** + * When Mocha throws exceptions (or rejects `Promise`s), it attempts to assign a `code` property to the `Error` object, for easier handling. These are the potential values of `code`. + * @public + * @namespace + * @memberof module:lib/errors + */ + + + var constants$4 = { + /** + * An unrecoverable error. + * @constant + * @default + */ + FATAL: 'ERR_MOCHA_FATAL', + + /** + * The type of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_TYPE: 'ERR_MOCHA_INVALID_ARG_TYPE', + + /** + * The value of an argument to a function call is invalid + * @constant + * @default + */ + INVALID_ARG_VALUE: 'ERR_MOCHA_INVALID_ARG_VALUE', + + /** + * Something was thrown, but it wasn't an `Error` + * @constant + * @default + */ + INVALID_EXCEPTION: 'ERR_MOCHA_INVALID_EXCEPTION', + + /** + * An interface (e.g., `Mocha.interfaces`) is unknown or invalid + * @constant + * @default + */ + INVALID_INTERFACE: 'ERR_MOCHA_INVALID_INTERFACE', + + /** + * A reporter (.e.g, `Mocha.reporters`) is unknown or invalid + * @constant + * @default + */ + INVALID_REPORTER: 'ERR_MOCHA_INVALID_REPORTER', + + /** + * `done()` was called twice in a `Test` or `Hook` callback + * @constant + * @default + */ + MULTIPLE_DONE: 'ERR_MOCHA_MULTIPLE_DONE', + + /** + * No files matched the pattern provided by the user + * @constant + * @default + */ + NO_FILES_MATCH_PATTERN: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN', + + /** + * Known, but unsupported behavior of some kind + * @constant + * @default + */ + UNSUPPORTED: 'ERR_MOCHA_UNSUPPORTED', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_RUNNING: 'ERR_MOCHA_INSTANCE_ALREADY_RUNNING', + + /** + * Invalid state transition occurring in `Mocha` instance + * @constant + * @default + */ + INSTANCE_ALREADY_DISPOSED: 'ERR_MOCHA_INSTANCE_ALREADY_DISPOSED', + + /** + * Use of `only()` w/ `--forbid-only` results in this error. + * @constant + * @default + */ + FORBIDDEN_EXCLUSIVITY: 'ERR_MOCHA_FORBIDDEN_EXCLUSIVITY', + + /** + * To be thrown when a user-defined plugin implementation (e.g., `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_IMPLEMENTATION: 'ERR_MOCHA_INVALID_PLUGIN_IMPLEMENTATION', + + /** + * To be thrown when a builtin or third-party plugin definition (the _definition_ of `mochaHooks`) is invalid + * @constant + * @default + */ + INVALID_PLUGIN_DEFINITION: 'ERR_MOCHA_INVALID_PLUGIN_DEFINITION', + + /** + * When a runnable exceeds its allowed run time. + * @constant + * @default + */ + TIMEOUT: 'ERR_MOCHA_TIMEOUT', + + /** + * Input file is not able to be parsed + * @constant + * @default + */ + UNPARSABLE_FILE: 'ERR_MOCHA_UNPARSABLE_FILE' + }; + /** + * A set containing all string values of all Mocha error constants, for use by {@link isMochaError}. + * @private + */ + + var MOCHA_ERRORS = new Set(Object.values(constants$4)); + /** + * Creates an error object to be thrown when no files to be tested could be found using specified pattern. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} pattern - User-specified argument value. + * @returns {Error} instance detailing the error condition + */ + + function createNoFilesMatchPatternError(message, pattern) { + var err = new Error(message); + err.code = constants$4.NO_FILES_MATCH_PATTERN; + err.pattern = pattern; + return err; + } + /** + * Creates an error object to be thrown when the reporter specified in the options was not found. + * + * @public + * @param {string} message - Error message to be displayed. + * @param {string} reporter - User-specified reporter value. + * @returns {Error} instance detailing the error condition + */ + + + function createInvalidReporterError(message, reporter) { + var err = new TypeError(message); + err.code = constants$4.INVALID_REPORTER; + err.reporter = reporter; + return err; + } + /** + * Creates an error object to be thrown when the interface specified in the options was not found. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} ui - User-specified interface value. + * @returns {Error} instance detailing the error condition + */ + + + function createInvalidInterfaceError(message, ui) { + var err = new Error(message); + err.code = constants$4.INVALID_INTERFACE; + err["interface"] = ui; + return err; + } + /** + * Creates an error object to be thrown when a behavior, option, or parameter is unsupported. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + + + function createUnsupportedError$2(message) { + var err = new Error(message); + err.code = constants$4.UNSUPPORTED; + return err; + } + /** + * Creates an error object to be thrown when an argument is missing. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ + + + function createMissingArgumentError$1(message, argument, expected) { + return createInvalidArgumentTypeError$1(message, argument, expected); + } + /** + * Creates an error object to be thrown when an argument did not use the supported type + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} expected - Expected argument datatype. + * @returns {Error} instance detailing the error condition + */ + + + function createInvalidArgumentTypeError$1(message, argument, expected) { + var err = new TypeError(message); + err.code = constants$4.INVALID_ARG_TYPE; + err.argument = argument; + err.expected = expected; + err.actual = _typeof(argument); + return err; + } + /** + * Creates an error object to be thrown when an argument did not use the supported value + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} argument - Argument name. + * @param {string} value - Argument value. + * @param {string} [reason] - Why value is invalid. + * @returns {Error} instance detailing the error condition + */ + + + function createInvalidArgumentValueError(message, argument, value, reason) { + var err = new TypeError(message); + err.code = constants$4.INVALID_ARG_VALUE; + err.argument = argument; + err.value = value; + err.reason = typeof reason !== 'undefined' ? reason : 'is invalid'; + return err; + } + /** + * Creates an error object to be thrown when an exception was caught, but the `Error` is falsy or undefined. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + + + function createInvalidExceptionError$2(message, value) { + var err = new Error(message); + err.code = constants$4.INVALID_EXCEPTION; + err.valueType = _typeof(value); + err.value = value; + return err; + } + /** + * Creates an error object to be thrown when an unrecoverable error occurs. + * + * @public + * @static + * @param {string} message - Error message to be displayed. + * @returns {Error} instance detailing the error condition + */ + + + function createFatalError$1(message, value) { + var err = new Error(message); + err.code = constants$4.FATAL; + err.valueType = _typeof(value); + err.value = value; + return err; + } + /** + * Dynamically creates a plugin-type-specific error based on plugin type + * @param {string} message - Error message + * @param {"reporter"|"ui"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ + + + function createInvalidLegacyPluginError(message, pluginType, pluginId) { + switch (pluginType) { + case 'reporter': + return createInvalidReporterError(message, pluginId); + + case 'ui': + return createInvalidInterfaceError(message, pluginId); + + default: + throw new Error('unknown pluginType "' + pluginType + '"'); + } + } + /** + * **DEPRECATED**. Use {@link createInvalidLegacyPluginError} instead Dynamically creates a plugin-type-specific error based on plugin type + * @deprecated + * @param {string} message - Error message + * @param {"reporter"|"interface"} pluginType - Plugin type. Future: expand as needed + * @param {string} [pluginId] - Name/path of plugin, if any + * @throws When `pluginType` is not known + * @public + * @static + * @returns {Error} + */ + + + function createInvalidPluginError() { + deprecate('Use createInvalidLegacyPluginError() instead'); + return createInvalidLegacyPluginError.apply(void 0, arguments); + } + /** + * Creates an error object to be thrown when a mocha object's `run` method is executed while it is already disposed. + * @param {string} message The error message to be displayed. + * @param {boolean} cleanReferencesAfterRun the value of `cleanReferencesAfterRun` + * @param {Mocha} instance the mocha instance that throw this error + * @static + */ + + + function createMochaInstanceAlreadyDisposedError(message, cleanReferencesAfterRun, instance) { + var err = new Error(message); + err.code = constants$4.INSTANCE_ALREADY_DISPOSED; + err.cleanReferencesAfterRun = cleanReferencesAfterRun; + err.instance = instance; + return err; + } + /** + * Creates an error object to be thrown when a mocha object's `run` method is called while a test run is in progress. + * @param {string} message The error message to be displayed. + * @static + * @public + */ + + + function createMochaInstanceAlreadyRunningError(message, instance) { + var err = new Error(message); + err.code = constants$4.INSTANCE_ALREADY_RUNNING; + err.instance = instance; + return err; + } + /** + * Creates an error object to be thrown when done() is called multiple times in a test + * + * @public + * @param {Runnable} runnable - Original runnable + * @param {Error} [originalErr] - Original error, if any + * @returns {Error} instance detailing the error condition + * @static + */ + + + function createMultipleDoneError$1(runnable, originalErr) { + var title; + + try { + title = format('<%s>', runnable.fullTitle()); + + if (runnable.parent.root) { + title += ' (of root suite)'; + } + } catch (ignored) { + title = format('<%s> (of unknown suite)', runnable.title); + } + + var message = format('done() called multiple times in %s %s', runnable.type ? runnable.type : 'unknown runnable', title); + + if (runnable.file) { + message += format(' of file %s', runnable.file); + } + + if (originalErr) { + message += format('; in addition, done() received error: %s', originalErr); + } + + var err = new Error(message); + err.code = constants$4.MULTIPLE_DONE; + err.valueType = _typeof(originalErr); + err.value = originalErr; + return err; + } + /** + * Creates an error object to be thrown when `.only()` is used with + * `--forbid-only`. + * @static + * @public + * @param {Mocha} mocha - Mocha instance + * @returns {Error} Error with code {@link constants.FORBIDDEN_EXCLUSIVITY} + */ + + + function createForbiddenExclusivityError$1(mocha) { + var err = new Error(mocha.isWorker ? '`.only` is not supported in parallel mode' : '`.only` forbidden by --forbid-only'); + err.code = constants$4.FORBIDDEN_EXCLUSIVITY; + return err; + } + /** + * Creates an error object to be thrown when a plugin definition is invalid + * @static + * @param {string} msg - Error message + * @param {PluginDefinition} [pluginDef] - Problematic plugin definition + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ + + + function createInvalidPluginDefinitionError(msg, pluginDef) { + var err = new Error(msg); + err.code = constants$4.INVALID_PLUGIN_DEFINITION; + err.pluginDef = pluginDef; + return err; + } + /** + * Creates an error object to be thrown when a plugin implementation (user code) is invalid + * @static + * @param {string} msg - Error message + * @param {Object} [opts] - Plugin definition and user-supplied implementation + * @param {PluginDefinition} [opts.pluginDef] - Plugin Definition + * @param {*} [opts.pluginImpl] - Plugin Implementation (user-supplied) + * @public + * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION} + */ + + + function createInvalidPluginImplementationError(msg) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + pluginDef = _ref.pluginDef, + pluginImpl = _ref.pluginImpl; + + var err = new Error(msg); + err.code = constants$4.INVALID_PLUGIN_IMPLEMENTATION; + err.pluginDef = pluginDef; + err.pluginImpl = pluginImpl; + return err; + } + /** + * Creates an error object to be thrown when a runnable exceeds its allowed run time. + * @static + * @param {string} msg - Error message + * @param {number} [timeout] - Timeout in ms + * @param {string} [file] - File, if given + * @returns {MochaTimeoutError} + */ + + + function createTimeoutError$1(msg, timeout, file) { + var err = new Error(msg); + err.code = constants$4.TIMEOUT; + err.timeout = timeout; + err.file = file; + return err; + } + /** + * Creates an error object to be thrown when file is unparsable + * @public + * @static + * @param {string} message - Error message to be displayed. + * @param {string} filename - File name + * @returns {Error} Error with code {@link constants.UNPARSABLE_FILE} + */ + + + function createUnparsableFileError(message, filename) { + var err = new Error(message); + err.code = constants$4.UNPARSABLE_FILE; + return err; + } + /** + * Returns `true` if an error came out of Mocha. + * _Can suffer from false negatives, but not false positives._ + * @static + * @public + * @param {*} err - Error, or anything + * @returns {boolean} + */ + + + var isMochaError$1 = function isMochaError(err) { + return Boolean(err && _typeof(err) === 'object' && MOCHA_ERRORS.has(err.code)); + }; + + var errors = { + constants: constants$4, + createFatalError: createFatalError$1, + createForbiddenExclusivityError: createForbiddenExclusivityError$1, + createInvalidArgumentTypeError: createInvalidArgumentTypeError$1, + createInvalidArgumentValueError: createInvalidArgumentValueError, + createInvalidExceptionError: createInvalidExceptionError$2, + createInvalidInterfaceError: createInvalidInterfaceError, + createInvalidLegacyPluginError: createInvalidLegacyPluginError, + createInvalidPluginDefinitionError: createInvalidPluginDefinitionError, + createInvalidPluginError: createInvalidPluginError, + createInvalidPluginImplementationError: createInvalidPluginImplementationError, + createInvalidReporterError: createInvalidReporterError, + createMissingArgumentError: createMissingArgumentError$1, + createMochaInstanceAlreadyDisposedError: createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError: createMochaInstanceAlreadyRunningError, + createMultipleDoneError: createMultipleDoneError$1, + createNoFilesMatchPatternError: createNoFilesMatchPatternError, + createTimeoutError: createTimeoutError$1, + createUnparsableFileError: createUnparsableFileError, + createUnsupportedError: createUnsupportedError$2, + deprecate: deprecate, + isMochaError: isMochaError$1, + warn: warn + }; + + var EventEmitter$1 = EventEmitter$2.EventEmitter; + var debug$1 = browser('mocha:runnable'); + var createInvalidExceptionError$1 = errors.createInvalidExceptionError, + createMultipleDoneError = errors.createMultipleDoneError, + createTimeoutError = errors.createTimeoutError; + /** + * Save timer references to avoid Sinon interfering (see GH-237). + * @private + */ + + var Date$4 = commonjsGlobal.Date; + var setTimeout$3 = commonjsGlobal.setTimeout; + var clearTimeout$1 = commonjsGlobal.clearTimeout; + var toString = Object.prototype.toString; + var runnable = Runnable; + /** + * Initialize a new `Runnable` with the given `title` and callback `fn`. + * + * @class + * @extends external:EventEmitter + * @public + * @param {String} title + * @param {Function} fn + */ + + function Runnable(title, fn) { + this.title = title; + this.fn = fn; + this.body = (fn || '').toString(); + this.async = fn && fn.length; + this.sync = !this.async; + this._timeout = 2000; + this._slow = 75; + this._retries = -1; + utils.assignNewMochaID(this); + Object.defineProperty(this, 'id', { + get: function get() { + return utils.getMochaID(this); + } + }); + this.reset(); + } + /** + * Inherit from `EventEmitter.prototype`. + */ + + + utils.inherits(Runnable, EventEmitter$1); + /** + * Resets the state initially or for a next run. + */ + + Runnable.prototype.reset = function () { + this.timedOut = false; + this._currentRetry = 0; + this.pending = false; + delete this.state; + delete this.err; + }; + /** + * Get current timeout value in msecs. + * + * @private + * @returns {number} current timeout threshold value + */ + + /** + * @summary + * Set timeout threshold value (msecs). + * + * @description + * A string argument can use shorthand (e.g., "2s") and will be converted. + * The value will be clamped to range [0, 2^31-1]. + * If clamped value matches either range endpoint, timeouts will be disabled. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value} + * @param {number|string} ms - Timeout threshold value. + * @returns {Runnable} this + * @chainable + */ + + + Runnable.prototype.timeout = function (ms) { + if (!arguments.length) { + return this._timeout; + } + + if (typeof ms === 'string') { + ms = ms$1(ms); + } // Clamp to range + + + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = utils.clamp(ms, range); // see #1652 for reasoning + + if (ms === range[0] || ms === range[1]) { + this._timeout = 0; + } else { + this._timeout = ms; + } + + debug$1('timeout %d', this._timeout); + + if (this.timer) { + this.resetTimeout(); + } + + return this; + }; + /** + * Set or get slow `ms`. + * + * @private + * @param {number|string} ms + * @return {Runnable|number} ms or Runnable instance. + */ + + + Runnable.prototype.slow = function (ms) { + if (!arguments.length || typeof ms === 'undefined') { + return this._slow; + } + + if (typeof ms === 'string') { + ms = ms$1(ms); + } + + debug$1('slow %d', ms); + this._slow = ms; + return this; + }; + /** + * Halt and mark as pending. + * + * @memberof Mocha.Runnable + * @public + */ + + + Runnable.prototype.skip = function () { + this.pending = true; + throw new pending('sync skip; aborting execution'); + }; + /** + * Check if this runnable or its parent suite is marked as pending. + * + * @private + */ + + + Runnable.prototype.isPending = function () { + return this.pending || this.parent && this.parent.isPending(); + }; + /** + * Return `true` if this Runnable has failed. + * @return {boolean} + * @private + */ + + + Runnable.prototype.isFailed = function () { + return !this.isPending() && this.state === constants$3.STATE_FAILED; + }; + /** + * Return `true` if this Runnable has passed. + * @return {boolean} + * @private + */ + + + Runnable.prototype.isPassed = function () { + return !this.isPending() && this.state === constants$3.STATE_PASSED; + }; + /** + * Set or get number of retries. + * + * @private + */ + + + Runnable.prototype.retries = function (n) { + if (!arguments.length) { + return this._retries; + } + + this._retries = n; + }; + /** + * Set or get current retry + * + * @private + */ + + + Runnable.prototype.currentRetry = function (n) { + if (!arguments.length) { + return this._currentRetry; + } + + this._currentRetry = n; + }; + /** + * Return the full title generated by recursively concatenating the parent's + * full title. + * + * @memberof Mocha.Runnable + * @public + * @return {string} + */ + + + Runnable.prototype.fullTitle = function () { + return this.titlePath().join(' '); + }; + /** + * Return the title path generated by concatenating the parent's title path with the title. + * + * @memberof Mocha.Runnable + * @public + * @return {string} + */ + + + Runnable.prototype.titlePath = function () { + return this.parent.titlePath().concat([this.title]); + }; + /** + * Clear the timeout. + * + * @private + */ + + + Runnable.prototype.clearTimeout = function () { + clearTimeout$1(this.timer); + }; + /** + * Reset the timeout. + * + * @private + */ + + + Runnable.prototype.resetTimeout = function () { + var self = this; + var ms = this.timeout(); + + if (ms === 0) { + return; + } + + this.clearTimeout(); + this.timer = setTimeout$3(function () { + if (self.timeout() === 0) { + return; + } + + self.callback(self._timeoutError(ms)); + self.timedOut = true; + }, ms); + }; + /** + * Set or get a list of whitelisted globals for this test run. + * + * @private + * @param {string[]} globals + */ + + + Runnable.prototype.globals = function (globals) { + if (!arguments.length) { + return this._allowedGlobals; + } + + this._allowedGlobals = globals; + }; + /** + * Run the test and invoke `fn(err)`. + * + * @param {Function} fn + * @private + */ + + + Runnable.prototype.run = function (fn) { + var self = this; + var start = new Date$4(); + var ctx = this.ctx; + var finished; + var errorWasHandled = false; + if (this.isPending()) return fn(); // Sometimes the ctx exists, but it is not runnable + + if (ctx && ctx.runnable) { + ctx.runnable(this); + } // called multiple times + + + function multiple(err) { + if (errorWasHandled) { + return; + } + + errorWasHandled = true; + self.emit('error', createMultipleDoneError(self, err)); + } // finished + + + function done(err) { + var ms = self.timeout(); + + if (self.timedOut) { + return; + } + + if (finished) { + return multiple(err); + } + + self.clearTimeout(); + self.duration = new Date$4() - start; + finished = true; + + if (!err && self.duration > ms && ms > 0) { + err = self._timeoutError(ms); + } + + fn(err); + } // for .resetTimeout() and Runner#uncaught() + + + this.callback = done; + + if (this.fn && typeof this.fn.call !== 'function') { + done(new TypeError('A runnable must be passed a function as its second argument.')); + return; + } // explicit async with `done` argument + + + if (this.async) { + this.resetTimeout(); // allows skip() to be used in an explicit async context + + this.skip = function asyncSkip() { + this.pending = true; + done(); // halt execution, the uncaught handler will ignore the failure. + + throw new pending('async skip; aborting execution'); + }; + + try { + callFnAsync(this.fn); + } catch (err) { + // handles async runnables which actually run synchronously + errorWasHandled = true; + + if (err instanceof pending) { + return; // done() is already called in this.skip() + } else if (this.allowUncaught) { + throw err; + } + + done(Runnable.toValueOrError(err)); + } + + return; + } // sync or promise-returning + + + try { + callFn(this.fn); + } catch (err) { + errorWasHandled = true; + + if (err instanceof pending) { + return done(); + } else if (this.allowUncaught) { + throw err; + } + + done(Runnable.toValueOrError(err)); + } + + function callFn(fn) { + var result = fn.call(ctx); + + if (result && typeof result.then === 'function') { + self.resetTimeout(); + result.then(function () { + done(); // Return null so libraries like bluebird do not warn about + // subsequently constructed Promises. + + return null; + }, function (reason) { + done(reason || new Error('Promise rejected with no or falsy reason')); + }); + } else { + if (self.asyncOnly) { + return done(new Error('--async-only option in use without declaring `done()` or returning a promise')); + } + + done(); + } + } + + function callFnAsync(fn) { + var result = fn.call(ctx, function (err) { + if (err instanceof Error || toString.call(err) === '[object Error]') { + return done(err); + } + + if (err) { + if (Object.prototype.toString.call(err) === '[object Object]') { + return done(new Error('done() invoked with non-Error: ' + JSON.stringify(err))); + } + + return done(new Error('done() invoked with non-Error: ' + err)); + } + + if (result && utils.isPromise(result)) { + return done(new Error('Resolution method is overspecified. Specify a callback *or* return a Promise; not both.')); + } + + done(); + }); + } + }; + /** + * Instantiates a "timeout" error + * + * @param {number} ms - Timeout (in milliseconds) + * @returns {Error} a "timeout" error + * @private + */ + + + Runnable.prototype._timeoutError = function (ms) { + var msg = "Timeout of ".concat(ms, "ms exceeded. For async tests and hooks, ensure \"done()\" is called; if returning a Promise, ensure it resolves."); + + if (this.file) { + msg += ' (' + this.file + ')'; + } + + return createTimeoutError(msg, ms, this.file); + }; + + var constants$3 = utils.defineConstants( + /** + * {@link Runnable}-related constants. + * @public + * @memberof Runnable + * @readonly + * @static + * @alias constants + * @enum {string} + */ + { + /** + * Value of `state` prop when a `Runnable` has failed + */ + STATE_FAILED: 'failed', + + /** + * Value of `state` prop when a `Runnable` has passed + */ + STATE_PASSED: 'passed', + + /** + * Value of `state` prop when a `Runnable` has been skipped by user + */ + STATE_PENDING: 'pending' + }); + /** + * Given `value`, return identity if truthy, otherwise create an "invalid exception" error and return that. + * @param {*} [value] - Value to return, if present + * @returns {*|Error} `value`, otherwise an `Error` + * @private + */ + + Runnable.toValueOrError = function (value) { + return value || createInvalidExceptionError$1('Runnable failed with falsy or undefined exception. Please throw an Error instead.', value); + }; + + Runnable.constants = constants$3; + + var inherits = utils.inherits, + constants$2 = utils.constants; + var MOCHA_ID_PROP_NAME$1 = constants$2.MOCHA_ID_PROP_NAME; + /** + * Expose `Hook`. + */ + + var hook = Hook; + /** + * Initialize a new `Hook` with the given `title` and callback `fn` + * + * @class + * @extends Runnable + * @param {String} title + * @param {Function} fn + */ + + function Hook(title, fn) { + runnable.call(this, title, fn); + this.type = 'hook'; + } + /** + * Inherit from `Runnable.prototype`. + */ + + + inherits(Hook, runnable); + /** + * Resets the state for a next run. + */ + + Hook.prototype.reset = function () { + runnable.prototype.reset.call(this); + delete this._error; + }; + /** + * Get or set the test `err`. + * + * @memberof Hook + * @public + * @param {Error} err + * @return {Error} + */ + + + Hook.prototype.error = function (err) { + if (!arguments.length) { + err = this._error; + this._error = null; + return err; + } + + this._error = err; + }; + /** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + + + Hook.prototype.serialize = function serialize() { + return _defineProperty({ + $$currentRetry: this.currentRetry(), + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + $$titlePath: this.titlePath(), + ctx: this.ctx && this.ctx.currentTest ? { + currentTest: _defineProperty({ + title: this.ctx.currentTest.title + }, MOCHA_ID_PROP_NAME$1, this.ctx.currentTest.id) + } : {}, + duration: this.duration, + file: this.file, + parent: _defineProperty({ + $$fullTitle: this.parent.fullTitle() + }, MOCHA_ID_PROP_NAME$1, this.parent.id), + state: this.state, + title: this.title, + type: this.type + }, MOCHA_ID_PROP_NAME$1, this.id); + }; + + var suite = createCommonjsModule(function (module, exports) { + /** + * Module dependencies. + * @private + */ + + var EventEmitter = EventEmitter$2.EventEmitter; + var assignNewMochaID = utils.assignNewMochaID, + clamp = utils.clamp, + utilsConstants = utils.constants, + defineConstants = utils.defineConstants, + getMochaID = utils.getMochaID, + inherits = utils.inherits, + isString = utils.isString; + var debug = browser('mocha:suite'); + var MOCHA_ID_PROP_NAME = utilsConstants.MOCHA_ID_PROP_NAME; + /** + * Expose `Suite`. + */ + + module.exports = Suite; + /** + * Create a new `Suite` with the given `title` and parent `Suite`. + * + * @public + * @param {Suite} parent - Parent suite (required!) + * @param {string} title - Title + * @return {Suite} + */ + + Suite.create = function (parent, title) { + var suite = new Suite(title, parent.ctx); + suite.parent = parent; + title = suite.fullTitle(); + parent.addSuite(suite); + return suite; + }; + /** + * Constructs a new `Suite` instance with the given `title`, `ctx`, and `isRoot`. + * + * @public + * @class + * @extends EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter|EventEmitter} + * @param {string} title - Suite title. + * @param {Context} parentContext - Parent context instance. + * @param {boolean} [isRoot=false] - Whether this is the root suite. + */ + + + function Suite(title, parentContext, isRoot) { + if (!isString(title)) { + throw errors.createInvalidArgumentTypeError('Suite argument "title" must be a string. Received type "' + _typeof(title) + '"', 'title', 'string'); + } + + this.title = title; + + function Context() {} + + Context.prototype = parentContext; + this.ctx = new Context(); + this.suites = []; + this.tests = []; + this.root = isRoot === true; + this.pending = false; + this._retries = -1; + this._beforeEach = []; + this._beforeAll = []; + this._afterEach = []; + this._afterAll = []; + this._timeout = 2000; + this._slow = 75; + this._bail = false; + this._onlyTests = []; + this._onlySuites = []; + assignNewMochaID(this); + Object.defineProperty(this, 'id', { + get: function get() { + return getMochaID(this); + } + }); + this.reset(); + } + /** + * Inherit from `EventEmitter.prototype`. + */ + + + inherits(Suite, EventEmitter); + /** + * Resets the state initially or for a next run. + */ + + Suite.prototype.reset = function () { + this.delayed = false; + + function doReset(thingToReset) { + thingToReset.reset(); + } + + this.suites.forEach(doReset); + this.tests.forEach(doReset); + + this._beforeEach.forEach(doReset); + + this._afterEach.forEach(doReset); + + this._beforeAll.forEach(doReset); + + this._afterAll.forEach(doReset); + }; + /** + * Return a clone of this `Suite`. + * + * @private + * @return {Suite} + */ + + + Suite.prototype.clone = function () { + var suite = new Suite(this.title); + debug('clone'); + suite.ctx = this.ctx; + suite.root = this.root; + suite.timeout(this.timeout()); + suite.retries(this.retries()); + suite.slow(this.slow()); + suite.bail(this.bail()); + return suite; + }; + /** + * Set or get timeout `ms` or short-hand such as "2s". + * + * @private + * @todo Do not attempt to set value if `ms` is undefined + * @param {number|string} ms + * @return {Suite|number} for chaining + */ + + + Suite.prototype.timeout = function (ms) { + if (!arguments.length) { + return this._timeout; + } + + if (typeof ms === 'string') { + ms = ms$1(ms); + } // Clamp to range + + + var INT_MAX = Math.pow(2, 31) - 1; + var range = [0, INT_MAX]; + ms = clamp(ms, range); + debug('timeout %d', ms); + this._timeout = parseInt(ms, 10); + return this; + }; + /** + * Set or get number of times to retry a failed test. + * + * @private + * @param {number|string} n + * @return {Suite|number} for chaining + */ + + + Suite.prototype.retries = function (n) { + if (!arguments.length) { + return this._retries; + } + + debug('retries %d', n); + this._retries = parseInt(n, 10) || 0; + return this; + }; + /** + * Set or get slow `ms` or short-hand such as "2s". + * + * @private + * @param {number|string} ms + * @return {Suite|number} for chaining + */ + + + Suite.prototype.slow = function (ms) { + if (!arguments.length) { + return this._slow; + } + + if (typeof ms === 'string') { + ms = ms$1(ms); + } + + debug('slow %d', ms); + this._slow = ms; + return this; + }; + /** + * Set or get whether to bail after first error. + * + * @private + * @param {boolean} bail + * @return {Suite|number} for chaining + */ + + + Suite.prototype.bail = function (bail) { + if (!arguments.length) { + return this._bail; + } + + debug('bail %s', bail); + this._bail = bail; + return this; + }; + /** + * Check if this suite or its parent suite is marked as pending. + * + * @private + */ + + + Suite.prototype.isPending = function () { + return this.pending || this.parent && this.parent.isPending(); + }; + /** + * Generic hook-creator. + * @private + * @param {string} title - Title of hook + * @param {Function} fn - Hook callback + * @returns {Hook} A new hook + */ + + + Suite.prototype._createHook = function (title, fn) { + var hook$1 = new hook(title, fn); + hook$1.parent = this; + hook$1.timeout(this.timeout()); + hook$1.retries(this.retries()); + hook$1.slow(this.slow()); + hook$1.ctx = this.ctx; + hook$1.file = this.file; + return hook$1; + }; + /** + * Run `fn(test[, done])` before running tests. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + + + Suite.prototype.beforeAll = function (title, fn) { + if (this.isPending()) { + return this; + } + + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + + title = '"before all" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + + this._beforeAll.push(hook); + + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_ALL, hook); + return this; + }; + /** + * Run `fn(test[, done])` after running tests. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + + + Suite.prototype.afterAll = function (title, fn) { + if (this.isPending()) { + return this; + } + + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + + title = '"after all" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + + this._afterAll.push(hook); + + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_ALL, hook); + return this; + }; + /** + * Run `fn(test[, done])` before each test case. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + + + Suite.prototype.beforeEach = function (title, fn) { + if (this.isPending()) { + return this; + } + + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + + title = '"before each" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + + this._beforeEach.push(hook); + + this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_EACH, hook); + return this; + }; + /** + * Run `fn(test[, done])` after each test case. + * + * @private + * @param {string} title + * @param {Function} fn + * @return {Suite} for chaining + */ + + + Suite.prototype.afterEach = function (title, fn) { + if (this.isPending()) { + return this; + } + + if (typeof title === 'function') { + fn = title; + title = fn.name; + } + + title = '"after each" hook' + (title ? ': ' + title : ''); + + var hook = this._createHook(title, fn); + + this._afterEach.push(hook); + + this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_EACH, hook); + return this; + }; + /** + * Add a test `suite`. + * + * @private + * @param {Suite} suite + * @return {Suite} for chaining + */ + + + Suite.prototype.addSuite = function (suite) { + suite.parent = this; + suite.root = false; + suite.timeout(this.timeout()); + suite.retries(this.retries()); + suite.slow(this.slow()); + suite.bail(this.bail()); + this.suites.push(suite); + this.emit(constants.EVENT_SUITE_ADD_SUITE, suite); + return this; + }; + /** + * Add a `test` to this suite. + * + * @private + * @param {Test} test + * @return {Suite} for chaining + */ + + + Suite.prototype.addTest = function (test) { + test.parent = this; + test.timeout(this.timeout()); + test.retries(this.retries()); + test.slow(this.slow()); + test.ctx = this.ctx; + this.tests.push(test); + this.emit(constants.EVENT_SUITE_ADD_TEST, test); + return this; + }; + /** + * Return the full title generated by recursively concatenating the parent's + * full title. + * + * @memberof Suite + * @public + * @return {string} + */ + + + Suite.prototype.fullTitle = function () { + return this.titlePath().join(' '); + }; + /** + * Return the title path generated by recursively concatenating the parent's + * title path. + * + * @memberof Suite + * @public + * @return {string} + */ + + + Suite.prototype.titlePath = function () { + var result = []; + + if (this.parent) { + result = result.concat(this.parent.titlePath()); + } + + if (!this.root) { + result.push(this.title); + } + + return result; + }; + /** + * Return the total number of tests. + * + * @memberof Suite + * @public + * @return {number} + */ + + + Suite.prototype.total = function () { + return this.suites.reduce(function (sum, suite) { + return sum + suite.total(); + }, 0) + this.tests.length; + }; + /** + * Iterates through each suite recursively to find all tests. Applies a + * function in the format `fn(test)`. + * + * @private + * @param {Function} fn + * @return {Suite} + */ + + + Suite.prototype.eachTest = function (fn) { + this.tests.forEach(fn); + this.suites.forEach(function (suite) { + suite.eachTest(fn); + }); + return this; + }; + /** + * This will run the root suite if we happen to be running in delayed mode. + * @private + */ + + + Suite.prototype.run = function run() { + if (this.root) { + this.emit(constants.EVENT_ROOT_SUITE_RUN); + } + }; + /** + * Determines whether a suite has an `only` test or suite as a descendant. + * + * @private + * @returns {Boolean} + */ + + + Suite.prototype.hasOnly = function hasOnly() { + return this._onlyTests.length > 0 || this._onlySuites.length > 0 || this.suites.some(function (suite) { + return suite.hasOnly(); + }); + }; + /** + * Filter suites based on `isOnly` logic. + * + * @private + * @returns {Boolean} + */ + + + Suite.prototype.filterOnly = function filterOnly() { + if (this._onlyTests.length) { + // If the suite contains `only` tests, run those and ignore any nested suites. + this.tests = this._onlyTests; + this.suites = []; + } else { + // Otherwise, do not run any of the tests in this suite. + this.tests = []; + + this._onlySuites.forEach(function (onlySuite) { + // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. + // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. + if (onlySuite.hasOnly()) { + onlySuite.filterOnly(); + } + }); // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. + + + var onlySuites = this._onlySuites; + this.suites = this.suites.filter(function (childSuite) { + return onlySuites.indexOf(childSuite) !== -1 || childSuite.filterOnly(); + }); + } // Keep the suite only if there is something to run + + + return this.tests.length > 0 || this.suites.length > 0; + }; + /** + * Adds a suite to the list of subsuites marked `only`. + * + * @private + * @param {Suite} suite + */ + + + Suite.prototype.appendOnlySuite = function (suite) { + this._onlySuites.push(suite); + }; + /** + * Marks a suite to be `only`. + * + * @private + */ + + + Suite.prototype.markOnly = function () { + this.parent && this.parent.appendOnlySuite(this); + }; + /** + * Adds a test to the list of tests marked `only`. + * + * @private + * @param {Test} test + */ + + + Suite.prototype.appendOnlyTest = function (test) { + this._onlyTests.push(test); + }; + /** + * Returns the array of hooks by hook name; see `HOOK_TYPE_*` constants. + * @private + */ + + + Suite.prototype.getHooks = function getHooks(name) { + return this['_' + name]; + }; + /** + * cleans all references from this suite and all child suites. + */ + + + Suite.prototype.dispose = function () { + this.suites.forEach(function (suite) { + suite.dispose(); + }); + this.cleanReferences(); + }; + /** + * Cleans up the references to all the deferred functions + * (before/after/beforeEach/afterEach) and tests of a Suite. + * These must be deleted otherwise a memory leak can happen, + * as those functions may reference variables from closures, + * thus those variables can never be garbage collected as long + * as the deferred functions exist. + * + * @private + */ + + + Suite.prototype.cleanReferences = function cleanReferences() { + function cleanArrReferences(arr) { + for (var i = 0; i < arr.length; i++) { + delete arr[i].fn; + } + } + + if (Array.isArray(this._beforeAll)) { + cleanArrReferences(this._beforeAll); + } + + if (Array.isArray(this._beforeEach)) { + cleanArrReferences(this._beforeEach); + } + + if (Array.isArray(this._afterAll)) { + cleanArrReferences(this._afterAll); + } + + if (Array.isArray(this._afterEach)) { + cleanArrReferences(this._afterEach); + } + + for (var i = 0; i < this.tests.length; i++) { + delete this.tests[i].fn; + } + }; + /** + * Returns an object suitable for IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + + + Suite.prototype.serialize = function serialize() { + var _ref2; + + return _ref2 = { + _bail: this._bail, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.isPending()), + root: this.root, + title: this.title + }, _defineProperty(_ref2, MOCHA_ID_PROP_NAME, this.id), _defineProperty(_ref2, "parent", this.parent ? _defineProperty({}, MOCHA_ID_PROP_NAME, this.parent.id) : null), _ref2; + }; + + var constants = defineConstants( + /** + * {@link Suite}-related constants. + * @public + * @memberof Suite + * @alias constants + * @readonly + * @static + * @enum {string} + */ + { + /** + * Event emitted after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_POST_REQUIRE: 'post-require', + + /** + * Event emitted before a test file has been loaded. In browser, this is emitted once an interface has been selected. + */ + EVENT_FILE_PRE_REQUIRE: 'pre-require', + + /** + * Event emitted immediately after a test file has been loaded. Not emitted in browser. + */ + EVENT_FILE_REQUIRE: 'require', + + /** + * Event emitted when `global.run()` is called (use with `delay` option). + */ + EVENT_ROOT_SUITE_RUN: 'run', + + /** + * Namespace for collection of a `Suite`'s "after all" hooks. + */ + HOOK_TYPE_AFTER_ALL: 'afterAll', + + /** + * Namespace for collection of a `Suite`'s "after each" hooks. + */ + HOOK_TYPE_AFTER_EACH: 'afterEach', + + /** + * Namespace for collection of a `Suite`'s "before all" hooks. + */ + HOOK_TYPE_BEFORE_ALL: 'beforeAll', + + /** + * Namespace for collection of a `Suite`'s "before each" hooks. + */ + HOOK_TYPE_BEFORE_EACH: 'beforeEach', + + /** + * Emitted after a child `Suite` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_SUITE: 'suite', + + /** + * Emitted after an "after all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_ALL: 'afterAll', + + /** + * Emitted after an "after each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_AFTER_EACH: 'afterEach', + + /** + * Emitted after an "before all" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_ALL: 'beforeAll', + + /** + * Emitted after an "before each" `Hook` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_HOOK_BEFORE_EACH: 'beforeEach', + + /** + * Emitted after a `Test` has been added to a `Suite`. + */ + EVENT_SUITE_ADD_TEST: 'test' + }); + Suite.constants = constants; + }); + + /** + * Module dependencies. + * @private + */ + + + var EventEmitter = EventEmitter$2.EventEmitter; + var debug = browser('mocha:runner'); + var HOOK_TYPE_BEFORE_EACH = suite.constants.HOOK_TYPE_BEFORE_EACH; + var HOOK_TYPE_AFTER_EACH = suite.constants.HOOK_TYPE_AFTER_EACH; + var HOOK_TYPE_AFTER_ALL = suite.constants.HOOK_TYPE_AFTER_ALL; + var HOOK_TYPE_BEFORE_ALL = suite.constants.HOOK_TYPE_BEFORE_ALL; + var EVENT_ROOT_SUITE_RUN = suite.constants.EVENT_ROOT_SUITE_RUN; + var STATE_FAILED = runnable.constants.STATE_FAILED; + var STATE_PASSED = runnable.constants.STATE_PASSED; + var STATE_PENDING = runnable.constants.STATE_PENDING; + var stackFilter = utils.stackTraceFilter(); + var stringify = utils.stringify; + var createInvalidExceptionError = errors.createInvalidExceptionError, + createUnsupportedError$1 = errors.createUnsupportedError, + createFatalError = errors.createFatalError, + isMochaError = errors.isMochaError, + errorConstants = errors.constants; + /** + * Non-enumerable globals. + * @private + * @readonly + */ + + var globals = ['setTimeout', 'clearTimeout', 'setInterval', 'clearInterval', 'XMLHttpRequest', 'Date', 'setImmediate', 'clearImmediate']; + var constants$1 = utils.defineConstants( + /** + * {@link Runner}-related constants. + * @public + * @memberof Runner + * @readonly + * @alias constants + * @static + * @enum {string} + */ + { + /** + * Emitted when {@link Hook} execution begins + */ + EVENT_HOOK_BEGIN: 'hook', + + /** + * Emitted when {@link Hook} execution ends + */ + EVENT_HOOK_END: 'hook end', + + /** + * Emitted when Root {@link Suite} execution begins (all files have been parsed and hooks/tests are ready for execution) + */ + EVENT_RUN_BEGIN: 'start', + + /** + * Emitted when Root {@link Suite} execution has been delayed via `delay` option + */ + EVENT_DELAY_BEGIN: 'waiting', + + /** + * Emitted when delayed Root {@link Suite} execution is triggered by user via `global.run()` + */ + EVENT_DELAY_END: 'ready', + + /** + * Emitted when Root {@link Suite} execution ends + */ + EVENT_RUN_END: 'end', + + /** + * Emitted when {@link Suite} execution begins + */ + EVENT_SUITE_BEGIN: 'suite', + + /** + * Emitted when {@link Suite} execution ends + */ + EVENT_SUITE_END: 'suite end', + + /** + * Emitted when {@link Test} execution begins + */ + EVENT_TEST_BEGIN: 'test', + + /** + * Emitted when {@link Test} execution ends + */ + EVENT_TEST_END: 'test end', + + /** + * Emitted when {@link Test} execution fails + */ + EVENT_TEST_FAIL: 'fail', + + /** + * Emitted when {@link Test} execution succeeds + */ + EVENT_TEST_PASS: 'pass', + + /** + * Emitted when {@link Test} becomes pending + */ + EVENT_TEST_PENDING: 'pending', + + /** + * Emitted when {@link Test} execution has failed, but will retry + */ + EVENT_TEST_RETRY: 'retry', + + /** + * Initial state of Runner + */ + STATE_IDLE: 'idle', + + /** + * State set to this value when the Runner has started running + */ + STATE_RUNNING: 'running', + + /** + * State set to this value when the Runner has stopped + */ + STATE_STOPPED: 'stopped' + }); + + var Runner = /*#__PURE__*/function (_EventEmitter) { + _inherits(Runner, _EventEmitter); + + var _super = _createSuper(Runner); + + /** + * Initialize a `Runner` at the Root {@link Suite}, which represents a hierarchy of {@link Suite|Suites} and {@link Test|Tests}. + * + * @extends external:EventEmitter + * @public + * @class + * @param {Suite} suite - Root suite + * @param {Object|boolean} [opts] - Options. If `boolean` (deprecated), whether to delay execution of root suite until ready. + * @param {boolean} [opts.cleanReferencesAfterRun] - Whether to clean references to test fns and hooks when a suite is done. + * @param {boolean} [opts.delay] - Whether to delay execution of root suite until ready. + * @param {boolean} [opts.dryRun] - Whether to report tests without running them. + * @param {boolean} [opts.failZero] - Whether to fail test run if zero tests encountered. + */ + function Runner(suite, opts) { + var _this; + + _classCallCheck(this, Runner); + + _this = _super.call(this); + + if (opts === undefined) { + opts = {}; + } + + if (typeof opts === 'boolean') { + // TODO: remove this + errors.deprecate('"Runner(suite: Suite, delay: boolean)" is deprecated. Use "Runner(suite: Suite, {delay: boolean})" instead.'); + _this._delay = opts; + opts = {}; + } else { + _this._delay = opts.delay; + } + + var self = _assertThisInitialized(_this); + + _this._globals = []; + _this._abort = false; + _this.suite = suite; + _this._opts = opts; + _this.state = constants$1.STATE_IDLE; + _this.total = suite.total(); + _this.failures = 0; + /** + * @type {Map>>} + */ + + _this._eventListeners = new Map(); + + _this.on(constants$1.EVENT_TEST_END, function (test) { + if (test.type === 'test' && test.retriedTest() && test.parent) { + var idx = test.parent.tests && test.parent.tests.indexOf(test.retriedTest()); + if (idx > -1) test.parent.tests[idx] = test; + } + + self.checkGlobals(test); + }); + + _this.on(constants$1.EVENT_HOOK_END, function (hook) { + self.checkGlobals(hook); + }); + + _this._defaultGrep = /.*/; + + _this.grep(_this._defaultGrep); + + _this.globals(_this.globalProps()); + + _this.uncaught = _this._uncaught.bind(_assertThisInitialized(_this)); + + _this.unhandled = function (reason, promise) { + if (isMochaError(reason)) { + debug('trapped unhandled rejection coming out of Mocha; forwarding to uncaught handler:', reason); + + _this.uncaught(reason); + } else { + debug('trapped unhandled rejection from (probably) user code; re-emitting on process'); + + _this._removeEventListener(process$4, 'unhandledRejection', _this.unhandled); + + try { + process$4.emit('unhandledRejection', reason, promise); + } finally { + _this._addEventListener(process$4, 'unhandledRejection', _this.unhandled); + } + } + }; + + return _this; + } + + return _createClass(Runner); + }(EventEmitter); + /** + * Wrapper for setImmediate, process.nextTick, or browser polyfill. + * + * @param {Function} fn + * @private + */ + + + Runner.immediately = commonjsGlobal.setImmediate || nextTick$1; + /** + * Replacement for `target.on(eventName, listener)` that does bookkeeping to remove them when this runner instance is disposed. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {string} fn - Listener function + * @private + */ + + Runner.prototype._addEventListener = function (target, eventName, listener) { + debug('_addEventListener(): adding for event %s; %d current listeners', eventName, target.listenerCount(eventName)); + /* istanbul ignore next */ + + if (this._eventListeners.has(target) && this._eventListeners.get(target).has(eventName) && this._eventListeners.get(target).get(eventName).has(listener)) { + debug('warning: tried to attach duplicate event listener for %s', eventName); + return; + } + + target.on(eventName, listener); + var targetListeners = this._eventListeners.has(target) ? this._eventListeners.get(target) : new Map(); + var targetEventListeners = targetListeners.has(eventName) ? targetListeners.get(eventName) : new Set(); + targetEventListeners.add(listener); + targetListeners.set(eventName, targetEventListeners); + + this._eventListeners.set(target, targetListeners); + }; + /** + * Replacement for `target.removeListener(eventName, listener)` that also updates the bookkeeping. + * @param {EventEmitter} target - The `EventEmitter` + * @param {string} eventName - The event name + * @param {function} listener - Listener function + * @private + */ + + + Runner.prototype._removeEventListener = function (target, eventName, listener) { + target.removeListener(eventName, listener); + + if (this._eventListeners.has(target)) { + var targetListeners = this._eventListeners.get(target); + + if (targetListeners.has(eventName)) { + var targetEventListeners = targetListeners.get(eventName); + targetEventListeners["delete"](listener); + + if (!targetEventListeners.size) { + targetListeners["delete"](eventName); + } + } + + if (!targetListeners.size) { + this._eventListeners["delete"](target); + } + } else { + debug('trying to remove listener for untracked object %s', target); + } + }; + /** + * Removes all event handlers set during a run on this instance. + * Remark: this does _not_ clean/dispose the tests or suites themselves. + */ + + + Runner.prototype.dispose = function () { + this.removeAllListeners(); + + this._eventListeners.forEach(function (targetListeners, target) { + targetListeners.forEach(function (targetEventListeners, eventName) { + targetEventListeners.forEach(function (listener) { + target.removeListener(eventName, listener); + }); + }); + }); + + this._eventListeners.clear(); + }; + /** + * Run tests with full titles matching `re`. Updates runner.total + * with number of tests matched. + * + * @public + * @memberof Runner + * @param {RegExp} re + * @param {boolean} invert + * @return {Runner} Runner instance. + */ + + + Runner.prototype.grep = function (re, invert) { + debug('grep(): setting to %s', re); + this._grep = re; + this._invert = invert; + this.total = this.grepTotal(this.suite); + return this; + }; + /** + * Returns the number of tests matching the grep search for the + * given suite. + * + * @memberof Runner + * @public + * @param {Suite} suite + * @return {number} + */ + + + Runner.prototype.grepTotal = function (suite) { + var self = this; + var total = 0; + suite.eachTest(function (test) { + var match = self._grep.test(test.fullTitle()); + + if (self._invert) { + match = !match; + } + + if (match) { + total++; + } + }); + return total; + }; + /** + * Return a list of global properties. + * + * @return {Array} + * @private + */ + + + Runner.prototype.globalProps = function () { + var props = Object.keys(commonjsGlobal); // non-enumerables + + for (var i = 0; i < globals.length; ++i) { + if (~props.indexOf(globals[i])) { + continue; + } + + props.push(globals[i]); + } + + return props; + }; + /** + * Allow the given `arr` of globals. + * + * @public + * @memberof Runner + * @param {Array} arr + * @return {Runner} Runner instance. + */ + + + Runner.prototype.globals = function (arr) { + if (!arguments.length) { + return this._globals; + } + + debug('globals(): setting to %O', arr); + this._globals = this._globals.concat(arr); + return this; + }; + /** + * Check for global variable leaks. + * + * @private + */ + + + Runner.prototype.checkGlobals = function (test) { + if (!this.checkLeaks) { + return; + } + + var ok = this._globals; + var globals = this.globalProps(); + var leaks; + + if (test) { + ok = ok.concat(test._allowedGlobals || []); + } + + if (this.prevGlobalsLength === globals.length) { + return; + } + + this.prevGlobalsLength = globals.length; + leaks = filterLeaks(ok, globals); + this._globals = this._globals.concat(leaks); + + if (leaks.length) { + var msg = "global leak(s) detected: ".concat(leaks.map(function (e) { + return "'".concat(e, "'"); + }).join(', ')); + this.fail(test, new Error(msg)); + } + }; + /** + * Fail the given `test`. + * + * If `test` is a hook, failures work in the following pattern: + * - If bail, run corresponding `after each` and `after` hooks, + * then exit + * - Failed `before` hook skips all tests in a suite and subsuites, + * but jumps to corresponding `after` hook + * - Failed `before each` hook skips remaining tests in a + * suite and jumps to corresponding `after each` hook, + * which is run only once + * - Failed `after` hook does not alter execution order + * - Failed `after each` hook skips remaining tests in a + * suite and subsuites, but executes other `after each` + * hooks + * + * @private + * @param {Runnable} test + * @param {Error} err + * @param {boolean} [force=false] - Whether to fail a pending test. + */ + + + Runner.prototype.fail = function (test, err, force) { + force = force === true; + + if (test.isPending() && !force) { + return; + } + + if (this.state === constants$1.STATE_STOPPED) { + if (err.code === errorConstants.MULTIPLE_DONE) { + throw err; + } + + throw createFatalError('Test failed after root suite execution completed!', err); + } + + ++this.failures; + debug('total number of failures: %d', this.failures); + test.state = STATE_FAILED; + + if (!isError(err)) { + err = thrown2Error(err); + } + + try { + err.stack = this.fullStackTrace || !err.stack ? err.stack : stackFilter(err.stack); + } catch (ignore) {// some environments do not take kindly to monkeying with the stack + } + + this.emit(constants$1.EVENT_TEST_FAIL, test, err); + }; + /** + * Run hook `name` callbacks and then invoke `fn()`. + * + * @private + * @param {string} name + * @param {Function} fn + */ + + + Runner.prototype.hook = function (name, fn) { + if (this._opts.dryRun) return fn(); + var suite = this.suite; + var hooks = suite.getHooks(name); + var self = this; + + function next(i) { + var hook = hooks[i]; + + if (!hook) { + return fn(); + } + + self.currentRunnable = hook; + + if (name === HOOK_TYPE_BEFORE_ALL) { + hook.ctx.currentTest = hook.parent.tests[0]; + } else if (name === HOOK_TYPE_AFTER_ALL) { + hook.ctx.currentTest = hook.parent.tests[hook.parent.tests.length - 1]; + } else { + hook.ctx.currentTest = self.test; + } + + setHookTitle(hook); + hook.allowUncaught = self.allowUncaught; + self.emit(constants$1.EVENT_HOOK_BEGIN, hook); + + if (!hook.listeners('error').length) { + self._addEventListener(hook, 'error', function (err) { + self.fail(hook, err); + }); + } + + hook.run(function cbHookRun(err) { + var testError = hook.error(); + + if (testError) { + self.fail(self.test, testError); + } // conditional skip + + + if (hook.pending) { + if (name === HOOK_TYPE_AFTER_EACH) { + // TODO define and implement use case + if (self.test) { + self.test.pending = true; + } + } else if (name === HOOK_TYPE_BEFORE_EACH) { + if (self.test) { + self.test.pending = true; + } + + self.emit(constants$1.EVENT_HOOK_END, hook); + hook.pending = false; // activates hook for next test + + return fn(new Error('abort hookDown')); + } else if (name === HOOK_TYPE_BEFORE_ALL) { + suite.tests.forEach(function (test) { + test.pending = true; + }); + suite.suites.forEach(function (suite) { + suite.pending = true; + }); + hooks = []; + } else { + hook.pending = false; + var errForbid = createUnsupportedError$1('`this.skip` forbidden'); + self.fail(hook, errForbid); + return fn(errForbid); + } + } else if (err) { + self.fail(hook, err); // stop executing hooks, notify callee of hook err + + return fn(err); + } + + self.emit(constants$1.EVENT_HOOK_END, hook); + delete hook.ctx.currentTest; + setHookTitle(hook); + next(++i); + }); + + function setHookTitle(hook) { + hook.originalTitle = hook.originalTitle || hook.title; + + if (hook.ctx && hook.ctx.currentTest) { + hook.title = "".concat(hook.originalTitle, " for \"").concat(hook.ctx.currentTest.title, "\""); + } else { + var parentTitle; + + if (hook.parent.title) { + parentTitle = hook.parent.title; + } else { + parentTitle = hook.parent.root ? '{root}' : ''; + } + + hook.title = "".concat(hook.originalTitle, " in \"").concat(parentTitle, "\""); + } + } + } + + Runner.immediately(function () { + next(0); + }); + }; + /** + * Run hook `name` for the given array of `suites` + * in order, and callback `fn(err, errSuite)`. + * + * @private + * @param {string} name + * @param {Array} suites + * @param {Function} fn + */ + + + Runner.prototype.hooks = function (name, suites, fn) { + var self = this; + var orig = this.suite; + + function next(suite) { + self.suite = suite; + + if (!suite) { + self.suite = orig; + return fn(); + } + + self.hook(name, function (err) { + if (err) { + var errSuite = self.suite; + self.suite = orig; + return fn(err, errSuite); + } + + next(suites.pop()); + }); + } + + next(suites.pop()); + }; + /** + * Run 'afterEach' hooks from bottom up. + * + * @param {String} name + * @param {Function} fn + * @private + */ + + + Runner.prototype.hookUp = function (name, fn) { + var suites = [this.suite].concat(this.parents()).reverse(); + this.hooks(name, suites, fn); + }; + /** + * Run 'beforeEach' hooks from top level down. + * + * @param {String} name + * @param {Function} fn + * @private + */ + + + Runner.prototype.hookDown = function (name, fn) { + var suites = [this.suite].concat(this.parents()); + this.hooks(name, suites, fn); + }; + /** + * Return an array of parent Suites from + * closest to furthest. + * + * @return {Array} + * @private + */ + + + Runner.prototype.parents = function () { + var suite = this.suite; + var suites = []; + + while (suite.parent) { + suite = suite.parent; + suites.push(suite); + } + + return suites; + }; + /** + * Run the current test and callback `fn(err)`. + * + * @param {Function} fn + * @private + */ + + + Runner.prototype.runTest = function (fn) { + if (this._opts.dryRun) return Runner.immediately(fn); + var self = this; + var test = this.test; + + if (!test) { + return; + } + + if (this.asyncOnly) { + test.asyncOnly = true; + } + + this._addEventListener(test, 'error', function (err) { + self.fail(test, err); + }); + + if (this.allowUncaught) { + test.allowUncaught = true; + return test.run(fn); + } + + try { + test.run(fn); + } catch (err) { + fn(err); + } + }; + /** + * Run tests in the given `suite` and invoke the callback `fn()` when complete. + * + * @private + * @param {Suite} suite + * @param {Function} fn + */ + + + Runner.prototype.runTests = function (suite, fn) { + var self = this; + var tests = suite.tests.slice(); + var test; + + function hookErr(_, errSuite, after) { + // before/after Each hook for errSuite failed: + var orig = self.suite; // for failed 'after each' hook start from errSuite parent, + // otherwise start from errSuite itself + + self.suite = after ? errSuite.parent : errSuite; + + if (self.suite) { + self.hookUp(HOOK_TYPE_AFTER_EACH, function (err2, errSuite2) { + self.suite = orig; // some hooks may fail even now + + if (err2) { + return hookErr(err2, errSuite2, true); + } // report error suite + + + fn(errSuite); + }); + } else { + // there is no need calling other 'after each' hooks + self.suite = orig; + fn(errSuite); + } + } + + function next(err, errSuite) { + // if we bail after first err + if (self.failures && suite._bail) { + tests = []; + } + + if (self._abort) { + return fn(); + } + + if (err) { + return hookErr(err, errSuite, true); + } // next test + + + test = tests.shift(); // all done + + if (!test) { + return fn(); + } // grep + + + var match = self._grep.test(test.fullTitle()); + + if (self._invert) { + match = !match; + } + + if (!match) { + // Run immediately only if we have defined a grep. When we + // define a grep — It can cause maximum callstack error if + // the grep is doing a large recursive loop by neglecting + // all tests. The run immediately function also comes with + // a performance cost. So we don't want to run immediately + // if we run the whole test suite, because running the whole + // test suite don't do any immediate recursive loops. Thus, + // allowing a JS runtime to breathe. + if (self._grep !== self._defaultGrep) { + Runner.immediately(next); + } else { + next(); + } + + return; + } // static skip, no hooks are executed + + + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + + self.emit(constants$1.EVENT_TEST_END, test); + return next(); + } // execute test and hook(s) + + + self.emit(constants$1.EVENT_TEST_BEGIN, self.test = test); + self.hookDown(HOOK_TYPE_BEFORE_EACH, function (err, errSuite) { + // conditional skip within beforeEach + if (test.isPending()) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + + self.emit(constants$1.EVENT_TEST_END, test); // skip inner afterEach hooks below errSuite level + + var origSuite = self.suite; + self.suite = errSuite || self.suite; + return self.hookUp(HOOK_TYPE_AFTER_EACH, function (e, eSuite) { + self.suite = origSuite; + next(e, eSuite); + }); + } + + if (err) { + return hookErr(err, errSuite, false); + } + + self.currentRunnable = self.test; + self.runTest(function (err) { + test = self.test; // conditional skip within it + + if (test.pending) { + if (self.forbidPending) { + self.fail(test, new Error('Pending test forbidden'), true); + } else { + test.state = STATE_PENDING; + self.emit(constants$1.EVENT_TEST_PENDING, test); + } + + self.emit(constants$1.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else if (err) { + var retry = test.currentRetry(); + + if (retry < test.retries()) { + var clonedTest = test.clone(); + clonedTest.currentRetry(retry + 1); + tests.unshift(clonedTest); + self.emit(constants$1.EVENT_TEST_RETRY, test, err); // Early return + hook trigger so that it doesn't + // increment the count wrong + + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } else { + self.fail(test, err); + } + + self.emit(constants$1.EVENT_TEST_END, test); + return self.hookUp(HOOK_TYPE_AFTER_EACH, next); + } + + test.state = STATE_PASSED; + self.emit(constants$1.EVENT_TEST_PASS, test); + self.emit(constants$1.EVENT_TEST_END, test); + self.hookUp(HOOK_TYPE_AFTER_EACH, next); + }); + }); + } + + this.next = next; + this.hookErr = hookErr; + next(); + }; + /** + * Run the given `suite` and invoke the callback `fn()` when complete. + * + * @private + * @param {Suite} suite + * @param {Function} fn + */ + + + Runner.prototype.runSuite = function (suite, fn) { + var i = 0; + var self = this; + var total = this.grepTotal(suite); + debug('runSuite(): running %s', suite.fullTitle()); + + if (!total || self.failures && suite._bail) { + debug('runSuite(): bailing'); + return fn(); + } + + this.emit(constants$1.EVENT_SUITE_BEGIN, this.suite = suite); + + function next(errSuite) { + if (errSuite) { + // current suite failed on a hook from errSuite + if (errSuite === suite) { + // if errSuite is current suite + // continue to the next sibling suite + return done(); + } // errSuite is among the parents of current suite + // stop execution of errSuite and all sub-suites + + + return done(errSuite); + } + + if (self._abort) { + return done(); + } + + var curr = suite.suites[i++]; + + if (!curr) { + return done(); + } // Avoid grep neglecting large number of tests causing a + // huge recursive loop and thus a maximum call stack error. + // See comment in `this.runTests()` for more information. + + + if (self._grep !== self._defaultGrep) { + Runner.immediately(function () { + self.runSuite(curr, next); + }); + } else { + self.runSuite(curr, next); + } + } + + function done(errSuite) { + self.suite = suite; + self.nextSuite = next; // remove reference to test + + delete self.test; + self.hook(HOOK_TYPE_AFTER_ALL, function () { + self.emit(constants$1.EVENT_SUITE_END, suite); + fn(errSuite); + }); + } + + this.nextSuite = next; + this.hook(HOOK_TYPE_BEFORE_ALL, function (err) { + if (err) { + return done(); + } + + self.runTests(suite, next); + }); + }; + /** + * Handle uncaught exceptions within runner. + * + * This function is bound to the instance as `Runner#uncaught` at instantiation + * time. It's intended to be listening on the `Process.uncaughtException` event. + * In order to not leak EE listeners, we need to ensure no more than a single + * `uncaughtException` listener exists per `Runner`. The only way to do + * this--because this function needs the context (and we don't have lambdas)--is + * to use `Function.prototype.bind`. We need strict equality to unregister and + * _only_ unregister the _one_ listener we set from the + * `Process.uncaughtException` event; would be poor form to just remove + * everything. See {@link Runner#run} for where the event listener is registered + * and unregistered. + * @param {Error} err - Some uncaught error + * @private + */ + + + Runner.prototype._uncaught = function (err) { + // this is defensive to prevent future developers from mis-calling this function. + // it's more likely that it'd be called with the incorrect context--say, the global + // `process` object--than it would to be called with a context that is not a "subclass" + // of `Runner`. + if (!(this instanceof Runner)) { + throw createFatalError('Runner#uncaught() called with invalid context', this); + } + + if (err instanceof pending) { + debug('uncaught(): caught a Pending'); + return; + } // browser does not exit script when throwing in global.onerror() + + + if (this.allowUncaught && !utils.isBrowser()) { + debug('uncaught(): bubbling exception due to --allow-uncaught'); + throw err; + } + + if (this.state === constants$1.STATE_STOPPED) { + debug('uncaught(): throwing after run has completed!'); + throw err; + } + + if (err) { + debug('uncaught(): got truthy exception %O', err); + } else { + debug('uncaught(): undefined/falsy exception'); + err = createInvalidExceptionError('Caught falsy/undefined exception which would otherwise be uncaught. No stack trace found; try a debugger', err); + } + + if (!isError(err)) { + err = thrown2Error(err); + debug('uncaught(): converted "error" %o to Error', err); + } + + err.uncaught = true; + var runnable$1 = this.currentRunnable; + + if (!runnable$1) { + runnable$1 = new runnable('Uncaught error outside test suite'); + debug('uncaught(): no current Runnable; created a phony one'); + runnable$1.parent = this.suite; + + if (this.state === constants$1.STATE_RUNNING) { + debug('uncaught(): failing gracefully'); + this.fail(runnable$1, err); + } else { + // Can't recover from this failure + debug('uncaught(): test run has not yet started; unrecoverable'); + this.emit(constants$1.EVENT_RUN_BEGIN); + this.fail(runnable$1, err); + this.emit(constants$1.EVENT_RUN_END); + } + + return; + } + + runnable$1.clearTimeout(); + + if (runnable$1.isFailed()) { + debug('uncaught(): Runnable has already failed'); // Ignore error if already failed + + return; + } else if (runnable$1.isPending()) { + debug('uncaught(): pending Runnable wound up failing!'); // report 'pending test' retrospectively as failed + + this.fail(runnable$1, err, true); + return; + } // we cannot recover gracefully if a Runnable has already passed + // then fails asynchronously + + + if (runnable$1.isPassed()) { + debug('uncaught(): Runnable has already passed; bailing gracefully'); + this.fail(runnable$1, err); + this.abort(); + } else { + debug('uncaught(): forcing Runnable to complete with Error'); + return runnable$1.callback(err); + } + }; + /** + * Run the root suite and invoke `fn(failures)` + * on completion. + * + * @public + * @memberof Runner + * @param {Function} fn - Callback when finished + * @param {{files: string[], options: Options}} [opts] - For subclasses + * @returns {Runner} Runner instance. + */ + + + Runner.prototype.run = function (fn) { + var _this2 = this; + + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var rootSuite = this.suite; + var options = opts.options || {}; + debug('run(): got options: %O', options); + + fn = fn || function () {}; + + var end = function end() { + if (!_this2.total && _this2._opts.failZero) _this2.failures = 1; + debug('run(): root suite completed; emitting %s', constants$1.EVENT_RUN_END); + + _this2.emit(constants$1.EVENT_RUN_END); + }; + + var begin = function begin() { + debug('run(): emitting %s', constants$1.EVENT_RUN_BEGIN); + + _this2.emit(constants$1.EVENT_RUN_BEGIN); + + debug('run(): emitted %s', constants$1.EVENT_RUN_BEGIN); + + _this2.runSuite(rootSuite, end); + }; + + var prepare = function prepare() { + debug('run(): starting'); // If there is an `only` filter + + if (rootSuite.hasOnly()) { + rootSuite.filterOnly(); + debug('run(): filtered exclusive Runnables'); + } + + _this2.state = constants$1.STATE_RUNNING; + + if (_this2._delay) { + _this2.emit(constants$1.EVENT_DELAY_END); + + debug('run(): "delay" ended'); + } + + return begin(); + }; // references cleanup to avoid memory leaks + + + if (this._opts.cleanReferencesAfterRun) { + this.on(constants$1.EVENT_SUITE_END, function (suite) { + suite.cleanReferences(); + }); + } // callback + + + this.on(constants$1.EVENT_RUN_END, function () { + this.state = constants$1.STATE_STOPPED; + debug('run(): emitted %s', constants$1.EVENT_RUN_END); + fn(this.failures); + }); + + this._removeEventListener(process$4, 'uncaughtException', this.uncaught); + + this._removeEventListener(process$4, 'unhandledRejection', this.unhandled); + + this._addEventListener(process$4, 'uncaughtException', this.uncaught); + + this._addEventListener(process$4, 'unhandledRejection', this.unhandled); + + if (this._delay) { + // for reporters, I guess. + // might be nice to debounce some dots while we wait. + this.emit(constants$1.EVENT_DELAY_BEGIN, rootSuite); + rootSuite.once(EVENT_ROOT_SUITE_RUN, prepare); + debug('run(): waiting for green light due to --delay'); + } else { + Runner.immediately(prepare); + } + + return this; + }; + /** + * Toggle partial object linking behavior; used for building object references from + * unique ID's. Does nothing in serial mode, because the object references already exist. + * Subclasses can implement this (e.g., `ParallelBufferedRunner`) + * @abstract + * @param {boolean} [value] - If `true`, enable partial object linking, otherwise disable + * @returns {Runner} + * @chainable + * @public + * @example + * // this reporter needs proper object references when run in parallel mode + * class MyReporter() { + * constructor(runner) { + * this.runner.linkPartialObjects(true) + * .on(EVENT_SUITE_BEGIN, suite => { + // this Suite may be the same object... + * }) + * .on(EVENT_TEST_BEGIN, test => { + * // ...as the `test.parent` property + * }); + * } + * } + */ + + + Runner.prototype.linkPartialObjects = function (value) { + return this; + }; + /* + * Like {@link Runner#run}, but does not accept a callback and returns a `Promise` instead of a `Runner`. + * This function cannot reject; an `unhandledRejection` event will bubble up to the `process` object instead. + * @public + * @memberof Runner + * @param {Object} [opts] - Options for {@link Runner#run} + * @returns {Promise} Failure count + */ + + + Runner.prototype.runAsync = /*#__PURE__*/function () { + var _runAsync = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + var _this3 = this; + + var opts, + _args = arguments; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}; + return _context.abrupt("return", new Promise(function (resolve) { + _this3.run(resolve, opts); + })); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + function runAsync() { + return _runAsync.apply(this, arguments); + } + + return runAsync; + }(); + /** + * Cleanly abort execution. + * + * @memberof Runner + * @public + * @return {Runner} Runner instance. + */ + + + Runner.prototype.abort = function () { + debug('abort(): aborting'); + this._abort = true; + return this; + }; + /** + * Returns `true` if Mocha is running in parallel mode. For reporters. + * + * Subclasses should return an appropriate value. + * @public + * @returns {false} + */ + + + Runner.prototype.isParallelMode = function isParallelMode() { + return false; + }; + /** + * Configures an alternate reporter for worker processes to use. Subclasses + * using worker processes should implement this. + * @public + * @param {string} path - Absolute path to alternate reporter for worker processes to use + * @returns {Runner} + * @throws When in serial mode + * @chainable + * @abstract + */ + + + Runner.prototype.workerReporter = function () { + throw createUnsupportedError$1('workerReporter() not supported in serial mode'); + }; + /** + * Filter leaks with the given globals flagged as `ok`. + * + * @private + * @param {Array} ok + * @param {Array} globals + * @return {Array} + */ + + + function filterLeaks(ok, globals) { + return globals.filter(function (key) { + // Firefox and Chrome exposes iframes as index inside the window object + if (/^\d+/.test(key)) { + return false; + } // in firefox + // if runner runs in an iframe, this iframe's window.getInterface method + // not init at first it is assigned in some seconds + + + if (commonjsGlobal.navigator && /^getInterface/.test(key)) { + return false; + } // an iframe could be approached by window[iframeIndex] + // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak + + + if (commonjsGlobal.navigator && /^\d+/.test(key)) { + return false; + } // Opera and IE expose global variables for HTML element IDs (issue #243) + + + if (/^mocha-/.test(key)) { + return false; + } + + var matched = ok.filter(function (ok) { + if (~ok.indexOf('*')) { + return key.indexOf(ok.split('*')[0]) === 0; + } + + return key === ok; + }); + return !matched.length && (!commonjsGlobal.navigator || key !== 'onerror'); + }); + } + /** + * Check if argument is an instance of Error object or a duck-typed equivalent. + * + * @private + * @param {Object} err - object to check + * @param {string} err.message - error message + * @returns {boolean} + */ + + + function isError(err) { + return err instanceof Error || err && typeof err.message === 'string'; + } + /** + * + * Converts thrown non-extensible type into proper Error. + * + * @private + * @param {*} thrown - Non-extensible type thrown by code + * @return {Error} + */ + + + function thrown2Error(err) { + return new Error("the ".concat(utils.canonicalType(err), " ").concat(stringify(err), " was thrown, throw an Error :)")); + } + + Runner.constants = constants$1; + /** + * Node.js' `EventEmitter` + * @external EventEmitter + * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter} + */ + + var runner = Runner; + + var require$$10 = getCjsExportFromNamespace(_nodeResolve_empty$1); + + var base = createCommonjsModule(function (module, exports) { + /** + * @module Base + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var isBrowser = utils.isBrowser(); + + function getBrowserWindowSize() { + if ('innerHeight' in commonjsGlobal) { + return [commonjsGlobal.innerHeight, commonjsGlobal.innerWidth]; + } // In a Web Worker, the DOM Window is not available. + + + return [640, 480]; + } + /** + * Expose `Base`. + */ + + + exports = module.exports = Base; + /** + * Check if both stdio streams are associated with a tty. + */ + + var isatty = isBrowser || process$4.stdout.isTTY && process$4.stderr.isTTY; + /** + * Save log references to avoid tests interfering (see GH-3604). + */ + + var consoleLog = console.log; + /** + * Enable coloring by default, except in the browser interface. + */ + + exports.useColors = !isBrowser && (require$$10.stdout || process$4.env.MOCHA_COLORS !== undefined); + /** + * Inline diffs instead of +/- + */ + + exports.inlineDiffs = false; + /** + * Truncate diffs longer than this value to avoid slow performance + */ + + exports.maxDiffSize = 8192; + /** + * Default color map. + */ + + exports.colors = { + pass: 90, + fail: 31, + 'bright pass': 92, + 'bright fail': 91, + 'bright yellow': 93, + pending: 36, + suite: 0, + 'error title': 0, + 'error message': 31, + 'error stack': 90, + checkmark: 32, + fast: 90, + medium: 33, + slow: 31, + green: 32, + light: 90, + 'diff gutter': 90, + 'diff added': 32, + 'diff removed': 31, + 'diff added inline': '30;42', + 'diff removed inline': '30;41' + }; + /** + * Default symbol map. + */ + + exports.symbols = { + ok: browser$1.success, + err: browser$1.error, + dot: '.', + comma: ',', + bang: '!' + }; + /** + * Color `str` with the given `type`, + * allowing colors to be disabled, + * as well as user-defined color + * schemes. + * + * @private + * @param {string} type + * @param {string} str + * @return {string} + */ + + var color = exports.color = function (type, str) { + if (!exports.useColors) { + return String(str); + } + + return "\x1B[" + exports.colors[type] + 'm' + str + "\x1B[0m"; + }; + /** + * Expose term window size, with some defaults for when stderr is not a tty. + */ + + + exports.window = { + width: 75 + }; + + if (isatty) { + if (isBrowser) { + exports.window.width = getBrowserWindowSize()[1]; + } else { + exports.window.width = process$4.stdout.getWindowSize(1)[0]; + } + } + /** + * Expose some basic cursor interactions that are common among reporters. + */ + + + exports.cursor = { + hide: function hide() { + isatty && process$4.stdout.write("\x1B[?25l"); + }, + show: function show() { + isatty && process$4.stdout.write("\x1B[?25h"); + }, + deleteLine: function deleteLine() { + isatty && process$4.stdout.write("\x1B[2K"); + }, + beginningOfLine: function beginningOfLine() { + isatty && process$4.stdout.write("\x1B[0G"); + }, + CR: function CR() { + if (isatty) { + exports.cursor.deleteLine(); + exports.cursor.beginningOfLine(); + } else { + process$4.stdout.write('\r'); + } + } + }; + + var showDiff = exports.showDiff = function (err) { + return err && err.showDiff !== false && sameType(err.actual, err.expected) && err.expected !== undefined; + }; + + function stringifyDiffObjs(err) { + if (!utils.isString(err.actual) || !utils.isString(err.expected)) { + err.actual = utils.stringify(err.actual); + err.expected = utils.stringify(err.expected); + } + } + /** + * Returns a diff between 2 strings with coloured ANSI output. + * + * @description + * The diff will be either inline or unified dependent on the value + * of `Base.inlineDiff`. + * + * @param {string} actual + * @param {string} expected + * @return {string} Diff + */ + + + var generateDiff = exports.generateDiff = function (actual, expected) { + try { + var maxLen = exports.maxDiffSize; + var skipped = 0; + + if (maxLen > 0) { + skipped = Math.max(actual.length - maxLen, expected.length - maxLen); + actual = actual.slice(0, maxLen); + expected = expected.slice(0, maxLen); + } + + var result = exports.inlineDiffs ? inlineDiff(actual, expected) : unifiedDiff(actual, expected); + + if (skipped > 0) { + result = "".concat(result, "\n [mocha] output truncated to ").concat(maxLen, " characters, see \"maxDiffSize\" reporter-option\n"); + } + + return result; + } catch (err) { + var msg = '\n ' + color('diff added', '+ expected') + ' ' + color('diff removed', '- actual: failed to generate Mocha diff') + '\n'; + return msg; + } + }; + /** + * Outputs the given `failures` as a list. + * + * @public + * @memberof Mocha.reporters.Base + * @variation 1 + * @param {Object[]} failures - Each is Test instance with corresponding + * Error property + */ + + + exports.list = function (failures) { + var multipleErr, multipleTest; + Base.consoleLog(); + failures.forEach(function (test, i) { + // format + var fmt = color('error title', ' %s) %s:\n') + color('error message', ' %s') + color('error stack', '\n%s\n'); // msg + + var msg; + var err; + + if (test.err && test.err.multiple) { + if (multipleTest !== test) { + multipleTest = test; + multipleErr = [test.err].concat(test.err.multiple); + } + + err = multipleErr.shift(); + } else { + err = test.err; + } + + var message; + + if (typeof err.inspect === 'function') { + message = err.inspect() + ''; + } else if (err.message && typeof err.message.toString === 'function') { + message = err.message + ''; + } else { + message = ''; + } + + var stack = err.stack || message; + var index = message ? stack.indexOf(message) : -1; + + if (index === -1) { + msg = message; + } else { + index += message.length; + msg = stack.slice(0, index); // remove msg from stack + + stack = stack.slice(index + 1); + } // uncaught + + + if (err.uncaught) { + msg = 'Uncaught ' + msg; + } // explicitly show diff + + + if (!exports.hideDiff && showDiff(err)) { + stringifyDiffObjs(err); + fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); + var match = message.match(/^([^:]+): expected/); + msg = '\n ' + color('error message', match ? match[1] : msg); + msg += generateDiff(err.actual, err.expected); + } // indent stack trace + + + stack = stack.replace(/^/gm, ' '); // indented test title + + var testTitle = ''; + test.titlePath().forEach(function (str, index) { + if (index !== 0) { + testTitle += '\n '; + } + + for (var i = 0; i < index; i++) { + testTitle += ' '; + } + + testTitle += str; + }); + Base.consoleLog(fmt, i + 1, testTitle, msg, stack); + }); + }; + /** + * Constructs a new `Base` reporter instance. + * + * @description + * All other reporters generally inherit from this reporter. + * + * @public + * @class + * @memberof Mocha.reporters + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + + function Base(runner, options) { + var failures = this.failures = []; + + if (!runner) { + throw new TypeError('Missing runner argument'); + } + + this.options = options || {}; + this.runner = runner; + this.stats = runner.stats; // assigned so Reporters keep a closer reference + + var maxDiffSizeOpt = this.options.reporterOption && this.options.reporterOption.maxDiffSize; + + if (maxDiffSizeOpt !== undefined && !isNaN(Number(maxDiffSizeOpt))) { + exports.maxDiffSize = Number(maxDiffSizeOpt); + } + + runner.on(EVENT_TEST_PASS, function (test) { + if (test.duration > test.slow()) { + test.speed = 'slow'; + } else if (test.duration > test.slow() / 2) { + test.speed = 'medium'; + } else { + test.speed = 'fast'; + } + }); + runner.on(EVENT_TEST_FAIL, function (test, err) { + if (showDiff(err)) { + stringifyDiffObjs(err); + } // more than one error per test + + + if (test.err && err instanceof Error) { + test.err.multiple = (test.err.multiple || []).concat(err); + } else { + test.err = err; + } + + failures.push(test); + }); + } + /** + * Outputs common epilogue used by many of the bundled reporters. + * + * @public + * @memberof Mocha.reporters + */ + + + Base.prototype.epilogue = function () { + var stats = this.stats; + var fmt; + Base.consoleLog(); // passes + + fmt = color('bright pass', ' ') + color('green', ' %d passing') + color('light', ' (%s)'); + Base.consoleLog(fmt, stats.passes || 0, ms$1(stats.duration)); // pending + + if (stats.pending) { + fmt = color('pending', ' ') + color('pending', ' %d pending'); + Base.consoleLog(fmt, stats.pending); + } // failures + + + if (stats.failures) { + fmt = color('fail', ' %d failing'); + Base.consoleLog(fmt, stats.failures); + Base.list(this.failures); + Base.consoleLog(); + } + + Base.consoleLog(); + }; + /** + * Pads the given `str` to `len`. + * + * @private + * @param {string} str + * @param {string} len + * @return {string} + */ + + + function pad(str, len) { + str = String(str); + return Array(len - str.length + 1).join(' ') + str; + } + /** + * Returns inline diff between 2 strings with coloured ANSI output. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} Diff + */ + + + function inlineDiff(actual, expected) { + var msg = errorDiff(actual, expected); // linenos + + var lines = msg.split('\n'); + + if (lines.length > 4) { + var width = String(lines.length).length; + msg = lines.map(function (str, i) { + return pad(++i, width) + ' |' + ' ' + str; + }).join('\n'); + } // legend + + + msg = '\n' + color('diff removed inline', 'actual') + ' ' + color('diff added inline', 'expected') + '\n\n' + msg + '\n'; // indent + + msg = msg.replace(/^/gm, ' '); + return msg; + } + /** + * Returns unified diff between two strings with coloured ANSI output. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} The diff. + */ + + + function unifiedDiff(actual, expected) { + var indent = ' '; + + function cleanUp(line) { + if (line[0] === '+') { + return indent + colorLines('diff added', line); + } + + if (line[0] === '-') { + return indent + colorLines('diff removed', line); + } + + if (line.match(/@@/)) { + return '--'; + } + + if (line.match(/\\ No newline/)) { + return null; + } + + return indent + line; + } + + function notBlank(line) { + return typeof line !== 'undefined' && line !== null; + } + + var msg = diff$1.createPatch('string', actual, expected); + var lines = msg.split('\n').splice(5); + return '\n ' + colorLines('diff added', '+ expected') + ' ' + colorLines('diff removed', '- actual') + '\n\n' + lines.map(cleanUp).filter(notBlank).join('\n'); + } + /** + * Returns character diff for `err`. + * + * @private + * @param {String} actual + * @param {String} expected + * @return {string} the diff + */ + + + function errorDiff(actual, expected) { + return diff$1.diffWordsWithSpace(actual, expected).map(function (str) { + if (str.added) { + return colorLines('diff added inline', str.value); + } + + if (str.removed) { + return colorLines('diff removed inline', str.value); + } + + return str.value; + }).join(''); + } + /** + * Colors lines for `str`, using the color `name`. + * + * @private + * @param {string} name + * @param {string} str + * @return {string} + */ + + + function colorLines(name, str) { + return str.split('\n').map(function (str) { + return color(name, str); + }).join('\n'); + } + /** + * Object#toString reference. + */ + + + var objToString = Object.prototype.toString; + /** + * Checks that a / b have the same type. + * + * @private + * @param {Object} a + * @param {Object} b + * @return {boolean} + */ + + function sameType(a, b) { + return objToString.call(a) === objToString.call(b); + } + + Base.consoleLog = consoleLog; + Base["abstract"] = true; + }); + + var dot = createCommonjsModule(function (module, exports) { + /** + * @module Dot + */ + + /** + * Module dependencies. + */ + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_RUN_END = constants.EVENT_RUN_END; + /** + * Expose `Dot`. + */ + + module.exports = Dot; + /** + * Constructs a new `Dot` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Dot(runner, options) { + base.call(this, runner, options); + var self = this; + var width = base.window.width * 0.75 | 0; + var n = -1; + runner.on(EVENT_RUN_BEGIN, function () { + process$4.stdout.write('\n'); + }); + runner.on(EVENT_TEST_PENDING, function () { + if (++n % width === 0) { + process$4.stdout.write('\n '); + } + + process$4.stdout.write(base.color('pending', base.symbols.comma)); + }); + runner.on(EVENT_TEST_PASS, function (test) { + if (++n % width === 0) { + process$4.stdout.write('\n '); + } + + if (test.speed === 'slow') { + process$4.stdout.write(base.color('bright yellow', base.symbols.dot)); + } else { + process$4.stdout.write(base.color(test.speed, base.symbols.dot)); + } + }); + runner.on(EVENT_TEST_FAIL, function () { + if (++n % width === 0) { + process$4.stdout.write('\n '); + } + + process$4.stdout.write(base.color('fail', base.symbols.bang)); + }); + runner.once(EVENT_RUN_END, function () { + process$4.stdout.write('\n'); + self.epilogue(); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(Dot, base); + Dot.description = 'dot matrix representation'; + }); + + var doc = createCommonjsModule(function (module, exports) { + /** + * @module Doc + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + /** + * Expose `Doc`. + */ + + module.exports = Doc; + /** + * Constructs a new `Doc` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Doc(runner, options) { + base.call(this, runner, options); + var indents = 2; + + function indent() { + return Array(indents).join(' '); + } + + runner.on(EVENT_SUITE_BEGIN, function (suite) { + if (suite.root) { + return; + } + + ++indents; + base.consoleLog('%s
        ', indent()); + ++indents; + base.consoleLog('%s

        %s

        ', indent(), utils.escape(suite.title)); + base.consoleLog('%s
        ', indent()); + }); + runner.on(EVENT_SUITE_END, function (suite) { + if (suite.root) { + return; + } + + base.consoleLog('%s
        ', indent()); + --indents; + base.consoleLog('%s
        ', indent()); + --indents; + }); + runner.on(EVENT_TEST_PASS, function (test) { + base.consoleLog('%s
        %s
        ', indent(), utils.escape(test.title)); + base.consoleLog('%s
        %s
        ', indent(), utils.escape(test.file)); + var code = utils.escape(utils.clean(test.body)); + base.consoleLog('%s
        %s
        ', indent(), code); + }); + runner.on(EVENT_TEST_FAIL, function (test, err) { + base.consoleLog('%s
        %s
        ', indent(), utils.escape(test.title)); + base.consoleLog('%s
        %s
        ', indent(), utils.escape(test.file)); + var code = utils.escape(utils.clean(test.body)); + base.consoleLog('%s
        %s
        ', indent(), code); + base.consoleLog('%s
        %s
        ', indent(), utils.escape(err)); + }); + } + + Doc.description = 'HTML documentation'; + }); + + var tap = createCommonjsModule(function (module, exports) { + /** + * @module TAP + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var inherits = utils.inherits; + var sprintf = util.format; + /** + * Expose `TAP`. + */ + + module.exports = TAP; + /** + * Constructs a new `TAP` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function TAP(runner, options) { + base.call(this, runner, options); + var self = this; + var n = 1; + var tapVersion = '12'; + + if (options && options.reporterOptions) { + if (options.reporterOptions.tapVersion) { + tapVersion = options.reporterOptions.tapVersion.toString(); + } + } + + this._producer = createProducer(tapVersion); + runner.once(EVENT_RUN_BEGIN, function () { + self._producer.writeVersion(); + }); + runner.on(EVENT_TEST_END, function () { + ++n; + }); + runner.on(EVENT_TEST_PENDING, function (test) { + self._producer.writePending(n, test); + }); + runner.on(EVENT_TEST_PASS, function (test) { + self._producer.writePass(n, test); + }); + runner.on(EVENT_TEST_FAIL, function (test, err) { + self._producer.writeFail(n, test, err); + }); + runner.once(EVENT_RUN_END, function () { + self._producer.writeEpilogue(runner.stats); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(TAP, base); + /** + * Returns a TAP-safe title of `test`. + * + * @private + * @param {Test} test - Test instance. + * @return {String} title with any hash character removed + */ + + function title(test) { + return test.fullTitle().replace(/#/g, ''); + } + /** + * Writes newline-terminated formatted string to reporter output stream. + * + * @private + * @param {string} format - `printf`-like format string + * @param {...*} [varArgs] - Format string arguments + */ + + + function println(format, varArgs) { + var vargs = Array.from(arguments); + vargs[0] += '\n'; + process$4.stdout.write(sprintf.apply(null, vargs)); + } + /** + * Returns a `tapVersion`-appropriate TAP producer instance, if possible. + * + * @private + * @param {string} tapVersion - Version of TAP specification to produce. + * @returns {TAPProducer} specification-appropriate instance + * @throws {Error} if specification version has no associated producer. + */ + + + function createProducer(tapVersion) { + var producers = { + 12: new TAP12Producer(), + 13: new TAP13Producer() + }; + var producer = producers[tapVersion]; + + if (!producer) { + throw new Error('invalid or unsupported TAP version: ' + JSON.stringify(tapVersion)); + } + + return producer; + } + /** + * @summary + * Constructs a new TAPProducer. + * + * @description + * Only to be used as an abstract base class. + * + * @private + * @constructor + */ + + + function TAPProducer() {} + /** + * Writes the TAP version to reporter output stream. + * + * @abstract + */ + + + TAPProducer.prototype.writeVersion = function () {}; + /** + * Writes the plan to reporter output stream. + * + * @abstract + * @param {number} ntests - Number of tests that are planned to run. + */ + + + TAPProducer.prototype.writePlan = function (ntests) { + println('%d..%d', 1, ntests); + }; + /** + * Writes that test passed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that passed. + * @param {Test} test - Instance containing test information. + */ + + + TAPProducer.prototype.writePass = function (n, test) { + println('ok %d %s', n, title(test)); + }; + /** + * Writes that test was skipped to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that was skipped. + * @param {Test} test - Instance containing test information. + */ + + + TAPProducer.prototype.writePending = function (n, test) { + println('ok %d %s # SKIP -', n, title(test)); + }; + /** + * Writes that test failed to reporter output stream. + * + * @abstract + * @param {number} n - Index of test that failed. + * @param {Test} test - Instance containing test information. + * @param {Error} err - Reason the test failed. + */ + + + TAPProducer.prototype.writeFail = function (n, test, err) { + println('not ok %d %s', n, title(test)); + }; + /** + * Writes the summary epilogue to reporter output stream. + * + * @abstract + * @param {Object} stats - Object containing run statistics. + */ + + + TAPProducer.prototype.writeEpilogue = function (stats) { + // :TBD: Why is this not counting pending tests? + println('# tests ' + (stats.passes + stats.failures)); + println('# pass ' + stats.passes); // :TBD: Why are we not showing pending results? + + println('# fail ' + stats.failures); + this.writePlan(stats.passes + stats.failures + stats.pending); + }; + /** + * @summary + * Constructs a new TAP12Producer. + * + * @description + * Produces output conforming to the TAP12 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-specification.html|Specification} + */ + + + function TAP12Producer() { + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + + if (err.message) { + println(err.message.replace(/^/gm, ' ')); + } + + if (err.stack) { + println(err.stack.replace(/^/gm, ' ')); + } + }; + } + /** + * Inherit from `TAPProducer.prototype`. + */ + + + inherits(TAP12Producer, TAPProducer); + /** + * @summary + * Constructs a new TAP13Producer. + * + * @description + * Produces output conforming to the TAP13 specification. + * + * @private + * @constructor + * @extends TAPProducer + * @see {@link https://testanything.org/tap-version-13-specification.html|Specification} + */ + + function TAP13Producer() { + /** + * Writes the TAP version to reporter output stream. + * @override + */ + this.writeVersion = function () { + println('TAP version 13'); + }; + /** + * Writes that test failed to reporter output stream, with error formatting. + * @override + */ + + + this.writeFail = function (n, test, err) { + TAPProducer.prototype.writeFail.call(this, n, test, err); + var emitYamlBlock = err.message != null || err.stack != null; + + if (emitYamlBlock) { + println(indent(1) + '---'); + + if (err.message) { + println(indent(2) + 'message: |-'); + println(err.message.replace(/^/gm, indent(3))); + } + + if (err.stack) { + println(indent(2) + 'stack: |-'); + println(err.stack.replace(/^/gm, indent(3))); + } + + println(indent(1) + '...'); + } + }; + + function indent(level) { + return Array(level + 1).join(' '); + } + } + /** + * Inherit from `TAPProducer.prototype`. + */ + + + inherits(TAP13Producer, TAPProducer); + TAP.description = 'TAP-compatible output'; + }); + + var fs = {}; + + var json = createCommonjsModule(function (module, exports) { + /** + * @module JSON + */ + + /** + * Module dependencies. + */ + + var createUnsupportedError = errors.createUnsupportedError; + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var EVENT_RUN_END = constants.EVENT_RUN_END; + /** + * Expose `JSON`. + */ + + module.exports = JSONReporter; + /** + * Constructs a new `JSON` reporter instance. + * + * @public + * @class JSON + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function JSONReporter(runner) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + base.call(this, runner, options); + var self = this; + var tests = []; + var pending = []; + var failures = []; + var passes = []; + var output; + + if (options.reporterOption && options.reporterOption.output) { + if (utils.isBrowser()) { + throw createUnsupportedError('file output not supported in browser'); + } + + output = options.reporterOption.output; + } + + runner.on(EVENT_TEST_END, function (test) { + tests.push(test); + }); + runner.on(EVENT_TEST_PASS, function (test) { + passes.push(test); + }); + runner.on(EVENT_TEST_FAIL, function (test) { + failures.push(test); + }); + runner.on(EVENT_TEST_PENDING, function (test) { + pending.push(test); + }); + runner.once(EVENT_RUN_END, function () { + var obj = { + stats: self.stats, + tests: tests.map(clean), + pending: pending.map(clean), + failures: failures.map(clean), + passes: passes.map(clean) + }; + runner.testResults = obj; + var json = JSON.stringify(obj, null, 2); + + if (output) { + try { + fs.mkdirSync(path.dirname(output), { + recursive: true + }); + fs.writeFileSync(output, json); + } catch (err) { + console.error("".concat(base.symbols.err, " [mocha] writing output to \"").concat(output, "\" failed: ").concat(err.message, "\n")); + process$4.stdout.write(json); + } + } else { + process$4.stdout.write(json); + } + }); + } + /** + * Return a plain-object representation of `test` + * free of cyclic properties etc. + * + * @private + * @param {Object} test + * @return {Object} + */ + + + function clean(test) { + var err = test.err || {}; + + if (err instanceof Error) { + err = errorJSON(err); + } + + return { + title: test.title, + fullTitle: test.fullTitle(), + file: test.file, + duration: test.duration, + currentRetry: test.currentRetry(), + speed: test.speed, + err: cleanCycles(err) + }; + } + /** + * Replaces any circular references inside `obj` with '[object Object]' + * + * @private + * @param {Object} obj + * @return {Object} + */ + + + function cleanCycles(obj) { + var cache = []; + return JSON.parse(JSON.stringify(obj, function (key, value) { + if (_typeof(value) === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Instead of going in a circle, we'll print [object Object] + return '' + value; + } + + cache.push(value); + } + + return value; + })); + } + /** + * Transform an Error object into a JSON object. + * + * @private + * @param {Error} err + * @return {Object} + */ + + + function errorJSON(err) { + var res = {}; + Object.getOwnPropertyNames(err).forEach(function (key) { + res[key] = err[key]; + }, err); + return res; + } + + JSONReporter.description = 'single JSON object'; + }); + + var RangeError$2 = global_1.RangeError; + + // `String.prototype.repeat` method implementation + // https://tc39.es/ecma262/#sec-string.prototype.repeat + var stringRepeat = function repeat(count) { + var str = toString_1(requireObjectCoercible(this)); + var result = ''; + var n = toIntegerOrInfinity(count); + if (n < 0 || n == Infinity) throw RangeError$2('Wrong number of repetitions'); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + return result; + }; + + var RangeError$1 = global_1.RangeError; + var String$1 = global_1.String; + var floor = Math.floor; + var repeat = functionUncurryThis(stringRepeat); + var stringSlice = functionUncurryThis(''.slice); + var un$ToFixed = functionUncurryThis(1.0.toFixed); + + var pow = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); + }; + + var log = function (x) { + var n = 0; + var x2 = x; + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + while (x2 >= 2) { + n += 1; + x2 /= 2; + } return n; + }; + + var multiply = function (data, n, c) { + var index = -1; + var c2 = c; + while (++index < 6) { + c2 += n * data[index]; + data[index] = c2 % 1e7; + c2 = floor(c2 / 1e7); + } + }; + + var divide = function (data, n) { + var index = 6; + var c = 0; + while (--index >= 0) { + c += data[index]; + data[index] = floor(c / n); + c = (c % n) * 1e7; + } + }; + + var dataToString = function (data) { + var index = 6; + var s = ''; + while (--index >= 0) { + if (s !== '' || index === 0 || data[index] !== 0) { + var t = String$1(data[index]); + s = s === '' ? t : s + repeat('0', 7 - t.length) + t; + } + } return s; + }; + + var FORCED = fails(function () { + return un$ToFixed(0.00008, 3) !== '0.000' || + un$ToFixed(0.9, 0) !== '1' || + un$ToFixed(1.255, 2) !== '1.25' || + un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128'; + }) || !fails(function () { + // V8 ~ Android 4.3- + un$ToFixed({}); + }); + + // `Number.prototype.toFixed` method + // https://tc39.es/ecma262/#sec-number.prototype.tofixed + _export({ target: 'Number', proto: true, forced: FORCED }, { + toFixed: function toFixed(fractionDigits) { + var number = thisNumberValue(this); + var fractDigits = toIntegerOrInfinity(fractionDigits); + var data = [0, 0, 0, 0, 0, 0]; + var sign = ''; + var result = '0'; + var e, z, j, k; + + // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation + if (fractDigits < 0 || fractDigits > 20) throw RangeError$1('Incorrect fraction digits'); + // eslint-disable-next-line no-self-compare -- NaN check + if (number != number) return 'NaN'; + if (number <= -1e21 || number >= 1e21) return String$1(number); + if (number < 0) { + sign = '-'; + number = -number; + } + if (number > 1e-21) { + e = log(number * pow(2, 69, 1)) - 69; + z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if (e > 0) { + multiply(data, 0, z); + j = fractDigits; + while (j >= 7) { + multiply(data, 1e7, 0); + j -= 7; + } + multiply(data, pow(10, j, 1), 0); + j = e - 1; + while (j >= 23) { + divide(data, 1 << 23); + j -= 23; + } + divide(data, 1 << j); + multiply(data, 1, 1); + divide(data, 2); + result = dataToString(data); + } else { + multiply(data, 0, z); + multiply(data, 1 << -e, 0); + result = dataToString(data) + repeat('0', fractDigits); + } + } + if (fractDigits > 0) { + k = result.length; + result = sign + (k <= fractDigits + ? '0.' + repeat('0', fractDigits - k) + result + : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits)); + } else { + result = sign + result; + } return result; + } + }); + + /** + @module browser/Progress + */ + + /** + * Expose `Progress`. + */ + + var progress$1 = Progress; + /** + * Initialize a new `Progress` indicator. + */ + + function Progress() { + this.percent = 0; + this.size(0); + this.fontSize(11); + this.font('helvetica, arial, sans-serif'); + } + /** + * Set progress size to `size`. + * + * @public + * @param {number} size + * @return {Progress} Progress instance. + */ + + + Progress.prototype.size = function (size) { + this._size = size; + return this; + }; + /** + * Set text to `text`. + * + * @public + * @param {string} text + * @return {Progress} Progress instance. + */ + + + Progress.prototype.text = function (text) { + this._text = text; + return this; + }; + /** + * Set font size to `size`. + * + * @public + * @param {number} size + * @return {Progress} Progress instance. + */ + + + Progress.prototype.fontSize = function (size) { + this._fontSize = size; + return this; + }; + /** + * Set font to `family`. + * + * @param {string} family + * @return {Progress} Progress instance. + */ + + + Progress.prototype.font = function (family) { + this._font = family; + return this; + }; + /** + * Update percentage to `n`. + * + * @param {number} n + * @return {Progress} Progress instance. + */ + + + Progress.prototype.update = function (n) { + this.percent = n; + return this; + }; + /** + * Draw on `ctx`. + * + * @param {CanvasRenderingContext2d} ctx + * @return {Progress} Progress instance. + */ + + + Progress.prototype.draw = function (ctx) { + try { + var percent = Math.min(this.percent, 100); + var size = this._size; + var half = size / 2; + var x = half; + var y = half; + var rad = half - 1; + var fontSize = this._fontSize; + ctx.font = fontSize + 'px ' + this._font; + var angle = Math.PI * 2 * (percent / 100); + ctx.clearRect(0, 0, size, size); // outer circle + + ctx.strokeStyle = '#9f9f9f'; + ctx.beginPath(); + ctx.arc(x, y, rad, 0, angle, false); + ctx.stroke(); // inner circle + + ctx.strokeStyle = '#eee'; + ctx.beginPath(); + ctx.arc(x, y, rad - 1, 0, angle, true); + ctx.stroke(); // text + + var text = this._text || (percent | 0) + '%'; + var w = ctx.measureText(text).width; + ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1); + } catch (ignore) {// don't fail if we can't render progress + } + + return this; + }; + + var html = createCommonjsModule(function (module, exports) { + /* eslint-env browser */ + + /** + * @module HTML + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var escape = utils.escape; + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + var Date = commonjsGlobal.Date; + /** + * Expose `HTML`. + */ + + module.exports = HTML; + /** + * Stats template. + */ + + var statsTemplate = '
        '; + var playIcon = '‣'; + /** + * Constructs a new `HTML` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function HTML(runner, options) { + base.call(this, runner, options); + var self = this; + var stats = this.stats; + var stat = fragment(statsTemplate); + var items = stat.getElementsByTagName('li'); + var passes = items[1].getElementsByTagName('em')[0]; + var passesLink = items[1].getElementsByTagName('a')[0]; + var failures = items[2].getElementsByTagName('em')[0]; + var failuresLink = items[2].getElementsByTagName('a')[0]; + var duration = items[3].getElementsByTagName('em')[0]; + var canvas = stat.getElementsByTagName('canvas')[0]; + var report = fragment('
          '); + var stack = [report]; + var progress; + var ctx; + var root = document.getElementById('mocha'); + + if (canvas.getContext) { + var ratio = window.devicePixelRatio || 1; + canvas.style.width = canvas.width; + canvas.style.height = canvas.height; + canvas.width *= ratio; + canvas.height *= ratio; + ctx = canvas.getContext('2d'); + ctx.scale(ratio, ratio); + progress = new progress$1(); + } + + if (!root) { + return error('#mocha div missing, add it to your document'); + } // pass toggle + + + on(passesLink, 'click', function (evt) { + evt.preventDefault(); + unhide(); + var name = /pass/.test(report.className) ? '' : ' pass'; + report.className = report.className.replace(/fail|pass/g, '') + name; + + if (report.className.trim()) { + hideSuitesWithout('test pass'); + } + }); // failure toggle + + on(failuresLink, 'click', function (evt) { + evt.preventDefault(); + unhide(); + var name = /fail/.test(report.className) ? '' : ' fail'; + report.className = report.className.replace(/fail|pass/g, '') + name; + + if (report.className.trim()) { + hideSuitesWithout('test fail'); + } + }); + root.appendChild(stat); + root.appendChild(report); + + if (progress) { + progress.size(40); + } + + runner.on(EVENT_SUITE_BEGIN, function (suite) { + if (suite.root) { + return; + } // suite + + + var url = self.suiteURL(suite); + var el = fragment('
        • %s

        • ', url, escape(suite.title)); // container + + stack[0].appendChild(el); + stack.unshift(document.createElement('ul')); + el.appendChild(stack[0]); + }); + runner.on(EVENT_SUITE_END, function (suite) { + if (suite.root) { + updateStats(); + return; + } + + stack.shift(); + }); + runner.on(EVENT_TEST_PASS, function (test) { + var url = self.testURL(test); + var markup = '
        • %e%ems ' + '' + playIcon + '

        • '; + var el = fragment(markup, test.speed, test.title, test.duration, url); + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); + }); + runner.on(EVENT_TEST_FAIL, function (test) { + var el = fragment('
        • %e ' + playIcon + '

        • ', test.title, self.testURL(test)); + var stackString; // Note: Includes leading newline + + var message = test.err.toString(); // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we + // check for the result of the stringifying. + + if (message === '[object Error]') { + message = test.err.message; + } + + if (test.err.stack) { + var indexOfMessage = test.err.stack.indexOf(test.err.message); + + if (indexOfMessage === -1) { + stackString = test.err.stack; + } else { + stackString = test.err.stack.substr(test.err.message.length + indexOfMessage); + } + } else if (test.err.sourceURL && test.err.line !== undefined) { + // Safari doesn't give you a stack. Let's at least provide a source line. + stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')'; + } + + stackString = stackString || ''; + + if (test.err.htmlMessage && stackString) { + el.appendChild(fragment('
          %s\n
          %e
          ', test.err.htmlMessage, stackString)); + } else if (test.err.htmlMessage) { + el.appendChild(fragment('
          %s
          ', test.err.htmlMessage)); + } else { + el.appendChild(fragment('
          %e%e
          ', message, stackString)); + } + + self.addCodeToggle(el, test.body); + appendToStack(el); + updateStats(); + }); + runner.on(EVENT_TEST_PENDING, function (test) { + var el = fragment('
        • %e

        • ', test.title); + appendToStack(el); + updateStats(); + }); + + function appendToStack(el) { + // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. + if (stack[0]) { + stack[0].appendChild(el); + } + } + + function updateStats() { + // TODO: add to stats + var percent = stats.tests / runner.total * 100 | 0; + + if (progress) { + progress.update(percent).draw(ctx); + } // update stats + + + var ms = new Date() - stats.start; + text(passes, stats.passes); + text(failures, stats.failures); + text(duration, (ms / 1000).toFixed(2)); + } + } + /** + * Makes a URL, preserving querystring ("search") parameters. + * + * @param {string} s + * @return {string} A new URL. + */ + + + function makeUrl(s) { + var search = window.location.search; // Remove previous grep query parameter if present + + if (search) { + search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?'); + } + + return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeStringRegexp(s)); + } + /** + * Provide suite URL. + * + * @param {Object} [suite] + */ + + + HTML.prototype.suiteURL = function (suite) { + return makeUrl(suite.fullTitle()); + }; + /** + * Provide test URL. + * + * @param {Object} [test] + */ + + + HTML.prototype.testURL = function (test) { + return makeUrl(test.fullTitle()); + }; + /** + * Adds code toggle functionality for the provided test's list element. + * + * @param {HTMLLIElement} el + * @param {string} contents + */ + + + HTML.prototype.addCodeToggle = function (el, contents) { + var h2 = el.getElementsByTagName('h2')[0]; + on(h2, 'click', function () { + pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; + }); + var pre = fragment('
          %e
          ', utils.clean(contents)); + el.appendChild(pre); + pre.style.display = 'none'; + }; + /** + * Display error `msg`. + * + * @param {string} msg + */ + + + function error(msg) { + document.body.appendChild(fragment('
          %s
          ', msg)); + } + /** + * Return a DOM fragment from `html`. + * + * @param {string} html + */ + + + function fragment(html) { + var args = arguments; + var div = document.createElement('div'); + var i = 1; + div.innerHTML = html.replace(/%([se])/g, function (_, type) { + switch (type) { + case 's': + return String(args[i++]); + + case 'e': + return escape(args[i++]); + // no default + } + }); + return div.firstChild; + } + /** + * Check for suites that do not have elements + * with `classname`, and hide them. + * + * @param {text} classname + */ + + + function hideSuitesWithout(classname) { + var suites = document.getElementsByClassName('suite'); + + for (var i = 0; i < suites.length; i++) { + var els = suites[i].getElementsByClassName(classname); + + if (!els.length) { + suites[i].className += ' hidden'; + } + } + } + /** + * Unhide .hidden suites. + */ + + + function unhide() { + var els = document.getElementsByClassName('suite hidden'); + + while (els.length > 0) { + els[0].className = els[0].className.replace('suite hidden', 'suite'); + } + } + /** + * Set an element's text contents. + * + * @param {HTMLElement} el + * @param {string} contents + */ + + + function text(el, contents) { + if (el.textContent) { + el.textContent = contents; + } else { + el.innerText = contents; + } + } + /** + * Listen on `event` with callback `fn`. + */ + + + function on(el, event, fn) { + if (el.addEventListener) { + el.addEventListener(event, fn, false); + } else { + el.attachEvent('on' + event, fn); + } + } + + HTML.browserOnly = true; + }); + + var list = createCommonjsModule(function (module, exports) { + /** + * @module List + */ + + /** + * Module dependencies. + */ + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_BEGIN = constants.EVENT_TEST_BEGIN; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var color = base.color; + var cursor = base.cursor; + /** + * Expose `List`. + */ + + module.exports = List; + /** + * Constructs a new `List` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function List(runner, options) { + base.call(this, runner, options); + var self = this; + var n = 0; + runner.on(EVENT_RUN_BEGIN, function () { + base.consoleLog(); + }); + runner.on(EVENT_TEST_BEGIN, function (test) { + process$4.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); + }); + runner.on(EVENT_TEST_PENDING, function (test) { + var fmt = color('checkmark', ' -') + color('pending', ' %s'); + base.consoleLog(fmt, test.fullTitle()); + }); + runner.on(EVENT_TEST_PASS, function (test) { + var fmt = color('checkmark', ' ' + base.symbols.ok) + color('pass', ' %s: ') + color(test.speed, '%dms'); + cursor.CR(); + base.consoleLog(fmt, test.fullTitle(), test.duration); + }); + runner.on(EVENT_TEST_FAIL, function (test) { + cursor.CR(); + base.consoleLog(color('fail', ' %d) %s'), ++n, test.fullTitle()); + }); + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(List, base); + List.description = 'like "spec" reporter but flat'; + }); + + var min = createCommonjsModule(function (module, exports) { + /** + * @module Min + */ + + /** + * Module dependencies. + */ + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + /** + * Expose `Min`. + */ + + module.exports = Min; + /** + * Constructs a new `Min` reporter instance. + * + * @description + * This minimal test reporter is best used with '--watch'. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Min(runner, options) { + base.call(this, runner, options); + runner.on(EVENT_RUN_BEGIN, function () { + // clear screen + process$4.stdout.write("\x1B[2J"); // set cursor position + + process$4.stdout.write("\x1B[1;3H"); + }); + runner.once(EVENT_RUN_END, this.epilogue.bind(this)); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(Min, base); + Min.description = 'essentially just a summary'; + }); + + var spec = createCommonjsModule(function (module, exports) { + /** + * @module Spec + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_SUITE_END = constants.EVENT_SUITE_END; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var inherits = utils.inherits; + var color = base.color; + /** + * Expose `Spec`. + */ + + module.exports = Spec; + /** + * Constructs a new `Spec` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Spec(runner, options) { + base.call(this, runner, options); + var self = this; + var indents = 0; + var n = 0; + + function indent() { + return Array(indents).join(' '); + } + + runner.on(EVENT_RUN_BEGIN, function () { + base.consoleLog(); + }); + runner.on(EVENT_SUITE_BEGIN, function (suite) { + ++indents; + base.consoleLog(color('suite', '%s%s'), indent(), suite.title); + }); + runner.on(EVENT_SUITE_END, function () { + --indents; + + if (indents === 1) { + base.consoleLog(); + } + }); + runner.on(EVENT_TEST_PENDING, function (test) { + var fmt = indent() + color('pending', ' - %s'); + base.consoleLog(fmt, test.title); + }); + runner.on(EVENT_TEST_PASS, function (test) { + var fmt; + + if (test.speed === 'fast') { + fmt = indent() + color('checkmark', ' ' + base.symbols.ok) + color('pass', ' %s'); + base.consoleLog(fmt, test.title); + } else { + fmt = indent() + color('checkmark', ' ' + base.symbols.ok) + color('pass', ' %s') + color(test.speed, ' (%dms)'); + base.consoleLog(fmt, test.title, test.duration); + } + }); + runner.on(EVENT_TEST_FAIL, function (test) { + base.consoleLog(indent() + color('fail', ' %d) %s'), ++n, test.title); + }); + runner.once(EVENT_RUN_END, self.epilogue.bind(self)); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(Spec, base); + Spec.description = 'hierarchical & verbose [default]'; + }); + + var nyan = createCommonjsModule(function (module, exports) { + /** + * @module Nyan + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var inherits = utils.inherits; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + /** + * Expose `Dot`. + */ + + module.exports = NyanCat; + /** + * Constructs a new `Nyan` reporter instance. + * + * @public + * @class Nyan + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function NyanCat(runner, options) { + base.call(this, runner, options); + var self = this; + var width = base.window.width * 0.75 | 0; + var nyanCatWidth = this.nyanCatWidth = 11; + this.colorIndex = 0; + this.numberOfLines = 4; + this.rainbowColors = self.generateColors(); + this.scoreboardWidth = 5; + this.tick = 0; + this.trajectories = [[], [], [], []]; + this.trajectoryWidthMax = width - nyanCatWidth; + runner.on(EVENT_RUN_BEGIN, function () { + base.cursor.hide(); + self.draw(); + }); + runner.on(EVENT_TEST_PENDING, function () { + self.draw(); + }); + runner.on(EVENT_TEST_PASS, function () { + self.draw(); + }); + runner.on(EVENT_TEST_FAIL, function () { + self.draw(); + }); + runner.once(EVENT_RUN_END, function () { + base.cursor.show(); + + for (var i = 0; i < self.numberOfLines; i++) { + write('\n'); + } + + self.epilogue(); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(NyanCat, base); + /** + * Draw the nyan cat + * + * @private + */ + + NyanCat.prototype.draw = function () { + this.appendRainbow(); + this.drawScoreboard(); + this.drawRainbow(); + this.drawNyanCat(); + this.tick = !this.tick; + }; + /** + * Draw the "scoreboard" showing the number + * of passes, failures and pending tests. + * + * @private + */ + + + NyanCat.prototype.drawScoreboard = function () { + var stats = this.stats; + + function draw(type, n) { + write(' '); + write(base.color(type, n)); + write('\n'); + } + + draw('green', stats.passes); + draw('fail', stats.failures); + draw('pending', stats.pending); + write('\n'); + this.cursorUp(this.numberOfLines); + }; + /** + * Append the rainbow. + * + * @private + */ + + + NyanCat.prototype.appendRainbow = function () { + var segment = this.tick ? '_' : '-'; + var rainbowified = this.rainbowify(segment); + + for (var index = 0; index < this.numberOfLines; index++) { + var trajectory = this.trajectories[index]; + + if (trajectory.length >= this.trajectoryWidthMax) { + trajectory.shift(); + } + + trajectory.push(rainbowified); + } + }; + /** + * Draw the rainbow. + * + * @private + */ + + + NyanCat.prototype.drawRainbow = function () { + var self = this; + this.trajectories.forEach(function (line) { + write("\x1B[" + self.scoreboardWidth + 'C'); + write(line.join('')); + write('\n'); + }); + this.cursorUp(this.numberOfLines); + }; + /** + * Draw the nyan cat + * + * @private + */ + + + NyanCat.prototype.drawNyanCat = function () { + var self = this; + var startWidth = this.scoreboardWidth + this.trajectories[0].length; + var dist = "\x1B[" + startWidth + 'C'; + var padding = ''; + write(dist); + write('_,------,'); + write('\n'); + write(dist); + padding = self.tick ? ' ' : ' '; + write('_|' + padding + '/\\_/\\ '); + write('\n'); + write(dist); + padding = self.tick ? '_' : '__'; + var tail = self.tick ? '~' : '^'; + write(tail + '|' + padding + this.face() + ' '); + write('\n'); + write(dist); + padding = self.tick ? ' ' : ' '; + write(padding + '"" "" '); + write('\n'); + this.cursorUp(this.numberOfLines); + }; + /** + * Draw nyan cat face. + * + * @private + * @return {string} + */ + + + NyanCat.prototype.face = function () { + var stats = this.stats; + + if (stats.failures) { + return '( x .x)'; + } else if (stats.pending) { + return '( o .o)'; + } else if (stats.passes) { + return '( ^ .^)'; + } + + return '( - .-)'; + }; + /** + * Move cursor up `n`. + * + * @private + * @param {number} n + */ + + + NyanCat.prototype.cursorUp = function (n) { + write("\x1B[" + n + 'A'); + }; + /** + * Move cursor down `n`. + * + * @private + * @param {number} n + */ + + + NyanCat.prototype.cursorDown = function (n) { + write("\x1B[" + n + 'B'); + }; + /** + * Generate rainbow colors. + * + * @private + * @return {Array} + */ + + + NyanCat.prototype.generateColors = function () { + var colors = []; + + for (var i = 0; i < 6 * 7; i++) { + var pi3 = Math.floor(Math.PI / 3); + var n = i * (1.0 / 6); + var r = Math.floor(3 * Math.sin(n) + 3); + var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); + var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); + colors.push(36 * r + 6 * g + b + 16); + } + + return colors; + }; + /** + * Apply rainbow to the given `str`. + * + * @private + * @param {string} str + * @return {string} + */ + + + NyanCat.prototype.rainbowify = function (str) { + if (!base.useColors) { + return str; + } + + var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length]; + this.colorIndex += 1; + return "\x1B[38;5;" + color + 'm' + str + "\x1B[0m"; + }; + /** + * Stdout helper. + * + * @param {string} string A message to write to stdout. + */ + + + function write(string) { + process$4.stdout.write(string); + } + + NyanCat.description = '"nyan cat"'; + }); + + var xunit = createCommonjsModule(function (module, exports) { + /** + * @module XUnit + */ + + /** + * Module dependencies. + */ + + var createUnsupportedError = errors.createUnsupportedError; + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var STATE_FAILED = runnable.constants.STATE_FAILED; + var inherits = utils.inherits; + var escape = utils.escape; + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + var Date = commonjsGlobal.Date; + /** + * Expose `XUnit`. + */ + + module.exports = XUnit; + /** + * Constructs a new `XUnit` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function XUnit(runner, options) { + base.call(this, runner, options); + var stats = this.stats; + var tests = []; + var self = this; // the name of the test suite, as it will appear in the resulting XML file + + var suiteName; // the default name of the test suite if none is provided + + var DEFAULT_SUITE_NAME = 'Mocha Tests'; + + if (options && options.reporterOptions) { + if (options.reporterOptions.output) { + if (!fs.createWriteStream) { + throw createUnsupportedError('file output not supported in browser'); + } + + fs.mkdirSync(path.dirname(options.reporterOptions.output), { + recursive: true + }); + self.fileStream = fs.createWriteStream(options.reporterOptions.output); + } // get the suite name from the reporter options (if provided) + + + suiteName = options.reporterOptions.suiteName; + } // fall back to the default suite name + + + suiteName = suiteName || DEFAULT_SUITE_NAME; + runner.on(EVENT_TEST_PENDING, function (test) { + tests.push(test); + }); + runner.on(EVENT_TEST_PASS, function (test) { + tests.push(test); + }); + runner.on(EVENT_TEST_FAIL, function (test) { + tests.push(test); + }); + runner.once(EVENT_RUN_END, function () { + self.write(tag('testsuite', { + name: suiteName, + tests: stats.tests, + failures: 0, + errors: stats.failures, + skipped: stats.tests - stats.failures - stats.passes, + timestamp: new Date().toUTCString(), + time: stats.duration / 1000 || 0 + }, false)); + tests.forEach(function (t) { + self.test(t); + }); + self.write(''); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(XUnit, base); + /** + * Override done to close the stream (if it's a file). + * + * @param failures + * @param {Function} fn + */ + + XUnit.prototype.done = function (failures, fn) { + if (this.fileStream) { + this.fileStream.end(function () { + fn(failures); + }); + } else { + fn(failures); + } + }; + /** + * Write out the given line. + * + * @param {string} line + */ + + + XUnit.prototype.write = function (line) { + if (this.fileStream) { + this.fileStream.write(line + '\n'); + } else if (_typeof(process$4) === 'object' && process$4.stdout) { + process$4.stdout.write(line + '\n'); + } else { + base.consoleLog(line); + } + }; + /** + * Output tag for the given `test.` + * + * @param {Test} test + */ + + + XUnit.prototype.test = function (test) { + base.useColors = false; + var attrs = { + classname: test.parent.fullTitle(), + name: test.title, + time: test.duration / 1000 || 0 + }; + + if (test.state === STATE_FAILED) { + var err = test.err; + var diff = !base.hideDiff && base.showDiff(err) ? '\n' + base.generateDiff(err.actual, err.expected) : ''; + this.write(tag('testcase', attrs, false, tag('failure', {}, false, escape(err.message) + escape(diff) + '\n' + escape(err.stack)))); + } else if (test.isPending()) { + this.write(tag('testcase', attrs, false, tag('skipped', {}, true))); + } else { + this.write(tag('testcase', attrs, true)); + } + }; + /** + * HTML tag helper. + * + * @param name + * @param attrs + * @param close + * @param content + * @return {string} + */ + + + function tag(name, attrs, close, content) { + var end = close ? '/>' : '>'; + var pairs = []; + var tag; + + for (var key in attrs) { + if (Object.prototype.hasOwnProperty.call(attrs, key)) { + pairs.push(key + '="' + escape(attrs[key]) + '"'); + } + } + + tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end; + + if (content) { + tag += content + '' + '\n'; + buf += title(suite.title) + '\n'; + }); + runner.on(EVENT_SUITE_END, function () { + --level; + }); + runner.on(EVENT_TEST_PASS, function (test) { + var code = utils.clean(test.body); + buf += test.title + '.\n'; + buf += '\n```js\n'; + buf += code + '\n'; + buf += '```\n\n'; + }); + runner.once(EVENT_RUN_END, function () { + process$4.stdout.write('# TOC\n'); + process$4.stdout.write(generateTOC(runner.suite)); + process$4.stdout.write(buf); + }); + } + + Markdown.description = 'GitHub Flavored Markdown'; + }); + + var progress = createCommonjsModule(function (module, exports) { + /** + * @module Progress + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var inherits = utils.inherits; + var color = base.color; + var cursor = base.cursor; + /** + * Expose `Progress`. + */ + + module.exports = Progress; + /** + * General progress bar color. + */ + + base.colors.progress = 90; + /** + * Constructs a new `Progress` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Progress(runner, options) { + base.call(this, runner, options); + var self = this; + var width = base.window.width * 0.5 | 0; + var total = runner.total; + var complete = 0; + var lastN = -1; // default chars + + options = options || {}; + var reporterOptions = options.reporterOptions || {}; + options.open = reporterOptions.open || '['; + options.complete = reporterOptions.complete || '▬'; + options.incomplete = reporterOptions.incomplete || base.symbols.dot; + options.close = reporterOptions.close || ']'; + options.verbose = reporterOptions.verbose || false; // tests started + + runner.on(EVENT_RUN_BEGIN, function () { + process$4.stdout.write('\n'); + cursor.hide(); + }); // tests complete + + runner.on(EVENT_TEST_END, function () { + complete++; + var percent = complete / total; + var n = width * percent | 0; + var i = width - n; + + if (n === lastN && !options.verbose) { + // Don't re-render the line if it hasn't changed + return; + } + + lastN = n; + cursor.CR(); + process$4.stdout.write("\x1B[J"); + process$4.stdout.write(color('progress', ' ' + options.open)); + process$4.stdout.write(Array(n).join(options.complete)); + process$4.stdout.write(Array(i).join(options.incomplete)); + process$4.stdout.write(color('progress', options.close)); + + if (options.verbose) { + process$4.stdout.write(color('progress', ' ' + complete + ' of ' + total)); + } + }); // tests are complete, output some stats + // and the failures if any + + runner.once(EVENT_RUN_END, function () { + cursor.show(); + process$4.stdout.write('\n'); + self.epilogue(); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(Progress, base); + Progress.description = 'a progress bar'; + }); + + var landing = createCommonjsModule(function (module, exports) { + /** + * @module Landing + */ + + /** + * Module dependencies. + */ + + var inherits = utils.inherits; + var constants = runner.constants; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_END = constants.EVENT_TEST_END; + var STATE_FAILED = runnable.constants.STATE_FAILED; + var cursor = base.cursor; + var color = base.color; + /** + * Expose `Landing`. + */ + + module.exports = Landing; + /** + * Airplane color. + */ + + base.colors.plane = 0; + /** + * Airplane crash color. + */ + + base.colors['plane crash'] = 31; + /** + * Runway color. + */ + + base.colors.runway = 90; + /** + * Constructs a new `Landing` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function Landing(runner, options) { + base.call(this, runner, options); + var self = this; + var width = base.window.width * 0.75 | 0; + var stream = process$4.stdout; + var plane = color('plane', '✈'); + var crashed = -1; + var n = 0; + var total = 0; + + function runway() { + var buf = Array(width).join('-'); + return ' ' + color('runway', buf); + } + + runner.on(EVENT_RUN_BEGIN, function () { + stream.write('\n\n\n '); + cursor.hide(); + }); + runner.on(EVENT_TEST_END, function (test) { + // check if the plane crashed + var col = crashed === -1 ? width * ++n / ++total | 0 : crashed; // show the crash + + if (test.state === STATE_FAILED) { + plane = color('plane crash', '✈'); + crashed = col; + } // render landing strip + + + stream.write("\x1B[" + (width + 1) + "D\x1B[2A"); + stream.write(runway()); + stream.write('\n '); + stream.write(color('runway', Array(col).join('⋅'))); + stream.write(plane); + stream.write(color('runway', Array(width - col).join('⋅') + '\n')); + stream.write(runway()); + stream.write("\x1B[0m"); + }); + runner.once(EVENT_RUN_END, function () { + cursor.show(); + process$4.stdout.write('\n'); + self.epilogue(); + }); // if cursor is hidden when we ctrl-C, then it will remain hidden unless... + + process$4.once('SIGINT', function () { + cursor.show(); + nextTick$1(function () { + process$4.kill(process$4.pid, 'SIGINT'); + }); + }); + } + /** + * Inherit from `Base.prototype`. + */ + + + inherits(Landing, base); + Landing.description = 'Unicode landing strip'; + }); + + var jsonStream = createCommonjsModule(function (module, exports) { + /** + * @module JSONStream + */ + + /** + * Module dependencies. + */ + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_RUN_END = constants.EVENT_RUN_END; + /** + * Expose `JSONStream`. + */ + + module.exports = JSONStream; + /** + * Constructs a new `JSONStream` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ + + function JSONStream(runner, options) { + base.call(this, runner, options); + var self = this; + var total = runner.total; + runner.once(EVENT_RUN_BEGIN, function () { + writeEvent(['start', { + total: total + }]); + }); + runner.on(EVENT_TEST_PASS, function (test) { + writeEvent(['pass', clean(test)]); + }); + runner.on(EVENT_TEST_FAIL, function (test, err) { + test = clean(test); + test.err = err.message; + test.stack = err.stack || null; + writeEvent(['fail', test]); + }); + runner.once(EVENT_RUN_END, function () { + writeEvent(['end', self.stats]); + }); + } + /** + * Mocha event to be written to the output stream. + * @typedef {Array} JSONStream~MochaEvent + */ + + /** + * Writes Mocha event to reporter output stream. + * + * @private + * @param {JSONStream~MochaEvent} event - Mocha event to be output. + */ + + + function writeEvent(event) { + process$4.stdout.write(JSON.stringify(event) + '\n'); + } + /** + * Returns an object literal representation of `test` + * free of cyclic properties, etc. + * + * @private + * @param {Test} test - Instance used as data source. + * @return {Object} object containing pared-down test instance data + */ + + + function clean(test) { + return { + title: test.title, + fullTitle: test.fullTitle(), + file: test.file, + duration: test.duration, + currentRetry: test.currentRetry(), + speed: test.speed + }; + } + + JSONStream.description = 'newline delimited JSON events'; + }); + + var reporters = createCommonjsModule(function (module, exports) { + // for dynamic (try/catch) requires, which Browserify doesn't handle. + + exports.Base = exports.base = base; + exports.Dot = exports.dot = dot; + exports.Doc = exports.doc = doc; + exports.TAP = exports.tap = tap; + exports.JSON = exports.json = json; + exports.HTML = exports.html = html; + exports.List = exports.list = list; + exports.Min = exports.min = min; + exports.Spec = exports.spec = spec; + exports.Nyan = exports.nyan = nyan; + exports.XUnit = exports.xunit = xunit; + exports.Markdown = exports.markdown = markdown; + exports.Progress = exports.progress = progress; + exports.Landing = exports.landing = landing; + exports.JSONStream = exports['json-stream'] = jsonStream; + }); + + var name = "mocha"; + var version = "9.2.2"; + var homepage = "https://mochajs.org/"; + var notifyLogo = "https://ibin.co/4QuRuGjXvl36.png"; + var _package = { + name: name, + version: version, + homepage: homepage, + notifyLogo: notifyLogo + }; + + var _package$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + name: name, + version: version, + homepage: homepage, + notifyLogo: notifyLogo, + 'default': _package + }); + + var require$$9 = getCjsExportFromNamespace(_package$1); + + /** + * Web Notifications module. + * @module Growl + */ + + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + + var Date$3 = commonjsGlobal.Date; + var setTimeout$2 = commonjsGlobal.setTimeout; + var EVENT_RUN_END$1 = runner.constants.EVENT_RUN_END; + var isBrowser = utils.isBrowser; + /** + * Checks if browser notification support exists. + * + * @public + * @see {@link https://caniuse.com/#feat=notifications|Browser support (notifications)} + * @see {@link https://caniuse.com/#feat=promises|Browser support (promises)} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlCapable} + * @return {boolean} whether browser notification support exists + */ + + var isCapable = function isCapable() { + var hasNotificationSupport = ('Notification' in window); + var hasPromiseSupport = typeof Promise === 'function'; + return isBrowser() && hasNotificationSupport && hasPromiseSupport; + }; + /** + * Implements browser notifications as a pseudo-reporter. + * + * @public + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/notification|Notification API} + * @see {@link https://developers.google.com/web/fundamentals/push-notifications/display-a-notification|Displaying a Notification} + * @see {@link Growl#isPermitted} + * @see {@link Mocha#_growl} + * @param {Runner} runner - Runner instance. + */ + + + var notify = function notify(runner) { + var promise = isPermitted(); + /** + * Attempt notification. + */ + + var sendNotification = function sendNotification() { + // If user hasn't responded yet... "No notification for you!" (Seinfeld) + Promise.race([promise, Promise.resolve(undefined)]).then(canNotify).then(function () { + display(runner); + })["catch"](notPermitted); + }; + + runner.once(EVENT_RUN_END$1, sendNotification); + }; + /** + * Checks if browser notification is permitted by user. + * + * @private + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission|Notification.permission} + * @see {@link Mocha#growl} + * @see {@link Mocha#isGrowlPermitted} + * @returns {Promise} promise determining if browser notification + * permissible when fulfilled. + */ + + + function isPermitted() { + var permitted = { + granted: function allow() { + return Promise.resolve(true); + }, + denied: function deny() { + return Promise.resolve(false); + }, + "default": function ask() { + return Notification.requestPermission().then(function (permission) { + return permission === 'granted'; + }); + } + }; + return permitted[Notification.permission](); + } + /** + * @summary + * Determines if notification should proceed. + * + * @description + * Notification shall not proceed unless `value` is true. + * + * `value` will equal one of: + *
            + *
          • true (from `isPermitted`)
          • + *
          • false (from `isPermitted`)
          • + *
          • undefined (from `Promise.race`)
          • + *
          + * + * @private + * @param {boolean|undefined} value - Determines if notification permissible. + * @returns {Promise} Notification can proceed + */ + + + function canNotify(value) { + if (!value) { + var why = value === false ? 'blocked' : 'unacknowledged'; + var reason = 'not permitted by user (' + why + ')'; + return Promise.reject(new Error(reason)); + } + + return Promise.resolve(); + } + /** + * Displays the notification. + * + * @private + * @param {Runner} runner - Runner instance. + */ + + + function display(runner) { + var stats = runner.stats; + var symbol = { + cross: "\u274C", + tick: "\u2705" + }; + var logo = require$$9.notifyLogo; + + var _message; + + var message; + var title; + + if (stats.failures) { + _message = stats.failures + ' of ' + stats.tests + ' tests failed'; + message = symbol.cross + ' ' + _message; + title = 'Failed'; + } else { + _message = stats.passes + ' tests passed in ' + stats.duration + 'ms'; + message = symbol.tick + ' ' + _message; + title = 'Passed'; + } // Send notification + + + var options = { + badge: logo, + body: message, + dir: 'ltr', + icon: logo, + lang: 'en-US', + name: 'mocha', + requireInteraction: false, + timestamp: Date$3.now() + }; + var notification = new Notification(title, options); // Autoclose after brief delay (makes various browsers act same) + + var FORCE_DURATION = 4000; + setTimeout$2(notification.close.bind(notification), FORCE_DURATION); + } + /** + * As notifications are tangential to our purpose, just log the error. + * + * @private + * @param {Error} err - Why notification didn't happen. + */ + + + function notPermitted(err) { + console.error('notification error:', err.message); + } + + var growl = { + isCapable: isCapable, + notify: notify + }; + + var diff = true; + var extension = [ + "js", + "cjs", + "mjs" + ]; + var reporter = "spec"; + var slow = 75; + var timeout = 2000; + var ui = "bdd"; + var mocharc$1 = { + diff: diff, + extension: extension, + "package": "./package.json", + reporter: reporter, + slow: slow, + timeout: timeout, + ui: ui, + "watch-ignore": [ + "node_modules", + ".git" + ] + }; + + var mocharc$2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + diff: diff, + extension: extension, + reporter: reporter, + slow: slow, + timeout: timeout, + ui: ui, + 'default': mocharc$1 + }); + + /** + * Provides a factory function for a {@link StatsCollector} object. + * @module + */ + + + var constants = runner.constants; + var EVENT_TEST_PASS = constants.EVENT_TEST_PASS; + var EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL; + var EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN; + var EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN; + var EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING; + var EVENT_RUN_END = constants.EVENT_RUN_END; + var EVENT_TEST_END = constants.EVENT_TEST_END; + /** + * Test statistics collector. + * + * @public + * @typedef {Object} StatsCollector + * @property {number} suites - integer count of suites run. + * @property {number} tests - integer count of tests run. + * @property {number} passes - integer count of passing tests. + * @property {number} pending - integer count of pending tests. + * @property {number} failures - integer count of failed tests. + * @property {Date} start - time when testing began. + * @property {Date} end - time when testing concluded. + * @property {number} duration - number of msecs that testing took. + */ + + var Date$2 = commonjsGlobal.Date; + /** + * Provides stats such as test duration, number of tests passed / failed etc., by listening for events emitted by `runner`. + * + * @private + * @param {Runner} runner - Runner instance + * @throws {TypeError} If falsy `runner` + */ + + function createStatsCollector(runner) { + /** + * @type StatsCollector + */ + var stats = { + suites: 0, + tests: 0, + passes: 0, + pending: 0, + failures: 0 + }; + + if (!runner) { + throw new TypeError('Missing runner argument'); + } + + runner.stats = stats; + runner.once(EVENT_RUN_BEGIN, function () { + stats.start = new Date$2(); + }); + runner.on(EVENT_SUITE_BEGIN, function (suite) { + suite.root || stats.suites++; + }); + runner.on(EVENT_TEST_PASS, function () { + stats.passes++; + }); + runner.on(EVENT_TEST_FAIL, function () { + stats.failures++; + }); + runner.on(EVENT_TEST_PENDING, function () { + stats.pending++; + }); + runner.on(EVENT_TEST_END, function () { + stats.tests++; + }); + runner.once(EVENT_RUN_END, function () { + stats.end = new Date$2(); + stats.duration = stats.end - stats.start; + }); + } + + var statsCollector = createStatsCollector; + + var createInvalidArgumentTypeError = errors.createInvalidArgumentTypeError; + var isString = utils.isString; + var MOCHA_ID_PROP_NAME = utils.constants.MOCHA_ID_PROP_NAME; + var test = Test; + /** + * Initialize a new `Test` with the given `title` and callback `fn`. + * + * @public + * @class + * @extends Runnable + * @param {String} title - Test title (required) + * @param {Function} [fn] - Test callback. If omitted, the Test is considered "pending" + */ + + function Test(title, fn) { + if (!isString(title)) { + throw createInvalidArgumentTypeError('Test argument "title" should be a string. Received type "' + _typeof(title) + '"', 'title', 'string'); + } + + this.type = 'test'; + runnable.call(this, title, fn); + this.reset(); + } + /** + * Inherit from `Runnable.prototype`. + */ + + + utils.inherits(Test, runnable); + /** + * Resets the state initially or for a next run. + */ + + Test.prototype.reset = function () { + runnable.prototype.reset.call(this); + this.pending = !this.fn; + delete this.state; + }; + /** + * Set or get retried test + * + * @private + */ + + + Test.prototype.retriedTest = function (n) { + if (!arguments.length) { + return this._retriedTest; + } + + this._retriedTest = n; + }; + /** + * Add test to the list of tests marked `only`. + * + * @private + */ + + + Test.prototype.markOnly = function () { + this.parent.appendOnlyTest(this); + }; + + Test.prototype.clone = function () { + var test = new Test(this.title, this.fn); + test.timeout(this.timeout()); + test.slow(this.slow()); + test.retries(this.retries()); + test.currentRetry(this.currentRetry()); + test.retriedTest(this.retriedTest() || this); + test.globals(this.globals()); + test.parent = this.parent; + test.file = this.file; + test.ctx = this.ctx; + return test; + }; + /** + * Returns an minimal object suitable for transmission over IPC. + * Functions are represented by keys beginning with `$$`. + * @private + * @returns {Object} + */ + + + Test.prototype.serialize = function serialize() { + return _defineProperty({ + $$currentRetry: this._currentRetry, + $$fullTitle: this.fullTitle(), + $$isPending: Boolean(this.pending), + $$retriedTest: this._retriedTest || null, + $$slow: this._slow, + $$titlePath: this.titlePath(), + body: this.body, + duration: this.duration, + err: this.err, + parent: _defineProperty({ + $$fullTitle: this.parent.fullTitle() + }, MOCHA_ID_PROP_NAME, this.parent.id), + speed: this.speed, + state: this.state, + title: this.title, + type: this.type, + file: this.file + }, MOCHA_ID_PROP_NAME, this.id); + }; + + /** + @module interfaces/common + */ + + + var createMissingArgumentError = errors.createMissingArgumentError; + var createUnsupportedError = errors.createUnsupportedError; + var createForbiddenExclusivityError = errors.createForbiddenExclusivityError; + /** + * Functions common to more than one interface. + * + * @private + * @param {Suite[]} suites + * @param {Context} context + * @param {Mocha} mocha + * @return {Object} An object containing common functions. + */ + + var common = function common(suites, context, mocha) { + /** + * Check if the suite should be tested. + * + * @private + * @param {Suite} suite - suite to check + * @returns {boolean} + */ + function shouldBeTested(suite) { + return !mocha.options.grep || mocha.options.grep && mocha.options.grep.test(suite.fullTitle()) && !mocha.options.invert; + } + + return { + /** + * This is only present if flag --delay is passed into Mocha. It triggers + * root suite execution. + * + * @param {Suite} suite The root suite. + * @return {Function} A function which runs the root suite + */ + runWithSuite: function runWithSuite(suite) { + return function run() { + suite.run(); + }; + }, + + /** + * Execute before running tests. + * + * @param {string} name + * @param {Function} fn + */ + before: function before(name, fn) { + suites[0].beforeAll(name, fn); + }, + + /** + * Execute after running tests. + * + * @param {string} name + * @param {Function} fn + */ + after: function after(name, fn) { + suites[0].afterAll(name, fn); + }, + + /** + * Execute before each test case. + * + * @param {string} name + * @param {Function} fn + */ + beforeEach: function beforeEach(name, fn) { + suites[0].beforeEach(name, fn); + }, + + /** + * Execute after each test case. + * + * @param {string} name + * @param {Function} fn + */ + afterEach: function afterEach(name, fn) { + suites[0].afterEach(name, fn); + }, + suite: { + /** + * Create an exclusive Suite; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + only: function only(opts) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + + opts.isOnly = true; + return this.create(opts); + }, + + /** + * Create a Suite, but skip it; convenience function + * See docstring for create() below. + * + * @param {Object} opts + * @returns {Suite} + */ + skip: function skip(opts) { + opts.pending = true; + return this.create(opts); + }, + + /** + * Creates a suite. + * + * @param {Object} opts Options + * @param {string} opts.title Title of Suite + * @param {Function} [opts.fn] Suite Function (not always applicable) + * @param {boolean} [opts.pending] Is Suite pending? + * @param {string} [opts.file] Filepath where this Suite resides + * @param {boolean} [opts.isOnly] Is Suite exclusive? + * @returns {Suite} + */ + create: function create(opts) { + var suite$1 = suite.create(suites[0], opts.title); + suite$1.pending = Boolean(opts.pending); + suite$1.file = opts.file; + suites.unshift(suite$1); + + if (opts.isOnly) { + suite$1.markOnly(); + } + + if (suite$1.pending && mocha.options.forbidPending && shouldBeTested(suite$1)) { + throw createUnsupportedError('Pending test forbidden'); + } + + if (typeof opts.fn === 'function') { + opts.fn.call(suite$1); + suites.shift(); + } else if (typeof opts.fn === 'undefined' && !suite$1.pending) { + throw createMissingArgumentError('Suite "' + suite$1.fullTitle() + '" was defined but no callback was supplied. ' + 'Supply a callback or explicitly skip the suite.', 'callback', 'function'); + } else if (!opts.fn && suite$1.pending) { + suites.shift(); + } + + return suite$1; + } + }, + test: { + /** + * Exclusive test-case. + * + * @param {Object} mocha + * @param {Function} test + * @returns {*} + */ + only: function only(mocha, test) { + if (mocha.options.forbidOnly) { + throw createForbiddenExclusivityError(mocha); + } + + test.markOnly(); + return test; + }, + + /** + * Pending test case. + * + * @param {string} title + */ + skip: function skip(title) { + context.test(title); + } + } + }; + }; + + var EVENT_FILE_PRE_REQUIRE$2 = suite.constants.EVENT_FILE_PRE_REQUIRE; + /** + * BDD-style interface: + * + * describe('Array', function() { + * describe('#indexOf()', function() { + * it('should return -1 when not present', function() { + * // ... + * }); + * + * it('should return the index when present', function() { + * // ... + * }); + * }); + * }); + * + * @param {Suite} suite Root suite. + */ + + var bdd$1 = function bddInterface(suite) { + var suites = [suite]; + suite.on(EVENT_FILE_PRE_REQUIRE$2, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + context.before = common$1.before; + context.after = common$1.after; + context.beforeEach = common$1.beforeEach; + context.afterEach = common$1.afterEach; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + /** + * Describe a "suite" with the given `title` + * and callback `fn` containing nested suites + * and/or tests. + */ + + context.describe = context.context = function (title, fn) { + return common$1.suite.create({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Pending describe. + */ + + + context.xdescribe = context.xcontext = context.describe.skip = function (title, fn) { + return common$1.suite.skip({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Exclusive suite. + */ + + + context.describe.only = function (title, fn) { + return common$1.suite.only({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Describe a specification or test-case + * with the given `title` and callback `fn` + * acting as a thunk. + */ + + + context.it = context.specify = function (title, fn) { + var suite = suites[0]; + + if (suite.isPending()) { + fn = null; + } + + var test$1 = new test(title, fn); + test$1.file = file; + suite.addTest(test$1); + return test$1; + }; + /** + * Exclusive test-case. + */ + + + context.it.only = function (title, fn) { + return common$1.test.only(mocha, context.it(title, fn)); + }; + /** + * Pending test case. + */ + + + context.xit = context.xspecify = context.it.skip = function (title) { + return context.it(title); + }; + }); + }; + + var description$3 = 'BDD or RSpec style [default]'; + bdd$1.description = description$3; + + var EVENT_FILE_PRE_REQUIRE$1 = suite.constants.EVENT_FILE_PRE_REQUIRE; + /** + * TDD-style interface: + * + * suite('Array', function() { + * suite('#indexOf()', function() { + * suiteSetup(function() { + * + * }); + * + * test('should return -1 when not present', function() { + * + * }); + * + * test('should return the index when present', function() { + * + * }); + * + * suiteTeardown(function() { + * + * }); + * }); + * }); + * + * @param {Suite} suite Root suite. + */ + + var tdd$1 = function tdd(suite) { + var suites = [suite]; + suite.on(EVENT_FILE_PRE_REQUIRE$1, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + context.setup = common$1.beforeEach; + context.teardown = common$1.afterEach; + context.suiteSetup = common$1.before; + context.suiteTeardown = common$1.after; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + /** + * Describe a "suite" with the given `title` and callback `fn` containing + * nested suites and/or tests. + */ + + context.suite = function (title, fn) { + return common$1.suite.create({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Pending suite. + */ + + + context.suite.skip = function (title, fn) { + return common$1.suite.skip({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Exclusive test-case. + */ + + + context.suite.only = function (title, fn) { + return common$1.suite.only({ + title: title, + file: file, + fn: fn + }); + }; + /** + * Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. + */ + + + context.test = function (title, fn) { + var suite = suites[0]; + + if (suite.isPending()) { + fn = null; + } + + var test$1 = new test(title, fn); + test$1.file = file; + suite.addTest(test$1); + return test$1; + }; + /** + * Exclusive test-case. + */ + + + context.test.only = function (title, fn) { + return common$1.test.only(mocha, context.test(title, fn)); + }; + + context.test.skip = common$1.test.skip; + }); + }; + + var description$2 = 'traditional "suite"/"test" instead of BDD\'s "describe"/"it"'; + tdd$1.description = description$2; + + var EVENT_FILE_PRE_REQUIRE = suite.constants.EVENT_FILE_PRE_REQUIRE; + /** + * QUnit-style interface: + * + * suite('Array'); + * + * test('#length', function() { + * var arr = [1,2,3]; + * ok(arr.length == 3); + * }); + * + * test('#indexOf()', function() { + * var arr = [1,2,3]; + * ok(arr.indexOf(1) == 0); + * ok(arr.indexOf(2) == 1); + * ok(arr.indexOf(3) == 2); + * }); + * + * suite('String'); + * + * test('#length', function() { + * ok('foo'.length == 3); + * }); + * + * @param {Suite} suite Root suite. + */ + + var qunit$1 = function qUnitInterface(suite) { + var suites = [suite]; + suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) { + var common$1 = common(suites, context, mocha); + context.before = common$1.before; + context.after = common$1.after; + context.beforeEach = common$1.beforeEach; + context.afterEach = common$1.afterEach; + context.run = mocha.options.delay && common$1.runWithSuite(suite); + /** + * Describe a "suite" with the given `title`. + */ + + context.suite = function (title) { + if (suites.length > 1) { + suites.shift(); + } + + return common$1.suite.create({ + title: title, + file: file, + fn: false + }); + }; + /** + * Exclusive Suite. + */ + + + context.suite.only = function (title) { + if (suites.length > 1) { + suites.shift(); + } + + return common$1.suite.only({ + title: title, + file: file, + fn: false + }); + }; + /** + * Describe a specification or test-case + * with the given `title` and callback `fn` + * acting as a thunk. + */ + + + context.test = function (title, fn) { + var test$1 = new test(title, fn); + test$1.file = file; + suites[0].addTest(test$1); + return test$1; + }; + /** + * Exclusive test-case. + */ + + + context.test.only = function (title, fn) { + return common$1.test.only(mocha, context.test(title, fn)); + }; + + context.test.skip = common$1.test.skip; + }); + }; + + var description$1 = 'QUnit style'; + qunit$1.description = description$1; + + /** + * Exports-style (as Node.js module) interface: + * + * exports.Array = { + * '#indexOf()': { + * 'should return -1 when the value is not present': function() { + * + * }, + * + * 'should return the correct index when the value is present': function() { + * + * } + * } + * }; + * + * @param {Suite} suite Root suite. + */ + + + var exports$2 = function exports(suite$1) { + var suites = [suite$1]; + suite$1.on(suite.constants.EVENT_FILE_REQUIRE, visit); + + function visit(obj, file) { + var suite$1; + + for (var key in obj) { + if (typeof obj[key] === 'function') { + var fn = obj[key]; + + switch (key) { + case 'before': + suites[0].beforeAll(fn); + break; + + case 'after': + suites[0].afterAll(fn); + break; + + case 'beforeEach': + suites[0].beforeEach(fn); + break; + + case 'afterEach': + suites[0].afterEach(fn); + break; + + default: + var test$1 = new test(key, fn); + test$1.file = file; + suites[0].addTest(test$1); + } + } else { + suite$1 = suite.create(suites[0], key); + suites.unshift(suite$1); + visit(obj[key], file); + suites.shift(); + } + } + } + }; + + var description = 'Node.js module ("exports") style'; + exports$2.description = description; + + var bdd = bdd$1; + var tdd = tdd$1; + var qunit = qunit$1; + var exports$1 = exports$2; + var interfaces = { + bdd: bdd, + tdd: tdd, + qunit: qunit, + exports: exports$1 + }; + + var context = Context; + /** + * Initialize a new `Context`. + * + * @private + */ + + function Context() {} + /** + * Set or get the context `Runnable` to `runnable`. + * + * @private + * @param {Runnable} runnable + * @return {Context} context + */ + + + Context.prototype.runnable = function (runnable) { + if (!arguments.length) { + return this._runnable; + } + + this.test = this._runnable = runnable; + return this; + }; + /** + * Set or get test timeout `ms`. + * + * @private + * @param {number} ms + * @return {Context} self + */ + + + Context.prototype.timeout = function (ms) { + if (!arguments.length) { + return this.runnable().timeout(); + } + + this.runnable().timeout(ms); + return this; + }; + /** + * Set or get test slowness threshold `ms`. + * + * @private + * @param {number} ms + * @return {Context} self + */ + + + Context.prototype.slow = function (ms) { + if (!arguments.length) { + return this.runnable().slow(); + } + + this.runnable().slow(ms); + return this; + }; + /** + * Mark a test as skipped. + * + * @private + * @throws Pending + */ + + + Context.prototype.skip = function () { + this.runnable().skip(); + }; + /** + * Set or get a number of allowed retries on failed tests + * + * @private + * @param {number} n + * @return {Context} self + */ + + + Context.prototype.retries = function (n) { + if (!arguments.length) { + return this.runnable().retries(); + } + + this.runnable().retries(n); + return this; + }; + + var mocharc = getCjsExportFromNamespace(mocharc$2); + + var mocha$1 = createCommonjsModule(function (module, exports) { + /*! + * mocha + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + + var createInvalidReporterError = errors.createInvalidReporterError, + createInvalidInterfaceError = errors.createInvalidInterfaceError, + createMochaInstanceAlreadyDisposedError = errors.createMochaInstanceAlreadyDisposedError, + createMochaInstanceAlreadyRunningError = errors.createMochaInstanceAlreadyRunningError, + createUnsupportedError = errors.createUnsupportedError; + var _Suite$constants = suite.constants, + EVENT_FILE_PRE_REQUIRE = _Suite$constants.EVENT_FILE_PRE_REQUIRE, + EVENT_FILE_POST_REQUIRE = _Suite$constants.EVENT_FILE_POST_REQUIRE, + EVENT_FILE_REQUIRE = _Suite$constants.EVENT_FILE_REQUIRE; + var debug = browser('mocha:mocha'); + exports = module.exports = Mocha; + /** + * A Mocha instance is a finite state machine. + * These are the states it can be in. + * @private + */ + + var mochaStates = utils.defineConstants({ + /** + * Initial state of the mocha instance + * @private + */ + INIT: 'init', + + /** + * Mocha instance is running tests + * @private + */ + RUNNING: 'running', + + /** + * Mocha instance is done running tests and references to test functions and hooks are cleaned. + * You can reset this state by unloading the test files. + * @private + */ + REFERENCES_CLEANED: 'referencesCleaned', + + /** + * Mocha instance is disposed and can no longer be used. + * @private + */ + DISPOSED: 'disposed' + }); + /** + * To require local UIs and reporters when running in node. + */ + + if (!utils.isBrowser() && typeof module.paths !== 'undefined') { + var cwd = utils.cwd(); + module.paths.push(cwd, path.join(cwd, 'node_modules')); + } + /** + * Expose internals. + * @private + */ + + + exports.utils = utils; + exports.interfaces = interfaces; + /** + * @public + * @memberof Mocha + */ + + exports.reporters = reporters; + exports.Runnable = runnable; + exports.Context = context; + /** + * + * @memberof Mocha + */ + + exports.Runner = runner; + exports.Suite = suite; + exports.Hook = hook; + exports.Test = test; + var currentContext; + + exports.afterEach = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return (currentContext.afterEach || currentContext.teardown).apply(this, args); + }; + + exports.after = function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return (currentContext.after || currentContext.suiteTeardown).apply(this, args); + }; + + exports.beforeEach = function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + return (currentContext.beforeEach || currentContext.setup).apply(this, args); + }; + + exports.before = function () { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + return (currentContext.before || currentContext.suiteSetup).apply(this, args); + }; + + exports.describe = function () { + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + return (currentContext.describe || currentContext.suite).apply(this, args); + }; + + exports.describe.only = function () { + for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + args[_key6] = arguments[_key6]; + } + + return (currentContext.describe || currentContext.suite).only.apply(this, args); + }; + + exports.describe.skip = function () { + for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + return (currentContext.describe || currentContext.suite).skip.apply(this, args); + }; + + exports.it = function () { + for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { + args[_key8] = arguments[_key8]; + } + + return (currentContext.it || currentContext.test).apply(this, args); + }; + + exports.it.only = function () { + for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { + args[_key9] = arguments[_key9]; + } + + return (currentContext.it || currentContext.test).only.apply(this, args); + }; + + exports.it.skip = function () { + for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { + args[_key10] = arguments[_key10]; + } + + return (currentContext.it || currentContext.test).skip.apply(this, args); + }; + + exports.xdescribe = exports.describe.skip; + exports.xit = exports.it.skip; + exports.setup = exports.beforeEach; + exports.suiteSetup = exports.before; + exports.suiteTeardown = exports.after; + exports.suite = exports.describe; + exports.teardown = exports.afterEach; + exports.test = exports.it; + + exports.run = function () { + for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) { + args[_key11] = arguments[_key11]; + } + + return currentContext.run.apply(this, args); + }; + /** + * Constructs a new Mocha instance with `options`. + * + * @public + * @class Mocha + * @param {Object} [options] - Settings object. + * @param {boolean} [options.allowUncaught] - Propagate uncaught errors? + * @param {boolean} [options.asyncOnly] - Force `done` callback or promise? + * @param {boolean} [options.bail] - Bail after first test failure? + * @param {boolean} [options.checkLeaks] - Check for global variable leaks? + * @param {boolean} [options.color] - Color TTY output from reporter? + * @param {boolean} [options.delay] - Delay root suite execution? + * @param {boolean} [options.diff] - Show diff on failure? + * @param {boolean} [options.dryRun] - Report tests without running them? + * @param {boolean} [options.failZero] - Fail test run if zero tests? + * @param {string} [options.fgrep] - Test filter given string. + * @param {boolean} [options.forbidOnly] - Tests marked `only` fail the suite? + * @param {boolean} [options.forbidPending] - Pending tests fail the suite? + * @param {boolean} [options.fullTrace] - Full stacktrace upon failure? + * @param {string[]} [options.global] - Variables expected in global scope. + * @param {RegExp|string} [options.grep] - Test filter given regular expression. + * @param {boolean} [options.growl] - Enable desktop notifications? + * @param {boolean} [options.inlineDiffs] - Display inline diffs? + * @param {boolean} [options.invert] - Invert test filter matches? + * @param {boolean} [options.noHighlighting] - Disable syntax highlighting? + * @param {string|constructor} [options.reporter] - Reporter name or constructor. + * @param {Object} [options.reporterOption] - Reporter settings object. + * @param {number} [options.retries] - Number of times to retry failed tests. + * @param {number} [options.slow] - Slow threshold value. + * @param {number|string} [options.timeout] - Timeout threshold value. + * @param {string} [options.ui] - Interface name. + * @param {boolean} [options.parallel] - Run jobs in parallel. + * @param {number} [options.jobs] - Max number of worker processes for parallel runs. + * @param {MochaRootHookObject} [options.rootHooks] - Hooks to bootstrap the root suite with. + * @param {string[]} [options.require] - Pathname of `rootHooks` plugin for parallel runs. + * @param {boolean} [options.isWorker] - Should be `true` if `Mocha` process is running in a worker process. + */ + + + function Mocha() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + options = _objectSpread2(_objectSpread2({}, mocharc), options); + this.files = []; + this.options = options; // root suite + + this.suite = new exports.Suite('', new exports.Context(), true); + this._cleanReferencesAfterRun = true; + this._state = mochaStates.INIT; + this.grep(options.grep).fgrep(options.fgrep).ui(options.ui).reporter(options.reporter, options.reporterOption || options.reporterOptions // for backwards compability + ).slow(options.slow).global(options.global); // this guard exists because Suite#timeout does not consider `undefined` to be valid input + + if (typeof options.timeout !== 'undefined') { + this.timeout(options.timeout === false ? 0 : options.timeout); + } + + if ('retries' in options) { + this.retries(options.retries); + } + + ['allowUncaught', 'asyncOnly', 'bail', 'checkLeaks', 'color', 'delay', 'diff', 'dryRun', 'failZero', 'forbidOnly', 'forbidPending', 'fullTrace', 'growl', 'inlineDiffs', 'invert'].forEach(function (opt) { + if (options[opt]) { + this[opt](); + } + }, this); + + if (options.rootHooks) { + this.rootHooks(options.rootHooks); + } + /** + * The class which we'll instantiate in {@link Mocha#run}. Defaults to + * {@link Runner} in serial mode; changes in parallel mode. + * @memberof Mocha + * @private + */ + + + this._runnerClass = exports.Runner; + /** + * Whether or not to call {@link Mocha#loadFiles} implicitly when calling + * {@link Mocha#run}. If this is `true`, then it's up to the consumer to call + * {@link Mocha#loadFiles} _or_ {@link Mocha#loadFilesAsync}. + * @private + * @memberof Mocha + */ + + this._lazyLoadFiles = false; + /** + * It's useful for a Mocha instance to know if it's running in a worker process. + * We could derive this via other means, but it's helpful to have a flag to refer to. + * @memberof Mocha + * @private + */ + + this.isWorker = Boolean(options.isWorker); + this.globalSetup(options.globalSetup).globalTeardown(options.globalTeardown).enableGlobalSetup(options.enableGlobalSetup).enableGlobalTeardown(options.enableGlobalTeardown); + + if (options.parallel && (typeof options.jobs === 'undefined' || options.jobs > 1)) { + debug('attempting to enable parallel mode'); + this.parallelMode(true); + } + } + /** + * Enables or disables bailing on the first failure. + * + * @public + * @see [CLI option](../#-bail-b) + * @param {boolean} [bail=true] - Whether to bail on first error. + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.bail = function (bail) { + this.suite.bail(bail !== false); + return this; + }; + /** + * @summary + * Adds `file` to be loaded for execution. + * + * @description + * Useful for generic setup code that must be included within test suite. + * + * @public + * @see [CLI option](../#-file-filedirectoryglob) + * @param {string} file - Pathname of file to be loaded. + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.addFile = function (file) { + this.files.push(file); + return this; + }; + /** + * Sets reporter to `reporter`, defaults to "spec". + * + * @public + * @see [CLI option](../#-reporter-name-r-name) + * @see [Reporters](../#reporters) + * @param {String|Function} reporterName - Reporter name or constructor. + * @param {Object} [reporterOptions] - Options used to configure the reporter. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested reporter cannot be loaded + * @example + * + * // Use XUnit reporter and direct its output to file + * mocha.reporter('xunit', { output: '/path/to/testspec.xunit.xml' }); + */ + + + Mocha.prototype.reporter = function (reporterName, reporterOptions) { + if (typeof reporterName === 'function') { + this._reporter = reporterName; + } else { + reporterName = reporterName || 'spec'; + var reporter; // Try to load a built-in reporter. + + if (reporters[reporterName]) { + reporter = reporters[reporterName]; + } // Try to load reporters from process.cwd() and node_modules + + + if (!reporter) { + var foundReporter; + + try { + foundReporter = require.resolve(reporterName); + reporter = commonjsRequire(foundReporter); + } catch (err) { + if (foundReporter) { + throw createInvalidReporterError(err.message, foundReporter); + } // Try to load reporters from a cwd-relative path + + + try { + reporter = commonjsRequire(path.resolve(reporterName)); + } catch (e) { + throw createInvalidReporterError(e.message, reporterName); + } + } + } + + this._reporter = reporter; + } + + this.options.reporterOption = reporterOptions; // alias option name is used in built-in reporters xunit/tap/progress + + this.options.reporterOptions = reporterOptions; + return this; + }; + /** + * Sets test UI `name`, defaults to "bdd". + * + * @public + * @see [CLI option](../#-ui-name-u-name) + * @see [Interface DSLs](../#interfaces) + * @param {string|Function} [ui=bdd] - Interface name or class. + * @returns {Mocha} this + * @chainable + * @throws {Error} if requested interface cannot be loaded + */ + + + Mocha.prototype.ui = function (ui) { + var bindInterface; + + if (typeof ui === 'function') { + bindInterface = ui; + } else { + ui = ui || 'bdd'; + bindInterface = exports.interfaces[ui]; + + if (!bindInterface) { + try { + bindInterface = commonjsRequire(ui); + } catch (err) { + throw createInvalidInterfaceError("invalid interface '".concat(ui, "'"), ui); + } + } + } + + bindInterface(this.suite); + this.suite.on(EVENT_FILE_PRE_REQUIRE, function (context) { + currentContext = context; + }); + return this; + }; + /** + * Loads `files` prior to execution. Does not support ES Modules. + * + * @description + * The implementation relies on Node's `require` to execute + * the test interface functions and will be subject to its cache. + * Supports only CommonJS modules. To load ES modules, use Mocha#loadFilesAsync. + * + * @private + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @see {@link Mocha#loadFilesAsync} + * @param {Function} [fn] - Callback invoked upon completion. + */ + + + Mocha.prototype.loadFiles = function (fn) { + var self = this; + var suite = this.suite; + this.files.forEach(function (file) { + file = path.resolve(file); + suite.emit(EVENT_FILE_PRE_REQUIRE, commonjsGlobal, file, self); + suite.emit(EVENT_FILE_REQUIRE, commonjsRequire(), file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, commonjsGlobal, file, self); + }); + fn && fn(); + }; + /** + * Loads `files` prior to execution. Supports Node ES Modules. + * + * @description + * The implementation relies on Node's `require` and `import` to execute + * the test interface functions and will be subject to its cache. + * Supports both CJS and ESM modules. + * + * @public + * @see {@link Mocha#addFile} + * @see {@link Mocha#run} + * @see {@link Mocha#unloadFiles} + * @returns {Promise} + * @example + * + * // loads ESM (and CJS) test files asynchronously, then runs root suite + * mocha.loadFilesAsync() + * .then(() => mocha.run(failures => process.exitCode = failures ? 1 : 0)) + * .catch(() => process.exitCode = 1); + */ + + + Mocha.prototype.loadFilesAsync = function () { + var self = this; + var suite = this.suite; + this.lazyLoadFiles(true); + return require$$10.loadFilesAsync(this.files, function (file) { + suite.emit(EVENT_FILE_PRE_REQUIRE, commonjsGlobal, file, self); + }, function (file, resultModule) { + suite.emit(EVENT_FILE_REQUIRE, resultModule, file, self); + suite.emit(EVENT_FILE_POST_REQUIRE, commonjsGlobal, file, self); + }); + }; + /** + * Removes a previously loaded file from Node's `require` cache. + * + * @private + * @static + * @see {@link Mocha#unloadFiles} + * @param {string} file - Pathname of file to be unloaded. + */ + + + Mocha.unloadFile = function (file) { + if (utils.isBrowser()) { + throw createUnsupportedError('unloadFile() is only suported in a Node.js environment'); + } + + return require$$10.unloadFile(file); + }; + /** + * Unloads `files` from Node's `require` cache. + * + * @description + * This allows required files to be "freshly" reloaded, providing the ability + * to reuse a Mocha instance programmatically. + * Note: does not clear ESM module files from the cache + * + * Intended for consumers — not used internally + * + * @public + * @see {@link Mocha#run} + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.unloadFiles = function () { + if (this._state === mochaStates.DISPOSED) { + throw createMochaInstanceAlreadyDisposedError('Mocha instance is already disposed, it cannot be used again.', this._cleanReferencesAfterRun, this); + } + + this.files.forEach(function (file) { + Mocha.unloadFile(file); + }); + this._state = mochaStates.INIT; + return this; + }; + /** + * Sets `grep` filter after escaping RegExp special characters. + * + * @public + * @see {@link Mocha#grep} + * @param {string} str - Value to be converted to a regexp. + * @returns {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title begins with `"foo"` followed by a period + * mocha.fgrep('foo.'); + */ + + + Mocha.prototype.fgrep = function (str) { + if (!str) { + return this; + } + + return this.grep(new RegExp(escapeStringRegexp(str))); + }; + /** + * @summary + * Sets `grep` filter used to select specific tests for execution. + * + * @description + * If `re` is a regexp-like string, it will be converted to regexp. + * The regexp is tested against the full title of each test (i.e., the + * name of the test preceded by titles of each its ancestral suites). + * As such, using an exact-match fixed pattern against the + * test name itself will not yield any matches. + *
          + * Previous filter value will be overwritten on each call! + * + * @public + * @see [CLI option](../#-grep-regexp-g-regexp) + * @see {@link Mocha#fgrep} + * @see {@link Mocha#invert} + * @param {RegExp|String} re - Regular expression used to select tests. + * @return {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title contains `"match"`, ignoring case + * mocha.grep(/match/i); + * @example + * + * // Same as above but with regexp-like string argument + * mocha.grep('/match/i'); + * @example + * + * // ## Anti-example + * // Given embedded test `it('only-this-test')`... + * mocha.grep('/^only-this-test$/'); // NO! Use `.only()` to do this! + */ + + + Mocha.prototype.grep = function (re) { + if (utils.isString(re)) { + // extract args if it's regex-like, i.e: [string, pattern, flag] + var arg = re.match(/^\/(.*)\/([gimy]{0,4})$|.*/); + this.options.grep = new RegExp(arg[1] || arg[0], arg[2]); + } else { + this.options.grep = re; + } + + return this; + }; + /** + * Inverts `grep` matches. + * + * @public + * @see {@link Mocha#grep} + * @return {Mocha} this + * @chainable + * @example + * + * // Select tests whose full title does *not* contain `"match"`, ignoring case + * mocha.grep(/match/i).invert(); + */ + + + Mocha.prototype.invert = function () { + this.options.invert = true; + return this; + }; + /** + * Enables or disables checking for global variables leaked while running tests. + * + * @public + * @see [CLI option](../#-check-leaks) + * @param {boolean} [checkLeaks=true] - Whether to check for global variable leaks. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.checkLeaks = function (checkLeaks) { + this.options.checkLeaks = checkLeaks !== false; + return this; + }; + /** + * Enables or disables whether or not to dispose after each test run. + * Disable this to ensure you can run the test suite multiple times. + * If disabled, be sure to dispose mocha when you're done to prevent memory leaks. + * @public + * @see {@link Mocha#dispose} + * @param {boolean} cleanReferencesAfterRun + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.cleanReferencesAfterRun = function (cleanReferencesAfterRun) { + this._cleanReferencesAfterRun = cleanReferencesAfterRun !== false; + return this; + }; + /** + * Manually dispose this mocha instance. Mark this instance as `disposed` and unable to run more tests. + * It also removes function references to tests functions and hooks, so variables trapped in closures can be cleaned by the garbage collector. + * @public + */ + + + Mocha.prototype.dispose = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError('Cannot dispose while the mocha instance is still running tests.'); + } + + this.unloadFiles(); + this._previousRunner && this._previousRunner.dispose(); + this.suite.dispose(); + this._state = mochaStates.DISPOSED; + }; + /** + * Displays full stack trace upon test failure. + * + * @public + * @see [CLI option](../#-full-trace) + * @param {boolean} [fullTrace=true] - Whether to print full stacktrace upon failure. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.fullTrace = function (fullTrace) { + this.options.fullTrace = fullTrace !== false; + return this; + }; + /** + * Enables desktop notification support if prerequisite software installed. + * + * @public + * @see [CLI option](../#-growl-g) + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.growl = function () { + this.options.growl = this.isGrowlCapable(); + + if (!this.options.growl) { + var detail = utils.isBrowser() ? 'notification support not available in this browser...' : 'notification support prerequisites not installed...'; + console.error(detail + ' cannot enable!'); + } + + return this; + }; + /** + * @summary + * Determines if Growl support seems likely. + * + * @description + * Not available when run in browser. + * + * @private + * @see {@link Growl#isCapable} + * @see {@link Mocha#growl} + * @return {boolean} whether Growl support can be expected + */ + + + Mocha.prototype.isGrowlCapable = growl.isCapable; + /** + * Implements desktop notifications using a pseudo-reporter. + * + * @private + * @see {@link Mocha#growl} + * @see {@link Growl#notify} + * @param {Runner} runner - Runner instance. + */ + + Mocha.prototype._growl = growl.notify; + /** + * Specifies whitelist of variable names to be expected in global scope. + * + * @public + * @see [CLI option](../#-global-variable-name) + * @see {@link Mocha#checkLeaks} + * @param {String[]|String} global - Accepted global variable name(s). + * @return {Mocha} this + * @chainable + * @example + * + * // Specify variables to be expected in global scope + * mocha.global(['jQuery', 'MyLib']); + */ + + Mocha.prototype.global = function (global) { + this.options.global = (this.options.global || []).concat(global).filter(Boolean).filter(function (elt, idx, arr) { + return arr.indexOf(elt) === idx; + }); + return this; + }; // for backwards compability, 'globals' is an alias of 'global' + + + Mocha.prototype.globals = Mocha.prototype.global; + /** + * Enables or disables TTY color output by screen-oriented reporters. + * + * @public + * @see [CLI option](../#-color-c-colors) + * @param {boolean} [color=true] - Whether to enable color output. + * @return {Mocha} this + * @chainable + */ + + Mocha.prototype.color = function (color) { + this.options.color = color !== false; + return this; + }; + /** + * Enables or disables reporter to use inline diffs (rather than +/-) + * in test failure output. + * + * @public + * @see [CLI option](../#-inline-diffs) + * @param {boolean} [inlineDiffs=true] - Whether to use inline diffs. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.inlineDiffs = function (inlineDiffs) { + this.options.inlineDiffs = inlineDiffs !== false; + return this; + }; + /** + * Enables or disables reporter to include diff in test failure output. + * + * @public + * @see [CLI option](../#-diff) + * @param {boolean} [diff=true] - Whether to show diff on failure. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.diff = function (diff) { + this.options.diff = diff !== false; + return this; + }; + /** + * @summary + * Sets timeout threshold value. + * + * @description + * A string argument can use shorthand (such as "2s") and will be converted. + * If the value is `0`, timeouts will be disabled. + * + * @public + * @see [CLI option](../#-timeout-ms-t-ms) + * @see [Timeouts](../#timeouts) + * @param {number|string} msecs - Timeout threshold value. + * @return {Mocha} this + * @chainable + * @example + * + * // Sets timeout to one second + * mocha.timeout(1000); + * @example + * + * // Same as above but using string argument + * mocha.timeout('1s'); + */ + + + Mocha.prototype.timeout = function (msecs) { + this.suite.timeout(msecs); + return this; + }; + /** + * Sets the number of times to retry failed tests. + * + * @public + * @see [CLI option](../#-retries-n) + * @see [Retry Tests](../#retry-tests) + * @param {number} retry - Number of times to retry failed tests. + * @return {Mocha} this + * @chainable + * @example + * + * // Allow any failed test to retry one more time + * mocha.retries(1); + */ + + + Mocha.prototype.retries = function (retry) { + this.suite.retries(retry); + return this; + }; + /** + * Sets slowness threshold value. + * + * @public + * @see [CLI option](../#-slow-ms-s-ms) + * @param {number} msecs - Slowness threshold value. + * @return {Mocha} this + * @chainable + * @example + * + * // Sets "slow" threshold to half a second + * mocha.slow(500); + * @example + * + * // Same as above but using string argument + * mocha.slow('0.5s'); + */ + + + Mocha.prototype.slow = function (msecs) { + this.suite.slow(msecs); + return this; + }; + /** + * Forces all tests to either accept a `done` callback or return a promise. + * + * @public + * @see [CLI option](../#-async-only-a) + * @param {boolean} [asyncOnly=true] - Whether to force `done` callback or promise. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.asyncOnly = function (asyncOnly) { + this.options.asyncOnly = asyncOnly !== false; + return this; + }; + /** + * Disables syntax highlighting (in browser). + * + * @public + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.noHighlighting = function () { + this.options.noHighlighting = true; + return this; + }; + /** + * Enables or disables uncaught errors to propagate. + * + * @public + * @see [CLI option](../#-allow-uncaught) + * @param {boolean} [allowUncaught=true] - Whether to propagate uncaught errors. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.allowUncaught = function (allowUncaught) { + this.options.allowUncaught = allowUncaught !== false; + return this; + }; + /** + * @summary + * Delays root suite execution. + * + * @description + * Used to perform async operations before any suites are run. + * + * @public + * @see [delayed root suite](../#delayed-root-suite) + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.delay = function delay() { + this.options.delay = true; + return this; + }; + /** + * Enables or disables running tests in dry-run mode. + * + * @public + * @see [CLI option](../#-dry-run) + * @param {boolean} [dryRun=true] - Whether to activate dry-run mode. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.dryRun = function (dryRun) { + this.options.dryRun = dryRun !== false; + return this; + }; + /** + * Fails test run if no tests encountered with exit-code 1. + * + * @public + * @see [CLI option](../#-fail-zero) + * @param {boolean} [failZero=true] - Whether to fail test run. + * @return {Mocha} this + * @chainable + */ + + + Mocha.prototype.failZero = function (failZero) { + this.options.failZero = failZero !== false; + return this; + }; + /** + * Causes tests marked `only` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-only) + * @param {boolean} [forbidOnly=true] - Whether tests marked `only` fail the suite. + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.forbidOnly = function (forbidOnly) { + this.options.forbidOnly = forbidOnly !== false; + return this; + }; + /** + * Causes pending tests and tests marked `skip` to fail the suite. + * + * @public + * @see [CLI option](../#-forbid-pending) + * @param {boolean} [forbidPending=true] - Whether pending tests fail the suite. + * @returns {Mocha} this + * @chainable + */ + + + Mocha.prototype.forbidPending = function (forbidPending) { + this.options.forbidPending = forbidPending !== false; + return this; + }; + /** + * Throws an error if mocha is in the wrong state to be able to transition to a "running" state. + * @private + */ + + + Mocha.prototype._guardRunningStateTransition = function () { + if (this._state === mochaStates.RUNNING) { + throw createMochaInstanceAlreadyRunningError('Mocha instance is currently running tests, cannot start a next test run until this one is done', this); + } + + if (this._state === mochaStates.DISPOSED || this._state === mochaStates.REFERENCES_CLEANED) { + throw createMochaInstanceAlreadyDisposedError('Mocha instance is already disposed, cannot start a new test run. Please create a new mocha instance. Be sure to set disable `cleanReferencesAfterRun` when you want to reuse the same mocha instance for multiple test runs.', this._cleanReferencesAfterRun, this); + } + }; + /** + * Mocha version as specified by "package.json". + * + * @name Mocha#version + * @type string + * @readonly + */ + + + Object.defineProperty(Mocha.prototype, 'version', { + value: require$$9.version, + configurable: false, + enumerable: true, + writable: false + }); + /** + * Callback to be invoked when test execution is complete. + * + * @private + * @callback DoneCB + * @param {number} failures - Number of failures that occurred. + */ + + /** + * Runs root suite and invokes `fn()` when complete. + * + * @description + * To run tests multiple times (or to run tests in files that are + * already in the `require` cache), make sure to clear them from + * the cache first! + * + * @public + * @see {@link Mocha#unloadFiles} + * @see {@link Runner#run} + * @param {DoneCB} [fn] - Callback invoked when test execution completed. + * @returns {Runner} runner instance + * @example + * + * // exit with non-zero status if there were test failures + * mocha.run(failures => process.exitCode = failures ? 1 : 0); + */ + + Mocha.prototype.run = function (fn) { + var _this = this; + + this._guardRunningStateTransition(); + + this._state = mochaStates.RUNNING; + + if (this._previousRunner) { + this._previousRunner.dispose(); + + this.suite.reset(); + } + + if (this.files.length && !this._lazyLoadFiles) { + this.loadFiles(); + } + + var suite = this.suite; + var options = this.options; + options.files = this.files; + var runner = new this._runnerClass(suite, { + cleanReferencesAfterRun: this._cleanReferencesAfterRun, + delay: options.delay, + dryRun: options.dryRun, + failZero: options.failZero + }); + statsCollector(runner); + var reporter = new this._reporter(runner, options); + runner.checkLeaks = options.checkLeaks === true; + runner.fullStackTrace = options.fullTrace; + runner.asyncOnly = options.asyncOnly; + runner.allowUncaught = options.allowUncaught; + runner.forbidOnly = options.forbidOnly; + runner.forbidPending = options.forbidPending; + + if (options.grep) { + runner.grep(options.grep, options.invert); + } + + if (options.global) { + runner.globals(options.global); + } + + if (options.growl) { + this._growl(runner); + } + + if (options.color !== undefined) { + exports.reporters.Base.useColors = options.color; + } + + exports.reporters.Base.inlineDiffs = options.inlineDiffs; + exports.reporters.Base.hideDiff = !options.diff; + + var done = function done(failures) { + _this._previousRunner = runner; + _this._state = _this._cleanReferencesAfterRun ? mochaStates.REFERENCES_CLEANED : mochaStates.INIT; + fn = fn || utils.noop; + + if (typeof reporter.done === 'function') { + reporter.done(failures, fn); + } else { + fn(failures); + } + }; + + var runAsync = /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(runner) { + var context, failureCount; + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (!(_this.options.enableGlobalSetup && _this.hasGlobalSetupFixtures())) { + _context.next = 6; + break; + } + + _context.next = 3; + return _this.runGlobalSetup(runner); + + case 3: + _context.t0 = _context.sent; + _context.next = 7; + break; + + case 6: + _context.t0 = {}; + + case 7: + context = _context.t0; + _context.next = 10; + return runner.runAsync({ + files: _this.files, + options: options + }); + + case 10: + failureCount = _context.sent; + + if (!(_this.options.enableGlobalTeardown && _this.hasGlobalTeardownFixtures())) { + _context.next = 14; + break; + } + + _context.next = 14; + return _this.runGlobalTeardown(runner, { + context: context + }); + + case 14: + return _context.abrupt("return", failureCount); + + case 15: + case "end": + return _context.stop(); + } + } + }, _callee); + })); + + return function runAsync(_x) { + return _ref.apply(this, arguments); + }; + }(); // no "catch" here is intentional. errors coming out of + // Runner#run are considered uncaught/unhandled and caught + // by the `process` event listeners. + // also: returning anything other than `runner` would be a breaking + // change + + + runAsync(runner).then(done); + return runner; + }; + /** + * Assigns hooks to the root suite + * @param {MochaRootHookObject} [hooks] - Hooks to assign to root suite + * @chainable + */ + + + Mocha.prototype.rootHooks = function rootHooks() { + var _this2 = this; + + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref2$beforeAll = _ref2.beforeAll, + beforeAll = _ref2$beforeAll === void 0 ? [] : _ref2$beforeAll, + _ref2$beforeEach = _ref2.beforeEach, + beforeEach = _ref2$beforeEach === void 0 ? [] : _ref2$beforeEach, + _ref2$afterAll = _ref2.afterAll, + afterAll = _ref2$afterAll === void 0 ? [] : _ref2$afterAll, + _ref2$afterEach = _ref2.afterEach, + afterEach = _ref2$afterEach === void 0 ? [] : _ref2$afterEach; + + beforeAll = utils.castArray(beforeAll); + beforeEach = utils.castArray(beforeEach); + afterAll = utils.castArray(afterAll); + afterEach = utils.castArray(afterEach); + beforeAll.forEach(function (hook) { + _this2.suite.beforeAll(hook); + }); + beforeEach.forEach(function (hook) { + _this2.suite.beforeEach(hook); + }); + afterAll.forEach(function (hook) { + _this2.suite.afterAll(hook); + }); + afterEach.forEach(function (hook) { + _this2.suite.afterEach(hook); + }); + return this; + }; + /** + * Toggles parallel mode. + * + * Must be run before calling {@link Mocha#run}. Changes the `Runner` class to + * use; also enables lazy file loading if not already done so. + * + * Warning: when passed `false` and lazy loading has been enabled _via any means_ (including calling `parallelMode(true)`), this method will _not_ disable lazy loading. Lazy loading is a prerequisite for parallel + * mode, but parallel mode is _not_ a prerequisite for lazy loading! + * @param {boolean} [enable] - If `true`, enable; otherwise disable. + * @throws If run in browser + * @throws If Mocha not in `INIT` state + * @returns {Mocha} + * @chainable + * @public + */ + + + Mocha.prototype.parallelMode = function parallelMode() { + var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + + if (utils.isBrowser()) { + throw createUnsupportedError('parallel mode is only supported in Node.js'); + } + + var parallel = Boolean(enable); + + if (parallel === this.options.parallel && this._lazyLoadFiles && this._runnerClass !== exports.Runner) { + return this; + } + + if (this._state !== mochaStates.INIT) { + throw createUnsupportedError('cannot change parallel mode after having called run()'); + } + + this.options.parallel = parallel; // swap Runner class + + this._runnerClass = parallel ? require$$10 : exports.Runner; // lazyLoadFiles may have been set `true` otherwise (for ESM loading), + // so keep `true` if so. + + return this.lazyLoadFiles(this._lazyLoadFiles || parallel); + }; + /** + * Disables implicit call to {@link Mocha#loadFiles} in {@link Mocha#run}. This + * setting is used by watch mode, parallel mode, and for loading ESM files. + * @todo This should throw if we've already loaded files; such behavior + * necessitates adding a new state. + * @param {boolean} [enable] - If `true`, disable eager loading of files in + * {@link Mocha#run} + * @chainable + * @public + */ + + + Mocha.prototype.lazyLoadFiles = function lazyLoadFiles(enable) { + this._lazyLoadFiles = enable === true; + debug('set lazy load to %s', enable); + return this; + }; + /** + * Configures one or more global setup fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [setupFns] - Global setup fixture(s) + * @returns {Mocha} + */ + + + Mocha.prototype.globalSetup = function globalSetup() { + var setupFns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + setupFns = utils.castArray(setupFns); + this.options.globalSetup = setupFns; + debug('configured %d global setup functions', setupFns.length); + return this; + }; + /** + * Configures one or more global teardown fixtures. + * + * If given no parameters, _unsets_ any previously-set fixtures. + * @chainable + * @public + * @param {MochaGlobalFixture|MochaGlobalFixture[]} [teardownFns] - Global teardown fixture(s) + * @returns {Mocha} + */ + + + Mocha.prototype.globalTeardown = function globalTeardown() { + var teardownFns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + teardownFns = utils.castArray(teardownFns); + this.options.globalTeardown = teardownFns; + debug('configured %d global teardown functions', teardownFns.length); + return this; + }; + /** + * Run any global setup fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalSetup` option is `false`; see {@link Mocha#enableGlobalSetup}. + * + * The context object this function resolves with should be consumed by {@link Mocha#runGlobalTeardown}. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ + + + Mocha.prototype.runGlobalSetup = /*#__PURE__*/function () { + var _runGlobalSetup = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + var context, + globalSetup, + _args2 = arguments; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + context = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}; + globalSetup = this.options.globalSetup; + + if (!(globalSetup && globalSetup.length)) { + _context2.next = 7; + break; + } + + debug('run(): global setup starting'); + _context2.next = 6; + return this._runGlobalFixtures(globalSetup, context); + + case 6: + debug('run(): global setup complete'); + + case 7: + return _context2.abrupt("return", context); + + case 8: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + + function runGlobalSetup() { + return _runGlobalSetup.apply(this, arguments); + } + + return runGlobalSetup; + }(); + /** + * Run any global teardown fixtures sequentially, if any. + * + * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalTeardown` option is `false`; see {@link Mocha#enableGlobalTeardown}. + * + * Should be called with context object returned by {@link Mocha#runGlobalSetup}, if applicable. + * @param {object} [context] - Context object if already have one + * @public + * @returns {Promise} Context object + */ + + + Mocha.prototype.runGlobalTeardown = /*#__PURE__*/function () { + var _runGlobalTeardown = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + var context, + globalTeardown, + _args3 = arguments; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + context = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}; + globalTeardown = this.options.globalTeardown; + + if (!(globalTeardown && globalTeardown.length)) { + _context3.next = 6; + break; + } + + debug('run(): global teardown starting'); + _context3.next = 6; + return this._runGlobalFixtures(globalTeardown, context); + + case 6: + debug('run(): global teardown complete'); + return _context3.abrupt("return", context); + + case 8: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + + function runGlobalTeardown() { + return _runGlobalTeardown.apply(this, arguments); + } + + return runGlobalTeardown; + }(); + /** + * Run global fixtures sequentially with context `context` + * @private + * @param {MochaGlobalFixture[]} [fixtureFns] - Fixtures to run + * @param {object} [context] - context object + * @returns {Promise} context object + */ + + + Mocha.prototype._runGlobalFixtures = /*#__PURE__*/function () { + var _runGlobalFixtures2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + var fixtureFns, + context, + _iteratorAbruptCompletion, + _didIteratorError, + _iteratorError, + _iterator, + _step, + fixtureFn, + _args4 = arguments; + + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + fixtureFns = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : []; + context = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : {}; + _iteratorAbruptCompletion = false; + _didIteratorError = false; + _context4.prev = 4; + _iterator = _asyncIterator(fixtureFns); + + case 6: + _context4.next = 8; + return _iterator.next(); + + case 8: + if (!(_iteratorAbruptCompletion = !(_step = _context4.sent).done)) { + _context4.next = 15; + break; + } + + fixtureFn = _step.value; + _context4.next = 12; + return fixtureFn.call(context); + + case 12: + _iteratorAbruptCompletion = false; + _context4.next = 6; + break; + + case 15: + _context4.next = 21; + break; + + case 17: + _context4.prev = 17; + _context4.t0 = _context4["catch"](4); + _didIteratorError = true; + _iteratorError = _context4.t0; + + case 21: + _context4.prev = 21; + _context4.prev = 22; + + if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) { + _context4.next = 26; + break; + } + + _context4.next = 26; + return _iterator["return"](); + + case 26: + _context4.prev = 26; + + if (!_didIteratorError) { + _context4.next = 29; + break; + } + + throw _iteratorError; + + case 29: + return _context4.finish(26); + + case 30: + return _context4.finish(21); + + case 31: + return _context4.abrupt("return", context); + + case 32: + case "end": + return _context4.stop(); + } + } + }, _callee4, null, [[4, 17, 21, 31], [22,, 26, 30]]); + })); + + function _runGlobalFixtures() { + return _runGlobalFixtures2.apply(this, arguments); + } + + return _runGlobalFixtures; + }(); + /** + * Toggle execution of any global setup fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global setup fixture + * @returns {Mocha} + */ + + + Mocha.prototype.enableGlobalSetup = function enableGlobalSetup() { + var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + this.options.enableGlobalSetup = Boolean(enabled); + return this; + }; + /** + * Toggle execution of any global teardown fixture(s) + * + * @chainable + * @public + * @param {boolean } [enabled=true] - If `false`, do not run global teardown fixture + * @returns {Mocha} + */ + + + Mocha.prototype.enableGlobalTeardown = function enableGlobalTeardown() { + var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + this.options.enableGlobalTeardown = Boolean(enabled); + return this; + }; + /** + * Returns `true` if one or more global setup fixtures have been supplied. + * @public + * @returns {boolean} + */ + + + Mocha.prototype.hasGlobalSetupFixtures = function hasGlobalSetupFixtures() { + return Boolean(this.options.globalSetup.length); + }; + /** + * Returns `true` if one or more global teardown fixtures have been supplied. + * @public + * @returns {boolean} + */ + + + Mocha.prototype.hasGlobalTeardownFixtures = function hasGlobalTeardownFixtures() { + return Boolean(this.options.globalTeardown.length); + }; + /** + * An alternative way to define root hooks that works with parallel runs. + * @typedef {Object} MochaRootHookObject + * @property {Function|Function[]} [beforeAll] - "Before all" hook(s) + * @property {Function|Function[]} [beforeEach] - "Before each" hook(s) + * @property {Function|Function[]} [afterAll] - "After all" hook(s) + * @property {Function|Function[]} [afterEach] - "After each" hook(s) + */ + + /** + * An function that returns a {@link MochaRootHookObject}, either sync or async. + @callback MochaRootHookFunction + * @returns {MochaRootHookObject|Promise} + */ + + /** + * A function that's invoked _once_ which is either sync or async. + * Can be a "teardown" or "setup". These will all share the same context. + * @callback MochaGlobalFixture + * @returns {void|Promise} + */ + + /** + * An object making up all necessary parts of a plugin loader and aggregator + * @typedef {Object} PluginDefinition + * @property {string} exportName - Named export to use + * @property {string} [optionName] - Option name for Mocha constructor (use `exportName` if omitted) + * @property {PluginValidator} [validate] - Validator function + * @property {PluginFinalizer} [finalize] - Finalizer/aggregator function + */ + + /** + * A (sync) function to assert a user-supplied plugin implementation is valid. + * + * Defined in a {@link PluginDefinition}. + + * @callback PluginValidator + * @param {*} value - Value to check + * @this {PluginDefinition} + * @returns {void} + */ + + /** + * A function to finalize plugins impls of a particular ilk + * @callback PluginFinalizer + * @param {Array<*>} impls - User-supplied implementations + * @returns {Promise<*>|*} + */ + + }); + + /* eslint no-unused-vars: off */ + + /* eslint-env commonjs */ + + /** + * Shim process.stdout. + */ + + + process$4.stdout = browserStdout({ + label: false + }); + /** + * Create a Mocha instance. + * + * @return {undefined} + */ + + var mocha = new mocha$1({ + reporter: 'html' + }); + /** + * Save timer references to avoid Sinon interfering (see GH-237). + */ + + var Date$1 = commonjsGlobal.Date; + var setTimeout$1 = commonjsGlobal.setTimeout; + commonjsGlobal.setInterval; + commonjsGlobal.clearTimeout; + commonjsGlobal.clearInterval; + var uncaughtExceptionHandlers = []; + var originalOnerrorHandler = commonjsGlobal.onerror; + /** + * Remove uncaughtException listener. + * Revert to original onerror handler if previously defined. + */ + + process$4.removeListener = function (e, fn) { + if (e === 'uncaughtException') { + if (originalOnerrorHandler) { + commonjsGlobal.onerror = originalOnerrorHandler; + } else { + commonjsGlobal.onerror = function () {}; + } + + var i = uncaughtExceptionHandlers.indexOf(fn); + + if (i !== -1) { + uncaughtExceptionHandlers.splice(i, 1); + } + } + }; + /** + * Implements listenerCount for 'uncaughtException'. + */ + + + process$4.listenerCount = function (name) { + if (name === 'uncaughtException') { + return uncaughtExceptionHandlers.length; + } + + return 0; + }; + /** + * Implements uncaughtException listener. + */ + + + process$4.on = function (e, fn) { + if (e === 'uncaughtException') { + commonjsGlobal.onerror = function (err, url, line) { + fn(new Error(err + ' (' + url + ':' + line + ')')); + return !mocha.options.allowUncaught; + }; + + uncaughtExceptionHandlers.push(fn); + } + }; + + process$4.listeners = function (e) { + if (e === 'uncaughtException') { + return uncaughtExceptionHandlers; + } + + return []; + }; // The BDD UI is registered by default, but no UI will be functional in the + // browser without an explicit call to the overridden `mocha.ui` (see below). + // Ensure that this default UI does not expose its methods to the global scope. + + + mocha.suite.removeAllListeners('pre-require'); + var immediateQueue = []; + var immediateTimeout; + + function timeslice() { + var immediateStart = new Date$1().getTime(); + + while (immediateQueue.length && new Date$1().getTime() - immediateStart < 100) { + immediateQueue.shift()(); + } + + if (immediateQueue.length) { + immediateTimeout = setTimeout$1(timeslice, 0); + } else { + immediateTimeout = null; + } + } + /** + * High-performance override of Runner.immediately. + */ + + + mocha$1.Runner.immediately = function (callback) { + immediateQueue.push(callback); + + if (!immediateTimeout) { + immediateTimeout = setTimeout$1(timeslice, 0); + } + }; + /** + * Function to allow assertion libraries to throw errors directly into mocha. + * This is useful when running tests in a browser because window.onerror will + * only receive the 'message' attribute of the Error. + */ + + + mocha.throwError = function (err) { + uncaughtExceptionHandlers.forEach(function (fn) { + fn(err); + }); + throw err; + }; + /** + * Override ui to ensure that the ui functions are initialized. + * Normally this would happen in Mocha.prototype.loadFiles. + */ + + + mocha.ui = function (ui) { + mocha$1.prototype.ui.call(this, ui); + this.suite.emit('pre-require', commonjsGlobal, null, this); + return this; + }; + /** + * Setup mocha with the given setting options. + */ + + + mocha.setup = function (opts) { + if (typeof opts === 'string') { + opts = { + ui: opts + }; + } + + if (opts.delay === true) { + this.delay(); + } + + var self = this; + Object.keys(opts).filter(function (opt) { + return opt !== 'delay'; + }).forEach(function (opt) { + if (Object.prototype.hasOwnProperty.call(opts, opt)) { + self[opt](opts[opt]); + } + }); + return this; + }; + /** + * Run mocha, returning the Runner. + */ + + + mocha.run = function (fn) { + var options = mocha.options; + mocha.globals('location'); + var query = parseQuery(commonjsGlobal.location.search || ''); + + if (query.grep) { + mocha.grep(query.grep); + } + + if (query.fgrep) { + mocha.fgrep(query.fgrep); + } + + if (query.invert) { + mocha.invert(); + } + + return mocha$1.prototype.run.call(mocha, function (err) { + // The DOM Document is not available in Web Workers. + var document = commonjsGlobal.document; + + if (document && document.getElementById('mocha') && options.noHighlighting !== true) { + highlightTags('code'); + } + + if (fn) { + fn(err); + } + }); + }; + /** + * Expose the process shim. + * https://github.com/mochajs/mocha/pull/916 + */ + + + mocha$1.process = process$4; + /** + * Expose mocha. + */ + + commonjsGlobal.Mocha = mocha$1; + commonjsGlobal.mocha = mocha; // for bundlers: enable `import {describe, it} from 'mocha'` + // `bdd` interface only + // prettier-ignore + + ['describe', 'context', 'it', 'specify', 'xdescribe', 'xcontext', 'xit', 'xspecify', 'before', 'beforeEach', 'afterEach', 'after'].forEach(function (key) { + mocha[key] = commonjsGlobal[key]; + }); + var browserEntry = mocha; + + return browserEntry; + +})); +//# sourceMappingURL=mocha.js.map diff --git a/build/node_modules/mocha/mocha.js.map b/build/node_modules/mocha/mocha.js.map new file mode 100644 index 00000000..9e68276c --- /dev/null +++ b/build/node_modules/mocha/mocha.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mocha.js","sources":["node_modules/core-js/internals/global.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/engine-user-agent.js","node_modules/core-js/internals/engine-v8-version.js","node_modules/core-js/internals/native-symbol.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/set-global.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/native-weak-map.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/redefine.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/is-array.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/is-constructor.js","node_modules/core-js/internals/array-species-constructor.js","node_modules/core-js/internals/array-species-create.js","node_modules/core-js/internals/create-property.js","node_modules/core-js/internals/array-method-has-species-support.js","node_modules/core-js/modules/es.array.splice.js","node_modules/core-js/internals/object-to-string.js","node_modules/core-js/modules/es.object.to-string.js","node_modules/core-js/internals/dom-iterables.js","node_modules/core-js/internals/dom-token-list-prototype.js","node_modules/core-js/internals/function-bind-context.js","node_modules/core-js/internals/array-iteration.js","node_modules/core-js/internals/array-method-is-strict.js","node_modules/core-js/internals/array-for-each.js","node_modules/core-js/modules/web.dom-collections.for-each.js","node_modules/core-js/modules/es.array.filter.js","node_modules/core-js/internals/object-keys.js","node_modules/core-js/modules/es.object.keys.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/internals/regexp-sticky-helpers.js","node_modules/core-js/internals/object-define-properties.js","node_modules/core-js/internals/html.js","node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/regexp-unsupported-dot-all.js","node_modules/core-js/internals/regexp-unsupported-ncg.js","node_modules/core-js/internals/regexp-exec.js","node_modules/core-js/modules/es.regexp.exec.js","node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","node_modules/core-js/internals/same-value.js","node_modules/core-js/internals/regexp-exec-abstract.js","node_modules/core-js/modules/es.string.search.js","node_modules/core-js/modules/es.array.concat.js","node_modules/rollup-plugin-node-polyfills/polyfills/global.js","node_modules/rollup-plugin-node-globals/src/global.js","node_modules/process-es6/browser.js","node_modules/core-js/modules/es.regexp.to-string.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/modules/es.object.get-prototype-of.js","node_modules/core-js/modules/es.function.name.js","node_modules/core-js/modules/es.reflect.own-keys.js","node_modules/rollup-plugin-node-polyfills/polyfills/events.js","node_modules/core-js/modules/es.array.join.js","node_modules/core-js/internals/function-apply.js","node_modules/core-js/internals/string-multibyte.js","node_modules/core-js/internals/advance-string-index.js","node_modules/core-js/internals/get-substitution.js","node_modules/core-js/modules/es.string.replace.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/inherit-if-required.js","node_modules/core-js/internals/this-number-value.js","node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/modules/es.number.constructor.js","node_modules/core-js/internals/is-regexp.js","node_modules/core-js/internals/set-species.js","node_modules/core-js/modules/es.regexp.constructor.js","node_modules/core-js/internals/array-slice-simple.js","node_modules/core-js/internals/object-get-own-property-names-external.js","node_modules/core-js/modules/es.object.get-own-property-names.js","node_modules/core-js/modules/es.array.map.js","node_modules/core-js/modules/es.string.match.js","node_modules/core-js/modules/es.object.get-own-property-descriptor.js","node_modules/core-js/internals/a-constructor.js","node_modules/core-js/internals/species-constructor.js","node_modules/core-js/modules/es.string.split.js","node_modules/core-js/internals/add-to-unscopables.js","node_modules/core-js/internals/iterators.js","node_modules/core-js/internals/iterators-core.js","node_modules/core-js/internals/set-to-string-tag.js","node_modules/core-js/internals/create-iterator-constructor.js","node_modules/core-js/internals/define-iterator.js","node_modules/core-js/modules/es.array.iterator.js","node_modules/core-js/internals/check-correctness-of-iteration.js","node_modules/core-js/internals/array-buffer-native.js","node_modules/core-js/internals/array-buffer-view-core.js","node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","node_modules/core-js/internals/redefine-all.js","node_modules/core-js/internals/an-instance.js","node_modules/core-js/internals/to-index.js","node_modules/core-js/internals/ieee754.js","node_modules/core-js/internals/array-fill.js","node_modules/core-js/internals/array-buffer.js","node_modules/core-js/internals/is-integral-number.js","node_modules/core-js/internals/to-positive-integer.js","node_modules/core-js/internals/to-offset.js","node_modules/core-js/internals/get-iterator-method.js","node_modules/core-js/internals/get-iterator.js","node_modules/core-js/internals/is-array-iterator-method.js","node_modules/core-js/internals/typed-array-from.js","node_modules/core-js/internals/typed-array-constructor.js","node_modules/core-js/modules/es.typed-array.uint8-array.js","node_modules/core-js/internals/array-copy-within.js","node_modules/core-js/modules/es.typed-array.copy-within.js","node_modules/core-js/modules/es.typed-array.every.js","node_modules/core-js/modules/es.typed-array.fill.js","node_modules/core-js/internals/array-from-constructor-and-list.js","node_modules/core-js/internals/typed-array-species-constructor.js","node_modules/core-js/internals/typed-array-from-species-and-list.js","node_modules/core-js/modules/es.typed-array.filter.js","node_modules/core-js/modules/es.typed-array.find.js","node_modules/core-js/modules/es.typed-array.find-index.js","node_modules/core-js/modules/es.typed-array.for-each.js","node_modules/core-js/modules/es.typed-array.includes.js","node_modules/core-js/modules/es.typed-array.index-of.js","node_modules/core-js/modules/es.typed-array.iterator.js","node_modules/core-js/modules/es.typed-array.join.js","node_modules/core-js/internals/array-last-index-of.js","node_modules/core-js/modules/es.typed-array.last-index-of.js","node_modules/core-js/modules/es.typed-array.map.js","node_modules/core-js/internals/array-reduce.js","node_modules/core-js/modules/es.typed-array.reduce.js","node_modules/core-js/modules/es.typed-array.reduce-right.js","node_modules/core-js/modules/es.typed-array.reverse.js","node_modules/core-js/modules/es.typed-array.set.js","node_modules/core-js/internals/array-slice.js","node_modules/core-js/modules/es.typed-array.slice.js","node_modules/core-js/modules/es.typed-array.some.js","node_modules/core-js/internals/array-sort.js","node_modules/core-js/internals/engine-ff-version.js","node_modules/core-js/internals/engine-is-ie-or-edge.js","node_modules/core-js/internals/engine-webkit-version.js","node_modules/core-js/modules/es.typed-array.sort.js","node_modules/core-js/modules/es.typed-array.subarray.js","node_modules/core-js/modules/es.typed-array.to-locale-string.js","node_modules/core-js/modules/es.typed-array.to-string.js","node_modules/core-js/modules/es.array-buffer.constructor.js","node_modules/core-js/internals/well-known-symbol-wrapped.js","node_modules/core-js/internals/path.js","node_modules/core-js/internals/define-well-known-symbol.js","node_modules/core-js/modules/es.symbol.js","node_modules/core-js/modules/es.symbol.description.js","node_modules/core-js/modules/es.symbol.species.js","node_modules/core-js/modules/es.array.species.js","node_modules/core-js/modules/es.array.fill.js","node_modules/core-js/modules/es.array.slice.js","node_modules/core-js/modules/es.array.includes.js","node_modules/core-js/internals/not-a-regexp.js","node_modules/core-js/internals/correct-is-regexp-logic.js","node_modules/core-js/modules/es.string.includes.js","node_modules/core-js/modules/web.url.to-json.js","node_modules/core-js/internals/string-trim-forced.js","node_modules/core-js/modules/es.string.trim.js","node_modules/buffer-es6/base64.js","node_modules/buffer-es6/ieee754.js","node_modules/buffer-es6/isArray.js","node_modules/buffer-es6/index.js","node_modules/rollup-plugin-node-polyfills/polyfills/process-es6.js","node_modules/rollup-plugin-node-polyfills/polyfills/inherits.js","node_modules/rollup-plugin-node-polyfills/polyfills/util.js","node_modules/rollup-plugin-node-polyfills/polyfills/buffer-es6.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/buffer-list.js","node_modules/rollup-plugin-node-polyfills/polyfills/string-decoder.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/readable.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/writable.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/duplex.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/transform.js","node_modules/rollup-plugin-node-polyfills/polyfills/readable-stream/passthrough.js","node_modules/rollup-plugin-node-polyfills/polyfills/stream.js","node_modules/browser-stdout/index.js","lib/browser/parse-query.js","lib/browser/highlight-tags.js","node_modules/core-js/modules/es.symbol.iterator.js","node_modules/core-js/modules/es.string.iterator.js","node_modules/core-js/modules/web.dom-collections.iterator.js","node_modules/core-js/modules/es.symbol.async-iterator.js","node_modules/core-js/modules/es.symbol.to-string-tag.js","node_modules/core-js/modules/es.json.to-string-tag.js","node_modules/core-js/modules/es.math.to-string-tag.js","node_modules/core-js/internals/native-promise-constructor.js","node_modules/core-js/internals/iterator-close.js","node_modules/core-js/internals/iterate.js","node_modules/core-js/internals/validate-arguments-length.js","node_modules/core-js/internals/engine-is-ios.js","node_modules/core-js/internals/engine-is-node.js","node_modules/core-js/internals/task.js","node_modules/core-js/internals/engine-is-ios-pebble.js","node_modules/core-js/internals/engine-is-webos-webkit.js","node_modules/core-js/internals/microtask.js","node_modules/core-js/internals/new-promise-capability.js","node_modules/core-js/internals/promise-resolve.js","node_modules/core-js/internals/host-report-errors.js","node_modules/core-js/internals/perform.js","node_modules/core-js/internals/queue.js","node_modules/core-js/internals/engine-is-browser.js","node_modules/core-js/modules/es.promise.js","node_modules/regenerator-runtime/runtime.js","node_modules/escape-string-regexp/index.js","node_modules/rollup-plugin-node-polyfills/polyfills/path.js","node_modules/core-js/internals/call-with-safe-iteration-closing.js","node_modules/core-js/internals/array-from.js","node_modules/core-js/modules/es.array.from.js","node_modules/core-js/modules/es.array.sort.js","node_modules/diff/dist/diff.js","node_modules/ms/index.js","node_modules/core-js/internals/array-buffer-non-extensible.js","node_modules/core-js/internals/object-is-extensible.js","node_modules/core-js/internals/freezing.js","node_modules/core-js/internals/internal-metadata.js","node_modules/core-js/internals/collection.js","node_modules/core-js/internals/collection-strong.js","node_modules/core-js/modules/es.set.js","node_modules/core-js/internals/object-assign.js","node_modules/core-js/modules/es.object.assign.js","node_modules/core-js/modules/es.object.freeze.js","node_modules/rollup-plugin-node-globals/src/browser.js","node_modules/nanoid/non-secure/index.js","node_modules/he/he.js","lib/utils.js","node_modules/log-symbols/browser.js","node_modules/core-js/modules/es.map.js","lib/pending.js","node_modules/debug/node_modules/ms/index.js","node_modules/debug/src/common.js","node_modules/debug/src/browser.js","node_modules/core-js/internals/object-to-array.js","node_modules/core-js/modules/es.object.values.js","lib/errors.js","lib/runnable.js","lib/hook.js","lib/suite.js","lib/runner.js","lib/reporters/base.js","lib/reporters/dot.js","lib/reporters/doc.js","lib/reporters/tap.js","node_modules/rollup-plugin-node-polyfills/polyfills/empty.js","lib/reporters/json.js","node_modules/core-js/internals/string-repeat.js","node_modules/core-js/modules/es.number.to-fixed.js","lib/browser/progress.js","lib/reporters/html.js","lib/reporters/list.js","lib/reporters/min.js","lib/reporters/spec.js","lib/reporters/nyan.js","lib/reporters/xunit.js","lib/reporters/markdown.js","lib/reporters/progress.js","lib/reporters/landing.js","lib/reporters/json-stream.js","lib/reporters/index.js","lib/browser/growl.js","lib/stats-collector.js","lib/test.js","lib/interfaces/common.js","lib/interfaces/bdd.js","lib/interfaces/tdd.js","lib/interfaces/qunit.js","lib/interfaces/exports.js","lib/interfaces/index.js","lib/context.js","lib/mocha.js","browser-entry.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.21.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);\n return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeSearch, rx, S);\n\n if (res.done) return res.value;\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\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.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.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}\nexport function 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};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*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();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\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","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var needDomainExit = false;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n if (needDomainExit)\n domain.exit();\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n var primValue = toPrimitive(value, 'number');\n return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = charCodeAt(it, 0);\n if (first === 43 || first === 45) {\n third = charCodeAt(it, 2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (charCodeAt(it, 1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = arraySlice(it, 2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = charCodeAt(digits, index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n var dummy = this;\n // check on 1..constructor(foo) case\n return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar regExpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = global.SyntaxError;\nvar getFlags = uncurryThis(regExpFlags);\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr = chr + charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxy(keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","module.exports = {};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/define-iterator');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY] = property;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = require('../internals/global');\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n c = pow(2, -exponent);\n if (number * c < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n while (mantissaLength >= 8) {\n buffer[index++] = mantissa & 255;\n mantissa /= 256;\n mantissaLength -= 8;\n }\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n while (exponentLength > 0) {\n buffer[index++] = exponent & 255;\n exponent /= 256;\n exponentLength -= 8;\n }\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n while (nBits > 0) {\n exponent = exponent * 256 + buffer[index--];\n nBits -= 8;\n }\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n while (nBits > 0) {\n mantissa = mantissa * 256 + buffer[index--];\n nBits -= 8;\n }\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice-simple');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return isLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var global = require('../internals/global');\nvar toPositiveInteger = require('../internals/to-positive-integer');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $ArrayCopyWithin = require('../internals/array-copy-within');\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar call = require('../internals/function-call');\nvar $fill = require('../internals/array-fill');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n return call(\n $fill,\n aTypedArray(this),\n value,\n length > 1 ? arguments[1] : undefined,\n length > 2 ? arguments[2] : undefined\n );\n});\n","var lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list) {\n var index = 0;\n var length = lengthOfArrayLike(list);\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","var ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n","var arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nmodule.exports = function (instance, list) {\n return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar TypedArrayPrototype = Uint8Array && Uint8Array.prototype;\n\nvar GENERIC = !fails(function () {\n TypedArrayPrototype[ITERATOR].call([1]);\n});\n\nvar ITERATOR_IS_VALUES = !!TypedArrayPrototype\n && TypedArrayPrototype.values\n && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values\n && TypedArrayPrototype.values.name === 'values';\n\nvar typedArrayValues = function values() {\n return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n return $join(aTypedArray(this), separator);\n});\n","'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar apply = require('../internals/function-apply');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n var length = arguments.length;\n return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (typedArraySpeciesConstructor(O))(length);\n });\n});\n","var global = require('../internals/global');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = arraySlice(aTypedArray(this), start, end);\n var C = typedArraySpeciesConstructor(this);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n un$Sort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return un$Sort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n var C = typedArraySpeciesConstructor(O);\n return new C(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return apply(\n $toLocaleString,\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n arraySlice(arguments)\n );\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return join(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar arrayBufferModule = require('../internals/array-buffer');\nvar setSpecies = require('../internals/set-species');\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var setSpecies = require('../internals/set-species');\n\n// `Array[@@species]` getter\n// https://tc39.es/ecma262/#sec-get-array-@@species\nsetSpecies('Array');\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return call(URL.prototype.toString, this);\n }\n});\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\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\nexport function 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\nexport function 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","\nexport function 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\nexport function 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","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var 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 : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\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\nexport function 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\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\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 ''\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 (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 (!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 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 = 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 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\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\nexport function 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","// 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.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.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}function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {};\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.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)*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 browser$1 = {\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\nexport default browser$1;\nexport { addListener, argv, binding, browser, chdir, config, cwd, emit, env, hrtime, nextTick, off, on, once, platform, release, removeAllListeners, removeListener, title, umask, uptime, version, versions };\n","\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\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 inherits = 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}\nexport default inherits;\n","// 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.\nimport process from 'process';\nvar formatRegExp = /%[sdj%]/g;\nexport function format(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.\nexport function deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return 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;\nexport function debuglog(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 = 0;\n debugs[set] = function() {\n var msg = format.apply(null, 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*/\nexport function 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 _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}\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 !== 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()`.\nexport function isArray(ar) {\n return Array.isArray(ar);\n}\n\nexport function isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nexport function isNull(arg) {\n return arg === null;\n}\n\nexport function isNullOrUndefined(arg) {\n return arg == null;\n}\n\nexport function isNumber(arg) {\n return typeof arg === 'number';\n}\n\nexport function isString(arg) {\n return typeof arg === 'string';\n}\n\nexport function isSymbol(arg) {\n return typeof arg === 'symbol';\n}\n\nexport function isUndefined(arg) {\n return arg === void 0;\n}\n\nexport function isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nexport function isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nexport function isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nexport function isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nexport function isFunction(arg) {\n return typeof arg === 'function';\n}\n\nexport function 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}\n\nexport function isBuffer(maybeBuf) {\n return Buffer.isBuffer(maybeBuf);\n}\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\nexport function log() {\n console.log('%s - %s', timestamp(), format.apply(null, 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 */\nimport inherits from './inherits';\nexport {inherits}\n\nexport function _extend(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\nexport default {\n inherits: inherits,\n _extend: _extend,\n log: log,\n isBuffer: isBuffer,\n isPrimitive: isPrimitive,\n isFunction: isFunction,\n isError: isError,\n isDate: isDate,\n isObject: isObject,\n isRegExp: isRegExp,\n isUndefined: isUndefined,\n isSymbol: isSymbol,\n isString: isString,\n isNumber: isNumber,\n isNullOrUndefined: isNullOrUndefined,\n isNull: isNull,\n isBoolean: isBoolean,\n isArray: isArray,\n inspect: inspect,\n deprecate: deprecate,\n format: format,\n debuglog: debuglog\n}\n","var 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 \n * @license MIT\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.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength();\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}\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\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0;\n }\n return Buffer.alloc(+length)\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 ''\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 (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 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);\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);\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\nexport { Buffer, INSPECT_MAX_BYTES, SlowBuffer, isBuffer, _kMaxLength as kMaxLength };\n","import {Buffer} from 'buffer';\n\nexport default BufferList;\n\nfunction BufferList() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n};\n\nBufferList.prototype.clear = function () {\n this.head = this.tail = null;\n this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n p.data.copy(ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n};\n","// 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\nimport {Buffer} from 'buffer';\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n }\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nexport function StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n};\n\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n","'use strict';\n\n\nReadable.ReadableState = ReadableState;\nimport EventEmitter from 'events';\nimport {inherits, debuglog} from 'util';\nimport BufferList from './buffer-list';\nimport {StringDecoder} from 'string_decoder';\nimport {Duplex} from './duplex';\nimport {nextTick} from 'process';\n\nvar debug = debuglog('stream');\ninherits(Readable, EventEmitter);\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') {\n return emitter.prependListener(event, fn);\n } else {\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event])\n emitter.on(event, fn);\n else if (Array.isArray(emitter._events[event]))\n emitter._events[event].unshift(fn);\n else\n emitter._events[event] = [fn, emitter._events[event]];\n }\n}\nfunction listenerCount (emitter, type) {\n return emitter.listeners(type).length;\n}\nfunction ReadableState(options, stream) {\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nexport default Readable;\nexport function Readable(options) {\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n EventEmitter.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false);\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (listenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && src.listeners('data').length) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = EventEmitter.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this, state);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n","// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n\nimport {inherits, deprecate} from 'util';\nimport {Buffer} from 'buffer';\nWritable.WritableState = WritableState;\nimport {EventEmitter} from 'events';\nimport {Duplex} from './duplex';\nimport {nextTick} from 'process';\ninherits(Writable, EventEmitter);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nfunction WritableState(options, stream) {\n Object.defineProperty(this, 'buffer', {\n get: deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\nexport default Writable;\nexport function Writable(options) {\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n EventEmitter.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n nextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) nextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n nextTick(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}\n","\nimport {inherits} from 'util';\nimport {nextTick} from 'process';\nimport {Readable} from './readable';\nimport {Writable} from './writable';\n\n\ninherits(Duplex, Readable);\n\nvar keys = Object.keys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\nexport default Duplex;\nexport function Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n","// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\nimport {Duplex} from './duplex';\n\n\nimport {inherits} from 'util';\ninherits(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\nexport default Transform;\nexport function Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}\n","\nimport {Transform} from './transform';\n\nimport {inherits} from 'util';\ninherits(PassThrough, Transform);\nexport default PassThrough;\nexport function PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n","import EE from 'events';\nimport {inherits} from 'util';\n\nimport {Duplex} from './readable-stream/duplex.js';\nimport {Readable} from './readable-stream/readable.js';\nimport {Writable} from './readable-stream/writable.js';\nimport {Transform} from './readable-stream/transform.js';\nimport {PassThrough} from './readable-stream/passthrough.js';\ninherits(Stream, EE);\nStream.Readable = Readable;\nStream.Writable = Writable;\nStream.Duplex = Duplex;\nStream.Transform = Transform;\nStream.PassThrough = PassThrough;\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\nexport default Stream;\nexport {Readable,Writable,Duplex,Transform,PassThrough,Stream}\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","var WritableStream = require('stream').Writable\nvar inherits = require('util').inherits\n\nmodule.exports = BrowserStdout\n\n\ninherits(BrowserStdout, WritableStream)\n\nfunction BrowserStdout(opts) {\n if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts)\n\n opts = opts || {}\n WritableStream.call(this, opts)\n this.label = (opts.label !== undefined) ? opts.label : 'stdout'\n}\n\nBrowserStdout.prototype._write = function(chunks, encoding, cb) {\n var output = chunks.toString ? chunks.toString() : chunks\n if (this.label === false) {\n console.log(output)\n } else {\n console.log(this.label+':', output)\n }\n process.nextTick(cb)\n}\n","'use strict';\n\n/**\n * Parse the given `qs`.\n *\n * @private\n * @param {string} qs\n * @return {Object}\n */\nmodule.exports = function parseQuery(qs) {\n return qs\n .replace('?', '')\n .split('&')\n .reduce(function (obj, pair) {\n var i = pair.indexOf('=');\n var key = pair.slice(0, i);\n var val = pair.slice(++i);\n\n // Due to how the URLSearchParams API treats spaces\n obj[key] = decodeURIComponent(val.replace(/\\+/g, '%20'));\n\n return obj;\n }, {});\n};\n","'use strict';\n\n/**\n * Highlight the given string of `js`.\n *\n * @private\n * @param {string} js\n * @return {string}\n */\nfunction highlight(js) {\n return js\n .replace(//g, '>')\n .replace(/\\/\\/(.*)/gm, '//$1')\n .replace(/('.*?')/gm, '$1')\n .replace(/(\\d+\\.\\d+)/gm, '$1')\n .replace(/(\\d+)/gm, '$1')\n .replace(\n /\\bnew[ \\t]+(\\w+)/gm,\n 'new $1'\n )\n .replace(\n /\\b(function|new|throw|return|var|if|else)\\b/gm,\n '$1'\n );\n}\n\n/**\n * Highlight the contents of tag `name`.\n *\n * @private\n * @param {string} name\n */\nmodule.exports = function highlightTags(name) {\n var code = document.getElementById('mocha').getElementsByTagName(name);\n for (var i = 0, len = code.length; i < len; ++i) {\n code[i].innerHTML = highlight(code[i].innerHTML);\n }\n};\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n return passed;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n if (this.head) this.tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n this.head = entry.next;\n if (this.tail === entry) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","module.exports = typeof window == 'object';\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n // eslint-disable-next-line unicorn/no-thenable -- safe\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state == PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","// 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\nexport function resolve() {\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] : '/';\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\nexport function normalize(path) {\n var isPathAbsolute = isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isPathAbsolute).join('/');\n\n if (!path && !isPathAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isPathAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexport function isAbsolute(path) {\n return path.charAt(0) === '/';\n}\n\n// posix version\nexport function join() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return 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\nexport function relative(from, to) {\n from = resolve(from).substr(1);\n to = 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\nexport var sep = '/';\nexport var delimiter = ':';\n\nexport function dirname(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\nexport function basename(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\nexport function extname(path) {\n return splitPath(path)[3];\n}\nexport default {\n extname: extname,\n basename: basename,\n dirname: dirname,\n sep: sep,\n delimiter: delimiter,\n relative: relative,\n join: join,\n isAbsolute: isAbsolute,\n normalize: normalize,\n resolve: resolve\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","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.Diff = {}));\n}(this, (function (exports) { 'use strict';\n\n function Diff() {}\n Diff.prototype = {\n diff: function diff(oldString, newString) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n this.options = options;\n var self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function () {\n callback(undefined, value);\n }, 0);\n return true;\n } else {\n return value;\n }\n } // Allow subclasses to massage the input prior to running\n\n\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{\n value: this.join(newString),\n count: newString.length\n }]);\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath = void 0;\n\n var addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced.\n\n\n if (callback) {\n (function exec() {\n setTimeout(function () {\n // This should not happen, but we want to be safe.\n\n /* istanbul ignore next */\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n }\n },\n pushComponent: function pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n equals: function equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return value.split('');\n },\n join: function join(chars) {\n return chars.join('');\n }\n };\n\n function buildValues(diff, components, newString, oldString, useLongestToken) {\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n\n if (componentPos && components[componentPos - 1].added) {\n var tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n } // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n\n\n var lastComponent = components[componentLen - 1];\n\n if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n }\n\n function clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n }\n\n var characterDiff = new Diff();\n function diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n }\n\n function generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n\n return defaults;\n }\n\n //\n // Ranges and exceptions:\n // Latin-1 Supplement, 0080–00FF\n // - U+00D7 × Multiplication sign\n // - U+00F7 ÷ Division sign\n // Latin Extended-A, 0100–017F\n // Latin Extended-B, 0180–024F\n // IPA Extensions, 0250–02AF\n // Spacing Modifier Letters, 02B0–02FF\n // - U+02C7 ˇ ˇ Caron\n // - U+02D8 ˘ ˘ Breve\n // - U+02D9 ˙ ˙ Dot Above\n // - U+02DA ˚ ˚ Ring Above\n // - U+02DB ˛ ˛ Ogonek\n // - U+02DC ˜ ˜ Small Tilde\n // - U+02DD ˝ ˝ Double Acute Accent\n // Latin Extended Additional, 1E00–1EFF\n\n var extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\n var reWhitespace = /\\S/;\n var wordDiff = new Diff();\n\n wordDiff.equals = function (left, right) {\n if (this.options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n\n return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n };\n\n wordDiff.tokenize = function (value) {\n // All whitespace symbols except newline group into one token, each newline - in separate token\n var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n for (var i = 0; i < tokens.length - 1; i++) {\n // If we have an empty string in the next field and we have only word chars before and after, merge\n if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n tokens[i] += tokens[i + 2];\n tokens.splice(i + 1, 2);\n i--;\n }\n }\n\n return tokens;\n };\n\n function diffWords(oldStr, newStr, options) {\n options = generateOptions(options, {\n ignoreWhitespace: true\n });\n return wordDiff.diff(oldStr, newStr, options);\n }\n function diffWordsWithSpace(oldStr, newStr, options) {\n return wordDiff.diff(oldStr, newStr, options);\n }\n\n var lineDiff = new Diff();\n\n lineDiff.tokenize = function (value) {\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n } // Merge the content and line separators into single tokens\n\n\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n\n if (i % 2 && !this.options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n if (this.options.ignoreWhitespace) {\n line = line.trim();\n }\n\n retLines.push(line);\n }\n }\n\n return retLines;\n };\n\n function diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n }\n function diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n }\n\n var sentenceDiff = new Diff();\n\n sentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n };\n\n function diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n }\n\n var cssDiff = new Diff();\n\n cssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n };\n\n function diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n }\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var objectPrototypeToString = Object.prototype.toString;\n var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n\n jsonDiff.useLongestToken = true;\n jsonDiff.tokenize = lineDiff.tokenize;\n\n jsonDiff.castInput = function (value) {\n var _this$options = this.options,\n undefinedReplacement = _this$options.undefinedReplacement,\n _this$options$stringi = _this$options.stringifyReplacer,\n stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _this$options$stringi;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n };\n\n jsonDiff.equals = function (left, right) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n };\n\n function diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n } // This function handles the presence of circular references by bailing out when encountering an\n // object that is already on the \"stack\" of items being processed. Accepts an optional replacer\n\n function canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n\n if (replacer) {\n obj = replacer(key, obj);\n }\n\n var i;\n\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n\n var canonicalizedObj;\n\n if ('[object Array]' === objectPrototypeToString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n\n var sortedKeys = [],\n _key;\n\n for (_key in obj) {\n /* istanbul ignore else */\n if (obj.hasOwnProperty(_key)) {\n sortedKeys.push(_key);\n }\n }\n\n sortedKeys.sort();\n\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n\n return canonicalizedObj;\n }\n\n var arrayDiff = new Diff();\n\n arrayDiff.tokenize = function (value) {\n return value.slice();\n };\n\n arrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n };\n\n function diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n }\n\n function parsePatch(uniDiff) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n list = [],\n i = 0;\n\n function parseIndex() {\n var index = {};\n list.push(index); // Parse diff metadata\n\n while (i < diffstr.length) {\n var line = diffstr[i]; // File header found, end parsing diff metadata\n\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n } // Diff index\n\n\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n if (header) {\n index.index = header[1];\n }\n\n i++;\n } // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n\n\n parseFileHeader(index);\n parseFileHeader(index); // Parse hunks\n\n index.hunks = [];\n\n while (i < diffstr.length) {\n var _line = diffstr[i];\n\n if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line && options.strict) {\n // Ignore unexpected content unless in strict mode\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n } // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n\n\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n } // Parses a hunk\n // This assumes that we are at the start of a hunk.\n\n\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: [],\n linedelimiters: []\n }; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n\n var addCount = 0,\n removeCount = 0;\n\n for (; i < diffstr.length; i++) {\n // Lines starting with '---' could be mistaken for the \"remove line\" operation\n // But they could be the header for the next file. Therefore prune such cases out.\n if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n break;\n }\n\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n break;\n }\n } // Handle the empty block count case\n\n\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n } // Perform optional sanity checking\n\n\n if (options.strict) {\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n }\n\n return hunk;\n }\n\n while (i < diffstr.length) {\n parseIndex();\n }\n\n return list;\n }\n\n // Iterator that traverses in the range of [min, max], stepping\n // by distance from a given start position. I.e. for [0, 4], with\n // start of 2, this will iterate 2, 3, 1, 4, 0.\n function distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n } // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n\n\n if (start + localOffset <= maxLine) {\n return localOffset;\n }\n\n forwardExhausted = true;\n }\n\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n } // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n\n\n if (minLine <= start - localOffset) {\n return -localOffset++;\n }\n\n backwardExhausted = true;\n return iterator();\n } // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n\n };\n }\n\n function applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n\n uniDiff = uniDiff[0];\n } // Apply the diff to the input\n\n\n var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n errorCount = 0,\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0,\n offset = 0,\n removeEOFNL,\n addEOFNL;\n /**\n * Checks if the hunk exactly fits on the provided location\n */\n\n\n function hunkFits(hunk, toPos) {\n for (var j = 0; j < hunk.lines.length; j++) {\n var line = hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line;\n\n if (operation === ' ' || operation === '-') {\n // Context sanity check\n if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n errorCount++;\n\n if (errorCount > fuzzFactor) {\n return false;\n }\n }\n\n toPos++;\n }\n }\n\n return true;\n } // Search best fit offsets for each hunk based on the previous ones\n\n\n for (var i = 0; i < hunks.length; i++) {\n var hunk = hunks[i],\n maxLine = lines.length - hunk.oldLines,\n localOffset = 0,\n toPos = offset + hunk.oldStart - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n\n for (; localOffset !== undefined; localOffset = iterator()) {\n if (hunkFits(hunk, toPos + localOffset)) {\n hunk.offset = offset += localOffset;\n break;\n }\n }\n\n if (localOffset === undefined) {\n return false;\n } // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n\n\n minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n } // Apply patch hunks\n\n\n var diffOffset = 0;\n\n for (var _i = 0; _i < hunks.length; _i++) {\n var _hunk = hunks[_i],\n _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n diffOffset += _hunk.newLines - _hunk.oldLines;\n\n for (var j = 0; j < _hunk.lines.length; j++) {\n var line = _hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line,\n delimiter = _hunk.linedelimiters[j];\n\n if (operation === ' ') {\n _toPos++;\n } else if (operation === '-') {\n lines.splice(_toPos, 1);\n delimiters.splice(_toPos, 1);\n /* istanbul ignore else */\n } else if (operation === '+') {\n lines.splice(_toPos, 0, content);\n delimiters.splice(_toPos, 0, delimiter);\n _toPos++;\n } else if (operation === '\\\\') {\n var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n if (previousOperation === '+') {\n removeEOFNL = true;\n } else if (previousOperation === '-') {\n addEOFNL = true;\n }\n }\n }\n } // Handle EOFNL insertion/removal\n\n\n if (removeEOFNL) {\n while (!lines[lines.length - 1]) {\n lines.pop();\n delimiters.pop();\n }\n } else if (addEOFNL) {\n lines.push('');\n delimiters.push('\\n');\n }\n\n for (var _k = 0; _k < lines.length - 1; _k++) {\n lines[_k] = lines[_k] + delimiters[_k];\n }\n\n return lines.join('');\n } // Wrapper that supports multiple file patches via callbacks.\n\n function applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n\n var currentIndex = 0;\n\n function processIndex() {\n var index = uniDiff[currentIndex++];\n\n if (!index) {\n return options.complete();\n }\n\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n\n processIndex();\n });\n });\n }\n\n processIndex();\n }\n\n function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n\n var diff = diffLines(oldStr, newStr, options);\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n\n var _loop = function _loop(i) {\n var current = diff[i],\n lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n current.lines = lines;\n\n if (current.added || current.removed) {\n var _curRange;\n\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n } // Output our changes\n\n\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n }))); // Track the updated file position\n\n\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n\n var hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n\n if (i >= diff.length - 2 && lines.length <= options.context) {\n // EOF is inside this hunk\n var oldEOFNewline = /\\n$/.test(oldStr);\n var newEOFNewline = /\\n$/.test(newStr);\n var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n // special case: old has no eol and no trailing context; no-nl can end up before adds\n // however, if the old file is empty, do not output the no-nl line\n curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n }\n\n if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n curRange.push('\\\\ No newline at end of file');\n }\n }\n\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n\n for (var i = 0; i < diff.length; i++) {\n _loop(i);\n }\n\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n }\n function formatPatch(diff) {\n var ret = [];\n\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n\n return ret.join('\\n') + '\\n';\n }\n function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n }\n function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n }\n\n function arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n return arrayStartsWith(a, b);\n }\n function arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n }\n function merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n\n return ret;\n }\n\n function loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n\n return structuredPatch(undefined, undefined, base, param);\n }\n\n return param;\n }\n\n function fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n }\n\n function selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n }\n\n function hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n }\n\n function cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n }\n\n function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n }; // Handle any leading content\n\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n } // Now push anything that may be remaining\n\n\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n }\n\n function mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n\n return;\n }\n\n conflict(hunk, myChanges, theirChanges);\n }\n\n function removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n\n if (theirChanges.merged) {\n var _hunk$lines6;\n\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n }\n\n function conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n }\n\n function insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n }\n\n function insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n }\n\n function collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n\n while (state.index < state.lines.length) {\n var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n\n return ret;\n }\n\n function collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n if (match[0] === '+') {\n break;\n }\n\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++; // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n\n if (change[0] === '+') {\n conflicted = true;\n\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n\n if (conflicted) {\n return changes;\n }\n\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n\n return {\n merged: merged,\n changes: changes\n };\n }\n\n function allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n }\n\n function skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n\n state.index += delta;\n return true;\n }\n\n function calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n }\n\n // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n function convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n\n ret.push([operation, change.value]);\n }\n\n return ret;\n }\n\n function convertChangesToXML(changes) {\n var ret = [];\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n\n ret.push(escapeHTML(change.value));\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n }\n\n return ret.join('');\n }\n\n function escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(//g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n }\n\n exports.Diff = Diff;\n exports.applyPatch = applyPatch;\n exports.applyPatches = applyPatches;\n exports.canonicalize = canonicalize;\n exports.convertChangesToDMP = convertChangesToDMP;\n exports.convertChangesToXML = convertChangesToXML;\n exports.createPatch = createPatch;\n exports.createTwoFilesPatch = createTwoFilesPatch;\n exports.diffArrays = diffArrays;\n exports.diffChars = diffChars;\n exports.diffCss = diffCss;\n exports.diffJson = diffJson;\n exports.diffLines = diffLines;\n exports.diffSentences = diffSentences;\n exports.diffTrimmedLines = diffTrimmedLines;\n exports.diffWords = diffWords;\n exports.diffWordsWithSpace = diffWordsWithSpace;\n exports.merge = merge;\n exports.parsePatch = parsePatch;\n exports.structuredPatch = structuredPatch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n","export var browser = true;\n","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nlet nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\nexport { nanoid, customAlphabet }\n","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","'use strict';\n\n/**\n * Various utility functions used throughout Mocha's codebase.\n * @module utils\n */\n\n/**\n * Module dependencies.\n */\n\nconst {nanoid} = require('nanoid/non-secure');\nvar path = require('path');\nvar util = require('util');\nvar he = require('he');\n\nconst MOCHA_ID_PROP_NAME = '__mocha_id__';\n\n/**\n * Inherit the prototype methods from one constructor into another.\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 * @throws {TypeError} if either constructor is null, or if super constructor\n * lacks a prototype.\n */\nexports.inherits = util.inherits;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @private\n * @param {string} html\n * @return {string}\n */\nexports.escape = function (html) {\n return he.encode(String(html), {useNamedReferences: false});\n};\n\n/**\n * Test if the given obj is type of string.\n *\n * @private\n * @param {Object} obj\n * @return {boolean}\n */\nexports.isString = function (obj) {\n return typeof obj === 'string';\n};\n\n/**\n * Compute a slug from the given `str`.\n *\n * @private\n * @param {string} str\n * @return {string}\n */\nexports.slug = function (str) {\n return str\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^-\\w]/g, '')\n .replace(/-{2,}/g, '-');\n};\n\n/**\n * Strip the function definition from `str`, and re-indent for pre whitespace.\n *\n * @param {string} str\n * @return {string}\n */\nexports.clean = function (str) {\n str = str\n .replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, '\\n')\n .replace(/^\\uFEFF/, '')\n // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content\n .replace(\n /^function(?:\\s*|\\s+[^(]*)\\([^)]*\\)\\s*\\{((?:.|\\n)*?)\\s*\\}$|^\\([^)]*\\)\\s*=>\\s*(?:\\{((?:.|\\n)*?)\\s*\\}|((?:.|\\n)*))$/,\n '$1$2$3'\n );\n\n var spaces = str.match(/^\\n?( *)/)[1].length;\n var tabs = str.match(/^\\n?(\\t*)/)[1].length;\n var re = new RegExp(\n '^\\n?' + (tabs ? '\\t' : ' ') + '{' + (tabs || spaces) + '}',\n 'gm'\n );\n\n str = str.replace(re, '');\n\n return str.trim();\n};\n\n/**\n * If a value could have properties, and has none, this function is called,\n * which returns a string representation of the empty value.\n *\n * Functions w/ no properties return `'[Function]'`\n * Arrays w/ length === 0 return `'[]'`\n * Objects w/ no properties return `'{}'`\n * All else: return result of `value.toString()`\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} typeHint The type of the value\n * @returns {string}\n */\nfunction emptyRepresentation(value, typeHint) {\n switch (typeHint) {\n case 'function':\n return '[Function]';\n case 'object':\n return '{}';\n case 'array':\n return '[]';\n default:\n return value.toString();\n }\n}\n\n/**\n * Takes some variable and asks `Object.prototype.toString()` what it thinks it\n * is.\n *\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n * @param {*} value The value to test.\n * @returns {string} Computed type\n * @example\n * canonicalType({}) // 'object'\n * canonicalType([]) // 'array'\n * canonicalType(1) // 'number'\n * canonicalType(false) // 'boolean'\n * canonicalType(Infinity) // 'number'\n * canonicalType(null) // 'null'\n * canonicalType(new Date()) // 'date'\n * canonicalType(/foo/) // 'regexp'\n * canonicalType('type') // 'string'\n * canonicalType(global) // 'global'\n * canonicalType(new String('foo') // 'object'\n * canonicalType(async function() {}) // 'asyncfunction'\n * canonicalType(await import(name)) // 'module'\n */\nvar canonicalType = (exports.canonicalType = function canonicalType(value) {\n if (value === undefined) {\n return 'undefined';\n } else if (value === null) {\n return 'null';\n } else if (Buffer.isBuffer(value)) {\n return 'buffer';\n }\n return Object.prototype.toString\n .call(value)\n .replace(/^\\[.+\\s(.+?)]$/, '$1')\n .toLowerCase();\n});\n\n/**\n *\n * Returns a general type or data structure of a variable\n * @private\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures\n * @param {*} value The value to test.\n * @returns {string} One of undefined, boolean, number, string, bigint, symbol, object\n * @example\n * type({}) // 'object'\n * type([]) // 'array'\n * type(1) // 'number'\n * type(false) // 'boolean'\n * type(Infinity) // 'number'\n * type(null) // 'null'\n * type(new Date()) // 'object'\n * type(/foo/) // 'object'\n * type('type') // 'string'\n * type(global) // 'object'\n * type(new String('foo') // 'string'\n */\nexports.type = function type(value) {\n // Null is special\n if (value === null) return 'null';\n const primitives = new Set([\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'bigint',\n 'symbol'\n ]);\n const _type = typeof value;\n if (_type === 'function') return _type;\n if (primitives.has(_type)) return _type;\n if (value instanceof String) return 'string';\n if (value instanceof Error) return 'error';\n if (Array.isArray(value)) return 'array';\n\n return _type;\n};\n\n/**\n * Stringify `value`. Different behavior depending on type of value:\n *\n * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively.\n * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes.\n * - If `value` is an *empty* object, function, or array, return result of function\n * {@link emptyRepresentation}.\n * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of\n * JSON.stringify().\n *\n * @private\n * @see exports.type\n * @param {*} value\n * @return {string}\n */\nexports.stringify = function (value) {\n var typeHint = canonicalType(value);\n\n if (!~['object', 'array', 'function'].indexOf(typeHint)) {\n if (typeHint === 'buffer') {\n var json = Buffer.prototype.toJSON.call(value);\n // Based on the toJSON result\n return jsonStringify(\n json.data && json.type ? json.data : json,\n 2\n ).replace(/,(\\n|$)/g, '$1');\n }\n\n // IE7/IE8 has a bizarre String constructor; needs to be coerced\n // into an array and back to obj.\n if (typeHint === 'string' && typeof value === 'object') {\n value = value.split('').reduce(function (acc, char, idx) {\n acc[idx] = char;\n return acc;\n }, {});\n typeHint = 'object';\n } else {\n return jsonStringify(value);\n }\n }\n\n for (var prop in value) {\n if (Object.prototype.hasOwnProperty.call(value, prop)) {\n return jsonStringify(\n exports.canonicalize(value, null, typeHint),\n 2\n ).replace(/,(\\n|$)/g, '$1');\n }\n }\n\n return emptyRepresentation(value, typeHint);\n};\n\n/**\n * like JSON.stringify but more sense.\n *\n * @private\n * @param {Object} object\n * @param {number=} spaces\n * @param {number=} depth\n * @returns {*}\n */\nfunction jsonStringify(object, spaces, depth) {\n if (typeof spaces === 'undefined') {\n // primitive types\n return _stringify(object);\n }\n\n depth = depth || 1;\n var space = spaces * depth;\n var str = Array.isArray(object) ? '[' : '{';\n var end = Array.isArray(object) ? ']' : '}';\n var length =\n typeof object.length === 'number'\n ? object.length\n : Object.keys(object).length;\n // `.repeat()` polyfill\n function repeat(s, n) {\n return new Array(n).join(s);\n }\n\n function _stringify(val) {\n switch (canonicalType(val)) {\n case 'null':\n case 'undefined':\n val = '[' + val + ']';\n break;\n case 'array':\n case 'object':\n val = jsonStringify(val, spaces, depth + 1);\n break;\n case 'boolean':\n case 'regexp':\n case 'symbol':\n case 'number':\n val =\n val === 0 && 1 / val === -Infinity // `-0`\n ? '-0'\n : val.toString();\n break;\n case 'bigint':\n val = val.toString() + 'n';\n break;\n case 'date':\n var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString();\n val = '[Date: ' + sDate + ']';\n break;\n case 'buffer':\n var json = val.toJSON();\n // Based on the toJSON result\n json = json.data && json.type ? json.data : json;\n val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']';\n break;\n default:\n val =\n val === '[Function]' || val === '[Circular]'\n ? val\n : JSON.stringify(val); // string\n }\n return val;\n }\n\n for (var i in object) {\n if (!Object.prototype.hasOwnProperty.call(object, i)) {\n continue; // not my business\n }\n --length;\n str +=\n '\\n ' +\n repeat(' ', space) +\n (Array.isArray(object) ? '' : '\"' + i + '\": ') + // key\n _stringify(object[i]) + // value\n (length ? ',' : ''); // comma\n }\n\n return (\n str +\n // [], {}\n (str.length !== 1 ? '\\n' + repeat(' ', --space) + end : end)\n );\n}\n\n/**\n * Return a new Thing that has the keys in sorted order. Recursive.\n *\n * If the Thing...\n * - has already been seen, return string `'[Circular]'`\n * - is `undefined`, return string `'[undefined]'`\n * - is `null`, return value `null`\n * - is some other primitive, return the value\n * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method\n * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again.\n * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()`\n *\n * @private\n * @see {@link exports.stringify}\n * @param {*} value Thing to inspect. May or may not have properties.\n * @param {Array} [stack=[]] Stack of seen values\n * @param {string} [typeHint] Type hint\n * @return {(Object|Array|Function|string|undefined)}\n */\nexports.canonicalize = function canonicalize(value, stack, typeHint) {\n var canonicalizedObj;\n /* eslint-disable no-unused-vars */\n var prop;\n /* eslint-enable no-unused-vars */\n typeHint = typeHint || canonicalType(value);\n function withStack(value, fn) {\n stack.push(value);\n fn();\n stack.pop();\n }\n\n stack = stack || [];\n\n if (stack.indexOf(value) !== -1) {\n return '[Circular]';\n }\n\n switch (typeHint) {\n case 'undefined':\n case 'buffer':\n case 'null':\n canonicalizedObj = value;\n break;\n case 'array':\n withStack(value, function () {\n canonicalizedObj = value.map(function (item) {\n return exports.canonicalize(item, stack);\n });\n });\n break;\n case 'function':\n /* eslint-disable-next-line no-unused-vars, no-unreachable-loop */\n for (prop in value) {\n canonicalizedObj = {};\n break;\n }\n /* eslint-enable guard-for-in */\n if (!canonicalizedObj) {\n canonicalizedObj = emptyRepresentation(value, typeHint);\n break;\n }\n /* falls through */\n case 'object':\n canonicalizedObj = canonicalizedObj || {};\n withStack(value, function () {\n Object.keys(value)\n .sort()\n .forEach(function (key) {\n canonicalizedObj[key] = exports.canonicalize(value[key], stack);\n });\n });\n break;\n case 'date':\n case 'number':\n case 'regexp':\n case 'boolean':\n case 'symbol':\n canonicalizedObj = value;\n break;\n default:\n canonicalizedObj = value + '';\n }\n\n return canonicalizedObj;\n};\n\n/**\n * @summary\n * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`)\n * @description\n * When invoking this function you get a filter function that get the Error.stack as an input,\n * and return a prettify output.\n * (i.e: strip Mocha and internal node functions from stack trace).\n * @returns {Function}\n */\nexports.stackTraceFilter = function () {\n // TODO: Replace with `process.browser`\n var is = typeof document === 'undefined' ? {node: true} : {browser: true};\n var slash = path.sep;\n var cwd;\n if (is.node) {\n cwd = exports.cwd() + slash;\n } else {\n cwd = (\n typeof location === 'undefined' ? window.location : location\n ).href.replace(/\\/[^/]*$/, '/');\n slash = '/';\n }\n\n function isMochaInternal(line) {\n return (\n ~line.indexOf('node_modules' + slash + 'mocha' + slash) ||\n ~line.indexOf(slash + 'mocha.js') ||\n ~line.indexOf(slash + 'mocha.min.js')\n );\n }\n\n function isNodeInternal(line) {\n return (\n ~line.indexOf('(timers.js:') ||\n ~line.indexOf('(events.js:') ||\n ~line.indexOf('(node.js:') ||\n ~line.indexOf('(module.js:') ||\n ~line.indexOf('GeneratorFunctionPrototype.next (native)') ||\n false\n );\n }\n\n return function (stack) {\n stack = stack.split('\\n');\n\n stack = stack.reduce(function (list, line) {\n if (isMochaInternal(line)) {\n return list;\n }\n\n if (is.node && isNodeInternal(line)) {\n return list;\n }\n\n // Clean up cwd(absolute)\n if (/:\\d+:\\d+\\)?$/.test(line)) {\n line = line.replace('(' + cwd, '(');\n }\n\n list.push(line);\n return list;\n }, []);\n\n return stack.join('\\n');\n };\n};\n\n/**\n * Crude, but effective.\n * @public\n * @param {*} value\n * @returns {boolean} Whether or not `value` is a Promise\n */\nexports.isPromise = function isPromise(value) {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof value.then === 'function'\n );\n};\n\n/**\n * Clamps a numeric value to an inclusive range.\n *\n * @param {number} value - Value to be clamped.\n * @param {number[]} range - Two element array specifying [min, max] range.\n * @returns {number} clamped value\n */\nexports.clamp = function clamp(value, range) {\n return Math.min(Math.max(value, range[0]), range[1]);\n};\n\n/**\n * It's a noop.\n * @public\n */\nexports.noop = function () {};\n\n/**\n * Creates a map-like object.\n *\n * @description\n * A \"map\" is an object with no prototype, for our purposes. In some cases\n * this would be more appropriate than a `Map`, especially if your environment\n * doesn't support it. Recommended for use in Mocha's public APIs.\n *\n * @public\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Custom_and_Null_objects|MDN:Map}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Custom_and_Null_objects|MDN:Object.create - Custom objects}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Custom_and_Null_objects|MDN:Object.assign}\n * @param {...*} [obj] - Arguments to `Object.assign()`.\n * @returns {Object} An object with no prototype, having `...obj` properties\n */\nexports.createMap = function (obj) {\n return Object.assign.apply(\n null,\n [Object.create(null)].concat(Array.prototype.slice.call(arguments))\n );\n};\n\n/**\n * Creates a read-only map-like object.\n *\n * @description\n * This differs from {@link module:utils.createMap createMap} only in that\n * the argument must be non-empty, because the result is frozen.\n *\n * @see {@link module:utils.createMap createMap}\n * @param {...*} [obj] - Arguments to `Object.assign()`.\n * @returns {Object} A frozen object with no prototype, having `...obj` properties\n * @throws {TypeError} if argument is not a non-empty object.\n */\nexports.defineConstants = function (obj) {\n if (canonicalType(obj) !== 'object' || !Object.keys(obj).length) {\n throw new TypeError('Invalid argument; expected a non-empty object');\n }\n return Object.freeze(exports.createMap(obj));\n};\n\n/**\n * Returns current working directory\n *\n * Wrapper around `process.cwd()` for isolation\n * @private\n */\nexports.cwd = function cwd() {\n return process.cwd();\n};\n\n/**\n * Returns `true` if Mocha is running in a browser.\n * Checks for `process.browser`.\n * @returns {boolean}\n * @private\n */\nexports.isBrowser = function isBrowser() {\n return Boolean(process.browser);\n};\n\n/*\n * Casts `value` to an array; useful for optionally accepting array parameters\n *\n * It follows these rules, depending on `value`. If `value` is...\n * 1. `undefined`: return an empty Array\n * 2. `null`: return an array with a single `null` element\n * 3. Any other object: return the value of `Array.from()` _if_ the object is iterable\n * 4. otherwise: return an array with a single element, `value`\n * @param {*} value - Something to cast to an Array\n * @returns {Array<*>}\n */\nexports.castArray = function castArray(value) {\n if (value === undefined) {\n return [];\n }\n if (value === null) {\n return [null];\n }\n if (\n typeof value === 'object' &&\n (typeof value[Symbol.iterator] === 'function' || value.length !== undefined)\n ) {\n return Array.from(value);\n }\n return [value];\n};\n\nexports.constants = exports.defineConstants({\n MOCHA_ID_PROP_NAME\n});\n\n/**\n * Creates a new unique identifier\n * @returns {string} Unique identifier\n */\nexports.uniqueID = () => nanoid();\n\nexports.assignNewMochaID = obj => {\n const id = exports.uniqueID();\n Object.defineProperty(obj, MOCHA_ID_PROP_NAME, {\n get() {\n return id;\n }\n });\n return obj;\n};\n\n/**\n * Retrieves a Mocha ID from an object, if present.\n * @param {*} [obj] - Object\n * @returns {string|void}\n */\nexports.getMochaID = obj =>\n obj && typeof obj === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined;\n","'use strict';\n\nmodule.exports = {\n\tinfo: 'ℹ️',\n\tsuccess: '✅',\n\twarning: '⚠️',\n\terror: '❌️'\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\n\n/**\n @module Pending\n*/\n\nmodule.exports = Pending;\n\n/**\n * Initialize a new `Pending` error with the given message.\n *\n * @param {string} message\n */\nfunction Pending(message) {\n this.message = message;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\n\nconst {format} = require('util');\n\n/**\n * Contains error codes, factory functions to create throwable error objects,\n * and warning/deprecation functions.\n * @module\n */\n\n/**\n * process.emitWarning or a polyfill\n * @see https://nodejs.org/api/process.html#process_process_emitwarning_warning_options\n * @ignore\n */\nconst emitWarning = (msg, type) => {\n if (process.emitWarning) {\n process.emitWarning(msg, type);\n } else {\n /* istanbul ignore next */\n process.nextTick(function () {\n console.warn(type + ': ' + msg);\n });\n }\n};\n\n/**\n * Show a deprecation warning. Each distinct message is only displayed once.\n * Ignores empty messages.\n *\n * @param {string} [msg] - Warning to print\n * @private\n */\nconst deprecate = msg => {\n msg = String(msg);\n if (msg && !deprecate.cache[msg]) {\n deprecate.cache[msg] = true;\n emitWarning(msg, 'DeprecationWarning');\n }\n};\ndeprecate.cache = {};\n\n/**\n * Show a generic warning.\n * Ignores empty messages.\n *\n * @param {string} [msg] - Warning to print\n * @private\n */\nconst warn = msg => {\n if (msg) {\n emitWarning(msg);\n }\n};\n\n/**\n * When Mocha throws exceptions (or rejects `Promise`s), it attempts to assign a `code` property to the `Error` object, for easier handling. These are the potential values of `code`.\n * @public\n * @namespace\n * @memberof module:lib/errors\n */\nvar constants = {\n /**\n * An unrecoverable error.\n * @constant\n * @default\n */\n FATAL: 'ERR_MOCHA_FATAL',\n\n /**\n * The type of an argument to a function call is invalid\n * @constant\n * @default\n */\n INVALID_ARG_TYPE: 'ERR_MOCHA_INVALID_ARG_TYPE',\n\n /**\n * The value of an argument to a function call is invalid\n * @constant\n * @default\n */\n INVALID_ARG_VALUE: 'ERR_MOCHA_INVALID_ARG_VALUE',\n\n /**\n * Something was thrown, but it wasn't an `Error`\n * @constant\n * @default\n */\n INVALID_EXCEPTION: 'ERR_MOCHA_INVALID_EXCEPTION',\n\n /**\n * An interface (e.g., `Mocha.interfaces`) is unknown or invalid\n * @constant\n * @default\n */\n INVALID_INTERFACE: 'ERR_MOCHA_INVALID_INTERFACE',\n\n /**\n * A reporter (.e.g, `Mocha.reporters`) is unknown or invalid\n * @constant\n * @default\n */\n INVALID_REPORTER: 'ERR_MOCHA_INVALID_REPORTER',\n\n /**\n * `done()` was called twice in a `Test` or `Hook` callback\n * @constant\n * @default\n */\n MULTIPLE_DONE: 'ERR_MOCHA_MULTIPLE_DONE',\n\n /**\n * No files matched the pattern provided by the user\n * @constant\n * @default\n */\n NO_FILES_MATCH_PATTERN: 'ERR_MOCHA_NO_FILES_MATCH_PATTERN',\n\n /**\n * Known, but unsupported behavior of some kind\n * @constant\n * @default\n */\n UNSUPPORTED: 'ERR_MOCHA_UNSUPPORTED',\n\n /**\n * Invalid state transition occurring in `Mocha` instance\n * @constant\n * @default\n */\n INSTANCE_ALREADY_RUNNING: 'ERR_MOCHA_INSTANCE_ALREADY_RUNNING',\n\n /**\n * Invalid state transition occurring in `Mocha` instance\n * @constant\n * @default\n */\n INSTANCE_ALREADY_DISPOSED: 'ERR_MOCHA_INSTANCE_ALREADY_DISPOSED',\n\n /**\n * Use of `only()` w/ `--forbid-only` results in this error.\n * @constant\n * @default\n */\n FORBIDDEN_EXCLUSIVITY: 'ERR_MOCHA_FORBIDDEN_EXCLUSIVITY',\n\n /**\n * To be thrown when a user-defined plugin implementation (e.g., `mochaHooks`) is invalid\n * @constant\n * @default\n */\n INVALID_PLUGIN_IMPLEMENTATION: 'ERR_MOCHA_INVALID_PLUGIN_IMPLEMENTATION',\n\n /**\n * To be thrown when a builtin or third-party plugin definition (the _definition_ of `mochaHooks`) is invalid\n * @constant\n * @default\n */\n INVALID_PLUGIN_DEFINITION: 'ERR_MOCHA_INVALID_PLUGIN_DEFINITION',\n\n /**\n * When a runnable exceeds its allowed run time.\n * @constant\n * @default\n */\n TIMEOUT: 'ERR_MOCHA_TIMEOUT',\n\n /**\n * Input file is not able to be parsed\n * @constant\n * @default\n */\n UNPARSABLE_FILE: 'ERR_MOCHA_UNPARSABLE_FILE'\n};\n\n/**\n * A set containing all string values of all Mocha error constants, for use by {@link isMochaError}.\n * @private\n */\nconst MOCHA_ERRORS = new Set(Object.values(constants));\n\n/**\n * Creates an error object to be thrown when no files to be tested could be found using specified pattern.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} pattern - User-specified argument value.\n * @returns {Error} instance detailing the error condition\n */\nfunction createNoFilesMatchPatternError(message, pattern) {\n var err = new Error(message);\n err.code = constants.NO_FILES_MATCH_PATTERN;\n err.pattern = pattern;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when the reporter specified in the options was not found.\n *\n * @public\n * @param {string} message - Error message to be displayed.\n * @param {string} reporter - User-specified reporter value.\n * @returns {Error} instance detailing the error condition\n */\nfunction createInvalidReporterError(message, reporter) {\n var err = new TypeError(message);\n err.code = constants.INVALID_REPORTER;\n err.reporter = reporter;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when the interface specified in the options was not found.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} ui - User-specified interface value.\n * @returns {Error} instance detailing the error condition\n */\nfunction createInvalidInterfaceError(message, ui) {\n var err = new Error(message);\n err.code = constants.INVALID_INTERFACE;\n err.interface = ui;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when a behavior, option, or parameter is unsupported.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @returns {Error} instance detailing the error condition\n */\nfunction createUnsupportedError(message) {\n var err = new Error(message);\n err.code = constants.UNSUPPORTED;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when an argument is missing.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} argument - Argument name.\n * @param {string} expected - Expected argument datatype.\n * @returns {Error} instance detailing the error condition\n */\nfunction createMissingArgumentError(message, argument, expected) {\n return createInvalidArgumentTypeError(message, argument, expected);\n}\n\n/**\n * Creates an error object to be thrown when an argument did not use the supported type\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} argument - Argument name.\n * @param {string} expected - Expected argument datatype.\n * @returns {Error} instance detailing the error condition\n */\nfunction createInvalidArgumentTypeError(message, argument, expected) {\n var err = new TypeError(message);\n err.code = constants.INVALID_ARG_TYPE;\n err.argument = argument;\n err.expected = expected;\n err.actual = typeof argument;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when an argument did not use the supported value\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} argument - Argument name.\n * @param {string} value - Argument value.\n * @param {string} [reason] - Why value is invalid.\n * @returns {Error} instance detailing the error condition\n */\nfunction createInvalidArgumentValueError(message, argument, value, reason) {\n var err = new TypeError(message);\n err.code = constants.INVALID_ARG_VALUE;\n err.argument = argument;\n err.value = value;\n err.reason = typeof reason !== 'undefined' ? reason : 'is invalid';\n return err;\n}\n\n/**\n * Creates an error object to be thrown when an exception was caught, but the `Error` is falsy or undefined.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @returns {Error} instance detailing the error condition\n */\nfunction createInvalidExceptionError(message, value) {\n var err = new Error(message);\n err.code = constants.INVALID_EXCEPTION;\n err.valueType = typeof value;\n err.value = value;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when an unrecoverable error occurs.\n *\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @returns {Error} instance detailing the error condition\n */\nfunction createFatalError(message, value) {\n var err = new Error(message);\n err.code = constants.FATAL;\n err.valueType = typeof value;\n err.value = value;\n return err;\n}\n\n/**\n * Dynamically creates a plugin-type-specific error based on plugin type\n * @param {string} message - Error message\n * @param {\"reporter\"|\"ui\"} pluginType - Plugin type. Future: expand as needed\n * @param {string} [pluginId] - Name/path of plugin, if any\n * @throws When `pluginType` is not known\n * @public\n * @static\n * @returns {Error}\n */\nfunction createInvalidLegacyPluginError(message, pluginType, pluginId) {\n switch (pluginType) {\n case 'reporter':\n return createInvalidReporterError(message, pluginId);\n case 'ui':\n return createInvalidInterfaceError(message, pluginId);\n default:\n throw new Error('unknown pluginType \"' + pluginType + '\"');\n }\n}\n\n/**\n * **DEPRECATED**. Use {@link createInvalidLegacyPluginError} instead Dynamically creates a plugin-type-specific error based on plugin type\n * @deprecated\n * @param {string} message - Error message\n * @param {\"reporter\"|\"interface\"} pluginType - Plugin type. Future: expand as needed\n * @param {string} [pluginId] - Name/path of plugin, if any\n * @throws When `pluginType` is not known\n * @public\n * @static\n * @returns {Error}\n */\nfunction createInvalidPluginError(...args) {\n deprecate('Use createInvalidLegacyPluginError() instead');\n return createInvalidLegacyPluginError(...args);\n}\n\n/**\n * Creates an error object to be thrown when a mocha object's `run` method is executed while it is already disposed.\n * @param {string} message The error message to be displayed.\n * @param {boolean} cleanReferencesAfterRun the value of `cleanReferencesAfterRun`\n * @param {Mocha} instance the mocha instance that throw this error\n * @static\n */\nfunction createMochaInstanceAlreadyDisposedError(\n message,\n cleanReferencesAfterRun,\n instance\n) {\n var err = new Error(message);\n err.code = constants.INSTANCE_ALREADY_DISPOSED;\n err.cleanReferencesAfterRun = cleanReferencesAfterRun;\n err.instance = instance;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when a mocha object's `run` method is called while a test run is in progress.\n * @param {string} message The error message to be displayed.\n * @static\n * @public\n */\nfunction createMochaInstanceAlreadyRunningError(message, instance) {\n var err = new Error(message);\n err.code = constants.INSTANCE_ALREADY_RUNNING;\n err.instance = instance;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when done() is called multiple times in a test\n *\n * @public\n * @param {Runnable} runnable - Original runnable\n * @param {Error} [originalErr] - Original error, if any\n * @returns {Error} instance detailing the error condition\n * @static\n */\nfunction createMultipleDoneError(runnable, originalErr) {\n var title;\n try {\n title = format('<%s>', runnable.fullTitle());\n if (runnable.parent.root) {\n title += ' (of root suite)';\n }\n } catch (ignored) {\n title = format('<%s> (of unknown suite)', runnable.title);\n }\n var message = format(\n 'done() called multiple times in %s %s',\n runnable.type ? runnable.type : 'unknown runnable',\n title\n );\n if (runnable.file) {\n message += format(' of file %s', runnable.file);\n }\n if (originalErr) {\n message += format('; in addition, done() received error: %s', originalErr);\n }\n\n var err = new Error(message);\n err.code = constants.MULTIPLE_DONE;\n err.valueType = typeof originalErr;\n err.value = originalErr;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when `.only()` is used with\n * `--forbid-only`.\n * @static\n * @public\n * @param {Mocha} mocha - Mocha instance\n * @returns {Error} Error with code {@link constants.FORBIDDEN_EXCLUSIVITY}\n */\nfunction createForbiddenExclusivityError(mocha) {\n var err = new Error(\n mocha.isWorker\n ? '`.only` is not supported in parallel mode'\n : '`.only` forbidden by --forbid-only'\n );\n err.code = constants.FORBIDDEN_EXCLUSIVITY;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when a plugin definition is invalid\n * @static\n * @param {string} msg - Error message\n * @param {PluginDefinition} [pluginDef] - Problematic plugin definition\n * @public\n * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION}\n */\nfunction createInvalidPluginDefinitionError(msg, pluginDef) {\n const err = new Error(msg);\n err.code = constants.INVALID_PLUGIN_DEFINITION;\n err.pluginDef = pluginDef;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when a plugin implementation (user code) is invalid\n * @static\n * @param {string} msg - Error message\n * @param {Object} [opts] - Plugin definition and user-supplied implementation\n * @param {PluginDefinition} [opts.pluginDef] - Plugin Definition\n * @param {*} [opts.pluginImpl] - Plugin Implementation (user-supplied)\n * @public\n * @returns {Error} Error with code {@link constants.INVALID_PLUGIN_DEFINITION}\n */\nfunction createInvalidPluginImplementationError(\n msg,\n {pluginDef, pluginImpl} = {}\n) {\n const err = new Error(msg);\n err.code = constants.INVALID_PLUGIN_IMPLEMENTATION;\n err.pluginDef = pluginDef;\n err.pluginImpl = pluginImpl;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when a runnable exceeds its allowed run time.\n * @static\n * @param {string} msg - Error message\n * @param {number} [timeout] - Timeout in ms\n * @param {string} [file] - File, if given\n * @returns {MochaTimeoutError}\n */\nfunction createTimeoutError(msg, timeout, file) {\n const err = new Error(msg);\n err.code = constants.TIMEOUT;\n err.timeout = timeout;\n err.file = file;\n return err;\n}\n\n/**\n * Creates an error object to be thrown when file is unparsable\n * @public\n * @static\n * @param {string} message - Error message to be displayed.\n * @param {string} filename - File name\n * @returns {Error} Error with code {@link constants.UNPARSABLE_FILE}\n */\nfunction createUnparsableFileError(message, filename) {\n var err = new Error(message);\n err.code = constants.UNPARSABLE_FILE;\n return err;\n}\n\n/**\n * Returns `true` if an error came out of Mocha.\n * _Can suffer from false negatives, but not false positives._\n * @static\n * @public\n * @param {*} err - Error, or anything\n * @returns {boolean}\n */\nconst isMochaError = err =>\n Boolean(err && typeof err === 'object' && MOCHA_ERRORS.has(err.code));\n\nmodule.exports = {\n constants,\n createFatalError,\n createForbiddenExclusivityError,\n createInvalidArgumentTypeError,\n createInvalidArgumentValueError,\n createInvalidExceptionError,\n createInvalidInterfaceError,\n createInvalidLegacyPluginError,\n createInvalidPluginDefinitionError,\n createInvalidPluginError,\n createInvalidPluginImplementationError,\n createInvalidReporterError,\n createMissingArgumentError,\n createMochaInstanceAlreadyDisposedError,\n createMochaInstanceAlreadyRunningError,\n createMultipleDoneError,\n createNoFilesMatchPatternError,\n createTimeoutError,\n createUnparsableFileError,\n createUnsupportedError,\n deprecate,\n isMochaError,\n warn\n};\n\n/**\n * The error thrown when a Runnable times out\n * @memberof module:lib/errors\n * @typedef {Error} MochaTimeoutError\n * @property {constants.TIMEOUT} code - Error code\n * @property {number?} timeout Timeout in ms\n * @property {string?} file Filepath, if given\n */\n","'use strict';\n\nvar EventEmitter = require('events').EventEmitter;\nvar Pending = require('./pending');\nvar debug = require('debug')('mocha:runnable');\nvar milliseconds = require('ms');\nvar utils = require('./utils');\nconst {\n createInvalidExceptionError,\n createMultipleDoneError,\n createTimeoutError\n} = require('./errors');\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n * @private\n */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar clearTimeout = global.clearTimeout;\nvar toString = Object.prototype.toString;\n\nmodule.exports = Runnable;\n\n/**\n * Initialize a new `Runnable` with the given `title` and callback `fn`.\n *\n * @class\n * @extends external:EventEmitter\n * @public\n * @param {String} title\n * @param {Function} fn\n */\nfunction Runnable(title, fn) {\n this.title = title;\n this.fn = fn;\n this.body = (fn || '').toString();\n this.async = fn && fn.length;\n this.sync = !this.async;\n this._timeout = 2000;\n this._slow = 75;\n this._retries = -1;\n utils.assignNewMochaID(this);\n Object.defineProperty(this, 'id', {\n get() {\n return utils.getMochaID(this);\n }\n });\n this.reset();\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\nutils.inherits(Runnable, EventEmitter);\n\n/**\n * Resets the state initially or for a next run.\n */\nRunnable.prototype.reset = function () {\n this.timedOut = false;\n this._currentRetry = 0;\n this.pending = false;\n delete this.state;\n delete this.err;\n};\n\n/**\n * Get current timeout value in msecs.\n *\n * @private\n * @returns {number} current timeout threshold value\n */\n/**\n * @summary\n * Set timeout threshold value (msecs).\n *\n * @description\n * A string argument can use shorthand (e.g., \"2s\") and will be converted.\n * The value will be clamped to range [0, 2^31-1].\n * If clamped value matches either range endpoint, timeouts will be disabled.\n *\n * @private\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Maximum_delay_value}\n * @param {number|string} ms - Timeout threshold value.\n * @returns {Runnable} this\n * @chainable\n */\nRunnable.prototype.timeout = function (ms) {\n if (!arguments.length) {\n return this._timeout;\n }\n if (typeof ms === 'string') {\n ms = milliseconds(ms);\n }\n\n // Clamp to range\n var INT_MAX = Math.pow(2, 31) - 1;\n var range = [0, INT_MAX];\n ms = utils.clamp(ms, range);\n\n // see #1652 for reasoning\n if (ms === range[0] || ms === range[1]) {\n this._timeout = 0;\n } else {\n this._timeout = ms;\n }\n debug('timeout %d', this._timeout);\n\n if (this.timer) {\n this.resetTimeout();\n }\n return this;\n};\n\n/**\n * Set or get slow `ms`.\n *\n * @private\n * @param {number|string} ms\n * @return {Runnable|number} ms or Runnable instance.\n */\nRunnable.prototype.slow = function (ms) {\n if (!arguments.length || typeof ms === 'undefined') {\n return this._slow;\n }\n if (typeof ms === 'string') {\n ms = milliseconds(ms);\n }\n debug('slow %d', ms);\n this._slow = ms;\n return this;\n};\n\n/**\n * Halt and mark as pending.\n *\n * @memberof Mocha.Runnable\n * @public\n */\nRunnable.prototype.skip = function () {\n this.pending = true;\n throw new Pending('sync skip; aborting execution');\n};\n\n/**\n * Check if this runnable or its parent suite is marked as pending.\n *\n * @private\n */\nRunnable.prototype.isPending = function () {\n return this.pending || (this.parent && this.parent.isPending());\n};\n\n/**\n * Return `true` if this Runnable has failed.\n * @return {boolean}\n * @private\n */\nRunnable.prototype.isFailed = function () {\n return !this.isPending() && this.state === constants.STATE_FAILED;\n};\n\n/**\n * Return `true` if this Runnable has passed.\n * @return {boolean}\n * @private\n */\nRunnable.prototype.isPassed = function () {\n return !this.isPending() && this.state === constants.STATE_PASSED;\n};\n\n/**\n * Set or get number of retries.\n *\n * @private\n */\nRunnable.prototype.retries = function (n) {\n if (!arguments.length) {\n return this._retries;\n }\n this._retries = n;\n};\n\n/**\n * Set or get current retry\n *\n * @private\n */\nRunnable.prototype.currentRetry = function (n) {\n if (!arguments.length) {\n return this._currentRetry;\n }\n this._currentRetry = n;\n};\n\n/**\n * Return the full title generated by recursively concatenating the parent's\n * full title.\n *\n * @memberof Mocha.Runnable\n * @public\n * @return {string}\n */\nRunnable.prototype.fullTitle = function () {\n return this.titlePath().join(' ');\n};\n\n/**\n * Return the title path generated by concatenating the parent's title path with the title.\n *\n * @memberof Mocha.Runnable\n * @public\n * @return {string}\n */\nRunnable.prototype.titlePath = function () {\n return this.parent.titlePath().concat([this.title]);\n};\n\n/**\n * Clear the timeout.\n *\n * @private\n */\nRunnable.prototype.clearTimeout = function () {\n clearTimeout(this.timer);\n};\n\n/**\n * Reset the timeout.\n *\n * @private\n */\nRunnable.prototype.resetTimeout = function () {\n var self = this;\n var ms = this.timeout();\n\n if (ms === 0) {\n return;\n }\n this.clearTimeout();\n this.timer = setTimeout(function () {\n if (self.timeout() === 0) {\n return;\n }\n self.callback(self._timeoutError(ms));\n self.timedOut = true;\n }, ms);\n};\n\n/**\n * Set or get a list of whitelisted globals for this test run.\n *\n * @private\n * @param {string[]} globals\n */\nRunnable.prototype.globals = function (globals) {\n if (!arguments.length) {\n return this._allowedGlobals;\n }\n this._allowedGlobals = globals;\n};\n\n/**\n * Run the test and invoke `fn(err)`.\n *\n * @param {Function} fn\n * @private\n */\nRunnable.prototype.run = function (fn) {\n var self = this;\n var start = new Date();\n var ctx = this.ctx;\n var finished;\n var errorWasHandled = false;\n\n if (this.isPending()) return fn();\n\n // Sometimes the ctx exists, but it is not runnable\n if (ctx && ctx.runnable) {\n ctx.runnable(this);\n }\n\n // called multiple times\n function multiple(err) {\n if (errorWasHandled) {\n return;\n }\n errorWasHandled = true;\n self.emit('error', createMultipleDoneError(self, err));\n }\n\n // finished\n function done(err) {\n var ms = self.timeout();\n if (self.timedOut) {\n return;\n }\n\n if (finished) {\n return multiple(err);\n }\n\n self.clearTimeout();\n self.duration = new Date() - start;\n finished = true;\n if (!err && self.duration > ms && ms > 0) {\n err = self._timeoutError(ms);\n }\n fn(err);\n }\n\n // for .resetTimeout() and Runner#uncaught()\n this.callback = done;\n\n if (this.fn && typeof this.fn.call !== 'function') {\n done(\n new TypeError(\n 'A runnable must be passed a function as its second argument.'\n )\n );\n return;\n }\n\n // explicit async with `done` argument\n if (this.async) {\n this.resetTimeout();\n\n // allows skip() to be used in an explicit async context\n this.skip = function asyncSkip() {\n this.pending = true;\n done();\n // halt execution, the uncaught handler will ignore the failure.\n throw new Pending('async skip; aborting execution');\n };\n\n try {\n callFnAsync(this.fn);\n } catch (err) {\n // handles async runnables which actually run synchronously\n errorWasHandled = true;\n if (err instanceof Pending) {\n return; // done() is already called in this.skip()\n } else if (this.allowUncaught) {\n throw err;\n }\n done(Runnable.toValueOrError(err));\n }\n return;\n }\n\n // sync or promise-returning\n try {\n callFn(this.fn);\n } catch (err) {\n errorWasHandled = true;\n if (err instanceof Pending) {\n return done();\n } else if (this.allowUncaught) {\n throw err;\n }\n done(Runnable.toValueOrError(err));\n }\n\n function callFn(fn) {\n var result = fn.call(ctx);\n if (result && typeof result.then === 'function') {\n self.resetTimeout();\n result.then(\n function () {\n done();\n // Return null so libraries like bluebird do not warn about\n // subsequently constructed Promises.\n return null;\n },\n function (reason) {\n done(reason || new Error('Promise rejected with no or falsy reason'));\n }\n );\n } else {\n if (self.asyncOnly) {\n return done(\n new Error(\n '--async-only option in use without declaring `done()` or returning a promise'\n )\n );\n }\n\n done();\n }\n }\n\n function callFnAsync(fn) {\n var result = fn.call(ctx, function (err) {\n if (err instanceof Error || toString.call(err) === '[object Error]') {\n return done(err);\n }\n if (err) {\n if (Object.prototype.toString.call(err) === '[object Object]') {\n return done(\n new Error('done() invoked with non-Error: ' + JSON.stringify(err))\n );\n }\n return done(new Error('done() invoked with non-Error: ' + err));\n }\n if (result && utils.isPromise(result)) {\n return done(\n new Error(\n 'Resolution method is overspecified. Specify a callback *or* return a Promise; not both.'\n )\n );\n }\n\n done();\n });\n }\n};\n\n/**\n * Instantiates a \"timeout\" error\n *\n * @param {number} ms - Timeout (in milliseconds)\n * @returns {Error} a \"timeout\" error\n * @private\n */\nRunnable.prototype._timeoutError = function (ms) {\n let msg = `Timeout of ${ms}ms exceeded. For async tests and hooks, ensure \"done()\" is called; if returning a Promise, ensure it resolves.`;\n if (this.file) {\n msg += ' (' + this.file + ')';\n }\n return createTimeoutError(msg, ms, this.file);\n};\n\nvar constants = utils.defineConstants(\n /**\n * {@link Runnable}-related constants.\n * @public\n * @memberof Runnable\n * @readonly\n * @static\n * @alias constants\n * @enum {string}\n */\n {\n /**\n * Value of `state` prop when a `Runnable` has failed\n */\n STATE_FAILED: 'failed',\n /**\n * Value of `state` prop when a `Runnable` has passed\n */\n STATE_PASSED: 'passed',\n /**\n * Value of `state` prop when a `Runnable` has been skipped by user\n */\n STATE_PENDING: 'pending'\n }\n);\n\n/**\n * Given `value`, return identity if truthy, otherwise create an \"invalid exception\" error and return that.\n * @param {*} [value] - Value to return, if present\n * @returns {*|Error} `value`, otherwise an `Error`\n * @private\n */\nRunnable.toValueOrError = function (value) {\n return (\n value ||\n createInvalidExceptionError(\n 'Runnable failed with falsy or undefined exception. Please throw an Error instead.',\n value\n )\n );\n};\n\nRunnable.constants = constants;\n","'use strict';\n\nvar Runnable = require('./runnable');\nconst {inherits, constants} = require('./utils');\nconst {MOCHA_ID_PROP_NAME} = constants;\n\n/**\n * Expose `Hook`.\n */\n\nmodule.exports = Hook;\n\n/**\n * Initialize a new `Hook` with the given `title` and callback `fn`\n *\n * @class\n * @extends Runnable\n * @param {String} title\n * @param {Function} fn\n */\nfunction Hook(title, fn) {\n Runnable.call(this, title, fn);\n this.type = 'hook';\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\ninherits(Hook, Runnable);\n\n/**\n * Resets the state for a next run.\n */\nHook.prototype.reset = function () {\n Runnable.prototype.reset.call(this);\n delete this._error;\n};\n\n/**\n * Get or set the test `err`.\n *\n * @memberof Hook\n * @public\n * @param {Error} err\n * @return {Error}\n */\nHook.prototype.error = function (err) {\n if (!arguments.length) {\n err = this._error;\n this._error = null;\n return err;\n }\n\n this._error = err;\n};\n\n/**\n * Returns an object suitable for IPC.\n * Functions are represented by keys beginning with `$$`.\n * @private\n * @returns {Object}\n */\nHook.prototype.serialize = function serialize() {\n return {\n $$currentRetry: this.currentRetry(),\n $$fullTitle: this.fullTitle(),\n $$isPending: Boolean(this.isPending()),\n $$titlePath: this.titlePath(),\n ctx:\n this.ctx && this.ctx.currentTest\n ? {\n currentTest: {\n title: this.ctx.currentTest.title,\n [MOCHA_ID_PROP_NAME]: this.ctx.currentTest.id\n }\n }\n : {},\n duration: this.duration,\n file: this.file,\n parent: {\n $$fullTitle: this.parent.fullTitle(),\n [MOCHA_ID_PROP_NAME]: this.parent.id\n },\n state: this.state,\n title: this.title,\n type: this.type,\n [MOCHA_ID_PROP_NAME]: this.id\n };\n};\n","'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nconst {EventEmitter} = require('events');\nconst Hook = require('./hook');\nvar {\n assignNewMochaID,\n clamp,\n constants: utilsConstants,\n defineConstants,\n getMochaID,\n inherits,\n isString\n} = require('./utils');\nconst debug = require('debug')('mocha:suite');\nconst milliseconds = require('ms');\nconst errors = require('./errors');\n\nconst {MOCHA_ID_PROP_NAME} = utilsConstants;\n\n/**\n * Expose `Suite`.\n */\n\nexports = module.exports = Suite;\n\n/**\n * Create a new `Suite` with the given `title` and parent `Suite`.\n *\n * @public\n * @param {Suite} parent - Parent suite (required!)\n * @param {string} title - Title\n * @return {Suite}\n */\nSuite.create = function (parent, title) {\n var suite = new Suite(title, parent.ctx);\n suite.parent = parent;\n title = suite.fullTitle();\n parent.addSuite(suite);\n return suite;\n};\n\n/**\n * Constructs a new `Suite` instance with the given `title`, `ctx`, and `isRoot`.\n *\n * @public\n * @class\n * @extends EventEmitter\n * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter|EventEmitter}\n * @param {string} title - Suite title.\n * @param {Context} parentContext - Parent context instance.\n * @param {boolean} [isRoot=false] - Whether this is the root suite.\n */\nfunction Suite(title, parentContext, isRoot) {\n if (!isString(title)) {\n throw errors.createInvalidArgumentTypeError(\n 'Suite argument \"title\" must be a string. Received type \"' +\n typeof title +\n '\"',\n 'title',\n 'string'\n );\n }\n this.title = title;\n function Context() {}\n Context.prototype = parentContext;\n this.ctx = new Context();\n this.suites = [];\n this.tests = [];\n this.root = isRoot === true;\n this.pending = false;\n this._retries = -1;\n this._beforeEach = [];\n this._beforeAll = [];\n this._afterEach = [];\n this._afterAll = [];\n this._timeout = 2000;\n this._slow = 75;\n this._bail = false;\n this._onlyTests = [];\n this._onlySuites = [];\n assignNewMochaID(this);\n\n Object.defineProperty(this, 'id', {\n get() {\n return getMochaID(this);\n }\n });\n\n this.reset();\n}\n\n/**\n * Inherit from `EventEmitter.prototype`.\n */\ninherits(Suite, EventEmitter);\n\n/**\n * Resets the state initially or for a next run.\n */\nSuite.prototype.reset = function () {\n this.delayed = false;\n function doReset(thingToReset) {\n thingToReset.reset();\n }\n this.suites.forEach(doReset);\n this.tests.forEach(doReset);\n this._beforeEach.forEach(doReset);\n this._afterEach.forEach(doReset);\n this._beforeAll.forEach(doReset);\n this._afterAll.forEach(doReset);\n};\n\n/**\n * Return a clone of this `Suite`.\n *\n * @private\n * @return {Suite}\n */\nSuite.prototype.clone = function () {\n var suite = new Suite(this.title);\n debug('clone');\n suite.ctx = this.ctx;\n suite.root = this.root;\n suite.timeout(this.timeout());\n suite.retries(this.retries());\n suite.slow(this.slow());\n suite.bail(this.bail());\n return suite;\n};\n\n/**\n * Set or get timeout `ms` or short-hand such as \"2s\".\n *\n * @private\n * @todo Do not attempt to set value if `ms` is undefined\n * @param {number|string} ms\n * @return {Suite|number} for chaining\n */\nSuite.prototype.timeout = function (ms) {\n if (!arguments.length) {\n return this._timeout;\n }\n if (typeof ms === 'string') {\n ms = milliseconds(ms);\n }\n\n // Clamp to range\n var INT_MAX = Math.pow(2, 31) - 1;\n var range = [0, INT_MAX];\n ms = clamp(ms, range);\n\n debug('timeout %d', ms);\n this._timeout = parseInt(ms, 10);\n return this;\n};\n\n/**\n * Set or get number of times to retry a failed test.\n *\n * @private\n * @param {number|string} n\n * @return {Suite|number} for chaining\n */\nSuite.prototype.retries = function (n) {\n if (!arguments.length) {\n return this._retries;\n }\n debug('retries %d', n);\n this._retries = parseInt(n, 10) || 0;\n return this;\n};\n\n/**\n * Set or get slow `ms` or short-hand such as \"2s\".\n *\n * @private\n * @param {number|string} ms\n * @return {Suite|number} for chaining\n */\nSuite.prototype.slow = function (ms) {\n if (!arguments.length) {\n return this._slow;\n }\n if (typeof ms === 'string') {\n ms = milliseconds(ms);\n }\n debug('slow %d', ms);\n this._slow = ms;\n return this;\n};\n\n/**\n * Set or get whether to bail after first error.\n *\n * @private\n * @param {boolean} bail\n * @return {Suite|number} for chaining\n */\nSuite.prototype.bail = function (bail) {\n if (!arguments.length) {\n return this._bail;\n }\n debug('bail %s', bail);\n this._bail = bail;\n return this;\n};\n\n/**\n * Check if this suite or its parent suite is marked as pending.\n *\n * @private\n */\nSuite.prototype.isPending = function () {\n return this.pending || (this.parent && this.parent.isPending());\n};\n\n/**\n * Generic hook-creator.\n * @private\n * @param {string} title - Title of hook\n * @param {Function} fn - Hook callback\n * @returns {Hook} A new hook\n */\nSuite.prototype._createHook = function (title, fn) {\n var hook = new Hook(title, fn);\n hook.parent = this;\n hook.timeout(this.timeout());\n hook.retries(this.retries());\n hook.slow(this.slow());\n hook.ctx = this.ctx;\n hook.file = this.file;\n return hook;\n};\n\n/**\n * Run `fn(test[, done])` before running tests.\n *\n * @private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.beforeAll = function (title, fn) {\n if (this.isPending()) {\n return this;\n }\n if (typeof title === 'function') {\n fn = title;\n title = fn.name;\n }\n title = '\"before all\" hook' + (title ? ': ' + title : '');\n\n var hook = this._createHook(title, fn);\n this._beforeAll.push(hook);\n this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_ALL, hook);\n return this;\n};\n\n/**\n * Run `fn(test[, done])` after running tests.\n *\n * @private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.afterAll = function (title, fn) {\n if (this.isPending()) {\n return this;\n }\n if (typeof title === 'function') {\n fn = title;\n title = fn.name;\n }\n title = '\"after all\" hook' + (title ? ': ' + title : '');\n\n var hook = this._createHook(title, fn);\n this._afterAll.push(hook);\n this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_ALL, hook);\n return this;\n};\n\n/**\n * Run `fn(test[, done])` before each test case.\n *\n * @private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.beforeEach = function (title, fn) {\n if (this.isPending()) {\n return this;\n }\n if (typeof title === 'function') {\n fn = title;\n title = fn.name;\n }\n title = '\"before each\" hook' + (title ? ': ' + title : '');\n\n var hook = this._createHook(title, fn);\n this._beforeEach.push(hook);\n this.emit(constants.EVENT_SUITE_ADD_HOOK_BEFORE_EACH, hook);\n return this;\n};\n\n/**\n * Run `fn(test[, done])` after each test case.\n *\n * @private\n * @param {string} title\n * @param {Function} fn\n * @return {Suite} for chaining\n */\nSuite.prototype.afterEach = function (title, fn) {\n if (this.isPending()) {\n return this;\n }\n if (typeof title === 'function') {\n fn = title;\n title = fn.name;\n }\n title = '\"after each\" hook' + (title ? ': ' + title : '');\n\n var hook = this._createHook(title, fn);\n this._afterEach.push(hook);\n this.emit(constants.EVENT_SUITE_ADD_HOOK_AFTER_EACH, hook);\n return this;\n};\n\n/**\n * Add a test `suite`.\n *\n * @private\n * @param {Suite} suite\n * @return {Suite} for chaining\n */\nSuite.prototype.addSuite = function (suite) {\n suite.parent = this;\n suite.root = false;\n suite.timeout(this.timeout());\n suite.retries(this.retries());\n suite.slow(this.slow());\n suite.bail(this.bail());\n this.suites.push(suite);\n this.emit(constants.EVENT_SUITE_ADD_SUITE, suite);\n return this;\n};\n\n/**\n * Add a `test` to this suite.\n *\n * @private\n * @param {Test} test\n * @return {Suite} for chaining\n */\nSuite.prototype.addTest = function (test) {\n test.parent = this;\n test.timeout(this.timeout());\n test.retries(this.retries());\n test.slow(this.slow());\n test.ctx = this.ctx;\n this.tests.push(test);\n this.emit(constants.EVENT_SUITE_ADD_TEST, test);\n return this;\n};\n\n/**\n * Return the full title generated by recursively concatenating the parent's\n * full title.\n *\n * @memberof Suite\n * @public\n * @return {string}\n */\nSuite.prototype.fullTitle = function () {\n return this.titlePath().join(' ');\n};\n\n/**\n * Return the title path generated by recursively concatenating the parent's\n * title path.\n *\n * @memberof Suite\n * @public\n * @return {string}\n */\nSuite.prototype.titlePath = function () {\n var result = [];\n if (this.parent) {\n result = result.concat(this.parent.titlePath());\n }\n if (!this.root) {\n result.push(this.title);\n }\n return result;\n};\n\n/**\n * Return the total number of tests.\n *\n * @memberof Suite\n * @public\n * @return {number}\n */\nSuite.prototype.total = function () {\n return (\n this.suites.reduce(function (sum, suite) {\n return sum + suite.total();\n }, 0) + this.tests.length\n );\n};\n\n/**\n * Iterates through each suite recursively to find all tests. Applies a\n * function in the format `fn(test)`.\n *\n * @private\n * @param {Function} fn\n * @return {Suite}\n */\nSuite.prototype.eachTest = function (fn) {\n this.tests.forEach(fn);\n this.suites.forEach(function (suite) {\n suite.eachTest(fn);\n });\n return this;\n};\n\n/**\n * This will run the root suite if we happen to be running in delayed mode.\n * @private\n */\nSuite.prototype.run = function run() {\n if (this.root) {\n this.emit(constants.EVENT_ROOT_SUITE_RUN);\n }\n};\n\n/**\n * Determines whether a suite has an `only` test or suite as a descendant.\n *\n * @private\n * @returns {Boolean}\n */\nSuite.prototype.hasOnly = function hasOnly() {\n return (\n this._onlyTests.length > 0 ||\n this._onlySuites.length > 0 ||\n this.suites.some(function (suite) {\n return suite.hasOnly();\n })\n );\n};\n\n/**\n * Filter suites based on `isOnly` logic.\n *\n * @private\n * @returns {Boolean}\n */\nSuite.prototype.filterOnly = function filterOnly() {\n if (this._onlyTests.length) {\n // If the suite contains `only` tests, run those and ignore any nested suites.\n this.tests = this._onlyTests;\n this.suites = [];\n } else {\n // Otherwise, do not run any of the tests in this suite.\n this.tests = [];\n this._onlySuites.forEach(function (onlySuite) {\n // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite.\n // Otherwise, all of the tests on this `only` suite should be run, so don't filter it.\n if (onlySuite.hasOnly()) {\n onlySuite.filterOnly();\n }\n });\n // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants.\n var onlySuites = this._onlySuites;\n this.suites = this.suites.filter(function (childSuite) {\n return onlySuites.indexOf(childSuite) !== -1 || childSuite.filterOnly();\n });\n }\n // Keep the suite only if there is something to run\n return this.tests.length > 0 || this.suites.length > 0;\n};\n\n/**\n * Adds a suite to the list of subsuites marked `only`.\n *\n * @private\n * @param {Suite} suite\n */\nSuite.prototype.appendOnlySuite = function (suite) {\n this._onlySuites.push(suite);\n};\n\n/**\n * Marks a suite to be `only`.\n *\n * @private\n */\nSuite.prototype.markOnly = function () {\n this.parent && this.parent.appendOnlySuite(this);\n};\n\n/**\n * Adds a test to the list of tests marked `only`.\n *\n * @private\n * @param {Test} test\n */\nSuite.prototype.appendOnlyTest = function (test) {\n this._onlyTests.push(test);\n};\n\n/**\n * Returns the array of hooks by hook name; see `HOOK_TYPE_*` constants.\n * @private\n */\nSuite.prototype.getHooks = function getHooks(name) {\n return this['_' + name];\n};\n\n/**\n * cleans all references from this suite and all child suites.\n */\nSuite.prototype.dispose = function () {\n this.suites.forEach(function (suite) {\n suite.dispose();\n });\n this.cleanReferences();\n};\n\n/**\n * Cleans up the references to all the deferred functions\n * (before/after/beforeEach/afterEach) and tests of a Suite.\n * These must be deleted otherwise a memory leak can happen,\n * as those functions may reference variables from closures,\n * thus those variables can never be garbage collected as long\n * as the deferred functions exist.\n *\n * @private\n */\nSuite.prototype.cleanReferences = function cleanReferences() {\n function cleanArrReferences(arr) {\n for (var i = 0; i < arr.length; i++) {\n delete arr[i].fn;\n }\n }\n\n if (Array.isArray(this._beforeAll)) {\n cleanArrReferences(this._beforeAll);\n }\n\n if (Array.isArray(this._beforeEach)) {\n cleanArrReferences(this._beforeEach);\n }\n\n if (Array.isArray(this._afterAll)) {\n cleanArrReferences(this._afterAll);\n }\n\n if (Array.isArray(this._afterEach)) {\n cleanArrReferences(this._afterEach);\n }\n\n for (var i = 0; i < this.tests.length; i++) {\n delete this.tests[i].fn;\n }\n};\n\n/**\n * Returns an object suitable for IPC.\n * Functions are represented by keys beginning with `$$`.\n * @private\n * @returns {Object}\n */\nSuite.prototype.serialize = function serialize() {\n return {\n _bail: this._bail,\n $$fullTitle: this.fullTitle(),\n $$isPending: Boolean(this.isPending()),\n root: this.root,\n title: this.title,\n [MOCHA_ID_PROP_NAME]: this.id,\n parent: this.parent ? {[MOCHA_ID_PROP_NAME]: this.parent.id} : null\n };\n};\n\nvar constants = defineConstants(\n /**\n * {@link Suite}-related constants.\n * @public\n * @memberof Suite\n * @alias constants\n * @readonly\n * @static\n * @enum {string}\n */\n {\n /**\n * Event emitted after a test file has been loaded. Not emitted in browser.\n */\n EVENT_FILE_POST_REQUIRE: 'post-require',\n /**\n * Event emitted before a test file has been loaded. In browser, this is emitted once an interface has been selected.\n */\n EVENT_FILE_PRE_REQUIRE: 'pre-require',\n /**\n * Event emitted immediately after a test file has been loaded. Not emitted in browser.\n */\n EVENT_FILE_REQUIRE: 'require',\n /**\n * Event emitted when `global.run()` is called (use with `delay` option).\n */\n EVENT_ROOT_SUITE_RUN: 'run',\n\n /**\n * Namespace for collection of a `Suite`'s \"after all\" hooks.\n */\n HOOK_TYPE_AFTER_ALL: 'afterAll',\n /**\n * Namespace for collection of a `Suite`'s \"after each\" hooks.\n */\n HOOK_TYPE_AFTER_EACH: 'afterEach',\n /**\n * Namespace for collection of a `Suite`'s \"before all\" hooks.\n */\n HOOK_TYPE_BEFORE_ALL: 'beforeAll',\n /**\n * Namespace for collection of a `Suite`'s \"before each\" hooks.\n */\n HOOK_TYPE_BEFORE_EACH: 'beforeEach',\n\n /**\n * Emitted after a child `Suite` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_SUITE: 'suite',\n /**\n * Emitted after an \"after all\" `Hook` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_HOOK_AFTER_ALL: 'afterAll',\n /**\n * Emitted after an \"after each\" `Hook` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_HOOK_AFTER_EACH: 'afterEach',\n /**\n * Emitted after an \"before all\" `Hook` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_HOOK_BEFORE_ALL: 'beforeAll',\n /**\n * Emitted after an \"before each\" `Hook` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_HOOK_BEFORE_EACH: 'beforeEach',\n /**\n * Emitted after a `Test` has been added to a `Suite`.\n */\n EVENT_SUITE_ADD_TEST: 'test'\n }\n);\n\nSuite.constants = constants;\n","'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\nvar EventEmitter = require('events').EventEmitter;\nvar Pending = require('./pending');\nvar utils = require('./utils');\nvar debug = require('debug')('mocha:runner');\nvar Runnable = require('./runnable');\nvar Suite = require('./suite');\nvar HOOK_TYPE_BEFORE_EACH = Suite.constants.HOOK_TYPE_BEFORE_EACH;\nvar HOOK_TYPE_AFTER_EACH = Suite.constants.HOOK_TYPE_AFTER_EACH;\nvar HOOK_TYPE_AFTER_ALL = Suite.constants.HOOK_TYPE_AFTER_ALL;\nvar HOOK_TYPE_BEFORE_ALL = Suite.constants.HOOK_TYPE_BEFORE_ALL;\nvar EVENT_ROOT_SUITE_RUN = Suite.constants.EVENT_ROOT_SUITE_RUN;\nvar STATE_FAILED = Runnable.constants.STATE_FAILED;\nvar STATE_PASSED = Runnable.constants.STATE_PASSED;\nvar STATE_PENDING = Runnable.constants.STATE_PENDING;\nvar stackFilter = utils.stackTraceFilter();\nvar stringify = utils.stringify;\n\nconst {\n createInvalidExceptionError,\n createUnsupportedError,\n createFatalError,\n isMochaError,\n constants: errorConstants\n} = require('./errors');\n\n/**\n * Non-enumerable globals.\n * @private\n * @readonly\n */\nvar globals = [\n 'setTimeout',\n 'clearTimeout',\n 'setInterval',\n 'clearInterval',\n 'XMLHttpRequest',\n 'Date',\n 'setImmediate',\n 'clearImmediate'\n];\n\nvar constants = utils.defineConstants(\n /**\n * {@link Runner}-related constants.\n * @public\n * @memberof Runner\n * @readonly\n * @alias constants\n * @static\n * @enum {string}\n */\n {\n /**\n * Emitted when {@link Hook} execution begins\n */\n EVENT_HOOK_BEGIN: 'hook',\n /**\n * Emitted when {@link Hook} execution ends\n */\n EVENT_HOOK_END: 'hook end',\n /**\n * Emitted when Root {@link Suite} execution begins (all files have been parsed and hooks/tests are ready for execution)\n */\n EVENT_RUN_BEGIN: 'start',\n /**\n * Emitted when Root {@link Suite} execution has been delayed via `delay` option\n */\n EVENT_DELAY_BEGIN: 'waiting',\n /**\n * Emitted when delayed Root {@link Suite} execution is triggered by user via `global.run()`\n */\n EVENT_DELAY_END: 'ready',\n /**\n * Emitted when Root {@link Suite} execution ends\n */\n EVENT_RUN_END: 'end',\n /**\n * Emitted when {@link Suite} execution begins\n */\n EVENT_SUITE_BEGIN: 'suite',\n /**\n * Emitted when {@link Suite} execution ends\n */\n EVENT_SUITE_END: 'suite end',\n /**\n * Emitted when {@link Test} execution begins\n */\n EVENT_TEST_BEGIN: 'test',\n /**\n * Emitted when {@link Test} execution ends\n */\n EVENT_TEST_END: 'test end',\n /**\n * Emitted when {@link Test} execution fails\n */\n EVENT_TEST_FAIL: 'fail',\n /**\n * Emitted when {@link Test} execution succeeds\n */\n EVENT_TEST_PASS: 'pass',\n /**\n * Emitted when {@link Test} becomes pending\n */\n EVENT_TEST_PENDING: 'pending',\n /**\n * Emitted when {@link Test} execution has failed, but will retry\n */\n EVENT_TEST_RETRY: 'retry',\n /**\n * Initial state of Runner\n */\n STATE_IDLE: 'idle',\n /**\n * State set to this value when the Runner has started running\n */\n STATE_RUNNING: 'running',\n /**\n * State set to this value when the Runner has stopped\n */\n STATE_STOPPED: 'stopped'\n }\n);\n\nclass Runner extends EventEmitter {\n /**\n * Initialize a `Runner` at the Root {@link Suite}, which represents a hierarchy of {@link Suite|Suites} and {@link Test|Tests}.\n *\n * @extends external:EventEmitter\n * @public\n * @class\n * @param {Suite} suite - Root suite\n * @param {Object|boolean} [opts] - Options. If `boolean` (deprecated), whether to delay execution of root suite until ready.\n * @param {boolean} [opts.cleanReferencesAfterRun] - Whether to clean references to test fns and hooks when a suite is done.\n * @param {boolean} [opts.delay] - Whether to delay execution of root suite until ready.\n * @param {boolean} [opts.dryRun] - Whether to report tests without running them.\n * @param {boolean} [opts.failZero] - Whether to fail test run if zero tests encountered.\n */\n constructor(suite, opts) {\n super();\n if (opts === undefined) {\n opts = {};\n }\n if (typeof opts === 'boolean') {\n // TODO: remove this\n require('./errors').deprecate(\n '\"Runner(suite: Suite, delay: boolean)\" is deprecated. Use \"Runner(suite: Suite, {delay: boolean})\" instead.'\n );\n this._delay = opts;\n opts = {};\n } else {\n this._delay = opts.delay;\n }\n var self = this;\n this._globals = [];\n this._abort = false;\n this.suite = suite;\n this._opts = opts;\n this.state = constants.STATE_IDLE;\n this.total = suite.total();\n this.failures = 0;\n /**\n * @type {Map>>}\n */\n this._eventListeners = new Map();\n this.on(constants.EVENT_TEST_END, function (test) {\n if (test.type === 'test' && test.retriedTest() && test.parent) {\n var idx =\n test.parent.tests && test.parent.tests.indexOf(test.retriedTest());\n if (idx > -1) test.parent.tests[idx] = test;\n }\n self.checkGlobals(test);\n });\n this.on(constants.EVENT_HOOK_END, function (hook) {\n self.checkGlobals(hook);\n });\n this._defaultGrep = /.*/;\n this.grep(this._defaultGrep);\n this.globals(this.globalProps());\n\n this.uncaught = this._uncaught.bind(this);\n this.unhandled = (reason, promise) => {\n if (isMochaError(reason)) {\n debug(\n 'trapped unhandled rejection coming out of Mocha; forwarding to uncaught handler:',\n reason\n );\n this.uncaught(reason);\n } else {\n debug(\n 'trapped unhandled rejection from (probably) user code; re-emitting on process'\n );\n this._removeEventListener(\n process,\n 'unhandledRejection',\n this.unhandled\n );\n try {\n process.emit('unhandledRejection', reason, promise);\n } finally {\n this._addEventListener(process, 'unhandledRejection', this.unhandled);\n }\n }\n };\n }\n}\n\n/**\n * Wrapper for setImmediate, process.nextTick, or browser polyfill.\n *\n * @param {Function} fn\n * @private\n */\nRunner.immediately = global.setImmediate || process.nextTick;\n\n/**\n * Replacement for `target.on(eventName, listener)` that does bookkeeping to remove them when this runner instance is disposed.\n * @param {EventEmitter} target - The `EventEmitter`\n * @param {string} eventName - The event name\n * @param {string} fn - Listener function\n * @private\n */\nRunner.prototype._addEventListener = function (target, eventName, listener) {\n debug(\n '_addEventListener(): adding for event %s; %d current listeners',\n eventName,\n target.listenerCount(eventName)\n );\n /* istanbul ignore next */\n if (\n this._eventListeners.has(target) &&\n this._eventListeners.get(target).has(eventName) &&\n this._eventListeners.get(target).get(eventName).has(listener)\n ) {\n debug(\n 'warning: tried to attach duplicate event listener for %s',\n eventName\n );\n return;\n }\n target.on(eventName, listener);\n const targetListeners = this._eventListeners.has(target)\n ? this._eventListeners.get(target)\n : new Map();\n const targetEventListeners = targetListeners.has(eventName)\n ? targetListeners.get(eventName)\n : new Set();\n targetEventListeners.add(listener);\n targetListeners.set(eventName, targetEventListeners);\n this._eventListeners.set(target, targetListeners);\n};\n\n/**\n * Replacement for `target.removeListener(eventName, listener)` that also updates the bookkeeping.\n * @param {EventEmitter} target - The `EventEmitter`\n * @param {string} eventName - The event name\n * @param {function} listener - Listener function\n * @private\n */\nRunner.prototype._removeEventListener = function (target, eventName, listener) {\n target.removeListener(eventName, listener);\n\n if (this._eventListeners.has(target)) {\n const targetListeners = this._eventListeners.get(target);\n if (targetListeners.has(eventName)) {\n const targetEventListeners = targetListeners.get(eventName);\n targetEventListeners.delete(listener);\n if (!targetEventListeners.size) {\n targetListeners.delete(eventName);\n }\n }\n if (!targetListeners.size) {\n this._eventListeners.delete(target);\n }\n } else {\n debug('trying to remove listener for untracked object %s', target);\n }\n};\n\n/**\n * Removes all event handlers set during a run on this instance.\n * Remark: this does _not_ clean/dispose the tests or suites themselves.\n */\nRunner.prototype.dispose = function () {\n this.removeAllListeners();\n this._eventListeners.forEach((targetListeners, target) => {\n targetListeners.forEach((targetEventListeners, eventName) => {\n targetEventListeners.forEach(listener => {\n target.removeListener(eventName, listener);\n });\n });\n });\n this._eventListeners.clear();\n};\n\n/**\n * Run tests with full titles matching `re`. Updates runner.total\n * with number of tests matched.\n *\n * @public\n * @memberof Runner\n * @param {RegExp} re\n * @param {boolean} invert\n * @return {Runner} Runner instance.\n */\nRunner.prototype.grep = function (re, invert) {\n debug('grep(): setting to %s', re);\n this._grep = re;\n this._invert = invert;\n this.total = this.grepTotal(this.suite);\n return this;\n};\n\n/**\n * Returns the number of tests matching the grep search for the\n * given suite.\n *\n * @memberof Runner\n * @public\n * @param {Suite} suite\n * @return {number}\n */\nRunner.prototype.grepTotal = function (suite) {\n var self = this;\n var total = 0;\n\n suite.eachTest(function (test) {\n var match = self._grep.test(test.fullTitle());\n if (self._invert) {\n match = !match;\n }\n if (match) {\n total++;\n }\n });\n\n return total;\n};\n\n/**\n * Return a list of global properties.\n *\n * @return {Array}\n * @private\n */\nRunner.prototype.globalProps = function () {\n var props = Object.keys(global);\n\n // non-enumerables\n for (var i = 0; i < globals.length; ++i) {\n if (~props.indexOf(globals[i])) {\n continue;\n }\n props.push(globals[i]);\n }\n\n return props;\n};\n\n/**\n * Allow the given `arr` of globals.\n *\n * @public\n * @memberof Runner\n * @param {Array} arr\n * @return {Runner} Runner instance.\n */\nRunner.prototype.globals = function (arr) {\n if (!arguments.length) {\n return this._globals;\n }\n debug('globals(): setting to %O', arr);\n this._globals = this._globals.concat(arr);\n return this;\n};\n\n/**\n * Check for global variable leaks.\n *\n * @private\n */\nRunner.prototype.checkGlobals = function (test) {\n if (!this.checkLeaks) {\n return;\n }\n var ok = this._globals;\n\n var globals = this.globalProps();\n var leaks;\n\n if (test) {\n ok = ok.concat(test._allowedGlobals || []);\n }\n\n if (this.prevGlobalsLength === globals.length) {\n return;\n }\n this.prevGlobalsLength = globals.length;\n\n leaks = filterLeaks(ok, globals);\n this._globals = this._globals.concat(leaks);\n\n if (leaks.length) {\n var msg = `global leak(s) detected: ${leaks.map(e => `'${e}'`).join(', ')}`;\n this.fail(test, new Error(msg));\n }\n};\n\n/**\n * Fail the given `test`.\n *\n * If `test` is a hook, failures work in the following pattern:\n * - If bail, run corresponding `after each` and `after` hooks,\n * then exit\n * - Failed `before` hook skips all tests in a suite and subsuites,\n * but jumps to corresponding `after` hook\n * - Failed `before each` hook skips remaining tests in a\n * suite and jumps to corresponding `after each` hook,\n * which is run only once\n * - Failed `after` hook does not alter execution order\n * - Failed `after each` hook skips remaining tests in a\n * suite and subsuites, but executes other `after each`\n * hooks\n *\n * @private\n * @param {Runnable} test\n * @param {Error} err\n * @param {boolean} [force=false] - Whether to fail a pending test.\n */\nRunner.prototype.fail = function (test, err, force) {\n force = force === true;\n if (test.isPending() && !force) {\n return;\n }\n if (this.state === constants.STATE_STOPPED) {\n if (err.code === errorConstants.MULTIPLE_DONE) {\n throw err;\n }\n throw createFatalError(\n 'Test failed after root suite execution completed!',\n err\n );\n }\n\n ++this.failures;\n debug('total number of failures: %d', this.failures);\n test.state = STATE_FAILED;\n\n if (!isError(err)) {\n err = thrown2Error(err);\n }\n\n try {\n err.stack =\n this.fullStackTrace || !err.stack ? err.stack : stackFilter(err.stack);\n } catch (ignore) {\n // some environments do not take kindly to monkeying with the stack\n }\n\n this.emit(constants.EVENT_TEST_FAIL, test, err);\n};\n\n/**\n * Run hook `name` callbacks and then invoke `fn()`.\n *\n * @private\n * @param {string} name\n * @param {Function} fn\n */\n\nRunner.prototype.hook = function (name, fn) {\n if (this._opts.dryRun) return fn();\n\n var suite = this.suite;\n var hooks = suite.getHooks(name);\n var self = this;\n\n function next(i) {\n var hook = hooks[i];\n if (!hook) {\n return fn();\n }\n self.currentRunnable = hook;\n\n if (name === HOOK_TYPE_BEFORE_ALL) {\n hook.ctx.currentTest = hook.parent.tests[0];\n } else if (name === HOOK_TYPE_AFTER_ALL) {\n hook.ctx.currentTest = hook.parent.tests[hook.parent.tests.length - 1];\n } else {\n hook.ctx.currentTest = self.test;\n }\n\n setHookTitle(hook);\n\n hook.allowUncaught = self.allowUncaught;\n\n self.emit(constants.EVENT_HOOK_BEGIN, hook);\n\n if (!hook.listeners('error').length) {\n self._addEventListener(hook, 'error', function (err) {\n self.fail(hook, err);\n });\n }\n\n hook.run(function cbHookRun(err) {\n var testError = hook.error();\n if (testError) {\n self.fail(self.test, testError);\n }\n // conditional skip\n if (hook.pending) {\n if (name === HOOK_TYPE_AFTER_EACH) {\n // TODO define and implement use case\n if (self.test) {\n self.test.pending = true;\n }\n } else if (name === HOOK_TYPE_BEFORE_EACH) {\n if (self.test) {\n self.test.pending = true;\n }\n self.emit(constants.EVENT_HOOK_END, hook);\n hook.pending = false; // activates hook for next test\n return fn(new Error('abort hookDown'));\n } else if (name === HOOK_TYPE_BEFORE_ALL) {\n suite.tests.forEach(function (test) {\n test.pending = true;\n });\n suite.suites.forEach(function (suite) {\n suite.pending = true;\n });\n hooks = [];\n } else {\n hook.pending = false;\n var errForbid = createUnsupportedError('`this.skip` forbidden');\n self.fail(hook, errForbid);\n return fn(errForbid);\n }\n } else if (err) {\n self.fail(hook, err);\n // stop executing hooks, notify callee of hook err\n return fn(err);\n }\n self.emit(constants.EVENT_HOOK_END, hook);\n delete hook.ctx.currentTest;\n setHookTitle(hook);\n next(++i);\n });\n\n function setHookTitle(hook) {\n hook.originalTitle = hook.originalTitle || hook.title;\n if (hook.ctx && hook.ctx.currentTest) {\n hook.title = `${hook.originalTitle} for \"${hook.ctx.currentTest.title}\"`;\n } else {\n var parentTitle;\n if (hook.parent.title) {\n parentTitle = hook.parent.title;\n } else {\n parentTitle = hook.parent.root ? '{root}' : '';\n }\n hook.title = `${hook.originalTitle} in \"${parentTitle}\"`;\n }\n }\n }\n\n Runner.immediately(function () {\n next(0);\n });\n};\n\n/**\n * Run hook `name` for the given array of `suites`\n * in order, and callback `fn(err, errSuite)`.\n *\n * @private\n * @param {string} name\n * @param {Array} suites\n * @param {Function} fn\n */\nRunner.prototype.hooks = function (name, suites, fn) {\n var self = this;\n var orig = this.suite;\n\n function next(suite) {\n self.suite = suite;\n\n if (!suite) {\n self.suite = orig;\n return fn();\n }\n\n self.hook(name, function (err) {\n if (err) {\n var errSuite = self.suite;\n self.suite = orig;\n return fn(err, errSuite);\n }\n\n next(suites.pop());\n });\n }\n\n next(suites.pop());\n};\n\n/**\n * Run 'afterEach' hooks from bottom up.\n *\n * @param {String} name\n * @param {Function} fn\n * @private\n */\nRunner.prototype.hookUp = function (name, fn) {\n var suites = [this.suite].concat(this.parents()).reverse();\n this.hooks(name, suites, fn);\n};\n\n/**\n * Run 'beforeEach' hooks from top level down.\n *\n * @param {String} name\n * @param {Function} fn\n * @private\n */\nRunner.prototype.hookDown = function (name, fn) {\n var suites = [this.suite].concat(this.parents());\n this.hooks(name, suites, fn);\n};\n\n/**\n * Return an array of parent Suites from\n * closest to furthest.\n *\n * @return {Array}\n * @private\n */\nRunner.prototype.parents = function () {\n var suite = this.suite;\n var suites = [];\n while (suite.parent) {\n suite = suite.parent;\n suites.push(suite);\n }\n return suites;\n};\n\n/**\n * Run the current test and callback `fn(err)`.\n *\n * @param {Function} fn\n * @private\n */\nRunner.prototype.runTest = function (fn) {\n if (this._opts.dryRun) return Runner.immediately(fn);\n\n var self = this;\n var test = this.test;\n\n if (!test) {\n return;\n }\n\n if (this.asyncOnly) {\n test.asyncOnly = true;\n }\n this._addEventListener(test, 'error', function (err) {\n self.fail(test, err);\n });\n if (this.allowUncaught) {\n test.allowUncaught = true;\n return test.run(fn);\n }\n try {\n test.run(fn);\n } catch (err) {\n fn(err);\n }\n};\n\n/**\n * Run tests in the given `suite` and invoke the callback `fn()` when complete.\n *\n * @private\n * @param {Suite} suite\n * @param {Function} fn\n */\nRunner.prototype.runTests = function (suite, fn) {\n var self = this;\n var tests = suite.tests.slice();\n var test;\n\n function hookErr(_, errSuite, after) {\n // before/after Each hook for errSuite failed:\n var orig = self.suite;\n\n // for failed 'after each' hook start from errSuite parent,\n // otherwise start from errSuite itself\n self.suite = after ? errSuite.parent : errSuite;\n\n if (self.suite) {\n self.hookUp(HOOK_TYPE_AFTER_EACH, function (err2, errSuite2) {\n self.suite = orig;\n // some hooks may fail even now\n if (err2) {\n return hookErr(err2, errSuite2, true);\n }\n // report error suite\n fn(errSuite);\n });\n } else {\n // there is no need calling other 'after each' hooks\n self.suite = orig;\n fn(errSuite);\n }\n }\n\n function next(err, errSuite) {\n // if we bail after first err\n if (self.failures && suite._bail) {\n tests = [];\n }\n\n if (self._abort) {\n return fn();\n }\n\n if (err) {\n return hookErr(err, errSuite, true);\n }\n\n // next test\n test = tests.shift();\n\n // all done\n if (!test) {\n return fn();\n }\n\n // grep\n var match = self._grep.test(test.fullTitle());\n if (self._invert) {\n match = !match;\n }\n if (!match) {\n // Run immediately only if we have defined a grep. When we\n // define a grep — It can cause maximum callstack error if\n // the grep is doing a large recursive loop by neglecting\n // all tests. The run immediately function also comes with\n // a performance cost. So we don't want to run immediately\n // if we run the whole test suite, because running the whole\n // test suite don't do any immediate recursive loops. Thus,\n // allowing a JS runtime to breathe.\n if (self._grep !== self._defaultGrep) {\n Runner.immediately(next);\n } else {\n next();\n }\n return;\n }\n\n // static skip, no hooks are executed\n if (test.isPending()) {\n if (self.forbidPending) {\n self.fail(test, new Error('Pending test forbidden'), true);\n } else {\n test.state = STATE_PENDING;\n self.emit(constants.EVENT_TEST_PENDING, test);\n }\n self.emit(constants.EVENT_TEST_END, test);\n return next();\n }\n\n // execute test and hook(s)\n self.emit(constants.EVENT_TEST_BEGIN, (self.test = test));\n self.hookDown(HOOK_TYPE_BEFORE_EACH, function (err, errSuite) {\n // conditional skip within beforeEach\n if (test.isPending()) {\n if (self.forbidPending) {\n self.fail(test, new Error('Pending test forbidden'), true);\n } else {\n test.state = STATE_PENDING;\n self.emit(constants.EVENT_TEST_PENDING, test);\n }\n self.emit(constants.EVENT_TEST_END, test);\n // skip inner afterEach hooks below errSuite level\n var origSuite = self.suite;\n self.suite = errSuite || self.suite;\n return self.hookUp(HOOK_TYPE_AFTER_EACH, function (e, eSuite) {\n self.suite = origSuite;\n next(e, eSuite);\n });\n }\n if (err) {\n return hookErr(err, errSuite, false);\n }\n self.currentRunnable = self.test;\n self.runTest(function (err) {\n test = self.test;\n // conditional skip within it\n if (test.pending) {\n if (self.forbidPending) {\n self.fail(test, new Error('Pending test forbidden'), true);\n } else {\n test.state = STATE_PENDING;\n self.emit(constants.EVENT_TEST_PENDING, test);\n }\n self.emit(constants.EVENT_TEST_END, test);\n return self.hookUp(HOOK_TYPE_AFTER_EACH, next);\n } else if (err) {\n var retry = test.currentRetry();\n if (retry < test.retries()) {\n var clonedTest = test.clone();\n clonedTest.currentRetry(retry + 1);\n tests.unshift(clonedTest);\n\n self.emit(constants.EVENT_TEST_RETRY, test, err);\n\n // Early return + hook trigger so that it doesn't\n // increment the count wrong\n return self.hookUp(HOOK_TYPE_AFTER_EACH, next);\n } else {\n self.fail(test, err);\n }\n self.emit(constants.EVENT_TEST_END, test);\n return self.hookUp(HOOK_TYPE_AFTER_EACH, next);\n }\n\n test.state = STATE_PASSED;\n self.emit(constants.EVENT_TEST_PASS, test);\n self.emit(constants.EVENT_TEST_END, test);\n self.hookUp(HOOK_TYPE_AFTER_EACH, next);\n });\n });\n }\n\n this.next = next;\n this.hookErr = hookErr;\n next();\n};\n\n/**\n * Run the given `suite` and invoke the callback `fn()` when complete.\n *\n * @private\n * @param {Suite} suite\n * @param {Function} fn\n */\nRunner.prototype.runSuite = function (suite, fn) {\n var i = 0;\n var self = this;\n var total = this.grepTotal(suite);\n\n debug('runSuite(): running %s', suite.fullTitle());\n\n if (!total || (self.failures && suite._bail)) {\n debug('runSuite(): bailing');\n return fn();\n }\n\n this.emit(constants.EVENT_SUITE_BEGIN, (this.suite = suite));\n\n function next(errSuite) {\n if (errSuite) {\n // current suite failed on a hook from errSuite\n if (errSuite === suite) {\n // if errSuite is current suite\n // continue to the next sibling suite\n return done();\n }\n // errSuite is among the parents of current suite\n // stop execution of errSuite and all sub-suites\n return done(errSuite);\n }\n\n if (self._abort) {\n return done();\n }\n\n var curr = suite.suites[i++];\n if (!curr) {\n return done();\n }\n\n // Avoid grep neglecting large number of tests causing a\n // huge recursive loop and thus a maximum call stack error.\n // See comment in `this.runTests()` for more information.\n if (self._grep !== self._defaultGrep) {\n Runner.immediately(function () {\n self.runSuite(curr, next);\n });\n } else {\n self.runSuite(curr, next);\n }\n }\n\n function done(errSuite) {\n self.suite = suite;\n self.nextSuite = next;\n\n // remove reference to test\n delete self.test;\n\n self.hook(HOOK_TYPE_AFTER_ALL, function () {\n self.emit(constants.EVENT_SUITE_END, suite);\n fn(errSuite);\n });\n }\n\n this.nextSuite = next;\n\n this.hook(HOOK_TYPE_BEFORE_ALL, function (err) {\n if (err) {\n return done();\n }\n self.runTests(suite, next);\n });\n};\n\n/**\n * Handle uncaught exceptions within runner.\n *\n * This function is bound to the instance as `Runner#uncaught` at instantiation\n * time. It's intended to be listening on the `Process.uncaughtException` event.\n * In order to not leak EE listeners, we need to ensure no more than a single\n * `uncaughtException` listener exists per `Runner`. The only way to do\n * this--because this function needs the context (and we don't have lambdas)--is\n * to use `Function.prototype.bind`. We need strict equality to unregister and\n * _only_ unregister the _one_ listener we set from the\n * `Process.uncaughtException` event; would be poor form to just remove\n * everything. See {@link Runner#run} for where the event listener is registered\n * and unregistered.\n * @param {Error} err - Some uncaught error\n * @private\n */\nRunner.prototype._uncaught = function (err) {\n // this is defensive to prevent future developers from mis-calling this function.\n // it's more likely that it'd be called with the incorrect context--say, the global\n // `process` object--than it would to be called with a context that is not a \"subclass\"\n // of `Runner`.\n if (!(this instanceof Runner)) {\n throw createFatalError(\n 'Runner#uncaught() called with invalid context',\n this\n );\n }\n if (err instanceof Pending) {\n debug('uncaught(): caught a Pending');\n return;\n }\n // browser does not exit script when throwing in global.onerror()\n if (this.allowUncaught && !utils.isBrowser()) {\n debug('uncaught(): bubbling exception due to --allow-uncaught');\n throw err;\n }\n\n if (this.state === constants.STATE_STOPPED) {\n debug('uncaught(): throwing after run has completed!');\n throw err;\n }\n\n if (err) {\n debug('uncaught(): got truthy exception %O', err);\n } else {\n debug('uncaught(): undefined/falsy exception');\n err = createInvalidExceptionError(\n 'Caught falsy/undefined exception which would otherwise be uncaught. No stack trace found; try a debugger',\n err\n );\n }\n\n if (!isError(err)) {\n err = thrown2Error(err);\n debug('uncaught(): converted \"error\" %o to Error', err);\n }\n err.uncaught = true;\n\n var runnable = this.currentRunnable;\n\n if (!runnable) {\n runnable = new Runnable('Uncaught error outside test suite');\n debug('uncaught(): no current Runnable; created a phony one');\n runnable.parent = this.suite;\n\n if (this.state === constants.STATE_RUNNING) {\n debug('uncaught(): failing gracefully');\n this.fail(runnable, err);\n } else {\n // Can't recover from this failure\n debug('uncaught(): test run has not yet started; unrecoverable');\n this.emit(constants.EVENT_RUN_BEGIN);\n this.fail(runnable, err);\n this.emit(constants.EVENT_RUN_END);\n }\n\n return;\n }\n\n runnable.clearTimeout();\n\n if (runnable.isFailed()) {\n debug('uncaught(): Runnable has already failed');\n // Ignore error if already failed\n return;\n } else if (runnable.isPending()) {\n debug('uncaught(): pending Runnable wound up failing!');\n // report 'pending test' retrospectively as failed\n this.fail(runnable, err, true);\n return;\n }\n\n // we cannot recover gracefully if a Runnable has already passed\n // then fails asynchronously\n if (runnable.isPassed()) {\n debug('uncaught(): Runnable has already passed; bailing gracefully');\n this.fail(runnable, err);\n this.abort();\n } else {\n debug('uncaught(): forcing Runnable to complete with Error');\n return runnable.callback(err);\n }\n};\n\n/**\n * Run the root suite and invoke `fn(failures)`\n * on completion.\n *\n * @public\n * @memberof Runner\n * @param {Function} fn - Callback when finished\n * @param {{files: string[], options: Options}} [opts] - For subclasses\n * @returns {Runner} Runner instance.\n */\nRunner.prototype.run = function (fn, opts = {}) {\n var rootSuite = this.suite;\n var options = opts.options || {};\n\n debug('run(): got options: %O', options);\n fn = fn || function () {};\n\n const end = () => {\n if (!this.total && this._opts.failZero) this.failures = 1;\n\n debug('run(): root suite completed; emitting %s', constants.EVENT_RUN_END);\n this.emit(constants.EVENT_RUN_END);\n };\n\n const begin = () => {\n debug('run(): emitting %s', constants.EVENT_RUN_BEGIN);\n this.emit(constants.EVENT_RUN_BEGIN);\n debug('run(): emitted %s', constants.EVENT_RUN_BEGIN);\n\n this.runSuite(rootSuite, end);\n };\n\n const prepare = () => {\n debug('run(): starting');\n // If there is an `only` filter\n if (rootSuite.hasOnly()) {\n rootSuite.filterOnly();\n debug('run(): filtered exclusive Runnables');\n }\n this.state = constants.STATE_RUNNING;\n if (this._delay) {\n this.emit(constants.EVENT_DELAY_END);\n debug('run(): \"delay\" ended');\n }\n\n return begin();\n };\n\n // references cleanup to avoid memory leaks\n if (this._opts.cleanReferencesAfterRun) {\n this.on(constants.EVENT_SUITE_END, suite => {\n suite.cleanReferences();\n });\n }\n\n // callback\n this.on(constants.EVENT_RUN_END, function () {\n this.state = constants.STATE_STOPPED;\n debug('run(): emitted %s', constants.EVENT_RUN_END);\n fn(this.failures);\n });\n\n this._removeEventListener(process, 'uncaughtException', this.uncaught);\n this._removeEventListener(process, 'unhandledRejection', this.unhandled);\n this._addEventListener(process, 'uncaughtException', this.uncaught);\n this._addEventListener(process, 'unhandledRejection', this.unhandled);\n\n if (this._delay) {\n // for reporters, I guess.\n // might be nice to debounce some dots while we wait.\n this.emit(constants.EVENT_DELAY_BEGIN, rootSuite);\n rootSuite.once(EVENT_ROOT_SUITE_RUN, prepare);\n debug('run(): waiting for green light due to --delay');\n } else {\n Runner.immediately(prepare);\n }\n\n return this;\n};\n\n/**\n * Toggle partial object linking behavior; used for building object references from\n * unique ID's. Does nothing in serial mode, because the object references already exist.\n * Subclasses can implement this (e.g., `ParallelBufferedRunner`)\n * @abstract\n * @param {boolean} [value] - If `true`, enable partial object linking, otherwise disable\n * @returns {Runner}\n * @chainable\n * @public\n * @example\n * // this reporter needs proper object references when run in parallel mode\n * class MyReporter() {\n * constructor(runner) {\n * this.runner.linkPartialObjects(true)\n * .on(EVENT_SUITE_BEGIN, suite => {\n // this Suite may be the same object...\n * })\n * .on(EVENT_TEST_BEGIN, test => {\n * // ...as the `test.parent` property\n * });\n * }\n * }\n */\nRunner.prototype.linkPartialObjects = function (value) {\n return this;\n};\n\n/*\n * Like {@link Runner#run}, but does not accept a callback and returns a `Promise` instead of a `Runner`.\n * This function cannot reject; an `unhandledRejection` event will bubble up to the `process` object instead.\n * @public\n * @memberof Runner\n * @param {Object} [opts] - Options for {@link Runner#run}\n * @returns {Promise} Failure count\n */\nRunner.prototype.runAsync = async function runAsync(opts = {}) {\n return new Promise(resolve => {\n this.run(resolve, opts);\n });\n};\n\n/**\n * Cleanly abort execution.\n *\n * @memberof Runner\n * @public\n * @return {Runner} Runner instance.\n */\nRunner.prototype.abort = function () {\n debug('abort(): aborting');\n this._abort = true;\n\n return this;\n};\n\n/**\n * Returns `true` if Mocha is running in parallel mode. For reporters.\n *\n * Subclasses should return an appropriate value.\n * @public\n * @returns {false}\n */\nRunner.prototype.isParallelMode = function isParallelMode() {\n return false;\n};\n\n/**\n * Configures an alternate reporter for worker processes to use. Subclasses\n * using worker processes should implement this.\n * @public\n * @param {string} path - Absolute path to alternate reporter for worker processes to use\n * @returns {Runner}\n * @throws When in serial mode\n * @chainable\n * @abstract\n */\nRunner.prototype.workerReporter = function () {\n throw createUnsupportedError('workerReporter() not supported in serial mode');\n};\n\n/**\n * Filter leaks with the given globals flagged as `ok`.\n *\n * @private\n * @param {Array} ok\n * @param {Array} globals\n * @return {Array}\n */\nfunction filterLeaks(ok, globals) {\n return globals.filter(function (key) {\n // Firefox and Chrome exposes iframes as index inside the window object\n if (/^\\d+/.test(key)) {\n return false;\n }\n\n // in firefox\n // if runner runs in an iframe, this iframe's window.getInterface method\n // not init at first it is assigned in some seconds\n if (global.navigator && /^getInterface/.test(key)) {\n return false;\n }\n\n // an iframe could be approached by window[iframeIndex]\n // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak\n if (global.navigator && /^\\d+/.test(key)) {\n return false;\n }\n\n // Opera and IE expose global variables for HTML element IDs (issue #243)\n if (/^mocha-/.test(key)) {\n return false;\n }\n\n var matched = ok.filter(function (ok) {\n if (~ok.indexOf('*')) {\n return key.indexOf(ok.split('*')[0]) === 0;\n }\n return key === ok;\n });\n return !matched.length && (!global.navigator || key !== 'onerror');\n });\n}\n\n/**\n * Check if argument is an instance of Error object or a duck-typed equivalent.\n *\n * @private\n * @param {Object} err - object to check\n * @param {string} err.message - error message\n * @returns {boolean}\n */\nfunction isError(err) {\n return err instanceof Error || (err && typeof err.message === 'string');\n}\n\n/**\n *\n * Converts thrown non-extensible type into proper Error.\n *\n * @private\n * @param {*} thrown - Non-extensible type thrown by code\n * @return {Error}\n */\nfunction thrown2Error(err) {\n return new Error(\n `the ${utils.canonicalType(err)} ${stringify(\n err\n )} was thrown, throw an Error :)`\n );\n}\n\nRunner.constants = constants;\n\n/**\n * Node.js' `EventEmitter`\n * @external EventEmitter\n * @see {@link https://nodejs.org/api/events.html#events_class_eventemitter}\n */\n\nmodule.exports = Runner;\n","'use strict';\n/**\n * @module Base\n */\n/**\n * Module dependencies.\n */\n\nvar diff = require('diff');\nvar milliseconds = require('ms');\nvar utils = require('../utils');\nvar supportsColor = require('supports-color');\nvar symbols = require('log-symbols');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\n\nconst isBrowser = utils.isBrowser();\n\nfunction getBrowserWindowSize() {\n if ('innerHeight' in global) {\n return [global.innerHeight, global.innerWidth];\n }\n // In a Web Worker, the DOM Window is not available.\n return [640, 480];\n}\n\n/**\n * Expose `Base`.\n */\n\nexports = module.exports = Base;\n\n/**\n * Check if both stdio streams are associated with a tty.\n */\n\nvar isatty = isBrowser || (process.stdout.isTTY && process.stderr.isTTY);\n\n/**\n * Save log references to avoid tests interfering (see GH-3604).\n */\nvar consoleLog = console.log;\n\n/**\n * Enable coloring by default, except in the browser interface.\n */\n\nexports.useColors =\n !isBrowser &&\n (supportsColor.stdout || process.env.MOCHA_COLORS !== undefined);\n\n/**\n * Inline diffs instead of +/-\n */\n\nexports.inlineDiffs = false;\n\n/**\n * Truncate diffs longer than this value to avoid slow performance\n */\nexports.maxDiffSize = 8192;\n\n/**\n * Default color map.\n */\n\nexports.colors = {\n pass: 90,\n fail: 31,\n 'bright pass': 92,\n 'bright fail': 91,\n 'bright yellow': 93,\n pending: 36,\n suite: 0,\n 'error title': 0,\n 'error message': 31,\n 'error stack': 90,\n checkmark: 32,\n fast: 90,\n medium: 33,\n slow: 31,\n green: 32,\n light: 90,\n 'diff gutter': 90,\n 'diff added': 32,\n 'diff removed': 31,\n 'diff added inline': '30;42',\n 'diff removed inline': '30;41'\n};\n\n/**\n * Default symbol map.\n */\n\nexports.symbols = {\n ok: symbols.success,\n err: symbols.error,\n dot: '.',\n comma: ',',\n bang: '!'\n};\n\n/**\n * Color `str` with the given `type`,\n * allowing colors to be disabled,\n * as well as user-defined color\n * schemes.\n *\n * @private\n * @param {string} type\n * @param {string} str\n * @return {string}\n */\nvar color = (exports.color = function (type, str) {\n if (!exports.useColors) {\n return String(str);\n }\n return '\\u001b[' + exports.colors[type] + 'm' + str + '\\u001b[0m';\n});\n\n/**\n * Expose term window size, with some defaults for when stderr is not a tty.\n */\n\nexports.window = {\n width: 75\n};\n\nif (isatty) {\n if (isBrowser) {\n exports.window.width = getBrowserWindowSize()[1];\n } else {\n exports.window.width = process.stdout.getWindowSize(1)[0];\n }\n}\n\n/**\n * Expose some basic cursor interactions that are common among reporters.\n */\n\nexports.cursor = {\n hide: function () {\n isatty && process.stdout.write('\\u001b[?25l');\n },\n\n show: function () {\n isatty && process.stdout.write('\\u001b[?25h');\n },\n\n deleteLine: function () {\n isatty && process.stdout.write('\\u001b[2K');\n },\n\n beginningOfLine: function () {\n isatty && process.stdout.write('\\u001b[0G');\n },\n\n CR: function () {\n if (isatty) {\n exports.cursor.deleteLine();\n exports.cursor.beginningOfLine();\n } else {\n process.stdout.write('\\r');\n }\n }\n};\n\nvar showDiff = (exports.showDiff = function (err) {\n return (\n err &&\n err.showDiff !== false &&\n sameType(err.actual, err.expected) &&\n err.expected !== undefined\n );\n});\n\nfunction stringifyDiffObjs(err) {\n if (!utils.isString(err.actual) || !utils.isString(err.expected)) {\n err.actual = utils.stringify(err.actual);\n err.expected = utils.stringify(err.expected);\n }\n}\n\n/**\n * Returns a diff between 2 strings with coloured ANSI output.\n *\n * @description\n * The diff will be either inline or unified dependent on the value\n * of `Base.inlineDiff`.\n *\n * @param {string} actual\n * @param {string} expected\n * @return {string} Diff\n */\n\nvar generateDiff = (exports.generateDiff = function (actual, expected) {\n try {\n var maxLen = exports.maxDiffSize;\n var skipped = 0;\n if (maxLen > 0) {\n skipped = Math.max(actual.length - maxLen, expected.length - maxLen);\n actual = actual.slice(0, maxLen);\n expected = expected.slice(0, maxLen);\n }\n let result = exports.inlineDiffs\n ? inlineDiff(actual, expected)\n : unifiedDiff(actual, expected);\n if (skipped > 0) {\n result = `${result}\\n [mocha] output truncated to ${maxLen} characters, see \"maxDiffSize\" reporter-option\\n`;\n }\n return result;\n } catch (err) {\n var msg =\n '\\n ' +\n color('diff added', '+ expected') +\n ' ' +\n color('diff removed', '- actual: failed to generate Mocha diff') +\n '\\n';\n return msg;\n }\n});\n\n/**\n * Outputs the given `failures` as a list.\n *\n * @public\n * @memberof Mocha.reporters.Base\n * @variation 1\n * @param {Object[]} failures - Each is Test instance with corresponding\n * Error property\n */\nexports.list = function (failures) {\n var multipleErr, multipleTest;\n Base.consoleLog();\n failures.forEach(function (test, i) {\n // format\n var fmt =\n color('error title', ' %s) %s:\\n') +\n color('error message', ' %s') +\n color('error stack', '\\n%s\\n');\n\n // msg\n var msg;\n var err;\n if (test.err && test.err.multiple) {\n if (multipleTest !== test) {\n multipleTest = test;\n multipleErr = [test.err].concat(test.err.multiple);\n }\n err = multipleErr.shift();\n } else {\n err = test.err;\n }\n var message;\n if (typeof err.inspect === 'function') {\n message = err.inspect() + '';\n } else if (err.message && typeof err.message.toString === 'function') {\n message = err.message + '';\n } else {\n message = '';\n }\n var stack = err.stack || message;\n var index = message ? stack.indexOf(message) : -1;\n\n if (index === -1) {\n msg = message;\n } else {\n index += message.length;\n msg = stack.slice(0, index);\n // remove msg from stack\n stack = stack.slice(index + 1);\n }\n\n // uncaught\n if (err.uncaught) {\n msg = 'Uncaught ' + msg;\n }\n // explicitly show diff\n if (!exports.hideDiff && showDiff(err)) {\n stringifyDiffObjs(err);\n fmt =\n color('error title', ' %s) %s:\\n%s') + color('error stack', '\\n%s\\n');\n var match = message.match(/^([^:]+): expected/);\n msg = '\\n ' + color('error message', match ? match[1] : msg);\n\n msg += generateDiff(err.actual, err.expected);\n }\n\n // indent stack trace\n stack = stack.replace(/^/gm, ' ');\n\n // indented test title\n var testTitle = '';\n test.titlePath().forEach(function (str, index) {\n if (index !== 0) {\n testTitle += '\\n ';\n }\n for (var i = 0; i < index; i++) {\n testTitle += ' ';\n }\n testTitle += str;\n });\n\n Base.consoleLog(fmt, i + 1, testTitle, msg, stack);\n });\n};\n\n/**\n * Constructs a new `Base` reporter instance.\n *\n * @description\n * All other reporters generally inherit from this reporter.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Base(runner, options) {\n var failures = (this.failures = []);\n\n if (!runner) {\n throw new TypeError('Missing runner argument');\n }\n this.options = options || {};\n this.runner = runner;\n this.stats = runner.stats; // assigned so Reporters keep a closer reference\n\n var maxDiffSizeOpt =\n this.options.reporterOption && this.options.reporterOption.maxDiffSize;\n if (maxDiffSizeOpt !== undefined && !isNaN(Number(maxDiffSizeOpt))) {\n exports.maxDiffSize = Number(maxDiffSizeOpt);\n }\n\n runner.on(EVENT_TEST_PASS, function (test) {\n if (test.duration > test.slow()) {\n test.speed = 'slow';\n } else if (test.duration > test.slow() / 2) {\n test.speed = 'medium';\n } else {\n test.speed = 'fast';\n }\n });\n\n runner.on(EVENT_TEST_FAIL, function (test, err) {\n if (showDiff(err)) {\n stringifyDiffObjs(err);\n }\n // more than one error per test\n if (test.err && err instanceof Error) {\n test.err.multiple = (test.err.multiple || []).concat(err);\n } else {\n test.err = err;\n }\n failures.push(test);\n });\n}\n\n/**\n * Outputs common epilogue used by many of the bundled reporters.\n *\n * @public\n * @memberof Mocha.reporters\n */\nBase.prototype.epilogue = function () {\n var stats = this.stats;\n var fmt;\n\n Base.consoleLog();\n\n // passes\n fmt =\n color('bright pass', ' ') +\n color('green', ' %d passing') +\n color('light', ' (%s)');\n\n Base.consoleLog(fmt, stats.passes || 0, milliseconds(stats.duration));\n\n // pending\n if (stats.pending) {\n fmt = color('pending', ' ') + color('pending', ' %d pending');\n\n Base.consoleLog(fmt, stats.pending);\n }\n\n // failures\n if (stats.failures) {\n fmt = color('fail', ' %d failing');\n\n Base.consoleLog(fmt, stats.failures);\n\n Base.list(this.failures);\n Base.consoleLog();\n }\n\n Base.consoleLog();\n};\n\n/**\n * Pads the given `str` to `len`.\n *\n * @private\n * @param {string} str\n * @param {string} len\n * @return {string}\n */\nfunction pad(str, len) {\n str = String(str);\n return Array(len - str.length + 1).join(' ') + str;\n}\n\n/**\n * Returns inline diff between 2 strings with coloured ANSI output.\n *\n * @private\n * @param {String} actual\n * @param {String} expected\n * @return {string} Diff\n */\nfunction inlineDiff(actual, expected) {\n var msg = errorDiff(actual, expected);\n\n // linenos\n var lines = msg.split('\\n');\n if (lines.length > 4) {\n var width = String(lines.length).length;\n msg = lines\n .map(function (str, i) {\n return pad(++i, width) + ' |' + ' ' + str;\n })\n .join('\\n');\n }\n\n // legend\n msg =\n '\\n' +\n color('diff removed inline', 'actual') +\n ' ' +\n color('diff added inline', 'expected') +\n '\\n\\n' +\n msg +\n '\\n';\n\n // indent\n msg = msg.replace(/^/gm, ' ');\n return msg;\n}\n\n/**\n * Returns unified diff between two strings with coloured ANSI output.\n *\n * @private\n * @param {String} actual\n * @param {String} expected\n * @return {string} The diff.\n */\nfunction unifiedDiff(actual, expected) {\n var indent = ' ';\n function cleanUp(line) {\n if (line[0] === '+') {\n return indent + colorLines('diff added', line);\n }\n if (line[0] === '-') {\n return indent + colorLines('diff removed', line);\n }\n if (line.match(/@@/)) {\n return '--';\n }\n if (line.match(/\\\\ No newline/)) {\n return null;\n }\n return indent + line;\n }\n function notBlank(line) {\n return typeof line !== 'undefined' && line !== null;\n }\n var msg = diff.createPatch('string', actual, expected);\n var lines = msg.split('\\n').splice(5);\n return (\n '\\n ' +\n colorLines('diff added', '+ expected') +\n ' ' +\n colorLines('diff removed', '- actual') +\n '\\n\\n' +\n lines.map(cleanUp).filter(notBlank).join('\\n')\n );\n}\n\n/**\n * Returns character diff for `err`.\n *\n * @private\n * @param {String} actual\n * @param {String} expected\n * @return {string} the diff\n */\nfunction errorDiff(actual, expected) {\n return diff\n .diffWordsWithSpace(actual, expected)\n .map(function (str) {\n if (str.added) {\n return colorLines('diff added inline', str.value);\n }\n if (str.removed) {\n return colorLines('diff removed inline', str.value);\n }\n return str.value;\n })\n .join('');\n}\n\n/**\n * Colors lines for `str`, using the color `name`.\n *\n * @private\n * @param {string} name\n * @param {string} str\n * @return {string}\n */\nfunction colorLines(name, str) {\n return str\n .split('\\n')\n .map(function (str) {\n return color(name, str);\n })\n .join('\\n');\n}\n\n/**\n * Object#toString reference.\n */\nvar objToString = Object.prototype.toString;\n\n/**\n * Checks that a / b have the same type.\n *\n * @private\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nfunction sameType(a, b) {\n return objToString.call(a) === objToString.call(b);\n}\n\nBase.consoleLog = consoleLog;\n\nBase.abstract = true;\n","'use strict';\n/**\n * @module Dot\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = Dot;\n\n/**\n * Constructs a new `Dot` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Dot(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var width = (Base.window.width * 0.75) | 0;\n var n = -1;\n\n runner.on(EVENT_RUN_BEGIN, function () {\n process.stdout.write('\\n');\n });\n\n runner.on(EVENT_TEST_PENDING, function () {\n if (++n % width === 0) {\n process.stdout.write('\\n ');\n }\n process.stdout.write(Base.color('pending', Base.symbols.comma));\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n if (++n % width === 0) {\n process.stdout.write('\\n ');\n }\n if (test.speed === 'slow') {\n process.stdout.write(Base.color('bright yellow', Base.symbols.dot));\n } else {\n process.stdout.write(Base.color(test.speed, Base.symbols.dot));\n }\n });\n\n runner.on(EVENT_TEST_FAIL, function () {\n if (++n % width === 0) {\n process.stdout.write('\\n ');\n }\n process.stdout.write(Base.color('fail', Base.symbols.bang));\n });\n\n runner.once(EVENT_RUN_END, function () {\n process.stdout.write('\\n');\n self.epilogue();\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Dot, Base);\n\nDot.description = 'dot matrix representation';\n","'use strict';\n/**\n * @module Doc\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN;\nvar EVENT_SUITE_END = constants.EVENT_SUITE_END;\n\n/**\n * Expose `Doc`.\n */\n\nexports = module.exports = Doc;\n\n/**\n * Constructs a new `Doc` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Doc(runner, options) {\n Base.call(this, runner, options);\n\n var indents = 2;\n\n function indent() {\n return Array(indents).join(' ');\n }\n\n runner.on(EVENT_SUITE_BEGIN, function (suite) {\n if (suite.root) {\n return;\n }\n ++indents;\n Base.consoleLog('%s
          ', indent());\n ++indents;\n Base.consoleLog('%s

          %s

          ', indent(), utils.escape(suite.title));\n Base.consoleLog('%s
          ', indent());\n });\n\n runner.on(EVENT_SUITE_END, function (suite) {\n if (suite.root) {\n return;\n }\n Base.consoleLog('%s
          ', indent());\n --indents;\n Base.consoleLog('%s
          ', indent());\n --indents;\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n Base.consoleLog('%s
          %s
          ', indent(), utils.escape(test.title));\n Base.consoleLog('%s
          %s
          ', indent(), utils.escape(test.file));\n var code = utils.escape(utils.clean(test.body));\n Base.consoleLog('%s
          %s
          ', indent(), code);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test, err) {\n Base.consoleLog(\n '%s
          %s
          ',\n indent(),\n utils.escape(test.title)\n );\n Base.consoleLog(\n '%s
          %s
          ',\n indent(),\n utils.escape(test.file)\n );\n var code = utils.escape(utils.clean(test.body));\n Base.consoleLog(\n '%s
          %s
          ',\n indent(),\n code\n );\n Base.consoleLog(\n '%s
          %s
          ',\n indent(),\n utils.escape(err)\n );\n });\n}\n\nDoc.description = 'HTML documentation';\n","'use strict';\n/**\n * @module TAP\n */\n/**\n * Module dependencies.\n */\n\nvar util = require('util');\nvar Base = require('./base');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar EVENT_TEST_END = constants.EVENT_TEST_END;\nvar inherits = require('../utils').inherits;\nvar sprintf = util.format;\n\n/**\n * Expose `TAP`.\n */\n\nexports = module.exports = TAP;\n\n/**\n * Constructs a new `TAP` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction TAP(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var n = 1;\n\n var tapVersion = '12';\n if (options && options.reporterOptions) {\n if (options.reporterOptions.tapVersion) {\n tapVersion = options.reporterOptions.tapVersion.toString();\n }\n }\n\n this._producer = createProducer(tapVersion);\n\n runner.once(EVENT_RUN_BEGIN, function () {\n self._producer.writeVersion();\n });\n\n runner.on(EVENT_TEST_END, function () {\n ++n;\n });\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n self._producer.writePending(n, test);\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n self._producer.writePass(n, test);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test, err) {\n self._producer.writeFail(n, test, err);\n });\n\n runner.once(EVENT_RUN_END, function () {\n self._producer.writeEpilogue(runner.stats);\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(TAP, Base);\n\n/**\n * Returns a TAP-safe title of `test`.\n *\n * @private\n * @param {Test} test - Test instance.\n * @return {String} title with any hash character removed\n */\nfunction title(test) {\n return test.fullTitle().replace(/#/g, '');\n}\n\n/**\n * Writes newline-terminated formatted string to reporter output stream.\n *\n * @private\n * @param {string} format - `printf`-like format string\n * @param {...*} [varArgs] - Format string arguments\n */\nfunction println(format, varArgs) {\n var vargs = Array.from(arguments);\n vargs[0] += '\\n';\n process.stdout.write(sprintf.apply(null, vargs));\n}\n\n/**\n * Returns a `tapVersion`-appropriate TAP producer instance, if possible.\n *\n * @private\n * @param {string} tapVersion - Version of TAP specification to produce.\n * @returns {TAPProducer} specification-appropriate instance\n * @throws {Error} if specification version has no associated producer.\n */\nfunction createProducer(tapVersion) {\n var producers = {\n 12: new TAP12Producer(),\n 13: new TAP13Producer()\n };\n var producer = producers[tapVersion];\n\n if (!producer) {\n throw new Error(\n 'invalid or unsupported TAP version: ' + JSON.stringify(tapVersion)\n );\n }\n\n return producer;\n}\n\n/**\n * @summary\n * Constructs a new TAPProducer.\n *\n * @description\n * Only to be used as an abstract base class.\n *\n * @private\n * @constructor\n */\nfunction TAPProducer() {}\n\n/**\n * Writes the TAP version to reporter output stream.\n *\n * @abstract\n */\nTAPProducer.prototype.writeVersion = function () {};\n\n/**\n * Writes the plan to reporter output stream.\n *\n * @abstract\n * @param {number} ntests - Number of tests that are planned to run.\n */\nTAPProducer.prototype.writePlan = function (ntests) {\n println('%d..%d', 1, ntests);\n};\n\n/**\n * Writes that test passed to reporter output stream.\n *\n * @abstract\n * @param {number} n - Index of test that passed.\n * @param {Test} test - Instance containing test information.\n */\nTAPProducer.prototype.writePass = function (n, test) {\n println('ok %d %s', n, title(test));\n};\n\n/**\n * Writes that test was skipped to reporter output stream.\n *\n * @abstract\n * @param {number} n - Index of test that was skipped.\n * @param {Test} test - Instance containing test information.\n */\nTAPProducer.prototype.writePending = function (n, test) {\n println('ok %d %s # SKIP -', n, title(test));\n};\n\n/**\n * Writes that test failed to reporter output stream.\n *\n * @abstract\n * @param {number} n - Index of test that failed.\n * @param {Test} test - Instance containing test information.\n * @param {Error} err - Reason the test failed.\n */\nTAPProducer.prototype.writeFail = function (n, test, err) {\n println('not ok %d %s', n, title(test));\n};\n\n/**\n * Writes the summary epilogue to reporter output stream.\n *\n * @abstract\n * @param {Object} stats - Object containing run statistics.\n */\nTAPProducer.prototype.writeEpilogue = function (stats) {\n // :TBD: Why is this not counting pending tests?\n println('# tests ' + (stats.passes + stats.failures));\n println('# pass ' + stats.passes);\n // :TBD: Why are we not showing pending results?\n println('# fail ' + stats.failures);\n this.writePlan(stats.passes + stats.failures + stats.pending);\n};\n\n/**\n * @summary\n * Constructs a new TAP12Producer.\n *\n * @description\n * Produces output conforming to the TAP12 specification.\n *\n * @private\n * @constructor\n * @extends TAPProducer\n * @see {@link https://testanything.org/tap-specification.html|Specification}\n */\nfunction TAP12Producer() {\n /**\n * Writes that test failed to reporter output stream, with error formatting.\n * @override\n */\n this.writeFail = function (n, test, err) {\n TAPProducer.prototype.writeFail.call(this, n, test, err);\n if (err.message) {\n println(err.message.replace(/^/gm, ' '));\n }\n if (err.stack) {\n println(err.stack.replace(/^/gm, ' '));\n }\n };\n}\n\n/**\n * Inherit from `TAPProducer.prototype`.\n */\ninherits(TAP12Producer, TAPProducer);\n\n/**\n * @summary\n * Constructs a new TAP13Producer.\n *\n * @description\n * Produces output conforming to the TAP13 specification.\n *\n * @private\n * @constructor\n * @extends TAPProducer\n * @see {@link https://testanything.org/tap-version-13-specification.html|Specification}\n */\nfunction TAP13Producer() {\n /**\n * Writes the TAP version to reporter output stream.\n * @override\n */\n this.writeVersion = function () {\n println('TAP version 13');\n };\n\n /**\n * Writes that test failed to reporter output stream, with error formatting.\n * @override\n */\n this.writeFail = function (n, test, err) {\n TAPProducer.prototype.writeFail.call(this, n, test, err);\n var emitYamlBlock = err.message != null || err.stack != null;\n if (emitYamlBlock) {\n println(indent(1) + '---');\n if (err.message) {\n println(indent(2) + 'message: |-');\n println(err.message.replace(/^/gm, indent(3)));\n }\n if (err.stack) {\n println(indent(2) + 'stack: |-');\n println(err.stack.replace(/^/gm, indent(3)));\n }\n println(indent(1) + '...');\n }\n };\n\n function indent(level) {\n return Array(level + 1).join(' ');\n }\n}\n\n/**\n * Inherit from `TAPProducer.prototype`.\n */\ninherits(TAP13Producer, TAPProducer);\n\nTAP.description = 'TAP-compatible output';\n","export default {};\n","'use strict';\n/**\n * @module JSON\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar fs = require('fs');\nvar path = require('path');\nconst createUnsupportedError = require('../errors').createUnsupportedError;\nconst utils = require('../utils');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_TEST_END = constants.EVENT_TEST_END;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\n\n/**\n * Expose `JSON`.\n */\n\nexports = module.exports = JSONReporter;\n\n/**\n * Constructs a new `JSON` reporter instance.\n *\n * @public\n * @class JSON\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction JSONReporter(runner, options = {}) {\n Base.call(this, runner, options);\n\n var self = this;\n var tests = [];\n var pending = [];\n var failures = [];\n var passes = [];\n var output;\n\n if (options.reporterOption && options.reporterOption.output) {\n if (utils.isBrowser()) {\n throw createUnsupportedError('file output not supported in browser');\n }\n output = options.reporterOption.output;\n }\n\n runner.on(EVENT_TEST_END, function (test) {\n tests.push(test);\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n passes.push(test);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test) {\n failures.push(test);\n });\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n pending.push(test);\n });\n\n runner.once(EVENT_RUN_END, function () {\n var obj = {\n stats: self.stats,\n tests: tests.map(clean),\n pending: pending.map(clean),\n failures: failures.map(clean),\n passes: passes.map(clean)\n };\n\n runner.testResults = obj;\n\n var json = JSON.stringify(obj, null, 2);\n if (output) {\n try {\n fs.mkdirSync(path.dirname(output), {recursive: true});\n fs.writeFileSync(output, json);\n } catch (err) {\n console.error(\n `${Base.symbols.err} [mocha] writing output to \"${output}\" failed: ${err.message}\\n`\n );\n process.stdout.write(json);\n }\n } else {\n process.stdout.write(json);\n }\n });\n}\n\n/**\n * Return a plain-object representation of `test`\n * free of cyclic properties etc.\n *\n * @private\n * @param {Object} test\n * @return {Object}\n */\nfunction clean(test) {\n var err = test.err || {};\n if (err instanceof Error) {\n err = errorJSON(err);\n }\n\n return {\n title: test.title,\n fullTitle: test.fullTitle(),\n file: test.file,\n duration: test.duration,\n currentRetry: test.currentRetry(),\n speed: test.speed,\n err: cleanCycles(err)\n };\n}\n\n/**\n * Replaces any circular references inside `obj` with '[object Object]'\n *\n * @private\n * @param {Object} obj\n * @return {Object}\n */\nfunction cleanCycles(obj) {\n var cache = [];\n return JSON.parse(\n JSON.stringify(obj, function (key, value) {\n if (typeof value === 'object' && value !== null) {\n if (cache.indexOf(value) !== -1) {\n // Instead of going in a circle, we'll print [object Object]\n return '' + value;\n }\n cache.push(value);\n }\n\n return value;\n })\n );\n}\n\n/**\n * Transform an Error object into a JSON object.\n *\n * @private\n * @param {Error} err\n * @return {Object}\n */\nfunction errorJSON(err) {\n var res = {};\n Object.getOwnPropertyNames(err).forEach(function (key) {\n res[key] = err[key];\n }, err);\n return res;\n}\n\nJSONReporter.description = 'single JSON object';\n","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","'use strict';\n\n/**\n @module browser/Progress\n*/\n\n/**\n * Expose `Progress`.\n */\n\nmodule.exports = Progress;\n\n/**\n * Initialize a new `Progress` indicator.\n */\nfunction Progress() {\n this.percent = 0;\n this.size(0);\n this.fontSize(11);\n this.font('helvetica, arial, sans-serif');\n}\n\n/**\n * Set progress size to `size`.\n *\n * @public\n * @param {number} size\n * @return {Progress} Progress instance.\n */\nProgress.prototype.size = function (size) {\n this._size = size;\n return this;\n};\n\n/**\n * Set text to `text`.\n *\n * @public\n * @param {string} text\n * @return {Progress} Progress instance.\n */\nProgress.prototype.text = function (text) {\n this._text = text;\n return this;\n};\n\n/**\n * Set font size to `size`.\n *\n * @public\n * @param {number} size\n * @return {Progress} Progress instance.\n */\nProgress.prototype.fontSize = function (size) {\n this._fontSize = size;\n return this;\n};\n\n/**\n * Set font to `family`.\n *\n * @param {string} family\n * @return {Progress} Progress instance.\n */\nProgress.prototype.font = function (family) {\n this._font = family;\n return this;\n};\n\n/**\n * Update percentage to `n`.\n *\n * @param {number} n\n * @return {Progress} Progress instance.\n */\nProgress.prototype.update = function (n) {\n this.percent = n;\n return this;\n};\n\n/**\n * Draw on `ctx`.\n *\n * @param {CanvasRenderingContext2d} ctx\n * @return {Progress} Progress instance.\n */\nProgress.prototype.draw = function (ctx) {\n try {\n var percent = Math.min(this.percent, 100);\n var size = this._size;\n var half = size / 2;\n var x = half;\n var y = half;\n var rad = half - 1;\n var fontSize = this._fontSize;\n\n ctx.font = fontSize + 'px ' + this._font;\n\n var angle = Math.PI * 2 * (percent / 100);\n ctx.clearRect(0, 0, size, size);\n\n // outer circle\n ctx.strokeStyle = '#9f9f9f';\n ctx.beginPath();\n ctx.arc(x, y, rad, 0, angle, false);\n ctx.stroke();\n\n // inner circle\n ctx.strokeStyle = '#eee';\n ctx.beginPath();\n ctx.arc(x, y, rad - 1, 0, angle, true);\n ctx.stroke();\n\n // text\n var text = this._text || (percent | 0) + '%';\n var w = ctx.measureText(text).width;\n\n ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1);\n } catch (ignore) {\n // don't fail if we can't render progress\n }\n return this;\n};\n","'use strict';\n\n/* eslint-env browser */\n/**\n * @module HTML\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\nvar Progress = require('../browser/progress');\nvar escapeRe = require('escape-string-regexp');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN;\nvar EVENT_SUITE_END = constants.EVENT_SUITE_END;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date;\n\n/**\n * Expose `HTML`.\n */\n\nexports = module.exports = HTML;\n\n/**\n * Stats template.\n */\n\nvar statsTemplate =\n '
          ';\n\nvar playIcon = '‣';\n\n/**\n * Constructs a new `HTML` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction HTML(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var stats = this.stats;\n var stat = fragment(statsTemplate);\n var items = stat.getElementsByTagName('li');\n var passes = items[1].getElementsByTagName('em')[0];\n var passesLink = items[1].getElementsByTagName('a')[0];\n var failures = items[2].getElementsByTagName('em')[0];\n var failuresLink = items[2].getElementsByTagName('a')[0];\n var duration = items[3].getElementsByTagName('em')[0];\n var canvas = stat.getElementsByTagName('canvas')[0];\n var report = fragment('
            ');\n var stack = [report];\n var progress;\n var ctx;\n var root = document.getElementById('mocha');\n\n if (canvas.getContext) {\n var ratio = window.devicePixelRatio || 1;\n canvas.style.width = canvas.width;\n canvas.style.height = canvas.height;\n canvas.width *= ratio;\n canvas.height *= ratio;\n ctx = canvas.getContext('2d');\n ctx.scale(ratio, ratio);\n progress = new Progress();\n }\n\n if (!root) {\n return error('#mocha div missing, add it to your document');\n }\n\n // pass toggle\n on(passesLink, 'click', function (evt) {\n evt.preventDefault();\n unhide();\n var name = /pass/.test(report.className) ? '' : ' pass';\n report.className = report.className.replace(/fail|pass/g, '') + name;\n if (report.className.trim()) {\n hideSuitesWithout('test pass');\n }\n });\n\n // failure toggle\n on(failuresLink, 'click', function (evt) {\n evt.preventDefault();\n unhide();\n var name = /fail/.test(report.className) ? '' : ' fail';\n report.className = report.className.replace(/fail|pass/g, '') + name;\n if (report.className.trim()) {\n hideSuitesWithout('test fail');\n }\n });\n\n root.appendChild(stat);\n root.appendChild(report);\n\n if (progress) {\n progress.size(40);\n }\n\n runner.on(EVENT_SUITE_BEGIN, function (suite) {\n if (suite.root) {\n return;\n }\n\n // suite\n var url = self.suiteURL(suite);\n var el = fragment(\n '
          • %s

          • ',\n url,\n escape(suite.title)\n );\n\n // container\n stack[0].appendChild(el);\n stack.unshift(document.createElement('ul'));\n el.appendChild(stack[0]);\n });\n\n runner.on(EVENT_SUITE_END, function (suite) {\n if (suite.root) {\n updateStats();\n return;\n }\n stack.shift();\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n var url = self.testURL(test);\n var markup =\n '
          • %e%ems ' +\n '' +\n playIcon +\n '

          • ';\n var el = fragment(markup, test.speed, test.title, test.duration, url);\n self.addCodeToggle(el, test.body);\n appendToStack(el);\n updateStats();\n });\n\n runner.on(EVENT_TEST_FAIL, function (test) {\n var el = fragment(\n '
          • %e ' +\n playIcon +\n '

          • ',\n test.title,\n self.testURL(test)\n );\n var stackString; // Note: Includes leading newline\n var message = test.err.toString();\n\n // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we\n // check for the result of the stringifying.\n if (message === '[object Error]') {\n message = test.err.message;\n }\n\n if (test.err.stack) {\n var indexOfMessage = test.err.stack.indexOf(test.err.message);\n if (indexOfMessage === -1) {\n stackString = test.err.stack;\n } else {\n stackString = test.err.stack.substr(\n test.err.message.length + indexOfMessage\n );\n }\n } else if (test.err.sourceURL && test.err.line !== undefined) {\n // Safari doesn't give you a stack. Let's at least provide a source line.\n stackString = '\\n(' + test.err.sourceURL + ':' + test.err.line + ')';\n }\n\n stackString = stackString || '';\n\n if (test.err.htmlMessage && stackString) {\n el.appendChild(\n fragment(\n '
            %s\\n
            %e
            ',\n test.err.htmlMessage,\n stackString\n )\n );\n } else if (test.err.htmlMessage) {\n el.appendChild(\n fragment('
            %s
            ', test.err.htmlMessage)\n );\n } else {\n el.appendChild(\n fragment('
            %e%e
            ', message, stackString)\n );\n }\n\n self.addCodeToggle(el, test.body);\n appendToStack(el);\n updateStats();\n });\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n var el = fragment(\n '
          • %e

          • ',\n test.title\n );\n appendToStack(el);\n updateStats();\n });\n\n function appendToStack(el) {\n // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.\n if (stack[0]) {\n stack[0].appendChild(el);\n }\n }\n\n function updateStats() {\n // TODO: add to stats\n var percent = ((stats.tests / runner.total) * 100) | 0;\n if (progress) {\n progress.update(percent).draw(ctx);\n }\n\n // update stats\n var ms = new Date() - stats.start;\n text(passes, stats.passes);\n text(failures, stats.failures);\n text(duration, (ms / 1000).toFixed(2));\n }\n}\n\n/**\n * Makes a URL, preserving querystring (\"search\") parameters.\n *\n * @param {string} s\n * @return {string} A new URL.\n */\nfunction makeUrl(s) {\n var search = window.location.search;\n\n // Remove previous grep query parameter if present\n if (search) {\n search = search.replace(/[?&]grep=[^&\\s]*/g, '').replace(/^&/, '?');\n }\n\n return (\n window.location.pathname +\n (search ? search + '&' : '?') +\n 'grep=' +\n encodeURIComponent(escapeRe(s))\n );\n}\n\n/**\n * Provide suite URL.\n *\n * @param {Object} [suite]\n */\nHTML.prototype.suiteURL = function (suite) {\n return makeUrl(suite.fullTitle());\n};\n\n/**\n * Provide test URL.\n *\n * @param {Object} [test]\n */\nHTML.prototype.testURL = function (test) {\n return makeUrl(test.fullTitle());\n};\n\n/**\n * Adds code toggle functionality for the provided test's list element.\n *\n * @param {HTMLLIElement} el\n * @param {string} contents\n */\nHTML.prototype.addCodeToggle = function (el, contents) {\n var h2 = el.getElementsByTagName('h2')[0];\n\n on(h2, 'click', function () {\n pre.style.display = pre.style.display === 'none' ? 'block' : 'none';\n });\n\n var pre = fragment('
            %e
            ', utils.clean(contents));\n el.appendChild(pre);\n pre.style.display = 'none';\n};\n\n/**\n * Display error `msg`.\n *\n * @param {string} msg\n */\nfunction error(msg) {\n document.body.appendChild(fragment('
            %s
            ', msg));\n}\n\n/**\n * Return a DOM fragment from `html`.\n *\n * @param {string} html\n */\nfunction fragment(html) {\n var args = arguments;\n var div = document.createElement('div');\n var i = 1;\n\n div.innerHTML = html.replace(/%([se])/g, function (_, type) {\n switch (type) {\n case 's':\n return String(args[i++]);\n case 'e':\n return escape(args[i++]);\n // no default\n }\n });\n\n return div.firstChild;\n}\n\n/**\n * Check for suites that do not have elements\n * with `classname`, and hide them.\n *\n * @param {text} classname\n */\nfunction hideSuitesWithout(classname) {\n var suites = document.getElementsByClassName('suite');\n for (var i = 0; i < suites.length; i++) {\n var els = suites[i].getElementsByClassName(classname);\n if (!els.length) {\n suites[i].className += ' hidden';\n }\n }\n}\n\n/**\n * Unhide .hidden suites.\n */\nfunction unhide() {\n var els = document.getElementsByClassName('suite hidden');\n while (els.length > 0) {\n els[0].className = els[0].className.replace('suite hidden', 'suite');\n }\n}\n\n/**\n * Set an element's text contents.\n *\n * @param {HTMLElement} el\n * @param {string} contents\n */\nfunction text(el, contents) {\n if (el.textContent) {\n el.textContent = contents;\n } else {\n el.innerText = contents;\n }\n}\n\n/**\n * Listen on `event` with callback `fn`.\n */\nfunction on(el, event, fn) {\n if (el.addEventListener) {\n el.addEventListener(event, fn, false);\n } else {\n el.attachEvent('on' + event, fn);\n }\n}\n\nHTML.browserOnly = true;\n","'use strict';\n/**\n * @module List\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar constants = require('../runner').constants;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_BEGIN = constants.EVENT_TEST_BEGIN;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar color = Base.color;\nvar cursor = Base.cursor;\n\n/**\n * Expose `List`.\n */\n\nexports = module.exports = List;\n\n/**\n * Constructs a new `List` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction List(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var n = 0;\n\n runner.on(EVENT_RUN_BEGIN, function () {\n Base.consoleLog();\n });\n\n runner.on(EVENT_TEST_BEGIN, function (test) {\n process.stdout.write(color('pass', ' ' + test.fullTitle() + ': '));\n });\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n var fmt = color('checkmark', ' -') + color('pending', ' %s');\n Base.consoleLog(fmt, test.fullTitle());\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n var fmt =\n color('checkmark', ' ' + Base.symbols.ok) +\n color('pass', ' %s: ') +\n color(test.speed, '%dms');\n cursor.CR();\n Base.consoleLog(fmt, test.fullTitle(), test.duration);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test) {\n cursor.CR();\n Base.consoleLog(color('fail', ' %d) %s'), ++n, test.fullTitle());\n });\n\n runner.once(EVENT_RUN_END, self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(List, Base);\n\nList.description = 'like \"spec\" reporter but flat';\n","'use strict';\n/**\n * @module Min\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar constants = require('../runner').constants;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\n\n/**\n * Expose `Min`.\n */\n\nexports = module.exports = Min;\n\n/**\n * Constructs a new `Min` reporter instance.\n *\n * @description\n * This minimal test reporter is best used with '--watch'.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Min(runner, options) {\n Base.call(this, runner, options);\n\n runner.on(EVENT_RUN_BEGIN, function () {\n // clear screen\n process.stdout.write('\\u001b[2J');\n // set cursor position\n process.stdout.write('\\u001b[1;3H');\n });\n\n runner.once(EVENT_RUN_END, this.epilogue.bind(this));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Min, Base);\n\nMin.description = 'essentially just a summary';\n","'use strict';\n/**\n * @module Spec\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar constants = require('../runner').constants;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN;\nvar EVENT_SUITE_END = constants.EVENT_SUITE_END;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\n\n/**\n * Expose `Spec`.\n */\n\nexports = module.exports = Spec;\n\n/**\n * Constructs a new `Spec` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Spec(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var indents = 0;\n var n = 0;\n\n function indent() {\n return Array(indents).join(' ');\n }\n\n runner.on(EVENT_RUN_BEGIN, function () {\n Base.consoleLog();\n });\n\n runner.on(EVENT_SUITE_BEGIN, function (suite) {\n ++indents;\n Base.consoleLog(color('suite', '%s%s'), indent(), suite.title);\n });\n\n runner.on(EVENT_SUITE_END, function () {\n --indents;\n if (indents === 1) {\n Base.consoleLog();\n }\n });\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n var fmt = indent() + color('pending', ' - %s');\n Base.consoleLog(fmt, test.title);\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n var fmt;\n if (test.speed === 'fast') {\n fmt =\n indent() +\n color('checkmark', ' ' + Base.symbols.ok) +\n color('pass', ' %s');\n Base.consoleLog(fmt, test.title);\n } else {\n fmt =\n indent() +\n color('checkmark', ' ' + Base.symbols.ok) +\n color('pass', ' %s') +\n color(test.speed, ' (%dms)');\n Base.consoleLog(fmt, test.title, test.duration);\n }\n });\n\n runner.on(EVENT_TEST_FAIL, function (test) {\n Base.consoleLog(indent() + color('fail', ' %d) %s'), ++n, test.title);\n });\n\n runner.once(EVENT_RUN_END, self.epilogue.bind(self));\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Spec, Base);\n\nSpec.description = 'hierarchical & verbose [default]';\n","'use strict';\n/**\n * @module Nyan\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar constants = require('../runner').constants;\nvar inherits = require('../utils').inherits;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\n\n/**\n * Expose `Dot`.\n */\n\nexports = module.exports = NyanCat;\n\n/**\n * Constructs a new `Nyan` reporter instance.\n *\n * @public\n * @class Nyan\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction NyanCat(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var width = (Base.window.width * 0.75) | 0;\n var nyanCatWidth = (this.nyanCatWidth = 11);\n\n this.colorIndex = 0;\n this.numberOfLines = 4;\n this.rainbowColors = self.generateColors();\n this.scoreboardWidth = 5;\n this.tick = 0;\n this.trajectories = [[], [], [], []];\n this.trajectoryWidthMax = width - nyanCatWidth;\n\n runner.on(EVENT_RUN_BEGIN, function () {\n Base.cursor.hide();\n self.draw();\n });\n\n runner.on(EVENT_TEST_PENDING, function () {\n self.draw();\n });\n\n runner.on(EVENT_TEST_PASS, function () {\n self.draw();\n });\n\n runner.on(EVENT_TEST_FAIL, function () {\n self.draw();\n });\n\n runner.once(EVENT_RUN_END, function () {\n Base.cursor.show();\n for (var i = 0; i < self.numberOfLines; i++) {\n write('\\n');\n }\n self.epilogue();\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(NyanCat, Base);\n\n/**\n * Draw the nyan cat\n *\n * @private\n */\n\nNyanCat.prototype.draw = function () {\n this.appendRainbow();\n this.drawScoreboard();\n this.drawRainbow();\n this.drawNyanCat();\n this.tick = !this.tick;\n};\n\n/**\n * Draw the \"scoreboard\" showing the number\n * of passes, failures and pending tests.\n *\n * @private\n */\n\nNyanCat.prototype.drawScoreboard = function () {\n var stats = this.stats;\n\n function draw(type, n) {\n write(' ');\n write(Base.color(type, n));\n write('\\n');\n }\n\n draw('green', stats.passes);\n draw('fail', stats.failures);\n draw('pending', stats.pending);\n write('\\n');\n\n this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Append the rainbow.\n *\n * @private\n */\n\nNyanCat.prototype.appendRainbow = function () {\n var segment = this.tick ? '_' : '-';\n var rainbowified = this.rainbowify(segment);\n\n for (var index = 0; index < this.numberOfLines; index++) {\n var trajectory = this.trajectories[index];\n if (trajectory.length >= this.trajectoryWidthMax) {\n trajectory.shift();\n }\n trajectory.push(rainbowified);\n }\n};\n\n/**\n * Draw the rainbow.\n *\n * @private\n */\n\nNyanCat.prototype.drawRainbow = function () {\n var self = this;\n\n this.trajectories.forEach(function (line) {\n write('\\u001b[' + self.scoreboardWidth + 'C');\n write(line.join(''));\n write('\\n');\n });\n\n this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw the nyan cat\n *\n * @private\n */\nNyanCat.prototype.drawNyanCat = function () {\n var self = this;\n var startWidth = this.scoreboardWidth + this.trajectories[0].length;\n var dist = '\\u001b[' + startWidth + 'C';\n var padding = '';\n\n write(dist);\n write('_,------,');\n write('\\n');\n\n write(dist);\n padding = self.tick ? ' ' : ' ';\n write('_|' + padding + '/\\\\_/\\\\ ');\n write('\\n');\n\n write(dist);\n padding = self.tick ? '_' : '__';\n var tail = self.tick ? '~' : '^';\n write(tail + '|' + padding + this.face() + ' ');\n write('\\n');\n\n write(dist);\n padding = self.tick ? ' ' : ' ';\n write(padding + '\"\" \"\" ');\n write('\\n');\n\n this.cursorUp(this.numberOfLines);\n};\n\n/**\n * Draw nyan cat face.\n *\n * @private\n * @return {string}\n */\n\nNyanCat.prototype.face = function () {\n var stats = this.stats;\n if (stats.failures) {\n return '( x .x)';\n } else if (stats.pending) {\n return '( o .o)';\n } else if (stats.passes) {\n return '( ^ .^)';\n }\n return '( - .-)';\n};\n\n/**\n * Move cursor up `n`.\n *\n * @private\n * @param {number} n\n */\n\nNyanCat.prototype.cursorUp = function (n) {\n write('\\u001b[' + n + 'A');\n};\n\n/**\n * Move cursor down `n`.\n *\n * @private\n * @param {number} n\n */\n\nNyanCat.prototype.cursorDown = function (n) {\n write('\\u001b[' + n + 'B');\n};\n\n/**\n * Generate rainbow colors.\n *\n * @private\n * @return {Array}\n */\nNyanCat.prototype.generateColors = function () {\n var colors = [];\n\n for (var i = 0; i < 6 * 7; i++) {\n var pi3 = Math.floor(Math.PI / 3);\n var n = i * (1.0 / 6);\n var r = Math.floor(3 * Math.sin(n) + 3);\n var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);\n var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);\n colors.push(36 * r + 6 * g + b + 16);\n }\n\n return colors;\n};\n\n/**\n * Apply rainbow to the given `str`.\n *\n * @private\n * @param {string} str\n * @return {string}\n */\nNyanCat.prototype.rainbowify = function (str) {\n if (!Base.useColors) {\n return str;\n }\n var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];\n this.colorIndex += 1;\n return '\\u001b[38;5;' + color + 'm' + str + '\\u001b[0m';\n};\n\n/**\n * Stdout helper.\n *\n * @param {string} string A message to write to stdout.\n */\nfunction write(string) {\n process.stdout.write(string);\n}\n\nNyanCat.description = '\"nyan cat\"';\n","'use strict';\n/**\n * @module XUnit\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar utils = require('../utils');\nvar fs = require('fs');\nvar path = require('path');\nvar errors = require('../errors');\nvar createUnsupportedError = errors.createUnsupportedError;\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar STATE_FAILED = require('../runnable').constants.STATE_FAILED;\nvar inherits = utils.inherits;\nvar escape = utils.escape;\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\nvar Date = global.Date;\n\n/**\n * Expose `XUnit`.\n */\n\nexports = module.exports = XUnit;\n\n/**\n * Constructs a new `XUnit` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction XUnit(runner, options) {\n Base.call(this, runner, options);\n\n var stats = this.stats;\n var tests = [];\n var self = this;\n\n // the name of the test suite, as it will appear in the resulting XML file\n var suiteName;\n\n // the default name of the test suite if none is provided\n var DEFAULT_SUITE_NAME = 'Mocha Tests';\n\n if (options && options.reporterOptions) {\n if (options.reporterOptions.output) {\n if (!fs.createWriteStream) {\n throw createUnsupportedError('file output not supported in browser');\n }\n\n fs.mkdirSync(path.dirname(options.reporterOptions.output), {\n recursive: true\n });\n self.fileStream = fs.createWriteStream(options.reporterOptions.output);\n }\n\n // get the suite name from the reporter options (if provided)\n suiteName = options.reporterOptions.suiteName;\n }\n\n // fall back to the default suite name\n suiteName = suiteName || DEFAULT_SUITE_NAME;\n\n runner.on(EVENT_TEST_PENDING, function (test) {\n tests.push(test);\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n tests.push(test);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test) {\n tests.push(test);\n });\n\n runner.once(EVENT_RUN_END, function () {\n self.write(\n tag(\n 'testsuite',\n {\n name: suiteName,\n tests: stats.tests,\n failures: 0,\n errors: stats.failures,\n skipped: stats.tests - stats.failures - stats.passes,\n timestamp: new Date().toUTCString(),\n time: stats.duration / 1000 || 0\n },\n false\n )\n );\n\n tests.forEach(function (t) {\n self.test(t);\n });\n\n self.write('');\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(XUnit, Base);\n\n/**\n * Override done to close the stream (if it's a file).\n *\n * @param failures\n * @param {Function} fn\n */\nXUnit.prototype.done = function (failures, fn) {\n if (this.fileStream) {\n this.fileStream.end(function () {\n fn(failures);\n });\n } else {\n fn(failures);\n }\n};\n\n/**\n * Write out the given line.\n *\n * @param {string} line\n */\nXUnit.prototype.write = function (line) {\n if (this.fileStream) {\n this.fileStream.write(line + '\\n');\n } else if (typeof process === 'object' && process.stdout) {\n process.stdout.write(line + '\\n');\n } else {\n Base.consoleLog(line);\n }\n};\n\n/**\n * Output tag for the given `test.`\n *\n * @param {Test} test\n */\nXUnit.prototype.test = function (test) {\n Base.useColors = false;\n\n var attrs = {\n classname: test.parent.fullTitle(),\n name: test.title,\n time: test.duration / 1000 || 0\n };\n\n if (test.state === STATE_FAILED) {\n var err = test.err;\n var diff =\n !Base.hideDiff && Base.showDiff(err)\n ? '\\n' + Base.generateDiff(err.actual, err.expected)\n : '';\n this.write(\n tag(\n 'testcase',\n attrs,\n false,\n tag(\n 'failure',\n {},\n false,\n escape(err.message) + escape(diff) + '\\n' + escape(err.stack)\n )\n )\n );\n } else if (test.isPending()) {\n this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));\n } else {\n this.write(tag('testcase', attrs, true));\n }\n};\n\n/**\n * HTML tag helper.\n *\n * @param name\n * @param attrs\n * @param close\n * @param content\n * @return {string}\n */\nfunction tag(name, attrs, close, content) {\n var end = close ? '/>' : '>';\n var pairs = [];\n var tag;\n\n for (var key in attrs) {\n if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n pairs.push(key + '=\"' + escape(attrs[key]) + '\"');\n }\n }\n\n tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;\n if (content) {\n tag += content + '' + '\\n';\n buf += title(suite.title) + '\\n';\n });\n\n runner.on(EVENT_SUITE_END, function () {\n --level;\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n var code = utils.clean(test.body);\n buf += test.title + '.\\n';\n buf += '\\n```js\\n';\n buf += code + '\\n';\n buf += '```\\n\\n';\n });\n\n runner.once(EVENT_RUN_END, function () {\n process.stdout.write('# TOC\\n');\n process.stdout.write(generateTOC(runner.suite));\n process.stdout.write(buf);\n });\n}\n\nMarkdown.description = 'GitHub Flavored Markdown';\n","'use strict';\n/**\n * @module Progress\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar constants = require('../runner').constants;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_TEST_END = constants.EVENT_TEST_END;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar inherits = require('../utils').inherits;\nvar color = Base.color;\nvar cursor = Base.cursor;\n\n/**\n * Expose `Progress`.\n */\n\nexports = module.exports = Progress;\n\n/**\n * General progress bar color.\n */\n\nBase.colors.progress = 90;\n\n/**\n * Constructs a new `Progress` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Progress(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var width = (Base.window.width * 0.5) | 0;\n var total = runner.total;\n var complete = 0;\n var lastN = -1;\n\n // default chars\n options = options || {};\n var reporterOptions = options.reporterOptions || {};\n\n options.open = reporterOptions.open || '[';\n options.complete = reporterOptions.complete || '▬';\n options.incomplete = reporterOptions.incomplete || Base.symbols.dot;\n options.close = reporterOptions.close || ']';\n options.verbose = reporterOptions.verbose || false;\n\n // tests started\n runner.on(EVENT_RUN_BEGIN, function () {\n process.stdout.write('\\n');\n cursor.hide();\n });\n\n // tests complete\n runner.on(EVENT_TEST_END, function () {\n complete++;\n\n var percent = complete / total;\n var n = (width * percent) | 0;\n var i = width - n;\n\n if (n === lastN && !options.verbose) {\n // Don't re-render the line if it hasn't changed\n return;\n }\n lastN = n;\n\n cursor.CR();\n process.stdout.write('\\u001b[J');\n process.stdout.write(color('progress', ' ' + options.open));\n process.stdout.write(Array(n).join(options.complete));\n process.stdout.write(Array(i).join(options.incomplete));\n process.stdout.write(color('progress', options.close));\n if (options.verbose) {\n process.stdout.write(color('progress', ' ' + complete + ' of ' + total));\n }\n });\n\n // tests are complete, output some stats\n // and the failures if any\n runner.once(EVENT_RUN_END, function () {\n cursor.show();\n process.stdout.write('\\n');\n self.epilogue();\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Progress, Base);\n\nProgress.description = 'a progress bar';\n","'use strict';\n/**\n * @module Landing\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar inherits = require('../utils').inherits;\nvar constants = require('../runner').constants;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_END = constants.EVENT_TEST_END;\nvar STATE_FAILED = require('../runnable').constants.STATE_FAILED;\n\nvar cursor = Base.cursor;\nvar color = Base.color;\n\n/**\n * Expose `Landing`.\n */\n\nexports = module.exports = Landing;\n\n/**\n * Airplane color.\n */\n\nBase.colors.plane = 0;\n\n/**\n * Airplane crash color.\n */\n\nBase.colors['plane crash'] = 31;\n\n/**\n * Runway color.\n */\n\nBase.colors.runway = 90;\n\n/**\n * Constructs a new `Landing` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction Landing(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var width = (Base.window.width * 0.75) | 0;\n var stream = process.stdout;\n\n var plane = color('plane', '✈');\n var crashed = -1;\n var n = 0;\n var total = 0;\n\n function runway() {\n var buf = Array(width).join('-');\n return ' ' + color('runway', buf);\n }\n\n runner.on(EVENT_RUN_BEGIN, function () {\n stream.write('\\n\\n\\n ');\n cursor.hide();\n });\n\n runner.on(EVENT_TEST_END, function (test) {\n // check if the plane crashed\n var col = crashed === -1 ? ((width * ++n) / ++total) | 0 : crashed;\n // show the crash\n if (test.state === STATE_FAILED) {\n plane = color('plane crash', '✈');\n crashed = col;\n }\n\n // render landing strip\n stream.write('\\u001b[' + (width + 1) + 'D\\u001b[2A');\n stream.write(runway());\n stream.write('\\n ');\n stream.write(color('runway', Array(col).join('⋅')));\n stream.write(plane);\n stream.write(color('runway', Array(width - col).join('⋅') + '\\n'));\n stream.write(runway());\n stream.write('\\u001b[0m');\n });\n\n runner.once(EVENT_RUN_END, function () {\n cursor.show();\n process.stdout.write('\\n');\n self.epilogue();\n });\n\n // if cursor is hidden when we ctrl-C, then it will remain hidden unless...\n process.once('SIGINT', function () {\n cursor.show();\n process.nextTick(function () {\n process.kill(process.pid, 'SIGINT');\n });\n });\n}\n\n/**\n * Inherit from `Base.prototype`.\n */\ninherits(Landing, Base);\n\nLanding.description = 'Unicode landing strip';\n","'use strict';\n/**\n * @module JSONStream\n */\n/**\n * Module dependencies.\n */\n\nvar Base = require('./base');\nvar constants = require('../runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\n\n/**\n * Expose `JSONStream`.\n */\n\nexports = module.exports = JSONStream;\n\n/**\n * Constructs a new `JSONStream` reporter instance.\n *\n * @public\n * @class\n * @memberof Mocha.reporters\n * @extends Mocha.reporters.Base\n * @param {Runner} runner - Instance triggers reporter actions.\n * @param {Object} [options] - runner options\n */\nfunction JSONStream(runner, options) {\n Base.call(this, runner, options);\n\n var self = this;\n var total = runner.total;\n\n runner.once(EVENT_RUN_BEGIN, function () {\n writeEvent(['start', {total: total}]);\n });\n\n runner.on(EVENT_TEST_PASS, function (test) {\n writeEvent(['pass', clean(test)]);\n });\n\n runner.on(EVENT_TEST_FAIL, function (test, err) {\n test = clean(test);\n test.err = err.message;\n test.stack = err.stack || null;\n writeEvent(['fail', test]);\n });\n\n runner.once(EVENT_RUN_END, function () {\n writeEvent(['end', self.stats]);\n });\n}\n\n/**\n * Mocha event to be written to the output stream.\n * @typedef {Array} JSONStream~MochaEvent\n */\n\n/**\n * Writes Mocha event to reporter output stream.\n *\n * @private\n * @param {JSONStream~MochaEvent} event - Mocha event to be output.\n */\nfunction writeEvent(event) {\n process.stdout.write(JSON.stringify(event) + '\\n');\n}\n\n/**\n * Returns an object literal representation of `test`\n * free of cyclic properties, etc.\n *\n * @private\n * @param {Test} test - Instance used as data source.\n * @return {Object} object containing pared-down test instance data\n */\nfunction clean(test) {\n return {\n title: test.title,\n fullTitle: test.fullTitle(),\n file: test.file,\n duration: test.duration,\n currentRetry: test.currentRetry(),\n speed: test.speed\n };\n}\n\nJSONStream.description = 'newline delimited JSON events';\n","'use strict';\n\n// Alias exports to a their normalized format Mocha#reporter to prevent a need\n// for dynamic (try/catch) requires, which Browserify doesn't handle.\nexports.Base = exports.base = require('./base');\nexports.Dot = exports.dot = require('./dot');\nexports.Doc = exports.doc = require('./doc');\nexports.TAP = exports.tap = require('./tap');\nexports.JSON = exports.json = require('./json');\nexports.HTML = exports.html = require('./html');\nexports.List = exports.list = require('./list');\nexports.Min = exports.min = require('./min');\nexports.Spec = exports.spec = require('./spec');\nexports.Nyan = exports.nyan = require('./nyan');\nexports.XUnit = exports.xunit = require('./xunit');\nexports.Markdown = exports.markdown = require('./markdown');\nexports.Progress = exports.progress = require('./progress');\nexports.Landing = exports.landing = require('./landing');\nexports.JSONStream = exports['json-stream'] = require('./json-stream');\n","'use strict';\n\n/**\n * Web Notifications module.\n * @module Growl\n */\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar EVENT_RUN_END = require('../runner').constants.EVENT_RUN_END;\nvar isBrowser = require('../utils').isBrowser;\n\n/**\n * Checks if browser notification support exists.\n *\n * @public\n * @see {@link https://caniuse.com/#feat=notifications|Browser support (notifications)}\n * @see {@link https://caniuse.com/#feat=promises|Browser support (promises)}\n * @see {@link Mocha#growl}\n * @see {@link Mocha#isGrowlCapable}\n * @return {boolean} whether browser notification support exists\n */\nexports.isCapable = function () {\n var hasNotificationSupport = 'Notification' in window;\n var hasPromiseSupport = typeof Promise === 'function';\n return isBrowser() && hasNotificationSupport && hasPromiseSupport;\n};\n\n/**\n * Implements browser notifications as a pseudo-reporter.\n *\n * @public\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/notification|Notification API}\n * @see {@link https://developers.google.com/web/fundamentals/push-notifications/display-a-notification|Displaying a Notification}\n * @see {@link Growl#isPermitted}\n * @see {@link Mocha#_growl}\n * @param {Runner} runner - Runner instance.\n */\nexports.notify = function (runner) {\n var promise = isPermitted();\n\n /**\n * Attempt notification.\n */\n var sendNotification = function () {\n // If user hasn't responded yet... \"No notification for you!\" (Seinfeld)\n Promise.race([promise, Promise.resolve(undefined)])\n .then(canNotify)\n .then(function () {\n display(runner);\n })\n .catch(notPermitted);\n };\n\n runner.once(EVENT_RUN_END, sendNotification);\n};\n\n/**\n * Checks if browser notification is permitted by user.\n *\n * @private\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission|Notification.permission}\n * @see {@link Mocha#growl}\n * @see {@link Mocha#isGrowlPermitted}\n * @returns {Promise} promise determining if browser notification\n * permissible when fulfilled.\n */\nfunction isPermitted() {\n var permitted = {\n granted: function allow() {\n return Promise.resolve(true);\n },\n denied: function deny() {\n return Promise.resolve(false);\n },\n default: function ask() {\n return Notification.requestPermission().then(function (permission) {\n return permission === 'granted';\n });\n }\n };\n\n return permitted[Notification.permission]();\n}\n\n/**\n * @summary\n * Determines if notification should proceed.\n *\n * @description\n * Notification shall not proceed unless `value` is true.\n *\n * `value` will equal one of:\n *
              \n *
            • true (from `isPermitted`)
            • \n *
            • false (from `isPermitted`)
            • \n *
            • undefined (from `Promise.race`)
            • \n *
            \n *\n * @private\n * @param {boolean|undefined} value - Determines if notification permissible.\n * @returns {Promise} Notification can proceed\n */\nfunction canNotify(value) {\n if (!value) {\n var why = value === false ? 'blocked' : 'unacknowledged';\n var reason = 'not permitted by user (' + why + ')';\n return Promise.reject(new Error(reason));\n }\n return Promise.resolve();\n}\n\n/**\n * Displays the notification.\n *\n * @private\n * @param {Runner} runner - Runner instance.\n */\nfunction display(runner) {\n var stats = runner.stats;\n var symbol = {\n cross: '\\u274C',\n tick: '\\u2705'\n };\n var logo = require('../../package.json').notifyLogo;\n var _message;\n var message;\n var title;\n\n if (stats.failures) {\n _message = stats.failures + ' of ' + stats.tests + ' tests failed';\n message = symbol.cross + ' ' + _message;\n title = 'Failed';\n } else {\n _message = stats.passes + ' tests passed in ' + stats.duration + 'ms';\n message = symbol.tick + ' ' + _message;\n title = 'Passed';\n }\n\n // Send notification\n var options = {\n badge: logo,\n body: message,\n dir: 'ltr',\n icon: logo,\n lang: 'en-US',\n name: 'mocha',\n requireInteraction: false,\n timestamp: Date.now()\n };\n var notification = new Notification(title, options);\n\n // Autoclose after brief delay (makes various browsers act same)\n var FORCE_DURATION = 4000;\n setTimeout(notification.close.bind(notification), FORCE_DURATION);\n}\n\n/**\n * As notifications are tangential to our purpose, just log the error.\n *\n * @private\n * @param {Error} err - Why notification didn't happen.\n */\nfunction notPermitted(err) {\n console.error('notification error:', err.message);\n}\n","'use strict';\n\n/**\n * Provides a factory function for a {@link StatsCollector} object.\n * @module\n */\n\nvar constants = require('./runner').constants;\nvar EVENT_TEST_PASS = constants.EVENT_TEST_PASS;\nvar EVENT_TEST_FAIL = constants.EVENT_TEST_FAIL;\nvar EVENT_SUITE_BEGIN = constants.EVENT_SUITE_BEGIN;\nvar EVENT_RUN_BEGIN = constants.EVENT_RUN_BEGIN;\nvar EVENT_TEST_PENDING = constants.EVENT_TEST_PENDING;\nvar EVENT_RUN_END = constants.EVENT_RUN_END;\nvar EVENT_TEST_END = constants.EVENT_TEST_END;\n\n/**\n * Test statistics collector.\n *\n * @public\n * @typedef {Object} StatsCollector\n * @property {number} suites - integer count of suites run.\n * @property {number} tests - integer count of tests run.\n * @property {number} passes - integer count of passing tests.\n * @property {number} pending - integer count of pending tests.\n * @property {number} failures - integer count of failed tests.\n * @property {Date} start - time when testing began.\n * @property {Date} end - time when testing concluded.\n * @property {number} duration - number of msecs that testing took.\n */\n\nvar Date = global.Date;\n\n/**\n * Provides stats such as test duration, number of tests passed / failed etc., by listening for events emitted by `runner`.\n *\n * @private\n * @param {Runner} runner - Runner instance\n * @throws {TypeError} If falsy `runner`\n */\nfunction createStatsCollector(runner) {\n /**\n * @type StatsCollector\n */\n var stats = {\n suites: 0,\n tests: 0,\n passes: 0,\n pending: 0,\n failures: 0\n };\n\n if (!runner) {\n throw new TypeError('Missing runner argument');\n }\n\n runner.stats = stats;\n\n runner.once(EVENT_RUN_BEGIN, function () {\n stats.start = new Date();\n });\n runner.on(EVENT_SUITE_BEGIN, function (suite) {\n suite.root || stats.suites++;\n });\n runner.on(EVENT_TEST_PASS, function () {\n stats.passes++;\n });\n runner.on(EVENT_TEST_FAIL, function () {\n stats.failures++;\n });\n runner.on(EVENT_TEST_PENDING, function () {\n stats.pending++;\n });\n runner.on(EVENT_TEST_END, function () {\n stats.tests++;\n });\n runner.once(EVENT_RUN_END, function () {\n stats.end = new Date();\n stats.duration = stats.end - stats.start;\n });\n}\n\nmodule.exports = createStatsCollector;\n","'use strict';\nvar Runnable = require('./runnable');\nvar utils = require('./utils');\nvar errors = require('./errors');\nvar createInvalidArgumentTypeError = errors.createInvalidArgumentTypeError;\nvar isString = utils.isString;\n\nconst {MOCHA_ID_PROP_NAME} = utils.constants;\n\nmodule.exports = Test;\n\n/**\n * Initialize a new `Test` with the given `title` and callback `fn`.\n *\n * @public\n * @class\n * @extends Runnable\n * @param {String} title - Test title (required)\n * @param {Function} [fn] - Test callback. If omitted, the Test is considered \"pending\"\n */\nfunction Test(title, fn) {\n if (!isString(title)) {\n throw createInvalidArgumentTypeError(\n 'Test argument \"title\" should be a string. Received type \"' +\n typeof title +\n '\"',\n 'title',\n 'string'\n );\n }\n this.type = 'test';\n Runnable.call(this, title, fn);\n this.reset();\n}\n\n/**\n * Inherit from `Runnable.prototype`.\n */\nutils.inherits(Test, Runnable);\n\n/**\n * Resets the state initially or for a next run.\n */\nTest.prototype.reset = function () {\n Runnable.prototype.reset.call(this);\n this.pending = !this.fn;\n delete this.state;\n};\n\n/**\n * Set or get retried test\n *\n * @private\n */\nTest.prototype.retriedTest = function (n) {\n if (!arguments.length) {\n return this._retriedTest;\n }\n this._retriedTest = n;\n};\n\n/**\n * Add test to the list of tests marked `only`.\n *\n * @private\n */\nTest.prototype.markOnly = function () {\n this.parent.appendOnlyTest(this);\n};\n\nTest.prototype.clone = function () {\n var test = new Test(this.title, this.fn);\n test.timeout(this.timeout());\n test.slow(this.slow());\n test.retries(this.retries());\n test.currentRetry(this.currentRetry());\n test.retriedTest(this.retriedTest() || this);\n test.globals(this.globals());\n test.parent = this.parent;\n test.file = this.file;\n test.ctx = this.ctx;\n return test;\n};\n\n/**\n * Returns an minimal object suitable for transmission over IPC.\n * Functions are represented by keys beginning with `$$`.\n * @private\n * @returns {Object}\n */\nTest.prototype.serialize = function serialize() {\n return {\n $$currentRetry: this._currentRetry,\n $$fullTitle: this.fullTitle(),\n $$isPending: Boolean(this.pending),\n $$retriedTest: this._retriedTest || null,\n $$slow: this._slow,\n $$titlePath: this.titlePath(),\n body: this.body,\n duration: this.duration,\n err: this.err,\n parent: {\n $$fullTitle: this.parent.fullTitle(),\n [MOCHA_ID_PROP_NAME]: this.parent.id\n },\n speed: this.speed,\n state: this.state,\n title: this.title,\n type: this.type,\n file: this.file,\n [MOCHA_ID_PROP_NAME]: this.id\n };\n};\n","'use strict';\n\n/**\n @module interfaces/common\n*/\n\nvar Suite = require('../suite');\nvar errors = require('../errors');\nvar createMissingArgumentError = errors.createMissingArgumentError;\nvar createUnsupportedError = errors.createUnsupportedError;\nvar createForbiddenExclusivityError = errors.createForbiddenExclusivityError;\n\n/**\n * Functions common to more than one interface.\n *\n * @private\n * @param {Suite[]} suites\n * @param {Context} context\n * @param {Mocha} mocha\n * @return {Object} An object containing common functions.\n */\nmodule.exports = function (suites, context, mocha) {\n /**\n * Check if the suite should be tested.\n *\n * @private\n * @param {Suite} suite - suite to check\n * @returns {boolean}\n */\n function shouldBeTested(suite) {\n return (\n !mocha.options.grep ||\n (mocha.options.grep &&\n mocha.options.grep.test(suite.fullTitle()) &&\n !mocha.options.invert)\n );\n }\n\n return {\n /**\n * This is only present if flag --delay is passed into Mocha. It triggers\n * root suite execution.\n *\n * @param {Suite} suite The root suite.\n * @return {Function} A function which runs the root suite\n */\n runWithSuite: function runWithSuite(suite) {\n return function run() {\n suite.run();\n };\n },\n\n /**\n * Execute before running tests.\n *\n * @param {string} name\n * @param {Function} fn\n */\n before: function (name, fn) {\n suites[0].beforeAll(name, fn);\n },\n\n /**\n * Execute after running tests.\n *\n * @param {string} name\n * @param {Function} fn\n */\n after: function (name, fn) {\n suites[0].afterAll(name, fn);\n },\n\n /**\n * Execute before each test case.\n *\n * @param {string} name\n * @param {Function} fn\n */\n beforeEach: function (name, fn) {\n suites[0].beforeEach(name, fn);\n },\n\n /**\n * Execute after each test case.\n *\n * @param {string} name\n * @param {Function} fn\n */\n afterEach: function (name, fn) {\n suites[0].afterEach(name, fn);\n },\n\n suite: {\n /**\n * Create an exclusive Suite; convenience function\n * See docstring for create() below.\n *\n * @param {Object} opts\n * @returns {Suite}\n */\n only: function only(opts) {\n if (mocha.options.forbidOnly) {\n throw createForbiddenExclusivityError(mocha);\n }\n opts.isOnly = true;\n return this.create(opts);\n },\n\n /**\n * Create a Suite, but skip it; convenience function\n * See docstring for create() below.\n *\n * @param {Object} opts\n * @returns {Suite}\n */\n skip: function skip(opts) {\n opts.pending = true;\n return this.create(opts);\n },\n\n /**\n * Creates a suite.\n *\n * @param {Object} opts Options\n * @param {string} opts.title Title of Suite\n * @param {Function} [opts.fn] Suite Function (not always applicable)\n * @param {boolean} [opts.pending] Is Suite pending?\n * @param {string} [opts.file] Filepath where this Suite resides\n * @param {boolean} [opts.isOnly] Is Suite exclusive?\n * @returns {Suite}\n */\n create: function create(opts) {\n var suite = Suite.create(suites[0], opts.title);\n suite.pending = Boolean(opts.pending);\n suite.file = opts.file;\n suites.unshift(suite);\n if (opts.isOnly) {\n suite.markOnly();\n }\n if (\n suite.pending &&\n mocha.options.forbidPending &&\n shouldBeTested(suite)\n ) {\n throw createUnsupportedError('Pending test forbidden');\n }\n if (typeof opts.fn === 'function') {\n opts.fn.call(suite);\n suites.shift();\n } else if (typeof opts.fn === 'undefined' && !suite.pending) {\n throw createMissingArgumentError(\n 'Suite \"' +\n suite.fullTitle() +\n '\" was defined but no callback was supplied. ' +\n 'Supply a callback or explicitly skip the suite.',\n 'callback',\n 'function'\n );\n } else if (!opts.fn && suite.pending) {\n suites.shift();\n }\n\n return suite;\n }\n },\n\n test: {\n /**\n * Exclusive test-case.\n *\n * @param {Object} mocha\n * @param {Function} test\n * @returns {*}\n */\n only: function (mocha, test) {\n if (mocha.options.forbidOnly) {\n throw createForbiddenExclusivityError(mocha);\n }\n test.markOnly();\n return test;\n },\n\n /**\n * Pending test case.\n *\n * @param {string} title\n */\n skip: function (title) {\n context.test(title);\n }\n }\n };\n};\n","'use strict';\n\nvar Test = require('../test');\nvar EVENT_FILE_PRE_REQUIRE =\n require('../suite').constants.EVENT_FILE_PRE_REQUIRE;\n\n/**\n * BDD-style interface:\n *\n * describe('Array', function() {\n * describe('#indexOf()', function() {\n * it('should return -1 when not present', function() {\n * // ...\n * });\n *\n * it('should return the index when present', function() {\n * // ...\n * });\n * });\n * });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function bddInterface(suite) {\n var suites = [suite];\n\n suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) {\n var common = require('./common')(suites, context, mocha);\n\n context.before = common.before;\n context.after = common.after;\n context.beforeEach = common.beforeEach;\n context.afterEach = common.afterEach;\n context.run = mocha.options.delay && common.runWithSuite(suite);\n /**\n * Describe a \"suite\" with the given `title`\n * and callback `fn` containing nested suites\n * and/or tests.\n */\n\n context.describe = context.context = function (title, fn) {\n return common.suite.create({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Pending describe.\n */\n\n context.xdescribe =\n context.xcontext =\n context.describe.skip =\n function (title, fn) {\n return common.suite.skip({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Exclusive suite.\n */\n\n context.describe.only = function (title, fn) {\n return common.suite.only({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Describe a specification or test-case\n * with the given `title` and callback `fn`\n * acting as a thunk.\n */\n\n context.it = context.specify = function (title, fn) {\n var suite = suites[0];\n if (suite.isPending()) {\n fn = null;\n }\n var test = new Test(title, fn);\n test.file = file;\n suite.addTest(test);\n return test;\n };\n\n /**\n * Exclusive test-case.\n */\n\n context.it.only = function (title, fn) {\n return common.test.only(mocha, context.it(title, fn));\n };\n\n /**\n * Pending test case.\n */\n\n context.xit =\n context.xspecify =\n context.it.skip =\n function (title) {\n return context.it(title);\n };\n });\n};\n\nmodule.exports.description = 'BDD or RSpec style [default]';\n","'use strict';\n\nvar Test = require('../test');\nvar EVENT_FILE_PRE_REQUIRE =\n require('../suite').constants.EVENT_FILE_PRE_REQUIRE;\n\n/**\n * TDD-style interface:\n *\n * suite('Array', function() {\n * suite('#indexOf()', function() {\n * suiteSetup(function() {\n *\n * });\n *\n * test('should return -1 when not present', function() {\n *\n * });\n *\n * test('should return the index when present', function() {\n *\n * });\n *\n * suiteTeardown(function() {\n *\n * });\n * });\n * });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function (suite) {\n var suites = [suite];\n\n suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) {\n var common = require('./common')(suites, context, mocha);\n\n context.setup = common.beforeEach;\n context.teardown = common.afterEach;\n context.suiteSetup = common.before;\n context.suiteTeardown = common.after;\n context.run = mocha.options.delay && common.runWithSuite(suite);\n\n /**\n * Describe a \"suite\" with the given `title` and callback `fn` containing\n * nested suites and/or tests.\n */\n context.suite = function (title, fn) {\n return common.suite.create({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Pending suite.\n */\n context.suite.skip = function (title, fn) {\n return common.suite.skip({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Exclusive test-case.\n */\n context.suite.only = function (title, fn) {\n return common.suite.only({\n title: title,\n file: file,\n fn: fn\n });\n };\n\n /**\n * Describe a specification or test-case with the given `title` and\n * callback `fn` acting as a thunk.\n */\n context.test = function (title, fn) {\n var suite = suites[0];\n if (suite.isPending()) {\n fn = null;\n }\n var test = new Test(title, fn);\n test.file = file;\n suite.addTest(test);\n return test;\n };\n\n /**\n * Exclusive test-case.\n */\n\n context.test.only = function (title, fn) {\n return common.test.only(mocha, context.test(title, fn));\n };\n\n context.test.skip = common.test.skip;\n });\n};\n\nmodule.exports.description =\n 'traditional \"suite\"/\"test\" instead of BDD\\'s \"describe\"/\"it\"';\n","'use strict';\n\nvar Test = require('../test');\nvar EVENT_FILE_PRE_REQUIRE =\n require('../suite').constants.EVENT_FILE_PRE_REQUIRE;\n\n/**\n * QUnit-style interface:\n *\n * suite('Array');\n *\n * test('#length', function() {\n * var arr = [1,2,3];\n * ok(arr.length == 3);\n * });\n *\n * test('#indexOf()', function() {\n * var arr = [1,2,3];\n * ok(arr.indexOf(1) == 0);\n * ok(arr.indexOf(2) == 1);\n * ok(arr.indexOf(3) == 2);\n * });\n *\n * suite('String');\n *\n * test('#length', function() {\n * ok('foo'.length == 3);\n * });\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function qUnitInterface(suite) {\n var suites = [suite];\n\n suite.on(EVENT_FILE_PRE_REQUIRE, function (context, file, mocha) {\n var common = require('./common')(suites, context, mocha);\n\n context.before = common.before;\n context.after = common.after;\n context.beforeEach = common.beforeEach;\n context.afterEach = common.afterEach;\n context.run = mocha.options.delay && common.runWithSuite(suite);\n /**\n * Describe a \"suite\" with the given `title`.\n */\n\n context.suite = function (title) {\n if (suites.length > 1) {\n suites.shift();\n }\n return common.suite.create({\n title: title,\n file: file,\n fn: false\n });\n };\n\n /**\n * Exclusive Suite.\n */\n\n context.suite.only = function (title) {\n if (suites.length > 1) {\n suites.shift();\n }\n return common.suite.only({\n title: title,\n file: file,\n fn: false\n });\n };\n\n /**\n * Describe a specification or test-case\n * with the given `title` and callback `fn`\n * acting as a thunk.\n */\n\n context.test = function (title, fn) {\n var test = new Test(title, fn);\n test.file = file;\n suites[0].addTest(test);\n return test;\n };\n\n /**\n * Exclusive test-case.\n */\n\n context.test.only = function (title, fn) {\n return common.test.only(mocha, context.test(title, fn));\n };\n\n context.test.skip = common.test.skip;\n });\n};\n\nmodule.exports.description = 'QUnit style';\n","'use strict';\nvar Suite = require('../suite');\nvar Test = require('../test');\n\n/**\n * Exports-style (as Node.js module) interface:\n *\n * exports.Array = {\n * '#indexOf()': {\n * 'should return -1 when the value is not present': function() {\n *\n * },\n *\n * 'should return the correct index when the value is present': function() {\n *\n * }\n * }\n * };\n *\n * @param {Suite} suite Root suite.\n */\nmodule.exports = function (suite) {\n var suites = [suite];\n\n suite.on(Suite.constants.EVENT_FILE_REQUIRE, visit);\n\n function visit(obj, file) {\n var suite;\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n var fn = obj[key];\n switch (key) {\n case 'before':\n suites[0].beforeAll(fn);\n break;\n case 'after':\n suites[0].afterAll(fn);\n break;\n case 'beforeEach':\n suites[0].beforeEach(fn);\n break;\n case 'afterEach':\n suites[0].afterEach(fn);\n break;\n default:\n var test = new Test(key, fn);\n test.file = file;\n suites[0].addTest(test);\n }\n } else {\n suite = Suite.create(suites[0], key);\n suites.unshift(suite);\n visit(obj[key], file);\n suites.shift();\n }\n }\n }\n};\n\nmodule.exports.description = 'Node.js module (\"exports\") style';\n","'use strict';\n\nexports.bdd = require('./bdd');\nexports.tdd = require('./tdd');\nexports.qunit = require('./qunit');\nexports.exports = require('./exports');\n","'use strict';\n/**\n * @module Context\n */\n/**\n * Expose `Context`.\n */\n\nmodule.exports = Context;\n\n/**\n * Initialize a new `Context`.\n *\n * @private\n */\nfunction Context() {}\n\n/**\n * Set or get the context `Runnable` to `runnable`.\n *\n * @private\n * @param {Runnable} runnable\n * @return {Context} context\n */\nContext.prototype.runnable = function (runnable) {\n if (!arguments.length) {\n return this._runnable;\n }\n this.test = this._runnable = runnable;\n return this;\n};\n\n/**\n * Set or get test timeout `ms`.\n *\n * @private\n * @param {number} ms\n * @return {Context} self\n */\nContext.prototype.timeout = function (ms) {\n if (!arguments.length) {\n return this.runnable().timeout();\n }\n this.runnable().timeout(ms);\n return this;\n};\n\n/**\n * Set or get test slowness threshold `ms`.\n *\n * @private\n * @param {number} ms\n * @return {Context} self\n */\nContext.prototype.slow = function (ms) {\n if (!arguments.length) {\n return this.runnable().slow();\n }\n this.runnable().slow(ms);\n return this;\n};\n\n/**\n * Mark a test as skipped.\n *\n * @private\n * @throws Pending\n */\nContext.prototype.skip = function () {\n this.runnable().skip();\n};\n\n/**\n * Set or get a number of allowed retries on failed tests\n *\n * @private\n * @param {number} n\n * @return {Context} self\n */\nContext.prototype.retries = function (n) {\n if (!arguments.length) {\n return this.runnable().retries();\n }\n this.runnable().retries(n);\n return this;\n};\n","'use strict';\n\n/*!\n * mocha\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\nvar escapeRe = require('escape-string-regexp');\nvar path = require('path');\nvar builtinReporters = require('./reporters');\nvar growl = require('./nodejs/growl');\nvar utils = require('./utils');\nvar mocharc = require('./mocharc.json');\nvar Suite = require('./suite');\nvar esmUtils = require('./nodejs/esm-utils');\nvar createStatsCollector = require('./stats-collector');\nconst {\n createInvalidReporterError,\n createInvalidInterfaceError,\n createMochaInstanceAlreadyDisposedError,\n createMochaInstanceAlreadyRunningError,\n createUnsupportedError\n} = require('./errors');\nconst {EVENT_FILE_PRE_REQUIRE, EVENT_FILE_POST_REQUIRE, EVENT_FILE_REQUIRE} =\n Suite.constants;\nvar debug = require('debug')('mocha:mocha');\n\nexports = module.exports = Mocha;\n\n/**\n * A Mocha instance is a finite state machine.\n * These are the states it can be in.\n * @private\n */\nvar mochaStates = utils.defineConstants({\n /**\n * Initial state of the mocha instance\n * @private\n */\n INIT: 'init',\n /**\n * Mocha instance is running tests\n * @private\n */\n RUNNING: 'running',\n /**\n * Mocha instance is done running tests and references to test functions and hooks are cleaned.\n * You can reset this state by unloading the test files.\n * @private\n */\n REFERENCES_CLEANED: 'referencesCleaned',\n /**\n * Mocha instance is disposed and can no longer be used.\n * @private\n */\n DISPOSED: 'disposed'\n});\n\n/**\n * To require local UIs and reporters when running in node.\n */\n\nif (!utils.isBrowser() && typeof module.paths !== 'undefined') {\n var cwd = utils.cwd();\n module.paths.push(cwd, path.join(cwd, 'node_modules'));\n}\n\n/**\n * Expose internals.\n * @private\n */\n\nexports.utils = utils;\nexports.interfaces = require('./interfaces');\n/**\n * @public\n * @memberof Mocha\n */\nexports.reporters = builtinReporters;\nexports.Runnable = require('./runnable');\nexports.Context = require('./context');\n/**\n *\n * @memberof Mocha\n */\nexports.Runner = require('./runner');\nexports.Suite = Suite;\nexports.Hook = require('./hook');\nexports.Test = require('./test');\n\nlet currentContext;\nexports.afterEach = function (...args) {\n return (currentContext.afterEach || currentContext.teardown).apply(\n this,\n args\n );\n};\nexports.after = function (...args) {\n return (currentContext.after || currentContext.suiteTeardown).apply(\n this,\n args\n );\n};\nexports.beforeEach = function (...args) {\n return (currentContext.beforeEach || currentContext.setup).apply(this, args);\n};\nexports.before = function (...args) {\n return (currentContext.before || currentContext.suiteSetup).apply(this, args);\n};\nexports.describe = function (...args) {\n return (currentContext.describe || currentContext.suite).apply(this, args);\n};\nexports.describe.only = function (...args) {\n return (currentContext.describe || currentContext.suite).only.apply(\n this,\n args\n );\n};\nexports.describe.skip = function (...args) {\n return (currentContext.describe || currentContext.suite).skip.apply(\n this,\n args\n );\n};\nexports.it = function (...args) {\n return (currentContext.it || currentContext.test).apply(this, args);\n};\nexports.it.only = function (...args) {\n return (currentContext.it || currentContext.test).only.apply(this, args);\n};\nexports.it.skip = function (...args) {\n return (currentContext.it || currentContext.test).skip.apply(this, args);\n};\nexports.xdescribe = exports.describe.skip;\nexports.xit = exports.it.skip;\nexports.setup = exports.beforeEach;\nexports.suiteSetup = exports.before;\nexports.suiteTeardown = exports.after;\nexports.suite = exports.describe;\nexports.teardown = exports.afterEach;\nexports.test = exports.it;\nexports.run = function (...args) {\n return currentContext.run.apply(this, args);\n};\n\n/**\n * Constructs a new Mocha instance with `options`.\n *\n * @public\n * @class Mocha\n * @param {Object} [options] - Settings object.\n * @param {boolean} [options.allowUncaught] - Propagate uncaught errors?\n * @param {boolean} [options.asyncOnly] - Force `done` callback or promise?\n * @param {boolean} [options.bail] - Bail after first test failure?\n * @param {boolean} [options.checkLeaks] - Check for global variable leaks?\n * @param {boolean} [options.color] - Color TTY output from reporter?\n * @param {boolean} [options.delay] - Delay root suite execution?\n * @param {boolean} [options.diff] - Show diff on failure?\n * @param {boolean} [options.dryRun] - Report tests without running them?\n * @param {boolean} [options.failZero] - Fail test run if zero tests?\n * @param {string} [options.fgrep] - Test filter given string.\n * @param {boolean} [options.forbidOnly] - Tests marked `only` fail the suite?\n * @param {boolean} [options.forbidPending] - Pending tests fail the suite?\n * @param {boolean} [options.fullTrace] - Full stacktrace upon failure?\n * @param {string[]} [options.global] - Variables expected in global scope.\n * @param {RegExp|string} [options.grep] - Test filter given regular expression.\n * @param {boolean} [options.growl] - Enable desktop notifications?\n * @param {boolean} [options.inlineDiffs] - Display inline diffs?\n * @param {boolean} [options.invert] - Invert test filter matches?\n * @param {boolean} [options.noHighlighting] - Disable syntax highlighting?\n * @param {string|constructor} [options.reporter] - Reporter name or constructor.\n * @param {Object} [options.reporterOption] - Reporter settings object.\n * @param {number} [options.retries] - Number of times to retry failed tests.\n * @param {number} [options.slow] - Slow threshold value.\n * @param {number|string} [options.timeout] - Timeout threshold value.\n * @param {string} [options.ui] - Interface name.\n * @param {boolean} [options.parallel] - Run jobs in parallel.\n * @param {number} [options.jobs] - Max number of worker processes for parallel runs.\n * @param {MochaRootHookObject} [options.rootHooks] - Hooks to bootstrap the root suite with.\n * @param {string[]} [options.require] - Pathname of `rootHooks` plugin for parallel runs.\n * @param {boolean} [options.isWorker] - Should be `true` if `Mocha` process is running in a worker process.\n */\nfunction Mocha(options = {}) {\n options = {...mocharc, ...options};\n this.files = [];\n this.options = options;\n // root suite\n this.suite = new exports.Suite('', new exports.Context(), true);\n this._cleanReferencesAfterRun = true;\n this._state = mochaStates.INIT;\n\n this.grep(options.grep)\n .fgrep(options.fgrep)\n .ui(options.ui)\n .reporter(\n options.reporter,\n options.reporterOption || options.reporterOptions // for backwards compability\n )\n .slow(options.slow)\n .global(options.global);\n\n // this guard exists because Suite#timeout does not consider `undefined` to be valid input\n if (typeof options.timeout !== 'undefined') {\n this.timeout(options.timeout === false ? 0 : options.timeout);\n }\n\n if ('retries' in options) {\n this.retries(options.retries);\n }\n\n [\n 'allowUncaught',\n 'asyncOnly',\n 'bail',\n 'checkLeaks',\n 'color',\n 'delay',\n 'diff',\n 'dryRun',\n 'failZero',\n 'forbidOnly',\n 'forbidPending',\n 'fullTrace',\n 'growl',\n 'inlineDiffs',\n 'invert'\n ].forEach(function (opt) {\n if (options[opt]) {\n this[opt]();\n }\n }, this);\n\n if (options.rootHooks) {\n this.rootHooks(options.rootHooks);\n }\n\n /**\n * The class which we'll instantiate in {@link Mocha#run}. Defaults to\n * {@link Runner} in serial mode; changes in parallel mode.\n * @memberof Mocha\n * @private\n */\n this._runnerClass = exports.Runner;\n\n /**\n * Whether or not to call {@link Mocha#loadFiles} implicitly when calling\n * {@link Mocha#run}. If this is `true`, then it's up to the consumer to call\n * {@link Mocha#loadFiles} _or_ {@link Mocha#loadFilesAsync}.\n * @private\n * @memberof Mocha\n */\n this._lazyLoadFiles = false;\n\n /**\n * It's useful for a Mocha instance to know if it's running in a worker process.\n * We could derive this via other means, but it's helpful to have a flag to refer to.\n * @memberof Mocha\n * @private\n */\n this.isWorker = Boolean(options.isWorker);\n\n this.globalSetup(options.globalSetup)\n .globalTeardown(options.globalTeardown)\n .enableGlobalSetup(options.enableGlobalSetup)\n .enableGlobalTeardown(options.enableGlobalTeardown);\n\n if (\n options.parallel &&\n (typeof options.jobs === 'undefined' || options.jobs > 1)\n ) {\n debug('attempting to enable parallel mode');\n this.parallelMode(true);\n }\n}\n\n/**\n * Enables or disables bailing on the first failure.\n *\n * @public\n * @see [CLI option](../#-bail-b)\n * @param {boolean} [bail=true] - Whether to bail on first error.\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.bail = function (bail) {\n this.suite.bail(bail !== false);\n return this;\n};\n\n/**\n * @summary\n * Adds `file` to be loaded for execution.\n *\n * @description\n * Useful for generic setup code that must be included within test suite.\n *\n * @public\n * @see [CLI option](../#-file-filedirectoryglob)\n * @param {string} file - Pathname of file to be loaded.\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.addFile = function (file) {\n this.files.push(file);\n return this;\n};\n\n/**\n * Sets reporter to `reporter`, defaults to \"spec\".\n *\n * @public\n * @see [CLI option](../#-reporter-name-r-name)\n * @see [Reporters](../#reporters)\n * @param {String|Function} reporterName - Reporter name or constructor.\n * @param {Object} [reporterOptions] - Options used to configure the reporter.\n * @returns {Mocha} this\n * @chainable\n * @throws {Error} if requested reporter cannot be loaded\n * @example\n *\n * // Use XUnit reporter and direct its output to file\n * mocha.reporter('xunit', { output: '/path/to/testspec.xunit.xml' });\n */\nMocha.prototype.reporter = function (reporterName, reporterOptions) {\n if (typeof reporterName === 'function') {\n this._reporter = reporterName;\n } else {\n reporterName = reporterName || 'spec';\n var reporter;\n // Try to load a built-in reporter.\n if (builtinReporters[reporterName]) {\n reporter = builtinReporters[reporterName];\n }\n // Try to load reporters from process.cwd() and node_modules\n if (!reporter) {\n let foundReporter;\n try {\n foundReporter = require.resolve(reporterName);\n reporter = require(foundReporter);\n } catch (err) {\n if (foundReporter) {\n throw createInvalidReporterError(err.message, foundReporter);\n }\n // Try to load reporters from a cwd-relative path\n try {\n reporter = require(path.resolve(reporterName));\n } catch (e) {\n throw createInvalidReporterError(e.message, reporterName);\n }\n }\n }\n this._reporter = reporter;\n }\n this.options.reporterOption = reporterOptions;\n // alias option name is used in built-in reporters xunit/tap/progress\n this.options.reporterOptions = reporterOptions;\n return this;\n};\n\n/**\n * Sets test UI `name`, defaults to \"bdd\".\n *\n * @public\n * @see [CLI option](../#-ui-name-u-name)\n * @see [Interface DSLs](../#interfaces)\n * @param {string|Function} [ui=bdd] - Interface name or class.\n * @returns {Mocha} this\n * @chainable\n * @throws {Error} if requested interface cannot be loaded\n */\nMocha.prototype.ui = function (ui) {\n var bindInterface;\n if (typeof ui === 'function') {\n bindInterface = ui;\n } else {\n ui = ui || 'bdd';\n bindInterface = exports.interfaces[ui];\n if (!bindInterface) {\n try {\n bindInterface = require(ui);\n } catch (err) {\n throw createInvalidInterfaceError(`invalid interface '${ui}'`, ui);\n }\n }\n }\n bindInterface(this.suite);\n\n this.suite.on(EVENT_FILE_PRE_REQUIRE, function (context) {\n currentContext = context;\n });\n\n return this;\n};\n\n/**\n * Loads `files` prior to execution. Does not support ES Modules.\n *\n * @description\n * The implementation relies on Node's `require` to execute\n * the test interface functions and will be subject to its cache.\n * Supports only CommonJS modules. To load ES modules, use Mocha#loadFilesAsync.\n *\n * @private\n * @see {@link Mocha#addFile}\n * @see {@link Mocha#run}\n * @see {@link Mocha#unloadFiles}\n * @see {@link Mocha#loadFilesAsync}\n * @param {Function} [fn] - Callback invoked upon completion.\n */\nMocha.prototype.loadFiles = function (fn) {\n var self = this;\n var suite = this.suite;\n this.files.forEach(function (file) {\n file = path.resolve(file);\n suite.emit(EVENT_FILE_PRE_REQUIRE, global, file, self);\n suite.emit(EVENT_FILE_REQUIRE, require(file), file, self);\n suite.emit(EVENT_FILE_POST_REQUIRE, global, file, self);\n });\n fn && fn();\n};\n\n/**\n * Loads `files` prior to execution. Supports Node ES Modules.\n *\n * @description\n * The implementation relies on Node's `require` and `import` to execute\n * the test interface functions and will be subject to its cache.\n * Supports both CJS and ESM modules.\n *\n * @public\n * @see {@link Mocha#addFile}\n * @see {@link Mocha#run}\n * @see {@link Mocha#unloadFiles}\n * @returns {Promise}\n * @example\n *\n * // loads ESM (and CJS) test files asynchronously, then runs root suite\n * mocha.loadFilesAsync()\n * .then(() => mocha.run(failures => process.exitCode = failures ? 1 : 0))\n * .catch(() => process.exitCode = 1);\n */\nMocha.prototype.loadFilesAsync = function () {\n var self = this;\n var suite = this.suite;\n this.lazyLoadFiles(true);\n\n return esmUtils.loadFilesAsync(\n this.files,\n function (file) {\n suite.emit(EVENT_FILE_PRE_REQUIRE, global, file, self);\n },\n function (file, resultModule) {\n suite.emit(EVENT_FILE_REQUIRE, resultModule, file, self);\n suite.emit(EVENT_FILE_POST_REQUIRE, global, file, self);\n }\n );\n};\n\n/**\n * Removes a previously loaded file from Node's `require` cache.\n *\n * @private\n * @static\n * @see {@link Mocha#unloadFiles}\n * @param {string} file - Pathname of file to be unloaded.\n */\nMocha.unloadFile = function (file) {\n if (utils.isBrowser()) {\n throw createUnsupportedError(\n 'unloadFile() is only suported in a Node.js environment'\n );\n }\n return require('./nodejs/file-unloader').unloadFile(file);\n};\n\n/**\n * Unloads `files` from Node's `require` cache.\n *\n * @description\n * This allows required files to be \"freshly\" reloaded, providing the ability\n * to reuse a Mocha instance programmatically.\n * Note: does not clear ESM module files from the cache\n *\n * Intended for consumers — not used internally\n *\n * @public\n * @see {@link Mocha#run}\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.unloadFiles = function () {\n if (this._state === mochaStates.DISPOSED) {\n throw createMochaInstanceAlreadyDisposedError(\n 'Mocha instance is already disposed, it cannot be used again.',\n this._cleanReferencesAfterRun,\n this\n );\n }\n\n this.files.forEach(function (file) {\n Mocha.unloadFile(file);\n });\n this._state = mochaStates.INIT;\n return this;\n};\n\n/**\n * Sets `grep` filter after escaping RegExp special characters.\n *\n * @public\n * @see {@link Mocha#grep}\n * @param {string} str - Value to be converted to a regexp.\n * @returns {Mocha} this\n * @chainable\n * @example\n *\n * // Select tests whose full title begins with `\"foo\"` followed by a period\n * mocha.fgrep('foo.');\n */\nMocha.prototype.fgrep = function (str) {\n if (!str) {\n return this;\n }\n return this.grep(new RegExp(escapeRe(str)));\n};\n\n/**\n * @summary\n * Sets `grep` filter used to select specific tests for execution.\n *\n * @description\n * If `re` is a regexp-like string, it will be converted to regexp.\n * The regexp is tested against the full title of each test (i.e., the\n * name of the test preceded by titles of each its ancestral suites).\n * As such, using an exact-match fixed pattern against the\n * test name itself will not yield any matches.\n *
            \n * Previous filter value will be overwritten on each call!\n *\n * @public\n * @see [CLI option](../#-grep-regexp-g-regexp)\n * @see {@link Mocha#fgrep}\n * @see {@link Mocha#invert}\n * @param {RegExp|String} re - Regular expression used to select tests.\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Select tests whose full title contains `\"match\"`, ignoring case\n * mocha.grep(/match/i);\n * @example\n *\n * // Same as above but with regexp-like string argument\n * mocha.grep('/match/i');\n * @example\n *\n * // ## Anti-example\n * // Given embedded test `it('only-this-test')`...\n * mocha.grep('/^only-this-test$/'); // NO! Use `.only()` to do this!\n */\nMocha.prototype.grep = function (re) {\n if (utils.isString(re)) {\n // extract args if it's regex-like, i.e: [string, pattern, flag]\n var arg = re.match(/^\\/(.*)\\/([gimy]{0,4})$|.*/);\n this.options.grep = new RegExp(arg[1] || arg[0], arg[2]);\n } else {\n this.options.grep = re;\n }\n return this;\n};\n\n/**\n * Inverts `grep` matches.\n *\n * @public\n * @see {@link Mocha#grep}\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Select tests whose full title does *not* contain `\"match\"`, ignoring case\n * mocha.grep(/match/i).invert();\n */\nMocha.prototype.invert = function () {\n this.options.invert = true;\n return this;\n};\n\n/**\n * Enables or disables checking for global variables leaked while running tests.\n *\n * @public\n * @see [CLI option](../#-check-leaks)\n * @param {boolean} [checkLeaks=true] - Whether to check for global variable leaks.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.checkLeaks = function (checkLeaks) {\n this.options.checkLeaks = checkLeaks !== false;\n return this;\n};\n\n/**\n * Enables or disables whether or not to dispose after each test run.\n * Disable this to ensure you can run the test suite multiple times.\n * If disabled, be sure to dispose mocha when you're done to prevent memory leaks.\n * @public\n * @see {@link Mocha#dispose}\n * @param {boolean} cleanReferencesAfterRun\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.cleanReferencesAfterRun = function (cleanReferencesAfterRun) {\n this._cleanReferencesAfterRun = cleanReferencesAfterRun !== false;\n return this;\n};\n\n/**\n * Manually dispose this mocha instance. Mark this instance as `disposed` and unable to run more tests.\n * It also removes function references to tests functions and hooks, so variables trapped in closures can be cleaned by the garbage collector.\n * @public\n */\nMocha.prototype.dispose = function () {\n if (this._state === mochaStates.RUNNING) {\n throw createMochaInstanceAlreadyRunningError(\n 'Cannot dispose while the mocha instance is still running tests.'\n );\n }\n this.unloadFiles();\n this._previousRunner && this._previousRunner.dispose();\n this.suite.dispose();\n this._state = mochaStates.DISPOSED;\n};\n\n/**\n * Displays full stack trace upon test failure.\n *\n * @public\n * @see [CLI option](../#-full-trace)\n * @param {boolean} [fullTrace=true] - Whether to print full stacktrace upon failure.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.fullTrace = function (fullTrace) {\n this.options.fullTrace = fullTrace !== false;\n return this;\n};\n\n/**\n * Enables desktop notification support if prerequisite software installed.\n *\n * @public\n * @see [CLI option](../#-growl-g)\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.growl = function () {\n this.options.growl = this.isGrowlCapable();\n if (!this.options.growl) {\n var detail = utils.isBrowser()\n ? 'notification support not available in this browser...'\n : 'notification support prerequisites not installed...';\n console.error(detail + ' cannot enable!');\n }\n return this;\n};\n\n/**\n * @summary\n * Determines if Growl support seems likely.\n *\n * @description\n * Not available when run in browser.\n *\n * @private\n * @see {@link Growl#isCapable}\n * @see {@link Mocha#growl}\n * @return {boolean} whether Growl support can be expected\n */\nMocha.prototype.isGrowlCapable = growl.isCapable;\n\n/**\n * Implements desktop notifications using a pseudo-reporter.\n *\n * @private\n * @see {@link Mocha#growl}\n * @see {@link Growl#notify}\n * @param {Runner} runner - Runner instance.\n */\nMocha.prototype._growl = growl.notify;\n\n/**\n * Specifies whitelist of variable names to be expected in global scope.\n *\n * @public\n * @see [CLI option](../#-global-variable-name)\n * @see {@link Mocha#checkLeaks}\n * @param {String[]|String} global - Accepted global variable name(s).\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Specify variables to be expected in global scope\n * mocha.global(['jQuery', 'MyLib']);\n */\nMocha.prototype.global = function (global) {\n this.options.global = (this.options.global || [])\n .concat(global)\n .filter(Boolean)\n .filter(function (elt, idx, arr) {\n return arr.indexOf(elt) === idx;\n });\n return this;\n};\n// for backwards compability, 'globals' is an alias of 'global'\nMocha.prototype.globals = Mocha.prototype.global;\n\n/**\n * Enables or disables TTY color output by screen-oriented reporters.\n *\n * @public\n * @see [CLI option](../#-color-c-colors)\n * @param {boolean} [color=true] - Whether to enable color output.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.color = function (color) {\n this.options.color = color !== false;\n return this;\n};\n\n/**\n * Enables or disables reporter to use inline diffs (rather than +/-)\n * in test failure output.\n *\n * @public\n * @see [CLI option](../#-inline-diffs)\n * @param {boolean} [inlineDiffs=true] - Whether to use inline diffs.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.inlineDiffs = function (inlineDiffs) {\n this.options.inlineDiffs = inlineDiffs !== false;\n return this;\n};\n\n/**\n * Enables or disables reporter to include diff in test failure output.\n *\n * @public\n * @see [CLI option](../#-diff)\n * @param {boolean} [diff=true] - Whether to show diff on failure.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.diff = function (diff) {\n this.options.diff = diff !== false;\n return this;\n};\n\n/**\n * @summary\n * Sets timeout threshold value.\n *\n * @description\n * A string argument can use shorthand (such as \"2s\") and will be converted.\n * If the value is `0`, timeouts will be disabled.\n *\n * @public\n * @see [CLI option](../#-timeout-ms-t-ms)\n * @see [Timeouts](../#timeouts)\n * @param {number|string} msecs - Timeout threshold value.\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Sets timeout to one second\n * mocha.timeout(1000);\n * @example\n *\n * // Same as above but using string argument\n * mocha.timeout('1s');\n */\nMocha.prototype.timeout = function (msecs) {\n this.suite.timeout(msecs);\n return this;\n};\n\n/**\n * Sets the number of times to retry failed tests.\n *\n * @public\n * @see [CLI option](../#-retries-n)\n * @see [Retry Tests](../#retry-tests)\n * @param {number} retry - Number of times to retry failed tests.\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Allow any failed test to retry one more time\n * mocha.retries(1);\n */\nMocha.prototype.retries = function (retry) {\n this.suite.retries(retry);\n return this;\n};\n\n/**\n * Sets slowness threshold value.\n *\n * @public\n * @see [CLI option](../#-slow-ms-s-ms)\n * @param {number} msecs - Slowness threshold value.\n * @return {Mocha} this\n * @chainable\n * @example\n *\n * // Sets \"slow\" threshold to half a second\n * mocha.slow(500);\n * @example\n *\n * // Same as above but using string argument\n * mocha.slow('0.5s');\n */\nMocha.prototype.slow = function (msecs) {\n this.suite.slow(msecs);\n return this;\n};\n\n/**\n * Forces all tests to either accept a `done` callback or return a promise.\n *\n * @public\n * @see [CLI option](../#-async-only-a)\n * @param {boolean} [asyncOnly=true] - Whether to force `done` callback or promise.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.asyncOnly = function (asyncOnly) {\n this.options.asyncOnly = asyncOnly !== false;\n return this;\n};\n\n/**\n * Disables syntax highlighting (in browser).\n *\n * @public\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.noHighlighting = function () {\n this.options.noHighlighting = true;\n return this;\n};\n\n/**\n * Enables or disables uncaught errors to propagate.\n *\n * @public\n * @see [CLI option](../#-allow-uncaught)\n * @param {boolean} [allowUncaught=true] - Whether to propagate uncaught errors.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.allowUncaught = function (allowUncaught) {\n this.options.allowUncaught = allowUncaught !== false;\n return this;\n};\n\n/**\n * @summary\n * Delays root suite execution.\n *\n * @description\n * Used to perform async operations before any suites are run.\n *\n * @public\n * @see [delayed root suite](../#delayed-root-suite)\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.delay = function delay() {\n this.options.delay = true;\n return this;\n};\n\n/**\n * Enables or disables running tests in dry-run mode.\n *\n * @public\n * @see [CLI option](../#-dry-run)\n * @param {boolean} [dryRun=true] - Whether to activate dry-run mode.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.dryRun = function (dryRun) {\n this.options.dryRun = dryRun !== false;\n return this;\n};\n\n/**\n * Fails test run if no tests encountered with exit-code 1.\n *\n * @public\n * @see [CLI option](../#-fail-zero)\n * @param {boolean} [failZero=true] - Whether to fail test run.\n * @return {Mocha} this\n * @chainable\n */\nMocha.prototype.failZero = function (failZero) {\n this.options.failZero = failZero !== false;\n return this;\n};\n\n/**\n * Causes tests marked `only` to fail the suite.\n *\n * @public\n * @see [CLI option](../#-forbid-only)\n * @param {boolean} [forbidOnly=true] - Whether tests marked `only` fail the suite.\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.forbidOnly = function (forbidOnly) {\n this.options.forbidOnly = forbidOnly !== false;\n return this;\n};\n\n/**\n * Causes pending tests and tests marked `skip` to fail the suite.\n *\n * @public\n * @see [CLI option](../#-forbid-pending)\n * @param {boolean} [forbidPending=true] - Whether pending tests fail the suite.\n * @returns {Mocha} this\n * @chainable\n */\nMocha.prototype.forbidPending = function (forbidPending) {\n this.options.forbidPending = forbidPending !== false;\n return this;\n};\n\n/**\n * Throws an error if mocha is in the wrong state to be able to transition to a \"running\" state.\n * @private\n */\nMocha.prototype._guardRunningStateTransition = function () {\n if (this._state === mochaStates.RUNNING) {\n throw createMochaInstanceAlreadyRunningError(\n 'Mocha instance is currently running tests, cannot start a next test run until this one is done',\n this\n );\n }\n if (\n this._state === mochaStates.DISPOSED ||\n this._state === mochaStates.REFERENCES_CLEANED\n ) {\n throw createMochaInstanceAlreadyDisposedError(\n 'Mocha instance is already disposed, cannot start a new test run. Please create a new mocha instance. Be sure to set disable `cleanReferencesAfterRun` when you want to reuse the same mocha instance for multiple test runs.',\n this._cleanReferencesAfterRun,\n this\n );\n }\n};\n\n/**\n * Mocha version as specified by \"package.json\".\n *\n * @name Mocha#version\n * @type string\n * @readonly\n */\nObject.defineProperty(Mocha.prototype, 'version', {\n value: require('../package.json').version,\n configurable: false,\n enumerable: true,\n writable: false\n});\n\n/**\n * Callback to be invoked when test execution is complete.\n *\n * @private\n * @callback DoneCB\n * @param {number} failures - Number of failures that occurred.\n */\n\n/**\n * Runs root suite and invokes `fn()` when complete.\n *\n * @description\n * To run tests multiple times (or to run tests in files that are\n * already in the `require` cache), make sure to clear them from\n * the cache first!\n *\n * @public\n * @see {@link Mocha#unloadFiles}\n * @see {@link Runner#run}\n * @param {DoneCB} [fn] - Callback invoked when test execution completed.\n * @returns {Runner} runner instance\n * @example\n *\n * // exit with non-zero status if there were test failures\n * mocha.run(failures => process.exitCode = failures ? 1 : 0);\n */\nMocha.prototype.run = function (fn) {\n this._guardRunningStateTransition();\n this._state = mochaStates.RUNNING;\n if (this._previousRunner) {\n this._previousRunner.dispose();\n this.suite.reset();\n }\n if (this.files.length && !this._lazyLoadFiles) {\n this.loadFiles();\n }\n var suite = this.suite;\n var options = this.options;\n options.files = this.files;\n const runner = new this._runnerClass(suite, {\n cleanReferencesAfterRun: this._cleanReferencesAfterRun,\n delay: options.delay,\n dryRun: options.dryRun,\n failZero: options.failZero\n });\n createStatsCollector(runner);\n var reporter = new this._reporter(runner, options);\n runner.checkLeaks = options.checkLeaks === true;\n runner.fullStackTrace = options.fullTrace;\n runner.asyncOnly = options.asyncOnly;\n runner.allowUncaught = options.allowUncaught;\n runner.forbidOnly = options.forbidOnly;\n runner.forbidPending = options.forbidPending;\n if (options.grep) {\n runner.grep(options.grep, options.invert);\n }\n if (options.global) {\n runner.globals(options.global);\n }\n if (options.growl) {\n this._growl(runner);\n }\n if (options.color !== undefined) {\n exports.reporters.Base.useColors = options.color;\n }\n exports.reporters.Base.inlineDiffs = options.inlineDiffs;\n exports.reporters.Base.hideDiff = !options.diff;\n\n const done = failures => {\n this._previousRunner = runner;\n this._state = this._cleanReferencesAfterRun\n ? mochaStates.REFERENCES_CLEANED\n : mochaStates.INIT;\n fn = fn || utils.noop;\n if (typeof reporter.done === 'function') {\n reporter.done(failures, fn);\n } else {\n fn(failures);\n }\n };\n\n const runAsync = async runner => {\n const context =\n this.options.enableGlobalSetup && this.hasGlobalSetupFixtures()\n ? await this.runGlobalSetup(runner)\n : {};\n const failureCount = await runner.runAsync({\n files: this.files,\n options\n });\n if (this.options.enableGlobalTeardown && this.hasGlobalTeardownFixtures()) {\n await this.runGlobalTeardown(runner, {context});\n }\n return failureCount;\n };\n\n // no \"catch\" here is intentional. errors coming out of\n // Runner#run are considered uncaught/unhandled and caught\n // by the `process` event listeners.\n // also: returning anything other than `runner` would be a breaking\n // change\n runAsync(runner).then(done);\n\n return runner;\n};\n\n/**\n * Assigns hooks to the root suite\n * @param {MochaRootHookObject} [hooks] - Hooks to assign to root suite\n * @chainable\n */\nMocha.prototype.rootHooks = function rootHooks({\n beforeAll = [],\n beforeEach = [],\n afterAll = [],\n afterEach = []\n} = {}) {\n beforeAll = utils.castArray(beforeAll);\n beforeEach = utils.castArray(beforeEach);\n afterAll = utils.castArray(afterAll);\n afterEach = utils.castArray(afterEach);\n beforeAll.forEach(hook => {\n this.suite.beforeAll(hook);\n });\n beforeEach.forEach(hook => {\n this.suite.beforeEach(hook);\n });\n afterAll.forEach(hook => {\n this.suite.afterAll(hook);\n });\n afterEach.forEach(hook => {\n this.suite.afterEach(hook);\n });\n return this;\n};\n\n/**\n * Toggles parallel mode.\n *\n * Must be run before calling {@link Mocha#run}. Changes the `Runner` class to\n * use; also enables lazy file loading if not already done so.\n *\n * Warning: when passed `false` and lazy loading has been enabled _via any means_ (including calling `parallelMode(true)`), this method will _not_ disable lazy loading. Lazy loading is a prerequisite for parallel\n * mode, but parallel mode is _not_ a prerequisite for lazy loading!\n * @param {boolean} [enable] - If `true`, enable; otherwise disable.\n * @throws If run in browser\n * @throws If Mocha not in `INIT` state\n * @returns {Mocha}\n * @chainable\n * @public\n */\nMocha.prototype.parallelMode = function parallelMode(enable = true) {\n if (utils.isBrowser()) {\n throw createUnsupportedError('parallel mode is only supported in Node.js');\n }\n const parallel = Boolean(enable);\n if (\n parallel === this.options.parallel &&\n this._lazyLoadFiles &&\n this._runnerClass !== exports.Runner\n ) {\n return this;\n }\n if (this._state !== mochaStates.INIT) {\n throw createUnsupportedError(\n 'cannot change parallel mode after having called run()'\n );\n }\n this.options.parallel = parallel;\n\n // swap Runner class\n this._runnerClass = parallel\n ? require('./nodejs/parallel-buffered-runner')\n : exports.Runner;\n\n // lazyLoadFiles may have been set `true` otherwise (for ESM loading),\n // so keep `true` if so.\n return this.lazyLoadFiles(this._lazyLoadFiles || parallel);\n};\n\n/**\n * Disables implicit call to {@link Mocha#loadFiles} in {@link Mocha#run}. This\n * setting is used by watch mode, parallel mode, and for loading ESM files.\n * @todo This should throw if we've already loaded files; such behavior\n * necessitates adding a new state.\n * @param {boolean} [enable] - If `true`, disable eager loading of files in\n * {@link Mocha#run}\n * @chainable\n * @public\n */\nMocha.prototype.lazyLoadFiles = function lazyLoadFiles(enable) {\n this._lazyLoadFiles = enable === true;\n debug('set lazy load to %s', enable);\n return this;\n};\n\n/**\n * Configures one or more global setup fixtures.\n *\n * If given no parameters, _unsets_ any previously-set fixtures.\n * @chainable\n * @public\n * @param {MochaGlobalFixture|MochaGlobalFixture[]} [setupFns] - Global setup fixture(s)\n * @returns {Mocha}\n */\nMocha.prototype.globalSetup = function globalSetup(setupFns = []) {\n setupFns = utils.castArray(setupFns);\n this.options.globalSetup = setupFns;\n debug('configured %d global setup functions', setupFns.length);\n return this;\n};\n\n/**\n * Configures one or more global teardown fixtures.\n *\n * If given no parameters, _unsets_ any previously-set fixtures.\n * @chainable\n * @public\n * @param {MochaGlobalFixture|MochaGlobalFixture[]} [teardownFns] - Global teardown fixture(s)\n * @returns {Mocha}\n */\nMocha.prototype.globalTeardown = function globalTeardown(teardownFns = []) {\n teardownFns = utils.castArray(teardownFns);\n this.options.globalTeardown = teardownFns;\n debug('configured %d global teardown functions', teardownFns.length);\n return this;\n};\n\n/**\n * Run any global setup fixtures sequentially, if any.\n *\n * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalSetup` option is `false`; see {@link Mocha#enableGlobalSetup}.\n *\n * The context object this function resolves with should be consumed by {@link Mocha#runGlobalTeardown}.\n * @param {object} [context] - Context object if already have one\n * @public\n * @returns {Promise} Context object\n */\nMocha.prototype.runGlobalSetup = async function runGlobalSetup(context = {}) {\n const {globalSetup} = this.options;\n if (globalSetup && globalSetup.length) {\n debug('run(): global setup starting');\n await this._runGlobalFixtures(globalSetup, context);\n debug('run(): global setup complete');\n }\n return context;\n};\n\n/**\n * Run any global teardown fixtures sequentially, if any.\n *\n * This is _automatically called_ by {@link Mocha#run} _unless_ the `runGlobalTeardown` option is `false`; see {@link Mocha#enableGlobalTeardown}.\n *\n * Should be called with context object returned by {@link Mocha#runGlobalSetup}, if applicable.\n * @param {object} [context] - Context object if already have one\n * @public\n * @returns {Promise} Context object\n */\nMocha.prototype.runGlobalTeardown = async function runGlobalTeardown(\n context = {}\n) {\n const {globalTeardown} = this.options;\n if (globalTeardown && globalTeardown.length) {\n debug('run(): global teardown starting');\n await this._runGlobalFixtures(globalTeardown, context);\n }\n debug('run(): global teardown complete');\n return context;\n};\n\n/**\n * Run global fixtures sequentially with context `context`\n * @private\n * @param {MochaGlobalFixture[]} [fixtureFns] - Fixtures to run\n * @param {object} [context] - context object\n * @returns {Promise} context object\n */\nMocha.prototype._runGlobalFixtures = async function _runGlobalFixtures(\n fixtureFns = [],\n context = {}\n) {\n for await (const fixtureFn of fixtureFns) {\n await fixtureFn.call(context);\n }\n return context;\n};\n\n/**\n * Toggle execution of any global setup fixture(s)\n *\n * @chainable\n * @public\n * @param {boolean } [enabled=true] - If `false`, do not run global setup fixture\n * @returns {Mocha}\n */\nMocha.prototype.enableGlobalSetup = function enableGlobalSetup(enabled = true) {\n this.options.enableGlobalSetup = Boolean(enabled);\n return this;\n};\n\n/**\n * Toggle execution of any global teardown fixture(s)\n *\n * @chainable\n * @public\n * @param {boolean } [enabled=true] - If `false`, do not run global teardown fixture\n * @returns {Mocha}\n */\nMocha.prototype.enableGlobalTeardown = function enableGlobalTeardown(\n enabled = true\n) {\n this.options.enableGlobalTeardown = Boolean(enabled);\n return this;\n};\n\n/**\n * Returns `true` if one or more global setup fixtures have been supplied.\n * @public\n * @returns {boolean}\n */\nMocha.prototype.hasGlobalSetupFixtures = function hasGlobalSetupFixtures() {\n return Boolean(this.options.globalSetup.length);\n};\n\n/**\n * Returns `true` if one or more global teardown fixtures have been supplied.\n * @public\n * @returns {boolean}\n */\nMocha.prototype.hasGlobalTeardownFixtures =\n function hasGlobalTeardownFixtures() {\n return Boolean(this.options.globalTeardown.length);\n };\n\n/**\n * An alternative way to define root hooks that works with parallel runs.\n * @typedef {Object} MochaRootHookObject\n * @property {Function|Function[]} [beforeAll] - \"Before all\" hook(s)\n * @property {Function|Function[]} [beforeEach] - \"Before each\" hook(s)\n * @property {Function|Function[]} [afterAll] - \"After all\" hook(s)\n * @property {Function|Function[]} [afterEach] - \"After each\" hook(s)\n */\n\n/**\n * An function that returns a {@link MochaRootHookObject}, either sync or async.\n @callback MochaRootHookFunction\n * @returns {MochaRootHookObject|Promise}\n */\n\n/**\n * A function that's invoked _once_ which is either sync or async.\n * Can be a \"teardown\" or \"setup\". These will all share the same context.\n * @callback MochaGlobalFixture\n * @returns {void|Promise}\n */\n\n/**\n * An object making up all necessary parts of a plugin loader and aggregator\n * @typedef {Object} PluginDefinition\n * @property {string} exportName - Named export to use\n * @property {string} [optionName] - Option name for Mocha constructor (use `exportName` if omitted)\n * @property {PluginValidator} [validate] - Validator function\n * @property {PluginFinalizer} [finalize] - Finalizer/aggregator function\n */\n\n/**\n * A (sync) function to assert a user-supplied plugin implementation is valid.\n *\n * Defined in a {@link PluginDefinition}.\n\n * @callback PluginValidator\n * @param {*} value - Value to check\n * @this {PluginDefinition}\n * @returns {void}\n */\n\n/**\n * A function to finalize plugins impls of a particular ilk\n * @callback PluginFinalizer\n * @param {Array<*>} impls - User-supplied implementations\n * @returns {Promise<*>|*}\n */\n","'use strict';\n\n/* eslint no-unused-vars: off */\n/* eslint-env commonjs */\n\n/**\n * Shim process.stdout.\n */\n\nprocess.stdout = require('browser-stdout')({label: false});\n\nvar parseQuery = require('./lib/browser/parse-query');\nvar highlightTags = require('./lib/browser/highlight-tags');\nvar Mocha = require('./lib/mocha');\n\n/**\n * Create a Mocha instance.\n *\n * @return {undefined}\n */\n\nvar mocha = new Mocha({reporter: 'html'});\n\n/**\n * Save timer references to avoid Sinon interfering (see GH-237).\n */\n\nvar Date = global.Date;\nvar setTimeout = global.setTimeout;\nvar setInterval = global.setInterval;\nvar clearTimeout = global.clearTimeout;\nvar clearInterval = global.clearInterval;\n\nvar uncaughtExceptionHandlers = [];\n\nvar originalOnerrorHandler = global.onerror;\n\n/**\n * Remove uncaughtException listener.\n * Revert to original onerror handler if previously defined.\n */\n\nprocess.removeListener = function (e, fn) {\n if (e === 'uncaughtException') {\n if (originalOnerrorHandler) {\n global.onerror = originalOnerrorHandler;\n } else {\n global.onerror = function () {};\n }\n var i = uncaughtExceptionHandlers.indexOf(fn);\n if (i !== -1) {\n uncaughtExceptionHandlers.splice(i, 1);\n }\n }\n};\n\n/**\n * Implements listenerCount for 'uncaughtException'.\n */\n\nprocess.listenerCount = function (name) {\n if (name === 'uncaughtException') {\n return uncaughtExceptionHandlers.length;\n }\n return 0;\n};\n\n/**\n * Implements uncaughtException listener.\n */\n\nprocess.on = function (e, fn) {\n if (e === 'uncaughtException') {\n global.onerror = function (err, url, line) {\n fn(new Error(err + ' (' + url + ':' + line + ')'));\n return !mocha.options.allowUncaught;\n };\n uncaughtExceptionHandlers.push(fn);\n }\n};\n\nprocess.listeners = function (e) {\n if (e === 'uncaughtException') {\n return uncaughtExceptionHandlers;\n }\n return [];\n};\n\n// The BDD UI is registered by default, but no UI will be functional in the\n// browser without an explicit call to the overridden `mocha.ui` (see below).\n// Ensure that this default UI does not expose its methods to the global scope.\nmocha.suite.removeAllListeners('pre-require');\n\nvar immediateQueue = [];\nvar immediateTimeout;\n\nfunction timeslice() {\n var immediateStart = new Date().getTime();\n while (immediateQueue.length && new Date().getTime() - immediateStart < 100) {\n immediateQueue.shift()();\n }\n if (immediateQueue.length) {\n immediateTimeout = setTimeout(timeslice, 0);\n } else {\n immediateTimeout = null;\n }\n}\n\n/**\n * High-performance override of Runner.immediately.\n */\n\nMocha.Runner.immediately = function (callback) {\n immediateQueue.push(callback);\n if (!immediateTimeout) {\n immediateTimeout = setTimeout(timeslice, 0);\n }\n};\n\n/**\n * Function to allow assertion libraries to throw errors directly into mocha.\n * This is useful when running tests in a browser because window.onerror will\n * only receive the 'message' attribute of the Error.\n */\nmocha.throwError = function (err) {\n uncaughtExceptionHandlers.forEach(function (fn) {\n fn(err);\n });\n throw err;\n};\n\n/**\n * Override ui to ensure that the ui functions are initialized.\n * Normally this would happen in Mocha.prototype.loadFiles.\n */\n\nmocha.ui = function (ui) {\n Mocha.prototype.ui.call(this, ui);\n this.suite.emit('pre-require', global, null, this);\n return this;\n};\n\n/**\n * Setup mocha with the given setting options.\n */\n\nmocha.setup = function (opts) {\n if (typeof opts === 'string') {\n opts = {ui: opts};\n }\n if (opts.delay === true) {\n this.delay();\n }\n var self = this;\n Object.keys(opts)\n .filter(function (opt) {\n return opt !== 'delay';\n })\n .forEach(function (opt) {\n if (Object.prototype.hasOwnProperty.call(opts, opt)) {\n self[opt](opts[opt]);\n }\n });\n return this;\n};\n\n/**\n * Run mocha, returning the Runner.\n */\n\nmocha.run = function (fn) {\n var options = mocha.options;\n mocha.globals('location');\n\n var query = parseQuery(global.location.search || '');\n if (query.grep) {\n mocha.grep(query.grep);\n }\n if (query.fgrep) {\n mocha.fgrep(query.fgrep);\n }\n if (query.invert) {\n mocha.invert();\n }\n\n return Mocha.prototype.run.call(mocha, function (err) {\n // The DOM Document is not available in Web Workers.\n var document = global.document;\n if (\n document &&\n document.getElementById('mocha') &&\n options.noHighlighting !== true\n ) {\n highlightTags('code');\n }\n if (fn) {\n fn(err);\n }\n });\n};\n\n/**\n * Expose the process shim.\n * https://github.com/mochajs/mocha/pull/916\n */\n\nMocha.process = process;\n\n/**\n * Expose mocha.\n */\nglobal.Mocha = Mocha;\nglobal.mocha = mocha;\n\n// for bundlers: enable `import {describe, it} from 'mocha'`\n// `bdd` interface only\n// prettier-ignore\n[ \n 'describe', 'context', 'it', 'specify',\n 'xdescribe', 'xcontext', 'xit', 'xspecify',\n 'before', 'beforeEach', 'afterEach', 'after'\n].forEach(function(key) {\n mocha[key] = global[key];\n});\n\nmodule.exports = mocha;\n"],"names":["global","call","NATIVE_BIND","$propertyIsEnumerable","getOwnPropertyDescriptor","f","FunctionPrototype","bind","toString","uncurryThis","stringSlice","Object","classof","TypeError","IndexedObject","isObject","process","versions","version","userAgent","V8_VERSION","NATIVE_SYMBOL","isSymbol","USE_SYMBOL_AS_UID","isPrototypeOf","String","defineProperty","store","hasOwnProperty","WellKnownSymbolsStore","Symbol","hasOwn","TO_PRIMITIVE","document","EXISTS","DESCRIPTORS","createElement","$getOwnPropertyDescriptor","IE8_DOM_DEFINE","propertyIsEnumerableModule","$defineProperty","CONFIGURABLE","V8_PROTOTYPE_DEFINE_BUG","definePropertyModule","functionToString","WeakMap","keys","hiddenKeys","set","get","NATIVE_WEAK_MAP","shared","require$$0","InternalStateModule","floor","max","min","createMethod","indexOf","push","internalObjectKeys","concat","ownKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","getOwnPropertyDescriptorModule","normalize","isForced","isArray","TO_STRING_TAG","test","TO_STRING_TAG_SUPPORT","noop","exec","SPECIES","Array","HAS_SPECIES_SUPPORT","MAX_SAFE_INTEGER","$","objectToString","$forEach","STRICT_METHOD","handlePrototype","forEach","COLLECTION_NAME","DOMIterables","DOMTokenListPrototype","$filter","FAILS_ON_PRIMITIVES","nativeKeys","$RegExp","UNSUPPORTED_Y","MISSED_STICKY","html","PROTOTYPE","IE_PROTO","definePropertiesModule","getInternalState","charAt","replace","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","create","RegExpPrototype","fixRegExpWellKnownSymbolLogic","regExpExec","FORCED","self","window","defaultSetTimout","Error","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","setTimeout","clearTimeout","runTimeout","fun","e","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","length","drainQueue","timeout","len","run","nextTick","args","arguments","i","Item","array","prototype","apply","title","platform","browser","env","argv","release","config","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","performance","performanceNow","now","mozNow","msNow","oNow","webkitNow","Date","getTime","hrtime","previousTimestamp","clocktime","seconds","Math","nanoseconds","startTime","uptime","currentTime","dif","PROPER_FUNCTION_NAME","getFlags","regExpFlags","$toString","ObjectPrototype","CORRECT_PROTOTYPE_GETTER","nativeGetPrototypeOf","require$$1","NAME","domain","EventHandlers","EventEmitter","init","usingDomains","undefined","_events","_maxListeners","defaultMaxListeners","active","getPrototypeOf","_eventsCount","setMaxListeners","n","isNaN","$getMaxListeners","that","getMaxListeners","emitNone","handler","isFn","listeners","arrayClone","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","type","er","events","doError","error","domainEmitter","domainThrown","err","context","_addListener","target","listener","prepend","m","existing","newListener","unshift","warned","w","emitter","count","emitWarning","console","warn","log","prependListener","_onceWrap","fired","g","prependOnceListener","list","position","originalListener","spliceOne","key","evlistener","ret","unwrapListeners","listenerCount","eventNames","Reflect","index","k","pop","arr","copy","charCodeAt","stringIndexOf","setPrototypeOf","getOwnPropertyNames","require$$2","require$$3","arraySlice","j","MATCH","isRegExp","$getOwnPropertyNames","$map","nativeGetOwnPropertyDescriptor","callRegExpExec","ArrayPrototype","ITERATOR","BUGGY_SAFARI_ITERATORS","IteratorPrototype","returnThis","Iterators","FunctionName","CONFIGURABLE_FUNCTION_NAME","IteratorsCore","setInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","TypedArrayPrototype","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","NATIVE_ARRAY_BUFFER","aTypedArray","aTypedArrayConstructor","exportTypedArrayMethod","ArrayBuffer","RangeError","pow","ARRAY_BUFFER","NativeArrayBuffer","IEEE754","ArrayBufferModule","ArrayBufferViewCore","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","createTypedArrayConstructor","$ArrayCopyWithin","$fill","fromSpeciesAndList","$includes","Uint8Array","ArrayIterators","$lastIndexOf","toIndexedObject","UA","un$Sort","STABLE_SORT","V8","FF","IE_OR_EDGE","WEBKIT","getSortCompare","internalSort","join","arrayBufferModule","path","wrappedWellKnownSymbolModule","SymbolPrototype","getOwnPropertyNamesExternal","nativeObjectCreate","fill","un$Slice","correctIsRegExpLogic","notARegExp","forcedStringTrimMethod","lookup","revLookup","Arr","inited","code","toByteArray","b64","l","tmp","placeHolders","L","tripletToBase64","num","encodeChunk","uint8","start","end","output","fromByteArray","extraBytes","parts","maxChunkLength","len2","read","buffer","offset","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","write","value","c","rt","abs","LN2","INSPECT_MAX_BYTES","Buffer","TYPED_ARRAY_SUPPORT","kMaxLength","createBuffer","__proto__","arg","encodingOrOffset","allocUnsafe","from","poolSize","_augment","fromArrayBuffer","fromString","fromObject","assertSize","size","alloc","encoding","checked","allocUnsafeSlow","string","isEncoding","byteLength","actual","slice","fromArrayLike","byteOffset","obj","internalIsBuffer","isnan","data","isBuffer","b","_isBuffer","compare","a","x","y","toLowerCase","pos","buf","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","swap16","swap32","swap64","equals","inspect","str","match","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","includes","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","base64","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","out","toHex","bytes","newBuf","subarray","sliceLen","checkOffset","ext","readUIntLE","noAssert","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","ieee754","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","objectWriteUInt16","littleEndian","writeUInt16LE","writeUInt16BE","objectWriteUInt32","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","trim","units","leadSurrogate","byteArray","hi","lo","src","dst","isFastBuffer","isSlowBuffer","constructor","browser$1","inherits","ctor","superCtor","super_","enumerable","writable","configurable","TempCtor","formatRegExp","format","isString","objects","JSON","stringify","_","isNull","deprecate","fn","msg","isUndefined","noDeprecation","deprecated","throwDeprecation","traceDeprecation","trace","debugs","debugEnviron","debuglog","NODE_DEBUG","toUpperCase","RegExp","pid","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styles","styleType","style","arrayToHash","hash","idx","recurseTimes","isFunction","primitive","formatPrimitive","visibleKeys","isError","formatError","isDate","base","braces","toUTCString","formatArray","map","formatProperty","reduceToSingleString","simple","isNumber","desc","split","line","reduce","prev","cur","numLinesEst","ar","isNullOrUndefined","re","isPrimitive","maybeBuf","Buffer.isBuffer","o","pad","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","origin","add","prop","BufferList","head","tail","v","entry","next","shift","clear","p","isBufferEncoding","assertEncoding","StringDecoder","surrogateSize","detectIncompleteChar","utf16DetectIncompleteChar","base64DetectIncompleteChar","passThroughWrite","charBuffer","charReceived","charLength","charStr","available","charCode","substring","cr","enc","Readable","ReadableState","debug","event","options","stream","objectMode","Duplex","readableObjectMode","hwm","highWaterMark","defaultHwm","pipes","pipesCount","flowing","ended","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","defaultEncoding","ranOut","awaitDrain","readingMore","decoder","_readableState","readable","_read","chunk","state","readableAddChunk","isPaused","addToFront","chunkInvalid","onEofChunk","_e","skipAdd","emitReadable","maybeReadMore","needMoreData","setEncoding","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","fromList","emitReadable_","flow","maybeReadMore_","pipe","dest","pipeOpts","doEnd","endFn","onend","cleanup","onunpipe","ondrain","pipeOnDrain","cleanedUp","onclose","onfinish","onerror","ondata","_writableState","needDrain","increasedAwaitDrain","pause","unpipe","resume","dests","_i","splice","ev","nReadingNextTick","resume_","wrap","paused","method","_fromList","fromListPartial","hasStrings","copyFromBufferString","copyFromBuffer","nb","endReadableNT","xs","Writable","WritableState","nop","WriteReq","cb","callback","getBuffer","writableObjectMode","ending","finished","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writecb","writelen","bufferedRequest","lastBufferedRequest","pendingcb","prefinished","errorEmitted","bufferedRequestCount","corkedRequestsFree","CorkedRequest","writableStateGetBuffer","current","_write","writev","_writev","writeAfterEnd","validChunk","valid","writeOrBuffer","cork","uncork","clearBuffer","setDefaultEncoding","decodeChunk","last","doWrite","onwriteError","onwriteStateUpdate","needFinish","afterWrite","onwriteDrain","finishMaybe","holder","finish","endWritable","prefinish","need","_this","allowHalfOpen","onEndNT","Transform","TransformState","afterTransform","needTransform","transforming","writechunk","writeencoding","ts","_transformState","rs","transform","_transform","flush","_flush","done","ws","PassThrough","Stream","EE","source","_isStdio","didOnEnd","destroy","WritableStream","browserStdout","BrowserStdout","label","chunks","process.nextTick","parseQuery","qs","pair","decodeURIComponent","highlight","js","highlightTags","getElementById","getElementsByTagName","innerHTML","ArrayIteratorMethods","Function","location","runner","IS_NODE","IS_IOS","task","Promise","notify","IS_WEBOS_WEBKIT","IS_IOS_PEBBLE","newPromiseCapability","NativePromise","newPromiseCapabilityModule","IS_BROWSER","INCORRECT_ITERATION","Queue","runtime","exports","Op","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","values","Gp","displayName","defineIteratorMethods","isGeneratorFunction","genFun","mark","awrap","__await","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","then","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","async","iter","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","object","reverse","iterable","iteratorMethod","skipTempReset","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","escapeStringRegexp","normalizeArray","allowAboveRoot","up","splitPathRe","splitPath","filename","resolvedPath","resolvedAbsolute","filter","isPathAbsolute","isAbsolute","trailingSlash","paths","relative","to","fromParts","toParts","samePartsLength","outputParts","sep","delimiter","dirname","root","basename","extname","factory","this","Diff","diff","oldString","newString","castInput","removeEmpty","tokenize","newLen","oldLen","editLength","maxEditLength","bestPath","newPos","components","oldPos","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","_oldPos","canAdd","canRemove","clonePath","pushComponent","buildValues","useLongestToken","added","removed","commonCount","left","right","comparator","ignoreCase","chars","componentPos","componentLen","component","oldValue","lastComponent","characterDiff","diffChars","oldStr","newStr","generateOptions","defaults","extendedWordChars","reWhitespace","wordDiff","ignoreWhitespace","tokens","diffWords","diffWordsWithSpace","lineDiff","retLines","linesAndNewlines","newlineIsToken","diffLines","diffTrimmedLines","sentenceDiff","diffSentences","cssDiff","diffCss","_typeof","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","minLen","arr2","objectPrototypeToString","jsonDiff","_this$options","undefinedReplacement","_this$options$stringi","stringifyReplacer","canonicalize","diffJson","oldObj","newObj","stack","replacementStack","replacer","canonicalizedObj","sortedKeys","_key","sort","arrayDiff","diffArrays","oldArr","newArr","parsePatch","uniDiff","diffstr","delimiters","parseIndex","header","parseFileHeader","hunks","_line","parseHunk","strict","fileHeader","keyPrefix","fileName","chunkHeaderIndex","chunkHeaderLine","chunkHeader","hunk","oldStart","oldLines","newStart","newLines","lines","linedelimiters","addCount","removeCount","operation","distanceIterator","minLine","maxLine","wantForward","backwardExhausted","forwardExhausted","localOffset","applyPatch","compareLine","lineNumber","patchContent","errorCount","fuzzFactor","removeEOFNL","addEOFNL","hunkFits","toPos","content","diffOffset","_hunk","_toPos","previousOperation","_k","applyPatches","currentIndex","processIndex","loadFile","updatedContent","patched","structuredPatch","oldFileName","newFileName","oldHeader","newHeader","contextLines","oldRangeStart","newRangeStart","curRange","oldLine","newLine","_loop","_curRange","_curRange2","_curRange3","contextSize","oldEOFNewline","newEOFNewline","noNlBeforeAdds","formatPatch","createTwoFilesPatch","createPatch","arrayEqual","arrayStartsWith","calcLineCount","_calcOldNewLineCount","calcOldNewLineCount","merge","mine","theirs","loadPatch","fileNameChanged","selectField","mineIndex","theirsIndex","mineOffset","theirsOffset","mineCurrent","theirsCurrent","hunkBefore","cloneHunk","mergedHunk","mergeLines","param","patch","conflict","check","mineLines","theirOffset","theirLines","their","insertLeading","theirCurrent","mutualChange","_hunk$lines","collectChange","_hunk$lines2","removal","insertTrailing","myChanges","theirChanges","allRemoves","skipRemoveSuperset","_hunk$lines3","_hunk$lines4","_hunk$lines5","collectContext","merged","_hunk$lines6","insert","matchChanges","changes","matchIndex","contextChanges","conflicted","change","removeChanges","delta","changeContent","myCount","theirCount","convertChangesToDMP","convertChangesToXML","escapeHTML","h","ms","parse","fmtLong","fmtShort","parseFloat","msAbs","round","plural","isPlural","ARRAY_BUFFER_NON_EXTENSIBLE","isExtensible","FREEZING","getOwnPropertyNamesExternalModule","InternalMetadataModule","assign","urlAlphabet","customAlphabet","alphabet","defaultSize","id","random","nanoid","freeExports","freeModule","freeGlobal","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","has","propertyName","contains","codePointToSymbol","parseError","hexEscape","decEscape","message","encode","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","decimal","escapeBmpSymbol","symbol","$0","high","low","decode","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","isAttributeValue","escape","he","nodeType","MOCHA_ID_PROP_NAME","util","slug","clean","spaces","tabs","emptyRepresentation","typeHint","canonicalType","primitives","Set","_type","json","jsonStringify","acc","char","_stringify","space","repeat","sDate","toISOString","withStack","item","stackTraceFilter","is","node","slash","href","isMochaInternal","isNodeInternal","isPromise","clamp","range","createMap","defineConstants","freeze","isBrowser","Boolean","process.browser","castArray","constants","uniqueID","assignNewMochaID","getMochaID","success","warning","pending","Pending","setup","createDebug","coerce","disable","enable","enabled","humanize","names","skips","formatters","selectColor","namespace","prevTime","enableOverride","namespacesCache","enabledCache","curr","formatter","formatArgs","logFn","useColors","color","extend","namespaces","newDebug","save","toNamespace","regexp","load","common","storage","localstorage","__nwjs","navigator","documentElement","WebkitAppearance","firebug","table","lastC","setItem","removeItem","r","getItem","DEBUG","localStorage","cache","FATAL","INVALID_ARG_TYPE","INVALID_ARG_VALUE","INVALID_EXCEPTION","INVALID_INTERFACE","INVALID_REPORTER","MULTIPLE_DONE","NO_FILES_MATCH_PATTERN","UNSUPPORTED","INSTANCE_ALREADY_RUNNING","INSTANCE_ALREADY_DISPOSED","FORBIDDEN_EXCLUSIVITY","INVALID_PLUGIN_IMPLEMENTATION","INVALID_PLUGIN_DEFINITION","TIMEOUT","UNPARSABLE_FILE","MOCHA_ERRORS","createNoFilesMatchPatternError","pattern","createInvalidReporterError","reporter","createInvalidInterfaceError","ui","createUnsupportedError","createMissingArgumentError","argument","expected","createInvalidArgumentTypeError","createInvalidArgumentValueError","reason","createInvalidExceptionError","valueType","createFatalError","createInvalidLegacyPluginError","pluginType","pluginId","createInvalidPluginError","createMochaInstanceAlreadyDisposedError","cleanReferencesAfterRun","instance","createMochaInstanceAlreadyRunningError","createMultipleDoneError","runnable","originalErr","fullTitle","parent","ignored","file","createForbiddenExclusivityError","mocha","isWorker","createInvalidPluginDefinitionError","pluginDef","createInvalidPluginImplementationError","pluginImpl","createTimeoutError","createUnparsableFileError","isMochaError","errors","Runnable","body","_timeout","_slow","_retries","utils","timedOut","_currentRetry","milliseconds","INT_MAX","timer","resetTimeout","slow","skip","isPending","isFailed","STATE_FAILED","isPassed","STATE_PASSED","retries","currentRetry","titlePath","_timeoutError","globals","_allowedGlobals","errorWasHandled","multiple","duration","asyncSkip","callFnAsync","allowUncaught","toValueOrError","callFn","asyncOnly","STATE_PENDING","hook","Hook","_error","serialize","$$currentRetry","$$fullTitle","$$isPending","$$titlePath","currentTest","utilsConstants","Suite","suite","addSuite","parentContext","isRoot","suites","tests","_beforeEach","_beforeAll","_afterEach","_afterAll","_bail","_onlyTests","_onlySuites","delayed","doReset","thingToReset","clone","bail","_createHook","beforeAll","EVENT_SUITE_ADD_HOOK_BEFORE_ALL","afterAll","EVENT_SUITE_ADD_HOOK_AFTER_ALL","beforeEach","EVENT_SUITE_ADD_HOOK_BEFORE_EACH","afterEach","EVENT_SUITE_ADD_HOOK_AFTER_EACH","EVENT_SUITE_ADD_SUITE","addTest","EVENT_SUITE_ADD_TEST","total","sum","eachTest","EVENT_ROOT_SUITE_RUN","hasOnly","some","filterOnly","onlySuite","onlySuites","childSuite","appendOnlySuite","markOnly","appendOnlyTest","getHooks","dispose","cleanReferences","cleanArrReferences","EVENT_FILE_POST_REQUIRE","EVENT_FILE_PRE_REQUIRE","EVENT_FILE_REQUIRE","HOOK_TYPE_AFTER_ALL","HOOK_TYPE_AFTER_EACH","HOOK_TYPE_BEFORE_ALL","HOOK_TYPE_BEFORE_EACH","stackFilter","errorConstants","EVENT_HOOK_BEGIN","EVENT_HOOK_END","EVENT_RUN_BEGIN","EVENT_DELAY_BEGIN","EVENT_DELAY_END","EVENT_RUN_END","EVENT_SUITE_BEGIN","EVENT_SUITE_END","EVENT_TEST_BEGIN","EVENT_TEST_END","EVENT_TEST_FAIL","EVENT_TEST_PASS","EVENT_TEST_PENDING","EVENT_TEST_RETRY","STATE_IDLE","STATE_RUNNING","STATE_STOPPED","Runner","_delay","delay","_globals","_abort","_opts","failures","_eventListeners","Map","retriedTest","checkGlobals","_defaultGrep","grep","globalProps","uncaught","_uncaught","unhandled","promise","_removeEventListener","_addEventListener","immediately","setImmediate","eventName","targetListeners","targetEventListeners","invert","_grep","_invert","grepTotal","props","checkLeaks","ok","leaks","prevGlobalsLength","filterLeaks","fail","force","thrown2Error","fullStackTrace","ignore","dryRun","hooks","currentRunnable","setHookTitle","cbHookRun","testError","errForbid","originalTitle","parentTitle","orig","errSuite","hookUp","parents","hookDown","runTest","runTests","hookErr","after","err2","errSuite2","forbidPending","origSuite","eSuite","retry","clonedTest","runSuite","nextSuite","abort","rootSuite","failZero","begin","prepare","linkPartialObjects","runAsync","isParallelMode","workerReporter","matched","getBrowserWindowSize","innerHeight","innerWidth","Base","isatty","stdout","isTTY","stderr","consoleLog","supportsColor","MOCHA_COLORS","inlineDiffs","maxDiffSize","pass","checkmark","fast","medium","green","light","symbols","dot","comma","bang","width","getWindowSize","cursor","hide","show","deleteLine","beginningOfLine","CR","showDiff","sameType","stringifyDiffObjs","generateDiff","maxLen","skipped","inlineDiff","unifiedDiff","multipleErr","multipleTest","fmt","hideDiff","testTitle","stats","maxDiffSizeOpt","reporterOption","speed","epilogue","passes","errorDiff","indent","cleanUp","colorLines","notBlank","objToString","Dot","description","Doc","indents","sprintf","TAP","tapVersion","reporterOptions","_producer","createProducer","writeVersion","writePending","writePass","writeFail","writeEpilogue","println","varArgs","vargs","producers","TAP12Producer","TAP13Producer","producer","TAPProducer","writePlan","ntests","emitYamlBlock","level","JSONReporter","testResults","fs","mkdirSync","recursive","writeFileSync","errorJSON","cleanCycles","$repeat","progress","Progress","percent","fontSize","font","_size","text","_text","_fontSize","family","_font","update","draw","half","rad","angle","PI","clearRect","strokeStyle","beginPath","arc","stroke","measureText","fillText","HTML","statsTemplate","playIcon","stat","fragment","items","passesLink","failuresLink","canvas","report","getContext","ratio","devicePixelRatio","height","scale","evt","preventDefault","unhide","className","hideSuitesWithout","appendChild","url","suiteURL","el","updateStats","testURL","markup","addCodeToggle","appendToStack","stackString","indexOfMessage","sourceURL","htmlMessage","toFixed","makeUrl","search","pathname","encodeURIComponent","escapeRe","contents","h2","pre","display","div","firstChild","classname","getElementsByClassName","els","textContent","innerText","addEventListener","attachEvent","browserOnly","List","Min","Spec","NyanCat","nyanCatWidth","colorIndex","numberOfLines","rainbowColors","generateColors","scoreboardWidth","tick","trajectories","trajectoryWidthMax","appendRainbow","drawScoreboard","drawRainbow","drawNyanCat","cursorUp","segment","rainbowified","rainbowify","trajectory","startWidth","dist","padding","face","cursorDown","pi3","sin","XUnit","suiteName","DEFAULT_SUITE_NAME","createWriteStream","fileStream","tag","t","attrs","close","pairs","SUITE_PREFIX","Markdown","mapTOC","stringifyTOC","link","generateTOC","lastN","open","incomplete","verbose","Landing","plane","runway","crashed","col","kill","JSONStream","writeEvent","doc","tap","require$$4","require$$5","require$$6","require$$7","spec","require$$8","Nyan","nyan","require$$9","xunit","require$$10","markdown","require$$11","require$$12","landing","require$$13","require$$14","isCapable","hasNotificationSupport","hasPromiseSupport","isPermitted","sendNotification","race","canNotify","notPermitted","permitted","granted","allow","denied","deny","ask","Notification","requestPermission","permission","why","cross","logo","notifyLogo","_message","badge","icon","lang","requireInteraction","notification","FORCE_DURATION","createStatsCollector","statsCollector","Test","_retriedTest","$$retriedTest","$$slow","shouldBeTested","runWithSuite","before","only","forbidOnly","isOnly","bdd","bddInterface","describe","xdescribe","xcontext","it","specify","xit","xspecify","tdd","teardown","suiteSetup","suiteTeardown","qunit","qUnitInterface","visit","_runnable","Mocha","mochaStates","INIT","RUNNING","REFERENCES_CLEANED","DISPOSED","interfaces","reporters","builtinReporters","currentContext","_objectSpread","mocharc","files","_cleanReferencesAfterRun","_state","fgrep","opt","rootHooks","_runnerClass","_lazyLoadFiles","globalSetup","globalTeardown","enableGlobalSetup","enableGlobalTeardown","parallel","jobs","parallelMode","addFile","reporterName","_reporter","foundReporter","require","bindInterface","loadFiles","loadFilesAsync","lazyLoadFiles","esmUtils","resultModule","unloadFile","unloadFiles","_previousRunner","fullTrace","growl","isGrowlCapable","detail","_growl","elt","msecs","noHighlighting","_guardRunningStateTransition","hasGlobalSetupFixtures","runGlobalSetup","failureCount","hasGlobalTeardownFixtures","runGlobalTeardown","setupFns","teardownFns","_runGlobalFixtures","fixtureFns","fixtureFn","setInterval","clearInterval","uncaughtExceptionHandlers","originalOnerrorHandler","immediateQueue","immediateTimeout","timeslice","immediateStart","throwError","query","browserEntry"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/mocha/node_modules/.bin/mkdirp b/build/node_modules/mocha/node_modules/.bin/mkdirp deleted file mode 120000 index 017896ce..00000000 --- a/build/node_modules/mocha/node_modules/.bin/mkdirp +++ /dev/null @@ -1 +0,0 @@ -../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/build/node_modules/mocha/node_modules/debug/.jshintrc b/build/node_modules/mocha/node_modules/debug/.jshintrc deleted file mode 100644 index 299877f2..00000000 --- a/build/node_modules/mocha/node_modules/debug/.jshintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "laxbreak": true -} diff --git a/build/node_modules/mocha/node_modules/debug/.npmignore b/build/node_modules/mocha/node_modules/debug/.npmignore deleted file mode 100644 index 7e6163db..00000000 --- a/build/node_modules/mocha/node_modules/debug/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -support -test -examples -example -*.sock -dist diff --git a/build/node_modules/mocha/node_modules/debug/History.md b/build/node_modules/mocha/node_modules/debug/History.md deleted file mode 100644 index 854c9711..00000000 --- a/build/node_modules/mocha/node_modules/debug/History.md +++ /dev/null @@ -1,195 +0,0 @@ - -2.2.0 / 2015-05-09 -================== - - * package: update "ms" to v0.7.1 (#202, @dougwilson) - * README: add logging to file example (#193, @DanielOchoa) - * README: fixed a typo (#191, @amir-s) - * browser: expose `storage` (#190, @stephenmathieson) - * Makefile: add a `distclean` target (#189, @stephenmathieson) - -2.1.3 / 2015-03-13 -================== - - * Updated stdout/stderr example (#186) - * Updated example/stdout.js to match debug current behaviour - * Renamed example/stderr.js to stdout.js - * Update Readme.md (#184) - * replace high intensity foreground color for bold (#182, #183) - -2.1.2 / 2015-03-01 -================== - - * dist: recompile - * update "ms" to v0.7.0 - * package: update "browserify" to v9.0.3 - * component: fix "ms.js" repo location - * changed bower package name - * updated documentation about using debug in a browser - * fix: security error on safari (#167, #168, @yields) - -2.1.1 / 2014-12-29 -================== - - * browser: use `typeof` to check for `console` existence - * browser: check for `console.log` truthiness (fix IE 8/9) - * browser: add support for Chrome apps - * Readme: added Windows usage remarks - * Add `bower.json` to properly support bower install - -2.1.0 / 2014-10-15 -================== - - * node: implement `DEBUG_FD` env variable support - * package: update "browserify" to v6.1.0 - * package: add "license" field to package.json (#135, @panuhorsmalahti) - -2.0.0 / 2014-09-01 -================== - - * package: update "browserify" to v5.11.0 - * node: use stderr rather than stdout for logging (#29, @stephenmathieson) - -1.0.4 / 2014-07-15 -================== - - * dist: recompile - * example: remove `console.info()` log usage - * example: add "Content-Type" UTF-8 header to browser example - * browser: place %c marker after the space character - * browser: reset the "content" color via `color: inherit` - * browser: add colors support for Firefox >= v31 - * debug: prefer an instance `log()` function over the global one (#119) - * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) - -1.0.3 / 2014-07-09 -================== - - * Add support for multiple wildcards in namespaces (#122, @seegno) - * browser: fix lint - -1.0.2 / 2014-06-10 -================== - - * browser: update color palette (#113, @gscottolson) - * common: make console logging function configurable (#108, @timoxley) - * node: fix %o colors on old node <= 0.8.x - * Makefile: find node path using shell/which (#109, @timoxley) - -1.0.1 / 2014-06-06 -================== - - * browser: use `removeItem()` to clear localStorage - * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) - * package: add "contributors" section - * node: fix comment typo - * README: list authors - -1.0.0 / 2014-06-04 -================== - - * make ms diff be global, not be scope - * debug: ignore empty strings in enable() - * node: make DEBUG_COLORS able to disable coloring - * *: export the `colors` array - * npmignore: don't publish the `dist` dir - * Makefile: refactor to use browserify - * package: add "browserify" as a dev dependency - * Readme: add Web Inspector Colors section - * node: reset terminal color for the debug content - * node: map "%o" to `util.inspect()` - * browser: map "%j" to `JSON.stringify()` - * debug: add custom "formatters" - * debug: use "ms" module for humanizing the diff - * Readme: add "bash" syntax highlighting - * browser: add Firebug color support - * browser: add colors for WebKit browsers - * node: apply log to `console` - * rewrite: abstract common logic for Node & browsers - * add .jshintrc file - -0.8.1 / 2014-04-14 -================== - - * package: re-add the "component" section - -0.8.0 / 2014-03-30 -================== - - * add `enable()` method for nodejs. Closes #27 - * change from stderr to stdout - * remove unnecessary index.js file - -0.7.4 / 2013-11-13 -================== - - * remove "browserify" key from package.json (fixes something in browserify) - -0.7.3 / 2013-10-30 -================== - - * fix: catch localStorage security error when cookies are blocked (Chrome) - * add debug(err) support. Closes #46 - * add .browser prop to package.json. Closes #42 - -0.7.2 / 2013-02-06 -================== - - * fix package.json - * fix: Mobile Safari (private mode) is broken with debug - * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript - -0.7.1 / 2013-02-05 -================== - - * add repository URL to package.json - * add DEBUG_COLORED to force colored output - * add browserify support - * fix component. Closes #24 - -0.7.0 / 2012-05-04 -================== - - * Added .component to package.json - * Added debug.component.js build - -0.6.0 / 2012-03-16 -================== - - * Added support for "-" prefix in DEBUG [Vinay Pulim] - * Added `.enabled` flag to the node version [TooTallNate] - -0.5.0 / 2012-02-02 -================== - - * Added: humanize diffs. Closes #8 - * Added `debug.disable()` to the CS variant - * Removed padding. Closes #10 - * Fixed: persist client-side variant again. Closes #9 - -0.4.0 / 2012-02-01 -================== - - * Added browser variant support for older browsers [TooTallNate] - * Added `debug.enable('project:*')` to browser variant [TooTallNate] - * Added padding to diff (moved it to the right) - -0.3.0 / 2012-01-26 -================== - - * Added millisecond diff when isatty, otherwise UTC string - -0.2.0 / 2012-01-22 -================== - - * Added wildcard support - -0.1.0 / 2011-12-02 -================== - - * Added: remove colors unless stderr isatty [TooTallNate] - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/build/node_modules/mocha/node_modules/debug/LICENSE b/build/node_modules/mocha/node_modules/debug/LICENSE new file mode 100644 index 00000000..1a9820e2 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/LICENSE @@ -0,0 +1,20 @@ +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/build/node_modules/mocha/node_modules/debug/Makefile b/build/node_modules/mocha/node_modules/debug/Makefile deleted file mode 100644 index 5cf4a596..00000000 --- a/build/node_modules/mocha/node_modules/debug/Makefile +++ /dev/null @@ -1,36 +0,0 @@ - -# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 -THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) -THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) - -# BIN directory -BIN := $(THIS_DIR)/node_modules/.bin - -# applications -NODE ?= $(shell which node) -NPM ?= $(NODE) $(shell which npm) -BROWSERIFY ?= $(NODE) $(BIN)/browserify - -all: dist/debug.js - -install: node_modules - -clean: - @rm -rf dist - -dist: - @mkdir -p $@ - -dist/debug.js: node_modules browser.js debug.js dist - @$(BROWSERIFY) \ - --standalone debug \ - . > $@ - -distclean: clean - @rm -rf node_modules - -node_modules: package.json - @NODE_ENV= $(NPM) install - @touch node_modules - -.PHONY: all install clean distclean diff --git a/build/node_modules/mocha/node_modules/debug/README.md b/build/node_modules/mocha/node_modules/debug/README.md new file mode 100644 index 00000000..5ea4cd27 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/README.md @@ -0,0 +1,478 @@ +# debug +[![Build Status](https://travis-ci.org/debug-js/debug.svg?branch=master)](https://travis-ci.org/debug-js/debug) [![Coverage Status](https://coveralls.io/repos/github/debug-js/debug/badge.svg?branch=master)](https://coveralls.io/github/debug-js/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + +## Usage in child processes + +Due to the way `debug` detects if the output is a TTY or not, colors are not shown in child processes when `stderr` is piped. A solution is to pass the `DEBUG_COLORS=1` environment variable to the child process. +For example: + +```javascript +worker = fork(WORKER_WRAP_PATH, [workerPath], { + stdio: [ + /* stdin: */ 0, + /* stdout: */ 'pipe', + /* stderr: */ 'pipe', + 'ipc', + ], + env: Object.assign({}, process.env, { + DEBUG_COLORS: 1 // without this settings, colors won't be shown + }), +}); + +worker.stderr.pipe(process.stderr, { end: false }); +``` + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + - Josh Junon + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> +Copyright (c) 2018-2021 Josh Junon + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/debug/Readme.md b/build/node_modules/mocha/node_modules/debug/Readme.md deleted file mode 100644 index b4f45e3c..00000000 --- a/build/node_modules/mocha/node_modules/debug/Readme.md +++ /dev/null @@ -1,188 +0,0 @@ -# debug - - tiny node.js debugging utility modelled after node core's debugging technique. - -## Installation - -```bash -$ npm install debug -``` - -## Usage - - With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility. - -Example _app.js_: - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %s', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example _worker.js_: - -```js -var debug = require('debug')('worker'); - -setInterval(function(){ - debug('doing some work'); -}, 1000); -``` - - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: - - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) - - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) - -#### Windows note - - On Windows the environment variable is set using the `set` command. - - ```cmd - set DEBUG=*,-not_this - ``` - -Then, run the program to be debugged as usual. - -## Millisecond diff - - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - - When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: - - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - -## Conventions - - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". - -## Wildcards - - The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". - -## Browser support - - Debug works in the browser as well, currently persisted by `localStorage`. Consider the situation shown below where you have `worker:a` and `worker:b`, and wish to debug both. Somewhere in the code on your page, include: - -```js -window.myDebug = require("debug"); -``` - - ("debug" is a global object in the browser so we give this object a different name.) When your page is open in the browser, type the following in the console: - -```js -myDebug.enable("worker:*") -``` - - Refresh the page. Debug output will continue to be sent to the console until it is disabled by typing `myDebug.disable()` in the console. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - b('doing some work'); -}, 1200); -``` - -#### Web Inspector Colors - - Colors are also enabled on "Web Inspectors" that understand the `%c` formatting - option. These are WebKit web inspectors, Firefox ([since version - 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) - and the Firebug plugin for Firefox (any version). - - Colored output looks something like: - - ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) - -### stderr vs stdout - -You can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally: - -Example _stdout.js_: - -```js -var debug = require('debug'); -var error = debug('app:error'); - -// by default stderr is used -error('goes to stderr!'); - -var log = debug('app:log'); -// set this namespace to log via console.log -log.log = console.log.bind(console); // don't forget to bind to console! -log('goes to stdout'); -error('still goes to stderr!'); - -// set all output to go via console.info -// overrides all per-namespace log settings -debug.log = console.info.bind(console); -error('now goes to stdout via console.info'); -log('still goes to stdout, but via console.info now'); -``` - -### Save debug output to a file - -You can save all debug statements to a file by piping them. - -Example: - -```bash -$ DEBUG_FD=3 node your-app.js 3> whatever.log -``` - -## Authors - - - TJ Holowaychuk - - Nathan Rajlich - -## License - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/debug/bower.json b/build/node_modules/mocha/node_modules/debug/bower.json deleted file mode 100644 index 6af573ff..00000000 --- a/build/node_modules/mocha/node_modules/debug/bower.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "visionmedia-debug", - "main": "dist/debug.js", - "version": "2.2.0", - "homepage": "https://github.com/visionmedia/debug", - "authors": [ - "TJ Holowaychuk " - ], - "description": "visionmedia-debug", - "moduleType": [ - "amd", - "es6", - "globals", - "node" - ], - "keywords": [ - "visionmedia", - "debug" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/build/node_modules/mocha/node_modules/debug/browser.js b/build/node_modules/mocha/node_modules/debug/browser.js deleted file mode 100644 index 7c764522..00000000 --- a/build/node_modules/mocha/node_modules/debug/browser.js +++ /dev/null @@ -1,168 +0,0 @@ - -/** - * This is the web browser implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = require('./debug'); -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = 'undefined' != typeof chrome - && 'undefined' != typeof chrome.storage - ? chrome.storage.local - : localstorage(); - -/** - * Colors. - */ - -exports.colors = [ - 'lightseagreen', - 'forestgreen', - 'goldenrod', - 'dodgerblue', - 'darkorchid', - 'crimson' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -function useColors() { - // is webkit? http://stackoverflow.com/a/16459606/376773 - return ('WebkitAppearance' in document.documentElement.style) || - // is firebug? http://stackoverflow.com/a/398120/376773 - (window.console && (console.firebug || (console.exception && console.table))) || - // is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31); -} - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -exports.formatters.j = function(v) { - return JSON.stringify(v); -}; - - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs() { - var args = arguments; - var useColors = this.useColors; - - args[0] = (useColors ? '%c' : '') - + this.namespace - + (useColors ? ' %c' : ' ') - + args[0] - + (useColors ? '%c ' : ' ') - + '+' + exports.humanize(this.diff); - - if (!useColors) return args; - - var c = 'color: ' + this.color; - args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1)); - - // the final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - var index = 0; - var lastC = 0; - args[0].replace(/%[a-z%]/g, function(match) { - if ('%%' === match) return; - index++; - if ('%c' === match) { - // we only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); - return args; -} - -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ - -function log() { - // this hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return 'object' === typeof console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - try { - if (null == namespaces) { - exports.storage.removeItem('debug'); - } else { - exports.storage.debug = namespaces; - } - } catch(e) {} -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - var r; - try { - r = exports.storage.debug; - } catch(e) {} - return r; -} - -/** - * Enable namespaces listed in `localStorage.debug` initially. - */ - -exports.enable(load()); - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage(){ - try { - return window.localStorage; - } catch (e) {} -} diff --git a/build/node_modules/mocha/node_modules/debug/component.json b/build/node_modules/mocha/node_modules/debug/component.json deleted file mode 100644 index ca106372..00000000 --- a/build/node_modules/mocha/node_modules/debug/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "debug", - "repo": "visionmedia/debug", - "description": "small debugging utility", - "version": "2.2.0", - "keywords": [ - "debug", - "log", - "debugger" - ], - "main": "browser.js", - "scripts": [ - "browser.js", - "debug.js" - ], - "dependencies": { - "rauchg/ms.js": "0.7.1" - } -} diff --git a/build/node_modules/mocha/node_modules/debug/debug.js b/build/node_modules/mocha/node_modules/debug/debug.js deleted file mode 100644 index 7571a860..00000000 --- a/build/node_modules/mocha/node_modules/debug/debug.js +++ /dev/null @@ -1,197 +0,0 @@ - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = debug; -exports.coerce = coerce; -exports.disable = disable; -exports.enable = enable; -exports.enabled = enabled; -exports.humanize = require('ms'); - -/** - * The currently active debug mode names, and names to skip. - */ - -exports.names = []; -exports.skips = []; - -/** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lowercased letter, i.e. "n". - */ - -exports.formatters = {}; - -/** - * Previously assigned color. - */ - -var prevColor = 0; - -/** - * Previous log timestamp. - */ - -var prevTime; - -/** - * Select a color. - * - * @return {Number} - * @api private - */ - -function selectColor() { - return exports.colors[prevColor++ % exports.colors.length]; -} - -/** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - -function debug(namespace) { - - // define the `disabled` version - function disabled() { - } - disabled.enabled = false; - - // define the `enabled` version - function enabled() { - - var self = enabled; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // add the `color` if not set - if (null == self.useColors) self.useColors = exports.useColors(); - if (null == self.color && self.useColors) self.color = selectColor(); - - var args = Array.prototype.slice.call(arguments); - - args[0] = exports.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %o - args = ['%o'].concat(args); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = exports.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - if ('function' === typeof exports.formatArgs) { - args = exports.formatArgs.apply(self, args); - } - var logFn = enabled.log || exports.log || console.log.bind(console); - logFn.apply(self, args); - } - enabled.enabled = true; - - var fn = exports.enabled(namespace) ? enabled : disabled; - - fn.namespace = namespace; - - return fn; -} - -/** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - -function enable(namespaces) { - exports.save(namespaces); - - var split = (namespaces || '').split(/[\s,]+/); - var len = split.length; - - for (var i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - exports.names.push(new RegExp('^' + namespaces + '$')); - } - } -} - -/** - * Disable debug output. - * - * @api public - */ - -function disable() { - exports.enable(''); -} - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -function enabled(name) { - var i, len; - for (i = 0, len = exports.skips.length; i < len; i++) { - if (exports.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports.names.length; i < len; i++) { - if (exports.names[i].test(name)) { - return true; - } - } - return false; -} - -/** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/build/node_modules/mocha/node_modules/debug/node.js b/build/node_modules/mocha/node_modules/debug/node.js deleted file mode 100644 index 1d392a81..00000000 --- a/build/node_modules/mocha/node_modules/debug/node.js +++ /dev/null @@ -1,209 +0,0 @@ - -/** - * Module dependencies. - */ - -var tty = require('tty'); -var util = require('util'); - -/** - * This is the Node.js implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = require('./debug'); -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -/** - * The file descriptor to write the `debug()` calls to. - * Set the `DEBUG_FD` env variable to override with another value. i.e.: - * - * $ DEBUG_FD=3 node script.js 3>debug.log - */ - -var fd = parseInt(process.env.DEBUG_FD, 10) || 2; -var stream = 1 === fd ? process.stdout : - 2 === fd ? process.stderr : - createWritableStdioStream(fd); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - var debugColors = (process.env.DEBUG_COLORS || '').trim().toLowerCase(); - if (0 === debugColors.length) { - return tty.isatty(fd); - } else { - return '0' !== debugColors - && 'no' !== debugColors - && 'false' !== debugColors - && 'disabled' !== debugColors; - } -} - -/** - * Map %o to `util.inspect()`, since Node doesn't do that out of the box. - */ - -var inspect = (4 === util.inspect.length ? - // node <= 0.8.x - function (v, colors) { - return util.inspect(v, void 0, void 0, colors); - } : - // node > 0.8.x - function (v, colors) { - return util.inspect(v, { colors: colors }); - } -); - -exports.formatters.o = function(v) { - return inspect(v, this.useColors) - .replace(/\s*\n\s*/g, ' '); -}; - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs() { - var args = arguments; - var useColors = this.useColors; - var name = this.namespace; - - if (useColors) { - var c = this.color; - - args[0] = ' \u001b[3' + c + ';1m' + name + ' ' - + '\u001b[0m' - + args[0] + '\u001b[3' + c + 'm' - + ' +' + exports.humanize(this.diff) + '\u001b[0m'; - } else { - args[0] = new Date().toUTCString() - + ' ' + name + ' ' + args[0]; - } - return args; -} - -/** - * Invokes `console.error()` with the specified arguments. - */ - -function log() { - return stream.write(util.format.apply(this, arguments) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - if (null == namespaces) { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } else { - process.env.DEBUG = namespaces; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Copied from `node/src/node.js`. - * - * XXX: It's lame that node doesn't expose this API out-of-the-box. It also - * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. - */ - -function createWritableStdioStream (fd) { - var stream; - var tty_wrap = process.binding('tty_wrap'); - - // Note stream._type is used for test-module-load-list.js - - switch (tty_wrap.guessHandleType(fd)) { - case 'TTY': - stream = new tty.WriteStream(fd); - stream._type = 'tty'; - - // Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - case 'FILE': - var fs = require('fs'); - stream = new fs.SyncWriteStream(fd, { autoClose: false }); - stream._type = 'fs'; - break; - - case 'PIPE': - case 'TCP': - var net = require('net'); - stream = new net.Socket({ - fd: fd, - readable: false, - writable: true - }); - - // FIXME Should probably have an option in net.Socket to create a - // stream from an existing fd which is writable only. But for now - // we'll just add this hack and set the `readable` member to false. - // Test: ./node test/fixtures/echo.js < /etc/passwd - stream.readable = false; - stream.read = null; - stream._type = 'pipe'; - - // FIXME Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - default: - // Probably an error on in uv_guess_handle() - throw new Error('Implement me. Unknown stream file type!'); - } - - // For supporting legacy API we put the FD here. - stream.fd = fd; - - stream._isStdio = true; - - return stream; -} - -/** - * Enable namespaces listed in `process.env.DEBUG` initially. - */ - -exports.enable(load()); diff --git a/build/node_modules/mocha/node_modules/debug/node_modules/ms/index.js b/build/node_modules/mocha/node_modules/debug/node_modules/ms/index.js new file mode 100644 index 00000000..c4498bcc --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/build/node_modules/mocha/node_modules/debug/node_modules/ms/license.md b/build/node_modules/mocha/node_modules/debug/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/debug/node_modules/ms/package.json b/build/node_modules/mocha/node_modules/debug/node_modules/ms/package.json new file mode 100644 index 00000000..b41682a1 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/node_modules/ms/package.json @@ -0,0 +1,69 @@ +{ + "_from": "ms@2.1.2", + "_id": "ms@2.1.2", + "_inBundle": false, + "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "_location": "/mocha/debug/ms", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "ms@2.1.2", + "name": "ms", + "escapedName": "ms", + "rawSpec": "2.1.2", + "saveSpec": null, + "fetchSpec": "2.1.2" + }, + "_requiredBy": [ + "/mocha/debug" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.2.tgz", + "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009", + "_spec": "ms@2.1.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha/node_modules/debug", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Tiny millisecond conversion utility", + "devDependencies": { + "eslint": "4.12.1", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.1.2" +} diff --git a/build/node_modules/mocha/node_modules/debug/node_modules/ms/readme.md b/build/node_modules/mocha/node_modules/debug/node_modules/ms/readme.md new file mode 100644 index 00000000..9a1996b1 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/node_modules/ms/readme.md @@ -0,0 +1,60 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/build/node_modules/mocha/node_modules/debug/package.json b/build/node_modules/mocha/node_modules/debug/package.json index f9e24e8a..a4711ba0 100644 --- a/build/node_modules/mocha/node_modules/debug/package.json +++ b/build/node_modules/mocha/node_modules/debug/package.json @@ -1,70 +1,101 @@ { - "_from": "debug@2.2.0", - "_id": "debug@2.2.0", + "_from": "debug@4.3.3", + "_id": "debug@4.3.3", "_inBundle": false, - "_integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "_integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "_location": "/mocha/debug", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "debug@2.2.0", + "raw": "debug@4.3.3", "name": "debug", "escapedName": "debug", - "rawSpec": "2.2.0", + "rawSpec": "4.3.3", "saveSpec": null, - "fetchSpec": "2.2.0" + "fetchSpec": "4.3.3" }, "_requiredBy": [ "/mocha" ], - "_resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "_shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da", - "_spec": "debug@2.2.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/debug/-/debug-4.3.3.tgz", + "_shasum": "04266e0b70a98d4462e6e288e38259213332b664", + "_spec": "debug@4.3.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" + "name": "Josh Junon", + "email": "josh.junon@protonmail.com" }, - "browser": "./browser.js", + "browser": "./src/browser.js", "bugs": { - "url": "https://github.com/visionmedia/debug/issues" + "url": "https://github.com/debug-js/debug/issues" }, "bundleDependencies": false, - "component": { - "scripts": { - "debug/index.js": "browser.js", - "debug/debug.js": "debug.js" - } - }, "contributors": [ + { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, { "name": "Nathan Rajlich", "email": "nathan@tootallnate.net", "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" } ], "dependencies": { - "ms": "0.7.1" + "ms": "2.1.2" }, "deprecated": false, - "description": "small debugging utility", + "description": "Lightweight debugging utility for Node.js and the browser", "devDependencies": { - "browserify": "9.0.3", - "mocha": "*" + "brfs": "^2.0.1", + "browserify": "^16.2.3", + "coveralls": "^3.0.2", + "istanbul": "^0.4.5", + "karma": "^3.1.4", + "karma-browserify": "^6.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6.0" }, - "homepage": "https://github.com/visionmedia/debug#readme", + "files": [ + "src", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/debug-js/debug#readme", "keywords": [ "debug", "log", "debugger" ], "license": "MIT", - "main": "./node.js", + "main": "./src/index.js", "name": "debug", + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + }, "repository": { "type": "git", - "url": "git://github.com/visionmedia/debug.git" + "url": "git://github.com/debug-js/debug.git" + }, + "scripts": { + "lint": "xo", + "test": "npm run test:node && npm run test:browser && npm run lint", + "test:browser": "karma start --single-run", + "test:coverage": "cat ./coverage/lcov.info | coveralls", + "test:node": "istanbul cover _mocha -- test.js" }, - "version": "2.2.0" + "version": "4.3.3" } diff --git a/build/node_modules/mocha/node_modules/debug/src/browser.js b/build/node_modules/mocha/node_modules/debug/src/browser.js new file mode 100644 index 00000000..cd0fc35d --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/src/browser.js @@ -0,0 +1,269 @@ +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ +exports.log = console.debug || console.log || (() => {}); + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; diff --git a/build/node_modules/mocha/node_modules/debug/src/common.js b/build/node_modules/mocha/node_modules/debug/src/common.js new file mode 100644 index 00000000..6d571d28 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/src/common.js @@ -0,0 +1,274 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; diff --git a/build/node_modules/mocha/node_modules/debug/src/index.js b/build/node_modules/mocha/node_modules/debug/src/index.js new file mode 100644 index 00000000..bf4c57f2 --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/build/node_modules/mocha/node_modules/debug/src/node.js b/build/node_modules/mocha/node_modules/debug/src/node.js new file mode 100644 index 00000000..79bc085c --- /dev/null +++ b/build/node_modules/mocha/node_modules/debug/src/node.js @@ -0,0 +1,263 @@ +/** + * Module dependencies. + */ + +const tty = require('tty'); +const util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.destroy = util.deprecate( + () => {}, + 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' +); + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n') + .map(str => str.trim()) + .join(' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; diff --git a/build/node_modules/mocha/node_modules/minimatch/LICENSE b/build/node_modules/mocha/node_modules/minimatch/LICENSE new file mode 100644 index 00000000..9517b7d9 --- /dev/null +++ b/build/node_modules/mocha/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2011-2022 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/minimatch/README.md b/build/node_modules/mocha/node_modules/minimatch/README.md new file mode 100644 index 00000000..33ede1d6 --- /dev/null +++ b/build/node_modules/mocha/node_modules/minimatch/README.md @@ -0,0 +1,230 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://travis-ci.org/isaacs/minimatch.svg?branch=master)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + +### partial + +Compare a partial path to a pattern. As long as the parts of the path that +are present are not contradicted by the pattern, it will be treated as a +match. This is useful in applications where you're walking through a +folder structure, and don't yet have the full path, but want to ensure that +you do not walk down paths that can never be a match. + +For example, + +```js +minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d +minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d +minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a +``` + +### allowWindowsEscape + +Windows path separator `\` is by default converted to `/`, which +prohibits the usage of `\` as a escape character. This flag skips that +behavior and allows using the escape character. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/build/node_modules/mocha/node_modules/minimatch/minimatch.js b/build/node_modules/mocha/node_modules/minimatch/minimatch.js new file mode 100644 index 00000000..4f981207 --- /dev/null +++ b/build/node_modules/mocha/node_modules/minimatch/minimatch.js @@ -0,0 +1,908 @@ +const minimatch = module.exports = (p, pattern, options = {}) => { + assertValidPattern(pattern) + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + return new Minimatch(pattern, options).match(p) +} + +module.exports = minimatch + +const path = (() => { try { return require('path') } catch (e) {}})() || { + sep: '/' +} +minimatch.sep = path.sep + +const GLOBSTAR = Symbol('globstar **') +minimatch.GLOBSTAR = GLOBSTAR +const expand = require('brace-expansion') + +const plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +const qmark = '[^/]' + +// * => any number of characters +const star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +const twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +const twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// "abc" -> { a:true, b:true, c:true } +const charSet = s => s.split('').reduce((set, c) => { + set[c] = true + return set +}, {}) + +// characters that need to be escaped in RegExp. +const reSpecials = charSet('().*{}+?[]^$\\!') + +// characters that indicate we have to add the pattern start +const addPatternStartSet = charSet('[.(') + +// normalizes slashes. +const slashSplit = /\/+/ + +minimatch.filter = (pattern, options = {}) => + (p, i, list) => minimatch(p, pattern, options) + +const ext = (a, b = {}) => { + const t = {} + Object.keys(a).forEach(k => t[k] = a[k]) + Object.keys(b).forEach(k => t[k] = b[k]) + return t +} + +minimatch.defaults = def => { + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return minimatch + } + + const orig = minimatch + + const m = (p, pattern, options) => orig(p, pattern, ext(def, options)) + m.Minimatch = class Minimatch extends orig.Minimatch { + constructor (pattern, options) { + super(pattern, ext(def, options)) + } + } + m.Minimatch.defaults = options => orig.defaults(ext(def, options)).Minimatch + m.filter = (pattern, options) => orig.filter(pattern, ext(def, options)) + m.defaults = options => orig.defaults(ext(def, options)) + m.makeRe = (pattern, options) => orig.makeRe(pattern, ext(def, options)) + m.braceExpand = (pattern, options) => orig.braceExpand(pattern, ext(def, options)) + m.match = (list, pattern, options) => orig.match(list, pattern, ext(def, options)) + + return m +} + + + + + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = (pattern, options) => braceExpand(pattern, options) + +const braceExpand = (pattern, options = {}) => { + assertValidPattern(pattern) + + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +const MAX_PATTERN_LENGTH = 1024 * 64 +const assertValidPattern = pattern => { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern') + } + + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long') + } +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +const SUBPARSE = Symbol('subparse') + +minimatch.makeRe = (pattern, options) => + new Minimatch(pattern, options || {}).makeRe() + +minimatch.match = (list, pattern, options = {}) => { + const mm = new Minimatch(pattern, options) + list = list.filter(f => mm.match(f)) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +// replace stuff like \* with * +const globUnescape = s => s.replace(/\\(.)/g, '$1') +const regExpEscape = s => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + +class Minimatch { + constructor (pattern, options) { + assertValidPattern(pattern) + + if (!options) options = {} + + // windows support: need to use /, not \ + if (!options.allowWindowsEscape && path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + this.partial = !!options.partial + + // make the set of regexps etc. + this.make() + } + + debug () {} + + make () { + const pattern = this.pattern + const options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + let set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = (...args) => console.error(...args) + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(s => s.split(slashSplit)) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map((s, si, set) => s.map(this.parse, this)) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(s => s.indexOf(false) === -1) + + this.debug(this.pattern, set) + + this.set = set + } + + parseNegate () { + if (this.options.nonegate) return + + const pattern = this.pattern + let negate = false + let negateOffset = 0 + + for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate + } + + // set partial to true to test if, for example, + // "/a/b" matches the start of "/*/b/*/d" + // Partial means, if you run out of file before you run + // out of pattern, then that's fine, as long as all + // the parts match. + matchOne (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. + // some invalid regexp stuff in the set. + /* istanbul ignore if */ + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; 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. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + /* istanbul ignore if */ + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + 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 "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else /* istanbul ignore else */ if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + return (fi === fl - 1) && (file[fi] === '') + } + + // should be unreachable. + /* istanbul ignore next */ + throw new Error('wtf?') + } + + braceExpand () { + return braceExpand(this.pattern, this.options) + } + + parse (pattern, isSub) { + assertValidPattern(pattern) + + const options = this.options + + // shortcuts + if (pattern === '**') { + if (!options.noglobstar) + return GLOBSTAR + else + pattern = '*' + } + if (pattern === '') return '' + + let re = '' + let hasMagic = !!options.nocase + let escaping = false + // ? => one single character + const patternListStack = [] + const negativeLists = [] + let stateChar + let inClass = false + let reClassStart = -1 + let classStart = -1 + let cs + let pl + let sp + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + const patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + + const clearStateChar = () => { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + this.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (let i = 0, c; (i < pattern.length) && (c = pattern.charAt(i)); i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping) { + /* istanbul ignore next - completely not allowed, even escaped. */ + if (c === '/') { + return false + } + + if (reSpecials[c]) { + re += '\\' + } + re += c + escaping = false + continue + } + + switch (c) { + /* istanbul ignore next */ + case '/': { + // Should already be path-split by now. + return false + } + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + 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 + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + this.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (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)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length) { + re += '\\|' + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (reSpecials[c] && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + break + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = 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* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + let tail + 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 | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, (_, $1, $2) => { + /* istanbul ignore else - should already be done */ + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + const 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. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + const addPatternStart = addPatternStartSet[re.charAt(0)] + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (let n = negativeLists.length - 1; n > -1; n--) { + const nl = negativeLists[n] + + const nlBefore = re.slice(0, nl.reStart) + const nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + let nlAfter = re.slice(nl.reEnd) + const nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + const openParensBefore = nlBefore.split('(').length - 1 + let cleanAfter = nlAfter + for (let i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + const dollar = nlAfter === '' && isSub !== SUBPARSE ? '$' : '' + re = nlBefore + nlFirst + nlAfter + dollar + nlLast + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + const flags = options.nocase ? 'i' : '' + try { + return Object.assign(new RegExp('^' + re + '$', flags), { + _glob: pattern, + _src: re, + }) + } catch (er) /* istanbul ignore next - should be impossible */ { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + } + + makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + const set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + const options = this.options + + const twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + const flags = options.nocase ? 'i' : '' + + // coalesce globstars and regexpify non-globstar patterns + // if it's the only item, then we just do one twoStar + // if it's the first, and there are more, prepend (\/|twoStar\/)? to next + // if it's the last, append (\/twoStar|) to previous + // if it's in the middle, append (\/|\/twoStar\/) to previous + // then filter out GLOBSTAR symbols + let re = set.map(pattern => { + pattern = pattern.map(p => + typeof p === 'string' ? regExpEscape(p) + : p === GLOBSTAR ? GLOBSTAR + : p._src + ).reduce((set, p) => { + if (!(set[set.length - 1] === GLOBSTAR && p === GLOBSTAR)) { + set.push(p) + } + return set + }, []) + pattern.forEach((p, i) => { + if (p !== GLOBSTAR || pattern[i-1] === GLOBSTAR) { + return + } + if (i === 0) { + if (pattern.length > 1) { + pattern[i+1] = '(?:\\\/|' + twoStar + '\\\/)?' + pattern[i+1] + } else { + pattern[i] = twoStar + } + } else if (i === pattern.length - 1) { + pattern[i-1] += '(?:\\\/|' + twoStar + ')?' + } else { + pattern[i-1] += '(?:\\\/|\\\/' + twoStar + '\\\/)' + pattern[i+1] + pattern[i+1] = GLOBSTAR + } + }) + return pattern.filter(p => p !== GLOBSTAR).join('/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) /* istanbul ignore next - should be impossible */ { + this.regexp = false + } + return this.regexp + } + + match (f, partial = this.partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + const options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + const set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + let filename + for (let i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (let i = 0; i < set.length; i++) { + const pattern = set[i] + let file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + const 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 + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate + } + + static defaults (def) { + return minimatch.defaults(def).Minimatch + } +} + +minimatch.Minimatch = Minimatch diff --git a/build/node_modules/mocha/node_modules/minimatch/package.json b/build/node_modules/mocha/node_modules/minimatch/package.json new file mode 100644 index 00000000..8baf8d3f --- /dev/null +++ b/build/node_modules/mocha/node_modules/minimatch/package.json @@ -0,0 +1,64 @@ +{ + "_from": "minimatch@4.2.1", + "_id": "minimatch@4.2.1", + "_inBundle": false, + "_integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "_location": "/mocha/minimatch", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "minimatch@4.2.1", + "name": "minimatch", + "escapedName": "minimatch", + "rawSpec": "4.2.1", + "saveSpec": null, + "fetchSpec": "4.2.1" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimatch/-/minimatch-4.2.1.tgz", + "_shasum": "40d9d511a46bdc4e563c22c3080cde9c0d8299b4", + "_spec": "minimatch@4.2.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/minimatch/issues" + }, + "bundleDependencies": false, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "deprecated": false, + "description": "a glob matcher in javascript", + "devDependencies": { + "tap": "^15.1.6" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "minimatch.js" + ], + "homepage": "https://github.com/isaacs/minimatch#readme", + "license": "ISC", + "main": "minimatch.js", + "name": "minimatch", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "scripts": { + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "preversion": "npm test", + "snap": "tap", + "test": "tap" + }, + "version": "4.2.1" +} diff --git a/build/node_modules/mocha/node_modules/minimist/.travis.yml b/build/node_modules/mocha/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/build/node_modules/mocha/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/build/node_modules/mocha/node_modules/minimist/example/parse.js b/build/node_modules/mocha/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/build/node_modules/mocha/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/build/node_modules/mocha/node_modules/minimist/index.js b/build/node_modules/mocha/node_modules/minimist/index.js deleted file mode 100644 index 584f551a..00000000 --- a/build/node_modules/mocha/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {} }; - - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[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; - })); - }); - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function setArg (key, val) { - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - setArg(m[1], m[2]); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, next); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2)); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, args[i+1]); - i++; - } - else if (args[i+1] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - } - else { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - notFlags.forEach(function(key) { - argv._.push(key); - }); - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function setKey (obj, keys, value) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - if (o[key] === undefined) o[key] = {}; - o = o[key]; - }); - - var key = keys[keys.length - 1]; - if (o[key] === undefined || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - -function longest (xs) { - return Math.max.apply(null, xs.map(function (x) { return x.length })); -} diff --git a/build/node_modules/mocha/node_modules/minimist/package.json b/build/node_modules/mocha/node_modules/minimist/package.json deleted file mode 100644 index 66f818b3..00000000 --- a/build/node_modules/mocha/node_modules/minimist/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "minimist@0.0.8", - "_id": "minimist@0.0.8", - "_inBundle": false, - "_integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "_location": "/mocha/minimist", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "minimist@0.0.8", - "name": "minimist", - "escapedName": "minimist", - "rawSpec": "0.0.8", - "saveSpec": null, - "fetchSpec": "0.0.8" - }, - "_requiredBy": [ - "/mocha/mkdirp" - ], - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", - "_spec": "minimist@0.0.8", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha/node_modules/mkdirp", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "parse argument options", - "devDependencies": { - "tap": "~0.4.0", - "tape": "~1.0.4" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "name": "minimist", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "version": "0.0.8" -} diff --git a/build/node_modules/mocha/node_modules/minimist/readme.markdown b/build/node_modules/mocha/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/build/node_modules/mocha/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) - -[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.dir(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a string or array of strings to always treat as booleans -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/build/node_modules/mocha/node_modules/minimist/test/dash.js b/build/node_modules/mocha/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/default_bool.js b/build/node_modules/mocha/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/dotted.js b/build/node_modules/mocha/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/long.js b/build/node_modules/mocha/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/parse.js b/build/node_modules/mocha/node_modules/minimist/test/parse.js deleted file mode 100644 index 8a906466..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,318 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); - -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/parse_modified.js b/build/node_modules/mocha/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: ['123'] }); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/short.js b/build/node_modules/mocha/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/minimist/test/whitespace.js b/build/node_modules/mocha/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/build/node_modules/mocha/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/.npmignore b/build/node_modules/mocha/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c347..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/build/node_modules/mocha/node_modules/mkdirp/.travis.yml b/build/node_modules/mocha/node_modules/mkdirp/.travis.yml deleted file mode 100644 index c693a939..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - "0.10" diff --git a/build/node_modules/mocha/node_modules/mkdirp/LICENSE b/build/node_modules/mocha/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/mkdirp/bin/cmd.js b/build/node_modules/mocha/node_modules/mkdirp/bin/cmd.js deleted file mode 100755 index d95de15a..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/bin/cmd.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node - -var mkdirp = require('../'); -var minimist = require('minimist'); -var fs = require('fs'); - -var argv = minimist(process.argv.slice(2), { - alias: { m: 'mode', h: 'help' }, - string: [ 'mode' ] -}); -if (argv.help) { - fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); - return; -} - -var paths = argv._.slice(); -var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; - -(function next () { - if (paths.length === 0) return; - var p = paths.shift(); - - if (mode === undefined) mkdirp(p, cb) - else mkdirp(p, mode, cb) - - function cb (err) { - if (err) { - console.error(err.message); - process.exit(1); - } - else next(); - } -})(); diff --git a/build/node_modules/mocha/node_modules/mkdirp/bin/usage.txt b/build/node_modules/mocha/node_modules/mkdirp/bin/usage.txt deleted file mode 100644 index f952aa2c..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/bin/usage.txt +++ /dev/null @@ -1,12 +0,0 @@ -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - diff --git a/build/node_modules/mocha/node_modules/mkdirp/examples/pow.js b/build/node_modules/mocha/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/index.js b/build/node_modules/mocha/node_modules/mkdirp/index.js deleted file mode 100644 index a1742b20..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/index.js +++ /dev/null @@ -1,97 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, opts, f, made) { - if (typeof opts === 'function') { - f = opts; - opts = {}; - } - else if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - var cb = f || function () {}; - p = path.resolve(p); - - xfs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), opts, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, opts, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); -} - -mkdirP.sync = function sync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - p = path.resolve(p); - - try { - xfs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), opts, made); - sync(p, opts, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = xfs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } - - return made; -}; diff --git a/build/node_modules/mocha/node_modules/mkdirp/package.json b/build/node_modules/mocha/node_modules/mkdirp/package.json deleted file mode 100644 index c29def61..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "mkdirp@0.5.0", - "_id": "mkdirp@0.5.0", - "_inBundle": false, - "_integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "_location": "/mocha/mkdirp", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "mkdirp@0.5.0", - "name": "mkdirp", - "escapedName": "mkdirp", - "rawSpec": "0.5.0", - "saveSpec": null, - "fetchSpec": "0.5.0" - }, - "_requiredBy": [ - "/mocha" - ], - "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "_shasum": "1d73076a6df986cd9344e15e71fcc05a4c9abf12", - "_spec": "mkdirp@0.5.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "bundleDependencies": false, - "dependencies": { - "minimist": "0.0.8" - }, - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "description": "Recursively mkdir, like `mkdir -p`", - "devDependencies": { - "mock-fs": "~2.2.0", - "tap": "~0.4.0" - }, - "homepage": "https://github.com/substack/node-mkdirp#readme", - "keywords": [ - "mkdir", - "directory" - ], - "license": "MIT", - "main": "./index", - "name": "mkdirp", - "repository": { - "type": "git", - "url": "git+https://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.5.0" -} diff --git a/build/node_modules/mocha/node_modules/mkdirp/readme.markdown b/build/node_modules/mocha/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 3cc13153..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,100 +0,0 @@ -# mkdirp - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -# example - -## pow.js - -```js -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); -``` - -Output - -``` -pow! -``` - -And now /tmp/foo/bar/baz exists, huzzah! - -# methods - -```js -var mkdirp = require('mkdirp'); -``` - -## mkdirp(dir, opts, cb) - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `opts.mode`. If `opts` is a non-object, it will be treated as -the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and -`opts.fs.stat(path, cb)`. - -## mkdirp.sync(dir, opts) - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `opts.mode`. If `opts` is a non-object, it will be -treated as the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -Returns the first directory that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and -`opts.fs.statSync(path)`. - -# usage - -This package also ships with a `mkdirp` command. - -``` -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - -``` - -# install - -With [npm](http://npmjs.org) do: - -``` -npm install mkdirp -``` - -to get the library, or - -``` -npm install -g mkdirp -``` - -to get the command. - -# license - -MIT diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/chmod.js b/build/node_modules/mocha/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8e..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = 0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = 0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/clobber.js b/build/node_modules/mocha/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb70998..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, 0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js b/build/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index 3b624ddb..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,26 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('woo', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js b/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js deleted file mode 100644 index f1fbeca1..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js +++ /dev/null @@ -1,27 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); - -test('opts.fs', function (t) { - t.plan(5); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp(file, { fs: xfs, mode: 0755 }, function (err) { - t.ifError(err); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js b/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js deleted file mode 100644 index 224b5064..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); - -test('opts.fs sync', function (t) { - t.plan(4); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp.sync(file, { fs: xfs, mode: 0755 }); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/perm.js b/build/node_modules/mocha/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 2c975905..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,30 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('async perm', function (t) { - t.plan(5); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, 0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', 0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js b/build/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index 327e54b2..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,34 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('sync perm', function (t) { - t.plan(4); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, 0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); - -test('sync root perm', function (t) { - t.plan(3); - - var file = '/tmp'; - mkdirp.sync(file, 0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/race.js b/build/node_modules/mocha/node_modules/mkdirp/test/race.js deleted file mode 100644 index 7c295f41..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,40 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('race', function (t) { - t.plan(6); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file, function () { - if (--res === 0) t.end(); - }); - - mk(file, function () { - if (--res === 0) t.end(); - }); - - function mk (file, cb) { - mkdirp(file, 0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - if (cb) cb(); - }); - }) - }); - } -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/rel.js b/build/node_modules/mocha/node_modules/mkdirp/test/rel.js deleted file mode 100644 index d1f175c2..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,30 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('rel', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - process.chdir(cwd); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/return.js b/build/node_modules/mocha/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, '/tmp/' + x); - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, null); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/return_sync.js b/build/node_modules/mocha/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - // Note that this will throw on failure, which will fail the test. - var made = mkdirp.sync(file); - t.equal(made, '/tmp/' + x); - - // making the same file again should have no effect. - made = mkdirp.sync(file); - t.equal(made, null); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/root.js b/build/node_modules/mocha/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2f..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('root', function (t) { - // '/' on unix, 'c:/' on windows. - var file = path.resolve('/'); - - mkdirp(file, 0755, function (err) { - if (err) throw err - fs.stat(file, function (er, stat) { - if (er) throw er - t.ok(stat.isDirectory(), 'target is a directory'); - t.end(); - }) - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/sync.js b/build/node_modules/mocha/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 88fa4324..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,30 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('sync', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file, 0755); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/umask.js b/build/node_modules/mocha/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 82c393a0..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,26 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('implicit mode from umask', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, 0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }) - }); -}); diff --git a/build/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js b/build/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index e537fbe4..00000000 --- a/build/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,30 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; - -test('umask sync modes', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & 0777, (0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/build/node_modules/mocha/node_modules/ms/.npmignore b/build/node_modules/mocha/node_modules/ms/.npmignore deleted file mode 100644 index d1aa0ce4..00000000 --- a/build/node_modules/mocha/node_modules/ms/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -test -History.md -Makefile -component.json diff --git a/build/node_modules/mocha/node_modules/ms/History.md b/build/node_modules/mocha/node_modules/ms/History.md deleted file mode 100644 index 32fdfc17..00000000 --- a/build/node_modules/mocha/node_modules/ms/History.md +++ /dev/null @@ -1,66 +0,0 @@ - -0.7.1 / 2015-04-20 -================== - - * prevent extraordinary long inputs (@evilpacket) - * Fixed broken readme link - -0.7.0 / 2014-11-24 -================== - - * add time abbreviations, updated tests and readme for the new units - * fix example in the readme. - * add LICENSE file - -0.6.2 / 2013-12-05 -================== - - * Adding repository section to package.json to suppress warning from NPM. - -0.6.1 / 2013-05-10 -================== - - * fix singularization [visionmedia] - -0.6.0 / 2013-03-15 -================== - - * fix minutes - -0.5.1 / 2013-02-24 -================== - - * add component namespace - -0.5.0 / 2012-11-09 -================== - - * add short formatting as default and .long option - * add .license property to component.json - * add version to component.json - -0.4.0 / 2012-10-22 -================== - - * add rounding to fix crazy decimals - -0.3.0 / 2012-09-07 -================== - - * fix `ms()` [visionmedia] - -0.2.0 / 2012-09-03 -================== - - * add component.json [visionmedia] - * add days support [visionmedia] - * add hours support [visionmedia] - * add minutes support [visionmedia] - * add seconds support [visionmedia] - * add ms string support [visionmedia] - * refactor tests to facilitate ms(number) [visionmedia] - -0.1.0 / 2012-03-07 -================== - - * Initial release diff --git a/build/node_modules/mocha/node_modules/ms/LICENSE b/build/node_modules/mocha/node_modules/ms/LICENSE deleted file mode 100644 index 6c07561b..00000000 --- a/build/node_modules/mocha/node_modules/ms/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Guillermo Rauch - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/ms/README.md b/build/node_modules/mocha/node_modules/ms/README.md deleted file mode 100644 index 9b4fd035..00000000 --- a/build/node_modules/mocha/node_modules/ms/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# ms.js: miliseconds conversion utility - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('100') // 100 -``` - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(ms('10 hours')) // "10h" -``` - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -- Node/Browser compatible. Published as [`ms`](https://www.npmjs.org/package/ms) in [NPM](http://nodejs.org/download). -- If a number is supplied to `ms`, a string with a unit is returned. -- If a string that contains the number is supplied, it returns it as -a number (e.g: it returns `100` for `'100'`). -- If you pass a string with a number and a valid unit, the number of -equivalent ms is returned. - -## License - -MIT diff --git a/build/node_modules/mocha/node_modules/ms/index.js b/build/node_modules/mocha/node_modules/ms/index.js index 4f927716..ea734fb7 100644 --- a/build/node_modules/mocha/node_modules/ms/index.js +++ b/build/node_modules/mocha/node_modules/ms/index.js @@ -6,6 +6,7 @@ var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; +var w = d * 7; var y = d * 365.25; /** @@ -16,17 +17,24 @@ var y = d * 365.25; * - `long` verbose formatting [false] * * @param {String|Number} val - * @param {Object} options + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ -module.exports = function(val, options){ +module.exports = function (val, options) { options = options || {}; - if ('string' == typeof val) return parse(val); - return options.long - ? long(val) - : short(val); + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); }; /** @@ -38,10 +46,16 @@ module.exports = function(val, options){ */ function parse(str) { - str = '' + str; - if (str.length > 10000) return; - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); - if (!match) return; + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } var n = parseFloat(match[1]); var type = (match[2] || 'ms').toLowerCase(); switch (type) { @@ -51,6 +65,10 @@ function parse(str) { case 'yr': case 'y': return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; case 'days': case 'day': case 'd': @@ -79,6 +97,8 @@ function parse(str) { case 'msec': case 'ms': return n; + default: + return undefined; } } @@ -90,11 +110,20 @@ function parse(str) { * @api private */ -function short(ms) { - if (ms >= d) return Math.round(ms / d) + 'd'; - if (ms >= h) return Math.round(ms / h) + 'h'; - if (ms >= m) return Math.round(ms / m) + 'm'; - if (ms >= s) return Math.round(ms / s) + 's'; +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } return ms + 'ms'; } @@ -106,20 +135,28 @@ function short(ms) { * @api private */ -function long(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; } /** * Pluralization helper. */ -function plural(ms, n, name) { - if (ms < n) return; - if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; - return Math.ceil(ms / n) + ' ' + name + 's'; +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } diff --git a/build/node_modules/mocha/node_modules/ms/license.md b/build/node_modules/mocha/node_modules/ms/license.md new file mode 100644 index 00000000..fa5d39b6 --- /dev/null +++ b/build/node_modules/mocha/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2020 Vercel, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/mocha/node_modules/ms/package.json b/build/node_modules/mocha/node_modules/ms/package.json index c0b1aa9b..8a1f19c2 100644 --- a/build/node_modules/mocha/node_modules/ms/package.json +++ b/build/node_modules/mocha/node_modules/ms/package.json @@ -1,49 +1,70 @@ { - "_from": "ms@0.7.1", - "_id": "ms@0.7.1", + "_from": "ms@2.1.3", + "_id": "ms@2.1.3", "_inBundle": false, - "_integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "_integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "_location": "/mocha/ms", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "ms@0.7.1", + "raw": "ms@2.1.3", "name": "ms", "escapedName": "ms", - "rawSpec": "0.7.1", + "rawSpec": "2.1.3", "saveSpec": null, - "fetchSpec": "0.7.1" + "fetchSpec": "2.1.3" }, "_requiredBy": [ - "/mocha/debug" + "/mocha" ], - "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "_shasum": "9cd13c03adbff25b65effde7ce864ee952017098", - "_spec": "ms@0.7.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha/node_modules/debug", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.3.tgz", + "_shasum": "574c8138ce1d2b5861f0b44579dbadd60c6615b2", + "_spec": "ms@2.1.3", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", "bugs": { - "url": "https://github.com/guille/ms.js/issues" + "url": "https://github.com/vercel/ms/issues" }, "bundleDependencies": false, - "component": { - "scripts": { - "ms/index.js": "index.js" - } - }, "deprecated": false, - "description": "Tiny ms conversion utility", + "description": "Tiny millisecond conversion utility", "devDependencies": { - "expect.js": "*", - "mocha": "*", - "serve": "*" + "eslint": "4.18.2", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1", + "prettier": "2.0.5" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/vercel/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] }, - "homepage": "https://github.com/guille/ms.js#readme", "main": "./index", "name": "ms", "repository": { "type": "git", - "url": "git://github.com/guille/ms.js.git" + "url": "git+https://github.com/vercel/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" }, - "version": "0.7.1" + "version": "2.1.3" } diff --git a/build/node_modules/mocha/node_modules/ms/readme.md b/build/node_modules/mocha/node_modules/ms/readme.md new file mode 100644 index 00000000..0fc1abb3 --- /dev/null +++ b/build/node_modules/mocha/node_modules/ms/readme.md @@ -0,0 +1,59 @@ +# ms + +![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/build/node_modules/mocha/package.json b/build/node_modules/mocha/package.json index 8928b99a..89b31e2a 100644 --- a/build/node_modules/mocha/package.json +++ b/build/node_modules/mocha/package.json @@ -1,1077 +1,231 @@ { - "_from": "mocha@~2.3.4", - "_id": "mocha@2.3.4", + "_from": "mocha@~9.2.0", + "_id": "mocha@9.2.2", "_inBundle": false, - "_integrity": "sha1-himm+wRPLSJapLgaKuLQAWmesmY=", + "_integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "_location": "/mocha", - "_phantomChildren": {}, + "_phantomChildren": { + "brace-expansion": "1.1.11" + }, "_requested": { "type": "range", "registry": true, - "raw": "mocha@~2.3.4", + "raw": "mocha@~9.2.0", "name": "mocha", "escapedName": "mocha", - "rawSpec": "~2.3.4", + "rawSpec": "~9.2.0", "saveSpec": null, - "fetchSpec": "~2.3.4" + "fetchSpec": "~9.2.0" }, "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/mocha/-/mocha-2.3.4.tgz", - "_shasum": "8629a6fb044f2d225aa4b81a2ae2d001699eb266", - "_spec": "mocha@~2.3.4", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mocha/-/mocha-9.2.2.tgz", + "_shasum": "d70db46bdb93ca57402c809333e5a84977a88fb9", + "_spec": "mocha@~9.2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "bin": { - "mocha": "./bin/mocha", - "_mocha": "./bin/_mocha" + "mocha": "bin/mocha", + "_mocha": "bin/_mocha" }, "browser": { - "debug": "./lib/browser/debug.js", - "events": "./lib/browser/events.js", - "tty": "./lib/browser/tty.js" + "./index.js": "./browser-entry.js", + "./lib/nodejs/growl.js": "./lib/browser/growl.js", + "fs": false, + "path": false, + "supports-color": false, + "./lib/nodejs/buffered-worker-pool.js": false, + "./lib/nodejs/esm-utils.js": false, + "./lib/nodejs/file-unloader.js": false, + "./lib/nodejs/parallel-buffered-runner.js": false, + "./lib/nodejs/serializer.js": false, + "./lib/nodejs/worker.js": false, + "./lib/nodejs/reporters/parallel-buffered.js": false, + "./lib/cli/index.js": false }, "bugs": { - "url": "https://github.com/mochajs/mocha/issues" + "url": "https://github.com/mochajs/mocha/issues/" }, "bundleDependencies": false, - "contributors": [ - { - "name": "Travis Jeffery", - "email": "tj@travisjeffery.com" - }, - { - "name": "Christopher Hiller", - "email": "boneskull@boneskull.com" - }, - { - "name": "Joshua Appelman", - "email": "jappelman@xebia.com" - }, - { - "name": "Guillermo Rauch", - "email": "rauchg@gmail.com" - }, - { - "name": "David da Silva Contín", - "email": "dasilvacontin@gmail.com" - }, - { - "name": "Daniel St. Jules", - "email": "danielst.jules@gmail.com" - }, - { - "name": "Ariel Mashraki", - "email": "ariel@mashraki.co.il" - }, - { - "name": "Attila Domokos", - "email": "adomokos@gmail.com" - }, - { - "name": "John Firebaugh", - "email": "john.firebaugh@gmail.com" - }, - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net" - }, - { - "name": "Jo Liss", - "email": "joliss42@gmail.com" - }, - { - "name": "Mike Pennisi", - "email": "mike@mikepennisi.com" - }, - { - "name": "Brendan Nee", - "email": "brendan.nee@gmail.com" - }, - { - "name": "James Carr", - "email": "james.r.carr@gmail.com" - }, - { - "name": "Ryunosuke SATO", - "email": "tricknotes.rs@gmail.com" - }, - { - "name": "Aaron Heckmann", - "email": "aaron.heckmann+github@gmail.com" - }, - { - "name": "Jonathan Ong", - "email": "jonathanrichardong@gmail.com" - }, - { - "name": "Forbes Lindesay", - "email": "forbes@lindesay.co.uk" - }, - { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - { - "name": "Xavier Antoviaque", - "email": "xavier@antoviaque.org" - }, - { - "name": "hokaccha", - "email": "k.hokamura@gmail.com" - }, - { - "name": "Joshua Krall", - "email": "joshuakrall@pobox.com" - }, - { - "name": "Domenic Denicola", - "email": "domenic@domenicdenicola.com" - }, - { - "name": "Glen Mailer", - "email": "glenjamin@gmail.com" - }, - { - "name": "Mathieu Desvé", - "email": "mathieudesve@MacBook-Pro-de-Mathieu.local" - }, - { - "name": "Cory Thomas", - "email": "cory.thomas@bazaarvoice.com" - }, - { - "name": "Fredrik Enestad", - "email": "fredrik@devloop.se" - }, - { - "name": "Ben Bradley", - "email": "ben@bradleyit.com" - }, - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com" - }, - { - "name": "Jesse Dailey", - "email": "jesse.dailey@gmail.com" - }, - { - "name": "Ben Lindsey", - "email": "ben.lindsey@vungle.com" - }, - { - "name": "Maximilian Antoni", - "email": "mail@maxantoni.de" - }, - { - "name": "Merrick Christensen", - "email": "merrick.christensen@gmail.com" - }, - { - "name": "Michael Demmer", - "email": "demmer@jut.io" - }, - { - "name": "Tyson Tate", - "email": "tyson@tysontate.com" - }, - { - "name": "Valentin Agachi", - "email": "github-com@agachi.name" - }, - { - "name": "Wil Moore III", - "email": "wil.moore@wilmoore.com" - }, - { - "name": "Benjie Gillam", - "email": "benjie@jemjie.com" - }, - { - "name": "Nathan Bowser", - "email": "nathan.bowser@spiderstrategies.com" - }, - { - "name": "eiji.ienaga", - "email": "eiji.ienaga@gmail.com" - }, - { - "name": "fool2fish", - "email": "fool2fish@gmail.com" - }, - { - "name": "Paul Miller", - "email": "paul@paulmillr.com" - }, - { - "name": "Andreas Lind Petersen", - "email": "andreas@one.com" - }, - { - "name": "Timo Tijhof", - "email": "krinklemail@gmail.com" - }, - { - "name": "Nathan Alderson", - "email": "nathan.alderson@adtran.com" - }, - { - "name": "Ian Storm Taylor", - "email": "ian@ianstormtaylor.com" - }, - { - "name": "Arian Stolwijk", - "email": "arian@aryweb.nl" - }, - { - "name": "Rico Sta. Cruz", - "email": "rstacruz@users.noreply.github.com" - }, - { - "name": "domenic", - "email": "domenic@domenicdenicola.com" - }, - { - "name": "Jacob Wejendorp", - "email": "jacob@wejendorp.dk" - }, - { - "name": "fcrisci", - "email": "fabio.crisci@amadeus.com" - }, - { - "name": "Simon Gaeremynck", - "email": "gaeremyncks@gmail.com" - }, - { - "name": "James Nylen", - "email": "jnylen@gmail.com" - }, - { - "name": "Shawn Krisman", - "email": "telaviv@github" - }, - { - "name": "Sean Lang", - "email": "slang800@gmail.com" - }, - { - "name": "David Henderson", - "email": "david.henderson@triggeredmessaging.com" - }, - { - "name": "jsdevel", - "email": "js.developer.undefined@gmail.com" - }, - { - "name": "Alexander Early", - "email": "alexander.early@gmail.com" - }, - { - "name": "Parker Moore", - "email": "parkrmoore@gmail.com" - }, - { - "name": "Paul Armstrong", - "email": "paul@paularmstrongdesigns.com" - }, - { - "name": "monowerker", - "email": "monowerker@gmail.com" - }, - { - "name": "Konstantin Käfer", - "email": "github@kkaefer.com" - }, - { - "name": "Justin DuJardin", - "email": "justin.dujardin@sococo.com" - }, - { - "name": "Juzer Ali", - "email": "er.juzerali@gmail.com" - }, - { - "name": "Dominique Quatravaux", - "email": "dominique@quatravaux.org" - }, - { - "name": "Quang Van", - "email": "quangvvv@gmail.com" - }, - { - "name": "Quanlong He", - "email": "kyan.ql.he@gmail.com" - }, - { - "name": "Vlad Magdalin", - "email": "vlad@webflow.com" - }, - { - "name": "Brian Beck", - "email": "exogen@gmail.com" - }, - { - "name": "Jonas Westerlund", - "email": "jonas.westerlund@me.com" - }, - { - "name": "Michael Riley", - "email": "michael.riley@autodesk.com" - }, - { - "name": "Buck Doyle", - "email": "b@chromatin.ca" - }, - { - "name": "FARKAS Máté", - "email": "mate.farkas@virtual-call-center.eu" - }, - { - "name": "Sune Simonsen", - "email": "sune@we-knowhow.dk" - }, - { - "name": "Keith Cirkel", - "email": "github@keithcirkel.co.uk" - }, - { - "name": "Kent C. Dodds", - "email": "kent+github@doddsfamily.us" - }, - { - "name": "Kevin Conway", - "email": "kevinjacobconway@gmail.com" - }, - { - "name": "Kevin Kirsche", - "email": "Kev.Kirsche+GitHub@gmail.com" - }, - { - "name": "Kirill Korolyov", - "email": "kirill.korolyov@gmail.com" - }, - { - "name": "Koen Punt", - "email": "koen@koenpunt.nl" - }, - { - "name": "Kyle Mitchell", - "email": "kyle@kemitchell.com" - }, - { - "name": "Laszlo Bacsi", - "email": "lackac@lackac.hu" - }, - { - "name": "Liam Newman", - "email": "bitwiseman@gmail.com" - }, - { - "name": "Linus Unnebäck", - "email": "linus@folkdatorn.se" - }, - { - "name": "László Bácsi", - "email": "lackac@lackac.hu" - }, - { - "name": "Maciej Małecki", - "email": "maciej.malecki@notimplemented.org" - }, - { - "name": "Mal Graty", - "email": "mal.graty@googlemail.com" - }, - { - "name": "Marc Kuo", - "email": "kuomarc2@gmail.com" - }, - { - "name": "Marcello Bastea-Forte", - "email": "marcello@cellosoft.com" - }, - { - "name": "Martin Marko", - "email": "marcus@gratex.com" - }, - { - "name": "Matija Marohnić", - "email": "matija.marohnic@gmail.com" - }, - { - "name": "Matt Robenolt", - "email": "matt@ydekproductions.com" - }, - { - "name": "Matt Smith", - "email": "matthewgarysmith@gmail.com" - }, - { - "name": "Matthew Shanley", - "email": "matthewshanley@littlesecretsrecords.com" - }, - { - "name": "Mattias Tidlund", - "email": "mattias.tidlund@learningwell.se" - }, - { - "name": "Michael Jackson", - "email": "mjijackson@gmail.com" - }, - { - "name": "Michael Olson", - "email": "mwolson@member.fsf.org" - }, - { - "name": "Michael Schoonmaker", - "email": "michael.r.schoonmaker@gmail.com" - }, - { - "name": "Michal Charemza", - "email": "michalcharemza@gmail.com" - }, - { - "name": "Moshe Kolodny", - "email": "mkolodny@integralads.com" - }, - { - "name": "Nathan Black", - "email": "nathan@nathanblack.org" - }, - { - "name": "Nick Fitzgerald", - "email": "fitzgen@gmail.com" - }, - { - "name": "Nicolo Taddei", - "email": "taddei.uk@gmail.com" - }, - { - "name": "Noshir Patel", - "email": "nosh@blackpiano.com" - }, - { - "name": "Panu Horsmalahti", - "email": "panu.horsmalahti@iki.fi" - }, - { - "name": "Pete Hawkins", - "email": "pete@petes-imac.frontinternal.net" - }, - { - "name": "Pete Hawkins", - "email": "pete@phawk.co.uk" - }, - { - "name": "Phil Sung", - "email": "psung@dnanexus.com" - }, - { - "name": "R56", - "email": "rviskus@gmail.com" - }, - { - "name": "Raynos", - "email": "=" - }, - { - "name": "Refael Ackermann", - "email": "refael@empeeric.com" - }, - { - "name": "Richard Dingwall", - "email": "rdingwall@gmail.com" - }, - { - "name": "Richard Knop", - "email": "RichardKnop@users.noreply.github.com" - }, - { - "name": "Rob Wu", - "email": "rob@robwu.nl" - }, - { - "name": "Romain Prieto", - "email": "romain.prieto@gmail.com" - }, - { - "name": "Roman Neuhauser", - "email": "rneuhauser@suse.cz" - }, - { - "name": "Roman Shtylman", - "email": "shtylman@gmail.com" - }, - { - "name": "Russ Bradberry", - "email": "devdazed@me.com" - }, - { - "name": "Russell Munson", - "email": "rmunson@github.com" - }, - { - "name": "Rustem Mustafin", - "email": "mustafin@kt-labs.com" - }, - { - "name": "Ryan Hubbard", - "email": "ryanmhubbard@gmail.com" - }, - { - "name": "Salehen Shovon Rahman", - "email": "salehen.rahman@gmail.com" - }, - { - "name": "Sam Mussell", - "email": "smussell@gmail.com" - }, - { - "name": "Sasha Koss", - "email": "koss@nocorp.me" - }, - { - "name": "Seiya Konno", - "email": "nulltask@gmail.com" - }, - { - "name": "Shaine Hatch", - "email": "shaine@squidtree.com" - }, - { - "name": "Simon Goumaz", - "email": "simon@attentif.ch" - }, - { - "name": "Standa Opichal", - "email": "opichals@gmail.com" - }, - { - "name": "Stephen Mathieson", - "email": "smath23@gmail.com" - }, - { - "name": "Steve Mason", - "email": "stevem@brandwatch.com" - }, - { - "name": "Stewart Taylor", - "email": "stewart.taylor1@gmail.com" - }, - { - "name": "Tapiwa Kelvin", - "email": "tapiwa@munzwa.tk" - }, - { - "name": "Teddy Zeenny", - "email": "teddyzeenny@gmail.com" - }, - { - "name": "Tim Ehat", - "email": "timehat@gmail.com" - }, - { - "name": "Todd Agulnick", - "email": "tagulnick@onjack.com" - }, - { - "name": "Tom Coquereau", - "email": "tom@thau.me" - }, - { - "name": "Vadim Nikitin", - "email": "vnikiti@ncsu.edu" - }, - { - "name": "Victor Costan", - "email": "costan@gmail.com" - }, - { - "name": "Will Langstroth", - "email": "william.langstroth@gmail.com" - }, - { - "name": "Yanis Wang", - "email": "yanis.wang@gmail.com" - }, - { - "name": "Yuest Wang", - "email": "yuestwang@gmail.com" - }, - { - "name": "Zsolt Takács", - "email": "zsolt@takacs.cc" - }, - { - "name": "abrkn", - "email": "a@abrkn.com" - }, - { - "name": "airportyh", - "email": "airportyh@gmail.com" - }, - { - "name": "badunk", - "email": "baduncaduncan@gmail.com" - }, - { - "name": "claudyus", - "email": "claudyus@HEX.(none)", - "url": "none" - }, - { - "name": "dasilvacontin", - "email": "daviddasilvacontin@gmail.com" - }, - { - "name": "fengmk2", - "email": "fengmk2@gmail.com" - }, - { - "name": "gaye", - "email": "gaye@mozilla.com" - }, - { - "name": "grasGendarme", - "email": "me@grasgendar.me" - }, - { - "name": "klaemo", - "email": "klaemo@fastmail.fm" - }, - { - "name": "lakmeer", - "email": "lakmeerkravid@gmail.com" - }, - { - "name": "lodr", - "email": "salva@unoyunodiez.com" - }, - { - "name": "mrShturman", - "email": "mrshturman@gmail.com" - }, - { - "name": "nishigori", - "email": "Takuya_Nishigori@voyagegroup.com" - }, - { - "name": "omardelarosa", - "email": "thedelarosa@gmail.com" - }, - { - "name": "qiuzuhui", - "email": "qiuzuhui@users.noreply.github.com" - }, - { - "name": "samuel goldszmidt", - "email": "samuel.goldszmidt@gmail.com" - }, - { - "name": "sebv", - "email": "seb.vincent@gmail.com" - }, - { - "name": "slyg", - "email": "syl.faucherand@gmail.com" - }, - { - "name": "startswithaj", - "email": "jake.mc@icloud.com" - }, - { - "name": "tgautier@yahoo.com", - "email": "tgautier@gmail.com" - }, - { - "name": "traleig1", - "email": "darkphoenix739@gmail.com" - }, - { - "name": "vlad", - "email": "iamvlad@gmail.com" - }, - { - "name": "yuitest", - "email": "yuitest@cjhat.net" - }, - { - "name": "zhiyelee", - "email": "zhiyelee@gmail.com" - }, - { - "name": "Adam Crabtree", - "email": "adam.crabtree@redrobotlabs.com" - }, - { - "name": "Adam Gruber", - "email": "talknmime@gmail.com" - }, - { - "name": "Andreas Brekken", - "email": "andreas@opuno.com" - }, - { - "name": "Andrew Nesbitt", - "email": "andrewnez@gmail.com" - }, - { - "name": "Andrey Popp", - "email": "8mayday@gmail.com" - }, - { - "name": "Andrii Shumada", - "email": "eagleeyes91@gmail.com" - }, - { - "name": "Anis Safine", - "email": "anis.safine.ext@francetv.fr" - }, - { - "name": "Arnaud Brousseau", - "email": "arnaud.brousseau@gmail.com" - }, - { - "name": "Atsuya Takagi", - "email": "asoftonight@gmail.com" - }, - { - "name": "Austin Birch", - "email": "mraustinbirch@gmail.com" - }, - { - "name": "Ben Noordhuis", - "email": "info@bnoordhuis.nl" - }, - { - "name": "Benoît Zugmeyer", - "email": "bzugmeyer@gmail.com" - }, - { - "name": "Bjørge Næss", - "email": "bjoerge@origo.no" - }, - { - "name": "Brian Lalor", - "email": "blalor@bravo5.org" - }, - { - "name": "Brian M. Carlson", - "email": "brian.m.carlson@gmail.com" - }, - { - "name": "Brian Moore", - "email": "guardbionic-github@yahoo.com" - }, - { - "name": "Bryan Donovan", - "email": "bdondo@gmail.com" - }, - { - "name": "C. Scott Ananian", - "email": "cscott@cscott.net" - }, - { - "name": "Casey Foster", - "email": "casey@caseywebdev.com" - }, - { - "name": "Chris Buckley", - "email": "chris@cmbuckley.co.uk" - }, - { - "name": "ChrisWren", - "email": "cthewren@gmail.com" - }, - { - "name": "Connor Dunn", - "email": "connorhd@gmail.com" - }, - { - "name": "Corey Butler", - "email": "corey@coreybutler.com" - }, - { - "name": "Daniel Stockman", - "email": "daniel.stockman@gmail.com" - }, - { - "name": "Dave McKenna", - "email": "davemckenna01@gmail.com" - }, - { - "name": "Denis Bardadym", - "email": "bardadymchik@gmail.com" - }, - { - "name": "Devin Weaver", - "email": "suki@tritarget.org" - }, - { - "name": "Di Wu", - "email": "dwu@palantir.com" - }, - { - "name": "Diogo Monteiro", - "email": "diogo.gmt@gmail.com" - }, - { - "name": "Dmitry Shirokov", - "email": "deadrunk@gmail.com" - }, - { - "name": "Dominic Barnes", - "email": "dominic@dbarnes.info" - }, - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Fede Ramirez", - "email": "i@2fd.me" - }, - { - "name": "Fedor Indutny", - "email": "fedor.indutny@gmail.com" - }, - { - "name": "Florian Margaine", - "email": "florian@margaine.com" - }, - { - "name": "Frederico Silva", - "email": "frederico.silva@gmail.com" - }, - { - "name": "Fredrik Lindin", - "email": "fredriklindin@gmail.com" - }, - { - "name": "Gareth Aye", - "email": "gaye@mozilla.com" - }, - { - "name": "Gareth Murphy", - "email": "gareth.cpm@gmail.com" - }, - { - "name": "Gavin Mogan", - "email": "GavinM@airg.com" - }, - { - "name": "Giovanni Bassi", - "email": "giggio@giggio.net" - }, - { - "name": "Glen Huang", - "email": "curvedmark@gmail.com" - }, - { - "name": "Greg Perkins", - "email": "gregperkins@alum.mit.edu" - }, - { - "name": "Harish", - "email": "hyeluri@gmail.com" - }, - { - "name": "Harry Brundage", - "email": "harry.brundage@gmail.com" - }, - { - "name": "Herman Junge", - "email": "herman@geekli.st" - }, - { - "name": "Ian Young", - "email": "ian.greenleaf@gmail.com" - }, - { - "name": "Ian Zamojc", - "email": "ian@thesecretlocation.net" - }, - { - "name": "Ivan", - "email": "ivan@kinvey.com" - }, - { - "name": "JP Bochi", - "email": "jpbochi@gmail.com" - }, - { - "name": "Jaakko Salonen", - "email": "jaakko.salonen@iki.fi" - }, - { - "name": "Jake Craige", - "email": "james.craige@gmail.com" - }, - { - "name": "Jake Marsh", - "email": "jakemmarsh@gmail.com" - }, - { - "name": "Jakub Nešetřil", - "email": "jakub@apiary.io" - }, - { - "name": "James Bowes", - "email": "jbowes@repl.ca" - }, - { - "name": "James Lal", - "email": "james@lightsofapollo.com" - }, - { - "name": "Jan Kopriva", - "email": "jan.kopriva@gooddata.com" - }, - { - "name": "Jason Barry", - "email": "jay@jcbarry.com" - }, - { - "name": "Javier Aranda", - "email": "javierav@javierav.com" - }, - { - "name": "Jean Ponchon", - "email": "gelule@gmail.com" - }, - { - "name": "Jeff Kunkle", - "email": "jeff.kunkle@nearinfinity.com" - }, - { - "name": "Jeff Schilling", - "email": "jeff.schilling@q2ebanking.com" - }, - { - "name": "Jeremy Martin", - "email": "jmar777@gmail.com" - }, - { - "name": "Jimmy Cuadra", - "email": "jimmy@jimmycuadra.com" - }, - { - "name": "John Doty", - "email": "jrhdoty@gmail.com" - }, - { - "name": "Johnathon Sanders", - "email": "outdooricon@gmail.com" - }, - { - "name": "Jonas Dohse", - "email": "jonas@mbr-targeting.com" - }, - { - "name": "Jonathan Creamer", - "email": "matrixhasyou2k4@gmail.com" - }, - { - "name": "Jonathan Delgado", - "email": "jdelgado@rewip.com" - }, - { - "name": "Jonathan Park", - "email": "jpark@daptiv.com" - }, - { - "name": "Jordan Sexton", - "email": "jordan@jordansexton.com" - }, - { - "name": "Jussi Virtanen", - "email": "jussi.k.virtanen@gmail.com" - }, - { - "name": "Katie Gengler", - "email": "katiegengler@gmail.com" - }, - { - "name": "Kazuhito Hokamura", - "email": "k.hokamura@gmail.com" - } - ], "dependencies": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.3", - "growl": "1.8.1", - "jade": "0.26.3", - "mkdirp": "0.5.0", - "supports-color": "1.2.0" + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "deprecated": false, "description": "simple, flexible, fun test framework", "devDependencies": { - "browser-stdout": "^1.2.0", - "browserify": "10.2.4", - "coffee-script": "~1.8.0", - "eslint": "^1.2.1", - "should": "~4.0.0", - "through2": "~0.6.5" + "@11ty/eleventy": "^0.12.1", + "@11ty/eleventy-plugin-inclusive-language": "^1.0.3", + "@babel/eslint-parser": "^7.16.5", + "@babel/preset-env": "^7.16.11", + "@mocha/docdash": "^4.0.0", + "@rollup/plugin-babel": "^5.1.0", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^3.0.1", + "@rollup/plugin-node-resolve": "^8.4.0", + "assetgraph-builder": "^9.0.0", + "autoprefixer": "^9.8.6", + "canvas": "^2.9.0", + "chai": "^4.3.4", + "coffee-script": "^1.12.7", + "configstore": "^5.0.1", + "core-js": "^3.20.3", + "coveralls": "^3.1.1", + "cross-env": "^7.0.2", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-config-semistandard": "^16.0.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.24.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-promise": "^5.1.0", + "fail-on-errors-webpack-plugin": "^3.0.0", + "fs-extra": "^10.0.0", + "husky": "^4.2.5", + "hyperlink": "^5.0.4", + "jsdoc": "^3.6.7", + "jsdoc-ts-utils": "^2.0.1", + "karma": "^6.3.11", + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-requirejs": "^1.1.0", + "karma-sauce-launcher": "^4.3.6", + "lint-staged": "^10.2.11", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "markdown-it-attrs": "^4.1.3", + "markdown-it-emoji": "^2.0.0", + "markdown-it-prism": "^2.2.2", + "markdown-toc": "^1.2.0", + "markdownlint-cli": "^0.30.0", + "needle": "^2.5.0", + "nps": "^5.10.0", + "nyc": "^15.1.0", + "pidtree": "^0.5.0", + "prettier": "^2.4.1", + "regenerator-runtime": "0.13.7", + "remark": "^14.0.2", + "remark-github": "^11.2.2", + "remark-inline-links": "^6.0.1", + "requirejs": "^2.3.6", + "rewiremock": "^3.14.3", + "rimraf": "^3.0.2", + "rollup": "^2.66.0", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-visualizer": "^5.5.4", + "sinon": "^9.0.3", + "strip-ansi": "^6.0.0", + "svgo": "^1.3.2", + "through2": "^4.0.2", + "touch": "^3.1.0", + "unexpected": "^11.14.0", + "unexpected-eventemitter": "^2.2.0", + "unexpected-map": "^2.0.0", + "unexpected-set": "^3.0.0", + "unexpected-sinon": "^10.11.2", + "update-notifier": "^4.1.0", + "uslug": "^1.0.4", + "uuid": "^8.3.0", + "watchify": "^4.0.0", + "webpack": "^5.67.0", + "webpack-cli": "^4.9.1" + }, + "directories": { + "lib": "./lib", + "test": "./test" }, "engines": { - "node": ">= 0.8.x" + "node": ">= 12.0.0" }, "files": [ - "bin", - "images", - "lib", + "bin/*mocha", + "assets/growl/*.png", + "lib/**/*.{js,html,json}", "index.js", "mocha.css", "mocha.js", - "LICENSE" + "mocha.js.map", + "mocha-es2018.js", + "browser-entry.js" ], - "homepage": "https://github.com/mochajs/mocha#readme", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + }, + "gitter": "https://gitter.im/mochajs/mocha", + "homepage": "https://mochajs.org/", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, "keywords": [ "mocha", "test", "bdd", "tdd", - "tap" + "tap", + "testing", + "chai", + "assertion", + "ava", + "jest", + "tape", + "jasmine", + "karma" ], "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "https://raw.github.com/mochajs/mocha/master/LICENSE" - } - ], - "main": "./index", - "maintainers": [ - { - "name": "travisjeffery", - "email": "tj@travisjeffery.com" - }, - { - "name": "jbnicolai", - "email": "joshua@jbna.nl" - }, - { - "name": "boneskull", - "email": "chiller@badwing.com" - } - ], + "logo": "https://cldup.com/S9uQ-cOLYz.svg", "name": "mocha", + "notifyLogo": "https://ibin.co/4QuRuGjXvl36.png", + "prettier": { + "arrowParens": "avoid", + "bracketSpacing": false, + "endOfLine": "auto", + "singleQuote": true, + "trailingComma": "none" + }, "repository": { "type": "git", - "url": "git://github.com/mochajs/mocha.git" + "url": "git+https://github.com/mochajs/mocha.git" }, "scripts": { - "test": "make test-all" + "prepublishOnly": "nps test clean build", + "start": "nps", + "test": "nps test", + "test:smoke": "node ./bin/mocha --no-config test/smoke/smoke.spec.js", + "version": "nps version" }, - "version": "2.3.4" + "type": "commonjs", + "version": "9.2.2" } diff --git a/build/node_modules/ms/index.js b/build/node_modules/ms/index.js index ea734fb7..c4498bcc 100644 --- a/build/node_modules/ms/index.js +++ b/build/node_modules/ms/index.js @@ -23,7 +23,7 @@ var y = d * 365.25; * @api public */ -module.exports = function (val, options) { +module.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === 'string' && val.length > 0) { diff --git a/build/node_modules/ms/license.md b/build/node_modules/ms/license.md index fa5d39b6..69b61253 100644 --- a/build/node_modules/ms/license.md +++ b/build/node_modules/ms/license.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2020 Vercel, Inc. +Copyright (c) 2016 Zeit, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/build/node_modules/ms/package.json b/build/node_modules/ms/package.json index 709a21fa..8abec6ee 100644 --- a/build/node_modules/ms/package.json +++ b/build/node_modules/ms/package.json @@ -1,41 +1,40 @@ { - "_from": "ms@^2.1.1", - "_id": "ms@2.1.3", + "_from": "ms@2.1.2", + "_id": "ms@2.1.2", "_inBundle": false, - "_integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "_location": "/ms", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "ms@^2.1.1", + "raw": "ms@2.1.2", "name": "ms", "escapedName": "ms", - "rawSpec": "^2.1.1", + "rawSpec": "2.1.2", "saveSpec": null, - "fetchSpec": "^2.1.1" + "fetchSpec": "2.1.2" }, "_requiredBy": [ "/debug", "/logform" ], - "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "_shasum": "574c8138ce1d2b5861f0b44579dbadd60c6615b2", - "_spec": "ms@^2.1.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.2.tgz", + "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009", + "_spec": "ms@2.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/debug", "bugs": { - "url": "https://github.com/vercel/ms/issues" + "url": "https://github.com/zeit/ms/issues" }, "bundleDependencies": false, "deprecated": false, "description": "Tiny millisecond conversion utility", "devDependencies": { - "eslint": "4.18.2", + "eslint": "4.12.1", "expect.js": "0.3.1", "husky": "0.14.3", "lint-staged": "5.0.0", - "mocha": "4.0.1", - "prettier": "2.0.5" + "mocha": "4.0.1" }, "eslintConfig": { "extends": "eslint:recommended", @@ -47,7 +46,7 @@ "files": [ "index.js" ], - "homepage": "https://github.com/vercel/ms#readme", + "homepage": "https://github.com/zeit/ms#readme", "license": "MIT", "lint-staged": { "*.js": [ @@ -60,12 +59,12 @@ "name": "ms", "repository": { "type": "git", - "url": "git+https://github.com/vercel/ms.git" + "url": "git+https://github.com/zeit/ms.git" }, "scripts": { "lint": "eslint lib/* bin/*", "precommit": "lint-staged", "test": "mocha tests.js" }, - "version": "2.1.3" + "version": "2.1.2" } diff --git a/build/node_modules/ms/readme.md b/build/node_modules/ms/readme.md index 0fc1abb3..9a1996b1 100644 --- a/build/node_modules/ms/readme.md +++ b/build/node_modules/ms/readme.md @@ -1,6 +1,7 @@ # ms -![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) Use this package to easily convert various time formats to milliseconds. diff --git a/build/node_modules/nanoid/LICENSE b/build/node_modules/nanoid/LICENSE new file mode 100644 index 00000000..37f56aa4 --- /dev/null +++ b/build/node_modules/nanoid/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2017 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/nanoid/README.md b/build/node_modules/nanoid/README.md new file mode 100644 index 00000000..a4abd920 --- /dev/null +++ b/build/node_modules/nanoid/README.md @@ -0,0 +1,39 @@ +# Nano ID + +Nano ID logo by Anton Lovchikov + +**English** | [Русский](./README.ru.md) | [简体中文](./README.zh-CN.md) | [Bahasa Indonesia](./README.id-ID.md) + +A tiny, secure, URL-friendly, unique string ID generator for JavaScript. + +> “An amazing level of senseless perfectionism, +> which is simply impossible not to respect.” + +* **Small.** 130 bytes (minified and gzipped). No dependencies. + [Size Limit] controls the size. +* **Fast.** It is 2 times faster than UUID. +* **Safe.** It uses hardware random generator. Can be used in clusters. +* **Short IDs.** It uses a larger alphabet than UUID (`A-Za-z0-9_-`). + So ID size was reduced from 36 to 21 symbols. +* **Portable.** Nano ID was ported + to [20 programming languages](#other-programming-languages). + +```js +import { nanoid } from 'nanoid' +model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT" +``` + +Supports modern browsers, IE [with Babel], Node.js and React Native. + +[online tool]: https://gitpod.io/#https://github.com/ai/nanoid/ +[with Babel]: https://developer.epages.com/blog/coding/how-to-transpile-node-modules-with-babel-and-webpack-in-a-monorepo/ +[Size Limit]: https://github.com/ai/size-limit + + + Sponsored by Evil Martians + + +## Docs +Read **[full docs](https://github.com/ai/nanoid#readme)** on GitHub. diff --git a/build/node_modules/nanoid/async/index.browser.cjs b/build/node_modules/nanoid/async/index.browser.cjs new file mode 100644 index 00000000..7e5bba83 --- /dev/null +++ b/build/node_modules/nanoid/async/index.browser.cjs @@ -0,0 +1,34 @@ +let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes)) +let customAlphabet = (alphabet, defaultSize = 21) => { + let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 + let step = -~((1.6 * mask * defaultSize) / alphabet.length) + return async (size = defaultSize) => { + let id = '' + while (true) { + let bytes = crypto.getRandomValues(new Uint8Array(step)) + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + } + } +} +let nanoid = async (size = 21) => { + let id = '' + let bytes = crypto.getRandomValues(new Uint8Array(size)) + while (size--) { + let byte = bytes[size] & 63 + if (byte < 36) { + id += byte.toString(36) + } else if (byte < 62) { + id += (byte - 26).toString(36).toUpperCase() + } else if (byte < 63) { + id += '_' + } else { + id += '-' + } + } + return id +} +module.exports = { nanoid, customAlphabet, random } diff --git a/build/node_modules/nanoid/async/index.browser.js b/build/node_modules/nanoid/async/index.browser.js new file mode 100644 index 00000000..5ece04d6 --- /dev/null +++ b/build/node_modules/nanoid/async/index.browser.js @@ -0,0 +1,34 @@ +let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes)) +let customAlphabet = (alphabet, defaultSize = 21) => { + let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 + let step = -~((1.6 * mask * defaultSize) / alphabet.length) + return async (size = defaultSize) => { + let id = '' + while (true) { + let bytes = crypto.getRandomValues(new Uint8Array(step)) + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + } + } +} +let nanoid = async (size = 21) => { + let id = '' + let bytes = crypto.getRandomValues(new Uint8Array(size)) + while (size--) { + let byte = bytes[size] & 63 + if (byte < 36) { + id += byte.toString(36) + } else if (byte < 62) { + id += (byte - 26).toString(36).toUpperCase() + } else if (byte < 63) { + id += '_' + } else { + id += '-' + } + } + return id +} +export { nanoid, customAlphabet, random } diff --git a/build/node_modules/nanoid/async/index.cjs b/build/node_modules/nanoid/async/index.cjs new file mode 100644 index 00000000..50db1057 --- /dev/null +++ b/build/node_modules/nanoid/async/index.cjs @@ -0,0 +1,35 @@ +let crypto = require('crypto') +let { urlAlphabet } = require('../url-alphabet/index.cjs') +let random = bytes => + new Promise((resolve, reject) => { + crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => { + if (err) { + reject(err) + } else { + resolve(buf) + } + }) + }) +let customAlphabet = (alphabet, defaultSize = 21) => { + let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 + let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) + let tick = (id, size = defaultSize) => + random(step).then(bytes => { + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + return tick(id, size) + }) + return size => tick('', size) +} +let nanoid = (size = 21) => + random(size).then(bytes => { + let id = '' + while (size--) { + id += urlAlphabet[bytes[size] & 63] + } + return id + }) +module.exports = { nanoid, customAlphabet, random } diff --git a/build/node_modules/nanoid/async/index.d.ts b/build/node_modules/nanoid/async/index.d.ts new file mode 100644 index 00000000..9e919658 --- /dev/null +++ b/build/node_modules/nanoid/async/index.d.ts @@ -0,0 +1,56 @@ +/** + * Generate secure URL-friendly unique ID. The non-blocking version. + * + * By default, the ID will have 21 symbols to have a collision probability + * similar to UUID v4. + * + * ```js + * import { nanoid } from 'nanoid/async' + * nanoid().then(id => { + * model.id = id + * }) + * ``` + * + * @param size Size of the ID. The default size is 21. + * @returns A promise with a random string. + */ +export function nanoid(size?: number): Promise + +/** + * A low-level function. + * Generate secure unique ID with custom alphabet. The non-blocking version. + * + * Alphabet must contain 256 symbols or less. Otherwise, the generator + * will not be secure. + * + * @param alphabet Alphabet used to generate the ID. + * @param defaultSize Size of the ID. The default size is 21. + * @returns A function that returns a promise with a random string. + * + * ```js + * import { customAlphabet } from 'nanoid/async' + * const nanoid = customAlphabet('0123456789абвгдеё', 5) + * nanoid().then(id => { + * model.id = id //=> "8ё56а" + * }) + * ``` + */ +export function customAlphabet( + alphabet: string, + defaultSize?: number +): (size?: number) => Promise + +/** + * Generate an array of random bytes collected from hardware noise. + * + * ```js + * import { random } from 'nanoid/async' + * random(5).then(bytes => { + * bytes //=> [10, 67, 212, 67, 89] + * }) + * ``` + * + * @param bytes Size of the array. + * @returns A promise with a random bytes array. + */ +export function random(bytes: number): Promise diff --git a/build/node_modules/nanoid/async/index.js b/build/node_modules/nanoid/async/index.js new file mode 100644 index 00000000..803fad6f --- /dev/null +++ b/build/node_modules/nanoid/async/index.js @@ -0,0 +1,35 @@ +import crypto from 'crypto' +import { urlAlphabet } from '../url-alphabet/index.js' +let random = bytes => + new Promise((resolve, reject) => { + crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => { + if (err) { + reject(err) + } else { + resolve(buf) + } + }) + }) +let customAlphabet = (alphabet, defaultSize = 21) => { + let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 + let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) + let tick = (id, size = defaultSize) => + random(step).then(bytes => { + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + return tick(id, size) + }) + return size => tick('', size) +} +let nanoid = (size = 21) => + random(size).then(bytes => { + let id = '' + while (size--) { + id += urlAlphabet[bytes[size] & 63] + } + return id + }) +export { nanoid, customAlphabet, random } diff --git a/build/node_modules/nanoid/async/index.native.js b/build/node_modules/nanoid/async/index.native.js new file mode 100644 index 00000000..5cb3d57a --- /dev/null +++ b/build/node_modules/nanoid/async/index.native.js @@ -0,0 +1,26 @@ +import { getRandomBytesAsync } from 'expo-random' +import { urlAlphabet } from '../url-alphabet/index.js' +let random = getRandomBytesAsync +let customAlphabet = (alphabet, defaultSize = 21) => { + let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 + let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) + let tick = (id, size = defaultSize) => + random(step).then(bytes => { + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + return tick(id, size) + }) + return size => tick('', size) +} +let nanoid = (size = 21) => + random(size).then(bytes => { + let id = '' + while (size--) { + id += urlAlphabet[bytes[size] & 63] + } + return id + }) +export { nanoid, customAlphabet, random } diff --git a/build/node_modules/nanoid/async/package.json b/build/node_modules/nanoid/async/package.json new file mode 100644 index 00000000..578cdb4c --- /dev/null +++ b/build/node_modules/nanoid/async/package.json @@ -0,0 +1,12 @@ +{ + "type": "module", + "main": "index.cjs", + "module": "index.js", + "react-native": { + "./index.js": "./index.native.js" + }, + "browser": { + "./index.js": "./index.browser.js", + "./index.cjs": "./index.browser.cjs" + } +} \ No newline at end of file diff --git a/build/node_modules/nanoid/bin/nanoid.cjs b/build/node_modules/nanoid/bin/nanoid.cjs new file mode 100755 index 00000000..aeb5f431 --- /dev/null +++ b/build/node_modules/nanoid/bin/nanoid.cjs @@ -0,0 +1,55 @@ +#!/usr/bin/env node + +let { nanoid, customAlphabet } = require('..') + +function print(msg) { + process.stdout.write(msg + '\n') +} + +function error(msg) { + process.stderr.write(msg + '\n') + process.exit(1) +} + +if (process.argv.includes('--help') || process.argv.includes('-h')) { + print(` + Usage + $ nanoid [options] + + Options + -s, --size Generated ID size + -a, --alphabet Alphabet to use + -h, --help Show this help + + Examples + $ nano --s 15 + S9sBF77U6sDB8Yg + + $ nano --size 10 --alphabet abc + bcabababca`) + process.exit() +} + +let alphabet, size +for (let i = 2; i < process.argv.length; i++) { + let arg = process.argv[i] + if (arg === '--size' || arg === '-s') { + size = Number(process.argv[i + 1]) + i += 1 + if (Number.isNaN(size) || size <= 0) { + error('Size must be positive integer') + } + } else if (arg === '--alphabet' || arg === '-a') { + alphabet = process.argv[i + 1] + i += 1 + } else { + error('Unknown argument ' + arg) + } +} + +if (alphabet) { + let customNanoid = customAlphabet(alphabet, size) + print(customNanoid()) +} else { + print(nanoid(size)) +} diff --git a/build/node_modules/nanoid/index.browser.cjs b/build/node_modules/nanoid/index.browser.cjs new file mode 100644 index 00000000..e4d6c190 --- /dev/null +++ b/build/node_modules/nanoid/index.browser.cjs @@ -0,0 +1,37 @@ +let { urlAlphabet } = require('./url-alphabet/index.cjs') +let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) +let customRandom = (alphabet, defaultSize, getRandom) => { + let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 + let step = -~((1.6 * mask * defaultSize) / alphabet.length) + return (size = defaultSize) => { + let id = '' + while (true) { + let bytes = getRandom(step) + let j = step + while (j--) { + id += alphabet[bytes[j] & mask] || '' + if (id.length === size) return id + } + } + } +} +let customAlphabet = (alphabet, size = 21) => + customRandom(alphabet, size, random) +let nanoid = (size = 21) => { + let id = '' + let bytes = crypto.getRandomValues(new Uint8Array(size)) + while (size--) { + let byte = bytes[size] & 63 + if (byte < 36) { + id += byte.toString(36) + } else if (byte < 62) { + id += (byte - 26).toString(36).toUpperCase() + } else if (byte < 63) { + id += '_' + } else { + id += '-' + } + } + return id +} +module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/build/node_modules/nanoid/index.browser.js b/build/node_modules/nanoid/index.browser.js new file mode 100644 index 00000000..89f1680c --- /dev/null +++ b/build/node_modules/nanoid/index.browser.js @@ -0,0 +1,37 @@ +import { urlAlphabet } from './url-alphabet/index.js' +let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) +let customRandom = (alphabet, defaultSize, getRandom) => { + let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 + let step = -~((1.6 * mask * defaultSize) / alphabet.length) + return (size = defaultSize) => { + let id = '' + while (true) { + let bytes = getRandom(step) + let j = step + while (j--) { + id += alphabet[bytes[j] & mask] || '' + if (id.length === size) return id + } + } + } +} +let customAlphabet = (alphabet, size = 21) => + customRandom(alphabet, size, random) +let nanoid = (size = 21) => { + let id = '' + let bytes = crypto.getRandomValues(new Uint8Array(size)) + while (size--) { + let byte = bytes[size] & 63 + if (byte < 36) { + id += byte.toString(36) + } else if (byte < 62) { + id += (byte - 26).toString(36).toUpperCase() + } else if (byte < 63) { + id += '_' + } else { + id += '-' + } + } + return id +} +export { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/build/node_modules/nanoid/index.cjs b/build/node_modules/nanoid/index.cjs new file mode 100644 index 00000000..0fa85e9d --- /dev/null +++ b/build/node_modules/nanoid/index.cjs @@ -0,0 +1,45 @@ +let crypto = require('crypto') +let { urlAlphabet } = require('./url-alphabet/index.cjs') +const POOL_SIZE_MULTIPLIER = 128 +let pool, poolOffset +let fillPool = bytes => { + if (!pool || pool.length < bytes) { + pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) + crypto.randomFillSync(pool) + poolOffset = 0 + } else if (poolOffset + bytes > pool.length) { + crypto.randomFillSync(pool) + poolOffset = 0 + } + poolOffset += bytes +} +let random = bytes => { + fillPool((bytes -= 0)) + return pool.subarray(poolOffset - bytes, poolOffset) +} +let customRandom = (alphabet, defaultSize, getRandom) => { + let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 + let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) + return (size = defaultSize) => { + let id = '' + while (true) { + let bytes = getRandom(step) + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + } + } +} +let customAlphabet = (alphabet, size = 21) => + customRandom(alphabet, size, random) +let nanoid = (size = 21) => { + fillPool((size -= 0)) + let id = '' + for (let i = poolOffset - size; i < poolOffset; i++) { + id += urlAlphabet[pool[i] & 63] + } + return id +} +module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/build/node_modules/nanoid/index.d.ts b/build/node_modules/nanoid/index.d.ts new file mode 100644 index 00000000..3e111a39 --- /dev/null +++ b/build/node_modules/nanoid/index.d.ts @@ -0,0 +1,91 @@ +/** + * Generate secure URL-friendly unique ID. + * + * By default, the ID will have 21 symbols to have a collision probability + * similar to UUID v4. + * + * ```js + * import { nanoid } from 'nanoid' + * model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL" + * ``` + * + * @param size Size of the ID. The default size is 21. + * @returns A random string. + */ +export function nanoid(size?: number): string + +/** + * Generate secure unique ID with custom alphabet. + * + * Alphabet must contain 256 symbols or less. Otherwise, the generator + * will not be secure. + * + * @param alphabet Alphabet used to generate the ID. + * @param defaultSize Size of the ID. The default size is 21. + * @returns A random string generator. + * + * ```js + * const { customAlphabet } = require('nanoid') + * const nanoid = customAlphabet('0123456789абвгдеё', 5) + * nanoid() //=> "8ё56а" + * ``` + */ +export function customAlphabet( + alphabet: string, + defaultSize?: number +): (size?: number) => string + +/** + * Generate unique ID with custom random generator and alphabet. + * + * Alphabet must contain 256 symbols or less. Otherwise, the generator + * will not be secure. + * + * ```js + * import { customRandom } from 'nanoid/format' + * + * const nanoid = customRandom('abcdef', 5, size => { + * const random = [] + * for (let i = 0; i < size; i++) { + * random.push(randomByte()) + * } + * return random + * }) + * + * nanoid() //=> "fbaef" + * ``` + * + * @param alphabet Alphabet used to generate a random string. + * @param size Size of the random string. + * @param random A random bytes generator. + * @returns A random string generator. + */ +export function customRandom( + alphabet: string, + size: number, + random: (bytes: number) => Uint8Array +): () => string + +/** + * URL safe symbols. + * + * ```js + * import { urlAlphabet } from 'nanoid' + * const nanoid = customAlphabet(urlAlphabet, 10) + * nanoid() //=> "Uakgb_J5m9" + * ``` + */ +export const urlAlphabet: string + +/** + * Generate an array of random bytes collected from hardware noise. + * + * ```js + * import { customRandom, random } from 'nanoid' + * const nanoid = customRandom("abcdef", 5, random) + * ``` + * + * @param bytes Size of the array. + * @returns An array of random bytes. + */ +export function random(bytes: number): Uint8Array diff --git a/build/node_modules/nanoid/index.js b/build/node_modules/nanoid/index.js new file mode 100644 index 00000000..21e155fc --- /dev/null +++ b/build/node_modules/nanoid/index.js @@ -0,0 +1,45 @@ +import crypto from 'crypto' +import { urlAlphabet } from './url-alphabet/index.js' +const POOL_SIZE_MULTIPLIER = 128 +let pool, poolOffset +let fillPool = bytes => { + if (!pool || pool.length < bytes) { + pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER) + crypto.randomFillSync(pool) + poolOffset = 0 + } else if (poolOffset + bytes > pool.length) { + crypto.randomFillSync(pool) + poolOffset = 0 + } + poolOffset += bytes +} +let random = bytes => { + fillPool((bytes -= 0)) + return pool.subarray(poolOffset - bytes, poolOffset) +} +let customRandom = (alphabet, defaultSize, getRandom) => { + let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1 + let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length) + return (size = defaultSize) => { + let id = '' + while (true) { + let bytes = getRandom(step) + let i = step + while (i--) { + id += alphabet[bytes[i] & mask] || '' + if (id.length === size) return id + } + } + } +} +let customAlphabet = (alphabet, size = 21) => + customRandom(alphabet, size, random) +let nanoid = (size = 21) => { + fillPool((size -= 0)) + let id = '' + for (let i = poolOffset - size; i < poolOffset; i++) { + id += urlAlphabet[pool[i] & 63] + } + return id +} +export { nanoid, customAlphabet, customRandom, urlAlphabet, random } diff --git a/build/node_modules/nanoid/nanoid.js b/build/node_modules/nanoid/nanoid.js new file mode 100644 index 00000000..5bbc4893 --- /dev/null +++ b/build/node_modules/nanoid/nanoid.js @@ -0,0 +1 @@ +export let nanoid=(t=21)=>{let e="",r=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let n=63&r[t];e+=n<36?n.toString(36):n<62?(n-26).toString(36).toUpperCase():n<63?"_":"-"}return e}; \ No newline at end of file diff --git a/build/node_modules/nanoid/non-secure/index.cjs b/build/node_modules/nanoid/non-secure/index.cjs new file mode 100644 index 00000000..09d57cdc --- /dev/null +++ b/build/node_modules/nanoid/non-secure/index.cjs @@ -0,0 +1,21 @@ +let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' +let customAlphabet = (alphabet, defaultSize = 21) => { + return (size = defaultSize) => { + let id = '' + let i = size + while (i--) { + id += alphabet[(Math.random() * alphabet.length) | 0] + } + return id + } +} +let nanoid = (size = 21) => { + let id = '' + let i = size + while (i--) { + id += urlAlphabet[(Math.random() * 64) | 0] + } + return id +} +module.exports = { nanoid, customAlphabet } diff --git a/build/node_modules/nanoid/non-secure/index.d.ts b/build/node_modules/nanoid/non-secure/index.d.ts new file mode 100644 index 00000000..4965322d --- /dev/null +++ b/build/node_modules/nanoid/non-secure/index.d.ts @@ -0,0 +1,33 @@ +/** + * Generate URL-friendly unique ID. This method uses the non-secure + * predictable random generator with bigger collision probability. + * + * ```js + * import { nanoid } from 'nanoid/non-secure' + * model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL" + * ``` + * + * @param size Size of the ID. The default size is 21. + * @returns A random string. + */ +export function nanoid(size?: number): string + +/** + * Generate a unique ID based on a custom alphabet. + * This method uses the non-secure predictable random generator + * with bigger collision probability. + * + * @param alphabet Alphabet used to generate the ID. + * @param defaultSize Size of the ID. The default size is 21. + * @returns A random string generator. + * + * ```js + * import { customAlphabet } from 'nanoid/non-secure' + * const nanoid = customAlphabet('0123456789абвгдеё', 5) + * model.id = //=> "8ё56а" + * ``` + */ +export function customAlphabet( + alphabet: string, + defaultSize?: number +): (size?: number) => string diff --git a/build/node_modules/nanoid/non-secure/index.js b/build/node_modules/nanoid/non-secure/index.js new file mode 100644 index 00000000..e7e19adf --- /dev/null +++ b/build/node_modules/nanoid/non-secure/index.js @@ -0,0 +1,21 @@ +let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' +let customAlphabet = (alphabet, defaultSize = 21) => { + return (size = defaultSize) => { + let id = '' + let i = size + while (i--) { + id += alphabet[(Math.random() * alphabet.length) | 0] + } + return id + } +} +let nanoid = (size = 21) => { + let id = '' + let i = size + while (i--) { + id += urlAlphabet[(Math.random() * 64) | 0] + } + return id +} +export { nanoid, customAlphabet } diff --git a/build/node_modules/nanoid/non-secure/package.json b/build/node_modules/nanoid/non-secure/package.json new file mode 100644 index 00000000..9930d6ad --- /dev/null +++ b/build/node_modules/nanoid/non-secure/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "main": "index.cjs", + "module": "index.js", + "react-native": "index.js" +} \ No newline at end of file diff --git a/build/node_modules/nanoid/package.json b/build/node_modules/nanoid/package.json new file mode 100644 index 00000000..d35b062e --- /dev/null +++ b/build/node_modules/nanoid/package.json @@ -0,0 +1,97 @@ +{ + "_from": "nanoid@3.3.1", + "_id": "nanoid@3.3.1", + "_inBundle": false, + "_integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "_location": "/nanoid", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "nanoid@3.3.1", + "name": "nanoid", + "escapedName": "nanoid", + "rawSpec": "3.3.1", + "saveSpec": null, + "fetchSpec": "3.3.1" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/nanoid/-/nanoid-3.3.1.tgz", + "_shasum": "6347a18cac88af88f58af0b3594b723d5e99bb35", + "_spec": "nanoid@3.3.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Andrey Sitnik", + "email": "andrey@sitnik.ru" + }, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "browser": { + "./index.js": "./index.browser.js", + "./async/index.js": "./async/index.browser.js", + "./async/index.cjs": "./async/index.browser.cjs", + "./index.cjs": "./index.browser.cjs" + }, + "bugs": { + "url": "https://github.com/ai/nanoid/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "A tiny (130 bytes), secure URL-friendly unique string ID generator", + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + }, + "exports": { + ".": { + "browser": "./index.browser.js", + "require": "./index.cjs", + "import": "./index.js", + "default": "./index.js", + "types": "./index.d.ts" + }, + "./package.json": "./package.json", + "./async/package.json": "./async/package.json", + "./async": { + "browser": "./async/index.browser.js", + "require": "./async/index.cjs", + "import": "./async/index.js", + "default": "./async/index.js" + }, + "./non-secure/package.json": "./non-secure/package.json", + "./non-secure": { + "require": "./non-secure/index.cjs", + "import": "./non-secure/index.js", + "default": "./non-secure/index.js" + }, + "./url-alphabet/package.json": "./url-alphabet/package.json", + "./url-alphabet": { + "require": "./url-alphabet/index.cjs", + "import": "./url-alphabet/index.js", + "default": "./url-alphabet/index.js" + }, + "./index.d.ts": "./index.d.ts" + }, + "homepage": "https://github.com/ai/nanoid#readme", + "keywords": [ + "uuid", + "random", + "id", + "url" + ], + "license": "MIT", + "main": "index.cjs", + "module": "index.js", + "name": "nanoid", + "react-native": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/ai/nanoid.git" + }, + "sideEffects": false, + "type": "module", + "types": "./index.d.ts", + "version": "3.3.1" +} diff --git a/build/node_modules/nanoid/url-alphabet/index.cjs b/build/node_modules/nanoid/url-alphabet/index.cjs new file mode 100644 index 00000000..757b709c --- /dev/null +++ b/build/node_modules/nanoid/url-alphabet/index.cjs @@ -0,0 +1,3 @@ +let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' +module.exports = { urlAlphabet } diff --git a/build/node_modules/nanoid/url-alphabet/index.js b/build/node_modules/nanoid/url-alphabet/index.js new file mode 100644 index 00000000..c2782e59 --- /dev/null +++ b/build/node_modules/nanoid/url-alphabet/index.js @@ -0,0 +1,3 @@ +let urlAlphabet = + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict' +export { urlAlphabet } diff --git a/build/node_modules/nanoid/url-alphabet/package.json b/build/node_modules/nanoid/url-alphabet/package.json new file mode 100644 index 00000000..9930d6ad --- /dev/null +++ b/build/node_modules/nanoid/url-alphabet/package.json @@ -0,0 +1,6 @@ +{ + "type": "module", + "main": "index.cjs", + "module": "index.js", + "react-native": "index.js" +} \ No newline at end of file diff --git a/build/node_modules/nise/LICENSE b/build/node_modules/nise/LICENSE new file mode 100644 index 00000000..432d21c4 --- /dev/null +++ b/build/node_modules/nise/LICENSE @@ -0,0 +1,27 @@ +(The BSD License) + +Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Christian Johansen nor the names of his contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/nise/README.md b/build/node_modules/nise/README.md new file mode 100644 index 00000000..51f733b4 --- /dev/null +++ b/build/node_modules/nise/README.md @@ -0,0 +1,84 @@ +# nise (偽) + +[![npm version](https://img.shields.io/npm/v/nise.svg?style=flat)](https://www.npmjs.com/package/nise) +[![CircleCI](https://circleci.com/gh/sinonjs/nise.svg?style=svg)](https://circleci.com/gh/sinonjs/nise) +[![codecov](https://codecov.io/gh/sinonjs/nise/branch/master/graph/badge.svg)](https://codecov.io/gh/sinonjs/nise) +Contributor Covenant + +fake XHR and Server + +Documentation: http://sinonjs.github.io/nise/ + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/sinon#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/sinon#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Licence + +nise was released under [BSD-3](LICENSE) diff --git a/build/node_modules/nise/lib/configure-logger/index.js b/build/node_modules/nise/lib/configure-logger/index.js new file mode 100644 index 00000000..db96bdb5 --- /dev/null +++ b/build/node_modules/nise/lib/configure-logger/index.js @@ -0,0 +1,53 @@ +"use strict"; + +// cache a reference to setTimeout, so that our reference won't be stubbed out +// when using fake timers and errors will still get logged +// https://github.com/cjohansen/Sinon.JS/issues/381 +var realSetTimeout = setTimeout; + +function configureLogger(config) { + // eslint-disable-next-line no-param-reassign + config = config || {}; + // Function which prints errors. + if (!config.hasOwnProperty("logger")) { + // eslint-disable-next-line no-empty-function + config.logger = function() {}; + } + // When set to true, any errors logged will be thrown immediately; + // If set to false, the errors will be thrown in separate execution frame. + if (!config.hasOwnProperty("useImmediateExceptions")) { + config.useImmediateExceptions = true; + } + // wrap realSetTimeout with something we can stub in tests + if (!config.hasOwnProperty("setTimeout")) { + config.setTimeout = realSetTimeout; + } + + return function logError(label, e) { + var msg = `${label} threw exception: `; + var err = { + name: e.name || label, + message: e.message || e.toString(), + stack: e.stack + }; + + function throwLoggedError() { + err.message = msg + err.message; + throw err; + } + + config.logger(`${msg}[${err.name}] ${err.message}`); + + if (err.stack) { + config.logger(err.stack); + } + + if (config.useImmediateExceptions) { + throwLoggedError(); + } else { + config.setTimeout(throwLoggedError, 0); + } + }; +} + +module.exports = configureLogger; diff --git a/build/node_modules/nise/lib/configure-logger/index.test.js b/build/node_modules/nise/lib/configure-logger/index.test.js new file mode 100644 index 00000000..6dd14680 --- /dev/null +++ b/build/node_modules/nise/lib/configure-logger/index.test.js @@ -0,0 +1,159 @@ +"use strict"; + +var assert = require("@sinonjs/referee").assert; +var refute = require("@sinonjs/referee").refute; +var sinon = require("sinon"); + +var configureLogError = require("./index"); + +describe("configureLogger", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox(); + this.timeOutStub = this.sandbox.stub(); + }); + + afterEach(function() { + this.sandbox.restore(); + }); + + it("is a function", function() { + var instance = configureLogError(); + assert.isFunction(instance); + }); + + it("calls config.logger function with a String", function() { + var spy = this.sandbox.spy(); + var logError = configureLogError({ + logger: spy, + setTimeout: this.timeOutStub, + useImmediateExceptions: false + }); + var name = "Quisque consequat, elit id suscipit."; + var message = + "Pellentesque gravida orci in tellus tristique, ac commodo nibh congue."; + var error = new Error(); + + error.name = name; + error.message = message; + + logError("a label", error); + + assert(spy.called); + assert(spy.calledWithMatch(name)); + assert(spy.calledWithMatch(message)); + }); + + it("calls config.logger function with a stack", function() { + var spy = this.sandbox.spy(); + var logError = configureLogError({ + logger: spy, + setTimeout: this.timeOutStub, + useImmediateExceptions: false + }); + var stack = + "Integer rutrum dictum elit, posuere accumsan nisi pretium vel. Phasellus adipiscing."; + var error = new Error(); + + error.stack = stack; + + logError("another label", error); + + assert(spy.called); + assert(spy.calledWithMatch(stack)); + }); + + it("should call config.setTimeout", function() { + var logError = configureLogError({ + setTimeout: this.timeOutStub, + useImmediateExceptions: false + }); + var error = new Error(); + + logError("some wonky label", error); + + assert(this.timeOutStub.calledOnce); + }); + + it("should pass a throwing function to config.setTimeout", function() { + var logError = configureLogError({ + setTimeout: this.timeOutStub, + useImmediateExceptions: false + }); + var error = new Error(); + + logError("async error", error); + + var func = this.timeOutStub.args[0][0]; + assert.exception(func); + }); + + describe("config.useImmediateExceptions", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox(); + this.timeOutStub = this.sandbox.stub(); + }); + + afterEach(function() { + this.sandbox.restore(); + }); + + it("throws the logged error immediately, does not call logError.setTimeout when flag is true", function() { + var error = new Error(); + var logError = configureLogError({ + setTimeout: this.timeOutStub, + useImmediateExceptions: true + }); + + assert.exception(function() { + logError("an error", error); + }); + assert(this.timeOutStub.notCalled); + }); + + it("does not throw logged error immediately and calls logError.setTimeout when flag is false", function() { + var error = new Error(); + var logError = configureLogError({ + setTimeout: this.timeOutStub, + useImmediateExceptions: false + }); + + refute.exception(function() { + logError("an error", error); + }); + assert(this.timeOutStub.called); + }); + }); + + describe("#835", function() { + it("logError() throws an exception if the passed err is read-only", function() { + var logError = configureLogError({ useImmediateExceptions: true }); + + // passes + var err = { + name: "TestError", + message: "this is a proper exception" + }; + assert.exception( + function() { + logError("#835 test", err); + }, + { + name: err.name + } + ); + + // fails until this issue is fixed + assert.exception( + function() { + logError( + "#835 test", + "this literal string is not a proper exception" + ); + }, + { + name: "#835 test" + } + ); + }); + }); +}); diff --git a/build/node_modules/nise/lib/event/custom-event.js b/build/node_modules/nise/lib/event/custom-event.js new file mode 100644 index 00000000..c4858d49 --- /dev/null +++ b/build/node_modules/nise/lib/event/custom-event.js @@ -0,0 +1,14 @@ +"use strict"; + +var Event = require("./event"); + +function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; +} + +CustomEvent.prototype = new Event(); + +CustomEvent.prototype.constructor = CustomEvent; + +module.exports = CustomEvent; diff --git a/build/node_modules/nise/lib/event/event-target.js b/build/node_modules/nise/lib/event/event-target.js new file mode 100644 index 00000000..c5a4ff5b --- /dev/null +++ b/build/node_modules/nise/lib/event/event-target.js @@ -0,0 +1,122 @@ +"use strict"; + +function flattenOptions(options) { + if (options !== Object(options)) { + return { + capture: Boolean(options), + once: false, + passive: false + }; + } + return { + capture: Boolean(options.capture), + once: Boolean(options.once), + passive: Boolean(options.passive) + }; +} +function not(fn) { + return function() { + return !fn.apply(this, arguments); + }; +} +function hasListenerFilter(listener, capture) { + return function(listenerSpec) { + return ( + listenerSpec.capture === capture && + listenerSpec.listener === listener + ); + }; +} + +var EventTarget = { + // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener + addEventListener: function addEventListener( + event, + listener, + providedOptions + ) { + // 3. Let capture, passive, and once be the result of flattening more options. + // Flatten property before executing step 2, + // feture detection is usually based on registering handler with options object, + // that has getter defined + // addEventListener("load", () => {}, { + // get once() { supportsOnce = true; } + // }); + var options = flattenOptions(providedOptions); + + // 2. If callback is null, then return. + if (listener === null || listener === undefined) { + return; + } + + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + + // 4. If context object’s associated list of event listener + // does not contain an event listener whose type is type, + // callback is callback, and capture is capture, then append + // a new event listener to it, whose type is type, callback is + // callback, capture is capture, passive is passive, and once is once. + if ( + !this.eventListeners[event].some( + hasListenerFilter(listener, options.capture) + ) + ) { + this.eventListeners[event].push({ + listener: listener, + capture: options.capture, + once: options.once + }); + } + }, + + // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener + removeEventListener: function removeEventListener( + event, + listener, + providedOptions + ) { + if (!this.eventListeners || !this.eventListeners[event]) { + return; + } + + // 2. Let capture be the result of flattening options. + var options = flattenOptions(providedOptions); + + // 3. If there is an event listener in the associated list of + // event listeners whose type is type, callback is callback, + // and capture is capture, then set that event listener’s + // removed to true and remove it from the associated list of event listeners. + this.eventListeners[event] = this.eventListeners[event].filter( + not(hasListenerFilter(listener, options.capture)) + ); + }, + + dispatchEvent: function dispatchEvent(event) { + if (!this.eventListeners || !this.eventListeners[event.type]) { + return Boolean(event.defaultPrevented); + } + + var self = this; + var type = event.type; + var listeners = self.eventListeners[type]; + + // Remove listeners, that should be dispatched once + // before running dispatch loop to avoid nested dispatch issues + self.eventListeners[type] = listeners.filter(function(listenerSpec) { + return !listenerSpec.once; + }); + listeners.forEach(function(listenerSpec) { + var listener = listenerSpec.listener; + if (typeof listener === "function") { + listener.call(self, event); + } else { + listener.handleEvent(event); + } + }); + + return Boolean(event.defaultPrevented); + } +}; + +module.exports = EventTarget; diff --git a/build/node_modules/nise/lib/event/event.js b/build/node_modules/nise/lib/event/event.js new file mode 100644 index 00000000..f321b337 --- /dev/null +++ b/build/node_modules/nise/lib/event/event.js @@ -0,0 +1,24 @@ +"use strict"; + +function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); +} + +Event.prototype = { + initEvent: function(type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + this.currentTarget = target; + }, + + // eslint-disable-next-line no-empty-function + stopPropagation: function() {}, + + preventDefault: function() { + this.defaultPrevented = true; + } +}; + +module.exports = Event; diff --git a/build/node_modules/nise/lib/event/index.js b/build/node_modules/nise/lib/event/index.js new file mode 100644 index 00000000..d275f550 --- /dev/null +++ b/build/node_modules/nise/lib/event/index.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + Event: require("./event"), + ProgressEvent: require("./progress-event"), + CustomEvent: require("./custom-event"), + EventTarget: require("./event-target") +}; diff --git a/build/node_modules/nise/lib/event/index.test.js b/build/node_modules/nise/lib/event/index.test.js new file mode 100644 index 00000000..350e2d3b --- /dev/null +++ b/build/node_modules/nise/lib/event/index.test.js @@ -0,0 +1,263 @@ +"use strict"; + +var assert = require("@sinonjs/referee").assert; +var extend = require("just-extend"); +var sinon = require("sinon"); + +var Event = require("./index").Event; +var EventTarget = require("./index").EventTarget; +var ProgressEvent = require("./index").ProgressEvent; +var CustomEvent = require("./index").CustomEvent; + +describe("EventTarget", function() { + beforeEach(function() { + this.target = extend({}, EventTarget); + }); + + it("notifies event listener", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener); + + var event = new Event("placeHolder"); + this.target.dispatchEvent(event); + + assert(listener.calledOnce); + assert(listener.calledWith(event)); + }); + + it("notifies event listener with target as this", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener); + + var event = new Event("placeHolder"); + this.target.dispatchEvent(event); + + assert(listener.calledOn(this.target)); + }); + + it("notifies all event listeners", function() { + var listeners = [sinon.spy(), sinon.spy()]; + this.target.addEventListener("placeHolder", listeners[0]); + this.target.addEventListener("placeHolder", listeners[1]); + + var event = new Event("placeHolder"); + this.target.dispatchEvent(event); + + assert(listeners[0].calledOnce); + assert(listeners[0].calledOnce); + }); + + it("notifies event listener of type listener", function() { + var listener = { handleEvent: sinon.spy() }; + this.target.addEventListener("placeHolder", listener); + + this.target.dispatchEvent(new Event("placeHolder")); + + assert(listener.handleEvent.calledOnce); + }); + + it("notifies event listener once if added twice without useCapture flag", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener); + this.target.addEventListener("placeHolder", listener); + + var event = new Event("placeHolder"); + this.target.dispatchEvent(event); + + assert.equals(listener.callCount, 1, "listener only called once"); + assert(listener.calledWith(event)); + }); + + it("notifies event listener twice if added with different capture flag values, ignores other flags", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener, { + capture: false + }); + this.target.addEventListener("placeHolder", listener, { + capture: true + }); + this.target.addEventListener("placeHolder", listener, { + capture: true, + once: true + }); + this.target.addEventListener("placeHolder", listener, { + capture: true, + passive: true + }); + + var event = new Event("placeHolder"); + this.target.dispatchEvent(event); + + assert.equals(listener.callCount, 2, "listener only called twice"); + assert(listener.calledWith(event)); + }); + + it("uses options of first listener registration", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener, { + capture: false, + once: false + }); + // this registration should be ignored + this.target.addEventListener("placeHolder", listener, { + capture: false, + once: true + }); + + var firstEvent = new Event("placeHolder"); + this.target.dispatchEvent(firstEvent); + + assert.equals(listener.callCount, 1, "listener only called once"); + assert(listener.lastCall.calledWith(sinon.match.same(firstEvent))); + + var secondEvent = new Event("placeHolder"); + this.target.dispatchEvent(secondEvent); + + assert.equals(listener.callCount, 2, "listener only called twice"); + assert(listener.lastCall.calledWith(sinon.match.same(secondEvent))); + }); + + it("feature detection for 'once' flag works", function() { + var onceSupported = false; + + this.target.addEventListener( + "placeHolder", + null, + Object.defineProperty({}, "once", { + get: function() { + onceSupported = true; + return; + } + }) + ); + + assert(onceSupported); + }); + + it("supports registering event handler with 'once' flag", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener, { once: true }); + + var firstEvent = new Event("placeHolder"); + this.target.dispatchEvent(firstEvent); + + assert.equals(listener.callCount, 1, "listener only called once"); + assert(listener.calledWith(sinon.match.same(firstEvent))); + + var secondEvent = new Event("placeHolder"); + this.target.dispatchEvent(secondEvent); + + assert.equals( + listener.callCount, + 1, + "listener was not called second time" + ); + assert(!listener.calledWith(sinon.match.same(secondEvent))); + }); + + it("supports re-registering event handler with 'once' flag after dispatch", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener, { once: true }); + + var firstEvent = new Event("placeHolder"); + this.target.dispatchEvent(firstEvent); + + assert.equals(listener.callCount, 1, "listener only called once"); + assert(listener.calledWith(sinon.match.same(firstEvent))); + + var secondEvent = new Event("placeHolder"); + this.target.dispatchEvent(secondEvent); + + this.target.addEventListener("placeHolder", listener, { once: true }); + + var thirdEvent = new Event("placeHolder"); + this.target.dispatchEvent(thirdEvent); + + assert.equals( + listener.callCount, + 2, + "listener called second time after re-registration" + ); + assert(listener.calledWith(sinon.match.same(thirdEvent))); + }); + + it("does not notify listeners of other events", function() { + var listeners = [sinon.spy(), sinon.spy()]; + this.target.addEventListener("placeHolder", listeners[0]); + this.target.addEventListener("other", listeners[1]); + + this.target.dispatchEvent(new Event("placeHolder")); + + assert.isFalse(listeners[1].called); + }); + + it("does not notify unregistered listeners", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolder", listener); + this.target.removeEventListener("placeHolder", listener); + + this.target.dispatchEvent(new Event("placeHolder")); + + assert.isFalse(listener.called); + }); + + it("notifies existing listeners after removing one", function() { + var listeners = [sinon.spy(), sinon.spy(), sinon.spy()]; + this.target.addEventListener("placeHolder", listeners[0]); + this.target.addEventListener("placeHolder", listeners[1]); + this.target.addEventListener("placeHolder", listeners[2]); + this.target.removeEventListener("placeHolder", listeners[1]); + + this.target.dispatchEvent(new Event("placeHolder")); + + assert(listeners[0].calledOnce); + assert(listeners[2].calledOnce); + }); + + it("returns false when event.preventDefault is not called", function() { + this.target.addEventListener("placeHolder", sinon.spy()); + + var event = new Event("placeHolder"); + var result = this.target.dispatchEvent(event); + + assert.isFalse(result); + }); + + it("returns true when event.preventDefault is called", function() { + this.target.addEventListener("placeHolder", function(e) { + e.preventDefault(); + }); + + var result = this.target.dispatchEvent(new Event("placeHolder")); + + assert.isTrue(result); + }); + + it("notifies ProgressEvent listener with progress data ", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolderProgress", listener); + + var progressEvent = new ProgressEvent("placeHolderProgress", { + loaded: 50, + total: 120 + }); + this.target.dispatchEvent(progressEvent); + + assert.isTrue(progressEvent.lengthComputable); + assert(listener.calledOnce); + assert(listener.calledWith(progressEvent)); + }); + + it("notifies CustomEvent listener with custom data", function() { + var listener = sinon.spy(); + this.target.addEventListener("placeHolderCustom", listener); + + var customEvent = new CustomEvent("placeHolderCustom", { + detail: "hola" + }); + this.target.dispatchEvent(customEvent); + + assert(listener.calledOnce); + assert(listener.calledWith(customEvent)); + }); +}); diff --git a/build/node_modules/nise/lib/event/progress-event.js b/build/node_modules/nise/lib/event/progress-event.js new file mode 100644 index 00000000..658254af --- /dev/null +++ b/build/node_modules/nise/lib/event/progress-event.js @@ -0,0 +1,22 @@ +"use strict"; + +var Event = require("./event"); + +function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = + typeof progressEventRaw.loaded === "number" + ? progressEventRaw.loaded + : null; + this.total = + typeof progressEventRaw.total === "number" + ? progressEventRaw.total + : null; + this.lengthComputable = Boolean(progressEventRaw.total); +} + +ProgressEvent.prototype = new Event(); + +ProgressEvent.prototype.constructor = ProgressEvent; + +module.exports = ProgressEvent; diff --git a/build/node_modules/nise/lib/fake-server/fake-server-with-clock.js b/build/node_modules/nise/lib/fake-server/fake-server-with-clock.js new file mode 100644 index 00000000..915f9151 --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/fake-server-with-clock.js @@ -0,0 +1,73 @@ +"use strict"; + +var FakeTimers = require("@sinonjs/fake-timers"); +var fakeServer = require("./index"); + +// eslint-disable-next-line no-empty-function +function Server() {} +Server.prototype = fakeServer; + +var fakeServerWithClock = new Server(); + +fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = FakeTimers.install(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return fakeServer.addRequest.call(this, xhr); +}; + +fakeServerWithClock.respond = function respond() { + var returnVal = fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.uninstall(); + this.resetClock = false; + } + } + + return returnVal; +}; + +fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.uninstall(); + } + + return fakeServer.restore.apply(this, arguments); +}; + +module.exports = fakeServerWithClock; diff --git a/build/node_modules/nise/lib/fake-server/fake-server-with-clock.test.js b/build/node_modules/nise/lib/fake-server/fake-server-with-clock.test.js new file mode 100644 index 00000000..d750f22e --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/fake-server-with-clock.test.js @@ -0,0 +1,290 @@ +"use strict"; + +var JSDOM = require("jsdom").JSDOM; +var referee = require("@sinonjs/referee"); +var setupDOM = require("jsdom-global"); +var sinon = require("sinon"); + +var fakeServerWithClock = require("./fake-server-with-clock"); +var sinonFakeServer = require("./index"); + +var FakeTimers = require("@sinonjs/fake-timers"); +var FakeXMLHttpRequest = require("../fake-xhr").FakeXMLHttpRequest; + +var JSDOMParser; +if (JSDOM) { + JSDOMParser = new JSDOM().window.DOMParser; +} + +var assert = referee.assert; +var refute = referee.refute; + +var globalSetTimeout = setTimeout; + +describe("fakeServerWithClock", function() { + beforeEach(function() { + if (JSDOMParser) { + global.DOMParser = JSDOMParser; + this.cleanupDOM = setupDOM(); + } + }); + + afterEach(function() { + if (JSDOMParser) { + delete global.DOMParser; + this.cleanupDOM(); + } + }); + + describe("without pre-existing fake clock", function() { + beforeEach(function() { + this.server = fakeServerWithClock.create(); + }); + + afterEach(function() { + this.server.restore(); + if (this.clock) { + this.clock.uninstall(); + } + }); + + it("calls 'super' when adding requests", function() { + var sandbox = sinon.createSandbox(); + var addRequest = sandbox.stub(sinonFakeServer, "addRequest"); + var xhr = {}; + this.server.addRequest(xhr); + + assert(addRequest.calledWith(xhr)); + assert(addRequest.calledOn(this.server)); + sandbox.restore(); + }); + + it("sets reference to clock when adding async request", function() { + this.server.addRequest({ async: true }); + + assert.isObject(this.server.clock); + assert.isFunction(this.server.clock.tick); + }); + + it("sets longest timeout from setTimeout", function() { + this.server.addRequest({ async: true }); + + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 12); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 29); + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 12); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 27); + + assert.equals(this.server.longestTimeout, 29); + }); + + it("sets longest timeout from setInterval", function() { + this.server.addRequest({ async: true }); + + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 12); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 29); + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 132); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 27); + + assert.equals(this.server.longestTimeout, 132); + }); + + it("resets clock", function() { + this.server.addRequest({ async: true }); + + this.server.respond(""); + assert.same(setTimeout, globalSetTimeout); + }); + + it("does not reset clock second time", function() { + this.server.addRequest({ async: true }); + this.server.respond(""); + this.clock = FakeTimers.install(); + this.server.addRequest({ async: true }); + this.server.respond(""); + + refute.same(setTimeout, globalSetTimeout); + }); + }); + + describe("existing clock", function() { + beforeEach(function() { + this.clock = FakeTimers.install(); + this.server = fakeServerWithClock.create(); + }); + + afterEach(function() { + this.clock.uninstall(); + this.server.restore(); + }); + + it("uses existing clock", function() { + this.server.addRequest({ async: true }); + + assert.same(this.server.clock, this.clock); + }); + + it("records longest timeout using setTimeout and existing clock", function() { + this.server.addRequest({ async: true }); + + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 42); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 23); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 53); + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 12); + + assert.same(this.server.longestTimeout, 53); + }); + + it("records longest timeout using setInterval and existing clock", function() { + this.server.addRequest({ async: true }); + + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 92); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 73); + // eslint-disable-next-line no-empty-function + setTimeout(function() {}, 53); + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 12); + + assert.same(this.server.longestTimeout, 92); + }); + + it("does not reset clock", function() { + this.server.respond(""); + + assert.same(setTimeout.clock, this.clock); + }); + }); + + describe(".respond", function() { + var sandbox; + + beforeEach(function() { + this.server = fakeServerWithClock.create(); + this.server.addRequest({ async: true }); + }); + + afterEach(function() { + this.server.restore(); + if (sandbox) { + sandbox.restore(); + sandbox = null; + } + }); + + it("ticks the clock to fire the longest timeout", function() { + this.server.longestTimeout = 96; + + this.server.respond(); + + assert.equals(this.server.clock.now, 96); + }); + + it("ticks the clock to fire the longest timeout when multiple responds", function() { + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 13); + this.server.respond(); + var xhr = new FakeXMLHttpRequest(); + // please the linter, we can't have unused variables + // even when we're instantiating FakeXMLHttpRequest for its side effects + assert(xhr); + // eslint-disable-next-line no-empty-function + setInterval(function() {}, 17); + this.server.respond(); + + assert.equals(this.server.clock.now, 17); + }); + + it("resets longest timeout", function() { + this.server.longestTimeout = 96; + + this.server.respond(); + + assert.equals(this.server.longestTimeout, 0); + }); + + it("calls original respond", function() { + sandbox = sinon.createSandbox(); + var obj = {}; + var respond = sandbox.stub(sinonFakeServer, "respond").returns(obj); + + var result = this.server.respond("GET", "/", ""); + + assert.equals(result, obj); + assert(respond.calledWith("GET", "/", "")); + assert(respond.calledOn(this.server)); + }); + + it("does not trigger a timeout event", function() { + sandbox = sinon.createSandbox(); + + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.timeout = 1; + xhr.triggerTimeout = sandbox.spy(); + xhr.send(); + + this.server.respond(); + + assert.isFalse(xhr.triggerTimeout.called); + }); + }); + + describe("jQuery compat mode", function() { + beforeEach(function() { + this.server = fakeServerWithClock.create(); + + this.request = new FakeXMLHttpRequest(); + this.request.open("get", "/", true); + this.request.send(); + sinon.spy(this.request, "respond"); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("handles clock automatically", function() { + this.server.respondWith("OK"); + var spy = sinon.spy(); + + setTimeout(spy, 13); + this.server.respond(); + this.server.restore(); + + assert(spy.called); + assert.same(setTimeout, globalSetTimeout); + }); + + it("finishes xhr from setInterval like jQuery 1.3.x does", function() { + this.server.respondWith("Hello World"); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.send(); + + var spy = sinon.spy(); + + setInterval(function() { + spy(xhr.responseText, xhr.statusText, xhr); + }, 13); + + this.server.respond(); + + assert.equals(spy.args[0][0], "Hello World"); + assert.equals(spy.args[0][1], "OK"); + assert.equals(spy.args[0][2].status, 200); + }); + }); +}); diff --git a/build/node_modules/nise/lib/fake-server/index.js b/build/node_modules/nise/lib/fake-server/index.js new file mode 100644 index 00000000..e4ee4d9a --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/index.js @@ -0,0 +1,333 @@ +"use strict"; + +var fakeXhr = require("../fake-xhr"); +var push = [].push; +var log = require("./log"); +var configureLogError = require("../configure-logger"); +var pathToRegexp = require("path-to-regexp"); + +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + +function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] !== "string") { + if (!supportsArrayBuffer) { + throw new TypeError( + `Fake server response body should be a string, but was ${typeof response[2]}` + ); + } else if (!(response[2] instanceof ArrayBuffer)) { + throw new TypeError( + `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}` + ); + } + } + + return response; +} + +function getDefaultWindowLocation() { + var winloc = { + hostname: "localhost", + port: process.env.PORT || 80, + protocol: "http:" + }; + winloc.host = + winloc.hostname + + (String(winloc.port) === "80" ? "" : `:${winloc.port}`); + return winloc; +} + +function getWindowLocation() { + if (typeof window === "undefined") { + // Fallback + return getDefaultWindowLocation(); + } + + if (typeof window.location !== "undefined") { + // Browsers place location on window + return window.location; + } + + if ( + typeof window.window !== "undefined" && + typeof window.window.location !== "undefined" + ) { + // React Native on Android places location on window.window + return window.window.location; + } + + return getDefaultWindowLocation(); +} + +function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = + !url || + url === reqUrl || + (typeof url.test === "function" && url.test(reqUrl)) || + (typeof url === "function" && url(reqUrl) === true); + + return matchMethod && matchUrl; +} + +function match(response, request) { + var wloc = getWindowLocation(); + + var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`); + + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, "/"); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat( + ru && typeof ru.exec === "function" + ? ru.exec(requestUrl).slice(1) + : [] + ); + return response.response.apply(response, args); + } + + return true; + } + + return false; +} + +function incrementRequestCount() { + var count = ++this.requestCount; + + this.requested = true; + + this.requestedOnce = count === 1; + this.requestedTwice = count === 2; + this.requestedThrice = count === 3; + + this.firstRequest = this.getRequest(0); + this.secondRequest = this.getRequest(1); + this.thirdRequest = this.getRequest(2); + + this.lastRequest = this.getRequest(count - 1); +} + +var fakeServer = { + create: function(config) { + var server = Object.create(this); + server.configure(config); + this.xhr = fakeXhr.useFakeXMLHttpRequest(); + server.requests = []; + server.requestCount = 0; + server.queue = []; + server.responses = []; + + this.xhr.onCreate = function(xhrObj) { + xhrObj.unsafeHeadersEnabled = function() { + return !(server.unsafeHeadersEnabled === false); + }; + server.addRequest(xhrObj); + }; + + return server; + }, + + configure: function(config) { + var self = this; + var allowlist = { + autoRespond: true, + autoRespondAfter: true, + respondImmediately: true, + fakeHTTPMethods: true, + logger: true, + unsafeHeadersEnabled: true + }; + + // eslint-disable-next-line no-param-reassign + config = config || {}; + + Object.keys(config).forEach(function(setting) { + if (setting in allowlist) { + self[setting] = config[setting]; + } + }); + + self.logError = configureLogError(config); + }, + + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + incrementRequestCount.call(this); + + xhrObj.onSend = function() { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function() { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match( + /_method=([^\b;]+)/ + ); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + logger: function() { + // no-op; override via configure() + }, + + logError: configureLogError({}), + + log: log, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (arguments.length === 1) { + // eslint-disable-next-line no-param-reassign + body = method; + // eslint-disable-next-line no-param-reassign + url = method = null; + } + + if (arguments.length === 2) { + // eslint-disable-next-line no-param-reassign + body = url; + // eslint-disable-next-line no-param-reassign + url = method; + // eslint-disable-next-line no-param-reassign + method = null; + } + + // Escape port number to prevent "named" parameters in 'path-to-regexp' module + if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) { + var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/); + // eslint-disable-next-line no-param-reassign + url = `${m[1]}\\:${m[2]}`; + } + + push.call(this.responses, { + method: method, + url: + typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + response: typeof body === "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var self = this; + + requests.forEach(function(request) { + self.processRequest(request); + }); + }, + + respondAll: function respondAll() { + if (this.respondImmediately) { + return; + } + + this.queue = this.requests.slice(0); + + var request; + while ((request = this.queue.shift())) { + this.processRequest(request); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + this.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + }, + + getRequest: function getRequest(index) { + return this.requests[index] || null; + }, + + reset: function reset() { + this.resetBehavior(); + this.resetHistory(); + }, + + resetBehavior: function resetBehavior() { + this.responses.length = this.queue.length = 0; + }, + + resetHistory: function resetHistory() { + this.requests.length = this.requestCount = 0; + + this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false; + + this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null; + } +}; + +module.exports = fakeServer; diff --git a/build/node_modules/nise/lib/fake-server/index.test.js b/build/node_modules/nise/lib/fake-server/index.test.js new file mode 100644 index 00000000..eb23c4da --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/index.test.js @@ -0,0 +1,1633 @@ +"use strict"; + +var referee = require("@sinonjs/referee"); +var setupDOM = require("jsdom-global"); +var JSDOM = require("jsdom").JSDOM; +var sinon = require("sinon"); +var sinonFakeServer = require("./index"); +var fakeXhr = require("../fake-xhr/"); +var FakeXMLHttpRequest = fakeXhr.FakeXMLHttpRequest; + +var JSDOMParser; +if (JSDOM) { + JSDOMParser = new JSDOM().window.DOMParser; +} + +var assert = referee.assert; +var refute = referee.refute; + +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + +describe("sinonFakeServer", function() { + beforeEach(function() { + if (JSDOMParser) { + global.DOMParser = JSDOMParser; + this.cleanupDOM = setupDOM(); + } + }); + + afterEach(function() { + if (this.server) { + this.server.restore(); + } + + if (JSDOMParser) { + delete global.DOMParser; + this.cleanupDOM(); + } + }); + + it("provides restore method", function() { + this.server = sinonFakeServer.create(); + + assert.isFunction(this.server.restore); + }); + + describe(".create", function() { + it("allows the 'autoRespond' setting", function() { + var server = sinonFakeServer.create({ + autoRespond: true + }); + assert( + server.autoRespond, + "fakeServer.create should accept 'autoRespond' setting" + ); + }); + it("allows the 'autoRespondAfter' setting", function() { + var server = sinonFakeServer.create({ + autoRespondAfter: 500 + }); + assert.equals( + server.autoRespondAfter, + 500, + "fakeServer.create should accept 'autoRespondAfter' setting" + ); + }); + it("allows the 'respondImmediately' setting", function() { + var server = sinonFakeServer.create({ + respondImmediately: true + }); + assert( + server.respondImmediately, + "fakeServer.create should accept 'respondImmediately' setting" + ); + }); + it("allows the 'fakeHTTPMethods' setting", function() { + var server = sinonFakeServer.create({ + fakeHTTPMethods: true + }); + assert( + server.fakeHTTPMethods, + "fakeServer.create should accept 'fakeHTTPMethods' setting" + ); + }); + it("allows the 'unsafeHeadersEnabled' setting", function() { + var server = sinon.fakeServer.create({ + unsafeHeadersEnabled: false + }); + refute.isUndefined( + server.unsafeHeadersEnabled, + "'unsafeHeadersEnabled' expected to be defined at server level" + ); + assert( + !server.unsafeHeadersEnabled, + "fakeServer.create should accept 'unsafeHeadersEnabled' setting" + ); + }); + it("does not assign a non-allowlisted setting", function() { + var server = sinonFakeServer.create({ + foo: true + }); + refute( + server.foo, + "fakeServer.create should not accept 'foo' settings" + ); + }); + }); + + it("fakes XMLHttpRequest", function() { + var sandbox = sinon.createSandbox(); + sandbox.stub(fakeXhr, "useFakeXMLHttpRequest").returns({ + restore: sinon.stub() + }); + + this.server = sinonFakeServer.create(); + + assert(fakeXhr.useFakeXMLHttpRequest.called); + sandbox.restore(); + }); + + it("mirrors FakeXMLHttpRequest restore method", function() { + var sandbox = sinon.createSandbox(); + this.server = sinonFakeServer.create(); + var restore = sandbox.stub(FakeXMLHttpRequest, "restore"); + this.server.restore(); + + assert(restore.called); + sandbox.restore(); + }); + + describe(".requests", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("collects objects created with fake XHR", function() { + var xhrs = [new FakeXMLHttpRequest(), new FakeXMLHttpRequest()]; + + assert.equals(this.server.requests, xhrs); + }); + + it("collects xhr objects through addRequest", function() { + this.server.addRequest = sinon.spy(); + var xhr = new FakeXMLHttpRequest(); + + assert(this.server.addRequest.calledWith(xhr)); + }); + + it("observes onSend on requests", function() { + var xhrs = [new FakeXMLHttpRequest(), new FakeXMLHttpRequest()]; + + assert.isFunction(xhrs[0].onSend); + assert.isFunction(xhrs[1].onSend); + }); + + it("onSend should call handleRequest with request object", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + sinon.spy(this.server, "handleRequest"); + + xhr.send(); + + assert(this.server.handleRequest.called); + assert(this.server.handleRequest.calledWith(xhr)); + }); + }); + + describe(".handleRequest", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("responds to synchronous requests", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/", false); + sinon.spy(xhr, "respond"); + + xhr.send(); + + assert(xhr.respond.called); + }); + + it("does not respond to async requests", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/", true); + sinon.spy(xhr, "respond"); + + xhr.send(); + + assert.isFalse(xhr.respond.called); + }); + }); + + describe(".respondWith", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox(); + + this.server = sinonFakeServer.create({ + setTimeout: this.sandbox.spy(), + useImmediateExceptions: false + }); + + this.getRootAsync = new FakeXMLHttpRequest(); + this.getRootAsync.open("GET", "/", true); + this.getRootAsync.send(); + sinon.spy(this.getRootAsync, "respond"); + + this.getRootAsyncArrayBuffer = new FakeXMLHttpRequest(); + this.getRootAsyncArrayBuffer.responseType = "arraybuffer"; + this.getRootAsyncArrayBuffer.open("GET", "/", true); + this.getRootAsyncArrayBuffer.send(); + sinon.spy(this.getRootAsyncArrayBuffer, "respond"); + + this.postRootAsync = new FakeXMLHttpRequest(); + this.postRootAsync.open("POST", "/", true); + this.postRootAsync.send(); + sinon.spy(this.postRootAsync, "respond"); + + this.getRootSync = new FakeXMLHttpRequest(); + this.getRootSync.open("GET", "/", false); + + this.getPathAsync = new FakeXMLHttpRequest(); + this.getPathAsync.open("GET", "/path", true); + this.getPathAsync.send(); + sinon.spy(this.getPathAsync, "respond"); + + this.postPathAsync = new FakeXMLHttpRequest(); + this.postPathAsync.open("POST", "/path", true); + this.postPathAsync.send(); + sinon.spy(this.postPathAsync, "respond"); + }); + + afterEach(function() { + this.server.restore(); + this.sandbox.restore(); + }); + + it("responds to queued async text requests", function() { + this.server.respondWith("Oh yeah! Duffman!"); + + this.server.respond(); + + assert(this.getRootAsync.respond.called); + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "Oh yeah! Duffman!" + ]); + assert.equals( + this.getRootAsync.readyState, + FakeXMLHttpRequest.DONE + ); + }); + + it("responds to all queued async requests", function() { + this.server.respondWith("Oh yeah! Duffman!"); + + this.server.respond(); + + assert(this.getRootAsync.respond.called); + assert(this.getPathAsync.respond.called); + }); + + it("does not respond to requests queued after respond() (eg from callbacks)", function() { + var xhr; + this.getRootAsync.addEventListener("load", function() { + xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/", true); + xhr.send(); + sinon.spy(xhr, "respond"); + }); + + this.server.respondWith("Oh yeah! Duffman!"); + + this.server.respond(); + + assert(this.getRootAsync.respond.called); + assert(this.getPathAsync.respond.called); + assert(!xhr.respond.called); + + this.server.respond(); + + assert(xhr.respond.called); + }); + + it("responds with status, headers, and text body", function() { + var headers = { "Content-Type": "X-test" }; + this.server.respondWith([201, headers, "Oh yeah!"]); + + this.server.respond(); + + assert(this.getRootAsync.respond.called); + assert.equals(this.getRootAsync.respond.args[0], [ + 201, + headers, + "Oh yeah!" + ]); + assert.equals( + this.getRootAsync.readyState, + FakeXMLHttpRequest.DONE + ); + }); + + it("handles responding with empty queue", function() { + delete this.server.queue; + var server = this.server; + + refute.exception(function() { + server.respond(); + }); + }); + + it("responds to sync request with canned answers", function() { + this.server.respondWith([210, { "X-Ops": "Yeah" }, "Body, man"]); + + this.getRootSync.send(); + + assert.equals(this.getRootSync.status, 210); + assert.equals( + this.getRootSync.getAllResponseHeaders(), + "X-Ops: Yeah\r\n" + ); + assert.equals(this.getRootSync.responseText, "Body, man"); + }); + + it("responds to sync request with 404 if no response is set", function() { + this.getRootSync.send(); + + assert.equals(this.getRootSync.status, 404); + assert.equals(this.getRootSync.getAllResponseHeaders(), ""); + assert.equals(this.getRootSync.responseText, ""); + }); + + it("responds to async request with 404 if no response is set", function() { + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to specific URL", function() { + this.server.respondWith("/path", "Duffman likes Duff beer"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Duffman likes Duff beer" + ]); + }); + + it("responds to URL matched by regexp", function() { + this.server.respondWith(/^\/p.*/, "Regexp"); + + this.server.respond(); + + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Regexp" + ]); + }); + + it("responds to URL matched by url matcher function", function() { + this.server.respondWith(function() { + return true; + }, "FuncMatcher"); + + this.server.respond(); + + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "FuncMatcher" + ]); + }); + + it("does not respond to URL not matched by regexp", function() { + this.server.respondWith(/^\/p.*/, "No regexp match"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + }); + + it("does not respond to URL not matched by function url matcher", function() { + this.server.respondWith(function() { + return false; + }, "No function match"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to all URLs matched by regexp", function() { + this.server.respondWith(/^\/.*/, "Match all URLs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "Match all URLs" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Match all URLs" + ]); + }); + + it("responds to all URLs matched by function matcher", function() { + this.server.respondWith(function() { + return true; + }, "Match all URLs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "Match all URLs" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Match all URLs" + ]); + }); + + it("responds to all requests when match URL is falsy", function() { + this.server.respondWith("", "Falsy URL"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "Falsy URL" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Falsy URL" + ]); + }); + + it("responds to no requests when function matcher is falsy", function() { + this.server.respondWith(function() { + return false; + }, "Falsy URL"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to all GET requests", function() { + this.server.respondWith("GET", "", "All GETs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "All GETs" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "All GETs" + ]); + assert.equals(this.postRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to all 'get' requests (case-insensitivity)", function() { + this.server.respondWith("get", "", "All GETs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "All GETs" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "All GETs" + ]); + assert.equals(this.postRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to all PUT requests", function() { + this.server.respondWith("PUT", "", "All PUTs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [404, {}, ""]); + }); + + it("responds to all POST requests", function() { + this.server.respondWith("POST", "", "All POSTs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postRootAsync.respond.args[0], [ + 200, + {}, + "All POSTs" + ]); + assert.equals(this.postPathAsync.respond.args[0], [ + 200, + {}, + "All POSTs" + ]); + }); + + it("responds to all POST requests to /path", function() { + this.server.respondWith("POST", "/path", "All POSTs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [ + 200, + {}, + "All POSTs" + ]); + }); + + it("responds to all POST requests matching regexp", function() { + this.server.respondWith("POST", /^\/path(\?.*)?/, "All POSTs"); + + this.server.respond(); + + assert.equals(this.getRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.getPathAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postRootAsync.respond.args[0], [404, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [ + 200, + {}, + "All POSTs" + ]); + }); + + it("does not respond to aborted requests", function() { + this.server.respondWith("/", "That's my homepage!"); + this.getRootAsync.aborted = true; + + this.server.respond(); + + assert.isFalse(this.getRootAsync.respond.called); + }); + + it("resets requests", function() { + this.server.respondWith("/", "That's my homepage!"); + + this.server.respond(); + + assert.equals(this.server.queue, []); + }); + + it("notifies all requests when some throw", function() { + this.getRootAsync.respond = function() { + throw new Error("Oops!"); + }; + + this.server.respondWith(""); + this.server.respond(); + + assert.equals(this.getPathAsync.respond.args[0], [200, {}, ""]); + assert.equals(this.postRootAsync.respond.args[0], [200, {}, ""]); + assert.equals(this.postPathAsync.respond.args[0], [200, {}, ""]); + }); + + it("recognizes request with hostname", function() { + // set the host value, as jsdom default is 'about:blank' + setupDOM("", { url: "http://localhost/" }); + this.server.respondWith("/", [200, {}, "Yep"]); + var xhr = new FakeXMLHttpRequest(); + var loc = window.location; + + xhr.open("GET", `${loc.protocol}//${loc.host}/`, true); + xhr.send(); + sinon.spy(xhr, "respond"); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Yep"]); + }); + + it("responds to matching paths with port number in external URL", function() { + // setup server & client + setupDOM("", { url: "http://localhost/" }); + var localAPI = "http://localhost:5000/ping"; + this.server.respondWith("GET", localAPI, "Pong"); + + // Create fake client request + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", localAPI, true); + xhr.send(); + sinon.spy(xhr, "respond"); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Pong"]); + }); + + it("responds to matching paths when port numbers are different", function() { + // setup server & client + setupDOM("", { url: "http://localhost:8080/" }); + var localAPI = "http://localhost:5000/ping"; + this.server.respondWith("GET", localAPI, "Pong"); + this.server.respondWith( + "GET", + "http://localhost:8080/ping", + "Ding" + ); + + // Create fake client request + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", localAPI, true); + xhr.send(); + sinon.spy(xhr, "respond"); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Pong"]); + }); + + it("responds although window.location is undefined", function() { + // setup server & client + this.cleanupDOM(); // remove window, Document, etc. + var origin = "http://localhost"; + this.server.respondWith("GET", "/ping", "Pong"); + + // Create fake client request + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", `${origin}/ping`, true); + xhr.send(); + sinon.spy(xhr, "respond"); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Pong"]); + }); + + // React Native on Android places location on window.window + it("responds as expected for React Native on Android with window.window.location", function() { + this.cleanupDOM(); // remove default window, Document, etc. + // setup client + // Build Android like format (manual jsdom, with window.window inset) + var html = + // eslint-disable-next-line quotes + '' + + ""; + var options = {}; + var document = new JSDOM(html, options); + var window = document.window; + global.document = window.document; + global.window = { window: window }; + window.console = global.console; + + // setup server + var url = "http://localhost"; + this.server.respondWith("GET", url, "Pong"); + + // Create fake client request + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", url, true); + xhr.send(); + sinon.spy(xhr, "respond"); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Pong"]); + }); + + it("accepts URLS which are common route DSLs", function() { + this.server.respondWith("/foo/*", [200, {}, "Yep"]); + + var xhr = new FakeXMLHttpRequest(); + xhr.respond = sinon.spy(); + xhr.open("GET", "/foo/bla/boo", true); + xhr.send(); + + this.server.respond(); + + assert.equals(xhr.respond.args[0], [200, {}, "Yep"]); + }); + + it("yields URL capture groups to response handler when using DSLs", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", "/thing/:id", handler); + + var xhr = new FakeXMLHttpRequest(); + xhr.respond = sinon.spy(); + xhr.open("GET", "/thing/1337", true); + xhr.send(); + + this.server.respond(); + + assert(handler.called); + assert.equals(handler.args[0], [xhr, "1337"]); + }); + + it("throws understandable error if response is not a string or ArrayBuffer", function() { + var server = this.server; + + assert.exception( + function() { + server.respondWith("/", {}); + }, + { + message: + "Fake server response body should be a string or ArrayBuffer, but was object" + } + ); + }); + + it("throws understandable error if response in array is not a string or ArrayBuffer", function() { + var server = this.server; + + assert.exception( + function() { + server.respondWith("/", [200, {}]); + }, + { + message: + "Fake server response body should be a string or ArrayBuffer, but was undefined" + } + ); + }); + + it("is able to pass the same args to respond directly", function() { + this.server.respond("Oh yeah! Duffman!"); + + assert.equals(this.getRootAsync.respond.args[0], [ + 200, + {}, + "Oh yeah! Duffman!" + ]); + assert.equals(this.getPathAsync.respond.args[0], [ + 200, + {}, + "Oh yeah! Duffman!" + ]); + assert.equals(this.postRootAsync.respond.args[0], [ + 200, + {}, + "Oh yeah! Duffman!" + ]); + assert.equals(this.postPathAsync.respond.args[0], [ + 200, + {}, + "Oh yeah! Duffman!" + ]); + }); + + it("responds to most recently defined match", function() { + this.server.respondWith("POST", "", "All POSTs"); + this.server.respondWith("POST", "/path", "Particular POST"); + + this.server.respond(); + + assert.equals(this.postRootAsync.respond.args[0], [ + 200, + {}, + "All POSTs" + ]); + assert.equals(this.postPathAsync.respond.args[0], [ + 200, + {}, + "Particular POST" + ]); + }); + + if (supportsArrayBuffer) { + it("responds to queued async arraybuffer requests", function() { + var buffer = new Uint8Array([160, 64, 0, 0, 32, 193]).buffer; + + this.server.respondWith(buffer); + + this.server.respond(); + + assert(this.getRootAsyncArrayBuffer.respond.called); + assert.equals(this.getRootAsyncArrayBuffer.respond.args[0], [ + 200, + {}, + buffer + ]); + assert.equals( + this.getRootAsyncArrayBuffer.readyState, + FakeXMLHttpRequest.DONE + ); + }); + + it("responds with status, headers, and arraybuffer body", function() { + var buffer = new Uint8Array([160, 64, 0, 0, 32, 193]).buffer; + + var headers = { "Content-Type": "X-test" }; + this.server.respondWith([201, headers, buffer]); + + this.server.respond(); + + assert(this.getRootAsyncArrayBuffer.respond.called); + assert.equals(this.getRootAsyncArrayBuffer.respond.args[0], [ + 201, + headers, + buffer + ]); + assert.equals( + this.getRootAsyncArrayBuffer.readyState, + FakeXMLHttpRequest.DONE + ); + }); + } + }); + + describe(".respondWith (FunctionHandler)", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("yields response to request function handler", function() { + var handler = sinon.spy(); + this.server.respondWith("/hello", handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + assert(handler.calledWith(xhr)); + }); + + it("responds to request from function handler", function() { + this.server.respondWith("/hello", function(xhr) { + xhr.respond( + 200, + { "Content-Type": "application/json" }, + // eslint-disable-next-line quotes + '{"id":42}' + ); + }); + + var request = new FakeXMLHttpRequest(); + request.open("GET", "/hello"); + request.send(); + + this.server.respond(); + + assert.equals(request.status, 200); + assert.equals(request.responseHeaders, { + "Content-Type": "application/json" + }); + assert.equals( + request.responseText, + // eslint-disable-next-line quotes + '{"id":42}' + ); + }); + + it("yields response to request function handler when method matches", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", "/hello", handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + + it("yields response to request function handler when url contains RegExp characters", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", "/hello?world", handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello?world"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + + function equalMatcher(expected) { + return function(test) { + return expected === test; + }; + } + + it("yields response to request function handler when url is a function that returns true", function() { + var handler = sinon.spy(); + this.server.respondWith( + "GET", + equalMatcher("/hello?world"), + handler + ); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello?world"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + + // eslint-disable-next-line max-len + it("yields response to request function handler when url is a function that returns true with no Http Method specified", function() { + var handler = sinon.spy(); + this.server.respondWith(equalMatcher("/hello?world"), handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello?world"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + + it("does not yield response to request function handler when method does not match", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", "/hello", handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("POST", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + // eslint-disable-next-line max-len + it("does not yield response to request function handler when method does not match (using url mather function)", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", equalMatcher("/hello"), handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("POST", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + it("yields response to request function handler when regexp url matches", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", /\/.*/, handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(handler.calledOnce); + }); + + it("does not yield response to request function handler when regexp url does not match", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", /\/a.*/, handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + it("does not yield response to request function handler when urlMatcher function returns false", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", equalMatcher("/goodbye"), handler); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + // eslint-disable-next-line max-len + it("does not yield response to request function handler when urlMatcher function returns non Boolean truthy value", function() { + var handler = sinon.spy(); + this.server.respondWith( + "GET", + function() { + return "truthy"; + }, + handler + ); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + // eslint-disable-next-line max-len + it("does not yield response to request function handler when urlMatcher function returns non Boolean falsey value", function() { + var handler = sinon.spy(); + this.server.respondWith( + "GET", + function() { + return undefined; + }, + handler + ); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + + this.server.respond(); + + assert(!handler.called); + }); + + it("adds function handler without method or url filter", function() { + this.server.respondWith(function(xhr) { + xhr.respond( + 200, + { "Content-Type": "application/json" }, + // eslint-disable-next-line quotes + '{"id":42}' + ); + }); + + var request = new FakeXMLHttpRequest(); + request.open("GET", "/whatever"); + request.send(); + + this.server.respond(); + + assert.equals(request.status, 200); + assert.equals(request.responseHeaders, { + "Content-Type": "application/json" + }); + assert.equals( + request.responseText, + // eslint-disable-next-line quotes + '{"id":42}' + ); + }); + + it("does not process request further if processed by function", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", "/aloha", [200, {}, "Oh hi"]); + this.server.respondWith("GET", /\/a.*/, handler); + var xhr = new FakeXMLHttpRequest(); + xhr.respond = sinon.spy(); + xhr.open("GET", "/aloha"); + xhr.send(); + + this.server.respond(); + + assert(handler.called); + assert(xhr.respond.calledOnce); + }); + + it("yields URL capture groups to response handler", function() { + var handler = sinon.spy(); + this.server.respondWith("GET", /\/people\/(\d+)/, handler); + var xhr = new FakeXMLHttpRequest(); + xhr.respond = sinon.spy(); + xhr.open("GET", "/people/3"); + xhr.send(); + + this.server.respond(); + + assert(handler.called); + assert.equals(handler.args[0], [xhr, "3"]); + }); + }); + + describe("respond with fake HTTP Verb", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + + this.request = new FakeXMLHttpRequest(); + this.request.open("post", "/path", true); + this.request.send("_method=delete"); + sinon.spy(this.request, "respond"); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("does not respond to DELETE request with _method parameter", function() { + this.server.respondWith("DELETE", "", ""); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], [404, {}, ""]); + }); + + it("responds to 'fake' DELETE request", function() { + this.server.fakeHTTPMethods = true; + this.server.respondWith("DELETE", "", "OK"); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], [200, {}, "OK"]); + }); + + it("does not respond to POST when faking DELETE", function() { + this.server.fakeHTTPMethods = true; + this.server.respondWith("POST", "", "OK"); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], [404, {}, ""]); + }); + + it("does not fake method when not POSTing", function() { + this.server.fakeHTTPMethods = true; + this.server.respondWith("DELETE", "", "OK"); + + var request = new FakeXMLHttpRequest(); + request.open("GET", "/"); + request.send(); + request.respond = sinon.spy(); + this.server.respond(); + + assert.equals(request.respond.args[0], [404, {}, ""]); + }); + + it("customizes HTTP method extraction", function() { + this.server.getHTTPMethod = function() { + return "PUT"; + }; + + this.server.respondWith("PUT", "", "OK"); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], [200, {}, "OK"]); + }); + + it("does not fail when getting the HTTP method from a request with no body", function() { + var server = this.server; + server.fakeHTTPMethods = true; + + assert.equals(server.getHTTPMethod({ method: "POST" }), "POST"); + }); + }); + + describe(".respondAll", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("performs all the pending requests", function() { + var server = this.server; + server.respondWith("GET", "/first/url", "first body"); + server.respondWith("GET", "/second/url", "second body"); + server.respondWith("GET", "/third/url", "third body"); + + var request1 = new FakeXMLHttpRequest(); + request1.open("GET", "/first/url"); + request1.send(); + request1.respond = sinon.spy(); + + var request2 = new FakeXMLHttpRequest(); + request2.open("GET", "/second/url"); + request2.send(); + request2.respond = sinon.spy(); + + var request3 = new FakeXMLHttpRequest(); + request3.open("GET", "/third/url"); + request3.send(); + request3.respond = sinon.spy(); + + assert.equals(server.responses.length, 3); + assert.equals(server.requests.length, 3); + assert.equals(server.queue.length, 3); + + assert.equals(request1.respond.args.length, 0); + assert.equals(request2.respond.args.length, 0); + assert.equals(request3.respond.args.length, 0); + + server.respondAll(); + + assert.equals(server.queue.length, 0); + assert.equals(server.responses.length, 3); + + assert.equals(request1.respond.args[0], [200, {}, "first body"]); + assert.equals(request2.respond.args[0], [200, {}, "second body"]); + assert.equals(request3.respond.args[0], [200, {}, "third body"]); + }); + }); + + describe(".autoResponse", function() { + beforeEach(function() { + this.get = function get(url) { + var request = new FakeXMLHttpRequest(); + sinon.spy(request, "respond"); + request.open("get", url, true); + request.send(); + return request; + }; + + this.server = sinonFakeServer.create(); + this.clock = sinon.useFakeTimers(); + }); + + afterEach(function() { + this.server.restore(); + this.clock.uninstall(); + }); + + it("responds async automatically after 10ms", function() { + this.server.autoRespond = true; + var request = this.get("/path"); + + this.clock.tick(10); + + assert.isTrue(request.respond.calledOnce); + }); + + it("normal server does not respond automatically", function() { + var request = this.get("/path"); + + this.clock.tick(100); + + assert.isTrue(!request.respond.called); + }); + + it("auto-responds only once", function() { + this.server.autoRespond = true; + var requests = [this.get("/path")]; + this.clock.tick(5); + requests.push(this.get("/other")); + this.clock.tick(5); + + assert.isTrue(requests[0].respond.calledOnce); + assert.isTrue(requests[1].respond.calledOnce); + }); + + it("auto-responds after having already responded", function() { + this.server.autoRespond = true; + var requests = [this.get("/path")]; + this.clock.tick(10); + requests.push(this.get("/other")); + this.clock.tick(10); + + assert.isTrue(requests[0].respond.calledOnce); + assert.isTrue(requests[1].respond.calledOnce); + }); + + it("sets auto-respond timeout to 50ms", function() { + this.server.autoRespond = true; + this.server.autoRespondAfter = 50; + + var request = this.get("/path"); + this.clock.tick(49); + assert.isFalse(request.respond.called); + + this.clock.tick(1); + assert.isTrue(request.respond.calledOnce); + }); + + it("auto-responds if two successive requests are made with a single XHR", function() { + this.server.autoRespond = true; + + var request = this.get("/path"); + + this.clock.tick(10); + + assert.isTrue(request.respond.calledOnce); + + request.open("get", "/other", true); + request.send(); + + this.clock.tick(10); + + assert.isTrue(request.respond.calledTwice); + }); + + it("auto-responds if timeout elapses between creating XHR object and sending request with it", function() { + this.server.autoRespond = true; + + var request = new FakeXMLHttpRequest(); + sinon.spy(request, "respond"); + + this.clock.tick(100); + + request.open("get", "/path", true); + request.send(); + + this.clock.tick(10); + + assert.isTrue(request.respond.calledOnce); + }); + }); + + describe(".respondImmediately", function() { + beforeEach(function() { + this.get = function get(url) { + var request = new FakeXMLHttpRequest(); + sinon.spy(request, "respond"); + request.open("get", url, true); + request.send(); + return request; + }; + + this.server = sinonFakeServer.create(); + this.server.respondImmediately = true; + }); + + afterEach(function() { + this.server.restore(); + }); + + it("responds synchronously", function() { + var request = this.get("/path"); + assert.isTrue(request.respond.calledOnce); + }); + + it("doesn't rely on a clock", function() { + this.clock = sinon.useFakeTimers(); + + var request = this.get("/path"); + assert.isTrue(request.respond.calledOnce); + + this.clock.uninstall(); + }); + }); + + describe(".log", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + afterEach(function() { + this.server.restore(); + }); + + it("logs response and request", function() { + sinon.spy(this.server, "log"); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + var response = [200, {}, "Hello!"]; + this.server.respond("GET", /.*/, response); + assert(this.server.log.calledOnce); + assert(this.server.log.calledWithExactly(response, xhr)); + }); + + it("can be overridden", function() { + this.server.log = sinon.spy(); + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/hello"); + xhr.send(); + var response = [200, {}, "Hello!"]; + this.server.respond("GET", /.*/, response); + assert(this.server.log.calledOnce); + assert(this.server.log.calledWithExactly(response, xhr)); + }); + }); + + describe(".reset", function() { + beforeEach(function() { + this.server = sinonFakeServer.create(); + + this.resetBehaviorStub = sinon.stub(this.server, "resetBehavior"); + this.resetHistoryStub = sinon.stub(this.server, "resetHistory"); + }); + + afterEach(function() { + this.server.restore(); + this.resetBehaviorStub.restore(); + this.resetHistoryStub.restore(); + }); + + it("should call resetBehavior and resetHistory", function() { + assert(this.resetBehaviorStub.notCalled); + assert(this.resetHistoryStub.notCalled); + + this.server.reset(); + + assert(this.resetBehaviorStub.calledOnce); + assert(this.resetBehaviorStub.calledWithExactly()); + + assert(this.resetHistoryStub.calledOnce); + assert(this.resetHistoryStub.calledWithExactly()); + + assert(this.resetBehaviorStub.calledBefore(this.resetHistoryStub)); + }); + }); + + describe(".resetBehavior", function() { + before(function() { + // capture default response + var self = this; + + sinonFakeServer.processRequest.call( + { + log: function(response) { + self.defaultResponse = response; + } + }, + // eslint-disable-next-line no-empty-function + { respond: function() {} } + ); + }); + + function makeRequest(context) { + context.request = new FakeXMLHttpRequest(); + context.request.open("get", "url", true); + context.request.send(null); + + sinon.spy(context.request, "respond"); + } + + beforeEach(function() { + this.server = sinonFakeServer.create(); + + this.testResponse = [200, {}, "OK"]; + + this.server.respondWith("GET", "url", this.testResponse); + + makeRequest(this); + }); + + it("should reset behavior", function() { + this.server.resetBehavior(); + + assert.equals(this.server.queue.length, 0); + assert.equals(this.server.responses.length, 0); + }); + + it("should work as expected", function() { + this.server.respond(); + + assert.equals(this.request.respond.args[0], this.testResponse); + + this.server.resetBehavior(); + + makeRequest(this); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], this.defaultResponse); + }); + + it("should be idempotent", function() { + this.server.respond(); + + assert.equals(this.request.respond.args[0], this.testResponse); + + // calling N times should have the same effect as calling once + this.server.resetBehavior(); + this.server.resetBehavior(); + this.server.resetBehavior(); + + makeRequest(this); + + this.server.respond(); + + assert.equals(this.request.respond.args[0], this.defaultResponse); + }); + }); + + describe("history", function() { + function assertDefaultServerState(server) { + refute(server.requestedOnce); + refute(server.requestedTwice); + refute(server.requestedThrice); + refute(server.requested); + + refute(server.firstRequest); + refute(server.secondRequest); + refute(server.thirdRequest); + refute(server.lastRequest); + } + + function makeRequest() { + var request = new FakeXMLHttpRequest(); + request.open("get", "url", true); + request.send(null); + } + + beforeEach(function() { + this.server = sinonFakeServer.create(); + }); + + describe(".getRequest", function() { + it("should handle invalid indexes", function() { + assert.isNull(this.server.getRequest(1e3)); + assert.isNull(this.server.getRequest(0)); + assert.isNull(this.server.getRequest(-2)); + assert.isNull(this.server.getRequest("catpants")); + }); + + it("should return expected requests", function() { + makeRequest(); + + assert.equals( + this.server.getRequest(0), + this.server.requests[0] + ); + assert.isNull(this.server.getRequest(1)); + + makeRequest(); + + assert.equals( + this.server.getRequest(1), + this.server.requests[1] + ); + }); + }); + + describe(".resetHistory", function() { + it("should reset history", function() { + makeRequest(); + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isTrue(this.server.requestedTwice); + + this.server.resetHistory(); + + assertDefaultServerState(this.server); + }); + + it("should be idempotent", function() { + makeRequest(); + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isTrue(this.server.requestedTwice); + + this.server.resetHistory(); + this.server.resetHistory(); + this.server.resetHistory(); + + assertDefaultServerState(this.server); + }); + }); + + it("should start in a known default state", function() { + assertDefaultServerState(this.server); + }); + + it("should record requests", function() { + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isTrue(this.server.requestedOnce); + assert.isFalse(this.server.requestedTwice); + assert.isFalse(this.server.requestedThrice); + assert.equals(this.server.requestCount, 1); + + assert.equals(this.server.firstRequest, this.server.requests[0]); + assert.equals(this.server.lastRequest, this.server.requests[0]); + + // #2 + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isFalse(this.server.requestedOnce); + assert.isTrue(this.server.requestedTwice); + assert.isFalse(this.server.requestedThrice); + assert.equals(this.server.requestCount, 2); + + assert.equals(this.server.firstRequest, this.server.requests[0]); + assert.equals(this.server.secondRequest, this.server.requests[1]); + assert.equals(this.server.lastRequest, this.server.requests[1]); + + // #3 + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isFalse(this.server.requestedOnce); + assert.isFalse(this.server.requestedTwice); + assert.isTrue(this.server.requestedThrice); + assert.equals(this.server.requestCount, 3); + + assert.equals(this.server.firstRequest, this.server.requests[0]); + assert.equals(this.server.secondRequest, this.server.requests[1]); + assert.equals(this.server.thirdRequest, this.server.requests[2]); + assert.equals(this.server.lastRequest, this.server.requests[2]); + + // #4 + makeRequest(); + + assert.isTrue(this.server.requested); + assert.isFalse(this.server.requestedOnce); + assert.isFalse(this.server.requestedTwice); + assert.isFalse(this.server.requestedThrice); + assert.equals(this.server.requestCount, 4); + + assert.equals(this.server.firstRequest, this.server.requests[0]); + assert.equals(this.server.secondRequest, this.server.requests[1]); + assert.equals(this.server.thirdRequest, this.server.requests[2]); + assert.equals(this.server.lastRequest, this.server.requests[3]); + }); + }); +}); diff --git a/build/node_modules/nise/lib/fake-server/log.js b/build/node_modules/nise/lib/fake-server/log.js new file mode 100644 index 00000000..8c75a17e --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/log.js @@ -0,0 +1,16 @@ +"use strict"; +var inspect = require("util").inspect; + +function log(response, request) { + var str; + + str = `Request:\n${inspect(request)}\n\n`; + str += `Response:\n${inspect(response)}\n\n`; + + /* istanbul ignore else: when this.logger is not a function, it can't be called */ + if (typeof this.logger === "function") { + this.logger(str); + } +} + +module.exports = log; diff --git a/build/node_modules/nise/lib/fake-server/log.test.js b/build/node_modules/nise/lib/fake-server/log.test.js new file mode 100644 index 00000000..3e800a98 --- /dev/null +++ b/build/node_modules/nise/lib/fake-server/log.test.js @@ -0,0 +1,61 @@ +"use strict"; + +var assert = require("@sinonjs/referee").assert; +var proxyquire = require("proxyquire").noCallThru(); +var sinon = require("sinon"); + +describe("log", function() { + beforeEach(function() { + this.fakeInspect = sinon.fake.returns( + "a953421f-d933-4a20-87df-c4b3016177f3" + ); + + this.logFn = proxyquire("./log", { + util: { + inspect: this.fakeInspect + } + }); + }); + + context("when this.logger is defined", function() { + beforeEach(function() { + this.request = {}; + this.response = {}; + + this.instance = { + logger: sinon.fake() + }; + + this.logFn.call(this.instance, this.request, this.response); + }); + + it("calls this.logger with a string", function() { + assert.isTrue(this.instance.logger.calledOnce); + assert.isString(this.instance.logger.args[0][0]); + }); + + it("formats the request argument", function() { + assert.isTrue(this.fakeInspect.calledWith(this.request)); + }); + + it("uses the formatted request argument", function() { + assert.isTrue( + this.instance.logger.args[0][0].includes( + this.fakeInspect.returnValues[0] + ) + ); + }); + + it("formats the response argument", function() { + assert.isTrue(this.fakeInspect.calledWith(this.response)); + }); + + it("uses the formatted response argument", function() { + assert.isTrue( + this.instance.logger.args[0][0].includes( + this.fakeInspect.returnValues[1] + ) + ); + }); + }); +}); diff --git a/build/node_modules/nise/lib/fake-xhr/blob.js b/build/node_modules/nise/lib/fake-xhr/blob.js new file mode 100644 index 00000000..e02b6bb4 --- /dev/null +++ b/build/node_modules/nise/lib/fake-xhr/blob.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.isSupported = (function() { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } +})(); diff --git a/build/node_modules/nise/lib/fake-xhr/index.js b/build/node_modules/nise/lib/fake-xhr/index.js new file mode 100644 index 00000000..2cbb0089 --- /dev/null +++ b/build/node_modules/nise/lib/fake-xhr/index.js @@ -0,0 +1,920 @@ +"use strict"; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var globalObject = require("@sinonjs/commons").global; +var configureLogError = require("../configure-logger"); +var sinonEvent = require("../event"); +var extend = require("just-extend"); + +var supportsProgress = typeof ProgressEvent !== "undefined"; +var supportsCustomEvent = typeof CustomEvent !== "undefined"; +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; + +function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function() { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); + }; + } + + return false; +} + +// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name +var unsafeHeaders = { + "Accept-Charset": true, + "Access-Control-Request-Headers": true, + "Access-Control-Request-Method": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + DNT: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Origin: true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true +}; + +function EventTargetHandler() { + var self = this; + var events = [ + "loadstart", + "progress", + "abort", + "error", + "load", + "timeout", + "loadend" + ]; + + function addEventListener(eventName) { + self.addEventListener(eventName, function(event) { + var listener = self[`on${eventName}`]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); + } + + events.forEach(addEventListener); +} + +EventTargetHandler.prototype = sinonEvent.EventTarget; + +function normalizeHeaderValue(value) { + // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes + /*eslint no-control-regex: "off"*/ + return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, ""); +} + +function getHeader(headers, header) { + var foundHeader = Object.keys(headers).filter(function(h) { + return h.toLowerCase() === header.toLowerCase(); + }); + + return foundHeader[0] || null; +} + +function excludeSetCookie2Header(header) { + return !/^Set-Cookie2?$/i.test(header); +} + +function verifyResponseBodyType(body, responseType) { + var error = null; + var isString = typeof body === "string"; + + if (responseType === "arraybuffer") { + if (!isString && !(body instanceof ArrayBuffer)) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.` + ); + error.name = "InvalidBodyException"; + } + } else if (responseType === "blob") { + if ( + !isString && + !(body instanceof ArrayBuffer) && + supportsBlob && + !(body instanceof Blob) + ) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.` + ); + error.name = "InvalidBodyException"; + } + } else if (!isString) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.` + ); + error.name = "InvalidBodyException"; + } + + if (error) { + throw error; + } +} + +function convertToArrayBuffer(body, encoding) { + if (body instanceof ArrayBuffer) { + return body; + } + + return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer; +} + +function isXmlContentType(contentType) { + return ( + !contentType || + /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType) + ); +} + +function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; + } + xhr.responseXML = null; +} + +function fakeXMLHttpRequestFor(globalScope) { + var isReactNative = + globalScope.navigator && + globalScope.navigator.product === "ReactNative"; + var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject; + sinonXhr.supportsActiveX = + typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(globalScope); + sinonXhr.supportsTimeout = + sinonXhr.supportsXHR && + "timeout" in new sinonXhr.GlobalXMLHttpRequest(); + sinonXhr.supportsCORS = + isReactNative || + (sinonXhr.supportsXHR && + "withCredentials" in new sinonXhr.GlobalXMLHttpRequest()); + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest(config) { + EventTargetHandler.call(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new EventTargetHandler(); + this.responseType = ""; + this.response = ""; + this.logError = configureLogError(config); + + if (sinonXhr.supportsTimeout) { + this.timeout = 0; + } + + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + // largest arity in XHR is 5 - XHR#open + var apply = function(obj, method, args) { + switch (args.length) { + case 0: + return obj[method](); + case 1: + return obj[method](args[0]); + case 2: + return obj[method](args[0], args[1]); + case 3: + return obj[method](args[0], args[1], args[2]); + case 4: + return obj[method](args[0], args[1], args[2], args[3]); + case 5: + return obj[method](args[0], args[1], args[2], args[3], args[4]); + default: + throw new Error("Unhandled case"); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + [ + "open", + "setRequestHeader", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ].forEach(function(method) { + fakeXhr[method] = function() { + return apply(xhr, method, arguments); + }; + }); + + fakeXhr.send = function() { + // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute + if (xhr.responseType !== fakeXhr.responseType) { + xhr.responseType = fakeXhr.responseType; + } + return apply(xhr, "send", arguments); + }; + + var copyAttrs = function(args) { + args.forEach(function(attr) { + fakeXhr[attr] = xhr[attr]; + }); + }; + + var stateChangeStart = function() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["response"]); + if (xhr.responseType === "" || xhr.responseType === "text") { + copyAttrs(["responseText"]); + } + } + if ( + xhr.readyState === FakeXMLHttpRequest.DONE && + (xhr.responseType === "" || xhr.responseType === "document") + ) { + copyAttrs(["responseXML"]); + } + }; + + var stateChangeEnd = function() { + if (fakeXhr.onreadystatechange) { + // eslint-disable-next-line no-useless-call + fakeXhr.onreadystatechange.call(fakeXhr, { + target: fakeXhr, + currentTarget: fakeXhr + }); + } + }; + + var stateChange = function stateChange() { + stateChangeStart(); + stateChangeEnd(); + }; + + if (xhr.addEventListener) { + xhr.addEventListener("readystatechange", stateChangeStart); + + Object.keys(fakeXhr.eventListeners).forEach(function(event) { + /*eslint-disable no-loop-func*/ + fakeXhr.eventListeners[event].forEach(function(handler) { + xhr.addEventListener(event, handler.listener, { + capture: handler.capture, + once: handler.once + }); + }); + /*eslint-enable no-loop-func*/ + }); + + xhr.addEventListener("readystatechange", stateChangeEnd); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error(`INVALID_STATE_ERR - ${xhr.readyState}`); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if ( + xhr.async && + xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED + ) { + throw new Error("No headers received"); + } + } + + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + if (body instanceof Blob) { + return body; + } + + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; + } + throw new Error(`Invalid responseType ${responseType}`); + } + + /** + * Steps to follow when there is an error, according to: + * https://xhr.spec.whatwg.org/#request-error-steps + */ + function requestErrorSteps(xhr) { + clearResponse(xhr); + xhr.errorFlag = true; + xhr.requestHeaders = {}; + xhr.responseHeaders = {}; + + if ( + xhr.readyState !== FakeXMLHttpRequest.UNSENT && + xhr.sendFlag && + xhr.readyState !== FakeXMLHttpRequest.DONE + ) { + xhr.readyStateChange(FakeXMLHttpRequest.DONE); + xhr.sendFlag = false; + } + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + var parsererrorNS = ""; + + try { + var parsererrors = parser + .parseFromString("INVALID", "text/xml") + .getElementsByTagName("parsererror"); + if (parsererrors.length) { + parsererrorNS = parsererrors[0].namespaceURI; + } + } catch (e) { + // passing invalid XML makes IE11 throw + // so no namespace needs to be determined + } + + var result; + try { + result = parser.parseFromString(text, "text/xml"); + } catch (err) { + return null; + } + + return result.getElementsByTagNameNS( + parsererrorNS, + "parsererror" + ).length + ? null + : result; + } + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = FakeXMLHttpRequest.filters.some(function(filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + FakeXMLHttpRequest.defake(this, arguments); + return; + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + var readyStateChangeEvent = new sinonEvent.Event( + "readystatechange", + false, + false, + this + ); + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + this.logError("Fake XHR onreadystatechange handler", e); + } + } + + if (this.readyState !== FakeXMLHttpRequest.DONE) { + this.dispatchEvent(readyStateChangeEvent); + } else { + var event, progress; + + if (this.timedOut || this.aborted || this.status === 0) { + progress = { loaded: 0, total: 0 }; + event = + (this.timedOut && "timeout") || + (this.aborted && "abort") || + "error"; + } else { + progress = { loaded: 100, total: 100 }; + event = "load"; + } + + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + + this.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.dispatchEvent(readyStateChangeEvent); + this.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + }, + + // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method + setRequestHeader: function setRequestHeader(header, value) { + if (typeof value !== "string") { + throw new TypeError( + `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}` + ); + } + verifyState(this); + + var checkUnsafeHeaders = true; + if (typeof this.unsafeHeadersEnabled === "function") { + checkUnsafeHeaders = this.unsafeHeadersEnabled(); + } + + if ( + checkUnsafeHeaders && + (getHeader(unsafeHeaders, header) !== null || + /^(Sec-|Proxy-)/i.test(header)) + ) { + throw new Error( + // eslint-disable-next-line quotes + `Refused to set unsafe header "${header}"` + ); + } + + // eslint-disable-next-line no-param-reassign + value = normalizeHeaderValue(value); + + var existingHeader = getHeader(this.requestHeaders, header); + if (existingHeader) { + this.requestHeaders[existingHeader] += `, ${value}`; + } else { + this.requestHeaders[header] = value; + } + }, + + setStatus: function setStatus(status) { + var sanitizedStatus = typeof status === "number" ? status : 200; + + verifyRequestOpened(this); + this.status = sanitizedStatus; + this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus]; + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + + var responseHeaders = (this.responseHeaders = {}); + + Object.keys(headers).forEach(function(header) { + responseHeaders[header] = headers[header]; + }); + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(head)$/i.test(this.method)) { + var contentType = getHeader( + this.requestHeaders, + "Content-Type" + ); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[ + contentType + ] = `${value[0]};charset=utf-8`; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = + "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + + // Only listen if setInterval and Date are a stubbed. + if ( + sinonXhr.supportsTimeout && + typeof setInterval.clock === "object" && + typeof Date.clock === "object" + ) { + var initiatedTime = Date.now(); + var self = this; + + // Listen to any possible tick by fake timers and check to see if timeout has + // been exceeded. It's important to note that timeout can be changed while a request + // is in flight, so we must check anytime the end user forces a clock tick to make + // sure timeout hasn't changed. + // https://xhr.spec.whatwg.org/#dfnReturnLink-2 + var clearIntervalId = setInterval(function() { + // Check if the readyState has been reset or is done. If this is the case, there + // should be no timeout. This will also prevent aborted requests and + // fakeServerWithClock from triggering unnecessary responses. + if ( + self.readyState === FakeXMLHttpRequest.UNSENT || + self.readyState === FakeXMLHttpRequest.DONE + ) { + clearInterval(clearIntervalId); + } else if ( + typeof self.timeout === "number" && + self.timeout > 0 + ) { + if (Date.now() >= initiatedTime + self.timeout) { + self.triggerTimeout(); + clearInterval(clearIntervalId); + } + } + }, 1); + } + + this.dispatchEvent( + new sinonEvent.Event("loadstart", false, false, this) + ); + }, + + abort: function abort() { + this.aborted = true; + requestErrorSteps(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + }, + + error: function() { + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + triggerTimeout: function triggerTimeout() { + if (sinonXhr.supportsTimeout) { + this.timedOut = true; + requestErrorSteps(this); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + // eslint-disable-next-line no-param-reassign + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var responseHeaders = this.responseHeaders; + var headers = Object.keys(responseHeaders) + .filter(excludeSetCookie2Header) + .reduce(function(prev, header) { + var value = responseHeaders[header]; + + return `${prev}${header}: ${value}\r\n`; + }, ""); + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body, this.responseType); + var contentType = + this.overriddenMimeType || + this.getResponseHeader("Content-Type"); + + var isTextResponse = + this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring( + index, + index + chunkSize + ); + } + index += chunkSize; + } while (index < body.length); + } + + this.response = convertResponseBody( + this.responseType, + contentType, + body + ); + if (isTextResponse) { + this.responseText = this.response; + } + + if (this.responseType === "document") { + this.responseXML = this.response; + } else if ( + this.responseType === "" && + isXmlContentType(contentType) + ) { + this.responseXML = FakeXMLHttpRequest.parseXML( + this.responseText + ); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.responseURL = this.url; + + this.setStatus(status); + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this.upload + ) + ); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this + ) + ); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent( + new sinonEvent.CustomEvent("error", { detail: error }) + ); + } + }, + + overrideMimeType: function overrideMimeType(type) { + if (this.readyState >= FakeXMLHttpRequest.LOADING) { + throw new Error("INVALID_STATE_ERR"); + } + this.overriddenMimeType = type; + } + }); + + var states = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }; + + extend(FakeXMLHttpRequest, states); + extend(FakeXMLHttpRequest.prototype, states); + + function useFakeXMLHttpRequest() { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = function ActiveXObject(objId) { + if ( + objId === "Microsoft.XMLHTTP" || + /^Msxml2\.XMLHTTP/i.test(objId) + ) { + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + } + + return { + xhr: sinonXhr, + FakeXMLHttpRequest: FakeXMLHttpRequest, + useFakeXMLHttpRequest: useFakeXMLHttpRequest + }; +} + +module.exports = extend(fakeXMLHttpRequestFor(globalObject), { + fakeXMLHttpRequestFor: fakeXMLHttpRequestFor +}); diff --git a/build/node_modules/nise/lib/fake-xhr/index.test.js b/build/node_modules/nise/lib/fake-xhr/index.test.js new file mode 100644 index 00000000..0c82f75d --- /dev/null +++ b/build/node_modules/nise/lib/fake-xhr/index.test.js @@ -0,0 +1,2870 @@ +/*global ActiveXObject*/ +"use strict"; + +var referee = require("@sinonjs/referee"); +var proxyquire = require("proxyquire"); +var sinonStub = require("sinon").stub; +var sinonSpy = require("sinon").spy; + +var sinon = require("sinon"); +var extend = require("just-extend"); +var JSDOM = require("jsdom").JSDOM; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var assert = referee.assert; +var refute = referee.refute; + +var globalActiveXObject = + typeof ActiveXObject !== "undefined" ? ActiveXObject : undefined; + +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; +var isInBrowser = global.window === global; +var setupDOM = require("jsdom-global"); + +var globalXMLHttpRequest, + sinonFakeXhr, + FakeXMLHttpRequest, + fakeXhr, + JSDOMParser; + +if (JSDOM) { + JSDOMParser = new JSDOM().window.DOMParser; +} + +function fakeXhrSetUp() { + fakeXhr = sinonFakeXhr.useFakeXMLHttpRequest(); +} + +function fakeXhrTearDown() { + if (typeof fakeXhr.restore === "function") { + fakeXhr.restore(); + } +} + +function runWithWorkingXHROveride(workingXHR, test) { + var original; + try { + // eslint-disable-line no-restricted-syntax + original = sinonFakeXhr.xhr.workingXHR; + sinonFakeXhr.xhr.workingXHR = workingXHR; + test(); + } finally { + sinonFakeXhr.xhr.workingXHR = original; + } +} + +function toBinaryString(buffer) { + return String.fromCharCode.apply(null, new Uint8Array(buffer)); +} + +function assertArrayBufferMatches(actual, expected) { + assert(actual instanceof ArrayBuffer, "${0} expected to be an ArrayBuffer"); + assert( + expected instanceof ArrayBuffer, + "${0} expected to be an ArrayBuffer" + ); + var actualString = toBinaryString(actual); + var expectedString = toBinaryString(expected); + assert.same( + actualString, + expectedString, + "ArrayBuffer [${0}] expected to match ArrayBuffer [${1}]" + ); +} + +function assertBlobMatches(actual, expected, done) { + var actualReader = new FileReader(); + actualReader.onloadend = function() { + assert.same(actualReader.result, expected); + done(); + }; + actualReader.readAsText(actual); +} + +function assertProgressEvent(event, progress) { + assert.equals(event.loaded, progress); + assert.equals(event.total, progress); + assert.equals(event.lengthComputable, Boolean(progress)); +} + +function assertEventOrdering(event, progress, callback) { + it(`should follow request sequence for ${event}`, function(done) { + var expectedOrder = [ + "upload:progress", + `upload:${event}`, + "upload:loadend", + "xhr:progress", + `xhr:on${event}`, + `xhr:${event}` + ]; + var eventOrder = []; + + function observe(name) { + return function(e) { + assertProgressEvent(e, progress); + eventOrder.push(name); + }; + } + + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.upload.addEventListener( + "progress", + observe("upload:progress") + ); + this.xhr.upload.addEventListener("loadend", observe("upload:loadend")); + this.xhr.addEventListener("progress", observe("xhr:progress")); + this.xhr.addEventListener("loadend", function(e) { + assertProgressEvent(e, progress); + + // finish next tick to allow any events that might fire + // after loadend to trigger + setTimeout(function() { + assert.equals(eventOrder, expectedOrder); + + done(); + }, 1); + }); + + // listen for abort, error, and load events to make sure only + // the expected events fire + ["abort", "timeout", "error", "load"].forEach(function(name) { + this.xhr.upload.addEventListener(name, observe(`upload:${name}`)); + this.xhr.addEventListener(name, observe(`xhr:${name}`)); + this.xhr[`on${name}`] = observe(`xhr:on${name}`); + }, this); + + callback(this.xhr); + }); +} + +function assertRequestErrorSteps(callback) { + it("sets response to empty string", function() { + this.xhr.response = "Partial data"; + + callback(this.xhr); + + assert.same(this.xhr.response, ""); + }); + + it("sets responseText to empty string", function() { + this.xhr.responseText = "Partial data"; + + callback(this.xhr); + + assert.same(this.xhr.responseText, ""); + }); + + it("sets errorFlag to true", function() { + callback(this.xhr); + + assert.isTrue(this.xhr.errorFlag); + }); + + it("nulls request headers", function() { + this.xhr.open("GET", "/"); + this.xhr.setRequestHeader("X-Test", "Sumptn"); + + callback(this.xhr); + + assert.equals(this.xhr.requestHeaders, {}); + }); + + it("does not have undefined response headers", function() { + this.xhr.open("GET", "/"); + + callback(this.xhr); + + refute.isUndefined(this.xhr.responseHeaders); + }); + + it("nulls response headers", function() { + this.xhr.open("GET", "/"); + + callback(this.xhr); + + assert.equals(this.xhr.responseHeaders, {}); + }); + + it("signals onreadystatechange with state set to DONE if sent before", function() { + var readyState; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.onreadystatechange = function() { + readyState = this.readyState; + }; + + callback(this.xhr); + + assert.equals(readyState, FakeXMLHttpRequest.DONE); + }); + + it("sets send flag to false if sent before", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + callback(this.xhr); + + assert.isFalse(this.xhr.sendFlag); + }); + + it("dispatches readystatechange event if sent before", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.onreadystatechange = sinonStub(); + + callback(this.xhr); + + assert(this.xhr.onreadystatechange.called); + }); + + it("does not dispatch readystatechange event if readyState is unsent", function() { + this.xhr.onreadystatechange = sinonStub(); + + callback(this.xhr); + + assert.isFalse(this.xhr.onreadystatechange.called); + }); + + it("does not dispatch readystatechange event if readyState is opened but not sent", function() { + this.xhr.open("GET", "/"); + this.xhr.onreadystatechange = sinonStub(); + + callback(this.xhr); + + assert.isFalse(this.xhr.onreadystatechange.called); + }); + + it("does not dispatch readystatechange event if readyState is done", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.respond(); + + this.xhr.onreadystatechange = sinonStub(); + callback(this.xhr); + + assert.isFalse(this.xhr.onreadystatechange.called); + }); +} + +function loadModule() { + sinonFakeXhr = proxyquire("./index", {}); + FakeXMLHttpRequest = sinonFakeXhr.FakeXMLHttpRequest; +} + +describe("FakeXMLHttpRequest", function() { + beforeEach(function() { + if (JSDOMParser) { + global.DOMParser = JSDOMParser; + this.cleanupDOM = setupDOM(); + } + globalXMLHttpRequest = global.XMLHttpRequest; + loadModule(); + }); + + afterEach(function() { + delete FakeXMLHttpRequest.onCreate; + if (JSDOMParser) { + delete global.DOMParser; + this.cleanupDOM(); + } + }); + + it("is constructor", function() { + assert.isFunction(FakeXMLHttpRequest); + assert.same( + FakeXMLHttpRequest.prototype.constructor, + FakeXMLHttpRequest + ); + }); + + it("class implements readyState constants", function() { + assert.same(FakeXMLHttpRequest.OPENED, 1); + assert.same(FakeXMLHttpRequest.HEADERS_RECEIVED, 2); + assert.same(FakeXMLHttpRequest.LOADING, 3); + assert.same(FakeXMLHttpRequest.DONE, 4); + }); + + it("instance implements readyState constants", function() { + var xhr = new FakeXMLHttpRequest(); + + assert.same(xhr.OPENED, 1); + assert.same(xhr.HEADERS_RECEIVED, 2); + assert.same(xhr.LOADING, 3); + assert.same(xhr.DONE, 4); + }); + + it("calls onCreate if listener is set", function() { + var onCreate = sinonSpy(); + FakeXMLHttpRequest.onCreate = onCreate; + + // instantiating FakeXMLHttpRequest for it's onCreate side effect + var xhr = new FakeXMLHttpRequest(); // eslint-disable-line no-unused-vars + + assert(onCreate.called); + }); + + it("passes new object to onCreate if set", function() { + var onCreate = sinonSpy(); + FakeXMLHttpRequest.onCreate = onCreate; + + var xhr = new FakeXMLHttpRequest(); + + assert.same(onCreate.getCall(0).args[0], xhr); + }); + + describe(".withCredentials", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("should set the property if we support standards CORS", function() { + assert.equals( + sinonFakeXhr.xhr.supportsCORS, + "withCredentials" in this.xhr + ); + }); + }); + + describe(".timeout", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("should set the property if we support timeout", function() { + assert.equals( + sinonFakeXhr.xhr.supportsTimeout, + "timeout" in this.xhr + ); + }); + }); + + describe(".open", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("is method", function() { + assert.isFunction(this.xhr.open); + }); + + it("sets properties on object", function() { + this.xhr.open("GET", "/my/url", true, "cjno", "pass"); + + assert.equals(this.xhr.method, "GET"); + assert.equals(this.xhr.url, "/my/url"); + assert.isTrue(this.xhr.async); + assert.equals(this.xhr.username, "cjno"); + assert.equals(this.xhr.password, "pass"); + }); + + it("is async by default", function() { + this.xhr.open("GET", "/my/url"); + + assert.isTrue(this.xhr.async); + }); + + it("sets async to false", function() { + this.xhr.open("GET", "/my/url", false); + + assert.isFalse(this.xhr.async); + }); + + it("sets response to empty string", function() { + this.xhr.open("GET", "/my/url"); + + assert.same(this.xhr.response, ""); + }); + + it("sets responseText to empty string", function() { + this.xhr.open("GET", "/my/url"); + + assert.same(this.xhr.responseText, ""); + }); + + it("sets responseXML to null", function() { + this.xhr.open("GET", "/my/url"); + + assert.isNull(this.xhr.responseXML); + }); + + it("sets requestHeaders to blank object", function() { + this.xhr.open("GET", "/my/url"); + + assert.isObject(this.xhr.requestHeaders); + assert.equals(this.xhr.requestHeaders, {}); + }); + + it("sets readyState to OPENED", function() { + this.xhr.open("GET", "/my/url"); + + assert.same(this.xhr.readyState, FakeXMLHttpRequest.OPENED); + }); + + it("sets send flag to false", function() { + this.xhr.open("GET", "/my/url"); + + assert.isFalse(this.xhr.sendFlag); + }); + + it("dispatches onreadystatechange with reset state", function() { + var state = {}; + + this.xhr.onreadystatechange = function() { + extend(state, this); + }; + + this.xhr.open("GET", "/my/url"); + + assert.equals(state.method, "GET"); + assert.equals(state.url, "/my/url"); + assert.isTrue(state.async); + assert.isUndefined(state.username); + assert.isUndefined(state.password); + assert.same(state.response, ""); + assert.same(state.responseText, ""); + assert.isNull(state.responseXML); + assert.isUndefined(state.responseHeaders); + assert.equals(state.readyState, FakeXMLHttpRequest.OPENED); + assert.isFalse(state.sendFlag); + }); + }); + + describe(".setRequestHeader", function() { + var unsafeHeaders = [ + "Accept-Charset", + "Access-Control-Request-Headers", + "Access-Control-Request-Method", + "Accept-Encoding", + "Connection", + "Content-Length", + "Cookie", + "Cookie2", + "Content-Transfer-Encoding", + "Date", + "DNT", + "Expect", + "Host", + "Keep-Alive", + "Origin", + "Referer", + "TE", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "User-Agent", + "Via" + ]; + + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + this.xhr.open("GET", "/"); + }); + + it("throws exception if readyState is not OPENED", function() { + var xhr = new FakeXMLHttpRequest(); + + assert.exception(function() { + xhr.setRequestHeader("X-EY", "No-no"); + }); + }); + + it("throws exception if send flag is true", function() { + var xhr = this.xhr; + xhr.sendFlag = true; + + assert.exception(function() { + xhr.setRequestHeader("X-EY", "No-no"); + }); + }); + + it("disallows unsafe headers by default", function() { + var xhr = this.xhr; + + unsafeHeaders.forEach(function(headerName) { + assert.exception(function() { + xhr.setRequestHeader(headerName, ""); + }); + }); + + assert.exception(function() { + xhr.setRequestHeader("Proxy-Oops", ""); + }); + + assert.exception(function() { + xhr.setRequestHeader("Sec-Oops", ""); + }); + }); + + it("applies unsafe headers check with header name case ignored", function() { + var xhr = this.xhr; + + assert.exception(function() { + xhr.setRequestHeader("accept-CHARSET", ""); + }); + }); + + it("allows unsafe headers when fake server unsafeHeadersEnabled option is turned off", function() { + var server = sinon.fakeServer.create({ + unsafeHeadersEnabled: false + }); + + var xhr = new sinon.FakeXMLHttpRequest(); + xhr.open("GET", "/"); + + unsafeHeaders.forEach(function(headerName) { + refute.exception(function() { + xhr.setRequestHeader(headerName, ""); + }); + }); + + refute.exception(function() { + xhr.setRequestHeader("Proxy-Oops", ""); + }); + + refute.exception(function() { + xhr.setRequestHeader("Sec-Oops", ""); + }); + + server.restore(); + }); + + it("sets header and value", function() { + this.xhr.setRequestHeader("X-Fake", "Yeah!"); + + assert.equals(this.xhr.requestHeaders, { "X-Fake": "Yeah!" }); + }); + + it("throw on receiving non-string values", function() { + assert.exception(function() { + this.xhr.setRequestHeader("X-Version", 1.0); + }, "TypeError"); + }); + + it("appends same-named header values", function() { + this.xhr.setRequestHeader("X-Fake", "Oh"); + this.xhr.setRequestHeader("X-Fake", "yeah!"); + + assert.equals(this.xhr.requestHeaders, { "X-Fake": "Oh, yeah!" }); + }); + + it("appends same-named header values when casing differs in header name", function() { + this.xhr.setRequestHeader("X-Fake", "Oh"); + this.xhr.setRequestHeader("x-fake", "yeah!"); + + assert.equals(this.xhr.requestHeaders, { "X-Fake": "Oh, yeah!" }); + }); + + describe("value normalization", function() { + var httpWhitespaceBytes = ["\x09\x0A\x0D\x20"]; + + function runTest(input, expected) { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.setRequestHeader("X-Fake", input); + assert.equals(xhr.requestHeaders, { "X-Fake": expected }); + } + + it("removes HTTP whitespace bytes prefixing the value", function() { + httpWhitespaceBytes.forEach(function(value) { + runTest(`${value}something`, "something"); + }); + + httpWhitespaceBytes.forEach(function(value) { + runTest(`${value + value}something`, "something"); + }); + + runTest(`${httpWhitespaceBytes.join()}something`, "something"); + }); + + it("removes HTTP whitespace bytes sufficing the value", function() { + httpWhitespaceBytes.forEach(function(value) { + runTest(`${value}something`, "something"); + }); + + httpWhitespaceBytes.forEach(function(value) { + runTest(`something${value}${value}`, "something"); + }); + + runTest(`something${httpWhitespaceBytes.join()}`, "something"); + }); + + it("leaves HTTP whitespace bytes in the middle of value", function() { + httpWhitespaceBytes.forEach(function(value) { + runTest(`something${value}else`, `something${value}else`); + }); + + runTest( + `something${httpWhitespaceBytes.join()}else`, + `something${httpWhitespaceBytes.join()}else` + ); + }); + }); + }); + + describe(".send", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("throws if request is not open", function() { + var xhr = new FakeXMLHttpRequest(); + + assert.exception(function() { + xhr.send(); + }); + }); + + it("throws if send flag is true", function() { + var xhr = this.xhr; + xhr.open("GET", "/"); + xhr.sendFlag = true; + + assert.exception(function() { + xhr.send(); + }); + }); + + it("sets HEAD body to null", function() { + this.xhr.open("HEAD", "/"); + this.xhr.send("Data"); + + assert.isNull(this.xhr.requestBody); + }); + + if (supportsFormData) { + describe("sets mime to text/plain", function() { + it("test", function() { + this.xhr.open("POST", "/"); + this.xhr.send("Data"); + + assert.equals( + this.xhr.requestHeaders["Content-Type"], + "text/plain;charset=utf-8" + ); + }); + }); + } + + it("does not override mime", function() { + this.xhr.open("POST", "/"); + this.xhr.setRequestHeader("Content-Type", "text/html"); + this.xhr.send("Data"); + + assert.equals( + this.xhr.requestHeaders["Content-Type"], + "text/html;charset=utf-8" + ); + }); + + it("does not add new 'Content-Type' header if 'content-type' already exists", function() { + this.xhr.open("POST", "/"); + this.xhr.setRequestHeader("content-type", "application/json"); + this.xhr.send("Data"); + + assert.isUndefined(this.xhr.requestHeaders["Content-Type"]); + assert.equals( + this.xhr.requestHeaders["content-type"], + "application/json;charset=utf-8" + ); + }); + + if (supportsFormData) { + describe("does not add 'Content-Type' header if data is FormData", function() { + it("test", function() { + this.xhr.open("POST", "/"); + var formData = new FormData(); + formData.append("username", "biz"); + this.xhr.send("Data"); + + assert.isUndefined(this.xhr.requestHeaders["content-type"]); + }); + }); + } + + it("sets request body to string data for GET", function() { + this.xhr.open("GET", "/"); + this.xhr.send("Data"); + + assert.equals(this.xhr.requestBody, "Data"); + }); + + it("sets request body to string data for POST", function() { + this.xhr.open("POST", "/"); + this.xhr.send("Data"); + + assert.equals(this.xhr.requestBody, "Data"); + }); + + it("sets error flag to false", function() { + this.xhr.open("POST", "/"); + this.xhr.send("Data"); + + assert.isFalse(this.xhr.errorFlag); + }); + + it("sets send flag to true", function() { + this.xhr.open("POST", "/"); + this.xhr.send("Data"); + + assert.isTrue(this.xhr.sendFlag); + }); + + it("does not set send flag to true if sync", function() { + this.xhr.open("POST", "/", false); + this.xhr.send("Data"); + + assert.isFalse(this.xhr.sendFlag); + }); + + it("should not duplicate readystatechange events", function(done) { + var events = []; + var xhr = this.xhr; + + xhr.addEventListener("readystatechange", function() { + events.push(xhr.readyState); + + if (xhr.readyState === 4) { + assert.equals(events, [1, 2, 3, 4]); + done(); + } + }); + xhr.open("POST", "/", true); + + xhr.send("Data"); + xhr.respond(200, {}, ""); + }); + + it("dispatches onSend callback if set", function() { + this.xhr.open("POST", "/", true); + var callback = sinonSpy(); + this.xhr.onSend = callback; + + this.xhr.send("Data"); + + assert(callback.called); + }); + + it("dispatches onSend with request as argument", function() { + this.xhr.open("POST", "/", true); + var callback = sinonSpy(); + this.xhr.onSend = callback; + + this.xhr.send("Data"); + + assert(callback.calledWith(this.xhr)); + }); + + it("dispatches onSend when async", function() { + this.xhr.open("POST", "/", false); + var callback = sinonSpy(); + this.xhr.onSend = callback; + + this.xhr.send("Data"); + + assert(callback.calledWith(this.xhr)); + }); + }); + + describe(".setResponseHeaders", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("sets request headers", function() { + var object = { id: 42 }; + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders(object); + + assert.equals(this.xhr.responseHeaders, object); + }); + + it("calls readyStateChange with HEADERS_RECEIVED", function() { + var object = { id: 42 }; + this.xhr.open("GET", "/"); + this.xhr.send(); + var spy = (this.xhr.readyStateChange = sinonSpy()); + + this.xhr.setResponseHeaders(object); + + assert(spy.calledWith(FakeXMLHttpRequest.HEADERS_RECEIVED)); + }); + + it("does not call readyStateChange if sync", function() { + var object = { id: 42 }; + this.xhr.open("GET", "/", false); + this.xhr.send(); + var spy = (this.xhr.readyStateChange = sinonSpy()); + + this.xhr.setResponseHeaders(object); + + assert.isFalse(spy.called); + }); + + it("changes readyState to HEADERS_RECEIVED if sync", function() { + var object = { id: 42 }; + this.xhr.open("GET", "/", false); + this.xhr.send(); + + this.xhr.setResponseHeaders(object); + + assert.equals( + this.xhr.readyState, + FakeXMLHttpRequest.HEADERS_RECEIVED + ); + }); + + it("throws if headers were already set", function() { + var xhr = this.xhr; + + xhr.open("GET", "/", false); + xhr.send(); + xhr.setResponseHeaders({}); + + assert.exception(function() { + xhr.setResponseHeaders({}); + }); + }); + }); + + describe(".setStatus", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("cannot be set on closed request", function() { + assert.exception(function() { + this.xhr.setStatus(); + }); + }); + + it("cannot be set on unsent request", function() { + this.xhr.open("GET", "/"); + + assert.exception(function() { + this.xhr.setStatus(); + }); + }); + + it("by default sets status to 200", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setStatus(); + + assert.equals(this.xhr.status, 200); + assert.equals(this.xhr.statusText, "OK"); + }); + + it("sets status", function() { + var expectedStatus = 206; + var xhr = this.xhr; + + xhr.open("GET", "/"); + xhr.send(); + xhr.setStatus(expectedStatus); + + assert.equals(xhr.status, expectedStatus); + }); + + it("sets status text to the value from FakeXMLHttpRequest.statusCodes", function() { + var status = 206; + var expectedStatusText = FakeXMLHttpRequest.statusCodes[status]; + var xhr = this.xhr; + + xhr.open("GET", "/"); + xhr.send(); + xhr.setStatus(status); + + assert.equals(xhr.statusText, expectedStatusText); + }); + }); + + describe(".setResponseBodyAsync", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({}); + }); + + it("invokes onreadystatechange handler with LOADING state", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert(spy.calledWith(FakeXMLHttpRequest.LOADING)); + }); + + it("invokes onreadystatechange handler for each 10 byte chunk", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + this.xhr.chunkSize = 10; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert.equals(spy.callCount, 4); + }); + + it("invokes onreadystatechange handler for each x byte chunk", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + this.xhr.chunkSize = 20; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert.equals(spy.callCount, 3); + }); + + it("invokes onreadystatechange handler with partial data", function() { + var pieces = []; + var mismatch = false; + + this.xhr.readyStateChange = function() { + if (this.response !== this.responseText) { + mismatch = true; + } + pieces.push(this.responseText); + }; + this.xhr.chunkSize = 9; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert.isFalse(mismatch); + assert.equals(pieces[1], "Some text"); + }); + + it("calls onreadystatechange with DONE state", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert(spy.calledWith(FakeXMLHttpRequest.DONE)); + }); + + it("throws if not open", function() { + var xhr = new FakeXMLHttpRequest(); + + assert.exception(function() { + xhr.setResponseBody(""); + }); + }); + + it("throws if no headers received", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.send(); + + assert.exception(function() { + xhr.setResponseBody(""); + }); + }); + + it("throws if body was already sent", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.send(); + xhr.setResponseHeaders({}); + xhr.setResponseBody(""); + + assert.exception(function() { + xhr.setResponseBody(""); + }); + }); + + it("throws if body is not a string", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.send(); + xhr.setResponseHeaders({}); + + assert.exception(function() { + xhr.setResponseBody({}); + }, "InvalidBodyException"); + }); + + it("throws if body is not a string or arraybuffer and responseType='arraybuffer'", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.responseType = "arraybuffer"; + xhr.send(); + xhr.setResponseHeaders({}); + + assert.exception(function() { + xhr.setResponseBody({}); + }, "InvalidBodyException"); + }); + + it("throws if body is not a string, arraybuffer, or blob and responseType='blob'", function() { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + xhr.responseType = "blob"; + xhr.send(); + xhr.setResponseHeaders({}); + + assert.exception(function() { + xhr.setResponseBody({}); + }, "InvalidBodyException"); + }); + + if (supportsArrayBuffer) { + describe("with ArrayBuffer support", function() { + it("invokes onreadystatechange for each chunk when responseType='arraybuffer'", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + this.xhr.chunkSize = 10; + + this.xhr.responseType = "arraybuffer"; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert.equals(spy.callCount, 4); + }); + }); + } + + if (supportsBlob) { + describe("with Blob support", function() { + it("invokes onreadystatechange handler for each 10 byte chunk when responseType='blob'", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + this.xhr.chunkSize = 10; + + this.xhr.responseType = "blob"; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert.equals(spy.callCount, 4); + }); + }); + } + }); + + describe(".setResponseBodySync", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + this.xhr.open("GET", "/", false); + this.xhr.send(); + this.xhr.setResponseHeaders({}); + }); + + it("does not throw", function() { + var xhr = this.xhr; + + refute.exception(function() { + xhr.setResponseBody(""); + }); + }); + + it("sets readyState to DONE", function() { + this.xhr.setResponseBody(""); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.DONE); + }); + + it("throws if responding to request twice", function() { + var xhr = this.xhr; + this.xhr.setResponseBody(""); + + assert.exception(function() { + xhr.setResponseBody(""); + }); + }); + + it("calls onreadystatechange for sync request with DONE state", function() { + var spy = sinonSpy(); + this.xhr.readyStateChange = spy; + + this.xhr.setResponseBody("Some text goes in here ok?"); + + assert(spy.calledWith(FakeXMLHttpRequest.DONE)); + }); + + it("simulates synchronous request", function() { + var xhr = new FakeXMLHttpRequest(); + + xhr.onSend = function() { + this.setResponseHeaders({}); + this.setResponseBody("Oh yeah"); + }; + + xhr.open("GET", "/", false); + xhr.send(); + + assert.equals(xhr.responseText, "Oh yeah"); + }); + }); + + describe(".respond", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox(); + this.xhr = new FakeXMLHttpRequest({ + setTimeout: this.sandbox.spy(), + useImmediateExceptions: false + }); + this.xhr.open("GET", "/"); + var spy = (this.spy = sinonSpy()); + + this.xhr.onreadystatechange = function() { + if (this.readyState === 4) { + spy.call(this); + } + }; + + this.xhr.send(); + }); + + afterEach(function() { + this.sandbox.restore(); + }); + + it("fire onload event", function() { + this.onload = this.spy; + this.xhr.respond(200, {}, ""); + assert.equals(this.spy.callCount, 1); + }); + + it("fire onload event with this set to the XHR object", function(done) { + var xhr = new FakeXMLHttpRequest(); + xhr.open("GET", "/"); + + xhr.onload = function() { + assert.same(this, xhr); + + done(); + }; + + xhr.send(); + xhr.respond(200, {}, ""); + }); + + it("calls readystate handler with readyState DONE once", function() { + this.xhr.respond(200, {}, ""); + + assert.equals(this.spy.callCount, 1); + }); + + it("defaults to status 200, no headers, and blank body", function() { + this.xhr.respond(); + + assert.equals(this.xhr.status, 200); + assert.equals(this.xhr.getAllResponseHeaders(), ""); + assert.equals(this.xhr.responseText, ""); + }); + + it("sets status", function() { + this.xhr.respond(201); + + assert.equals(this.xhr.status, 201); + }); + + it("sets status text", function() { + this.xhr.respond(201); + + assert.equals(this.xhr.statusText, "Created"); + }); + + it("sets headers", function() { + sinonSpy(this.xhr, "setResponseHeaders"); + var responseHeaders = { some: "header", value: "over here" }; + this.xhr.respond(200, responseHeaders); + + assert.equals( + this.xhr.setResponseHeaders.args[0][0], + responseHeaders + ); + }); + + it("sets response url", function() { + var xhr = new FakeXMLHttpRequest(); + var uri = "/"; + + xhr.open("GET", uri); + xhr.send(); + xhr.respond(200, {}, ""); + + assert.equals(xhr.responseURL, uri); + }); + + it("url is provided before onload event of the XHR object", function(done) { + var xhr = new FakeXMLHttpRequest(); + var uri = "/"; + xhr.open("GET", uri); + + xhr.onload = function() { + assert.same(this.responseURL, uri); + + done(); + }; + + xhr.send(); + xhr.respond(200, {}, ""); + }); + + it("sets response text", function() { + this.xhr.respond(200, {}, "'tis some body text"); + + assert.equals(this.xhr.responseText, "'tis some body text"); + }); + + it("completes request when onreadystatechange fails", function() { + this.xhr.onreadystatechange = sinonStub().throws(); + this.xhr.respond(200, {}, "'tis some body text"); + + assert.equals(this.xhr.onreadystatechange.callCount, 4); + }); + + it("sets status before transitioning to readyState HEADERS_RECEIVED", function() { + var status, statusText; + this.xhr.onreadystatechange = function() { + if (this.readyState === 2) { + status = this.status; + statusText = this.statusText; + } + }; + this.xhr.respond(204); + + assert.equals(status, 204); + assert.equals(statusText, "No Content"); + }); + + it("only performs readystatechange events prior to loadend event during xhr response", function() { + var eventLog = []; + this.xhr.addEventListener("readystatechange", function() { + eventLog.push({ + event: "readystatechange", + timestamp: Date.now() + }); + }); + this.xhr.addEventListener("loadend", function() { + eventLog.push({ event: "loadend", timestamp: Date.now() }); + }); + this.xhr.respond(200); + + // Loadend is last event + assert.equals(eventLog[eventLog.length - 1].event, "loadend"); + // Only 1 loadend event occurs + assert.equals( + eventLog.filter(item => item.event !== "readystatechange") + .length, + 1 + ); + }); + }); + + describe(".getResponseHeader", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("returns null if request is not finished", function() { + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.getResponseHeader("Content-Type")); + }); + + it("returns null if header is Set-Cookie", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + assert.isNull(this.xhr.getResponseHeader("Set-Cookie")); + }); + + it("returns null if header is Set-Cookie2", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + assert.isNull(this.xhr.getResponseHeader("Set-Cookie2")); + }); + + it("returns header value", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({ "Content-Type": "text/html" }); + + assert.equals( + this.xhr.getResponseHeader("Content-Type"), + "text/html" + ); + }); + + it("returns header value if sync", function() { + this.xhr.open("GET", "/", false); + this.xhr.send(); + this.xhr.setResponseHeaders({ "Content-Type": "text/html" }); + + assert.equals( + this.xhr.getResponseHeader("Content-Type"), + "text/html" + ); + }); + + it("returns null if header is not set", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + assert.isNull(this.xhr.getResponseHeader("Content-Type")); + }); + + it("returns headers case insensitive", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({ "Content-Type": "text/html" }); + + assert.equals( + this.xhr.getResponseHeader("content-type"), + "text/html" + ); + }); + }); + + describe(".getAllResponseHeaders", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("returns empty string if request is not finished", function() { + this.xhr.open("GET", "/"); + assert.equals(this.xhr.getAllResponseHeaders(), ""); + }); + + it("does not return Set-Cookie and Set-Cookie2 headers", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({ + "Set-Cookie": "Hey", + "Set-Cookie2": "There" + }); + + assert.equals(this.xhr.getAllResponseHeaders(), ""); + }); + + it("returns headers", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({ + "Content-Type": "text/html", + "Set-Cookie2": "There", + "Content-Length": "32" + }); + + assert.equals( + this.xhr.getAllResponseHeaders(), + "Content-Type: text/html\r\nContent-Length: 32\r\n" + ); + }); + + it("returns headers if sync", function() { + this.xhr.open("GET", "/", false); + this.xhr.send(); + this.xhr.setResponseHeaders({ + "Content-Type": "text/html", + "Set-Cookie2": "There", + "Content-Length": "32" + }); + + assert.equals( + this.xhr.getAllResponseHeaders(), + "Content-Type: text/html\r\nContent-Length: 32\r\n" + ); + }); + }); + + describe(".abort", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("sets aborted flag to true", function() { + this.xhr.abort(); + + assert.isTrue(this.xhr.aborted); + }); + + it("sets readyState to unsent if sent before", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + it("keeps readyState unsent if called in unsent state", function() { + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + it("resets readyState to unsent if it was opened", function() { + this.xhr.open("GET", "/"); + + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + it("resets readyState to unsent if it was opened with send() flag sent", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + it("resets readyState to unsent if it headers were received", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.setResponseHeaders({}); + + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + it("resets readyState to unsent if it was done", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.respond(); + + this.xhr.abort(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.UNSENT); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertRequestErrorSteps(function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.abort(); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertEventOrdering("abort", 0, function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.abort(); + }); + }); + + describe(".error", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("sets response to empty string", function() { + this.xhr.response = "Partial data"; + + this.xhr.error(); + + assert.same(this.xhr.response, ""); + }); + + it("sets responseText to empty string", function() { + this.xhr.responseText = "Partial data"; + + this.xhr.error(); + + assert.same(this.xhr.responseText, ""); + }); + + it("sets errorFlag to true", function() { + this.xhr.errorFlag = false; + this.xhr.error(); + + assert.isTrue(this.xhr.errorFlag); + }); + + it("nulls request headers", function() { + this.xhr.open("GET", "/"); + this.xhr.setRequestHeader("X-Test", "Sumptn"); + + this.xhr.error(); + + assert.equals(this.xhr.requestHeaders, {}); + }); + + it("nulls response headers", function() { + this.xhr.open("GET", "/"); + + this.xhr.error(); + + assert.equals(this.xhr.responseHeaders, {}); + }); + + it("dispatches readystatechange event if sent before", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + this.xhr.onreadystatechange = sinonStub(); + + this.xhr.error(); + + assert(this.xhr.onreadystatechange.called); + }); + + it("sets readyState to DONE", function() { + this.xhr.open("GET", "/"); + + this.xhr.error(); + + assert.equals(this.xhr.readyState, FakeXMLHttpRequest.DONE); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertEventOrdering("error", 0, function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.error(); + }); + }); + + describe(".triggerTimeout", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox(); + this.xhr = new FakeXMLHttpRequest(); + }); + + afterEach(function() { + this.sandbox.restore(); + }); + + it("sets timedOut to true", function() { + this.xhr.triggerTimeout(); + + assert.isTrue(this.xhr.timedOut); + }); + + it("does not get called without a fake timer", function(done) { + var xhr = this.xhr; + + xhr.open("GET", "/"); + xhr.timeout = 1; + xhr.triggerTimeout = sinonSpy(); + xhr.send(); + + setTimeout(function() { + assert.isFalse(xhr.triggerTimeout.called); + done(); + }, 2); + }); + + it("does not get called after being aborted", function() { + this.sandbox.useFakeTimers(); + + this.xhr.open("GET", "/"); + this.xhr.timeout = 1; + this.xhr.triggerTimeout = sinonSpy(); + this.xhr.send(); + this.xhr.abort(); + + this.sandbox.clock.tick(1); + assert.isFalse(this.xhr.triggerTimeout.called); + }); + + it("does not get called after erroring", function() { + this.sandbox.useFakeTimers(); + + this.xhr.open("GET", "/"); + this.xhr.timeout = 1; + this.xhr.triggerTimeout = sinonSpy(); + this.xhr.send(); + this.xhr.error(); + + this.sandbox.clock.tick(1); + assert.isFalse(this.xhr.triggerTimeout.called); + }); + + it("only gets called with fake timers", function() { + this.sandbox.useFakeTimers(); + this.xhr.open("GET", "/"); + this.xhr.timeout = 1; + this.xhr.triggerTimeout = sinonSpy(); + this.xhr.send(); + + this.sandbox.clock.tick(1); + assert.isTrue(this.xhr.triggerTimeout.called); + }); + + it("only gets called once with fake timers", function() { + this.sandbox.useFakeTimers(); + this.xhr.open("GET", "/"); + this.xhr.timeout = 1; + this.xhr.triggerTimeout = sinonSpy(); + this.xhr.send(); + + this.sandbox.clock.tick(2); + assert.isTrue(this.xhr.triggerTimeout.calledOnce); + }); + + it("allows timeout to be changed while fetching", function() { + this.sandbox.useFakeTimers(); + this.xhr.open("GET", "/"); + this.xhr.timeout = 2; + this.xhr.triggerTimeout = sinonSpy(); + this.xhr.send(); + + this.sandbox.clock.tick(1); + assert.isFalse(this.xhr.triggerTimeout.calledOnce); + + this.xhr.timeout = 3; + this.sandbox.clock.tick(1); + assert.isFalse(this.xhr.triggerTimeout.calledOnce); + + this.sandbox.clock.tick(1); + assert.isTrue(this.xhr.triggerTimeout.calledOnce); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertRequestErrorSteps(function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.triggerTimeout(); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertEventOrdering("timeout", 0, function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.triggerTimeout(); + }); + }); + + describe(".response", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("is initially the empty string if responseType === ''", function() { + this.xhr.responseType = ""; + this.xhr.open("GET", "/"); + assert.same(this.xhr.response, ""); + }); + + it("is initially the empty string if responseType === 'text'", function() { + this.xhr.responseType = "text"; + this.xhr.open("GET", "/"); + assert.same(this.xhr.response, ""); + }); + + it("is initially null if responseType === 'json'", function() { + this.xhr.responseType = "json"; + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.response); + }); + + it("is initially null if responseType === 'document'", function() { + this.xhr.responseType = "document"; + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.response); + }); + + it("is the empty string when the response body is empty", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(200, {}, ""); + + assert.same(this.xhr.response, ""); + }); + + it("parses JSON for responseType='json'", function() { + this.xhr.responseType = "json"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/json" }, + JSON.stringify({ foo: true }) + ); + + var response = this.xhr.response; + assert.isObject(response); + assert.isTrue(response.foo); + }); + + it("does not parse JSON if responseType!='json'", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + var responseText = JSON.stringify({ foo: true }); + + this.xhr.respond( + 200, + { "Content-Type": "application/json" }, + responseText + ); + + var response = this.xhr.response; + assert.isString(response); + assert.equals(response, responseText); + }); + + if (supportsArrayBuffer) { + describe("with ArrayBuffer support", function() { + it("is initially null if responseType === 'arraybuffer'", function() { + this.xhr.responseType = "arraybuffer"; + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.response); + }); + + it("defaults to empty ArrayBuffer response", function() { + this.xhr.responseType = "arraybuffer"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(); + assertArrayBufferMatches( + this.xhr.response, + new Uint8Array([]).buffer + ); + }); + + it("returns ArrayBuffer when responseType='arraybuffer'", function() { + this.xhr.responseType = "arraybuffer"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + "a test buffer" + ); + + var expected = new GlobalTextEncoder("utf-8").encode( + "a test buffer" + ).buffer; + assertArrayBufferMatches(this.xhr.response, expected); + }); + + it("returns utf-8 strings correctly when responseType='arraybuffer'", function() { + this.xhr.responseType = "arraybuffer"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + "\xFF" + ); + + var expectedBuffer = new GlobalTextEncoder("utf-8").encode( + "\xFF" + ).buffer; + + assertArrayBufferMatches(this.xhr.response, expectedBuffer); + }); + + it("returns binary data correctly when responseType='arraybuffer'", function() { + this.xhr.responseType = "arraybuffer"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + var buffer = new Uint8Array([160, 64, 0, 0, 32, 193]) + .buffer; + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + buffer + ); + + assertArrayBufferMatches(this.xhr.response, buffer); + }); + }); + } + + if (supportsBlob) { + describe("with Blob support", function() { + it("is initially null if responseType === 'blob'", function() { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.response); + }); + + it("defaults to empty Blob response", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(); + + assertBlobMatches(this.xhr.response, "", done); + }); + + it("returns blob with correct data", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + "a test blob" + ); + + assertBlobMatches(this.xhr.response, "a test blob", done); + }); + + it("returns blob with correct binary data", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + "\xFF" + ); + + assertBlobMatches(this.xhr.response, "\xFF", done); + }); + + it("returns blob with correct binary data when using an arraybuffer", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + var buffer = new Uint8Array([160, 64, 0, 0, 32, 193]) + .buffer; + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + buffer + ); + + assertBlobMatches( + this.xhr.response, + new Blob([buffer]), + done + ); + }); + + it("returns blob with correct binary data when using a blob", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + var blob = new Blob([ + new Uint8Array([160, 64, 0, 0, 32, 193]).buffer + ]); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + blob + ); + + assertBlobMatches(this.xhr.response, blob, done); + }); + + it("does parse utf-8 content outside ASCII range properly", function(done) { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.send(); + + var responseText = JSON.stringify({ foo: "♥" }); + + this.xhr.respond( + 200, + { "Content-Type": "application/octet-stream" }, + responseText + ); + + assertBlobMatches(this.xhr.response, responseText, done); + }); + }); + } + }); + + describe(".responseXML", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("is initially null", function() { + this.xhr.open("GET", "/"); + assert.isNull(this.xhr.responseXML); + }); + + it("is null when the response body is empty", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(200, {}, ""); + + assert.isNull(this.xhr.responseXML); + }); + + it("is null when the response body contains invalid XML", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/xml" }, + //eslint-disable-next-line quotes + '!!!' + ); + + assert.isNull(this.xhr.responseXML); + }); + + it("parses XML for application/xml", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/xml" }, + "

            Hola!

            " + ); + + var doc = this.xhr.responseXML; + var elements = doc.documentElement.getElementsByTagName("h1"); + assert.equals(elements.length, 1); + assert.equals(elements[0].tagName, "h1"); + }); + + it("parses XML for text/xml", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "text/xml" }, + "

            Hola!

            " + ); + + refute.isNull(this.xhr.responseXML); + }); + + it("parses XML for custom xml content type", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "application/text+xml" }, + "

            Hola!

            " + ); + + refute.isNull(this.xhr.responseXML); + }); + + it("parses XML with no Content-Type", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(200, {}, "

            Hola!

            "); + + var doc = this.xhr.responseXML; + var elements = doc.documentElement.getElementsByTagName("h1"); + assert.equals(elements.length, 1); + assert.equals(elements[0].tagName, "h1"); + }); + + it("does not parse XML with Content-Type text/plain", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "text/plain" }, + "
            " + ); + + assert.isNull(this.xhr.responseXML); + }); + + it("does not parse XML with Content-Type text/plain if sync", function() { + this.xhr.open("GET", "/", false); + this.xhr.send(); + + this.xhr.respond( + 200, + { "Content-Type": "text/plain" }, + "
            " + ); + + assert.isNull(this.xhr.responseXML); + }); + }); + + describe(".overrideMimeType", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + if (supportsBlob) { + it("overrides provided MIME-Type", function() { + this.xhr.responseType = "blob"; + this.xhr.open("GET", "/"); + this.xhr.overrideMimeType("text/plain"); + this.xhr.send(); + + this.xhr.respond(200, { "Content-Type": "text/html" }, ""); + + assert.equals(this.xhr.response.type, "text/plain"); + }); + } + + it("throws when executed too late", function() { + this.xhr.open("GET", "/"); + this.xhr.send(); + + this.xhr.respond(200, {}, ""); + + assert.exception(function() { + this.xhr.overrideMimeType("text/plain"); + }); + }); + }); + + describe(".responseURL", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + }); + + it("should set responseURL after response", function() { + this.xhr.open("GET", "/"); + + assert.isUndefined(this.xhr.responseURL); + + this.xhr.send(); + + assert.isUndefined(this.xhr.responseURL); + + this.xhr.respond(200, {}, ""); + + assert.equals(this.xhr.responseURL, "/"); + }); + }); + + describe("stub XHR", function() { + beforeEach(fakeXhrSetUp); + afterEach(fakeXhrTearDown); + + it("returns FakeXMLHttpRequest constructor", function() { + assert.same(fakeXhr, FakeXMLHttpRequest); + }); + + it("temporarily blesses FakeXMLHttpRequest with restore method", function() { + assert.isFunction(fakeXhr.restore); + }); + + it("calling restore removes temporary method", function() { + fakeXhr.restore(); + + assert.isUndefined(fakeXhr.restore); + }); + + it("removes XMLHttpRequest onCreate listener", function() { + // eslint-disable-next-line no-empty-function + FakeXMLHttpRequest.onCreate = function() {}; + + fakeXhr.restore(); + + assert.isUndefined(FakeXMLHttpRequest.onCreate); + }); + + it("optionally keeps XMLHttpRequest onCreate listener", function() { + // eslint-disable-next-line no-empty-function + var onCreate = function() {}; + FakeXMLHttpRequest.onCreate = onCreate; + + fakeXhr.restore(true); + + assert.same(FakeXMLHttpRequest.onCreate, onCreate); + }); + }); + + if (typeof XMLHttpRequest !== "undefined") { + describe(".filtering", function() { + beforeEach(function() { + FakeXMLHttpRequest.useFilters = true; + FakeXMLHttpRequest.filters = []; + sinonFakeXhr.useFakeXMLHttpRequest(); + }); + + afterEach(function() { + FakeXMLHttpRequest.useFilters = false; + FakeXMLHttpRequest.restore(); + if (FakeXMLHttpRequest.defake.restore) { + FakeXMLHttpRequest.defake.restore(); + } + }); + + it("does not defake XHR requests that don't match a filter", function() { + sinonStub(FakeXMLHttpRequest, "defake"); + + FakeXMLHttpRequest.addFilter(function() { + return false; + }); + new XMLHttpRequest().open("GET", "http://example.com"); + + refute(FakeXMLHttpRequest.defake.called); + }); + + it("defakes XHR requests that match a filter", function() { + sinonStub(FakeXMLHttpRequest, "defake"); + + FakeXMLHttpRequest.addFilter(function() { + return true; + }); + new XMLHttpRequest().open("GET", "http://example.com"); + + assert(FakeXMLHttpRequest.defake.calledOnce); + }); + }); + } + + describe("defaked XHR", function() { + beforeEach(function() { + fakeXhr = new FakeXMLHttpRequest(); + }); + + it("updates attributes from working XHR object when ready state changes", function() { + var workingXHRInstance; + var readyStateCallbacks = []; + var workingXHROverride = function() { + workingXHRInstance = this; + this.addEventListener = function(str, fn) { + if (str === "readystatechange") { + readyStateCallbacks.push(fn); + } + }; + // eslint-disable-next-line no-empty-function + this.open = function() {}; + }; + + runWithWorkingXHROveride(workingXHROverride, function() { + FakeXMLHttpRequest.defake(fakeXhr, []); + workingXHRInstance.statusText = + "This is the status text of the real XHR"; + workingXHRInstance.readyState = 4; + readyStateCallbacks.forEach(function(cb) { + cb(); + }); + assert.equals( + fakeXhr.statusText, + "This is the status text of the real XHR" + ); + }); + }); + + it("passes on methods to working XHR object", function() { + var workingXHRInstance, spy; + var workingXHROverride = function() { + workingXHRInstance = this; + // eslint-disable-next-line no-empty-function + this.addEventListener = this.open = function() {}; + }; + + runWithWorkingXHROveride(workingXHROverride, function() { + FakeXMLHttpRequest.defake(fakeXhr, []); + workingXHRInstance.getResponseHeader = spy = sinonSpy(); + fakeXhr.getResponseHeader(); + assert(spy.calledOnce); + }); + }); + + it("calls legacy onreadystatechange handlers with target set to fakeXHR", function() { + var spy, readyStateCb; + var workingXHROverride = function() { + this.addEventListener = function(str, fn) { + readyStateCb = fn; + }; + // eslint-disable-next-line no-empty-function + this.open = function() {}; + }; + + runWithWorkingXHROveride(workingXHROverride, function() { + FakeXMLHttpRequest.defake(fakeXhr, []); + fakeXhr.onreadystatechange = spy = sinonSpy(); + readyStateCb(); + assert(spy.calledOnce); + + // Fix to make weinre work + assert.isObject(spy.args[0][0]); + assert.equals(spy.args[0][0].target, fakeXhr); + assert.equals(spy.args[0][0].currentTarget, fakeXhr); + }); + }); + + it("performs initial readystatechange on opening when filters are being used, but don't match", function() { + try { + // eslint-disable-line no-restricted-syntax + FakeXMLHttpRequest.useFilters = true; + var spy = sinonSpy(); + fakeXhr.addEventListener("readystatechange", spy); + fakeXhr.open("GET", "http://example.com", true); + assert(spy.calledOnce); + } finally { + FakeXMLHttpRequest.useFilters = false; + } + }); + + it("calls on events as well as events added via addEventListener on the fakeXhr", function() { + var abortSpy = sinonSpy(); + var onabortSpy = sinonSpy(); + + fakeXhr.addEventListener("abort", abortSpy); + fakeXhr.onabort = onabortSpy; + FakeXMLHttpRequest.defake(fakeXhr, [ + "GET", + "http://example.com", + true + ]); + fakeXhr.send(); + fakeXhr.abort(); + + assert(abortSpy.calledOnce); + assert(onabortSpy.calledOnce); + }); + + it("passes responseType to working XHR object", function() { + var workingXHRInstance; + var workingXHROverride = function() { + workingXHRInstance = this; + this.responseType = ""; + // eslint-disable-next-line no-empty-function + this.open = function() {}; + // eslint-disable-next-line no-empty-function + this.send = function() {}; + }; + + runWithWorkingXHROveride(workingXHROverride, function() { + FakeXMLHttpRequest.defake(fakeXhr, []); + fakeXhr.responseType = "arraybuffer"; + fakeXhr.send(); + assert.equals(workingXHRInstance.responseType, "arraybuffer"); + }); + }); + + it("issue 61 - InvalidAccessError on synchronous XHR in browser", function() { + var spy; + var workingXHROverride = function() { + // eslint-disable-next-line no-empty-function + this.open = function() {}; + // eslint-disable-next-line no-empty-function + this.send = function() {}; + Object.defineProperty(this, "responseType", { + get: function() { + return ""; + }, + // eslint-disable-next-line no-empty-function + set: function() {}, + configurable: true + }); + spy = sinonSpy(this, "responseType", ["set"]); + }; + + runWithWorkingXHROveride(workingXHROverride, function() { + FakeXMLHttpRequest.defake(fakeXhr, [ + "GET", + "http://example.com", + false + ]); + fakeXhr.send(); + assert(spy.set.notCalled); + }); + }); + }); + + if (isInBrowser) { + describe("defaked XHR filters", function() { + beforeEach(function() { + FakeXMLHttpRequest.useFilters = true; + FakeXMLHttpRequest.filters = []; + sinonFakeXhr.useFakeXMLHttpRequest(); + FakeXMLHttpRequest.addFilter(function() { + return true; + }); + }); + + afterEach(function() { + FakeXMLHttpRequest.useFilters = false; + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.restore(); + }); + + it("loads resource asynchronously", function(done) { + var req = new XMLHttpRequest(); + + req.onreadystatechange = function() { + if (this.readyState === 4) { + assert.match(this.responseText, /loaded successfully/); + assert.match(this.response, /loaded successfully/); + done(); + } + }; + + req.open("GET", "/test/resources/xhr_target.txt", true); + req.send(); + }); + + it("loads resource synchronously", function() { + var req = new XMLHttpRequest(); + req.open("GET", "/test/resources/xhr_target.txt", false); + req.send(); + + assert.match(req.responseText, /loaded successfully/); + assert.match(req.response, /loaded successfully/); + }); + }); + } + + if (typeof ActiveXObject === "undefined") { + describe("missing ActiveXObject", function() { + beforeEach(fakeXhrSetUp); + afterEach(fakeXhrTearDown); + + it("does not expose ActiveXObject", function() { + assert.equals(typeof ActiveXObject, "undefined"); + }); + + it("does not expose ActiveXObject when restored", function() { + fakeXhr.restore(); + + assert.equals(typeof ActiveXObject, "undefined"); + }); + }); + } else { + describe("native ActiveXObject", function() { + beforeEach(fakeXhrSetUp); + afterEach(fakeXhrTearDown); + + it("hijacks ActiveXObject", function() { + refute.same(global.ActiveXObject, globalActiveXObject); + refute.same(global.ActiveXObject, globalActiveXObject); + refute.same(ActiveXObject, globalActiveXObject); // eslint-disable-line no-undef + }); + + it("restores global ActiveXObject", function() { + fakeXhr.restore(); + + assert.same(global.ActiveXObject, globalActiveXObject); + assert.same(global.ActiveXObject, globalActiveXObject); + assert.same(ActiveXObject, globalActiveXObject); // eslint-disable-line no-undef + }); + + it("creates FakeXHR object with ActiveX Microsoft.XMLHTTP", function() { + var xhr = new ActiveXObject("Microsoft.XMLHTTP"); // eslint-disable-line no-undef + + assert(xhr instanceof FakeXMLHttpRequest); + }); + + it("creates FakeXHR object with ActiveX Msxml2.XMLHTTP", function() { + var xhr = new ActiveXObject("Msxml2.XMLHTTP"); // eslint-disable-line no-undef + + assert(xhr instanceof FakeXMLHttpRequest); + }); + + it("creates FakeXHR object with ActiveX Msxml2.XMLHTTP.3.0", function() { + var xhr = new ActiveXObject("Msxml2.XMLHTTP.3.0"); // eslint-disable-line no-undef + + assert(xhr instanceof FakeXMLHttpRequest); + }); + + it("creates FakeXHR object with ActiveX Msxml2.XMLHTTP.6.0", function() { + var xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0"); // eslint-disable-line no-undef + + assert(xhr instanceof FakeXMLHttpRequest); + }); + }); + } + + describe("when there is no native XHR", function() { + var nativeXhr = null; + + beforeEach(function() { + if ("XMLHttpRequest" in global) { + nativeXhr = global.XMLHttpRequest; + delete global.XMLHttpRequest; + } + loadModule(); + fakeXhrSetUp(); + }); + + afterEach(function() { + fakeXhrTearDown(); + if (nativeXhr !== null) { + global.XMLHttpRequest = nativeXhr; + } + }); + + it("does not expose XMLHttpRequest", function() { + assert.equals(typeof XMLHttpRequest, "undefined"); + }); + + it("does not expose XMLHttpRequest after restore", function() { + fakeXhr.restore(); + + assert.equals(typeof XMLHttpRequest, "undefined"); + }); + }); + + describe("with native XHR", function() { + beforeEach(fakeXhrSetUp); + afterEach(fakeXhrTearDown); + + it("replaces global XMLHttpRequest", function() { + refute.same(XMLHttpRequest, globalXMLHttpRequest); + assert.same(XMLHttpRequest, FakeXMLHttpRequest); + }); + + it("restores global XMLHttpRequest", function() { + fakeXhr.restore(); + assert.same(global.XMLHttpRequest, globalXMLHttpRequest); + }); + }); + + describe("progress events", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + this.xhr.open("GET", "/some/url"); + }); + + it("triggers 'loadstart' event on #send", function(done) { + this.xhr.addEventListener("loadstart", function() { + assert(true); + + done(); + }); + + this.xhr.send(); + }); + + it("triggers 'loadstart' with event target set to the XHR object", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("loadstart", function(event) { + assert.same(xhr, event.target); + assert.same(xhr, event.currentTarget); + + done(); + }); + + this.xhr.send(); + }); + + it("calls #onloadstart on #send", function(done) { + this.xhr.onloadstart = function() { + assert(true); + + done(); + }; + + this.xhr.send(); + }); + + it("triggers 'load' event on success", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("load", function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + refute.equals(xhr.status, 0); + + done(); + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("triggers 'load' event on for non-200 events", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("load", function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + assert.equals(xhr.status, 500); + + done(); + }); + + this.xhr.send(); + this.xhr.respond(500, {}, ""); + }); + + it("triggers 'load' with event target set to the XHR object", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("load", function(event) { + assert.same(xhr, event.target); + assert.same(xhr, event.currentTarget); + + done(); + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("calls #onload on success", function(done) { + var xhr = this.xhr; + + this.xhr.onload = function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + refute.equals(xhr.status, 0); + + done(); + }; + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("calls #onload for non-200 events", function(done) { + var xhr = this.xhr; + + this.xhr.onload = function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + assert.equals(xhr.status, 500); + + done(); + }; + + this.xhr.send(); + this.xhr.respond(500, {}, ""); + }); + + it("does not trigger 'load' event on abort", function(done) { + this.xhr.addEventListener("load", function() { + assert(false); + }); + + this.xhr.addEventListener("abort", function() { + assert(true); + + // finish on next tick + setTimeout(done, 0); + }); + + this.xhr.send(); + this.xhr.abort(); + }); + + it("triggers 'abort' event on cancel", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("abort", function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + assert.equals(xhr.status, 0); + + setTimeout(function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.UNSENT); + done(); + }, 0); + }); + + this.xhr.send(); + this.xhr.abort(); + }); + + it("triggers 'abort' with event target set to the XHR object", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("abort", function(event) { + assert.same(xhr, event.target); + assert.same(xhr, event.currentTarget); + + done(); + }); + + this.xhr.send(); + this.xhr.abort(); + }); + + it("calls #onabort on cancel", function(done) { + var xhr = this.xhr; + + this.xhr.onabort = function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + assert.equals(xhr.status, 0); + + setTimeout(function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.UNSENT); + done(); + }, 0); + }; + + this.xhr.send(); + this.xhr.abort(); + }); + + it("triggers 'loadend' event at the end", function(done) { + this.xhr.addEventListener("loadend", function(e) { + assertProgressEvent(e, 100); + assert(true); + + done(); + }); + + this.xhr.send(); + this.xhr.respond(403, {}, ""); + }); + + it("triggers 'loadend' with event target set to the XHR object", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("loadend", function(event) { + assertProgressEvent(event, 100); + assert.same(xhr, event.target); + assert.same(xhr, event.currentTarget); + + done(); + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("calls #onloadend at the end", function(done) { + this.xhr.onloadend = function(e) { + assertProgressEvent(e, 100); + assert(true); + + done(); + }; + + this.xhr.send(); + this.xhr.respond(403, {}, ""); + }); + + it("triggers (download) progress event when response is done", function(done) { + var xhr = this.xhr; + + this.xhr.addEventListener("progress", function(e) { + assert.equals(e.total, 100); + assert.equals(e.loaded, 20); + assert.isTrue(e.lengthComputable); + assert.same(e.target, xhr); + done(); + }); + this.xhr.downloadProgress({ + total: 100, + loaded: 20 + }); + }); + + // eslint-disable-next-line mocha/no-setup-in-describe + assertEventOrdering("load", 100, function(xhr) { + // eslint-disable-next-line mocha/no-setup-in-describe + xhr.respond(200, {}, ""); + }); + + describe("timeout", function() { + beforeEach(function() { + this.sandbox = sinon.createSandbox({ useFakeTimers: true }); + }); + + afterEach(function() { + this.sandbox.restore(); + }); + + it("triggers 'timeout' event when timed out", function(done) { + this.xhr.timeout = 1; + + this.xhr.addEventListener("timeout", function() { + assert(true); + done(); + }); + + this.xhr.send(); + + this.sandbox.clock.tick(1); + }); + + it("does not trigger 'load' event on timeout", function(done) { + var self = this; + + this.xhr.timeout = 1; + + this.xhr.addEventListener("load", function() { + assert(false); + }); + + this.xhr.addEventListener("timeout", function() { + assert(true); + + // restore the sandbox, so we can finish on next tick. + self.sandbox.clock.restore(); + setTimeout(done, 0); + }); + + this.xhr.send(); + + this.sandbox.clock.tick(1); + }); + }); + }); + + describe("xhr.upload", function() { + beforeEach(function() { + this.xhr = new FakeXMLHttpRequest(); + this.xhr.open("POST", "/some/url", true); + }); + + it("progress event is triggered with xhr.uploadProgress({loaded, 20, total, 100})", function(done) { + this.xhr.upload.addEventListener("progress", function(e) { + assert.equals(e.total, 100); + assert.equals(e.loaded, 20); + assert.isTrue(e.lengthComputable); + done(); + }); + this.xhr.uploadProgress({ + total: 100, + loaded: 20 + }); + }); + + it("calls .onprogress", function(done) { + var xhr = this.xhr; + + this.xhr.upload.onprogress = function(e) { + assert.equals(e.total, 100); + assert.equals(e.loaded, 20); + assert.isTrue(e.lengthComputable); + assert.equals(e.target, xhr.upload); + done(); + }; + this.xhr.uploadProgress({ + total: 100, + loaded: 20 + }); + }); + + it("triggers 'load' event on success", function(done) { + var xhr = this.xhr; + + this.xhr.upload.addEventListener("load", function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + refute.equals(xhr.status, 0); + done(); + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("fires event with 100% progress on 'load'", function(done) { + this.xhr.upload.addEventListener("progress", function(e) { + assert.equals(e.total, 100); + assert.equals(e.loaded, 100); + done(); + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("fires events in an order similar to a browser", function(done) { + var xhr = this.xhr; + var events = []; + + this.xhr.upload.addEventListener("progress", function(e) { + events.push(e.type); + }); + this.xhr.upload.addEventListener("load", function(e) { + events.push(e.type); + }); + this.xhr.addEventListener("readystatechange", function(e) { + if (xhr.readyState === 4) { + events.push(e.type); + assert.equals(events, [ + "progress", + "load", + "readystatechange" + ]); + done(); + } + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("calls .onprogess", function(done) { + var xhr = this.xhr; + this.onprogressCalled = false; + + this.xhr.onprogress = function() { + this.onprogressCalled = true; + }; + this.xhr.addEventListener("readystatechange", function() { + if (xhr.readyState === 4) { + assert.isTrue(this.onprogressCalled); + done(); + } + }); + + this.xhr.send(); + this.xhr.respond(200, {}, ""); + }); + + it("calls 'abort' on cancel", function(done) { + var xhr = this.xhr; + + this.xhr.upload.addEventListener("abort", function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.DONE); + assert.equals(xhr.status, 0); + + setTimeout(function() { + assert.equals(xhr.readyState, FakeXMLHttpRequest.UNSENT); + done(); + }, 0); + }); + + this.xhr.send(); + this.xhr.abort(); + }); + + if (typeof CustomEvent !== "undefined") { + describe("error event", function() { + it("is triggered with xhr.uploadError(new Error('foobar'))", function(done) { + this.xhr.upload.addEventListener("error", function(e) { + assert.equals(e.detail.message, "foobar"); + + done(); + }); + this.xhr.uploadError(new Error("foobar")); + }); + }); + } + }); + + describe("fakeXMLHttpRequestFor", function() { + var win; + + beforeEach(function() { + if (JSDOM) { + win = new JSDOM().window; + win.DOMParser = JSDOMParser; + } else { + win = window; + } + var scopedSinonFakeXhr = sinonFakeXhr.fakeXMLHttpRequestFor(win); + globalXMLHttpRequest = win.XMLHttpRequest; + fakeXhr = scopedSinonFakeXhr.useFakeXMLHttpRequest(); + FakeXMLHttpRequest = scopedSinonFakeXhr.FakeXMLHttpRequest; + }); + + afterEach(fakeXhrTearDown); + + it("replaces the XMLHttpRequest on the given Window object", function() { + refute.same(win.XMLHttpRequest, globalXMLHttpRequest); + assert.same(win.XMLHttpRequest, FakeXMLHttpRequest); + }); + + it("restores the XMLHttpRequest on the given Window object", function() { + fakeXhr.restore(); + assert.same(win.XMLHttpRequest, globalXMLHttpRequest); + }); + }); +}); diff --git a/build/node_modules/nise/lib/index.js b/build/node_modules/nise/lib/index.js new file mode 100644 index 00000000..5fdae0d1 --- /dev/null +++ b/build/node_modules/nise/lib/index.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + fakeServer: require("./fake-server"), + fakeServerWithClock: require("./fake-server/fake-server-with-clock"), + fakeXhr: require("./fake-xhr") +}; diff --git a/build/node_modules/nise/lib/index.test.js b/build/node_modules/nise/lib/index.test.js new file mode 100644 index 00000000..664f1c4a --- /dev/null +++ b/build/node_modules/nise/lib/index.test.js @@ -0,0 +1,27 @@ +"use strict"; + +var assert = require("@sinonjs/referee").assert; +var api = require("./index"); + +describe("api", function() { + it("should export 'fake-server/' as fakeServer", function() { + var expected = require("./fake-server"); + var actual = api.fakeServer; + + assert.equals(actual, expected); + }); + + it("should export 'fake-server/fake-server-with-clock' as fakeServerWithClock", function() { + var expected = require("./fake-server/fake-server-with-clock"); + var actual = api.fakeServerWithClock; + + assert.equals(actual, expected); + }); + + it("should export 'fake-xhr/' as fakeXhr", function() { + var expected = require("./fake-xhr"); + var actual = api.fakeXhr; + + assert.equals(actual, expected); + }); +}); diff --git a/build/node_modules/nise/nise.js b/build/node_modules/nise/nise.js new file mode 100644 index 00000000..e0da72aa --- /dev/null +++ b/build/node_modules/nise/nise.js @@ -0,0 +1,8662 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.nise = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i {}, { + // get once() { supportsOnce = true; } + // }); + var options = flattenOptions(providedOptions); + + // 2. If callback is null, then return. + if (listener === null || listener === undefined) { + return; + } + + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + + // 4. If context object’s associated list of event listener + // does not contain an event listener whose type is type, + // callback is callback, and capture is capture, then append + // a new event listener to it, whose type is type, callback is + // callback, capture is capture, passive is passive, and once is once. + if ( + !this.eventListeners[event].some( + hasListenerFilter(listener, options.capture) + ) + ) { + this.eventListeners[event].push({ + listener: listener, + capture: options.capture, + once: options.once + }); + } + }, + + // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener + removeEventListener: function removeEventListener( + event, + listener, + providedOptions + ) { + if (!this.eventListeners || !this.eventListeners[event]) { + return; + } + + // 2. Let capture be the result of flattening options. + var options = flattenOptions(providedOptions); + + // 3. If there is an event listener in the associated list of + // event listeners whose type is type, callback is callback, + // and capture is capture, then set that event listener’s + // removed to true and remove it from the associated list of event listeners. + this.eventListeners[event] = this.eventListeners[event].filter( + not(hasListenerFilter(listener, options.capture)) + ); + }, + + dispatchEvent: function dispatchEvent(event) { + if (!this.eventListeners || !this.eventListeners[event.type]) { + return Boolean(event.defaultPrevented); + } + + var self = this; + var type = event.type; + var listeners = self.eventListeners[type]; + + // Remove listeners, that should be dispatched once + // before running dispatch loop to avoid nested dispatch issues + self.eventListeners[type] = listeners.filter(function(listenerSpec) { + return !listenerSpec.once; + }); + listeners.forEach(function(listenerSpec) { + var listener = listenerSpec.listener; + if (typeof listener === "function") { + listener.call(self, event); + } else { + listener.handleEvent(event); + } + }); + + return Boolean(event.defaultPrevented); + } +}; + +module.exports = EventTarget; + +},{}],4:[function(require,module,exports){ +"use strict"; + +function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); +} + +Event.prototype = { + initEvent: function(type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + this.currentTarget = target; + }, + + // eslint-disable-next-line no-empty-function + stopPropagation: function() {}, + + preventDefault: function() { + this.defaultPrevented = true; + } +}; + +module.exports = Event; + +},{}],5:[function(require,module,exports){ +"use strict"; + +module.exports = { + Event: require("./event"), + ProgressEvent: require("./progress-event"), + CustomEvent: require("./custom-event"), + EventTarget: require("./event-target") +}; + +},{"./custom-event":2,"./event":4,"./event-target":3,"./progress-event":6}],6:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = + typeof progressEventRaw.loaded === "number" + ? progressEventRaw.loaded + : null; + this.total = + typeof progressEventRaw.total === "number" + ? progressEventRaw.total + : null; + this.lengthComputable = Boolean(progressEventRaw.total); +} + +ProgressEvent.prototype = new Event(); + +ProgressEvent.prototype.constructor = ProgressEvent; + +module.exports = ProgressEvent; + +},{"./event":4}],7:[function(require,module,exports){ +"use strict"; + +var FakeTimers = require("@sinonjs/fake-timers"); +var fakeServer = require("./index"); + +// eslint-disable-next-line no-empty-function +function Server() {} +Server.prototype = fakeServer; + +var fakeServerWithClock = new Server(); + +fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = FakeTimers.install(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return fakeServer.addRequest.call(this, xhr); +}; + +fakeServerWithClock.respond = function respond() { + var returnVal = fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.uninstall(); + this.resetClock = false; + } + } + + return returnVal; +}; + +fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.uninstall(); + } + + return fakeServer.restore.apply(this, arguments); +}; + +module.exports = fakeServerWithClock; + +},{"./index":8,"@sinonjs/fake-timers":31}],8:[function(require,module,exports){ +"use strict"; + +var fakeXhr = require("../fake-xhr"); +var push = [].push; +var log = require("./log"); +var configureLogError = require("../configure-logger"); +var pathToRegexp = require("path-to-regexp"); + +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + +function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] !== "string") { + if (!supportsArrayBuffer) { + throw new TypeError( + `Fake server response body should be a string, but was ${typeof response[2]}` + ); + } else if (!(response[2] instanceof ArrayBuffer)) { + throw new TypeError( + `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}` + ); + } + } + + return response; +} + +function getDefaultWindowLocation() { + var winloc = { + hostname: "localhost", + port: process.env.PORT || 80, + protocol: "http:" + }; + winloc.host = + winloc.hostname + + (String(winloc.port) === "80" ? "" : `:${winloc.port}`); + return winloc; +} + +function getWindowLocation() { + if (typeof window === "undefined") { + // Fallback + return getDefaultWindowLocation(); + } + + if (typeof window.location !== "undefined") { + // Browsers place location on window + return window.location; + } + + if ( + typeof window.window !== "undefined" && + typeof window.window.location !== "undefined" + ) { + // React Native on Android places location on window.window + return window.window.location; + } + + return getDefaultWindowLocation(); +} + +function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = + !url || + url === reqUrl || + (typeof url.test === "function" && url.test(reqUrl)) || + (typeof url === "function" && url(reqUrl) === true); + + return matchMethod && matchUrl; +} + +function match(response, request) { + var wloc = getWindowLocation(); + + var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`); + + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, "/"); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat( + ru && typeof ru.exec === "function" + ? ru.exec(requestUrl).slice(1) + : [] + ); + return response.response.apply(response, args); + } + + return true; + } + + return false; +} + +function incrementRequestCount() { + var count = ++this.requestCount; + + this.requested = true; + + this.requestedOnce = count === 1; + this.requestedTwice = count === 2; + this.requestedThrice = count === 3; + + this.firstRequest = this.getRequest(0); + this.secondRequest = this.getRequest(1); + this.thirdRequest = this.getRequest(2); + + this.lastRequest = this.getRequest(count - 1); +} + +var fakeServer = { + create: function(config) { + var server = Object.create(this); + server.configure(config); + this.xhr = fakeXhr.useFakeXMLHttpRequest(); + server.requests = []; + server.requestCount = 0; + server.queue = []; + server.responses = []; + + this.xhr.onCreate = function(xhrObj) { + xhrObj.unsafeHeadersEnabled = function() { + return !(server.unsafeHeadersEnabled === false); + }; + server.addRequest(xhrObj); + }; + + return server; + }, + + configure: function(config) { + var self = this; + var allowlist = { + autoRespond: true, + autoRespondAfter: true, + respondImmediately: true, + fakeHTTPMethods: true, + logger: true, + unsafeHeadersEnabled: true + }; + + // eslint-disable-next-line no-param-reassign + config = config || {}; + + Object.keys(config).forEach(function(setting) { + if (setting in allowlist) { + self[setting] = config[setting]; + } + }); + + self.logError = configureLogError(config); + }, + + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + incrementRequestCount.call(this); + + xhrObj.onSend = function() { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function() { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match( + /_method=([^\b;]+)/ + ); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + logger: function() { + // no-op; override via configure() + }, + + logError: configureLogError({}), + + log: log, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (arguments.length === 1) { + // eslint-disable-next-line no-param-reassign + body = method; + // eslint-disable-next-line no-param-reassign + url = method = null; + } + + if (arguments.length === 2) { + // eslint-disable-next-line no-param-reassign + body = url; + // eslint-disable-next-line no-param-reassign + url = method; + // eslint-disable-next-line no-param-reassign + method = null; + } + + // Escape port number to prevent "named" parameters in 'path-to-regexp' module + if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) { + var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/); + // eslint-disable-next-line no-param-reassign + url = `${m[1]}\\:${m[2]}`; + } + + push.call(this.responses, { + method: method, + url: + typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + response: typeof body === "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var self = this; + + requests.forEach(function(request) { + self.processRequest(request); + }); + }, + + respondAll: function respondAll() { + if (this.respondImmediately) { + return; + } + + this.queue = this.requests.slice(0); + + var request; + while ((request = this.queue.shift())) { + this.processRequest(request); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + this.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + }, + + getRequest: function getRequest(index) { + return this.requests[index] || null; + }, + + reset: function reset() { + this.resetBehavior(); + this.resetHistory(); + }, + + resetBehavior: function resetBehavior() { + this.responses.length = this.queue.length = 0; + }, + + resetHistory: function resetHistory() { + this.requests.length = this.requestCount = 0; + + this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false; + + this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null; + } +}; + +module.exports = fakeServer; + +},{"../configure-logger":1,"../fake-xhr":11,"./log":9,"path-to-regexp":37}],9:[function(require,module,exports){ +"use strict"; +var inspect = require("util").inspect; + +function log(response, request) { + var str; + + str = `Request:\n${inspect(request)}\n\n`; + str += `Response:\n${inspect(response)}\n\n`; + + /* istanbul ignore else: when this.logger is not a function, it can't be called */ + if (typeof this.logger === "function") { + this.logger(str); + } +} + +module.exports = log; + +},{"util":41}],10:[function(require,module,exports){ +"use strict"; + +exports.isSupported = (function() { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } +})(); + +},{}],11:[function(require,module,exports){ +"use strict"; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var globalObject = require("@sinonjs/commons").global; +var configureLogError = require("../configure-logger"); +var sinonEvent = require("../event"); +var extend = require("just-extend"); + +var supportsProgress = typeof ProgressEvent !== "undefined"; +var supportsCustomEvent = typeof CustomEvent !== "undefined"; +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; + +function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function() { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); + }; + } + + return false; +} + +// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name +var unsafeHeaders = { + "Accept-Charset": true, + "Access-Control-Request-Headers": true, + "Access-Control-Request-Method": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + DNT: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Origin: true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true +}; + +function EventTargetHandler() { + var self = this; + var events = [ + "loadstart", + "progress", + "abort", + "error", + "load", + "timeout", + "loadend" + ]; + + function addEventListener(eventName) { + self.addEventListener(eventName, function(event) { + var listener = self[`on${eventName}`]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); + } + + events.forEach(addEventListener); +} + +EventTargetHandler.prototype = sinonEvent.EventTarget; + +function normalizeHeaderValue(value) { + // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes + /*eslint no-control-regex: "off"*/ + return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, ""); +} + +function getHeader(headers, header) { + var foundHeader = Object.keys(headers).filter(function(h) { + return h.toLowerCase() === header.toLowerCase(); + }); + + return foundHeader[0] || null; +} + +function excludeSetCookie2Header(header) { + return !/^Set-Cookie2?$/i.test(header); +} + +function verifyResponseBodyType(body, responseType) { + var error = null; + var isString = typeof body === "string"; + + if (responseType === "arraybuffer") { + if (!isString && !(body instanceof ArrayBuffer)) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.` + ); + error.name = "InvalidBodyException"; + } + } else if (responseType === "blob") { + if ( + !isString && + !(body instanceof ArrayBuffer) && + supportsBlob && + !(body instanceof Blob) + ) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.` + ); + error.name = "InvalidBodyException"; + } + } else if (!isString) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.` + ); + error.name = "InvalidBodyException"; + } + + if (error) { + throw error; + } +} + +function convertToArrayBuffer(body, encoding) { + if (body instanceof ArrayBuffer) { + return body; + } + + return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer; +} + +function isXmlContentType(contentType) { + return ( + !contentType || + /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType) + ); +} + +function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; + } + xhr.responseXML = null; +} + +function fakeXMLHttpRequestFor(globalScope) { + var isReactNative = + globalScope.navigator && + globalScope.navigator.product === "ReactNative"; + var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject; + sinonXhr.supportsActiveX = + typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(globalScope); + sinonXhr.supportsTimeout = + sinonXhr.supportsXHR && + "timeout" in new sinonXhr.GlobalXMLHttpRequest(); + sinonXhr.supportsCORS = + isReactNative || + (sinonXhr.supportsXHR && + "withCredentials" in new sinonXhr.GlobalXMLHttpRequest()); + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest(config) { + EventTargetHandler.call(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new EventTargetHandler(); + this.responseType = ""; + this.response = ""; + this.logError = configureLogError(config); + + if (sinonXhr.supportsTimeout) { + this.timeout = 0; + } + + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + // largest arity in XHR is 5 - XHR#open + var apply = function(obj, method, args) { + switch (args.length) { + case 0: + return obj[method](); + case 1: + return obj[method](args[0]); + case 2: + return obj[method](args[0], args[1]); + case 3: + return obj[method](args[0], args[1], args[2]); + case 4: + return obj[method](args[0], args[1], args[2], args[3]); + case 5: + return obj[method](args[0], args[1], args[2], args[3], args[4]); + default: + throw new Error("Unhandled case"); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + [ + "open", + "setRequestHeader", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ].forEach(function(method) { + fakeXhr[method] = function() { + return apply(xhr, method, arguments); + }; + }); + + fakeXhr.send = function() { + // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute + if (xhr.responseType !== fakeXhr.responseType) { + xhr.responseType = fakeXhr.responseType; + } + return apply(xhr, "send", arguments); + }; + + var copyAttrs = function(args) { + args.forEach(function(attr) { + fakeXhr[attr] = xhr[attr]; + }); + }; + + var stateChangeStart = function() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["response"]); + if (xhr.responseType === "" || xhr.responseType === "text") { + copyAttrs(["responseText"]); + } + } + if ( + xhr.readyState === FakeXMLHttpRequest.DONE && + (xhr.responseType === "" || xhr.responseType === "document") + ) { + copyAttrs(["responseXML"]); + } + }; + + var stateChangeEnd = function() { + if (fakeXhr.onreadystatechange) { + // eslint-disable-next-line no-useless-call + fakeXhr.onreadystatechange.call(fakeXhr, { + target: fakeXhr, + currentTarget: fakeXhr + }); + } + }; + + var stateChange = function stateChange() { + stateChangeStart(); + stateChangeEnd(); + }; + + if (xhr.addEventListener) { + xhr.addEventListener("readystatechange", stateChangeStart); + + Object.keys(fakeXhr.eventListeners).forEach(function(event) { + /*eslint-disable no-loop-func*/ + fakeXhr.eventListeners[event].forEach(function(handler) { + xhr.addEventListener(event, handler.listener, { + capture: handler.capture, + once: handler.once + }); + }); + /*eslint-enable no-loop-func*/ + }); + + xhr.addEventListener("readystatechange", stateChangeEnd); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error(`INVALID_STATE_ERR - ${xhr.readyState}`); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if ( + xhr.async && + xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED + ) { + throw new Error("No headers received"); + } + } + + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + if (body instanceof Blob) { + return body; + } + + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; + } + throw new Error(`Invalid responseType ${responseType}`); + } + + /** + * Steps to follow when there is an error, according to: + * https://xhr.spec.whatwg.org/#request-error-steps + */ + function requestErrorSteps(xhr) { + clearResponse(xhr); + xhr.errorFlag = true; + xhr.requestHeaders = {}; + xhr.responseHeaders = {}; + + if ( + xhr.readyState !== FakeXMLHttpRequest.UNSENT && + xhr.sendFlag && + xhr.readyState !== FakeXMLHttpRequest.DONE + ) { + xhr.readyStateChange(FakeXMLHttpRequest.DONE); + xhr.sendFlag = false; + } + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + var parsererrorNS = ""; + + try { + var parsererrors = parser + .parseFromString("INVALID", "text/xml") + .getElementsByTagName("parsererror"); + if (parsererrors.length) { + parsererrorNS = parsererrors[0].namespaceURI; + } + } catch (e) { + // passing invalid XML makes IE11 throw + // so no namespace needs to be determined + } + + var result; + try { + result = parser.parseFromString(text, "text/xml"); + } catch (err) { + return null; + } + + return result.getElementsByTagNameNS( + parsererrorNS, + "parsererror" + ).length + ? null + : result; + } + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = FakeXMLHttpRequest.filters.some(function(filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + FakeXMLHttpRequest.defake(this, arguments); + return; + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + var readyStateChangeEvent = new sinonEvent.Event( + "readystatechange", + false, + false, + this + ); + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + this.logError("Fake XHR onreadystatechange handler", e); + } + } + + if (this.readyState !== FakeXMLHttpRequest.DONE) { + this.dispatchEvent(readyStateChangeEvent); + } else { + var event, progress; + + if (this.timedOut || this.aborted || this.status === 0) { + progress = { loaded: 0, total: 0 }; + event = + (this.timedOut && "timeout") || + (this.aborted && "abort") || + "error"; + } else { + progress = { loaded: 100, total: 100 }; + event = "load"; + } + + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + + this.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.dispatchEvent(readyStateChangeEvent); + this.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + }, + + // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method + setRequestHeader: function setRequestHeader(header, value) { + if (typeof value !== "string") { + throw new TypeError( + `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}` + ); + } + verifyState(this); + + var checkUnsafeHeaders = true; + if (typeof this.unsafeHeadersEnabled === "function") { + checkUnsafeHeaders = this.unsafeHeadersEnabled(); + } + + if ( + checkUnsafeHeaders && + (getHeader(unsafeHeaders, header) !== null || + /^(Sec-|Proxy-)/i.test(header)) + ) { + throw new Error( + // eslint-disable-next-line quotes + `Refused to set unsafe header "${header}"` + ); + } + + // eslint-disable-next-line no-param-reassign + value = normalizeHeaderValue(value); + + var existingHeader = getHeader(this.requestHeaders, header); + if (existingHeader) { + this.requestHeaders[existingHeader] += `, ${value}`; + } else { + this.requestHeaders[header] = value; + } + }, + + setStatus: function setStatus(status) { + var sanitizedStatus = typeof status === "number" ? status : 200; + + verifyRequestOpened(this); + this.status = sanitizedStatus; + this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus]; + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + + var responseHeaders = (this.responseHeaders = {}); + + Object.keys(headers).forEach(function(header) { + responseHeaders[header] = headers[header]; + }); + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(head)$/i.test(this.method)) { + var contentType = getHeader( + this.requestHeaders, + "Content-Type" + ); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[ + contentType + ] = `${value[0]};charset=utf-8`; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = + "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + + // Only listen if setInterval and Date are a stubbed. + if ( + sinonXhr.supportsTimeout && + typeof setInterval.clock === "object" && + typeof Date.clock === "object" + ) { + var initiatedTime = Date.now(); + var self = this; + + // Listen to any possible tick by fake timers and check to see if timeout has + // been exceeded. It's important to note that timeout can be changed while a request + // is in flight, so we must check anytime the end user forces a clock tick to make + // sure timeout hasn't changed. + // https://xhr.spec.whatwg.org/#dfnReturnLink-2 + var clearIntervalId = setInterval(function() { + // Check if the readyState has been reset or is done. If this is the case, there + // should be no timeout. This will also prevent aborted requests and + // fakeServerWithClock from triggering unnecessary responses. + if ( + self.readyState === FakeXMLHttpRequest.UNSENT || + self.readyState === FakeXMLHttpRequest.DONE + ) { + clearInterval(clearIntervalId); + } else if ( + typeof self.timeout === "number" && + self.timeout > 0 + ) { + if (Date.now() >= initiatedTime + self.timeout) { + self.triggerTimeout(); + clearInterval(clearIntervalId); + } + } + }, 1); + } + + this.dispatchEvent( + new sinonEvent.Event("loadstart", false, false, this) + ); + }, + + abort: function abort() { + this.aborted = true; + requestErrorSteps(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + }, + + error: function() { + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + triggerTimeout: function triggerTimeout() { + if (sinonXhr.supportsTimeout) { + this.timedOut = true; + requestErrorSteps(this); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + // eslint-disable-next-line no-param-reassign + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var responseHeaders = this.responseHeaders; + var headers = Object.keys(responseHeaders) + .filter(excludeSetCookie2Header) + .reduce(function(prev, header) { + var value = responseHeaders[header]; + + return `${prev}${header}: ${value}\r\n`; + }, ""); + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body, this.responseType); + var contentType = + this.overriddenMimeType || + this.getResponseHeader("Content-Type"); + + var isTextResponse = + this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring( + index, + index + chunkSize + ); + } + index += chunkSize; + } while (index < body.length); + } + + this.response = convertResponseBody( + this.responseType, + contentType, + body + ); + if (isTextResponse) { + this.responseText = this.response; + } + + if (this.responseType === "document") { + this.responseXML = this.response; + } else if ( + this.responseType === "" && + isXmlContentType(contentType) + ) { + this.responseXML = FakeXMLHttpRequest.parseXML( + this.responseText + ); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.responseURL = this.url; + + this.setStatus(status); + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this.upload + ) + ); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this + ) + ); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent( + new sinonEvent.CustomEvent("error", { detail: error }) + ); + } + }, + + overrideMimeType: function overrideMimeType(type) { + if (this.readyState >= FakeXMLHttpRequest.LOADING) { + throw new Error("INVALID_STATE_ERR"); + } + this.overriddenMimeType = type; + } + }); + + var states = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }; + + extend(FakeXMLHttpRequest, states); + extend(FakeXMLHttpRequest.prototype, states); + + function useFakeXMLHttpRequest() { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = function ActiveXObject(objId) { + if ( + objId === "Microsoft.XMLHTTP" || + /^Msxml2\.XMLHTTP/i.test(objId) + ) { + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + } + + return { + xhr: sinonXhr, + FakeXMLHttpRequest: FakeXMLHttpRequest, + useFakeXMLHttpRequest: useFakeXMLHttpRequest + }; +} + +module.exports = extend(fakeXMLHttpRequestFor(globalObject), { + fakeXMLHttpRequestFor: fakeXMLHttpRequestFor +}); + +},{"../configure-logger":1,"../event":5,"./blob":10,"@sinonjs/commons":19,"@sinonjs/text-encoding":32,"just-extend":36}],12:[function(require,module,exports){ +"use strict"; + +module.exports = { + fakeServer: require("./fake-server"), + fakeServerWithClock: require("./fake-server/fake-server-with-clock"), + fakeXhr: require("./fake-xhr") +}; + +},{"./fake-server":8,"./fake-server/fake-server-with-clock":7,"./fake-xhr":11}],13:[function(require,module,exports){ +"use strict"; + +var every = require("./prototypes/array").every; + +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } + + return callMap[spy.id] < spy.callCount; +} + +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; + + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } + + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } + + return false; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ + +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; + + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} + +module.exports = calledInOrder; + +},{"./prototypes/array":21}],14:[function(require,module,exports){ +"use strict"; + +var functionName = require("./function-name"); + +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + return ( + (value.constructor && value.constructor.name) || + // The next branch is for IE11 support only: + // Because the name property is not set on the prototype + // of the Function object, we finally try to grab the + // name from its definition. This will never be reached + // in node, so we are not able to test this properly. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + (typeof value.constructor === "function" && + /* istanbul ignore next */ + functionName(value.constructor)) || + null + ); +} + +module.exports = className; + +},{"./function-name":17}],15:[function(require,module,exports){ +/* eslint-disable no-console */ +"use strict"; + +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function(func, msg) { + var wrapped = function() { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; + } + return wrapped; +}; + +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function(packageName, funcName) { + return ( + packageName + + "." + + funcName + + " is deprecated and will be removed from the public API in a future version of " + + packageName + + "." + ); +}; + +/** + * Prints a warning on the console, when it exists + * + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function(msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); + } +}; + +},{}],16:[function(require,module,exports){ +"use strict"; + +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function() { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; + } + + return pass; +}; + +},{}],17:[function(require,module,exports){ +"use strict"; + +/** + * Returns a display name for a function + * + * @param {Function} func + * @returns {string} + */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; + +},{}],18:[function(require,module,exports){ +"use strict"; + +/** + * A reference to the global object + * + * @type {object} globalObject + */ +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} + +module.exports = globalObject; + +},{}],19:[function(require,module,exports){ +"use strict"; + +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string") +}; + +},{"./called-in-order":13,"./class-name":14,"./deprecated":15,"./every":16,"./function-name":17,"./global":18,"./order-by-first-call":20,"./prototypes":24,"./type-of":29,"./value-to-string":30}],20:[function(require,module,exports){ +"use strict"; + +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; + +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ + +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} + +module.exports = orderByFirstCall; + +},{"./prototypes/array":21}],21:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Array.prototype); + +},{"./copy-prototype":22}],22:[function(require,module,exports){ +"use strict"; + +var call = Function.call; + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function(result, name) { + // ignore size because it throws from Map + if ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof prototype[name] === "function" + ) { + result[name] = call.bind(prototype[name]); + } + + return result; + }, Object.create(null)); +}; + +},{}],23:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Function.prototype); + +},{"./copy-prototype":22}],24:[function(require,module,exports){ +"use strict"; + +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string") +}; + +},{"./array":21,"./function":23,"./map":25,"./object":26,"./set":27,"./string":28}],25:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Map.prototype); + +},{"./copy-prototype":22}],26:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Object.prototype); + +},{"./copy-prototype":22}],27:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Set.prototype); + +},{"./copy-prototype":22}],28:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(String.prototype); + +},{"./copy-prototype":22}],29:[function(require,module,exports){ +"use strict"; + +var type = require("type-detect"); + +/** + * Returns the lower-case result of running type from type-detect on the value + * + * @param {*} value + * @returns {string} + */ +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; + +},{"type-detect":38}],30:[function(require,module,exports){ +"use strict"; + +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); + } + return String(value); +} + +module.exports = valueToString; + +},{}],31:[function(require,module,exports){ +"use strict"; + +const globalObject = require("@sinonjs/commons").global; + +/** + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods + * + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id + */ + +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ + +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ + +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ + +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ + +/** + * @typedef Performance + * @property {function(): number} now + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ + +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ + +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ + +/* eslint-disable complexity */ + +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; + + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } + + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ + + _global.clearTimeout(timeoutResult); + + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; + + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } + + return isFinite(num); + } + + let isNearInfiniteLimit = false; + + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } + } + + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; + } + + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } + + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); + } + + ms += parsed * Math.pow(60, l - i - 1); + } + + return ms * 1000; + } + + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; + + return Math.floor(positiveRemainder); + } + + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); + + if (!job.error) { + return infiniteLoopError; + } + + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); + + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); + } + + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; + } + + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; + } + + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); + + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; + + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } + + return infiniteLoopError; + } + + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + return target; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } + + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); + + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); + } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); + } + } + + if (isNearInfiniteLimit) { + timer.error = new Error(); + } + + timer.type = timer.immediate ? "Immediate" : "Timeout"; + + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } + + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } + + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; + } + + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; + } + + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + ref: function () { + return res; + }, + unref: function () { + return res; + }, + refresh: function () { + clearTimeout(timer.id); + const args = [timer.func, timer.delay].concat(timer.args); + return setTimeout.apply(null, args); + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } + + return timer.id; + } + + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); + } + } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; + } + return `clear${ttype}`; + } + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; + } + return `set${ttype}`; + } + + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); + + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = {}; + } + + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; + } + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); + } + } + } + + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } + } + } + } + + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; + } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); + } + + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); + } + + target[method].clock = clock; + } + + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); + } + + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; + } + + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; + } + + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; + } + + if (performancePresent) { + timers.performance = _global.performance; + } + + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); + } + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; + } + return [secsSinceStart, remainderInNanos]; + } + + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } + + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; + + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[ + utilPromisify.custom + ] = function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, + }); + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[ + utilPromisify.custom + ] = function promisifiedSetImmediate(arg) { + return new _global.Promise(function setImmediateExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + }); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + args: [clock.now + getTimeToNextFrame()], + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys(clock.timers) + .length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = function FakeTimersNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + }; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; + +},{"@sinonjs/commons":19,"util":41}],32:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; + +},{"./lib/encoding.js":34}],33:[function(require,module,exports){ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{}],34:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // If we're in node require encoding-indexes and attach it to the global. + if (typeof module !== "undefined" && module.exports && + !global["encoding-indexes"]) { + global["encoding-indexes"] = + require("./encoding-indexes.js")["encoding-indexes"]; + } + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (!global['TextEncoder']) + global['TextEncoder'] = TextEncoder; + if (!global['TextDecoder']) + global['TextDecoder'] = TextDecoder; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: global['TextEncoder'], + TextDecoder: global['TextDecoder'], + EncodingIndexes: global["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{"./encoding-indexes.js":33}],35:[function(require,module,exports){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +},{}],36:[function(require,module,exports){ +module.exports = extend; + +/* + var obj = {a: 3, b: 5}; + extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 4, b: 5, c: 8} + + var obj = {a: 3, b: 5}; + extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 3, b: 5} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3]} + + extend({a: 4, b: 5}); // {a: 4, b: 5} + extend({a: 4, b: 5}, 3); {a: 4, b: 5} + extend({a: 4, b: 5}, true); {a: 4, b: 5} + extend('hello', {a: 4, b: 5}); // throws + extend(3, {a: 4, b: 5}); // throws +*/ + +function extend(/* [deep], obj1, obj2, [objn] */) { + var args = [].slice.call(arguments); + var deep = false; + if (typeof args[0] == 'boolean') { + deep = args.shift(); + } + var result = args[0]; + if (isUnextendable(result)) { + throw new Error('extendee must be an object'); + } + var extenders = args.slice(1); + var len = extenders.length; + for (var i = 0; i < len; i++) { + var extender = extenders[i]; + for (var key in extender) { + if (Object.prototype.hasOwnProperty.call(extender, key)) { + var value = extender[key]; + if (deep && isCloneable(value)) { + var base = Array.isArray(value) ? [] : {}; + result[key] = extend( + true, + Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key]) + ? result[key] + : base, + value + ); + } else { + result[key] = value; + } + } + } + } + return result; +} + +function isCloneable(obj) { + return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]'; +} + +function isUnextendable(val) { + return !val || (typeof val != 'object' && typeof val != 'function'); +} + +},{}],37:[function(require,module,exports){ +var isarray = require('isarray') + +/** + * Expose `pathToRegexp`. + */ +module.exports = pathToRegexp +module.exports.parse = parse +module.exports.compile = compile +module.exports.tokensToFunction = tokensToFunction +module.exports.tokensToRegExp = tokensToRegExp + +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g') + +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = [] + var key = 0 + var index = 0 + var path = '' + var defaultDelimiter = options && options.delimiter || '/' + var res + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0] + var escaped = res[1] + var offset = res.index + path += str.slice(index, offset) + index = offset + m.length + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1] + continue + } + + var next = str[index] + var prefix = res[2] + var name = res[3] + var capture = res[4] + var group = res[5] + var modifier = res[6] + var asterisk = res[7] + + // Push the current path onto the tokens. + if (path) { + tokens.push(path) + path = '' + } + + var partial = prefix != null && next != null && next !== prefix + var repeat = modifier === '+' || modifier === '*' + var optional = modifier === '?' || modifier === '*' + var delimiter = res[2] || defaultDelimiter + var pattern = capture || group + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }) + } + + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index) + } + + // If the path exists, push it onto the end. + if (path) { + tokens.push(path) + } + + return tokens +} + +/** + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} + */ +function compile (str, options) { + return tokensToFunction(parse(str, options), options) +} + +/** + * Prettier encoding of URI path segments. + * + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. + * + * @param {string} + * @return {string} + */ +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens, options) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length) + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) + } + } + + return function (obj, opts) { + var path = '' + var data = obj || {} + var options = opts || {} + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + path += token + + continue + } + + var value = data[token.name] + var segment + + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix + } + + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } + + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') + } + + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } + + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } + + path += (j === 0 ? token.prefix : token.delimiter) + segment + } + + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment + } + + return path + } +} + +/** + * Escape a regular expression string. + * + * @param {string} str + * @return {string} + */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys + return re +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options && options.sensitive ? '' : 'i' +} + +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g) + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }) + } + } + + return attachKeys(path, keys) +} + +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = [] + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source) + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) + + return attachKeys(regexp, keys) +} + +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} + +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + var strict = options.strict + var end = options.end !== false + var route = '' + + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + route += escapeString(token) + } else { + var prefix = escapeString(token.prefix) + var capture = '(?:' + token.pattern + ')' + + keys.push(token) + + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*' + } + + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?' + } else { + capture = prefix + '(' + capture + ')?' + } + } else { + capture = prefix + '(' + capture + ')' + } + + route += capture + } + } + + var delimiter = escapeString(options.delimiter || '/') + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' + } + + if (end) { + route += '$' + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } + + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } + + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} + +},{"isarray":35}],38:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.typeDetect = factory()); +}(this, (function () { 'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} + +return typeDetect; + +}))); + +},{}],39:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],40:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],41:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +},{"./support/isBuffer":40,"inherits":39}]},{},[12])(12) +}); diff --git a/build/node_modules/nise/package.json b/build/node_modules/nise/package.json new file mode 100644 index 00000000..8ba541f3 --- /dev/null +++ b/build/node_modules/nise/package.json @@ -0,0 +1,109 @@ +{ + "_from": "nise@^5.1.1", + "_id": "nise@5.1.1", + "_inBundle": false, + "_integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "_location": "/nise", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "nise@^5.1.1", + "name": "nise", + "escapedName": "nise", + "rawSpec": "^5.1.1", + "saveSpec": null, + "fetchSpec": "^5.1.1" + }, + "_requiredBy": [ + "/sinon" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/nise/-/nise-5.1.1.tgz", + "_shasum": "ac4237e0d785ecfcb83e20f389185975da5c31f3", + "_spec": "nise@^5.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", + "author": "", + "browser": { + "jsdom": false, + "jsdom-global": false + }, + "bugs": { + "url": "https://github.com/sinonjs/nise/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + }, + "deprecated": false, + "description": "Fake XHR and server", + "devDependencies": { + "@sinonjs/eslint-config": "^4.0.5", + "@sinonjs/referee": "^9.1.1", + "browserify": "^16.2.3", + "husky": "^4.2.1", + "jsdom": "^16.2.0", + "jsdom-global": "3.0.2", + "lint-staged": "^10.5.3", + "mocha": "^7.0.1", + "mochify": "^6.6.0", + "nyc": "^15.0.0", + "prettier": "^1.19.1", + "proxyquire": "^2.1.3", + "proxyquire-universal": "^2.1.0", + "proxyquireify": "^3.2.1", + "sinon": ">=9" + }, + "files": [ + "nise.js", + "lib/**/*.js" + ], + "homepage": "https://github.com/sinonjs/nise#readme", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "keywords": [ + "test", + "testing", + "fake", + "mock", + "xhr", + "server" + ], + "license": "BSD-3-Clause", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint --quiet" + }, + "main": "lib/index.js", + "module": "nise.js", + "name": "nise", + "nyc": { + "exclude": [ + "nise.js", + "coverage/**", + "**/*.test.js" + ] + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/sinonjs/nise.git" + }, + "scripts": { + "bundle": "browserify --no-detect-globals -s nise -o nise.js lib/index.js", + "lint": "eslint .", + "prepare": "npm run bundle", + "prepublishOnly": "mkdocs gh-deploy -r upstream || mkdocs gh-deploy -r origin", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "test": "mocha lib/**/*.test.js", + "test:coverage": "nyc --reporter=lcov --reporter=text --all npm test -- --reporter dot", + "test:headless": "mochify --https-server --plugin [ proxyquire-universal ] --no-detect-globals test/global-hack.js lib/**/*.test.js" + }, + "version": "5.1.1" +} diff --git a/build/node_modules/normalize-path/LICENSE b/build/node_modules/normalize-path/LICENSE new file mode 100644 index 00000000..d32ab442 --- /dev/null +++ b/build/node_modules/normalize-path/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/normalize-path/README.md b/build/node_modules/normalize-path/README.md new file mode 100644 index 00000000..726d4d68 --- /dev/null +++ b/build/node_modules/normalize-path/README.md @@ -0,0 +1,127 @@ +# normalize-path [![NPM version](https://img.shields.io/npm/v/normalize-path.svg?style=flat)](https://www.npmjs.com/package/normalize-path) [![NPM monthly downloads](https://img.shields.io/npm/dm/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![NPM total downloads](https://img.shields.io/npm/dt/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/normalize-path.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/normalize-path) + +> Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save normalize-path +``` + +## Usage + +```js +const normalize = require('normalize-path'); + +console.log(normalize('\\foo\\bar\\baz\\')); +//=> '/foo/bar/baz' +``` + +**win32 namespaces** + +```js +console.log(normalize('\\\\?\\UNC\\Server01\\user\\docs\\Letter.txt')); +//=> '//?/UNC/Server01/user/docs/Letter.txt' + +console.log(normalize('\\\\.\\CdRomX')); +//=> '//./CdRomX' +``` + +**Consecutive slashes** + +Condenses multiple consecutive forward slashes (except for leading slashes in win32 namespaces) to a single slash. + +```js +console.log(normalize('.//foo//bar///////baz/')); +//=> './foo/bar/baz' +``` + +### Trailing slashes + +By default trailing slashes are removed. Pass `false` as the last argument to disable this behavior and _**keep** trailing slashes_: + +```js +console.log(normalize('foo\\bar\\baz\\', false)); //=> 'foo/bar/baz/' +console.log(normalize('./foo/bar/baz/', false)); //=> './foo/bar/baz/' +``` + +## Release history + +### v3.0 + +No breaking changes in this release. + +* a check was added to ensure that [win32 namespaces](https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces) are handled properly by win32 `path.parse()` after a path has been normalized by this library. +* a minor optimization was made to simplify how the trailing separator was handled + +## About + +
            +Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
            + +
            +Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
            + +
            +Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
            + +### Related projects + +Other useful path-related libraries: + +* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path "Return true if a file path contains the given path.") +* [is-absolute](https://www.npmjs.com/package/is-absolute): Returns true if a file path is absolute. Does not rely on the path module… [more](https://github.com/jonschlinkert/is-absolute) | [homepage](https://github.com/jonschlinkert/is-absolute "Returns true if a file path is absolute. Does not rely on the path module and can be used as a polyfill for node.js native `path.isAbolute`.") +* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative "Returns `true` if the path appears to be relative.") +* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Pollyfill for node.js `path.parse`, parses a filepath into an object. | [homepage](https://github.com/jonschlinkert/parse-filepath "Pollyfill for node.js `path.parse`, parses a filepath into an object.") +* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with "Return `true` if a file path ends with the given string/suffix.") +* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify "Convert Windows file paths to unix paths.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 35 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [phated](https://github.com/phated) | + +### Author + +**Jon Schlinkert** + +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 19, 2018._ \ No newline at end of file diff --git a/build/node_modules/normalize-path/index.js b/build/node_modules/normalize-path/index.js new file mode 100644 index 00000000..6fac553a --- /dev/null +++ b/build/node_modules/normalize-path/index.js @@ -0,0 +1,35 @@ +/*! + * normalize-path + * + * Copyright (c) 2014-2018, Jon Schlinkert. + * Released under the MIT License. + */ + +module.exports = function(path, stripTrailing) { + if (typeof path !== 'string') { + throw new TypeError('expected path to be a string'); + } + + if (path === '\\' || path === '/') return '/'; + + var len = path.length; + if (len <= 1) return path; + + // ensure that win32 namespaces has two leading slashes, so that the path is + // handled properly by the win32 version of path.parse() after being normalized + // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces + var prefix = ''; + if (len > 4 && path[3] === '\\') { + var ch = path[2]; + if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { + path = path.slice(2); + prefix = '//'; + } + } + + var segs = path.split(/[/\\]+/); + if (stripTrailing !== false && segs[segs.length - 1] === '') { + segs.pop(); + } + return prefix + segs.join('/'); +}; diff --git a/build/node_modules/normalize-path/package.json b/build/node_modules/normalize-path/package.json new file mode 100644 index 00000000..de50f887 --- /dev/null +++ b/build/node_modules/normalize-path/package.json @@ -0,0 +1,115 @@ +{ + "_from": "normalize-path@~3.0.0", + "_id": "normalize-path@3.0.0", + "_inBundle": false, + "_integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "_location": "/normalize-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "normalize-path@~3.0.0", + "name": "normalize-path", + "escapedName": "normalize-path", + "rawSpec": "~3.0.0", + "saveSpec": null, + "fetchSpec": "~3.0.0" + }, + "_requiredBy": [ + "/anymatch", + "/chokidar" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/normalize-path/-/normalize-path-3.0.0.tgz", + "_shasum": "0dcd69ff23a1c9b11fd0978316644a0388216a65", + "_spec": "normalize-path@~3.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chokidar", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/normalize-path/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Blaine Bublitz", + "url": "https://twitter.com/BlaineBublitz" + }, + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + } + ], + "deprecated": false, + "description": "Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled.", + "devDependencies": { + "gulp-format-md": "^1.0.0", + "minimist": "^1.2.0", + "mocha": "^3.5.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/jonschlinkert/normalize-path", + "keywords": [ + "absolute", + "backslash", + "delimiter", + "file", + "file-path", + "filepath", + "fix", + "forward", + "fp", + "fs", + "normalize", + "path", + "relative", + "separator", + "slash", + "slashes", + "trailing", + "unix", + "urix" + ], + "license": "MIT", + "main": "index.js", + "name": "normalize-path", + "repository": { + "type": "git", + "url": "git+https://github.com/jonschlinkert/normalize-path.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "description": "Other useful path-related libraries:", + "list": [ + "contains-path", + "is-absolute", + "is-relative", + "parse-filepath", + "path-ends-with", + "path-ends-with", + "unixify" + ] + }, + "lint": { + "reflinks": true + } + }, + "version": "3.0.0" +} diff --git a/build/node_modules/object-inspect/.eslintrc b/build/node_modules/object-inspect/.eslintrc index 8a2d30ec..21f90392 100644 --- a/build/node_modules/object-inspect/.eslintrc +++ b/build/node_modules/object-inspect/.eslintrc @@ -12,25 +12,14 @@ "max-statements-per-line": [2, { "max": 2 }], "no-magic-numbers": 0, "no-param-reassign": 1, - "operator-linebreak": [2, "before"], "strict": 0, // TODO }, - "globals": { - "BigInt": false, - "WeakSet": false, - "WeakMap": false, - }, "overrides": [ { "files": ["test/**", "test-*", "example/**"], + "extends": "@ljharb/eslint-config/tests", "rules": { - "array-bracket-newline": 0, "id-length": 0, - "max-params": 0, - "max-statements": 0, - "max-statements-per-line": 0, - "object-curly-newline": 0, - "sort-keys": 0, }, }, { diff --git a/build/node_modules/object-inspect/CHANGELOG.md b/build/node_modules/object-inspect/CHANGELOG.md new file mode 100644 index 00000000..519f7005 --- /dev/null +++ b/build/node_modules/object-inspect/CHANGELOG.md @@ -0,0 +1,342 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.12.0](https://github.com/inspect-js/object-inspect/compare/v1.11.1...v1.12.0) - 2021-12-18 + +### Commits + +- [New] add `numericSeparator` boolean option [`2d2d537`](https://github.com/inspect-js/object-inspect/commit/2d2d537f5359a4300ce1c10241369f8024f89e11) +- [Robustness] cache more prototype methods [`191533d`](https://github.com/inspect-js/object-inspect/commit/191533da8aec98a05eadd73a5a6e979c9c8653e8) +- [New] ensure an Error’s `cause` is displayed [`53bc2ce`](https://github.com/inspect-js/object-inspect/commit/53bc2cee4e5a9cc4986f3cafa22c0685f340715e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`bc164b6`](https://github.com/inspect-js/object-inspect/commit/bc164b6e2e7d36b263970f16f54de63048b84a36) +- [Robustness] cache `RegExp.prototype.test` [`a314ab8`](https://github.com/inspect-js/object-inspect/commit/a314ab8271b905cbabc594c82914d2485a8daf12) +- [meta] fix auto-changelog settings [`5ed0983`](https://github.com/inspect-js/object-inspect/commit/5ed0983be72f73e32e2559997517a95525c7e20d) + +## [v1.11.1](https://github.com/inspect-js/object-inspect/compare/v1.11.0...v1.11.1) - 2021-12-05 + +### Commits + +- [meta] add `auto-changelog` [`7dbdd22`](https://github.com/inspect-js/object-inspect/commit/7dbdd228401d6025d8b7391476d88aee9ea9bbdf) +- [actions] reuse common workflows [`c8823bc`](https://github.com/inspect-js/object-inspect/commit/c8823bc0a8790729680709d45fb6e652432e91aa) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`7532b12`](https://github.com/inspect-js/object-inspect/commit/7532b120598307497b712890f75af8056f6d37a6) +- [Refactor] use `has-tostringtag` to behave correctly in the presence of symbol shams [`94abb5d`](https://github.com/inspect-js/object-inspect/commit/94abb5d4e745bf33253942dea86b3e538d2ff6c6) +- [actions] update codecov uploader [`5ed5102`](https://github.com/inspect-js/object-inspect/commit/5ed51025267a00e53b1341357315490ac4eb0874) +- [Dev Deps] update `eslint`, `tape` [`37b2ad2`](https://github.com/inspect-js/object-inspect/commit/37b2ad26c08d94bfd01d5d07069a0b28ef4e2ad7) +- [meta] add `sideEffects` flag [`d341f90`](https://github.com/inspect-js/object-inspect/commit/d341f905ef8bffa6a694cda6ddc5ba343532cd4f) + +## [v1.11.0](https://github.com/inspect-js/object-inspect/compare/v1.10.3...v1.11.0) - 2021-07-12 + +### Commits + +- [New] `customInspect`: add `symbol` option, to mimic modern util.inspect behavior [`e973a6e`](https://github.com/inspect-js/object-inspect/commit/e973a6e21f8140c5837cf25e9d89bdde88dc3120) +- [Dev Deps] update `eslint` [`05f1cb3`](https://github.com/inspect-js/object-inspect/commit/05f1cb3cbcfe1f238e8b51cf9bc294305b7ed793) + +## [v1.10.3](https://github.com/inspect-js/object-inspect/compare/v1.10.2...v1.10.3) - 2021-05-07 + +### Commits + +- [Fix] handle core-js Symbol shams [`4acfc2c`](https://github.com/inspect-js/object-inspect/commit/4acfc2c4b503498759120eb517abad6d51c9c5d6) +- [readme] update badges [`95c323a`](https://github.com/inspect-js/object-inspect/commit/95c323ad909d6cbabb95dd6015c190ba6db9c1f2) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud` [`cb38f48`](https://github.com/inspect-js/object-inspect/commit/cb38f485de6ec7a95109b5a9bbd0a1deba2f6611) + +## [v1.10.2](https://github.com/inspect-js/object-inspect/compare/v1.10.1...v1.10.2) - 2021-04-17 + +### Commits + +- [Fix] use a robust check for a boxed Symbol [`87f12d6`](https://github.com/inspect-js/object-inspect/commit/87f12d6e69ce530be04659c81a4cd502943acac5) + +## [v1.10.1](https://github.com/inspect-js/object-inspect/compare/v1.10.0...v1.10.1) - 2021-04-17 + +### Commits + +- [Fix] use a robust check for a boxed bigint [`d5ca829`](https://github.com/inspect-js/object-inspect/commit/d5ca8298b6d2e5c7b9334a5b21b96ed95d225c91) + +## [v1.10.0](https://github.com/inspect-js/object-inspect/compare/v1.9.0...v1.10.0) - 2021-04-17 + +### Commits + +- [Tests] increase coverage [`d8abb8a`](https://github.com/inspect-js/object-inspect/commit/d8abb8a62c2f084919df994a433b346e0d87a227) +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`4bfec2e`](https://github.com/inspect-js/object-inspect/commit/4bfec2e30aaef6ddef6cbb1448306f9f8b9520b7) +- [New] respect `Symbol.toStringTag` on objects [`799b58f`](https://github.com/inspect-js/object-inspect/commit/799b58f536a45e4484633a8e9daeb0330835f175) +- [Fix] do not allow Symbol.toStringTag to masquerade as builtins [`d6c5b37`](https://github.com/inspect-js/object-inspect/commit/d6c5b37d7e94427796b82432fb0c8964f033a6ab) +- [New] add `WeakRef` support [`b6d898e`](https://github.com/inspect-js/object-inspect/commit/b6d898ee21868c780a7ee66b28532b5b34ed7f09) +- [meta] do not publish github action workflow files [`918cdfc`](https://github.com/inspect-js/object-inspect/commit/918cdfc4b6fe83f559ff6ef04fe66201e3ff5cbd) +- [meta] create `FUNDING.yml` [`0bb5fc5`](https://github.com/inspect-js/object-inspect/commit/0bb5fc516dbcd2cd728bd89cee0b580acc5ce301) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`22c8dc0`](https://github.com/inspect-js/object-inspect/commit/22c8dc0cac113d70f4781e49a950070923a671be) +- [meta] use `prepublishOnly` script for npm 7+ [`e52ee09`](https://github.com/inspect-js/object-inspect/commit/e52ee09e8050b8dbac94ef57f786675567728223) +- [Dev Deps] update `eslint` [`7c4e6fd`](https://github.com/inspect-js/object-inspect/commit/7c4e6fdedcd27cc980e13c9ad834d05a96f3d40c) + +## [v1.9.0](https://github.com/inspect-js/object-inspect/compare/v1.8.0...v1.9.0) - 2020-11-30 + +### Commits + +- [Tests] migrate tests to Github Actions [`d262251`](https://github.com/inspect-js/object-inspect/commit/d262251e13e16d3490b5473672f6b6d6ff86675d) +- [New] add enumerable own Symbols to plain object output [`ee60c03`](https://github.com/inspect-js/object-inspect/commit/ee60c033088cff9d33baa71e59a362a541b48284) +- [Tests] add passing tests [`01ac3e4`](https://github.com/inspect-js/object-inspect/commit/01ac3e4b5a30f97875a63dc9b1416b3bd626afc9) +- [actions] add "Require Allow Edits" action [`c2d7746`](https://github.com/inspect-js/object-inspect/commit/c2d774680cde4ca4af332d84d4121b26f798ba9e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `core-js` [`70058de`](https://github.com/inspect-js/object-inspect/commit/70058de1579fc54d1d15ed6c2dbe246637ce70ff) +- [Fix] hex characters in strings should be uppercased, to match node `assert` [`6ab8faa`](https://github.com/inspect-js/object-inspect/commit/6ab8faaa0abc08fe7a8e2afd8b39c6f1f0e00113) +- [Tests] run `nyc` on all tests [`4c47372`](https://github.com/inspect-js/object-inspect/commit/4c473727879ddc8e28b599202551ddaaf07b6210) +- [Tests] node 0.8 has an unpredictable property order; fix `groups` test by removing property [`f192069`](https://github.com/inspect-js/object-inspect/commit/f192069a978a3b60e6f0e0d45ac7df260ab9a778) +- [New] add enumerable properties to Function inspect result, per node’s `assert` [`fd38e1b`](https://github.com/inspect-js/object-inspect/commit/fd38e1bc3e2a1dc82091ce3e021917462eee64fc) +- [Tests] fix tests for node < 10, due to regex match `groups` [`2ac6462`](https://github.com/inspect-js/object-inspect/commit/2ac6462cc4f72eaa0b63a8cfee9aabe3008b2330) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config` [`44b59e2`](https://github.com/inspect-js/object-inspect/commit/44b59e2676a7f825ef530dfd19dafb599e3b9456) +- [Robustness] cache `Symbol.prototype.toString` [`f3c2074`](https://github.com/inspect-js/object-inspect/commit/f3c2074d8f32faf8292587c07c9678ea931703dd) +- [Dev Deps] update `eslint` [`9411294`](https://github.com/inspect-js/object-inspect/commit/94112944b9245e3302e25453277876402d207e7f) +- [meta] `require-allow-edits` no longer requires an explicit github token [`36c0220`](https://github.com/inspect-js/object-inspect/commit/36c02205de3c2b0e84d53777c5c9fd54a36c48ab) +- [actions] update rebase checkout action to v2 [`55a39a6`](https://github.com/inspect-js/object-inspect/commit/55a39a64e944f19c6a7d8efddf3df27700f20d14) +- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`f59fd3c`](https://github.com/inspect-js/object-inspect/commit/f59fd3cf406c3a7c7ece140904a80bbc6bacfcca) +- [Dev Deps] update `eslint` [`a492bec`](https://github.com/inspect-js/object-inspect/commit/a492becec644b0155c9c4bc1caf6f9fac11fb2c7) + +## [v1.8.0](https://github.com/inspect-js/object-inspect/compare/v1.7.0...v1.8.0) - 2020-06-18 + +### Fixed + +- [New] add `indent` option [`#27`](https://github.com/inspect-js/object-inspect/issues/27) + +### Commits + +- [Tests] add codecov [`4324cbb`](https://github.com/inspect-js/object-inspect/commit/4324cbb1a2bd7710822a4151ff373570db22453e) +- [New] add `maxStringLength` option [`b3995cb`](https://github.com/inspect-js/object-inspect/commit/b3995cb71e15b5ee127a3094c43994df9d973502) +- [New] add `customInspect` option, to disable custom inspect methods [`28b9179`](https://github.com/inspect-js/object-inspect/commit/28b9179ee802bb3b90810100c11637db90c2fb6d) +- [Tests] add Date and RegExp tests [`3b28eca`](https://github.com/inspect-js/object-inspect/commit/3b28eca57b0367aeadffac604ea09e8bdae7d97b) +- [actions] add automatic rebasing / merge commit blocking [`0d9c6c0`](https://github.com/inspect-js/object-inspect/commit/0d9c6c044e83475ff0bfffb9d35b149834c83a2e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `tape`; add `aud` [`7c204f2`](https://github.com/inspect-js/object-inspect/commit/7c204f22b9e41bc97147f4d32d4cb045b17769a6) +- [readme] fix repo URLs, remove testling [`34ca9a0`](https://github.com/inspect-js/object-inspect/commit/34ca9a0dabfe75bd311f806a326fadad029909a3) +- [Fix] when truncating a deep array, note it as `[Array]` instead of just `[Object]` [`f74c82d`](https://github.com/inspect-js/object-inspect/commit/f74c82dd0b35386445510deb250f34c41be3ec0e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`1a8a5ea`](https://github.com/inspect-js/object-inspect/commit/1a8a5ea069ea2bee89d77caedad83ffa23d35711) +- [Fix] do not be fooled by a function’s own `toString` method [`7cb5c65`](https://github.com/inspect-js/object-inspect/commit/7cb5c657a976f94715c19c10556a30f15bb7d5d7) +- [patch] indicate explicitly that anon functions are anonymous, to match node [`81ebdd4`](https://github.com/inspect-js/object-inspect/commit/81ebdd4215005144074bbdff3f6bafa01407910a) +- [Dev Deps] loosen the `core-js` dep [`e7472e8`](https://github.com/inspect-js/object-inspect/commit/e7472e8e242117670560bd995830c2a4d12080f5) +- [Dev Deps] update `tape` [`699827e`](https://github.com/inspect-js/object-inspect/commit/699827e6b37258b5203c33c78c009bf4b0e6a66d) +- [meta] add `safe-publish-latest` [`c5d2868`](https://github.com/inspect-js/object-inspect/commit/c5d2868d6eb33c472f37a20f89ceef2787046088) +- [Dev Deps] update `@ljharb/eslint-config` [`9199501`](https://github.com/inspect-js/object-inspect/commit/919950195d486114ccebacbdf9d74d7f382693b0) + +## [v1.7.0](https://github.com/inspect-js/object-inspect/compare/v1.6.0...v1.7.0) - 2019-11-10 + +### Commits + +- [Tests] use shared travis-ci configs [`19899ed`](https://github.com/inspect-js/object-inspect/commit/19899edbf31f4f8809acf745ce34ad1ce1bfa63b) +- [Tests] add linting [`a00f057`](https://github.com/inspect-js/object-inspect/commit/a00f057d917f66ea26dd37769c6b810ec4af97e8) +- [Tests] lint last file [`2698047`](https://github.com/inspect-js/object-inspect/commit/2698047b58af1e2e88061598ef37a75f228dddf6) +- [Tests] up to `node` `v12.7`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`589e87a`](https://github.com/inspect-js/object-inspect/commit/589e87a99cadcff4b600e6a303418e9d922836e8) +- [New] add support for `WeakMap` and `WeakSet` [`3ddb3e4`](https://github.com/inspect-js/object-inspect/commit/3ddb3e4e0c8287130c61a12e0ed9c104b1549306) +- [meta] clean up license so github can detect it properly [`27527bb`](https://github.com/inspect-js/object-inspect/commit/27527bb801520c9610c68cc3b55d6f20a2bee56d) +- [Tests] cover `util.inspect.custom` [`36d47b9`](https://github.com/inspect-js/object-inspect/commit/36d47b9c59056a57ef2f1491602c726359561800) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `tape` [`b614eaa`](https://github.com/inspect-js/object-inspect/commit/b614eaac901da0e5c69151f534671f990a94cace) +- [Tests] fix coverage thresholds [`7b7b176`](https://github.com/inspect-js/object-inspect/commit/7b7b176e15f8bd6e8b2f261ff5a493c2fe78d9c2) +- [Tests] bigint tests now can run on unflagged node [`063af31`](https://github.com/inspect-js/object-inspect/commit/063af31ce9cd13c202e3b67c07ba06dc9b7c0f81) +- [Refactor] add early bailout to `isMap` and `isSet` checks [`fc51047`](https://github.com/inspect-js/object-inspect/commit/fc5104714a3671d37e225813db79470d6335683b) +- [meta] add `funding` field [`7f9953a`](https://github.com/inspect-js/object-inspect/commit/7f9953a113eec7b064a6393cf9f90ba15f1d131b) +- [Tests] Fix invalid strict-mode syntax with hexadecimal [`a8b5425`](https://github.com/inspect-js/object-inspect/commit/a8b542503b4af1599a275209a1a99f5fdedb1ead) +- [Dev Deps] update `@ljharb/eslint-config` [`98df157`](https://github.com/inspect-js/object-inspect/commit/98df1577314d9188a3fc3f17fdcf2fba697ae1bd) +- add copyright to LICENSE [`bb69fd0`](https://github.com/inspect-js/object-inspect/commit/bb69fd017a062d299e44da1f9b2c7dcd67f621e6) +- [Tests] use `npx aud` in `posttest` [`4838353`](https://github.com/inspect-js/object-inspect/commit/4838353593974cf7f905b9ef04c03c094f0cdbe2) +- [Tests] move `0.6` to allowed failures, because it won‘t build on travis [`1bff32a`](https://github.com/inspect-js/object-inspect/commit/1bff32aa52e8aea687f0856b28ba754b3e43ebf7) + +## [v1.6.0](https://github.com/inspect-js/object-inspect/compare/v1.5.0...v1.6.0) - 2018-05-02 + +### Commits + +- [New] add support for boxed BigInt primitives [`356c66a`](https://github.com/inspect-js/object-inspect/commit/356c66a410e7aece7162c8319880a5ef647beaa9) +- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9` [`c77b65b`](https://github.com/inspect-js/object-inspect/commit/c77b65bba593811b906b9ec57561c5cba92e2db3) +- [New] Add support for upcoming `BigInt` [`1ac548e`](https://github.com/inspect-js/object-inspect/commit/1ac548e4b27e26466c28c9a5e63e5d4e0591c31f) +- [Tests] run bigint tests in CI with --harmony-bigint flag [`d31b738`](https://github.com/inspect-js/object-inspect/commit/d31b73831880254b5c6cf5691cda9a149fbc5f04) +- [Dev Deps] update `core-js`, `tape` [`ff9eff6`](https://github.com/inspect-js/object-inspect/commit/ff9eff67113341ee1aaf80c1c22d683f43bfbccf) +- [Docs] fix example to use `safer-buffer` [`48cae12`](https://github.com/inspect-js/object-inspect/commit/48cae12a73ec6cacc955175bc56bbe6aee6a211f) + +## [v1.5.0](https://github.com/inspect-js/object-inspect/compare/v1.4.1...v1.5.0) - 2017-12-25 + +### Commits + +- [New] add `quoteStyle` option [`f5a72d2`](https://github.com/inspect-js/object-inspect/commit/f5a72d26edb3959b048f74c056ca7100a6b091e4) +- [Tests] add more test coverage [`30ebe4e`](https://github.com/inspect-js/object-inspect/commit/30ebe4e1fa943b99ecbb85be7614256d536e2759) +- [Tests] require 0.6 to pass [`99a008c`](https://github.com/inspect-js/object-inspect/commit/99a008ccace189a60fd7da18bf00e32c9572b980) + +## [v1.4.1](https://github.com/inspect-js/object-inspect/compare/v1.4.0...v1.4.1) - 2017-12-19 + +### Commits + +- [Tests] up to `node` `v9.3`, `v8.9`, `v6.12` [`6674476`](https://github.com/inspect-js/object-inspect/commit/6674476cc56acaac1bde96c84fed5ef631911906) +- [Fix] `inspect(Object(-0))` should be “Object(-0)”, not “Object(0)” [`d0a031f`](https://github.com/inspect-js/object-inspect/commit/d0a031f1cbb3024ee9982bfe364dd18a7e4d1bd3) + +## [v1.4.0](https://github.com/inspect-js/object-inspect/compare/v1.3.0...v1.4.0) - 2017-10-24 + +### Commits + +- [Tests] add `npm run coverage` [`3b48fb2`](https://github.com/inspect-js/object-inspect/commit/3b48fb25db037235eeb808f0b2830aad7aa36f70) +- [Tests] remove commented-out osx builds [`71e24db`](https://github.com/inspect-js/object-inspect/commit/71e24db8ad6ee3b9b381c5300b0475f2ba595a73) +- [New] add support for `util.inspect.custom`, in node only. [`20cca77`](https://github.com/inspect-js/object-inspect/commit/20cca7762d7e17f15b21a90793dff84acce155df) +- [Tests] up to `node` `v8.6`; use `nvm install-latest-npm` to ensure new npm doesn’t break old node [`252952d`](https://github.com/inspect-js/object-inspect/commit/252952d230d8065851dd3d4d5fe8398aae068529) +- [Tests] up to `node` `v8.8` [`4aa868d`](https://github.com/inspect-js/object-inspect/commit/4aa868d3a62914091d489dd6ec6eed194ee67cd3) +- [Dev Deps] update `core-js`, `tape` [`59483d1`](https://github.com/inspect-js/object-inspect/commit/59483d1df418f852f51fa0db7b24aa6b0209a27a) + +## [v1.3.0](https://github.com/inspect-js/object-inspect/compare/v1.2.2...v1.3.0) - 2017-07-31 + +### Fixed + +- [Fix] Map/Set: work around core-js bug < v2.5.0 [`#9`](https://github.com/inspect-js/object-inspect/issues/9) + +### Commits + +- [New] add support for arrays with additional object keys [`0d19937`](https://github.com/inspect-js/object-inspect/commit/0d199374ee37959e51539616666f420ccb29acb9) +- [Tests] up to `node` `v8.2`, `v7.10`, `v6.11`; fix new npm breaking on older nodes [`e24784a`](https://github.com/inspect-js/object-inspect/commit/e24784a90c49117787157a12a63897c49cf89bbb) +- Only apps should have lockfiles [`c6faebc`](https://github.com/inspect-js/object-inspect/commit/c6faebcb2ee486a889a4a1c4d78c0776c7576185) +- [Dev Deps] update `tape` [`7345a0a`](https://github.com/inspect-js/object-inspect/commit/7345a0aeba7e91b888a079c10004d17696a7f586) + +## [v1.2.2](https://github.com/inspect-js/object-inspect/compare/v1.2.1...v1.2.2) - 2017-03-24 + +### Commits + +- [Tests] up to `node` `v7.7`, `v6.10`, `v4.8`; improve test matrix [`a2ddc15`](https://github.com/inspect-js/object-inspect/commit/a2ddc15a1f2c65af18076eea1c0eb9cbceb478a0) +- [Tests] up to `node` `v7.0`, `v6.9`, `v5.12`, `v4.6`, `io.js` `v3.3`; improve test matrix [`a48949f`](https://github.com/inspect-js/object-inspect/commit/a48949f6b574b2d4d2298109d8e8d0eb3e7a83e7) +- [Performance] check for primitive types as early as possible. [`3b8092a`](https://github.com/inspect-js/object-inspect/commit/3b8092a2a4deffd0575f94334f00194e2d48dad3) +- [Refactor] remove unneeded `else`s. [`7255034`](https://github.com/inspect-js/object-inspect/commit/725503402e08de4f96f6bf2d8edef44ac36f26b6) +- [Refactor] avoid recreating `lowbyte` function every time. [`81edd34`](https://github.com/inspect-js/object-inspect/commit/81edd3475bd15bdd18e84de7472033dcf5004aaa) +- [Fix] differentiate -0 from 0 [`521d345`](https://github.com/inspect-js/object-inspect/commit/521d3456b009da7bf1c5785c8a9df5a9f8718264) +- [Refactor] move object key gathering into separate function [`aca6265`](https://github.com/inspect-js/object-inspect/commit/aca626536eaeef697196c6e9db3e90e7e0355b6a) +- [Refactor] consolidate wrapping logic for boxed primitives into a function. [`4e440cd`](https://github.com/inspect-js/object-inspect/commit/4e440cd9065df04802a2a1dead03f48c353ca301) +- [Robustness] use `typeof` instead of comparing to literal `undefined` [`5ca6f60`](https://github.com/inspect-js/object-inspect/commit/5ca6f601937506daff8ed2fcf686363b55807b69) +- [Refactor] consolidate Map/Set notations. [`4e576e5`](https://github.com/inspect-js/object-inspect/commit/4e576e5d7ed2f9ec3fb7f37a0d16732eb10758a9) +- [Tests] ensure that this function remains anonymous, despite ES6 name inference. [`7540ae5`](https://github.com/inspect-js/object-inspect/commit/7540ae591278756db614fa4def55ca413150e1a3) +- [Refactor] explicitly coerce Error objects to strings. [`7f4ca84`](https://github.com/inspect-js/object-inspect/commit/7f4ca8424ee8dc2c0ca5a422d94f7fac40327261) +- [Refactor] split up `var` declarations for debuggability [`6f2c11e`](https://github.com/inspect-js/object-inspect/commit/6f2c11e6a85418586a00292dcec5e97683f89bc3) +- [Robustness] cache `Object.prototype.toString` [`df44a20`](https://github.com/inspect-js/object-inspect/commit/df44a20adfccf31529d60d1df2079bfc3c836e27) +- [Dev Deps] update `tape` [`3ec714e`](https://github.com/inspect-js/object-inspect/commit/3ec714eba57bc3f58a6eb4fca1376f49e70d300a) +- [Dev Deps] update `tape` [`beb72d9`](https://github.com/inspect-js/object-inspect/commit/beb72d969653747d7cde300393c28755375329b0) + +## [v1.2.1](https://github.com/inspect-js/object-inspect/compare/v1.2.0...v1.2.1) - 2016-04-09 + +### Fixed + +- [Fix] fix Boolean `false` object inspection. [`#7`](https://github.com/substack/object-inspect/pull/7) + +## [v1.2.0](https://github.com/inspect-js/object-inspect/compare/v1.1.0...v1.2.0) - 2016-04-09 + +### Fixed + +- [New] add support for inspecting String/Number/Boolean objects. [`#6`](https://github.com/inspect-js/object-inspect/issues/6) + +### Commits + +- [Dev Deps] update `tape` [`742caa2`](https://github.com/inspect-js/object-inspect/commit/742caa262cf7af4c815d4821c8bd0129c1446432) + +## [v1.1.0](https://github.com/inspect-js/object-inspect/compare/1.0.2...v1.1.0) - 2015-12-14 + +### Merged + +- [New] add ES6 Map/Set support. [`#4`](https://github.com/inspect-js/object-inspect/pull/4) + +### Fixed + +- [New] add ES6 Map/Set support. [`#3`](https://github.com/inspect-js/object-inspect/issues/3) + +### Commits + +- Update `travis.yml` to test on bunches of `iojs` and `node` versions. [`4c1fd65`](https://github.com/inspect-js/object-inspect/commit/4c1fd65cc3bd95307e854d114b90478324287fd2) +- [Dev Deps] update `tape` [`88a907e`](https://github.com/inspect-js/object-inspect/commit/88a907e33afbe408e4b5d6e4e42a33143f88848c) + +## [1.0.2](https://github.com/inspect-js/object-inspect/compare/1.0.1...1.0.2) - 2015-08-07 + +### Commits + +- [Fix] Cache `Object.prototype.hasOwnProperty` in case it's deleted later. [`1d0075d`](https://github.com/inspect-js/object-inspect/commit/1d0075d3091dc82246feeb1f9871cb2b8ed227b3) +- [Dev Deps] Update `tape` [`ca8d5d7`](https://github.com/inspect-js/object-inspect/commit/ca8d5d75635ddbf76f944e628267581e04958457) +- gitignore node_modules since this is a reusable modules. [`ed41407`](https://github.com/inspect-js/object-inspect/commit/ed41407811743ca530cdeb28f982beb96026af82) + +## [1.0.1](https://github.com/inspect-js/object-inspect/compare/1.0.0...1.0.1) - 2015-07-19 + +### Commits + +- Make `inspect` work with symbol primitives and objects, including in node 0.11 and 0.12. [`ddf1b94`](https://github.com/inspect-js/object-inspect/commit/ddf1b94475ab951f1e3bccdc0a48e9073cfbfef4) +- bump tape [`103d674`](https://github.com/inspect-js/object-inspect/commit/103d67496b504bdcfdd765d303a773f87ec106e2) +- use newer travis config [`d497276`](https://github.com/inspect-js/object-inspect/commit/d497276c1da14234bb5098a59cf20de75fbc316a) + +## [1.0.0](https://github.com/inspect-js/object-inspect/compare/0.4.0...1.0.0) - 2014-08-05 + +### Commits + +- error inspect works properly [`260a22d`](https://github.com/inspect-js/object-inspect/commit/260a22d134d3a8a482c67d52091c6040c34f4299) +- seen coverage [`57269e8`](https://github.com/inspect-js/object-inspect/commit/57269e8baa992a7439047f47325111fdcbcb8417) +- htmlelement instance coverage [`397ffe1`](https://github.com/inspect-js/object-inspect/commit/397ffe10a1980350868043ef9de65686d438979f) +- more element coverage [`6905cc2`](https://github.com/inspect-js/object-inspect/commit/6905cc2f7df35600177e613b0642b4df5efd3eca) +- failing test for type errors [`385b615`](https://github.com/inspect-js/object-inspect/commit/385b6152e49b51b68449a662f410b084ed7c601a) +- fn name coverage [`edc906d`](https://github.com/inspect-js/object-inspect/commit/edc906d40fca6b9194d304062c037ee8e398c4c2) +- server-side element test [`362d1d3`](https://github.com/inspect-js/object-inspect/commit/362d1d3e86f187651c29feeb8478110afada385b) +- custom inspect fn [`e89b0f6`](https://github.com/inspect-js/object-inspect/commit/e89b0f6fe6d5e03681282af83732a509160435a6) +- fixed browser test [`b530882`](https://github.com/inspect-js/object-inspect/commit/b5308824a1c8471c5617e394766a03a6977102a9) +- depth test, matches node [`1cfd9e0`](https://github.com/inspect-js/object-inspect/commit/1cfd9e0285a4ae1dff44101ad482915d9bf47e48) +- exercise hasOwnProperty path [`8d753fb`](https://github.com/inspect-js/object-inspect/commit/8d753fb362a534fa1106e4d80f2ee9bea06a66d9) +- more cases covered for errors [`c5c46a5`](https://github.com/inspect-js/object-inspect/commit/c5c46a569ec4606583497e8550f0d8c7ad39a4a4) +- \W obj key test case [`b0eceee`](https://github.com/inspect-js/object-inspect/commit/b0eceeea6e0eb94d686c1046e99b9e25e5005f75) +- coverage for explicit depth param [`e12b91c`](https://github.com/inspect-js/object-inspect/commit/e12b91cd59683362f3a0e80f46481a0211e26c15) + +## [0.4.0](https://github.com/inspect-js/object-inspect/compare/0.3.1...0.4.0) - 2014-03-21 + +### Commits + +- passing lowbyte interpolation test [`b847511`](https://github.com/inspect-js/object-inspect/commit/b8475114f5def7e7961c5353d48d3d8d9a520985) +- lowbyte test [`4a2b0e1`](https://github.com/inspect-js/object-inspect/commit/4a2b0e142667fc933f195472759385ac08f3946c) + +## [0.3.1](https://github.com/inspect-js/object-inspect/compare/0.3.0...0.3.1) - 2014-03-04 + +### Commits + +- sort keys [`a07b19c`](https://github.com/inspect-js/object-inspect/commit/a07b19cc3b1521a82d4fafb6368b7a9775428a05) + +## [0.3.0](https://github.com/inspect-js/object-inspect/compare/0.2.0...0.3.0) - 2014-03-04 + +### Commits + +- [] and {} instead of [ ] and { } [`654c44b`](https://github.com/inspect-js/object-inspect/commit/654c44b2865811f3519e57bb8526e0821caf5c6b) + +## [0.2.0](https://github.com/inspect-js/object-inspect/compare/0.1.3...0.2.0) - 2014-03-04 + +### Commits + +- failing holes test [`99cdfad`](https://github.com/inspect-js/object-inspect/commit/99cdfad03c6474740275a75636fe6ca86c77737a) +- regex already work [`e324033`](https://github.com/inspect-js/object-inspect/commit/e324033267025995ec97d32ed0a65737c99477a6) +- failing undef/null test [`1f88a00`](https://github.com/inspect-js/object-inspect/commit/1f88a00265d3209719dda8117b7e6360b4c20943) +- holes in the all example [`7d345f3`](https://github.com/inspect-js/object-inspect/commit/7d345f3676dcbe980cff89a4f6c243269ebbb709) +- check for .inspect(), fixes Buffer use-case [`c3f7546`](https://github.com/inspect-js/object-inspect/commit/c3f75466dbca125347d49847c05262c292f12b79) +- fixes for holes [`ce25f73`](https://github.com/inspect-js/object-inspect/commit/ce25f736683de4b92ff27dc5471218415e2d78d8) +- weird null behavior [`405c1ea`](https://github.com/inspect-js/object-inspect/commit/405c1ea72cd5a8cf3b498c3eaa903d01b9fbcab5) +- tape is actually a devDependency, upgrade [`703b0ce`](https://github.com/inspect-js/object-inspect/commit/703b0ce6c5817b4245a082564bccd877e0bb6990) +- put date in the example [`a342219`](https://github.com/inspect-js/object-inspect/commit/a3422190eeaa013215f46df2d0d37b48595ac058) +- passing the null test [`4ab737e`](https://github.com/inspect-js/object-inspect/commit/4ab737ebf862a75d247ebe51e79307a34d6380d4) + +## [0.1.3](https://github.com/inspect-js/object-inspect/compare/0.1.1...0.1.3) - 2013-07-26 + +### Commits + +- special isElement() check [`882768a`](https://github.com/inspect-js/object-inspect/commit/882768a54035d30747be9de1baf14e5aa0daa128) +- oh right old IEs don't have indexOf either [`36d1275`](https://github.com/inspect-js/object-inspect/commit/36d12756c38b08a74370b0bb696c809e529913a5) + +## [0.1.1](https://github.com/inspect-js/object-inspect/compare/0.1.0...0.1.1) - 2013-07-26 + +### Commits + +- tests! [`4422fd9`](https://github.com/inspect-js/object-inspect/commit/4422fd95532c2745aa6c4f786f35f1090be29998) +- fix for ie<9, doesn't have hasOwnProperty [`6b7d611`](https://github.com/inspect-js/object-inspect/commit/6b7d61183050f6da801ea04473211da226482613) +- fix for all IEs: no f.name [`4e0c2f6`](https://github.com/inspect-js/object-inspect/commit/4e0c2f6dfd01c306d067d7163319acc97c94ee50) +- badges [`5ed0d88`](https://github.com/inspect-js/object-inspect/commit/5ed0d88e4e407f9cb327fa4a146c17921f9680f3) + +## [0.1.0](https://github.com/inspect-js/object-inspect/compare/0.0.0...0.1.0) - 2013-07-26 + +### Commits + +- [Function] for functions [`ad5c485`](https://github.com/inspect-js/object-inspect/commit/ad5c485098fc83352cb540a60b2548ca56820e0b) + +## 0.0.0 - 2013-07-26 + +### Commits + +- working browser example [`34be6b6`](https://github.com/inspect-js/object-inspect/commit/34be6b6548f9ce92bdc3c27572857ba0c4a1218d) +- package.json etc [`cad51f2`](https://github.com/inspect-js/object-inspect/commit/cad51f23fc6bcf1a456ed6abe16088256c2f632f) +- docs complete [`b80cce2`](https://github.com/inspect-js/object-inspect/commit/b80cce2490c4e7183a9ee11ea89071f0abec4446) +- circular example [`4b4a7b9`](https://github.com/inspect-js/object-inspect/commit/4b4a7b92209e4e6b4630976cb6bcd17d14165a59) +- string rep [`7afb479`](https://github.com/inspect-js/object-inspect/commit/7afb479baa798d27f09e0a178b72ea327f60f5c8) diff --git a/build/node_modules/object-inspect/index.js b/build/node_modules/object-inspect/index.js index c85ca5a9..b4e02ff2 100644 --- a/build/node_modules/object-inspect/index.js +++ b/build/node_modules/object-inspect/index.js @@ -15,11 +15,24 @@ var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; var booleanValueOf = Boolean.prototype.valueOf; var objectToString = Object.prototype.toString; var functionToString = Function.prototype.toString; -var match = String.prototype.match; +var $match = String.prototype.match; +var $slice = String.prototype.slice; +var $replace = String.prototype.replace; +var $toUpperCase = String.prototype.toUpperCase; +var $toLowerCase = String.prototype.toLowerCase; +var $test = RegExp.prototype.test; +var $concat = Array.prototype.concat; +var $join = Array.prototype.join; +var $arrSlice = Array.prototype.slice; +var $floor = Math.floor; var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; var gOPS = Object.getOwnPropertySymbols; var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; +// ie, `has-tostringtag/shams +var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') + ? Symbol.toStringTag + : null; var isEnumerable = Object.prototype.propertyIsEnumerable; var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( @@ -30,9 +43,30 @@ var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPr : null ); +function addNumericSeparator(num, str) { + if ( + num === Infinity + || num === -Infinity + || num !== num + || (num && num > -1000 && num < 1000) + || $test.call(/e/, str) + ) { + return str; + } + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + if (typeof num === 'number') { + var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) + if (int !== num) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); + } + } + return $replace.call(str, sepRegex, '$&_'); +} + var inspectCustom = require('./util.inspect').custom; var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null; -var toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null; module.exports = function inspect_(obj, options, depth, seen) { var opts = options || {}; @@ -49,8 +83,8 @@ module.exports = function inspect_(obj, options, depth, seen) { throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); } var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; - if (typeof customInspect !== 'boolean') { - throw new TypeError('option "customInspect", if provided, must be `true` or `false`'); + if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { + throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); } if ( @@ -59,8 +93,12 @@ module.exports = function inspect_(obj, options, depth, seen) { && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) ) { - throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`'); + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); } + if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + var numericSeparator = opts.numericSeparator; if (typeof obj === 'undefined') { return 'undefined'; @@ -79,10 +117,12 @@ module.exports = function inspect_(obj, options, depth, seen) { if (obj === 0) { return Infinity / obj > 0 ? '0' : '-0'; } - return String(obj); + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; } if (typeof obj === 'bigint') { - return String(obj) + 'n'; + var bigIntStr = String(obj) + 'n'; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; } var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; @@ -101,7 +141,7 @@ module.exports = function inspect_(obj, options, depth, seen) { function inspect(value, from, noIndent) { if (from) { - seen = seen.slice(); + seen = $arrSlice.call(seen); seen.push(from); } if (noIndent) { @@ -119,21 +159,21 @@ module.exports = function inspect_(obj, options, depth, seen) { if (typeof obj === 'function') { var name = nameOf(obj); var keys = arrObjKeys(obj, inspect); - return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : ''); + return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); } if (isSymbol(obj)) { - var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; } if (isElement(obj)) { - var s = '<' + String(obj.nodeName).toLowerCase(); + var s = '<' + $toLowerCase.call(String(obj.nodeName)); var attrs = obj.attributes || []; for (var i = 0; i < attrs.length; i++) { s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); } s += '>'; if (obj.childNodes && obj.childNodes.length) { s += '...'; } - s += ''; + s += ''; return s; } if (isArray(obj)) { @@ -142,17 +182,20 @@ module.exports = function inspect_(obj, options, depth, seen) { if (indent && !singleLineValues(xs)) { return '[' + indentedJoin(xs, indent) + ']'; } - return '[ ' + xs.join(', ') + ' ]'; + return '[ ' + $join.call(xs, ', ') + ' ]'; } if (isError(obj)) { var parts = arrObjKeys(obj, inspect); + if ('cause' in obj && !isEnumerable.call(obj, 'cause')) { + return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; + } if (parts.length === 0) { return '[' + String(obj) + ']'; } - return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }'; + return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; } if (typeof obj === 'object' && customInspect) { if (inspectSymbol && typeof obj[inspectSymbol] === 'function') { return obj[inspectSymbol](); - } else if (typeof obj.inspect === 'function') { + } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { return obj.inspect(); } } @@ -195,14 +238,14 @@ module.exports = function inspect_(obj, options, depth, seen) { var ys = arrObjKeys(obj, inspect); var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; var protoTag = obj instanceof Object ? '' : 'null prototype'; - var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : ''; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; - var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : ''); + var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); if (ys.length === 0) { return tag + '{}'; } if (indent) { return tag + '{' + indentedJoin(ys, indent) + '}'; } - return tag + '{ ' + ys.join(', ') + ' }'; + return tag + '{ ' + $join.call(ys, ', ') + ' }'; } return String(obj); }; @@ -213,7 +256,7 @@ function wrapQuotes(s, defaultStyle, opts) { } function quote(s) { - return String(s).replace(/"/g, '"'); + return $replace.call(String(s), /"/g, '"'); } function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } @@ -264,7 +307,7 @@ function toStr(obj) { function nameOf(f) { if (f.name) { return f.name; } - var m = match.call(functionToString.call(f), /^function\s*([\w$]+)/); + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); if (m) { return m[1]; } return null; } @@ -364,10 +407,10 @@ function inspectString(str, opts) { if (str.length > opts.maxStringLength) { var remaining = str.length - opts.maxStringLength; var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); - return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer; + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; } // eslint-disable-next-line no-control-regex - var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte); + var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); return wrapQuotes(s, 'single', opts); } @@ -381,7 +424,7 @@ function lowbyte(c) { 13: 'r' }[n]; if (x) { return '\\' + x; } - return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase(); + return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); } function markBoxed(str) { @@ -393,7 +436,7 @@ function weakCollectionOf(type) { } function collectionOf(type, size, entries, indent) { - var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', '); + var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); return type + ' (' + size + ') {' + joinedEntries + '}'; } @@ -411,20 +454,20 @@ function getIndent(opts, depth) { if (opts.indent === '\t') { baseIndent = '\t'; } else if (typeof opts.indent === 'number' && opts.indent > 0) { - baseIndent = Array(opts.indent + 1).join(' '); + baseIndent = $join.call(Array(opts.indent + 1), ' '); } else { return null; } return { base: baseIndent, - prev: Array(depth + 1).join(baseIndent) + prev: $join.call(Array(depth + 1), baseIndent) }; } function indentedJoin(xs, indent) { if (xs.length === 0) { return ''; } var lineJoiner = '\n' + indent.prev + indent.base; - return lineJoiner + xs.join(',' + lineJoiner) + '\n' + indent.prev; + return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; } function arrObjKeys(obj, inspect) { @@ -451,7 +494,7 @@ function arrObjKeys(obj, inspect) { if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section continue; // eslint-disable-line no-restricted-syntax, no-continue - } else if ((/[^\w$]/).test(key)) { + } else if ($test.call(/[^\w$]/, key)) { xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); } else { xs.push(key + ': ' + inspect(obj[key], obj)); diff --git a/build/node_modules/object-inspect/package.json b/build/node_modules/object-inspect/package.json index 293df1f3..02f8127d 100644 --- a/build/node_modules/object-inspect/package.json +++ b/build/node_modules/object-inspect/package.json @@ -1,8 +1,8 @@ { "_from": "object-inspect@^1.9.0", - "_id": "object-inspect@1.10.3", + "_id": "object-inspect@1.12.0", "_inBundle": false, - "_integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "_integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "_location": "/object-inspect", "_phantomChildren": {}, "_requested": { @@ -16,11 +16,10 @@ "fetchSpec": "^1.9.0" }, "_requiredBy": [ - "/es-abstract", "/side-channel" ], - "_resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "_shasum": "c2aa7d2d09f50c99375704f7a0adf24c5782d369", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-inspect/-/object-inspect-1.12.0.tgz", + "_shasum": "6e2c120e868fd1fd18cb4f18c31741d0d6e776f0", "_spec": "object-inspect@^1.9.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/side-channel", "author": { @@ -28,6 +27,14 @@ "email": "mail@substack.net", "url": "http://substack.net" }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, "browser": { "./util.inspect.js": false }, @@ -38,27 +45,25 @@ "deprecated": false, "description": "string representations of objects in node and the browser", "devDependencies": { - "@ljharb/eslint-config": "^17.6.0", + "@ljharb/eslint-config": "^20.1.0", "aud": "^1.1.5", + "auto-changelog": "^2.3.0", "core-js": "^2.6.12", - "eslint": "^7.26.0", + "error-cause": "^1.0.3", + "es-value-fixtures": "^1.2.1", + "eslint": "^8.5.0", "for-each": "^0.3.3", "functions-have-names": "^1.2.2", + "has-tostringtag": "^1.0.0", "make-arrow-function": "^1.2.0", "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", + "safe-publish-latest": "^2.0.0", "string.prototype.repeat": "^1.0.0", - "tape": "^5.2.2" + "tape": "^5.3.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, - "greenkeeper": { - "ignore": [ - "nyc", - "core-js" - ] - }, "homepage": "https://github.com/inspect-js/object-inspect", "keywords": [ "inspect", @@ -77,13 +82,16 @@ "scripts": { "lint": "eslint .", "posttest": "npx aud --production", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest", "pretest": "npm run lint", "test": "npm run tests-only && npm run test:corejs", "test:corejs": "nyc tape test-core-js.js 'test/*.js'", - "tests-only": "nyc tape 'test/*.js'" + "tests-only": "nyc tape 'test/*.js'", + "version": "auto-changelog && git add CHANGELOG.md" }, + "sideEffects": false, "testling": { "files": [ "test/*.js", @@ -100,5 +108,5 @@ "android/latest" ] }, - "version": "1.10.3" + "version": "1.12.0" } diff --git a/build/node_modules/object-inspect/readme.markdown b/build/node_modules/object-inspect/readme.markdown index 00fdb7ef..9ff6bec3 100644 --- a/build/node_modules/object-inspect/readme.markdown +++ b/build/node_modules/object-inspect/readme.markdown @@ -53,8 +53,9 @@ Return a string `s` with the string representation of `obj` up to a depth of `op Additional options: - `quoteStyle`: must be "single" or "double", if present. Default `'single'` for strings, `'double'` for HTML elements. - `maxStringLength`: must be `0`, a positive integer, `Infinity`, or `null`, if present. Default `Infinity`. - - `customInspect`: When `true`, a custom inspect method function will be invoked. Default `true`. + - `customInspect`: When `true`, a custom inspect method function will be invoked (either undere the `util.inspect.custom` symbol, or the `inspect` property). When the string `'symbol'`, only the symbol method will be invoked. Default `true`. - `indent`: must be "\t", `null`, or a positive integer. Default `null`. + - `numericSeparator`: must be a boolean, if present. Default `false`. If `true`, all numbers will be printed with numeric separators (eg, `1234.5678` will be printed as `'1_234.567_8'`) # install diff --git a/build/node_modules/object-inspect/test/bigint.js b/build/node_modules/object-inspect/test/bigint.js index 90564356..4ecc31df 100644 --- a/build/node_modules/object-inspect/test/bigint.js +++ b/build/node_modules/object-inspect/test/bigint.js @@ -2,7 +2,7 @@ var inspect = require('../'); var test = require('tape'); -var hasSymbols = require('has-symbols/shams')(); +var hasToStringTag = require('has-tostringtag/shams')(); test('bigint', { skip: typeof BigInt === 'undefined' }, function (t) { t.test('primitives', function (st) { @@ -30,7 +30,7 @@ test('bigint', { skip: typeof BigInt === 'undefined' }, function (t) { st.equal(inspect(Function('return 256n')()), '256n'); }); - t.test('toStringTag', { skip: !hasSymbols || typeof Symbol.toStringTag === 'undefined' }, function (st) { + t.test('toStringTag', { skip: !hasToStringTag }, function (st) { st.plan(1); var faker = {}; @@ -42,5 +42,17 @@ test('bigint', { skip: typeof BigInt === 'undefined' }, function (t) { ); }); + t.test('numericSeparator', function (st) { + st.equal(inspect(BigInt(0), { numericSeparator: false }), '0n', '0n, numericSeparator false'); + st.equal(inspect(BigInt(0), { numericSeparator: true }), '0n', '0n, numericSeparator true'); + + st.equal(inspect(BigInt(1234), { numericSeparator: false }), '1234n', '1234n, numericSeparator false'); + st.equal(inspect(BigInt(1234), { numericSeparator: true }), '1_234n', '1234n, numericSeparator true'); + st.equal(inspect(BigInt(-1234), { numericSeparator: false }), '-1234n', '1234n, numericSeparator false'); + st.equal(inspect(BigInt(-1234), { numericSeparator: true }), '-1_234n', '1234n, numericSeparator true'); + + st.end(); + }); + t.end(); }); diff --git a/build/node_modules/object-inspect/test/err.js b/build/node_modules/object-inspect/test/err.js index db963381..ef8b1cb6 100644 --- a/build/node_modules/object-inspect/test/err.js +++ b/build/node_modules/object-inspect/test/err.js @@ -1,5 +1,7 @@ -var inspect = require('../'); var test = require('tape'); +var ErrorWithCause = require('error-cause/Error'); + +var inspect = require('../'); test('type error', function (t) { t.plan(1); @@ -14,18 +16,33 @@ test('type error', function (t) { cerr.message = 'whoa'; cerr['a-b'] = 5; + var withCause = new ErrorWithCause('foo', { cause: 'bar' }); + var withCausePlus = new ErrorWithCause('foo', { cause: 'bar' }); + withCausePlus.foo = 'bar'; + var withUndefinedCause = new ErrorWithCause('foo', { cause: undefined }); + var withEnumerableCause = new Error('foo'); + withEnumerableCause.cause = 'bar'; + var obj = [ new TypeError(), new TypeError('xxx'), aerr, berr, - cerr + cerr, + withCause, + withCausePlus, + withUndefinedCause, + withEnumerableCause ]; t.equal(inspect(obj), '[ ' + [ '[TypeError]', '[TypeError: xxx]', '{ [TypeError] foo: 555, bar: [ 1, 2, 3 ] }', '{ [TypeError: tuv] baz: 555 }', - '{ [SyntaxError: whoa] message: \'whoa\', \'a-b\': 5 }' + '{ [SyntaxError: whoa] message: \'whoa\', \'a-b\': 5 }', + '{ [Error: foo] [cause]: \'bar\' }', + '{ [Error: foo] [cause]: \'bar\', foo: \'bar\' }', + '{ [Error: foo] [cause]: undefined }', + '{ [Error: foo] cause: \'bar\' }' ].join(', ') + ' ]'); }); diff --git a/build/node_modules/object-inspect/test/fakes.js b/build/node_modules/object-inspect/test/fakes.js index 17225e2e..a65c08c1 100644 --- a/build/node_modules/object-inspect/test/fakes.js +++ b/build/node_modules/object-inspect/test/fakes.js @@ -2,10 +2,10 @@ var inspect = require('../'); var test = require('tape'); -var hasSymbols = require('has-symbols/shams')(); +var hasToStringTag = require('has-tostringtag/shams')(); var forEach = require('for-each'); -test('fakes', { skip: !hasSymbols || typeof Symbol.toStringTag === 'undefined' }, function (t) { +test('fakes', { skip: !hasToStringTag }, function (t) { forEach([ 'Array', 'Boolean', diff --git a/build/node_modules/object-inspect/test/inspect.js b/build/node_modules/object-inspect/test/inspect.js index 54c6f46b..bcf264ec 100644 --- a/build/node_modules/object-inspect/test/inspect.js +++ b/build/node_modules/object-inspect/test/inspect.js @@ -6,30 +6,40 @@ var repeat = require('string.prototype.repeat'); var inspect = require('..'); test('inspect', function (t) { - t.plan(4); + t.plan(5); + var obj = [{ inspect: function xyzInspect() { return '!XYZ¡'; } }, []]; - t.equal(inspect(obj), '[ !XYZ¡, [] ]'); - t.equal(inspect(obj, { customInspect: true }), '[ !XYZ¡, [] ]'); - t.equal(inspect(obj, { customInspect: false }), '[ { inspect: [Function: xyzInspect] }, [] ]'); + var stringResult = '[ !XYZ¡, [] ]'; + var falseResult = '[ { inspect: [Function: xyzInspect] }, [] ]'; + + t.equal(inspect(obj), stringResult); + t.equal(inspect(obj, { customInspect: true }), stringResult); + t.equal(inspect(obj, { customInspect: 'symbol' }), falseResult); + t.equal(inspect(obj, { customInspect: false }), falseResult); t['throws']( - function () { inspect(obj, { customInspect: 'not a boolean' }); }, + function () { inspect(obj, { customInspect: 'not a boolean or "symbol"' }); }, TypeError, - '`customInspect` must be a boolean' + '`customInspect` must be a boolean or the string "symbol"' ); }); test('inspect custom symbol', { skip: !hasSymbols || !utilInspect || !utilInspect.custom }, function (t) { - t.plan(3); + t.plan(4); var obj = { inspect: function stringInspect() { return 'string'; } }; obj[utilInspect.custom] = function custom() { return 'symbol'; }; - t.equal(inspect([obj, []]), '[ ' + (utilInspect.custom ? 'symbol' : 'string') + ', [] ]'); - t.equal(inspect([obj, []], { customInspect: true }), '[ ' + (utilInspect.custom ? 'symbol' : 'string') + ', [] ]'); - t.equal( - inspect([obj, []], { customInspect: false }), - '[ { inspect: [Function: stringInspect]' + (utilInspect.custom ? ', [' + inspect(utilInspect.custom) + ']: [Function: custom]' : '') + ' }, [] ]' - ); + var symbolResult = '[ symbol, [] ]'; + var stringResult = '[ string, [] ]'; + var falseResult = '[ { inspect: [Function: stringInspect]' + (utilInspect.custom ? ', [' + inspect(utilInspect.custom) + ']: [Function: custom]' : '') + ' }, [] ]'; + + var symbolStringFallback = utilInspect.custom ? symbolResult : stringResult; + var symbolFalseFallback = utilInspect.custom ? symbolResult : falseResult; + + t.equal(inspect([obj, []]), symbolStringFallback); + t.equal(inspect([obj, []], { customInspect: true }), symbolStringFallback); + t.equal(inspect([obj, []], { customInspect: 'symbol' }), symbolFalseFallback); + t.equal(inspect([obj, []], { customInspect: false }), falseResult); }); test('symbols', { skip: !hasSymbols }, function (t) { diff --git a/build/node_modules/object-inspect/test/number.js b/build/node_modules/object-inspect/test/number.js index 448304e5..8f287e8e 100644 --- a/build/node_modules/object-inspect/test/number.js +++ b/build/node_modules/object-inspect/test/number.js @@ -1,5 +1,8 @@ -var inspect = require('../'); var test = require('tape'); +var v = require('es-value-fixtures'); +var forEach = require('for-each'); + +var inspect = require('../'); test('negative zero', function (t) { t.equal(inspect(0), '0', 'inspect(0) === "0"'); @@ -10,3 +13,46 @@ test('negative zero', function (t) { t.end(); }); + +test('numericSeparator', function (t) { + forEach(v.nonBooleans, function (nonBoolean) { + t['throws']( + function () { inspect(true, { numericSeparator: nonBoolean }); }, + TypeError, + inspect(nonBoolean) + ' is not a boolean' + ); + }); + + t.test('3 digit numbers', function (st) { + var failed = false; + for (var i = -999; i < 1000; i += 1) { + var actual = inspect(i); + var actualSepNo = inspect(i, { numericSeparator: false }); + var actualSepYes = inspect(i, { numericSeparator: true }); + var expected = String(i); + if (actual !== expected || actualSepNo !== expected || actualSepYes !== expected) { + failed = true; + t.equal(actual, expected); + t.equal(actualSepNo, expected); + t.equal(actualSepYes, expected); + } + } + + st.notOk(failed, 'all 3 digit numbers passed'); + + st.end(); + }); + + t.equal(inspect(1e3), '1000', '1000'); + t.equal(inspect(1e3, { numericSeparator: false }), '1000', '1000, numericSeparator false'); + t.equal(inspect(1e3, { numericSeparator: true }), '1_000', '1000, numericSeparator true'); + t.equal(inspect(-1e3), '-1000', '-1000'); + t.equal(inspect(-1e3, { numericSeparator: false }), '-1000', '-1000, numericSeparator false'); + t.equal(inspect(-1e3, { numericSeparator: true }), '-1_000', '-1000, numericSeparator true'); + + t.equal(inspect(1234.5678, { numericSeparator: true }), '1_234.567_8', 'fractional numbers get separators'); + t.equal(inspect(1234.56789, { numericSeparator: true }), '1_234.567_89', 'fractional numbers get separators'); + t.equal(inspect(1234.567891, { numericSeparator: true }), '1_234.567_891', 'fractional numbers get separators'); + + t.end(); +}); diff --git a/build/node_modules/object-inspect/test/toStringTag.js b/build/node_modules/object-inspect/test/toStringTag.js index b7ddad37..95f82703 100644 --- a/build/node_modules/object-inspect/test/toStringTag.js +++ b/build/node_modules/object-inspect/test/toStringTag.js @@ -1,11 +1,11 @@ 'use strict'; var test = require('tape'); -var hasSymbols = require('has-symbols/shams')(); +var hasToStringTag = require('has-tostringtag/shams')(); var inspect = require('../'); -test('Symbol.toStringTag', { skip: !hasSymbols || typeof Symbol.toStringTag === 'undefined' }, function (t) { +test('Symbol.toStringTag', { skip: !hasToStringTag }, function (t) { t.plan(4); var obj = { a: 1 }; diff --git a/build/node_modules/object-inspect/test/values.js b/build/node_modules/object-inspect/test/values.js index ee64681b..c83cb957 100644 --- a/build/node_modules/object-inspect/test/values.js +++ b/build/node_modules/object-inspect/test/values.js @@ -3,6 +3,7 @@ var inspect = require('../'); var test = require('tape'); var hasSymbols = require('has-symbols/shams')(); +var hasToStringTag = require('has-tostringtag/shams')(); test('values', function (t) { t.plan(1); @@ -76,7 +77,7 @@ test('symbols', { skip: !hasSymbols }, function (t) { t.equal(inspect(Object(sym)), 'Object(Symbol(foo))', 'Object(Symbol("foo")) should be "Object(Symbol(foo))"'); } - t.test('toStringTag', { skip: !hasSymbols || typeof Symbol.toStringTag === 'undefined' }, function (st) { + t.test('toStringTag', { skip: !hasToStringTag }, function (st) { st.plan(1); var faker = {}; diff --git a/build/node_modules/object-keys/package.json b/build/node_modules/object-keys/package.json index 2eb0f987..82924b4c 100644 --- a/build/node_modules/object-keys/package.json +++ b/build/node_modules/object-keys/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-sublevel/xtend" ], - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-keys/-/object-keys-0.2.0.tgz", "_shasum": "cddec02998b091be42bf1035ae32e49f1cb6ea67", "_spec": "object-keys@~0.2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel/node_modules/xtend", diff --git a/build/node_modules/object.assign/.editorconfig b/build/node_modules/object.assign/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/object.assign/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/object.assign/.eslintignore b/build/node_modules/object.assign/.eslintignore deleted file mode 100644 index 849ddff3..00000000 --- a/build/node_modules/object.assign/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist/ diff --git a/build/node_modules/object.assign/.eslintrc b/build/node_modules/object.assign/.eslintrc deleted file mode 100644 index 6d4cafd9..00000000 --- a/build/node_modules/object.assign/.eslintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 19], - "id-length": [2, { "min": 1, "max": 30 }], - "max-statements": [2, 33], - "max-statements-per-line": [2, { "max": 2 }], - "no-magic-numbers": [1, { "ignore": [0] }], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], - }, - - "overrides": [ - { - "files": "test/**", - "rules": { - "no-invalid-this": 1, - "max-lines-per-function": 0, - "max-statements-per-line": [2, { "max": 3 }], - "no-magic-numbers": 0, - }, - }, - ], -} diff --git a/build/node_modules/object.assign/.github/FUNDING.yml b/build/node_modules/object.assign/.github/FUNDING.yml deleted file mode 100644 index ef7fdbfa..00000000 --- a/build/node_modules/object.assign/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/object.assign -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/object.assign/.github/workflows/rebase.yml b/build/node_modules/object.assign/.github/workflows/rebase.yml deleted file mode 100644 index 0c2ad39b..00000000 --- a/build/node_modules/object.assign/.github/workflows/rebase.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Automatic Rebase - -on: [pull_request_target] - -jobs: - _: - name: "Automatic Rebase" - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - uses: ljharb/rebase@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/node_modules/object.assign/.github/workflows/require-allow-edits.yml b/build/node_modules/object.assign/.github/workflows/require-allow-edits.yml deleted file mode 100644 index aac42d3e..00000000 --- a/build/node_modules/object.assign/.github/workflows/require-allow-edits.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: Require “Allow Edits” - -on: [pull_request_target] - -jobs: - _: - name: "Require “Allow Edits”" - - runs-on: ubuntu-latest - - steps: - - uses: ljharb/require-allow-edits@main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build/node_modules/object.assign/.nycrc b/build/node_modules/object.assign/.nycrc deleted file mode 100644 index d316b4db..00000000 --- a/build/node_modules/object.assign/.nycrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "operations", - "test" - ] -} diff --git a/build/node_modules/object.assign/CHANGELOG.md b/build/node_modules/object.assign/CHANGELOG.md deleted file mode 100644 index ac543d52..00000000 --- a/build/node_modules/object.assign/CHANGELOG.md +++ /dev/null @@ -1,201 +0,0 @@ -4.1.2 / 2020-10-30 -================== - * [Refactor] use extracted `call-bind` instead of full `es-abstract` - * [Dev Deps] update `eslint`, `ses`, `browserify` - * [Tests] run tests in SES - * [Tests] ses-compat: show error stacks - -4.1.1 / 2020-09-11 -================== - * [Fix] avoid mutating `Object.assign` in modern engines - * [Refactor] use `callBind` from `es-abstract` instead of `function-bind` - * [Deps] update `has-symbols`, `object-keys`, `define-properties` - * [meta] add `funding` field, FUNDING.yml - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `browserify`, `covert`, `for-each`, `is`, `tape`, `functions-have-names`; add `aud`, `safe-publish-latest`; remove `jscs` - * [actions] add Require Allow Edits workflow - * [actions] add automatic rebasing / merge commit blocking - * [Tests] ses-compat - add test to ensure package initializes correctly after ses lockdown (#77) - * [Tests] Add passing test for a source of `window.location` (#68) - * [Tests] use shared travis-ci config - * [Tests] use `npx aud` instead of `npm audit` with hoops or `nsp` - * [Tests] use `functions-have-names` - -4.1.0 / 2017-12-21 -================== - * [New] add `auto` entry point (#52) - * [Refactor] Use `has-symbols` module - * [Deps] update `function-bind`, `object-keys` - * [Dev Deps] update `@es-shims/api`, `browserify`, `nsp`, `eslint`, `@ljharb/eslint-config`, `is` - * [Tests] up to `node` `v9.3`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS - -4.0.4 / 2016-07-04 -================== - * [Fix] Cache original `getOwnPropertySymbols`, and use that when `Object.getOwnPropertySymbols` is unavailable - * [Deps] update `object-keys` - * [Dev Deps] update `eslint`, `get-own-property-symbols`, `core-js`, `jscs`, `nsp`, `browserify`, `@ljharb/eslint-config`, `tape`, `@es-shims/api` - * [Tests] up to `node` `v6.2`, `v5.10`, `v4.4` - * [Tests] run sham tests on node 0.10 - * [Tests] use pretest/posttest for linting/security - -4.0.3 / 2015-10-21 -================== - * [Fix] Support core-js's Symbol sham (#17) - * [Fix] Ensure that properties removed or made non-enumerable during enumeration are not assigned (#16) - * [Fix] Avoid looking up keys and values more than once - * [Tests] Avoid using `reduce` so `npm run test:shams:corejs` passes in `node` `v0.8` ([core-js#122](https://github.com/zloirock/core-js/issues/122)) - * [Tests] Refactor to use my conventional structure that separates shimmed, implementation, and common tests - * [Tests] Create `npm run test:shams` and better organize tests for symbol shams - * [Tests] Remove `nsp` in favor of `requiresafe` - -4.0.2 / 2015-10-20 -================== - * [Fix] Ensure correct property enumeration order, particularly in v8 (#15) - * [Deps] update `object-keys`, `define-properties` - * [Dev Deps] update `browserify`, `is`, `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` - * [Tests] up to `io.js` `v3.3`, `node` `v4.2` - -4.0.1 / 2015-08-16 -================== - * [Docs] Add `Symbol` note to readme - -4.0.0 / 2015-08-15 -================== - * [Breaking] Implement the [es-shim API](es-shims/api). - * [Robustness] Make implementation robust against later modification of environment methods. - * [Refactor] Move implementation to `implementation.js` - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - * [Deps] update `object-keys`, `define-properties` - * [Dev Deps] update `browserify`, `tape`, `eslint`, `jscs`, `browserify` - * [Tests] Add `npm run tests-only` - * [Tests] use my personal shared `eslint` config. - * [Tests] up to `io.js` `v3.0` - -3.0.1 / 2015-06-28 -================== - * Cache `Object` and `Array#push` to make the shim more robust. - * [Fix] Remove use of `Array#filter`, which isn't in ES3. - * [Deps] Update `object-keys`, `define-properties` - * [Dev Deps] Update `get-own-property-symbols`, `browserify`, `eslint`, `nsp` - * [Tests] Test up to `io.js` `v2.3` - * [Tests] Adding `Object.assign` tests for non-object targets, per https://github.com/paulmillr/es6-shim/issues/348 - -3.0.0 / 2015-05-20 -================== - * Attempt to feature-detect Symbols, even if `typeof Symbol() !== 'symbol'` (#12) - * Make a separate `hasSymbols` internal module - * Update `browserify`, `eslint` - -2.0.3 / 2015-06-28 -================== - * Cache `Object` and `Array#push` to make the shim more robust. - * [Fix] Remove use of `Array#filter`, which isn't in ES3 - * [Deps] Update `object-keys`, `define-properties` - * [Dev Deps] Update `browserify`, `nsp`, `eslint` - * [Tests] Test up to `io.js` `v2.3` - -2.0.2 / 2015-05-20 -================== - * Make sure `.shim` is non-enumerable. - * Refactor `.shim` implementation to use `define-properties` predicates, rather than `delete`ing the original. - * Update docs to match spec/implementation. (#11) - * Add `npm run eslint` - * Test up to `io.js` `v2.0` - * Update `jscs`, `browserify`, `covert` - -2.0.1 / 2015-04-12 -================== - * Make sure non-enumerable Symbols are excluded. - -2.0.0 / 2015-04-12 -================== - * Make sure the shim function overwrites a broken implementation with pending exceptions. - * Ensure shim is not enumerable using `define-properties` - * Ensure `Object.assign` includes symbols. - * All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. - * Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. - * Add `npm run security` via `nsp` - * Update `browserify`, `jscs`, `tape`, `object-keys`, `is` - -1.1.1 / 2014-12-14 -================== - * Actually include the browser build in `npm` - -1.1.0 / 2014-12-14 -================== - * Add `npm run build`, and build an automatic-shimming browser distribution as part of the npm publish process. - * Update `is`, `jscs` - -1.0.3 / 2014-11-29 -================== - * Revert "optimize --production installs" - -1.0.2 / 2014-11-27 -================== - * Update `jscs`, `is`, `object-keys`, `tape` - * Add badges to README - * Name URLs in README - * Lock `covert` to `v1.0.0` - * Optimize --production installs - -1.0.1 / 2014-08-26 -================== - * Update `is`, `covert` - -1.0.0 / 2014-08-07 -================== - * Update `object-keys`, `tape` - -0.5.0 / 2014-07-31 -================== - * Object.assign no longer throws on null or undefined sources, per https://bugs.ecmascript.org/show_bug.cgi?id=3096 - -0.4.3 / 2014-07-30 -================== - * Don’t modify vars in the function signature, since it deoptimizes v8 - -0.4.2 / 2014-07-30 -================== - * Fixing the version number: v0.4.2 - -0.4.1 / 2014-07-19 -================== - * Revert "Use the native Object.keys if it’s available." - -0.4.0 / 2014-07-19 -================== - * Use the native Object.keys if it’s available. - * Fixes [#2](https://github.com/ljharb/object.assign/issues/2). - * Adding failing tests for [#2](https://github.com/ljharb/object.assign/issues/2). - * Fix indentation. - * Adding `npm run lint` - * Update `tape`, `covert` - * README: Use SVG badge for Travis [#1](https://github.com/ljharb/object.assign/issues/1) from mathiasbynens/patch-1 - -0.3.1 / 2014-04-10 -================== - * Object.assign does partially modify objects if it throws, per https://twitter.com/awbjs/status/454320863093862400 - -0.3.0 / 2014-04-10 -================== - * Update with newest ES6 behavior - Object.assign now takes a variable number of source objects. - * Update `tape` - * Make sure old and unstable nodes don’t fail Travis - -0.2.1 / 2014-03-16 -================== - * Let object-keys handle the fallback - * Update dependency badges - * Adding bower.json - -0.2.0 / 2014-03-16 -================== - * Use a for loop, because ES3 browsers don’t have "reduce" - -0.1.1 / 2014-03-14 -================== - * Updating readme - -0.1.0 / 2014-03-14 -================== - * Initial release. - diff --git a/build/node_modules/object.assign/LICENSE b/build/node_modules/object.assign/LICENSE deleted file mode 100644 index ab29cbd6..00000000 --- a/build/node_modules/object.assign/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/object.assign/README.md b/build/node_modules/object.assign/README.md deleted file mode 100644 index 70b6ac44..00000000 --- a/build/node_modules/object.assign/README.md +++ /dev/null @@ -1,135 +0,0 @@ -#object.assign [![Version Badge][npm-version-svg]][npm-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][npm-url] - -[![browser support][testling-png]][testling-url] - -An Object.assign shim. Invoke its "shim" method to shim Object.assign if it is unavailable. - -This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](http://www.ecma-international.org/ecma-262/6.0/#sec-object.assign). In an ES6 environment, it will also work properly with `Symbol`s. - -Takes a minimum of 2 arguments: `target` and `source`. -Takes a variable sized list of source arguments - at least 1, as many as you want. -Throws a TypeError if the `target` argument is `null` or `undefined`. - -Most common usage: -```js -var assign = require('object.assign').getPolyfill(); // returns native method if compliant - /* or */ -var assign = require('object.assign/polyfill')(); // returns native method if compliant -``` - -## Example - -```js -var assert = require('assert'); - -// Multiple sources! -var target = { a: true }; -var source1 = { b: true }; -var source2 = { c: true }; -var sourceN = { n: true }; - -var expected = { - a: true, - b: true, - c: true, - n: true -}; - -assign(target, source1, source2, sourceN); -assert.deepEqual(target, expected); // AWESOME! -``` - -```js -var target = { - a: true, - b: true, - c: true -}; -var source1 = { - c: false, - d: false -}; -var sourceN = { - e: false -}; - -var assigned = assign(target, source1, sourceN); -assert.equal(target, assigned); // returns the target object -assert.deepEqual(assigned, { - a: true, - b: true, - c: false, - d: false, - e: false -}); -``` - -```js -/* when Object.assign is not present */ -delete Object.assign; -var shimmedAssign = require('object.assign').shim(); - /* or */ -var shimmedAssign = require('object.assign/shim')(); - -assert.equal(shimmedAssign, assign); - -var target = { - a: true, - b: true, - c: true -}; -var source = { - c: false, - d: false, - e: false -}; - -var assigned = assign(target, source); -assert.deepEqual(Object.assign(target, source), assign(target, source)); -``` - -```js -/* when Object.assign is present */ -var shimmedAssign = require('object.assign').shim(); -assert.equal(shimmedAssign, Object.assign); - -var target = { - a: true, - b: true, - c: true -}; -var source = { - c: false, - d: false, - e: false -}; - -assert.deepEqual(Object.assign(target, source), assign(target, source)); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[npm-url]: https://npmjs.org/package/object.assign -[npm-version-svg]: http://versionbadg.es/ljharb/object.assign.svg -[travis-svg]: https://travis-ci.org/ljharb/object.assign.svg -[travis-url]: https://travis-ci.org/ljharb/object.assign -[deps-svg]: https://david-dm.org/ljharb/object.assign.svg?theme=shields.io -[deps-url]: https://david-dm.org/ljharb/object.assign -[dev-deps-svg]: https://david-dm.org/ljharb/object.assign/dev-status.svg?theme=shields.io -[dev-deps-url]: https://david-dm.org/ljharb/object.assign#info=devDependencies -[testling-png]: https://ci.testling.com/ljharb/object.assign.png -[testling-url]: https://ci.testling.com/ljharb/object.assign -[npm-badge-png]: https://nodei.co/npm/object.assign.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/object.assign.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/object.assign.svg -[downloads-url]: http://npm-stat.com/charts.html?package=object.assign diff --git a/build/node_modules/object.assign/auto.js b/build/node_modules/object.assign/auto.js deleted file mode 100644 index 8ebf606c..00000000 --- a/build/node_modules/object.assign/auto.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require('./shim')(); diff --git a/build/node_modules/object.assign/dist/browser.js b/build/node_modules/object.assign/dist/browser.js deleted file mode 100644 index 15f0e20a..00000000 --- a/build/node_modules/object.assign/dist/browser.js +++ /dev/null @@ -1,865 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1) { - return callBind(intrinsic); - } - return intrinsic; -}; - -},{"./":5,"get-intrinsic":9}],5:[function(require,module,exports){ -'use strict'; - -var bind = require('function-bind'); -var GetIntrinsic = require('get-intrinsic'); - -var $apply = GetIntrinsic('%Function.prototype.apply%'); -var $call = GetIntrinsic('%Function.prototype.call%'); -var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); - -var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); - -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = null; - } -} - -module.exports = function callBind() { - return $reflectApply(bind, $call, arguments); -}; - -var applyBind = function applyBind() { - return $reflectApply(bind, $apply, arguments); -}; - -if ($defineProperty) { - $defineProperty(module.exports, 'apply', { value: applyBind }); -} else { - module.exports.apply = applyBind; -} - -},{"function-bind":8,"get-intrinsic":9}],6:[function(require,module,exports){ -'use strict'; - -var keys = require('object-keys'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; - -var toStr = Object.prototype.toString; -var concat = Array.prototype.concat; -var origDefineProperty = Object.defineProperty; - -var isFunction = function (fn) { - return typeof fn === 'function' && toStr.call(fn) === '[object Function]'; -}; - -var arePropertyDescriptorsSupported = function () { - var obj = {}; - try { - origDefineProperty(obj, 'x', { enumerable: false, value: obj }); - // eslint-disable-next-line no-unused-vars, no-restricted-syntax - for (var _ in obj) { // jscs:ignore disallowUnusedVariables - return false; - } - return obj.x === obj; - } catch (e) { /* this is IE 8. */ - return false; - } -}; -var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported(); - -var defineProperty = function (object, name, value, predicate) { - if (name in object && (!isFunction(predicate) || !predicate())) { - return; - } - if (supportsDescriptors) { - origDefineProperty(object, name, { - configurable: true, - enumerable: false, - value: value, - writable: true - }); - } else { - object[name] = value; - } -}; - -var defineProperties = function (object, map) { - var predicates = arguments.length > 2 ? arguments[2] : {}; - var props = keys(map); - if (hasSymbols) { - props = concat.call(props, Object.getOwnPropertySymbols(map)); - } - for (var i = 0; i < props.length; i += 1) { - defineProperty(object, props[i], map[props[i]], predicates[props[i]]); - } -}; - -defineProperties.supportsDescriptors = !!supportsDescriptors; - -module.exports = defineProperties; - -},{"object-keys":14}],7:[function(require,module,exports){ -'use strict'; - -/* eslint no-invalid-this: 1 */ - -var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; -var slice = Array.prototype.slice; -var toStr = Object.prototype.toString; -var funcType = '[object Function]'; - -module.exports = function bind(that) { - var target = this; - if (typeof target !== 'function' || toStr.call(target) !== funcType) { - throw new TypeError(ERROR_MESSAGE + target); - } - var args = slice.call(arguments, 1); - - var bound; - var binder = function () { - if (this instanceof bound) { - var result = target.apply( - this, - args.concat(slice.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - } else { - return target.apply( - that, - args.concat(slice.call(arguments)) - ); - } - }; - - var boundLength = Math.max(0, target.length - args.length); - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs.push('$' + i); - } - - bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); - - if (target.prototype) { - var Empty = function Empty() {}; - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - - return bound; -}; - -},{}],8:[function(require,module,exports){ -'use strict'; - -var implementation = require('./implementation'); - -module.exports = Function.prototype.bind || implementation; - -},{"./implementation":7}],9:[function(require,module,exports){ -'use strict'; - -/* globals - AggregateError, - Atomics, - FinalizationRegistry, - SharedArrayBuffer, - WeakRef, -*/ - -var undefined; - -var $SyntaxError = SyntaxError; -var $Function = Function; -var $TypeError = TypeError; - -// eslint-disable-next-line consistent-return -var getEvalledConstructor = function (expressionSyntax) { - try { - // eslint-disable-next-line no-new-func - return Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); - } catch (e) {} -}; - -var $gOPD = Object.getOwnPropertyDescriptor; -if ($gOPD) { - try { - $gOPD({}, ''); - } catch (e) { - $gOPD = null; // this is IE 8, which has a broken gOPD - } -} - -var throwTypeError = function () { - throw new $TypeError(); -}; -var ThrowTypeError = $gOPD - ? (function () { - try { - // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties - arguments.callee; // IE 8 does not throw here - return throwTypeError; - } catch (calleeThrows) { - try { - // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') - return $gOPD(arguments, 'callee').get; - } catch (gOPDthrows) { - return throwTypeError; - } - } - }()) - : throwTypeError; - -var hasSymbols = require('has-symbols')(); - -var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto - -var asyncGenFunction = getEvalledConstructor('async function* () {}'); -var asyncGenFunctionPrototype = asyncGenFunction ? asyncGenFunction.prototype : undefined; -var asyncGenPrototype = asyncGenFunctionPrototype ? asyncGenFunctionPrototype.prototype : undefined; - -var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); - -var INTRINSICS = { - '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, - '%Array%': Array, - '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, - '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, - '%AsyncFromSyncIteratorPrototype%': undefined, - '%AsyncFunction%': getEvalledConstructor('async function () {}'), - '%AsyncGenerator%': asyncGenFunctionPrototype, - '%AsyncGeneratorFunction%': asyncGenFunction, - '%AsyncIteratorPrototype%': asyncGenPrototype ? getProto(asyncGenPrototype) : undefined, - '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, - '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, - '%Boolean%': Boolean, - '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, - '%Date%': Date, - '%decodeURI%': decodeURI, - '%decodeURIComponent%': decodeURIComponent, - '%encodeURI%': encodeURI, - '%encodeURIComponent%': encodeURIComponent, - '%Error%': Error, - '%eval%': eval, // eslint-disable-line no-eval - '%EvalError%': EvalError, - '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, - '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, - '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, - '%Function%': $Function, - '%GeneratorFunction%': getEvalledConstructor('function* () {}'), - '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, - '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, - '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, - '%isFinite%': isFinite, - '%isNaN%': isNaN, - '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, - '%JSON%': typeof JSON === 'object' ? JSON : undefined, - '%Map%': typeof Map === 'undefined' ? undefined : Map, - '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), - '%Math%': Math, - '%Number%': Number, - '%Object%': Object, - '%parseFloat%': parseFloat, - '%parseInt%': parseInt, - '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, - '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, - '%RangeError%': RangeError, - '%ReferenceError%': ReferenceError, - '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, - '%RegExp%': RegExp, - '%Set%': typeof Set === 'undefined' ? undefined : Set, - '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), - '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, - '%String%': String, - '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, - '%Symbol%': hasSymbols ? Symbol : undefined, - '%SyntaxError%': $SyntaxError, - '%ThrowTypeError%': ThrowTypeError, - '%TypedArray%': TypedArray, - '%TypeError%': $TypeError, - '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, - '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, - '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, - '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, - '%URIError%': URIError, - '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, - '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, - '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet -}; - -var LEGACY_ALIASES = { - '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], - '%ArrayPrototype%': ['Array', 'prototype'], - '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], - '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], - '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], - '%ArrayProto_values%': ['Array', 'prototype', 'values'], - '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], - '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], - '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], - '%BooleanPrototype%': ['Boolean', 'prototype'], - '%DataViewPrototype%': ['DataView', 'prototype'], - '%DatePrototype%': ['Date', 'prototype'], - '%ErrorPrototype%': ['Error', 'prototype'], - '%EvalErrorPrototype%': ['EvalError', 'prototype'], - '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], - '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], - '%FunctionPrototype%': ['Function', 'prototype'], - '%Generator%': ['GeneratorFunction', 'prototype'], - '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], - '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], - '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], - '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], - '%JSONParse%': ['JSON', 'parse'], - '%JSONStringify%': ['JSON', 'stringify'], - '%MapPrototype%': ['Map', 'prototype'], - '%NumberPrototype%': ['Number', 'prototype'], - '%ObjectPrototype%': ['Object', 'prototype'], - '%ObjProto_toString%': ['Object', 'prototype', 'toString'], - '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], - '%PromisePrototype%': ['Promise', 'prototype'], - '%PromiseProto_then%': ['Promise', 'prototype', 'then'], - '%Promise_all%': ['Promise', 'all'], - '%Promise_reject%': ['Promise', 'reject'], - '%Promise_resolve%': ['Promise', 'resolve'], - '%RangeErrorPrototype%': ['RangeError', 'prototype'], - '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], - '%RegExpPrototype%': ['RegExp', 'prototype'], - '%SetPrototype%': ['Set', 'prototype'], - '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], - '%StringPrototype%': ['String', 'prototype'], - '%SymbolPrototype%': ['Symbol', 'prototype'], - '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], - '%TypedArrayPrototype%': ['TypedArray', 'prototype'], - '%TypeErrorPrototype%': ['TypeError', 'prototype'], - '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], - '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], - '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], - '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], - '%URIErrorPrototype%': ['URIError', 'prototype'], - '%WeakMapPrototype%': ['WeakMap', 'prototype'], - '%WeakSetPrototype%': ['WeakSet', 'prototype'] -}; - -var bind = require('function-bind'); -var hasOwn = require('has'); -var $concat = bind.call(Function.call, Array.prototype.concat); -var $spliceApply = bind.call(Function.apply, Array.prototype.splice); -var $replace = bind.call(Function.call, String.prototype.replace); - -/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ -var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; -var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ -var stringToPath = function stringToPath(string) { - var result = []; - $replace(string, rePropName, function (match, number, quote, subString) { - result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; - }); - return result; -}; -/* end adaptation */ - -var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { - var intrinsicName = name; - var alias; - if (hasOwn(LEGACY_ALIASES, intrinsicName)) { - alias = LEGACY_ALIASES[intrinsicName]; - intrinsicName = '%' + alias[0] + '%'; - } - - if (hasOwn(INTRINSICS, intrinsicName)) { - var value = INTRINSICS[intrinsicName]; - if (typeof value === 'undefined' && !allowMissing) { - throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); - } - - return { - alias: alias, - name: intrinsicName, - value: value - }; - } - - throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); -}; - -module.exports = function GetIntrinsic(name, allowMissing) { - if (typeof name !== 'string' || name.length === 0) { - throw new $TypeError('intrinsic name must be a non-empty string'); - } - if (arguments.length > 1 && typeof allowMissing !== 'boolean') { - throw new $TypeError('"allowMissing" argument must be a boolean'); - } - - var parts = stringToPath(name); - var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; - - var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); - var intrinsicRealName = intrinsic.name; - var value = intrinsic.value; - var skipFurtherCaching = false; - - var alias = intrinsic.alias; - if (alias) { - intrinsicBaseName = alias[0]; - $spliceApply(parts, $concat([0, 1], alias)); - } - - for (var i = 1, isOwn = true; i < parts.length; i += 1) { - var part = parts[i]; - if (part === 'constructor' || !isOwn) { - skipFurtherCaching = true; - } - - intrinsicBaseName += '.' + part; - intrinsicRealName = '%' + intrinsicBaseName + '%'; - - if (hasOwn(INTRINSICS, intrinsicRealName)) { - value = INTRINSICS[intrinsicRealName]; - } else if (value != null) { - if ($gOPD && (i + 1) >= parts.length) { - var desc = $gOPD(value, part); - isOwn = !!desc; - - if (!allowMissing && !(part in value)) { - throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); - } - // By convention, when a data property is converted to an accessor - // property to emulate a data property that does not suffer from - // the override mistake, that accessor's getter is marked with - // an `originalValue` property. Here, when we detect this, we - // uphold the illusion by pretending to see that original data - // property, i.e., returning the value rather than the getter - // itself. - if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { - value = desc.get; - } else { - value = value[part]; - } - } else { - isOwn = hasOwn(value, part); - value = value[part]; - } - - if (isOwn && !skipFurtherCaching) { - INTRINSICS[intrinsicRealName] = value; - } - } - } - return value; -}; - -},{"function-bind":8,"has":12,"has-symbols":10}],10:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -var origSymbol = global.Symbol; -var hasSymbolSham = require('./shams'); - -module.exports = function hasNativeSymbols() { - if (typeof origSymbol !== 'function') { return false; } - if (typeof Symbol !== 'function') { return false; } - if (typeof origSymbol('foo') !== 'symbol') { return false; } - if (typeof Symbol('bar') !== 'symbol') { return false; } - - return hasSymbolSham(); -}; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./shams":11}],11:[function(require,module,exports){ -'use strict'; - -/* eslint complexity: [2, 18], max-statements: [2, 33] */ -module.exports = function hasSymbols() { - if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } - if (typeof Symbol.iterator === 'symbol') { return true; } - - var obj = {}; - var sym = Symbol('test'); - var symObj = Object(sym); - if (typeof sym === 'string') { return false; } - - if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } - if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } - - // temp disabled per https://github.com/ljharb/object.assign/issues/17 - // if (sym instanceof Symbol) { return false; } - // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 - // if (!(symObj instanceof Symbol)) { return false; } - - // if (typeof Symbol.prototype.toString !== 'function') { return false; } - // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } - - var symVal = 42; - obj[sym] = symVal; - for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax - if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } - - if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } - - var syms = Object.getOwnPropertySymbols(obj); - if (syms.length !== 1 || syms[0] !== sym) { return false; } - - if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } - - if (typeof Object.getOwnPropertyDescriptor === 'function') { - var descriptor = Object.getOwnPropertyDescriptor(obj, sym); - if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } - } - - return true; -}; - -},{}],12:[function(require,module,exports){ -'use strict'; - -var bind = require('function-bind'); - -module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty); - -},{"function-bind":8}],13:[function(require,module,exports){ -'use strict'; - -var keysShim; -if (!Object.keys) { - // modified from https://github.com/es-shims/es5-shim - var has = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - var isArgs = require('./isArguments'); // eslint-disable-line global-require - var isEnumerable = Object.prototype.propertyIsEnumerable; - var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); - var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); - var dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - var equalsConstructorPrototype = function (o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; - }; - var excludedKeys = { - $applicationCache: true, - $console: true, - $external: true, - $frame: true, - $frameElement: true, - $frames: true, - $innerHeight: true, - $innerWidth: true, - $onmozfullscreenchange: true, - $onmozfullscreenerror: true, - $outerHeight: true, - $outerWidth: true, - $pageXOffset: true, - $pageYOffset: true, - $parent: true, - $scrollLeft: true, - $scrollTop: true, - $scrollX: true, - $scrollY: true, - $self: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true, - $window: true - }; - var hasAutomationEqualityBug = (function () { - /* global window */ - if (typeof window === 'undefined') { return false; } - for (var k in window) { - try { - if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { - try { - equalsConstructorPrototype(window[k]); - } catch (e) { - return true; - } - } - } catch (e) { - return true; - } - } - return false; - }()); - var equalsConstructorPrototypeIfNotBuggy = function (o) { - /* global window */ - if (typeof window === 'undefined' || !hasAutomationEqualityBug) { - return equalsConstructorPrototype(o); - } - try { - return equalsConstructorPrototype(o); - } catch (e) { - return false; - } - }; - - keysShim = function keys(object) { - var isObject = object !== null && typeof object === 'object'; - var isFunction = toStr.call(object) === '[object Function]'; - var isArguments = isArgs(object); - var isString = isObject && toStr.call(object) === '[object String]'; - var theKeys = []; - - if (!isObject && !isFunction && !isArguments) { - throw new TypeError('Object.keys called on a non-object'); - } - - var skipProto = hasProtoEnumBug && isFunction; - if (isString && object.length > 0 && !has.call(object, 0)) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } - - if (isArguments && object.length > 0) { - for (var j = 0; j < object.length; ++j) { - theKeys.push(String(j)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && has.call(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); - - for (var k = 0; k < dontEnums.length; ++k) { - if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { - theKeys.push(dontEnums[k]); - } - } - } - return theKeys; - }; -} -module.exports = keysShim; - -},{"./isArguments":15}],14:[function(require,module,exports){ -'use strict'; - -var slice = Array.prototype.slice; -var isArgs = require('./isArguments'); - -var origKeys = Object.keys; -var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); - -var originalKeys = Object.keys; - -keysShim.shim = function shimObjectKeys() { - if (Object.keys) { - var keysWorksWithArguments = (function () { - // Safari 5.0 bug - var args = Object.keys(arguments); - return args && args.length === arguments.length; - }(1, 2)); - if (!keysWorksWithArguments) { - Object.keys = function keys(object) { // eslint-disable-line func-name-matching - if (isArgs(object)) { - return originalKeys(slice.call(object)); - } - return originalKeys(object); - }; - } - } else { - Object.keys = keysShim; - } - return Object.keys || keysShim; -}; - -module.exports = keysShim; - -},{"./implementation":13,"./isArguments":15}],15:[function(require,module,exports){ -'use strict'; - -var toStr = Object.prototype.toString; - -module.exports = function isArguments(value) { - var str = toStr.call(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = str !== '[object Array]' && - value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - toStr.call(value.callee) === '[object Function]'; - } - return isArgs; -}; - -},{}],16:[function(require,module,exports){ -'use strict'; - -var implementation = require('./implementation'); - -var lacksProperEnumerationOrder = function () { - if (!Object.assign) { - return false; - } - /* - * v8, specifically in node 4.x, has a bug with incorrect property enumeration order - * note: this does not detect the bug unless there's 20 characters - */ - var str = 'abcdefghijklmnopqrst'; - var letters = str.split(''); - var map = {}; - for (var i = 0; i < letters.length; ++i) { - map[letters[i]] = letters[i]; - } - var obj = Object.assign({}, map); - var actual = ''; - for (var k in obj) { - actual += k; - } - return str !== actual; -}; - -var assignHasPendingExceptions = function () { - if (!Object.assign || !Object.preventExtensions) { - return false; - } - /* - * Firefox 37 still has "pending exception" logic in its Object.assign implementation, - * which is 72% slower than our shim, and Firefox 40's native implementation. - */ - var thrower = Object.preventExtensions({ 1: 2 }); - try { - Object.assign(thrower, 'xy'); - } catch (e) { - return thrower[1] === 'y'; - } - return false; -}; - -module.exports = function getPolyfill() { - if (!Object.assign) { - return implementation; - } - if (lacksProperEnumerationOrder()) { - return implementation; - } - if (assignHasPendingExceptions()) { - return implementation; - } - return Object.assign; -}; - -},{"./implementation":2}],17:[function(require,module,exports){ -'use strict'; - -var define = require('define-properties'); -var getPolyfill = require('./polyfill'); - -module.exports = function shimAssign() { - var polyfill = getPolyfill(); - define( - Object, - { assign: polyfill }, - { assign: function () { return Object.assign !== polyfill; } } - ); - return polyfill; -}; - -},{"./polyfill":16,"define-properties":6}]},{},[1]); diff --git a/build/node_modules/object.assign/hasSymbols.js b/build/node_modules/object.assign/hasSymbols.js deleted file mode 100644 index 34841e01..00000000 --- a/build/node_modules/object.assign/hasSymbols.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var keys = require('object-keys'); - -module.exports = function hasSymbols() { - if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } - if (typeof Symbol.iterator === 'symbol') { return true; } - - var obj = {}; - var sym = Symbol('test'); - var symObj = Object(sym); - if (typeof sym === 'string') { return false; } - - if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } - if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } - - /* - * temp disabled per https://github.com/ljharb/object.assign/issues/17 - * if (sym instanceof Symbol) { return false; } - * temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 - * if (!(symObj instanceof Symbol)) { return false; } - */ - - var symVal = 42; - obj[sym] = symVal; - for (sym in obj) { return false; } // eslint-disable-line no-unreachable-loop - if (keys(obj).length !== 0) { return false; } - if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } - - if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } - - var syms = Object.getOwnPropertySymbols(obj); - if (syms.length !== 1 || syms[0] !== sym) { return false; } - - if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } - - if (typeof Object.getOwnPropertyDescriptor === 'function') { - var descriptor = Object.getOwnPropertyDescriptor(obj, sym); - if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } - } - - return true; -}; diff --git a/build/node_modules/object.assign/implementation.js b/build/node_modules/object.assign/implementation.js deleted file mode 100644 index 567efe90..00000000 --- a/build/node_modules/object.assign/implementation.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; - -// modified from https://github.com/es-shims/es6-shim -var keys = require('object-keys'); -var canBeObject = function (obj) { - return typeof obj !== 'undefined' && obj !== null; -}; -var hasSymbols = require('has-symbols/shams')(); -var callBound = require('call-bind/callBound'); -var toObject = Object; -var $push = callBound('Array.prototype.push'); -var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; - -// eslint-disable-next-line no-unused-vars -module.exports = function assign(target, source1) { - if (!canBeObject(target)) { throw new TypeError('target must be an object'); } - var objTarget = toObject(target); - var s, source, i, props, syms, value, key; - for (s = 1; s < arguments.length; ++s) { - source = toObject(arguments[s]); - props = keys(source); - var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols); - if (getSymbols) { - syms = getSymbols(source); - for (i = 0; i < syms.length; ++i) { - key = syms[i]; - if ($propIsEnumerable(source, key)) { - $push(props, key); - } - } - } - for (i = 0; i < props.length; ++i) { - key = props[i]; - value = source[key]; - if ($propIsEnumerable(source, key)) { - objTarget[key] = value; - } - } - } - return objTarget; -}; diff --git a/build/node_modules/object.assign/index.js b/build/node_modules/object.assign/index.js deleted file mode 100644 index 9b506037..00000000 --- a/build/node_modules/object.assign/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var defineProperties = require('define-properties'); -var callBind = require('call-bind'); - -var implementation = require('./implementation'); -var getPolyfill = require('./polyfill'); -var shim = require('./shim'); - -var polyfill = callBind.apply(getPolyfill()); -// eslint-disable-next-line no-unused-vars -var bound = function assign(target, source1) { - return polyfill(Object, arguments); -}; - -defineProperties(bound, { - getPolyfill: getPolyfill, - implementation: implementation, - shim: shim -}); - -module.exports = bound; diff --git a/build/node_modules/object.assign/node_modules/object-keys/.editorconfig b/build/node_modules/object.assign/node_modules/object-keys/.editorconfig deleted file mode 100644 index eaa21416..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -root = true - -[*] -indent_style = tab; -insert_final_newline = true; -quote_type = auto; -space_after_anonymous_functions = true; -space_after_control_statements = true; -spaces_around_operators = true; -trim_trailing_whitespace = true; -spaces_in_brackets = false; -end_of_line = lf; - diff --git a/build/node_modules/object.assign/node_modules/object-keys/.eslintrc b/build/node_modules/object.assign/node_modules/object-keys/.eslintrc deleted file mode 100644 index 9a8d5b0e..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 23], - "id-length": [2, { "min": 1, "max": 40 }], - "max-params": [2, 3], - "max-statements": [2, 23], - "max-statements-per-line": [2, { "max": 2 }], - "no-extra-parens": [1], - "no-invalid-this": [1], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": [2, "after"] - } -} diff --git a/build/node_modules/object.assign/node_modules/object-keys/.travis.yml b/build/node_modules/object.assign/node_modules/object-keys/.travis.yml deleted file mode 100644 index 94a6ce42..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/.travis.yml +++ /dev/null @@ -1,277 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "11.8" - - "10.15" - - "9.11" - - "8.15" - - "7.10" - - "6.16" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "11.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "11.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.15" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.14" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true - - env: COVERAGE=true - - env: POSTTEST=true diff --git a/build/node_modules/object.assign/node_modules/object-keys/CHANGELOG.md b/build/node_modules/object.assign/node_modules/object-keys/CHANGELOG.md deleted file mode 100644 index b7d92df2..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/CHANGELOG.md +++ /dev/null @@ -1,232 +0,0 @@ -1.1.1 / 2019-04-06 -================= - * [Fix] exclude deprecated Firefox keys (#53) - -1.1.0 / 2019-02-10 -================= - * [New] [Refactor] move full implementation to `implementation` entry point - * [Refactor] only evaluate the implementation if `Object.keys` is not present - * [Tests] up to `node` `v11.8`, `v10.15`, `v8.15`, `v6.16` - * [Tests] remove jscs - * [Tests] switch to `npm audit` from `nsp` - -1.0.12 / 2018-06-18 -================= - * [Fix] avoid accessing `window.applicationCache`, to avoid issues with latest Chrome on HTTP (#46) - -1.0.11 / 2016-07-05 -================= - * [Fix] exclude keys regarding the style (eg. `pageYOffset`) on `window` to avoid reflow (#32) - -1.0.10 / 2016-07-04 -================= - * [Fix] exclude `height` and `width` keys on `window` to avoid reflow (#31) - * [Fix] In IE 6, `window.external` makes `Object.keys` throw - * [Tests] up to `node` `v6.2`, `v5.10`, `v4.4` - * [Tests] use pretest/posttest for linting/security - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` - * [Dev Deps] remove unused eccheck script + dep - -1.0.9 / 2015-10-19 -================= - * [Fix] Blacklist 'frame' property on window (#16, #17) - * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` - -1.0.8 / 2015-10-14 -================= - * [Fix] wrap automation equality bug checking in try/catch, per [es5-shim#327](https://github.com/es-shims/es5-shim/issues/327) - * [Fix] Blacklist 'window.frameElement' per [es5-shim#322](https://github.com/es-shims/es5-shim/issues/322) - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - * [Tests] up to `io.js` `v3.3`, `node` `v4.2` - * [Dev Deps] update `eslint`, `tape`, `@ljharb/eslint-config`, `jscs` - -1.0.7 / 2015-07-18 -================= - * [Fix] A proper fix for 176f03335e90d5c8d0d8125a99f27819c9b9cdad / https://github.com/es-shims/es5-shim/issues/275 that doesn't break dontEnum/constructor fixes in IE 8. - * [Fix] Remove deprecation message in Chrome by touching deprecated window properties (#15) - * [Tests] Improve test output for automation equality bugfix - * [Tests] Test on `io.js` `v2.4` - -1.0.6 / 2015-07-09 -================= - * [Fix] Use an object lookup rather than ES5's `indexOf` (#14) - * [Tests] ES3 browsers don't have `Array.isArray` - * [Tests] Fix `no-shadow` rule, as well as an IE 8 bug caused by engine NFE shadowing bugs. - -1.0.5 / 2015-07-03 -================= - * [Fix] Fix a flabbergasting IE 8 bug where `localStorage.constructor.prototype === localStorage` throws - * [Tests] Test up to `io.js` `v2.3` - * [Dev Deps] Update `nsp`, `eslint` - -1.0.4 / 2015-05-23 -================= - * Fix a Safari 5.0 bug with `Object.keys` not working with `arguments` - * Test on latest `node` and `io.js` - * Update `jscs`, `tape`, `eslint`, `nsp`, `is`, `editorconfig-tools`, `covert` - -1.0.3 / 2015-01-06 -================= - * Revert "Make `object-keys` more robust against later environment tampering" to maintain ES3 compliance - -1.0.2 / 2014-12-28 -================= - * Update lots of dev dependencies - * Tweaks to README - * Make `object-keys` more robust against later environment tampering - -1.0.1 / 2014-09-03 -================= - * Update URLs and badges in README - -1.0.0 / 2014-08-26 -================= - * v1.0.0 - -0.6.1 / 2014-08-25 -================= - * v0.6.1 - * Updating dependencies (tape, covert, is) - * Update badges in readme - * Use separate var statements - -0.6.0 / 2014-04-23 -================= - * v0.6.0 - * Updating dependencies (tape, covert) - * Make sure boxed primitives, and arguments objects, work properly in ES3 browsers - * Improve test matrix: test all node versions, but only latest two stables are a failure - * Remove internal foreach shim. - -0.5.1 / 2014-03-09 -================= - * 0.5.1 - * Updating dependencies (tape, covert, is) - * Removing forEach from the module (but keeping it in tests) - -0.5.0 / 2014-01-30 -================= - * 0.5.0 - * Explicitly returning the shim, instead of returning native Object.keys when present - * Adding a changelog. - * Cleaning up IIFE wrapping - * Testing on node 0.4 through 0.11 - -0.4.0 / 2013-08-14 -================== - - * v0.4.0 - * In Chrome 4-10 and Safari 4, typeof (new RegExp) === 'function' - * If it's a string, make sure to use charAt instead of brackets. - * Only use Function#call if necessary. - * Making sure the context tests actually run. - * Better function detection - * Adding the android browser - * Fixing testling files - * Updating tape - * Removing the "is" dependency. - * Making an isArguments shim. - * Adding a local forEach shim and tests. - * Updating paths. - * Moving the shim test. - * v0.3.0 - -0.3.0 / 2013-05-18 -================== - - * README tweak. - * Fixing constructor enum issue. Fixes [#5](https://github.com/ljharb/object-keys/issues/5). - * Adding a test for [#5](https://github.com/ljharb/object-keys/issues/5) - * Updating readme. - * Updating dependencies. - * Giving credit to lodash. - * Make sure that a prototype's constructor property is not enumerable. Fixes [#3](https://github.com/ljharb/object-keys/issues/3). - * Adding additional tests to handle arguments objects, and to skip "prototype" in functions. Fixes [#2](https://github.com/ljharb/object-keys/issues/2). - * Fixing a typo on this test for [#3](https://github.com/ljharb/object-keys/issues/3). - * Adding node 0.10 to travis. - * Adding an IE < 9 test per [#3](https://github.com/ljharb/object-keys/issues/3) - * Adding an iOS 5 mobile Safari test per [#2](https://github.com/ljharb/object-keys/issues/2) - * Moving "indexof" and "is" to be dev dependencies. - * Making sure the shim works with functions. - * Flattening the tests. - -0.2.0 / 2013-05-10 -================== - - * v0.2.0 - * Object.keys should work with arrays. - -0.1.8 / 2013-05-10 -================== - - * v0.1.8 - * Upgrading dependencies. - * Using a simpler check. - * Fixing a bug in hasDontEnumBug browsers. - * Using the newest tape! - * Fixing this error test. - * "undefined" is probably a reserved word in ES3. - * Better test message. - -0.1.7 / 2013-04-17 -================== - - * Upgrading "is" once more. - * The key "null" is breaking some browsers. - -0.1.6 / 2013-04-17 -================== - - * v0.1.6 - * Upgrading "is" - -0.1.5 / 2013-04-14 -================== - - * Bumping version. - * Adding more testling browsers. - * Updating "is" - -0.1.4 / 2013-04-08 -================== - - * Using "is" instead of "is-extended". - -0.1.3 / 2013-04-07 -================== - - * Using "foreach" instead of my own shim. - * Removing "tap"; I'll just wait for "tape" to fix its node 0.10 bug. - -0.1.2 / 2013-04-03 -================== - - * Adding dependency status; moving links to an index at the bottom. - * Upgrading is-extended; version 0.1.2 - * Adding an npm version badge. - -0.1.1 / 2013-04-01 -================== - - * Adding Travis CI. - * Bumping the version. - * Adding indexOf since IE sucks. - * Adding a forEach shim since older browsers don't have Array#forEach. - * Upgrading tape - 0.3.2 uses Array#map - * Using explicit end instead of plan. - * Can't test with Array.isArray in older browsers. - * Using is-extended. - * Fixing testling files. - * JSHint/JSLint-ing. - * Removing an unused object. - * Using strict mode. - -0.1.0 / 2013-03-30 -================== - - * Changing the exports should have meant a higher version bump. - * Oops, fixing the repo URL. - * Adding more tests. - * 0.0.2 - * Merge branch 'export_one_thing'; closes [#1](https://github.com/ljharb/object-keys/issues/1) - * Move shim export to a separate file. diff --git a/build/node_modules/object.assign/node_modules/object-keys/LICENSE b/build/node_modules/object.assign/node_modules/object-keys/LICENSE deleted file mode 100644 index 28553fdd..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2013 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/build/node_modules/object.assign/node_modules/object-keys/README.md b/build/node_modules/object.assign/node_modules/object-keys/README.md deleted file mode 100644 index ed4c2770..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/README.md +++ /dev/null @@ -1,76 +0,0 @@ -#object-keys [![Version Badge][npm-version-svg]][package-url] - -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -[![browser support][testling-svg]][testling-url] - -An Object.keys shim. Invoke its "shim" method to shim Object.keys if it is unavailable. - -Most common usage: -```js -var keys = Object.keys || require('object-keys'); -``` - -## Example - -```js -var keys = require('object-keys'); -var assert = require('assert'); -var obj = { - a: true, - b: true, - c: true -}; - -assert.deepEqual(keys(obj), ['a', 'b', 'c']); -``` - -```js -var keys = require('object-keys'); -var assert = require('assert'); -/* when Object.keys is not present */ -delete Object.keys; -var shimmedKeys = keys.shim(); -assert.equal(shimmedKeys, keys); -assert.deepEqual(Object.keys(obj), keys(obj)); -``` - -```js -var keys = require('object-keys'); -var assert = require('assert'); -/* when Object.keys is present */ -var shimmedKeys = keys.shim(); -assert.equal(shimmedKeys, Object.keys); -assert.deepEqual(Object.keys(obj), keys(obj)); -``` - -## Source -Implementation taken directly from [es5-shim][es5-shim-url], with modifications, including from [lodash][lodash-url]. - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.org/package/object-keys -[npm-version-svg]: http://versionbadg.es/ljharb/object-keys.svg -[travis-svg]: https://travis-ci.org/ljharb/object-keys.svg -[travis-url]: https://travis-ci.org/ljharb/object-keys -[deps-svg]: https://david-dm.org/ljharb/object-keys.svg -[deps-url]: https://david-dm.org/ljharb/object-keys -[dev-deps-svg]: https://david-dm.org/ljharb/object-keys/dev-status.svg -[dev-deps-url]: https://david-dm.org/ljharb/object-keys#info=devDependencies -[testling-svg]: https://ci.testling.com/ljharb/object-keys.png -[testling-url]: https://ci.testling.com/ljharb/object-keys -[es5-shim-url]: https://github.com/es-shims/es5-shim/blob/master/es5-shim.js#L542-589 -[lodash-url]: https://github.com/lodash/lodash -[npm-badge-png]: https://nodei.co/npm/object-keys.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/object-keys.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/object-keys.svg -[downloads-url]: http://npm-stat.com/charts.html?package=object-keys - diff --git a/build/node_modules/object.assign/node_modules/object-keys/implementation.js b/build/node_modules/object.assign/node_modules/object-keys/implementation.js deleted file mode 100644 index 5b329861..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/implementation.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -var keysShim; -if (!Object.keys) { - // modified from https://github.com/es-shims/es5-shim - var has = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - var isArgs = require('./isArguments'); // eslint-disable-line global-require - var isEnumerable = Object.prototype.propertyIsEnumerable; - var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); - var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); - var dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - var equalsConstructorPrototype = function (o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; - }; - var excludedKeys = { - $applicationCache: true, - $console: true, - $external: true, - $frame: true, - $frameElement: true, - $frames: true, - $innerHeight: true, - $innerWidth: true, - $onmozfullscreenchange: true, - $onmozfullscreenerror: true, - $outerHeight: true, - $outerWidth: true, - $pageXOffset: true, - $pageYOffset: true, - $parent: true, - $scrollLeft: true, - $scrollTop: true, - $scrollX: true, - $scrollY: true, - $self: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true, - $window: true - }; - var hasAutomationEqualityBug = (function () { - /* global window */ - if (typeof window === 'undefined') { return false; } - for (var k in window) { - try { - if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { - try { - equalsConstructorPrototype(window[k]); - } catch (e) { - return true; - } - } - } catch (e) { - return true; - } - } - return false; - }()); - var equalsConstructorPrototypeIfNotBuggy = function (o) { - /* global window */ - if (typeof window === 'undefined' || !hasAutomationEqualityBug) { - return equalsConstructorPrototype(o); - } - try { - return equalsConstructorPrototype(o); - } catch (e) { - return false; - } - }; - - keysShim = function keys(object) { - var isObject = object !== null && typeof object === 'object'; - var isFunction = toStr.call(object) === '[object Function]'; - var isArguments = isArgs(object); - var isString = isObject && toStr.call(object) === '[object String]'; - var theKeys = []; - - if (!isObject && !isFunction && !isArguments) { - throw new TypeError('Object.keys called on a non-object'); - } - - var skipProto = hasProtoEnumBug && isFunction; - if (isString && object.length > 0 && !has.call(object, 0)) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } - - if (isArguments && object.length > 0) { - for (var j = 0; j < object.length; ++j) { - theKeys.push(String(j)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && has.call(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); - - for (var k = 0; k < dontEnums.length; ++k) { - if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { - theKeys.push(dontEnums[k]); - } - } - } - return theKeys; - }; -} -module.exports = keysShim; diff --git a/build/node_modules/object.assign/node_modules/object-keys/index.js b/build/node_modules/object.assign/node_modules/object-keys/index.js deleted file mode 100644 index a43807d2..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/index.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -var slice = Array.prototype.slice; -var isArgs = require('./isArguments'); - -var origKeys = Object.keys; -var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); - -var originalKeys = Object.keys; - -keysShim.shim = function shimObjectKeys() { - if (Object.keys) { - var keysWorksWithArguments = (function () { - // Safari 5.0 bug - var args = Object.keys(arguments); - return args && args.length === arguments.length; - }(1, 2)); - if (!keysWorksWithArguments) { - Object.keys = function keys(object) { // eslint-disable-line func-name-matching - if (isArgs(object)) { - return originalKeys(slice.call(object)); - } - return originalKeys(object); - }; - } - } else { - Object.keys = keysShim; - } - return Object.keys || keysShim; -}; - -module.exports = keysShim; diff --git a/build/node_modules/object.assign/node_modules/object-keys/isArguments.js b/build/node_modules/object.assign/node_modules/object-keys/isArguments.js deleted file mode 100644 index f2a2a901..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/isArguments.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var toStr = Object.prototype.toString; - -module.exports = function isArguments(value) { - var str = toStr.call(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = str !== '[object Array]' && - value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - toStr.call(value.callee) === '[object Function]'; - } - return isArgs; -}; diff --git a/build/node_modules/object.assign/node_modules/object-keys/package.json b/build/node_modules/object.assign/node_modules/object-keys/package.json deleted file mode 100644 index b659c508..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/package.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "_from": "object-keys@^1.1.1", - "_id": "object-keys@1.1.1", - "_inBundle": false, - "_integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "_location": "/object.assign/object-keys", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "object-keys@^1.1.1", - "name": "object-keys", - "escapedName": "object-keys", - "rawSpec": "^1.1.1", - "saveSpec": null, - "fetchSpec": "^1.1.1" - }, - "_requiredBy": [ - "/object.assign" - ], - "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "_shasum": "1c47f272df277f3b1daf061677d9c82e2322c60e", - "_spec": "object-keys@^1.1.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/object.assign", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/ljharb/object-keys/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net" - }, - { - "name": "Ivan Starkov", - "email": "istarkov@gmail.com" - }, - { - "name": "Gary Katsevman", - "email": "git@gkatsev.com" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "An Object.keys replacement, in case Object.keys is not available. From https://github.com/es-shims/es5-shim", - "devDependencies": { - "@ljharb/eslint-config": "^13.1.1", - "covert": "^1.1.1", - "eslint": "^5.13.0", - "foreach": "^2.0.5", - "indexof": "^0.0.1", - "is": "^3.3.0", - "tape": "^4.9.2" - }, - "engines": { - "node": ">= 0.4" - }, - "homepage": "https://github.com/ljharb/object-keys#readme", - "keywords": [ - "Object.keys", - "keys", - "ES5", - "shim" - ], - "license": "MIT", - "main": "index.js", - "name": "object-keys", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/object-keys.git" - }, - "scripts": { - "audit": "npm audit", - "coverage": "covert test/*.js", - "coverage-quiet": "covert test/*.js --quiet", - "lint": "eslint .", - "postaudit": "rm package-lock.json", - "posttest": "npm run --silent audit", - "preaudit": "npm install --package-lock --package-lock-only", - "pretest": "npm run --silent lint", - "test": "npm run --silent tests-only", - "tests-only": "node test/index.js" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.1" -} diff --git a/build/node_modules/object.assign/node_modules/object-keys/test/index.js b/build/node_modules/object.assign/node_modules/object-keys/test/index.js deleted file mode 100644 index 5402465a..00000000 --- a/build/node_modules/object.assign/node_modules/object-keys/test/index.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -require('./isArguments'); - -require('./shim'); diff --git a/build/node_modules/object.assign/package.json b/build/node_modules/object.assign/package.json deleted file mode 100644 index 5a6100c4..00000000 --- a/build/node_modules/object.assign/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_from": "object.assign@^4.1.2", - "_id": "object.assign@4.1.2", - "_inBundle": false, - "_integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "_location": "/object.assign", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "object.assign@^4.1.2", - "name": "object.assign", - "escapedName": "object.assign", - "rawSpec": "^4.1.2", - "saveSpec": null, - "fetchSpec": "^4.1.2" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "_shasum": "0ed54a342eceb37b38ff76eb831a0e788cb63940", - "_spec": "object.assign@^4.1.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband" - }, - "bugs": { - "url": "https://github.com/ljharb/object.assign/issues" - }, - "bundleDependencies": false, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "deprecated": false, - "description": "ES6 spec-compliant Object.assign shim. From https://github.com/es-shims/es6-shim", - "devDependencies": { - "@es-shims/api": "^2.1.2", - "@ljharb/eslint-config": "^17.2.0", - "aud": "^1.1.2", - "browserify": "^16.5.2", - "eslint": "^7.12.1", - "for-each": "^0.3.3", - "functions-have-names": "^1.2.1", - "has": "^1.0.3", - "is": "^3.3.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "ses": "^0.10.4", - "tape": "^5.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/ljharb/object.assign#readme", - "keywords": [ - "Object.assign", - "assign", - "ES6", - "extend", - "$.extend", - "jQuery", - "_.extend", - "Underscore", - "es-shim API", - "polyfill", - "shim" - ], - "license": "MIT", - "main": "index.js", - "name": "object.assign", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/object.assign.git" - }, - "scripts": { - "build": "mkdir -p dist && browserify browserShim.js > dist/browser.js", - "lint": "eslint .", - "posttest": "aud --production", - "prepublish": "safe-publish-latest && npm run build", - "pretest": "npm run lint && es-shim-api --bound", - "test": "npm run tests-only && npm run test:ses", - "test:implementation": "nyc node test", - "test:native": "nyc node test/native", - "test:ses": "node test/ses-compat", - "test:shim": "nyc node test/shimmed", - "tests-only": "npm run test:implementation && npm run test:shim" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "4.1.2" -} diff --git a/build/node_modules/object.assign/polyfill.js b/build/node_modules/object.assign/polyfill.js deleted file mode 100644 index ca94aea9..00000000 --- a/build/node_modules/object.assign/polyfill.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -var implementation = require('./implementation'); - -var lacksProperEnumerationOrder = function () { - if (!Object.assign) { - return false; - } - /* - * v8, specifically in node 4.x, has a bug with incorrect property enumeration order - * note: this does not detect the bug unless there's 20 characters - */ - var str = 'abcdefghijklmnopqrst'; - var letters = str.split(''); - var map = {}; - for (var i = 0; i < letters.length; ++i) { - map[letters[i]] = letters[i]; - } - var obj = Object.assign({}, map); - var actual = ''; - for (var k in obj) { - actual += k; - } - return str !== actual; -}; - -var assignHasPendingExceptions = function () { - if (!Object.assign || !Object.preventExtensions) { - return false; - } - /* - * Firefox 37 still has "pending exception" logic in its Object.assign implementation, - * which is 72% slower than our shim, and Firefox 40's native implementation. - */ - var thrower = Object.preventExtensions({ 1: 2 }); - try { - Object.assign(thrower, 'xy'); - } catch (e) { - return thrower[1] === 'y'; - } - return false; -}; - -module.exports = function getPolyfill() { - if (!Object.assign) { - return implementation; - } - if (lacksProperEnumerationOrder()) { - return implementation; - } - if (assignHasPendingExceptions()) { - return implementation; - } - return Object.assign; -}; diff --git a/build/node_modules/object.assign/shim.js b/build/node_modules/object.assign/shim.js deleted file mode 100644 index 9f896ae3..00000000 --- a/build/node_modules/object.assign/shim.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var define = require('define-properties'); -var getPolyfill = require('./polyfill'); - -module.exports = function shimAssign() { - var polyfill = getPolyfill(); - define( - Object, - { assign: polyfill }, - { assign: function () { return Object.assign !== polyfill; } } - ); - return polyfill; -}; diff --git a/build/node_modules/object.assign/test/index.js b/build/node_modules/object.assign/test/index.js deleted file mode 100644 index 776b2b33..00000000 --- a/build/node_modules/object.assign/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var assign = require('../'); -var test = require('tape'); -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', function (st) { - st['throws'](function () { assign(undefined); }, TypeError, 'undefined is not an object'); - st['throws'](function () { assign(null); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(assign, t); - - t.end(); -}); diff --git a/build/node_modules/object.assign/test/native.js b/build/node_modules/object.assign/test/native.js deleted file mode 100644 index 49a70f79..00000000 --- a/build/node_modules/object.assign/test/native.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -var test = require('tape'); -var defineProperties = require('define-properties'); -var isEnumerable = Object.prototype.propertyIsEnumerable; -var functionsHaveNames = require('functions-have-names')(); - -var runTests = require('./tests'); - -test('native', function (t) { - t.equal(Object.assign.length, 2, 'Object.assign has a length of 2'); - t.test('Function name', { skip: !functionsHaveNames }, function (st) { - st.equal(Object.assign.name, 'assign', 'Object.assign has name "assign"'); - st.end(); - }); - - t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) { - et.equal(false, isEnumerable.call(Object, 'assign'), 'Object.assign is not enumerable'); - et.end(); - }); - - var supportsStrictMode = (function () { return typeof this === 'undefined'; }()); - - t.test('bad object value', { skip: !supportsStrictMode }, function (st) { - st['throws'](function () { return Object.assign(undefined); }, TypeError, 'undefined is not an object'); - st['throws'](function () { return Object.assign(null); }, TypeError, 'null is not an object'); - st.end(); - }); - - // v8 in node 0.8 and 0.10 have non-enumerable string properties - var stringCharsAreEnumerable = isEnumerable.call('xy', 0); - t.test('when Object.assign is present and has pending exceptions', { skip: !stringCharsAreEnumerable || !Object.preventExtensions }, function (st) { - /* - * Firefox 37 still has "pending exception" logic in its Object.assign implementation, - * which is 72% slower than our shim, and Firefox 40's native implementation. - */ - var thrower = Object.preventExtensions({ 1: '2' }); - var error; - try { Object.assign(thrower, 'xy'); } catch (e) { error = e; } - st.equal(error instanceof TypeError, true, 'error is TypeError'); - st.equal(thrower[1], '2', 'thrower[1] === "2"'); - - st.end(); - }); - - runTests(Object.assign, t); - - t.end(); -}); diff --git a/build/node_modules/object.assign/test/ses-compat.js b/build/node_modules/object.assign/test/ses-compat.js deleted file mode 100644 index 9669eb9a..00000000 --- a/build/node_modules/object.assign/test/ses-compat.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/* globals lockdown */ - -// requiring ses exposes "lockdown" on the global -require('ses'); - -// lockdown freezes the primordials -lockdown({ errorTaming: 'unsafe' }); - -// initialize the module -require('./'); diff --git a/build/node_modules/object.assign/test/shimmed.js b/build/node_modules/object.assign/test/shimmed.js deleted file mode 100644 index ee577587..00000000 --- a/build/node_modules/object.assign/test/shimmed.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -var assign = require('../'); -assign.shim(); - -var test = require('tape'); -var defineProperties = require('define-properties'); -var isEnumerable = Object.prototype.propertyIsEnumerable; -var functionsHaveNames = require('functions-have-names')(); - -var runTests = require('./tests'); - -test('shimmed', function (t) { - t.equal(Object.assign.length, 2, 'Object.assign has a length of 2'); - t.test('Function name', { skip: !functionsHaveNames }, function (st) { - st.equal(Object.assign.name, 'assign', 'Object.assign has name "assign"'); - st.end(); - }); - - t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) { - et.equal(false, isEnumerable.call(Object, 'assign'), 'Object.assign is not enumerable'); - et.end(); - }); - - var supportsStrictMode = (function () { return typeof this === 'undefined'; }()); - - t.test('bad object value', { skip: !supportsStrictMode }, function (st) { - st['throws'](function () { return Object.assign(undefined); }, TypeError, 'undefined is not an object'); - st['throws'](function () { return Object.assign(null); }, TypeError, 'null is not an object'); - st.end(); - }); - - // v8 in node 0.8 and 0.10 have non-enumerable string properties - var stringCharsAreEnumerable = isEnumerable.call('xy', 0); - t.test('when Object.assign is present and has pending exceptions', { skip: !stringCharsAreEnumerable || !Object.preventExtensions }, function (st) { - /* - * Firefox 37 still has "pending exception" logic in its Object.assign implementation, - * which is 72% slower than our shim, and Firefox 40's native implementation. - */ - var thrower = Object.preventExtensions({ 1: '2' }); - var error; - try { Object.assign(thrower, 'xy'); } catch (e) { error = e; } - st.equal(error instanceof TypeError, true, 'error is TypeError'); - st.equal(thrower[1], '2', 'thrower[1] === "2"'); - - st.end(); - }); - - runTests(Object.assign, t); - - t.end(); -}); diff --git a/build/node_modules/object.assign/test/tests.js b/build/node_modules/object.assign/test/tests.js deleted file mode 100644 index 81b13263..00000000 --- a/build/node_modules/object.assign/test/tests.js +++ /dev/null @@ -1,237 +0,0 @@ -'use strict'; - -var hasSymbols = require('has-symbols/shams')(); -var forEach = require('for-each'); -var has = require('has'); - -module.exports = function (assign, t) { - t.test('error cases', function (st) { - st['throws'](function () { assign(null); }, TypeError, 'target must be an object'); - st['throws'](function () { assign(undefined); }, TypeError, 'target must be an object'); - st['throws'](function () { assign(null, {}); }, TypeError, 'target must be an object'); - st['throws'](function () { assign(undefined, {}); }, TypeError, 'target must be an object'); - st.end(); - }); - - t.test('non-object target, no sources', function (st) { - var bool = assign(true); - st.equal(typeof bool, 'object', 'bool is object'); - st.equal(Boolean.prototype.valueOf.call(bool), true, 'bool coerces to `true`'); - - var number = assign(1); - st.equal(typeof number, 'object', 'number is object'); - st.equal(Number.prototype.valueOf.call(number), 1, 'number coerces to `1`'); - - var string = assign('1'); - st.equal(typeof string, 'object', 'number is object'); - st.equal(String.prototype.valueOf.call(string), '1', 'number coerces to `"1"`'); - - st.end(); - }); - - t.test('non-object target, with sources', function (st) { - var signal = {}; - - st.test('boolean', function (st2) { - var bool = assign(true, { a: signal }); - st2.equal(typeof bool, 'object', 'bool is object'); - st2.equal(Boolean.prototype.valueOf.call(bool), true, 'bool coerces to `true`'); - st2.equal(bool.a, signal, 'source properties copied'); - st2.end(); - }); - - st.test('number', function (st2) { - var number = assign(1, { a: signal }); - st2.equal(typeof number, 'object', 'number is object'); - st2.equal(Number.prototype.valueOf.call(number), 1, 'number coerces to `1`'); - st2.equal(number.a, signal, 'source properties copied'); - st2.end(); - }); - - st.test('string', function (st2) { - var string = assign('1', { a: signal }); - st2.equal(typeof string, 'object', 'number is object'); - st2.equal(String.prototype.valueOf.call(string), '1', 'number coerces to `"1"`'); - st2.equal(string.a, signal, 'source properties copied'); - st2.end(); - }); - - st.end(); - }); - - t.test('non-object sources', function (st) { - st.deepEqual(assign({ a: 1 }, null, { b: 2 }), { a: 1, b: 2 }, 'ignores null source'); - st.deepEqual(assign({ a: 1 }, { b: 2 }, undefined), { a: 1, b: 2 }, 'ignores undefined source'); - st.end(); - }); - - t.test('returns the modified target object', function (st) { - var target = {}; - var returned = assign(target, { a: 1 }); - st.equal(returned, target, 'returned object is the same reference as the target object'); - st.end(); - }); - - t.test('has the right length', function (st) { - st.equal(assign.length, 2, 'length is 2 => 2 required arguments'); - st.end(); - }); - - t.test('merge two objects', function (st) { - var target = { a: 1 }; - var returned = assign(target, { b: 2 }); - st.deepEqual(returned, { a: 1, b: 2 }, 'returned object has properties from both'); - st.end(); - }); - - t.test('works with functions', function (st) { - var target = function () {}; - target.a = 1; - var returned = assign(target, { b: 2 }); - st.equal(target, returned, 'returned object is target'); - st.equal(returned.a, 1); - st.equal(returned.b, 2); - st.end(); - }); - - t.test('works with primitives', function (st) { - var target = 2; - var source = { b: 42 }; - var returned = assign(target, source); - st.equal(Object.prototype.toString.call(returned), '[object Number]', 'returned is object form of number primitive'); - st.equal(Number(returned), target, 'returned and target have same valueOf'); - st.equal(returned.b, source.b); - st.end(); - }); - - /* globals window */ - t.test('works with window.location', { skip: typeof window === 'undefined' }, function (st) { - var target = {}; - assign(target, window.location); - for (var prop in window.location) { - if (has(window.location, prop)) { - st.deepEqual(target[prop], window.location[prop], prop + ' is copied'); - } - } - st.end(); - }); - - t.test('merge N objects', function (st) { - var target = { a: 1 }; - var source1 = { b: 2 }; - var source2 = { c: 3 }; - var returned = assign(target, source1, source2); - st.deepEqual(returned, { a: 1, b: 2, c: 3 }, 'returned object has properties from all sources'); - st.end(); - }); - - t.test('only iterates over own keys', function (st) { - var Foo = function () {}; - Foo.prototype.bar = true; - var foo = new Foo(); - foo.baz = true; - var target = { a: 1 }; - var returned = assign(target, foo); - st.equal(returned, target, 'returned object is the same reference as the target object'); - st.deepEqual(target, { a: 1, baz: true }, 'returned object has only own properties from both'); - st.end(); - }); - - t.test('includes enumerable symbols, after keys', { skip: !hasSymbols }, function (st) { - var visited = []; - var obj = {}; - Object.defineProperty(obj, 'a', { enumerable: true, get: function () { visited.push('a'); return 42; } }); - var symbol = Symbol('enumerable'); - Object.defineProperty(obj, symbol, { - enumerable: true, - get: function () { visited.push(symbol); return Infinity; } - }); - var nonEnumSymbol = Symbol('non-enumerable'); - Object.defineProperty(obj, nonEnumSymbol, { - enumerable: false, - get: function () { visited.push(nonEnumSymbol); return -Infinity; } - }); - var target = assign({}, obj); - st.deepEqual(visited, ['a', symbol], 'key is visited first, then symbol'); - st.equal(target.a, 42, 'target.a is 42'); - st.equal(target[symbol], Infinity, 'target[symbol] is Infinity'); - st.notEqual(target[nonEnumSymbol], -Infinity, 'target[nonEnumSymbol] is not -Infinity'); - st.end(); - }); - - t.test('does not fail when symbols are not present', { skip: !Object.isFrozen || Object.isFrozen(Object) }, function (st) { - var getSyms; - if (hasSymbols) { - getSyms = Object.getOwnPropertySymbols; - delete Object.getOwnPropertySymbols; - } - - var visited = []; - var obj = {}; - Object.defineProperty(obj, 'a', { enumerable: true, get: function () { visited.push('a'); return 42; } }); - var keys = ['a']; - if (hasSymbols) { - var symbol = Symbol('sym'); - Object.defineProperty(obj, symbol, { - enumerable: true, - get: function () { visited.push(symbol); return Infinity; } - }); - keys.push(symbol); - } - var target = assign({}, obj); - st.deepEqual(visited, keys, 'assign visits expected keys'); - st.equal(target.a, 42, 'target.a is 42'); - - if (hasSymbols) { - st.equal(target[symbol], Infinity); - - Object.getOwnPropertySymbols = getSyms; - } - st.end(); - }); - - t.test('preserves correct property enumeration order', function (st) { - var str = 'abcdefghijklmnopqrst'; - var letters = {}; - forEach(str.split(''), function (letter) { - letters[letter] = letter; - }); - - var n = 5; - st.comment('run the next test ' + n + ' times'); - var object = assign({}, letters); - var actual = ''; - for (var k in object) { - actual += k; - } - for (var i = 0; i < n; ++i) { - st.equal(actual, str, 'property enumeration order should be followed'); - } - st.end(); - }); - - t.test('checks enumerability and existence, in case of modification during [[Get]]', { skip: !Object.defineProperty }, function (st) { - var targetBvalue = {}; - var targetCvalue = {}; - var target = { b: targetBvalue, c: targetCvalue }; - var source = {}; - Object.defineProperty(source, 'a', { - enumerable: true, - get: function () { - delete this.b; - Object.defineProperty(this, 'c', { enumerable: false }); - return 'a'; - } - }); - var sourceBvalue = {}; - var sourceCvalue = {}; - source.b = sourceBvalue; - source.c = sourceCvalue; - var result = assign(target, source); - st.equal(result, target, 'sanity check: result is === target'); - st.equal(result.b, targetBvalue, 'target key not overwritten by deleted source key'); - st.equal(result.c, targetCvalue, 'target key not overwritten by non-enumerable source key'); - - st.end(); - }); -}; diff --git a/build/node_modules/octal/package.json b/build/node_modules/octal/package.json index 65104eb3..7369ac33 100644 --- a/build/node_modules/octal/package.json +++ b/build/node_modules/octal/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/octal/-/octal-1.0.0.tgz", "_shasum": "63e7162a68efbeb9e213588d58e989d1e5c4530b", "_spec": "octal@^1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/once/package.json b/build/node_modules/once/package.json index 79b62d34..9949d876 100644 --- a/build/node_modules/once/package.json +++ b/build/node_modules/once/package.json @@ -1,28 +1,31 @@ { - "_from": "once@^1.3.0", + "_from": "once@1.4.0", "_id": "once@1.4.0", "_inBundle": false, "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "_location": "/once", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "once@^1.3.0", + "raw": "once@1.4.0", "name": "once", "escapedName": "once", - "rawSpec": "^1.3.0", + "rawSpec": "1.4.0", "saveSpec": null, - "fetchSpec": "^1.3.0" + "fetchSpec": "1.4.0" }, "_requiredBy": [ + "/formidable", + "/glob", + "/inflight", "/level-blobs", "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/once/-/once-1.4.0.tgz", "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "_spec": "once@^1.3.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", + "_spec": "once@1.4.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/formidable", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", diff --git a/build/node_modules/one-time/package.json b/build/node_modules/one-time/package.json index 2a1ba3c7..dd3ba798 100644 --- a/build/node_modules/one-time/package.json +++ b/build/node_modules/one-time/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/winston" ], - "_resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/one-time/-/one-time-1.0.0.tgz", "_shasum": "e06bc174aed214ed58edede573b433bbf827cb45", "_spec": "one-time@^1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", diff --git a/build/node_modules/p-limit/index.d.ts b/build/node_modules/p-limit/index.d.ts new file mode 100644 index 00000000..f348d7f1 --- /dev/null +++ b/build/node_modules/p-limit/index.d.ts @@ -0,0 +1,42 @@ +declare namespace pLimit { + interface Limit { + /** + The number of promises that are currently running. + */ + readonly activeCount: number; + + /** + The number of promises that are waiting to run (i.e. their internal `fn` was not called yet). + */ + readonly pendingCount: number; + + /** + Discard pending promises that are waiting to run. + + This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app. + + Note: This does not cancel promises that are already running. + */ + clearQueue: () => void; + + /** + @param fn - Promise-returning/async function. + @param arguments - Any arguments to pass through to `fn`. Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a lot of functions. + @returns The promise returned by calling `fn(...arguments)`. + */ + ( + fn: (...arguments: Arguments) => PromiseLike | ReturnType, + ...arguments: Arguments + ): Promise; + } +} + +/** +Run multiple promise-returning & async functions with limited concurrency. + +@param concurrency - Concurrency limit. Minimum: `1`. +@returns A `limit` function. +*/ +declare function pLimit(concurrency: number): pLimit.Limit; + +export = pLimit; diff --git a/build/node_modules/p-limit/index.js b/build/node_modules/p-limit/index.js new file mode 100644 index 00000000..c2ae52d9 --- /dev/null +++ b/build/node_modules/p-limit/index.js @@ -0,0 +1,71 @@ +'use strict'; +const Queue = require('yocto-queue'); + +const pLimit = concurrency => { + if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { + throw new TypeError('Expected `concurrency` to be a number from 1 and up'); + } + + const queue = new Queue(); + let activeCount = 0; + + const next = () => { + activeCount--; + + if (queue.size > 0) { + queue.dequeue()(); + } + }; + + const run = async (fn, resolve, ...args) => { + activeCount++; + + const result = (async () => fn(...args))(); + + resolve(result); + + try { + await result; + } catch {} + + next(); + }; + + const enqueue = (fn, resolve, ...args) => { + queue.enqueue(run.bind(null, fn, resolve, ...args)); + + (async () => { + // This function needs to wait until the next microtask before comparing + // `activeCount` to `concurrency`, because `activeCount` is updated asynchronously + // when the run function is dequeued and called. The comparison in the if-statement + // needs to happen asynchronously as well to get an up-to-date value for `activeCount`. + await Promise.resolve(); + + if (activeCount < concurrency && queue.size > 0) { + queue.dequeue()(); + } + })(); + }; + + const generator = (fn, ...args) => new Promise(resolve => { + enqueue(fn, resolve, ...args); + }); + + Object.defineProperties(generator, { + activeCount: { + get: () => activeCount + }, + pendingCount: { + get: () => queue.size + }, + clearQueue: { + value: () => { + queue.clear(); + } + } + }); + + return generator; +}; + +module.exports = pLimit; diff --git a/build/node_modules/p-limit/license b/build/node_modules/p-limit/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/p-limit/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/p-limit/package.json b/build/node_modules/p-limit/package.json new file mode 100644 index 00000000..ce2facf5 --- /dev/null +++ b/build/node_modules/p-limit/package.json @@ -0,0 +1,84 @@ +{ + "_from": "p-limit@^3.0.2", + "_id": "p-limit@3.1.0", + "_inBundle": false, + "_integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "_location": "/p-limit", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-limit@^3.0.2", + "name": "p-limit", + "escapedName": "p-limit", + "rawSpec": "^3.0.2", + "saveSpec": null, + "fetchSpec": "^3.0.2" + }, + "_requiredBy": [ + "/p-locate" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/p-limit/-/p-limit-3.1.0.tgz", + "_shasum": "e1daccbe78d0d1388ca18c64fea38e3e57e3706b", + "_spec": "p-limit@^3.0.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/p-locate", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-limit/issues" + }, + "bundleDependencies": false, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "deprecated": false, + "description": "Run multiple promise-returning & async functions with limited concurrency", + "devDependencies": { + "ava": "^2.4.0", + "delay": "^4.4.0", + "in-range": "^2.0.0", + "random-int": "^2.0.1", + "time-span": "^4.0.0", + "tsd": "^0.13.1", + "xo": "^0.35.0" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/p-limit#readme", + "keywords": [ + "promise", + "limit", + "limited", + "concurrency", + "throttle", + "throat", + "rate", + "batch", + "ratelimit", + "task", + "queue", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-limit", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-limit.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "3.1.0" +} diff --git a/build/node_modules/p-limit/readme.md b/build/node_modules/p-limit/readme.md new file mode 100644 index 00000000..b283c1e6 --- /dev/null +++ b/build/node_modules/p-limit/readme.md @@ -0,0 +1,101 @@ +# p-limit + +> Run multiple promise-returning & async functions with limited concurrency + +## Install + +``` +$ npm install p-limit +``` + +## Usage + +```js +const pLimit = require('p-limit'); + +const limit = pLimit(1); + +const input = [ + limit(() => fetchSomething('foo')), + limit(() => fetchSomething('bar')), + limit(() => doSomething()) +]; + +(async () => { + // Only one promise is run at once + const result = await Promise.all(input); + console.log(result); +})(); +``` + +## API + +### pLimit(concurrency) + +Returns a `limit` function. + +#### concurrency + +Type: `number`\ +Minimum: `1`\ +Default: `Infinity` + +Concurrency limit. + +### limit(fn, ...args) + +Returns the promise returned by calling `fn(...args)`. + +#### fn + +Type: `Function` + +Promise-returning/async function. + +#### args + +Any arguments to pass through to `fn`. + +Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions. + +### limit.activeCount + +The number of promises that are currently running. + +### limit.pendingCount + +The number of promises that are waiting to run (i.e. their internal `fn` was not called yet). + +### limit.clearQueue() + +Discard pending promises that are waiting to run. + +This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app. + +Note: This does not cancel promises that are already running. + +## FAQ + +### How is this different from the [`p-queue`](https://github.com/sindresorhus/p-queue) package? + +This package is only about limiting the number of concurrent executions, while `p-queue` is a fully featured queue implementation with lots of different options, introspection, and ability to pause the queue. + +## Related + +- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control +- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions +- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions +- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency +- [More…](https://github.com/sindresorhus/promise-fun) + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            diff --git a/build/node_modules/p-locate/index.d.ts b/build/node_modules/p-locate/index.d.ts new file mode 100644 index 00000000..38c7e578 --- /dev/null +++ b/build/node_modules/p-locate/index.d.ts @@ -0,0 +1,53 @@ +declare namespace pLocate { + interface Options { + /** + Number of concurrently pending promises returned by `tester`. Minimum: `1`. + + @default Infinity + */ + readonly concurrency?: number; + + /** + Preserve `input` order when searching. + + Disable this to improve performance if you don't care about the order. + + @default true + */ + readonly preserveOrder?: boolean; + } +} + +/** +Get the first fulfilled promise that satisfies the provided testing function. + +@param input - An iterable of promises/values to test. +@param tester - This function will receive resolved values from `input` and is expected to return a `Promise` or `boolean`. +@returns A `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. + +@example +``` +import pathExists = require('path-exists'); +import pLocate = require('p-locate'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + const foundPath = await pLocate(files, file => pathExists(file)); + + console.log(foundPath); + //=> 'rainbow' +})(); +``` +*/ +declare function pLocate( + input: Iterable | ValueType>, + tester: (element: ValueType) => PromiseLike | boolean, + options?: pLocate.Options +): Promise; + +export = pLocate; diff --git a/build/node_modules/p-locate/index.js b/build/node_modules/p-locate/index.js new file mode 100644 index 00000000..641c3dd1 --- /dev/null +++ b/build/node_modules/p-locate/index.js @@ -0,0 +1,50 @@ +'use strict'; +const pLimit = require('p-limit'); + +class EndError extends Error { + constructor(value) { + super(); + this.value = value; + } +} + +// The input can also be a promise, so we await it +const testElement = async (element, tester) => tester(await element); + +// The input can also be a promise, so we `Promise.all()` them both +const finder = async element => { + const values = await Promise.all(element); + if (values[1] === true) { + throw new EndError(values[0]); + } + + return false; +}; + +const pLocate = async (iterable, tester, options) => { + options = { + concurrency: Infinity, + preserveOrder: true, + ...options + }; + + const limit = pLimit(options.concurrency); + + // Start all the promises concurrently with optional limit + const items = [...iterable].map(element => [element, limit(testElement, element, tester)]); + + // Check the promises either serially or concurrently + const checkLimit = pLimit(options.preserveOrder ? 1 : Infinity); + + try { + await Promise.all(items.map(element => checkLimit(finder, element))); + } catch (error) { + if (error instanceof EndError) { + return error.value; + } + + throw error; + } +}; + +module.exports = pLocate; diff --git a/build/node_modules/p-locate/license b/build/node_modules/p-locate/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/p-locate/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/p-locate/package.json b/build/node_modules/p-locate/package.json new file mode 100644 index 00000000..749dbca1 --- /dev/null +++ b/build/node_modules/p-locate/package.json @@ -0,0 +1,86 @@ +{ + "_from": "p-locate@^5.0.0", + "_id": "p-locate@5.0.0", + "_inBundle": false, + "_integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "_location": "/p-locate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-locate@^5.0.0", + "name": "p-locate", + "escapedName": "p-locate", + "rawSpec": "^5.0.0", + "saveSpec": null, + "fetchSpec": "^5.0.0" + }, + "_requiredBy": [ + "/locate-path" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/p-locate/-/p-locate-5.0.0.tgz", + "_shasum": "83c8315c6785005e3bd021839411c9e110e6d834", + "_spec": "p-locate@^5.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/locate-path", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-locate/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-limit": "^3.0.2" + }, + "deprecated": false, + "description": "Get the first fulfilled promise that satisfies the provided testing function", + "devDependencies": { + "ava": "^2.4.0", + "delay": "^4.1.0", + "in-range": "^2.0.0", + "time-span": "^4.0.0", + "tsd": "^0.13.1", + "xo": "^0.32.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/p-locate#readme", + "keywords": [ + "promise", + "locate", + "find", + "finder", + "search", + "searcher", + "test", + "array", + "collection", + "iterable", + "iterator", + "race", + "fulfilled", + "fastest", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-locate", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-locate.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.0.0" +} diff --git a/build/node_modules/p-locate/readme.md b/build/node_modules/p-locate/readme.md new file mode 100644 index 00000000..be85ec1d --- /dev/null +++ b/build/node_modules/p-locate/readme.md @@ -0,0 +1,93 @@ +# p-locate [![Build Status](https://travis-ci.com/sindresorhus/p-locate.svg?branch=master)](https://travis-ci.com/github/sindresorhus/p-locate) + +> Get the first fulfilled promise that satisfies the provided testing function + +Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). + +## Install + +``` +$ npm install p-locate +``` + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const pathExists = require('path-exists'); +const pLocate = require('p-locate'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + const foundPath = await pLocate(files, file => pathExists(file)); + + console.log(foundPath); + //=> 'rainbow' +})(); +``` + +*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.* + +## API + +### pLocate(input, tester, options?) + +Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. + +#### input + +Type: `Iterable` + +An iterable of promises/values to test. + +#### tester(element) + +Type: `Function` + +This function will receive resolved values from `input` and is expected to return a `Promise` or `boolean`. + +#### options + +Type: `object` + +##### concurrency + +Type: `number`\ +Default: `Infinity`\ +Minimum: `1` + +Number of concurrently pending promises returned by `tester`. + +##### preserveOrder + +Type: `boolean`\ +Default: `true` + +Preserve `input` order when searching. + +Disable this to improve performance if you don't care about the order. + +## Related + +- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently +- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently +- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled +- [More…](https://github.com/sindresorhus/promise-fun) + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            diff --git a/build/node_modules/parse-asn1/package.json b/build/node_modules/parse-asn1/package.json index f99deb61..b31ff7cf 100644 --- a/build/node_modules/parse-asn1/package.json +++ b/build/node_modules/parse-asn1/package.json @@ -19,7 +19,7 @@ "/browserify-sign", "/public-encrypt" ], - "_resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/parse-asn1/-/parse-asn1-5.1.6.tgz", "_shasum": "385080a3ec13cb62a62d39409cb3e88844cdaed4", "_spec": "parse-asn1@^5.1.5", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/browserify-sign", diff --git a/build/node_modules/path-exists/index.d.ts b/build/node_modules/path-exists/index.d.ts new file mode 100644 index 00000000..54b7ab8f --- /dev/null +++ b/build/node_modules/path-exists/index.d.ts @@ -0,0 +1,28 @@ +declare const pathExists: { + /** + Check if a path exists. + + @returns Whether the path exists. + + @example + ``` + // foo.ts + import pathExists = require('path-exists'); + + (async () => { + console.log(await pathExists('foo.ts')); + //=> true + })(); + ``` + */ + (path: string): Promise; + + /** + Synchronously check if a path exists. + + @returns Whether the path exists. + */ + sync(path: string): boolean; +}; + +export = pathExists; diff --git a/build/node_modules/path-exists/index.js b/build/node_modules/path-exists/index.js new file mode 100644 index 00000000..1943921b --- /dev/null +++ b/build/node_modules/path-exists/index.js @@ -0,0 +1,23 @@ +'use strict'; +const fs = require('fs'); +const {promisify} = require('util'); + +const pAccess = promisify(fs.access); + +module.exports = async path => { + try { + await pAccess(path); + return true; + } catch (_) { + return false; + } +}; + +module.exports.sync = path => { + try { + fs.accessSync(path); + return true; + } catch (_) { + return false; + } +}; diff --git a/build/node_modules/path-exists/license b/build/node_modules/path-exists/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/path-exists/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/path-exists/package.json b/build/node_modules/path-exists/package.json new file mode 100644 index 00000000..bbf38315 --- /dev/null +++ b/build/node_modules/path-exists/package.json @@ -0,0 +1,71 @@ +{ + "_from": "path-exists@^4.0.0", + "_id": "path-exists@4.0.0", + "_inBundle": false, + "_integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "_location": "/path-exists", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "path-exists@^4.0.0", + "name": "path-exists", + "escapedName": "path-exists", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/find-up" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-exists/-/path-exists-4.0.0.tgz", + "_shasum": "513bdbe2d3b95d7762e8c1137efa195c6c61b5b3", + "_spec": "path-exists@^4.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/find-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-exists/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if a path exists", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/path-exists#readme", + "keywords": [ + "path", + "exists", + "exist", + "file", + "filepath", + "fs", + "filesystem", + "file-system", + "access", + "stat" + ], + "license": "MIT", + "name": "path-exists", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-exists.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.0.0" +} diff --git a/build/node_modules/path-exists/readme.md b/build/node_modules/path-exists/readme.md new file mode 100644 index 00000000..81f98454 --- /dev/null +++ b/build/node_modules/path-exists/readme.md @@ -0,0 +1,52 @@ +# path-exists [![Build Status](https://travis-ci.org/sindresorhus/path-exists.svg?branch=master)](https://travis-ci.org/sindresorhus/path-exists) + +> Check if a path exists + +NOTE: `fs.existsSync` has been un-deprecated in Node.js since 6.8.0. If you only need to check synchronously, this module is not needed. + +While [`fs.exists()`](https://nodejs.org/api/fs.html#fs_fs_exists_path_callback) is being [deprecated](https://github.com/iojs/io.js/issues/103), there's still a genuine use-case of being able to check if a path exists for other purposes than doing IO with it. + +Never use this before handling a file though: + +> In particular, checking if a file exists before opening it is an anti-pattern that leaves you vulnerable to race conditions: another process may remove the file between the calls to `fs.exists()` and `fs.open()`. Just open the file and handle the error when it's not there. + + +## Install + +``` +$ npm install path-exists +``` + + +## Usage + +```js +// foo.js +const pathExists = require('path-exists'); + +(async () => { + console.log(await pathExists('foo.js')); + //=> true +})(); +``` + + +## API + +### pathExists(path) + +Returns a `Promise` of whether the path exists. + +### pathExists.sync(path) + +Returns a `boolean` of whether the path exists. + + +## Related + +- [path-exists-cli](https://github.com/sindresorhus/path-exists-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/build/node_modules/path-is-absolute/index.js b/build/node_modules/path-is-absolute/index.js new file mode 100644 index 00000000..22aa6c35 --- /dev/null +++ b/build/node_modules/path-is-absolute/index.js @@ -0,0 +1,20 @@ +'use strict'; + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; diff --git a/build/node_modules/path-is-absolute/license b/build/node_modules/path-is-absolute/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/build/node_modules/path-is-absolute/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/path-is-absolute/package.json b/build/node_modules/path-is-absolute/package.json new file mode 100644 index 00000000..3b117723 --- /dev/null +++ b/build/node_modules/path-is-absolute/package.json @@ -0,0 +1,75 @@ +{ + "_from": "path-is-absolute@^1.0.0", + "_id": "path-is-absolute@1.0.1", + "_inBundle": false, + "_integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "_location": "/path-is-absolute", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "path-is-absolute@^1.0.0", + "name": "path-is-absolute", + "escapedName": "path-is-absolute", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "_shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "_spec": "path-is-absolute@^1.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/glob", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-is-absolute/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node.js 0.12 path.isAbsolute() ponyfill", + "devDependencies": { + "xo": "^0.16.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/path-is-absolute#readme", + "keywords": [ + "path", + "paths", + "file", + "dir", + "absolute", + "isabsolute", + "is-absolute", + "built-in", + "util", + "utils", + "core", + "ponyfill", + "polyfill", + "shim", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "path-is-absolute", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-is-absolute.git" + }, + "scripts": { + "test": "xo && node test.js" + }, + "version": "1.0.1" +} diff --git a/build/node_modules/path-is-absolute/readme.md b/build/node_modules/path-is-absolute/readme.md new file mode 100644 index 00000000..8dbdf5fc --- /dev/null +++ b/build/node_modules/path-is-absolute/readme.md @@ -0,0 +1,59 @@ +# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) + +> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) + + +## Install + +``` +$ npm install --save path-is-absolute +``` + + +## Usage + +```js +const pathIsAbsolute = require('path-is-absolute'); + +// Running on Linux +pathIsAbsolute('/home/foo'); +//=> true +pathIsAbsolute('C:/Users/foo'); +//=> false + +// Running on Windows +pathIsAbsolute('C:/Users/foo'); +//=> true +pathIsAbsolute('/home/foo'); +//=> false + +// Running on any OS +pathIsAbsolute.posix('/home/foo'); +//=> true +pathIsAbsolute.posix('C:/Users/foo'); +//=> false +pathIsAbsolute.win32('C:/Users/foo'); +//=> true +pathIsAbsolute.win32('/home/foo'); +//=> false +``` + + +## API + +See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). + +### pathIsAbsolute(path) + +### pathIsAbsolute.posix(path) + +POSIX specific version. + +### pathIsAbsolute.win32(path) + +Windows specific version. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/build/node_modules/path-parse/package.json b/build/node_modules/path-parse/package.json index 32cc7019..45410b99 100644 --- a/build/node_modules/path-parse/package.json +++ b/build/node_modules/path-parse/package.json @@ -1,5 +1,5 @@ { - "_from": "path-parse@^1.0.6", + "_from": "path-parse@^1.0.7", "_id": "path-parse@1.0.7", "_inBundle": false, "_integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", @@ -8,19 +8,19 @@ "_requested": { "type": "range", "registry": true, - "raw": "path-parse@^1.0.6", + "raw": "path-parse@^1.0.7", "name": "path-parse", "escapedName": "path-parse", - "rawSpec": "^1.0.6", + "rawSpec": "^1.0.7", "saveSpec": null, - "fetchSpec": "^1.0.6" + "fetchSpec": "^1.0.7" }, "_requiredBy": [ "/resolve" ], - "_resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-parse/-/path-parse-1.0.7.tgz", "_shasum": "fbc114b60ca42b30d9daf5858e4bd68bbedb6735", - "_spec": "path-parse@^1.0.6", + "_spec": "path-parse@^1.0.7", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/resolve", "author": { "name": "Javier Blanco", diff --git a/build/node_modules/path-to-regexp/History.md b/build/node_modules/path-to-regexp/History.md new file mode 100644 index 00000000..abe4a659 --- /dev/null +++ b/build/node_modules/path-to-regexp/History.md @@ -0,0 +1,158 @@ +1.7.0 / 2016-11-08 +================== + + * Allow a `delimiter` option to be passed in with `tokensToRegExp` which will be used for "non-ending" token match situations + +1.6.0 / 2016-10-03 +================== + + * Populate `RegExp.keys` when using the `tokensToRegExp` method (making it consistent with the main export) + * Allow a `delimiter` option to be passed in with `parse` + * Updated TypeScript definition with `Keys` and `Options` updated + +1.5.3 / 2016-06-15 +================== + + * Add `\\` to the ignore character group to avoid backtracking on mismatched parens + +1.5.2 / 2016-06-15 +================== + + * Escape `\\` in string segments of regexp + +1.5.1 / 2016-06-08 +================== + + * Add `index.d.ts` to NPM package + +1.5.0 / 2016-05-20 +================== + + * Handle partial token segments (better) + * Allow compile to handle asterisk token segments + +1.4.0 / 2016-05-18 +================== + + * Handle RegExp unions in path matching groups + +1.3.0 / 2016-05-08 +================== + + * Clarify README language and named parameter token support + * Support advanced Closure Compiler with type annotations + * Add pretty paths options to compiled function output + * Add TypeScript definition to project + * Improved prefix handling with non-complete segment parameters (E.g. `/:foo?-bar`) + +1.2.1 / 2015-08-17 +================== + + * Encode values before validation with path compilation function + * More examples of using compilation in README + +1.2.0 / 2015-05-20 +================== + + * Add support for matching an asterisk (`*`) as an unnamed match everything group (`(.*)`) + +1.1.1 / 2015-05-11 +================== + + * Expose methods for working with path tokens + +1.1.0 / 2015-05-09 +================== + + * Expose the parser implementation to consumers + * Implement a compiler function to generate valid strings + * Huge refactor of tests to be more DRY and cover new parse and compile functions + * Use chai in tests + * Add .editorconfig + +1.0.3 / 2015-01-17 +================== + + * Optimised function runtime + * Added `files` to `package.json` + +1.0.2 / 2014-12-17 +================== + + * Use `Array.isArray` shim + * Remove ES5 incompatible code + * Fixed repository path + * Added new readme badges + +1.0.1 / 2014-08-27 +================== + + * Ensure installation works correctly on 0.8 + +1.0.0 / 2014-08-17 +================== + + * No more API changes + +0.2.5 / 2014-08-07 +================== + + * Allow keys parameter to be omitted + +0.2.4 / 2014-08-02 +================== + + * Code coverage badge + * Updated readme + * Attach keys to the generated regexp + +0.2.3 / 2014-07-09 +================== + + * Add MIT license + +0.2.2 / 2014-07-06 +================== + + * A passed in trailing slash in non-strict mode will become optional + * In non-end mode, the optional trailing slash will only match at the end + +0.2.1 / 2014-06-11 +================== + + * Fixed a major capturing group regexp regression + +0.2.0 / 2014-06-09 +================== + + * Improved support for arrays + * Improved support for regexps + * Better support for non-ending strict mode matches with a trailing slash + * Travis CI support + * Block using regexp special characters in the path + * Removed support for the asterisk to match all + * New support for parameter suffixes - `*`, `+` and `?` + * Updated readme + * Provide delimiter information with keys array + +0.1.2 / 2014-03-10 +================== + + * Move testing dependencies to `devDependencies` + +0.1.1 / 2014-03-10 +================== + + * Match entire substring with `options.end` + * Properly handle ending and non-ending matches + +0.1.0 / 2014-03-06 +================== + + * Add `options.end` + +0.0.2 / 2013-02-10 +================== + + * Update to match current express + * Add .license property to component.json diff --git a/build/node_modules/path-to-regexp/LICENSE b/build/node_modules/path-to-regexp/LICENSE new file mode 100644 index 00000000..983fbe8a --- /dev/null +++ b/build/node_modules/path-to-regexp/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/path-to-regexp/Readme.md b/build/node_modules/path-to-regexp/Readme.md new file mode 100644 index 00000000..379ecf4b --- /dev/null +++ b/build/node_modules/path-to-regexp/Readme.md @@ -0,0 +1,257 @@ +# Path-to-RegExp + +> Turn an Express-style path string such as `/user/:name` into a regular expression. + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +## Installation + +``` +npm install path-to-regexp --save +``` + +## Usage + +```javascript +var pathToRegexp = require('path-to-regexp') + +// pathToRegexp(path, keys, options) +// pathToRegexp.parse(path) +// pathToRegexp.compile(path) +``` + +- **path** An Express-style string, an array of strings, or a regular expression. +- **keys** An array to be populated with the keys found in the path. +- **options** + - **sensitive** When `true` the route will be case sensitive. (default: `false`) + - **strict** When `false` the trailing slash is optional. (default: `false`) + - **end** When `false` the path will match at the beginning. (default: `true`) + - **delimiter** Set the default delimiter for repeat parameters. (default: `'/'`) + +```javascript +var keys = [] +var re = pathToRegexp('/foo/:bar', keys) +// re = /^\/foo\/([^\/]+?)\/?$/i +// keys = [{ name: 'bar', prefix: '/', delimiter: '/', optional: false, repeat: false, pattern: '[^\\/]+?' }] +``` + +**Please note:** The `RegExp` returned by `path-to-regexp` is intended for use with pathnames or hostnames. It can not handle the query strings or fragments of a URL. + +### Parameters + +The path string can be used to define parameters and populate the keys. + +#### Named Parameters + +Named parameters are defined by prefixing a colon to the parameter name (`:foo`). By default, the parameter will match until the following path segment. + +```js +var re = pathToRegexp('/:foo/:bar', keys) +// keys = [{ name: 'foo', prefix: '/', ... }, { name: 'bar', prefix: '/', ... }] + +re.exec('/test/route') +//=> ['/test/route', 'test', 'route'] +``` + +**Please note:** Named parameters must be made up of "word characters" (`[A-Za-z0-9_]`). + +```js +var re = pathToRegexp('/(apple-)?icon-:res(\\d+).png', keys) +// keys = [{ name: 0, prefix: '/', ... }, { name: 'res', prefix: '', ... }] + +re.exec('/icon-76.png') +//=> ['/icon-76.png', undefined, '76'] +``` + +#### Modified Parameters + +##### Optional + +Parameters can be suffixed with a question mark (`?`) to make the parameter optional. This will also make the prefix optional. + +```js +var re = pathToRegexp('/:foo/:bar?', keys) +// keys = [{ name: 'foo', ... }, { name: 'bar', delimiter: '/', optional: true, repeat: false }] + +re.exec('/test') +//=> ['/test', 'test', undefined] + +re.exec('/test/route') +//=> ['/test', 'test', 'route'] +``` + +##### Zero or more + +Parameters can be suffixed with an asterisk (`*`) to denote a zero or more parameter matches. The prefix is taken into account for each match. + +```js +var re = pathToRegexp('/:foo*', keys) +// keys = [{ name: 'foo', delimiter: '/', optional: true, repeat: true }] + +re.exec('/') +//=> ['/', undefined] + +re.exec('/bar/baz') +//=> ['/bar/baz', 'bar/baz'] +``` + +##### One or more + +Parameters can be suffixed with a plus sign (`+`) to denote a one or more parameter matches. The prefix is taken into account for each match. + +```js +var re = pathToRegexp('/:foo+', keys) +// keys = [{ name: 'foo', delimiter: '/', optional: false, repeat: true }] + +re.exec('/') +//=> null + +re.exec('/bar/baz') +//=> ['/bar/baz', 'bar/baz'] +``` + +#### Custom Match Parameters + +All parameters can be provided a custom regexp, which overrides the default (`[^\/]+`). + +```js +var re = pathToRegexp('/:foo(\\d+)', keys) +// keys = [{ name: 'foo', ... }] + +re.exec('/123') +//=> ['/123', '123'] + +re.exec('/abc') +//=> null +``` + +**Please note:** Backslashes need to be escaped with another backslash in strings. + +#### Unnamed Parameters + +It is possible to write an unnamed parameter that only consists of a matching group. It works the same as a named parameter, except it will be numerically indexed. + +```js +var re = pathToRegexp('/:foo/(.*)', keys) +// keys = [{ name: 'foo', ... }, { name: 0, ... }] + +re.exec('/test/route') +//=> ['/test/route', 'test', 'route'] +``` + +#### Asterisk + +An asterisk can be used for matching everything. It is equivalent to an unnamed matching group of `(.*)`. + +```js +var re = pathToRegexp('/foo/*', keys) +// keys = [{ name: '0', ... }] + +re.exec('/foo/bar/baz') +//=> ['/foo/bar/baz', 'bar/baz'] +``` + +### Parse + +The parse function is exposed via `pathToRegexp.parse`. This will return an array of strings and keys. + +```js +var tokens = pathToRegexp.parse('/route/:foo/(.*)') + +console.log(tokens[0]) +//=> "/route" + +console.log(tokens[1]) +//=> { name: 'foo', prefix: '/', delimiter: '/', optional: false, repeat: false, pattern: '[^\\/]+?' } + +console.log(tokens[2]) +//=> { name: 0, prefix: '/', delimiter: '/', optional: false, repeat: false, pattern: '.*' } +``` + +**Note:** This method only works with Express-style strings. + +### Compile ("Reverse" Path-To-RegExp) + +Path-To-RegExp exposes a compile function for transforming an Express-style path into a valid path. + +```js +var toPath = pathToRegexp.compile('/user/:id') + +toPath({ id: 123 }) //=> "/user/123" +toPath({ id: 'café' }) //=> "/user/caf%C3%A9" +toPath({ id: '/' }) //=> "/user/%2F" + +toPath({ id: ':' }) //=> "/user/%3A" +toPath({ id: ':' }, { pretty: true }) //=> "/user/:" + +var toPathRepeated = pathToRegexp.compile('/:segment+') + +toPathRepeated({ segment: 'foo' }) //=> "/foo" +toPathRepeated({ segment: ['a', 'b', 'c'] }) //=> "/a/b/c" + +var toPathRegexp = pathToRegexp.compile('/user/:id(\\d+)') + +toPathRegexp({ id: 123 }) //=> "/user/123" +toPathRegexp({ id: '123' }) //=> "/user/123" +toPathRegexp({ id: 'abc' }) //=> Throws `TypeError`. +``` + +**Note:** The generated function will throw on invalid input. It will do all necessary checks to ensure the generated path is valid. This method only works with strings. + +### Working with Tokens + +Path-To-RegExp exposes the two functions used internally that accept an array of tokens. + +* `pathToRegexp.tokensToRegExp(tokens, options)` Transform an array of tokens into a matching regular expression. +* `pathToRegexp.tokensToFunction(tokens)` Transform an array of tokens into a path generator function. + +#### Token Information + +* `name` The name of the token (`string` for named or `number` for index) +* `prefix` The prefix character for the segment (`/` or `.`) +* `delimiter` The delimiter for the segment (same as prefix or `/`) +* `optional` Indicates the token is optional (`boolean`) +* `repeat` Indicates the token is repeated (`boolean`) +* `partial` Indicates this token is a partial path segment (`boolean`) +* `pattern` The RegExp used to match this token (`string`) +* `asterisk` Indicates the token is an `*` match (`boolean`) + +## Compatibility with Express <= 4.x + +Path-To-RegExp breaks compatibility with Express <= `4.x`: + +* No longer a direct conversion to a RegExp with sugar on top - it's a path matcher with named and unnamed matching groups + * It's unlikely you previously abused this feature, it's rare and you could always use a RegExp instead +* All matching RegExp special characters can be used in a matching group. E.g. `/:user(.*)` + * Other RegExp features are not support - no nested matching groups, non-capturing groups or look aheads +* Parameters have suffixes that augment meaning - `*`, `+` and `?`. E.g. `/:user*` + +## TypeScript + +Includes a [`.d.ts`](index.d.ts) file for TypeScript users. + +## Live Demo + +You can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/). + +## License + +MIT + +[npm-image]: https://img.shields.io/npm/v/path-to-regexp.svg?style=flat +[npm-url]: https://npmjs.org/package/path-to-regexp +[travis-image]: https://img.shields.io/travis/pillarjs/path-to-regexp.svg?style=flat +[travis-url]: https://travis-ci.org/pillarjs/path-to-regexp +[coveralls-image]: https://img.shields.io/coveralls/pillarjs/path-to-regexp.svg?style=flat +[coveralls-url]: https://coveralls.io/r/pillarjs/path-to-regexp?branch=master +[david-image]: http://img.shields.io/david/pillarjs/path-to-regexp.svg?style=flat +[david-url]: https://david-dm.org/pillarjs/path-to-regexp +[license-image]: http://img.shields.io/npm/l/path-to-regexp.svg?style=flat +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/path-to-regexp.svg?style=flat +[downloads-url]: https://npmjs.org/package/path-to-regexp diff --git a/build/node_modules/path-to-regexp/index.d.ts b/build/node_modules/path-to-regexp/index.d.ts new file mode 100644 index 00000000..4a1f65c5 --- /dev/null +++ b/build/node_modules/path-to-regexp/index.d.ts @@ -0,0 +1,84 @@ +declare function pathToRegexp (path: pathToRegexp.Path, options?: pathToRegexp.RegExpOptions & pathToRegexp.ParseOptions): pathToRegexp.PathRegExp; +declare function pathToRegexp (path: pathToRegexp.Path, keys?: pathToRegexp.Key[], options?: pathToRegexp.RegExpOptions & pathToRegexp.ParseOptions): pathToRegexp.PathRegExp; + +declare namespace pathToRegexp { + export interface PathRegExp extends RegExp { + // An array to be populated with the keys found in the path. + keys: Key[]; + } + + export interface RegExpOptions { + /** + * When `true` the route will be case sensitive. (default: `false`) + */ + sensitive?: boolean; + /** + * When `false` the trailing slash is optional. (default: `false`) + */ + strict?: boolean; + /** + * When `false` the path will match at the beginning. (default: `true`) + */ + end?: boolean; + /** + * Sets the final character for non-ending optimistic matches. (default: `/`) + */ + delimiter?: string; + } + + export interface ParseOptions { + /** + * Set the default delimiter for repeat parameters. (default: `'/'`) + */ + delimiter?: string; + } + + export interface TokensToFunctionOptions { + /** + * When `true` the regexp will be case sensitive. (default: `false`) + */ + sensitive?: boolean; + } + + /** + * Parse an Express-style path into an array of tokens. + */ + export function parse (path: string, options?: ParseOptions): Token[]; + + /** + * Transforming an Express-style path into a valid path. + */ + export function compile (path: string, options?: ParseOptions & TokensToFunctionOptions): PathFunction; + + /** + * Transform an array of tokens into a path generator function. + */ + export function tokensToFunction (tokens: Token[], options?: TokensToFunctionOptions): PathFunction; + + /** + * Transform an array of tokens into a matching regular expression. + */ + export function tokensToRegExp (tokens: Token[], options?: RegExpOptions): PathRegExp; + export function tokensToRegExp (tokens: Token[], keys?: Key[], options?: RegExpOptions): PathRegExp; + + export interface Key { + name: string | number; + prefix: string; + delimiter: string; + optional: boolean; + repeat: boolean; + pattern: string; + partial: boolean; + asterisk: boolean; + } + + interface PathFunctionOptions { + pretty?: boolean; + } + + export type Token = string | Key; + export type Path = string | RegExp | Array; + export type PathFunction = (data?: Object, options?: PathFunctionOptions) => string; +} + +export = pathToRegexp; diff --git a/build/node_modules/path-to-regexp/index.js b/build/node_modules/path-to-regexp/index.js new file mode 100644 index 00000000..e485afec --- /dev/null +++ b/build/node_modules/path-to-regexp/index.js @@ -0,0 +1,426 @@ +var isarray = require('isarray') + +/** + * Expose `pathToRegexp`. + */ +module.exports = pathToRegexp +module.exports.parse = parse +module.exports.compile = compile +module.exports.tokensToFunction = tokensToFunction +module.exports.tokensToRegExp = tokensToRegExp + +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g') + +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = [] + var key = 0 + var index = 0 + var path = '' + var defaultDelimiter = options && options.delimiter || '/' + var res + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0] + var escaped = res[1] + var offset = res.index + path += str.slice(index, offset) + index = offset + m.length + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1] + continue + } + + var next = str[index] + var prefix = res[2] + var name = res[3] + var capture = res[4] + var group = res[5] + var modifier = res[6] + var asterisk = res[7] + + // Push the current path onto the tokens. + if (path) { + tokens.push(path) + path = '' + } + + var partial = prefix != null && next != null && next !== prefix + var repeat = modifier === '+' || modifier === '*' + var optional = modifier === '?' || modifier === '*' + var delimiter = res[2] || defaultDelimiter + var pattern = capture || group + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }) + } + + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index) + } + + // If the path exists, push it onto the end. + if (path) { + tokens.push(path) + } + + return tokens +} + +/** + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} + */ +function compile (str, options) { + return tokensToFunction(parse(str, options), options) +} + +/** + * Prettier encoding of URI path segments. + * + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. + * + * @param {string} + * @return {string} + */ +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens, options) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length) + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) + } + } + + return function (obj, opts) { + var path = '' + var data = obj || {} + var options = opts || {} + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + path += token + + continue + } + + var value = data[token.name] + var segment + + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix + } + + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } + + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') + } + + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } + + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } + + path += (j === 0 ? token.prefix : token.delimiter) + segment + } + + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment + } + + return path + } +} + +/** + * Escape a regular expression string. + * + * @param {string} str + * @return {string} + */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys + return re +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options && options.sensitive ? '' : 'i' +} + +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g) + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }) + } + } + + return attachKeys(path, keys) +} + +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = [] + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source) + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) + + return attachKeys(regexp, keys) +} + +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} + +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + var strict = options.strict + var end = options.end !== false + var route = '' + + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + route += escapeString(token) + } else { + var prefix = escapeString(token.prefix) + var capture = '(?:' + token.pattern + ')' + + keys.push(token) + + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*' + } + + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?' + } else { + capture = prefix + '(' + capture + ')?' + } + } else { + capture = prefix + '(' + capture + ')' + } + + route += capture + } + } + + var delimiter = escapeString(options.delimiter || '/') + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' + } + + if (end) { + route += '$' + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } + + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } + + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} diff --git a/build/node_modules/path-to-regexp/node_modules/isarray/README.md b/build/node_modules/path-to-regexp/node_modules/isarray/README.md new file mode 100644 index 00000000..052a62b8 --- /dev/null +++ b/build/node_modules/path-to-regexp/node_modules/isarray/README.md @@ -0,0 +1,54 @@ + +# isarray + +`Array#isArray` for older browsers. + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](http://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/browserify). + +With [component](http://component.io) do + +```bash +$ component install juliangruber/isarray +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/path-to-regexp/node_modules/isarray/build/build.js b/build/node_modules/path-to-regexp/node_modules/isarray/build/build.js new file mode 100644 index 00000000..ec58596a --- /dev/null +++ b/build/node_modules/path-to-regexp/node_modules/isarray/build/build.js @@ -0,0 +1,209 @@ + +/** + * Require the given path. + * + * @param {String} path + * @return {Object} exports + * @api public + */ + +function require(path, parent, orig) { + var resolved = require.resolve(path); + + // lookup failed + if (null == resolved) { + orig = orig || path; + parent = parent || 'root'; + var err = new Error('Failed to require "' + orig + '" from "' + parent + '"'); + err.path = orig; + err.parent = parent; + err.require = true; + throw err; + } + + var module = require.modules[resolved]; + + // perform real require() + // by invoking the module's + // registered function + if (!module.exports) { + module.exports = {}; + module.client = module.component = true; + module.call(this, module.exports, require.relative(resolved), module); + } + + return module.exports; +} + +/** + * Registered modules. + */ + +require.modules = {}; + +/** + * Registered aliases. + */ + +require.aliases = {}; + +/** + * Resolve `path`. + * + * Lookup: + * + * - PATH/index.js + * - PATH.js + * - PATH + * + * @param {String} path + * @return {String} path or null + * @api private + */ + +require.resolve = function(path) { + if (path.charAt(0) === '/') path = path.slice(1); + var index = path + '/index.js'; + + var paths = [ + path, + path + '.js', + path + '.json', + path + '/index.js', + path + '/index.json' + ]; + + for (var i = 0; i < paths.length; i++) { + var path = paths[i]; + if (require.modules.hasOwnProperty(path)) return path; + } + + if (require.aliases.hasOwnProperty(index)) { + return require.aliases[index]; + } +}; + +/** + * Normalize `path` relative to the current path. + * + * @param {String} curr + * @param {String} path + * @return {String} + * @api private + */ + +require.normalize = function(curr, path) { + var segs = []; + + if ('.' != path.charAt(0)) return path; + + curr = curr.split('/'); + path = path.split('/'); + + for (var i = 0; i < path.length; ++i) { + if ('..' == path[i]) { + curr.pop(); + } else if ('.' != path[i] && '' != path[i]) { + segs.push(path[i]); + } + } + + return curr.concat(segs).join('/'); +}; + +/** + * Register module at `path` with callback `definition`. + * + * @param {String} path + * @param {Function} definition + * @api private + */ + +require.register = function(path, definition) { + require.modules[path] = definition; +}; + +/** + * Alias a module definition. + * + * @param {String} from + * @param {String} to + * @api private + */ + +require.alias = function(from, to) { + if (!require.modules.hasOwnProperty(from)) { + throw new Error('Failed to alias "' + from + '", it does not exist'); + } + require.aliases[to] = from; +}; + +/** + * Return a require function relative to the `parent` path. + * + * @param {String} parent + * @return {Function} + * @api private + */ + +require.relative = function(parent) { + var p = require.normalize(parent, '..'); + + /** + * lastIndexOf helper. + */ + + function lastIndexOf(arr, obj) { + var i = arr.length; + while (i--) { + if (arr[i] === obj) return i; + } + return -1; + } + + /** + * The relative require() itself. + */ + + function localRequire(path) { + var resolved = localRequire.resolve(path); + return require(resolved, parent, path); + } + + /** + * Resolve relative to the parent. + */ + + localRequire.resolve = function(path) { + var c = path.charAt(0); + if ('/' == c) return path.slice(1); + if ('.' == c) return require.normalize(p, path); + + // resolve deps by returning + // the dep in the nearest "deps" + // directory + var segs = parent.split('/'); + var i = lastIndexOf(segs, 'deps') + 1; + if (!i) i = 0; + path = segs.slice(0, i + 1).join('/') + '/deps/' + path; + return path; + }; + + /** + * Check if module is defined at `path`. + */ + + localRequire.exists = function(path) { + return require.modules.hasOwnProperty(localRequire.resolve(path)); + }; + + return localRequire; +}; +require.register("isarray/index.js", function(exports, require, module){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +}); +require.alias("isarray/index.js", "isarray/index.js"); + diff --git a/build/node_modules/path-to-regexp/node_modules/isarray/component.json b/build/node_modules/path-to-regexp/node_modules/isarray/component.json new file mode 100644 index 00000000..9e31b683 --- /dev/null +++ b/build/node_modules/path-to-regexp/node_modules/isarray/component.json @@ -0,0 +1,19 @@ +{ + "name" : "isarray", + "description" : "Array#isArray for older browsers", + "version" : "0.0.1", + "repository" : "juliangruber/isarray", + "homepage": "https://github.com/juliangruber/isarray", + "main" : "index.js", + "scripts" : [ + "index.js" + ], + "dependencies" : {}, + "keywords": ["browser","isarray","array"], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT" +} diff --git a/build/node_modules/path-to-regexp/node_modules/isarray/index.js b/build/node_modules/path-to-regexp/node_modules/isarray/index.js new file mode 100644 index 00000000..5f5ad45d --- /dev/null +++ b/build/node_modules/path-to-regexp/node_modules/isarray/index.js @@ -0,0 +1,3 @@ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; diff --git a/build/node_modules/path-to-regexp/node_modules/isarray/package.json b/build/node_modules/path-to-regexp/node_modules/isarray/package.json new file mode 100644 index 00000000..0318f277 --- /dev/null +++ b/build/node_modules/path-to-regexp/node_modules/isarray/package.json @@ -0,0 +1,57 @@ +{ + "_from": "isarray@0.0.1", + "_id": "isarray@0.0.1", + "_inBundle": false, + "_integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "_location": "/path-to-regexp/isarray", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "isarray@0.0.1", + "name": "isarray", + "escapedName": "isarray", + "rawSpec": "0.0.1", + "saveSpec": null, + "fetchSpec": "0.0.1" + }, + "_requiredBy": [ + "/path-to-regexp" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", + "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf", + "_spec": "isarray@0.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/path-to-regexp", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/isarray/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Array#isArray for older browsers", + "devDependencies": { + "tap": "*" + }, + "homepage": "https://github.com/juliangruber/isarray", + "keywords": [ + "browser", + "isarray", + "array" + ], + "license": "MIT", + "main": "index.js", + "name": "isarray", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/isarray.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "0.0.1" +} diff --git a/build/node_modules/path-to-regexp/package.json b/build/node_modules/path-to-regexp/package.json new file mode 100644 index 00000000..d2a44de1 --- /dev/null +++ b/build/node_modules/path-to-regexp/package.json @@ -0,0 +1,76 @@ +{ + "_from": "path-to-regexp@^1.7.0", + "_id": "path-to-regexp@1.8.0", + "_inBundle": false, + "_integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "_location": "/path-to-regexp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "path-to-regexp@^1.7.0", + "name": "path-to-regexp", + "escapedName": "path-to-regexp", + "rawSpec": "^1.7.0", + "saveSpec": null, + "fetchSpec": "^1.7.0" + }, + "_requiredBy": [ + "/nise" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "_shasum": "887b3ba9d84393e87a0a0b9f4cb756198b53548a", + "_spec": "path-to-regexp@^1.7.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/nise", + "bugs": { + "url": "https://github.com/pillarjs/path-to-regexp/issues" + }, + "bundleDependencies": false, + "component": { + "scripts": { + "path-to-regexp": "index.js" + } + }, + "dependencies": { + "isarray": "0.0.1" + }, + "deprecated": false, + "description": "Express style path to RegExp utility", + "devDependencies": { + "chai": "^2.3.0", + "istanbul": "~0.3.0", + "mocha": "~2.2.4", + "standard": "~3.7.3", + "ts-node": "^0.5.5", + "typescript": "^1.8.7", + "typings": "^1.0.4" + }, + "files": [ + "index.js", + "index.d.ts", + "LICENSE" + ], + "homepage": "https://github.com/pillarjs/path-to-regexp#readme", + "keywords": [ + "express", + "regexp", + "route", + "routing" + ], + "license": "MIT", + "main": "index.js", + "name": "path-to-regexp", + "repository": { + "type": "git", + "url": "git+https://github.com/pillarjs/path-to-regexp.git" + }, + "scripts": { + "lint": "standard", + "prepublish": "typings install", + "test": "npm run lint && npm run test-cov", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require ts-node/register -R spec test.ts", + "test-spec": "mocha --require ts-node/register -R spec --bail test.ts" + }, + "typings": "index.d.ts", + "version": "1.8.0" +} diff --git a/build/node_modules/pbkdf2/package.json b/build/node_modules/pbkdf2/package.json index f3cba09c..04d0792f 100644 --- a/build/node_modules/pbkdf2/package.json +++ b/build/node_modules/pbkdf2/package.json @@ -19,7 +19,7 @@ "/crypto-browserify", "/parse-asn1" ], - "_resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/pbkdf2/-/pbkdf2-3.1.2.tgz", "_shasum": "dd822aa0887580e52f1a039dc3eda108efae3075", "_spec": "pbkdf2@^3.0.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/crypto-browserify", diff --git a/build/node_modules/picomatch/CHANGELOG.md b/build/node_modules/picomatch/CHANGELOG.md new file mode 100644 index 00000000..8ccc6c1b --- /dev/null +++ b/build/node_modules/picomatch/CHANGELOG.md @@ -0,0 +1,136 @@ +# Release history + +**All notable changes to this project will be documented in this file.** + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +
            + Guiding Principles + +- Changelogs are for humans, not machines. +- There should be an entry for every single version. +- The same types of changes should be grouped. +- Versions and sections should be linkable. +- The latest version comes first. +- The release date of each versions is displayed. +- Mention whether you follow Semantic Versioning. + +
            + +
            + Types of changes + +Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): + +- `Added` for new features. +- `Changed` for changes in existing functionality. +- `Deprecated` for soon-to-be removed features. +- `Removed` for now removed features. +- `Fixed` for any bug fixes. +- `Security` in case of vulnerabilities. + +
            + +## 2.3.1 (2022-01-02) + +### Fixed + +* Fixes bug when a pattern containing an expression after the closing parenthesis (`/!(*.d).{ts,tsx}`) was incorrectly converted to regexp ([9f241ef](https://github.com/micromatch/picomatch/commit/9f241ef)). + +### Changed + +* Some documentation improvements ([f81d236](https://github.com/micromatch/picomatch/commit/f81d236), [421e0e7](https://github.com/micromatch/picomatch/commit/421e0e7)). + +## 2.3.0 (2021-05-21) + +### Fixed + +* Fixes bug where file names with two dots were not being matched consistently with negation extglobs containing a star ([56083ef](https://github.com/micromatch/picomatch/commit/56083ef)) + +## 2.2.3 (2021-04-10) + +### Fixed + +* Do not skip pattern seperator for square brackets ([fb08a30](https://github.com/micromatch/picomatch/commit/fb08a30)). +* Set negatedExtGlob also if it does not span the whole pattern ([032e3f5](https://github.com/micromatch/picomatch/commit/032e3f5)). + +## 2.2.2 (2020-03-21) + +### Fixed + +* Correctly handle parts of the pattern after parentheses in the `scan` method ([e15b920](https://github.com/micromatch/picomatch/commit/e15b920)). + +## 2.2.1 (2020-01-04) + +* Fixes [#49](https://github.com/micromatch/picomatch/issues/49), so that braces with no sets or ranges are now propertly treated as literals. + +## 2.2.0 (2020-01-04) + +* Disable fastpaths mode for the parse method ([5b8d33f](https://github.com/micromatch/picomatch/commit/5b8d33f)) +* Add `tokens`, `slashes`, and `parts` to the object returned by `picomatch.scan()`. + +## 2.1.0 (2019-10-31) + +* add benchmarks for scan ([4793b92](https://github.com/micromatch/picomatch/commit/4793b92)) +* Add eslint object-curly-spacing rule ([707c650](https://github.com/micromatch/picomatch/commit/707c650)) +* Add prefer-const eslint rule ([5c7501c](https://github.com/micromatch/picomatch/commit/5c7501c)) +* Add support for nonegate in scan API ([275c9b9](https://github.com/micromatch/picomatch/commit/275c9b9)) +* Change lets to consts. Move root import up. ([4840625](https://github.com/micromatch/picomatch/commit/4840625)) +* closes https://github.com/micromatch/picomatch/issues/21 ([766bcb0](https://github.com/micromatch/picomatch/commit/766bcb0)) +* Fix "Extglobs" table in readme ([eb19da8](https://github.com/micromatch/picomatch/commit/eb19da8)) +* fixes https://github.com/micromatch/picomatch/issues/20 ([9caca07](https://github.com/micromatch/picomatch/commit/9caca07)) +* fixes https://github.com/micromatch/picomatch/issues/26 ([fa58f45](https://github.com/micromatch/picomatch/commit/fa58f45)) +* Lint test ([d433a34](https://github.com/micromatch/picomatch/commit/d433a34)) +* lint unit tests ([0159b55](https://github.com/micromatch/picomatch/commit/0159b55)) +* Make scan work with noext ([6c02e03](https://github.com/micromatch/picomatch/commit/6c02e03)) +* minor linting ([c2a2b87](https://github.com/micromatch/picomatch/commit/c2a2b87)) +* minor parser improvements ([197671d](https://github.com/micromatch/picomatch/commit/197671d)) +* remove eslint since it... ([07876fa](https://github.com/micromatch/picomatch/commit/07876fa)) +* remove funding file ([8ebe96d](https://github.com/micromatch/picomatch/commit/8ebe96d)) +* Remove unused funks ([cbc6d54](https://github.com/micromatch/picomatch/commit/cbc6d54)) +* Run eslint during pretest, fix existing eslint findings ([0682367](https://github.com/micromatch/picomatch/commit/0682367)) +* support `noparen` in scan ([3d37569](https://github.com/micromatch/picomatch/commit/3d37569)) +* update changelog ([7b34e77](https://github.com/micromatch/picomatch/commit/7b34e77)) +* update travis ([777f038](https://github.com/micromatch/picomatch/commit/777f038)) +* Use eslint-disable-next-line instead of eslint-disable ([4e7c1fd](https://github.com/micromatch/picomatch/commit/4e7c1fd)) + +## 2.0.7 (2019-05-14) + +* 2.0.7 ([9eb9a71](https://github.com/micromatch/picomatch/commit/9eb9a71)) +* supports lookbehinds ([1f63f7e](https://github.com/micromatch/picomatch/commit/1f63f7e)) +* update .verb.md file with typo change ([2741279](https://github.com/micromatch/picomatch/commit/2741279)) +* fix: typo in README ([0753e44](https://github.com/micromatch/picomatch/commit/0753e44)) + +## 2.0.4 (2019-04-10) + +### Fixed + +- Readme link [fixed](https://github.com/micromatch/picomatch/pull/13/commits/a96ab3aa2b11b6861c23289964613d85563b05df) by @danez. +- `options.capture` now works as expected when fastpaths are enabled. See https://github.com/micromatch/picomatch/pull/12/commits/26aefd71f1cfaf95c37f1c1fcab68a693b037304. Thanks to @DrPizza. + +## 2.0.0 (2019-04-10) + +### Added + +- Adds support for `options.onIgnore`. See the readme for details +- Adds support for `options.onResult`. See the readme for details + +### Breaking changes + +- The unixify option was renamed to `windows` +- caching and all related options and methods have been removed + +## 1.0.0 (2018-11-05) + +- adds `.onMatch` option +- improvements to `.scan` method +- numerous improvements and optimizations for matching and parsing +- better windows path handling + +## 0.1.0 - 2017-04-13 + +First release. + + +[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog diff --git a/build/node_modules/picomatch/LICENSE b/build/node_modules/picomatch/LICENSE new file mode 100644 index 00000000..3608dca2 --- /dev/null +++ b/build/node_modules/picomatch/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/picomatch/README.md b/build/node_modules/picomatch/README.md new file mode 100644 index 00000000..b0526e28 --- /dev/null +++ b/build/node_modules/picomatch/README.md @@ -0,0 +1,708 @@ +

            Picomatch

            + +

            + +version + + +test status + + +coverage status + + +downloads + +

            + +
            +
            + +

            +Blazing fast and accurate glob matcher written in JavaScript.
            +No dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions. +

            + +
            +
            + +## Why picomatch? + +* **Lightweight** - No dependencies +* **Minimal** - Tiny API surface. Main export is a function that takes a glob pattern and returns a matcher function. +* **Fast** - Loads in about 2ms (that's several times faster than a [single frame of a HD movie](http://www.endmemo.com/sconvert/framespersecondframespermillisecond.php) at 60fps) +* **Performant** - Use the returned matcher function to speed up repeat matching (like when watching files) +* **Accurate matching** - Using wildcards (`*` and `?`), globstars (`**`) for nested directories, [advanced globbing](#advanced-globbing) with extglobs, braces, and POSIX brackets, and support for escaping special characters with `\` or quotes. +* **Well tested** - Thousands of unit tests + +See the [library comparison](#library-comparisons) to other libraries. + +
            +
            + +## Table of Contents + +
            Click to expand + +- [Install](#install) +- [Usage](#usage) +- [API](#api) + * [picomatch](#picomatch) + * [.test](#test) + * [.matchBase](#matchbase) + * [.isMatch](#ismatch) + * [.parse](#parse) + * [.scan](#scan) + * [.compileRe](#compilere) + * [.makeRe](#makere) + * [.toRegex](#toregex) +- [Options](#options) + * [Picomatch options](#picomatch-options) + * [Scan Options](#scan-options) + * [Options Examples](#options-examples) +- [Globbing features](#globbing-features) + * [Basic globbing](#basic-globbing) + * [Advanced globbing](#advanced-globbing) + * [Braces](#braces) + * [Matching special characters as literals](#matching-special-characters-as-literals) +- [Library Comparisons](#library-comparisons) +- [Benchmarks](#benchmarks) +- [Philosophies](#philosophies) +- [About](#about) + * [Author](#author) + * [License](#license) + +_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ + +
            + +
            +
            + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +npm install --save picomatch +``` + +
            + +## Usage + +The main export is a function that takes a glob pattern and an options object and returns a function for matching strings. + +```js +const pm = require('picomatch'); +const isMatch = pm('*.js'); + +console.log(isMatch('abcd')); //=> false +console.log(isMatch('a.js')); //=> true +console.log(isMatch('a.md')); //=> false +console.log(isMatch('a/b.js')); //=> false +``` + +
            + +## API + +### [picomatch](lib/picomatch.js#L32) + +Creates a matcher function from one or more glob patterns. The returned function takes a string to match as its first argument, and returns true if the string is a match. The returned matcher function also takes a boolean as the second argument that, when true, returns an object with additional information. + +**Params** + +* `globs` **{String|Array}**: One or more glob patterns. +* `options` **{Object=}** +* `returns` **{Function=}**: Returns a matcher function. + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch(glob[, options]); + +const isMatch = picomatch('*.!(*a)'); +console.log(isMatch('a.a')); //=> false +console.log(isMatch('a.b')); //=> true +``` + +### [.test](lib/picomatch.js#L117) + +Test `input` with the given `regex`. This is used by the main `picomatch()` function to test the input string. + +**Params** + +* `input` **{String}**: String to test. +* `regex` **{RegExp}** +* `returns` **{Object}**: Returns an object with matching info. + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.test(input, regex[, options]); + +console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); +// { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } +``` + +### [.matchBase](lib/picomatch.js#L161) + +Match the basename of a filepath. + +**Params** + +* `input` **{String}**: String to test. +* `glob` **{RegExp|String}**: Glob pattern or regex created by [.makeRe](#makeRe). +* `returns` **{Boolean}** + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.matchBase(input, glob[, options]); +console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true +``` + +### [.isMatch](lib/picomatch.js#L183) + +Returns true if **any** of the given glob `patterns` match the specified `string`. + +**Params** + +* **{String|Array}**: str The string to test. +* **{String|Array}**: patterns One or more glob patterns to use for matching. +* **{Object}**: See available [options](#options). +* `returns` **{Boolean}**: Returns true if any patterns match `str` + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.isMatch(string, patterns[, options]); + +console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true +console.log(picomatch.isMatch('a.a', 'b.*')); //=> false +``` + +### [.parse](lib/picomatch.js#L199) + +Parse a glob pattern to create the source string for a regular expression. + +**Params** + +* `pattern` **{String}** +* `options` **{Object}** +* `returns` **{Object}**: Returns an object with useful properties and output to be used as a regex source string. + +**Example** + +```js +const picomatch = require('picomatch'); +const result = picomatch.parse(pattern[, options]); +``` + +### [.scan](lib/picomatch.js#L231) + +Scan a glob pattern to separate the pattern into segments. + +**Params** + +* `input` **{String}**: Glob pattern to scan. +* `options` **{Object}** +* `returns` **{Object}**: Returns an object with + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.scan(input[, options]); + +const result = picomatch.scan('!./foo/*.js'); +console.log(result); +{ prefix: '!./', + input: '!./foo/*.js', + start: 3, + base: 'foo', + glob: '*.js', + isBrace: false, + isBracket: false, + isGlob: true, + isExtglob: false, + isGlobstar: false, + negated: true } +``` + +### [.compileRe](lib/picomatch.js#L245) + +Compile a regular expression from the `state` object returned by the +[parse()](#parse) method. + +**Params** + +* `state` **{Object}** +* `options` **{Object}** +* `returnOutput` **{Boolean}**: Intended for implementors, this argument allows you to return the raw output from the parser. +* `returnState` **{Boolean}**: Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. +* `returns` **{RegExp}** + +### [.makeRe](lib/picomatch.js#L286) + +Create a regular expression from a parsed glob pattern. + +**Params** + +* `state` **{String}**: The object returned from the `.parse` method. +* `options` **{Object}** +* `returnOutput` **{Boolean}**: Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. +* `returnState` **{Boolean}**: Implementors may use this argument to return the state from the parsed glob with the returned regular expression. +* `returns` **{RegExp}**: Returns a regex created from the given pattern. + +**Example** + +```js +const picomatch = require('picomatch'); +const state = picomatch.parse('*.js'); +// picomatch.compileRe(state[, options]); + +console.log(picomatch.compileRe(state)); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +### [.toRegex](lib/picomatch.js#L321) + +Create a regular expression from the given regex source string. + +**Params** + +* `source` **{String}**: Regular expression source string. +* `options` **{Object}** +* `returns` **{RegExp}** + +**Example** + +```js +const picomatch = require('picomatch'); +// picomatch.toRegex(source[, options]); + +const { output } = picomatch.parse('*.js'); +console.log(picomatch.toRegex(output)); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +
            + +## Options + +### Picomatch options + +The following options may be used with the main `picomatch()` function or any of the methods on the picomatch API. + +| **Option** | **Type** | **Default value** | **Description** | +| --- | --- | --- | --- | +| `basename` | `boolean` | `false` | If set, then patterns without slashes will be matched against the basename of the path if it contains slashes. For example, `a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. | +| `bash` | `boolean` | `false` | Follow bash matching rules more strictly - disallows backslashes as escape characters, and treats single stars as globstars (`**`). | +| `capture` | `boolean` | `undefined` | Return regex matches in supporting methods. | +| `contains` | `boolean` | `undefined` | Allows glob to match any part of the given string(s). | +| `cwd` | `string` | `process.cwd()` | Current working directory. Used by `picomatch.split()` | +| `debug` | `boolean` | `undefined` | Debug regular expressions when an error is thrown. | +| `dot` | `boolean` | `false` | Enable dotfile matching. By default, dotfiles are ignored unless a `.` is explicitly defined in the pattern, or `options.dot` is true | +| `expandRange` | `function` | `undefined` | Custom function for expanding ranges in brace patterns, such as `{a..z}`. The function receives the range values as two arguments, and it must return a string to be used in the generated regex. It's recommended that returned strings be wrapped in parentheses. | +| `failglob` | `boolean` | `false` | Throws an error if no matches are found. Based on the bash option of the same name. | +| `fastpaths` | `boolean` | `true` | To speed up processing, full parsing is skipped for a handful common glob patterns. Disable this behavior by setting this option to `false`. | +| `flags` | `string` | `undefined` | Regex flags to use in the generated regex. If defined, the `nocase` option will be overridden. | +| [format](#optionsformat) | `function` | `undefined` | Custom function for formatting the returned string. This is useful for removing leading slashes, converting Windows paths to Posix paths, etc. | +| `ignore` | `array\|string` | `undefined` | One or more glob patterns for excluding strings that should not be matched from the result. | +| `keepQuotes` | `boolean` | `false` | Retain quotes in the generated regex, since quotes may also be used as an alternative to backslashes. | +| `literalBrackets` | `boolean` | `undefined` | When `true`, brackets in the glob pattern will be escaped so that only literal brackets will be matched. | +| `matchBase` | `boolean` | `false` | Alias for `basename` | +| `maxLength` | `boolean` | `65536` | Limit the max length of the input string. An error is thrown if the input string is longer than this value. | +| `nobrace` | `boolean` | `false` | Disable brace matching, so that `{a,b}` and `{1..3}` would be treated as literal characters. | +| `nobracket` | `boolean` | `undefined` | Disable matching with regex brackets. | +| `nocase` | `boolean` | `false` | Make matching case-insensitive. Equivalent to the regex `i` flag. Note that this option is overridden by the `flags` option. | +| `nodupes` | `boolean` | `true` | Deprecated, use `nounique` instead. This option will be removed in a future major release. By default duplicates are removed. Disable uniquification by setting this option to false. | +| `noext` | `boolean` | `false` | Alias for `noextglob` | +| `noextglob` | `boolean` | `false` | Disable support for matching with extglobs (like `+(a\|b)`) | +| `noglobstar` | `boolean` | `false` | Disable support for matching nested directories with globstars (`**`) | +| `nonegate` | `boolean` | `false` | Disable support for negating with leading `!` | +| `noquantifiers` | `boolean` | `false` | Disable support for regex quantifiers (like `a{1,2}`) and treat them as brace patterns to be expanded. | +| [onIgnore](#optionsonIgnore) | `function` | `undefined` | Function to be called on ignored items. | +| [onMatch](#optionsonMatch) | `function` | `undefined` | Function to be called on matched items. | +| [onResult](#optionsonResult) | `function` | `undefined` | Function to be called on all items, regardless of whether or not they are matched or ignored. | +| `posix` | `boolean` | `false` | Support POSIX character classes ("posix brackets"). | +| `posixSlashes` | `boolean` | `undefined` | Convert all slashes in file paths to forward slashes. This does not convert slashes in the glob pattern itself | +| `prepend` | `boolean` | `undefined` | String to prepend to the generated regex used for matching. | +| `regex` | `boolean` | `false` | Use regular expression rules for `+` (instead of matching literal `+`), and for stars that follow closing parentheses or brackets (as in `)*` and `]*`). | +| `strictBrackets` | `boolean` | `undefined` | Throw an error if brackets, braces, or parens are imbalanced. | +| `strictSlashes` | `boolean` | `undefined` | When true, picomatch won't match trailing slashes with single stars. | +| `unescape` | `boolean` | `undefined` | Remove backslashes preceding escaped characters in the glob pattern. By default, backslashes are retained. | +| `unixify` | `boolean` | `undefined` | Alias for `posixSlashes`, for backwards compatibility. | + +picomatch has automatic detection for regex positive and negative lookbehinds. If the pattern contains a negative lookbehind, you must be using Node.js >= 8.10 or else picomatch will throw an error. + +### Scan Options + +In addition to the main [picomatch options](#picomatch-options), the following options may also be used with the [.scan](#scan) method. + +| **Option** | **Type** | **Default value** | **Description** | +| --- | --- | --- | --- | +| `tokens` | `boolean` | `false` | When `true`, the returned object will include an array of tokens (objects), representing each path "segment" in the scanned glob pattern | +| `parts` | `boolean` | `false` | When `true`, the returned object will include an array of strings representing each path "segment" in the scanned glob pattern. This is automatically enabled when `options.tokens` is true | + +**Example** + +```js +const picomatch = require('picomatch'); +const result = picomatch.scan('!./foo/*.js', { tokens: true }); +console.log(result); +// { +// prefix: '!./', +// input: '!./foo/*.js', +// start: 3, +// base: 'foo', +// glob: '*.js', +// isBrace: false, +// isBracket: false, +// isGlob: true, +// isExtglob: false, +// isGlobstar: false, +// negated: true, +// maxDepth: 2, +// tokens: [ +// { value: '!./', depth: 0, isGlob: false, negated: true, isPrefix: true }, +// { value: 'foo', depth: 1, isGlob: false }, +// { value: '*.js', depth: 1, isGlob: true } +// ], +// slashes: [ 2, 6 ], +// parts: [ 'foo', '*.js' ] +// } +``` + +
            + +### Options Examples + +#### options.expandRange + +**Type**: `function` + +**Default**: `undefined` + +Custom function for expanding ranges in brace patterns. The [fill-range](https://github.com/jonschlinkert/fill-range) library is ideal for this purpose, or you can use custom code to do whatever you need. + +**Example** + +The following example shows how to create a glob that matches a folder + +```js +const fill = require('fill-range'); +const regex = pm.makeRe('foo/{01..25}/bar', { + expandRange(a, b) { + return `(${fill(a, b, { toRegex: true })})`; + } +}); + +console.log(regex); +//=> /^(?:foo\/((?:0[1-9]|1[0-9]|2[0-5]))\/bar)$/ + +console.log(regex.test('foo/00/bar')) // false +console.log(regex.test('foo/01/bar')) // true +console.log(regex.test('foo/10/bar')) // true +console.log(regex.test('foo/22/bar')) // true +console.log(regex.test('foo/25/bar')) // true +console.log(regex.test('foo/26/bar')) // false +``` + +#### options.format + +**Type**: `function` + +**Default**: `undefined` + +Custom function for formatting strings before they're matched. + +**Example** + +```js +// strip leading './' from strings +const format = str => str.replace(/^\.\//, ''); +const isMatch = picomatch('foo/*.js', { format }); +console.log(isMatch('./foo/bar.js')); //=> true +``` + +#### options.onMatch + +```js +const onMatch = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onMatch }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +#### options.onIgnore + +```js +const onIgnore = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onIgnore, ignore: 'f*' }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +#### options.onResult + +```js +const onResult = ({ glob, regex, input, output }) => { + console.log({ glob, regex, input, output }); +}; + +const isMatch = picomatch('*', { onResult, ignore: 'f*' }); +isMatch('foo'); +isMatch('bar'); +isMatch('baz'); +``` + +
            +
            + +## Globbing features + +* [Basic globbing](#basic-globbing) (Wildcard matching) +* [Advanced globbing](#advanced-globbing) (extglobs, posix brackets, brace matching) + +### Basic globbing + +| **Character** | **Description** | +| --- | --- | +| `*` | Matches any character zero or more times, excluding path separators. Does _not match_ path separators or hidden files or directories ("dotfiles"), unless explicitly enabled by setting the `dot` option to `true`. | +| `**` | Matches any character zero or more times, including path separators. Note that `**` will only match path separators (`/`, and `\\` on Windows) when they are the only characters in a path segment. Thus, `foo**/bar` is equivalent to `foo*/bar`, and `foo/a**b/bar` is equivalent to `foo/a*b/bar`, and _more than two_ consecutive stars in a glob path segment are regarded as _a single star_. Thus, `foo/***/bar` is equivalent to `foo/*/bar`. | +| `?` | Matches any character excluding path separators one time. Does _not match_ path separators or leading dots. | +| `[abc]` | Matches any characters inside the brackets. For example, `[abc]` would match the characters `a`, `b` or `c`, and nothing else. | + +#### Matching behavior vs. Bash + +Picomatch's matching features and expected results in unit tests are based on Bash's unit tests and the Bash 4.3 specification, with the following exceptions: + +* Bash will match `foo/bar/baz` with `*`. Picomatch only matches nested directories with `**`. +* Bash greedily matches with negated extglobs. For example, Bash 4.3 says that `!(foo)*` should match `foo` and `foobar`, since the trailing `*` bracktracks to match the preceding pattern. This is very memory-inefficient, and IMHO, also incorrect. Picomatch would return `false` for both `foo` and `foobar`. + +
            + +### Advanced globbing + +* [extglobs](#extglobs) +* [POSIX brackets](#posix-brackets) +* [Braces](#brace-expansion) + +#### Extglobs + +| **Pattern** | **Description** | +| --- | --- | +| `@(pattern)` | Match _only one_ consecutive occurrence of `pattern` | +| `*(pattern)` | Match _zero or more_ consecutive occurrences of `pattern` | +| `+(pattern)` | Match _one or more_ consecutive occurrences of `pattern` | +| `?(pattern)` | Match _zero or **one**_ consecutive occurrences of `pattern` | +| `!(pattern)` | Match _anything but_ `pattern` | + +**Examples** + +```js +const pm = require('picomatch'); + +// *(pattern) matches ZERO or more of "pattern" +console.log(pm.isMatch('a', 'a*(z)')); // true +console.log(pm.isMatch('az', 'a*(z)')); // true +console.log(pm.isMatch('azzz', 'a*(z)')); // true + +// +(pattern) matches ONE or more of "pattern" +console.log(pm.isMatch('a', 'a*(z)')); // true +console.log(pm.isMatch('az', 'a*(z)')); // true +console.log(pm.isMatch('azzz', 'a*(z)')); // true + +// supports multiple extglobs +console.log(pm.isMatch('foo.bar', '!(foo).!(bar)')); // false + +// supports nested extglobs +console.log(pm.isMatch('foo.bar', '!(!(foo)).!(!(bar))')); // true +``` + +#### POSIX brackets + +POSIX classes are disabled by default. Enable this feature by setting the `posix` option to true. + +**Enable POSIX bracket support** + +```js +console.log(pm.makeRe('[[:word:]]+', { posix: true })); +//=> /^(?:(?=.)[A-Za-z0-9_]+\/?)$/ +``` + +**Supported POSIX classes** + +The following named POSIX bracket expressions are supported: + +* `[:alnum:]` - Alphanumeric characters, equ `[a-zA-Z0-9]` +* `[:alpha:]` - Alphabetical characters, equivalent to `[a-zA-Z]`. +* `[:ascii:]` - ASCII characters, equivalent to `[\\x00-\\x7F]`. +* `[:blank:]` - Space and tab characters, equivalent to `[ \\t]`. +* `[:cntrl:]` - Control characters, equivalent to `[\\x00-\\x1F\\x7F]`. +* `[:digit:]` - Numerical digits, equivalent to `[0-9]`. +* `[:graph:]` - Graph characters, equivalent to `[\\x21-\\x7E]`. +* `[:lower:]` - Lowercase letters, equivalent to `[a-z]`. +* `[:print:]` - Print characters, equivalent to `[\\x20-\\x7E ]`. +* `[:punct:]` - Punctuation and symbols, equivalent to `[\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~]`. +* `[:space:]` - Extended space characters, equivalent to `[ \\t\\r\\n\\v\\f]`. +* `[:upper:]` - Uppercase letters, equivalent to `[A-Z]`. +* `[:word:]` - Word characters (letters, numbers and underscores), equivalent to `[A-Za-z0-9_]`. +* `[:xdigit:]` - Hexadecimal digits, equivalent to `[A-Fa-f0-9]`. + +See the [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html) for more information. + +### Braces + +Picomatch does not do brace expansion. For [brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) and advanced matching with braces, use [micromatch](https://github.com/micromatch/micromatch) instead. Picomatch has very basic support for braces. + +### Matching special characters as literals + +If you wish to match the following special characters in a filepath, and you want to use these characters in your glob pattern, they must be escaped with backslashes or quotes: + +**Special Characters** + +Some characters that are used for matching in regular expressions are also regarded as valid file path characters on some platforms. + +To match any of the following characters as literals: `$^*+?()[] + +Examples: + +```js +console.log(pm.makeRe('foo/bar \\(1\\)')); +console.log(pm.makeRe('foo/bar \\(1\\)')); +``` + +
            +
            + +## Library Comparisons + +The following table shows which features are supported by [minimatch](https://github.com/isaacs/minimatch), [micromatch](https://github.com/micromatch/micromatch), [picomatch](https://github.com/micromatch/picomatch), [nanomatch](https://github.com/micromatch/nanomatch), [extglob](https://github.com/micromatch/extglob), [braces](https://github.com/micromatch/braces), and [expand-brackets](https://github.com/micromatch/expand-brackets). + +| **Feature** | `minimatch` | `micromatch` | `picomatch` | `nanomatch` | `extglob` | `braces` | `expand-brackets` | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Wildcard matching (`*?+`) | ✔ | ✔ | ✔ | ✔ | - | - | - | +| Advancing globbing | ✔ | ✔ | ✔ | - | - | - | - | +| Brace _matching_ | ✔ | ✔ | ✔ | - | - | ✔ | - | +| Brace _expansion_ | ✔ | ✔ | - | - | - | ✔ | - | +| Extglobs | partial | ✔ | ✔ | - | ✔ | - | - | +| Posix brackets | - | ✔ | ✔ | - | - | - | ✔ | +| Regular expression syntax | - | ✔ | ✔ | ✔ | ✔ | - | ✔ | +| File system operations | - | - | - | - | - | - | - | + +
            +
            + +## Benchmarks + +Performance comparison of picomatch and minimatch. + +``` +# .makeRe star + picomatch x 1,993,050 ops/sec ±0.51% (91 runs sampled) + minimatch x 627,206 ops/sec ±1.96% (87 runs sampled)) + +# .makeRe star; dot=true + picomatch x 1,436,640 ops/sec ±0.62% (91 runs sampled) + minimatch x 525,876 ops/sec ±0.60% (88 runs sampled) + +# .makeRe globstar + picomatch x 1,592,742 ops/sec ±0.42% (90 runs sampled) + minimatch x 962,043 ops/sec ±1.76% (91 runs sampled)d) + +# .makeRe globstars + picomatch x 1,615,199 ops/sec ±0.35% (94 runs sampled) + minimatch x 477,179 ops/sec ±1.33% (91 runs sampled) + +# .makeRe with leading star + picomatch x 1,220,856 ops/sec ±0.40% (92 runs sampled) + minimatch x 453,564 ops/sec ±1.43% (94 runs sampled) + +# .makeRe - basic braces + picomatch x 392,067 ops/sec ±0.70% (90 runs sampled) + minimatch x 99,532 ops/sec ±2.03% (87 runs sampled)) +``` + +
            +
            + +## Philosophies + +The goal of this library is to be blazing fast, without compromising on accuracy. + +**Accuracy** + +The number one of goal of this library is accuracy. However, it's not unusual for different glob implementations to have different rules for matching behavior, even with simple wildcard matching. It gets increasingly more complicated when combinations of different features are combined, like when extglobs are combined with globstars, braces, slashes, and so on: `!(**/{a,b,*/c})`. + +Thus, given that there is no canonical glob specification to use as a single source of truth when differences of opinion arise regarding behavior, sometimes we have to implement our best judgement and rely on feedback from users to make improvements. + +**Performance** + +Although this library performs well in benchmarks, and in most cases it's faster than other popular libraries we benchmarked against, we will always choose accuracy over performance. It's not helpful to anyone if our library is faster at returning the wrong answer. + +
            +
            + +## About + +
            +Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. + +
            + +
            +Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +npm install && npm test +``` + +
            + +
            +Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
            + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2017-present, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). diff --git a/build/node_modules/picomatch/index.js b/build/node_modules/picomatch/index.js new file mode 100644 index 00000000..d2f2bc59 --- /dev/null +++ b/build/node_modules/picomatch/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/picomatch'); diff --git a/build/node_modules/picomatch/lib/constants.js b/build/node_modules/picomatch/lib/constants.js new file mode 100644 index 00000000..a62ef387 --- /dev/null +++ b/build/node_modules/picomatch/lib/constants.js @@ -0,0 +1,179 @@ +'use strict'; + +const path = require('path'); +const WIN_SLASH = '\\\\/'; +const WIN_NO_SLASH = `[^${WIN_SLASH}]`; + +/** + * Posix glob regex + */ + +const DOT_LITERAL = '\\.'; +const PLUS_LITERAL = '\\+'; +const QMARK_LITERAL = '\\?'; +const SLASH_LITERAL = '\\/'; +const ONE_CHAR = '(?=.)'; +const QMARK = '[^/]'; +const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; +const START_ANCHOR = `(?:^|${SLASH_LITERAL})`; +const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; +const NO_DOT = `(?!${DOT_LITERAL})`; +const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; +const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; +const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; +const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; +const STAR = `${QMARK}*?`; + +const POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR +}; + +/** + * Windows glob regex + */ + +const WINDOWS_CHARS = { + ...POSIX_CHARS, + + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` +}; + +/** + * POSIX Bracket Regex + */ + +const POSIX_REGEX_SOURCE = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; + +module.exports = { + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + '***': '*', + '**/**': '**', + '**/**/**': '**' + }, + + // Digits + CHAR_0: 48, /* 0 */ + CHAR_9: 57, /* 9 */ + + // Alphabet chars. + CHAR_UPPERCASE_A: 65, /* A */ + CHAR_LOWERCASE_A: 97, /* a */ + CHAR_UPPERCASE_Z: 90, /* Z */ + CHAR_LOWERCASE_Z: 122, /* z */ + + CHAR_LEFT_PARENTHESES: 40, /* ( */ + CHAR_RIGHT_PARENTHESES: 41, /* ) */ + + CHAR_ASTERISK: 42, /* * */ + + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, /* & */ + CHAR_AT: 64, /* @ */ + CHAR_BACKWARD_SLASH: 92, /* \ */ + CHAR_CARRIAGE_RETURN: 13, /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ + CHAR_COLON: 58, /* : */ + CHAR_COMMA: 44, /* , */ + CHAR_DOT: 46, /* . */ + CHAR_DOUBLE_QUOTE: 34, /* " */ + CHAR_EQUAL: 61, /* = */ + CHAR_EXCLAMATION_MARK: 33, /* ! */ + CHAR_FORM_FEED: 12, /* \f */ + CHAR_FORWARD_SLASH: 47, /* / */ + CHAR_GRAVE_ACCENT: 96, /* ` */ + CHAR_HASH: 35, /* # */ + CHAR_HYPHEN_MINUS: 45, /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, /* < */ + CHAR_LEFT_CURLY_BRACE: 123, /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */ + CHAR_LINE_FEED: 10, /* \n */ + CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */ + CHAR_PERCENT: 37, /* % */ + CHAR_PLUS: 43, /* + */ + CHAR_QUESTION_MARK: 63, /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */ + CHAR_SEMICOLON: 59, /* ; */ + CHAR_SINGLE_QUOTE: 39, /* ' */ + CHAR_SPACE: 32, /* */ + CHAR_TAB: 9, /* \t */ + CHAR_UNDERSCORE: 95, /* _ */ + CHAR_VERTICAL_LINE: 124, /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */ + + SEP: path.sep, + + /** + * Create EXTGLOB_CHARS + */ + + extglobChars(chars) { + return { + '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` }, + '?': { type: 'qmark', open: '(?:', close: ')?' }, + '+': { type: 'plus', open: '(?:', close: ')+' }, + '*': { type: 'star', open: '(?:', close: ')*' }, + '@': { type: 'at', open: '(?:', close: ')' } + }; + }, + + /** + * Create GLOB_CHARS + */ + + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } +}; diff --git a/build/node_modules/picomatch/lib/parse.js b/build/node_modules/picomatch/lib/parse.js new file mode 100644 index 00000000..58269d01 --- /dev/null +++ b/build/node_modules/picomatch/lib/parse.js @@ -0,0 +1,1091 @@ +'use strict'; + +const constants = require('./constants'); +const utils = require('./utils'); + +/** + * Constants + */ + +const { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS +} = constants; + +/** + * Helpers + */ + +const expandRange = (args, options) => { + if (typeof options.expandRange === 'function') { + return options.expandRange(...args, options); + } + + args.sort(); + const value = `[${args.join('-')}]`; + + try { + /* eslint-disable-next-line no-new */ + new RegExp(value); + } catch (ex) { + return args.map(v => utils.escapeRegex(v)).join('..'); + } + + return value; +}; + +/** + * Create the message for a syntax error + */ + +const syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; +}; + +/** + * Parse the given input string. + * @param {String} input + * @param {Object} options + * @return {Object} + */ + +const parse = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError('Expected a string'); + } + + input = REPLACEMENTS[input] || input; + + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + const bos = { type: 'bos', value: '', output: opts.prepend || '' }; + const tokens = [bos]; + + const capture = opts.capture ? '' : '?:'; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const PLATFORM_CHARS = constants.globChars(win32); + const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS); + + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + + const globstar = opts => { + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const nodot = opts.dot ? '' : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + // minimatch options support + if (typeof opts.noext === 'boolean') { + opts.noextglob = opts.noext; + } + + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: '', + output: '', + prefix: '', + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + + input = utils.removePrefix(input, state); + len = input.length; + + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + + /** + * Tokenizing helpers + */ + + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ''; + const remaining = () => input.slice(state.index + 1); + const consume = (value = '', num = 0) => { + state.consumed += value; + state.index += num; + }; + + const append = token => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + + const negate = () => { + let count = 1; + + while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) { + advance(); + state.start++; + count++; + } + + if (count % 2 === 0) { + return false; + } + + state.negated = true; + state.start++; + return true; + }; + + const increment = type => { + state[type]++; + stack.push(type); + }; + + const decrement = type => { + state[type]--; + stack.pop(); + }; + + /** + * Push tokens onto the tokens array. This helper speeds up + * tokenizing by 1) helping us avoid backtracking as much as possible, + * and 2) helping us avoid creating extra tokens when consecutive + * characters are plain text. This improves performance and simplifies + * lookbehinds. + */ + + const push = tok => { + if (prev.type === 'globstar') { + const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace'); + const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren')); + + if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = 'star'; + prev.value = '*'; + prev.output = star; + state.output += prev.output; + } + } + + if (extglobs.length && tok.type !== 'paren') { + extglobs[extglobs.length - 1].inner += tok.value; + } + + if (tok.value || tok.output) append(tok); + if (prev && prev.type === 'text' && tok.type === 'text') { + prev.value += tok.value; + prev.output = (prev.output || '') + tok.value; + return; + } + + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + + const extglobOpen = (type, value) => { + const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' }; + + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + const output = (opts.capture ? '(' : '') + token.open; + + increment('parens'); + push({ type, value, output: state.output ? '' : ONE_CHAR }); + push({ type: 'paren', extglob: true, value: advance(), output }); + extglobs.push(token); + }; + + const extglobClose = token => { + let output = token.close + (opts.capture ? ')' : ''); + let rest; + + if (token.type === 'negate') { + let extglobStar = star; + + if (token.inner && token.inner.length > 1 && token.inner.includes('/')) { + extglobStar = globstar(opts); + } + + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + + if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis. + // In this case, we need to parse the string and use it in the output of the original pattern. + // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`. + // + // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`. + const expression = parse(rest, { ...options, fastpaths: false }).output; + + output = token.close = `)${expression})${extglobStar})`; + } + + if (token.prev.type === 'bos') { + state.negatedExtglob = true; + } + } + + push({ type: 'paren', extglob: true, value, output }); + decrement('parens'); + }; + + /** + * Fast paths + */ + + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === '\\') { + backslashes = true; + return m; + } + + if (first === '?') { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ''); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ''); + } + return QMARK.repeat(chars.length); + } + + if (first === '.') { + return DOT_LITERAL.repeat(chars.length); + } + + if (first === '*') { + if (esc) { + return esc + first + (rest ? star : ''); + } + return star; + } + return esc ? m : `\\${m}`; + }); + + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ''); + } else { + output = output.replace(/\\+/g, m => { + return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : ''); + }); + } + } + + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + + state.output = utils.wrapOutput(output, state, options); + return state; + } + + /** + * Tokenize input until we reach end-of-string + */ + + while (!eos()) { + value = advance(); + + if (value === '\u0000') { + continue; + } + + /** + * Escaped characters + */ + + if (value === '\\') { + const next = peek(); + + if (next === '/' && opts.bash !== true) { + continue; + } + + if (next === '.' || next === ';') { + continue; + } + + if (!next) { + value += '\\'; + push({ type: 'text', value }); + continue; + } + + // collapse slashes to reduce potential for exploits + const match = /^\\+/.exec(remaining()); + let slashes = 0; + + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += '\\'; + } + } + + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + + if (state.brackets === 0) { + push({ type: 'text', value }); + continue; + } + } + + /** + * If we're inside a regex character class, continue + * until we reach the closing bracket. + */ + + if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) { + if (opts.posix !== false && value === ':') { + const inner = prev.value.slice(1); + if (inner.includes('[')) { + prev.posix = true; + + if (inner.includes(':')) { + const idx = prev.value.lastIndexOf('['); + const pre = prev.value.slice(0, idx); + const rest = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + + if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) { + value = `\\${value}`; + } + + if (value === ']' && (prev.value === '[' || prev.value === '[^')) { + value = `\\${value}`; + } + + if (opts.posix === true && value === '!' && prev.value === '[') { + value = '^'; + } + + prev.value += value; + append({ value }); + continue; + } + + /** + * If we're inside a quoted string, continue + * until we reach the closing double quote. + */ + + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + + /** + * Double quotes + */ + + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: 'text', value }); + } + continue; + } + + /** + * Parentheses + */ + + if (value === '(') { + increment('parens'); + push({ type: 'paren', value }); + continue; + } + + if (value === ')') { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '(')); + } + + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + + push({ type: 'paren', value, output: state.parens ? ')' : '\\)' }); + decrement('parens'); + continue; + } + + /** + * Square brackets + */ + + if (value === '[') { + if (opts.nobracket === true || !remaining().includes(']')) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('closing', ']')); + } + + value = `\\${value}`; + } else { + increment('brackets'); + } + + push({ type: 'bracket', value }); + continue; + } + + if (value === ']') { + if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) { + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError('opening', '[')); + } + + push({ type: 'text', value, output: `\\${value}` }); + continue; + } + + decrement('brackets'); + + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) { + value = `/${value}`; + } + + prev.value += value; + append({ value }); + + // when literal brackets are explicitly disabled + // assume we should match with a regex character class + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + + // when literal brackets are explicitly enabled + // assume we should escape the brackets to match literal characters + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + + // when the user specifies nothing, try to match both + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + + /** + * Braces + */ + + if (value === '{' && opts.nobrace !== true) { + increment('braces'); + + const open = { + type: 'brace', + value, + output: '(', + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + + braces.push(open); + push(open); + continue; + } + + if (value === '}') { + const brace = braces[braces.length - 1]; + + if (opts.nobrace === true || !brace) { + push({ type: 'text', value, output: value }); + continue; + } + + let output = ')'; + + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === 'brace') { + break; + } + if (arr[i].type !== 'dots') { + range.unshift(arr[i].value); + } + } + + output = expandRange(range, opts); + state.backtrack = true; + } + + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = '\\{'; + value = output = '\\}'; + state.output = out; + for (const t of toks) { + state.output += (t.output || t.value); + } + } + + push({ type: 'brace', value, output }); + decrement('braces'); + braces.pop(); + continue; + } + + /** + * Pipes + */ + + if (value === '|') { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: 'text', value }); + continue; + } + + /** + * Commas + */ + + if (value === ',') { + let output = value; + + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === 'braces') { + brace.comma = true; + output = '|'; + } + + push({ type: 'comma', value, output }); + continue; + } + + /** + * Slashes + */ + + if (value === '/') { + // if the beginning of the glob is "./", advance the start + // to the current index, and don't add the "./" characters + // to the state. This greatly simplifies lookbehinds when + // checking for BOS characters like "!" and "." (not "./") + if (prev.type === 'dot' && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ''; + state.output = ''; + tokens.pop(); + prev = bos; // reset "prev" to the first token + continue; + } + + push({ type: 'slash', value, output: SLASH_LITERAL }); + continue; + } + + /** + * Dots + */ + + if (value === '.') { + if (state.braces > 0 && prev.type === 'dot') { + if (prev.value === '.') prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = 'dots'; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + + if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') { + push({ type: 'text', value, output: DOT_LITERAL }); + continue; + } + + push({ type: 'dot', value, output: DOT_LITERAL }); + continue; + } + + /** + * Question marks + */ + + if (value === '?') { + const isGroup = prev && prev.value === '('; + if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('qmark', value); + continue; + } + + if (prev && prev.type === 'paren') { + const next = peek(); + let output = value; + + if (next === '<' && !utils.supportsLookbehinds()) { + throw new Error('Node.js v10 or higher is required for regex lookbehinds'); + } + + if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) { + output = `\\${value}`; + } + + push({ type: 'text', value, output }); + continue; + } + + if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) { + push({ type: 'qmark', value, output: QMARK_NO_DOT }); + continue; + } + + push({ type: 'qmark', value, output: QMARK }); + continue; + } + + /** + * Exclamation + */ + + if (value === '!') { + if (opts.noextglob !== true && peek() === '(') { + if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) { + extglobOpen('negate', value); + continue; + } + } + + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + + /** + * Plus + */ + + if (value === '+') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + extglobOpen('plus', value); + continue; + } + + if ((prev && prev.value === '(') || opts.regex === false) { + push({ type: 'plus', value, output: PLUS_LITERAL }); + continue; + } + + if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) { + push({ type: 'plus', value }); + continue; + } + + push({ type: 'plus', value: PLUS_LITERAL }); + continue; + } + + /** + * Plain text + */ + + if (value === '@') { + if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') { + push({ type: 'at', extglob: true, value, output: '' }); + continue; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Plain text + */ + + if (value !== '*') { + if (value === '$' || value === '^') { + value = `\\${value}`; + } + + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + + push({ type: 'text', value }); + continue; + } + + /** + * Stars + */ + + if (prev && (prev.type === 'globstar' || prev.star === true)) { + prev.type = 'star'; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen('star', value); + continue; + } + + if (prev.type === 'star') { + if (opts.noglobstar === true) { + consume(value); + continue; + } + + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === 'slash' || prior.type === 'bos'; + const afterStar = before && (before.type === 'star' || before.type === 'globstar'); + + if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) { + push({ type: 'star', value, output: '' }); + continue; + } + + const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace'); + const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren'); + if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) { + push({ type: 'star', value, output: '' }); + continue; + } + + // strip consecutive `/**/` + while (rest.slice(0, 3) === '/**') { + const after = input[state.index + 4]; + if (after && after !== '/') { + break; + } + rest = rest.slice(3); + consume('/**', 3); + } + + if (prior.type === 'bos' && eos()) { + prev.type = 'globstar'; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)'); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + + if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') { + const end = rest[1] !== void 0 ? '|$' : ''; + + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + + prev.type = 'globstar'; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + + state.output += prior.output + prev.output; + state.globstar = true; + + consume(value + advance()); + + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + if (prior.type === 'bos' && rest[0] === '/') { + prev.type = 'globstar'; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: 'slash', value: '/', output: '' }); + continue; + } + + // remove single star from output + state.output = state.output.slice(0, -prev.output.length); + + // reset previous token to globstar + prev.type = 'globstar'; + prev.output = globstar(opts); + prev.value += value; + + // reset output with globstar + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + + const token = { type: 'star', value, output: star }; + + if (opts.bash === true) { + token.output = '.*?'; + if (prev.type === 'bos' || prev.type === 'slash') { + token.output = nodot + token.output; + } + push(token); + continue; + } + + if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) { + token.output = value; + push(token); + continue; + } + + if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') { + if (prev.type === 'dot') { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + + } else { + state.output += nodot; + prev.output += nodot; + } + + if (peek() !== '*') { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + + push(token); + } + + while (state.brackets > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']')); + state.output = utils.escapeLast(state.output, '['); + decrement('brackets'); + } + + while (state.parens > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')')); + state.output = utils.escapeLast(state.output, '('); + decrement('parens'); + } + + while (state.braces > 0) { + if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}')); + state.output = utils.escapeLast(state.output, '{'); + decrement('braces'); + } + + if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) { + push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` }); + } + + // rebuild the output if we had to backtrack at any point + if (state.backtrack === true) { + state.output = ''; + + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + + if (token.suffix) { + state.output += token.suffix; + } + } + } + + return state; +}; + +/** + * Fast paths for creating regular expressions for common glob patterns. + * This can significantly speed up processing and has very little downside + * impact when none of the fast paths match. + */ + +parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + + // create constants based on platform, for windows or posix + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants.globChars(win32); + + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? '' : '?:'; + const state = { negated: false, prefix: '' }; + let star = opts.bash === true ? '.*?' : STAR; + + if (opts.capture) { + star = `(${star})`; + } + + const globstar = opts => { + if (opts.noglobstar === true) return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + + const create = str => { + switch (str) { + case '*': + return `${nodot}${ONE_CHAR}${star}`; + + case '.*': + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*.*': + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '*/*': + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + + case '**': + return nodot + globstar(opts); + + case '**/*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + + case '**/*.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + + case '**/.*': + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) return; + + const source = create(match[1]); + if (!source) return; + + return source + DOT_LITERAL + match[2]; + } + } + }; + + const output = utils.removePrefix(input, state); + let source = create(output); + + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + + return source; +}; + +module.exports = parse; diff --git a/build/node_modules/picomatch/lib/picomatch.js b/build/node_modules/picomatch/lib/picomatch.js new file mode 100644 index 00000000..782d8094 --- /dev/null +++ b/build/node_modules/picomatch/lib/picomatch.js @@ -0,0 +1,342 @@ +'use strict'; + +const path = require('path'); +const scan = require('./scan'); +const parse = require('./parse'); +const utils = require('./utils'); +const constants = require('./constants'); +const isObject = val => val && typeof val === 'object' && !Array.isArray(val); + +/** + * Creates a matcher function from one or more glob patterns. The + * returned function takes a string to match as its first argument, + * and returns true if the string is a match. The returned matcher + * function also takes a boolean as the second argument that, when true, + * returns an object with additional information. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch(glob[, options]); + * + * const isMatch = picomatch('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @name picomatch + * @param {String|Array} `globs` One or more glob patterns. + * @param {Object=} `options` + * @return {Function=} Returns a matcher function. + * @api public + */ + +const picomatch = (glob, options, returnState = false) => { + if (Array.isArray(glob)) { + const fns = glob.map(input => picomatch(input, options, returnState)); + const arrayMatcher = str => { + for (const isMatch of fns) { + const state = isMatch(str); + if (state) return state; + } + return false; + }; + return arrayMatcher; + } + + const isState = isObject(glob) && glob.tokens && glob.input; + + if (glob === '' || (typeof glob !== 'string' && !isState)) { + throw new TypeError('Expected pattern to be a non-empty string'); + } + + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState + ? picomatch.compileRe(glob, options) + : picomatch.makeRe(glob, options, false, true); + + const state = regex.state; + delete regex.state; + + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix }); + const result = { glob, state, regex, posix, input, output, match, isMatch }; + + if (typeof opts.onResult === 'function') { + opts.onResult(result); + } + + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + + if (isIgnored(input)) { + if (typeof opts.onIgnore === 'function') { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + + if (typeof opts.onMatch === 'function') { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + + if (returnState) { + matcher.state = state; + } + + return matcher; +}; + +/** + * Test `input` with the given `regex`. This is used by the main + * `picomatch()` function to test the input string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.test(input, regex[, options]); + * + * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/)); + * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' } + * ``` + * @param {String} `input` String to test. + * @param {RegExp} `regex` + * @return {Object} Returns an object with matching info. + * @api public + */ + +picomatch.test = (input, regex, options, { glob, posix } = {}) => { + if (typeof input !== 'string') { + throw new TypeError('Expected input to be a string'); + } + + if (input === '') { + return { isMatch: false, output: '' }; + } + + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob; + let output = (match && format) ? format(input) : input; + + if (match === false) { + output = format ? format(input) : input; + match = output === glob; + } + + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + + return { isMatch: Boolean(match), match, output }; +}; + +/** + * Match the basename of a filepath. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.matchBase(input, glob[, options]); + * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true + * ``` + * @param {String} `input` String to test. + * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe). + * @return {Boolean} + * @api public + */ + +picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => { + const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options); + return regex.test(path.basename(input)); +}; + +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.isMatch(string, patterns[, options]); + * + * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String|Array} str The string to test. + * @param {String|Array} patterns One or more glob patterns to use for matching. + * @param {Object} [options] See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const picomatch = require('picomatch'); + * const result = picomatch.parse(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as a regex source string. + * @api public + */ + +picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); +}; + +/** + * Scan a glob pattern to separate the pattern into segments. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.scan(input[, options]); + * + * const result = picomatch.scan('!./foo/*.js'); + * console.log(result); + * { prefix: '!./', + * input: '!./foo/*.js', + * start: 3, + * base: 'foo', + * glob: '*.js', + * isBrace: false, + * isBracket: false, + * isGlob: true, + * isExtglob: false, + * isGlobstar: false, + * negated: true } + * ``` + * @param {String} `input` Glob pattern to scan. + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ + +picomatch.scan = (input, options) => scan(input, options); + +/** + * Compile a regular expression from the `state` object returned by the + * [parse()](#parse) method. + * + * @param {Object} `state` + * @param {Object} `options` + * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser. + * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging. + * @return {RegExp} + * @api public + */ + +picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + + const opts = options || {}; + const prepend = opts.contains ? '' : '^'; + const append = opts.contains ? '' : '$'; + + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + + return regex; +}; + +/** + * Create a regular expression from a parsed glob pattern. + * + * ```js + * const picomatch = require('picomatch'); + * const state = picomatch.parse('*.js'); + * // picomatch.compileRe(state[, options]); + * + * console.log(picomatch.compileRe(state)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `state` The object returned from the `.parse` method. + * @param {Object} `options` + * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result. + * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== 'string') { + throw new TypeError('Expected a non-empty string'); + } + + let parsed = { negated: false, fastpaths: true }; + + if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) { + parsed.output = parse.fastpaths(input, options); + } + + if (!parsed.output) { + parsed = parse(input, options); + } + + return picomatch.compileRe(parsed, options, returnOutput, returnState); +}; + +/** + * Create a regular expression from the given regex source string. + * + * ```js + * const picomatch = require('picomatch'); + * // picomatch.toRegex(source[, options]); + * + * const { output } = picomatch.parse('*.js'); + * console.log(picomatch.toRegex(output)); + * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ + * ``` + * @param {String} `source` Regular expression source string. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? 'i' : '')); + } catch (err) { + if (options && options.debug === true) throw err; + return /$^/; + } +}; + +/** + * Picomatch constants. + * @return {Object} + */ + +picomatch.constants = constants; + +/** + * Expose "picomatch" + */ + +module.exports = picomatch; diff --git a/build/node_modules/picomatch/lib/scan.js b/build/node_modules/picomatch/lib/scan.js new file mode 100644 index 00000000..e59cd7a1 --- /dev/null +++ b/build/node_modules/picomatch/lib/scan.js @@ -0,0 +1,391 @@ +'use strict'; + +const utils = require('./utils'); +const { + CHAR_ASTERISK, /* * */ + CHAR_AT, /* @ */ + CHAR_BACKWARD_SLASH, /* \ */ + CHAR_COMMA, /* , */ + CHAR_DOT, /* . */ + CHAR_EXCLAMATION_MARK, /* ! */ + CHAR_FORWARD_SLASH, /* / */ + CHAR_LEFT_CURLY_BRACE, /* { */ + CHAR_LEFT_PARENTHESES, /* ( */ + CHAR_LEFT_SQUARE_BRACKET, /* [ */ + CHAR_PLUS, /* + */ + CHAR_QUESTION_MARK, /* ? */ + CHAR_RIGHT_CURLY_BRACE, /* } */ + CHAR_RIGHT_PARENTHESES, /* ) */ + CHAR_RIGHT_SQUARE_BRACKET /* ] */ +} = require('./constants'); + +const isPathSeparator = code => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; +}; + +const depth = token => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } +}; + +/** + * Quickly scans a glob pattern and returns an object with a handful of + * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists), + * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not + * with `!(`) and `negatedExtglob` (true if the path starts with `!(`). + * + * ```js + * const pm = require('picomatch'); + * console.log(pm.scan('foo/bar/*.js')); + * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an object with tokens and regex source string. + * @api public + */ + +const scan = (input, options) => { + const opts = options || {}; + + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: '', depth: 0, isGlob: false }; + + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + + while (index < length) { + code = advance(); + let next; + + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: '', depth: 0, isGlob: false }; + + if (finished === true) continue; + if (prev === CHAR_DOT && index === (start + 1)) { + start += 2; + continue; + } + + lastIndex = index + 1; + continue; + } + + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS + || code === CHAR_AT + || code === CHAR_ASTERISK + || code === CHAR_QUESTION_MARK + || code === CHAR_EXCLAMATION_MARK; + + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + + if (scanToEnd === true) { + continue; + } + break; + } + + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + break; + } + } + + if (scanToEnd === true) { + continue; + } + + break; + } + + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + + if (isGlob === true) { + finished = true; + + if (scanToEnd === true) { + continue; + } + + break; + } + } + + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + + let base = str; + let prefix = ''; + let glob = ''; + + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob = str.slice(lastIndex); + } else if (isGlob === true) { + base = ''; + glob = str; + } else { + base = str; + } + + if (base && base !== '' && base !== '/' && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + + if (opts.unescape === true) { + if (glob) glob = utils.removeBackslashes(glob); + + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + + const state = { + prefix, + input, + start, + base, + glob, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== '') { + parts.push(value); + } + prevIndex = i; + } + + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + + state.slashes = slashes; + state.parts = parts; + } + + return state; +}; + +module.exports = scan; diff --git a/build/node_modules/picomatch/lib/utils.js b/build/node_modules/picomatch/lib/utils.js new file mode 100644 index 00000000..c3ca766a --- /dev/null +++ b/build/node_modules/picomatch/lib/utils.js @@ -0,0 +1,64 @@ +'use strict'; + +const path = require('path'); +const win32 = process.platform === 'win32'; +const { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL +} = require('./constants'); + +exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); +exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); +exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str); +exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1'); +exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/'); + +exports.removeBackslashes = str => { + return str.replace(REGEX_REMOVE_BACKSLASH, match => { + return match === '\\' ? '' : match; + }); +}; + +exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split('.').map(Number); + if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) { + return true; + } + return false; +}; + +exports.isWindows = options => { + if (options && typeof options.windows === 'boolean') { + return options.windows; + } + return win32 === true || path.sep === '\\'; +}; + +exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) return input; + if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; +}; + +exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith('./')) { + output = output.slice(2); + state.prefix = './'; + } + return output; +}; + +exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? '' : '^'; + const append = options.contains ? '' : '$'; + + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; +}; diff --git a/build/node_modules/picomatch/package.json b/build/node_modules/picomatch/package.json new file mode 100644 index 00000000..7fc3018e --- /dev/null +++ b/build/node_modules/picomatch/package.json @@ -0,0 +1,114 @@ +{ + "_from": "picomatch@^2.2.2", + "_id": "picomatch@2.3.1", + "_inBundle": false, + "_integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "_location": "/picomatch", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "picomatch@^2.2.2", + "name": "picomatch", + "escapedName": "picomatch", + "rawSpec": "^2.2.2", + "saveSpec": null, + "fetchSpec": "^2.2.2" + }, + "_requiredBy": [ + "/@rollup/pluginutils", + "/anymatch", + "/readdirp" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/picomatch/-/picomatch-2.3.1.tgz", + "_shasum": "3ba3833733646d9d3e4995946c1365a67fb07a42", + "_spec": "picomatch@^2.2.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/pluginutils", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/micromatch/picomatch/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.", + "devDependencies": { + "eslint": "^6.8.0", + "fill-range": "^7.0.1", + "gulp-format-md": "^2.0.0", + "mocha": "^6.2.2", + "nyc": "^15.0.0", + "time-require": "github:jonschlinkert/time-require" + }, + "engines": { + "node": ">=8.6" + }, + "files": [ + "index.js", + "lib" + ], + "funding": "https://github.com/sponsors/jonschlinkert", + "homepage": "https://github.com/micromatch/picomatch", + "keywords": [ + "glob", + "match", + "picomatch" + ], + "license": "MIT", + "main": "index.js", + "name": "picomatch", + "nyc": { + "reporter": [ + "html", + "lcov", + "text-summary" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/picomatch.git" + }, + "scripts": { + "lint": "eslint --cache --cache-location node_modules/.cache/.eslintcache --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --reporter dot", + "test": "npm run lint && npm run mocha", + "test:ci": "npm run test:cover", + "test:cover": "nyc npm run mocha" + }, + "verb": { + "toc": { + "render": true, + "method": "preWrite", + "maxdepth": 3 + }, + "layout": "empty", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "braces", + "micromatch" + ] + }, + "reflinks": [ + "braces", + "expand-brackets", + "extglob", + "fill-range", + "micromatch", + "minimatch", + "nanomatch", + "picomatch" + ] + }, + "version": "2.3.1" +} diff --git a/build/node_modules/process-es6/package.json b/build/node_modules/process-es6/package.json index 7ef02fb8..8a8a22f4 100644 --- a/build/node_modules/process-es6/package.json +++ b/build/node_modules/process-es6/package.json @@ -19,7 +19,7 @@ "/rollup-plugin-node-builtins", "/rollup-plugin-node-globals" ], - "_resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/process-es6/-/process-es6-0.11.6.tgz", "_shasum": "c6bb389f9a951f82bd4eb169600105bd2ff9c778", "_spec": "process-es6@^0.11.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-builtins", diff --git a/build/node_modules/process-nextick-args/package.json b/build/node_modules/process-nextick-args/package.json index 73cffaf2..84c5cd13 100644 --- a/build/node_modules/process-nextick-args/package.json +++ b/build/node_modules/process-nextick-args/package.json @@ -16,12 +16,12 @@ "fetchSpec": "~2.0.0" }, "_requiredBy": [ - "/readable-stream" + "/concat-stream/readable-stream" ], - "_resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "_shasum": "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2", "_spec": "process-nextick-args@~2.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/concat-stream/node_modules/readable-stream", "author": "", "bugs": { "url": "https://github.com/calvinmetcalf/process-nextick-args/issues" diff --git a/build/node_modules/prr/package.json b/build/node_modules/prr/package.json index db62c745..da80c8f2 100644 --- a/build/node_modules/prr/package.json +++ b/build/node_modules/prr/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/errno" ], - "_resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/prr/-/prr-1.0.1.tgz", "_shasum": "d3fc114ba06995a45ec6893f484ceb1d78f5f476", "_spec": "prr@~1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/errno", diff --git a/build/node_modules/public-encrypt/node_modules/bn.js/package.json b/build/node_modules/public-encrypt/node_modules/bn.js/package.json index 9bf43475..8e39d937 100644 --- a/build/node_modules/public-encrypt/node_modules/bn.js/package.json +++ b/build/node_modules/public-encrypt/node_modules/bn.js/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/public-encrypt" ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "_shasum": "775b3f278efbb9718eec7361f483fb36fbbfea88", "_spec": "bn.js@^4.1.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/public-encrypt", diff --git a/build/node_modules/public-encrypt/package.json b/build/node_modules/public-encrypt/package.json index bc640b1d..2c8bce14 100644 --- a/build/node_modules/public-encrypt/package.json +++ b/build/node_modules/public-encrypt/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/crypto-browserify" ], - "_resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/public-encrypt/-/public-encrypt-4.0.3.tgz", "_shasum": "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0", "_spec": "public-encrypt@^4.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/crypto-browserify", diff --git a/build/node_modules/qs/.editorconfig b/build/node_modules/qs/.editorconfig index 91040dde..0ea91d99 100644 --- a/build/node_modules/qs/.editorconfig +++ b/build/node_modules/qs/.editorconfig @@ -8,6 +8,7 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 160 +quote_type = single [test/*] max_line_length = off diff --git a/build/node_modules/qs/.eslintignore b/build/node_modules/qs/.eslintignore deleted file mode 100644 index a60030e3..00000000 --- a/build/node_modules/qs/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist/ -coverage/ diff --git a/build/node_modules/qs/.eslintrc b/build/node_modules/qs/.eslintrc index 2c680d75..6884760e 100644 --- a/build/node_modules/qs/.eslintrc +++ b/build/node_modules/qs/.eslintrc @@ -3,10 +3,14 @@ "extends": "@ljharb", + "ignorePatterns": [ + "dist/", + ], + "rules": { "complexity": 0, "consistent-return": 1, - "func-name-matching": 0, + "func-name-matching": 0, "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], "indent": [2, 4], "max-lines-per-function": [2, { "max": 150 }], @@ -16,7 +20,6 @@ "no-continue": 1, "no-magic-numbers": 0, "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": [2, "before"], }, "overrides": [ diff --git a/build/node_modules/qs/CHANGELOG.md b/build/node_modules/qs/CHANGELOG.md index 74dda430..c6b29155 100644 --- a/build/node_modules/qs/CHANGELOG.md +++ b/build/node_modules/qs/CHANGELOG.md @@ -1,3 +1,19 @@ +## **6.10.3** +- [Fix] `parse`: ignore `__proto__` keys (#428) +- [Robustness] `stringify`: avoid relying on a global `undefined` (#427) +- [actions] reuse common workflows +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `tape` + +## **6.10.2** +- [Fix] `stringify`: actually fix cyclic references (#426) +- [Fix] `stringify`: avoid encoding arrayformat comma when `encodeValuesOnly = true` (#424) +- [readme] remove travis badge; add github actions/codecov badges; update URLs +- [Docs] add note and links for coercing primitive values (#408) +- [actions] update codecov uploader +- [actions] update workflows +- [Tests] clean up stringify tests slightly +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `safe-publish-latest`, `tape` + ## **6.10.1** - [Fix] `stringify`: avoid exception on repeated object values (#402) diff --git a/build/node_modules/qs/README.md b/build/node_modules/qs/README.md index 09e2cc9e..01263804 100644 --- a/build/node_modules/qs/README.md +++ b/build/node_modules/qs/README.md @@ -1,12 +1,13 @@ # qs [![Version Badge][2]][1] -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] [![License][license-image]][license-url] [![Downloads][downloads-image]][downloads-url] -[![npm badge][11]][1] +[![npm badge][npm-badge-png]][package-url] A querystring parsing and stringifying library with some added security. @@ -287,6 +288,17 @@ assert.deepEqual(arraysOfObjects, { a: ['b', 'c'] }) ``` (_this cannot convert nested objects, such as `a={b:1},{c:d}`_) +### Parsing primitive/scalar values (numbers, booleans, null, etc) + +By default, all values are parsed as strings. This behavior will not change and is explained in [issue #91](https://github.com/ljharb/qs/issues/91). + +```javascript +var primitiveValues = qs.parse('a=15&b=true&c=null'); +assert.deepEqual(primitiveValues, { a: '15', b: 'true', c: 'null' }); +``` + +If you wish to auto-convert values which look like numbers, booleans, and other values into their primitive counterparts, you can use the [query-types Express JS middleware](https://github.com/xpepermint/query-types) which will auto-convert all request query parameters. + ### Stringifying [](#preventEval) @@ -594,18 +606,18 @@ Available as part of the Tidelift Subscription The maintainers of qs and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-qs?utm_source=npm-qs&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) -[1]: https://npmjs.org/package/qs -[2]: http://versionbadg.es/ljharb/qs.svg -[3]: https://api.travis-ci.org/ljharb/qs.svg -[4]: https://travis-ci.org/ljharb/qs -[5]: https://david-dm.org/ljharb/qs.svg -[6]: https://david-dm.org/ljharb/qs -[7]: https://david-dm.org/ljharb/qs/dev-status.svg -[8]: https://david-dm.org/ljharb/qs?type=dev -[9]: https://ci.testling.com/ljharb/qs.png -[10]: https://ci.testling.com/ljharb/qs -[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/qs.svg +[package-url]: https://npmjs.org/package/qs +[npm-version-svg]: https://versionbadg.es/ljharb/qs.svg +[deps-svg]: https://david-dm.org/ljharb/qs.svg +[deps-url]: https://david-dm.org/ljharb/qs +[dev-deps-svg]: https://david-dm.org/ljharb/qs/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/qs#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/qs.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/qs.svg [license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/qs.svg -[downloads-url]: http://npm-stat.com/charts.html?package=qs +[downloads-image]: https://img.shields.io/npm/dm/qs.svg +[downloads-url]: https://npm-stat.com/charts.html?package=qs +[codecov-image]: https://codecov.io/gh/ljharb/qs/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/qs/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/qs +[actions-url]: https://github.com/ljharb/qs/actions diff --git a/build/node_modules/qs/dist/qs.js b/build/node_modules/qs/dist/qs.js index b9c1bf40..94baf8ff 100644 --- a/build/node_modules/qs/dist/qs.js +++ b/build/node_modules/qs/dist/qs.js @@ -175,7 +175,7 @@ var parseObject = function (chain, val, options, valuesParsed) { ) { obj = []; obj[index] = leaf; - } else { + } else if (cleanRoot !== '__proto__') { obj[cleanRoot] = leaf; } } @@ -323,6 +323,7 @@ var arrayPrefixGenerators = { }; var isArray = Array.isArray; +var split = String.prototype.split; var push = Array.prototype.push; var pushToArray = function (arr, valueOrArray) { push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); @@ -359,6 +360,8 @@ var isNonNullishPrimitive = function isNonNullishPrimitive(v) { || typeof v === 'bigint'; }; +var sentinel = {}; + var stringify = function stringify( object, prefix, @@ -378,8 +381,23 @@ var stringify = function stringify( ) { var obj = object; - if (sideChannel.has(object)) { - throw new RangeError('Cyclic object value'); + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { + // Where object last appeared in the ref tree + var pos = tmpSc.get(object); + step += 1; + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; // Break while + } + } + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } } if (typeof filter === 'function') { @@ -406,6 +424,14 @@ var stringify = function stringify( if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { if (encoder) { var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); + if (generateArrayPrefix === 'comma' && encodeValuesOnly) { + var valuesArray = split.call(String(obj), ','); + var valuesJoined = ''; + for (var i = 0; i < valuesArray.length; ++i) { + valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format)); + } + return [formatter(keyValue) + '=' + valuesJoined]; + } return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; @@ -420,7 +446,7 @@ var stringify = function stringify( var objKeys; if (generateArrayPrefix === 'comma' && isArray(obj)) { // we need to join elements in - objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : undefined }]; + objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; } else if (isArray(filter)) { objKeys = filter; } else { @@ -428,9 +454,9 @@ var stringify = function stringify( objKeys = sort ? keys.sort(sort) : keys; } - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - var value = typeof key === 'object' && key.value !== undefined ? key.value : obj[key]; + for (var j = 0; j < objKeys.length; ++j) { + var key = objKeys[j]; + var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; if (skipNulls && value === null) { continue; @@ -440,7 +466,9 @@ var stringify = function stringify( ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? '.' + key : '[' + key + ']'); - sideChannel.set(object, true); + sideChannel.set(object, step); + var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, @@ -456,7 +484,7 @@ var stringify = function stringify( formatter, encodeValuesOnly, charset, - sideChannel + valueSideChannel )); } @@ -468,7 +496,7 @@ var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { return defaults; } - if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } @@ -772,6 +800,7 @@ var encode = function encode(str, defaultEncoder, charset, kind, format) { i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + /* eslint operator-linebreak: [2, "before"] */ out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] @@ -1385,15 +1414,61 @@ var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; +var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; +var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; var booleanValueOf = Boolean.prototype.valueOf; var objectToString = Object.prototype.toString; var functionToString = Function.prototype.toString; -var match = String.prototype.match; +var $match = String.prototype.match; +var $slice = String.prototype.slice; +var $replace = String.prototype.replace; +var $toUpperCase = String.prototype.toUpperCase; +var $toLowerCase = String.prototype.toLowerCase; +var $test = RegExp.prototype.test; +var $concat = Array.prototype.concat; +var $join = Array.prototype.join; +var $arrSlice = Array.prototype.slice; +var $floor = Math.floor; var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; var gOPS = Object.getOwnPropertySymbols; -var symToString = typeof Symbol === 'function' ? Symbol.prototype.toString : null; +var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; +var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; +// ie, `has-tostringtag/shams +var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') + ? Symbol.toStringTag + : null; var isEnumerable = Object.prototype.propertyIsEnumerable; +var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( + [].__proto__ === Array.prototype // eslint-disable-line no-proto + ? function (O) { + return O.__proto__; // eslint-disable-line no-proto + } + : null +); + +function addNumericSeparator(num, str) { + if ( + num === Infinity + || num === -Infinity + || num !== num + || (num && num > -1000 && num < 1000) + || $test.call(/e/, str) + ) { + return str; + } + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + if (typeof num === 'number') { + var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) + if (int !== num) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); + } + } + return $replace.call(str, sepRegex, '$&_'); +} + var inspectCustom = require('./util.inspect').custom; var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null; @@ -1412,8 +1487,8 @@ module.exports = function inspect_(obj, options, depth, seen) { throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); } var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; - if (typeof customInspect !== 'boolean') { - throw new TypeError('option "customInspect", if provided, must be `true` or `false`'); + if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { + throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); } if ( @@ -1422,8 +1497,12 @@ module.exports = function inspect_(obj, options, depth, seen) { && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) ) { - throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`'); + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); } + if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + var numericSeparator = opts.numericSeparator; if (typeof obj === 'undefined') { return 'undefined'; @@ -1442,10 +1521,12 @@ module.exports = function inspect_(obj, options, depth, seen) { if (obj === 0) { return Infinity / obj > 0 ? '0' : '-0'; } - return String(obj); + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; } if (typeof obj === 'bigint') { - return String(obj) + 'n'; + var bigIntStr = String(obj) + 'n'; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; } var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; @@ -1464,7 +1545,7 @@ module.exports = function inspect_(obj, options, depth, seen) { function inspect(value, from, noIndent) { if (from) { - seen = seen.slice(); + seen = $arrSlice.call(seen); seen.push(from); } if (noIndent) { @@ -1482,21 +1563,21 @@ module.exports = function inspect_(obj, options, depth, seen) { if (typeof obj === 'function') { var name = nameOf(obj); var keys = arrObjKeys(obj, inspect); - return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : ''); + return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); } if (isSymbol(obj)) { - var symString = symToString.call(obj); - return typeof obj === 'object' ? markBoxed(symString) : symString; + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); + return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; } if (isElement(obj)) { - var s = '<' + String(obj.nodeName).toLowerCase(); + var s = '<' + $toLowerCase.call(String(obj.nodeName)); var attrs = obj.attributes || []; for (var i = 0; i < attrs.length; i++) { s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); } s += '>'; if (obj.childNodes && obj.childNodes.length) { s += '...'; } - s += ''; + s += ''; return s; } if (isArray(obj)) { @@ -1505,17 +1586,20 @@ module.exports = function inspect_(obj, options, depth, seen) { if (indent && !singleLineValues(xs)) { return '[' + indentedJoin(xs, indent) + ']'; } - return '[ ' + xs.join(', ') + ' ]'; + return '[ ' + $join.call(xs, ', ') + ' ]'; } if (isError(obj)) { var parts = arrObjKeys(obj, inspect); + if ('cause' in obj && !isEnumerable.call(obj, 'cause')) { + return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; + } if (parts.length === 0) { return '[' + String(obj) + ']'; } - return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }'; + return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; } if (typeof obj === 'object' && customInspect) { if (inspectSymbol && typeof obj[inspectSymbol] === 'function') { return obj[inspectSymbol](); - } else if (typeof obj.inspect === 'function') { + } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { return obj.inspect(); } } @@ -1539,6 +1623,9 @@ module.exports = function inspect_(obj, options, depth, seen) { if (isWeakSet(obj)) { return weakCollectionOf('WeakSet'); } + if (isWeakRef(obj)) { + return weakCollectionOf('WeakRef'); + } if (isNumber(obj)) { return markBoxed(inspect(Number(obj))); } @@ -1553,11 +1640,16 @@ module.exports = function inspect_(obj, options, depth, seen) { } if (!isDate(obj) && !isRegExp(obj)) { var ys = arrObjKeys(obj, inspect); - if (ys.length === 0) { return '{}'; } + var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; + var protoTag = obj instanceof Object ? '' : 'null prototype'; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; + var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; + var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); + if (ys.length === 0) { return tag + '{}'; } if (indent) { - return '{' + indentedJoin(ys, indent) + '}'; + return tag + '{' + indentedJoin(ys, indent) + '}'; } - return '{ ' + ys.join(', ') + ' }'; + return tag + '{ ' + $join.call(ys, ', ') + ' }'; } return String(obj); }; @@ -1568,18 +1660,45 @@ function wrapQuotes(s, defaultStyle, opts) { } function quote(s) { - return String(s).replace(/"/g, '"'); + return $replace.call(String(s), /"/g, '"'); +} + +function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } +function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } + +// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives +function isSymbol(obj) { + if (hasShammedSymbols) { + return obj && typeof obj === 'object' && obj instanceof Symbol; + } + if (typeof obj === 'symbol') { + return true; + } + if (!obj || typeof obj !== 'object' || !symToString) { + return false; + } + try { + symToString.call(obj); + return true; + } catch (e) {} + return false; } -function isArray(obj) { return toStr(obj) === '[object Array]'; } -function isDate(obj) { return toStr(obj) === '[object Date]'; } -function isRegExp(obj) { return toStr(obj) === '[object RegExp]'; } -function isError(obj) { return toStr(obj) === '[object Error]'; } -function isSymbol(obj) { return toStr(obj) === '[object Symbol]'; } -function isString(obj) { return toStr(obj) === '[object String]'; } -function isNumber(obj) { return toStr(obj) === '[object Number]'; } -function isBigInt(obj) { return toStr(obj) === '[object BigInt]'; } -function isBoolean(obj) { return toStr(obj) === '[object Boolean]'; } +function isBigInt(obj) { + if (!obj || typeof obj !== 'object' || !bigIntValueOf) { + return false; + } + try { + bigIntValueOf.call(obj); + return true; + } catch (e) {} + return false; +} var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; function has(obj, key) { @@ -1592,7 +1711,7 @@ function toStr(obj) { function nameOf(f) { if (f.name) { return f.name; } - var m = match.call(functionToString.call(f), /^function\s*([\w$]+)/); + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); if (m) { return m[1]; } return null; } @@ -1637,6 +1756,17 @@ function isWeakMap(x) { return false; } +function isWeakRef(x) { + if (!weakRefDeref || !x || typeof x !== 'object') { + return false; + } + try { + weakRefDeref.call(x); + return true; + } catch (e) {} + return false; +} + function isSet(x) { if (!setSize || !x || typeof x !== 'object') { return false; @@ -1681,10 +1811,10 @@ function inspectString(str, opts) { if (str.length > opts.maxStringLength) { var remaining = str.length - opts.maxStringLength; var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); - return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer; + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; } // eslint-disable-next-line no-control-regex - var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte); + var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); return wrapQuotes(s, 'single', opts); } @@ -1698,7 +1828,7 @@ function lowbyte(c) { 13: 'r' }[n]; if (x) { return '\\' + x; } - return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase(); + return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); } function markBoxed(str) { @@ -1710,7 +1840,7 @@ function weakCollectionOf(type) { } function collectionOf(type, size, entries, indent) { - var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', '); + var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); return type + ' (' + size + ') {' + joinedEntries + '}'; } @@ -1728,20 +1858,20 @@ function getIndent(opts, depth) { if (opts.indent === '\t') { baseIndent = '\t'; } else if (typeof opts.indent === 'number' && opts.indent > 0) { - baseIndent = Array(opts.indent + 1).join(' '); + baseIndent = $join.call(Array(opts.indent + 1), ' '); } else { return null; } return { base: baseIndent, - prev: Array(depth + 1).join(baseIndent) + prev: $join.call(Array(depth + 1), baseIndent) }; } function indentedJoin(xs, indent) { if (xs.length === 0) { return ''; } var lineJoiner = '\n' + indent.prev + indent.base; - return lineJoiner + xs.join(',' + lineJoiner) + '\n' + indent.prev; + return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; } function arrObjKeys(obj, inspect) { @@ -1753,17 +1883,28 @@ function arrObjKeys(obj, inspect) { xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; } } + var syms = typeof gOPS === 'function' ? gOPS(obj) : []; + var symMap; + if (hasShammedSymbols) { + symMap = {}; + for (var k = 0; k < syms.length; k++) { + symMap['$' + syms[k]] = syms[k]; + } + } + for (var key in obj) { // eslint-disable-line no-restricted-syntax if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue - if ((/[^\w$]/).test(key)) { + if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { + // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section + continue; // eslint-disable-line no-restricted-syntax, no-continue + } else if ($test.call(/[^\w$]/, key)) { xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); } else { xs.push(key + ': ' + inspect(obj[key], obj)); } } if (typeof gOPS === 'function') { - var syms = gOPS(obj); for (var j = 0; j < syms.length; j++) { if (isEnumerable.call(obj, syms[j])) { xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); diff --git a/build/node_modules/qs/lib/parse.js b/build/node_modules/qs/lib/parse.js index c833315c..a4ac4fa0 100644 --- a/build/node_modules/qs/lib/parse.js +++ b/build/node_modules/qs/lib/parse.js @@ -136,7 +136,7 @@ var parseObject = function (chain, val, options, valuesParsed) { ) { obj = []; obj[index] = leaf; - } else { + } else if (cleanRoot !== '__proto__') { obj[cleanRoot] = leaf; } } diff --git a/build/node_modules/qs/lib/stringify.js b/build/node_modules/qs/lib/stringify.js index b8cee4bc..47ea4b15 100644 --- a/build/node_modules/qs/lib/stringify.js +++ b/build/node_modules/qs/lib/stringify.js @@ -19,6 +19,7 @@ var arrayPrefixGenerators = { }; var isArray = Array.isArray; +var split = String.prototype.split; var push = Array.prototype.push; var pushToArray = function (arr, valueOrArray) { push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); @@ -55,6 +56,8 @@ var isNonNullishPrimitive = function isNonNullishPrimitive(v) { || typeof v === 'bigint'; }; +var sentinel = {}; + var stringify = function stringify( object, prefix, @@ -74,8 +77,23 @@ var stringify = function stringify( ) { var obj = object; - if (sideChannel.has(object)) { - throw new RangeError('Cyclic object value'); + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { + // Where object last appeared in the ref tree + var pos = tmpSc.get(object); + step += 1; + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; // Break while + } + } + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } } if (typeof filter === 'function') { @@ -102,6 +120,14 @@ var stringify = function stringify( if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { if (encoder) { var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); + if (generateArrayPrefix === 'comma' && encodeValuesOnly) { + var valuesArray = split.call(String(obj), ','); + var valuesJoined = ''; + for (var i = 0; i < valuesArray.length; ++i) { + valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format)); + } + return [formatter(keyValue) + '=' + valuesJoined]; + } return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; @@ -116,7 +142,7 @@ var stringify = function stringify( var objKeys; if (generateArrayPrefix === 'comma' && isArray(obj)) { // we need to join elements in - objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : undefined }]; + objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; } else if (isArray(filter)) { objKeys = filter; } else { @@ -124,9 +150,9 @@ var stringify = function stringify( objKeys = sort ? keys.sort(sort) : keys; } - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - var value = typeof key === 'object' && key.value !== undefined ? key.value : obj[key]; + for (var j = 0; j < objKeys.length; ++j) { + var key = objKeys[j]; + var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; if (skipNulls && value === null) { continue; @@ -136,8 +162,9 @@ var stringify = function stringify( ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? '.' + key : '[' + key + ']'); - sideChannel.set(object, true); + sideChannel.set(object, step); var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, @@ -165,7 +192,7 @@ var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { return defaults; } - if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } diff --git a/build/node_modules/qs/lib/utils.js b/build/node_modules/qs/lib/utils.js index 4ad6ea27..1e545381 100644 --- a/build/node_modules/qs/lib/utils.js +++ b/build/node_modules/qs/lib/utils.js @@ -177,6 +177,7 @@ var encode = function encode(str, defaultEncoder, charset, kind, format) { i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); + /* eslint operator-linebreak: [2, "before"] */ out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] diff --git a/build/node_modules/qs/package.json b/build/node_modules/qs/package.json index 5571ee5d..760f3dcd 100644 --- a/build/node_modules/qs/package.json +++ b/build/node_modules/qs/package.json @@ -1,26 +1,26 @@ { - "_from": "qs@^6.5.1", - "_id": "qs@6.10.1", + "_from": "qs@^6.10.1", + "_id": "qs@6.10.3", "_inBundle": false, - "_integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "_integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "_location": "/qs", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "qs@^6.5.1", + "raw": "qs@^6.10.1", "name": "qs", "escapedName": "qs", - "rawSpec": "^6.5.1", + "rawSpec": "^6.10.1", "saveSpec": null, - "fetchSpec": "^6.5.1" + "fetchSpec": "^6.10.1" }, "_requiredBy": [ "/superagent" ], - "_resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "_shasum": "4931482fa8d647a5aab799c5271d2133b981fb6a", - "_spec": "qs@^6.5.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/qs/-/qs-6.10.3.tgz", + "_shasum": "d6cde1b2ffca87b5aa57889816c5f81535e22e8e", + "_spec": "qs@^6.10.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "bugs": { "url": "https://github.com/ljharb/qs/issues" @@ -39,11 +39,11 @@ "deprecated": false, "description": "A querystring parser that supports nesting and arrays, with a depth limit", "devDependencies": { - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", + "@ljharb/eslint-config": "^20.1.0", + "aud": "^1.1.5", "browserify": "^16.5.2", "eclint": "^2.8.1", - "eslint": "^7.22.0", + "eslint": "^8.6.0", "evalmd": "^0.0.19", "for-each": "^0.3.3", "has-symbols": "^1.0.2", @@ -51,11 +51,11 @@ "in-publish": "^2.0.1", "mkdirp": "^0.5.5", "nyc": "^10.3.2", - "object-inspect": "^1.9.0", + "object-inspect": "^1.12.0", "qs-iconv": "^1.0.4", - "safe-publish-latest": "^1.1.4", + "safe-publish-latest": "^2.0.0", "safer-buffer": "^2.1.2", - "tape": "^5.2.2" + "tape": "^5.4.0" }, "engines": { "node": ">=0.6" @@ -87,14 +87,15 @@ }, "scripts": { "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", - "lint": "eslint lib/*.js test/*.js", + "lint": "eslint .", "postlint": "eclint check * lib/* test/* !dist/*", "posttest": "aud --production", - "prepublish": "safe-publish-latest && (not-in-publish || npm run dist)", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest && npm run dist", "pretest": "npm run --silent readme && npm run --silent lint", "readme": "evalmd README.md", "test": "npm run tests-only", "tests-only": "nyc tape 'test/**/*.js'" }, - "version": "6.10.1" + "version": "6.10.3" } diff --git a/build/node_modules/qs/test/parse.js b/build/node_modules/qs/test/parse.js index 7a3cfdef..7d61023e 100644 --- a/build/node_modules/qs/test/parse.js +++ b/build/node_modules/qs/test/parse.js @@ -629,6 +629,66 @@ test('parse()', function (t) { st.end(); }); + t.test('dunder proto is ignored', function (st) { + var payload = 'categories[__proto__]=login&categories[__proto__]&categories[length]=42'; + var result = qs.parse(payload, { allowPrototypes: true }); + + st.deepEqual( + result, + { + categories: { + length: '42' + } + }, + 'silent [[Prototype]] payload' + ); + + var plainResult = qs.parse(payload, { allowPrototypes: true, plainObjects: true }); + + st.deepEqual( + plainResult, + { + __proto__: null, + categories: { + __proto__: null, + length: '42' + } + }, + 'silent [[Prototype]] payload: plain objects' + ); + + var query = qs.parse('categories[__proto__]=cats&categories[__proto__]=dogs&categories[some][json]=toInject', { allowPrototypes: true }); + + st.notOk(Array.isArray(query.categories), 'is not an array'); + st.notOk(query.categories instanceof Array, 'is not instanceof an array'); + st.deepEqual(query.categories, { some: { json: 'toInject' } }); + st.equal(JSON.stringify(query.categories), '{"some":{"json":"toInject"}}', 'stringifies as a non-array'); + + st.deepEqual( + qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true }), + { + foo: { + bar: 'stuffs' + } + }, + 'hidden values' + ); + + st.deepEqual( + qs.parse('foo[__proto__][hidden]=value&foo[bar]=stuffs', { allowPrototypes: true, plainObjects: true }), + { + __proto__: null, + foo: { + __proto__: null, + bar: 'stuffs' + } + }, + 'hidden values: plain objects' + ); + + st.end(); + }); + t.test('can return null objects', { skip: !Object.create }, function (st) { var expected = Object.create(null); expected.a = Object.create(null); diff --git a/build/node_modules/qs/test/stringify.js b/build/node_modules/qs/test/stringify.js index 931ac0dd..a3800aac 100644 --- a/build/node_modules/qs/test/stringify.js +++ b/build/node_modules/qs/test/stringify.js @@ -132,10 +132,10 @@ test('stringify()', function (t) { }); t.test('stringifies a nested array value', function (st) { - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'comma' }), 'a%5Bb%5D=c%2Cd'); // a[b]=c,d - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[b][0]=c&a[b][1]=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[b][]=c&a[b][]=d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true, arrayFormat: 'comma' }), 'a[b]=c,d'); + st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { encodeValuesOnly: true }), 'a[b][0]=c&a[b][1]=d'); st.end(); }); @@ -143,7 +143,7 @@ test('stringify()', function (t) { st.equal( qs.stringify( { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false, arrayFormat: 'indices' } + { allowDots: true, encodeValuesOnly: true, arrayFormat: 'indices' } ), 'a.b[0]=c&a.b[1]=d', 'indices: stringifies with dots + indices' @@ -151,7 +151,7 @@ test('stringify()', function (t) { st.equal( qs.stringify( { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false, arrayFormat: 'brackets' } + { allowDots: true, encodeValuesOnly: true, arrayFormat: 'brackets' } ), 'a.b[]=c&a.b[]=d', 'brackets: stringifies with dots + brackets' @@ -159,7 +159,7 @@ test('stringify()', function (t) { st.equal( qs.stringify( { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false, arrayFormat: 'comma' } + { allowDots: true, encodeValuesOnly: true, arrayFormat: 'comma' } ), 'a.b=c,d', 'comma: stringifies with dots + comma' @@ -167,7 +167,7 @@ test('stringify()', function (t) { st.equal( qs.stringify( { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false } + { allowDots: true, encodeValuesOnly: true } ), 'a.b[0]=c&a.b[1]=d', 'default: stringifies with dots + indices' @@ -215,17 +215,23 @@ test('stringify()', function (t) { t.test('stringifies an array with mixed objects and primitives', function (st) { st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'indices' }), 'a[0][b]=1&a[1]=2&a[2]=3', 'indices => indices' ); st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'brackets' }), 'a[][b]=1&a[]=2&a[]=3', 'brackets => brackets' ); st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true, arrayFormat: 'comma' }), + '???', + 'brackets => brackets', + { skip: 'TODO: figure out what this should do' } + ); + st.equal( + qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encodeValuesOnly: true }), 'a[0][b]=1&a[1]=2&a[2]=3', 'default => indices' ); @@ -448,7 +454,7 @@ test('stringify()', function (t) { st['throws']( function () { qs.stringify({ 'foo[bar]': 'baz', 'foo[baz]': a }); }, - RangeError, + /RangeError: Cyclic object value/, 'cyclic values throw' ); @@ -458,10 +464,16 @@ test('stringify()', function (t) { circular.a = circular; st['throws']( function () { qs.stringify(circular); }, - RangeError, + /RangeError: Cyclic object value/, 'cyclic values throw' ); + var arr = ['a']; + st.doesNotThrow( + function () { qs.stringify({ x: arr, y: arr }); }, + 'non-cyclic values do not throw' + ); + st.end(); }); @@ -829,7 +841,12 @@ test('stringify()', function (t) { st.equal(qs.stringify(withArray, { encode: false }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, no arrayFormat'); st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'bracket' }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, bracket'); st.equal(qs.stringify(withArray, { encode: false, arrayFormat: 'indices' }), 'a[b][0][c]=d&a[b][0][e]=f', 'array, indices'); - st.equal(qs.stringify(obj, { encode: false, arrayFormat: 'comma' }), '???', 'array, comma (pending issue #378)', { skip: true }); + st.equal( + qs.stringify(withArray, { encode: false, arrayFormat: 'comma' }), + '???', + 'array, comma', + { skip: 'TODO: figure out what this should do' } + ); st.end(); }); diff --git a/build/node_modules/randombytes/package.json b/build/node_modules/randombytes/package.json index 17c111b5..58153182 100644 --- a/build/node_modules/randombytes/package.json +++ b/build/node_modules/randombytes/package.json @@ -1,5 +1,5 @@ { - "_from": "randombytes@^2.0.0", + "_from": "randombytes@^2.1.0", "_id": "randombytes@2.1.0", "_inBundle": false, "_integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", @@ -8,24 +8,25 @@ "_requested": { "type": "range", "registry": true, - "raw": "randombytes@^2.0.0", + "raw": "randombytes@^2.1.0", "name": "randombytes", "escapedName": "randombytes", - "rawSpec": "^2.0.0", + "rawSpec": "^2.1.0", "saveSpec": null, - "fetchSpec": "^2.0.0" + "fetchSpec": "^2.1.0" }, "_requiredBy": [ "/browserify-rsa", "/crypto-browserify", "/diffie-hellman", "/public-encrypt", - "/randomfill" + "/randomfill", + "/serialize-javascript" ], - "_resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/randombytes/-/randombytes-2.1.0.tgz", "_shasum": "df6f84372f0270dc65cdf6291349ab7a473d4f2a", - "_spec": "randombytes@^2.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/crypto-browserify", + "_spec": "randombytes@^2.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/serialize-javascript", "author": "", "browser": "browser.js", "bugs": { diff --git a/build/node_modules/randomfill/package.json b/build/node_modules/randomfill/package.json index 28a69bb7..561c96e2 100644 --- a/build/node_modules/randomfill/package.json +++ b/build/node_modules/randomfill/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/crypto-browserify" ], - "_resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/randomfill/-/randomfill-1.0.4.tgz", "_shasum": "c92196fc86ab42be983f1bf31778224931d61458", "_spec": "randomfill@^1.0.3", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/crypto-browserify", diff --git a/build/node_modules/readable-stream/README.md b/build/node_modules/readable-stream/README.md index 23fe3f3e..6f035ab1 100644 --- a/build/node_modules/readable-stream/README.md +++ b/build/node_modules/readable-stream/README.md @@ -1,30 +1,81 @@ # readable-stream -***Node-core v8.11.1 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) +***Node.js core streams for userland*** [![Build Status](https://travis-ci.com/nodejs/readable-stream.svg?branch=master)](https://travis-ci.com/nodejs/readable-stream) [![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) [![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readabe-stream.svg)](https://saucelabs.com/u/readabe-stream) ```bash npm install --save readable-stream ``` -***Node-core streams for userland*** +This package is a mirror of the streams implementations in Node.js. -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.11.1/docs/api/stream.html). +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v10.19.0/docs/api/stream.html). If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). As of version 2.0.0 **readable-stream** uses semantic versioning. +## Version 3.x.x + +v3.x.x of `readable-stream` is a cut from Node 10. This version supports Node 6, 8, and 10, as well as evergreen browsers, IE 11 and latest Safari. The breaking changes introduced by v3 are composed by the combined breaking changes in [Node v9](https://nodejs.org/en/blog/release/v9.0.0/) and [Node v10](https://nodejs.org/en/blog/release/v10.0.0/), as follows: + +1. Error codes: https://github.com/nodejs/node/pull/13310, + https://github.com/nodejs/node/pull/13291, + https://github.com/nodejs/node/pull/16589, + https://github.com/nodejs/node/pull/15042, + https://github.com/nodejs/node/pull/15665, + https://github.com/nodejs/readable-stream/pull/344 +2. 'readable' have precedence over flowing + https://github.com/nodejs/node/pull/18994 +3. make virtual methods errors consistent + https://github.com/nodejs/node/pull/18813 +4. updated streams error handling + https://github.com/nodejs/node/pull/18438 +5. writable.end should return this. + https://github.com/nodejs/node/pull/18780 +6. readable continues to read when push('') + https://github.com/nodejs/node/pull/18211 +7. add custom inspect to BufferList + https://github.com/nodejs/node/pull/17907 +8. always defer 'readable' with nextTick + https://github.com/nodejs/node/pull/17979 + +## Version 2.x.x +v2.x.x of `readable-stream` is a cut of the stream module from Node 8 (there have been no semver-major changes from Node 4 to 8). This version supports all Node.js versions from 0.8, as well as evergreen browsers and IE 10 & 11. + +### Big Thanks + +Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs][sauce] + +# Usage + +You can swap your `require('stream')` with `require('readable-stream')` +without any changes, if you are just using one of the main classes and +functions. + +```js +const { + Readable, + Writable, + Transform, + Duplex, + pipeline, + finished +} = require('readable-stream') +```` + +Note that `require('stream')` will return `Stream`, while +`require('readable-stream')` will return `Readable`. We discourage using +whatever is exported directly, but rather use one of the properties as +shown in the example above. + # Streams Working Group `readable-stream` is maintained by the Streams Working Group, which @@ -44,15 +95,12 @@ Node.js. The responsibilities of the Streams Working Group include: ## Team Members -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B * **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> * **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> * **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E * **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> +* **Yoshua Wyuts** ([@yoshuawuyts](https://github.com/yoshuawuyts)) <yoshuawuyts@gmail.com> + +[sauce]: https://saucelabs.com diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js b/build/node_modules/readable-stream/errors-browser.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js rename to build/node_modules/readable-stream/errors-browser.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/errors.js b/build/node_modules/readable-stream/errors.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/errors.js rename to build/node_modules/readable-stream/errors.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/experimentalWarning.js b/build/node_modules/readable-stream/experimentalWarning.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/experimentalWarning.js rename to build/node_modules/readable-stream/experimentalWarning.js diff --git a/build/node_modules/readable-stream/lib/_stream_duplex.js b/build/node_modules/readable-stream/lib/_stream_duplex.js index 57003c32..67525192 100644 --- a/build/node_modules/readable-stream/lib/_stream_duplex.js +++ b/build/node_modules/readable-stream/lib/_stream_duplex.js @@ -18,43 +18,37 @@ // 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. - // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from // Writable. - 'use strict'; - /**/ -var pna = require('process-nextick-args'); -/**/ - -/**/ var objectKeys = Object.keys || function (obj) { var keys = []; + for (var key in obj) { keys.push(key); - }return keys; + } + + return keys; }; /**/ -module.exports = Duplex; -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ +module.exports = Duplex; var Readable = require('./_stream_readable'); + var Writable = require('./_stream_writable'); -util.inherits(Duplex, Readable); +require('inherits')(Duplex, Readable); { - // avoid scope creep, the keys array can then be collected + // Allow the keys array to be GC'ed. var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { var method = keys[v]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; @@ -63,18 +57,19 @@ util.inherits(Duplex, Readable); function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - this.once('end', onend); + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; + + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } } Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { @@ -82,20 +77,35 @@ Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { // because otherwise some prototype manipulation in // userland will fail enumerable: false, - get: function () { + get: function get() { return this._writableState.highWaterMark; } }); +Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); // the no-half-open enforcer -// the no-half-open enforcer function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; // no more data can be written. // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); + + process.nextTick(onEndNT, this); } function onEndNT(self) { @@ -103,29 +113,27 @@ function onEndNT(self) { } Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { if (this._readableState === undefined || this._writableState === undefined) { return false; } + return this._readableState.destroyed && this._writableState.destroyed; }, - set: function (value) { + set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (this._readableState === undefined || this._writableState === undefined) { return; - } - - // backward compatibility, the user is explicitly + } // backward compatibility, the user is explicitly // managing destroyed + + this._readableState.destroyed = value; this._writableState.destroyed = value; } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); - - pna.nextTick(cb, err); -}; \ No newline at end of file +}); \ No newline at end of file diff --git a/build/node_modules/readable-stream/lib/_stream_passthrough.js b/build/node_modules/readable-stream/lib/_stream_passthrough.js index 612edb4d..32e7414c 100644 --- a/build/node_modules/readable-stream/lib/_stream_passthrough.js +++ b/build/node_modules/readable-stream/lib/_stream_passthrough.js @@ -18,27 +18,19 @@ // 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. - // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. - 'use strict'; module.exports = PassThrough; var Transform = require('./_stream_transform'); -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); +require('inherits')(PassThrough, Transform); function PassThrough(options) { if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); } diff --git a/build/node_modules/readable-stream/lib/_stream_readable.js b/build/node_modules/readable-stream/lib/_stream_readable.js index 0f807646..192d4514 100644 --- a/build/node_modules/readable-stream/lib/_stream_readable.js +++ b/build/node_modules/readable-stream/lib/_stream_readable.js @@ -18,118 +18,110 @@ // 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. - 'use strict'; -/**/ - -var pna = require('process-nextick-args'); -/**/ - module.exports = Readable; - /**/ -var isArray = require('isarray'); -/**/ -/**/ var Duplex; /**/ Readable.ReadableState = ReadableState; - /**/ + var EE = require('events').EventEmitter; -var EElistenerCount = function (emitter, type) { +var EElistenerCount = function EElistenerCount(emitter, type) { return emitter.listeners(type).length; }; /**/ /**/ + + var Stream = require('./internal/streams/stream'); /**/ -/**/ -var Buffer = require('safe-buffer').Buffer; +var Buffer = require('buffer').Buffer; + var OurUint8Array = global.Uint8Array || function () {}; + function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } + function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } - -/**/ - /**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ -/**/ + var debugUtil = require('util'); -var debug = void 0; + +var debug; + if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog('stream'); } else { - debug = function () {}; + debug = function debug() {}; } /**/ -var BufferList = require('./internal/streams/BufferList'); + +var BufferList = require('./internal/streams/buffer_list'); + var destroyImpl = require('./internal/streams/destroy'); + +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; + +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. + + var StringDecoder; +var createReadableStreamAsyncIterator; +var from; -util.inherits(Readable, Stream); +require('inherits')(Readable, Stream); +var errorOrDestroy = destroyImpl.errorOrDestroy; var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; function prependListener(emitter, event, fn) { // Sadly this is not cacheable as some libraries bundle their own // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any // userland ones. NEVER DO THIS. This is here only because this code needs // to continue to work with older versions of Node.js that do not include // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; } -function ReadableState(options, stream) { +function ReadableState(options, stream, isDuplex) { Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share + options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - // object stream flag. Used to make read(n) ignore n and to + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - // A linked list is used to store data chunks instead of an array because the + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the // linked list can remove elements from the beginning faster than // array.shift() + this.buffer = new BufferList(); this.length = 0; this.pipes = null; @@ -137,37 +129,36 @@ function ReadableState(options, stream) { this.flowing = null; this.ended = false; this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted + this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted // immediately, or on a later tick. We set this to true at first, because // any actions that shouldn't happen until "later" should generally also // not happen before the first read call. - this.sync = true; - // whenever we return null, then we set a flag to say + this.sync = true; // whenever we return null, then we set a flag to say // that we're awaiting a 'readable' event emission. + this.needReadable = false; this.emittedReadable = false; this.readableListening = false; this.resumeScheduled = false; + this.paused = true; // Should close be emitted on destroy. Defaults to true. - // has it been destroyed - this.destroyed = false; + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') - // Crypto is kind of old and crusty. Historically, its default string + this.autoDestroy = !!options.autoDestroy; // has it been destroyed + + this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; + this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s - // if true, a maybeReadMore has been scheduled - this.readingMore = false; + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled + this.readingMore = false; this.decoder = null; this.encoding = null; + if (options.encoding) { if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; this.decoder = new StringDecoder(options.encoding); @@ -177,17 +168,16 @@ function ReadableState(options, stream) { function Readable(options) { Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); // legacy - // legacy this.readable = true; if (options) { if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; } @@ -195,36 +185,40 @@ function Readable(options) { } Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { if (this._readableState === undefined) { return false; } + return this._readableState.destroyed; }, - set: function (value) { + set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (!this._readableState) { return; - } - - // backward compatibility, the user is explicitly + } // backward compatibility, the user is explicitly // managing destroyed + + this._readableState.destroyed = value; } }); - Readable.prototype.destroy = destroyImpl.destroy; Readable.prototype._undestroy = destroyImpl.undestroy; + Readable.prototype._destroy = function (err, cb) { - this.push(null); cb(err); -}; - -// Manually shove something into the read() buffer. +}; // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. + + Readable.prototype.push = function (chunk, encoding) { var state = this._readableState; var skipChunkCheck; @@ -232,10 +226,12 @@ Readable.prototype.push = function (chunk, encoding) { if (!state.objectMode) { if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { chunk = Buffer.from(chunk, encoding); encoding = ''; } + skipChunkCheck = true; } } else { @@ -243,34 +239,40 @@ Readable.prototype.push = function (chunk, encoding) { } return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; +}; // Unshift should *always* be something directly out of read() + -// Unshift should *always* be something directly out of read() Readable.prototype.unshift = function (chunk) { return readableAddChunk(this, chunk, null, true, false); }; function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); var state = stream._readableState; + if (chunk === null) { state.reading = false; onEofChunk(stream, state); } else { var er; if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { - stream.emit('error', er); + errorOrDestroy(stream, er); } else if (state.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { chunk = _uint8ArrayToBuffer(chunk); } if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; } else { state.reading = false; + if (state.decoder && !encoding) { chunk = state.decoder.write(chunk); if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); @@ -280,61 +282,73 @@ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { } } else if (!addToFront) { state.reading = false; + maybeReadMore(stream, state); } - } + } // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. - return needMoreData(state); + + return !state.ended && (state.length < state.highWaterMark || state.length === 0); } function addChunk(stream, state, chunk, addToFront) { if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; stream.emit('data', chunk); - stream.read(0); } else { // update the buffer info. state.length += state.objectMode ? 1 : chunk.length; if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); } + maybeReadMore(stream, state); } function chunkInvalid(state, chunk) { var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); } - return er; -} -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); + return er; } Readable.prototype.isPaused = function () { return this._readableState.flowing === false; -}; +}; // backwards compatibility. + -// backwards compatibility. Readable.prototype.setEncoding = function (enc) { if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 + + this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: + + var p = this._readableState.buffer.head; + var content = ''; + + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + + this._readableState.buffer.clear(); + + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; return this; -}; +}; // Don't raise the hwm > 1GB + + +var MAX_HWM = 0x40000000; -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; function computeNewHighWaterMark(n) { if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. n = MAX_HWM; } else { // Get the next highest power of 2 to prevent increasing hwm excessively in @@ -347,56 +361,55 @@ function computeNewHighWaterMark(n) { n |= n >>> 16; n++; } - return n; -} -// This function is designed to be inlinable, so please take care when making + return n; +} // This function is designed to be inlinable, so please take care when making // changes to the function body. + + function howMuchToRead(n, state) { if (n <= 0 || state.length === 0 && state.ended) return 0; if (state.objectMode) return 1; + if (n !== n) { // Only flow one buffer at a time if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. + } // If we're asking for more than the current hwm, then raise the hwm. + + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough + if (n <= state.length) return n; // Don't have enough + if (!state.ended) { state.needReadable = true; return 0; } + return state.length; -} +} // you can override either this method, or the async _read(n) below. + -// you can override either this method, or the async _read(n) below. Readable.prototype.read = function (n) { debug('read', n); n = parseInt(n, 10); var state = this._readableState; var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we // already have a bunch of data in the buffer, then just trigger // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { debug('read: emitReadable', state.length, state.ended); if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); return null; } - n = howMuchToRead(n, state); + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. - // if we've ended, and we're now clear, then finish it up. if (n === 0 && state.ended) { if (state.length === 0) endReadable(this); return null; - } - - // All the actual chunk generation logic needs to be + } // All the actual chunk generation logic needs to be // *below* the call to _read. The reason is that in certain // synthetic stream cases, such as passthrough streams, _read // may be a completely synchronous operation which may change @@ -417,33 +430,34 @@ Readable.prototype.read = function (n) { // 'readable' etc. // // 3. Actually pull the requested chunks out of the buffer and return. - // if we need a readable event, then we need to do some reading. + + var doRead = state.needReadable; - debug('need readable', doRead); + debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some - // if we currently have less than the highWaterMark, then also read some if (state.length === 0 || state.length - n < state.highWaterMark) { doRead = true; debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already + } // however, if we've ended, then there's no point, and if we're already // reading, then it's unnecessary. + + if (state.ended || state.reading) { doRead = false; debug('reading or ended', doRead); } else if (doRead) { debug('do read'); state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method + state.sync = true; // if the length is currently zero, then we *need* a readable event. + + if (state.length === 0) state.needReadable = true; // call internal read method + this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, + + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); } @@ -451,91 +465,144 @@ Readable.prototype.read = function (n) { if (n > 0) ret = fromList(n, state);else ret = null; if (ret === null) { - state.needReadable = true; + state.needReadable = state.length <= state.highWaterMark; n = 0; } else { state.length -= n; + state.awaitDrain = 0; } if (state.length === 0) { // If we have nothing in the buffer, then we want to know // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. - // If we tried to read() past the EOF, then emit end on the next tick. if (nOrig !== n && state.ended) endReadable(this); } if (ret !== null) this.emit('data', ret); - return ret; }; function onEofChunk(stream, state) { + debug('onEofChunk'); if (state.ended) return; + if (state.decoder) { var chunk = state.decoder.end(); + if (chunk && chunk.length) { state.buffer.push(chunk); state.length += state.objectMode ? 1 : chunk.length; } } + state.ended = true; - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; -// Don't emit readable right away in sync mode, because this can trigger + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } +} // Don't emit readable right away in sync mode, because this can trigger // another read() call => stack overflow. This way, it might trigger // a nextTick recursion warning, but that's not so bad. + + function emitReadable(stream) { var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); state.needReadable = false; + if (!state.emittedReadable) { debug('emitReadable', state.flowing); state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + process.nextTick(emitReadable_, stream); } } function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); -// at this point, the user has presumably seen the 'readable' event, + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. + + + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); +} // at this point, the user has presumably seen the 'readable' event, // and called read() to consume some data. that may have triggered // in turn another _read(n) call, in which case reading = true if // it's in progress. // However, if we're not ended, or reading, and the length < hwm, // then go ahead and try to read some more preemptively. + + function maybeReadMore(stream, state) { if (!state.readingMore) { state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); + process.nextTick(maybeReadMore_, stream, state); } } function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; debug('maybeReadMore read 0'); stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; + if (len === state.length) // didn't get any data, stop spinning. + break; } - state.readingMore = false; -} -// abstract method. to be overridden in specific implementation classes. + state.readingMore = false; +} // abstract method. to be overridden in specific implementation classes. // call cb(er, data) where data is <= n in length. // for virtual (non-string, non-buffer) streams, "length" is somewhat // arbitrary, and perhaps not very meaningful. + + Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); }; Readable.prototype.pipe = function (dest, pipeOpts) { @@ -546,24 +613,26 @@ Readable.prototype.pipe = function (dest, pipeOpts) { case 0: state.pipes = dest; break; + case 1: state.pipes = [state.pipes, dest]; break; + default: state.pipes.push(dest); break; } + state.pipesCount += 1; debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); - + if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { debug('onunpipe'); + if (readable === src) { if (unpipeInfo && unpipeInfo.hasUnpiped === false) { unpipeInfo.hasUnpiped = true; @@ -575,19 +644,19 @@ Readable.prototype.pipe = function (dest, pipeOpts) { function onend() { debug('onend'); dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter + } // when the dest drains, it reduces the awaitDrain counter // on the source. This would be more elegant with a .once() // handler in flow(), but adding and removing repeatedly is // too slow. + + var ondrain = pipeOnDrain(src); dest.on('drain', ondrain); - var cleanedUp = false; + function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken + debug('cleanup'); // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); dest.removeListener('finish', onfinish); dest.removeListener('drain', ondrain); @@ -596,75 +665,71 @@ Readable.prototype.pipe = function (dest, pipeOpts) { src.removeListener('end', onend); src.removeListener('end', unpipe); src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this + cleanedUp = true; // if the reader is waiting for a drain event from this // specific writer, then it would cause it to never start // flowing again. // So, if this is awaiting a drain, then we just call it now. // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; src.on('data', ondata); + function ondata(chunk) { debug('ondata'); - increasedAwaitDrain = false; var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { + debug('dest.write', ret); + + if (ret === false) { // If the user unpiped during `dest.write()`, it is possible // to get stuck in a permanently paused state if that write // also returned false. // => Check whether `dest` is still a piping destination. if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', src._readableState.awaitDrain); - src._readableState.awaitDrain++; - increasedAwaitDrain = true; + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; } + src.pause(); } - } - - // if the dest has an error, then stop piping into it. + } // if the dest has an error, then stop piping into it. // however, don't suppress the throwing behavior for this. + + function onerror(er) { debug('onerror', er); unpipe(); dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } // Make sure our error handler is attached before userland ones. - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - // Both close and finish should trigger unpipe, but only once. + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. + function onclose() { dest.removeListener('finish', onfinish); unpipe(); } + dest.once('close', onclose); + function onfinish() { debug('onfinish'); dest.removeListener('close', onclose); unpipe(); } + dest.once('finish', onfinish); function unpipe() { debug('unpipe'); src.unpipe(dest); - } + } // tell the dest that it's being piped to - // tell the dest that it's being piped to - dest.emit('pipe', src); - // start the flow if it hasn't been started already. + dest.emit('pipe', src); // start the flow if it hasn't been started already. + if (!state.flowing) { debug('pipe resume'); src.resume(); @@ -674,10 +739,11 @@ Readable.prototype.pipe = function (dest, pipeOpts) { }; function pipeOnDrain(src) { - return function () { + return function pipeOnDrainFunctionResult() { var state = src._readableState; debug('pipeOnDrain', state.awaitDrain); if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { state.flowing = true; flow(src); @@ -687,27 +753,24 @@ function pipeOnDrain(src) { Readable.prototype.unpipe = function (dest) { var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; + var unpipeInfo = { + hasUnpiped: false + }; // if we're not piping anywhere, then do nothing. - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; + if (state.pipesCount === 0) return this; // just one destination. most common case. - // just one destination. most common case. if (state.pipesCount === 1) { // passed in one, but it's not the right one. if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. - if (!dest) dest = state.pipes; - - // got a match. state.pipes = null; state.pipesCount = 0; state.flowing = false; if (dest) dest.emit('unpipe', this, unpipeInfo); return this; - } + } // slow case. multiple pipe destinations. - // slow case. multiple pipe destinations. if (!dest) { // remove all. @@ -718,80 +781,139 @@ Readable.prototype.unpipe = function (dest) { state.flowing = false; for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, unpipeInfo); - }return this; - } + dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + } + + return this; + } // try to find the right one. + - // try to find the right one. var index = indexOf(state.pipes, dest); if (index === -1) return this; - state.pipes.splice(index, 1); state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; - -// set up data events if they are asked for +}; // set up data events if they are asked for // Ensure readable listeners eventually get something + + Readable.prototype.on = function (ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused + + if (state.flowing !== false) this.resume(); } else if (ev === 'readable') { - var state = this._readableState; if (!state.endEmitted && !state.readableListening) { state.readableListening = state.needReadable = true; + state.flowing = false; state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { + debug('on readable', state.length, state.reading); + + if (state.length) { emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); } } } return res; }; + Readable.prototype.addListener = Readable.prototype.on; +Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + + return res; +}; + +Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + + return res; +}; + +function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; + + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); + } +} + function nReadingNextTick(self) { debug('readable nexttick read 0'); self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API +} // pause() and resume() are remnants of the legacy readable stream API // If the user uses them, then switch into old mode. + + Readable.prototype.resume = function () { var state = this._readableState; + if (!state.flowing) { - debug('resume'); - state.flowing = true; + debug('resume'); // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + + state.flowing = !state.readableListening; resume(this, state); } + + state.paused = false; return this; }; function resume(stream, state) { if (!state.resumeScheduled) { state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); + process.nextTick(resume_, stream, state); } } function resume_(stream, state) { + debug('resume', state.reading); + if (!state.reading) { - debug('resume read 0'); stream.read(0); } state.resumeScheduled = false; - state.awaitDrain = 0; stream.emit('resume'); flow(stream); if (state.flowing && !state.reading) stream.read(0); @@ -799,31 +921,37 @@ function resume_(stream, state) { Readable.prototype.pause = function () { debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { + + if (this._readableState.flowing !== false) { debug('pause'); this._readableState.flowing = false; this.emit('pause'); } + + this._readableState.paused = true; return this; }; function flow(stream) { var state = stream._readableState; debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} -// wrap an old-style stream as the async data source. + while (state.flowing && stream.read() !== null) { + ; + } +} // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. + + Readable.prototype.wrap = function (stream) { var _this = this; var state = this._readableState; var paused = false; - stream.on('end', function () { debug('wrapped end'); + if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) _this.push(chunk); @@ -831,42 +959,41 @@ Readable.prototype.wrap = function (stream) { _this.push(null); }); - stream.on('data', function (chunk) { debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode - // don't skip over falsy values in objectMode if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = _this.push(chunk); + if (!ret) { paused = true; stream.pause(); } - }); - - // proxy all the other methods. + }); // proxy all the other methods. // important when wrapping filters and duplexes. + for (var i in stream) { if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { return stream[method].apply(stream, arguments); }; }(i); } - } + } // proxy certain important events. + - // proxy certain important events. for (var n = 0; n < kProxyEvents.length; n++) { stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the + } // when we try to consume some more bytes, simply unpause the // underlying stream. + + this._read = function (n) { debug('wrapped _read', n); + if (paused) { paused = false; stream.resume(); @@ -876,144 +1003,122 @@ Readable.prototype.wrap = function (stream) { return this; }; +if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); + } + + return createReadableStreamAsyncIterator(this); + }; +} + Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, - get: function () { + get: function get() { return this._readableState.highWaterMark; } }); +Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } +}); +Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } +}); // exposed for testing purposes only. -// exposed for testing purposes only. Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. +Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; + } +}); // Pluck off n bytes from an array of buffers. // Length is the combined lengths of all the buffers in the list. // This function is designed to be inlinable, so please take care when making // changes to the function body. + function fromList(n, state) { // nothing buffered if (state.length === 0) return null; - var ret; if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); state.buffer.clear(); } else { // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); + ret = state.buffer.consume(n, state.decoder); } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; return ret; } function endReadable(stream) { var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + debug('endReadable', state.endEmitted); if (!state.endEmitted) { state.ended = true; - pna.nextTick(endReadableNT, state, stream); + process.nextTick(endReadableNT, state, stream); } } function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. + debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { state.endEmitted = true; stream.readable = false; stream.emit('end'); + + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; + + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } } } +if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = require('./internal/streams/from'); + } + + return from(Readable, iterable, opts); + }; +} + function indexOf(xs, x) { for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) return i; } + return -1; } \ No newline at end of file diff --git a/build/node_modules/readable-stream/lib/_stream_transform.js b/build/node_modules/readable-stream/lib/_stream_transform.js index fcfc105a..41a738c4 100644 --- a/build/node_modules/readable-stream/lib/_stream_transform.js +++ b/build/node_modules/readable-stream/lib/_stream_transform.js @@ -18,7 +18,6 @@ // 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. - // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where @@ -60,40 +59,37 @@ // However, even in such a pathological case, only a single written chunk // would be consumed, and then the rest would wait (un-transformed) until // the results of the previous transformed chunk were consumed. - 'use strict'; module.exports = Transform; -var Duplex = require('./_stream_duplex'); +var _require$codes = require('../errors').codes, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, + ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ +var Duplex = require('./_stream_duplex'); -util.inherits(Transform, Duplex); +require('inherits')(Transform, Duplex); function afterTransform(er, data) { var ts = this._transformState; ts.transforming = false; - var cb = ts.writecb; - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); + if (cb === null) { + return this.emit('error', new ERR_MULTIPLE_CALLBACK()); } ts.writechunk = null; ts.writecb = null; - if (data != null) // single equals check for both `null` and `undefined` this.push(data); - cb(er); - var rs = this._readableState; rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { this._read(rs.highWaterMark); } @@ -101,9 +97,7 @@ function afterTransform(er, data) { function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { afterTransform: afterTransform.bind(this), needTransform: false, @@ -111,30 +105,27 @@ function Transform(options) { writecb: null, writechunk: null, writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; + }; // start out asking for a readable event once data is transformed. - // we have implemented the _read method, and done the other things + this._readableState.needReadable = true; // we have implemented the _read method, and done the other things // that Readable wants before the first _read call, so unset the // sync guard flag. + this._readableState.sync = false; if (options) { if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } + } // When the writable side finishes, then flush out anything remaining. + - // When the writable side finishes, then flush out anything remaining. this.on('prefinish', prefinish); } function prefinish() { var _this = this; - if (typeof this._flush === 'function') { + if (typeof this._flush === 'function' && !this._readableState.destroyed) { this._flush(function (er, data) { done(_this, er, data); }); @@ -146,9 +137,7 @@ function prefinish() { Transform.prototype.push = function (chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! +}; // This is the part where you do stuff! // override this function in implementation classes. // 'chunk' is an input chunk. // @@ -158,8 +147,10 @@ Transform.prototype.push = function (chunk, encoding) { // Call `cb(err)` when you are done with this chunk. If you pass // an error, then that'll put the hurt on the whole operation. If you // never call cb(), then you'll never get another chunk. + + Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); + cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); }; Transform.prototype._write = function (chunk, encoding, cb) { @@ -167,20 +158,22 @@ Transform.prototype._write = function (chunk, encoding, cb) { ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; + if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } -}; - -// Doesn't matter what the args are here. +}; // Doesn't matter what the args are here. // _transform does all the work. // That we got here means that the readable side wants more data. + + Transform.prototype._read = function (n) { var ts = this._transformState; - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + if (ts.writechunk !== null && !ts.transforming) { ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { // mark that we need a transform, so that any data that comes in @@ -190,25 +183,19 @@ Transform.prototype._read = function (n) { }; Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - Duplex.prototype._destroy.call(this, err, function (err2) { cb(err2); - _this2.emit('close'); }); }; function done(stream, er, data) { if (er) return stream.emit('error', er); - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - + stream.push(data); // TODO(BridgeAR): Write a test for these two error cases // if there's nothing in the write buffer, then that means // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); return stream.push(null); } \ No newline at end of file diff --git a/build/node_modules/readable-stream/lib/_stream_writable.js b/build/node_modules/readable-stream/lib/_stream_writable.js index b0b02200..a2634d7c 100644 --- a/build/node_modules/readable-stream/lib/_stream_writable.js +++ b/build/node_modules/readable-stream/lib/_stream_writable.js @@ -18,35 +18,29 @@ // 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. - // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. - 'use strict'; -/**/ - -var pna = require('process-nextick-args'); -/**/ - module.exports = Writable; - /* */ + function WriteReq(chunk, encoding, cb) { this.chunk = chunk; this.encoding = encoding; this.callback = cb; this.next = null; -} - -// It seems a linked list but it is not +} // It seems a linked list but it is not // there will be only 2 of these for each stream + + function CorkedRequest(state) { var _this = this; this.next = null; this.entry = null; + this.finish = function () { onCorkedFinish(_this, state); }; @@ -54,266 +48,247 @@ function CorkedRequest(state) { /* */ /**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ -/**/ + var Duplex; /**/ Writable.WritableState = WritableState; - /**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ -/**/ var internalUtil = { deprecate: require('util-deprecate') }; /**/ /**/ + var Stream = require('./internal/streams/stream'); /**/ -/**/ -var Buffer = require('safe-buffer').Buffer; +var Buffer = require('buffer').Buffer; + var OurUint8Array = global.Uint8Array || function () {}; + function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } + function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } -/**/ - var destroyImpl = require('./internal/streams/destroy'); -util.inherits(Writable, Stream); +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; -function nop() {} +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); +var errorOrDestroy = destroyImpl.errorOrDestroy; - options = options || {}; +require('inherits')(Writable, Stream); - // Duplex streams are both readable and writable, but share +function nop() {} + +function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - // object stream flag to indicate whether or not this stream + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - // the point at which write() starts returning false + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false // Note: 0 is a valid value, means that we always return false if // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called + + this.finalCalled = false; // drain event flag. - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); + this.needDrain = false; // at the start of calling end() - // if _final has been called - this.finalCalled = false; + this.ending = false; // when end() has been called, and returned - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; + this.ended = false; // when 'finish' is emitted - // has it been destroyed - this.destroyed = false; + this.finished = false; // has it been destroyed - // should we decode strings into buffers before passing to _write? + this.destroyed = false; // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - // Crypto is kind of old and crusty. Historically, its default string + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - // not an actual buffer we keep track of, but a measurement + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement // of how much we're waiting to get pushed to some underlying // socket or file. - this.length = 0; - // a flag to see when we're in the middle of a write. - this.writing = false; + this.length = 0; // a flag to see when we're in the middle of a write. - // when true all writes will be buffered until .uncork() call - this.corked = 0; + this.writing = false; // when true all writes will be buffered until .uncork() call - // a flag to be able to tell if the onwrite cb is called immediately, + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, because any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. - this.sync = true; - // a flag to know if we're processing previously buffered items, which + this.sync = true; // a flag to know if we're processing previously buffered items, which // may call the _write() callback in the same tick, so that we don't // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - // the callback that's passed to _write(chunk,cb) + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { onwrite(stream, er); - }; + }; // the callback that the user supplies to write(chunk,encoding,cb) - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - // the amount that is being written when _write is called. - this.writelen = 0; + this.writecb = null; // the amount that is being written when _write is called. + this.writelen = 0; this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - // emit prefinish if the only thing we're waiting for is _write cbs + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs // This is relevant for synchronous Transform streams - this.prefinished = false; - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; + this.prefinished = false; // True if the error was already emitted and should not be thrown again - // count buffered requests - this.bufferedRequestCount = 0; + this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. - // allocate the first CorkedRequest, there is always + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') + + this.autoDestroy = !!options.autoDestroy; // count buffered requests + + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); } WritableState.prototype.getBuffer = function getBuffer() { var current = this.bufferedRequest; var out = []; + while (current) { out.push(current); current = current.next; } + return out; }; (function () { try { Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { + get: internalUtil.deprecate(function writableStateBufferGetter() { return this.getBuffer(); }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') }); } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, +})(); // Test _writableState for inheritance to account for Duplex streams, // whose prototype chain only points to Readable. + + var realHasInstance; + if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { realHasInstance = Function.prototype[Symbol.hasInstance]; Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { + value: function value(object) { if (realHasInstance.call(this, object)) return true; if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; } }); } else { - realHasInstance = function (object) { + realHasInstance = function realHasInstance(object) { return object instanceof this; }; } function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, too. + Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. // `realHasInstance` is necessary because using plain `instanceof` // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the // Node.js LazyTransform implementation, which has a non-trivial getter for // `_writableState` that would lead to infinite recursion. - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 - this._writableState = new WritableState(options, this); + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); // legacy. - // legacy. this.writable = true; if (options) { if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; } Stream.call(this); -} +} // Otherwise people can pipe Writable streams, which is just wrong. + -// Otherwise people can pipe Writable streams, which is just wrong. Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); }; function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - pna.nextTick(cb, er); -} + var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb -// Checks that a user-supplied chunk is valid, especially for the particular + errorOrDestroy(stream, er); + process.nextTick(cb, er); +} // Checks that a user-supplied chunk is valid, especially for the particular // mode the stream is in. Currently this means that `null` is never accepted // and undefined/non-string values are only allowed in object mode. + + function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; + var er; if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); } + if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; } - return valid; + + return true; } Writable.prototype.write = function (chunk, encoding, cb) { var state = this._writableState; var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); if (isBuf && !Buffer.isBuffer(chunk)) { @@ -326,21 +301,16 @@ Writable.prototype.write = function (chunk, encoding, cb) { } if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { state.pendingcb++; ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); } - return ret; }; Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; + this._writableState.corked++; }; Writable.prototype.uncork = function () { @@ -348,23 +318,33 @@ Writable.prototype.uncork = function () { if (state.corked) { state.corked--; - - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { // node::ParseEncoding() requires lower case. if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); this._writableState.defaultEncoding = encoding; return this; }; +Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); + function decodeChunk(state, chunk, encoding) { if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding); } + return chunk; } @@ -373,29 +353,28 @@ Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { // because otherwise some prototype manipulation in // userland will fail enumerable: false, - get: function () { + get: function get() { return this._writableState.highWaterMark; } -}); - -// if we're already writing something, then just put this +}); // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. + function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (!isBuf) { var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { isBuf = true; encoding = 'buffer'; chunk = newChunk; } } - var len = state.objectMode ? 1 : chunk.length; + var len = state.objectMode ? 1 : chunk.length; state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. if (!ret) state.needDrain = true; if (state.writing || state.corked) { @@ -407,11 +386,13 @@ function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { callback: cb, next: null }; + if (last) { last.next = state.lastBufferedRequest; } else { state.bufferedRequest = state.lastBufferedRequest; } + state.bufferedRequestCount += 1; } else { doWrite(stream, state, false, len, chunk, encoding, cb); @@ -425,7 +406,7 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) { state.writecb = cb; state.writing = true; state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); state.sync = false; } @@ -435,20 +416,20 @@ function onwriteError(stream, state, sync, er, cb) { if (sync) { // defer the callback if we are being called synchronously // to avoid piling up things on the stack - pna.nextTick(cb, er); - // this can emit finish, and it will always happen + process.nextTick(cb, er); // this can emit finish, and it will always happen // after error - pna.nextTick(finishMaybe, stream, state); + + process.nextTick(finishMaybe, stream, state); stream._writableState.errorEmitted = true; - stream.emit('error', er); + errorOrDestroy(stream, er); } else { // the caller expect this to happen before if // it is async cb(er); stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must + errorOrDestroy(stream, er); // this can emit finish, but finish must // always follow error + finishMaybe(stream, state); } } @@ -464,21 +445,18 @@ function onwrite(stream, er) { var state = stream._writableState; var sync = state.sync; var cb = state.writecb; - + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); + var finished = needFinish(state) || stream.destroyed; if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { clearBuffer(stream, state); } if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ + process.nextTick(afterWrite, stream, state, finished, cb); } else { afterWrite(stream, state, finished, cb); } @@ -490,19 +468,19 @@ function afterWrite(stream, state, finished, cb) { state.pendingcb--; cb(); finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't +} // Must force callback to be called on nextTick, so that we don't // emit 'drain' before the write() consumer gets the 'false' return // value, and has a chance to attach a 'drain' listener. + + function onwriteDrain(stream, state) { if (state.length === 0 && state.needDrain) { state.needDrain = false; stream.emit('drain'); } -} +} // if there's something in the buffer waiting, then process it + -// if there's something in the buffer waiting, then process it function clearBuffer(stream, state) { state.bufferProcessing = true; var entry = state.bufferedRequest; @@ -513,29 +491,30 @@ function clearBuffer(stream, state) { var buffer = new Array(l); var holder = state.corkedRequestsFree; holder.entry = entry; - var count = 0; var allBuffers = true; + while (entry) { buffer[count] = entry; if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time // as the hot path ends with doWrite + state.pendingcb++; state.lastBufferedRequest = null; + if (holder.next) { state.corkedRequestsFree = holder.next; holder.next = null; } else { state.corkedRequestsFree = new CorkedRequest(state); } + state.bufferedRequestCount = 0; } else { // Slow case, write chunks one-by-one @@ -544,14 +523,13 @@ function clearBuffer(stream, state) { var encoding = entry.encoding; var cb = entry.callback; var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then + state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then // it means that we need to wait until it does. // also, that means that the chunk and cb are currently // being processed, so move the buffer counter past them. + if (state.writing) { break; } @@ -565,7 +543,7 @@ function clearBuffer(stream, state) { } Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); }; Writable.prototype._writev = null; @@ -582,38 +560,52 @@ Writable.prototype.end = function (chunk, encoding, cb) { encoding = null; } - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks - // .end() fully uncorks if (state.corked) { state.corked = 1; this.uncork(); - } + } // ignore unnecessary end() calls. + - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) endWritable(this, state, cb); + if (!state.ending) endWritable(this, state, cb); + return this; }; +Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); + function needFinish(state) { return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; } + function callFinal(stream, state) { stream._final(function (err) { state.pendingcb--; + if (err) { - stream.emit('error', err); + errorOrDestroy(stream, err); } + state.prefinished = true; stream.emit('prefinish'); finishMaybe(stream, state); }); } + function prefinish(stream, state) { if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { + if (typeof stream._final === 'function' && !state.destroyed) { state.pendingcb++; state.finalCalled = true; - pna.nextTick(callFinal, stream, state); + process.nextTick(callFinal, stream, state); } else { state.prefinished = true; stream.emit('prefinish'); @@ -623,22 +615,37 @@ function prefinish(stream, state) { function finishMaybe(stream, state) { var need = needFinish(state); + if (need) { prefinish(stream, state); + if (state.pendingcb === 0) { state.finished = true; stream.emit('finish'); + + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; + + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } } } + return need; } function endWritable(stream, state, cb) { state.ending = true; finishMaybe(stream, state); + if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + if (state.finished) process.nextTick(cb);else stream.once('finish', cb); } + state.ended = true; stream.writable = false; } @@ -646,42 +653,45 @@ function endWritable(stream, state, cb) { function onCorkedFinish(corkReq, state, err) { var entry = corkReq.entry; corkReq.entry = null; + while (entry) { var cb = entry.callback; state.pendingcb--; cb(err); entry = entry.next; - } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = corkReq; - } else { - state.corkedRequestsFree = corkReq; - } + } // reuse the free corkReq. + + + state.corkedRequestsFree.next = corkReq; } Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { if (this._writableState === undefined) { return false; } + return this._writableState.destroyed; }, - set: function (value) { + set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (!this._writableState) { return; - } - - // backward compatibility, the user is explicitly + } // backward compatibility, the user is explicitly // managing destroyed + + this._writableState.destroyed = value; } }); - Writable.prototype.destroy = destroyImpl.destroy; Writable.prototype._undestroy = destroyImpl.undestroy; + Writable.prototype._destroy = function (err, cb) { - this.end(); cb(err); }; \ No newline at end of file diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js b/build/node_modules/readable-stream/lib/internal/streams/async_iterator.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js rename to build/node_modules/readable-stream/lib/internal/streams/async_iterator.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js b/build/node_modules/readable-stream/lib/internal/streams/buffer_list.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js rename to build/node_modules/readable-stream/lib/internal/streams/buffer_list.js diff --git a/build/node_modules/readable-stream/lib/internal/streams/destroy.js b/build/node_modules/readable-stream/lib/internal/streams/destroy.js index 5a0a0d88..3268a16f 100644 --- a/build/node_modules/readable-stream/lib/internal/streams/destroy.js +++ b/build/node_modules/readable-stream/lib/internal/streams/destroy.js @@ -1,11 +1,5 @@ -'use strict'; +'use strict'; // undocumented cb() API, needed for core, not for public API -/**/ - -var pna = require('process-nextick-args'); -/**/ - -// undocumented cb() API, needed for core, not for public API function destroy(err, cb) { var _this = this; @@ -15,38 +9,61 @@ function destroy(err, cb) { if (readableDestroyed || writableDestroyed) { if (cb) { cb(err); - } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { - pna.nextTick(emitErrorNT, this, err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } } - return this; - } - // we set destroyed to true before firing error callbacks in order + return this; + } // we set destroyed to true before firing error callbacks in order // to make it re-entrance safe in case destroy() is called within callbacks + if (this._readableState) { this._readableState.destroyed = true; - } + } // if this is a duplex stream mark the writable part as destroyed as well + - // if this is a duplex stream mark the writable part as destroyed as well if (this._writableState) { this._writableState.destroyed = true; } this._destroy(err || null, function (err) { if (!cb && err) { - pna.nextTick(emitErrorNT, _this, err); - if (_this._writableState) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); } } else if (cb) { + process.nextTick(emitCloseNT, _this); cb(err); + } else { + process.nextTick(emitCloseNT, _this); } }); return this; } +function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); +} + +function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); +} + function undestroy() { if (this._readableState) { this._readableState.destroyed = false; @@ -59,6 +76,8 @@ function undestroy() { this._writableState.destroyed = false; this._writableState.ended = false; this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; this._writableState.finished = false; this._writableState.errorEmitted = false; } @@ -68,7 +87,19 @@ function emitErrorNT(self, err) { self.emit('error', err); } +function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); +} + module.exports = { destroy: destroy, - undestroy: undestroy + undestroy: undestroy, + errorOrDestroy: errorOrDestroy }; \ No newline at end of file diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js b/build/node_modules/readable-stream/lib/internal/streams/end-of-stream.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js rename to build/node_modules/readable-stream/lib/internal/streams/end-of-stream.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js b/build/node_modules/readable-stream/lib/internal/streams/from-browser.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js rename to build/node_modules/readable-stream/lib/internal/streams/from-browser.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from.js b/build/node_modules/readable-stream/lib/internal/streams/from.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from.js rename to build/node_modules/readable-stream/lib/internal/streams/from.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js b/build/node_modules/readable-stream/lib/internal/streams/pipeline.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js rename to build/node_modules/readable-stream/lib/internal/streams/pipeline.js diff --git a/build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js b/build/node_modules/readable-stream/lib/internal/streams/state.js similarity index 100% rename from build/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js rename to build/node_modules/readable-stream/lib/internal/streams/state.js diff --git a/build/node_modules/readable-stream/package.json b/build/node_modules/readable-stream/package.json index c8860037..d6d99502 100644 --- a/build/node_modules/readable-stream/package.json +++ b/build/node_modules/readable-stream/package.json @@ -1,34 +1,37 @@ { - "_from": "readable-stream@^2.3.5", - "_id": "readable-stream@2.3.7", + "_from": "readable-stream@^3.6.0", + "_id": "readable-stream@3.6.0", "_inBundle": false, - "_integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "_integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "_location": "/readable-stream", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "readable-stream@^2.3.5", + "raw": "readable-stream@^3.6.0", "name": "readable-stream", "escapedName": "readable-stream", - "rawSpec": "^2.3.5", + "rawSpec": "^3.6.0", "saveSpec": null, - "fetchSpec": "^2.3.5" + "fetchSpec": "^3.6.0" }, "_requiredBy": [ - "/concat-stream", + "/browserify-sign", + "/hash-base", "/superagent", + "/winston", "/winston-transport" ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "_shasum": "1eca1cf711aef814c04f62252a36a62f6cb23b57", - "_spec": "readable-stream@^2.3.5", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-3.6.0.tgz", + "_shasum": "337bbda3adc0706bd3e024426a286d4b4b2c9198", + "_spec": "readable-stream@^3.6.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "browser": { "util": false, + "worker_threads": false, + "./errors": "./errors-browser.js", "./readable.js": "./readable-browser.js", - "./writable.js": "./writable-browser.js", - "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js", "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" }, "bugs": { @@ -36,24 +39,36 @@ }, "bundleDependencies": false, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "deprecated": false, "description": "Streams3, a user-land copy of the stream library from Node.js", "devDependencies": { + "@babel/cli": "^7.2.0", + "@babel/core": "^7.2.0", + "@babel/polyfill": "^7.0.0", + "@babel/preset-env": "^7.2.0", + "airtap": "0.0.9", "assert": "^1.4.0", - "babel-polyfill": "^6.9.1", - "buffer": "^4.9.0", - "lolex": "^2.3.2", - "nyc": "^6.4.0", - "tap": "^0.7.0", - "tape": "^4.8.0" + "bl": "^2.0.0", + "deep-strict-equal": "^0.2.0", + "events.once": "^2.0.2", + "glob": "^7.1.2", + "gunzip-maybe": "^1.4.1", + "hyperquest": "^2.1.3", + "lolex": "^2.6.0", + "nyc": "^11.0.0", + "pump": "^3.0.0", + "rimraf": "^2.6.2", + "tap": "^12.0.0", + "tape": "^4.9.0", + "tar-fs": "^1.16.2", + "util-promisify": "^2.1.0" + }, + "engines": { + "node": ">= 6" }, "homepage": "https://github.com/nodejs/readable-stream#readme", "keywords": [ @@ -74,10 +89,13 @@ "url": "git://github.com/nodejs/readable-stream.git" }, "scripts": { - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", + "ci": "TAP=1 tap --no-esm test/parallel/*.js test/ours/*.js | tee test.tap", "cover": "nyc npm test", "report": "nyc report --reporter=lcov", - "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js" + "test": "tap -J --no-esm test/parallel/*.js test/ours/*.js", + "test-browser-local": "airtap --open --local -- test/browser.js", + "test-browsers": "airtap --sauce-connect --loopback airtap.local -- test/browser.js", + "update-browser-errors": "babel -o errors-browser.js errors.js" }, - "version": "2.3.7" + "version": "3.6.0" } diff --git a/build/node_modules/readable-stream/readable-browser.js b/build/node_modules/readable-stream/readable-browser.js index e5037259..adbf60de 100644 --- a/build/node_modules/readable-stream/readable-browser.js +++ b/build/node_modules/readable-stream/readable-browser.js @@ -5,3 +5,5 @@ exports.Writable = require('./lib/_stream_writable.js'); exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); +exports.finished = require('./lib/internal/streams/end-of-stream.js'); +exports.pipeline = require('./lib/internal/streams/pipeline.js'); diff --git a/build/node_modules/readable-stream/readable.js b/build/node_modules/readable-stream/readable.js index ec89ec53..9e0ca120 100644 --- a/build/node_modules/readable-stream/readable.js +++ b/build/node_modules/readable-stream/readable.js @@ -1,13 +1,8 @@ var Stream = require('stream'); if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream; - exports = module.exports = Stream.Readable; - exports.Readable = Stream.Readable; - exports.Writable = Stream.Writable; - exports.Duplex = Stream.Duplex; - exports.Transform = Stream.Transform; - exports.PassThrough = Stream.PassThrough; - exports.Stream = Stream; + module.exports = Stream.Readable; + Object.assign(module.exports, Stream); + module.exports.Stream = Stream; } else { exports = module.exports = require('./lib/_stream_readable.js'); exports.Stream = Stream || exports; @@ -16,4 +11,6 @@ if (process.env.READABLE_STREAM === 'disable' && Stream) { exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); + exports.finished = require('./lib/internal/streams/end-of-stream.js'); + exports.pipeline = require('./lib/internal/streams/pipeline.js'); } diff --git a/build/node_modules/readdirp/LICENSE b/build/node_modules/readdirp/LICENSE new file mode 100644 index 00000000..037cbb4e --- /dev/null +++ b/build/node_modules/readdirp/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/readdirp/README.md b/build/node_modules/readdirp/README.md new file mode 100644 index 00000000..465593c9 --- /dev/null +++ b/build/node_modules/readdirp/README.md @@ -0,0 +1,122 @@ +# readdirp [![Weekly downloads](https://img.shields.io/npm/dw/readdirp.svg)](https://github.com/paulmillr/readdirp) + +Recursive version of [fs.readdir](https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback). Exposes a **stream API** and a **promise API**. + + +```sh +npm install readdirp +``` + +```javascript +const readdirp = require('readdirp'); + +// Use streams to achieve small RAM & CPU footprint. +// 1) Streams example with for-await. +for await (const entry of readdirp('.')) { + const {path} = entry; + console.log(`${JSON.stringify({path})}`); +} + +// 2) Streams example, non for-await. +// Print out all JS files along with their size within the current folder & subfolders. +readdirp('.', {fileFilter: '*.js', alwaysStat: true}) + .on('data', (entry) => { + const {path, stats: {size}} = entry; + console.log(`${JSON.stringify({path, size})}`); + }) + // Optionally call stream.destroy() in `warn()` in order to abort and cause 'close' to be emitted + .on('warn', error => console.error('non-fatal error', error)) + .on('error', error => console.error('fatal error', error)) + .on('end', () => console.log('done')); + +// 3) Promise example. More RAM and CPU than streams / for-await. +const files = await readdirp.promise('.'); +console.log(files.map(file => file.path)); + +// Other options. +readdirp('test', { + fileFilter: '*.js', + directoryFilter: ['!.git', '!*modules'] + // directoryFilter: (di) => di.basename.length === 9 + type: 'files_directories', + depth: 1 +}); +``` + +For more examples, check out `examples` directory. + +## API + +`const stream = readdirp(root[, options])` — **Stream API** + +- Reads given root recursively and returns a `stream` of [entry infos](#entryinfo) +- Optionally can be used like `for await (const entry of stream)` with node.js 10+ (`asyncIterator`). +- `on('data', (entry) => {})` [entry info](#entryinfo) for every file / dir. +- `on('warn', (error) => {})` non-fatal `Error` that prevents a file / dir from being processed. Example: inaccessible to the user. +- `on('error', (error) => {})` fatal `Error` which also ends the stream. Example: illegal options where passed. +- `on('end')` — we are done. Called when all entries were found and no more will be emitted. +- `on('close')` — stream is destroyed via `stream.destroy()`. + Could be useful if you want to manually abort even on a non fatal error. + At that point the stream is no longer `readable` and no more entries, warning or errors are emitted +- To learn more about streams, consult the very detailed [nodejs streams documentation](https://nodejs.org/api/stream.html) + or the [stream-handbook](https://github.com/substack/stream-handbook) + +`const entries = await readdirp.promise(root[, options])` — **Promise API**. Returns a list of [entry infos](#entryinfo). + +First argument is awalys `root`, path in which to start reading and recursing into subdirectories. + +### options + +- `fileFilter: ["*.js"]`: filter to include or exclude files. A `Function`, Glob string or Array of glob strings. + - **Function**: a function that takes an entry info as a parameter and returns true to include or false to exclude the entry + - **Glob string**: a string (e.g., `*.js`) which is matched using [picomatch](https://github.com/micromatch/picomatch), so go there for more + information. Globstars (`**`) are not supported since specifying a recursive pattern for an already recursive function doesn't make sense. Negated globs (as explained in the minimatch documentation) are allowed, e.g., `!*.txt` matches everything but text files. + - **Array of glob strings**: either need to be all inclusive or all exclusive (negated) patterns otherwise an error is thrown. + `['*.json', '*.js']` includes all JavaScript and Json files. + `['!.git', '!node_modules']` includes all directories except the '.git' and 'node_modules'. + - Directories that do not pass a filter will not be recursed into. +- `directoryFilter: ['!.git']`: filter to include/exclude directories found and to recurse into. Directories that do not pass a filter will not be recursed into. +- `depth: 5`: depth at which to stop recursing even if more subdirectories are found +- `type: 'files'`: determines if data events on the stream should be emitted for `'files'` (default), `'directories'`, `'files_directories'`, or `'all'`. Setting to `'all'` will also include entries for other types of file descriptors like character devices, unix sockets and named pipes. +- `alwaysStat: false`: always return `stats` property for every file. Default is `false`, readdirp will return `Dirent` entries. Setting it to `true` can double readdir execution time - use it only when you need file `size`, `mtime` etc. Cannot be enabled on node <10.10.0. +- `lstat: false`: include symlink entries in the stream along with files. When `true`, `fs.lstat` would be used instead of `fs.stat` + +### `EntryInfo` + +Has the following properties: + +- `path: 'assets/javascripts/react.js'`: path to the file/directory (relative to given root) +- `fullPath: '/Users/dev/projects/app/assets/javascripts/react.js'`: full path to the file/directory found +- `basename: 'react.js'`: name of the file/directory +- `dirent: fs.Dirent`: built-in [dir entry object](https://nodejs.org/api/fs.html#fs_class_fs_dirent) - only with `alwaysStat: false` +- `stats: fs.Stats`: built in [stat object](https://nodejs.org/api/fs.html#fs_class_fs_stats) - only with `alwaysStat: true` + +## Changelog + +- 3.5 (Oct 13, 2020) disallows recursive directory-based symlinks. + Before, it could have entered infinite loop. +- 3.4 (Mar 19, 2020) adds support for directory-based symlinks. +- 3.3 (Dec 6, 2019) stabilizes RAM consumption and enables perf management with `highWaterMark` option. Fixes race conditions related to `for-await` looping. +- 3.2 (Oct 14, 2019) improves performance by 250% and makes streams implementation more idiomatic. +- 3.1 (Jul 7, 2019) brings `bigint` support to `stat` output on Windows. This is backwards-incompatible for some cases. Be careful. It you use it incorrectly, you'll see "TypeError: Cannot mix BigInt and other types, use explicit conversions". +- 3.0 brings huge performance improvements and stream backpressure support. +- Upgrading 2.x to 3.x: + - Signature changed from `readdirp(options)` to `readdirp(root, options)` + - Replaced callback API with promise API. + - Renamed `entryType` option to `type` + - Renamed `entryType: 'both'` to `'files_directories'` + - `EntryInfo` + - Renamed `stat` to `stats` + - Emitted only when `alwaysStat: true` + - `dirent` is emitted instead of `stats` by default with `alwaysStat: false` + - Renamed `name` to `basename` + - Removed `parentDir` and `fullParentDir` properties +- Supported node.js versions: + - 3.x: node 8+ + - 2.x: node 0.6+ + +## License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller () + +MIT License, see [LICENSE](LICENSE) file. diff --git a/build/node_modules/readdirp/index.d.ts b/build/node_modules/readdirp/index.d.ts new file mode 100644 index 00000000..cbbd76ca --- /dev/null +++ b/build/node_modules/readdirp/index.d.ts @@ -0,0 +1,43 @@ +// TypeScript Version: 3.2 + +/// + +import * as fs from 'fs'; +import { Readable } from 'stream'; + +declare namespace readdir { + interface EntryInfo { + path: string; + fullPath: string; + basename: string; + stats?: fs.Stats; + dirent?: fs.Dirent; + } + + interface ReaddirpOptions { + root?: string; + fileFilter?: string | string[] | ((entry: EntryInfo) => boolean); + directoryFilter?: string | string[] | ((entry: EntryInfo) => boolean); + type?: 'files' | 'directories' | 'files_directories' | 'all'; + lstat?: boolean; + depth?: number; + alwaysStat?: boolean; + } + + interface ReaddirpStream extends Readable, AsyncIterable { + read(): EntryInfo; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + function promise( + root: string, + options?: ReaddirpOptions + ): Promise; +} + +declare function readdir( + root: string, + options?: readdir.ReaddirpOptions +): readdir.ReaddirpStream; + +export = readdir; diff --git a/build/node_modules/readdirp/index.js b/build/node_modules/readdirp/index.js new file mode 100644 index 00000000..cf739b2d --- /dev/null +++ b/build/node_modules/readdirp/index.js @@ -0,0 +1,287 @@ +'use strict'; + +const fs = require('fs'); +const { Readable } = require('stream'); +const sysPath = require('path'); +const { promisify } = require('util'); +const picomatch = require('picomatch'); + +const readdir = promisify(fs.readdir); +const stat = promisify(fs.stat); +const lstat = promisify(fs.lstat); +const realpath = promisify(fs.realpath); + +/** + * @typedef {Object} EntryInfo + * @property {String} path + * @property {String} fullPath + * @property {fs.Stats=} stats + * @property {fs.Dirent=} dirent + * @property {String} basename + */ + +const BANG = '!'; +const RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR'; +const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]); +const FILE_TYPE = 'files'; +const DIR_TYPE = 'directories'; +const FILE_DIR_TYPE = 'files_directories'; +const EVERYTHING_TYPE = 'all'; +const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE]; + +const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code); +const [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10)); +const wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5)); + +const normalizeFilter = filter => { + if (filter === undefined) return; + if (typeof filter === 'function') return filter; + + if (typeof filter === 'string') { + const glob = picomatch(filter.trim()); + return entry => glob(entry.basename); + } + + if (Array.isArray(filter)) { + const positive = []; + const negative = []; + for (const item of filter) { + const trimmed = item.trim(); + if (trimmed.charAt(0) === BANG) { + negative.push(picomatch(trimmed.slice(1))); + } else { + positive.push(picomatch(trimmed)); + } + } + + if (negative.length > 0) { + if (positive.length > 0) { + return entry => + positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename)); + } + return entry => !negative.some(f => f(entry.basename)); + } + return entry => positive.some(f => f(entry.basename)); + } +}; + +class ReaddirpStream extends Readable { + static get defaultOptions() { + return { + root: '.', + /* eslint-disable no-unused-vars */ + fileFilter: (path) => true, + directoryFilter: (path) => true, + /* eslint-enable no-unused-vars */ + type: FILE_TYPE, + lstat: false, + depth: 2147483648, + alwaysStat: false + }; + } + + constructor(options = {}) { + super({ + objectMode: true, + autoDestroy: true, + highWaterMark: options.highWaterMark || 4096 + }); + const opts = { ...ReaddirpStream.defaultOptions, ...options }; + const { root, type } = opts; + + this._fileFilter = normalizeFilter(opts.fileFilter); + this._directoryFilter = normalizeFilter(opts.directoryFilter); + + const statMethod = opts.lstat ? lstat : stat; + // Use bigint stats if it's windows and stat() supports options (node 10+). + if (wantBigintFsStats) { + this._stat = path => statMethod(path, { bigint: true }); + } else { + this._stat = statMethod; + } + + this._maxDepth = opts.depth; + this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type); + this._wantsEverything = type === EVERYTHING_TYPE; + this._root = sysPath.resolve(root); + this._isDirent = ('Dirent' in fs) && !opts.alwaysStat; + this._statsProp = this._isDirent ? 'dirent' : 'stats'; + this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent }; + + // Launch stream with one parent, the root dir. + this.parents = [this._exploreDir(root, 1)]; + this.reading = false; + this.parent = undefined; + } + + async _read(batch) { + if (this.reading) return; + this.reading = true; + + try { + while (!this.destroyed && batch > 0) { + const { path, depth, files = [] } = this.parent || {}; + + if (files.length > 0) { + const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path)); + for (const entry of await Promise.all(slice)) { + if (this.destroyed) return; + + const entryType = await this._getEntryType(entry); + if (entryType === 'directory' && this._directoryFilter(entry)) { + if (depth <= this._maxDepth) { + this.parents.push(this._exploreDir(entry.fullPath, depth + 1)); + } + + if (this._wantsDir) { + this.push(entry); + batch--; + } + } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) { + if (this._wantsFile) { + this.push(entry); + batch--; + } + } + } + } else { + const parent = this.parents.pop(); + if (!parent) { + this.push(null); + break; + } + this.parent = await parent; + if (this.destroyed) return; + } + } + } catch (error) { + this.destroy(error); + } finally { + this.reading = false; + } + } + + async _exploreDir(path, depth) { + let files; + try { + files = await readdir(path, this._rdOptions); + } catch (error) { + this._onError(error); + } + return { files, depth, path }; + } + + async _formatEntry(dirent, path) { + let entry; + try { + const basename = this._isDirent ? dirent.name : dirent; + const fullPath = sysPath.resolve(sysPath.join(path, basename)); + entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename }; + entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath); + } catch (err) { + this._onError(err); + } + return entry; + } + + _onError(err) { + if (isNormalFlowError(err) && !this.destroyed) { + this.emit('warn', err); + } else { + this.destroy(err); + } + } + + async _getEntryType(entry) { + // entry may be undefined, because a warning or an error were emitted + // and the statsProp is undefined + const stats = entry && entry[this._statsProp]; + if (!stats) { + return; + } + if (stats.isFile()) { + return 'file'; + } + if (stats.isDirectory()) { + return 'directory'; + } + if (stats && stats.isSymbolicLink()) { + const full = entry.fullPath; + try { + const entryRealPath = await realpath(full); + const entryRealPathStats = await lstat(entryRealPath); + if (entryRealPathStats.isFile()) { + return 'file'; + } + if (entryRealPathStats.isDirectory()) { + const len = entryRealPath.length; + if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) { + const recursiveError = new Error( + `Circular symlink detected: "${full}" points to "${entryRealPath}"` + ); + recursiveError.code = RECURSIVE_ERROR_CODE; + return this._onError(recursiveError); + } + return 'directory'; + } + } catch (error) { + this._onError(error); + } + } + } + + _includeAsFile(entry) { + const stats = entry && entry[this._statsProp]; + + return stats && this._wantsEverything && !stats.isDirectory(); + } +} + +/** + * @typedef {Object} ReaddirpArguments + * @property {Function=} fileFilter + * @property {Function=} directoryFilter + * @property {String=} type + * @property {Number=} depth + * @property {String=} root + * @property {Boolean=} lstat + * @property {Boolean=} bigint + */ + +/** + * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. + * @param {String} root Root directory + * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth + */ +const readdirp = (root, options = {}) => { + let type = options.entryType || options.type; + if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility + if (type) options.type = type; + if (!root) { + throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)'); + } else if (typeof root !== 'string') { + throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)'); + } else if (type && !ALL_TYPES.includes(type)) { + throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`); + } + + options.root = root; + return new ReaddirpStream(options); +}; + +const readdirpPromise = (root, options = {}) => { + return new Promise((resolve, reject) => { + const files = []; + readdirp(root, options) + .on('data', entry => files.push(entry)) + .on('end', () => resolve(files)) + .on('error', error => reject(error)); + }); +}; + +readdirp.promise = readdirpPromise; +readdirp.ReaddirpStream = ReaddirpStream; +readdirp.default = readdirp; + +module.exports = readdirp; diff --git a/build/node_modules/readdirp/package.json b/build/node_modules/readdirp/package.json new file mode 100644 index 00000000..89fa994a --- /dev/null +++ b/build/node_modules/readdirp/package.json @@ -0,0 +1,158 @@ +{ + "_from": "readdirp@~3.6.0", + "_id": "readdirp@3.6.0", + "_inBundle": false, + "_integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "_location": "/readdirp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "readdirp@~3.6.0", + "name": "readdirp", + "escapedName": "readdirp", + "rawSpec": "~3.6.0", + "saveSpec": null, + "fetchSpec": "~3.6.0" + }, + "_requiredBy": [ + "/chokidar" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readdirp/-/readdirp-3.6.0.tgz", + "_shasum": "74a370bd857116e245b29cc97340cd431a02a6c7", + "_spec": "readdirp@~3.6.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/chokidar", + "author": { + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": "thlorenz.com" + }, + "bugs": { + "url": "https://github.com/paulmillr/readdirp/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Thorsten Lorenz", + "email": "thlorenz@gmx.de", + "url": "thlorenz.com" + }, + { + "name": "Paul Miller", + "url": "https://paulmillr.com" + } + ], + "dependencies": { + "picomatch": "^2.2.1" + }, + "deprecated": false, + "description": "Recursive version of fs.readdir with streaming API.", + "devDependencies": { + "@types/node": "^14", + "chai": "^4.2", + "chai-subset": "^1.6", + "dtslint": "^3.3.0", + "eslint": "^7.0.0", + "mocha": "^7.1.1", + "nyc": "^15.0.0", + "rimraf": "^3.0.0", + "typescript": "^4.0.3" + }, + "engines": { + "node": ">=8.10.0" + }, + "eslintConfig": { + "root": true, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 9, + "sourceType": "script" + }, + "env": { + "node": true, + "es6": true + }, + "rules": { + "array-callback-return": "error", + "no-empty": [ + "error", + { + "allowEmptyCatch": true + } + ], + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-lonely-if": "error", + "no-var": "error", + "object-shorthand": "error", + "prefer-arrow-callback": [ + "error", + { + "allowNamedFunctions": true + } + ], + "prefer-const": [ + "error", + { + "ignoreReadBeforeAssign": true + } + ], + "prefer-destructuring": [ + "error", + { + "object": true, + "array": false + } + ], + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "semi": "error", + "strict": "error", + "quotes": [ + "error", + "single" + ] + } + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/paulmillr/readdirp", + "keywords": [ + "recursive", + "fs", + "stream", + "streams", + "readdir", + "filesystem", + "find", + "filter" + ], + "license": "MIT", + "main": "index.js", + "name": "readdirp", + "nyc": { + "reporter": [ + "html", + "text" + ] + }, + "repository": { + "type": "git", + "url": "git://github.com/paulmillr/readdirp.git" + }, + "scripts": { + "dtslint": "dtslint", + "lint": "eslint --report-unused-disable-directives --ignore-path .gitignore .", + "mocha": "mocha --exit", + "nyc": "nyc", + "test": "npm run lint && nyc npm run mocha" + }, + "version": "3.6.0" +} diff --git a/build/node_modules/require-directory/.jshintrc b/build/node_modules/require-directory/.jshintrc new file mode 100644 index 00000000..e14e4dcb --- /dev/null +++ b/build/node_modules/require-directory/.jshintrc @@ -0,0 +1,67 @@ +{ + "maxerr" : 50, + "bitwise" : true, + "camelcase" : true, + "curly" : true, + "eqeqeq" : true, + "forin" : true, + "immed" : true, + "indent" : 2, + "latedef" : true, + "newcap" : true, + "noarg" : true, + "noempty" : true, + "nonew" : true, + "plusplus" : true, + "quotmark" : true, + "undef" : true, + "unused" : true, + "strict" : true, + "trailing" : true, + "maxparams" : false, + "maxdepth" : false, + "maxstatements" : false, + "maxcomplexity" : false, + "maxlen" : false, + "asi" : false, + "boss" : false, + "debug" : false, + "eqnull" : true, + "es5" : false, + "esnext" : false, + "moz" : false, + "evil" : false, + "expr" : true, + "funcscope" : true, + "globalstrict" : true, + "iterator" : true, + "lastsemic" : false, + "laxbreak" : false, + "laxcomma" : false, + "loopfunc" : false, + "multistr" : false, + "proto" : false, + "scripturl" : false, + "smarttabs" : false, + "shadow" : false, + "sub" : false, + "supernew" : false, + "validthis" : false, + "browser" : true, + "couch" : false, + "devel" : true, + "dojo" : false, + "jquery" : false, + "mootools" : false, + "node" : true, + "nonstandard" : false, + "prototypejs" : false, + "rhino" : false, + "worker" : false, + "wsh" : false, + "yui" : false, + "nomen" : true, + "onevar" : true, + "passfail" : false, + "white" : true +} diff --git a/build/node_modules/require-directory/.npmignore b/build/node_modules/require-directory/.npmignore new file mode 100644 index 00000000..47cf365a --- /dev/null +++ b/build/node_modules/require-directory/.npmignore @@ -0,0 +1 @@ +test/** diff --git a/build/node_modules/formatio/.travis.yml b/build/node_modules/require-directory/.travis.yml similarity index 100% rename from build/node_modules/formatio/.travis.yml rename to build/node_modules/require-directory/.travis.yml diff --git a/build/node_modules/require-directory/LICENSE b/build/node_modules/require-directory/LICENSE new file mode 100644 index 00000000..a70f253a --- /dev/null +++ b/build/node_modules/require-directory/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011 Troy Goode + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/require-directory/README.markdown b/build/node_modules/require-directory/README.markdown new file mode 100644 index 00000000..926a063e --- /dev/null +++ b/build/node_modules/require-directory/README.markdown @@ -0,0 +1,184 @@ +# require-directory + +Recursively iterates over specified directory, `require()`'ing each file, and returning a nested hash structure containing those modules. + +**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)** + +[![NPM](https://nodei.co/npm/require-directory.png?downloads=true&stars=true)](https://nodei.co/npm/require-directory/) + +[![build status](https://secure.travis-ci.org/troygoode/node-require-directory.png)](http://travis-ci.org/troygoode/node-require-directory) + +## How To Use + +### Installation (via [npm](https://npmjs.org/package/require-directory)) + +```bash +$ npm install require-directory +``` + +### Usage + +A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so: + +* app.js +* routes/ + * index.js + * home.js + * auth/ + * login.js + * logout.js + * register.js + +`routes/index.js` uses `require-directory` to build the hash (rather than doing so manually) like so: + +```javascript +var requireDirectory = require('require-directory'); +module.exports = requireDirectory(module); +``` + +`app.js` references `routes/index.js` like any other module, but it now has a hash/tree of the exports from the `./routes/` directory: + +```javascript +var routes = require('./routes'); + +// snip + +app.get('/', routes.home); +app.get('/register', routes.auth.register); +app.get('/login', routes.auth.login); +app.get('/logout', routes.auth.logout); +``` + +The `routes` variable above is the equivalent of this: + +```javascript +var routes = { + home: require('routes/home.js'), + auth: { + login: require('routes/auth/login.js'), + logout: require('routes/auth/logout.js'), + register: require('routes/auth/register.js') + } +}; +``` + +*Note that `routes.index` will be `undefined` as you would hope.* + +### Specifying Another Directory + +You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (`requireDirectory(module)`) is the equivelant of `requireDirectory(module, __dirname)`: + +```javascript +var requireDirectory = require('require-directory'); +module.exports = requireDirectory(module, './some/subdirectory'); +``` + +For example, in the [example in the Usage section](#usage) we could have avoided creating `routes/index.js` and instead changed the first lines of `app.js` to: + +```javascript +var requireDirectory = require('require-directory'); +var routes = requireDirectory(module, './routes'); +``` + +## Options + +You can pass an options hash to `require-directory` as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options: + +### Whitelisting + +Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded. + +```javascript +var requireDirectory = require('require-directory'), + whitelist = /onlyinclude.js$/, + hash = requireDirectory(module, {include: whitelist}); +``` + +```javascript +var requireDirectory = require('require-directory'), + check = function(path){ + if(/onlyinclude.js$/.test(path)){ + return true; // don't include + }else{ + return false; // go ahead and include + } + }, + hash = requireDirectory(module, {include: check}); +``` + +### Blacklisting + +Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded. + +```javascript +var requireDirectory = require('require-directory'), + blacklist = /dontinclude\.js$/, + hash = requireDirectory(module, {exclude: blacklist}); +``` + +```javascript +var requireDirectory = require('require-directory'), + check = function(path){ + if(/dontinclude\.js$/.test(path)){ + return false; // don't include + }else{ + return true; // go ahead and include + } + }, + hash = requireDirectory(module, {exclude: check}); +``` + +### Visiting Objects As They're Loaded + +`require-directory` takes a function as the `visit` option that will be called for each module that is added to module.exports. + +```javascript +var requireDirectory = require('require-directory'), + visitor = function(obj) { + console.log(obj); // will be called for every module that is loaded + }, + hash = requireDirectory(module, {visit: visitor}); +``` + +The visitor can also transform the objects by returning a value: + +```javascript +var requireDirectory = require('require-directory'), + visitor = function(obj) { + return obj(new Date()); + }, + hash = requireDirectory(module, {visit: visitor}); +``` + +### Renaming Keys + +```javascript +var requireDirectory = require('require-directory'), + renamer = function(name) { + return name.toUpperCase(); + }, + hash = requireDirectory(module, {rename: renamer}); +``` + +### No Recursion + +```javascript +var requireDirectory = require('require-directory'), + hash = requireDirectory(module, {recurse: false}); +``` + +## Run Unit Tests + +```bash +$ npm run lint +$ npm test +``` + +## License + +[MIT License](http://www.opensource.org/licenses/mit-license.php) + +## Author + +[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com)) + diff --git a/build/node_modules/require-directory/index.js b/build/node_modules/require-directory/index.js new file mode 100644 index 00000000..cd37da7e --- /dev/null +++ b/build/node_modules/require-directory/index.js @@ -0,0 +1,86 @@ +'use strict'; + +var fs = require('fs'), + join = require('path').join, + resolve = require('path').resolve, + dirname = require('path').dirname, + defaultOptions = { + extensions: ['js', 'json', 'coffee'], + recurse: true, + rename: function (name) { + return name; + }, + visit: function (obj) { + return obj; + } + }; + +function checkFileInclusion(path, filename, options) { + return ( + // verify file has valid extension + (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) && + + // if options.include is a RegExp, evaluate it and make sure the path passes + !(options.include && options.include instanceof RegExp && !options.include.test(path)) && + + // if options.include is a function, evaluate it and make sure the path passes + !(options.include && typeof options.include === 'function' && !options.include(path, filename)) && + + // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass + !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) && + + // if options.exclude is a function, evaluate it and make sure the path doesn't pass + !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename)) + ); +} + +function requireDirectory(m, path, options) { + var retval = {}; + + // path is optional + if (path && !options && typeof path !== 'string') { + options = path; + path = null; + } + + // default options + options = options || {}; + for (var prop in defaultOptions) { + if (typeof options[prop] === 'undefined') { + options[prop] = defaultOptions[prop]; + } + } + + // if no path was passed in, assume the equivelant of __dirname from caller + // otherwise, resolve path relative to the equivalent of __dirname + path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path); + + // get the path of each file in specified directory, append to current tree node, recurse + fs.readdirSync(path).forEach(function (filename) { + var joined = join(path, filename), + files, + key, + obj; + + if (fs.statSync(joined).isDirectory() && options.recurse) { + // this node is a directory; recurse + files = requireDirectory(m, joined, options); + // exclude empty directories + if (Object.keys(files).length) { + retval[options.rename(filename, joined, filename)] = files; + } + } else { + if (joined !== m.filename && checkFileInclusion(joined, filename, options)) { + // hash node key shouldn't include file extension + key = filename.substring(0, filename.lastIndexOf('.')); + obj = m.require(joined); + retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj; + } + } + }); + + return retval; +} + +module.exports = requireDirectory; +module.exports.defaults = defaultOptions; diff --git a/build/node_modules/require-directory/package.json b/build/node_modules/require-directory/package.json new file mode 100644 index 00000000..18bb5173 --- /dev/null +++ b/build/node_modules/require-directory/package.json @@ -0,0 +1,69 @@ +{ + "_from": "require-directory@^2.1.1", + "_id": "require-directory@2.1.1", + "_inBundle": false, + "_integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "_location": "/require-directory", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "require-directory@^2.1.1", + "name": "require-directory", + "escapedName": "require-directory", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/require-directory/-/require-directory-2.1.1.tgz", + "_shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42", + "_spec": "require-directory@^2.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs", + "author": { + "name": "Troy Goode", + "email": "troygoode@gmail.com", + "url": "http://github.com/troygoode/" + }, + "bugs": { + "url": "http://github.com/troygoode/node-require-directory/issues/" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Troy Goode", + "email": "troygoode@gmail.com", + "url": "http://github.com/troygoode/" + } + ], + "deprecated": false, + "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.", + "devDependencies": { + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "homepage": "https://github.com/troygoode/node-require-directory/", + "keywords": [ + "require", + "directory", + "library", + "recursive" + ], + "license": "MIT", + "main": "index.js", + "name": "require-directory", + "repository": { + "type": "git", + "url": "git://github.com/troygoode/node-require-directory.git" + }, + "scripts": { + "lint": "jshint index.js test/test.js", + "test": "mocha" + }, + "version": "2.1.1" +} diff --git a/build/node_modules/resolve/.eslintignore b/build/node_modules/resolve/.eslintignore deleted file mode 100644 index 3c3629e6..00000000 --- a/build/node_modules/resolve/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/build/node_modules/resolve/.eslintrc b/build/node_modules/resolve/.eslintrc index a22863c8..ce1be6ef 100644 --- a/build/node_modules/resolve/.eslintrc +++ b/build/node_modules/resolve/.eslintrc @@ -1,9 +1,9 @@ { - "extends": "@ljharb", "root": true, + + "extends": "@ljharb", + "rules": { - "array-bracket-newline": 0, - "array-element-newline": 0, "indent": [2, 4], "strict": 0, "complexity": 0, @@ -12,28 +12,54 @@ "dot-notation": [2, { "allowKeywords": true }], "func-name-matching": 0, "func-style": 0, - "global-require": 0, + "global-require": 1, "id-length": [2, { "min": 1, "max": 30 }], + "max-lines": [2, 350], "max-lines-per-function": 0, "max-nested-callbacks": 0, "max-params": 0, "max-statements-per-line": [2, { "max": 2 }], "max-statements": 0, "no-magic-numbers": 0, - "no-console": 0, "no-shadow": 0, - "no-unused-vars": [2, { "vars": "all", "args": "none" }], "no-use-before-define": 0, - "object-curly-newline": 0, - "operator-linebreak": [2, "before"], "sort-keys": 0, }, "overrides": [ + { + "files": "bin/**", + "rules": { + "no-process-exit": "off", + }, + }, + { + "files": "example/**", + "rules": { + "no-console": 0, + }, + }, { "files": "test/resolver/nested_symlinks/mylib/*.js", "rules": { "no-throw-literal": 0, }, }, + { + "files": "test/**", + "parserOptions": { + "ecmaVersion": 5, + "allowReserved": false, + }, + "rules": { + "dot-notation": [2, { "allowPattern": "throws" }], + "max-lines": 0, + "max-lines-per-function": 0, + "no-unused-vars": [2, { "vars": "all", "args": "none" }], + }, + }, + ], + + "ignorePatterns": [ + "./test/resolver/malformed_package_json/package.json", ], } diff --git a/build/node_modules/resolve/.github/FUNDING.yml b/build/node_modules/resolve/.github/FUNDING.yml new file mode 100644 index 00000000..d9c05955 --- /dev/null +++ b/build/node_modules/resolve/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/resolve +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/resolve/appveyor.yml b/build/node_modules/resolve/appveyor.yml index 747fbdbb..f74b7b8a 100644 --- a/build/node_modules/resolve/appveyor.yml +++ b/build/node_modules/resolve/appveyor.yml @@ -4,7 +4,9 @@ build: off environment: matrix: - #- nodejs_version: "15" + #- nodejs_version: "17" + - nodejs_version: "16" + - nodejs_version: "15" - nodejs_version: "14" - nodejs_version: "13" - nodejs_version: "12" @@ -26,7 +28,6 @@ environment: matrix: # fast_finish: true allow_failures: - - nodejs_version: "5" # due to windows npm bug, registry-side - nodejs_version: "0.8" # platform: x86 # x64 has started failing on the registry side, around early November 2020 - nodejs_version: "0.6" @@ -60,6 +61,7 @@ install: - IF %nodejs_version% EQU 13 npm -g install npm@7 - IF %nodejs_version% EQU 14 npm -g install npm@7 - IF %nodejs_version% EQU 15 npm -g install npm@7 + - IF %nodejs_version% EQU 16 npm -g install npm@7 - set PATH=%APPDATA%\npm;%PATH% #- IF %nodejs_version% NEQ 0.6 AND %nodejs_version% NEQ 0.8 npm -g install npm # install modules diff --git a/build/node_modules/resolve/async.js b/build/node_modules/resolve/async.js new file mode 100644 index 00000000..f38c5813 --- /dev/null +++ b/build/node_modules/resolve/async.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/async'); diff --git a/build/node_modules/resolve/bin/resolve b/build/node_modules/resolve/bin/resolve new file mode 100755 index 00000000..5ee329af --- /dev/null +++ b/build/node_modules/resolve/bin/resolve @@ -0,0 +1,50 @@ +#!/usr/bin/env node + +'use strict'; + +var path = require('path'); +var fs = require('fs'); + +if ( + String(process.env.npm_lifecycle_script).slice(0, 8) !== 'resolve ' + && ( + !process.argv + || process.argv.length < 2 + || (process.argv[1] !== __filename && fs.statSync(process.argv[1]).ino !== fs.statSync(__filename).ino) + || (process.env._ && path.resolve(process.env._) !== __filename) + ) +) { + console.error('Error: `resolve` must be run directly as an executable'); + process.exit(1); +} + +var supportsPreserveSymlinkFlag = require('supports-preserve-symlinks-flag'); + +var preserveSymlinks = false; +for (var i = 2; i < process.argv.length; i += 1) { + if (process.argv[i].slice(0, 2) === '--') { + if (supportsPreserveSymlinkFlag && process.argv[i] === '--preserve-symlinks') { + preserveSymlinks = true; + } else if (process.argv[i].length > 2) { + console.error('Unknown argument ' + process.argv[i].replace(/[=].*$/, '')); + process.exit(2); + } + process.argv.splice(i, 1); + i -= 1; + if (process.argv[i] === '--') { break; } // eslint-disable-line no-restricted-syntax + } +} + +if (process.argv.length < 3) { + console.error('Error: `resolve` expects a specifier'); + process.exit(2); +} + +var resolve = require('../'); + +var result = resolve.sync(process.argv[2], { + basedir: process.cwd(), + preserveSymlinks: preserveSymlinks +}); + +console.log(result); diff --git a/build/node_modules/resolve/lib/async.js b/build/node_modules/resolve/lib/async.js index 02e80ac8..2b0f0f3d 100644 --- a/build/node_modules/resolve/lib/async.js +++ b/build/node_modules/resolve/lib/async.js @@ -1,4 +1,5 @@ var fs = require('fs'); +var getHomedir = require('./homedir'); var path = require('path'); var caller = require('./caller'); var nodeModulesPaths = require('./node-modules-paths'); @@ -7,6 +8,14 @@ var isCore = require('is-core-module'); var realpathFS = fs.realpath && typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath; +var homedir = getHomedir(); +var defaultPaths = function () { + return [ + path.join(homedir, '.node_modules'), + path.join(homedir, '.node_libraries') + ]; +}; + var defaultIsFile = function isFile(file, cb) { fs.stat(file, function (err, stat) { if (!err) { @@ -98,7 +107,7 @@ module.exports = function resolve(x, options, callback) { var basedir = opts.basedir || path.dirname(caller()); var parent = opts.filename || basedir; - opts.paths = opts.paths || []; + opts.paths = opts.paths || defaultPaths(); // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory var absoluteStart = path.resolve(basedir); diff --git a/build/node_modules/resolve/lib/core.js b/build/node_modules/resolve/lib/core.js index c417d23c..ecc5b2e9 100644 --- a/build/node_modules/resolve/lib/core.js +++ b/build/node_modules/resolve/lib/core.js @@ -15,9 +15,8 @@ function specifierIncluded(specifier) { return cur < ver; } else if (op === '>=') { return cur >= ver; - } else { - return false; } + return false; } return op === '>='; } diff --git a/build/node_modules/resolve/lib/core.json b/build/node_modules/resolve/lib/core.json index 0238b61a..d2752948 100644 --- a/build/node_modules/resolve/lib/core.json +++ b/build/node_modules/resolve/lib/core.json @@ -1,83 +1,152 @@ { "assert": true, + "node:assert": [">= 14.18 && < 15", ">= 16"], "assert/strict": ">= 15", + "node:assert/strict": ">= 16", "async_hooks": ">= 8", - "buffer_ieee754": "< 0.9.7", + "node:async_hooks": [">= 14.18 && < 15", ">= 16"], + "buffer_ieee754": ">= 0.5 && < 0.9.7", "buffer": true, + "node:buffer": [">= 14.18 && < 15", ">= 16"], "child_process": true, - "cluster": true, + "node:child_process": [">= 14.18 && < 15", ">= 16"], + "cluster": ">= 0.5", + "node:cluster": [">= 14.18 && < 15", ">= 16"], "console": true, + "node:console": [">= 14.18 && < 15", ">= 16"], "constants": true, + "node:constants": [">= 14.18 && < 15", ">= 16"], "crypto": true, + "node:crypto": [">= 14.18 && < 15", ">= 16"], "_debug_agent": ">= 1 && < 8", "_debugger": "< 8", "dgram": true, - "diagnostics_channel": ">= 15.1", + "node:dgram": [">= 14.18 && < 15", ">= 16"], + "diagnostics_channel": [">= 14.17 && < 15", ">= 15.1"], + "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"], "dns": true, + "node:dns": [">= 14.18 && < 15", ">= 16"], "dns/promises": ">= 15", + "node:dns/promises": ">= 16", "domain": ">= 0.7.12", + "node:domain": [">= 14.18 && < 15", ">= 16"], "events": true, + "node:events": [">= 14.18 && < 15", ">= 16"], "freelist": "< 6", "fs": true, + "node:fs": [">= 14.18 && < 15", ">= 16"], "fs/promises": [">= 10 && < 10.1", ">= 14"], + "node:fs/promises": [">= 14.18 && < 15", ">= 16"], "_http_agent": ">= 0.11.1", + "node:_http_agent": [">= 14.18 && < 15", ">= 16"], "_http_client": ">= 0.11.1", + "node:_http_client": [">= 14.18 && < 15", ">= 16"], "_http_common": ">= 0.11.1", + "node:_http_common": [">= 14.18 && < 15", ">= 16"], "_http_incoming": ">= 0.11.1", + "node:_http_incoming": [">= 14.18 && < 15", ">= 16"], "_http_outgoing": ">= 0.11.1", + "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"], "_http_server": ">= 0.11.1", + "node:_http_server": [">= 14.18 && < 15", ">= 16"], "http": true, + "node:http": [">= 14.18 && < 15", ">= 16"], "http2": ">= 8.8", + "node:http2": [">= 14.18 && < 15", ">= 16"], "https": true, - "inspector": ">= 8.0.0", + "node:https": [">= 14.18 && < 15", ">= 16"], + "inspector": ">= 8", + "node:inspector": [">= 14.18 && < 15", ">= 16"], "_linklist": "< 8", "module": true, + "node:module": [">= 14.18 && < 15", ">= 16"], "net": true, - "node-inspect/lib/_inspect": ">= 7.6.0 && < 12", - "node-inspect/lib/internal/inspect_client": ">= 7.6.0 && < 12", - "node-inspect/lib/internal/inspect_repl": ">= 7.6.0 && < 12", + "node:net": [">= 14.18 && < 15", ">= 16"], + "node-inspect/lib/_inspect": ">= 7.6 && < 12", + "node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12", + "node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12", "os": true, + "node:os": [">= 14.18 && < 15", ">= 16"], "path": true, + "node:path": [">= 14.18 && < 15", ">= 16"], "path/posix": ">= 15.3", + "node:path/posix": ">= 16", "path/win32": ">= 15.3", + "node:path/win32": ">= 16", "perf_hooks": ">= 8.5", + "node:perf_hooks": [">= 14.18 && < 15", ">= 16"], "process": ">= 1", - "punycode": true, + "node:process": [">= 14.18 && < 15", ">= 16"], + "punycode": ">= 0.5", + "node:punycode": [">= 14.18 && < 15", ">= 16"], "querystring": true, + "node:querystring": [">= 14.18 && < 15", ">= 16"], "readline": true, + "node:readline": [">= 14.18 && < 15", ">= 16"], + "readline/promises": ">= 17", + "node:readline/promises": ">= 17", "repl": true, + "node:repl": [">= 14.18 && < 15", ">= 16"], "smalloc": ">= 0.11.5 && < 3", "_stream_duplex": ">= 0.9.4", + "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"], "_stream_transform": ">= 0.9.4", + "node:_stream_transform": [">= 14.18 && < 15", ">= 16"], "_stream_wrap": ">= 1.4.1", + "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"], "_stream_passthrough": ">= 0.9.4", + "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"], "_stream_readable": ">= 0.9.4", + "node:_stream_readable": [">= 14.18 && < 15", ">= 16"], "_stream_writable": ">= 0.9.4", + "node:_stream_writable": [">= 14.18 && < 15", ">= 16"], "stream": true, + "node:stream": [">= 14.18 && < 15", ">= 16"], + "stream/consumers": ">= 16.7", + "node:stream/consumers": ">= 16.7", "stream/promises": ">= 15", + "node:stream/promises": ">= 16", + "stream/web": ">= 16.5", + "node:stream/web": ">= 16.5", "string_decoder": true, - "sys": [">= 0.6 && < 0.7", ">= 0.8"], + "node:string_decoder": [">= 14.18 && < 15", ">= 16"], + "sys": [">= 0.4 && < 0.7", ">= 0.8"], + "node:sys": [">= 14.18 && < 15", ">= 16"], "timers": true, + "node:timers": [">= 14.18 && < 15", ">= 16"], "timers/promises": ">= 15", + "node:timers/promises": ">= 16", "_tls_common": ">= 0.11.13", + "node:_tls_common": [">= 14.18 && < 15", ">= 16"], "_tls_legacy": ">= 0.11.3 && < 10", "_tls_wrap": ">= 0.11.3", + "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"], "tls": true, + "node:tls": [">= 14.18 && < 15", ">= 16"], "trace_events": ">= 10", + "node:trace_events": [">= 14.18 && < 15", ">= 16"], "tty": true, + "node:tty": [">= 14.18 && < 15", ">= 16"], "url": true, + "node:url": [">= 14.18 && < 15", ">= 16"], "util": true, + "node:util": [">= 14.18 && < 15", ">= 16"], "util/types": ">= 15.3", + "node:util/types": ">= 16", "v8/tools/arguments": ">= 10 && < 12", - "v8/tools/codemap": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], - "v8/tools/consarray": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], - "v8/tools/csvparser": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], - "v8/tools/logreader": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], - "v8/tools/profile_view": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], - "v8/tools/splaytree": [">= 4.4.0 && < 5", ">= 5.2.0 && < 12"], + "v8/tools/codemap": [">= 4.4 && < 5", ">= 5.2 && < 12"], + "v8/tools/consarray": [">= 4.4 && < 5", ">= 5.2 && < 12"], + "v8/tools/csvparser": [">= 4.4 && < 5", ">= 5.2 && < 12"], + "v8/tools/logreader": [">= 4.4 && < 5", ">= 5.2 && < 12"], + "v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"], + "v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"], "v8": ">= 1", + "node:v8": [">= 14.18 && < 15", ">= 16"], "vm": true, + "node:vm": [">= 14.18 && < 15", ">= 16"], "wasi": ">= 13.4 && < 13.5", "worker_threads": ">= 11.7", - "zlib": true + "node:worker_threads": [">= 14.18 && < 15", ">= 16"], + "zlib": ">= 0.5", + "node:zlib": [">= 14.18 && < 15", ">= 16"] } diff --git a/build/node_modules/resolve/lib/homedir.js b/build/node_modules/resolve/lib/homedir.js new file mode 100644 index 00000000..5ffdf73b --- /dev/null +++ b/build/node_modules/resolve/lib/homedir.js @@ -0,0 +1,24 @@ +'use strict'; + +var os = require('os'); + +// adapted from https://github.com/sindresorhus/os-homedir/blob/11e089f4754db38bb535e5a8416320c4446e8cfd/index.js + +module.exports = os.homedir || function homedir() { + var home = process.env.HOME; + var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME; + + if (process.platform === 'win32') { + return process.env.USERPROFILE || process.env.HOMEDRIVE + process.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)); // eslint-disable-line no-extra-parens + } + + return home || null; +}; diff --git a/build/node_modules/resolve/lib/node-modules-paths.js b/build/node_modules/resolve/lib/node-modules-paths.js index 2b43813a..1cff0107 100644 --- a/build/node_modules/resolve/lib/node-modules-paths.js +++ b/build/node_modules/resolve/lib/node-modules-paths.js @@ -1,5 +1,5 @@ var path = require('path'); -var parse = path.parse || require('path-parse'); +var parse = path.parse || require('path-parse'); // eslint-disable-line global-require var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) { var prefix = '/'; diff --git a/build/node_modules/resolve/lib/sync.js b/build/node_modules/resolve/lib/sync.js index ef9bd803..32469899 100644 --- a/build/node_modules/resolve/lib/sync.js +++ b/build/node_modules/resolve/lib/sync.js @@ -1,30 +1,39 @@ var isCore = require('is-core-module'); var fs = require('fs'); var path = require('path'); +var getHomedir = require('./homedir'); var caller = require('./caller'); var nodeModulesPaths = require('./node-modules-paths'); var normalizeOptions = require('./normalize-options'); var realpathFS = fs.realpathSync && typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync; +var homedir = getHomedir(); +var defaultPaths = function () { + return [ + path.join(homedir, '.node_modules'), + path.join(homedir, '.node_libraries') + ]; +}; + var defaultIsFile = function isFile(file) { try { - var stat = fs.statSync(file); + var stat = fs.statSync(file, { throwIfNoEntry: false }); } catch (e) { if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false; throw e; } - return stat.isFile() || stat.isFIFO(); + return !!stat && (stat.isFile() || stat.isFIFO()); }; var defaultIsDir = function isDirectory(dir) { try { - var stat = fs.statSync(dir); + var stat = fs.statSync(dir, { throwIfNoEntry: false }); } catch (e) { if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false; throw e; } - return stat.isDirectory(); + return !!stat && stat.isDirectory(); }; var defaultRealpathSync = function realpathSync(x) { @@ -82,7 +91,7 @@ module.exports = function resolveSync(x, options) { var basedir = opts.basedir || path.dirname(caller()); var parent = opts.filename || basedir; - opts.paths = opts.paths || []; + opts.paths = opts.paths || defaultPaths(); // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts); diff --git a/build/node_modules/resolve/package.json b/build/node_modules/resolve/package.json index fd7c202f..d0802f54 100644 --- a/build/node_modules/resolve/package.json +++ b/build/node_modules/resolve/package.json @@ -1,53 +1,63 @@ { - "_from": "resolve@^1.10.0", - "_id": "resolve@1.20.0", + "_from": "resolve@^1.17.0", + "_id": "resolve@1.22.0", "_inBundle": false, - "_integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "_integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "_location": "/resolve", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "resolve@^1.10.0", + "raw": "resolve@^1.17.0", "name": "resolve", "escapedName": "resolve", - "rawSpec": "^1.10.0", + "rawSpec": "^1.17.0", "saveSpec": null, - "fetchSpec": "^1.10.0" + "fetchSpec": "^1.17.0" }, "_requiredBy": [ - "/rollup-plugin-commonjs", - "/rollup-plugin-node-resolve" + "/@rollup/plugin-commonjs", + "/@rollup/plugin-node-resolve" ], - "_resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "_shasum": "629a013fb3f70755d6f0b7935cc1c2c5378b1975", - "_spec": "resolve@^1.10.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-commonjs", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/resolve/-/resolve-1.22.0.tgz", + "_shasum": "5e0b8c67c15df57a89bdbabe603a002f21731198", + "_spec": "resolve@^1.17.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@rollup/plugin-commonjs", "author": { "name": "James Halliday", "email": "mail@substack.net", "url": "http://substack.net" }, + "bin": { + "resolve": "bin/resolve" + }, "bugs": { "url": "https://github.com/browserify/resolve/issues" }, "bundleDependencies": false, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "deprecated": false, "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously", "devDependencies": { - "@ljharb/eslint-config": "^17.5.1", - "array.prototype.map": "^1.0.3", - "aud": "^1.1.4", + "@ljharb/eslint-config": "^20.2.0", + "array.prototype.map": "^1.0.4", + "aud": "^2.0.0", + "copy-dir": "^1.3.0", "eclint": "^2.8.1", - "eslint": "^7.19.0", + "eslint": "^8.7.0", + "in-publish": "^2.0.1", + "mkdirp": "^0.5.5", + "mv": "^2.1.1", "object-keys": "^1.1.1", - "safe-publish-latest": "^1.1.4", + "rimraf": "^2.7.1", + "safe-publish-latest": "^2.0.0", "tap": "0.4.13", - "tape": "^5.1.1" + "tape": "^5.4.1", + "tmp": "^0.0.31" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -67,15 +77,16 @@ "url": "git://github.com/browserify/resolve.git" }, "scripts": { - "lint": "eslint --ext=js,mjs .", + "lint": "eslint --ext=js,mjs --no-eslintrc -c .eslintrc . 'bin/**'", "posttest": "npm run test:multirepo && aud --production", - "prelint": "eclint check '**/*'", - "prepublish": "safe-publish-latest && cp node_modules/is-core-module/core.json ./lib/ ||:", + "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest && cp node_modules/is-core-module/core.json ./lib/ ||:", "pretest": "npm run lint", "pretests-only": "cd ./test/resolver/nested_symlinks && node mylib/sync && node mylib/async", "test": "npm run --silent tests-only", "test:multirepo": "cd ./test/resolver/multirepo && npm install && npm test", "tests-only": "tape test/*.js" }, - "version": "1.20.0" + "version": "1.22.0" } diff --git a/build/node_modules/resolve/readme.markdown b/build/node_modules/resolve/readme.markdown index 7c9f2dcd..ad34d60d 100644 --- a/build/node_modules/resolve/readme.markdown +++ b/build/node_modules/resolve/readme.markdown @@ -1,18 +1,22 @@ -# resolve +# resolve [![Version Badge][2]][1] -implements the [node `require.resolve()` -algorithm](https://nodejs.org/api/modules.html#modules_all_together) -such that you can `require.resolve()` on behalf of a file asynchronously and -synchronously +implements the [node `require.resolve()` algorithm](https://nodejs.org/api/modules.html#modules_all_together) such that you can `require.resolve()` on behalf of a file asynchronously and synchronously -[![build status](https://secure.travis-ci.org/browserify/resolve.png)](http://travis-ci.org/browserify/resolve) +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] # example asynchronously resolve: ```js -var resolve = require('resolve'); +var resolve = require('resolve/async'); // or, require('resolve') resolve('tap', { basedir: __dirname }, function (err, res) { if (err) console.error(err); else console.log(res); @@ -27,8 +31,8 @@ $ node example/async.js synchronously resolve: ```js -var resolve = require('resolve'); -var res = resolve.sync('tap', { basedir: __dirname }); +var resolve = require('resolve/sync'); // or, `require('resolve').sync +var res = resolve('tap', { basedir: __dirname }); console.log(res); ``` @@ -41,6 +45,8 @@ $ node example/sync.js ```js var resolve = require('resolve'); +var async = require('resolve/async'); +var sync = require('resolve/sync'); ``` For both the synchronous and asynchronous methods, errors may have any of the following `err.code` values: @@ -67,7 +73,7 @@ options are: * opts.isFile - function to asynchronously test whether a file exists -* opts.isDirectory - function to asynchronously test whether a directory exists +* opts.isDirectory - function to asynchronously test whether a file exists and is a directory * opts.realpath - function to asynchronously resolve a potential symlink to its real path @@ -79,7 +85,7 @@ options are: * `opts.packageFilter(pkg, pkgfile, dir)` - transform the parsed package.json contents before looking at the "main" field * pkg - package data * pkgfile - path to package.json - * dir - directory for package.json + * dir - directory that contains package.json * `opts.pathFilter(pkg, path, relativePath)` - transform a path within a package * pkg - package data @@ -177,7 +183,7 @@ options are: * opts.isFile - function to synchronously test whether a file exists -* opts.isDirectory - function to synchronously test whether a directory exists +* opts.isDirectory - function to synchronously test whether a file exists and is a directory * opts.realpathSync - function to synchronously resolve a potential symlink to its real path @@ -187,7 +193,7 @@ options are: * `opts.packageFilter(pkg, dir)` - transform the parsed package.json contents before looking at the "main" field * pkg - package data - * dir - directory for package.json (Note: the second argument will change to "pkgfile" in v2) + * dir - directory that contains package.json (Note: the second argument will change to "pkgfile" in v2) * `opts.pathFilter(pkg, path, relativePath)` - transform a path within a package * pkg - package data @@ -277,3 +283,19 @@ npm install resolve # license MIT + +[1]: https://npmjs.org/package/resolve +[2]: https://versionbadg.es/browserify/resolve.svg +[5]: https://david-dm.org/browserify/resolve.svg +[6]: https://david-dm.org/browserify/resolve +[7]: https://david-dm.org/browserify/resolve/dev-status.svg +[8]: https://david-dm.org/browserify/resolve#info=devDependencies +[11]: https://nodei.co/npm/resolve.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/resolve.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/resolve.svg +[downloads-url]: https://npm-stat.com/charts.html?package=resolve +[codecov-image]: https://codecov.io/gh/browserify/resolve/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/browserify/resolve/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/browserify/resolve +[actions-url]: https://github.com/browserify/resolve/actions diff --git a/build/node_modules/resolve/sync.js b/build/node_modules/resolve/sync.js new file mode 100644 index 00000000..cd0ee040 --- /dev/null +++ b/build/node_modules/resolve/sync.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/sync'); diff --git a/build/node_modules/resolve/test/.eslintrc b/build/node_modules/resolve/test/.eslintrc deleted file mode 100644 index ddd262df..00000000 --- a/build/node_modules/resolve/test/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "max-lines": 0 - } -} diff --git a/build/node_modules/resolve/test/home_paths.js b/build/node_modules/resolve/test/home_paths.js new file mode 100644 index 00000000..3b8c9b32 --- /dev/null +++ b/build/node_modules/resolve/test/home_paths.js @@ -0,0 +1,127 @@ +'use strict'; + +var fs = require('fs'); +var homedir = require('../lib/homedir'); +var path = require('path'); + +var test = require('tape'); +var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); +var mv = require('mv'); +var copyDir = require('copy-dir'); +var tmp = require('tmp'); + +var HOME = homedir(); + +var hnm = path.join(HOME, '.node_modules'); +var hnl = path.join(HOME, '.node_libraries'); + +var resolve = require('../async'); + +function makeDir(t, dir, cb) { + mkdirp(dir, function (err) { + if (err) { + cb(err); + } else { + t.teardown(function cleanup() { + rimraf.sync(dir); + }); + cb(); + } + }); +} + +function makeTempDir(t, dir, cb) { + if (fs.existsSync(dir)) { + var tmpResult = tmp.dirSync(); + t.teardown(tmpResult.removeCallback); + var backup = path.join(tmpResult.name, path.basename(dir)); + mv(dir, backup, function (err) { + if (err) { + cb(err); + } else { + t.teardown(function () { + mv(backup, dir, cb); + }); + makeDir(t, dir, cb); + } + }); + } else { + makeDir(t, dir, cb); + } +} + +test('homedir module paths', function (t) { + t.plan(7); + + makeTempDir(t, hnm, function (err) { + t.error(err, 'no error with HNM temp dir'); + if (err) { + return t.end(); + } + + var bazHNMDir = path.join(hnm, 'baz'); + var dotMainDir = path.join(hnm, 'dot_main'); + copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir); + copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir); + + var bazPkg = { name: 'baz', main: 'quux.js' }; + var dotMainPkg = { main: 'index' }; + + var bazHNMmain = path.join(bazHNMDir, 'quux.js'); + t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); + var dotMainMain = path.join(dotMainDir, 'index.js'); + t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`'); + + makeTempDir(t, hnl, function (err) { + t.error(err, 'no error with HNL temp dir'); + if (err) { + return t.end(); + } + var bazHNLDir = path.join(hnl, 'baz'); + copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir); + + var dotSlashMainDir = path.join(hnl, 'dot_slash_main'); + var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js'); + var dotSlashMainPkg = { main: 'index' }; + copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir); + + t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); + t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`'); + + t.test('with temp dirs', function (st) { + st.plan(3); + + st.test('just in `$HOME/.node_modules`', function (s2t) { + s2t.plan(3); + + resolve('dot_main', function (err, res, pkg) { + s2t.error(err, 'no error resolving `dot_main`'); + s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`'); + s2t.deepEqual(pkg, dotMainPkg); + }); + }); + + st.test('just in `$HOME/.node_libraries`', function (s2t) { + s2t.plan(3); + + resolve('dot_slash_main', function (err, res, pkg) { + s2t.error(err, 'no error resolving `dot_slash_main`'); + s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`'); + s2t.deepEqual(pkg, dotSlashMainPkg); + }); + }); + + st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) { + s2t.plan(3); + + resolve('baz', function (err, res, pkg) { + s2t.error(err, 'no error resolving `baz`'); + s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both'); + s2t.deepEqual(pkg, bazPkg); + }); + }); + }); + }); + }); +}); diff --git a/build/node_modules/resolve/test/home_paths_sync.js b/build/node_modules/resolve/test/home_paths_sync.js new file mode 100644 index 00000000..5d2c56fd --- /dev/null +++ b/build/node_modules/resolve/test/home_paths_sync.js @@ -0,0 +1,114 @@ +'use strict'; + +var fs = require('fs'); +var homedir = require('../lib/homedir'); +var path = require('path'); + +var test = require('tape'); +var mkdirp = require('mkdirp'); +var rimraf = require('rimraf'); +var mv = require('mv'); +var copyDir = require('copy-dir'); +var tmp = require('tmp'); + +var HOME = homedir(); + +var hnm = path.join(HOME, '.node_modules'); +var hnl = path.join(HOME, '.node_libraries'); + +var resolve = require('../sync'); + +function makeDir(t, dir, cb) { + mkdirp(dir, function (err) { + if (err) { + cb(err); + } else { + t.teardown(function cleanup() { + rimraf.sync(dir); + }); + cb(); + } + }); +} + +function makeTempDir(t, dir, cb) { + if (fs.existsSync(dir)) { + var tmpResult = tmp.dirSync(); + t.teardown(tmpResult.removeCallback); + var backup = path.join(tmpResult.name, path.basename(dir)); + mv(dir, backup, function (err) { + if (err) { + cb(err); + } else { + t.teardown(function () { + mv(backup, dir, cb); + }); + makeDir(t, dir, cb); + } + }); + } else { + makeDir(t, dir, cb); + } +} + +test('homedir module paths', function (t) { + t.plan(7); + + makeTempDir(t, hnm, function (err) { + t.error(err, 'no error with HNM temp dir'); + if (err) { + return t.end(); + } + + var bazHNMDir = path.join(hnm, 'baz'); + var dotMainDir = path.join(hnm, 'dot_main'); + copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir); + copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir); + + var bazHNMmain = path.join(bazHNMDir, 'quux.js'); + t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); + var dotMainMain = path.join(dotMainDir, 'index.js'); + t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`'); + + makeTempDir(t, hnl, function (err) { + t.error(err, 'no error with HNL temp dir'); + if (err) { + return t.end(); + } + var bazHNLDir = path.join(hnl, 'baz'); + copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir); + + var dotSlashMainDir = path.join(hnl, 'dot_slash_main'); + var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js'); + copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir); + + t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); + t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`'); + + t.test('with temp dirs', function (st) { + st.plan(3); + + st.test('just in `$HOME/.node_modules`', function (s2t) { + s2t.plan(1); + + var res = resolve('dot_main'); + s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`'); + }); + + st.test('just in `$HOME/.node_libraries`', function (s2t) { + s2t.plan(1); + + var res = resolve('dot_slash_main'); + s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`'); + }); + + st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) { + s2t.plan(1); + + var res = resolve('baz'); + s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both'); + }); + }); + }); + }); +}); diff --git a/build/node_modules/resolve/test/mock_sync.js b/build/node_modules/resolve/test/mock_sync.js index 0e3a60d4..c5a7e2a9 100644 --- a/build/node_modules/resolve/test/mock_sync.js +++ b/build/node_modules/resolve/test/mock_sync.js @@ -122,9 +122,8 @@ test('symlinked', function (t) { var dir = path.dirname(resolved); var base = path.basename(resolved); return path.join(dir, 'symlinked', base); - } else { - return path.join(resolved, 'symlinked'); } + return path.join(resolved, 'symlinked'); } }; } @@ -183,9 +182,8 @@ test('readPackageSync', function (t) { var readPackageSync = function (readFileSync, file) { if (file.indexOf(path.join('bar', 'package.json')) >= 0) { return { main: './something-else.js' }; - } else { - return JSON.parse(files[path.resolve(file)]); } + return JSON.parse(files[path.resolve(file)]); }; t.test('with readPackage', function (st) { diff --git a/build/node_modules/resolve/test/node_path.js b/build/node_modules/resolve/test/node_path.js index d06aa4ea..e463d6c8 100644 --- a/build/node_modules/resolve/test/node_path.js +++ b/build/node_modules/resolve/test/node_path.js @@ -63,7 +63,7 @@ test('$NODE_PATH', function (t) { basedir: path.join(__dirname, 'node_path/x'), isDirectory: isDir }, function (err, res) { - var root = require('tap/package.json').main; + var root = require('tap/package.json').main; // eslint-disable-line global-require t.error(err); t.equal(res, path.resolve(__dirname, '..', 'node_modules/tap', root), 'tap resolves'); }); diff --git a/build/node_modules/resolve/test/resolver.js b/build/node_modules/resolve/test/resolver.js index aa36ee11..09da6868 100644 --- a/build/node_modules/resolve/test/resolver.js +++ b/build/node_modules/resolve/test/resolver.js @@ -1,6 +1,12 @@ var path = require('path'); var test = require('tape'); var resolve = require('../'); +var async = require('../async'); + +test('`./async` entry point', function (t) { + t.equal(resolve, async, '`./async` entry point is the same as `main`'); + t.end(); +}); test('async foo', function (t) { t.plan(12); @@ -288,7 +294,7 @@ test('without basedir', function (t) { t.plan(1); var dir = path.join(__dirname, 'resolver/without_basedir'); - var tester = require(path.join(dir, 'main.js')); + var tester = require(path.join(dir, 'main.js')); // eslint-disable-line global-require tester(t, function (err, res, pkg) { if (err) { @@ -404,7 +410,7 @@ test('non-string "main" field in package.json', function (t) { var dir = path.join(__dirname, 'resolver'); resolve('./invalid_main', { basedir: dir }, function (err, res, pkg) { t.ok(err, 'errors on non-string main'); - t.equal(err.message, 'package “invalid main” `main` must be a string'); + t.equal(err.message, 'package “invalid_main” `main` must be a string'); t.equal(err.code, 'INVALID_PACKAGE_MAIN'); t.equal(res, undefined, 'res is undefined'); t.equal(pkg, undefined, 'pkg is undefined'); @@ -417,7 +423,7 @@ test('non-string "main" field in package.json', function (t) { var dir = path.join(__dirname, 'resolver'); resolve('./invalid_main', { basedir: dir }, function (err, res, pkg) { t.ok(err, 'errors on non-string main'); - t.equal(err.message, 'package “invalid main” `main` must be a string'); + t.equal(err.message, 'package “invalid_main” `main` must be a string'); t.equal(err.code, 'INVALID_PACKAGE_MAIN'); t.equal(res, undefined, 'res is undefined'); t.equal(pkg, undefined, 'pkg is undefined'); @@ -448,3 +454,93 @@ test('browser field in package.json', function (t) { } ); }); + +test('absolute paths', function (t) { + t.plan(4); + + var extensionless = __filename.slice(0, -path.extname(__filename).length); + + resolve(__filename, function (err, res) { + t.equal( + res, + __filename, + 'absolute path to this file resolves' + ); + }); + resolve(extensionless, function (err, res) { + t.equal( + res, + __filename, + 'extensionless absolute path to this file resolves' + ); + }); + resolve(__filename, { basedir: process.cwd() }, function (err, res) { + t.equal( + res, + __filename, + 'absolute path to this file with a basedir resolves' + ); + }); + resolve(extensionless, { basedir: process.cwd() }, function (err, res) { + t.equal( + res, + __filename, + 'extensionless absolute path to this file with a basedir resolves' + ); + }); +}); + +test('malformed package.json', function (t) { + /* eslint operator-linebreak: ["error", "before"], function-paren-newline: "off" */ + t.plan( + (3 * 3) // 3 sets of 3 assertions in the final callback + + 2 // 1 readPackage call with malformed package.json + ); + + var basedir = path.join(__dirname, 'resolver/malformed_package_json'); + var expected = path.join(basedir, 'index.js'); + + resolve('./index.js', { basedir: basedir }, function (err, res, pkg) { + t.error(err, 'no error'); + t.equal(res, expected, 'malformed package.json is silently ignored'); + t.equal(pkg, undefined, 'malformed package.json gives an undefined `pkg` argument'); + }); + + resolve( + './index.js', + { + basedir: basedir, + packageFilter: function (pkg, pkgfile, dir) { + t.fail('should not reach here'); + } + }, + function (err, res, pkg) { + t.error(err, 'with packageFilter: no error'); + t.equal(res, expected, 'with packageFilter: malformed package.json is silently ignored'); + t.equal(pkg, undefined, 'with packageFilter: malformed package.json gives an undefined `pkg` argument'); + } + ); + + resolve( + './index.js', + { + basedir: basedir, + readPackage: function (readFile, pkgfile, cb) { + t.equal(pkgfile, path.join(basedir, 'package.json'), 'readPackageSync: `pkgfile` is package.json path'); + readFile(pkgfile, function (err, result) { + try { + cb(null, JSON.parse(result)); + } catch (e) { + t.ok(e instanceof SyntaxError, 'readPackage: malformed package.json parses as a syntax error'); + cb(null); + } + }); + } + }, + function (err, res, pkg) { + t.error(err, 'with readPackage: no error'); + t.equal(res, expected, 'with readPackage: malformed package.json is silently ignored'); + t.equal(pkg, undefined, 'with readPackage: malformed package.json gives an undefined `pkg` argument'); + } + ); +}); diff --git a/build/node_modules/resolve/test/resolver/invalid_main/package.json b/build/node_modules/resolve/test/resolver/invalid_main/package.json index 0cf82799..05907486 100644 --- a/build/node_modules/resolve/test/resolver/invalid_main/package.json +++ b/build/node_modules/resolve/test/resolver/invalid_main/package.json @@ -1,5 +1,5 @@ { - "name": "invalid main", + "name": "invalid_main", "main": [ "why is this a thing", "srsly omg wtf" diff --git a/build/node_modules/mime/.npmignore b/build/node_modules/resolve/test/resolver/malformed_package_json/index.js similarity index 100% rename from build/node_modules/mime/.npmignore rename to build/node_modules/resolve/test/resolver/malformed_package_json/index.js diff --git a/build/node_modules/resolve/test/resolver/malformed_package_json/package.json b/build/node_modules/resolve/test/resolver/malformed_package_json/package.json new file mode 100644 index 00000000..98232c64 --- /dev/null +++ b/build/node_modules/resolve/test/resolver/malformed_package_json/package.json @@ -0,0 +1 @@ +{ diff --git a/build/node_modules/resolve/test/resolver_sync.js b/build/node_modules/resolve/test/resolver_sync.js index 3082c96e..6e4ae1e6 100644 --- a/build/node_modules/resolve/test/resolver_sync.js +++ b/build/node_modules/resolve/test/resolver_sync.js @@ -1,19 +1,46 @@ var path = require('path'); +var fs = require('fs'); var test = require('tape'); + var resolve = require('../'); +var sync = require('../sync'); + +var requireResolveSupportsPaths = require.resolve.length > 1 + && (/^12\.[012]\./).test(process.version); // broken in v12.0-12.2, see https://github.com/nodejs/node/issues/27794 + +test('`./sync` entry point', function (t) { + t.equal(resolve.sync, sync, '`./sync` entry point is the same as `.sync` on `main`'); + t.end(); +}); test('foo', function (t) { var dir = path.join(__dirname, 'resolver'); t.equal( resolve.sync('./foo', { basedir: dir }), - path.join(dir, 'foo.js') + path.join(dir, 'foo.js'), + './foo' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./foo', { basedir: dir }), + require.resolve('./foo', { paths: [dir] }), + './foo: resolve.sync === require.resolve' + ); + } t.equal( resolve.sync('./foo.js', { basedir: dir }), - path.join(dir, 'foo.js') + path.join(dir, 'foo.js'), + './foo.js' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./foo.js', { basedir: dir }), + require.resolve('./foo.js', { paths: [dir] }), + './foo.js: resolve.sync === require.resolve' + ); + } t.equal( resolve.sync('./foo.js', { basedir: dir, filename: path.join(dir, 'bar.js') }), @@ -41,10 +68,21 @@ test('foo', function (t) { test('bar', function (t) { var dir = path.join(__dirname, 'resolver'); + var basedir = path.join(dir, 'bar'); + t.equal( - resolve.sync('foo', { basedir: path.join(dir, 'bar') }), - path.join(dir, 'bar/node_modules/foo/index.js') + resolve.sync('foo', { basedir: basedir }), + path.join(dir, 'bar/node_modules/foo/index.js'), + 'foo in bar' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('foo', { basedir: basedir }), + require.resolve('foo', { paths: [basedir] }), + 'foo in bar: resolve.sync === require.resolve' + ); + } + t.end(); }); @@ -53,52 +91,98 @@ test('baz', function (t) { t.equal( resolve.sync('./baz', { basedir: dir }), - path.join(dir, 'baz/quux.js') + path.join(dir, 'baz/quux.js'), + './baz' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./baz', { basedir: dir }), + require.resolve('./baz', { paths: [dir] }), + './baz: resolve.sync === require.resolve' + ); + } + t.end(); }); test('biz', function (t) { var dir = path.join(__dirname, 'resolver/biz/node_modules'); + t.equal( resolve.sync('./grux', { basedir: dir }), path.join(dir, 'grux/index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./grux', { basedir: dir }), + require.resolve('./grux', { paths: [dir] }), + './grux: resolve.sync === require.resolve' + ); + } + var tivDir = path.join(dir, 'grux'); t.equal( - resolve.sync('tiv', { basedir: path.join(dir, 'grux') }), + resolve.sync('tiv', { basedir: tivDir }), path.join(dir, 'tiv/index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('tiv', { basedir: tivDir }), + require.resolve('tiv', { paths: [tivDir] }), + 'tiv: resolve.sync === require.resolve' + ); + } + var gruxDir = path.join(dir, 'tiv'); t.equal( - resolve.sync('grux', { basedir: path.join(dir, 'tiv') }), + resolve.sync('grux', { basedir: gruxDir }), path.join(dir, 'grux/index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('grux', { basedir: gruxDir }), + require.resolve('grux', { paths: [gruxDir] }), + 'grux: resolve.sync === require.resolve' + ); + } + t.end(); }); test('normalize', function (t) { var dir = path.join(__dirname, 'resolver/biz/node_modules/grux'); + t.equal( resolve.sync('../grux', { basedir: dir }), path.join(dir, 'index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('../grux', { basedir: dir }), + require.resolve('../grux', { paths: [dir] }), + '../grux: resolve.sync === require.resolve' + ); + } + t.end(); }); test('cup', function (t) { var dir = path.join(__dirname, 'resolver'); + t.equal( resolve.sync('./cup', { basedir: dir, extensions: ['.js', '.coffee'] }), - path.join(dir, 'cup.coffee') + path.join(dir, 'cup.coffee'), + './cup -> ./cup.coffee' ); t.equal( resolve.sync('./cup.coffee', { basedir: dir }), - path.join(dir, 'cup.coffee') + path.join(dir, 'cup.coffee'), + './cup.coffee' ); t.throws(function () { @@ -108,22 +192,40 @@ test('cup', function (t) { }); }); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./cup.coffee', { basedir: dir, extensions: ['.js', '.coffee'] }), + require.resolve('./cup.coffee', { paths: [dir] }), + './cup.coffee: resolve.sync === require.resolve' + ); + } + t.end(); }); test('mug', function (t) { var dir = path.join(__dirname, 'resolver'); + t.equal( resolve.sync('./mug', { basedir: dir }), - path.join(dir, 'mug.js') + path.join(dir, 'mug.js'), + './mug -> ./mug.js' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./mug', { basedir: dir }), + require.resolve('./mug', { paths: [dir] }), + './mug: resolve.sync === require.resolve' + ); + } t.equal( resolve.sync('./mug', { basedir: dir, extensions: ['.coffee', '.js'] }), - path.join(dir, 'mug.coffee') + path.join(dir, 'mug.coffee'), + './mug -> ./mug.coffee' ); t.equal( @@ -131,7 +233,8 @@ test('mug', function (t) { basedir: dir, extensions: ['.js', '.coffee'] }), - path.join(dir, 'mug.js') + path.join(dir, 'mug.js'), + './mug -> ./mug.js' ); t.end(); @@ -195,12 +298,18 @@ test('incorrect main', function (t) { resolve.sync('./incorrect_main', { basedir: resolverDir }), path.join(dir, 'index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./incorrect_main', { basedir: resolverDir }), + require.resolve('./incorrect_main', { paths: [resolverDir] }), + './incorrect_main: resolve.sync === require.resolve' + ); + } t.end(); }); var stubStatSync = function stubStatSync(fn) { - var fs = require('fs'); var statSync = fs.statSync; try { fs.statSync = function () { @@ -226,29 +335,66 @@ test('#79 - re-throw non ENOENT errors from stat', function (t) { test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) { var dir = path.join(__dirname, 'resolver'); + var basedir = path.join(dir, 'same_names'); t.equal( - resolve.sync('./foo', { basedir: path.join(dir, 'same_names') }), + resolve.sync('./foo', { basedir: basedir }), path.join(dir, 'same_names/foo.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./foo', { basedir: basedir }), + require.resolve('./foo', { paths: [basedir] }), + './foo: resolve.sync === require.resolve' + ); + } + t.equal( - resolve.sync('./foo/', { basedir: path.join(dir, 'same_names') }), + resolve.sync('./foo/', { basedir: basedir }), path.join(dir, 'same_names/foo/index.js') ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./foo/', { basedir: basedir }), + require.resolve('./foo/', { paths: [basedir] }), + './foo/: resolve.sync === require.resolve' + ); + } + t.end(); }); test('#211 - incorrectly resolves module-paths like "." when from inside a folder with a sibling file of the same name', function (t) { var dir = path.join(__dirname, 'resolver'); + var basedir = path.join(dir, 'same_names/foo'); t.equal( - resolve.sync('./', { basedir: path.join(dir, 'same_names/foo') }), - path.join(dir, 'same_names/foo/index.js') + resolve.sync('./', { basedir: basedir }), + path.join(dir, 'same_names/foo/index.js'), + './' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./', { basedir: basedir }), + require.resolve('./', { paths: [basedir] }), + './: resolve.sync === require.resolve' + ); + } + t.equal( - resolve.sync('.', { basedir: path.join(dir, 'same_names/foo') }), - path.join(dir, 'same_names/foo/index.js') + resolve.sync('.', { basedir: basedir }), + path.join(dir, 'same_names/foo/index.js'), + '.' ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('.', { basedir: basedir }), + require.resolve('.', { paths: [basedir] }), + '.: resolve.sync === require.resolve', + { todo: true } + ); + } + t.end(); }); @@ -261,6 +407,12 @@ test('sync: #121 - treating an existing file as a dir when no basedir', function __filename, 'sanity check' ); + st.equal( + resolve.sync('./' + testFile), + require.resolve('./' + testFile), + 'sanity check: resolve.sync === require.resolve' + ); + st.end(); }); @@ -288,15 +440,38 @@ test('sync: #121 - treating an existing file as a dir when no basedir', function test('sync dot main', function (t) { var start = new Date(); - t.equal(resolve.sync('./resolver/dot_main'), path.join(__dirname, 'resolver/dot_main/index.js')); + + t.equal( + resolve.sync('./resolver/dot_main'), + path.join(__dirname, 'resolver/dot_main/index.js'), + './resolver/dot_main' + ); + t.equal( + resolve.sync('./resolver/dot_main'), + require.resolve('./resolver/dot_main'), + './resolver/dot_main: resolve.sync === require.resolve' + ); + t.ok(new Date() - start < 50, 'resolve.sync timedout'); + t.end(); }); test('sync dot slash main', function (t) { var start = new Date(); - t.equal(resolve.sync('./resolver/dot_slash_main'), path.join(__dirname, 'resolver/dot_slash_main/index.js')); + + t.equal( + resolve.sync('./resolver/dot_slash_main'), + path.join(__dirname, 'resolver/dot_slash_main/index.js') + ); + t.equal( + resolve.sync('./resolver/dot_slash_main'), + require.resolve('./resolver/dot_slash_main'), + './resolver/dot_slash_main: resolve.sync === require.resolve' + ); + t.ok(new Date() - start < 50, 'resolve.sync timedout'); + t.end(); }); @@ -321,7 +496,7 @@ test('non-string "main" field in package.json', function (t) { t.fail('should not get here'); } catch (err) { t.ok(err, 'errors on non-string main'); - t.equal(err.message, 'package “invalid main” `main` must be a string'); + t.equal(err.message, 'package “invalid_main” `main` must be a string'); t.equal(err.code, 'INVALID_PACKAGE_MAIN'); } t.end(); @@ -335,7 +510,7 @@ test('non-string "main" field in package.json', function (t) { t.fail('should not get here'); } catch (err) { t.ok(err, 'errors on non-string main'); - t.equal(err.message, 'package “invalid main” `main` must be a string'); + t.equal(err.message, 'package “invalid_main” `main` must be a string'); t.equal(err.code, 'INVALID_PACKAGE_MAIN'); } t.end(); @@ -356,3 +531,115 @@ test('browser field in package.json', function (t) { t.equal(res, path.join(dir, 'browser_field', 'b.js')); t.end(); }); + +test('absolute paths', function (t) { + var extensionless = __filename.slice(0, -path.extname(__filename).length); + + t.equal( + resolve.sync(__filename), + __filename, + 'absolute path to this file resolves' + ); + t.equal( + resolve.sync(__filename), + require.resolve(__filename), + 'absolute path to this file: resolve.sync === require.resolve' + ); + + t.equal( + resolve.sync(extensionless), + __filename, + 'extensionless absolute path to this file resolves' + ); + t.equal( + resolve.sync(__filename), + require.resolve(__filename), + 'absolute path to this file: resolve.sync === require.resolve' + ); + + t.equal( + resolve.sync(__filename, { basedir: process.cwd() }), + __filename, + 'absolute path to this file with a basedir resolves' + ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync(__filename, { basedir: process.cwd() }), + require.resolve(__filename, { paths: [process.cwd()] }), + 'absolute path to this file + basedir: resolve.sync === require.resolve' + ); + } + + t.equal( + resolve.sync(extensionless, { basedir: process.cwd() }), + __filename, + 'extensionless absolute path to this file with a basedir resolves' + ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync(extensionless, { basedir: process.cwd() }), + require.resolve(extensionless, { paths: [process.cwd()] }), + 'extensionless absolute path to this file + basedir: resolve.sync === require.resolve' + ); + } + + t.end(); +}); + +test('malformed package.json', function (t) { + t.plan(5 + (requireResolveSupportsPaths ? 1 : 0)); + + var basedir = path.join(__dirname, 'resolver/malformed_package_json'); + var expected = path.join(basedir, 'index.js'); + + t.equal( + resolve.sync('./index.js', { basedir: basedir }), + expected, + 'malformed package.json is silently ignored' + ); + if (requireResolveSupportsPaths) { + t.equal( + resolve.sync('./index.js', { basedir: basedir }), + require.resolve('./index.js', { paths: [basedir] }), + 'malformed package.json: resolve.sync === require.resolve' + ); + } + + var res1 = resolve.sync( + './index.js', + { + basedir: basedir, + packageFilter: function (pkg, pkgfile, dir) { + t.fail('should not reach here'); + } + } + ); + + t.equal( + res1, + expected, + 'with packageFilter: malformed package.json is silently ignored' + ); + + var res2 = resolve.sync( + './index.js', + { + basedir: basedir, + readPackageSync: function (readFileSync, pkgfile) { + t.equal(pkgfile, path.join(basedir, 'package.json'), 'readPackageSync: `pkgfile` is package.json path'); + var result = String(readFileSync(pkgfile)); + try { + return JSON.parse(result); + } catch (e) { + t.ok(e instanceof SyntaxError, 'readPackageSync: malformed package.json parses as a syntax error'); + } + } + } + ); + + t.equal( + res2, + expected, + 'with readPackageSync: malformed package.json is silently ignored' + ); +}); diff --git a/build/node_modules/ripemd160/package.json b/build/node_modules/ripemd160/package.json index 279cde1d..eb5d0035 100644 --- a/build/node_modules/ripemd160/package.json +++ b/build/node_modules/ripemd160/package.json @@ -20,7 +20,7 @@ "/create-hmac", "/pbkdf2" ], - "_resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ripemd160/-/ripemd160-2.0.2.tgz", "_shasum": "a1c1a6f624751577ba5d07914cbc92850585890c", "_spec": "ripemd160@^2.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/create-hash", diff --git a/build/node_modules/rollup-plugin-commonjs/CHANGELOG.md b/build/node_modules/rollup-plugin-commonjs/CHANGELOG.md deleted file mode 100644 index 26d3f996..00000000 --- a/build/node_modules/rollup-plugin-commonjs/CHANGELOG.md +++ /dev/null @@ -1,289 +0,0 @@ -# rollup-plugin-commonjs changelog - -## 9.3.4 -*2019-04-04* -* Make "extensions" optional ([#384](https://github.com/rollup/rollup-plugin-commonjs/issues/384)) -* Use same typing for include and exclude properties ([#385](https://github.com/rollup/rollup-plugin-commonjs/issues/385)) - -## 9.3.3 -*2019-04-04* -* Remove colon from module prefixes ([#371](https://github.com/rollup/rollup-plugin-commonjs/issues/371)) - -## 9.3.2 -*2019-04-04* -* Use shared extractAssignedNames, fix destructuring issue ([#303](https://github.com/rollup/rollup-plugin-commonjs/issues/303)) - -## 9.3.1 -*2019-04-04* -* Include typings in release ([#382](https://github.com/rollup/rollup-plugin-commonjs/issues/382)) - -## 9.3.0 -*2019-04-03* -* Add TypeScript types ([#363](https://github.com/rollup/rollup-plugin-commonjs/issues/363)) - -## 9.2.3 -*2019-04-02* -* Improve support for ES3 browsers ([#364](https://github.com/rollup/rollup-plugin-commonjs/issues/364)) -* Add note about monorepo usage to readme ([#372](https://github.com/rollup/rollup-plugin-commonjs/issues/372)) -* Add .js extension to generated helper file ([#373](https://github.com/rollup/rollup-plugin-commonjs/issues/373)) - -## 9.2.2 -*2019-03-25* -* Handle array destructuring assignment ([#379](https://github.com/rollup/rollup-plugin-commonjs/issues/379)) - -## 9.2.1 -*2019-02-23* -* Use correct context when manually resolving ids ([#370](https://github.com/rollup/rollup-plugin-commonjs/issues/370)) - -## 9.2.0 -*2018-10-10* -* Fix missing default warning, produce better code when importing known ESM default exports ([#349](https://github.com/rollup/rollup-plugin-commonjs/issues/349)) -* Refactor code and add prettier ([#346](https://github.com/rollup/rollup-plugin-commonjs/issues/346)) - -## 9.1.8 -*2018-09-18* -* Ignore virtual modules created by other plugins ([#327](https://github.com/rollup/rollup-plugin-commonjs/issues/327)) -* Add "location" and "process" to reserved words ([#330](https://github.com/rollup/rollup-plugin-commonjs/issues/330)) - -## 9.1.6 -*2018-08-24* -* Keep commonJS detection between instantiations ([#338](https://github.com/rollup/rollup-plugin-commonjs/issues/338)) - -## 9.1.5 -*2018-08-09* -* Handle object form of input ([#329](https://github.com/rollup/rollup-plugin-commonjs/issues/329)) - -## 9.1.4 -*2018-07-27* -* Make "from" a reserved word ([#320](https://github.com/rollup/rollup-plugin-commonjs/issues/320)) - -## 9.1.3 -*2018-04-30* -* Fix a caching issue ([#316](https://github.com/rollup/rollup-plugin-commonjs/issues/316)) - -## 9.1.2 -*2018-04-30* -* Re-publication of 9.1.0 - -## 9.1.1 -*2018-04-30* -* Fix ordering of modules when using rollup 0.58 ([#302](https://github.com/rollup/rollup-plugin-commonjs/issues/302)) - -## 9.1.0 - -* Do not automatically wrap modules with return statements in top level arrow functions ([#302](https://github.com/rollup/rollup-plugin-commonjs/issues/302)) - -## 9.0.0 - -* Make rollup a peer dependency with a version range ([#300](https://github.com/rollup/rollup-plugin-commonjs/issues/300)) - -## 8.4.1 - -* Re-release of 8.3.0 as #287 was actually a breaking change - -## 8.4.0 - -* Better handle non-CJS files that contain CJS keywords ([#285](https://github.com/rollup/rollup-plugin-commonjs/issues/285)) -* Use rollup's plugin context`parse` function ([#287](https://github.com/rollup/rollup-plugin-commonjs/issues/287)) -* Improve error handling ([#288](https://github.com/rollup/rollup-plugin-commonjs/issues/288)) - -## 8.3.0 - -* Handle multiple entry points ([#283](https://github.com/rollup/rollup-plugin-commonjs/issues/283)) -* Extract named exports from exported object literals ([#272](https://github.com/rollup/rollup-plugin-commonjs/issues/272)) -* Fix when `options.external` is modified by other plugins ([#264](https://github.com/rollup/rollup-plugin-commonjs/issues/264)) -* Recognize static template strings in require statements ([#271](https://github.com/rollup/rollup-plugin-commonjs/issues/271)) - -## 8.2.4 - -* Don't import default from ES modules that don't export default ([#206](https://github.com/rollup/rollup-plugin-commonjs/issues/206)) - -## 8.2.3 - -* Prevent duplicate default exports ([#230](https://github.com/rollup/rollup-plugin-commonjs/pull/230)) -* Only include default export when it exists ([#226](https://github.com/rollup/rollup-plugin-commonjs/pull/226)) -* Deconflict `require` aliases ([#232](https://github.com/rollup/rollup-plugin-commonjs/issues/232)) - -## 8.2.1 - -* Fix magic-string deprecation warning - -## 8.2.0 - -* Avoid using `index` as a variable name ([#208](https://github.com/rollup/rollup-plugin-commonjs/pull/208)) - -## 8.1.1 - -* Compatibility with 0.48 ([#220](https://github.com/rollup/rollup-plugin-commonjs/issues/220)) - -## 8.1.0 - -* Handle `options.external` correctly ([#212](https://github.com/rollup/rollup-plugin-commonjs/pull/212)) -* Support top-level return ([#195](https://github.com/rollup/rollup-plugin-commonjs/pull/195)) - -## 8.0.2 - -* Fix another `var` rewrite bug ([#181](https://github.com/rollup/rollup-plugin-commonjs/issues/181)) - -## 8.0.1 - -* Remove declarators within a var declaration correctly ([#179](https://github.com/rollup/rollup-plugin-commonjs/issues/179)) - -## 8.0.0 - -* Prefer the names dependencies are imported by for the common `var foo = require('foo')` pattern ([#176](https://github.com/rollup/rollup-plugin-commonjs/issues/176)) - -## 7.1.0 - -* Allow certain `require` statements to pass through unmolested ([#174](https://github.com/rollup/rollup-plugin-commonjs/issues/174)) - -## 7.0.2 - -* Handle duplicate default exports ([#158](https://github.com/rollup/rollup-plugin-commonjs/issues/158)) - -## 7.0.1 - -* Fix exports with parentheses ([#168](https://github.com/rollup/rollup-plugin-commonjs/issues/168)) - -## 7.0.0 - -* Rewrite `typeof module`, `typeof module.exports` and `typeof exports` as `'object'` ([#151](https://github.com/rollup/rollup-plugin-commonjs/issues/151)) - -## 6.0.1 - -* Don't overwrite globals ([#127](https://github.com/rollup/rollup-plugin-commonjs/issues/127)) - -## 6.0.0 - -* Rewrite top-level `define` as `undefined`, so AMD-first UMD blocks do not cause breakage ([#144](https://github.com/rollup/rollup-plugin-commonjs/issues/144)) -* Support ES2017 syntax ([#132](https://github.com/rollup/rollup-plugin-commonjs/issues/132)) -* Deconflict exported reserved keywords ([#116](https://github.com/rollup/rollup-plugin-commonjs/issues/116)) - -## 5.0.5 -* Fix parenthesis wrapped exports ([#120](https://github.com/rollup/rollup-plugin-commonjs/issues/120)) - -## 5.0.4 - -* Ensure named exports are added to default export in optimised modules ([#112](https://github.com/rollup/rollup-plugin-commonjs/issues/112)) - -## 5.0.3 - -* Respect custom `namedExports` in optimised modules ([#35](https://github.com/rollup/rollup-plugin-commonjs/issues/35)) - -## 5.0.2 - -* Replace `require` (outside call expressions) with `commonjsRequire` helper ([#77](https://github.com/rollup/rollup-plugin-commonjs/issues/77), [#83](https://github.com/rollup/rollup-plugin-commonjs/issues/83)) - -## 5.0.1 - -* Deconflict against globals ([#84](https://github.com/rollup/rollup-plugin-commonjs/issues/84)) - -## 5.0.0 - -* Optimise modules that don't need to be wrapped in a function ([#106](https://github.com/rollup/rollup-plugin-commonjs/pull/106)) -* Ignore modules containing `import` and `export` statements ([#96](https://github.com/rollup/rollup-plugin-commonjs/pull/96)) - -## 4.1.0 - -* Ignore dead branches ([#93](https://github.com/rollup/rollup-plugin-commonjs/issues/93)) - -## 4.0.1 - -* Fix `ignoreGlobal` option ([#86](https://github.com/rollup/rollup-plugin-commonjs/pull/86)) - -## 4.0.0 - -* Better interop and smaller output ([#92](https://github.com/rollup/rollup-plugin-commonjs/pull/92)) - -## 3.3.1 - -* Deconflict export and local module ([rollup/rollup#554](https://github.com/rollup/rollup/issues/554)) - -## 3.3.0 - -* Keep the order of execution for require calls ([#43](https://github.com/rollup/rollup-plugin-commonjs/pull/43)) -* Use interopDefault as helper ([#42](https://github.com/rollup/rollup-plugin-commonjs/issues/42)) - -## 3.2.0 - -* Use named exports as a function when no default export is defined ([#524](https://github.com/rollup/rollup/issues/524)) - -## 3.1.0 - -* Replace `typeof require` with `'function'` ([#38](https://github.com/rollup/rollup-plugin-commonjs/issues/38)) -* Don't attempt to resolve entry file relative to importer ([#63](https://github.com/rollup/rollup-plugin-commonjs/issues/63)) - -## 3.0.2 - -* Handle multiple references to `global` - -## 3.0.1 - -* Return a `name` - -## 3.0.0 - -* Make `transform` stateless ([#71](https://github.com/rollup/rollup-plugin-commonjs/pull/71)) -* Support web worker `global` ([#50](https://github.com/rollup/rollup-plugin-commonjs/issues/50)) -* Ignore global with `options.ignoreGlobal` ([#48](https://github.com/rollup/rollup-plugin-commonjs/issues/48)) - -## 2.2.1 - -* Prevent false positives with `namedExports` ([#36](https://github.com/rollup/rollup-plugin-commonjs/issues/36)) - -## 2.2.0 - -* Rewrite top-level `this` expressions to mean the same as `global` ([#31](https://github.com/rollup/rollup-plugin-commonjs/issues/31)) - -## 2.1.0 - -* Optimised module wrappers ([#20](https://github.com/rollup/rollup-plugin-commonjs/pull/20)) -* Allow control over named exports via `options.namedExports` ([#18](https://github.com/rollup/rollup-plugin-commonjs/issues/18)) -* Handle bare imports correctly ([#23](https://github.com/rollup/rollup-plugin-commonjs/issues/23)) -* Blacklist all reserved words as export names ([#21](https://github.com/rollup/rollup-plugin-commonjs/issues/21)) -* Configure allowed file extensions via `options.extensions` ([#27](https://github.com/rollup/rollup-plugin-commonjs/pull/27)) - -## 2.0.0 - -* Support for transpiled modules – `exports.default` is used as the default export in place of `module.exports`, if applicable, and `__esModule` is not exported ([#16](https://github.com/rollup/rollup-plugin-commonjs/pull/16)) - -## 1.4.0 - -* Generate sourcemaps by default - -## 1.3.0 - -* Handle references to `global` ([#6](https://github.com/rollup/rollup-plugin-commonjs/issues/6)) - -## 1.2.0 - -* Generate named exports where possible ([#5](https://github.com/rollup/rollup-plugin-commonjs/issues/5)) -* Handle shadowed `require`/`module`/`exports` - -## 1.1.0 - -* Handle dots in filenames ([#3](https://github.com/rollup/rollup-plugin-commonjs/issues/3)) -* Wrap modules in IIFE for more readable output - -## 1.0.0 - -* Stable release, now that Rollup supports plugins - -## 0.2.1 - -* Allow mixed CommonJS/ES6 imports/exports -* Use `var` instead of `let` - -## 0.2.0 - -* Sourcemap support -* Support `options.include` and `options.exclude` -* Bail early if module is obviously not a CommonJS module - -## 0.1.1 - -Add dist files to package (whoops!) - -## 0.1.0 - -* First release diff --git a/build/node_modules/rollup-plugin-commonjs/LICENSE b/build/node_modules/rollup-plugin-commonjs/LICENSE deleted file mode 100644 index fa6e5151..00000000 --- a/build/node_modules/rollup-plugin-commonjs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 [these people](https://github.com/rollup/rollup-plugin-commonjs/graphs/contributors) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/build/node_modules/rollup-plugin-commonjs/README.md b/build/node_modules/rollup-plugin-commonjs/README.md deleted file mode 100644 index 3502ccc5..00000000 --- a/build/node_modules/rollup-plugin-commonjs/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# rollup-plugin-commonjs [![Build Status][travis-img]][travis] - -[travis-img]: https://travis-ci.org/rollup/rollup-plugin-commonjs.svg -[travis]: https://travis-ci.org/rollup/rollup-plugin-commonjs - -Convert CommonJS modules to ES6, so they can be included in a Rollup bundle - - -## Installation - -```bash -npm install --save-dev rollup-plugin-commonjs -``` - - -## Usage - -Typically, you would use this plugin alongside [rollup-plugin-node-resolve](https://github.com/rollup/rollup-plugin-node-resolve), so that you could bundle your CommonJS dependencies in `node_modules`. - -```js -// rollup.config.js -import commonjs from 'rollup-plugin-commonjs'; -import nodeResolve from 'rollup-plugin-node-resolve'; - -export default { - input: 'main.js', - output: { - file: 'bundle.js', - format: 'iife' - }, - plugins: [ - nodeResolve({ - jsnext: true, - main: true - }), - - commonjs({ - // non-CommonJS modules will be ignored, but you can also - // specifically include/exclude files - include: 'node_modules/**', // Default: undefined - exclude: [ 'node_modules/foo/**', 'node_modules/bar/**' ], // Default: undefined - // these values can also be regular expressions - // include: /node_modules/ - - // search for files other than .js files (must already - // be transpiled by a previous plugin!) - extensions: [ '.js', '.coffee' ], // Default: [ '.js' ] - - // if true then uses of `global` won't be dealt with by this plugin - ignoreGlobal: false, // Default: false - - // if false then skip sourceMap generation for CommonJS modules - sourceMap: false, // Default: true - - // explicitly specify unresolvable named exports - // (see below for more details) - namedExports: { './module.js': ['foo', 'bar' ] }, // Default: undefined - - // sometimes you have to leave require statements - // unconverted. Pass an array containing the IDs - // or a `id => boolean` function. Only use this - // option if you know what you're doing! - ignore: [ 'conditional-runtime-dependency' ] - }) - ] -}; -``` - -### Usage in monorepo - -In case you are using a monorepo, you may want to use a regular expression for `include` as the string 'node_modules' will not match if your `node_modules` is not in your current working directory (i.e. '../node_modules'). Try this: - -``` -commonjs({ - include: /node_modules/ -}) -``` - -### Custom named exports - -This plugin will attempt to create named exports, where appropriate, so you can do this... - -```js -// importer.js -import { named } from './exporter.js'; - -// exporter.js -module.exports = { named: 42 }; // or `exports.named = 42;` -``` - -...but that's not always possible: - -```js -// importer.js -import { named } from 'my-lib'; - -// my-lib.js -var myLib = exports; -myLib.named = 'you can\'t see me'; -``` - -In those cases, you can specify custom named exports: - -```js -commonjs({ - namedExports: { - // left-hand side can be an absolute path, a path - // relative to the current directory, or the name - // of a module in node_modules - 'node_modules/my-lib/index.js': [ 'named' ] - } -}) -``` - - -## Strict mode - -ES modules are *always* parsed in strict mode. That means that certain non-strict constructs (like octal literals) will be treated as syntax errors when Rollup parses modules that use them. Some older CommonJS modules depend on those constructs, and if you depend on them your bundle will blow up. There's basically nothing we can do about that. - -Luckily, there is absolutely no good reason *not* to use strict mode for everything — so the solution to this problem is to lobby the authors of those modules to update them. - - -## License - -MIT diff --git a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js b/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js deleted file mode 100644 index a53223e0..00000000 --- a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js +++ /dev/null @@ -1,909 +0,0 @@ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var path = require('path'); -var resolve = require('resolve'); -var rollupPluginutils = require('rollup-pluginutils'); -var fs = require('fs'); -var estreeWalker = require('estree-walker'); -var MagicString = _interopDefault(require('magic-string')); - -var PROXY_PREFIX = '\0commonjs-proxy-'; -var EXTERNAL_PREFIX = '\0commonjs-external-'; -var HELPERS_ID = '\0commonjsHelpers.js'; - -// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers. -// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled. -var HELPERS = "\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nexport function unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nexport function getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}"; - -var isCjsPromises = Object.create(null); - -function getIsCjsPromise(id) { - var isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) { return isCjsPromise.promise; } - - var promise = new Promise(function (resolve) { - isCjsPromises[id] = isCjsPromise = { - resolve: resolve, - promise: undefined - }; - }); - isCjsPromise.promise = promise; - - return promise; -} - -function setIsCjsPromise(id, promise) { - var isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) { - if (isCjsPromise.resolve) { - isCjsPromise.resolve(promise); - isCjsPromise.resolve = undefined; - } - } else { - isCjsPromises[id] = { promise: promise, resolve: undefined }; - } -} - -function isFile(file) { - try { - var stats = fs.statSync(file); - return stats.isFile(); - } catch (err) { - return false; - } -} - -function addJsExtensionIfNecessary(file) { - if (isFile(file)) { return file; } - - file += '.js'; - if (isFile(file)) { return file; } - - return null; -} - -var absolutePath = /^(?:\/|(?:[A-Za-z]:)?[\\|/])/; - -function isAbsolute(path) { - return absolutePath.test(path); -} - -function defaultResolver(importee, importer) { - // absolute paths are left untouched - if (isAbsolute(importee)) { return addJsExtensionIfNecessary(path.resolve(importee)); } - - // if this is the entry point, resolve against cwd - if (importer === undefined) { return addJsExtensionIfNecessary(path.resolve(process.cwd(), importee)); } - - // external modules are skipped at this stage - if (importee[0] !== '.') { return null; } - - return addJsExtensionIfNecessary(path.resolve(path.dirname(importer), importee)); -} - -function getName(id) { - var name = rollupPluginutils.makeLegalIdentifier(path.basename(id, path.extname(id))); - if (name !== 'index') { - return name; - } else { - var segments = path.dirname(id).split(path.sep); - return rollupPluginutils.makeLegalIdentifier(segments[segments.length - 1]); - } -} - -// Return the first non-falsy result from an array of -// maybe-sync, maybe-promise-returning functions -function first(candidates) { - return function() { - var this$1 = this; - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return candidates.reduce(function (promise, candidate) { - return promise.then(function (result) { return result != null ? result : Promise.resolve(candidate.call.apply(candidate, [ this$1 ].concat( args ))); } - ); - }, Promise.resolve()); - }; -} - -function getCandidatesForExtension(resolved, extension) { - return [resolved + extension, resolved + path.sep + "index" + extension]; -} - -function getCandidates(resolved, extensions) { - return extensions.reduce( - function (paths, extension) { return paths.concat(getCandidatesForExtension(resolved, extension)); }, - [resolved] - ); -} - -function getResolveId(extensions) { - var resolveUsingOtherResolvers; - - function resolveId(importee, importer) { - var isProxyModule = importee.startsWith(PROXY_PREFIX); - if (isProxyModule) { - importee = importee.slice(PROXY_PREFIX.length); - } else if (importee.startsWith('\0')) { - return importee; - } - - if (importer && importer.startsWith(PROXY_PREFIX)) { - importer = importer.slice(PROXY_PREFIX.length); - } - - return resolveUsingOtherResolvers.call(this, importee, importer).then(function (resolved) { - if (resolved) { return isProxyModule ? PROXY_PREFIX + resolved : resolved; } - - resolved = defaultResolver(importee, importer); - - if (isProxyModule) { - if (resolved) { return PROXY_PREFIX + resolved; } - return EXTERNAL_PREFIX + importee; // external - } - - return resolved; - }); - } - - resolveId.setRollupOptions = function(options) { - var resolvers = (options.plugins || []) - .map(function (plugin) { - if (plugin.resolveId === resolveId) { - // substitute CommonJS resolution logic - return function (importee, importer) { - if (importee[0] !== '.' || !importer) { return; } // not our problem - - var resolved = path.resolve(path.dirname(importer), importee); - var candidates = getCandidates(resolved, extensions); - - for (var i = 0; i < candidates.length; i += 1) { - try { - var stats = fs.statSync(candidates[i]); - if (stats.isFile()) { return candidates[i]; } - } catch (err) { - /* noop */ - } - } - }; - } - - return plugin.resolveId; - }) - .filter(Boolean); - - var isExternal = function (id) { return options.external - ? Array.isArray(options.external) - ? options.external.includes(id) - : options.external(id) - : false; }; - - resolvers.unshift(function (id) { return (isExternal(id) ? false : null); }); - - resolveUsingOtherResolvers = first(resolvers); - }; - - return resolveId; -} - -function isReference(node, parent) { - if (parent.type === 'MemberExpression') { return parent.computed || node === parent.object; } - - // disregard the `bar` in { bar: foo } - if (parent.type === 'Property' && node !== parent.value) { return false; } - - // disregard the `bar` in `class Foo { bar () {...} }` - if (parent.type === 'MethodDefinition') { return false; } - - // disregard the `bar` in `export { foo as bar }` - if (parent.type === 'ExportSpecifier' && node !== parent.local) { return false; } - - return true; -} - -function flatten(node) { - var parts = []; - - while (node.type === 'MemberExpression') { - if (node.computed) { return null; } - - parts.unshift(node.property.name); - node = node.object; - } - - if (node.type !== 'Identifier') { return null; } - - var name = node.name; - parts.unshift(name); - - return { name: name, keypath: parts.join('.') }; -} - -function isTruthy(node) { - if (node.type === 'Literal') { return !!node.value; } - if (node.type === 'ParenthesizedExpression') { return isTruthy(node.expression); } - if (node.operator in operators) { return operators[node.operator](node); } -} - -function isFalsy(node) { - return not(isTruthy(node)); -} - -function not(value) { - return value === undefined ? value : !value; -} - -function equals(a, b, strict) { - if (a.type !== b.type) { return undefined; } - if (a.type === 'Literal') { return strict ? a.value === b.value : a.value == b.value; } -} - -var operators = { - '==': function (x) { - return equals(x.left, x.right, false); - }, - - '!=': function (x) { return not(operators['=='](x)); }, - - '===': function (x) { - return equals(x.left, x.right, true); - }, - - '!==': function (x) { return not(operators['==='](x)); }, - - '!': function (x) { return isFalsy(x.argument); }, - - '&&': function (x) { return isTruthy(x.left) && isTruthy(x.right); }, - - '||': function (x) { return isTruthy(x.left) || isTruthy(x.right); } -}; - -var reserved = 'process location abstract arguments boolean break byte case catch char class const continue debugger default delete do double else enum eval export extends false final finally float for from function goto if implements import in instanceof int interface let long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var void volatile while with yield'.split( - ' ' -); -var blacklist = { __esModule: true }; -reserved.forEach(function (word) { return (blacklist[word] = true); }); - -var exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; - -var firstpassGlobal = /\b(?:require|module|exports|global)\b/; -var firstpassNoGlobal = /\b(?:require|module|exports)\b/; -var importExportDeclaration = /^(?:Import|Export(?:Named|Default))Declaration/; -var functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; - -function deconflict(scope, globals, identifier) { - var i = 1; - var deconflicted = identifier; - - while (scope.contains(deconflicted) || globals.has(deconflicted) || deconflicted in blacklist) - { deconflicted = identifier + "_" + (i++); } - scope.declarations[deconflicted] = true; - - return deconflicted; -} - -function tryParse(parse, code, id) { - try { - return parse(code, { allowReturnOutsideFunction: true }); - } catch (err) { - err.message += " in " + id; - throw err; - } -} - -function hasCjsKeywords(code, ignoreGlobal) { - var firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; - return firstpass.test(code); -} - -function checkEsModule(parse, code, id) { - var ast = tryParse(parse, code, id); - - var isEsModule = false; - for (var i$1 = 0, list$1 = ast.body; i$1 < list$1.length; i$1 += 1) { - var node = list$1[i$1]; - - if (node.type === 'ExportDefaultDeclaration') - { return { isEsModule: true, hasDefaultExport: true, ast: ast }; } - if (node.type === 'ExportNamedDeclaration') { - isEsModule = true; - for (var i = 0, list = node.specifiers; i < list.length; i += 1) { - var specifier = list[i]; - - if (specifier.exported.name === 'default') { - return { isEsModule: true, hasDefaultExport: true, ast: ast }; - } - } - } else if (importExportDeclaration.test(node.type)) { isEsModule = true; } - } - - return { isEsModule: isEsModule, hasDefaultExport: false, ast: ast }; -} - -function transformCommonjs( - parse, - code, - id, - isEntry, - ignoreGlobal, - ignoreRequire, - customNamedExports, - sourceMap, - allowDynamicRequire, - astCache -) { - var ast = astCache || tryParse(parse, code, id); - - var magicString = new MagicString(code); - - var required = {}; - // Because objects have no guaranteed ordering, yet we need it, - // we need to keep track of the order in a array - var sources = []; - - var uid = 0; - - var scope = rollupPluginutils.attachScopes(ast, 'scope'); - var uses = { module: false, exports: false, global: false, require: false }; - - var lexicalDepth = 0; - var programDepth = 0; - - var globals = new Set(); - - var HELPERS_NAME = deconflict(scope, globals, 'commonjsHelpers'); // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ - - var namedExports = {}; - - // TODO handle transpiled modules - var shouldWrap = /__esModule/.test(code); - - function isRequireStatement(node) { - if (!node) { return; } - if (node.type !== 'CallExpression') { return; } - if (node.callee.name !== 'require' || scope.contains('require')) { return; } - if (node.arguments.length === 0) { return; } // Weird case of require() without arguments - return true; - } - - function hasDynamicArguments(node) { - return ( - node.arguments.length > 1 || - (node.arguments[0].type !== 'Literal' && - (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0)) - ); - } - - function isStaticRequireStatement(node) { - if (!isRequireStatement(node)) { return; } - if (hasDynamicArguments(node)) { return; } - if (ignoreRequire(node.arguments[0].value)) { return; } - return true; - } - - function getRequireStringArg(node) { - return node.arguments[0].type === 'Literal' - ? node.arguments[0].value - : node.arguments[0].quasis[0].value.cooked; - } - - function getRequired(node, name) { - var sourceId = getRequireStringArg(node); - var existing = required[sourceId]; - if (existing === undefined) { - if (!name) { - do { name = "require$$" + (uid++); } - while (scope.contains(name)); - } - - sources.push(sourceId); - required[sourceId] = { source: sourceId, name: name, importsDefault: false }; - } - - return required[sourceId]; - } - - // do a first pass, see which names are assigned to. This is necessary to prevent - // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`, - // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) - var assignedTo = new Set(); - estreeWalker.walk(ast, { - enter: function enter(node) { - if (node.type !== 'AssignmentExpression') { return; } - if (node.left.type === 'MemberExpression') { return; } - - rollupPluginutils.extractAssignedNames(node.left).forEach(function (name) { - assignedTo.add(name); - }); - } - }); - - estreeWalker.walk(ast, { - enter: function enter(node, parent) { - if (sourceMap) { - magicString.addSourcemapLocation(node.start); - magicString.addSourcemapLocation(node.end); - } - - // skip dead branches - if (parent && (parent.type === 'IfStatement' || parent.type === 'ConditionalExpression')) { - if (node === parent.consequent && isFalsy(parent.test)) { return this.skip(); } - if (node === parent.alternate && isTruthy(parent.test)) { return this.skip(); } - } - - if (node._skip) { return this.skip(); } - - programDepth += 1; - - if (node.scope) { scope = node.scope; } - if (functionType.test(node.type)) { lexicalDepth += 1; } - - // if toplevel return, we need to wrap it - if (node.type === 'ReturnStatement' && lexicalDepth === 0) { - shouldWrap = true; - } - - // rewrite `this` as `commonjsHelpers.commonjsGlobal` - if (node.type === 'ThisExpression' && lexicalDepth === 0) { - uses.global = true; - if (!ignoreGlobal) - { magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsGlobal"), { - storeName: true - }); } - return; - } - - // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151) - if (node.type === 'UnaryExpression' && node.operator === 'typeof') { - var flattened = flatten(node.argument); - if (!flattened) { return; } - - if (scope.contains(flattened.name)) { return; } - - if ( - flattened.keypath === 'module.exports' || - flattened.keypath === 'module' || - flattened.keypath === 'exports' - ) { - magicString.overwrite(node.start, node.end, "'object'", { storeName: false }); - } - } - - // rewrite `require` (if not already handled) `global` and `define`, and handle free references to - // `module` and `exports` as these mean we need to wrap the module in commonjsHelpers.createCommonjsModule - if (node.type === 'Identifier') { - if (isReference(node, parent) && !scope.contains(node.name)) { - if (node.name in uses) { - if (node.name === 'require') { - if (allowDynamicRequire) { return; } - magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsRequire"), { - storeName: true - }); - } - - uses[node.name] = true; - if (node.name === 'global' && !ignoreGlobal) { - magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsGlobal"), { - storeName: true - }); - } - - // if module or exports are used outside the context of an assignment - // expression, we need to wrap the module - if (node.name === 'module' || node.name === 'exports') { - shouldWrap = true; - } - } - - if (node.name === 'define') { - magicString.overwrite(node.start, node.end, 'undefined', { storeName: true }); - } - - globals.add(node.name); - } - - return; - } - - // Is this an assignment to exports or module.exports? - if (node.type === 'AssignmentExpression') { - if (node.left.type !== 'MemberExpression') { return; } - - var flattened$1 = flatten(node.left); - if (!flattened$1) { return; } - - if (scope.contains(flattened$1.name)) { return; } - - var match = exportsPattern.exec(flattened$1.keypath); - if (!match || flattened$1.keypath === 'exports') { return; } - - uses[flattened$1.name] = true; - - // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` – - // if this isn't top-level, we'll need to wrap the module - if (programDepth > 3) { shouldWrap = true; } - - node.left._skip = true; - - if (flattened$1.keypath === 'module.exports' && node.right.type === 'ObjectExpression') { - return node.right.properties.forEach(function (prop) { - if (prop.computed || prop.key.type !== 'Identifier') { return; } - var name = prop.key.name; - if (name === rollupPluginutils.makeLegalIdentifier(name)) { namedExports[name] = true; } - }); - } - - if (match[1]) { namedExports[match[1]] = true; } - return; - } - - // if this is `var x = require('x')`, we can do `import x from 'x'` - if ( - node.type === 'VariableDeclarator' && - node.id.type === 'Identifier' && - isStaticRequireStatement(node.init) - ) { - // for now, only do this for top-level requires. maybe fix this in future - if (scope.parent) { return; } - - // edge case — CJS allows you to assign to imports. ES doesn't - if (assignedTo.has(node.id.name)) { return; } - - var required$1 = getRequired(node.init, node.id.name); - required$1.importsDefault = true; - - if (required$1.name === node.id.name) { - node._shouldRemove = true; - } - } - - if (!isStaticRequireStatement(node)) { return; } - - var required = getRequired(node); - - if (parent.type === 'ExpressionStatement') { - // is a bare import, e.g. `require('foo');` - magicString.remove(parent.start, parent.end); - } else { - required.importsDefault = true; - magicString.overwrite(node.start, node.end, required.name); - } - - node.callee._skip = true; - }, - - leave: function leave(node) { - programDepth -= 1; - if (node.scope) { scope = scope.parent; } - if (functionType.test(node.type)) { lexicalDepth -= 1; } - - if (node.type === 'VariableDeclaration') { - var keepDeclaration = false; - var c = node.declarations[0].start; - - for (var i = 0; i < node.declarations.length; i += 1) { - var declarator = node.declarations[i]; - - if (declarator._shouldRemove) { - magicString.remove(c, declarator.end); - } else { - if (!keepDeclaration) { - magicString.remove(c, declarator.start); - keepDeclaration = true; - } - - c = declarator.end; - } - } - - if (!keepDeclaration) { - magicString.remove(node.start, node.end); - } - } - } - }); - - if ( - !sources.length && - !uses.module && - !uses.exports && - !uses.require && - (ignoreGlobal || !uses.global) - ) { - if (Object.keys(namedExports).length) { - throw new Error( - ("Custom named exports were specified for " + id + " but it does not appear to be a CommonJS module") - ); - } - return null; // not a CommonJS module - } - - var includeHelpers = shouldWrap || uses.global || uses.require; - var importBlock = - (includeHelpers ? [("import * as " + HELPERS_NAME + " from '" + HELPERS_ID + "';")] : []) - .concat( - sources.map(function (source) { - // import the actual module before the proxy, so that we know - // what kind of proxy to build - return ("import '" + source + "';"); - }), - sources.map(function (source) { - var ref = required[source]; - var name = ref.name; - var importsDefault = ref.importsDefault; - return ("import " + (importsDefault ? (name + " from ") : "") + "'" + PROXY_PREFIX + source + "';"); - }) - ) - .join('\n') + '\n\n'; - - var namedExportDeclarations = []; - var wrapperStart = ''; - var wrapperEnd = ''; - - var moduleName = deconflict(scope, globals, getName(id)); - if (!isEntry) { - var exportModuleExports = { - str: ("export { " + moduleName + " as __moduleExports };"), - name: '__moduleExports' - }; - - namedExportDeclarations.push(exportModuleExports); - } - - var name = getName(id); - - function addExport(x) { - var deconflicted = deconflict(scope, globals, name); - - var declaration = - deconflicted === name - ? ("export var " + x + " = " + moduleName + "." + x + ";") - : ("var " + deconflicted + " = " + moduleName + "." + x + ";\nexport { " + deconflicted + " as " + x + " };"); - - namedExportDeclarations.push({ - str: declaration, - name: x - }); - } - - if (customNamedExports) { customNamedExports.forEach(addExport); } - - var defaultExportPropertyAssignments = []; - var hasDefaultExport = false; - - if (shouldWrap) { - var args = "module" + (uses.exports ? ', exports' : ''); - - wrapperStart = "var " + moduleName + " = " + HELPERS_NAME + ".createCommonjsModule(function (" + args + ") {\n"; - wrapperEnd = "\n});"; - } else { - var names = []; - - ast.body.forEach(function (node) { - if (node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression') { - var left = node.expression.left; - var flattened = flatten(left); - - if (!flattened) { return; } - - var match = exportsPattern.exec(flattened.keypath); - if (!match) { return; } - - if (flattened.keypath === 'module.exports') { - hasDefaultExport = true; - magicString.overwrite(left.start, left.end, ("var " + moduleName)); - } else { - var name = match[1]; - var deconflicted = deconflict(scope, globals, name); - - names.push({ name: name, deconflicted: deconflicted }); - - magicString.overwrite(node.start, left.end, ("var " + deconflicted)); - - var declaration = - name === deconflicted - ? ("export { " + name + " };") - : ("export { " + deconflicted + " as " + name + " };"); - - if (name !== 'default') { - namedExportDeclarations.push({ - str: declaration, - name: name - }); - delete namedExports[name]; - } - - defaultExportPropertyAssignments.push((moduleName + "." + name + " = " + deconflicted + ";")); - } - } - }); - - if (!hasDefaultExport) { - wrapperEnd = "\n\nvar " + moduleName + " = {\n" + (names - .map(function (ref) { - var name = ref.name; - var deconflicted = ref.deconflicted; - - return ("\t" + name + ": " + deconflicted); - }) - .join(',\n')) + "\n};"; - } - } - Object.keys(namedExports) - .filter(function (key) { return !blacklist[key]; }) - .forEach(addExport); - - var defaultExport = /__esModule/.test(code) - ? ("export default " + HELPERS_NAME + ".unwrapExports(" + moduleName + ");") - : ("export default " + moduleName + ";"); - - var named = namedExportDeclarations - .filter(function (x) { return x.name !== 'default' || !hasDefaultExport; }) - .map(function (x) { return x.str; }); - - var exportBlock = - '\n\n' + - [defaultExport] - .concat(named) - .concat(hasDefaultExport ? defaultExportPropertyAssignments : []) - .join('\n'); - - magicString - .trim() - .prepend(importBlock + wrapperStart) - .trim() - .append(wrapperEnd + exportBlock); - - code = magicString.toString(); - var map = sourceMap ? magicString.generateMap() : null; - - return { code: code, map: map }; -} - -function commonjs(options) { - if ( options === void 0 ) options = {}; - - var extensions = options.extensions || ['.js']; - var filter = rollupPluginutils.createFilter(options.include, options.exclude); - var ignoreGlobal = options.ignoreGlobal; - - var customNamedExports = {}; - if (options.namedExports) { - Object.keys(options.namedExports).forEach(function (id) { - var resolvedId; - - try { - resolvedId = resolve.sync(id, { basedir: process.cwd() }); - } catch (err) { - resolvedId = path.resolve(id); - } - - customNamedExports[resolvedId] = options.namedExports[id]; - }); - } - - var esModulesWithoutDefaultExport = Object.create(null); - var esModulesWithDefaultExport = Object.create(null); - var allowDynamicRequire = !!options.ignore; // TODO maybe this should be configurable? - - var ignoreRequire = - typeof options.ignore === 'function' - ? options.ignore - : Array.isArray(options.ignore) - ? function (id) { return options.ignore.includes(id); } - : function () { return false; }; - - var entryModuleIdsPromise = null; - - var resolveId = getResolveId(extensions); - - var sourceMap = options.sourceMap !== false; - - return { - name: 'commonjs', - - options: function options(options$1) { - resolveId.setRollupOptions(options$1); - var input = options$1.input || options$1.entry; - var entryModules = Array.isArray(input) - ? input - : typeof input === 'object' && input !== null - ? Object.values(input) - : [input]; - entryModuleIdsPromise = Promise.all(entryModules.map(function (entry) { return resolveId(entry); })); - }, - - resolveId: resolveId, - - load: function load(id) { - if (id === HELPERS_ID) { return HELPERS; } - - // generate proxy modules - if (id.startsWith(EXTERNAL_PREFIX)) { - var actualId = id.slice(EXTERNAL_PREFIX.length); - var name = getName(actualId); - - return ("import " + name + " from " + (JSON.stringify(actualId)) + "; export default " + name + ";"); - } - - if (id.startsWith(PROXY_PREFIX)) { - var actualId$1 = id.slice(PROXY_PREFIX.length); - var name$1 = getName(actualId$1); - - return getIsCjsPromise(actualId$1).then(function (isCjs) { - if (isCjs) - { return ("import { __moduleExports } from " + (JSON.stringify( - actualId$1 - )) + "; export default __moduleExports;"); } - else if (esModulesWithoutDefaultExport[actualId$1]) - { return ("import * as " + name$1 + " from " + (JSON.stringify(actualId$1)) + "; export default " + name$1 + ";"); } - else if (esModulesWithDefaultExport[actualId$1]) { - return ("export {default} from " + (JSON.stringify(actualId$1)) + ";"); - } else - { return ("import * as " + name$1 + " from " + (JSON.stringify( - actualId$1 - )) + "; import {getCjsExportFromNamespace} from \"" + HELPERS_ID + "\"; export default getCjsExportFromNamespace(" + name$1 + ")"); } - }); - } - }, - - transform: function transform(code, id) { - var this$1 = this; - - if (!filter(id) || extensions.indexOf(path.extname(id)) === -1) { - setIsCjsPromise(id, Promise.resolve(null)); - return null; - } - - var transformPromise = entryModuleIdsPromise - .then(function (entryModuleIds) { - var ref = checkEsModule(this$1.parse, code, id); - var isEsModule = ref.isEsModule; - var hasDefaultExport = ref.hasDefaultExport; - var ast = ref.ast; - if (isEsModule) { - (hasDefaultExport ? esModulesWithDefaultExport : esModulesWithoutDefaultExport)[ - id - ] = true; - return null; - } - - // it is not an ES module but it does not have CJS-specific elements. - if (!hasCjsKeywords(code, ignoreGlobal)) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - var transformed = transformCommonjs( - this$1.parse, - code, - id, - entryModuleIds.indexOf(id) !== -1, - ignoreGlobal, - ignoreRequire, - customNamedExports[id], - sourceMap, - allowDynamicRequire, - ast - ); - if (!transformed) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - return transformed; - }) - .catch(function (err) { - this$1.error(err, err.loc); - }); - - setIsCjsPromise(id, transformPromise.then(Boolean, function () { return false; })); - return transformPromise; - } - }; -} - -module.exports = commonjs; -//# sourceMappingURL=rollup-plugin-commonjs.cjs.js.map diff --git a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js.map b/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js.map deleted file mode 100644 index 38dc8560..00000000 --- a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rollup-plugin-commonjs.cjs.js","sources":["../src/helpers.js","../src/is-cjs.js","../src/default-resolver.js","../src/utils.js","../src/resolve-id.js","../src/ast-utils.js","../src/transform.js","../src/index.js"],"sourcesContent":["export const PROXY_PREFIX = '\\0commonjs-proxy-';\nexport const EXTERNAL_PREFIX = '\\0commonjs-external-';\nexport const HELPERS_ID = '\\0commonjsHelpers.js';\n\n// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.\n// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.\nexport const HELPERS = `\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nexport function unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nexport function getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}`;\n","const isCjsPromises = Object.create(null);\n\nexport function getIsCjsPromise(id) {\n\tlet isCjsPromise = isCjsPromises[id];\n\tif (isCjsPromise) return isCjsPromise.promise;\n\n\tconst promise = new Promise(resolve => {\n\t\tisCjsPromises[id] = isCjsPromise = {\n\t\t\tresolve,\n\t\t\tpromise: undefined\n\t\t};\n\t});\n\tisCjsPromise.promise = promise;\n\n\treturn promise;\n}\n\nexport function setIsCjsPromise(id, promise) {\n\tconst isCjsPromise = isCjsPromises[id];\n\tif (isCjsPromise) {\n\t\tif (isCjsPromise.resolve) {\n\t\t\tisCjsPromise.resolve(promise);\n\t\t\tisCjsPromise.resolve = undefined;\n\t\t}\n\t} else {\n\t\tisCjsPromises[id] = { promise, resolve: undefined };\n\t}\n}\n","import * as fs from 'fs';\nimport { dirname, resolve } from 'path';\n\nfunction isFile(file) {\n\ttry {\n\t\tconst stats = fs.statSync(file);\n\t\treturn stats.isFile();\n\t} catch (err) {\n\t\treturn false;\n\t}\n}\n\nfunction addJsExtensionIfNecessary(file) {\n\tif (isFile(file)) return file;\n\n\tfile += '.js';\n\tif (isFile(file)) return file;\n\n\treturn null;\n}\n\nconst absolutePath = /^(?:\\/|(?:[A-Za-z]:)?[\\\\|/])/;\n\nfunction isAbsolute(path) {\n\treturn absolutePath.test(path);\n}\n\nexport default function defaultResolver(importee, importer) {\n\t// absolute paths are left untouched\n\tif (isAbsolute(importee)) return addJsExtensionIfNecessary(resolve(importee));\n\n\t// if this is the entry point, resolve against cwd\n\tif (importer === undefined) return addJsExtensionIfNecessary(resolve(process.cwd(), importee));\n\n\t// external modules are skipped at this stage\n\tif (importee[0] !== '.') return null;\n\n\treturn addJsExtensionIfNecessary(resolve(dirname(importer), importee));\n}\n","import { basename, dirname, extname, sep } from 'path';\nimport { makeLegalIdentifier } from 'rollup-pluginutils';\n\nexport function getName(id) {\n\tconst name = makeLegalIdentifier(basename(id, extname(id)));\n\tif (name !== 'index') {\n\t\treturn name;\n\t} else {\n\t\tconst segments = dirname(id).split(sep);\n\t\treturn makeLegalIdentifier(segments[segments.length - 1]);\n\t}\n}\n\n// Return the first non-falsy result from an array of\n// maybe-sync, maybe-promise-returning functions\nexport function first(candidates) {\n\treturn function(...args) {\n\t\treturn candidates.reduce((promise, candidate) => {\n\t\t\treturn promise.then(result =>\n\t\t\t\tresult != null ? result : Promise.resolve(candidate.call(this, ...args))\n\t\t\t);\n\t\t}, Promise.resolve());\n\t};\n}\n","import { statSync } from 'fs';\nimport { dirname, resolve, sep } from 'path';\nimport defaultResolver from './default-resolver';\nimport { EXTERNAL_PREFIX, PROXY_PREFIX } from './helpers';\nimport { first } from './utils';\n\nfunction getCandidatesForExtension(resolved, extension) {\n\treturn [resolved + extension, resolved + `${sep}index${extension}`];\n}\n\nfunction getCandidates(resolved, extensions) {\n\treturn extensions.reduce(\n\t\t(paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),\n\t\t[resolved]\n\t);\n}\n\nexport function getResolveId(extensions) {\n\tlet resolveUsingOtherResolvers;\n\n\tfunction resolveId(importee, importer) {\n\t\tconst isProxyModule = importee.startsWith(PROXY_PREFIX);\n\t\tif (isProxyModule) {\n\t\t\timportee = importee.slice(PROXY_PREFIX.length);\n\t\t} else if (importee.startsWith('\\0')) {\n\t\t\treturn importee;\n\t\t}\n\n\t\tif (importer && importer.startsWith(PROXY_PREFIX)) {\n\t\t\timporter = importer.slice(PROXY_PREFIX.length);\n\t\t}\n\n\t\treturn resolveUsingOtherResolvers.call(this, importee, importer).then(resolved => {\n\t\t\tif (resolved) return isProxyModule ? PROXY_PREFIX + resolved : resolved;\n\n\t\t\tresolved = defaultResolver(importee, importer);\n\n\t\t\tif (isProxyModule) {\n\t\t\t\tif (resolved) return PROXY_PREFIX + resolved;\n\t\t\t\treturn EXTERNAL_PREFIX + importee; // external\n\t\t\t}\n\n\t\t\treturn resolved;\n\t\t});\n\t}\n\n\tresolveId.setRollupOptions = function(options) {\n\t\tconst resolvers = (options.plugins || [])\n\t\t\t.map(plugin => {\n\t\t\t\tif (plugin.resolveId === resolveId) {\n\t\t\t\t\t// substitute CommonJS resolution logic\n\t\t\t\t\treturn (importee, importer) => {\n\t\t\t\t\t\tif (importee[0] !== '.' || !importer) return; // not our problem\n\n\t\t\t\t\t\tconst resolved = resolve(dirname(importer), importee);\n\t\t\t\t\t\tconst candidates = getCandidates(resolved, extensions);\n\n\t\t\t\t\t\tfor (let i = 0; i < candidates.length; i += 1) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst stats = statSync(candidates[i]);\n\t\t\t\t\t\t\t\tif (stats.isFile()) return candidates[i];\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t/* noop */\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn plugin.resolveId;\n\t\t\t})\n\t\t\t.filter(Boolean);\n\n\t\tconst isExternal = id =>\n\t\t\toptions.external\n\t\t\t\t? Array.isArray(options.external)\n\t\t\t\t\t? options.external.includes(id)\n\t\t\t\t\t: options.external(id)\n\t\t\t\t: false;\n\n\t\tresolvers.unshift(id => (isExternal(id) ? false : null));\n\n\t\tresolveUsingOtherResolvers = first(resolvers);\n\t};\n\n\treturn resolveId;\n}\n","export function isReference(node, parent) {\n\tif (parent.type === 'MemberExpression') return parent.computed || node === parent.object;\n\n\t// disregard the `bar` in { bar: foo }\n\tif (parent.type === 'Property' && node !== parent.value) return false;\n\n\t// disregard the `bar` in `class Foo { bar () {...} }`\n\tif (parent.type === 'MethodDefinition') return false;\n\n\t// disregard the `bar` in `export { foo as bar }`\n\tif (parent.type === 'ExportSpecifier' && node !== parent.local) return false;\n\n\treturn true;\n}\n\nexport function flatten(node) {\n\tconst parts = [];\n\n\twhile (node.type === 'MemberExpression') {\n\t\tif (node.computed) return null;\n\n\t\tparts.unshift(node.property.name);\n\t\tnode = node.object;\n\t}\n\n\tif (node.type !== 'Identifier') return null;\n\n\tconst name = node.name;\n\tparts.unshift(name);\n\n\treturn { name, keypath: parts.join('.') };\n}\n\nexport function isTruthy(node) {\n\tif (node.type === 'Literal') return !!node.value;\n\tif (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);\n\tif (node.operator in operators) return operators[node.operator](node);\n}\n\nexport function isFalsy(node) {\n\treturn not(isTruthy(node));\n}\n\nfunction not(value) {\n\treturn value === undefined ? value : !value;\n}\n\nfunction equals(a, b, strict) {\n\tif (a.type !== b.type) return undefined;\n\tif (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;\n}\n\nconst operators = {\n\t'==': x => {\n\t\treturn equals(x.left, x.right, false);\n\t},\n\n\t'!=': x => not(operators['=='](x)),\n\n\t'===': x => {\n\t\treturn equals(x.left, x.right, true);\n\t},\n\n\t'!==': x => not(operators['==='](x)),\n\n\t'!': x => isFalsy(x.argument),\n\n\t'&&': x => isTruthy(x.left) && isTruthy(x.right),\n\n\t'||': x => isTruthy(x.left) || isTruthy(x.right)\n};\n","import { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { attachScopes, extractAssignedNames, makeLegalIdentifier } from 'rollup-pluginutils';\nimport { flatten, isFalsy, isReference, isTruthy } from './ast-utils.js';\nimport { HELPERS_ID, PROXY_PREFIX } from './helpers.js';\nimport { getName } from './utils.js';\n\nconst reserved = 'process location abstract arguments boolean break byte case catch char class const continue debugger default delete do double else enum eval export extends false final finally float for from function goto if implements import in instanceof int interface let long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var void volatile while with yield'.split(\n\t' '\n);\nconst blacklist = { __esModule: true };\nreserved.forEach(word => (blacklist[word] = true));\n\nconst exportsPattern = /^(?:module\\.)?exports(?:\\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;\n\nconst firstpassGlobal = /\\b(?:require|module|exports|global)\\b/;\nconst firstpassNoGlobal = /\\b(?:require|module|exports)\\b/;\nconst importExportDeclaration = /^(?:Import|Export(?:Named|Default))Declaration/;\nconst functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;\n\nfunction deconflict(scope, globals, identifier) {\n\tlet i = 1;\n\tlet deconflicted = identifier;\n\n\twhile (scope.contains(deconflicted) || globals.has(deconflicted) || deconflicted in blacklist)\n\t\tdeconflicted = `${identifier}_${i++}`;\n\tscope.declarations[deconflicted] = true;\n\n\treturn deconflicted;\n}\n\nfunction tryParse(parse, code, id) {\n\ttry {\n\t\treturn parse(code, { allowReturnOutsideFunction: true });\n\t} catch (err) {\n\t\terr.message += ` in ${id}`;\n\t\tthrow err;\n\t}\n}\n\nexport function hasCjsKeywords(code, ignoreGlobal) {\n\tconst firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;\n\treturn firstpass.test(code);\n}\n\nexport function checkEsModule(parse, code, id) {\n\tconst ast = tryParse(parse, code, id);\n\n\tlet isEsModule = false;\n\tfor (const node of ast.body) {\n\t\tif (node.type === 'ExportDefaultDeclaration')\n\t\t\treturn { isEsModule: true, hasDefaultExport: true, ast };\n\t\tif (node.type === 'ExportNamedDeclaration') {\n\t\t\tisEsModule = true;\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tif (specifier.exported.name === 'default') {\n\t\t\t\t\treturn { isEsModule: true, hasDefaultExport: true, ast };\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (importExportDeclaration.test(node.type)) isEsModule = true;\n\t}\n\n\treturn { isEsModule, hasDefaultExport: false, ast };\n}\n\nexport function transformCommonjs(\n\tparse,\n\tcode,\n\tid,\n\tisEntry,\n\tignoreGlobal,\n\tignoreRequire,\n\tcustomNamedExports,\n\tsourceMap,\n\tallowDynamicRequire,\n\tastCache\n) {\n\tconst ast = astCache || tryParse(parse, code, id);\n\n\tconst magicString = new MagicString(code);\n\n\tconst required = {};\n\t// Because objects have no guaranteed ordering, yet we need it,\n\t// we need to keep track of the order in a array\n\tconst sources = [];\n\n\tlet uid = 0;\n\n\tlet scope = attachScopes(ast, 'scope');\n\tconst uses = { module: false, exports: false, global: false, require: false };\n\n\tlet lexicalDepth = 0;\n\tlet programDepth = 0;\n\n\tconst globals = new Set();\n\n\tconst HELPERS_NAME = deconflict(scope, globals, 'commonjsHelpers'); // TODO technically wrong since globals isn't populated yet, but ¯\\_(ツ)_/¯\n\n\tconst namedExports = {};\n\n\t// TODO handle transpiled modules\n\tlet shouldWrap = /__esModule/.test(code);\n\n\tfunction isRequireStatement(node) {\n\t\tif (!node) return;\n\t\tif (node.type !== 'CallExpression') return;\n\t\tif (node.callee.name !== 'require' || scope.contains('require')) return;\n\t\tif (node.arguments.length === 0) return; // Weird case of require() without arguments\n\t\treturn true;\n\t}\n\n\tfunction hasDynamicArguments(node) {\n\t\treturn (\n\t\t\tnode.arguments.length > 1 ||\n\t\t\t(node.arguments[0].type !== 'Literal' &&\n\t\t\t\t(node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))\n\t\t);\n\t}\n\n\tfunction isStaticRequireStatement(node) {\n\t\tif (!isRequireStatement(node)) return;\n\t\tif (hasDynamicArguments(node)) return;\n\t\tif (ignoreRequire(node.arguments[0].value)) return;\n\t\treturn true;\n\t}\n\n\tfunction getRequireStringArg(node) {\n\t\treturn node.arguments[0].type === 'Literal'\n\t\t\t? node.arguments[0].value\n\t\t\t: node.arguments[0].quasis[0].value.cooked;\n\t}\n\n\tfunction getRequired(node, name) {\n\t\tconst sourceId = getRequireStringArg(node);\n\t\tconst existing = required[sourceId];\n\t\tif (existing === undefined) {\n\t\t\tif (!name) {\n\t\t\t\tdo name = `require$$${uid++}`;\n\t\t\t\twhile (scope.contains(name));\n\t\t\t}\n\n\t\t\tsources.push(sourceId);\n\t\t\trequired[sourceId] = { source: sourceId, name, importsDefault: false };\n\t\t}\n\n\t\treturn required[sourceId];\n\t}\n\n\t// do a first pass, see which names are assigned to. This is necessary to prevent\n\t// illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,\n\t// where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)\n\tconst assignedTo = new Set();\n\twalk(ast, {\n\t\tenter(node) {\n\t\t\tif (node.type !== 'AssignmentExpression') return;\n\t\t\tif (node.left.type === 'MemberExpression') return;\n\n\t\t\textractAssignedNames(node.left).forEach(name => {\n\t\t\t\tassignedTo.add(name);\n\t\t\t});\n\t\t}\n\t});\n\n\twalk(ast, {\n\t\tenter(node, parent) {\n\t\t\tif (sourceMap) {\n\t\t\t\tmagicString.addSourcemapLocation(node.start);\n\t\t\t\tmagicString.addSourcemapLocation(node.end);\n\t\t\t}\n\n\t\t\t// skip dead branches\n\t\t\tif (parent && (parent.type === 'IfStatement' || parent.type === 'ConditionalExpression')) {\n\t\t\t\tif (node === parent.consequent && isFalsy(parent.test)) return this.skip();\n\t\t\t\tif (node === parent.alternate && isTruthy(parent.test)) return this.skip();\n\t\t\t}\n\n\t\t\tif (node._skip) return this.skip();\n\n\t\t\tprogramDepth += 1;\n\n\t\t\tif (node.scope) scope = node.scope;\n\t\t\tif (functionType.test(node.type)) lexicalDepth += 1;\n\n\t\t\t// if toplevel return, we need to wrap it\n\t\t\tif (node.type === 'ReturnStatement' && lexicalDepth === 0) {\n\t\t\t\tshouldWrap = true;\n\t\t\t}\n\n\t\t\t// rewrite `this` as `commonjsHelpers.commonjsGlobal`\n\t\t\tif (node.type === 'ThisExpression' && lexicalDepth === 0) {\n\t\t\t\tuses.global = true;\n\t\t\t\tif (!ignoreGlobal)\n\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)\n\t\t\tif (node.type === 'UnaryExpression' && node.operator === 'typeof') {\n\t\t\t\tconst flattened = flatten(node.argument);\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tif (scope.contains(flattened.name)) return;\n\n\t\t\t\tif (\n\t\t\t\t\tflattened.keypath === 'module.exports' ||\n\t\t\t\t\tflattened.keypath === 'module' ||\n\t\t\t\t\tflattened.keypath === 'exports'\n\t\t\t\t) {\n\t\t\t\t\tmagicString.overwrite(node.start, node.end, `'object'`, { storeName: false });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// rewrite `require` (if not already handled) `global` and `define`, and handle free references to\n\t\t\t// `module` and `exports` as these mean we need to wrap the module in commonjsHelpers.createCommonjsModule\n\t\t\tif (node.type === 'Identifier') {\n\t\t\t\tif (isReference(node, parent) && !scope.contains(node.name)) {\n\t\t\t\t\tif (node.name in uses) {\n\t\t\t\t\t\tif (node.name === 'require') {\n\t\t\t\t\t\t\tif (allowDynamicRequire) return;\n\t\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n\t\t\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuses[node.name] = true;\n\t\t\t\t\t\tif (node.name === 'global' && !ignoreGlobal) {\n\t\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n\t\t\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if module or exports are used outside the context of an assignment\n\t\t\t\t\t\t// expression, we need to wrap the module\n\t\t\t\t\t\tif (node.name === 'module' || node.name === 'exports') {\n\t\t\t\t\t\t\tshouldWrap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.name === 'define') {\n\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, 'undefined', { storeName: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tglobals.add(node.name);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Is this an assignment to exports or module.exports?\n\t\t\tif (node.type === 'AssignmentExpression') {\n\t\t\t\tif (node.left.type !== 'MemberExpression') return;\n\n\t\t\t\tconst flattened = flatten(node.left);\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tif (scope.contains(flattened.name)) return;\n\n\t\t\t\tconst match = exportsPattern.exec(flattened.keypath);\n\t\t\t\tif (!match || flattened.keypath === 'exports') return;\n\n\t\t\t\tuses[flattened.name] = true;\n\n\t\t\t\t// we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –\n\t\t\t\t// if this isn't top-level, we'll need to wrap the module\n\t\t\t\tif (programDepth > 3) shouldWrap = true;\n\n\t\t\t\tnode.left._skip = true;\n\n\t\t\t\tif (flattened.keypath === 'module.exports' && node.right.type === 'ObjectExpression') {\n\t\t\t\t\treturn node.right.properties.forEach(prop => {\n\t\t\t\t\t\tif (prop.computed || prop.key.type !== 'Identifier') return;\n\t\t\t\t\t\tconst name = prop.key.name;\n\t\t\t\t\t\tif (name === makeLegalIdentifier(name)) namedExports[name] = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (match[1]) namedExports[match[1]] = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if this is `var x = require('x')`, we can do `import x from 'x'`\n\t\t\tif (\n\t\t\t\tnode.type === 'VariableDeclarator' &&\n\t\t\t\tnode.id.type === 'Identifier' &&\n\t\t\t\tisStaticRequireStatement(node.init)\n\t\t\t) {\n\t\t\t\t// for now, only do this for top-level requires. maybe fix this in future\n\t\t\t\tif (scope.parent) return;\n\n\t\t\t\t// edge case — CJS allows you to assign to imports. ES doesn't\n\t\t\t\tif (assignedTo.has(node.id.name)) return;\n\n\t\t\t\tconst required = getRequired(node.init, node.id.name);\n\t\t\t\trequired.importsDefault = true;\n\n\t\t\t\tif (required.name === node.id.name) {\n\t\t\t\t\tnode._shouldRemove = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isStaticRequireStatement(node)) return;\n\n\t\t\tconst required = getRequired(node);\n\n\t\t\tif (parent.type === 'ExpressionStatement') {\n\t\t\t\t// is a bare import, e.g. `require('foo');`\n\t\t\t\tmagicString.remove(parent.start, parent.end);\n\t\t\t} else {\n\t\t\t\trequired.importsDefault = true;\n\t\t\t\tmagicString.overwrite(node.start, node.end, required.name);\n\t\t\t}\n\n\t\t\tnode.callee._skip = true;\n\t\t},\n\n\t\tleave(node) {\n\t\t\tprogramDepth -= 1;\n\t\t\tif (node.scope) scope = scope.parent;\n\t\t\tif (functionType.test(node.type)) lexicalDepth -= 1;\n\n\t\t\tif (node.type === 'VariableDeclaration') {\n\t\t\t\tlet keepDeclaration = false;\n\t\t\t\tlet c = node.declarations[0].start;\n\n\t\t\t\tfor (let i = 0; i < node.declarations.length; i += 1) {\n\t\t\t\t\tconst declarator = node.declarations[i];\n\n\t\t\t\t\tif (declarator._shouldRemove) {\n\t\t\t\t\t\tmagicString.remove(c, declarator.end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!keepDeclaration) {\n\t\t\t\t\t\t\tmagicString.remove(c, declarator.start);\n\t\t\t\t\t\t\tkeepDeclaration = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc = declarator.end;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!keepDeclaration) {\n\t\t\t\t\tmagicString.remove(node.start, node.end);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t!sources.length &&\n\t\t!uses.module &&\n\t\t!uses.exports &&\n\t\t!uses.require &&\n\t\t(ignoreGlobal || !uses.global)\n\t) {\n\t\tif (Object.keys(namedExports).length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Custom named exports were specified for ${id} but it does not appear to be a CommonJS module`\n\t\t\t);\n\t\t}\n\t\treturn null; // not a CommonJS module\n\t}\n\n\tconst includeHelpers = shouldWrap || uses.global || uses.require;\n\tconst importBlock =\n\t\t(includeHelpers ? [`import * as ${HELPERS_NAME} from '${HELPERS_ID}';`] : [])\n\t\t\t.concat(\n\t\t\t\tsources.map(source => {\n\t\t\t\t\t// import the actual module before the proxy, so that we know\n\t\t\t\t\t// what kind of proxy to build\n\t\t\t\t\treturn `import '${source}';`;\n\t\t\t\t}),\n\t\t\t\tsources.map(source => {\n\t\t\t\t\tconst { name, importsDefault } = required[source];\n\t\t\t\t\treturn `import ${importsDefault ? `${name} from ` : ``}'${PROXY_PREFIX}${source}';`;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join('\\n') + '\\n\\n';\n\n\tconst namedExportDeclarations = [];\n\tlet wrapperStart = '';\n\tlet wrapperEnd = '';\n\n\tconst moduleName = deconflict(scope, globals, getName(id));\n\tif (!isEntry) {\n\t\tconst exportModuleExports = {\n\t\t\tstr: `export { ${moduleName} as __moduleExports };`,\n\t\t\tname: '__moduleExports'\n\t\t};\n\n\t\tnamedExportDeclarations.push(exportModuleExports);\n\t}\n\n\tconst name = getName(id);\n\n\tfunction addExport(x) {\n\t\tconst deconflicted = deconflict(scope, globals, name);\n\n\t\tconst declaration =\n\t\t\tdeconflicted === name\n\t\t\t\t? `export var ${x} = ${moduleName}.${x};`\n\t\t\t\t: `var ${deconflicted} = ${moduleName}.${x};\\nexport { ${deconflicted} as ${x} };`;\n\n\t\tnamedExportDeclarations.push({\n\t\t\tstr: declaration,\n\t\t\tname: x\n\t\t});\n\t}\n\n\tif (customNamedExports) customNamedExports.forEach(addExport);\n\n\tconst defaultExportPropertyAssignments = [];\n\tlet hasDefaultExport = false;\n\n\tif (shouldWrap) {\n\t\tconst args = `module${uses.exports ? ', exports' : ''}`;\n\n\t\twrapperStart = `var ${moduleName} = ${HELPERS_NAME}.createCommonjsModule(function (${args}) {\\n`;\n\t\twrapperEnd = `\\n});`;\n\t} else {\n\t\tconst names = [];\n\n\t\tast.body.forEach(node => {\n\t\t\tif (node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression') {\n\t\t\t\tconst left = node.expression.left;\n\t\t\t\tconst flattened = flatten(left);\n\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tconst match = exportsPattern.exec(flattened.keypath);\n\t\t\t\tif (!match) return;\n\n\t\t\t\tif (flattened.keypath === 'module.exports') {\n\t\t\t\t\thasDefaultExport = true;\n\t\t\t\t\tmagicString.overwrite(left.start, left.end, `var ${moduleName}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst name = match[1];\n\t\t\t\t\tconst deconflicted = deconflict(scope, globals, name);\n\n\t\t\t\t\tnames.push({ name, deconflicted });\n\n\t\t\t\t\tmagicString.overwrite(node.start, left.end, `var ${deconflicted}`);\n\n\t\t\t\t\tconst declaration =\n\t\t\t\t\t\tname === deconflicted\n\t\t\t\t\t\t\t? `export { ${name} };`\n\t\t\t\t\t\t\t: `export { ${deconflicted} as ${name} };`;\n\n\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\tnamedExportDeclarations.push({\n\t\t\t\t\t\t\tstr: declaration,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdelete namedExports[name];\n\t\t\t\t\t}\n\n\t\t\t\t\tdefaultExportPropertyAssignments.push(`${moduleName}.${name} = ${deconflicted};`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (!hasDefaultExport) {\n\t\t\twrapperEnd = `\\n\\nvar ${moduleName} = {\\n${names\n\t\t\t\t.map(({ name, deconflicted }) => `\\t${name}: ${deconflicted}`)\n\t\t\t\t.join(',\\n')}\\n};`;\n\t\t}\n\t}\n\tObject.keys(namedExports)\n\t\t.filter(key => !blacklist[key])\n\t\t.forEach(addExport);\n\n\tconst defaultExport = /__esModule/.test(code)\n\t\t? `export default ${HELPERS_NAME}.unwrapExports(${moduleName});`\n\t\t: `export default ${moduleName};`;\n\n\tconst named = namedExportDeclarations\n\t\t.filter(x => x.name !== 'default' || !hasDefaultExport)\n\t\t.map(x => x.str);\n\n\tconst exportBlock =\n\t\t'\\n\\n' +\n\t\t[defaultExport]\n\t\t\t.concat(named)\n\t\t\t.concat(hasDefaultExport ? defaultExportPropertyAssignments : [])\n\t\t\t.join('\\n');\n\n\tmagicString\n\t\t.trim()\n\t\t.prepend(importBlock + wrapperStart)\n\t\t.trim()\n\t\t.append(wrapperEnd + exportBlock);\n\n\tcode = magicString.toString();\n\tconst map = sourceMap ? magicString.generateMap() : null;\n\n\treturn { code, map };\n}\n","import { extname, resolve } from 'path';\nimport { sync as nodeResolveSync } from 'resolve';\nimport { createFilter } from 'rollup-pluginutils';\nimport { EXTERNAL_PREFIX, HELPERS, HELPERS_ID, PROXY_PREFIX } from './helpers.js';\nimport { getIsCjsPromise, setIsCjsPromise } from './is-cjs';\nimport { getResolveId } from './resolve-id';\nimport { checkEsModule, hasCjsKeywords, transformCommonjs } from './transform.js';\nimport { getName } from './utils.js';\n\nexport default function commonjs(options = {}) {\n\tconst extensions = options.extensions || ['.js'];\n\tconst filter = createFilter(options.include, options.exclude);\n\tconst ignoreGlobal = options.ignoreGlobal;\n\n\tconst customNamedExports = {};\n\tif (options.namedExports) {\n\t\tObject.keys(options.namedExports).forEach(id => {\n\t\t\tlet resolvedId;\n\n\t\t\ttry {\n\t\t\t\tresolvedId = nodeResolveSync(id, { basedir: process.cwd() });\n\t\t\t} catch (err) {\n\t\t\t\tresolvedId = resolve(id);\n\t\t\t}\n\n\t\t\tcustomNamedExports[resolvedId] = options.namedExports[id];\n\t\t});\n\t}\n\n\tconst esModulesWithoutDefaultExport = Object.create(null);\n\tconst esModulesWithDefaultExport = Object.create(null);\n\tconst allowDynamicRequire = !!options.ignore; // TODO maybe this should be configurable?\n\n\tconst ignoreRequire =\n\t\ttypeof options.ignore === 'function'\n\t\t\t? options.ignore\n\t\t\t: Array.isArray(options.ignore)\n\t\t\t\t? id => options.ignore.includes(id)\n\t\t\t\t: () => false;\n\n\tlet entryModuleIdsPromise = null;\n\n\tconst resolveId = getResolveId(extensions);\n\n\tconst sourceMap = options.sourceMap !== false;\n\n\treturn {\n\t\tname: 'commonjs',\n\n\t\toptions(options) {\n\t\t\tresolveId.setRollupOptions(options);\n\t\t\tconst input = options.input || options.entry;\n\t\t\tconst entryModules = Array.isArray(input)\n\t\t\t\t? input\n\t\t\t\t: typeof input === 'object' && input !== null\n\t\t\t\t\t? Object.values(input)\n\t\t\t\t\t: [input];\n\t\t\tentryModuleIdsPromise = Promise.all(entryModules.map(entry => resolveId(entry)));\n\t\t},\n\n\t\tresolveId,\n\n\t\tload(id) {\n\t\t\tif (id === HELPERS_ID) return HELPERS;\n\n\t\t\t// generate proxy modules\n\t\t\tif (id.startsWith(EXTERNAL_PREFIX)) {\n\t\t\t\tconst actualId = id.slice(EXTERNAL_PREFIX.length);\n\t\t\t\tconst name = getName(actualId);\n\n\t\t\t\treturn `import ${name} from ${JSON.stringify(actualId)}; export default ${name};`;\n\t\t\t}\n\n\t\t\tif (id.startsWith(PROXY_PREFIX)) {\n\t\t\t\tconst actualId = id.slice(PROXY_PREFIX.length);\n\t\t\t\tconst name = getName(actualId);\n\n\t\t\t\treturn getIsCjsPromise(actualId).then(isCjs => {\n\t\t\t\t\tif (isCjs)\n\t\t\t\t\t\treturn `import { __moduleExports } from ${JSON.stringify(\n\t\t\t\t\t\t\tactualId\n\t\t\t\t\t\t)}; export default __moduleExports;`;\n\t\t\t\t\telse if (esModulesWithoutDefaultExport[actualId])\n\t\t\t\t\t\treturn `import * as ${name} from ${JSON.stringify(actualId)}; export default ${name};`;\n\t\t\t\t\telse if (esModulesWithDefaultExport[actualId]) {\n\t\t\t\t\t\treturn `export {default} from ${JSON.stringify(actualId)};`;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn `import * as ${name} from ${JSON.stringify(\n\t\t\t\t\t\t\tactualId\n\t\t\t\t\t\t)}; import {getCjsExportFromNamespace} from \"${HELPERS_ID}\"; export default getCjsExportFromNamespace(${name})`;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\ttransform(code, id) {\n\t\t\tif (!filter(id) || extensions.indexOf(extname(id)) === -1) {\n\t\t\t\tsetIsCjsPromise(id, Promise.resolve(null));\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst transformPromise = entryModuleIdsPromise\n\t\t\t\t.then(entryModuleIds => {\n\t\t\t\t\tconst { isEsModule, hasDefaultExport, ast } = checkEsModule(this.parse, code, id);\n\t\t\t\t\tif (isEsModule) {\n\t\t\t\t\t\t(hasDefaultExport ? esModulesWithDefaultExport : esModulesWithoutDefaultExport)[\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// it is not an ES module but it does not have CJS-specific elements.\n\t\t\t\t\tif (!hasCjsKeywords(code, ignoreGlobal)) {\n\t\t\t\t\t\tesModulesWithoutDefaultExport[id] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst transformed = transformCommonjs(\n\t\t\t\t\t\tthis.parse,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tentryModuleIds.indexOf(id) !== -1,\n\t\t\t\t\t\tignoreGlobal,\n\t\t\t\t\t\tignoreRequire,\n\t\t\t\t\t\tcustomNamedExports[id],\n\t\t\t\t\t\tsourceMap,\n\t\t\t\t\t\tallowDynamicRequire,\n\t\t\t\t\t\tast\n\t\t\t\t\t);\n\t\t\t\t\tif (!transformed) {\n\t\t\t\t\t\tesModulesWithoutDefaultExport[id] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn transformed;\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tthis.error(err, err.loc);\n\t\t\t\t});\n\n\t\t\tsetIsCjsPromise(id, transformPromise.then(Boolean, () => false));\n\t\t\treturn transformPromise;\n\t\t}\n\t};\n}\n"],"names":["const","let","fs.statSync","resolve","dirname","makeLegalIdentifier","basename","extname","sep","this","statSync","attachScopes","walk","extractAssignedNames","flattened","required","createFilter","nodeResolveSync","options","actualId","name"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js b/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js deleted file mode 100644 index a75a6d0c..00000000 --- a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js +++ /dev/null @@ -1,905 +0,0 @@ -import { resolve, dirname, basename, extname, sep } from 'path'; -import { sync } from 'resolve'; -import { makeLegalIdentifier, attachScopes, extractAssignedNames, createFilter } from 'rollup-pluginutils'; -import { statSync } from 'fs'; -import { walk } from 'estree-walker'; -import MagicString from 'magic-string'; - -var PROXY_PREFIX = '\0commonjs-proxy-'; -var EXTERNAL_PREFIX = '\0commonjs-external-'; -var HELPERS_ID = '\0commonjsHelpers.js'; - -// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers. -// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled. -var HELPERS = "\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nexport function unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nexport function getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}"; - -var isCjsPromises = Object.create(null); - -function getIsCjsPromise(id) { - var isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) { return isCjsPromise.promise; } - - var promise = new Promise(function (resolve) { - isCjsPromises[id] = isCjsPromise = { - resolve: resolve, - promise: undefined - }; - }); - isCjsPromise.promise = promise; - - return promise; -} - -function setIsCjsPromise(id, promise) { - var isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) { - if (isCjsPromise.resolve) { - isCjsPromise.resolve(promise); - isCjsPromise.resolve = undefined; - } - } else { - isCjsPromises[id] = { promise: promise, resolve: undefined }; - } -} - -function isFile(file) { - try { - var stats = statSync(file); - return stats.isFile(); - } catch (err) { - return false; - } -} - -function addJsExtensionIfNecessary(file) { - if (isFile(file)) { return file; } - - file += '.js'; - if (isFile(file)) { return file; } - - return null; -} - -var absolutePath = /^(?:\/|(?:[A-Za-z]:)?[\\|/])/; - -function isAbsolute(path) { - return absolutePath.test(path); -} - -function defaultResolver(importee, importer) { - // absolute paths are left untouched - if (isAbsolute(importee)) { return addJsExtensionIfNecessary(resolve(importee)); } - - // if this is the entry point, resolve against cwd - if (importer === undefined) { return addJsExtensionIfNecessary(resolve(process.cwd(), importee)); } - - // external modules are skipped at this stage - if (importee[0] !== '.') { return null; } - - return addJsExtensionIfNecessary(resolve(dirname(importer), importee)); -} - -function getName(id) { - var name = makeLegalIdentifier(basename(id, extname(id))); - if (name !== 'index') { - return name; - } else { - var segments = dirname(id).split(sep); - return makeLegalIdentifier(segments[segments.length - 1]); - } -} - -// Return the first non-falsy result from an array of -// maybe-sync, maybe-promise-returning functions -function first(candidates) { - return function() { - var this$1 = this; - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return candidates.reduce(function (promise, candidate) { - return promise.then(function (result) { return result != null ? result : Promise.resolve(candidate.call.apply(candidate, [ this$1 ].concat( args ))); } - ); - }, Promise.resolve()); - }; -} - -function getCandidatesForExtension(resolved, extension) { - return [resolved + extension, resolved + sep + "index" + extension]; -} - -function getCandidates(resolved, extensions) { - return extensions.reduce( - function (paths, extension) { return paths.concat(getCandidatesForExtension(resolved, extension)); }, - [resolved] - ); -} - -function getResolveId(extensions) { - var resolveUsingOtherResolvers; - - function resolveId(importee, importer) { - var isProxyModule = importee.startsWith(PROXY_PREFIX); - if (isProxyModule) { - importee = importee.slice(PROXY_PREFIX.length); - } else if (importee.startsWith('\0')) { - return importee; - } - - if (importer && importer.startsWith(PROXY_PREFIX)) { - importer = importer.slice(PROXY_PREFIX.length); - } - - return resolveUsingOtherResolvers.call(this, importee, importer).then(function (resolved) { - if (resolved) { return isProxyModule ? PROXY_PREFIX + resolved : resolved; } - - resolved = defaultResolver(importee, importer); - - if (isProxyModule) { - if (resolved) { return PROXY_PREFIX + resolved; } - return EXTERNAL_PREFIX + importee; // external - } - - return resolved; - }); - } - - resolveId.setRollupOptions = function(options) { - var resolvers = (options.plugins || []) - .map(function (plugin) { - if (plugin.resolveId === resolveId) { - // substitute CommonJS resolution logic - return function (importee, importer) { - if (importee[0] !== '.' || !importer) { return; } // not our problem - - var resolved = resolve(dirname(importer), importee); - var candidates = getCandidates(resolved, extensions); - - for (var i = 0; i < candidates.length; i += 1) { - try { - var stats = statSync(candidates[i]); - if (stats.isFile()) { return candidates[i]; } - } catch (err) { - /* noop */ - } - } - }; - } - - return plugin.resolveId; - }) - .filter(Boolean); - - var isExternal = function (id) { return options.external - ? Array.isArray(options.external) - ? options.external.includes(id) - : options.external(id) - : false; }; - - resolvers.unshift(function (id) { return (isExternal(id) ? false : null); }); - - resolveUsingOtherResolvers = first(resolvers); - }; - - return resolveId; -} - -function isReference(node, parent) { - if (parent.type === 'MemberExpression') { return parent.computed || node === parent.object; } - - // disregard the `bar` in { bar: foo } - if (parent.type === 'Property' && node !== parent.value) { return false; } - - // disregard the `bar` in `class Foo { bar () {...} }` - if (parent.type === 'MethodDefinition') { return false; } - - // disregard the `bar` in `export { foo as bar }` - if (parent.type === 'ExportSpecifier' && node !== parent.local) { return false; } - - return true; -} - -function flatten(node) { - var parts = []; - - while (node.type === 'MemberExpression') { - if (node.computed) { return null; } - - parts.unshift(node.property.name); - node = node.object; - } - - if (node.type !== 'Identifier') { return null; } - - var name = node.name; - parts.unshift(name); - - return { name: name, keypath: parts.join('.') }; -} - -function isTruthy(node) { - if (node.type === 'Literal') { return !!node.value; } - if (node.type === 'ParenthesizedExpression') { return isTruthy(node.expression); } - if (node.operator in operators) { return operators[node.operator](node); } -} - -function isFalsy(node) { - return not(isTruthy(node)); -} - -function not(value) { - return value === undefined ? value : !value; -} - -function equals(a, b, strict) { - if (a.type !== b.type) { return undefined; } - if (a.type === 'Literal') { return strict ? a.value === b.value : a.value == b.value; } -} - -var operators = { - '==': function (x) { - return equals(x.left, x.right, false); - }, - - '!=': function (x) { return not(operators['=='](x)); }, - - '===': function (x) { - return equals(x.left, x.right, true); - }, - - '!==': function (x) { return not(operators['==='](x)); }, - - '!': function (x) { return isFalsy(x.argument); }, - - '&&': function (x) { return isTruthy(x.left) && isTruthy(x.right); }, - - '||': function (x) { return isTruthy(x.left) || isTruthy(x.right); } -}; - -var reserved = 'process location abstract arguments boolean break byte case catch char class const continue debugger default delete do double else enum eval export extends false final finally float for from function goto if implements import in instanceof int interface let long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var void volatile while with yield'.split( - ' ' -); -var blacklist = { __esModule: true }; -reserved.forEach(function (word) { return (blacklist[word] = true); }); - -var exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; - -var firstpassGlobal = /\b(?:require|module|exports|global)\b/; -var firstpassNoGlobal = /\b(?:require|module|exports)\b/; -var importExportDeclaration = /^(?:Import|Export(?:Named|Default))Declaration/; -var functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; - -function deconflict(scope, globals, identifier) { - var i = 1; - var deconflicted = identifier; - - while (scope.contains(deconflicted) || globals.has(deconflicted) || deconflicted in blacklist) - { deconflicted = identifier + "_" + (i++); } - scope.declarations[deconflicted] = true; - - return deconflicted; -} - -function tryParse(parse, code, id) { - try { - return parse(code, { allowReturnOutsideFunction: true }); - } catch (err) { - err.message += " in " + id; - throw err; - } -} - -function hasCjsKeywords(code, ignoreGlobal) { - var firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; - return firstpass.test(code); -} - -function checkEsModule(parse, code, id) { - var ast = tryParse(parse, code, id); - - var isEsModule = false; - for (var i$1 = 0, list$1 = ast.body; i$1 < list$1.length; i$1 += 1) { - var node = list$1[i$1]; - - if (node.type === 'ExportDefaultDeclaration') - { return { isEsModule: true, hasDefaultExport: true, ast: ast }; } - if (node.type === 'ExportNamedDeclaration') { - isEsModule = true; - for (var i = 0, list = node.specifiers; i < list.length; i += 1) { - var specifier = list[i]; - - if (specifier.exported.name === 'default') { - return { isEsModule: true, hasDefaultExport: true, ast: ast }; - } - } - } else if (importExportDeclaration.test(node.type)) { isEsModule = true; } - } - - return { isEsModule: isEsModule, hasDefaultExport: false, ast: ast }; -} - -function transformCommonjs( - parse, - code, - id, - isEntry, - ignoreGlobal, - ignoreRequire, - customNamedExports, - sourceMap, - allowDynamicRequire, - astCache -) { - var ast = astCache || tryParse(parse, code, id); - - var magicString = new MagicString(code); - - var required = {}; - // Because objects have no guaranteed ordering, yet we need it, - // we need to keep track of the order in a array - var sources = []; - - var uid = 0; - - var scope = attachScopes(ast, 'scope'); - var uses = { module: false, exports: false, global: false, require: false }; - - var lexicalDepth = 0; - var programDepth = 0; - - var globals = new Set(); - - var HELPERS_NAME = deconflict(scope, globals, 'commonjsHelpers'); // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ - - var namedExports = {}; - - // TODO handle transpiled modules - var shouldWrap = /__esModule/.test(code); - - function isRequireStatement(node) { - if (!node) { return; } - if (node.type !== 'CallExpression') { return; } - if (node.callee.name !== 'require' || scope.contains('require')) { return; } - if (node.arguments.length === 0) { return; } // Weird case of require() without arguments - return true; - } - - function hasDynamicArguments(node) { - return ( - node.arguments.length > 1 || - (node.arguments[0].type !== 'Literal' && - (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0)) - ); - } - - function isStaticRequireStatement(node) { - if (!isRequireStatement(node)) { return; } - if (hasDynamicArguments(node)) { return; } - if (ignoreRequire(node.arguments[0].value)) { return; } - return true; - } - - function getRequireStringArg(node) { - return node.arguments[0].type === 'Literal' - ? node.arguments[0].value - : node.arguments[0].quasis[0].value.cooked; - } - - function getRequired(node, name) { - var sourceId = getRequireStringArg(node); - var existing = required[sourceId]; - if (existing === undefined) { - if (!name) { - do { name = "require$$" + (uid++); } - while (scope.contains(name)); - } - - sources.push(sourceId); - required[sourceId] = { source: sourceId, name: name, importsDefault: false }; - } - - return required[sourceId]; - } - - // do a first pass, see which names are assigned to. This is necessary to prevent - // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`, - // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) - var assignedTo = new Set(); - walk(ast, { - enter: function enter(node) { - if (node.type !== 'AssignmentExpression') { return; } - if (node.left.type === 'MemberExpression') { return; } - - extractAssignedNames(node.left).forEach(function (name) { - assignedTo.add(name); - }); - } - }); - - walk(ast, { - enter: function enter(node, parent) { - if (sourceMap) { - magicString.addSourcemapLocation(node.start); - magicString.addSourcemapLocation(node.end); - } - - // skip dead branches - if (parent && (parent.type === 'IfStatement' || parent.type === 'ConditionalExpression')) { - if (node === parent.consequent && isFalsy(parent.test)) { return this.skip(); } - if (node === parent.alternate && isTruthy(parent.test)) { return this.skip(); } - } - - if (node._skip) { return this.skip(); } - - programDepth += 1; - - if (node.scope) { scope = node.scope; } - if (functionType.test(node.type)) { lexicalDepth += 1; } - - // if toplevel return, we need to wrap it - if (node.type === 'ReturnStatement' && lexicalDepth === 0) { - shouldWrap = true; - } - - // rewrite `this` as `commonjsHelpers.commonjsGlobal` - if (node.type === 'ThisExpression' && lexicalDepth === 0) { - uses.global = true; - if (!ignoreGlobal) - { magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsGlobal"), { - storeName: true - }); } - return; - } - - // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151) - if (node.type === 'UnaryExpression' && node.operator === 'typeof') { - var flattened = flatten(node.argument); - if (!flattened) { return; } - - if (scope.contains(flattened.name)) { return; } - - if ( - flattened.keypath === 'module.exports' || - flattened.keypath === 'module' || - flattened.keypath === 'exports' - ) { - magicString.overwrite(node.start, node.end, "'object'", { storeName: false }); - } - } - - // rewrite `require` (if not already handled) `global` and `define`, and handle free references to - // `module` and `exports` as these mean we need to wrap the module in commonjsHelpers.createCommonjsModule - if (node.type === 'Identifier') { - if (isReference(node, parent) && !scope.contains(node.name)) { - if (node.name in uses) { - if (node.name === 'require') { - if (allowDynamicRequire) { return; } - magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsRequire"), { - storeName: true - }); - } - - uses[node.name] = true; - if (node.name === 'global' && !ignoreGlobal) { - magicString.overwrite(node.start, node.end, (HELPERS_NAME + ".commonjsGlobal"), { - storeName: true - }); - } - - // if module or exports are used outside the context of an assignment - // expression, we need to wrap the module - if (node.name === 'module' || node.name === 'exports') { - shouldWrap = true; - } - } - - if (node.name === 'define') { - magicString.overwrite(node.start, node.end, 'undefined', { storeName: true }); - } - - globals.add(node.name); - } - - return; - } - - // Is this an assignment to exports or module.exports? - if (node.type === 'AssignmentExpression') { - if (node.left.type !== 'MemberExpression') { return; } - - var flattened$1 = flatten(node.left); - if (!flattened$1) { return; } - - if (scope.contains(flattened$1.name)) { return; } - - var match = exportsPattern.exec(flattened$1.keypath); - if (!match || flattened$1.keypath === 'exports') { return; } - - uses[flattened$1.name] = true; - - // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` – - // if this isn't top-level, we'll need to wrap the module - if (programDepth > 3) { shouldWrap = true; } - - node.left._skip = true; - - if (flattened$1.keypath === 'module.exports' && node.right.type === 'ObjectExpression') { - return node.right.properties.forEach(function (prop) { - if (prop.computed || prop.key.type !== 'Identifier') { return; } - var name = prop.key.name; - if (name === makeLegalIdentifier(name)) { namedExports[name] = true; } - }); - } - - if (match[1]) { namedExports[match[1]] = true; } - return; - } - - // if this is `var x = require('x')`, we can do `import x from 'x'` - if ( - node.type === 'VariableDeclarator' && - node.id.type === 'Identifier' && - isStaticRequireStatement(node.init) - ) { - // for now, only do this for top-level requires. maybe fix this in future - if (scope.parent) { return; } - - // edge case — CJS allows you to assign to imports. ES doesn't - if (assignedTo.has(node.id.name)) { return; } - - var required$1 = getRequired(node.init, node.id.name); - required$1.importsDefault = true; - - if (required$1.name === node.id.name) { - node._shouldRemove = true; - } - } - - if (!isStaticRequireStatement(node)) { return; } - - var required = getRequired(node); - - if (parent.type === 'ExpressionStatement') { - // is a bare import, e.g. `require('foo');` - magicString.remove(parent.start, parent.end); - } else { - required.importsDefault = true; - magicString.overwrite(node.start, node.end, required.name); - } - - node.callee._skip = true; - }, - - leave: function leave(node) { - programDepth -= 1; - if (node.scope) { scope = scope.parent; } - if (functionType.test(node.type)) { lexicalDepth -= 1; } - - if (node.type === 'VariableDeclaration') { - var keepDeclaration = false; - var c = node.declarations[0].start; - - for (var i = 0; i < node.declarations.length; i += 1) { - var declarator = node.declarations[i]; - - if (declarator._shouldRemove) { - magicString.remove(c, declarator.end); - } else { - if (!keepDeclaration) { - magicString.remove(c, declarator.start); - keepDeclaration = true; - } - - c = declarator.end; - } - } - - if (!keepDeclaration) { - magicString.remove(node.start, node.end); - } - } - } - }); - - if ( - !sources.length && - !uses.module && - !uses.exports && - !uses.require && - (ignoreGlobal || !uses.global) - ) { - if (Object.keys(namedExports).length) { - throw new Error( - ("Custom named exports were specified for " + id + " but it does not appear to be a CommonJS module") - ); - } - return null; // not a CommonJS module - } - - var includeHelpers = shouldWrap || uses.global || uses.require; - var importBlock = - (includeHelpers ? [("import * as " + HELPERS_NAME + " from '" + HELPERS_ID + "';")] : []) - .concat( - sources.map(function (source) { - // import the actual module before the proxy, so that we know - // what kind of proxy to build - return ("import '" + source + "';"); - }), - sources.map(function (source) { - var ref = required[source]; - var name = ref.name; - var importsDefault = ref.importsDefault; - return ("import " + (importsDefault ? (name + " from ") : "") + "'" + PROXY_PREFIX + source + "';"); - }) - ) - .join('\n') + '\n\n'; - - var namedExportDeclarations = []; - var wrapperStart = ''; - var wrapperEnd = ''; - - var moduleName = deconflict(scope, globals, getName(id)); - if (!isEntry) { - var exportModuleExports = { - str: ("export { " + moduleName + " as __moduleExports };"), - name: '__moduleExports' - }; - - namedExportDeclarations.push(exportModuleExports); - } - - var name = getName(id); - - function addExport(x) { - var deconflicted = deconflict(scope, globals, name); - - var declaration = - deconflicted === name - ? ("export var " + x + " = " + moduleName + "." + x + ";") - : ("var " + deconflicted + " = " + moduleName + "." + x + ";\nexport { " + deconflicted + " as " + x + " };"); - - namedExportDeclarations.push({ - str: declaration, - name: x - }); - } - - if (customNamedExports) { customNamedExports.forEach(addExport); } - - var defaultExportPropertyAssignments = []; - var hasDefaultExport = false; - - if (shouldWrap) { - var args = "module" + (uses.exports ? ', exports' : ''); - - wrapperStart = "var " + moduleName + " = " + HELPERS_NAME + ".createCommonjsModule(function (" + args + ") {\n"; - wrapperEnd = "\n});"; - } else { - var names = []; - - ast.body.forEach(function (node) { - if (node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression') { - var left = node.expression.left; - var flattened = flatten(left); - - if (!flattened) { return; } - - var match = exportsPattern.exec(flattened.keypath); - if (!match) { return; } - - if (flattened.keypath === 'module.exports') { - hasDefaultExport = true; - magicString.overwrite(left.start, left.end, ("var " + moduleName)); - } else { - var name = match[1]; - var deconflicted = deconflict(scope, globals, name); - - names.push({ name: name, deconflicted: deconflicted }); - - magicString.overwrite(node.start, left.end, ("var " + deconflicted)); - - var declaration = - name === deconflicted - ? ("export { " + name + " };") - : ("export { " + deconflicted + " as " + name + " };"); - - if (name !== 'default') { - namedExportDeclarations.push({ - str: declaration, - name: name - }); - delete namedExports[name]; - } - - defaultExportPropertyAssignments.push((moduleName + "." + name + " = " + deconflicted + ";")); - } - } - }); - - if (!hasDefaultExport) { - wrapperEnd = "\n\nvar " + moduleName + " = {\n" + (names - .map(function (ref) { - var name = ref.name; - var deconflicted = ref.deconflicted; - - return ("\t" + name + ": " + deconflicted); - }) - .join(',\n')) + "\n};"; - } - } - Object.keys(namedExports) - .filter(function (key) { return !blacklist[key]; }) - .forEach(addExport); - - var defaultExport = /__esModule/.test(code) - ? ("export default " + HELPERS_NAME + ".unwrapExports(" + moduleName + ");") - : ("export default " + moduleName + ";"); - - var named = namedExportDeclarations - .filter(function (x) { return x.name !== 'default' || !hasDefaultExport; }) - .map(function (x) { return x.str; }); - - var exportBlock = - '\n\n' + - [defaultExport] - .concat(named) - .concat(hasDefaultExport ? defaultExportPropertyAssignments : []) - .join('\n'); - - magicString - .trim() - .prepend(importBlock + wrapperStart) - .trim() - .append(wrapperEnd + exportBlock); - - code = magicString.toString(); - var map = sourceMap ? magicString.generateMap() : null; - - return { code: code, map: map }; -} - -function commonjs(options) { - if ( options === void 0 ) options = {}; - - var extensions = options.extensions || ['.js']; - var filter = createFilter(options.include, options.exclude); - var ignoreGlobal = options.ignoreGlobal; - - var customNamedExports = {}; - if (options.namedExports) { - Object.keys(options.namedExports).forEach(function (id) { - var resolvedId; - - try { - resolvedId = sync(id, { basedir: process.cwd() }); - } catch (err) { - resolvedId = resolve(id); - } - - customNamedExports[resolvedId] = options.namedExports[id]; - }); - } - - var esModulesWithoutDefaultExport = Object.create(null); - var esModulesWithDefaultExport = Object.create(null); - var allowDynamicRequire = !!options.ignore; // TODO maybe this should be configurable? - - var ignoreRequire = - typeof options.ignore === 'function' - ? options.ignore - : Array.isArray(options.ignore) - ? function (id) { return options.ignore.includes(id); } - : function () { return false; }; - - var entryModuleIdsPromise = null; - - var resolveId = getResolveId(extensions); - - var sourceMap = options.sourceMap !== false; - - return { - name: 'commonjs', - - options: function options(options$1) { - resolveId.setRollupOptions(options$1); - var input = options$1.input || options$1.entry; - var entryModules = Array.isArray(input) - ? input - : typeof input === 'object' && input !== null - ? Object.values(input) - : [input]; - entryModuleIdsPromise = Promise.all(entryModules.map(function (entry) { return resolveId(entry); })); - }, - - resolveId: resolveId, - - load: function load(id) { - if (id === HELPERS_ID) { return HELPERS; } - - // generate proxy modules - if (id.startsWith(EXTERNAL_PREFIX)) { - var actualId = id.slice(EXTERNAL_PREFIX.length); - var name = getName(actualId); - - return ("import " + name + " from " + (JSON.stringify(actualId)) + "; export default " + name + ";"); - } - - if (id.startsWith(PROXY_PREFIX)) { - var actualId$1 = id.slice(PROXY_PREFIX.length); - var name$1 = getName(actualId$1); - - return getIsCjsPromise(actualId$1).then(function (isCjs) { - if (isCjs) - { return ("import { __moduleExports } from " + (JSON.stringify( - actualId$1 - )) + "; export default __moduleExports;"); } - else if (esModulesWithoutDefaultExport[actualId$1]) - { return ("import * as " + name$1 + " from " + (JSON.stringify(actualId$1)) + "; export default " + name$1 + ";"); } - else if (esModulesWithDefaultExport[actualId$1]) { - return ("export {default} from " + (JSON.stringify(actualId$1)) + ";"); - } else - { return ("import * as " + name$1 + " from " + (JSON.stringify( - actualId$1 - )) + "; import {getCjsExportFromNamespace} from \"" + HELPERS_ID + "\"; export default getCjsExportFromNamespace(" + name$1 + ")"); } - }); - } - }, - - transform: function transform(code, id) { - var this$1 = this; - - if (!filter(id) || extensions.indexOf(extname(id)) === -1) { - setIsCjsPromise(id, Promise.resolve(null)); - return null; - } - - var transformPromise = entryModuleIdsPromise - .then(function (entryModuleIds) { - var ref = checkEsModule(this$1.parse, code, id); - var isEsModule = ref.isEsModule; - var hasDefaultExport = ref.hasDefaultExport; - var ast = ref.ast; - if (isEsModule) { - (hasDefaultExport ? esModulesWithDefaultExport : esModulesWithoutDefaultExport)[ - id - ] = true; - return null; - } - - // it is not an ES module but it does not have CJS-specific elements. - if (!hasCjsKeywords(code, ignoreGlobal)) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - var transformed = transformCommonjs( - this$1.parse, - code, - id, - entryModuleIds.indexOf(id) !== -1, - ignoreGlobal, - ignoreRequire, - customNamedExports[id], - sourceMap, - allowDynamicRequire, - ast - ); - if (!transformed) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - return transformed; - }) - .catch(function (err) { - this$1.error(err, err.loc); - }); - - setIsCjsPromise(id, transformPromise.then(Boolean, function () { return false; })); - return transformPromise; - } - }; -} - -export default commonjs; -//# sourceMappingURL=rollup-plugin-commonjs.es.js.map diff --git a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js.map b/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js.map deleted file mode 100644 index 23110ce0..00000000 --- a/build/node_modules/rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rollup-plugin-commonjs.es.js","sources":["../src/helpers.js","../src/is-cjs.js","../src/default-resolver.js","../src/utils.js","../src/resolve-id.js","../src/ast-utils.js","../src/transform.js","../src/index.js"],"sourcesContent":["export const PROXY_PREFIX = '\\0commonjs-proxy-';\nexport const EXTERNAL_PREFIX = '\\0commonjs-external-';\nexport const HELPERS_ID = '\\0commonjsHelpers.js';\n\n// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers.\n// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled.\nexport const HELPERS = `\nexport var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nexport function commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nexport function unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nexport function createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nexport function getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}`;\n","const isCjsPromises = Object.create(null);\n\nexport function getIsCjsPromise(id) {\n\tlet isCjsPromise = isCjsPromises[id];\n\tif (isCjsPromise) return isCjsPromise.promise;\n\n\tconst promise = new Promise(resolve => {\n\t\tisCjsPromises[id] = isCjsPromise = {\n\t\t\tresolve,\n\t\t\tpromise: undefined\n\t\t};\n\t});\n\tisCjsPromise.promise = promise;\n\n\treturn promise;\n}\n\nexport function setIsCjsPromise(id, promise) {\n\tconst isCjsPromise = isCjsPromises[id];\n\tif (isCjsPromise) {\n\t\tif (isCjsPromise.resolve) {\n\t\t\tisCjsPromise.resolve(promise);\n\t\t\tisCjsPromise.resolve = undefined;\n\t\t}\n\t} else {\n\t\tisCjsPromises[id] = { promise, resolve: undefined };\n\t}\n}\n","import * as fs from 'fs';\nimport { dirname, resolve } from 'path';\n\nfunction isFile(file) {\n\ttry {\n\t\tconst stats = fs.statSync(file);\n\t\treturn stats.isFile();\n\t} catch (err) {\n\t\treturn false;\n\t}\n}\n\nfunction addJsExtensionIfNecessary(file) {\n\tif (isFile(file)) return file;\n\n\tfile += '.js';\n\tif (isFile(file)) return file;\n\n\treturn null;\n}\n\nconst absolutePath = /^(?:\\/|(?:[A-Za-z]:)?[\\\\|/])/;\n\nfunction isAbsolute(path) {\n\treturn absolutePath.test(path);\n}\n\nexport default function defaultResolver(importee, importer) {\n\t// absolute paths are left untouched\n\tif (isAbsolute(importee)) return addJsExtensionIfNecessary(resolve(importee));\n\n\t// if this is the entry point, resolve against cwd\n\tif (importer === undefined) return addJsExtensionIfNecessary(resolve(process.cwd(), importee));\n\n\t// external modules are skipped at this stage\n\tif (importee[0] !== '.') return null;\n\n\treturn addJsExtensionIfNecessary(resolve(dirname(importer), importee));\n}\n","import { basename, dirname, extname, sep } from 'path';\nimport { makeLegalIdentifier } from 'rollup-pluginutils';\n\nexport function getName(id) {\n\tconst name = makeLegalIdentifier(basename(id, extname(id)));\n\tif (name !== 'index') {\n\t\treturn name;\n\t} else {\n\t\tconst segments = dirname(id).split(sep);\n\t\treturn makeLegalIdentifier(segments[segments.length - 1]);\n\t}\n}\n\n// Return the first non-falsy result from an array of\n// maybe-sync, maybe-promise-returning functions\nexport function first(candidates) {\n\treturn function(...args) {\n\t\treturn candidates.reduce((promise, candidate) => {\n\t\t\treturn promise.then(result =>\n\t\t\t\tresult != null ? result : Promise.resolve(candidate.call(this, ...args))\n\t\t\t);\n\t\t}, Promise.resolve());\n\t};\n}\n","import { statSync } from 'fs';\nimport { dirname, resolve, sep } from 'path';\nimport defaultResolver from './default-resolver';\nimport { EXTERNAL_PREFIX, PROXY_PREFIX } from './helpers';\nimport { first } from './utils';\n\nfunction getCandidatesForExtension(resolved, extension) {\n\treturn [resolved + extension, resolved + `${sep}index${extension}`];\n}\n\nfunction getCandidates(resolved, extensions) {\n\treturn extensions.reduce(\n\t\t(paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)),\n\t\t[resolved]\n\t);\n}\n\nexport function getResolveId(extensions) {\n\tlet resolveUsingOtherResolvers;\n\n\tfunction resolveId(importee, importer) {\n\t\tconst isProxyModule = importee.startsWith(PROXY_PREFIX);\n\t\tif (isProxyModule) {\n\t\t\timportee = importee.slice(PROXY_PREFIX.length);\n\t\t} else if (importee.startsWith('\\0')) {\n\t\t\treturn importee;\n\t\t}\n\n\t\tif (importer && importer.startsWith(PROXY_PREFIX)) {\n\t\t\timporter = importer.slice(PROXY_PREFIX.length);\n\t\t}\n\n\t\treturn resolveUsingOtherResolvers.call(this, importee, importer).then(resolved => {\n\t\t\tif (resolved) return isProxyModule ? PROXY_PREFIX + resolved : resolved;\n\n\t\t\tresolved = defaultResolver(importee, importer);\n\n\t\t\tif (isProxyModule) {\n\t\t\t\tif (resolved) return PROXY_PREFIX + resolved;\n\t\t\t\treturn EXTERNAL_PREFIX + importee; // external\n\t\t\t}\n\n\t\t\treturn resolved;\n\t\t});\n\t}\n\n\tresolveId.setRollupOptions = function(options) {\n\t\tconst resolvers = (options.plugins || [])\n\t\t\t.map(plugin => {\n\t\t\t\tif (plugin.resolveId === resolveId) {\n\t\t\t\t\t// substitute CommonJS resolution logic\n\t\t\t\t\treturn (importee, importer) => {\n\t\t\t\t\t\tif (importee[0] !== '.' || !importer) return; // not our problem\n\n\t\t\t\t\t\tconst resolved = resolve(dirname(importer), importee);\n\t\t\t\t\t\tconst candidates = getCandidates(resolved, extensions);\n\n\t\t\t\t\t\tfor (let i = 0; i < candidates.length; i += 1) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst stats = statSync(candidates[i]);\n\t\t\t\t\t\t\t\tif (stats.isFile()) return candidates[i];\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t/* noop */\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn plugin.resolveId;\n\t\t\t})\n\t\t\t.filter(Boolean);\n\n\t\tconst isExternal = id =>\n\t\t\toptions.external\n\t\t\t\t? Array.isArray(options.external)\n\t\t\t\t\t? options.external.includes(id)\n\t\t\t\t\t: options.external(id)\n\t\t\t\t: false;\n\n\t\tresolvers.unshift(id => (isExternal(id) ? false : null));\n\n\t\tresolveUsingOtherResolvers = first(resolvers);\n\t};\n\n\treturn resolveId;\n}\n","export function isReference(node, parent) {\n\tif (parent.type === 'MemberExpression') return parent.computed || node === parent.object;\n\n\t// disregard the `bar` in { bar: foo }\n\tif (parent.type === 'Property' && node !== parent.value) return false;\n\n\t// disregard the `bar` in `class Foo { bar () {...} }`\n\tif (parent.type === 'MethodDefinition') return false;\n\n\t// disregard the `bar` in `export { foo as bar }`\n\tif (parent.type === 'ExportSpecifier' && node !== parent.local) return false;\n\n\treturn true;\n}\n\nexport function flatten(node) {\n\tconst parts = [];\n\n\twhile (node.type === 'MemberExpression') {\n\t\tif (node.computed) return null;\n\n\t\tparts.unshift(node.property.name);\n\t\tnode = node.object;\n\t}\n\n\tif (node.type !== 'Identifier') return null;\n\n\tconst name = node.name;\n\tparts.unshift(name);\n\n\treturn { name, keypath: parts.join('.') };\n}\n\nexport function isTruthy(node) {\n\tif (node.type === 'Literal') return !!node.value;\n\tif (node.type === 'ParenthesizedExpression') return isTruthy(node.expression);\n\tif (node.operator in operators) return operators[node.operator](node);\n}\n\nexport function isFalsy(node) {\n\treturn not(isTruthy(node));\n}\n\nfunction not(value) {\n\treturn value === undefined ? value : !value;\n}\n\nfunction equals(a, b, strict) {\n\tif (a.type !== b.type) return undefined;\n\tif (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value;\n}\n\nconst operators = {\n\t'==': x => {\n\t\treturn equals(x.left, x.right, false);\n\t},\n\n\t'!=': x => not(operators['=='](x)),\n\n\t'===': x => {\n\t\treturn equals(x.left, x.right, true);\n\t},\n\n\t'!==': x => not(operators['==='](x)),\n\n\t'!': x => isFalsy(x.argument),\n\n\t'&&': x => isTruthy(x.left) && isTruthy(x.right),\n\n\t'||': x => isTruthy(x.left) || isTruthy(x.right)\n};\n","import { walk } from 'estree-walker';\nimport MagicString from 'magic-string';\nimport { attachScopes, extractAssignedNames, makeLegalIdentifier } from 'rollup-pluginutils';\nimport { flatten, isFalsy, isReference, isTruthy } from './ast-utils.js';\nimport { HELPERS_ID, PROXY_PREFIX } from './helpers.js';\nimport { getName } from './utils.js';\n\nconst reserved = 'process location abstract arguments boolean break byte case catch char class const continue debugger default delete do double else enum eval export extends false final finally float for from function goto if implements import in instanceof int interface let long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var void volatile while with yield'.split(\n\t' '\n);\nconst blacklist = { __esModule: true };\nreserved.forEach(word => (blacklist[word] = true));\n\nconst exportsPattern = /^(?:module\\.)?exports(?:\\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/;\n\nconst firstpassGlobal = /\\b(?:require|module|exports|global)\\b/;\nconst firstpassNoGlobal = /\\b(?:require|module|exports)\\b/;\nconst importExportDeclaration = /^(?:Import|Export(?:Named|Default))Declaration/;\nconst functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/;\n\nfunction deconflict(scope, globals, identifier) {\n\tlet i = 1;\n\tlet deconflicted = identifier;\n\n\twhile (scope.contains(deconflicted) || globals.has(deconflicted) || deconflicted in blacklist)\n\t\tdeconflicted = `${identifier}_${i++}`;\n\tscope.declarations[deconflicted] = true;\n\n\treturn deconflicted;\n}\n\nfunction tryParse(parse, code, id) {\n\ttry {\n\t\treturn parse(code, { allowReturnOutsideFunction: true });\n\t} catch (err) {\n\t\terr.message += ` in ${id}`;\n\t\tthrow err;\n\t}\n}\n\nexport function hasCjsKeywords(code, ignoreGlobal) {\n\tconst firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal;\n\treturn firstpass.test(code);\n}\n\nexport function checkEsModule(parse, code, id) {\n\tconst ast = tryParse(parse, code, id);\n\n\tlet isEsModule = false;\n\tfor (const node of ast.body) {\n\t\tif (node.type === 'ExportDefaultDeclaration')\n\t\t\treturn { isEsModule: true, hasDefaultExport: true, ast };\n\t\tif (node.type === 'ExportNamedDeclaration') {\n\t\t\tisEsModule = true;\n\t\t\tfor (const specifier of node.specifiers) {\n\t\t\t\tif (specifier.exported.name === 'default') {\n\t\t\t\t\treturn { isEsModule: true, hasDefaultExport: true, ast };\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (importExportDeclaration.test(node.type)) isEsModule = true;\n\t}\n\n\treturn { isEsModule, hasDefaultExport: false, ast };\n}\n\nexport function transformCommonjs(\n\tparse,\n\tcode,\n\tid,\n\tisEntry,\n\tignoreGlobal,\n\tignoreRequire,\n\tcustomNamedExports,\n\tsourceMap,\n\tallowDynamicRequire,\n\tastCache\n) {\n\tconst ast = astCache || tryParse(parse, code, id);\n\n\tconst magicString = new MagicString(code);\n\n\tconst required = {};\n\t// Because objects have no guaranteed ordering, yet we need it,\n\t// we need to keep track of the order in a array\n\tconst sources = [];\n\n\tlet uid = 0;\n\n\tlet scope = attachScopes(ast, 'scope');\n\tconst uses = { module: false, exports: false, global: false, require: false };\n\n\tlet lexicalDepth = 0;\n\tlet programDepth = 0;\n\n\tconst globals = new Set();\n\n\tconst HELPERS_NAME = deconflict(scope, globals, 'commonjsHelpers'); // TODO technically wrong since globals isn't populated yet, but ¯\\_(ツ)_/¯\n\n\tconst namedExports = {};\n\n\t// TODO handle transpiled modules\n\tlet shouldWrap = /__esModule/.test(code);\n\n\tfunction isRequireStatement(node) {\n\t\tif (!node) return;\n\t\tif (node.type !== 'CallExpression') return;\n\t\tif (node.callee.name !== 'require' || scope.contains('require')) return;\n\t\tif (node.arguments.length === 0) return; // Weird case of require() without arguments\n\t\treturn true;\n\t}\n\n\tfunction hasDynamicArguments(node) {\n\t\treturn (\n\t\t\tnode.arguments.length > 1 ||\n\t\t\t(node.arguments[0].type !== 'Literal' &&\n\t\t\t\t(node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0))\n\t\t);\n\t}\n\n\tfunction isStaticRequireStatement(node) {\n\t\tif (!isRequireStatement(node)) return;\n\t\tif (hasDynamicArguments(node)) return;\n\t\tif (ignoreRequire(node.arguments[0].value)) return;\n\t\treturn true;\n\t}\n\n\tfunction getRequireStringArg(node) {\n\t\treturn node.arguments[0].type === 'Literal'\n\t\t\t? node.arguments[0].value\n\t\t\t: node.arguments[0].quasis[0].value.cooked;\n\t}\n\n\tfunction getRequired(node, name) {\n\t\tconst sourceId = getRequireStringArg(node);\n\t\tconst existing = required[sourceId];\n\t\tif (existing === undefined) {\n\t\t\tif (!name) {\n\t\t\t\tdo name = `require$$${uid++}`;\n\t\t\t\twhile (scope.contains(name));\n\t\t\t}\n\n\t\t\tsources.push(sourceId);\n\t\t\trequired[sourceId] = { source: sourceId, name, importsDefault: false };\n\t\t}\n\n\t\treturn required[sourceId];\n\t}\n\n\t// do a first pass, see which names are assigned to. This is necessary to prevent\n\t// illegally replacing `var foo = require('foo')` with `import foo from 'foo'`,\n\t// where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh)\n\tconst assignedTo = new Set();\n\twalk(ast, {\n\t\tenter(node) {\n\t\t\tif (node.type !== 'AssignmentExpression') return;\n\t\t\tif (node.left.type === 'MemberExpression') return;\n\n\t\t\textractAssignedNames(node.left).forEach(name => {\n\t\t\t\tassignedTo.add(name);\n\t\t\t});\n\t\t}\n\t});\n\n\twalk(ast, {\n\t\tenter(node, parent) {\n\t\t\tif (sourceMap) {\n\t\t\t\tmagicString.addSourcemapLocation(node.start);\n\t\t\t\tmagicString.addSourcemapLocation(node.end);\n\t\t\t}\n\n\t\t\t// skip dead branches\n\t\t\tif (parent && (parent.type === 'IfStatement' || parent.type === 'ConditionalExpression')) {\n\t\t\t\tif (node === parent.consequent && isFalsy(parent.test)) return this.skip();\n\t\t\t\tif (node === parent.alternate && isTruthy(parent.test)) return this.skip();\n\t\t\t}\n\n\t\t\tif (node._skip) return this.skip();\n\n\t\t\tprogramDepth += 1;\n\n\t\t\tif (node.scope) scope = node.scope;\n\t\t\tif (functionType.test(node.type)) lexicalDepth += 1;\n\n\t\t\t// if toplevel return, we need to wrap it\n\t\t\tif (node.type === 'ReturnStatement' && lexicalDepth === 0) {\n\t\t\t\tshouldWrap = true;\n\t\t\t}\n\n\t\t\t// rewrite `this` as `commonjsHelpers.commonjsGlobal`\n\t\t\tif (node.type === 'ThisExpression' && lexicalDepth === 0) {\n\t\t\t\tuses.global = true;\n\t\t\t\tif (!ignoreGlobal)\n\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151)\n\t\t\tif (node.type === 'UnaryExpression' && node.operator === 'typeof') {\n\t\t\t\tconst flattened = flatten(node.argument);\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tif (scope.contains(flattened.name)) return;\n\n\t\t\t\tif (\n\t\t\t\t\tflattened.keypath === 'module.exports' ||\n\t\t\t\t\tflattened.keypath === 'module' ||\n\t\t\t\t\tflattened.keypath === 'exports'\n\t\t\t\t) {\n\t\t\t\t\tmagicString.overwrite(node.start, node.end, `'object'`, { storeName: false });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// rewrite `require` (if not already handled) `global` and `define`, and handle free references to\n\t\t\t// `module` and `exports` as these mean we need to wrap the module in commonjsHelpers.createCommonjsModule\n\t\t\tif (node.type === 'Identifier') {\n\t\t\t\tif (isReference(node, parent) && !scope.contains(node.name)) {\n\t\t\t\t\tif (node.name in uses) {\n\t\t\t\t\t\tif (node.name === 'require') {\n\t\t\t\t\t\t\tif (allowDynamicRequire) return;\n\t\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, {\n\t\t\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tuses[node.name] = true;\n\t\t\t\t\t\tif (node.name === 'global' && !ignoreGlobal) {\n\t\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, {\n\t\t\t\t\t\t\t\tstoreName: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if module or exports are used outside the context of an assignment\n\t\t\t\t\t\t// expression, we need to wrap the module\n\t\t\t\t\t\tif (node.name === 'module' || node.name === 'exports') {\n\t\t\t\t\t\t\tshouldWrap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node.name === 'define') {\n\t\t\t\t\t\tmagicString.overwrite(node.start, node.end, 'undefined', { storeName: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tglobals.add(node.name);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Is this an assignment to exports or module.exports?\n\t\t\tif (node.type === 'AssignmentExpression') {\n\t\t\t\tif (node.left.type !== 'MemberExpression') return;\n\n\t\t\t\tconst flattened = flatten(node.left);\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tif (scope.contains(flattened.name)) return;\n\n\t\t\t\tconst match = exportsPattern.exec(flattened.keypath);\n\t\t\t\tif (!match || flattened.keypath === 'exports') return;\n\n\t\t\t\tuses[flattened.name] = true;\n\n\t\t\t\t// we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` –\n\t\t\t\t// if this isn't top-level, we'll need to wrap the module\n\t\t\t\tif (programDepth > 3) shouldWrap = true;\n\n\t\t\t\tnode.left._skip = true;\n\n\t\t\t\tif (flattened.keypath === 'module.exports' && node.right.type === 'ObjectExpression') {\n\t\t\t\t\treturn node.right.properties.forEach(prop => {\n\t\t\t\t\t\tif (prop.computed || prop.key.type !== 'Identifier') return;\n\t\t\t\t\t\tconst name = prop.key.name;\n\t\t\t\t\t\tif (name === makeLegalIdentifier(name)) namedExports[name] = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (match[1]) namedExports[match[1]] = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if this is `var x = require('x')`, we can do `import x from 'x'`\n\t\t\tif (\n\t\t\t\tnode.type === 'VariableDeclarator' &&\n\t\t\t\tnode.id.type === 'Identifier' &&\n\t\t\t\tisStaticRequireStatement(node.init)\n\t\t\t) {\n\t\t\t\t// for now, only do this for top-level requires. maybe fix this in future\n\t\t\t\tif (scope.parent) return;\n\n\t\t\t\t// edge case — CJS allows you to assign to imports. ES doesn't\n\t\t\t\tif (assignedTo.has(node.id.name)) return;\n\n\t\t\t\tconst required = getRequired(node.init, node.id.name);\n\t\t\t\trequired.importsDefault = true;\n\n\t\t\t\tif (required.name === node.id.name) {\n\t\t\t\t\tnode._shouldRemove = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isStaticRequireStatement(node)) return;\n\n\t\t\tconst required = getRequired(node);\n\n\t\t\tif (parent.type === 'ExpressionStatement') {\n\t\t\t\t// is a bare import, e.g. `require('foo');`\n\t\t\t\tmagicString.remove(parent.start, parent.end);\n\t\t\t} else {\n\t\t\t\trequired.importsDefault = true;\n\t\t\t\tmagicString.overwrite(node.start, node.end, required.name);\n\t\t\t}\n\n\t\t\tnode.callee._skip = true;\n\t\t},\n\n\t\tleave(node) {\n\t\t\tprogramDepth -= 1;\n\t\t\tif (node.scope) scope = scope.parent;\n\t\t\tif (functionType.test(node.type)) lexicalDepth -= 1;\n\n\t\t\tif (node.type === 'VariableDeclaration') {\n\t\t\t\tlet keepDeclaration = false;\n\t\t\t\tlet c = node.declarations[0].start;\n\n\t\t\t\tfor (let i = 0; i < node.declarations.length; i += 1) {\n\t\t\t\t\tconst declarator = node.declarations[i];\n\n\t\t\t\t\tif (declarator._shouldRemove) {\n\t\t\t\t\t\tmagicString.remove(c, declarator.end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!keepDeclaration) {\n\t\t\t\t\t\t\tmagicString.remove(c, declarator.start);\n\t\t\t\t\t\t\tkeepDeclaration = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tc = declarator.end;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!keepDeclaration) {\n\t\t\t\t\tmagicString.remove(node.start, node.end);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t!sources.length &&\n\t\t!uses.module &&\n\t\t!uses.exports &&\n\t\t!uses.require &&\n\t\t(ignoreGlobal || !uses.global)\n\t) {\n\t\tif (Object.keys(namedExports).length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Custom named exports were specified for ${id} but it does not appear to be a CommonJS module`\n\t\t\t);\n\t\t}\n\t\treturn null; // not a CommonJS module\n\t}\n\n\tconst includeHelpers = shouldWrap || uses.global || uses.require;\n\tconst importBlock =\n\t\t(includeHelpers ? [`import * as ${HELPERS_NAME} from '${HELPERS_ID}';`] : [])\n\t\t\t.concat(\n\t\t\t\tsources.map(source => {\n\t\t\t\t\t// import the actual module before the proxy, so that we know\n\t\t\t\t\t// what kind of proxy to build\n\t\t\t\t\treturn `import '${source}';`;\n\t\t\t\t}),\n\t\t\t\tsources.map(source => {\n\t\t\t\t\tconst { name, importsDefault } = required[source];\n\t\t\t\t\treturn `import ${importsDefault ? `${name} from ` : ``}'${PROXY_PREFIX}${source}';`;\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join('\\n') + '\\n\\n';\n\n\tconst namedExportDeclarations = [];\n\tlet wrapperStart = '';\n\tlet wrapperEnd = '';\n\n\tconst moduleName = deconflict(scope, globals, getName(id));\n\tif (!isEntry) {\n\t\tconst exportModuleExports = {\n\t\t\tstr: `export { ${moduleName} as __moduleExports };`,\n\t\t\tname: '__moduleExports'\n\t\t};\n\n\t\tnamedExportDeclarations.push(exportModuleExports);\n\t}\n\n\tconst name = getName(id);\n\n\tfunction addExport(x) {\n\t\tconst deconflicted = deconflict(scope, globals, name);\n\n\t\tconst declaration =\n\t\t\tdeconflicted === name\n\t\t\t\t? `export var ${x} = ${moduleName}.${x};`\n\t\t\t\t: `var ${deconflicted} = ${moduleName}.${x};\\nexport { ${deconflicted} as ${x} };`;\n\n\t\tnamedExportDeclarations.push({\n\t\t\tstr: declaration,\n\t\t\tname: x\n\t\t});\n\t}\n\n\tif (customNamedExports) customNamedExports.forEach(addExport);\n\n\tconst defaultExportPropertyAssignments = [];\n\tlet hasDefaultExport = false;\n\n\tif (shouldWrap) {\n\t\tconst args = `module${uses.exports ? ', exports' : ''}`;\n\n\t\twrapperStart = `var ${moduleName} = ${HELPERS_NAME}.createCommonjsModule(function (${args}) {\\n`;\n\t\twrapperEnd = `\\n});`;\n\t} else {\n\t\tconst names = [];\n\n\t\tast.body.forEach(node => {\n\t\t\tif (node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression') {\n\t\t\t\tconst left = node.expression.left;\n\t\t\t\tconst flattened = flatten(left);\n\n\t\t\t\tif (!flattened) return;\n\n\t\t\t\tconst match = exportsPattern.exec(flattened.keypath);\n\t\t\t\tif (!match) return;\n\n\t\t\t\tif (flattened.keypath === 'module.exports') {\n\t\t\t\t\thasDefaultExport = true;\n\t\t\t\t\tmagicString.overwrite(left.start, left.end, `var ${moduleName}`);\n\t\t\t\t} else {\n\t\t\t\t\tconst name = match[1];\n\t\t\t\t\tconst deconflicted = deconflict(scope, globals, name);\n\n\t\t\t\t\tnames.push({ name, deconflicted });\n\n\t\t\t\t\tmagicString.overwrite(node.start, left.end, `var ${deconflicted}`);\n\n\t\t\t\t\tconst declaration =\n\t\t\t\t\t\tname === deconflicted\n\t\t\t\t\t\t\t? `export { ${name} };`\n\t\t\t\t\t\t\t: `export { ${deconflicted} as ${name} };`;\n\n\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\tnamedExportDeclarations.push({\n\t\t\t\t\t\t\tstr: declaration,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdelete namedExports[name];\n\t\t\t\t\t}\n\n\t\t\t\t\tdefaultExportPropertyAssignments.push(`${moduleName}.${name} = ${deconflicted};`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (!hasDefaultExport) {\n\t\t\twrapperEnd = `\\n\\nvar ${moduleName} = {\\n${names\n\t\t\t\t.map(({ name, deconflicted }) => `\\t${name}: ${deconflicted}`)\n\t\t\t\t.join(',\\n')}\\n};`;\n\t\t}\n\t}\n\tObject.keys(namedExports)\n\t\t.filter(key => !blacklist[key])\n\t\t.forEach(addExport);\n\n\tconst defaultExport = /__esModule/.test(code)\n\t\t? `export default ${HELPERS_NAME}.unwrapExports(${moduleName});`\n\t\t: `export default ${moduleName};`;\n\n\tconst named = namedExportDeclarations\n\t\t.filter(x => x.name !== 'default' || !hasDefaultExport)\n\t\t.map(x => x.str);\n\n\tconst exportBlock =\n\t\t'\\n\\n' +\n\t\t[defaultExport]\n\t\t\t.concat(named)\n\t\t\t.concat(hasDefaultExport ? defaultExportPropertyAssignments : [])\n\t\t\t.join('\\n');\n\n\tmagicString\n\t\t.trim()\n\t\t.prepend(importBlock + wrapperStart)\n\t\t.trim()\n\t\t.append(wrapperEnd + exportBlock);\n\n\tcode = magicString.toString();\n\tconst map = sourceMap ? magicString.generateMap() : null;\n\n\treturn { code, map };\n}\n","import { extname, resolve } from 'path';\nimport { sync as nodeResolveSync } from 'resolve';\nimport { createFilter } from 'rollup-pluginutils';\nimport { EXTERNAL_PREFIX, HELPERS, HELPERS_ID, PROXY_PREFIX } from './helpers.js';\nimport { getIsCjsPromise, setIsCjsPromise } from './is-cjs';\nimport { getResolveId } from './resolve-id';\nimport { checkEsModule, hasCjsKeywords, transformCommonjs } from './transform.js';\nimport { getName } from './utils.js';\n\nexport default function commonjs(options = {}) {\n\tconst extensions = options.extensions || ['.js'];\n\tconst filter = createFilter(options.include, options.exclude);\n\tconst ignoreGlobal = options.ignoreGlobal;\n\n\tconst customNamedExports = {};\n\tif (options.namedExports) {\n\t\tObject.keys(options.namedExports).forEach(id => {\n\t\t\tlet resolvedId;\n\n\t\t\ttry {\n\t\t\t\tresolvedId = nodeResolveSync(id, { basedir: process.cwd() });\n\t\t\t} catch (err) {\n\t\t\t\tresolvedId = resolve(id);\n\t\t\t}\n\n\t\t\tcustomNamedExports[resolvedId] = options.namedExports[id];\n\t\t});\n\t}\n\n\tconst esModulesWithoutDefaultExport = Object.create(null);\n\tconst esModulesWithDefaultExport = Object.create(null);\n\tconst allowDynamicRequire = !!options.ignore; // TODO maybe this should be configurable?\n\n\tconst ignoreRequire =\n\t\ttypeof options.ignore === 'function'\n\t\t\t? options.ignore\n\t\t\t: Array.isArray(options.ignore)\n\t\t\t\t? id => options.ignore.includes(id)\n\t\t\t\t: () => false;\n\n\tlet entryModuleIdsPromise = null;\n\n\tconst resolveId = getResolveId(extensions);\n\n\tconst sourceMap = options.sourceMap !== false;\n\n\treturn {\n\t\tname: 'commonjs',\n\n\t\toptions(options) {\n\t\t\tresolveId.setRollupOptions(options);\n\t\t\tconst input = options.input || options.entry;\n\t\t\tconst entryModules = Array.isArray(input)\n\t\t\t\t? input\n\t\t\t\t: typeof input === 'object' && input !== null\n\t\t\t\t\t? Object.values(input)\n\t\t\t\t\t: [input];\n\t\t\tentryModuleIdsPromise = Promise.all(entryModules.map(entry => resolveId(entry)));\n\t\t},\n\n\t\tresolveId,\n\n\t\tload(id) {\n\t\t\tif (id === HELPERS_ID) return HELPERS;\n\n\t\t\t// generate proxy modules\n\t\t\tif (id.startsWith(EXTERNAL_PREFIX)) {\n\t\t\t\tconst actualId = id.slice(EXTERNAL_PREFIX.length);\n\t\t\t\tconst name = getName(actualId);\n\n\t\t\t\treturn `import ${name} from ${JSON.stringify(actualId)}; export default ${name};`;\n\t\t\t}\n\n\t\t\tif (id.startsWith(PROXY_PREFIX)) {\n\t\t\t\tconst actualId = id.slice(PROXY_PREFIX.length);\n\t\t\t\tconst name = getName(actualId);\n\n\t\t\t\treturn getIsCjsPromise(actualId).then(isCjs => {\n\t\t\t\t\tif (isCjs)\n\t\t\t\t\t\treturn `import { __moduleExports } from ${JSON.stringify(\n\t\t\t\t\t\t\tactualId\n\t\t\t\t\t\t)}; export default __moduleExports;`;\n\t\t\t\t\telse if (esModulesWithoutDefaultExport[actualId])\n\t\t\t\t\t\treturn `import * as ${name} from ${JSON.stringify(actualId)}; export default ${name};`;\n\t\t\t\t\telse if (esModulesWithDefaultExport[actualId]) {\n\t\t\t\t\t\treturn `export {default} from ${JSON.stringify(actualId)};`;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn `import * as ${name} from ${JSON.stringify(\n\t\t\t\t\t\t\tactualId\n\t\t\t\t\t\t)}; import {getCjsExportFromNamespace} from \"${HELPERS_ID}\"; export default getCjsExportFromNamespace(${name})`;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\ttransform(code, id) {\n\t\t\tif (!filter(id) || extensions.indexOf(extname(id)) === -1) {\n\t\t\t\tsetIsCjsPromise(id, Promise.resolve(null));\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst transformPromise = entryModuleIdsPromise\n\t\t\t\t.then(entryModuleIds => {\n\t\t\t\t\tconst { isEsModule, hasDefaultExport, ast } = checkEsModule(this.parse, code, id);\n\t\t\t\t\tif (isEsModule) {\n\t\t\t\t\t\t(hasDefaultExport ? esModulesWithDefaultExport : esModulesWithoutDefaultExport)[\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// it is not an ES module but it does not have CJS-specific elements.\n\t\t\t\t\tif (!hasCjsKeywords(code, ignoreGlobal)) {\n\t\t\t\t\t\tesModulesWithoutDefaultExport[id] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst transformed = transformCommonjs(\n\t\t\t\t\t\tthis.parse,\n\t\t\t\t\t\tcode,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tentryModuleIds.indexOf(id) !== -1,\n\t\t\t\t\t\tignoreGlobal,\n\t\t\t\t\t\tignoreRequire,\n\t\t\t\t\t\tcustomNamedExports[id],\n\t\t\t\t\t\tsourceMap,\n\t\t\t\t\t\tallowDynamicRequire,\n\t\t\t\t\t\tast\n\t\t\t\t\t);\n\t\t\t\t\tif (!transformed) {\n\t\t\t\t\t\tesModulesWithoutDefaultExport[id] = true;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn transformed;\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tthis.error(err, err.loc);\n\t\t\t\t});\n\n\t\t\tsetIsCjsPromise(id, transformPromise.then(Boolean, () => false));\n\t\t\treturn transformPromise;\n\t\t}\n\t};\n}\n"],"names":["const","let","fs.statSync","this","flattened","required","nodeResolveSync","options","actualId","name"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/rollup-plugin-commonjs/index.d.ts b/build/node_modules/rollup-plugin-commonjs/index.d.ts deleted file mode 100644 index a2cd7273..00000000 --- a/build/node_modules/rollup-plugin-commonjs/index.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Plugin } from 'rollup'; - -interface RollupCommonJSOptions { - /** - * non-CommonJS modules will be ignored, but you can also - * specifically include/exclude files - * @default undefined - */ - include?: string | RegExp | ReadonlyArray, - /** - * non-CommonJS modules will be ignored, but you can also - * specifically include/exclude files - * @default undefined - */ - exclude?: string | RegExp | ReadonlyArray, - /** - * search for files other than .js files (must already - * be transpiled by a previous plugin!) - * @default [ '.js' ] - */ - extensions?: ReadonlyArray, - /** - * if true then uses of `global` won't be dealt with by this plugin - * @default false - */ - ignoreGlobal?: boolean, - /** - * if false then skip sourceMap generation for CommonJS modules - * @default true - */ - sourceMap?: boolean, - /** - * explicitly specify unresolvable named exports - * ([see below for more details](https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports)) - * @default undefined - */ - namedExports?: { [package: string]: ReadonlyArray }, - /** - * sometimes you have to leave require statements - * unconverted. Pass an array containing the IDs - * or a `id => boolean` function. Only use this - * option if you know what you're doing! - */ - ignore?: ReadonlyArray boolean)>, -} - -/** - * Convert CommonJS modules to ES6, so they can be included in a Rollup bundle - */ -export default function commonjs(options?: RollupCommonJSOptions): Plugin; diff --git a/build/node_modules/rollup-plugin-commonjs/package.json b/build/node_modules/rollup-plugin-commonjs/package.json deleted file mode 100644 index 4852ecba..00000000 --- a/build/node_modules/rollup-plugin-commonjs/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_from": "rollup-plugin-commonjs@^9.1.3", - "_id": "rollup-plugin-commonjs@9.3.4", - "_inBundle": false, - "_integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", - "_location": "/rollup-plugin-commonjs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "rollup-plugin-commonjs@^9.1.3", - "name": "rollup-plugin-commonjs", - "escapedName": "rollup-plugin-commonjs", - "rawSpec": "^9.1.3", - "saveSpec": null, - "fetchSpec": "^9.1.3" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", - "_shasum": "2b3dddbbbded83d45c36ff101cdd29e924fd23bc", - "_spec": "rollup-plugin-commonjs@^9.1.3", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", - "author": { - "name": "Rich Harris" - }, - "bugs": { - "url": "https://github.com/rollup/rollup-plugin-commonjs/issues" - }, - "bundleDependencies": false, - "dependencies": { - "estree-walker": "^0.6.0", - "magic-string": "^0.25.2", - "resolve": "^1.10.0", - "rollup-pluginutils": "^2.6.0" - }, - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", - "description": "Convert CommonJS modules to ES2015", - "devDependencies": { - "acorn": "^6.1.1", - "eslint": "^5.16.0", - "eslint-plugin-import": "^2.16.0", - "husky": "^1.3.1", - "lint-staged": "^8.1.5", - "locate-character": "^2.0.5", - "mocha": "^6.0.2", - "prettier": "^1.16.4", - "require-relative": "^0.8.7", - "rollup": "^1.8.0", - "rollup-plugin-buble": "^0.19.6", - "rollup-plugin-node-resolve": "^4.0.1", - "shx": "^0.3.2", - "source-map": "^0.7.3", - "source-map-support": "^0.5.11", - "typescript": "^3.4.1" - }, - "files": [ - "src", - "dist", - "index.d.ts", - "README.md" - ], - "homepage": "https://github.com/rollup/rollup-plugin-commonjs", - "jsnext:main": "dist/rollup-plugin-commonjs.es.js", - "license": "MIT", - "main": "dist/rollup-plugin-commonjs.cjs.js", - "module": "dist/rollup-plugin-commonjs.es.js", - "name": "rollup-plugin-commonjs", - "peerDependencies": { - "rollup": ">=0.56.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/rollup/rollup-plugin-commonjs.git" - }, - "scripts": { - "build": "shx rm -rf dist/* && rollup -c", - "dev": "rollup -c -w", - "lint": "prettier --write src/**/*.js test/test.js test/**/_config.js && eslint --fix src/**/*.js test/test.js test/**/_config.js", - "prepare": "npm run build", - "prepublishOnly": "npm run lint && npm run test:only", - "pretest": "npm run build", - "test": "npm run test:only", - "test:only": "mocha && tsc" - }, - "version": "9.3.4" -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/ast-utils.js b/build/node_modules/rollup-plugin-commonjs/src/ast-utils.js deleted file mode 100644 index e8b8b50b..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/ast-utils.js +++ /dev/null @@ -1,71 +0,0 @@ -export function isReference(node, parent) { - if (parent.type === 'MemberExpression') return parent.computed || node === parent.object; - - // disregard the `bar` in { bar: foo } - if (parent.type === 'Property' && node !== parent.value) return false; - - // disregard the `bar` in `class Foo { bar () {...} }` - if (parent.type === 'MethodDefinition') return false; - - // disregard the `bar` in `export { foo as bar }` - if (parent.type === 'ExportSpecifier' && node !== parent.local) return false; - - return true; -} - -export function flatten(node) { - const parts = []; - - while (node.type === 'MemberExpression') { - if (node.computed) return null; - - parts.unshift(node.property.name); - node = node.object; - } - - if (node.type !== 'Identifier') return null; - - const name = node.name; - parts.unshift(name); - - return { name, keypath: parts.join('.') }; -} - -export function isTruthy(node) { - if (node.type === 'Literal') return !!node.value; - if (node.type === 'ParenthesizedExpression') return isTruthy(node.expression); - if (node.operator in operators) return operators[node.operator](node); -} - -export function isFalsy(node) { - return not(isTruthy(node)); -} - -function not(value) { - return value === undefined ? value : !value; -} - -function equals(a, b, strict) { - if (a.type !== b.type) return undefined; - if (a.type === 'Literal') return strict ? a.value === b.value : a.value == b.value; -} - -const operators = { - '==': x => { - return equals(x.left, x.right, false); - }, - - '!=': x => not(operators['=='](x)), - - '===': x => { - return equals(x.left, x.right, true); - }, - - '!==': x => not(operators['==='](x)), - - '!': x => isFalsy(x.argument), - - '&&': x => isTruthy(x.left) && isTruthy(x.right), - - '||': x => isTruthy(x.left) || isTruthy(x.right) -}; diff --git a/build/node_modules/rollup-plugin-commonjs/src/default-resolver.js b/build/node_modules/rollup-plugin-commonjs/src/default-resolver.js deleted file mode 100644 index 0a774aef..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/default-resolver.js +++ /dev/null @@ -1,39 +0,0 @@ -import * as fs from 'fs'; -import { dirname, resolve } from 'path'; - -function isFile(file) { - try { - const stats = fs.statSync(file); - return stats.isFile(); - } catch (err) { - return false; - } -} - -function addJsExtensionIfNecessary(file) { - if (isFile(file)) return file; - - file += '.js'; - if (isFile(file)) return file; - - return null; -} - -const absolutePath = /^(?:\/|(?:[A-Za-z]:)?[\\|/])/; - -function isAbsolute(path) { - return absolutePath.test(path); -} - -export default function defaultResolver(importee, importer) { - // absolute paths are left untouched - if (isAbsolute(importee)) return addJsExtensionIfNecessary(resolve(importee)); - - // if this is the entry point, resolve against cwd - if (importer === undefined) return addJsExtensionIfNecessary(resolve(process.cwd(), importee)); - - // external modules are skipped at this stage - if (importee[0] !== '.') return null; - - return addJsExtensionIfNecessary(resolve(dirname(importer), importee)); -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/helpers.js b/build/node_modules/rollup-plugin-commonjs/src/helpers.js deleted file mode 100644 index 21bf2aa0..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/helpers.js +++ /dev/null @@ -1,24 +0,0 @@ -export const PROXY_PREFIX = '\0commonjs-proxy-'; -export const EXTERNAL_PREFIX = '\0commonjs-external-'; -export const HELPERS_ID = '\0commonjsHelpers.js'; - -// `x['default']` is used instead of `x.default` for backward compatibility with ES3 browsers. -// Minifiers like uglify will usually transpile it back if compatibility with ES3 is not enabled. -export const HELPERS = ` -export var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -export function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); -} - -export function unwrapExports (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; -} - -export function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -export function getCjsExportFromNamespace (n) { - return n && n['default'] || n; -}`; diff --git a/build/node_modules/rollup-plugin-commonjs/src/index.js b/build/node_modules/rollup-plugin-commonjs/src/index.js deleted file mode 100644 index 9c525240..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/index.js +++ /dev/null @@ -1,144 +0,0 @@ -import { extname, resolve } from 'path'; -import { sync as nodeResolveSync } from 'resolve'; -import { createFilter } from 'rollup-pluginutils'; -import { EXTERNAL_PREFIX, HELPERS, HELPERS_ID, PROXY_PREFIX } from './helpers.js'; -import { getIsCjsPromise, setIsCjsPromise } from './is-cjs'; -import { getResolveId } from './resolve-id'; -import { checkEsModule, hasCjsKeywords, transformCommonjs } from './transform.js'; -import { getName } from './utils.js'; - -export default function commonjs(options = {}) { - const extensions = options.extensions || ['.js']; - const filter = createFilter(options.include, options.exclude); - const ignoreGlobal = options.ignoreGlobal; - - const customNamedExports = {}; - if (options.namedExports) { - Object.keys(options.namedExports).forEach(id => { - let resolvedId; - - try { - resolvedId = nodeResolveSync(id, { basedir: process.cwd() }); - } catch (err) { - resolvedId = resolve(id); - } - - customNamedExports[resolvedId] = options.namedExports[id]; - }); - } - - const esModulesWithoutDefaultExport = Object.create(null); - const esModulesWithDefaultExport = Object.create(null); - const allowDynamicRequire = !!options.ignore; // TODO maybe this should be configurable? - - const ignoreRequire = - typeof options.ignore === 'function' - ? options.ignore - : Array.isArray(options.ignore) - ? id => options.ignore.includes(id) - : () => false; - - let entryModuleIdsPromise = null; - - const resolveId = getResolveId(extensions); - - const sourceMap = options.sourceMap !== false; - - return { - name: 'commonjs', - - options(options) { - resolveId.setRollupOptions(options); - const input = options.input || options.entry; - const entryModules = Array.isArray(input) - ? input - : typeof input === 'object' && input !== null - ? Object.values(input) - : [input]; - entryModuleIdsPromise = Promise.all(entryModules.map(entry => resolveId(entry))); - }, - - resolveId, - - load(id) { - if (id === HELPERS_ID) return HELPERS; - - // generate proxy modules - if (id.startsWith(EXTERNAL_PREFIX)) { - const actualId = id.slice(EXTERNAL_PREFIX.length); - const name = getName(actualId); - - return `import ${name} from ${JSON.stringify(actualId)}; export default ${name};`; - } - - if (id.startsWith(PROXY_PREFIX)) { - const actualId = id.slice(PROXY_PREFIX.length); - const name = getName(actualId); - - return getIsCjsPromise(actualId).then(isCjs => { - if (isCjs) - return `import { __moduleExports } from ${JSON.stringify( - actualId - )}; export default __moduleExports;`; - else if (esModulesWithoutDefaultExport[actualId]) - return `import * as ${name} from ${JSON.stringify(actualId)}; export default ${name};`; - else if (esModulesWithDefaultExport[actualId]) { - return `export {default} from ${JSON.stringify(actualId)};`; - } else - return `import * as ${name} from ${JSON.stringify( - actualId - )}; import {getCjsExportFromNamespace} from "${HELPERS_ID}"; export default getCjsExportFromNamespace(${name})`; - }); - } - }, - - transform(code, id) { - if (!filter(id) || extensions.indexOf(extname(id)) === -1) { - setIsCjsPromise(id, Promise.resolve(null)); - return null; - } - - const transformPromise = entryModuleIdsPromise - .then(entryModuleIds => { - const { isEsModule, hasDefaultExport, ast } = checkEsModule(this.parse, code, id); - if (isEsModule) { - (hasDefaultExport ? esModulesWithDefaultExport : esModulesWithoutDefaultExport)[ - id - ] = true; - return null; - } - - // it is not an ES module but it does not have CJS-specific elements. - if (!hasCjsKeywords(code, ignoreGlobal)) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - const transformed = transformCommonjs( - this.parse, - code, - id, - entryModuleIds.indexOf(id) !== -1, - ignoreGlobal, - ignoreRequire, - customNamedExports[id], - sourceMap, - allowDynamicRequire, - ast - ); - if (!transformed) { - esModulesWithoutDefaultExport[id] = true; - return null; - } - - return transformed; - }) - .catch(err => { - this.error(err, err.loc); - }); - - setIsCjsPromise(id, transformPromise.then(Boolean, () => false)); - return transformPromise; - } - }; -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/is-cjs.js b/build/node_modules/rollup-plugin-commonjs/src/is-cjs.js deleted file mode 100644 index de92929f..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/is-cjs.js +++ /dev/null @@ -1,28 +0,0 @@ -const isCjsPromises = Object.create(null); - -export function getIsCjsPromise(id) { - let isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) return isCjsPromise.promise; - - const promise = new Promise(resolve => { - isCjsPromises[id] = isCjsPromise = { - resolve, - promise: undefined - }; - }); - isCjsPromise.promise = promise; - - return promise; -} - -export function setIsCjsPromise(id, promise) { - const isCjsPromise = isCjsPromises[id]; - if (isCjsPromise) { - if (isCjsPromise.resolve) { - isCjsPromise.resolve(promise); - isCjsPromise.resolve = undefined; - } - } else { - isCjsPromises[id] = { promise, resolve: undefined }; - } -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/resolve-id.js b/build/node_modules/rollup-plugin-commonjs/src/resolve-id.js deleted file mode 100644 index 36bf4532..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/resolve-id.js +++ /dev/null @@ -1,86 +0,0 @@ -import { statSync } from 'fs'; -import { dirname, resolve, sep } from 'path'; -import defaultResolver from './default-resolver'; -import { EXTERNAL_PREFIX, PROXY_PREFIX } from './helpers'; -import { first } from './utils'; - -function getCandidatesForExtension(resolved, extension) { - return [resolved + extension, resolved + `${sep}index${extension}`]; -} - -function getCandidates(resolved, extensions) { - return extensions.reduce( - (paths, extension) => paths.concat(getCandidatesForExtension(resolved, extension)), - [resolved] - ); -} - -export function getResolveId(extensions) { - let resolveUsingOtherResolvers; - - function resolveId(importee, importer) { - const isProxyModule = importee.startsWith(PROXY_PREFIX); - if (isProxyModule) { - importee = importee.slice(PROXY_PREFIX.length); - } else if (importee.startsWith('\0')) { - return importee; - } - - if (importer && importer.startsWith(PROXY_PREFIX)) { - importer = importer.slice(PROXY_PREFIX.length); - } - - return resolveUsingOtherResolvers.call(this, importee, importer).then(resolved => { - if (resolved) return isProxyModule ? PROXY_PREFIX + resolved : resolved; - - resolved = defaultResolver(importee, importer); - - if (isProxyModule) { - if (resolved) return PROXY_PREFIX + resolved; - return EXTERNAL_PREFIX + importee; // external - } - - return resolved; - }); - } - - resolveId.setRollupOptions = function(options) { - const resolvers = (options.plugins || []) - .map(plugin => { - if (plugin.resolveId === resolveId) { - // substitute CommonJS resolution logic - return (importee, importer) => { - if (importee[0] !== '.' || !importer) return; // not our problem - - const resolved = resolve(dirname(importer), importee); - const candidates = getCandidates(resolved, extensions); - - for (let i = 0; i < candidates.length; i += 1) { - try { - const stats = statSync(candidates[i]); - if (stats.isFile()) return candidates[i]; - } catch (err) { - /* noop */ - } - } - }; - } - - return plugin.resolveId; - }) - .filter(Boolean); - - const isExternal = id => - options.external - ? Array.isArray(options.external) - ? options.external.includes(id) - : options.external(id) - : false; - - resolvers.unshift(id => (isExternal(id) ? false : null)); - - resolveUsingOtherResolvers = first(resolvers); - }; - - return resolveId; -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/transform.js b/build/node_modules/rollup-plugin-commonjs/src/transform.js deleted file mode 100644 index 53bc9564..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/transform.js +++ /dev/null @@ -1,497 +0,0 @@ -import { walk } from 'estree-walker'; -import MagicString from 'magic-string'; -import { attachScopes, extractAssignedNames, makeLegalIdentifier } from 'rollup-pluginutils'; -import { flatten, isFalsy, isReference, isTruthy } from './ast-utils.js'; -import { HELPERS_ID, PROXY_PREFIX } from './helpers.js'; -import { getName } from './utils.js'; - -const reserved = 'process location abstract arguments boolean break byte case catch char class const continue debugger default delete do double else enum eval export extends false final finally float for from function goto if implements import in instanceof int interface let long native new null package private protected public return short static super switch synchronized this throw throws transient true try typeof var void volatile while with yield'.split( - ' ' -); -const blacklist = { __esModule: true }; -reserved.forEach(word => (blacklist[word] = true)); - -const exportsPattern = /^(?:module\.)?exports(?:\.([a-zA-Z_$][a-zA-Z_$0-9]*))?$/; - -const firstpassGlobal = /\b(?:require|module|exports|global)\b/; -const firstpassNoGlobal = /\b(?:require|module|exports)\b/; -const importExportDeclaration = /^(?:Import|Export(?:Named|Default))Declaration/; -const functionType = /^(?:FunctionDeclaration|FunctionExpression|ArrowFunctionExpression)$/; - -function deconflict(scope, globals, identifier) { - let i = 1; - let deconflicted = identifier; - - while (scope.contains(deconflicted) || globals.has(deconflicted) || deconflicted in blacklist) - deconflicted = `${identifier}_${i++}`; - scope.declarations[deconflicted] = true; - - return deconflicted; -} - -function tryParse(parse, code, id) { - try { - return parse(code, { allowReturnOutsideFunction: true }); - } catch (err) { - err.message += ` in ${id}`; - throw err; - } -} - -export function hasCjsKeywords(code, ignoreGlobal) { - const firstpass = ignoreGlobal ? firstpassNoGlobal : firstpassGlobal; - return firstpass.test(code); -} - -export function checkEsModule(parse, code, id) { - const ast = tryParse(parse, code, id); - - let isEsModule = false; - for (const node of ast.body) { - if (node.type === 'ExportDefaultDeclaration') - return { isEsModule: true, hasDefaultExport: true, ast }; - if (node.type === 'ExportNamedDeclaration') { - isEsModule = true; - for (const specifier of node.specifiers) { - if (specifier.exported.name === 'default') { - return { isEsModule: true, hasDefaultExport: true, ast }; - } - } - } else if (importExportDeclaration.test(node.type)) isEsModule = true; - } - - return { isEsModule, hasDefaultExport: false, ast }; -} - -export function transformCommonjs( - parse, - code, - id, - isEntry, - ignoreGlobal, - ignoreRequire, - customNamedExports, - sourceMap, - allowDynamicRequire, - astCache -) { - const ast = astCache || tryParse(parse, code, id); - - const magicString = new MagicString(code); - - const required = {}; - // Because objects have no guaranteed ordering, yet we need it, - // we need to keep track of the order in a array - const sources = []; - - let uid = 0; - - let scope = attachScopes(ast, 'scope'); - const uses = { module: false, exports: false, global: false, require: false }; - - let lexicalDepth = 0; - let programDepth = 0; - - const globals = new Set(); - - const HELPERS_NAME = deconflict(scope, globals, 'commonjsHelpers'); // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ - - const namedExports = {}; - - // TODO handle transpiled modules - let shouldWrap = /__esModule/.test(code); - - function isRequireStatement(node) { - if (!node) return; - if (node.type !== 'CallExpression') return; - if (node.callee.name !== 'require' || scope.contains('require')) return; - if (node.arguments.length === 0) return; // Weird case of require() without arguments - return true; - } - - function hasDynamicArguments(node) { - return ( - node.arguments.length > 1 || - (node.arguments[0].type !== 'Literal' && - (node.arguments[0].type !== 'TemplateLiteral' || node.arguments[0].expressions.length > 0)) - ); - } - - function isStaticRequireStatement(node) { - if (!isRequireStatement(node)) return; - if (hasDynamicArguments(node)) return; - if (ignoreRequire(node.arguments[0].value)) return; - return true; - } - - function getRequireStringArg(node) { - return node.arguments[0].type === 'Literal' - ? node.arguments[0].value - : node.arguments[0].quasis[0].value.cooked; - } - - function getRequired(node, name) { - const sourceId = getRequireStringArg(node); - const existing = required[sourceId]; - if (existing === undefined) { - if (!name) { - do name = `require$$${uid++}`; - while (scope.contains(name)); - } - - sources.push(sourceId); - required[sourceId] = { source: sourceId, name, importsDefault: false }; - } - - return required[sourceId]; - } - - // do a first pass, see which names are assigned to. This is necessary to prevent - // illegally replacing `var foo = require('foo')` with `import foo from 'foo'`, - // where `foo` is later reassigned. (This happens in the wild. CommonJS, sigh) - const assignedTo = new Set(); - walk(ast, { - enter(node) { - if (node.type !== 'AssignmentExpression') return; - if (node.left.type === 'MemberExpression') return; - - extractAssignedNames(node.left).forEach(name => { - assignedTo.add(name); - }); - } - }); - - walk(ast, { - enter(node, parent) { - if (sourceMap) { - magicString.addSourcemapLocation(node.start); - magicString.addSourcemapLocation(node.end); - } - - // skip dead branches - if (parent && (parent.type === 'IfStatement' || parent.type === 'ConditionalExpression')) { - if (node === parent.consequent && isFalsy(parent.test)) return this.skip(); - if (node === parent.alternate && isTruthy(parent.test)) return this.skip(); - } - - if (node._skip) return this.skip(); - - programDepth += 1; - - if (node.scope) scope = node.scope; - if (functionType.test(node.type)) lexicalDepth += 1; - - // if toplevel return, we need to wrap it - if (node.type === 'ReturnStatement' && lexicalDepth === 0) { - shouldWrap = true; - } - - // rewrite `this` as `commonjsHelpers.commonjsGlobal` - if (node.type === 'ThisExpression' && lexicalDepth === 0) { - uses.global = true; - if (!ignoreGlobal) - magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { - storeName: true - }); - return; - } - - // rewrite `typeof module`, `typeof module.exports` and `typeof exports` (https://github.com/rollup/rollup-plugin-commonjs/issues/151) - if (node.type === 'UnaryExpression' && node.operator === 'typeof') { - const flattened = flatten(node.argument); - if (!flattened) return; - - if (scope.contains(flattened.name)) return; - - if ( - flattened.keypath === 'module.exports' || - flattened.keypath === 'module' || - flattened.keypath === 'exports' - ) { - magicString.overwrite(node.start, node.end, `'object'`, { storeName: false }); - } - } - - // rewrite `require` (if not already handled) `global` and `define`, and handle free references to - // `module` and `exports` as these mean we need to wrap the module in commonjsHelpers.createCommonjsModule - if (node.type === 'Identifier') { - if (isReference(node, parent) && !scope.contains(node.name)) { - if (node.name in uses) { - if (node.name === 'require') { - if (allowDynamicRequire) return; - magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsRequire`, { - storeName: true - }); - } - - uses[node.name] = true; - if (node.name === 'global' && !ignoreGlobal) { - magicString.overwrite(node.start, node.end, `${HELPERS_NAME}.commonjsGlobal`, { - storeName: true - }); - } - - // if module or exports are used outside the context of an assignment - // expression, we need to wrap the module - if (node.name === 'module' || node.name === 'exports') { - shouldWrap = true; - } - } - - if (node.name === 'define') { - magicString.overwrite(node.start, node.end, 'undefined', { storeName: true }); - } - - globals.add(node.name); - } - - return; - } - - // Is this an assignment to exports or module.exports? - if (node.type === 'AssignmentExpression') { - if (node.left.type !== 'MemberExpression') return; - - const flattened = flatten(node.left); - if (!flattened) return; - - if (scope.contains(flattened.name)) return; - - const match = exportsPattern.exec(flattened.keypath); - if (!match || flattened.keypath === 'exports') return; - - uses[flattened.name] = true; - - // we're dealing with `module.exports = ...` or `[module.]exports.foo = ...` – - // if this isn't top-level, we'll need to wrap the module - if (programDepth > 3) shouldWrap = true; - - node.left._skip = true; - - if (flattened.keypath === 'module.exports' && node.right.type === 'ObjectExpression') { - return node.right.properties.forEach(prop => { - if (prop.computed || prop.key.type !== 'Identifier') return; - const name = prop.key.name; - if (name === makeLegalIdentifier(name)) namedExports[name] = true; - }); - } - - if (match[1]) namedExports[match[1]] = true; - return; - } - - // if this is `var x = require('x')`, we can do `import x from 'x'` - if ( - node.type === 'VariableDeclarator' && - node.id.type === 'Identifier' && - isStaticRequireStatement(node.init) - ) { - // for now, only do this for top-level requires. maybe fix this in future - if (scope.parent) return; - - // edge case — CJS allows you to assign to imports. ES doesn't - if (assignedTo.has(node.id.name)) return; - - const required = getRequired(node.init, node.id.name); - required.importsDefault = true; - - if (required.name === node.id.name) { - node._shouldRemove = true; - } - } - - if (!isStaticRequireStatement(node)) return; - - const required = getRequired(node); - - if (parent.type === 'ExpressionStatement') { - // is a bare import, e.g. `require('foo');` - magicString.remove(parent.start, parent.end); - } else { - required.importsDefault = true; - magicString.overwrite(node.start, node.end, required.name); - } - - node.callee._skip = true; - }, - - leave(node) { - programDepth -= 1; - if (node.scope) scope = scope.parent; - if (functionType.test(node.type)) lexicalDepth -= 1; - - if (node.type === 'VariableDeclaration') { - let keepDeclaration = false; - let c = node.declarations[0].start; - - for (let i = 0; i < node.declarations.length; i += 1) { - const declarator = node.declarations[i]; - - if (declarator._shouldRemove) { - magicString.remove(c, declarator.end); - } else { - if (!keepDeclaration) { - magicString.remove(c, declarator.start); - keepDeclaration = true; - } - - c = declarator.end; - } - } - - if (!keepDeclaration) { - magicString.remove(node.start, node.end); - } - } - } - }); - - if ( - !sources.length && - !uses.module && - !uses.exports && - !uses.require && - (ignoreGlobal || !uses.global) - ) { - if (Object.keys(namedExports).length) { - throw new Error( - `Custom named exports were specified for ${id} but it does not appear to be a CommonJS module` - ); - } - return null; // not a CommonJS module - } - - const includeHelpers = shouldWrap || uses.global || uses.require; - const importBlock = - (includeHelpers ? [`import * as ${HELPERS_NAME} from '${HELPERS_ID}';`] : []) - .concat( - sources.map(source => { - // import the actual module before the proxy, so that we know - // what kind of proxy to build - return `import '${source}';`; - }), - sources.map(source => { - const { name, importsDefault } = required[source]; - return `import ${importsDefault ? `${name} from ` : ``}'${PROXY_PREFIX}${source}';`; - }) - ) - .join('\n') + '\n\n'; - - const namedExportDeclarations = []; - let wrapperStart = ''; - let wrapperEnd = ''; - - const moduleName = deconflict(scope, globals, getName(id)); - if (!isEntry) { - const exportModuleExports = { - str: `export { ${moduleName} as __moduleExports };`, - name: '__moduleExports' - }; - - namedExportDeclarations.push(exportModuleExports); - } - - const name = getName(id); - - function addExport(x) { - const deconflicted = deconflict(scope, globals, name); - - const declaration = - deconflicted === name - ? `export var ${x} = ${moduleName}.${x};` - : `var ${deconflicted} = ${moduleName}.${x};\nexport { ${deconflicted} as ${x} };`; - - namedExportDeclarations.push({ - str: declaration, - name: x - }); - } - - if (customNamedExports) customNamedExports.forEach(addExport); - - const defaultExportPropertyAssignments = []; - let hasDefaultExport = false; - - if (shouldWrap) { - const args = `module${uses.exports ? ', exports' : ''}`; - - wrapperStart = `var ${moduleName} = ${HELPERS_NAME}.createCommonjsModule(function (${args}) {\n`; - wrapperEnd = `\n});`; - } else { - const names = []; - - ast.body.forEach(node => { - if (node.type === 'ExpressionStatement' && node.expression.type === 'AssignmentExpression') { - const left = node.expression.left; - const flattened = flatten(left); - - if (!flattened) return; - - const match = exportsPattern.exec(flattened.keypath); - if (!match) return; - - if (flattened.keypath === 'module.exports') { - hasDefaultExport = true; - magicString.overwrite(left.start, left.end, `var ${moduleName}`); - } else { - const name = match[1]; - const deconflicted = deconflict(scope, globals, name); - - names.push({ name, deconflicted }); - - magicString.overwrite(node.start, left.end, `var ${deconflicted}`); - - const declaration = - name === deconflicted - ? `export { ${name} };` - : `export { ${deconflicted} as ${name} };`; - - if (name !== 'default') { - namedExportDeclarations.push({ - str: declaration, - name - }); - delete namedExports[name]; - } - - defaultExportPropertyAssignments.push(`${moduleName}.${name} = ${deconflicted};`); - } - } - }); - - if (!hasDefaultExport) { - wrapperEnd = `\n\nvar ${moduleName} = {\n${names - .map(({ name, deconflicted }) => `\t${name}: ${deconflicted}`) - .join(',\n')}\n};`; - } - } - Object.keys(namedExports) - .filter(key => !blacklist[key]) - .forEach(addExport); - - const defaultExport = /__esModule/.test(code) - ? `export default ${HELPERS_NAME}.unwrapExports(${moduleName});` - : `export default ${moduleName};`; - - const named = namedExportDeclarations - .filter(x => x.name !== 'default' || !hasDefaultExport) - .map(x => x.str); - - const exportBlock = - '\n\n' + - [defaultExport] - .concat(named) - .concat(hasDefaultExport ? defaultExportPropertyAssignments : []) - .join('\n'); - - magicString - .trim() - .prepend(importBlock + wrapperStart) - .trim() - .append(wrapperEnd + exportBlock); - - code = magicString.toString(); - const map = sourceMap ? magicString.generateMap() : null; - - return { code, map }; -} diff --git a/build/node_modules/rollup-plugin-commonjs/src/utils.js b/build/node_modules/rollup-plugin-commonjs/src/utils.js deleted file mode 100644 index fc86cd0c..00000000 --- a/build/node_modules/rollup-plugin-commonjs/src/utils.js +++ /dev/null @@ -1,24 +0,0 @@ -import { basename, dirname, extname, sep } from 'path'; -import { makeLegalIdentifier } from 'rollup-pluginutils'; - -export function getName(id) { - const name = makeLegalIdentifier(basename(id, extname(id))); - if (name !== 'index') { - return name; - } else { - const segments = dirname(id).split(sep); - return makeLegalIdentifier(segments[segments.length - 1]); - } -} - -// Return the first non-falsy result from an array of -// maybe-sync, maybe-promise-returning functions -export function first(candidates) { - return function(...args) { - return candidates.reduce((promise, candidate) => { - return promise.then(result => - result != null ? result : Promise.resolve(candidate.call(this, ...args)) - ); - }, Promise.resolve()); - }; -} diff --git a/build/node_modules/rollup-plugin-json/CHANGELOG.md b/build/node_modules/rollup-plugin-json/CHANGELOG.md deleted file mode 100644 index 3c443554..00000000 --- a/build/node_modules/rollup-plugin-json/CHANGELOG.md +++ /dev/null @@ -1,43 +0,0 @@ -# rollup-plugin-json changelog - -## 2.3.1 -*2018-05-11* -* Update example in readme ([#38](https://github.com/rollup/rollup-plugin-json/issues/38)) -* Warn when using this version with upcoming rollup versions - -## 2.3.0 - -* Always parse JSON, so malformed JSON is identified at bundle time ([#27](https://github.com/rollup/rollup-plugin-json/issues/27)) - -## 2.2.0 - -* Add `indent` option ([#24](https://github.com/rollup/rollup-plugin-json/issues/24)) - -## 2.1.1 - -* Add license to package.json ([#25](https://github.com/rollup/rollup-plugin-json/pull/25)) - -## 2.1.0 - -* Add support for `preferConst` option ([#16](https://github.com/rollup/rollup-plugin-json/pull/16)) -* Handle JSON files with no valid identifier keys ([#19](https://github.com/rollup/rollup-plugin-json/issues/19)) - -## 2.0.2 - -* Generate correct fake AST - -## 2.0.1 - -* Return a `name` - -## 2.0.0 - -* Generate fake AST to avoid unnecessary traversals within Rollup - -## 1.1.0 - -* Generate named exports alongside default exports - -## 1.0.0 - -* First release diff --git a/build/node_modules/rollup-plugin-json/README.md b/build/node_modules/rollup-plugin-json/README.md deleted file mode 100644 index 425b87cf..00000000 --- a/build/node_modules/rollup-plugin-json/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# rollup-plugin-json - -Convert .json files to ES6 modules: - -```js -// import a single property from a JSON file, -// discarding the rest -import { version } from './package.json'; -console.log( `running version ${version}` ); - -// import the whole file as an object -import pkg from './package.json'; -console.log( `running version ${pkg.version}` ); -``` - - -## Installation - -```bash -npm install --save-dev rollup-plugin-json -``` - - -## Usage - -```js -// rollup.config.js -import json from 'rollup-plugin-json'; - -export default { - input: 'src/main.js', - output: { - file: 'dist/bundle.js', - format: 'iife' - }, - - plugins: [ - json({ - // All JSON files will be parsed by default, - // but you can also specifically include/exclude files - include: 'node_modules/**', - exclude: [ 'node_modules/foo/**', 'node_modules/bar/**' ], - - // for tree-shaking, properties will be declared as - // variables, using either `var` or `const` - preferConst: true, // Default: false - - // specify indentation for the generated default export — - // defaults to '\t' - indent: ' ' - }) - ] -}; -``` - - -## License - -MIT diff --git a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js b/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js deleted file mode 100644 index 1030dee8..00000000 --- a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js +++ /dev/null @@ -1,178 +0,0 @@ -'use strict'; - -var rollupPluginutils = require('rollup-pluginutils'); - -function json(options) { - if ( options === void 0 ) options = {}; - - var filter = rollupPluginutils.createFilter(options.include, options.exclude); - - return { - name: 'json', - - transform: function transform(json, id) { - if (id.slice(-5) !== '.json') { return null; } - if (!filter(id)) { return null; } - - var data = JSON.parse(json); - var code = ''; - - var ast = { - type: 'Program', - sourceType: 'module', - start: 0, - end: null, - body: [] - }; - - if (Object.prototype.toString.call(data) !== '[object Object]') { - code = "export default " + json + ";"; - - ast.body.push({ - type: 'ExportDefaultDeclaration', - start: 0, - end: code.length, - declaration: { - type: 'Literal', - start: 15, - end: code.length - 1, - value: null, - raw: 'null' - } - }); - } else { - var indent = 'indent' in options ? options.indent : '\t'; - - var validKeys = []; - var invalidKeys = []; - - Object.keys(data).forEach(function (key) { - if (key === rollupPluginutils.makeLegalIdentifier(key)) { - validKeys.push(key); - } else { - invalidKeys.push(key); - } - }); - - var char = 0; - - validKeys.forEach(function (key) { - var declarationType = options.preferConst ? 'const' : 'var'; - var declaration = "export " + declarationType + " " + key + " = " + (JSON.stringify(data[key])) + ";"; - - var start = char; - var end = start + declaration.length; - - // generate fake AST node while we're here - ast.body.push({ - type: 'ExportNamedDeclaration', - start: char, - end: char + declaration.length, - declaration: { - type: 'VariableDeclaration', - start: start + 7, // 'export '.length - end: end, - declarations: [ - { - type: 'VariableDeclarator', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: end - 1, - id: { - type: 'Identifier', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: start + 7 + declarationType.length + 1 + key.length, // `export ${declarationType} ${key}`.length - name: key - }, - init: { - type: 'Literal', - start: start + - 7 + - declarationType.length + - 1 + - key.length + - 3, // `export ${declarationType} ${key} = `.length - end: end - 1, - value: null, - raw: 'null' - } - } - ], - kind: declarationType - }, - specifiers: [], - source: null - }); - - char = end + 1; - code += declaration + "\n"; - }); - - var defaultExportNode = { - type: 'ExportDefaultDeclaration', - start: char, - end: null, - declaration: { - type: 'ObjectExpression', - start: char + 15, - end: null, - properties: [] - } - }; - - char += 17 + indent.length; // 'export default {\n\t'.length' - - var defaultExportRows = validKeys - .map(function (key) { - var row = key + ": " + key; - - var start = char; - var end = start + row.length; - - defaultExportNode.declaration.properties.push({ - type: 'Property', - start: start, - end: end, - method: false, - shorthand: false, - computed: false, - key: { - type: 'Identifier', - start: start, - end: start + key.length, - name: key - }, - value: { - type: 'Identifier', - start: start + key.length + 2, - end: end, - name: key - }, - kind: 'init' - }); - - char += row.length + (2 + indent.length); // ',\n\t'.length - - return row; - }) - .concat( - invalidKeys.map(function (key) { return ("\"" + key + "\": " + (JSON.stringify(data[key]))); }) - ); - - code += "export default {\n" + indent + (defaultExportRows.join((",\n" + indent))) + "\n};"; - ast.body.push(defaultExportNode); - - var end = code.length; - - defaultExportNode.declaration.end = end - 1; - defaultExportNode.end = end; - } - - ast.end = code.length; - - return { ast: ast, code: code, map: { mappings: '' } }; - } - }; -} - -module.exports = json; -//# sourceMappingURL=rollup-plugin-json.cjs.js.map diff --git a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js.map b/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js.map deleted file mode 100644 index 01ac7f11..00000000 --- a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rollup-plugin-json.cjs.js","sources":["../src/index.js"],"sourcesContent":["import { createFilter, makeLegalIdentifier } from 'rollup-pluginutils';\n\nexport default function json(options = {}) {\n\tconst filter = createFilter(options.include, options.exclude);\n\n\treturn {\n\t\tname: 'json',\n\n\t\ttransform(json, id) {\n\t\t\tif (id.slice(-5) !== '.json') return null;\n\t\t\tif (!filter(id)) return null;\n\n\t\t\tconst data = JSON.parse(json);\n\t\t\tlet code = '';\n\n\t\t\tconst ast = {\n\t\t\t\ttype: 'Program',\n\t\t\t\tsourceType: 'module',\n\t\t\t\tstart: 0,\n\t\t\t\tend: null,\n\t\t\t\tbody: []\n\t\t\t};\n\n\t\t\tif (Object.prototype.toString.call(data) !== '[object Object]') {\n\t\t\t\tcode = `export default ${json};`;\n\n\t\t\t\tast.body.push({\n\t\t\t\t\ttype: 'ExportDefaultDeclaration',\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tend: code.length,\n\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\tstart: 15,\n\t\t\t\t\t\tend: code.length - 1,\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\traw: 'null'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst indent = 'indent' in options ? options.indent : '\\t';\n\n\t\t\t\tconst validKeys = [];\n\t\t\t\tconst invalidKeys = [];\n\n\t\t\t\tObject.keys(data).forEach(key => {\n\t\t\t\t\tif (key === makeLegalIdentifier(key)) {\n\t\t\t\t\t\tvalidKeys.push(key);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinvalidKeys.push(key);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet char = 0;\n\n\t\t\t\tvalidKeys.forEach(key => {\n\t\t\t\t\tconst declarationType = options.preferConst ? 'const' : 'var';\n\t\t\t\t\tconst declaration = `export ${declarationType} ${key} = ${JSON.stringify(data[key])};`;\n\n\t\t\t\t\tconst start = char;\n\t\t\t\t\tconst end = start + declaration.length;\n\n\t\t\t\t\t// generate fake AST node while we're here\n\t\t\t\t\tast.body.push({\n\t\t\t\t\t\ttype: 'ExportNamedDeclaration',\n\t\t\t\t\t\tstart: char,\n\t\t\t\t\t\tend: char + declaration.length,\n\t\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\t\ttype: 'VariableDeclaration',\n\t\t\t\t\t\t\tstart: start + 7, // 'export '.length\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\tdeclarations: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: 'VariableDeclarator',\n\t\t\t\t\t\t\t\t\tstart: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length\n\t\t\t\t\t\t\t\t\tend: end - 1,\n\t\t\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\t\t\tstart: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length\n\t\t\t\t\t\t\t\t\t\tend: start + 7 + declarationType.length + 1 + key.length, // `export ${declarationType} ${key}`.length\n\t\t\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tinit: {\n\t\t\t\t\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\t\t\t\t\tstart: start +\n\t\t\t\t\t\t\t\t\t\t\t7 +\n\t\t\t\t\t\t\t\t\t\t\tdeclarationType.length +\n\t\t\t\t\t\t\t\t\t\t\t1 +\n\t\t\t\t\t\t\t\t\t\t\tkey.length +\n\t\t\t\t\t\t\t\t\t\t\t3, // `export ${declarationType} ${key} = `.length\n\t\t\t\t\t\t\t\t\t\tend: end - 1,\n\t\t\t\t\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\t\t\t\t\traw: 'null'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tkind: declarationType\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspecifiers: [],\n\t\t\t\t\t\tsource: null\n\t\t\t\t\t});\n\n\t\t\t\t\tchar = end + 1;\n\t\t\t\t\tcode += `${declaration}\\n`;\n\t\t\t\t});\n\n\t\t\t\tconst defaultExportNode = {\n\t\t\t\t\ttype: 'ExportDefaultDeclaration',\n\t\t\t\t\tstart: char,\n\t\t\t\t\tend: null,\n\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\ttype: 'ObjectExpression',\n\t\t\t\t\t\tstart: char + 15,\n\t\t\t\t\t\tend: null,\n\t\t\t\t\t\tproperties: []\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tchar += 17 + indent.length; // 'export default {\\n\\t'.length'\n\n\t\t\t\tconst defaultExportRows = validKeys\n\t\t\t\t\t.map(key => {\n\t\t\t\t\t\tconst row = `${key}: ${key}`;\n\n\t\t\t\t\t\tconst start = char;\n\t\t\t\t\t\tconst end = start + row.length;\n\n\t\t\t\t\t\tdefaultExportNode.declaration.properties.push({\n\t\t\t\t\t\t\ttype: 'Property',\n\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\tmethod: false,\n\t\t\t\t\t\t\tshorthand: false,\n\t\t\t\t\t\t\tcomputed: false,\n\t\t\t\t\t\t\tkey: {\n\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\tend: start + key.length,\n\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\tstart: start + key.length + 2,\n\t\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkind: 'init'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchar += row.length + (2 + indent.length); // ',\\n\\t'.length\n\n\t\t\t\t\t\treturn row;\n\t\t\t\t\t})\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tinvalidKeys.map(key => `\"${key}\": ${JSON.stringify(data[key])}`)\n\t\t\t\t\t);\n\n\t\t\t\tcode += `export default {\\n${indent}${defaultExportRows.join(`,\\n${indent}`)}\\n};`;\n\t\t\t\tast.body.push(defaultExportNode);\n\n\t\t\t\tconst end = code.length;\n\n\t\t\t\tdefaultExportNode.declaration.end = end - 1;\n\t\t\t\tdefaultExportNode.end = end;\n\t\t\t}\n\n\t\t\tast.end = code.length;\n\n\t\t\treturn { ast, code, map: { mappings: '' } };\n\t\t}\n\t};\n}\n"],"names":["const","createFilter","let","makeLegalIdentifier"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js b/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js deleted file mode 100644 index c86de369..00000000 --- a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js +++ /dev/null @@ -1,176 +0,0 @@ -import { createFilter, makeLegalIdentifier } from 'rollup-pluginutils'; - -function json(options) { - if ( options === void 0 ) options = {}; - - var filter = createFilter(options.include, options.exclude); - - return { - name: 'json', - - transform: function transform(json, id) { - if (id.slice(-5) !== '.json') { return null; } - if (!filter(id)) { return null; } - - var data = JSON.parse(json); - var code = ''; - - var ast = { - type: 'Program', - sourceType: 'module', - start: 0, - end: null, - body: [] - }; - - if (Object.prototype.toString.call(data) !== '[object Object]') { - code = "export default " + json + ";"; - - ast.body.push({ - type: 'ExportDefaultDeclaration', - start: 0, - end: code.length, - declaration: { - type: 'Literal', - start: 15, - end: code.length - 1, - value: null, - raw: 'null' - } - }); - } else { - var indent = 'indent' in options ? options.indent : '\t'; - - var validKeys = []; - var invalidKeys = []; - - Object.keys(data).forEach(function (key) { - if (key === makeLegalIdentifier(key)) { - validKeys.push(key); - } else { - invalidKeys.push(key); - } - }); - - var char = 0; - - validKeys.forEach(function (key) { - var declarationType = options.preferConst ? 'const' : 'var'; - var declaration = "export " + declarationType + " " + key + " = " + (JSON.stringify(data[key])) + ";"; - - var start = char; - var end = start + declaration.length; - - // generate fake AST node while we're here - ast.body.push({ - type: 'ExportNamedDeclaration', - start: char, - end: char + declaration.length, - declaration: { - type: 'VariableDeclaration', - start: start + 7, // 'export '.length - end: end, - declarations: [ - { - type: 'VariableDeclarator', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: end - 1, - id: { - type: 'Identifier', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: start + 7 + declarationType.length + 1 + key.length, // `export ${declarationType} ${key}`.length - name: key - }, - init: { - type: 'Literal', - start: start + - 7 + - declarationType.length + - 1 + - key.length + - 3, // `export ${declarationType} ${key} = `.length - end: end - 1, - value: null, - raw: 'null' - } - } - ], - kind: declarationType - }, - specifiers: [], - source: null - }); - - char = end + 1; - code += declaration + "\n"; - }); - - var defaultExportNode = { - type: 'ExportDefaultDeclaration', - start: char, - end: null, - declaration: { - type: 'ObjectExpression', - start: char + 15, - end: null, - properties: [] - } - }; - - char += 17 + indent.length; // 'export default {\n\t'.length' - - var defaultExportRows = validKeys - .map(function (key) { - var row = key + ": " + key; - - var start = char; - var end = start + row.length; - - defaultExportNode.declaration.properties.push({ - type: 'Property', - start: start, - end: end, - method: false, - shorthand: false, - computed: false, - key: { - type: 'Identifier', - start: start, - end: start + key.length, - name: key - }, - value: { - type: 'Identifier', - start: start + key.length + 2, - end: end, - name: key - }, - kind: 'init' - }); - - char += row.length + (2 + indent.length); // ',\n\t'.length - - return row; - }) - .concat( - invalidKeys.map(function (key) { return ("\"" + key + "\": " + (JSON.stringify(data[key]))); }) - ); - - code += "export default {\n" + indent + (defaultExportRows.join((",\n" + indent))) + "\n};"; - ast.body.push(defaultExportNode); - - var end = code.length; - - defaultExportNode.declaration.end = end - 1; - defaultExportNode.end = end; - } - - ast.end = code.length; - - return { ast: ast, code: code, map: { mappings: '' } }; - } - }; -} - -export default json; -//# sourceMappingURL=rollup-plugin-json.es.js.map diff --git a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js.map b/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js.map deleted file mode 100644 index 141a359d..00000000 --- a/build/node_modules/rollup-plugin-json/dist/rollup-plugin-json.es.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rollup-plugin-json.es.js","sources":["../src/index.js"],"sourcesContent":["import { createFilter, makeLegalIdentifier } from 'rollup-pluginutils';\n\nexport default function json(options = {}) {\n\tconst filter = createFilter(options.include, options.exclude);\n\n\treturn {\n\t\tname: 'json',\n\n\t\ttransform(json, id) {\n\t\t\tif (id.slice(-5) !== '.json') return null;\n\t\t\tif (!filter(id)) return null;\n\n\t\t\tconst data = JSON.parse(json);\n\t\t\tlet code = '';\n\n\t\t\tconst ast = {\n\t\t\t\ttype: 'Program',\n\t\t\t\tsourceType: 'module',\n\t\t\t\tstart: 0,\n\t\t\t\tend: null,\n\t\t\t\tbody: []\n\t\t\t};\n\n\t\t\tif (Object.prototype.toString.call(data) !== '[object Object]') {\n\t\t\t\tcode = `export default ${json};`;\n\n\t\t\t\tast.body.push({\n\t\t\t\t\ttype: 'ExportDefaultDeclaration',\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tend: code.length,\n\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\tstart: 15,\n\t\t\t\t\t\tend: code.length - 1,\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\traw: 'null'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst indent = 'indent' in options ? options.indent : '\\t';\n\n\t\t\t\tconst validKeys = [];\n\t\t\t\tconst invalidKeys = [];\n\n\t\t\t\tObject.keys(data).forEach(key => {\n\t\t\t\t\tif (key === makeLegalIdentifier(key)) {\n\t\t\t\t\t\tvalidKeys.push(key);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinvalidKeys.push(key);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet char = 0;\n\n\t\t\t\tvalidKeys.forEach(key => {\n\t\t\t\t\tconst declarationType = options.preferConst ? 'const' : 'var';\n\t\t\t\t\tconst declaration = `export ${declarationType} ${key} = ${JSON.stringify(data[key])};`;\n\n\t\t\t\t\tconst start = char;\n\t\t\t\t\tconst end = start + declaration.length;\n\n\t\t\t\t\t// generate fake AST node while we're here\n\t\t\t\t\tast.body.push({\n\t\t\t\t\t\ttype: 'ExportNamedDeclaration',\n\t\t\t\t\t\tstart: char,\n\t\t\t\t\t\tend: char + declaration.length,\n\t\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\t\ttype: 'VariableDeclaration',\n\t\t\t\t\t\t\tstart: start + 7, // 'export '.length\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\tdeclarations: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: 'VariableDeclarator',\n\t\t\t\t\t\t\t\t\tstart: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length\n\t\t\t\t\t\t\t\t\tend: end - 1,\n\t\t\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\t\t\tstart: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length\n\t\t\t\t\t\t\t\t\t\tend: start + 7 + declarationType.length + 1 + key.length, // `export ${declarationType} ${key}`.length\n\t\t\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tinit: {\n\t\t\t\t\t\t\t\t\t\ttype: 'Literal',\n\t\t\t\t\t\t\t\t\t\tstart: start +\n\t\t\t\t\t\t\t\t\t\t\t7 +\n\t\t\t\t\t\t\t\t\t\t\tdeclarationType.length +\n\t\t\t\t\t\t\t\t\t\t\t1 +\n\t\t\t\t\t\t\t\t\t\t\tkey.length +\n\t\t\t\t\t\t\t\t\t\t\t3, // `export ${declarationType} ${key} = `.length\n\t\t\t\t\t\t\t\t\t\tend: end - 1,\n\t\t\t\t\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\t\t\t\t\traw: 'null'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tkind: declarationType\n\t\t\t\t\t\t},\n\t\t\t\t\t\tspecifiers: [],\n\t\t\t\t\t\tsource: null\n\t\t\t\t\t});\n\n\t\t\t\t\tchar = end + 1;\n\t\t\t\t\tcode += `${declaration}\\n`;\n\t\t\t\t});\n\n\t\t\t\tconst defaultExportNode = {\n\t\t\t\t\ttype: 'ExportDefaultDeclaration',\n\t\t\t\t\tstart: char,\n\t\t\t\t\tend: null,\n\t\t\t\t\tdeclaration: {\n\t\t\t\t\t\ttype: 'ObjectExpression',\n\t\t\t\t\t\tstart: char + 15,\n\t\t\t\t\t\tend: null,\n\t\t\t\t\t\tproperties: []\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tchar += 17 + indent.length; // 'export default {\\n\\t'.length'\n\n\t\t\t\tconst defaultExportRows = validKeys\n\t\t\t\t\t.map(key => {\n\t\t\t\t\t\tconst row = `${key}: ${key}`;\n\n\t\t\t\t\t\tconst start = char;\n\t\t\t\t\t\tconst end = start + row.length;\n\n\t\t\t\t\t\tdefaultExportNode.declaration.properties.push({\n\t\t\t\t\t\t\ttype: 'Property',\n\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\tmethod: false,\n\t\t\t\t\t\t\tshorthand: false,\n\t\t\t\t\t\t\tcomputed: false,\n\t\t\t\t\t\t\tkey: {\n\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\t\tend: start + key.length,\n\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: 'Identifier',\n\t\t\t\t\t\t\t\tstart: start + key.length + 2,\n\t\t\t\t\t\t\t\tend,\n\t\t\t\t\t\t\t\tname: key\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkind: 'init'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchar += row.length + (2 + indent.length); // ',\\n\\t'.length\n\n\t\t\t\t\t\treturn row;\n\t\t\t\t\t})\n\t\t\t\t\t.concat(\n\t\t\t\t\t\tinvalidKeys.map(key => `\"${key}\": ${JSON.stringify(data[key])}`)\n\t\t\t\t\t);\n\n\t\t\t\tcode += `export default {\\n${indent}${defaultExportRows.join(`,\\n${indent}`)}\\n};`;\n\t\t\t\tast.body.push(defaultExportNode);\n\n\t\t\t\tconst end = code.length;\n\n\t\t\t\tdefaultExportNode.declaration.end = end - 1;\n\t\t\t\tdefaultExportNode.end = end;\n\t\t\t}\n\n\t\t\tast.end = code.length;\n\n\t\t\treturn { ast, code, map: { mappings: '' } };\n\t\t}\n\t};\n}\n"],"names":["const","let"],"mappings":"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"} \ No newline at end of file diff --git a/build/node_modules/rollup-plugin-json/package.json b/build/node_modules/rollup-plugin-json/package.json deleted file mode 100644 index 84f23fc4..00000000 --- a/build/node_modules/rollup-plugin-json/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "rollup-plugin-json@^2.3.0", - "_id": "rollup-plugin-json@2.3.1", - "_inBundle": false, - "_integrity": "sha512-alQQQVPo2z9pl6LSK8QqyDlWwCH5KeE8YxgQv7fa/SeTxz+gQe36jBjcha7hQW68MrVh9Ms71EQaMZDAG3w2yw==", - "_location": "/rollup-plugin-json", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "rollup-plugin-json@^2.3.0", - "name": "rollup-plugin-json", - "escapedName": "rollup-plugin-json", - "rawSpec": "^2.3.0", - "saveSpec": null, - "fetchSpec": "^2.3.0" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-2.3.1.tgz", - "_shasum": "9759d27f33dcd2c896de18b6235df162b88edd77", - "_spec": "rollup-plugin-json@^2.3.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", - "bugs": { - "url": "https://github.com/rollup/rollup-plugin-json/issues" - }, - "bundleDependencies": false, - "dependencies": { - "rollup-pluginutils": "^2.0.1" - }, - "deprecated": "This module has been deprecated and is no longer maintained. Please use @rollup/plugin-json.", - "description": "Convert .json files to ES6 modules:", - "devDependencies": { - "eslint": "^3.4.0", - "eslint-plugin-import": "^2.2.0", - "mocha": "^3.0.2", - "rollup": "^0.41.6", - "rollup-plugin-buble": "^0.15.0", - "rollup-plugin-node-resolve": "^3.0.0", - "source-map-support": "^0.4.2" - }, - "files": [ - "src", - "dist", - "README.md" - ], - "homepage": "https://github.com/rollup/rollup-plugin-json#readme", - "jsnext:main": "dist/rollup-plugin-json.es.js", - "license": "MIT", - "main": "dist/rollup-plugin-json.cjs.js", - "module": "dist/rollup-plugin-json.es.js", - "name": "rollup-plugin-json", - "peerDependencies": { - "rollup": "< 0.59.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/rollup/rollup-plugin-json.git" - }, - "scripts": { - "build": "rollup -c", - "lint": "eslint src", - "prebuild": "rm -rf dist/*", - "prepublish": "npm test", - "pretest": "npm run build", - "test": "mocha" - }, - "version": "2.3.1" -} diff --git a/build/node_modules/rollup-plugin-json/src/index.js b/build/node_modules/rollup-plugin-json/src/index.js deleted file mode 100644 index 4351e6f1..00000000 --- a/build/node_modules/rollup-plugin-json/src/index.js +++ /dev/null @@ -1,171 +0,0 @@ -import { createFilter, makeLegalIdentifier } from 'rollup-pluginutils'; - -export default function json(options = {}) { - const filter = createFilter(options.include, options.exclude); - - return { - name: 'json', - - transform(json, id) { - if (id.slice(-5) !== '.json') return null; - if (!filter(id)) return null; - - const data = JSON.parse(json); - let code = ''; - - const ast = { - type: 'Program', - sourceType: 'module', - start: 0, - end: null, - body: [] - }; - - if (Object.prototype.toString.call(data) !== '[object Object]') { - code = `export default ${json};`; - - ast.body.push({ - type: 'ExportDefaultDeclaration', - start: 0, - end: code.length, - declaration: { - type: 'Literal', - start: 15, - end: code.length - 1, - value: null, - raw: 'null' - } - }); - } else { - const indent = 'indent' in options ? options.indent : '\t'; - - const validKeys = []; - const invalidKeys = []; - - Object.keys(data).forEach(key => { - if (key === makeLegalIdentifier(key)) { - validKeys.push(key); - } else { - invalidKeys.push(key); - } - }); - - let char = 0; - - validKeys.forEach(key => { - const declarationType = options.preferConst ? 'const' : 'var'; - const declaration = `export ${declarationType} ${key} = ${JSON.stringify(data[key])};`; - - const start = char; - const end = start + declaration.length; - - // generate fake AST node while we're here - ast.body.push({ - type: 'ExportNamedDeclaration', - start: char, - end: char + declaration.length, - declaration: { - type: 'VariableDeclaration', - start: start + 7, // 'export '.length - end, - declarations: [ - { - type: 'VariableDeclarator', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: end - 1, - id: { - type: 'Identifier', - start: start + 7 + declarationType.length + 1, // `export ${declarationType} `.length - end: start + 7 + declarationType.length + 1 + key.length, // `export ${declarationType} ${key}`.length - name: key - }, - init: { - type: 'Literal', - start: start + - 7 + - declarationType.length + - 1 + - key.length + - 3, // `export ${declarationType} ${key} = `.length - end: end - 1, - value: null, - raw: 'null' - } - } - ], - kind: declarationType - }, - specifiers: [], - source: null - }); - - char = end + 1; - code += `${declaration}\n`; - }); - - const defaultExportNode = { - type: 'ExportDefaultDeclaration', - start: char, - end: null, - declaration: { - type: 'ObjectExpression', - start: char + 15, - end: null, - properties: [] - } - }; - - char += 17 + indent.length; // 'export default {\n\t'.length' - - const defaultExportRows = validKeys - .map(key => { - const row = `${key}: ${key}`; - - const start = char; - const end = start + row.length; - - defaultExportNode.declaration.properties.push({ - type: 'Property', - start, - end, - method: false, - shorthand: false, - computed: false, - key: { - type: 'Identifier', - start, - end: start + key.length, - name: key - }, - value: { - type: 'Identifier', - start: start + key.length + 2, - end, - name: key - }, - kind: 'init' - }); - - char += row.length + (2 + indent.length); // ',\n\t'.length - - return row; - }) - .concat( - invalidKeys.map(key => `"${key}": ${JSON.stringify(data[key])}`) - ); - - code += `export default {\n${indent}${defaultExportRows.join(`,\n${indent}`)}\n};`; - ast.body.push(defaultExportNode); - - const end = code.length; - - defaultExportNode.declaration.end = end - 1; - defaultExportNode.end = end; - } - - ast.end = code.length; - - return { ast, code, map: { mappings: '' } }; - } - }; -} diff --git a/build/node_modules/rollup-plugin-node-builtins/package.json b/build/node_modules/rollup-plugin-node-builtins/package.json index 8a1e9d3d..c8fbbc9f 100644 --- a/build/node_modules/rollup-plugin-node-builtins/package.json +++ b/build/node_modules/rollup-plugin-node-builtins/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", "_shasum": "24a1fed4a43257b6b64371d8abc6ce1ab14597e9", "_spec": "rollup-plugin-node-builtins@^2.1.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", diff --git a/build/node_modules/rollup-plugin-node-globals/node_modules/estree-walker/package.json b/build/node_modules/rollup-plugin-node-globals/node_modules/estree-walker/package.json index f80ad3e6..505d2948 100644 --- a/build/node_modules/rollup-plugin-node-globals/node_modules/estree-walker/package.json +++ b/build/node_modules/rollup-plugin-node-globals/node_modules/estree-walker/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/rollup-plugin-node-globals" ], - "_resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-0.5.2.tgz", "_shasum": "d3850be7529c9580d815600b53126515e146dd39", "_spec": "estree-walker@^0.5.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-globals", diff --git a/build/node_modules/rollup-plugin-node-globals/node_modules/magic-string/package.json b/build/node_modules/rollup-plugin-node-globals/node_modules/magic-string/package.json index ef511056..5a1ade73 100644 --- a/build/node_modules/rollup-plugin-node-globals/node_modules/magic-string/package.json +++ b/build/node_modules/rollup-plugin-node-globals/node_modules/magic-string/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/rollup-plugin-node-globals" ], - "_resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.22.5.tgz", "_shasum": "8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e", "_spec": "magic-string@^0.22.5", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-globals", diff --git a/build/node_modules/rollup-plugin-node-globals/package.json b/build/node_modules/rollup-plugin-node-globals/package.json index f2e67f8b..5444e64a 100644 --- a/build/node_modules/rollup-plugin-node-globals/package.json +++ b/build/node_modules/rollup-plugin-node-globals/package.json @@ -1,5 +1,5 @@ { - "_from": "rollup-plugin-node-globals@^1.2.1", + "_from": "rollup-plugin-node-globals@^1.4.0", "_id": "rollup-plugin-node-globals@1.4.0", "_inBundle": false, "_integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", @@ -10,19 +10,19 @@ "_requested": { "type": "range", "registry": true, - "raw": "rollup-plugin-node-globals@^1.2.1", + "raw": "rollup-plugin-node-globals@^1.4.0", "name": "rollup-plugin-node-globals", "escapedName": "rollup-plugin-node-globals", - "rawSpec": "^1.2.1", + "rawSpec": "^1.4.0", "saveSpec": null, - "fetchSpec": "^1.2.1" + "fetchSpec": "^1.4.0" }, "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", "_shasum": "5e1f24a9bb97c0ef51249f625e16c7e61b7c020b", - "_spec": "rollup-plugin-node-globals@^1.2.1", + "_spec": "rollup-plugin-node-globals@^1.4.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", "author": { "name": "Calvin Metcalf", diff --git a/build/node_modules/rollup-plugin-node-resolve/CHANGELOG.md b/build/node_modules/rollup-plugin-node-resolve/CHANGELOG.md deleted file mode 100644 index 885c049d..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/CHANGELOG.md +++ /dev/null @@ -1,91 +0,0 @@ -# rollup-plugin-node-resolve changelog - -## 3.0.4 (unreleased) - -* Update lockfile [#137](https://github.com/rollup/rollup-plugin-node-resolve/issues/137) -* Update rollup dependency [#138](https://github.com/rollup/rollup-plugin-node-resolve/issues/138) -* Enable installation from Github [#142](https://github.com/rollup/rollup-plugin-node-resolve/issues/142) - -## 3.0.3 - -* Fix [#130](https://github.com/rollup/rollup-plugin-node-resolve/issues/130) and [#131](https://github.com/rollup/rollup-plugin-node-resolve/issues/131) - -## 3.0.2 - -* Ensure `pkg.browser` is an object if necessary ([#129](https://github.com/rollup/rollup-plugin-node-resolve/pull/129)) - -## 3.0.1 - -* Remove `browser-resolve` dependency ([#127](https://github.com/rollup/rollup-plugin-node-resolve/pull/127)) - -## 3.0.0 - -* [BREAKING] Remove `options.skip` ([#90](https://github.com/rollup/rollup-plugin-node-resolve/pull/90)) -* Add `modulesOnly` option ([#96](https://github.com/rollup/rollup-plugin-node-resolve/pull/96)) - -## 2.1.1 - -* Prevent `jail` from breaking builds on Windows ([#93](https://github.com/rollup/rollup-plugin-node-resolve/issues/93)) - -## 2.1.0 - -* Add `jail` option ([#53](https://github.com/rollup/rollup-plugin-node-resolve/pull/53)) -* Add `customResolveOptions` option ([#79](https://github.com/rollup/rollup-plugin-node-resolve/pull/79)) -* Support symlinked packages ([#82](https://github.com/rollup/rollup-plugin-node-resolve/pull/82)) - -## 2.0.0 - -* Add support `module` field in package.json as an official alternative to jsnext - -## 1.7.3 - -* Error messages are more descriptive ([#50](https://github.com/rollup/rollup-plugin-node-resolve/issues/50)) - -## 1.7.2 - -* Allow entry point paths beginning with ./ - -## 1.7.1 - -* Return a `name` - -## 1.7.0 - -* Allow relative IDs to be external ([#32](https://github.com/rollup/rollup-plugin-node-resolve/pull/32)) - -## 1.6.0 - -* Skip IDs containing null character - -## 1.5.0 - -* Prefer built-in options, but allow opting out ([#28](https://github.com/rollup/rollup-plugin-node-resolve/pull/28)) - -## 1.4.0 - -* Pass `options.extensions` through to `node-resolve` - -## 1.3.0 - -* `skip: true` skips all packages that don't satisfy the `main` or `jsnext` options ([#16](https://github.com/rollup/rollup-plugin-node-resolve/pull/16)) - -## 1.2.1 - -* Support scoped packages in `skip` option ([#15](https://github.com/rollup/rollup-plugin-node-resolve/issues/15)) - -## 1.2.0 - -* Support `browser` field ([#8](https://github.com/rollup/rollup-plugin-node-resolve/issues/8)) -* Get tests to pass on Windows - -## 1.1.0 - -* Use node-resolve to handle various corner cases - -## 1.0.0 - -* Add ES6 build, use Rollup 0.20.0 - -## 0.1.0 - -* First release diff --git a/build/node_modules/rollup-plugin-node-resolve/README.md b/build/node_modules/rollup-plugin-node-resolve/README.md deleted file mode 100644 index fbb4b407..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/README.md +++ /dev/null @@ -1,102 +0,0 @@ -# rollup-plugin-node-resolve - -*This plugin used to be called rollup-plugin-npm* - -Locate modules using the [Node resolution algorithm](https://nodejs.org/api/modules.html#modules_all_together), for using third party modules in `node_modules` - -## Installation - -```bash -npm install --save-dev rollup-plugin-node-resolve -``` - -## Usage - -```js -// rollup.config.js -import resolve from 'rollup-plugin-node-resolve'; - -export default { - input: 'main.js', - output: { - file: 'bundle.js', - format: 'iife' - }, - name: 'MyModule', - plugins: [ - resolve({ - // use "module" field for ES6 module if possible - module: true, // Default: true - - // use "jsnext:main" if possible - // – see https://github.com/rollup/rollup/wiki/jsnext:main - jsnext: true, // Default: false - - // use "main" field or index.js, even if it's not an ES6 module - // (needs to be converted from CommonJS to ES6 - // – see https://github.com/rollup/rollup-plugin-commonjs - main: true, // Default: true - - // some package.json files have a `browser` field which - // specifies alternative files to load for people bundling - // for the browser. If that's you, use this option, otherwise - // pkg.browser will be ignored - browser: true, // Default: false - - // not all files you want to resolve are .js files - extensions: [ '.mjs', '.js', '.jsx', '.json' ], // Default: [ '.mjs', '.js', '.json', '.node' ] - - // whether to prefer built-in modules (e.g. `fs`, `path`) or - // local ones with the same names - preferBuiltins: false, // Default: true - - // Lock the module search in this path (like a chroot). Module defined - // outside this path will be marked as external - jail: '/my/jail/path', // Default: '/' - - // Set to an array of strings and/or regexps to lock the module search - // to modules that match at least one entry. Modules not matching any - // entry will be marked as external - only: [ 'some_module', /^@some_scope\/.*$/ ], // Default: null - - // If true, inspect resolved files to check that they are - // ES2015 modules - modulesOnly: true, // Default: false - - // Any additional options that should be passed through - // to node-resolve - customResolveOptions: { - moduleDirectory: 'js_modules' - } - }) - ] -}; -``` - -## Using with rollup-plugin-commonjs - -Since most packages in your node_modules folder are probably legacy CommonJS rather than JavaScript modules, you may need to use [rollup-plugin-commonjs](https://github.com/rollup/rollup-plugin-commonjs): - -```js -// rollup.config.js -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; - -export default { - input: 'main.js', - output: { - file: 'bundle.js', - format: 'iife' - }, - name: 'MyModule', - plugins: [ - resolve(), - commonjs() - ] -}; -``` - - -## License - -MIT diff --git a/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js b/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js deleted file mode 100644 index 28ec0040..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js +++ /dev/null @@ -1,215 +0,0 @@ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var path = require('path'); -var builtins = _interopDefault(require('builtin-modules')); -var resolveId = _interopDefault(require('resolve')); -var isModule = _interopDefault(require('is-module')); -var fs = _interopDefault(require('fs')); - -var ES6_BROWSER_EMPTY = path.resolve( __dirname, '../src/empty.js' ); -var CONSOLE_WARN = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return console.warn.apply( console, args ); -}; // eslint-disable-line no-console -// It is important that .mjs occur before .js so that Rollup will interpret npm modules -// which deploy both ESM .mjs and CommonJS .js files as ESM. -var DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; - -var readFileCache = {}; -var readFileAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.readFile(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; -var statAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.stat(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; -function cachedReadFile (file, cb) { - if (file in readFileCache === false) { - readFileCache[file] = readFileAsync(file).catch(function (err) { - delete readFileCache[file]; - throw err; - }); - } - readFileCache[file].then(function (contents) { return cb(null, contents); }, cb); -} - -var isFileCache = {}; -function cachedIsFile (file, cb) { - if (file in isFileCache === false) { - isFileCache[file] = statAsync(file) - .then( - function (stat) { return stat.isFile(); }, - function (err) { - if (err.code == 'ENOENT') { return false; } - delete isFileCache[file]; - throw err; - }); - } - isFileCache[file].then(function (contents) { return cb(null, contents); }, cb); -} - -var resolveIdAsync = function (file, opts) { return new Promise(function (fulfil, reject) { return resolveId(file, opts, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; - -function nodeResolve ( options ) { - if ( options === void 0 ) options = {}; - - var useModule = options.module !== false; - var useMain = options.main !== false; - var useJsnext = options.jsnext === true; - var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; - var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; - var customResolveOptions = options.customResolveOptions || {}; - var jail = options.jail; - var only = Array.isArray(options.only) - ? options.only.map(function (o) { return o instanceof RegExp - ? o - : new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$'); } - ) - : null; - var browserMapCache = {}; - - var onwarn = options.onwarn || CONSOLE_WARN; - - if ( options.skip ) { - throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); - } - - if ( !useModule && !useMain && !useJsnext ) { - throw new Error( "At least one of options.module, options.main or options.jsnext must be true" ); - } - - var preserveSymlinks; - - return { - name: 'node-resolve', - - options: function options ( options$1 ) { - preserveSymlinks = options$1.preserveSymlinks; - }, - - onwrite: function onwrite () { - isFileCache = {}; - readFileCache = {}; - }, - - resolveId: function resolveId$$1 ( importee, importer ) { - if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins - - // disregard entry module - if ( !importer ) { return null; } - - if (options.browser && browserMapCache[importer]) { - var resolvedImportee = path.resolve( path.dirname( importer ), importee ); - var browser = browserMapCache[importer]; - if (browser[importee] === false || browser[resolvedImportee] === false) { - return ES6_BROWSER_EMPTY; - } - if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { - importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; - } - } - - - var parts = importee.split( /[/\\]/ ); - var id = parts.shift(); - - if ( id[0] === '@' && parts.length ) { - // scoped packages - id += "/" + (parts.shift()); - } else if ( id[0] === '.' ) { - // an import relative to the parent dir of the importer - id = path.resolve( importer, '..', importee ); - } - - if (only && !only.some(function (pattern) { return pattern.test(id); })) { return null; } - - var disregardResult = false; - var packageBrowserField = false; - var extensions = options.extensions || DEFAULT_EXTS; - - var resolveOptions = { - basedir: path.dirname( importer ), - packageFilter: function packageFilter ( pkg, pkgPath ) { - var pkgRoot = path.dirname( pkgPath ); - if (options.browser && typeof pkg[ 'browser' ] === 'object') { - packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce(function (browser, key) { - var resolved = pkg[ 'browser' ][ key ] === false ? false : path.resolve( pkgRoot, pkg[ 'browser' ][ key ] ); - browser[ key ] = resolved; - if ( key[0] === '.' ) { - var absoluteKey = path.resolve( pkgRoot, key ); - browser[ absoluteKey ] = resolved; - if ( !path.extname(key) ) { - extensions.reduce( function ( browser, ext ) { - browser[ absoluteKey + ext ] = browser[ key ]; - return browser; - }, browser ); - } - } - return browser; - }, {}); - } - - if (options.browser && typeof pkg[ 'browser' ] === 'string') { - pkg[ 'main' ] = pkg[ 'browser' ]; - } else if ( useModule && pkg[ 'module' ] ) { - pkg[ 'main' ] = pkg[ 'module' ]; - } else if ( useJsnext && pkg[ 'jsnext:main' ] ) { - pkg[ 'main' ] = pkg[ 'jsnext:main' ]; - } else if ( ( useJsnext || useModule ) && !useMain ) { - disregardResult = true; - } - return pkg; - }, - readFile: cachedReadFile, - isFile: cachedIsFile, - extensions: extensions - }; - - if (preserveSymlinks !== undefined) { - resolveOptions.preserveSymlinks = preserveSymlinks; - } - - return resolveIdAsync( - importee, - Object.assign( resolveOptions, customResolveOptions ) - ) - .catch(function () { return false; }) - .then(function (resolved) { - if (options.browser && packageBrowserField) { - if (packageBrowserField[ resolved ]) { - resolved = packageBrowserField[ resolved ]; - } - browserMapCache[resolved] = packageBrowserField; - } - - if ( !disregardResult && resolved !== false ) { - if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { - resolved = fs.realpathSync( resolved ); - } - - if ( ~builtins.indexOf( resolved ) ) { - return null; - } else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { - if ( !isPreferBuiltinsSet ) { - onwarn( - "preferring built-in module '" + importee + "' over local alternative " + - "at '" + resolved + "', pass 'preferBuiltins: false' to disable this " + - "behavior or 'preferBuiltins: true' to disable this warning" - ); - } - return null; - } else if ( jail && resolved.indexOf( path.normalize( jail.trim( path.sep ) ) ) !== 0 ) { - return null; - } - } - - if ( resolved && options.modulesOnly ) { - return readFileAsync( resolved, 'utf-8').then(function (code) { return isModule( code ) ? resolved : null; }); - } else { - return resolved === false ? null : resolved; - } - }); - } - }; -} - -module.exports = nodeResolve; diff --git a/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es.js b/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es.js deleted file mode 100644 index 9c0ddee7..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es.js +++ /dev/null @@ -1,211 +0,0 @@ -import { dirname, resolve, extname, normalize, sep } from 'path'; -import builtins from 'builtin-modules'; -import resolveId from 'resolve'; -import isModule from 'is-module'; -import fs from 'fs'; - -var ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); -var CONSOLE_WARN = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return console.warn.apply( console, args ); -}; // eslint-disable-line no-console -// It is important that .mjs occur before .js so that Rollup will interpret npm modules -// which deploy both ESM .mjs and CommonJS .js files as ESM. -var DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; - -var readFileCache = {}; -var readFileAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.readFile(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; -var statAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.stat(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; -function cachedReadFile (file, cb) { - if (file in readFileCache === false) { - readFileCache[file] = readFileAsync(file).catch(function (err) { - delete readFileCache[file]; - throw err; - }); - } - readFileCache[file].then(function (contents) { return cb(null, contents); }, cb); -} - -var isFileCache = {}; -function cachedIsFile (file, cb) { - if (file in isFileCache === false) { - isFileCache[file] = statAsync(file) - .then( - function (stat) { return stat.isFile(); }, - function (err) { - if (err.code == 'ENOENT') { return false; } - delete isFileCache[file]; - throw err; - }); - } - isFileCache[file].then(function (contents) { return cb(null, contents); }, cb); -} - -var resolveIdAsync = function (file, opts) { return new Promise(function (fulfil, reject) { return resolveId(file, opts, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; - -function nodeResolve ( options ) { - if ( options === void 0 ) options = {}; - - var useModule = options.module !== false; - var useMain = options.main !== false; - var useJsnext = options.jsnext === true; - var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; - var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; - var customResolveOptions = options.customResolveOptions || {}; - var jail = options.jail; - var only = Array.isArray(options.only) - ? options.only.map(function (o) { return o instanceof RegExp - ? o - : new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$'); } - ) - : null; - var browserMapCache = {}; - - var onwarn = options.onwarn || CONSOLE_WARN; - - if ( options.skip ) { - throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); - } - - if ( !useModule && !useMain && !useJsnext ) { - throw new Error( "At least one of options.module, options.main or options.jsnext must be true" ); - } - - var preserveSymlinks; - - return { - name: 'node-resolve', - - options: function options ( options$1 ) { - preserveSymlinks = options$1.preserveSymlinks; - }, - - onwrite: function onwrite () { - isFileCache = {}; - readFileCache = {}; - }, - - resolveId: function resolveId$$1 ( importee, importer ) { - if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins - - // disregard entry module - if ( !importer ) { return null; } - - if (options.browser && browserMapCache[importer]) { - var resolvedImportee = resolve( dirname( importer ), importee ); - var browser = browserMapCache[importer]; - if (browser[importee] === false || browser[resolvedImportee] === false) { - return ES6_BROWSER_EMPTY; - } - if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { - importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; - } - } - - - var parts = importee.split( /[/\\]/ ); - var id = parts.shift(); - - if ( id[0] === '@' && parts.length ) { - // scoped packages - id += "/" + (parts.shift()); - } else if ( id[0] === '.' ) { - // an import relative to the parent dir of the importer - id = resolve( importer, '..', importee ); - } - - if (only && !only.some(function (pattern) { return pattern.test(id); })) { return null; } - - var disregardResult = false; - var packageBrowserField = false; - var extensions = options.extensions || DEFAULT_EXTS; - - var resolveOptions = { - basedir: dirname( importer ), - packageFilter: function packageFilter ( pkg, pkgPath ) { - var pkgRoot = dirname( pkgPath ); - if (options.browser && typeof pkg[ 'browser' ] === 'object') { - packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce(function (browser, key) { - var resolved = pkg[ 'browser' ][ key ] === false ? false : resolve( pkgRoot, pkg[ 'browser' ][ key ] ); - browser[ key ] = resolved; - if ( key[0] === '.' ) { - var absoluteKey = resolve( pkgRoot, key ); - browser[ absoluteKey ] = resolved; - if ( !extname(key) ) { - extensions.reduce( function ( browser, ext ) { - browser[ absoluteKey + ext ] = browser[ key ]; - return browser; - }, browser ); - } - } - return browser; - }, {}); - } - - if (options.browser && typeof pkg[ 'browser' ] === 'string') { - pkg[ 'main' ] = pkg[ 'browser' ]; - } else if ( useModule && pkg[ 'module' ] ) { - pkg[ 'main' ] = pkg[ 'module' ]; - } else if ( useJsnext && pkg[ 'jsnext:main' ] ) { - pkg[ 'main' ] = pkg[ 'jsnext:main' ]; - } else if ( ( useJsnext || useModule ) && !useMain ) { - disregardResult = true; - } - return pkg; - }, - readFile: cachedReadFile, - isFile: cachedIsFile, - extensions: extensions - }; - - if (preserveSymlinks !== undefined) { - resolveOptions.preserveSymlinks = preserveSymlinks; - } - - return resolveIdAsync( - importee, - Object.assign( resolveOptions, customResolveOptions ) - ) - .catch(function () { return false; }) - .then(function (resolved) { - if (options.browser && packageBrowserField) { - if (packageBrowserField[ resolved ]) { - resolved = packageBrowserField[ resolved ]; - } - browserMapCache[resolved] = packageBrowserField; - } - - if ( !disregardResult && resolved !== false ) { - if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { - resolved = fs.realpathSync( resolved ); - } - - if ( ~builtins.indexOf( resolved ) ) { - return null; - } else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { - if ( !isPreferBuiltinsSet ) { - onwarn( - "preferring built-in module '" + importee + "' over local alternative " + - "at '" + resolved + "', pass 'preferBuiltins: false' to disable this " + - "behavior or 'preferBuiltins: true' to disable this warning" - ); - } - return null; - } else if ( jail && resolved.indexOf( normalize( jail.trim( sep ) ) ) !== 0 ) { - return null; - } - } - - if ( resolved && options.modulesOnly ) { - return readFileAsync( resolved, 'utf-8').then(function (code) { return isModule( code ) ? resolved : null; }); - } else { - return resolved === false ? null : resolved; - } - }); - } - }; -} - -export default nodeResolve; diff --git a/build/node_modules/rollup-plugin-node-resolve/package.json b/build/node_modules/rollup-plugin-node-resolve/package.json deleted file mode 100644 index 49dceea9..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_from": "rollup-plugin-node-resolve@^3.3.0", - "_id": "rollup-plugin-node-resolve@3.4.0", - "_inBundle": false, - "_integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", - "_location": "/rollup-plugin-node-resolve", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "rollup-plugin-node-resolve@^3.3.0", - "name": "rollup-plugin-node-resolve", - "escapedName": "rollup-plugin-node-resolve", - "rawSpec": "^3.3.0", - "saveSpec": null, - "fetchSpec": "^3.3.0" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", - "_shasum": "908585eda12e393caac7498715a01e08606abc89", - "_spec": "rollup-plugin-node-resolve@^3.3.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", - "author": { - "name": "Rich Harris", - "email": "richard.a.harris@gmail.com" - }, - "bugs": { - "url": "https://github.com/rollup/rollup-plugin-node-resolve/issues" - }, - "bundleDependencies": false, - "dependencies": { - "builtin-modules": "^2.0.0", - "is-module": "^1.0.0", - "resolve": "^1.1.6" - }, - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", - "description": "Bundle third-party dependencies in node_modules", - "devDependencies": { - "buble": "^0.19.3", - "es5-ext": "^0.10.39", - "eslint": "^4.18.0", - "mocha": "^5.0.1", - "rollup": "^0.56.3", - "rollup-plugin-buble": "^0.19.2", - "rollup-plugin-commonjs": "^8.3.0", - "string-capitalize": "^1.0.1", - "vlq": "^1.0.0" - }, - "files": [ - "src", - "dist" - ], - "homepage": "https://github.com/rollup/rollup-plugin-node-resolve#readme", - "jsnext:main": "dist/rollup-plugin-node-resolve.es.js", - "keywords": [ - "rollup", - "rollup-plugin", - "es2015", - "npm", - "modules" - ], - "license": "MIT", - "main": "dist/rollup-plugin-node-resolve.cjs.js", - "module": "dist/rollup-plugin-node-resolve.es.js", - "name": "rollup-plugin-node-resolve", - "repository": { - "type": "git", - "url": "git+https://github.com/rollup/rollup-plugin-node-resolve.git" - }, - "scripts": { - "build": "rollup -c", - "lint": "eslint src", - "posttest": "eslint src test/*.js", - "prepare": "npm run build", - "prepublishOnly": "npm test", - "pretest": "npm run build", - "test": "mocha" - }, - "version": "3.4.0" -} diff --git a/build/node_modules/rollup-plugin-node-resolve/src/empty.js b/build/node_modules/rollup-plugin-node-resolve/src/empty.js deleted file mode 100644 index ff8b4c56..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/src/empty.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; diff --git a/build/node_modules/rollup-plugin-node-resolve/src/index.js b/build/node_modules/rollup-plugin-node-resolve/src/index.js deleted file mode 100644 index b3f5c4f3..00000000 --- a/build/node_modules/rollup-plugin-node-resolve/src/index.js +++ /dev/null @@ -1,202 +0,0 @@ -import { dirname, resolve, extname, normalize, sep } from 'path'; -import builtins from 'builtin-modules'; -import resolveId from 'resolve'; -import isModule from 'is-module'; -import fs from 'fs'; - -const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); -const CONSOLE_WARN = ( ...args ) => console.warn( ...args ); // eslint-disable-line no-console -// It is important that .mjs occur before .js so that Rollup will interpret npm modules -// which deploy both ESM .mjs and CommonJS .js files as ESM. -const DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; - -let readFileCache = {}; -const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); -const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); -function cachedReadFile (file, cb) { - if (file in readFileCache === false) { - readFileCache[file] = readFileAsync(file).catch(err => { - delete readFileCache[file]; - throw err; - }); - } - readFileCache[file].then(contents => cb(null, contents), cb); -} - -let isFileCache = {}; -function cachedIsFile (file, cb) { - if (file in isFileCache === false) { - isFileCache[file] = statAsync(file) - .then( - stat => stat.isFile(), - err => { - if (err.code == 'ENOENT') return false; - delete isFileCache[file]; - throw err; - }); - } - isFileCache[file].then(contents => cb(null, contents), cb); -} - -const resolveIdAsync = (file, opts) => new Promise((fulfil, reject) => resolveId(file, opts, (err, contents) => err ? reject(err) : fulfil(contents))); - -export default function nodeResolve ( options = {} ) { - const useModule = options.module !== false; - const useMain = options.main !== false; - const useJsnext = options.jsnext === true; - const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; - const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; - const customResolveOptions = options.customResolveOptions || {}; - const jail = options.jail; - const only = Array.isArray(options.only) - ? options.only.map(o => o instanceof RegExp - ? o - : new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$') - ) - : null; - const browserMapCache = {}; - - const onwarn = options.onwarn || CONSOLE_WARN; - - if ( options.skip ) { - throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); - } - - if ( !useModule && !useMain && !useJsnext ) { - throw new Error( `At least one of options.module, options.main or options.jsnext must be true` ); - } - - let preserveSymlinks; - - return { - name: 'node-resolve', - - options ( options ) { - preserveSymlinks = options.preserveSymlinks; - }, - - onwrite () { - isFileCache = {}; - readFileCache = {}; - }, - - resolveId ( importee, importer ) { - if ( /\0/.test( importee ) ) return null; // ignore IDs with null character, these belong to other plugins - - // disregard entry module - if ( !importer ) return null; - - if (options.browser && browserMapCache[importer]) { - const resolvedImportee = resolve( dirname( importer ), importee ); - const browser = browserMapCache[importer]; - if (browser[importee] === false || browser[resolvedImportee] === false) { - return ES6_BROWSER_EMPTY; - } - if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { - importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; - } - } - - - const parts = importee.split( /[/\\]/ ); - let id = parts.shift(); - - if ( id[0] === '@' && parts.length ) { - // scoped packages - id += `/${parts.shift()}`; - } else if ( id[0] === '.' ) { - // an import relative to the parent dir of the importer - id = resolve( importer, '..', importee ); - } - - if (only && !only.some(pattern => pattern.test(id))) return null; - - let disregardResult = false; - let packageBrowserField = false; - const extensions = options.extensions || DEFAULT_EXTS; - - const resolveOptions = { - basedir: dirname( importer ), - packageFilter ( pkg, pkgPath ) { - const pkgRoot = dirname( pkgPath ); - if (options.browser && typeof pkg[ 'browser' ] === 'object') { - packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { - const resolved = pkg[ 'browser' ][ key ] === false ? false : resolve( pkgRoot, pkg[ 'browser' ][ key ] ); - browser[ key ] = resolved; - if ( key[0] === '.' ) { - const absoluteKey = resolve( pkgRoot, key ); - browser[ absoluteKey ] = resolved; - if ( !extname(key) ) { - extensions.reduce( ( browser, ext ) => { - browser[ absoluteKey + ext ] = browser[ key ]; - return browser; - }, browser ); - } - } - return browser; - }, {}); - } - - if (options.browser && typeof pkg[ 'browser' ] === 'string') { - pkg[ 'main' ] = pkg[ 'browser' ]; - } else if ( useModule && pkg[ 'module' ] ) { - pkg[ 'main' ] = pkg[ 'module' ]; - } else if ( useJsnext && pkg[ 'jsnext:main' ] ) { - pkg[ 'main' ] = pkg[ 'jsnext:main' ]; - } else if ( ( useJsnext || useModule ) && !useMain ) { - disregardResult = true; - } - return pkg; - }, - readFile: cachedReadFile, - isFile: cachedIsFile, - extensions: extensions - }; - - if (preserveSymlinks !== undefined) { - resolveOptions.preserveSymlinks = preserveSymlinks; - } - - return resolveIdAsync( - importee, - Object.assign( resolveOptions, customResolveOptions ) - ) - .catch(() => false) - .then(resolved => { - if (options.browser && packageBrowserField) { - if (packageBrowserField[ resolved ]) { - resolved = packageBrowserField[ resolved ]; - } - browserMapCache[resolved] = packageBrowserField; - } - - if ( !disregardResult && resolved !== false ) { - if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { - resolved = fs.realpathSync( resolved ); - } - - if ( ~builtins.indexOf( resolved ) ) { - return null; - } else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { - if ( !isPreferBuiltinsSet ) { - onwarn( - `preferring built-in module '${importee}' over local alternative ` + - `at '${resolved}', pass 'preferBuiltins: false' to disable this ` + - `behavior or 'preferBuiltins: true' to disable this warning` - ); - } - return null; - } else if ( jail && resolved.indexOf( normalize( jail.trim( sep ) ) ) !== 0 ) { - return null; - } - } - - if ( resolved && options.modulesOnly ) { - return readFileAsync( resolved, 'utf-8').then(code => isModule( code ) ? resolved : null); - } else { - return resolved === false ? null : resolved; - } - }); - } - }; -} diff --git a/build/node_modules/rollup-plugin-re/node_modules/magic-string/package.json b/build/node_modules/rollup-plugin-re/node_modules/magic-string/package.json index 3b880270..b3ff627e 100644 --- a/build/node_modules/rollup-plugin-re/node_modules/magic-string/package.json +++ b/build/node_modules/rollup-plugin-re/node_modules/magic-string/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/rollup-plugin-re" ], - "_resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.16.0.tgz", "_shasum": "970ebb0da7193301285fb1aa650f39bdd81eb45a", "_spec": "magic-string@^0.16.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-re", diff --git a/build/node_modules/rollup-plugin-re/package.json b/build/node_modules/rollup-plugin-re/package.json index f156ef30..c948c63b 100644 --- a/build/node_modules/rollup-plugin-re/package.json +++ b/build/node_modules/rollup-plugin-re/package.json @@ -20,7 +20,7 @@ "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", "_shasum": "fe174704ed59cda84caf02bd013b582e6fdaa4f6", "_spec": "rollup-plugin-re@^1.0.7", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", diff --git a/build/node_modules/rollup-pluginutils/node_modules/estree-walker/CHANGELOG.md b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/CHANGELOG.md new file mode 100644 index 00000000..06b21e96 --- /dev/null +++ b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/CHANGELOG.md @@ -0,0 +1,55 @@ +# changelog + +## 0.6.1 + +* Only traverse nodes that exist and have a type ([#9](https://github.com/Rich-Harris/estree-walker/pull/9)) +* Only cache keys for nodes with a type ([#8](https://github.com/Rich-Harris/estree-walker/pull/8)) + +## 0.6.0 + +* Fix walker context type +* Update deps, remove unncessary Bublé transformation + +## 0.5.2 + +* Add types to package + +## 0.5.1 + +* Prevent context corruption when `walk()` is called during a walk + +## 0.5.0 + +* Export `childKeys`, for manually fixing in case of malformed ASTs + +## 0.4.0 + +* Add TypeScript typings ([#3](https://github.com/Rich-Harris/estree-walker/pull/3)) + +## 0.3.1 + +* Include `pkg.repository` ([#2](https://github.com/Rich-Harris/estree-walker/pull/2)) + +## 0.3.0 + +* More predictable ordering + +## 0.2.1 + +* Keep `context` shape + +## 0.2.0 + +* Add ES6 build + +## 0.1.3 + +* npm snafu + +## 0.1.2 + +* Pass current prop and index to `enter`/`leave` callbacks + +## 0.1.1 + +* First release diff --git a/build/node_modules/rollup-pluginutils/node_modules/estree-walker/README.md b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/README.md new file mode 100644 index 00000000..94dd4005 --- /dev/null +++ b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/README.md @@ -0,0 +1,45 @@ +# estree-walker + +Simple utility for walking an [ESTree](https://github.com/estree/estree)-compliant AST, such as one generated by [acorn](https://github.com/marijnh/acorn). + + +## Installation + +```bash +npm i estree-walker +``` + + +## Usage + +```js +var walk = require( 'estree-walker' ).walk; +var acorn = require( 'acorn' ); + +ast = acorn.parse( sourceCode, options ); // https://github.com/acornjs/acorn + +walk( ast, { + enter: function ( node, parent, prop, index ) { + // some code happens + }, + leave: function ( node, parent, prop, index ) { + // some code happens + } +}); +``` + +Inside the `enter` function, calling `this.skip()` will prevent the node's children being walked, or the `leave` function (which is optional) being called. + + +## Why not use estraverse? + +The ESTree spec is evolving to accommodate ES6/7. I've had a couple of experiences where [estraverse](https://github.com/estools/estraverse) was unable to handle an AST generated by recent versions of acorn, because it hard-codes visitor keys. + +estree-walker, by contrast, simply enumerates a node's properties to find child nodes (and child lists of nodes), and is therefore resistant to spec changes. It's also much smaller. (The performance, if you're wondering, is basically identical.) + +None of which should be taken as criticism of estraverse, which has more features and has been battle-tested in many more situations, and for which I'm very grateful. + + +## License + +MIT diff --git a/build/node_modules/estree-walker/dist/estree-walker.umd.js b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js similarity index 100% rename from build/node_modules/estree-walker/dist/estree-walker.umd.js rename to build/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js diff --git a/build/node_modules/estree-walker/dist/estree-walker.umd.js.map b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map similarity index 100% rename from build/node_modules/estree-walker/dist/estree-walker.umd.js.map rename to build/node_modules/rollup-pluginutils/node_modules/estree-walker/dist/estree-walker.umd.js.map diff --git a/build/node_modules/estree-walker/index.d.ts b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/index.d.ts similarity index 100% rename from build/node_modules/estree-walker/index.d.ts rename to build/node_modules/rollup-pluginutils/node_modules/estree-walker/index.d.ts diff --git a/build/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json new file mode 100644 index 00000000..fb306a03 --- /dev/null +++ b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/package.json @@ -0,0 +1,61 @@ +{ + "_from": "estree-walker@^0.6.1", + "_id": "estree-walker@0.6.1", + "_inBundle": false, + "_integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "_location": "/rollup-pluginutils/estree-walker", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "estree-walker@^0.6.1", + "name": "estree-walker", + "escapedName": "estree-walker", + "rawSpec": "^0.6.1", + "saveSpec": null, + "fetchSpec": "^0.6.1" + }, + "_requiredBy": [ + "/rollup-pluginutils" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-0.6.1.tgz", + "_shasum": "53049143f40c6eb918b23671d1fe3219f3a1b362", + "_spec": "estree-walker@^0.6.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-pluginutils", + "author": { + "name": "Rich Harris" + }, + "bugs": { + "url": "https://github.com/Rich-Harris/estree-walker/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Traverse an ESTree-compliant AST", + "devDependencies": { + "mocha": "^5.2.0", + "rollup": "^0.67.3" + }, + "files": [ + "src", + "dist", + "index.d.ts", + "README.md" + ], + "homepage": "https://github.com/Rich-Harris/estree-walker#readme", + "license": "MIT", + "main": "dist/estree-walker.umd.js", + "module": "src/estree-walker.js", + "name": "estree-walker", + "repository": { + "type": "git", + "url": "git+https://github.com/Rich-Harris/estree-walker.git" + }, + "scripts": { + "build": "rollup -c", + "prepublishOnly": "npm test", + "pretest": "npm run build", + "test": "mocha test/test.js" + }, + "typings": "index.d.ts", + "version": "0.6.1" +} diff --git a/build/node_modules/estree-walker/src/estree-walker.js b/build/node_modules/rollup-pluginutils/node_modules/estree-walker/src/estree-walker.js similarity index 100% rename from build/node_modules/estree-walker/src/estree-walker.js rename to build/node_modules/rollup-pluginutils/node_modules/estree-walker/src/estree-walker.js diff --git a/build/node_modules/rollup-pluginutils/package.json b/build/node_modules/rollup-pluginutils/package.json index 28bbb0f9..593afdee 100644 --- a/build/node_modules/rollup-pluginutils/package.json +++ b/build/node_modules/rollup-pluginutils/package.json @@ -1,5 +1,5 @@ { - "_from": "rollup-pluginutils@^2.6.0", + "_from": "rollup-pluginutils@^2.3.1", "_id": "rollup-pluginutils@2.8.2", "_inBundle": false, "_integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", @@ -8,23 +8,21 @@ "_requested": { "type": "range", "registry": true, - "raw": "rollup-pluginutils@^2.6.0", + "raw": "rollup-pluginutils@^2.3.1", "name": "rollup-pluginutils", "escapedName": "rollup-pluginutils", - "rawSpec": "^2.6.0", + "rawSpec": "^2.3.1", "saveSpec": null, - "fetchSpec": "^2.6.0" + "fetchSpec": "^2.3.1" }, "_requiredBy": [ - "/rollup-plugin-commonjs", - "/rollup-plugin-json", "/rollup-plugin-node-globals", "/rollup-plugin-re" ], - "_resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "_shasum": "72f2af0748b592364dbd3389e600e5a9444a351e", - "_spec": "rollup-pluginutils@^2.6.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-commonjs", + "_spec": "rollup-pluginutils@^2.3.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-globals", "author": { "name": "Rich Harris", "email": "richard.a.harris@gmail.com" diff --git a/build/node_modules/safe-buffer/index.js b/build/node_modules/safe-buffer/index.js index 22438dab..f8d3ec98 100644 --- a/build/node_modules/safe-buffer/index.js +++ b/build/node_modules/safe-buffer/index.js @@ -1,3 +1,4 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ /* eslint-disable node/no-deprecated-api */ var buffer = require('buffer') var Buffer = buffer.Buffer @@ -20,6 +21,8 @@ function SafeBuffer (arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length) } +SafeBuffer.prototype = Object.create(Buffer.prototype) + // Copy static methods from Buffer copyProps(Buffer, SafeBuffer) diff --git a/build/node_modules/safe-buffer/package.json b/build/node_modules/safe-buffer/package.json index dc4eb637..702b50d3 100644 --- a/build/node_modules/safe-buffer/package.json +++ b/build/node_modules/safe-buffer/package.json @@ -1,45 +1,45 @@ { - "_from": "safe-buffer@~5.1.1", - "_id": "safe-buffer@5.1.2", + "_from": "safe-buffer@~5.2.0", + "_id": "safe-buffer@5.2.1", "_inBundle": false, - "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "_integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "_location": "/safe-buffer", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "safe-buffer@~5.1.1", + "raw": "safe-buffer@~5.2.0", "name": "safe-buffer", "escapedName": "safe-buffer", - "rawSpec": "~5.1.1", + "rawSpec": "~5.2.0", "saveSpec": null, - "fetchSpec": "~5.1.1" + "fetchSpec": "~5.2.0" }, "_requiredBy": [ "/browserify-aes", "/browserify-des", + "/browserify-sign", "/cipher-base", "/create-hmac", "/evp_bytestokey", + "/hash-base", "/md5.js", "/parse-asn1", "/pbkdf2", "/public-encrypt", "/randombytes", "/randomfill", - "/readable-stream", "/sha.js", - "/string_decoder", - "/util" + "/string_decoder" ], - "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "_shasum": "991ec69d296e0313747d59bdfd2b745c35f8828d", - "_spec": "safe-buffer@~5.1.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "_shasum": "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "_spec": "safe-buffer@~5.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/string_decoder", "author": { "name": "Feross Aboukhadijeh", "email": "feross@feross.org", - "url": "http://feross.org" + "url": "https://feross.org" }, "bugs": { "url": "https://github.com/feross/safe-buffer/issues" @@ -49,8 +49,22 @@ "description": "Safer Node.js Buffer API", "devDependencies": { "standard": "*", - "tape": "^4.0.0" + "tape": "^5.0.0" }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "homepage": "https://github.com/feross/safe-buffer", "keywords": [ "buffer", @@ -72,5 +86,5 @@ "test": "standard && tape test/*.js" }, "types": "index.d.ts", - "version": "5.1.2" + "version": "5.2.1" } diff --git a/build/node_modules/safe-stable-stringify/CHANGELOG.md b/build/node_modules/safe-stable-stringify/CHANGELOG.md new file mode 100644 index 00000000..0e8f0880 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/CHANGELOG.md @@ -0,0 +1,75 @@ +# Changelog + +## v2.3.1 + +- Fix `invalid regexp group` error in browsers or environments that do not support the negative lookbehind regular expression assertion. + +## v2.3.0 + +- Accept the `Error` constructor as `circularValue` option to throw on circular references as the regular JSON.stringify would: + +```js +import { configure } from 'safe-stable-stringify' + +const object = {} +object.circular = object; + +const stringify = configure({ circularValue: TypeError }) + +stringify(object) +// TypeError: Converting circular structure to JSON +``` + +- Fixed escaping wrong surrogates. Only lone surrogates are now escaped. + +## v2.2.0 + +- Reduce module size by removing the test and benchmark files from the published package +- Accept `undefined` as `circularValue` option to remove circular properties from the serialized output: + +```js +import { configure } from 'safe-stable-stringify' + +const object = { array: [] } +object.circular = object; +object.array.push(object) + +configure({ circularValue: undefined })(object) +// '{"array":[null]}' +``` + +## v2.1.0 + +- Added `maximumBreadth` option to limit stringification at a specific object or array "width" (number of properties / values) +- Added `maximumDepth` option to limit stringification at a specific nesting depth +- Implemented the [well formed stringify proposal](https://github.com/tc39/proposal-well-formed-stringify) that is now part of the spec +- Fixed maximum spacer length (10) +- Fixed TypeScript definition +- Fixed duplicated array replacer values serialized more than once + +## v2.0.0 + +- __[BREAKING]__ Convert BigInt to number by default instead of ignoring these values + If you wish to ignore these values similar to earlier versions, just use the new `bigint` option and set it to `false`. +- __[BREAKING]__ Support ESM +- __[BREAKING]__ Requires ES6 +- Optional BigInt support +- Deterministic behavior is now optional +- The value to indicate a circular structure is now adjustable +- Significantly faster TypedArray stringification +- Smaller Codebase +- Removed stateful indentation to guarantee side-effect freeness + +## v1.1.1 + +- Fixed an indentation issue in combination with empty arrays and objects +- Updated dev dependencies + +## v1.1.0 + +- Add support for IE11 (https://github.com/BridgeAR/safe-stable-stringify/commit/917b6128de135a950ec178d66d86b4d772c7656d) +- Fix issue with undefined values (https://github.com/BridgeAR/safe-stable-stringify/commit/4196f87, https://github.com/BridgeAR/safe-stable-stringify/commit/4eab558) +- Fix typescript definition (https://github.com/BridgeAR/safe-stable-stringify/commit/7a87478) +- Improve code coverage (https://github.com/BridgeAR/safe-stable-stringify/commit/ed8cadc, https://github.com/BridgeAR/safe-stable-stringify/commit/b58c494) +- Update dev dependencies (https://github.com/BridgeAR/safe-stable-stringify/commit/b857ea8) +- Improve docs \ No newline at end of file diff --git a/build/node_modules/safe-stable-stringify/LICENSE b/build/node_modules/safe-stable-stringify/LICENSE new file mode 100644 index 00000000..99c65e2c --- /dev/null +++ b/build/node_modules/safe-stable-stringify/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Ruben Bridgewater + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/safe-stable-stringify/esm/package.json b/build/node_modules/safe-stable-stringify/esm/package.json new file mode 100644 index 00000000..4393479d --- /dev/null +++ b/build/node_modules/safe-stable-stringify/esm/package.json @@ -0,0 +1,4 @@ +{ + "type": "module", + "main": "wrapper.js" +} diff --git a/build/node_modules/safe-stable-stringify/esm/wrapper.js b/build/node_modules/safe-stable-stringify/esm/wrapper.js new file mode 100644 index 00000000..0cf01f05 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/esm/wrapper.js @@ -0,0 +1,6 @@ +import cjsModule from '../index.js' + +export const configure = cjsModule.configure + +export const stringify = cjsModule +export default cjsModule diff --git a/build/node_modules/safe-stable-stringify/index.d.ts b/build/node_modules/safe-stable-stringify/index.d.ts new file mode 100644 index 00000000..24787153 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/index.d.ts @@ -0,0 +1,18 @@ +export function stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; +export function stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string; + +export interface StringifyOptions { + bigint?: boolean, + circularValue?: string | null | TypeErrorConstructor | ErrorConstructor, + deterministic?: boolean, + maximumBreadth?: number, + maximumDepth?: number, +} + +export namespace stringify { + export function configure(options: StringifyOptions): typeof stringify; +} + +export function configure(options: StringifyOptions): typeof stringify; + +export default stringify; diff --git a/build/node_modules/safe-stable-stringify/index.js b/build/node_modules/safe-stable-stringify/index.js new file mode 100644 index 00000000..7b3b1fb6 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/index.js @@ -0,0 +1,618 @@ +'use strict' + +const stringify = configure() + +// @ts-expect-error +stringify.configure = configure +// @ts-expect-error +stringify.stringify = stringify + +// @ts-expect-error +stringify.default = stringify + +// @ts-expect-error used for named export +exports.stringify = stringify +// @ts-expect-error used for named export +exports.configure = configure + +module.exports = stringify + +// eslint-disable-next-line +const strEscapeSequencesRegExp = /[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/ +// eslint-disable-next-line +const strEscapeSequencesReplacer = /[\u0000-\u001f\u0022\u005c\ud800-\udfff]|[\ud800-\udbff](?![\udc00-\udfff])|(?:[^\ud800-\udbff]|^)[\udc00-\udfff]/g + +// Escaped special characters. Use empty strings to fill up unused entries. +const meta = [ + '\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', + '\\u0005', '\\u0006', '\\u0007', '\\b', '\\t', + '\\n', '\\u000b', '\\f', '\\r', '\\u000e', + '\\u000f', '\\u0010', '\\u0011', '\\u0012', '\\u0013', + '\\u0014', '\\u0015', '\\u0016', '\\u0017', '\\u0018', + '\\u0019', '\\u001a', '\\u001b', '\\u001c', '\\u001d', + '\\u001e', '\\u001f', '', '', '\\"', + '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '', '', '', + '', '', '', '', '', '', '', '\\\\' +] + +function escapeFn (str) { + if (str.length === 2) { + const charCode = str.charCodeAt(1) + return `${str[0]}\\u${charCode.toString(16)}` + } + const charCode = str.charCodeAt(0) + return meta.length > charCode + ? meta[charCode] + : `\\u${charCode.toString(16)}` +} + +// Escape C0 control characters, double quotes, the backslash and every code +// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF. +function strEscape (str) { + // Some magic numbers that worked out fine while benchmarking with v8 8.0 + if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) { + return str + } + if (str.length > 100) { + return str.replace(strEscapeSequencesReplacer, escapeFn) + } + let result = '' + let last = 0 + for (let i = 0; i < str.length; i++) { + const point = str.charCodeAt(i) + if (point === 34 || point === 92 || point < 32) { + result += `${str.slice(last, i)}${meta[point]}` + last = i + 1 + } else if (point >= 0xd800 && point <= 0xdfff) { + if (point <= 0xdbff && i + 1 < str.length) { + const point = str.charCodeAt(i + 1) + if (point >= 0xdc00 && point <= 0xdfff) { + i++ + continue + } + } + result += `${str.slice(last, i)}${`\\u${point.toString(16)}`}` + last = i + 1 + } + } + result += str.slice(last) + return result +} + +function insertSort (array) { + // Insertion sort is very efficient for small input sizes but it has a bad + // worst case complexity. Thus, use native array sort for bigger values. + if (array.length > 2e2) { + return array.sort() + } + for (let i = 1; i < array.length; i++) { + const currentValue = array[i] + let position = i + while (position !== 0 && array[position - 1] > currentValue) { + array[position] = array[position - 1] + position-- + } + array[position] = currentValue + } + return array +} + +const typedArrayPrototypeGetSymbolToStringTag = + Object.getOwnPropertyDescriptor( + Object.getPrototypeOf( + Object.getPrototypeOf( + new Uint8Array() + ) + ), + Symbol.toStringTag + ).get + +function isTypedArrayWithEntries (value) { + return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0 +} + +function stringifyTypedArray (array, separator, maximumBreadth) { + if (array.length < maximumBreadth) { + maximumBreadth = array.length + } + const whitespace = separator === ',' ? '' : ' ' + let res = `"0":${whitespace}${array[0]}` + for (let i = 1; i < maximumBreadth; i++) { + res += `${separator}"${i}":${whitespace}${array[i]}` + } + return res +} + +function getCircularValueOption (options) { + if (options && Object.prototype.hasOwnProperty.call(options, 'circularValue')) { + var circularValue = options.circularValue + if (typeof circularValue === 'string') { + return `"${circularValue}"` + } + if (circularValue == null) { + return circularValue + } + if (circularValue === Error || circularValue === TypeError) { + return { + toString () { + throw new TypeError('Converting circular structure to JSON') + } + } + } + throw new TypeError('The "circularValue" argument must be of type string or the value null or undefined') + } + return '"[Circular]"' +} + +function getBooleanOption (options, key) { + if (options && Object.prototype.hasOwnProperty.call(options, key)) { + var value = options[key] + if (typeof value !== 'boolean') { + throw new TypeError(`The "${key}" argument must be of type boolean`) + } + } + return value === undefined ? true : value +} + +function getPositiveIntegerOption (options, key) { + if (options && Object.prototype.hasOwnProperty.call(options, key)) { + var value = options[key] + if (typeof value !== 'number') { + throw new TypeError(`The "${key}" argument must be of type number`) + } + if (!Number.isInteger(value)) { + throw new TypeError(`The "${key}" argument must be an integer`) + } + if (value < 1) { + throw new RangeError(`The "${key}" argument must be >= 1`) + } + } + return value === undefined ? Infinity : value +} + +function getItemCount (number) { + if (number === 1) { + return '1 item' + } + return `${number} items` +} + +function getUniqueReplacerSet (replacerArray) { + const replacerSet = new Set() + for (const value of replacerArray) { + if (typeof value === 'string') { + replacerSet.add(value) + } else if (typeof value === 'number') { + replacerSet.add(String(value)) + } + } + return replacerSet +} + +function configure (options) { + const circularValue = getCircularValueOption(options) + const bigint = getBooleanOption(options, 'bigint') + const deterministic = getBooleanOption(options, 'deterministic') + const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth') + const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth') + + function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) { + let value = parent[key] + + if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') { + value = value.toJSON(key) + } + value = replacer.call(parent, key, value) + + switch (typeof value) { + case 'string': + return `"${strEscape(value)}"` + case 'object': { + if (value === null) { + return 'null' + } + if (stack.indexOf(value) !== -1) { + return circularValue + } + + let res = '' + let join = ',' + const originalIndentation = indentation + + if (Array.isArray(value)) { + if (value.length === 0) { + return '[]' + } + if (maximumDepth < stack.length + 1) { + return '"[Array]"' + } + stack.push(value) + if (spacer !== '') { + indentation += spacer + res += `\n${indentation}` + join = `,\n${indentation}` + } + const maximumValuesToStringify = Math.min(value.length, maximumBreadth) + let i = 0 + for (; i < maximumValuesToStringify - 1; i++) { + const tmp = stringifyFnReplacer(i, value, stack, replacer, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + res += join + } + const tmp = stringifyFnReplacer(i, value, stack, replacer, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + if (value.length - 1 > maximumBreadth) { + const removedKeys = value.length - maximumBreadth - 1 + res += `${join}"... ${getItemCount(removedKeys)} not stringified"` + } + if (spacer !== '') { + res += `\n${originalIndentation}` + } + stack.pop() + return `[${res}]` + } + + let keys = Object.keys(value) + const keyLength = keys.length + if (keyLength === 0) { + return '{}' + } + if (maximumDepth < stack.length + 1) { + return '"[Object]"' + } + let whitespace = '' + let separator = '' + if (spacer !== '') { + indentation += spacer + join = `,\n${indentation}` + whitespace = ' ' + } + let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth) + if (isTypedArrayWithEntries(value)) { + res += stringifyTypedArray(value, join, maximumBreadth) + keys = keys.slice(value.length) + maximumPropertiesToStringify -= value.length + separator = join + } + if (deterministic) { + keys = insertSort(keys) + } + stack.push(value) + for (let i = 0; i < maximumPropertiesToStringify; i++) { + const key = keys[i] + const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation) + if (tmp !== undefined) { + res += `${separator}"${strEscape(key)}":${whitespace}${tmp}` + separator = join + } + } + if (keyLength > maximumBreadth) { + const removedKeys = keyLength - maximumBreadth + res += `${separator}"...":${whitespace}"${getItemCount(removedKeys)} not stringified"` + separator = join + } + if (spacer !== '' && separator.length > 1) { + res = `\n${indentation}${res}\n${originalIndentation}` + } + stack.pop() + return `{${res}}` + } + case 'number': + return isFinite(value) ? String(value) : 'null' + case 'boolean': + return value === true ? 'true' : 'false' + case 'bigint': + return bigint ? String(value) : undefined + } + } + + function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) { + if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') { + value = value.toJSON(key) + } + + switch (typeof value) { + case 'string': + return `"${strEscape(value)}"` + case 'object': { + if (value === null) { + return 'null' + } + if (stack.indexOf(value) !== -1) { + return circularValue + } + + const originalIndentation = indentation + let res = '' + let join = ',' + + if (Array.isArray(value)) { + if (value.length === 0) { + return '[]' + } + if (maximumDepth < stack.length + 1) { + return '"[Array]"' + } + stack.push(value) + if (spacer !== '') { + indentation += spacer + res += `\n${indentation}` + join = `,\n${indentation}` + } + const maximumValuesToStringify = Math.min(value.length, maximumBreadth) + let i = 0 + for (; i < maximumValuesToStringify - 1; i++) { + const tmp = stringifyArrayReplacer(i, value[i], stack, replacer, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + res += join + } + const tmp = stringifyArrayReplacer(i, value[i], stack, replacer, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + if (value.length - 1 > maximumBreadth) { + const removedKeys = value.length - maximumBreadth - 1 + res += `${join}"... ${getItemCount(removedKeys)} not stringified"` + } + if (spacer !== '') { + res += `\n${originalIndentation}` + } + stack.pop() + return `[${res}]` + } + if (replacer.size === 0) { + return '{}' + } + stack.push(value) + let whitespace = '' + if (spacer !== '') { + indentation += spacer + join = `,\n${indentation}` + whitespace = ' ' + } + let separator = '' + for (const key of replacer) { + const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation) + if (tmp !== undefined) { + res += `${separator}"${strEscape(key)}":${whitespace}${tmp}` + separator = join + } + } + if (spacer !== '' && separator.length > 1) { + res = `\n${indentation}${res}\n${originalIndentation}` + } + stack.pop() + return `{${res}}` + } + case 'number': + return isFinite(value) ? String(value) : 'null' + case 'boolean': + return value === true ? 'true' : 'false' + case 'bigint': + return bigint ? String(value) : undefined + } + } + + function stringifyIndent (key, value, stack, spacer, indentation) { + switch (typeof value) { + case 'string': + return `"${strEscape(value)}"` + case 'object': { + if (value === null) { + return 'null' + } + if (typeof value.toJSON === 'function') { + value = value.toJSON(key) + // Prevent calling `toJSON` again. + if (typeof value !== 'object') { + return stringifyIndent(key, value, stack, spacer, indentation) + } + if (value === null) { + return 'null' + } + } + if (stack.indexOf(value) !== -1) { + return circularValue + } + const originalIndentation = indentation + + if (Array.isArray(value)) { + if (value.length === 0) { + return '[]' + } + if (maximumDepth < stack.length + 1) { + return '"[Array]"' + } + stack.push(value) + indentation += spacer + let res = `\n${indentation}` + const join = `,\n${indentation}` + const maximumValuesToStringify = Math.min(value.length, maximumBreadth) + let i = 0 + for (; i < maximumValuesToStringify - 1; i++) { + const tmp = stringifyIndent(i, value[i], stack, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + res += join + } + const tmp = stringifyIndent(i, value[i], stack, spacer, indentation) + res += tmp !== undefined ? tmp : 'null' + if (value.length - 1 > maximumBreadth) { + const removedKeys = value.length - maximumBreadth - 1 + res += `${join}"... ${getItemCount(removedKeys)} not stringified"` + } + res += `\n${originalIndentation}` + stack.pop() + return `[${res}]` + } + + let keys = Object.keys(value) + const keyLength = keys.length + if (keyLength === 0) { + return '{}' + } + if (maximumDepth < stack.length + 1) { + return '"[Object]"' + } + indentation += spacer + const join = `,\n${indentation}` + let res = '' + let separator = '' + let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth) + if (isTypedArrayWithEntries(value)) { + res += stringifyTypedArray(value, join, maximumBreadth) + keys = keys.slice(value.length) + maximumPropertiesToStringify -= value.length + separator = join + } + if (deterministic) { + keys = insertSort(keys) + } + stack.push(value) + for (let i = 0; i < maximumPropertiesToStringify; i++) { + const key = keys[i] + const tmp = stringifyIndent(key, value[key], stack, spacer, indentation) + if (tmp !== undefined) { + res += `${separator}"${strEscape(key)}": ${tmp}` + separator = join + } + } + if (keyLength > maximumBreadth) { + const removedKeys = keyLength - maximumBreadth + res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"` + separator = join + } + if (separator !== '') { + res = `\n${indentation}${res}\n${originalIndentation}` + } + stack.pop() + return `{${res}}` + } + case 'number': + return isFinite(value) ? String(value) : 'null' + case 'boolean': + return value === true ? 'true' : 'false' + case 'bigint': + return bigint ? String(value) : undefined + } + } + + function stringifySimple (key, value, stack) { + switch (typeof value) { + case 'string': + return `"${strEscape(value)}"` + case 'object': { + if (value === null) { + return 'null' + } + if (typeof value.toJSON === 'function') { + value = value.toJSON(key) + // Prevent calling `toJSON` again + if (typeof value !== 'object') { + return stringifySimple(key, value, stack) + } + if (value === null) { + return 'null' + } + } + if (stack.indexOf(value) !== -1) { + return circularValue + } + + let res = '' + + if (Array.isArray(value)) { + if (value.length === 0) { + return '[]' + } + if (maximumDepth < stack.length + 1) { + return '"[Array]"' + } + stack.push(value) + const maximumValuesToStringify = Math.min(value.length, maximumBreadth) + let i = 0 + for (; i < maximumValuesToStringify - 1; i++) { + const tmp = stringifySimple(i, value[i], stack) + res += tmp !== undefined ? tmp : 'null' + res += ',' + } + const tmp = stringifySimple(i, value[i], stack) + res += tmp !== undefined ? tmp : 'null' + if (value.length - 1 > maximumBreadth) { + const removedKeys = value.length - maximumBreadth - 1 + res += `,"... ${getItemCount(removedKeys)} not stringified"` + } + stack.pop() + return `[${res}]` + } + + let keys = Object.keys(value) + const keyLength = keys.length + if (keyLength === 0) { + return '{}' + } + if (maximumDepth < stack.length + 1) { + return '"[Object]"' + } + let separator = '' + let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth) + if (isTypedArrayWithEntries(value)) { + res += stringifyTypedArray(value, ',', maximumBreadth) + keys = keys.slice(value.length) + maximumPropertiesToStringify -= value.length + separator = ',' + } + if (deterministic) { + keys = insertSort(keys) + } + stack.push(value) + for (let i = 0; i < maximumPropertiesToStringify; i++) { + const key = keys[i] + const tmp = stringifySimple(key, value[key], stack) + if (tmp !== undefined) { + res += `${separator}"${strEscape(key)}":${tmp}` + separator = ',' + } + } + if (keyLength > maximumBreadth) { + const removedKeys = keyLength - maximumBreadth + res += `${separator}"...":"${getItemCount(removedKeys)} not stringified"` + } + stack.pop() + return `{${res}}` + } + case 'number': + return isFinite(value) ? String(value) : 'null' + case 'boolean': + return value === true ? 'true' : 'false' + case 'bigint': + return bigint ? String(value) : undefined + } + } + + function stringify (value, replacer, space) { + if (arguments.length > 1) { + let spacer = '' + if (typeof space === 'number') { + spacer = ' '.repeat(Math.min(space, 10)) + } else if (typeof space === 'string') { + spacer = space.slice(0, 10) + } + if (replacer != null) { + if (typeof replacer === 'function') { + return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '') + } + if (Array.isArray(replacer)) { + return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '') + } + } + if (spacer.length !== 0) { + return stringifyIndent('', value, [], spacer, '') + } + } + return stringifySimple('', value, []) + } + + return stringify +} diff --git a/build/node_modules/safe-stable-stringify/package.json b/build/node_modules/safe-stable-stringify/package.json new file mode 100644 index 00000000..537b145e --- /dev/null +++ b/build/node_modules/safe-stable-stringify/package.json @@ -0,0 +1,93 @@ +{ + "_from": "safe-stable-stringify@^2.3.1", + "_id": "safe-stable-stringify@2.3.1", + "_inBundle": false, + "_integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "_location": "/safe-stable-stringify", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "safe-stable-stringify@^2.3.1", + "name": "safe-stable-stringify", + "escapedName": "safe-stable-stringify", + "rawSpec": "^2.3.1", + "saveSpec": null, + "fetchSpec": "^2.3.1" + }, + "_requiredBy": [ + "/logform", + "/winston" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "_shasum": "ab67cbe1fe7d40603ca641c5e765cb942d04fc73", + "_spec": "safe-stable-stringify@^2.3.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", + "author": { + "name": "Ruben Bridgewater" + }, + "bugs": { + "url": "https://github.com/BridgeAR/safe-stable-stringify/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Deterministic and safely JSON.stringify to quickly serialize JavaScript objects", + "devDependencies": { + "@types/json-stable-stringify": "^1.0.32", + "@types/node": "^16.11.1", + "benchmark": "^2.1.4", + "clone": "^2.1.2", + "fast-json-stable-stringify": "^2.1.0", + "fast-safe-stringify": "^2.0.7", + "fast-stable-stringify": "^1.0.0", + "faster-stable-stringify": "^1.0.0", + "fastest-stable-stringify": "^2.0.2", + "json-stable-stringify": "^1.0.1", + "json-stringify-deterministic": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "standard": "^15.0.0", + "tap": "^15.0.9", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=10" + }, + "exports": { + "require": "./index.js", + "import": "./esm/wrapper.js" + }, + "homepage": "https://github.com/BridgeAR/safe-stable-stringify#readme", + "keywords": [ + "stable", + "stringify", + "JSON", + "JSON.stringify", + "safe", + "serialize", + "deterministic", + "circular", + "object", + "predicable", + "repeatable", + "fast", + "bigint" + ], + "license": "MIT", + "main": "index.js", + "name": "safe-stable-stringify", + "repository": { + "type": "git", + "url": "git+https://github.com/BridgeAR/safe-stable-stringify.git" + }, + "scripts": { + "benchmark": "node benchmark.js", + "compare": "node compare.js", + "lint": "standard --fix", + "tap": "tap test.js", + "tap:only": "tap test.js --watch --only", + "test": "standard && tap test.js", + "tsc": "tsc --project tsconfig.json" + }, + "typings": "index.d.ts", + "version": "2.3.1" +} diff --git a/build/node_modules/safe-stable-stringify/readme.md b/build/node_modules/safe-stable-stringify/readme.md new file mode 100644 index 00000000..69ed2b28 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/readme.md @@ -0,0 +1,170 @@ +# safe-stable-stringify + +Safe, deterministic and fast serialization alternative to [JSON.stringify][]. Zero dependencies. ESM and CJS. 100% coverage. + +Gracefully handles circular structures and bigint instead of throwing. + +Optional custom circular values and deterministic behavior. + +## stringify(value[, replacer[, space]]) + +The same as [JSON.stringify][]. + +* `value` {any} +* `replacer` {string[]|function|null} +* `space` {number|string} +* Returns: {string} + +```js +const stringify = require('safe-stable-stringify') + +const bigint = { a: 0, c: 2n, b: 1 } + +stringify(bigint) +// '{"a":0,"b":1,"c":2}' +JSON.stringify(bigint) +// TypeError: Do not know how to serialize a BigInt + +const circular = { b: 1, a: 0 } +circular.circular = circular + +stringify(circular) +// '{"a":0,"b":1,"circular":"[Circular]"}' +JSON.stringify(circular) +// TypeError: Converting circular structure to JSON + +stringify(circular, ['a', 'b'], 2) +// { +// "a": 0, +// "b": 1 +// } +``` + +## stringify.configure(options) + +* `bigint` {boolean} If `true`, bigint values are converted to a number. Otherwise + they are ignored. **Default:** `true`. +* `circularValue` {string|null|undefined|ErrorConstructor} Defines the value for + circular references. Set to `undefined`, circular properties are not + serialized (array entries are replaced with `null`). Set to `Error`, to throw + on circular references. **Default:** `[Circular]`. +* `deterministic` {boolean} If `true`, guarantee a deterministic key order + instead of relying on the insertion order. **Default:** `true`. +* `maximumBreadth` {number} Maximum number of entries to serialize per object + (at least one). The serialized output contains information about how many + entries have not been serialized. Ignored properties are counted as well + (e.g., properties with symbol values). Using the array replacer overrules this + option. **Default:** `Infinity` +* `maximumDepth` {number} Maximum number of object nesting levels (at least 1) + that will be serialized. Objects at the maximum level are serialized as + `'[Object]'` and arrays as `'[Array]'`. **Default:** `Infinity` +* Returns: {function} A stringify function with the options applied. + +```js +import { configure } from 'safe-stable-stringify' + +const stringify = configure({ + bigint: true, + circularValue: 'Magic circle!', + deterministic: false, + maximumDepth: 1, + maximumBreadth: 4 +}) + +const circular = { + bigint: 999_999_999_999_999_999n, + typed: new Uint8Array(3), + deterministic: "I don't think so", +} +circular.circular = circular +circular.ignored = true +circular.alsoIgnored = 'Yes!' + +const stringified = stringify(circular, null, 4) + +console.log(stringified) +// { +// "bigint": 999999999999999999, +// "typed": "[Object]", +// "deterministic": "I don't think so", +// "circular": "Magic circle!", +// "...": "2 items not stringified" +// } + +const throwOnCircular = configure({ + circularValue: Error +}) + +throwOnCircular(circular); +// TypeError: Converting circular structure to JSON +``` + +## Differences to JSON.stringify + +1. _Circular values_ are replaced with the string `[Circular]` (the value may be changed). +1. _Object keys_ are sorted instead of using the insertion order (it is possible to deactivate this). +1. _BigInt_ values are stringified as regular number instead of throwing a TypeError. +1. _Boxed primitives_ (e.g., `Number(5)`) are not unboxed and are handled as + regular object. + +Those are the only differences to `JSON.stringify()`. This is a side effect free +variant and [`toJSON`][], [`replacer`][] and the [`spacer`][] work the same as +with `JSON.stringify()`. + +## Performance / Benchmarks + +Currently this is by far the fastest known stable (deterministic) stringify +implementation. This is especially important for big objects and TypedArrays. + +(Dell Precision 5540, i7-9850H CPU @ 2.60GHz, Node.js 16.11.1) + +```md +simple: simple object x 3,463,894 ops/sec ±0.44% (98 runs sampled) +simple: circular x 1,236,007 ops/sec ±0.46% (99 runs sampled) +simple: deep x 18,942 ops/sec ±0.41% (93 runs sampled) +simple: deep circular x 18,690 ops/sec ±0.72% (96 runs sampled) + +replacer: simple object x 2,664,940 ops/sec ±0.31% (98 runs sampled) +replacer: circular x 1,015,981 ops/sec ±0.09% (99 runs sampled) +replacer: deep x 17,328 ops/sec ±0.38% (97 runs sampled) +replacer: deep circular x 17,071 ops/sec ±0.21% (98 runs sampled) + +array: simple object x 3,869,608 ops/sec ±0.22% (98 runs sampled) +array: circular x 3,853,943 ops/sec ±0.45% (96 runs sampled) +array: deep x 3,563,227 ops/sec ±0.20% (100 runs sampled) +array: deep circular x 3,286,475 ops/sec ±0.07% (100 runs sampled) + +indentation: simple object x 2,183,162 ops/sec ±0.66% (97 runs sampled) +indentation: circular x 872,538 ops/sec ±0.57% (98 runs sampled) +indentation: deep x 16,795 ops/sec ±0.48% (93 runs sampled) +indentation: deep circular x 16,443 ops/sec ±0.40% (97 runs sampled) +``` + +Comparing `safe-stable-stringify` with known alternatives: + +```md +fast-json-stable-stringify x 18,765 ops/sec ±0.71% (94 runs sampled) +json-stable-stringify x 13,870 ops/sec ±0.72% (94 runs sampled) +fast-stable-stringify x 21,343 ops/sec ±0.33% (95 runs sampled) +faster-stable-stringify x 17,707 ops/sec ±0.44% (97 runs sampled) +json-stringify-deterministic x 11,208 ops/sec ±0.57% (98 runs sampled) +fast-safe-stringify x 21,460 ops/sec ±0.75% (99 runs sampled) +this x 30,367 ops/sec ±0.39% (96 runs sampled) + +The fastest is this +``` + +The `fast-safe-stringify` comparison uses the modules stable implementation. + +## Acknowledgements + +Sponsored by [MaibornWolff](https://www.maibornwolff.de/) and [nearForm](http://nearform.com) + +## License + +MIT + +[`replacer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20replacer%20parameter +[`spacer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The%20space%20argument +[`toJSON`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior +[JSON.stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify diff --git a/build/node_modules/safe-stable-stringify/tsconfig.json b/build/node_modules/safe-stable-stringify/tsconfig.json new file mode 100644 index 00000000..403127a9 --- /dev/null +++ b/build/node_modules/safe-stable-stringify/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "allowJs": true, + "checkJs": true, + "sourceMap": false, + "declaration": false, + "noEmit": true, + "downlevelIteration": false, + "experimentalDecorators": false, + "moduleResolution": "node", + "importHelpers": false, + "target": "esnext", + "module": "CommonJS", + "lib": [ + "esnext", + "dom" + ] + }, + "include": ["**/*.js", "**/*.ts"], + "exclude": ["compare.js", "benchmark.js", "./coverage"] +} diff --git a/build/node_modules/safer-buffer/package.json b/build/node_modules/safer-buffer/package.json index c1e215ba..33ba7c37 100644 --- a/build/node_modules/safer-buffer/package.json +++ b/build/node_modules/safer-buffer/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/asn1.js" ], - "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safer-buffer/-/safer-buffer-2.1.2.tgz", "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a", "_spec": "safer-buffer@^2.1.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/asn1.js", diff --git a/build/node_modules/samsam/.npmignore b/build/node_modules/samsam/.npmignore deleted file mode 100644 index 07e6e472..00000000 --- a/build/node_modules/samsam/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/build/node_modules/samsam/.travis.yml b/build/node_modules/samsam/.travis.yml deleted file mode 100644 index 587bd3e0..00000000 --- a/build/node_modules/samsam/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: node_js diff --git a/build/node_modules/samsam/AUTHORS b/build/node_modules/samsam/AUTHORS deleted file mode 100644 index 13df0139..00000000 --- a/build/node_modules/samsam/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Christian Johansen (christian@cjohansen.no) -August Lilleaas (august@augustl.com) diff --git a/build/node_modules/samsam/Readme.md b/build/node_modules/samsam/Readme.md deleted file mode 100644 index a2a56c32..00000000 --- a/build/node_modules/samsam/Readme.md +++ /dev/null @@ -1,226 +0,0 @@ -# samsam - -[![Build status](https://secure.travis-ci.org/busterjs/samsam.png?branch=master)](http://travis-ci.org/busterjs/samsam) - -> Same same, but different - -`samsam` is a collection of predicate and comparison functions useful for -identifiying the type of values and to compare values with varying degrees of -strictness. - -`samsam` is a general-purpose library with no dependencies. It works in browsers -(including old and rowdy ones, like IE6) and Node. It will define itself as an -AMD module if you want it to (i.e. if there's a `define` function available). - -`samsam` was originally extracted from the -`referee `_ assertion library, which -ships with the Buster.JS testing framework. - - -## Predicate functions - - -### `isArguments(object)` - -Returns `true` if `object` is an `arguments` object, `false` otherwise. - - -### `isNegZero(value)` - -Returns `true` if `value` is `-0`. - - -## `isElement(object)` - -Returns `true` if `object` is a DOM element node. Unlike -Underscore.js/lodash, this function will return `false` if `object` is an -*element-like* object, i.e. a regular object with a `nodeType` property that -holds the value `1`. - - -###`isDate(object)` - -Returns true if the object is a `Date`, or *date-like*. Duck typing of date -objects work by checking that the object has a `getTime` function whose return -value equals the return value from the object's `valueOf`. - - -## Comparison functions - - -###`identical(x, y)` - -Strict equality check according to `EcmaScript Harmony's `egal`. - -**From the Harmony wiki:** - -> An egal function simply makes available the internal `SameValue` function -from section 9.12 of the ES5 spec. If two values are egal, then they are not -observably distinguishable. - -`identical` returns `true` when `===` is `true`, except for `-0` and -`+0`, where it returns `false`. Additionally, it returns `true` when -`NaN` is compared to itself. - - -### `deepEqual(obj1, obj2)` - -Deep equal comparison. Two values are "deep equal" if: - -* They are identical -* They are both date objects representing the same time -* They are both arrays containing elements that are all deepEqual -* They are objects with the same set of properties, and each property - in `obj1` is deepEqual to the corresponding property in `obj2` - - -### `match(object, matcher)` - -Partial equality check. Compares `object` with matcher according a wide set of -rules: - - -**String matcher** - -In its simplest form, `match` performs a case insensitive substring match. -When the matcher is a string, `object` is converted to a string, and the -function returns `true` if the matcher is a case-insensitive substring of -`object` as a string. - -```javascript -samsam.match("Give me something", "Give"); //true -samsam.match("Give me something", "sumptn"); // false -samsam.match({ toString: function () { return "yeah"; } }, "Yeah!"); // true -``` - -The last example is not symmetric. When the matcher is a string, the `object` -is coerced to a string - in this case using `toString`. Changing the order of -the arguments would cause the matcher to be an object, in which case different -rules apply (see below). - - -**Boolean matcher** - -Performs a strict (i.e. `===`) match with the object. So, only `true` -matches `true`, and only `false` matches `false`. - - -**Regular expression matcher** - -When the matcher is a regular expression, the function will pass if -`object.test(matcher)` is `true`. `match` is written in a generic way, so -any object with a `test` method will be used as a matcher this way. - -```javascript -samsam.match("Give me something", /^[a-z\s]$/i); // true -samsam.match("Give me something", /[0-9]/); // false -samsam.match({ toString: function () { return "yeah!"; } }, /yeah/); // true -samsam.match(234, /[a-z]/); // false -``` - - -**Number matcher** - -When the matcher is a number, the assertion will pass if `object == matcher`. - -```javascript -samsam.match("123", 123); // true -samsam.match("Give me something", 425); // false -samsam.match({ toString: function () { return "42"; } }, 42); // true -samsam.match(234, 1234); // false -``` - - -**Function matcher** - -When the matcher is a function, it is called with `object` as its only -argument. `match` returns `true` if the function returns `true`. A strict -match is performed against the return value, so a boolean `true` is required, -truthy is not enough. - -```javascript -// true -samsam.match("123", function (exp) { - return exp == "123"; -}); - -// false -samsam.match("Give me something", function () { - return "ok"; -}); - -// true -samsam.match({ - toString: function () { - return "42"; - } -}, function () { return true; }); - -// false -samsam.match(234, function () {}); -``` - - -**Object matcher** - -As mentioned above, if an object matcher defines a `test` method, `match` -will return `true` if `matcher.test(object)` returns truthy. - -If the matcher does not have a test method, a recursive match is performed. If -all properties of `matcher` matches corresponding properties in `object`, -`match` returns `true`. Note that the object matcher does not care if the -number of properties in the two objects are the same - only if all properties in -the matcher recursively matches ones in `object`. - -```javascript -// true -samsam.match("123", { - test: function (arg) { - return arg == 123; - } -}); - -// false -samsam.match({}, { prop: 42 }); - -// true -samsam.match({ - name: "Chris", - profession: "Programmer" -}, { - name: "Chris" -}); - -// false -samsam.match(234, { name: "Chris" }); -``` - - -**DOM elements** - -`match` can be very helpful when comparing DOM elements, because it allows -you to compare several properties with one call: - -```javascript -var el = document.getElementById("myEl"); - -samsam.match(el, { - tagName: "h2", - className: "item", - innerHTML: "Howdy" -}); -``` - - -## Changelog - -**1.1.2** (11.12.2014) - -* Fix for issue [#359 - `assert.match` does not support objects with `null` properties`](https://github.com/busterjs/buster/issues/359) -* Implementation of feature request [#64 - assert.match and parentNode](https://github.com/busterjs/buster/issues/64) - -**1.1.1** (26.03.2014) - -* [Make `isArguments` work with arguments from `"strict mode"` functions](https://github.com/busterjs/samsam/commit/72903613af90f39474f8388ed8957eaea4cf46ae) -* [Fix type error for nested object in function `match`](https://github.com/busterjs/samsam/commit/9d3420a11e9b3c65559945e60ca56980820db20f) -* Fix for issue [#366 - Assertion match fails with data attribute](https://github.com/busterjs/buster/issues/366) diff --git a/build/node_modules/samsam/autolint.js b/build/node_modules/samsam/autolint.js deleted file mode 100644 index 4f9755e0..00000000 --- a/build/node_modules/samsam/autolint.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - paths: [ - "lib/*.js", - "test/*.js" - ], - linterOptions: { - node: true, - browser: true, - plusplus: true, - vars: true, - nomen: true, - forin: true, - sloppy: true, - eqeq: true, - predef: [ - "_", - "define", - "assert", - "refute", - "buster" - ] - } -}; diff --git a/build/node_modules/samsam/jsTestDriver.conf b/build/node_modules/samsam/jsTestDriver.conf deleted file mode 100644 index ee91c70f..00000000 --- a/build/node_modules/samsam/jsTestDriver.conf +++ /dev/null @@ -1,9 +0,0 @@ -server: http://localhost:4224 - -load: - - node_modules/sinon/lib/sinon.js - - node_modules/sinon/lib/sinon/spy.js - - lib/samsam.js - - node_modules/buster-util/lib/buster-util/test-case.js - - node_modules/buster-util/lib/buster-util/jstestdriver-shim.js - - test/samsam-test.js diff --git a/build/node_modules/samsam/lib/samsam.js b/build/node_modules/samsam/lib/samsam.js deleted file mode 100644 index c451e686..00000000 --- a/build/node_modules/samsam/lib/samsam.js +++ /dev/null @@ -1,399 +0,0 @@ -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); diff --git a/build/node_modules/samsam/package.json b/build/node_modules/samsam/package.json deleted file mode 100644 index 52dbc06a..00000000 --- a/build/node_modules/samsam/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "samsam@1.1.2", - "_id": "samsam@1.1.2", - "_inBundle": false, - "_integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "_location": "/samsam", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "samsam@1.1.2", - "name": "samsam", - "escapedName": "samsam", - "rawSpec": "1.1.2", - "saveSpec": null, - "fetchSpec": "1.1.2" - }, - "_requiredBy": [ - "/formatio", - "/sinon" - ], - "_resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "_shasum": "bec11fdc83a9fda063401210e40176c3024d1567", - "_spec": "samsam@1.1.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", - "author": { - "name": "Christian Johansen" - }, - "bugs": { - "url": "https://github.com/busterjs/samsam/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Christian Johansen", - "email": "christian@cjohansen.no", - "url": "http://cjohansen.no" - }, - { - "name": "August Lilleaas", - "email": "august.lilleaas@gmail.com", - "url": "http://augustl.com" - }, - { - "name": "Daniel Wittner", - "email": "d.wittner@gmx.de", - "url": "https://github.com/dwittner" - } - ], - "deprecated": "This package has been deprecated in favour of @sinonjs/samsam", - "description": "Value identification and comparison functions", - "devDependencies": { - "buster": "0.6.11" - }, - "homepage": "http://busterjs.org/docs/buster-assertions", - "main": "./lib/samsam", - "name": "samsam", - "repository": { - "type": "git", - "url": "git+https://github.com/busterjs/samsam.git" - }, - "scripts": { - "test": "node test/samsam-test.js", - "test-debug": "node --debug-brk test/samsam-test.js" - }, - "version": "1.1.2" -} diff --git a/build/node_modules/samsam/test/samsam-test.js b/build/node_modules/samsam/test/samsam-test.js deleted file mode 100644 index a55f9a28..00000000 --- a/build/node_modules/samsam/test/samsam-test.js +++ /dev/null @@ -1,386 +0,0 @@ -if (typeof module === "object" && typeof require === "function") { - var buster = require("buster"); - var samsam = require("../lib/samsam"); -} - -(function () { - - var assert = buster.assert; - - function tests(method, body) { - var tc = {}; - - function pass(name) { - var args = Array.prototype.slice.call(arguments, 1); - tc["should return true for " + name] = function () { - assert(samsam[method].apply(samsam, args)); - }; - } - - function fail(name) { - var args = Array.prototype.slice.call(arguments, 1); - tc["should return false for " + name] = function () { - assert(!samsam[method].apply(samsam, args)); - }; - } - - function shouldThrow(name) { - var args = Array.prototype.slice.call(arguments, 1); - try { - samsam[method].apply(samsam, args); - buster.assertion.fail("Expected to throw"); - } catch (e) { - assert(true); - } - } - - function add(name, func) { - tc[name] = func; - } - - body(pass, fail, shouldThrow, add); - buster.testCase(method, tc); - } - - tests("isElement", function (pass, fail) { - if (typeof document !== "undefined") { - pass("DOM element node", document.createElement("div")); - fail("DOM text node", document.createTextNode("Hello")); - } - - fail("primitive", 42); - fail("object", {}); - fail("node-like object", { nodeType: 1 }); - }); - - tests("isNegZero", function (pass, fail) { - pass("-0", -0); - fail("0", 0); - fail("object", {}); - }); - - tests("identical", function (pass, fail) { - var object = { id: 42 }; - pass("same object", object, object); - pass("same primitive", 42, 42); - fail("-0 and 0", -0, 0); - pass("NaN and NaN", NaN, NaN); - }); - - tests("deepEqual", function (pass, fail) { - var func = function () {}; - var obj = {}; - var arr = []; - var date = new Date(); - var sameDate = new Date(date.getTime()); - var anotherDate = new Date(date.getTime() - 10); - var sameDateWithProp = new Date(date.getTime()); - sameDateWithProp.prop = 42; - - pass("object to itself", obj, obj); - pass("strings", "Hey", "Hey"); - pass("numbers", 32, 32); - pass("booleans", false, false); - pass("null", null, null); - pass("undefined", undefined, undefined); - pass("function to itself", func, func); - fail("functions", function () {}, function () {}); - pass("array to itself", arr, arr); - pass("date objects with same date", date, sameDate); - fail("date objects with different dates", date, anotherDate); - fail("date objects to null", date, null); - fail("date with different custom properties", date, sameDateWithProp); - fail("strings and numbers with coercion", "4", 4); - fail("numbers and strings with coercion", 4, "4"); - fail("number object with coercion", 32, new Number(32)); - fail("number object reverse with coercion", new Number(32), 32); - fail("falsy values with coercion", 0, ""); - fail("falsy values reverse with coercion", "", 0); - fail("string boxing with coercion", "4", new String("4")); - fail("string boxing reverse with coercion", new String("4"), "4"); - pass("NaN to NaN", NaN, NaN); - fail("-0 to +0", -0, +0); - fail("-0 to 0", -0, 0); - fail("objects with different own properties", - { id: 42 }, { id: 42, di: 24 }); - fail("objects with different own properties #2", - { id: undefined }, { di: 24 }); - fail("objects with different own properties #3", - { id: 24 }, { di: undefined }); - pass("objects with one property", { id: 42 }, { id: 42 }); - pass("objects with one object property", - { obj: { id: 42 } }, { obj: { id: 42 } }); - fail("objects with one property with different values", - { id: 42 }, { id: 24 }); - - var deepObject = { - id: 42, - name: "Hey", - sayIt: function () { - return this.name; - }, - - child: { - speaking: function () {} - } - }; - - pass("complex objects", deepObject, { - sayIt: deepObject.sayIt, - child: { speaking: deepObject.child.speaking }, - id: 42, - name: "Hey" - }); - - pass("arrays", - [1, 2, "Hey there", func, { id: 42, prop: [2, 3] }], - [1, 2, "Hey there", func, { id: 42, prop: [2, 3] }]); - - fail("nested array with shallow array", [["hey"]], ["hey"]); - - var arr1 = [1, 2, 3]; - var arr2 = [1, 2, 3]; - arr1.prop = 42; - fail("arrays with different custom properties", arr1, arr2); - - pass("regexp literals", /a/, /a/); - pass("regexp objects", new RegExp("[a-z]+"), new RegExp("[a-z]+")); - - var re1 = new RegExp("[a-z]+"); - var re2 = new RegExp("[a-z]+"); - re2.id = 42; - - fail("regexp objects with custom properties", re1, re2); - fail("different objects", { id: 42 }, {}); - fail("object to null", {}, null); - fail("object to undefined", {}, undefined); - fail("object to false", {}, false); - fail("false to object", false, {}); - fail("object to true", {}, true); - fail("true to object", true, {}); - fail("'empty' object to date", {}, new Date()); - fail("'empty' object to string object", {}, String()); - fail("'empty' object to number object", {}, Number()); - fail("'empty' object to empty array", {}, []); - - function gather() { return arguments; } - var arrayLike = { length: 4, "0": 1, "1": 2, "2": {}, "3": [] }; - - pass("arguments to array", [1, 2, {}, []], gather(1, 2, {}, [])); - pass("array to arguments", gather(), []); - - pass("arguments to array like object", - arrayLike, gather(1, 2, {}, [])); - }); - - /** - * Tests for cyclic objects. - */ - tests("deepEqual", function (pass, fail) { - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = cyclic1; - cyclic2.ref = cyclic2; - pass("equal cyclic objects (cycle on 2nd level)", cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = cyclic1; - cyclic2.ref = cyclic2; - cyclic2.ref2 = cyclic2; - fail("different cyclic objects (cycle on 2nd level)", - cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = {}; - cyclic1.ref.ref = cyclic1; - cyclic2.ref = {}; - cyclic2.ref.ref = cyclic2; - pass("equal cyclic objects (cycle on 3rd level)", cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = {}; - cyclic1.ref.ref = cyclic1; - cyclic2.ref = {}; - cyclic2.ref.ref = cyclic2; - cyclic2.ref.ref2 = cyclic2; - fail("different cyclic objects (cycle on 3rd level)", - cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = cyclic1; - cyclic2.ref = cyclic1; - pass("equal objects even though only one object is cyclic", - cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {}, cyclic2 = {}; - cyclic1.ref = { - ref: cyclic1 - }; - cyclic2.ref = {}; - cyclic2.ref.ref = cyclic2.ref; - pass("referencing different but equal cyclic objects", - cyclic1, cyclic2); - }()); - - (function () { - var cyclic1 = {a: "a"}, cyclic2 = {a: "a"}; - cyclic1.ref = { - b: "b", - ref: cyclic1 - }; - cyclic2.ref = { - b: "b" - }; - cyclic2.ref.ref = cyclic2.ref; - fail("referencing different and unequal cyclic objects", - cyclic1, cyclic2); - }()); - }); - - tests("match", function (pass, fail, shouldThrow, add) { - pass("matching regexp", "Assertions", /[a-z]/); - pass("generic object and test method returning true", "Assertions", { - test: function () { return true; } - }); - fail("non-matching regexp", "Assertions 123", /^[a-z]$/); - pass("matching boolean", true, true); - fail("mismatching boolean", true, false); - fail("generic object with test method returning false", "Assertions", { - test: function () { return false; } - }); - shouldThrow("match object === null", "Assertions 123", null); - fail("match object === false", "Assertions 123", false); - fail("matching number against string", "Assertions 123", 23); - fail("matching number against similar string", "23", 23); - pass("matching number against itself", 23, 23); - pass("matcher function returns true", - "Assertions 123", function (obj) { return true; }); - fail("matcher function returns false", - "Assertions 123", function (obj) { return false; }); - fail("matcher function returns falsy", - "Assertions 123", function () {}); - fail("matcher does not return explicit true", - "Assertions 123", function () { return "Hey"; }); - - add("should call matcher with object", function () { - var spy = this.spy(); - samsam.match("Assertions 123", spy); - assert.calledWith(spy, "Assertions 123"); - }); - - pass("matcher is substring of matchee", "Diskord", "or"); - pass("matcher is string equal to matchee", "Diskord", "Diskord"); - pass("strings ignoring case", "Look ma, case-insensitive", - "LoOk Ma, CaSe-InSenSiTiVe"); - fail("match string is not substring of matchee", "Vim", "Emacs"); - fail("match string is not substring of object", {}, "Emacs"); - fail("matcher is not substring of object.toString", { - toString: function () { return "Vim"; } - }, "Emacs"); - fail("null and empty string", null, ""); - fail("undefined and empty string", undefined, ""); - fail("false and empty string", false, ""); - fail("0 and empty string", 0, ""); - fail("NaN and empty string", NaN, ""); - - var object = { - id: 42, - name: "Christian", - doIt: "yes", - - speak: function () { - return this.name; - } - }; - - pass("object containing all properties in matcher", object, { - id: 42, - doIt: "yes" - }); - - var object2 = { - id: 42, - name: "Christian", - doIt: "yes", - owner: { - someDude: "Yes", - hello: "ok" - }, - - speak: function () { - return this.name; - } - }; - - pass("nested matcher", object2, { - owner: { - someDude: "Yes", - hello: function (value) { - return value == "ok"; - } - } - }); - - pass("empty strings", "", ""); - pass("empty strings as object properties", { foo: "" }, { foo: "" }); - pass("similar arrays", [1, 2, 3], [1, 2, 3]); - pass("array subset", [1, 2, 3], [2, 3]); - pass("single-element array subset", [1, 2, 3], [1]); - pass("matching array subset", [1, 2, 3, { id: 42 }], [{ id: 42 }]); - fail("mis-matching array 'subset'", [1, 2, 3], [2, 3, 4]); - fail("mis-ordered array 'subset'", [1, 2, 3], [1, 3]); - pass("empty arrays", [], []); - pass("objects with empty arrays", { xs: [] }, { xs: [] }); - fail("nested objects with different depth", { a: 1 }, { b: { c: 2 } }); - pass("dom elements with matching data attributes", { - getAttribute: function (name) { - if (name === "data-path") { - return "foo.bar"; - } - } - }, { "data-path": "foo.bar" }); - fail("dom elements with not matching data attributes", { - getAttribute: function (name) { - if (name === "data-path") { - return "foo.foo"; - } - } - }, { "data-path": "foo.bar" }); - - pass("equal null properties", { foo: null }, { foo: null }); - fail("unmatched null property", {}, { foo: null }); - fail("matcher with unmatched null property", { foo: 'arbitrary' }, { foo: null }); - pass("equal undefined properties", { foo: undefined }, { foo: undefined }); - fail("matcher with unmatched undefined property", { foo: 'arbitrary' }, { foo: undefined }); - pass('unmatched undefined property', {}, { foo: undefined }); - - var obj = { foo: undefined }; - pass("same object matches self", obj, obj); - - pass("null matches null", null, null); - fail("null does not match undefined", null, undefined); - - pass("undefined matches undefined", undefined, undefined); - fail("undefined does not match null", undefined, null); - - }); - - tests("isArguments", function (pass, fail) { - pass("arguments object", arguments); - fail("primitive", 42); - fail("object", {}); - pass("arguments object from strict-mode function", - (function () { "use strict"; return arguments; }())); - }); -}()); diff --git a/build/node_modules/semver/CHANGELOG.md b/build/node_modules/semver/CHANGELOG.md new file mode 100644 index 00000000..220af176 --- /dev/null +++ b/build/node_modules/semver/CHANGELOG.md @@ -0,0 +1,111 @@ +# changes log + +## 7.3.0 + +* Add `subset(r1, r2)` method to determine if `r1` range is entirely + contained by `r2` range. + +## 7.2.3 + +* Fix handling of `includePrelease` mode where version ranges like `1.0.0 - + 2.0.0` would include `3.0.0-pre` and not `1.0.0-pre`. + +## 7.2.2 + +* Fix bug where `2.0.0-pre` would be included in `^1.0.0` if + `includePrerelease` was set to true. + +## 7.2.0 + +* Add `simplifyRange` method to attempt to generate a more human-readable + range expression that is equivalent to a supplied range, for a given set + of versions. + +## 7.1.2 + +* Remove fancy lazy-loading logic, as it was causing problems for webpack + users. + +## 7.1.0 + +* Add `require('semver/preload')` to load the entire module without using + lazy getter methods. + +## 7.0.0 + +* Refactor module into separate files for better tree-shaking +* Drop support for very old node versions, use const/let, `=>` functions, + and classes. + +## 6.3.0 + +* Expose the token enum on the exports + +## 6.2.0 + +* Coerce numbers to strings when passed to semver.coerce() +* Add `rtl` option to coerce from right to left + +## 6.1.3 + +* Handle X-ranges properly in includePrerelease mode + +## 6.1.2 + +* Do not throw when testing invalid version strings + +## 6.1.1 + +* Add options support for semver.coerce() +* Handle undefined version passed to Range.test + +## 6.1.0 + +* Add semver.compareBuild function +* Support `*` in semver.intersects + +## 6.0 + +* Fix `intersects` logic. + + This is technically a bug fix, but since it is also a change to behavior + that may require users updating their code, it is marked as a major + version increment. + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/build/node_modules/semver/LICENSE b/build/node_modules/semver/LICENSE index 0c44ae71..19129e31 100644 --- a/build/node_modules/semver/LICENSE +++ b/build/node_modules/semver/LICENSE @@ -1,27 +1,15 @@ -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. +The ISC License -The BSD License +Copyright (c) Isaac Z. Schlueter and Contributors -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/semver/README.md b/build/node_modules/semver/README.md index 4e95b846..9bef045a 100644 --- a/build/node_modules/semver/README.md +++ b/build/node_modules/semver/README.md @@ -1,99 +1,379 @@ semver(1) -- The semantic versioner for npm =========================================== +## Install + +```bash +npm install semver +```` + ## Usage - $ npm install semver +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +You can also just load the module for the function that you care about, if +you'd like to minimize your footprint. + +```js +// load the whole API at once in a single object +const semver = require('semver') - semver.valid('1.2.3') // '1.2.3' - semver.valid('a.b.c') // null - semver.clean(' =v1.2.3 ') // '1.2.3' - semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true - semver.gt('1.2.3', '9.8.7') // false - semver.lt('1.2.3', '9.8.7') // true +// or just load the bits you need +// all of them listed here, just pick and choose what you want + +// classes +const SemVer = require('semver/classes/semver') +const Comparator = require('semver/classes/comparator') +const Range = require('semver/classes/range') + +// functions for working with versions +const semverParse = require('semver/functions/parse') +const semverValid = require('semver/functions/valid') +const semverClean = require('semver/functions/clean') +const semverInc = require('semver/functions/inc') +const semverDiff = require('semver/functions/diff') +const semverMajor = require('semver/functions/major') +const semverMinor = require('semver/functions/minor') +const semverPatch = require('semver/functions/patch') +const semverPrerelease = require('semver/functions/prerelease') +const semverCompare = require('semver/functions/compare') +const semverRcompare = require('semver/functions/rcompare') +const semverCompareLoose = require('semver/functions/compare-loose') +const semverCompareBuild = require('semver/functions/compare-build') +const semverSort = require('semver/functions/sort') +const semverRsort = require('semver/functions/rsort') + +// low-level comparators between versions +const semverGt = require('semver/functions/gt') +const semverLt = require('semver/functions/lt') +const semverEq = require('semver/functions/eq') +const semverNeq = require('semver/functions/neq') +const semverGte = require('semver/functions/gte') +const semverLte = require('semver/functions/lte') +const semverCmp = require('semver/functions/cmp') +const semverCoerce = require('semver/functions/coerce') + +// working with ranges +const semverSatisfies = require('semver/functions/satisfies') +const semverMaxSatisfying = require('semver/ranges/max-satisfying') +const semverMinSatisfying = require('semver/ranges/min-satisfying') +const semverToComparators = require('semver/ranges/to-comparators') +const semverMinVersion = require('semver/ranges/min-version') +const semverValidRange = require('semver/ranges/valid') +const semverOutside = require('semver/ranges/outside') +const semverGtr = require('semver/ranges/gtr') +const semverLtr = require('semver/ranges/ltr') +const semverIntersects = require('semver/ranges/intersects') +const simplifyRange = require('semver/ranges/simplify') +const rangeSubset = require('semver/ranges/subset') +``` As a command-line utility: - $ semver -h +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter - Usage: semver [ [...]] [-r | -i | -d ] - Test if version(s) satisfy the supplied range(s), and sort them. +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence - Multiple versions or ranges may be supplied, unless increment - or decrement options are specified. In that case, only a single - version may be used, and it is incremented by the specified level +Options: +-r --range + Print versions that match the specified range. - Program exits successfully if any valid version satisfies - all supplied ranges, and prints all satisfying versions. +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. - If no versions are valid, or ranges are not satisfied, - then exits failure. +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. - Versions are printed in ascending order, so supplying - multiple versions to the utility will just sort them. +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` ## Versions A "version" is described by the `v2.0.0` specification found at -. +. A leading `"="` or `"v"` character is stripped off and ignored. ## Ranges -The following range styles are supported: - -* `1.2.3` A specific version. When nothing else will do. Must be a full - version number, with major, minor, and patch versions specified. - Note that build metadata is still ignored, so `1.2.3+build2012` will - satisfy this range. -* `>1.2.3` Greater than a specific version. -* `<1.2.3` Less than a specific version. If there is no prerelease - tag on the version range, then no prerelease version will be allowed - either, even though these are technically "less than". -* `>=1.2.3` Greater than or equal to. Note that prerelease versions - are NOT equal to their "normal" equivalents, so `1.2.3-beta` will - not satisfy this range, but `2.3.0-beta` will. -* `<=1.2.3` Less than or equal to. In this case, prerelease versions - ARE allowed, so `1.2.3-beta` would satisfy. +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` -* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to `1.2.3`". When - using tilde operators, prerelease versions are supported as well, - but a prerelease of the next significant digit will NOT be - satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`. -* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with `1.2.3`". When - using caret operators, anything from the specified version (including - prerelease) will be supported up to, but not including, the next - major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`, - while `1.2.2` and `2.0.0-beta` will not. -* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with `0.1.3`". `0.x.x` versions are - special: the first non-zero component indicates potentially breaking changes, - meaning the caret operator matches any version with the same first non-zero - component starting at the specified version. -* `^0.0.2` := `=0.0.2` "Only the version `0.0.2` is considered compatible" -* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" -* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with `1.2`" -* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" -* `1.2.*` Same as `1.2.x`. -* `1.2` Same as `1.2.x`. -* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" -* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with `1`" -* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" -* `1.*` Same as `1.x`. -* `1` Same as `1.x`. -* `*` Any version whatsoever. -* `x` Same as `*`. -* `""` (just an empty string) Same as `*`. - - -Ranges can be joined with either a space (which implies "and") or a -`||` (which implies "or"). + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0-0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0-0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0-0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0-0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0-0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0-0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0-0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0-0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0-0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0-0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0-0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0-0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0-0` +* `^0.2.3` := `>=0.2.3 <0.3.0-0` +* `^0.0.3` := `>=0.0.3 <0.0.4-0` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0-0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4-0` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0-0` +* `^0.0.x` := `>=0.0.0 <0.1.0-0` +* `^0.0` := `>=0.0.0 <0.1.0-0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0-0` +* `^0.x` := `>=0.0.0 <1.0.0-0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` ## Functions -All methods and classes take a final `loose` boolean argument that, if -true, will be more forgiving about not-quite-valid semver strings. -The resulting output will always be 100% strict, of course. +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. Strict-mode Comparators and Ranges will be strict about the SemVer strings that they parse. @@ -109,6 +389,15 @@ strings that they parse. same as `prepatch`. It increments the patch version, then makes a prerelease. If the input version is already a prerelease it simply increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. ### Comparison @@ -128,7 +417,16 @@ strings that they parse. `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. * `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect ### Ranges @@ -137,6 +435,10 @@ strings that they parse. range. * `maxSatisfying(versions, range)`: Return the highest version in the list that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. * `gtr(version, range)`: Return `true` if version is greater than all the versions possible in the range. * `ltr(version, range)`: Return `true` if version is less than all the @@ -145,6 +447,17 @@ strings that they parse. the bounds of the range in either the high or low direction. The `hilo` argument must be either the string `'>'` or `'<'`. (This is the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect +* `simplifyRange(versions, range)`: Return a "simplified" range that + matches the same items in `versions` list as the range specified. Note + that it does *not* guarantee that it would match the same versions in all + cases, only for the set of versions provided. This is useful when + generating ranges by joining together multiple versions with `||` + programmatically, to provide the user with something a bit more + ergonomic. If the provided range is shorter in string-length than the + generated range, then that is returned. +* `subset(subRange, superRange)`: Return `true` if the `subRange` range is + entirely contained by the `superRange` range. Note that, since ranges may be non-contiguous, a version might not be greater than a range, less than a range, *or* satisfy a range! For @@ -156,3 +469,98 @@ satisfy the range. If you want to know if a version satisfies or does not satisfy a range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version, options)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver string to +semver. It looks for the first digit in a string, and consumes all +remaining characters which satisfy at least a partial semver (e.g., `1`, +`1.2`, `1.2.3`) up to the max permitted length (256 characters). Longer +versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). All +surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes +`3.4.0`). Only text which lacks digits will fail coercion (`version one` +is not valid). The maximum length for any semver component considered for +coercion is 16 characters; longer components will be ignored +(`10000000000000000.4.7.4` becomes `4.7.4`). The maximum value for any +semver component is `Number.MAX_SAFE_INTEGER || (2**53 - 1)`; higher value +components are invalid (`9999999999999999.4.7.4` is likely invalid). + +If the `options.rtl` flag is set, then `coerce` will return the right-most +coercible tuple that does not share an ending index with a longer coercible +tuple. For example, `1.2.3.4` will return `2.3.4` in rtl mode, not +`4.0.0`. `1.2.3/4` will return `4.0.0`, because the `4` is not a part of +any other overlapping SemVer tuple. + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided +version is not valid a null will be returned. This does not work for +ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `2.1.5` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` + +## Exported Modules + + + +You may pull in just the part of this semver utility that you need, if you +are sensitive to packing and tree-shaking concerns. The main +`require('semver')` export uses getter functions to lazily load the parts +of the API that are used. + +The following modules are available: + +* `require('semver')` +* `require('semver/classes')` +* `require('semver/classes/comparator')` +* `require('semver/classes/range')` +* `require('semver/classes/semver')` +* `require('semver/functions/clean')` +* `require('semver/functions/cmp')` +* `require('semver/functions/coerce')` +* `require('semver/functions/compare')` +* `require('semver/functions/compare-build')` +* `require('semver/functions/compare-loose')` +* `require('semver/functions/diff')` +* `require('semver/functions/eq')` +* `require('semver/functions/gt')` +* `require('semver/functions/gte')` +* `require('semver/functions/inc')` +* `require('semver/functions/lt')` +* `require('semver/functions/lte')` +* `require('semver/functions/major')` +* `require('semver/functions/minor')` +* `require('semver/functions/neq')` +* `require('semver/functions/parse')` +* `require('semver/functions/patch')` +* `require('semver/functions/prerelease')` +* `require('semver/functions/rcompare')` +* `require('semver/functions/rsort')` +* `require('semver/functions/satisfies')` +* `require('semver/functions/sort')` +* `require('semver/functions/valid')` +* `require('semver/ranges/gtr')` +* `require('semver/ranges/intersects')` +* `require('semver/ranges/ltr')` +* `require('semver/ranges/max-satisfying')` +* `require('semver/ranges/min-satisfying')` +* `require('semver/ranges/min-version')` +* `require('semver/ranges/outside')` +* `require('semver/ranges/to-comparators')` +* `require('semver/ranges/valid')` diff --git a/build/node_modules/semver/bin/semver.js b/build/node_modules/semver/bin/semver.js new file mode 100755 index 00000000..73fe2953 --- /dev/null +++ b/build/node_modules/semver/bin/semver.js @@ -0,0 +1,173 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +const argv = process.argv.slice(2) + +let versions = [] + +const range = [] + +let inc = null + +const version = require('../package.json').version + +let loose = false + +let includePrerelease = false + +let coerce = false + +let rtl = false + +let identifier + +const semver = require('../') + +let reverse = false + +const options = {} + +const main = () => { + if (!argv.length) return help() + while (argv.length) { + let a = argv.shift() + const indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '--rtl': + rtl = true + break + case '--ltr': + rtl = false + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + const options = { loose: loose, includePrerelease: includePrerelease, rtl: rtl } + + versions = versions.map((v) => { + return coerce ? (semver.coerce(v, options) || { version: v }).version : v + }).filter((v) => { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (let i = 0, l = range.length; i < l; i++) { + versions = versions.filter((v) => { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + + +const failInc = () => { + console.error('--inc can only be used on a single version with no range') + fail() +} + +const fail = () => process.exit(1) + +const success = () => { + const compare = reverse ? 'rcompare' : 'compare' + versions.sort((a, b) => { + return semver[compare](a, b, options) + }).map((v) => { + return semver.clean(v, options) + }).map((v) => { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach((v, i, _) => { console.log(v) }) +} + +const help = () => console.log( +`SemVer ${version} + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +--rtl + Coerce version strings right to left + +--ltr + Coerce version strings left to right (default) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them.`) + +main() diff --git a/build/node_modules/semver/classes/comparator.js b/build/node_modules/semver/classes/comparator.js new file mode 100644 index 00000000..dbbef2d8 --- /dev/null +++ b/build/node_modules/semver/classes/comparator.js @@ -0,0 +1,135 @@ +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + const sameSemVer = this.semver.version === comp.semver.version + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<') + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>') + + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } +} + +module.exports = Comparator + +const parseOptions = require('../internal/parse-options') +const {re, t} = require('../internal/re') +const cmp = require('../functions/cmp') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const Range = require('./range') diff --git a/build/node_modules/semver/classes/index.js b/build/node_modules/semver/classes/index.js new file mode 100644 index 00000000..198b84d6 --- /dev/null +++ b/build/node_modules/semver/classes/index.js @@ -0,0 +1,5 @@ +module.exports = { + SemVer: require('./semver.js'), + Range: require('./range.js'), + Comparator: require('./comparator.js') +} diff --git a/build/node_modules/semver/classes/range.js b/build/node_modules/semver/classes/range.js new file mode 100644 index 00000000..aa04f6bf --- /dev/null +++ b/build/node_modules/semver/classes/range.js @@ -0,0 +1,510 @@ +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range + .split(/\s*\|\|\s*/) + // map the range to a 2d array of comparators + .map(range => this.parseRange(range.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) + this.set = [first] + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.format() + } + + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim() + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + range = range.trim() + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) + return cached + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + // in loose mode, throw out any that are not valid comparators + .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) + .map(comp => new Comparator(comp, this.options)) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const l = rangeList.length + const rangeMap = new Map() + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete('') + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} +module.exports = Range + +const LRU = require('lru-cache') +const cache = new LRU({ max: 1000 }) + +const parseOptions = require('../internal/parse-options') +const Comparator = require('./comparator') +const debug = require('../internal/debug') +const SemVer = require('./semver') +const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace +} = require('../internal/re') + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceTilde(comp, options) + }).join(' ') + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceCaret(comp, options) + }).join(' ') + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map((comp) => { + return replaceXRange(comp, options) + }).join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') + pr = '-0' + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp.trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return (`${from} ${to}`).trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} diff --git a/build/node_modules/semver/classes/semver.js b/build/node_modules/semver/classes/semver.js new file mode 100644 index 00000000..ed81a7ec --- /dev/null +++ b/build/node_modules/semver/classes/semver.js @@ -0,0 +1,287 @@ +const debug = require('../internal/debug') +const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') +const { re, t } = require('../internal/re') + +const parseOptions = require('../internal/parse-options') +const { compareIdentifiers } = require('../internal/identifiers') +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format() + this.raw = this.version + return this + } +} + +module.exports = SemVer diff --git a/build/node_modules/semver/functions/clean.js b/build/node_modules/semver/functions/clean.js new file mode 100644 index 00000000..811fe6b8 --- /dev/null +++ b/build/node_modules/semver/functions/clean.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean diff --git a/build/node_modules/semver/functions/cmp.js b/build/node_modules/semver/functions/cmp.js new file mode 100644 index 00000000..3b89db77 --- /dev/null +++ b/build/node_modules/semver/functions/cmp.js @@ -0,0 +1,48 @@ +const eq = require('./eq') +const neq = require('./neq') +const gt = require('./gt') +const gte = require('./gte') +const lt = require('./lt') +const lte = require('./lte') + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp diff --git a/build/node_modules/semver/functions/coerce.js b/build/node_modules/semver/functions/coerce.js new file mode 100644 index 00000000..106ca71c --- /dev/null +++ b/build/node_modules/semver/functions/coerce.js @@ -0,0 +1,51 @@ +const SemVer = require('../classes/semver') +const parse = require('./parse') +const {re, t} = require('../internal/re') + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) + return null + + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) +} +module.exports = coerce diff --git a/build/node_modules/semver/functions/compare-build.js b/build/node_modules/semver/functions/compare-build.js new file mode 100644 index 00000000..9eb881be --- /dev/null +++ b/build/node_modules/semver/functions/compare-build.js @@ -0,0 +1,7 @@ +const SemVer = require('../classes/semver') +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild diff --git a/build/node_modules/semver/functions/compare-loose.js b/build/node_modules/semver/functions/compare-loose.js new file mode 100644 index 00000000..4881fbe0 --- /dev/null +++ b/build/node_modules/semver/functions/compare-loose.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose diff --git a/build/node_modules/semver/functions/compare.js b/build/node_modules/semver/functions/compare.js new file mode 100644 index 00000000..748b7afa --- /dev/null +++ b/build/node_modules/semver/functions/compare.js @@ -0,0 +1,5 @@ +const SemVer = require('../classes/semver') +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare diff --git a/build/node_modules/semver/functions/diff.js b/build/node_modules/semver/functions/diff.js new file mode 100644 index 00000000..87200ef3 --- /dev/null +++ b/build/node_modules/semver/functions/diff.js @@ -0,0 +1,23 @@ +const parse = require('./parse') +const eq = require('./eq') + +const diff = (version1, version2) => { + if (eq(version1, version2)) { + return null + } else { + const v1 = parse(version1) + const v2 = parse(version2) + const hasPre = v1.prerelease.length || v2.prerelease.length + const prefix = hasPre ? 'pre' : '' + const defaultResult = hasPre ? 'prerelease' : '' + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} +module.exports = diff diff --git a/build/node_modules/semver/functions/eq.js b/build/node_modules/semver/functions/eq.js new file mode 100644 index 00000000..271fed97 --- /dev/null +++ b/build/node_modules/semver/functions/eq.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq diff --git a/build/node_modules/semver/functions/gt.js b/build/node_modules/semver/functions/gt.js new file mode 100644 index 00000000..d9b2156d --- /dev/null +++ b/build/node_modules/semver/functions/gt.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt diff --git a/build/node_modules/semver/functions/gte.js b/build/node_modules/semver/functions/gte.js new file mode 100644 index 00000000..5aeaa634 --- /dev/null +++ b/build/node_modules/semver/functions/gte.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte diff --git a/build/node_modules/semver/functions/inc.js b/build/node_modules/semver/functions/inc.js new file mode 100644 index 00000000..aa4d83ab --- /dev/null +++ b/build/node_modules/semver/functions/inc.js @@ -0,0 +1,15 @@ +const SemVer = require('../classes/semver') + +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options + options = undefined + } + + try { + return new SemVer(version, options).inc(release, identifier).version + } catch (er) { + return null + } +} +module.exports = inc diff --git a/build/node_modules/semver/functions/lt.js b/build/node_modules/semver/functions/lt.js new file mode 100644 index 00000000..b440ab7d --- /dev/null +++ b/build/node_modules/semver/functions/lt.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt diff --git a/build/node_modules/semver/functions/lte.js b/build/node_modules/semver/functions/lte.js new file mode 100644 index 00000000..6dcc9565 --- /dev/null +++ b/build/node_modules/semver/functions/lte.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte diff --git a/build/node_modules/semver/functions/major.js b/build/node_modules/semver/functions/major.js new file mode 100644 index 00000000..4283165e --- /dev/null +++ b/build/node_modules/semver/functions/major.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major diff --git a/build/node_modules/semver/functions/minor.js b/build/node_modules/semver/functions/minor.js new file mode 100644 index 00000000..57b3455f --- /dev/null +++ b/build/node_modules/semver/functions/minor.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor diff --git a/build/node_modules/semver/functions/neq.js b/build/node_modules/semver/functions/neq.js new file mode 100644 index 00000000..f944c015 --- /dev/null +++ b/build/node_modules/semver/functions/neq.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq diff --git a/build/node_modules/semver/functions/parse.js b/build/node_modules/semver/functions/parse.js new file mode 100644 index 00000000..11f20f03 --- /dev/null +++ b/build/node_modules/semver/functions/parse.js @@ -0,0 +1,33 @@ +const {MAX_LENGTH} = require('../internal/constants') +const { re, t } = require('../internal/re') +const SemVer = require('../classes/semver') + +const parseOptions = require('../internal/parse-options') +const parse = (version, options) => { + options = parseOptions(options) + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + const r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +module.exports = parse diff --git a/build/node_modules/semver/functions/patch.js b/build/node_modules/semver/functions/patch.js new file mode 100644 index 00000000..63afca25 --- /dev/null +++ b/build/node_modules/semver/functions/patch.js @@ -0,0 +1,3 @@ +const SemVer = require('../classes/semver') +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch diff --git a/build/node_modules/semver/functions/prerelease.js b/build/node_modules/semver/functions/prerelease.js new file mode 100644 index 00000000..06aa1324 --- /dev/null +++ b/build/node_modules/semver/functions/prerelease.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} +module.exports = prerelease diff --git a/build/node_modules/semver/functions/rcompare.js b/build/node_modules/semver/functions/rcompare.js new file mode 100644 index 00000000..0ac509e7 --- /dev/null +++ b/build/node_modules/semver/functions/rcompare.js @@ -0,0 +1,3 @@ +const compare = require('./compare') +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare diff --git a/build/node_modules/semver/functions/rsort.js b/build/node_modules/semver/functions/rsort.js new file mode 100644 index 00000000..82404c5c --- /dev/null +++ b/build/node_modules/semver/functions/rsort.js @@ -0,0 +1,3 @@ +const compareBuild = require('./compare-build') +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort diff --git a/build/node_modules/semver/functions/satisfies.js b/build/node_modules/semver/functions/satisfies.js new file mode 100644 index 00000000..50af1c19 --- /dev/null +++ b/build/node_modules/semver/functions/satisfies.js @@ -0,0 +1,10 @@ +const Range = require('../classes/range') +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies diff --git a/build/node_modules/semver/functions/sort.js b/build/node_modules/semver/functions/sort.js new file mode 100644 index 00000000..4d10917a --- /dev/null +++ b/build/node_modules/semver/functions/sort.js @@ -0,0 +1,3 @@ +const compareBuild = require('./compare-build') +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort diff --git a/build/node_modules/semver/functions/valid.js b/build/node_modules/semver/functions/valid.js new file mode 100644 index 00000000..f27bae10 --- /dev/null +++ b/build/node_modules/semver/functions/valid.js @@ -0,0 +1,6 @@ +const parse = require('./parse') +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null +} +module.exports = valid diff --git a/build/node_modules/semver/index.js b/build/node_modules/semver/index.js new file mode 100644 index 00000000..57e2ae64 --- /dev/null +++ b/build/node_modules/semver/index.js @@ -0,0 +1,48 @@ +// just pre-load all the stuff that index.js lazily exports +const internalRe = require('./internal/re') +module.exports = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION, + SemVer: require('./classes/semver'), + compareIdentifiers: require('./internal/identifiers').compareIdentifiers, + rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers, + parse: require('./functions/parse'), + valid: require('./functions/valid'), + clean: require('./functions/clean'), + inc: require('./functions/inc'), + diff: require('./functions/diff'), + major: require('./functions/major'), + minor: require('./functions/minor'), + patch: require('./functions/patch'), + prerelease: require('./functions/prerelease'), + compare: require('./functions/compare'), + rcompare: require('./functions/rcompare'), + compareLoose: require('./functions/compare-loose'), + compareBuild: require('./functions/compare-build'), + sort: require('./functions/sort'), + rsort: require('./functions/rsort'), + gt: require('./functions/gt'), + lt: require('./functions/lt'), + eq: require('./functions/eq'), + neq: require('./functions/neq'), + gte: require('./functions/gte'), + lte: require('./functions/lte'), + cmp: require('./functions/cmp'), + coerce: require('./functions/coerce'), + Comparator: require('./classes/comparator'), + Range: require('./classes/range'), + satisfies: require('./functions/satisfies'), + toComparators: require('./ranges/to-comparators'), + maxSatisfying: require('./ranges/max-satisfying'), + minSatisfying: require('./ranges/min-satisfying'), + minVersion: require('./ranges/min-version'), + validRange: require('./ranges/valid'), + outside: require('./ranges/outside'), + gtr: require('./ranges/gtr'), + ltr: require('./ranges/ltr'), + intersects: require('./ranges/intersects'), + simplifyRange: require('./ranges/simplify'), + subset: require('./ranges/subset'), +} diff --git a/build/node_modules/semver/internal/constants.js b/build/node_modules/semver/internal/constants.js new file mode 100644 index 00000000..49df215a --- /dev/null +++ b/build/node_modules/semver/internal/constants.js @@ -0,0 +1,17 @@ +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +module.exports = { + SEMVER_SPEC_VERSION, + MAX_LENGTH, + MAX_SAFE_INTEGER, + MAX_SAFE_COMPONENT_LENGTH +} diff --git a/build/node_modules/semver/internal/debug.js b/build/node_modules/semver/internal/debug.js new file mode 100644 index 00000000..1c00e136 --- /dev/null +++ b/build/node_modules/semver/internal/debug.js @@ -0,0 +1,9 @@ +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug diff --git a/build/node_modules/semver/internal/identifiers.js b/build/node_modules/semver/internal/identifiers.js new file mode 100644 index 00000000..ed130942 --- /dev/null +++ b/build/node_modules/semver/internal/identifiers.js @@ -0,0 +1,23 @@ +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers +} diff --git a/build/node_modules/semver/internal/parse-options.js b/build/node_modules/semver/internal/parse-options.js new file mode 100644 index 00000000..42d2ebd6 --- /dev/null +++ b/build/node_modules/semver/internal/parse-options.js @@ -0,0 +1,11 @@ +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true + return options + }, {}) +module.exports = parseOptions diff --git a/build/node_modules/semver/internal/re.js b/build/node_modules/semver/internal/re.js new file mode 100644 index 00000000..54d4176d --- /dev/null +++ b/build/node_modules/semver/internal/re.js @@ -0,0 +1,182 @@ +const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants') +const debug = require('./debug') +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 + +const createToken = (name, value, isGlobal) => { + const index = R++ + debug(index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') diff --git a/build/node_modules/semver/package.json b/build/node_modules/semver/package.json index 135720f0..4144366c 100644 --- a/build/node_modules/semver/package.json +++ b/build/node_modules/semver/package.json @@ -1,53 +1,73 @@ { - "_from": "semver@~2.3.1", - "_id": "semver@2.3.2", + "_from": "semver@^7.3.5", + "_id": "semver@7.3.5", "_inBundle": false, - "_integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "_integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "_location": "/semver", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "semver@~2.3.1", + "raw": "semver@^7.3.5", "name": "semver", "escapedName": "semver", - "rawSpec": "~2.3.1", + "rawSpec": "^7.3.5", "saveSpec": null, - "fetchSpec": "~2.3.1" + "fetchSpec": "^7.3.5" }, "_requiredBy": [ - "/levelup" + "/superagent" ], - "_resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "_shasum": "b9848f25d6cf36333073ec9ef8856d42f1233e52", - "_spec": "semver@~2.3.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/levelup", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/semver/-/semver-7.3.5.tgz", + "_shasum": "0b621c879348d8998e4b0e4be94b3f12e6018ef7", + "_spec": "semver@^7.3.5", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/superagent", "bin": { - "semver": "./bin/semver" + "semver": "bin/semver.js" }, - "browser": "semver.browser.js", "bugs": { - "url": "https://github.com/isaacs/node-semver/issues" + "url": "https://github.com/npm/node-semver/issues" }, "bundleDependencies": false, + "dependencies": { + "lru-cache": "^6.0.0" + }, "deprecated": false, "description": "The semantic version parser used by npm.", "devDependencies": { - "tap": "0.x >=0.0.4", - "uglify-js": "~2.3.6" + "tap": "^14.10.7" + }, + "engines": { + "node": ">=10" }, - "homepage": "https://github.com/isaacs/node-semver#readme", - "license": "BSD", - "main": "semver.js", - "min": "semver.min.js", + "files": [ + "bin/**/*.js", + "range.bnf", + "classes/**/*.js", + "functions/**/*.js", + "internal/**/*.js", + "ranges/**/*.js", + "index.js", + "preload.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "index.js", "name": "semver", "repository": { "type": "git", - "url": "git://github.com/isaacs/node-semver.git" + "url": "git+https://github.com/npm/node-semver.git" }, "scripts": { - "prepublish": "make", - "test": "tap test/*.js" + "postpublish": "git push origin --follow-tags", + "postversion": "npm publish", + "preversion": "npm test", + "snap": "tap", + "test": "tap" + }, + "tap": { + "check-coverage": true, + "coverage-map": "map.js" }, - "version": "2.3.2" + "version": "7.3.5" } diff --git a/build/node_modules/semver/preload.js b/build/node_modules/semver/preload.js new file mode 100644 index 00000000..947cd4f7 --- /dev/null +++ b/build/node_modules/semver/preload.js @@ -0,0 +1,2 @@ +// XXX remove in v8 or beyond +module.exports = require('./index.js') diff --git a/build/node_modules/semver/range.bnf b/build/node_modules/semver/range.bnf new file mode 100644 index 00000000..d4c6ae0d --- /dev/null +++ b/build/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/build/node_modules/semver/ranges/gtr.js b/build/node_modules/semver/ranges/gtr.js new file mode 100644 index 00000000..db7e3559 --- /dev/null +++ b/build/node_modules/semver/ranges/gtr.js @@ -0,0 +1,4 @@ +// Determine if version is greater than all the versions possible in the range. +const outside = require('./outside') +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr diff --git a/build/node_modules/semver/ranges/intersects.js b/build/node_modules/semver/ranges/intersects.js new file mode 100644 index 00000000..3d1a6f31 --- /dev/null +++ b/build/node_modules/semver/ranges/intersects.js @@ -0,0 +1,7 @@ +const Range = require('../classes/range') +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} +module.exports = intersects diff --git a/build/node_modules/semver/ranges/ltr.js b/build/node_modules/semver/ranges/ltr.js new file mode 100644 index 00000000..528a885e --- /dev/null +++ b/build/node_modules/semver/ranges/ltr.js @@ -0,0 +1,4 @@ +const outside = require('./outside') +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr diff --git a/build/node_modules/semver/ranges/max-satisfying.js b/build/node_modules/semver/ranges/max-satisfying.js new file mode 100644 index 00000000..6e3d993c --- /dev/null +++ b/build/node_modules/semver/ranges/max-satisfying.js @@ -0,0 +1,25 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} +module.exports = maxSatisfying diff --git a/build/node_modules/semver/ranges/min-satisfying.js b/build/node_modules/semver/ranges/min-satisfying.js new file mode 100644 index 00000000..9b60974e --- /dev/null +++ b/build/node_modules/semver/ranges/min-satisfying.js @@ -0,0 +1,24 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} +module.exports = minSatisfying diff --git a/build/node_modules/semver/ranges/min-version.js b/build/node_modules/semver/ranges/min-version.js new file mode 100644 index 00000000..2fac4129 --- /dev/null +++ b/build/node_modules/semver/ranges/min-version.js @@ -0,0 +1,60 @@ +const SemVer = require('../classes/semver') +const Range = require('../classes/range') +const gt = require('../functions/gt') + +const minVersion = (range, loose) => { + range = new Range(range, loose) + + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) + minver = setMin + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} +module.exports = minVersion diff --git a/build/node_modules/semver/ranges/outside.js b/build/node_modules/semver/ranges/outside.js new file mode 100644 index 00000000..2a4b0a13 --- /dev/null +++ b/build/node_modules/semver/ranges/outside.js @@ -0,0 +1,80 @@ +const SemVer = require('../classes/semver') +const Comparator = require('../classes/comparator') +const {ANY} = Comparator +const Range = require('../classes/range') +const satisfies = require('../functions/satisfies') +const gt = require('../functions/gt') +const lt = require('../functions/lt') +const lte = require('../functions/lte') +const gte = require('../functions/gte') + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let high = null + let low = null + + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +module.exports = outside diff --git a/build/node_modules/semver/ranges/simplify.js b/build/node_modules/semver/ranges/simplify.js new file mode 100644 index 00000000..b792f972 --- /dev/null +++ b/build/node_modules/semver/ranges/simplify.js @@ -0,0 +1,44 @@ +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') +module.exports = (versions, range, options) => { + const set = [] + let min = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!min) + min = version + } else { + if (prev) { + set.push([min, prev]) + } + prev = null + min = null + } + } + if (min) + set.push([min, null]) + + const ranges = [] + for (const [min, max] of set) { + if (min === max) + ranges.push(min) + else if (!max && min === v[0]) + ranges.push('*') + else if (!max) + ranges.push(`>=${min}`) + else if (min === v[0]) + ranges.push(`<=${max}`) + else + ranges.push(`${min} - ${max}`) + } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} diff --git a/build/node_modules/semver/ranges/subset.js b/build/node_modules/semver/ranges/subset.js new file mode 100644 index 00000000..532fd136 --- /dev/null +++ b/build/node_modules/semver/ranges/subset.js @@ -0,0 +1,222 @@ +const Range = require('../classes/range.js') +const Comparator = require('../classes/comparator.js') +const { ANY } = Comparator +const satisfies = require('../functions/satisfies.js') +const compare = require('../functions/compare.js') + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a null set, OR +// - Every simple range `r1, r2, ...` which is not a null set is a subset of +// some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else if in prerelease mode, return false +// - else replace c with `[>=0.0.0]` +// - If C is only the ANY comparator +// - if in prerelease mode, return true +// - else replace C with `[>=0.0.0]` +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If any C is a = range, and GT or LT are set, return false +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the GT.semver tuple, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If GT.semver has a prerelease, and not in prerelease mode +// - If no C has a prerelease and the LT.semver tuple, return false +// - Else return true + +const subset = (sub, dom, options = {}) => { + if (sub === dom) + return true + + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) + continue OUTER + } + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) + return false + } + return true +} + +const simpleSubset = (sub, dom, options) => { + if (sub === dom) + return true + + if (sub.length === 1 && sub[0].semver === ANY) { + if (dom.length === 1 && dom[0].semver === ANY) + return true + else if (options.includePrerelease) + sub = [ new Comparator('>=0.0.0-0') ] + else + sub = [ new Comparator('>=0.0.0') ] + } + + if (dom.length === 1 && dom[0].semver === ANY) { + if (options.includePrerelease) + return true + else + dom = [ new Comparator('>=0.0.0') ] + } + + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') + gt = higherGT(gt, c, options) + else if (c.operator === '<' || c.operator === '<=') + lt = lowerLT(lt, c, options) + else + eqSet.add(c.semver) + } + + if (eqSet.size > 1) + return null + + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) + return null + else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) + return null + } + + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) + return null + + if (lt && !satisfies(eq, String(lt), options)) + return null + + for (const c of dom) { + if (!satisfies(eq, String(c), options)) + return false + } + + return true + } + + let higher, lower + let hasDomLT, hasDomGT + // if the subset has a prerelease, we need a comparator in the superset + // with the same tuple and a prerelease, or it's not a subset + let needDomLTPre = lt && + !options.includePrerelease && + lt.semver.prerelease.length ? lt.semver : false + let needDomGTPre = gt && + !options.includePrerelease && + gt.semver.prerelease.length ? gt.semver : false + // exception: <1.2.3-0 is the same as <1.2.3 + if (needDomLTPre && needDomLTPre.prerelease.length === 1 && + lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { + needDomLTPre = false + } + + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (needDomGTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomGTPre.major && + c.semver.minor === needDomGTPre.minor && + c.semver.patch === needDomGTPre.patch) { + needDomGTPre = false + } + } + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) + return false + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + return false + } + if (lt) { + if (needDomLTPre) { + if (c.semver.prerelease && c.semver.prerelease.length && + c.semver.major === needDomLTPre.major && + c.semver.minor === needDomLTPre.minor && + c.semver.patch === needDomLTPre.patch) { + needDomLTPre = false + } + } + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) + return false + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + return false + } + if (!c.operator && (lt || gt) && gtltComp !== 0) + return false + } + + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) + return false + + if (lt && hasDomGT && !gt && gtltComp !== 0) + return false + + // we needed a prerelease range in a specific tuple, but didn't get one + // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, + // because it includes prereleases in the 1.2.3 tuple + if (needDomGTPre || needDomLTPre) + return false + + return true +} + +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a +} + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a +} + +module.exports = subset diff --git a/build/node_modules/semver/ranges/to-comparators.js b/build/node_modules/semver/ranges/to-comparators.js new file mode 100644 index 00000000..6c8bc7e6 --- /dev/null +++ b/build/node_modules/semver/ranges/to-comparators.js @@ -0,0 +1,8 @@ +const Range = require('../classes/range') + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators diff --git a/build/node_modules/semver/ranges/valid.js b/build/node_modules/semver/ranges/valid.js new file mode 100644 index 00000000..365f3568 --- /dev/null +++ b/build/node_modules/semver/ranges/valid.js @@ -0,0 +1,11 @@ +const Range = require('../classes/range') +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} +module.exports = validRange diff --git a/build/node_modules/serialize-javascript/LICENSE b/build/node_modules/serialize-javascript/LICENSE new file mode 100644 index 00000000..263382ae --- /dev/null +++ b/build/node_modules/serialize-javascript/LICENSE @@ -0,0 +1,27 @@ +Copyright 2014 Yahoo! Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Yahoo! Inc. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/node_modules/serialize-javascript/README.md b/build/node_modules/serialize-javascript/README.md new file mode 100644 index 00000000..8736fdb9 --- /dev/null +++ b/build/node_modules/serialize-javascript/README.md @@ -0,0 +1,142 @@ +Serialize JavaScript +==================== + +Serialize JavaScript to a _superset_ of JSON that includes regular expressions, dates and functions. + +[![npm Version][npm-badge]][npm] +[![Dependency Status][david-badge]][david] +![Test](https://github.com/yahoo/serialize-javascript/workflows/Test/badge.svg) + +## Overview + +The code in this package began its life as an internal module to [express-state][]. To expand its usefulness, it now lives as `serialize-javascript` — an independent package on npm. + +You're probably wondering: **What about `JSON.stringify()`!?** We've found that sometimes we need to serialize JavaScript **functions**, **regexps**, **dates**, **sets** or **maps**. A great example is a web app that uses client-side URL routing where the route definitions are regexps that need to be shared from the server to the client. But this module is also great for communicating between node processes. + +The string returned from this package's single export function is literal JavaScript which can be saved to a `.js` file, or be embedded into an HTML document by making the content of a `' +}); +``` + +The above will produce the following string, HTML-escaped output which is safe to put into an HTML document as it will not cause the inline script element to terminate: + +```js +'{"haxorXSS":"\\u003C\\u002Fscript\\u003E"}' +``` + +> You can pass an optional `unsafe` argument to `serialize()` for straight serialization. + +### Options + +The `serialize()` function accepts an `options` object as its second argument. All options are being defaulted to `undefined`: + +#### `options.space` + +This option is the same as the `space` argument that can be passed to [`JSON.stringify`][JSON.stringify]. It can be used to add whitespace and indentation to the serialized output to make it more readable. + +```js +serialize(obj, {space: 2}); +``` + +#### `options.isJSON` + +This option is a signal to `serialize()` that the object being serialized does not contain any function or regexps values. This enables a hot-path that allows serialization to be over 3x faster. If you're serializing a lot of data, and know its pure JSON, then you can enable this option for a speed-up. + +**Note:** That when using this option, the output will still be escaped to protect against XSS. + +```js +serialize(obj, {isJSON: true}); +``` + +#### `options.unsafe` + +This option is to signal `serialize()` that we want to do a straight conversion, without the XSS protection. This options needs to be explicitly set to `true`. HTML characters and JavaScript line terminators will not be escaped. You will have to roll your own. + +```js +serialize(obj, {unsafe: true}); +``` + +#### `options.ignoreFunction` + +This option is to signal `serialize()` that we do not want serialize JavaScript function. +Just treat function like `JSON.stringify` do, but other features will work as expected. + +```js +serialize(obj, {ignoreFunction: true}); +``` + +## Deserializing + +For some use cases you might also need to deserialize the string. This is explicitly not part of this module. However, you can easily write it yourself: + +```js +function deserialize(serializedJavascript){ + return eval('(' + serializedJavascript + ')'); +} +``` + +**Note:** Don't forget the parentheses around the serialized javascript, as the opening bracket `{` will be considered to be the start of a body. + +## License + +This software is free to use under the Yahoo! Inc. BSD license. +See the [LICENSE file][LICENSE] for license text and copyright information. + + +[npm]: https://www.npmjs.org/package/serialize-javascript +[npm-badge]: https://img.shields.io/npm/v/serialize-javascript.svg?style=flat-square +[david]: https://david-dm.org/yahoo/serialize-javascript +[david-badge]: https://img.shields.io/david/yahoo/serialize-javascript.svg?style=flat-square +[express-state]: https://github.com/yahoo/express-state +[JSON.stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify +[LICENSE]: https://github.com/yahoo/serialize-javascript/blob/main/LICENSE diff --git a/build/node_modules/serialize-javascript/index.js b/build/node_modules/serialize-javascript/index.js new file mode 100644 index 00000000..ab827422 --- /dev/null +++ b/build/node_modules/serialize-javascript/index.js @@ -0,0 +1,268 @@ +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +'use strict'; + +var randomBytes = require('randombytes'); + +// Generate an internal UID to make the regexp pattern harder to guess. +var UID_LENGTH = 16; +var UID = generateUID(); +var PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"', 'g'); + +var IS_NATIVE_CODE_REGEXP = /\{\s*\[native code\]\s*\}/g; +var IS_PURE_FUNCTION = /function.*?\(/; +var IS_ARROW_FUNCTION = /.*?=>.*?/; +var UNSAFE_CHARS_REGEXP = /[<>\/\u2028\u2029]/g; + +var RESERVED_SYMBOLS = ['*', 'async']; + +// Mapping of unsafe HTML and invalid JavaScript line terminator chars to their +// Unicode char counterparts which are safe to use in JavaScript strings. +var ESCAPED_CHARS = { + '<' : '\\u003C', + '>' : '\\u003E', + '/' : '\\u002F', + '\u2028': '\\u2028', + '\u2029': '\\u2029' +}; + +function escapeUnsafeChars(unsafeChar) { + return ESCAPED_CHARS[unsafeChar]; +} + +function generateUID() { + var bytes = randomBytes(UID_LENGTH); + var result = ''; + for(var i=0; i arg1+5 + if(IS_ARROW_FUNCTION.test(serializedFn)) { + return serializedFn; + } + + var argsStartsAt = serializedFn.indexOf('('); + var def = serializedFn.substr(0, argsStartsAt) + .trim() + .split(' ') + .filter(function(val) { return val.length > 0 }); + + var nonReservedSymbols = def.filter(function(val) { + return RESERVED_SYMBOLS.indexOf(val) === -1 + }); + + // enhanced literal objects, example: {key() {}} + if(nonReservedSymbols.length > 0) { + return (def.indexOf('async') > -1 ? 'async ' : '') + 'function' + + (def.join('').indexOf('*') > -1 ? '*' : '') + + serializedFn.substr(argsStartsAt); + } + + // arrow functions + return serializedFn; + } + + // Check if the parameter is function + if (options.ignoreFunction && typeof obj === "function") { + obj = undefined; + } + // Protects against `JSON.stringify()` returning `undefined`, by serializing + // to the literal string: "undefined". + if (obj === undefined) { + return String(obj); + } + + var str; + + // Creates a JSON string representation of the value. + // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args. + if (options.isJSON && !options.space) { + str = JSON.stringify(obj); + } else { + str = JSON.stringify(obj, options.isJSON ? null : replacer, options.space); + } + + // Protects against `JSON.stringify()` returning `undefined`, by serializing + // to the literal string: "undefined". + if (typeof str !== 'string') { + return String(str); + } + + // Replace unsafe HTML and invalid JavaScript line terminator chars with + // their safe Unicode char counterpart. This _must_ happen before the + // regexps and functions are serialized and added back to the string. + if (options.unsafe !== true) { + str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars); + } + + if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) { + return str; + } + + // Replaces all occurrences of function, regexp, date, map and set placeholders in the + // JSON string with their string representations. If the original value can + // not be found, then `undefined` is used. + return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) { + // The placeholder may not be preceded by a backslash. This is to prevent + // replacing things like `"a\"@__R--0__@"` and thus outputting + // invalid JS. + if (backSlash) { + return match; + } + + if (type === 'D') { + return "new Date(\"" + dates[valueIndex].toISOString() + "\")"; + } + + if (type === 'R') { + return "new RegExp(" + serialize(regexps[valueIndex].source) + ", \"" + regexps[valueIndex].flags + "\")"; + } + + if (type === 'M') { + return "new Map(" + serialize(Array.from(maps[valueIndex].entries()), options) + ")"; + } + + if (type === 'S') { + return "new Set(" + serialize(Array.from(sets[valueIndex].values()), options) + ")"; + } + + if (type === 'A') { + return "Array.prototype.slice.call(" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + ")"; + } + + if (type === 'U') { + return 'undefined' + } + + if (type === 'I') { + return infinities[valueIndex]; + } + + if (type === 'B') { + return "BigInt(\"" + bigInts[valueIndex] + "\")"; + } + + if (type === 'L') { + return "new URL(\"" + urls[valueIndex].toString() + "\")"; + } + + var fn = functions[valueIndex]; + + return serializeFunc(fn); + }); +} diff --git a/build/node_modules/serialize-javascript/package.json b/build/node_modules/serialize-javascript/package.json new file mode 100644 index 00000000..ced1de82 --- /dev/null +++ b/build/node_modules/serialize-javascript/package.json @@ -0,0 +1,64 @@ +{ + "_from": "serialize-javascript@6.0.0", + "_id": "serialize-javascript@6.0.0", + "_inBundle": false, + "_integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "_location": "/serialize-javascript", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "serialize-javascript@6.0.0", + "name": "serialize-javascript", + "escapedName": "serialize-javascript", + "rawSpec": "6.0.0", + "saveSpec": null, + "fetchSpec": "6.0.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "_shasum": "efae5d88f45d7924141da8b5c3a7a7e663fefeb8", + "_spec": "serialize-javascript@6.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Eric Ferraiuolo", + "email": "edf@ericf.me" + }, + "bugs": { + "url": "https://github.com/yahoo/serialize-javascript/issues" + }, + "bundleDependencies": false, + "dependencies": { + "randombytes": "^2.1.0" + }, + "deprecated": false, + "description": "Serialize JavaScript to a superset of JSON that includes regular expressions and functions.", + "devDependencies": { + "benchmark": "^2.1.4", + "chai": "^4.1.0", + "mocha": "^9.0.0", + "nyc": "^15.0.0" + }, + "homepage": "https://github.com/yahoo/serialize-javascript", + "keywords": [ + "serialize", + "serialization", + "javascript", + "js", + "json" + ], + "license": "BSD-3-Clause", + "main": "index.js", + "name": "serialize-javascript", + "repository": { + "type": "git", + "url": "git+https://github.com/yahoo/serialize-javascript.git" + }, + "scripts": { + "benchmark": "node -v && node test/benchmark/serialize.js", + "test": "nyc --reporter=lcov mocha test/unit" + }, + "version": "6.0.0" +} diff --git a/build/node_modules/sha.js/package.json b/build/node_modules/sha.js/package.json index 40f2a407..2d7fed2d 100644 --- a/build/node_modules/sha.js/package.json +++ b/build/node_modules/sha.js/package.json @@ -20,7 +20,7 @@ "/create-hmac", "/pbkdf2" ], - "_resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sha.js/-/sha.js-2.4.11.tgz", "_shasum": "37a5cf0b81ecbc6943de109ba2960d1b26584ae7", "_spec": "sha.js@^2.4.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/create-hash", diff --git a/build/node_modules/side-channel/package.json b/build/node_modules/side-channel/package.json index 85f21855..09394dbe 100644 --- a/build/node_modules/side-channel/package.json +++ b/build/node_modules/side-channel/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/qs" ], - "_resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/side-channel/-/side-channel-1.0.4.tgz", "_shasum": "efce5c8fdc104ee751b25c58d4290011fa5ea2cf", "_spec": "side-channel@^1.0.4", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/qs", diff --git a/build/node_modules/sigmund/README.md b/build/node_modules/sigmund/README.md deleted file mode 100644 index 25a38a53..00000000 --- a/build/node_modules/sigmund/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# sigmund - -Quick and dirty signatures for Objects. - -This is like a much faster `deepEquals` comparison, which returns a -string key suitable for caches and the like. - -## Usage - -```javascript -function doSomething (someObj) { - var key = sigmund(someObj, maxDepth) // max depth defaults to 10 - var cached = cache.get(key) - if (cached) return cached - - var result = expensiveCalculation(someObj) - cache.set(key, result) - return result -} -``` - -The resulting key will be as unique and reproducible as calling -`JSON.stringify` or `util.inspect` on the object, but is much faster. -In order to achieve this speed, some differences are glossed over. -For example, the object `{0:'foo'}` will be treated identically to the -array `['foo']`. - -Also, just as there is no way to summon the soul from the scribblings -of a cocaine-addled psychoanalyst, there is no way to revive the object -from the signature string that sigmund gives you. In fact, it's -barely even readable. - -As with `util.inspect` and `JSON.stringify`, larger objects will -produce larger signature strings. - -Because sigmund is a bit less strict than the more thorough -alternatives, the strings will be shorter, and also there is a -slightly higher chance for collisions. For example, these objects -have the same signature: - - var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} - var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -Like a good Freudian, sigmund is most effective when you already have -some understanding of what you're looking for. It can help you help -yourself, but you must be willing to do some work as well. - -Cycles are handled, and cyclical objects are silently omitted (though -the key is included in the signature output.) - -The second argument is the maximum depth, which defaults to 10, -because that is the maximum object traversal depth covered by most -insurance carriers. diff --git a/build/node_modules/sigmund/bench.js b/build/node_modules/sigmund/bench.js deleted file mode 100644 index 5acfd6d9..00000000 --- a/build/node_modules/sigmund/bench.js +++ /dev/null @@ -1,283 +0,0 @@ -// different ways to id objects -// use a req/res pair, since it's crazy deep and cyclical - -// sparseFE10 and sigmund are usually pretty close, which is to be expected, -// since they are essentially the same algorithm, except that sigmund handles -// regular expression objects properly. - - -var http = require('http') -var util = require('util') -var sigmund = require('./sigmund.js') -var sreq, sres, creq, cres, test - -http.createServer(function (q, s) { - sreq = q - sres = s - sres.end('ok') - this.close(function () { setTimeout(function () { - start() - }, 200) }) -}).listen(1337, function () { - creq = http.get({ port: 1337 }) - creq.on('response', function (s) { cres = s }) -}) - -function start () { - test = [sreq, sres, creq, cres] - // test = sreq - // sreq.sres = sres - // sreq.creq = creq - // sreq.cres = cres - - for (var i in exports.compare) { - console.log(i) - var hash = exports.compare[i]() - console.log(hash) - console.log(hash.length) - console.log('') - } - - require('bench').runMain() -} - -function customWs (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return ('' + obj).replace(/[\n ]+/g, '') - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return customWs(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + customWs(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function custom (obj, md, d) { - d = d || 0 - var to = typeof obj - if (to === 'undefined' || to === 'function' || to === null) return '' - if (d > md || !obj || to !== 'object') return '' + obj - - if (Array.isArray(obj)) { - return obj.map(function (i, _, __) { - return custom(i, md, d + 1) - }).reduce(function (a, b) { return a + b }, '') - } - - var keys = Object.keys(obj) - return keys.map(function (k, _, __) { - return k + ':' + custom(obj[k], md, d + 1) - }).reduce(function (a, b) { return a + b }, '') -} - -function sparseFE2 (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k + ':' - ch(v[k], depth + 1) - }) - soFar += '}' - } - ch(obj, 0) - return soFar -} - -function sparseFE (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - Object.keys(v).forEach(function (k, _, __) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') return - var to = typeof v[k] - if (to === 'function' || to === 'undefined') return - soFar += k - ch(v[k], depth + 1) - }) - } - ch(obj, 0) - return soFar -} - -function sparse (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k - ch(v[k], depth + 1) - } - } - ch(obj, 0) - return soFar -} - -function noCommas (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - - -function flatten (obj, maxDepth) { - var seen = [] - var soFar = '' - function ch (v, depth) { - if (depth > maxDepth) return - if (typeof v === 'function' || typeof v === 'undefined') return - if (typeof v !== 'object' || !v) { - soFar += v - return - } - if (seen.indexOf(v) !== -1 || depth === maxDepth) return - seen.push(v) - soFar += '{' - for (var k in v) { - // pseudo-private values. skip those. - if (k.charAt(0) === '_') continue - var to = typeof v[k] - if (to === 'function' || to === 'undefined') continue - soFar += k + ':' - ch(v[k], depth + 1) - soFar += ',' - } - soFar += '}' - } - ch(obj, 0) - return soFar -} - -exports.compare = -{ - // 'custom 2': function () { - // return custom(test, 2, 0) - // }, - // 'customWs 2': function () { - // return customWs(test, 2, 0) - // }, - 'JSON.stringify (guarded)': function () { - var seen = [] - return JSON.stringify(test, function (k, v) { - if (typeof v !== 'object' || !v) return v - if (seen.indexOf(v) !== -1) return undefined - seen.push(v) - return v - }) - }, - - 'flatten 10': function () { - return flatten(test, 10) - }, - - // 'flattenFE 10': function () { - // return flattenFE(test, 10) - // }, - - 'noCommas 10': function () { - return noCommas(test, 10) - }, - - 'sparse 10': function () { - return sparse(test, 10) - }, - - 'sparseFE 10': function () { - return sparseFE(test, 10) - }, - - 'sparseFE2 10': function () { - return sparseFE2(test, 10) - }, - - sigmund: function() { - return sigmund(test, 10) - }, - - - // 'util.inspect 1': function () { - // return util.inspect(test, false, 1, false) - // }, - // 'util.inspect undefined': function () { - // util.inspect(test) - // }, - // 'util.inspect 2': function () { - // util.inspect(test, false, 2, false) - // }, - // 'util.inspect 3': function () { - // util.inspect(test, false, 3, false) - // }, - // 'util.inspect 4': function () { - // util.inspect(test, false, 4, false) - // }, - // 'util.inspect Infinity': function () { - // util.inspect(test, false, Infinity, false) - // } -} - -/** results -**/ diff --git a/build/node_modules/sigmund/package.json b/build/node_modules/sigmund/package.json deleted file mode 100644 index ba0f0aab..00000000 --- a/build/node_modules/sigmund/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "sigmund@~1.0.0", - "_id": "sigmund@1.0.1", - "_inBundle": false, - "_integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "_location": "/sigmund", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "sigmund@~1.0.0", - "name": "sigmund", - "escapedName": "sigmund", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/minimatch" - ], - "_resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "_shasum": "3ff21f198cad2175f9f3b781853fd94d0d19b590", - "_spec": "sigmund@~1.0.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/minimatch", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/sigmund/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Quick and dirty signatures for Objects.", - "devDependencies": { - "tap": "~0.3.0" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/isaacs/sigmund#readme", - "keywords": [ - "object", - "signature", - "key", - "data", - "psychoanalysis" - ], - "license": "ISC", - "main": "sigmund.js", - "name": "sigmund", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/sigmund.git" - }, - "scripts": { - "bench": "node bench.js", - "test": "tap test/*.js" - }, - "version": "1.0.1" -} diff --git a/build/node_modules/sigmund/sigmund.js b/build/node_modules/sigmund/sigmund.js deleted file mode 100644 index 82c7ab8c..00000000 --- a/build/node_modules/sigmund/sigmund.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = sigmund -function sigmund (subject, maxSessions) { - maxSessions = maxSessions || 10; - var notes = []; - var analysis = ''; - var RE = RegExp; - - function psychoAnalyze (subject, session) { - if (session > maxSessions) return; - - if (typeof subject === 'function' || - typeof subject === 'undefined') { - return; - } - - if (typeof subject !== 'object' || !subject || - (subject instanceof RE)) { - analysis += subject; - return; - } - - if (notes.indexOf(subject) !== -1 || session === maxSessions) return; - - notes.push(subject); - analysis += '{'; - Object.keys(subject).forEach(function (issue, _, __) { - // pseudo-private values. skip those. - if (issue.charAt(0) === '_') return; - var to = typeof subject[issue]; - if (to === 'function' || to === 'undefined') return; - analysis += issue; - psychoAnalyze(subject[issue], session + 1); - }); - } - psychoAnalyze(subject, 0); - return analysis; -} - -// vim: set softtabstop=4 shiftwidth=4: diff --git a/build/node_modules/sigmund/test/basic.js b/build/node_modules/sigmund/test/basic.js deleted file mode 100644 index 50c53a13..00000000 --- a/build/node_modules/sigmund/test/basic.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require('tap').test -var sigmund = require('../sigmund.js') - - -// occasionally there are duplicates -// that's an acceptable edge-case. JSON.stringify and util.inspect -// have some collision potential as well, though less, and collision -// detection is expensive. -var hash = '{abc/def/g{0h1i2{jkl' -var obj1 = {a:'b',c:/def/,g:['h','i',{j:'',k:'l'}]} -var obj2 = {a:'b',c:'/def/',g:['h','i','{jkl']} - -var obj3 = JSON.parse(JSON.stringify(obj1)) -obj3.c = /def/ -obj3.g[2].cycle = obj3 -var cycleHash = '{abc/def/g{0h1i2{jklcycle' - -test('basic', function (t) { - t.equal(sigmund(obj1), hash) - t.equal(sigmund(obj2), hash) - t.equal(sigmund(obj3), cycleHash) - t.end() -}) - diff --git a/build/node_modules/simple-swizzle/package.json b/build/node_modules/simple-swizzle/package.json index 2e004c27..a438ada4 100644 --- a/build/node_modules/simple-swizzle/package.json +++ b/build/node_modules/simple-swizzle/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/color-string" ], - "_resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "_shasum": "a4da6b635ffcccca33f70d17cb92592de95e557a", "_spec": "simple-swizzle@^0.2.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/color-string", diff --git a/build/node_modules/sinon/AUTHORS b/build/node_modules/sinon/AUTHORS deleted file mode 100644 index 42cf226f..00000000 --- a/build/node_modules/sinon/AUTHORS +++ /dev/null @@ -1,167 +0,0 @@ -Christian Johansen -Morgan Roderick -Maximilian Antoni -ben hockey -Tim Fischbach -Max Antoni -Tim Ruffles -Jonathan Sokolowski -Domenic Denicola -Phred -Tim Perry -Andreas Lind -William Sears -Tim Ruffles -kpdecker -Felix Geisendörfer -Carl-Erik Kopseng -pimterry -Bryan Donovan -Andrew Gurinovich -Martin Sander -Luis Cardoso -Keith Cirkel -Tristan Koch -Tobias Ebnöther -Cory -zcicala -Marten Lienen -Travis Kaufman -Benjamin Coe -ben fleis -Garrick Cheung -Gavin Huang -Jonny Reeves -Konrad Holowinski -Christian Johansen -Soutaro Matsumoto -August Lilleaas -Scott Andrews -Robin Pedersen -Garrick -geries -Cormac Flynn -Ming Liu -Thomas Meyer -Roman Potashow -Tamas Szebeni -Glen Mailer -Duncan Beevers -Jmeas -なつき -Alex Urbano -Alexander Schmidt -Ben Hockey -Brandon Heyer -Christian Johansen -Devin Weaver -Farid Neshat -G.Serebryanskyi -Henry Tung -Irina Dumitrascu -James Barwell -Jason Karns -Jeffrey Falgout -Jeffrey Falgout -Jonathan Freeman -Josh Graham -Marcus Hüsgen -Martin Hansen -Matt Kern -Max Calabrese -Márton Salomváry -Patrick van Vuuren -Satoshi Nakamura -Simen Bekkhus -Spencer Elliott -Travis Kaufman -Victor Costan -gtothesquare -mohayonao -vitalets -yoshimura-toshihide -Ian Thomas -hashchange -Mario Pareja -Ian Lewis -Martin Brochhaus -jamestalmage -Harry Wolff -kbackowski -Gyandeep Singh -Adrian Phinney -Max Klymyshyn -Gordon L. Hempton -Michael Jackson -Mikolaj Banasik -Gord Tanner -Glen Mailer -Mustafa Sak -AJ Ortega -Nicholas Stephan -Nikita Litvin -Niklas Andreasson -Olmo Maldonado -ngryman -Giorgos Giannoutsos -Rajeesh C V -Raynos -Gilad Peleg -Rodion Vynnychenko -Gavin Boulton -Ryan Wholey -Adam Hull -Felix Geisendörfer -Sergio Cinos -Shawn Krisman -Shawn Krisman -Shinnosuke Watanabe -simonzack -Simone Fonda -Eric Wendelin -stevesouth -Sven Fuchs -Søren Enemærke -TEHEK Firefox -Dmitriy Kubyshkin -Tek Nynja -Daryl Lau -Tim Branyen -Christian Johansen -Burak Yiğit Kaya -Brian M Hunt -Blake Israel -Timo Tijhof -Blake Embrey -Blaine Bublitz -till -Antonio D'Ettole -Tristan Koch -AJ Ortega -Volkan Ozcelik -Will Butler -William Meleyal -Ali Shakiba -Xiao Ma -Alfonso Boza -Alexander Aivars -brandonheyer -charlierudolph -Alex Kessaris -John Bernardo -goligo -Jason Anderson -Jan Suchý -Jordan Hawker -Joscha Feth -Joseph Spens -wwalser -Jan Kopriva -Kevin Turner -Kim Joar Bekkelund -James Beavers -Kris Kowal -Kurt Ruppel -Lars Thorup -Luchs -Marco Ramirez diff --git a/build/node_modules/sinon/CONTRIBUTING.md b/build/node_modules/sinon/CONTRIBUTING.md index 43b68bd3..859bcb4f 100644 --- a/build/node_modules/sinon/CONTRIBUTING.md +++ b/build/node_modules/sinon/CONTRIBUTING.md @@ -2,11 +2,17 @@ There are several ways of contributing to Sinon.JS -* Help [improve the documentation](https://github.com/sinonjs/sinon-docs) published at [the Sinon.JS website](http://sinonjs.org) -* Help someone understand and use Sinon.JS on the [the mailing list](http://groups.google.com/group/sinonjs) -* Report an issue, please read instructions below -* Help with triaging the [issues](http://github.com/cjohansen/Sinon.JS/issues). The clearer they are, the more likely they are to be fixed soon. -* Contribute to the code base. +- Look into [issues tagged `help-wanted`](https://github.com/sinonjs/sinon/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+wanted%22) +- Help [improve the documentation](https://github.com/sinonjs/sinon/tree/master/docs) published + at [the Sinon.JS website](https://sinonjs.org). [Documentation issues](https://github.com/sinonjs/sinon/issues?q=is%3Aopen+is%3Aissue+label%3ADocumentation). +- Help someone understand and use Sinon.JS on [Stack Overflow](https://stackoverflow.com/questions/tagged/sinon) +- Report an issue, please read instructions below +- Help with triaging the [issues](https://github.com/sinonjs/sinon/issues). The clearer they are, the more likely they are to be fixed soon. +- Contribute to the code base. + +## Contributor Code of Conduct + +Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. ## Reporting an issue @@ -14,44 +20,23 @@ To save everyone time and make it much more likely for your issue to be understo As a minimum, please report the following: -* Which environment are you using? Browser? Node? Which version(s)? -* Which version of SinonJS? -* How are you loading SinonJS? -* What other libraries are you using? -* What you expected to happen -* What actually happens -* Describe **with code** how to reproduce the faulty behaviour - -### Bug report template - -Here's a template for a bug report - -> Sinon version : -> Environment : -> Example URL : -> -> ##### Bug description - -Here's an example use of the template - -> Sinon version : 1.10.3 -> Environment : OSX Chrome 37.0.2062.94 -> Example URL : http://jsbin.com/iyebiWI/8/edit -> -> ##### Bug description -> -> If `respondWith` called with a URL including query parameter and a function , it doesn't work. -> This error reported in console. -> ``` -> `TypeError: requestUrl.match(...) is null` -> ``` +- Which environment are you using? Browser? Node? Which version(s)? +- Which version of SinonJS? +- How are you loading SinonJS? +- What other libraries are you using? +- What you expected to happen +- What actually happens +- Describe **with code** how to reproduce the faulty behaviour + +See [our issue template](https://github.com/sinonjs/sinon/blob/master/.github/) for all details. ## Contributing to the code base -Pick [an issue](http://github.com/cjohansen/Sinon.JS/issues) to fix, or pitch +Pick [an issue](https://github.com/sinonjs/sinon/issues) to fix, or pitch new features. To avoid wasting your time, please ask for feedback on feature -suggestions either with [an issue](http://github.com/cjohansen/Sinon.JS/issues/new) -or on [the mailing list](http://groups.google.com/group/sinonjs). +suggestions with [an issue](https://github.com/sinonjs/sinon/issues/new). + +Make sure you have read [GitHub's guide on forking](https://guides.github.com/activities/forking/). It explains the general contribution process and key concepts. ### Making a pull request @@ -59,9 +44,9 @@ Please try to [write great commit messages](http://chris.beams.io/posts/git-comm There are numerous benefits to great commit messages -* They allow Sinon.JS users to easily understand the consequences of updating to a newer version -* They help contributors understand what is going on with the codebase, allowing features and fixes to be developed faster -* They save maintainers time when compiling the changelog for a new release +- They allow Sinon.JS users to understand the consequences of updating to a newer version +- They help contributors understand what is going on with the codebase, allowing features and fixes to be developed faster +- They save maintainers time when compiling the changelog for a new release If you're already a few commits in by the time you read this, you can still [change your commit messages](https://help.github.com/articles/changing-a-commit-message/). @@ -81,70 +66,71 @@ Node installed, and install Sinon's dependencies: This will also install a pre-commit hook, that runs style validation on staged files. -#### PhantomJS +### Compatibility + +For details on compatibility and browser support, please see [`COMPATIBILITY.md`](COMPATIBILITY.md) -In order to run the tests, you'll need a [PhantomJS](http://phantomjs.org) global. +### Linting and style -The test suite runs well with both `1.9.x` and `2.0.0` +Sinon.JS uses [ESLint](http://eslint.org) to keep the codebase free of lint, and uses [Prettier](https://prettier.io) to keep consistent style. -### Style +If you are contributing to a Sinon project, you'll probably want to configure your editors ([ESLint](https://eslint.org/docs/user-guide/integrations#editors), [Prettier](https://prettier.io/docs/en/editors.html)) to make editing code a more enjoyable experience. -Sinon.JS uses [ESLint](http://eslint.org) to keep consistent style. You probably want to install a plugin for your editor. +Both Prettier and ESLint will check the code in pre-commit hooks (when installed) and will be run before unit tests in the CI environment. The build will fail if the source code does not pass the checks. -The ESLint test will be run before unit tests in the CI environment, your build will fail if it doesn't pass the style check. +You can run the linter locally: ``` $ npm run lint ``` -To ensure consistent reporting of lint warnings, you should use the same version as CI environment (defined in `package.json`) +You can fix a lot of lint violations automatically: -### Run the tests - -This runs linting as well as unit tests in both PhantomJS and node +``` +$ npm run lint -- --fix +``` - $ npm test +You can run prettier locally: -##### Testing in development +``` +$ npm run prettier:check +``` -Sinon.JS uses [Buster.JS](http://busterjs.org), please read those docs if you're unfamiliar with it. +You can fix style violations automatically: -If you just want to run tests a few times +``` +$ npm run prettier:write +``` - $ npm run ci-test +To ensure consistent reporting of lint warnings, you should use the same versions of ESLint and Prettier as defined in `package.json` (which is what the CI servers use). -If you're doing more than a one line edit, you'll want to have finer control and less restarting of the Buster server and PhantomJS process +### Run the tests - # start a server - $ $(npm bin)/buster-server +Following command runs unit tests in PhantomJS, Node and WebWorker - # capture a browser by pointing it to http://localhost:1111/capture - # run tests (in both browser and node) - $ $(npm bin)/buster-test + $ npm test - # run tests only in browser - $ $(npm bin)/buster-test --config-group browser +##### Testing in development - # run tests only in node - $ $(npm bin)/buster-test --config-group node +Sinon.JS uses [Mocha](https://mochajs.org/), please read those docs if you're unfamiliar with it. -If you install `Buster.JS` as a global, you can remove `$(npm-bin)/` from the lines above. +If you're doing more than a one line edit, you'll want to have finer control and less restarting of the Mocha -##### Testing a built version +To start tests in dev mode run -To test against a built distribution, first -make sure you have a build (requires [Ruby][ruby] and [Juicer][juicer]): + $ npm run test-dev - $ ./build +Dev mode features: -[ruby]: https://www.ruby-lang.org/en/ -[juicer]: http://rubygems.org/gems/juicer +- [watching related files](https://mochajs.org/#w---watch) to restart tests once changes are made +- using [Min reporter](https://mochajs.org/#min), which cleans the console each time tests run, so test results are always on top -If the build script is unable to find Juicer, try +Note that in dev mode tests run only in Node. Before creating your PR please ensure tests are passing in Phantom and WebWorker as well. To check this please use [Run the tests](#run-the-tests) instructions. - $ ruby -rubygems build +### Compiling a built version -Once built, you can run the tests against the packaged version as part of the `ci-test.sh` script. +Build requires Node. Under the hood [Browserify](http://browserify.org/) is used. - ./scripts/ci-test.sh +To build run + $ node build.js diff --git a/build/node_modules/sinon/Changelog.txt b/build/node_modules/sinon/Changelog.txt deleted file mode 100644 index 787135bf..00000000 --- a/build/node_modules/sinon/Changelog.txt +++ /dev/null @@ -1,544 +0,0 @@ - -1.17.3 / 2016-01-27 -================== - - * Fix toString() calls - * Ensure sinon can run in a WebWorker - * Changed the priority of which global is chosen first. - * Fixed #785 by checking the global variables are set - -1.17.2 / 2015-10-21 -================== - - * Fix #867: Walk properties only once - -1.17.1 / 2015-09-26 -================== - - * Fix #851: Do not attempt to re-stub constructors - * Fix #847: Ensure walk invokes accessors directly on target - * Run tests in node 4.1.x also - -1.17.0 / 2015-09-22 -================== - - * Fix #821 where Sinon.JS would leak a setImmdiate into global scope - * Removed sinon-timers from the build. refs #811 - * Added flag that, when set to true, makes sinon.logError throw errors synchronously. - * Fix #777: Support non-enumerable props when stubbing objects - * Made the sinon.test() function pass on errors to the callback - * Expand conversion from ArrayBuffer to binary string - * Add support for ArrayBuffer, blob responseTypes - -1.16.1 / 2015-08-20 -=================== -* Bump Lolex to stop throwing an error when faking Date but not setTimeout - -1.16.0 / 2015-08-19 -=================== -* Capture the stack on each spy call -* fakeServer.create accepts configuration settings -* Update Lolex to 1.3.0 -* Fire onreadystatechange with event argument -* Returns supersedes previous throws -* Bunch of bug fixes - -1.15.0 / 2015-05-30 -================== -* Fixed bug where assertions don't handle functions that have a property named proxy -* update license attribute -* Add test coverage report -* responseHeaders on abort are empty object -* Fix pre-existing style error -* Update documentation to cover testing built version -* Update CONTRIBUTING.md with section about "Making a pull request" -* Improve RELEASE.md to reduce effort when cutting a new release -* Deprecate mock -* Release.md -* Make `npm docs sinon` work. -* Run unit tests against packaged version in CI environment -* Remove unused Gruntfile -* Use Vanilla Buster.JS -* Use `files` in package.json -* Fix code style -* Don't stub getter properties -* Event listeners for `progress`, `load` and `readystatechange` in the `readyStateChange` function in `FakeXMLHttpRequest` are dispatched in a different order in comparison to a browser. Reorder the events dispatched to reflect general browser behaviour. -* Update linting instructions in CONTRIBUTING.md -* Lint all files with new linter -* Update JSCS to 1.11.3 and make npm lint task verify all files -* Cleanup .restore() - -== 1.14.1 / 2015-03-16 -* Fallback for .restore() native code functions on Chrome & PhantomJS (なつき) -* Restore support for sinon in IE<9 (Harry Wolff) - -== 1.14.0 / 2015-03-13 -* Stub & spy getters & setters (Simon Zack) -* Fix #702 async sinon.test using mocha interface (Mohayonao) -* Add respondImmediately to fake servers (Jonathan Freeman) - -== 1.13.0 / 2015-03-04 -* fix @depends-require mismatches (fixes AMD issues) (Ben Hockey) -* Fix spy.calledWith(undefined) to return false if it was called without args -* yieldsRight (Alexander Schmidt) -* stubs retain function arity (Charlie Rudolph) -* (AMD) use explicit define in built version -* spy().reset() returns this (Ali Shakiba) -* Add lengthComputable and download progress (Tamas Szebeni) -* Don't setContent-type when sending FormData (AJ Ortega) -* sinon.assert with spyCall (Alex Urbano) -* fakeXHR requests in Node. (Jmeas) -* Enhancement: run builds on docker (till@php.net) -* Use FakeXDomainRequest when XHR does not support CORS. Fixes #584 (Eric Wendelin) -* More lenient check for ActiveXObject -* aligned sandbox.useFakeXMLHttpRequest API to documentation (Phred) -* Fix #643. Returns supersedes previous throws (Adam Hull) -* Safely overwrite properties in IE - no more IE files! -* Add check for setInterval/clearInterval (kdpecker) -* Add safety check for document.createElement (kdpecker) -* Fix #633. Use a try/catch when deleting a property in IE8. (Garrick Cheung) - -== 1.12.1 / 2014-11-16 -* Fixed lolex issue on node - -== 1.12.0 / 2014-11-16 -* Fake timers are now extracted as lolex: http://github.com/sinonjs/lolex -* Improved setImmediate fake -* Proper AMD solution - -== 1.11.1 / 2014-10-27 - -* Expose match on returned sandbox (Duncan Beevers) -* Fix issue #586 (Antonio D'Ettole) -* Declare log_error dependency (Kurt Ruppel) - -== 1.11.0 / 2014-10-26 - -* Proper AMD support -* Don't call sinon.expectation.pass if there aren't any expectations (Jeffrey Falgout) -* Throw error when reset-ing while calling fake -* Added xhr.response property (Gyandeep Singh) -* Fixed premature sandbox destruction (Andrew Gurinovich) -* Add sandbox reset method (vitalets) -* A bunch of bug fixes (git log) -* Various source organizational improvements (Morgan Roderick and others) - -== 1.10.3 / 2014-07-11 - -* Fix loading in Web Workers (Victor Costan) -* Allow null as argument to clearTimeout and clearInterval (Lars Thorup) - -== 1.10.2 / 2014-06-02 - -* Fix `returnValue` and `exception` regression on spy calls (Maximilian Antoni) - -== 1.10.1 / 2014-05-30 - -* Improved mocha compatibility for async tests (Ming Liu) -* Make the fakeServer log function overloadable (Brian M Hunt) - -== 1.10.0 / 2014-05-19 - -* Ensure that spy createCallProperties is set before function invocation (James Barwell) -* XDomainRequest support (Søren Enemærke, Jonathan Sokolowski) -* Correct AMD behavior (Tim Branyen) -* Allow explicit naming of spies and stubs (Glen Mailer) -* deepEqual test for unequal objects in calledWithExactly (Bryan Donovan) -* Fix clearTimeout() for Node.js (Xiao Ma) -* fix fakeServer.respond() in IE8 (John Bernardo) -* Fix #448 (AMD require.amd) -* Fix wrapMethod error handling (Nikita Litvin) - -== 1.9.1 / 2014-04-03 - -* Fix an issue passing `NaN` to `calledWith` (Blake Israel) -* Explicate dependency on util package (Kris Kowal) -* Fake timers return an object with `ref` and `unref` properties on Node (Ben Fleis) - -== 1.9.0 / 2014-03-05 - -* Add sinon.assert.match (Robin Pedersen) -* Added ProgressEvent and CustomEvent. Fixes bug with progress events on IE. (Geries Handal) -* prevent setRequestHeaders from being called twice (Phred) -* Fix onload call, 'this' should be equal to XHR object (Niklas Andreasson) -* Remove sandbox injected values on restore (Marcus Hüsgen) -* Coerce matcher.or/and arguments into matchers (Glen Mailer) -* Don't use buster.format any more -* Fix comparison for regexp deepEqual (Matt Kern) - -== 1.8.2 / 2014-02-11 - -* Fixes an edge case with calledWithNew and spied native functions, and other - functions that lack a .prototype -* Add feature detection for the new ProgressEvent support - -== 1.8.1 / 2014-02-02 - -* Screwed up NPM release of 1.8.0, unable to replace it - -== 1.8.0 / 2014-02-02 - -* Add clearImmediate mocking support to the timers API (Tim Perry) -* Mirror custom Date properties when faking time -* Improved Weinre support -* Update call properties even if exceptions are thrown (Tim Perry) -* Update call properties even if exceptions are thrown (Tim Perry) -* Reverse matching order for fake server (Gordon L. Hempton) -* Fix restoring globals on another frame fails on Firefox (Burak Yiğit Kaya) -* Handle stubbing falsey properties (Tim Perry) -* Set returnValues correctly when the spied function is called as a constructor (Tim Perry) -* When creating a sandbox, do not overwrite existing properties when inject - properties into an object (Sergio Cinos) -* Added withCredentials property to fake xhr (Geries) -* Refine behavior withArgs error message (Tim Fischbach) -* Auto-respond to successive requests made with a single XHR object (Jan Suchý) -* Add the ability for mock to accept sinon.match matchers as expected arguments (Zcicala) -* Adding support for XMLHttpRequest.upload to FakeXMLHttpRequest (Benjamin Coe) -* Allow onCall to be combined with returns* and throwsException in stub behavior - sequences (Tim Fischbach) -* Fixed deepEqual to detect properties on array objects -* Fixed problem with chained timers with delay=0 (Ian Lewis) -* Use formatio in place of buster-format (Devin Weaver) - -== 1.7.3 / 2013-06-20 - -* Removed use of array forEach, breaks in older browsers (Martin Hansen) -* sinon.deepEqual(new Date(0), new Date()) returns true (G.Serebryanskyi) - -== 1.7.2 / 2013-05-08 - -* Sinon 1.7 has split calls out to a separate file. This caused some problems, - so 1.7.2 ships with spyCall as part of spy.js like it used to be. - -== 1.7.1 / 2013-05-07 - -* Fake XMLHttpRequest updated to call onerror and onsuccess callbacks, fixing - jQuery 2.0 problems (Roman Potashow) -* Implement XMLHttpRequest progress event api (Marten Lienen) -* Added sinon.restore() (Jonny Reeves) -* Fix bug where throwing a string was handled incorrectly by Sinon (Brandon Heyer) -* Web workers support (Victor Costan) - -== 1.7.0 - -* Failed release, see 1.7.1 - -== 1.6.0 / 2013-02-18 -* Add methods to spyCall interface: callArgOn, callArgOnWith, yieldOn, - yieldToOn (William Sears) -* sinon.createStubInstance creates a fully stubbed instance from a constructor - (Shawn Krisman) -* resetBehavior resets fakes created by withArgs (Martin Sander) -* The fake server now logs to sinon.log, if set (Luis Cardoso) -* Cleaner npm package that also includes pkg/sinon.js and - pkg/sinon-ie.js for cases where npm is used to install Sinon for - browser usage (Domenic Denicola) -* Improved spy formatter %C output (Farid Neshat) -* clock.tick returns clock.now (Michael Jackson) -* Fixed issue #248 with callOrder assertion - Did not fail if the last given spy was never called (Maximilian Antoni) -* Fixed issue with setResponseHeader for synchronous requests (goligo) -* Remove msSetImmediate; it only existed in IE10 previews (Domenic Denicola) -* Fix #231: not always picking up the latest calls to callsArgWith, etc. - (Domenic Denicola) -* Fix failing anonymous mock expectations - -== 1.5.2 / 2012-11-28 -* Revert stub.reset changes that caused existing tests to fail. - -== 1.5.1 / 2012-11-27 -* Ensure window.Image can be stubbed. (Adrian Phinney) -* Fix spy() in IE 8 (Scott Andrews) -* Fix sinon base in IE 8 (Scott Andrews) -* Format arguments ouput when mock excpetation is not met (kbackowski) -* Calling spy.reset directly from stub.reset (Thomas Meyer) - -== 1.5.0 / 2012-10-19 -* Don't force "use strict" on Sinon consumers -* Don't assume objects have hasOwnProperties. Fixes problem with e.g. - stubbing properties on process.env -* Preserve function length for spy (Maximilian Antoni) -* Add 'invokeCallback' alias for 'yield' on calls (Maximilian Antoni) -* Added matcher support for calledOn (Maximilian Antoni) -* Retain original expectation messages, for failed mocks under sinon.test - (Giorgos Giannoutsos) -* Allow yields* and callsArg* to create sequences of calls. (Domenic Denicola) -* sinon.js can catch itself in endless loop while filling stub prototype - with asynch methods (Jan Kopriva) - -== 1.4.2 / 2012-07-11 -* sinon.match for arrays (Maximilian Antoni) - -== 1.4.1 / 2012-07-11 -* Strengthen a Node.JS inference to avoid quirky behavior with Mocha - (which provides a shim process object) - -== 1.4.0 / 2012-07-09 -* Argument matchers (Maximillian Antoni) - sinon.match.{any, same, typeOf, instanceOf, has, hasOwn, defined, truthy, - falsy} as well as typeOf shortcuts for boolean, number, string, object, - function, array, regexp and date. The result of a call can be used with - spy.calledWith. -* spy.returned now works with matchers and compares objects deeply. -* Matcher assertions: calledWithMatch, alwaysCalledWithMatch and - neverCalledWithMatch -* calledWithNew and alwaysCalledWithNew for assert (Maximilian Antoni) -* Easier stubbed fluent interfaces: stub.returnsThis() (Glen Mailer) -* allow yields() and family to be used along with returns()/throws() and - family (Glen Mailer) -* Async versions `callsArg*` and `yields*` for stubs (TEHEK) -* Format args when doing `spy.printf("%*")` (Domenic Denicola) -* Add notCalled property to spies -* Fix: spy.reset did not reset fakes created by spy.withArgs (Maximilian Antoni) -* Properly restore stubs when stubbing entire objects through the sandbox - (Konrad Holowinski) -* Restore global methods properly - delete properties that where not own - properties (Keith Cirkel) -* setTimeout and setInterval pass arguments (Rodion Vynnychenko) -* Timer callbacks that contain a clock.tick no longer fails (Wesley Waser) -* spy(undefined, "property") now throws -* Prevent multiple restore for fake timers (Kevin Decker) -* Fix toString format under Node (Kevin Decker) -* Mock expectations emit success and failure events (Kevin Decker) -* Development improvement: Use Buster.JS to test Sinon -* Fix bug where expect.atLeast failed when minimum calls where received -* Make fake server safe to load on node.js -* Add support for no args on .withArgs and .withExactArgs (Tek Nynja) -* Avoid hasOwnProperty for host objects - -== 1.3.2 / 2012-03-11 -* Stronger Node inference in sandbox -* Fixed issue with sinon.useFakeTimers() and Rhino.js 1.7R3 -* Formatting brush-up -* FIX Internet Explorer misreporting the type of Function objects - originating in an external window as "object" instead of "function". -* New methods stub.callsArgOn, stub.callsArgOnWith, - stub.yieldsOn, stub.yieldsToOn -* Implemented -* Fixing `clearTimeout` to not throw when called for nonexistant IDs. -* Spys that are created using 'withArgs' now get initialized with previous - calls to the original spy. -* Minor bug fixes and docs cleanup. - -== 1.3.1 / 2012-01-04 -* Fix bug in core sinon: isNode was used for both a variable and a function, - causing load errors and lots of bugs. Should have never left the door. - -== 1.3.0 / 2012-01-01 -* Support using bare functions as fake server response handlers (< 1.3.0 - required URL and/or method matcher too) -* Log some internal errors to sinon.log (defaults to noop). Set sinon.log - to your logging utility of choice for better feedback when. -* White-list fake XHRs: Allows some fake requests and some that fall through to - the backend server (Tim Ruffles) -* Decide Date.now support at fake-time. Makes it possible to load something that - polyfills Date.now after Sinon loaded and still have Date.now on fake Dates. -* Mirror properties on replaced function properties -* New methods: spy.yield(), spy.yieldTo(), spy.callArg() and spy.callArgWith() - can be used to invoke callbacks passed to spies (while avoiding the mock-like - upfront yields() and friends). invokeCallback is available as an alias for - yield for people working with strict mode. (Maximilian Antoni) -* New properties: spy.firstCall, spy.secondCall, spy.thirdCall and spy.lastCall. - (Maximilian Antoni) -* New method: stub.returnsArg(), causes stub to return one of its arguments. - (Gavin Huang) -* Stubs now work for inherited methods. This was previously prohibited to avoid - stubbing not-yet-implemented methods. (Felix Geisendörfer) -* server.respond() can now accept the same arguments as server.respondWith() for - quick-and-dirty respondWith+respond. (Gavin Huang) -* Format objects with buster-format in the default bundle. Default to - util.inspect on node unless buster-format is available (not a hard dependency, - more like a 'preference'). - -* Bug fix: Make sure XHRs can complete even if onreadystatechange handler fails -* Bug fix: Mirror entire Date.prototype, including toUTCString when faking -* Bug fix: Default this object to global in exposed asserts -* Bug fix: sinon.test: use try/finally instead of catch and throw - preserves - stack traces (Kevin Turner) -* Bug fix: Fake `setTimeout` now returns ids greater than 0. (Domenic Denicola) -* Bug fix: NPM install warning (Felix Geisendörfer) -* Bug fix: Fake timers no longer swallows exceptions (Felix Geisendörfer) -* Bug fix: Properly expose all needed asserts for node -* Bug fix: wrapMethod on window property (i.e. when stubbing/spying on global - functions) -* Bug fix: Quote "yield" (Ben Hockey) -* Bug fix: callOrder works correctly when spies have been called multiple times - -== 1.2.0 / 2011-09-27 -* Bug fix: abort() switches state to DONE when OPENED and sent. Fix by - Tristan Koch. -* Bug fix: Mootools uses MSXML2.XMLHTTP as objectId, which Sinon matched with - different casing. Fix by Olmo Maldonado. -* Bug fix: When wrapping a non-owned property, restore now removes the wrapper - instead of replacing it. Fix by Will Butler. -* Bug fix: Make it possibly to stub Array.prototype.push by not using that - method directly inside Sinon. -* Bug fix: Don't assume that req.requestBody is a string in the fake server. -* Added spy.printf(format) to print a nicely formatted message with details - about a spy. -* Garbage collection: removing fakes from collections when restoring the - original methods. Fix by Tristan Koch. -* Add spy.calledWithNew to check if a function was used as a constructor -* Add spy.notCalledWith(), spy.neverCalledWith() and - sinon.assert.neverCalledWith. By Max Antoni -* Publicly expose sinon.expectation.fail to allow tools to integrate with mock - expectations. -* Fake XMLHttpRequests now support a minimal portion of the events API, making - them work seamlessly with e.g. SproutCode (which uses - xhr.addEventListener("readystatechange"). Partially by Sven Fuchs. - -== 1.1.1 / 2011-05-17 -* Fix broken mock verification in CommonJS when not including the full Sinon - package. - -== 1.1.0 / 2011-05-04 -* The fake server now has a autoRespond method which allows it to respond to - requests on the fly (asynchronously), making it a good fit for mockup - development -* Stubs and spies now has a withArgs method. Using it allows you to create - several spies/stubs for the same method, filtered by received arguments -* Stubs now has yields and yieldsTo methods for fuzzily invoking callbacks. - They work like callsArgAt only by inferring what callback to invoke, and - yieldsTo can invoke callbacks in object "options" arguments. -* Allow sandboxes/collections to stub any property so long as the object - has the property as an own property -* Significantly improve error reporting from failed mock expecations. Now prints - all met and unmet expectations with expected and received arguments -* Allow mock expectations to be consumed in any order -* Add pretty printing of all calls when assertions fail -* Fix bug: Stub exception message ended up as "undefined" (string) if not - specified -* Pass capture groups in URLs to fakeServer function handlers -* Pass through return value from test function in testCase -* typeof require is not enough to assume node, also use typeof module -* Don't use Object.create in sinon.create. In the off chance that someone stubs - it, sinon will fail mysteriously (Thanks to Espen Dalløkken) -* Catch exceptions when parsing DOM elements "on a hunch" - When responding to XHRs, Sinon acts like most browsers and try to parse the - response into responseXML if Content-Type indicates XML or HTML. However, it - also does this if the type is not set. Obviously, this may misfire and - should be caught. -* Fix fakeServer.respond() to not drop requests when they are queued during the - processing of an existing queue. (Sven Fuchs) -* Clean up module loading in CommonJS environments (Node.js still the only - tested such environment). No longer (temporarily) modifies require.paths, - always loads all modules. - -== 1.0.2 / 2011-02-22 -* Fix JSON bug in package.json -* Sandbox no longer tries to use a fake server if config says so, but - server is not loaded - -== 1.0.1 / 2010-12-20 -* Make sure sinon.sandbox is exposed in node.js (fix by Gord Tanner) - -== 1.0.0 / 2010-12-08 -* Switched indentation from 2 to 4 spaces :) -* Node.js compatibility improvements -* Remove magic booleans from sinon.assert.expose, replace with option object -* Put QUnit adapter in it's own repository -* Update build script to build standalone timers and server files -* Breaking change: thisObj -> thisValue - Change brings consistency to the code-base, always use thisValue -* Add sinon.assert.pass callback for successful assertions -* Extract sandbox configuration from sinon.test - - Refactored sinon.test to not do all the heavy lifting in creating sandbox - objects from sinon.config. Now sinon.sandbox.create accepts an optional - configuration that can be retrieved through sinon.getConfig({ ... }) - or, to - match previous behavior, through sinon.getConfig(sinon.config); - - The default configuration now lives in sinon.defaultConfig rather than the - previous sinon.test. - - This change enables external tools, such as test framework adapters, to easily - create configurable sandboxes without going through sinon.test -* Rewrite sinon.clock.tick to fix bug and make implementation clearer -* Test config load correct files -* Make timers and XHR truly standalone by splitting the IE work-around in two files -* Don't fail when comparing DOM elements in sinon.deepEqual (used in calledWith(...)) -* Should mirror properties on Date when faking it -* Added and updated configuration for both JsLint and JavaScript lint -* [August Lilleaas] The build script can optionally build a file without the - version name in it, by passing 'plain', i.e. './build plain'. - - Useful when using the build script to build and use sinon programatically, so - one can 'cp path/to/sinon/pkg/sinon.js my/scripts/' -* [August Lilleaas] Checking and warning if we got a load error and rubygems - isn't present. -* [August Lilleaas] Updating build script to be runnable from any - directory. Current working directory doesn't have to be repo root. - -== 0.8.0 / 2010-10-30 -* sinon.wrapMethod no longer accepts faking already faked methods -* sinon-qunit 'plugin' -* sinon.test / sinon.config can now expose the sandbox object - -== 0.7.2 / 2010-10-25 -* Add sinon.sandbox.create back in -* Fix bug where clock.tick would fire timeouts in intervals when - setInterval was also called - -== 0.7.1 / 2010-10-16 -* The fake server will now match paths against full URLs, meaning that - server.respondWith("/", "OK"); will match requests for - "http://currentHost/". -* Improved toString method for spies and stubs which leads to more - precise error messages from sinon.assert.* - -== 0.7.0 / 2010-09-19 -* sinon.useFakeTimers now fakes the Date constructor by default -* sinon.testCase now fakes XHR and timers by default -* sinon.config controls the behavior of sinon.testCase -* Fixed bug in clock.tick - now fires timers in correct order -* Added the ability to tick a clock string for longer ticks. - Passing a number causes the clock to tick the specified amount of - milliseconds, passing a string like "12:32" ticks 12 minutes and 32 - seconds. -* calledBefore and calledAfter for individual calls -* New assertions - sinon.assert.notCalled - sinon.assert.calledOnce - sinon.assert.calledTwice - sinon.assert.calledThrice -* sinon.test now throws if passed anything other than a function -* sinon.testCase now throws if passed anything other than an object -* sinon.{spy,stub}(obj, method) now throws if the property is not an - existing function - helps avoid perpetuating typo bugs -* Vastly improved error messages from assertions -* Spies/stubs/expectations can have their names resolved in many cases -* Removed feature where sinon.testCase allowed for nested test cases - (does not belong in Sinon.JS) -* Organizational change: src/ becomes lib/ Helps npm compatibility -* Thanks to Cory Flanigan for help on npm compatibility - -== 0.6.2 / 2010-08-12 -* Fixed another bug in sinon.fakeServerWithClock where consecutive - respond() calls did not trigger timeouts. - -== 0.6.1 / 2010-08-12 -* Fixed a bug in sinon.fakeServerWithClock where the clock was ticked - before the server had responded to all requests, resulting in - objects not having been responded to by the time the timeout ran. - -== 0.6.0 / 2010-08-10 -* FakeXMLHttpRequest -* sinon.useFakeXMLHttpRequest -* sinon.fakeServer -* sinon.fakeServerWithClock -* Improved fake timers implementation, made them work properly in IE 6-8 -* Improved sinon.sandbox - * Added useFakeServer - * Added inject method -* Improved sinon.test method - * Made configuration aware - * Now uses sinon.sandbox in place of sinon.collection -* Changed default configuration for sinon.test, breaking compatibility - with 0.5.0 - can be changed through sinon.config - -== 0.5.0 / 2010-06-09 -* Initial release -* Spies, stubs, mocks -* Assertions -* collections, test, testCase -* Fake timers (half-baked) diff --git a/build/node_modules/sinon/LICENSE b/build/node_modules/sinon/LICENSE index e7f50d12..432d21c4 100644 --- a/build/node_modules/sinon/LICENSE +++ b/build/node_modules/sinon/LICENSE @@ -1,6 +1,6 @@ (The BSD License) -Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no +Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/build/node_modules/sinon/README.md b/build/node_modules/sinon/README.md index d6eb5b93..18bb62a5 100644 --- a/build/node_modules/sinon/README.md +++ b/build/node_modules/sinon/README.md @@ -1,46 +1,139 @@ -# Sinon.JS - -[![Build status](https://secure.travis-ci.org/cjohansen/Sinon.JS.svg?branch=master)](http://travis-ci.org/cjohansen/Sinon.JS) - -Standalone and test framework agnostic JavaScript test spies, stubs and mocks. +

            + + Sinon.JS + +
            + Sinon.JS +

            + +

            + Standalone and test framework agnostic JavaScript test spies, stubs and mocks (pronounced "sigh-non", named after Sinon, the warrior). +

            + +

            +npm version +Join the chat at https://gitter.im/sinonjs/sinon +Build status +Sauce Test Status +Codecov status +OpenCollective +OpenCollective +npm downloads per month +CDNJS version +Contributor Covenant +

            + + + +## Compatibility + +For details on compatibility and browser support, please see [`COMPATIBILITY.md`](COMPATIBILITY.md) ## Installation -via [npm (node package manager)](http://github.com/isaacs/npm) +via [npm](https://github.com/npm/npm) $ npm install sinon -via [NuGet (package manager for Microsoft development platform)](https://www.nuget.org/packages/SinonJS) - - Install-Package SinonJS - -or install via git by cloning the repository and including sinon.js -in your project, as you would any other third party library. - -Don't forget to include the parts of Sinon.JS that you want to use as well -(i.e. spy.js). +or via sinon's browser builds available for download on the [homepage](https://sinonjs.org/releases/). There are also [npm based CDNs](https://sinonjs.org/releases#npm-cdns) one can use. ## Usage -See the [sinon project homepage](http://sinonjs.org/) for documentation on usage. - -If you have questions that are not covered by the documentation, please post them to the [Sinon.JS mailing list](http://groups.google.com/group/sinonjs) or drop by #sinon.js on irc.freenode.net:6667 +See the [sinon project homepage](https://sinonjs.org/) for documentation on usage. -### Important: AMD needs pre-built version +If you have questions that are not covered by the documentation, you can [check out the `sinon` tag on Stack Overflow](https://stackoverflow.com/questions/tagged/sinon) or drop by #sinon.js on irc.freenode.net:6667. -Sinon.JS *as source* **doesn't work with AMD loaders** (when they're asynchronous, like loading via script tags in the browser). For that you will have to use a pre-built version. You can either [build it yourself](CONTRIBUTING.md#testing-a-built-version) or get a numbered version from http://sinonjs.org. - -This might or might not change in future versions, depending of outcome of investigations. Please don't report this as a bug, just use pre-built versions. +You can also search through the [Sinon.JS mailing list archives](http://groups.google.com/group/sinonjs). ## Goals -* No global pollution -* Easy to use -* Require minimal “integration” -* Easy to embed seamlessly with any testing framework -* Easily fake any interface -* Ship with ready-to-use fakes for XMLHttpRequest, timers and more +- No global pollution +- Easy to use +- Require minimal “integration” +- Easy to embed seamlessly with any testing framework +- Easily fake any interface +- Ship with ready-to-use fakes for XMLHttpRequest, timers and more ## Contribute? See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how you can contribute to Sinon.JS + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/sinon#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/sinon#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Licence + +Sinon.js was released under [BSD-3](LICENSE) diff --git a/build/node_modules/sinon/lib/package.json b/build/node_modules/sinon/lib/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/build/node_modules/sinon/lib/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/build/node_modules/sinon/lib/sinon-esm.js b/build/node_modules/sinon/lib/sinon-esm.js new file mode 100644 index 00000000..c15cf407 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon-esm.js @@ -0,0 +1,3 @@ +"use strict"; +// eslint-disable-next-line no-undef +sinon = require("./sinon"); diff --git a/build/node_modules/sinon/lib/sinon.js b/build/node_modules/sinon/lib/sinon.js index 84f78340..8f1dedc8 100644 --- a/build/node_modules/sinon/lib/sinon.js +++ b/build/node_modules/sinon/lib/sinon.js @@ -1,47 +1,51 @@ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { // eslint-disable-line no-unused-vars - "use strict"; - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); +"use strict"; + +var behavior = require("./sinon/behavior"); +var createSandbox = require("./sinon/create-sandbox"); +var extend = require("./sinon/util/core/extend"); +var fakeTimers = require("./sinon/util/fake-timers"); +var format = require("./sinon/util/core/format"); +var nise = require("nise"); +var Sandbox = require("./sinon/sandbox"); +var stub = require("./sinon/stub"); +var promise = require("./sinon/promise"); + +var apiMethods = { + createSandbox: createSandbox, + assert: require("./sinon/assert"), + match: require("@sinonjs/samsam").createMatcher, + restoreObject: require("./sinon/restore-object"), + + expectation: require("./sinon/mock-expectation"), + defaultConfig: require("./sinon/util/core/default-config"), + + setFormatter: format.setFormatter, + + // fake timers + timers: fakeTimers.timers, + + // fake XHR + xhr: nise.fakeXhr.xhr, + FakeXMLHttpRequest: nise.fakeXhr.FakeXMLHttpRequest, + + // fake server + fakeServer: nise.fakeServer, + fakeServerWithClock: nise.fakeServerWithClock, + createFakeServer: nise.fakeServer.create.bind(nise.fakeServer), + createFakeServerWithClock: nise.fakeServerWithClock.create.bind( + nise.fakeServerWithClock + ), + + addBehavior: function (name, fn) { + behavior.addBehavior(stub, name, fn); + }, + + // fake promise + promise: promise, +}; + +var sandbox = new Sandbox(); + +var api = extend(sandbox, apiMethods); + +module.exports = api; diff --git a/build/node_modules/sinon/lib/sinon/assert.js b/build/node_modules/sinon/lib/sinon/assert.js index 50aa5ee4..5af71bbb 100644 --- a/build/node_modules/sinon/lib/sinon/assert.js +++ b/build/node_modules/sinon/lib/sinon/assert.js @@ -1,226 +1,301 @@ -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - "use strict"; - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var calledInOrder = require("@sinonjs/commons").calledInOrder; +var createMatcher = require("@sinonjs/samsam").createMatcher; +var orderByFirstCall = require("@sinonjs/commons").orderByFirstCall; +var timesInWords = require("./util/core/times-in-words"); +var format = require("./util/core/format"); +var stringSlice = require("@sinonjs/commons").prototypes.string.slice; +var globalObject = require("@sinonjs/commons").global; + +var arraySlice = arrayProto.slice; +var concat = arrayProto.concat; +var forEach = arrayProto.forEach; +var join = arrayProto.join; +var splice = arrayProto.splice; + +function createAssertObject() { + var assert; + + function verifyIsStub() { + var args = arraySlice(arguments); + + forEach(args, function (method) { + if (!method) { + assert.fail("fake is not a spy"); + } - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } + if (method.proxy && method.proxy.isSinonProxy) { + verifyIsStub(method.proxy); + } else { + if (typeof method !== "function") { + assert.fail(`${method} is not a function`); } + if (typeof method.getCall !== "function") { + assert.fail(`${method} is not stubbed`); + } } - } + }); + } - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); + function verifyIsValidAssertion(assertionMethod, assertionArgs) { + switch (assertionMethod) { + case "notCalled": + case "called": + case "calledOnce": + case "calledTwice": + case "calledThrice": + if (assertionArgs.length !== 0) { + assert.fail( + `${assertionMethod} takes 1 argument but was called with ${ + assertionArgs.length + 1 + } arguments` + ); + } + break; + default: + break; } + } - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } + function failAssertion(object, msg) { + var obj = object || globalObject; + var failMethod = obj.fail || assert.fail; + failMethod.call(obj, msg); + } - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; + function mirrorPropAsAssertion(name, method, message) { + var msg = message; + var meth = method; + if (arguments.length === 2) { + msg = method; + meth = name; } - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } + assert[name] = function (fake) { + verifyIsStub(fake); - assert = { - failException: "AssertError", + var args = arraySlice(arguments, 1); + var failed = false; - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; + verifyIsValidAssertion(name, args); - throw error; - }, + if (typeof meth === "function") { + failed = !meth(fake); + } else { + failed = + typeof fake[meth] === "function" + ? !fake[meth].apply(fake, args) + : !fake[meth]; + } - pass: function pass() {}, + if (failed) { + failAssertion( + this, + (fake.printf || fake.proxy.printf).apply( + fake, + concat([msg], args) + ) + ); + } else { + assert.pass(name); + } + }; + } - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; + function exposedName(prefix, prop) { + return !prefix || /^fail/.test(prop) + ? prop + : prefix + + stringSlice(prop, 0, 1).toUpperCase() + + stringSlice(prop, 1); + } - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } + assert = { + failException: "AssertError", + + fail: function fail(message) { + var error = new Error(message); + error.name = this.failException || assert.failException; + + throw error; + }, + + pass: function pass() { + return; + }, + + callOrder: function assertCallOrder() { + verifyIsStub.apply(null, arguments); + var expected = ""; + var actual = ""; + + if (!calledInOrder(arguments)) { + try { + expected = join(arguments, ", "); + var calls = arraySlice(arguments); + var i = calls.length; + while (i) { + if (!calls[--i].called) { + splice(calls, i, 1); } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); + actual = join(orderByFirstCall(calls), ", "); + } catch (e) { + // If this fails, we'll just fall back to the blank string } - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; + failAssertion( + this, + `expected ${expected} to be called in order but were called as ${actual}` + ); + } else { + assert.pass("callOrder"); + } + }, + + callCount: function assertCallCount(method, count) { + verifyIsStub(method); + + var msg; + if (typeof count !== "number") { + msg = + `expected ${format(count)} to be a number ` + + `but was of type ${typeof count}`; + failAssertion(this, msg); + } else if (method.callCount !== count) { + msg = + `expected %n to be called ${timesInWords(count)} ` + + `but was called %c%C`; + failAssertion(this, method.printf(msg)); + } else { + assert.pass("callCount"); + } + }, - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } + expose: function expose(target, options) { + if (!target) { + throw new TypeError("target is null or undefined"); + } - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; - - failAssertion(this, formatted.join("\n")); + var o = options || {}; + var prefix = + (typeof o.prefix === "undefined" && "assert") || o.prefix; + var includeFail = + typeof o.includeFail === "undefined" || Boolean(o.includeFail); + var instance = this; + + forEach(Object.keys(instance), function (method) { + if ( + method !== "expose" && + (includeFail || !/^(fail)/.test(method)) + ) { + target[exposedName(prefix, method)] = instance[method]; } + }); + + return target; + }, + + match: function match(actual, expectation) { + var matcher = createMatcher(expectation); + if (matcher.test(actual)) { + assert.pass("match"); + } else { + var formatted = [ + "expected value to match", + ` expected = ${format(expectation)}`, + ` actual = ${format(actual)}`, + ]; + + failAssertion(this, join(formatted, "\n")); } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { + }, + }; + + mirrorPropAsAssertion( + "called", + "expected %n to have been called at least once but was never called" + ); + mirrorPropAsAssertion( + "notCalled", + function (spy) { return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); + }, + "expected %n to not have been called but was called %c%C" + ); + mirrorPropAsAssertion( + "calledOnce", + "expected %n to be called once but was called %c%C" + ); + mirrorPropAsAssertion( + "calledTwice", + "expected %n to be called twice but was called %c%C" + ); + mirrorPropAsAssertion( + "calledThrice", + "expected %n to be called thrice but was called %c%C" + ); + mirrorPropAsAssertion( + "calledOn", + "expected %n to be called with %1 as this but was called with %t" + ); + mirrorPropAsAssertion( + "alwaysCalledOn", + "expected %n to always be called with %1 as this but was called with %t" + ); + mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); + mirrorPropAsAssertion( + "alwaysCalledWithNew", + "expected %n to always be called with new" + ); + mirrorPropAsAssertion( + "calledWith", + "expected %n to be called with arguments %D" + ); + mirrorPropAsAssertion( + "calledWithMatch", + "expected %n to be called with match %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWith", + "expected %n to always be called with arguments %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWithMatch", + "expected %n to always be called with match %D" + ); + mirrorPropAsAssertion( + "calledWithExactly", + "expected %n to be called with exact arguments %D" + ); + mirrorPropAsAssertion( + "calledOnceWithExactly", + "expected %n to be called once and with exact arguments %D" + ); + mirrorPropAsAssertion( + "calledOnceWithMatch", + "expected %n to be called once and with match %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWithExactly", + "expected %n to always be called with exact arguments %D" + ); + mirrorPropAsAssertion( + "neverCalledWith", + "expected %n to never be called with arguments %*%C" + ); + mirrorPropAsAssertion( + "neverCalledWithMatch", + "expected %n to never be called with match %*%C" + ); + mirrorPropAsAssertion("threw", "%n did not throw exception%C"); + mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); + + return assert; +} + +module.exports = createAssertObject(); +module.exports.createAssertObject = createAssertObject; diff --git a/build/node_modules/sinon/lib/sinon/behavior.js b/build/node_modules/sinon/lib/sinon/behavior.js index 36553394..dcdee300 100644 --- a/build/node_modules/sinon/lib/sinon/behavior.js +++ b/build/node_modules/sinon/lib/sinon/behavior.js @@ -1,371 +1,272 @@ -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } +"use strict"; - if (typeof setImmediate === "function") { - return setImmediate; - } +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var nextTick = require("./util/core/next-tick"); +var valueToString = require("@sinonjs/commons").valueToString; +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); - return function (callback) { - setTimeout(callback, 0); - }; - })(); - - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } +var concat = arrayProto.concat; +var join = arrayProto.join; +var reverse = arrayProto.reverse; +var slice = arrayProto.slice; - return this; +var useLeftMostCallback = -1; +var useRightMostCallback = -2; + +function getCallback(behavior, args) { + var callArgAt = behavior.callArgAt; + + if (callArgAt >= 0) { + return args[callArgAt]; } - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; + var argumentList; - if (callArgAt >= 0) { - return args[callArgAt]; - } + if (callArgAt === useLeftMostCallback) { + argumentList = args; + } - var argumentList; + if (callArgAt === useRightMostCallback) { + argumentList = reverse(slice(args)); + } - if (callArgAt === useLeftMostCallback) { - argumentList = args; + var callArgProp = behavior.callArgProp; + + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] === "function") { + return argumentList[i]; } - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); + if ( + callArgProp && + argumentList[i] && + typeof argumentList[i][callArgProp] === "function" + ) { + return argumentList[i][callArgProp]; } + } - var callArgProp = behavior.callArgProp; + return null; +} - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } +function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } + if (behavior.callArgProp) { + msg = `${functionName( + behavior.stub + )} expected to yield to '${valueToString( + behavior.callArgProp + )}', but no object with such a property was passed.`; + } else { + msg = `${functionName( + behavior.stub + )} expected to yield, but no callback was passed.`; } - return null; + if (args.length > 0) { + msg += ` Received [${join(args, ", ")}]`; + } + + return msg; } - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } + return `argument at index ${behavior.callArgAt} is not a function: ${func}`; +} + +function ensureArgs(name, behavior, args) { + // map function name to internal property + // callsArg => callArgAt + var property = name.replace(/sArg/, "ArgAt"); + var index = behavior[property]; + + if (index >= args.length) { + throw new TypeError( + `${name} failed: ${index + 1} arguments required but only ${ + args.length + } present` + ); + } +} - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } +function callCallback(behavior, args) { + if (typeof behavior.callArgAt === "number") { + ensureArgs("callsArg", behavior, args); + var func = getCallback(behavior, args); - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } + if (typeof func !== "function") { + throw new TypeError(getCallbackError(behavior, func, args)); } - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." + if (behavior.callbackAsync) { + nextTick(function () { + func.apply( + behavior.callbackContext, + behavior.callbackArguments ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; + }); + } else { + return func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); } + } - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } + return undefined; +} + +var proto = { + create: function create(stub) { + var behavior = extend({}, proto); + delete behavior.create; + delete behavior.addBehavior; + delete behavior.createBehavior; + behavior.stub = stub; + + if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) { + behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary; } - sinon.behavior = proto; - return proto; - } + return behavior; + }, + + isPresent: function isPresent() { + return ( + typeof this.callArgAt === "number" || + this.exception || + this.exceptionCreator || + typeof this.returnArgAt === "number" || + this.returnThis || + typeof this.resolveArgAt === "number" || + this.resolveThis || + typeof this.throwArgAt === "number" || + this.fakeFn || + this.returnValueDefined + ); + }, + + /*eslint complexity: ["error", 20]*/ + invoke: function invoke(context, args) { + /* + * callCallback (conditionally) calls ensureArgs + * + * Note: callCallback intentionally happens before + * everything else and cannot be moved lower + */ + var returnValue = callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (this.exceptionCreator) { + this.exception = this.exceptionCreator(); + this.exceptionCreator = undefined; + throw this.exception; + } else if (typeof this.returnArgAt === "number") { + ensureArgs("returnsArg", this, args); + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } else if (typeof this.throwArgAt === "number") { + ensureArgs("throwsArg", this, args); + throw args[this.throwArgAt]; + } else if (this.fakeFn) { + return this.fakeFn.apply(context, args); + } else if (typeof this.resolveArgAt === "number") { + ensureArgs("resolvesArg", this, args); + return (this.promiseLibrary || Promise).resolve( + args[this.resolveArgAt] + ); + } else if (this.resolveThis) { + return (this.promiseLibrary || Promise).resolve(context); + } else if (this.resolve) { + return (this.promiseLibrary || Promise).resolve(this.returnValue); + } else if (this.reject) { + return (this.promiseLibrary || Promise).reject(this.returnValue); + } else if (this.callsThrough) { + var wrappedMethod = this.effectiveWrappedMethod(); + + return wrappedMethod.apply(context, args); + } else if (this.callsThroughWithNew) { + // Get the original method (assumed to be a constructor in this case) + var WrappedClass = this.effectiveWrappedMethod(); + // Turn the arguments object into a normal array + var argsArray = slice(args); + // Call the constructor + var F = WrappedClass.bind.apply( + WrappedClass, + concat([null], argsArray) + ); + return new F(); + } else if (typeof this.returnValue !== "undefined") { + return this.returnValue; + } else if (typeof this.callArgAt === "number") { + return returnValue; + } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + return this.returnValue; + }, - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } + effectiveWrappedMethod: function effectiveWrappedMethod() { + for (var stubb = this.stub; stubb; stubb = stubb.parent) { + if (stubb.wrappedMethod) { + return stubb.wrappedMethod; + } + } + throw new Error("Unable to find wrapped method"); + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error( + 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' + + 'is not supported. Use "stub.withArgs(...).onCall(...)" ' + + "to define sequential behavior for calls with certain arguments." + ); + }, +}; + +function createBehavior(behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || proto.create(this); + this.defaultBehavior[behaviorMethod].apply( + this.defaultBehavior, + arguments + ); + return this; + }; +} - if (isAMD) { - define(loadDependencies); - return; - } +function addBehavior(stub, name, fn) { + proto[name] = function () { + fn.apply(this, concat([this], slice(arguments))); + return this.stub || this; + }; - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + stub[name] = createBehavior(name); +} - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); +proto.addBehavior = addBehavior; +proto.createBehavior = createBehavior; + +var asyncBehaviors = exportAsyncBehaviors(proto); + +module.exports = extend.nonEnum({}, proto, asyncBehaviors); diff --git a/build/node_modules/sinon/lib/sinon/call.js b/build/node_modules/sinon/lib/sinon/call.js deleted file mode 100644 index 435ec887..00000000 --- a/build/node_modules/sinon/lib/sinon/call.js +++ /dev/null @@ -1,239 +0,0 @@ -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - "use strict"; - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy ? this.proxy.toString() + "(" : ""; - var args = []; - - if (!this.args) { - return ":("; - } - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/collect-own-methods.js b/build/node_modules/sinon/lib/sinon/collect-own-methods.js new file mode 100644 index 00000000..dca3e74b --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/collect-own-methods.js @@ -0,0 +1,27 @@ +"use strict"; + +var walk = require("./util/core/walk"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var push = require("@sinonjs/commons").prototypes.array.push; + +function collectMethod(methods, object, prop, propOwner) { + if ( + typeof getPropertyDescriptor(propOwner, prop).value === "function" && + hasOwnProperty(object, prop) + ) { + push(methods, object[prop]); + } +} + +// This function returns an array of all the own methods on the passed object +function collectOwnMethods(object) { + var methods = []; + + walk(object, collectMethod.bind(null, methods, object)); + + return methods; +} + +module.exports = collectOwnMethods; diff --git a/build/node_modules/sinon/lib/sinon/collection.js b/build/node_modules/sinon/lib/sinon/collection.js deleted file mode 100644 index b9efd880..00000000 --- a/build/node_modules/sinon/lib/sinon/collection.js +++ /dev/null @@ -1,173 +0,0 @@ -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/color.js b/build/node_modules/sinon/lib/sinon/color.js new file mode 100644 index 00000000..296cb3f3 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/color.js @@ -0,0 +1,31 @@ +"use strict"; + +var supportsColor = require("supports-color"); + +function colorize(str, color) { + if (supportsColor.stdout === false) { + return str; + } + + return `\x1b[${color}m${str}\x1b[0m`; +} + +exports.red = function (str) { + return colorize(str, 31); +}; + +exports.green = function (str) { + return colorize(str, 32); +}; + +exports.cyan = function (str) { + return colorize(str, 96); +}; + +exports.white = function (str) { + return colorize(str, 39); +}; + +exports.bold = function (str) { + return colorize(str, 1); +}; diff --git a/build/node_modules/sinon/lib/sinon/create-sandbox.js b/build/node_modules/sinon/lib/sinon/create-sandbox.js new file mode 100644 index 00000000..3aa8bf49 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/create-sandbox.js @@ -0,0 +1,68 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var Sandbox = require("./sandbox"); + +var forEach = arrayProto.forEach; +var push = arrayProto.push; + +function prepareSandboxFromConfig(config) { + var sandbox = new Sandbox(); + + if (config.useFakeServer) { + if (typeof config.useFakeServer === "object") { + sandbox.serverPrototype = config.useFakeServer; + } + + sandbox.useFakeServer(); + } + + if (config.useFakeTimers) { + if (typeof config.useFakeTimers === "object") { + sandbox.useFakeTimers(config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } + } + + return sandbox; +} + +function exposeValue(sandbox, config, key, value) { + if (!value) { + return; + } + + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + push(sandbox.injectedKeys, key); + } else { + push(sandbox.args, value); + } +} + +function createSandbox(config) { + if (!config) { + return new Sandbox(); + } + + var configuredSandbox = prepareSandboxFromConfig(config); + configuredSandbox.args = configuredSandbox.args || []; + configuredSandbox.injectedKeys = []; + configuredSandbox.injectInto = config.injectInto; + var exposed = configuredSandbox.inject({}); + + if (config.properties) { + forEach(config.properties, function (prop) { + var value = + exposed[prop] || (prop === "sandbox" && configuredSandbox); + exposeValue(configuredSandbox, config, prop, value); + }); + } else { + exposeValue(configuredSandbox, config, "sandbox"); + } + + return configuredSandbox; +} + +module.exports = createSandbox; diff --git a/build/node_modules/sinon/lib/sinon/default-behaviors.js b/build/node_modules/sinon/lib/sinon/default-behaviors.js new file mode 100644 index 00000000..72aed165 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/default-behaviors.js @@ -0,0 +1,283 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); +var extend = require("./util/core/extend"); + +var slice = arrayProto.slice; + +var useLeftMostCallback = -1; +var useRightMostCallback = -2; + +function throwsException(fake, error, message) { + if (typeof error === "function") { + fake.exceptionCreator = error; + } else if (typeof error === "string") { + fake.exceptionCreator = function () { + var newException = new Error(message || ""); + newException.name = error; + return newException; + }; + } else if (!error) { + fake.exceptionCreator = function () { + return new Error("Error"); + }; + } else { + fake.exception = error; + } +} + +var defaultBehaviors = { + callsFake: function callsFake(fake, fn) { + fake.fakeFn = fn; + }, + + callsArg: function callsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOn: function callsArgOn(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgWith: function callsArgWith(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOnWith: function callsArgWith(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + usingPromise: function usingPromise(fake, promiseLibrary) { + fake.promiseLibrary = promiseLibrary; + }, + + yields: function (fake) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsRight: function (fake) { + fake.callArgAt = useRightMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsOn: function (fake, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsTo: function (fake, prop) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsToOn: function (fake, prop, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(fake, value) { + fake.returnValue = value; + fake.resolve = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + returnsArg: function returnsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.returnArgAt = index; + }, + + throwsArg: function throwsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.throwArgAt = index; + }, + + returnsThis: function returnsThis(fake) { + fake.returnThis = true; + }, + + resolves: function resolves(fake, value) { + fake.returnValue = value; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + resolvesArg: function resolvesArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + fake.resolveArgAt = index; + fake.returnValue = undefined; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + rejects: function rejects(fake, error, message) { + var reason; + if (typeof error === "string") { + reason = new Error(message || ""); + reason.name = error; + } else if (!error) { + reason = new Error("Error"); + } else { + reason = error; + } + fake.returnValue = reason; + fake.resolve = false; + fake.resolveThis = false; + fake.reject = true; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + + return fake; + }, + + resolvesThis: function resolvesThis(fake) { + fake.returnValue = undefined; + fake.resolve = false; + fake.resolveThis = true; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + callThrough: function callThrough(fake) { + fake.callsThrough = true; + }, + + callThroughWithNew: function callThroughWithNew(fake) { + fake.callsThroughWithNew = true; + }, + + get: function get(fake, getterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + get: getterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + }); + + return fake; + }, + + set: function set(fake, setterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty( + rootStub.rootObj, + rootStub.propName, + // eslint-disable-next-line accessor-pairs + { + set: setterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + } + ); + + return fake; + }, + + value: function value(fake, newVal) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + value: newVal, + enumerable: true, + configurable: + rootStub.shadowsPropOnPrototype || + isPropertyConfigurable(rootStub.rootObj, rootStub.propName), + }); + + return fake; + }, +}; + +var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors); + +module.exports = extend({}, defaultBehaviors, asyncBehaviors); diff --git a/build/node_modules/sinon/lib/sinon/extend.js b/build/node_modules/sinon/lib/sinon/extend.js deleted file mode 100644 index a57e9eb5..00000000 --- a/build/node_modules/sinon/lib/sinon/extend.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/fake.js b/build/node_modules/sinon/lib/sinon/fake.js new file mode 100644 index 00000000..e90724b9 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/fake.js @@ -0,0 +1,287 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var nextTick = require("./util/core/next-tick"); + +var slice = arrayProto.slice; +var promiseLib = Promise; + +module.exports = fake; + +/** + * Returns a `fake` that records all calls, arguments and return values. + * + * When an `f` argument is supplied, this implementation will be used. + * + * @example + * // create an empty fake + * var f1 = sinon.fake(); + * + * f1(); + * + * f1.calledOnce() + * // true + * + * @example + * function greet(greeting) { + * console.log(`Hello ${greeting}`); + * } + * + * // create a fake with implementation + * var f2 = sinon.fake(greet); + * + * // Hello world + * f2("world"); + * + * f2.calledWith("world"); + * // true + * + * @param {Function|undefined} f + * @returns {Function} + * @namespace + */ +function fake(f) { + if (arguments.length > 0 && typeof f !== "function") { + throw new TypeError("Expected f argument to be a Function"); + } + + return wrapFunc(f); +} + +/** + * Creates a `fake` that returns the provided `value`, as well as recording all + * calls, arguments and return values. + * + * @example + * var f1 = sinon.fake.returns(42); + * + * f1(); + * // 42 + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.returns = function returns(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return value; + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that throws an Error. + * If the `value` argument does not have Error in its prototype chain, it will + * be used for creating a new error. + * + * @example + * var f1 = sinon.fake.throws("hello"); + * + * f1(); + * // Uncaught Error: hello + * + * @example + * var f2 = sinon.fake.throws(new TypeError("Invalid argument")); + * + * f2(); + * // Uncaught TypeError: Invalid argument + * + * @memberof fake + * @param {*|Error} value + * @returns {Function} + */ +fake.throws = function throws(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + throw getError(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that resolves to the passed `value` + * argument. + * + * @example + * var f1 = sinon.fake.resolves("apple pie"); + * + * await f1(); + * // "apple pie" + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.resolves = function resolves(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.resolve(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that rejects to the passed `value` + * argument. When `value` does not have Error in its prototype chain, it will be + * wrapped in an Error. + * + * @example + * var f1 = sinon.fake.rejects(":("); + * + * try { + * await ft(); + * } catch (error) { + * console.log(error); + * // ":(" + * } + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.rejects = function rejects(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.reject(getError(value)); + } + + return wrapFunc(f); +}; + +/** + * Causes `fake` to use a custom Promise implementation, instead of the native + * Promise implementation. + * + * @example + * const bluebird = require("bluebird"); + * sinon.fake.usingPromise(bluebird); + * + * @memberof fake + * @param {*} promiseLibrary + * @returns {Function} + */ +fake.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + return fake; +}; + +/** + * Returns a `fake` that calls the callback with the defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * // "apple*pie" + * + * @memberof fake + * @returns {Function} + */ +fake.yields = function yields() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + + callback.apply(null, values); + } + + return wrapFunc(f); +}; + +/** + * Returns a `fake` that calls the callback **asynchronously** with the + * defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * + * setTimeout(() => { + * // "apple*pie" + * }); + * + * @memberof fake + * @returns {Function} + */ +fake.yieldsAsync = function yieldsAsync() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + nextTick(function () { + callback.apply(null, values); + }); + } + + return wrapFunc(f); +}; + +var uuid = 0; +/** + * Creates a proxy (sinon concept) from the passed function. + * + * @private + * @param {Function} f + * @returns {Function} + */ +function wrapFunc(f) { + var proxy; + var fakeInstance = function () { + var firstArg, lastArg; + + if (arguments.length > 0) { + firstArg = arguments[0]; + lastArg = arguments[arguments.length - 1]; + } + + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxy.firstArg = firstArg; + proxy.lastArg = lastArg; + proxy.callback = callback; + + return f && f.apply(this, arguments); + }; + proxy = createProxy(fakeInstance, f || fakeInstance); + + proxy.displayName = "fake"; + proxy.id = `fake#${uuid++}`; + + return proxy; +} + +/** + * Returns an Error instance from the passed value, if the value is not + * already an Error instance. + * + * @private + * @param {*} value [description] + * @returns {Error} [description] + */ +function getError(value) { + return value instanceof Error ? value : new Error(value); +} diff --git a/build/node_modules/sinon/lib/sinon/format.js b/build/node_modules/sinon/lib/sinon/format.js deleted file mode 100644 index 942d0a28..00000000 --- a/build/node_modules/sinon/lib/sinon/format.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - "use strict"; - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/log_error.js b/build/node_modules/sinon/lib/sinon/log_error.js deleted file mode 100644 index 3e41201c..00000000 --- a/build/node_modules/sinon/lib/sinon/log_error.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/match.js b/build/node_modules/sinon/lib/sinon/match.js deleted file mode 100644 index 0f72527f..00000000 --- a/build/node_modules/sinon/lib/sinon/match.js +++ /dev/null @@ -1,261 +0,0 @@ -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/mock-expectation.js b/build/node_modules/sinon/lib/sinon/mock-expectation.js new file mode 100644 index 00000000..ffef5700 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/mock-expectation.js @@ -0,0 +1,321 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyInvoke = require("./proxy-invoke"); +var proxyCallToString = require("./proxy-call").toString; +var timesInWords = require("./util/core/times-in-words"); +var extend = require("./util/core/extend"); +var match = require("@sinonjs/samsam").createMatcher; +var stub = require("./stub"); +var assert = require("./assert"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var format = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var every = arrayProto.every; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function callCountInWords(callCount) { + if (callCount === 0) { + return "never called"; + } + + return `called ${timesInWords(callCount)}`; +} + +function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; + + if (typeof min === "number" && typeof max === "number") { + var str = timesInWords(min); + + if (min !== max) { + str = `at least ${str} and at most ${timesInWords(max)}`; + } + + return str; + } + + if (typeof min === "number") { + return `at least ${timesInWords(min)}`; + } + + return `at most ${timesInWords(max)}`; +} + +function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls === "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; +} + +function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls !== "number") { + return false; + } + + return expectation.callCount === expectation.maxCalls; +} + +function verifyMatcher(possibleMatcher, arg) { + var isMatcher = match.isMatcher(possibleMatcher); + + return (isMatcher && possibleMatcher.test(arg)) || true; +} + +var mockExpectation = { + minCalls: 1, + maxCalls: 1, + + create: function create(methodName) { + var expectation = extend.nonEnum(stub(), mockExpectation); + delete expectation.create; + expectation.method = methodName; + + return expectation; + }, + + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); + + return proxyInvoke.apply(this, arguments); + }, + + atLeast: function atLeast(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; + } + + this.minCalls = num; + + return this; + }, + + atMost: function atMost(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; + } + + this.maxCalls = num; + + return this; + }, + + never: function never() { + return this.exactly(0); + }, + + once: function once() { + return this.exactly(1); + }, + + twice: function twice() { + return this.exactly(2); + }, + + thrice: function thrice() { + return this.exactly(3); + }, + + exactly: function exactly(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not a number`); + } + + this.atLeast(num); + return this.atMost(num); + }, + + met: function met() { + return !this.failed && receivedMinCalls(this); + }, + + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (receivedMaxCalls(this)) { + this.failed = true; + mockExpectation.fail( + `${this.method} already called ${timesInWords(this.maxCalls)}` + ); + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + mockExpectation.fail( + `${this.method} called with ${valueToString( + thisValue + )} as thisValue, expected ${valueToString(this.expectedThis)}` + ); + } + + if (!("expectedArguments" in this)) { + return; + } + + if (!args) { + mockExpectation.fail( + `${this.method} received no arguments, expected ${format( + expectedArguments + )}` + ); + } + + if (args.length < expectedArguments.length) { + mockExpectation.fail( + `${this.method} received too few arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + if ( + this.expectsExactArgCount && + args.length !== expectedArguments.length + ) { + mockExpectation.fail( + `${this.method} received too many arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + forEach( + expectedArguments, + function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, args[i])) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, didn't match ${String(expectedArguments)}` + ); + } + + if (!deepEqual(args[i], expectedArgument)) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, expected ${format(expectedArguments)}` + ); + } + }, + this + ); + }, + + allowsCall: function allowsCall(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (this.met() && receivedMaxCalls(this)) { + return false; + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } + + if (!("expectedArguments" in this)) { + return true; + } + + // eslint-disable-next-line no-underscore-dangle + var _args = args || []; + + if (_args.length < expectedArguments.length) { + return false; + } + + if ( + this.expectsExactArgCount && + _args.length !== expectedArguments.length + ) { + return false; + } + + return every(expectedArguments, function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, _args[i])) { + return false; + } + + if (!deepEqual(_args[i], expectedArgument)) { + return false; + } + + return true; + }); + }, + + withArgs: function withArgs() { + this.expectedArguments = slice(arguments); + return this; + }, + + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, + + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, + + toString: function () { + var args = slice(this.expectedArguments || []); + + if (!this.expectsExactArgCount) { + push(args, "[...]"); + } + + var callStr = proxyCallToString.call({ + proxy: this.method || "anonymous mock expectation", + args: args, + }); + + var message = `${callStr.replace( + ", [...", + "[, ..." + )} ${expectedCallCountInWords(this)}`; + + if (this.met()) { + return `Expectation met: ${message}`; + } + + return `Expected ${message} (${callCountInWords(this.callCount)})`; + }, + + verify: function verify() { + if (!this.met()) { + mockExpectation.fail(String(this)); + } else { + mockExpectation.pass(String(this)); + } + + return true; + }, + + pass: function pass(message) { + assert.pass(message); + }, + + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; + + throw exception; + }, +}; + +module.exports = mockExpectation; diff --git a/build/node_modules/sinon/lib/sinon/mock.js b/build/node_modules/sinon/lib/sinon/mock.js index 8af2262e..ea14320c 100644 --- a/build/node_modules/sinon/lib/sinon/mock.js +++ b/build/node_modules/sinon/lib/sinon/mock.js @@ -1,491 +1,214 @@ -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var mockExpectation = require("./mock-expectation"); +var proxyCallToString = require("./proxy-call").toString; +var extend = require("./util/core/extend"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var wrapMethod = require("./util/core/wrap-method"); +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var every = arrayProto.every; +var join = arrayProto.join; +var push = arrayProto.push; +var slice = arrayProto.slice; +var unshift = arrayProto.unshift; + +function mock(object) { + if (!object || typeof object === "string") { + return mockExpectation.create(object ? object : "Anonymous mock"); + } - return mock.create(object); - } + return mock.create(object); +} - function each(collection, callback) { - if (!collection) { - return; - } +function each(collection, callback) { + var col = collection || []; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } + forEach(col, callback); +} - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } +function arrayEquals(arr1, arr2, compareLength) { + if (compareLength && arr1.length !== arr2.length) { + return false; + } - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; + return every(arr1, function (element, i) { + return deepEqual(arr2[i], element); + }); +} - return mockObject; - }, +extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } + var mockObject = extend.nonEnum({}, mock, { object: object }); + delete mockObject.create; - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } + return mockObject; + }, - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } - push.call(this.proxies, method); - } + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + this.failures = []; + } - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; - return true; - }, + wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; + push(this.proxies, method); + } - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } + var expectation = mockExpectation.create(method); + expectation.wrappedMethod = this.object[method].wrappedMethod; + push(this.expectations[method], expectation); + usePromiseLibrary(this.promiseLibrary, expectation); - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } + return expectation; + }, - var messages = []; - var exhausted = 0; + restore: function restore() { + var object = this.object; - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore === "function") { + object[proxy].restore(); + } + }); + }, - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } + verify: function verify() { + var expectations = this.expectations || {}; + var messages = this.failures ? slice(this.failures) : []; + var met = []; - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push(messages, String(expectation)); + } else { + push(met, String(expectation)); } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } + }); }); - var times = sinon.timesInWords; - var slice = Array.prototype.slice; + this.restore(); - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); + if (messages.length > 0) { + mockExpectation.fail(join(concat(messages, met), "\n")); + } else if (met.length > 0) { + mockExpectation.pass(join(concat(messages, met), "\n")); } - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; + return true; + }, + + usingPromise: function usingPromise(promiseLibrary) { + this.promiseLibrary = promiseLibrary; + + return this; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */ + /* eslint consistent-return: "off" */ + var expectations = + this.expectations && this.expectations[method] + ? this.expectations[method] + : []; + var currentArgs = args || []; + var available; + + var expectationsWithMatchingArgs = filter( + expectations, + function (expectation) { + var expectedArgs = expectation.expectedArguments || []; + + return arrayEquals( + expectedArgs, + currentArgs, + expectation.expectsExactArgCount + ); } - - if (typeof min === "number") { - return "at least " + times(min); + ); + + var expectationsToApply = filter( + expectationsWithMatchingArgs, + function (expectation) { + return ( + !expectation.met() && + expectation.allowsCall(thisValue, args) + ); } + ); - return "at most " + times(max); + if (expectationsToApply.length > 0) { + return expectationsToApply[0].apply(thisValue, args); } - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } + var messages = []; + var exhausted = 0; - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; + forEach(expectationsWithMatchingArgs, function (expectation) { + if (expectation.allowsCall(thisValue, args)) { + available = available || expectation; + } else { + exhausted += 1; } + }); - return expectation.callCount === expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; + if (available && exhausted === 0) { + return available.apply(thisValue, args); } - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; + forEach(expectations, function (expectation) { + push(messages, ` ${String(expectation)}`); + }); - throw exception; + unshift( + messages, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + })}` + ); + + var err = new Error(); + if (!err.stack) { + // PhantomJS does not serialize the stack trace until the error has been thrown + try { + throw err; + } catch (e) { + /* empty */ } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + } + push( + this.failures, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + stack: err.stack, + })}` + ); + + mockExpectation.fail(join(messages, "\n")); + }, +}); + +module.exports = mock; diff --git a/build/node_modules/sinon/lib/sinon/promise.js b/build/node_modules/sinon/lib/sinon/promise.js new file mode 100644 index 00000000..c0d91cf7 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/promise.js @@ -0,0 +1,84 @@ +"use strict"; + +var fake = require("./fake"); +var isRestorable = require("./util/core/is-restorable"); + +var STATUS_PENDING = "pending"; +var STATUS_RESOLVED = "resolved"; +var STATUS_REJECTED = "rejected"; + +/** + * Returns a fake for a given function or undefined. If no function is given, a + * new fake is returned. If the given function is already a fake, it is + * returned as is. Otherwise the given function is wrapped in a new fake. + * + * @param {Function} [executor] The optional executor function. + * @returns {Function} + */ +function getFakeExecutor(executor) { + if (isRestorable(executor)) { + return executor; + } + if (executor) { + return fake(executor); + } + return fake(); +} + +/** + * Returns a new promise that exposes it's internal `status`, `resolvedValue` + * and `rejectedValue` and can be resolved or rejected from the outside by + * calling `resolve(value)` or `reject(reason)`. + * + * @param {Function} [executor] The optional executor function. + * @returns {Promise} + */ +function promise(executor) { + var fakeExecutor = getFakeExecutor(executor); + var sinonPromise = new Promise(fakeExecutor); + + sinonPromise.status = STATUS_PENDING; + sinonPromise + .then(function (value) { + sinonPromise.status = STATUS_RESOLVED; + sinonPromise.resolvedValue = value; + }) + .catch(function (reason) { + sinonPromise.status = STATUS_REJECTED; + sinonPromise.rejectedValue = reason; + }); + + /** + * Resolves or rejects the promise with the given status and value. + * + * @param {string} status + * @param {*} value + * @param {Function} callback + */ + function finalize(status, value, callback) { + if (sinonPromise.status !== STATUS_PENDING) { + throw new Error(`Promise already ${sinonPromise.status}`); + } + + sinonPromise.status = status; + callback(value); + } + + sinonPromise.resolve = function (value) { + finalize(STATUS_RESOLVED, value, fakeExecutor.firstCall.args[0]); + // Return the promise so that callers can await it: + return sinonPromise; + }; + sinonPromise.reject = function (reason) { + finalize(STATUS_REJECTED, reason, fakeExecutor.firstCall.args[1]); + // Return a new promise that resolves when the sinon promise was + // rejected, so that callers can await it: + return new Promise(function (resolve) { + sinonPromise.catch(() => resolve()); + }); + }; + + return sinonPromise; +} + +module.exports = promise; diff --git a/build/node_modules/sinon/lib/sinon/proxy-call-util.js b/build/node_modules/sinon/lib/sinon/proxy-call-util.js new file mode 100644 index 00000000..9075546f --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/proxy-call-util.js @@ -0,0 +1,67 @@ +"use strict"; + +var push = require("@sinonjs/commons").prototypes.array.push; + +exports.incrementCallCount = function incrementCallCount(proxy) { + proxy.called = true; + proxy.callCount += 1; + proxy.notCalled = false; + proxy.calledOnce = proxy.callCount === 1; + proxy.calledTwice = proxy.callCount === 2; + proxy.calledThrice = proxy.callCount === 3; +}; + +exports.createCallProperties = function createCallProperties(proxy) { + proxy.firstCall = proxy.getCall(0); + proxy.secondCall = proxy.getCall(1); + proxy.thirdCall = proxy.getCall(2); + proxy.lastCall = proxy.getCall(proxy.callCount - 1); +}; + +exports.delegateToCalls = function delegateToCalls( + proxy, + method, + matchAny, + actual, + returnsValues, + notCalled, + totalCallCount +) { + proxy[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + if (totalCallCount !== undefined && this.callCount !== totalCallCount) { + return false; + } + + var currentCall; + var matches = 0; + var returnValues = []; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + var returnValue = currentCall[actual || method].apply( + currentCall, + arguments + ); + push(returnValues, returnValue); + if (returnValue) { + matches += 1; + + if (matchAny) { + return true; + } + } + } + + if (returnsValues) { + return returnValues; + } + return matches === this.callCount; + }; +}; diff --git a/build/node_modules/sinon/lib/sinon/proxy-call.js b/build/node_modules/sinon/lib/sinon/proxy-call.js new file mode 100644 index 00000000..e76e93dc --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/proxy-call.js @@ -0,0 +1,292 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var match = require("@sinonjs/samsam").createMatcher; +var deepEqual = require("@sinonjs/samsam").deepEqual; +var functionName = require("@sinonjs/commons").functionName; +var sinonFormat = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var join = arrayProto.join; +var map = arrayProto.map; +var reduce = arrayProto.reduce; +var slice = arrayProto.slice; + +function throwYieldError(proxy, text, args) { + var msg = functionName(proxy) + text; + if (args.length) { + msg += ` Received [${join(slice(args), ", ")}]`; + } + throw new Error(msg); +} + +var callProto = { + calledOn: function calledOn(thisValue) { + if (match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, + + calledWith: function calledWith() { + var self = this; + var calledWithArgs = slice(arguments); + + if (calledWithArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithArgs, + function (prev, arg, i) { + return prev && deepEqual(self.args[i], arg); + }, + true + ); + }, + + calledWithMatch: function calledWithMatch() { + var self = this; + var calledWithMatchArgs = slice(arguments); + + if (calledWithMatchArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithMatchArgs, + function (prev, expectation, i) { + var actual = self.args[i]; + + return prev && match(expectation).test(actual); + }, + true + ); + }, + + calledWithExactly: function calledWithExactly() { + return ( + arguments.length === this.args.length && + this.calledWith.apply(this, arguments) + ); + }, + + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, + + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, + + returned: function returned(value) { + return deepEqual(this.returnValue, value); + }, + + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return Boolean(this.exception); + } + + return this.exception === error || this.exception.name === error; + }, + + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, + + calledBefore: function (other) { + return this.callId < other.callId; + }, + + calledAfter: function (other) { + return this.callId > other.callId; + }, + + calledImmediatelyBefore: function (other) { + return this.callId === other.callId - 1; + }, + + calledImmediatelyAfter: function (other) { + return this.callId === other.callId + 1; + }, + + callArg: function (pos) { + this.ensureArgIsAFunction(pos); + return this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + return this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + return this.callArgOnWith.apply( + this, + concat([pos, null], slice(arguments, 1)) + ); + }, + + callArgOnWith: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + var args = slice(arguments, 2); + return this.args[pos].apply(thisValue, args); + }, + + throwArg: function (pos) { + if (pos > this.args.length) { + throw new TypeError( + `Not enough arguments: ${pos} required but only ${this.args.length} present` + ); + } + + throw this.args[pos]; + }, + + yield: function () { + return this.yieldOn.apply(this, concat([null], slice(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = slice(this.args); + var yieldFn = filter(args, function (arg) { + return typeof arg === "function"; + })[0]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + " cannot yield since no callback was passed.", + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 1)); + }, + + yieldTo: function (prop) { + return this.yieldToOn.apply( + this, + concat([prop, null], slice(arguments, 1)) + ); + }, + + yieldToOn: function (prop, thisValue) { + var args = slice(this.args); + var yieldArg = filter(args, function (arg) { + return arg && typeof arg[prop] === "function"; + })[0]; + var yieldFn = yieldArg && yieldArg[prop]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + ` cannot yield to '${valueToString( + prop + )}' since no callback was passed.`, + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 2)); + }, + + toString: function () { + var callStr = this.proxy ? `${String(this.proxy)}(` : ""; + var formattedArgs; + + if (!this.args) { + return ":("; + } + + formattedArgs = map(this.args, function (arg) { + return sinonFormat(arg); + }); + + callStr = `${callStr + join(formattedArgs, ", ")})`; + + if (typeof this.returnValue !== "undefined") { + callStr += ` => ${sinonFormat(this.returnValue)}`; + } + + if (this.exception) { + callStr += ` !${this.exception.name}`; + + if (this.exception.message) { + callStr += `(${this.exception.message})`; + } + } + if (this.stack) { + // If we have a stack, add the first frame that's in end-user code + // Skip the first two frames because they will refer to Sinon code + callStr += (this.stack.split("\n")[3] || "unknown").replace( + /^\s*(?:at\s+|@)?/, + " at " + ); + } + + return callStr; + }, + + ensureArgIsAFunction: function (pos) { + if (typeof this.args[pos] !== "function") { + throw new TypeError( + `Expected argument at position ${pos} to be a Function, but was ${typeof this + .args[pos]}` + ); + } + }, +}; +Object.defineProperty(callProto, "stack", { + enumerable: true, + configurable: true, + get: function () { + return (this.errorWithCallStack && this.errorWithCallStack.stack) || ""; + }, +}); + +callProto.invokeCallback = callProto.yield; + +function createProxyCall( + proxy, + thisValue, + args, + returnValue, + exception, + id, + errorWithCallStack +) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } + + var firstArg, lastArg; + + if (args.length > 0) { + firstArg = args[0]; + lastArg = args[args.length - 1]; + } + + var proxyCall = Object.create(callProto); + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxyCall.proxy = proxy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.firstArg = firstArg; + proxyCall.lastArg = lastArg; + proxyCall.callback = callback; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + proxyCall.errorWithCallStack = errorWithCallStack; + + return proxyCall; +} +createProxyCall.toString = callProto.toString; // used by mocks + +module.exports = createProxyCall; diff --git a/build/node_modules/sinon/lib/sinon/proxy-invoke.js b/build/node_modules/sinon/lib/sinon/proxy-invoke.js new file mode 100644 index 00000000..dcd5d914 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/proxy-invoke.js @@ -0,0 +1,88 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyCallUtil = require("./proxy-call-util"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var concat = arrayProto.concat; +var ErrorConstructor = Error.prototype.constructor; +var bind = Function.prototype.bind; + +var callId = 0; + +module.exports = function invoke(func, thisValue, args) { + var matchings = this.matchingFakes(args); + var currentCallId = callId++; + var exception, returnValue; + + proxyCallUtil.incrementCallCount(this); + push(this.thisValues, thisValue); + push(this.args, args); + push(this.callIds, currentCallId); + forEach(matchings, function (matching) { + proxyCallUtil.incrementCallCount(matching); + push(matching.thisValues, thisValue); + push(matching.args, args); + push(matching.callIds, currentCallId); + }); + + // Make call properties available from within the spied function: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + try { + this.invoking = true; + + var thisCall = this.getCall(this.callCount - 1); + + if (thisCall.calledWithNew()) { + // Call through with `new` + returnValue = new (bind.apply( + this.func || func, + concat([thisValue], args) + ))(); + + if (typeof returnValue !== "object") { + returnValue = thisValue; + } + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; + } + + push(this.exceptions, exception); + push(this.returnValues, returnValue); + forEach(matchings, function (matching) { + push(matching.exceptions, exception); + push(matching.returnValues, returnValue); + }); + + var err = new ErrorConstructor(); + // 1. Please do not get stack at this point. It may be so very slow, and not actually used + // 2. PhantomJS does not serialize the stack trace until the error has been thrown: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack + try { + throw err; + } catch (e) { + /* empty */ + } + push(this.errorsWithCallStack, err); + forEach(matchings, function (matching) { + push(matching.errorsWithCallStack, err); + }); + + // Make return value and exception available in the calls: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + if (exception !== undefined) { + throw exception; + } + + return returnValue; +}; diff --git a/build/node_modules/sinon/lib/sinon/proxy.js b/build/node_modules/sinon/lib/sinon/proxy.js new file mode 100644 index 00000000..82505c53 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/proxy.js @@ -0,0 +1,366 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionToString = require("./util/core/function-to-string"); +var proxyCall = require("./proxy-call"); +var proxyCallUtil = require("./proxy-call-util"); +var proxyInvoke = require("./proxy-invoke"); +var sinonFormat = require("./util/core/format"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var slice = arrayProto.slice; + +var emptyFakes = Object.freeze([]); + +// Public API +var proxyApi = { + toString: functionToString, + + named: function named(name) { + this.displayName = name; + var nameDescriptor = Object.getOwnPropertyDescriptor(this, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + nameDescriptor.value = name; + Object.defineProperty(this, "name", nameDescriptor); + } + return this; + }, + + invoke: proxyInvoke, + + /* + * Hook for derived implementation to return fake instances matching the + * given arguments. + */ + matchingFakes: function (/*args, strict*/) { + return emptyFakes; + }, + + getCall: function getCall(index) { + var i = index; + if (i < 0) { + // Negative indices means counting backwards from the last call + i += this.callCount; + } + if (i < 0 || i >= this.callCount) { + return null; + } + + return proxyCall( + this, + this.thisValues[i], + this.args[i], + this.returnValues[i], + this.exceptions[i], + this.callIds[i], + this.errorsWithCallStack[i] + ); + }, + + getCalls: function () { + var calls = []; + var i; + + for (i = 0; i < this.callCount; i++) { + push(calls, this.getCall(i)); + } + + return calls; + }, + + calledBefore: function calledBefore(proxy) { + if (!this.called) { + return false; + } + + if (!proxy.called) { + return true; + } + + return this.callIds[0] < proxy.callIds[proxy.callIds.length - 1]; + }, + + calledAfter: function calledAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return this.callIds[this.callCount - 1] > proxy.callIds[0]; + }, + + calledImmediatelyBefore: function calledImmediatelyBefore(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] - 1 + ); + }, + + calledImmediatelyAfter: function calledImmediatelyAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] + 1 + ); + }, + + formatters: require("./spy-formatters"), + printf: function (format) { + var spyInstance = this; + var args = slice(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifier) { + formatter = proxyApi.formatters[specifier]; + + if (typeof formatter === "function") { + return String(formatter(spyInstance, args)); + } else if (!isNaN(parseInt(specifier, 10))) { + return sinonFormat(args[specifier - 1]); + } + + return `%${specifier}`; + }); + }, + + resetHistory: function () { + if (this.invoking) { + var err = new Error( + "Cannot reset Sinon function while invoking it. " + + "Move the call to .resetHistory outside of the callback." + ); + err.name = "InvalidResetException"; + throw err; + } + + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.firstArg = null; + this.lastArg = null; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + this.errorsWithCallStack = []; + + if (this.fakes) { + forEach(this.fakes, function (fake) { + fake.resetHistory(); + }); + } + + return this; + }, +}; + +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(proxyApi, "calledOn", true); +delegateToCalls(proxyApi, "alwaysCalledOn", false, "calledOn"); +delegateToCalls(proxyApi, "calledWith", true); +delegateToCalls( + proxyApi, + "calledOnceWith", + true, + "calledWith", + false, + undefined, + 1 +); +delegateToCalls(proxyApi, "calledWithMatch", true); +delegateToCalls(proxyApi, "alwaysCalledWith", false, "calledWith"); +delegateToCalls(proxyApi, "alwaysCalledWithMatch", false, "calledWithMatch"); +delegateToCalls(proxyApi, "calledWithExactly", true); +delegateToCalls( + proxyApi, + "calledOnceWithExactly", + true, + "calledWithExactly", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "calledOnceWithMatch", + true, + "calledWithMatch", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "alwaysCalledWithExactly", + false, + "calledWithExactly" +); +delegateToCalls( + proxyApi, + "neverCalledWith", + false, + "notCalledWith", + false, + function () { + return true; + } +); +delegateToCalls( + proxyApi, + "neverCalledWithMatch", + false, + "notCalledWithMatch", + false, + function () { + return true; + } +); +delegateToCalls(proxyApi, "threw", true); +delegateToCalls(proxyApi, "alwaysThrew", false, "threw"); +delegateToCalls(proxyApi, "returned", true); +delegateToCalls(proxyApi, "alwaysReturned", false, "returned"); +delegateToCalls(proxyApi, "calledWithNew", true); +delegateToCalls(proxyApi, "alwaysCalledWithNew", false, "calledWithNew"); + +function createProxy(func, originalFunc) { + var proxy = wrapFunction(func, originalFunc); + + // Inherit function properties: + extend(proxy, func); + + proxy.prototype = func.prototype; + + extend.nonEnum(proxy, proxyApi); + + return proxy; +} + +function wrapFunction(func, originalFunc) { + var arity = originalFunc.length; + var p; + // Do not change this to use an eval. Projects that depend on sinon block the use of eval. + // ref: https://github.com/sinonjs/sinon/issues/710 + switch (arity) { + /*eslint-disable no-unused-vars, max-len*/ + case 0: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 1: + p = function proxy(a) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 2: + p = function proxy(a, b) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 3: + p = function proxy(a, b, c) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 4: + p = function proxy(a, b, c, d) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 5: + p = function proxy(a, b, c, d, e) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 6: + p = function proxy(a, b, c, d, e, f) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 7: + p = function proxy(a, b, c, d, e, f, g) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 8: + p = function proxy(a, b, c, d, e, f, g, h) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 9: + p = function proxy(a, b, c, d, e, f, g, h, i) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 10: + p = function proxy(a, b, c, d, e, f, g, h, i, j) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 11: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 12: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) { + return p.invoke(func, this, slice(arguments)); + }; + break; + default: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + /*eslint-enable*/ + } + var nameDescriptor = Object.getOwnPropertyDescriptor(originalFunc, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + Object.defineProperty(p, "name", nameDescriptor); + } + extend.nonEnum(p, { + isSinonProxy: true, + + called: false, + notCalled: true, + calledOnce: false, + calledTwice: false, + calledThrice: false, + callCount: 0, + firstCall: null, + firstArg: null, + secondCall: null, + thirdCall: null, + lastCall: null, + lastArg: null, + args: [], + returnValues: [], + thisValues: [], + exceptions: [], + callIds: [], + errorsWithCallStack: [], + }); + return p; +} + +module.exports = createProxy; diff --git a/build/node_modules/sinon/lib/sinon/restore-object.js b/build/node_modules/sinon/lib/sinon/restore-object.js new file mode 100644 index 00000000..5fff0d77 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/restore-object.js @@ -0,0 +1,17 @@ +"use strict"; + +var walkObject = require("./util/core/walk-object"); + +function filter(object, property) { + return object[property].restore && object[property].restore.sinon; +} + +function restore(object, property) { + object[property].restore(); +} + +function restoreObject(object) { + return walkObject(restore, object, filter); +} + +module.exports = restoreObject; diff --git a/build/node_modules/sinon/lib/sinon/sandbox.js b/build/node_modules/sinon/lib/sinon/sandbox.js index 26c8826c..66fbe1c6 100644 --- a/build/node_modules/sinon/lib/sinon/sandbox.js +++ b/build/node_modules/sinon/lib/sinon/sandbox.js @@ -1,170 +1,472 @@ -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var logger = require("@sinonjs/commons").deprecated; +var collectOwnMethods = require("./collect-own-methods"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var match = require("@sinonjs/samsam").createMatcher; +var sinonAssert = require("./assert"); +var sinonClock = require("./util/fake-timers"); +var sinonMock = require("./mock"); +var sinonSpy = require("./spy"); +var sinonStub = require("./stub"); +var sinonFake = require("./fake"); +var valueToString = require("@sinonjs/commons").valueToString; +var fakeServer = require("nise").fakeServer; +var fakeXhr = require("nise").fakeXhr; +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var DEFAULT_LEAK_THRESHOLD = 10000; + +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var reverse = arrayProto.reverse; + +function applyOnEach(fakes, method) { + var matchingFakes = filter(fakes, function (fake) { + return typeof fake[method] === "function"; + }); + + forEach(matchingFakes, function (fake) { + fake[method](); + }); +} + +function Sandbox() { + var sandbox = this; + var fakeRestorers = []; + var promiseLib; + + var collection = []; + var loggedLeakWarning = false; + sandbox.leakThreshold = DEFAULT_LEAK_THRESHOLD; + + function addToCollection(object) { + if ( + push(collection, object) > sandbox.leakThreshold && + !loggedLeakWarning + ) { + // eslint-disable-next-line no-console + logger.printWarning( + "Potential memory leak detected; be sure to call restore() to clean up your sandbox. To suppress this warning, modify the leakThreshold property of your sandbox." + ); + loggedLeakWarning = true; + } + } + + sandbox.assert = sinonAssert.createAssertObject(); + + sandbox.serverPrototype = fakeServer; + + // this is for testing only + sandbox.getFakes = function getFakes() { + return collection; + }; + + // this is for testing only + sandbox.getRestorers = function () { + return fakeRestorers; + }; + + sandbox.createStubInstance = function createStubInstance() { + var stubbed = sinonStub.createStubInstance.apply(null, arguments); + + var ownMethods = collectOwnMethods(stubbed); + + forEach(ownMethods, function (method) { + addToCollection(method); + }); + + usePromiseLibrary(promiseLib, ownMethods); + + return stubbed; + }; + + sandbox.inject = function inject(obj) { + obj.spy = function () { + return sandbox.spy.apply(null, arguments); + }; + + obj.stub = function () { + return sandbox.stub.apply(null, arguments); + }; + + obj.mock = function () { + return sandbox.mock.apply(null, arguments); + }; + + obj.createStubInstance = function () { + return sandbox.createStubInstance.apply(sandbox, arguments); + }; + + obj.fake = function () { + return sandbox.fake.apply(null, arguments); + }; + + obj.replace = function () { + return sandbox.replace.apply(null, arguments); + }; + + obj.replaceSetter = function () { + return sandbox.replaceSetter.apply(null, arguments); + }; + + obj.replaceGetter = function () { + return sandbox.replaceGetter.apply(null, arguments); + }; + + if (sandbox.clock) { + obj.clock = sandbox.clock; + } + + if (sandbox.server) { + obj.server = sandbox.server; + obj.requests = sandbox.server.requests; + } + + obj.match = match; + + return obj; + }; + + sandbox.mock = function mock() { + var m = sinonMock.apply(null, arguments); + + addToCollection(m); + usePromiseLibrary(promiseLib, m); + + return m; + }; + + sandbox.reset = function reset() { + applyOnEach(collection, "reset"); + applyOnEach(collection, "resetHistory"); + }; + + sandbox.resetBehavior = function resetBehavior() { + applyOnEach(collection, "resetBehavior"); + }; + + sandbox.resetHistory = function resetHistory() { + function privateResetHistory(f) { + var method = f.resetHistory || f.reset; + if (method) { + method.call(f); + } + } + + forEach(collection, function (fake) { + if (typeof fake === "function") { + privateResetHistory(fake); return; } - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); + var methods = []; + if (fake.get) { + push(methods, fake.get); } + + if (fake.set) { + push(methods, fake.set); + } + + forEach(methods, privateResetHistory); + }); + }; + + sandbox.restore = function restore() { + if (arguments.length) { + throw new Error( + "sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()" + ); } - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); + reverse(collection); + applyOnEach(collection, "restore"); + collection = []; + + forEach(fakeRestorers, function (restorer) { + restorer(); + }); + fakeRestorers = []; - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } + sandbox.restoreContext(); + }; + + sandbox.restoreContext = function restoreContext() { + var injectedKeys = sandbox.injectedKeys; + var injectInto = sandbox.injectInto; + + if (!injectedKeys) { + return; + } - sandbox.useFakeServer(); + forEach(injectedKeys, function (injectedKey) { + delete injectInto[injectedKey]; + }); + + injectedKeys = []; + }; + + function getFakeRestorer(object, property) { + var descriptor = getPropertyDescriptor(object, property); + + function restorer() { + if (descriptor.isOwn) { + Object.defineProperty(object, property, descriptor); + } else { + delete object[property]; } + } + restorer.object = object; + restorer.property = property; + return restorer; + } - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } + function verifyNotReplaced(object, property) { + forEach(fakeRestorers, function (fakeRestorer) { + if ( + fakeRestorer.object === object && + fakeRestorer.property === property + ) { + throw new TypeError( + `Attempted to replace ${property} which is already replaced` + ); } + }); + } + + sandbox.replace = function replace(object, property, replacement) { + var descriptor = getPropertyDescriptor(object, property); - return sandbox; + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); } - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); + if (typeof replacement === "undefined") { + throw new TypeError("Expected replacement argument to be defined"); + } - return this.add(this.clock); - }, + if (typeof descriptor.get === "function") { + throw new Error("Use sandbox.replaceGetter for replacing getters"); + } - serverPrototype: sinon.fakeServer, + if (typeof descriptor.set === "function") { + throw new Error("Use sandbox.replaceSetter for replacing setters"); + } - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; + if (typeof object[property] !== typeof replacement) { + throw new TypeError( + `Cannot replace ${typeof object[ + property + ]} with ${typeof replacement}` + ); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - if (!proto || !proto.create) { - return null; - } + object[property] = replacement; - this.server = proto.create(); - return this.add(this.server); - }, + return replacement; + }; - inject: function (obj) { - sinon.collection.inject.call(this, obj); + sandbox.replaceGetter = function replaceGetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); - if (this.clock) { - obj.clock = this.clock; - } + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } + if (typeof descriptor.get !== "function") { + throw new Error("`object.property` is not a getter"); + } - obj.match = sinon.match; + verifyNotReplaced(object, property); - return obj; - }, + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, + Object.defineProperty(object, property, { + get: replacement, + configurable: isPropertyConfigurable(object, property), + }); - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, + return replacement; + }; + + sandbox.replaceSetter = function replaceSetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); + if (typeof descriptor.set !== "function") { + throw new Error("`object.property` is not a setter"); + } - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } + verifyNotReplaced(object, property); - return sandbox; - }, + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - match: sinon.match + // eslint-disable-next-line accessor-pairs + Object.defineProperty(object, property, { + set: replacement, + configurable: isPropertyConfigurable(object, property), }); - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; + return replacement; + }; - return sinon.sandbox; - } + function commonPostInitSetup(args, spy) { + var object = args[0]; + var property = args[1]; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + var isSpyingOnEntireObject = + typeof property === "undefined" && typeof object === "object"; - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } + if (isSpyingOnEntireObject) { + var ownMethods = collectOwnMethods(spy); - if (isAMD) { - define(loadDependencies); - return; - } + forEach(ownMethods, function (method) { + addToCollection(method); + }); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + usePromiseLibrary(promiseLib, ownMethods); + } else { + addToCollection(spy); + usePromiseLibrary(promiseLib, spy); + } - if (sinonGlobal) { - makeApi(sinonGlobal); + return spy; } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + + sandbox.spy = function spy() { + var createdSpy = sinonSpy.apply(sinonSpy, arguments); + return commonPostInitSetup(arguments, createdSpy); + }; + + sandbox.stub = function stub() { + var createdStub = sinonStub.apply(sinonStub, arguments); + return commonPostInitSetup(arguments, createdStub); + }; + + // eslint-disable-next-line no-unused-vars + sandbox.fake = function fake(f) { + var s = sinonFake.apply(sinonFake, arguments); + + addToCollection(s); + + return s; + }; + + forEach(Object.keys(sinonFake), function (key) { + var fakeBehavior = sinonFake[key]; + if (typeof fakeBehavior === "function") { + sandbox.fake[key] = function () { + var s = fakeBehavior.apply(fakeBehavior, arguments); + + addToCollection(s); + + return s; + }; + } + }); + + sandbox.useFakeTimers = function useFakeTimers(args) { + var clock = sinonClock.useFakeTimers.call(null, args); + + sandbox.clock = clock; + addToCollection(clock); + + return clock; + }; + + sandbox.verify = function verify() { + applyOnEach(collection, "verify"); + }; + + sandbox.verifyAndRestore = function verifyAndRestore() { + var exception; + + try { + sandbox.verify(); + } catch (e) { + exception = e; + } + + sandbox.restore(); + + if (exception) { + throw exception; + } + }; + + sandbox.useFakeServer = function useFakeServer() { + var proto = sandbox.serverPrototype || fakeServer; + + if (!proto || !proto.create) { + return null; + } + + sandbox.server = proto.create(); + addToCollection(sandbox.server); + + return sandbox.server; + }; + + sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() { + var xhr = fakeXhr.useFakeXMLHttpRequest(); + addToCollection(xhr); + return xhr; + }; + + sandbox.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + collection.promiseLibrary = promiseLibrary; + + return sandbox; + }; +} + +Sandbox.prototype.match = match; + +module.exports = Sandbox; diff --git a/build/node_modules/sinon/lib/sinon/spy-formatters.js b/build/node_modules/sinon/lib/sinon/spy-formatters.js new file mode 100644 index 00000000..58685453 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/spy-formatters.js @@ -0,0 +1,143 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var color = require("./color"); +var match = require("@sinonjs/samsam").createMatcher; +var timesInWords = require("./util/core/times-in-words"); +var sinonFormat = require("./util/core/format"); +var jsDiff = require("diff"); + +var join = arrayProto.join; +var map = arrayProto.map; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function colorSinonMatchText(matcher, calledArg, calledArgMessage) { + var calledArgumentMessage = calledArgMessage; + if (!matcher.test(calledArg)) { + matcher.message = color.red(matcher.message); + if (calledArgumentMessage) { + calledArgumentMessage = color.green(calledArgumentMessage); + } + } + return `${calledArgumentMessage} ${matcher.message}`; +} + +function colorDiffText(diff) { + var objects = map(diff, function (part) { + var text = part.value; + if (part.added) { + text = color.green(text); + } else if (part.removed) { + text = color.red(text); + } + if (diff.length === 2) { + text += " "; // format simple diffs + } + return text; + }); + return join(objects, ""); +} + +function quoteStringValue(value) { + if (typeof value === "string") { + return JSON.stringify(value); + } + return value; +} + +module.exports = { + c: function (spyInstance) { + return timesInWords(spyInstance.callCount); + }, + + n: function (spyInstance) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return spyInstance.toString(); + }, + + D: function (spyInstance, args) { + var message = ""; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // describe multiple calls + if (l > 1) { + message += `\nCall ${i + 1}:`; + } + var calledArgs = spyInstance.getCall(i).args; + var expectedArgs = slice(args); + + for ( + var j = 0; + j < calledArgs.length || j < expectedArgs.length; + ++j + ) { + var calledArg = calledArgs[j]; + var expectedArg = expectedArgs[j]; + if (calledArg) { + calledArg = quoteStringValue(calledArg); + } + + if (expectedArg) { + expectedArg = quoteStringValue(expectedArg); + } + + message += "\n"; + + var calledArgMessage = + j < calledArgs.length ? sinonFormat(calledArg) : ""; + if (match.isMatcher(expectedArg)) { + message += colorSinonMatchText( + expectedArg, + calledArg, + calledArgMessage + ); + } else { + var expectedArgMessage = + j < expectedArgs.length ? sinonFormat(expectedArg) : ""; + var diff = jsDiff.diffJson( + calledArgMessage, + expectedArgMessage + ); + message += colorDiffText(diff); + } + } + } + + return message; + }, + + C: function (spyInstance) { + var calls = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + var stringifiedCall = ` ${spyInstance.getCall(i).toString()}`; + if (/\n/.test(calls[i - 1])) { + stringifiedCall = `\n${stringifiedCall}`; + } + push(calls, stringifiedCall); + } + + return calls.length > 0 ? `\n${join(calls, "\n")}` : ""; + }, + + t: function (spyInstance) { + var objects = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + push(objects, sinonFormat(spyInstance.thisValues[i])); + } + + return join(objects, ", "); + }, + + "*": function (spyInstance, args) { + return join( + map(args, function (arg) { + return sinonFormat(arg); + }), + ", " + ); + }, +}; diff --git a/build/node_modules/sinon/lib/sinon/spy.js b/build/node_modules/sinon/lib/sinon/spy.js index 104f1ec5..637b5781 100644 --- a/build/node_modules/sinon/lib/sinon/spy.js +++ b/build/node_modules/sinon/lib/sinon/spy.js @@ -1,463 +1,194 @@ -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } - - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var isEsModule = require("./util/core/is-es-module"); +var proxyCallUtil = require("./proxy-call-util"); +var walkObject = require("./util/core/walk-object"); +var wrapMethod = require("./util/core/wrap-method"); +var valueToString = require("@sinonjs/commons").valueToString; + +/* cache references to library methods so that they also can be stubbed without problems */ +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var push = arrayProto.push; +var slice = arrayProto.slice; +var filter = Array.prototype.filter; + +var uuid = 0; + +function matches(fake, args, strict) { + var margs = fake.matchingArguments; + if ( + margs.length <= args.length && + deepEqual(slice(args, 0, margs.length), margs) + ) { + return !strict || margs.length === args.length; + } + return false; +} + +// Public API +var spyApi = { + withArgs: function () { + var args = slice(arguments); + var matching = pop(this.matchingFakes(args, true)); + if (matching) { + return matching; } - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } + var original = this; + var fake = this.instantiateFake(); + fake.matchingArguments = args; + fake.parent = this; + push(this.fakes, fake); - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; + forEach(original.args, function (arg, i) { + if (!matches(fake, arg)) { + return; } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; + proxyCallUtil.incrementCallCount(fake); + push(fake.thisValues, original.thisValues[i]); + push(fake.args, arg); + push(fake.returnValues, original.returnValues[i]); + push(fake.exceptions, original.exceptions[i]); + push(fake.callIds, original.callIds[i]); + }); - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, + proxyCallUtil.createCallProperties(fake); - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; + return fake; + }, - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; + // Override proxy default implementation + matchingFakes: function (args, strict) { + return filter.call(this.fakes, function (fake) { + return matches(fake, args, strict); + }); + }, +}; + +/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgWith = spyApi.callArg; +delegateToCalls(spyApi, "callArgOn", false, "callArgOnWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgOnWith = spyApi.callArgOn; +delegateToCalls(spyApi, "throwArg", false, "throwArg", false, function () { + throw new Error( + `${this.toString()} cannot throw arg since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yield", false, "yield", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. +spyApi.invokeCallback = spyApi.yield; +delegateToCalls(spyApi, "yieldOn", false, "yieldOn", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yieldTo", false, "yieldTo", true, function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); +}); +delegateToCalls( + spyApi, + "yieldToOn", + false, + "yieldToOn", + true, + function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); + } +); - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } +function createSpy(func) { + var name; + var funk = func; - return "%" + specifyer; - }); - } + if (typeof funk !== "function") { + funk = function () { + return; }; + } else { + name = functionName(funk); + } - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } + var proxy = createProxy(funk, funk); - var currentCall; - var matches = 0; + // Inherit spy API: + extend.nonEnum(proxy, spyApi); + extend.nonEnum(proxy, { + displayName: name || "spy", + fakes: [], + instantiateFake: createSpy, + id: `spy#${uuid++}`, + }); + return proxy; +} - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); +function spy(object, property, types) { + var descriptor, methodDesc; - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be spied"); + } - if (matchAny) { - return true; - } - } - } + if (!property && typeof object === "function") { + return createSpy(object); + } - return matches === this.callCount; - }; - } + if (!property && typeof object === "object") { + return walkObject(spy, object); + } - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); + if (!object && !property) { + return createSpy(function () { + return; }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); + if (!types) { + return wrapMethod(object, property, createSpy(object[property])); } - if (isAMD) { - define(loadDependencies); - return; - } + descriptor = {}; + methodDesc = getPropertyDescriptor(object, property); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + forEach(types, function (type) { + descriptor[type] = createSpy(methodDesc[type]); + }); - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return wrapMethod(object, property, descriptor); +} + +extend(spy, spyApi); +module.exports = spy; diff --git a/build/node_modules/sinon/lib/sinon/stub.js b/build/node_modules/sinon/lib/sinon/stub.js index 903081ea..a9b324e6 100644 --- a/build/node_modules/sinon/lib/sinon/stub.js +++ b/build/node_modules/sinon/lib/sinon/stub.js @@ -1,200 +1,277 @@ -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - * @depend walk.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - sinon.walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); - } - - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); - } - - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var behavior = require("./behavior"); +var behaviors = require("./default-behaviors"); +var createProxy = require("./proxy"); +var functionName = require("@sinonjs/commons").functionName; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var isNonExistentProperty = require("./util/core/is-non-existent-property"); +var spy = require("./spy"); +var extend = require("./util/core/extend"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isEsModule = require("./util/core/is-es-module"); +var wrapMethod = require("./util/core/wrap-method"); +var throwOnFalsyObject = require("./throw-on-falsy-object"); +var valueToString = require("@sinonjs/commons").valueToString; +var walkObject = require("./util/core/walk-object"); + +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var slice = arrayProto.slice; +var sort = arrayProto.sort; + +var uuid = 0; + +function createStub(originalFunc) { + var proxy; + + function functionStub() { + var args = slice(arguments); + var matchings = proxy.matchingFakes(args); + + var fnStub = + pop( + sort(matchings, function (a, b) { + return ( + a.matchingArguments.length - b.matchingArguments.length + ); + }) + ) || proxy; + return getCurrentBehavior(fnStub).invoke(this, arguments); + } - var uuid = 0; + proxy = createProxy(functionStub, originalFunc || functionStub); + // Inherit spy API: + extend.nonEnum(proxy, spy); + // Inherit stub API: + extend.nonEnum(proxy, stub); + + var name = originalFunc ? functionName(originalFunc) : null; + extend.nonEnum(proxy, { + fakes: [], + instantiateFake: createStub, + displayName: name || "stub", + defaultBehavior: null, + behaviors: [], + id: `stub#${uuid++}`, + }); + + return proxy; +} + +function stub(object, property) { + if (arguments.length > 2) { + throw new TypeError( + "stub(obj, 'meth', fn) has been removed, see documentation" + ); + } - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be stubbed"); + } - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; + throwOnFalsyObject.apply(null, arguments); - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; + if (isNonExistentProperty(object, property)) { + throw new TypeError( + `Cannot stub non-existent property ${valueToString(property)}` + ); + } - functionStub.defaultBehavior = null; - functionStub.behaviors = []; + var actualDescriptor = getPropertyDescriptor(object, property); - return functionStub; - }, + assertValidPropertyDescriptor(actualDescriptor, property); - resetBehavior: function () { - var i; + var isObjectOrFunction = + typeof object === "object" || typeof object === "function"; + var isStubbingEntireObject = + typeof property === "undefined" && isObjectOrFunction; + var isCreatingNewStub = !object && typeof property === "undefined"; + var isStubbingNonFuncProperty = + isObjectOrFunction && + typeof property !== "undefined" && + (typeof actualDescriptor === "undefined" || + typeof actualDescriptor.value !== "function"); - this.defaultBehavior = null; - this.behaviors = []; + if (isStubbingEntireObject) { + return walkObject(stub, object); + } - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; + if (isCreatingNewStub) { + return createStub(); + } - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, + var func = + typeof actualDescriptor.value === "function" + ? actualDescriptor.value + : null; + var s = createStub(func); + + extend.nonEnum(s, { + rootObj: object, + propName: property, + shadowsPropOnPrototype: !actualDescriptor.isOwn, + restore: function restore() { + if (actualDescriptor !== undefined && actualDescriptor.isOwn) { + Object.defineProperty(object, property, actualDescriptor); + return; + } - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } + delete object[property]; + }, + }); - return this.behaviors[index]; - }, + return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s); +} - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, +stub.createStubInstance = function (constructor, overrides) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, + var stubbedObject = stub(Object.create(constructor.prototype)); - onThirdCall: function onThirdCall() { - return this.onCall(2); + forEach(Object.keys(overrides || {}), function (propertyName) { + if (propertyName in stubbedObject) { + var value = overrides[propertyName]; + if (value && value.createStubInstance) { + stubbedObject[propertyName] = value; + } else { + stubbedObject[propertyName].returns(value); } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; + } else { + throw new Error( + `Cannot stub ${propertyName}. Property does not exist!` + ); } + }); + return stubbedObject; +}; - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } +function assertValidPropertyDescriptor(descriptor, property) { + if (!descriptor || !property) { + return; + } + if (!descriptor.configurable && !descriptor.writable) { + throw new TypeError( + `Descriptor for property ${property} is non-configurable and non-writable` + ); + } + if ((descriptor.get || descriptor.set) && !descriptor.configurable) { + throw new TypeError( + `Descriptor for accessor property ${property} is non-configurable` + ); + } + if (isDataDescriptor(descriptor) && !descriptor.writable) { + throw new TypeError( + `Descriptor for data property ${property} is non-writable` + ); + } +} + +function isDataDescriptor(descriptor) { + return ( + !descriptor.value && + !descriptor.writable && + !descriptor.set && + !descriptor.get + ); +} + +/*eslint-disable no-use-before-define*/ +function getParentBehaviour(stubInstance) { + return stubInstance.parent && getCurrentBehavior(stubInstance.parent); +} + +function getDefaultBehavior(stubInstance) { + return ( + stubInstance.defaultBehavior || + getParentBehaviour(stubInstance) || + behavior.create(stubInstance) + ); +} + +function getCurrentBehavior(stubInstance) { + var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1]; + return currentBehavior && currentBehavior.isPresent() + ? currentBehavior + : getDefaultBehavior(stubInstance); +} +/*eslint-enable no-use-before-define*/ + +var proto = { + resetBehavior: function () { + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + delete this.throwArgAt; + delete this.resolveArgAt; + delete this.fakeFn; + this.returnThis = false; + this.resolveThis = false; + + forEach(this.fakes, function (fake) { + fake.resetBehavior(); + }); + }, + + reset: function () { + this.resetHistory(); + this.resetBehavior(); + }, + + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = behavior.create(this); } - sinon.extend(stub, proto); - sinon.stub = stub; + return this.behaviors[index]; + }, - return stub; - } + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } + onThirdCall: function onThirdCall() { + return this.onCall(2); + }, - if (isAMD) { - define(loadDependencies); - return; + withArgs: function withArgs() { + var fake = spy.withArgs.apply(this, arguments); + if (this.defaultBehavior && this.defaultBehavior.promiseLibrary) { + fake.defaultBehavior = + fake.defaultBehavior || behavior.create(fake); + fake.defaultBehavior.promiseLibrary = + this.defaultBehavior.promiseLibrary; + } + return fake; + }, +}; + +forEach(Object.keys(behavior), function (method) { + if ( + hasOwnProperty(behavior, method) && + !hasOwnProperty(proto, method) && + method !== "create" && + method !== "invoke" + ) { + proto[method] = behavior.createBehavior(method); } +}); - if (isNode) { - loadDependencies(require, module.exports, module); - return; +forEach(Object.keys(behaviors), function (method) { + if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) { + behavior.addBehavior(stub, method, behaviors[method]); } +}); - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); +extend(stub, proto); +module.exports = stub; diff --git a/build/node_modules/sinon/lib/sinon/test.js b/build/node_modules/sinon/lib/sinon/test.js deleted file mode 100644 index 7eed91a8..00000000 --- a/build/node_modules/sinon/lib/sinon/test.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); - } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef diff --git a/build/node_modules/sinon/lib/sinon/test_case.js b/build/node_modules/sinon/lib/sinon/test_case.js deleted file mode 100644 index c56f94a0..00000000 --- a/build/node_modules/sinon/lib/sinon/test_case.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/throw-on-falsy-object.js b/build/node_modules/sinon/lib/sinon/throw-on-falsy-object.js new file mode 100644 index 00000000..d8f182a8 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/throw-on-falsy-object.js @@ -0,0 +1,13 @@ +"use strict"; +var valueToString = require("@sinonjs/commons").valueToString; + +function throwOnFalsyObject(object, property) { + if (property && !object) { + var type = object === null ? "null" : "undefined"; + throw new Error( + `Trying to stub property '${valueToString(property)}' of ${type}` + ); + } +} + +module.exports = throwOnFalsyObject; diff --git a/build/node_modules/sinon/lib/sinon/times_in_words.js b/build/node_modules/sinon/lib/sinon/times_in_words.js deleted file mode 100644 index 61dc2499..00000000 --- a/build/node_modules/sinon/lib/sinon/times_in_words.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/typeOf.js b/build/node_modules/sinon/lib/sinon/typeOf.js deleted file mode 100644 index afb41ff5..00000000 --- a/build/node_modules/sinon/lib/sinon/typeOf.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - } - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/util/core.js b/build/node_modules/sinon/lib/sinon/util/core.js deleted file mode 100644 index d872d6c1..00000000 --- a/build/node_modules/sinon/lib/sinon/util/core.js +++ /dev/null @@ -1,401 +0,0 @@ -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - "use strict"; - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/lib/sinon/util/core/default-config.js b/build/node_modules/sinon/lib/sinon/util/core/default-config.js new file mode 100644 index 00000000..f177987b --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/default-config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + injectInto: null, + properties: [ + "spy", + "stub", + "mock", + "clock", + "server", + "requests", + "fake", + "replace", + "replaceSetter", + "replaceGetter", + "createStubInstance", + ], + useFakeTimers: true, + useFakeServer: true, +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/export-async-behaviors.js b/build/node_modules/sinon/lib/sinon/util/core/export-async-behaviors.js new file mode 100644 index 00000000..b345870f --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/export-async-behaviors.js @@ -0,0 +1,22 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var reduce = arrayProto.reduce; + +module.exports = function exportAsyncBehaviors(behaviorMethods) { + return reduce( + Object.keys(behaviorMethods), + function (acc, method) { + // need to avoid creating another async versions of the newly added async methods + if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { + acc[`${method}Async`] = function () { + var result = behaviorMethods[method].apply(this, arguments); + this.callbackAsync = true; + return result; + }; + } + return acc; + }, + {} + ); +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/extend.js b/build/node_modules/sinon/lib/sinon/util/core/extend.js new file mode 100644 index 00000000..dad0d588 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/extend.js @@ -0,0 +1,154 @@ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; + +var join = arrayProto.join; +var push = arrayProto.push; + +// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug +var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9"; + }, + }; + + var result = []; + for (var prop in obj) { + if (hasOwnProperty(obj, prop)) { + push(result, obj[prop]()); + } + } + return join(result, "") !== "0123456789"; +})(); + +function extendCommon(target, sources, doCopy) { + var source, i, prop; + + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + for (prop in source) { + if (hasOwnProperty(source, prop)) { + doCopy(target, source, prop); + } + } + + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if ( + hasDontEnumBug && + hasOwnProperty(source, "toString") && + source.toString !== target.toString + ) { + target.toString = source.toString; + } + } + + return target; +} + +/** Public: Extend target in place with all (own) properties, except 'name' when [[writable]] is false, + * from sources in-order. Thus, last source will override properties in previous sources. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports = function extend(target, ...sources) { + return extendCommon( + target, + sources, + function copyValue(dest, source, prop) { + var destOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + dest, + prop + ); + var sourceOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + source, + prop + ); + + if (prop === "name" && !destOwnPropertyDescriptor.writable) { + return; + } + const descriptors = { + configurable: sourceOwnPropertyDescriptor.configurable, + enumerable: sourceOwnPropertyDescriptor.enumerable, + }; + /* + if the sorce has an Accessor property copy over the accessor functions (get and set) + data properties has writable attribute where as accessor property don't + REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties + */ + + if (hasOwnProperty(sourceOwnPropertyDescriptor, "writable")) { + descriptors.writable = sourceOwnPropertyDescriptor.writable; + descriptors.value = sourceOwnPropertyDescriptor.value; + } else { + if (sourceOwnPropertyDescriptor.get) { + descriptors.get = + sourceOwnPropertyDescriptor.get.bind(dest); + } + if (sourceOwnPropertyDescriptor.set) { + descriptors.set = + sourceOwnPropertyDescriptor.set.bind(dest); + } + } + Object.defineProperty(dest, prop, descriptors); + } + ); +}; + +/** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. Define the properties as non enumerable. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports.nonEnum = function extendNonEnum(target, ...sources) { + return extendCommon( + target, + sources, + function copyProperty(dest, source, prop) { + Object.defineProperty(dest, prop, { + value: source[prop], + enumerable: false, + configurable: true, + writable: true, + }); + } + ); +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/format.js b/build/node_modules/sinon/lib/sinon/util/core/format.js new file mode 100644 index 00000000..033c145d --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/format.js @@ -0,0 +1,22 @@ +"use strict"; + +var inspect = require("util").inspect; +var customFormatter; + +function format() { + if (customFormatter) { + return customFormatter.apply(null, arguments); + } + + return inspect.apply(inspect, arguments); +} + +format.setFormatter = function (aCustomFormatter) { + if (typeof aCustomFormatter !== "function") { + throw new Error("format.setFormatter must be called with a function"); + } + + customFormatter = aCustomFormatter; +}; + +module.exports = format; diff --git a/build/node_modules/sinon/lib/sinon/util/core/function-to-string.js b/build/node_modules/sinon/lib/sinon/util/core/function-to-string.js new file mode 100644 index 00000000..b54092df --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/function-to-string.js @@ -0,0 +1,25 @@ +"use strict"; + +module.exports = function toString() { + var i, prop, thisValue; + if (this.getCall && this.callCount) { + i = this.callCount; + + while (i--) { + thisValue = this.getCall(i).thisValue; + + // eslint-disable-next-line guard-for-in + for (prop in thisValue) { + try { + if (thisValue[prop] === this) { + return prop; + } + } catch (e) { + // no-op - accessing props can throw an error, nothing to do here + } + } + } + } + + return this.displayName || "sinon fake"; +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/get-next-tick.js b/build/node_modules/sinon/lib/sinon/util/core/get-next-tick.js new file mode 100644 index 00000000..9f730e41 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/get-next-tick.js @@ -0,0 +1,18 @@ +"use strict"; + +/* istanbul ignore next : not testing that setTimeout works */ +function nextTick(callback) { + setTimeout(callback, 0); +} + +module.exports = function getNextTick(process, setImmediate) { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } + + if (typeof setImmediate === "function") { + return setImmediate; + } + + return nextTick; +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/get-property-descriptor.js b/build/node_modules/sinon/lib/sinon/util/core/get-property-descriptor.js new file mode 100644 index 00000000..776e387e --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/get-property-descriptor.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = function getPropertyDescriptor(object, property) { + var proto = object; + var descriptor; + var isOwn = Boolean( + object && Object.getOwnPropertyDescriptor(object, property) + ); + + while ( + proto && + !(descriptor = Object.getOwnPropertyDescriptor(proto, property)) + ) { + proto = Object.getPrototypeOf(proto); + } + + if (descriptor) { + descriptor.isOwn = isOwn; + } + + return descriptor; +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/is-es-module.js b/build/node_modules/sinon/lib/sinon/util/core/is-es-module.js new file mode 100644 index 00000000..7a015aa8 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/is-es-module.js @@ -0,0 +1,21 @@ +"use strict"; + +/** + * Verify if an object is a ECMAScript Module + * + * As the exports from a module is immutable we cannot alter the exports + * using spies or stubs. Let the consumer know this to avoid bug reports + * on weird error messages. + * + * @param {object} object The object to examine + * + * @returns {boolean} true when the object is a module + */ +module.exports = function (object) { + return ( + object && + typeof Symbol !== "undefined" && + object[Symbol.toStringTag] === "Module" && + Object.isSealed(object) + ); +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/is-non-existent-property.js b/build/node_modules/sinon/lib/sinon/util/core/is-non-existent-property.js new file mode 100644 index 00000000..f72451ad --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/is-non-existent-property.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * @param {*} object + * @param {string} property + * @returns {boolean} whether a prop exists in the prototype chain + */ +function isNonExistentProperty(object, property) { + return Boolean( + object && typeof property !== "undefined" && !(property in object) + ); +} + +module.exports = isNonExistentProperty; diff --git a/build/node_modules/sinon/lib/sinon/util/core/is-property-configurable.js b/build/node_modules/sinon/lib/sinon/util/core/is-property-configurable.js new file mode 100644 index 00000000..9ed1a681 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/is-property-configurable.js @@ -0,0 +1,11 @@ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); + +function isPropertyConfigurable(obj, propName) { + var propertyDescriptor = getPropertyDescriptor(obj, propName); + + return propertyDescriptor ? propertyDescriptor.configurable : true; +} + +module.exports = isPropertyConfigurable; diff --git a/build/node_modules/sinon/lib/sinon/util/core/is-restorable.js b/build/node_modules/sinon/lib/sinon/util/core/is-restorable.js new file mode 100644 index 00000000..c717b33d --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/is-restorable.js @@ -0,0 +1,11 @@ +"use strict"; + +function isRestorable(obj) { + return ( + typeof obj === "function" && + typeof obj.restore === "function" && + obj.restore.sinon + ); +} + +module.exports = isRestorable; diff --git a/build/node_modules/sinon/lib/sinon/util/core/next-tick.js b/build/node_modules/sinon/lib/sinon/util/core/next-tick.js new file mode 100644 index 00000000..5bbc7fb3 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/next-tick.js @@ -0,0 +1,6 @@ +"use strict"; + +var globalObject = require("@sinonjs/commons").global; +var getNextTick = require("./get-next-tick"); + +module.exports = getNextTick(globalObject.process, globalObject.setImmediate); diff --git a/build/node_modules/sinon/lib/sinon/util/core/times-in-words.js b/build/node_modules/sinon/lib/sinon/util/core/times-in-words.js new file mode 100644 index 00000000..c88bf4be --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/times-in-words.js @@ -0,0 +1,7 @@ +"use strict"; + +var array = [null, "once", "twice", "thrice"]; + +module.exports = function timesInWords(count) { + return array[count] || `${count || 0} times`; +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/use-promise-library.js b/build/node_modules/sinon/lib/sinon/util/core/use-promise-library.js new file mode 100644 index 00000000..007858eb --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/use-promise-library.js @@ -0,0 +1,21 @@ +"use strict"; + +var forEach = Array.prototype.forEach; + +function usePromiseLibrary(library, fakes) { + if (typeof library === "undefined") { + return; + } + + if (Array.isArray(fakes)) { + forEach.call(fakes, usePromiseLibrary.bind(null, library)); + + return; + } + + if (typeof fakes.usingPromise === "function") { + fakes.usingPromise(library); + } +} + +module.exports = usePromiseLibrary; diff --git a/build/node_modules/sinon/lib/sinon/util/core/walk-object.js b/build/node_modules/sinon/lib/sinon/util/core/walk-object.js new file mode 100644 index 00000000..0feb8d60 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/walk-object.js @@ -0,0 +1,45 @@ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var walk = require("./walk"); + +function walkObject(predicate, object, filter) { + var called = false; + var name = functionName(predicate); + + if (!object) { + throw new Error( + `Trying to ${name} object but received ${String(object)}` + ); + } + + walk(object, function (prop, propOwner) { + // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object + // is not Object.prototype + if ( + propOwner !== Object.prototype && + prop !== "constructor" && + typeof getPropertyDescriptor(propOwner, prop).value === "function" + ) { + if (filter) { + if (filter(object, prop)) { + called = true; + predicate(object, prop); + } + } else { + called = true; + predicate(object, prop); + } + } + }); + + if (!called) { + throw new Error(`Expected to ${name} methods on object but found none`); + } + + return object; +} + +module.exports = walkObject; diff --git a/build/node_modules/sinon/lib/sinon/util/core/walk.js b/build/node_modules/sinon/lib/sinon/util/core/walk.js new file mode 100644 index 00000000..30715b5a --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/walk.js @@ -0,0 +1,49 @@ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.array.forEach; + +function walkInternal(obj, iterator, context, originalObj, seen) { + var proto, prop; + + if (typeof Object.getOwnPropertyNames !== "function") { + // We explicitly want to enumerate through all of the prototype's properties + // in this case, therefore we deliberately leave out an own property check. + /* eslint-disable-next-line guard-for-in */ + for (prop in obj) { + iterator.call(context, obj[prop], prop, obj); + } + + return; + } + + forEach(Object.getOwnPropertyNames(obj), function (k) { + if (seen[k] !== true) { + seen[k] = true; + var target = + typeof Object.getOwnPropertyDescriptor(obj, k).get === + "function" + ? originalObj + : obj; + iterator.call(context, k, target); + } + }); + + proto = Object.getPrototypeOf(obj); + if (proto) { + walkInternal(proto, iterator, context, originalObj, seen); + } +} + +/* Walks the prototype chain of an object and iterates over every own property + * name encountered. The iterator is called in the same fashion that Array.prototype.forEach + * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional + * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will + * default to using a simple for..in loop. + * + * obj - The object to walk the prototype chain for. + * iterator - The function to be called on each pass of the walk. + * context - (Optional) When given, the iterator will be called with this object as the receiver. + */ +module.exports = function walk(obj, iterator, context) { + return walkInternal(obj, iterator, context, obj, {}); +}; diff --git a/build/node_modules/sinon/lib/sinon/util/core/wrap-method.js b/build/node_modules/sinon/lib/sinon/util/core/wrap-method.js new file mode 100644 index 00000000..fc2cd481 --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/core/wrap-method.js @@ -0,0 +1,236 @@ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var extend = require("./extend"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var valueToString = require("@sinonjs/commons").valueToString; +var push = require("@sinonjs/commons").prototypes.array.push; + +function isFunction(obj) { + return ( + typeof obj === "function" || + Boolean(obj && obj.constructor && obj.call && obj.apply) + ); +} + +function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwnProperty(target, prop)) { + target[prop] = source[prop]; + } + } +} + +function getAccessor(object, property, method) { + var accessors = ["get", "set"]; + var descriptor = getPropertyDescriptor(object, property); + + for (var i = 0; i < accessors.length; i++) { + if ( + descriptor[accessors[i]] && + descriptor[accessors[i]].name === method.name + ) { + return accessors[i]; + } + } + return null; +} + +// Cheap way to detect if we have ES5 support. +var hasES5Support = "keys" in Object; + +module.exports = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } + + if (typeof method !== "function" && typeof method !== "object") { + throw new TypeError( + "Method wrapper should be a function or a property descriptor" + ); + } + + function checkWrappedMethod(wrappedMethod) { + var error; + + if (!isFunction(wrappedMethod)) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${valueToString( + property + )} as function` + ); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already wrapped` + ); + } else if (wrappedMethod.calledBefore) { + var verb = wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already ${verb}` + ); + } + + if (error) { + if (wrappedMethod && wrappedMethod.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethod.stackTraceError.stack}`; + } + throw error; + } + } + + var error, + wrappedMethods, + wrappedMethod, + i, + wrappedMethodDesc, + target, + accessor; + + wrappedMethods = []; + + function simplePropertyAssignment() { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } + + // Firefox has a problem when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty + ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods + : hasOwnProperty(object, property); + + if (hasES5Support) { + var methodDesc = + typeof method === "function" ? { value: method } : method; + wrappedMethodDesc = getPropertyDescriptor(object, property); + + if (!wrappedMethodDesc) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${property} as function` + ); + } else if ( + wrappedMethodDesc.restore && + wrappedMethodDesc.restore.sinon + ) { + error = new TypeError( + `Attempted to wrap ${property} which is already wrapped` + ); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethodDesc.stackTraceError.stack}`; + } + throw error; + } + + var types = Object.keys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + push(wrappedMethods, wrappedMethod); + } + + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + + // catch failing assignment + // this is the converse of the check in `.restore` below + if (typeof method === "function" && object[property] !== method) { + // correct any wrongdoings caused by the defineProperty call above, + // such as adding new items (if object was a Storage object) + delete object[property]; + simplePropertyAssignment(); + } + } else { + simplePropertyAssignment(); + } + + extendObjectWithWrappedMethods(); + + function extendObjectWithWrappedMethods() { + for (i = 0; i < wrappedMethods.length; i++) { + accessor = getAccessor(object, property, wrappedMethods[i]); + target = accessor ? method[accessor] : method; + extend.nonEnum(target, { + displayName: property, + wrappedMethod: wrappedMethods[i], + + // Set up an Error object for a stack trace which can be used later to find what line of + // code the original method was created on. + stackTraceError: new Error("Stack Trace for original"), + + restore: restore, + }); + + target.restore.sinon = true; + if (!hasES5Support) { + mirrorProperties(target, wrappedMethod); + } + } + } + + function restore() { + accessor = getAccessor(object, property, this.wrappedMethod); + var descriptor; + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (accessor) { + if (!owned) { + try { + // In some cases `delete` may throw an error + delete object[property][accessor]; + } catch (e) {} // eslint-disable-line no-empty + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + descriptor[accessor] = wrappedMethodDesc[accessor]; + Object.defineProperty(object, property, descriptor); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property][accessor] = this.wrappedMethod; + } + } else { + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property][accessor] === target) { + object[property][accessor] = this.wrappedMethod; + } + } + } else { + if (!owned) { + try { + delete object[property]; + } catch (e) {} // eslint-disable-line no-empty + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property] = this.wrappedMethod; + } + } else { + if (object[property] === target) { + object[property] = this.wrappedMethod; + } + } + } + } + + return method; +}; diff --git a/build/node_modules/sinon/lib/sinon/util/event.js b/build/node_modules/sinon/lib/sinon/util/event.js deleted file mode 100644 index 6d60eddc..00000000 --- a/build/node_modules/sinon/lib/sinon/util/event.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - "use strict"; - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/lib/sinon/util/fake-timers.js b/build/node_modules/sinon/lib/sinon/util/fake-timers.js new file mode 100644 index 00000000..47fb16cf --- /dev/null +++ b/build/node_modules/sinon/lib/sinon/util/fake-timers.js @@ -0,0 +1,78 @@ +"use strict"; + +var extend = require("./core/extend"); +var FakeTimers = require("@sinonjs/fake-timers"); +var globalObject = require("@sinonjs/commons").global; + +function createClock(config, globalCtx) { + var FakeTimersCtx = FakeTimers; + if (globalCtx !== null && typeof globalCtx === "object") { + FakeTimersCtx = FakeTimers.withGlobal(globalCtx); + } + var clock = FakeTimersCtx.install(config); + clock.restore = clock.uninstall; + return clock; +} + +function addIfDefined(obj, globalPropName) { + var globalProp = globalObject[globalPropName]; + if (typeof globalProp !== "undefined") { + obj[globalPropName] = globalProp; + } +} + +/** + * @param {number|Date|object} dateOrConfig The unix epoch value to install with (default 0) + * @returns {object} Returns a lolex clock instance + */ +exports.useFakeTimers = function (dateOrConfig) { + var hasArguments = typeof dateOrConfig !== "undefined"; + var argumentIsDateLike = + (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) && + arguments.length === 1; + var argumentIsObject = + dateOrConfig !== null && + typeof dateOrConfig === "object" && + arguments.length === 1; + + if (!hasArguments) { + return createClock({ + now: 0, + }); + } + + if (argumentIsDateLike) { + return createClock({ + now: dateOrConfig, + }); + } + + if (argumentIsObject) { + var config = extend.nonEnum({}, dateOrConfig); + var globalCtx = config.global; + delete config.global; + return createClock(config, globalCtx); + } + + throw new TypeError( + "useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon" + ); +}; + +exports.clock = { + create: function (now) { + return FakeTimers.createClock(now); + }, +}; + +var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date, +}; +addIfDefined(timers, "setImmediate"); +addIfDefined(timers, "clearImmediate"); + +exports.timers = timers; diff --git a/build/node_modules/sinon/lib/sinon/util/fake_server.js b/build/node_modules/sinon/lib/sinon/util/fake_server.js deleted file mode 100644 index 32be9c83..00000000 --- a/build/node_modules/sinon/lib/sinon/util/fake_server.js +++ /dev/null @@ -1,247 +0,0 @@ -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - "use strict"; - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js b/build/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js deleted file mode 100644 index 730555e8..00000000 --- a/build/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - "use strict"; - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/lib/sinon/util/fake_timers.js b/build/node_modules/sinon/lib/sinon/util/fake_timers.js deleted file mode 100644 index 7e11536c..00000000 --- a/build/node_modules/sinon/lib/sinon/util/fake_timers.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - "use strict"; - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js b/build/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js deleted file mode 100644 index 24bd6ec1..00000000 --- a/build/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js +++ /dev/null @@ -1,239 +0,0 @@ -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - "use strict"; - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - "use strict"; - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); diff --git a/build/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js b/build/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js deleted file mode 100644 index 1598007d..00000000 --- a/build/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js +++ /dev/null @@ -1,716 +0,0 @@ -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - "use strict"; - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); diff --git a/build/node_modules/sinon/lib/sinon/util/timers_ie.js b/build/node_modules/sinon/lib/sinon/util/timers_ie.js deleted file mode 100644 index f1eb9fc1..00000000 --- a/build/node_modules/sinon/lib/sinon/util/timers_ie.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ diff --git a/build/node_modules/sinon/lib/sinon/util/xdr_ie.js b/build/node_modules/sinon/lib/sinon/util/xdr_ie.js deleted file mode 100644 index 13bbfc52..00000000 --- a/build/node_modules/sinon/lib/sinon/util/xdr_ie.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/lib/sinon/util/xhr_ie.js b/build/node_modules/sinon/lib/sinon/util/xhr_ie.js deleted file mode 100644 index fe72894c..00000000 --- a/build/node_modules/sinon/lib/sinon/util/xhr_ie.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/lib/sinon/walk.js b/build/node_modules/sinon/lib/sinon/walk.js deleted file mode 100644 index b03d2bd4..00000000 --- a/build/node_modules/sinon/lib/sinon/walk.js +++ /dev/null @@ -1,79 +0,0 @@ -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - "use strict"; - - function makeApi(sinon) { - function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; - - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ - - return; - } - - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); - - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } - } - - /* Public: walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ - function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); - } - - sinon.walk = walk; - return sinon.walk; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); diff --git a/build/node_modules/sinon/node_modules/supports-color/browser.js b/build/node_modules/sinon/node_modules/supports-color/browser.js new file mode 100644 index 00000000..62afa3a7 --- /dev/null +++ b/build/node_modules/sinon/node_modules/supports-color/browser.js @@ -0,0 +1,5 @@ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; diff --git a/build/node_modules/sinon/node_modules/supports-color/index.js b/build/node_modules/sinon/node_modules/supports-color/index.js new file mode 100644 index 00000000..6fada390 --- /dev/null +++ b/build/node_modules/sinon/node_modules/supports-color/index.js @@ -0,0 +1,135 @@ +'use strict'; +const os = require('os'); +const tty = require('tty'); +const hasFlag = require('has-flag'); + +const {env} = process; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; +} + +if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === 'false') { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; + } + + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) +}; diff --git a/build/node_modules/sinon/node_modules/supports-color/license b/build/node_modules/sinon/node_modules/supports-color/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/sinon/node_modules/supports-color/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/sinon/node_modules/supports-color/package.json b/build/node_modules/sinon/node_modules/supports-color/package.json new file mode 100644 index 00000000..7005c404 --- /dev/null +++ b/build/node_modules/sinon/node_modules/supports-color/package.json @@ -0,0 +1,85 @@ +{ + "_from": "supports-color@^7.2.0", + "_id": "supports-color@7.2.0", + "_inBundle": false, + "_integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "_location": "/sinon/supports-color", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "supports-color@^7.2.0", + "name": "supports-color", + "escapedName": "supports-color", + "rawSpec": "^7.2.0", + "saveSpec": null, + "fetchSpec": "^7.2.0" + }, + "_requiredBy": [ + "/sinon" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-color/-/supports-color-7.2.0.tgz", + "_shasum": "1b7dcdcb32b8138801b3e478ba6a51caa89648da", + "_spec": "supports-color@^7.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/chalk/supports-color/issues" + }, + "bundleDependencies": false, + "dependencies": { + "has-flag": "^4.0.0" + }, + "deprecated": false, + "description": "Detect whether a terminal supports color", + "devDependencies": { + "ava": "^1.4.1", + "import-fresh": "^3.0.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "browser.js" + ], + "homepage": "https://github.com/chalk/supports-color#readme", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "supports", + "capability", + "detect", + "truecolor", + "16m" + ], + "license": "MIT", + "name": "supports-color", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/supports-color.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "7.2.0" +} diff --git a/build/node_modules/sinon/node_modules/supports-color/readme.md b/build/node_modules/sinon/node_modules/supports-color/readme.md new file mode 100644 index 00000000..36542285 --- /dev/null +++ b/build/node_modules/sinon/node_modules/supports-color/readme.md @@ -0,0 +1,76 @@ +# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) + +> Detect whether a terminal supports color + + +## Install + +``` +$ npm install supports-color +``` + + +## Usage + +```js +const supportsColor = require('supports-color'); + +if (supportsColor.stdout) { + console.log('Terminal stdout supports color'); +} + +if (supportsColor.stdout.has256) { + console.log('Terminal stdout supports 256 colors'); +} + +if (supportsColor.stderr.has16m) { + console.log('Terminal stderr supports 16 million colors (truecolor)'); +} +``` + + +## API + +Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. + +The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: + +- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) +- `.level = 2` and `.has256 = true`: 256 color support +- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) + + +## Info + +It obeys the `--color` and `--no-color` CLI flags. + +For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. + +Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. + + +## Related + +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            + +--- diff --git a/build/node_modules/sinon/package.json b/build/node_modules/sinon/package.json index 5aaf1cf8..b2c47e4a 100644 --- a/build/node_modules/sinon/package.json +++ b/build/node_modules/sinon/package.json @@ -1,750 +1,173 @@ { - "_from": "sinon@1.17.3", - "_id": "sinon@1.17.3", + "_from": "sinon@13.0.1", + "_id": "sinon@13.0.1", "_inBundle": false, - "_integrity": "sha1-RNZLx0jQI4gARsFUPO/Oo0xH0X4=", + "_integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", "_location": "/sinon", - "_phantomChildren": {}, + "_phantomChildren": { + "has-flag": "4.0.0" + }, "_requested": { "type": "version", "registry": true, - "raw": "sinon@1.17.3", + "raw": "sinon@13.0.1", "name": "sinon", "escapedName": "sinon", - "rawSpec": "1.17.3", + "rawSpec": "13.0.1", "saveSpec": null, - "fetchSpec": "1.17.3" + "fetchSpec": "13.0.1" }, "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.3.tgz", - "_shasum": "44d64bc748d023880046c1543cefcea34c47d17e", - "_spec": "sinon@1.17.3", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sinon/-/sinon-13.0.1.tgz", + "_shasum": "2a568beca2084c48985dd98e276e065c81738e3c", + "_spec": "sinon@13.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", "author": { "name": "Christian Johansen" }, + "browser": "./lib/sinon.js", "bugs": { - "url": "http://github.com/cjohansen/Sinon.JS/issues" + "url": "http://github.com/sinonjs/sinon/issues" }, "bundleDependencies": false, - "contributors": [ - { - "name": "Christian Johansen", - "email": "christian@cjohansen.no" - }, - { - "name": "Morgan Roderick", - "email": "morgan@roderick.dk" - }, - { - "name": "Maximilian Antoni", - "email": "mail@maxantoni.de" - }, - { - "name": "ben hockey", - "email": "neonstalwart@gmail.com" - }, - { - "name": "Tim Fischbach", - "email": "mail@timfischbach.de" - }, - { - "name": "Max Antoni", - "email": "mail@maxantoni.de" - }, - { - "name": "Tim Ruffles", - "email": "timruffles@googlemail.com" - }, - { - "name": "Jonathan Sokolowski", - "email": "jonathan.sokolowski@gmail.com" - }, - { - "name": "Domenic Denicola", - "email": "domenic@domenicdenicola.com" - }, - { - "name": "Phred", - "email": "fearphage@gmail.com" - }, - { - "name": "Tim Perry", - "email": "pimterry@gmail.com" - }, - { - "name": "Andreas Lind", - "email": "andreas@one.com" - }, - { - "name": "William Sears", - "email": "MrBigDog2U@gmail.com" - }, - { - "name": "Tim Ruffles", - "email": "timr@picklive.com" - }, - { - "name": "kpdecker", - "email": "kpdecker@gmail.com" - }, - { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com" - }, - { - "name": "Carl-Erik Kopseng", - "email": "carlerik@gmail.com" - }, - { - "name": "pimterry", - "email": "pimterry@gmail.com" - }, - { - "name": "Bryan Donovan", - "email": "bdondo@gmail.com" - }, - { - "name": "Andrew Gurinovich", - "email": "altmind@gmail.com" - }, - { - "name": "Martin Sander", - "email": "forke@uni-bonn.de" - }, - { - "name": "Luis Cardoso", - "email": "luis.cardoso@feedzai.com" - }, - { - "name": "Keith Cirkel", - "email": "github@keithcirkel.co.uk" - }, - { - "name": "Tristan Koch", - "email": "tristan.koch@1und1.de" - }, - { - "name": "Tobias Ebnöther", - "email": "ebi@gorn.ch" - }, - { - "name": "Cory", - "email": "seeflanigan@gmail.com" - }, - { - "name": "zcicala", - "email": "zcicala@fitbit.com" - }, - { - "name": "Marten Lienen", - "email": "marten.lienen@gmail.com" - }, - { - "name": "Travis Kaufman", - "email": "travis.kaufman@gmail.com" - }, - { - "name": "Benjamin Coe", - "email": "ben@yesware.com" - }, - { - "name": "ben fleis", - "email": "ben.fleis@gmail.com" - }, - { - "name": "Garrick Cheung", - "email": "garrick@garrickcheung.com" - }, - { - "name": "Gavin Huang", - "email": "gravof@gmail.com" - }, - { - "name": "Jonny Reeves", - "email": "github@jonnyreeves.co.uk" - }, - { - "name": "Konrad Holowinski", - "email": "konrad.holowinski@gmail.com" - }, - { - "name": "Christian Johansen", - "email": "christian.johansen@nrk.no" - }, - { - "name": "Soutaro Matsumoto", - "email": "matsumoto@soutaro.com" - }, - { - "name": "August Lilleaas", - "email": "august.lilleaas@gmail.com" - }, - { - "name": "Scott Andrews", - "email": "scothis@gmail.com" - }, - { - "name": "Robin Pedersen", - "email": "robinp@snap.tv" - }, - { - "name": "Garrick", - "email": "gcheung@fitbit.com" - }, - { - "name": "geries", - "email": "geries.handal@videoplaza.com" - }, - { - "name": "Cormac Flynn", - "email": "cormac.flynn@viadeoteam.com" - }, - { - "name": "Ming Liu", - "email": "vmliu1@gmail.com" - }, - { - "name": "Thomas Meyer", - "email": "meyertee@gmail.com" - }, - { - "name": "Roman Potashow", - "email": "justgook@gmail.com" - }, - { - "name": "Tamas Szebeni", - "email": "tamas_szebeni@epam.com" - }, - { - "name": "Glen Mailer", - "email": "glen.mailer@bskyb.com" - }, - { - "name": "Duncan Beevers", - "email": "duncan@dweebd.com" - }, - { - "name": "Jmeas", - "email": "jellyes2@gmail.com" - }, - { - "name": "なつき", - "email": "i@ntk.me" - }, - { - "name": "Alex Urbano", - "email": "asgaroth.belem@gmail.com" - }, - { - "name": "Alexander Schmidt", - "email": "alexanderschmidt1@gmail.com" - }, - { - "name": "Ben Hockey", - "email": "neonstalwart@gmail.com" - }, - { - "name": "Brandon Heyer", - "email": "brandonheyer@gmail.com" - }, - { - "name": "Christian Johansen", - "email": "christian.johansen@finn.no" - }, - { - "name": "Devin Weaver", - "email": "suki@tritarget.org" - }, - { - "name": "Farid Neshat", - "email": "FaridN_SOAD@yahoo.com" - }, - { - "name": "G.Serebryanskyi", - "email": "x5x3x5x@gmail.com" - }, - { - "name": "Henry Tung", - "email": "henryptung@gmail.com" - }, - { - "name": "Irina Dumitrascu", - "email": "me@dira.ro" - }, - { - "name": "James Barwell", - "email": "jb@jamesbarwell.co.uk" - }, - { - "name": "Jason Karns", - "email": "jason.karns@gmail.com" - }, - { - "name": "Jeffrey Falgout", - "email": "jeffrey.falgout@gmail.com" - }, - { - "name": "Jeffrey Falgout", - "email": "jfalgout@bloomberg.net" - }, - { - "name": "Jonathan Freeman", - "email": "freethejazz@gmail.com" - }, - { - "name": "Josh Graham", - "email": "josh@canva.com" - }, - { - "name": "Marcus Hüsgen", - "email": "marcus.huesgen@lusini.com" - }, - { - "name": "Martin Hansen", - "email": "martin@martinhansen.no" - }, - { - "name": "Matt Kern", - "email": "matt@bloomcrush.com" - }, - { - "name": "Max Calabrese", - "email": "max.calabrese@ymail.com" - }, - { - "name": "Márton Salomváry", - "email": "salomvary@gmail.com" - }, - { - "name": "Patrick van Vuuren", - "email": "patrick@proforto.nl" - }, - { - "name": "Satoshi Nakamura", - "email": "snakamura@infoteria.com" - }, - { - "name": "Simen Bekkhus", - "email": "sbekkhus91@gmail.com" - }, - { - "name": "Spencer Elliott", - "email": "me@elliottsj.com" - }, - { - "name": "Travis Kaufman", - "email": "travis.kaufman@refinery29.com" - }, - { - "name": "Victor Costan", - "email": "costan@gmail.com" - }, - { - "name": "gtothesquare", - "email": "me@gerieshandal.com" - }, - { - "name": "mohayonao", - "email": "mohayonao@gmail.com" - }, - { - "name": "vitalets", - "email": "vitalets@yandex-team.ru" - }, - { - "name": "yoshimura-toshihide", - "email": "toshihide0105yoshimura@gmail.com" - }, - { - "name": "Ian Thomas", - "email": "ian@ian-thomas.net" - }, - { - "name": "hashchange", - "email": "heim@zeilenwechsel.de" - }, - { - "name": "Mario Pareja", - "email": "mpareja@360incentives.com" - }, - { - "name": "Ian Lewis", - "email": "IanMLewis@gmail.com" - }, - { - "name": "Martin Brochhaus", - "email": "mbrochh@gmail.com" - }, - { - "name": "jamestalmage", - "email": "james.talmage@jrtechnical.com" - }, - { - "name": "Harry Wolff", - "email": "hswolff@gmail.com" - }, - { - "name": "kbackowski", - "email": "kbackowski@gmail.com" - }, - { - "name": "Gyandeep Singh", - "email": "gyandeeps@gmail.com" - }, - { - "name": "Adrian Phinney", - "email": "adrian.phinney@bellaliant.net" - }, - { - "name": "Max Klymyshyn", - "email": "klymyshyn@gmail.com" - }, - { - "name": "Gordon L. Hempton", - "email": "ghempton@gmail.com" - }, - { - "name": "Michael Jackson", - "email": "mjijackson@gmail.com" - }, - { - "name": "Mikolaj Banasik", - "email": "d1sover@gmail.com" - }, - { - "name": "Gord Tanner", - "email": "gord@tinyhippos.com" - }, - { - "name": "Glen Mailer", - "email": "glenjamin@gmail.com" - }, - { - "name": "Mustafa Sak", - "email": "mustafa.sak@1und1.de" - }, - { - "name": "AJ Ortega", - "email": "ajo@google.com" - }, - { - "name": "Nicholas Stephan", - "email": "nicholas.stephan@gmail.com" - }, - { - "name": "Nikita Litvin", - "email": "deltaidea@derpy.ru" - }, - { - "name": "Niklas Andreasson", - "email": "eaglus_@hotmail.com" - }, - { - "name": "Olmo Maldonado", - "email": "olmo.maldonado@gmail.com" - }, - { - "name": "ngryman", - "email": "ngryman@gmail.com" - }, - { - "name": "Giorgos Giannoutsos", - "email": "contact@nuc.gr" - }, - { - "name": "Rajeesh C V", - "email": "cvrajeesh@gmail.com" - }, - { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - { - "name": "Gilad Peleg", - "email": "giladp007@gmail.com" - }, - { - "name": "Rodion Vynnychenko", - "email": "roddiku@gmail.com" - }, - { - "name": "Gavin Boulton", - "email": "gavin.boulton@digital.cabinet-office.gov.uk" - }, - { - "name": "Ryan Wholey", - "email": "rjwholey@gmail.com" - }, - { - "name": "Adam Hull", - "email": "adam@hmlad.com" - }, - { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com" - }, - { - "name": "Sergio Cinos", - "email": "scinos@atlassian.com" - }, - { - "name": "Shawn Krisman", - "email": "skrisman@nodelings" - }, - { - "name": "Shawn Krisman", - "email": "telaviv@github" - }, - { - "name": "Shinnosuke Watanabe", - "email": "snnskwtnb@gmail.com" - }, - { - "name": "simonzack", - "email": "simonzack@gmail.com" - }, - { - "name": "Simone Fonda", - "email": "fonda@netseven.it" - }, - { - "name": "Eric Wendelin", - "email": "ewendelin@twitter.com" - }, - { - "name": "stevesouth", - "email": "stephen.south@caplin.com" - }, - { - "name": "Sven Fuchs", - "email": "svenfuchs@artweb-design.de" - }, - { - "name": "Søren Enemærke", - "email": "soren.enemaerke@gmail.com" - }, - { - "name": "TEHEK Firefox", - "email": "tehek@tehek.net" - }, - { - "name": "Dmitriy Kubyshkin", - "email": "grassator@gmail.com" - }, - { - "name": "Tek Nynja", - "email": "github@teknynja.com" - }, - { - "name": "Daryl Lau", - "email": "daryl@goodeggs.com" - }, - { - "name": "Tim Branyen", - "email": "tim@tabdeveloper.com" - }, - { - "name": "Christian Johansen", - "email": "christian@shortcut.no" - }, - { - "name": "Burak Yiğit Kaya", - "email": "ben@byk.im" - }, - { - "name": "Brian M Hunt", - "email": "brianmhunt@gmail.com" - }, - { - "name": "Blake Israel", - "email": "blake.israel@gatech.edu" - }, - { - "name": "Timo Tijhof", - "email": "krinklemail@gmail.com" - }, - { - "name": "Blake Embrey", - "email": "hello@blakeembrey.com" - }, - { - "name": "Blaine Bublitz", - "email": "blaine@iceddev.com" - }, - { - "name": "till", - "email": "till@php.net" - }, - { - "name": "Antonio D'Ettole", - "email": "antonio@brandwatch.com" - }, - { - "name": "Tristan Koch", - "email": "tristan@tknetwork.de" - }, - { - "name": "AJ Ortega", - "email": "ajo@renitservices.com" - }, - { - "name": "Volkan Ozcelik", - "email": "volkan.ozcelik@jivesoftware.com" - }, - { - "name": "Will Butler", - "email": "will@butlerhq.com" - }, - { - "name": "William Meleyal", - "email": "w.meleyal@wollzelle.com" - }, - { - "name": "Ali Shakiba", - "email": "ali@shakiba.me" - }, - { - "name": "Xiao Ma", - "email": "x@medium.com" - }, - { - "name": "Alfonso Boza", - "email": "alfonso@cloud.com" - }, - { - "name": "Alexander Aivars", - "email": "alex@aivars.se" - }, - { - "name": "brandonheyer", - "email": "brandonheyer@gmail.com" - }, - { - "name": "charlierudolph", - "email": "charles.w.rudolph@gmail.com" - }, - { - "name": "Alex Kessaris", - "email": "alex@artsy.ca" - }, - { - "name": "John Bernardo", - "email": "jbernardo@linkedin.com" - }, - { - "name": "goligo", - "email": "ich@malte.de" - }, - { - "name": "Jason Anderson", - "email": "diurnalist@gmail.com" - }, - { - "name": "Jan Suchý", - "email": "jan.sandokan@gmail.com" - }, - { - "name": "Jordan Hawker", - "email": "hawker.jordan@gmail.com" - }, - { - "name": "Joscha Feth", - "email": "jfeth@atlassian.com" - }, - { - "name": "Joseph Spens", - "email": "joseph@workmarket.com" - }, - { - "name": "wwalser", - "email": "waw325@gmail.com" - }, - { - "name": "Jan Kopriva", - "email": "jan.kopriva@gooddata.com" - }, - { - "name": "Kevin Turner", - "email": "kevin@decipherinc.com" - }, - { - "name": "Kim Joar Bekkelund", - "email": "kjbekkelund@gmail.com" - }, - { - "name": "James Beavers", - "email": "jamesjbeavers@gmail.com" - }, - { - "name": "Kris Kowal", - "email": "kris.kowal@cixar.com" - }, - { - "name": "Kurt Ruppel", - "email": "me@kurtruppel.com" - }, - { - "name": "Lars Thorup", - "email": "lars@zealake.com" - }, - { - "name": "Luchs", - "email": "Luchs@euirc.eu" - }, - { - "name": "Marco Ramirez", - "email": "marco-ramirez@bankofamerica.com" - } - ], + "cdn": "./pkg/sinon.js", "dependencies": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.0.0", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" }, "deprecated": false, "description": "JavaScript test spies, stubs and mocks.", "devDependencies": { - "buster": "0.7.18", - "buster-core": "^0.6.4", - "buster-istanbul": "0.1.13", - "eslint": "0.24.0", - "eslint-config-defaults": "^2.1.0", - "jscs": "1.13.1", - "pre-commit": "1.0.10" + "@babel/core": "^7.16.12", + "@sinonjs/eslint-config": "^4.0.5", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^9.1.1", + "@studio/changes": "^2.2.0", + "babel-plugin-istanbul": "^6.1.1", + "babelify": "^10.0.0", + "browserify": "^16.5.2", + "debug": "^4.3.1", + "dependency-check": "^4.1.0", + "husky": "^6.0.0", + "lint-staged": "^12.3.2", + "mocha": "^9.2.0", + "mochify": "^9.1.0", + "nyc": "^15.1.0", + "prettier": "^2.5.1", + "proxyquire": "^2.1.3", + "proxyquire-universal": "^3.0.1", + "proxyquireify": "^3.2.1", + "puppeteer": "^13.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "shelljs": "^0.8.4", + "unimported": "^1.19.1" + }, + "esm": { + "cjs": { + "mutableNamespace": false, + "cache": true + }, + "mode": "auto" }, - "engines": { - "node": ">=0.1.103" + "exports": { + ".": { + "require": "./lib/sinon.js", + "import": "./pkg/sinon-esm.js" + }, + "./*": "./*" }, "files": [ "lib", "pkg", + "scripts/support-sinon.js", "AUTHORS", "CONTRIBUTING.md", - "Changelog.txt", + "CHANGELOG.md", "LICENSE", "README.md" ], - "homepage": "http://sinonjs.org/", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + }, + "homepage": "https://sinonjs.org/", + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "jsdelivr": "./pkg/sinon.js", + "keywords": [ + "sinon", + "test", + "testing", + "unit", + "stub", + "spy", + "fake", + "time", + "clock", + "mock", + "xhr", + "assert" + ], "license": "BSD-3-Clause", + "lint-staged": { + "*.{js,css,md}": "prettier --check", + "*.js": "eslint --quiet", + "*.mjs": "eslint --quiet --ext mjs --parser-options=sourceType:module" + }, "main": "./lib/sinon.js", + "module": "./pkg/sinon-esm.js", "name": "sinon", - "pre-commit": [ - "eslint-pre-commit" - ], + "nyc": { + "instrument": false, + "temp-dir": "coverage/.nyc_output", + "reporter": [ + "text", + "lcovonly" + ] + }, "repository": { "type": "git", - "url": "git+ssh://git@github.com/cjohansen/Sinon.JS.git" + "url": "git+ssh://git@github.com/sinonjs/sinon.git" }, "scripts": { - "ci-test": "npm run lint && ./scripts/ci-test.sh", - "eslint-pre-commit": "./scripts/eslint-pre-commit", - "lint": "$(npm bin)/eslint .", - "prepublish": "./build", - "test": "./scripts/ci-test.sh" + "build": "node ./build.cjs", + "build-docs": "cd docs; bundle exec jekyll build", + "check-dependencies": "dependency-check package.json --no-dev --ignore-module esm", + "check-esm-bundle-runs-in-browser": "node test/es2015/check-esm-bundle-is-runnable.js", + "lint": "eslint '**/*.{js,cjs,mjs}'", + "postbuild": "npm run test-esm-support && npm run check-esm-bundle-runs-in-browser", + "postversion": "./scripts/postversion.sh", + "prebuild": "rimraf pkg && npm run check-dependencies", + "prebuild-docs": "./scripts/update-compatibility.js", + "prepublishOnly": "npm run build", + "pretest-webworker": "npm run build", + "prettier:check": "prettier --check '**/*.{js,css,md}'", + "prettier:write": "prettier --write '**/*.{js,css,md}'", + "preversion": "./scripts/preversion.sh", + "serve-docs": "cd docs; bundle exec jekyll serve --incremental --verbose", + "test": "npm run test-node && npm run test-headless && npm run test-webworker", + "test-cloud": "npm run test-headless -- --wd", + "test-coverage": "nyc npm run test-headless -- --transform [ babelify --ignore [ test ] --plugins [ babel-plugin-istanbul ] ]", + "test-dev": "npm run test-node -- --watch -R min", + "test-docker-image": "docker-compose up", + "test-esm-support": "mocha test/es2015/module-support-assessment-test.mjs", + "test-headless": "mochify --no-detect-globals --recursive -R dot --grep WebWorker --invert --plugin [ proxyquire-universal ] \"test/**/*-test.js\"", + "test-node": "mocha --recursive -R dot \"test/**/*-test.js\"", + "test-runnable-examples": "docs/release-source/release/examples/run-test.sh", + "test-webworker": "mochify --no-detect-globals --https-server 8080 --no-request-interception test/webworker/webworker-support-assessment.js", + "unimported": "unimported .", + "version": "./scripts/version.sh" }, - "version": "1.17.3" + "type": "module", + "version": "13.0.1" } diff --git a/build/node_modules/sinon/pkg/sinon-1.10.0.js b/build/node_modules/sinon/pkg/sinon-1.10.0.js deleted file mode 100644 index 51370660..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.10.0.js +++ /dev/null @@ -1,4 +0,0 @@ -this.sinon = (function () { -var samsam, formatio; -function define(mod, deps, fn) { if (mod == "samsam") { samsam = deps(); } else if (typeof fn === "function") { formatio = fn(samsam); } } -define.amd = {}; diff --git a/build/node_modules/sinon/pkg/sinon-1.12.2.js b/build/node_modules/sinon/pkg/sinon-1.12.2.js deleted file mode 100644 index f6a03f45..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.12.2.js +++ /dev/null @@ -1,5753 +0,0 @@ -/** - * Sinon.JS 1.12.2, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - var samsam, formatio; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; -} - -/** - * Used to grok the `now` parameter to createClock. - */ -function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); -} - -function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; -} - -function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - return target; -} - -function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); -} - -function addTimer(clock, timer) { - if (typeof timer.func === "undefined") { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = id++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || 0); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: function() {}, - unref: function() {} - }; - } - else { - return timer.id; - } -} - -function firstTimerInRange(clock, from, to) { - var timers = clock.timers, timer = null; - - for (var id in timers) { - if (!inRange(from, to, timers[id])) { - continue; - } - - if (!timer || ~compareTimers(timer, timers[id])) { - timer = timers[id]; - } - } - - return timer; -} - -function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary -} - -function callTimer(clock, timer) { - if (typeof timer.interval == "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } -} - -function uninstall(clock, target) { - var method; - - for (var i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (e) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; -} - -function hijackMethod(target, method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; -} - -var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -var keys = Object.keys || function (obj) { - var ks = []; - for (var key in obj) { - ks.push(key); - } - return ks; -}; - -exports.timers = timers; - -var createClock = exports.createClock = function (now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - if (!clock.timers) { - clock.timers = []; - } - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id - } - if (timerId in clock.timers) { - delete clock.timers[timerId]; - } - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - clock.clearTimeout(timerId); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - clock.clearTimeout(timerId); - }; - - clock.tick = function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - callTimer(clock, timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - return clock; -}; - -exports.install = function install(target, now, toFake) { - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property], - error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ - -(function (sinon) { - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }; - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - yield: function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func) { - // Retain the function length: - var p; - if (func.length) { - eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - }, - - create: function create(func) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - var proxy = createProxy(func); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", - function () { return true; }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", - function () { return true; }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - n: function (spy) { - return spy.toString(); - }, - - C: function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./call"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var slice = Array.prototype.slice; - var join = Array.prototype.join; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt < 0) { - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = args.length; i < l; ++i) { - if (!callArgProp && typeof args[i] == "function") { - return args[i]; - } - - if (callArgProp && args[i] && - typeof args[i][callArgProp] == "function") { - return args[i][callArgProp]; - } - } - - return null; - } - - return args[callArgAt]; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt == "number") { - var func = getCallback(behavior, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt == "number" || - this.exception || - typeof this.returnArgAt == "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt == "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " + - "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments."); - }, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = -1; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = -1; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = -1; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = -1; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields)/) && - !method.match(/Async/)) { - proto[method + "Async"] = (function (syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - })(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func != "function") { - throw new TypeError("Custom stub should be function"); - } - - var wrapper; - - if (func) { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = stub.create(); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object == "object") { - for (var prop in object) { - if (typeof object[prop] === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getDefaultBehavior(stub) { - return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub); - } - - function getParentBehaviour(stub) { - return (stub.parent && getCurrentBehavior(stub.parent)); - } - - function getCurrentBehavior(stub) { - var behavior = stub.behaviors[stub.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub); - } - - var uuid = 0; - - var proto = { - create: function create() { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method != "create" && - method != "withArgs" && - method != "invoke") { - proto[method] = (function (behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - }(method)); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./behavior"); - require("./spy"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - if (match && match.isMatcher(possibleMatcher)) { - return possibleMatcher.test(arg); - } else { - return true; - } - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./call"); - require("./match"); - require("./spy"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module) { - var sinon = require("./core"); - makeApi(sinon, require("lolex")); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend ../sinon.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - break; - } - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./event"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof self !== "undefined" ? self : this); - -/** - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xml_http_request"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./util/fake_server"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend stub.js - * @depend mock.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var exception, result; - var doneIsWrapped = false; - var argumentsCopy = Array.prototype.slice.call(arguments); - if (argumentsCopy.length > 0 && typeof argumentsCopy[arguments.length - 1] == "function") { - var oldDone = argumentsCopy[arguments.length - 1]; - argumentsCopy[arguments.length - 1] = function done(result) { - if (result) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(result); - } - doneIsWrapped = true; - } - - var args = argumentsCopy.concat(sandbox.args); - - try { - result = callback.apply(this, args); - } catch (e) { - exception = e; - } - - if (!doneIsWrapped) { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - }; - - if (callback.length) { - return function sinonAsyncSandboxedTest(callback) { - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - /*jsl:ignore*/ - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - /*jsl:end*/ - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName)) { - property = tests[testName]; - - if (/^(setUp|tearDown)$/.test(testName)) { - continue; - } - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./test"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend stub.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, fake.printf.apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ] - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; }, - "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } - -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./event"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(this); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.15.0.js b/build/node_modules/sinon/pkg/sinon-1.15.0.js deleted file mode 100644 index 1c894b56..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.15.0.js +++ /dev/null @@ -1,6036 +0,0 @@ -/** - * Sinon.JS 1.15.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function" && typeof method != "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method == "function") ? {value: method} : method, - wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), - i; - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object, descriptor; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - } - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }; - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - yield: function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } else { - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - n: function (spy) { - return spy.toString(); - }, - - C: function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] == "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] == "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt == "number") { - var func = getCallback(behavior, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt == "number" || - this.exception || - typeof this.returnArgAt == "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt == "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " + - "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments."); - }, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields)/) && - !method.match(/Async/)) { - proto[method + "Async"] = (function (syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - })(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func != "function" && typeof func != "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func == "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object == "object" && typeof object[property] == "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object == "object") { - for (var prop in object) { - if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getDefaultBehavior(stub) { - return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub); - } - - function getParentBehaviour(stub) { - return (stub.parent && getCurrentBehavior(stub.parent)); - } - - function getCurrentBehavior(stub) { - var behavior = stub.behaviors[stub.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub); - } - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method != "create" && - method != "withArgs" && - method != "invoke") { - proto[method] = (function (behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - }(method)); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - if (typeof console !== undefined && console.warn) { - console.warn("mock will be removed from Sinon.JS v2.0"); - } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - if (match && match.isMatcher(possibleMatcher)) { - return possibleMatcher.test(arg); - } else { - return true; - } - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { - return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") - } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof global !== "undefined" ? global : self); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone == "function") { - args[args.length - 1] = function sinonDone(result) { - if (result) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(result); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone != "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(callback) { - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinon) { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./test"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ] - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } - -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.15.4.js b/build/node_modules/sinon/pkg/sinon-1.15.4.js deleted file mode 100644 index f357c86b..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.15.4.js +++ /dev/null @@ -1,6046 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function" && typeof method != "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method == "function") ? {value: method} : method, - wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), - i; - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object, descriptor; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - } - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }; - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -(function (sinon) { - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - yield: function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } else { - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - n: function (spy) { - return spy.toString(); - }, - - C: function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] == "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] == "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt == "number") { - var func = getCallback(behavior, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt == "number" || - this.exception || - typeof this.returnArgAt == "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt == "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " + - "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments."); - }, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields)/) && - !method.match(/Async/)) { - proto[method + "Async"] = (function (syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - })(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func != "function" && typeof func != "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func == "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object == "object" && typeof object[property] == "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object == "object") { - for (var prop in object) { - if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getDefaultBehavior(stub) { - return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub); - } - - function getParentBehaviour(stub) { - return (stub.parent && getCurrentBehavior(stub.parent)); - } - - function getCurrentBehavior(stub) { - var behavior = stub.behaviors[stub.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub); - } - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method != "create" && - method != "withArgs" && - method != "invoke") { - proto[method] = (function (behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - }(method)); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - if (match && match.isMatcher(possibleMatcher)) { - return possibleMatcher.test(arg); - } else { - return true; - } - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { - return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") - } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof global !== "undefined" ? global : self); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone == "function") { - args[args.length - 1] = function sinonDone(result) { - if (result) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(result); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone != "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(callback) { - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinon) { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./test"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ] - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } - -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.16.0.js b/build/node_modules/sinon/pkg/sinon-1.16.0.js deleted file mode 100644 index 37dac199..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.16.0.js +++ /dev/null @@ -1,6194 +0,0 @@ -/** - * Sinon.JS 1.16.0, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - delete clock.timers[timerId]; - } - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - clock.clearTimeout(timerId); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - clock.clearTimeout(timerId); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - callTimer(clock, timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - return clock; - } - exports.createClock = createClock; - - function detectKnownFailSituation(methods) { - if (methods.indexOf("Date") < 0) { return; } - - if (methods.indexOf("setTimeout") < 0) { - throw new Error("Native setTimeout will not work when Date is faked"); - } - - if (methods.indexOf("setImmediate") < 0) { - throw new Error("Native setImmediate will not work when Date is faked"); - } - } - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - detectKnownFailSituation(clock.methods); - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - } - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } - - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } - - if (typeof setImmediate === "function") { - return setImmediate; - } - - return function (callback) { - setTimeout(callback, 0); - }; - })(); - - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - } - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper, - prop; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - for (prop in object) { - if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); - } - - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); - } - - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - } - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - } - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); - } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass() {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; - - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; - - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.16.1.js b/build/node_modules/sinon/pkg/sinon-1.16.1.js deleted file mode 100644 index face6905..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.16.1.js +++ /dev/null @@ -1,6231 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - } - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } - - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } - - if (typeof setImmediate === "function") { - return setImmediate; - } - - return function (callback) { - setTimeout(callback, 0); - }; - })(); - - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - } - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper, - prop; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - for (prop in object) { - if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); - } - - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); - } - - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - } - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - } - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); - } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass() {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; - - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; - - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.17.0.js b/build/node_modules/sinon/pkg/sinon-1.17.0.js deleted file mode 100644 index 3703d7ef..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.17.0.js +++ /dev/null @@ -1,8945 +0,0 @@ -/** - * Sinon.JS 1.17.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function () { - 'use strict'; -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; -} - -function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; -} - -function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } -} - -var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } -}; - -function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; -} - -// create asynchronous versions of callsArg* and yields* methods -for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } -} - -sinon.behavior = proto; - -}).call(this,require('_process')) -},{"./extend":6,"./util/core":25,"_process":38}],4:[function(require,module,exports){ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -"use strict"; - -require("./match"); -var sinon = require("./util/core"); -var slice = Array.prototype.slice; - -function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); -} - -var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } -}; - -callProto.invokeCallback = callProto.yield; - -function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; -} -createSpyCall.toString = callProto.toString; // used by mocks - -module.exports = createSpyCall; - -},{"./match":8,"./util/core":25}],5:[function(require,module,exports){ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./mock"); -require("./stub"); -var sinon = require("./util/core"); -var sinonSpy = require("./spy"); - -var push = [].push; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; -} - -function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } -} - -function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } -} - -var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinonSpy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - if (!object) { - var type = object === null ? "null" : "undefined"; - throw new Error("Trying to stub property '" + property + "' of " + type); - } - - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } -}; - -sinon.collection = collection; - -},{"./mock":9,"./spy":11,"./stub":12,"./util/core":25}],6:[function(require,module,exports){ -"use strict"; - -// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug -var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; -})(); - -/* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ -module.exports = function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; -}; - -},{}],7:[function(require,module,exports){ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -var sinon = require("./util/core"); - -// cache a reference to setTimeout, so that our reference won't be stubbed out -// when using fake timers and errors will still get logged -// https://github.com/cjohansen/Sinon.JS/issues/381 -var realSetTimeout = setTimeout; - -function log() {} - -function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } -} - -// When set to true, any errors logged will be thrown immediately; -// If set to false, the errors will be thrown in separate execution frame. -logError.useImmediateExceptions = true; - -// wrap realSetTimeout with something we can stub in tests -logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); -}; - -var exports = {}; -exports.log = sinon.log = log; -exports.logError = sinon.logError = logError; - -},{"./util/core":25}],8:[function(require,module,exports){ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -"use strict"; - -var create = require("./util/core/create"); -var deepEqual = require("./util/core/deep-equal").use(match); // eslint-disable-line no-use-before-define -var functionName = require("./util/core/function-name"); -var typeOf = require("./typeOf"); - -function assertType(value, type, name) { - var actual = typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } -} - -var matcher = { - toString: function () { - return this.message; - } -}; - -function isMatcher(object) { - return matcher.isPrototypeOf(object); -} - -function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!deepEqual(exp, act)) { - return false; - } - } - } - return true; -} - -var TYPE_MAP = { - "function": function (m, expectation, message) { - m.test = expectation; - m.message = message || "match(" + functionName(expectation) + ")"; - }, - number: function (m, expectation) { - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - }, - object: function (m, expectation) { - var array = []; - var key; - - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + functionName(expectation.test) + ")"; - return m; - } - - for (key in expectation) { - if (expectation.hasOwnProperty(key)) { - array.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + array.join(", ") + ")"; - }, - regexp: function (m, expectation) { - m.test = function (actual) { - return typeof actual === "string" && expectation.test(actual); - }; - }, - string: function (m, expectation) { - m.test = function (actual) { - return typeof actual === "string" && actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - } -}; - -function match(expectation, message) { - var m = create(matcher); - var type = typeOf(expectation); - - if (type in TYPE_MAP) { - TYPE_MAP[type](m, expectation, message); - } else { - m.test = function (actual) { - return deepEqual(expectation, actual); - }; - } - - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - - return m; -} - -matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; -}; - -matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; -}; - -match.isMatcher = isMatcher; - -match.any = match(function () { - return true; -}, "any"); - -match.defined = match(function (actual) { - return actual !== null && actual !== undefined; -}, "defined"); - -match.truthy = match(function (actual) { - return !!actual; -}, "truthy"); - -match.falsy = match(function (actual) { - return !actual; -}, "falsy"); - -match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); -}; - -match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); -}; - -match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + functionName(type) + ")"); -}; - -function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || deepEqual(value, actual[property]); - }, message); - }; -} - -match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; -}, "has"); - -match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); -}, "hasOwn"); - -match.bool = match.typeOf("boolean"); -match.number = match.typeOf("number"); -match.string = match.typeOf("string"); -match.object = match.typeOf("object"); -match.func = match.typeOf("function"); -match.array = match.typeOf("array"); -match.regexp = match.typeOf("regexp"); -match.date = match.typeOf("date"); - -module.exports = match; - -},{"./typeOf":15,"./util/core/create":17,"./util/core/deep-equal":18,"./util/core/function-name":21}],9:[function(require,module,exports){ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./extend"); -require("./match"); -require("./stub"); -var sinon = require("./util/core"); -var spyCallToString = require("./call").toString; -var spyInvoke = require("./spy").invoke; - -var push = [].push; -var match = sinon.match; - -function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); -} - -function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } -} - -function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; -} - -sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + spyCallToString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } -}); - -var times = sinon.timesInWords; -var slice = Array.prototype.slice; - -function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); -} - -function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + times(min); - } - - return "at most " + times(max); -} - -function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; -} - -function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; -} - -function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; -} - -sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return spyInvoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = spyCallToString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } -}; - -sinon.mock = mock; - -},{"./call":4,"./extend":6,"./match":8,"./spy":11,"./stub":12,"./util/core":25}],10:[function(require,module,exports){ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./extend"); -require("./collection"); -require("./util/fake_server_with_clock"); -require("./util/fake_timers"); -var sinon = require("./util/core"); - -var push = [].push; - -function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } -} - -function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; -} - -sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match -}); - -sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - -},{"./collection":5,"./extend":6,"./util/core":25,"./util/fake_server_with_clock":33,"./util/fake_timers":34}],11:[function(require,module,exports){ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var extend = require("./extend"); -var deepEqual = require("./util/core/deep-equal"); -var functionName = require("./util/core/function-name"); -var functionToString = require("./util/core/function-to-string"); -var getPropertyDescriptor = require("./util/core/get-property-descriptor"); -var sinon = require("./util/core"); -var spyCall = require("./call"); -var timesInWords = require("./util/core/times-in-words"); -var wrapMethod = require("./util/core/wrap-method"); - -var push = Array.prototype.push; -var slice = Array.prototype.slice; -var callId = 0; - -function spy(object, property, types) { - var descriptor, i, methodDesc; - - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - descriptor = {}; - methodDesc = getPropertyDescriptor(object, property); - - for (i = 0; i < types.length; i++) { - descriptor[types[i]] = spy.create(methodDesc[types[i]]); - } - return wrapMethod(object, property, descriptor); - } - - return wrapMethod(object, property, spy.create(object[property])); -} - -function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } -} - -function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; -} - -function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); -} - -var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; -function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; -} - -var uuid = 0; - -// Public API -var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - extend(proxy, spy); - delete proxy.create; - extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = functionToString; - proxy.instantiateFake = spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } -}; - -function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; -} - -delegateToCalls("calledOn", true); -delegateToCalls("alwaysCalledOn", false, "calledOn"); -delegateToCalls("calledWith", true); -delegateToCalls("calledWithMatch", true); -delegateToCalls("alwaysCalledWith", false, "calledWith"); -delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); -delegateToCalls("calledWithExactly", true); -delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); -delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; -}); -delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; -}); -delegateToCalls("threw", true); -delegateToCalls("alwaysThrew", false, "threw"); -delegateToCalls("returned", true); -delegateToCalls("alwaysReturned", false, "returned"); -delegateToCalls("calledWithNew", true); -delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); -delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); -}); -spyApi.callArgWith = spyApi.callArg; -delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); -}); -spyApi.callArgOnWith = spyApi.callArgOn; -delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); -}); -// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. -spyApi.invokeCallback = spyApi.yield; -delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); -}); -delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); -}); -delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); -}); - -spyApi.formatters = { - c: function (spyInstance) { - return timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } -}; - -extend(spy, spyApi); - -spy.spyCall = spyCall; - -module.exports = spy; - -},{"./call":4,"./extend":6,"./util/core":25,"./util/core/deep-equal":18,"./util/core/function-name":21,"./util/core/function-to-string":22,"./util/core/get-property-descriptor":24,"./util/core/times-in-words":29,"./util/core/wrap-method":30}],12:[function(require,module,exports){ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./behavior"); -require("./extend"); -require("./walk"); -var sinon = require("./util/core"); -var spy = require("./spy"); - -function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - if (property && !object) { - var type = object === null ? "null" : "undefined"; - throw new Error("Trying to stub property '" + property + "' of " + type); - } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = spy && spy.create ? spy.create(func) : func; - } else { - wrapper = func; - if (spy && spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - sinon.walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); -} - - -/*eslint-disable no-use-before-define*/ -function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); -} - -function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); -} - -function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); -} -/*eslint-enable no-use-before-define*/ - -var uuid = 0; - -var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - resetHistory: spy.reset, - - reset: function () { - this.resetHistory(); - this.resetBehavior(); - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } -}; - -function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; -} - -for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } -} - -sinon.extend(stub, proto); -sinon.stub = stub; -sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); -}; - -},{"./behavior":3,"./extend":6,"./spy":11,"./util/core":25,"./walk":37}],13:[function(require,module,exports){ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./sandbox"); -var sinon = require("./util/core"); - -var slice = Array.prototype.slice; - -function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; -} - -test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true -}; - -sinon.test = test; - -},{"./sandbox":10,"./util/core":25}],14:[function(require,module,exports){ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./test"); -var sinon = require("./util/core"); - -function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; -} - -function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; -} - -sinon.testCase = testCase; - -},{"./test":13,"./util/core":25}],15:[function(require,module,exports){ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -module.exports = function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); -}; - -},{}],16:[function(require,module,exports){ -"use strict"; - -module.exports = function calledInOrder(spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; -}; - -},{}],17:[function(require,module,exports){ -"use strict"; - -var Klass = function () {}; - -module.exports = function create(proto) { - Klass.prototype = proto; - return new Klass(); -}; - -},{}],18:[function(require,module,exports){ -"use strict"; - -var div = typeof document !== "undefined" && document.createElement("div"); - -function isReallyNaN(val) { - return val !== val; -} - -function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; -} - -function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); -} - -var deepEqual = module.exports = function deepEqual(a, b) { - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (Object.prototype.hasOwnProperty.call(a, prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - // allow alternative function for recursion - if (!(arguments[2] || deepEqual)(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (Object.prototype.hasOwnProperty.call(b, prop)) { - bLength += 1; - } - } - - return aLength === bLength; -}; - -deepEqual.use = function (match) { - return function deepEqual$matcher(a, b) { - if (match.isMatcher(a)) { - return a.test(b); - } - - return deepEqual(a, b, deepEqual$matcher); - }; -}; - -},{}],19:[function(require,module,exports){ -"use strict"; - -module.exports = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true -}; - -},{}],20:[function(require,module,exports){ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -var formatio = require("formatio"); - -var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 -}); - -module.exports = function format() { - return formatter.ascii.apply(formatter, arguments); -}; - -},{"formatio":39}],21:[function(require,module,exports){ -"use strict"; - -module.exports = function functionName(func) { - var name = func.displayName || func.name; - var matches; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name && (matches = func.toString().match(/function ([^\s\(]+)/))) { - name = matches[1]; - } - - return name; -}; - - -},{}],22:[function(require,module,exports){ -"use strict"; - -module.exports = function toString() { - var i, prop, thisValue; - if (this.getCall && this.callCount) { - i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; -}; - -},{}],23:[function(require,module,exports){ -"use strict"; - -var defaultConfig = require("./default-config"); - -module.exports = function getConfig(custom) { - var config = {}; - var prop; - - custom = custom || {}; - - for (prop in defaultConfig) { - if (defaultConfig.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaultConfig[prop]; - } - } - - return config; -}; - -},{"./default-config":19}],24:[function(require,module,exports){ -"use strict"; - -module.exports = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; -}; - -},{}],25:[function(require,module,exports){ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -exports.wrapMethod = require("./wrap-method"); - -exports.create = require("./create"); - -exports.deepEqual = require("./deep-equal"); - -exports.format = require("./format"); - -exports.functionName = require("./function-name"); - -exports.functionToString = require("./function-to-string"); - -exports.objectKeys = require("./object-keys"); - -exports.getPropertyDescriptor = require("./get-property-descriptor"); - -exports.getConfig = require("./get-config"); - -exports.defaultConfig = require("./default-config"); - -exports.timesInWords = require("./times-in-words"); - -exports.calledInOrder = require("./called-in-order"); - -exports.orderByFirstCall = require("./order-by-first-call"); - -exports.restore = require("./restore"); - -},{"./called-in-order":16,"./create":17,"./deep-equal":18,"./default-config":19,"./format":20,"./function-name":21,"./function-to-string":22,"./get-config":23,"./get-property-descriptor":24,"./object-keys":26,"./order-by-first-call":27,"./restore":28,"./times-in-words":29,"./wrap-method":30}],26:[function(require,module,exports){ -"use strict"; - -var hasOwn = Object.prototype.hasOwnProperty; - -module.exports = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -},{}],27:[function(require,module,exports){ -"use strict"; - -module.exports = function orderByFirstCall(spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); -}; - -},{}],28:[function(require,module,exports){ -"use strict"; - -function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; -} - -module.exports = function restore(object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } -}; - -},{}],29:[function(require,module,exports){ -"use strict"; - -var array = [null, "once", "twice", "thrice"]; - -module.exports = function timesInWords(count) { - return array[count] || (count || 0) + " times"; -}; - -},{}],30:[function(require,module,exports){ -"use strict"; - -var getPropertyDescriptor = require("./get-property-descriptor"); -var objectKeys = require("./object-keys"); - -var hasOwn = Object.prototype.hasOwnProperty; - -function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); -} - -function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } -} - -// Cheap way to detect if we have ES5 support. -var hasES5Support = "keys" in Object; - -module.exports = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - if (hasES5Support) { - var descriptor = getPropertyDescriptor(object, property); - if (descriptor && descriptor.value === method) { - object[property] = wrappedMethod; - } - } - else { - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; -}; - -},{"./get-property-descriptor":24,"./object-keys":26}],31:[function(require,module,exports){ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -"use strict"; - -var push = [].push; -var sinon = require("./core"); - -sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); -}; - -sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } -}; - -sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = typeof progressEventRaw.loaded === "number" ? progressEventRaw.loaded : null; - this.total = typeof progressEventRaw.total === "number" ? progressEventRaw.total : null; - this.lengthComputable = !!progressEventRaw.total; -}; - -sinon.ProgressEvent.prototype = new sinon.Event(); - -sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - -sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; -}; - -sinon.CustomEvent.prototype = new sinon.Event(); - -sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - -sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } -}; - -},{"./core":25}],32:[function(require,module,exports){ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./fake_xdomain_request"); -require("./fake_xml_http_request"); -require("../log_error"); - -var push = [].push; -var sinon = require("./core"); - -function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; -} - -var wloc = typeof window !== "undefined" ? window.location : {}; -var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - -function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; -} - -function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; -} - -sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } -}; - -},{"../log_error":7,"./core":25,"./fake_xdomain_request":35,"./fake_xml_http_request":36}],33:[function(require,module,exports){ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./fake_server"); -require("./fake_timers"); -var sinon = require("./core"); - -function Server() {} -Server.prototype = sinon.fakeServer; - -sinon.fakeServerWithClock = new Server(); - -sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); -}; - -sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; -}; - -sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); -}; - -},{"./core":25,"./fake_server":32,"./fake_timers":34}],34:[function(require,module,exports){ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var s = require("./core"); -var llx = require("lolex"); - -s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; -}; - -s.clock = { - create: function (now) { - return llx.createClock(now); - } -}; - -s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -},{"./core":25,"lolex":40}],35:[function(require,module,exports){ -(function (global){ -/** - * Fake XDomainRequest object - */ - -"use strict"; - -require("../extend"); -require("./event"); -require("../log_error"); - -var xdr = { XDomainRequest: global.XDomainRequest }; -xdr.GlobalXDomainRequest = global.XDomainRequest; -xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; -xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - -var sinon = require("./core"); -sinon.xdr = xdr; - -function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } -} - -function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } -}); - -sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 -}); - -sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; -}; - -sinon.FakeXDomainRequest = FakeXDomainRequest; - - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":6,"../log_error":7,"./core":25,"./event":31}],36:[function(require,module,exports){ -(function (global){ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("../extend"); -require("./event"); -require("../log_error"); -var TextEncoder = require("text-encoding").TextEncoder; - -var sinon = require("./core"); - -function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; -} - -var supportsProgress = typeof ProgressEvent !== "undefined"; -var supportsCustomEvent = typeof CustomEvent !== "undefined"; -var supportsFormData = typeof FormData !== "undefined"; -var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; -var supportsBlob = typeof Blob === "function"; -var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; -sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; -sinonXhr.GlobalActiveXObject = global.ActiveXObject; -sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; -sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; -sinonXhr.workingXHR = getWorkingXHR(global); -sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - -var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true -}; - -// An upload object is created for each -// FakeXMLHttpRequest and allows upload -// events to be simulated using uploadProgress -// and uploadError. -function UploadProgress() { - this.eventListeners = { - abort: [], - error: [], - load: [], - loadend: [], - progress: [] - }; -} - -UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); -}; - -UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } -}; - -UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } -}; - -// Note that for FakeXMLHttpRequest to work pre ES5 -// we lose some of the alignment with the spec. -// To ensure as close a match as possible, -// set responseType before calling open, send or respond; -function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } -} - -function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; -} - -// filtering to enable a white-list version of Sinon FakeXhr, -// where whitelisted requests are passed through to real XHR -function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } -} -function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; -} -// largest arity in XHR is 5 - XHR#open -var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } -}; - -FakeXMLHttpRequest.filters = []; -FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); -}; -var IE6Re = /MSIE 6/; -FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); -}; -FakeXMLHttpRequest.useFilters = false; - -function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } -} - -function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -function convertToArrayBuffer(body, encoding) { - return new TextEncoder(encoding || "utf-8").encode(body).buffer; -} - -function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); -} - -function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); -} - -function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; -} - -FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; -}; - -FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" -}; - -sinon.xhr = sinonXhr; - -sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - var event, progress; - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - if (this.readyState === FakeXMLHttpRequest.DONE) { - if (this.status < 200 || this.status > 299) { - progress = {loaded: 0, total: 0}; - event = this.aborted ? "abort" : "error"; - } - else { - progress = {loaded: 100, total: 100}; - event = "load"; - } - - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progress, this)); - this.upload.dispatchEvent(new sinon.ProgressEvent(event, progress, this)); - this.upload.dispatchEvent(new sinon.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(new sinon.ProgressEvent("progress", progress, this)); - this.dispatchEvent(new sinon.ProgressEvent(event, progress, this)); - this.dispatchEvent(new sinon.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } -}); - -sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 -}); - -sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; -}; - -sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":6,"../log_error":7,"./core":25,"./event":31,"text-encoding":42}],37:[function(require,module,exports){ -"use strict"; - -var sinon = require("./util/core"); - -function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; - - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ - - return; - } - - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); - - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } -} - -/* Public: walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ -function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); -} - -sinon.walk = walk; - -},{"./util/core":25}],38:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],39:[function(require,module,exports){ -(function (global){ -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - "use strict"; - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"samsam":41}],40:[function(require,module,exports){ -(function (global){ -/*global global, window*/ -/** - * @author Christian Johansen (christian@cjohansen.no) and contributors - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (global) { - "use strict"; - - // Make properties writable in IE, as per - // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html - // JSLint being anal - var glbl = global; - - global.setTimeout = glbl.setTimeout; - global.clearTimeout = glbl.clearTimeout; - global.setInterval = glbl.setInterval; - global.clearInterval = glbl.clearInterval; - global.Date = glbl.Date; - - // setImmediate is not a standard function - // avoid adding the prop to the window object if not present - if('setImmediate' in global) { - global.setImmediate = glbl.setImmediate; - global.clearImmediate = glbl.clearImmediate; - } - - // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() - // browsers, a number. - // see https://github.com/cjohansen/Sinon.JS/pull/436 - - var NOOP = function () { return undefined; }; - var timeoutResult = setTimeout(NOOP, 0); - var addTimerReturnsObject = typeof timeoutResult === "object"; - clearTimeout(timeoutResult); - - var NativeDate = Date; - var uniqueTimerId = 1; - - /** - * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into - * number of milliseconds. This is used to support human-readable strings passed - * to clock.tick() - */ - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],41:[function(require,module,exports){ -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); - -},{}],42:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var encoding = require("./lib/encoding.js"); - -module.exports = { - TextEncoder: encoding.TextEncoder, - TextDecoder: encoding.TextDecoder, -}; - -},{"./lib/encoding.js":44}],43:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Indexes from: http://encoding.spec.whatwg.org/indexes.json - -(function(global) { - 'use strict'; - global["encoding-indexes"] = { - "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], - "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,59335,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], - "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], - "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], - "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], - "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], - "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], - "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], - "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], - "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], - "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], - "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], - "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,9565,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], - "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], - "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], - "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], - "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,null,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], - "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], - "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], - "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] -}; -}(this)); - -},{}],44:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// If we're in node require encoding-indexes and attach it to the global. -/** - * @fileoverview Global |this| required for resolving indexes in node. - * @suppress {globalThis} - */ -if (typeof module !== "undefined" && module.exports) { - this["encoding-indexes"] = - require("./encoding-indexes.js")["encoding-indexes"]; -} - -(function(global) { - 'use strict'; - - // - // Utilities - // - - /** - * @param {number} a The number to test. - * @param {number} min The minimum value in the range, inclusive. - * @param {number} max The maximum value in the range, inclusive. - * @return {boolean} True if a >= min and a <= max. - */ - function inRange(a, min, max) { - return min <= a && a <= max; - } - - /** - * @param {number} n The numerator. - * @param {number} d The denominator. - * @return {number} The result of the integer division of n by d. - */ - function div(n, d) { - return Math.floor(n / d); - } - - /** - * @param {*} o - * @return {Object} - */ - function ToDictionary(o) { - if (o === undefined) return {}; - if (o === Object(o)) return o; - throw TypeError('Could not convert argument to dictionary'); - } - - /** - * @param {string} string Input string of UTF-16 code units. - * @return {!Array.} Code points. - */ - function stringToCodePoints(string) { - // http://heycam.github.io/webidl/#dfn-obtain-unicode - - // 1. Let S be the DOMString value. - var s = String(string); - - // 2. Let n be the length of S. - var n = s.length; - - // 3. Initialize i to 0. - var i = 0; - - // 4. Initialize U to be an empty sequence of Unicode characters. - var u = []; - - // 5. While i < n: - while (i < n) { - - // 1. Let c be the code unit in S at index i. - var c = s.charCodeAt(i); - - // 2. Depending on the value of c: - - // c < 0xD800 or c > 0xDFFF - if (c < 0xD800 || c > 0xDFFF) { - // Append to U the Unicode character with code point c. - u.push(c); - } - - // 0xDC00 ≤ c ≤ 0xDFFF - else if (0xDC00 <= c && c <= 0xDFFF) { - // Append to U a U+FFFD REPLACEMENT CHARACTER. - u.push(0xFFFD); - } - - // 0xD800 ≤ c ≤ 0xDBFF - else if (0xD800 <= c && c <= 0xDBFF) { - // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT - // CHARACTER. - if (i === n - 1) { - u.push(0xFFFD); - } - // 2. Otherwise, i < n−1: - else { - // 1. Let d be the code unit in S at index i+1. - var d = string.charCodeAt(i + 1); - - // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: - if (0xDC00 <= d && d <= 0xDFFF) { - // 1. Let a be c & 0x3FF. - var a = c & 0x3FF; - - // 2. Let b be d & 0x3FF. - var b = d & 0x3FF; - - // 3. Append to U the Unicode character with code point - // 2^16+2^10*a+b. - u.push(0x10000 + (a << 10) + b); - - // 4. Set i to i+1. - i += 1; - } - - // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a - // U+FFFD REPLACEMENT CHARACTER. - else { - u.push(0xFFFD); - } - } - } - - // 3. Set i to i+1. - i += 1; - } - - // 6. Return U. - return u; - } - - /** - * @param {!Array.} code_points Array of code points. - * @return {string} string String of UTF-16 code units. - */ - function codePointsToString(code_points) { - var s = ''; - for (var i = 0; i < code_points.length; ++i) { - var cp = code_points[i]; - if (cp <= 0xFFFF) { - s += String.fromCharCode(cp); - } else { - cp -= 0x10000; - s += String.fromCharCode((cp >> 10) + 0xD800, - (cp & 0x3FF) + 0xDC00); - } - } - return s; - } - - - // - // Implementation of Encoding specification - // http://dvcs.w3.org/hg/encoding/raw-file/tip/Overview.html - // - - // - // 3. Terminology - // - - /** - * End-of-stream is a special token that signifies no more tokens - * are in the stream. - * @const - */ var end_of_stream = -1; - - /** - * A stream represents an ordered sequence of tokens. - * - * @constructor - * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide the - * stream. - */ - function Stream(tokens) { - /** @type {!Array.} */ - this.tokens = [].slice.call(tokens); - } - - Stream.prototype = { - /** - * @return {boolean} True if end-of-stream has been hit. - */ - endOfStream: function() { - return !this.tokens.length; - }, - - /** - * When a token is read from a stream, the first token in the - * stream must be returned and subsequently removed, and - * end-of-stream must be returned otherwise. - * - * @return {number} Get the next token from the stream, or - * end_of_stream. - */ - read: function() { - if (!this.tokens.length) - return end_of_stream; - return this.tokens.shift(); - }, - - /** - * When one or more tokens are prepended to a stream, those tokens - * must be inserted, in given order, before the first token in the - * stream. - * - * @param {(number|!Array.)} token The token(s) to prepend to the stream. - */ - prepend: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.unshift(tokens.pop()); - } else { - this.tokens.unshift(token); - } - }, - - /** - * When one or more tokens are pushed to a stream, those tokens - * must be inserted, in given order, after the last token in the - * stream. - * - * @param {(number|!Array.)} token The tokens(s) to prepend to the stream. - */ - push: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.push(tokens.shift()); - } else { - this.tokens.push(token); - } - } - }; - - // - // 4. Encodings - // - - // 4.1 Encoders and decoders - - /** @const */ - var finished = -1; - - /** - * @param {boolean} fatal If true, decoding errors raise an exception. - * @param {number=} opt_code_point Override the standard fallback code point. - * @return {number} The code point to insert on a decoding error. - */ - function decoderError(fatal, opt_code_point) { - if (fatal) - throw TypeError('Decoder error'); - return opt_code_point || 0xFFFD; - } - - /** - * @param {number} code_point The code point that could not be encoded. - * @return {number} Always throws, no value is actually returned. - */ - function encoderError(code_point) { - throw TypeError('The code point ' + code_point + ' could not be encoded.'); - } - - /** @interface */ - function Decoder() {} - Decoder.prototype = { - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point, or |finished|. - */ - handler: function(stream, bite) {} - }; - - /** @interface */ - function Encoder() {} - Encoder.prototype = { - /** - * @param {Stream} stream The stream of code points being encoded. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit, or |finished|. - */ - handler: function(stream, code_point) {} - }; - - // 4.2 Names and labels - - // TODO: Define @typedef for Encoding: {name:string,labels:Array.} - // https://github.com/google/closure-compiler/issues/247 - - /** - * @param {string} label The encoding label. - * @return {?{name:string,labels:Array.}} - */ - function getEncoding(label) { - // 1. Remove any leading and trailing ASCII whitespace from label. - label = String(label).trim().toLowerCase(); - - // 2. If label is an ASCII case-insensitive match for any of the - // labels listed in the table below, return the corresponding - // encoding, and failure otherwise. - if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { - return label_to_encoding[label]; - } - return null; - } - - /** - * Encodings table: http://encoding.spec.whatwg.org/encodings.json - * @const - * @type {!Array.<{ - * heading: string, - * encodings: Array.<{name:string,labels:Array.}> - * }>} - */ - var encodings = [ - { - "encodings": [ - { - "labels": [ - "unicode-1-1-utf-8", - "utf-8", - "utf8" - ], - "name": "utf-8" - } - ], - "heading": "The Encoding" - }, - { - "encodings": [ - { - "labels": [ - "866", - "cp866", - "csibm866", - "ibm866" - ], - "name": "ibm866" - }, - { - "labels": [ - "csisolatin2", - "iso-8859-2", - "iso-ir-101", - "iso8859-2", - "iso88592", - "iso_8859-2", - "iso_8859-2:1987", - "l2", - "latin2" - ], - "name": "iso-8859-2" - }, - { - "labels": [ - "csisolatin3", - "iso-8859-3", - "iso-ir-109", - "iso8859-3", - "iso88593", - "iso_8859-3", - "iso_8859-3:1988", - "l3", - "latin3" - ], - "name": "iso-8859-3" - }, - { - "labels": [ - "csisolatin4", - "iso-8859-4", - "iso-ir-110", - "iso8859-4", - "iso88594", - "iso_8859-4", - "iso_8859-4:1988", - "l4", - "latin4" - ], - "name": "iso-8859-4" - }, - { - "labels": [ - "csisolatincyrillic", - "cyrillic", - "iso-8859-5", - "iso-ir-144", - "iso8859-5", - "iso88595", - "iso_8859-5", - "iso_8859-5:1988" - ], - "name": "iso-8859-5" - }, - { - "labels": [ - "arabic", - "asmo-708", - "csiso88596e", - "csiso88596i", - "csisolatinarabic", - "ecma-114", - "iso-8859-6", - "iso-8859-6-e", - "iso-8859-6-i", - "iso-ir-127", - "iso8859-6", - "iso88596", - "iso_8859-6", - "iso_8859-6:1987" - ], - "name": "iso-8859-6" - }, - { - "labels": [ - "csisolatingreek", - "ecma-118", - "elot_928", - "greek", - "greek8", - "iso-8859-7", - "iso-ir-126", - "iso8859-7", - "iso88597", - "iso_8859-7", - "iso_8859-7:1987", - "sun_eu_greek" - ], - "name": "iso-8859-7" - }, - { - "labels": [ - "csiso88598e", - "csisolatinhebrew", - "hebrew", - "iso-8859-8", - "iso-8859-8-e", - "iso-ir-138", - "iso8859-8", - "iso88598", - "iso_8859-8", - "iso_8859-8:1988", - "visual" - ], - "name": "iso-8859-8" - }, - { - "labels": [ - "csiso88598i", - "iso-8859-8-i", - "logical" - ], - "name": "iso-8859-8-i" - }, - { - "labels": [ - "csisolatin6", - "iso-8859-10", - "iso-ir-157", - "iso8859-10", - "iso885910", - "l6", - "latin6" - ], - "name": "iso-8859-10" - }, - { - "labels": [ - "iso-8859-13", - "iso8859-13", - "iso885913" - ], - "name": "iso-8859-13" - }, - { - "labels": [ - "iso-8859-14", - "iso8859-14", - "iso885914" - ], - "name": "iso-8859-14" - }, - { - "labels": [ - "csisolatin9", - "iso-8859-15", - "iso8859-15", - "iso885915", - "iso_8859-15", - "l9" - ], - "name": "iso-8859-15" - }, - { - "labels": [ - "iso-8859-16" - ], - "name": "iso-8859-16" - }, - { - "labels": [ - "cskoi8r", - "koi", - "koi8", - "koi8-r", - "koi8_r" - ], - "name": "koi8-r" - }, - { - "labels": [ - "koi8-u" - ], - "name": "koi8-u" - }, - { - "labels": [ - "csmacintosh", - "mac", - "macintosh", - "x-mac-roman" - ], - "name": "macintosh" - }, - { - "labels": [ - "dos-874", - "iso-8859-11", - "iso8859-11", - "iso885911", - "tis-620", - "windows-874" - ], - "name": "windows-874" - }, - { - "labels": [ - "cp1250", - "windows-1250", - "x-cp1250" - ], - "name": "windows-1250" - }, - { - "labels": [ - "cp1251", - "windows-1251", - "x-cp1251" - ], - "name": "windows-1251" - }, - { - "labels": [ - "ansi_x3.4-1968", - "ascii", - "cp1252", - "cp819", - "csisolatin1", - "ibm819", - "iso-8859-1", - "iso-ir-100", - "iso8859-1", - "iso88591", - "iso_8859-1", - "iso_8859-1:1987", - "l1", - "latin1", - "us-ascii", - "windows-1252", - "x-cp1252" - ], - "name": "windows-1252" - }, - { - "labels": [ - "cp1253", - "windows-1253", - "x-cp1253" - ], - "name": "windows-1253" - }, - { - "labels": [ - "cp1254", - "csisolatin5", - "iso-8859-9", - "iso-ir-148", - "iso8859-9", - "iso88599", - "iso_8859-9", - "iso_8859-9:1989", - "l5", - "latin5", - "windows-1254", - "x-cp1254" - ], - "name": "windows-1254" - }, - { - "labels": [ - "cp1255", - "windows-1255", - "x-cp1255" - ], - "name": "windows-1255" - }, - { - "labels": [ - "cp1256", - "windows-1256", - "x-cp1256" - ], - "name": "windows-1256" - }, - { - "labels": [ - "cp1257", - "windows-1257", - "x-cp1257" - ], - "name": "windows-1257" - }, - { - "labels": [ - "cp1258", - "windows-1258", - "x-cp1258" - ], - "name": "windows-1258" - }, - { - "labels": [ - "x-mac-cyrillic", - "x-mac-ukrainian" - ], - "name": "x-mac-cyrillic" - } - ], - "heading": "Legacy single-byte encodings" - }, - { - "encodings": [ - { - "labels": [ - "chinese", - "csgb2312", - "csiso58gb231280", - "gb2312", - "gb_2312", - "gb_2312-80", - "gbk", - "iso-ir-58", - "x-gbk" - ], - "name": "gbk" - }, - { - "labels": [ - "gb18030" - ], - "name": "gb18030" - } - ], - "heading": "Legacy multi-byte Chinese (simplified) encodings" - }, - { - "encodings": [ - { - "labels": [ - "big5", - "big5-hkscs", - "cn-big5", - "csbig5", - "x-x-big5" - ], - "name": "big5" - } - ], - "heading": "Legacy multi-byte Chinese (traditional) encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseucpkdfmtjapanese", - "euc-jp", - "x-euc-jp" - ], - "name": "euc-jp" - }, - { - "labels": [ - "csiso2022jp", - "iso-2022-jp" - ], - "name": "iso-2022-jp" - }, - { - "labels": [ - "csshiftjis", - "ms_kanji", - "shift-jis", - "shift_jis", - "sjis", - "windows-31j", - "x-sjis" - ], - "name": "shift_jis" - } - ], - "heading": "Legacy multi-byte Japanese encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseuckr", - "csksc56011987", - "euc-kr", - "iso-ir-149", - "korean", - "ks_c_5601-1987", - "ks_c_5601-1989", - "ksc5601", - "ksc_5601", - "windows-949" - ], - "name": "euc-kr" - } - ], - "heading": "Legacy multi-byte Korean encodings" - }, - { - "encodings": [ - { - "labels": [ - "csiso2022kr", - "hz-gb-2312", - "iso-2022-cn", - "iso-2022-cn-ext", - "iso-2022-kr" - ], - "name": "replacement" - }, - { - "labels": [ - "utf-16be" - ], - "name": "utf-16be" - }, - { - "labels": [ - "utf-16", - "utf-16le" - ], - "name": "utf-16le" - }, - { - "labels": [ - "x-user-defined" - ], - "name": "x-user-defined" - } - ], - "heading": "Legacy miscellaneous encodings" - } - ]; - - // Label to encoding registry. - /** @type {Object.}>} */ - var label_to_encoding = {}; - encodings.forEach(function(category) { - category.encodings.forEach(function(encoding) { - encoding.labels.forEach(function(label) { - label_to_encoding[label] = encoding; - }); - }); - }); - - // Registry of of encoder/decoder factories, by encoding name. - /** @type {Object.} */ - var encoders = {}; - /** @type {Object.} */ - var decoders = {}; - - // - // 5. Indexes - // - - /** - * @param {number} pointer The |pointer| to search for. - * @param {(!Array.|undefined)} index The |index| to search within. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in |index|. - */ - function indexCodePointFor(pointer, index) { - if (!index) return null; - return index[pointer] || null; - } - - /** - * @param {number} code_point The |code point| to search for. - * @param {!Array.} index The |index| to search within. - * @return {?number} The first pointer corresponding to |code point| in - * |index|, or null if |code point| is not in |index|. - */ - function indexPointerFor(code_point, index) { - var pointer = index.indexOf(code_point); - return pointer === -1 ? null : pointer; - } - - /** - * @param {string} name Name of the index. - * @return {(!Array.|!Array.>)} - * */ - function index(name) { - if (!('encoding-indexes' in global)) { - throw Error("Indexes missing." + - " Did you forget to include encoding-indexes.js?"); - } - return global['encoding-indexes'][name]; - } - - /** - * @param {number} pointer The |pointer| to search for in the gb18030 index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the gb18030 index. - */ - function indexGB18030RangesCodePointFor(pointer) { - // 1. If pointer is greater than 39419 and less than 189000, or - // pointer is greater than 1237575, return null. - if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) - return null; - - // 2. Let offset be the last pointer in index gb18030 ranges that - // is equal to or less than pointer and let code point offset be - // its corresponding code point. - var offset = 0; - var code_point_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[0] <= pointer) { - offset = entry[0]; - code_point_offset = entry[1]; - } else { - break; - } - } - - // 3. Return a code point whose value is code point offset + - // pointer − offset. - return code_point_offset + pointer - offset; - } - - /** - * @param {number} code_point The |code point| to locate in the gb18030 index. - * @return {number} The first pointer corresponding to |code point| in the - * gb18030 index. - */ - function indexGB18030RangesPointerFor(code_point) { - // 1. Let offset be the last code point in index gb18030 ranges - // that is equal to or less than code point and let pointer offset - // be its corresponding pointer. - var offset = 0; - var pointer_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[1] <= code_point) { - offset = entry[1]; - pointer_offset = entry[0]; - } else { - break; - } - } - - // 2. Return a pointer whose value is pointer offset + code point - // − offset. - return pointer_offset + code_point - offset; - } - - /** - * @param {number} code_point The |code_point| to search for in the shift_jis index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the shift_jis index. - */ - function indexShiftJISPointerFor(code_point) { - // 1. Let index be index jis0208 excluding all pointers in the - // range 8272 to 8835. - var pointer = indexPointerFor(code_point, index('jis0208')); - if (pointer === null || inRange(pointer, 8272, 8835)) - return null; - - // 2. Return the index pointer for code point in index. - return pointer; - } - - // - // 7. API - // - - /** @const */ var DEFAULT_ENCODING = 'utf-8'; - - // 7.1 Interface TextDecoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextDecoder(encoding, options) { - if (!(this instanceof TextDecoder)) { - return new TextDecoder(encoding, options); - } - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - if (!decoders[this._encoding.name]) { - throw Error('Decoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {boolean} */ - this._BOMseen = false; - /** @private @type {?Decoder} */ - this._decoder = null; - /** @private @type {boolean} */ - this._fatal = Boolean(options['fatal']); - /** @private @type {boolean} */ - this._ignoreBOM = Boolean(options['ignoreBOM']); - - if (Object.defineProperty) { - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - Object.defineProperty(this, 'fatal', {value: this._fatal}); - Object.defineProperty(this, 'ignoreBOM', {value: this._ignoreBOM}); - } else { - this.encoding = this._encoding.name; - this.fatal = this._fatal; - this.ignoreBOM = this._ignoreBOM; - } - - return this; - } - - TextDecoder.prototype = { - /** - * @param {ArrayBufferView=} input The buffer of bytes to decode. - * @param {Object=} options - * @return {string} The decoded string. - */ - decode: function decode(input, options) { - var bytes; - if (typeof input === 'object' && input instanceof ArrayBuffer) { - bytes = new Uint8Array(input); - } else if (typeof input === 'object' && 'buffer' in input && - input.buffer instanceof ArrayBuffer) { - bytes = new Uint8Array(input.buffer, - input.byteOffset, - input.byteLength); - } else { - bytes = new Uint8Array(0); - } - - options = ToDictionary(options); - - if (!this._streaming) { - this._decoder = decoders[this._encoding.name]({fatal: this._fatal}); - this._BOMseen = false; - } - this._streaming = Boolean(options['stream']); - - var input_stream = new Stream(bytes); - - var code_points = []; - - /** @type {?(number|!Array.)} */ - var result; - - while (!input_stream.endOfStream()) { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } - if (!this._streaming) { - do { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } while (!input_stream.endOfStream()); - this._decoder = null; - } - - if (code_points.length) { - // If encoding is one of utf-8, utf-16be, and utf-16le, and - // ignore BOM flag and BOM seen flag are unset, run these - // subsubsteps: - if (['utf-8', 'utf-16le', 'utf-16be'].indexOf(this.encoding) !== -1 && - !this._ignoreBOM && !this._BOMseen) { - // If token is U+FEFF, set BOM seen flag. - if (code_points[0] === 0xFEFF) { - this._BOMseen = true; - code_points.shift(); - } else { - // Otherwise, if token is not end-of-stream, set BOM seen - // flag and append token to output. - this._BOMseen = true; - } - } - } - - return codePointsToString(code_points); - } - }; - - // 7.2 Interface TextEncoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextEncoder(encoding, options) { - if (!(this instanceof TextEncoder)) - return new TextEncoder(encoding, options); - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - var allowLegacyEncoding = - Boolean(options['NONSTANDARD_allowLegacyEncoding']); - var isLegacyEncoding = (this._encoding.name !== 'utf-8' && - this._encoding.name !== 'utf-16le' && - this._encoding.name !== 'utf-16be'); - if (this._encoding === null || (isLegacyEncoding && !allowLegacyEncoding)) - throw RangeError('Unknown encoding: ' + encoding); - - if (!encoders[this._encoding.name]) { - throw Error('Encoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {?Encoder} */ - this._encoder = null; - /** @private @type {{fatal: boolean}} */ - this._options = {fatal: Boolean(options['fatal'])}; - - if (Object.defineProperty) - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - else - this.encoding = this._encoding.name; - - return this; - } - - TextEncoder.prototype = { - /** - * @param {string=} opt_string The string to encode. - * @param {Object=} options - * @return {Uint8Array} Encoded bytes, as a Uint8Array. - */ - encode: function encode(opt_string, options) { - opt_string = opt_string ? String(opt_string) : ''; - options = ToDictionary(options); - - // NOTE: This option is nonstandard. None of the encodings - // permitted for encoding (i.e. UTF-8, UTF-16) are stateful, - // so streaming is not necessary. - if (!this._streaming) - this._encoder = encoders[this._encoding.name](this._options); - this._streaming = Boolean(options['stream']); - - var bytes = []; - var input_stream = new Stream(stringToCodePoints(opt_string)); - /** @type {?(number|!Array.)} */ - var result; - while (!input_stream.endOfStream()) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - if (!this._streaming) { - while (true) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - this._encoder = null; - } - return new Uint8Array(bytes); - } - }; - - - // - // 8. The encoding - // - - // 8.1 utf-8 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function UTF8Decoder(options) { - var fatal = options.fatal; - - // utf-8's decoder's has an associated utf-8 code point, utf-8 - // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 - // lower boundary (initially 0x80), and a utf-8 upper boundary - // (initially 0xBF). - var /** @type {number} */ utf8_code_point = 0, - /** @type {number} */ utf8_bytes_seen = 0, - /** @type {number} */ utf8_bytes_needed = 0, - /** @type {number} */ utf8_lower_boundary = 0x80, - /** @type {number} */ utf8_upper_boundary = 0xBF; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, - // set utf-8 bytes needed to 0 and return error. - if (bite === end_of_stream && utf8_bytes_needed !== 0) { - utf8_bytes_needed = 0; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 3. If utf-8 bytes needed is 0, based on byte: - if (utf8_bytes_needed === 0) { - - // 0x00 to 0x7F - if (inRange(bite, 0x00, 0x7F)) { - // Return a code point whose value is byte. - return bite; - } - - // 0xC2 to 0xDF - if (inRange(bite, 0xC2, 0xDF)) { - // Set utf-8 bytes needed to 1 and utf-8 code point to byte - // − 0xC0. - utf8_bytes_needed = 1; - utf8_code_point = bite - 0xC0; - } - - // 0xE0 to 0xEF - else if (inRange(bite, 0xE0, 0xEF)) { - // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. - if (bite === 0xE0) - utf8_lower_boundary = 0xA0; - // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. - if (bite === 0xED) - utf8_upper_boundary = 0x9F; - // 3. Set utf-8 bytes needed to 2 and utf-8 code point to - // byte − 0xE0. - utf8_bytes_needed = 2; - utf8_code_point = bite - 0xE0; - } - - // 0xF0 to 0xF4 - else if (inRange(bite, 0xF0, 0xF4)) { - // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. - if (bite === 0xF0) - utf8_lower_boundary = 0x90; - // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. - if (bite === 0xF4) - utf8_upper_boundary = 0x8F; - // 3. Set utf-8 bytes needed to 3 and utf-8 code point to - // byte − 0xF0. - utf8_bytes_needed = 3; - utf8_code_point = bite - 0xF0; - } - - // Otherwise - else { - // Return error. - return decoderError(fatal); - } - - // Then (byte is in the range 0xC2 to 0xF4) set utf-8 code - // point to utf-8 code point << (6 × utf-8 bytes needed) and - // return continue. - utf8_code_point = utf8_code_point << (6 * utf8_bytes_needed); - return null; - } - - // 4. If byte is not in the range utf-8 lower boundary to utf-8 - // upper boundary, run these substeps: - if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { - - // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 - // bytes seen to 0, set utf-8 lower boundary to 0x80, and set - // utf-8 upper boundary to 0xBF. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Return error. - return decoderError(fatal); - } - - // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary - // to 0xBF. - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 6. Increase utf-8 bytes seen by one and set utf-8 code point - // to utf-8 code point + (byte − 0x80) << (6 × (utf-8 bytes - // needed − utf-8 bytes seen)). - utf8_bytes_seen += 1; - utf8_code_point += (bite - 0x80) << (6 * (utf8_bytes_needed - utf8_bytes_seen)); - - // 7. If utf-8 bytes seen is not equal to utf-8 bytes needed, - // continue. - if (utf8_bytes_seen !== utf8_bytes_needed) - return null; - - // 8. Let code point be utf-8 code point. - var code_point = utf8_code_point; - - // 9. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes - // seen to 0. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - - // 10. Return a code point whose value is code point. - return code_point; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function UTF8Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007f)) - return code_point; - - // 3. Set count and offset based on the range code point is in: - var count, offset; - // U+0080 to U+07FF: 1 and 0xC0 - if (inRange(code_point, 0x0080, 0x07FF)) { - count = 1; - offset = 0xC0; - } - // U+0800 to U+FFFF: 2 and 0xE0 - else if (inRange(code_point, 0x0800, 0xFFFF)) { - count = 2; - offset = 0xE0; - } - // U+10000 to U+10FFFF: 3 and 0xF0 - else if (inRange(code_point, 0x10000, 0x10FFFF)) { - count = 3; - offset = 0xF0; - } - - // 4.Let bytes be a byte sequence whose first byte is (code - // point >> (6 × count)) + offset. - var bytes = [(code_point >> (6 * count)) + offset]; - - // 5. Run these substeps while count is greater than 0: - while (count > 0) { - - // 1. Set temp to code point >> (6 × (count − 1)). - var temp = code_point >> (6 * (count - 1)); - - // 2. Append to bytes 0x80 | (temp & 0x3F). - bytes.push(0x80 | (temp & 0x3F)); - - // 3. Decrease count by one. - count -= 1; - } - - // 6. Return bytes bytes, in order. - return bytes; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['utf-8'] = function(options) { - return new UTF8Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-8'] = function(options) { - return new UTF8Decoder(options); - }; - - // - // 9. Legacy single-byte encodings - // - - // 9.1 single-byte decoder - /** - * @constructor - * @implements {Decoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteDecoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Let code point be the index code point for byte − 0x80 in - // index single-byte. - var code_point = index[bite - 0x80]; - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - }; - } - - // 9.2 single-byte encoder - /** - * @constructor - * @implements {Encoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteEncoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // single-byte. - var pointer = indexPointerFor(code_point, index); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - encoderError(code_point); - - // 5. Return a byte whose value is pointer + 0x80. - return pointer + 0x80; - }; - } - - (function() { - if (!('encoding-indexes' in global)) - return; - encodings.forEach(function(category) { - if (category.heading !== 'Legacy single-byte encodings') - return; - category.encodings.forEach(function(encoding) { - var name = encoding.name; - var idx = index(name); - /** @param {{fatal: boolean}} options */ - decoders[name] = function(options) { - return new SingleByteDecoder(idx, options); - }; - /** @param {{fatal: boolean}} options */ - encoders[name] = function(options) { - return new SingleByteEncoder(idx, options); - }; - }); - }); - }()); - - // - // 10. Legacy multi-byte Chinese (simplified) encodings - // - - // 10.1 gbk - - // 10.1.1 gbk decoder - // gbk's decoder is gb18030's decoder. - /** @param {{fatal: boolean}} options */ - decoders['gbk'] = function(options) { - return new GB18030Decoder(options); - }; - - // 10.1.2 gbk encoder - // gbk's encoder is gb18030's encoder with its gbk flag set. - /** @param {{fatal: boolean}} options */ - encoders['gbk'] = function(options) { - return new GB18030Encoder(options, true); - }; - - // 10.2 gb18030 - - // 10.2.1 gb18030 decoder - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function GB18030Decoder(options) { - var fatal = options.fatal; - // gb18030's decoder has an associated gb18030 first, gb18030 - // second, and gb18030 third (all initially 0x00). - var /** @type {number} */ gb18030_first = 0x00, - /** @type {number} */ gb18030_second = 0x00, - /** @type {number} */ gb18030_third = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and gb18030 first, gb18030 - // second, and gb18030 third are 0x00, return finished. - if (bite === end_of_stream && gb18030_first === 0x00 && - gb18030_second === 0x00 && gb18030_third === 0x00) { - return finished; - } - // 2. If byte is end-of-stream, and gb18030 first, gb18030 - // second, or gb18030 third is not 0x00, set gb18030 first, - // gb18030 second, and gb18030 third to 0x00, and return error. - if (bite === end_of_stream && - (gb18030_first !== 0x00 || gb18030_second !== 0x00 || gb18030_third !== 0x00)) { - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - decoderError(fatal); - } - var code_point; - // 3. If gb18030 third is not 0x00, run these substeps: - if (gb18030_third !== 0x00) { - // 1. Let code point be null. - code_point = null; - // 2. If byte is in the range 0x30 to 0x39, set code point to - // the index gb18030 ranges code point for (((gb18030 first − - // 0x81) × 10 + gb18030 second − 0x30) × 126 + gb18030 third − - // 0x81) × 10 + byte − 0x30. - if (inRange(bite, 0x30, 0x39)) { - code_point = indexGB18030RangesCodePointFor( - (((gb18030_first - 0x81) * 10 + (gb18030_second - 0x30)) * 126 + - (gb18030_third - 0x81)) * 10 + bite - 0x30); - } - - // 3. Let buffer be a byte sequence consisting of gb18030 - // second, gb18030 third, and byte, in order. - var buffer = [gb18030_second, gb18030_third, bite]; - - // 4. Set gb18030 first, gb18030 second, and gb18030 third to - // 0x00. - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - - // 5. If code point is null, prepend buffer to stream and - // return error. - if (code_point === null) { - stream.prepend(buffer); - return decoderError(fatal); - } - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 4. If gb18030 second is not 0x00, run these substeps: - if (gb18030_second !== 0x00) { - - // 1. If byte is in the range 0x81 to 0xFE, set gb18030 third - // to byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_third = bite; - return null; - } - - // 2. Prepend gb18030 second followed by byte to stream, set - // gb18030 first and gb18030 second to 0x00, and return error. - stream.prepend([gb18030_second, bite]); - gb18030_first = 0x00; - gb18030_second = 0x00; - return decoderError(fatal); - } - - // 5. If gb18030 first is not 0x00, run these substeps: - if (gb18030_first !== 0x00) { - - // 1. If byte is in the range 0x30 to 0x39, set gb18030 second - // to byte and return continue. - if (inRange(bite, 0x30, 0x39)) { - gb18030_second = bite; - return null; - } - - // 2. Let lead be gb18030 first, let pointer be null, and set - // gb18030 first to 0x00. - var lead = gb18030_first; - var pointer = null; - gb18030_first = 0x00; - - // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x41; - - // 4. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFE, - // set pointer to (lead − 0x81) × 190 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - offset); - - // 5. Let code point be null if pointer is null and the index - // code point for pointer in index gb18030 otherwise. - code_point = pointer === null ? null : - indexCodePointFor(pointer, index('gb18030')); - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x80, return code point U+20AC. - if (bite === 0x80) - return 0x20AC; - - // 8. If byte is in the range 0x81 to 0xFE, set gb18030 first to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_first = bite; - return null; - } - - // 9. Return error. - return decoderError(fatal); - }; - } - - // 10.2.2 gb18030 encoder - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - * @param {boolean=} gbk_flag - */ - function GB18030Encoder(options, gbk_flag) { - var fatal = options.fatal; - // gb18030's decoder has an associated gbk flag (initially unset). - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) { - return code_point; - } - - // 3. If the gbk flag is set and code point is U+20AC, return - // byte 0x80. - if (gbk_flag && code_point === 0x20AC) - return 0x80; - - // 4. Let pointer be the index pointer for code point in index - // gb18030. - var pointer = indexPointerFor(code_point, index('gb18030')); - - // 5. If pointer is not null, run these substeps: - if (pointer !== null) { - - // 1. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 2. Let trail be pointer % 190. - var trail = pointer % 190; - - // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. - var offset = trail < 0x3F ? 0x40 : 0x41; - - // 4. Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - } - - // 6. If gbk flag is set, return error with code point. - if (gbk_flag) - return encoderError(code_point); - - // 7. Set pointer to the index gb18030 ranges pointer for code - // point. - pointer = indexGB18030RangesPointerFor(code_point); - - // 8. Let byte1 be pointer / 10 / 126 / 10. - var byte1 = div(div(div(pointer, 10), 126), 10); - - // 9. Set pointer to pointer − byte1 × 10 × 126 × 10. - pointer = pointer - byte1 * 10 * 126 * 10; - - // 10. Let byte2 be pointer / 10 / 126. - var byte2 = div(div(pointer, 10), 126); - - // 11. Set pointer to pointer − byte2 × 10 × 126. - pointer = pointer - byte2 * 10 * 126; - - // 12. Let byte3 be pointer / 10. - var byte3 = div(pointer, 10); - - // 13. Let byte4 be pointer − byte3 × 10. - var byte4 = pointer - byte3 * 10; - - // 14. Return four bytes whose values are byte1 + 0x81, byte2 + - // 0x30, byte3 + 0x81, byte4 + 0x30. - return [byte1 + 0x81, - byte2 + 0x30, - byte3 + 0x81, - byte4 + 0x30]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['gb18030'] = function(options) { - return new GB18030Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['gb18030'] = function(options) { - return new GB18030Decoder(options); - }; - - - // - // 11. Legacy multi-byte Chinese (traditional) encodings - // - - // 11.1 big5 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function Big5Decoder(options) { - var fatal = options.fatal; - // big5's decoder has an associated big5 lead (initially 0x00). - var /** @type {number} */ big5_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and big5 lead is not 0x00, set - // big5 lead to 0x00 and return error. - if (bite === end_of_stream && big5_lead !== 0x00) { - big5_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and big5 lead is 0x00, return - // finished. - if (bite === end_of_stream && big5_lead === 0x00) - return finished; - - // 3. If big5 lead is not 0x00, let lead be big5 lead, let - // pointer be null, set big5 lead to 0x00, and then run these - // substeps: - if (big5_lead !== 0x00) { - var lead = big5_lead; - var pointer = null; - big5_lead = 0x00; - - // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x62; - - // 2. If byte is in the range 0x40 to 0x7E or 0xA1 to 0xFE, - // set pointer to (lead − 0x81) × 157 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) - pointer = (lead - 0x81) * 157 + (bite - offset); - - // 3. If there is a row in the table below whose first column - // is pointer, return the two code points listed in its second - // column - // Pointer | Code points - // --------+-------------- - // 1133 | U+00CA U+0304 - // 1135 | U+00CA U+030C - // 1164 | U+00EA U+0304 - // 1166 | U+00EA U+030C - switch (pointer) { - case 1133: return [0x00CA, 0x0304]; - case 1135: return [0x00CA, 0x030C]; - case 1164: return [0x00EA, 0x0304]; - case 1166: return [0x00EA, 0x030C]; - } - - // 4. Let code point be null if pointer is null and the index - // code point for pointer in index big5 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('big5')); - - // 5. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 6. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 7. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set big5 lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - big5_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function Big5Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // big5. - var pointer = indexPointerFor(code_point, index('big5')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 157 + 0x81. - var lead = div(pointer, 157) + 0x81; - - // 6. If lead is less than 0xA1, return error with code point. - if (lead < 0xA1) - return encoderError(code_point); - - // 7. Let trail be pointer % 157. - var trail = pointer % 157; - - // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 - // otherwise. - var offset = trail < 0x3F ? 0x40 : 0x62; - - // Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['big5'] = function(options) { - return new Big5Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['big5'] = function(options) { - return new Big5Decoder(options); - }; - - - // - // 12. Legacy multi-byte Japanese encodings - // - - // 12.1 euc-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCJPDecoder(options) { - var fatal = options.fatal; - - // euc-jp's decoder has an associated euc-jp jis0212 flag - // (initially unset) and euc-jp lead (initially 0x00). - var /** @type {boolean} */ eucjp_jis0212_flag = false, - /** @type {number} */ eucjp_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set - // euc-jp lead to 0x00, and return error. - if (bite === end_of_stream && eucjp_lead !== 0x00) { - eucjp_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-jp lead is 0x00, return - // finished. - if (bite === end_of_stream && eucjp_lead === 0x00) - return finished; - - // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to - // 0xDF, set euc-jp lead to 0x00 and return a code point whose - // value is 0xFF61 + byte − 0xA1. - if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { - eucjp_lead = 0x00; - return 0xFF61 + bite - 0xA1; - } - - // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to - // 0xFE, set the euc-jp jis0212 flag, set euc-jp lead to byte, - // and return continue. - if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { - eucjp_jis0212_flag = true; - eucjp_lead = bite; - return null; - } - - // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set - // euc-jp lead to 0x00, and run these substeps: - if (eucjp_lead !== 0x00) { - var lead = eucjp_lead; - eucjp_lead = 0x00; - - // 1. Let code point be null. - var code_point = null; - - // 2. If lead and byte are both in the range 0xA1 to 0xFE, set - // code point to the index code point for (lead − 0xA1) × 94 + - // byte − 0xA1 in index jis0208 if the euc-jp jis0212 flag is - // unset and in index jis0212 otherwise. - if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { - code_point = indexCodePointFor( - (lead - 0xA1) * 94 + (bite - 0xA1), - index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); - } - - // 3. Unset the euc-jp jis0212 flag. - eucjp_jis0212_flag = false; - - // 4. If byte is not in the range 0xA1 to 0xFE, prepend byte - // to stream. - if (!inRange(bite, 0xA1, 0xFE)) - stream.prepend(bite); - - // 5. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, set - // euc-jp lead to byte and return continue. - if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { - eucjp_lead = bite; - return null; - } - - // 8. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCJPEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return two - // bytes whose values are 0x8E and code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return [0x8E, code_point - 0xFF61 + 0xA1]; - - // 6. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 94 + 0xA1. - var lead = div(pointer, 94) + 0xA1; - - // 9. Let trail be pointer % 94 + 0xA1. - var trail = pointer % 94 + 0xA1; - - // 10. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-jp'] = function(options) { - return new EUCJPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-jp'] = function(options) { - return new EUCJPDecoder(options); - }; - - // 12.2 iso-2022-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPDecoder(options) { - var fatal = options.fatal; - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - Katakana: 2, - LeadByte: 3, - TrailByte: 4, - EscapeStart: 5, - Escape: 6 - }; - // iso-2022-jp's decoder has an associated iso-2022-jp decoder - // state (initially ASCII), iso-2022-jp decoder output state - // (initially ASCII), iso-2022-jp lead (initially 0x00), and - // iso-2022-jp output flag (initially unset). - var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, - /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, - /** @type {number} */ iso2022jp_lead = 0x00, - /** @type {boolean} */ iso2022jp_output_flag = false; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // switching on iso-2022-jp decoder state: - switch (iso2022jp_decoder_state) { - default: - case states.ASCII: - // ASCII - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E - && bite !== 0x0F && bite !== 0x1B) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Roman: - // Roman - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x5C - if (bite === 0x5C) { - // Unset the iso-2022-jp output flag and return code point - // U+00A5. - iso2022jp_output_flag = false; - return 0x00A5; - } - - // 0x7E - if (bite === 0x7E) { - // Unset the iso-2022-jp output flag and return code point - // U+203E. - iso2022jp_output_flag = false; - return 0x203E; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F - && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Katakana: - // Katakana - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x5F - if (inRange(bite, 0x21, 0x5F)) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is 0xFF61 + byte − 0x21. - iso2022jp_output_flag = false; - return 0xFF61 + bite - 0x21; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.LeadByte: - // Lead byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // Unset the iso-2022-jp output flag, set iso-2022-jp lead - // to byte, iso-2022-jp decoder state to trail byte, and - // return continue. - iso2022jp_output_flag = false; - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.TrailByte; - return null; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.TrailByte: - // Trail byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return decoderError(fatal); - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // 1. Set the iso-2022-jp decoder state to lead byte. - iso2022jp_decoder_state = states.LeadByte; - - // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. - var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; - - // 3. Let code point be the index code point for pointer in index jis0208. - var code_point = indexCodePointFor(pointer, index('jis0208')); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // end-of-stream - if (bite === end_of_stream) { - // Set the iso-2022-jp decoder state to lead byte, prepend - // byte to stream, and return error. - iso2022jp_decoder_state = states.LeadByte; - stream.prepend(bite); - return decoderError(fatal); - } - - // Otherwise - // Set iso-2022-jp decoder state to lead byte and return - // error. - iso2022jp_decoder_state = states.LeadByte; - return decoderError(fatal); - - case states.EscapeStart: - // Escape start - - // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to - // byte, iso-2022-jp decoder state to escape, and return - // continue. - if (bite === 0x24 || bite === 0x28) { - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.Escape; - return null; - } - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state, and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - - case states.Escape: - // Escape - - // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to - // 0x00. - var lead = iso2022jp_lead; - iso2022jp_lead = 0x00; - - // 2. Let state be null. - var state = null; - - // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. - if (lead === 0x28 && bite === 0x42) - state = states.ASCII; - - // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. - if (lead === 0x28 && bite === 0x4A) - state = states.Roman; - - // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. - if (lead === 0x28 && bite === 0x49) - state = states.Katakana; - - // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set - // state to lead byte. - if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) - state = states.LeadByte; - - // 7. If state is non-null, run these substeps: - if (state !== null) { - // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder - // output state to states. - iso2022jp_decoder_state = iso2022jp_decoder_state = state; - - // 2. Let output flag be the iso-2022-jp output flag. - var output_flag = iso2022jp_output_flag; - - // 3. Set the iso-2022-jp output flag. - iso2022jp_output_flag = true; - - // 4. Return continue, if output flag is unset, and error - // otherwise. - return !output_flag ? null : decoderError(fatal); - } - - // 8. Prepend lead and byte to stream. - stream.prepend([lead, bite]); - - // 9. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - } - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPEncoder(options) { - var fatal = options.fatal; - // iso-2022-jp's encoder has an associated iso-2022-jp encoder - // state which is one of ASCII, Roman, and jis0208 (initially - // ASCII). - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - jis0208: 2 - }; - var /** @type {number} */ iso2022jp_state = states.ASCII; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream and iso-2022-jp encoder - // state is not ASCII, prepend code point to stream, set - // iso-2022-jp encoder state to ASCII, and return three bytes - // 0x1B 0x28 0x42. - if (code_point === end_of_stream && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - return [0x1B, 0x28, 0x42]; - } - - // 2. If code point is end-of-stream and iso-2022-jp encoder - // state is ASCII, return finished. - if (code_point === end_of_stream && iso2022jp_state === states.ASCII) - return finished; - - // 3. If iso-2022-jp encoder state is ASCII and code point is in - // the range U+0000 to U+007F, return a byte whose value is code - // point. - if (iso2022jp_state === states.ASCII && - inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 4. If iso-2022-jp encoder state is Roman and code point is in - // the range U+0000 to U+007F, excluding U+005C and U+007E, or - // is U+00A5 or U+203E, run these substeps: - if (iso2022jp_state === states.Roman && - inRange(code_point, 0x0000, 0x007F) && - code_point !== 0x005C && code_point !== 0x007E) { - - // 1. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 2. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 3. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - } - - // 5. If code point is in the range U+0000 to U+007F, and - // iso-2022-jp encoder state is not ASCII, prepend code point to - // stream, set iso-2022-jp encoder state to ASCII, and return - // three bytes 0x1B 0x28 0x42. - if (inRange(code_point, 0x0000, 0x007F) && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - iso2022jp_state = states.ASCII; - return [0x1B, 0x28, 0x42]; - } - - // 6. If code point is either U+00A5 or U+203E, and iso-2022-jp - // encoder state is not Roman, prepend code point to stream, set - // iso-2022-jp encoder state to Roman, and return three bytes - // 0x1B 0x28 0x4A. - if ((code_point === 0x00A5 || code_point === 0x203E) && - iso2022jp_state !== states.Roman) { - stream.prepend(code_point); - iso2022jp_state = states.Roman; - return [0x1B, 0x28, 0x4A]; - } - - // 7. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 8. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 9. If iso-2022-jp encoder state is not jis0208, prepend code - // point to stream, set iso-2022-jp encoder state to jis0208, - // and return three bytes 0x1B 0x24 0x42. - if (iso2022jp_state !== states.jis0208) { - stream.prepend(code_point); - iso2022jp_state = states.jis0208; - return [0x1B, 0x24, 0x42]; - } - - // 10. Let lead be pointer / 94 + 0x21. - var lead = div(pointer, 94) + 0x21; - - // 11. Let trail be pointer % 94 + 0x21. - var trail = pointer % 94 + 0x21; - - // 12. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['iso-2022-jp'] = function(options) { - return new ISO2022JPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['iso-2022-jp'] = function(options) { - return new ISO2022JPDecoder(options); - }; - - // 12.3 shift_jis - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISDecoder(options) { - var fatal = options.fatal; - // shift_jis's decoder has an associated shift_jis lead (initially - // 0x00). - var /** @type {number} */ shiftjis_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and shift_jis lead is not 0x00, - // set shift_jis lead to 0x00 and return error. - if (bite === end_of_stream && shiftjis_lead !== 0x00) { - shiftjis_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and shift_jis lead is 0x00, - // return finished. - if (bite === end_of_stream && shiftjis_lead === 0x00) - return finished; - - // 3. If shift_jis lead is not 0x00, let lead be shift_jis lead, - // let pointer be null, set shift_jis lead to 0x00, and then run - // these substeps: - if (shiftjis_lead !== 0x00) { - var lead = shiftjis_lead; - var pointer = null; - shiftjis_lead = 0x00; - - // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 - // otherwise. - var offset = (bite < 0x7F) ? 0x40 : 0x41; - - // 2. Let lead offset be 0x81, if lead is less than 0xA0, and - // 0xC1 otherwise. - var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; - - // 3. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFC, - // set pointer to (lead − lead offset) × 188 + byte − offset. - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) - pointer = (lead - lead_offset) * 188 + bite - offset; - - // 4. Let code point be null, if pointer is null, and the - // index code point for pointer in index jis0208 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('jis0208')); - - // 5. If code point is null and pointer is in the range 8836 - // to 10528, return a code point whose value is 0xE000 + - // pointer − 8836. - if (code_point === null && pointer !== null && - inRange(pointer, 8836, 10528)) - return 0xE000 + pointer - 8836; - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x80, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x80)) - return bite; - - // 5. If byte is in the range 0xA1 to 0xDF, return a code point - // whose value is 0xFF61 + byte − 0xA1. - if (inRange(bite, 0xA1, 0xDF)) - return 0xFF61 + bite - 0xA1; - - // 6. If byte is in the range 0x81 to 0x9F or 0xE0 to 0xFC, set - // shift_jis lead to byte and return continue. - if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { - shiftjis_lead = bite; - return null; - } - - // 7. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+0080, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x0080)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return a - // byte whose value is code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return code_point - 0xFF61 + 0xA1; - - // 6. Let pointer be the index shift_jis pointer for code point. - var pointer = indexShiftJISPointerFor(code_point); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 188. - var lead = div(pointer, 188); - - // 9. Let lead offset be 0x81, if lead is less than 0x1F, and - // 0xC1 otherwise. - var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; - - // 10. Let trail be pointer % 188. - var trail = pointer % 188; - - // 11. Let offset be 0x40, if trail is less than 0x3F, and 0x41 - // otherwise. - var offset = (trail < 0x3F) ? 0x40 : 0x41; - - // 12. Return two bytes whose values are lead + lead offset and - // trail + offset. - return [lead + lead_offset, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['shift_jis'] = function(options) { - return new ShiftJISEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['shift_jis'] = function(options) { - return new ShiftJISDecoder(options); - }; - - // - // 13. Legacy multi-byte Korean encodings - // - - // 13.1 euc-kr - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCKRDecoder(options) { - var fatal = options.fatal; - - // euc-kr's decoder has an associated euc-kr lead (initially 0x00). - var /** @type {number} */ euckr_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set - // euc-kr lead to 0x00 and return error. - if (bite === end_of_stream && euckr_lead !== 0) { - euckr_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-kr lead is 0x00, return - // finished. - if (bite === end_of_stream && euckr_lead === 0) - return finished; - - // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let - // pointer be null, set euc-kr lead to 0x00, and then run these - // substeps: - if (euckr_lead !== 0x00) { - var lead = euckr_lead; - var pointer = null; - euckr_lead = 0x00; - - // 1. If byte is in the range 0x41 to 0xFE, set pointer to - // (lead − 0x81) × 190 + (byte − 0x41). - if (inRange(bite, 0x41, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - 0x41); - - // 2. Let code point be null, if pointer is null, and the - // index code point for pointer in index euc-kr otherwise. - var code_point = (pointer === null) ? null : indexCodePointFor(pointer, index('euc-kr')); - - // 3. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null && inRange(bite, 0x00, 0x7F)) - stream.prepend(bite); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set euc-kr lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - euckr_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCKREncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // euc-kr. - var pointer = indexPointerFor(code_point, index('euc-kr')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 6. Let trail be pointer % 190 + 0x41. - var trail = (pointer % 190) + 0x41; - - // 7. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-kr'] = function(options) { - return new EUCKREncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-kr'] = function(options) { - return new EUCKRDecoder(options); - }; - - - // - // 14. Legacy miscellaneous encodings - // - - // 14.1 replacement - - // Not needed - API throws RangeError - - // 14.2 utf-16 - - /** - * @param {number} code_unit - * @param {boolean} utf16be - * @return {!Array.} bytes - */ - function convertCodeUnitToBytes(code_unit, utf16be) { - // 1. Let byte1 be code unit >> 8. - var byte1 = code_unit >> 8; - - // 2. Let byte2 be code unit & 0x00FF. - var byte2 = code_unit & 0x00FF; - - // 3. Then return the bytes in order: - // utf-16be flag is set: byte1, then byte2. - if (utf16be) - return [byte1, byte2]; - // utf-16be flag is unset: byte2, then byte1. - return [byte2, byte1]; - } - - /** - * @constructor - * @implements {Decoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Decoder(utf16_be, options) { - var fatal = options.fatal; - var /** @type {?number} */ utf16_lead_byte = null, - /** @type {?number} */ utf16_lead_surrogate = null; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and either utf-16 lead byte or - // utf-16 lead surrogate is not null, set utf-16 lead byte and - // utf-16 lead surrogate to null, and return error. - if (bite === end_of_stream && (utf16_lead_byte !== null || - utf16_lead_surrogate !== null)) { - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 - // lead surrogate are null, return finished. - if (bite === end_of_stream && utf16_lead_byte === null && - utf16_lead_surrogate === null) { - return finished; - } - - // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte - // and return continue. - if (utf16_lead_byte === null) { - utf16_lead_byte = bite; - return null; - } - - // 4. Let code unit be the result of: - var code_unit; - if (utf16_be) { - // utf-16be decoder flag is set - // (utf-16 lead byte << 8) + byte. - code_unit = (utf16_lead_byte << 8) + bite; - } else { - // utf-16be decoder flag is unset - // (byte << 8) + utf-16 lead byte. - code_unit = (bite << 8) + utf16_lead_byte; - } - // Then set utf-16 lead byte to null. - utf16_lead_byte = null; - - // 5. If utf-16 lead surrogate is not null, let lead surrogate - // be utf-16 lead surrogate, set utf-16 lead surrogate to null, - // and then run these substeps: - if (utf16_lead_surrogate !== null) { - var lead_surrogate = utf16_lead_surrogate; - utf16_lead_surrogate = null; - - // 1. If code unit is in the range U+DC00 to U+DFFF, return a - // code point whose value is 0x10000 + ((lead surrogate − - // 0xD800) << 10) + (code unit − 0xDC00). - if (inRange(code_unit, 0xDC00, 0xDFFF)) { - return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + - (code_unit - 0xDC00); - } - - // 2. Prepend the sequence resulting of converting code unit - // to bytes using utf-16be decoder flag to stream and return - // error. - stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); - return decoderError(fatal); - } - - // 6. If code unit is in the range U+D800 to U+DBFF, set utf-16 - // lead surrogate to code unit and return continue. - if (inRange(code_unit, 0xD800, 0xDBFF)) { - utf16_lead_surrogate = code_unit; - return null; - } - - // 7. If code unit is in the range U+DC00 to U+DFFF, return - // error. - if (inRange(code_unit, 0xDC00, 0xDFFF)) - return decoderError(fatal); - - // 8. Return code point code unit. - return code_unit; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Encoder(utf16_be, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+FFFF, return the - // sequence resulting of converting code point to bytes using - // utf-16be encoder flag. - if (inRange(code_point, 0x0000, 0xFFFF)) - return convertCodeUnitToBytes(code_point, utf16_be); - - // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, - // converted to bytes using utf-16be encoder flag. - var lead = convertCodeUnitToBytes( - ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); - - // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, - // converted to bytes using utf-16be encoder flag. - var trail = convertCodeUnitToBytes( - ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); - - // 5. Return a byte sequence of lead followed by trail. - return lead.concat(trail); - }; - } - - // 14.3 utf-16be - /** @param {{fatal: boolean}} options */ - encoders['utf-16be'] = function(options) { - return new UTF16Encoder(true, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16be'] = function(options) { - return new UTF16Decoder(true, options); - }; - - // 14.4 utf-16le - /** @param {{fatal: boolean}} options */ - encoders['utf-16le'] = function(options) { - return new UTF16Encoder(false, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16le'] = function(options) { - return new UTF16Decoder(false, options); - }; - - // 14.5 x-user-defined - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedDecoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Return a code point whose value is 0xF780 + byte − 0x80. - return 0xF780 + bite - 0x80; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1.If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is in the range U+F780 to U+F7FF, return a - // byte whose value is code point − 0xF780 + 0x80. - if (inRange(code_point, 0xF780, 0xF7FF)) - return code_point - 0xF780 + 0x80; - - // 4. Return error with code point. - return encoderError(code_point); - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['x-user-defined'] = function(options) { - return new XUserDefinedEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['x-user-defined'] = function(options) { - return new XUserDefinedDecoder(options); - }; - - if (!('TextEncoder' in global)) - global['TextEncoder'] = TextEncoder; - if (!('TextDecoder' in global)) - global['TextDecoder'] = TextDecoder; -}(this)); - -},{"./encoding-indexes.js":43}]},{},[1])(1) -}); -}()); diff --git a/build/node_modules/sinon/pkg/sinon-1.17.2.js b/build/node_modules/sinon/pkg/sinon-1.17.2.js deleted file mode 100644 index 30a2a610..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.17.2.js +++ /dev/null @@ -1,6401 +0,0 @@ -/** - * Sinon.JS 1.17.2, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - } - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } - - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } - - if (typeof setImmediate === "function") { - return setImmediate; - } - - return function (callback) { - setTimeout(callback, 0); - }; - })(); - - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - } - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; - - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ - - return; - } - - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); - - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } - } - - /* Public: walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ - function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); - } - - sinon.walk = walk; - return sinon.walk; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - * @depend walk.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - sinon.walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); - } - - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); - } - - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - } - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); - } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass() {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; - - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; - - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.17.3.js b/build/node_modules/sinon/pkg/sinon-1.17.3.js deleted file mode 100644 index d77b3175..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.17.3.js +++ /dev/null @@ -1,6437 +0,0 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function firstTimer(clock) { - var timers = clock.timers, - timer = null, - id; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - if (!timer || compareTimers(timer, timers[id]) === 1) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.next = function next() { - var timer = firstTimer(clock); - if (!timer) { - return clock.now; - } - - clock.duringTick = true; - try { - clock.now = timer.callAt; - callTimer(clock, timer); - return clock.now; - } finally { - clock.duringTick = false; - } - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } - } - - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - } - - sinon.typeOf = typeOf; - return sinon.typeOf; - } - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - } - - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - sinon.match = match; - return match; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy ? this.proxy.toString() + "(" : ""; - var args = []; - - if (!this.args) { - return ":("; - } - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; - } - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; - return createSpyCall; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); - } - - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - sinon.spy = spy; - - return spy; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } - - if (typeof setImmediate === "function") { - return setImmediate; - } - - return function (callback) { - setTimeout(callback, 0); - }; - })(); - - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; - - if (callArgAt >= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; - } - - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } - - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } - - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } - }; - - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - } - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } - } - - sinon.behavior = proto; - return proto; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; - - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ - - return; - } - - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); - - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } - } - - /* Public: walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ - function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); - } - - sinon.walk = walk; - return sinon.walk; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - * @depend walk.js - */ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - sinon.walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); - } - - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); - } - - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ - - var uuid = 0; - - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; - - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - } - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } - - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + times(callCount); - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; - } - - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; - } - - sinon.expectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return sinon.spy.invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - sinon.assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - - sinon.mock = mock; - return mock; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); - - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js - */ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - sinon.collection = collection; - return collection; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - return sinon.sandbox; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - * @depend sandbox.js - */ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var slice = Array.prototype.slice; - - function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.test = test; - return test; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); - } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef - -/** - * @depend util/core.js - * @depend test.js - */ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - sinon.testCase = testCase; - return testCase; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } - } - - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass() {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; - - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - }, - - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; - - failAssertion(this, formatted.join("\n")); - } - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - - return sinon; -})); diff --git a/build/node_modules/sinon/pkg/sinon-1.6.0.js b/build/node_modules/sinon/pkg/sinon-1.6.0.js deleted file mode 100644 index 5728746b..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.6.0.js +++ /dev/null @@ -1,4261 +0,0 @@ -/** - * Sinon.JS 1.6.0, 2015/09/28 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -var sinon = (function () { -"use strict"; - -var buster = (function (setTimeout, B) { - var isNode = typeof require == "function" && typeof module == "object"; - var div = typeof document != "undefined" && document.createElement("div"); - var F = function () {}; - - var buster = { - bind: function bind(obj, methOrProp) { - var method = typeof methOrProp == "string" ? obj[methOrProp] : methOrProp; - var args = Array.prototype.slice.call(arguments, 2); - return function () { - var allArgs = args.concat(Array.prototype.slice.call(arguments)); - return method.apply(obj, allArgs); - }; - }, - - partial: function partial(fn) { - var args = [].slice.call(arguments, 1); - return function () { - return fn.apply(this, args.concat([].slice.call(arguments))); - }; - }, - - create: function create(object) { - F.prototype = object; - return new F(); - }, - - extend: function extend(target) { - if (!target) { return; } - for (var i = 1, l = arguments.length, prop; i < l; ++i) { - for (prop in arguments[i]) { - target[prop] = arguments[i][prop]; - } - } - return target; - }, - - nextTick: function nextTick(callback) { - if (typeof process != "undefined" && process.nextTick) { - return process.nextTick(callback); - } - setTimeout(callback, 0); - }, - - functionName: function functionName(func) { - if (!func) return ""; - if (func.displayName) return func.displayName; - if (func.name) return func.name; - var matches = func.toString().match(/function\s+([^\(]+)/m); - return matches && matches[1] || ""; - }, - - isNode: function isNode(obj) { - if (!div) return false; - try { - obj.appendChild(div); - obj.removeChild(div); - } catch (e) { - return false; - } - return true; - }, - - isElement: function isElement(obj) { - return obj && obj.nodeType === 1 && buster.isNode(obj); - }, - - isArray: function isArray(arr) { - return Object.prototype.toString.call(arr) == "[object Array]"; - }, - - flatten: function flatten(arr) { - var result = [], arr = arr || []; - for (var i = 0, l = arr.length; i < l; ++i) { - result = result.concat(buster.isArray(arr[i]) ? flatten(arr[i]) : arr[i]); - } - return result; - }, - - each: function each(arr, callback) { - for (var i = 0, l = arr.length; i < l; ++i) { - callback(arr[i]); - } - }, - - map: function map(arr, callback) { - var results = []; - for (var i = 0, l = arr.length; i < l; ++i) { - results.push(callback(arr[i])); - } - return results; - }, - - parallel: function parallel(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - callback = null; - } - } - if (fns.length == 0) { return cb(null, []); } - var remaining = fns.length, results = []; - function makeDone(num) { - return function done(err, result) { - if (err) { return cb(err); } - results[num] = result; - if (--remaining == 0) { cb(null, results); } - }; - } - for (var i = 0, l = fns.length; i < l; ++i) { - fns[i](makeDone(i)); - } - }, - - series: function series(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - } - } - var remaining = fns.slice(); - var results = []; - function callNext() { - if (remaining.length == 0) return cb(null, results); - var promise = remaining.shift()(next); - if (promise && typeof promise.then == "function") { - promise.then(buster.partial(next, null), next); - } - } - function next(err, result) { - if (err) return cb(err); - results.push(result); - callNext(); - } - callNext(); - }, - - countdown: function countdown(num, done) { - return function () { - if (--num == 0) done(); - }; - } - }; - - if (typeof process === "object" && - typeof require === "function" && typeof module === "object") { - var crypto = require("crypto"); - var path = require("path"); - - buster.tmpFile = function (fileName) { - var hashed = crypto.createHash("sha1"); - hashed.update(fileName); - var tmpfileName = hashed.digest("hex"); - - if (process.platform == "win32") { - return path.join(process.env["TEMP"], tmpfileName); - } else { - return path.join("/tmp", tmpfileName); - } - }; - } - - if (Array.prototype.some) { - buster.some = function (arr, fn, thisp) { - return arr.some(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some - buster.some = function (arr, fun, thisp) { - if (arr == null) { throw new TypeError(); } - arr = Object(arr); - var len = arr.length >>> 0; - if (typeof fun !== "function") { throw new TypeError(); } - - for (var i = 0; i < len; i++) { - if (arr.hasOwnProperty(i) && fun.call(thisp, arr[i], i, arr)) { - return true; - } - } - - return false; - }; - } - - if (Array.prototype.filter) { - buster.filter = function (arr, fn, thisp) { - return arr.filter(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter - buster.filter = function (fn, thisp) { - if (this == null) { throw new TypeError(); } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fn != "function") { throw new TypeError(); } - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; // in case fun mutates this - if (fn.call(thisp, val, i, t)) { res.push(val); } - } - } - - return res; - }; - } - - if (isNode) { - module.exports = buster; - buster.eventEmitter = require("./buster-event-emitter"); - Object.defineProperty(buster, "defineVersionGetter", { - get: function () { - return require("./define-version-getter"); - } - }); - } - - return buster.extend(B || {}, buster); -}(setTimeout, buster)); -if (typeof buster === "undefined") { - var buster = {}; -} - -if (typeof module === "object" && typeof require === "function") { - buster = require("buster-core"); -} - -buster.format = buster.format || {}; -buster.format.excludeConstructors = ["Object", /^.$/]; -buster.format.quoteStrings = true; - -buster.format.ascii = (function () { - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global != "undefined") { - specialObjects.push({ obj: global, value: "[object global]" }); - } - if (typeof document != "undefined") { - specialObjects.push({ obj: document, value: "[object HTMLDocument]" }); - } - if (typeof window != "undefined") { - specialObjects.push({ obj: window, value: "[object Window]" }); - } - - function keys(object) { - var k = Object.keys && Object.keys(object) || []; - - if (k.length == 0) { - for (var prop in object) { - if (hasOwn.call(object, prop)) { - k.push(prop); - } - } - } - - return k.sort(); - } - - function isCircular(object, objects) { - if (typeof object != "object") { - return false; - } - - for (var i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { - return true; - } - } - - return false; - } - - function ascii(object, processed, indent) { - if (typeof object == "string") { - var quote = typeof this.quoteStrings != "boolean" || this.quoteStrings; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object == "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { - return "[Circular]"; - } - - if (Object.prototype.toString.call(object) == "[object Array]") { - return ascii.array.call(this, object, processed); - } - - if (!object) { - return "" + object; - } - - if (buster.isElement(object)) { - return ascii.element(object); - } - - if (typeof object.toString == "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - for (var i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].obj) { - return specialObjects[i].value; - } - } - - return ascii.object.call(this, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + buster.functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - - for (var i = 0, l = array.length; i < l; ++i) { - pieces.push(ascii.call(this, array[i], processed)); - } - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = keys(object), prop, str, obj; - var is = ""; - var length = 3; - - for (var i = 0, l = indent; i < l; ++i) { - is += " "; - } - - for (i = 0, l = properties.length; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii.call(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = ascii.constructorName.call(this, object); - var prefix = cons ? "[" + cons + "] " : "" - - return (length + indent) > 80 ? - prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + is + "}" : - prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attribute, pairs = [], attrName; - - for (var i = 0, l = attrs.length; i < l; ++i) { - attribute = attrs.item(i); - attrName = attribute.nodeName.toLowerCase().replace("html:", ""); - - if (attrName == "contenteditable" && attribute.nodeValue == "inherit") { - continue; - } - - if (!!attribute.nodeValue) { - pairs.push(attrName + "=\"" + attribute.nodeValue + "\""); - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - ascii.constructorName = function (object) { - var name = buster.functionName(object && object.constructor); - var excludes = this.excludeConstructors || buster.format.excludeConstructors || []; - - for (var i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] == "string" && excludes[i] == name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - }; - - return ascii; -}()); - -if (typeof module != "undefined") { - module.exports = buster.format; -} -/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/ -/*global module, require, __dirname, document*/ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function (buster) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - var sinon = { - wrapMethod: function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property]; - - if (!isFunction(wrappedMethod)) { - throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } - - if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - throw new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - - if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - throw new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - // IE 8 does not support hasOwnProperty on the window object. - var owned = hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }, - - extend: function extend(target) { - for (var i = 1, l = arguments.length; i < l; i += 1) { - for (var prop in arguments[i]) { - if (arguments[i].hasOwnProperty(prop)) { - target[prop] = arguments[i][prop]; - } - - // DONT ENUM bug, only care about toString - if (arguments[i].hasOwnProperty("toString") && - arguments[i].toString != target.toString) { - target.toString = arguments[i].toString; - } - } - } - - return target; - }, - - create: function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }, - - deepEqual: function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - if (typeof a != "object" || typeof b != "object") { - return a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Array]") { - if (a.length !== b.length) { - return false; - } - - for (var i = 0, l = a.length; i < l; i += 1) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - - var prop, aLength = 0, bLength = 0; - - for (prop in a) { - aLength += 1; - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - if (aLength != bLength) { - return false; - } - - return true; - }, - - functionName: function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }, - - functionToString: function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }, - - getConfig: function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }, - - format: function (val) { - return "" + val; - }, - - defaultConfig: { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }, - - timesInWords: function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }, - - calledInOrder: function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }, - - orderByFirstCall: function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }, - - log: function () {}, - - logError: function (label, err) { - var msg = label + " threw exception: " - sinon.log(msg + "[" + err.name + "] " + err.message); - if (err.stack) { sinon.log(err.stack); } - - setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }, - - typeOf: function (value) { - if (value === null) { - return "null"; - } - else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }, - - createStubInstance: function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - } - }; - - var isNode = typeof module == "object" && typeof require == "function"; - - if (isNode) { - try { - buster = { format: require("buster-format") }; - } catch (e) {} - module.exports = sinon; - module.exports.spy = require("./sinon/spy"); - module.exports.spyCall = require("./sinon/call"); - module.exports.stub = require("./sinon/stub"); - module.exports.mock = require("./sinon/mock"); - module.exports.collection = require("./sinon/collection"); - module.exports.assert = require("./sinon/assert"); - module.exports.sandbox = require("./sinon/sandbox"); - module.exports.test = require("./sinon/test"); - module.exports.testCase = require("./sinon/test_case"); - module.exports.assert = require("./sinon/assert"); - module.exports.match = require("./sinon/match"); - } - - if (buster) { - var formatter = sinon.create(buster.format); - formatter.quoteStrings = false; - sinon.format = function () { - return formatter.ascii.apply(formatter, arguments); - }; - } else if (isNode) { - try { - var util = require("util"); - sinon.format = function (value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - } catch (e) { - /* Node, but no util module - would be very old, but better safe than - sorry */ - } - } - - return sinon; -}(typeof buster == "object" && buster)); - -/* @depend ../sinon.js */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - if (commonJSModule) { - module.exports = match; - } else { - sinon.match = match; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend match.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error == "undefined" || !this.exception) { - return !!this.exception; - } - - if (typeof error == "string") { - return this.exception.name == error; - } - - return this.exception === error; - }, - - calledWithNew: function calledWithNew(thisValue) { - return this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - var spyCall = { - create: function create(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - }, - toString : callProto.toString // used by mocks - }; - - if (commonJSModule) { - module.exports = spyCall; - } else { - sinon.spyCall = spyCall; - } -}(typeof sinon == "object" && sinon || null)); - - -/** - * @depend ../sinon.js - * @depend call.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function spy(object, property) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - var alen = args.length; - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func) { - // Retain the function length: - var p; - if (func.length) { - eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } - else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - }, - - create: function create(func) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - var proxy = createProxy(func); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy._create = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - try { - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - } catch (e) { - push.call(this.returnValues, undefined); - exception = e; - throw e; - } finally { - push.call(this.exceptions, exception); - } - - push.call(this.returnValues, returnValue); - - createCallProperties.call(this); - - return returnValue; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall.create(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this._create(); - fake.matchingAguments = args; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer), 10)) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", - function () { return true; }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", - function () { return true; }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - "c": function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - "n": function (spy) { - return spy.toString(); - }, - - "C": function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - "t": function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - - if (commonJSModule) { - module.exports = spy; - } else { - sinon.spy = spy; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend spy.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global module, require, sinon*/ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function stub(object, property, func) { - if (!!func && typeof func != "function") { - throw new TypeError("Custom stub should be function"); - } - - var wrapper; - - if (func) { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = stub.create(); - } - - if (!object && !property) { - return sinon.stub.create(); - } - - if (!property && !!object && typeof object == "object") { - for (var prop in object) { - if (typeof object[prop] === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getChangingValue(stub, property) { - var index = stub.callCount - 1; - var values = stub[property]; - var prop = index in values ? values[index] : values[values.length - 1]; - stub[property + "Last"] = prop; - - return prop; - } - - function getCallback(stub, args) { - var callArgAt = getChangingValue(stub, "callArgAts"); - - if (callArgAt < 0) { - var callArgProp = getChangingValue(stub, "callArgProps"); - - for (var i = 0, l = args.length; i < l; ++i) { - if (!callArgProp && typeof args[i] == "function") { - return args[i]; - } - - if (callArgProp && args[i] && - typeof args[i][callArgProp] == "function") { - return args[i][callArgProp]; - } - } - - return null; - } - - return args[callArgAt]; - } - - var join = Array.prototype.join; - - function getCallbackError(stub, func, args) { - if (stub.callArgAtsLast < 0) { - var msg; - - if (stub.callArgPropsLast) { - msg = sinon.functionName(stub) + - " expected to yield to '" + stub.callArgPropsLast + - "', but no object with such a property was passed." - } else { - msg = sinon.functionName(stub) + - " expected to yield, but no callback was passed." - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + stub.callArgAtsLast + " is not a function: " + func; - } - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function callCallback(stub, args) { - if (stub.callArgAts.length > 0) { - var func = getCallback(stub, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(stub, func, args)); - } - - var callbackArguments = getChangingValue(stub, "callbackArguments"); - var callbackContext = getChangingValue(stub, "callbackContexts"); - - if (stub.callbackAsync) { - nextTick(function() { - func.apply(callbackContext, callbackArguments); - }); - } else { - func.apply(callbackContext, callbackArguments); - } - } - } - - var uuid = 0; - - sinon.extend(stub, (function () { - var slice = Array.prototype.slice, proto; - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - proto = { - create: function create() { - var functionStub = function () { - - callCallback(functionStub, arguments); - - if (functionStub.exception) { - throw functionStub.exception; - } else if (typeof functionStub.returnArgAt == 'number') { - return arguments[functionStub.returnArgAt]; - } else if (functionStub.returnThis) { - return this; - } - return functionStub.returnValue; - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub); - functionStub.func = orig; - - functionStub.callArgAts = []; - functionStub.callbackArguments = []; - functionStub.callbackContexts = []; - functionStub.callArgProps = []; - - sinon.extend(functionStub, stub); - functionStub._create = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.callArgAts = []; - this.callbackArguments = []; - this.callbackContexts = []; - this.callArgProps = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - returns: function returns(value) { - this.returnValue = value; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - }, - - "throws": throwsException, - throwsException: throwsException, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yields: function () { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 0)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(prop); - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(prop); - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields|thenYields$)/) && - !method.match(/Async/)) { - proto[method + 'Async'] = (function (syncFnName) { - return function () { - this.callbackAsync = true; - return this[syncFnName].apply(this, arguments); - }; - })(method); - } - } - - return proto; - - }())); - - if (commonJSModule) { - module.exports = stub; - } else { - sinon.stub = stub; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false*/ -/*global module, require, sinon*/ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function mock(object) { - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - sinon.mock = mock; - - sinon.extend(mock, (function () { - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - return { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }; - }())); - - var times = sinon.timesInWords; - - sinon.expectation = (function () { - var slice = Array.prototype.slice; - var _invoke = sinon.spy.invoke; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - return { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return _invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function(message) { - sinon.assert.pass(message); - }, - fail: function (message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - }()); - - if (commonJSModule) { - module.exports = mock; - } else { - sinon.mock = mock; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true*/ -/*global module, require, sinon*/ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - if (commonJSModule) { - module.exports = collection; - } else { - sinon.collection = collection; - } -}(typeof sinon == "object" && sinon || null)); - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - sinon.Event = function Event(type, bubbles, cancelable) { - this.initEvent(type, bubbles, cancelable); - }; - - sinon.Event.prototype = { - initEvent: function(type, bubbles, cancelable) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener, useCapture) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener, useCapture) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; -}()); - -/** - * @depend ../../sinon.js - * @depend event.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} -sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest }; - -// wrapper for global -(function(global) { - var xhr = sinon.xhr; - xhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - xhr.GlobalActiveXObject = global.ActiveXObject; - xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined"; - xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined"; - xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX - ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - "Connection": true, - "Content-Length": true, - "Cookie": true, - "Cookie2": true, - "Content-Transfer-Encoding": true, - "Date": true, - "Expect": true, - "Host": true, - "Keep-Alive": true, - "Referer": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, - "Upgrade": true, - "User-Agent": true, - "Via": true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) return; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if(callback(collection[index]) === true) return true; - }; - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function(obj,method,args) { - switch(args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0],args[1]); - case 3: return obj[method](args[0],args[1],args[2]); - case 4: return obj[method](args[0],args[1],args[2],args[3]); - case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]); - }; - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) { - var xhr = new sinon.xhr.workingXHR(); - each(["open","setRequestHeader","send","abort","getResponseHeader", - "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"], - function(method) { - fakeXhr[method] = function() { - return apply(xhr,method,arguments); - }; - }); - - var copyAttrs = function(args) { - each(args, function(attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch(e) { - if(!IE6Re.test(navigator.userAgent)) throw e; - } - }); - }; - - var stateChange = function() { - fakeXhr.readyState = xhr.readyState; - if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status","statusText"]); - } - if(xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText"]); - } - if(xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr); - }; - if(xhr.addEventListener) { - for(var event in fakeXhr.eventListeners) { - if(fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event],function(handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange",stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr,"open",xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - if(sinon.FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters,function(filter) { - return filter.apply(this,xhrArgs) - }); - if (defake) { - return sinon.FakeXMLHttpRequest.defake(this,arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - if (this.requestHeaders["Content-Type"]) { - var value = this.requestHeaders["Content-Type"].split(";"); - this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = sinon.FakeXMLHttpRequest.UNSENT; - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = header.toLowerCase(); - - for (var h in this.responseHeaders) { - if (h.toLowerCase() == header) { - return this.responseHeaders[h]; - } - } - - return null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - } else { - this.readyState = FakeXMLHttpRequest.DONE; - } - }, - - respond: function respond(status, headers, body) { - this.setResponseHeaders(headers || {}); - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseBody(body || ""); - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - // Borrowed from JSpec - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - sinon.useFakeXMLHttpRequest = function () { - sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (xhr.supportsXHR) { - global.XMLHttpRequest = xhr.GlobalXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = xhr.GlobalActiveXObject; - } - - delete sinon.FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXMLHttpRequest.onCreate; - } - }; - if (xhr.supportsXHR) { - global.XMLHttpRequest = sinon.FakeXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new sinon.FakeXMLHttpRequest(); - } - - return new xhr.GlobalActiveXObject(objId); - }; - } - - return sinon.FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; -})(this); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_xml_http_request.js - */ -/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/ -/*global module, require, window*/ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -sinon.fakeServer = (function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestMethod = this.getHTTPMethod(request); - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1)); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - } - - return { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - }; - - if (this.autoRespond && !this.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, this.autoRespondAfter || 10); - - this.responding = true; - } - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) this.respondWith.apply(this, arguments); - var queue = this.queue || []; - var request; - - while(request = queue.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var i = 0, l = this.responses.length; i < l; i++) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; -}()); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/*jslint browser: true, eqeqeq: false, onevar: false*/ -/*global sinon*/ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; -}()); - -/** - * @depend ../sinon.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global require, module*/ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof module == "object" && typeof require == "function") { - var sinon = require("../sinon"); - sinon.extend(sinon, require("./util/fake_timers")); -} - -(function () { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto) { - config.injectInto[key] = value; - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - return obj; - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - } - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - if (typeof module == "object" && typeof require == "function") { - module.exports = sinon.sandbox; - } -}()); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - * @depend sandbox.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - return function () { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var exception, result; - var args = Array.prototype.slice.call(arguments).concat(sandbox.args); - - try { - result = callback.apply(this, args); - } catch (e) { - exception = e; - } - - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } - else { - sandbox.verifyAndRestore(); - } - - return result; - }; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - if (commonJSModule) { - module.exports = test; - } else { - sinon.test = test; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend test.js - */ -/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/ -/*global module, require, sinon*/ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon || !Object.prototype.hasOwnProperty) { - return; - } - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function testCase(tests, prefix) { - /*jsl:ignore*/ - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - /*jsl:end*/ - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName)) { - property = tests[testName]; - - if (/^(setUp|tearDown)$/.test(testName)) { - continue; - } - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - if (commonJSModule) { - module.exports = testCase; - } else { - sinon.testCase = testCase; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var slice = Array.prototype.slice; - var assert; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, fake.printf.apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - }; - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "export" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; }, - "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - if (commonJSModule) { - module.exports = assert; - } else { - sinon.assert = assert; - } -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : global)); - -return sinon;}.call(typeof window != 'undefined' && window || {})); diff --git a/build/node_modules/sinon/pkg/sinon-1.7.3.js b/build/node_modules/sinon/pkg/sinon-1.7.3.js deleted file mode 100644 index e93e85e0..00000000 --- a/build/node_modules/sinon/pkg/sinon-1.7.3.js +++ /dev/null @@ -1,4308 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2015/11/24 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -this.sinon = (function () { -var buster = (function (setTimeout, B) { - var isNode = typeof require == "function" && typeof module == "object"; - var div = typeof document != "undefined" && document.createElement("div"); - var F = function () {}; - - var buster = { - bind: function bind(obj, methOrProp) { - var method = typeof methOrProp == "string" ? obj[methOrProp] : methOrProp; - var args = Array.prototype.slice.call(arguments, 2); - return function () { - var allArgs = args.concat(Array.prototype.slice.call(arguments)); - return method.apply(obj, allArgs); - }; - }, - - partial: function partial(fn) { - var args = [].slice.call(arguments, 1); - return function () { - return fn.apply(this, args.concat([].slice.call(arguments))); - }; - }, - - create: function create(object) { - F.prototype = object; - return new F(); - }, - - extend: function extend(target) { - if (!target) { return; } - for (var i = 1, l = arguments.length, prop; i < l; ++i) { - for (prop in arguments[i]) { - target[prop] = arguments[i][prop]; - } - } - return target; - }, - - nextTick: function nextTick(callback) { - if (typeof process != "undefined" && process.nextTick) { - return process.nextTick(callback); - } - setTimeout(callback, 0); - }, - - functionName: function functionName(func) { - if (!func) return ""; - if (func.displayName) return func.displayName; - if (func.name) return func.name; - var matches = func.toString().match(/function\s+([^\(]+)/m); - return matches && matches[1] || ""; - }, - - isNode: function isNode(obj) { - if (!div) return false; - try { - obj.appendChild(div); - obj.removeChild(div); - } catch (e) { - return false; - } - return true; - }, - - isElement: function isElement(obj) { - return obj && obj.nodeType === 1 && buster.isNode(obj); - }, - - isArray: function isArray(arr) { - return Object.prototype.toString.call(arr) == "[object Array]"; - }, - - flatten: function flatten(arr) { - var result = [], arr = arr || []; - for (var i = 0, l = arr.length; i < l; ++i) { - result = result.concat(buster.isArray(arr[i]) ? flatten(arr[i]) : arr[i]); - } - return result; - }, - - each: function each(arr, callback) { - for (var i = 0, l = arr.length; i < l; ++i) { - callback(arr[i]); - } - }, - - map: function map(arr, callback) { - var results = []; - for (var i = 0, l = arr.length; i < l; ++i) { - results.push(callback(arr[i])); - } - return results; - }, - - parallel: function parallel(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - callback = null; - } - } - if (fns.length == 0) { return cb(null, []); } - var remaining = fns.length, results = []; - function makeDone(num) { - return function done(err, result) { - if (err) { return cb(err); } - results[num] = result; - if (--remaining == 0) { cb(null, results); } - }; - } - for (var i = 0, l = fns.length; i < l; ++i) { - fns[i](makeDone(i)); - } - }, - - series: function series(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - } - } - var remaining = fns.slice(); - var results = []; - function callNext() { - if (remaining.length == 0) return cb(null, results); - var promise = remaining.shift()(next); - if (promise && typeof promise.then == "function") { - promise.then(buster.partial(next, null), next); - } - } - function next(err, result) { - if (err) return cb(err); - results.push(result); - callNext(); - } - callNext(); - }, - - countdown: function countdown(num, done) { - return function () { - if (--num == 0) done(); - }; - } - }; - - if (typeof process === "object" && - typeof require === "function" && typeof module === "object") { - var crypto = require("crypto"); - var path = require("path"); - - buster.tmpFile = function (fileName) { - var hashed = crypto.createHash("sha1"); - hashed.update(fileName); - var tmpfileName = hashed.digest("hex"); - - if (process.platform == "win32") { - return path.join(process.env["TEMP"], tmpfileName); - } else { - return path.join("/tmp", tmpfileName); - } - }; - } - - if (Array.prototype.some) { - buster.some = function (arr, fn, thisp) { - return arr.some(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some - buster.some = function (arr, fun, thisp) { - if (arr == null) { throw new TypeError(); } - arr = Object(arr); - var len = arr.length >>> 0; - if (typeof fun !== "function") { throw new TypeError(); } - - for (var i = 0; i < len; i++) { - if (arr.hasOwnProperty(i) && fun.call(thisp, arr[i], i, arr)) { - return true; - } - } - - return false; - }; - } - - if (Array.prototype.filter) { - buster.filter = function (arr, fn, thisp) { - return arr.filter(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter - buster.filter = function (fn, thisp) { - if (this == null) { throw new TypeError(); } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fn != "function") { throw new TypeError(); } - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; // in case fun mutates this - if (fn.call(thisp, val, i, t)) { res.push(val); } - } - } - - return res; - }; - } - - if (isNode) { - module.exports = buster; - buster.eventEmitter = require("./buster-event-emitter"); - Object.defineProperty(buster, "defineVersionGetter", { - get: function () { - return require("./define-version-getter"); - } - }); - } - - return buster.extend(B || {}, buster); -}(setTimeout, buster)); -if (typeof buster === "undefined") { - var buster = {}; -} - -if (typeof module === "object" && typeof require === "function") { - buster = require("buster-core"); -} - -buster.format = buster.format || {}; -buster.format.excludeConstructors = ["Object", /^.$/]; -buster.format.quoteStrings = true; - -buster.format.ascii = (function () { - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global != "undefined") { - specialObjects.push({ obj: global, value: "[object global]" }); - } - if (typeof document != "undefined") { - specialObjects.push({ obj: document, value: "[object HTMLDocument]" }); - } - if (typeof window != "undefined") { - specialObjects.push({ obj: window, value: "[object Window]" }); - } - - function keys(object) { - var k = Object.keys && Object.keys(object) || []; - - if (k.length == 0) { - for (var prop in object) { - if (hasOwn.call(object, prop)) { - k.push(prop); - } - } - } - - return k.sort(); - } - - function isCircular(object, objects) { - if (typeof object != "object") { - return false; - } - - for (var i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { - return true; - } - } - - return false; - } - - function ascii(object, processed, indent) { - if (typeof object == "string") { - var quote = typeof this.quoteStrings != "boolean" || this.quoteStrings; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object == "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { - return "[Circular]"; - } - - if (Object.prototype.toString.call(object) == "[object Array]") { - return ascii.array.call(this, object, processed); - } - - if (!object) { - return "" + object; - } - - if (buster.isElement(object)) { - return ascii.element(object); - } - - if (typeof object.toString == "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - for (var i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].obj) { - return specialObjects[i].value; - } - } - - return ascii.object.call(this, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + buster.functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - - for (var i = 0, l = array.length; i < l; ++i) { - pieces.push(ascii.call(this, array[i], processed)); - } - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = keys(object), prop, str, obj; - var is = ""; - var length = 3; - - for (var i = 0, l = indent; i < l; ++i) { - is += " "; - } - - for (i = 0, l = properties.length; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii.call(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = ascii.constructorName.call(this, object); - var prefix = cons ? "[" + cons + "] " : "" - - return (length + indent) > 80 ? - prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + is + "}" : - prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attribute, pairs = [], attrName; - - for (var i = 0, l = attrs.length; i < l; ++i) { - attribute = attrs.item(i); - attrName = attribute.nodeName.toLowerCase().replace("html:", ""); - - if (attrName == "contenteditable" && attribute.nodeValue == "inherit") { - continue; - } - - if (!!attribute.nodeValue) { - pairs.push(attrName + "=\"" + attribute.nodeValue + "\""); - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - ascii.constructorName = function (object) { - var name = buster.functionName(object && object.constructor); - var excludes = this.excludeConstructors || buster.format.excludeConstructors || []; - - for (var i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] == "string" && excludes[i] == name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - }; - - return ascii; -}()); - -if (typeof module != "undefined") { - module.exports = buster.format; -} -/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/ -/*global module, require, __dirname, document*/ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function (buster) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable (obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - var sinon = { - wrapMethod: function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property]; - - if (!isFunction(wrappedMethod)) { - throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } - - if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - throw new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - - if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - throw new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - // IE 8 does not support hasOwnProperty on the window object. - var owned = hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }, - - extend: function extend(target) { - for (var i = 1, l = arguments.length; i < l; i += 1) { - for (var prop in arguments[i]) { - if (arguments[i].hasOwnProperty(prop)) { - target[prop] = arguments[i][prop]; - } - - // DONT ENUM bug, only care about toString - if (arguments[i].hasOwnProperty("toString") && - arguments[i].toString != target.toString) { - target.toString = arguments[i].toString; - } - } - } - - return target; - }, - - create: function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }, - - deepEqual: function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - if (typeof a != "object" || typeof b != "object") { - return a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Array]") { - if (a.length !== b.length) { - return false; - } - - for (var i = 0, l = a.length; i < l; i += 1) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - for (prop in a) { - aLength += 1; - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }, - - functionName: function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }, - - functionToString: function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }, - - getConfig: function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }, - - format: function (val) { - return "" + val; - }, - - defaultConfig: { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }, - - timesInWords: function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }, - - calledInOrder: function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }, - - orderByFirstCall: function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }, - - log: function () {}, - - logError: function (label, err) { - var msg = label + " threw exception: " - sinon.log(msg + "[" + err.name + "] " + err.message); - if (err.stack) { sinon.log(err.stack); } - - setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }, - - typeOf: function (value) { - if (value === null) { - return "null"; - } - else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }, - - createStubInstance: function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }, - - restore: function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } - else if (isRestorable(object)) { - object.restore(); - } - } - }; - - var isNode = typeof module == "object" && typeof require == "function"; - - if (isNode) { - try { - buster = { format: require("buster-format") }; - } catch (e) {} - module.exports = sinon; - module.exports.spy = require("./sinon/spy"); - module.exports.spyCall = require("./sinon/call"); - module.exports.stub = require("./sinon/stub"); - module.exports.mock = require("./sinon/mock"); - module.exports.collection = require("./sinon/collection"); - module.exports.assert = require("./sinon/assert"); - module.exports.sandbox = require("./sinon/sandbox"); - module.exports.test = require("./sinon/test"); - module.exports.testCase = require("./sinon/test_case"); - module.exports.assert = require("./sinon/assert"); - module.exports.match = require("./sinon/match"); - } - - if (buster) { - var formatter = sinon.create(buster.format); - formatter.quoteStrings = false; - sinon.format = function () { - return formatter.ascii.apply(formatter, arguments); - }; - } else if (isNode) { - try { - var util = require("util"); - sinon.format = function (value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - } catch (e) { - /* Node, but no util module - would be very old, but better safe than - sorry */ - } - } - - return sinon; -}(typeof buster == "object" && buster)); - -/* @depend ../sinon.js */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - if (commonJSModule) { - module.exports = match; - } else { - sinon.match = match; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend match.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew(thisValue) { - return this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - }; - createSpyCall.toString = callProto.toString; // used by mocks - - if (commonJSModule) { - module.exports = createSpyCall; - } else { - sinon.spyCall = createSpyCall; - } -}(typeof sinon == "object" && sinon || null)); - - -/** - * @depend ../sinon.js - * @depend call.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function spy(object, property) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - var alen = args.length; - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func) { - // Retain the function length: - var p; - if (func.length) { - eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } - else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - }, - - create: function create(func) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - var proxy = createProxy(func); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy._create = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - try { - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - } catch (e) { - push.call(this.returnValues, undefined); - exception = e; - throw e; - } finally { - push.call(this.exceptions, exception); - } - - push.call(this.returnValues, returnValue); - - createCallProperties.call(this); - - return returnValue; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this._create(); - fake.matchingAguments = args; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer), 10)) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", - function () { return true; }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", - function () { return true; }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - "c": function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - "n": function (spy) { - return spy.toString(); - }, - - "C": function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - "t": function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - - if (commonJSModule) { - module.exports = spy; - } else { - sinon.spy = spy; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend spy.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global module, require, sinon*/ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function stub(object, property, func) { - if (!!func && typeof func != "function") { - throw new TypeError("Custom stub should be function"); - } - - var wrapper; - - if (func) { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = stub.create(); - } - - if (!object && !property) { - return sinon.stub.create(); - } - - if (!property && !!object && typeof object == "object") { - for (var prop in object) { - if (typeof object[prop] === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getChangingValue(stub, property) { - var index = stub.callCount - 1; - var values = stub[property]; - var prop = index in values ? values[index] : values[values.length - 1]; - stub[property + "Last"] = prop; - - return prop; - } - - function getCallback(stub, args) { - var callArgAt = getChangingValue(stub, "callArgAts"); - - if (callArgAt < 0) { - var callArgProp = getChangingValue(stub, "callArgProps"); - - for (var i = 0, l = args.length; i < l; ++i) { - if (!callArgProp && typeof args[i] == "function") { - return args[i]; - } - - if (callArgProp && args[i] && - typeof args[i][callArgProp] == "function") { - return args[i][callArgProp]; - } - } - - return null; - } - - return args[callArgAt]; - } - - var join = Array.prototype.join; - - function getCallbackError(stub, func, args) { - if (stub.callArgAtsLast < 0) { - var msg; - - if (stub.callArgPropsLast) { - msg = sinon.functionName(stub) + - " expected to yield to '" + stub.callArgPropsLast + - "', but no object with such a property was passed." - } else { - msg = sinon.functionName(stub) + - " expected to yield, but no callback was passed." - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + stub.callArgAtsLast + " is not a function: " + func; - } - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function callCallback(stub, args) { - if (stub.callArgAts.length > 0) { - var func = getCallback(stub, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(stub, func, args)); - } - - var callbackArguments = getChangingValue(stub, "callbackArguments"); - var callbackContext = getChangingValue(stub, "callbackContexts"); - - if (stub.callbackAsync) { - nextTick(function() { - func.apply(callbackContext, callbackArguments); - }); - } else { - func.apply(callbackContext, callbackArguments); - } - } - } - - var uuid = 0; - - sinon.extend(stub, (function () { - var slice = Array.prototype.slice, proto; - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - proto = { - create: function create() { - var functionStub = function () { - - callCallback(functionStub, arguments); - - if (functionStub.exception) { - throw functionStub.exception; - } else if (typeof functionStub.returnArgAt == 'number') { - return arguments[functionStub.returnArgAt]; - } else if (functionStub.returnThis) { - return this; - } - return functionStub.returnValue; - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub); - functionStub.func = orig; - - functionStub.callArgAts = []; - functionStub.callbackArguments = []; - functionStub.callbackContexts = []; - functionStub.callArgProps = []; - - sinon.extend(functionStub, stub); - functionStub._create = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.callArgAts = []; - this.callbackArguments = []; - this.callbackContexts = []; - this.callArgProps = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - returns: function returns(value) { - this.returnValue = value; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - }, - - "throws": throwsException, - throwsException: throwsException, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yields: function () { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 0)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(prop); - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(prop); - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields|thenYields$)/) && - !method.match(/Async/)) { - proto[method + 'Async'] = (function (syncFnName) { - return function () { - this.callbackAsync = true; - return this[syncFnName].apply(this, arguments); - }; - })(method); - } - } - - return proto; - - }())); - - if (commonJSModule) { - module.exports = stub; - } else { - sinon.stub = stub; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false*/ -/*global module, require, sinon*/ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function mock(object) { - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - sinon.mock = mock; - - sinon.extend(mock, (function () { - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - return { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }; - }())); - - var times = sinon.timesInWords; - - sinon.expectation = (function () { - var slice = Array.prototype.slice; - var _invoke = sinon.spy.invoke; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - return { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return _invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function(message) { - sinon.assert.pass(message); - }, - fail: function (message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - }()); - - if (commonJSModule) { - module.exports = mock; - } else { - sinon.mock = mock; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true*/ -/*global module, require, sinon*/ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - if (commonJSModule) { - module.exports = collection; - } else { - sinon.collection = collection; - } -}(typeof sinon == "object" && sinon || null)); - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function(type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener, useCapture) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener, useCapture) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; -}()); - -/** - * @depend ../../sinon.js - * @depend event.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} -sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest }; - -// wrapper for global -(function(global) { - var xhr = sinon.xhr; - xhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - xhr.GlobalActiveXObject = global.ActiveXObject; - xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined"; - xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined"; - xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX - ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - "Connection": true, - "Content-Length": true, - "Cookie": true, - "Cookie2": true, - "Content-Transfer-Encoding": true, - "Date": true, - "Expect": true, - "Host": true, - "Keep-Alive": true, - "Referer": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, - "Upgrade": true, - "User-Agent": true, - "Via": true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener(event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) return; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if(callback(collection[index]) === true) return true; - }; - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function(obj,method,args) { - switch(args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0],args[1]); - case 3: return obj[method](args[0],args[1],args[2]); - case 4: return obj[method](args[0],args[1],args[2],args[3]); - case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]); - }; - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) { - var xhr = new sinon.xhr.workingXHR(); - each(["open","setRequestHeader","send","abort","getResponseHeader", - "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"], - function(method) { - fakeXhr[method] = function() { - return apply(xhr,method,arguments); - }; - }); - - var copyAttrs = function(args) { - each(args, function(attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch(e) { - if(!IE6Re.test(navigator.userAgent)) throw e; - } - }); - }; - - var stateChange = function() { - fakeXhr.readyState = xhr.readyState; - if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status","statusText"]); - } - if(xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText"]); - } - if(xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr); - }; - if(xhr.addEventListener) { - for(var event in fakeXhr.eventListeners) { - if(fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event],function(handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange",stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr,"open",xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - if(sinon.FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters,function(filter) { - return filter.apply(this,xhrArgs) - }); - if (defake) { - return sinon.FakeXMLHttpRequest.defake(this,arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - if (this.requestHeaders["Content-Type"]) { - var value = this.requestHeaders["Content-Type"].split(";"); - this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = sinon.FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = header.toLowerCase(); - - for (var h in this.responseHeaders) { - if (h.toLowerCase() == header) { - return this.responseHeaders[h]; - } - } - - return null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - } else { - this.readyState = FakeXMLHttpRequest.DONE; - } - }, - - respond: function respond(status, headers, body) { - this.setResponseHeaders(headers || {}); - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseBody(body || ""); - if (typeof this.onload === "function"){ - this.onload(); - } - - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - // Borrowed from JSpec - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - sinon.useFakeXMLHttpRequest = function () { - sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (xhr.supportsXHR) { - global.XMLHttpRequest = xhr.GlobalXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = xhr.GlobalActiveXObject; - } - - delete sinon.FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXMLHttpRequest.onCreate; - } - }; - if (xhr.supportsXHR) { - global.XMLHttpRequest = sinon.FakeXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new sinon.FakeXMLHttpRequest(); - } - - return new xhr.GlobalActiveXObject(objId); - }; - } - - return sinon.FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; -})(this); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_xml_http_request.js - */ -/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/ -/*global module, require, window*/ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -sinon.fakeServer = (function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestMethod = this.getHTTPMethod(request); - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1)); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - } - - return { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - }; - - if (this.autoRespond && !this.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, this.autoRespondAfter || 10); - - this.responding = true; - } - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) this.respondWith.apply(this, arguments); - var queue = this.queue || []; - var request; - - while(request = queue.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var i = 0, l = this.responses.length; i < l; i++) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; -}()); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/*jslint browser: true, eqeqeq: false, onevar: false*/ -/*global sinon*/ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; -}()); - -/** - * @depend ../sinon.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global require, module*/ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof module == "object" && typeof require == "function") { - var sinon = require("../sinon"); - sinon.extend(sinon, require("./util/fake_timers")); -} - -(function () { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto) { - config.injectInto[key] = value; - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - return obj; - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - } - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - if (typeof module == "object" && typeof require == "function") { - module.exports = sinon.sandbox; - } -}()); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - * @depend sandbox.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - return function () { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var exception, result; - var args = Array.prototype.slice.call(arguments).concat(sandbox.args); - - try { - result = callback.apply(this, args); - } catch (e) { - exception = e; - } - - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } - else { - sandbox.verifyAndRestore(); - } - - return result; - }; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - if (commonJSModule) { - module.exports = test; - } else { - sinon.test = test; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend test.js - */ -/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/ -/*global module, require, sinon*/ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon || !Object.prototype.hasOwnProperty) { - return; - } - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function testCase(tests, prefix) { - /*jsl:ignore*/ - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - /*jsl:end*/ - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName)) { - property = tests[testName]; - - if (/^(setUp|tearDown)$/.test(testName)) { - continue; - } - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - if (commonJSModule) { - module.exports = testCase; - } else { - sinon.testCase = testCase; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var slice = Array.prototype.slice; - var assert; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, fake.printf.apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - }; - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "export" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; }, - "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - if (commonJSModule) { - module.exports = assert; - } else { - sinon.assert = assert; - } -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - -return sinon;}.call(typeof window != 'undefined' && window || {})); diff --git a/build/node_modules/sinon/pkg/sinon-2.0.0-pre.js b/build/node_modules/sinon/pkg/sinon-2.0.0-pre.js deleted file mode 100644 index d13a8344..00000000 --- a/build/node_modules/sinon/pkg/sinon-2.0.0-pre.js +++ /dev/null @@ -1,9061 +0,0 @@ -/** - * Sinon.JS 2.0.0-pre, 2016/01/16 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function () { - 'use strict'; -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0) { - return args[callArgAt]; - } - - var argumentList; - - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } - - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); - } - - var callArgProp = behavior.callArgProp; - - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } - - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } - - return null; -} - -function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; - - if (behavior.callArgProp) { - msg = functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + behavior.callArgAt + " is not a function: " + func; -} - -function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); - - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } - - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } -} - -var proto = { - create: function create(stub) { - var behavior = extend({}, proto); - delete behavior.create; - behavior.stub = stub; - - return behavior; - }, - - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, - - invoke: function invoke(context, args) { - callCallback(this, args); - - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } - - return this.returnValue; - }, - - onCall: function onCall(index) { - return this.stub.onCall(index); - }, - - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, - - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, - - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, - - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, - - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsOn: function (context) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - yieldsToOn: function (prop, context) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; - - return this; - }, - - throws: throwsException, - throwsException: throwsException, - - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - } -}; - -function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; -} - -// create asynchronous versions of callsArg* and yields* methods -for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } -} - -module.exports = proto; - -}).call(this,require('_process')) -},{"./extend":6,"./util/core/function-name":22,"_process":39}],4:[function(require,module,exports){ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -"use strict"; - -var sinon = require("./util/core"); -var sinonMatch = require("./match"); -var deepEqual = require("./util/core/deep-equal").use(sinonMatch); -var functionName = require("./util/core/function-name"); -var createInstance = require("./util/core/create"); -var slice = Array.prototype.slice; - -function throwYieldError(proxy, text, args) { - var msg = functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); -} - -var callProto = { - calledOn: function calledOn(thisValue) { - if (sinonMatch && sinonMatch.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinonMatch || !sinonMatch(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, - - toString: function () { - var callStr = this.proxy ? this.proxy.toString() + "(" : ""; - var args = []; - - if (!this.args) { - return ":("; - } - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); - - } - - return callStr; - } -}; - -callProto.invokeCallback = callProto.yield; - -function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = createInstance(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; - - return proxyCall; -} -createSpyCall.toString = callProto.toString; // used by mocks - -module.exports = createSpyCall; - -},{"./match":8,"./util/core":26,"./util/core/create":18,"./util/core/deep-equal":19,"./util/core/function-name":22}],5:[function(require,module,exports){ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var sinon = require("./util/core"); -var sinonSpy = require("./spy"); - -var push = [].push; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; -} - -function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } -} - -function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } -} - -var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - reset: function restore() { - each(this, "reset"); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinonSpy.apply(sinonSpy, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - if (!object) { - var type = object === null ? "null" : "undefined"; - throw new Error("Trying to stub property '" + property + "' of " + type); - } - - var original = object[property]; - - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } -}; - -module.exports = collection; - -},{"./spy":12,"./util/core":26}],6:[function(require,module,exports){ -"use strict"; - -// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug -var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; -})(); - -/* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ -module.exports = function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; -}; - -},{}],7:[function(require,module,exports){ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -var sinon = require("./util/core"); - -// cache a reference to setTimeout, so that our reference won't be stubbed out -// when using fake timers and errors will still get logged -// https://github.com/cjohansen/Sinon.JS/issues/381 -var realSetTimeout = setTimeout; - -function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } -} - -// When set to true, any errors logged will be thrown immediately; -// If set to false, the errors will be thrown in separate execution frame. -logError.useImmediateExceptions = true; - -// wrap realSetTimeout with something we can stub in tests -logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); -}; - -module.exports = logError; - -},{"./util/core":26}],8:[function(require,module,exports){ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -"use strict"; - -var create = require("./util/core/create"); -var deepEqual = require("./util/core/deep-equal").use(match); // eslint-disable-line no-use-before-define -var functionName = require("./util/core/function-name"); -var typeOf = require("./typeOf"); - -function assertType(value, type, name) { - var actual = typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } -} - -var matcher = { - toString: function () { - return this.message; - } -}; - -function isMatcher(object) { - return matcher.isPrototypeOf(object); -} - -function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!deepEqual(exp, act)) { - return false; - } - } - } - return true; -} - -var TYPE_MAP = { - "function": function (m, expectation, message) { - m.test = expectation; - m.message = message || "match(" + functionName(expectation) + ")"; - }, - number: function (m, expectation) { - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - }, - object: function (m, expectation) { - var array = []; - var key; - - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + functionName(expectation.test) + ")"; - return m; - } - - for (key in expectation) { - if (expectation.hasOwnProperty(key)) { - array.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + array.join(", ") + ")"; - }, - regexp: function (m, expectation) { - m.test = function (actual) { - return typeof actual === "string" && expectation.test(actual); - }; - }, - string: function (m, expectation) { - m.test = function (actual) { - return typeof actual === "string" && actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - } -}; - -function match(expectation, message) { - var m = create(matcher); - var type = typeOf(expectation); - - if (type in TYPE_MAP) { - TYPE_MAP[type](m, expectation, message); - } else { - m.test = function (actual) { - return deepEqual(expectation, actual); - }; - } - - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - - return m; -} - -matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; -}; - -matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var and = create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; -}; - -match.isMatcher = isMatcher; - -match.any = match(function () { - return true; -}, "any"); - -match.defined = match(function (actual) { - return actual !== null && actual !== undefined; -}, "defined"); - -match.truthy = match(function (actual) { - return !!actual; -}, "truthy"); - -match.falsy = match(function (actual) { - return !actual; -}, "falsy"); - -match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); -}; - -match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); -}; - -match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + functionName(type) + ")"); -}; - -function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || deepEqual(value, actual[property]); - }, message); - }; -} - -match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; -}, "has"); - -match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); -}, "hasOwn"); - -match.bool = match.typeOf("boolean"); -match.number = match.typeOf("number"); -match.string = match.typeOf("string"); -match.object = match.typeOf("object"); -match.func = match.typeOf("function"); -match.array = match.typeOf("array"); -match.regexp = match.typeOf("regexp"); -match.date = match.typeOf("date"); - -module.exports = match; - -},{"./typeOf":16,"./util/core/create":18,"./util/core/deep-equal":19,"./util/core/function-name":22}],9:[function(require,module,exports){ -/** - * Mock expecations - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var spyInvoke = require("./spy").invoke; -var spyCallToString = require("./call").toString; -var timesInWords = require("./util/core/times-in-words"); -var extend = require("./extend"); -var match = require("./match"); -var stub = require("./stub"); -var assert = require("./assert"); -var deepEqual = require("./util/core/deep-equal").use(match); -var format = require("./util/core/format"); - -var slice = Array.prototype.slice; -var push = Array.prototype.push; - -function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; - } - - return "called " + timesInWords(callCount); -} - -function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = timesInWords(min); - - if (min !== max) { - str = "at least " + str + " and at most " + timesInWords(max); - } - - return str; - } - - if (typeof min === "number") { - return "at least " + timesInWords(min); - } - - return "at most " + timesInWords(max); -} - -function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; -} - -function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } - - return expectation.callCount === expectation.maxCalls; -} - -function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); - - return isMatcher && possibleMatcher.test(arg) || true; -} - -var mockExpectation = { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = extend(stub.create(), mockExpectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return spyInvoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - mockExpectation.fail(this.method + " already called " + timesInWords(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - mockExpectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - mockExpectation.fail(this.method + " received no arguments, expected " + - format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - mockExpectation.fail(this.method + " received too few arguments (" + format(args) + - "), expected " + format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - mockExpectation.fail(this.method + " received too many arguments (" + format(args) + - "), expected " + format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - mockExpectation.fail(this.method + " received wrong arguments " + format(args) + - ", didn't match " + this.expectedArguments.toString()); - } - - if (!deepEqual(this.expectedArguments[i], args[i])) { - mockExpectation.fail(this.method + " received wrong arguments " + format(args) + - ", expected " + format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } - - if (!deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = spyCallToString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - mockExpectation.fail(this.toString()); - } else { - mockExpectation.pass(this.toString()); - } - - return true; - }, - - pass: function pass(message) { - assert.pass(message); - }, - - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } -}; - -module.exports = mockExpectation; - -},{"./assert":2,"./call":4,"./extend":6,"./match":8,"./spy":12,"./stub":13,"./util/core/deep-equal":19,"./util/core/format":21,"./util/core/times-in-words":30}],10:[function(require,module,exports){ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var mockExpectation = require("./mock-expectation"); -var spyCallToString = require("./call").toString; -var extend = require("./extend"); -var match = require("./match"); -var deepEqual = require("./util/core/deep-equal").use(match); -var wrapMethod = require("./util/core/wrap-method"); - -var push = Array.prototype.push; - -function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } - - if (!object) { - return mockExpectation.create("Anonymous mock"); - } - - return mock.create(object); -} - -function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } -} - -function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } - - for (var i = 0, l = arr1.length; i < l; i++) { - if (!deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; -} - -extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = mockExpectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - mockExpectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - mockExpectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; - - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } - - var messages = []; - var exhausted = 0; - - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } - - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } - - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); - } - - messages.unshift("Unexpected call: " + spyCallToString.call({ - proxy: method, - args: args - })); - - mockExpectation.fail(messages.join("\n")); - } -}); - -module.exports = mock; - -},{"./call":4,"./extend":6,"./match":8,"./mock-expectation":9,"./util/core/deep-equal":19,"./util/core/wrap-method":32}],11:[function(require,module,exports){ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./extend"); -require("./collection"); -require("./util/fake_server_with_clock"); -require("./util/fake_timers"); -var sinon = require("./util/core"); - -var push = [].push; - -function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); - } -} - -function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; -} - -sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - obj.match = sinon.match; - - return obj; - }, - - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, - - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - }, - - match: sinon.match -}); - -sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - -},{"./collection":5,"./extend":6,"./util/core":26,"./util/fake_server_with_clock":35,"./util/fake_timers":36}],12:[function(require,module,exports){ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var extend = require("./extend"); -var deepEqual = require("./util/core/deep-equal"); -var functionName = require("./util/core/function-name"); -var functionToString = require("./util/core/function-to-string"); -var getPropertyDescriptor = require("./util/core/get-property-descriptor"); -var sinon = require("./util/core"); -var spyCall = require("./call"); -var timesInWords = require("./util/core/times-in-words"); -var wrapMethod = require("./util/core/wrap-method"); - -var push = Array.prototype.push; -var slice = Array.prototype.slice; -var callId = 0; - -function spy(object, property, types) { - var descriptor, i, methodDesc; - - if (!property && typeof object === "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - if (types) { - descriptor = {}; - methodDesc = getPropertyDescriptor(object, property); - - for (i = 0; i < types.length; i++) { - descriptor[types[i]] = spy.create(methodDesc[types[i]]); - } - return wrapMethod(object, property, descriptor); - } - - return wrapMethod(object, property, spy.create(object[property])); -} - -function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; - } - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } -} - -function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; -} - -function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); -} - -function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - // Do not change this to use an eval. Projects that depend on sinon block the use of eval. - // ref: https://github.com/sinonjs/sinon/issues/710 - switch (proxyLength) { - /*eslint-disable no-unused-vars, max-len*/ - case 1: p = function proxy(a) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 2: p = function proxy(a, b) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 3: p = function proxy(a, b, c) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 4: p = function proxy(a, b, c, d) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 5: p = function proxy(a, b, c, d, e) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 6: p = function proxy(a, b, c, d, e, f) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 7: p = function proxy(a, b, c, d, e, f, g) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 8: p = function proxy(a, b, c, d, e, f, g, h) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 9: p = function proxy(a, b, c, d, e, f, g, h, i) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 10: p = function proxy(a, b, c, d, e, f, g, h, i, j) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 11: p = function proxy(a, b, c, d, e, f, g, h, i, j, k) { return p.invoke(func, this, slice.call(arguments)); }; break; - case 12: p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) { return p.invoke(func, this, slice.call(arguments)); }; break; - default: p = function proxy() { return p.invoke(func, this, slice.call(arguments)); }; break; - /*eslint-enable*/ - } - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; -} - -var uuid = 0; - -// Public API -var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } - - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - - return this; - }, - - create: function create(func, spyLength) { - var name; - - if (typeof func !== "function") { - func = function () { }; - } else { - name = functionName(func); - } - - if (!spyLength) { - spyLength = func.length; - } - - var proxy = createProxy(func, spyLength); - - extend(proxy, spy); - delete proxy.create; - extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = functionToString; - proxy.instantiateFake = spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - // Make call properties available from within the spied function: - createCallProperties.call(this); - - try { - this.invoking = true; - - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } - - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); - - // Make return value and exception available in the calls: - createCallProperties.call(this); - - if (exception !== undefined) { - throw exception; - } - - return returnValue; - }, - - named: function named(name) { - this.displayName = name; - return this; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, - - getCalls: function () { - var calls = []; - var i; - - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } - - return calls; - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, - - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } -}; - -function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; -} - -delegateToCalls("calledOn", true); -delegateToCalls("alwaysCalledOn", false, "calledOn"); -delegateToCalls("calledWith", true); -delegateToCalls("calledWithMatch", true); -delegateToCalls("alwaysCalledWith", false, "calledWith"); -delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); -delegateToCalls("calledWithExactly", true); -delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); -delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; -}); -delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; -}); -delegateToCalls("threw", true); -delegateToCalls("alwaysThrew", false, "threw"); -delegateToCalls("returned", true); -delegateToCalls("alwaysReturned", false, "returned"); -delegateToCalls("calledWithNew", true); -delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); -delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); -}); -spyApi.callArgWith = spyApi.callArg; -delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); -}); -spyApi.callArgOnWith = spyApi.callArgOn; -delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); -}); -// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. -spyApi.invokeCallback = spyApi.yield; -delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); -}); -delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); -}); -delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); -}); - -spyApi.formatters = { - c: function (spyInstance) { - return timesInWords(spyInstance.callCount); - }, - - n: function (spyInstance) { - return spyInstance.toString(); - }, - - C: function (spyInstance) { - var calls = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - t: function (spyInstance) { - var objects = []; - - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spyInstance, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } -}; - -extend(spy, spyApi); - -spy.spyCall = spyCall; - -module.exports = spy; - -},{"./call":4,"./extend":6,"./util/core":26,"./util/core/deep-equal":19,"./util/core/function-name":22,"./util/core/function-to-string":23,"./util/core/get-property-descriptor":25,"./util/core/times-in-words":30,"./util/core/wrap-method":32}],13:[function(require,module,exports){ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var behavior = require("./behavior"); -var spy = require("./spy"); -var extend = require("./extend"); -var walk = require("./util/core/walk"); -var objectKeys = require("./util/core/object-keys"); -var getPropertyDescriptor = require("./util/core/get-property-descriptor"); -var createInstance = require("./util/core/create"); -var functionToString = require("./util/core/function-to-string"); -var wrapMethod = require("./util/core/wrap-method"); - -function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); - } - - if (property && !object) { - var type = object === null ? "null" : "undefined"; - throw new Error("Trying to stub property '" + property + "' of " + type); - } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = spy && spy.create ? spy.create(func) : func; - } else { - wrapper = func; - if (spy && spy.create) { - var types = objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = spy.create(wrapper[types[i]]); - } - } - } - } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; - } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; - } - - return wrapMethod(object, property, wrapper); -} - -stub.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return stub(createInstance(constructor.prototype)); -}; - -/*eslint-disable no-use-before-define*/ -function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); -} - -function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - behavior.create(stubInstance); -} - -function getCurrentBehavior(stubInstance) { - var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return currentBehavior && currentBehavior.isPresent() ? currentBehavior : getDefaultBehavior(stubInstance); -} -/*eslint-enable no-use-before-define*/ - -var uuid = 0; - -var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = spy.create(functionStub, stubLength); - functionStub.func = orig; - - extend(functionStub, stub); - functionStub.instantiateFake = stub.create; - functionStub.displayName = "stub"; - functionStub.toString = functionToString; - - functionStub.defaultBehavior = null; - functionStub.behaviors = []; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.defaultBehavior = null; - this.behaviors = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - resetHistory: spy.reset, - - reset: function () { - this.resetHistory(); - this.resetBehavior(); - }, - - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = behavior.create(this); - } - - return this.behaviors[index]; - }, - - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, - - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, - - onThirdCall: function onThirdCall() { - return this.onCall(2); - } -}; - -function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; -} - -for (var method in behavior) { - if (behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } -} - -extend(stub, proto); - -module.exports = stub; - -},{"./behavior":3,"./extend":6,"./spy":12,"./util/core/create":18,"./util/core/function-to-string":23,"./util/core/get-property-descriptor":25,"./util/core/object-keys":27,"./util/core/walk":31,"./util/core/wrap-method":32}],14:[function(require,module,exports){ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./sandbox"); -var sinon = require("./util/core"); - -var slice = Array.prototype.slice; - -function test(callback) { - var type = typeof callback; - - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; - - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } - - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } - - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } - - return result; - } - - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } - - return sinonSandboxedTest; -} - -test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true -}; - -sinon.test = test; - -},{"./sandbox":11,"./util/core":26}],15:[function(require,module,exports){ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./test"); -var sinon = require("./util/core"); - -function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; -} - -function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; - - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; - - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; -} - -sinon.testCase = testCase; - -},{"./test":14,"./util/core":26}],16:[function(require,module,exports){ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -module.exports = function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); -}; - -},{}],17:[function(require,module,exports){ -"use strict"; - -module.exports = function calledInOrder(spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; -}; - -},{}],18:[function(require,module,exports){ -"use strict"; - -var Klass = function () {}; - -module.exports = function create(proto) { - Klass.prototype = proto; - return new Klass(); -}; - -},{}],19:[function(require,module,exports){ -"use strict"; - -var div = typeof document !== "undefined" && document.createElement("div"); - -function isReallyNaN(val) { - return val !== val; -} - -function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; -} - -function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); -} - -var deepEqual = module.exports = function deepEqual(a, b) { - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (Object.prototype.hasOwnProperty.call(a, prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - // allow alternative function for recursion - if (!(arguments[2] || deepEqual)(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (Object.prototype.hasOwnProperty.call(b, prop)) { - bLength += 1; - } - } - - return aLength === bLength; -}; - -deepEqual.use = function (match) { - return function deepEqual$matcher(a, b) { - if (match.isMatcher(a)) { - return a.test(b); - } - - return deepEqual(a, b, deepEqual$matcher); - }; -}; - -},{}],20:[function(require,module,exports){ -"use strict"; - -module.exports = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true -}; - -},{}],21:[function(require,module,exports){ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -"use strict"; - -var formatio = require("formatio"); - -var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 -}); - -module.exports = function format() { - return formatter.ascii.apply(formatter, arguments); -}; - -},{"formatio":40}],22:[function(require,module,exports){ -"use strict"; - -module.exports = function functionName(func) { - var name = func.displayName || func.name; - var matches; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name && (matches = func.toString().match(/function ([^\s\(]+)/))) { - name = matches[1]; - } - - return name; -}; - - -},{}],23:[function(require,module,exports){ -"use strict"; - -module.exports = function toString() { - var i, prop, thisValue; - if (this.getCall && this.callCount) { - i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; -}; - -},{}],24:[function(require,module,exports){ -"use strict"; - -var defaultConfig = require("./default-config"); - -module.exports = function getConfig(custom) { - var config = {}; - var prop; - - custom = custom || {}; - - for (prop in defaultConfig) { - if (defaultConfig.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaultConfig[prop]; - } - } - - return config; -}; - -},{"./default-config":20}],25:[function(require,module,exports){ -"use strict"; - -module.exports = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; -}; - -},{}],26:[function(require,module,exports){ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -exports.wrapMethod = require("./wrap-method"); - -exports.create = require("./create"); - -exports.deepEqual = require("./deep-equal"); - -exports.format = require("./format"); - -exports.functionName = require("./function-name"); - -exports.functionToString = require("./function-to-string"); - -exports.objectKeys = require("./object-keys"); - -exports.getPropertyDescriptor = require("./get-property-descriptor"); - -exports.getConfig = require("./get-config"); - -exports.defaultConfig = require("./default-config"); - -exports.timesInWords = require("./times-in-words"); - -exports.calledInOrder = require("./called-in-order"); - -exports.orderByFirstCall = require("./order-by-first-call"); - -exports.walk = require("./walk"); - -exports.restore = require("./restore"); - -},{"./called-in-order":17,"./create":18,"./deep-equal":19,"./default-config":20,"./format":21,"./function-name":22,"./function-to-string":23,"./get-config":24,"./get-property-descriptor":25,"./object-keys":27,"./order-by-first-call":28,"./restore":29,"./times-in-words":30,"./walk":31,"./wrap-method":32}],27:[function(require,module,exports){ -"use strict"; - -var hasOwn = Object.prototype.hasOwnProperty; - -module.exports = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; -}; - -},{}],28:[function(require,module,exports){ -"use strict"; - -module.exports = function orderByFirstCall(spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); -}; - -},{}],29:[function(require,module,exports){ -"use strict"; - -function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; -} - -module.exports = function restore(object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } -}; - -},{}],30:[function(require,module,exports){ -"use strict"; - -var array = [null, "once", "twice", "thrice"]; - -module.exports = function timesInWords(count) { - return array[count] || (count || 0) + " times"; -}; - -},{}],31:[function(require,module,exports){ -"use strict"; - -function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; - - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ - - return; - } - - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); - - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } -} - -/* Walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ -module.exports = function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); -}; - -},{}],32:[function(require,module,exports){ -"use strict"; - -var getPropertyDescriptor = require("./get-property-descriptor"); -var objectKeys = require("./object-keys"); - -var hasOwn = Object.prototype.hasOwnProperty; - -function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); -} - -function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } -} - -// Cheap way to detect if we have ES5 support. -var hasES5Support = "keys" in Object; - -module.exports = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - if (hasES5Support) { - var descriptor = getPropertyDescriptor(object, property); - if (descriptor && descriptor.value === method) { - object[property] = wrappedMethod; - } - } - else { - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; -}; - -},{"./get-property-descriptor":25,"./object-keys":27}],33:[function(require,module,exports){ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -"use strict"; - -var push = [].push; - -function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); -} - -Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } -}; - -function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = typeof progressEventRaw.loaded === "number" ? progressEventRaw.loaded : null; - this.total = typeof progressEventRaw.total === "number" ? progressEventRaw.total : null; - this.lengthComputable = !!progressEventRaw.total; -} - -ProgressEvent.prototype = new Event(); - -ProgressEvent.prototype.constructor = ProgressEvent; - -function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; -} - -CustomEvent.prototype = new Event(); - -CustomEvent.prototype.constructor = CustomEvent; - -var EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } -}; - -module.exports = { - Event: Event, - ProgressEvent: ProgressEvent, - CustomEvent: CustomEvent, - EventTarget: EventTarget -}; - -},{}],34:[function(require,module,exports){ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var push = [].push; -var sinon = require("./core"); -var createInstance = require("./core/create"); -var format = require("./core/format"); - -function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; -} - -var wloc = typeof window !== "undefined" ? window.location : {}; -var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - -function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; -} - -function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; -} - -var fakeServer = { - create: function (config) { - var server = createInstance(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + format(request) + "\n\n"; - str += "Response:\n" + format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } -}; - -module.exports = fakeServer; - -},{"./core":26,"./core/create":18,"./core/format":21}],35:[function(require,module,exports){ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var fakeServer = require("./fake_server"); -var fakeTimers = require("./fake_timers"); - -function Server() {} -Server.prototype = fakeServer; - -var fakeServerWithClock = new Server(); - -fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = fakeTimers.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return fakeServer.addRequest.call(this, xhr); -}; - -fakeServerWithClock.respond = function respond() { - var returnVal = fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; -}; - -fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return fakeServer.restore.apply(this, arguments); -}; - -module.exports = fakeServerWithClock; - -},{"./fake_server":34,"./fake_timers":36}],36:[function(require,module,exports){ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var llx = require("lolex"); - -exports.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; -}; - -exports.clock = { - create: function (now) { - return llx.createClock(now); - } -}; - -exports.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -},{"lolex":41}],37:[function(require,module,exports){ -(function (global){ -/** - * Fake XDomainRequest object - */ - -"use strict"; - -var event = require("./event"); -var extend = require("../extend"); -var logError = require("../log_error"); - -var xdr = { XDomainRequest: global.XDomainRequest }; -xdr.GlobalXDomainRequest = global.XDomainRequest; -xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; -xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - -function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } -} - -function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -extend(FakeXDomainRequest.prototype, event.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } -}); - -extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 -}); - -function useFakeXDomainRequest() { - FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = FakeXDomainRequest; - } - return FakeXDomainRequest; -} - -module.exports = { - xdr: xdr, - FakeXDomainRequest: FakeXDomainRequest, - useFakeXDomainRequest: useFakeXDomainRequest -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":6,"../log_error":7,"./event":33}],38:[function(require,module,exports){ -(function (global){ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var TextEncoder = require("text-encoding").TextEncoder; - -var sinon = require("./core"); -var sinonEvent = require("./event"); -var extend = require("../extend"); - -function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; -} - -var supportsProgress = typeof ProgressEvent !== "undefined"; -var supportsCustomEvent = typeof CustomEvent !== "undefined"; -var supportsFormData = typeof FormData !== "undefined"; -var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; -var supportsBlob = typeof Blob === "function"; -var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; -sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; -sinonXhr.GlobalActiveXObject = global.ActiveXObject; -sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; -sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; -sinonXhr.workingXHR = getWorkingXHR(global); -sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - -var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true -}; - -// An upload object is created for each -// FakeXMLHttpRequest and allows upload -// events to be simulated using uploadProgress -// and uploadError. -function UploadProgress() { - this.eventListeners = { - abort: [], - error: [], - load: [], - loadend: [], - progress: [] - }; -} - -UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); -}; - -UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } -}; - -UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } -}; - -// Note that for FakeXMLHttpRequest to work pre ES5 -// we lose some of the alignment with the spec. -// To ensure as close a match as possible, -// set responseType before calling open, send or respond; -function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } -} - -function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; -} - -// filtering to enable a white-list version of Sinon FakeXhr, -// where whitelisted requests are passed through to real XHR -function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } -} -function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; -} -// largest arity in XHR is 5 - XHR#open -var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } -}; - -FakeXMLHttpRequest.filters = []; -FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); -}; -var IE6Re = /MSIE 6/; -FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); -}; -FakeXMLHttpRequest.useFilters = false; - -function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } -} - -function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -function convertToArrayBuffer(body, encoding) { - return new TextEncoder(encoding || "utf-8").encode(body).buffer; -} - -function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); -} - -function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); -} - -function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; -} - -FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; -}; - -FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" -}; - -extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinonEvent.Event("readystatechange", false, false, this); - var event, progress; - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - if (this.readyState === FakeXMLHttpRequest.DONE) { - if (this.status < 200 || this.status > 299) { - progress = {loaded: 0, total: 0}; - event = this.aborted ? "abort" : "error"; - } - else { - progress = {loaded: 100, total: 100}; - event = "load"; - } - - if (supportsProgress) { - this.upload.dispatchEvent(new sinonEvent.ProgressEvent("progress", progress, this)); - this.upload.dispatchEvent(new sinonEvent.ProgressEvent(event, progress, this)); - this.upload.dispatchEvent(new sinonEvent.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(new sinonEvent.ProgressEvent("progress", progress, this)); - this.dispatchEvent(new sinonEvent.ProgressEvent(event, progress, this)); - this.dispatchEvent(new sinonEvent.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinonEvent.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinonEvent.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinonEvent.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinonEvent.CustomEvent("error", {detail: error})); - } - } -}); - -extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 -}); - -function useFakeXMLHttpRequest() { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; -} - -module.exports = { - xhr: sinonXhr, - FakeXMLHttpRequest: FakeXMLHttpRequest, - useFakeXMLHttpRequest: useFakeXMLHttpRequest -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":6,"./core":26,"./event":33,"text-encoding":43}],39:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],40:[function(require,module,exports){ -(function (global){ -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - "use strict"; - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"samsam":42}],41:[function(require,module,exports){ -(function (global){ -/*global global, window*/ -/** - * @author Christian Johansen (christian@cjohansen.no) and contributors - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (global) { - "use strict"; - - // Make properties writable in IE, as per - // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html - // JSLint being anal - var glbl = global; - - global.setTimeout = glbl.setTimeout; - global.clearTimeout = glbl.clearTimeout; - global.setInterval = glbl.setInterval; - global.clearInterval = glbl.clearInterval; - global.Date = glbl.Date; - - // setImmediate is not a standard function - // avoid adding the prop to the window object if not present - if (global.setImmediate !== undefined) { - global.setImmediate = glbl.setImmediate; - global.clearImmediate = glbl.clearImmediate; - } - - // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() - // browsers, a number. - // see https://github.com/cjohansen/Sinon.JS/pull/436 - - var NOOP = function () { return undefined; }; - var timeoutResult = setTimeout(NOOP, 0); - var addTimerReturnsObject = typeof timeoutResult === "object"; - clearTimeout(timeoutResult); - - var NativeDate = Date; - var uniqueTimerId = 1; - - /** - * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into - * number of milliseconds. This is used to support human-readable strings passed - * to clock.tick() - */ - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function firstTimer(clock) { - var timers = clock.timers, - timer = null, - id; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - if (!timer || compareTimers(timer, timers[id]) === 1) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } - if (timer.interval !== undefined) { - return "Interval"; - } - return "Timeout"; - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.next = function next() { - var timer = firstTimer(clock); - if (!timer) { - return clock.now; - } - - clock.duringTick = true; - try { - clock.now = timer.callAt; - callTimer(clock, timer); - return clock.now; - } finally { - clock.duringTick = false; - } - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - var id, timer; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],42:[function(require,module,exports){ -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); - -},{}],43:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var encoding = require("./lib/encoding.js"); - -module.exports = { - TextEncoder: encoding.TextEncoder, - TextDecoder: encoding.TextDecoder, -}; - -},{"./lib/encoding.js":45}],44:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Indexes from: http://encoding.spec.whatwg.org/indexes.json - -(function(global) { - 'use strict'; - global["encoding-indexes"] = { - "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], - "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,59335,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], - "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], - "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], - "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], - "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], - "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], - "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], - "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], - "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], - "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], - "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], - "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,9565,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], - "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], - "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], - "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], - "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,null,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], - "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], - "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], - "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] -}; -}(this)); - -},{}],45:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// If we're in node require encoding-indexes and attach it to the global. -/** - * @fileoverview Global |this| required for resolving indexes in node. - * @suppress {globalThis} - */ -if (typeof module !== "undefined" && module.exports) { - this["encoding-indexes"] = - require("./encoding-indexes.js")["encoding-indexes"]; -} - -(function(global) { - 'use strict'; - - // - // Utilities - // - - /** - * @param {number} a The number to test. - * @param {number} min The minimum value in the range, inclusive. - * @param {number} max The maximum value in the range, inclusive. - * @return {boolean} True if a >= min and a <= max. - */ - function inRange(a, min, max) { - return min <= a && a <= max; - } - - /** - * @param {number} n The numerator. - * @param {number} d The denominator. - * @return {number} The result of the integer division of n by d. - */ - function div(n, d) { - return Math.floor(n / d); - } - - /** - * @param {*} o - * @return {Object} - */ - function ToDictionary(o) { - if (o === undefined) return {}; - if (o === Object(o)) return o; - throw TypeError('Could not convert argument to dictionary'); - } - - /** - * @param {string} string Input string of UTF-16 code units. - * @return {!Array.} Code points. - */ - function stringToCodePoints(string) { - // http://heycam.github.io/webidl/#dfn-obtain-unicode - - // 1. Let S be the DOMString value. - var s = String(string); - - // 2. Let n be the length of S. - var n = s.length; - - // 3. Initialize i to 0. - var i = 0; - - // 4. Initialize U to be an empty sequence of Unicode characters. - var u = []; - - // 5. While i < n: - while (i < n) { - - // 1. Let c be the code unit in S at index i. - var c = s.charCodeAt(i); - - // 2. Depending on the value of c: - - // c < 0xD800 or c > 0xDFFF - if (c < 0xD800 || c > 0xDFFF) { - // Append to U the Unicode character with code point c. - u.push(c); - } - - // 0xDC00 ≤ c ≤ 0xDFFF - else if (0xDC00 <= c && c <= 0xDFFF) { - // Append to U a U+FFFD REPLACEMENT CHARACTER. - u.push(0xFFFD); - } - - // 0xD800 ≤ c ≤ 0xDBFF - else if (0xD800 <= c && c <= 0xDBFF) { - // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT - // CHARACTER. - if (i === n - 1) { - u.push(0xFFFD); - } - // 2. Otherwise, i < n−1: - else { - // 1. Let d be the code unit in S at index i+1. - var d = string.charCodeAt(i + 1); - - // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: - if (0xDC00 <= d && d <= 0xDFFF) { - // 1. Let a be c & 0x3FF. - var a = c & 0x3FF; - - // 2. Let b be d & 0x3FF. - var b = d & 0x3FF; - - // 3. Append to U the Unicode character with code point - // 2^16+2^10*a+b. - u.push(0x10000 + (a << 10) + b); - - // 4. Set i to i+1. - i += 1; - } - - // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a - // U+FFFD REPLACEMENT CHARACTER. - else { - u.push(0xFFFD); - } - } - } - - // 3. Set i to i+1. - i += 1; - } - - // 6. Return U. - return u; - } - - /** - * @param {!Array.} code_points Array of code points. - * @return {string} string String of UTF-16 code units. - */ - function codePointsToString(code_points) { - var s = ''; - for (var i = 0; i < code_points.length; ++i) { - var cp = code_points[i]; - if (cp <= 0xFFFF) { - s += String.fromCharCode(cp); - } else { - cp -= 0x10000; - s += String.fromCharCode((cp >> 10) + 0xD800, - (cp & 0x3FF) + 0xDC00); - } - } - return s; - } - - - // - // Implementation of Encoding specification - // http://dvcs.w3.org/hg/encoding/raw-file/tip/Overview.html - // - - // - // 3. Terminology - // - - /** - * End-of-stream is a special token that signifies no more tokens - * are in the stream. - * @const - */ var end_of_stream = -1; - - /** - * A stream represents an ordered sequence of tokens. - * - * @constructor - * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide the - * stream. - */ - function Stream(tokens) { - /** @type {!Array.} */ - this.tokens = [].slice.call(tokens); - } - - Stream.prototype = { - /** - * @return {boolean} True if end-of-stream has been hit. - */ - endOfStream: function() { - return !this.tokens.length; - }, - - /** - * When a token is read from a stream, the first token in the - * stream must be returned and subsequently removed, and - * end-of-stream must be returned otherwise. - * - * @return {number} Get the next token from the stream, or - * end_of_stream. - */ - read: function() { - if (!this.tokens.length) - return end_of_stream; - return this.tokens.shift(); - }, - - /** - * When one or more tokens are prepended to a stream, those tokens - * must be inserted, in given order, before the first token in the - * stream. - * - * @param {(number|!Array.)} token The token(s) to prepend to the stream. - */ - prepend: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.unshift(tokens.pop()); - } else { - this.tokens.unshift(token); - } - }, - - /** - * When one or more tokens are pushed to a stream, those tokens - * must be inserted, in given order, after the last token in the - * stream. - * - * @param {(number|!Array.)} token The tokens(s) to prepend to the stream. - */ - push: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.push(tokens.shift()); - } else { - this.tokens.push(token); - } - } - }; - - // - // 4. Encodings - // - - // 4.1 Encoders and decoders - - /** @const */ - var finished = -1; - - /** - * @param {boolean} fatal If true, decoding errors raise an exception. - * @param {number=} opt_code_point Override the standard fallback code point. - * @return {number} The code point to insert on a decoding error. - */ - function decoderError(fatal, opt_code_point) { - if (fatal) - throw TypeError('Decoder error'); - return opt_code_point || 0xFFFD; - } - - /** - * @param {number} code_point The code point that could not be encoded. - * @return {number} Always throws, no value is actually returned. - */ - function encoderError(code_point) { - throw TypeError('The code point ' + code_point + ' could not be encoded.'); - } - - /** @interface */ - function Decoder() {} - Decoder.prototype = { - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point, or |finished|. - */ - handler: function(stream, bite) {} - }; - - /** @interface */ - function Encoder() {} - Encoder.prototype = { - /** - * @param {Stream} stream The stream of code points being encoded. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit, or |finished|. - */ - handler: function(stream, code_point) {} - }; - - // 4.2 Names and labels - - // TODO: Define @typedef for Encoding: {name:string,labels:Array.} - // https://github.com/google/closure-compiler/issues/247 - - /** - * @param {string} label The encoding label. - * @return {?{name:string,labels:Array.}} - */ - function getEncoding(label) { - // 1. Remove any leading and trailing ASCII whitespace from label. - label = String(label).trim().toLowerCase(); - - // 2. If label is an ASCII case-insensitive match for any of the - // labels listed in the table below, return the corresponding - // encoding, and failure otherwise. - if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { - return label_to_encoding[label]; - } - return null; - } - - /** - * Encodings table: http://encoding.spec.whatwg.org/encodings.json - * @const - * @type {!Array.<{ - * heading: string, - * encodings: Array.<{name:string,labels:Array.}> - * }>} - */ - var encodings = [ - { - "encodings": [ - { - "labels": [ - "unicode-1-1-utf-8", - "utf-8", - "utf8" - ], - "name": "utf-8" - } - ], - "heading": "The Encoding" - }, - { - "encodings": [ - { - "labels": [ - "866", - "cp866", - "csibm866", - "ibm866" - ], - "name": "ibm866" - }, - { - "labels": [ - "csisolatin2", - "iso-8859-2", - "iso-ir-101", - "iso8859-2", - "iso88592", - "iso_8859-2", - "iso_8859-2:1987", - "l2", - "latin2" - ], - "name": "iso-8859-2" - }, - { - "labels": [ - "csisolatin3", - "iso-8859-3", - "iso-ir-109", - "iso8859-3", - "iso88593", - "iso_8859-3", - "iso_8859-3:1988", - "l3", - "latin3" - ], - "name": "iso-8859-3" - }, - { - "labels": [ - "csisolatin4", - "iso-8859-4", - "iso-ir-110", - "iso8859-4", - "iso88594", - "iso_8859-4", - "iso_8859-4:1988", - "l4", - "latin4" - ], - "name": "iso-8859-4" - }, - { - "labels": [ - "csisolatincyrillic", - "cyrillic", - "iso-8859-5", - "iso-ir-144", - "iso8859-5", - "iso88595", - "iso_8859-5", - "iso_8859-5:1988" - ], - "name": "iso-8859-5" - }, - { - "labels": [ - "arabic", - "asmo-708", - "csiso88596e", - "csiso88596i", - "csisolatinarabic", - "ecma-114", - "iso-8859-6", - "iso-8859-6-e", - "iso-8859-6-i", - "iso-ir-127", - "iso8859-6", - "iso88596", - "iso_8859-6", - "iso_8859-6:1987" - ], - "name": "iso-8859-6" - }, - { - "labels": [ - "csisolatingreek", - "ecma-118", - "elot_928", - "greek", - "greek8", - "iso-8859-7", - "iso-ir-126", - "iso8859-7", - "iso88597", - "iso_8859-7", - "iso_8859-7:1987", - "sun_eu_greek" - ], - "name": "iso-8859-7" - }, - { - "labels": [ - "csiso88598e", - "csisolatinhebrew", - "hebrew", - "iso-8859-8", - "iso-8859-8-e", - "iso-ir-138", - "iso8859-8", - "iso88598", - "iso_8859-8", - "iso_8859-8:1988", - "visual" - ], - "name": "iso-8859-8" - }, - { - "labels": [ - "csiso88598i", - "iso-8859-8-i", - "logical" - ], - "name": "iso-8859-8-i" - }, - { - "labels": [ - "csisolatin6", - "iso-8859-10", - "iso-ir-157", - "iso8859-10", - "iso885910", - "l6", - "latin6" - ], - "name": "iso-8859-10" - }, - { - "labels": [ - "iso-8859-13", - "iso8859-13", - "iso885913" - ], - "name": "iso-8859-13" - }, - { - "labels": [ - "iso-8859-14", - "iso8859-14", - "iso885914" - ], - "name": "iso-8859-14" - }, - { - "labels": [ - "csisolatin9", - "iso-8859-15", - "iso8859-15", - "iso885915", - "iso_8859-15", - "l9" - ], - "name": "iso-8859-15" - }, - { - "labels": [ - "iso-8859-16" - ], - "name": "iso-8859-16" - }, - { - "labels": [ - "cskoi8r", - "koi", - "koi8", - "koi8-r", - "koi8_r" - ], - "name": "koi8-r" - }, - { - "labels": [ - "koi8-u" - ], - "name": "koi8-u" - }, - { - "labels": [ - "csmacintosh", - "mac", - "macintosh", - "x-mac-roman" - ], - "name": "macintosh" - }, - { - "labels": [ - "dos-874", - "iso-8859-11", - "iso8859-11", - "iso885911", - "tis-620", - "windows-874" - ], - "name": "windows-874" - }, - { - "labels": [ - "cp1250", - "windows-1250", - "x-cp1250" - ], - "name": "windows-1250" - }, - { - "labels": [ - "cp1251", - "windows-1251", - "x-cp1251" - ], - "name": "windows-1251" - }, - { - "labels": [ - "ansi_x3.4-1968", - "ascii", - "cp1252", - "cp819", - "csisolatin1", - "ibm819", - "iso-8859-1", - "iso-ir-100", - "iso8859-1", - "iso88591", - "iso_8859-1", - "iso_8859-1:1987", - "l1", - "latin1", - "us-ascii", - "windows-1252", - "x-cp1252" - ], - "name": "windows-1252" - }, - { - "labels": [ - "cp1253", - "windows-1253", - "x-cp1253" - ], - "name": "windows-1253" - }, - { - "labels": [ - "cp1254", - "csisolatin5", - "iso-8859-9", - "iso-ir-148", - "iso8859-9", - "iso88599", - "iso_8859-9", - "iso_8859-9:1989", - "l5", - "latin5", - "windows-1254", - "x-cp1254" - ], - "name": "windows-1254" - }, - { - "labels": [ - "cp1255", - "windows-1255", - "x-cp1255" - ], - "name": "windows-1255" - }, - { - "labels": [ - "cp1256", - "windows-1256", - "x-cp1256" - ], - "name": "windows-1256" - }, - { - "labels": [ - "cp1257", - "windows-1257", - "x-cp1257" - ], - "name": "windows-1257" - }, - { - "labels": [ - "cp1258", - "windows-1258", - "x-cp1258" - ], - "name": "windows-1258" - }, - { - "labels": [ - "x-mac-cyrillic", - "x-mac-ukrainian" - ], - "name": "x-mac-cyrillic" - } - ], - "heading": "Legacy single-byte encodings" - }, - { - "encodings": [ - { - "labels": [ - "chinese", - "csgb2312", - "csiso58gb231280", - "gb2312", - "gb_2312", - "gb_2312-80", - "gbk", - "iso-ir-58", - "x-gbk" - ], - "name": "gbk" - }, - { - "labels": [ - "gb18030" - ], - "name": "gb18030" - } - ], - "heading": "Legacy multi-byte Chinese (simplified) encodings" - }, - { - "encodings": [ - { - "labels": [ - "big5", - "big5-hkscs", - "cn-big5", - "csbig5", - "x-x-big5" - ], - "name": "big5" - } - ], - "heading": "Legacy multi-byte Chinese (traditional) encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseucpkdfmtjapanese", - "euc-jp", - "x-euc-jp" - ], - "name": "euc-jp" - }, - { - "labels": [ - "csiso2022jp", - "iso-2022-jp" - ], - "name": "iso-2022-jp" - }, - { - "labels": [ - "csshiftjis", - "ms_kanji", - "shift-jis", - "shift_jis", - "sjis", - "windows-31j", - "x-sjis" - ], - "name": "shift_jis" - } - ], - "heading": "Legacy multi-byte Japanese encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseuckr", - "csksc56011987", - "euc-kr", - "iso-ir-149", - "korean", - "ks_c_5601-1987", - "ks_c_5601-1989", - "ksc5601", - "ksc_5601", - "windows-949" - ], - "name": "euc-kr" - } - ], - "heading": "Legacy multi-byte Korean encodings" - }, - { - "encodings": [ - { - "labels": [ - "csiso2022kr", - "hz-gb-2312", - "iso-2022-cn", - "iso-2022-cn-ext", - "iso-2022-kr" - ], - "name": "replacement" - }, - { - "labels": [ - "utf-16be" - ], - "name": "utf-16be" - }, - { - "labels": [ - "utf-16", - "utf-16le" - ], - "name": "utf-16le" - }, - { - "labels": [ - "x-user-defined" - ], - "name": "x-user-defined" - } - ], - "heading": "Legacy miscellaneous encodings" - } - ]; - - // Label to encoding registry. - /** @type {Object.}>} */ - var label_to_encoding = {}; - encodings.forEach(function(category) { - category.encodings.forEach(function(encoding) { - encoding.labels.forEach(function(label) { - label_to_encoding[label] = encoding; - }); - }); - }); - - // Registry of of encoder/decoder factories, by encoding name. - /** @type {Object.} */ - var encoders = {}; - /** @type {Object.} */ - var decoders = {}; - - // - // 5. Indexes - // - - /** - * @param {number} pointer The |pointer| to search for. - * @param {(!Array.|undefined)} index The |index| to search within. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in |index|. - */ - function indexCodePointFor(pointer, index) { - if (!index) return null; - return index[pointer] || null; - } - - /** - * @param {number} code_point The |code point| to search for. - * @param {!Array.} index The |index| to search within. - * @return {?number} The first pointer corresponding to |code point| in - * |index|, or null if |code point| is not in |index|. - */ - function indexPointerFor(code_point, index) { - var pointer = index.indexOf(code_point); - return pointer === -1 ? null : pointer; - } - - /** - * @param {string} name Name of the index. - * @return {(!Array.|!Array.>)} - * */ - function index(name) { - if (!('encoding-indexes' in global)) { - throw Error("Indexes missing." + - " Did you forget to include encoding-indexes.js?"); - } - return global['encoding-indexes'][name]; - } - - /** - * @param {number} pointer The |pointer| to search for in the gb18030 index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the gb18030 index. - */ - function indexGB18030RangesCodePointFor(pointer) { - // 1. If pointer is greater than 39419 and less than 189000, or - // pointer is greater than 1237575, return null. - if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) - return null; - - // 2. Let offset be the last pointer in index gb18030 ranges that - // is equal to or less than pointer and let code point offset be - // its corresponding code point. - var offset = 0; - var code_point_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[0] <= pointer) { - offset = entry[0]; - code_point_offset = entry[1]; - } else { - break; - } - } - - // 3. Return a code point whose value is code point offset + - // pointer − offset. - return code_point_offset + pointer - offset; - } - - /** - * @param {number} code_point The |code point| to locate in the gb18030 index. - * @return {number} The first pointer corresponding to |code point| in the - * gb18030 index. - */ - function indexGB18030RangesPointerFor(code_point) { - // 1. Let offset be the last code point in index gb18030 ranges - // that is equal to or less than code point and let pointer offset - // be its corresponding pointer. - var offset = 0; - var pointer_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[1] <= code_point) { - offset = entry[1]; - pointer_offset = entry[0]; - } else { - break; - } - } - - // 2. Return a pointer whose value is pointer offset + code point - // − offset. - return pointer_offset + code_point - offset; - } - - /** - * @param {number} code_point The |code_point| to search for in the shift_jis index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the shift_jis index. - */ - function indexShiftJISPointerFor(code_point) { - // 1. Let index be index jis0208 excluding all pointers in the - // range 8272 to 8835. - var pointer = indexPointerFor(code_point, index('jis0208')); - if (pointer === null || inRange(pointer, 8272, 8835)) - return null; - - // 2. Return the index pointer for code point in index. - return pointer; - } - - // - // 7. API - // - - /** @const */ var DEFAULT_ENCODING = 'utf-8'; - - // 7.1 Interface TextDecoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextDecoder(encoding, options) { - if (!(this instanceof TextDecoder)) { - return new TextDecoder(encoding, options); - } - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - if (!decoders[this._encoding.name]) { - throw Error('Decoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {boolean} */ - this._BOMseen = false; - /** @private @type {?Decoder} */ - this._decoder = null; - /** @private @type {boolean} */ - this._fatal = Boolean(options['fatal']); - /** @private @type {boolean} */ - this._ignoreBOM = Boolean(options['ignoreBOM']); - - if (Object.defineProperty) { - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - Object.defineProperty(this, 'fatal', {value: this._fatal}); - Object.defineProperty(this, 'ignoreBOM', {value: this._ignoreBOM}); - } else { - this.encoding = this._encoding.name; - this.fatal = this._fatal; - this.ignoreBOM = this._ignoreBOM; - } - - return this; - } - - TextDecoder.prototype = { - /** - * @param {ArrayBufferView=} input The buffer of bytes to decode. - * @param {Object=} options - * @return {string} The decoded string. - */ - decode: function decode(input, options) { - var bytes; - if (typeof input === 'object' && input instanceof ArrayBuffer) { - bytes = new Uint8Array(input); - } else if (typeof input === 'object' && 'buffer' in input && - input.buffer instanceof ArrayBuffer) { - bytes = new Uint8Array(input.buffer, - input.byteOffset, - input.byteLength); - } else { - bytes = new Uint8Array(0); - } - - options = ToDictionary(options); - - if (!this._streaming) { - this._decoder = decoders[this._encoding.name]({fatal: this._fatal}); - this._BOMseen = false; - } - this._streaming = Boolean(options['stream']); - - var input_stream = new Stream(bytes); - - var code_points = []; - - /** @type {?(number|!Array.)} */ - var result; - - while (!input_stream.endOfStream()) { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } - if (!this._streaming) { - do { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } while (!input_stream.endOfStream()); - this._decoder = null; - } - - if (code_points.length) { - // If encoding is one of utf-8, utf-16be, and utf-16le, and - // ignore BOM flag and BOM seen flag are unset, run these - // subsubsteps: - if (['utf-8', 'utf-16le', 'utf-16be'].indexOf(this.encoding) !== -1 && - !this._ignoreBOM && !this._BOMseen) { - // If token is U+FEFF, set BOM seen flag. - if (code_points[0] === 0xFEFF) { - this._BOMseen = true; - code_points.shift(); - } else { - // Otherwise, if token is not end-of-stream, set BOM seen - // flag and append token to output. - this._BOMseen = true; - } - } - } - - return codePointsToString(code_points); - } - }; - - // 7.2 Interface TextEncoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextEncoder(encoding, options) { - if (!(this instanceof TextEncoder)) - return new TextEncoder(encoding, options); - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - var allowLegacyEncoding = - Boolean(options['NONSTANDARD_allowLegacyEncoding']); - var isLegacyEncoding = (this._encoding.name !== 'utf-8' && - this._encoding.name !== 'utf-16le' && - this._encoding.name !== 'utf-16be'); - if (this._encoding === null || (isLegacyEncoding && !allowLegacyEncoding)) - throw RangeError('Unknown encoding: ' + encoding); - - if (!encoders[this._encoding.name]) { - throw Error('Encoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {?Encoder} */ - this._encoder = null; - /** @private @type {{fatal: boolean}} */ - this._options = {fatal: Boolean(options['fatal'])}; - - if (Object.defineProperty) - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - else - this.encoding = this._encoding.name; - - return this; - } - - TextEncoder.prototype = { - /** - * @param {string=} opt_string The string to encode. - * @param {Object=} options - * @return {Uint8Array} Encoded bytes, as a Uint8Array. - */ - encode: function encode(opt_string, options) { - opt_string = opt_string ? String(opt_string) : ''; - options = ToDictionary(options); - - // NOTE: This option is nonstandard. None of the encodings - // permitted for encoding (i.e. UTF-8, UTF-16) are stateful, - // so streaming is not necessary. - if (!this._streaming) - this._encoder = encoders[this._encoding.name](this._options); - this._streaming = Boolean(options['stream']); - - var bytes = []; - var input_stream = new Stream(stringToCodePoints(opt_string)); - /** @type {?(number|!Array.)} */ - var result; - while (!input_stream.endOfStream()) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - if (!this._streaming) { - while (true) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - this._encoder = null; - } - return new Uint8Array(bytes); - } - }; - - - // - // 8. The encoding - // - - // 8.1 utf-8 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function UTF8Decoder(options) { - var fatal = options.fatal; - - // utf-8's decoder's has an associated utf-8 code point, utf-8 - // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 - // lower boundary (initially 0x80), and a utf-8 upper boundary - // (initially 0xBF). - var /** @type {number} */ utf8_code_point = 0, - /** @type {number} */ utf8_bytes_seen = 0, - /** @type {number} */ utf8_bytes_needed = 0, - /** @type {number} */ utf8_lower_boundary = 0x80, - /** @type {number} */ utf8_upper_boundary = 0xBF; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, - // set utf-8 bytes needed to 0 and return error. - if (bite === end_of_stream && utf8_bytes_needed !== 0) { - utf8_bytes_needed = 0; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 3. If utf-8 bytes needed is 0, based on byte: - if (utf8_bytes_needed === 0) { - - // 0x00 to 0x7F - if (inRange(bite, 0x00, 0x7F)) { - // Return a code point whose value is byte. - return bite; - } - - // 0xC2 to 0xDF - if (inRange(bite, 0xC2, 0xDF)) { - // Set utf-8 bytes needed to 1 and utf-8 code point to byte - // − 0xC0. - utf8_bytes_needed = 1; - utf8_code_point = bite - 0xC0; - } - - // 0xE0 to 0xEF - else if (inRange(bite, 0xE0, 0xEF)) { - // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. - if (bite === 0xE0) - utf8_lower_boundary = 0xA0; - // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. - if (bite === 0xED) - utf8_upper_boundary = 0x9F; - // 3. Set utf-8 bytes needed to 2 and utf-8 code point to - // byte − 0xE0. - utf8_bytes_needed = 2; - utf8_code_point = bite - 0xE0; - } - - // 0xF0 to 0xF4 - else if (inRange(bite, 0xF0, 0xF4)) { - // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. - if (bite === 0xF0) - utf8_lower_boundary = 0x90; - // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. - if (bite === 0xF4) - utf8_upper_boundary = 0x8F; - // 3. Set utf-8 bytes needed to 3 and utf-8 code point to - // byte − 0xF0. - utf8_bytes_needed = 3; - utf8_code_point = bite - 0xF0; - } - - // Otherwise - else { - // Return error. - return decoderError(fatal); - } - - // Then (byte is in the range 0xC2 to 0xF4) set utf-8 code - // point to utf-8 code point << (6 × utf-8 bytes needed) and - // return continue. - utf8_code_point = utf8_code_point << (6 * utf8_bytes_needed); - return null; - } - - // 4. If byte is not in the range utf-8 lower boundary to utf-8 - // upper boundary, run these substeps: - if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { - - // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 - // bytes seen to 0, set utf-8 lower boundary to 0x80, and set - // utf-8 upper boundary to 0xBF. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Return error. - return decoderError(fatal); - } - - // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary - // to 0xBF. - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 6. Increase utf-8 bytes seen by one and set utf-8 code point - // to utf-8 code point + (byte − 0x80) << (6 × (utf-8 bytes - // needed − utf-8 bytes seen)). - utf8_bytes_seen += 1; - utf8_code_point += (bite - 0x80) << (6 * (utf8_bytes_needed - utf8_bytes_seen)); - - // 7. If utf-8 bytes seen is not equal to utf-8 bytes needed, - // continue. - if (utf8_bytes_seen !== utf8_bytes_needed) - return null; - - // 8. Let code point be utf-8 code point. - var code_point = utf8_code_point; - - // 9. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes - // seen to 0. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - - // 10. Return a code point whose value is code point. - return code_point; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function UTF8Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007f)) - return code_point; - - // 3. Set count and offset based on the range code point is in: - var count, offset; - // U+0080 to U+07FF: 1 and 0xC0 - if (inRange(code_point, 0x0080, 0x07FF)) { - count = 1; - offset = 0xC0; - } - // U+0800 to U+FFFF: 2 and 0xE0 - else if (inRange(code_point, 0x0800, 0xFFFF)) { - count = 2; - offset = 0xE0; - } - // U+10000 to U+10FFFF: 3 and 0xF0 - else if (inRange(code_point, 0x10000, 0x10FFFF)) { - count = 3; - offset = 0xF0; - } - - // 4.Let bytes be a byte sequence whose first byte is (code - // point >> (6 × count)) + offset. - var bytes = [(code_point >> (6 * count)) + offset]; - - // 5. Run these substeps while count is greater than 0: - while (count > 0) { - - // 1. Set temp to code point >> (6 × (count − 1)). - var temp = code_point >> (6 * (count - 1)); - - // 2. Append to bytes 0x80 | (temp & 0x3F). - bytes.push(0x80 | (temp & 0x3F)); - - // 3. Decrease count by one. - count -= 1; - } - - // 6. Return bytes bytes, in order. - return bytes; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['utf-8'] = function(options) { - return new UTF8Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-8'] = function(options) { - return new UTF8Decoder(options); - }; - - // - // 9. Legacy single-byte encodings - // - - // 9.1 single-byte decoder - /** - * @constructor - * @implements {Decoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteDecoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Let code point be the index code point for byte − 0x80 in - // index single-byte. - var code_point = index[bite - 0x80]; - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - }; - } - - // 9.2 single-byte encoder - /** - * @constructor - * @implements {Encoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteEncoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // single-byte. - var pointer = indexPointerFor(code_point, index); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - encoderError(code_point); - - // 5. Return a byte whose value is pointer + 0x80. - return pointer + 0x80; - }; - } - - (function() { - if (!('encoding-indexes' in global)) - return; - encodings.forEach(function(category) { - if (category.heading !== 'Legacy single-byte encodings') - return; - category.encodings.forEach(function(encoding) { - var name = encoding.name; - var idx = index(name); - /** @param {{fatal: boolean}} options */ - decoders[name] = function(options) { - return new SingleByteDecoder(idx, options); - }; - /** @param {{fatal: boolean}} options */ - encoders[name] = function(options) { - return new SingleByteEncoder(idx, options); - }; - }); - }); - }()); - - // - // 10. Legacy multi-byte Chinese (simplified) encodings - // - - // 10.1 gbk - - // 10.1.1 gbk decoder - // gbk's decoder is gb18030's decoder. - /** @param {{fatal: boolean}} options */ - decoders['gbk'] = function(options) { - return new GB18030Decoder(options); - }; - - // 10.1.2 gbk encoder - // gbk's encoder is gb18030's encoder with its gbk flag set. - /** @param {{fatal: boolean}} options */ - encoders['gbk'] = function(options) { - return new GB18030Encoder(options, true); - }; - - // 10.2 gb18030 - - // 10.2.1 gb18030 decoder - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function GB18030Decoder(options) { - var fatal = options.fatal; - // gb18030's decoder has an associated gb18030 first, gb18030 - // second, and gb18030 third (all initially 0x00). - var /** @type {number} */ gb18030_first = 0x00, - /** @type {number} */ gb18030_second = 0x00, - /** @type {number} */ gb18030_third = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and gb18030 first, gb18030 - // second, and gb18030 third are 0x00, return finished. - if (bite === end_of_stream && gb18030_first === 0x00 && - gb18030_second === 0x00 && gb18030_third === 0x00) { - return finished; - } - // 2. If byte is end-of-stream, and gb18030 first, gb18030 - // second, or gb18030 third is not 0x00, set gb18030 first, - // gb18030 second, and gb18030 third to 0x00, and return error. - if (bite === end_of_stream && - (gb18030_first !== 0x00 || gb18030_second !== 0x00 || gb18030_third !== 0x00)) { - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - decoderError(fatal); - } - var code_point; - // 3. If gb18030 third is not 0x00, run these substeps: - if (gb18030_third !== 0x00) { - // 1. Let code point be null. - code_point = null; - // 2. If byte is in the range 0x30 to 0x39, set code point to - // the index gb18030 ranges code point for (((gb18030 first − - // 0x81) × 10 + gb18030 second − 0x30) × 126 + gb18030 third − - // 0x81) × 10 + byte − 0x30. - if (inRange(bite, 0x30, 0x39)) { - code_point = indexGB18030RangesCodePointFor( - (((gb18030_first - 0x81) * 10 + (gb18030_second - 0x30)) * 126 + - (gb18030_third - 0x81)) * 10 + bite - 0x30); - } - - // 3. Let buffer be a byte sequence consisting of gb18030 - // second, gb18030 third, and byte, in order. - var buffer = [gb18030_second, gb18030_third, bite]; - - // 4. Set gb18030 first, gb18030 second, and gb18030 third to - // 0x00. - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - - // 5. If code point is null, prepend buffer to stream and - // return error. - if (code_point === null) { - stream.prepend(buffer); - return decoderError(fatal); - } - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 4. If gb18030 second is not 0x00, run these substeps: - if (gb18030_second !== 0x00) { - - // 1. If byte is in the range 0x81 to 0xFE, set gb18030 third - // to byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_third = bite; - return null; - } - - // 2. Prepend gb18030 second followed by byte to stream, set - // gb18030 first and gb18030 second to 0x00, and return error. - stream.prepend([gb18030_second, bite]); - gb18030_first = 0x00; - gb18030_second = 0x00; - return decoderError(fatal); - } - - // 5. If gb18030 first is not 0x00, run these substeps: - if (gb18030_first !== 0x00) { - - // 1. If byte is in the range 0x30 to 0x39, set gb18030 second - // to byte and return continue. - if (inRange(bite, 0x30, 0x39)) { - gb18030_second = bite; - return null; - } - - // 2. Let lead be gb18030 first, let pointer be null, and set - // gb18030 first to 0x00. - var lead = gb18030_first; - var pointer = null; - gb18030_first = 0x00; - - // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x41; - - // 4. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFE, - // set pointer to (lead − 0x81) × 190 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - offset); - - // 5. Let code point be null if pointer is null and the index - // code point for pointer in index gb18030 otherwise. - code_point = pointer === null ? null : - indexCodePointFor(pointer, index('gb18030')); - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x80, return code point U+20AC. - if (bite === 0x80) - return 0x20AC; - - // 8. If byte is in the range 0x81 to 0xFE, set gb18030 first to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_first = bite; - return null; - } - - // 9. Return error. - return decoderError(fatal); - }; - } - - // 10.2.2 gb18030 encoder - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - * @param {boolean=} gbk_flag - */ - function GB18030Encoder(options, gbk_flag) { - var fatal = options.fatal; - // gb18030's decoder has an associated gbk flag (initially unset). - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) { - return code_point; - } - - // 3. If the gbk flag is set and code point is U+20AC, return - // byte 0x80. - if (gbk_flag && code_point === 0x20AC) - return 0x80; - - // 4. Let pointer be the index pointer for code point in index - // gb18030. - var pointer = indexPointerFor(code_point, index('gb18030')); - - // 5. If pointer is not null, run these substeps: - if (pointer !== null) { - - // 1. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 2. Let trail be pointer % 190. - var trail = pointer % 190; - - // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. - var offset = trail < 0x3F ? 0x40 : 0x41; - - // 4. Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - } - - // 6. If gbk flag is set, return error with code point. - if (gbk_flag) - return encoderError(code_point); - - // 7. Set pointer to the index gb18030 ranges pointer for code - // point. - pointer = indexGB18030RangesPointerFor(code_point); - - // 8. Let byte1 be pointer / 10 / 126 / 10. - var byte1 = div(div(div(pointer, 10), 126), 10); - - // 9. Set pointer to pointer − byte1 × 10 × 126 × 10. - pointer = pointer - byte1 * 10 * 126 * 10; - - // 10. Let byte2 be pointer / 10 / 126. - var byte2 = div(div(pointer, 10), 126); - - // 11. Set pointer to pointer − byte2 × 10 × 126. - pointer = pointer - byte2 * 10 * 126; - - // 12. Let byte3 be pointer / 10. - var byte3 = div(pointer, 10); - - // 13. Let byte4 be pointer − byte3 × 10. - var byte4 = pointer - byte3 * 10; - - // 14. Return four bytes whose values are byte1 + 0x81, byte2 + - // 0x30, byte3 + 0x81, byte4 + 0x30. - return [byte1 + 0x81, - byte2 + 0x30, - byte3 + 0x81, - byte4 + 0x30]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['gb18030'] = function(options) { - return new GB18030Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['gb18030'] = function(options) { - return new GB18030Decoder(options); - }; - - - // - // 11. Legacy multi-byte Chinese (traditional) encodings - // - - // 11.1 big5 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function Big5Decoder(options) { - var fatal = options.fatal; - // big5's decoder has an associated big5 lead (initially 0x00). - var /** @type {number} */ big5_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and big5 lead is not 0x00, set - // big5 lead to 0x00 and return error. - if (bite === end_of_stream && big5_lead !== 0x00) { - big5_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and big5 lead is 0x00, return - // finished. - if (bite === end_of_stream && big5_lead === 0x00) - return finished; - - // 3. If big5 lead is not 0x00, let lead be big5 lead, let - // pointer be null, set big5 lead to 0x00, and then run these - // substeps: - if (big5_lead !== 0x00) { - var lead = big5_lead; - var pointer = null; - big5_lead = 0x00; - - // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x62; - - // 2. If byte is in the range 0x40 to 0x7E or 0xA1 to 0xFE, - // set pointer to (lead − 0x81) × 157 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) - pointer = (lead - 0x81) * 157 + (bite - offset); - - // 3. If there is a row in the table below whose first column - // is pointer, return the two code points listed in its second - // column - // Pointer | Code points - // --------+-------------- - // 1133 | U+00CA U+0304 - // 1135 | U+00CA U+030C - // 1164 | U+00EA U+0304 - // 1166 | U+00EA U+030C - switch (pointer) { - case 1133: return [0x00CA, 0x0304]; - case 1135: return [0x00CA, 0x030C]; - case 1164: return [0x00EA, 0x0304]; - case 1166: return [0x00EA, 0x030C]; - } - - // 4. Let code point be null if pointer is null and the index - // code point for pointer in index big5 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('big5')); - - // 5. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 6. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 7. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set big5 lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - big5_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function Big5Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // big5. - var pointer = indexPointerFor(code_point, index('big5')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 157 + 0x81. - var lead = div(pointer, 157) + 0x81; - - // 6. If lead is less than 0xA1, return error with code point. - if (lead < 0xA1) - return encoderError(code_point); - - // 7. Let trail be pointer % 157. - var trail = pointer % 157; - - // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 - // otherwise. - var offset = trail < 0x3F ? 0x40 : 0x62; - - // Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['big5'] = function(options) { - return new Big5Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['big5'] = function(options) { - return new Big5Decoder(options); - }; - - - // - // 12. Legacy multi-byte Japanese encodings - // - - // 12.1 euc-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCJPDecoder(options) { - var fatal = options.fatal; - - // euc-jp's decoder has an associated euc-jp jis0212 flag - // (initially unset) and euc-jp lead (initially 0x00). - var /** @type {boolean} */ eucjp_jis0212_flag = false, - /** @type {number} */ eucjp_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set - // euc-jp lead to 0x00, and return error. - if (bite === end_of_stream && eucjp_lead !== 0x00) { - eucjp_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-jp lead is 0x00, return - // finished. - if (bite === end_of_stream && eucjp_lead === 0x00) - return finished; - - // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to - // 0xDF, set euc-jp lead to 0x00 and return a code point whose - // value is 0xFF61 + byte − 0xA1. - if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { - eucjp_lead = 0x00; - return 0xFF61 + bite - 0xA1; - } - - // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to - // 0xFE, set the euc-jp jis0212 flag, set euc-jp lead to byte, - // and return continue. - if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { - eucjp_jis0212_flag = true; - eucjp_lead = bite; - return null; - } - - // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set - // euc-jp lead to 0x00, and run these substeps: - if (eucjp_lead !== 0x00) { - var lead = eucjp_lead; - eucjp_lead = 0x00; - - // 1. Let code point be null. - var code_point = null; - - // 2. If lead and byte are both in the range 0xA1 to 0xFE, set - // code point to the index code point for (lead − 0xA1) × 94 + - // byte − 0xA1 in index jis0208 if the euc-jp jis0212 flag is - // unset and in index jis0212 otherwise. - if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { - code_point = indexCodePointFor( - (lead - 0xA1) * 94 + (bite - 0xA1), - index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); - } - - // 3. Unset the euc-jp jis0212 flag. - eucjp_jis0212_flag = false; - - // 4. If byte is not in the range 0xA1 to 0xFE, prepend byte - // to stream. - if (!inRange(bite, 0xA1, 0xFE)) - stream.prepend(bite); - - // 5. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, set - // euc-jp lead to byte and return continue. - if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { - eucjp_lead = bite; - return null; - } - - // 8. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCJPEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return two - // bytes whose values are 0x8E and code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return [0x8E, code_point - 0xFF61 + 0xA1]; - - // 6. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 94 + 0xA1. - var lead = div(pointer, 94) + 0xA1; - - // 9. Let trail be pointer % 94 + 0xA1. - var trail = pointer % 94 + 0xA1; - - // 10. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-jp'] = function(options) { - return new EUCJPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-jp'] = function(options) { - return new EUCJPDecoder(options); - }; - - // 12.2 iso-2022-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPDecoder(options) { - var fatal = options.fatal; - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - Katakana: 2, - LeadByte: 3, - TrailByte: 4, - EscapeStart: 5, - Escape: 6 - }; - // iso-2022-jp's decoder has an associated iso-2022-jp decoder - // state (initially ASCII), iso-2022-jp decoder output state - // (initially ASCII), iso-2022-jp lead (initially 0x00), and - // iso-2022-jp output flag (initially unset). - var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, - /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, - /** @type {number} */ iso2022jp_lead = 0x00, - /** @type {boolean} */ iso2022jp_output_flag = false; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // switching on iso-2022-jp decoder state: - switch (iso2022jp_decoder_state) { - default: - case states.ASCII: - // ASCII - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E - && bite !== 0x0F && bite !== 0x1B) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Roman: - // Roman - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x5C - if (bite === 0x5C) { - // Unset the iso-2022-jp output flag and return code point - // U+00A5. - iso2022jp_output_flag = false; - return 0x00A5; - } - - // 0x7E - if (bite === 0x7E) { - // Unset the iso-2022-jp output flag and return code point - // U+203E. - iso2022jp_output_flag = false; - return 0x203E; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F - && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Katakana: - // Katakana - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x5F - if (inRange(bite, 0x21, 0x5F)) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is 0xFF61 + byte − 0x21. - iso2022jp_output_flag = false; - return 0xFF61 + bite - 0x21; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.LeadByte: - // Lead byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // Unset the iso-2022-jp output flag, set iso-2022-jp lead - // to byte, iso-2022-jp decoder state to trail byte, and - // return continue. - iso2022jp_output_flag = false; - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.TrailByte; - return null; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.TrailByte: - // Trail byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return decoderError(fatal); - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // 1. Set the iso-2022-jp decoder state to lead byte. - iso2022jp_decoder_state = states.LeadByte; - - // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. - var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; - - // 3. Let code point be the index code point for pointer in index jis0208. - var code_point = indexCodePointFor(pointer, index('jis0208')); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // end-of-stream - if (bite === end_of_stream) { - // Set the iso-2022-jp decoder state to lead byte, prepend - // byte to stream, and return error. - iso2022jp_decoder_state = states.LeadByte; - stream.prepend(bite); - return decoderError(fatal); - } - - // Otherwise - // Set iso-2022-jp decoder state to lead byte and return - // error. - iso2022jp_decoder_state = states.LeadByte; - return decoderError(fatal); - - case states.EscapeStart: - // Escape start - - // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to - // byte, iso-2022-jp decoder state to escape, and return - // continue. - if (bite === 0x24 || bite === 0x28) { - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.Escape; - return null; - } - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state, and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - - case states.Escape: - // Escape - - // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to - // 0x00. - var lead = iso2022jp_lead; - iso2022jp_lead = 0x00; - - // 2. Let state be null. - var state = null; - - // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. - if (lead === 0x28 && bite === 0x42) - state = states.ASCII; - - // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. - if (lead === 0x28 && bite === 0x4A) - state = states.Roman; - - // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. - if (lead === 0x28 && bite === 0x49) - state = states.Katakana; - - // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set - // state to lead byte. - if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) - state = states.LeadByte; - - // 7. If state is non-null, run these substeps: - if (state !== null) { - // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder - // output state to states. - iso2022jp_decoder_state = iso2022jp_decoder_state = state; - - // 2. Let output flag be the iso-2022-jp output flag. - var output_flag = iso2022jp_output_flag; - - // 3. Set the iso-2022-jp output flag. - iso2022jp_output_flag = true; - - // 4. Return continue, if output flag is unset, and error - // otherwise. - return !output_flag ? null : decoderError(fatal); - } - - // 8. Prepend lead and byte to stream. - stream.prepend([lead, bite]); - - // 9. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - } - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPEncoder(options) { - var fatal = options.fatal; - // iso-2022-jp's encoder has an associated iso-2022-jp encoder - // state which is one of ASCII, Roman, and jis0208 (initially - // ASCII). - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - jis0208: 2 - }; - var /** @type {number} */ iso2022jp_state = states.ASCII; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream and iso-2022-jp encoder - // state is not ASCII, prepend code point to stream, set - // iso-2022-jp encoder state to ASCII, and return three bytes - // 0x1B 0x28 0x42. - if (code_point === end_of_stream && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - return [0x1B, 0x28, 0x42]; - } - - // 2. If code point is end-of-stream and iso-2022-jp encoder - // state is ASCII, return finished. - if (code_point === end_of_stream && iso2022jp_state === states.ASCII) - return finished; - - // 3. If iso-2022-jp encoder state is ASCII and code point is in - // the range U+0000 to U+007F, return a byte whose value is code - // point. - if (iso2022jp_state === states.ASCII && - inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 4. If iso-2022-jp encoder state is Roman and code point is in - // the range U+0000 to U+007F, excluding U+005C and U+007E, or - // is U+00A5 or U+203E, run these substeps: - if (iso2022jp_state === states.Roman && - inRange(code_point, 0x0000, 0x007F) && - code_point !== 0x005C && code_point !== 0x007E) { - - // 1. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 2. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 3. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - } - - // 5. If code point is in the range U+0000 to U+007F, and - // iso-2022-jp encoder state is not ASCII, prepend code point to - // stream, set iso-2022-jp encoder state to ASCII, and return - // three bytes 0x1B 0x28 0x42. - if (inRange(code_point, 0x0000, 0x007F) && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - iso2022jp_state = states.ASCII; - return [0x1B, 0x28, 0x42]; - } - - // 6. If code point is either U+00A5 or U+203E, and iso-2022-jp - // encoder state is not Roman, prepend code point to stream, set - // iso-2022-jp encoder state to Roman, and return three bytes - // 0x1B 0x28 0x4A. - if ((code_point === 0x00A5 || code_point === 0x203E) && - iso2022jp_state !== states.Roman) { - stream.prepend(code_point); - iso2022jp_state = states.Roman; - return [0x1B, 0x28, 0x4A]; - } - - // 7. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 8. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 9. If iso-2022-jp encoder state is not jis0208, prepend code - // point to stream, set iso-2022-jp encoder state to jis0208, - // and return three bytes 0x1B 0x24 0x42. - if (iso2022jp_state !== states.jis0208) { - stream.prepend(code_point); - iso2022jp_state = states.jis0208; - return [0x1B, 0x24, 0x42]; - } - - // 10. Let lead be pointer / 94 + 0x21. - var lead = div(pointer, 94) + 0x21; - - // 11. Let trail be pointer % 94 + 0x21. - var trail = pointer % 94 + 0x21; - - // 12. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['iso-2022-jp'] = function(options) { - return new ISO2022JPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['iso-2022-jp'] = function(options) { - return new ISO2022JPDecoder(options); - }; - - // 12.3 shift_jis - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISDecoder(options) { - var fatal = options.fatal; - // shift_jis's decoder has an associated shift_jis lead (initially - // 0x00). - var /** @type {number} */ shiftjis_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and shift_jis lead is not 0x00, - // set shift_jis lead to 0x00 and return error. - if (bite === end_of_stream && shiftjis_lead !== 0x00) { - shiftjis_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and shift_jis lead is 0x00, - // return finished. - if (bite === end_of_stream && shiftjis_lead === 0x00) - return finished; - - // 3. If shift_jis lead is not 0x00, let lead be shift_jis lead, - // let pointer be null, set shift_jis lead to 0x00, and then run - // these substeps: - if (shiftjis_lead !== 0x00) { - var lead = shiftjis_lead; - var pointer = null; - shiftjis_lead = 0x00; - - // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 - // otherwise. - var offset = (bite < 0x7F) ? 0x40 : 0x41; - - // 2. Let lead offset be 0x81, if lead is less than 0xA0, and - // 0xC1 otherwise. - var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; - - // 3. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFC, - // set pointer to (lead − lead offset) × 188 + byte − offset. - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) - pointer = (lead - lead_offset) * 188 + bite - offset; - - // 4. Let code point be null, if pointer is null, and the - // index code point for pointer in index jis0208 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('jis0208')); - - // 5. If code point is null and pointer is in the range 8836 - // to 10528, return a code point whose value is 0xE000 + - // pointer − 8836. - if (code_point === null && pointer !== null && - inRange(pointer, 8836, 10528)) - return 0xE000 + pointer - 8836; - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x80, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x80)) - return bite; - - // 5. If byte is in the range 0xA1 to 0xDF, return a code point - // whose value is 0xFF61 + byte − 0xA1. - if (inRange(bite, 0xA1, 0xDF)) - return 0xFF61 + bite - 0xA1; - - // 6. If byte is in the range 0x81 to 0x9F or 0xE0 to 0xFC, set - // shift_jis lead to byte and return continue. - if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { - shiftjis_lead = bite; - return null; - } - - // 7. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+0080, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x0080)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return a - // byte whose value is code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return code_point - 0xFF61 + 0xA1; - - // 6. Let pointer be the index shift_jis pointer for code point. - var pointer = indexShiftJISPointerFor(code_point); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 188. - var lead = div(pointer, 188); - - // 9. Let lead offset be 0x81, if lead is less than 0x1F, and - // 0xC1 otherwise. - var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; - - // 10. Let trail be pointer % 188. - var trail = pointer % 188; - - // 11. Let offset be 0x40, if trail is less than 0x3F, and 0x41 - // otherwise. - var offset = (trail < 0x3F) ? 0x40 : 0x41; - - // 12. Return two bytes whose values are lead + lead offset and - // trail + offset. - return [lead + lead_offset, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['shift_jis'] = function(options) { - return new ShiftJISEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['shift_jis'] = function(options) { - return new ShiftJISDecoder(options); - }; - - // - // 13. Legacy multi-byte Korean encodings - // - - // 13.1 euc-kr - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCKRDecoder(options) { - var fatal = options.fatal; - - // euc-kr's decoder has an associated euc-kr lead (initially 0x00). - var /** @type {number} */ euckr_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set - // euc-kr lead to 0x00 and return error. - if (bite === end_of_stream && euckr_lead !== 0) { - euckr_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-kr lead is 0x00, return - // finished. - if (bite === end_of_stream && euckr_lead === 0) - return finished; - - // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let - // pointer be null, set euc-kr lead to 0x00, and then run these - // substeps: - if (euckr_lead !== 0x00) { - var lead = euckr_lead; - var pointer = null; - euckr_lead = 0x00; - - // 1. If byte is in the range 0x41 to 0xFE, set pointer to - // (lead − 0x81) × 190 + (byte − 0x41). - if (inRange(bite, 0x41, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - 0x41); - - // 2. Let code point be null, if pointer is null, and the - // index code point for pointer in index euc-kr otherwise. - var code_point = (pointer === null) ? null : indexCodePointFor(pointer, index('euc-kr')); - - // 3. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null && inRange(bite, 0x00, 0x7F)) - stream.prepend(bite); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set euc-kr lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - euckr_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCKREncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // euc-kr. - var pointer = indexPointerFor(code_point, index('euc-kr')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 6. Let trail be pointer % 190 + 0x41. - var trail = (pointer % 190) + 0x41; - - // 7. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-kr'] = function(options) { - return new EUCKREncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-kr'] = function(options) { - return new EUCKRDecoder(options); - }; - - - // - // 14. Legacy miscellaneous encodings - // - - // 14.1 replacement - - // Not needed - API throws RangeError - - // 14.2 utf-16 - - /** - * @param {number} code_unit - * @param {boolean} utf16be - * @return {!Array.} bytes - */ - function convertCodeUnitToBytes(code_unit, utf16be) { - // 1. Let byte1 be code unit >> 8. - var byte1 = code_unit >> 8; - - // 2. Let byte2 be code unit & 0x00FF. - var byte2 = code_unit & 0x00FF; - - // 3. Then return the bytes in order: - // utf-16be flag is set: byte1, then byte2. - if (utf16be) - return [byte1, byte2]; - // utf-16be flag is unset: byte2, then byte1. - return [byte2, byte1]; - } - - /** - * @constructor - * @implements {Decoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Decoder(utf16_be, options) { - var fatal = options.fatal; - var /** @type {?number} */ utf16_lead_byte = null, - /** @type {?number} */ utf16_lead_surrogate = null; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and either utf-16 lead byte or - // utf-16 lead surrogate is not null, set utf-16 lead byte and - // utf-16 lead surrogate to null, and return error. - if (bite === end_of_stream && (utf16_lead_byte !== null || - utf16_lead_surrogate !== null)) { - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 - // lead surrogate are null, return finished. - if (bite === end_of_stream && utf16_lead_byte === null && - utf16_lead_surrogate === null) { - return finished; - } - - // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte - // and return continue. - if (utf16_lead_byte === null) { - utf16_lead_byte = bite; - return null; - } - - // 4. Let code unit be the result of: - var code_unit; - if (utf16_be) { - // utf-16be decoder flag is set - // (utf-16 lead byte << 8) + byte. - code_unit = (utf16_lead_byte << 8) + bite; - } else { - // utf-16be decoder flag is unset - // (byte << 8) + utf-16 lead byte. - code_unit = (bite << 8) + utf16_lead_byte; - } - // Then set utf-16 lead byte to null. - utf16_lead_byte = null; - - // 5. If utf-16 lead surrogate is not null, let lead surrogate - // be utf-16 lead surrogate, set utf-16 lead surrogate to null, - // and then run these substeps: - if (utf16_lead_surrogate !== null) { - var lead_surrogate = utf16_lead_surrogate; - utf16_lead_surrogate = null; - - // 1. If code unit is in the range U+DC00 to U+DFFF, return a - // code point whose value is 0x10000 + ((lead surrogate − - // 0xD800) << 10) + (code unit − 0xDC00). - if (inRange(code_unit, 0xDC00, 0xDFFF)) { - return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + - (code_unit - 0xDC00); - } - - // 2. Prepend the sequence resulting of converting code unit - // to bytes using utf-16be decoder flag to stream and return - // error. - stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); - return decoderError(fatal); - } - - // 6. If code unit is in the range U+D800 to U+DBFF, set utf-16 - // lead surrogate to code unit and return continue. - if (inRange(code_unit, 0xD800, 0xDBFF)) { - utf16_lead_surrogate = code_unit; - return null; - } - - // 7. If code unit is in the range U+DC00 to U+DFFF, return - // error. - if (inRange(code_unit, 0xDC00, 0xDFFF)) - return decoderError(fatal); - - // 8. Return code point code unit. - return code_unit; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Encoder(utf16_be, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+FFFF, return the - // sequence resulting of converting code point to bytes using - // utf-16be encoder flag. - if (inRange(code_point, 0x0000, 0xFFFF)) - return convertCodeUnitToBytes(code_point, utf16_be); - - // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, - // converted to bytes using utf-16be encoder flag. - var lead = convertCodeUnitToBytes( - ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); - - // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, - // converted to bytes using utf-16be encoder flag. - var trail = convertCodeUnitToBytes( - ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); - - // 5. Return a byte sequence of lead followed by trail. - return lead.concat(trail); - }; - } - - // 14.3 utf-16be - /** @param {{fatal: boolean}} options */ - encoders['utf-16be'] = function(options) { - return new UTF16Encoder(true, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16be'] = function(options) { - return new UTF16Decoder(true, options); - }; - - // 14.4 utf-16le - /** @param {{fatal: boolean}} options */ - encoders['utf-16le'] = function(options) { - return new UTF16Encoder(false, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16le'] = function(options) { - return new UTF16Decoder(false, options); - }; - - // 14.5 x-user-defined - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedDecoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Return a code point whose value is 0xF780 + byte − 0x80. - return 0xF780 + bite - 0x80; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1.If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is in the range U+F780 to U+F7FF, return a - // byte whose value is code point − 0xF780 + 0x80. - if (inRange(code_point, 0xF780, 0xF7FF)) - return code_point - 0xF780 + 0x80; - - // 4. Return error with code point. - return encoderError(code_point); - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['x-user-defined'] = function(options) { - return new XUserDefinedEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['x-user-defined'] = function(options) { - return new XUserDefinedDecoder(options); - }; - - if (!('TextEncoder' in global)) - global['TextEncoder'] = TextEncoder; - if (!('TextDecoder' in global)) - global['TextDecoder'] = TextDecoder; -}(this)); - -},{"./encoding-indexes.js":44}]},{},[1])(1) -}); -}()); diff --git a/build/node_modules/sinon/pkg/sinon-esm.js b/build/node_modules/sinon/pkg/sinon-esm.js new file mode 100644 index 00000000..12fe622c --- /dev/null +++ b/build/node_modules/sinon/pkg/sinon-esm.js @@ -0,0 +1,17531 @@ +/* Sinon.JS 13.0.1, 2022-02-01, @license BSD-3 */let sinon;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0) { + return args[callArgAt]; + } + + var argumentList; + + if (callArgAt === useLeftMostCallback) { + argumentList = args; + } + + if (callArgAt === useRightMostCallback) { + argumentList = reverse(slice(args)); + } + + var callArgProp = behavior.callArgProp; + + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] === "function") { + return argumentList[i]; + } + + if ( + callArgProp && + argumentList[i] && + typeof argumentList[i][callArgProp] === "function" + ) { + return argumentList[i][callArgProp]; + } + } + + return null; +} + +function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; + + if (behavior.callArgProp) { + msg = `${functionName( + behavior.stub + )} expected to yield to '${valueToString( + behavior.callArgProp + )}', but no object with such a property was passed.`; + } else { + msg = `${functionName( + behavior.stub + )} expected to yield, but no callback was passed.`; + } + + if (args.length > 0) { + msg += ` Received [${join(args, ", ")}]`; + } + + return msg; + } + + return `argument at index ${behavior.callArgAt} is not a function: ${func}`; +} + +function ensureArgs(name, behavior, args) { + // map function name to internal property + // callsArg => callArgAt + var property = name.replace(/sArg/, "ArgAt"); + var index = behavior[property]; + + if (index >= args.length) { + throw new TypeError( + `${name} failed: ${index + 1} arguments required but only ${ + args.length + } present` + ); + } +} + +function callCallback(behavior, args) { + if (typeof behavior.callArgAt === "number") { + ensureArgs("callsArg", behavior, args); + var func = getCallback(behavior, args); + + if (typeof func !== "function") { + throw new TypeError(getCallbackError(behavior, func, args)); + } + + if (behavior.callbackAsync) { + nextTick(function () { + func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); + }); + } else { + return func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); + } + } + + return undefined; +} + +var proto = { + create: function create(stub) { + var behavior = extend({}, proto); + delete behavior.create; + delete behavior.addBehavior; + delete behavior.createBehavior; + behavior.stub = stub; + + if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) { + behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary; + } + + return behavior; + }, + + isPresent: function isPresent() { + return ( + typeof this.callArgAt === "number" || + this.exception || + this.exceptionCreator || + typeof this.returnArgAt === "number" || + this.returnThis || + typeof this.resolveArgAt === "number" || + this.resolveThis || + typeof this.throwArgAt === "number" || + this.fakeFn || + this.returnValueDefined + ); + }, + + /*eslint complexity: ["error", 20]*/ + invoke: function invoke(context, args) { + /* + * callCallback (conditionally) calls ensureArgs + * + * Note: callCallback intentionally happens before + * everything else and cannot be moved lower + */ + var returnValue = callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (this.exceptionCreator) { + this.exception = this.exceptionCreator(); + this.exceptionCreator = undefined; + throw this.exception; + } else if (typeof this.returnArgAt === "number") { + ensureArgs("returnsArg", this, args); + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } else if (typeof this.throwArgAt === "number") { + ensureArgs("throwsArg", this, args); + throw args[this.throwArgAt]; + } else if (this.fakeFn) { + return this.fakeFn.apply(context, args); + } else if (typeof this.resolveArgAt === "number") { + ensureArgs("resolvesArg", this, args); + return (this.promiseLibrary || Promise).resolve( + args[this.resolveArgAt] + ); + } else if (this.resolveThis) { + return (this.promiseLibrary || Promise).resolve(context); + } else if (this.resolve) { + return (this.promiseLibrary || Promise).resolve(this.returnValue); + } else if (this.reject) { + return (this.promiseLibrary || Promise).reject(this.returnValue); + } else if (this.callsThrough) { + var wrappedMethod = this.effectiveWrappedMethod(); + + return wrappedMethod.apply(context, args); + } else if (this.callsThroughWithNew) { + // Get the original method (assumed to be a constructor in this case) + var WrappedClass = this.effectiveWrappedMethod(); + // Turn the arguments object into a normal array + var argsArray = slice(args); + // Call the constructor + var F = WrappedClass.bind.apply( + WrappedClass, + concat([null], argsArray) + ); + return new F(); + } else if (typeof this.returnValue !== "undefined") { + return this.returnValue; + } else if (typeof this.callArgAt === "number") { + return returnValue; + } + + return this.returnValue; + }, + + effectiveWrappedMethod: function effectiveWrappedMethod() { + for (var stubb = this.stub; stubb; stubb = stubb.parent) { + if (stubb.wrappedMethod) { + return stubb.wrappedMethod; + } + } + throw new Error("Unable to find wrapped method"); + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error( + 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' + + 'is not supported. Use "stub.withArgs(...).onCall(...)" ' + + "to define sequential behavior for calls with certain arguments." + ); + }, +}; + +function createBehavior(behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || proto.create(this); + this.defaultBehavior[behaviorMethod].apply( + this.defaultBehavior, + arguments + ); + return this; + }; +} + +function addBehavior(stub, name, fn) { + proto[name] = function () { + fn.apply(this, concat([this], slice(arguments))); + return this.stub || this; + }; + + stub[name] = createBehavior(name); +} + +proto.addBehavior = addBehavior; +proto.createBehavior = createBehavior; + +var asyncBehaviors = exportAsyncBehaviors(proto); + +module.exports = extend.nonEnum({}, proto, asyncBehaviors); + +},{"./util/core/export-async-behaviors":24,"./util/core/extend":25,"./util/core/next-tick":34,"@sinonjs/commons":47}],5:[function(require,module,exports){ +"use strict"; + +var walk = require("./util/core/walk"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var push = require("@sinonjs/commons").prototypes.array.push; + +function collectMethod(methods, object, prop, propOwner) { + if ( + typeof getPropertyDescriptor(propOwner, prop).value === "function" && + hasOwnProperty(object, prop) + ) { + push(methods, object[prop]); + } +} + +// This function returns an array of all the own methods on the passed object +function collectOwnMethods(object) { + var methods = []; + + walk(object, collectMethod.bind(null, methods, object)); + + return methods; +} + +module.exports = collectOwnMethods; + +},{"./util/core/get-property-descriptor":29,"./util/core/walk":38,"@sinonjs/commons":47}],6:[function(require,module,exports){ +"use strict"; + +var supportsColor = require("supports-color"); + +function colorize(str, color) { + if (supportsColor.stdout === false) { + return str; + } + + return `\x1b[${color}m${str}\x1b[0m`; +} + +exports.red = function (str) { + return colorize(str, 31); +}; + +exports.green = function (str) { + return colorize(str, 32); +}; + +exports.cyan = function (str) { + return colorize(str, 96); +}; + +exports.white = function (str) { + return colorize(str, 39); +}; + +exports.bold = function (str) { + return colorize(str, 1); +}; + +},{"supports-color":110}],7:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var Sandbox = require("./sandbox"); + +var forEach = arrayProto.forEach; +var push = arrayProto.push; + +function prepareSandboxFromConfig(config) { + var sandbox = new Sandbox(); + + if (config.useFakeServer) { + if (typeof config.useFakeServer === "object") { + sandbox.serverPrototype = config.useFakeServer; + } + + sandbox.useFakeServer(); + } + + if (config.useFakeTimers) { + if (typeof config.useFakeTimers === "object") { + sandbox.useFakeTimers(config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } + } + + return sandbox; +} + +function exposeValue(sandbox, config, key, value) { + if (!value) { + return; + } + + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + push(sandbox.injectedKeys, key); + } else { + push(sandbox.args, value); + } +} + +function createSandbox(config) { + if (!config) { + return new Sandbox(); + } + + var configuredSandbox = prepareSandboxFromConfig(config); + configuredSandbox.args = configuredSandbox.args || []; + configuredSandbox.injectedKeys = []; + configuredSandbox.injectInto = config.injectInto; + var exposed = configuredSandbox.inject({}); + + if (config.properties) { + forEach(config.properties, function (prop) { + var value = + exposed[prop] || (prop === "sandbox" && configuredSandbox); + exposeValue(configuredSandbox, config, prop, value); + }); + } else { + exposeValue(configuredSandbox, config, "sandbox"); + } + + return configuredSandbox; +} + +module.exports = createSandbox; + +},{"./sandbox":18,"@sinonjs/commons":47}],8:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); +var extend = require("./util/core/extend"); + +var slice = arrayProto.slice; + +var useLeftMostCallback = -1; +var useRightMostCallback = -2; + +function throwsException(fake, error, message) { + if (typeof error === "function") { + fake.exceptionCreator = error; + } else if (typeof error === "string") { + fake.exceptionCreator = function () { + var newException = new Error(message || ""); + newException.name = error; + return newException; + }; + } else if (!error) { + fake.exceptionCreator = function () { + return new Error("Error"); + }; + } else { + fake.exception = error; + } +} + +var defaultBehaviors = { + callsFake: function callsFake(fake, fn) { + fake.fakeFn = fn; + }, + + callsArg: function callsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOn: function callsArgOn(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgWith: function callsArgWith(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOnWith: function callsArgWith(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + usingPromise: function usingPromise(fake, promiseLibrary) { + fake.promiseLibrary = promiseLibrary; + }, + + yields: function (fake) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsRight: function (fake) { + fake.callArgAt = useRightMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsOn: function (fake, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsTo: function (fake, prop) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsToOn: function (fake, prop, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(fake, value) { + fake.returnValue = value; + fake.resolve = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + returnsArg: function returnsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.returnArgAt = index; + }, + + throwsArg: function throwsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.throwArgAt = index; + }, + + returnsThis: function returnsThis(fake) { + fake.returnThis = true; + }, + + resolves: function resolves(fake, value) { + fake.returnValue = value; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + resolvesArg: function resolvesArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + fake.resolveArgAt = index; + fake.returnValue = undefined; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + rejects: function rejects(fake, error, message) { + var reason; + if (typeof error === "string") { + reason = new Error(message || ""); + reason.name = error; + } else if (!error) { + reason = new Error("Error"); + } else { + reason = error; + } + fake.returnValue = reason; + fake.resolve = false; + fake.resolveThis = false; + fake.reject = true; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + + return fake; + }, + + resolvesThis: function resolvesThis(fake) { + fake.returnValue = undefined; + fake.resolve = false; + fake.resolveThis = true; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + callThrough: function callThrough(fake) { + fake.callsThrough = true; + }, + + callThroughWithNew: function callThroughWithNew(fake) { + fake.callsThroughWithNew = true; + }, + + get: function get(fake, getterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + get: getterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + }); + + return fake; + }, + + set: function set(fake, setterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty( + rootStub.rootObj, + rootStub.propName, + // eslint-disable-next-line accessor-pairs + { + set: setterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + } + ); + + return fake; + }, + + value: function value(fake, newVal) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + value: newVal, + enumerable: true, + configurable: + rootStub.shadowsPropOnPrototype || + isPropertyConfigurable(rootStub.rootObj, rootStub.propName), + }); + + return fake; + }, +}; + +var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors); + +module.exports = extend({}, defaultBehaviors, asyncBehaviors); + +},{"./util/core/export-async-behaviors":24,"./util/core/extend":25,"./util/core/is-property-configurable":32,"@sinonjs/commons":47}],9:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var nextTick = require("./util/core/next-tick"); + +var slice = arrayProto.slice; +var promiseLib = Promise; + +module.exports = fake; + +/** + * Returns a `fake` that records all calls, arguments and return values. + * + * When an `f` argument is supplied, this implementation will be used. + * + * @example + * // create an empty fake + * var f1 = sinon.fake(); + * + * f1(); + * + * f1.calledOnce() + * // true + * + * @example + * function greet(greeting) { + * console.log(`Hello ${greeting}`); + * } + * + * // create a fake with implementation + * var f2 = sinon.fake(greet); + * + * // Hello world + * f2("world"); + * + * f2.calledWith("world"); + * // true + * + * @param {Function|undefined} f + * @returns {Function} + * @namespace + */ +function fake(f) { + if (arguments.length > 0 && typeof f !== "function") { + throw new TypeError("Expected f argument to be a Function"); + } + + return wrapFunc(f); +} + +/** + * Creates a `fake` that returns the provided `value`, as well as recording all + * calls, arguments and return values. + * + * @example + * var f1 = sinon.fake.returns(42); + * + * f1(); + * // 42 + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.returns = function returns(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return value; + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that throws an Error. + * If the `value` argument does not have Error in its prototype chain, it will + * be used for creating a new error. + * + * @example + * var f1 = sinon.fake.throws("hello"); + * + * f1(); + * // Uncaught Error: hello + * + * @example + * var f2 = sinon.fake.throws(new TypeError("Invalid argument")); + * + * f2(); + * // Uncaught TypeError: Invalid argument + * + * @memberof fake + * @param {*|Error} value + * @returns {Function} + */ +fake.throws = function throws(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + throw getError(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that resolves to the passed `value` + * argument. + * + * @example + * var f1 = sinon.fake.resolves("apple pie"); + * + * await f1(); + * // "apple pie" + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.resolves = function resolves(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.resolve(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that rejects to the passed `value` + * argument. When `value` does not have Error in its prototype chain, it will be + * wrapped in an Error. + * + * @example + * var f1 = sinon.fake.rejects(":("); + * + * try { + * await ft(); + * } catch (error) { + * console.log(error); + * // ":(" + * } + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.rejects = function rejects(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.reject(getError(value)); + } + + return wrapFunc(f); +}; + +/** + * Causes `fake` to use a custom Promise implementation, instead of the native + * Promise implementation. + * + * @example + * const bluebird = require("bluebird"); + * sinon.fake.usingPromise(bluebird); + * + * @memberof fake + * @param {*} promiseLibrary + * @returns {Function} + */ +fake.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + return fake; +}; + +/** + * Returns a `fake` that calls the callback with the defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * // "apple*pie" + * + * @memberof fake + * @returns {Function} + */ +fake.yields = function yields() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + + callback.apply(null, values); + } + + return wrapFunc(f); +}; + +/** + * Returns a `fake` that calls the callback **asynchronously** with the + * defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * + * setTimeout(() => { + * // "apple*pie" + * }); + * + * @memberof fake + * @returns {Function} + */ +fake.yieldsAsync = function yieldsAsync() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + nextTick(function () { + callback.apply(null, values); + }); + } + + return wrapFunc(f); +}; + +var uuid = 0; +/** + * Creates a proxy (sinon concept) from the passed function. + * + * @private + * @param {Function} f + * @returns {Function} + */ +function wrapFunc(f) { + var proxy; + var fakeInstance = function () { + var firstArg, lastArg; + + if (arguments.length > 0) { + firstArg = arguments[0]; + lastArg = arguments[arguments.length - 1]; + } + + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxy.firstArg = firstArg; + proxy.lastArg = lastArg; + proxy.callback = callback; + + return f && f.apply(this, arguments); + }; + proxy = createProxy(fakeInstance, f || fakeInstance); + + proxy.displayName = "fake"; + proxy.id = `fake#${uuid++}`; + + return proxy; +} + +/** + * Returns an Error instance from the passed value, if the value is not + * already an Error instance. + * + * @private + * @param {*} value [description] + * @returns {Error} [description] + */ +function getError(value) { + return value instanceof Error ? value : new Error(value); +} + +},{"./proxy":16,"./util/core/next-tick":34,"@sinonjs/commons":47}],10:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyInvoke = require("./proxy-invoke"); +var proxyCallToString = require("./proxy-call").toString; +var timesInWords = require("./util/core/times-in-words"); +var extend = require("./util/core/extend"); +var match = require("@sinonjs/samsam").createMatcher; +var stub = require("./stub"); +var assert = require("./assert"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var format = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var every = arrayProto.every; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function callCountInWords(callCount) { + if (callCount === 0) { + return "never called"; + } + + return `called ${timesInWords(callCount)}`; +} + +function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; + + if (typeof min === "number" && typeof max === "number") { + var str = timesInWords(min); + + if (min !== max) { + str = `at least ${str} and at most ${timesInWords(max)}`; + } + + return str; + } + + if (typeof min === "number") { + return `at least ${timesInWords(min)}`; + } + + return `at most ${timesInWords(max)}`; +} + +function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls === "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; +} + +function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls !== "number") { + return false; + } + + return expectation.callCount === expectation.maxCalls; +} + +function verifyMatcher(possibleMatcher, arg) { + var isMatcher = match.isMatcher(possibleMatcher); + + return (isMatcher && possibleMatcher.test(arg)) || true; +} + +var mockExpectation = { + minCalls: 1, + maxCalls: 1, + + create: function create(methodName) { + var expectation = extend.nonEnum(stub(), mockExpectation); + delete expectation.create; + expectation.method = methodName; + + return expectation; + }, + + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); + + return proxyInvoke.apply(this, arguments); + }, + + atLeast: function atLeast(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; + } + + this.minCalls = num; + + return this; + }, + + atMost: function atMost(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; + } + + this.maxCalls = num; + + return this; + }, + + never: function never() { + return this.exactly(0); + }, + + once: function once() { + return this.exactly(1); + }, + + twice: function twice() { + return this.exactly(2); + }, + + thrice: function thrice() { + return this.exactly(3); + }, + + exactly: function exactly(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not a number`); + } + + this.atLeast(num); + return this.atMost(num); + }, + + met: function met() { + return !this.failed && receivedMinCalls(this); + }, + + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (receivedMaxCalls(this)) { + this.failed = true; + mockExpectation.fail( + `${this.method} already called ${timesInWords(this.maxCalls)}` + ); + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + mockExpectation.fail( + `${this.method} called with ${valueToString( + thisValue + )} as thisValue, expected ${valueToString(this.expectedThis)}` + ); + } + + if (!("expectedArguments" in this)) { + return; + } + + if (!args) { + mockExpectation.fail( + `${this.method} received no arguments, expected ${format( + expectedArguments + )}` + ); + } + + if (args.length < expectedArguments.length) { + mockExpectation.fail( + `${this.method} received too few arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + if ( + this.expectsExactArgCount && + args.length !== expectedArguments.length + ) { + mockExpectation.fail( + `${this.method} received too many arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + forEach( + expectedArguments, + function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, args[i])) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, didn't match ${String(expectedArguments)}` + ); + } + + if (!deepEqual(args[i], expectedArgument)) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, expected ${format(expectedArguments)}` + ); + } + }, + this + ); + }, + + allowsCall: function allowsCall(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (this.met() && receivedMaxCalls(this)) { + return false; + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } + + if (!("expectedArguments" in this)) { + return true; + } + + // eslint-disable-next-line no-underscore-dangle + var _args = args || []; + + if (_args.length < expectedArguments.length) { + return false; + } + + if ( + this.expectsExactArgCount && + _args.length !== expectedArguments.length + ) { + return false; + } + + return every(expectedArguments, function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, _args[i])) { + return false; + } + + if (!deepEqual(_args[i], expectedArgument)) { + return false; + } + + return true; + }); + }, + + withArgs: function withArgs() { + this.expectedArguments = slice(arguments); + return this; + }, + + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, + + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, + + toString: function () { + var args = slice(this.expectedArguments || []); + + if (!this.expectsExactArgCount) { + push(args, "[...]"); + } + + var callStr = proxyCallToString.call({ + proxy: this.method || "anonymous mock expectation", + args: args, + }); + + var message = `${callStr.replace( + ", [...", + "[, ..." + )} ${expectedCallCountInWords(this)}`; + + if (this.met()) { + return `Expectation met: ${message}`; + } + + return `Expected ${message} (${callCountInWords(this.callCount)})`; + }, + + verify: function verify() { + if (!this.met()) { + mockExpectation.fail(String(this)); + } else { + mockExpectation.pass(String(this)); + } + + return true; + }, + + pass: function pass(message) { + assert.pass(message); + }, + + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; + + throw exception; + }, +}; + +module.exports = mockExpectation; + +},{"./assert":3,"./proxy-call":14,"./proxy-invoke":15,"./stub":21,"./util/core/extend":25,"./util/core/format":26,"./util/core/times-in-words":35,"@sinonjs/commons":47,"@sinonjs/samsam":86}],11:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var mockExpectation = require("./mock-expectation"); +var proxyCallToString = require("./proxy-call").toString; +var extend = require("./util/core/extend"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var wrapMethod = require("./util/core/wrap-method"); +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var every = arrayProto.every; +var join = arrayProto.join; +var push = arrayProto.push; +var slice = arrayProto.slice; +var unshift = arrayProto.unshift; + +function mock(object) { + if (!object || typeof object === "string") { + return mockExpectation.create(object ? object : "Anonymous mock"); + } + + return mock.create(object); +} + +function each(collection, callback) { + var col = collection || []; + + forEach(col, callback); +} + +function arrayEquals(arr1, arr2, compareLength) { + if (compareLength && arr1.length !== arr2.length) { + return false; + } + + return every(arr1, function (element, i) { + return deepEqual(arr2[i], element); + }); +} + +extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } + + var mockObject = extend.nonEnum({}, mock, { object: object }); + delete mockObject.create; + + return mockObject; + }, + + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } + + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + this.failures = []; + } + + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; + + wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); + + push(this.proxies, method); + } + + var expectation = mockExpectation.create(method); + expectation.wrappedMethod = this.object[method].wrappedMethod; + push(this.expectations[method], expectation); + usePromiseLibrary(this.promiseLibrary, expectation); + + return expectation; + }, + + restore: function restore() { + var object = this.object; + + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore === "function") { + object[proxy].restore(); + } + }); + }, + + verify: function verify() { + var expectations = this.expectations || {}; + var messages = this.failures ? slice(this.failures) : []; + var met = []; + + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push(messages, String(expectation)); + } else { + push(met, String(expectation)); + } + }); + }); + + this.restore(); + + if (messages.length > 0) { + mockExpectation.fail(join(concat(messages, met), "\n")); + } else if (met.length > 0) { + mockExpectation.pass(join(concat(messages, met), "\n")); + } + + return true; + }, + + usingPromise: function usingPromise(promiseLibrary) { + this.promiseLibrary = promiseLibrary; + + return this; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */ + /* eslint consistent-return: "off" */ + var expectations = + this.expectations && this.expectations[method] + ? this.expectations[method] + : []; + var currentArgs = args || []; + var available; + + var expectationsWithMatchingArgs = filter( + expectations, + function (expectation) { + var expectedArgs = expectation.expectedArguments || []; + + return arrayEquals( + expectedArgs, + currentArgs, + expectation.expectsExactArgCount + ); + } + ); + + var expectationsToApply = filter( + expectationsWithMatchingArgs, + function (expectation) { + return ( + !expectation.met() && + expectation.allowsCall(thisValue, args) + ); + } + ); + + if (expectationsToApply.length > 0) { + return expectationsToApply[0].apply(thisValue, args); + } + + var messages = []; + var exhausted = 0; + + forEach(expectationsWithMatchingArgs, function (expectation) { + if (expectation.allowsCall(thisValue, args)) { + available = available || expectation; + } else { + exhausted += 1; + } + }); + + if (available && exhausted === 0) { + return available.apply(thisValue, args); + } + + forEach(expectations, function (expectation) { + push(messages, ` ${String(expectation)}`); + }); + + unshift( + messages, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + })}` + ); + + var err = new Error(); + if (!err.stack) { + // PhantomJS does not serialize the stack trace until the error has been thrown + try { + throw err; + } catch (e) { + /* empty */ + } + } + push( + this.failures, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + stack: err.stack, + })}` + ); + + mockExpectation.fail(join(messages, "\n")); + }, +}); + +module.exports = mock; + +},{"./mock-expectation":10,"./proxy-call":14,"./util/core/extend":25,"./util/core/use-promise-library":36,"./util/core/wrap-method":39,"@sinonjs/commons":47,"@sinonjs/samsam":86}],12:[function(require,module,exports){ +"use strict"; + +var fake = require("./fake"); +var isRestorable = require("./util/core/is-restorable"); + +var STATUS_PENDING = "pending"; +var STATUS_RESOLVED = "resolved"; +var STATUS_REJECTED = "rejected"; + +/** + * Returns a fake for a given function or undefined. If no function is given, a + * new fake is returned. If the given function is already a fake, it is + * returned as is. Otherwise the given function is wrapped in a new fake. + * + * @param {Function} [executor] The optional executor function. + * @returns {Function} + */ +function getFakeExecutor(executor) { + if (isRestorable(executor)) { + return executor; + } + if (executor) { + return fake(executor); + } + return fake(); +} + +/** + * Returns a new promise that exposes it's internal `status`, `resolvedValue` + * and `rejectedValue` and can be resolved or rejected from the outside by + * calling `resolve(value)` or `reject(reason)`. + * + * @param {Function} [executor] The optional executor function. + * @returns {Promise} + */ +function promise(executor) { + var fakeExecutor = getFakeExecutor(executor); + var sinonPromise = new Promise(fakeExecutor); + + sinonPromise.status = STATUS_PENDING; + sinonPromise + .then(function (value) { + sinonPromise.status = STATUS_RESOLVED; + sinonPromise.resolvedValue = value; + }) + .catch(function (reason) { + sinonPromise.status = STATUS_REJECTED; + sinonPromise.rejectedValue = reason; + }); + + /** + * Resolves or rejects the promise with the given status and value. + * + * @param {string} status + * @param {*} value + * @param {Function} callback + */ + function finalize(status, value, callback) { + if (sinonPromise.status !== STATUS_PENDING) { + throw new Error(`Promise already ${sinonPromise.status}`); + } + + sinonPromise.status = status; + callback(value); + } + + sinonPromise.resolve = function (value) { + finalize(STATUS_RESOLVED, value, fakeExecutor.firstCall.args[0]); + // Return the promise so that callers can await it: + return sinonPromise; + }; + sinonPromise.reject = function (reason) { + finalize(STATUS_REJECTED, reason, fakeExecutor.firstCall.args[1]); + // Return a new promise that resolves when the sinon promise was + // rejected, so that callers can await it: + return new Promise(function (resolve) { + sinonPromise.catch(() => resolve()); + }); + }; + + return sinonPromise; +} + +module.exports = promise; + +},{"./fake":9,"./util/core/is-restorable":33}],13:[function(require,module,exports){ +"use strict"; + +var push = require("@sinonjs/commons").prototypes.array.push; + +exports.incrementCallCount = function incrementCallCount(proxy) { + proxy.called = true; + proxy.callCount += 1; + proxy.notCalled = false; + proxy.calledOnce = proxy.callCount === 1; + proxy.calledTwice = proxy.callCount === 2; + proxy.calledThrice = proxy.callCount === 3; +}; + +exports.createCallProperties = function createCallProperties(proxy) { + proxy.firstCall = proxy.getCall(0); + proxy.secondCall = proxy.getCall(1); + proxy.thirdCall = proxy.getCall(2); + proxy.lastCall = proxy.getCall(proxy.callCount - 1); +}; + +exports.delegateToCalls = function delegateToCalls( + proxy, + method, + matchAny, + actual, + returnsValues, + notCalled, + totalCallCount +) { + proxy[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + if (totalCallCount !== undefined && this.callCount !== totalCallCount) { + return false; + } + + var currentCall; + var matches = 0; + var returnValues = []; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + var returnValue = currentCall[actual || method].apply( + currentCall, + arguments + ); + push(returnValues, returnValue); + if (returnValue) { + matches += 1; + + if (matchAny) { + return true; + } + } + } + + if (returnsValues) { + return returnValues; + } + return matches === this.callCount; + }; +}; + +},{"@sinonjs/commons":47}],14:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var match = require("@sinonjs/samsam").createMatcher; +var deepEqual = require("@sinonjs/samsam").deepEqual; +var functionName = require("@sinonjs/commons").functionName; +var sinonFormat = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var join = arrayProto.join; +var map = arrayProto.map; +var reduce = arrayProto.reduce; +var slice = arrayProto.slice; + +function throwYieldError(proxy, text, args) { + var msg = functionName(proxy) + text; + if (args.length) { + msg += ` Received [${join(slice(args), ", ")}]`; + } + throw new Error(msg); +} + +var callProto = { + calledOn: function calledOn(thisValue) { + if (match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, + + calledWith: function calledWith() { + var self = this; + var calledWithArgs = slice(arguments); + + if (calledWithArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithArgs, + function (prev, arg, i) { + return prev && deepEqual(self.args[i], arg); + }, + true + ); + }, + + calledWithMatch: function calledWithMatch() { + var self = this; + var calledWithMatchArgs = slice(arguments); + + if (calledWithMatchArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithMatchArgs, + function (prev, expectation, i) { + var actual = self.args[i]; + + return prev && match(expectation).test(actual); + }, + true + ); + }, + + calledWithExactly: function calledWithExactly() { + return ( + arguments.length === this.args.length && + this.calledWith.apply(this, arguments) + ); + }, + + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, + + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, + + returned: function returned(value) { + return deepEqual(this.returnValue, value); + }, + + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return Boolean(this.exception); + } + + return this.exception === error || this.exception.name === error; + }, + + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, + + calledBefore: function (other) { + return this.callId < other.callId; + }, + + calledAfter: function (other) { + return this.callId > other.callId; + }, + + calledImmediatelyBefore: function (other) { + return this.callId === other.callId - 1; + }, + + calledImmediatelyAfter: function (other) { + return this.callId === other.callId + 1; + }, + + callArg: function (pos) { + this.ensureArgIsAFunction(pos); + return this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + return this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + return this.callArgOnWith.apply( + this, + concat([pos, null], slice(arguments, 1)) + ); + }, + + callArgOnWith: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + var args = slice(arguments, 2); + return this.args[pos].apply(thisValue, args); + }, + + throwArg: function (pos) { + if (pos > this.args.length) { + throw new TypeError( + `Not enough arguments: ${pos} required but only ${this.args.length} present` + ); + } + + throw this.args[pos]; + }, + + yield: function () { + return this.yieldOn.apply(this, concat([null], slice(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = slice(this.args); + var yieldFn = filter(args, function (arg) { + return typeof arg === "function"; + })[0]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + " cannot yield since no callback was passed.", + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 1)); + }, + + yieldTo: function (prop) { + return this.yieldToOn.apply( + this, + concat([prop, null], slice(arguments, 1)) + ); + }, + + yieldToOn: function (prop, thisValue) { + var args = slice(this.args); + var yieldArg = filter(args, function (arg) { + return arg && typeof arg[prop] === "function"; + })[0]; + var yieldFn = yieldArg && yieldArg[prop]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + ` cannot yield to '${valueToString( + prop + )}' since no callback was passed.`, + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 2)); + }, + + toString: function () { + var callStr = this.proxy ? `${String(this.proxy)}(` : ""; + var formattedArgs; + + if (!this.args) { + return ":("; + } + + formattedArgs = map(this.args, function (arg) { + return sinonFormat(arg); + }); + + callStr = `${callStr + join(formattedArgs, ", ")})`; + + if (typeof this.returnValue !== "undefined") { + callStr += ` => ${sinonFormat(this.returnValue)}`; + } + + if (this.exception) { + callStr += ` !${this.exception.name}`; + + if (this.exception.message) { + callStr += `(${this.exception.message})`; + } + } + if (this.stack) { + // If we have a stack, add the first frame that's in end-user code + // Skip the first two frames because they will refer to Sinon code + callStr += (this.stack.split("\n")[3] || "unknown").replace( + /^\s*(?:at\s+|@)?/, + " at " + ); + } + + return callStr; + }, + + ensureArgIsAFunction: function (pos) { + if (typeof this.args[pos] !== "function") { + throw new TypeError( + `Expected argument at position ${pos} to be a Function, but was ${typeof this + .args[pos]}` + ); + } + }, +}; +Object.defineProperty(callProto, "stack", { + enumerable: true, + configurable: true, + get: function () { + return (this.errorWithCallStack && this.errorWithCallStack.stack) || ""; + }, +}); + +callProto.invokeCallback = callProto.yield; + +function createProxyCall( + proxy, + thisValue, + args, + returnValue, + exception, + id, + errorWithCallStack +) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } + + var firstArg, lastArg; + + if (args.length > 0) { + firstArg = args[0]; + lastArg = args[args.length - 1]; + } + + var proxyCall = Object.create(callProto); + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxyCall.proxy = proxy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.firstArg = firstArg; + proxyCall.lastArg = lastArg; + proxyCall.callback = callback; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + proxyCall.errorWithCallStack = errorWithCallStack; + + return proxyCall; +} +createProxyCall.toString = callProto.toString; // used by mocks + +module.exports = createProxyCall; + +},{"./util/core/format":26,"@sinonjs/commons":47,"@sinonjs/samsam":86}],15:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyCallUtil = require("./proxy-call-util"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var concat = arrayProto.concat; +var ErrorConstructor = Error.prototype.constructor; +var bind = Function.prototype.bind; + +var callId = 0; + +module.exports = function invoke(func, thisValue, args) { + var matchings = this.matchingFakes(args); + var currentCallId = callId++; + var exception, returnValue; + + proxyCallUtil.incrementCallCount(this); + push(this.thisValues, thisValue); + push(this.args, args); + push(this.callIds, currentCallId); + forEach(matchings, function (matching) { + proxyCallUtil.incrementCallCount(matching); + push(matching.thisValues, thisValue); + push(matching.args, args); + push(matching.callIds, currentCallId); + }); + + // Make call properties available from within the spied function: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + try { + this.invoking = true; + + var thisCall = this.getCall(this.callCount - 1); + + if (thisCall.calledWithNew()) { + // Call through with `new` + returnValue = new (bind.apply( + this.func || func, + concat([thisValue], args) + ))(); + + if (typeof returnValue !== "object") { + returnValue = thisValue; + } + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; + } + + push(this.exceptions, exception); + push(this.returnValues, returnValue); + forEach(matchings, function (matching) { + push(matching.exceptions, exception); + push(matching.returnValues, returnValue); + }); + + var err = new ErrorConstructor(); + // 1. Please do not get stack at this point. It may be so very slow, and not actually used + // 2. PhantomJS does not serialize the stack trace until the error has been thrown: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack + try { + throw err; + } catch (e) { + /* empty */ + } + push(this.errorsWithCallStack, err); + forEach(matchings, function (matching) { + push(matching.errorsWithCallStack, err); + }); + + // Make return value and exception available in the calls: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + if (exception !== undefined) { + throw exception; + } + + return returnValue; +}; + +},{"./proxy-call-util":13,"@sinonjs/commons":47}],16:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionToString = require("./util/core/function-to-string"); +var proxyCall = require("./proxy-call"); +var proxyCallUtil = require("./proxy-call-util"); +var proxyInvoke = require("./proxy-invoke"); +var sinonFormat = require("./util/core/format"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var slice = arrayProto.slice; + +var emptyFakes = Object.freeze([]); + +// Public API +var proxyApi = { + toString: functionToString, + + named: function named(name) { + this.displayName = name; + var nameDescriptor = Object.getOwnPropertyDescriptor(this, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + nameDescriptor.value = name; + Object.defineProperty(this, "name", nameDescriptor); + } + return this; + }, + + invoke: proxyInvoke, + + /* + * Hook for derived implementation to return fake instances matching the + * given arguments. + */ + matchingFakes: function (/*args, strict*/) { + return emptyFakes; + }, + + getCall: function getCall(index) { + var i = index; + if (i < 0) { + // Negative indices means counting backwards from the last call + i += this.callCount; + } + if (i < 0 || i >= this.callCount) { + return null; + } + + return proxyCall( + this, + this.thisValues[i], + this.args[i], + this.returnValues[i], + this.exceptions[i], + this.callIds[i], + this.errorsWithCallStack[i] + ); + }, + + getCalls: function () { + var calls = []; + var i; + + for (i = 0; i < this.callCount; i++) { + push(calls, this.getCall(i)); + } + + return calls; + }, + + calledBefore: function calledBefore(proxy) { + if (!this.called) { + return false; + } + + if (!proxy.called) { + return true; + } + + return this.callIds[0] < proxy.callIds[proxy.callIds.length - 1]; + }, + + calledAfter: function calledAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return this.callIds[this.callCount - 1] > proxy.callIds[0]; + }, + + calledImmediatelyBefore: function calledImmediatelyBefore(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] - 1 + ); + }, + + calledImmediatelyAfter: function calledImmediatelyAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] + 1 + ); + }, + + formatters: require("./spy-formatters"), + printf: function (format) { + var spyInstance = this; + var args = slice(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifier) { + formatter = proxyApi.formatters[specifier]; + + if (typeof formatter === "function") { + return String(formatter(spyInstance, args)); + } else if (!isNaN(parseInt(specifier, 10))) { + return sinonFormat(args[specifier - 1]); + } + + return `%${specifier}`; + }); + }, + + resetHistory: function () { + if (this.invoking) { + var err = new Error( + "Cannot reset Sinon function while invoking it. " + + "Move the call to .resetHistory outside of the callback." + ); + err.name = "InvalidResetException"; + throw err; + } + + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.firstArg = null; + this.lastArg = null; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + this.errorsWithCallStack = []; + + if (this.fakes) { + forEach(this.fakes, function (fake) { + fake.resetHistory(); + }); + } + + return this; + }, +}; + +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(proxyApi, "calledOn", true); +delegateToCalls(proxyApi, "alwaysCalledOn", false, "calledOn"); +delegateToCalls(proxyApi, "calledWith", true); +delegateToCalls( + proxyApi, + "calledOnceWith", + true, + "calledWith", + false, + undefined, + 1 +); +delegateToCalls(proxyApi, "calledWithMatch", true); +delegateToCalls(proxyApi, "alwaysCalledWith", false, "calledWith"); +delegateToCalls(proxyApi, "alwaysCalledWithMatch", false, "calledWithMatch"); +delegateToCalls(proxyApi, "calledWithExactly", true); +delegateToCalls( + proxyApi, + "calledOnceWithExactly", + true, + "calledWithExactly", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "calledOnceWithMatch", + true, + "calledWithMatch", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "alwaysCalledWithExactly", + false, + "calledWithExactly" +); +delegateToCalls( + proxyApi, + "neverCalledWith", + false, + "notCalledWith", + false, + function () { + return true; + } +); +delegateToCalls( + proxyApi, + "neverCalledWithMatch", + false, + "notCalledWithMatch", + false, + function () { + return true; + } +); +delegateToCalls(proxyApi, "threw", true); +delegateToCalls(proxyApi, "alwaysThrew", false, "threw"); +delegateToCalls(proxyApi, "returned", true); +delegateToCalls(proxyApi, "alwaysReturned", false, "returned"); +delegateToCalls(proxyApi, "calledWithNew", true); +delegateToCalls(proxyApi, "alwaysCalledWithNew", false, "calledWithNew"); + +function createProxy(func, originalFunc) { + var proxy = wrapFunction(func, originalFunc); + + // Inherit function properties: + extend(proxy, func); + + proxy.prototype = func.prototype; + + extend.nonEnum(proxy, proxyApi); + + return proxy; +} + +function wrapFunction(func, originalFunc) { + var arity = originalFunc.length; + var p; + // Do not change this to use an eval. Projects that depend on sinon block the use of eval. + // ref: https://github.com/sinonjs/sinon/issues/710 + switch (arity) { + /*eslint-disable no-unused-vars, max-len*/ + case 0: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 1: + p = function proxy(a) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 2: + p = function proxy(a, b) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 3: + p = function proxy(a, b, c) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 4: + p = function proxy(a, b, c, d) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 5: + p = function proxy(a, b, c, d, e) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 6: + p = function proxy(a, b, c, d, e, f) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 7: + p = function proxy(a, b, c, d, e, f, g) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 8: + p = function proxy(a, b, c, d, e, f, g, h) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 9: + p = function proxy(a, b, c, d, e, f, g, h, i) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 10: + p = function proxy(a, b, c, d, e, f, g, h, i, j) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 11: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 12: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) { + return p.invoke(func, this, slice(arguments)); + }; + break; + default: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + /*eslint-enable*/ + } + var nameDescriptor = Object.getOwnPropertyDescriptor(originalFunc, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + Object.defineProperty(p, "name", nameDescriptor); + } + extend.nonEnum(p, { + isSinonProxy: true, + + called: false, + notCalled: true, + calledOnce: false, + calledTwice: false, + calledThrice: false, + callCount: 0, + firstCall: null, + firstArg: null, + secondCall: null, + thirdCall: null, + lastCall: null, + lastArg: null, + args: [], + returnValues: [], + thisValues: [], + exceptions: [], + callIds: [], + errorsWithCallStack: [], + }); + return p; +} + +module.exports = createProxy; + +},{"./proxy-call":14,"./proxy-call-util":13,"./proxy-invoke":15,"./spy-formatters":19,"./util/core/extend":25,"./util/core/format":26,"./util/core/function-to-string":27,"@sinonjs/commons":47}],17:[function(require,module,exports){ +"use strict"; + +var walkObject = require("./util/core/walk-object"); + +function filter(object, property) { + return object[property].restore && object[property].restore.sinon; +} + +function restore(object, property) { + object[property].restore(); +} + +function restoreObject(object) { + return walkObject(restore, object, filter); +} + +module.exports = restoreObject; + +},{"./util/core/walk-object":37}],18:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var logger = require("@sinonjs/commons").deprecated; +var collectOwnMethods = require("./collect-own-methods"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var match = require("@sinonjs/samsam").createMatcher; +var sinonAssert = require("./assert"); +var sinonClock = require("./util/fake-timers"); +var sinonMock = require("./mock"); +var sinonSpy = require("./spy"); +var sinonStub = require("./stub"); +var sinonFake = require("./fake"); +var valueToString = require("@sinonjs/commons").valueToString; +var fakeServer = require("nise").fakeServer; +var fakeXhr = require("nise").fakeXhr; +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var DEFAULT_LEAK_THRESHOLD = 10000; + +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var reverse = arrayProto.reverse; + +function applyOnEach(fakes, method) { + var matchingFakes = filter(fakes, function (fake) { + return typeof fake[method] === "function"; + }); + + forEach(matchingFakes, function (fake) { + fake[method](); + }); +} + +function Sandbox() { + var sandbox = this; + var fakeRestorers = []; + var promiseLib; + + var collection = []; + var loggedLeakWarning = false; + sandbox.leakThreshold = DEFAULT_LEAK_THRESHOLD; + + function addToCollection(object) { + if ( + push(collection, object) > sandbox.leakThreshold && + !loggedLeakWarning + ) { + // eslint-disable-next-line no-console + logger.printWarning( + "Potential memory leak detected; be sure to call restore() to clean up your sandbox. To suppress this warning, modify the leakThreshold property of your sandbox." + ); + loggedLeakWarning = true; + } + } + + sandbox.assert = sinonAssert.createAssertObject(); + + sandbox.serverPrototype = fakeServer; + + // this is for testing only + sandbox.getFakes = function getFakes() { + return collection; + }; + + // this is for testing only + sandbox.getRestorers = function () { + return fakeRestorers; + }; + + sandbox.createStubInstance = function createStubInstance() { + var stubbed = sinonStub.createStubInstance.apply(null, arguments); + + var ownMethods = collectOwnMethods(stubbed); + + forEach(ownMethods, function (method) { + addToCollection(method); + }); + + usePromiseLibrary(promiseLib, ownMethods); + + return stubbed; + }; + + sandbox.inject = function inject(obj) { + obj.spy = function () { + return sandbox.spy.apply(null, arguments); + }; + + obj.stub = function () { + return sandbox.stub.apply(null, arguments); + }; + + obj.mock = function () { + return sandbox.mock.apply(null, arguments); + }; + + obj.createStubInstance = function () { + return sandbox.createStubInstance.apply(sandbox, arguments); + }; + + obj.fake = function () { + return sandbox.fake.apply(null, arguments); + }; + + obj.replace = function () { + return sandbox.replace.apply(null, arguments); + }; + + obj.replaceSetter = function () { + return sandbox.replaceSetter.apply(null, arguments); + }; + + obj.replaceGetter = function () { + return sandbox.replaceGetter.apply(null, arguments); + }; + + if (sandbox.clock) { + obj.clock = sandbox.clock; + } + + if (sandbox.server) { + obj.server = sandbox.server; + obj.requests = sandbox.server.requests; + } + + obj.match = match; + + return obj; + }; + + sandbox.mock = function mock() { + var m = sinonMock.apply(null, arguments); + + addToCollection(m); + usePromiseLibrary(promiseLib, m); + + return m; + }; + + sandbox.reset = function reset() { + applyOnEach(collection, "reset"); + applyOnEach(collection, "resetHistory"); + }; + + sandbox.resetBehavior = function resetBehavior() { + applyOnEach(collection, "resetBehavior"); + }; + + sandbox.resetHistory = function resetHistory() { + function privateResetHistory(f) { + var method = f.resetHistory || f.reset; + if (method) { + method.call(f); + } + } + + forEach(collection, function (fake) { + if (typeof fake === "function") { + privateResetHistory(fake); + return; + } + + var methods = []; + if (fake.get) { + push(methods, fake.get); + } + + if (fake.set) { + push(methods, fake.set); + } + + forEach(methods, privateResetHistory); + }); + }; + + sandbox.restore = function restore() { + if (arguments.length) { + throw new Error( + "sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()" + ); + } + + reverse(collection); + applyOnEach(collection, "restore"); + collection = []; + + forEach(fakeRestorers, function (restorer) { + restorer(); + }); + fakeRestorers = []; + + sandbox.restoreContext(); + }; + + sandbox.restoreContext = function restoreContext() { + var injectedKeys = sandbox.injectedKeys; + var injectInto = sandbox.injectInto; + + if (!injectedKeys) { + return; + } + + forEach(injectedKeys, function (injectedKey) { + delete injectInto[injectedKey]; + }); + + injectedKeys = []; + }; + + function getFakeRestorer(object, property) { + var descriptor = getPropertyDescriptor(object, property); + + function restorer() { + if (descriptor.isOwn) { + Object.defineProperty(object, property, descriptor); + } else { + delete object[property]; + } + } + restorer.object = object; + restorer.property = property; + return restorer; + } + + function verifyNotReplaced(object, property) { + forEach(fakeRestorers, function (fakeRestorer) { + if ( + fakeRestorer.object === object && + fakeRestorer.property === property + ) { + throw new TypeError( + `Attempted to replace ${property} which is already replaced` + ); + } + }); + } + + sandbox.replace = function replace(object, property, replacement) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement === "undefined") { + throw new TypeError("Expected replacement argument to be defined"); + } + + if (typeof descriptor.get === "function") { + throw new Error("Use sandbox.replaceGetter for replacing getters"); + } + + if (typeof descriptor.set === "function") { + throw new Error("Use sandbox.replaceSetter for replacing setters"); + } + + if (typeof object[property] !== typeof replacement) { + throw new TypeError( + `Cannot replace ${typeof object[ + property + ]} with ${typeof replacement}` + ); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + object[property] = replacement; + + return replacement; + }; + + sandbox.replaceGetter = function replaceGetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } + + if (typeof descriptor.get !== "function") { + throw new Error("`object.property` is not a getter"); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + Object.defineProperty(object, property, { + get: replacement, + configurable: isPropertyConfigurable(object, property), + }); + + return replacement; + }; + + sandbox.replaceSetter = function replaceSetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } + + if (typeof descriptor.set !== "function") { + throw new Error("`object.property` is not a setter"); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + // eslint-disable-next-line accessor-pairs + Object.defineProperty(object, property, { + set: replacement, + configurable: isPropertyConfigurable(object, property), + }); + + return replacement; + }; + + function commonPostInitSetup(args, spy) { + var object = args[0]; + var property = args[1]; + + var isSpyingOnEntireObject = + typeof property === "undefined" && typeof object === "object"; + + if (isSpyingOnEntireObject) { + var ownMethods = collectOwnMethods(spy); + + forEach(ownMethods, function (method) { + addToCollection(method); + }); + + usePromiseLibrary(promiseLib, ownMethods); + } else { + addToCollection(spy); + usePromiseLibrary(promiseLib, spy); + } + + return spy; + } + + sandbox.spy = function spy() { + var createdSpy = sinonSpy.apply(sinonSpy, arguments); + return commonPostInitSetup(arguments, createdSpy); + }; + + sandbox.stub = function stub() { + var createdStub = sinonStub.apply(sinonStub, arguments); + return commonPostInitSetup(arguments, createdStub); + }; + + // eslint-disable-next-line no-unused-vars + sandbox.fake = function fake(f) { + var s = sinonFake.apply(sinonFake, arguments); + + addToCollection(s); + + return s; + }; + + forEach(Object.keys(sinonFake), function (key) { + var fakeBehavior = sinonFake[key]; + if (typeof fakeBehavior === "function") { + sandbox.fake[key] = function () { + var s = fakeBehavior.apply(fakeBehavior, arguments); + + addToCollection(s); + + return s; + }; + } + }); + + sandbox.useFakeTimers = function useFakeTimers(args) { + var clock = sinonClock.useFakeTimers.call(null, args); + + sandbox.clock = clock; + addToCollection(clock); + + return clock; + }; + + sandbox.verify = function verify() { + applyOnEach(collection, "verify"); + }; + + sandbox.verifyAndRestore = function verifyAndRestore() { + var exception; + + try { + sandbox.verify(); + } catch (e) { + exception = e; + } + + sandbox.restore(); + + if (exception) { + throw exception; + } + }; + + sandbox.useFakeServer = function useFakeServer() { + var proto = sandbox.serverPrototype || fakeServer; + + if (!proto || !proto.create) { + return null; + } + + sandbox.server = proto.create(); + addToCollection(sandbox.server); + + return sandbox.server; + }; + + sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() { + var xhr = fakeXhr.useFakeXMLHttpRequest(); + addToCollection(xhr); + return xhr; + }; + + sandbox.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + collection.promiseLibrary = promiseLibrary; + + return sandbox; + }; +} + +Sandbox.prototype.match = match; + +module.exports = Sandbox; + +},{"./assert":3,"./collect-own-methods":5,"./fake":9,"./mock":11,"./spy":20,"./stub":21,"./util/core/get-property-descriptor":29,"./util/core/is-property-configurable":32,"./util/core/use-promise-library":36,"./util/fake-timers":40,"@sinonjs/commons":47,"@sinonjs/samsam":86,"nise":107}],19:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var color = require("./color"); +var match = require("@sinonjs/samsam").createMatcher; +var timesInWords = require("./util/core/times-in-words"); +var sinonFormat = require("./util/core/format"); +var jsDiff = require("diff"); + +var join = arrayProto.join; +var map = arrayProto.map; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function colorSinonMatchText(matcher, calledArg, calledArgMessage) { + var calledArgumentMessage = calledArgMessage; + if (!matcher.test(calledArg)) { + matcher.message = color.red(matcher.message); + if (calledArgumentMessage) { + calledArgumentMessage = color.green(calledArgumentMessage); + } + } + return `${calledArgumentMessage} ${matcher.message}`; +} + +function colorDiffText(diff) { + var objects = map(diff, function (part) { + var text = part.value; + if (part.added) { + text = color.green(text); + } else if (part.removed) { + text = color.red(text); + } + if (diff.length === 2) { + text += " "; // format simple diffs + } + return text; + }); + return join(objects, ""); +} + +function quoteStringValue(value) { + if (typeof value === "string") { + return JSON.stringify(value); + } + return value; +} + +module.exports = { + c: function (spyInstance) { + return timesInWords(spyInstance.callCount); + }, + + n: function (spyInstance) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return spyInstance.toString(); + }, + + D: function (spyInstance, args) { + var message = ""; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // describe multiple calls + if (l > 1) { + message += `\nCall ${i + 1}:`; + } + var calledArgs = spyInstance.getCall(i).args; + var expectedArgs = slice(args); + + for ( + var j = 0; + j < calledArgs.length || j < expectedArgs.length; + ++j + ) { + var calledArg = calledArgs[j]; + var expectedArg = expectedArgs[j]; + if (calledArg) { + calledArg = quoteStringValue(calledArg); + } + + if (expectedArg) { + expectedArg = quoteStringValue(expectedArg); + } + + message += "\n"; + + var calledArgMessage = + j < calledArgs.length ? sinonFormat(calledArg) : ""; + if (match.isMatcher(expectedArg)) { + message += colorSinonMatchText( + expectedArg, + calledArg, + calledArgMessage + ); + } else { + var expectedArgMessage = + j < expectedArgs.length ? sinonFormat(expectedArg) : ""; + var diff = jsDiff.diffJson( + calledArgMessage, + expectedArgMessage + ); + message += colorDiffText(diff); + } + } + } + + return message; + }, + + C: function (spyInstance) { + var calls = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + var stringifiedCall = ` ${spyInstance.getCall(i).toString()}`; + if (/\n/.test(calls[i - 1])) { + stringifiedCall = `\n${stringifiedCall}`; + } + push(calls, stringifiedCall); + } + + return calls.length > 0 ? `\n${join(calls, "\n")}` : ""; + }, + + t: function (spyInstance) { + var objects = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + push(objects, sinonFormat(spyInstance.thisValues[i])); + } + + return join(objects, ", "); + }, + + "*": function (spyInstance, args) { + return join( + map(args, function (arg) { + return sinonFormat(arg); + }), + ", " + ); + }, +}; + +},{"./color":6,"./util/core/format":26,"./util/core/times-in-words":35,"@sinonjs/commons":47,"@sinonjs/samsam":86,"diff":93}],20:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var isEsModule = require("./util/core/is-es-module"); +var proxyCallUtil = require("./proxy-call-util"); +var walkObject = require("./util/core/walk-object"); +var wrapMethod = require("./util/core/wrap-method"); +var valueToString = require("@sinonjs/commons").valueToString; + +/* cache references to library methods so that they also can be stubbed without problems */ +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var push = arrayProto.push; +var slice = arrayProto.slice; +var filter = Array.prototype.filter; + +var uuid = 0; + +function matches(fake, args, strict) { + var margs = fake.matchingArguments; + if ( + margs.length <= args.length && + deepEqual(slice(args, 0, margs.length), margs) + ) { + return !strict || margs.length === args.length; + } + return false; +} + +// Public API +var spyApi = { + withArgs: function () { + var args = slice(arguments); + var matching = pop(this.matchingFakes(args, true)); + if (matching) { + return matching; + } + + var original = this; + var fake = this.instantiateFake(); + fake.matchingArguments = args; + fake.parent = this; + push(this.fakes, fake); + + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; + + forEach(original.args, function (arg, i) { + if (!matches(fake, arg)) { + return; + } + + proxyCallUtil.incrementCallCount(fake); + push(fake.thisValues, original.thisValues[i]); + push(fake.args, arg); + push(fake.returnValues, original.returnValues[i]); + push(fake.exceptions, original.exceptions[i]); + push(fake.callIds, original.callIds[i]); + }); + + proxyCallUtil.createCallProperties(fake); + + return fake; + }, + + // Override proxy default implementation + matchingFakes: function (args, strict) { + return filter.call(this.fakes, function (fake) { + return matches(fake, args, strict); + }); + }, +}; + +/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgWith = spyApi.callArg; +delegateToCalls(spyApi, "callArgOn", false, "callArgOnWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgOnWith = spyApi.callArgOn; +delegateToCalls(spyApi, "throwArg", false, "throwArg", false, function () { + throw new Error( + `${this.toString()} cannot throw arg since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yield", false, "yield", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. +spyApi.invokeCallback = spyApi.yield; +delegateToCalls(spyApi, "yieldOn", false, "yieldOn", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yieldTo", false, "yieldTo", true, function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); +}); +delegateToCalls( + spyApi, + "yieldToOn", + false, + "yieldToOn", + true, + function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); + } +); + +function createSpy(func) { + var name; + var funk = func; + + if (typeof funk !== "function") { + funk = function () { + return; + }; + } else { + name = functionName(funk); + } + + var proxy = createProxy(funk, funk); + + // Inherit spy API: + extend.nonEnum(proxy, spyApi); + extend.nonEnum(proxy, { + displayName: name || "spy", + fakes: [], + instantiateFake: createSpy, + id: `spy#${uuid++}`, + }); + return proxy; +} + +function spy(object, property, types) { + var descriptor, methodDesc; + + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be spied"); + } + + if (!property && typeof object === "function") { + return createSpy(object); + } + + if (!property && typeof object === "object") { + return walkObject(spy, object); + } + + if (!object && !property) { + return createSpy(function () { + return; + }); + } + + if (!types) { + return wrapMethod(object, property, createSpy(object[property])); + } + + descriptor = {}; + methodDesc = getPropertyDescriptor(object, property); + + forEach(types, function (type) { + descriptor[type] = createSpy(methodDesc[type]); + }); + + return wrapMethod(object, property, descriptor); +} + +extend(spy, spyApi); +module.exports = spy; + +},{"./proxy":16,"./proxy-call-util":13,"./util/core/extend":25,"./util/core/get-property-descriptor":29,"./util/core/is-es-module":30,"./util/core/walk-object":37,"./util/core/wrap-method":39,"@sinonjs/commons":47,"@sinonjs/samsam":86}],21:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var behavior = require("./behavior"); +var behaviors = require("./default-behaviors"); +var createProxy = require("./proxy"); +var functionName = require("@sinonjs/commons").functionName; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var isNonExistentProperty = require("./util/core/is-non-existent-property"); +var spy = require("./spy"); +var extend = require("./util/core/extend"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isEsModule = require("./util/core/is-es-module"); +var wrapMethod = require("./util/core/wrap-method"); +var throwOnFalsyObject = require("./throw-on-falsy-object"); +var valueToString = require("@sinonjs/commons").valueToString; +var walkObject = require("./util/core/walk-object"); + +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var slice = arrayProto.slice; +var sort = arrayProto.sort; + +var uuid = 0; + +function createStub(originalFunc) { + var proxy; + + function functionStub() { + var args = slice(arguments); + var matchings = proxy.matchingFakes(args); + + var fnStub = + pop( + sort(matchings, function (a, b) { + return ( + a.matchingArguments.length - b.matchingArguments.length + ); + }) + ) || proxy; + return getCurrentBehavior(fnStub).invoke(this, arguments); + } + + proxy = createProxy(functionStub, originalFunc || functionStub); + // Inherit spy API: + extend.nonEnum(proxy, spy); + // Inherit stub API: + extend.nonEnum(proxy, stub); + + var name = originalFunc ? functionName(originalFunc) : null; + extend.nonEnum(proxy, { + fakes: [], + instantiateFake: createStub, + displayName: name || "stub", + defaultBehavior: null, + behaviors: [], + id: `stub#${uuid++}`, + }); + + return proxy; +} + +function stub(object, property) { + if (arguments.length > 2) { + throw new TypeError( + "stub(obj, 'meth', fn) has been removed, see documentation" + ); + } + + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be stubbed"); + } + + throwOnFalsyObject.apply(null, arguments); + + if (isNonExistentProperty(object, property)) { + throw new TypeError( + `Cannot stub non-existent property ${valueToString(property)}` + ); + } + + var actualDescriptor = getPropertyDescriptor(object, property); + + assertValidPropertyDescriptor(actualDescriptor, property); + + var isObjectOrFunction = + typeof object === "object" || typeof object === "function"; + var isStubbingEntireObject = + typeof property === "undefined" && isObjectOrFunction; + var isCreatingNewStub = !object && typeof property === "undefined"; + var isStubbingNonFuncProperty = + isObjectOrFunction && + typeof property !== "undefined" && + (typeof actualDescriptor === "undefined" || + typeof actualDescriptor.value !== "function"); + + if (isStubbingEntireObject) { + return walkObject(stub, object); + } + + if (isCreatingNewStub) { + return createStub(); + } + + var func = + typeof actualDescriptor.value === "function" + ? actualDescriptor.value + : null; + var s = createStub(func); + + extend.nonEnum(s, { + rootObj: object, + propName: property, + shadowsPropOnPrototype: !actualDescriptor.isOwn, + restore: function restore() { + if (actualDescriptor !== undefined && actualDescriptor.isOwn) { + Object.defineProperty(object, property, actualDescriptor); + return; + } + + delete object[property]; + }, + }); + + return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s); +} + +stub.createStubInstance = function (constructor, overrides) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } + + var stubbedObject = stub(Object.create(constructor.prototype)); + + forEach(Object.keys(overrides || {}), function (propertyName) { + if (propertyName in stubbedObject) { + var value = overrides[propertyName]; + if (value && value.createStubInstance) { + stubbedObject[propertyName] = value; + } else { + stubbedObject[propertyName].returns(value); + } + } else { + throw new Error( + `Cannot stub ${propertyName}. Property does not exist!` + ); + } + }); + return stubbedObject; +}; + +function assertValidPropertyDescriptor(descriptor, property) { + if (!descriptor || !property) { + return; + } + if (!descriptor.configurable && !descriptor.writable) { + throw new TypeError( + `Descriptor for property ${property} is non-configurable and non-writable` + ); + } + if ((descriptor.get || descriptor.set) && !descriptor.configurable) { + throw new TypeError( + `Descriptor for accessor property ${property} is non-configurable` + ); + } + if (isDataDescriptor(descriptor) && !descriptor.writable) { + throw new TypeError( + `Descriptor for data property ${property} is non-writable` + ); + } +} + +function isDataDescriptor(descriptor) { + return ( + !descriptor.value && + !descriptor.writable && + !descriptor.set && + !descriptor.get + ); +} + +/*eslint-disable no-use-before-define*/ +function getParentBehaviour(stubInstance) { + return stubInstance.parent && getCurrentBehavior(stubInstance.parent); +} + +function getDefaultBehavior(stubInstance) { + return ( + stubInstance.defaultBehavior || + getParentBehaviour(stubInstance) || + behavior.create(stubInstance) + ); +} + +function getCurrentBehavior(stubInstance) { + var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1]; + return currentBehavior && currentBehavior.isPresent() + ? currentBehavior + : getDefaultBehavior(stubInstance); +} +/*eslint-enable no-use-before-define*/ + +var proto = { + resetBehavior: function () { + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + delete this.throwArgAt; + delete this.resolveArgAt; + delete this.fakeFn; + this.returnThis = false; + this.resolveThis = false; + + forEach(this.fakes, function (fake) { + fake.resetBehavior(); + }); + }, + + reset: function () { + this.resetHistory(); + this.resetBehavior(); + }, + + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = behavior.create(this); + } + + return this.behaviors[index]; + }, + + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, + + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, + + onThirdCall: function onThirdCall() { + return this.onCall(2); + }, + + withArgs: function withArgs() { + var fake = spy.withArgs.apply(this, arguments); + if (this.defaultBehavior && this.defaultBehavior.promiseLibrary) { + fake.defaultBehavior = + fake.defaultBehavior || behavior.create(fake); + fake.defaultBehavior.promiseLibrary = + this.defaultBehavior.promiseLibrary; + } + return fake; + }, +}; + +forEach(Object.keys(behavior), function (method) { + if ( + hasOwnProperty(behavior, method) && + !hasOwnProperty(proto, method) && + method !== "create" && + method !== "invoke" + ) { + proto[method] = behavior.createBehavior(method); + } +}); + +forEach(Object.keys(behaviors), function (method) { + if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) { + behavior.addBehavior(stub, method, behaviors[method]); + } +}); + +extend(stub, proto); +module.exports = stub; + +},{"./behavior":4,"./default-behaviors":8,"./proxy":16,"./spy":20,"./throw-on-falsy-object":22,"./util/core/extend":25,"./util/core/get-property-descriptor":29,"./util/core/is-es-module":30,"./util/core/is-non-existent-property":31,"./util/core/walk-object":37,"./util/core/wrap-method":39,"@sinonjs/commons":47}],22:[function(require,module,exports){ +"use strict"; +var valueToString = require("@sinonjs/commons").valueToString; + +function throwOnFalsyObject(object, property) { + if (property && !object) { + var type = object === null ? "null" : "undefined"; + throw new Error( + `Trying to stub property '${valueToString(property)}' of ${type}` + ); + } +} + +module.exports = throwOnFalsyObject; + +},{"@sinonjs/commons":47}],23:[function(require,module,exports){ +"use strict"; + +module.exports = { + injectInto: null, + properties: [ + "spy", + "stub", + "mock", + "clock", + "server", + "requests", + "fake", + "replace", + "replaceSetter", + "replaceGetter", + "createStubInstance", + ], + useFakeTimers: true, + useFakeServer: true, +}; + +},{}],24:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var reduce = arrayProto.reduce; + +module.exports = function exportAsyncBehaviors(behaviorMethods) { + return reduce( + Object.keys(behaviorMethods), + function (acc, method) { + // need to avoid creating another async versions of the newly added async methods + if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { + acc[`${method}Async`] = function () { + var result = behaviorMethods[method].apply(this, arguments); + this.callbackAsync = true; + return result; + }; + } + return acc; + }, + {} + ); +}; + +},{"@sinonjs/commons":47}],25:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; + +var join = arrayProto.join; +var push = arrayProto.push; + +// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug +var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9"; + }, + }; + + var result = []; + for (var prop in obj) { + if (hasOwnProperty(obj, prop)) { + push(result, obj[prop]()); + } + } + return join(result, "") !== "0123456789"; +})(); + +function extendCommon(target, sources, doCopy) { + var source, i, prop; + + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + for (prop in source) { + if (hasOwnProperty(source, prop)) { + doCopy(target, source, prop); + } + } + + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if ( + hasDontEnumBug && + hasOwnProperty(source, "toString") && + source.toString !== target.toString + ) { + target.toString = source.toString; + } + } + + return target; +} + +/** Public: Extend target in place with all (own) properties, except 'name' when [[writable]] is false, + * from sources in-order. Thus, last source will override properties in previous sources. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports = function extend(target, ...sources) { + return extendCommon( + target, + sources, + function copyValue(dest, source, prop) { + var destOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + dest, + prop + ); + var sourceOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + source, + prop + ); + + if (prop === "name" && !destOwnPropertyDescriptor.writable) { + return; + } + const descriptors = { + configurable: sourceOwnPropertyDescriptor.configurable, + enumerable: sourceOwnPropertyDescriptor.enumerable, + }; + /* + if the sorce has an Accessor property copy over the accessor functions (get and set) + data properties has writable attribute where as accessor property don't + REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties + */ + + if (hasOwnProperty(sourceOwnPropertyDescriptor, "writable")) { + descriptors.writable = sourceOwnPropertyDescriptor.writable; + descriptors.value = sourceOwnPropertyDescriptor.value; + } else { + if (sourceOwnPropertyDescriptor.get) { + descriptors.get = + sourceOwnPropertyDescriptor.get.bind(dest); + } + if (sourceOwnPropertyDescriptor.set) { + descriptors.set = + sourceOwnPropertyDescriptor.set.bind(dest); + } + } + Object.defineProperty(dest, prop, descriptors); + } + ); +}; + +/** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. Define the properties as non enumerable. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports.nonEnum = function extendNonEnum(target, ...sources) { + return extendCommon( + target, + sources, + function copyProperty(dest, source, prop) { + Object.defineProperty(dest, prop, { + value: source[prop], + enumerable: false, + configurable: true, + writable: true, + }); + } + ); +}; + +},{"@sinonjs/commons":47}],26:[function(require,module,exports){ +"use strict"; + +var inspect = require("util").inspect; +var customFormatter; + +function format() { + if (customFormatter) { + return customFormatter.apply(null, arguments); + } + + return inspect.apply(inspect, arguments); +} + +format.setFormatter = function (aCustomFormatter) { + if (typeof aCustomFormatter !== "function") { + throw new Error("format.setFormatter must be called with a function"); + } + + customFormatter = aCustomFormatter; +}; + +module.exports = format; + +},{"util":92}],27:[function(require,module,exports){ +"use strict"; + +module.exports = function toString() { + var i, prop, thisValue; + if (this.getCall && this.callCount) { + i = this.callCount; + + while (i--) { + thisValue = this.getCall(i).thisValue; + + // eslint-disable-next-line guard-for-in + for (prop in thisValue) { + try { + if (thisValue[prop] === this) { + return prop; + } + } catch (e) { + // no-op - accessing props can throw an error, nothing to do here + } + } + } + } + + return this.displayName || "sinon fake"; +}; + +},{}],28:[function(require,module,exports){ +"use strict"; + +/* istanbul ignore next : not testing that setTimeout works */ +function nextTick(callback) { + setTimeout(callback, 0); +} + +module.exports = function getNextTick(process, setImmediate) { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } + + if (typeof setImmediate === "function") { + return setImmediate; + } + + return nextTick; +}; + +},{}],29:[function(require,module,exports){ +"use strict"; + +module.exports = function getPropertyDescriptor(object, property) { + var proto = object; + var descriptor; + var isOwn = Boolean( + object && Object.getOwnPropertyDescriptor(object, property) + ); + + while ( + proto && + !(descriptor = Object.getOwnPropertyDescriptor(proto, property)) + ) { + proto = Object.getPrototypeOf(proto); + } + + if (descriptor) { + descriptor.isOwn = isOwn; + } + + return descriptor; +}; + +},{}],30:[function(require,module,exports){ +"use strict"; + +/** + * Verify if an object is a ECMAScript Module + * + * As the exports from a module is immutable we cannot alter the exports + * using spies or stubs. Let the consumer know this to avoid bug reports + * on weird error messages. + * + * @param {object} object The object to examine + * + * @returns {boolean} true when the object is a module + */ +module.exports = function (object) { + return ( + object && + typeof Symbol !== "undefined" && + object[Symbol.toStringTag] === "Module" && + Object.isSealed(object) + ); +}; + +},{}],31:[function(require,module,exports){ +"use strict"; + +/** + * @param {*} object + * @param {string} property + * @returns {boolean} whether a prop exists in the prototype chain + */ +function isNonExistentProperty(object, property) { + return Boolean( + object && typeof property !== "undefined" && !(property in object) + ); +} + +module.exports = isNonExistentProperty; + +},{}],32:[function(require,module,exports){ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); + +function isPropertyConfigurable(obj, propName) { + var propertyDescriptor = getPropertyDescriptor(obj, propName); + + return propertyDescriptor ? propertyDescriptor.configurable : true; +} + +module.exports = isPropertyConfigurable; + +},{"./get-property-descriptor":29}],33:[function(require,module,exports){ +"use strict"; + +function isRestorable(obj) { + return ( + typeof obj === "function" && + typeof obj.restore === "function" && + obj.restore.sinon + ); +} + +module.exports = isRestorable; + +},{}],34:[function(require,module,exports){ +"use strict"; + +var globalObject = require("@sinonjs/commons").global; +var getNextTick = require("./get-next-tick"); + +module.exports = getNextTick(globalObject.process, globalObject.setImmediate); + +},{"./get-next-tick":28,"@sinonjs/commons":47}],35:[function(require,module,exports){ +"use strict"; + +var array = [null, "once", "twice", "thrice"]; + +module.exports = function timesInWords(count) { + return array[count] || `${count || 0} times`; +}; + +},{}],36:[function(require,module,exports){ +"use strict"; + +var forEach = Array.prototype.forEach; + +function usePromiseLibrary(library, fakes) { + if (typeof library === "undefined") { + return; + } + + if (Array.isArray(fakes)) { + forEach.call(fakes, usePromiseLibrary.bind(null, library)); + + return; + } + + if (typeof fakes.usingPromise === "function") { + fakes.usingPromise(library); + } +} + +module.exports = usePromiseLibrary; + +},{}],37:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var walk = require("./walk"); + +function walkObject(predicate, object, filter) { + var called = false; + var name = functionName(predicate); + + if (!object) { + throw new Error( + `Trying to ${name} object but received ${String(object)}` + ); + } + + walk(object, function (prop, propOwner) { + // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object + // is not Object.prototype + if ( + propOwner !== Object.prototype && + prop !== "constructor" && + typeof getPropertyDescriptor(propOwner, prop).value === "function" + ) { + if (filter) { + if (filter(object, prop)) { + called = true; + predicate(object, prop); + } + } else { + called = true; + predicate(object, prop); + } + } + }); + + if (!called) { + throw new Error(`Expected to ${name} methods on object but found none`); + } + + return object; +} + +module.exports = walkObject; + +},{"./get-property-descriptor":29,"./walk":38,"@sinonjs/commons":47}],38:[function(require,module,exports){ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.array.forEach; + +function walkInternal(obj, iterator, context, originalObj, seen) { + var proto, prop; + + if (typeof Object.getOwnPropertyNames !== "function") { + // We explicitly want to enumerate through all of the prototype's properties + // in this case, therefore we deliberately leave out an own property check. + /* eslint-disable-next-line guard-for-in */ + for (prop in obj) { + iterator.call(context, obj[prop], prop, obj); + } + + return; + } + + forEach(Object.getOwnPropertyNames(obj), function (k) { + if (seen[k] !== true) { + seen[k] = true; + var target = + typeof Object.getOwnPropertyDescriptor(obj, k).get === + "function" + ? originalObj + : obj; + iterator.call(context, k, target); + } + }); + + proto = Object.getPrototypeOf(obj); + if (proto) { + walkInternal(proto, iterator, context, originalObj, seen); + } +} + +/* Walks the prototype chain of an object and iterates over every own property + * name encountered. The iterator is called in the same fashion that Array.prototype.forEach + * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional + * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will + * default to using a simple for..in loop. + * + * obj - The object to walk the prototype chain for. + * iterator - The function to be called on each pass of the walk. + * context - (Optional) When given, the iterator will be called with this object as the receiver. + */ +module.exports = function walk(obj, iterator, context) { + return walkInternal(obj, iterator, context, obj, {}); +}; + +},{"@sinonjs/commons":47}],39:[function(require,module,exports){ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var extend = require("./extend"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var valueToString = require("@sinonjs/commons").valueToString; +var push = require("@sinonjs/commons").prototypes.array.push; + +function isFunction(obj) { + return ( + typeof obj === "function" || + Boolean(obj && obj.constructor && obj.call && obj.apply) + ); +} + +function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwnProperty(target, prop)) { + target[prop] = source[prop]; + } + } +} + +function getAccessor(object, property, method) { + var accessors = ["get", "set"]; + var descriptor = getPropertyDescriptor(object, property); + + for (var i = 0; i < accessors.length; i++) { + if ( + descriptor[accessors[i]] && + descriptor[accessors[i]].name === method.name + ) { + return accessors[i]; + } + } + return null; +} + +// Cheap way to detect if we have ES5 support. +var hasES5Support = "keys" in Object; + +module.exports = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } + + if (typeof method !== "function" && typeof method !== "object") { + throw new TypeError( + "Method wrapper should be a function or a property descriptor" + ); + } + + function checkWrappedMethod(wrappedMethod) { + var error; + + if (!isFunction(wrappedMethod)) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${valueToString( + property + )} as function` + ); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already wrapped` + ); + } else if (wrappedMethod.calledBefore) { + var verb = wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already ${verb}` + ); + } + + if (error) { + if (wrappedMethod && wrappedMethod.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethod.stackTraceError.stack}`; + } + throw error; + } + } + + var error, + wrappedMethods, + wrappedMethod, + i, + wrappedMethodDesc, + target, + accessor; + + wrappedMethods = []; + + function simplePropertyAssignment() { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } + + // Firefox has a problem when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty + ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods + : hasOwnProperty(object, property); + + if (hasES5Support) { + var methodDesc = + typeof method === "function" ? { value: method } : method; + wrappedMethodDesc = getPropertyDescriptor(object, property); + + if (!wrappedMethodDesc) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${property} as function` + ); + } else if ( + wrappedMethodDesc.restore && + wrappedMethodDesc.restore.sinon + ) { + error = new TypeError( + `Attempted to wrap ${property} which is already wrapped` + ); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethodDesc.stackTraceError.stack}`; + } + throw error; + } + + var types = Object.keys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + push(wrappedMethods, wrappedMethod); + } + + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + + // catch failing assignment + // this is the converse of the check in `.restore` below + if (typeof method === "function" && object[property] !== method) { + // correct any wrongdoings caused by the defineProperty call above, + // such as adding new items (if object was a Storage object) + delete object[property]; + simplePropertyAssignment(); + } + } else { + simplePropertyAssignment(); + } + + extendObjectWithWrappedMethods(); + + function extendObjectWithWrappedMethods() { + for (i = 0; i < wrappedMethods.length; i++) { + accessor = getAccessor(object, property, wrappedMethods[i]); + target = accessor ? method[accessor] : method; + extend.nonEnum(target, { + displayName: property, + wrappedMethod: wrappedMethods[i], + + // Set up an Error object for a stack trace which can be used later to find what line of + // code the original method was created on. + stackTraceError: new Error("Stack Trace for original"), + + restore: restore, + }); + + target.restore.sinon = true; + if (!hasES5Support) { + mirrorProperties(target, wrappedMethod); + } + } + } + + function restore() { + accessor = getAccessor(object, property, this.wrappedMethod); + var descriptor; + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (accessor) { + if (!owned) { + try { + // In some cases `delete` may throw an error + delete object[property][accessor]; + } catch (e) {} // eslint-disable-line no-empty + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + descriptor[accessor] = wrappedMethodDesc[accessor]; + Object.defineProperty(object, property, descriptor); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property][accessor] = this.wrappedMethod; + } + } else { + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property][accessor] === target) { + object[property][accessor] = this.wrappedMethod; + } + } + } else { + if (!owned) { + try { + delete object[property]; + } catch (e) {} // eslint-disable-line no-empty + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property] = this.wrappedMethod; + } + } else { + if (object[property] === target) { + object[property] = this.wrappedMethod; + } + } + } + } + + return method; +}; + +},{"./extend":25,"./get-property-descriptor":29,"@sinonjs/commons":47}],40:[function(require,module,exports){ +"use strict"; + +var extend = require("./core/extend"); +var FakeTimers = require("@sinonjs/fake-timers"); +var globalObject = require("@sinonjs/commons").global; + +function createClock(config, globalCtx) { + var FakeTimersCtx = FakeTimers; + if (globalCtx !== null && typeof globalCtx === "object") { + FakeTimersCtx = FakeTimers.withGlobal(globalCtx); + } + var clock = FakeTimersCtx.install(config); + clock.restore = clock.uninstall; + return clock; +} + +function addIfDefined(obj, globalPropName) { + var globalProp = globalObject[globalPropName]; + if (typeof globalProp !== "undefined") { + obj[globalPropName] = globalProp; + } +} + +/** + * @param {number|Date|object} dateOrConfig The unix epoch value to install with (default 0) + * @returns {object} Returns a lolex clock instance + */ +exports.useFakeTimers = function (dateOrConfig) { + var hasArguments = typeof dateOrConfig !== "undefined"; + var argumentIsDateLike = + (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) && + arguments.length === 1; + var argumentIsObject = + dateOrConfig !== null && + typeof dateOrConfig === "object" && + arguments.length === 1; + + if (!hasArguments) { + return createClock({ + now: 0, + }); + } + + if (argumentIsDateLike) { + return createClock({ + now: dateOrConfig, + }); + } + + if (argumentIsObject) { + var config = extend.nonEnum({}, dateOrConfig); + var globalCtx = config.global; + delete config.global; + return createClock(config, globalCtx); + } + + throw new TypeError( + "useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon" + ); +}; + +exports.clock = { + create: function (now) { + return FakeTimers.createClock(now); + }, +}; + +var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date, +}; +addIfDefined(timers, "setImmediate"); +addIfDefined(timers, "clearImmediate"); + +exports.timers = timers; + +},{"./core/extend":25,"@sinonjs/commons":47,"@sinonjs/fake-timers":59}],41:[function(require,module,exports){ +"use strict"; + +var every = require("./prototypes/array").every; + +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } + + return callMap[spy.id] < spy.callCount; +} + +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; + + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } + + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } + + return false; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ + +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; + + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} + +module.exports = calledInOrder; + +},{"./prototypes/array":49}],42:[function(require,module,exports){ +"use strict"; + +var functionName = require("./function-name"); + +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + return ( + (value.constructor && value.constructor.name) || + // The next branch is for IE11 support only: + // Because the name property is not set on the prototype + // of the Function object, we finally try to grab the + // name from its definition. This will never be reached + // in node, so we are not able to test this properly. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + (typeof value.constructor === "function" && + /* istanbul ignore next */ + functionName(value.constructor)) || + null + ); +} + +module.exports = className; + +},{"./function-name":45}],43:[function(require,module,exports){ +/* eslint-disable no-console */ +"use strict"; + +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function(func, msg) { + var wrapped = function() { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; + } + return wrapped; +}; + +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function(packageName, funcName) { + return ( + packageName + + "." + + funcName + + " is deprecated and will be removed from the public API in a future version of " + + packageName + + "." + ); +}; + +/** + * Prints a warning on the console, when it exists + * + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function(msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); + } +}; + +},{}],44:[function(require,module,exports){ +"use strict"; + +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function() { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; + } + + return pass; +}; + +},{}],45:[function(require,module,exports){ +"use strict"; + +/** + * Returns a display name for a function + * + * @param {Function} func + * @returns {string} + */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; + +},{}],46:[function(require,module,exports){ +"use strict"; + +/** + * A reference to the global object + * + * @type {object} globalObject + */ +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} + +module.exports = globalObject; + +},{}],47:[function(require,module,exports){ +"use strict"; + +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string") +}; + +},{"./called-in-order":41,"./class-name":42,"./deprecated":43,"./every":44,"./function-name":45,"./global":46,"./order-by-first-call":48,"./prototypes":52,"./type-of":57,"./value-to-string":58}],48:[function(require,module,exports){ +"use strict"; + +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; + +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ + +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} + +module.exports = orderByFirstCall; + +},{"./prototypes/array":49}],49:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Array.prototype); + +},{"./copy-prototype":50}],50:[function(require,module,exports){ +"use strict"; + +var call = Function.call; + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function(result, name) { + // ignore size because it throws from Map + if ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof prototype[name] === "function" + ) { + result[name] = call.bind(prototype[name]); + } + + return result; + }, Object.create(null)); +}; + +},{}],51:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Function.prototype); + +},{"./copy-prototype":50}],52:[function(require,module,exports){ +"use strict"; + +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string") +}; + +},{"./array":49,"./function":51,"./map":53,"./object":54,"./set":55,"./string":56}],53:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Map.prototype); + +},{"./copy-prototype":50}],54:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Object.prototype); + +},{"./copy-prototype":50}],55:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Set.prototype); + +},{"./copy-prototype":50}],56:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(String.prototype); + +},{"./copy-prototype":50}],57:[function(require,module,exports){ +"use strict"; + +var type = require("type-detect"); + +/** + * Returns the lower-case result of running type from type-detect on the value + * + * @param {*} value + * @returns {string} + */ +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; + +},{"type-detect":111}],58:[function(require,module,exports){ +"use strict"; + +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); + } + return String(value); +} + +module.exports = valueToString; + +},{}],59:[function(require,module,exports){ +"use strict"; + +const globalObject = require("@sinonjs/commons").global; + +/** + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods + * + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id + */ + +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ + +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ + +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ + +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ + +/** + * @typedef Performance + * @property {function(): number} now + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ + +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ + +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ + +/* eslint-disable complexity */ + +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; + + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } + + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ + + _global.clearTimeout(timeoutResult); + + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; + + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } + + return isFinite(num); + } + + let isNearInfiniteLimit = false; + + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } + } + + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; + } + + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } + + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); + } + + ms += parsed * Math.pow(60, l - i - 1); + } + + return ms * 1000; + } + + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; + + return Math.floor(positiveRemainder); + } + + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); + + if (!job.error) { + return infiniteLoopError; + } + + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); + + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); + } + + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; + } + + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; + } + + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); + + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; + + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } + + return infiniteLoopError; + } + + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + return target; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } + + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); + + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); + } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); + } + } + + if (isNearInfiniteLimit) { + timer.error = new Error(); + } + + timer.type = timer.immediate ? "Immediate" : "Timeout"; + + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } + + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } + + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; + } + + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; + } + + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + ref: function () { + return res; + }, + unref: function () { + return res; + }, + refresh: function () { + clearTimeout(timer.id); + const args = [timer.func, timer.delay].concat(timer.args); + return setTimeout.apply(null, args); + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } + + return timer.id; + } + + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); + } + } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; + } + return `clear${ttype}`; + } + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; + } + return `set${ttype}`; + } + + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); + + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = {}; + } + + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; + } + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); + } + } + } + + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } + } + } + } + + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; + } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); + } + + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); + } + + target[method].clock = clock; + } + + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); + } + + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; + } + + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; + } + + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; + } + + if (performancePresent) { + timers.performance = _global.performance; + } + + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); + } + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; + } + return [secsSinceStart, remainderInNanos]; + } + + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } + + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; + + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[ + utilPromisify.custom + ] = function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, + }); + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[ + utilPromisify.custom + ] = function promisifiedSetImmediate(arg) { + return new _global.Promise(function setImmediateExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + }); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + args: [clock.now + getTimeToNextFrame()], + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys(clock.timers) + .length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = function FakeTimersNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + }; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; + +},{"@sinonjs/commons":47,"util":92}],60:[function(require,module,exports){ +"use strict"; + +var ARRAY_TYPES = [ + Array, + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, +]; + +module.exports = ARRAY_TYPES; + +},{}],61:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var deepEqual = require("./deep-equal").use(createMatcher); // eslint-disable-line no-use-before-define +var every = require("@sinonjs/commons").every; +var functionName = require("@sinonjs/commons").functionName; +var get = require("lodash.get"); +var iterableToString = require("./iterable-to-string"); +var objectProto = require("@sinonjs/commons").prototypes.object; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var assertMatcher = require("./create-matcher/assert-matcher"); +var assertMethodExists = require("./create-matcher/assert-method-exists"); +var assertType = require("./create-matcher/assert-type"); +var isIterable = require("./create-matcher/is-iterable"); +var isMatcher = require("./create-matcher/is-matcher"); + +var matcherPrototype = require("./create-matcher/matcher-prototype"); + +var arrayIndexOf = arrayProto.indexOf; +var some = arrayProto.some; + +var hasOwnProperty = objectProto.hasOwnProperty; +var objectToString = objectProto.toString; + +var TYPE_MAP = require("./create-matcher/type-map")(createMatcher); // eslint-disable-line no-use-before-define + +/** + * Creates a matcher object for the passed expectation + * + * @alias module:samsam.createMatcher + * @param {*} expectation An expecttation + * @param {string} message A message for the expectation + * @returns {object} A matcher object + */ +function createMatcher(expectation, message) { + var m = Object.create(matcherPrototype); + var type = typeOf(expectation); + + if (message !== undefined && typeof message !== "string") { + throw new TypeError("Message should be a string"); + } + + if (arguments.length > 2) { + throw new TypeError( + `Expected 1 or 2 arguments, received ${arguments.length}` + ); + } + + if (type in TYPE_MAP) { + TYPE_MAP[type](m, expectation, message); + } else { + m.test = function (actual) { + return deepEqual(actual, expectation); + }; + } + + if (!m.message) { + m.message = `match(${valueToString(expectation)})`; + } + + return m; +} + +createMatcher.isMatcher = isMatcher; + +createMatcher.any = createMatcher(function () { + return true; +}, "any"); + +createMatcher.defined = createMatcher(function (actual) { + return actual !== null && actual !== undefined; +}, "defined"); + +createMatcher.truthy = createMatcher(function (actual) { + return Boolean(actual); +}, "truthy"); + +createMatcher.falsy = createMatcher(function (actual) { + return !actual; +}, "falsy"); + +createMatcher.same = function (expectation) { + return createMatcher(function (actual) { + return expectation === actual; + }, `same(${valueToString(expectation)})`); +}; + +createMatcher.in = function (arrayOfExpectations) { + if (typeOf(arrayOfExpectations) !== "array") { + throw new TypeError("array expected"); + } + + return createMatcher(function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, `in(${valueToString(arrayOfExpectations)})`); +}; + +createMatcher.typeOf = function (type) { + assertType(type, "string", "type"); + return createMatcher(function (actual) { + return typeOf(actual) === type; + }, `typeOf("${type}")`); +}; + +createMatcher.instanceOf = function (type) { + /* istanbul ignore if */ + if ( + typeof Symbol === "undefined" || + typeof Symbol.hasInstance === "undefined" + ) { + assertType(type, "function", "type"); + } else { + assertMethodExists( + type, + Symbol.hasInstance, + "type", + "[Symbol.hasInstance]" + ); + } + return createMatcher(function (actual) { + return actual instanceof type; + }, `instanceOf(${functionName(type) || objectToString(type)})`); +}; + +/** + * Creates a property matcher + * + * @private + * @param {Function} propertyTest A function to test the property against a value + * @param {string} messagePrefix A prefix to use for messages generated by the matcher + * @returns {object} A matcher + */ +function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `${messagePrefix}("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + !propertyTest(actual, property) + ) { + return false; + } + return onlyProperty || deepEqual(actual[property], value); + }, message); + }; +} + +createMatcher.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; +}, "has"); + +createMatcher.hasOwn = createPropertyMatcher(function (actual, property) { + return hasOwnProperty(actual, property); +}, "hasOwn"); + +createMatcher.hasNested = function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `hasNested("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + get(actual, property) === undefined + ) { + return false; + } + return onlyProperty || deepEqual(get(actual, property), value); + }, message); +}; + +var jsonParseResultTypes = { + null: true, + boolean: true, + number: true, + string: true, + object: true, + array: true, +}; +createMatcher.json = function (value) { + if (!jsonParseResultTypes[typeOf(value)]) { + throw new TypeError("Value cannot be the result of JSON.parse"); + } + var message = `json(${JSON.stringify(value, null, " ")})`; + return createMatcher(function (actual) { + var parsed; + try { + parsed = JSON.parse(actual); + } catch (e) { + return false; + } + return deepEqual(parsed, value); + }, message); +}; + +createMatcher.every = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return every(Object.keys(actual), function (key) { + return predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + every(actual, function (element) { + return predicate.test(element); + }) + ); + }, `every(${predicate.message})`); +}; + +createMatcher.some = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return !every(Object.keys(actual), function (key) { + return !predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + !every(actual, function (element) { + return !predicate.test(element); + }) + ); + }, `some(${predicate.message})`); +}; + +createMatcher.array = createMatcher.typeOf("array"); + +createMatcher.array.deepEquals = function (expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, `deepEquals([${iterableToString(expectation)}])`); +}; + +createMatcher.array.startsWith = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, `startsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.endsWith = function (expectation) { + return createMatcher(function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; + + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, `endsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.contains = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, `contains([${iterableToString(expectation)}])`); +}; + +createMatcher.map = createMatcher.typeOf("map"); + +createMatcher.map.deepEquals = function mapDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return expectation.has(key) && expectation.get(key) === element; + }) + ); + }, `deepEquals(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.map.contains = function mapContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, `contains(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.set = createMatcher.typeOf("set"); + +createMatcher.set.deepEquals = function setDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, `deepEquals(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.set.contains = function setContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, `contains(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.bool = createMatcher.typeOf("boolean"); +createMatcher.number = createMatcher.typeOf("number"); +createMatcher.string = createMatcher.typeOf("string"); +createMatcher.object = createMatcher.typeOf("object"); +createMatcher.func = createMatcher.typeOf("function"); +createMatcher.regexp = createMatcher.typeOf("regexp"); +createMatcher.date = createMatcher.typeOf("date"); +createMatcher.symbol = createMatcher.typeOf("symbol"); + +module.exports = createMatcher; + +},{"./create-matcher/assert-matcher":62,"./create-matcher/assert-method-exists":63,"./create-matcher/assert-type":64,"./create-matcher/is-iterable":65,"./create-matcher/is-matcher":66,"./create-matcher/matcher-prototype":68,"./create-matcher/type-map":69,"./deep-equal":70,"./iterable-to-string":84,"@sinonjs/commons":47,"lodash.get":95}],62:[function(require,module,exports){ +"use strict"; + +var isMatcher = require("./is-matcher"); + +/** + * Throws a TypeError when `value` is not a matcher + * + * @private + * @param {*} value The value to examine + */ +function assertMatcher(value) { + if (!isMatcher(value)) { + throw new TypeError("Matcher expected"); + } +} + +module.exports = assertMatcher; + +},{"./is-matcher":66}],63:[function(require,module,exports){ +"use strict"; + +/** + * Throws a TypeError when expected method doesn't exist + * + * @private + * @param {*} value A value to examine + * @param {string} method The name of the method to look for + * @param {name} name A name to use for the error message + * @param {string} methodPath The name of the method to use for error messages + * @throws {TypeError} When the method doesn't exist + */ +function assertMethodExists(value, method, name, methodPath) { + if (value[method] === null || value[method] === undefined) { + throw new TypeError(`Expected ${name} to have method ${methodPath}`); + } +} + +module.exports = assertMethodExists; + +},{}],64:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Ensures that value is of type + * + * @private + * @param {*} value A value to examine + * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string" + * @param {string} name A string to use for the error message + * @throws {TypeError} If value is not of the expected type + * @returns {undefined} + */ +function assertType(value, type, name) { + var actual = typeOf(value); + if (actual !== type) { + throw new TypeError( + `Expected type of ${name} to be ${type}, but was ${actual}` + ); + } +} + +module.exports = assertType; + +},{"@sinonjs/commons":47}],65:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Returns `true` for iterables + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` looks like an iterable + */ +function isIterable(value) { + return Boolean(value) && typeOf(value.forEach) === "function"; +} + +module.exports = isIterable; + +},{"@sinonjs/commons":47}],66:[function(require,module,exports){ +"use strict"; + +var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; + +var matcherPrototype = require("./matcher-prototype"); + +/** + * Returns `true` when `object` is a matcher + * + * @private + * @param {*} object A value to examine + * @returns {boolean} Returns `true` when `object` is a matcher + */ +function isMatcher(object) { + return isPrototypeOf(matcherPrototype, object); +} + +module.exports = isMatcher; + +},{"./matcher-prototype":68,"@sinonjs/commons":47}],67:[function(require,module,exports){ +"use strict"; + +var every = require("@sinonjs/commons").prototypes.array.every; +var concat = require("@sinonjs/commons").prototypes.array.concat; +var typeOf = require("@sinonjs/commons").typeOf; + +var deepEqualFactory = require("../deep-equal").use; + +var isMatcher = require("./is-matcher"); + +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Matches `actual` with `expectation` + * + * @private + * @param {*} actual A value to examine + * @param {object} expectation An object with properties to match on + * @param {object} matcher A matcher to use for comparison + * @returns {boolean} Returns true when `actual` matches all properties in `expectation` + */ +function matchObject(actual, expectation, matcher) { + var deepEqual = deepEqualFactory(matcher); + if (actual === null || actual === undefined) { + return false; + } + + var expectedKeys = keys(expectation); + /* istanbul ignore else: cannot collect coverage for engine that doesn't support Symbol */ + if (typeOf(getOwnPropertySymbols) === "function") { + expectedKeys = concat(expectedKeys, getOwnPropertySymbols(expectation)); + } + + return every(expectedKeys, function (key) { + var exp = expectation[key]; + var act = actual[key]; + + if (isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (typeOf(exp) === "object") { + if (!matchObject(act, exp, matcher)) { + return false; + } + } else if (!deepEqual(act, exp)) { + return false; + } + + return true; + }); +} + +module.exports = matchObject; + +},{"../deep-equal":70,"./is-matcher":66,"@sinonjs/commons":47}],68:[function(require,module,exports){ +"use strict"; + +var matcherPrototype = { + toString: function () { + return this.message; + }, +}; + +matcherPrototype.or = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var or = Object.create(matcherPrototype); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = `${m1.message}.or(${m2.message})`; + return or; +}; + +matcherPrototype.and = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var and = Object.create(matcherPrototype); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = `${m1.message}.and(${m2.message})`; + return and; +}; + +module.exports = matcherPrototype; + +},{"../create-matcher":61}],69:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var join = require("@sinonjs/commons").prototypes.array.join; +var map = require("@sinonjs/commons").prototypes.array.map; +var stringIndexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var matchObject = require("./match-object"); + +var createTypeMap = function (match) { + return { + function: function (m, expectation, message) { + m.test = expectation; + m.message = message || `match(${functionName(expectation)})`; + }, + number: function (m, expectation) { + m.test = function (actual) { + // we need type coercion here + return expectation == actual; // eslint-disable-line eqeqeq + }; + }, + object: function (m, expectation) { + var array = []; + + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = `match(${functionName(expectation.test)})`; + return m; + } + + array = map(Object.keys(expectation), function (key) { + return `${key}: ${valueToString(expectation[key])}`; + }); + + m.test = function (actual) { + return matchObject(actual, expectation, match); + }; + m.message = `match(${join(array, ", ")})`; + + return m; + }, + regexp: function (m, expectation) { + m.test = function (actual) { + return typeof actual === "string" && expectation.test(actual); + }; + }, + string: function (m, expectation) { + m.test = function (actual) { + return ( + typeof actual === "string" && + stringIndexOf(actual, expectation) !== -1 + ); + }; + m.message = `match("${expectation}")`; + }, + }; +}; + +module.exports = createTypeMap; + +},{"./match-object":67,"@sinonjs/commons":47}],70:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var className = require("@sinonjs/commons").className; +var typeOf = require("@sinonjs/commons").typeOf; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var objectProto = require("@sinonjs/commons").prototypes.object; +var mapForEach = require("@sinonjs/commons").prototypes.map.forEach; + +var getClass = require("./get-class"); +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isArrayType = require("./is-array-type"); +var isDate = require("./is-date"); +var isElement = require("./is-element"); +var isIterable = require("./is-iterable"); +var isMap = require("./is-map"); +var isNaN = require("./is-nan"); +var isObject = require("./is-object"); +var isSet = require("./is-set"); +var isSubset = require("./is-subset"); + +var concat = arrayProto.concat; +var every = arrayProto.every; +var push = arrayProto.push; + +var getTime = Date.prototype.getTime; +var hasOwnProperty = objectProto.hasOwnProperty; +var indexOf = arrayProto.indexOf; +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Deep equal comparison. Two values are "deep equal" when: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``actual`` is deepEqual to the corresponding property in ``expectation`` + * + * Supports cyclic objects. + * + * @alias module:samsam.deepEqual + * @param {*} actual The object to examine + * @param {*} expectation The object actual is expected to be equal to + * @param {object} match A value to match on + * @returns {boolean} Returns true when actual and expectation are considered equal + */ +function deepEqualCyclic(actual, expectation, match) { + // used for cyclic comparison + // contain already visited objects + var actualObjects = []; + var expectationObjects = []; + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + var actualPaths = []; + var expectationPaths = []; + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + var compared = {}; + + // does the recursion for the deep equal check + // eslint-disable-next-line complexity + return (function deepEqual( + actualObj, + expectationObj, + actualPath, + expectationPath + ) { + // If both are matchers they must be the same instance in order to be + // considered equal If we didn't do that we would end up running one + // matcher against the other + if (match && match.isMatcher(expectationObj)) { + if (match.isMatcher(actualObj)) { + return actualObj === expectationObj; + } + return expectationObj.test(actualObj); + } + + var actualType = typeof actualObj; + var expectationType = typeof expectationObj; + + if ( + actualObj === expectationObj || + isNaN(actualObj) || + isNaN(expectationObj) || + actualObj === null || + expectationObj === null || + actualObj === undefined || + expectationObj === undefined || + actualType !== "object" || + expectationType !== "object" + ) { + return identical(actualObj, expectationObj); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(actualObj) || isElement(expectationObj)) { + return false; + } + + var isActualDate = isDate(actualObj); + var isExpectationDate = isDate(expectationObj); + if (isActualDate || isExpectationDate) { + if ( + !isActualDate || + !isExpectationDate || + getTime.call(actualObj) !== getTime.call(expectationObj) + ) { + return false; + } + } + + if (actualObj instanceof RegExp && expectationObj instanceof RegExp) { + if (valueToString(actualObj) !== valueToString(expectationObj)) { + return false; + } + } + + if (actualObj instanceof Promise && expectationObj instanceof Promise) { + return actualObj === expectationObj; + } + + if (actualObj instanceof Error && expectationObj instanceof Error) { + return actualObj === expectationObj; + } + + var actualClass = getClass(actualObj); + var expectationClass = getClass(expectationObj); + var actualKeys = keys(actualObj); + var expectationKeys = keys(expectationObj); + var actualName = className(actualObj); + var expectationName = className(expectationObj); + var expectationSymbols = + typeOf(getOwnPropertySymbols) === "function" + ? getOwnPropertySymbols(expectationObj) + : /* istanbul ignore next: cannot collect coverage for engine that doesn't support Symbol */ + []; + var expectationKeysAndSymbols = concat( + expectationKeys, + expectationSymbols + ); + + if (isArguments(actualObj) || isArguments(expectationObj)) { + if (actualObj.length !== expectationObj.length) { + return false; + } + } else { + if ( + actualType !== expectationType || + actualClass !== expectationClass || + actualKeys.length !== expectationKeys.length || + (actualName && + expectationName && + actualName !== expectationName) + ) { + return false; + } + } + + if (isSet(actualObj) || isSet(expectationObj)) { + if ( + !isSet(actualObj) || + !isSet(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + return isSubset(actualObj, expectationObj, deepEqual); + } + + if (isMap(actualObj) || isMap(expectationObj)) { + if ( + !isMap(actualObj) || + !isMap(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + var mapsDeeplyEqual = true; + mapForEach(actualObj, function (value, key) { + mapsDeeplyEqual = + mapsDeeplyEqual && + deepEqualCyclic(value, expectationObj.get(key)); + }); + + return mapsDeeplyEqual; + } + + var isActualNonArrayIterable = + isIterable(actualObj) && + !isArrayType(actualObj) && + !isArguments(actualObj); + var isExpectationNonArrayIterable = + isIterable(expectation) && + !isArrayType(expectation) && + !isArguments(expectation); + if (isActualNonArrayIterable || isExpectationNonArrayIterable) { + var actualArray = Array.from(actualObj); + var expectationArray = Array.from(expectation); + if (actualArray.length !== expectationArray.length) { + return false; + } + + var arrayDeeplyEquals = true; + every(actualArray, function (key) { + arrayDeeplyEquals = + arrayDeeplyEquals && + deepEqualCyclic(actualArray[key], expectationArray[key]); + }); + + return arrayDeeplyEquals; + } + + return every(expectationKeysAndSymbols, function (key) { + if (!hasOwnProperty(actualObj, key)) { + return false; + } + + var actualValue = actualObj[key]; + var expectationValue = expectationObj[key]; + var actualObject = isObject(actualValue); + var expectationObject = isObject(expectationValue); + // determines, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + var actualIndex = actualObject + ? indexOf(actualObjects, actualValue) + : -1; + var expectationIndex = expectationObject + ? indexOf(expectationObjects, expectationValue) + : -1; + // determines the new paths of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + var newActualPath = + actualIndex !== -1 + ? actualPaths[actualIndex] + : `${actualPath}[${JSON.stringify(key)}]`; + var newExpectationPath = + expectationIndex !== -1 + ? expectationPaths[expectationIndex] + : `${expectationPath}[${JSON.stringify(key)}]`; + var combinedPath = newActualPath + newExpectationPath; + + // stop recursion if current objects are already compared + if (compared[combinedPath]) { + return true; + } + + // remember the current objects and their paths + if (actualIndex === -1 && actualObject) { + push(actualObjects, actualValue); + push(actualPaths, newActualPath); + } + if (expectationIndex === -1 && expectationObject) { + push(expectationObjects, expectationValue); + push(expectationPaths, newExpectationPath); + } + + // remember that the current objects are already compared + if (actualObject && expectationObject) { + compared[combinedPath] = true; + } + + // End of cyclic logic + + // neither actualValue nor expectationValue is a cycle + // continue with next level + return deepEqual( + actualValue, + expectationValue, + newActualPath, + newExpectationPath + ); + }); + })(actual, expectation, "$1", "$2"); +} + +deepEqualCyclic.use = function (match) { + return function deepEqual(a, b) { + return deepEqualCyclic(a, b, match); + }; +}; + +module.exports = deepEqualCyclic; + +},{"./get-class":71,"./identical":72,"./is-arguments":73,"./is-array-type":74,"./is-date":75,"./is-element":76,"./is-iterable":77,"./is-map":78,"./is-nan":79,"./is-object":81,"./is-set":82,"./is-subset":83,"@sinonjs/commons":47}],71:[function(require,module,exports){ +"use strict"; + +var toString = require("@sinonjs/commons").prototypes.object.toString; + +/** + * Returns the internal `Class` by calling `Object.prototype.toString` + * with the provided value as `this`. Return value is a `String`, naming the + * internal class, e.g. "Array" + * + * @private + * @param {*} value - Any value + * @returns {string} - A string representation of the `Class` of `value` + */ +function getClass(value) { + return toString(value).split(/[ \]]/)[1]; +} + +module.exports = getClass; + +},{"@sinonjs/commons":47}],72:[function(require,module,exports){ +"use strict"; + +var isNaN = require("./is-nan"); +var isNegZero = require("./is-neg-zero"); + +/** + * Strict equality check according to EcmaScript Harmony's `egal`. + * + * **From the Harmony wiki:** + * > An `egal` function simply makes available the internal `SameValue` function + * > from section 9.12 of the ES5 spec. If two values are egal, then they are not + * > observably distinguishable. + * + * `identical` returns `true` when `===` is `true`, except for `-0` and + * `+0`, where it returns `false`. Additionally, it returns `true` when + * `NaN` is compared to itself. + * + * @alias module:samsam.identical + * @param {*} obj1 The first value to compare + * @param {*} obj2 The second value to compare + * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise + */ +function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + + return false; +} + +module.exports = identical; + +},{"./is-nan":79,"./is-neg-zero":80}],73:[function(require,module,exports){ +"use strict"; + +var getClass = require("./get-class"); + +/** + * Returns `true` when `object` is an `arguments` object, `false` otherwise + * + * @alias module:samsam.isArguments + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an `arguments` object + */ +function isArguments(object) { + return getClass(object) === "Arguments"; +} + +module.exports = isArguments; + +},{"./get-class":71}],74:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var indexOf = require("@sinonjs/commons").prototypes.array.indexOf; +var map = require("@sinonjs/commons").prototypes.array.map; +var ARRAY_TYPES = require("./array-types"); +var type = require("type-detect"); + +/** + * Returns `true` when `object` is an array type, `false` otherwise + * + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an array type + * @private + */ +function isArrayType(object) { + return indexOf(map(ARRAY_TYPES, functionName), type(object)) !== -1; +} + +module.exports = isArrayType; + +},{"./array-types":60,"@sinonjs/commons":47,"type-detect":111}],75:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is an instance of Date + * + * @private + * @param {Date} value The value to examine + * @returns {boolean} `true` when `value` is an instance of Date + */ +function isDate(value) { + return value instanceof Date; +} + +module.exports = isDate; + +},{}],76:[function(require,module,exports){ +"use strict"; + +var div = typeof document !== "undefined" && document.createElement("div"); + +/** + * Returns `true` when `object` is a DOM element node. + * + * Unlike Underscore.js/lodash, this function will return `false` if `object` + * is an *element-like* object, i.e. a regular object with a `nodeType` + * property that holds the value `1`. + * + * @alias module:samsam.isElement + * @param {object} object The object to examine + * @returns {boolean} Returns `true` for DOM element nodes + */ +function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { + return false; + } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; +} + +module.exports = isElement; + +},{}],77:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an iterable, `false` otherwise + * + * @alias module:samsam.isIterable + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise + */ +function isIterable(val) { + // checks for null and undefined + if (typeof val !== "object") { + return false; + } + return typeof val[Symbol.iterator] === "function"; +} + +module.exports = isIterable; + +},{}],78:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is a Map + * + * @param {*} value A value to examine + * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise + * @private + */ +function isMap(value) { + return typeof Map !== "undefined" && value instanceof Map; +} + +module.exports = isMap; + +},{}],79:[function(require,module,exports){ +"use strict"; + +/** + * Compares a `value` to `NaN` + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `NaN` + */ +function isNaN(value) { + // Unlike global `isNaN`, this function avoids type coercion + // `typeof` check avoids IE host object issues, hat tip to + // lodash + + // eslint-disable-next-line no-self-compare + return typeof value === "number" && value !== value; +} + +module.exports = isNaN; + +},{}],80:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is `-0` + * + * @alias module:samsam.isNegZero + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `-0` + */ +function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; +} + +module.exports = isNegZero; + +},{}],81:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the value is a regular Object and not a specialized Object + * + * This helps speed up deepEqual cyclic checks + * + * The premise is that only Objects are stored in the visited array. + * So if this function returns false, we don't have to do the + * expensive operation of searching for the value in the the array of already + * visited objects + * + * @private + * @param {object} value The object to examine + * @returns {boolean} `true` when the object is a non-specialised object + */ +function isObject(value) { + return ( + typeof value === "object" && + value !== null && + // none of these are collection objects, so we can return false + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Error) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String) + ); +} + +module.exports = isObject; + +},{}],82:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an instance of Set, `false` otherwise + * + * @alias module:samsam.isSet + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise + */ +function isSet(val) { + return (typeof Set !== "undefined" && val instanceof Set) || false; +} + +module.exports = isSet; + +},{}],83:[function(require,module,exports){ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.set.forEach; + +/** + * Returns `true` when `s1` is a subset of `s2`, `false` otherwise + * + * @private + * @param {Array|Set} s1 The target value + * @param {Array|Set} s2 The containing value + * @param {Function} compare A comparison function, should return `true` when + * values are considered equal + * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise + */ +function isSubset(s1, s2, compare) { + var allContained = true; + forEach(s1, function (v1) { + var includes = false; + forEach(s2, function (v2) { + if (compare(v2, v1)) { + includes = true; + } + }); + allContained = allContained && includes; + }); + + return allContained; +} + +module.exports = isSubset; + +},{"@sinonjs/commons":47}],84:[function(require,module,exports){ +"use strict"; + +var slice = require("@sinonjs/commons").prototypes.string.slice; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +/** + * Creates a string represenation of an iterable object + * + * @private + * @param {object} obj The iterable object to stringify + * @returns {string} A string representation + */ +function iterableToString(obj) { + if (typeOf(obj) === "map") { + return mapToString(obj); + } + + return genericIterableToString(obj); +} + +/** + * Creates a string representation of a Map + * + * @private + * @param {Map} map The map to stringify + * @returns {string} A string representation + */ +function mapToString(map) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + map.forEach(function (value, key) { + representation += `[${stringify(key)},${stringify(value)}],`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Create a string represenation for an iterable + * + * @private + * @param {object} iterable The iterable to stringify + * @returns {string} A string representation + */ +function genericIterableToString(iterable) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + iterable.forEach(function (value) { + representation += `${stringify(value)},`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Creates a string representation of the passed `item` + * + * @private + * @param {object} item The item to stringify + * @returns {string} A string representation of `item` + */ +function stringify(item) { + return typeof item === "string" ? `'${item}'` : valueToString(item); +} + +module.exports = iterableToString; + +},{"@sinonjs/commons":47}],85:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var indexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var forEach = require("@sinonjs/commons").prototypes.array.forEach; +var type = require("type-detect"); + +var engineCanCompareMaps = typeof Array.from === "function"; +var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define +var isArrayType = require("./is-array-type"); +var isSubset = require("./is-subset"); +var createMatcher = require("./create-matcher"); + +/** + * Returns true when `array` contains all of `subset` as defined by the `compare` + * argument + * + * @param {Array} array An array to search for a subset + * @param {Array} subset The subset to find in the array + * @param {Function} compare A comparison function + * @returns {boolean} [description] + * @private + */ +function arrayContains(array, subset, compare) { + if (subset.length === 0) { + return true; + } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (compare(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (i + j >= l) { + return false; + } + if (!compare(array[i + j], subset[j])) { + return false; + } + } + return true; + } + } + return false; +} + +/* eslint-disable complexity */ +/** + * Matches an object with a matcher (or value) + * + * @alias module:samsam.match + * @param {object} object The object candidate to match + * @param {object} matcherOrValue A matcher or value to match against + * @returns {boolean} true when `object` matches `matcherOrValue` + */ +function match(object, matcherOrValue) { + if (matcherOrValue && typeof matcherOrValue.test === "function") { + return matcherOrValue.test(object); + } + + switch (type(matcherOrValue)) { + case "bigint": + case "boolean": + case "number": + case "symbol": + return matcherOrValue === object; + case "function": + return matcherOrValue(object) === true; + case "string": + var notNull = typeof object === "string" || Boolean(object); + return ( + notNull && + indexOf( + valueToString(object).toLowerCase(), + matcherOrValue.toLowerCase() + ) >= 0 + ); + case "null": + return object === null; + case "undefined": + return typeof object === "undefined"; + case "Date": + /* istanbul ignore else */ + if (type(object) === "Date") { + return object.getTime() === matcherOrValue.getTime(); + } + /* istanbul ignore next: this is basically the rest of the function, which is covered */ + break; + case "Array": + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + return ( + isArrayType(matcherOrValue) && + arrayContains(object, matcherOrValue, match) + ); + case "Map": + /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ + if (!engineCanCompareMaps) { + throw new Error( + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + ); + } + + return ( + type(object) === "Map" && + arrayContains( + Array.from(object), + Array.from(matcherOrValue), + match + ) + ); + default: + break; + } + + switch (type(object)) { + case "null": + return false; + case "Set": + return isSubset(matcherOrValue, object, match); + default: + break; + } + + /* istanbul ignore else */ + if (matcherOrValue && typeof matcherOrValue === "object") { + if (matcherOrValue === object) { + return true; + } + if (typeof object !== "object") { + return false; + } + var prop; + // eslint-disable-next-line guard-for-in + for (prop in matcherOrValue) { + var value = object[prop]; + if ( + typeof value === "undefined" && + typeof object.getAttribute === "function" + ) { + value = object.getAttribute(prop); + } + if ( + matcherOrValue[prop] === null || + typeof matcherOrValue[prop] === "undefined" + ) { + if (value !== matcherOrValue[prop]) { + return false; + } + } else if ( + typeof value === "undefined" || + !deepEqual(value, matcherOrValue[prop]) + ) { + return false; + } + } + return true; + } + + /* istanbul ignore next */ + throw new Error("Matcher was an unknown or unsupported type"); +} +/* eslint-enable complexity */ + +forEach(Object.keys(createMatcher), function (key) { + match[key] = createMatcher[key]; +}); + +module.exports = match; + +},{"./create-matcher":61,"./deep-equal":70,"./is-array-type":74,"./is-subset":83,"@sinonjs/commons":47,"type-detect":111}],86:[function(require,module,exports){ +"use strict"; + +/** + * @module samsam + */ +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isElement = require("./is-element"); +var isNegZero = require("./is-neg-zero"); +var isSet = require("./is-set"); +var isMap = require("./is-map"); +var match = require("./match"); +var deepEqualCyclic = require("./deep-equal").use(match); +var createMatcher = require("./create-matcher"); + +module.exports = { + createMatcher: createMatcher, + deepEqual: deepEqualCyclic, + identical: identical, + isArguments: isArguments, + isElement: isElement, + isMap: isMap, + isNegZero: isNegZero, + isSet: isSet, + match: match, +}; + +},{"./create-matcher":61,"./deep-equal":70,"./identical":72,"./is-arguments":73,"./is-element":76,"./is-map":78,"./is-neg-zero":80,"./is-set":82,"./match":85}],87:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; + +},{"./lib/encoding.js":89}],88:[function(require,module,exports){ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{}],89:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // If we're in node require encoding-indexes and attach it to the global. + if (typeof module !== "undefined" && module.exports && + !global["encoding-indexes"]) { + global["encoding-indexes"] = + require("./encoding-indexes.js")["encoding-indexes"]; + } + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (!global['TextEncoder']) + global['TextEncoder'] = TextEncoder; + if (!global['TextDecoder']) + global['TextDecoder'] = TextDecoder; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: global['TextEncoder'], + TextDecoder: global['TextDecoder'], + EncodingIndexes: global["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{"./encoding-indexes.js":88}],90:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],91:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],92:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +},{"./support/isBuffer":91,"inherits":90}],93:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.Diff = {})); +}(this, (function (exports) { 'use strict'; + + function Diff() {} + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } + + // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } + + // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } + + // See: http://code.google.com/p/google-diff-match-patch/wiki/API + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],94:[function(require,module,exports){ +module.exports = extend; + +/* + var obj = {a: 3, b: 5}; + extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 4, b: 5, c: 8} + + var obj = {a: 3, b: 5}; + extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 3, b: 5} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3]} + + extend({a: 4, b: 5}); // {a: 4, b: 5} + extend({a: 4, b: 5}, 3); {a: 4, b: 5} + extend({a: 4, b: 5}, true); {a: 4, b: 5} + extend('hello', {a: 4, b: 5}); // throws + extend(3, {a: 4, b: 5}); // throws +*/ + +function extend(/* [deep], obj1, obj2, [objn] */) { + var args = [].slice.call(arguments); + var deep = false; + if (typeof args[0] == 'boolean') { + deep = args.shift(); + } + var result = args[0]; + if (isUnextendable(result)) { + throw new Error('extendee must be an object'); + } + var extenders = args.slice(1); + var len = extenders.length; + for (var i = 0; i < len; i++) { + var extender = extenders[i]; + for (var key in extender) { + if (Object.prototype.hasOwnProperty.call(extender, key)) { + var value = extender[key]; + if (deep && isCloneable(value)) { + var base = Array.isArray(value) ? [] : {}; + result[key] = extend( + true, + Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key]) + ? result[key] + : base, + value + ); + } else { + result[key] = value; + } + } + } + } + return result; +} + +function isCloneable(obj) { + return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]'; +} + +function isUnextendable(val) { + return !val || (typeof val != 'object' && typeof val != 'function'); +} + +},{}],95:[function(require,module,exports){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + +},{}],96:[function(require,module,exports){ +"use strict"; + +// cache a reference to setTimeout, so that our reference won't be stubbed out +// when using fake timers and errors will still get logged +// https://github.com/cjohansen/Sinon.JS/issues/381 +var realSetTimeout = setTimeout; + +function configureLogger(config) { + // eslint-disable-next-line no-param-reassign + config = config || {}; + // Function which prints errors. + if (!config.hasOwnProperty("logger")) { + // eslint-disable-next-line no-empty-function + config.logger = function() {}; + } + // When set to true, any errors logged will be thrown immediately; + // If set to false, the errors will be thrown in separate execution frame. + if (!config.hasOwnProperty("useImmediateExceptions")) { + config.useImmediateExceptions = true; + } + // wrap realSetTimeout with something we can stub in tests + if (!config.hasOwnProperty("setTimeout")) { + config.setTimeout = realSetTimeout; + } + + return function logError(label, e) { + var msg = `${label} threw exception: `; + var err = { + name: e.name || label, + message: e.message || e.toString(), + stack: e.stack + }; + + function throwLoggedError() { + err.message = msg + err.message; + throw err; + } + + config.logger(`${msg}[${err.name}] ${err.message}`); + + if (err.stack) { + config.logger(err.stack); + } + + if (config.useImmediateExceptions) { + throwLoggedError(); + } else { + config.setTimeout(throwLoggedError, 0); + } + }; +} + +module.exports = configureLogger; + +},{}],97:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; +} + +CustomEvent.prototype = new Event(); + +CustomEvent.prototype.constructor = CustomEvent; + +module.exports = CustomEvent; + +},{"./event":99}],98:[function(require,module,exports){ +"use strict"; + +function flattenOptions(options) { + if (options !== Object(options)) { + return { + capture: Boolean(options), + once: false, + passive: false + }; + } + return { + capture: Boolean(options.capture), + once: Boolean(options.once), + passive: Boolean(options.passive) + }; +} +function not(fn) { + return function() { + return !fn.apply(this, arguments); + }; +} +function hasListenerFilter(listener, capture) { + return function(listenerSpec) { + return ( + listenerSpec.capture === capture && + listenerSpec.listener === listener + ); + }; +} + +var EventTarget = { + // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener + addEventListener: function addEventListener( + event, + listener, + providedOptions + ) { + // 3. Let capture, passive, and once be the result of flattening more options. + // Flatten property before executing step 2, + // feture detection is usually based on registering handler with options object, + // that has getter defined + // addEventListener("load", () => {}, { + // get once() { supportsOnce = true; } + // }); + var options = flattenOptions(providedOptions); + + // 2. If callback is null, then return. + if (listener === null || listener === undefined) { + return; + } + + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + + // 4. If context object’s associated list of event listener + // does not contain an event listener whose type is type, + // callback is callback, and capture is capture, then append + // a new event listener to it, whose type is type, callback is + // callback, capture is capture, passive is passive, and once is once. + if ( + !this.eventListeners[event].some( + hasListenerFilter(listener, options.capture) + ) + ) { + this.eventListeners[event].push({ + listener: listener, + capture: options.capture, + once: options.once + }); + } + }, + + // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener + removeEventListener: function removeEventListener( + event, + listener, + providedOptions + ) { + if (!this.eventListeners || !this.eventListeners[event]) { + return; + } + + // 2. Let capture be the result of flattening options. + var options = flattenOptions(providedOptions); + + // 3. If there is an event listener in the associated list of + // event listeners whose type is type, callback is callback, + // and capture is capture, then set that event listener’s + // removed to true and remove it from the associated list of event listeners. + this.eventListeners[event] = this.eventListeners[event].filter( + not(hasListenerFilter(listener, options.capture)) + ); + }, + + dispatchEvent: function dispatchEvent(event) { + if (!this.eventListeners || !this.eventListeners[event.type]) { + return Boolean(event.defaultPrevented); + } + + var self = this; + var type = event.type; + var listeners = self.eventListeners[type]; + + // Remove listeners, that should be dispatched once + // before running dispatch loop to avoid nested dispatch issues + self.eventListeners[type] = listeners.filter(function(listenerSpec) { + return !listenerSpec.once; + }); + listeners.forEach(function(listenerSpec) { + var listener = listenerSpec.listener; + if (typeof listener === "function") { + listener.call(self, event); + } else { + listener.handleEvent(event); + } + }); + + return Boolean(event.defaultPrevented); + } +}; + +module.exports = EventTarget; + +},{}],99:[function(require,module,exports){ +"use strict"; + +function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); +} + +Event.prototype = { + initEvent: function(type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + this.currentTarget = target; + }, + + // eslint-disable-next-line no-empty-function + stopPropagation: function() {}, + + preventDefault: function() { + this.defaultPrevented = true; + } +}; + +module.exports = Event; + +},{}],100:[function(require,module,exports){ +"use strict"; + +module.exports = { + Event: require("./event"), + ProgressEvent: require("./progress-event"), + CustomEvent: require("./custom-event"), + EventTarget: require("./event-target") +}; + +},{"./custom-event":97,"./event":99,"./event-target":98,"./progress-event":101}],101:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = + typeof progressEventRaw.loaded === "number" + ? progressEventRaw.loaded + : null; + this.total = + typeof progressEventRaw.total === "number" + ? progressEventRaw.total + : null; + this.lengthComputable = Boolean(progressEventRaw.total); +} + +ProgressEvent.prototype = new Event(); + +ProgressEvent.prototype.constructor = ProgressEvent; + +module.exports = ProgressEvent; + +},{"./event":99}],102:[function(require,module,exports){ +"use strict"; + +var FakeTimers = require("@sinonjs/fake-timers"); +var fakeServer = require("./index"); + +// eslint-disable-next-line no-empty-function +function Server() {} +Server.prototype = fakeServer; + +var fakeServerWithClock = new Server(); + +fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = FakeTimers.install(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return fakeServer.addRequest.call(this, xhr); +}; + +fakeServerWithClock.respond = function respond() { + var returnVal = fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.uninstall(); + this.resetClock = false; + } + } + + return returnVal; +}; + +fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.uninstall(); + } + + return fakeServer.restore.apply(this, arguments); +}; + +module.exports = fakeServerWithClock; + +},{"./index":103,"@sinonjs/fake-timers":59}],103:[function(require,module,exports){ +"use strict"; + +var fakeXhr = require("../fake-xhr"); +var push = [].push; +var log = require("./log"); +var configureLogError = require("../configure-logger"); +var pathToRegexp = require("path-to-regexp"); + +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + +function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] !== "string") { + if (!supportsArrayBuffer) { + throw new TypeError( + `Fake server response body should be a string, but was ${typeof response[2]}` + ); + } else if (!(response[2] instanceof ArrayBuffer)) { + throw new TypeError( + `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}` + ); + } + } + + return response; +} + +function getDefaultWindowLocation() { + var winloc = { + hostname: "localhost", + port: process.env.PORT || 80, + protocol: "http:" + }; + winloc.host = + winloc.hostname + + (String(winloc.port) === "80" ? "" : `:${winloc.port}`); + return winloc; +} + +function getWindowLocation() { + if (typeof window === "undefined") { + // Fallback + return getDefaultWindowLocation(); + } + + if (typeof window.location !== "undefined") { + // Browsers place location on window + return window.location; + } + + if ( + typeof window.window !== "undefined" && + typeof window.window.location !== "undefined" + ) { + // React Native on Android places location on window.window + return window.window.location; + } + + return getDefaultWindowLocation(); +} + +function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = + !url || + url === reqUrl || + (typeof url.test === "function" && url.test(reqUrl)) || + (typeof url === "function" && url(reqUrl) === true); + + return matchMethod && matchUrl; +} + +function match(response, request) { + var wloc = getWindowLocation(); + + var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`); + + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, "/"); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat( + ru && typeof ru.exec === "function" + ? ru.exec(requestUrl).slice(1) + : [] + ); + return response.response.apply(response, args); + } + + return true; + } + + return false; +} + +function incrementRequestCount() { + var count = ++this.requestCount; + + this.requested = true; + + this.requestedOnce = count === 1; + this.requestedTwice = count === 2; + this.requestedThrice = count === 3; + + this.firstRequest = this.getRequest(0); + this.secondRequest = this.getRequest(1); + this.thirdRequest = this.getRequest(2); + + this.lastRequest = this.getRequest(count - 1); +} + +var fakeServer = { + create: function(config) { + var server = Object.create(this); + server.configure(config); + this.xhr = fakeXhr.useFakeXMLHttpRequest(); + server.requests = []; + server.requestCount = 0; + server.queue = []; + server.responses = []; + + this.xhr.onCreate = function(xhrObj) { + xhrObj.unsafeHeadersEnabled = function() { + return !(server.unsafeHeadersEnabled === false); + }; + server.addRequest(xhrObj); + }; + + return server; + }, + + configure: function(config) { + var self = this; + var allowlist = { + autoRespond: true, + autoRespondAfter: true, + respondImmediately: true, + fakeHTTPMethods: true, + logger: true, + unsafeHeadersEnabled: true + }; + + // eslint-disable-next-line no-param-reassign + config = config || {}; + + Object.keys(config).forEach(function(setting) { + if (setting in allowlist) { + self[setting] = config[setting]; + } + }); + + self.logError = configureLogError(config); + }, + + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + incrementRequestCount.call(this); + + xhrObj.onSend = function() { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function() { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match( + /_method=([^\b;]+)/ + ); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + logger: function() { + // no-op; override via configure() + }, + + logError: configureLogError({}), + + log: log, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (arguments.length === 1) { + // eslint-disable-next-line no-param-reassign + body = method; + // eslint-disable-next-line no-param-reassign + url = method = null; + } + + if (arguments.length === 2) { + // eslint-disable-next-line no-param-reassign + body = url; + // eslint-disable-next-line no-param-reassign + url = method; + // eslint-disable-next-line no-param-reassign + method = null; + } + + // Escape port number to prevent "named" parameters in 'path-to-regexp' module + if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) { + var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/); + // eslint-disable-next-line no-param-reassign + url = `${m[1]}\\:${m[2]}`; + } + + push.call(this.responses, { + method: method, + url: + typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + response: typeof body === "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var self = this; + + requests.forEach(function(request) { + self.processRequest(request); + }); + }, + + respondAll: function respondAll() { + if (this.respondImmediately) { + return; + } + + this.queue = this.requests.slice(0); + + var request; + while ((request = this.queue.shift())) { + this.processRequest(request); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + this.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + }, + + getRequest: function getRequest(index) { + return this.requests[index] || null; + }, + + reset: function reset() { + this.resetBehavior(); + this.resetHistory(); + }, + + resetBehavior: function resetBehavior() { + this.responses.length = this.queue.length = 0; + }, + + resetHistory: function resetHistory() { + this.requests.length = this.requestCount = 0; + + this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false; + + this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null; + } +}; + +module.exports = fakeServer; + +},{"../configure-logger":96,"../fake-xhr":106,"./log":104,"path-to-regexp":108}],104:[function(require,module,exports){ +"use strict"; +var inspect = require("util").inspect; + +function log(response, request) { + var str; + + str = `Request:\n${inspect(request)}\n\n`; + str += `Response:\n${inspect(response)}\n\n`; + + /* istanbul ignore else: when this.logger is not a function, it can't be called */ + if (typeof this.logger === "function") { + this.logger(str); + } +} + +module.exports = log; + +},{"util":92}],105:[function(require,module,exports){ +"use strict"; + +exports.isSupported = (function() { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } +})(); + +},{}],106:[function(require,module,exports){ +"use strict"; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var globalObject = require("@sinonjs/commons").global; +var configureLogError = require("../configure-logger"); +var sinonEvent = require("../event"); +var extend = require("just-extend"); + +var supportsProgress = typeof ProgressEvent !== "undefined"; +var supportsCustomEvent = typeof CustomEvent !== "undefined"; +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; + +function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function() { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); + }; + } + + return false; +} + +// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name +var unsafeHeaders = { + "Accept-Charset": true, + "Access-Control-Request-Headers": true, + "Access-Control-Request-Method": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + DNT: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Origin: true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true +}; + +function EventTargetHandler() { + var self = this; + var events = [ + "loadstart", + "progress", + "abort", + "error", + "load", + "timeout", + "loadend" + ]; + + function addEventListener(eventName) { + self.addEventListener(eventName, function(event) { + var listener = self[`on${eventName}`]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); + } + + events.forEach(addEventListener); +} + +EventTargetHandler.prototype = sinonEvent.EventTarget; + +function normalizeHeaderValue(value) { + // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes + /*eslint no-control-regex: "off"*/ + return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, ""); +} + +function getHeader(headers, header) { + var foundHeader = Object.keys(headers).filter(function(h) { + return h.toLowerCase() === header.toLowerCase(); + }); + + return foundHeader[0] || null; +} + +function excludeSetCookie2Header(header) { + return !/^Set-Cookie2?$/i.test(header); +} + +function verifyResponseBodyType(body, responseType) { + var error = null; + var isString = typeof body === "string"; + + if (responseType === "arraybuffer") { + if (!isString && !(body instanceof ArrayBuffer)) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.` + ); + error.name = "InvalidBodyException"; + } + } else if (responseType === "blob") { + if ( + !isString && + !(body instanceof ArrayBuffer) && + supportsBlob && + !(body instanceof Blob) + ) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.` + ); + error.name = "InvalidBodyException"; + } + } else if (!isString) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.` + ); + error.name = "InvalidBodyException"; + } + + if (error) { + throw error; + } +} + +function convertToArrayBuffer(body, encoding) { + if (body instanceof ArrayBuffer) { + return body; + } + + return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer; +} + +function isXmlContentType(contentType) { + return ( + !contentType || + /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType) + ); +} + +function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; + } + xhr.responseXML = null; +} + +function fakeXMLHttpRequestFor(globalScope) { + var isReactNative = + globalScope.navigator && + globalScope.navigator.product === "ReactNative"; + var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject; + sinonXhr.supportsActiveX = + typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(globalScope); + sinonXhr.supportsTimeout = + sinonXhr.supportsXHR && + "timeout" in new sinonXhr.GlobalXMLHttpRequest(); + sinonXhr.supportsCORS = + isReactNative || + (sinonXhr.supportsXHR && + "withCredentials" in new sinonXhr.GlobalXMLHttpRequest()); + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest(config) { + EventTargetHandler.call(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new EventTargetHandler(); + this.responseType = ""; + this.response = ""; + this.logError = configureLogError(config); + + if (sinonXhr.supportsTimeout) { + this.timeout = 0; + } + + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + // largest arity in XHR is 5 - XHR#open + var apply = function(obj, method, args) { + switch (args.length) { + case 0: + return obj[method](); + case 1: + return obj[method](args[0]); + case 2: + return obj[method](args[0], args[1]); + case 3: + return obj[method](args[0], args[1], args[2]); + case 4: + return obj[method](args[0], args[1], args[2], args[3]); + case 5: + return obj[method](args[0], args[1], args[2], args[3], args[4]); + default: + throw new Error("Unhandled case"); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + [ + "open", + "setRequestHeader", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ].forEach(function(method) { + fakeXhr[method] = function() { + return apply(xhr, method, arguments); + }; + }); + + fakeXhr.send = function() { + // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute + if (xhr.responseType !== fakeXhr.responseType) { + xhr.responseType = fakeXhr.responseType; + } + return apply(xhr, "send", arguments); + }; + + var copyAttrs = function(args) { + args.forEach(function(attr) { + fakeXhr[attr] = xhr[attr]; + }); + }; + + var stateChangeStart = function() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["response"]); + if (xhr.responseType === "" || xhr.responseType === "text") { + copyAttrs(["responseText"]); + } + } + if ( + xhr.readyState === FakeXMLHttpRequest.DONE && + (xhr.responseType === "" || xhr.responseType === "document") + ) { + copyAttrs(["responseXML"]); + } + }; + + var stateChangeEnd = function() { + if (fakeXhr.onreadystatechange) { + // eslint-disable-next-line no-useless-call + fakeXhr.onreadystatechange.call(fakeXhr, { + target: fakeXhr, + currentTarget: fakeXhr + }); + } + }; + + var stateChange = function stateChange() { + stateChangeStart(); + stateChangeEnd(); + }; + + if (xhr.addEventListener) { + xhr.addEventListener("readystatechange", stateChangeStart); + + Object.keys(fakeXhr.eventListeners).forEach(function(event) { + /*eslint-disable no-loop-func*/ + fakeXhr.eventListeners[event].forEach(function(handler) { + xhr.addEventListener(event, handler.listener, { + capture: handler.capture, + once: handler.once + }); + }); + /*eslint-enable no-loop-func*/ + }); + + xhr.addEventListener("readystatechange", stateChangeEnd); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error(`INVALID_STATE_ERR - ${xhr.readyState}`); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if ( + xhr.async && + xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED + ) { + throw new Error("No headers received"); + } + } + + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + if (body instanceof Blob) { + return body; + } + + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; + } + throw new Error(`Invalid responseType ${responseType}`); + } + + /** + * Steps to follow when there is an error, according to: + * https://xhr.spec.whatwg.org/#request-error-steps + */ + function requestErrorSteps(xhr) { + clearResponse(xhr); + xhr.errorFlag = true; + xhr.requestHeaders = {}; + xhr.responseHeaders = {}; + + if ( + xhr.readyState !== FakeXMLHttpRequest.UNSENT && + xhr.sendFlag && + xhr.readyState !== FakeXMLHttpRequest.DONE + ) { + xhr.readyStateChange(FakeXMLHttpRequest.DONE); + xhr.sendFlag = false; + } + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + var parsererrorNS = ""; + + try { + var parsererrors = parser + .parseFromString("INVALID", "text/xml") + .getElementsByTagName("parsererror"); + if (parsererrors.length) { + parsererrorNS = parsererrors[0].namespaceURI; + } + } catch (e) { + // passing invalid XML makes IE11 throw + // so no namespace needs to be determined + } + + var result; + try { + result = parser.parseFromString(text, "text/xml"); + } catch (err) { + return null; + } + + return result.getElementsByTagNameNS( + parsererrorNS, + "parsererror" + ).length + ? null + : result; + } + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = FakeXMLHttpRequest.filters.some(function(filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + FakeXMLHttpRequest.defake(this, arguments); + return; + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + var readyStateChangeEvent = new sinonEvent.Event( + "readystatechange", + false, + false, + this + ); + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + this.logError("Fake XHR onreadystatechange handler", e); + } + } + + if (this.readyState !== FakeXMLHttpRequest.DONE) { + this.dispatchEvent(readyStateChangeEvent); + } else { + var event, progress; + + if (this.timedOut || this.aborted || this.status === 0) { + progress = { loaded: 0, total: 0 }; + event = + (this.timedOut && "timeout") || + (this.aborted && "abort") || + "error"; + } else { + progress = { loaded: 100, total: 100 }; + event = "load"; + } + + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + + this.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.dispatchEvent(readyStateChangeEvent); + this.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + }, + + // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method + setRequestHeader: function setRequestHeader(header, value) { + if (typeof value !== "string") { + throw new TypeError( + `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}` + ); + } + verifyState(this); + + var checkUnsafeHeaders = true; + if (typeof this.unsafeHeadersEnabled === "function") { + checkUnsafeHeaders = this.unsafeHeadersEnabled(); + } + + if ( + checkUnsafeHeaders && + (getHeader(unsafeHeaders, header) !== null || + /^(Sec-|Proxy-)/i.test(header)) + ) { + throw new Error( + // eslint-disable-next-line quotes + `Refused to set unsafe header "${header}"` + ); + } + + // eslint-disable-next-line no-param-reassign + value = normalizeHeaderValue(value); + + var existingHeader = getHeader(this.requestHeaders, header); + if (existingHeader) { + this.requestHeaders[existingHeader] += `, ${value}`; + } else { + this.requestHeaders[header] = value; + } + }, + + setStatus: function setStatus(status) { + var sanitizedStatus = typeof status === "number" ? status : 200; + + verifyRequestOpened(this); + this.status = sanitizedStatus; + this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus]; + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + + var responseHeaders = (this.responseHeaders = {}); + + Object.keys(headers).forEach(function(header) { + responseHeaders[header] = headers[header]; + }); + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(head)$/i.test(this.method)) { + var contentType = getHeader( + this.requestHeaders, + "Content-Type" + ); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[ + contentType + ] = `${value[0]};charset=utf-8`; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = + "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + + // Only listen if setInterval and Date are a stubbed. + if ( + sinonXhr.supportsTimeout && + typeof setInterval.clock === "object" && + typeof Date.clock === "object" + ) { + var initiatedTime = Date.now(); + var self = this; + + // Listen to any possible tick by fake timers and check to see if timeout has + // been exceeded. It's important to note that timeout can be changed while a request + // is in flight, so we must check anytime the end user forces a clock tick to make + // sure timeout hasn't changed. + // https://xhr.spec.whatwg.org/#dfnReturnLink-2 + var clearIntervalId = setInterval(function() { + // Check if the readyState has been reset or is done. If this is the case, there + // should be no timeout. This will also prevent aborted requests and + // fakeServerWithClock from triggering unnecessary responses. + if ( + self.readyState === FakeXMLHttpRequest.UNSENT || + self.readyState === FakeXMLHttpRequest.DONE + ) { + clearInterval(clearIntervalId); + } else if ( + typeof self.timeout === "number" && + self.timeout > 0 + ) { + if (Date.now() >= initiatedTime + self.timeout) { + self.triggerTimeout(); + clearInterval(clearIntervalId); + } + } + }, 1); + } + + this.dispatchEvent( + new sinonEvent.Event("loadstart", false, false, this) + ); + }, + + abort: function abort() { + this.aborted = true; + requestErrorSteps(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + }, + + error: function() { + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + triggerTimeout: function triggerTimeout() { + if (sinonXhr.supportsTimeout) { + this.timedOut = true; + requestErrorSteps(this); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + // eslint-disable-next-line no-param-reassign + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var responseHeaders = this.responseHeaders; + var headers = Object.keys(responseHeaders) + .filter(excludeSetCookie2Header) + .reduce(function(prev, header) { + var value = responseHeaders[header]; + + return `${prev}${header}: ${value}\r\n`; + }, ""); + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body, this.responseType); + var contentType = + this.overriddenMimeType || + this.getResponseHeader("Content-Type"); + + var isTextResponse = + this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring( + index, + index + chunkSize + ); + } + index += chunkSize; + } while (index < body.length); + } + + this.response = convertResponseBody( + this.responseType, + contentType, + body + ); + if (isTextResponse) { + this.responseText = this.response; + } + + if (this.responseType === "document") { + this.responseXML = this.response; + } else if ( + this.responseType === "" && + isXmlContentType(contentType) + ) { + this.responseXML = FakeXMLHttpRequest.parseXML( + this.responseText + ); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.responseURL = this.url; + + this.setStatus(status); + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this.upload + ) + ); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this + ) + ); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent( + new sinonEvent.CustomEvent("error", { detail: error }) + ); + } + }, + + overrideMimeType: function overrideMimeType(type) { + if (this.readyState >= FakeXMLHttpRequest.LOADING) { + throw new Error("INVALID_STATE_ERR"); + } + this.overriddenMimeType = type; + } + }); + + var states = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }; + + extend(FakeXMLHttpRequest, states); + extend(FakeXMLHttpRequest.prototype, states); + + function useFakeXMLHttpRequest() { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = function ActiveXObject(objId) { + if ( + objId === "Microsoft.XMLHTTP" || + /^Msxml2\.XMLHTTP/i.test(objId) + ) { + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + } + + return { + xhr: sinonXhr, + FakeXMLHttpRequest: FakeXMLHttpRequest, + useFakeXMLHttpRequest: useFakeXMLHttpRequest + }; +} + +module.exports = extend(fakeXMLHttpRequestFor(globalObject), { + fakeXMLHttpRequestFor: fakeXMLHttpRequestFor +}); + +},{"../configure-logger":96,"../event":100,"./blob":105,"@sinonjs/commons":47,"@sinonjs/text-encoding":87,"just-extend":94}],107:[function(require,module,exports){ +"use strict"; + +module.exports = { + fakeServer: require("./fake-server"), + fakeServerWithClock: require("./fake-server/fake-server-with-clock"), + fakeXhr: require("./fake-xhr") +}; + +},{"./fake-server":103,"./fake-server/fake-server-with-clock":102,"./fake-xhr":106}],108:[function(require,module,exports){ +var isarray = require('isarray') + +/** + * Expose `pathToRegexp`. + */ +module.exports = pathToRegexp +module.exports.parse = parse +module.exports.compile = compile +module.exports.tokensToFunction = tokensToFunction +module.exports.tokensToRegExp = tokensToRegExp + +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g') + +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = [] + var key = 0 + var index = 0 + var path = '' + var defaultDelimiter = options && options.delimiter || '/' + var res + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0] + var escaped = res[1] + var offset = res.index + path += str.slice(index, offset) + index = offset + m.length + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1] + continue + } + + var next = str[index] + var prefix = res[2] + var name = res[3] + var capture = res[4] + var group = res[5] + var modifier = res[6] + var asterisk = res[7] + + // Push the current path onto the tokens. + if (path) { + tokens.push(path) + path = '' + } + + var partial = prefix != null && next != null && next !== prefix + var repeat = modifier === '+' || modifier === '*' + var optional = modifier === '?' || modifier === '*' + var delimiter = res[2] || defaultDelimiter + var pattern = capture || group + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }) + } + + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index) + } + + // If the path exists, push it onto the end. + if (path) { + tokens.push(path) + } + + return tokens +} + +/** + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} + */ +function compile (str, options) { + return tokensToFunction(parse(str, options), options) +} + +/** + * Prettier encoding of URI path segments. + * + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. + * + * @param {string} + * @return {string} + */ +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens, options) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length) + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) + } + } + + return function (obj, opts) { + var path = '' + var data = obj || {} + var options = opts || {} + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + path += token + + continue + } + + var value = data[token.name] + var segment + + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix + } + + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } + + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') + } + + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } + + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } + + path += (j === 0 ? token.prefix : token.delimiter) + segment + } + + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment + } + + return path + } +} + +/** + * Escape a regular expression string. + * + * @param {string} str + * @return {string} + */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys + return re +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options && options.sensitive ? '' : 'i' +} + +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g) + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }) + } + } + + return attachKeys(path, keys) +} + +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = [] + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source) + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) + + return attachKeys(regexp, keys) +} + +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} + +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + var strict = options.strict + var end = options.end !== false + var route = '' + + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + route += escapeString(token) + } else { + var prefix = escapeString(token.prefix) + var capture = '(?:' + token.pattern + ')' + + keys.push(token) + + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*' + } + + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?' + } else { + capture = prefix + '(' + capture + ')?' + } + } else { + capture = prefix + '(' + capture + ')' + } + + route += capture + } + } + + var delimiter = escapeString(options.delimiter || '/') + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' + } + + if (end) { + route += '$' + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } + + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } + + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} + +},{"isarray":109}],109:[function(require,module,exports){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +},{}],110:[function(require,module,exports){ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; + +},{}],111:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.typeDetect = factory()); +}(this, (function () { 'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} + +return typeDetect; + +}))); + +},{}]},{},[1]); + +export default sinon; +const _leakThreshold = sinon.leakThreshold; +export { _leakThreshold as leakThreshold }; +const _assert = sinon.assert; +export { _assert as assert }; +const _serverPrototype = sinon.serverPrototype; +export { _serverPrototype as serverPrototype }; +const _getFakes = sinon.getFakes; +export { _getFakes as getFakes }; +const _getRestorers = sinon.getRestorers; +export { _getRestorers as getRestorers }; +const _createStubInstance = sinon.createStubInstance; +export { _createStubInstance as createStubInstance }; +const _inject = sinon.inject; +export { _inject as inject }; +const _mock = sinon.mock; +export { _mock as mock }; +const _reset = sinon.reset; +export { _reset as reset }; +const _resetBehavior = sinon.resetBehavior; +export { _resetBehavior as resetBehavior }; +const _resetHistory = sinon.resetHistory; +export { _resetHistory as resetHistory }; +const _restore = sinon.restore; +export { _restore as restore }; +const _restoreContext = sinon.restoreContext; +export { _restoreContext as restoreContext }; +const _replace = sinon.replace; +export { _replace as replace }; +const _replaceGetter = sinon.replaceGetter; +export { _replaceGetter as replaceGetter }; +const _replaceSetter = sinon.replaceSetter; +export { _replaceSetter as replaceSetter }; +const _spy = sinon.spy; +export { _spy as spy }; +const _stub = sinon.stub; +export { _stub as stub }; +const _fake = sinon.fake; +export { _fake as fake }; +const _useFakeTimers = sinon.useFakeTimers; +export { _useFakeTimers as useFakeTimers }; +const _verify = sinon.verify; +export { _verify as verify }; +const _verifyAndRestore = sinon.verifyAndRestore; +export { _verifyAndRestore as verifyAndRestore }; +const _useFakeServer = sinon.useFakeServer; +export { _useFakeServer as useFakeServer }; +const _useFakeXMLHttpRequest = sinon.useFakeXMLHttpRequest; +export { _useFakeXMLHttpRequest as useFakeXMLHttpRequest }; +const _usingPromise = sinon.usingPromise; +export { _usingPromise as usingPromise }; +const _createSandbox = sinon.createSandbox; +export { _createSandbox as createSandbox }; +const _match = sinon.match; +export { _match as match }; +const _restoreObject = sinon.restoreObject; +export { _restoreObject as restoreObject }; +const _expectation = sinon.expectation; +export { _expectation as expectation }; +const _defaultConfig = sinon.defaultConfig; +export { _defaultConfig as defaultConfig }; +const _setFormatter = sinon.setFormatter; +export { _setFormatter as setFormatter }; +const _timers = sinon.timers; +export { _timers as timers }; +const _xhr = sinon.xhr; +export { _xhr as xhr }; +const _FakeXMLHttpRequest = sinon.FakeXMLHttpRequest; +export { _FakeXMLHttpRequest as FakeXMLHttpRequest }; +const _fakeServer = sinon.fakeServer; +export { _fakeServer as fakeServer }; +const _fakeServerWithClock = sinon.fakeServerWithClock; +export { _fakeServerWithClock as fakeServerWithClock }; +const _createFakeServer = sinon.createFakeServer; +export { _createFakeServer as createFakeServer }; +const _createFakeServerWithClock = sinon.createFakeServerWithClock; +export { _createFakeServerWithClock as createFakeServerWithClock }; +const _addBehavior = sinon.addBehavior; +export { _addBehavior as addBehavior }; +const _promise = sinon.promise; +export { _promise as promise }; \ No newline at end of file diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.12.2.js b/build/node_modules/sinon/pkg/sinon-ie-1.12.2.js deleted file mode 100644 index 1b2e17a4..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.12.2.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Sinon.JS 1.12.2, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setImmediate() {} -function clearImmediate() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setImmediate = sinon.timers.setImmediate; -clearImmediate = sinon.timers.clearImmediate; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function XMLHttpRequest() {} - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -function XDomainRequest() {} - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -XDomainRequest = sinon.xdr.XDomainRequest || undefined; diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.15.0.js b/build/node_modules/sinon/pkg/sinon-ie-1.15.0.js deleted file mode 100644 index 0ed9f909..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.15.0.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Sinon.JS 1.15.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; -} - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -if (typeof window !== "undefined") { - function XDomainRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.15.4.js b/build/node_modules/sinon/pkg/sinon-ie-1.15.4.js deleted file mode 100644 index aa387847..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.15.4.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; -} - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -if (typeof window !== "undefined") { - function XDomainRequest() {} - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.16.0.js b/build/node_modules/sinon/pkg/sinon-ie-1.16.0.js deleted file mode 100644 index 43c4c0e5..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.16.0.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sinon.JS 1.16.0, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.16.1.js b/build/node_modules/sinon/pkg/sinon-ie-1.16.1.js deleted file mode 100644 index 24737adf..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.16.1.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.17.0.js b/build/node_modules/sinon/pkg/sinon-ie-1.17.0.js deleted file mode 100644 index c8cc3eb0..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.17.0.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Sinon.JS 1.17.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable no-func-assign, no-inner-declarations, no-unused-vars, strict*/ -function setTimeout() {} -function clearTimeout() {} -function setImmediate() {} -function clearImmediate() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setImmediate = sinon.timers.setImmediate; -clearImmediate = sinon.timers.clearImmediate; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; // eslint-disable-line no-native-reassign - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable no-func-assign, strict*/ -function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable no-func-assign, strict*/ -function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -XDomainRequest = sinon.xdr.XDomainRequest || undefined; diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.17.2.js b/build/node_modules/sinon/pkg/sinon-ie-1.17.2.js deleted file mode 100644 index 49b2dbea..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.17.2.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sinon.JS 1.17.2, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.17.3.js b/build/node_modules/sinon/pkg/sinon-ie-1.17.3.js deleted file mode 100644 index d85969b6..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.17.3.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.6.0.js b/build/node_modules/sinon/pkg/sinon-ie-1.6.0.js deleted file mode 100644 index 206a5933..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.6.0.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Sinon.JS 1.6.0, 2015/09/28 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/ -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; - -/*global sinon*/ -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function XMLHttpRequest() {} - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; diff --git a/build/node_modules/sinon/pkg/sinon-ie-1.7.3.js b/build/node_modules/sinon/pkg/sinon-ie-1.7.3.js deleted file mode 100644 index 4f3b9696..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-1.7.3.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2015/11/24 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/ -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; - -/*global sinon*/ -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function XMLHttpRequest() {} - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; diff --git a/build/node_modules/sinon/pkg/sinon-ie-2.0.0-pre.js b/build/node_modules/sinon/pkg/sinon-ie-2.0.0-pre.js deleted file mode 100644 index b20a590d..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie-2.0.0-pre.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Sinon.JS 2.0.0-pre, 2016/01/16 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable no-func-assign, no-inner-declarations, no-unused-vars, strict*/ -function setTimeout() {} -function clearTimeout() {} -function setImmediate() {} -function clearImmediate() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setImmediate = sinon.timers.setImmediate; -clearImmediate = sinon.timers.clearImmediate; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; // eslint-disable-line no-native-reassign - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable no-func-assign, strict*/ -function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable no-func-assign, strict*/ -function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - -// Reassign the original function. Now its writable attribute -// should be true. Hackish, I know, but it works. -/*global sinon*/ -XDomainRequest = sinon.xdr.XDomainRequest || undefined; diff --git a/build/node_modules/sinon/pkg/sinon-ie.js b/build/node_modules/sinon/pkg/sinon-ie.js deleted file mode 100644 index d85969b6..00000000 --- a/build/node_modules/sinon/pkg/sinon-ie.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ - -/** - * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XHR to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XMLHttpRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; -} -/*eslint-enable strict*/ -/** - * Helps IE run the fake XDomainRequest. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake XDR to work in IE, don't include this file. - */ -/*eslint-disable strict*/ -if (typeof window !== "undefined") { - function XDomainRequest() {} // eslint-disable-line no-unused-vars, no-inner-declarations - - // Reassign the original function. Now its writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - XDomainRequest = sinon.xdr.XDomainRequest || undefined; -} -/*eslint-enable strict*/ diff --git a/build/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs b/build/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs new file mode 100644 index 00000000..9b4a8f51 --- /dev/null +++ b/build/node_modules/sinon/pkg/sinon-no-sourcemaps.cjs @@ -0,0 +1,17445 @@ +/* Sinon.JS 13.0.1, 2022-02-01, @license BSD-3 */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0) { + return args[callArgAt]; + } + + var argumentList; + + if (callArgAt === useLeftMostCallback) { + argumentList = args; + } + + if (callArgAt === useRightMostCallback) { + argumentList = reverse(slice(args)); + } + + var callArgProp = behavior.callArgProp; + + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] === "function") { + return argumentList[i]; + } + + if ( + callArgProp && + argumentList[i] && + typeof argumentList[i][callArgProp] === "function" + ) { + return argumentList[i][callArgProp]; + } + } + + return null; +} + +function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; + + if (behavior.callArgProp) { + msg = `${functionName( + behavior.stub + )} expected to yield to '${valueToString( + behavior.callArgProp + )}', but no object with such a property was passed.`; + } else { + msg = `${functionName( + behavior.stub + )} expected to yield, but no callback was passed.`; + } + + if (args.length > 0) { + msg += ` Received [${join(args, ", ")}]`; + } + + return msg; + } + + return `argument at index ${behavior.callArgAt} is not a function: ${func}`; +} + +function ensureArgs(name, behavior, args) { + // map function name to internal property + // callsArg => callArgAt + var property = name.replace(/sArg/, "ArgAt"); + var index = behavior[property]; + + if (index >= args.length) { + throw new TypeError( + `${name} failed: ${index + 1} arguments required but only ${ + args.length + } present` + ); + } +} + +function callCallback(behavior, args) { + if (typeof behavior.callArgAt === "number") { + ensureArgs("callsArg", behavior, args); + var func = getCallback(behavior, args); + + if (typeof func !== "function") { + throw new TypeError(getCallbackError(behavior, func, args)); + } + + if (behavior.callbackAsync) { + nextTick(function () { + func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); + }); + } else { + return func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); + } + } + + return undefined; +} + +var proto = { + create: function create(stub) { + var behavior = extend({}, proto); + delete behavior.create; + delete behavior.addBehavior; + delete behavior.createBehavior; + behavior.stub = stub; + + if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) { + behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary; + } + + return behavior; + }, + + isPresent: function isPresent() { + return ( + typeof this.callArgAt === "number" || + this.exception || + this.exceptionCreator || + typeof this.returnArgAt === "number" || + this.returnThis || + typeof this.resolveArgAt === "number" || + this.resolveThis || + typeof this.throwArgAt === "number" || + this.fakeFn || + this.returnValueDefined + ); + }, + + /*eslint complexity: ["error", 20]*/ + invoke: function invoke(context, args) { + /* + * callCallback (conditionally) calls ensureArgs + * + * Note: callCallback intentionally happens before + * everything else and cannot be moved lower + */ + var returnValue = callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (this.exceptionCreator) { + this.exception = this.exceptionCreator(); + this.exceptionCreator = undefined; + throw this.exception; + } else if (typeof this.returnArgAt === "number") { + ensureArgs("returnsArg", this, args); + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } else if (typeof this.throwArgAt === "number") { + ensureArgs("throwsArg", this, args); + throw args[this.throwArgAt]; + } else if (this.fakeFn) { + return this.fakeFn.apply(context, args); + } else if (typeof this.resolveArgAt === "number") { + ensureArgs("resolvesArg", this, args); + return (this.promiseLibrary || Promise).resolve( + args[this.resolveArgAt] + ); + } else if (this.resolveThis) { + return (this.promiseLibrary || Promise).resolve(context); + } else if (this.resolve) { + return (this.promiseLibrary || Promise).resolve(this.returnValue); + } else if (this.reject) { + return (this.promiseLibrary || Promise).reject(this.returnValue); + } else if (this.callsThrough) { + var wrappedMethod = this.effectiveWrappedMethod(); + + return wrappedMethod.apply(context, args); + } else if (this.callsThroughWithNew) { + // Get the original method (assumed to be a constructor in this case) + var WrappedClass = this.effectiveWrappedMethod(); + // Turn the arguments object into a normal array + var argsArray = slice(args); + // Call the constructor + var F = WrappedClass.bind.apply( + WrappedClass, + concat([null], argsArray) + ); + return new F(); + } else if (typeof this.returnValue !== "undefined") { + return this.returnValue; + } else if (typeof this.callArgAt === "number") { + return returnValue; + } + + return this.returnValue; + }, + + effectiveWrappedMethod: function effectiveWrappedMethod() { + for (var stubb = this.stub; stubb; stubb = stubb.parent) { + if (stubb.wrappedMethod) { + return stubb.wrappedMethod; + } + } + throw new Error("Unable to find wrapped method"); + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error( + 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' + + 'is not supported. Use "stub.withArgs(...).onCall(...)" ' + + "to define sequential behavior for calls with certain arguments." + ); + }, +}; + +function createBehavior(behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || proto.create(this); + this.defaultBehavior[behaviorMethod].apply( + this.defaultBehavior, + arguments + ); + return this; + }; +} + +function addBehavior(stub, name, fn) { + proto[name] = function () { + fn.apply(this, concat([this], slice(arguments))); + return this.stub || this; + }; + + stub[name] = createBehavior(name); +} + +proto.addBehavior = addBehavior; +proto.createBehavior = createBehavior; + +var asyncBehaviors = exportAsyncBehaviors(proto); + +module.exports = extend.nonEnum({}, proto, asyncBehaviors); + +},{"./util/core/export-async-behaviors":23,"./util/core/extend":24,"./util/core/next-tick":33,"@sinonjs/commons":46}],4:[function(require,module,exports){ +"use strict"; + +var walk = require("./util/core/walk"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var push = require("@sinonjs/commons").prototypes.array.push; + +function collectMethod(methods, object, prop, propOwner) { + if ( + typeof getPropertyDescriptor(propOwner, prop).value === "function" && + hasOwnProperty(object, prop) + ) { + push(methods, object[prop]); + } +} + +// This function returns an array of all the own methods on the passed object +function collectOwnMethods(object) { + var methods = []; + + walk(object, collectMethod.bind(null, methods, object)); + + return methods; +} + +module.exports = collectOwnMethods; + +},{"./util/core/get-property-descriptor":28,"./util/core/walk":37,"@sinonjs/commons":46}],5:[function(require,module,exports){ +"use strict"; + +var supportsColor = require("supports-color"); + +function colorize(str, color) { + if (supportsColor.stdout === false) { + return str; + } + + return `\x1b[${color}m${str}\x1b[0m`; +} + +exports.red = function (str) { + return colorize(str, 31); +}; + +exports.green = function (str) { + return colorize(str, 32); +}; + +exports.cyan = function (str) { + return colorize(str, 96); +}; + +exports.white = function (str) { + return colorize(str, 39); +}; + +exports.bold = function (str) { + return colorize(str, 1); +}; + +},{"supports-color":109}],6:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var Sandbox = require("./sandbox"); + +var forEach = arrayProto.forEach; +var push = arrayProto.push; + +function prepareSandboxFromConfig(config) { + var sandbox = new Sandbox(); + + if (config.useFakeServer) { + if (typeof config.useFakeServer === "object") { + sandbox.serverPrototype = config.useFakeServer; + } + + sandbox.useFakeServer(); + } + + if (config.useFakeTimers) { + if (typeof config.useFakeTimers === "object") { + sandbox.useFakeTimers(config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } + } + + return sandbox; +} + +function exposeValue(sandbox, config, key, value) { + if (!value) { + return; + } + + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + push(sandbox.injectedKeys, key); + } else { + push(sandbox.args, value); + } +} + +function createSandbox(config) { + if (!config) { + return new Sandbox(); + } + + var configuredSandbox = prepareSandboxFromConfig(config); + configuredSandbox.args = configuredSandbox.args || []; + configuredSandbox.injectedKeys = []; + configuredSandbox.injectInto = config.injectInto; + var exposed = configuredSandbox.inject({}); + + if (config.properties) { + forEach(config.properties, function (prop) { + var value = + exposed[prop] || (prop === "sandbox" && configuredSandbox); + exposeValue(configuredSandbox, config, prop, value); + }); + } else { + exposeValue(configuredSandbox, config, "sandbox"); + } + + return configuredSandbox; +} + +module.exports = createSandbox; + +},{"./sandbox":17,"@sinonjs/commons":46}],7:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); +var extend = require("./util/core/extend"); + +var slice = arrayProto.slice; + +var useLeftMostCallback = -1; +var useRightMostCallback = -2; + +function throwsException(fake, error, message) { + if (typeof error === "function") { + fake.exceptionCreator = error; + } else if (typeof error === "string") { + fake.exceptionCreator = function () { + var newException = new Error(message || ""); + newException.name = error; + return newException; + }; + } else if (!error) { + fake.exceptionCreator = function () { + return new Error("Error"); + }; + } else { + fake.exception = error; + } +} + +var defaultBehaviors = { + callsFake: function callsFake(fake, fn) { + fake.fakeFn = fn; + }, + + callsArg: function callsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOn: function callsArgOn(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgWith: function callsArgWith(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOnWith: function callsArgWith(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + usingPromise: function usingPromise(fake, promiseLibrary) { + fake.promiseLibrary = promiseLibrary; + }, + + yields: function (fake) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsRight: function (fake) { + fake.callArgAt = useRightMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsOn: function (fake, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsTo: function (fake, prop) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsToOn: function (fake, prop, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(fake, value) { + fake.returnValue = value; + fake.resolve = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + returnsArg: function returnsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.returnArgAt = index; + }, + + throwsArg: function throwsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + + fake.throwArgAt = index; + }, + + returnsThis: function returnsThis(fake) { + fake.returnThis = true; + }, + + resolves: function resolves(fake, value) { + fake.returnValue = value; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + resolvesArg: function resolvesArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); + } + fake.resolveArgAt = index; + fake.returnValue = undefined; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + rejects: function rejects(fake, error, message) { + var reason; + if (typeof error === "string") { + reason = new Error(message || ""); + reason.name = error; + } else if (!error) { + reason = new Error("Error"); + } else { + reason = error; + } + fake.returnValue = reason; + fake.resolve = false; + fake.resolveThis = false; + fake.reject = true; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + + return fake; + }, + + resolvesThis: function resolvesThis(fake) { + fake.returnValue = undefined; + fake.resolve = false; + fake.resolveThis = true; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + callThrough: function callThrough(fake) { + fake.callsThrough = true; + }, + + callThroughWithNew: function callThroughWithNew(fake) { + fake.callsThroughWithNew = true; + }, + + get: function get(fake, getterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + get: getterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + }); + + return fake; + }, + + set: function set(fake, setterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty( + rootStub.rootObj, + rootStub.propName, + // eslint-disable-next-line accessor-pairs + { + set: setterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + } + ); + + return fake; + }, + + value: function value(fake, newVal) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + value: newVal, + enumerable: true, + configurable: + rootStub.shadowsPropOnPrototype || + isPropertyConfigurable(rootStub.rootObj, rootStub.propName), + }); + + return fake; + }, +}; + +var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors); + +module.exports = extend({}, defaultBehaviors, asyncBehaviors); + +},{"./util/core/export-async-behaviors":23,"./util/core/extend":24,"./util/core/is-property-configurable":31,"@sinonjs/commons":46}],8:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var nextTick = require("./util/core/next-tick"); + +var slice = arrayProto.slice; +var promiseLib = Promise; + +module.exports = fake; + +/** + * Returns a `fake` that records all calls, arguments and return values. + * + * When an `f` argument is supplied, this implementation will be used. + * + * @example + * // create an empty fake + * var f1 = sinon.fake(); + * + * f1(); + * + * f1.calledOnce() + * // true + * + * @example + * function greet(greeting) { + * console.log(`Hello ${greeting}`); + * } + * + * // create a fake with implementation + * var f2 = sinon.fake(greet); + * + * // Hello world + * f2("world"); + * + * f2.calledWith("world"); + * // true + * + * @param {Function|undefined} f + * @returns {Function} + * @namespace + */ +function fake(f) { + if (arguments.length > 0 && typeof f !== "function") { + throw new TypeError("Expected f argument to be a Function"); + } + + return wrapFunc(f); +} + +/** + * Creates a `fake` that returns the provided `value`, as well as recording all + * calls, arguments and return values. + * + * @example + * var f1 = sinon.fake.returns(42); + * + * f1(); + * // 42 + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.returns = function returns(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return value; + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that throws an Error. + * If the `value` argument does not have Error in its prototype chain, it will + * be used for creating a new error. + * + * @example + * var f1 = sinon.fake.throws("hello"); + * + * f1(); + * // Uncaught Error: hello + * + * @example + * var f2 = sinon.fake.throws(new TypeError("Invalid argument")); + * + * f2(); + * // Uncaught TypeError: Invalid argument + * + * @memberof fake + * @param {*|Error} value + * @returns {Function} + */ +fake.throws = function throws(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + throw getError(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that resolves to the passed `value` + * argument. + * + * @example + * var f1 = sinon.fake.resolves("apple pie"); + * + * await f1(); + * // "apple pie" + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.resolves = function resolves(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.resolve(value); + } + + return wrapFunc(f); +}; + +/** + * Creates a `fake` that returns a promise that rejects to the passed `value` + * argument. When `value` does not have Error in its prototype chain, it will be + * wrapped in an Error. + * + * @example + * var f1 = sinon.fake.rejects(":("); + * + * try { + * await ft(); + * } catch (error) { + * console.log(error); + * // ":(" + * } + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.rejects = function rejects(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.reject(getError(value)); + } + + return wrapFunc(f); +}; + +/** + * Causes `fake` to use a custom Promise implementation, instead of the native + * Promise implementation. + * + * @example + * const bluebird = require("bluebird"); + * sinon.fake.usingPromise(bluebird); + * + * @memberof fake + * @param {*} promiseLibrary + * @returns {Function} + */ +fake.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + return fake; +}; + +/** + * Returns a `fake` that calls the callback with the defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * // "apple*pie" + * + * @memberof fake + * @returns {Function} + */ +fake.yields = function yields() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + + callback.apply(null, values); + } + + return wrapFunc(f); +}; + +/** + * Returns a `fake` that calls the callback **asynchronously** with the + * defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * + * setTimeout(() => { + * // "apple*pie" + * }); + * + * @memberof fake + * @returns {Function} + */ +fake.yieldsAsync = function yieldsAsync() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); + } + nextTick(function () { + callback.apply(null, values); + }); + } + + return wrapFunc(f); +}; + +var uuid = 0; +/** + * Creates a proxy (sinon concept) from the passed function. + * + * @private + * @param {Function} f + * @returns {Function} + */ +function wrapFunc(f) { + var proxy; + var fakeInstance = function () { + var firstArg, lastArg; + + if (arguments.length > 0) { + firstArg = arguments[0]; + lastArg = arguments[arguments.length - 1]; + } + + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxy.firstArg = firstArg; + proxy.lastArg = lastArg; + proxy.callback = callback; + + return f && f.apply(this, arguments); + }; + proxy = createProxy(fakeInstance, f || fakeInstance); + + proxy.displayName = "fake"; + proxy.id = `fake#${uuid++}`; + + return proxy; +} + +/** + * Returns an Error instance from the passed value, if the value is not + * already an Error instance. + * + * @private + * @param {*} value [description] + * @returns {Error} [description] + */ +function getError(value) { + return value instanceof Error ? value : new Error(value); +} + +},{"./proxy":15,"./util/core/next-tick":33,"@sinonjs/commons":46}],9:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyInvoke = require("./proxy-invoke"); +var proxyCallToString = require("./proxy-call").toString; +var timesInWords = require("./util/core/times-in-words"); +var extend = require("./util/core/extend"); +var match = require("@sinonjs/samsam").createMatcher; +var stub = require("./stub"); +var assert = require("./assert"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var format = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var every = arrayProto.every; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function callCountInWords(callCount) { + if (callCount === 0) { + return "never called"; + } + + return `called ${timesInWords(callCount)}`; +} + +function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; + + if (typeof min === "number" && typeof max === "number") { + var str = timesInWords(min); + + if (min !== max) { + str = `at least ${str} and at most ${timesInWords(max)}`; + } + + return str; + } + + if (typeof min === "number") { + return `at least ${timesInWords(min)}`; + } + + return `at most ${timesInWords(max)}`; +} + +function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls === "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; +} + +function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls !== "number") { + return false; + } + + return expectation.callCount === expectation.maxCalls; +} + +function verifyMatcher(possibleMatcher, arg) { + var isMatcher = match.isMatcher(possibleMatcher); + + return (isMatcher && possibleMatcher.test(arg)) || true; +} + +var mockExpectation = { + minCalls: 1, + maxCalls: 1, + + create: function create(methodName) { + var expectation = extend.nonEnum(stub(), mockExpectation); + delete expectation.create; + expectation.method = methodName; + + return expectation; + }, + + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); + + return proxyInvoke.apply(this, arguments); + }, + + atLeast: function atLeast(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; + } + + this.minCalls = num; + + return this; + }, + + atMost: function atMost(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); + } + + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; + } + + this.maxCalls = num; + + return this; + }, + + never: function never() { + return this.exactly(0); + }, + + once: function once() { + return this.exactly(1); + }, + + twice: function twice() { + return this.exactly(2); + }, + + thrice: function thrice() { + return this.exactly(3); + }, + + exactly: function exactly(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not a number`); + } + + this.atLeast(num); + return this.atMost(num); + }, + + met: function met() { + return !this.failed && receivedMinCalls(this); + }, + + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (receivedMaxCalls(this)) { + this.failed = true; + mockExpectation.fail( + `${this.method} already called ${timesInWords(this.maxCalls)}` + ); + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + mockExpectation.fail( + `${this.method} called with ${valueToString( + thisValue + )} as thisValue, expected ${valueToString(this.expectedThis)}` + ); + } + + if (!("expectedArguments" in this)) { + return; + } + + if (!args) { + mockExpectation.fail( + `${this.method} received no arguments, expected ${format( + expectedArguments + )}` + ); + } + + if (args.length < expectedArguments.length) { + mockExpectation.fail( + `${this.method} received too few arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + if ( + this.expectsExactArgCount && + args.length !== expectedArguments.length + ) { + mockExpectation.fail( + `${this.method} received too many arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } + + forEach( + expectedArguments, + function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, args[i])) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, didn't match ${String(expectedArguments)}` + ); + } + + if (!deepEqual(args[i], expectedArgument)) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, expected ${format(expectedArguments)}` + ); + } + }, + this + ); + }, + + allowsCall: function allowsCall(thisValue, args) { + var expectedArguments = this.expectedArguments; + + if (this.met() && receivedMaxCalls(this)) { + return false; + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } + + if (!("expectedArguments" in this)) { + return true; + } + + // eslint-disable-next-line no-underscore-dangle + var _args = args || []; + + if (_args.length < expectedArguments.length) { + return false; + } + + if ( + this.expectsExactArgCount && + _args.length !== expectedArguments.length + ) { + return false; + } + + return every(expectedArguments, function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, _args[i])) { + return false; + } + + if (!deepEqual(_args[i], expectedArgument)) { + return false; + } + + return true; + }); + }, + + withArgs: function withArgs() { + this.expectedArguments = slice(arguments); + return this; + }, + + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, + + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, + + toString: function () { + var args = slice(this.expectedArguments || []); + + if (!this.expectsExactArgCount) { + push(args, "[...]"); + } + + var callStr = proxyCallToString.call({ + proxy: this.method || "anonymous mock expectation", + args: args, + }); + + var message = `${callStr.replace( + ", [...", + "[, ..." + )} ${expectedCallCountInWords(this)}`; + + if (this.met()) { + return `Expectation met: ${message}`; + } + + return `Expected ${message} (${callCountInWords(this.callCount)})`; + }, + + verify: function verify() { + if (!this.met()) { + mockExpectation.fail(String(this)); + } else { + mockExpectation.pass(String(this)); + } + + return true; + }, + + pass: function pass(message) { + assert.pass(message); + }, + + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; + + throw exception; + }, +}; + +module.exports = mockExpectation; + +},{"./assert":2,"./proxy-call":13,"./proxy-invoke":14,"./stub":20,"./util/core/extend":24,"./util/core/format":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":85}],10:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var mockExpectation = require("./mock-expectation"); +var proxyCallToString = require("./proxy-call").toString; +var extend = require("./util/core/extend"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var wrapMethod = require("./util/core/wrap-method"); +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var every = arrayProto.every; +var join = arrayProto.join; +var push = arrayProto.push; +var slice = arrayProto.slice; +var unshift = arrayProto.unshift; + +function mock(object) { + if (!object || typeof object === "string") { + return mockExpectation.create(object ? object : "Anonymous mock"); + } + + return mock.create(object); +} + +function each(collection, callback) { + var col = collection || []; + + forEach(col, callback); +} + +function arrayEquals(arr1, arr2, compareLength) { + if (compareLength && arr1.length !== arr2.length) { + return false; + } + + return every(arr1, function (element, i) { + return deepEqual(arr2[i], element); + }); +} + +extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } + + var mockObject = extend.nonEnum({}, mock, { object: object }); + delete mockObject.create; + + return mockObject; + }, + + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } + + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + this.failures = []; + } + + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; + + wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); + + push(this.proxies, method); + } + + var expectation = mockExpectation.create(method); + expectation.wrappedMethod = this.object[method].wrappedMethod; + push(this.expectations[method], expectation); + usePromiseLibrary(this.promiseLibrary, expectation); + + return expectation; + }, + + restore: function restore() { + var object = this.object; + + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore === "function") { + object[proxy].restore(); + } + }); + }, + + verify: function verify() { + var expectations = this.expectations || {}; + var messages = this.failures ? slice(this.failures) : []; + var met = []; + + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push(messages, String(expectation)); + } else { + push(met, String(expectation)); + } + }); + }); + + this.restore(); + + if (messages.length > 0) { + mockExpectation.fail(join(concat(messages, met), "\n")); + } else if (met.length > 0) { + mockExpectation.pass(join(concat(messages, met), "\n")); + } + + return true; + }, + + usingPromise: function usingPromise(promiseLibrary) { + this.promiseLibrary = promiseLibrary; + + return this; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */ + /* eslint consistent-return: "off" */ + var expectations = + this.expectations && this.expectations[method] + ? this.expectations[method] + : []; + var currentArgs = args || []; + var available; + + var expectationsWithMatchingArgs = filter( + expectations, + function (expectation) { + var expectedArgs = expectation.expectedArguments || []; + + return arrayEquals( + expectedArgs, + currentArgs, + expectation.expectsExactArgCount + ); + } + ); + + var expectationsToApply = filter( + expectationsWithMatchingArgs, + function (expectation) { + return ( + !expectation.met() && + expectation.allowsCall(thisValue, args) + ); + } + ); + + if (expectationsToApply.length > 0) { + return expectationsToApply[0].apply(thisValue, args); + } + + var messages = []; + var exhausted = 0; + + forEach(expectationsWithMatchingArgs, function (expectation) { + if (expectation.allowsCall(thisValue, args)) { + available = available || expectation; + } else { + exhausted += 1; + } + }); + + if (available && exhausted === 0) { + return available.apply(thisValue, args); + } + + forEach(expectations, function (expectation) { + push(messages, ` ${String(expectation)}`); + }); + + unshift( + messages, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + })}` + ); + + var err = new Error(); + if (!err.stack) { + // PhantomJS does not serialize the stack trace until the error has been thrown + try { + throw err; + } catch (e) { + /* empty */ + } + } + push( + this.failures, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + stack: err.stack, + })}` + ); + + mockExpectation.fail(join(messages, "\n")); + }, +}); + +module.exports = mock; + +},{"./mock-expectation":9,"./proxy-call":13,"./util/core/extend":24,"./util/core/use-promise-library":35,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":85}],11:[function(require,module,exports){ +"use strict"; + +var fake = require("./fake"); +var isRestorable = require("./util/core/is-restorable"); + +var STATUS_PENDING = "pending"; +var STATUS_RESOLVED = "resolved"; +var STATUS_REJECTED = "rejected"; + +/** + * Returns a fake for a given function or undefined. If no function is given, a + * new fake is returned. If the given function is already a fake, it is + * returned as is. Otherwise the given function is wrapped in a new fake. + * + * @param {Function} [executor] The optional executor function. + * @returns {Function} + */ +function getFakeExecutor(executor) { + if (isRestorable(executor)) { + return executor; + } + if (executor) { + return fake(executor); + } + return fake(); +} + +/** + * Returns a new promise that exposes it's internal `status`, `resolvedValue` + * and `rejectedValue` and can be resolved or rejected from the outside by + * calling `resolve(value)` or `reject(reason)`. + * + * @param {Function} [executor] The optional executor function. + * @returns {Promise} + */ +function promise(executor) { + var fakeExecutor = getFakeExecutor(executor); + var sinonPromise = new Promise(fakeExecutor); + + sinonPromise.status = STATUS_PENDING; + sinonPromise + .then(function (value) { + sinonPromise.status = STATUS_RESOLVED; + sinonPromise.resolvedValue = value; + }) + .catch(function (reason) { + sinonPromise.status = STATUS_REJECTED; + sinonPromise.rejectedValue = reason; + }); + + /** + * Resolves or rejects the promise with the given status and value. + * + * @param {string} status + * @param {*} value + * @param {Function} callback + */ + function finalize(status, value, callback) { + if (sinonPromise.status !== STATUS_PENDING) { + throw new Error(`Promise already ${sinonPromise.status}`); + } + + sinonPromise.status = status; + callback(value); + } + + sinonPromise.resolve = function (value) { + finalize(STATUS_RESOLVED, value, fakeExecutor.firstCall.args[0]); + // Return the promise so that callers can await it: + return sinonPromise; + }; + sinonPromise.reject = function (reason) { + finalize(STATUS_REJECTED, reason, fakeExecutor.firstCall.args[1]); + // Return a new promise that resolves when the sinon promise was + // rejected, so that callers can await it: + return new Promise(function (resolve) { + sinonPromise.catch(() => resolve()); + }); + }; + + return sinonPromise; +} + +module.exports = promise; + +},{"./fake":8,"./util/core/is-restorable":32}],12:[function(require,module,exports){ +"use strict"; + +var push = require("@sinonjs/commons").prototypes.array.push; + +exports.incrementCallCount = function incrementCallCount(proxy) { + proxy.called = true; + proxy.callCount += 1; + proxy.notCalled = false; + proxy.calledOnce = proxy.callCount === 1; + proxy.calledTwice = proxy.callCount === 2; + proxy.calledThrice = proxy.callCount === 3; +}; + +exports.createCallProperties = function createCallProperties(proxy) { + proxy.firstCall = proxy.getCall(0); + proxy.secondCall = proxy.getCall(1); + proxy.thirdCall = proxy.getCall(2); + proxy.lastCall = proxy.getCall(proxy.callCount - 1); +}; + +exports.delegateToCalls = function delegateToCalls( + proxy, + method, + matchAny, + actual, + returnsValues, + notCalled, + totalCallCount +) { + proxy[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + if (totalCallCount !== undefined && this.callCount !== totalCallCount) { + return false; + } + + var currentCall; + var matches = 0; + var returnValues = []; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + var returnValue = currentCall[actual || method].apply( + currentCall, + arguments + ); + push(returnValues, returnValue); + if (returnValue) { + matches += 1; + + if (matchAny) { + return true; + } + } + } + + if (returnsValues) { + return returnValues; + } + return matches === this.callCount; + }; +}; + +},{"@sinonjs/commons":46}],13:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var match = require("@sinonjs/samsam").createMatcher; +var deepEqual = require("@sinonjs/samsam").deepEqual; +var functionName = require("@sinonjs/commons").functionName; +var sinonFormat = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var join = arrayProto.join; +var map = arrayProto.map; +var reduce = arrayProto.reduce; +var slice = arrayProto.slice; + +function throwYieldError(proxy, text, args) { + var msg = functionName(proxy) + text; + if (args.length) { + msg += ` Received [${join(slice(args), ", ")}]`; + } + throw new Error(msg); +} + +var callProto = { + calledOn: function calledOn(thisValue) { + if (match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, + + calledWith: function calledWith() { + var self = this; + var calledWithArgs = slice(arguments); + + if (calledWithArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithArgs, + function (prev, arg, i) { + return prev && deepEqual(self.args[i], arg); + }, + true + ); + }, + + calledWithMatch: function calledWithMatch() { + var self = this; + var calledWithMatchArgs = slice(arguments); + + if (calledWithMatchArgs.length > self.args.length) { + return false; + } + + return reduce( + calledWithMatchArgs, + function (prev, expectation, i) { + var actual = self.args[i]; + + return prev && match(expectation).test(actual); + }, + true + ); + }, + + calledWithExactly: function calledWithExactly() { + return ( + arguments.length === this.args.length && + this.calledWith.apply(this, arguments) + ); + }, + + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, + + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, + + returned: function returned(value) { + return deepEqual(this.returnValue, value); + }, + + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return Boolean(this.exception); + } + + return this.exception === error || this.exception.name === error; + }, + + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, + + calledBefore: function (other) { + return this.callId < other.callId; + }, + + calledAfter: function (other) { + return this.callId > other.callId; + }, + + calledImmediatelyBefore: function (other) { + return this.callId === other.callId - 1; + }, + + calledImmediatelyAfter: function (other) { + return this.callId === other.callId + 1; + }, + + callArg: function (pos) { + this.ensureArgIsAFunction(pos); + return this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + return this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + return this.callArgOnWith.apply( + this, + concat([pos, null], slice(arguments, 1)) + ); + }, + + callArgOnWith: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + var args = slice(arguments, 2); + return this.args[pos].apply(thisValue, args); + }, + + throwArg: function (pos) { + if (pos > this.args.length) { + throw new TypeError( + `Not enough arguments: ${pos} required but only ${this.args.length} present` + ); + } + + throw this.args[pos]; + }, + + yield: function () { + return this.yieldOn.apply(this, concat([null], slice(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = slice(this.args); + var yieldFn = filter(args, function (arg) { + return typeof arg === "function"; + })[0]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + " cannot yield since no callback was passed.", + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 1)); + }, + + yieldTo: function (prop) { + return this.yieldToOn.apply( + this, + concat([prop, null], slice(arguments, 1)) + ); + }, + + yieldToOn: function (prop, thisValue) { + var args = slice(this.args); + var yieldArg = filter(args, function (arg) { + return arg && typeof arg[prop] === "function"; + })[0]; + var yieldFn = yieldArg && yieldArg[prop]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + ` cannot yield to '${valueToString( + prop + )}' since no callback was passed.`, + args + ); + } + + return yieldFn.apply(thisValue, slice(arguments, 2)); + }, + + toString: function () { + var callStr = this.proxy ? `${String(this.proxy)}(` : ""; + var formattedArgs; + + if (!this.args) { + return ":("; + } + + formattedArgs = map(this.args, function (arg) { + return sinonFormat(arg); + }); + + callStr = `${callStr + join(formattedArgs, ", ")})`; + + if (typeof this.returnValue !== "undefined") { + callStr += ` => ${sinonFormat(this.returnValue)}`; + } + + if (this.exception) { + callStr += ` !${this.exception.name}`; + + if (this.exception.message) { + callStr += `(${this.exception.message})`; + } + } + if (this.stack) { + // If we have a stack, add the first frame that's in end-user code + // Skip the first two frames because they will refer to Sinon code + callStr += (this.stack.split("\n")[3] || "unknown").replace( + /^\s*(?:at\s+|@)?/, + " at " + ); + } + + return callStr; + }, + + ensureArgIsAFunction: function (pos) { + if (typeof this.args[pos] !== "function") { + throw new TypeError( + `Expected argument at position ${pos} to be a Function, but was ${typeof this + .args[pos]}` + ); + } + }, +}; +Object.defineProperty(callProto, "stack", { + enumerable: true, + configurable: true, + get: function () { + return (this.errorWithCallStack && this.errorWithCallStack.stack) || ""; + }, +}); + +callProto.invokeCallback = callProto.yield; + +function createProxyCall( + proxy, + thisValue, + args, + returnValue, + exception, + id, + errorWithCallStack +) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } + + var firstArg, lastArg; + + if (args.length > 0) { + firstArg = args[0]; + lastArg = args[args.length - 1]; + } + + var proxyCall = Object.create(callProto); + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxyCall.proxy = proxy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.firstArg = firstArg; + proxyCall.lastArg = lastArg; + proxyCall.callback = callback; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + proxyCall.errorWithCallStack = errorWithCallStack; + + return proxyCall; +} +createProxyCall.toString = callProto.toString; // used by mocks + +module.exports = createProxyCall; + +},{"./util/core/format":25,"@sinonjs/commons":46,"@sinonjs/samsam":85}],14:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyCallUtil = require("./proxy-call-util"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var concat = arrayProto.concat; +var ErrorConstructor = Error.prototype.constructor; +var bind = Function.prototype.bind; + +var callId = 0; + +module.exports = function invoke(func, thisValue, args) { + var matchings = this.matchingFakes(args); + var currentCallId = callId++; + var exception, returnValue; + + proxyCallUtil.incrementCallCount(this); + push(this.thisValues, thisValue); + push(this.args, args); + push(this.callIds, currentCallId); + forEach(matchings, function (matching) { + proxyCallUtil.incrementCallCount(matching); + push(matching.thisValues, thisValue); + push(matching.args, args); + push(matching.callIds, currentCallId); + }); + + // Make call properties available from within the spied function: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + try { + this.invoking = true; + + var thisCall = this.getCall(this.callCount - 1); + + if (thisCall.calledWithNew()) { + // Call through with `new` + returnValue = new (bind.apply( + this.func || func, + concat([thisValue], args) + ))(); + + if (typeof returnValue !== "object") { + returnValue = thisValue; + } + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; + } + + push(this.exceptions, exception); + push(this.returnValues, returnValue); + forEach(matchings, function (matching) { + push(matching.exceptions, exception); + push(matching.returnValues, returnValue); + }); + + var err = new ErrorConstructor(); + // 1. Please do not get stack at this point. It may be so very slow, and not actually used + // 2. PhantomJS does not serialize the stack trace until the error has been thrown: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack + try { + throw err; + } catch (e) { + /* empty */ + } + push(this.errorsWithCallStack, err); + forEach(matchings, function (matching) { + push(matching.errorsWithCallStack, err); + }); + + // Make return value and exception available in the calls: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); + + if (exception !== undefined) { + throw exception; + } + + return returnValue; +}; + +},{"./proxy-call-util":12,"@sinonjs/commons":46}],15:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionToString = require("./util/core/function-to-string"); +var proxyCall = require("./proxy-call"); +var proxyCallUtil = require("./proxy-call-util"); +var proxyInvoke = require("./proxy-invoke"); +var sinonFormat = require("./util/core/format"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var slice = arrayProto.slice; + +var emptyFakes = Object.freeze([]); + +// Public API +var proxyApi = { + toString: functionToString, + + named: function named(name) { + this.displayName = name; + var nameDescriptor = Object.getOwnPropertyDescriptor(this, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + nameDescriptor.value = name; + Object.defineProperty(this, "name", nameDescriptor); + } + return this; + }, + + invoke: proxyInvoke, + + /* + * Hook for derived implementation to return fake instances matching the + * given arguments. + */ + matchingFakes: function (/*args, strict*/) { + return emptyFakes; + }, + + getCall: function getCall(index) { + var i = index; + if (i < 0) { + // Negative indices means counting backwards from the last call + i += this.callCount; + } + if (i < 0 || i >= this.callCount) { + return null; + } + + return proxyCall( + this, + this.thisValues[i], + this.args[i], + this.returnValues[i], + this.exceptions[i], + this.callIds[i], + this.errorsWithCallStack[i] + ); + }, + + getCalls: function () { + var calls = []; + var i; + + for (i = 0; i < this.callCount; i++) { + push(calls, this.getCall(i)); + } + + return calls; + }, + + calledBefore: function calledBefore(proxy) { + if (!this.called) { + return false; + } + + if (!proxy.called) { + return true; + } + + return this.callIds[0] < proxy.callIds[proxy.callIds.length - 1]; + }, + + calledAfter: function calledAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return this.callIds[this.callCount - 1] > proxy.callIds[0]; + }, + + calledImmediatelyBefore: function calledImmediatelyBefore(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] - 1 + ); + }, + + calledImmediatelyAfter: function calledImmediatelyAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } + + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] + 1 + ); + }, + + formatters: require("./spy-formatters"), + printf: function (format) { + var spyInstance = this; + var args = slice(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifier) { + formatter = proxyApi.formatters[specifier]; + + if (typeof formatter === "function") { + return String(formatter(spyInstance, args)); + } else if (!isNaN(parseInt(specifier, 10))) { + return sinonFormat(args[specifier - 1]); + } + + return `%${specifier}`; + }); + }, + + resetHistory: function () { + if (this.invoking) { + var err = new Error( + "Cannot reset Sinon function while invoking it. " + + "Move the call to .resetHistory outside of the callback." + ); + err.name = "InvalidResetException"; + throw err; + } + + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.firstArg = null; + this.lastArg = null; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + this.errorsWithCallStack = []; + + if (this.fakes) { + forEach(this.fakes, function (fake) { + fake.resetHistory(); + }); + } + + return this; + }, +}; + +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(proxyApi, "calledOn", true); +delegateToCalls(proxyApi, "alwaysCalledOn", false, "calledOn"); +delegateToCalls(proxyApi, "calledWith", true); +delegateToCalls( + proxyApi, + "calledOnceWith", + true, + "calledWith", + false, + undefined, + 1 +); +delegateToCalls(proxyApi, "calledWithMatch", true); +delegateToCalls(proxyApi, "alwaysCalledWith", false, "calledWith"); +delegateToCalls(proxyApi, "alwaysCalledWithMatch", false, "calledWithMatch"); +delegateToCalls(proxyApi, "calledWithExactly", true); +delegateToCalls( + proxyApi, + "calledOnceWithExactly", + true, + "calledWithExactly", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "calledOnceWithMatch", + true, + "calledWithMatch", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "alwaysCalledWithExactly", + false, + "calledWithExactly" +); +delegateToCalls( + proxyApi, + "neverCalledWith", + false, + "notCalledWith", + false, + function () { + return true; + } +); +delegateToCalls( + proxyApi, + "neverCalledWithMatch", + false, + "notCalledWithMatch", + false, + function () { + return true; + } +); +delegateToCalls(proxyApi, "threw", true); +delegateToCalls(proxyApi, "alwaysThrew", false, "threw"); +delegateToCalls(proxyApi, "returned", true); +delegateToCalls(proxyApi, "alwaysReturned", false, "returned"); +delegateToCalls(proxyApi, "calledWithNew", true); +delegateToCalls(proxyApi, "alwaysCalledWithNew", false, "calledWithNew"); + +function createProxy(func, originalFunc) { + var proxy = wrapFunction(func, originalFunc); + + // Inherit function properties: + extend(proxy, func); + + proxy.prototype = func.prototype; + + extend.nonEnum(proxy, proxyApi); + + return proxy; +} + +function wrapFunction(func, originalFunc) { + var arity = originalFunc.length; + var p; + // Do not change this to use an eval. Projects that depend on sinon block the use of eval. + // ref: https://github.com/sinonjs/sinon/issues/710 + switch (arity) { + /*eslint-disable no-unused-vars, max-len*/ + case 0: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 1: + p = function proxy(a) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 2: + p = function proxy(a, b) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 3: + p = function proxy(a, b, c) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 4: + p = function proxy(a, b, c, d) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 5: + p = function proxy(a, b, c, d, e) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 6: + p = function proxy(a, b, c, d, e, f) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 7: + p = function proxy(a, b, c, d, e, f, g) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 8: + p = function proxy(a, b, c, d, e, f, g, h) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 9: + p = function proxy(a, b, c, d, e, f, g, h, i) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 10: + p = function proxy(a, b, c, d, e, f, g, h, i, j) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 11: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 12: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) { + return p.invoke(func, this, slice(arguments)); + }; + break; + default: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + /*eslint-enable*/ + } + var nameDescriptor = Object.getOwnPropertyDescriptor(originalFunc, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + Object.defineProperty(p, "name", nameDescriptor); + } + extend.nonEnum(p, { + isSinonProxy: true, + + called: false, + notCalled: true, + calledOnce: false, + calledTwice: false, + calledThrice: false, + callCount: 0, + firstCall: null, + firstArg: null, + secondCall: null, + thirdCall: null, + lastCall: null, + lastArg: null, + args: [], + returnValues: [], + thisValues: [], + exceptions: [], + callIds: [], + errorsWithCallStack: [], + }); + return p; +} + +module.exports = createProxy; + +},{"./proxy-call":13,"./proxy-call-util":12,"./proxy-invoke":14,"./spy-formatters":18,"./util/core/extend":24,"./util/core/format":25,"./util/core/function-to-string":26,"@sinonjs/commons":46}],16:[function(require,module,exports){ +"use strict"; + +var walkObject = require("./util/core/walk-object"); + +function filter(object, property) { + return object[property].restore && object[property].restore.sinon; +} + +function restore(object, property) { + object[property].restore(); +} + +function restoreObject(object) { + return walkObject(restore, object, filter); +} + +module.exports = restoreObject; + +},{"./util/core/walk-object":36}],17:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var logger = require("@sinonjs/commons").deprecated; +var collectOwnMethods = require("./collect-own-methods"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var match = require("@sinonjs/samsam").createMatcher; +var sinonAssert = require("./assert"); +var sinonClock = require("./util/fake-timers"); +var sinonMock = require("./mock"); +var sinonSpy = require("./spy"); +var sinonStub = require("./stub"); +var sinonFake = require("./fake"); +var valueToString = require("@sinonjs/commons").valueToString; +var fakeServer = require("nise").fakeServer; +var fakeXhr = require("nise").fakeXhr; +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var DEFAULT_LEAK_THRESHOLD = 10000; + +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var reverse = arrayProto.reverse; + +function applyOnEach(fakes, method) { + var matchingFakes = filter(fakes, function (fake) { + return typeof fake[method] === "function"; + }); + + forEach(matchingFakes, function (fake) { + fake[method](); + }); +} + +function Sandbox() { + var sandbox = this; + var fakeRestorers = []; + var promiseLib; + + var collection = []; + var loggedLeakWarning = false; + sandbox.leakThreshold = DEFAULT_LEAK_THRESHOLD; + + function addToCollection(object) { + if ( + push(collection, object) > sandbox.leakThreshold && + !loggedLeakWarning + ) { + // eslint-disable-next-line no-console + logger.printWarning( + "Potential memory leak detected; be sure to call restore() to clean up your sandbox. To suppress this warning, modify the leakThreshold property of your sandbox." + ); + loggedLeakWarning = true; + } + } + + sandbox.assert = sinonAssert.createAssertObject(); + + sandbox.serverPrototype = fakeServer; + + // this is for testing only + sandbox.getFakes = function getFakes() { + return collection; + }; + + // this is for testing only + sandbox.getRestorers = function () { + return fakeRestorers; + }; + + sandbox.createStubInstance = function createStubInstance() { + var stubbed = sinonStub.createStubInstance.apply(null, arguments); + + var ownMethods = collectOwnMethods(stubbed); + + forEach(ownMethods, function (method) { + addToCollection(method); + }); + + usePromiseLibrary(promiseLib, ownMethods); + + return stubbed; + }; + + sandbox.inject = function inject(obj) { + obj.spy = function () { + return sandbox.spy.apply(null, arguments); + }; + + obj.stub = function () { + return sandbox.stub.apply(null, arguments); + }; + + obj.mock = function () { + return sandbox.mock.apply(null, arguments); + }; + + obj.createStubInstance = function () { + return sandbox.createStubInstance.apply(sandbox, arguments); + }; + + obj.fake = function () { + return sandbox.fake.apply(null, arguments); + }; + + obj.replace = function () { + return sandbox.replace.apply(null, arguments); + }; + + obj.replaceSetter = function () { + return sandbox.replaceSetter.apply(null, arguments); + }; + + obj.replaceGetter = function () { + return sandbox.replaceGetter.apply(null, arguments); + }; + + if (sandbox.clock) { + obj.clock = sandbox.clock; + } + + if (sandbox.server) { + obj.server = sandbox.server; + obj.requests = sandbox.server.requests; + } + + obj.match = match; + + return obj; + }; + + sandbox.mock = function mock() { + var m = sinonMock.apply(null, arguments); + + addToCollection(m); + usePromiseLibrary(promiseLib, m); + + return m; + }; + + sandbox.reset = function reset() { + applyOnEach(collection, "reset"); + applyOnEach(collection, "resetHistory"); + }; + + sandbox.resetBehavior = function resetBehavior() { + applyOnEach(collection, "resetBehavior"); + }; + + sandbox.resetHistory = function resetHistory() { + function privateResetHistory(f) { + var method = f.resetHistory || f.reset; + if (method) { + method.call(f); + } + } + + forEach(collection, function (fake) { + if (typeof fake === "function") { + privateResetHistory(fake); + return; + } + + var methods = []; + if (fake.get) { + push(methods, fake.get); + } + + if (fake.set) { + push(methods, fake.set); + } + + forEach(methods, privateResetHistory); + }); + }; + + sandbox.restore = function restore() { + if (arguments.length) { + throw new Error( + "sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()" + ); + } + + reverse(collection); + applyOnEach(collection, "restore"); + collection = []; + + forEach(fakeRestorers, function (restorer) { + restorer(); + }); + fakeRestorers = []; + + sandbox.restoreContext(); + }; + + sandbox.restoreContext = function restoreContext() { + var injectedKeys = sandbox.injectedKeys; + var injectInto = sandbox.injectInto; + + if (!injectedKeys) { + return; + } + + forEach(injectedKeys, function (injectedKey) { + delete injectInto[injectedKey]; + }); + + injectedKeys = []; + }; + + function getFakeRestorer(object, property) { + var descriptor = getPropertyDescriptor(object, property); + + function restorer() { + if (descriptor.isOwn) { + Object.defineProperty(object, property, descriptor); + } else { + delete object[property]; + } + } + restorer.object = object; + restorer.property = property; + return restorer; + } + + function verifyNotReplaced(object, property) { + forEach(fakeRestorers, function (fakeRestorer) { + if ( + fakeRestorer.object === object && + fakeRestorer.property === property + ) { + throw new TypeError( + `Attempted to replace ${property} which is already replaced` + ); + } + }); + } + + sandbox.replace = function replace(object, property, replacement) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement === "undefined") { + throw new TypeError("Expected replacement argument to be defined"); + } + + if (typeof descriptor.get === "function") { + throw new Error("Use sandbox.replaceGetter for replacing getters"); + } + + if (typeof descriptor.set === "function") { + throw new Error("Use sandbox.replaceSetter for replacing setters"); + } + + if (typeof object[property] !== typeof replacement) { + throw new TypeError( + `Cannot replace ${typeof object[ + property + ]} with ${typeof replacement}` + ); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + object[property] = replacement; + + return replacement; + }; + + sandbox.replaceGetter = function replaceGetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } + + if (typeof descriptor.get !== "function") { + throw new Error("`object.property` is not a getter"); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + Object.defineProperty(object, property, { + get: replacement, + configurable: isPropertyConfigurable(object, property), + }); + + return replacement; + }; + + sandbox.replaceSetter = function replaceSetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } + + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } + + if (typeof descriptor.set !== "function") { + throw new Error("`object.property` is not a setter"); + } + + verifyNotReplaced(object, property); + + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); + + // eslint-disable-next-line accessor-pairs + Object.defineProperty(object, property, { + set: replacement, + configurable: isPropertyConfigurable(object, property), + }); + + return replacement; + }; + + function commonPostInitSetup(args, spy) { + var object = args[0]; + var property = args[1]; + + var isSpyingOnEntireObject = + typeof property === "undefined" && typeof object === "object"; + + if (isSpyingOnEntireObject) { + var ownMethods = collectOwnMethods(spy); + + forEach(ownMethods, function (method) { + addToCollection(method); + }); + + usePromiseLibrary(promiseLib, ownMethods); + } else { + addToCollection(spy); + usePromiseLibrary(promiseLib, spy); + } + + return spy; + } + + sandbox.spy = function spy() { + var createdSpy = sinonSpy.apply(sinonSpy, arguments); + return commonPostInitSetup(arguments, createdSpy); + }; + + sandbox.stub = function stub() { + var createdStub = sinonStub.apply(sinonStub, arguments); + return commonPostInitSetup(arguments, createdStub); + }; + + // eslint-disable-next-line no-unused-vars + sandbox.fake = function fake(f) { + var s = sinonFake.apply(sinonFake, arguments); + + addToCollection(s); + + return s; + }; + + forEach(Object.keys(sinonFake), function (key) { + var fakeBehavior = sinonFake[key]; + if (typeof fakeBehavior === "function") { + sandbox.fake[key] = function () { + var s = fakeBehavior.apply(fakeBehavior, arguments); + + addToCollection(s); + + return s; + }; + } + }); + + sandbox.useFakeTimers = function useFakeTimers(args) { + var clock = sinonClock.useFakeTimers.call(null, args); + + sandbox.clock = clock; + addToCollection(clock); + + return clock; + }; + + sandbox.verify = function verify() { + applyOnEach(collection, "verify"); + }; + + sandbox.verifyAndRestore = function verifyAndRestore() { + var exception; + + try { + sandbox.verify(); + } catch (e) { + exception = e; + } + + sandbox.restore(); + + if (exception) { + throw exception; + } + }; + + sandbox.useFakeServer = function useFakeServer() { + var proto = sandbox.serverPrototype || fakeServer; + + if (!proto || !proto.create) { + return null; + } + + sandbox.server = proto.create(); + addToCollection(sandbox.server); + + return sandbox.server; + }; + + sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() { + var xhr = fakeXhr.useFakeXMLHttpRequest(); + addToCollection(xhr); + return xhr; + }; + + sandbox.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + collection.promiseLibrary = promiseLibrary; + + return sandbox; + }; +} + +Sandbox.prototype.match = match; + +module.exports = Sandbox; + +},{"./assert":2,"./collect-own-methods":4,"./fake":8,"./mock":10,"./spy":19,"./stub":20,"./util/core/get-property-descriptor":28,"./util/core/is-property-configurable":31,"./util/core/use-promise-library":35,"./util/fake-timers":39,"@sinonjs/commons":46,"@sinonjs/samsam":85,"nise":106}],18:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var color = require("./color"); +var match = require("@sinonjs/samsam").createMatcher; +var timesInWords = require("./util/core/times-in-words"); +var sinonFormat = require("./util/core/format"); +var jsDiff = require("diff"); + +var join = arrayProto.join; +var map = arrayProto.map; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function colorSinonMatchText(matcher, calledArg, calledArgMessage) { + var calledArgumentMessage = calledArgMessage; + if (!matcher.test(calledArg)) { + matcher.message = color.red(matcher.message); + if (calledArgumentMessage) { + calledArgumentMessage = color.green(calledArgumentMessage); + } + } + return `${calledArgumentMessage} ${matcher.message}`; +} + +function colorDiffText(diff) { + var objects = map(diff, function (part) { + var text = part.value; + if (part.added) { + text = color.green(text); + } else if (part.removed) { + text = color.red(text); + } + if (diff.length === 2) { + text += " "; // format simple diffs + } + return text; + }); + return join(objects, ""); +} + +function quoteStringValue(value) { + if (typeof value === "string") { + return JSON.stringify(value); + } + return value; +} + +module.exports = { + c: function (spyInstance) { + return timesInWords(spyInstance.callCount); + }, + + n: function (spyInstance) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return spyInstance.toString(); + }, + + D: function (spyInstance, args) { + var message = ""; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // describe multiple calls + if (l > 1) { + message += `\nCall ${i + 1}:`; + } + var calledArgs = spyInstance.getCall(i).args; + var expectedArgs = slice(args); + + for ( + var j = 0; + j < calledArgs.length || j < expectedArgs.length; + ++j + ) { + var calledArg = calledArgs[j]; + var expectedArg = expectedArgs[j]; + if (calledArg) { + calledArg = quoteStringValue(calledArg); + } + + if (expectedArg) { + expectedArg = quoteStringValue(expectedArg); + } + + message += "\n"; + + var calledArgMessage = + j < calledArgs.length ? sinonFormat(calledArg) : ""; + if (match.isMatcher(expectedArg)) { + message += colorSinonMatchText( + expectedArg, + calledArg, + calledArgMessage + ); + } else { + var expectedArgMessage = + j < expectedArgs.length ? sinonFormat(expectedArg) : ""; + var diff = jsDiff.diffJson( + calledArgMessage, + expectedArgMessage + ); + message += colorDiffText(diff); + } + } + } + + return message; + }, + + C: function (spyInstance) { + var calls = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + var stringifiedCall = ` ${spyInstance.getCall(i).toString()}`; + if (/\n/.test(calls[i - 1])) { + stringifiedCall = `\n${stringifiedCall}`; + } + push(calls, stringifiedCall); + } + + return calls.length > 0 ? `\n${join(calls, "\n")}` : ""; + }, + + t: function (spyInstance) { + var objects = []; + + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + push(objects, sinonFormat(spyInstance.thisValues[i])); + } + + return join(objects, ", "); + }, + + "*": function (spyInstance, args) { + return join( + map(args, function (arg) { + return sinonFormat(arg); + }), + ", " + ); + }, +}; + +},{"./color":5,"./util/core/format":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":85,"diff":92}],19:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var isEsModule = require("./util/core/is-es-module"); +var proxyCallUtil = require("./proxy-call-util"); +var walkObject = require("./util/core/walk-object"); +var wrapMethod = require("./util/core/wrap-method"); +var valueToString = require("@sinonjs/commons").valueToString; + +/* cache references to library methods so that they also can be stubbed without problems */ +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var push = arrayProto.push; +var slice = arrayProto.slice; +var filter = Array.prototype.filter; + +var uuid = 0; + +function matches(fake, args, strict) { + var margs = fake.matchingArguments; + if ( + margs.length <= args.length && + deepEqual(slice(args, 0, margs.length), margs) + ) { + return !strict || margs.length === args.length; + } + return false; +} + +// Public API +var spyApi = { + withArgs: function () { + var args = slice(arguments); + var matching = pop(this.matchingFakes(args, true)); + if (matching) { + return matching; + } + + var original = this; + var fake = this.instantiateFake(); + fake.matchingArguments = args; + fake.parent = this; + push(this.fakes, fake); + + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; + + forEach(original.args, function (arg, i) { + if (!matches(fake, arg)) { + return; + } + + proxyCallUtil.incrementCallCount(fake); + push(fake.thisValues, original.thisValues[i]); + push(fake.args, arg); + push(fake.returnValues, original.returnValues[i]); + push(fake.exceptions, original.exceptions[i]); + push(fake.callIds, original.callIds[i]); + }); + + proxyCallUtil.createCallProperties(fake); + + return fake; + }, + + // Override proxy default implementation + matchingFakes: function (args, strict) { + return filter.call(this.fakes, function (fake) { + return matches(fake, args, strict); + }); + }, +}; + +/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgWith = spyApi.callArg; +delegateToCalls(spyApi, "callArgOn", false, "callArgOnWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgOnWith = spyApi.callArgOn; +delegateToCalls(spyApi, "throwArg", false, "throwArg", false, function () { + throw new Error( + `${this.toString()} cannot throw arg since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yield", false, "yield", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. +spyApi.invokeCallback = spyApi.yield; +delegateToCalls(spyApi, "yieldOn", false, "yieldOn", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yieldTo", false, "yieldTo", true, function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); +}); +delegateToCalls( + spyApi, + "yieldToOn", + false, + "yieldToOn", + true, + function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); + } +); + +function createSpy(func) { + var name; + var funk = func; + + if (typeof funk !== "function") { + funk = function () { + return; + }; + } else { + name = functionName(funk); + } + + var proxy = createProxy(funk, funk); + + // Inherit spy API: + extend.nonEnum(proxy, spyApi); + extend.nonEnum(proxy, { + displayName: name || "spy", + fakes: [], + instantiateFake: createSpy, + id: `spy#${uuid++}`, + }); + return proxy; +} + +function spy(object, property, types) { + var descriptor, methodDesc; + + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be spied"); + } + + if (!property && typeof object === "function") { + return createSpy(object); + } + + if (!property && typeof object === "object") { + return walkObject(spy, object); + } + + if (!object && !property) { + return createSpy(function () { + return; + }); + } + + if (!types) { + return wrapMethod(object, property, createSpy(object[property])); + } + + descriptor = {}; + methodDesc = getPropertyDescriptor(object, property); + + forEach(types, function (type) { + descriptor[type] = createSpy(methodDesc[type]); + }); + + return wrapMethod(object, property, descriptor); +} + +extend(spy, spyApi); +module.exports = spy; + +},{"./proxy":15,"./proxy-call-util":12,"./util/core/extend":24,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":85}],20:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var behavior = require("./behavior"); +var behaviors = require("./default-behaviors"); +var createProxy = require("./proxy"); +var functionName = require("@sinonjs/commons").functionName; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var isNonExistentProperty = require("./util/core/is-non-existent-property"); +var spy = require("./spy"); +var extend = require("./util/core/extend"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isEsModule = require("./util/core/is-es-module"); +var wrapMethod = require("./util/core/wrap-method"); +var throwOnFalsyObject = require("./throw-on-falsy-object"); +var valueToString = require("@sinonjs/commons").valueToString; +var walkObject = require("./util/core/walk-object"); + +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var slice = arrayProto.slice; +var sort = arrayProto.sort; + +var uuid = 0; + +function createStub(originalFunc) { + var proxy; + + function functionStub() { + var args = slice(arguments); + var matchings = proxy.matchingFakes(args); + + var fnStub = + pop( + sort(matchings, function (a, b) { + return ( + a.matchingArguments.length - b.matchingArguments.length + ); + }) + ) || proxy; + return getCurrentBehavior(fnStub).invoke(this, arguments); + } + + proxy = createProxy(functionStub, originalFunc || functionStub); + // Inherit spy API: + extend.nonEnum(proxy, spy); + // Inherit stub API: + extend.nonEnum(proxy, stub); + + var name = originalFunc ? functionName(originalFunc) : null; + extend.nonEnum(proxy, { + fakes: [], + instantiateFake: createStub, + displayName: name || "stub", + defaultBehavior: null, + behaviors: [], + id: `stub#${uuid++}`, + }); + + return proxy; +} + +function stub(object, property) { + if (arguments.length > 2) { + throw new TypeError( + "stub(obj, 'meth', fn) has been removed, see documentation" + ); + } + + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be stubbed"); + } + + throwOnFalsyObject.apply(null, arguments); + + if (isNonExistentProperty(object, property)) { + throw new TypeError( + `Cannot stub non-existent property ${valueToString(property)}` + ); + } + + var actualDescriptor = getPropertyDescriptor(object, property); + + assertValidPropertyDescriptor(actualDescriptor, property); + + var isObjectOrFunction = + typeof object === "object" || typeof object === "function"; + var isStubbingEntireObject = + typeof property === "undefined" && isObjectOrFunction; + var isCreatingNewStub = !object && typeof property === "undefined"; + var isStubbingNonFuncProperty = + isObjectOrFunction && + typeof property !== "undefined" && + (typeof actualDescriptor === "undefined" || + typeof actualDescriptor.value !== "function"); + + if (isStubbingEntireObject) { + return walkObject(stub, object); + } + + if (isCreatingNewStub) { + return createStub(); + } + + var func = + typeof actualDescriptor.value === "function" + ? actualDescriptor.value + : null; + var s = createStub(func); + + extend.nonEnum(s, { + rootObj: object, + propName: property, + shadowsPropOnPrototype: !actualDescriptor.isOwn, + restore: function restore() { + if (actualDescriptor !== undefined && actualDescriptor.isOwn) { + Object.defineProperty(object, property, actualDescriptor); + return; + } + + delete object[property]; + }, + }); + + return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s); +} + +stub.createStubInstance = function (constructor, overrides) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } + + var stubbedObject = stub(Object.create(constructor.prototype)); + + forEach(Object.keys(overrides || {}), function (propertyName) { + if (propertyName in stubbedObject) { + var value = overrides[propertyName]; + if (value && value.createStubInstance) { + stubbedObject[propertyName] = value; + } else { + stubbedObject[propertyName].returns(value); + } + } else { + throw new Error( + `Cannot stub ${propertyName}. Property does not exist!` + ); + } + }); + return stubbedObject; +}; + +function assertValidPropertyDescriptor(descriptor, property) { + if (!descriptor || !property) { + return; + } + if (!descriptor.configurable && !descriptor.writable) { + throw new TypeError( + `Descriptor for property ${property} is non-configurable and non-writable` + ); + } + if ((descriptor.get || descriptor.set) && !descriptor.configurable) { + throw new TypeError( + `Descriptor for accessor property ${property} is non-configurable` + ); + } + if (isDataDescriptor(descriptor) && !descriptor.writable) { + throw new TypeError( + `Descriptor for data property ${property} is non-writable` + ); + } +} + +function isDataDescriptor(descriptor) { + return ( + !descriptor.value && + !descriptor.writable && + !descriptor.set && + !descriptor.get + ); +} + +/*eslint-disable no-use-before-define*/ +function getParentBehaviour(stubInstance) { + return stubInstance.parent && getCurrentBehavior(stubInstance.parent); +} + +function getDefaultBehavior(stubInstance) { + return ( + stubInstance.defaultBehavior || + getParentBehaviour(stubInstance) || + behavior.create(stubInstance) + ); +} + +function getCurrentBehavior(stubInstance) { + var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1]; + return currentBehavior && currentBehavior.isPresent() + ? currentBehavior + : getDefaultBehavior(stubInstance); +} +/*eslint-enable no-use-before-define*/ + +var proto = { + resetBehavior: function () { + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + delete this.throwArgAt; + delete this.resolveArgAt; + delete this.fakeFn; + this.returnThis = false; + this.resolveThis = false; + + forEach(this.fakes, function (fake) { + fake.resetBehavior(); + }); + }, + + reset: function () { + this.resetHistory(); + this.resetBehavior(); + }, + + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = behavior.create(this); + } + + return this.behaviors[index]; + }, + + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, + + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, + + onThirdCall: function onThirdCall() { + return this.onCall(2); + }, + + withArgs: function withArgs() { + var fake = spy.withArgs.apply(this, arguments); + if (this.defaultBehavior && this.defaultBehavior.promiseLibrary) { + fake.defaultBehavior = + fake.defaultBehavior || behavior.create(fake); + fake.defaultBehavior.promiseLibrary = + this.defaultBehavior.promiseLibrary; + } + return fake; + }, +}; + +forEach(Object.keys(behavior), function (method) { + if ( + hasOwnProperty(behavior, method) && + !hasOwnProperty(proto, method) && + method !== "create" && + method !== "invoke" + ) { + proto[method] = behavior.createBehavior(method); + } +}); + +forEach(Object.keys(behaviors), function (method) { + if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) { + behavior.addBehavior(stub, method, behaviors[method]); + } +}); + +extend(stub, proto); +module.exports = stub; + +},{"./behavior":3,"./default-behaviors":7,"./proxy":15,"./spy":19,"./throw-on-falsy-object":21,"./util/core/extend":24,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/is-non-existent-property":30,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46}],21:[function(require,module,exports){ +"use strict"; +var valueToString = require("@sinonjs/commons").valueToString; + +function throwOnFalsyObject(object, property) { + if (property && !object) { + var type = object === null ? "null" : "undefined"; + throw new Error( + `Trying to stub property '${valueToString(property)}' of ${type}` + ); + } +} + +module.exports = throwOnFalsyObject; + +},{"@sinonjs/commons":46}],22:[function(require,module,exports){ +"use strict"; + +module.exports = { + injectInto: null, + properties: [ + "spy", + "stub", + "mock", + "clock", + "server", + "requests", + "fake", + "replace", + "replaceSetter", + "replaceGetter", + "createStubInstance", + ], + useFakeTimers: true, + useFakeServer: true, +}; + +},{}],23:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var reduce = arrayProto.reduce; + +module.exports = function exportAsyncBehaviors(behaviorMethods) { + return reduce( + Object.keys(behaviorMethods), + function (acc, method) { + // need to avoid creating another async versions of the newly added async methods + if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { + acc[`${method}Async`] = function () { + var result = behaviorMethods[method].apply(this, arguments); + this.callbackAsync = true; + return result; + }; + } + return acc; + }, + {} + ); +}; + +},{"@sinonjs/commons":46}],24:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; + +var join = arrayProto.join; +var push = arrayProto.push; + +// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug +var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9"; + }, + }; + + var result = []; + for (var prop in obj) { + if (hasOwnProperty(obj, prop)) { + push(result, obj[prop]()); + } + } + return join(result, "") !== "0123456789"; +})(); + +function extendCommon(target, sources, doCopy) { + var source, i, prop; + + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + for (prop in source) { + if (hasOwnProperty(source, prop)) { + doCopy(target, source, prop); + } + } + + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if ( + hasDontEnumBug && + hasOwnProperty(source, "toString") && + source.toString !== target.toString + ) { + target.toString = source.toString; + } + } + + return target; +} + +/** Public: Extend target in place with all (own) properties, except 'name' when [[writable]] is false, + * from sources in-order. Thus, last source will override properties in previous sources. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports = function extend(target, ...sources) { + return extendCommon( + target, + sources, + function copyValue(dest, source, prop) { + var destOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + dest, + prop + ); + var sourceOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + source, + prop + ); + + if (prop === "name" && !destOwnPropertyDescriptor.writable) { + return; + } + const descriptors = { + configurable: sourceOwnPropertyDescriptor.configurable, + enumerable: sourceOwnPropertyDescriptor.enumerable, + }; + /* + if the sorce has an Accessor property copy over the accessor functions (get and set) + data properties has writable attribute where as accessor property don't + REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties + */ + + if (hasOwnProperty(sourceOwnPropertyDescriptor, "writable")) { + descriptors.writable = sourceOwnPropertyDescriptor.writable; + descriptors.value = sourceOwnPropertyDescriptor.value; + } else { + if (sourceOwnPropertyDescriptor.get) { + descriptors.get = + sourceOwnPropertyDescriptor.get.bind(dest); + } + if (sourceOwnPropertyDescriptor.set) { + descriptors.set = + sourceOwnPropertyDescriptor.set.bind(dest); + } + } + Object.defineProperty(dest, prop, descriptors); + } + ); +}; + +/** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. Define the properties as non enumerable. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports.nonEnum = function extendNonEnum(target, ...sources) { + return extendCommon( + target, + sources, + function copyProperty(dest, source, prop) { + Object.defineProperty(dest, prop, { + value: source[prop], + enumerable: false, + configurable: true, + writable: true, + }); + } + ); +}; + +},{"@sinonjs/commons":46}],25:[function(require,module,exports){ +"use strict"; + +var inspect = require("util").inspect; +var customFormatter; + +function format() { + if (customFormatter) { + return customFormatter.apply(null, arguments); + } + + return inspect.apply(inspect, arguments); +} + +format.setFormatter = function (aCustomFormatter) { + if (typeof aCustomFormatter !== "function") { + throw new Error("format.setFormatter must be called with a function"); + } + + customFormatter = aCustomFormatter; +}; + +module.exports = format; + +},{"util":91}],26:[function(require,module,exports){ +"use strict"; + +module.exports = function toString() { + var i, prop, thisValue; + if (this.getCall && this.callCount) { + i = this.callCount; + + while (i--) { + thisValue = this.getCall(i).thisValue; + + // eslint-disable-next-line guard-for-in + for (prop in thisValue) { + try { + if (thisValue[prop] === this) { + return prop; + } + } catch (e) { + // no-op - accessing props can throw an error, nothing to do here + } + } + } + } + + return this.displayName || "sinon fake"; +}; + +},{}],27:[function(require,module,exports){ +"use strict"; + +/* istanbul ignore next : not testing that setTimeout works */ +function nextTick(callback) { + setTimeout(callback, 0); +} + +module.exports = function getNextTick(process, setImmediate) { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } + + if (typeof setImmediate === "function") { + return setImmediate; + } + + return nextTick; +}; + +},{}],28:[function(require,module,exports){ +"use strict"; + +module.exports = function getPropertyDescriptor(object, property) { + var proto = object; + var descriptor; + var isOwn = Boolean( + object && Object.getOwnPropertyDescriptor(object, property) + ); + + while ( + proto && + !(descriptor = Object.getOwnPropertyDescriptor(proto, property)) + ) { + proto = Object.getPrototypeOf(proto); + } + + if (descriptor) { + descriptor.isOwn = isOwn; + } + + return descriptor; +}; + +},{}],29:[function(require,module,exports){ +"use strict"; + +/** + * Verify if an object is a ECMAScript Module + * + * As the exports from a module is immutable we cannot alter the exports + * using spies or stubs. Let the consumer know this to avoid bug reports + * on weird error messages. + * + * @param {object} object The object to examine + * + * @returns {boolean} true when the object is a module + */ +module.exports = function (object) { + return ( + object && + typeof Symbol !== "undefined" && + object[Symbol.toStringTag] === "Module" && + Object.isSealed(object) + ); +}; + +},{}],30:[function(require,module,exports){ +"use strict"; + +/** + * @param {*} object + * @param {string} property + * @returns {boolean} whether a prop exists in the prototype chain + */ +function isNonExistentProperty(object, property) { + return Boolean( + object && typeof property !== "undefined" && !(property in object) + ); +} + +module.exports = isNonExistentProperty; + +},{}],31:[function(require,module,exports){ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); + +function isPropertyConfigurable(obj, propName) { + var propertyDescriptor = getPropertyDescriptor(obj, propName); + + return propertyDescriptor ? propertyDescriptor.configurable : true; +} + +module.exports = isPropertyConfigurable; + +},{"./get-property-descriptor":28}],32:[function(require,module,exports){ +"use strict"; + +function isRestorable(obj) { + return ( + typeof obj === "function" && + typeof obj.restore === "function" && + obj.restore.sinon + ); +} + +module.exports = isRestorable; + +},{}],33:[function(require,module,exports){ +"use strict"; + +var globalObject = require("@sinonjs/commons").global; +var getNextTick = require("./get-next-tick"); + +module.exports = getNextTick(globalObject.process, globalObject.setImmediate); + +},{"./get-next-tick":27,"@sinonjs/commons":46}],34:[function(require,module,exports){ +"use strict"; + +var array = [null, "once", "twice", "thrice"]; + +module.exports = function timesInWords(count) { + return array[count] || `${count || 0} times`; +}; + +},{}],35:[function(require,module,exports){ +"use strict"; + +var forEach = Array.prototype.forEach; + +function usePromiseLibrary(library, fakes) { + if (typeof library === "undefined") { + return; + } + + if (Array.isArray(fakes)) { + forEach.call(fakes, usePromiseLibrary.bind(null, library)); + + return; + } + + if (typeof fakes.usingPromise === "function") { + fakes.usingPromise(library); + } +} + +module.exports = usePromiseLibrary; + +},{}],36:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var walk = require("./walk"); + +function walkObject(predicate, object, filter) { + var called = false; + var name = functionName(predicate); + + if (!object) { + throw new Error( + `Trying to ${name} object but received ${String(object)}` + ); + } + + walk(object, function (prop, propOwner) { + // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object + // is not Object.prototype + if ( + propOwner !== Object.prototype && + prop !== "constructor" && + typeof getPropertyDescriptor(propOwner, prop).value === "function" + ) { + if (filter) { + if (filter(object, prop)) { + called = true; + predicate(object, prop); + } + } else { + called = true; + predicate(object, prop); + } + } + }); + + if (!called) { + throw new Error(`Expected to ${name} methods on object but found none`); + } + + return object; +} + +module.exports = walkObject; + +},{"./get-property-descriptor":28,"./walk":37,"@sinonjs/commons":46}],37:[function(require,module,exports){ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.array.forEach; + +function walkInternal(obj, iterator, context, originalObj, seen) { + var proto, prop; + + if (typeof Object.getOwnPropertyNames !== "function") { + // We explicitly want to enumerate through all of the prototype's properties + // in this case, therefore we deliberately leave out an own property check. + /* eslint-disable-next-line guard-for-in */ + for (prop in obj) { + iterator.call(context, obj[prop], prop, obj); + } + + return; + } + + forEach(Object.getOwnPropertyNames(obj), function (k) { + if (seen[k] !== true) { + seen[k] = true; + var target = + typeof Object.getOwnPropertyDescriptor(obj, k).get === + "function" + ? originalObj + : obj; + iterator.call(context, k, target); + } + }); + + proto = Object.getPrototypeOf(obj); + if (proto) { + walkInternal(proto, iterator, context, originalObj, seen); + } +} + +/* Walks the prototype chain of an object and iterates over every own property + * name encountered. The iterator is called in the same fashion that Array.prototype.forEach + * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional + * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will + * default to using a simple for..in loop. + * + * obj - The object to walk the prototype chain for. + * iterator - The function to be called on each pass of the walk. + * context - (Optional) When given, the iterator will be called with this object as the receiver. + */ +module.exports = function walk(obj, iterator, context) { + return walkInternal(obj, iterator, context, obj, {}); +}; + +},{"@sinonjs/commons":46}],38:[function(require,module,exports){ +"use strict"; + +var getPropertyDescriptor = require("./get-property-descriptor"); +var extend = require("./extend"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var valueToString = require("@sinonjs/commons").valueToString; +var push = require("@sinonjs/commons").prototypes.array.push; + +function isFunction(obj) { + return ( + typeof obj === "function" || + Boolean(obj && obj.constructor && obj.call && obj.apply) + ); +} + +function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwnProperty(target, prop)) { + target[prop] = source[prop]; + } + } +} + +function getAccessor(object, property, method) { + var accessors = ["get", "set"]; + var descriptor = getPropertyDescriptor(object, property); + + for (var i = 0; i < accessors.length; i++) { + if ( + descriptor[accessors[i]] && + descriptor[accessors[i]].name === method.name + ) { + return accessors[i]; + } + } + return null; +} + +// Cheap way to detect if we have ES5 support. +var hasES5Support = "keys" in Object; + +module.exports = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } + + if (typeof method !== "function" && typeof method !== "object") { + throw new TypeError( + "Method wrapper should be a function or a property descriptor" + ); + } + + function checkWrappedMethod(wrappedMethod) { + var error; + + if (!isFunction(wrappedMethod)) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${valueToString( + property + )} as function` + ); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already wrapped` + ); + } else if (wrappedMethod.calledBefore) { + var verb = wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already ${verb}` + ); + } + + if (error) { + if (wrappedMethod && wrappedMethod.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethod.stackTraceError.stack}`; + } + throw error; + } + } + + var error, + wrappedMethods, + wrappedMethod, + i, + wrappedMethodDesc, + target, + accessor; + + wrappedMethods = []; + + function simplePropertyAssignment() { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } + + // Firefox has a problem when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty + ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods + : hasOwnProperty(object, property); + + if (hasES5Support) { + var methodDesc = + typeof method === "function" ? { value: method } : method; + wrappedMethodDesc = getPropertyDescriptor(object, property); + + if (!wrappedMethodDesc) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${property} as function` + ); + } else if ( + wrappedMethodDesc.restore && + wrappedMethodDesc.restore.sinon + ) { + error = new TypeError( + `Attempted to wrap ${property} which is already wrapped` + ); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethodDesc.stackTraceError.stack}`; + } + throw error; + } + + var types = Object.keys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + push(wrappedMethods, wrappedMethod); + } + + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + + // catch failing assignment + // this is the converse of the check in `.restore` below + if (typeof method === "function" && object[property] !== method) { + // correct any wrongdoings caused by the defineProperty call above, + // such as adding new items (if object was a Storage object) + delete object[property]; + simplePropertyAssignment(); + } + } else { + simplePropertyAssignment(); + } + + extendObjectWithWrappedMethods(); + + function extendObjectWithWrappedMethods() { + for (i = 0; i < wrappedMethods.length; i++) { + accessor = getAccessor(object, property, wrappedMethods[i]); + target = accessor ? method[accessor] : method; + extend.nonEnum(target, { + displayName: property, + wrappedMethod: wrappedMethods[i], + + // Set up an Error object for a stack trace which can be used later to find what line of + // code the original method was created on. + stackTraceError: new Error("Stack Trace for original"), + + restore: restore, + }); + + target.restore.sinon = true; + if (!hasES5Support) { + mirrorProperties(target, wrappedMethod); + } + } + } + + function restore() { + accessor = getAccessor(object, property, this.wrappedMethod); + var descriptor; + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (accessor) { + if (!owned) { + try { + // In some cases `delete` may throw an error + delete object[property][accessor]; + } catch (e) {} // eslint-disable-line no-empty + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + descriptor[accessor] = wrappedMethodDesc[accessor]; + Object.defineProperty(object, property, descriptor); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property][accessor] = this.wrappedMethod; + } + } else { + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property][accessor] === target) { + object[property][accessor] = this.wrappedMethod; + } + } + } else { + if (!owned) { + try { + delete object[property]; + } catch (e) {} // eslint-disable-line no-empty + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } + + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property] = this.wrappedMethod; + } + } else { + if (object[property] === target) { + object[property] = this.wrappedMethod; + } + } + } + } + + return method; +}; + +},{"./extend":24,"./get-property-descriptor":28,"@sinonjs/commons":46}],39:[function(require,module,exports){ +"use strict"; + +var extend = require("./core/extend"); +var FakeTimers = require("@sinonjs/fake-timers"); +var globalObject = require("@sinonjs/commons").global; + +function createClock(config, globalCtx) { + var FakeTimersCtx = FakeTimers; + if (globalCtx !== null && typeof globalCtx === "object") { + FakeTimersCtx = FakeTimers.withGlobal(globalCtx); + } + var clock = FakeTimersCtx.install(config); + clock.restore = clock.uninstall; + return clock; +} + +function addIfDefined(obj, globalPropName) { + var globalProp = globalObject[globalPropName]; + if (typeof globalProp !== "undefined") { + obj[globalPropName] = globalProp; + } +} + +/** + * @param {number|Date|object} dateOrConfig The unix epoch value to install with (default 0) + * @returns {object} Returns a lolex clock instance + */ +exports.useFakeTimers = function (dateOrConfig) { + var hasArguments = typeof dateOrConfig !== "undefined"; + var argumentIsDateLike = + (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) && + arguments.length === 1; + var argumentIsObject = + dateOrConfig !== null && + typeof dateOrConfig === "object" && + arguments.length === 1; + + if (!hasArguments) { + return createClock({ + now: 0, + }); + } + + if (argumentIsDateLike) { + return createClock({ + now: dateOrConfig, + }); + } + + if (argumentIsObject) { + var config = extend.nonEnum({}, dateOrConfig); + var globalCtx = config.global; + delete config.global; + return createClock(config, globalCtx); + } + + throw new TypeError( + "useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon" + ); +}; + +exports.clock = { + create: function (now) { + return FakeTimers.createClock(now); + }, +}; + +var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date, +}; +addIfDefined(timers, "setImmediate"); +addIfDefined(timers, "clearImmediate"); + +exports.timers = timers; + +},{"./core/extend":24,"@sinonjs/commons":46,"@sinonjs/fake-timers":58}],40:[function(require,module,exports){ +"use strict"; + +var every = require("./prototypes/array").every; + +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } + + return callMap[spy.id] < spy.callCount; +} + +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; + + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } + + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } + + return false; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ + +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; + + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} + +module.exports = calledInOrder; + +},{"./prototypes/array":48}],41:[function(require,module,exports){ +"use strict"; + +var functionName = require("./function-name"); + +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + return ( + (value.constructor && value.constructor.name) || + // The next branch is for IE11 support only: + // Because the name property is not set on the prototype + // of the Function object, we finally try to grab the + // name from its definition. This will never be reached + // in node, so we are not able to test this properly. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + (typeof value.constructor === "function" && + /* istanbul ignore next */ + functionName(value.constructor)) || + null + ); +} + +module.exports = className; + +},{"./function-name":44}],42:[function(require,module,exports){ +/* eslint-disable no-console */ +"use strict"; + +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function(func, msg) { + var wrapped = function() { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; + } + return wrapped; +}; + +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function(packageName, funcName) { + return ( + packageName + + "." + + funcName + + " is deprecated and will be removed from the public API in a future version of " + + packageName + + "." + ); +}; + +/** + * Prints a warning on the console, when it exists + * + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function(msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); + } +}; + +},{}],43:[function(require,module,exports){ +"use strict"; + +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function() { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; + } + + return pass; +}; + +},{}],44:[function(require,module,exports){ +"use strict"; + +/** + * Returns a display name for a function + * + * @param {Function} func + * @returns {string} + */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; + +},{}],45:[function(require,module,exports){ +"use strict"; + +/** + * A reference to the global object + * + * @type {object} globalObject + */ +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} + +module.exports = globalObject; + +},{}],46:[function(require,module,exports){ +"use strict"; + +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string") +}; + +},{"./called-in-order":40,"./class-name":41,"./deprecated":42,"./every":43,"./function-name":44,"./global":45,"./order-by-first-call":47,"./prototypes":51,"./type-of":56,"./value-to-string":57}],47:[function(require,module,exports){ +"use strict"; + +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; + +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} + +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ + +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} + +module.exports = orderByFirstCall; + +},{"./prototypes/array":48}],48:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Array.prototype); + +},{"./copy-prototype":49}],49:[function(require,module,exports){ +"use strict"; + +var call = Function.call; + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function(result, name) { + // ignore size because it throws from Map + if ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof prototype[name] === "function" + ) { + result[name] = call.bind(prototype[name]); + } + + return result; + }, Object.create(null)); +}; + +},{}],50:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Function.prototype); + +},{"./copy-prototype":49}],51:[function(require,module,exports){ +"use strict"; + +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string") +}; + +},{"./array":48,"./function":50,"./map":52,"./object":53,"./set":54,"./string":55}],52:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Map.prototype); + +},{"./copy-prototype":49}],53:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Object.prototype); + +},{"./copy-prototype":49}],54:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(Set.prototype); + +},{"./copy-prototype":49}],55:[function(require,module,exports){ +"use strict"; + +var copyPrototype = require("./copy-prototype"); + +module.exports = copyPrototype(String.prototype); + +},{"./copy-prototype":49}],56:[function(require,module,exports){ +"use strict"; + +var type = require("type-detect"); + +/** + * Returns the lower-case result of running type from type-detect on the value + * + * @param {*} value + * @returns {string} + */ +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; + +},{"type-detect":110}],57:[function(require,module,exports){ +"use strict"; + +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); + } + return String(value); +} + +module.exports = valueToString; + +},{}],58:[function(require,module,exports){ +"use strict"; + +const globalObject = require("@sinonjs/commons").global; + +/** + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods + * + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id + */ + +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ + +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ + +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ + +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ + +/** + * @typedef Performance + * @property {function(): number} now + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ + +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ + +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ + +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ + +/* eslint-disable complexity */ + +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; + + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } + + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ + + _global.clearTimeout(timeoutResult); + + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; + + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } + + return isFinite(num); + } + + let isNearInfiniteLimit = false; + + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } + } + + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; + } + + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } + + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); + } + + ms += parsed * Math.pow(60, l - i - 1); + } + + return ms * 1000; + } + + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; + + return Math.floor(positiveRemainder); + } + + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); + } + + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; + } + + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); + + if (!job.error) { + return infiniteLoopError; + } + + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); + + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); + } + + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; + } + + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; + } + + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); + + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; + + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } + + return infiniteLoopError; + } + + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + return target; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } + + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); + + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); + } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } + + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); + } + } + + if (isNearInfiniteLimit) { + timer.error = new Error(); + } + + timer.type = timer.immediate ? "Immediate" : "Timeout"; + + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } + + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } + + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; + } + + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; + } + + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + ref: function () { + return res; + }, + unref: function () { + return res; + }, + refresh: function () { + clearTimeout(timer.id); + const args = [timer.func, timer.delay].concat(timer.args); + return setTimeout.apply(null, args); + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } + + return timer.id; + } + + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } + + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); + + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; + + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } + } + } + + return timer; + } + + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); + } + } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; + } + return `clear${ttype}`; + } + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; + } + return `set${ttype}`; + } + + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); + + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + + if (!clock.timers) { + clock.timers = {}; + } + + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; + } + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); + } + } + } + + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; + + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } + } + } + } + + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; + } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); + } + + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); + } + + target[method].clock = clock; + } + + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); + } + + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; + } + + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; + } + + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; + } + + if (performancePresent) { + timers.performance = _global.performance; + } + + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); + } + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; + } + return [secsSinceStart, remainderInNanos]; + } + + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } + + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; + + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[ + utilPromisify.custom + ] = function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, + }); + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[ + utilPromisify.custom + ] = function promisifiedSetImmediate(arg) { + return new _global.Promise(function setImmediateExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + }); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + args: [clock.now + getTimeToNextFrame()], + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys(clock.timers) + .length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = function FakeTimersNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + }; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; + +},{"@sinonjs/commons":46,"util":91}],59:[function(require,module,exports){ +"use strict"; + +var ARRAY_TYPES = [ + Array, + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, +]; + +module.exports = ARRAY_TYPES; + +},{}],60:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var deepEqual = require("./deep-equal").use(createMatcher); // eslint-disable-line no-use-before-define +var every = require("@sinonjs/commons").every; +var functionName = require("@sinonjs/commons").functionName; +var get = require("lodash.get"); +var iterableToString = require("./iterable-to-string"); +var objectProto = require("@sinonjs/commons").prototypes.object; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var assertMatcher = require("./create-matcher/assert-matcher"); +var assertMethodExists = require("./create-matcher/assert-method-exists"); +var assertType = require("./create-matcher/assert-type"); +var isIterable = require("./create-matcher/is-iterable"); +var isMatcher = require("./create-matcher/is-matcher"); + +var matcherPrototype = require("./create-matcher/matcher-prototype"); + +var arrayIndexOf = arrayProto.indexOf; +var some = arrayProto.some; + +var hasOwnProperty = objectProto.hasOwnProperty; +var objectToString = objectProto.toString; + +var TYPE_MAP = require("./create-matcher/type-map")(createMatcher); // eslint-disable-line no-use-before-define + +/** + * Creates a matcher object for the passed expectation + * + * @alias module:samsam.createMatcher + * @param {*} expectation An expecttation + * @param {string} message A message for the expectation + * @returns {object} A matcher object + */ +function createMatcher(expectation, message) { + var m = Object.create(matcherPrototype); + var type = typeOf(expectation); + + if (message !== undefined && typeof message !== "string") { + throw new TypeError("Message should be a string"); + } + + if (arguments.length > 2) { + throw new TypeError( + `Expected 1 or 2 arguments, received ${arguments.length}` + ); + } + + if (type in TYPE_MAP) { + TYPE_MAP[type](m, expectation, message); + } else { + m.test = function (actual) { + return deepEqual(actual, expectation); + }; + } + + if (!m.message) { + m.message = `match(${valueToString(expectation)})`; + } + + return m; +} + +createMatcher.isMatcher = isMatcher; + +createMatcher.any = createMatcher(function () { + return true; +}, "any"); + +createMatcher.defined = createMatcher(function (actual) { + return actual !== null && actual !== undefined; +}, "defined"); + +createMatcher.truthy = createMatcher(function (actual) { + return Boolean(actual); +}, "truthy"); + +createMatcher.falsy = createMatcher(function (actual) { + return !actual; +}, "falsy"); + +createMatcher.same = function (expectation) { + return createMatcher(function (actual) { + return expectation === actual; + }, `same(${valueToString(expectation)})`); +}; + +createMatcher.in = function (arrayOfExpectations) { + if (typeOf(arrayOfExpectations) !== "array") { + throw new TypeError("array expected"); + } + + return createMatcher(function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, `in(${valueToString(arrayOfExpectations)})`); +}; + +createMatcher.typeOf = function (type) { + assertType(type, "string", "type"); + return createMatcher(function (actual) { + return typeOf(actual) === type; + }, `typeOf("${type}")`); +}; + +createMatcher.instanceOf = function (type) { + /* istanbul ignore if */ + if ( + typeof Symbol === "undefined" || + typeof Symbol.hasInstance === "undefined" + ) { + assertType(type, "function", "type"); + } else { + assertMethodExists( + type, + Symbol.hasInstance, + "type", + "[Symbol.hasInstance]" + ); + } + return createMatcher(function (actual) { + return actual instanceof type; + }, `instanceOf(${functionName(type) || objectToString(type)})`); +}; + +/** + * Creates a property matcher + * + * @private + * @param {Function} propertyTest A function to test the property against a value + * @param {string} messagePrefix A prefix to use for messages generated by the matcher + * @returns {object} A matcher + */ +function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `${messagePrefix}("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + !propertyTest(actual, property) + ) { + return false; + } + return onlyProperty || deepEqual(actual[property], value); + }, message); + }; +} + +createMatcher.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; +}, "has"); + +createMatcher.hasOwn = createPropertyMatcher(function (actual, property) { + return hasOwnProperty(actual, property); +}, "hasOwn"); + +createMatcher.hasNested = function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `hasNested("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + get(actual, property) === undefined + ) { + return false; + } + return onlyProperty || deepEqual(get(actual, property), value); + }, message); +}; + +var jsonParseResultTypes = { + null: true, + boolean: true, + number: true, + string: true, + object: true, + array: true, +}; +createMatcher.json = function (value) { + if (!jsonParseResultTypes[typeOf(value)]) { + throw new TypeError("Value cannot be the result of JSON.parse"); + } + var message = `json(${JSON.stringify(value, null, " ")})`; + return createMatcher(function (actual) { + var parsed; + try { + parsed = JSON.parse(actual); + } catch (e) { + return false; + } + return deepEqual(parsed, value); + }, message); +}; + +createMatcher.every = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return every(Object.keys(actual), function (key) { + return predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + every(actual, function (element) { + return predicate.test(element); + }) + ); + }, `every(${predicate.message})`); +}; + +createMatcher.some = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return !every(Object.keys(actual), function (key) { + return !predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + !every(actual, function (element) { + return !predicate.test(element); + }) + ); + }, `some(${predicate.message})`); +}; + +createMatcher.array = createMatcher.typeOf("array"); + +createMatcher.array.deepEquals = function (expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, `deepEquals([${iterableToString(expectation)}])`); +}; + +createMatcher.array.startsWith = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, `startsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.endsWith = function (expectation) { + return createMatcher(function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; + + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, `endsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.contains = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, `contains([${iterableToString(expectation)}])`); +}; + +createMatcher.map = createMatcher.typeOf("map"); + +createMatcher.map.deepEquals = function mapDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return expectation.has(key) && expectation.get(key) === element; + }) + ); + }, `deepEquals(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.map.contains = function mapContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, `contains(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.set = createMatcher.typeOf("set"); + +createMatcher.set.deepEquals = function setDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, `deepEquals(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.set.contains = function setContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, `contains(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.bool = createMatcher.typeOf("boolean"); +createMatcher.number = createMatcher.typeOf("number"); +createMatcher.string = createMatcher.typeOf("string"); +createMatcher.object = createMatcher.typeOf("object"); +createMatcher.func = createMatcher.typeOf("function"); +createMatcher.regexp = createMatcher.typeOf("regexp"); +createMatcher.date = createMatcher.typeOf("date"); +createMatcher.symbol = createMatcher.typeOf("symbol"); + +module.exports = createMatcher; + +},{"./create-matcher/assert-matcher":61,"./create-matcher/assert-method-exists":62,"./create-matcher/assert-type":63,"./create-matcher/is-iterable":64,"./create-matcher/is-matcher":65,"./create-matcher/matcher-prototype":67,"./create-matcher/type-map":68,"./deep-equal":69,"./iterable-to-string":83,"@sinonjs/commons":46,"lodash.get":94}],61:[function(require,module,exports){ +"use strict"; + +var isMatcher = require("./is-matcher"); + +/** + * Throws a TypeError when `value` is not a matcher + * + * @private + * @param {*} value The value to examine + */ +function assertMatcher(value) { + if (!isMatcher(value)) { + throw new TypeError("Matcher expected"); + } +} + +module.exports = assertMatcher; + +},{"./is-matcher":65}],62:[function(require,module,exports){ +"use strict"; + +/** + * Throws a TypeError when expected method doesn't exist + * + * @private + * @param {*} value A value to examine + * @param {string} method The name of the method to look for + * @param {name} name A name to use for the error message + * @param {string} methodPath The name of the method to use for error messages + * @throws {TypeError} When the method doesn't exist + */ +function assertMethodExists(value, method, name, methodPath) { + if (value[method] === null || value[method] === undefined) { + throw new TypeError(`Expected ${name} to have method ${methodPath}`); + } +} + +module.exports = assertMethodExists; + +},{}],63:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Ensures that value is of type + * + * @private + * @param {*} value A value to examine + * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string" + * @param {string} name A string to use for the error message + * @throws {TypeError} If value is not of the expected type + * @returns {undefined} + */ +function assertType(value, type, name) { + var actual = typeOf(value); + if (actual !== type) { + throw new TypeError( + `Expected type of ${name} to be ${type}, but was ${actual}` + ); + } +} + +module.exports = assertType; + +},{"@sinonjs/commons":46}],64:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Returns `true` for iterables + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` looks like an iterable + */ +function isIterable(value) { + return Boolean(value) && typeOf(value.forEach) === "function"; +} + +module.exports = isIterable; + +},{"@sinonjs/commons":46}],65:[function(require,module,exports){ +"use strict"; + +var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; + +var matcherPrototype = require("./matcher-prototype"); + +/** + * Returns `true` when `object` is a matcher + * + * @private + * @param {*} object A value to examine + * @returns {boolean} Returns `true` when `object` is a matcher + */ +function isMatcher(object) { + return isPrototypeOf(matcherPrototype, object); +} + +module.exports = isMatcher; + +},{"./matcher-prototype":67,"@sinonjs/commons":46}],66:[function(require,module,exports){ +"use strict"; + +var every = require("@sinonjs/commons").prototypes.array.every; +var concat = require("@sinonjs/commons").prototypes.array.concat; +var typeOf = require("@sinonjs/commons").typeOf; + +var deepEqualFactory = require("../deep-equal").use; + +var isMatcher = require("./is-matcher"); + +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Matches `actual` with `expectation` + * + * @private + * @param {*} actual A value to examine + * @param {object} expectation An object with properties to match on + * @param {object} matcher A matcher to use for comparison + * @returns {boolean} Returns true when `actual` matches all properties in `expectation` + */ +function matchObject(actual, expectation, matcher) { + var deepEqual = deepEqualFactory(matcher); + if (actual === null || actual === undefined) { + return false; + } + + var expectedKeys = keys(expectation); + /* istanbul ignore else: cannot collect coverage for engine that doesn't support Symbol */ + if (typeOf(getOwnPropertySymbols) === "function") { + expectedKeys = concat(expectedKeys, getOwnPropertySymbols(expectation)); + } + + return every(expectedKeys, function (key) { + var exp = expectation[key]; + var act = actual[key]; + + if (isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (typeOf(exp) === "object") { + if (!matchObject(act, exp, matcher)) { + return false; + } + } else if (!deepEqual(act, exp)) { + return false; + } + + return true; + }); +} + +module.exports = matchObject; + +},{"../deep-equal":69,"./is-matcher":65,"@sinonjs/commons":46}],67:[function(require,module,exports){ +"use strict"; + +var matcherPrototype = { + toString: function () { + return this.message; + }, +}; + +matcherPrototype.or = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var or = Object.create(matcherPrototype); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = `${m1.message}.or(${m2.message})`; + return or; +}; + +matcherPrototype.and = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var and = Object.create(matcherPrototype); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = `${m1.message}.and(${m2.message})`; + return and; +}; + +module.exports = matcherPrototype; + +},{"../create-matcher":60}],68:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var join = require("@sinonjs/commons").prototypes.array.join; +var map = require("@sinonjs/commons").prototypes.array.map; +var stringIndexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var matchObject = require("./match-object"); + +var createTypeMap = function (match) { + return { + function: function (m, expectation, message) { + m.test = expectation; + m.message = message || `match(${functionName(expectation)})`; + }, + number: function (m, expectation) { + m.test = function (actual) { + // we need type coercion here + return expectation == actual; // eslint-disable-line eqeqeq + }; + }, + object: function (m, expectation) { + var array = []; + + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = `match(${functionName(expectation.test)})`; + return m; + } + + array = map(Object.keys(expectation), function (key) { + return `${key}: ${valueToString(expectation[key])}`; + }); + + m.test = function (actual) { + return matchObject(actual, expectation, match); + }; + m.message = `match(${join(array, ", ")})`; + + return m; + }, + regexp: function (m, expectation) { + m.test = function (actual) { + return typeof actual === "string" && expectation.test(actual); + }; + }, + string: function (m, expectation) { + m.test = function (actual) { + return ( + typeof actual === "string" && + stringIndexOf(actual, expectation) !== -1 + ); + }; + m.message = `match("${expectation}")`; + }, + }; +}; + +module.exports = createTypeMap; + +},{"./match-object":66,"@sinonjs/commons":46}],69:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var className = require("@sinonjs/commons").className; +var typeOf = require("@sinonjs/commons").typeOf; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var objectProto = require("@sinonjs/commons").prototypes.object; +var mapForEach = require("@sinonjs/commons").prototypes.map.forEach; + +var getClass = require("./get-class"); +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isArrayType = require("./is-array-type"); +var isDate = require("./is-date"); +var isElement = require("./is-element"); +var isIterable = require("./is-iterable"); +var isMap = require("./is-map"); +var isNaN = require("./is-nan"); +var isObject = require("./is-object"); +var isSet = require("./is-set"); +var isSubset = require("./is-subset"); + +var concat = arrayProto.concat; +var every = arrayProto.every; +var push = arrayProto.push; + +var getTime = Date.prototype.getTime; +var hasOwnProperty = objectProto.hasOwnProperty; +var indexOf = arrayProto.indexOf; +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Deep equal comparison. Two values are "deep equal" when: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``actual`` is deepEqual to the corresponding property in ``expectation`` + * + * Supports cyclic objects. + * + * @alias module:samsam.deepEqual + * @param {*} actual The object to examine + * @param {*} expectation The object actual is expected to be equal to + * @param {object} match A value to match on + * @returns {boolean} Returns true when actual and expectation are considered equal + */ +function deepEqualCyclic(actual, expectation, match) { + // used for cyclic comparison + // contain already visited objects + var actualObjects = []; + var expectationObjects = []; + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + var actualPaths = []; + var expectationPaths = []; + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + var compared = {}; + + // does the recursion for the deep equal check + // eslint-disable-next-line complexity + return (function deepEqual( + actualObj, + expectationObj, + actualPath, + expectationPath + ) { + // If both are matchers they must be the same instance in order to be + // considered equal If we didn't do that we would end up running one + // matcher against the other + if (match && match.isMatcher(expectationObj)) { + if (match.isMatcher(actualObj)) { + return actualObj === expectationObj; + } + return expectationObj.test(actualObj); + } + + var actualType = typeof actualObj; + var expectationType = typeof expectationObj; + + if ( + actualObj === expectationObj || + isNaN(actualObj) || + isNaN(expectationObj) || + actualObj === null || + expectationObj === null || + actualObj === undefined || + expectationObj === undefined || + actualType !== "object" || + expectationType !== "object" + ) { + return identical(actualObj, expectationObj); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(actualObj) || isElement(expectationObj)) { + return false; + } + + var isActualDate = isDate(actualObj); + var isExpectationDate = isDate(expectationObj); + if (isActualDate || isExpectationDate) { + if ( + !isActualDate || + !isExpectationDate || + getTime.call(actualObj) !== getTime.call(expectationObj) + ) { + return false; + } + } + + if (actualObj instanceof RegExp && expectationObj instanceof RegExp) { + if (valueToString(actualObj) !== valueToString(expectationObj)) { + return false; + } + } + + if (actualObj instanceof Promise && expectationObj instanceof Promise) { + return actualObj === expectationObj; + } + + if (actualObj instanceof Error && expectationObj instanceof Error) { + return actualObj === expectationObj; + } + + var actualClass = getClass(actualObj); + var expectationClass = getClass(expectationObj); + var actualKeys = keys(actualObj); + var expectationKeys = keys(expectationObj); + var actualName = className(actualObj); + var expectationName = className(expectationObj); + var expectationSymbols = + typeOf(getOwnPropertySymbols) === "function" + ? getOwnPropertySymbols(expectationObj) + : /* istanbul ignore next: cannot collect coverage for engine that doesn't support Symbol */ + []; + var expectationKeysAndSymbols = concat( + expectationKeys, + expectationSymbols + ); + + if (isArguments(actualObj) || isArguments(expectationObj)) { + if (actualObj.length !== expectationObj.length) { + return false; + } + } else { + if ( + actualType !== expectationType || + actualClass !== expectationClass || + actualKeys.length !== expectationKeys.length || + (actualName && + expectationName && + actualName !== expectationName) + ) { + return false; + } + } + + if (isSet(actualObj) || isSet(expectationObj)) { + if ( + !isSet(actualObj) || + !isSet(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + return isSubset(actualObj, expectationObj, deepEqual); + } + + if (isMap(actualObj) || isMap(expectationObj)) { + if ( + !isMap(actualObj) || + !isMap(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + var mapsDeeplyEqual = true; + mapForEach(actualObj, function (value, key) { + mapsDeeplyEqual = + mapsDeeplyEqual && + deepEqualCyclic(value, expectationObj.get(key)); + }); + + return mapsDeeplyEqual; + } + + var isActualNonArrayIterable = + isIterable(actualObj) && + !isArrayType(actualObj) && + !isArguments(actualObj); + var isExpectationNonArrayIterable = + isIterable(expectation) && + !isArrayType(expectation) && + !isArguments(expectation); + if (isActualNonArrayIterable || isExpectationNonArrayIterable) { + var actualArray = Array.from(actualObj); + var expectationArray = Array.from(expectation); + if (actualArray.length !== expectationArray.length) { + return false; + } + + var arrayDeeplyEquals = true; + every(actualArray, function (key) { + arrayDeeplyEquals = + arrayDeeplyEquals && + deepEqualCyclic(actualArray[key], expectationArray[key]); + }); + + return arrayDeeplyEquals; + } + + return every(expectationKeysAndSymbols, function (key) { + if (!hasOwnProperty(actualObj, key)) { + return false; + } + + var actualValue = actualObj[key]; + var expectationValue = expectationObj[key]; + var actualObject = isObject(actualValue); + var expectationObject = isObject(expectationValue); + // determines, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + var actualIndex = actualObject + ? indexOf(actualObjects, actualValue) + : -1; + var expectationIndex = expectationObject + ? indexOf(expectationObjects, expectationValue) + : -1; + // determines the new paths of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + var newActualPath = + actualIndex !== -1 + ? actualPaths[actualIndex] + : `${actualPath}[${JSON.stringify(key)}]`; + var newExpectationPath = + expectationIndex !== -1 + ? expectationPaths[expectationIndex] + : `${expectationPath}[${JSON.stringify(key)}]`; + var combinedPath = newActualPath + newExpectationPath; + + // stop recursion if current objects are already compared + if (compared[combinedPath]) { + return true; + } + + // remember the current objects and their paths + if (actualIndex === -1 && actualObject) { + push(actualObjects, actualValue); + push(actualPaths, newActualPath); + } + if (expectationIndex === -1 && expectationObject) { + push(expectationObjects, expectationValue); + push(expectationPaths, newExpectationPath); + } + + // remember that the current objects are already compared + if (actualObject && expectationObject) { + compared[combinedPath] = true; + } + + // End of cyclic logic + + // neither actualValue nor expectationValue is a cycle + // continue with next level + return deepEqual( + actualValue, + expectationValue, + newActualPath, + newExpectationPath + ); + }); + })(actual, expectation, "$1", "$2"); +} + +deepEqualCyclic.use = function (match) { + return function deepEqual(a, b) { + return deepEqualCyclic(a, b, match); + }; +}; + +module.exports = deepEqualCyclic; + +},{"./get-class":70,"./identical":71,"./is-arguments":72,"./is-array-type":73,"./is-date":74,"./is-element":75,"./is-iterable":76,"./is-map":77,"./is-nan":78,"./is-object":80,"./is-set":81,"./is-subset":82,"@sinonjs/commons":46}],70:[function(require,module,exports){ +"use strict"; + +var toString = require("@sinonjs/commons").prototypes.object.toString; + +/** + * Returns the internal `Class` by calling `Object.prototype.toString` + * with the provided value as `this`. Return value is a `String`, naming the + * internal class, e.g. "Array" + * + * @private + * @param {*} value - Any value + * @returns {string} - A string representation of the `Class` of `value` + */ +function getClass(value) { + return toString(value).split(/[ \]]/)[1]; +} + +module.exports = getClass; + +},{"@sinonjs/commons":46}],71:[function(require,module,exports){ +"use strict"; + +var isNaN = require("./is-nan"); +var isNegZero = require("./is-neg-zero"); + +/** + * Strict equality check according to EcmaScript Harmony's `egal`. + * + * **From the Harmony wiki:** + * > An `egal` function simply makes available the internal `SameValue` function + * > from section 9.12 of the ES5 spec. If two values are egal, then they are not + * > observably distinguishable. + * + * `identical` returns `true` when `===` is `true`, except for `-0` and + * `+0`, where it returns `false`. Additionally, it returns `true` when + * `NaN` is compared to itself. + * + * @alias module:samsam.identical + * @param {*} obj1 The first value to compare + * @param {*} obj2 The second value to compare + * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise + */ +function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + + return false; +} + +module.exports = identical; + +},{"./is-nan":78,"./is-neg-zero":79}],72:[function(require,module,exports){ +"use strict"; + +var getClass = require("./get-class"); + +/** + * Returns `true` when `object` is an `arguments` object, `false` otherwise + * + * @alias module:samsam.isArguments + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an `arguments` object + */ +function isArguments(object) { + return getClass(object) === "Arguments"; +} + +module.exports = isArguments; + +},{"./get-class":70}],73:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var indexOf = require("@sinonjs/commons").prototypes.array.indexOf; +var map = require("@sinonjs/commons").prototypes.array.map; +var ARRAY_TYPES = require("./array-types"); +var type = require("type-detect"); + +/** + * Returns `true` when `object` is an array type, `false` otherwise + * + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an array type + * @private + */ +function isArrayType(object) { + return indexOf(map(ARRAY_TYPES, functionName), type(object)) !== -1; +} + +module.exports = isArrayType; + +},{"./array-types":59,"@sinonjs/commons":46,"type-detect":110}],74:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is an instance of Date + * + * @private + * @param {Date} value The value to examine + * @returns {boolean} `true` when `value` is an instance of Date + */ +function isDate(value) { + return value instanceof Date; +} + +module.exports = isDate; + +},{}],75:[function(require,module,exports){ +"use strict"; + +var div = typeof document !== "undefined" && document.createElement("div"); + +/** + * Returns `true` when `object` is a DOM element node. + * + * Unlike Underscore.js/lodash, this function will return `false` if `object` + * is an *element-like* object, i.e. a regular object with a `nodeType` + * property that holds the value `1`. + * + * @alias module:samsam.isElement + * @param {object} object The object to examine + * @returns {boolean} Returns `true` for DOM element nodes + */ +function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { + return false; + } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; +} + +module.exports = isElement; + +},{}],76:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an iterable, `false` otherwise + * + * @alias module:samsam.isIterable + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise + */ +function isIterable(val) { + // checks for null and undefined + if (typeof val !== "object") { + return false; + } + return typeof val[Symbol.iterator] === "function"; +} + +module.exports = isIterable; + +},{}],77:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is a Map + * + * @param {*} value A value to examine + * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise + * @private + */ +function isMap(value) { + return typeof Map !== "undefined" && value instanceof Map; +} + +module.exports = isMap; + +},{}],78:[function(require,module,exports){ +"use strict"; + +/** + * Compares a `value` to `NaN` + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `NaN` + */ +function isNaN(value) { + // Unlike global `isNaN`, this function avoids type coercion + // `typeof` check avoids IE host object issues, hat tip to + // lodash + + // eslint-disable-next-line no-self-compare + return typeof value === "number" && value !== value; +} + +module.exports = isNaN; + +},{}],79:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is `-0` + * + * @alias module:samsam.isNegZero + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `-0` + */ +function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; +} + +module.exports = isNegZero; + +},{}],80:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the value is a regular Object and not a specialized Object + * + * This helps speed up deepEqual cyclic checks + * + * The premise is that only Objects are stored in the visited array. + * So if this function returns false, we don't have to do the + * expensive operation of searching for the value in the the array of already + * visited objects + * + * @private + * @param {object} value The object to examine + * @returns {boolean} `true` when the object is a non-specialised object + */ +function isObject(value) { + return ( + typeof value === "object" && + value !== null && + // none of these are collection objects, so we can return false + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Error) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String) + ); +} + +module.exports = isObject; + +},{}],81:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an instance of Set, `false` otherwise + * + * @alias module:samsam.isSet + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise + */ +function isSet(val) { + return (typeof Set !== "undefined" && val instanceof Set) || false; +} + +module.exports = isSet; + +},{}],82:[function(require,module,exports){ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.set.forEach; + +/** + * Returns `true` when `s1` is a subset of `s2`, `false` otherwise + * + * @private + * @param {Array|Set} s1 The target value + * @param {Array|Set} s2 The containing value + * @param {Function} compare A comparison function, should return `true` when + * values are considered equal + * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise + */ +function isSubset(s1, s2, compare) { + var allContained = true; + forEach(s1, function (v1) { + var includes = false; + forEach(s2, function (v2) { + if (compare(v2, v1)) { + includes = true; + } + }); + allContained = allContained && includes; + }); + + return allContained; +} + +module.exports = isSubset; + +},{"@sinonjs/commons":46}],83:[function(require,module,exports){ +"use strict"; + +var slice = require("@sinonjs/commons").prototypes.string.slice; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +/** + * Creates a string represenation of an iterable object + * + * @private + * @param {object} obj The iterable object to stringify + * @returns {string} A string representation + */ +function iterableToString(obj) { + if (typeOf(obj) === "map") { + return mapToString(obj); + } + + return genericIterableToString(obj); +} + +/** + * Creates a string representation of a Map + * + * @private + * @param {Map} map The map to stringify + * @returns {string} A string representation + */ +function mapToString(map) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + map.forEach(function (value, key) { + representation += `[${stringify(key)},${stringify(value)}],`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Create a string represenation for an iterable + * + * @private + * @param {object} iterable The iterable to stringify + * @returns {string} A string representation + */ +function genericIterableToString(iterable) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + iterable.forEach(function (value) { + representation += `${stringify(value)},`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Creates a string representation of the passed `item` + * + * @private + * @param {object} item The item to stringify + * @returns {string} A string representation of `item` + */ +function stringify(item) { + return typeof item === "string" ? `'${item}'` : valueToString(item); +} + +module.exports = iterableToString; + +},{"@sinonjs/commons":46}],84:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var indexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var forEach = require("@sinonjs/commons").prototypes.array.forEach; +var type = require("type-detect"); + +var engineCanCompareMaps = typeof Array.from === "function"; +var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define +var isArrayType = require("./is-array-type"); +var isSubset = require("./is-subset"); +var createMatcher = require("./create-matcher"); + +/** + * Returns true when `array` contains all of `subset` as defined by the `compare` + * argument + * + * @param {Array} array An array to search for a subset + * @param {Array} subset The subset to find in the array + * @param {Function} compare A comparison function + * @returns {boolean} [description] + * @private + */ +function arrayContains(array, subset, compare) { + if (subset.length === 0) { + return true; + } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (compare(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (i + j >= l) { + return false; + } + if (!compare(array[i + j], subset[j])) { + return false; + } + } + return true; + } + } + return false; +} + +/* eslint-disable complexity */ +/** + * Matches an object with a matcher (or value) + * + * @alias module:samsam.match + * @param {object} object The object candidate to match + * @param {object} matcherOrValue A matcher or value to match against + * @returns {boolean} true when `object` matches `matcherOrValue` + */ +function match(object, matcherOrValue) { + if (matcherOrValue && typeof matcherOrValue.test === "function") { + return matcherOrValue.test(object); + } + + switch (type(matcherOrValue)) { + case "bigint": + case "boolean": + case "number": + case "symbol": + return matcherOrValue === object; + case "function": + return matcherOrValue(object) === true; + case "string": + var notNull = typeof object === "string" || Boolean(object); + return ( + notNull && + indexOf( + valueToString(object).toLowerCase(), + matcherOrValue.toLowerCase() + ) >= 0 + ); + case "null": + return object === null; + case "undefined": + return typeof object === "undefined"; + case "Date": + /* istanbul ignore else */ + if (type(object) === "Date") { + return object.getTime() === matcherOrValue.getTime(); + } + /* istanbul ignore next: this is basically the rest of the function, which is covered */ + break; + case "Array": + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + return ( + isArrayType(matcherOrValue) && + arrayContains(object, matcherOrValue, match) + ); + case "Map": + /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ + if (!engineCanCompareMaps) { + throw new Error( + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + ); + } + + return ( + type(object) === "Map" && + arrayContains( + Array.from(object), + Array.from(matcherOrValue), + match + ) + ); + default: + break; + } + + switch (type(object)) { + case "null": + return false; + case "Set": + return isSubset(matcherOrValue, object, match); + default: + break; + } + + /* istanbul ignore else */ + if (matcherOrValue && typeof matcherOrValue === "object") { + if (matcherOrValue === object) { + return true; + } + if (typeof object !== "object") { + return false; + } + var prop; + // eslint-disable-next-line guard-for-in + for (prop in matcherOrValue) { + var value = object[prop]; + if ( + typeof value === "undefined" && + typeof object.getAttribute === "function" + ) { + value = object.getAttribute(prop); + } + if ( + matcherOrValue[prop] === null || + typeof matcherOrValue[prop] === "undefined" + ) { + if (value !== matcherOrValue[prop]) { + return false; + } + } else if ( + typeof value === "undefined" || + !deepEqual(value, matcherOrValue[prop]) + ) { + return false; + } + } + return true; + } + + /* istanbul ignore next */ + throw new Error("Matcher was an unknown or unsupported type"); +} +/* eslint-enable complexity */ + +forEach(Object.keys(createMatcher), function (key) { + match[key] = createMatcher[key]; +}); + +module.exports = match; + +},{"./create-matcher":60,"./deep-equal":69,"./is-array-type":73,"./is-subset":82,"@sinonjs/commons":46,"type-detect":110}],85:[function(require,module,exports){ +"use strict"; + +/** + * @module samsam + */ +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isElement = require("./is-element"); +var isNegZero = require("./is-neg-zero"); +var isSet = require("./is-set"); +var isMap = require("./is-map"); +var match = require("./match"); +var deepEqualCyclic = require("./deep-equal").use(match); +var createMatcher = require("./create-matcher"); + +module.exports = { + createMatcher: createMatcher, + deepEqual: deepEqualCyclic, + identical: identical, + isArguments: isArguments, + isElement: isElement, + isMap: isMap, + isNegZero: isNegZero, + isSet: isSet, + match: match, +}; + +},{"./create-matcher":60,"./deep-equal":69,"./identical":71,"./is-arguments":72,"./is-element":75,"./is-map":77,"./is-neg-zero":79,"./is-set":81,"./match":84}],86:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; + +},{"./lib/encoding.js":88}],87:[function(require,module,exports){ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{}],88:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // If we're in node require encoding-indexes and attach it to the global. + if (typeof module !== "undefined" && module.exports && + !global["encoding-indexes"]) { + global["encoding-indexes"] = + require("./encoding-indexes.js")["encoding-indexes"]; + } + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (!global['TextEncoder']) + global['TextEncoder'] = TextEncoder; + if (!global['TextDecoder']) + global['TextDecoder'] = TextDecoder; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: global['TextEncoder'], + TextDecoder: global['TextDecoder'], + EncodingIndexes: global["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{"./encoding-indexes.js":87}],89:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],90:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],91:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +},{"./support/isBuffer":90,"inherits":89}],92:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.Diff = {})); +}(this, (function (exports) { 'use strict'; + + function Diff() {} + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } + + // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } + + // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } + + // See: http://code.google.com/p/google-diff-match-patch/wiki/API + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],93:[function(require,module,exports){ +module.exports = extend; + +/* + var obj = {a: 3, b: 5}; + extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 4, b: 5, c: 8} + + var obj = {a: 3, b: 5}; + extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 3, b: 5} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3]} + + extend({a: 4, b: 5}); // {a: 4, b: 5} + extend({a: 4, b: 5}, 3); {a: 4, b: 5} + extend({a: 4, b: 5}, true); {a: 4, b: 5} + extend('hello', {a: 4, b: 5}); // throws + extend(3, {a: 4, b: 5}); // throws +*/ + +function extend(/* [deep], obj1, obj2, [objn] */) { + var args = [].slice.call(arguments); + var deep = false; + if (typeof args[0] == 'boolean') { + deep = args.shift(); + } + var result = args[0]; + if (isUnextendable(result)) { + throw new Error('extendee must be an object'); + } + var extenders = args.slice(1); + var len = extenders.length; + for (var i = 0; i < len; i++) { + var extender = extenders[i]; + for (var key in extender) { + if (Object.prototype.hasOwnProperty.call(extender, key)) { + var value = extender[key]; + if (deep && isCloneable(value)) { + var base = Array.isArray(value) ? [] : {}; + result[key] = extend( + true, + Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key]) + ? result[key] + : base, + value + ); + } else { + result[key] = value; + } + } + } + } + return result; +} + +function isCloneable(obj) { + return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]'; +} + +function isUnextendable(val) { + return !val || (typeof val != 'object' && typeof val != 'function'); +} + +},{}],94:[function(require,module,exports){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + +},{}],95:[function(require,module,exports){ +"use strict"; + +// cache a reference to setTimeout, so that our reference won't be stubbed out +// when using fake timers and errors will still get logged +// https://github.com/cjohansen/Sinon.JS/issues/381 +var realSetTimeout = setTimeout; + +function configureLogger(config) { + // eslint-disable-next-line no-param-reassign + config = config || {}; + // Function which prints errors. + if (!config.hasOwnProperty("logger")) { + // eslint-disable-next-line no-empty-function + config.logger = function() {}; + } + // When set to true, any errors logged will be thrown immediately; + // If set to false, the errors will be thrown in separate execution frame. + if (!config.hasOwnProperty("useImmediateExceptions")) { + config.useImmediateExceptions = true; + } + // wrap realSetTimeout with something we can stub in tests + if (!config.hasOwnProperty("setTimeout")) { + config.setTimeout = realSetTimeout; + } + + return function logError(label, e) { + var msg = `${label} threw exception: `; + var err = { + name: e.name || label, + message: e.message || e.toString(), + stack: e.stack + }; + + function throwLoggedError() { + err.message = msg + err.message; + throw err; + } + + config.logger(`${msg}[${err.name}] ${err.message}`); + + if (err.stack) { + config.logger(err.stack); + } + + if (config.useImmediateExceptions) { + throwLoggedError(); + } else { + config.setTimeout(throwLoggedError, 0); + } + }; +} + +module.exports = configureLogger; + +},{}],96:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; +} + +CustomEvent.prototype = new Event(); + +CustomEvent.prototype.constructor = CustomEvent; + +module.exports = CustomEvent; + +},{"./event":98}],97:[function(require,module,exports){ +"use strict"; + +function flattenOptions(options) { + if (options !== Object(options)) { + return { + capture: Boolean(options), + once: false, + passive: false + }; + } + return { + capture: Boolean(options.capture), + once: Boolean(options.once), + passive: Boolean(options.passive) + }; +} +function not(fn) { + return function() { + return !fn.apply(this, arguments); + }; +} +function hasListenerFilter(listener, capture) { + return function(listenerSpec) { + return ( + listenerSpec.capture === capture && + listenerSpec.listener === listener + ); + }; +} + +var EventTarget = { + // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener + addEventListener: function addEventListener( + event, + listener, + providedOptions + ) { + // 3. Let capture, passive, and once be the result of flattening more options. + // Flatten property before executing step 2, + // feture detection is usually based on registering handler with options object, + // that has getter defined + // addEventListener("load", () => {}, { + // get once() { supportsOnce = true; } + // }); + var options = flattenOptions(providedOptions); + + // 2. If callback is null, then return. + if (listener === null || listener === undefined) { + return; + } + + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + + // 4. If context object’s associated list of event listener + // does not contain an event listener whose type is type, + // callback is callback, and capture is capture, then append + // a new event listener to it, whose type is type, callback is + // callback, capture is capture, passive is passive, and once is once. + if ( + !this.eventListeners[event].some( + hasListenerFilter(listener, options.capture) + ) + ) { + this.eventListeners[event].push({ + listener: listener, + capture: options.capture, + once: options.once + }); + } + }, + + // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener + removeEventListener: function removeEventListener( + event, + listener, + providedOptions + ) { + if (!this.eventListeners || !this.eventListeners[event]) { + return; + } + + // 2. Let capture be the result of flattening options. + var options = flattenOptions(providedOptions); + + // 3. If there is an event listener in the associated list of + // event listeners whose type is type, callback is callback, + // and capture is capture, then set that event listener’s + // removed to true and remove it from the associated list of event listeners. + this.eventListeners[event] = this.eventListeners[event].filter( + not(hasListenerFilter(listener, options.capture)) + ); + }, + + dispatchEvent: function dispatchEvent(event) { + if (!this.eventListeners || !this.eventListeners[event.type]) { + return Boolean(event.defaultPrevented); + } + + var self = this; + var type = event.type; + var listeners = self.eventListeners[type]; + + // Remove listeners, that should be dispatched once + // before running dispatch loop to avoid nested dispatch issues + self.eventListeners[type] = listeners.filter(function(listenerSpec) { + return !listenerSpec.once; + }); + listeners.forEach(function(listenerSpec) { + var listener = listenerSpec.listener; + if (typeof listener === "function") { + listener.call(self, event); + } else { + listener.handleEvent(event); + } + }); + + return Boolean(event.defaultPrevented); + } +}; + +module.exports = EventTarget; + +},{}],98:[function(require,module,exports){ +"use strict"; + +function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); +} + +Event.prototype = { + initEvent: function(type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + this.currentTarget = target; + }, + + // eslint-disable-next-line no-empty-function + stopPropagation: function() {}, + + preventDefault: function() { + this.defaultPrevented = true; + } +}; + +module.exports = Event; + +},{}],99:[function(require,module,exports){ +"use strict"; + +module.exports = { + Event: require("./event"), + ProgressEvent: require("./progress-event"), + CustomEvent: require("./custom-event"), + EventTarget: require("./event-target") +}; + +},{"./custom-event":96,"./event":98,"./event-target":97,"./progress-event":100}],100:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = + typeof progressEventRaw.loaded === "number" + ? progressEventRaw.loaded + : null; + this.total = + typeof progressEventRaw.total === "number" + ? progressEventRaw.total + : null; + this.lengthComputable = Boolean(progressEventRaw.total); +} + +ProgressEvent.prototype = new Event(); + +ProgressEvent.prototype.constructor = ProgressEvent; + +module.exports = ProgressEvent; + +},{"./event":98}],101:[function(require,module,exports){ +"use strict"; + +var FakeTimers = require("@sinonjs/fake-timers"); +var fakeServer = require("./index"); + +// eslint-disable-next-line no-empty-function +function Server() {} +Server.prototype = fakeServer; + +var fakeServerWithClock = new Server(); + +fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = FakeTimers.install(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return fakeServer.addRequest.call(this, xhr); +}; + +fakeServerWithClock.respond = function respond() { + var returnVal = fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.uninstall(); + this.resetClock = false; + } + } + + return returnVal; +}; + +fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.uninstall(); + } + + return fakeServer.restore.apply(this, arguments); +}; + +module.exports = fakeServerWithClock; + +},{"./index":102,"@sinonjs/fake-timers":58}],102:[function(require,module,exports){ +"use strict"; + +var fakeXhr = require("../fake-xhr"); +var push = [].push; +var log = require("./log"); +var configureLogError = require("../configure-logger"); +var pathToRegexp = require("path-to-regexp"); + +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; + +function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] !== "string") { + if (!supportsArrayBuffer) { + throw new TypeError( + `Fake server response body should be a string, but was ${typeof response[2]}` + ); + } else if (!(response[2] instanceof ArrayBuffer)) { + throw new TypeError( + `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}` + ); + } + } + + return response; +} + +function getDefaultWindowLocation() { + var winloc = { + hostname: "localhost", + port: process.env.PORT || 80, + protocol: "http:" + }; + winloc.host = + winloc.hostname + + (String(winloc.port) === "80" ? "" : `:${winloc.port}`); + return winloc; +} + +function getWindowLocation() { + if (typeof window === "undefined") { + // Fallback + return getDefaultWindowLocation(); + } + + if (typeof window.location !== "undefined") { + // Browsers place location on window + return window.location; + } + + if ( + typeof window.window !== "undefined" && + typeof window.window.location !== "undefined" + ) { + // React Native on Android places location on window.window + return window.window.location; + } + + return getDefaultWindowLocation(); +} + +function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = + !url || + url === reqUrl || + (typeof url.test === "function" && url.test(reqUrl)) || + (typeof url === "function" && url(reqUrl) === true); + + return matchMethod && matchUrl; +} + +function match(response, request) { + var wloc = getWindowLocation(); + + var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`); + + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, "/"); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat( + ru && typeof ru.exec === "function" + ? ru.exec(requestUrl).slice(1) + : [] + ); + return response.response.apply(response, args); + } + + return true; + } + + return false; +} + +function incrementRequestCount() { + var count = ++this.requestCount; + + this.requested = true; + + this.requestedOnce = count === 1; + this.requestedTwice = count === 2; + this.requestedThrice = count === 3; + + this.firstRequest = this.getRequest(0); + this.secondRequest = this.getRequest(1); + this.thirdRequest = this.getRequest(2); + + this.lastRequest = this.getRequest(count - 1); +} + +var fakeServer = { + create: function(config) { + var server = Object.create(this); + server.configure(config); + this.xhr = fakeXhr.useFakeXMLHttpRequest(); + server.requests = []; + server.requestCount = 0; + server.queue = []; + server.responses = []; + + this.xhr.onCreate = function(xhrObj) { + xhrObj.unsafeHeadersEnabled = function() { + return !(server.unsafeHeadersEnabled === false); + }; + server.addRequest(xhrObj); + }; + + return server; + }, + + configure: function(config) { + var self = this; + var allowlist = { + autoRespond: true, + autoRespondAfter: true, + respondImmediately: true, + fakeHTTPMethods: true, + logger: true, + unsafeHeadersEnabled: true + }; + + // eslint-disable-next-line no-param-reassign + config = config || {}; + + Object.keys(config).forEach(function(setting) { + if (setting in allowlist) { + self[setting] = config[setting]; + } + }); + + self.logError = configureLogError(config); + }, + + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + incrementRequestCount.call(this); + + xhrObj.onSend = function() { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function() { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match( + /_method=([^\b;]+)/ + ); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + logger: function() { + // no-op; override via configure() + }, + + logError: configureLogError({}), + + log: log, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (arguments.length === 1) { + // eslint-disable-next-line no-param-reassign + body = method; + // eslint-disable-next-line no-param-reassign + url = method = null; + } + + if (arguments.length === 2) { + // eslint-disable-next-line no-param-reassign + body = url; + // eslint-disable-next-line no-param-reassign + url = method; + // eslint-disable-next-line no-param-reassign + method = null; + } + + // Escape port number to prevent "named" parameters in 'path-to-regexp' module + if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) { + var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/); + // eslint-disable-next-line no-param-reassign + url = `${m[1]}\\:${m[2]}`; + } + + push.call(this.responses, { + method: method, + url: + typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + response: typeof body === "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var self = this; + + requests.forEach(function(request) { + self.processRequest(request); + }); + }, + + respondAll: function respondAll() { + if (this.respondImmediately) { + return; + } + + this.queue = this.requests.slice(0); + + var request; + while ((request = this.queue.shift())) { + this.processRequest(request); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + this.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + }, + + getRequest: function getRequest(index) { + return this.requests[index] || null; + }, + + reset: function reset() { + this.resetBehavior(); + this.resetHistory(); + }, + + resetBehavior: function resetBehavior() { + this.responses.length = this.queue.length = 0; + }, + + resetHistory: function resetHistory() { + this.requests.length = this.requestCount = 0; + + this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false; + + this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null; + } +}; + +module.exports = fakeServer; + +},{"../configure-logger":95,"../fake-xhr":105,"./log":103,"path-to-regexp":107}],103:[function(require,module,exports){ +"use strict"; +var inspect = require("util").inspect; + +function log(response, request) { + var str; + + str = `Request:\n${inspect(request)}\n\n`; + str += `Response:\n${inspect(response)}\n\n`; + + /* istanbul ignore else: when this.logger is not a function, it can't be called */ + if (typeof this.logger === "function") { + this.logger(str); + } +} + +module.exports = log; + +},{"util":91}],104:[function(require,module,exports){ +"use strict"; + +exports.isSupported = (function() { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } +})(); + +},{}],105:[function(require,module,exports){ +"use strict"; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var globalObject = require("@sinonjs/commons").global; +var configureLogError = require("../configure-logger"); +var sinonEvent = require("../event"); +var extend = require("just-extend"); + +var supportsProgress = typeof ProgressEvent !== "undefined"; +var supportsCustomEvent = typeof CustomEvent !== "undefined"; +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; + +function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function() { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); + }; + } + + return false; +} + +// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name +var unsafeHeaders = { + "Accept-Charset": true, + "Access-Control-Request-Headers": true, + "Access-Control-Request-Method": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + DNT: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Origin: true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true +}; + +function EventTargetHandler() { + var self = this; + var events = [ + "loadstart", + "progress", + "abort", + "error", + "load", + "timeout", + "loadend" + ]; + + function addEventListener(eventName) { + self.addEventListener(eventName, function(event) { + var listener = self[`on${eventName}`]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); + } + + events.forEach(addEventListener); +} + +EventTargetHandler.prototype = sinonEvent.EventTarget; + +function normalizeHeaderValue(value) { + // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes + /*eslint no-control-regex: "off"*/ + return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, ""); +} + +function getHeader(headers, header) { + var foundHeader = Object.keys(headers).filter(function(h) { + return h.toLowerCase() === header.toLowerCase(); + }); + + return foundHeader[0] || null; +} + +function excludeSetCookie2Header(header) { + return !/^Set-Cookie2?$/i.test(header); +} + +function verifyResponseBodyType(body, responseType) { + var error = null; + var isString = typeof body === "string"; + + if (responseType === "arraybuffer") { + if (!isString && !(body instanceof ArrayBuffer)) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.` + ); + error.name = "InvalidBodyException"; + } + } else if (responseType === "blob") { + if ( + !isString && + !(body instanceof ArrayBuffer) && + supportsBlob && + !(body instanceof Blob) + ) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.` + ); + error.name = "InvalidBodyException"; + } + } else if (!isString) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.` + ); + error.name = "InvalidBodyException"; + } + + if (error) { + throw error; + } +} + +function convertToArrayBuffer(body, encoding) { + if (body instanceof ArrayBuffer) { + return body; + } + + return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer; +} + +function isXmlContentType(contentType) { + return ( + !contentType || + /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType) + ); +} + +function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; + } + xhr.responseXML = null; +} + +function fakeXMLHttpRequestFor(globalScope) { + var isReactNative = + globalScope.navigator && + globalScope.navigator.product === "ReactNative"; + var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject; + sinonXhr.supportsActiveX = + typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(globalScope); + sinonXhr.supportsTimeout = + sinonXhr.supportsXHR && + "timeout" in new sinonXhr.GlobalXMLHttpRequest(); + sinonXhr.supportsCORS = + isReactNative || + (sinonXhr.supportsXHR && + "withCredentials" in new sinonXhr.GlobalXMLHttpRequest()); + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest(config) { + EventTargetHandler.call(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new EventTargetHandler(); + this.responseType = ""; + this.response = ""; + this.logError = configureLogError(config); + + if (sinonXhr.supportsTimeout) { + this.timeout = 0; + } + + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + // largest arity in XHR is 5 - XHR#open + var apply = function(obj, method, args) { + switch (args.length) { + case 0: + return obj[method](); + case 1: + return obj[method](args[0]); + case 2: + return obj[method](args[0], args[1]); + case 3: + return obj[method](args[0], args[1], args[2]); + case 4: + return obj[method](args[0], args[1], args[2], args[3]); + case 5: + return obj[method](args[0], args[1], args[2], args[3], args[4]); + default: + throw new Error("Unhandled case"); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + [ + "open", + "setRequestHeader", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ].forEach(function(method) { + fakeXhr[method] = function() { + return apply(xhr, method, arguments); + }; + }); + + fakeXhr.send = function() { + // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute + if (xhr.responseType !== fakeXhr.responseType) { + xhr.responseType = fakeXhr.responseType; + } + return apply(xhr, "send", arguments); + }; + + var copyAttrs = function(args) { + args.forEach(function(attr) { + fakeXhr[attr] = xhr[attr]; + }); + }; + + var stateChangeStart = function() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["response"]); + if (xhr.responseType === "" || xhr.responseType === "text") { + copyAttrs(["responseText"]); + } + } + if ( + xhr.readyState === FakeXMLHttpRequest.DONE && + (xhr.responseType === "" || xhr.responseType === "document") + ) { + copyAttrs(["responseXML"]); + } + }; + + var stateChangeEnd = function() { + if (fakeXhr.onreadystatechange) { + // eslint-disable-next-line no-useless-call + fakeXhr.onreadystatechange.call(fakeXhr, { + target: fakeXhr, + currentTarget: fakeXhr + }); + } + }; + + var stateChange = function stateChange() { + stateChangeStart(); + stateChangeEnd(); + }; + + if (xhr.addEventListener) { + xhr.addEventListener("readystatechange", stateChangeStart); + + Object.keys(fakeXhr.eventListeners).forEach(function(event) { + /*eslint-disable no-loop-func*/ + fakeXhr.eventListeners[event].forEach(function(handler) { + xhr.addEventListener(event, handler.listener, { + capture: handler.capture, + once: handler.once + }); + }); + /*eslint-enable no-loop-func*/ + }); + + xhr.addEventListener("readystatechange", stateChangeEnd); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error(`INVALID_STATE_ERR - ${xhr.readyState}`); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if ( + xhr.async && + xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED + ) { + throw new Error("No headers received"); + } + } + + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + if (body instanceof Blob) { + return body; + } + + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; + } + throw new Error(`Invalid responseType ${responseType}`); + } + + /** + * Steps to follow when there is an error, according to: + * https://xhr.spec.whatwg.org/#request-error-steps + */ + function requestErrorSteps(xhr) { + clearResponse(xhr); + xhr.errorFlag = true; + xhr.requestHeaders = {}; + xhr.responseHeaders = {}; + + if ( + xhr.readyState !== FakeXMLHttpRequest.UNSENT && + xhr.sendFlag && + xhr.readyState !== FakeXMLHttpRequest.DONE + ) { + xhr.readyStateChange(FakeXMLHttpRequest.DONE); + xhr.sendFlag = false; + } + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + var parsererrorNS = ""; + + try { + var parsererrors = parser + .parseFromString("INVALID", "text/xml") + .getElementsByTagName("parsererror"); + if (parsererrors.length) { + parsererrorNS = parsererrors[0].namespaceURI; + } + } catch (e) { + // passing invalid XML makes IE11 throw + // so no namespace needs to be determined + } + + var result; + try { + result = parser.parseFromString(text, "text/xml"); + } catch (err) { + return null; + } + + return result.getElementsByTagNameNS( + parsererrorNS, + "parsererror" + ).length + ? null + : result; + } + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = FakeXMLHttpRequest.filters.some(function(filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + FakeXMLHttpRequest.defake(this, arguments); + return; + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + var readyStateChangeEvent = new sinonEvent.Event( + "readystatechange", + false, + false, + this + ); + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + this.logError("Fake XHR onreadystatechange handler", e); + } + } + + if (this.readyState !== FakeXMLHttpRequest.DONE) { + this.dispatchEvent(readyStateChangeEvent); + } else { + var event, progress; + + if (this.timedOut || this.aborted || this.status === 0) { + progress = { loaded: 0, total: 0 }; + event = + (this.timedOut && "timeout") || + (this.aborted && "abort") || + "error"; + } else { + progress = { loaded: 100, total: 100 }; + event = "load"; + } + + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + + this.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.dispatchEvent(readyStateChangeEvent); + this.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + }, + + // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method + setRequestHeader: function setRequestHeader(header, value) { + if (typeof value !== "string") { + throw new TypeError( + `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}` + ); + } + verifyState(this); + + var checkUnsafeHeaders = true; + if (typeof this.unsafeHeadersEnabled === "function") { + checkUnsafeHeaders = this.unsafeHeadersEnabled(); + } + + if ( + checkUnsafeHeaders && + (getHeader(unsafeHeaders, header) !== null || + /^(Sec-|Proxy-)/i.test(header)) + ) { + throw new Error( + // eslint-disable-next-line quotes + `Refused to set unsafe header "${header}"` + ); + } + + // eslint-disable-next-line no-param-reassign + value = normalizeHeaderValue(value); + + var existingHeader = getHeader(this.requestHeaders, header); + if (existingHeader) { + this.requestHeaders[existingHeader] += `, ${value}`; + } else { + this.requestHeaders[header] = value; + } + }, + + setStatus: function setStatus(status) { + var sanitizedStatus = typeof status === "number" ? status : 200; + + verifyRequestOpened(this); + this.status = sanitizedStatus; + this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus]; + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + + var responseHeaders = (this.responseHeaders = {}); + + Object.keys(headers).forEach(function(header) { + responseHeaders[header] = headers[header]; + }); + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(head)$/i.test(this.method)) { + var contentType = getHeader( + this.requestHeaders, + "Content-Type" + ); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[ + contentType + ] = `${value[0]};charset=utf-8`; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = + "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); + + if (typeof this.onSend === "function") { + this.onSend(this); + } + + // Only listen if setInterval and Date are a stubbed. + if ( + sinonXhr.supportsTimeout && + typeof setInterval.clock === "object" && + typeof Date.clock === "object" + ) { + var initiatedTime = Date.now(); + var self = this; + + // Listen to any possible tick by fake timers and check to see if timeout has + // been exceeded. It's important to note that timeout can be changed while a request + // is in flight, so we must check anytime the end user forces a clock tick to make + // sure timeout hasn't changed. + // https://xhr.spec.whatwg.org/#dfnReturnLink-2 + var clearIntervalId = setInterval(function() { + // Check if the readyState has been reset or is done. If this is the case, there + // should be no timeout. This will also prevent aborted requests and + // fakeServerWithClock from triggering unnecessary responses. + if ( + self.readyState === FakeXMLHttpRequest.UNSENT || + self.readyState === FakeXMLHttpRequest.DONE + ) { + clearInterval(clearIntervalId); + } else if ( + typeof self.timeout === "number" && + self.timeout > 0 + ) { + if (Date.now() >= initiatedTime + self.timeout) { + self.triggerTimeout(); + clearInterval(clearIntervalId); + } + } + }, 1); + } + + this.dispatchEvent( + new sinonEvent.Event("loadstart", false, false, this) + ); + }, + + abort: function abort() { + this.aborted = true; + requestErrorSteps(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + }, + + error: function() { + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + triggerTimeout: function triggerTimeout() { + if (sinonXhr.supportsTimeout) { + this.timedOut = true; + requestErrorSteps(this); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + // eslint-disable-next-line no-param-reassign + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var responseHeaders = this.responseHeaders; + var headers = Object.keys(responseHeaders) + .filter(excludeSetCookie2Header) + .reduce(function(prev, header) { + var value = responseHeaders[header]; + + return `${prev}${header}: ${value}\r\n`; + }, ""); + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body, this.responseType); + var contentType = + this.overriddenMimeType || + this.getResponseHeader("Content-Type"); + + var isTextResponse = + this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring( + index, + index + chunkSize + ); + } + index += chunkSize; + } while (index < body.length); + } + + this.response = convertResponseBody( + this.responseType, + contentType, + body + ); + if (isTextResponse) { + this.responseText = this.response; + } + + if (this.responseType === "document") { + this.responseXML = this.response; + } else if ( + this.responseType === "" && + isXmlContentType(contentType) + ) { + this.responseXML = FakeXMLHttpRequest.parseXML( + this.responseText + ); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.responseURL = this.url; + + this.setStatus(status); + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this.upload + ) + ); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this + ) + ); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent( + new sinonEvent.CustomEvent("error", { detail: error }) + ); + } + }, + + overrideMimeType: function overrideMimeType(type) { + if (this.readyState >= FakeXMLHttpRequest.LOADING) { + throw new Error("INVALID_STATE_ERR"); + } + this.overriddenMimeType = type; + } + }); + + var states = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }; + + extend(FakeXMLHttpRequest, states); + extend(FakeXMLHttpRequest.prototype, states); + + function useFakeXMLHttpRequest() { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = function ActiveXObject(objId) { + if ( + objId === "Microsoft.XMLHTTP" || + /^Msxml2\.XMLHTTP/i.test(objId) + ) { + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + } + + return { + xhr: sinonXhr, + FakeXMLHttpRequest: FakeXMLHttpRequest, + useFakeXMLHttpRequest: useFakeXMLHttpRequest + }; +} + +module.exports = extend(fakeXMLHttpRequestFor(globalObject), { + fakeXMLHttpRequestFor: fakeXMLHttpRequestFor +}); + +},{"../configure-logger":95,"../event":99,"./blob":104,"@sinonjs/commons":46,"@sinonjs/text-encoding":86,"just-extend":93}],106:[function(require,module,exports){ +"use strict"; + +module.exports = { + fakeServer: require("./fake-server"), + fakeServerWithClock: require("./fake-server/fake-server-with-clock"), + fakeXhr: require("./fake-xhr") +}; + +},{"./fake-server":102,"./fake-server/fake-server-with-clock":101,"./fake-xhr":105}],107:[function(require,module,exports){ +var isarray = require('isarray') + +/** + * Expose `pathToRegexp`. + */ +module.exports = pathToRegexp +module.exports.parse = parse +module.exports.compile = compile +module.exports.tokensToFunction = tokensToFunction +module.exports.tokensToRegExp = tokensToRegExp + +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g') + +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = [] + var key = 0 + var index = 0 + var path = '' + var defaultDelimiter = options && options.delimiter || '/' + var res + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0] + var escaped = res[1] + var offset = res.index + path += str.slice(index, offset) + index = offset + m.length + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1] + continue + } + + var next = str[index] + var prefix = res[2] + var name = res[3] + var capture = res[4] + var group = res[5] + var modifier = res[6] + var asterisk = res[7] + + // Push the current path onto the tokens. + if (path) { + tokens.push(path) + path = '' + } + + var partial = prefix != null && next != null && next !== prefix + var repeat = modifier === '+' || modifier === '*' + var optional = modifier === '?' || modifier === '*' + var delimiter = res[2] || defaultDelimiter + var pattern = capture || group + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }) + } + + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index) + } + + // If the path exists, push it onto the end. + if (path) { + tokens.push(path) + } + + return tokens +} + +/** + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} + */ +function compile (str, options) { + return tokensToFunction(parse(str, options), options) +} + +/** + * Prettier encoding of URI path segments. + * + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. + * + * @param {string} + * @return {string} + */ +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens, options) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length) + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) + } + } + + return function (obj, opts) { + var path = '' + var data = obj || {} + var options = opts || {} + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + path += token + + continue + } + + var value = data[token.name] + var segment + + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix + } + + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } + + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') + } + + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } + + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } + + path += (j === 0 ? token.prefix : token.delimiter) + segment + } + + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment + } + + return path + } +} + +/** + * Escape a regular expression string. + * + * @param {string} str + * @return {string} + */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys + return re +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options && options.sensitive ? '' : 'i' +} + +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g) + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }) + } + } + + return attachKeys(path, keys) +} + +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = [] + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source) + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) + + return attachKeys(regexp, keys) +} + +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} + +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + var strict = options.strict + var end = options.end !== false + var route = '' + + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] + + if (typeof token === 'string') { + route += escapeString(token) + } else { + var prefix = escapeString(token.prefix) + var capture = '(?:' + token.pattern + ')' + + keys.push(token) + + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*' + } + + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?' + } else { + capture = prefix + '(' + capture + ')?' + } + } else { + capture = prefix + '(' + capture + ')' + } + + route += capture + } + } + + var delimiter = escapeString(options.delimiter || '/') + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' + } + + if (end) { + route += '$' + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } + + options = options || {} + + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } + + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } + + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} + +},{"isarray":108}],108:[function(require,module,exports){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +},{}],109:[function(require,module,exports){ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; + +},{}],110:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.typeDetect = factory()); +}(this, (function () { 'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} + +return typeDetect; + +}))); + +},{}]},{},[1])(1) +}); diff --git a/build/node_modules/sinon/pkg/sinon-server-1.12.2.js b/build/node_modules/sinon/pkg/sinon-server-1.12.2.js deleted file mode 100644 index 6f4e13a2..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.12.2.js +++ /dev/null @@ -1,1782 +0,0 @@ -/** - * Sinon.JS 1.12.2, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property], - error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend ../sinon.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - break; - } - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./event"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof self !== "undefined" ? self : this); - -/** - * @depend ../sinon.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xml_http_request"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module) { - var sinon = require("./core"); - makeApi(sinon, require("lolex")); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.15.0.js b/build/node_modules/sinon/pkg/sinon-server-1.15.0.js deleted file mode 100644 index 07d8e13b..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.15.0.js +++ /dev/null @@ -1,2108 +0,0 @@ -/** - * Sinon.JS 1.15.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function" && typeof method != "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method == "function") ? {value: method} : method, - wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), - i; - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object, descriptor; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - } - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { - return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") - } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof global !== "undefined" ? global : self); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.15.4.js b/build/node_modules/sinon/pkg/sinon-server-1.15.4.js deleted file mode 100644 index bc1dbac7..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.15.4.js +++ /dev/null @@ -1,2118 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function () { -"use strict"; - - var sinon; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinon = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinon = module.exports; - } else { - sinon = {}; - } - - return sinon; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function" && typeof method != "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method == "function") ? {value: method} : method, - wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), - i; - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a != "object" || typeof b != "object") { - if (isReallyNaN(a) && isReallyNaN(b)) { - return true; - } else { - return a === b; - } - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - if (aString == "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object, descriptor; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - } - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend util/core.js - */ - -(function (sinon) { - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9" - } - }; - - var result = []; - for (var prop in obj) { - result.push(obj[prop]()); - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1), - source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - }; - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon) { - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - } - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate == "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(xdr) { - if (xdr.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xdr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(xdr) { - if (xdr.readyState == FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (xdr.readyState == FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout" - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload" - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] == "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status == "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (global) { - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; - sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX - ? function () { - return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") - } : false; - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - /*jsl:end*/ - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - } - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() == header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState != FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs) - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (typeof sinon === "undefined") { - return; - } else { - makeApi(sinon); - } - -})(typeof global !== "undefined" ? global : self); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (sinon, formatio) { - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - }; - - return format; - } - - function getNodeFormatter(value) { - function format(value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", - formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } catch (e) {} - } - - if (formatio) { - formatter = getFormatioFormatter() - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (!sinon) { - return; - } else { - makeApi(sinon); - } -}( - (typeof sinon == "object" && sinon || null), - (typeof formatio == "object" && formatio) -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function () { - var server = create(this); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - var request; - - while (request = requests.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}()); - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.16.0.js b/build/node_modules/sinon/pkg/sinon-server-1.16.0.js deleted file mode 100644 index 5453da9a..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.16.0.js +++ /dev/null @@ -1,2174 +0,0 @@ -/** - * Sinon.JS 1.16.0, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - } - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.16.1.js b/build/node_modules/sinon/pkg/sinon-server-1.16.1.js deleted file mode 100644 index 10fe4ec6..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.16.1.js +++ /dev/null @@ -1,2174 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - logError.setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - } - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.response = this.responseType === "json" ? null : ""; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.response = this.responseType === "json" ? null : ""; - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.17.0.js b/build/node_modules/sinon/pkg/sinon-server-1.17.0.js deleted file mode 100644 index 0dc42671..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.17.0.js +++ /dev/null @@ -1,6264 +0,0 @@ -/** - * Sinon.JS 1.17.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } -}; - -},{"../log_error":2,"./core":12,"./fake_xdomain_request":22,"./fake_xml_http_request":23}],20:[function(require,module,exports){ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("./fake_server"); -require("./fake_timers"); -var sinon = require("./core"); - -function Server() {} -Server.prototype = sinon.fakeServer; - -sinon.fakeServerWithClock = new Server(); - -sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); -}; - -sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; -}; - -sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); -}; - -},{"./core":12,"./fake_server":19,"./fake_timers":21}],21:[function(require,module,exports){ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var s = require("./core"); -var llx = require("lolex"); - -s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; -}; - -s.clock = { - create: function (now) { - return llx.createClock(now); - } -}; - -s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -},{"./core":12,"lolex":25}],22:[function(require,module,exports){ -(function (global){ -/** - * Fake XDomainRequest object - */ - -"use strict"; - -require("../extend"); -require("./event"); -require("../log_error"); - -var xdr = { XDomainRequest: global.XDomainRequest }; -xdr.GlobalXDomainRequest = global.XDomainRequest; -xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; -xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - -var sinon = require("./core"); -sinon.xdr = xdr; - -function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } -} - -function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } -}); - -sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 -}); - -sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; -}; - -sinon.FakeXDomainRequest = FakeXDomainRequest; - - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":1,"../log_error":2,"./core":12,"./event":18}],23:[function(require,module,exports){ -(function (global){ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -require("../extend"); -require("./event"); -require("../log_error"); -var TextEncoder = require("text-encoding").TextEncoder; - -var sinon = require("./core"); - -function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; -} - -var supportsProgress = typeof ProgressEvent !== "undefined"; -var supportsCustomEvent = typeof CustomEvent !== "undefined"; -var supportsFormData = typeof FormData !== "undefined"; -var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; -var supportsBlob = typeof Blob === "function"; -var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; -sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; -sinonXhr.GlobalActiveXObject = global.ActiveXObject; -sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; -sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; -sinonXhr.workingXHR = getWorkingXHR(global); -sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - -var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true -}; - -// An upload object is created for each -// FakeXMLHttpRequest and allows upload -// events to be simulated using uploadProgress -// and uploadError. -function UploadProgress() { - this.eventListeners = { - abort: [], - error: [], - load: [], - loadend: [], - progress: [] - }; -} - -UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); -}; - -UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } -}; - -UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } -}; - -// Note that for FakeXMLHttpRequest to work pre ES5 -// we lose some of the alignment with the spec. -// To ensure as close a match as possible, -// set responseType before calling open, send or respond; -function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } -} - -function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } -} - -function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; -} - -// filtering to enable a white-list version of Sinon FakeXhr, -// where whitelisted requests are passed through to real XHR -function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } -} -function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; -} -// largest arity in XHR is 5 - XHR#open -var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } -}; - -FakeXMLHttpRequest.filters = []; -FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); -}; -var IE6Re = /MSIE 6/; -FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); -}; -FakeXMLHttpRequest.useFilters = false; - -function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } -} - -function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } -} - -function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } -} - -function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } -} - -function convertToArrayBuffer(body, encoding) { - return new TextEncoder(encoding || "utf-8").encode(body).buffer; -} - -function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); -} - -function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); -} - -function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; -} - -FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; -}; - -FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" -}; - -sinon.xhr = sinonXhr; - -sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - var event, progress; - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - if (this.readyState === FakeXMLHttpRequest.DONE) { - if (this.status < 200 || this.status > 299) { - progress = {loaded: 0, total: 0}; - event = this.aborted ? "abort" : "error"; - } - else { - progress = {loaded: 100, total: 100}; - event = "load"; - } - - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progress, this)); - this.upload.dispatchEvent(new sinon.ProgressEvent(event, progress, this)); - this.upload.dispatchEvent(new sinon.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(new sinon.ProgressEvent("progress", progress, this)); - this.dispatchEvent(new sinon.ProgressEvent(event, progress, this)); - this.dispatchEvent(new sinon.ProgressEvent("loadend", progress, this)); - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } -}); - -sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 -}); - -sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; -}; - -sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../extend":1,"../log_error":2,"./core":12,"./event":18,"text-encoding":27}],24:[function(require,module,exports){ -(function (global){ -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - "use strict"; - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"samsam":26}],25:[function(require,module,exports){ -(function (global){ -/*global global, window*/ -/** - * @author Christian Johansen (christian@cjohansen.no) and contributors - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (global) { - "use strict"; - - // Make properties writable in IE, as per - // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html - // JSLint being anal - var glbl = global; - - global.setTimeout = glbl.setTimeout; - global.clearTimeout = glbl.clearTimeout; - global.setInterval = glbl.setInterval; - global.clearInterval = glbl.clearInterval; - global.Date = glbl.Date; - - // setImmediate is not a standard function - // avoid adding the prop to the window object if not present - if('setImmediate' in global) { - global.setImmediate = glbl.setImmediate; - global.clearImmediate = glbl.clearImmediate; - } - - // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() - // browsers, a number. - // see https://github.com/cjohansen/Sinon.JS/pull/436 - - var NOOP = function () { return undefined; }; - var timeoutResult = setTimeout(NOOP, 0); - var addTimerReturnsObject = typeof timeoutResult === "object"; - clearTimeout(timeoutResult); - - var NativeDate = Date; - var uniqueTimerId = 1; - - /** - * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into - * number of milliseconds. This is used to support human-readable strings passed - * to clock.tick() - */ - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],26:[function(require,module,exports){ -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); - -},{}],27:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -var encoding = require("./lib/encoding.js"); - -module.exports = { - TextEncoder: encoding.TextEncoder, - TextDecoder: encoding.TextDecoder, -}; - -},{"./lib/encoding.js":29}],28:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Indexes from: http://encoding.spec.whatwg.org/indexes.json - -(function(global) { - 'use strict'; - global["encoding-indexes"] = { - "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], - "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,59335,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], - "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], - "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], - "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], - "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], - "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], - "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], - "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], - "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], - "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], - "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], - "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], - "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,9565,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], - "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], - "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], - "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], - "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], - "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], - "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], - "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], - "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,null,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], - "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], - "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], - "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], - "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] -}; -}(this)); - -},{}],29:[function(require,module,exports){ -// Copyright 2014 Joshua Bell. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// If we're in node require encoding-indexes and attach it to the global. -/** - * @fileoverview Global |this| required for resolving indexes in node. - * @suppress {globalThis} - */ -if (typeof module !== "undefined" && module.exports) { - this["encoding-indexes"] = - require("./encoding-indexes.js")["encoding-indexes"]; -} - -(function(global) { - 'use strict'; - - // - // Utilities - // - - /** - * @param {number} a The number to test. - * @param {number} min The minimum value in the range, inclusive. - * @param {number} max The maximum value in the range, inclusive. - * @return {boolean} True if a >= min and a <= max. - */ - function inRange(a, min, max) { - return min <= a && a <= max; - } - - /** - * @param {number} n The numerator. - * @param {number} d The denominator. - * @return {number} The result of the integer division of n by d. - */ - function div(n, d) { - return Math.floor(n / d); - } - - /** - * @param {*} o - * @return {Object} - */ - function ToDictionary(o) { - if (o === undefined) return {}; - if (o === Object(o)) return o; - throw TypeError('Could not convert argument to dictionary'); - } - - /** - * @param {string} string Input string of UTF-16 code units. - * @return {!Array.} Code points. - */ - function stringToCodePoints(string) { - // http://heycam.github.io/webidl/#dfn-obtain-unicode - - // 1. Let S be the DOMString value. - var s = String(string); - - // 2. Let n be the length of S. - var n = s.length; - - // 3. Initialize i to 0. - var i = 0; - - // 4. Initialize U to be an empty sequence of Unicode characters. - var u = []; - - // 5. While i < n: - while (i < n) { - - // 1. Let c be the code unit in S at index i. - var c = s.charCodeAt(i); - - // 2. Depending on the value of c: - - // c < 0xD800 or c > 0xDFFF - if (c < 0xD800 || c > 0xDFFF) { - // Append to U the Unicode character with code point c. - u.push(c); - } - - // 0xDC00 ≤ c ≤ 0xDFFF - else if (0xDC00 <= c && c <= 0xDFFF) { - // Append to U a U+FFFD REPLACEMENT CHARACTER. - u.push(0xFFFD); - } - - // 0xD800 ≤ c ≤ 0xDBFF - else if (0xD800 <= c && c <= 0xDBFF) { - // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT - // CHARACTER. - if (i === n - 1) { - u.push(0xFFFD); - } - // 2. Otherwise, i < n−1: - else { - // 1. Let d be the code unit in S at index i+1. - var d = string.charCodeAt(i + 1); - - // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: - if (0xDC00 <= d && d <= 0xDFFF) { - // 1. Let a be c & 0x3FF. - var a = c & 0x3FF; - - // 2. Let b be d & 0x3FF. - var b = d & 0x3FF; - - // 3. Append to U the Unicode character with code point - // 2^16+2^10*a+b. - u.push(0x10000 + (a << 10) + b); - - // 4. Set i to i+1. - i += 1; - } - - // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a - // U+FFFD REPLACEMENT CHARACTER. - else { - u.push(0xFFFD); - } - } - } - - // 3. Set i to i+1. - i += 1; - } - - // 6. Return U. - return u; - } - - /** - * @param {!Array.} code_points Array of code points. - * @return {string} string String of UTF-16 code units. - */ - function codePointsToString(code_points) { - var s = ''; - for (var i = 0; i < code_points.length; ++i) { - var cp = code_points[i]; - if (cp <= 0xFFFF) { - s += String.fromCharCode(cp); - } else { - cp -= 0x10000; - s += String.fromCharCode((cp >> 10) + 0xD800, - (cp & 0x3FF) + 0xDC00); - } - } - return s; - } - - - // - // Implementation of Encoding specification - // http://dvcs.w3.org/hg/encoding/raw-file/tip/Overview.html - // - - // - // 3. Terminology - // - - /** - * End-of-stream is a special token that signifies no more tokens - * are in the stream. - * @const - */ var end_of_stream = -1; - - /** - * A stream represents an ordered sequence of tokens. - * - * @constructor - * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide the - * stream. - */ - function Stream(tokens) { - /** @type {!Array.} */ - this.tokens = [].slice.call(tokens); - } - - Stream.prototype = { - /** - * @return {boolean} True if end-of-stream has been hit. - */ - endOfStream: function() { - return !this.tokens.length; - }, - - /** - * When a token is read from a stream, the first token in the - * stream must be returned and subsequently removed, and - * end-of-stream must be returned otherwise. - * - * @return {number} Get the next token from the stream, or - * end_of_stream. - */ - read: function() { - if (!this.tokens.length) - return end_of_stream; - return this.tokens.shift(); - }, - - /** - * When one or more tokens are prepended to a stream, those tokens - * must be inserted, in given order, before the first token in the - * stream. - * - * @param {(number|!Array.)} token The token(s) to prepend to the stream. - */ - prepend: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.unshift(tokens.pop()); - } else { - this.tokens.unshift(token); - } - }, - - /** - * When one or more tokens are pushed to a stream, those tokens - * must be inserted, in given order, after the last token in the - * stream. - * - * @param {(number|!Array.)} token The tokens(s) to prepend to the stream. - */ - push: function(token) { - if (Array.isArray(token)) { - var tokens = /**@type {!Array.}*/(token); - while (tokens.length) - this.tokens.push(tokens.shift()); - } else { - this.tokens.push(token); - } - } - }; - - // - // 4. Encodings - // - - // 4.1 Encoders and decoders - - /** @const */ - var finished = -1; - - /** - * @param {boolean} fatal If true, decoding errors raise an exception. - * @param {number=} opt_code_point Override the standard fallback code point. - * @return {number} The code point to insert on a decoding error. - */ - function decoderError(fatal, opt_code_point) { - if (fatal) - throw TypeError('Decoder error'); - return opt_code_point || 0xFFFD; - } - - /** - * @param {number} code_point The code point that could not be encoded. - * @return {number} Always throws, no value is actually returned. - */ - function encoderError(code_point) { - throw TypeError('The code point ' + code_point + ' could not be encoded.'); - } - - /** @interface */ - function Decoder() {} - Decoder.prototype = { - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point, or |finished|. - */ - handler: function(stream, bite) {} - }; - - /** @interface */ - function Encoder() {} - Encoder.prototype = { - /** - * @param {Stream} stream The stream of code points being encoded. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit, or |finished|. - */ - handler: function(stream, code_point) {} - }; - - // 4.2 Names and labels - - // TODO: Define @typedef for Encoding: {name:string,labels:Array.} - // https://github.com/google/closure-compiler/issues/247 - - /** - * @param {string} label The encoding label. - * @return {?{name:string,labels:Array.}} - */ - function getEncoding(label) { - // 1. Remove any leading and trailing ASCII whitespace from label. - label = String(label).trim().toLowerCase(); - - // 2. If label is an ASCII case-insensitive match for any of the - // labels listed in the table below, return the corresponding - // encoding, and failure otherwise. - if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { - return label_to_encoding[label]; - } - return null; - } - - /** - * Encodings table: http://encoding.spec.whatwg.org/encodings.json - * @const - * @type {!Array.<{ - * heading: string, - * encodings: Array.<{name:string,labels:Array.}> - * }>} - */ - var encodings = [ - { - "encodings": [ - { - "labels": [ - "unicode-1-1-utf-8", - "utf-8", - "utf8" - ], - "name": "utf-8" - } - ], - "heading": "The Encoding" - }, - { - "encodings": [ - { - "labels": [ - "866", - "cp866", - "csibm866", - "ibm866" - ], - "name": "ibm866" - }, - { - "labels": [ - "csisolatin2", - "iso-8859-2", - "iso-ir-101", - "iso8859-2", - "iso88592", - "iso_8859-2", - "iso_8859-2:1987", - "l2", - "latin2" - ], - "name": "iso-8859-2" - }, - { - "labels": [ - "csisolatin3", - "iso-8859-3", - "iso-ir-109", - "iso8859-3", - "iso88593", - "iso_8859-3", - "iso_8859-3:1988", - "l3", - "latin3" - ], - "name": "iso-8859-3" - }, - { - "labels": [ - "csisolatin4", - "iso-8859-4", - "iso-ir-110", - "iso8859-4", - "iso88594", - "iso_8859-4", - "iso_8859-4:1988", - "l4", - "latin4" - ], - "name": "iso-8859-4" - }, - { - "labels": [ - "csisolatincyrillic", - "cyrillic", - "iso-8859-5", - "iso-ir-144", - "iso8859-5", - "iso88595", - "iso_8859-5", - "iso_8859-5:1988" - ], - "name": "iso-8859-5" - }, - { - "labels": [ - "arabic", - "asmo-708", - "csiso88596e", - "csiso88596i", - "csisolatinarabic", - "ecma-114", - "iso-8859-6", - "iso-8859-6-e", - "iso-8859-6-i", - "iso-ir-127", - "iso8859-6", - "iso88596", - "iso_8859-6", - "iso_8859-6:1987" - ], - "name": "iso-8859-6" - }, - { - "labels": [ - "csisolatingreek", - "ecma-118", - "elot_928", - "greek", - "greek8", - "iso-8859-7", - "iso-ir-126", - "iso8859-7", - "iso88597", - "iso_8859-7", - "iso_8859-7:1987", - "sun_eu_greek" - ], - "name": "iso-8859-7" - }, - { - "labels": [ - "csiso88598e", - "csisolatinhebrew", - "hebrew", - "iso-8859-8", - "iso-8859-8-e", - "iso-ir-138", - "iso8859-8", - "iso88598", - "iso_8859-8", - "iso_8859-8:1988", - "visual" - ], - "name": "iso-8859-8" - }, - { - "labels": [ - "csiso88598i", - "iso-8859-8-i", - "logical" - ], - "name": "iso-8859-8-i" - }, - { - "labels": [ - "csisolatin6", - "iso-8859-10", - "iso-ir-157", - "iso8859-10", - "iso885910", - "l6", - "latin6" - ], - "name": "iso-8859-10" - }, - { - "labels": [ - "iso-8859-13", - "iso8859-13", - "iso885913" - ], - "name": "iso-8859-13" - }, - { - "labels": [ - "iso-8859-14", - "iso8859-14", - "iso885914" - ], - "name": "iso-8859-14" - }, - { - "labels": [ - "csisolatin9", - "iso-8859-15", - "iso8859-15", - "iso885915", - "iso_8859-15", - "l9" - ], - "name": "iso-8859-15" - }, - { - "labels": [ - "iso-8859-16" - ], - "name": "iso-8859-16" - }, - { - "labels": [ - "cskoi8r", - "koi", - "koi8", - "koi8-r", - "koi8_r" - ], - "name": "koi8-r" - }, - { - "labels": [ - "koi8-u" - ], - "name": "koi8-u" - }, - { - "labels": [ - "csmacintosh", - "mac", - "macintosh", - "x-mac-roman" - ], - "name": "macintosh" - }, - { - "labels": [ - "dos-874", - "iso-8859-11", - "iso8859-11", - "iso885911", - "tis-620", - "windows-874" - ], - "name": "windows-874" - }, - { - "labels": [ - "cp1250", - "windows-1250", - "x-cp1250" - ], - "name": "windows-1250" - }, - { - "labels": [ - "cp1251", - "windows-1251", - "x-cp1251" - ], - "name": "windows-1251" - }, - { - "labels": [ - "ansi_x3.4-1968", - "ascii", - "cp1252", - "cp819", - "csisolatin1", - "ibm819", - "iso-8859-1", - "iso-ir-100", - "iso8859-1", - "iso88591", - "iso_8859-1", - "iso_8859-1:1987", - "l1", - "latin1", - "us-ascii", - "windows-1252", - "x-cp1252" - ], - "name": "windows-1252" - }, - { - "labels": [ - "cp1253", - "windows-1253", - "x-cp1253" - ], - "name": "windows-1253" - }, - { - "labels": [ - "cp1254", - "csisolatin5", - "iso-8859-9", - "iso-ir-148", - "iso8859-9", - "iso88599", - "iso_8859-9", - "iso_8859-9:1989", - "l5", - "latin5", - "windows-1254", - "x-cp1254" - ], - "name": "windows-1254" - }, - { - "labels": [ - "cp1255", - "windows-1255", - "x-cp1255" - ], - "name": "windows-1255" - }, - { - "labels": [ - "cp1256", - "windows-1256", - "x-cp1256" - ], - "name": "windows-1256" - }, - { - "labels": [ - "cp1257", - "windows-1257", - "x-cp1257" - ], - "name": "windows-1257" - }, - { - "labels": [ - "cp1258", - "windows-1258", - "x-cp1258" - ], - "name": "windows-1258" - }, - { - "labels": [ - "x-mac-cyrillic", - "x-mac-ukrainian" - ], - "name": "x-mac-cyrillic" - } - ], - "heading": "Legacy single-byte encodings" - }, - { - "encodings": [ - { - "labels": [ - "chinese", - "csgb2312", - "csiso58gb231280", - "gb2312", - "gb_2312", - "gb_2312-80", - "gbk", - "iso-ir-58", - "x-gbk" - ], - "name": "gbk" - }, - { - "labels": [ - "gb18030" - ], - "name": "gb18030" - } - ], - "heading": "Legacy multi-byte Chinese (simplified) encodings" - }, - { - "encodings": [ - { - "labels": [ - "big5", - "big5-hkscs", - "cn-big5", - "csbig5", - "x-x-big5" - ], - "name": "big5" - } - ], - "heading": "Legacy multi-byte Chinese (traditional) encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseucpkdfmtjapanese", - "euc-jp", - "x-euc-jp" - ], - "name": "euc-jp" - }, - { - "labels": [ - "csiso2022jp", - "iso-2022-jp" - ], - "name": "iso-2022-jp" - }, - { - "labels": [ - "csshiftjis", - "ms_kanji", - "shift-jis", - "shift_jis", - "sjis", - "windows-31j", - "x-sjis" - ], - "name": "shift_jis" - } - ], - "heading": "Legacy multi-byte Japanese encodings" - }, - { - "encodings": [ - { - "labels": [ - "cseuckr", - "csksc56011987", - "euc-kr", - "iso-ir-149", - "korean", - "ks_c_5601-1987", - "ks_c_5601-1989", - "ksc5601", - "ksc_5601", - "windows-949" - ], - "name": "euc-kr" - } - ], - "heading": "Legacy multi-byte Korean encodings" - }, - { - "encodings": [ - { - "labels": [ - "csiso2022kr", - "hz-gb-2312", - "iso-2022-cn", - "iso-2022-cn-ext", - "iso-2022-kr" - ], - "name": "replacement" - }, - { - "labels": [ - "utf-16be" - ], - "name": "utf-16be" - }, - { - "labels": [ - "utf-16", - "utf-16le" - ], - "name": "utf-16le" - }, - { - "labels": [ - "x-user-defined" - ], - "name": "x-user-defined" - } - ], - "heading": "Legacy miscellaneous encodings" - } - ]; - - // Label to encoding registry. - /** @type {Object.}>} */ - var label_to_encoding = {}; - encodings.forEach(function(category) { - category.encodings.forEach(function(encoding) { - encoding.labels.forEach(function(label) { - label_to_encoding[label] = encoding; - }); - }); - }); - - // Registry of of encoder/decoder factories, by encoding name. - /** @type {Object.} */ - var encoders = {}; - /** @type {Object.} */ - var decoders = {}; - - // - // 5. Indexes - // - - /** - * @param {number} pointer The |pointer| to search for. - * @param {(!Array.|undefined)} index The |index| to search within. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in |index|. - */ - function indexCodePointFor(pointer, index) { - if (!index) return null; - return index[pointer] || null; - } - - /** - * @param {number} code_point The |code point| to search for. - * @param {!Array.} index The |index| to search within. - * @return {?number} The first pointer corresponding to |code point| in - * |index|, or null if |code point| is not in |index|. - */ - function indexPointerFor(code_point, index) { - var pointer = index.indexOf(code_point); - return pointer === -1 ? null : pointer; - } - - /** - * @param {string} name Name of the index. - * @return {(!Array.|!Array.>)} - * */ - function index(name) { - if (!('encoding-indexes' in global)) { - throw Error("Indexes missing." + - " Did you forget to include encoding-indexes.js?"); - } - return global['encoding-indexes'][name]; - } - - /** - * @param {number} pointer The |pointer| to search for in the gb18030 index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the gb18030 index. - */ - function indexGB18030RangesCodePointFor(pointer) { - // 1. If pointer is greater than 39419 and less than 189000, or - // pointer is greater than 1237575, return null. - if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) - return null; - - // 2. Let offset be the last pointer in index gb18030 ranges that - // is equal to or less than pointer and let code point offset be - // its corresponding code point. - var offset = 0; - var code_point_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[0] <= pointer) { - offset = entry[0]; - code_point_offset = entry[1]; - } else { - break; - } - } - - // 3. Return a code point whose value is code point offset + - // pointer − offset. - return code_point_offset + pointer - offset; - } - - /** - * @param {number} code_point The |code point| to locate in the gb18030 index. - * @return {number} The first pointer corresponding to |code point| in the - * gb18030 index. - */ - function indexGB18030RangesPointerFor(code_point) { - // 1. Let offset be the last code point in index gb18030 ranges - // that is equal to or less than code point and let pointer offset - // be its corresponding pointer. - var offset = 0; - var pointer_offset = 0; - var idx = index('gb18030'); - var i; - for (i = 0; i < idx.length; ++i) { - /** @type {!Array.} */ - var entry = idx[i]; - if (entry[1] <= code_point) { - offset = entry[1]; - pointer_offset = entry[0]; - } else { - break; - } - } - - // 2. Return a pointer whose value is pointer offset + code point - // − offset. - return pointer_offset + code_point - offset; - } - - /** - * @param {number} code_point The |code_point| to search for in the shift_jis index. - * @return {?number} The code point corresponding to |pointer| in |index|, - * or null if |code point| is not in the shift_jis index. - */ - function indexShiftJISPointerFor(code_point) { - // 1. Let index be index jis0208 excluding all pointers in the - // range 8272 to 8835. - var pointer = indexPointerFor(code_point, index('jis0208')); - if (pointer === null || inRange(pointer, 8272, 8835)) - return null; - - // 2. Return the index pointer for code point in index. - return pointer; - } - - // - // 7. API - // - - /** @const */ var DEFAULT_ENCODING = 'utf-8'; - - // 7.1 Interface TextDecoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextDecoder(encoding, options) { - if (!(this instanceof TextDecoder)) { - return new TextDecoder(encoding, options); - } - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - if (!decoders[this._encoding.name]) { - throw Error('Decoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {boolean} */ - this._BOMseen = false; - /** @private @type {?Decoder} */ - this._decoder = null; - /** @private @type {boolean} */ - this._fatal = Boolean(options['fatal']); - /** @private @type {boolean} */ - this._ignoreBOM = Boolean(options['ignoreBOM']); - - if (Object.defineProperty) { - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - Object.defineProperty(this, 'fatal', {value: this._fatal}); - Object.defineProperty(this, 'ignoreBOM', {value: this._ignoreBOM}); - } else { - this.encoding = this._encoding.name; - this.fatal = this._fatal; - this.ignoreBOM = this._ignoreBOM; - } - - return this; - } - - TextDecoder.prototype = { - /** - * @param {ArrayBufferView=} input The buffer of bytes to decode. - * @param {Object=} options - * @return {string} The decoded string. - */ - decode: function decode(input, options) { - var bytes; - if (typeof input === 'object' && input instanceof ArrayBuffer) { - bytes = new Uint8Array(input); - } else if (typeof input === 'object' && 'buffer' in input && - input.buffer instanceof ArrayBuffer) { - bytes = new Uint8Array(input.buffer, - input.byteOffset, - input.byteLength); - } else { - bytes = new Uint8Array(0); - } - - options = ToDictionary(options); - - if (!this._streaming) { - this._decoder = decoders[this._encoding.name]({fatal: this._fatal}); - this._BOMseen = false; - } - this._streaming = Boolean(options['stream']); - - var input_stream = new Stream(bytes); - - var code_points = []; - - /** @type {?(number|!Array.)} */ - var result; - - while (!input_stream.endOfStream()) { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } - if (!this._streaming) { - do { - result = this._decoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (result === null) - continue; - if (Array.isArray(result)) - code_points.push.apply(code_points, /**@type {!Array.}*/(result)); - else - code_points.push(result); - } while (!input_stream.endOfStream()); - this._decoder = null; - } - - if (code_points.length) { - // If encoding is one of utf-8, utf-16be, and utf-16le, and - // ignore BOM flag and BOM seen flag are unset, run these - // subsubsteps: - if (['utf-8', 'utf-16le', 'utf-16be'].indexOf(this.encoding) !== -1 && - !this._ignoreBOM && !this._BOMseen) { - // If token is U+FEFF, set BOM seen flag. - if (code_points[0] === 0xFEFF) { - this._BOMseen = true; - code_points.shift(); - } else { - // Otherwise, if token is not end-of-stream, set BOM seen - // flag and append token to output. - this._BOMseen = true; - } - } - } - - return codePointsToString(code_points); - } - }; - - // 7.2 Interface TextEncoder - - /** - * @constructor - * @param {string=} encoding The label of the encoding; - * defaults to 'utf-8'. - * @param {Object=} options - */ - function TextEncoder(encoding, options) { - if (!(this instanceof TextEncoder)) - return new TextEncoder(encoding, options); - encoding = encoding !== undefined ? String(encoding) : DEFAULT_ENCODING; - options = ToDictionary(options); - /** @private */ - this._encoding = getEncoding(encoding); - if (this._encoding === null || this._encoding.name === 'replacement') - throw RangeError('Unknown encoding: ' + encoding); - - var allowLegacyEncoding = - Boolean(options['NONSTANDARD_allowLegacyEncoding']); - var isLegacyEncoding = (this._encoding.name !== 'utf-8' && - this._encoding.name !== 'utf-16le' && - this._encoding.name !== 'utf-16be'); - if (this._encoding === null || (isLegacyEncoding && !allowLegacyEncoding)) - throw RangeError('Unknown encoding: ' + encoding); - - if (!encoders[this._encoding.name]) { - throw Error('Encoder not present.' + - ' Did you forget to include encoding-indexes.js?'); - } - - /** @private @type {boolean} */ - this._streaming = false; - /** @private @type {?Encoder} */ - this._encoder = null; - /** @private @type {{fatal: boolean}} */ - this._options = {fatal: Boolean(options['fatal'])}; - - if (Object.defineProperty) - Object.defineProperty(this, 'encoding', {value: this._encoding.name}); - else - this.encoding = this._encoding.name; - - return this; - } - - TextEncoder.prototype = { - /** - * @param {string=} opt_string The string to encode. - * @param {Object=} options - * @return {Uint8Array} Encoded bytes, as a Uint8Array. - */ - encode: function encode(opt_string, options) { - opt_string = opt_string ? String(opt_string) : ''; - options = ToDictionary(options); - - // NOTE: This option is nonstandard. None of the encodings - // permitted for encoding (i.e. UTF-8, UTF-16) are stateful, - // so streaming is not necessary. - if (!this._streaming) - this._encoder = encoders[this._encoding.name](this._options); - this._streaming = Boolean(options['stream']); - - var bytes = []; - var input_stream = new Stream(stringToCodePoints(opt_string)); - /** @type {?(number|!Array.)} */ - var result; - while (!input_stream.endOfStream()) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - if (!this._streaming) { - while (true) { - result = this._encoder.handler(input_stream, input_stream.read()); - if (result === finished) - break; - if (Array.isArray(result)) - bytes.push.apply(bytes, /**@type {!Array.}*/(result)); - else - bytes.push(result); - } - this._encoder = null; - } - return new Uint8Array(bytes); - } - }; - - - // - // 8. The encoding - // - - // 8.1 utf-8 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function UTF8Decoder(options) { - var fatal = options.fatal; - - // utf-8's decoder's has an associated utf-8 code point, utf-8 - // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 - // lower boundary (initially 0x80), and a utf-8 upper boundary - // (initially 0xBF). - var /** @type {number} */ utf8_code_point = 0, - /** @type {number} */ utf8_bytes_seen = 0, - /** @type {number} */ utf8_bytes_needed = 0, - /** @type {number} */ utf8_lower_boundary = 0x80, - /** @type {number} */ utf8_upper_boundary = 0xBF; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, - // set utf-8 bytes needed to 0 and return error. - if (bite === end_of_stream && utf8_bytes_needed !== 0) { - utf8_bytes_needed = 0; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 3. If utf-8 bytes needed is 0, based on byte: - if (utf8_bytes_needed === 0) { - - // 0x00 to 0x7F - if (inRange(bite, 0x00, 0x7F)) { - // Return a code point whose value is byte. - return bite; - } - - // 0xC2 to 0xDF - if (inRange(bite, 0xC2, 0xDF)) { - // Set utf-8 bytes needed to 1 and utf-8 code point to byte - // − 0xC0. - utf8_bytes_needed = 1; - utf8_code_point = bite - 0xC0; - } - - // 0xE0 to 0xEF - else if (inRange(bite, 0xE0, 0xEF)) { - // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. - if (bite === 0xE0) - utf8_lower_boundary = 0xA0; - // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. - if (bite === 0xED) - utf8_upper_boundary = 0x9F; - // 3. Set utf-8 bytes needed to 2 and utf-8 code point to - // byte − 0xE0. - utf8_bytes_needed = 2; - utf8_code_point = bite - 0xE0; - } - - // 0xF0 to 0xF4 - else if (inRange(bite, 0xF0, 0xF4)) { - // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. - if (bite === 0xF0) - utf8_lower_boundary = 0x90; - // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. - if (bite === 0xF4) - utf8_upper_boundary = 0x8F; - // 3. Set utf-8 bytes needed to 3 and utf-8 code point to - // byte − 0xF0. - utf8_bytes_needed = 3; - utf8_code_point = bite - 0xF0; - } - - // Otherwise - else { - // Return error. - return decoderError(fatal); - } - - // Then (byte is in the range 0xC2 to 0xF4) set utf-8 code - // point to utf-8 code point << (6 × utf-8 bytes needed) and - // return continue. - utf8_code_point = utf8_code_point << (6 * utf8_bytes_needed); - return null; - } - - // 4. If byte is not in the range utf-8 lower boundary to utf-8 - // upper boundary, run these substeps: - if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { - - // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 - // bytes seen to 0, set utf-8 lower boundary to 0x80, and set - // utf-8 upper boundary to 0xBF. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Return error. - return decoderError(fatal); - } - - // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary - // to 0xBF. - utf8_lower_boundary = 0x80; - utf8_upper_boundary = 0xBF; - - // 6. Increase utf-8 bytes seen by one and set utf-8 code point - // to utf-8 code point + (byte − 0x80) << (6 × (utf-8 bytes - // needed − utf-8 bytes seen)). - utf8_bytes_seen += 1; - utf8_code_point += (bite - 0x80) << (6 * (utf8_bytes_needed - utf8_bytes_seen)); - - // 7. If utf-8 bytes seen is not equal to utf-8 bytes needed, - // continue. - if (utf8_bytes_seen !== utf8_bytes_needed) - return null; - - // 8. Let code point be utf-8 code point. - var code_point = utf8_code_point; - - // 9. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes - // seen to 0. - utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; - - // 10. Return a code point whose value is code point. - return code_point; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function UTF8Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007f)) - return code_point; - - // 3. Set count and offset based on the range code point is in: - var count, offset; - // U+0080 to U+07FF: 1 and 0xC0 - if (inRange(code_point, 0x0080, 0x07FF)) { - count = 1; - offset = 0xC0; - } - // U+0800 to U+FFFF: 2 and 0xE0 - else if (inRange(code_point, 0x0800, 0xFFFF)) { - count = 2; - offset = 0xE0; - } - // U+10000 to U+10FFFF: 3 and 0xF0 - else if (inRange(code_point, 0x10000, 0x10FFFF)) { - count = 3; - offset = 0xF0; - } - - // 4.Let bytes be a byte sequence whose first byte is (code - // point >> (6 × count)) + offset. - var bytes = [(code_point >> (6 * count)) + offset]; - - // 5. Run these substeps while count is greater than 0: - while (count > 0) { - - // 1. Set temp to code point >> (6 × (count − 1)). - var temp = code_point >> (6 * (count - 1)); - - // 2. Append to bytes 0x80 | (temp & 0x3F). - bytes.push(0x80 | (temp & 0x3F)); - - // 3. Decrease count by one. - count -= 1; - } - - // 6. Return bytes bytes, in order. - return bytes; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['utf-8'] = function(options) { - return new UTF8Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-8'] = function(options) { - return new UTF8Decoder(options); - }; - - // - // 9. Legacy single-byte encodings - // - - // 9.1 single-byte decoder - /** - * @constructor - * @implements {Decoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteDecoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Let code point be the index code point for byte − 0x80 in - // index single-byte. - var code_point = index[bite - 0x80]; - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - }; - } - - // 9.2 single-byte encoder - /** - * @constructor - * @implements {Encoder} - * @param {!Array.} index The encoding index. - * @param {{fatal: boolean}} options - */ - function SingleByteEncoder(index, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // single-byte. - var pointer = indexPointerFor(code_point, index); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - encoderError(code_point); - - // 5. Return a byte whose value is pointer + 0x80. - return pointer + 0x80; - }; - } - - (function() { - if (!('encoding-indexes' in global)) - return; - encodings.forEach(function(category) { - if (category.heading !== 'Legacy single-byte encodings') - return; - category.encodings.forEach(function(encoding) { - var name = encoding.name; - var idx = index(name); - /** @param {{fatal: boolean}} options */ - decoders[name] = function(options) { - return new SingleByteDecoder(idx, options); - }; - /** @param {{fatal: boolean}} options */ - encoders[name] = function(options) { - return new SingleByteEncoder(idx, options); - }; - }); - }); - }()); - - // - // 10. Legacy multi-byte Chinese (simplified) encodings - // - - // 10.1 gbk - - // 10.1.1 gbk decoder - // gbk's decoder is gb18030's decoder. - /** @param {{fatal: boolean}} options */ - decoders['gbk'] = function(options) { - return new GB18030Decoder(options); - }; - - // 10.1.2 gbk encoder - // gbk's encoder is gb18030's encoder with its gbk flag set. - /** @param {{fatal: boolean}} options */ - encoders['gbk'] = function(options) { - return new GB18030Encoder(options, true); - }; - - // 10.2 gb18030 - - // 10.2.1 gb18030 decoder - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function GB18030Decoder(options) { - var fatal = options.fatal; - // gb18030's decoder has an associated gb18030 first, gb18030 - // second, and gb18030 third (all initially 0x00). - var /** @type {number} */ gb18030_first = 0x00, - /** @type {number} */ gb18030_second = 0x00, - /** @type {number} */ gb18030_third = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and gb18030 first, gb18030 - // second, and gb18030 third are 0x00, return finished. - if (bite === end_of_stream && gb18030_first === 0x00 && - gb18030_second === 0x00 && gb18030_third === 0x00) { - return finished; - } - // 2. If byte is end-of-stream, and gb18030 first, gb18030 - // second, or gb18030 third is not 0x00, set gb18030 first, - // gb18030 second, and gb18030 third to 0x00, and return error. - if (bite === end_of_stream && - (gb18030_first !== 0x00 || gb18030_second !== 0x00 || gb18030_third !== 0x00)) { - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - decoderError(fatal); - } - var code_point; - // 3. If gb18030 third is not 0x00, run these substeps: - if (gb18030_third !== 0x00) { - // 1. Let code point be null. - code_point = null; - // 2. If byte is in the range 0x30 to 0x39, set code point to - // the index gb18030 ranges code point for (((gb18030 first − - // 0x81) × 10 + gb18030 second − 0x30) × 126 + gb18030 third − - // 0x81) × 10 + byte − 0x30. - if (inRange(bite, 0x30, 0x39)) { - code_point = indexGB18030RangesCodePointFor( - (((gb18030_first - 0x81) * 10 + (gb18030_second - 0x30)) * 126 + - (gb18030_third - 0x81)) * 10 + bite - 0x30); - } - - // 3. Let buffer be a byte sequence consisting of gb18030 - // second, gb18030 third, and byte, in order. - var buffer = [gb18030_second, gb18030_third, bite]; - - // 4. Set gb18030 first, gb18030 second, and gb18030 third to - // 0x00. - gb18030_first = 0x00; - gb18030_second = 0x00; - gb18030_third = 0x00; - - // 5. If code point is null, prepend buffer to stream and - // return error. - if (code_point === null) { - stream.prepend(buffer); - return decoderError(fatal); - } - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 4. If gb18030 second is not 0x00, run these substeps: - if (gb18030_second !== 0x00) { - - // 1. If byte is in the range 0x81 to 0xFE, set gb18030 third - // to byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_third = bite; - return null; - } - - // 2. Prepend gb18030 second followed by byte to stream, set - // gb18030 first and gb18030 second to 0x00, and return error. - stream.prepend([gb18030_second, bite]); - gb18030_first = 0x00; - gb18030_second = 0x00; - return decoderError(fatal); - } - - // 5. If gb18030 first is not 0x00, run these substeps: - if (gb18030_first !== 0x00) { - - // 1. If byte is in the range 0x30 to 0x39, set gb18030 second - // to byte and return continue. - if (inRange(bite, 0x30, 0x39)) { - gb18030_second = bite; - return null; - } - - // 2. Let lead be gb18030 first, let pointer be null, and set - // gb18030 first to 0x00. - var lead = gb18030_first; - var pointer = null; - gb18030_first = 0x00; - - // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x41; - - // 4. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFE, - // set pointer to (lead − 0x81) × 190 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - offset); - - // 5. Let code point be null if pointer is null and the index - // code point for pointer in index gb18030 otherwise. - code_point = pointer === null ? null : - indexCodePointFor(pointer, index('gb18030')); - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x80, return code point U+20AC. - if (bite === 0x80) - return 0x20AC; - - // 8. If byte is in the range 0x81 to 0xFE, set gb18030 first to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - gb18030_first = bite; - return null; - } - - // 9. Return error. - return decoderError(fatal); - }; - } - - // 10.2.2 gb18030 encoder - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - * @param {boolean=} gbk_flag - */ - function GB18030Encoder(options, gbk_flag) { - var fatal = options.fatal; - // gb18030's decoder has an associated gbk flag (initially unset). - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) { - return code_point; - } - - // 3. If the gbk flag is set and code point is U+20AC, return - // byte 0x80. - if (gbk_flag && code_point === 0x20AC) - return 0x80; - - // 4. Let pointer be the index pointer for code point in index - // gb18030. - var pointer = indexPointerFor(code_point, index('gb18030')); - - // 5. If pointer is not null, run these substeps: - if (pointer !== null) { - - // 1. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 2. Let trail be pointer % 190. - var trail = pointer % 190; - - // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. - var offset = trail < 0x3F ? 0x40 : 0x41; - - // 4. Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - } - - // 6. If gbk flag is set, return error with code point. - if (gbk_flag) - return encoderError(code_point); - - // 7. Set pointer to the index gb18030 ranges pointer for code - // point. - pointer = indexGB18030RangesPointerFor(code_point); - - // 8. Let byte1 be pointer / 10 / 126 / 10. - var byte1 = div(div(div(pointer, 10), 126), 10); - - // 9. Set pointer to pointer − byte1 × 10 × 126 × 10. - pointer = pointer - byte1 * 10 * 126 * 10; - - // 10. Let byte2 be pointer / 10 / 126. - var byte2 = div(div(pointer, 10), 126); - - // 11. Set pointer to pointer − byte2 × 10 × 126. - pointer = pointer - byte2 * 10 * 126; - - // 12. Let byte3 be pointer / 10. - var byte3 = div(pointer, 10); - - // 13. Let byte4 be pointer − byte3 × 10. - var byte4 = pointer - byte3 * 10; - - // 14. Return four bytes whose values are byte1 + 0x81, byte2 + - // 0x30, byte3 + 0x81, byte4 + 0x30. - return [byte1 + 0x81, - byte2 + 0x30, - byte3 + 0x81, - byte4 + 0x30]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['gb18030'] = function(options) { - return new GB18030Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['gb18030'] = function(options) { - return new GB18030Decoder(options); - }; - - - // - // 11. Legacy multi-byte Chinese (traditional) encodings - // - - // 11.1 big5 - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function Big5Decoder(options) { - var fatal = options.fatal; - // big5's decoder has an associated big5 lead (initially 0x00). - var /** @type {number} */ big5_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and big5 lead is not 0x00, set - // big5 lead to 0x00 and return error. - if (bite === end_of_stream && big5_lead !== 0x00) { - big5_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and big5 lead is 0x00, return - // finished. - if (bite === end_of_stream && big5_lead === 0x00) - return finished; - - // 3. If big5 lead is not 0x00, let lead be big5 lead, let - // pointer be null, set big5 lead to 0x00, and then run these - // substeps: - if (big5_lead !== 0x00) { - var lead = big5_lead; - var pointer = null; - big5_lead = 0x00; - - // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 - // otherwise. - var offset = bite < 0x7F ? 0x40 : 0x62; - - // 2. If byte is in the range 0x40 to 0x7E or 0xA1 to 0xFE, - // set pointer to (lead − 0x81) × 157 + (byte − offset). - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) - pointer = (lead - 0x81) * 157 + (bite - offset); - - // 3. If there is a row in the table below whose first column - // is pointer, return the two code points listed in its second - // column - // Pointer | Code points - // --------+-------------- - // 1133 | U+00CA U+0304 - // 1135 | U+00CA U+030C - // 1164 | U+00EA U+0304 - // 1166 | U+00EA U+030C - switch (pointer) { - case 1133: return [0x00CA, 0x0304]; - case 1135: return [0x00CA, 0x030C]; - case 1164: return [0x00EA, 0x0304]; - case 1166: return [0x00EA, 0x030C]; - } - - // 4. Let code point be null if pointer is null and the index - // code point for pointer in index big5 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('big5')); - - // 5. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 6. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 7. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set big5 lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - big5_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function Big5Encoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // big5. - var pointer = indexPointerFor(code_point, index('big5')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 157 + 0x81. - var lead = div(pointer, 157) + 0x81; - - // 6. If lead is less than 0xA1, return error with code point. - if (lead < 0xA1) - return encoderError(code_point); - - // 7. Let trail be pointer % 157. - var trail = pointer % 157; - - // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 - // otherwise. - var offset = trail < 0x3F ? 0x40 : 0x62; - - // Return two bytes whose values are lead and trail + offset. - return [lead, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['big5'] = function(options) { - return new Big5Encoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['big5'] = function(options) { - return new Big5Decoder(options); - }; - - - // - // 12. Legacy multi-byte Japanese encodings - // - - // 12.1 euc-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCJPDecoder(options) { - var fatal = options.fatal; - - // euc-jp's decoder has an associated euc-jp jis0212 flag - // (initially unset) and euc-jp lead (initially 0x00). - var /** @type {boolean} */ eucjp_jis0212_flag = false, - /** @type {number} */ eucjp_lead = 0x00; - - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set - // euc-jp lead to 0x00, and return error. - if (bite === end_of_stream && eucjp_lead !== 0x00) { - eucjp_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-jp lead is 0x00, return - // finished. - if (bite === end_of_stream && eucjp_lead === 0x00) - return finished; - - // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to - // 0xDF, set euc-jp lead to 0x00 and return a code point whose - // value is 0xFF61 + byte − 0xA1. - if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { - eucjp_lead = 0x00; - return 0xFF61 + bite - 0xA1; - } - - // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to - // 0xFE, set the euc-jp jis0212 flag, set euc-jp lead to byte, - // and return continue. - if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { - eucjp_jis0212_flag = true; - eucjp_lead = bite; - return null; - } - - // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set - // euc-jp lead to 0x00, and run these substeps: - if (eucjp_lead !== 0x00) { - var lead = eucjp_lead; - eucjp_lead = 0x00; - - // 1. Let code point be null. - var code_point = null; - - // 2. If lead and byte are both in the range 0xA1 to 0xFE, set - // code point to the index code point for (lead − 0xA1) × 94 + - // byte − 0xA1 in index jis0208 if the euc-jp jis0212 flag is - // unset and in index jis0212 otherwise. - if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { - code_point = indexCodePointFor( - (lead - 0xA1) * 94 + (bite - 0xA1), - index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); - } - - // 3. Unset the euc-jp jis0212 flag. - eucjp_jis0212_flag = false; - - // 4. If byte is not in the range 0xA1 to 0xFE, prepend byte - // to stream. - if (!inRange(bite, 0xA1, 0xFE)) - stream.prepend(bite); - - // 5. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 6. Return a code point whose value is code point. - return code_point; - } - - // 6. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, set - // euc-jp lead to byte and return continue. - if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { - eucjp_lead = bite; - return null; - } - - // 8. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCJPEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return two - // bytes whose values are 0x8E and code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return [0x8E, code_point - 0xFF61 + 0xA1]; - - // 6. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 94 + 0xA1. - var lead = div(pointer, 94) + 0xA1; - - // 9. Let trail be pointer % 94 + 0xA1. - var trail = pointer % 94 + 0xA1; - - // 10. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-jp'] = function(options) { - return new EUCJPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-jp'] = function(options) { - return new EUCJPDecoder(options); - }; - - // 12.2 iso-2022-jp - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPDecoder(options) { - var fatal = options.fatal; - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - Katakana: 2, - LeadByte: 3, - TrailByte: 4, - EscapeStart: 5, - Escape: 6 - }; - // iso-2022-jp's decoder has an associated iso-2022-jp decoder - // state (initially ASCII), iso-2022-jp decoder output state - // (initially ASCII), iso-2022-jp lead (initially 0x00), and - // iso-2022-jp output flag (initially unset). - var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, - /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, - /** @type {number} */ iso2022jp_lead = 0x00, - /** @type {boolean} */ iso2022jp_output_flag = false; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // switching on iso-2022-jp decoder state: - switch (iso2022jp_decoder_state) { - default: - case states.ASCII: - // ASCII - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E - && bite !== 0x0F && bite !== 0x1B) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Roman: - // Roman - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x5C - if (bite === 0x5C) { - // Unset the iso-2022-jp output flag and return code point - // U+00A5. - iso2022jp_output_flag = false; - return 0x00A5; - } - - // 0x7E - if (bite === 0x7E) { - // Unset the iso-2022-jp output flag and return code point - // U+203E. - iso2022jp_output_flag = false; - return 0x203E; - } - - // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E - if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F - && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is byte. - iso2022jp_output_flag = false; - return bite; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.Katakana: - // Katakana - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x5F - if (inRange(bite, 0x21, 0x5F)) { - // Unset the iso-2022-jp output flag and return a code point - // whose value is 0xFF61 + byte − 0x21. - iso2022jp_output_flag = false; - return 0xFF61 + bite - 0x21; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.LeadByte: - // Lead byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return null; - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // Unset the iso-2022-jp output flag, set iso-2022-jp lead - // to byte, iso-2022-jp decoder state to trail byte, and - // return continue. - iso2022jp_output_flag = false; - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.TrailByte; - return null; - } - - // end-of-stream - if (bite === end_of_stream) { - // Return finished. - return finished; - } - - // Otherwise - // Unset the iso-2022-jp output flag and return error. - iso2022jp_output_flag = false; - return decoderError(fatal); - - case states.TrailByte: - // Trail byte - // Based on byte: - - // 0x1B - if (bite === 0x1B) { - // Set iso-2022-jp decoder state to escape start and return - // continue. - iso2022jp_decoder_state = states.EscapeStart; - return decoderError(fatal); - } - - // 0x21 to 0x7E - if (inRange(bite, 0x21, 0x7E)) { - // 1. Set the iso-2022-jp decoder state to lead byte. - iso2022jp_decoder_state = states.LeadByte; - - // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. - var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; - - // 3. Let code point be the index code point for pointer in index jis0208. - var code_point = indexCodePointFor(pointer, index('jis0208')); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // end-of-stream - if (bite === end_of_stream) { - // Set the iso-2022-jp decoder state to lead byte, prepend - // byte to stream, and return error. - iso2022jp_decoder_state = states.LeadByte; - stream.prepend(bite); - return decoderError(fatal); - } - - // Otherwise - // Set iso-2022-jp decoder state to lead byte and return - // error. - iso2022jp_decoder_state = states.LeadByte; - return decoderError(fatal); - - case states.EscapeStart: - // Escape start - - // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to - // byte, iso-2022-jp decoder state to escape, and return - // continue. - if (bite === 0x24 || bite === 0x28) { - iso2022jp_lead = bite; - iso2022jp_decoder_state = states.Escape; - return null; - } - - // 2. Prepend byte to stream. - stream.prepend(bite); - - // 3. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state, and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - - case states.Escape: - // Escape - - // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to - // 0x00. - var lead = iso2022jp_lead; - iso2022jp_lead = 0x00; - - // 2. Let state be null. - var state = null; - - // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. - if (lead === 0x28 && bite === 0x42) - state = states.ASCII; - - // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. - if (lead === 0x28 && bite === 0x4A) - state = states.Roman; - - // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. - if (lead === 0x28 && bite === 0x49) - state = states.Katakana; - - // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set - // state to lead byte. - if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) - state = states.LeadByte; - - // 7. If state is non-null, run these substeps: - if (state !== null) { - // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder - // output state to states. - iso2022jp_decoder_state = iso2022jp_decoder_state = state; - - // 2. Let output flag be the iso-2022-jp output flag. - var output_flag = iso2022jp_output_flag; - - // 3. Set the iso-2022-jp output flag. - iso2022jp_output_flag = true; - - // 4. Return continue, if output flag is unset, and error - // otherwise. - return !output_flag ? null : decoderError(fatal); - } - - // 8. Prepend lead and byte to stream. - stream.prepend([lead, bite]); - - // 9. Unset the iso-2022-jp output flag, set iso-2022-jp - // decoder state to iso-2022-jp decoder output state and - // return error. - iso2022jp_output_flag = false; - iso2022jp_decoder_state = iso2022jp_decoder_output_state; - return decoderError(fatal); - } - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ISO2022JPEncoder(options) { - var fatal = options.fatal; - // iso-2022-jp's encoder has an associated iso-2022-jp encoder - // state which is one of ASCII, Roman, and jis0208 (initially - // ASCII). - /** @enum */ - var states = { - ASCII: 0, - Roman: 1, - jis0208: 2 - }; - var /** @type {number} */ iso2022jp_state = states.ASCII; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream and iso-2022-jp encoder - // state is not ASCII, prepend code point to stream, set - // iso-2022-jp encoder state to ASCII, and return three bytes - // 0x1B 0x28 0x42. - if (code_point === end_of_stream && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - return [0x1B, 0x28, 0x42]; - } - - // 2. If code point is end-of-stream and iso-2022-jp encoder - // state is ASCII, return finished. - if (code_point === end_of_stream && iso2022jp_state === states.ASCII) - return finished; - - // 3. If iso-2022-jp encoder state is ASCII and code point is in - // the range U+0000 to U+007F, return a byte whose value is code - // point. - if (iso2022jp_state === states.ASCII && - inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 4. If iso-2022-jp encoder state is Roman and code point is in - // the range U+0000 to U+007F, excluding U+005C and U+007E, or - // is U+00A5 or U+203E, run these substeps: - if (iso2022jp_state === states.Roman && - inRange(code_point, 0x0000, 0x007F) && - code_point !== 0x005C && code_point !== 0x007E) { - - // 1. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 2. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 3. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - } - - // 5. If code point is in the range U+0000 to U+007F, and - // iso-2022-jp encoder state is not ASCII, prepend code point to - // stream, set iso-2022-jp encoder state to ASCII, and return - // three bytes 0x1B 0x28 0x42. - if (inRange(code_point, 0x0000, 0x007F) && - iso2022jp_state !== states.ASCII) { - stream.prepend(code_point); - iso2022jp_state = states.ASCII; - return [0x1B, 0x28, 0x42]; - } - - // 6. If code point is either U+00A5 or U+203E, and iso-2022-jp - // encoder state is not Roman, prepend code point to stream, set - // iso-2022-jp encoder state to Roman, and return three bytes - // 0x1B 0x28 0x4A. - if ((code_point === 0x00A5 || code_point === 0x203E) && - iso2022jp_state !== states.Roman) { - stream.prepend(code_point); - iso2022jp_state = states.Roman; - return [0x1B, 0x28, 0x4A]; - } - - // 7. Let pointer be the index pointer for code point in index - // jis0208. - var pointer = indexPointerFor(code_point, index('jis0208')); - - // 8. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 9. If iso-2022-jp encoder state is not jis0208, prepend code - // point to stream, set iso-2022-jp encoder state to jis0208, - // and return three bytes 0x1B 0x24 0x42. - if (iso2022jp_state !== states.jis0208) { - stream.prepend(code_point); - iso2022jp_state = states.jis0208; - return [0x1B, 0x24, 0x42]; - } - - // 10. Let lead be pointer / 94 + 0x21. - var lead = div(pointer, 94) + 0x21; - - // 11. Let trail be pointer % 94 + 0x21. - var trail = pointer % 94 + 0x21; - - // 12. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['iso-2022-jp'] = function(options) { - return new ISO2022JPEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['iso-2022-jp'] = function(options) { - return new ISO2022JPDecoder(options); - }; - - // 12.3 shift_jis - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISDecoder(options) { - var fatal = options.fatal; - // shift_jis's decoder has an associated shift_jis lead (initially - // 0x00). - var /** @type {number} */ shiftjis_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and shift_jis lead is not 0x00, - // set shift_jis lead to 0x00 and return error. - if (bite === end_of_stream && shiftjis_lead !== 0x00) { - shiftjis_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and shift_jis lead is 0x00, - // return finished. - if (bite === end_of_stream && shiftjis_lead === 0x00) - return finished; - - // 3. If shift_jis lead is not 0x00, let lead be shift_jis lead, - // let pointer be null, set shift_jis lead to 0x00, and then run - // these substeps: - if (shiftjis_lead !== 0x00) { - var lead = shiftjis_lead; - var pointer = null; - shiftjis_lead = 0x00; - - // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 - // otherwise. - var offset = (bite < 0x7F) ? 0x40 : 0x41; - - // 2. Let lead offset be 0x81, if lead is less than 0xA0, and - // 0xC1 otherwise. - var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; - - // 3. If byte is in the range 0x40 to 0x7E or 0x80 to 0xFC, - // set pointer to (lead − lead offset) × 188 + byte − offset. - if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) - pointer = (lead - lead_offset) * 188 + bite - offset; - - // 4. Let code point be null, if pointer is null, and the - // index code point for pointer in index jis0208 otherwise. - var code_point = (pointer === null) ? null : - indexCodePointFor(pointer, index('jis0208')); - - // 5. If code point is null and pointer is in the range 8836 - // to 10528, return a code point whose value is 0xE000 + - // pointer − 8836. - if (code_point === null && pointer !== null && - inRange(pointer, 8836, 10528)) - return 0xE000 + pointer - 8836; - - // 6. If pointer is null, prepend byte to stream. - if (pointer === null) - stream.prepend(bite); - - // 7. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 8. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x80, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x80)) - return bite; - - // 5. If byte is in the range 0xA1 to 0xDF, return a code point - // whose value is 0xFF61 + byte − 0xA1. - if (inRange(bite, 0xA1, 0xDF)) - return 0xFF61 + bite - 0xA1; - - // 6. If byte is in the range 0x81 to 0x9F or 0xE0 to 0xFC, set - // shift_jis lead to byte and return continue. - if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { - shiftjis_lead = bite; - return null; - } - - // 7. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function ShiftJISEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+0080, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x0080)) - return code_point; - - // 3. If code point is U+00A5, return byte 0x5C. - if (code_point === 0x00A5) - return 0x5C; - - // 4. If code point is U+203E, return byte 0x7E. - if (code_point === 0x203E) - return 0x7E; - - // 5. If code point is in the range U+FF61 to U+FF9F, return a - // byte whose value is code point − 0xFF61 + 0xA1. - if (inRange(code_point, 0xFF61, 0xFF9F)) - return code_point - 0xFF61 + 0xA1; - - // 6. Let pointer be the index shift_jis pointer for code point. - var pointer = indexShiftJISPointerFor(code_point); - - // 7. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 8. Let lead be pointer / 188. - var lead = div(pointer, 188); - - // 9. Let lead offset be 0x81, if lead is less than 0x1F, and - // 0xC1 otherwise. - var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; - - // 10. Let trail be pointer % 188. - var trail = pointer % 188; - - // 11. Let offset be 0x40, if trail is less than 0x3F, and 0x41 - // otherwise. - var offset = (trail < 0x3F) ? 0x40 : 0x41; - - // 12. Return two bytes whose values are lead + lead offset and - // trail + offset. - return [lead + lead_offset, trail + offset]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['shift_jis'] = function(options) { - return new ShiftJISEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['shift_jis'] = function(options) { - return new ShiftJISDecoder(options); - }; - - // - // 13. Legacy multi-byte Korean encodings - // - - // 13.1 euc-kr - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function EUCKRDecoder(options) { - var fatal = options.fatal; - - // euc-kr's decoder has an associated euc-kr lead (initially 0x00). - var /** @type {number} */ euckr_lead = 0x00; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set - // euc-kr lead to 0x00 and return error. - if (bite === end_of_stream && euckr_lead !== 0) { - euckr_lead = 0x00; - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and euc-kr lead is 0x00, return - // finished. - if (bite === end_of_stream && euckr_lead === 0) - return finished; - - // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let - // pointer be null, set euc-kr lead to 0x00, and then run these - // substeps: - if (euckr_lead !== 0x00) { - var lead = euckr_lead; - var pointer = null; - euckr_lead = 0x00; - - // 1. If byte is in the range 0x41 to 0xFE, set pointer to - // (lead − 0x81) × 190 + (byte − 0x41). - if (inRange(bite, 0x41, 0xFE)) - pointer = (lead - 0x81) * 190 + (bite - 0x41); - - // 2. Let code point be null, if pointer is null, and the - // index code point for pointer in index euc-kr otherwise. - var code_point = (pointer === null) ? null : indexCodePointFor(pointer, index('euc-kr')); - - // 3. If pointer is null and byte is in the range 0x00 to - // 0x7F, prepend byte to stream. - if (pointer === null && inRange(bite, 0x00, 0x7F)) - stream.prepend(bite); - - // 4. If code point is null, return error. - if (code_point === null) - return decoderError(fatal); - - // 5. Return a code point whose value is code point. - return code_point; - } - - // 4. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 5. If byte is in the range 0x81 to 0xFE, set euc-kr lead to - // byte and return continue. - if (inRange(bite, 0x81, 0xFE)) { - euckr_lead = bite; - return null; - } - - // 6. Return error. - return decoderError(fatal); - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function EUCKREncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. Let pointer be the index pointer for code point in index - // euc-kr. - var pointer = indexPointerFor(code_point, index('euc-kr')); - - // 4. If pointer is null, return error with code point. - if (pointer === null) - return encoderError(code_point); - - // 5. Let lead be pointer / 190 + 0x81. - var lead = div(pointer, 190) + 0x81; - - // 6. Let trail be pointer % 190 + 0x41. - var trail = (pointer % 190) + 0x41; - - // 7. Return two bytes whose values are lead and trail. - return [lead, trail]; - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['euc-kr'] = function(options) { - return new EUCKREncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['euc-kr'] = function(options) { - return new EUCKRDecoder(options); - }; - - - // - // 14. Legacy miscellaneous encodings - // - - // 14.1 replacement - - // Not needed - API throws RangeError - - // 14.2 utf-16 - - /** - * @param {number} code_unit - * @param {boolean} utf16be - * @return {!Array.} bytes - */ - function convertCodeUnitToBytes(code_unit, utf16be) { - // 1. Let byte1 be code unit >> 8. - var byte1 = code_unit >> 8; - - // 2. Let byte2 be code unit & 0x00FF. - var byte2 = code_unit & 0x00FF; - - // 3. Then return the bytes in order: - // utf-16be flag is set: byte1, then byte2. - if (utf16be) - return [byte1, byte2]; - // utf-16be flag is unset: byte2, then byte1. - return [byte2, byte1]; - } - - /** - * @constructor - * @implements {Decoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Decoder(utf16_be, options) { - var fatal = options.fatal; - var /** @type {?number} */ utf16_lead_byte = null, - /** @type {?number} */ utf16_lead_surrogate = null; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream and either utf-16 lead byte or - // utf-16 lead surrogate is not null, set utf-16 lead byte and - // utf-16 lead surrogate to null, and return error. - if (bite === end_of_stream && (utf16_lead_byte !== null || - utf16_lead_surrogate !== null)) { - return decoderError(fatal); - } - - // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 - // lead surrogate are null, return finished. - if (bite === end_of_stream && utf16_lead_byte === null && - utf16_lead_surrogate === null) { - return finished; - } - - // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte - // and return continue. - if (utf16_lead_byte === null) { - utf16_lead_byte = bite; - return null; - } - - // 4. Let code unit be the result of: - var code_unit; - if (utf16_be) { - // utf-16be decoder flag is set - // (utf-16 lead byte << 8) + byte. - code_unit = (utf16_lead_byte << 8) + bite; - } else { - // utf-16be decoder flag is unset - // (byte << 8) + utf-16 lead byte. - code_unit = (bite << 8) + utf16_lead_byte; - } - // Then set utf-16 lead byte to null. - utf16_lead_byte = null; - - // 5. If utf-16 lead surrogate is not null, let lead surrogate - // be utf-16 lead surrogate, set utf-16 lead surrogate to null, - // and then run these substeps: - if (utf16_lead_surrogate !== null) { - var lead_surrogate = utf16_lead_surrogate; - utf16_lead_surrogate = null; - - // 1. If code unit is in the range U+DC00 to U+DFFF, return a - // code point whose value is 0x10000 + ((lead surrogate − - // 0xD800) << 10) + (code unit − 0xDC00). - if (inRange(code_unit, 0xDC00, 0xDFFF)) { - return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + - (code_unit - 0xDC00); - } - - // 2. Prepend the sequence resulting of converting code unit - // to bytes using utf-16be decoder flag to stream and return - // error. - stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); - return decoderError(fatal); - } - - // 6. If code unit is in the range U+D800 to U+DBFF, set utf-16 - // lead surrogate to code unit and return continue. - if (inRange(code_unit, 0xD800, 0xDBFF)) { - utf16_lead_surrogate = code_unit; - return null; - } - - // 7. If code unit is in the range U+DC00 to U+DFFF, return - // error. - if (inRange(code_unit, 0xDC00, 0xDFFF)) - return decoderError(fatal); - - // 8. Return code point code unit. - return code_unit; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {boolean} utf16_be True if big-endian, false if little-endian. - * @param {{fatal: boolean}} options - */ - function UTF16Encoder(utf16_be, options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1. If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+FFFF, return the - // sequence resulting of converting code point to bytes using - // utf-16be encoder flag. - if (inRange(code_point, 0x0000, 0xFFFF)) - return convertCodeUnitToBytes(code_point, utf16_be); - - // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, - // converted to bytes using utf-16be encoder flag. - var lead = convertCodeUnitToBytes( - ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); - - // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, - // converted to bytes using utf-16be encoder flag. - var trail = convertCodeUnitToBytes( - ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); - - // 5. Return a byte sequence of lead followed by trail. - return lead.concat(trail); - }; - } - - // 14.3 utf-16be - /** @param {{fatal: boolean}} options */ - encoders['utf-16be'] = function(options) { - return new UTF16Encoder(true, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16be'] = function(options) { - return new UTF16Decoder(true, options); - }; - - // 14.4 utf-16le - /** @param {{fatal: boolean}} options */ - encoders['utf-16le'] = function(options) { - return new UTF16Encoder(false, options); - }; - /** @param {{fatal: boolean}} options */ - decoders['utf-16le'] = function(options) { - return new UTF16Decoder(false, options); - }; - - // 14.5 x-user-defined - - /** - * @constructor - * @implements {Decoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedDecoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream The stream of bytes being decoded. - * @param {number} bite The next byte read from the stream. - * @return {?(number|!Array.)} The next code point(s) - * decoded, or null if not enough data exists in the input - * stream to decode a complete code point. - */ - this.handler = function(stream, bite) { - // 1. If byte is end-of-stream, return finished. - if (bite === end_of_stream) - return finished; - - // 2. If byte is in the range 0x00 to 0x7F, return a code point - // whose value is byte. - if (inRange(bite, 0x00, 0x7F)) - return bite; - - // 3. Return a code point whose value is 0xF780 + byte − 0x80. - return 0xF780 + bite - 0x80; - }; - } - - /** - * @constructor - * @implements {Encoder} - * @param {{fatal: boolean}} options - */ - function XUserDefinedEncoder(options) { - var fatal = options.fatal; - /** - * @param {Stream} stream Input stream. - * @param {number} code_point Next code point read from the stream. - * @return {(number|!Array.)} Byte(s) to emit. - */ - this.handler = function(stream, code_point) { - // 1.If code point is end-of-stream, return finished. - if (code_point === end_of_stream) - return finished; - - // 2. If code point is in the range U+0000 to U+007F, return a - // byte whose value is code point. - if (inRange(code_point, 0x0000, 0x007F)) - return code_point; - - // 3. If code point is in the range U+F780 to U+F7FF, return a - // byte whose value is code point − 0xF780 + 0x80. - if (inRange(code_point, 0xF780, 0xF7FF)) - return code_point - 0xF780 + 0x80; - - // 4. Return error with code point. - return encoderError(code_point); - }; - } - - /** @param {{fatal: boolean}} options */ - encoders['x-user-defined'] = function(options) { - return new XUserDefinedEncoder(options); - }; - /** @param {{fatal: boolean}} options */ - decoders['x-user-defined'] = function(options) { - return new XUserDefinedDecoder(options); - }; - - if (!('TextEncoder' in global)) - global['TextEncoder'] = TextEncoder; - if (!('TextDecoder' in global)) - global['TextDecoder'] = TextDecoder; -}(this)); - -},{"./encoding-indexes.js":28}]},{},[20])(20) -}); diff --git a/build/node_modules/sinon/pkg/sinon-server-1.17.2.js b/build/node_modules/sinon/pkg/sinon-server-1.17.2.js deleted file mode 100644 index 48add7ac..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.17.2.js +++ /dev/null @@ -1,2260 +0,0 @@ -/** - * Sinon.JS 1.17.2, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.17.3.js b/build/node_modules/sinon/pkg/sinon-server-1.17.3.js deleted file mode 100644 index cdc972fa..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.17.3.js +++ /dev/null @@ -1,2260 +0,0 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.6.0.js b/build/node_modules/sinon/pkg/sinon-server-1.6.0.js deleted file mode 100644 index 58ec2664..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.6.0.js +++ /dev/null @@ -1,1573 +0,0 @@ -/** - * Sinon.JS 1.6.0, 2015/09/28 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/ -/*global module, require, __dirname, document*/ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function (buster) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - var sinon = { - wrapMethod: function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property]; - - if (!isFunction(wrappedMethod)) { - throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } - - if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - throw new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - - if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - throw new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - // IE 8 does not support hasOwnProperty on the window object. - var owned = hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }, - - extend: function extend(target) { - for (var i = 1, l = arguments.length; i < l; i += 1) { - for (var prop in arguments[i]) { - if (arguments[i].hasOwnProperty(prop)) { - target[prop] = arguments[i][prop]; - } - - // DONT ENUM bug, only care about toString - if (arguments[i].hasOwnProperty("toString") && - arguments[i].toString != target.toString) { - target.toString = arguments[i].toString; - } - } - } - - return target; - }, - - create: function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }, - - deepEqual: function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - if (typeof a != "object" || typeof b != "object") { - return a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Array]") { - if (a.length !== b.length) { - return false; - } - - for (var i = 0, l = a.length; i < l; i += 1) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - - var prop, aLength = 0, bLength = 0; - - for (prop in a) { - aLength += 1; - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - if (aLength != bLength) { - return false; - } - - return true; - }, - - functionName: function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }, - - functionToString: function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }, - - getConfig: function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }, - - format: function (val) { - return "" + val; - }, - - defaultConfig: { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }, - - timesInWords: function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }, - - calledInOrder: function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }, - - orderByFirstCall: function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }, - - log: function () {}, - - logError: function (label, err) { - var msg = label + " threw exception: " - sinon.log(msg + "[" + err.name + "] " + err.message); - if (err.stack) { sinon.log(err.stack); } - - setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }, - - typeOf: function (value) { - if (value === null) { - return "null"; - } - else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }, - - createStubInstance: function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - } - }; - - var isNode = typeof module == "object" && typeof require == "function"; - - if (isNode) { - try { - buster = { format: require("buster-format") }; - } catch (e) {} - module.exports = sinon; - module.exports.spy = require("./sinon/spy"); - module.exports.spyCall = require("./sinon/call"); - module.exports.stub = require("./sinon/stub"); - module.exports.mock = require("./sinon/mock"); - module.exports.collection = require("./sinon/collection"); - module.exports.assert = require("./sinon/assert"); - module.exports.sandbox = require("./sinon/sandbox"); - module.exports.test = require("./sinon/test"); - module.exports.testCase = require("./sinon/test_case"); - module.exports.assert = require("./sinon/assert"); - module.exports.match = require("./sinon/match"); - } - - if (buster) { - var formatter = sinon.create(buster.format); - formatter.quoteStrings = false; - sinon.format = function () { - return formatter.ascii.apply(formatter, arguments); - }; - } else if (isNode) { - try { - var util = require("util"); - sinon.format = function (value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - } catch (e) { - /* Node, but no util module - would be very old, but better safe than - sorry */ - } - } - - return sinon; -}(typeof buster == "object" && buster)); - -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - sinon.Event = function Event(type, bubbles, cancelable) { - this.initEvent(type, bubbles, cancelable); - }; - - sinon.Event.prototype = { - initEvent: function(type, bubbles, cancelable) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener, useCapture) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener, useCapture) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; -}()); - -/** - * @depend ../../sinon.js - * @depend event.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} -sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest }; - -// wrapper for global -(function(global) { - var xhr = sinon.xhr; - xhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - xhr.GlobalActiveXObject = global.ActiveXObject; - xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined"; - xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined"; - xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX - ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - "Connection": true, - "Content-Length": true, - "Cookie": true, - "Cookie2": true, - "Content-Transfer-Encoding": true, - "Date": true, - "Expect": true, - "Host": true, - "Keep-Alive": true, - "Referer": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, - "Upgrade": true, - "User-Agent": true, - "Via": true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) return; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if(callback(collection[index]) === true) return true; - }; - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function(obj,method,args) { - switch(args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0],args[1]); - case 3: return obj[method](args[0],args[1],args[2]); - case 4: return obj[method](args[0],args[1],args[2],args[3]); - case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]); - }; - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) { - var xhr = new sinon.xhr.workingXHR(); - each(["open","setRequestHeader","send","abort","getResponseHeader", - "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"], - function(method) { - fakeXhr[method] = function() { - return apply(xhr,method,arguments); - }; - }); - - var copyAttrs = function(args) { - each(args, function(attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch(e) { - if(!IE6Re.test(navigator.userAgent)) throw e; - } - }); - }; - - var stateChange = function() { - fakeXhr.readyState = xhr.readyState; - if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status","statusText"]); - } - if(xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText"]); - } - if(xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr); - }; - if(xhr.addEventListener) { - for(var event in fakeXhr.eventListeners) { - if(fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event],function(handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange",stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr,"open",xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - if(sinon.FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters,function(filter) { - return filter.apply(this,xhrArgs) - }); - if (defake) { - return sinon.FakeXMLHttpRequest.defake(this,arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - if (this.requestHeaders["Content-Type"]) { - var value = this.requestHeaders["Content-Type"].split(";"); - this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = sinon.FakeXMLHttpRequest.UNSENT; - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = header.toLowerCase(); - - for (var h in this.responseHeaders) { - if (h.toLowerCase() == header) { - return this.responseHeaders[h]; - } - } - - return null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - } else { - this.readyState = FakeXMLHttpRequest.DONE; - } - }, - - respond: function respond(status, headers, body) { - this.setResponseHeaders(headers || {}); - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseBody(body || ""); - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - // Borrowed from JSpec - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - sinon.useFakeXMLHttpRequest = function () { - sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (xhr.supportsXHR) { - global.XMLHttpRequest = xhr.GlobalXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = xhr.GlobalActiveXObject; - } - - delete sinon.FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXMLHttpRequest.onCreate; - } - }; - if (xhr.supportsXHR) { - global.XMLHttpRequest = sinon.FakeXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new sinon.FakeXMLHttpRequest(); - } - - return new xhr.GlobalActiveXObject(objId); - }; - } - - return sinon.FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; -})(this); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_xml_http_request.js - */ -/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/ -/*global module, require, window*/ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -sinon.fakeServer = (function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestMethod = this.getHTTPMethod(request); - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1)); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - } - - return { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - }; - - if (this.autoRespond && !this.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, this.autoRespondAfter || 10); - - this.responding = true; - } - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) this.respondWith.apply(this, arguments); - var queue = this.queue || []; - var request; - - while(request = queue.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var i = 0, l = this.responses.length; i < l; i++) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; -}()); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/*jslint browser: true, eqeqeq: false, onevar: false*/ -/*global sinon*/ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-1.7.3.js b/build/node_modules/sinon/pkg/sinon-server-1.7.3.js deleted file mode 100644 index 597691b8..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-1.7.3.js +++ /dev/null @@ -1,1626 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2015/11/24 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/ -/*global module, require, __dirname, document*/ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function (buster) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable (obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - var sinon = { - wrapMethod: function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property]; - - if (!isFunction(wrappedMethod)) { - throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } - - if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - throw new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - - if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - throw new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - // IE 8 does not support hasOwnProperty on the window object. - var owned = hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }, - - extend: function extend(target) { - for (var i = 1, l = arguments.length; i < l; i += 1) { - for (var prop in arguments[i]) { - if (arguments[i].hasOwnProperty(prop)) { - target[prop] = arguments[i][prop]; - } - - // DONT ENUM bug, only care about toString - if (arguments[i].hasOwnProperty("toString") && - arguments[i].toString != target.toString) { - target.toString = arguments[i].toString; - } - } - } - - return target; - }, - - create: function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }, - - deepEqual: function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - if (typeof a != "object" || typeof b != "object") { - return a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Array]") { - if (a.length !== b.length) { - return false; - } - - for (var i = 0, l = a.length; i < l; i += 1) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - for (prop in a) { - aLength += 1; - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }, - - functionName: function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }, - - functionToString: function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }, - - getConfig: function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }, - - format: function (val) { - return "" + val; - }, - - defaultConfig: { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }, - - timesInWords: function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }, - - calledInOrder: function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }, - - orderByFirstCall: function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }, - - log: function () {}, - - logError: function (label, err) { - var msg = label + " threw exception: " - sinon.log(msg + "[" + err.name + "] " + err.message); - if (err.stack) { sinon.log(err.stack); } - - setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }, - - typeOf: function (value) { - if (value === null) { - return "null"; - } - else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }, - - createStubInstance: function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }, - - restore: function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } - else if (isRestorable(object)) { - object.restore(); - } - } - }; - - var isNode = typeof module == "object" && typeof require == "function"; - - if (isNode) { - try { - buster = { format: require("buster-format") }; - } catch (e) {} - module.exports = sinon; - module.exports.spy = require("./sinon/spy"); - module.exports.spyCall = require("./sinon/call"); - module.exports.stub = require("./sinon/stub"); - module.exports.mock = require("./sinon/mock"); - module.exports.collection = require("./sinon/collection"); - module.exports.assert = require("./sinon/assert"); - module.exports.sandbox = require("./sinon/sandbox"); - module.exports.test = require("./sinon/test"); - module.exports.testCase = require("./sinon/test_case"); - module.exports.assert = require("./sinon/assert"); - module.exports.match = require("./sinon/match"); - } - - if (buster) { - var formatter = sinon.create(buster.format); - formatter.quoteStrings = false; - sinon.format = function () { - return formatter.ascii.apply(formatter, arguments); - }; - } else if (isNode) { - try { - var util = require("util"); - sinon.format = function (value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - } catch (e) { - /* Node, but no util module - would be very old, but better safe than - sorry */ - } - } - - return sinon; -}(typeof buster == "object" && buster)); - -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function(type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener, useCapture) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener, useCapture) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; -}()); - -/** - * @depend ../../sinon.js - * @depend event.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} -sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest }; - -// wrapper for global -(function(global) { - var xhr = sinon.xhr; - xhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - xhr.GlobalActiveXObject = global.ActiveXObject; - xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined"; - xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined"; - xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX - ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - "Connection": true, - "Content-Length": true, - "Cookie": true, - "Cookie2": true, - "Content-Transfer-Encoding": true, - "Date": true, - "Expect": true, - "Host": true, - "Keep-Alive": true, - "Referer": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, - "Upgrade": true, - "User-Agent": true, - "Via": true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener(event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) return; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if(callback(collection[index]) === true) return true; - }; - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function(obj,method,args) { - switch(args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0],args[1]); - case 3: return obj[method](args[0],args[1],args[2]); - case 4: return obj[method](args[0],args[1],args[2],args[3]); - case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]); - }; - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) { - var xhr = new sinon.xhr.workingXHR(); - each(["open","setRequestHeader","send","abort","getResponseHeader", - "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"], - function(method) { - fakeXhr[method] = function() { - return apply(xhr,method,arguments); - }; - }); - - var copyAttrs = function(args) { - each(args, function(attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch(e) { - if(!IE6Re.test(navigator.userAgent)) throw e; - } - }); - }; - - var stateChange = function() { - fakeXhr.readyState = xhr.readyState; - if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status","statusText"]); - } - if(xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText"]); - } - if(xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr); - }; - if(xhr.addEventListener) { - for(var event in fakeXhr.eventListeners) { - if(fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event],function(handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange",stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr,"open",xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - if(sinon.FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters,function(filter) { - return filter.apply(this,xhrArgs) - }); - if (defake) { - return sinon.FakeXMLHttpRequest.defake(this,arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - if (this.requestHeaders["Content-Type"]) { - var value = this.requestHeaders["Content-Type"].split(";"); - this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = sinon.FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = header.toLowerCase(); - - for (var h in this.responseHeaders) { - if (h.toLowerCase() == header) { - return this.responseHeaders[h]; - } - } - - return null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - } else { - this.readyState = FakeXMLHttpRequest.DONE; - } - }, - - respond: function respond(status, headers, body) { - this.setResponseHeaders(headers || {}); - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseBody(body || ""); - if (typeof this.onload === "function"){ - this.onload(); - } - - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - // Borrowed from JSpec - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - sinon.useFakeXMLHttpRequest = function () { - sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (xhr.supportsXHR) { - global.XMLHttpRequest = xhr.GlobalXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = xhr.GlobalActiveXObject; - } - - delete sinon.FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXMLHttpRequest.onCreate; - } - }; - if (xhr.supportsXHR) { - global.XMLHttpRequest = sinon.FakeXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new sinon.FakeXMLHttpRequest(); - } - - return new xhr.GlobalActiveXObject(objId); - }; - } - - return sinon.FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; -})(this); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_xml_http_request.js - */ -/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/ -/*global module, require, window*/ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -sinon.fakeServer = (function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestMethod = this.getHTTPMethod(request); - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1)); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - } - - return { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - }; - - if (this.autoRespond && !this.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, this.autoRespondAfter || 10); - - this.responding = true; - } - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) this.respondWith.apply(this, arguments); - var queue = this.queue || []; - var request; - - while(request = queue.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var i = 0, l = this.responses.length; i < l; i++) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; -}()); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/*jslint browser: true, eqeqeq: false, onevar: false*/ -/*global sinon*/ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-server-2.0.0-pre.js b/build/node_modules/sinon/pkg/sinon-server-2.0.0-pre.js deleted file mode 100644 index e8a2b3d5..00000000 --- a/build/node_modules/sinon/pkg/sinon-server-2.0.0-pre.js +++ /dev/null @@ -1,2096 +0,0 @@ -/** - * Sinon.JS 2.0.0-pre, 2016/01/16 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } -}; - -module.exports = fakeServer; - -},{"./core":10,"./core/create":2,"./core/format":5}],18:[function(require,module,exports){ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var fakeServer = require("./fake_server"); -var fakeTimers = require("./fake_timers"); - -function Server() {} -Server.prototype = fakeServer; - -var fakeServerWithClock = new Server(); - -fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = fakeTimers.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return fakeServer.addRequest.call(this, xhr); -}; - -fakeServerWithClock.respond = function respond() { - var returnVal = fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; -}; - -fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return fakeServer.restore.apply(this, arguments); -}; - -module.exports = fakeServerWithClock; - -},{"./fake_server":17,"./fake_timers":19}],19:[function(require,module,exports){ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -"use strict"; - -var llx = require("lolex"); - -exports.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; -}; - -exports.clock = { - create: function (now) { - return llx.createClock(now); - } -}; - -exports.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -},{"lolex":21}],20:[function(require,module,exports){ -(function (global){ -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - "use strict"; - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); - } - - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; - } - - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; - - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } - } - return false; - } - - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { return "[Circular]"; } - - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } - - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } - - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } - } - - return ascii.object.call(f, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; - - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); - } - - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } - - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; - } - return prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; - - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + - ""; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } - } - - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, - - constructorName: function (object) { - return constructorName(this, object); - }, - - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; - - return Formatio.prototype; -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"samsam":22}],21:[function(require,module,exports){ -(function (global){ -/*global global, window*/ -/** - * @author Christian Johansen (christian@cjohansen.no) and contributors - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ - -(function (global) { - "use strict"; - - // Make properties writable in IE, as per - // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html - // JSLint being anal - var glbl = global; - - global.setTimeout = glbl.setTimeout; - global.clearTimeout = glbl.clearTimeout; - global.setInterval = glbl.setInterval; - global.clearInterval = glbl.clearInterval; - global.Date = glbl.Date; - - // setImmediate is not a standard function - // avoid adding the prop to the window object if not present - if (global.setImmediate !== undefined) { - global.setImmediate = glbl.setImmediate; - global.clearImmediate = glbl.clearImmediate; - } - - // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() - // browsers, a number. - // see https://github.com/cjohansen/Sinon.JS/pull/436 - - var NOOP = function () { return undefined; }; - var timeoutResult = setTimeout(NOOP, 0); - var addTimerReturnsObject = typeof timeoutResult === "object"; - clearTimeout(timeoutResult); - - var NativeDate = Date; - var uniqueTimerId = 1; - - /** - * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into - * number of milliseconds. This is used to support human-readable strings passed - * to clock.tick() - */ - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; - } - - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - - return target; - } - - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - } - - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } - - if (!clock.timers) { - clock.timers = {}; - } - - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; - - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; - } - - return timer.id; - } - - - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; - } - - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; - } - - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; - } - if (a.createdAt > b.createdAt) { - return 1; - } - - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; - } - if (a.id > b.id) { - return 1; - } - - // As timer ids are unique, no fallback `0` is necessary - } - - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); - - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } - - return timer; - } - - function firstTimer(clock) { - var timers = clock.timers, - timer = null, - id; - - for (id in timers) { - if (timers.hasOwnProperty(id)) { - if (!timer || compareTimers(timer, timers[id]) === 1) { - timer = timers[id]; - } - } - } - - return timer; - } - - function callTimer(clock, timer) { - var exception; - - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } - - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } - - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - } - - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } - if (timer.interval !== undefined) { - return "Interval"; - } - return "Timeout"; - } - - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } - - if (!clock.timers) { - clock.timers = []; - } - - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } - - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } - } - - function uninstall(clock, target) { - var method, - i, - l; - - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; - - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } - } - - // Prevent multiple executions which will completely remove these props - clock.methods = []; - } - - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; - - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } - } - - target[method].clock = clock; - } - - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; - - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } - } - - return ks; - }; - - exports.timers = timers; - - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; - - clock.Date.clock = clock; - - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; - - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; - - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; - - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; - - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; - - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; - - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; - - clock.duringTick = true; - - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } - - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } - - clock.duringTick = false; - clock.now = tickTo; - - if (firstException) { - throw firstException; - } - - return clock.now; - }; - - clock.next = function next() { - var timer = firstTimer(clock); - if (!timer) { - return clock.now; - } - - clock.duringTick = true; - try { - clock.now = timer.callAt; - callTimer(clock, timer); - return clock.now; - } finally { - clock.duringTick = false; - } - }; - - clock.reset = function reset() { - clock.timers = {}; - }; - - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; - var id, timer; - - // update 'system clock' - clock.now = newNow; - - // update timers and intervals to keep them stable - for (id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; - - return clock; - } - exports.createClock = createClock; - - exports.install = function install(target, now, toFake) { - var i, - l; - - if (typeof target === "number") { - toFake = now; - now = target; - target = null; - } - - if (!target) { - target = global; - } - - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; - - clock.methods = toFake || []; - - if (clock.methods.length === 0) { - clock.methods = keys(timers); - } - - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); - } - - return clock; - }; - -}(global || this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],22:[function(require,module,exports){ -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } - - /** - * @name samsam.isArguments - * @param Object object - * - * Returns ``true`` if ``object`` is an ``arguments`` object, - * ``false`` otherwise. - */ - function isArguments(object) { - if (getClass(object) === 'Arguments') { return true; } - if (typeof object !== "object" || typeof object.length !== "number" || - getClass(object) === "Array") { - return false; - } - if (typeof object.callee == "function") { return true; } - try { - object[object.length] = 6; - delete object[object.length]; - } catch (e) { - return true; - } - return false; - } - - /** - * @name samsam.isElement - * @param Object object - * - * Returns ``true`` if ``object`` is a DOM element node. Unlike - * Underscore.js/lodash, this function will return ``false`` if ``object`` - * is an *element-like* object, i.e. a regular object with a ``nodeType`` - * property that holds the value ``1``. - */ - function isElement(object) { - if (!object || object.nodeType !== 1 || !div) { return false; } - try { - object.appendChild(div); - object.removeChild(div); - } catch (e) { - return false; - } - return true; - } - - /** - * @name samsam.keys - * @param Object object - * - * Return an array of own property names. - */ - function keys(object) { - var ks = [], prop; - for (prop in object) { - if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } - } - return ks; - } - - /** - * @name samsam.isDate - * @param Object value - * - * Returns true if the object is a ``Date``, or *date-like*. Duck typing - * of date objects work by checking that the object has a ``getTime`` - * function whose return value equals the return value from the object's - * ``valueOf``. - */ - function isDate(value) { - return typeof value.getTime == "function" && - value.getTime() == value.valueOf(); - } - - /** - * @name samsam.isNegZero - * @param Object value - * - * Returns ``true`` if ``value`` is ``-0``. - */ - function isNegZero(value) { - return value === 0 && 1 / value === -Infinity; - } - - /** - * @name samsam.equal - * @param Object obj1 - * @param Object obj2 - * - * Returns ``true`` if two objects are strictly equal. Compared to - * ``===`` there are two exceptions: - * - * - NaN is considered equal to NaN - * - -0 and +0 are not considered equal - */ - function identical(obj1, obj2) { - if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { - return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); - } - } - - - /** - * @name samsam.deepEqual - * @param Object obj1 - * @param Object obj2 - * - * Deep equal comparison. Two values are "deep equal" if: - * - * - They are equal, according to samsam.identical - * - They are both date objects representing the same time - * - They are both arrays containing elements that are all deepEqual - * - They are objects with the same set of properties, and each property - * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` - * - * Supports cyclic objects. - */ - function deepEqualCyclic(obj1, obj2) { - - // used for cyclic comparison - // contain already visited objects - var objects1 = [], - objects2 = [], - // contain pathes (position in the object structure) - // of the already visited objects - // indexes same as in objects arrays - paths1 = [], - paths2 = [], - // contains combinations of already compared objects - // in the manner: { "$1['ref']$2['ref']": true } - compared = {}; - - /** - * used to check, if the value of a property is an object - * (cyclic logic is only needed for objects) - * only needed for cyclic logic - */ - function isObject(value) { - - if (typeof value === 'object' && value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String)) { - - return true; - } - - return false; - } - - /** - * returns the index of the given object in the - * given objects array, -1 if not contained - * only needed for cyclic logic - */ - function getIndex(objects, obj) { - - var i; - for (i = 0; i < objects.length; i++) { - if (objects[i] === obj) { - return i; - } - } - - return -1; - } - - // does the recursion for the deep equal check - return (function deepEqual(obj1, obj2, path1, path2) { - var type1 = typeof obj1; - var type2 = typeof obj2; - - // == null also matches undefined - if (obj1 === obj2 || - isNaN(obj1) || isNaN(obj2) || - obj1 == null || obj2 == null || - type1 !== "object" || type2 !== "object") { - - return identical(obj1, obj2); - } - - // Elements are only equal if identical(expected, actual) - if (isElement(obj1) || isElement(obj2)) { return false; } - - var isDate1 = isDate(obj1), isDate2 = isDate(obj2); - if (isDate1 || isDate2) { - if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { - return false; - } - } - - if (obj1 instanceof RegExp && obj2 instanceof RegExp) { - if (obj1.toString() !== obj2.toString()) { return false; } - } - - var class1 = getClass(obj1); - var class2 = getClass(obj2); - var keys1 = keys(obj1); - var keys2 = keys(obj2); - - if (isArguments(obj1) || isArguments(obj2)) { - if (obj1.length !== obj2.length) { return false; } - } else { - if (type1 !== type2 || class1 !== class2 || - keys1.length !== keys2.length) { - return false; - } - } - - var key, i, l, - // following vars are used for the cyclic logic - value1, value2, - isObject1, isObject2, - index1, index2, - newPath1, newPath2; - - for (i = 0, l = keys1.length; i < l; i++) { - key = keys1[i]; - if (!o.hasOwnProperty.call(obj2, key)) { - return false; - } - - // Start of the cyclic logic - - value1 = obj1[key]; - value2 = obj2[key]; - - isObject1 = isObject(value1); - isObject2 = isObject(value2); - - // determine, if the objects were already visited - // (it's faster to check for isObject first, than to - // get -1 from getIndex for non objects) - index1 = isObject1 ? getIndex(objects1, value1) : -1; - index2 = isObject2 ? getIndex(objects2, value2) : -1; - - // determine the new pathes of the objects - // - for non cyclic objects the current path will be extended - // by current property name - // - for cyclic objects the stored path is taken - newPath1 = index1 !== -1 - ? paths1[index1] - : path1 + '[' + JSON.stringify(key) + ']'; - newPath2 = index2 !== -1 - ? paths2[index2] - : path2 + '[' + JSON.stringify(key) + ']'; - - // stop recursion if current objects are already compared - if (compared[newPath1 + newPath2]) { - return true; - } - - // remember the current objects and their pathes - if (index1 === -1 && isObject1) { - objects1.push(value1); - paths1.push(newPath1); - } - if (index2 === -1 && isObject2) { - objects2.push(value2); - paths2.push(newPath2); - } - - // remember that the current objects are already compared - if (isObject1 && isObject2) { - compared[newPath1 + newPath2] = true; - } - - // End of cyclic logic - - // neither value1 nor value2 is a cycle - // continue with next level - if (!deepEqual(value1, value2, newPath1, newPath2)) { - return false; - } - } - - return true; - - }(obj1, obj2, '$1', '$2')); - } - - var match; - - function arrayContains(array, subset) { - if (subset.length === 0) { return true; } - var i, l, j, k; - for (i = 0, l = array.length; i < l; ++i) { - if (match(array[i], subset[0])) { - for (j = 0, k = subset.length; j < k; ++j) { - if (!match(array[i + j], subset[j])) { return false; } - } - return true; - } - } - return false; - } - - /** - * @name samsam.match - * @param Object object - * @param Object matcher - * - * Compare arbitrary value ``object`` with matcher. - */ - match = function match(object, matcher) { - if (matcher && typeof matcher.test === "function") { - return matcher.test(object); - } - - if (typeof matcher === "function") { - return matcher(object) === true; - } - - if (typeof matcher === "string") { - matcher = matcher.toLowerCase(); - var notNull = typeof object === "string" || !!object; - return notNull && - (String(object)).toLowerCase().indexOf(matcher) >= 0; - } - - if (typeof matcher === "number") { - return matcher === object; - } - - if (typeof matcher === "boolean") { - return matcher === object; - } - - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } - - if (matcher === null) { - return object === null; - } - - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } - - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } - - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; - - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); - -},{}]},{},[18])(18) -}); diff --git a/build/node_modules/sinon/pkg/sinon-server.js b/build/node_modules/sinon/pkg/sinon-server.js deleted file mode 100644 index cdc972fa..00000000 --- a/build/node_modules/sinon/pkg/sinon-server.js +++ /dev/null @@ -1,2260 +0,0 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } - - return sinonModule; -}()); - -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; - - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } - - function checkWrappedMethod(wrappedMethod) { - var error; - - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; - } - } - - var error, wrappedMethod, i; - - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); - - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } - - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } - - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; - } - - method.displayName = property; - - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } - - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } - - return method; - }; - - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; - - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } - - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } - - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop; - var aLength = 0; - var bLength = 0; - - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } - - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; - - if (!(prop in b)) { - return false; - } - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } - - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } - - return aLength === bLength; - }; - - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }; - - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }; - - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } - - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } - - return keys; - }; - - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; - - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); - } - return descriptor; - }; - - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }; - - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; - - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }; - - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }; - - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }; - - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); - } - }; - - return sinon; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports) { - makeApi(exports); - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; - - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); - - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; - - for (i = 0; i < sources.length; i++) { - source = sources[i]; - - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; - } - } - - return target; - } - - sinon.extend = extend; - return sinon.extend; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} - -(function () { - - var push = [].push; - - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; - - sinon.ProgressEvent.prototype = new sinon.Event(); - - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; - - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; - - sinon.CustomEvent.prototype = new sinon.Event(); - - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - - function log() {} - - function logError(label, err) { - var msg = label + " threw exception: "; - - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } - - sinon.log(msg + "[" + err.name + "] " + err.message); - - if (err.stack) { - sinon.log(err.stack); - } - - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } - } - - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} - -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; - } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; - - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } - } - - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; - - this.readyStateChange(FakeXDomainRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } - - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, - - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - this.readyStateChange(FakeXDomainRequest.DONE); - }, - - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, - - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); - } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } - - delete sinon.FakeXDomainRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; - } - return sinon.FakeXDomainRequest; - }; - - sinon.FakeXDomainRequest = FakeXDomainRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; - } - - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; - } - - return false; - } - - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; - - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } - - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; - - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }; - - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; - - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); - } - }; - - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; - } - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener === "function") { - listener.call(this, event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - function getHeader(headers, header) { - header = header.toLowerCase(); - - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; - } - } - - return null; - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } - } - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); - } - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap - - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); - - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; - - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); - } - }; - - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { - - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ - } - } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); - } - } - - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; - } - - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); - } - - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); - } - - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; - } - - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); - } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie - } - } - - return null; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); - }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); - - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - - this.dispatchEvent(readyStateChangeEvent); - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend === "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; - - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); - - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = getHeader(this.responseHeaders, header); - - return this.responseHeaders[header] || null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); - - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; - - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } - - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } - - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, - - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, - - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, - - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } - - delete FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; - } - - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new FakeXMLHttpRequest(); - } - - return new sinonXhr.GlobalActiveXObject(objId); - }; - } - - return FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); - -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } - - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); - - function format() { - return formatter.ascii.apply(formatter, arguments); - } - - return format; - } - - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } - - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } - - return util ? format : valueFormatter; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; - - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty - } - - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; - } - - sinon.format = formatter; - return sinon.format; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } - - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } - - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); - -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; - - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; - } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - log: function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { - this.responses = []; - } - - if (arguments.length === 1) { - body = method; - url = method = null; - } - - if (arguments.length === 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); - } - - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); - - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState !== 4) { - this.log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); - diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.12.2.js b/build/node_modules/sinon/pkg/sinon-timers-1.12.2.js deleted file mode 100644 index e1ebf1fb..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.12.2.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Sinon.JS 1.12.2, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module) { - var sinon = require("./core"); - makeApi(sinon, require("lolex")); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.15.0.js b/build/node_modules/sinon/pkg/sinon-timers-1.15.0.js deleted file mode 100644 index c955c093..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.15.0.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Sinon.JS 1.15.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.15.4.js b/build/node_modules/sinon/pkg/sinon-timers-1.15.4.js deleted file mode 100644 index c0909f6b..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.15.4.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global lolex */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - function makeApi(sinon, lol) { - var llx = typeof lolex !== "undefined" ? lolex : lol; - - sinon.useFakeTimers = function () { - var now, methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - sinon.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var sinon = require("./core"); - makeApi(sinon, lolex); - module.exports = sinon; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); - } -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.16.0.js b/build/node_modules/sinon/pkg/sinon-timers-1.16.0.js deleted file mode 100644 index e6b8a367..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.16.0.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Sinon.JS 1.16.0, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.16.1.js b/build/node_modules/sinon/pkg/sinon-timers-1.16.1.js deleted file mode 100644 index 6de2a303..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.16.1.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.6.0.js b/build/node_modules/sinon/pkg/sinon-timers-1.6.0.js deleted file mode 100644 index 0594b6c7..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.6.0.js +++ /dev/null @@ -1,385 +0,0 @@ -/** - * Sinon.JS 1.6.0, 2015/09/28 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} diff --git a/build/node_modules/sinon/pkg/sinon-timers-1.7.3.js b/build/node_modules/sinon/pkg/sinon-timers-1.7.3.js deleted file mode 100644 index 31a68d00..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-1.7.3.js +++ /dev/null @@ -1,385 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2015/11/24 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.12.2.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.12.2.js deleted file mode 100644 index 0b02021b..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.12.2.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Sinon.JS 1.12.2, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setImmediate() {} -function clearImmediate() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setImmediate = sinon.timers.setImmediate; -clearImmediate = sinon.timers.clearImmediate; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.0.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.0.js deleted file mode 100644 index 3c30e396..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.0.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Sinon.JS 1.15.0, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; -} diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.4.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.4.js deleted file mode 100644 index 9f028395..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.15.4.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Sinon.JS 1.15.4, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; -} diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.0.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.0.js deleted file mode 100644 index 8523934f..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.0.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Sinon.JS 1.16.0, 2015/09/10 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.1.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.1.js deleted file mode 100644 index d2adbc1d..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.16.1.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.6.0.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.6.0.js deleted file mode 100644 index c98313c9..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.6.0.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Sinon.JS 1.6.0, 2015/09/28 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/ -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie-1.7.3.js b/build/node_modules/sinon/pkg/sinon-timers-ie-1.7.3.js deleted file mode 100644 index 80983b42..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie-1.7.3.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2015/11/24 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/ -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -function setTimeout() {} -function clearTimeout() {} -function setInterval() {} -function clearInterval() {} -function Date() {} - -// Reassign the original functions. Now their writable attribute -// should be true. Hackish, I know, but it works. -setTimeout = sinon.timers.setTimeout; -clearTimeout = sinon.timers.clearTimeout; -setInterval = sinon.timers.setInterval; -clearInterval = sinon.timers.clearInterval; -Date = sinon.timers.Date; diff --git a/build/node_modules/sinon/pkg/sinon-timers-ie.js b/build/node_modules/sinon/pkg/sinon-timers-ie.js deleted file mode 100644 index d2adbc1d..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers-ie.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Helps IE run the fake timers. By defining global functions, IE allows - * them to be overwritten at a later point. If these are not defined like - * this, overwriting them will result in anything from an exception to browser - * crash. - * - * If you don't require fake timers to work in IE, don't include this file. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -/*eslint-disable strict, no-inner-declarations, no-unused-vars*/ -if (typeof window !== "undefined") { - function setTimeout() {} - function clearTimeout() {} - function setImmediate() {} - function clearImmediate() {} - function setInterval() {} - function clearInterval() {} - function Date() {} - - // Reassign the original functions. Now their writable attribute - // should be true. Hackish, I know, but it works. - /*global sinon*/ - setTimeout = sinon.timers.setTimeout; - clearTimeout = sinon.timers.clearTimeout; - setImmediate = sinon.timers.setImmediate; - clearImmediate = sinon.timers.clearImmediate; - setInterval = sinon.timers.setInterval; - clearInterval = sinon.timers.clearInterval; - Date = sinon.timers.Date; // eslint-disable-line no-native-reassign -} -/*eslint-enable no-inner-declarations*/ diff --git a/build/node_modules/sinon/pkg/sinon-timers.js b/build/node_modules/sinon/pkg/sinon-timers.js deleted file mode 100644 index 6de2a303..00000000 --- a/build/node_modules/sinon/pkg/sinon-timers.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Sinon.JS 1.16.1, 2015/11/25 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; - - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; - - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); diff --git a/build/node_modules/sinon/pkg/sinon.js b/build/node_modules/sinon/pkg/sinon.js index d77b3175..5e32713f 100644 --- a/build/node_modules/sinon/pkg/sinon.js +++ b/build/node_modules/sinon/pkg/sinon.js @@ -1,6437 +1,17447 @@ -/** - * Sinon.JS 1.17.3, 2016/01/27 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function (root, factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define('sinon', [], function () { - return (root.sinon = factory()); - }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.sinon = factory(); - } -}(this, function () { - 'use strict'; - var samsam, formatio, lolex; - (function () { - function define(mod, deps, fn) { - if (mod == "samsam") { - samsam = deps(); - } else if (typeof deps === "function" && mod.length === 0) { - lolex = deps(); - } else if (typeof fn === "function") { - formatio = fn(samsam); - } - } - define.amd = {}; -((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || - (typeof module === "object" && - function (m) { module.exports = m(); }) || // Node - function (m) { this.samsam = m(); } // Browser globals -)(function () { - var o = Object.prototype; - var div = typeof document !== "undefined" && document.createElement("div"); - - function isNaN(value) { - // Unlike global isNaN, this avoids type coercion - // typeof check avoids IE host object issues, hat tip to - // lodash - var val = value; // JsLint thinks value !== value is "weird" - return typeof value === "number" && value !== val; - } - - function getClass(value) { - // Returns the internal [[Class]] by calling Object.prototype.toString - // with the provided value as this. Return value is a string, naming the - // internal class, e.g. "Array" - return o.toString.call(value).split(/[ \]]/)[1]; - } +/* Sinon.JS 13.0.1, 2022-02-01, @license BSD-3 */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.sinon = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0; - } + failAssertion(this, join(formatted, "\n")); + } + }, + }; - if (typeof matcher === "number") { - return matcher === object; - } + mirrorPropAsAssertion( + "called", + "expected %n to have been called at least once but was never called" + ); + mirrorPropAsAssertion( + "notCalled", + function (spy) { + return !spy.called; + }, + "expected %n to not have been called but was called %c%C" + ); + mirrorPropAsAssertion( + "calledOnce", + "expected %n to be called once but was called %c%C" + ); + mirrorPropAsAssertion( + "calledTwice", + "expected %n to be called twice but was called %c%C" + ); + mirrorPropAsAssertion( + "calledThrice", + "expected %n to be called thrice but was called %c%C" + ); + mirrorPropAsAssertion( + "calledOn", + "expected %n to be called with %1 as this but was called with %t" + ); + mirrorPropAsAssertion( + "alwaysCalledOn", + "expected %n to always be called with %1 as this but was called with %t" + ); + mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); + mirrorPropAsAssertion( + "alwaysCalledWithNew", + "expected %n to always be called with new" + ); + mirrorPropAsAssertion( + "calledWith", + "expected %n to be called with arguments %D" + ); + mirrorPropAsAssertion( + "calledWithMatch", + "expected %n to be called with match %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWith", + "expected %n to always be called with arguments %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWithMatch", + "expected %n to always be called with match %D" + ); + mirrorPropAsAssertion( + "calledWithExactly", + "expected %n to be called with exact arguments %D" + ); + mirrorPropAsAssertion( + "calledOnceWithExactly", + "expected %n to be called once and with exact arguments %D" + ); + mirrorPropAsAssertion( + "calledOnceWithMatch", + "expected %n to be called once and with match %D" + ); + mirrorPropAsAssertion( + "alwaysCalledWithExactly", + "expected %n to always be called with exact arguments %D" + ); + mirrorPropAsAssertion( + "neverCalledWith", + "expected %n to never be called with arguments %*%C" + ); + mirrorPropAsAssertion( + "neverCalledWithMatch", + "expected %n to never be called with match %*%C" + ); + mirrorPropAsAssertion("threw", "%n did not throw exception%C"); + mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); + + return assert; +} - if (typeof matcher === "boolean") { - return matcher === object; - } +module.exports = createAssertObject(); +module.exports.createAssertObject = createAssertObject; - if (typeof(matcher) === "undefined") { - return typeof(object) === "undefined"; - } +},{"./util/core/format":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":85}],3:[function(require,module,exports){ +"use strict"; - if (matcher === null) { - return object === null; - } +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var nextTick = require("./util/core/next-tick"); +var valueToString = require("@sinonjs/commons").valueToString; +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); - if (getClass(object) === "Array" && getClass(matcher) === "Array") { - return arrayContains(object, matcher); - } +var concat = arrayProto.concat; +var join = arrayProto.join; +var reverse = arrayProto.reverse; +var slice = arrayProto.slice; - if (matcher && typeof matcher === "object") { - if (matcher === object) { - return true; - } - var prop; - for (prop in matcher) { - var value = object[prop]; - if (typeof value === "undefined" && - typeof object.getAttribute === "function") { - value = object.getAttribute(prop); - } - if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { - if (value !== matcher[prop]) { - return false; - } - } else if (typeof value === "undefined" || !match(value, matcher[prop])) { - return false; - } - } - return true; - } +var useLeftMostCallback = -1; +var useRightMostCallback = -2; - throw new Error("Matcher was not a string, a number, a " + - "function, a boolean or an object"); - }; +function getCallback(behavior, args) { + var callArgAt = behavior.callArgAt; - return { - isArguments: isArguments, - isElement: isElement, - isDate: isDate, - isNegZero: isNegZero, - identical: identical, - deepEqual: deepEqualCyclic, - match: match, - keys: keys - }; -}); -((typeof define === "function" && define.amd && function (m) { - define("formatio", ["samsam"], m); -}) || (typeof module === "object" && function (m) { - module.exports = m(require("samsam")); -}) || function (m) { this.formatio = m(this.samsam); } -)(function (samsam) { - - var formatio = { - excludeConstructors: ["Object", /^.$/], - quoteStrings: true, - limitChildrenCount: 0 - }; + if (callArgAt >= 0) { + return args[callArgAt]; + } - var hasOwn = Object.prototype.hasOwnProperty; + var argumentList; - var specialObjects = []; - if (typeof global !== "undefined") { - specialObjects.push({ object: global, value: "[object global]" }); - } - if (typeof document !== "undefined") { - specialObjects.push({ - object: document, - value: "[object HTMLDocument]" - }); - } - if (typeof window !== "undefined") { - specialObjects.push({ object: window, value: "[object Window]" }); + if (callArgAt === useLeftMostCallback) { + argumentList = args; } - function functionName(func) { - if (!func) { return ""; } - if (func.displayName) { return func.displayName; } - if (func.name) { return func.name; } - var matches = func.toString().match(/function\s+([^\(]+)/m); - return (matches && matches[1]) || ""; + if (callArgAt === useRightMostCallback) { + argumentList = reverse(slice(args)); } - function constructorName(f, object) { - var name = functionName(object && object.constructor); - var excludes = f.excludeConstructors || - formatio.excludeConstructors || []; + var callArgProp = behavior.callArgProp; - var i, l; - for (i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] === "string" && excludes[i] === name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] === "function") { + return argumentList[i]; } - return name; - } - - function isCircular(object, objects) { - if (typeof object !== "object") { return false; } - var i, l; - for (i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { return true; } + if ( + callArgProp && + argumentList[i] && + typeof argumentList[i][callArgProp] === "function" + ) { + return argumentList[i][callArgProp]; } - return false; } - function ascii(f, object, processed, indent) { - if (typeof object === "string") { - var qs = f.quoteStrings; - var quote = typeof qs !== "boolean" || qs; - return processed || quote ? '"' + object + '"' : object; + return null; +} + +function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; + + if (behavior.callArgProp) { + msg = `${functionName( + behavior.stub + )} expected to yield to '${valueToString( + behavior.callArgProp + )}', but no object with such a property was passed.`; + } else { + msg = `${functionName( + behavior.stub + )} expected to yield, but no callback was passed.`; } - if (typeof object === "function" && !(object instanceof RegExp)) { - return ascii.func(object); + if (args.length > 0) { + msg += ` Received [${join(args, ", ")}]`; } - processed = processed || []; + return msg; + } - if (isCircular(object, processed)) { return "[Circular]"; } + return `argument at index ${behavior.callArgAt} is not a function: ${func}`; +} - if (Object.prototype.toString.call(object) === "[object Array]") { - return ascii.array.call(f, object, processed); - } +function ensureArgs(name, behavior, args) { + // map function name to internal property + // callsArg => callArgAt + var property = name.replace(/sArg/, "ArgAt"); + var index = behavior[property]; + + if (index >= args.length) { + throw new TypeError( + `${name} failed: ${index + 1} arguments required but only ${ + args.length + } present` + ); + } +} - if (!object) { return String((1/object) === -Infinity ? "-0" : object); } - if (samsam.isElement(object)) { return ascii.element(object); } +function callCallback(behavior, args) { + if (typeof behavior.callArgAt === "number") { + ensureArgs("callsArg", behavior, args); + var func = getCallback(behavior, args); - if (typeof object.toString === "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); + if (typeof func !== "function") { + throw new TypeError(getCallbackError(behavior, func, args)); } - var i, l; - for (i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].object) { - return specialObjects[i].value; - } + if (behavior.callbackAsync) { + nextTick(function () { + func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); + }); + } else { + return func.apply( + behavior.callbackContext, + behavior.callbackArguments + ); } - - return ascii.object.call(f, object, processed, indent); } - ascii.func = function (func) { - return "function " + functionName(func) + "() {}"; - }; + return undefined; +} - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - var i, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, array.length) : array.length; +var proto = { + create: function create(stub) { + var behavior = extend({}, proto); + delete behavior.create; + delete behavior.addBehavior; + delete behavior.createBehavior; + behavior.stub = stub; - for (i = 0; i < l; ++i) { - pieces.push(ascii(this, array[i], processed)); + if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) { + behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary; } - if(l < array.length) - pieces.push("[... " + (array.length - l) + " more elements]"); - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = samsam.keys(object).sort(); - var length = 3; - var prop, str, obj, i, k, l; - l = (this.limitChildrenCount > 0) ? - Math.min(this.limitChildrenCount, properties.length) : properties.length; - - for (i = 0; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii(this, obj, processed, indent + 2); - } + return behavior; + }, + + isPresent: function isPresent() { + return ( + typeof this.callArgAt === "number" || + this.exception || + this.exceptionCreator || + typeof this.returnArgAt === "number" || + this.returnThis || + typeof this.resolveArgAt === "number" || + this.resolveThis || + typeof this.throwArgAt === "number" || + this.fakeFn || + this.returnValueDefined + ); + }, - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); + /*eslint complexity: ["error", 20]*/ + invoke: function invoke(context, args) { + /* + * callCallback (conditionally) calls ensureArgs + * + * Note: callCallback intentionally happens before + * everything else and cannot be moved lower + */ + var returnValue = callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (this.exceptionCreator) { + this.exception = this.exceptionCreator(); + this.exceptionCreator = undefined; + throw this.exception; + } else if (typeof this.returnArgAt === "number") { + ensureArgs("returnsArg", this, args); + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } else if (typeof this.throwArgAt === "number") { + ensureArgs("throwsArg", this, args); + throw args[this.throwArgAt]; + } else if (this.fakeFn) { + return this.fakeFn.apply(context, args); + } else if (typeof this.resolveArgAt === "number") { + ensureArgs("resolvesArg", this, args); + return (this.promiseLibrary || Promise).resolve( + args[this.resolveArgAt] + ); + } else if (this.resolveThis) { + return (this.promiseLibrary || Promise).resolve(context); + } else if (this.resolve) { + return (this.promiseLibrary || Promise).resolve(this.returnValue); + } else if (this.reject) { + return (this.promiseLibrary || Promise).reject(this.returnValue); + } else if (this.callsThrough) { + var wrappedMethod = this.effectiveWrappedMethod(); + + return wrappedMethod.apply(context, args); + } else if (this.callsThroughWithNew) { + // Get the original method (assumed to be a constructor in this case) + var WrappedClass = this.effectiveWrappedMethod(); + // Turn the arguments object into a normal array + var argsArray = slice(args); + // Call the constructor + var F = WrappedClass.bind.apply( + WrappedClass, + concat([null], argsArray) + ); + return new F(); + } else if (typeof this.returnValue !== "undefined") { + return this.returnValue; + } else if (typeof this.callArgAt === "number") { + return returnValue; } - var cons = constructorName(this, object); - var prefix = cons ? "[" + cons + "] " : ""; - var is = ""; - for (i = 0, k = indent; i < k; ++i) { is += " "; } + return this.returnValue; + }, - if(l < properties.length) - pieces.push("[... " + (properties.length - l) + " more elements]"); - - if (length + indent > 80) { - return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + - is + "}"; + effectiveWrappedMethod: function effectiveWrappedMethod() { + for (var stubb = this.stub; stubb; stubb = stubb.parent) { + if (stubb.wrappedMethod) { + return stubb.wrappedMethod; + } } - return prefix + "{ " + pieces.join(", ") + " }"; + throw new Error("Unable to find wrapped method"); + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error( + 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' + + 'is not supported. Use "stub.withArgs(...).onCall(...)" ' + + "to define sequential behavior for calls with certain arguments." + ); + }, +}; + +function createBehavior(behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || proto.create(this); + this.defaultBehavior[behaviorMethod].apply( + this.defaultBehavior, + arguments + ); + return this; }; +} - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; +function addBehavior(stub, name, fn) { + proto[name] = function () { + fn.apply(this, concat([this], slice(arguments))); + return this.stub || this; + }; - for (i = 0, l = attrs.length; i < l; ++i) { - attr = attrs.item(i); - attrName = attr.nodeName.toLowerCase().replace("html:", ""); - val = attr.nodeValue; - if (attrName !== "contenteditable" || val !== "inherit") { - if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } - } - } + stub[name] = createBehavior(name); +} - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; +proto.addBehavior = addBehavior; +proto.createBehavior = createBehavior; - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } +var asyncBehaviors = exportAsyncBehaviors(proto); - var res = formatted + pairs.join(" ") + ">" + content + - ""; +module.exports = extend.nonEnum({}, proto, asyncBehaviors); - return res.replace(/ contentEditable="inherit"/, ""); - }; +},{"./util/core/export-async-behaviors":23,"./util/core/extend":24,"./util/core/next-tick":33,"@sinonjs/commons":46}],4:[function(require,module,exports){ +"use strict"; - function Formatio(options) { - for (var opt in options) { - this[opt] = options[opt]; - } +var walk = require("./util/core/walk"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var push = require("@sinonjs/commons").prototypes.array.push; + +function collectMethod(methods, object, prop, propOwner) { + if ( + typeof getPropertyDescriptor(propOwner, prop).value === "function" && + hasOwnProperty(object, prop) + ) { + push(methods, object[prop]); } +} - Formatio.prototype = { - functionName: functionName, - - configure: function (options) { - return new Formatio(options); - }, +// This function returns an array of all the own methods on the passed object +function collectOwnMethods(object) { + var methods = []; - constructorName: function (object) { - return constructorName(this, object); - }, + walk(object, collectMethod.bind(null, methods, object)); - ascii: function (object, processed, indent) { - return ascii(this, object, processed, indent); - } - }; + return methods; +} - return Formatio.prototype; -}); -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"); - } +},{"supports-color":109}],6:[function(require,module,exports){ +"use strict"; - while (i--) { - parsed = parseInt(strings[i], 10); +var arrayProto = require("@sinonjs/commons").prototypes.array; +var Sandbox = require("./sandbox"); - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } +var forEach = arrayProto.forEach; +var push = arrayProto.push; + +function prepareSandboxFromConfig(config) { + var sandbox = new Sandbox(); - ms += parsed * Math.pow(60, (l - i - 1)); + if (config.useFakeServer) { + if (typeof config.useFakeServer === "object") { + sandbox.serverPrototype = config.useFakeServer; } - return ms * 1000; + sandbox.useFakeServer(); } - /** - * Used to grok the `now` parameter to createClock. - */ - function getEpoch(epoch) { - if (!epoch) { return 0; } - if (typeof epoch.getTime === "function") { return epoch.getTime(); } - if (typeof epoch === "number") { return epoch; } - throw new TypeError("now should be milliseconds since UNIX epoch"); + if (config.useFakeTimers) { + if (typeof config.useFakeTimers === "object") { + sandbox.useFakeTimers(config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } } - function inRange(from, to, timer) { - return timer && timer.callAt >= from && timer.callAt <= to; + return sandbox; +} + +function exposeValue(sandbox, config, key, value) { + if (!value) { + return; } - function mirrorDateProperties(target, source) { - var prop; - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + push(sandbox.injectedKeys, key); + } else { + push(sandbox.args, value); + } +} - // set special now implementation - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } +function createSandbox(config) { + if (!config) { + return new Sandbox(); + } - // set special toSource implementation - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } + var configuredSandbox = prepareSandboxFromConfig(config); + configuredSandbox.args = configuredSandbox.args || []; + configuredSandbox.injectedKeys = []; + configuredSandbox.injectInto = config.injectInto; + var exposed = configuredSandbox.inject({}); + + if (config.properties) { + forEach(config.properties, function (prop) { + var value = + exposed[prop] || (prop === "sandbox" && configuredSandbox); + exposeValue(configuredSandbox, config, prop, value); + }); + } else { + exposeValue(configuredSandbox, config, "sandbox"); + } - // set special toString implementation - target.toString = function toString() { - return source.toString(); - }; + return configuredSandbox; +} - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; +module.exports = createSandbox; - return target; - } +},{"./sandbox":17,"@sinonjs/commons":46}],7:[function(require,module,exports){ +"use strict"; - function createDate() { - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } +var arrayProto = require("@sinonjs/commons").prototypes.array; +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var exportAsyncBehaviors = require("./util/core/export-async-behaviors"); +var extend = require("./util/core/extend"); - return mirrorDateProperties(ClockDate, NativeDate); +var slice = arrayProto.slice; + +var useLeftMostCallback = -1; +var useRightMostCallback = -2; + +function throwsException(fake, error, message) { + if (typeof error === "function") { + fake.exceptionCreator = error; + } else if (typeof error === "string") { + fake.exceptionCreator = function () { + var newException = new Error(message || ""); + newException.name = error; + return newException; + }; + } else if (!error) { + fake.exceptionCreator = function () { + return new Error("Error"); + }; + } else { + fake.exception = error; } +} - function addTimer(clock, timer) { - if (timer.func === undefined) { - throw new Error("Callback must be provided to timer calls"); - } +var defaultBehaviors = { + callsFake: function callsFake(fake, fn) { + fake.fakeFn = fn; + }, - if (!clock.timers) { - clock.timers = {}; + callsArg: function callsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - timer.id = uniqueTimerId++; - timer.createdAt = clock.now; - timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0)); - - clock.timers[timer.id] = timer; + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, - if (addTimerReturnsObject) { - return { - id: timer.id, - ref: NOOP, - unref: NOOP - }; + callsArgOn: function callsArgOn(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - return timer.id; - } - + fake.callArgAt = index; + fake.callbackArguments = []; + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, - function compareTimers(a, b) { - // Sort first by absolute timing - if (a.callAt < b.callAt) { - return -1; - } - if (a.callAt > b.callAt) { - return 1; + callsArgWith: function callsArgWith(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - // Sort next by immediate, immediate timers take precedence - if (a.immediate && !b.immediate) { - return -1; - } - if (!a.immediate && b.immediate) { - return 1; + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + callsArgOnWith: function callsArgWith(fake, index, context) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - // Sort next by creation time, earlier-created timers take precedence - if (a.createdAt < b.createdAt) { - return -1; + fake.callArgAt = index; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + }, + + usingPromise: function usingPromise(fake, promiseLibrary) { + fake.promiseLibrary = promiseLibrary; + }, + + yields: function (fake) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsRight: function (fake) { + fake.callArgAt = useRightMostCallback; + fake.callbackArguments = slice(arguments, 1); + fake.callbackContext = undefined; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsOn: function (fake, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = context; + fake.callArgProp = undefined; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsTo: function (fake, prop) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 2); + fake.callbackContext = undefined; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + yieldsToOn: function (fake, prop, context) { + fake.callArgAt = useLeftMostCallback; + fake.callbackArguments = slice(arguments, 3); + fake.callbackContext = context; + fake.callArgProp = prop; + fake.callbackAsync = false; + fake.fakeFn = undefined; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(fake, value) { + fake.returnValue = value; + fake.resolve = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + returnsArg: function returnsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - if (a.createdAt > b.createdAt) { - return 1; + + fake.returnArgAt = index; + }, + + throwsArg: function throwsArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - // Sort next by id, lower-id timers take precedence - if (a.id < b.id) { - return -1; + fake.throwArgAt = index; + }, + + returnsThis: function returnsThis(fake) { + fake.returnThis = true; + }, + + resolves: function resolves(fake, value) { + fake.returnValue = value; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + resolvesArg: function resolvesArg(fake, index) { + if (typeof index !== "number") { + throw new TypeError("argument index is not number"); } - if (a.id > b.id) { - return 1; + fake.resolveArgAt = index; + fake.returnValue = undefined; + fake.resolve = true; + fake.resolveThis = false; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + rejects: function rejects(fake, error, message) { + var reason; + if (typeof error === "string") { + reason = new Error(message || ""); + reason.name = error; + } else if (!error) { + reason = new Error("Error"); + } else { + reason = error; } + fake.returnValue = reason; + fake.resolve = false; + fake.resolveThis = false; + fake.reject = true; + fake.returnValueDefined = true; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + + return fake; + }, + + resolvesThis: function resolvesThis(fake) { + fake.returnValue = undefined; + fake.resolve = false; + fake.resolveThis = true; + fake.reject = false; + fake.returnValueDefined = false; + fake.exception = undefined; + fake.exceptionCreator = undefined; + fake.fakeFn = undefined; + }, + + callThrough: function callThrough(fake) { + fake.callsThrough = true; + }, + + callThroughWithNew: function callThroughWithNew(fake) { + fake.callsThroughWithNew = true; + }, + + get: function get(fake, getterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + get: getterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + }); - // As timer ids are unique, no fallback `0` is necessary - } + return fake; + }, + + set: function set(fake, setterFunction) { + var rootStub = fake.stub || fake; + + Object.defineProperty( + rootStub.rootObj, + rootStub.propName, + // eslint-disable-next-line accessor-pairs + { + set: setterFunction, + configurable: isPropertyConfigurable( + rootStub.rootObj, + rootStub.propName + ), + } + ); - function firstTimerInRange(clock, from, to) { - var timers = clock.timers, - timer = null, - id, - isInRange; + return fake; + }, - for (id in timers) { - if (timers.hasOwnProperty(id)) { - isInRange = inRange(from, to, timers[id]); + value: function value(fake, newVal) { + var rootStub = fake.stub || fake; - if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) { - timer = timers[id]; - } - } - } + Object.defineProperty(rootStub.rootObj, rootStub.propName, { + value: newVal, + enumerable: true, + configurable: + rootStub.shadowsPropOnPrototype || + isPropertyConfigurable(rootStub.rootObj, rootStub.propName), + }); - return timer; - } + return fake; + }, +}; - function firstTimer(clock) { - var timers = clock.timers, - timer = null, - id; +var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors); - for (id in timers) { - if (timers.hasOwnProperty(id)) { - if (!timer || compareTimers(timer, timers[id]) === 1) { - timer = timers[id]; - } - } - } +module.exports = extend({}, defaultBehaviors, asyncBehaviors); - return timer; - } +},{"./util/core/export-async-behaviors":23,"./util/core/extend":24,"./util/core/is-property-configurable":31,"@sinonjs/commons":46}],8:[function(require,module,exports){ +"use strict"; - function callTimer(clock, timer) { - var exception; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var nextTick = require("./util/core/next-tick"); - if (typeof timer.interval === "number") { - clock.timers[timer.id].callAt += timer.interval; - } else { - delete clock.timers[timer.id]; - } +var slice = arrayProto.slice; +var promiseLib = Promise; - try { - if (typeof timer.func === "function") { - timer.func.apply(null, timer.args); - } else { - eval(timer.func); - } - } catch (e) { - exception = e; - } +module.exports = fake; - if (!clock.timers[timer.id]) { - if (exception) { - throw exception; - } - return; - } +/** + * Returns a `fake` that records all calls, arguments and return values. + * + * When an `f` argument is supplied, this implementation will be used. + * + * @example + * // create an empty fake + * var f1 = sinon.fake(); + * + * f1(); + * + * f1.calledOnce() + * // true + * + * @example + * function greet(greeting) { + * console.log(`Hello ${greeting}`); + * } + * + * // create a fake with implementation + * var f2 = sinon.fake(greet); + * + * // Hello world + * f2("world"); + * + * f2.calledWith("world"); + * // true + * + * @param {Function|undefined} f + * @returns {Function} + * @namespace + */ +function fake(f) { + if (arguments.length > 0 && typeof f !== "function") { + throw new TypeError("Expected f argument to be a Function"); + } - if (exception) { - throw exception; - } + return wrapFunc(f); +} + +/** + * Creates a `fake` that returns the provided `value`, as well as recording all + * calls, arguments and return values. + * + * @example + * var f1 = sinon.fake.returns(42); + * + * f1(); + * // 42 + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.returns = function returns(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return value; } - function timerType(timer) { - if (timer.immediate) { - return "Immediate"; - } else if (typeof timer.interval !== "undefined") { - return "Interval"; - } else { - return "Timeout"; - } + return wrapFunc(f); +}; + +/** + * Creates a `fake` that throws an Error. + * If the `value` argument does not have Error in its prototype chain, it will + * be used for creating a new error. + * + * @example + * var f1 = sinon.fake.throws("hello"); + * + * f1(); + * // Uncaught Error: hello + * + * @example + * var f2 = sinon.fake.throws(new TypeError("Invalid argument")); + * + * f2(); + * // Uncaught TypeError: Invalid argument + * + * @memberof fake + * @param {*|Error} value + * @returns {Function} + */ +fake.throws = function throws(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + throw getError(value); } - function clearTimer(clock, timerId, ttype) { - if (!timerId) { - // null appears to be allowed in most browsers, and appears to be - // relied upon by some libraries, like Bootstrap carousel - return; - } + return wrapFunc(f); +}; - if (!clock.timers) { - clock.timers = []; - } +/** + * Creates a `fake` that returns a promise that resolves to the passed `value` + * argument. + * + * @example + * var f1 = sinon.fake.resolves("apple pie"); + * + * await f1(); + * // "apple pie" + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.resolves = function resolves(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.resolve(value); + } - // in Node, timerId is an object with .ref()/.unref(), and - // its .id field is the actual timer id. - if (typeof timerId === "object") { - timerId = timerId.id; - } + return wrapFunc(f); +}; - if (clock.timers.hasOwnProperty(timerId)) { - // check that the ID matches a timer of the correct type - var timer = clock.timers[timerId]; - if (timerType(timer) === ttype) { - delete clock.timers[timerId]; - } else { - throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()"); - } - } +/** + * Creates a `fake` that returns a promise that rejects to the passed `value` + * argument. When `value` does not have Error in its prototype chain, it will be + * wrapped in an Error. + * + * @example + * var f1 = sinon.fake.rejects(":("); + * + * try { + * await ft(); + * } catch (error) { + * console.log(error); + * // ":(" + * } + * + * @memberof fake + * @param {*} value + * @returns {Function} + */ +fake.rejects = function rejects(value) { + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + return promiseLib.reject(getError(value)); } - function uninstall(clock, target) { - var method, - i, - l; + return wrapFunc(f); +}; - for (i = 0, l = clock.methods.length; i < l; i++) { - method = clock.methods[i]; +/** + * Causes `fake` to use a custom Promise implementation, instead of the native + * Promise implementation. + * + * @example + * const bluebird = require("bluebird"); + * sinon.fake.usingPromise(bluebird); + * + * @memberof fake + * @param {*} promiseLibrary + * @returns {Function} + */ +fake.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + return fake; +}; - if (target[method].hadOwnProperty) { - target[method] = clock["_" + method]; - } else { - try { - delete target[method]; - } catch (ignore) {} - } +/** + * Returns a `fake` that calls the callback with the defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * // "apple*pie" + * + * @memberof fake + * @returns {Function} + */ +fake.yields = function yields() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); } - // Prevent multiple executions which will completely remove these props - clock.methods = []; + callback.apply(null, values); } - function hijackMethod(target, method, clock) { - var prop; - - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); - clock["_" + method] = target[method]; + return wrapFunc(f); +}; - if (method === "Date") { - var date = mirrorDateProperties(clock[method], target[method]); - target[method] = date; - } else { - target[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - target[method][prop] = clock[method][prop]; - } - } +/** + * Returns a `fake` that calls the callback **asynchronously** with the + * defined arguments. + * + * @example + * function callback() { + * console.log(arguments.join("*")); + * } + * + * const f1 = sinon.fake.yields("apple", "pie"); + * + * f1(callback); + * + * setTimeout(() => { + * // "apple*pie" + * }); + * + * @memberof fake + * @returns {Function} + */ +fake.yieldsAsync = function yieldsAsync() { + var values = slice(arguments); + + // eslint-disable-next-line jsdoc/require-jsdoc + function f() { + var callback = arguments[arguments.length - 1]; + if (typeof callback !== "function") { + throw new TypeError("Expected last argument to be a function"); } - - target[method].clock = clock; + nextTick(function () { + callback.apply(null, values); + }); } - var timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: global.setImmediate, - clearImmediate: global.clearImmediate, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; - - var keys = Object.keys || function (obj) { - var ks = [], - key; + return wrapFunc(f); +}; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ks.push(key); - } +var uuid = 0; +/** + * Creates a proxy (sinon concept) from the passed function. + * + * @private + * @param {Function} f + * @returns {Function} + */ +function wrapFunc(f) { + var proxy; + var fakeInstance = function () { + var firstArg, lastArg; + + if (arguments.length > 0) { + firstArg = arguments[0]; + lastArg = arguments[arguments.length - 1]; } - return ks; - }; + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; - exports.timers = timers; + proxy.firstArg = firstArg; + proxy.lastArg = lastArg; + proxy.callback = callback; - function createClock(now) { - var clock = { - now: getEpoch(now), - timeouts: {}, - Date: createDate() - }; + return f && f.apply(this, arguments); + }; + proxy = createProxy(fakeInstance, f || fakeInstance); - clock.Date.clock = clock; + proxy.displayName = "fake"; + proxy.id = `fake#${uuid++}`; - clock.setTimeout = function setTimeout(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout - }); - }; + return proxy; +} - clock.clearTimeout = function clearTimeout(timerId) { - return clearTimer(clock, timerId, "Timeout"); - }; +/** + * Returns an Error instance from the passed value, if the value is not + * already an Error instance. + * + * @private + * @param {*} value [description] + * @returns {Error} [description] + */ +function getError(value) { + return value instanceof Error ? value : new Error(value); +} - clock.setInterval = function setInterval(func, timeout) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 2), - delay: timeout, - interval: timeout - }); - }; +},{"./proxy":15,"./util/core/next-tick":33,"@sinonjs/commons":46}],9:[function(require,module,exports){ +"use strict"; - clock.clearInterval = function clearInterval(timerId) { - return clearTimer(clock, timerId, "Interval"); - }; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyInvoke = require("./proxy-invoke"); +var proxyCallToString = require("./proxy-call").toString; +var timesInWords = require("./util/core/times-in-words"); +var extend = require("./util/core/extend"); +var match = require("@sinonjs/samsam").createMatcher; +var stub = require("./stub"); +var assert = require("./assert"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var format = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var every = arrayProto.every; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function callCountInWords(callCount) { + if (callCount === 0) { + return "never called"; + } - clock.setImmediate = function setImmediate(func) { - return addTimer(clock, { - func: func, - args: Array.prototype.slice.call(arguments, 1), - immediate: true - }); - }; + return `called ${timesInWords(callCount)}`; +} - clock.clearImmediate = function clearImmediate(timerId) { - return clearTimer(clock, timerId, "Immediate"); - }; +function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; - clock.tick = function tick(ms) { - ms = typeof ms === "number" ? ms : parseTime(ms); - var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; - var timer = firstTimerInRange(clock, tickFrom, tickTo); - var oldNow; + if (typeof min === "number" && typeof max === "number") { + var str = timesInWords(min); - clock.duringTick = true; + if (min !== max) { + str = `at least ${str} and at most ${timesInWords(max)}`; + } - var firstException; - while (timer && tickFrom <= tickTo) { - if (clock.timers[timer.id]) { - tickFrom = clock.now = timer.callAt; - try { - oldNow = clock.now; - callTimer(clock, timer); - // compensate for any setSystemTime() call during timer callback - if (oldNow !== clock.now) { - tickFrom += clock.now - oldNow; - tickTo += clock.now - oldNow; - previous += clock.now - oldNow; - } - } catch (e) { - firstException = firstException || e; - } - } + return str; + } - timer = firstTimerInRange(clock, previous, tickTo); - previous = tickFrom; - } + if (typeof min === "number") { + return `at least ${timesInWords(min)}`; + } - clock.duringTick = false; - clock.now = tickTo; + return `at most ${timesInWords(max)}`; +} - if (firstException) { - throw firstException; - } +function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls === "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; +} - return clock.now; - }; +function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls !== "number") { + return false; + } - clock.next = function next() { - var timer = firstTimer(clock); - if (!timer) { - return clock.now; - } + return expectation.callCount === expectation.maxCalls; +} - clock.duringTick = true; - try { - clock.now = timer.callAt; - callTimer(clock, timer); - return clock.now; - } finally { - clock.duringTick = false; - } - }; +function verifyMatcher(possibleMatcher, arg) { + var isMatcher = match.isMatcher(possibleMatcher); - clock.reset = function reset() { - clock.timers = {}; - }; + return (isMatcher && possibleMatcher.test(arg)) || true; +} - clock.setSystemTime = function setSystemTime(now) { - // determine time difference - var newNow = getEpoch(now); - var difference = newNow - clock.now; +var mockExpectation = { + minCalls: 1, + maxCalls: 1, - // update 'system clock' - clock.now = newNow; + create: function create(methodName) { + var expectation = extend.nonEnum(stub(), mockExpectation); + delete expectation.create; + expectation.method = methodName; - // update timers and intervals to keep them stable - for (var id in clock.timers) { - if (clock.timers.hasOwnProperty(id)) { - var timer = clock.timers[id]; - timer.createdAt += difference; - timer.callAt += difference; - } - } - }; + return expectation; + }, - return clock; - } - exports.createClock = createClock; + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); - exports.install = function install(target, now, toFake) { - var i, - l; + return proxyInvoke.apply(this, arguments); + }, - if (typeof target === "number") { - toFake = now; - now = target; - target = null; + atLeast: function atLeast(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); } - if (!target) { - target = global; + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; } - var clock = createClock(now); - - clock.uninstall = function () { - uninstall(clock, target); - }; + this.minCalls = num; - clock.methods = toFake || []; + return this; + }, - if (clock.methods.length === 0) { - clock.methods = keys(timers); + atMost: function atMost(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not number`); } - for (i = 0, l = clock.methods.length; i < l; i++) { - hijackMethod(target, clock.methods[i], clock); + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; } - return clock; - }; + this.maxCalls = num; -}(global || this)); + return this; + }, -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) -}); - })(); - var define; -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -var sinon = (function () { -"use strict"; - // eslint-disable-line no-unused-vars - - var sinonModule; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - sinonModule = module.exports = require("./sinon/util/core"); - require("./sinon/extend"); - require("./sinon/walk"); - require("./sinon/typeOf"); - require("./sinon/times_in_words"); - require("./sinon/spy"); - require("./sinon/call"); - require("./sinon/behavior"); - require("./sinon/stub"); - require("./sinon/mock"); - require("./sinon/collection"); - require("./sinon/assert"); - require("./sinon/sandbox"); - require("./sinon/test"); - require("./sinon/test_case"); - require("./sinon/match"); - require("./sinon/format"); - require("./sinon/log_error"); - } - - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - sinonModule = module.exports; - } else { - sinonModule = {}; - } + never: function never() { + return this.exactly(0); + }, - return sinonModule; -}()); + once: function once() { + return this.exactly(1); + }, -/** - * @depend ../../sinon.js - */ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var div = typeof document !== "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; + twice: function twice() { + return this.exactly(2); + }, - function isDOMNode(obj) { - var success = false; + thrice: function thrice() { + return this.exactly(3); + }, - try { - obj.appendChild(div); - success = div.parentNode === obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } + exactly: function exactly(num) { + if (typeof num !== "number") { + throw new TypeError(`'${valueToString(num)}' is not a number`); } - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } + this.atLeast(num); + return this.atMost(num); + }, - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } + met: function met() { + return !this.failed && receivedMinCalls(this); + }, - function isReallyNaN(val) { - return typeof val === "number" && isNaN(val); - } + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + var expectedArguments = this.expectedArguments; - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } + if (receivedMaxCalls(this)) { + this.failed = true; + mockExpectation.fail( + `${this.method} already called ${timesInWords(this.maxCalls)}` + ); } - } - function isRestorable(obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } + if ("expectedThis" in this && this.expectedThis !== thisValue) { + mockExpectation.fail( + `${this.method} called with ${valueToString( + thisValue + )} as thisValue, expected ${valueToString(this.expectedThis)}` + ); + } - // Cheap way to detect if we have ES5 support. - var hasES5Support = "keys" in Object; + if (!("expectedArguments" in this)) { + return; + } - function makeApi(sinon) { - sinon.wrapMethod = function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } + if (!args) { + mockExpectation.fail( + `${this.method} received no arguments, expected ${format( + expectedArguments + )}` + ); + } - if (typeof method !== "function" && typeof method !== "object") { - throw new TypeError("Method wrapper should be a function or a property descriptor"); - } + if (args.length < expectedArguments.length) { + mockExpectation.fail( + `${this.method} received too few arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } - function checkWrappedMethod(wrappedMethod) { - var error; + if ( + this.expectsExactArgCount && + args.length !== expectedArguments.length + ) { + mockExpectation.fail( + `${this.method} received too many arguments (${format( + args + )}), expected ${format(expectedArguments)}` + ); + } - if (!isFunction(wrappedMethod)) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } else if (wrappedMethod.calledBefore) { - var verb = wrappedMethod.returns ? "stubbed" : "spied on"; - error = new TypeError("Attempted to wrap " + property + " which is already " + verb); + forEach( + expectedArguments, + function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, args[i])) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, didn't match ${String(expectedArguments)}` + ); } - if (error) { - if (wrappedMethod && wrappedMethod.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethod.stackTrace; - } - throw error; + if (!deepEqual(args[i], expectedArgument)) { + mockExpectation.fail( + `${this.method} received wrong arguments ${format( + args + )}, expected ${format(expectedArguments)}` + ); } - } + }, + this + ); + }, - var error, wrappedMethod, i; + allowsCall: function allowsCall(thisValue, args) { + var expectedArguments = this.expectedArguments; - // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem - // when using hasOwn.call on objects from other frames. - var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); + if (this.met() && receivedMaxCalls(this)) { + return false; + } - if (hasES5Support) { - var methodDesc = (typeof method === "function") ? {value: method} : method; - var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property); - - if (!wrappedMethodDesc) { - error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { - error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - if (error) { - if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { - error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; - } - throw error; - } + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } - var types = sinon.objectKeys(methodDesc); - for (i = 0; i < types.length; i++) { - wrappedMethod = wrappedMethodDesc[types[i]]; - checkWrappedMethod(wrappedMethod); - } + if (!("expectedArguments" in this)) { + return true; + } - mirrorProperties(methodDesc, wrappedMethodDesc); - for (i = 0; i < types.length; i++) { - mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); - } - Object.defineProperty(object, property, methodDesc); - } else { - wrappedMethod = object[property]; - checkWrappedMethod(wrappedMethod); - object[property] = method; - method.displayName = property; + // eslint-disable-next-line no-underscore-dangle + var _args = args || []; + + if (_args.length < expectedArguments.length) { + return false; + } + + if ( + this.expectsExactArgCount && + _args.length !== expectedArguments.length + ) { + return false; + } + + return every(expectedArguments, function (expectedArgument, i) { + if (!verifyMatcher(expectedArgument, _args[i])) { + return false; } - method.displayName = property; + if (!deepEqual(_args[i], expectedArgument)) { + return false; + } - // Set up a stack trace which can be used later to find what line of - // code the original method was created on. - method.stackTrace = (new Error("Stack Trace for original")).stack; + return true; + }); + }, - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - // In some cases `delete` may throw an error - try { - delete object[property]; - } catch (e) {} // eslint-disable-line no-empty - // For native code functions `delete` fails without throwing an error - // on Chrome < 43, PhantomJS, etc. - } else if (hasES5Support) { - Object.defineProperty(object, property, wrappedMethodDesc); - } + withArgs: function withArgs() { + this.expectedArguments = slice(arguments); + return this; + }, - // Use strict equality comparison to check failures then force a reset - // via direct assignment. - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, - method.restore.sinon = true; + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, - if (!hasES5Support) { - mirrorProperties(method, wrappedMethod); - } + toString: function () { + var args = slice(this.expectedArguments || []); - return method; - }; + if (!this.expectsExactArgCount) { + push(args, "[...]"); + } - sinon.create = function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }; + var callStr = proxyCallToString.call({ + proxy: this.method || "anonymous mock expectation", + args: args, + }); - sinon.deepEqual = function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } + var message = `${callStr.replace( + ", [...", + "[, ..." + )} ${expectedCallCountInWords(this)}`; - if (typeof a !== "object" || typeof b !== "object") { - return isReallyNaN(a) && isReallyNaN(b) || a === b; - } + if (this.met()) { + return `Expectation met: ${message}`; + } - if (isElement(a) || isElement(b)) { - return a === b; - } + return `Expected ${message} (${callCountInWords(this.callCount)})`; + }, - if (a === b) { - return true; - } + verify: function verify() { + if (!this.met()) { + mockExpectation.fail(String(this)); + } else { + mockExpectation.pass(String(this)); + } - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } + return true; + }, - if (a instanceof RegExp && b instanceof RegExp) { - return (a.source === b.source) && (a.global === b.global) && - (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); - } + pass: function pass(message) { + assert.pass(message); + }, - var aString = Object.prototype.toString.call(a); - if (aString !== Object.prototype.toString.call(b)) { - return false; - } + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; - if (aString === "[object Date]") { - return a.valueOf() === b.valueOf(); - } + throw exception; + }, +}; - var prop; - var aLength = 0; - var bLength = 0; +module.exports = mockExpectation; - if (aString === "[object Array]" && a.length !== b.length) { - return false; - } +},{"./assert":2,"./proxy-call":13,"./proxy-invoke":14,"./stub":20,"./util/core/extend":24,"./util/core/format":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":85}],10:[function(require,module,exports){ +"use strict"; - for (prop in a) { - if (a.hasOwnProperty(prop)) { - aLength += 1; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var mockExpectation = require("./mock-expectation"); +var proxyCallToString = require("./proxy-call").toString; +var extend = require("./util/core/extend"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var wrapMethod = require("./util/core/wrap-method"); +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var every = arrayProto.every; +var join = arrayProto.join; +var push = arrayProto.push; +var slice = arrayProto.slice; +var unshift = arrayProto.unshift; + +function mock(object) { + if (!object || typeof object === "string") { + return mockExpectation.create(object ? object : "Anonymous mock"); + } - if (!(prop in b)) { - return false; - } + return mock.create(object); +} - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - } +function each(collection, callback) { + var col = collection || []; - for (prop in b) { - if (b.hasOwnProperty(prop)) { - bLength += 1; - } - } + forEach(col, callback); +} - return aLength === bLength; - }; +function arrayEquals(arr1, arr2, compareLength) { + if (compareLength && arr1.length !== arr2.length) { + return false; + } - sinon.functionName = function functionName(func) { - var name = func.displayName || func.name; + return every(arr1, function (element, i) { + return deepEqual(arr2[i], element); + }); +} - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } +extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } - return name; - }; + var mockObject = extend.nonEnum({}, mock, { object: object }); + delete mockObject.create; - sinon.functionToString = function toString() { - if (this.getCall && this.callCount) { - var thisValue, - prop; - var i = this.callCount; + return mockObject; + }, - while (i--) { - thisValue = this.getCall(i).thisValue; + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + this.failures = []; + } - return this.displayName || "sinon fake"; - }; + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; - sinon.objectKeys = function objectKeys(obj) { - if (obj !== Object(obj)) { - throw new TypeError("sinon.objectKeys called on a non-object"); - } + wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); - var keys = []; - var key; - for (key in obj) { - if (hasOwn.call(obj, key)) { - keys.push(key); - } - } + push(this.proxies, method); + } - return keys; - }; + var expectation = mockExpectation.create(method); + expectation.wrappedMethod = this.object[method].wrappedMethod; + push(this.expectations[method], expectation); + usePromiseLibrary(this.promiseLibrary, expectation); + + return expectation; + }, - sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { - var proto = object; - var descriptor; + restore: function restore() { + var object = this.object; - while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { - proto = Object.getPrototypeOf(proto); + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore === "function") { + object[proxy].restore(); } - return descriptor; - }; + }); + }, - sinon.getConfig = function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; + verify: function verify() { + var expectations = this.expectations || {}; + var messages = this.failures ? slice(this.failures) : []; + var met = []; - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push(messages, String(expectation)); + } else { + push(met, String(expectation)); } - } + }); + }); - return config; - }; + this.restore(); - sinon.defaultConfig = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; + if (messages.length > 0) { + mockExpectation.fail(join(concat(messages, met), "\n")); + } else if (met.length > 0) { + mockExpectation.pass(join(concat(messages, met), "\n")); + } - sinon.timesInWords = function timesInWords(count) { - return count === 1 && "once" || - count === 2 && "twice" || - count === 3 && "thrice" || - (count || 0) + " times"; - }; + return true; + }, - sinon.calledInOrder = function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } + usingPromise: function usingPromise(promiseLibrary) { + this.promiseLibrary = promiseLibrary; + + return this; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */ + /* eslint consistent-return: "off" */ + var expectations = + this.expectations && this.expectations[method] + ? this.expectations[method] + : []; + var currentArgs = args || []; + var available; + + var expectationsWithMatchingArgs = filter( + expectations, + function (expectation) { + var expectedArgs = expectation.expectedArguments || []; + + return arrayEquals( + expectedArgs, + currentArgs, + expectation.expectsExactArgCount + ); } + ); - return true; - }; + var expectationsToApply = filter( + expectationsWithMatchingArgs, + function (expectation) { + return ( + !expectation.met() && + expectation.allowsCall(thisValue, args) + ); + } + ); - sinon.orderByFirstCall = function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; + if (expectationsToApply.length > 0) { + return expectationsToApply[0].apply(thisValue, args); + } - return aId < bId ? -1 : 1; - }); - }; + var messages = []; + var exhausted = 0; - sinon.createStubInstance = function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); + forEach(expectationsWithMatchingArgs, function (expectation) { + if (expectation.allowsCall(thisValue, args)) { + available = available || expectation; + } else { + exhausted += 1; } - return sinon.stub(sinon.create(constructor.prototype)); - }; + }); - sinon.restore = function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } else if (isRestorable(object)) { - object.restore(); + if (available && exhausted === 0) { + return available.apply(thisValue, args); + } + + forEach(expectations, function (expectation) { + push(messages, ` ${String(expectation)}`); + }); + + unshift( + messages, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + })}` + ); + + var err = new Error(); + if (!err.stack) { + // PhantomJS does not serialize the stack trace until the error has been thrown + try { + throw err; + } catch (e) { + /* empty */ } - }; + } + push( + this.failures, + `Unexpected call: ${proxyCallToString.call({ + proxy: method, + args: args, + stack: err.stack, + })}` + ); - return sinon; - } + mockExpectation.fail(join(messages, "\n")); + }, +}); - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; +module.exports = mock; - function loadDependencies(require, exports) { - makeApi(exports); - } +},{"./mock-expectation":9,"./proxy-call":13,"./util/core/extend":24,"./util/core/use-promise-library":35,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":85}],11:[function(require,module,exports){ +"use strict"; - if (isAMD) { - define(loadDependencies); - return; - } +var fake = require("./fake"); +var isRestorable = require("./util/core/is-restorable"); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } +var STATUS_PENDING = "pending"; +var STATUS_RESOLVED = "resolved"; +var STATUS_REJECTED = "rejected"; - if (sinonGlobal) { - makeApi(sinonGlobal); +/** + * Returns a fake for a given function or undefined. If no function is given, a + * new fake is returned. If the given function is already a fake, it is + * returned as is. Otherwise the given function is wrapped in a new fake. + * + * @param {Function} [executor] The optional executor function. + * @returns {Function} + */ +function getFakeExecutor(executor) { + if (isRestorable(executor)) { + return executor; + } + if (executor) { + return fake(executor); } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return fake(); +} /** - * @depend util/core.js + * Returns a new promise that exposes it's internal `status`, `resolvedValue` + * and `rejectedValue` and can be resolved or rejected from the outside by + * calling `resolve(value)` or `reject(reason)`. + * + * @param {Function} [executor] The optional executor function. + * @returns {Promise} */ -(function (sinonGlobal) { - - function makeApi(sinon) { +function promise(executor) { + var fakeExecutor = getFakeExecutor(executor); + var sinonPromise = new Promise(fakeExecutor); + + sinonPromise.status = STATUS_PENDING; + sinonPromise + .then(function (value) { + sinonPromise.status = STATUS_RESOLVED; + sinonPromise.resolvedValue = value; + }) + .catch(function (reason) { + sinonPromise.status = STATUS_REJECTED; + sinonPromise.rejectedValue = reason; + }); - // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - var hasDontEnumBug = (function () { - var obj = { - constructor: function () { - return "0"; - }, - toString: function () { - return "1"; - }, - valueOf: function () { - return "2"; - }, - toLocaleString: function () { - return "3"; - }, - prototype: function () { - return "4"; - }, - isPrototypeOf: function () { - return "5"; - }, - propertyIsEnumerable: function () { - return "6"; - }, - hasOwnProperty: function () { - return "7"; - }, - length: function () { - return "8"; - }, - unique: function () { - return "9"; - } - }; + /** + * Resolves or rejects the promise with the given status and value. + * + * @param {string} status + * @param {*} value + * @param {Function} callback + */ + function finalize(status, value, callback) { + if (sinonPromise.status !== STATUS_PENDING) { + throw new Error(`Promise already ${sinonPromise.status}`); + } - var result = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - result.push(obj[prop]()); - } - } - return result.join("") !== "0123456789"; - })(); + sinonPromise.status = status; + callback(value); + } - /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will - * override properties in previous sources. - * - * target - The Object to extend - * sources - Objects to copy properties from. - * - * Returns the extended target - */ - function extend(target /*, sources */) { - var sources = Array.prototype.slice.call(arguments, 1); - var source, i, prop; + sinonPromise.resolve = function (value) { + finalize(STATUS_RESOLVED, value, fakeExecutor.firstCall.args[0]); + // Return the promise so that callers can await it: + return sinonPromise; + }; + sinonPromise.reject = function (reason) { + finalize(STATUS_REJECTED, reason, fakeExecutor.firstCall.args[1]); + // Return a new promise that resolves when the sinon promise was + // rejected, so that callers can await it: + return new Promise(function (resolve) { + sinonPromise.catch(() => resolve()); + }); + }; - for (i = 0; i < sources.length; i++) { - source = sources[i]; + return sinonPromise; +} - for (prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } +module.exports = promise; + +},{"./fake":8,"./util/core/is-restorable":32}],12:[function(require,module,exports){ +"use strict"; + +var push = require("@sinonjs/commons").prototypes.array.push; + +exports.incrementCallCount = function incrementCallCount(proxy) { + proxy.called = true; + proxy.callCount += 1; + proxy.notCalled = false; + proxy.calledOnce = proxy.callCount === 1; + proxy.calledTwice = proxy.callCount === 2; + proxy.calledThrice = proxy.callCount === 3; +}; + +exports.createCallProperties = function createCallProperties(proxy) { + proxy.firstCall = proxy.getCall(0); + proxy.secondCall = proxy.getCall(1); + proxy.thirdCall = proxy.getCall(2); + proxy.lastCall = proxy.getCall(proxy.callCount - 1); +}; + +exports.delegateToCalls = function delegateToCalls( + proxy, + method, + matchAny, + actual, + returnsValues, + notCalled, + totalCallCount +) { + proxy[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + if (totalCallCount !== undefined && this.callCount !== totalCallCount) { + return false; + } - // Make sure we copy (own) toString method even when in JScript with DontEnum bug - // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug - if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { - target.toString = source.toString; + var currentCall; + var matches = 0; + var returnValues = []; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + var returnValue = currentCall[actual || method].apply( + currentCall, + arguments + ); + push(returnValues, returnValue); + if (returnValue) { + matches += 1; + + if (matchAny) { + return true; } } + } - return target; + if (returnsValues) { + return returnValues; } + return matches === this.callCount; + }; +}; - sinon.extend = extend; - return sinon.extend; - } +},{"@sinonjs/commons":46}],13:[function(require,module,exports){ +"use strict"; - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); +var arrayProto = require("@sinonjs/commons").prototypes.array; +var match = require("@sinonjs/samsam").createMatcher; +var deepEqual = require("@sinonjs/samsam").deepEqual; +var functionName = require("@sinonjs/commons").functionName; +var sinonFormat = require("./util/core/format"); +var valueToString = require("@sinonjs/commons").valueToString; + +var concat = arrayProto.concat; +var filter = arrayProto.filter; +var join = arrayProto.join; +var map = arrayProto.map; +var reduce = arrayProto.reduce; +var slice = arrayProto.slice; + +function throwYieldError(proxy, text, args) { + var msg = functionName(proxy) + text; + if (args.length) { + msg += ` Received [${join(slice(args), ", ")}]`; } + throw new Error(msg); +} - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; +var callProto = { + calledOn: function calledOn(thisValue) { + if (match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, - if (isAMD) { - define(loadDependencies); - return; - } + calledWith: function calledWith() { + var self = this; + var calledWithArgs = slice(arguments); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + if (calledWithArgs.length > self.args.length) { + return false; + } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return reduce( + calledWithArgs, + function (prev, arg, i) { + return prev && deepEqual(self.args[i], arg); + }, + true + ); + }, -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { + calledWithMatch: function calledWithMatch() { + var self = this; + var calledWithMatchArgs = slice(arguments); - function timesInWords(count) { - switch (count) { - case 1: - return "once"; - case 2: - return "twice"; - case 3: - return "thrice"; - default: - return (count || 0) + " times"; - } + if (calledWithMatchArgs.length > self.args.length) { + return false; } - sinon.timesInWords = timesInWords; - return sinon.timesInWords; - } + return reduce( + calledWithMatchArgs, + function (prev, expectation, i) { + var actual = self.args[i]; - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } + return prev && match(expectation).test(actual); + }, + true + ); + }, - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + calledWithExactly: function calledWithExactly() { + return ( + arguments.length === this.args.length && + this.calledWith.apply(this, arguments) + ); + }, - if (isAMD) { - define(loadDependencies); - return; - } + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + returned: function returned(value) { + return deepEqual(this.returnValue, value); + }, -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function typeOf(value) { - if (value === null) { - return "null"; - } else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return Boolean(this.exception); } - sinon.typeOf = typeOf; - return sinon.typeOf; - } + return this.exception === error || this.exception.name === error; + }, - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - module.exports = makeApi(core); - } + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + calledBefore: function (other) { + return this.callId < other.callId; + }, - if (isAMD) { - define(loadDependencies); - return; - } + calledAfter: function (other) { + return this.callId > other.callId; + }, - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + calledImmediatelyBefore: function (other) { + return this.callId === other.callId - 1; + }, - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + calledImmediatelyAfter: function (other) { + return this.callId === other.callId + 1; + }, -/** - * @depend util/core.js - * @depend typeOf.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } + callArg: function (pos) { + this.ensureArgIsAFunction(pos); + return this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + return this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + return this.callArgOnWith.apply( + this, + concat([pos, null], slice(arguments, 1)) + ); + }, + + callArgOnWith: function (pos, thisValue) { + this.ensureArgIsAFunction(pos); + var args = slice(arguments, 2); + return this.args[pos].apply(thisValue, args); + }, + + throwArg: function (pos) { + if (pos > this.args.length) { + throw new TypeError( + `Not enough arguments: ${pos} required but only ${this.args.length} present` + ); } - var matcher = { - toString: function () { - return this.message; - } - }; + throw this.args[pos]; + }, + + yield: function () { + return this.yieldOn.apply(this, concat([null], slice(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = slice(this.args); + var yieldFn = filter(args, function (arg) { + return typeof arg === "function"; + })[0]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + " cannot yield since no callback was passed.", + args + ); + } - function isMatcher(object) { - return matcher.isPrototypeOf(object); + return yieldFn.apply(thisValue, slice(arguments, 1)); + }, + + yieldTo: function (prop) { + return this.yieldToOn.apply( + this, + concat([prop, null], slice(arguments, 1)) + ); + }, + + yieldToOn: function (prop, thisValue) { + var args = slice(this.args); + var yieldArg = filter(args, function (arg) { + return arg && typeof arg[prop] === "function"; + })[0]; + var yieldFn = yieldArg && yieldArg[prop]; + + if (!yieldFn) { + throwYieldError( + this.proxy, + ` cannot yield to '${valueToString( + prop + )}' since no callback was passed.`, + args + ); } - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; + return yieldFn.apply(thisValue, slice(arguments, 2)); + }, + + toString: function () { + var callStr = this.proxy ? `${String(this.proxy)}(` : ""; + var formattedArgs; + + if (!this.args) { + return ":("; } - function match(expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - // we need type coercion here - return expectation == actual; // eslint-disable-line eqeqeq - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; + formattedArgs = map(this.args, function (arg) { + return sinonFormat(arg); + }); + + callStr = `${callStr + join(formattedArgs, ", ")})`; + + if (typeof this.returnValue !== "undefined") { + callStr += ` => ${sinonFormat(this.returnValue)}`; } - matcher.or = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; + if (this.exception) { + callStr += ` !${this.exception.name}`; - matcher.and = function (m2) { - if (!arguments.length) { - throw new TypeError("Matcher expected"); - } else if (!isMatcher(m2)) { - m2 = match(m2); + if (this.exception.message) { + callStr += `(${this.exception.message})`; } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; + } + if (this.stack) { + // If we have a stack, add the first frame that's in end-user code + // Skip the first two frames because they will refer to Sinon code + callStr += (this.stack.split("\n")[3] || "unknown").replace( + /^\s*(?:at\s+|@)?/, + " at " + ); + } - match.isMatcher = isMatcher; + return callStr; + }, - match.any = match(function () { - return true; - }, "any"); + ensureArgIsAFunction: function (pos) { + if (typeof this.args[pos] !== "function") { + throw new TypeError( + `Expected argument at position ${pos} to be a Function, but was ${typeof this + .args[pos]}` + ); + } + }, +}; +Object.defineProperty(callProto, "stack", { + enumerable: true, + configurable: true, + get: function () { + return (this.errorWithCallStack && this.errorWithCallStack.stack) || ""; + }, +}); - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); +callProto.invokeCallback = callProto.yield; + +function createProxyCall( + proxy, + thisValue, + args, + returnValue, + exception, + id, + errorWithCallStack +) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); + var firstArg, lastArg; - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); + if (args.length > 0) { + firstArg = args[0]; + lastArg = args[args.length - 1]; + } - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; + var proxyCall = Object.create(callProto); + var callback = + lastArg && typeof lastArg === "function" ? lastArg : undefined; + + proxyCall.proxy = proxy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.firstArg = firstArg; + proxyCall.lastArg = lastArg; + proxyCall.callback = callback; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + proxyCall.errorWithCallStack = errorWithCallStack; + + return proxyCall; +} +createProxyCall.toString = callProto.toString; // used by mocks - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; +module.exports = createProxyCall; - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; +},{"./util/core/format":25,"@sinonjs/commons":46,"@sinonjs/samsam":85}],14:[function(require,module,exports){ +"use strict"; - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } +var arrayProto = require("@sinonjs/commons").prototypes.array; +var proxyCallUtil = require("./proxy-call-util"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var concat = arrayProto.concat; +var ErrorConstructor = Error.prototype.constructor; +var bind = Function.prototype.bind; + +var callId = 0; + +module.exports = function invoke(func, thisValue, args) { + var matchings = this.matchingFakes(args); + var currentCallId = callId++; + var exception, returnValue; + + proxyCallUtil.incrementCallCount(this); + push(this.thisValues, thisValue); + push(this.args, args); + push(this.callIds, currentCallId); + forEach(matchings, function (matching) { + proxyCallUtil.incrementCallCount(matching); + push(matching.thisValues, thisValue); + push(matching.args, args); + push(matching.callIds, currentCallId); + }); - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); + // Make call properties available from within the spied function: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); + try { + this.invoking = true; - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); + var thisCall = this.getCall(this.callCount - 1); - sinon.match = match; - return match; + if (thisCall.calledWithNew()) { + // Call through with `new` + returnValue = new (bind.apply( + this.func || func, + concat([thisValue], args) + ))(); + + if (typeof returnValue !== "object") { + returnValue = thisValue; + } + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + push(this.exceptions, exception); + push(this.returnValues, returnValue); + forEach(matchings, function (matching) { + push(matching.exceptions, exception); + push(matching.returnValues, returnValue); + }); - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./typeOf"); - module.exports = makeApi(sinon); + var err = new ErrorConstructor(); + // 1. Please do not get stack at this point. It may be so very slow, and not actually used + // 2. PhantomJS does not serialize the stack trace until the error has been thrown: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack + try { + throw err; + } catch (e) { + /* empty */ } + push(this.errorsWithCallStack, err); + forEach(matchings, function (matching) { + push(matching.errorsWithCallStack, err); + }); - if (isAMD) { - define(loadDependencies); - return; - } + // Make return value and exception available in the calls: + proxyCallUtil.createCallProperties(this); + forEach(matchings, proxyCallUtil.createCallProperties); - if (isNode) { - loadDependencies(require, module.exports, module); - return; + if (exception !== undefined) { + throw exception; } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return returnValue; +}; -/** - * @depend util/core.js - */ -/** - * Format functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal, formatio) { - - function makeApi(sinon) { - function valueFormatter(value) { - return "" + value; - } +},{"./proxy-call-util":12,"@sinonjs/commons":46}],15:[function(require,module,exports){ +"use strict"; - function getFormatioFormatter() { - var formatter = formatio.configure({ - quoteStrings: false, - limitChildrenCount: 250 - }); +var arrayProto = require("@sinonjs/commons").prototypes.array; +var extend = require("./util/core/extend"); +var functionToString = require("./util/core/function-to-string"); +var proxyCall = require("./proxy-call"); +var proxyCallUtil = require("./proxy-call-util"); +var proxyInvoke = require("./proxy-invoke"); +var sinonFormat = require("./util/core/format"); + +var push = arrayProto.push; +var forEach = arrayProto.forEach; +var slice = arrayProto.slice; + +var emptyFakes = Object.freeze([]); + +// Public API +var proxyApi = { + toString: functionToString, + + named: function named(name) { + this.displayName = name; + var nameDescriptor = Object.getOwnPropertyDescriptor(this, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + nameDescriptor.value = name; + Object.defineProperty(this, "name", nameDescriptor); + } + return this; + }, - function format() { - return formatter.ascii.apply(formatter, arguments); - } + invoke: proxyInvoke, - return format; + /* + * Hook for derived implementation to return fake instances matching the + * given arguments. + */ + matchingFakes: function (/*args, strict*/) { + return emptyFakes; + }, + + getCall: function getCall(index) { + var i = index; + if (i < 0) { + // Negative indices means counting backwards from the last call + i += this.callCount; + } + if (i < 0 || i >= this.callCount) { + return null; } - function getNodeFormatter() { - try { - var util = require("util"); - } catch (e) { - /* Node, but no util module - would be very old, but better safe than sorry */ - } + return proxyCall( + this, + this.thisValues[i], + this.args[i], + this.returnValues[i], + this.exceptions[i], + this.callIds[i], + this.errorsWithCallStack[i] + ); + }, - function format(v) { - var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString; - return isObjectWithNativeToString ? util.inspect(v) : v; - } + getCalls: function () { + var calls = []; + var i; - return util ? format : valueFormatter; + for (i = 0; i < this.callCount; i++) { + push(calls, this.getCall(i)); } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var formatter; + return calls; + }, - if (isNode) { - try { - formatio = require("formatio"); - } - catch (e) {} // eslint-disable-line no-empty + calledBefore: function calledBefore(proxy) { + if (!this.called) { + return false; } - if (formatio) { - formatter = getFormatioFormatter(); - } else if (isNode) { - formatter = getNodeFormatter(); - } else { - formatter = valueFormatter; + if (!proxy.called) { + return true; } - sinon.format = formatter; - return sinon.format; - } + return this.callIds[0] < proxy.callIds[proxy.callIds.length - 1]; + }, - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); - } + calledAfter: function calledAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + return this.callIds[this.callCount - 1] > proxy.callIds[0]; + }, - if (isAMD) { - define(loadDependencies); - return; - } + calledImmediatelyBefore: function calledImmediatelyBefore(proxy) { + if (!this.called || !proxy.called) { + return false; + } - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] - 1 + ); + }, - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof formatio === "object" && formatio // eslint-disable-line no-undef -)); + calledImmediatelyAfter: function calledImmediatelyAfter(proxy) { + if (!this.called || !proxy.called) { + return false; + } -/** - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; + return ( + this.callIds[this.callCount - 1] === + proxy.callIds[proxy.callCount - 1] + 1 + ); + }, + + formatters: require("./spy-formatters"), + printf: function (format) { + var spyInstance = this; + var args = slice(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifier) { + formatter = proxyApi.formatters[specifier]; - function makeApi(sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; + if (typeof formatter === "function") { + return String(formatter(spyInstance, args)); + } else if (!isNaN(parseInt(specifier, 10))) { + return sinonFormat(args[specifier - 1]); } - throw new Error(msg); + + return `%${specifier}`; + }); + }, + + resetHistory: function () { + if (this.invoking) { + var err = new Error( + "Cannot reset Sinon function while invoking it. " + + "Move the call to .resetHistory outside of the callback." + ); + err.name = "InvalidResetException"; + throw err; } - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.firstArg = null; + this.lastArg = null; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + this.errorsWithCallStack = []; + + if (this.fakes) { + forEach(this.fakes, function (fake) { + fake.resetHistory(); + }); + } - calledWith: function calledWith() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } + return this; + }, +}; + +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(proxyApi, "calledOn", true); +delegateToCalls(proxyApi, "alwaysCalledOn", false, "calledOn"); +delegateToCalls(proxyApi, "calledWith", true); +delegateToCalls( + proxyApi, + "calledOnceWith", + true, + "calledWith", + false, + undefined, + 1 +); +delegateToCalls(proxyApi, "calledWithMatch", true); +delegateToCalls(proxyApi, "alwaysCalledWith", false, "calledWith"); +delegateToCalls(proxyApi, "alwaysCalledWithMatch", false, "calledWithMatch"); +delegateToCalls(proxyApi, "calledWithExactly", true); +delegateToCalls( + proxyApi, + "calledOnceWithExactly", + true, + "calledWithExactly", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "calledOnceWithMatch", + true, + "calledWithMatch", + false, + undefined, + 1 +); +delegateToCalls( + proxyApi, + "alwaysCalledWithExactly", + false, + "calledWithExactly" +); +delegateToCalls( + proxyApi, + "neverCalledWith", + false, + "notCalledWith", + false, + function () { + return true; + } +); +delegateToCalls( + proxyApi, + "neverCalledWithMatch", + false, + "notCalledWithMatch", + false, + function () { + return true; + } +); +delegateToCalls(proxyApi, "threw", true); +delegateToCalls(proxyApi, "alwaysThrew", false, "threw"); +delegateToCalls(proxyApi, "returned", true); +delegateToCalls(proxyApi, "alwaysReturned", false, "returned"); +delegateToCalls(proxyApi, "calledWithNew", true); +delegateToCalls(proxyApi, "alwaysCalledWithNew", false, "calledWithNew"); - return true; - }, +function createProxy(func, originalFunc) { + var proxy = wrapFunction(func, originalFunc); - calledWithMatch: function calledWithMatch() { - var l = arguments.length; - if (l > this.args.length) { - return false; - } - for (var i = 0; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, + // Inherit function properties: + extend(proxy, func); - calledWithExactly: function calledWithExactly() { - return arguments.length === this.args.length && - this.calledWith.apply(this, arguments); - }, + proxy.prototype = func.prototype; - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, + extend.nonEnum(proxy, proxyApi); - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, + return proxy; +} - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, +function wrapFunction(func, originalFunc) { + var arity = originalFunc.length; + var p; + // Do not change this to use an eval. Projects that depend on sinon block the use of eval. + // ref: https://github.com/sinonjs/sinon/issues/710 + switch (arity) { + /*eslint-disable no-unused-vars, max-len*/ + case 0: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 1: + p = function proxy(a) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 2: + p = function proxy(a, b) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 3: + p = function proxy(a, b, c) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 4: + p = function proxy(a, b, c, d) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 5: + p = function proxy(a, b, c, d, e) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 6: + p = function proxy(a, b, c, d, e, f) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 7: + p = function proxy(a, b, c, d, e, f, g) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 8: + p = function proxy(a, b, c, d, e, f, g, h) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 9: + p = function proxy(a, b, c, d, e, f, g, h, i) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 10: + p = function proxy(a, b, c, d, e, f, g, h, i, j) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 11: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k) { + return p.invoke(func, this, slice(arguments)); + }; + break; + case 12: + p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) { + return p.invoke(func, this, slice(arguments)); + }; + break; + default: + p = function proxy() { + return p.invoke(func, this, slice(arguments)); + }; + break; + /*eslint-enable*/ + } + var nameDescriptor = Object.getOwnPropertyDescriptor(originalFunc, "name"); + if (nameDescriptor && nameDescriptor.configurable) { + // IE 11 functions don't have a name. + // Safari 9 has names that are not configurable. + Object.defineProperty(p, "name", nameDescriptor); + } + extend.nonEnum(p, { + isSinonProxy: true, + + called: false, + notCalled: true, + calledOnce: false, + calledTwice: false, + calledThrice: false, + callCount: 0, + firstCall: null, + firstArg: null, + secondCall: null, + thirdCall: null, + lastCall: null, + lastArg: null, + args: [], + returnValues: [], + thisValues: [], + exceptions: [], + callIds: [], + errorsWithCallStack: [], + }); + return p; +} - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } +module.exports = createProxy; - return this.exception === error || this.exception.name === error; - }, +},{"./proxy-call":13,"./proxy-call-util":12,"./proxy-invoke":14,"./spy-formatters":18,"./util/core/extend":24,"./util/core/format":25,"./util/core/function-to-string":26,"@sinonjs/commons":46}],16:[function(require,module,exports){ +"use strict"; - calledWithNew: function calledWithNew() { - return this.proxy.prototype && this.thisValue instanceof this.proxy; - }, +var walkObject = require("./util/core/walk-object"); - calledBefore: function (other) { - return this.callId < other.callId; - }, +function filter(object, property) { + return object[property].restore && object[property].restore.sinon; +} - calledAfter: function (other) { - return this.callId > other.callId; - }, +function restore(object, property) { + object[property].restore(); +} - callArg: function (pos) { - this.args[pos](); - }, +function restoreObject(object) { + return walkObject(restore, object, filter); +} - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, +module.exports = restoreObject; - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, +},{"./util/core/walk-object":36}],17:[function(require,module,exports){ +"use strict"; - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, +var arrayProto = require("@sinonjs/commons").prototypes.array; +var logger = require("@sinonjs/commons").deprecated; +var collectOwnMethods = require("./collect-own-methods"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isPropertyConfigurable = require("./util/core/is-property-configurable"); +var match = require("@sinonjs/samsam").createMatcher; +var sinonAssert = require("./assert"); +var sinonClock = require("./util/fake-timers"); +var sinonMock = require("./mock"); +var sinonSpy = require("./spy"); +var sinonStub = require("./stub"); +var sinonFake = require("./fake"); +var valueToString = require("@sinonjs/commons").valueToString; +var fakeServer = require("nise").fakeServer; +var fakeXhr = require("nise").fakeXhr; +var usePromiseLibrary = require("./util/core/use-promise-library"); + +var DEFAULT_LEAK_THRESHOLD = 10000; + +var filter = arrayProto.filter; +var forEach = arrayProto.forEach; +var push = arrayProto.push; +var reverse = arrayProto.reverse; + +function applyOnEach(fakes, method) { + var matchingFakes = filter(fakes, function (fake) { + return typeof fake[method] === "function"; + }); - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, + forEach(matchingFakes, function (fake) { + fake[method](); + }); +} - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, +function Sandbox() { + var sandbox = this; + var fakeRestorers = []; + var promiseLib; + + var collection = []; + var loggedLeakWarning = false; + sandbox.leakThreshold = DEFAULT_LEAK_THRESHOLD; + + function addToCollection(object) { + if ( + push(collection, object) > sandbox.leakThreshold && + !loggedLeakWarning + ) { + // eslint-disable-next-line no-console + logger.printWarning( + "Potential memory leak detected; be sure to call restore() to clean up your sandbox. To suppress this warning, modify the leakThreshold property of your sandbox." + ); + loggedLeakWarning = true; + } + } - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, + sandbox.assert = sinonAssert.createAssertObject(); - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, + sandbox.serverPrototype = fakeServer; - getStackFrames: function () { - // Omit the error message and the two top stack frames in sinon itself: - return this.stack && this.stack.split("\n").slice(3); - }, + // this is for testing only + sandbox.getFakes = function getFakes() { + return collection; + }; - toString: function () { - var callStr = this.proxy ? this.proxy.toString() + "(" : ""; - var args = []; + // this is for testing only + sandbox.getRestorers = function () { + return fakeRestorers; + }; - if (!this.args) { - return ":("; - } + sandbox.createStubInstance = function createStubInstance() { + var stubbed = sinonStub.createStubInstance.apply(null, arguments); - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } + var ownMethods = collectOwnMethods(stubbed); - callStr = callStr + args.join(", ") + ")"; + forEach(ownMethods, function (method) { + addToCollection(method); + }); - if (typeof this.returnValue !== "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } + usePromiseLibrary(promiseLib, ownMethods); - if (this.exception) { - callStr += " !" + this.exception.name; + return stubbed; + }; - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - if (this.stack) { - callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at "); + sandbox.inject = function inject(obj) { + obj.spy = function () { + return sandbox.spy.apply(null, arguments); + }; - } + obj.stub = function () { + return sandbox.stub.apply(null, arguments); + }; - return callStr; - } + obj.mock = function () { + return sandbox.mock.apply(null, arguments); }; - callProto.invokeCallback = callProto.yield; + obj.createStubInstance = function () { + return sandbox.createStubInstance.apply(sandbox, arguments); + }; - function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - proxyCall.stack = stack; + obj.fake = function () { + return sandbox.fake.apply(null, arguments); + }; + + obj.replace = function () { + return sandbox.replace.apply(null, arguments); + }; + + obj.replaceSetter = function () { + return sandbox.replaceSetter.apply(null, arguments); + }; + + obj.replaceGetter = function () { + return sandbox.replaceGetter.apply(null, arguments); + }; - return proxyCall; + if (sandbox.clock) { + obj.clock = sandbox.clock; } - createSpyCall.toString = callProto.toString; // used by mocks - sinon.spyCall = createSpyCall; - return createSpyCall; - } + if (sandbox.server) { + obj.server = sandbox.server; + obj.requests = sandbox.server.requests; + } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + obj.match = match; - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } + return obj; + }; - if (isAMD) { - define(loadDependencies); - return; - } + sandbox.mock = function mock() { + var m = sinonMock.apply(null, arguments); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + addToCollection(m); + usePromiseLibrary(promiseLib, m); - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return m; + }; -/** - * @depend times_in_words.js - * @depend util/core.js - * @depend extend.js - * @depend call.js - * @depend format.js - */ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; + sandbox.reset = function reset() { + applyOnEach(collection, "reset"); + applyOnEach(collection, "resetHistory"); + }; - function spy(object, property, types) { - if (!property && typeof object === "function") { - return spy.create(object); - } + sandbox.resetBehavior = function resetBehavior() { + applyOnEach(collection, "resetBehavior"); + }; - if (!object && !property) { - return spy.create(function () { }); + sandbox.resetHistory = function resetHistory() { + function privateResetHistory(f) { + var method = f.resetHistory || f.reset; + if (method) { + method.call(f); } + } - if (types) { - var methodDesc = sinon.getPropertyDescriptor(object, property); - for (var i = 0; i < types.length; i++) { - methodDesc[types[i]] = spy.create(methodDesc[types[i]]); - } - return sinon.wrapMethod(object, property, methodDesc); + forEach(collection, function (fake) { + if (typeof fake === "function") { + privateResetHistory(fake); + return; } - return sinon.wrapMethod(object, property, spy.create(object[property])); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return undefined; + var methods = []; + if (fake.get) { + push(methods, fake.get); } - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } + if (fake.set) { + push(methods, fake.set); } - } - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount === 1; - this.calledTwice = this.callCount === 2; - this.calledThrice = this.callCount === 3; - } + forEach(methods, privateResetHistory); + }); + }; - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); + sandbox.restore = function restore() { + if (arguments.length) { + throw new Error( + "sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()" + ); } - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func, proxyLength) { - // Retain the function length: - var p; - if (proxyLength) { - eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - p.isSinonProxy = true; - return p; - } + reverse(collection); + applyOnEach(collection, "restore"); + collection = []; - var uuid = 0; + forEach(fakeRestorers, function (restorer) { + restorer(); + }); + fakeRestorers = []; - // Public API - var spyApi = { - reset: function () { - if (this.invoking) { - var err = new Error("Cannot reset Sinon function while invoking it. " + - "Move the call to .reset outside of the callback."); - err.name = "InvalidResetException"; - throw err; - } + sandbox.restoreContext(); + }; - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - this.stacks = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } + sandbox.restoreContext = function restoreContext() { + var injectedKeys = sandbox.injectedKeys; + var injectInto = sandbox.injectInto; - return this; - }, + if (!injectedKeys) { + return; + } - create: function create(func, spyLength) { - var name; + forEach(injectedKeys, function (injectedKey) { + delete injectInto[injectedKey]; + }); - if (typeof func !== "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } + injectedKeys = []; + }; - if (!spyLength) { - spyLength = func.length; - } + function getFakeRestorer(object, property) { + var descriptor = getPropertyDescriptor(object, property); - var proxy = createProxy(func, spyLength); + function restorer() { + if (descriptor.isOwn) { + Object.defineProperty(object, property, descriptor); + } else { + delete object[property]; + } + } + restorer.object = object; + restorer.property = property; + return restorer; + } - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); + function verifyNotReplaced(object, property) { + forEach(fakeRestorers, function (fakeRestorer) { + if ( + fakeRestorer.object === object && + fakeRestorer.property === property + ) { + throw new TypeError( + `Attempted to replace ${property} which is already replaced` + ); + } + }); + } - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy.instantiateFake = sinon.spy.create; - proxy.id = "spy#" + uuid++; + sandbox.replace = function replace(object, property, replacement) { + var descriptor = getPropertyDescriptor(object, property); - return proxy; - }, + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; + if (typeof replacement === "undefined") { + throw new TypeError("Expected replacement argument to be defined"); + } - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); + if (typeof descriptor.get === "function") { + throw new Error("Use sandbox.replaceGetter for replacing getters"); + } - // Make call properties available from within the spied function: - createCallProperties.call(this); + if (typeof descriptor.set === "function") { + throw new Error("Use sandbox.replaceSetter for replacing setters"); + } - try { - this.invoking = true; + if (typeof object[property] !== typeof replacement) { + throw new TypeError( + `Cannot replace ${typeof object[ + property + ]} with ${typeof replacement}` + ); + } - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } + verifyNotReplaced(object, property); - var thisCall = this.getCall(this.callCount - 1); - if (thisCall.calledWithNew() && typeof returnValue !== "object") { - returnValue = thisValue; - } - } catch (e) { - exception = e; - } finally { - delete this.invoking; - } + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - push.call(this.exceptions, exception); - push.call(this.returnValues, returnValue); - push.call(this.stacks, new Error().stack); + object[property] = replacement; - // Make return value and exception available in the calls: - createCallProperties.call(this); + return replacement; + }; - if (exception !== undefined) { - throw exception; - } + sandbox.replaceGetter = function replaceGetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } - return returnValue; - }, + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } - named: function named(name) { - this.displayName = name; - return this; - }, + if (typeof descriptor.get !== "function") { + throw new Error("`object.property` is not a getter"); + } - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } + verifyNotReplaced(object, property); - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i], this.stacks[i]); - }, + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - getCalls: function () { - var calls = []; - var i; + Object.defineProperty(object, property, { + get: replacement, + configurable: isPropertyConfigurable(object, property), + }); - for (i = 0; i < this.callCount; i++) { - calls.push(this.getCall(i)); - } + return replacement; + }; - return calls; - }, + sandbox.replaceSetter = function replaceSetter( + object, + property, + replacement + ) { + var descriptor = getPropertyDescriptor(object, property); + + if (typeof descriptor === "undefined") { + throw new TypeError( + `Cannot replace non-existent property ${valueToString( + property + )}` + ); + } - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } + if (typeof replacement !== "function") { + throw new TypeError( + "Expected replacement argument to be a function" + ); + } - if (!spyFn.called) { - return true; - } + if (typeof descriptor.set !== "function") { + throw new Error("`object.property` is not a setter"); + } - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, + verifyNotReplaced(object, property); - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } + // store a function for restoring the replaced property + push(fakeRestorers, getFakeRestorer(object, property)); - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, + // eslint-disable-next-line accessor-pairs + Object.defineProperty(object, property, { + set: replacement, + configurable: isPropertyConfigurable(object, property), + }); - withArgs: function () { - var args = slice.call(arguments); + return replacement; + }; - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); + function commonPostInitSetup(args, spy) { + var object = args[0]; + var property = args[1]; - if (match) { - return match; - } - } else { - this.fakes = []; - } + var isSpyingOnEntireObject = + typeof property === "undefined" && typeof object === "object"; - var original = this; - var fake = this.instantiateFake(); - fake.matchingAguments = args; - fake.parent = this; - push.call(this.fakes, fake); + if (isSpyingOnEntireObject) { + var ownMethods = collectOwnMethods(spy); - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; + forEach(ownMethods, function (method) { + addToCollection(method); + }); - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); + usePromiseLibrary(promiseLib, ownMethods); + } else { + addToCollection(spy); + usePromiseLibrary(promiseLib, spy); + } - return fake; - }, + return spy; + } - matches: function (args, strict) { - var margs = this.matchingAguments; + sandbox.spy = function spy() { + var createdSpy = sinonSpy.apply(sinonSpy, arguments); + return commonPostInitSetup(arguments, createdSpy); + }; - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length === args.length; - } - }, + sandbox.stub = function stub() { + var createdStub = sinonStub.apply(sinonStub, arguments); + return commonPostInitSetup(arguments, createdStub); + }; - printf: function (format) { - var spyInstance = this; - var args = slice.call(arguments, 1); - var formatter; + // eslint-disable-next-line no-unused-vars + sandbox.fake = function fake(f) { + var s = sinonFake.apply(sinonFake, arguments); - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; + addToCollection(s); - if (typeof formatter === "function") { - return formatter.call(null, spyInstance, args); - } else if (!isNaN(parseInt(specifyer, 10))) { - return sinon.format(args[specifyer - 1]); - } + return s; + }; - return "%" + specifyer; - }); - } - }; + forEach(Object.keys(sinonFake), function (key) { + var fakeBehavior = sinonFake[key]; + if (typeof fakeBehavior === "function") { + sandbox.fake[key] = function () { + var s = fakeBehavior.apply(fakeBehavior, arguments); - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } + addToCollection(s); - var currentCall; - var matches = 0; + return s; + }; + } + }); - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); + sandbox.useFakeTimers = function useFakeTimers(args) { + var clock = sinonClock.useFakeTimers.call(null, args); - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; + sandbox.clock = clock; + addToCollection(clock); - if (matchAny) { - return true; - } - } - } + return clock; + }; - return matches === this.callCount; - }; - } + sandbox.verify = function verify() { + applyOnEach(collection, "verify"); + }; - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", function () { - return true; - }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { - return true; - }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); + sandbox.verifyAndRestore = function verifyAndRestore() { + var exception; - spyApi.formatters = { - c: function (spyInstance) { - return sinon.timesInWords(spyInstance.callCount); - }, + try { + sandbox.verify(); + } catch (e) { + exception = e; + } - n: function (spyInstance) { - return spyInstance.toString(); - }, + sandbox.restore(); - C: function (spyInstance) { - var calls = []; + if (exception) { + throw exception; + } + }; - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - var stringifiedCall = " " + spyInstance.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } + sandbox.useFakeServer = function useFakeServer() { + var proto = sandbox.serverPrototype || fakeServer; - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, + if (!proto || !proto.create) { + return null; + } - t: function (spyInstance) { - var objects = []; + sandbox.server = proto.create(); + addToCollection(sandbox.server); - for (var i = 0, l = spyInstance.callCount; i < l; ++i) { - push.call(objects, sinon.format(spyInstance.thisValues[i])); - } + return sandbox.server; + }; - return objects.join(", "); - }, + sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() { + var xhr = fakeXhr.useFakeXMLHttpRequest(); + addToCollection(xhr); + return xhr; + }; - "*": function (spyInstance, args) { - var formatted = []; + sandbox.usingPromise = function usingPromise(promiseLibrary) { + promiseLib = promiseLibrary; + collection.promiseLibrary = promiseLibrary; - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } + return sandbox; + }; +} - return formatted.join(", "); - } - }; +Sandbox.prototype.match = match; - sinon.extend(spy, spyApi); +module.exports = Sandbox; - spy.spyCall = sinon.spyCall; - sinon.spy = spy; +},{"./assert":2,"./collect-own-methods":4,"./fake":8,"./mock":10,"./spy":19,"./stub":20,"./util/core/get-property-descriptor":28,"./util/core/is-property-configurable":31,"./util/core/use-promise-library":35,"./util/fake-timers":39,"@sinonjs/commons":46,"@sinonjs/samsam":85,"nise":106}],18:[function(require,module,exports){ +"use strict"; - return spy; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var color = require("./color"); +var match = require("@sinonjs/samsam").createMatcher; +var timesInWords = require("./util/core/times-in-words"); +var sinonFormat = require("./util/core/format"); +var jsDiff = require("diff"); + +var join = arrayProto.join; +var map = arrayProto.map; +var push = arrayProto.push; +var slice = arrayProto.slice; + +function colorSinonMatchText(matcher, calledArg, calledArgMessage) { + var calledArgumentMessage = calledArgMessage; + if (!matcher.test(calledArg)) { + matcher.message = color.red(matcher.message); + if (calledArgumentMessage) { + calledArgumentMessage = color.green(calledArgumentMessage); + } } + return `${calledArgumentMessage} ${matcher.message}`; +} - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./call"); - require("./extend"); - require("./times_in_words"); - require("./format"); - module.exports = makeApi(core); - } +function colorDiffText(diff) { + var objects = map(diff, function (part) { + var text = part.value; + if (part.added) { + text = color.green(text); + } else if (part.removed) { + text = color.red(text); + } + if (diff.length === 2) { + text += " "; // format simple diffs + } + return text; + }); + return join(objects, ""); +} - if (isAMD) { - define(loadDependencies); - return; +function quoteStringValue(value) { + if (typeof value === "string") { + return JSON.stringify(value); } + return value; +} - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } +module.exports = { + c: function (spyInstance) { + return timesInWords(spyInstance.callCount); + }, - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + n: function (spyInstance) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return spyInstance.toString(); + }, -/** - * @depend util/core.js - * @depend extend.js - */ -/** - * Stub behavior - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Tim Fischbach (mail@timfischbach.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - var slice = Array.prototype.slice; - var join = Array.prototype.join; - var useLeftMostCallback = -1; - var useRightMostCallback = -2; + D: function (spyInstance, args) { + var message = ""; - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // describe multiple calls + if (l > 1) { + message += `\nCall ${i + 1}:`; + } + var calledArgs = spyInstance.getCall(i).args; + var expectedArgs = slice(args); + + for ( + var j = 0; + j < calledArgs.length || j < expectedArgs.length; + ++j + ) { + var calledArg = calledArgs[j]; + var expectedArg = expectedArgs[j]; + if (calledArg) { + calledArg = quoteStringValue(calledArg); + } - if (typeof setImmediate === "function") { - return setImmediate; - } + if (expectedArg) { + expectedArg = quoteStringValue(expectedArg); + } - return function (callback) { - setTimeout(callback, 0); - }; - })(); + message += "\n"; - function throwsException(error, message) { - if (typeof error === "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; + var calledArgMessage = + j < calledArgs.length ? sinonFormat(calledArg) : ""; + if (match.isMatcher(expectedArg)) { + message += colorSinonMatchText( + expectedArg, + calledArg, + calledArgMessage + ); + } else { + var expectedArgMessage = + j < expectedArgs.length ? sinonFormat(expectedArg) : ""; + var diff = jsDiff.diffJson( + calledArgMessage, + expectedArgMessage + ); + message += colorDiffText(diff); + } + } } - return this; - } + return message; + }, - function getCallback(behavior, args) { - var callArgAt = behavior.callArgAt; + C: function (spyInstance) { + var calls = []; - if (callArgAt >= 0) { - return args[callArgAt]; + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + var stringifiedCall = ` ${spyInstance.getCall(i).toString()}`; + if (/\n/.test(calls[i - 1])) { + stringifiedCall = `\n${stringifiedCall}`; + } + push(calls, stringifiedCall); } - var argumentList; + return calls.length > 0 ? `\n${join(calls, "\n")}` : ""; + }, - if (callArgAt === useLeftMostCallback) { - argumentList = args; - } + t: function (spyInstance) { + var objects = []; - if (callArgAt === useRightMostCallback) { - argumentList = slice.call(args).reverse(); + for (var i = 0, l = spyInstance.callCount; i < l; ++i) { + push(objects, sinonFormat(spyInstance.thisValues[i])); } - var callArgProp = behavior.callArgProp; + return join(objects, ", "); + }, - for (var i = 0, l = argumentList.length; i < l; ++i) { - if (!callArgProp && typeof argumentList[i] === "function") { - return argumentList[i]; - } + "*": function (spyInstance, args) { + return join( + map(args, function (arg) { + return sinonFormat(arg); + }), + ", " + ); + }, +}; - if (callArgProp && argumentList[i] && - typeof argumentList[i][callArgProp] === "function") { - return argumentList[i][callArgProp]; - } - } +},{"./color":5,"./util/core/format":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":85,"diff":92}],19:[function(require,module,exports){ +"use strict"; - return null; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var createProxy = require("./proxy"); +var extend = require("./util/core/extend"); +var functionName = require("@sinonjs/commons").functionName; +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var deepEqual = require("@sinonjs/samsam").deepEqual; +var isEsModule = require("./util/core/is-es-module"); +var proxyCallUtil = require("./proxy-call-util"); +var walkObject = require("./util/core/walk-object"); +var wrapMethod = require("./util/core/wrap-method"); +var valueToString = require("@sinonjs/commons").valueToString; + +/* cache references to library methods so that they also can be stubbed without problems */ +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var push = arrayProto.push; +var slice = arrayProto.slice; +var filter = Array.prototype.filter; + +var uuid = 0; + +function matches(fake, args, strict) { + var margs = fake.matchingArguments; + if ( + margs.length <= args.length && + deepEqual(slice(args, 0, margs.length), margs) + ) { + return !strict || margs.length === args.length; } + return false; +} - function makeApi(sinon) { - function getCallbackError(behavior, func, args) { - if (behavior.callArgAt < 0) { - var msg; +// Public API +var spyApi = { + withArgs: function () { + var args = slice(arguments); + var matching = pop(this.matchingFakes(args, true)); + if (matching) { + return matching; + } - if (behavior.callArgProp) { - msg = sinon.functionName(behavior.stub) + - " expected to yield to '" + behavior.callArgProp + - "', but no object with such a property was passed."; - } else { - msg = sinon.functionName(behavior.stub) + - " expected to yield, but no callback was passed."; - } + var original = this; + var fake = this.instantiateFake(); + fake.matchingArguments = args; + fake.parent = this; + push(this.fakes, fake); - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; - return msg; + forEach(original.args, function (arg, i) { + if (!matches(fake, arg)) { + return; } - return "argument at index " + behavior.callArgAt + " is not a function: " + func; - } + proxyCallUtil.incrementCallCount(fake); + push(fake.thisValues, original.thisValues[i]); + push(fake.args, arg); + push(fake.returnValues, original.returnValues[i]); + push(fake.exceptions, original.exceptions[i]); + push(fake.callIds, original.callIds[i]); + }); - function callCallback(behavior, args) { - if (typeof behavior.callArgAt === "number") { - var func = getCallback(behavior, args); + proxyCallUtil.createCallProperties(fake); - if (typeof func !== "function") { - throw new TypeError(getCallbackError(behavior, func, args)); - } + return fake; + }, - if (behavior.callbackAsync) { - nextTick(function () { - func.apply(behavior.callbackContext, behavior.callbackArguments); - }); - } else { - func.apply(behavior.callbackContext, behavior.callbackArguments); - } - } - } + // Override proxy default implementation + matchingFakes: function (args, strict) { + return filter.call(this.fakes, function (fake) { + return matches(fake, args, strict); + }); + }, +}; + +/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */ +var delegateToCalls = proxyCallUtil.delegateToCalls; +delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgWith = spyApi.callArg; +delegateToCalls(spyApi, "callArgOn", false, "callArgOnWith", true, function () { + throw new Error( + `${this.toString()} cannot call arg since it was not yet invoked.` + ); +}); +spyApi.callArgOnWith = spyApi.callArgOn; +delegateToCalls(spyApi, "throwArg", false, "throwArg", false, function () { + throw new Error( + `${this.toString()} cannot throw arg since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yield", false, "yield", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. +spyApi.invokeCallback = spyApi.yield; +delegateToCalls(spyApi, "yieldOn", false, "yieldOn", true, function () { + throw new Error( + `${this.toString()} cannot yield since it was not yet invoked.` + ); +}); +delegateToCalls(spyApi, "yieldTo", false, "yieldTo", true, function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); +}); +delegateToCalls( + spyApi, + "yieldToOn", + false, + "yieldToOn", + true, + function (property) { + throw new Error( + `${this.toString()} cannot yield to '${valueToString( + property + )}' since it was not yet invoked.` + ); + } +); - var proto = { - create: function create(stub) { - var behavior = sinon.extend({}, sinon.behavior); - delete behavior.create; - behavior.stub = stub; +function createSpy(func) { + var name; + var funk = func; - return behavior; - }, + if (typeof funk !== "function") { + funk = function () { + return; + }; + } else { + name = functionName(funk); + } - isPresent: function isPresent() { - return (typeof this.callArgAt === "number" || - this.exception || - typeof this.returnArgAt === "number" || - this.returnThis || - this.returnValueDefined); - }, + var proxy = createProxy(funk, funk); - invoke: function invoke(context, args) { - callCallback(this, args); + // Inherit spy API: + extend.nonEnum(proxy, spyApi); + extend.nonEnum(proxy, { + displayName: name || "spy", + fakes: [], + instantiateFake: createSpy, + id: `spy#${uuid++}`, + }); + return proxy; +} - if (this.exception) { - throw this.exception; - } else if (typeof this.returnArgAt === "number") { - return args[this.returnArgAt]; - } else if (this.returnThis) { - return context; - } +function spy(object, property, types) { + var descriptor, methodDesc; - return this.returnValue; - }, + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be spied"); + } - onCall: function onCall(index) { - return this.stub.onCall(index); - }, + if (!property && typeof object === "function") { + return createSpy(object); + } - onFirstCall: function onFirstCall() { - return this.stub.onFirstCall(); - }, + if (!property && typeof object === "object") { + return walkObject(spy, object); + } - onSecondCall: function onSecondCall() { - return this.stub.onSecondCall(); - }, + if (!object && !property) { + return createSpy(function () { + return; + }); + } - onThirdCall: function onThirdCall() { - return this.stub.onThirdCall(); - }, + if (!types) { + return wrapMethod(object, property, createSpy(object[property])); + } - withArgs: function withArgs(/* arguments */) { - throw new Error( - "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " + - "is not supported. Use \"stub.withArgs(...).onCall(...)\" " + - "to define sequential behavior for calls with certain arguments." - ); - }, + descriptor = {}; + methodDesc = getPropertyDescriptor(object, property); - callsArg: function callsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } + forEach(types, function (type) { + descriptor[type] = createSpy(methodDesc[type]); + }); - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; + return wrapMethod(object, property, descriptor); +} - return this; - }, +extend(spy, spyApi); +module.exports = spy; - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } +},{"./proxy":15,"./proxy-call-util":12,"./util/core/extend":24,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":85}],20:[function(require,module,exports){ +"use strict"; - this.callArgAt = pos; - this.callbackArguments = []; - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var behavior = require("./behavior"); +var behaviors = require("./default-behaviors"); +var createProxy = require("./proxy"); +var functionName = require("@sinonjs/commons").functionName; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var isNonExistentProperty = require("./util/core/is-non-existent-property"); +var spy = require("./spy"); +var extend = require("./util/core/extend"); +var getPropertyDescriptor = require("./util/core/get-property-descriptor"); +var isEsModule = require("./util/core/is-es-module"); +var wrapMethod = require("./util/core/wrap-method"); +var throwOnFalsyObject = require("./throw-on-falsy-object"); +var valueToString = require("@sinonjs/commons").valueToString; +var walkObject = require("./util/core/walk-object"); + +var forEach = arrayProto.forEach; +var pop = arrayProto.pop; +var slice = arrayProto.slice; +var sort = arrayProto.sort; + +var uuid = 0; + +function createStub(originalFunc) { + var proxy; + + function functionStub() { + var args = slice(arguments); + var matchings = proxy.matchingFakes(args); + + var fnStub = + pop( + sort(matchings, function (a, b) { + return ( + a.matchingArguments.length - b.matchingArguments.length + ); + }) + ) || proxy; + return getCurrentBehavior(fnStub).invoke(this, arguments); + } - return this; - }, + proxy = createProxy(functionStub, originalFunc || functionStub); + // Inherit spy API: + extend.nonEnum(proxy, spy); + // Inherit stub API: + extend.nonEnum(proxy, stub); + + var name = originalFunc ? functionName(originalFunc) : null; + extend.nonEnum(proxy, { + fakes: [], + instantiateFake: createStub, + displayName: name || "stub", + defaultBehavior: null, + behaviors: [], + id: `stub#${uuid++}`, + }); - callsArgWith: function callsArgWith(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } + return proxy; +} - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; +function stub(object, property) { + if (arguments.length > 2) { + throw new TypeError( + "stub(obj, 'meth', fn) has been removed, see documentation" + ); + } - return this; - }, + if (isEsModule(object)) { + throw new TypeError("ES Modules cannot be stubbed"); + } - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } + throwOnFalsyObject.apply(null, arguments); - this.callArgAt = pos; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; + if (isNonExistentProperty(object, property)) { + throw new TypeError( + `Cannot stub non-existent property ${valueToString(property)}` + ); + } - return this; - }, + var actualDescriptor = getPropertyDescriptor(object, property); - yields: function () { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; + assertValidPropertyDescriptor(actualDescriptor, property); - return this; - }, + var isObjectOrFunction = + typeof object === "object" || typeof object === "function"; + var isStubbingEntireObject = + typeof property === "undefined" && isObjectOrFunction; + var isCreatingNewStub = !object && typeof property === "undefined"; + var isStubbingNonFuncProperty = + isObjectOrFunction && + typeof property !== "undefined" && + (typeof actualDescriptor === "undefined" || + typeof actualDescriptor.value !== "function"); - yieldsRight: function () { - this.callArgAt = useRightMostCallback; - this.callbackArguments = slice.call(arguments, 0); - this.callbackContext = undefined; - this.callArgProp = undefined; - this.callbackAsync = false; + if (isStubbingEntireObject) { + return walkObject(stub, object); + } - return this; - }, + if (isCreatingNewStub) { + return createStub(); + } - yieldsOn: function (context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } + var func = + typeof actualDescriptor.value === "function" + ? actualDescriptor.value + : null; + var s = createStub(func); + + extend.nonEnum(s, { + rootObj: object, + propName: property, + shadowsPropOnPrototype: !actualDescriptor.isOwn, + restore: function restore() { + if (actualDescriptor !== undefined && actualDescriptor.isOwn) { + Object.defineProperty(object, property, actualDescriptor); + return; + } - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = context; - this.callArgProp = undefined; - this.callbackAsync = false; + delete object[property]; + }, + }); - return this; - }, + return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s); +} - yieldsTo: function (prop) { - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 1); - this.callbackContext = undefined; - this.callArgProp = prop; - this.callbackAsync = false; +stub.createStubInstance = function (constructor, overrides) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } - return this; - }, + var stubbedObject = stub(Object.create(constructor.prototype)); - yieldsToOn: function (prop, context) { - if (typeof context !== "object") { - throw new TypeError("argument context is not an object"); - } + forEach(Object.keys(overrides || {}), function (propertyName) { + if (propertyName in stubbedObject) { + var value = overrides[propertyName]; + if (value && value.createStubInstance) { + stubbedObject[propertyName] = value; + } else { + stubbedObject[propertyName].returns(value); + } + } else { + throw new Error( + `Cannot stub ${propertyName}. Property does not exist!` + ); + } + }); + return stubbedObject; +}; - this.callArgAt = useLeftMostCallback; - this.callbackArguments = slice.call(arguments, 2); - this.callbackContext = context; - this.callArgProp = prop; - this.callbackAsync = false; +function assertValidPropertyDescriptor(descriptor, property) { + if (!descriptor || !property) { + return; + } + if (!descriptor.configurable && !descriptor.writable) { + throw new TypeError( + `Descriptor for property ${property} is non-configurable and non-writable` + ); + } + if ((descriptor.get || descriptor.set) && !descriptor.configurable) { + throw new TypeError( + `Descriptor for accessor property ${property} is non-configurable` + ); + } + if (isDataDescriptor(descriptor) && !descriptor.writable) { + throw new TypeError( + `Descriptor for data property ${property} is non-writable` + ); + } +} - return this; - }, +function isDataDescriptor(descriptor) { + return ( + !descriptor.value && + !descriptor.writable && + !descriptor.set && + !descriptor.get + ); +} - throws: throwsException, - throwsException: throwsException, +/*eslint-disable no-use-before-define*/ +function getParentBehaviour(stubInstance) { + return stubInstance.parent && getCurrentBehavior(stubInstance.parent); +} - returns: function returns(value) { - this.returnValue = value; - this.returnValueDefined = true; - this.exception = undefined; +function getDefaultBehavior(stubInstance) { + return ( + stubInstance.defaultBehavior || + getParentBehaviour(stubInstance) || + behavior.create(stubInstance) + ); +} - return this; - }, +function getCurrentBehavior(stubInstance) { + var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1]; + return currentBehavior && currentBehavior.isPresent() + ? currentBehavior + : getDefaultBehavior(stubInstance); +} +/*eslint-enable no-use-before-define*/ + +var proto = { + resetBehavior: function () { + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + delete this.throwArgAt; + delete this.resolveArgAt; + delete this.fakeFn; + this.returnThis = false; + this.resolveThis = false; + + forEach(this.fakes, function (fake) { + fake.resetBehavior(); + }); + }, - returnsArg: function returnsArg(pos) { - if (typeof pos !== "number") { - throw new TypeError("argument index is not number"); - } + reset: function () { + this.resetHistory(); + this.resetBehavior(); + }, - this.returnArgAt = pos; + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = behavior.create(this); + } - return this; - }, + return this.behaviors[index]; + }, - returnsThis: function returnsThis() { - this.returnThis = true; + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, - return this; - } - }; + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, - function createAsyncVersion(syncFnName) { - return function () { - var result = this[syncFnName].apply(this, arguments); - this.callbackAsync = true; - return result; - }; - } + onThirdCall: function onThirdCall() { + return this.onCall(2); + }, - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { - proto[method + "Async"] = createAsyncVersion(method); - } + withArgs: function withArgs() { + var fake = spy.withArgs.apply(this, arguments); + if (this.defaultBehavior && this.defaultBehavior.promiseLibrary) { + fake.defaultBehavior = + fake.defaultBehavior || behavior.create(fake); + fake.defaultBehavior.promiseLibrary = + this.defaultBehavior.promiseLibrary; } - - sinon.behavior = proto; - return proto; + return fake; + }, +}; + +forEach(Object.keys(behavior), function (method) { + if ( + hasOwnProperty(behavior, method) && + !hasOwnProperty(proto, method) && + method !== "create" && + method !== "invoke" + ) { + proto[method] = behavior.createBehavior(method); } +}); - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - module.exports = makeApi(sinon); +forEach(Object.keys(behaviors), function (method) { + if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) { + behavior.addBehavior(stub, method, behaviors[method]); } +}); - if (isAMD) { - define(loadDependencies); - return; - } +extend(stub, proto); +module.exports = stub; - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } +},{"./behavior":3,"./default-behaviors":7,"./proxy":15,"./spy":19,"./throw-on-falsy-object":21,"./util/core/extend":24,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/is-non-existent-property":30,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46}],21:[function(require,module,exports){ +"use strict"; +var valueToString = require("@sinonjs/commons").valueToString; - if (sinonGlobal) { - makeApi(sinonGlobal); +function throwOnFalsyObject(object, property) { + if (property && !object) { + var type = object === null ? "null" : "undefined"; + throw new Error( + `Trying to stub property '${valueToString(property)}' of ${type}` + ); } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); +} -/** - * @depend util/core.js - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function walkInternal(obj, iterator, context, originalObj, seen) { - var proto, prop; +module.exports = throwOnFalsyObject; - if (typeof Object.getOwnPropertyNames !== "function") { - // We explicitly want to enumerate through all of the prototype's properties - // in this case, therefore we deliberately leave out an own property check. - /* eslint-disable guard-for-in */ - for (prop in obj) { - iterator.call(context, obj[prop], prop, obj); - } - /* eslint-enable guard-for-in */ +},{"@sinonjs/commons":46}],22:[function(require,module,exports){ +"use strict"; - return; +module.exports = { + injectInto: null, + properties: [ + "spy", + "stub", + "mock", + "clock", + "server", + "requests", + "fake", + "replace", + "replaceSetter", + "replaceGetter", + "createStubInstance", + ], + useFakeTimers: true, + useFakeServer: true, +}; + +},{}],23:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var reduce = arrayProto.reduce; + +module.exports = function exportAsyncBehaviors(behaviorMethods) { + return reduce( + Object.keys(behaviorMethods), + function (acc, method) { + // need to avoid creating another async versions of the newly added async methods + if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) { + acc[`${method}Async`] = function () { + var result = behaviorMethods[method].apply(this, arguments); + this.callbackAsync = true; + return result; + }; } + return acc; + }, + {} + ); +}; - Object.getOwnPropertyNames(obj).forEach(function (k) { - if (!seen[k]) { - seen[k] = true; - var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ? - originalObj : obj; - iterator.call(context, target[k], k, target); - } - }); +},{"@sinonjs/commons":46}],24:[function(require,module,exports){ +"use strict"; - proto = Object.getPrototypeOf(obj); - if (proto) { - walkInternal(proto, iterator, context, originalObj, seen); - } - } +var arrayProto = require("@sinonjs/commons").prototypes.array; +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; - /* Public: walks the prototype chain of an object and iterates over every own property - * name encountered. The iterator is called in the same fashion that Array.prototype.forEach - * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional - * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will - * default to using a simple for..in loop. - * - * obj - The object to walk the prototype chain for. - * iterator - The function to be called on each pass of the walk. - * context - (Optional) When given, the iterator will be called with this object as the receiver. - */ - function walk(obj, iterator, context) { - return walkInternal(obj, iterator, context, obj, {}); - } +var join = arrayProto.join; +var push = arrayProto.push; - sinon.walk = walk; - return sinon.walk; - } +// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug +var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9"; + }, + }; - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); + var result = []; + for (var prop in obj) { + if (hasOwnProperty(obj, prop)) { + push(result, obj[prop]()); + } } + return join(result, "") !== "0123456789"; +})(); - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; +function extendCommon(target, sources, doCopy) { + var source, i, prop; - if (isAMD) { - define(loadDependencies); - return; - } + for (i = 0; i < sources.length; i++) { + source = sources[i]; - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + for (prop in source) { + if (hasOwnProperty(source, prop)) { + doCopy(target, source, prop); + } + } - if (sinonGlobal) { - makeApi(sinonGlobal); + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if ( + hasDontEnumBug && + hasOwnProperty(source, "toString") && + source.toString !== target.toString + ) { + target.toString = source.toString; + } } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); -/** - * @depend util/core.js - * @depend extend.js - * @depend spy.js - * @depend behavior.js - * @depend walk.js - */ -/** - * Stub functions + return target; +} + +/** Public: Extend target in place with all (own) properties, except 'name' when [[writable]] is false, + * from sources in-order. Thus, last source will override properties in previous sources. * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. * - * Copyright (c) 2010-2013 Christian Johansen + * @returns {object} the extended target */ -(function (sinonGlobal) { - - function makeApi(sinon) { - function stub(object, property, func) { - if (!!func && typeof func !== "function" && typeof func !== "object") { - throw new TypeError("Custom stub should be a function or a property descriptor"); +module.exports = function extend(target, ...sources) { + return extendCommon( + target, + sources, + function copyValue(dest, source, prop) { + var destOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + dest, + prop + ); + var sourceOwnPropertyDescriptor = Object.getOwnPropertyDescriptor( + source, + prop + ); + + if (prop === "name" && !destOwnPropertyDescriptor.writable) { + return; } - - var wrapper; - - if (func) { - if (typeof func === "function") { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = func; - if (sinon.spy && sinon.spy.create) { - var types = sinon.objectKeys(wrapper); - for (var i = 0; i < types.length; i++) { - wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); - } - } - } + const descriptors = { + configurable: sourceOwnPropertyDescriptor.configurable, + enumerable: sourceOwnPropertyDescriptor.enumerable, + }; + /* + if the sorce has an Accessor property copy over the accessor functions (get and set) + data properties has writable attribute where as accessor property don't + REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties + */ + + if (hasOwnProperty(sourceOwnPropertyDescriptor, "writable")) { + descriptors.writable = sourceOwnPropertyDescriptor.writable; + descriptors.value = sourceOwnPropertyDescriptor.value; } else { - var stubLength = 0; - if (typeof object === "object" && typeof object[property] === "function") { - stubLength = object[property].length; + if (sourceOwnPropertyDescriptor.get) { + descriptors.get = + sourceOwnPropertyDescriptor.get.bind(dest); + } + if (sourceOwnPropertyDescriptor.set) { + descriptors.set = + sourceOwnPropertyDescriptor.set.bind(dest); } - wrapper = stub.create(stubLength); - } - - if (!object && typeof property === "undefined") { - return sinon.stub.create(); - } - - if (typeof property === "undefined" && typeof object === "object") { - sinon.walk(object || {}, function (value, prop, propOwner) { - // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object - // is not Object.prototype - if ( - propOwner !== Object.prototype && - prop !== "constructor" && - typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function" - ) { - stub(object, prop); - } - }); - - return object; } - - return sinon.wrapMethod(object, property, wrapper); - } - - - /*eslint-disable no-use-before-define*/ - function getParentBehaviour(stubInstance) { - return (stubInstance.parent && getCurrentBehavior(stubInstance.parent)); + Object.defineProperty(dest, prop, descriptors); } + ); +}; - function getDefaultBehavior(stubInstance) { - return stubInstance.defaultBehavior || - getParentBehaviour(stubInstance) || - sinon.behavior.create(stubInstance); +/** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. Define the properties as non enumerable. + * + * @param {object} target - The Object to extend + * @param {object[]} sources - Objects to copy properties from. + * + * @returns {object} the extended target + */ +module.exports.nonEnum = function extendNonEnum(target, ...sources) { + return extendCommon( + target, + sources, + function copyProperty(dest, source, prop) { + Object.defineProperty(dest, prop, { + value: source[prop], + enumerable: false, + configurable: true, + writable: true, + }); } + ); +}; - function getCurrentBehavior(stubInstance) { - var behavior = stubInstance.behaviors[stubInstance.callCount - 1]; - return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance); - } - /*eslint-enable no-use-before-define*/ +},{"@sinonjs/commons":46}],25:[function(require,module,exports){ +"use strict"; - var uuid = 0; +var inspect = require("util").inspect; +var customFormatter; - var proto = { - create: function create(stubLength) { - var functionStub = function () { - return getCurrentBehavior(functionStub).invoke(this, arguments); - }; +function format() { + if (customFormatter) { + return customFormatter.apply(null, arguments); + } - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub, stubLength); - functionStub.func = orig; + return inspect.apply(inspect, arguments); +} - sinon.extend(functionStub, stub); - functionStub.instantiateFake = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; +format.setFormatter = function (aCustomFormatter) { + if (typeof aCustomFormatter !== "function") { + throw new Error("format.setFormatter must be called with a function"); + } - functionStub.defaultBehavior = null; - functionStub.behaviors = []; + customFormatter = aCustomFormatter; +}; - return functionStub; - }, +module.exports = format; - resetBehavior: function () { - var i; +},{"util":91}],26:[function(require,module,exports){ +"use strict"; - this.defaultBehavior = null; - this.behaviors = []; +module.exports = function toString() { + var i, prop, thisValue; + if (this.getCall && this.callCount) { + i = this.callCount; - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; + while (i--) { + thisValue = this.getCall(i).thisValue; - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); + // eslint-disable-next-line guard-for-in + for (prop in thisValue) { + try { + if (thisValue[prop] === this) { + return prop; } + } catch (e) { + // no-op - accessing props can throw an error, nothing to do here } - }, + } + } + } - onCall: function onCall(index) { - if (!this.behaviors[index]) { - this.behaviors[index] = sinon.behavior.create(this); - } + return this.displayName || "sinon fake"; +}; - return this.behaviors[index]; - }, +},{}],27:[function(require,module,exports){ +"use strict"; - onFirstCall: function onFirstCall() { - return this.onCall(0); - }, +/* istanbul ignore next : not testing that setTimeout works */ +function nextTick(callback) { + setTimeout(callback, 0); +} - onSecondCall: function onSecondCall() { - return this.onCall(1); - }, +module.exports = function getNextTick(process, setImmediate) { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } - onThirdCall: function onThirdCall() { - return this.onCall(2); - } - }; - - function createBehavior(behaviorMethod) { - return function () { - this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); - this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); - return this; - }; - } - - for (var method in sinon.behavior) { - if (sinon.behavior.hasOwnProperty(method) && - !proto.hasOwnProperty(method) && - method !== "create" && - method !== "withArgs" && - method !== "invoke") { - proto[method] = createBehavior(method); - } - } - - sinon.extend(stub, proto); - sinon.stub = stub; - - return stub; + if (typeof setImmediate === "function") { + return setImmediate; } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + return nextTick; +}; - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./behavior"); - require("./spy"); - require("./extend"); - module.exports = makeApi(core); - } +},{}],28:[function(require,module,exports){ +"use strict"; - if (isAMD) { - define(loadDependencies); - return; +module.exports = function getPropertyDescriptor(object, property) { + var proto = object; + var descriptor; + var isOwn = Boolean( + object && Object.getOwnPropertyDescriptor(object, property) + ); + + while ( + proto && + !(descriptor = Object.getOwnPropertyDescriptor(proto, property)) + ) { + proto = Object.getPrototypeOf(proto); } - if (isNode) { - loadDependencies(require, module.exports, module); - return; + if (descriptor) { + descriptor.isOwn = isOwn; } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return descriptor; +}; + +},{}],29:[function(require,module,exports){ +"use strict"; /** - * @depend times_in_words.js - * @depend util/core.js - * @depend call.js - * @depend extend.js - * @depend match.js - * @depend spy.js - * @depend stub.js - * @depend format.js - */ -/** - * Mock functions. + * Verify if an object is a ECMAScript Module + * + * As the exports from a module is immutable we cannot alter the exports + * using spies or stubs. Let the consumer know this to avoid bug reports + * on weird error messages. * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * @param {object} object The object to examine * - * Copyright (c) 2010-2013 Christian Johansen + * @returns {boolean} true when the object is a module */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; - var match = sinon.match; - - function mock(object) { - // if (typeof console !== undefined && console.warn) { - // console.warn("mock will be removed from Sinon.JS v2.0"); - // } +module.exports = function (object) { + return ( + object && + typeof Symbol !== "undefined" && + object[Symbol.toStringTag] === "Module" && + Object.isSealed(object) + ); +}; + +},{}],30:[function(require,module,exports){ +"use strict"; - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } +/** + * @param {*} object + * @param {string} property + * @returns {boolean} whether a prop exists in the prototype chain + */ +function isNonExistentProperty(object, property) { + return Boolean( + object && typeof property !== "undefined" && !(property in object) + ); +} - return mock.create(object); - } +module.exports = isNonExistentProperty; - function each(collection, callback) { - if (!collection) { - return; - } +},{}],31:[function(require,module,exports){ +"use strict"; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } +var getPropertyDescriptor = require("./get-property-descriptor"); - function arrayEquals(arr1, arr2, compareLength) { - if (compareLength && (arr1.length !== arr2.length)) { - return false; - } +function isPropertyConfigurable(obj, propName) { + var propertyDescriptor = getPropertyDescriptor(obj, propName); - for (var i = 0, l = arr1.length; i < l; i++) { - if (!sinon.deepEqual(arr1[i], arr2[i])) { - return false; - } - } - return true; - } + return propertyDescriptor ? propertyDescriptor.configurable : true; +} - sinon.extend(mock, { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } +module.exports = isPropertyConfigurable; - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; +},{"./get-property-descriptor":28}],32:[function(require,module,exports){ +"use strict"; - return mockObject; - }, +function isRestorable(obj) { + return ( + typeof obj === "function" && + typeof obj.restore === "function" && + obj.restore.sinon + ); +} - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } +module.exports = isRestorable; - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } +},{}],33:[function(require,module,exports){ +"use strict"; - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; +var globalObject = require("@sinonjs/commons").global; +var getNextTick = require("./get-next-tick"); - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); +module.exports = getNextTick(globalObject.process, globalObject.setImmediate); - push.call(this.proxies, method); - } +},{"./get-next-tick":27,"@sinonjs/commons":46}],34:[function(require,module,exports){ +"use strict"; - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); +var array = [null, "once", "twice", "thrice"]; - return expectation; - }, +module.exports = function timesInWords(count) { + return array[count] || `${count || 0} times`; +}; - restore: function restore() { - var object = this.object; +},{}],35:[function(require,module,exports){ +"use strict"; - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore === "function") { - object[proxy].restore(); - } - }); - }, +var forEach = Array.prototype.forEach; - verify: function verify() { - var expectations = this.expectations || {}; - var messages = []; - var met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); +function usePromiseLibrary(library, fakes) { + if (typeof library === "undefined") { + return; + } - this.restore(); + if (Array.isArray(fakes)) { + forEach.call(fakes, usePromiseLibrary.bind(null, library)); - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else if (met.length > 0) { - sinon.expectation.pass(messages.concat(met).join("\n")); - } + return; + } - return true; - }, + if (typeof fakes.usingPromise === "function") { + fakes.usingPromise(library); + } +} - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : []; - var expectationsWithMatchingArgs = []; - var currentArgs = args || []; - var i, available; +module.exports = usePromiseLibrary; - for (i = 0; i < expectations.length; i += 1) { - var expectedArgs = expectations[i].expectedArguments || []; - if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) { - expectationsWithMatchingArgs.push(expectations[i]); - } - } +},{}],36:[function(require,module,exports){ +"use strict"; - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (!expectationsWithMatchingArgs[i].met() && - expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - return expectationsWithMatchingArgs[i].apply(thisValue, args); - } - } +var functionName = require("@sinonjs/commons").functionName; - var messages = []; - var exhausted = 0; +var getPropertyDescriptor = require("./get-property-descriptor"); +var walk = require("./walk"); - for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) { - if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) { - available = available || expectationsWithMatchingArgs[i]; - } else { - exhausted += 1; - } - } +function walkObject(predicate, object, filter) { + var called = false; + var name = functionName(predicate); - if (available && exhausted === 0) { - return available.apply(thisValue, args); - } + if (!object) { + throw new Error( + `Trying to ${name} object but received ${String(object)}` + ); + } - for (i = 0; i < expectations.length; i += 1) { - push.call(messages, " " + expectations[i].toString()); + walk(object, function (prop, propOwner) { + // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object + // is not Object.prototype + if ( + propOwner !== Object.prototype && + prop !== "constructor" && + typeof getPropertyDescriptor(propOwner, prop).value === "function" + ) { + if (filter) { + if (filter(object, prop)) { + called = true; + predicate(object, prop); } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }); - - var times = sinon.timesInWords; - var slice = Array.prototype.slice; - - function callCountInWords(callCount) { - if (callCount === 0) { - return "never called"; + } else { + called = true; + predicate(object, prop); } - - return "called " + times(callCount); } + }); - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min === "number" && typeof max === "number") { - var str = times(min); - - if (min !== max) { - str = "at least " + str + " and at most " + times(max); - } + if (!called) { + throw new Error(`Expected to ${name} methods on object but found none`); + } - return str; - } + return object; +} - if (typeof min === "number") { - return "at least " + times(min); - } +module.exports = walkObject; - return "at most " + times(max); - } +},{"./get-property-descriptor":28,"./walk":37,"@sinonjs/commons":46}],37:[function(require,module,exports){ +"use strict"; - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls === "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } +var forEach = require("@sinonjs/commons").prototypes.array.forEach; - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls !== "number") { - return false; - } +function walkInternal(obj, iterator, context, originalObj, seen) { + var proto, prop; - return expectation.callCount === expectation.maxCalls; + if (typeof Object.getOwnPropertyNames !== "function") { + // We explicitly want to enumerate through all of the prototype's properties + // in this case, therefore we deliberately leave out an own property check. + /* eslint-disable-next-line guard-for-in */ + for (prop in obj) { + iterator.call(context, obj[prop], prop, obj); } - function verifyMatcher(possibleMatcher, arg) { - var isMatcher = match && match.isMatcher(possibleMatcher); + return; + } - return isMatcher && possibleMatcher.test(arg) || true; + forEach(Object.getOwnPropertyNames(obj), function (k) { + if (seen[k] !== true) { + seen[k] = true; + var target = + typeof Object.getOwnPropertyDescriptor(obj, k).get === + "function" + ? originalObj + : obj; + iterator.call(context, k, target); } + }); - sinon.expectation = { - minCalls: 1, - maxCalls: 1, + proto = Object.getPrototypeOf(obj); + if (proto) { + walkInternal(proto, iterator, context, originalObj, seen); + } +} - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; +/* Walks the prototype chain of an object and iterates over every own property + * name encountered. The iterator is called in the same fashion that Array.prototype.forEach + * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional + * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will + * default to using a simple for..in loop. + * + * obj - The object to walk the prototype chain for. + * iterator - The function to be called on each pass of the walk. + * context - (Optional) When given, the iterator will be called with this object as the receiver. + */ +module.exports = function walk(obj, iterator, context) { + return walkInternal(obj, iterator, context, obj, {}); +}; - return expectation; - }, +},{"@sinonjs/commons":46}],38:[function(require,module,exports){ +"use strict"; - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); +var getPropertyDescriptor = require("./get-property-descriptor"); +var extend = require("./extend"); +var hasOwnProperty = + require("@sinonjs/commons").prototypes.object.hasOwnProperty; +var valueToString = require("@sinonjs/commons").valueToString; +var push = require("@sinonjs/commons").prototypes.array.push; + +function isFunction(obj) { + return ( + typeof obj === "function" || + Boolean(obj && obj.constructor && obj.call && obj.apply) + ); +} - return sinon.spy.invoke.apply(this, arguments); - }, +function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwnProperty(target, prop)) { + target[prop] = source[prop]; + } + } +} - atLeast: function atLeast(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } +function getAccessor(object, property, method) { + var accessors = ["get", "set"]; + var descriptor = getPropertyDescriptor(object, property); - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } + for (var i = 0; i < accessors.length; i++) { + if ( + descriptor[accessors[i]] && + descriptor[accessors[i]].name === method.name + ) { + return accessors[i]; + } + } + return null; +} - this.minCalls = num; +// Cheap way to detect if we have ES5 support. +var hasES5Support = "keys" in Object; - return this; - }, +module.exports = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } - atMost: function atMost(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not number"); - } + if (typeof method !== "function" && typeof method !== "object") { + throw new TypeError( + "Method wrapper should be a function or a property descriptor" + ); + } - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } + function checkWrappedMethod(wrappedMethod) { + var error; + + if (!isFunction(wrappedMethod)) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${valueToString( + property + )} as function` + ); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already wrapped` + ); + } else if (wrappedMethod.calledBefore) { + var verb = wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError( + `Attempted to wrap ${valueToString( + property + )} which is already ${verb}` + ); + } - this.maxCalls = num; + if (error) { + if (wrappedMethod && wrappedMethod.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethod.stackTraceError.stack}`; + } + throw error; + } + } - return this; - }, + var error, + wrappedMethods, + wrappedMethod, + i, + wrappedMethodDesc, + target, + accessor; + + wrappedMethods = []; + + function simplePropertyAssignment() { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } - never: function never() { - return this.exactly(0); - }, + // Firefox has a problem when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty + ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods + : hasOwnProperty(object, property); + + if (hasES5Support) { + var methodDesc = + typeof method === "function" ? { value: method } : method; + wrappedMethodDesc = getPropertyDescriptor(object, property); + + if (!wrappedMethodDesc) { + error = new TypeError( + `Attempted to wrap ${typeof wrappedMethod} property ${property} as function` + ); + } else if ( + wrappedMethodDesc.restore && + wrappedMethodDesc.restore.sinon + ) { + error = new TypeError( + `Attempted to wrap ${property} which is already wrapped` + ); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) { + error.stack += `\n--------------\n${wrappedMethodDesc.stackTraceError.stack}`; + } + throw error; + } - once: function once() { - return this.exactly(1); - }, + var types = Object.keys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + push(wrappedMethods, wrappedMethod); + } - twice: function twice() { - return this.exactly(2); - }, + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + + // catch failing assignment + // this is the converse of the check in `.restore` below + if (typeof method === "function" && object[property] !== method) { + // correct any wrongdoings caused by the defineProperty call above, + // such as adding new items (if object was a Storage object) + delete object[property]; + simplePropertyAssignment(); + } + } else { + simplePropertyAssignment(); + } - thrice: function thrice() { - return this.exactly(3); - }, + extendObjectWithWrappedMethods(); - exactly: function exactly(num) { - if (typeof num !== "number") { - throw new TypeError("'" + num + "' is not a number"); - } + function extendObjectWithWrappedMethods() { + for (i = 0; i < wrappedMethods.length; i++) { + accessor = getAccessor(object, property, wrappedMethods[i]); + target = accessor ? method[accessor] : method; + extend.nonEnum(target, { + displayName: property, + wrappedMethod: wrappedMethods[i], - this.atLeast(num); - return this.atMost(num); - }, + // Set up an Error object for a stack trace which can be used later to find what line of + // code the original method was created on. + stackTraceError: new Error("Stack Trace for original"), - met: function met() { - return !this.failed && receivedMinCalls(this); - }, + restore: restore, + }); - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } + target.restore.sinon = true; + if (!hasES5Support) { + mirrorProperties(target, wrappedMethod); + } + } + } - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } + function restore() { + accessor = getAccessor(object, property, this.wrappedMethod); + var descriptor; + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (accessor) { + if (!owned) { + try { + // In some cases `delete` may throw an error + delete object[property][accessor]; + } catch (e) {} // eslint-disable-line no-empty + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + descriptor[accessor] = wrappedMethodDesc[accessor]; + Object.defineProperty(object, property, descriptor); + } - if (!("expectedArguments" in this)) { - return; + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property][accessor] = this.wrappedMethod; } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); + } else { + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property][accessor] === target) { + object[property][accessor] = this.wrappedMethod; } + } + } else { + if (!owned) { + try { + delete object[property]; + } catch (e) {} // eslint-disable-line no-empty + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); + if (hasES5Support) { + descriptor = getPropertyDescriptor(object, property); + if (descriptor && descriptor.value === target) { + object[property] = this.wrappedMethod; } - - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); + } else { + if (object[property] === target) { + object[property] = this.wrappedMethod; } + } + } + } - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", didn't match " + this.expectedArguments.toString()); - } + return method; +}; - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, +},{"./extend":24,"./get-property-descriptor":28,"@sinonjs/commons":46}],39:[function(require,module,exports){ +"use strict"; - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } +var extend = require("./core/extend"); +var FakeTimers = require("@sinonjs/fake-timers"); +var globalObject = require("@sinonjs/commons").global; - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } +function createClock(config, globalCtx) { + var FakeTimersCtx = FakeTimers; + if (globalCtx !== null && typeof globalCtx === "object") { + FakeTimersCtx = FakeTimers.withGlobal(globalCtx); + } + var clock = FakeTimersCtx.install(config); + clock.restore = clock.uninstall; + return clock; +} - if (!("expectedArguments" in this)) { - return true; - } +function addIfDefined(obj, globalPropName) { + var globalProp = globalObject[globalPropName]; + if (typeof globalProp !== "undefined") { + obj[globalPropName] = globalProp; + } +} - args = args || []; +/** + * @param {number|Date|object} dateOrConfig The unix epoch value to install with (default 0) + * @returns {object} Returns a lolex clock instance + */ +exports.useFakeTimers = function (dateOrConfig) { + var hasArguments = typeof dateOrConfig !== "undefined"; + var argumentIsDateLike = + (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) && + arguments.length === 1; + var argumentIsObject = + dateOrConfig !== null && + typeof dateOrConfig === "object" && + arguments.length === 1; + + if (!hasArguments) { + return createClock({ + now: 0, + }); + } - if (args.length < this.expectedArguments.length) { - return false; - } + if (argumentIsDateLike) { + return createClock({ + now: dateOrConfig, + }); + } - if (this.expectsExactArgCount && - args.length !== this.expectedArguments.length) { - return false; - } + if (argumentIsObject) { + var config = extend.nonEnum({}, dateOrConfig); + var globalCtx = config.global; + delete config.global; + return createClock(config, globalCtx); + } - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!verifyMatcher(this.expectedArguments[i], args[i])) { - return false; - } + throw new TypeError( + "useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon" + ); +}; + +exports.clock = { + create: function (now) { + return FakeTimers.createClock(now); + }, +}; + +var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date, +}; +addIfDefined(timers, "setImmediate"); +addIfDefined(timers, "clearImmediate"); + +exports.timers = timers; + +},{"./core/extend":24,"@sinonjs/commons":46,"@sinonjs/fake-timers":58}],40:[function(require,module,exports){ +"use strict"; - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } +var every = require("./prototypes/array").every; - return true; - }, +/** + * @private + */ +function hasCallsLeft(callMap, spy) { + if (callMap[spy.id] === undefined) { + callMap[spy.id] = 0; + } - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, + return callMap[spy.id] < spy.callCount; +} - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, +/** + * @private + */ +function checkAdjacentCalls(callMap, spy, index, spies) { + var calledBeforeNext = true; - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, + if (index !== spies.length - 1) { + calledBeforeNext = spy.calledBefore(spies[index + 1]); + } - toString: function () { - var args = (this.expectedArguments || []).slice(); + if (hasCallsLeft(callMap, spy) && calledBeforeNext) { + callMap[spy.id] += 1; + return true; + } - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } + return false; +} - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} calledBefore - A method that determines if this proxy was called before another one + * @property {string} id - Some id + * @property {number} callCount - Number of times this proxy has been called + */ - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); +/** + * Returns true when the spies have been called in the order they were supplied in + * + * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments + * @returns {boolean} true when spies are called in order, false otherwise + */ +function calledInOrder(spies) { + var callMap = {}; + // eslint-disable-next-line no-underscore-dangle + var _spies = arguments.length > 1 ? arguments : spies; - if (this.met()) { - return "Expectation met: " + message; - } + return every(_spies, checkAdjacentCalls.bind(null, callMap)); +} - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, +module.exports = calledInOrder; - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } +},{"./prototypes/array":48}],41:[function(require,module,exports){ +"use strict"; - return true; - }, +var functionName = require("./function-name"); - pass: function pass(message) { - sinon.assert.pass(message); - }, +/** + * Returns a display name for a value from a constructor + * + * @param {object} value A value to examine + * @returns {(string|null)} A string or null + */ +function className(value) { + return ( + (value.constructor && value.constructor.name) || + // The next branch is for IE11 support only: + // Because the name property is not set on the prototype + // of the Function object, we finally try to grab the + // name from its definition. This will never be reached + // in node, so we are not able to test this properly. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + (typeof value.constructor === "function" && + /* istanbul ignore next */ + functionName(value.constructor)) || + null + ); +} - fail: function fail(message) { - var exception = new Error(message); - exception.name = "ExpectationError"; +module.exports = className; - throw exception; - } - }; +},{"./function-name":44}],42:[function(require,module,exports){ +/* eslint-disable no-console */ +"use strict"; - sinon.mock = mock; - return mock; +/** + * Returns a function that will invoke the supplied function and print a + * deprecation warning to the console each time it is called. + * + * @param {Function} func + * @param {string} msg + * @returns {Function} + */ +exports.wrap = function(func, msg) { + var wrapped = function() { + exports.printWarning(msg); + return func.apply(this, arguments); + }; + if (func.prototype) { + wrapped.prototype = func.prototype; } + return wrapped; +}; - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./times_in_words"); - require("./call"); - require("./extend"); - require("./match"); - require("./spy"); - require("./stub"); - require("./format"); +/** + * Returns a string which can be supplied to `wrap()` to notify the user that a + * particular part of the sinon API has been deprecated. + * + * @param {string} packageName + * @param {string} funcName + * @returns {string} + */ +exports.defaultMsg = function(packageName, funcName) { + return ( + packageName + + "." + + funcName + + " is deprecated and will be removed from the public API in a future version of " + + packageName + + "." + ); +}; - module.exports = makeApi(sinon); +/** + * Prints a warning on the console, when it exists + * + * @param {string} msg + * @returns {undefined} + */ +exports.printWarning = function(msg) { + /* istanbul ignore next */ + if (typeof process === "object" && process.emitWarning) { + // Emit Warnings in Node + process.emitWarning(msg); + } else if (console.info) { + console.info(msg); + } else { + console.log(msg); } +}; - if (isAMD) { - define(loadDependencies); - return; - } +},{}],43:[function(require,module,exports){ +"use strict"; - if (isNode) { - loadDependencies(require, module.exports, module); - return; +/** + * Returns true when fn returns true for all members of obj. + * This is an every implementation that works for all iterables + * + * @param {object} obj + * @param {Function} fn + * @returns {boolean} + */ +module.exports = function every(obj, fn) { + var pass = true; + + try { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + obj.forEach(function() { + if (!fn.apply(this, arguments)) { + // Throwing an error is the only way to break `forEach` + throw new Error(); + } + }); + } catch (e) { + pass = false; } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + return pass; +}; + +},{}],44:[function(require,module,exports){ +"use strict"; /** - * @depend util/core.js - * @depend spy.js - * @depend stub.js - * @depend mock.js + * Returns a display name for a function + * + * @param {Function} func + * @returns {string} */ +module.exports = function functionName(func) { + if (!func) { + return ""; + } + + try { + return ( + func.displayName || + func.name || + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + (String(func).match(/function ([^\s(]+)/) || [])[1] + ); + } catch (e) { + // Stringify may fail and we might get an exception, as a last-last + // resort fall back to empty string. + return ""; + } +}; + +},{}],45:[function(require,module,exports){ +"use strict"; + /** - * Collections of stubs, spies and mocks. + * A reference to the global object * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen + * @type {object} globalObject */ -(function (sinonGlobal) { - - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; +var globalObject; + +/* istanbul ignore else */ +if (typeof global !== "undefined") { + // Node + globalObject = global; +} else if (typeof window !== "undefined") { + // Browser + globalObject = window; +} else { + // WebWorker + globalObject = self; +} - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } +module.exports = globalObject; - return fakeCollection.fakes; - } +},{}],46:[function(require,module,exports){ +"use strict"; - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); +module.exports = { + global: require("./global"), + calledInOrder: require("./called-in-order"), + className: require("./class-name"), + deprecated: require("./deprecated"), + every: require("./every"), + functionName: require("./function-name"), + orderByFirstCall: require("./order-by-first-call"), + prototypes: require("./prototypes"), + typeOf: require("./type-of"), + valueToString: require("./value-to-string") +}; + +},{"./called-in-order":40,"./class-name":41,"./deprecated":42,"./every":43,"./function-name":44,"./global":45,"./order-by-first-call":47,"./prototypes":51,"./type-of":56,"./value-to-string":57}],47:[function(require,module,exports){ +"use strict"; - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] === "function") { - fakes[i][method](); - } - } - } +var sort = require("./prototypes/array").sort; +var slice = require("./prototypes/array").slice; - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } +/** + * @private + */ +function comparator(a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = (aCall && aCall.callId) || -1; + var bId = (bCall && bCall.callId) || -1; + + return aId < bId ? -1 : 1; +} - function makeApi(sinon) { - var collection = { - verify: function resolve() { - each(this, "verify"); - }, +/** + * A Sinon proxy object (fake, spy, stub) + * + * @typedef {object} SinonProxy + * @property {Function} getCall - A method that can return the first call + */ - restore: function restore() { - each(this, "restore"); - compact(this); - }, +/** + * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call + * + * @param {SinonProxy[] | SinonProxy} spies + * @returns {SinonProxy[]} + */ +function orderByFirstCall(spies) { + return sort(slice(spies), comparator); +} - reset: function restore() { - each(this, "reset"); - }, +module.exports = orderByFirstCall; - verifyAndRestore: function verifyAndRestore() { - var exception; +},{"./prototypes/array":48}],48:[function(require,module,exports){ +"use strict"; - try { - this.verify(); - } catch (e) { - exception = e; - } +var copyPrototype = require("./copy-prototype"); - this.restore(); +module.exports = copyPrototype(Array.prototype); - if (exception) { - throw exception; - } - }, +},{"./copy-prototype":49}],49:[function(require,module,exports){ +"use strict"; - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, +var call = Function.call; + +module.exports = function copyPrototypeMethods(prototype) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return Object.getOwnPropertyNames(prototype).reduce(function(result, name) { + // ignore size because it throws from Map + if ( + name !== "size" && + name !== "caller" && + name !== "callee" && + name !== "arguments" && + typeof prototype[name] === "function" + ) { + result[name] = call.bind(prototype[name]); + } - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, + return result; + }, Object.create(null)); +}; - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; +},{}],50:[function(require,module,exports){ +"use strict"; - if (typeof original !== "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } +var copyPrototype = require("./copy-prototype"); - object[property] = value; +module.exports = copyPrototype(Function.prototype); - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object === "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); +},{"./copy-prototype":49}],51:[function(require,module,exports){ +"use strict"; - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } +module.exports = { + array: require("./array"), + function: require("./function"), + map: require("./map"), + object: require("./object"), + set: require("./set"), + string: require("./string") +}; - return stubbedObj; - } +},{"./array":48,"./function":50,"./map":52,"./object":53,"./set":54,"./string":55}],52:[function(require,module,exports){ +"use strict"; - return this.add(sinon.stub.apply(sinon, arguments)); - }, +var copyPrototype = require("./copy-prototype"); - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, +module.exports = copyPrototype(Map.prototype); - inject: function inject(obj) { - var col = this; +},{"./copy-prototype":49}],53:[function(require,module,exports){ +"use strict"; - obj.spy = function () { - return col.spy.apply(col, arguments); - }; +var copyPrototype = require("./copy-prototype"); - obj.stub = function () { - return col.stub.apply(col, arguments); - }; +module.exports = copyPrototype(Object.prototype); - obj.mock = function () { - return col.mock.apply(col, arguments); - }; +},{"./copy-prototype":49}],54:[function(require,module,exports){ +"use strict"; - return obj; - } - }; +var copyPrototype = require("./copy-prototype"); - sinon.collection = collection; - return collection; - } +module.exports = copyPrototype(Set.prototype); - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; +},{"./copy-prototype":49}],55:[function(require,module,exports){ +"use strict"; - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./mock"); - require("./spy"); - require("./stub"); - module.exports = makeApi(sinon); - } +var copyPrototype = require("./copy-prototype"); - if (isAMD) { - define(loadDependencies); - return; - } +module.exports = copyPrototype(String.prototype); - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } +},{"./copy-prototype":49}],56:[function(require,module,exports){ +"use strict"; - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); +var type = require("type-detect"); /** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit + * Returns the lower-case result of running type from type-detect on the value * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen + * @param {*} value + * @returns {string} */ -(function () { - - function makeApi(s, lol) { - /*global lolex */ - var llx = typeof lolex !== "undefined" ? lolex : lol; - - s.useFakeTimers = function () { - var now; - var methods = Array.prototype.slice.call(arguments); - - if (typeof methods[0] === "string") { - now = 0; - } else { - now = methods.shift(); - } - - var clock = llx.install(now || 0, methods); - clock.restore = clock.uninstall; - return clock; - }; +module.exports = function typeOf(value) { + return type(value).toLowerCase(); +}; - s.clock = { - create: function (now) { - return llx.createClock(now); - } - }; +},{"type-detect":110}],57:[function(require,module,exports){ +"use strict"; - s.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), - clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date - }; +/** + * Returns a string representation of the value + * + * @param {*} value + * @returns {string} + */ +function valueToString(value) { + if (value && value.toString) { + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + return value.toString(); } + return String(value); +} - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; +module.exports = valueToString; - function loadDependencies(require, epxorts, module, lolex) { - var core = require("./core"); - makeApi(core, lolex); - module.exports = core; - } +},{}],58:[function(require,module,exports){ +"use strict"; - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module, require("lolex")); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); +const globalObject = require("@sinonjs/commons").global; /** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * @typedef {object} IdleDeadline + * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout + * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period + */ + +/** + * Queues a function to be called during a browser's idle periods * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen + * @callback RequestIdleCallback + * @param {function(IdleDeadline)} callback + * @param {{timeout: number}} options - an options object + * @returns {number} the id */ -if (typeof sinon === "undefined") { - this.sinon = {}; -} -(function () { - - var push = [].push; +/** + * @callback NextTick + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {void} + */ - function makeApi(sinon) { - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; +/** + * @callback SetImmediate + * @param {VoidVarArgsFunc} callback - the callback to run + * @param {...*} arguments - optional arguments to call the callback with + * @returns {NodeImmediate} + */ - sinon.Event.prototype = { - initEvent: function (type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, +/** + * @callback VoidVarArgsFunc + * @param {...*} callback - the callback to run + * @returns {void} + */ - stopPropagation: function () {}, +/** + * @typedef RequestAnimationFrame + * @property {function(number):void} requestAnimationFrame + * @returns {number} - the id + */ - preventDefault: function () { - this.defaultPrevented = true; - } - }; +/** + * @typedef Performance + * @property {function(): number} now + */ - sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { - this.initEvent(type, false, false, target); - this.loaded = progressEventRaw.loaded || null; - this.total = progressEventRaw.total || null; - this.lengthComputable = !!progressEventRaw.total; - }; +/* eslint-disable jsdoc/require-property-description */ +/** + * @typedef {object} Clock + * @property {number} now - the current time + * @property {Date} Date - the Date constructor + * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop + * @property {RequestIdleCallback} requestIdleCallback + * @property {function(number):void} cancelIdleCallback + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {NextTick} nextTick + * @property {queueMicrotask} queueMicrotask + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {SetImmediate} setImmediate + * @property {function(NodeImmediate):void} clearImmediate + * @property {function():number} countTimers + * @property {RequestAnimationFrame} requestAnimationFrame + * @property {function(number):void} cancelAnimationFrame + * @property {function():void} runMicrotasks + * @property {function(string | number): number} tick + * @property {function(string | number): Promise} tickAsync + * @property {function(): number} next + * @property {function(): Promise} nextAsync + * @property {function(): number} runAll + * @property {function(): number} runToFrame + * @property {function(): Promise} runAllAsync + * @property {function(): number} runToLast + * @property {function(): Promise} runToLastAsync + * @property {function(): void} reset + * @property {function(number | Date): void} setSystemTime + * @property {Performance} performance + * @property {function(number[]): number[]} hrtime - process.hrtime (legacy) + * @property {function(): void} uninstall Uninstall the clock. + * @property {Function[]} methods - the methods that are faked + * @property {boolean} [shouldClearNativeTimers] inherited from config + */ +/* eslint-enable jsdoc/require-property-description */ - sinon.ProgressEvent.prototype = new sinon.Event(); +/** + * Configuration object for the `install` method. + * + * @typedef {object} Config + * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch) + * @property {string[]} [toFake] names of the methods that should be faked. + * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll() + * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false) + * @property {number} [advanceTimeDelta] increment mocked time every <> ms (default: 20ms) + * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false) + */ - sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; +/* eslint-disable jsdoc/require-property-description */ +/** + * The internal structure to describe a scheduled fake timer + * + * @typedef {object} Timer + * @property {Function} func + * @property {*[]} args + * @property {number} delay + * @property {number} callAt + * @property {number} createdAt + * @property {boolean} immediate + * @property {number} id + * @property {Error} [error] + */ - sinon.CustomEvent = function CustomEvent(type, customData, target) { - this.initEvent(type, false, false, target); - this.detail = customData.detail || null; - }; +/** + * A Node timer + * + * @typedef {object} NodeImmediate + * @property {function(): boolean} hasRef + * @property {function(): NodeImmediate} ref + * @property {function(): NodeImmediate} unref + */ +/* eslint-enable jsdoc/require-property-description */ - sinon.CustomEvent.prototype = new sinon.Event(); +/* eslint-disable complexity */ - sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; +/** + * Mocks available features in the specified global namespace. + * + * @param {*} _global Namespace to mock (e.g. `window`) + * @returns {FakeTimers} + */ +function withGlobal(_global) { + const userAgent = _global.navigator && _global.navigator.userAgent; + const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1; + const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint + const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs + const NOOP = function () { + return undefined; + }; + const NOOP_ARRAY = function () { + return []; + }; + const timeoutResult = _global.setTimeout(NOOP, 0); + const addTimerReturnsObject = typeof timeoutResult === "object"; + const hrtimePresent = + _global.process && typeof _global.process.hrtime === "function"; + const hrtimeBigintPresent = + hrtimePresent && typeof _global.process.hrtime.bigint === "function"; + const nextTickPresent = + _global.process && typeof _global.process.nextTick === "function"; + const utilPromisify = _global.process && require("util").promisify; + const performancePresent = + _global.performance && typeof _global.performance.now === "function"; + const hasPerformancePrototype = + _global.Performance && + (typeof _global.Performance).match(/^(function|object)$/); + const hasPerformanceConstructorPrototype = + _global.performance && + _global.performance.constructor && + _global.performance.constructor.prototype; + const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask"); + const requestAnimationFramePresent = + _global.requestAnimationFrame && + typeof _global.requestAnimationFrame === "function"; + const cancelAnimationFramePresent = + _global.cancelAnimationFrame && + typeof _global.cancelAnimationFrame === "function"; + const requestIdleCallbackPresent = + _global.requestIdleCallback && + typeof _global.requestIdleCallback === "function"; + const cancelIdleCallbackPresent = + _global.cancelIdleCallback && + typeof _global.cancelIdleCallback === "function"; + const setImmediatePresent = + _global.setImmediate && typeof _global.setImmediate === "function"; - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, + // Make properties writable in IE, as per + // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html + /* eslint-disable no-self-assign */ + if (isRunningInIE) { + _global.setTimeout = _global.setTimeout; + _global.clearTimeout = _global.clearTimeout; + _global.setInterval = _global.setInterval; + _global.clearInterval = _global.clearInterval; + _global.Date = _global.Date; + } - removeEventListener: function removeEventListener(event, listener) { - var listeners = this.eventListeners && this.eventListeners[event] || []; + // setImmediate is not a standard function + // avoid adding the prop to the window object if not present + if (setImmediatePresent) { + _global.setImmediate = _global.setImmediate; + _global.clearImmediate = _global.clearImmediate; + } + /* eslint-enable no-self-assign */ - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } - } - }, + _global.clearTimeout(timeoutResult); - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; + const NativeDate = _global.Date; + let uniqueTimerId = idCounterStart; - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] === "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } + /** + * @param {number} num + * @returns {boolean} + */ + function isNumberFinite(num) { + if (Number.isFinite) { + return Number.isFinite(num); + } - return !!event.defaultPrevented; - } - }; + return isFinite(num); } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + let isNearInfiniteLimit = false; - function loadDependencies(require) { - var sinon = require("./core"); - makeApi(sinon); + /** + * @param {Clock} clock + * @param {number} i + */ + function checkIsNearInfiniteLimit(clock, i) { + if (clock.loopLimit && i === clock.loopLimit - 1) { + isNearInfiniteLimit = true; + } } - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef + /** + * + */ + function resetIsNearInfiniteLimit() { + isNearInfiniteLimit = false; } -}()); - -/** - * @depend util/core.js - */ -/** - * Logs errors - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2014 Christian Johansen - */ -(function (sinonGlobal) { - - // cache a reference to setTimeout, so that our reference won't be stubbed out - // when using fake timers and errors will still get logged - // https://github.com/cjohansen/Sinon.JS/issues/381 - var realSetTimeout = setTimeout; - - function makeApi(sinon) { - function log() {} + /** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + * + * @param {string} str + * @returns {number} + */ + function parseTime(str) { + if (!str) { + return 0; + } - function logError(label, err) { - var msg = label + " threw exception: "; + const strings = str.split(":"); + const l = strings.length; + let i = l; + let ms = 0; + let parsed; - function throwLoggedError() { - err.message = msg + err.message; - throw err; - } + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error( + "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits" + ); + } - sinon.log(msg + "[" + err.name + "] " + err.message); + while (i--) { + parsed = parseInt(strings[i], 10); - if (err.stack) { - sinon.log(err.stack); + if (parsed >= 60) { + throw new Error(`Invalid time ${str}`); } - if (logError.useImmediateExceptions) { - throwLoggedError(); - } else { - logError.setTimeout(throwLoggedError, 0); - } + ms += parsed * Math.pow(60, l - i - 1); } - // When set to true, any errors logged will be thrown immediately; - // If set to false, the errors will be thrown in separate execution frame. - logError.useImmediateExceptions = false; - - // wrap realSetTimeout with something we can stub in tests - logError.setTimeout = function (func, timeout) { - realSetTimeout(func, timeout); - }; - - var exports = {}; - exports.log = sinon.log = log; - exports.logError = sinon.logError = logError; - - return exports; - } - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - module.exports = makeApi(sinon); + return ms * 1000; } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - if (isAMD) { - define(loadDependencies); - return; - } + /** + * Get the decimal part of the millisecond value as nanoseconds + * + * @param {number} msFloat the number of milliseconds + * @returns {number} an integer number of nanoseconds in the range [0,1e6) + * + * Example: nanoRemainer(123.456789) -> 456789 + */ + function nanoRemainder(msFloat) { + const modulo = 1e6; + const remainder = (msFloat * 1e6) % modulo; + const positiveRemainder = + remainder < 0 ? remainder + modulo : remainder; - if (isNode) { - loadDependencies(require, module.exports, module); - return; + return Math.floor(positiveRemainder); } - if (sinonGlobal) { - makeApi(sinonGlobal); + /** + * Used to grok the `now` parameter to createClock. + * + * @param {Date|number} epoch the system time + * @returns {number} + */ + function getEpoch(epoch) { + if (!epoch) { + return 0; + } + if (typeof epoch.getTime === "function") { + return epoch.getTime(); + } + if (typeof epoch === "number") { + return epoch; + } + throw new TypeError("now should be milliseconds since UNIX epoch"); } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); - -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XDomainRequest object - */ - -/** - * Returns the global to prevent assigning values to 'this' when this is undefined. - * This can occur when files are interpreted by node in strict mode. - * @private - */ -function getGlobal() { - - return typeof window !== "undefined" ? window : global; -} -if (typeof sinon === "undefined") { - if (typeof this === "undefined") { - getGlobal().sinon = {}; - } else { - this.sinon = {}; + /** + * @param {number} from + * @param {number} to + * @param {Timer} timer + * @returns {boolean} + */ + function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; } -} - -// wrapper for global -(function (global) { - - var xdr = { XDomainRequest: global.XDomainRequest }; - xdr.GlobalXDomainRequest = global.XDomainRequest; - xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined"; - xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; - - function makeApi(sinon) { - sinon.xdr = xdr; - function FakeXDomainRequest() { - this.readyState = FakeXDomainRequest.UNSENT; - this.requestBody = null; - this.requestHeaders = {}; - this.status = 0; - this.timeout = null; + /** + * @param {Clock} clock + * @param {Timer} job + */ + function getInfiniteLoopError(clock, job) { + const infiniteLoopError = new Error( + `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!` + ); - if (typeof FakeXDomainRequest.onCreate === "function") { - FakeXDomainRequest.onCreate(this); - } + if (!job.error) { + return infiniteLoopError; } - function verifyState(x) { - if (x.readyState !== FakeXDomainRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } + // pattern never matched in Node + const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/; + let clockMethodPattern = new RegExp( + String(Object.keys(clock).join("|")) + ); - if (x.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } + if (addTimerReturnsObject) { + // node.js environment + clockMethodPattern = new RegExp( + `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+` + ); } - function verifyRequestSent(x) { - if (x.readyState === FakeXDomainRequest.UNSENT) { - throw new Error("Request not sent"); - } - if (x.readyState === FakeXDomainRequest.DONE) { - throw new Error("Request done"); + let matchedLineIndex = -1; + job.error.stack.split("\n").some(function (line, i) { + // If we've matched a computed target line (e.g. setTimeout) then we + // don't need to look any further. Return true to stop iterating. + const matchedComputedTarget = line.match(computedTargetPattern); + /* istanbul ignore if */ + if (matchedComputedTarget) { + matchedLineIndex = i; + return true; } - } - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XDomainRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; + // If we've matched a clock method line, then there may still be + // others further down the trace. Return false to keep iterating. + const matchedClockMethod = line.match(clockMethodPattern); + if (matchedClockMethod) { + matchedLineIndex = i; + return false; } - } - sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { - open: function open(method, url) { - this.method = method; - this.url = url; - - this.responseText = null; - this.sendFlag = false; + // If we haven't matched anything on this line, but we matched + // previously and set the matched line index, then we can stop. + // If we haven't matched previously, then we should keep iterating. + return matchedLineIndex >= 0; + }); - this.readyStateChange(FakeXDomainRequest.OPENED); - }, + const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${ + job.func.name || "anonymous" + }\n${job.error.stack + .split("\n") + .slice(matchedLineIndex + 1) + .join("\n")}`; - readyStateChange: function readyStateChange(state) { - this.readyState = state; - var eventName = ""; - switch (this.readyState) { - case FakeXDomainRequest.UNSENT: - break; - case FakeXDomainRequest.OPENED: - break; - case FakeXDomainRequest.LOADING: - if (this.sendFlag) { - //raise the progress event - eventName = "onprogress"; - } - break; - case FakeXDomainRequest.DONE: - if (this.isTimeout) { - eventName = "ontimeout"; - } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { - eventName = "onerror"; - } else { - eventName = "onload"; - } - break; - } + try { + Object.defineProperty(infiniteLoopError, "stack", { + value: stack, + }); + } catch (e) { + // noop + } - // raising event (if defined) - if (eventName) { - if (typeof this[eventName] === "function") { - try { - this[eventName](); - } catch (e) { - sinon.logError("Fake XHR " + eventName + " handler", e); - } - } - } - }, + return infiniteLoopError; + } - send: function send(data) { - verifyState(this); + /** + * @param {Date} target + * @param {Date} source + * @returns {Date} the target after modifications + */ + function mirrorDateProperties(target, source) { + let prop; + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } - if (!/^(get|head)$/i.test(this.method)) { - this.requestBody = data; - } - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; + // set special now implementation + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } - this.errorFlag = false; - this.sendFlag = true; - this.readyStateChange(FakeXDomainRequest.OPENED); + // set special toSource implementation + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } - if (typeof this.onSend === "function") { - this.onSend(this); - } - }, + // set special toString implementation + target.toString = function toString() { + return source.toString(); + }; - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; - if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXDomainRequest.DONE); - this.sendFlag = false; - } - }, + return target; + } - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyResponseBodyType(body); + //eslint-disable-next-line jsdoc/require-jsdoc + function createDate() { + /** + * @param {number} year + * @param {number} month + * @param {number} date + * @param {number} hour + * @param {number} minute + * @param {number} second + * @param {number} ms + * + * @returns {Date} + */ + function ClockDate(year, month, date, hour, minute, second, ms) { + // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2. + // This remains so in the 10th edition of 2019 as well. + if (!(this instanceof ClockDate)) { + return new NativeDate(ClockDate.clock.now).toString(); + } - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; + // if Date is called as a constructor with 'new' keyword + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate( + year, + month, + date, + hour, + minute, + second + ); + default: + return new NativeDate( + year, + month, + date, + hour, + minute, + second, + ms + ); + } + } - do { - this.readyStateChange(FakeXDomainRequest.LOADING); - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); + return mirrorDateProperties(ClockDate, NativeDate); + } - this.readyStateChange(FakeXDomainRequest.DONE); - }, + //eslint-disable-next-line jsdoc/require-jsdoc + function enqueueJob(clock, job) { + // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob + if (!clock.jobs) { + clock.jobs = []; + } + clock.jobs.push(job); + } - respond: function respond(status, contentType, body) { - // content-type ignored, since XDomainRequest does not carry this - // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease - // test integration across browsers - this.status = typeof status === "number" ? status : 200; - this.setResponseBody(body || ""); - }, + //eslint-disable-next-line jsdoc/require-jsdoc + function runJobs(clock) { + // runs all microtick-deferred tasks - ecma262/#sec-runjobs + if (!clock.jobs) { + return; + } + for (let i = 0; i < clock.jobs.length; i++) { + const job = clock.jobs[i]; + job.func.apply(null, job.args); - simulatetimeout: function simulatetimeout() { - this.status = 0; - this.isTimeout = true; - // Access to this should actually throw an error - this.responseText = undefined; - this.readyStateChange(FakeXDomainRequest.DONE); + checkIsNearInfiniteLimit(clock, i); + if (clock.loopLimit && i > clock.loopLimit) { + throw getInfiniteLoopError(clock, job); } - }); - - sinon.extend(FakeXDomainRequest, { - UNSENT: 0, - OPENED: 1, - LOADING: 3, - DONE: 4 - }); - - sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { - sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { - if (xdr.supportsXDR) { - global.XDomainRequest = xdr.GlobalXDomainRequest; - } + } + resetIsNearInfiniteLimit(); + clock.jobs = []; + } - delete sinon.FakeXDomainRequest.restore; + /** + * @param {Clock} clock + * @param {Timer} timer + * @returns {number} id of the created timer + */ + function addTimer(clock, timer) { + if (timer.func === undefined) { + throw new Error("Callback must be provided to timer calls"); + } - if (keepOnCreate !== true) { - delete sinon.FakeXDomainRequest.onCreate; - } - }; - if (xdr.supportsXDR) { - global.XDomainRequest = sinon.FakeXDomainRequest; + if (addTimerReturnsObject) { + // Node.js environment + if (typeof timer.func !== "function") { + throw new TypeError( + `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${ + timer.func + } of type ${typeof timer.func}` + ); } - return sinon.FakeXDomainRequest; - }; + } - sinon.FakeXDomainRequest = FakeXDomainRequest; - } + if (isNearInfiniteLimit) { + timer.error = new Error(); + } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + timer.type = timer.immediate ? "Immediate" : "Timeout"; - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; - } + if (timer.hasOwnProperty("delay")) { + if (typeof timer.delay !== "number") { + timer.delay = parseInt(timer.delay, 10); + } - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -})(typeof global !== "undefined" ? global : self); + if (!isNumberFinite(timer.delay)) { + timer.delay = 0; + } + timer.delay = timer.delay > maxTimeout ? 1 : timer.delay; + timer.delay = Math.max(0, timer.delay); + } -/** - * @depend core.js - * @depend ../extend.js - * @depend event.js - * @depend ../log_error.js - */ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal, global) { - - function getWorkingXHR(globalScope) { - var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; - if (supportsXHR) { - return globalScope.XMLHttpRequest; + if (timer.hasOwnProperty("interval")) { + timer.type = "Interval"; + timer.interval = timer.interval > maxTimeout ? 1 : timer.interval; } - var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; - if (supportsActiveX) { - return function () { - return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); - }; + if (timer.hasOwnProperty("animation")) { + timer.type = "AnimationFrame"; + timer.animation = true; } - return false; - } + if (timer.hasOwnProperty("idleCallback")) { + timer.type = "IdleCallback"; + timer.idleCallback = true; + } - var supportsProgress = typeof ProgressEvent !== "undefined"; - var supportsCustomEvent = typeof CustomEvent !== "undefined"; - var supportsFormData = typeof FormData !== "undefined"; - var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - var supportsBlob = typeof Blob === "function"; - var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; - sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - sinonXhr.GlobalActiveXObject = global.ActiveXObject; - sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined"; - sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; - sinonXhr.workingXHR = getWorkingXHR(global); - sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); - - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - Connection: true, - "Content-Length": true, - Cookie: true, - Cookie2: true, - "Content-Transfer-Encoding": true, - Date: true, - Expect: true, - Host: true, - "Keep-Alive": true, - Referer: true, - TE: true, - Trailer: true, - "Transfer-Encoding": true, - Upgrade: true, - "User-Agent": true, - Via: true - }; + if (!clock.timers) { + clock.timers = {}; + } - // An upload object is created for each - // FakeXMLHttpRequest and allows upload - // events to be simulated using uploadProgress - // and uploadError. - function UploadProgress() { - this.eventListeners = { - progress: [], - load: [], - abort: [], - error: [] - }; - } + timer.id = uniqueTimerId++; + timer.createdAt = clock.now; + timer.callAt = + clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0)); - UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { - this.eventListeners[event].push(listener); - }; + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + const res = { + ref: function () { + return res; + }, + unref: function () { + return res; + }, + refresh: function () { + clearTimeout(timer.id); + const args = [timer.func, timer.delay].concat(timer.args); + return setTimeout.apply(null, args); + }, + [Symbol.toPrimitive]: function () { + return timer.id; + }, + }; + return res; + } - UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { - var listeners = this.eventListeners[event] || []; + return timer.id; + } - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] === listener) { - return listeners.splice(i, 1); - } + /* eslint consistent-return: "off" */ + /** + * Timer comparitor + * + * @param {Timer} a + * @param {Timer} b + * @returns {number} + */ + function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; } - }; - UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { - var listeners = this.eventListeners[event.type] || []; + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } - for (var i = 0, listener; (listener = listeners[i]) != null; i++) { - listener(event); + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; } - }; - // Note that for FakeXMLHttpRequest to work pre ES5 - // we lose some of the alignment with the spec. - // To ensure as close a match as possible, - // set responseType before calling open, send or respond; - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - this.upload = new UploadProgress(); - this.responseType = ""; - this.response = ""; - if (sinonXhr.supportsCORS) { - this.withCredentials = false; + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary + } - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; + /** + * @param {Clock} clock + * @param {number} from + * @param {number} to + * + * @returns {Timer} + */ + function firstTimerInRange(clock, from, to) { + const timers = clock.timers; + let timer = null; + let id, isInRange; - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; + for (id in timers) { + if (timers.hasOwnProperty(id)) { + isInRange = inRange(from, to, timers[id]); - if (listener && typeof listener === "function") { - listener.call(this, event); + if ( + isInRange && + (!timer || compareTimers(timer, timers[id]) === 1) + ) { + timer = timers[id]; } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); + } } - if (typeof FakeXMLHttpRequest.onCreate === "function") { - FakeXMLHttpRequest.onCreate(this); - } + return timer; } - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } + /** + * @param {Clock} clock + * @returns {Timer} + */ + function firstTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === 1) { + timer = timers[id]; + } + } } + + return timer; } - function getHeader(headers, header) { - header = header.toLowerCase(); + /** + * @param {Clock} clock + * @returns {Timer} + */ + function lastTimer(clock) { + const timers = clock.timers; + let timer = null; + let id; - for (var h in headers) { - if (h.toLowerCase() === header) { - return h; + for (id in timers) { + if (timers.hasOwnProperty(id)) { + if (!timer || compareTimers(timer, timers[id]) === -1) { + timer = timers[id]; + } } } - return null; + return timer; } - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) { - return; + /** + * @param {Clock} clock + * @param {Timer} timer + */ + function callTimer(clock, timer) { + if (typeof timer.interval === "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; } - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); + if (typeof timer.func === "function") { + timer.func.apply(null, timer.args); + } else { + /* eslint no-eval: "off" */ + const eval2 = eval; + (function () { + eval2(timer.func); + })(); } } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if (callback(collection[index]) === true) { - return true; - } + + /** + * Gets clear handler name for a given timer type + * + * @param {string} ttype + */ + function getClearHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `cancel${ttype}`; } - return false; + return `clear${ttype}`; } - // largest arity in XHR is 5 - XHR#open - var apply = function (obj, method, args) { - switch (args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0], args[1]); - case 3: return obj[method](args[0], args[1], args[2]); - case 4: return obj[method](args[0], args[1], args[2], args[3]); - case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); + + /** + * Gets schedule handler name for a given timer type + * + * @param {string} ttype + */ + function getScheduleHandler(ttype) { + if (ttype === "IdleCallback" || ttype === "AnimationFrame") { + return `request${ttype}`; } - }; + return `set${ttype}`; + } - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function addFilter(fn) { - this.filters.push(fn); - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { - var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + /** + * Creates an anonymous function to warn only once + */ + function createWarnOnce() { + let calls = 0; + return function (msg) { + // eslint-disable-next-line + !calls++ && console.warn(msg); + }; + } + const warnOnce = createWarnOnce(); - each([ - "open", - "setRequestHeader", - "send", - "abort", - "getResponseHeader", - "getAllResponseHeaders", - "addEventListener", - "overrideMimeType", - "removeEventListener" - ], function (method) { - fakeXhr[method] = function () { - return apply(xhr, method, arguments); - }; - }); + /** + * @param {Clock} clock + * @param {number} timerId + * @param {string} ttype + */ + function clearTimer(clock, timerId, ttype) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } - var copyAttrs = function (args) { - each(args, function (attr) { - try { - fakeXhr[attr] = xhr[attr]; - } catch (e) { - if (!IE6Re.test(navigator.userAgent)) { - throw e; - } - } - }); - }; + if (!clock.timers) { + clock.timers = {}; + } - var stateChange = function stateChange() { - fakeXhr.readyState = xhr.readyState; - if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status", "statusText"]); - } - if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText", "response"]); - } - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); + // in Node, the ID is stored as the primitive value for `Timeout` objects + // for `Immediate` objects, no ID exists, so it gets coerced to NaN + const id = Number(timerId); + + if (Number.isNaN(id) || id < idCounterStart) { + const handlerName = getClearHandler(ttype); + + if (clock.shouldClearNativeTimers === true) { + const nativeHandler = clock[`_${handlerName}`]; + return typeof nativeHandler === "function" + ? nativeHandler(timerId) + : undefined; } - if (fakeXhr.onreadystatechange) { - fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); + warnOnce( + `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` + + "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`." + ); + } + + if (clock.timers.hasOwnProperty(id)) { + // check that the ID matches a timer of the correct type + const timer = clock.timers[id]; + if ( + timer.type === ttype || + (timer.type === "Timeout" && ttype === "Interval") || + (timer.type === "Interval" && ttype === "Timeout") + ) { + delete clock.timers[id]; + } else { + const clear = getClearHandler(ttype); + const schedule = getScheduleHandler(timer.type); + throw new Error( + `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()` + ); } - }; + } + } - if (xhr.addEventListener) { - for (var event in fakeXhr.eventListeners) { - if (fakeXhr.eventListeners.hasOwnProperty(event)) { + /** + * @param {Clock} clock + * @param {Config} config + * @returns {Timer[]} + */ + function uninstall(clock, config) { + let method, i, l; + const installedHrTime = "_hrtime"; + const installedNextTick = "_nextTick"; - /*eslint-disable no-loop-func*/ - each(fakeXhr.eventListeners[event], function (handler) { - xhr.addEventListener(event, handler); - }); - /*eslint-enable no-loop-func*/ + for (i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + if (method === "hrtime" && _global.process) { + _global.process.hrtime = clock[installedHrTime]; + } else if (method === "nextTick" && _global.process) { + _global.process.nextTick = clock[installedNextTick]; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + clock, + `_${method}` + ); + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + _global, + method, + originalPerfDescriptor + ); + } else if (originalPerfDescriptor.configurable) { + _global[method] = clock[`_${method}`]; + } + } else { + if (_global[method] && _global[method].hadOwnProperty) { + _global[method] = clock[`_${method}`]; + } else { + try { + delete _global[method]; + } catch (ignore) { + /* eslint no-empty: "off" */ + } } } - xhr.addEventListener("readystatechange", stateChange); - } else { - xhr.onreadystatechange = stateChange; } - apply(xhr, "open", xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - function verifyRequestOpened(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR - " + xhr.readyState); + if (config.shouldAdvanceTime === true) { + _global.clearInterval(clock.attachedInterval); } - } - function verifyRequestSent(xhr) { - if (xhr.readyState === FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); + // Prevent multiple executions which will completely remove these props + clock.methods = []; + + // return pending timers, to enable checking what timers remained on uninstall + if (!clock.timers) { + return []; } + return Object.keys(clock.timers).map(function mapper(key) { + return clock.timers[key]; + }); } - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); + /** + * @param {object} target the target containing the method to replace + * @param {string} method the keyname of the method on the target + * @param {Clock} clock + */ + function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call( + target, + method + ); + clock[`_${method}`] = target[method]; + + if (method === "Date") { + const date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else if (method === "performance") { + const originalPerfDescriptor = Object.getOwnPropertyDescriptor( + target, + method + ); + // JSDOM has a read only performance field so we have to save/copy it differently + if ( + originalPerfDescriptor && + originalPerfDescriptor.get && + !originalPerfDescriptor.set + ) { + Object.defineProperty( + clock, + `_${method}`, + originalPerfDescriptor + ); + + const perfDescriptor = Object.getOwnPropertyDescriptor( + clock, + method + ); + Object.defineProperty(target, method, perfDescriptor); + } else { + target[method] = clock[method]; + } + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + Object.defineProperties( + target[method], + Object.getOwnPropertyDescriptors(clock[method]) + ); } + + target[method].clock = clock; } - function verifyResponseBodyType(body) { - if (typeof body !== "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } + /** + * @param {Clock} clock + * @param {number} advanceTimeDelta + */ + function doIntervalTick(clock, advanceTimeDelta) { + clock.tick(advanceTimeDelta); } - function convertToArrayBuffer(body) { - var buffer = new ArrayBuffer(body.length); - var view = new Uint8Array(buffer); - for (var i = 0; i < body.length; i++) { - var charCode = body.charCodeAt(i); - if (charCode >= 256) { - throw new TypeError("arraybuffer or blob responseTypes require binary string, " + - "invalid character " + body[i] + " found."); - } - view[i] = charCode; - } - return buffer; + /** + * @typedef {object} Timers + * @property {setTimeout} setTimeout + * @property {clearTimeout} clearTimeout + * @property {setInterval} setInterval + * @property {clearInterval} clearInterval + * @property {Date} Date + * @property {SetImmediate=} setImmediate + * @property {function(NodeImmediate): void=} clearImmediate + * @property {function(number[]):number[]=} hrtime + * @property {NextTick=} nextTick + * @property {Performance=} performance + * @property {RequestAnimationFrame=} requestAnimationFrame + * @property {boolean=} queueMicrotask + * @property {function(number): void=} cancelAnimationFrame + * @property {RequestIdleCallback=} requestIdleCallback + * @property {function(number): void=} cancelIdleCallback + */ + + /** @type {Timers} */ + const timers = { + setTimeout: _global.setTimeout, + clearTimeout: _global.clearTimeout, + setInterval: _global.setInterval, + clearInterval: _global.clearInterval, + Date: _global.Date, + }; + + if (setImmediatePresent) { + timers.setImmediate = _global.setImmediate; + timers.clearImmediate = _global.clearImmediate; } - function isXmlContentType(contentType) { - return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType); + if (hrtimePresent) { + timers.hrtime = _global.process.hrtime; } - function convertResponseBody(responseType, contentType, body) { - if (responseType === "" || responseType === "text") { - return body; - } else if (supportsArrayBuffer && responseType === "arraybuffer") { - return convertToArrayBuffer(body); - } else if (responseType === "json") { - try { - return JSON.parse(body); - } catch (e) { - // Return parsing failure as null - return null; - } - } else if (supportsBlob && responseType === "blob") { - var blobOptions = {}; - if (contentType) { - blobOptions.type = contentType; - } - return new Blob([convertToArrayBuffer(body)], blobOptions); - } else if (responseType === "document") { - if (isXmlContentType(contentType)) { - return FakeXMLHttpRequest.parseXML(body); - } - return null; - } - throw new Error("Invalid responseType " + responseType); + if (nextTickPresent) { + timers.nextTick = _global.process.nextTick; } - function clearResponse(xhr) { - if (xhr.responseType === "" || xhr.responseType === "text") { - xhr.response = xhr.responseText = ""; - } else { - xhr.response = xhr.responseText = null; - } - xhr.responseXML = null; + if (performancePresent) { + timers.performance = _global.performance; } - FakeXMLHttpRequest.parseXML = function parseXML(text) { - // Treat empty string as parsing failure - if (text !== "") { - try { - if (typeof DOMParser !== "undefined") { - var parser = new DOMParser(); - return parser.parseFromString(text, "text/xml"); + if (requestAnimationFramePresent) { + timers.requestAnimationFrame = _global.requestAnimationFrame; + } + + if (queueMicrotaskPresent) { + timers.queueMicrotask = true; + } + + if (cancelAnimationFramePresent) { + timers.cancelAnimationFrame = _global.cancelAnimationFrame; + } + + if (requestIdleCallbackPresent) { + timers.requestIdleCallback = _global.requestIdleCallback; + } + + if (cancelIdleCallbackPresent) { + timers.cancelIdleCallback = _global.cancelIdleCallback; + } + + const originalSetTimeout = _global.setImmediate || _global.setTimeout; + + /** + * @param {Date|number} [start] the system time - non-integer values are floored + * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll() + * @returns {Clock} + */ + function createClock(start, loopLimit) { + // eslint-disable-next-line no-param-reassign + start = Math.floor(getEpoch(start)); + // eslint-disable-next-line no-param-reassign + loopLimit = loopLimit || 1000; + let nanos = 0; + const adjustedSystemTime = [0, 0]; // [millis, nanoremainder] + + if (NativeDate === undefined) { + throw new Error( + "The global scope doesn't have a `Date` object" + + " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)" + ); + } + + const clock = { + now: start, + Date: createDate(), + loopLimit: loopLimit, + }; + + clock.Date.clock = clock; + + //eslint-disable-next-line jsdoc/require-jsdoc + function getTimeToNextFrame() { + return 16 - ((clock.now - start) % 16); + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function hrtime(prev) { + const millisSinceStart = clock.now - adjustedSystemTime[0] - start; + const secsSinceStart = Math.floor(millisSinceStart / 1000); + const remainderInNanos = + (millisSinceStart - secsSinceStart * 1e3) * 1e6 + + nanos - + adjustedSystemTime[1]; + + if (Array.isArray(prev)) { + if (prev[1] > 1e9) { + throw new TypeError( + "Number of nanoseconds can't exceed a billion" + ); } - var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - return xmlDoc; - } catch (e) { - // Unable to parse XML - no biggie + + const oldSecs = prev[0]; + let nanoDiff = remainderInNanos - prev[1]; + let secDiff = secsSinceStart - oldSecs; + + if (nanoDiff < 0) { + nanoDiff += 1e9; + secDiff -= 1; + } + + return [secDiff, nanoDiff]; } + return [secsSinceStart, remainderInNanos]; } - return null; - }; + if (hrtimeBigintPresent) { + hrtime.bigint = function () { + const parts = hrtime(); + return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line + }; + } - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; + clock.requestIdleCallback = function requestIdleCallback( + func, + timeout + ) { + let timeToNextIdlePeriod = 0; + + if (clock.countTimers() > 0) { + timeToNextIdlePeriod = 50; // const for now + } + + const result = addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: + typeof timeout === "undefined" + ? timeToNextIdlePeriod + : Math.min(timeout, timeToNextIdlePeriod), + idleCallback: true, + }); + + return Number(result); + }; - function makeApi(sinon) { - sinon.xhr = sinonXhr; - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async === "boolean" ? async : true; - this.username = username; - this.password = password; - clearResponse(this); - this.requestHeaders = {}; - this.sendFlag = false; - - if (FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters, function (filter) { - return filter.apply(this, xhrArgs); + clock.cancelIdleCallback = function cancelIdleCallback(timerId) { + return clearTimer(clock, timerId, "IdleCallback"); + }; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + }); + }; + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setTimeout[ + utilPromisify.custom + ] = function promisifiedSetTimeout(timeout, arg) { + return new _global.Promise(function setTimeoutExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + delay: timeout, }); - if (defake) { - return FakeXMLHttpRequest.defake(this, arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, + }); + }; + } + + clock.clearTimeout = function clearTimeout(timerId) { + return clearTimer(clock, timerId, "Timeout"); + }; + + clock.nextTick = function nextTick(func) { + return enqueueJob(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + error: isNearInfiniteLimit ? new Error() : null, + }); + }; + + clock.queueMicrotask = function queueMicrotask(func) { + return clock.nextTick(func); // explicitly drop additional arguments + }; + + clock.setInterval = function setInterval(func, timeout) { + // eslint-disable-next-line no-param-reassign + timeout = parseInt(timeout, 10); + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout, + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + return clearTimer(clock, timerId, "Interval"); + }; + + if (setImmediatePresent) { + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true, + }); + }; + + if (typeof _global.Promise !== "undefined" && utilPromisify) { + clock.setImmediate[ + utilPromisify.custom + ] = function promisifiedSetImmediate(arg) { + return new _global.Promise(function setImmediateExecutor( + resolve + ) { + addTimer(clock, { + func: resolve, + args: [arg], + immediate: true, + }); + }); + }; + } + + clock.clearImmediate = function clearImmediate(timerId) { + return clearTimer(clock, timerId, "Immediate"); + }; + } + + clock.countTimers = function countTimers() { + return ( + Object.keys(clock.timers || {}).length + + (clock.jobs || []).length + ); + }; + + clock.requestAnimationFrame = function requestAnimationFrame(func) { + const result = addTimer(clock, { + func: func, + delay: getTimeToNextFrame(), + args: [clock.now + getTimeToNextFrame()], + animation: true, + }); + + return Number(result); + }; + + clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) { + return clearTimer(clock, timerId, "AnimationFrame"); + }; + + clock.runMicrotasks = function runMicrotasks() { + runJobs(clock); + }; + + /** + * @param {number|string} tickValue milliseconds or a string parseable by parseTime + * @param {boolean} isAsync + * @param {Function} resolve + * @param {Function} reject + * @returns {number|undefined} will return the new `now` value or nothing for async + */ + function doTick(tickValue, isAsync, resolve, reject) { + const msFloat = + typeof tickValue === "number" + ? tickValue + : parseTime(tickValue); + const ms = Math.floor(msFloat); + const remainder = nanoRemainder(msFloat); + let nanosTotal = nanos + remainder; + let tickTo = clock.now + ms; + + if (msFloat < 0) { + throw new TypeError("Negative ticks are not supported"); + } + + // adjust for positive overflow + if (nanosTotal >= 1e6) { + tickTo += 1; + nanosTotal -= 1e6; + } + + nanos = nanosTotal; + let tickFrom = clock.now; + let previous = clock.now; + // ESLint fails to detect this correctly + /* eslint-disable prefer-const */ + let timer, + firstException, + oldNow, + nextPromiseTick, + compensationCheck, + postTimerCall; + /* eslint-enable prefer-const */ + + clock.duringTick = true; + + // perform microtasks + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during microtask callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + + //eslint-disable-next-line jsdoc/require-jsdoc + function doTickInner() { + // perform each timer in the requested range + timer = firstTimerInRange(clock, tickFrom, tickTo); + // eslint-disable-next-line no-unmodified-loop-condition + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = timer.callAt; + clock.now = timer.callAt; + oldNow = clock.now; + try { + runJobs(clock); + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + + if (isAsync) { + // finish up after native setImmediate callback to allow + // all native es6 promises to process their callbacks after + // each timer fires. + originalSetTimeout(nextPromiseTick); + return; + } + + compensationCheck(); + } + + postTimerCall(); + } + + // perform process.nextTick()s again + oldNow = clock.now; + runJobs(clock); + if (oldNow !== clock.now) { + // compensate for any setSystemTime() call during process.nextTick() callback + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + } + clock.duringTick = false; + + // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo] + timer = firstTimerInRange(clock, tickFrom, tickTo); + if (timer) { + try { + clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range + } catch (e) { + firstException = firstException || e; + } + } else { + // no timers remaining in the requested range: move the clock all the way to the end + clock.now = tickTo; + + // update nanos + nanos = nanosTotal; + } + if (firstException) { + throw firstException; + } + + if (isAsync) { + resolve(clock.now); + } else { + return clock.now; + } + } + + nextPromiseTick = + isAsync && + function () { + try { + compensationCheck(); + postTimerCall(); + doTickInner(); + } catch (e) { + reject(e); + } + }; + + compensationCheck = function () { + // compensate for any setSystemTime() call during timer callback + if (oldNow !== clock.now) { + tickFrom += clock.now - oldNow; + tickTo += clock.now - oldNow; + previous += clock.now - oldNow; + } + }; + + postTimerCall = function () { + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + }; + + return doTickInner(); + } + + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {number} will return the new `now` value + */ + clock.tick = function tick(tickValue) { + return doTick(tickValue, false); + }; + + if (typeof _global.Promise !== "undefined") { + /** + * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15" + * @returns {Promise} + */ + clock.tickAsync = function tickAsync(tickValue) { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + doTick(tickValue, true, resolve, reject); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.next = function next() { + runJobs(clock); + const timer = firstTimer(clock); + if (!timer) { + return clock.now; + } + + clock.duringTick = true; + try { + clock.now = timer.callAt; + callTimer(clock, timer); + runJobs(clock); + return clock.now; + } finally { + clock.duringTick = false; + } + }; + + if (typeof _global.Promise !== "undefined") { + clock.nextAsync = function nextAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = firstTimer(clock); + if (!timer) { + resolve(clock.now); + return; + } + + let err; + clock.duringTick = true; + clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + err = e; + } + clock.duringTick = false; + + originalSetTimeout(function () { + if (err) { + reject(err); + } else { + resolve(clock.now); + } + }); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.runAll = function runAll() { + let numTimers, i; + runJobs(clock); + for (i = 0; i < clock.loopLimit; i++) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + numTimers = Object.keys(clock.timers).length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + return clock.now; + } + + clock.next(); + checkIsNearInfiniteLimit(clock, i); + } + + const excessJob = firstTimer(clock); + throw getInfiniteLoopError(clock, excessJob); + }; + + clock.runToFrame = function runToFrame() { + return clock.tick(getTimeToNextFrame()); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runAllAsync = function runAllAsync() { + return new _global.Promise(function (resolve, reject) { + let i = 0; + /** + * + */ + function doRun() { + originalSetTimeout(function () { + try { + let numTimers; + if (i < clock.loopLimit) { + if (!clock.timers) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + numTimers = Object.keys(clock.timers) + .length; + if (numTimers === 0) { + resetIsNearInfiniteLimit(); + resolve(clock.now); + return; + } + + clock.next(); + + i++; + + doRun(); + checkIsNearInfiniteLimit(clock, i); + return; + } + + const excessJob = firstTimer(clock); + reject(getInfiniteLoopError(clock, excessJob)); + } catch (e) { + reject(e); + } + }); + } + doRun(); + }); + }; + } + + clock.runToLast = function runToLast() { + const timer = lastTimer(clock); + if (!timer) { + runJobs(clock); + return clock.now; + } + + return clock.tick(timer.callAt - clock.now); + }; + + if (typeof _global.Promise !== "undefined") { + clock.runToLastAsync = function runToLastAsync() { + return new _global.Promise(function (resolve, reject) { + originalSetTimeout(function () { + try { + const timer = lastTimer(clock); + if (!timer) { + resolve(clock.now); + } + + resolve(clock.tickAsync(timer.callAt)); + } catch (e) { + reject(e); + } + }); + }); + }; + } + + clock.reset = function reset() { + nanos = 0; + clock.timers = {}; + clock.jobs = []; + clock.now = start; + }; + + clock.setSystemTime = function setSystemTime(systemTime) { + // determine time difference + const newNow = getEpoch(systemTime); + const difference = newNow - clock.now; + let id, timer; + + adjustedSystemTime[0] = adjustedSystemTime[0] + difference; + adjustedSystemTime[1] = adjustedSystemTime[1] + nanos; + // update 'system clock' + clock.now = newNow; + nanos = 0; + + // update timers and intervals to keep them stable + for (id in clock.timers) { + if (clock.timers.hasOwnProperty(id)) { + timer = clock.timers[id]; + timer.createdAt += difference; + timer.callAt += difference; + } + } + }; + + if (performancePresent) { + clock.performance = Object.create(null); + clock.performance.now = function FakeTimersNow() { + const hrt = hrtime(); + const millis = hrt[0] * 1000 + hrt[1] / 1e6; + return millis; + }; + } + + if (hrtimePresent) { + clock.hrtime = hrtime; + } + + return clock; + } + + /* eslint-disable complexity */ + + /** + * @param {Config=} [config] Optional config + * @returns {Clock} + */ + function install(config) { + if ( + arguments.length > 1 || + config instanceof Date || + Array.isArray(config) || + typeof config === "number" + ) { + throw new TypeError( + `FakeTimers.install called with ${String( + config + )} install requires an object parameter` + ); + } + + // eslint-disable-next-line no-param-reassign + config = typeof config !== "undefined" ? config : {}; + config.shouldAdvanceTime = config.shouldAdvanceTime || false; + config.advanceTimeDelta = config.advanceTimeDelta || 20; + config.shouldClearNativeTimers = + config.shouldClearNativeTimers || false; + + if (config.target) { + throw new TypeError( + "config.target is no longer supported. Use `withGlobal(target)` instead." + ); + } + + let i, l; + const clock = createClock(config.now, config.loopLimit); + clock.shouldClearNativeTimers = config.shouldClearNativeTimers; + + clock.uninstall = function () { + return uninstall(clock, config); + }; + + clock.methods = config.toFake || []; + + if (clock.methods.length === 0) { + // do not fake nextTick by default - GitHub#126 + clock.methods = Object.keys(timers).filter(function (key) { + return key !== "nextTick" && key !== "queueMicrotask"; + }); + } + + if (config.shouldAdvanceTime === true) { + const intervalTick = doIntervalTick.bind( + null, + clock, + config.advanceTimeDelta + ); + const intervalId = _global.setInterval( + intervalTick, + config.advanceTimeDelta + ); + clock.attachedInterval = intervalId; + } + + if (clock.methods.includes("performance")) { + const proto = (() => { + if (hasPerformancePrototype) { + return _global.Performance.prototype; + } + if (hasPerformanceConstructorPrototype) { + return _global.performance.constructor.prototype; + } + })(); + if (proto) { + Object.getOwnPropertyNames(proto).forEach(function (name) { + if (name !== "now") { + clock.performance[name] = + name.indexOf("getEntries") === 0 + ? NOOP_ARRAY + : NOOP; + } + }); + } else if ((config.toFake || []).includes("performance")) { + // user explicitly tried to fake performance when not present + throw new ReferenceError( + "non-existent performance object cannot be faked" + ); + } + } + + for (i = 0, l = clock.methods.length; i < l; i++) { + const nameOfMethodToReplace = clock.methods[i]; + if (nameOfMethodToReplace === "hrtime") { + if ( + _global.process && + typeof _global.process.hrtime === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else if (nameOfMethodToReplace === "nextTick") { + if ( + _global.process && + typeof _global.process.nextTick === "function" + ) { + hijackMethod(_global.process, nameOfMethodToReplace, clock); + } + } else { + hijackMethod(_global, nameOfMethodToReplace, clock); + } + } + + return clock; + } + + /* eslint-enable complexity */ + + return { + timers: timers, + createClock: createClock, + install: install, + withGlobal: withGlobal, + }; +} + +/** + * @typedef {object} FakeTimers + * @property {Timers} timers + * @property {createClock} createClock + * @property {Function} install + * @property {withGlobal} withGlobal + */ + +/* eslint-enable complexity */ + +/** @type {FakeTimers} */ +const defaultImplementation = withGlobal(globalObject); + +exports.timers = defaultImplementation.timers; +exports.createClock = defaultImplementation.createClock; +exports.install = defaultImplementation.install; +exports.withGlobal = withGlobal; + +},{"@sinonjs/commons":46,"util":91}],59:[function(require,module,exports){ +"use strict"; + +var ARRAY_TYPES = [ + Array, + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, +]; + +module.exports = ARRAY_TYPES; + +},{}],60:[function(require,module,exports){ +"use strict"; + +var arrayProto = require("@sinonjs/commons").prototypes.array; +var deepEqual = require("./deep-equal").use(createMatcher); // eslint-disable-line no-use-before-define +var every = require("@sinonjs/commons").every; +var functionName = require("@sinonjs/commons").functionName; +var get = require("lodash.get"); +var iterableToString = require("./iterable-to-string"); +var objectProto = require("@sinonjs/commons").prototypes.object; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var assertMatcher = require("./create-matcher/assert-matcher"); +var assertMethodExists = require("./create-matcher/assert-method-exists"); +var assertType = require("./create-matcher/assert-type"); +var isIterable = require("./create-matcher/is-iterable"); +var isMatcher = require("./create-matcher/is-matcher"); + +var matcherPrototype = require("./create-matcher/matcher-prototype"); + +var arrayIndexOf = arrayProto.indexOf; +var some = arrayProto.some; + +var hasOwnProperty = objectProto.hasOwnProperty; +var objectToString = objectProto.toString; + +var TYPE_MAP = require("./create-matcher/type-map")(createMatcher); // eslint-disable-line no-use-before-define + +/** + * Creates a matcher object for the passed expectation + * + * @alias module:samsam.createMatcher + * @param {*} expectation An expecttation + * @param {string} message A message for the expectation + * @returns {object} A matcher object + */ +function createMatcher(expectation, message) { + var m = Object.create(matcherPrototype); + var type = typeOf(expectation); + + if (message !== undefined && typeof message !== "string") { + throw new TypeError("Message should be a string"); + } + + if (arguments.length > 2) { + throw new TypeError( + `Expected 1 or 2 arguments, received ${arguments.length}` + ); + } + + if (type in TYPE_MAP) { + TYPE_MAP[type](m, expectation, message); + } else { + m.test = function (actual) { + return deepEqual(actual, expectation); + }; + } + + if (!m.message) { + m.message = `match(${valueToString(expectation)})`; + } + + return m; +} + +createMatcher.isMatcher = isMatcher; + +createMatcher.any = createMatcher(function () { + return true; +}, "any"); + +createMatcher.defined = createMatcher(function (actual) { + return actual !== null && actual !== undefined; +}, "defined"); + +createMatcher.truthy = createMatcher(function (actual) { + return Boolean(actual); +}, "truthy"); + +createMatcher.falsy = createMatcher(function (actual) { + return !actual; +}, "falsy"); + +createMatcher.same = function (expectation) { + return createMatcher(function (actual) { + return expectation === actual; + }, `same(${valueToString(expectation)})`); +}; + +createMatcher.in = function (arrayOfExpectations) { + if (typeOf(arrayOfExpectations) !== "array") { + throw new TypeError("array expected"); + } + + return createMatcher(function (actual) { + return some(arrayOfExpectations, function (expectation) { + return expectation === actual; + }); + }, `in(${valueToString(arrayOfExpectations)})`); +}; + +createMatcher.typeOf = function (type) { + assertType(type, "string", "type"); + return createMatcher(function (actual) { + return typeOf(actual) === type; + }, `typeOf("${type}")`); +}; + +createMatcher.instanceOf = function (type) { + /* istanbul ignore if */ + if ( + typeof Symbol === "undefined" || + typeof Symbol.hasInstance === "undefined" + ) { + assertType(type, "function", "type"); + } else { + assertMethodExists( + type, + Symbol.hasInstance, + "type", + "[Symbol.hasInstance]" + ); + } + return createMatcher(function (actual) { + return actual instanceof type; + }, `instanceOf(${functionName(type) || objectToString(type)})`); +}; + +/** + * Creates a property matcher + * + * @private + * @param {Function} propertyTest A function to test the property against a value + * @param {string} messagePrefix A prefix to use for messages generated by the matcher + * @returns {object} A matcher + */ +function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `${messagePrefix}("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + !propertyTest(actual, property) + ) { + return false; + } + return onlyProperty || deepEqual(actual[property], value); + }, message); + }; +} + +createMatcher.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; +}, "has"); + +createMatcher.hasOwn = createPropertyMatcher(function (actual, property) { + return hasOwnProperty(actual, property); +}, "hasOwn"); + +createMatcher.hasNested = function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = `hasNested("${property}"`; + if (!onlyProperty) { + message += `, ${valueToString(value)}`; + } + message += ")"; + return createMatcher(function (actual) { + if ( + actual === undefined || + actual === null || + get(actual, property) === undefined + ) { + return false; + } + return onlyProperty || deepEqual(get(actual, property), value); + }, message); +}; + +var jsonParseResultTypes = { + null: true, + boolean: true, + number: true, + string: true, + object: true, + array: true, +}; +createMatcher.json = function (value) { + if (!jsonParseResultTypes[typeOf(value)]) { + throw new TypeError("Value cannot be the result of JSON.parse"); + } + var message = `json(${JSON.stringify(value, null, " ")})`; + return createMatcher(function (actual) { + var parsed; + try { + parsed = JSON.parse(actual); + } catch (e) { + return false; + } + return deepEqual(parsed, value); + }, message); +}; + +createMatcher.every = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return every(Object.keys(actual), function (key) { + return predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + every(actual, function (element) { + return predicate.test(element); + }) + ); + }, `every(${predicate.message})`); +}; + +createMatcher.some = function (predicate) { + assertMatcher(predicate); + + return createMatcher(function (actual) { + if (typeOf(actual) === "object") { + return !every(Object.keys(actual), function (key) { + return !predicate.test(actual[key]); + }); + } + + return ( + isIterable(actual) && + !every(actual, function (element) { + return !predicate.test(element); + }) + ); + }, `some(${predicate.message})`); +}; + +createMatcher.array = createMatcher.typeOf("array"); + +createMatcher.array.deepEquals = function (expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.length === expectation.length; + return ( + typeOf(actual) === "array" && + sameLength && + every(actual, function (element, index) { + var expected = expectation[index]; + return typeOf(expected) === "array" && + typeOf(element) === "array" + ? createMatcher.array.deepEquals(expected).test(element) + : deepEqual(expected, element); + }) + ); + }, `deepEquals([${iterableToString(expectation)}])`); +}; + +createMatcher.array.startsWith = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[index] === expectedElement; + }) + ); + }, `startsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.endsWith = function (expectation) { + return createMatcher(function (actual) { + // This indicates the index in which we should start matching + var offset = actual.length - expectation.length; + + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement, index) { + return actual[offset + index] === expectedElement; + }) + ); + }, `endsWith([${iterableToString(expectation)}])`); +}; + +createMatcher.array.contains = function (expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "array" && + every(expectation, function (expectedElement) { + return arrayIndexOf(actual, expectedElement) !== -1; + }) + ); + }, `contains([${iterableToString(expectation)}])`); +}; + +createMatcher.map = createMatcher.typeOf("map"); + +createMatcher.map.deepEquals = function mapDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "map" && + sameLength && + every(actual, function (element, key) { + return expectation.has(key) && expectation.get(key) === element; + }) + ); + }, `deepEquals(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.map.contains = function mapContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "map" && + every(expectation, function (element, key) { + return actual.has(key) && actual.get(key) === element; + }) + ); + }, `contains(Map[${iterableToString(expectation)}])`); +}; + +createMatcher.set = createMatcher.typeOf("set"); + +createMatcher.set.deepEquals = function setDeepEquals(expectation) { + return createMatcher(function (actual) { + // Comparing lengths is the fastest way to spot a difference before iterating through every item + var sameLength = actual.size === expectation.size; + return ( + typeOf(actual) === "set" && + sameLength && + every(actual, function (element) { + return expectation.has(element); + }) + ); + }, `deepEquals(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.set.contains = function setContains(expectation) { + return createMatcher(function (actual) { + return ( + typeOf(actual) === "set" && + every(expectation, function (element) { + return actual.has(element); + }) + ); + }, `contains(Set[${iterableToString(expectation)}])`); +}; + +createMatcher.bool = createMatcher.typeOf("boolean"); +createMatcher.number = createMatcher.typeOf("number"); +createMatcher.string = createMatcher.typeOf("string"); +createMatcher.object = createMatcher.typeOf("object"); +createMatcher.func = createMatcher.typeOf("function"); +createMatcher.regexp = createMatcher.typeOf("regexp"); +createMatcher.date = createMatcher.typeOf("date"); +createMatcher.symbol = createMatcher.typeOf("symbol"); + +module.exports = createMatcher; + +},{"./create-matcher/assert-matcher":61,"./create-matcher/assert-method-exists":62,"./create-matcher/assert-type":63,"./create-matcher/is-iterable":64,"./create-matcher/is-matcher":65,"./create-matcher/matcher-prototype":67,"./create-matcher/type-map":68,"./deep-equal":69,"./iterable-to-string":83,"@sinonjs/commons":46,"lodash.get":94}],61:[function(require,module,exports){ +"use strict"; + +var isMatcher = require("./is-matcher"); + +/** + * Throws a TypeError when `value` is not a matcher + * + * @private + * @param {*} value The value to examine + */ +function assertMatcher(value) { + if (!isMatcher(value)) { + throw new TypeError("Matcher expected"); + } +} + +module.exports = assertMatcher; + +},{"./is-matcher":65}],62:[function(require,module,exports){ +"use strict"; + +/** + * Throws a TypeError when expected method doesn't exist + * + * @private + * @param {*} value A value to examine + * @param {string} method The name of the method to look for + * @param {name} name A name to use for the error message + * @param {string} methodPath The name of the method to use for error messages + * @throws {TypeError} When the method doesn't exist + */ +function assertMethodExists(value, method, name, methodPath) { + if (value[method] === null || value[method] === undefined) { + throw new TypeError(`Expected ${name} to have method ${methodPath}`); + } +} + +module.exports = assertMethodExists; + +},{}],63:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Ensures that value is of type + * + * @private + * @param {*} value A value to examine + * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string" + * @param {string} name A string to use for the error message + * @throws {TypeError} If value is not of the expected type + * @returns {undefined} + */ +function assertType(value, type, name) { + var actual = typeOf(value); + if (actual !== type) { + throw new TypeError( + `Expected type of ${name} to be ${type}, but was ${actual}` + ); + } +} + +module.exports = assertType; + +},{"@sinonjs/commons":46}],64:[function(require,module,exports){ +"use strict"; + +var typeOf = require("@sinonjs/commons").typeOf; + +/** + * Returns `true` for iterables + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` looks like an iterable + */ +function isIterable(value) { + return Boolean(value) && typeOf(value.forEach) === "function"; +} + +module.exports = isIterable; + +},{"@sinonjs/commons":46}],65:[function(require,module,exports){ +"use strict"; + +var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf; + +var matcherPrototype = require("./matcher-prototype"); + +/** + * Returns `true` when `object` is a matcher + * + * @private + * @param {*} object A value to examine + * @returns {boolean} Returns `true` when `object` is a matcher + */ +function isMatcher(object) { + return isPrototypeOf(matcherPrototype, object); +} + +module.exports = isMatcher; + +},{"./matcher-prototype":67,"@sinonjs/commons":46}],66:[function(require,module,exports){ +"use strict"; + +var every = require("@sinonjs/commons").prototypes.array.every; +var concat = require("@sinonjs/commons").prototypes.array.concat; +var typeOf = require("@sinonjs/commons").typeOf; + +var deepEqualFactory = require("../deep-equal").use; + +var isMatcher = require("./is-matcher"); + +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Matches `actual` with `expectation` + * + * @private + * @param {*} actual A value to examine + * @param {object} expectation An object with properties to match on + * @param {object} matcher A matcher to use for comparison + * @returns {boolean} Returns true when `actual` matches all properties in `expectation` + */ +function matchObject(actual, expectation, matcher) { + var deepEqual = deepEqualFactory(matcher); + if (actual === null || actual === undefined) { + return false; + } + + var expectedKeys = keys(expectation); + /* istanbul ignore else: cannot collect coverage for engine that doesn't support Symbol */ + if (typeOf(getOwnPropertySymbols) === "function") { + expectedKeys = concat(expectedKeys, getOwnPropertySymbols(expectation)); + } + + return every(expectedKeys, function (key) { + var exp = expectation[key]; + var act = actual[key]; + + if (isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (typeOf(exp) === "object") { + if (!matchObject(act, exp, matcher)) { + return false; + } + } else if (!deepEqual(act, exp)) { + return false; + } + + return true; + }); +} + +module.exports = matchObject; + +},{"../deep-equal":69,"./is-matcher":65,"@sinonjs/commons":46}],67:[function(require,module,exports){ +"use strict"; + +var matcherPrototype = { + toString: function () { + return this.message; + }, +}; + +matcherPrototype.or = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var or = Object.create(matcherPrototype); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = `${m1.message}.or(${m2.message})`; + return or; +}; + +matcherPrototype.and = function (valueOrMatcher) { + var createMatcher = require("../create-matcher"); + var isMatcher = createMatcher.isMatcher; + + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } + + var m2 = isMatcher(valueOrMatcher) + ? valueOrMatcher + : createMatcher(valueOrMatcher); + var m1 = this; + var and = Object.create(matcherPrototype); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = `${m1.message}.and(${m2.message})`; + return and; +}; + +module.exports = matcherPrototype; + +},{"../create-matcher":60}],68:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var join = require("@sinonjs/commons").prototypes.array.join; +var map = require("@sinonjs/commons").prototypes.array.map; +var stringIndexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var valueToString = require("@sinonjs/commons").valueToString; + +var matchObject = require("./match-object"); + +var createTypeMap = function (match) { + return { + function: function (m, expectation, message) { + m.test = expectation; + m.message = message || `match(${functionName(expectation)})`; + }, + number: function (m, expectation) { + m.test = function (actual) { + // we need type coercion here + return expectation == actual; // eslint-disable-line eqeqeq + }; + }, + object: function (m, expectation) { + var array = []; + + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = `match(${functionName(expectation.test)})`; + return m; + } + + array = map(Object.keys(expectation), function (key) { + return `${key}: ${valueToString(expectation[key])}`; + }); + + m.test = function (actual) { + return matchObject(actual, expectation, match); + }; + m.message = `match(${join(array, ", ")})`; + + return m; + }, + regexp: function (m, expectation) { + m.test = function (actual) { + return typeof actual === "string" && expectation.test(actual); + }; + }, + string: function (m, expectation) { + m.test = function (actual) { + return ( + typeof actual === "string" && + stringIndexOf(actual, expectation) !== -1 + ); + }; + m.message = `match("${expectation}")`; + }, + }; +}; + +module.exports = createTypeMap; + +},{"./match-object":66,"@sinonjs/commons":46}],69:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var className = require("@sinonjs/commons").className; +var typeOf = require("@sinonjs/commons").typeOf; +var arrayProto = require("@sinonjs/commons").prototypes.array; +var objectProto = require("@sinonjs/commons").prototypes.object; +var mapForEach = require("@sinonjs/commons").prototypes.map.forEach; + +var getClass = require("./get-class"); +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isArrayType = require("./is-array-type"); +var isDate = require("./is-date"); +var isElement = require("./is-element"); +var isIterable = require("./is-iterable"); +var isMap = require("./is-map"); +var isNaN = require("./is-nan"); +var isObject = require("./is-object"); +var isSet = require("./is-set"); +var isSubset = require("./is-subset"); + +var concat = arrayProto.concat; +var every = arrayProto.every; +var push = arrayProto.push; + +var getTime = Date.prototype.getTime; +var hasOwnProperty = objectProto.hasOwnProperty; +var indexOf = arrayProto.indexOf; +var keys = Object.keys; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; + +/** + * Deep equal comparison. Two values are "deep equal" when: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``actual`` is deepEqual to the corresponding property in ``expectation`` + * + * Supports cyclic objects. + * + * @alias module:samsam.deepEqual + * @param {*} actual The object to examine + * @param {*} expectation The object actual is expected to be equal to + * @param {object} match A value to match on + * @returns {boolean} Returns true when actual and expectation are considered equal + */ +function deepEqualCyclic(actual, expectation, match) { + // used for cyclic comparison + // contain already visited objects + var actualObjects = []; + var expectationObjects = []; + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + var actualPaths = []; + var expectationPaths = []; + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + var compared = {}; + + // does the recursion for the deep equal check + // eslint-disable-next-line complexity + return (function deepEqual( + actualObj, + expectationObj, + actualPath, + expectationPath + ) { + // If both are matchers they must be the same instance in order to be + // considered equal If we didn't do that we would end up running one + // matcher against the other + if (match && match.isMatcher(expectationObj)) { + if (match.isMatcher(actualObj)) { + return actualObj === expectationObj; + } + return expectationObj.test(actualObj); + } + + var actualType = typeof actualObj; + var expectationType = typeof expectationObj; + + if ( + actualObj === expectationObj || + isNaN(actualObj) || + isNaN(expectationObj) || + actualObj === null || + expectationObj === null || + actualObj === undefined || + expectationObj === undefined || + actualType !== "object" || + expectationType !== "object" + ) { + return identical(actualObj, expectationObj); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(actualObj) || isElement(expectationObj)) { + return false; + } + + var isActualDate = isDate(actualObj); + var isExpectationDate = isDate(expectationObj); + if (isActualDate || isExpectationDate) { + if ( + !isActualDate || + !isExpectationDate || + getTime.call(actualObj) !== getTime.call(expectationObj) + ) { + return false; + } + } + + if (actualObj instanceof RegExp && expectationObj instanceof RegExp) { + if (valueToString(actualObj) !== valueToString(expectationObj)) { + return false; + } + } + + if (actualObj instanceof Promise && expectationObj instanceof Promise) { + return actualObj === expectationObj; + } + + if (actualObj instanceof Error && expectationObj instanceof Error) { + return actualObj === expectationObj; + } + + var actualClass = getClass(actualObj); + var expectationClass = getClass(expectationObj); + var actualKeys = keys(actualObj); + var expectationKeys = keys(expectationObj); + var actualName = className(actualObj); + var expectationName = className(expectationObj); + var expectationSymbols = + typeOf(getOwnPropertySymbols) === "function" + ? getOwnPropertySymbols(expectationObj) + : /* istanbul ignore next: cannot collect coverage for engine that doesn't support Symbol */ + []; + var expectationKeysAndSymbols = concat( + expectationKeys, + expectationSymbols + ); + + if (isArguments(actualObj) || isArguments(expectationObj)) { + if (actualObj.length !== expectationObj.length) { + return false; + } + } else { + if ( + actualType !== expectationType || + actualClass !== expectationClass || + actualKeys.length !== expectationKeys.length || + (actualName && + expectationName && + actualName !== expectationName) + ) { + return false; + } + } + + if (isSet(actualObj) || isSet(expectationObj)) { + if ( + !isSet(actualObj) || + !isSet(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + return isSubset(actualObj, expectationObj, deepEqual); + } + + if (isMap(actualObj) || isMap(expectationObj)) { + if ( + !isMap(actualObj) || + !isMap(expectationObj) || + actualObj.size !== expectationObj.size + ) { + return false; + } + + var mapsDeeplyEqual = true; + mapForEach(actualObj, function (value, key) { + mapsDeeplyEqual = + mapsDeeplyEqual && + deepEqualCyclic(value, expectationObj.get(key)); + }); + + return mapsDeeplyEqual; + } + + var isActualNonArrayIterable = + isIterable(actualObj) && + !isArrayType(actualObj) && + !isArguments(actualObj); + var isExpectationNonArrayIterable = + isIterable(expectation) && + !isArrayType(expectation) && + !isArguments(expectation); + if (isActualNonArrayIterable || isExpectationNonArrayIterable) { + var actualArray = Array.from(actualObj); + var expectationArray = Array.from(expectation); + if (actualArray.length !== expectationArray.length) { + return false; + } + + var arrayDeeplyEquals = true; + every(actualArray, function (key) { + arrayDeeplyEquals = + arrayDeeplyEquals && + deepEqualCyclic(actualArray[key], expectationArray[key]); + }); + + return arrayDeeplyEquals; + } + + return every(expectationKeysAndSymbols, function (key) { + if (!hasOwnProperty(actualObj, key)) { + return false; + } + + var actualValue = actualObj[key]; + var expectationValue = expectationObj[key]; + var actualObject = isObject(actualValue); + var expectationObject = isObject(expectationValue); + // determines, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + var actualIndex = actualObject + ? indexOf(actualObjects, actualValue) + : -1; + var expectationIndex = expectationObject + ? indexOf(expectationObjects, expectationValue) + : -1; + // determines the new paths of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + var newActualPath = + actualIndex !== -1 + ? actualPaths[actualIndex] + : `${actualPath}[${JSON.stringify(key)}]`; + var newExpectationPath = + expectationIndex !== -1 + ? expectationPaths[expectationIndex] + : `${expectationPath}[${JSON.stringify(key)}]`; + var combinedPath = newActualPath + newExpectationPath; + + // stop recursion if current objects are already compared + if (compared[combinedPath]) { + return true; + } + + // remember the current objects and their paths + if (actualIndex === -1 && actualObject) { + push(actualObjects, actualValue); + push(actualPaths, newActualPath); + } + if (expectationIndex === -1 && expectationObject) { + push(expectationObjects, expectationValue); + push(expectationPaths, newExpectationPath); + } + + // remember that the current objects are already compared + if (actualObject && expectationObject) { + compared[combinedPath] = true; + } + + // End of cyclic logic + + // neither actualValue nor expectationValue is a cycle + // continue with next level + return deepEqual( + actualValue, + expectationValue, + newActualPath, + newExpectationPath + ); + }); + })(actual, expectation, "$1", "$2"); +} + +deepEqualCyclic.use = function (match) { + return function deepEqual(a, b) { + return deepEqualCyclic(a, b, match); + }; +}; + +module.exports = deepEqualCyclic; + +},{"./get-class":70,"./identical":71,"./is-arguments":72,"./is-array-type":73,"./is-date":74,"./is-element":75,"./is-iterable":76,"./is-map":77,"./is-nan":78,"./is-object":80,"./is-set":81,"./is-subset":82,"@sinonjs/commons":46}],70:[function(require,module,exports){ +"use strict"; + +var toString = require("@sinonjs/commons").prototypes.object.toString; + +/** + * Returns the internal `Class` by calling `Object.prototype.toString` + * with the provided value as `this`. Return value is a `String`, naming the + * internal class, e.g. "Array" + * + * @private + * @param {*} value - Any value + * @returns {string} - A string representation of the `Class` of `value` + */ +function getClass(value) { + return toString(value).split(/[ \]]/)[1]; +} + +module.exports = getClass; + +},{"@sinonjs/commons":46}],71:[function(require,module,exports){ +"use strict"; + +var isNaN = require("./is-nan"); +var isNegZero = require("./is-neg-zero"); + +/** + * Strict equality check according to EcmaScript Harmony's `egal`. + * + * **From the Harmony wiki:** + * > An `egal` function simply makes available the internal `SameValue` function + * > from section 9.12 of the ES5 spec. If two values are egal, then they are not + * > observably distinguishable. + * + * `identical` returns `true` when `===` is `true`, except for `-0` and + * `+0`, where it returns `false`. Additionally, it returns `true` when + * `NaN` is compared to itself. + * + * @alias module:samsam.identical + * @param {*} obj1 The first value to compare + * @param {*} obj2 The second value to compare + * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise + */ +function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + + return false; +} + +module.exports = identical; + +},{"./is-nan":78,"./is-neg-zero":79}],72:[function(require,module,exports){ +"use strict"; + +var getClass = require("./get-class"); + +/** + * Returns `true` when `object` is an `arguments` object, `false` otherwise + * + * @alias module:samsam.isArguments + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an `arguments` object + */ +function isArguments(object) { + return getClass(object) === "Arguments"; +} + +module.exports = isArguments; + +},{"./get-class":70}],73:[function(require,module,exports){ +"use strict"; + +var functionName = require("@sinonjs/commons").functionName; +var indexOf = require("@sinonjs/commons").prototypes.array.indexOf; +var map = require("@sinonjs/commons").prototypes.array.map; +var ARRAY_TYPES = require("./array-types"); +var type = require("type-detect"); + +/** + * Returns `true` when `object` is an array type, `false` otherwise + * + * @param {*} object - The object to examine + * @returns {boolean} `true` when `object` is an array type + * @private + */ +function isArrayType(object) { + return indexOf(map(ARRAY_TYPES, functionName), type(object)) !== -1; +} + +module.exports = isArrayType; + +},{"./array-types":59,"@sinonjs/commons":46,"type-detect":110}],74:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is an instance of Date + * + * @private + * @param {Date} value The value to examine + * @returns {boolean} `true` when `value` is an instance of Date + */ +function isDate(value) { + return value instanceof Date; +} + +module.exports = isDate; + +},{}],75:[function(require,module,exports){ +"use strict"; + +var div = typeof document !== "undefined" && document.createElement("div"); + +/** + * Returns `true` when `object` is a DOM element node. + * + * Unlike Underscore.js/lodash, this function will return `false` if `object` + * is an *element-like* object, i.e. a regular object with a `nodeType` + * property that holds the value `1`. + * + * @alias module:samsam.isElement + * @param {object} object The object to examine + * @returns {boolean} Returns `true` for DOM element nodes + */ +function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { + return false; + } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; +} + +module.exports = isElement; + +},{}],76:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an iterable, `false` otherwise + * + * @alias module:samsam.isIterable + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise + */ +function isIterable(val) { + // checks for null and undefined + if (typeof val !== "object") { + return false; + } + return typeof val[Symbol.iterator] === "function"; +} + +module.exports = isIterable; + +},{}],77:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is a Map + * + * @param {*} value A value to examine + * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise + * @private + */ +function isMap(value) { + return typeof Map !== "undefined" && value instanceof Map; +} + +module.exports = isMap; + +},{}],78:[function(require,module,exports){ +"use strict"; + +/** + * Compares a `value` to `NaN` + * + * @private + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `NaN` + */ +function isNaN(value) { + // Unlike global `isNaN`, this function avoids type coercion + // `typeof` check avoids IE host object issues, hat tip to + // lodash + + // eslint-disable-next-line no-self-compare + return typeof value === "number" && value !== value; +} + +module.exports = isNaN; + +},{}],79:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when `value` is `-0` + * + * @alias module:samsam.isNegZero + * @param {*} value A value to examine + * @returns {boolean} Returns `true` when `value` is `-0` + */ +function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; +} + +module.exports = isNegZero; + +},{}],80:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the value is a regular Object and not a specialized Object + * + * This helps speed up deepEqual cyclic checks + * + * The premise is that only Objects are stored in the visited array. + * So if this function returns false, we don't have to do the + * expensive operation of searching for the value in the the array of already + * visited objects + * + * @private + * @param {object} value The object to examine + * @returns {boolean} `true` when the object is a non-specialised object + */ +function isObject(value) { + return ( + typeof value === "object" && + value !== null && + // none of these are collection objects, so we can return false + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Error) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String) + ); +} + +module.exports = isObject; + +},{}],81:[function(require,module,exports){ +"use strict"; + +/** + * Returns `true` when the argument is an instance of Set, `false` otherwise + * + * @alias module:samsam.isSet + * @param {*} val - A value to examine + * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise + */ +function isSet(val) { + return (typeof Set !== "undefined" && val instanceof Set) || false; +} + +module.exports = isSet; + +},{}],82:[function(require,module,exports){ +"use strict"; + +var forEach = require("@sinonjs/commons").prototypes.set.forEach; + +/** + * Returns `true` when `s1` is a subset of `s2`, `false` otherwise + * + * @private + * @param {Array|Set} s1 The target value + * @param {Array|Set} s2 The containing value + * @param {Function} compare A comparison function, should return `true` when + * values are considered equal + * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise + */ +function isSubset(s1, s2, compare) { + var allContained = true; + forEach(s1, function (v1) { + var includes = false; + forEach(s2, function (v2) { + if (compare(v2, v1)) { + includes = true; + } + }); + allContained = allContained && includes; + }); + + return allContained; +} + +module.exports = isSubset; + +},{"@sinonjs/commons":46}],83:[function(require,module,exports){ +"use strict"; + +var slice = require("@sinonjs/commons").prototypes.string.slice; +var typeOf = require("@sinonjs/commons").typeOf; +var valueToString = require("@sinonjs/commons").valueToString; + +/** + * Creates a string represenation of an iterable object + * + * @private + * @param {object} obj The iterable object to stringify + * @returns {string} A string representation + */ +function iterableToString(obj) { + if (typeOf(obj) === "map") { + return mapToString(obj); + } + + return genericIterableToString(obj); +} + +/** + * Creates a string representation of a Map + * + * @private + * @param {Map} map The map to stringify + * @returns {string} A string representation + */ +function mapToString(map) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + map.forEach(function (value, key) { + representation += `[${stringify(key)},${stringify(value)}],`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Create a string represenation for an iterable + * + * @private + * @param {object} iterable The iterable to stringify + * @returns {string} A string representation + */ +function genericIterableToString(iterable) { + var representation = ""; + + // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods + iterable.forEach(function (value) { + representation += `${stringify(value)},`; + }); + + representation = slice(representation, 0, -1); + return representation; +} + +/** + * Creates a string representation of the passed `item` + * + * @private + * @param {object} item The item to stringify + * @returns {string} A string representation of `item` + */ +function stringify(item) { + return typeof item === "string" ? `'${item}'` : valueToString(item); +} + +module.exports = iterableToString; + +},{"@sinonjs/commons":46}],84:[function(require,module,exports){ +"use strict"; + +var valueToString = require("@sinonjs/commons").valueToString; +var indexOf = require("@sinonjs/commons").prototypes.string.indexOf; +var forEach = require("@sinonjs/commons").prototypes.array.forEach; +var type = require("type-detect"); + +var engineCanCompareMaps = typeof Array.from === "function"; +var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define +var isArrayType = require("./is-array-type"); +var isSubset = require("./is-subset"); +var createMatcher = require("./create-matcher"); + +/** + * Returns true when `array` contains all of `subset` as defined by the `compare` + * argument + * + * @param {Array} array An array to search for a subset + * @param {Array} subset The subset to find in the array + * @param {Function} compare A comparison function + * @returns {boolean} [description] + * @private + */ +function arrayContains(array, subset, compare) { + if (subset.length === 0) { + return true; + } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (compare(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (i + j >= l) { + return false; + } + if (!compare(array[i + j], subset[j])) { + return false; + } + } + return true; + } + } + return false; +} + +/* eslint-disable complexity */ +/** + * Matches an object with a matcher (or value) + * + * @alias module:samsam.match + * @param {object} object The object candidate to match + * @param {object} matcherOrValue A matcher or value to match against + * @returns {boolean} true when `object` matches `matcherOrValue` + */ +function match(object, matcherOrValue) { + if (matcherOrValue && typeof matcherOrValue.test === "function") { + return matcherOrValue.test(object); + } + + switch (type(matcherOrValue)) { + case "bigint": + case "boolean": + case "number": + case "symbol": + return matcherOrValue === object; + case "function": + return matcherOrValue(object) === true; + case "string": + var notNull = typeof object === "string" || Boolean(object); + return ( + notNull && + indexOf( + valueToString(object).toLowerCase(), + matcherOrValue.toLowerCase() + ) >= 0 + ); + case "null": + return object === null; + case "undefined": + return typeof object === "undefined"; + case "Date": + /* istanbul ignore else */ + if (type(object) === "Date") { + return object.getTime() === matcherOrValue.getTime(); + } + /* istanbul ignore next: this is basically the rest of the function, which is covered */ + break; + case "Array": + case "Int8Array": + case "Uint8Array": + case "Uint8ClampedArray": + case "Int16Array": + case "Uint16Array": + case "Int32Array": + case "Uint32Array": + case "Float32Array": + case "Float64Array": + return ( + isArrayType(matcherOrValue) && + arrayContains(object, matcherOrValue, match) + ); + case "Map": + /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/ + if (!engineCanCompareMaps) { + throw new Error( + "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances" + ); + } + + return ( + type(object) === "Map" && + arrayContains( + Array.from(object), + Array.from(matcherOrValue), + match + ) + ); + default: + break; + } + + switch (type(object)) { + case "null": + return false; + case "Set": + return isSubset(matcherOrValue, object, match); + default: + break; + } + + /* istanbul ignore else */ + if (matcherOrValue && typeof matcherOrValue === "object") { + if (matcherOrValue === object) { + return true; + } + if (typeof object !== "object") { + return false; + } + var prop; + // eslint-disable-next-line guard-for-in + for (prop in matcherOrValue) { + var value = object[prop]; + if ( + typeof value === "undefined" && + typeof object.getAttribute === "function" + ) { + value = object.getAttribute(prop); + } + if ( + matcherOrValue[prop] === null || + typeof matcherOrValue[prop] === "undefined" + ) { + if (value !== matcherOrValue[prop]) { + return false; + } + } else if ( + typeof value === "undefined" || + !deepEqual(value, matcherOrValue[prop]) + ) { + return false; + } + } + return true; + } + + /* istanbul ignore next */ + throw new Error("Matcher was an unknown or unsupported type"); +} +/* eslint-enable complexity */ + +forEach(Object.keys(createMatcher), function (key) { + match[key] = createMatcher[key]; +}); + +module.exports = match; + +},{"./create-matcher":60,"./deep-equal":69,"./is-array-type":73,"./is-subset":82,"@sinonjs/commons":46,"type-detect":110}],85:[function(require,module,exports){ +"use strict"; + +/** + * @module samsam + */ +var identical = require("./identical"); +var isArguments = require("./is-arguments"); +var isElement = require("./is-element"); +var isNegZero = require("./is-neg-zero"); +var isSet = require("./is-set"); +var isMap = require("./is-map"); +var match = require("./match"); +var deepEqualCyclic = require("./deep-equal").use(match); +var createMatcher = require("./create-matcher"); + +module.exports = { + createMatcher: createMatcher, + deepEqual: deepEqualCyclic, + identical: identical, + isArguments: isArguments, + isElement: isElement, + isMap: isMap, + isNegZero: isNegZero, + isSet: isSet, + match: match, +}; + +},{"./create-matcher":60,"./deep-equal":69,"./identical":71,"./is-arguments":72,"./is-element":75,"./is-map":77,"./is-neg-zero":79,"./is-set":81,"./match":84}],86:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +var encoding = require("./lib/encoding.js"); + +module.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder, +}; + +},{"./lib/encoding.js":88}],87:[function(require,module,exports){ +(function(global) { + 'use strict'; + + if (typeof module !== "undefined" && module.exports) { + module.exports = global; + } + + global["encoding-indexes"] = +{ + "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + "iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + "iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + "iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + "iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + "iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + "iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + "iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + "iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +}; + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{}],88:[function(require,module,exports){ +// This is free and unencumbered software released into the public domain. +// See LICENSE.md for more information. + +/** + * @fileoverview Global |this| required for resolving indexes in node. + * @suppress {globalThis} + */ +(function(global) { + 'use strict'; + + // If we're in node require encoding-indexes and attach it to the global. + if (typeof module !== "undefined" && module.exports && + !global["encoding-indexes"]) { + global["encoding-indexes"] = + require("./encoding-indexes.js")["encoding-indexes"]; + } + + // + // Utilities + // + + /** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ + function inRange(a, min, max) { + return min <= a && a <= max; + } + + /** + * @param {!Array.<*>} array The array to check. + * @param {*} item The item to look for in the array. + * @return {boolean} True if the item appears in the array. + */ + function includes(array, item) { + return array.indexOf(item) !== -1; + } + + var floor = Math.floor; + + /** + * @param {*} o + * @return {Object} + */ + function ToDictionary(o) { + if (o === undefined) return {}; + if (o === Object(o)) return o; + throw TypeError('Could not convert argument to dictionary'); + } + + /** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ + function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string); + + // 2. Let n be the length of S. + var n = s.length; + + // 3. Initialize i to 0. + var i = 0; + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = []; + + // 5. While i < n: + while (i < n) { + + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i); + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c); + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD); + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD); + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1); + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF; + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF; + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b); + + // 4. Set i to i+1. + i += 1; + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD); + } + } + } + + // 3. Set i to i+1. + i += 1; + } + + // 6. Return U. + return u; + } + + /** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ + function codePointsToString(code_points) { + var s = ''; + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i]; + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp); + } else { + cp -= 0x10000; + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00); + } + } + return s; + } + + + // + // Implementation of Encoding specification + // https://encoding.spec.whatwg.org/ + // + + // + // 4. Terminology + // + + /** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ + function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F; + } + + /** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ + var isASCIICodePoint = isASCIIByte; + + + /** + * End-of-stream is a special token that signifies no more tokens + * are in the stream. + * @const + */ var end_of_stream = -1; + + /** + * A stream represents an ordered sequence of tokens. + * + * @constructor + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + function Stream(tokens) { + /** @type {!Array.} */ + this.tokens = [].slice.call(tokens); + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse(); + } + + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + + // + // 5. Encodings + // + + // 5.1 Encoders and decoders + + /** @const */ + var finished = -1; + + /** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return {number} The code point to insert on a decoding error. + */ + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error'); + return opt_code_point || 0xFFFD; + } + + /** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ + function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.'); + } + + /** @interface */ + function Decoder() {} + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) {} + }; + + /** @interface */ + function Encoder() {} + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) {} + }; + + // 5.2 Names and labels + + // TODO: Define @typedef for Encoding: {name:string,labels:Array.} + // https://github.com/google/closure-compiler/issues/247 + + /** + * @param {string} label The encoding label. + * @return {?{name:string,labels:Array.}} + */ + function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase(); + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + + /** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + * @const + * @type {!Array.<{ + * heading: string, + * encodings: Array.<{name:string,labels:Array.}> + * }>} + */ + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + + // Label to encoding registry. + /** @type {Object.}>} */ + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + + // Registry of of encoder/decoder factories, by encoding name. + /** @type {Object.} */ + var encoders = {}; + /** @type {Object.} */ + var decoders = {}; + + // + // 6. Indexes + // + + /** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ + function indexCodePointFor(pointer, index) { + if (!index) return null; + return index[pointer] || null; + } + + /** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} index The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ + function indexPointerFor(code_point, index) { + var pointer = index.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + + /** + * @param {string} name Name of the index. + * @return {(!Array.|!Array.>)} + * */ + function index(name) { + if (!('encoding-indexes' in global)) { + throw Error("Indexes missing." + + " Did you forget to include encoding-indexes.js first?"); + } + return global['encoding-indexes'][name]; + } + + /** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ + function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null; + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7; + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0; + var code_point_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset; + } + + /** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ + function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457; + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0; + var pointer_offset = 0; + var idx = index('gb18030-ranges'); + var i; + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset; + } + + /** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ + function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map(function(code_point, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point; + }); + var index_ = shift_jis_index; + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point); + } + var shift_jis_index; + + /** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ + function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map(function(code_point, pointer) { + return (pointer < (0xA1 - 0x81) * 157) ? null : code_point; + }); + var index_ = big5_index_no_hkscs; + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point); + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + + // + // 8. API + // + + /** @const */ var DEFAULT_ENCODING = 'utf-8'; + + // 8.1 Interface TextDecoder + + /** + * @constructor + * @param {string=} label The label of the encoding; + * defaults to 'utf-8'. + * @param {Object=} options + */ + function TextDecoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextDecoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null; + /** @private @type {?Decoder} */ + this._decoder = null; + /** @private @type {boolean} */ + this._ignoreBOM = false; + /** @private @type {boolean} */ + this._BOMseen = false; + /** @private @type {string} */ + this._error_mode = 'replacement'; + /** @private @type {boolean} */ + this._do_not_flush = false; + + + // 1. Let encoding be the result of getting an encoding from + // label. + var encoding = getEncoding(label); + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + + // 3. Let dec be a new TextDecoder object. + var dec = this; + + // 4. Set dec's encoding to encoding. + dec._encoding = encoding; + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (Boolean(options['fatal'])) + dec._error_mode = 'fatal'; + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (Boolean(options['ignoreBOM'])) + dec._ignoreBOM = true; + + // For pre-ES5 runtimes: + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === 'fatal'; + this.ignoreBOM = dec._ignoreBOM; + } + + // 7. Return dec. + return dec; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextDecoder.prototype, 'encoding', { + /** @this {TextDecoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + + // The fatal attribute's getter must return true if error mode + // is fatal, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'fatal', { + /** @this {TextDecoder} */ + get: function() { return this._error_mode === 'fatal'; } + }); + + // The ignoreBOM attribute's getter must return true if ignore + // BOM flag is set, and false otherwise. + Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', { + /** @this {TextDecoder} */ + get: function() { return this._ignoreBOM; } + }); + } + + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return {string} The decoded string. + */ + TextDecoder.prototype.decode = function decode(input, options) { + var bytes; + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength); + } else { + bytes = new Uint8Array(0); + } + + options = ToDictionary(options); + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal'}); + this._BOMseen = false; + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']); + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + var input_stream = new Stream(bytes); + + // 4. Let output be a new stream. + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + var token = input_stream.read(); + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break; + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token); + + // 2. If result is finished, return output, serialized. + if (result === finished) + break; + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + * @return {string} + * @this {TextDecoder} + */ + function serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true; + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream); + } + + return serializeStream.call(this, output); + }; + + // 8.2 Interface TextEncoder + + /** + * @constructor + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} options NONSTANDARD. + */ + function TextEncoder(label, options) { + // Web IDL conventions + if (!(this instanceof TextEncoder)) + throw TypeError('Called as a function. Did you forget \'new\'?'); + options = ToDictionary(options); + + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null; + /** @private @type {?Encoder} */ + this._encoder = null; + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false; + /** @private @type {string} */ + this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement'; + + // 1. Let enc be a new TextEncoder object. + var enc = this; + + // 2. Set enc's encoding to UTF-8's encoder. + if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label); + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?'); + } + enc._encoding = encoding; + } else { + // Standard behavior. + enc._encoding = getEncoding('utf-8'); + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.'); + } + } + + // For pre-ES5 runtimes: + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + + // 3. Return enc. + return enc; + } + + if (Object.defineProperty) { + // The encoding attribute's getter must return encoding's name. + Object.defineProperty(TextEncoder.prototype, 'encoding', { + /** @this {TextEncoder} */ + get: function() { return this._encoding.name.toLowerCase(); } + }); + } + + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + * @return {!Uint8Array} Encoded bytes, as a Uint8Array. + */ + TextEncoder.prototype.encode = function encode(opt_string, options) { + opt_string = opt_string === undefined ? '' : String(opt_string); + options = ToDictionary(options); + + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal'}); + this._do_not_flush = Boolean(options['stream']); + + // 1. Convert input to a stream. + var input = new Stream(stringToCodePoints(opt_string)); + + // 2. Let output be a new stream + var output = []; + + /** @type {?(number|!Array.)} */ + var result; + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read(); + if (token === end_of_stream) + break; + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)); + else + output.push(result); + } + this._encoder = null; + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output); + }; + + + // + // 9. The encoding + // + + // 9.1 utf-8 + + // 9.1.1 utf-8 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function UTF8Decoder(options) { + var fatal = options.fatal; + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + var /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite; + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1; + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F; + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0; + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F; + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2; + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF; + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90; + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F; + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3; + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7; + } + + // Otherwise + else { + // Return error. + return decoderError(fatal); + } + + // Return continue. + return null; + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Return error. + return decoderError(fatal); + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80; + utf8_upper_boundary = 0xBF; + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F); + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1; + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point; + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + + // 11. Return a code point whose value is code point. + return code_point; + }; + } + + // 9.1.2 utf-8 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function UTF8Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Set count and offset based on the range code point is in: + var count, offset; + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1; + offset = 0xC0; + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2; + offset = 0xE0; + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3; + offset = 0xF0; + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset]; + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)); + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)); + + // 3. Decrease count by one. + count -= 1; + } + + // 6. Return bytes bytes, in order. + return bytes; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['UTF-8'] = function(options) { + return new UTF8Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['UTF-8'] = function(options) { + return new UTF8Decoder(options); + }; + + // + // 10. Legacy single-byte encodings + // + + // 10.1 single-byte decoder + /** + * @constructor + * @implements {Decoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteDecoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = index[bite - 0x80]; + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + }; + } + + // 10.2 single-byte encoder + /** + * @constructor + * @implements {Encoder} + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + function SingleByteEncoder(index, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + var pointer = indexPointerFor(code_point, index); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point); + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80; + }; + } + + (function() { + if (!('encoding-indexes' in global)) + return; + encodings.forEach(function(category) { + if (category.heading !== 'Legacy single-byte encodings') + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + /** @param {{fatal: boolean}} options */ + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + /** @param {{fatal: boolean}} options */ + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + }()); + + // + // 11. Legacy multi-byte Chinese (simplified) encodings + // + + // 11.1 gbk + + // 11.1.1 gbk decoder + // gbk's decoder is gb18030's decoder. + /** @param {{fatal: boolean}} options */ + decoders['GBK'] = function(options) { + return new GB18030Decoder(options); + }; + + // 11.1.2 gbk encoder + // gbk's encoder is gb18030's encoder with its gbk flag set. + /** @param {{fatal: boolean}} options */ + encoders['GBK'] = function(options) { + return new GB18030Encoder(options, true); + }; + + // 11.2 gb18030 + + // 11.2.1 gb18030 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function GB18030Decoder(options) { + var fatal = options.fatal; + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + var /** @type {number} */ gb18030_first = 0x00, + /** @type {number} */ gb18030_second = 0x00, + /** @type {number} */ gb18030_third = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && gb18030_first === 0x00 && + gb18030_second === 0x00 && gb18030_third === 0x00) { + return finished; + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (gb18030_first !== 0x00 || gb18030_second !== 0x00 || + gb18030_third !== 0x00)) { + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + decoderError(fatal); + } + var code_point; + // 3. If gb18030 third is not 0x00, run these substeps: + if (gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null; + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 + + gb18030_third - 0x81) * 10 + bite - 0x30); + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [gb18030_second, gb18030_third, bite]; + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + gb18030_first = 0x00; + gb18030_second = 0x00; + gb18030_third = 0x00; + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (gb18030_second !== 0x00) { + + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_third = bite; + return null; + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([gb18030_second, bite]); + gb18030_first = 0x00; + gb18030_second = 0x00; + return decoderError(fatal); + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (gb18030_first !== 0x00) { + + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + gb18030_second = bite; + return null; + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0x00; + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41; + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset); + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC; + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + gb18030_first = bite; + return null; + } + + // 9. Return error. + return decoderError(fatal); + }; + } + + // 11.2.2 gb18030 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + * @param {boolean=} gbk_flag + */ + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + // gb18030's decoder has an associated gbk flag (initially unset). + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point); + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (gbk_flag && code_point === 0x20AC) + return 0x80; + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')); + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 2. Let trail be pointer % 190. + var trail = pointer % 190; + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41; + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + } + + // 7. If gbk flag is set, return error with code point. + if (gbk_flag) + return encoderError(code_point); + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point); + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10); + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10; + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126); + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126; + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10); + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10; + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['gb18030'] = function(options) { + return new GB18030Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['gb18030'] = function(options) { + return new GB18030Decoder(options); + }; + + + // + // 12. Legacy multi-byte Chinese (traditional) encodings + // + + // 12.1 Big5 + + // 12.1.1 Big5 decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function Big5Decoder(options) { + var fatal = options.fatal; + // Big5's decoder has an associated Big5 lead (initially 0x00). + var /** @type {number} */ Big5_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && Big5_lead !== 0x00) { + Big5_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && Big5_lead === 0x00) + return finished; + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (Big5_lead !== 0x00) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0x00; + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x62; + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset); + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304]; + case 1135: return [0x00CA, 0x030C]; + case 1164: return [0x00EA, 0x0304]; + case 1166: return [0x00EA, 0x030C]; + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')); + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 7. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + Big5_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 12.1.2 Big5 encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function Big5Encoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index Big5 pointer for code point. + var pointer = indexBig5PointerFor(code_point); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 157) + 0x81. + var lead = floor(pointer / 157) + 0x81; + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point); + + // 7. Let trail be pointer % 157. + var trail = pointer % 157; + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + var offset = trail < 0x3F ? 0x40 : 0x62; + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Big5'] = function(options) { + return new Big5Encoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Big5'] = function(options) { + return new Big5Decoder(options); + }; + + + // + // 13. Legacy multi-byte Japanese encodings + // + + // 13.1 euc-jp + + // 13.1.1 euc-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCJPDecoder(options) { + var fatal = options.fatal; + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + var /** @type {boolean} */ eucjp_jis0212_flag = false, + /** @type {number} */ eucjp_lead = 0x00; + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && eucjp_lead !== 0x00) { + eucjp_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && eucjp_lead === 0x00) + return finished; + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + eucjp_lead = 0x00; + return 0xFF61 - 0xA1 + bite; + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (eucjp_lead !== 0x00) { + var lead = eucjp_lead; + eucjp_lead = 0x00; + + // 1. Let code point be null. + var code_point = null; + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212')); + } + + // 3. Unset the euc-jp jis0212 flag. + eucjp_jis0212_flag = false; + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite); + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 6. Return a code point whose value is code point. + return code_point; + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + eucjp_lead = bite; + return null; + } + + // 8. Return error. + return decoderError(fatal); + }; + } + + // 13.1.2 euc-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCJPEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1]; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 94) + 0xA1. + var lead = floor(pointer / 94) + 0xA1; + + // 10. Let trail be pointer % 94 + 0xA1. + var trail = pointer % 94 + 0xA1; + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-JP'] = function(options) { + return new EUCJPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-JP'] = function(options) { + return new EUCJPDecoder(options); + }; + + // 13.2 iso-2022-jp + + // 13.2.1 iso-2022-jp decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + var /** @type {number} */ iso2022jp_decoder_state = states.ASCII, + /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII, + /** @type {number} */ iso2022jp_lead = 0x00, + /** @type {boolean} */ iso2022jp_output_flag = false; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + iso2022jp_output_flag = false; + return 0x00A5; + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + iso2022jp_output_flag = false; + return 0x203E; + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + iso2022jp_output_flag = false; + return bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + iso2022jp_output_flag = false; + return 0xFF61 - 0x21 + bite; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished; + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + iso2022jp_output_flag = false; + return decoderError(fatal); + + case states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + iso2022jp_decoder_state = states.LeadByte; + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21; + + // 3. Let code point be the index code point for pointer in + // index jis0208. + var code_point = indexCodePointFor(pointer, index('jis0208')); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + + case states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + + // 2. Prepend byte to stream. + stream.prepend(bite); + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + + case states.Escape: + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + var lead = iso2022jp_lead; + iso2022jp_lead = 0x00; + + // 2. Let state be null. + var state = null; + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = states.ASCII; + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = states.Roman; + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = states.Katakana; + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = states.LeadByte; + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to states. + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + + // 2. Let output flag be the iso-2022-jp output flag. + var output_flag = iso2022jp_output_flag; + + // 3. Set the iso-2022-jp output flag. + iso2022jp_output_flag = true; + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(fatal); + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]); + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + + // 13.2.2 iso-2022-jp encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var /** @type {number} */ iso2022jp_state = states.ASCII; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((iso2022jp_state === states.ASCII || + iso2022jp_state === states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD); + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (iso2022jp_state === states.ASCII && + isASCIICodePoint(code_point)) + return code_point; + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (iso2022jp_state === states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [0x1B, 0x28, 0x42]; + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [0x1B, 0x28, 0x4A]; + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + var pointer = indexPointerFor(code_point, index('jis0208')); + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [0x1B, 0x24, 0x42]; + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + var lead = floor(pointer / 94) + 0x21; + + // 13. Let trail be pointer % 94 + 0x21. + var trail = pointer % 94 + 0x21; + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['ISO-2022-JP'] = function(options) { + return new ISO2022JPDecoder(options); + }; + + // 13.3 Shift_JIS + + // 13.3.1 Shift_JIS decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISDecoder(options) { + var fatal = options.fatal; + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + var /** @type {number} */ Shift_JIS_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && Shift_JIS_lead !== 0x00) { + Shift_JIS_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && Shift_JIS_lead === 0x00) + return finished; + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (Shift_JIS_lead !== 0x00) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0x00; + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41; + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1; + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset; + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer; + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')); + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 8. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite; + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite; + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + Shift_JIS_lead = bite; + return null; + } + + // 7. Return error. + return decoderError(fatal); + }; + } + + // 13.3.2 Shift_JIS encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function ShiftJISEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point; + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C; + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E; + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1; + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D; + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point); + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188); + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1; + + // 11. Let trail be pointer % 188. + var trail = pointer % 188; + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41; + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['Shift_JIS'] = function(options) { + return new ShiftJISEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['Shift_JIS'] = function(options) { + return new ShiftJISDecoder(options); + }; + + // + // 14. Legacy multi-byte Korean encodings + // + + // 14.1 euc-kr + + // 14.1.1 euc-kr decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function EUCKRDecoder(options) { + var fatal = options.fatal; + + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + var /** @type {number} */ euckr_lead = 0x00; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0x00; + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && euckr_lead === 0) + return finished; + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (euckr_lead !== 0x00) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0x00; + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41); + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + var code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')); + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(fatal); + + // 5. Return a code point whose value is code point. + return code_point; + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + euckr_lead = bite; + return null; + } + + // 6. Return error. + return decoderError(fatal); + }; + } + + // 14.1.2 euc-kr encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function EUCKREncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + var pointer = indexPointerFor(code_point, index('euc-kr')); + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point); + + // 5. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81; + + // 6. Let trail be pointer % 190 + 0x41. + var trail = (pointer % 190) + 0x41; + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail]; + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['EUC-KR'] = function(options) { + return new EUCKREncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['EUC-KR'] = function(options) { + return new EUCKRDecoder(options); + }; + + + // + // 15. Legacy miscellaneous encodings + // + + // 15.1 replacement + + // Not needed - API throws RangeError + + // 15.2 Common infrastructure for utf-16be and utf-16le + + /** + * @param {number} code_unit + * @param {boolean} utf16be + * @return {!Array.} bytes + */ + function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + var byte1 = code_unit >> 8; + + // 2. Let byte2 be code unit & 0x00FF. + var byte2 = code_unit & 0x00FF; + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2]; + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1]; + } + + // 15.2.1 shared utf-16 decoder + /** + * @constructor + * @implements {Decoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var /** @type {?number} */ utf16_lead_byte = null, + /** @type {?number} */ utf16_lead_surrogate = null; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (utf16_lead_byte !== null || + utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && utf16_lead_byte === null && + utf16_lead_surrogate === null) { + return finished; + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + + // 4. Let code unit be the result of: + var code_unit; + if (utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (utf16_lead_byte << 8) + bite; + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + utf16_lead_byte; + } + // Then set utf-16 lead byte to null. + utf16_lead_byte = null; + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00); + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + utf16_lead_surrogate = code_unit; + return null; + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(fatal); + + // 8. Return code point code unit. + return code_unit; + }; + } + + // 15.2.2 shared utf-16 encoder + /** + * @constructor + * @implements {Encoder} + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, utf16_be); + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + var lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, utf16_be); + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + var trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be); + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail); + }; + } + + // 15.3 utf-16be + // 15.3.1 utf-16be decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16BE'] = function(options) { + return new UTF16Encoder(true, options); + }; + // 15.3.2 utf-16be encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16BE'] = function(options) { + return new UTF16Decoder(true, options); + }; + + // 15.4 utf-16le + // 15.4.1 utf-16le decoder + /** @param {{fatal: boolean}} options */ + encoders['UTF-16LE'] = function(options) { + return new UTF16Encoder(false, options); + }; + // 15.4.2 utf-16le encoder + /** @param {{fatal: boolean}} options */ + decoders['UTF-16LE'] = function(options) { + return new UTF16Decoder(false, options); + }; + + // 15.5 x-user-defined + + // 15.5.1 x-user-defined decoder + /** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished; + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite; + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80; + }; + } + + // 15.5.2 x-user-defined encoder + /** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished; + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point; + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80; + + // 4. Return error with code point. + return encoderError(code_point); + }; + } + + /** @param {{fatal: boolean}} options */ + encoders['x-user-defined'] = function(options) { + return new XUserDefinedEncoder(options); + }; + /** @param {{fatal: boolean}} options */ + decoders['x-user-defined'] = function(options) { + return new XUserDefinedDecoder(options); + }; + + if (!global['TextEncoder']) + global['TextEncoder'] = TextEncoder; + if (!global['TextDecoder']) + global['TextDecoder'] = TextDecoder; + + if (typeof module !== "undefined" && module.exports) { + module.exports = { + TextEncoder: global['TextEncoder'], + TextDecoder: global['TextDecoder'], + EncodingIndexes: global["encoding-indexes"] + }; + } + +// For strict environments where `this` inside the global scope +// is `undefined`, take a pure object instead +}(this || {})); +},{"./encoding-indexes.js":87}],89:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],90:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],91:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +},{"./support/isBuffer":90,"inherits":89}],92:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.Diff = {})); +}(this, (function (exports) { 'use strict'; + + function Diff() {} + Diff.prototype = { + diff: function diff(oldString, newString) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var callback = options.callback; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + this.options = options; + var self = this; + + function done(value) { + if (callback) { + setTimeout(function () { + callback(undefined, value); + }, 0); + return true; + } else { + return value; + } + } // Allow subclasses to massage the input prior to running + + + oldString = this.castInput(oldString); + newString = this.castInput(newString); + oldString = this.removeEmpty(this.tokenize(oldString)); + newString = this.removeEmpty(this.tokenize(newString)); + var newLen = newString.length, + oldLen = oldString.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ + newPos: -1, + components: [] + }]; // Seed editLength = 0, i.e. the content starts with the same values + + var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); + + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + // Identity per the equality and tokenizer + return done([{ + value: this.join(newString), + count: newString.length + }]); + } // Main worker method. checks all permutations of a given edit length for acceptance. + + + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath = void 0; + + var addPath = bestPath[diagonalPath - 1], + removePath = bestPath[diagonalPath + 1], + _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen, + canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; + + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + + + if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } else { + basePath = addPath; // No need to clone, we've pulled it from the list + + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done + + if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { + return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); + } else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } // Performs the length of edit iteration. Is a bit fugly as this has to support the + // sync and async mode which is never fun. Loops over execEditLength until a value + // is produced. + + + if (callback) { + (function exec() { + setTimeout(function () { + // This should not happen, but we want to be safe. + + /* istanbul ignore next */ + if (editLength > maxEditLength) { + return callback(); + } + + if (!execEditLength()) { + exec(); + } + }, 0); + })(); + } else { + while (editLength <= maxEditLength) { + var ret = execEditLength(); + + if (ret) { + return ret; + } + } + } + }, + pushComponent: function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed + }; + } else { + components.push({ + count: 1, + added: added, + removed: removed + }); + } + }, + extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { + var newLen = newString.length, + oldLen = oldString.length, + newPos = basePath.newPos, + oldPos = newPos - diagonalPath, + commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({ + count: commonCount + }); + } + + basePath.newPos = newPos; + return oldPos; + }, + equals: function equals(left, right) { + if (this.options.comparator) { + return this.options.comparator(left, right); + } else { + return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); + } + }, + removeEmpty: function removeEmpty(array) { + var ret = []; + + for (var i = 0; i < array.length; i++) { + if (array[i]) { + ret.push(array[i]); + } + } + + return ret; + }, + castInput: function castInput(value) { + return value; + }, + tokenize: function tokenize(value) { + return value.split(''); + }, + join: function join(chars) { + return chars.join(''); + } + }; + + function buildValues(diff, components, newString, oldString, useLongestToken) { + var componentPos = 0, + componentLen = components.length, + newPos = 0, + oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + + if (!component.removed) { + if (!component.added && useLongestToken) { + var value = newString.slice(newPos, newPos + component.count); + value = value.map(function (value, i) { + var oldValue = oldString[oldPos + i]; + return oldValue.length > value.length ? oldValue : value; + }); + component.value = diff.join(value); + } else { + component.value = diff.join(newString.slice(newPos, newPos + component.count)); + } + + newPos += component.count; // Common case + + if (!component.added) { + oldPos += component.count; + } + } else { + component.value = diff.join(oldString.slice(oldPos, oldPos + component.count)); + oldPos += component.count; // Reverse add and remove so removes are output first to match common convention + // The diffing algorithm is tied to add then remove output and this is the simplest + // route to get the desired output with minimal overhead. + + if (componentPos && components[componentPos - 1].added) { + var tmp = components[componentPos - 1]; + components[componentPos - 1] = components[componentPos]; + components[componentPos] = tmp; + } + } + } // Special case handle for when one terminal is ignored (i.e. whitespace). + // For this case we merge the terminal into the prior string and drop the change. + // This is only available for string mode. + + + var lastComponent = components[componentLen - 1]; + + if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) { + components[componentLen - 2].value += lastComponent.value; + components.pop(); + } + + return components; + } + + function clonePath(path) { + return { + newPos: path.newPos, + components: path.components.slice(0) + }; + } + + var characterDiff = new Diff(); + function diffChars(oldStr, newStr, options) { + return characterDiff.diff(oldStr, newStr, options); + } + + function generateOptions(options, defaults) { + if (typeof options === 'function') { + defaults.callback = options; + } else if (options) { + for (var name in options) { + /* istanbul ignore else */ + if (options.hasOwnProperty(name)) { + defaults[name] = options[name]; + } + } + } + + return defaults; + } + + // + // Ranges and exceptions: + // Latin-1 Supplement, 0080–00FF + // - U+00D7 × Multiplication sign + // - U+00F7 ÷ Division sign + // Latin Extended-A, 0100–017F + // Latin Extended-B, 0180–024F + // IPA Extensions, 0250–02AF + // Spacing Modifier Letters, 02B0–02FF + // - U+02C7 ˇ ˇ Caron + // - U+02D8 ˘ ˘ Breve + // - U+02D9 ˙ ˙ Dot Above + // - U+02DA ˚ ˚ Ring Above + // - U+02DB ˛ ˛ Ogonek + // - U+02DC ˜ ˜ Small Tilde + // - U+02DD ˝ ˝ Double Acute Accent + // Latin Extended Additional, 1E00–1EFF + + var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; + var reWhitespace = /\S/; + var wordDiff = new Diff(); + + wordDiff.equals = function (left, right) { + if (this.options.ignoreCase) { + left = left.toLowerCase(); + right = right.toLowerCase(); + } + + return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); + }; + + wordDiff.tokenize = function (value) { + // All whitespace symbols except newline group into one token, each newline - in separate token + var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set. + + for (var i = 0; i < tokens.length - 1; i++) { + // If we have an empty string in the next field and we have only word chars before and after, merge + if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { + tokens[i] += tokens[i + 2]; + tokens.splice(i + 1, 2); + i--; + } + } + + return tokens; + }; + + function diffWords(oldStr, newStr, options) { + options = generateOptions(options, { + ignoreWhitespace: true + }); + return wordDiff.diff(oldStr, newStr, options); + } + function diffWordsWithSpace(oldStr, newStr, options) { + return wordDiff.diff(oldStr, newStr, options); + } + + var lineDiff = new Diff(); + + lineDiff.tokenize = function (value) { + var retLines = [], + linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line + + if (!linesAndNewlines[linesAndNewlines.length - 1]) { + linesAndNewlines.pop(); + } // Merge the content and line separators into single tokens + + + for (var i = 0; i < linesAndNewlines.length; i++) { + var line = linesAndNewlines[i]; + + if (i % 2 && !this.options.newlineIsToken) { + retLines[retLines.length - 1] += line; + } else { + if (this.options.ignoreWhitespace) { + line = line.trim(); + } + + retLines.push(line); + } + } + + return retLines; + }; + + function diffLines(oldStr, newStr, callback) { + return lineDiff.diff(oldStr, newStr, callback); + } + function diffTrimmedLines(oldStr, newStr, callback) { + var options = generateOptions(callback, { + ignoreWhitespace: true + }); + return lineDiff.diff(oldStr, newStr, options); + } + + var sentenceDiff = new Diff(); + + sentenceDiff.tokenize = function (value) { + return value.split(/(\S.+?[.!?])(?=\s+|$)/); + }; + + function diffSentences(oldStr, newStr, callback) { + return sentenceDiff.diff(oldStr, newStr, callback); + } + + var cssDiff = new Diff(); + + cssDiff.tokenize = function (value) { + return value.split(/([{}:;,]|\s+)/); + }; + + function diffCss(oldStr, newStr, callback) { + return cssDiff.diff(oldStr, newStr, callback); + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var objectPrototypeToString = Object.prototype.toString; + var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a + // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output: + + jsonDiff.useLongestToken = true; + jsonDiff.tokenize = lineDiff.tokenize; + + jsonDiff.castInput = function (value) { + var _this$options = this.options, + undefinedReplacement = _this$options.undefinedReplacement, + _this$options$stringi = _this$options.stringifyReplacer, + stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) { + return typeof v === 'undefined' ? undefinedReplacement : v; + } : _this$options$stringi; + return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' '); + }; + + jsonDiff.equals = function (left, right) { + return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1')); + }; + + function diffJson(oldObj, newObj, options) { + return jsonDiff.diff(oldObj, newObj, options); + } // This function handles the presence of circular references by bailing out when encountering an + // object that is already on the "stack" of items being processed. Accepts an optional replacer + + function canonicalize(obj, stack, replacementStack, replacer, key) { + stack = stack || []; + replacementStack = replacementStack || []; + + if (replacer) { + obj = replacer(key, obj); + } + + var i; + + for (i = 0; i < stack.length; i += 1) { + if (stack[i] === obj) { + return replacementStack[i]; + } + } + + var canonicalizedObj; + + if ('[object Array]' === objectPrototypeToString.call(obj)) { + stack.push(obj); + canonicalizedObj = new Array(obj.length); + replacementStack.push(canonicalizedObj); + + for (i = 0; i < obj.length; i += 1) { + canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); + } + + stack.pop(); + replacementStack.pop(); + return canonicalizedObj; + } + + if (obj && obj.toJSON) { + obj = obj.toJSON(); + } + + if (_typeof(obj) === 'object' && obj !== null) { + stack.push(obj); + canonicalizedObj = {}; + replacementStack.push(canonicalizedObj); + + var sortedKeys = [], + _key; + + for (_key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(_key)) { + sortedKeys.push(_key); + } + } + + sortedKeys.sort(); + + for (i = 0; i < sortedKeys.length; i += 1) { + _key = sortedKeys[i]; + canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); + } + + stack.pop(); + replacementStack.pop(); + } else { + canonicalizedObj = obj; + } + + return canonicalizedObj; + } + + var arrayDiff = new Diff(); + + arrayDiff.tokenize = function (value) { + return value.slice(); + }; + + arrayDiff.join = arrayDiff.removeEmpty = function (value) { + return value; + }; + + function diffArrays(oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); + } + + function parsePatch(uniDiff) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [], + list = [], + i = 0; + + function parseIndex() { + var index = {}; + list.push(index); // Parse diff metadata + + while (i < diffstr.length) { + var line = diffstr[i]; // File header found, end parsing diff metadata + + if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) { + break; + } // Diff index + + + var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line); + + if (header) { + index.index = header[1]; + } + + i++; + } // Parse file headers if they are defined. Unified diff requires them, but + // there's no technical issues to have an isolated hunk without file header + + + parseFileHeader(index); + parseFileHeader(index); // Parse hunks + + index.hunks = []; + + while (i < diffstr.length) { + var _line = diffstr[i]; + + if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) { + break; + } else if (/^@@/.test(_line)) { + index.hunks.push(parseHunk()); + } else if (_line && options.strict) { + // Ignore unexpected content unless in strict mode + throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line)); + } else { + i++; + } + } + } // Parses the --- and +++ headers, if none are found, no lines + // are consumed. + + + function parseFileHeader(index) { + var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]); + + if (fileHeader) { + var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new'; + var data = fileHeader[2].split('\t', 2); + var fileName = data[0].replace(/\\\\/g, '\\'); + + if (/^".*"$/.test(fileName)) { + fileName = fileName.substr(1, fileName.length - 2); + } + + index[keyPrefix + 'FileName'] = fileName; + index[keyPrefix + 'Header'] = (data[1] || '').trim(); + i++; + } + } // Parses a hunk + // This assumes that we are at the start of a hunk. + + + function parseHunk() { + var chunkHeaderIndex = i, + chunkHeaderLine = diffstr[i++], + chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/); + var hunk = { + oldStart: +chunkHeader[1], + oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2], + newStart: +chunkHeader[3], + newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4], + lines: [], + linedelimiters: [] + }; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart += 1; + } + + if (hunk.newLines === 0) { + hunk.newStart += 1; + } + + var addCount = 0, + removeCount = 0; + + for (; i < diffstr.length; i++) { + // Lines starting with '---' could be mistaken for the "remove line" operation + // But they could be the header for the next file. Therefore prune such cases out. + if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) { + break; + } + + var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0]; + + if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') { + hunk.lines.push(diffstr[i]); + hunk.linedelimiters.push(delimiters[i] || '\n'); + + if (operation === '+') { + addCount++; + } else if (operation === '-') { + removeCount++; + } else if (operation === ' ') { + addCount++; + removeCount++; + } + } else { + break; + } + } // Handle the empty block count case + + + if (!addCount && hunk.newLines === 1) { + hunk.newLines = 0; + } + + if (!removeCount && hunk.oldLines === 1) { + hunk.oldLines = 0; + } // Perform optional sanity checking + + + if (options.strict) { + if (addCount !== hunk.newLines) { + throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + + if (removeCount !== hunk.oldLines) { + throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1)); + } + } + + return hunk; + } + + while (i < diffstr.length) { + parseIndex(); + } + + return list; + } + + // Iterator that traverses in the range of [min, max], stepping + // by distance from a given start position. I.e. for [0, 4], with + // start of 2, this will iterate 2, 3, 1, 4, 0. + function distanceIterator (start, minLine, maxLine) { + var wantForward = true, + backwardExhausted = false, + forwardExhausted = false, + localOffset = 1; + return function iterator() { + if (wantForward && !forwardExhausted) { + if (backwardExhausted) { + localOffset++; + } else { + wantForward = false; + } // Check if trying to fit beyond text length, and if not, check it fits + // after offset location (or desired location on first iteration) + + + if (start + localOffset <= maxLine) { + return localOffset; + } + + forwardExhausted = true; + } + + if (!backwardExhausted) { + if (!forwardExhausted) { + wantForward = true; + } // Check if trying to fit before text beginning, and if not, check it fits + // before offset location + + + if (minLine <= start - localOffset) { + return -localOffset++; + } + + backwardExhausted = true; + return iterator(); + } // We tried to fit hunk before text beginning and beyond text length, then + // hunk can't fit on the text. Return undefined + + }; + } + + function applyPatch(source, uniDiff) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + if (Array.isArray(uniDiff)) { + if (uniDiff.length > 1) { + throw new Error('applyPatch only works with a single input.'); + } + + uniDiff = uniDiff[0]; + } // Apply the diff to the input + + + var lines = source.split(/\r\n|[\n\v\f\r\x85]/), + delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [], + hunks = uniDiff.hunks, + compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) { + return line === patchContent; + }, + errorCount = 0, + fuzzFactor = options.fuzzFactor || 0, + minLine = 0, + offset = 0, + removeEOFNL, + addEOFNL; + /** + * Checks if the hunk exactly fits on the provided location + */ + + + function hunkFits(hunk, toPos) { + for (var j = 0; j < hunk.lines.length; j++) { + var line = hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line; + + if (operation === ' ' || operation === '-') { + // Context sanity check + if (!compareLine(toPos + 1, lines[toPos], operation, content)) { + errorCount++; + + if (errorCount > fuzzFactor) { + return false; + } + } + + toPos++; + } + } + + return true; + } // Search best fit offsets for each hunk based on the previous ones + + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i], + maxLine = lines.length - hunk.oldLines, + localOffset = 0, + toPos = offset + hunk.oldStart - 1; + var iterator = distanceIterator(toPos, minLine, maxLine); + + for (; localOffset !== undefined; localOffset = iterator()) { + if (hunkFits(hunk, toPos + localOffset)) { + hunk.offset = offset += localOffset; + break; + } + } + + if (localOffset === undefined) { + return false; + } // Set lower text limit to end of the current hunk, so next ones don't try + // to fit over already patched text + + + minLine = hunk.offset + hunk.oldStart + hunk.oldLines; + } // Apply patch hunks + + + var diffOffset = 0; + + for (var _i = 0; _i < hunks.length; _i++) { + var _hunk = hunks[_i], + _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1; + + diffOffset += _hunk.newLines - _hunk.oldLines; + + for (var j = 0; j < _hunk.lines.length; j++) { + var line = _hunk.lines[j], + operation = line.length > 0 ? line[0] : ' ', + content = line.length > 0 ? line.substr(1) : line, + delimiter = _hunk.linedelimiters[j]; + + if (operation === ' ') { + _toPos++; + } else if (operation === '-') { + lines.splice(_toPos, 1); + delimiters.splice(_toPos, 1); + /* istanbul ignore else */ + } else if (operation === '+') { + lines.splice(_toPos, 0, content); + delimiters.splice(_toPos, 0, delimiter); + _toPos++; + } else if (operation === '\\') { + var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null; + + if (previousOperation === '+') { + removeEOFNL = true; + } else if (previousOperation === '-') { + addEOFNL = true; + } + } + } + } // Handle EOFNL insertion/removal + + + if (removeEOFNL) { + while (!lines[lines.length - 1]) { + lines.pop(); + delimiters.pop(); + } + } else if (addEOFNL) { + lines.push(''); + delimiters.push('\n'); + } + + for (var _k = 0; _k < lines.length - 1; _k++) { + lines[_k] = lines[_k] + delimiters[_k]; + } + + return lines.join(''); + } // Wrapper that supports multiple file patches via callbacks. + + function applyPatches(uniDiff, options) { + if (typeof uniDiff === 'string') { + uniDiff = parsePatch(uniDiff); + } + + var currentIndex = 0; + + function processIndex() { + var index = uniDiff[currentIndex++]; + + if (!index) { + return options.complete(); + } + + options.loadFile(index, function (err, data) { + if (err) { + return options.complete(err); + } + + var updatedContent = applyPatch(data, index, options); + options.patched(index, updatedContent, function (err) { + if (err) { + return options.complete(err); + } + + processIndex(); + }); + }); + } + + processIndex(); + } + + function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + if (!options) { + options = {}; + } + + if (typeof options.context === 'undefined') { + options.context = 4; + } + + var diff = diffLines(oldStr, newStr, options); + diff.push({ + value: '', + lines: [] + }); // Append an empty value to make cleanup easier + + function contextLines(lines) { + return lines.map(function (entry) { + return ' ' + entry; + }); + } + + var hunks = []; + var oldRangeStart = 0, + newRangeStart = 0, + curRange = [], + oldLine = 1, + newLine = 1; + + var _loop = function _loop(i) { + var current = diff[i], + lines = current.lines || current.value.replace(/\n$/, '').split('\n'); + current.lines = lines; + + if (current.added || current.removed) { + var _curRange; + + // If we have previous context, start with that + if (!oldRangeStart) { + var prev = diff[i - 1]; + oldRangeStart = oldLine; + newRangeStart = newLine; + + if (prev) { + curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : []; + oldRangeStart -= curRange.length; + newRangeStart -= curRange.length; + } + } // Output our changes + + + (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) { + return (current.added ? '+' : '-') + entry; + }))); // Track the updated file position + + + if (current.added) { + newLine += lines.length; + } else { + oldLine += lines.length; + } + } else { + // Identical context lines. Track line changes + if (oldRangeStart) { + // Close out any changes that have been output (or join overlapping) + if (lines.length <= options.context * 2 && i < diff.length - 2) { + var _curRange2; + + // Overlapping + (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines))); + } else { + var _curRange3; + + // end the range and output + var contextSize = Math.min(lines.length, options.context); + + (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize)))); + + var hunk = { + oldStart: oldRangeStart, + oldLines: oldLine - oldRangeStart + contextSize, + newStart: newRangeStart, + newLines: newLine - newRangeStart + contextSize, + lines: curRange + }; + + if (i >= diff.length - 2 && lines.length <= options.context) { + // EOF is inside this hunk + var oldEOFNewline = /\n$/.test(oldStr); + var newEOFNewline = /\n$/.test(newStr); + var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines; + + if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) { + // special case: old has no eol and no trailing context; no-nl can end up before adds + // however, if the old file is empty, do not output the no-nl line + curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file'); + } + + if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) { + curRange.push('\\ No newline at end of file'); + } + } + + hunks.push(hunk); + oldRangeStart = 0; + newRangeStart = 0; + curRange = []; + } + } + + oldLine += lines.length; + newLine += lines.length; + } + }; + + for (var i = 0; i < diff.length; i++) { + _loop(i); + } + + return { + oldFileName: oldFileName, + newFileName: newFileName, + oldHeader: oldHeader, + newHeader: newHeader, + hunks: hunks + }; + } + function formatPatch(diff) { + var ret = []; + + if (diff.oldFileName == diff.newFileName) { + ret.push('Index: ' + diff.oldFileName); + } + + ret.push('==================================================================='); + ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader)); + ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader)); + + for (var i = 0; i < diff.hunks.length; i++) { + var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0, + // the first number is one lower than one would expect. + // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 + + if (hunk.oldLines === 0) { + hunk.oldStart -= 1; + } + + if (hunk.newLines === 0) { + hunk.newStart -= 1; + } + + ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@'); + ret.push.apply(ret, hunk.lines); + } + + return ret.join('\n') + '\n'; + } + function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) { + return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options)); + } + function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) { + return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options); + } + + function arrayEqual(a, b) { + if (a.length !== b.length) { + return false; + } + + return arrayStartsWith(a, b); + } + function arrayStartsWith(array, start) { + if (start.length > array.length) { + return false; + } + + for (var i = 0; i < start.length; i++) { + if (start[i] !== array[i]) { + return false; + } + } + + return true; + } + + function calcLineCount(hunk) { + var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), + oldLines = _calcOldNewLineCount.oldLines, + newLines = _calcOldNewLineCount.newLines; + + if (oldLines !== undefined) { + hunk.oldLines = oldLines; + } else { + delete hunk.oldLines; + } + + if (newLines !== undefined) { + hunk.newLines = newLines; + } else { + delete hunk.newLines; + } + } + function merge(mine, theirs, base) { + mine = loadPatch(mine, base); + theirs = loadPatch(theirs, base); + var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning. + // Leaving sanity checks on this to the API consumer that may know more about the + // meaning in their own context. + + if (mine.index || theirs.index) { + ret.index = mine.index || theirs.index; + } + + if (mine.newFileName || theirs.newFileName) { + if (!fileNameChanged(mine)) { + // No header or no change in ours, use theirs (and ours if theirs does not exist) + ret.oldFileName = theirs.oldFileName || mine.oldFileName; + ret.newFileName = theirs.newFileName || mine.newFileName; + ret.oldHeader = theirs.oldHeader || mine.oldHeader; + ret.newHeader = theirs.newHeader || mine.newHeader; + } else if (!fileNameChanged(theirs)) { + // No header or no change in theirs, use ours + ret.oldFileName = mine.oldFileName; + ret.newFileName = mine.newFileName; + ret.oldHeader = mine.oldHeader; + ret.newHeader = mine.newHeader; + } else { + // Both changed... figure it out + ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName); + ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName); + ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader); + ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader); + } + } + + ret.hunks = []; + var mineIndex = 0, + theirsIndex = 0, + mineOffset = 0, + theirsOffset = 0; + + while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) { + var mineCurrent = mine.hunks[mineIndex] || { + oldStart: Infinity + }, + theirsCurrent = theirs.hunks[theirsIndex] || { + oldStart: Infinity + }; + + if (hunkBefore(mineCurrent, theirsCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(mineCurrent, mineOffset)); + mineIndex++; + theirsOffset += mineCurrent.newLines - mineCurrent.oldLines; + } else if (hunkBefore(theirsCurrent, mineCurrent)) { + // This patch does not overlap with any of the others, yay. + ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset)); + theirsIndex++; + mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines; + } else { + // Overlap, merge as best we can + var mergedHunk = { + oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart), + oldLines: 0, + newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset), + newLines: 0, + lines: [] + }; + mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines); + theirsIndex++; + mineIndex++; + ret.hunks.push(mergedHunk); + } + } + + return ret; + } + + function loadPatch(param, base) { + if (typeof param === 'string') { + if (/^@@/m.test(param) || /^Index:/m.test(param)) { + return parsePatch(param)[0]; + } + + if (!base) { + throw new Error('Must provide a base reference or pass in a patch'); + } + + return structuredPatch(undefined, undefined, base, param); + } + + return param; + } + + function fileNameChanged(patch) { + return patch.newFileName && patch.newFileName !== patch.oldFileName; + } + + function selectField(index, mine, theirs) { + if (mine === theirs) { + return mine; + } else { + index.conflict = true; + return { + mine: mine, + theirs: theirs + }; + } + } + + function hunkBefore(test, check) { + return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart; + } + + function cloneHunk(hunk, offset) { + return { + oldStart: hunk.oldStart, + oldLines: hunk.oldLines, + newStart: hunk.newStart + offset, + newLines: hunk.newLines, + lines: hunk.lines + }; + } + + function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) { + // This will generally result in a conflicted hunk, but there are cases where the context + // is the only overlap where we can successfully merge the content here. + var mine = { + offset: mineOffset, + lines: mineLines, + index: 0 + }, + their = { + offset: theirOffset, + lines: theirLines, + index: 0 + }; // Handle any leading content + + insertLeading(hunk, mine, their); + insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each. + + while (mine.index < mine.lines.length && their.index < their.lines.length) { + var mineCurrent = mine.lines[mine.index], + theirCurrent = their.lines[their.index]; + + if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) { + // Both modified ... + mutualChange(hunk, mine, their); + } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') { + var _hunk$lines; + + // Mine inserted + (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine))); + } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') { + var _hunk$lines2; + + // Theirs inserted + (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their))); + } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') { + // Mine removed or edited + removal(hunk, mine, their); + } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') { + // Their removed or edited + removal(hunk, their, mine, true); + } else if (mineCurrent === theirCurrent) { + // Context identity + hunk.lines.push(mineCurrent); + mine.index++; + their.index++; + } else { + // Context mismatch + conflict(hunk, collectChange(mine), collectChange(their)); + } + } // Now push anything that may be remaining + + + insertTrailing(hunk, mine); + insertTrailing(hunk, their); + calcLineCount(hunk); + } + + function mutualChange(hunk, mine, their) { + var myChanges = collectChange(mine), + theirChanges = collectChange(their); + + if (allRemoves(myChanges) && allRemoves(theirChanges)) { + // Special case for remove changes that are supersets of one another + if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) { + var _hunk$lines3; + + (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges)); + + return; + } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) { + var _hunk$lines4; + + (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges)); + + return; + } + } else if (arrayEqual(myChanges, theirChanges)) { + var _hunk$lines5; + + (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges)); + + return; + } + + conflict(hunk, myChanges, theirChanges); + } + + function removal(hunk, mine, their, swap) { + var myChanges = collectChange(mine), + theirChanges = collectContext(their, myChanges); + + if (theirChanges.merged) { + var _hunk$lines6; + + (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged)); + } else { + conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges); + } + } + + function conflict(hunk, mine, their) { + hunk.conflict = true; + hunk.lines.push({ + conflict: true, + mine: mine, + theirs: their + }); + } + + function insertLeading(hunk, insert, their) { + while (insert.offset < their.offset && insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + insert.offset++; + } + } + + function insertTrailing(hunk, insert) { + while (insert.index < insert.lines.length) { + var line = insert.lines[insert.index++]; + hunk.lines.push(line); + } + } + + function collectChange(state) { + var ret = [], + operation = state.lines[state.index][0]; + + while (state.index < state.lines.length) { + var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change. + + if (operation === '-' && line[0] === '+') { + operation = '+'; + } + + if (operation === line[0]) { + ret.push(line); + state.index++; + } else { + break; + } + } + + return ret; + } + + function collectContext(state, matchChanges) { + var changes = [], + merged = [], + matchIndex = 0, + contextChanges = false, + conflicted = false; + + while (matchIndex < matchChanges.length && state.index < state.lines.length) { + var change = state.lines[state.index], + match = matchChanges[matchIndex]; // Once we've hit our add, then we are done + + if (match[0] === '+') { + break; + } + + contextChanges = contextChanges || change[0] !== ' '; + merged.push(match); + matchIndex++; // Consume any additions in the other block as a conflict to attempt + // to pull in the remaining context after this + + if (change[0] === '+') { + conflicted = true; + + while (change[0] === '+') { + changes.push(change); + change = state.lines[++state.index]; + } + } + + if (match.substr(1) === change.substr(1)) { + changes.push(change); + state.index++; + } else { + conflicted = true; + } + } + + if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) { + conflicted = true; + } + + if (conflicted) { + return changes; + } + + while (matchIndex < matchChanges.length) { + merged.push(matchChanges[matchIndex++]); + } + + return { + merged: merged, + changes: changes + }; + } + + function allRemoves(changes) { + return changes.reduce(function (prev, change) { + return prev && change[0] === '-'; + }, true); + } + + function skipRemoveSuperset(state, removeChanges, delta) { + for (var i = 0; i < delta; i++) { + var changeContent = removeChanges[removeChanges.length - delta + i].substr(1); + + if (state.lines[state.index + i] !== ' ' + changeContent) { + return false; + } + } + + state.index += delta; + return true; + } + + function calcOldNewLineCount(lines) { + var oldLines = 0; + var newLines = 0; + lines.forEach(function (line) { + if (typeof line !== 'string') { + var myCount = calcOldNewLineCount(line.mine); + var theirCount = calcOldNewLineCount(line.theirs); + + if (oldLines !== undefined) { + if (myCount.oldLines === theirCount.oldLines) { + oldLines += myCount.oldLines; + } else { + oldLines = undefined; + } + } + + if (newLines !== undefined) { + if (myCount.newLines === theirCount.newLines) { + newLines += myCount.newLines; + } else { + newLines = undefined; + } + } + } else { + if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) { + newLines++; + } + + if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) { + oldLines++; + } + } + }); + return { + oldLines: oldLines, + newLines: newLines + }; + } + + // See: http://code.google.com/p/google-diff-match-patch/wiki/API + function convertChangesToDMP(changes) { + var ret = [], + change, + operation; + + for (var i = 0; i < changes.length; i++) { + change = changes[i]; + + if (change.added) { + operation = 1; + } else if (change.removed) { + operation = -1; + } else { + operation = 0; + } + + ret.push([operation, change.value]); + } + + return ret; + } + + function convertChangesToXML(changes) { + var ret = []; + + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + + ret.push(escapeHTML(change.value)); + + if (change.added) { + ret.push(''); + } else if (change.removed) { + ret.push(''); + } + } + + return ret.join(''); + } + + function escapeHTML(s) { + var n = s; + n = n.replace(/&/g, '&'); + n = n.replace(//g, '>'); + n = n.replace(/"/g, '"'); + return n; + } + + exports.Diff = Diff; + exports.applyPatch = applyPatch; + exports.applyPatches = applyPatches; + exports.canonicalize = canonicalize; + exports.convertChangesToDMP = convertChangesToDMP; + exports.convertChangesToXML = convertChangesToXML; + exports.createPatch = createPatch; + exports.createTwoFilesPatch = createTwoFilesPatch; + exports.diffArrays = diffArrays; + exports.diffChars = diffChars; + exports.diffCss = diffCss; + exports.diffJson = diffJson; + exports.diffLines = diffLines; + exports.diffSentences = diffSentences; + exports.diffTrimmedLines = diffTrimmedLines; + exports.diffWords = diffWords; + exports.diffWordsWithSpace = diffWordsWithSpace; + exports.merge = merge; + exports.parsePatch = parsePatch; + exports.structuredPatch = structuredPatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],93:[function(require,module,exports){ +module.exports = extend; + +/* + var obj = {a: 3, b: 5}; + extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 4, b: 5, c: 8} + + var obj = {a: 3, b: 5}; + extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8} + obj; // {a: 3, b: 5} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3, 4]} + + var arr = [1, 2, 3]; + var obj = {a: 3, b: 5}; + extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]} + arr.push(4); + obj; // {a: 3, b: 5, c: [1, 2, 3]} + + extend({a: 4, b: 5}); // {a: 4, b: 5} + extend({a: 4, b: 5}, 3); {a: 4, b: 5} + extend({a: 4, b: 5}, true); {a: 4, b: 5} + extend('hello', {a: 4, b: 5}); // throws + extend(3, {a: 4, b: 5}); // throws +*/ + +function extend(/* [deep], obj1, obj2, [objn] */) { + var args = [].slice.call(arguments); + var deep = false; + if (typeof args[0] == 'boolean') { + deep = args.shift(); + } + var result = args[0]; + if (isUnextendable(result)) { + throw new Error('extendee must be an object'); + } + var extenders = args.slice(1); + var len = extenders.length; + for (var i = 0; i < len; i++) { + var extender = extenders[i]; + for (var key in extender) { + if (Object.prototype.hasOwnProperty.call(extender, key)) { + var value = extender[key]; + if (deep && isCloneable(value)) { + var base = Array.isArray(value) ? [] : {}; + result[key] = extend( + true, + Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key]) + ? result[key] + : base, + value + ); + } else { + result[key] = value; + } + } + } + } + return result; +} + +function isCloneable(obj) { + return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]'; +} + +function isUnextendable(val) { + return !val || (typeof val != 'object' && typeof val != 'function'); +} + +},{}],94:[function(require,module,exports){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + +},{}],95:[function(require,module,exports){ +"use strict"; + +// cache a reference to setTimeout, so that our reference won't be stubbed out +// when using fake timers and errors will still get logged +// https://github.com/cjohansen/Sinon.JS/issues/381 +var realSetTimeout = setTimeout; + +function configureLogger(config) { + // eslint-disable-next-line no-param-reassign + config = config || {}; + // Function which prints errors. + if (!config.hasOwnProperty("logger")) { + // eslint-disable-next-line no-empty-function + config.logger = function() {}; + } + // When set to true, any errors logged will be thrown immediately; + // If set to false, the errors will be thrown in separate execution frame. + if (!config.hasOwnProperty("useImmediateExceptions")) { + config.useImmediateExceptions = true; + } + // wrap realSetTimeout with something we can stub in tests + if (!config.hasOwnProperty("setTimeout")) { + config.setTimeout = realSetTimeout; + } + + return function logError(label, e) { + var msg = `${label} threw exception: `; + var err = { + name: e.name || label, + message: e.message || e.toString(), + stack: e.stack + }; + + function throwLoggedError() { + err.message = msg + err.message; + throw err; + } + + config.logger(`${msg}[${err.name}] ${err.message}`); + + if (err.stack) { + config.logger(err.stack); + } + + if (config.useImmediateExceptions) { + throwLoggedError(); + } else { + config.setTimeout(throwLoggedError, 0); + } + }; +} + +module.exports = configureLogger; + +},{}],96:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; +} + +CustomEvent.prototype = new Event(); + +CustomEvent.prototype.constructor = CustomEvent; + +module.exports = CustomEvent; + +},{"./event":98}],97:[function(require,module,exports){ +"use strict"; + +function flattenOptions(options) { + if (options !== Object(options)) { + return { + capture: Boolean(options), + once: false, + passive: false + }; + } + return { + capture: Boolean(options.capture), + once: Boolean(options.once), + passive: Boolean(options.passive) + }; +} +function not(fn) { + return function() { + return !fn.apply(this, arguments); + }; +} +function hasListenerFilter(listener, capture) { + return function(listenerSpec) { + return ( + listenerSpec.capture === capture && + listenerSpec.listener === listener + ); + }; +} + +var EventTarget = { + // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener + addEventListener: function addEventListener( + event, + listener, + providedOptions + ) { + // 3. Let capture, passive, and once be the result of flattening more options. + // Flatten property before executing step 2, + // feture detection is usually based on registering handler with options object, + // that has getter defined + // addEventListener("load", () => {}, { + // get once() { supportsOnce = true; } + // }); + var options = flattenOptions(providedOptions); + + // 2. If callback is null, then return. + if (listener === null || listener === undefined) { + return; + } + + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + + // 4. If context object’s associated list of event listener + // does not contain an event listener whose type is type, + // callback is callback, and capture is capture, then append + // a new event listener to it, whose type is type, callback is + // callback, capture is capture, passive is passive, and once is once. + if ( + !this.eventListeners[event].some( + hasListenerFilter(listener, options.capture) + ) + ) { + this.eventListeners[event].push({ + listener: listener, + capture: options.capture, + once: options.once + }); + } + }, + + // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener + removeEventListener: function removeEventListener( + event, + listener, + providedOptions + ) { + if (!this.eventListeners || !this.eventListeners[event]) { + return; + } + + // 2. Let capture be the result of flattening options. + var options = flattenOptions(providedOptions); + + // 3. If there is an event listener in the associated list of + // event listeners whose type is type, callback is callback, + // and capture is capture, then set that event listener’s + // removed to true and remove it from the associated list of event listeners. + this.eventListeners[event] = this.eventListeners[event].filter( + not(hasListenerFilter(listener, options.capture)) + ); + }, + + dispatchEvent: function dispatchEvent(event) { + if (!this.eventListeners || !this.eventListeners[event.type]) { + return Boolean(event.defaultPrevented); + } + + var self = this; + var type = event.type; + var listeners = self.eventListeners[type]; + + // Remove listeners, that should be dispatched once + // before running dispatch loop to avoid nested dispatch issues + self.eventListeners[type] = listeners.filter(function(listenerSpec) { + return !listenerSpec.once; + }); + listeners.forEach(function(listenerSpec) { + var listener = listenerSpec.listener; + if (typeof listener === "function") { + listener.call(self, event); + } else { + listener.handleEvent(event); + } + }); + + return Boolean(event.defaultPrevented); + } +}; + +module.exports = EventTarget; + +},{}],98:[function(require,module,exports){ +"use strict"; + +function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); +} + +Event.prototype = { + initEvent: function(type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + this.currentTarget = target; + }, + + // eslint-disable-next-line no-empty-function + stopPropagation: function() {}, + + preventDefault: function() { + this.defaultPrevented = true; + } +}; + +module.exports = Event; + +},{}],99:[function(require,module,exports){ +"use strict"; + +module.exports = { + Event: require("./event"), + ProgressEvent: require("./progress-event"), + CustomEvent: require("./custom-event"), + EventTarget: require("./event-target") +}; + +},{"./custom-event":96,"./event":98,"./event-target":97,"./progress-event":100}],100:[function(require,module,exports){ +"use strict"; + +var Event = require("./event"); + +function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = + typeof progressEventRaw.loaded === "number" + ? progressEventRaw.loaded + : null; + this.total = + typeof progressEventRaw.total === "number" + ? progressEventRaw.total + : null; + this.lengthComputable = Boolean(progressEventRaw.total); +} + +ProgressEvent.prototype = new Event(); + +ProgressEvent.prototype.constructor = ProgressEvent; + +module.exports = ProgressEvent; + +},{"./event":98}],101:[function(require,module,exports){ +"use strict"; + +var FakeTimers = require("@sinonjs/fake-timers"); +var fakeServer = require("./index"); + +// eslint-disable-next-line no-empty-function +function Server() {} +Server.prototype = fakeServer; + +var fakeServerWithClock = new Server(); + +fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock === "object") { + this.clock = setTimeout.clock; + } else { + this.clock = FakeTimers.install(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function(fn, timeout) { + server.longestTimeout = Math.max( + timeout, + server.longestTimeout || 0 + ); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return fakeServer.addRequest.call(this, xhr); +}; + +fakeServerWithClock.respond = function respond() { + var returnVal = fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; - readyStateChange: function readyStateChange(state) { - this.readyState = state; + if (this.resetClock) { + this.clock.uninstall(); + this.resetClock = false; + } + } - var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this); + return returnVal; +}; - if (typeof this.onreadystatechange === "function") { - try { - this.onreadystatechange(readyStateChangeEvent); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } +fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.uninstall(); + } - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); - } - this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } + return fakeServer.restore.apply(this, arguments); +}; - this.dispatchEvent(readyStateChangeEvent); - }, +module.exports = fakeServerWithClock; - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); +},{"./index":102,"@sinonjs/fake-timers":58}],102:[function(require,module,exports){ +"use strict"; - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } +var fakeXhr = require("../fake-xhr"); +var push = [].push; +var log = require("./log"); +var configureLogError = require("../configure-logger"); +var pathToRegexp = require("path-to-regexp"); - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - verifyRequestOpened(this); - this.responseHeaders = {}; +function responseArray(handler) { + var response = handler; - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } + if (Object.prototype.toString.call(handler) !== "[object Array]") { + response = [200, {}, handler]; + } - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, + if (typeof response[2] !== "string") { + if (!supportsArrayBuffer) { + throw new TypeError( + `Fake server response body should be a string, but was ${typeof response[2]}` + ); + } else if (!(response[2] instanceof ArrayBuffer)) { + throw new TypeError( + `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}` + ); + } + } - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - var contentType = getHeader(this.requestHeaders, "Content-Type"); - if (this.requestHeaders[contentType]) { - var value = this.requestHeaders[contentType].split(";"); - this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; - } else if (supportsFormData && !(data instanceof FormData)) { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } + return response; +} - this.requestBody = data; - } +function getDefaultWindowLocation() { + var winloc = { + hostname: "localhost", + port: process.env.PORT || 80, + protocol: "http:" + }; + winloc.host = + winloc.hostname + + (String(winloc.port) === "80" ? "" : `:${winloc.port}`); + return winloc; +} - this.errorFlag = false; - this.sendFlag = this.async; - clearResponse(this); - this.readyStateChange(FakeXMLHttpRequest.OPENED); +function getWindowLocation() { + if (typeof window === "undefined") { + // Fallback + return getDefaultWindowLocation(); + } - if (typeof this.onSend === "function") { - this.onSend(this); - } + if (typeof window.location !== "undefined") { + // Browsers place location on window + return window.location; + } - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, + if ( + typeof window.window !== "undefined" && + typeof window.window.location !== "undefined" + ) { + // React Native on Android places location on window.window + return window.window.location; + } - abort: function abort() { - this.aborted = true; - clearResponse(this); - this.errorFlag = true; - this.requestHeaders = {}; - this.responseHeaders = {}; + return getDefaultWindowLocation(); +} - if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } +function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = + !url || + url === reqUrl || + (typeof url.test === "function" && url.test(reqUrl)) || + (typeof url === "function" && url(reqUrl) === true); + + return matchMethod && matchUrl; +} - this.readyState = FakeXMLHttpRequest.UNSENT; +function match(response, request) { + var wloc = getWindowLocation(); - this.dispatchEvent(new sinon.Event("abort", false, false, this)); + var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`); - this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); + var requestUrl = request.url; - if (typeof this.onerror === "function") { - this.onerror(); - } - }, + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, "/"); + } - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response === "function") { + var ru = response.url; + var args = [request].concat( + ru && typeof ru.exec === "function" + ? ru.exec(requestUrl).slice(1) + : [] + ); + return response.response.apply(response, args); + } - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } + return true; + } - header = getHeader(this.responseHeaders, header); + return false; +} - return this.responseHeaders[header] || null; - }, +function incrementRequestCount() { + var count = ++this.requestCount; - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } + this.requested = true; - var headers = ""; + this.requestedOnce = count === 1; + this.requestedTwice = count === 2; + this.requestedThrice = count === 3; - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } + this.firstRequest = this.getRequest(0); + this.secondRequest = this.getRequest(1); + this.thirdRequest = this.getRequest(2); - return headers; - }, + this.lastRequest = this.getRequest(count - 1); +} - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - var contentType = this.getResponseHeader("Content-Type"); +var fakeServer = { + create: function(config) { + var server = Object.create(this); + server.configure(config); + this.xhr = fakeXhr.useFakeXMLHttpRequest(); + server.requests = []; + server.requestCount = 0; + server.queue = []; + server.responses = []; + + this.xhr.onCreate = function(xhrObj) { + xhrObj.unsafeHeadersEnabled = function() { + return !(server.unsafeHeadersEnabled === false); + }; + server.addRequest(xhrObj); + }; - var isTextResponse = this.responseType === "" || this.responseType === "text"; - clearResponse(this); - if (this.async) { - var chunkSize = this.chunkSize || 10; - var index = 0; + return server; + }, + + configure: function(config) { + var self = this; + var allowlist = { + autoRespond: true, + autoRespondAfter: true, + respondImmediately: true, + fakeHTTPMethods: true, + logger: true, + unsafeHeadersEnabled: true + }; - do { - this.readyStateChange(FakeXMLHttpRequest.LOADING); + // eslint-disable-next-line no-param-reassign + config = config || {}; - if (isTextResponse) { - this.responseText = this.response += body.substring(index, index + chunkSize); - } - index += chunkSize; - } while (index < body.length); - } + Object.keys(config).forEach(function(setting) { + if (setting in allowlist) { + self[setting] = config[setting]; + } + }); - this.response = convertResponseBody(this.responseType, contentType, body); - if (isTextResponse) { - this.responseText = this.response; - } + self.logError = configureLogError(config); + }, - if (this.responseType === "document") { - this.responseXML = this.response; - } else if (this.responseType === "" && isXmlContentType(contentType)) { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } - this.readyStateChange(FakeXMLHttpRequest.DONE); - }, + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); - respond: function respond(status, headers, body) { - this.status = typeof status === "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseHeaders(headers || {}); - this.setResponseBody(body || ""); - }, + incrementRequestCount.call(this); - uploadProgress: function uploadProgress(progressEventRaw) { - if (supportsProgress) { - this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, + xhrObj.onSend = function() { + server.handleRequest(this); - downloadProgress: function downloadProgress(progressEventRaw) { - if (supportsProgress) { - this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); - } - }, + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function() { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); - uploadError: function uploadError(error) { - if (supportsCustomEvent) { - this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); - } + server.responding = true; } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match( + /_method=([^\b;]+)/ + ); + return matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + logger: function() { + // no-op; override via configure() + }, + + logError: configureLogError({}), + + log: log, + + respondWith: function respondWith(method, url, body) { + if (arguments.length === 1 && typeof method !== "function") { + this.response = responseArray(method); + return; + } + + if (arguments.length === 1) { + // eslint-disable-next-line no-param-reassign + body = method; + // eslint-disable-next-line no-param-reassign + url = method = null; + } + + if (arguments.length === 2) { + // eslint-disable-next-line no-param-reassign + body = url; + // eslint-disable-next-line no-param-reassign + url = method; + // eslint-disable-next-line no-param-reassign + method = null; + } + + // Escape port number to prevent "named" parameters in 'path-to-regexp' module + if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) { + var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/); + // eslint-disable-next-line no-param-reassign + url = `${m[1]}\\:${m[2]}`; + } + + push.call(this.responses, { + method: method, + url: + typeof url === "string" && url !== "" ? pathToRegexp(url) : url, + response: typeof body === "function" ? body : responseArray(body) }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var self = this; + + requests.forEach(function(request) { + self.processRequest(request); }); + }, - sinon.useFakeXMLHttpRequest = function () { - FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; - } + respondAll: function respondAll() { + if (this.respondImmediately) { + return; + } - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = sinonXhr.GlobalActiveXObject; - } + this.queue = this.requests.slice(0); - delete FakeXMLHttpRequest.restore; + var request; + while ((request = this.queue.shift())) { + this.processRequest(request); + } + }, - if (keepOnCreate !== true) { - delete FakeXMLHttpRequest.onCreate; - } - }; - if (sinonXhr.supportsXHR) { - global.XMLHttpRequest = FakeXMLHttpRequest; + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; } - if (sinonXhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { + var response = this.response || [404, {}, ""]; - return new FakeXMLHttpRequest(); + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; } + } + } - return new sinonXhr.GlobalActiveXObject(objId); - }; + if (request.readyState !== 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); } + } catch (e) { + this.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + }, + + getRequest: function getRequest(index) { + return this.requests[index] || null; + }, + + reset: function reset() { + this.resetBehavior(); + this.resetHistory(); + }, + + resetBehavior: function resetBehavior() { + this.responses.length = this.queue.length = 0; + }, + + resetHistory: function resetHistory() { + this.requests.length = this.requestCount = 0; + + this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false; + + this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null; + } +}; + +module.exports = fakeServer; + +},{"../configure-logger":95,"../fake-xhr":105,"./log":103,"path-to-regexp":107}],103:[function(require,module,exports){ +"use strict"; +var inspect = require("util").inspect; + +function log(response, request) { + var str; + + str = `Request:\n${inspect(request)}\n\n`; + str += `Response:\n${inspect(response)}\n\n`; + + /* istanbul ignore else: when this.logger is not a function, it can't be called */ + if (typeof this.logger === "function") { + this.logger(str); + } +} + +module.exports = log; - return FakeXMLHttpRequest; +},{"util":91}],104:[function(require,module,exports){ +"use strict"; + +exports.isSupported = (function() { + try { + return Boolean(new Blob()); + } catch (e) { + return false; + } +})(); + +},{}],105:[function(require,module,exports){ +"use strict"; + +var GlobalTextEncoder = + typeof TextEncoder !== "undefined" + ? TextEncoder + : require("@sinonjs/text-encoding").TextEncoder; +var globalObject = require("@sinonjs/commons").global; +var configureLogError = require("../configure-logger"); +var sinonEvent = require("../event"); +var extend = require("just-extend"); + +var supportsProgress = typeof ProgressEvent !== "undefined"; +var supportsCustomEvent = typeof CustomEvent !== "undefined"; +var supportsFormData = typeof FormData !== "undefined"; +var supportsArrayBuffer = typeof ArrayBuffer !== "undefined"; +var supportsBlob = require("./blob").isSupported; + +function getWorkingXHR(globalScope) { + var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined"; + if (supportsXHR) { + return globalScope.XMLHttpRequest; + } + + var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined"; + if (supportsActiveX) { + return function() { + return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0"); }; + } + + return false; +} - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; +// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name +var unsafeHeaders = { + "Accept-Charset": true, + "Access-Control-Request-Headers": true, + "Access-Control-Request-Method": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + DNT: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Origin: true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true +}; + +function EventTargetHandler() { + var self = this; + var events = [ + "loadstart", + "progress", + "abort", + "error", + "load", + "timeout", + "loadend" + ]; + + function addEventListener(eventName) { + self.addEventListener(eventName, function(event) { + var listener = self[`on${eventName}`]; + + if (listener && typeof listener === "function") { + listener.call(this, event); + } + }); } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + events.forEach(addEventListener); +} + +EventTargetHandler.prototype = sinonEvent.EventTarget; - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("../extend"); - require("./event"); - require("../log_error"); - makeApi(sinon); - module.exports = sinon; +function normalizeHeaderValue(value) { + // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes + /*eslint no-control-regex: "off"*/ + return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, ""); +} + +function getHeader(headers, header) { + var foundHeader = Object.keys(headers).filter(function(h) { + return h.toLowerCase() === header.toLowerCase(); + }); + + return foundHeader[0] || null; +} + +function excludeSetCookie2Header(header) { + return !/^Set-Cookie2?$/i.test(header); +} + +function verifyResponseBodyType(body, responseType) { + var error = null; + var isString = typeof body === "string"; + + if (responseType === "arraybuffer") { + if (!isString && !(body instanceof ArrayBuffer)) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.` + ); + error.name = "InvalidBodyException"; + } + } else if (responseType === "blob") { + if ( + !isString && + !(body instanceof ArrayBuffer) && + supportsBlob && + !(body instanceof Blob) + ) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.` + ); + error.name = "InvalidBodyException"; + } + } else if (!isString) { + error = new Error( + `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.` + ); + error.name = "InvalidBodyException"; } - if (isAMD) { - define(loadDependencies); - return; + if (error) { + throw error; } +} - if (isNode) { - loadDependencies(require, module.exports, module); - return; +function convertToArrayBuffer(body, encoding) { + if (body instanceof ArrayBuffer) { + return body; } - if (sinonGlobal) { - makeApi(sinonGlobal); + return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer; +} + +function isXmlContentType(contentType) { + return ( + !contentType || + /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType) + ); +} + +function clearResponse(xhr) { + if (xhr.responseType === "" || xhr.responseType === "text") { + xhr.response = xhr.responseText = ""; + } else { + xhr.response = xhr.responseText = null; } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); + xhr.responseXML = null; +} -/** - * @depend fake_xdomain_request.js - * @depend fake_xml_http_request.js - * @depend ../format.js - * @depend ../log_error.js - */ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - var push = [].push; +function fakeXMLHttpRequestFor(globalScope) { + var isReactNative = + globalScope.navigator && + globalScope.navigator.product === "ReactNative"; + var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject; + sinonXhr.supportsActiveX = + typeof sinonXhr.GlobalActiveXObject !== "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined"; + sinonXhr.workingXHR = getWorkingXHR(globalScope); + sinonXhr.supportsTimeout = + sinonXhr.supportsXHR && + "timeout" in new sinonXhr.GlobalXMLHttpRequest(); + sinonXhr.supportsCORS = + isReactNative || + (sinonXhr.supportsXHR && + "withCredentials" in new sinonXhr.GlobalXMLHttpRequest()); + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest(config) { + EventTargetHandler.call(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new EventTargetHandler(); + this.responseType = ""; + this.response = ""; + this.logError = configureLogError(config); + + if (sinonXhr.supportsTimeout) { + this.timeout = 0; + } + + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + if (typeof FakeXMLHttpRequest.onCreate === "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + // largest arity in XHR is 5 - XHR#open + var apply = function(obj, method, args) { + switch (args.length) { + case 0: + return obj[method](); + case 1: + return obj[method](args[0]); + case 2: + return obj[method](args[0], args[1]); + case 3: + return obj[method](args[0], args[1], args[2]); + case 4: + return obj[method](args[0], args[1], args[2], args[3]); + case 5: + return obj[method](args[0], args[1], args[2], args[3], args[4]); + default: + throw new Error("Unhandled case"); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn); + }; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap + + [ + "open", + "setRequestHeader", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ].forEach(function(method) { + fakeXhr[method] = function() { + return apply(xhr, method, arguments); + }; + }); + + fakeXhr.send = function() { + // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute + if (xhr.responseType !== fakeXhr.responseType) { + xhr.responseType = fakeXhr.responseType; + } + return apply(xhr, "send", arguments); + }; + + var copyAttrs = function(args) { + args.forEach(function(attr) { + fakeXhr[attr] = xhr[attr]; + }); + }; + + var stateChangeStart = function() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["response"]); + if (xhr.responseType === "" || xhr.responseType === "text") { + copyAttrs(["responseText"]); + } + } + if ( + xhr.readyState === FakeXMLHttpRequest.DONE && + (xhr.responseType === "" || xhr.responseType === "document") + ) { + copyAttrs(["responseXML"]); + } + }; + + var stateChangeEnd = function() { + if (fakeXhr.onreadystatechange) { + // eslint-disable-next-line no-useless-call + fakeXhr.onreadystatechange.call(fakeXhr, { + target: fakeXhr, + currentTarget: fakeXhr + }); + } + }; - function responseArray(handler) { - var response = handler; + var stateChange = function stateChange() { + stateChangeStart(); + stateChangeEnd(); + }; - if (Object.prototype.toString.call(handler) !== "[object Array]") { - response = [200, {}, handler]; - } + if (xhr.addEventListener) { + xhr.addEventListener("readystatechange", stateChangeStart); + + Object.keys(fakeXhr.eventListeners).forEach(function(event) { + /*eslint-disable no-loop-func*/ + fakeXhr.eventListeners[event].forEach(function(handler) { + xhr.addEventListener(event, handler.listener, { + capture: handler.capture, + once: handler.once + }); + }); + /*eslint-enable no-loop-func*/ + }); - if (typeof response[2] !== "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); + xhr.addEventListener("readystatechange", stateChangeEnd); + } else { + xhr.onreadystatechange = stateChange; } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; - return response; + function verifyRequestOpened(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error(`INVALID_STATE_ERR - ${xhr.readyState}`); + } } - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; + function verifyRequestSent(xhr) { + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } } - function match(response, request) { - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); + function verifyHeadersReceived(xhr) { + if ( + xhr.async && + xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED + ) { + throw new Error("No headers received"); } + } - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response === "function") { - var ru = response.url; - var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []); - return response.response.apply(response, args); + function convertResponseBody(responseType, contentType, body) { + if (responseType === "" || responseType === "text") { + return body; + } else if (supportsArrayBuffer && responseType === "arraybuffer") { + return convertToArrayBuffer(body); + } else if (responseType === "json") { + try { + return JSON.parse(body); + } catch (e) { + // Return parsing failure as null + return null; + } + } else if (supportsBlob && responseType === "blob") { + if (body instanceof Blob) { + return body; } - return true; + var blobOptions = {}; + if (contentType) { + blobOptions.type = contentType; + } + return new Blob([convertToArrayBuffer(body)], blobOptions); + } else if (responseType === "document") { + if (isXmlContentType(contentType)) { + return FakeXMLHttpRequest.parseXML(body); + } + return null; } - - return false; + throw new Error(`Invalid responseType ${responseType}`); } - function makeApi(sinon) { - sinon.fakeServer = { - create: function (config) { - var server = sinon.create(this); - server.configure(config); - if (!sinon.xhr.supportsCORS) { - this.xhr = sinon.useFakeXDomainRequest(); - } else { - this.xhr = sinon.useFakeXMLHttpRequest(); - } - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; + /** + * Steps to follow when there is an error, according to: + * https://xhr.spec.whatwg.org/#request-error-steps + */ + function requestErrorSteps(xhr) { + clearResponse(xhr); + xhr.errorFlag = true; + xhr.requestHeaders = {}; + xhr.responseHeaders = {}; + + if ( + xhr.readyState !== FakeXMLHttpRequest.UNSENT && + xhr.sendFlag && + xhr.readyState !== FakeXMLHttpRequest.DONE + ) { + xhr.readyStateChange(FakeXMLHttpRequest.DONE); + xhr.sendFlag = false; + } + } - return server; - }, - configure: function (config) { - var whitelist = { - "autoRespond": true, - "autoRespondAfter": true, - "respondImmediately": true, - "fakeHTTPMethods": true - }; - var setting; + FakeXMLHttpRequest.parseXML = function parseXML(text) { + // Treat empty string as parsing failure + if (text !== "") { + try { + if (typeof DOMParser !== "undefined") { + var parser = new DOMParser(); + var parsererrorNS = ""; - config = config || {}; - for (setting in config) { - if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) { - this[setting] = config[setting]; - } - } - }, - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - - if (server.respondImmediately) { - server.respond(); - } else if (server.autoRespond && !server.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, server.autoRespondAfter || 10); - - server.responding = true; + try { + var parsererrors = parser + .parseFromString("INVALID", "text/xml") + .getElementsByTagName("parsererror"); + if (parsererrors.length) { + parsererrorNS = parsererrors[0].namespaceURI; + } + } catch (e) { + // passing invalid XML makes IE11 throw + // so no namespace needs to be determined } - }; - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return matches ? matches[1] : request.method; - } - - return request.method; - }, - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; + var result; + try { + result = parser.parseFromString(text, "text/xml"); + } catch (err) { + return null; } - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); + return result.getElementsByTagNameNS( + parsererrorNS, + "parsererror" + ).length + ? null + : result; } - }, + var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc; + } catch (e) { + // Unable to parse XML - no biggie + } + } + + return null; + }; - log: function log(response, request) { - var str; + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; + extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, { + async: true, - sinon.log(str); - }, + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async === "boolean" ? async : true; + this.username = username; + this.password = password; + clearResponse(this); + this.requestHeaders = {}; + this.sendFlag = false; - respondWith: function respondWith(method, url, body) { - if (arguments.length === 1 && typeof method !== "function") { - this.response = responseArray(method); + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = FakeXMLHttpRequest.filters.some(function(filter) { + return filter.apply(this, xhrArgs); + }); + if (defake) { + FakeXMLHttpRequest.defake(this, arguments); return; } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, - if (!this.responses) { - this.responses = []; - } + readyStateChange: function readyStateChange(state) { + this.readyState = state; - if (arguments.length === 1) { - body = method; - url = method = null; + var readyStateChangeEvent = new sinonEvent.Event( + "readystatechange", + false, + false, + this + ); + if (typeof this.onreadystatechange === "function") { + try { + this.onreadystatechange(readyStateChangeEvent); + } catch (e) { + this.logError("Fake XHR onreadystatechange handler", e); } + } - if (arguments.length === 2) { - body = url; - url = method; - method = null; + if (this.readyState !== FakeXMLHttpRequest.DONE) { + this.dispatchEvent(readyStateChangeEvent); + } else { + var event, progress; + + if (this.timedOut || this.aborted || this.status === 0) { + progress = { loaded: 0, total: 0 }; + event = + (this.timedOut && "timeout") || + (this.aborted && "abort") || + "error"; + } else { + progress = { loaded: 100, total: 100 }; + event = "load"; } - push.call(this.responses, { - method: method, - url: url, - response: typeof body === "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) { - this.respondWith.apply(this, arguments); + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); } - var queue = this.queue || []; - var requests = queue.splice(0, queue.length); + this.dispatchEvent( + new sinonEvent.ProgressEvent("progress", progress, this) + ); + this.dispatchEvent( + new sinonEvent.ProgressEvent(event, progress, this) + ); + this.dispatchEvent(readyStateChangeEvent); + this.dispatchEvent( + new sinonEvent.ProgressEvent("loadend", progress, this) + ); + } + }, - for (var i = 0; i < requests.length; i++) { - this.processRequest(requests[i]); - } - }, + // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method + setRequestHeader: function setRequestHeader(header, value) { + if (typeof value !== "string") { + throw new TypeError( + `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}` + ); + } + verifyState(this); - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } + var checkUnsafeHeaders = true; + if (typeof this.unsafeHeadersEnabled === "function") { + checkUnsafeHeaders = this.unsafeHeadersEnabled(); + } - var response = this.response || [404, {}, ""]; + if ( + checkUnsafeHeaders && + (getHeader(unsafeHeaders, header) !== null || + /^(Sec-|Proxy-)/i.test(header)) + ) { + throw new Error( + // eslint-disable-next-line quotes + `Refused to set unsafe header "${header}"` + ); + } - if (this.responses) { - for (var l = this.responses.length, i = l - 1; i >= 0; i--) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } + // eslint-disable-next-line no-param-reassign + value = normalizeHeaderValue(value); - if (request.readyState !== 4) { - this.log(response, request); + var existingHeader = getHeader(this.requestHeaders, header); + if (existingHeader) { + this.requestHeaders[existingHeader] += `, ${value}`; + } else { + this.requestHeaders[header] = value; + } + }, - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, + setStatus: function setStatus(status) { + var sanitizedStatus = typeof status === "number" ? status : 200; - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; - } + verifyRequestOpened(this); + this.status = sanitizedStatus; + this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus]; + }, - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); - function loadDependencies(require, exports, module) { - var sinon = require("./core"); - require("./fake_xdomain_request"); - require("./fake_xml_http_request"); - require("../format"); - makeApi(sinon); - module.exports = sinon; - } + var responseHeaders = (this.responseHeaders = {}); - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); + Object.keys(headers).forEach(function(header) { + responseHeaders[header] = headers[header]; + }); -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function () { - - function makeApi(sinon) { - function Server() {} - Server.prototype = sinon.fakeServer; + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, - sinon.fakeServerWithClock = new Server(); + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock === "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; + if (!/^(head)$/i.test(this.method)) { + var contentType = getHeader( + this.requestHeaders, + "Content-Type" + ); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[ + contentType + ] = `${value[0]};charset=utf-8`; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = + "text/plain;charset=utf-8"; } - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + this.requestBody = data; + } - return clockSetTimeout.apply(this, arguments); - }; + this.errorFlag = false; + this.sendFlag = this.async; + clearResponse(this); - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + if (typeof this.onSend === "function") { + this.onSend(this); + } - return clockSetInterval.apply(this, arguments); - }; - } + // Only listen if setInterval and Date are a stubbed. + if ( + sinonXhr.supportsTimeout && + typeof setInterval.clock === "object" && + typeof Date.clock === "object" + ) { + var initiatedTime = Date.now(); + var self = this; + + // Listen to any possible tick by fake timers and check to see if timeout has + // been exceeded. It's important to note that timeout can be changed while a request + // is in flight, so we must check anytime the end user forces a clock tick to make + // sure timeout hasn't changed. + // https://xhr.spec.whatwg.org/#dfnReturnLink-2 + var clearIntervalId = setInterval(function() { + // Check if the readyState has been reset or is done. If this is the case, there + // should be no timeout. This will also prevent aborted requests and + // fakeServerWithClock from triggering unnecessary responses. + if ( + self.readyState === FakeXMLHttpRequest.UNSENT || + self.readyState === FakeXMLHttpRequest.DONE + ) { + clearInterval(clearIntervalId); + } else if ( + typeof self.timeout === "number" && + self.timeout > 0 + ) { + if (Date.now() >= initiatedTime + self.timeout) { + self.triggerTimeout(); + clearInterval(clearIntervalId); + } + } + }, 1); } - return sinon.fakeServer.addRequest.call(this, xhr); - }; + this.dispatchEvent( + new sinonEvent.Event("loadstart", false, false, this) + ); + }, - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); + abort: function abort() { + this.aborted = true; + requestErrorSteps(this); + this.readyState = FakeXMLHttpRequest.UNSENT; + }, - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; + error: function() { + clearResponse(this); + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + triggerTimeout: function triggerTimeout() { + if (sinonXhr.supportsTimeout) { + this.timedOut = true; + requestErrorSteps(this); } + }, - return returnVal; - }; + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); + if (/^Set-Cookie2?$/i.test(header)) { + return null; } - return sinon.fakeServer.restore.apply(this, arguments); - }; - } + // eslint-disable-next-line no-param-reassign + header = getHeader(this.responseHeaders, header); - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + return this.responseHeaders[header] || null; + }, - function loadDependencies(require) { - var sinon = require("./core"); - require("./fake_server"); - require("./fake_timers"); - makeApi(sinon); - } + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require); - } else { - makeApi(sinon); // eslint-disable-line no-undef - } -}()); + var responseHeaders = this.responseHeaders; + var headers = Object.keys(responseHeaders) + .filter(excludeSetCookie2Header) + .reduce(function(prev, header) { + var value = responseHeaders[header]; -/** - * @depend util/core.js - * @depend extend.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var push = [].push; + return `${prev}${header}: ${value}\r\n`; + }, ""); - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body, this.responseType); + var contentType = + this.overriddenMimeType || + this.getResponseHeader("Content-Type"); + + var isTextResponse = + this.responseType === "" || this.responseType === "text"; + clearResponse(this); + if (this.async) { + var chunkSize = this.chunkSize || 10; + var index = 0; + + do { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + + if (isTextResponse) { + this.responseText = this.response += body.substring( + index, + index + chunkSize + ); + } + index += chunkSize; + } while (index < body.length); } - if (config.injectInto && !(key in config.injectInto)) { - config.injectInto[key] = value; - sandbox.injectedKeys.push(key); - } else { - push.call(sandbox.args, value); + this.response = convertResponseBody( + this.responseType, + contentType, + body + ); + if (isTextResponse) { + this.responseText = this.response; } - } - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); + if (this.responseType === "document") { + this.responseXML = this.response; + } else if ( + this.responseType === "" && + isXmlContentType(contentType) + ) { + this.responseXML = FakeXMLHttpRequest.parseXML( + this.responseText + ); + } + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.responseURL = this.url; + + this.setStatus(status); + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, - if (config.useFakeServer) { - if (typeof config.useFakeServer === "object") { - sandbox.serverPrototype = config.useFakeServer; - } + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this.upload + ) + ); + } + }, - sandbox.useFakeServer(); + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent( + new sinonEvent.ProgressEvent( + "progress", + progressEventRaw, + this + ) + ); } + }, - if (config.useFakeTimers) { - if (typeof config.useFakeTimers === "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent( + new sinonEvent.CustomEvent("error", { detail: error }) + ); } + }, - return sandbox; + overrideMimeType: function overrideMimeType(type) { + if (this.readyState >= FakeXMLHttpRequest.LOADING) { + throw new Error("INVALID_STATE_ERR"); + } + this.overriddenMimeType = type; } + }); - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, + var states = { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }; - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; + extend(FakeXMLHttpRequest, states); + extend(FakeXMLHttpRequest.prototype, states); - if (!proto || !proto.create) { - return null; - } + function useFakeXMLHttpRequest() { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } - this.server = proto.create(); - return this.add(this.server); - }, + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject; + } - inject: function (obj) { - sinon.collection.inject.call(this, obj); + delete FakeXMLHttpRequest.restore; - if (this.clock) { - obj.clock = this.clock; - } + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + globalScope.XMLHttpRequest = FakeXMLHttpRequest; + } - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; + if (sinonXhr.supportsActiveX) { + globalScope.ActiveXObject = function ActiveXObject(objId) { + if ( + objId === "Microsoft.XMLHTTP" || + /^Msxml2\.XMLHTTP/i.test(objId) + ) { + return new FakeXMLHttpRequest(); } - obj.match = sinon.match; + return new sinonXhr.GlobalActiveXObject(objId); + }; + } - return obj; - }, + return FakeXMLHttpRequest; + } - restore: function () { - sinon.collection.restore.apply(this, arguments); - this.restoreContext(); - }, + return { + xhr: sinonXhr, + FakeXMLHttpRequest: FakeXMLHttpRequest, + useFakeXMLHttpRequest: useFakeXMLHttpRequest + }; +} - restoreContext: function () { - if (this.injectedKeys) { - for (var i = 0, j = this.injectedKeys.length; i < j; i++) { - delete this.injectInto[this.injectedKeys[i]]; - } - this.injectedKeys = []; - } - }, +module.exports = extend(fakeXMLHttpRequestFor(globalObject), { + fakeXMLHttpRequestFor: fakeXMLHttpRequestFor +}); - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } +},{"../configure-logger":95,"../event":99,"./blob":104,"@sinonjs/commons":46,"@sinonjs/text-encoding":86,"just-extend":93}],106:[function(require,module,exports){ +"use strict"; - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - sandbox.injectedKeys = []; - sandbox.injectInto = config.injectInto; - var prop, - value; - var exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop === "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } +module.exports = { + fakeServer: require("./fake-server"), + fakeServerWithClock: require("./fake-server/fake-server-with-clock"), + fakeXhr: require("./fake-xhr") +}; - return sandbox; - }, +},{"./fake-server":102,"./fake-server/fake-server-with-clock":101,"./fake-xhr":105}],107:[function(require,module,exports){ +var isarray = require('isarray') - match: sinon.match - }); +/** + * Expose `pathToRegexp`. + */ +module.exports = pathToRegexp +module.exports.parse = parse +module.exports.compile = compile +module.exports.tokensToFunction = tokensToFunction +module.exports.tokensToRegExp = tokensToRegExp - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g') - return sinon.sandbox; +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = [] + var key = 0 + var index = 0 + var path = '' + var defaultDelimiter = options && options.delimiter || '/' + var res + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0] + var escaped = res[1] + var offset = res.index + path += str.slice(index, offset) + index = offset + m.length + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1] + continue } - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./extend"); - require("./util/fake_server_with_clock"); - require("./util/fake_timers"); - require("./collection"); - module.exports = makeApi(sinon); + var next = str[index] + var prefix = res[2] + var name = res[3] + var capture = res[4] + var group = res[5] + var modifier = res[6] + var asterisk = res[7] + + // Push the current path onto the tokens. + if (path) { + tokens.push(path) + path = '' } - if (isAMD) { - define(loadDependencies); - return; - } + var partial = prefix != null && next != null && next !== prefix + var repeat = modifier === '+' || modifier === '*' + var optional = modifier === '?' || modifier === '*' + var delimiter = res[2] || defaultDelimiter + var pattern = capture || group + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }) + } - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index) + } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + // If the path exists, push it onto the end. + if (path) { + tokens.push(path) + } + + return tokens +} /** - * @depend util/core.js - * @depend sandbox.js + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} */ +function compile (str, options) { + return tokensToFunction(parse(str, options), options) +} + /** - * Test function, sandboxes fakes + * Prettier encoding of URI path segments. * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. * - * Copyright (c) 2010-2013 Christian Johansen + * @param {string} + * @return {string} */ -(function (sinonGlobal) { - - function makeApi(sinon) { - var slice = Array.prototype.slice; +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} - function test(callback) { - var type = typeof callback; +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens, options) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length) + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options)) + } + } - if (type !== "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } + return function (obj, opts) { + var path = '' + var data = obj || {} + var options = opts || {} + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent - function sinonSandboxedTest() { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var args = slice.call(arguments); - var oldDone = args.length && args[args.length - 1]; - var exception, result; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] - if (typeof oldDone === "function") { - args[args.length - 1] = function sinonDone(res) { - if (res) { - sandbox.restore(); - } else { - sandbox.verifyAndRestore(); - } - oldDone(res); - }; - } + if (typeof token === 'string') { + path += token - try { - result = callback.apply(this, args.concat(sandbox.args)); - } catch (e) { - exception = e; - } + continue + } - if (typeof oldDone !== "function") { - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } else { - sandbox.verifyAndRestore(); - } - } + var value = data[token.name] + var segment - return result; - } + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix + } - if (callback.length) { - return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars - return sinonSandboxedTest.apply(this, arguments); - }; - } + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } - return sinonSandboxedTest; + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') } - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } - sinon.test = test; - return test; - } + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]) - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./sandbox"); - module.exports = makeApi(core); - } + path += (j === 0 ? token.prefix : token.delimiter) + segment + } - if (isAMD) { - define(loadDependencies); - } else if (isNode) { - loadDependencies(require, module.exports, module); - } else if (sinonGlobal) { - makeApi(sinonGlobal); + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value) + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment } -}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef + + return path + } +} /** - * @depend util/core.js - * @depend test.js + * Escape a regular expression string. + * + * @param {string} str + * @return {string} */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + /** - * Test case, sandboxes all test functions + * Escape the capturing group by escaping special characters and meaning. * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. * - * Copyright (c) 2010-2013 Christian Johansen + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} */ -(function (sinonGlobal) { - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } +function attachKeys (re, keys) { + re.keys = keys + return re +} - var exception, result; +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options && options.sensitive ? '' : 'i' +} - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g) + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }) + } + } - if (tearDown) { - tearDown.apply(this, arguments); - } + return attachKeys(path, keys) +} - if (exception) { - throw exception; - } +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = [] - return result; - }; - } + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source) + } - function makeApi(sinon) { - function testCase(tests, prefix) { - if (!tests || typeof tests !== "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)) - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - var testName, - property, - method; + return attachKeys(regexp, keys) +} - for (testName in tests) { - if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { - property = tests[testName]; +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} - if (typeof property === "function" && rPrefix.test(testName)) { - method = property; +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } + options = options || {} - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } + var strict = options.strict + var end = options.end !== false + var route = '' - return methods; - } + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i] - sinon.testCase = testCase; - return testCase; - } + if (typeof token === 'string') { + route += escapeString(token) + } else { + var prefix = escapeString(token.prefix) + var capture = '(?:' + token.pattern + ')' - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + keys.push(token) - function loadDependencies(require, exports, module) { - var core = require("./util/core"); - require("./test"); - module.exports = makeApi(core); - } + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*' + } - if (isAMD) { - define(loadDependencies); - return; - } + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?' + } else { + capture = prefix + '(' + capture + ')?' + } + } else { + capture = prefix + '(' + capture + ')' + } - if (isNode) { - loadDependencies(require, module.exports, module); - return; + route += capture } + } - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon // eslint-disable-line no-undef -)); + var delimiter = escapeString(options.delimiter || '/') + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?' + } + + if (end) { + route += '$' + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)' + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} /** - * @depend times_in_words.js - * @depend util/core.js - * @depend match.js - * @depend format.js - */ -/** - * Assertions matching the test spy retrieval interface. + * Normalize the given path string, returning a regular expression. * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. * - * Copyright (c) 2010-2013 Christian Johansen + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} */ -(function (sinonGlobal, global) { - - var slice = Array.prototype.slice; - - function makeApi(sinon) { - var assert; - - function verifyIsStub() { - var method; +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options) + keys = [] + } - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; + options = options || {} - if (!method) { - assert.fail("fake is not a spy"); - } + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } - if (method.proxy && method.proxy.isSinonProxy) { - verifyIsStub(method.proxy); - } else { - if (typeof method !== "function") { - assert.fail(method + " is not a function"); - } + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } - if (typeof method.getCall !== "function") { - assert.fail(method + " is not stubbed"); - } - } + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} - } - } +},{"isarray":108}],108:[function(require,module,exports){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +},{}],109:[function(require,module,exports){ +'use strict'; +module.exports = { + stdout: false, + stderr: false +}; + +},{}],110:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.typeDetect = factory()); +}(this, (function () { 'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length === 2) { - message = method; - method = name; - } + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } - assert[name] = function (fake) { - verifyIsStub(fake); + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } - var args = slice.call(arguments, 1); - var failed = false; + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } - if (typeof method === "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] === "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } - if (failed) { - failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - } + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } - assert = { - failException: "AssertError", + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } - throw error; - }, + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } - pass: function pass() {}, + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = ""; - var actual = ""; + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } - callCount: function assertCallCount(method, count) { - verifyIsStub(method); + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } - if (method.callCount !== count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } - var o = options || {}; - var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail; + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } - for (var method in this) { - if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } - return target; - }, + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } - match: function match(actual, expectation) { - var matcher = sinon.match(expectation); - if (matcher.test(actual)) { - assert.pass("match"); - } else { - var formatted = [ - "expected value to match", - " expected = " + sinon.format(expectation), - " actual = " + sinon.format(actual) - ]; + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } - failAssertion(this, formatted.join("\n")); - } - } - }; + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { - return !spy.called; - }, "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion( - "alwaysCalledOn", - "expected %n to always be called with %1 as this but was called with %t" - ); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - sinon.assert = assert; - return assert; - } - - var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; - var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; - - function loadDependencies(require, exports, module) { - var sinon = require("./util/core"); - require("./match"); - require("./format"); - module.exports = makeApi(sinon); - } - - if (isAMD) { - define(loadDependencies); - return; - } +return typeDetect; - if (isNode) { - loadDependencies(require, module.exports, module); - return; - } +}))); - if (sinonGlobal) { - makeApi(sinonGlobal); - } -}( - typeof sinon === "object" && sinon, // eslint-disable-line no-undef - typeof global !== "undefined" ? global : self -)); +},{}]},{},[1])(1) +}); - return sinon; -})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvc2lub24uanMiLCJsaWIvc2lub24vYXNzZXJ0LmpzIiwibGliL3Npbm9uL2JlaGF2aW9yLmpzIiwibGliL3Npbm9uL2NvbGxlY3Qtb3duLW1ldGhvZHMuanMiLCJsaWIvc2lub24vY29sb3IuanMiLCJsaWIvc2lub24vY3JlYXRlLXNhbmRib3guanMiLCJsaWIvc2lub24vZGVmYXVsdC1iZWhhdmlvcnMuanMiLCJsaWIvc2lub24vZmFrZS5qcyIsImxpYi9zaW5vbi9tb2NrLWV4cGVjdGF0aW9uLmpzIiwibGliL3Npbm9uL21vY2suanMiLCJsaWIvc2lub24vcHJvbWlzZS5qcyIsImxpYi9zaW5vbi9wcm94eS1jYWxsLXV0aWwuanMiLCJsaWIvc2lub24vcHJveHktY2FsbC5qcyIsImxpYi9zaW5vbi9wcm94eS1pbnZva2UuanMiLCJsaWIvc2lub24vcHJveHkuanMiLCJsaWIvc2lub24vcmVzdG9yZS1vYmplY3QuanMiLCJsaWIvc2lub24vc2FuZGJveC5qcyIsImxpYi9zaW5vbi9zcHktZm9ybWF0dGVycy5qcyIsImxpYi9zaW5vbi9zcHkuanMiLCJsaWIvc2lub24vc3R1Yi5qcyIsImxpYi9zaW5vbi90aHJvdy1vbi1mYWxzeS1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2RlZmF1bHQtY29uZmlnLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9leHBvcnQtYXN5bmMtYmVoYXZpb3JzLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9leHRlbmQuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2Zvcm1hdC5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9nZXQtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtZXMtbW9kdWxlLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS9pcy1ub24tZXhpc3RlbnQtcHJvcGVydHkuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL2lzLXByb3BlcnR5LWNvbmZpZ3VyYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvaXMtcmVzdG9yYWJsZS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvbmV4dC10aWNrLmpzIiwibGliL3Npbm9uL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkcy5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvdXNlLXByb21pc2UtbGlicmFyeS5qcyIsImxpYi9zaW5vbi91dGlsL2NvcmUvd2Fsay1vYmplY3QuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dhbGsuanMiLCJsaWIvc2lub24vdXRpbC9jb3JlL3dyYXAtbWV0aG9kLmpzIiwibGliL3Npbm9uL3V0aWwvZmFrZS10aW1lcnMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2NsYXNzLW5hbWUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvZGVwcmVjYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9ldmVyeS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9mdW5jdGlvbi1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2dsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9vcmRlci1ieS1maXJzdC1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9jb3B5LXByb3RvdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL2Z1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9tYXAuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9zZXQuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvdHlwZS1vZi5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi92YWx1ZS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvZmFrZS10aW1lcnMvc3JjL2Zha2UtdGltZXJzLXNyYy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2FycmF5LXR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9hc3NlcnQtbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC1tZXRob2QtZXhpc3RzLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LXR5cGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9pcy1pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL2lzLW1hdGNoZXIuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9tYXRjaC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9jcmVhdGUtbWF0Y2hlci9tYXRjaGVyLXByb3RvdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2NyZWF0ZS1tYXRjaGVyL3R5cGUtbWFwLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvZGVlcC1lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2dldC1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lkZW50aWNhbC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLWFyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLWFycmF5LXR5cGUuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1kYXRlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL2lzLWl0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtbWFwLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtbmFuLmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3NhbXNhbS9saWIvaXMtbmVnLXplcm8uanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1zZXQuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pcy1zdWJzZXQuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9pdGVyYWJsZS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvc2Ftc2FtL2xpYi9tYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9zYW1zYW0vbGliL3NhbXNhbS5qcyIsIm5vZGVfbW9kdWxlcy9Ac2lub25qcy90ZXh0LWVuY29kaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL0BzaW5vbmpzL3RleHQtZW5jb2RpbmcvbGliL2VuY29kaW5nLWluZGV4ZXMuanMiLCJub2RlX21vZHVsZXMvQHNpbm9uanMvdGV4dC1lbmNvZGluZy9saWIvZW5jb2RpbmcuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmL2Rpc3QvZGlmZi5qcyIsIm5vZGVfbW9kdWxlcy9qdXN0LWV4dGVuZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2guZ2V0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2NvbmZpZ3VyZS1sb2dnZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbmlzZS9saWIvZXZlbnQvY3VzdG9tLWV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2V2ZW50L2V2ZW50LXRhcmdldC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9ldmVudC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9ldmVudC9wcm9ncmVzcy1ldmVudC5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXNlcnZlci9mYWtlLXNlcnZlci13aXRoLWNsb2NrLmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2Utc2VydmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2Utc2VydmVyL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9uaXNlL2xpYi9mYWtlLXhoci9ibG9iLmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2Zha2UteGhyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL25pc2UvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QvdHlwZS1kZXRlY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ROQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2x0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25YQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2h2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3g1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxYUE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGJlaGF2aW9yID0gcmVxdWlyZShcIi4vc2lub24vYmVoYXZpb3JcIik7XG52YXIgY3JlYXRlU2FuZGJveCA9IHJlcXVpcmUoXCIuL3Npbm9uL2NyZWF0ZS1zYW5kYm94XCIpO1xudmFyIGV4dGVuZCA9IHJlcXVpcmUoXCIuL3Npbm9uL3V0aWwvY29yZS9leHRlbmRcIik7XG52YXIgZmFrZVRpbWVycyA9IHJlcXVpcmUoXCIuL3Npbm9uL3V0aWwvZmFrZS10aW1lcnNcIik7XG52YXIgZm9ybWF0ID0gcmVxdWlyZShcIi4vc2lub24vdXRpbC9jb3JlL2Zvcm1hdFwiKTtcbnZhciBuaXNlID0gcmVxdWlyZShcIm5pc2VcIik7XG52YXIgU2FuZGJveCA9IHJlcXVpcmUoXCIuL3Npbm9uL3NhbmRib3hcIik7XG52YXIgc3R1YiA9IHJlcXVpcmUoXCIuL3Npbm9uL3N0dWJcIik7XG52YXIgcHJvbWlzZSA9IHJlcXVpcmUoXCIuL3Npbm9uL3Byb21pc2VcIik7XG5cbnZhciBhcGlNZXRob2RzID0ge1xuICAgIGNyZWF0ZVNhbmRib3g6IGNyZWF0ZVNhbmRib3gsXG4gICAgYXNzZXJ0OiByZXF1aXJlKFwiLi9zaW5vbi9hc3NlcnRcIiksXG4gICAgbWF0Y2g6IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcixcbiAgICByZXN0b3JlT2JqZWN0OiByZXF1aXJlKFwiLi9zaW5vbi9yZXN0b3JlLW9iamVjdFwiKSxcblxuICAgIGV4cGVjdGF0aW9uOiByZXF1aXJlKFwiLi9zaW5vbi9tb2NrLWV4cGVjdGF0aW9uXCIpLFxuICAgIGRlZmF1bHRDb25maWc6IHJlcXVpcmUoXCIuL3Npbm9uL3V0aWwvY29yZS9kZWZhdWx0LWNvbmZpZ1wiKSxcblxuICAgIHNldEZvcm1hdHRlcjogZm9ybWF0LnNldEZvcm1hdHRlcixcblxuICAgIC8vIGZha2UgdGltZXJzXG4gICAgdGltZXJzOiBmYWtlVGltZXJzLnRpbWVycyxcblxuICAgIC8vIGZha2UgWEhSXG4gICAgeGhyOiBuaXNlLmZha2VYaHIueGhyLFxuICAgIEZha2VYTUxIdHRwUmVxdWVzdDogbmlzZS5mYWtlWGhyLkZha2VYTUxIdHRwUmVxdWVzdCxcblxuICAgIC8vIGZha2Ugc2VydmVyXG4gICAgZmFrZVNlcnZlcjogbmlzZS5mYWtlU2VydmVyLFxuICAgIGZha2VTZXJ2ZXJXaXRoQ2xvY2s6IG5pc2UuZmFrZVNlcnZlcldpdGhDbG9jayxcbiAgICBjcmVhdGVGYWtlU2VydmVyOiBuaXNlLmZha2VTZXJ2ZXIuY3JlYXRlLmJpbmQobmlzZS5mYWtlU2VydmVyKSxcbiAgICBjcmVhdGVGYWtlU2VydmVyV2l0aENsb2NrOiBuaXNlLmZha2VTZXJ2ZXJXaXRoQ2xvY2suY3JlYXRlLmJpbmQoXG4gICAgICAgIG5pc2UuZmFrZVNlcnZlcldpdGhDbG9ja1xuICAgICksXG5cbiAgICBhZGRCZWhhdmlvcjogZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgICAgIGJlaGF2aW9yLmFkZEJlaGF2aW9yKHN0dWIsIG5hbWUsIGZuKTtcbiAgICB9LFxuXG4gICAgLy8gZmFrZSBwcm9taXNlXG4gICAgcHJvbWlzZTogcHJvbWlzZSxcbn07XG5cbnZhciBzYW5kYm94ID0gbmV3IFNhbmRib3goKTtcblxudmFyIGFwaSA9IGV4dGVuZChzYW5kYm94LCBhcGlNZXRob2RzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBhcGk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIGNhbGxlZEluT3JkZXIgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5jYWxsZWRJbk9yZGVyO1xudmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmNyZWF0ZU1hdGNoZXI7XG52YXIgb3JkZXJCeUZpcnN0Q2FsbCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLm9yZGVyQnlGaXJzdENhbGw7XG52YXIgdGltZXNJbldvcmRzID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3RpbWVzLWluLXdvcmRzXCIpO1xudmFyIGZvcm1hdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9mb3JtYXRcIik7XG52YXIgc3RyaW5nU2xpY2UgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLnN0cmluZy5zbGljZTtcbnZhciBnbG9iYWxPYmplY3QgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5nbG9iYWw7XG5cbnZhciBhcnJheVNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbnZhciBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbnZhciBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xudmFyIGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzc2VydE9iamVjdCgpIHtcbiAgICB2YXIgYXNzZXJ0O1xuXG4gICAgZnVuY3Rpb24gdmVyaWZ5SXNTdHViKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcblxuICAgICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LmZhaWwoXCJmYWtlIGlzIG5vdCBhIHNweVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1ldGhvZC5wcm94eSAmJiBtZXRob2QucHJveHkuaXNTaW5vblByb3h5KSB7XG4gICAgICAgICAgICAgICAgdmVyaWZ5SXNTdHViKG1ldGhvZC5wcm94eSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LmZhaWwoYCR7bWV0aG9kfSBpcyBub3QgYSBmdW5jdGlvbmApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmdldENhbGwgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZmFpbChgJHttZXRob2R9IGlzIG5vdCBzdHViYmVkYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlJc1ZhbGlkQXNzZXJ0aW9uKGFzc2VydGlvbk1ldGhvZCwgYXNzZXJ0aW9uQXJncykge1xuICAgICAgICBzd2l0Y2ggKGFzc2VydGlvbk1ldGhvZCkge1xuICAgICAgICAgICAgY2FzZSBcIm5vdENhbGxlZFwiOlxuICAgICAgICAgICAgY2FzZSBcImNhbGxlZFwiOlxuICAgICAgICAgICAgY2FzZSBcImNhbGxlZE9uY2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjYWxsZWRUd2ljZVwiOlxuICAgICAgICAgICAgY2FzZSBcImNhbGxlZFRocmljZVwiOlxuICAgICAgICAgICAgICAgIGlmIChhc3NlcnRpb25BcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZmFpbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2Fzc2VydGlvbk1ldGhvZH0gdGFrZXMgMSBhcmd1bWVudCBidXQgd2FzIGNhbGxlZCB3aXRoICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uQXJncy5sZW5ndGggKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFyZ3VtZW50c2BcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFpbEFzc2VydGlvbihvYmplY3QsIG1zZykge1xuICAgICAgICB2YXIgb2JqID0gb2JqZWN0IHx8IGdsb2JhbE9iamVjdDtcbiAgICAgICAgdmFyIGZhaWxNZXRob2QgPSBvYmouZmFpbCB8fCBhc3NlcnQuZmFpbDtcbiAgICAgICAgZmFpbE1ldGhvZC5jYWxsKG9iaiwgbXNnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtaXJyb3JQcm9wQXNBc3NlcnRpb24obmFtZSwgbWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciBtc2cgPSBtZXNzYWdlO1xuICAgICAgICB2YXIgbWV0aCA9IG1ldGhvZDtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIG1zZyA9IG1ldGhvZDtcbiAgICAgICAgICAgIG1ldGggPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0W25hbWVdID0gZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgICAgIHZlcmlmeUlzU3R1YihmYWtlKTtcblxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHZlcmlmeUlzVmFsaWRBc3NlcnRpb24obmFtZSwgYXJncyk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkID0gIW1ldGgoZmFrZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZCA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmYWtlW21ldGhdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gIWZha2VbbWV0aF0uYXBwbHkoZmFrZSwgYXJncylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogIWZha2VbbWV0aF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAoZmFrZS5wcmludGYgfHwgZmFrZS5wcm94eS5wcmludGYpLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdChbbXNnXSwgYXJncylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydC5wYXNzKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cG9zZWROYW1lKHByZWZpeCwgcHJvcCkge1xuICAgICAgICByZXR1cm4gIXByZWZpeCB8fCAvXmZhaWwvLnRlc3QocHJvcClcbiAgICAgICAgICAgID8gcHJvcFxuICAgICAgICAgICAgOiBwcmVmaXggK1xuICAgICAgICAgICAgICAgICAgc3RyaW5nU2xpY2UocHJvcCwgMCwgMSkudG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdTbGljZShwcm9wLCAxKTtcbiAgICB9XG5cbiAgICBhc3NlcnQgPSB7XG4gICAgICAgIGZhaWxFeGNlcHRpb246IFwiQXNzZXJ0RXJyb3JcIixcblxuICAgICAgICBmYWlsOiBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIGVycm9yLm5hbWUgPSB0aGlzLmZhaWxFeGNlcHRpb24gfHwgYXNzZXJ0LmZhaWxFeGNlcHRpb247XG5cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhc3M6IGZ1bmN0aW9uIHBhc3MoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbE9yZGVyOiBmdW5jdGlvbiBhc3NlcnRDYWxsT3JkZXIoKSB7XG4gICAgICAgICAgICB2ZXJpZnlJc1N0dWIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgYWN0dWFsID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKCFjYWxsZWRJbk9yZGVyKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGpvaW4oYXJndW1lbnRzLCBcIiwgXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbHMgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gY2FsbHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsc1stLWldLmNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZShjYWxscywgaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gam9pbihvcmRlckJ5Rmlyc3RDYWxsKGNhbGxzKSwgXCIsIFwiKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZmFpbHMsIHdlJ2xsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSBibGFuayBzdHJpbmdcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBgZXhwZWN0ZWQgJHtleHBlY3RlZH0gdG8gYmUgY2FsbGVkIGluIG9yZGVyIGJ1dCB3ZXJlIGNhbGxlZCBhcyAke2FjdHVhbH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnBhc3MoXCJjYWxsT3JkZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbENvdW50OiBmdW5jdGlvbiBhc3NlcnRDYWxsQ291bnQobWV0aG9kLCBjb3VudCkge1xuICAgICAgICAgICAgdmVyaWZ5SXNTdHViKG1ldGhvZCk7XG5cbiAgICAgICAgICAgIHZhciBtc2c7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvdW50ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbXNnID1cbiAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkICR7Zm9ybWF0KGNvdW50KX0gdG8gYmUgYSBudW1iZXIgYCArXG4gICAgICAgICAgICAgICAgICAgIGBidXQgd2FzIG9mIHR5cGUgJHt0eXBlb2YgY291bnR9YDtcbiAgICAgICAgICAgICAgICBmYWlsQXNzZXJ0aW9uKHRoaXMsIG1zZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZC5jYWxsQ291bnQgIT09IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgbXNnID1cbiAgICAgICAgICAgICAgICAgICAgYGV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCAke3RpbWVzSW5Xb3Jkcyhjb3VudCl9IGAgK1xuICAgICAgICAgICAgICAgICAgICBgYnV0IHdhcyBjYWxsZWQgJWMlQ2A7XG4gICAgICAgICAgICAgICAgZmFpbEFzc2VydGlvbih0aGlzLCBtZXRob2QucHJpbnRmKG1zZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhcImNhbGxDb3VudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBleHBvc2U6IGZ1bmN0aW9uIGV4cG9zZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBpcyBudWxsIG9yIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG8gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvLnByZWZpeCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBcImFzc2VydFwiKSB8fCBvLnByZWZpeDtcbiAgICAgICAgICAgIHZhciBpbmNsdWRlRmFpbCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIG8uaW5jbHVkZUZhaWwgPT09IFwidW5kZWZpbmVkXCIgfHwgQm9vbGVhbihvLmluY2x1ZGVGYWlsKTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG5cbiAgICAgICAgICAgIGZvckVhY2goT2JqZWN0LmtleXMoaW5zdGFuY2UpLCBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBtZXRob2QgIT09IFwiZXhwb3NlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgKGluY2x1ZGVGYWlsIHx8ICEvXihmYWlsKS8udGVzdChtZXRob2QpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbZXhwb3NlZE5hbWUocHJlZml4LCBtZXRob2QpXSA9IGluc3RhbmNlW21ldGhvZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWF0Y2g6IGZ1bmN0aW9uIG1hdGNoKGFjdHVhbCwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gY3JlYXRlTWF0Y2hlcihleHBlY3RhdGlvbik7XG4gICAgICAgICAgICBpZiAobWF0Y2hlci50ZXN0KGFjdHVhbCkpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQucGFzcyhcIm1hdGNoXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBcImV4cGVjdGVkIHZhbHVlIHRvIG1hdGNoXCIsXG4gICAgICAgICAgICAgICAgICAgIGAgICAgZXhwZWN0ZWQgPSAke2Zvcm1hdChleHBlY3RhdGlvbil9YCxcbiAgICAgICAgICAgICAgICAgICAgYCAgICBhY3R1YWwgPSAke2Zvcm1hdChhY3R1YWwpfWAsXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGZhaWxBc3NlcnRpb24odGhpcywgam9pbihmb3JtYXR0ZWQsIFwiXFxuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGhhdmUgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZSBidXQgd2FzIG5ldmVyIGNhbGxlZFwiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwibm90Q2FsbGVkXCIsXG4gICAgICAgIGZ1bmN0aW9uIChzcHkpIHtcbiAgICAgICAgICAgIHJldHVybiAhc3B5LmNhbGxlZDtcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBub3QgaGF2ZSBiZWVuIGNhbGxlZCBidXQgd2FzIGNhbGxlZCAlYyVDXCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPbmNlXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIG9uY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkVHdpY2VcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgdHdpY2UgYnV0IHdhcyBjYWxsZWQgJWMlQ1wiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkVGhyaWNlXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHRocmljZSBidXQgd2FzIGNhbGxlZCAlYyVDXCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRPblwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCB3aXRoICUxIGFzIHRoaXMgYnV0IHdhcyBjYWxsZWQgd2l0aCAldFwiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkT25cIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggJTEgYXMgdGhpcyBidXQgd2FzIGNhbGxlZCB3aXRoICV0XCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImNhbGxlZFdpdGhOZXdcIiwgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBuZXdcIik7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImFsd2F5c0NhbGxlZFdpdGhOZXdcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBhbHdheXMgYmUgY2FsbGVkIHdpdGggbmV3XCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRXaXRoXCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgJW4gdG8gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzICVEXCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJjYWxsZWRXaXRoTWF0Y2hcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlRFwiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiYWx3YXlzQ2FsbGVkV2l0aFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHMgJURcIlxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImFsd2F5c0NhbGxlZFdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBtYXRjaCAlRFwiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICAgICAgXCJleHBlY3RlZCAlbiB0byBiZSBjYWxsZWQgd2l0aCBleGFjdCBhcmd1bWVudHMgJURcIlxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcImNhbGxlZE9uY2VXaXRoRXhhY3RseVwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCBvbmNlIGFuZCB3aXRoIGV4YWN0IGFyZ3VtZW50cyAlRFwiXG4gICAgKTtcbiAgICBtaXJyb3JQcm9wQXNBc3NlcnRpb24oXG4gICAgICAgIFwiY2FsbGVkT25jZVdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGJlIGNhbGxlZCBvbmNlIGFuZCB3aXRoIG1hdGNoICVEXCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJhbHdheXNDYWxsZWRXaXRoRXhhY3RseVwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBleGFjdCBhcmd1bWVudHMgJURcIlxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFxuICAgICAgICBcIm5ldmVyQ2FsbGVkV2l0aFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyAlKiVDXCJcbiAgICApO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcbiAgICAgICAgXCJuZXZlckNhbGxlZFdpdGhNYXRjaFwiLFxuICAgICAgICBcImV4cGVjdGVkICVuIHRvIG5ldmVyIGJlIGNhbGxlZCB3aXRoIG1hdGNoICUqJUNcIlxuICAgICk7XG4gICAgbWlycm9yUHJvcEFzQXNzZXJ0aW9uKFwidGhyZXdcIiwgXCIlbiBkaWQgbm90IHRocm93IGV4Y2VwdGlvbiVDXCIpO1xuICAgIG1pcnJvclByb3BBc0Fzc2VydGlvbihcImFsd2F5c1RocmV3XCIsIFwiJW4gZGlkIG5vdCBhbHdheXMgdGhyb3cgZXhjZXB0aW9uJUNcIik7XG5cbiAgICByZXR1cm4gYXNzZXJ0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2VydE9iamVjdCgpO1xubW9kdWxlLmV4cG9ydHMuY3JlYXRlQXNzZXJ0T2JqZWN0ID0gY3JlYXRlQXNzZXJ0T2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbnZhciBuZXh0VGljayA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9uZXh0LXRpY2tcIik7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG52YXIgZXhwb3J0QXN5bmNCZWhhdmlvcnMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXhwb3J0LWFzeW5jLWJlaGF2aW9yc1wiKTtcblxudmFyIGNvbmNhdCA9IGFycmF5UHJvdG8uY29uY2F0O1xudmFyIGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG52YXIgcmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTtcbnZhciBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG5cbnZhciB1c2VMZWZ0TW9zdENhbGxiYWNrID0gLTE7XG52YXIgdXNlUmlnaHRNb3N0Q2FsbGJhY2sgPSAtMjtcblxuZnVuY3Rpb24gZ2V0Q2FsbGJhY2soYmVoYXZpb3IsIGFyZ3MpIHtcbiAgICB2YXIgY2FsbEFyZ0F0ID0gYmVoYXZpb3IuY2FsbEFyZ0F0O1xuXG4gICAgaWYgKGNhbGxBcmdBdCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2NhbGxBcmdBdF07XG4gICAgfVxuXG4gICAgdmFyIGFyZ3VtZW50TGlzdDtcblxuICAgIGlmIChjYWxsQXJnQXQgPT09IHVzZUxlZnRNb3N0Q2FsbGJhY2spIHtcbiAgICAgICAgYXJndW1lbnRMaXN0ID0gYXJncztcbiAgICB9XG5cbiAgICBpZiAoY2FsbEFyZ0F0ID09PSB1c2VSaWdodE1vc3RDYWxsYmFjaykge1xuICAgICAgICBhcmd1bWVudExpc3QgPSByZXZlcnNlKHNsaWNlKGFyZ3MpKTtcbiAgICB9XG5cbiAgICB2YXIgY2FsbEFyZ1Byb3AgPSBiZWhhdmlvci5jYWxsQXJnUHJvcDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRMaXN0Lmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAoIWNhbGxBcmdQcm9wICYmIHR5cGVvZiBhcmd1bWVudExpc3RbaV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50TGlzdFtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNhbGxBcmdQcm9wICYmXG4gICAgICAgICAgICBhcmd1bWVudExpc3RbaV0gJiZcbiAgICAgICAgICAgIHR5cGVvZiBhcmd1bWVudExpc3RbaV1bY2FsbEFyZ1Byb3BdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRMaXN0W2ldW2NhbGxBcmdQcm9wXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDYWxsYmFja0Vycm9yKGJlaGF2aW9yLCBmdW5jLCBhcmdzKSB7XG4gICAgaWYgKGJlaGF2aW9yLmNhbGxBcmdBdCA8IDApIHtcbiAgICAgICAgdmFyIG1zZztcblxuICAgICAgICBpZiAoYmVoYXZpb3IuY2FsbEFyZ1Byb3ApIHtcbiAgICAgICAgICAgIG1zZyA9IGAke2Z1bmN0aW9uTmFtZShcbiAgICAgICAgICAgICAgICBiZWhhdmlvci5zdHViXG4gICAgICAgICAgICApfSBleHBlY3RlZCB0byB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLmNhbGxBcmdQcm9wXG4gICAgICAgICAgICApfScsIGJ1dCBubyBvYmplY3Qgd2l0aCBzdWNoIGEgcHJvcGVydHkgd2FzIHBhc3NlZC5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbXNnID0gYCR7ZnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgICAgIGJlaGF2aW9yLnN0dWJcbiAgICAgICAgICAgICl9IGV4cGVjdGVkIHRvIHlpZWxkLCBidXQgbm8gY2FsbGJhY2sgd2FzIHBhc3NlZC5gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbXNnICs9IGAgUmVjZWl2ZWQgWyR7am9pbihhcmdzLCBcIiwgXCIpfV1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG5cbiAgICByZXR1cm4gYGFyZ3VtZW50IGF0IGluZGV4ICR7YmVoYXZpb3IuY2FsbEFyZ0F0fSBpcyBub3QgYSBmdW5jdGlvbjogJHtmdW5jfWA7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUFyZ3MobmFtZSwgYmVoYXZpb3IsIGFyZ3MpIHtcbiAgICAvLyBtYXAgZnVuY3Rpb24gbmFtZSB0byBpbnRlcm5hbCBwcm9wZXJ0eVxuICAgIC8vICAgY2FsbHNBcmcgPT4gY2FsbEFyZ0F0XG4gICAgdmFyIHByb3BlcnR5ID0gbmFtZS5yZXBsYWNlKC9zQXJnLywgXCJBcmdBdFwiKTtcbiAgICB2YXIgaW5kZXggPSBiZWhhdmlvcltwcm9wZXJ0eV07XG5cbiAgICBpZiAoaW5kZXggPj0gYXJncy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGAke25hbWV9IGZhaWxlZDogJHtpbmRleCArIDF9IGFyZ3VtZW50cyByZXF1aXJlZCBidXQgb25seSAke1xuICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoXG4gICAgICAgICAgICB9IHByZXNlbnRgXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soYmVoYXZpb3IsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGJlaGF2aW9yLmNhbGxBcmdBdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbnN1cmVBcmdzKFwiY2FsbHNBcmdcIiwgYmVoYXZpb3IsIGFyZ3MpO1xuICAgICAgICB2YXIgZnVuYyA9IGdldENhbGxiYWNrKGJlaGF2aW9yLCBhcmdzKTtcblxuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihnZXRDYWxsYmFja0Vycm9yKGJlaGF2aW9yLCBmdW5jLCBhcmdzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVoYXZpb3IuY2FsbGJhY2tBc3luYykge1xuICAgICAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yLmNhbGxiYWNrQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShcbiAgICAgICAgICAgICAgICBiZWhhdmlvci5jYWxsYmFja0NvbnRleHQsXG4gICAgICAgICAgICAgICAgYmVoYXZpb3IuY2FsbGJhY2tBcmd1bWVudHNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG52YXIgcHJvdG8gPSB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoc3R1Yikge1xuICAgICAgICB2YXIgYmVoYXZpb3IgPSBleHRlbmQoe30sIHByb3RvKTtcbiAgICAgICAgZGVsZXRlIGJlaGF2aW9yLmNyZWF0ZTtcbiAgICAgICAgZGVsZXRlIGJlaGF2aW9yLmFkZEJlaGF2aW9yO1xuICAgICAgICBkZWxldGUgYmVoYXZpb3IuY3JlYXRlQmVoYXZpb3I7XG4gICAgICAgIGJlaGF2aW9yLnN0dWIgPSBzdHViO1xuXG4gICAgICAgIGlmIChzdHViLmRlZmF1bHRCZWhhdmlvciAmJiBzdHViLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeSkge1xuICAgICAgICAgICAgYmVoYXZpb3IucHJvbWlzZUxpYnJhcnkgPSBzdHViLmRlZmF1bHRCZWhhdmlvci5wcm9taXNlTGlicmFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiZWhhdmlvcjtcbiAgICB9LFxuXG4gICAgaXNQcmVzZW50OiBmdW5jdGlvbiBpc1ByZXNlbnQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jYWxsQXJnQXQgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uIHx8XG4gICAgICAgICAgICB0aGlzLmV4Y2VwdGlvbkNyZWF0b3IgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJldHVybkFyZ0F0ID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICB0aGlzLnJldHVyblRoaXMgfHxcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnJlc29sdmVBcmdBdCA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlVGhpcyB8fFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMudGhyb3dBcmdBdCA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgdGhpcy5mYWtlRm4gfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVEZWZpbmVkXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qZXNsaW50IGNvbXBsZXhpdHk6IFtcImVycm9yXCIsIDIwXSovXG4gICAgaW52b2tlOiBmdW5jdGlvbiBpbnZva2UoY29udGV4dCwgYXJncykge1xuICAgICAgICAvKlxuICAgICAgICAgKiBjYWxsQ2FsbGJhY2sgKGNvbmRpdGlvbmFsbHkpIGNhbGxzIGVuc3VyZUFyZ3NcbiAgICAgICAgICpcbiAgICAgICAgICogTm90ZTogY2FsbENhbGxiYWNrIGludGVudGlvbmFsbHkgaGFwcGVucyBiZWZvcmVcbiAgICAgICAgICogZXZlcnl0aGluZyBlbHNlIGFuZCBjYW5ub3QgYmUgbW92ZWQgbG93ZXJcbiAgICAgICAgICovXG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGNhbGxDYWxsYmFjayh0aGlzLCBhcmdzKTtcblxuICAgICAgICBpZiAodGhpcy5leGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMuZXhjZXB0aW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhjZXB0aW9uQ3JlYXRvcikge1xuICAgICAgICAgICAgdGhpcy5leGNlcHRpb24gPSB0aGlzLmV4Y2VwdGlvbkNyZWF0b3IoKTtcbiAgICAgICAgICAgIHRoaXMuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRocm93IHRoaXMuZXhjZXB0aW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJldHVybkFyZ0F0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbnN1cmVBcmdzKFwicmV0dXJuc0FyZ1wiLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBhcmdzW3RoaXMucmV0dXJuQXJnQXRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmV0dXJuVGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMudGhyb3dBcmdBdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZW5zdXJlQXJncyhcInRocm93c0FyZ1wiLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHRocm93IGFyZ3NbdGhpcy50aHJvd0FyZ0F0XTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZha2VGbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFrZUZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJlc29sdmVBcmdBdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZW5zdXJlQXJncyhcInJlc29sdmVzQXJnXCIsIHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnByb21pc2VMaWJyYXJ5IHx8IFByb21pc2UpLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgYXJnc1t0aGlzLnJlc29sdmVBcmdBdF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlVGhpcykge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnByb21pc2VMaWJyYXJ5IHx8IFByb21pc2UpLnJlc29sdmUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMucHJvbWlzZUxpYnJhcnkgfHwgUHJvbWlzZSkucmVzb2x2ZSh0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnByb21pc2VMaWJyYXJ5IHx8IFByb21pc2UpLnJlamVjdCh0aGlzLnJldHVyblZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxzVGhyb3VnaCkge1xuICAgICAgICAgICAgdmFyIHdyYXBwZWRNZXRob2QgPSB0aGlzLmVmZmVjdGl2ZVdyYXBwZWRNZXRob2QoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRNZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsc1Rocm91Z2hXaXRoTmV3KSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIG9yaWdpbmFsIG1ldGhvZCAoYXNzdW1lZCB0byBiZSBhIGNvbnN0cnVjdG9yIGluIHRoaXMgY2FzZSlcbiAgICAgICAgICAgIHZhciBXcmFwcGVkQ2xhc3MgPSB0aGlzLmVmZmVjdGl2ZVdyYXBwZWRNZXRob2QoKTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGFyZ3VtZW50cyBvYmplY3QgaW50byBhIG5vcm1hbCBhcnJheVxuICAgICAgICAgICAgdmFyIGFyZ3NBcnJheSA9IHNsaWNlKGFyZ3MpO1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgICAgIHZhciBGID0gV3JhcHBlZENsYXNzLmJpbmQuYXBwbHkoXG4gICAgICAgICAgICAgICAgV3JhcHBlZENsYXNzLFxuICAgICAgICAgICAgICAgIGNvbmNhdChbbnVsbF0sIGFyZ3NBcnJheSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5WYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2FsbEFyZ0F0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5WYWx1ZTtcbiAgICB9LFxuXG4gICAgZWZmZWN0aXZlV3JhcHBlZE1ldGhvZDogZnVuY3Rpb24gZWZmZWN0aXZlV3JhcHBlZE1ldGhvZCgpIHtcbiAgICAgICAgZm9yICh2YXIgc3R1YmIgPSB0aGlzLnN0dWI7IHN0dWJiOyBzdHViYiA9IHN0dWJiLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHN0dWJiLndyYXBwZWRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R1YmIud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB3cmFwcGVkIG1ldGhvZFwiKTtcbiAgICB9LFxuXG4gICAgb25DYWxsOiBmdW5jdGlvbiBvbkNhbGwoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vbkNhbGwoaW5kZXgpO1xuICAgIH0sXG5cbiAgICBvbkZpcnN0Q2FsbDogZnVuY3Rpb24gb25GaXJzdENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0dWIub25GaXJzdENhbGwoKTtcbiAgICB9LFxuXG4gICAgb25TZWNvbmRDYWxsOiBmdW5jdGlvbiBvblNlY29uZENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0dWIub25TZWNvbmRDYWxsKCk7XG4gICAgfSxcblxuICAgIG9uVGhpcmRDYWxsOiBmdW5jdGlvbiBvblRoaXJkQ2FsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R1Yi5vblRoaXJkQ2FsbCgpO1xuICAgIH0sXG5cbiAgICB3aXRoQXJnczogZnVuY3Rpb24gd2l0aEFyZ3MoLyogYXJndW1lbnRzICovKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdEZWZpbmluZyBhIHN0dWIgYnkgaW52b2tpbmcgXCJzdHViLm9uQ2FsbCguLi4pLndpdGhBcmdzKC4uLilcIiAnICtcbiAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZC4gVXNlIFwic3R1Yi53aXRoQXJncyguLi4pLm9uQ2FsbCguLi4pXCIgJyArXG4gICAgICAgICAgICAgICAgXCJ0byBkZWZpbmUgc2VxdWVudGlhbCBiZWhhdmlvciBmb3IgY2FsbHMgd2l0aCBjZXJ0YWluIGFyZ3VtZW50cy5cIlxuICAgICAgICApO1xuICAgIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCZWhhdmlvcihiZWhhdmlvck1ldGhvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yID0gdGhpcy5kZWZhdWx0QmVoYXZpb3IgfHwgcHJvdG8uY3JlYXRlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvcltiZWhhdmlvck1ldGhvZF0uYXBwbHkoXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgICAgIGFyZ3VtZW50c1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhZGRCZWhhdmlvcihzdHViLCBuYW1lLCBmbikge1xuICAgIHByb3RvW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmbi5hcHBseSh0aGlzLCBjb25jYXQoW3RoaXNdLCBzbGljZShhcmd1bWVudHMpKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0dWIgfHwgdGhpcztcbiAgICB9O1xuXG4gICAgc3R1YltuYW1lXSA9IGNyZWF0ZUJlaGF2aW9yKG5hbWUpO1xufVxuXG5wcm90by5hZGRCZWhhdmlvciA9IGFkZEJlaGF2aW9yO1xucHJvdG8uY3JlYXRlQmVoYXZpb3IgPSBjcmVhdGVCZWhhdmlvcjtcblxudmFyIGFzeW5jQmVoYXZpb3JzID0gZXhwb3J0QXN5bmNCZWhhdmlvcnMocHJvdG8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZC5ub25FbnVtKHt9LCBwcm90bywgYXN5bmNCZWhhdmlvcnMpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB3YWxrID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dhbGtcIik7XG52YXIgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xudmFyIGhhc093blByb3BlcnR5ID1cbiAgICByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwdXNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5wdXNoO1xuXG5mdW5jdGlvbiBjb2xsZWN0TWV0aG9kKG1ldGhvZHMsIG9iamVjdCwgcHJvcCwgcHJvcE93bmVyKSB7XG4gICAgaWYgKFxuICAgICAgICB0eXBlb2YgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHByb3BPd25lciwgcHJvcCkudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3ApXG4gICAgKSB7XG4gICAgICAgIHB1c2gobWV0aG9kcywgb2JqZWN0W3Byb3BdKTtcbiAgICB9XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG93biBtZXRob2RzIG9uIHRoZSBwYXNzZWQgb2JqZWN0XG5mdW5jdGlvbiBjb2xsZWN0T3duTWV0aG9kcyhvYmplY3QpIHtcbiAgICB2YXIgbWV0aG9kcyA9IFtdO1xuXG4gICAgd2FsayhvYmplY3QsIGNvbGxlY3RNZXRob2QuYmluZChudWxsLCBtZXRob2RzLCBvYmplY3QpKTtcblxuICAgIHJldHVybiBtZXRob2RzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3RPd25NZXRob2RzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZShcInN1cHBvcnRzLWNvbG9yXCIpO1xuXG5mdW5jdGlvbiBjb2xvcml6ZShzdHIsIGNvbG9yKSB7XG4gICAgaWYgKHN1cHBvcnRzQ29sb3Iuc3Rkb3V0ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHJldHVybiBgXFx4MWJbJHtjb2xvcn1tJHtzdHJ9XFx4MWJbMG1gO1xufVxuXG5leHBvcnRzLnJlZCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gY29sb3JpemUoc3RyLCAzMSk7XG59O1xuXG5leHBvcnRzLmdyZWVuID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBjb2xvcml6ZShzdHIsIDMyKTtcbn07XG5cbmV4cG9ydHMuY3lhbiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gY29sb3JpemUoc3RyLCA5Nik7XG59O1xuXG5leHBvcnRzLndoaXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBjb2xvcml6ZShzdHIsIDM5KTtcbn07XG5cbmV4cG9ydHMuYm9sZCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gY29sb3JpemUoc3RyLCAxKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIFNhbmRib3ggPSByZXF1aXJlKFwiLi9zYW5kYm94XCIpO1xuXG52YXIgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbnZhciBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xuXG5mdW5jdGlvbiBwcmVwYXJlU2FuZGJveEZyb21Db25maWcoY29uZmlnKSB7XG4gICAgdmFyIHNhbmRib3ggPSBuZXcgU2FuZGJveCgpO1xuXG4gICAgaWYgKGNvbmZpZy51c2VGYWtlU2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnVzZUZha2VTZXJ2ZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHNhbmRib3guc2VydmVyUHJvdG90eXBlID0gY29uZmlnLnVzZUZha2VTZXJ2ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBzYW5kYm94LnVzZUZha2VTZXJ2ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnVzZUZha2VUaW1lcnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudXNlRmFrZVRpbWVycyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgc2FuZGJveC51c2VGYWtlVGltZXJzKGNvbmZpZy51c2VGYWtlVGltZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNhbmRib3gudXNlRmFrZVRpbWVycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhbmRib3g7XG59XG5cbmZ1bmN0aW9uIGV4cG9zZVZhbHVlKHNhbmRib3gsIGNvbmZpZywga2V5LCB2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaW5qZWN0SW50byAmJiAhKGtleSBpbiBjb25maWcuaW5qZWN0SW50bykpIHtcbiAgICAgICAgY29uZmlnLmluamVjdEludG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICBwdXNoKHNhbmRib3guaW5qZWN0ZWRLZXlzLCBrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHB1c2goc2FuZGJveC5hcmdzLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTYW5kYm94KGNvbmZpZykge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FuZGJveCgpO1xuICAgIH1cblxuICAgIHZhciBjb25maWd1cmVkU2FuZGJveCA9IHByZXBhcmVTYW5kYm94RnJvbUNvbmZpZyhjb25maWcpO1xuICAgIGNvbmZpZ3VyZWRTYW5kYm94LmFyZ3MgPSBjb25maWd1cmVkU2FuZGJveC5hcmdzIHx8IFtdO1xuICAgIGNvbmZpZ3VyZWRTYW5kYm94LmluamVjdGVkS2V5cyA9IFtdO1xuICAgIGNvbmZpZ3VyZWRTYW5kYm94LmluamVjdEludG8gPSBjb25maWcuaW5qZWN0SW50bztcbiAgICB2YXIgZXhwb3NlZCA9IGNvbmZpZ3VyZWRTYW5kYm94LmluamVjdCh7fSk7XG5cbiAgICBpZiAoY29uZmlnLnByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yRWFjaChjb25maWcucHJvcGVydGllcywgZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgZXhwb3NlZFtwcm9wXSB8fCAocHJvcCA9PT0gXCJzYW5kYm94XCIgJiYgY29uZmlndXJlZFNhbmRib3gpO1xuICAgICAgICAgICAgZXhwb3NlVmFsdWUoY29uZmlndXJlZFNhbmRib3gsIGNvbmZpZywgcHJvcCwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHBvc2VWYWx1ZShjb25maWd1cmVkU2FuZGJveCwgY29uZmlnLCBcInNhbmRib3hcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRTYW5kYm94O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVNhbmRib3g7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIGlzUHJvcGVydHlDb25maWd1cmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcHJvcGVydHktY29uZmlndXJhYmxlXCIpO1xudmFyIGV4cG9ydEFzeW5jQmVoYXZpb3JzID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4cG9ydC1hc3luYy1iZWhhdmlvcnNcIik7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcblxudmFyIHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxudmFyIHVzZUxlZnRNb3N0Q2FsbGJhY2sgPSAtMTtcbnZhciB1c2VSaWdodE1vc3RDYWxsYmFjayA9IC0yO1xuXG5mdW5jdGlvbiB0aHJvd3NFeGNlcHRpb24oZmFrZSwgZXJyb3IsIG1lc3NhZ2UpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZXJyb3I7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlIHx8IFwiXCIpO1xuICAgICAgICAgICAgbmV3RXhjZXB0aW9uLm5hbWUgPSBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybiBuZXdFeGNlcHRpb247XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgZmFrZS5leGNlcHRpb25DcmVhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkVycm9yXCIpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gZXJyb3I7XG4gICAgfVxufVxuXG52YXIgZGVmYXVsdEJlaGF2aW9ycyA9IHtcbiAgICBjYWxsc0Zha2U6IGZ1bmN0aW9uIGNhbGxzRmFrZShmYWtlLCBmbikge1xuICAgICAgICBmYWtlLmZha2VGbiA9IGZuO1xuICAgIH0sXG5cbiAgICBjYWxsc0FyZzogZnVuY3Rpb24gY2FsbHNBcmcoZmFrZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IGluZGV4O1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gW107XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FsbHNBcmdPbjogZnVuY3Rpb24gY2FsbHNBcmdPbihmYWtlLCBpbmRleCwgY29udGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gaW5kZXg7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBbXTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgY2FsbHNBcmdXaXRoOiBmdW5jdGlvbiBjYWxsc0FyZ1dpdGgoZmFrZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IGluZGV4IGlzIG5vdCBudW1iZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IGluZGV4O1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzLCAyKTtcbiAgICAgICAgZmFrZS5jYWxsYmFja0NvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBjYWxsc0FyZ09uV2l0aDogZnVuY3Rpb24gY2FsbHNBcmdXaXRoKGZha2UsIGluZGV4LCBjb250ZXh0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSBpbmRleDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMyk7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgfSxcblxuICAgIHVzaW5nUHJvbWlzZTogZnVuY3Rpb24gdXNpbmdQcm9taXNlKGZha2UsIHByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgIGZha2UucHJvbWlzZUxpYnJhcnkgPSBwcm9taXNlTGlicmFyeTtcbiAgICB9LFxuXG4gICAgeWllbGRzOiBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IHVzZUxlZnRNb3N0Q2FsbGJhY2s7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDEpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsQXJnUHJvcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB5aWVsZHNSaWdodDogZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgZmFrZS5jYWxsQXJnQXQgPSB1c2VSaWdodE1vc3RDYWxsYmFjaztcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHlpZWxkc09uOiBmdW5jdGlvbiAoZmFrZSwgY29udGV4dCkge1xuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IHVzZUxlZnRNb3N0Q2FsbGJhY2s7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDIpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBc3luYyA9IGZhbHNlO1xuICAgICAgICBmYWtlLmZha2VGbiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgeWllbGRzVG86IGZ1bmN0aW9uIChmYWtlLCBwcm9wKSB7XG4gICAgICAgIGZha2UuY2FsbEFyZ0F0ID0gdXNlTGVmdE1vc3RDYWxsYmFjaztcbiAgICAgICAgZmFrZS5jYWxsYmFja0FyZ3VtZW50cyA9IHNsaWNlKGFyZ3VtZW50cywgMik7XG4gICAgICAgIGZha2UuY2FsbGJhY2tDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmNhbGxBcmdQcm9wID0gcHJvcDtcbiAgICAgICAgZmFrZS5jYWxsYmFja0FzeW5jID0gZmFsc2U7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB5aWVsZHNUb09uOiBmdW5jdGlvbiAoZmFrZSwgcHJvcCwgY29udGV4dCkge1xuICAgICAgICBmYWtlLmNhbGxBcmdBdCA9IHVzZUxlZnRNb3N0Q2FsbGJhY2s7XG4gICAgICAgIGZha2UuY2FsbGJhY2tBcmd1bWVudHMgPSBzbGljZShhcmd1bWVudHMsIDMpO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGZha2UuY2FsbEFyZ1Byb3AgPSBwcm9wO1xuICAgICAgICBmYWtlLmNhbGxiYWNrQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHRocm93czogdGhyb3dzRXhjZXB0aW9uLFxuICAgIHRocm93c0V4Y2VwdGlvbjogdGhyb3dzRXhjZXB0aW9uLFxuXG4gICAgcmV0dXJuczogZnVuY3Rpb24gcmV0dXJucyhmYWtlLCB2YWx1ZSkge1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlID0gdmFsdWU7XG4gICAgICAgIGZha2UucmVzb2x2ZSA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlamVjdCA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICByZXR1cm5zQXJnOiBmdW5jdGlvbiByZXR1cm5zQXJnKGZha2UsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBpbmRleCBpcyBub3QgbnVtYmVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFrZS5yZXR1cm5BcmdBdCA9IGluZGV4O1xuICAgIH0sXG5cbiAgICB0aHJvd3NBcmc6IGZ1bmN0aW9uIHRocm93c0FyZyhmYWtlLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZha2UudGhyb3dBcmdBdCA9IGluZGV4O1xuICAgIH0sXG5cbiAgICByZXR1cm5zVGhpczogZnVuY3Rpb24gcmV0dXJuc1RoaXMoZmFrZSkge1xuICAgICAgICBmYWtlLnJldHVyblRoaXMgPSB0cnVlO1xuICAgIH0sXG5cbiAgICByZXNvbHZlczogZnVuY3Rpb24gcmVzb2x2ZXMoZmFrZSwgdmFsdWUpIHtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBmYWtlLnJlc29sdmUgPSB0cnVlO1xuICAgICAgICBmYWtlLnJlc29sdmVUaGlzID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIHJlc29sdmVzQXJnOiBmdW5jdGlvbiByZXNvbHZlc0FyZyhmYWtlLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgaW5kZXggaXMgbm90IG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBmYWtlLnJlc29sdmVBcmdBdCA9IGluZGV4O1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLnJlc29sdmUgPSB0cnVlO1xuICAgICAgICBmYWtlLnJlc29sdmVUaGlzID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWVEZWZpbmVkID0gZmFsc2U7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICByZWplY3RzOiBmdW5jdGlvbiByZWplY3RzKGZha2UsIGVycm9yLCBtZXNzYWdlKSB7XG4gICAgICAgIHZhciByZWFzb247XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihtZXNzYWdlIHx8IFwiXCIpO1xuICAgICAgICAgICAgcmVhc29uLm5hbWUgPSBlcnJvcjtcbiAgICAgICAgfSBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihcIkVycm9yXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVhc29uID0gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZSA9IHJlYXNvbjtcbiAgICAgICAgZmFrZS5yZXNvbHZlID0gZmFsc2U7XG4gICAgICAgIGZha2UucmVzb2x2ZVRoaXMgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZWplY3QgPSB0cnVlO1xuICAgICAgICBmYWtlLnJldHVyblZhbHVlRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICBmYWtlLmV4Y2VwdGlvbkNyZWF0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZmFrZUZuID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG5cbiAgICByZXNvbHZlc1RoaXM6IGZ1bmN0aW9uIHJlc29sdmVzVGhpcyhmYWtlKSB7XG4gICAgICAgIGZha2UucmV0dXJuVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UucmVzb2x2ZSA9IGZhbHNlO1xuICAgICAgICBmYWtlLnJlc29sdmVUaGlzID0gdHJ1ZTtcbiAgICAgICAgZmFrZS5yZWplY3QgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5yZXR1cm5WYWx1ZURlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgZmFrZS5leGNlcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGZha2UuZXhjZXB0aW9uQ3JlYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgZmFrZS5mYWtlRm4gPSB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGNhbGxUaHJvdWdoOiBmdW5jdGlvbiBjYWxsVGhyb3VnaChmYWtlKSB7XG4gICAgICAgIGZha2UuY2FsbHNUaHJvdWdoID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2FsbFRocm91Z2hXaXRoTmV3OiBmdW5jdGlvbiBjYWxsVGhyb3VnaFdpdGhOZXcoZmFrZSkge1xuICAgICAgICBmYWtlLmNhbGxzVGhyb3VnaFdpdGhOZXcgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChmYWtlLCBnZXR0ZXJGdW5jdGlvbikge1xuICAgICAgICB2YXIgcm9vdFN0dWIgPSBmYWtlLnN0dWIgfHwgZmFrZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocm9vdFN0dWIucm9vdE9iaiwgcm9vdFN0dWIucHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGdldDogZ2V0dGVyRnVuY3Rpb24sXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGlzUHJvcGVydHlDb25maWd1cmFibGUoXG4gICAgICAgICAgICAgICAgcm9vdFN0dWIucm9vdE9iaixcbiAgICAgICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24gc2V0KGZha2UsIHNldHRlckZ1bmN0aW9uKSB7XG4gICAgICAgIHZhciByb290U3R1YiA9IGZha2Uuc3R1YiB8fCBmYWtlO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHJvb3RTdHViLnJvb3RPYmosXG4gICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhY2Nlc3Nvci1wYWlyc1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNldDogc2V0dGVyRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBpc1Byb3BlcnR5Q29uZmlndXJhYmxlKFxuICAgICAgICAgICAgICAgICAgICByb290U3R1Yi5yb290T2JqLFxuICAgICAgICAgICAgICAgICAgICByb290U3R1Yi5wcm9wTmFtZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZha2U7XG4gICAgfSxcblxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShmYWtlLCBuZXdWYWwpIHtcbiAgICAgICAgdmFyIHJvb3RTdHViID0gZmFrZS5zdHViIHx8IGZha2U7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3RTdHViLnJvb3RPYmosIHJvb3RTdHViLnByb3BOYW1lLCB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTpcbiAgICAgICAgICAgICAgICByb290U3R1Yi5zaGFkb3dzUHJvcE9uUHJvdG90eXBlIHx8XG4gICAgICAgICAgICAgICAgaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShyb290U3R1Yi5yb290T2JqLCByb290U3R1Yi5wcm9wTmFtZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG59O1xuXG52YXIgYXN5bmNCZWhhdmlvcnMgPSBleHBvcnRBc3luY0JlaGF2aW9ycyhkZWZhdWx0QmVoYXZpb3JzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHRlbmQoe30sIGRlZmF1bHRCZWhhdmlvcnMsIGFzeW5jQmVoYXZpb3JzKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgY3JlYXRlUHJveHkgPSByZXF1aXJlKFwiLi9wcm94eVwiKTtcbnZhciBuZXh0VGljayA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9uZXh0LXRpY2tcIik7XG5cbnZhciBzbGljZSA9IGFycmF5UHJvdG8uc2xpY2U7XG52YXIgcHJvbWlzZUxpYiA9IFByb21pc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFrZTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYGZha2VgIHRoYXQgcmVjb3JkcyBhbGwgY2FsbHMsIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy5cbiAqXG4gKiBXaGVuIGFuIGBmYCBhcmd1bWVudCBpcyBzdXBwbGllZCwgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGNyZWF0ZSBhbiBlbXB0eSBmYWtlXG4gKiB2YXIgZjEgPSBzaW5vbi5mYWtlKCk7XG4gKlxuICogZjEoKTtcbiAqXG4gKiBmMS5jYWxsZWRPbmNlKClcbiAqIC8vIHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcpIHtcbiAqICAgY29uc29sZS5sb2coYEhlbGxvICR7Z3JlZXRpbmd9YCk7XG4gKiB9XG4gKlxuICogLy8gY3JlYXRlIGEgZmFrZSB3aXRoIGltcGxlbWVudGF0aW9uXG4gKiB2YXIgZjIgPSBzaW5vbi5mYWtlKGdyZWV0KTtcbiAqXG4gKiAvLyBIZWxsbyB3b3JsZFxuICogZjIoXCJ3b3JsZFwiKTtcbiAqXG4gKiBmMi5jYWxsZWRXaXRoKFwid29ybGRcIik7XG4gKiAvLyB0cnVlXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnx1bmRlZmluZWR9IGZcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqIEBuYW1lc3BhY2VcbiAqL1xuZnVuY3Rpb24gZmFrZShmKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGYgYXJndW1lbnQgdG8gYmUgYSBGdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBmYWtlYCB0aGF0IHJldHVybnMgdGhlIHByb3ZpZGVkIGB2YWx1ZWAsIGFzIHdlbGwgYXMgcmVjb3JkaW5nIGFsbFxuICogY2FsbHMsIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGYxID0gc2lub24uZmFrZS5yZXR1cm5zKDQyKTtcbiAqXG4gKiBmMSgpO1xuICogLy8gNDJcbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnJldHVybnMgPSBmdW5jdGlvbiByZXR1cm5zKHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGZha2VgIHRoYXQgdGhyb3dzIGFuIEVycm9yLlxuICogSWYgdGhlIGB2YWx1ZWAgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSBFcnJvciBpbiBpdHMgcHJvdG90eXBlIGNoYWluLCBpdCB3aWxsXG4gKiBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBlcnJvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGYxID0gc2lub24uZmFrZS50aHJvd3MoXCJoZWxsb1wiKTtcbiAqXG4gKiBmMSgpO1xuICogLy8gVW5jYXVnaHQgRXJyb3I6IGhlbGxvXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmMiA9IHNpbm9uLmZha2UudGhyb3dzKG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50XCIpKTtcbiAqXG4gKiBmMigpO1xuICogLy8gVW5jYXVnaHQgVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50XG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEBwYXJhbSB7KnxFcnJvcn0gdmFsdWVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS50aHJvd3MgPSBmdW5jdGlvbiB0aHJvd3ModmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHRocm93IGdldEVycm9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgZmFrZWAgdGhhdCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBwYXNzZWQgYHZhbHVlYFxuICogYXJndW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBmMSA9IHNpbm9uLmZha2UucmVzb2x2ZXMoXCJhcHBsZSBwaWVcIik7XG4gKlxuICogYXdhaXQgZjEoKTtcbiAqIC8vIFwiYXBwbGUgcGllXCJcbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnJlc29sdmVzID0gZnVuY3Rpb24gcmVzb2x2ZXModmFsdWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlTGliLnJlc29sdmUodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBmYWtlYCB0aGF0IHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB0byB0aGUgcGFzc2VkIGB2YWx1ZWBcbiAqIGFyZ3VtZW50LiBXaGVuIGB2YWx1ZWAgZG9lcyBub3QgaGF2ZSBFcnJvciBpbiBpdHMgcHJvdG90eXBlIGNoYWluLCBpdCB3aWxsIGJlXG4gKiB3cmFwcGVkIGluIGFuIEVycm9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgZjEgPSBzaW5vbi5mYWtlLnJlamVjdHMoXCI6KFwiKTtcbiAqXG4gKiB0cnkge1xuICogICBhd2FpdCBmdCgpO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc29sZS5sb2coZXJyb3IpO1xuICogICAvLyBcIjooXCJcbiAqIH1cbiAqXG4gKiBAbWVtYmVyb2YgZmFrZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mYWtlLnJlamVjdHMgPSBmdW5jdGlvbiByZWplY3RzKHZhbHVlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZUxpYi5yZWplY3QoZ2V0RXJyb3IodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcEZ1bmMoZik7XG59O1xuXG4vKipcbiAqIENhdXNlcyBgZmFrZWAgdG8gdXNlIGEgY3VzdG9tIFByb21pc2UgaW1wbGVtZW50YXRpb24sIGluc3RlYWQgb2YgdGhlIG5hdGl2ZVxuICogUHJvbWlzZSBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7XG4gKiBzaW5vbi5mYWtlLnVzaW5nUHJvbWlzZShibHVlYmlyZCk7XG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEBwYXJhbSB7Kn0gcHJvbWlzZUxpYnJhcnlcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS51c2luZ1Byb21pc2UgPSBmdW5jdGlvbiB1c2luZ1Byb21pc2UocHJvbWlzZUxpYnJhcnkpIHtcbiAgICBwcm9taXNlTGliID0gcHJvbWlzZUxpYnJhcnk7XG4gICAgcmV0dXJuIGZha2U7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBgZmFrZWAgdGhhdCBjYWxscyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZGVmaW5lZCBhcmd1bWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICogICBjb25zb2xlLmxvZyhhcmd1bWVudHMuam9pbihcIipcIikpO1xuICogfVxuICpcbiAqIGNvbnN0IGYxID0gc2lub24uZmFrZS55aWVsZHMoXCJhcHBsZVwiLCBcInBpZVwiKTtcbiAqXG4gKiBmMShjYWxsYmFjayk7XG4gKiAvLyBcImFwcGxlKnBpZVwiXG4gKlxuICogQG1lbWJlcm9mIGZha2VcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZmFrZS55aWVsZHMgPSBmdW5jdGlvbiB5aWVsZHMoKSB7XG4gICAgdmFyIHZhbHVlcyA9IHNsaWNlKGFyZ3VtZW50cyk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGxhc3QgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBGdW5jKGYpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgYGZha2VgIHRoYXQgY2FsbHMgdGhlIGNhbGxiYWNrICoqYXN5bmNocm9ub3VzbHkqKiB3aXRoIHRoZVxuICogZGVmaW5lZCBhcmd1bWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICogICBjb25zb2xlLmxvZyhhcmd1bWVudHMuam9pbihcIipcIikpO1xuICogfVxuICpcbiAqIGNvbnN0IGYxID0gc2lub24uZmFrZS55aWVsZHMoXCJhcHBsZVwiLCBcInBpZVwiKTtcbiAqXG4gKiBmMShjYWxsYmFjayk7XG4gKlxuICogc2V0VGltZW91dCgoKSA9PiB7XG4gKiAgIC8vIFwiYXBwbGUqcGllXCJcbiAqIH0pO1xuICpcbiAqIEBtZW1iZXJvZiBmYWtlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZha2UueWllbGRzQXN5bmMgPSBmdW5jdGlvbiB5aWVsZHNBc3luYygpIHtcbiAgICB2YXIgdmFsdWVzID0gc2xpY2UoYXJndW1lbnRzKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZnVuY3Rpb24gZigpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgbGFzdCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwRnVuYyhmKTtcbn07XG5cbnZhciB1dWlkID0gMDtcbi8qKlxuICogQ3JlYXRlcyBhIHByb3h5IChzaW5vbiBjb25jZXB0KSBmcm9tIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHdyYXBGdW5jKGYpIHtcbiAgICB2YXIgcHJveHk7XG4gICAgdmFyIGZha2VJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGZpcnN0QXJnLCBsYXN0QXJnO1xuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmlyc3RBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICBsYXN0QXJnID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjYWxsYmFjayA9XG4gICAgICAgICAgICBsYXN0QXJnICYmIHR5cGVvZiBsYXN0QXJnID09PSBcImZ1bmN0aW9uXCIgPyBsYXN0QXJnIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHByb3h5LmZpcnN0QXJnID0gZmlyc3RBcmc7XG4gICAgICAgIHByb3h5Lmxhc3RBcmcgPSBsYXN0QXJnO1xuICAgICAgICBwcm94eS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICAgIHJldHVybiBmICYmIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHByb3h5ID0gY3JlYXRlUHJveHkoZmFrZUluc3RhbmNlLCBmIHx8IGZha2VJbnN0YW5jZSk7XG5cbiAgICBwcm94eS5kaXNwbGF5TmFtZSA9IFwiZmFrZVwiO1xuICAgIHByb3h5LmlkID0gYGZha2UjJHt1dWlkKyt9YDtcblxuICAgIHJldHVybiBwcm94eTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIEVycm9yIGluc3RhbmNlIGZyb20gdGhlIHBhc3NlZCB2YWx1ZSwgaWYgdGhlIHZhbHVlIGlzIG5vdFxuICogYWxyZWFkeSBhbiBFcnJvciBpbnN0YW5jZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7Kn0gdmFsdWUgW2Rlc2NyaXB0aW9uXVxuICogQHJldHVybnMge0Vycm9yfSAgICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEVycm9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB2YWx1ZSA6IG5ldyBFcnJvcih2YWx1ZSk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIHByb3h5SW52b2tlID0gcmVxdWlyZShcIi4vcHJveHktaW52b2tlXCIpO1xudmFyIHByb3h5Q2FsbFRvU3RyaW5nID0gcmVxdWlyZShcIi4vcHJveHktY2FsbFwiKS50b1N0cmluZztcbnZhciB0aW1lc0luV29yZHMgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvdGltZXMtaW4td29yZHNcIik7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbnZhciBtYXRjaCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuY3JlYXRlTWF0Y2hlcjtcbnZhciBzdHViID0gcmVxdWlyZShcIi4vc3R1YlwiKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiLi9hc3NlcnRcIik7XG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5kZWVwRXF1YWw7XG52YXIgZm9ybWF0ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2Zvcm1hdFwiKTtcbnZhciB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcblxudmFyIGV2ZXJ5ID0gYXJyYXlQcm90by5ldmVyeTtcbnZhciBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG52YXIgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuXG5mdW5jdGlvbiBjYWxsQ291bnRJbldvcmRzKGNhbGxDb3VudCkge1xuICAgIGlmIChjYWxsQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwibmV2ZXIgY2FsbGVkXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBjYWxsZWQgJHt0aW1lc0luV29yZHMoY2FsbENvdW50KX1gO1xufVxuXG5mdW5jdGlvbiBleHBlY3RlZENhbGxDb3VudEluV29yZHMoZXhwZWN0YXRpb24pIHtcbiAgICB2YXIgbWluID0gZXhwZWN0YXRpb24ubWluQ2FsbHM7XG4gICAgdmFyIG1heCA9IGV4cGVjdGF0aW9uLm1heENhbGxzO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB2YXIgc3RyID0gdGltZXNJbldvcmRzKG1pbik7XG5cbiAgICAgICAgaWYgKG1pbiAhPT0gbWF4KSB7XG4gICAgICAgICAgICBzdHIgPSBgYXQgbGVhc3QgJHtzdHJ9IGFuZCBhdCBtb3N0ICR7dGltZXNJbldvcmRzKG1heCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGBhdCBsZWFzdCAke3RpbWVzSW5Xb3JkcyhtaW4pfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBhdCBtb3N0ICR7dGltZXNJbldvcmRzKG1heCl9YDtcbn1cblxuZnVuY3Rpb24gcmVjZWl2ZWRNaW5DYWxscyhleHBlY3RhdGlvbikge1xuICAgIHZhciBoYXNNaW5MaW1pdCA9IHR5cGVvZiBleHBlY3RhdGlvbi5taW5DYWxscyA9PT0gXCJudW1iZXJcIjtcbiAgICByZXR1cm4gIWhhc01pbkxpbWl0IHx8IGV4cGVjdGF0aW9uLmNhbGxDb3VudCA+PSBleHBlY3RhdGlvbi5taW5DYWxscztcbn1cblxuZnVuY3Rpb24gcmVjZWl2ZWRNYXhDYWxscyhleHBlY3RhdGlvbikge1xuICAgIGlmICh0eXBlb2YgZXhwZWN0YXRpb24ubWF4Q2FsbHMgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBleHBlY3RhdGlvbi5jYWxsQ291bnQgPT09IGV4cGVjdGF0aW9uLm1heENhbGxzO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlNYXRjaGVyKHBvc3NpYmxlTWF0Y2hlciwgYXJnKSB7XG4gICAgdmFyIGlzTWF0Y2hlciA9IG1hdGNoLmlzTWF0Y2hlcihwb3NzaWJsZU1hdGNoZXIpO1xuXG4gICAgcmV0dXJuIChpc01hdGNoZXIgJiYgcG9zc2libGVNYXRjaGVyLnRlc3QoYXJnKSkgfHwgdHJ1ZTtcbn1cblxudmFyIG1vY2tFeHBlY3RhdGlvbiA9IHtcbiAgICBtaW5DYWxsczogMSxcbiAgICBtYXhDYWxsczogMSxcblxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgdmFyIGV4cGVjdGF0aW9uID0gZXh0ZW5kLm5vbkVudW0oc3R1YigpLCBtb2NrRXhwZWN0YXRpb24pO1xuICAgICAgICBkZWxldGUgZXhwZWN0YXRpb24uY3JlYXRlO1xuICAgICAgICBleHBlY3RhdGlvbi5tZXRob2QgPSBtZXRob2ROYW1lO1xuXG4gICAgICAgIHJldHVybiBleHBlY3RhdGlvbjtcbiAgICB9LFxuXG4gICAgaW52b2tlOiBmdW5jdGlvbiBpbnZva2UoZnVuYywgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5Q2FsbEFsbG93ZWQodGhpc1ZhbHVlLCBhcmdzKTtcblxuICAgICAgICByZXR1cm4gcHJveHlJbnZva2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgYXRMZWFzdDogZnVuY3Rpb24gYXRMZWFzdChudW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke3ZhbHVlVG9TdHJpbmcobnVtKX0nIGlzIG5vdCBudW1iZXJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5saW1pdHNTZXQpIHtcbiAgICAgICAgICAgIHRoaXMubWF4Q2FsbHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5saW1pdHNTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5taW5DYWxscyA9IG51bTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgYXRNb3N0OiBmdW5jdGlvbiBhdE1vc3QobnVtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbnVtICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHt2YWx1ZVRvU3RyaW5nKG51bSl9JyBpcyBub3QgbnVtYmVyYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubGltaXRzU2V0KSB7XG4gICAgICAgICAgICB0aGlzLm1pbkNhbGxzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGltaXRzU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWF4Q2FsbHMgPSBudW07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIG5ldmVyOiBmdW5jdGlvbiBuZXZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhhY3RseSgwKTtcbiAgICB9LFxuXG4gICAgb25jZTogZnVuY3Rpb24gb25jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhhY3RseSgxKTtcbiAgICB9LFxuXG4gICAgdHdpY2U6IGZ1bmN0aW9uIHR3aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGFjdGx5KDIpO1xuICAgIH0sXG5cbiAgICB0aHJpY2U6IGZ1bmN0aW9uIHRocmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhhY3RseSgzKTtcbiAgICB9LFxuXG4gICAgZXhhY3RseTogZnVuY3Rpb24gZXhhY3RseShudW0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke3ZhbHVlVG9TdHJpbmcobnVtKX0nIGlzIG5vdCBhIG51bWJlcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdExlYXN0KG51bSk7XG4gICAgICAgIHJldHVybiB0aGlzLmF0TW9zdChudW0pO1xuICAgIH0sXG5cbiAgICBtZXQ6IGZ1bmN0aW9uIG1ldCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmZhaWxlZCAmJiByZWNlaXZlZE1pbkNhbGxzKHRoaXMpO1xuICAgIH0sXG5cbiAgICB2ZXJpZnlDYWxsQWxsb3dlZDogZnVuY3Rpb24gdmVyaWZ5Q2FsbEFsbG93ZWQodGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIHZhciBleHBlY3RlZEFyZ3VtZW50cyA9IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKHJlY2VpdmVkTWF4Q2FsbHModGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSBhbHJlYWR5IGNhbGxlZCAke3RpbWVzSW5Xb3Jkcyh0aGlzLm1heENhbGxzKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFwiZXhwZWN0ZWRUaGlzXCIgaW4gdGhpcyAmJiB0aGlzLmV4cGVjdGVkVGhpcyAhPT0gdGhpc1ZhbHVlKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gY2FsbGVkIHdpdGggJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICB0aGlzVmFsdWVcbiAgICAgICAgICAgICAgICApfSBhcyB0aGlzVmFsdWUsIGV4cGVjdGVkICR7dmFsdWVUb1N0cmluZyh0aGlzLmV4cGVjdGVkVGhpcyl9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKFwiZXhwZWN0ZWRBcmd1bWVudHNcIiBpbiB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChcbiAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgbm8gYXJndW1lbnRzLCBleHBlY3RlZCAke2Zvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBcmd1bWVudHNcbiAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBleHBlY3RlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSByZWNlaXZlZCB0b28gZmV3IGFyZ3VtZW50cyAoJHtmb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICAgICAgICApfSksIGV4cGVjdGVkICR7Zm9ybWF0KGV4cGVjdGVkQXJndW1lbnRzKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCAmJlxuICAgICAgICAgICAgYXJncy5sZW5ndGggIT09IGV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgIGAke3RoaXMubWV0aG9kfSByZWNlaXZlZCB0b28gbWFueSBhcmd1bWVudHMgKCR7Zm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICBhcmdzXG4gICAgICAgICAgICAgICAgKX0pLCBleHBlY3RlZCAke2Zvcm1hdChleHBlY3RlZEFyZ3VtZW50cyl9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvckVhY2goXG4gICAgICAgICAgICBleHBlY3RlZEFyZ3VtZW50cyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChleHBlY3RlZEFyZ3VtZW50LCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJpZnlNYXRjaGVyKGV4cGVjdGVkQXJndW1lbnQsIGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5tZXRob2R9IHJlY2VpdmVkIHdyb25nIGFyZ3VtZW50cyAke2Zvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICApfSwgZGlkbid0IG1hdGNoICR7U3RyaW5nKGV4cGVjdGVkQXJndW1lbnRzKX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYXJnc1tpXSwgZXhwZWN0ZWRBcmd1bWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm1ldGhvZH0gcmVjZWl2ZWQgd3JvbmcgYXJndW1lbnRzICR7Zm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICl9LCBleHBlY3RlZCAke2Zvcm1hdChleHBlY3RlZEFyZ3VtZW50cyl9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGFsbG93c0NhbGw6IGZ1bmN0aW9uIGFsbG93c0NhbGwodGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICAgIHZhciBleHBlY3RlZEFyZ3VtZW50cyA9IHRoaXMuZXhwZWN0ZWRBcmd1bWVudHM7XG5cbiAgICAgICAgaWYgKHRoaXMubWV0KCkgJiYgcmVjZWl2ZWRNYXhDYWxscyh0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFwiZXhwZWN0ZWRUaGlzXCIgaW4gdGhpcyAmJiB0aGlzLmV4cGVjdGVkVGhpcyAhPT0gdGhpc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShcImV4cGVjdGVkQXJndW1lbnRzXCIgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICAgIHZhciBfYXJncyA9IGFyZ3MgfHwgW107XG5cbiAgICAgICAgaWYgKF9hcmdzLmxlbmd0aCA8IGV4cGVjdGVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCAmJlxuICAgICAgICAgICAgX2FyZ3MubGVuZ3RoICE9PSBleHBlY3RlZEFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXZlcnkoZXhwZWN0ZWRBcmd1bWVudHMsIGZ1bmN0aW9uIChleHBlY3RlZEFyZ3VtZW50LCBpKSB7XG4gICAgICAgICAgICBpZiAoIXZlcmlmeU1hdGNoZXIoZXhwZWN0ZWRBcmd1bWVudCwgX2FyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChfYXJnc1tpXSwgZXhwZWN0ZWRBcmd1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgd2l0aEFyZ3M6IGZ1bmN0aW9uIHdpdGhBcmdzKCkge1xuICAgICAgICB0aGlzLmV4cGVjdGVkQXJndW1lbnRzID0gc2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHdpdGhFeGFjdEFyZ3M6IGZ1bmN0aW9uIHdpdGhFeGFjdEFyZ3MoKSB7XG4gICAgICAgIHRoaXMud2l0aEFyZ3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5leHBlY3RzRXhhY3RBcmdDb3VudCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24gb24odGhpc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwZWN0ZWRUaGlzID0gdGhpc1ZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZSh0aGlzLmV4cGVjdGVkQXJndW1lbnRzIHx8IFtdKTtcblxuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0c0V4YWN0QXJnQ291bnQpIHtcbiAgICAgICAgICAgIHB1c2goYXJncywgXCJbLi4uXVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjYWxsU3RyID0gcHJveHlDYWxsVG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICBwcm94eTogdGhpcy5tZXRob2QgfHwgXCJhbm9ueW1vdXMgbW9jayBleHBlY3RhdGlvblwiLFxuICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBgJHtjYWxsU3RyLnJlcGxhY2UoXG4gICAgICAgICAgICBcIiwgWy4uLlwiLFxuICAgICAgICAgICAgXCJbLCAuLi5cIlxuICAgICAgICApfSAke2V4cGVjdGVkQ2FsbENvdW50SW5Xb3Jkcyh0aGlzKX1gO1xuXG4gICAgICAgIGlmICh0aGlzLm1ldCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gYEV4cGVjdGF0aW9uIG1ldDogJHttZXNzYWdlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYEV4cGVjdGVkICR7bWVzc2FnZX0gKCR7Y2FsbENvdW50SW5Xb3Jkcyh0aGlzLmNhbGxDb3VudCl9KWA7XG4gICAgfSxcblxuICAgIHZlcmlmeTogZnVuY3Rpb24gdmVyaWZ5KCkge1xuICAgICAgICBpZiAoIXRoaXMubWV0KCkpIHtcbiAgICAgICAgICAgIG1vY2tFeHBlY3RhdGlvbi5mYWlsKFN0cmluZyh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24ucGFzcyhTdHJpbmcodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHBhc3M6IGZ1bmN0aW9uIHBhc3MobWVzc2FnZSkge1xuICAgICAgICBhc3NlcnQucGFzcyhtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgZmFpbDogZnVuY3Rpb24gZmFpbChtZXNzYWdlKSB7XG4gICAgICAgIHZhciBleGNlcHRpb24gPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIGV4Y2VwdGlvbi5uYW1lID0gXCJFeHBlY3RhdGlvbkVycm9yXCI7XG5cbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1vY2tFeHBlY3RhdGlvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgbW9ja0V4cGVjdGF0aW9uID0gcmVxdWlyZShcIi4vbW9jay1leHBlY3RhdGlvblwiKTtcbnZhciBwcm94eUNhbGxUb1N0cmluZyA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGxcIikudG9TdHJpbmc7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbnZhciBkZWVwRXF1YWwgPSByZXF1aXJlKFwiQHNpbm9uanMvc2Ftc2FtXCIpLmRlZXBFcXVhbDtcbnZhciB3cmFwTWV0aG9kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dyYXAtbWV0aG9kXCIpO1xudmFyIHVzZVByb21pc2VMaWJyYXJ5ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3VzZS1wcm9taXNlLWxpYnJhcnlcIik7XG5cbnZhciBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbnZhciBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbnZhciBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xudmFyIGV2ZXJ5ID0gYXJyYXlQcm90by5ldmVyeTtcbnZhciBqb2luID0gYXJyYXlQcm90by5qb2luO1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG52YXIgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xudmFyIHVuc2hpZnQgPSBhcnJheVByb3RvLnVuc2hpZnQ7XG5cbmZ1bmN0aW9uIG1vY2sob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gbW9ja0V4cGVjdGF0aW9uLmNyZWF0ZShvYmplY3QgPyBvYmplY3QgOiBcIkFub255bW91cyBtb2NrXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2NrLmNyZWF0ZShvYmplY3QpO1xufVxuXG5mdW5jdGlvbiBlYWNoKGNvbGxlY3Rpb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbCA9IGNvbGxlY3Rpb24gfHwgW107XG5cbiAgICBmb3JFYWNoKGNvbCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhcnIxLCBhcnIyLCBjb21wYXJlTGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmVMZW5ndGggJiYgYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlcnkoYXJyMSwgZnVuY3Rpb24gKGVsZW1lbnQsIGkpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBFcXVhbChhcnIyW2ldLCBlbGVtZW50KTtcbiAgICB9KTtcbn1cblxuZXh0ZW5kKG1vY2ssIHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZShvYmplY3QpIHtcbiAgICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJvYmplY3QgaXMgbnVsbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb2NrT2JqZWN0ID0gZXh0ZW5kLm5vbkVudW0oe30sIG1vY2ssIHsgb2JqZWN0OiBvYmplY3QgfSk7XG4gICAgICAgIGRlbGV0ZSBtb2NrT2JqZWN0LmNyZWF0ZTtcblxuICAgICAgICByZXR1cm4gbW9ja09iamVjdDtcbiAgICB9LFxuXG4gICAgZXhwZWN0czogZnVuY3Rpb24gZXhwZWN0cyhtZXRob2QpIHtcbiAgICAgICAgaWYgKCFtZXRob2QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtZXRob2QgaXMgZmFsc3lcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0YXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGVjdGF0aW9ucyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5wcm94aWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmZhaWx1cmVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF0gPSBbXTtcbiAgICAgICAgICAgIHZhciBtb2NrT2JqZWN0ID0gdGhpcztcblxuICAgICAgICAgICAgd3JhcE1ldGhvZCh0aGlzLm9iamVjdCwgbWV0aG9kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tPYmplY3QuaW52b2tlTWV0aG9kKG1ldGhvZCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwdXNoKHRoaXMucHJveGllcywgbWV0aG9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBleHBlY3RhdGlvbiA9IG1vY2tFeHBlY3RhdGlvbi5jcmVhdGUobWV0aG9kKTtcbiAgICAgICAgZXhwZWN0YXRpb24ud3JhcHBlZE1ldGhvZCA9IHRoaXMub2JqZWN0W21ldGhvZF0ud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgcHVzaCh0aGlzLmV4cGVjdGF0aW9uc1ttZXRob2RdLCBleHBlY3RhdGlvbik7XG4gICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHRoaXMucHJvbWlzZUxpYnJhcnksIGV4cGVjdGF0aW9uKTtcblxuICAgICAgICByZXR1cm4gZXhwZWN0YXRpb247XG4gICAgfSxcblxuICAgIHJlc3RvcmU6IGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdDtcblxuICAgICAgICBlYWNoKHRoaXMucHJveGllcywgZnVuY3Rpb24gKHByb3h5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdFtwcm94eV0ucmVzdG9yZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0W3Byb3h5XS5yZXN0b3JlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICB2ZXJpZnk6IGZ1bmN0aW9uIHZlcmlmeSgpIHtcbiAgICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9IHRoaXMuZXhwZWN0YXRpb25zIHx8IHt9O1xuICAgICAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLmZhaWx1cmVzID8gc2xpY2UodGhpcy5mYWlsdXJlcykgOiBbXTtcbiAgICAgICAgdmFyIG1ldCA9IFtdO1xuXG4gICAgICAgIGVhY2godGhpcy5wcm94aWVzLCBmdW5jdGlvbiAocHJveHkpIHtcbiAgICAgICAgICAgIGVhY2goZXhwZWN0YXRpb25zW3Byb3h5XSwgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RhdGlvbi5tZXQoKSkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoKG1lc3NhZ2VzLCBTdHJpbmcoZXhwZWN0YXRpb24pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwdXNoKG1ldCwgU3RyaW5nKGV4cGVjdGF0aW9uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzdG9yZSgpO1xuXG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24uZmFpbChqb2luKGNvbmNhdChtZXNzYWdlcywgbWV0KSwgXCJcXG5cIikpO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtb2NrRXhwZWN0YXRpb24ucGFzcyhqb2luKGNvbmNhdChtZXNzYWdlcywgbWV0KSwgXCJcXG5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHVzaW5nUHJvbWlzZTogZnVuY3Rpb24gdXNpbmdQcm9taXNlKHByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgIHRoaXMucHJvbWlzZUxpYnJhcnkgPSBwcm9taXNlTGlicmFyeTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgaW52b2tlTWV0aG9kOiBmdW5jdGlvbiBpbnZva2VNZXRob2QobWV0aG9kLCB0aGlzVmFsdWUsIGFyZ3MpIHtcbiAgICAgICAgLyogaWYgd2UgY2Fubm90IGZpbmQgYW55IG1hdGNoaW5nIGZpbGVzIHdlIHdpbGwgZXhwbGljaXRseSBjYWxsIG1vY2tFeHBlY3Rpb24jZmFpbCB3aXRoIGVycm9yIG1lc3NhZ2VzICovXG4gICAgICAgIC8qIGVzbGludCBjb25zaXN0ZW50LXJldHVybjogXCJvZmZcIiAqL1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25zID1cbiAgICAgICAgICAgIHRoaXMuZXhwZWN0YXRpb25zICYmIHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF1cbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhwZWN0YXRpb25zW21ldGhvZF1cbiAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICB2YXIgY3VycmVudEFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICB2YXIgYXZhaWxhYmxlO1xuXG4gICAgICAgIHZhciBleHBlY3RhdGlvbnNXaXRoTWF0Y2hpbmdBcmdzID0gZmlsdGVyKFxuICAgICAgICAgICAgZXhwZWN0YXRpb25zLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkQXJncyA9IGV4cGVjdGF0aW9uLmV4cGVjdGVkQXJndW1lbnRzIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBcmdzLFxuICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbi5leHBlY3RzRXhhY3RBcmdDb3VudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGV4cGVjdGF0aW9uc1RvQXBwbHkgPSBmaWx0ZXIoXG4gICAgICAgICAgICBleHBlY3RhdGlvbnNXaXRoTWF0Y2hpbmdBcmdzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgIWV4cGVjdGF0aW9uLm1ldCgpICYmXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLmFsbG93c0NhbGwodGhpc1ZhbHVlLCBhcmdzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGV4cGVjdGF0aW9uc1RvQXBwbHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uc1RvQXBwbHlbMF0uYXBwbHkodGhpc1ZhbHVlLCBhcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xuICAgICAgICB2YXIgZXhoYXVzdGVkID0gMDtcblxuICAgICAgICBmb3JFYWNoKGV4cGVjdGF0aW9uc1dpdGhNYXRjaGluZ0FyZ3MsIGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uLmFsbG93c0NhbGwodGhpc1ZhbHVlLCBhcmdzKSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGF2YWlsYWJsZSB8fCBleHBlY3RhdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhoYXVzdGVkICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhdmFpbGFibGUgJiYgZXhoYXVzdGVkID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKGV4cGVjdGF0aW9ucywgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBwdXNoKG1lc3NhZ2VzLCBgICAgICR7U3RyaW5nKGV4cGVjdGF0aW9uKX1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdW5zaGlmdChcbiAgICAgICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAgICAgYFVuZXhwZWN0ZWQgY2FsbDogJHtwcm94eUNhbGxUb1N0cmluZy5jYWxsKHtcbiAgICAgICAgICAgICAgICBwcm94eTogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICB9KX1gXG4gICAgICAgICk7XG5cbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgLy8gUGhhbnRvbUpTIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgc3RhY2sgdHJhY2UgdW50aWwgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93blxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLyogZW1wdHkgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwdXNoKFxuICAgICAgICAgICAgdGhpcy5mYWlsdXJlcyxcbiAgICAgICAgICAgIGBVbmV4cGVjdGVkIGNhbGw6ICR7cHJveHlDYWxsVG9TdHJpbmcuY2FsbCh7XG4gICAgICAgICAgICAgICAgcHJveHk6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgIHN0YWNrOiBlcnIuc3RhY2ssXG4gICAgICAgICAgICB9KX1gXG4gICAgICAgICk7XG5cbiAgICAgICAgbW9ja0V4cGVjdGF0aW9uLmZhaWwoam9pbihtZXNzYWdlcywgXCJcXG5cIikpO1xuICAgIH0sXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBtb2NrO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmYWtlID0gcmVxdWlyZShcIi4vZmFrZVwiKTtcbnZhciBpc1Jlc3RvcmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcmVzdG9yYWJsZVwiKTtcblxudmFyIFNUQVRVU19QRU5ESU5HID0gXCJwZW5kaW5nXCI7XG52YXIgU1RBVFVTX1JFU09MVkVEID0gXCJyZXNvbHZlZFwiO1xudmFyIFNUQVRVU19SRUpFQ1RFRCA9IFwicmVqZWN0ZWRcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZmFrZSBmb3IgYSBnaXZlbiBmdW5jdGlvbiBvciB1bmRlZmluZWQuIElmIG5vIGZ1bmN0aW9uIGlzIGdpdmVuLCBhXG4gKiBuZXcgZmFrZSBpcyByZXR1cm5lZC4gSWYgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGFscmVhZHkgYSBmYWtlLCBpdCBpc1xuICogcmV0dXJuZWQgYXMgaXMuIE90aGVyd2lzZSB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgd3JhcHBlZCBpbiBhIG5ldyBmYWtlLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtleGVjdXRvcl0gVGhlIG9wdGlvbmFsIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRGYWtlRXhlY3V0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAoaXNSZXN0b3JhYmxlKGV4ZWN1dG9yKSkge1xuICAgICAgICByZXR1cm4gZXhlY3V0b3I7XG4gICAgfVxuICAgIGlmIChleGVjdXRvcikge1xuICAgICAgICByZXR1cm4gZmFrZShleGVjdXRvcik7XG4gICAgfVxuICAgIHJldHVybiBmYWtlKCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG5ldyBwcm9taXNlIHRoYXQgZXhwb3NlcyBpdCdzIGludGVybmFsIGBzdGF0dXNgLCBgcmVzb2x2ZWRWYWx1ZWBcbiAqIGFuZCBgcmVqZWN0ZWRWYWx1ZWAgYW5kIGNhbiBiZSByZXNvbHZlZCBvciByZWplY3RlZCBmcm9tIHRoZSBvdXRzaWRlIGJ5XG4gKiBjYWxsaW5nIGByZXNvbHZlKHZhbHVlKWAgb3IgYHJlamVjdChyZWFzb24pYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0b3JdIFRoZSBvcHRpb25hbCBleGVjdXRvciBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBwcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdmFyIGZha2VFeGVjdXRvciA9IGdldEZha2VFeGVjdXRvcihleGVjdXRvcik7XG4gICAgdmFyIHNpbm9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZha2VFeGVjdXRvcik7XG5cbiAgICBzaW5vblByb21pc2Uuc3RhdHVzID0gU1RBVFVTX1BFTkRJTkc7XG4gICAgc2lub25Qcm9taXNlXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IFNUQVRVU19SRVNPTFZFRDtcbiAgICAgICAgICAgIHNpbm9uUHJvbWlzZS5yZXNvbHZlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICBzaW5vblByb21pc2Uuc3RhdHVzID0gU1RBVFVTX1JFSkVDVEVEO1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLnJlamVjdGVkVmFsdWUgPSByZWFzb247XG4gICAgICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgb3IgcmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiBzdGF0dXMgYW5kIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmFsaXplKHN0YXR1cywgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmIChzaW5vblByb21pc2Uuc3RhdHVzICE9PSBTVEFUVVNfUEVORElORykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9taXNlIGFscmVhZHkgJHtzaW5vblByb21pc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgc2lub25Qcm9taXNlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cblxuICAgIHNpbm9uUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGZpbmFsaXplKFNUQVRVU19SRVNPTFZFRCwgdmFsdWUsIGZha2VFeGVjdXRvci5maXJzdENhbGwuYXJnc1swXSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgcHJvbWlzZSBzbyB0aGF0IGNhbGxlcnMgY2FuIGF3YWl0IGl0OlxuICAgICAgICByZXR1cm4gc2lub25Qcm9taXNlO1xuICAgIH07XG4gICAgc2lub25Qcm9taXNlLnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgZmluYWxpemUoU1RBVFVTX1JFSkVDVEVELCByZWFzb24sIGZha2VFeGVjdXRvci5maXJzdENhbGwuYXJnc1sxXSk7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2lub24gcHJvbWlzZSB3YXNcbiAgICAgICAgLy8gcmVqZWN0ZWQsIHNvIHRoYXQgY2FsbGVycyBjYW4gYXdhaXQgaXQ6XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgc2lub25Qcm9taXNlLmNhdGNoKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2lub25Qcm9taXNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb21pc2U7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1c2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LnB1c2g7XG5cbmV4cG9ydHMuaW5jcmVtZW50Q2FsbENvdW50ID0gZnVuY3Rpb24gaW5jcmVtZW50Q2FsbENvdW50KHByb3h5KSB7XG4gICAgcHJveHkuY2FsbGVkID0gdHJ1ZTtcbiAgICBwcm94eS5jYWxsQ291bnQgKz0gMTtcbiAgICBwcm94eS5ub3RDYWxsZWQgPSBmYWxzZTtcbiAgICBwcm94eS5jYWxsZWRPbmNlID0gcHJveHkuY2FsbENvdW50ID09PSAxO1xuICAgIHByb3h5LmNhbGxlZFR3aWNlID0gcHJveHkuY2FsbENvdW50ID09PSAyO1xuICAgIHByb3h5LmNhbGxlZFRocmljZSA9IHByb3h5LmNhbGxDb3VudCA9PT0gMztcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ2FsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiBjcmVhdGVDYWxsUHJvcGVydGllcyhwcm94eSkge1xuICAgIHByb3h5LmZpcnN0Q2FsbCA9IHByb3h5LmdldENhbGwoMCk7XG4gICAgcHJveHkuc2Vjb25kQ2FsbCA9IHByb3h5LmdldENhbGwoMSk7XG4gICAgcHJveHkudGhpcmRDYWxsID0gcHJveHkuZ2V0Q2FsbCgyKTtcbiAgICBwcm94eS5sYXN0Q2FsbCA9IHByb3h5LmdldENhbGwocHJveHkuY2FsbENvdW50IC0gMSk7XG59O1xuXG5leHBvcnRzLmRlbGVnYXRlVG9DYWxscyA9IGZ1bmN0aW9uIGRlbGVnYXRlVG9DYWxscyhcbiAgICBwcm94eSxcbiAgICBtZXRob2QsXG4gICAgbWF0Y2hBbnksXG4gICAgYWN0dWFsLFxuICAgIHJldHVybnNWYWx1ZXMsXG4gICAgbm90Q2FsbGVkLFxuICAgIHRvdGFsQ2FsbENvdW50XG4pIHtcbiAgICBwcm94eVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkKSB7XG4gICAgICAgICAgICBpZiAobm90Q2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdENhbGxlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvdGFsQ2FsbENvdW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jYWxsQ291bnQgIT09IHRvdGFsQ2FsbENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudENhbGw7XG4gICAgICAgIHZhciBtYXRjaGVzID0gMDtcbiAgICAgICAgdmFyIHJldHVyblZhbHVlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jYWxsQ291bnQ7IGkgPCBsOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDYWxsID0gdGhpcy5nZXRDYWxsKGkpO1xuICAgICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gY3VycmVudENhbGxbYWN0dWFsIHx8IG1ldGhvZF0uYXBwbHkoXG4gICAgICAgICAgICAgICAgY3VycmVudENhbGwsXG4gICAgICAgICAgICAgICAgYXJndW1lbnRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHVzaChyZXR1cm5WYWx1ZXMsIHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXMgKz0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaEFueSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmV0dXJuc1ZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlcyA9PT0gdGhpcy5jYWxsQ291bnQ7XG4gICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIG1hdGNoID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xudmFyIGRlZXBFcXVhbCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuZGVlcEVxdWFsO1xudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbnZhciBzaW5vbkZvcm1hdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9mb3JtYXRcIik7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbnZhciBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbnZhciBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbnZhciBqb2luID0gYXJyYXlQcm90by5qb2luO1xudmFyIG1hcCA9IGFycmF5UHJvdG8ubWFwO1xudmFyIHJlZHVjZSA9IGFycmF5UHJvdG8ucmVkdWNlO1xudmFyIHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcblxuZnVuY3Rpb24gdGhyb3dZaWVsZEVycm9yKHByb3h5LCB0ZXh0LCBhcmdzKSB7XG4gICAgdmFyIG1zZyA9IGZ1bmN0aW9uTmFtZShwcm94eSkgKyB0ZXh0O1xuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBtc2cgKz0gYCBSZWNlaXZlZCBbJHtqb2luKHNsaWNlKGFyZ3MpLCBcIiwgXCIpfV1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxudmFyIGNhbGxQcm90byA9IHtcbiAgICBjYWxsZWRPbjogZnVuY3Rpb24gY2FsbGVkT24odGhpc1ZhbHVlKSB7XG4gICAgICAgIGlmIChtYXRjaC5pc01hdGNoZXIodGhpc1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZS50ZXN0KHRoaXMudGhpc1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50aGlzVmFsdWUgPT09IHRoaXNWYWx1ZTtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aDogZnVuY3Rpb24gY2FsbGVkV2l0aCgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgY2FsbGVkV2l0aEFyZ3MgPSBzbGljZShhcmd1bWVudHMpO1xuXG4gICAgICAgIGlmIChjYWxsZWRXaXRoQXJncy5sZW5ndGggPiBzZWxmLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgICAgICAgY2FsbGVkV2l0aEFyZ3MsXG4gICAgICAgICAgICBmdW5jdGlvbiAocHJldiwgYXJnLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgJiYgZGVlcEVxdWFsKHNlbGYuYXJnc1tpXSwgYXJnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGNhbGxlZFdpdGhNYXRjaDogZnVuY3Rpb24gY2FsbGVkV2l0aE1hdGNoKCkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBjYWxsZWRXaXRoTWF0Y2hBcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAoY2FsbGVkV2l0aE1hdGNoQXJncy5sZW5ndGggPiBzZWxmLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgICAgICAgY2FsbGVkV2l0aE1hdGNoQXJncyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChwcmV2LCBleHBlY3RhdGlvbiwgaSkge1xuICAgICAgICAgICAgICAgIHZhciBhY3R1YWwgPSBzZWxmLmFyZ3NbaV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiAmJiBtYXRjaChleHBlY3RhdGlvbikudGVzdChhY3R1YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgY2FsbGVkV2l0aEV4YWN0bHk6IGZ1bmN0aW9uIGNhbGxlZFdpdGhFeGFjdGx5KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gdGhpcy5hcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy5jYWxsZWRXaXRoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgbm90Q2FsbGVkV2l0aDogZnVuY3Rpb24gbm90Q2FsbGVkV2l0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNhbGxlZFdpdGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgbm90Q2FsbGVkV2l0aE1hdGNoOiBmdW5jdGlvbiBub3RDYWxsZWRXaXRoTWF0Y2goKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jYWxsZWRXaXRoTWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgcmV0dXJuZWQ6IGZ1bmN0aW9uIHJldHVybmVkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWwodGhpcy5yZXR1cm5WYWx1ZSwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICB0aHJldzogZnVuY3Rpb24gdGhyZXcoZXJyb3IpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhdGhpcy5leGNlcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmV4Y2VwdGlvbiA9PT0gZXJyb3IgfHwgdGhpcy5leGNlcHRpb24ubmFtZSA9PT0gZXJyb3I7XG4gICAgfSxcblxuICAgIGNhbGxlZFdpdGhOZXc6IGZ1bmN0aW9uIGNhbGxlZFdpdGhOZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5LnByb3RvdHlwZSAmJiB0aGlzLnRoaXNWYWx1ZSBpbnN0YW5jZW9mIHRoaXMucHJveHk7XG4gICAgfSxcblxuICAgIGNhbGxlZEJlZm9yZTogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxJZCA8IG90aGVyLmNhbGxJZDtcbiAgICB9LFxuXG4gICAgY2FsbGVkQWZ0ZXI6IGZ1bmN0aW9uIChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSWQgPiBvdGhlci5jYWxsSWQ7XG4gICAgfSxcblxuICAgIGNhbGxlZEltbWVkaWF0ZWx5QmVmb3JlOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkID09PSBvdGhlci5jYWxsSWQgLSAxO1xuICAgIH0sXG5cbiAgICBjYWxsZWRJbW1lZGlhdGVseUFmdGVyOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkID09PSBvdGhlci5jYWxsSWQgKyAxO1xuICAgIH0sXG5cbiAgICBjYWxsQXJnOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXJnSXNBRnVuY3Rpb24ocG9zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJnc1twb3NdKCk7XG4gICAgfSxcblxuICAgIGNhbGxBcmdPbjogZnVuY3Rpb24gKHBvcywgdGhpc1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXJnSXNBRnVuY3Rpb24ocG9zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJnc1twb3NdLmFwcGx5KHRoaXNWYWx1ZSk7XG4gICAgfSxcblxuICAgIGNhbGxBcmdXaXRoOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcmdPbldpdGguYXBwbHkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgY29uY2F0KFtwb3MsIG51bGxdLCBzbGljZShhcmd1bWVudHMsIDEpKVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICBjYWxsQXJnT25XaXRoOiBmdW5jdGlvbiAocG9zLCB0aGlzVmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBcmdJc0FGdW5jdGlvbihwb3MpO1xuICAgICAgICB2YXIgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMik7XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3NbcG9zXS5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgIH0sXG5cbiAgICB0aHJvd0FyZzogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICBpZiAocG9zID4gdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgTm90IGVub3VnaCBhcmd1bWVudHM6ICR7cG9zfSByZXF1aXJlZCBidXQgb25seSAke3RoaXMuYXJncy5sZW5ndGh9IHByZXNlbnRgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgdGhpcy5hcmdzW3Bvc107XG4gICAgfSxcblxuICAgIHlpZWxkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnlpZWxkT24uYXBwbHkodGhpcywgY29uY2F0KFtudWxsXSwgc2xpY2UoYXJndW1lbnRzLCAwKSkpO1xuICAgIH0sXG5cbiAgICB5aWVsZE9uOiBmdW5jdGlvbiAodGhpc1ZhbHVlKSB7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UodGhpcy5hcmdzKTtcbiAgICAgICAgdmFyIHlpZWxkRm4gPSBmaWx0ZXIoYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgfSlbMF07XG5cbiAgICAgICAgaWYgKCF5aWVsZEZuKSB7XG4gICAgICAgICAgICB0aHJvd1lpZWxkRXJyb3IoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICBcIiBjYW5ub3QgeWllbGQgc2luY2Ugbm8gY2FsbGJhY2sgd2FzIHBhc3NlZC5cIixcbiAgICAgICAgICAgICAgICBhcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkRm4uYXBwbHkodGhpc1ZhbHVlLCBzbGljZShhcmd1bWVudHMsIDEpKTtcbiAgICB9LFxuXG4gICAgeWllbGRUbzogZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWllbGRUb09uLmFwcGx5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGNvbmNhdChbcHJvcCwgbnVsbF0sIHNsaWNlKGFyZ3VtZW50cywgMSkpXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIHlpZWxkVG9PbjogZnVuY3Rpb24gKHByb3AsIHRoaXNWYWx1ZSkge1xuICAgICAgICB2YXIgYXJncyA9IHNsaWNlKHRoaXMuYXJncyk7XG4gICAgICAgIHZhciB5aWVsZEFyZyA9IGZpbHRlcihhcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmdbcHJvcF0gPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgfSlbMF07XG4gICAgICAgIHZhciB5aWVsZEZuID0geWllbGRBcmcgJiYgeWllbGRBcmdbcHJvcF07XG5cbiAgICAgICAgaWYgKCF5aWVsZEZuKSB7XG4gICAgICAgICAgICB0aHJvd1lpZWxkRXJyb3IoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICBgIGNhbm5vdCB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wXG4gICAgICAgICAgICAgICAgKX0nIHNpbmNlIG5vIGNhbGxiYWNrIHdhcyBwYXNzZWQuYCxcbiAgICAgICAgICAgICAgICBhcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHlpZWxkRm4uYXBwbHkodGhpc1ZhbHVlLCBzbGljZShhcmd1bWVudHMsIDIpKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNhbGxTdHIgPSB0aGlzLnByb3h5ID8gYCR7U3RyaW5nKHRoaXMucHJveHkpfShgIDogXCJcIjtcbiAgICAgICAgdmFyIGZvcm1hdHRlZEFyZ3M7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjooXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXR0ZWRBcmdzID0gbWFwKHRoaXMuYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHNpbm9uRm9ybWF0KGFyZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbGxTdHIgPSBgJHtjYWxsU3RyICsgam9pbihmb3JtYXR0ZWRBcmdzLCBcIiwgXCIpfSlgO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXR1cm5WYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2FsbFN0ciArPSBgID0+ICR7c2lub25Gb3JtYXQodGhpcy5yZXR1cm5WYWx1ZSl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4Y2VwdGlvbikge1xuICAgICAgICAgICAgY2FsbFN0ciArPSBgICEke3RoaXMuZXhjZXB0aW9uLm5hbWV9YDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjZXB0aW9uLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBjYWxsU3RyICs9IGAoJHt0aGlzLmV4Y2VwdGlvbi5tZXNzYWdlfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YWNrKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgc3RhY2ssIGFkZCB0aGUgZmlyc3QgZnJhbWUgdGhhdCdzIGluIGVuZC11c2VyIGNvZGVcbiAgICAgICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IHR3byBmcmFtZXMgYmVjYXVzZSB0aGV5IHdpbGwgcmVmZXIgdG8gU2lub24gY29kZVxuICAgICAgICAgICAgY2FsbFN0ciArPSAodGhpcy5zdGFjay5zcGxpdChcIlxcblwiKVszXSB8fCBcInVua25vd25cIikucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvXlxccyooPzphdFxccyt8QCk/LyxcbiAgICAgICAgICAgICAgICBcIiBhdCBcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxsU3RyO1xuICAgIH0sXG5cbiAgICBlbnN1cmVBcmdJc0FGdW5jdGlvbjogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXJnc1twb3NdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkIGFyZ3VtZW50IGF0IHBvc2l0aW9uICR7cG9zfSB0byBiZSBhIEZ1bmN0aW9uLCBidXQgd2FzICR7dHlwZW9mIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgLmFyZ3NbcG9zXX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoY2FsbFByb3RvLCBcInN0YWNrXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmVycm9yV2l0aENhbGxTdGFjayAmJiB0aGlzLmVycm9yV2l0aENhbGxTdGFjay5zdGFjaykgfHwgXCJcIjtcbiAgICB9LFxufSk7XG5cbmNhbGxQcm90by5pbnZva2VDYWxsYmFjayA9IGNhbGxQcm90by55aWVsZDtcblxuZnVuY3Rpb24gY3JlYXRlUHJveHlDYWxsKFxuICAgIHByb3h5LFxuICAgIHRoaXNWYWx1ZSxcbiAgICBhcmdzLFxuICAgIHJldHVyblZhbHVlLFxuICAgIGV4Y2VwdGlvbixcbiAgICBpZCxcbiAgICBlcnJvcldpdGhDYWxsU3RhY2tcbikge1xuICAgIGlmICh0eXBlb2YgaWQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbGwgaWQgaXMgbm90IGEgbnVtYmVyXCIpO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEFyZywgbGFzdEFyZztcblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgICAgICBsYXN0QXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIHZhciBwcm94eUNhbGwgPSBPYmplY3QuY3JlYXRlKGNhbGxQcm90byk7XG4gICAgdmFyIGNhbGxiYWNrID1cbiAgICAgICAgbGFzdEFyZyAmJiB0eXBlb2YgbGFzdEFyZyA9PT0gXCJmdW5jdGlvblwiID8gbGFzdEFyZyA6IHVuZGVmaW5lZDtcblxuICAgIHByb3h5Q2FsbC5wcm94eSA9IHByb3h5O1xuICAgIHByb3h5Q2FsbC50aGlzVmFsdWUgPSB0aGlzVmFsdWU7XG4gICAgcHJveHlDYWxsLmFyZ3MgPSBhcmdzO1xuICAgIHByb3h5Q2FsbC5maXJzdEFyZyA9IGZpcnN0QXJnO1xuICAgIHByb3h5Q2FsbC5sYXN0QXJnID0gbGFzdEFyZztcbiAgICBwcm94eUNhbGwuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICBwcm94eUNhbGwucmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZTtcbiAgICBwcm94eUNhbGwuZXhjZXB0aW9uID0gZXhjZXB0aW9uO1xuICAgIHByb3h5Q2FsbC5jYWxsSWQgPSBpZDtcbiAgICBwcm94eUNhbGwuZXJyb3JXaXRoQ2FsbFN0YWNrID0gZXJyb3JXaXRoQ2FsbFN0YWNrO1xuXG4gICAgcmV0dXJuIHByb3h5Q2FsbDtcbn1cbmNyZWF0ZVByb3h5Q2FsbC50b1N0cmluZyA9IGNhbGxQcm90by50b1N0cmluZzsgLy8gdXNlZCBieSBtb2Nrc1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVByb3h5Q2FsbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgcHJveHlDYWxsVXRpbCA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGwtdXRpbFwiKTtcblxudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG52YXIgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbnZhciBjb25jYXQgPSBhcnJheVByb3RvLmNvbmNhdDtcbnZhciBFcnJvckNvbnN0cnVjdG9yID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xudmFyIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcblxudmFyIGNhbGxJZCA9IDA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW52b2tlKGZ1bmMsIHRoaXNWYWx1ZSwgYXJncykge1xuICAgIHZhciBtYXRjaGluZ3MgPSB0aGlzLm1hdGNoaW5nRmFrZXMoYXJncyk7XG4gICAgdmFyIGN1cnJlbnRDYWxsSWQgPSBjYWxsSWQrKztcbiAgICB2YXIgZXhjZXB0aW9uLCByZXR1cm5WYWx1ZTtcblxuICAgIHByb3h5Q2FsbFV0aWwuaW5jcmVtZW50Q2FsbENvdW50KHRoaXMpO1xuICAgIHB1c2godGhpcy50aGlzVmFsdWVzLCB0aGlzVmFsdWUpO1xuICAgIHB1c2godGhpcy5hcmdzLCBhcmdzKTtcbiAgICBwdXNoKHRoaXMuY2FsbElkcywgY3VycmVudENhbGxJZCk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIGZ1bmN0aW9uIChtYXRjaGluZykge1xuICAgICAgICBwcm94eUNhbGxVdGlsLmluY3JlbWVudENhbGxDb3VudChtYXRjaGluZyk7XG4gICAgICAgIHB1c2gobWF0Y2hpbmcudGhpc1ZhbHVlcywgdGhpc1ZhbHVlKTtcbiAgICAgICAgcHVzaChtYXRjaGluZy5hcmdzLCBhcmdzKTtcbiAgICAgICAgcHVzaChtYXRjaGluZy5jYWxsSWRzLCBjdXJyZW50Q2FsbElkKTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgY2FsbCBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiB0aGUgc3BpZWQgZnVuY3Rpb246XG4gICAgcHJveHlDYWxsVXRpbC5jcmVhdGVDYWxsUHJvcGVydGllcyh0aGlzKTtcbiAgICBmb3JFYWNoKG1hdGNoaW5ncywgcHJveHlDYWxsVXRpbC5jcmVhdGVDYWxsUHJvcGVydGllcyk7XG5cbiAgICB0cnkge1xuICAgICAgICB0aGlzLmludm9raW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdGhpc0NhbGwgPSB0aGlzLmdldENhbGwodGhpcy5jYWxsQ291bnQgLSAxKTtcblxuICAgICAgICBpZiAodGhpc0NhbGwuY2FsbGVkV2l0aE5ldygpKSB7XG4gICAgICAgICAgICAvLyBDYWxsIHRocm91Z2ggd2l0aCBgbmV3YFxuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBuZXcgKGJpbmQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jIHx8IGZ1bmMsXG4gICAgICAgICAgICAgICAgY29uY2F0KFt0aGlzVmFsdWVdLCBhcmdzKVxuICAgICAgICAgICAgKSkoKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXR1cm5WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdGhpc1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSAodGhpcy5mdW5jIHx8IGZ1bmMpLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGV4Y2VwdGlvbiA9IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW52b2tpbmc7XG4gICAgfVxuXG4gICAgcHVzaCh0aGlzLmV4Y2VwdGlvbnMsIGV4Y2VwdGlvbik7XG4gICAgcHVzaCh0aGlzLnJldHVyblZhbHVlcywgcmV0dXJuVmFsdWUpO1xuICAgIGZvckVhY2gobWF0Y2hpbmdzLCBmdW5jdGlvbiAobWF0Y2hpbmcpIHtcbiAgICAgICAgcHVzaChtYXRjaGluZy5leGNlcHRpb25zLCBleGNlcHRpb24pO1xuICAgICAgICBwdXNoKG1hdGNoaW5nLnJldHVyblZhbHVlcywgcmV0dXJuVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvckNvbnN0cnVjdG9yKCk7XG4gICAgLy8gMS4gUGxlYXNlIGRvIG5vdCBnZXQgc3RhY2sgYXQgdGhpcyBwb2ludC4gSXQgbWF5IGJlIHNvIHZlcnkgc2xvdywgYW5kIG5vdCBhY3R1YWxseSB1c2VkXG4gICAgLy8gMi4gUGhhbnRvbUpTIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgc3RhY2sgdHJhY2UgdW50aWwgdGhlIGVycm9yIGhhcyBiZWVuIHRocm93bjpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvci9TdGFja1xuICAgIHRyeSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuICAgIHB1c2godGhpcy5lcnJvcnNXaXRoQ2FsbFN0YWNrLCBlcnIpO1xuICAgIGZvckVhY2gobWF0Y2hpbmdzLCBmdW5jdGlvbiAobWF0Y2hpbmcpIHtcbiAgICAgICAgcHVzaChtYXRjaGluZy5lcnJvcnNXaXRoQ2FsbFN0YWNrLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgLy8gTWFrZSByZXR1cm4gdmFsdWUgYW5kIGV4Y2VwdGlvbiBhdmFpbGFibGUgaW4gdGhlIGNhbGxzOlxuICAgIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXModGhpcyk7XG4gICAgZm9yRWFjaChtYXRjaGluZ3MsIHByb3h5Q2FsbFV0aWwuY3JlYXRlQ2FsbFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGV4Y2VwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBleHRlbmQgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZXh0ZW5kXCIpO1xudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZnVuY3Rpb24tdG8tc3RyaW5nXCIpO1xudmFyIHByb3h5Q2FsbCA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGxcIik7XG52YXIgcHJveHlDYWxsVXRpbCA9IHJlcXVpcmUoXCIuL3Byb3h5LWNhbGwtdXRpbFwiKTtcbnZhciBwcm94eUludm9rZSA9IHJlcXVpcmUoXCIuL3Byb3h5LWludm9rZVwiKTtcbnZhciBzaW5vbkZvcm1hdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9mb3JtYXRcIik7XG5cbnZhciBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xudmFyIGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG52YXIgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuXG52YXIgZW1wdHlGYWtlcyA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4vLyBQdWJsaWMgQVBJXG52YXIgcHJveHlBcGkgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uVG9TdHJpbmcsXG5cbiAgICBuYW1lZDogZnVuY3Rpb24gbmFtZWQobmFtZSkge1xuICAgICAgICB0aGlzLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgdmFyIG5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBcIm5hbWVcIik7XG4gICAgICAgIGlmIChuYW1lRGVzY3JpcHRvciAmJiBuYW1lRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgIC8vIElFIDExIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGEgbmFtZS5cbiAgICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBuYW1lcyB0aGF0IGFyZSBub3QgY29uZmlndXJhYmxlLlxuICAgICAgICAgICAgbmFtZURlc2NyaXB0b3IudmFsdWUgPSBuYW1lO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibmFtZVwiLCBuYW1lRGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGludm9rZTogcHJveHlJbnZva2UsXG5cbiAgICAvKlxuICAgICAqIEhvb2sgZm9yIGRlcml2ZWQgaW1wbGVtZW50YXRpb24gdG8gcmV0dXJuIGZha2UgaW5zdGFuY2VzIG1hdGNoaW5nIHRoZVxuICAgICAqIGdpdmVuIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBtYXRjaGluZ0Zha2VzOiBmdW5jdGlvbiAoLyphcmdzLCBzdHJpY3QqLykge1xuICAgICAgICByZXR1cm4gZW1wdHlGYWtlcztcbiAgICB9LFxuXG4gICAgZ2V0Q2FsbDogZnVuY3Rpb24gZ2V0Q2FsbChpbmRleCkge1xuICAgICAgICB2YXIgaSA9IGluZGV4O1xuICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIGluZGljZXMgbWVhbnMgY291bnRpbmcgYmFja3dhcmRzIGZyb20gdGhlIGxhc3QgY2FsbFxuICAgICAgICAgICAgaSArPSB0aGlzLmNhbGxDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSB0aGlzLmNhbGxDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJveHlDYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMudGhpc1ZhbHVlc1tpXSxcbiAgICAgICAgICAgIHRoaXMuYXJnc1tpXSxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVzW2ldLFxuICAgICAgICAgICAgdGhpcy5leGNlcHRpb25zW2ldLFxuICAgICAgICAgICAgdGhpcy5jYWxsSWRzW2ldLFxuICAgICAgICAgICAgdGhpcy5lcnJvcnNXaXRoQ2FsbFN0YWNrW2ldXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGdldENhbGxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYWxscyA9IFtdO1xuICAgICAgICB2YXIgaTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5jYWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgcHVzaChjYWxscywgdGhpcy5nZXRDYWxsKGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxscztcbiAgICB9LFxuXG4gICAgY2FsbGVkQmVmb3JlOiBmdW5jdGlvbiBjYWxsZWRCZWZvcmUocHJveHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwcm94eS5jYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkc1swXSA8IHByb3h5LmNhbGxJZHNbcHJveHkuY2FsbElkcy5sZW5ndGggLSAxXTtcbiAgICB9LFxuXG4gICAgY2FsbGVkQWZ0ZXI6IGZ1bmN0aW9uIGNhbGxlZEFmdGVyKHByb3h5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsZWQgfHwgIXByb3h5LmNhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbElkc1t0aGlzLmNhbGxDb3VudCAtIDFdID4gcHJveHkuY2FsbElkc1swXTtcbiAgICB9LFxuXG4gICAgY2FsbGVkSW1tZWRpYXRlbHlCZWZvcmU6IGZ1bmN0aW9uIGNhbGxlZEltbWVkaWF0ZWx5QmVmb3JlKHByb3h5KSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsZWQgfHwgIXByb3h5LmNhbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuY2FsbElkc1t0aGlzLmNhbGxDb3VudCAtIDFdID09PVxuICAgICAgICAgICAgcHJveHkuY2FsbElkc1twcm94eS5jYWxsQ291bnQgLSAxXSAtIDFcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgY2FsbGVkSW1tZWRpYXRlbHlBZnRlcjogZnVuY3Rpb24gY2FsbGVkSW1tZWRpYXRlbHlBZnRlcihwcm94eSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbGVkIHx8ICFwcm94eS5jYWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmNhbGxJZHNbdGhpcy5jYWxsQ291bnQgLSAxXSA9PT1cbiAgICAgICAgICAgIHByb3h5LmNhbGxJZHNbcHJveHkuY2FsbENvdW50IC0gMV0gKyAxXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIGZvcm1hdHRlcnM6IHJlcXVpcmUoXCIuL3NweS1mb3JtYXR0ZXJzXCIpLFxuICAgIHByaW50ZjogZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICB2YXIgc3B5SW5zdGFuY2UgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgICAgIHZhciBmb3JtYXR0ZXI7XG5cbiAgICAgICAgcmV0dXJuIChmb3JtYXQgfHwgXCJcIikucmVwbGFjZSgvJSguKS9nLCBmdW5jdGlvbiAobWF0Y2gsIHNwZWNpZmllcikge1xuICAgICAgICAgICAgZm9ybWF0dGVyID0gcHJveHlBcGkuZm9ybWF0dGVyc1tzcGVjaWZpZXJdO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtYXR0ZXIoc3B5SW5zdGFuY2UsIGFyZ3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlSW50KHNwZWNpZmllciwgMTApKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaW5vbkZvcm1hdChhcmdzW3NwZWNpZmllciAtIDFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGAlJHtzcGVjaWZpZXJ9YDtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlc2V0SGlzdG9yeTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbnZva2luZykge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNhbm5vdCByZXNldCBTaW5vbiBmdW5jdGlvbiB3aGlsZSBpbnZva2luZyBpdC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1vdmUgdGhlIGNhbGwgdG8gLnJlc2V0SGlzdG9yeSBvdXRzaWRlIG9mIHRoZSBjYWxsYmFjay5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gXCJJbnZhbGlkUmVzZXRFeGNlcHRpb25cIjtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm90Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYWxsZWRPbmNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsbGVkVHdpY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYWxsZWRUaHJpY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYWxsQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmZpcnN0Q2FsbCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2Vjb25kQ2FsbCA9IG51bGw7XG4gICAgICAgIHRoaXMudGhpcmRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Q2FsbCA9IG51bGw7XG4gICAgICAgIHRoaXMuYXJncyA9IFtdO1xuICAgICAgICB0aGlzLmZpcnN0QXJnID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0QXJnID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy50aGlzVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMuZXhjZXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNhbGxJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5lcnJvcnNXaXRoQ2FsbFN0YWNrID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuZmFrZXMpIHtcbiAgICAgICAgICAgIGZvckVhY2godGhpcy5mYWtlcywgZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgICAgICAgICBmYWtlLnJlc2V0SGlzdG9yeSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxufTtcblxudmFyIGRlbGVnYXRlVG9DYWxscyA9IHByb3h5Q2FsbFV0aWwuZGVsZWdhdGVUb0NhbGxzO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZE9uXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c0NhbGxlZE9uXCIsIGZhbHNlLCBcImNhbGxlZE9uXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJjYWxsZWRPbmNlV2l0aFwiLFxuICAgIHRydWUsXG4gICAgXCJjYWxsZWRXaXRoXCIsXG4gICAgZmFsc2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIDFcbik7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiY2FsbGVkV2l0aE1hdGNoXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c0NhbGxlZFdpdGhcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aFwiKTtcbmRlbGVnYXRlVG9DYWxscyhwcm94eUFwaSwgXCJhbHdheXNDYWxsZWRXaXRoTWF0Y2hcIiwgZmFsc2UsIFwiY2FsbGVkV2l0aE1hdGNoXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhFeGFjdGx5XCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5QXBpLFxuICAgIFwiY2FsbGVkT25jZVdpdGhFeGFjdGx5XCIsXG4gICAgdHJ1ZSxcbiAgICBcImNhbGxlZFdpdGhFeGFjdGx5XCIsXG4gICAgZmFsc2UsXG4gICAgdW5kZWZpbmVkLFxuICAgIDFcbik7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJjYWxsZWRPbmNlV2l0aE1hdGNoXCIsXG4gICAgdHJ1ZSxcbiAgICBcImNhbGxlZFdpdGhNYXRjaFwiLFxuICAgIGZhbHNlLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxXG4pO1xuZGVsZWdhdGVUb0NhbGxzKFxuICAgIHByb3h5QXBpLFxuICAgIFwiYWx3YXlzQ2FsbGVkV2l0aEV4YWN0bHlcIixcbiAgICBmYWxzZSxcbiAgICBcImNhbGxlZFdpdGhFeGFjdGx5XCJcbik7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJuZXZlckNhbGxlZFdpdGhcIixcbiAgICBmYWxzZSxcbiAgICBcIm5vdENhbGxlZFdpdGhcIixcbiAgICBmYWxzZSxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbik7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgcHJveHlBcGksXG4gICAgXCJuZXZlckNhbGxlZFdpdGhNYXRjaFwiLFxuICAgIGZhbHNlLFxuICAgIFwibm90Q2FsbGVkV2l0aE1hdGNoXCIsXG4gICAgZmFsc2UsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4pO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcInRocmV3XCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c1RocmV3XCIsIGZhbHNlLCBcInRocmV3XCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcInJldHVybmVkXCIsIHRydWUpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImFsd2F5c1JldHVybmVkXCIsIGZhbHNlLCBcInJldHVybmVkXCIpO1xuZGVsZWdhdGVUb0NhbGxzKHByb3h5QXBpLCBcImNhbGxlZFdpdGhOZXdcIiwgdHJ1ZSk7XG5kZWxlZ2F0ZVRvQ2FsbHMocHJveHlBcGksIFwiYWx3YXlzQ2FsbGVkV2l0aE5ld1wiLCBmYWxzZSwgXCJjYWxsZWRXaXRoTmV3XCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVQcm94eShmdW5jLCBvcmlnaW5hbEZ1bmMpIHtcbiAgICB2YXIgcHJveHkgPSB3cmFwRnVuY3Rpb24oZnVuYywgb3JpZ2luYWxGdW5jKTtcblxuICAgIC8vIEluaGVyaXQgZnVuY3Rpb24gcHJvcGVydGllczpcbiAgICBleHRlbmQocHJveHksIGZ1bmMpO1xuXG4gICAgcHJveHkucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XG5cbiAgICBleHRlbmQubm9uRW51bShwcm94eSwgcHJveHlBcGkpO1xuXG4gICAgcmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiB3cmFwRnVuY3Rpb24oZnVuYywgb3JpZ2luYWxGdW5jKSB7XG4gICAgdmFyIGFyaXR5ID0gb3JpZ2luYWxGdW5jLmxlbmd0aDtcbiAgICB2YXIgcDtcbiAgICAvLyBEbyBub3QgY2hhbmdlIHRoaXMgdG8gdXNlIGFuIGV2YWwuIFByb2plY3RzIHRoYXQgZGVwZW5kIG9uIHNpbm9uIGJsb2NrIHRoZSB1c2Ugb2YgZXZhbC5cbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5vbmpzL3Npbm9uL2lzc3Vlcy83MTBcbiAgICBzd2l0Y2ggKGFyaXR5KSB7XG4gICAgICAgIC8qZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMsIG1heC1sZW4qL1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC5pbnZva2UoZnVuYywgdGhpcywgc2xpY2UoYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBwID0gZnVuY3Rpb24gcHJveHkoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHAgPSBmdW5jdGlvbiBwcm94eShhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAuaW52b2tlKGZ1bmMsIHRoaXMsIHNsaWNlKGFyZ3VtZW50cykpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcCA9IGZ1bmN0aW9uIHByb3h5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwLmludm9rZShmdW5jLCB0aGlzLCBzbGljZShhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgLyplc2xpbnQtZW5hYmxlKi9cbiAgICB9XG4gICAgdmFyIG5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvcmlnaW5hbEZ1bmMsIFwibmFtZVwiKTtcbiAgICBpZiAobmFtZURlc2NyaXB0b3IgJiYgbmFtZURlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIC8vIElFIDExIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGEgbmFtZS5cbiAgICAgICAgLy8gU2FmYXJpIDkgaGFzIG5hbWVzIHRoYXQgYXJlIG5vdCBjb25maWd1cmFibGUuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcIm5hbWVcIiwgbmFtZURlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBleHRlbmQubm9uRW51bShwLCB7XG4gICAgICAgIGlzU2lub25Qcm94eTogdHJ1ZSxcblxuICAgICAgICBjYWxsZWQ6IGZhbHNlLFxuICAgICAgICBub3RDYWxsZWQ6IHRydWUsXG4gICAgICAgIGNhbGxlZE9uY2U6IGZhbHNlLFxuICAgICAgICBjYWxsZWRUd2ljZTogZmFsc2UsXG4gICAgICAgIGNhbGxlZFRocmljZTogZmFsc2UsXG4gICAgICAgIGNhbGxDb3VudDogMCxcbiAgICAgICAgZmlyc3RDYWxsOiBudWxsLFxuICAgICAgICBmaXJzdEFyZzogbnVsbCxcbiAgICAgICAgc2Vjb25kQ2FsbDogbnVsbCxcbiAgICAgICAgdGhpcmRDYWxsOiBudWxsLFxuICAgICAgICBsYXN0Q2FsbDogbnVsbCxcbiAgICAgICAgbGFzdEFyZzogbnVsbCxcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIHJldHVyblZhbHVlczogW10sXG4gICAgICAgIHRoaXNWYWx1ZXM6IFtdLFxuICAgICAgICBleGNlcHRpb25zOiBbXSxcbiAgICAgICAgY2FsbElkczogW10sXG4gICAgICAgIGVycm9yc1dpdGhDYWxsU3RhY2s6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVByb3h5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB3YWxrT2JqZWN0ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dhbGstb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBmaWx0ZXIob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBvYmplY3RbcHJvcGVydHldLnJlc3RvcmUgJiYgb2JqZWN0W3Byb3BlcnR5XS5yZXN0b3JlLnNpbm9uO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBvYmplY3RbcHJvcGVydHldLnJlc3RvcmUoKTtcbn1cblxuZnVuY3Rpb24gcmVzdG9yZU9iamVjdChvYmplY3QpIHtcbiAgICByZXR1cm4gd2Fsa09iamVjdChyZXN0b3JlLCBvYmplY3QsIGZpbHRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdG9yZU9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgbG9nZ2VyID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZGVwcmVjYXRlZDtcbnZhciBjb2xsZWN0T3duTWV0aG9kcyA9IHJlcXVpcmUoXCIuL2NvbGxlY3Qtb3duLW1ldGhvZHNcIik7XG52YXIgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xudmFyIGlzUHJvcGVydHlDb25maWd1cmFibGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtcHJvcGVydHktY29uZmlndXJhYmxlXCIpO1xudmFyIG1hdGNoID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xudmFyIHNpbm9uQXNzZXJ0ID0gcmVxdWlyZShcIi4vYXNzZXJ0XCIpO1xudmFyIHNpbm9uQ2xvY2sgPSByZXF1aXJlKFwiLi91dGlsL2Zha2UtdGltZXJzXCIpO1xudmFyIHNpbm9uTW9jayA9IHJlcXVpcmUoXCIuL21vY2tcIik7XG52YXIgc2lub25TcHkgPSByZXF1aXJlKFwiLi9zcHlcIik7XG52YXIgc2lub25TdHViID0gcmVxdWlyZShcIi4vc3R1YlwiKTtcbnZhciBzaW5vbkZha2UgPSByZXF1aXJlKFwiLi9mYWtlXCIpO1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xudmFyIGZha2VTZXJ2ZXIgPSByZXF1aXJlKFwibmlzZVwiKS5mYWtlU2VydmVyO1xudmFyIGZha2VYaHIgPSByZXF1aXJlKFwibmlzZVwiKS5mYWtlWGhyO1xudmFyIHVzZVByb21pc2VMaWJyYXJ5ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3VzZS1wcm9taXNlLWxpYnJhcnlcIik7XG5cbnZhciBERUZBVUxUX0xFQUtfVEhSRVNIT0xEID0gMTAwMDA7XG5cbnZhciBmaWx0ZXIgPSBhcnJheVByb3RvLmZpbHRlcjtcbnZhciBmb3JFYWNoID0gYXJyYXlQcm90by5mb3JFYWNoO1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG52YXIgcmV2ZXJzZSA9IGFycmF5UHJvdG8ucmV2ZXJzZTtcblxuZnVuY3Rpb24gYXBwbHlPbkVhY2goZmFrZXMsIG1ldGhvZCkge1xuICAgIHZhciBtYXRjaGluZ0Zha2VzID0gZmlsdGVyKGZha2VzLCBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGZha2VbbWV0aG9kXSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH0pO1xuXG4gICAgZm9yRWFjaChtYXRjaGluZ0Zha2VzLCBmdW5jdGlvbiAoZmFrZSkge1xuICAgICAgICBmYWtlW21ldGhvZF0oKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gU2FuZGJveCgpIHtcbiAgICB2YXIgc2FuZGJveCA9IHRoaXM7XG4gICAgdmFyIGZha2VSZXN0b3JlcnMgPSBbXTtcbiAgICB2YXIgcHJvbWlzZUxpYjtcblxuICAgIHZhciBjb2xsZWN0aW9uID0gW107XG4gICAgdmFyIGxvZ2dlZExlYWtXYXJuaW5nID0gZmFsc2U7XG4gICAgc2FuZGJveC5sZWFrVGhyZXNob2xkID0gREVGQVVMVF9MRUFLX1RIUkVTSE9MRDtcblxuICAgIGZ1bmN0aW9uIGFkZFRvQ29sbGVjdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHVzaChjb2xsZWN0aW9uLCBvYmplY3QpID4gc2FuZGJveC5sZWFrVGhyZXNob2xkICYmXG4gICAgICAgICAgICAhbG9nZ2VkTGVha1dhcm5pbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgbG9nZ2VyLnByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgICBcIlBvdGVudGlhbCBtZW1vcnkgbGVhayBkZXRlY3RlZDsgYmUgc3VyZSB0byBjYWxsIHJlc3RvcmUoKSB0byBjbGVhbiB1cCB5b3VyIHNhbmRib3guIFRvIHN1cHByZXNzIHRoaXMgd2FybmluZywgbW9kaWZ5IHRoZSBsZWFrVGhyZXNob2xkIHByb3BlcnR5IG9mIHlvdXIgc2FuZGJveC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvZ2dlZExlYWtXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhbmRib3guYXNzZXJ0ID0gc2lub25Bc3NlcnQuY3JlYXRlQXNzZXJ0T2JqZWN0KCk7XG5cbiAgICBzYW5kYm94LnNlcnZlclByb3RvdHlwZSA9IGZha2VTZXJ2ZXI7XG5cbiAgICAvLyB0aGlzIGlzIGZvciB0ZXN0aW5nIG9ubHlcbiAgICBzYW5kYm94LmdldEZha2VzID0gZnVuY3Rpb24gZ2V0RmFrZXMoKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH07XG5cbiAgICAvLyB0aGlzIGlzIGZvciB0ZXN0aW5nIG9ubHlcbiAgICBzYW5kYm94LmdldFJlc3RvcmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZha2VSZXN0b3JlcnM7XG4gICAgfTtcblxuICAgIHNhbmRib3guY3JlYXRlU3R1Ykluc3RhbmNlID0gZnVuY3Rpb24gY3JlYXRlU3R1Ykluc3RhbmNlKCkge1xuICAgICAgICB2YXIgc3R1YmJlZCA9IHNpbm9uU3R1Yi5jcmVhdGVTdHViSW5zdGFuY2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcblxuICAgICAgICB2YXIgb3duTWV0aG9kcyA9IGNvbGxlY3RPd25NZXRob2RzKHN0dWJiZWQpO1xuXG4gICAgICAgIGZvckVhY2gob3duTWV0aG9kcywgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgICAgICAgYWRkVG9Db2xsZWN0aW9uKG1ldGhvZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIG93bk1ldGhvZHMpO1xuXG4gICAgICAgIHJldHVybiBzdHViYmVkO1xuICAgIH07XG5cbiAgICBzYW5kYm94LmluamVjdCA9IGZ1bmN0aW9uIGluamVjdChvYmopIHtcbiAgICAgICAgb2JqLnNweSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnNweS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5zdHViID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3guc3R1Yi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5tb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNhbmRib3gubW9jay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9iai5jcmVhdGVTdHViSW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FuZGJveC5jcmVhdGVTdHViSW5zdGFuY2UuYXBwbHkoc2FuZGJveCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmouZmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LmZha2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmoucmVwbGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnJlcGxhY2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmoucmVwbGFjZVNldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnJlcGxhY2VTZXR0ZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvYmoucmVwbGFjZUdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzYW5kYm94LnJlcGxhY2VHZXR0ZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc2FuZGJveC5jbG9jaykge1xuICAgICAgICAgICAgb2JqLmNsb2NrID0gc2FuZGJveC5jbG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzYW5kYm94LnNlcnZlcikge1xuICAgICAgICAgICAgb2JqLnNlcnZlciA9IHNhbmRib3guc2VydmVyO1xuICAgICAgICAgICAgb2JqLnJlcXVlc3RzID0gc2FuZGJveC5zZXJ2ZXIucmVxdWVzdHM7XG4gICAgICAgIH1cblxuICAgICAgICBvYmoubWF0Y2ggPSBtYXRjaDtcblxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG5cbiAgICBzYW5kYm94Lm1vY2sgPSBmdW5jdGlvbiBtb2NrKCkge1xuICAgICAgICB2YXIgbSA9IHNpbm9uTW9jay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICAgIGFkZFRvQ29sbGVjdGlvbihtKTtcbiAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkocHJvbWlzZUxpYiwgbSk7XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgYXBwbHlPbkVhY2goY29sbGVjdGlvbiwgXCJyZXNldFwiKTtcbiAgICAgICAgYXBwbHlPbkVhY2goY29sbGVjdGlvbiwgXCJyZXNldEhpc3RvcnlcIik7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzZXRCZWhhdmlvciA9IGZ1bmN0aW9uIHJlc2V0QmVoYXZpb3IoKSB7XG4gICAgICAgIGFwcGx5T25FYWNoKGNvbGxlY3Rpb24sIFwicmVzZXRCZWhhdmlvclwiKTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXNldEhpc3RvcnkgPSBmdW5jdGlvbiByZXNldEhpc3RvcnkoKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByaXZhdGVSZXNldEhpc3RvcnkoZikge1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGYucmVzZXRIaXN0b3J5IHx8IGYucmVzZXQ7XG4gICAgICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgbWV0aG9kLmNhbGwoZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uIChmYWtlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZha2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHByaXZhdGVSZXNldEhpc3RvcnkoZmFrZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbWV0aG9kcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGZha2UuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcHVzaChtZXRob2RzLCBmYWtlLmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmYWtlLnNldCkge1xuICAgICAgICAgICAgICAgIHB1c2gobWV0aG9kcywgZmFrZS5zZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JFYWNoKG1ldGhvZHMsIHByaXZhdGVSZXNldEhpc3RvcnkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcInNhbmRib3gucmVzdG9yZSgpIGRvZXMgbm90IHRha2UgYW55IHBhcmFtZXRlcnMuIFBlcmhhcHMgeW91IG1lYW50IHN0dWIucmVzdG9yZSgpXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXZlcnNlKGNvbGxlY3Rpb24pO1xuICAgICAgICBhcHBseU9uRWFjaChjb2xsZWN0aW9uLCBcInJlc3RvcmVcIik7XG4gICAgICAgIGNvbGxlY3Rpb24gPSBbXTtcblxuICAgICAgICBmb3JFYWNoKGZha2VSZXN0b3JlcnMsIGZ1bmN0aW9uIChyZXN0b3Jlcikge1xuICAgICAgICAgICAgcmVzdG9yZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZha2VSZXN0b3JlcnMgPSBbXTtcblxuICAgICAgICBzYW5kYm94LnJlc3RvcmVDb250ZXh0KCk7XG4gICAgfTtcblxuICAgIHNhbmRib3gucmVzdG9yZUNvbnRleHQgPSBmdW5jdGlvbiByZXN0b3JlQ29udGV4dCgpIHtcbiAgICAgICAgdmFyIGluamVjdGVkS2V5cyA9IHNhbmRib3guaW5qZWN0ZWRLZXlzO1xuICAgICAgICB2YXIgaW5qZWN0SW50byA9IHNhbmRib3guaW5qZWN0SW50bztcblxuICAgICAgICBpZiAoIWluamVjdGVkS2V5cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yRWFjaChpbmplY3RlZEtleXMsIGZ1bmN0aW9uIChpbmplY3RlZEtleSkge1xuICAgICAgICAgICAgZGVsZXRlIGluamVjdEludG9baW5qZWN0ZWRLZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICBpbmplY3RlZEtleXMgPSBbXTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVzdG9yZXIoKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5pc093bikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZXIub2JqZWN0ID0gb2JqZWN0O1xuICAgICAgICByZXN0b3Jlci5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICByZXR1cm4gcmVzdG9yZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5Tm90UmVwbGFjZWQob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgICBmb3JFYWNoKGZha2VSZXN0b3JlcnMsIGZ1bmN0aW9uIChmYWtlUmVzdG9yZXIpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmYWtlUmVzdG9yZXIub2JqZWN0ID09PSBvYmplY3QgJiZcbiAgICAgICAgICAgICAgICBmYWtlUmVzdG9yZXIucHJvcGVydHkgPT09IHByb3BlcnR5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHJlcGxhY2UgJHtwcm9wZXJ0eX0gd2hpY2ggaXMgYWxyZWFkeSByZXBsYWNlZGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYW5kYm94LnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKG9iamVjdCwgcHJvcGVydHksIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQ2Fubm90IHJlcGxhY2Ugbm9uLWV4aXN0ZW50IHByb3BlcnR5ICR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgcmVwbGFjZW1lbnQgYXJndW1lbnQgdG8gYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXNlIHNhbmRib3gucmVwbGFjZUdldHRlciBmb3IgcmVwbGFjaW5nIGdldHRlcnNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVzZSBzYW5kYm94LnJlcGxhY2VTZXR0ZXIgZm9yIHJlcGxhY2luZyBzZXR0ZXJzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcGVydHldICE9PSB0eXBlb2YgcmVwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlICR7dHlwZW9mIG9iamVjdFtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgICAgICBdfSB3aXRoICR7dHlwZW9mIHJlcGxhY2VtZW50fWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICBvYmplY3RbcHJvcGVydHldID0gcmVwbGFjZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlcGxhY2VHZXR0ZXIgPSBmdW5jdGlvbiByZXBsYWNlR2V0dGVyKFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZXBsYWNlbWVudFxuICAgICkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVwbGFjZW1lbnQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgb2JqZWN0LnByb3BlcnR5YCBpcyBub3QgYSBnZXR0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgZ2V0OiByZXBsYWNlbWVudCxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmplY3QsIHByb3BlcnR5KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgIH07XG5cbiAgICBzYW5kYm94LnJlcGxhY2VTZXR0ZXIgPSBmdW5jdGlvbiByZXBsYWNlU2V0dGVyKFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICByZXBsYWNlbWVudFxuICAgICkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYENhbm5vdCByZXBsYWNlIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlbWVudCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVwbGFjZW1lbnQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvblwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgb2JqZWN0LnByb3BlcnR5YCBpcyBub3QgYSBzZXR0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2ZXJpZnlOb3RSZXBsYWNlZChvYmplY3QsIHByb3BlcnR5KTtcblxuICAgICAgICAvLyBzdG9yZSBhIGZ1bmN0aW9uIGZvciByZXN0b3JpbmcgdGhlIHJlcGxhY2VkIHByb3BlcnR5XG4gICAgICAgIHB1c2goZmFrZVJlc3RvcmVycywgZ2V0RmFrZVJlc3RvcmVyKG9iamVjdCwgcHJvcGVydHkpKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYWNjZXNzb3ItcGFpcnNcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHNldDogcmVwbGFjZW1lbnQsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGlzUHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wZXJ0eSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUG9zdEluaXRTZXR1cChhcmdzLCBzcHkpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IGFyZ3NbMV07XG5cbiAgICAgICAgdmFyIGlzU3B5aW5nT25FbnRpcmVPYmplY3QgPVxuICAgICAgICAgICAgdHlwZW9mIHByb3BlcnR5ID09PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCI7XG5cbiAgICAgICAgaWYgKGlzU3B5aW5nT25FbnRpcmVPYmplY3QpIHtcbiAgICAgICAgICAgIHZhciBvd25NZXRob2RzID0gY29sbGVjdE93bk1ldGhvZHMoc3B5KTtcblxuICAgICAgICAgICAgZm9yRWFjaChvd25NZXRob2RzLCBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgYWRkVG9Db2xsZWN0aW9uKG1ldGhvZCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdXNlUHJvbWlzZUxpYnJhcnkocHJvbWlzZUxpYiwgb3duTWV0aG9kcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGRUb0NvbGxlY3Rpb24oc3B5KTtcbiAgICAgICAgICAgIHVzZVByb21pc2VMaWJyYXJ5KHByb21pc2VMaWIsIHNweSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3B5O1xuICAgIH1cblxuICAgIHNhbmRib3guc3B5ID0gZnVuY3Rpb24gc3B5KCkge1xuICAgICAgICB2YXIgY3JlYXRlZFNweSA9IHNpbm9uU3B5LmFwcGx5KHNpbm9uU3B5LCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY29tbW9uUG9zdEluaXRTZXR1cChhcmd1bWVudHMsIGNyZWF0ZWRTcHkpO1xuICAgIH07XG5cbiAgICBzYW5kYm94LnN0dWIgPSBmdW5jdGlvbiBzdHViKCkge1xuICAgICAgICB2YXIgY3JlYXRlZFN0dWIgPSBzaW5vblN0dWIuYXBwbHkoc2lub25TdHViLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY29tbW9uUG9zdEluaXRTZXR1cChhcmd1bWVudHMsIGNyZWF0ZWRTdHViKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgc2FuZGJveC5mYWtlID0gZnVuY3Rpb24gZmFrZShmKSB7XG4gICAgICAgIHZhciBzID0gc2lub25GYWtlLmFwcGx5KHNpbm9uRmFrZSwgYXJndW1lbnRzKTtcblxuICAgICAgICBhZGRUb0NvbGxlY3Rpb24ocyk7XG5cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfTtcblxuICAgIGZvckVhY2goT2JqZWN0LmtleXMoc2lub25GYWtlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgZmFrZUJlaGF2aW9yID0gc2lub25GYWtlW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgZmFrZUJlaGF2aW9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNhbmRib3guZmFrZVtrZXldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBzID0gZmFrZUJlaGF2aW9yLmFwcGx5KGZha2VCZWhhdmlvciwgYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIGFkZFRvQ29sbGVjdGlvbihzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2FuZGJveC51c2VGYWtlVGltZXJzID0gZnVuY3Rpb24gdXNlRmFrZVRpbWVycyhhcmdzKSB7XG4gICAgICAgIHZhciBjbG9jayA9IHNpbm9uQ2xvY2sudXNlRmFrZVRpbWVycy5jYWxsKG51bGwsIGFyZ3MpO1xuXG4gICAgICAgIHNhbmRib3guY2xvY2sgPSBjbG9jaztcbiAgICAgICAgYWRkVG9Db2xsZWN0aW9uKGNsb2NrKTtcblxuICAgICAgICByZXR1cm4gY2xvY2s7XG4gICAgfTtcblxuICAgIHNhbmRib3gudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KCkge1xuICAgICAgICBhcHBseU9uRWFjaChjb2xsZWN0aW9uLCBcInZlcmlmeVwiKTtcbiAgICB9O1xuXG4gICAgc2FuZGJveC52ZXJpZnlBbmRSZXN0b3JlID0gZnVuY3Rpb24gdmVyaWZ5QW5kUmVzdG9yZSgpIHtcbiAgICAgICAgdmFyIGV4Y2VwdGlvbjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2FuZGJveC52ZXJpZnkoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXhjZXB0aW9uID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhbmRib3gucmVzdG9yZSgpO1xuXG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzYW5kYm94LnVzZUZha2VTZXJ2ZXIgPSBmdW5jdGlvbiB1c2VGYWtlU2VydmVyKCkge1xuICAgICAgICB2YXIgcHJvdG8gPSBzYW5kYm94LnNlcnZlclByb3RvdHlwZSB8fCBmYWtlU2VydmVyO1xuXG4gICAgICAgIGlmICghcHJvdG8gfHwgIXByb3RvLmNyZWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzYW5kYm94LnNlcnZlciA9IHByb3RvLmNyZWF0ZSgpO1xuICAgICAgICBhZGRUb0NvbGxlY3Rpb24oc2FuZGJveC5zZXJ2ZXIpO1xuXG4gICAgICAgIHJldHVybiBzYW5kYm94LnNlcnZlcjtcbiAgICB9O1xuXG4gICAgc2FuZGJveC51c2VGYWtlWE1MSHR0cFJlcXVlc3QgPSBmdW5jdGlvbiB1c2VGYWtlWE1MSHR0cFJlcXVlc3QoKSB7XG4gICAgICAgIHZhciB4aHIgPSBmYWtlWGhyLnVzZUZha2VYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBhZGRUb0NvbGxlY3Rpb24oeGhyKTtcbiAgICAgICAgcmV0dXJuIHhocjtcbiAgICB9O1xuXG4gICAgc2FuZGJveC51c2luZ1Byb21pc2UgPSBmdW5jdGlvbiB1c2luZ1Byb21pc2UocHJvbWlzZUxpYnJhcnkpIHtcbiAgICAgICAgcHJvbWlzZUxpYiA9IHByb21pc2VMaWJyYXJ5O1xuICAgICAgICBjb2xsZWN0aW9uLnByb21pc2VMaWJyYXJ5ID0gcHJvbWlzZUxpYnJhcnk7XG5cbiAgICAgICAgcmV0dXJuIHNhbmRib3g7XG4gICAgfTtcbn1cblxuU2FuZGJveC5wcm90b3R5cGUubWF0Y2ggPSBtYXRjaDtcblxubW9kdWxlLmV4cG9ydHMgPSBTYW5kYm94O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBjb2xvciA9IHJlcXVpcmUoXCIuL2NvbG9yXCIpO1xudmFyIG1hdGNoID0gcmVxdWlyZShcIkBzaW5vbmpzL3NhbXNhbVwiKS5jcmVhdGVNYXRjaGVyO1xudmFyIHRpbWVzSW5Xb3JkcyA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS90aW1lcy1pbi13b3Jkc1wiKTtcbnZhciBzaW5vbkZvcm1hdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9mb3JtYXRcIik7XG52YXIganNEaWZmID0gcmVxdWlyZShcImRpZmZcIik7XG5cbnZhciBqb2luID0gYXJyYXlQcm90by5qb2luO1xudmFyIG1hcCA9IGFycmF5UHJvdG8ubWFwO1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG52YXIgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xuXG5mdW5jdGlvbiBjb2xvclNpbm9uTWF0Y2hUZXh0KG1hdGNoZXIsIGNhbGxlZEFyZywgY2FsbGVkQXJnTWVzc2FnZSkge1xuICAgIHZhciBjYWxsZWRBcmd1bWVudE1lc3NhZ2UgPSBjYWxsZWRBcmdNZXNzYWdlO1xuICAgIGlmICghbWF0Y2hlci50ZXN0KGNhbGxlZEFyZykpIHtcbiAgICAgICAgbWF0Y2hlci5tZXNzYWdlID0gY29sb3IucmVkKG1hdGNoZXIubWVzc2FnZSk7XG4gICAgICAgIGlmIChjYWxsZWRBcmd1bWVudE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNhbGxlZEFyZ3VtZW50TWVzc2FnZSA9IGNvbG9yLmdyZWVuKGNhbGxlZEFyZ3VtZW50TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NhbGxlZEFyZ3VtZW50TWVzc2FnZX0gJHttYXRjaGVyLm1lc3NhZ2V9YDtcbn1cblxuZnVuY3Rpb24gY29sb3JEaWZmVGV4dChkaWZmKSB7XG4gICAgdmFyIG9iamVjdHMgPSBtYXAoZGlmZiwgZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgdmFyIHRleHQgPSBwYXJ0LnZhbHVlO1xuICAgICAgICBpZiAocGFydC5hZGRlZCkge1xuICAgICAgICAgICAgdGV4dCA9IGNvbG9yLmdyZWVuKHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnQucmVtb3ZlZCkge1xuICAgICAgICAgICAgdGV4dCA9IGNvbG9yLnJlZCh0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlmZi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRleHQgKz0gXCIgXCI7IC8vIGZvcm1hdCBzaW1wbGUgZGlmZnNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9KTtcbiAgICByZXR1cm4gam9pbihvYmplY3RzLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gcXVvdGVTdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVzSW5Xb3JkcyhzcHlJbnN0YW5jZS5jYWxsQ291bnQpO1xuICAgIH0sXG5cbiAgICBuOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIHJldHVybiBzcHlJbnN0YW5jZS50b1N0cmluZygpO1xuICAgIH0sXG5cbiAgICBEOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UsIGFyZ3MpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3B5SW5zdGFuY2UuY2FsbENvdW50OyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyBkZXNjcmliZSBtdWx0aXBsZSBjYWxsc1xuICAgICAgICAgICAgaWYgKGwgPiAxKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBgXFxuQ2FsbCAke2kgKyAxfTpgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNhbGxlZEFyZ3MgPSBzcHlJbnN0YW5jZS5nZXRDYWxsKGkpLmFyZ3M7XG4gICAgICAgICAgICB2YXIgZXhwZWN0ZWRBcmdzID0gc2xpY2UoYXJncyk7XG5cbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgIGogPCBjYWxsZWRBcmdzLmxlbmd0aCB8fCBqIDwgZXhwZWN0ZWRBcmdzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICArK2pcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBjYWxsZWRBcmcgPSBjYWxsZWRBcmdzW2pdO1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZEFyZyA9IGV4cGVjdGVkQXJnc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGVkQXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZEFyZyA9IHF1b3RlU3RyaW5nVmFsdWUoY2FsbGVkQXJnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRBcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRBcmcgPSBxdW90ZVN0cmluZ1ZhbHVlKGV4cGVjdGVkQXJnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFwiXFxuXCI7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbGVkQXJnTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIGogPCBjYWxsZWRBcmdzLmxlbmd0aCA/IHNpbm9uRm9ybWF0KGNhbGxlZEFyZykgOiBcIlwiO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5pc01hdGNoZXIoZXhwZWN0ZWRBcmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gY29sb3JTaW5vbk1hdGNoVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkQXJnTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZEFyZ01lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaiA8IGV4cGVjdGVkQXJncy5sZW5ndGggPyBzaW5vbkZvcm1hdChleHBlY3RlZEFyZykgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IGpzRGlmZi5kaWZmSnNvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZEFyZ01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEFyZ01lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBjb2xvckRpZmZUZXh0KGRpZmYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH0sXG5cbiAgICBDOiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UpIHtcbiAgICAgICAgdmFyIGNhbGxzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzcHlJbnN0YW5jZS5jYWxsQ291bnQ7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICAgICAgdmFyIHN0cmluZ2lmaWVkQ2FsbCA9IGAgICAgJHtzcHlJbnN0YW5jZS5nZXRDYWxsKGkpLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIGlmICgvXFxuLy50ZXN0KGNhbGxzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdpZmllZENhbGwgPSBgXFxuJHtzdHJpbmdpZmllZENhbGx9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHB1c2goY2FsbHMsIHN0cmluZ2lmaWVkQ2FsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbHMubGVuZ3RoID4gMCA/IGBcXG4ke2pvaW4oY2FsbHMsIFwiXFxuXCIpfWAgOiBcIlwiO1xuICAgIH0sXG5cbiAgICB0OiBmdW5jdGlvbiAoc3B5SW5zdGFuY2UpIHtcbiAgICAgICAgdmFyIG9iamVjdHMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNweUluc3RhbmNlLmNhbGxDb3VudDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgcHVzaChvYmplY3RzLCBzaW5vbkZvcm1hdChzcHlJbnN0YW5jZS50aGlzVmFsdWVzW2ldKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gam9pbihvYmplY3RzLCBcIiwgXCIpO1xuICAgIH0sXG5cbiAgICBcIipcIjogZnVuY3Rpb24gKHNweUluc3RhbmNlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBqb2luKFxuICAgICAgICAgICAgbWFwKGFyZ3MsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lub25Gb3JtYXQoYXJnKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCIsIFwiXG4gICAgICAgICk7XG4gICAgfSxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIGNyZWF0ZVByb3h5ID0gcmVxdWlyZShcIi4vcHJveHlcIik7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbnZhciBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG52YXIgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2dldC1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpO1xudmFyIGRlZXBFcXVhbCA9IHJlcXVpcmUoXCJAc2lub25qcy9zYW1zYW1cIikuZGVlcEVxdWFsO1xudmFyIGlzRXNNb2R1bGUgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvaXMtZXMtbW9kdWxlXCIpO1xudmFyIHByb3h5Q2FsbFV0aWwgPSByZXF1aXJlKFwiLi9wcm94eS1jYWxsLXV0aWxcIik7XG52YXIgd2Fsa09iamVjdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93YWxrLW9iamVjdFwiKTtcbnZhciB3cmFwTWV0aG9kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL3dyYXAtbWV0aG9kXCIpO1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG4vKiBjYWNoZSByZWZlcmVuY2VzIHRvIGxpYnJhcnkgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzbyBjYW4gYmUgc3R1YmJlZCB3aXRob3V0IHByb2JsZW1zICovXG52YXIgZm9yRWFjaCA9IGFycmF5UHJvdG8uZm9yRWFjaDtcbnZhciBwb3AgPSBhcnJheVByb3RvLnBvcDtcbnZhciBwdXNoID0gYXJyYXlQcm90by5wdXNoO1xudmFyIHNsaWNlID0gYXJyYXlQcm90by5zbGljZTtcbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG52YXIgdXVpZCA9IDA7XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZmFrZSwgYXJncywgc3RyaWN0KSB7XG4gICAgdmFyIG1hcmdzID0gZmFrZS5tYXRjaGluZ0FyZ3VtZW50cztcbiAgICBpZiAoXG4gICAgICAgIG1hcmdzLmxlbmd0aCA8PSBhcmdzLmxlbmd0aCAmJlxuICAgICAgICBkZWVwRXF1YWwoc2xpY2UoYXJncywgMCwgbWFyZ3MubGVuZ3RoKSwgbWFyZ3MpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAhc3RyaWN0IHx8IG1hcmdzLmxlbmd0aCA9PT0gYXJncy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUHVibGljIEFQSVxudmFyIHNweUFwaSA9IHtcbiAgICB3aXRoQXJnczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IHNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICAgIHZhciBtYXRjaGluZyA9IHBvcCh0aGlzLm1hdGNoaW5nRmFrZXMoYXJncywgdHJ1ZSkpO1xuICAgICAgICBpZiAobWF0Y2hpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcmlnaW5hbCA9IHRoaXM7XG4gICAgICAgIHZhciBmYWtlID0gdGhpcy5pbnN0YW50aWF0ZUZha2UoKTtcbiAgICAgICAgZmFrZS5tYXRjaGluZ0FyZ3VtZW50cyA9IGFyZ3M7XG4gICAgICAgIGZha2UucGFyZW50ID0gdGhpcztcbiAgICAgICAgcHVzaCh0aGlzLmZha2VzLCBmYWtlKTtcblxuICAgICAgICBmYWtlLndpdGhBcmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLndpdGhBcmdzLmFwcGx5KG9yaWdpbmFsLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvckVhY2gob3JpZ2luYWwuYXJncywgZnVuY3Rpb24gKGFyZywgaSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZha2UsIGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3h5Q2FsbFV0aWwuaW5jcmVtZW50Q2FsbENvdW50KGZha2UpO1xuICAgICAgICAgICAgcHVzaChmYWtlLnRoaXNWYWx1ZXMsIG9yaWdpbmFsLnRoaXNWYWx1ZXNbaV0pO1xuICAgICAgICAgICAgcHVzaChmYWtlLmFyZ3MsIGFyZyk7XG4gICAgICAgICAgICBwdXNoKGZha2UucmV0dXJuVmFsdWVzLCBvcmlnaW5hbC5yZXR1cm5WYWx1ZXNbaV0pO1xuICAgICAgICAgICAgcHVzaChmYWtlLmV4Y2VwdGlvbnMsIG9yaWdpbmFsLmV4Y2VwdGlvbnNbaV0pO1xuICAgICAgICAgICAgcHVzaChmYWtlLmNhbGxJZHMsIG9yaWdpbmFsLmNhbGxJZHNbaV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBwcm94eUNhbGxVdGlsLmNyZWF0ZUNhbGxQcm9wZXJ0aWVzKGZha2UpO1xuXG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG5cbiAgICAvLyBPdmVycmlkZSBwcm94eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uXG4gICAgbWF0Y2hpbmdGYWtlczogZnVuY3Rpb24gKGFyZ3MsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5mYWtlcywgZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGZha2UsIGFyZ3MsIHN0cmljdCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kcyAqL1xudmFyIGRlbGVnYXRlVG9DYWxscyA9IHByb3h5Q2FsbFV0aWwuZGVsZWdhdGVUb0NhbGxzO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJjYWxsQXJnXCIsIGZhbHNlLCBcImNhbGxBcmdXaXRoXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IGNhbGwgYXJnIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuYFxuICAgICk7XG59KTtcbnNweUFwaS5jYWxsQXJnV2l0aCA9IHNweUFwaS5jYWxsQXJnO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJjYWxsQXJnT25cIiwgZmFsc2UsIFwiY2FsbEFyZ09uV2l0aFwiLCB0cnVlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCBjYWxsIGFyZyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmBcbiAgICApO1xufSk7XG5zcHlBcGkuY2FsbEFyZ09uV2l0aCA9IHNweUFwaS5jYWxsQXJnT247XG5kZWxlZ2F0ZVRvQ2FsbHMoc3B5QXBpLCBcInRocm93QXJnXCIsIGZhbHNlLCBcInRocm93QXJnXCIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB0aHJvdyBhcmcgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gXG4gICAgKTtcbn0pO1xuZGVsZWdhdGVUb0NhbGxzKHNweUFwaSwgXCJ5aWVsZFwiLCBmYWxzZSwgXCJ5aWVsZFwiLCB0cnVlLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB5aWVsZCBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmBcbiAgICApO1xufSk7XG4vLyBcImludm9rZUNhbGxiYWNrXCIgaXMgYW4gYWxpYXMgZm9yIFwieWllbGRcIiBzaW5jZSBcInlpZWxkXCIgaXMgaW52YWxpZCBpbiBzdHJpY3QgbW9kZS5cbnNweUFwaS5pbnZva2VDYWxsYmFjayA9IHNweUFwaS55aWVsZDtcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwieWllbGRPblwiLCBmYWxzZSwgXCJ5aWVsZE9uXCIsIHRydWUsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMudG9TdHJpbmcoKX0gY2Fubm90IHlpZWxkIHNpbmNlIGl0IHdhcyBub3QgeWV0IGludm9rZWQuYFxuICAgICk7XG59KTtcbmRlbGVnYXRlVG9DYWxscyhzcHlBcGksIFwieWllbGRUb1wiLCBmYWxzZSwgXCJ5aWVsZFRvXCIsIHRydWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy50b1N0cmluZygpfSBjYW5ub3QgeWllbGQgdG8gJyR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICl9JyBzaW5jZSBpdCB3YXMgbm90IHlldCBpbnZva2VkLmBcbiAgICApO1xufSk7XG5kZWxlZ2F0ZVRvQ2FsbHMoXG4gICAgc3B5QXBpLFxuICAgIFwieWllbGRUb09uXCIsXG4gICAgZmFsc2UsXG4gICAgXCJ5aWVsZFRvT25cIixcbiAgICB0cnVlLFxuICAgIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHt0aGlzLnRvU3RyaW5nKCl9IGNhbm5vdCB5aWVsZCB0byAnJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICApfScgc2luY2UgaXQgd2FzIG5vdCB5ZXQgaW52b2tlZC5gXG4gICAgICAgICk7XG4gICAgfVxuKTtcblxuZnVuY3Rpb24gY3JlYXRlU3B5KGZ1bmMpIHtcbiAgICB2YXIgbmFtZTtcbiAgICB2YXIgZnVuayA9IGZ1bmM7XG5cbiAgICBpZiAodHlwZW9mIGZ1bmsgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBmdW5rID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSBmdW5jdGlvbk5hbWUoZnVuayk7XG4gICAgfVxuXG4gICAgdmFyIHByb3h5ID0gY3JlYXRlUHJveHkoZnVuaywgZnVuayk7XG5cbiAgICAvLyBJbmhlcml0IHNweSBBUEk6XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHNweUFwaSk7XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUgfHwgXCJzcHlcIixcbiAgICAgICAgZmFrZXM6IFtdLFxuICAgICAgICBpbnN0YW50aWF0ZUZha2U6IGNyZWF0ZVNweSxcbiAgICAgICAgaWQ6IGBzcHkjJHt1dWlkKyt9YCxcbiAgICB9KTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIHNweShvYmplY3QsIHByb3BlcnR5LCB0eXBlcykge1xuICAgIHZhciBkZXNjcmlwdG9yLCBtZXRob2REZXNjO1xuXG4gICAgaWYgKGlzRXNNb2R1bGUob2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRVMgTW9kdWxlcyBjYW5ub3QgYmUgc3BpZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wZXJ0eSAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNweShvYmplY3QpO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydHkgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gd2Fsa09iamVjdChzcHksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKCFvYmplY3QgJiYgIXByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVTcHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXR5cGVzKSB7XG4gICAgICAgIHJldHVybiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIGNyZWF0ZVNweShvYmplY3RbcHJvcGVydHldKSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvciA9IHt9O1xuICAgIG1ldGhvZERlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7XG5cbiAgICBmb3JFYWNoKHR5cGVzLCBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBkZXNjcmlwdG9yW3R5cGVdID0gY3JlYXRlU3B5KG1ldGhvZERlc2NbdHlwZV0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdyYXBNZXRob2Qob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7XG59XG5cbmV4dGVuZChzcHksIHNweUFwaSk7XG5tb2R1bGUuZXhwb3J0cyA9IHNweTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyYXlQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXk7XG52YXIgYmVoYXZpb3IgPSByZXF1aXJlKFwiLi9iZWhhdmlvclwiKTtcbnZhciBiZWhhdmlvcnMgPSByZXF1aXJlKFwiLi9kZWZhdWx0LWJlaGF2aW9yc1wiKTtcbnZhciBjcmVhdGVQcm94eSA9IHJlcXVpcmUoXCIuL3Byb3h5XCIpO1xudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmZ1bmN0aW9uTmFtZTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9XG4gICAgcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaGFzT3duUHJvcGVydHk7XG52YXIgaXNOb25FeGlzdGVudFByb3BlcnR5ID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2lzLW5vbi1leGlzdGVudC1wcm9wZXJ0eVwiKTtcbnZhciBzcHkgPSByZXF1aXJlKFwiLi9zcHlcIik7XG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vdXRpbC9jb3JlL2V4dGVuZFwiKTtcbnZhciBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi91dGlsL2NvcmUvZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3JcIik7XG52YXIgaXNFc01vZHVsZSA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS9pcy1lcy1tb2R1bGVcIik7XG52YXIgd3JhcE1ldGhvZCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93cmFwLW1ldGhvZFwiKTtcbnZhciB0aHJvd09uRmFsc3lPYmplY3QgPSByZXF1aXJlKFwiLi90aHJvdy1vbi1mYWxzeS1vYmplY3RcIik7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG52YXIgd2Fsa09iamVjdCA9IHJlcXVpcmUoXCIuL3V0aWwvY29yZS93YWxrLW9iamVjdFwiKTtcblxudmFyIGZvckVhY2ggPSBhcnJheVByb3RvLmZvckVhY2g7XG52YXIgcG9wID0gYXJyYXlQcm90by5wb3A7XG52YXIgc2xpY2UgPSBhcnJheVByb3RvLnNsaWNlO1xudmFyIHNvcnQgPSBhcnJheVByb3RvLnNvcnQ7XG5cbnZhciB1dWlkID0gMDtcblxuZnVuY3Rpb24gY3JlYXRlU3R1YihvcmlnaW5hbEZ1bmMpIHtcbiAgICB2YXIgcHJveHk7XG5cbiAgICBmdW5jdGlvbiBmdW5jdGlvblN0dWIoKSB7XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UoYXJndW1lbnRzKTtcbiAgICAgICAgdmFyIG1hdGNoaW5ncyA9IHByb3h5Lm1hdGNoaW5nRmFrZXMoYXJncyk7XG5cbiAgICAgICAgdmFyIGZuU3R1YiA9XG4gICAgICAgICAgICBwb3AoXG4gICAgICAgICAgICAgICAgc29ydChtYXRjaGluZ3MsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhLm1hdGNoaW5nQXJndW1lbnRzLmxlbmd0aCAtIGIubWF0Y2hpbmdBcmd1bWVudHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgfHwgcHJveHk7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50QmVoYXZpb3IoZm5TdHViKS5pbnZva2UodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBwcm94eSA9IGNyZWF0ZVByb3h5KGZ1bmN0aW9uU3R1Yiwgb3JpZ2luYWxGdW5jIHx8IGZ1bmN0aW9uU3R1Yik7XG4gICAgLy8gSW5oZXJpdCBzcHkgQVBJOlxuICAgIGV4dGVuZC5ub25FbnVtKHByb3h5LCBzcHkpO1xuICAgIC8vIEluaGVyaXQgc3R1YiBBUEk6XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHN0dWIpO1xuXG4gICAgdmFyIG5hbWUgPSBvcmlnaW5hbEZ1bmMgPyBmdW5jdGlvbk5hbWUob3JpZ2luYWxGdW5jKSA6IG51bGw7XG4gICAgZXh0ZW5kLm5vbkVudW0ocHJveHksIHtcbiAgICAgICAgZmFrZXM6IFtdLFxuICAgICAgICBpbnN0YW50aWF0ZUZha2U6IGNyZWF0ZVN0dWIsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lIHx8IFwic3R1YlwiLFxuICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IG51bGwsXG4gICAgICAgIGJlaGF2aW9yczogW10sXG4gICAgICAgIGlkOiBgc3R1YiMke3V1aWQrK31gLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBzdHViKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIFwic3R1YihvYmosICdtZXRoJywgZm4pIGhhcyBiZWVuIHJlbW92ZWQsIHNlZSBkb2N1bWVudGF0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFc01vZHVsZShvYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFUyBNb2R1bGVzIGNhbm5vdCBiZSBzdHViYmVkXCIpO1xuICAgIH1cblxuICAgIHRocm93T25GYWxzeU9iamVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKGlzTm9uRXhpc3RlbnRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBzdHViIG5vbi1leGlzdGVudCBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcocHJvcGVydHkpfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgYWN0dWFsRGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcblxuICAgIGFzc2VydFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yKGFjdHVhbERlc2NyaXB0b3IsIHByb3BlcnR5KTtcblxuICAgIHZhciBpc09iamVjdE9yRnVuY3Rpb24gPVxuICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmplY3QgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB2YXIgaXNTdHViYmluZ0VudGlyZU9iamVjdCA9XG4gICAgICAgIHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBpc09iamVjdE9yRnVuY3Rpb247XG4gICAgdmFyIGlzQ3JlYXRpbmdOZXdTdHViID0gIW9iamVjdCAmJiB0eXBlb2YgcHJvcGVydHkgPT09IFwidW5kZWZpbmVkXCI7XG4gICAgdmFyIGlzU3R1YmJpbmdOb25GdW5jUHJvcGVydHkgPVxuICAgICAgICBpc09iamVjdE9yRnVuY3Rpb24gJiZcbiAgICAgICAgdHlwZW9mIHByb3BlcnR5ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0eXBlb2YgYWN0dWFsRGVzY3JpcHRvciA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGFjdHVhbERlc2NyaXB0b3IudmFsdWUgIT09IFwiZnVuY3Rpb25cIik7XG5cbiAgICBpZiAoaXNTdHViYmluZ0VudGlyZU9iamVjdCkge1xuICAgICAgICByZXR1cm4gd2Fsa09iamVjdChzdHViLCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmIChpc0NyZWF0aW5nTmV3U3R1Yikge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3R1YigpO1xuICAgIH1cblxuICAgIHZhciBmdW5jID1cbiAgICAgICAgdHlwZW9mIGFjdHVhbERlc2NyaXB0b3IudmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBhY3R1YWxEZXNjcmlwdG9yLnZhbHVlXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgdmFyIHMgPSBjcmVhdGVTdHViKGZ1bmMpO1xuXG4gICAgZXh0ZW5kLm5vbkVudW0ocywge1xuICAgICAgICByb290T2JqOiBvYmplY3QsXG4gICAgICAgIHByb3BOYW1lOiBwcm9wZXJ0eSxcbiAgICAgICAgc2hhZG93c1Byb3BPblByb3RvdHlwZTogIWFjdHVhbERlc2NyaXB0b3IuaXNPd24sXG4gICAgICAgIHJlc3RvcmU6IGZ1bmN0aW9uIHJlc3RvcmUoKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsRGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbERlc2NyaXB0b3IuaXNPd24pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgYWN0dWFsRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpc1N0dWJiaW5nTm9uRnVuY1Byb3BlcnR5ID8gcyA6IHdyYXBNZXRob2Qob2JqZWN0LCBwcm9wZXJ0eSwgcyk7XG59XG5cbnN0dWIuY3JlYXRlU3R1Ykluc3RhbmNlID0gZnVuY3Rpb24gKGNvbnN0cnVjdG9yLCBvdmVycmlkZXMpIHtcbiAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHN0dWJiZWRPYmplY3QgPSBzdHViKE9iamVjdC5jcmVhdGUoY29uc3RydWN0b3IucHJvdG90eXBlKSk7XG5cbiAgICBmb3JFYWNoKE9iamVjdC5rZXlzKG92ZXJyaWRlcyB8fCB7fSksIGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBzdHViYmVkT2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBvdmVycmlkZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jcmVhdGVTdHViSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHViYmVkT2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R1YmJlZE9iamVjdFtwcm9wZXJ0eU5hbWVdLnJldHVybnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDYW5ub3Qgc3R1YiAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IGRvZXMgbm90IGV4aXN0IWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3R1YmJlZE9iamVjdDtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yKGRlc2NyaXB0b3IsIHByb3BlcnR5KSB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8ICFwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGVzY3JpcHRvci5jb25maWd1cmFibGUgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBEZXNjcmlwdG9yIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBub24tY29uZmlndXJhYmxlIGFuZCBub24td3JpdGFibGVgXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICgoZGVzY3JpcHRvci5nZXQgfHwgZGVzY3JpcHRvci5zZXQpICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYERlc2NyaXB0b3IgZm9yIGFjY2Vzc29yIHByb3BlcnR5ICR7cHJvcGVydHl9IGlzIG5vbi1jb25maWd1cmFibGVgXG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRGVzY3JpcHRvciBmb3IgZGF0YSBwcm9wZXJ0eSAke3Byb3BlcnR5fSBpcyBub24td3JpdGFibGVgXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhZGVzY3JpcHRvci52YWx1ZSAmJlxuICAgICAgICAhZGVzY3JpcHRvci53cml0YWJsZSAmJlxuICAgICAgICAhZGVzY3JpcHRvci5zZXQgJiZcbiAgICAgICAgIWRlc2NyaXB0b3IuZ2V0XG4gICAgKTtcbn1cblxuLyplc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5mdW5jdGlvbiBnZXRQYXJlbnRCZWhhdmlvdXIoc3R1Ykluc3RhbmNlKSB7XG4gICAgcmV0dXJuIHN0dWJJbnN0YW5jZS5wYXJlbnQgJiYgZ2V0Q3VycmVudEJlaGF2aW9yKHN0dWJJbnN0YW5jZS5wYXJlbnQpO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QmVoYXZpb3Ioc3R1Ykluc3RhbmNlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgc3R1Ykluc3RhbmNlLmRlZmF1bHRCZWhhdmlvciB8fFxuICAgICAgICBnZXRQYXJlbnRCZWhhdmlvdXIoc3R1Ykluc3RhbmNlKSB8fFxuICAgICAgICBiZWhhdmlvci5jcmVhdGUoc3R1Ykluc3RhbmNlKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRCZWhhdmlvcihzdHViSW5zdGFuY2UpIHtcbiAgICB2YXIgY3VycmVudEJlaGF2aW9yID0gc3R1Ykluc3RhbmNlLmJlaGF2aW9yc1tzdHViSW5zdGFuY2UuY2FsbENvdW50IC0gMV07XG4gICAgcmV0dXJuIGN1cnJlbnRCZWhhdmlvciAmJiBjdXJyZW50QmVoYXZpb3IuaXNQcmVzZW50KClcbiAgICAgICAgPyBjdXJyZW50QmVoYXZpb3JcbiAgICAgICAgOiBnZXREZWZhdWx0QmVoYXZpb3Ioc3R1Ykluc3RhbmNlKTtcbn1cbi8qZXNsaW50LWVuYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSovXG5cbnZhciBwcm90byA9IHtcbiAgICByZXNldEJlaGF2aW9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5iZWhhdmlvcnMgPSBbXTtcblxuICAgICAgICBkZWxldGUgdGhpcy5yZXR1cm5WYWx1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMucmV0dXJuQXJnQXQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRocm93QXJnQXQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJlc29sdmVBcmdBdDtcbiAgICAgICAgZGVsZXRlIHRoaXMuZmFrZUZuO1xuICAgICAgICB0aGlzLnJldHVyblRoaXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvbHZlVGhpcyA9IGZhbHNlO1xuXG4gICAgICAgIGZvckVhY2godGhpcy5mYWtlcywgZnVuY3Rpb24gKGZha2UpIHtcbiAgICAgICAgICAgIGZha2UucmVzZXRCZWhhdmlvcigpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZXNldEhpc3RvcnkoKTtcbiAgICAgICAgdGhpcy5yZXNldEJlaGF2aW9yKCk7XG4gICAgfSxcblxuICAgIG9uQ2FsbDogZnVuY3Rpb24gb25DYWxsKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5iZWhhdmlvcnNbaW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLmJlaGF2aW9yc1tpbmRleF0gPSBiZWhhdmlvci5jcmVhdGUodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5iZWhhdmlvcnNbaW5kZXhdO1xuICAgIH0sXG5cbiAgICBvbkZpcnN0Q2FsbDogZnVuY3Rpb24gb25GaXJzdENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uQ2FsbCgwKTtcbiAgICB9LFxuXG4gICAgb25TZWNvbmRDYWxsOiBmdW5jdGlvbiBvblNlY29uZENhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uQ2FsbCgxKTtcbiAgICB9LFxuXG4gICAgb25UaGlyZENhbGw6IGZ1bmN0aW9uIG9uVGhpcmRDYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbkNhbGwoMik7XG4gICAgfSxcblxuICAgIHdpdGhBcmdzOiBmdW5jdGlvbiB3aXRoQXJncygpIHtcbiAgICAgICAgdmFyIGZha2UgPSBzcHkud2l0aEFyZ3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEJlaGF2aW9yICYmIHRoaXMuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5KSB7XG4gICAgICAgICAgICBmYWtlLmRlZmF1bHRCZWhhdmlvciA9XG4gICAgICAgICAgICAgICAgZmFrZS5kZWZhdWx0QmVoYXZpb3IgfHwgYmVoYXZpb3IuY3JlYXRlKGZha2UpO1xuICAgICAgICAgICAgZmFrZS5kZWZhdWx0QmVoYXZpb3IucHJvbWlzZUxpYnJhcnkgPVxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yLnByb21pc2VMaWJyYXJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWtlO1xuICAgIH0sXG59O1xuXG5mb3JFYWNoKE9iamVjdC5rZXlzKGJlaGF2aW9yKSwgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIGlmIChcbiAgICAgICAgaGFzT3duUHJvcGVydHkoYmVoYXZpb3IsIG1ldGhvZCkgJiZcbiAgICAgICAgIWhhc093blByb3BlcnR5KHByb3RvLCBtZXRob2QpICYmXG4gICAgICAgIG1ldGhvZCAhPT0gXCJjcmVhdGVcIiAmJlxuICAgICAgICBtZXRob2QgIT09IFwiaW52b2tlXCJcbiAgICApIHtcbiAgICAgICAgcHJvdG9bbWV0aG9kXSA9IGJlaGF2aW9yLmNyZWF0ZUJlaGF2aW9yKG1ldGhvZCk7XG4gICAgfVxufSk7XG5cbmZvckVhY2goT2JqZWN0LmtleXMoYmVoYXZpb3JzKSwgZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiZWhhdmlvcnMsIG1ldGhvZCkgJiYgIWhhc093blByb3BlcnR5KHByb3RvLCBtZXRob2QpKSB7XG4gICAgICAgIGJlaGF2aW9yLmFkZEJlaGF2aW9yKHN0dWIsIG1ldGhvZCwgYmVoYXZpb3JzW21ldGhvZF0pO1xuICAgIH1cbn0pO1xuXG5leHRlbmQoc3R1YiwgcHJvdG8pO1xubW9kdWxlLmV4cG9ydHMgPSBzdHViO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRocm93T25GYWxzeU9iamVjdChvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgaWYgKHByb3BlcnR5ICYmICFvYmplY3QpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QgPT09IG51bGwgPyBcIm51bGxcIiA6IFwidW5kZWZpbmVkXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUcnlpbmcgdG8gc3R1YiBwcm9wZXJ0eSAnJHt2YWx1ZVRvU3RyaW5nKHByb3BlcnR5KX0nIG9mICR7dHlwZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm93T25GYWxzeU9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpbmplY3RJbnRvOiBudWxsLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgXCJzcHlcIixcbiAgICAgICAgXCJzdHViXCIsXG4gICAgICAgIFwibW9ja1wiLFxuICAgICAgICBcImNsb2NrXCIsXG4gICAgICAgIFwic2VydmVyXCIsXG4gICAgICAgIFwicmVxdWVzdHNcIixcbiAgICAgICAgXCJmYWtlXCIsXG4gICAgICAgIFwicmVwbGFjZVwiLFxuICAgICAgICBcInJlcGxhY2VTZXR0ZXJcIixcbiAgICAgICAgXCJyZXBsYWNlR2V0dGVyXCIsXG4gICAgICAgIFwiY3JlYXRlU3R1Ykluc3RhbmNlXCIsXG4gICAgXSxcbiAgICB1c2VGYWtlVGltZXJzOiB0cnVlLFxuICAgIHVzZUZha2VTZXJ2ZXI6IHRydWUsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciByZWR1Y2UgPSBhcnJheVByb3RvLnJlZHVjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHBvcnRBc3luY0JlaGF2aW9ycyhiZWhhdmlvck1ldGhvZHMpIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgICBPYmplY3Qua2V5cyhiZWhhdmlvck1ldGhvZHMpLFxuICAgICAgICBmdW5jdGlvbiAoYWNjLCBtZXRob2QpIHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gYXZvaWQgY3JlYXRpbmcgYW5vdGhlciBhc3luYyB2ZXJzaW9ucyBvZiB0aGUgbmV3bHkgYWRkZWQgYXN5bmMgbWV0aG9kc1xuICAgICAgICAgICAgaWYgKG1ldGhvZC5tYXRjaCgvXihjYWxsc0FyZ3x5aWVsZHMpLykgJiYgIW1ldGhvZC5tYXRjaCgvQXN5bmMvKSkge1xuICAgICAgICAgICAgICAgIGFjY1tgJHttZXRob2R9QXN5bmNgXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJlaGF2aW9yTWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBc3luYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5O1xudmFyIGhhc093blByb3BlcnR5ID1cbiAgICByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGpvaW4gPSBhcnJheVByb3RvLmpvaW47XG52YXIgcHVzaCA9IGFycmF5UHJvdG8ucHVzaDtcblxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvRUNNQVNjcmlwdF9Eb250RW51bV9hdHRyaWJ1dGUjSlNjcmlwdF9Eb250RW51bV9CdWdcbnZhciBoYXNEb250RW51bUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjBcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjFcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMlwiO1xuICAgICAgICB9LFxuICAgICAgICB0b0xvY2FsZVN0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiM1wiO1xuICAgICAgICB9LFxuICAgICAgICBwcm90b3R5cGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjRcIjtcbiAgICAgICAgfSxcbiAgICAgICAgaXNQcm90b3R5cGVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiNVwiO1xuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiNlwiO1xuICAgICAgICB9LFxuICAgICAgICBoYXNPd25Qcm9wZXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiN1wiO1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjhcIjtcbiAgICAgICAgfSxcbiAgICAgICAgdW5pcXVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCI5XCI7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSkge1xuICAgICAgICAgICAgcHVzaChyZXN1bHQsIG9ialtwcm9wXSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gam9pbihyZXN1bHQsIFwiXCIpICE9PSBcIjAxMjM0NTY3ODlcIjtcbn0pKCk7XG5cbmZ1bmN0aW9uIGV4dGVuZENvbW1vbih0YXJnZXQsIHNvdXJjZXMsIGRvQ29weSkge1xuICAgIHZhciBzb3VyY2UsIGksIHByb3A7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2VzW2ldO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShzb3VyY2UsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgZG9Db3B5KHRhcmdldCwgc291cmNlLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjb3B5IChvd24pIHRvU3RyaW5nIG1ldGhvZCBldmVuIHdoZW4gaW4gSlNjcmlwdCB3aXRoIERvbnRFbnVtIGJ1Z1xuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9FQ01BU2NyaXB0X0RvbnRFbnVtX2F0dHJpYnV0ZSNKU2NyaXB0X0RvbnRFbnVtX0J1Z1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYXNEb250RW51bUJ1ZyAmJlxuICAgICAgICAgICAgaGFzT3duUHJvcGVydHkoc291cmNlLCBcInRvU3RyaW5nXCIpICYmXG4gICAgICAgICAgICBzb3VyY2UudG9TdHJpbmcgIT09IHRhcmdldC50b1N0cmluZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldC50b1N0cmluZyA9IHNvdXJjZS50b1N0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKiBQdWJsaWM6IEV4dGVuZCB0YXJnZXQgaW4gcGxhY2Ugd2l0aCBhbGwgKG93bikgcHJvcGVydGllcywgZXhjZXB0ICduYW1lJyB3aGVuIFtbd3JpdGFibGVdXSBpcyBmYWxzZSxcbiAqICAgICAgICAgZnJvbSBzb3VyY2VzIGluLW9yZGVyLiBUaHVzLCBsYXN0IHNvdXJjZSB3aWxsIG92ZXJyaWRlIHByb3BlcnRpZXMgaW4gcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IC0gVGhlIE9iamVjdCB0byBleHRlbmRcbiAqIEBwYXJhbSB7b2JqZWN0W119IHNvdXJjZXMgLSBPYmplY3RzIHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBleHRlbmRlZCB0YXJnZXRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQodGFyZ2V0LCAuLi5zb3VyY2VzKSB7XG4gICAgcmV0dXJuIGV4dGVuZENvbW1vbihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBmdW5jdGlvbiBjb3B5VmFsdWUoZGVzdCwgc291cmNlLCBwcm9wKSB7XG4gICAgICAgICAgICB2YXIgZGVzdE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgZGVzdCxcbiAgICAgICAgICAgICAgICBwcm9wXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIHNvdXJjZU93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcIm5hbWVcIiAmJiAhZGVzdE93blByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0ge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogc291cmNlT3duUHJvcGVydHlEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIGlmIHRoZSBzb3JjZSBoYXMgYW4gQWNjZXNzb3IgcHJvcGVydHkgY29weSBvdmVyIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgKGdldCBhbmQgc2V0KVxuICAgICAgICAgICAgICAgIGRhdGEgcHJvcGVydGllcyBoYXMgd3JpdGFibGUgYXR0cmlidXRlIHdoZXJlIGFzIGFjY2Vzc29yIHByb3BlcnR5IGRvbid0XG4gICAgICAgICAgICAgICAgUkVGOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L0RhdGFfc3RydWN0dXJlcyNwcm9wZXJ0aWVzXG4gICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlT3duUHJvcGVydHlEZXNjcmlwdG9yLCBcIndyaXRhYmxlXCIpKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMud3JpdGFibGUgPSBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMudmFsdWUgPSBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IudmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLmdldCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0LmJpbmQoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLnNldCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2V0LmJpbmQoZGVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlc3QsIHByb3AsIGRlc2NyaXB0b3JzKTtcbiAgICAgICAgfVxuICAgICk7XG59O1xuXG4vKiogUHVibGljOiBFeHRlbmQgdGFyZ2V0IGluIHBsYWNlIHdpdGggYWxsIChvd24pIHByb3BlcnRpZXMgZnJvbSBzb3VyY2VzIGluLW9yZGVyLiBUaHVzLCBsYXN0IHNvdXJjZSB3aWxsXG4gKiAgICAgICAgIG92ZXJyaWRlIHByb3BlcnRpZXMgaW4gcHJldmlvdXMgc291cmNlcy4gRGVmaW5lIHRoZSBwcm9wZXJ0aWVzIGFzIG5vbiBlbnVtZXJhYmxlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgLSBUaGUgT2JqZWN0IHRvIGV4dGVuZFxuICogQHBhcmFtIHtvYmplY3RbXX0gc291cmNlcyAtIE9iamVjdHMgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gKlxuICogQHJldHVybnMge29iamVjdH0gdGhlIGV4dGVuZGVkIHRhcmdldFxuICovXG5tb2R1bGUuZXhwb3J0cy5ub25FbnVtID0gZnVuY3Rpb24gZXh0ZW5kTm9uRW51bSh0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICByZXR1cm4gZXh0ZW5kQ29tbW9uKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0eShkZXN0LCBzb3VyY2UsIHByb3ApIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZXN0LCBwcm9wLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZVtwcm9wXSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZShcInV0aWxcIikuaW5zcGVjdDtcbnZhciBjdXN0b21Gb3JtYXR0ZXI7XG5cbmZ1bmN0aW9uIGZvcm1hdCgpIHtcbiAgICBpZiAoY3VzdG9tRm9ybWF0dGVyKSB7XG4gICAgICAgIHJldHVybiBjdXN0b21Gb3JtYXR0ZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zcGVjdC5hcHBseShpbnNwZWN0LCBhcmd1bWVudHMpO1xufVxuXG5mb3JtYXQuc2V0Rm9ybWF0dGVyID0gZnVuY3Rpb24gKGFDdXN0b21Gb3JtYXR0ZXIpIHtcbiAgICBpZiAodHlwZW9mIGFDdXN0b21Gb3JtYXR0ZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtYXQuc2V0Rm9ybWF0dGVyIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBjdXN0b21Gb3JtYXR0ZXIgPSBhQ3VzdG9tRm9ybWF0dGVyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtYXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgaSwgcHJvcCwgdGhpc1ZhbHVlO1xuICAgIGlmICh0aGlzLmdldENhbGwgJiYgdGhpcy5jYWxsQ291bnQpIHtcbiAgICAgICAgaSA9IHRoaXMuY2FsbENvdW50O1xuXG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHRoaXNWYWx1ZSA9IHRoaXMuZ2V0Q2FsbChpKS50aGlzVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgICAgIGZvciAocHJvcCBpbiB0aGlzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc1ZhbHVlW3Byb3BdID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8tb3AgLSBhY2Nlc3NpbmcgcHJvcHMgY2FuIHRocm93IGFuIGVycm9yLCBub3RoaW5nIHRvIGRvIGhlcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZSB8fCBcInNpbm9uIGZha2VcIjtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgOiBub3QgdGVzdGluZyB0aGF0IHNldFRpbWVvdXQgd29ya3MgKi9cbmZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrKSB7XG4gICAgc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TmV4dFRpY2socHJvY2Vzcywgc2V0SW1tZWRpYXRlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2s7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VGljaztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcm90byA9IG9iamVjdDtcbiAgICB2YXIgZGVzY3JpcHRvcjtcbiAgICB2YXIgaXNPd24gPSBCb29sZWFuKFxuICAgICAgICBvYmplY3QgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KVxuICAgICk7XG5cbiAgICB3aGlsZSAoXG4gICAgICAgIHByb3RvICYmXG4gICAgICAgICEoZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3BlcnR5KSlcbiAgICApIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuaXNPd24gPSBpc093bjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBWZXJpZnkgaWYgYW4gb2JqZWN0IGlzIGEgRUNNQVNjcmlwdCBNb2R1bGVcbiAqXG4gKiBBcyB0aGUgZXhwb3J0cyBmcm9tIGEgbW9kdWxlIGlzIGltbXV0YWJsZSB3ZSBjYW5ub3QgYWx0ZXIgdGhlIGV4cG9ydHNcbiAqIHVzaW5nIHNwaWVzIG9yIHN0dWJzLiBMZXQgdGhlIGNvbnN1bWVyIGtub3cgdGhpcyB0byBhdm9pZCBidWcgcmVwb3J0c1xuICogb24gd2VpcmQgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHRoZSBvYmplY3QgaXMgYSBtb2R1bGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgb2JqZWN0ICYmXG4gICAgICAgIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IFwiTW9kdWxlXCIgJiZcbiAgICAgICAgT2JqZWN0LmlzU2VhbGVkKG9iamVjdClcbiAgICApO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIGEgcHJvcCBleGlzdHMgaW4gdGhlIHByb3RvdHlwZSBjaGFpblxuICovXG5mdW5jdGlvbiBpc05vbkV4aXN0ZW50UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgICBvYmplY3QgJiYgdHlwZW9mIHByb3BlcnR5ICE9PSBcInVuZGVmaW5lZFwiICYmICEocHJvcGVydHkgaW4gb2JqZWN0KVxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOb25FeGlzdGVudFByb3BlcnR5O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcblxuZnVuY3Rpb24gaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmosIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BOYW1lKTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3IgPyBwcm9wZXJ0eURlc2NyaXB0b3IuY29uZmlndXJhYmxlIDogdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3BlcnR5Q29uZmlndXJhYmxlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGlzUmVzdG9yYWJsZShvYmopIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIG9iai5yZXN0b3JlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgb2JqLnJlc3RvcmUuc2lub25cbiAgICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUmVzdG9yYWJsZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xudmFyIGdldE5leHRUaWNrID0gcmVxdWlyZShcIi4vZ2V0LW5leHQtdGlja1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0VGljayhnbG9iYWxPYmplY3QucHJvY2VzcywgZ2xvYmFsT2JqZWN0LnNldEltbWVkaWF0ZSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGFycmF5ID0gW251bGwsIFwib25jZVwiLCBcInR3aWNlXCIsIFwidGhyaWNlXCJdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRpbWVzSW5Xb3Jkcyhjb3VudCkge1xuICAgIHJldHVybiBhcnJheVtjb3VudF0gfHwgYCR7Y291bnQgfHwgMH0gdGltZXNgO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG5mdW5jdGlvbiB1c2VQcm9taXNlTGlicmFyeShsaWJyYXJ5LCBmYWtlcykge1xuICAgIGlmICh0eXBlb2YgbGlicmFyeSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmFrZXMpKSB7XG4gICAgICAgIGZvckVhY2guY2FsbChmYWtlcywgdXNlUHJvbWlzZUxpYnJhcnkuYmluZChudWxsLCBsaWJyYXJ5KSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFrZXMudXNpbmdQcm9taXNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZmFrZXMudXNpbmdQcm9taXNlKGxpYnJhcnkpO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1c2VQcm9taXNlTGlicmFyeTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xuXG52YXIgZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZShcIi4vZ2V0LXByb3BlcnR5LWRlc2NyaXB0b3JcIik7XG52YXIgd2FsayA9IHJlcXVpcmUoXCIuL3dhbGtcIik7XG5cbmZ1bmN0aW9uIHdhbGtPYmplY3QocHJlZGljYXRlLCBvYmplY3QsIGZpbHRlcikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgbmFtZSA9IGZ1bmN0aW9uTmFtZShwcmVkaWNhdGUpO1xuXG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRyeWluZyB0byAke25hbWV9IG9iamVjdCBidXQgcmVjZWl2ZWQgJHtTdHJpbmcob2JqZWN0KX1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgd2FsayhvYmplY3QsIGZ1bmN0aW9uIChwcm9wLCBwcm9wT3duZXIpIHtcbiAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBzdHViIHRoaW5ncyBsaWtlIHRvU3RyaW5nKCksIHZhbHVlT2YoKSwgZXRjLiBzbyB3ZSBvbmx5IHN0dWIgaWYgdGhlIG9iamVjdFxuICAgICAgICAvLyBpcyBub3QgT2JqZWN0LnByb3RvdHlwZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wT3duZXIgIT09IE9iamVjdC5wcm90b3R5cGUgJiZcbiAgICAgICAgICAgIHByb3AgIT09IFwiY29uc3RydWN0b3JcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIGdldFByb3BlcnR5RGVzY3JpcHRvcihwcm9wT3duZXIsIHByb3ApLnZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcihvYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZShvYmplY3QsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcmVkaWNhdGUob2JqZWN0LCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byAke25hbWV9IG1ldGhvZHMgb24gb2JqZWN0IGJ1dCBmb3VuZCBub25lYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YWxrT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5mb3JFYWNoO1xuXG5mdW5jdGlvbiB3YWxrSW50ZXJuYWwob2JqLCBpdGVyYXRvciwgY29udGV4dCwgb3JpZ2luYWxPYmosIHNlZW4pIHtcbiAgICB2YXIgcHJvdG8sIHByb3A7XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGVudW1lcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcHJvdG90eXBlJ3MgcHJvcGVydGllc1xuICAgICAgICAvLyBpbiB0aGlzIGNhc2UsIHRoZXJlZm9yZSB3ZSBkZWxpYmVyYXRlbHkgbGVhdmUgb3V0IGFuIG93biBwcm9wZXJ0eSBjaGVjay5cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiAqL1xuICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtwcm9wXSwgcHJvcCwgb2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JFYWNoKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaiksIGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChzZWVuW2tdICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBzZWVuW2tdID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgaykuZ2V0ID09PVxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbmFsT2JqXG4gICAgICAgICAgICAgICAgICAgIDogb2JqO1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBrLCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgIGlmIChwcm90bykge1xuICAgICAgICB3YWxrSW50ZXJuYWwocHJvdG8sIGl0ZXJhdG9yLCBjb250ZXh0LCBvcmlnaW5hbE9iaiwgc2Vlbik7XG4gICAgfVxufVxuXG4vKiBXYWxrcyB0aGUgcHJvdG90eXBlIGNoYWluIG9mIGFuIG9iamVjdCBhbmQgaXRlcmF0ZXMgb3ZlciBldmVyeSBvd24gcHJvcGVydHlcbiAqIG5hbWUgZW5jb3VudGVyZWQuIFRoZSBpdGVyYXRvciBpcyBjYWxsZWQgaW4gdGhlIHNhbWUgZmFzaGlvbiB0aGF0IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoXG4gKiB3b3Jrcywgd2hlcmUgaXQgaXMgcGFzc2VkIHRoZSB2YWx1ZSwga2V5LCBhbmQgb3duIG9iamVjdCBhcyB0aGUgMXN0LCAybmQsIGFuZCAzcmQgcG9zaXRpb25hbFxuICogYXJndW1lbnQsIHJlc3BlY3RpdmVseS4gSW4gY2FzZXMgd2hlcmUgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgaXMgbm90IGF2YWlsYWJsZSwgd2FsayB3aWxsXG4gKiBkZWZhdWx0IHRvIHVzaW5nIGEgc2ltcGxlIGZvci4uaW4gbG9vcC5cbiAqXG4gKiBvYmogLSBUaGUgb2JqZWN0IHRvIHdhbGsgdGhlIHByb3RvdHlwZSBjaGFpbiBmb3IuXG4gKiBpdGVyYXRvciAtIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCBwYXNzIG9mIHRoZSB3YWxrLlxuICogY29udGV4dCAtIChPcHRpb25hbCkgV2hlbiBnaXZlbiwgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhpcyBvYmplY3QgYXMgdGhlIHJlY2VpdmVyLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdhbGsob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHJldHVybiB3YWxrSW50ZXJuYWwob2JqLCBpdGVyYXRvciwgY29udGV4dCwgb2JqLCB7fSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBnZXRQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKFwiLi9nZXQtcHJvcGVydHktZGVzY3JpcHRvclwiKTtcbnZhciBleHRlbmQgPSByZXF1aXJlKFwiLi9leHRlbmRcIik7XG52YXIgaGFzT3duUHJvcGVydHkgPVxuICAgIHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0Lmhhc093blByb3BlcnR5O1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xudmFyIHB1c2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LnB1c2g7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgIEJvb2xlYW4ob2JqICYmIG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY2FsbCAmJiBvYmouYXBwbHkpXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gbWlycm9yUHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkodGFyZ2V0LCBwcm9wKSkge1xuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY2Nlc3NvcihvYmplY3QsIHByb3BlcnR5LCBtZXRob2QpIHtcbiAgICB2YXIgYWNjZXNzb3JzID0gW1wiZ2V0XCIsIFwic2V0XCJdO1xuICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGVzY3JpcHRvclthY2Nlc3NvcnNbaV1dICYmXG4gICAgICAgICAgICBkZXNjcmlwdG9yW2FjY2Vzc29yc1tpXV0ubmFtZSA9PT0gbWV0aG9kLm5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzb3JzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyBDaGVhcCB3YXkgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgRVM1IHN1cHBvcnQuXG52YXIgaGFzRVM1U3VwcG9ydCA9IFwia2V5c1wiIGluIE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3cmFwTWV0aG9kKG9iamVjdCwgcHJvcGVydHksIG1ldGhvZCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTaG91bGQgd3JhcCBwcm9wZXJ0eSBvZiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgbWV0aG9kICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBcIk1ldGhvZCB3cmFwcGVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGEgcHJvcGVydHkgZGVzY3JpcHRvclwiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXcmFwcGVkTWV0aG9kKHdyYXBwZWRNZXRob2QpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuXG4gICAgICAgIGlmICghaXNGdW5jdGlvbih3cmFwcGVkTWV0aG9kKSkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gd3JhcCAke3R5cGVvZiB3cmFwcGVkTWV0aG9kfSBwcm9wZXJ0eSAke3ZhbHVlVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgKX0gYXMgZnVuY3Rpb25gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHdyYXBwZWRNZXRob2QucmVzdG9yZSAmJiB3cmFwcGVkTWV0aG9kLnJlc3RvcmUuc2lub24pIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHt2YWx1ZVRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgICl9IHdoaWNoIGlzIGFscmVhZHkgd3JhcHBlZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAod3JhcHBlZE1ldGhvZC5jYWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICAgIHZhciB2ZXJiID0gd3JhcHBlZE1ldGhvZC5yZXR1cm5zID8gXCJzdHViYmVkXCIgOiBcInNwaWVkIG9uXCI7XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byB3cmFwICR7dmFsdWVUb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgICAgICApfSB3aGljaCBpcyBhbHJlYWR5ICR7dmVyYn1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAod3JhcHBlZE1ldGhvZCAmJiB3cmFwcGVkTWV0aG9kLnN0YWNrVHJhY2VFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrICs9IGBcXG4tLS0tLS0tLS0tLS0tLVxcbiR7d3JhcHBlZE1ldGhvZC5zdGFja1RyYWNlRXJyb3Iuc3RhY2t9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVycm9yLFxuICAgICAgICB3cmFwcGVkTWV0aG9kcyxcbiAgICAgICAgd3JhcHBlZE1ldGhvZCxcbiAgICAgICAgaSxcbiAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgYWNjZXNzb3I7XG5cbiAgICB3cmFwcGVkTWV0aG9kcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2ltcGxlUHJvcGVydHlBc3NpZ25tZW50KCkge1xuICAgICAgICB3cmFwcGVkTWV0aG9kID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgY2hlY2tXcmFwcGVkTWV0aG9kKHdyYXBwZWRNZXRob2QpO1xuICAgICAgICBvYmplY3RbcHJvcGVydHldID0gbWV0aG9kO1xuICAgICAgICBtZXRob2QuZGlzcGxheU5hbWUgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvLyBGaXJlZm94IGhhcyBhIHByb2JsZW0gd2hlbiB1c2luZyBoYXNPd24uY2FsbCBvbiBvYmplY3RzIGZyb20gb3RoZXIgZnJhbWVzLlxuICAgIHZhciBvd25lZCA9IG9iamVjdC5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICA/IG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICA6IGhhc093blByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgdmFyIG1ldGhvZERlc2MgPVxuICAgICAgICAgICAgdHlwZW9mIG1ldGhvZCA9PT0gXCJmdW5jdGlvblwiID8geyB2YWx1ZTogbWV0aG9kIH0gOiBtZXRob2Q7XG4gICAgICAgIHdyYXBwZWRNZXRob2REZXNjID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuXG4gICAgICAgIGlmICghd3JhcHBlZE1ldGhvZERlc2MpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHt0eXBlb2Ygd3JhcHBlZE1ldGhvZH0gcHJvcGVydHkgJHtwcm9wZXJ0eX0gYXMgZnVuY3Rpb25gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MucmVzdG9yZSAmJlxuICAgICAgICAgICAgd3JhcHBlZE1ldGhvZERlc2MucmVzdG9yZS5zaW5vblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHdyYXAgJHtwcm9wZXJ0eX0gd2hpY2ggaXMgYWxyZWFkeSB3cmFwcGVkYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh3cmFwcGVkTWV0aG9kRGVzYyAmJiB3cmFwcGVkTWV0aG9kRGVzYy5zdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5zdGFjayArPSBgXFxuLS0tLS0tLS0tLS0tLS1cXG4ke3dyYXBwZWRNZXRob2REZXNjLnN0YWNrVHJhY2VFcnJvci5zdGFja31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHlwZXMgPSBPYmplY3Qua2V5cyhtZXRob2REZXNjKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB3cmFwcGVkTWV0aG9kID0gd3JhcHBlZE1ldGhvZERlc2NbdHlwZXNbaV1dO1xuICAgICAgICAgICAgY2hlY2tXcmFwcGVkTWV0aG9kKHdyYXBwZWRNZXRob2QpO1xuICAgICAgICAgICAgcHVzaCh3cmFwcGVkTWV0aG9kcywgd3JhcHBlZE1ldGhvZCk7XG4gICAgICAgIH1cblxuICAgICAgICBtaXJyb3JQcm9wZXJ0aWVzKG1ldGhvZERlc2MsIHdyYXBwZWRNZXRob2REZXNjKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtaXJyb3JQcm9wZXJ0aWVzKG1ldGhvZERlc2NbdHlwZXNbaV1dLCB3cmFwcGVkTWV0aG9kRGVzY1t0eXBlc1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBtZXRob2REZXNjKTtcblxuICAgICAgICAvLyBjYXRjaCBmYWlsaW5nIGFzc2lnbm1lbnRcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY29udmVyc2Ugb2YgdGhlIGNoZWNrIGluIGAucmVzdG9yZWAgYmVsb3dcbiAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RbcHJvcGVydHldICE9PSBtZXRob2QpIHtcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgYW55IHdyb25nZG9pbmdzIGNhdXNlZCBieSB0aGUgZGVmaW5lUHJvcGVydHkgY2FsbCBhYm92ZSxcbiAgICAgICAgICAgIC8vIHN1Y2ggYXMgYWRkaW5nIG5ldyBpdGVtcyAoaWYgb2JqZWN0IHdhcyBhIFN0b3JhZ2Ugb2JqZWN0KVxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgICBzaW1wbGVQcm9wZXJ0eUFzc2lnbm1lbnQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHNpbXBsZVByb3BlcnR5QXNzaWdubWVudCgpO1xuICAgIH1cblxuICAgIGV4dGVuZE9iamVjdFdpdGhXcmFwcGVkTWV0aG9kcygpO1xuXG4gICAgZnVuY3Rpb24gZXh0ZW5kT2JqZWN0V2l0aFdyYXBwZWRNZXRob2RzKCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd3JhcHBlZE1ldGhvZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFjY2Vzc29yID0gZ2V0QWNjZXNzb3Iob2JqZWN0LCBwcm9wZXJ0eSwgd3JhcHBlZE1ldGhvZHNbaV0pO1xuICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IgPyBtZXRob2RbYWNjZXNzb3JdIDogbWV0aG9kO1xuICAgICAgICAgICAgZXh0ZW5kLm5vbkVudW0odGFyZ2V0LCB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHByb3BlcnR5LFxuICAgICAgICAgICAgICAgIHdyYXBwZWRNZXRob2Q6IHdyYXBwZWRNZXRob2RzW2ldLFxuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHVwIGFuIEVycm9yIG9iamVjdCBmb3IgYSBzdGFjayB0cmFjZSB3aGljaCBjYW4gYmUgdXNlZCBsYXRlciB0byBmaW5kIHdoYXQgbGluZSBvZlxuICAgICAgICAgICAgICAgIC8vIGNvZGUgdGhlIG9yaWdpbmFsIG1ldGhvZCB3YXMgY3JlYXRlZCBvbi5cbiAgICAgICAgICAgICAgICBzdGFja1RyYWNlRXJyb3I6IG5ldyBFcnJvcihcIlN0YWNrIFRyYWNlIGZvciBvcmlnaW5hbFwiKSxcblxuICAgICAgICAgICAgICAgIHJlc3RvcmU6IHJlc3RvcmUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGFyZ2V0LnJlc3RvcmUuc2lub24gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgbWlycm9yUHJvcGVydGllcyh0YXJnZXQsIHdyYXBwZWRNZXRob2QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgYWNjZXNzb3IgPSBnZXRBY2Nlc3NvcihvYmplY3QsIHByb3BlcnR5LCB0aGlzLndyYXBwZWRNZXRob2QpO1xuICAgICAgICB2YXIgZGVzY3JpcHRvcjtcbiAgICAgICAgLy8gRm9yIHByb3RvdHlwZSBwcm9wZXJ0aWVzIHRyeSB0byByZXNldCBieSBkZWxldGUgZmlyc3QuXG4gICAgICAgIC8vIElmIHRoaXMgZmFpbHMgKGV4OiBsb2NhbFN0b3JhZ2Ugb24gbW9iaWxlIHNhZmFyaSkgdGhlbiBmb3JjZSBhIHJlc2V0XG4gICAgICAgIC8vIHZpYSBkaXJlY3QgYXNzaWdubWVudC5cbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgICBpZiAoIW93bmVkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gc29tZSBjYXNlcyBgZGVsZXRlYCBtYXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV1bYWNjZXNzb3JdO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgICAgICAgICAvLyBGb3IgbmF0aXZlIGNvZGUgZnVuY3Rpb25zIGBkZWxldGVgIGZhaWxzIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgICAgICAgICAgICAvLyBvbiBDaHJvbWUgPCA0MywgUGhhbnRvbUpTLCBldGMuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JbYWNjZXNzb3JdID0gd3JhcHBlZE1ldGhvZERlc2NbYWNjZXNzb3JdO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc0VTNVN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0gZ2V0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWUgPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldW2FjY2Vzc29yXSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbiB0byBjaGVjayBmYWlsdXJlcyB0aGVuIGZvcmNlIGEgcmVzZXRcbiAgICAgICAgICAgICAgICAvLyB2aWEgZGlyZWN0IGFzc2lnbm1lbnQuXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdFtwcm9wZXJ0eV1bYWNjZXNzb3JdID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XVthY2Nlc3Nvcl0gPSB0aGlzLndyYXBwZWRNZXRob2Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFvd25lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRVM1U3VwcG9ydCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB3cmFwcGVkTWV0aG9kRGVzYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNFUzVTdXBwb3J0KSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHRoaXMud3JhcHBlZE1ldGhvZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0aG9kO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZXh0ZW5kID0gcmVxdWlyZShcIi4vY29yZS9leHRlbmRcIik7XG52YXIgRmFrZVRpbWVycyA9IHJlcXVpcmUoXCJAc2lub25qcy9mYWtlLXRpbWVyc1wiKTtcbnZhciBnbG9iYWxPYmplY3QgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5nbG9iYWw7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsb2NrKGNvbmZpZywgZ2xvYmFsQ3R4KSB7XG4gICAgdmFyIEZha2VUaW1lcnNDdHggPSBGYWtlVGltZXJzO1xuICAgIGlmIChnbG9iYWxDdHggIT09IG51bGwgJiYgdHlwZW9mIGdsb2JhbEN0eCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBGYWtlVGltZXJzQ3R4ID0gRmFrZVRpbWVycy53aXRoR2xvYmFsKGdsb2JhbEN0eCk7XG4gICAgfVxuICAgIHZhciBjbG9jayA9IEZha2VUaW1lcnNDdHguaW5zdGFsbChjb25maWcpO1xuICAgIGNsb2NrLnJlc3RvcmUgPSBjbG9jay51bmluc3RhbGw7XG4gICAgcmV0dXJuIGNsb2NrO1xufVxuXG5mdW5jdGlvbiBhZGRJZkRlZmluZWQob2JqLCBnbG9iYWxQcm9wTmFtZSkge1xuICAgIHZhciBnbG9iYWxQcm9wID0gZ2xvYmFsT2JqZWN0W2dsb2JhbFByb3BOYW1lXTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFByb3AgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqW2dsb2JhbFByb3BOYW1lXSA9IGdsb2JhbFByb3A7XG4gICAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV8b2JqZWN0fSBkYXRlT3JDb25maWcgVGhlIHVuaXggZXBvY2ggdmFsdWUgdG8gaW5zdGFsbCB3aXRoIChkZWZhdWx0IDApXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbG9sZXggY2xvY2sgaW5zdGFuY2VcbiAqL1xuZXhwb3J0cy51c2VGYWtlVGltZXJzID0gZnVuY3Rpb24gKGRhdGVPckNvbmZpZykge1xuICAgIHZhciBoYXNBcmd1bWVudHMgPSB0eXBlb2YgZGF0ZU9yQ29uZmlnICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIHZhciBhcmd1bWVudElzRGF0ZUxpa2UgPVxuICAgICAgICAodHlwZW9mIGRhdGVPckNvbmZpZyA9PT0gXCJudW1iZXJcIiB8fCBkYXRlT3JDb25maWcgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxO1xuICAgIHZhciBhcmd1bWVudElzT2JqZWN0ID1cbiAgICAgICAgZGF0ZU9yQ29uZmlnICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBkYXRlT3JDb25maWcgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMTtcblxuICAgIGlmICghaGFzQXJndW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDbG9jayh7XG4gICAgICAgICAgICBub3c6IDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcmd1bWVudElzRGF0ZUxpa2UpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsb2NrKHtcbiAgICAgICAgICAgIG5vdzogZGF0ZU9yQ29uZmlnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRJc09iamVjdCkge1xuICAgICAgICB2YXIgY29uZmlnID0gZXh0ZW5kLm5vbkVudW0oe30sIGRhdGVPckNvbmZpZyk7XG4gICAgICAgIHZhciBnbG9iYWxDdHggPSBjb25maWcuZ2xvYmFsO1xuICAgICAgICBkZWxldGUgY29uZmlnLmdsb2JhbDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsb2NrKGNvbmZpZywgZ2xvYmFsQ3R4KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcInVzZUZha2VUaW1lcnMgZXhwZWN0ZWQgZXBvY2ggb3IgY29uZmlnIG9iamVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5vbmpzL3Npbm9uXCJcbiAgICApO1xufTtcblxuZXhwb3J0cy5jbG9jayA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgcmV0dXJuIEZha2VUaW1lcnMuY3JlYXRlQ2xvY2sobm93KTtcbiAgICB9LFxufTtcblxudmFyIHRpbWVycyA9IHtcbiAgICBzZXRUaW1lb3V0OiBzZXRUaW1lb3V0LFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LFxuICAgIHNldEludGVydmFsOiBzZXRJbnRlcnZhbCxcbiAgICBjbGVhckludGVydmFsOiBjbGVhckludGVydmFsLFxuICAgIERhdGU6IERhdGUsXG59O1xuYWRkSWZEZWZpbmVkKHRpbWVycywgXCJzZXRJbW1lZGlhdGVcIik7XG5hZGRJZkRlZmluZWQodGltZXJzLCBcImNsZWFySW1tZWRpYXRlXCIpO1xuXG5leHBvcnRzLnRpbWVycyA9IHRpbWVycztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZXZlcnkgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLmV2ZXJ5O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhhc0NhbGxzTGVmdChjYWxsTWFwLCBzcHkpIHtcbiAgICBpZiAoY2FsbE1hcFtzcHkuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbE1hcFtzcHkuaWRdID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsbE1hcFtzcHkuaWRdIDwgc3B5LmNhbGxDb3VudDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja0FkamFjZW50Q2FsbHMoY2FsbE1hcCwgc3B5LCBpbmRleCwgc3BpZXMpIHtcbiAgICB2YXIgY2FsbGVkQmVmb3JlTmV4dCA9IHRydWU7XG5cbiAgICBpZiAoaW5kZXggIT09IHNwaWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY2FsbGVkQmVmb3JlTmV4dCA9IHNweS5jYWxsZWRCZWZvcmUoc3BpZXNbaW5kZXggKyAxXSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NhbGxzTGVmdChjYWxsTWFwLCBzcHkpICYmIGNhbGxlZEJlZm9yZU5leHQpIHtcbiAgICAgICAgY2FsbE1hcFtzcHkuaWRdICs9IDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIFNpbm9uIHByb3h5IG9iamVjdCAoZmFrZSwgc3B5LCBzdHViKVxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpbm9uUHJveHlcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGNhbGxlZEJlZm9yZSAtIEEgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGlzIHByb3h5IHdhcyBjYWxsZWQgYmVmb3JlIGFub3RoZXIgb25lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTb21lIGlkXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2FsbENvdW50IC0gTnVtYmVyIG9mIHRpbWVzIHRoaXMgcHJveHkgaGFzIGJlZW4gY2FsbGVkXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc3BpZXMgaGF2ZSBiZWVuIGNhbGxlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN1cHBsaWVkIGluXG4gKlxuICogQHBhcmFtICB7U2lub25Qcm94eVtdIHwgU2lub25Qcm94eX0gc3BpZXMgQW4gYXJyYXkgb2YgcHJveGllcywgb3Igc2V2ZXJhbCBwcm94aWVzIGFzIGFyZ3VtZW50c1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiBzcGllcyBhcmUgY2FsbGVkIGluIG9yZGVyLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gY2FsbGVkSW5PcmRlcihzcGllcykge1xuICAgIHZhciBjYWxsTWFwID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgdmFyIF9zcGllcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzIDogc3BpZXM7XG5cbiAgICByZXR1cm4gZXZlcnkoX3NwaWVzLCBjaGVja0FkamFjZW50Q2FsbHMuYmluZChudWxsLCBjYWxsTWFwKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FsbGVkSW5PcmRlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24tbmFtZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGlzcGxheSBuYW1lIGZvciBhIHZhbHVlIGZyb20gYSBjb25zdHJ1Y3RvclxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xudWxsKX0gQSBzdHJpbmcgb3IgbnVsbFxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IubmFtZSkgfHxcbiAgICAgICAgLy8gVGhlIG5leHQgYnJhbmNoIGlzIGZvciBJRTExIHN1cHBvcnQgb25seTpcbiAgICAgICAgLy8gQmVjYXVzZSB0aGUgbmFtZSBwcm9wZXJ0eSBpcyBub3Qgc2V0IG9uIHRoZSBwcm90b3R5cGVcbiAgICAgICAgLy8gb2YgdGhlIEZ1bmN0aW9uIG9iamVjdCwgd2UgZmluYWxseSB0cnkgdG8gZ3JhYiB0aGVcbiAgICAgICAgLy8gbmFtZSBmcm9tIGl0cyBkZWZpbml0aW9uLiBUaGlzIHdpbGwgbmV2ZXIgYmUgcmVhY2hlZFxuICAgICAgICAvLyBpbiBub2RlLCBzbyB3ZSBhcmUgbm90IGFibGUgdG8gdGVzdCB0aGlzIHByb3Blcmx5LlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9uYW1lXG4gICAgICAgICh0eXBlb2YgdmFsdWUuY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSh2YWx1ZS5jb25zdHJ1Y3RvcikpIHx8XG4gICAgICAgIG51bGxcbiAgICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgaW52b2tlIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBhbmQgcHJpbnQgYVxuICogZGVwcmVjYXRpb24gd2FybmluZyB0byB0aGUgY29uc29sZSBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1zZ1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnRzLndyYXAgPSBmdW5jdGlvbihmdW5jLCBtc2cpIHtcbiAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBleHBvcnRzLnByaW50V2FybmluZyhtc2cpO1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgaWYgKGZ1bmMucHJvdG90eXBlKSB7XG4gICAgICAgIHdyYXBwZWQucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHdoaWNoIGNhbiBiZSBzdXBwbGllZCB0byBgd3JhcCgpYCB0byBub3RpZnkgdGhlIHVzZXIgdGhhdCBhXG4gKiBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHNpbm9uIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gcGFja2FnZU5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZnVuY05hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMuZGVmYXVsdE1zZyA9IGZ1bmN0aW9uKHBhY2thZ2VOYW1lLCBmdW5jTmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHBhY2thZ2VOYW1lICtcbiAgICAgICAgXCIuXCIgK1xuICAgICAgICBmdW5jTmFtZSArXG4gICAgICAgIFwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwdWJsaWMgQVBJIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgXCIgK1xuICAgICAgICBwYWNrYWdlTmFtZSArXG4gICAgICAgIFwiLlwiXG4gICAgKTtcbn07XG5cbi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBvbiB0aGUgY29uc29sZSwgd2hlbiBpdCBleGlzdHNcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG1zZ1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZXhwb3J0cy5wcmludFdhcm5pbmcgPSBmdW5jdGlvbihtc2cpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLmVtaXRXYXJuaW5nKSB7XG4gICAgICAgIC8vIEVtaXQgV2FybmluZ3MgaW4gTm9kZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG1zZyk7XG4gICAgfSBlbHNlIGlmIChjb25zb2xlLmluZm8pIHtcbiAgICAgICAgY29uc29sZS5pbmZvKG1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gZm4gcmV0dXJucyB0cnVlIGZvciBhbGwgbWVtYmVycyBvZiBvYmouXG4gKiBUaGlzIGlzIGFuIGV2ZXJ5IGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgZm9yIGFsbCBpdGVyYWJsZXNcbiAqXG4gKiBAcGFyYW0gIHtvYmplY3R9ICAgb2JqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgZm4pIHtcbiAgICB2YXIgcGFzcyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIWZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvd2luZyBhbiBlcnJvciBpcyB0aGUgb25seSB3YXkgdG8gYnJlYWsgYGZvckVhY2hgXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcGFzcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXNzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBkaXNwbGF5IG5hbWUgZm9yIGEgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmdW5jdGlvbk5hbWUoZnVuYykge1xuICAgIGlmICghZnVuYykge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZnVuYy5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgZnVuYy5uYW1lIHx8XG4gICAgICAgICAgICAvLyBVc2UgZnVuY3Rpb24gZGVjb21wb3NpdGlvbiBhcyBhIGxhc3QgcmVzb3J0IHRvIGdldCBmdW5jdGlvblxuICAgICAgICAgICAgLy8gbmFtZS4gRG9lcyBub3QgcmVseSBvbiBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIHRvIHdvcmsgLSBpZiBpdFxuICAgICAgICAgICAgLy8gZG9lc24ndCBkZWJ1Z2dpbmcgd2lsbCBiZSBzbGlnaHRseSBsZXNzIGluZm9ybWF0aXZlXG4gICAgICAgICAgICAvLyAoaS5lLiB0b1N0cmluZyB3aWxsIHNheSAnc3B5JyByYXRoZXIgdGhhbiAnbXlGdW5jJykuXG4gICAgICAgICAgICAoU3RyaW5nKGZ1bmMpLm1hdGNoKC9mdW5jdGlvbiAoW15cXHMoXSspLykgfHwgW10pWzFdXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTdHJpbmdpZnkgbWF5IGZhaWwgYW5kIHdlIG1pZ2h0IGdldCBhbiBleGNlcHRpb24sIGFzIGEgbGFzdC1sYXN0XG4gICAgICAgIC8vIHJlc29ydCBmYWxsIGJhY2sgdG8gZW1wdHkgc3RyaW5nLlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAdHlwZSB7b2JqZWN0fSBnbG9iYWxPYmplY3RcbiAqL1xudmFyIGdsb2JhbE9iamVjdDtcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gTm9kZVxuICAgIGdsb2JhbE9iamVjdCA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIEJyb3dzZXJcbiAgICBnbG9iYWxPYmplY3QgPSB3aW5kb3c7XG59IGVsc2Uge1xuICAgIC8vIFdlYldvcmtlclxuICAgIGdsb2JhbE9iamVjdCA9IHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdsb2JhbDogcmVxdWlyZShcIi4vZ2xvYmFsXCIpLFxuICAgIGNhbGxlZEluT3JkZXI6IHJlcXVpcmUoXCIuL2NhbGxlZC1pbi1vcmRlclwiKSxcbiAgICBjbGFzc05hbWU6IHJlcXVpcmUoXCIuL2NsYXNzLW5hbWVcIiksXG4gICAgZGVwcmVjYXRlZDogcmVxdWlyZShcIi4vZGVwcmVjYXRlZFwiKSxcbiAgICBldmVyeTogcmVxdWlyZShcIi4vZXZlcnlcIiksXG4gICAgZnVuY3Rpb25OYW1lOiByZXF1aXJlKFwiLi9mdW5jdGlvbi1uYW1lXCIpLFxuICAgIG9yZGVyQnlGaXJzdENhbGw6IHJlcXVpcmUoXCIuL29yZGVyLWJ5LWZpcnN0LWNhbGxcIiksXG4gICAgcHJvdG90eXBlczogcmVxdWlyZShcIi4vcHJvdG90eXBlc1wiKSxcbiAgICB0eXBlT2Y6IHJlcXVpcmUoXCIuL3R5cGUtb2ZcIiksXG4gICAgdmFsdWVUb1N0cmluZzogcmVxdWlyZShcIi4vdmFsdWUtdG8tc3RyaW5nXCIpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzb3J0ID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zb3J0O1xudmFyIHNsaWNlID0gcmVxdWlyZShcIi4vcHJvdG90eXBlcy9hcnJheVwiKS5zbGljZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb21wYXJhdG9yKGEsIGIpIHtcbiAgICAvLyB1dWlkLCB3b24ndCBldmVyIGJlIGVxdWFsXG4gICAgdmFyIGFDYWxsID0gYS5nZXRDYWxsKDApO1xuICAgIHZhciBiQ2FsbCA9IGIuZ2V0Q2FsbCgwKTtcbiAgICB2YXIgYUlkID0gKGFDYWxsICYmIGFDYWxsLmNhbGxJZCkgfHwgLTE7XG4gICAgdmFyIGJJZCA9IChiQ2FsbCAmJiBiQ2FsbC5jYWxsSWQpIHx8IC0xO1xuXG4gICAgcmV0dXJuIGFJZCA8IGJJZCA/IC0xIDogMTtcbn1cblxuLyoqXG4gKiBBIFNpbm9uIHByb3h5IG9iamVjdCAoZmFrZSwgc3B5LCBzdHViKVxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpbm9uUHJveHlcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldENhbGwgLSBBIG1ldGhvZCB0aGF0IGNhbiByZXR1cm4gdGhlIGZpcnN0IGNhbGxcbiAqL1xuXG4vKipcbiAqIFNvcnRzIGFuIGFycmF5IG9mIFNpbm9uUHJveHkgaW5zdGFuY2VzIChmYWtlLCBzcHksIHN0dWIpIGJ5IHRoZWlyIGZpcnN0IGNhbGxcbiAqXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllc1xuICogQHJldHVybnMge1Npbm9uUHJveHlbXX1cbiAqL1xuZnVuY3Rpb24gb3JkZXJCeUZpcnN0Q2FsbChzcGllcykge1xuICAgIHJldHVybiBzb3J0KHNsaWNlKHNwaWVzKSwgY29tcGFyYXRvcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3JkZXJCeUZpcnN0Q2FsbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoQXJyYXkucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29weVByb3RvdHlwZU1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSkucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgbmFtZSkge1xuICAgICAgICAvLyBpZ25vcmUgc2l6ZSBiZWNhdXNlIGl0IHRocm93cyBmcm9tIE1hcFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lICE9PSBcInNpemVcIiAmJlxuICAgICAgICAgICAgbmFtZSAhPT0gXCJjYWxsZXJcIiAmJlxuICAgICAgICAgICAgbmFtZSAhPT0gXCJjYWxsZWVcIiAmJlxuICAgICAgICAgICAgbmFtZSAhPT0gXCJhcmd1bWVudHNcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHByb3RvdHlwZVtuYW1lXSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gY2FsbC5iaW5kKHByb3RvdHlwZVtuYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoRnVuY3Rpb24ucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheTogcmVxdWlyZShcIi4vYXJyYXlcIiksXG4gICAgZnVuY3Rpb246IHJlcXVpcmUoXCIuL2Z1bmN0aW9uXCIpLFxuICAgIG1hcDogcmVxdWlyZShcIi4vbWFwXCIpLFxuICAgIG9iamVjdDogcmVxdWlyZShcIi4vb2JqZWN0XCIpLFxuICAgIHNldDogcmVxdWlyZShcIi4vc2V0XCIpLFxuICAgIHN0cmluZzogcmVxdWlyZShcIi4vc3RyaW5nXCIpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShNYXAucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoT2JqZWN0LnByb3RvdHlwZSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvcHlQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jb3B5LXByb3RvdHlwZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKFNldC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShTdHJpbmcucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdHlwZSA9IHJlcXVpcmUoXCJ0eXBlLWRldGVjdFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsb3dlci1jYXNlIHJlc3VsdCBvZiBydW5uaW5nIHR5cGUgZnJvbSB0eXBlLWRldGVjdCBvbiB0aGUgdmFsdWVcbiAqXG4gKiBAcGFyYW0gIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0eXBlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZSh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB2YWx1ZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2lub25qcy9uby1wcm90b3R5cGUtbWV0aG9kcy9uby1wcm90b3R5cGUtbWV0aG9kc1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWVUb1N0cmluZztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBnbG9iYWxPYmplY3QgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5nbG9iYWw7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSWRsZURlYWRsaW5lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpZFRpbWVvdXQgLSB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbGJhY2sgd2FzIGNhbGxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIG9wdGlvbmFsIHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTpudW1iZXJ9IHRpbWVSZW1haW5pbmcgLSBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIHByb3ZpZGluZyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyByZW1haW5pbmcgaW4gdGhlIGN1cnJlbnQgaWRsZSBwZXJpb2RcbiAqL1xuXG4vKipcbiAqIFF1ZXVlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBkdXJpbmcgYSBicm93c2VyJ3MgaWRsZSBwZXJpb2RzXG4gKlxuICogQGNhbGxiYWNrIFJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oSWRsZURlYWRsaW5lKX0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7e3RpbWVvdXQ6IG51bWJlcn19IG9wdGlvbnMgLSBhbiBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGlkXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgTmV4dFRpY2tcbiAqIEBwYXJhbSB7Vm9pZFZhckFyZ3NGdW5jfSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0byBydW5cbiAqIEBwYXJhbSB7Li4uKn0gYXJndW1lbnRzIC0gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGhcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFNldEltbWVkaWF0ZVxuICogQHBhcmFtIHtWb2lkVmFyQXJnc0Z1bmN9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMgLSBvcHRpb25hbCBhcmd1bWVudHMgdG8gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aFxuICogQHJldHVybnMge05vZGVJbW1lZGlhdGV9XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVm9pZFZhckFyZ3NGdW5jXG4gKiBAcGFyYW0gey4uLip9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTp2b2lkfSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gdGhlIGlkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQZXJmb3JtYW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IG5vd1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcHJvcGVydHktZGVzY3JpcHRpb24gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ2xvY2tcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub3cgLSB0aGUgY3VycmVudCB0aW1lXG4gKiBAcHJvcGVydHkge0RhdGV9IERhdGUgLSB0aGUgRGF0ZSBjb25zdHJ1Y3RvclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvb3BMaW1pdCAtIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcnMgYmVmb3JlIGFzc3VtaW5nIGFuIGluZmluaXRlIGxvb3BcbiAqIEBwcm9wZXJ0eSB7UmVxdWVzdElkbGVDYWxsYmFja30gcmVxdWVzdElkbGVDYWxsYmFja1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IGNhbmNlbElkbGVDYWxsYmFja1xuICogQHByb3BlcnR5IHtzZXRUaW1lb3V0fSBzZXRUaW1lb3V0XG4gKiBAcHJvcGVydHkge2NsZWFyVGltZW91dH0gY2xlYXJUaW1lb3V0XG4gKiBAcHJvcGVydHkge05leHRUaWNrfSBuZXh0VGlja1xuICogQHByb3BlcnR5IHtxdWV1ZU1pY3JvdGFza30gcXVldWVNaWNyb3Rhc2tcbiAqIEBwcm9wZXJ0eSB7c2V0SW50ZXJ2YWx9IHNldEludGVydmFsXG4gKiBAcHJvcGVydHkge2NsZWFySW50ZXJ2YWx9IGNsZWFySW50ZXJ2YWxcbiAqIEBwcm9wZXJ0eSB7U2V0SW1tZWRpYXRlfSBzZXRJbW1lZGlhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oTm9kZUltbWVkaWF0ZSk6dm9pZH0gY2xlYXJJbW1lZGlhdGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTpudW1iZXJ9IGNvdW50VGltZXJzXG4gKiBAcHJvcGVydHkge1JlcXVlc3RBbmltYXRpb25GcmFtZX0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gY2FuY2VsQW5pbWF0aW9uRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTp2b2lkfSBydW5NaWNyb3Rhc2tzXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyB8IG51bWJlcik6IG51bWJlcn0gdGlja1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPG51bWJlcj59IHRpY2tBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IG5leHRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBuZXh0QXN5bmNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBydW5BbGxcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBydW5Ub0ZyYW1lXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gcnVuQWxsQXN5bmNcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBydW5Ub0xhc3RcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBydW5Ub0xhc3RBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSByZXNldFxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIgfCBEYXRlKTogdm9pZH0gc2V0U3lzdGVtVGltZVxuICogQHByb3BlcnR5IHtQZXJmb3JtYW5jZX0gcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyW10pOiBudW1iZXJbXX0gaHJ0aW1lIC0gcHJvY2Vzcy5ocnRpbWUgKGxlZ2FjeSlcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gdW5pbnN0YWxsIFVuaW5zdGFsbCB0aGUgY2xvY2suXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9uW119IG1ldGhvZHMgLSB0aGUgbWV0aG9kcyB0aGF0IGFyZSBmYWtlZFxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNdIGluaGVyaXRlZCBmcm9tIGNvbmZpZ1xuICovXG4vKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtcHJvcGVydHktZGVzY3JpcHRpb24gKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGBpbnN0YWxsYCBtZXRob2QuXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29uZmlnXG4gKiBAcHJvcGVydHkge251bWJlcnxEYXRlfSBbbm93XSBhIG51bWJlciAoaW4gbWlsbGlzZWNvbmRzKSBvciBhIERhdGUgb2JqZWN0IChkZWZhdWx0IGVwb2NoKVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RvRmFrZV0gbmFtZXMgb2YgdGhlIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZmFrZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xvb3BMaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVycyB0aGF0IHdpbGwgYmUgcnVuIHdoZW4gY2FsbGluZyBydW5BbGwoKVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQWR2YW5jZVRpbWVdIHRlbGxzIEZha2VUaW1lcnMgdG8gaW5jcmVtZW50IG1vY2tlZCB0aW1lIGF1dG9tYXRpY2FsbHkgKGRlZmF1bHQgZmFsc2UpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FkdmFuY2VUaW1lRGVsdGFdIGluY3JlbWVudCBtb2NrZWQgdGltZSBldmVyeSA8PGFkdmFuY2VUaW1lRGVsdGE+PiBtcyAoZGVmYXVsdDogMjBtcylcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Nob3VsZENsZWFyTmF0aXZlVGltZXJzXSBmb3J3YXJkcyBjbGVhciB0aW1lciBjYWxscyB0byBuYXRpdmUgZnVuY3Rpb25zIGlmIHRoZXkgYXJlIG5vdCBmYWtlcyAoZGVmYXVsdDogZmFsc2UpXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuLyoqXG4gKiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIHRvIGRlc2NyaWJlIGEgc2NoZWR1bGVkIGZha2UgdGltZXJcbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUaW1lclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZnVuY1xuICogQHByb3BlcnR5IHsqW119IGFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWxheVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNhbGxBdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNyZWF0ZWRBdFxuICogQHByb3BlcnR5IHtib29sZWFufSBpbW1lZGlhdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZFxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICovXG5cbi8qKlxuICogQSBOb2RlIHRpbWVyXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gTm9kZUltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBib29sZWFufSBoYXNSZWZcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogTm9kZUltbWVkaWF0ZX0gcmVmXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IE5vZGVJbW1lZGlhdGV9IHVucmVmXG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogTW9ja3MgYXZhaWxhYmxlIGZlYXR1cmVzIGluIHRoZSBzcGVjaWZpZWQgZ2xvYmFsIG5hbWVzcGFjZS5cbiAqXG4gKiBAcGFyYW0geyp9IF9nbG9iYWwgTmFtZXNwYWNlIHRvIG1vY2sgKGUuZy4gYHdpbmRvd2ApXG4gKiBAcmV0dXJucyB7RmFrZVRpbWVyc31cbiAqL1xuZnVuY3Rpb24gd2l0aEdsb2JhbChfZ2xvYmFsKSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gX2dsb2JhbC5uYXZpZ2F0b3IgJiYgX2dsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IGlzUnVubmluZ0luSUUgPSB1c2VyQWdlbnQgJiYgdXNlckFnZW50LmluZGV4T2YoXCJNU0lFIFwiKSA+IC0xO1xuICAgIGNvbnN0IG1heFRpbWVvdXQgPSBNYXRoLnBvdygyLCAzMSkgLSAxOyAvL3NlZSBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNhYnN0cmFjdC1vcGRlZi1jb252ZXJ0dG9pbnRcbiAgICBjb25zdCBpZENvdW50ZXJTdGFydCA9IDFlMTI7IC8vIGFyYml0cmFyaWx5IGxhcmdlIG51bWJlciB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggbmF0aXZlIHRpbWVyIElEc1xuICAgIGNvbnN0IE5PT1AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBOT09QX0FSUkFZID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfTtcbiAgICBjb25zdCB0aW1lb3V0UmVzdWx0ID0gX2dsb2JhbC5zZXRUaW1lb3V0KE5PT1AsIDApO1xuICAgIGNvbnN0IGFkZFRpbWVyUmV0dXJuc09iamVjdCA9IHR5cGVvZiB0aW1lb3V0UmVzdWx0ID09PSBcIm9iamVjdFwiO1xuICAgIGNvbnN0IGhydGltZVByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLnByb2Nlc3MgJiYgdHlwZW9mIF9nbG9iYWwucHJvY2Vzcy5ocnRpbWUgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBocnRpbWVCaWdpbnRQcmVzZW50ID1cbiAgICAgICAgaHJ0aW1lUHJlc2VudCAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLmhydGltZS5iaWdpbnQgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBuZXh0VGlja1ByZXNlbnQgPVxuICAgICAgICBfZ2xvYmFsLnByb2Nlc3MgJiYgdHlwZW9mIF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljayA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IHV0aWxQcm9taXNpZnkgPSBfZ2xvYmFsLnByb2Nlc3MgJiYgcmVxdWlyZShcInV0aWxcIikucHJvbWlzaWZ5O1xuICAgIGNvbnN0IHBlcmZvcm1hbmNlUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucGVyZm9ybWFuY2UgJiYgdHlwZW9mIF9nbG9iYWwucGVyZm9ybWFuY2Uubm93ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgaGFzUGVyZm9ybWFuY2VQcm90b3R5cGUgPVxuICAgICAgICBfZ2xvYmFsLlBlcmZvcm1hbmNlICYmXG4gICAgICAgICh0eXBlb2YgX2dsb2JhbC5QZXJmb3JtYW5jZSkubWF0Y2goL14oZnVuY3Rpb258b2JqZWN0KSQvKTtcbiAgICBjb25zdCBoYXNQZXJmb3JtYW5jZUNvbnN0cnVjdG9yUHJvdG90eXBlID1cbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICAgICAgICBfZ2xvYmFsLnBlcmZvcm1hbmNlLmNvbnN0cnVjdG9yICYmXG4gICAgICAgIF9nbG9iYWwucGVyZm9ybWFuY2UuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIGNvbnN0IHF1ZXVlTWljcm90YXNrUHJlc2VudCA9IF9nbG9iYWwuaGFzT3duUHJvcGVydHkoXCJxdWV1ZU1pY3JvdGFza1wiKTtcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBfZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2sgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwuY2FuY2VsSWRsZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3Qgc2V0SW1tZWRpYXRlUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwuc2V0SW1tZWRpYXRlICYmIHR5cGVvZiBfZ2xvYmFsLnNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgLy8gTWFrZSBwcm9wZXJ0aWVzIHdyaXRhYmxlIGluIElFLCBhcyBwZXJcbiAgICAvLyBodHRwczovL3d3dy5hZGVxdWF0ZWx5Z29vZC5jb20vUmVwbGFjaW5nLXNldFRpbWVvdXQtR2xvYmFsbHkuaHRtbFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduICovXG4gICAgaWYgKGlzUnVubmluZ0luSUUpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLmNsZWFyVGltZW91dCA9IF9nbG9iYWwuY2xlYXJUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLnNldEludGVydmFsID0gX2dsb2JhbC5zZXRJbnRlcnZhbDtcbiAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsID0gX2dsb2JhbC5jbGVhckludGVydmFsO1xuICAgICAgICBfZ2xvYmFsLkRhdGUgPSBfZ2xvYmFsLkRhdGU7XG4gICAgfVxuXG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIG5vdCBhIHN0YW5kYXJkIGZ1bmN0aW9uXG4gICAgLy8gYXZvaWQgYWRkaW5nIHRoZSBwcm9wIHRvIHRoZSB3aW5kb3cgb2JqZWN0IGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKHNldEltbWVkaWF0ZVByZXNlbnQpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgX2dsb2JhbC5jbGVhckltbWVkaWF0ZSA9IF9nbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gKi9cblxuICAgIF9nbG9iYWwuY2xlYXJUaW1lb3V0KHRpbWVvdXRSZXN1bHQpO1xuXG4gICAgY29uc3QgTmF0aXZlRGF0ZSA9IF9nbG9iYWwuRGF0ZTtcbiAgICBsZXQgdW5pcXVlVGltZXJJZCA9IGlkQ291bnRlclN0YXJ0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVtYmVyRmluaXRlKG51bSkge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKTtcbiAgICB9XG5cbiAgICBsZXQgaXNOZWFySW5maW5pdGVMaW1pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSkge1xuICAgICAgICBpZiAoY2xvY2subG9vcExpbWl0ICYmIGkgPT09IGNsb2NrLmxvb3BMaW1pdCAtIDEpIHtcbiAgICAgICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXNldElzTmVhckluZmluaXRlTGltaXQoKSB7XG4gICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBzdHJpbmdzIGxpa2UgXCIwMToxMDowMFwiIChtZWFuaW5nIDEgaG91ciwgMTAgbWludXRlcywgMCBzZWNvbmRzKSBpbnRvXG4gICAgICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyBwYXNzZWRcbiAgICAgKiB0byBjbG9jay50aWNrKClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IHN0ci5zcGxpdChcIjpcIik7XG4gICAgICAgIGNvbnN0IGwgPSBzdHJpbmdzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSBsO1xuICAgICAgICBsZXQgbXMgPSAwO1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcInRpY2sgb25seSB1bmRlcnN0YW5kcyBudW1iZXJzLCAnbTpzJyBhbmQgJ2g6bTpzJy4gRWFjaCBwYXJ0IG11c3QgYmUgdHdvIGRpZ2l0c1wiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkID49IDYwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgJHtzdHJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1zICs9IHBhcnNlZCAqIE1hdGgucG93KDYwLCBsIC0gaSAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zICogMTAwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlY2ltYWwgcGFydCBvZiB0aGUgbWlsbGlzZWNvbmQgdmFsdWUgYXMgbmFub3NlY29uZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtc0Zsb2F0IHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAgICogQHJldHVybnMge251bWJlcn0gYW4gaW50ZWdlciBudW1iZXIgb2YgbmFub3NlY29uZHMgaW4gdGhlIHJhbmdlIFswLDFlNilcbiAgICAgKlxuICAgICAqIEV4YW1wbGU6IG5hbm9SZW1haW5lcigxMjMuNDU2Nzg5KSAtPiA0NTY3ODlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYW5vUmVtYWluZGVyKG1zRmxvYXQpIHtcbiAgICAgICAgY29uc3QgbW9kdWxvID0gMWU2O1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAobXNGbG9hdCAqIDFlNikgJSBtb2R1bG87XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlUmVtYWluZGVyID1cbiAgICAgICAgICAgIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBtb2R1bG8gOiByZW1haW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocG9zaXRpdmVSZW1haW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZ3JvayB0aGUgYG5vd2AgcGFyYW1ldGVyIHRvIGNyZWF0ZUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gZXBvY2ggdGhlIHN5c3RlbSB0aW1lXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRFcG9jaChlcG9jaCkge1xuICAgICAgICBpZiAoIWVwb2NoKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoLmdldFRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGVwb2NoLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdyBzaG91bGQgYmUgbWlsbGlzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyKSB7XG4gICAgICAgIHJldHVybiB0aW1lciAmJiB0aW1lci5jYWxsQXQgPj0gZnJvbSAmJiB0aW1lci5jYWxsQXQgPD0gdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBqb2JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJbmZpbml0ZUxvb3BFcnJvcihjbG9jaywgam9iKSB7XG4gICAgICAgIGNvbnN0IGluZmluaXRlTG9vcEVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFib3J0aW5nIGFmdGVyIHJ1bm5pbmcgJHtjbG9jay5sb29wTGltaXR9IHRpbWVycywgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcCFgXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFqb2IuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZpbml0ZUxvb3BFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhdHRlcm4gbmV2ZXIgbWF0Y2hlZCBpbiBOb2RlXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkVGFyZ2V0UGF0dGVybiA9IC90YXJnZXRcXC4qWzx8KHxbXS4qP1s+fFxcXXwpXVxccyovO1xuICAgICAgICBsZXQgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIFN0cmluZyhPYmplY3Qua2V5cyhjbG9jaykuam9pbihcInxcIikpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gbm9kZS5qcyBlbnZpcm9ubWVudFxuICAgICAgICAgICAgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBgXFxcXHMrYXQgKE9iamVjdFxcXFwuKT8oPzoke09iamVjdC5rZXlzKGNsb2NrKS5qb2luKFwifFwiKX0pXFxcXHMrYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXRjaGVkTGluZUluZGV4ID0gLTE7XG4gICAgICAgIGpvYi5lcnJvci5zdGFjay5zcGxpdChcIlxcblwiKS5zb21lKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY29tcHV0ZWQgdGFyZ2V0IGxpbmUgKGUuZy4gc2V0VGltZW91dCkgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLiBSZXR1cm4gdHJ1ZSB0byBzdG9wIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb21wdXRlZFRhcmdldCA9IGxpbmUubWF0Y2goY29tcHV0ZWRUYXJnZXRQYXR0ZXJuKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb21wdXRlZFRhcmdldCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY2xvY2sgbWV0aG9kIGxpbmUsIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJlXG4gICAgICAgICAgICAvLyBvdGhlcnMgZnVydGhlciBkb3duIHRoZSB0cmFjZS4gUmV0dXJuIGZhbHNlIHRvIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENsb2NrTWV0aG9kID0gbGluZS5tYXRjaChjbG9ja01ldGhvZFBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDbG9ja01ldGhvZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIGFueXRoaW5nIG9uIHRoaXMgbGluZSwgYnV0IHdlIG1hdGNoZWRcbiAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgYW5kIHNldCB0aGUgbWF0Y2hlZCBsaW5lIGluZGV4LCB0aGVuIHdlIGNhbiBzdG9wLlxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHByZXZpb3VzbHksIHRoZW4gd2Ugc2hvdWxkIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRMaW5lSW5kZXggPj0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBgJHtpbmZpbml0ZUxvb3BFcnJvcn1cXG4ke2pvYi50eXBlIHx8IFwiTWljcm90YXNrXCJ9IC0gJHtcbiAgICAgICAgICAgIGpvYi5mdW5jLm5hbWUgfHwgXCJhbm9ueW1vdXNcIlxuICAgICAgICB9XFxuJHtqb2IuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLnNsaWNlKG1hdGNoZWRMaW5lSW5kZXggKyAxKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluZmluaXRlTG9vcEVycm9yLCBcInN0YWNrXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmluaXRlTG9vcEVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtEYXRlfSBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHRhcmdldCBhZnRlciBtb2RpZmljYXRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWlycm9yRGF0ZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgbGV0IHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCBub3cgaW1wbGVtZW50YXRpb25cbiAgICAgICAgaWYgKHNvdXJjZS5ub3cpIHtcbiAgICAgICAgICAgIHRhcmdldC5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbG9jay5ub3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5ub3c7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCB0b1NvdXJjZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAoc291cmNlLnRvU291cmNlKSB7XG4gICAgICAgICAgICB0YXJnZXQudG9Tb3VyY2UgPSBmdW5jdGlvbiB0b1NvdXJjZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU291cmNlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC50b1NvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzcGVjaWFsIHRvU3RyaW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHRhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS50b1N0cmluZygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUgPSBzb3VyY2UucHJvdG90eXBlO1xuICAgICAgICB0YXJnZXQucGFyc2UgPSBzb3VyY2UucGFyc2U7XG4gICAgICAgIHRhcmdldC5VVEMgPSBzb3VyY2UuVVRDO1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gc291cmNlLnByb3RvdHlwZS50b1VUQ1N0cmluZztcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHllYXJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBob3VyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW51dGVcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNlY29uZFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBDbG9ja0RhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcykge1xuICAgICAgICAgICAgLy8gdGhlIERhdGUgY29uc3RydWN0b3IgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHJlZiBFY21hLTI2MiBFZGl0aW9uIDUuMSwgc2VjdGlvbiAxNS45LjIuXG4gICAgICAgICAgICAvLyBUaGlzIHJlbWFpbnMgc28gaW4gdGhlIDEwdGggZWRpdGlvbiBvZiAyMDE5IGFzIHdlbGwuXG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xvY2tEYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShDbG9ja0RhdGUuY2xvY2subm93KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBEYXRlIGlzIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yIHdpdGggJ25ldycga2V5d29yZFxuICAgICAgICAgICAgLy8gRGVmZW5zaXZlIGFuZCB2ZXJib3NlIHRvIGF2b2lkIHBvdGVudGlhbCBoYXJtIGluIHBhc3NpbmdcbiAgICAgICAgICAgIC8vIGV4cGxpY2l0IHVuZGVmaW5lZCB3aGVuIHVzZXIgZG9lcyBub3QgcGFzcyBhcmd1bWVudFxuICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoQ2xvY2tEYXRlLmNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhcik7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cik7XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBlbnF1ZXVlSm9iKGNsb2NrLCBqb2IpIHtcbiAgICAgICAgLy8gZW5xdWV1ZXMgYSBtaWNyb3RpY2stZGVmZXJyZWQgdGFzayAtIGVjbWEyNjIvI3NlYy1lbnF1ZXVlam9iXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNsb2NrLmpvYnMucHVzaChqb2IpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBydW5Kb2JzKGNsb2NrKSB7XG4gICAgICAgIC8vIHJ1bnMgYWxsIG1pY3JvdGljay1kZWZlcnJlZCB0YXNrcyAtIGVjbWEyNjIvI3NlYy1ydW5qb2JzXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvY2suam9icy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgam9iID0gY2xvY2suam9ic1tpXTtcbiAgICAgICAgICAgIGpvYi5mdW5jLmFwcGx5KG51bGwsIGpvYi5hcmdzKTtcblxuICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgIGlmIChjbG9jay5sb29wTGltaXQgJiYgaSA+IGNsb2NrLmxvb3BMaW1pdCkge1xuICAgICAgICAgICAgICAgIHRocm93IGdldEluZmluaXRlTG9vcEVycm9yKGNsb2NrLCBqb2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGlkIG9mIHRoZSBjcmVhdGVkIHRpbWVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkVGltZXIoY2xvY2ssIHRpbWVyKSB7XG4gICAgICAgIGlmICh0aW1lci5mdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgdG8gdGltZXIgY2FsbHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBOb2RlLmpzIGVudmlyb25tZW50XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBbRVJSX0lOVkFMSURfQ0FMTEJBQ0tdOiBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uIFJlY2VpdmVkICR7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lci5mdW5jXG4gICAgICAgICAgICAgICAgICAgIH0gb2YgdHlwZSAke3R5cGVvZiB0aW1lci5mdW5jfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckluZmluaXRlTGltaXQpIHtcbiAgICAgICAgICAgIHRpbWVyLmVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lci50eXBlID0gdGltZXIuaW1tZWRpYXRlID8gXCJJbW1lZGlhdGVcIiA6IFwiVGltZW91dFwiO1xuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImRlbGF5XCIpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmRlbGF5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBwYXJzZUludCh0aW1lci5kZWxheSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTnVtYmVyRmluaXRlKHRpbWVyLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gdGltZXIuZGVsYXkgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmRlbGF5O1xuICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBNYXRoLm1heCgwLCB0aW1lci5kZWxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXIuaGFzT3duUHJvcGVydHkoXCJpbnRlcnZhbFwiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSW50ZXJ2YWxcIjtcbiAgICAgICAgICAgIHRpbWVyLmludGVydmFsID0gdGltZXIuaW50ZXJ2YWwgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiYW5pbWF0aW9uXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJBbmltYXRpb25GcmFtZVwiO1xuICAgICAgICAgICAgdGltZXIuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImlkbGVDYWxsYmFja1wiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSWRsZUNhbGxiYWNrXCI7XG4gICAgICAgICAgICB0aW1lci5pZGxlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZXIuaWQgPSB1bmlxdWVUaW1lcklkKys7XG4gICAgICAgIHRpbWVyLmNyZWF0ZWRBdCA9IGNsb2NrLm5vdztcbiAgICAgICAgdGltZXIuY2FsbEF0ID1cbiAgICAgICAgICAgIGNsb2NrLm5vdyArIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgICAgIGNsb2NrLnRpbWVyc1t0aW1lci5pZF0gPSB0aW1lcjtcblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bnJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gW3RpbWVyLmZ1bmMsIHRpbWVyLmRlbGF5XS5jb25jYXQodGltZXIuYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVyLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lci5pZDtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IFwib2ZmXCIgKi9cbiAgICAvKipcbiAgICAgKiBUaW1lciBjb21wYXJpdG9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBhXG4gICAgICogQHBhcmFtIHtUaW1lcn0gYlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZVRpbWVycyhhLCBiKSB7XG4gICAgICAgIC8vIFNvcnQgZmlyc3QgYnkgYWJzb2x1dGUgdGltaW5nXG4gICAgICAgIGlmIChhLmNhbGxBdCA8IGIuY2FsbEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY2FsbEF0ID4gYi5jYWxsQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGltbWVkaWF0ZSwgaW1tZWRpYXRlIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKGEuaW1tZWRpYXRlICYmICFiLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYS5pbW1lZGlhdGUgJiYgYi5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGNyZWF0aW9uIHRpbWUsIGVhcmxpZXItY3JlYXRlZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmNyZWF0ZWRBdCA8IGIuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY3JlYXRlZEF0ID4gYi5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGlkLCBsb3dlci1pZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmlkIDwgYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmlkID4gYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcyB0aW1lciBpZHMgYXJlIHVuaXF1ZSwgbm8gZmFsbGJhY2sgYDBgIGlzIG5lY2Vzc2FyeVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBsZXQgaWQsIGlzSW5SYW5nZTtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBpblJhbmdlKGZyb20sIHRvLCB0aW1lcnNbaWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3RUaW1lcihjbG9jaykge1xuICAgICAgICBjb25zdCB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICAgIGxldCBpZDtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGNvbXBhcmVUaW1lcnModGltZXIsIHRpbWVyc1tpZF0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdFRpbWVyKGNsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgbGV0IGlkO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhbGxUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5pbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXS5jYWxsQXQgKz0gdGltZXIuaW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVyLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aW1lci5mdW5jLmFwcGx5KG51bGwsIHRpbWVyLmFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogZXNsaW50IG5vLWV2YWw6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgIGNvbnN0IGV2YWwyID0gZXZhbDtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXZhbDIodGltZXIuZnVuYyk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbGVhciBoYW5kbGVyIG5hbWUgZm9yIGEgZ2l2ZW4gdGltZXIgdHlwZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2xlYXJIYW5kbGVyKHR0eXBlKSB7XG4gICAgICAgIGlmICh0dHlwZSA9PT0gXCJJZGxlQ2FsbGJhY2tcIiB8fCB0dHlwZSA9PT0gXCJBbmltYXRpb25GcmFtZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYGNhbmNlbCR7dHR5cGV9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGNsZWFyJHt0dHlwZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2NoZWR1bGUgaGFuZGxlciBuYW1lIGZvciBhIGdpdmVuIHRpbWVyIHR5cGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0dHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFNjaGVkdWxlSGFuZGxlcih0dHlwZSkge1xuICAgICAgICBpZiAodHR5cGUgPT09IFwiSWRsZUNhbGxiYWNrXCIgfHwgdHR5cGUgPT09IFwiQW5pbWF0aW9uRnJhbWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGByZXF1ZXN0JHt0dHlwZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgc2V0JHt0dHlwZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIHRvIHdhcm4gb25seSBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV2Fybk9uY2UoKSB7XG4gICAgICAgIGxldCBjYWxscyA9IDA7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobXNnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICFjYWxscysrICYmIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB3YXJuT25jZSA9IGNyZWF0ZVdhcm5PbmNlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Nsb2NrfSBjbG9ja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lcklkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgdHR5cGUpIHtcbiAgICAgICAgaWYgKCF0aW1lcklkKSB7XG4gICAgICAgICAgICAvLyBudWxsIGFwcGVhcnMgdG8gYmUgYWxsb3dlZCBpbiBtb3N0IGJyb3dzZXJzLCBhbmQgYXBwZWFycyB0byBiZVxuICAgICAgICAgICAgLy8gcmVsaWVkIHVwb24gYnkgc29tZSBsaWJyYXJpZXMsIGxpa2UgQm9vdHN0cmFwIGNhcm91c2VsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBOb2RlLCB0aGUgSUQgaXMgc3RvcmVkIGFzIHRoZSBwcmltaXRpdmUgdmFsdWUgZm9yIGBUaW1lb3V0YCBvYmplY3RzXG4gICAgICAgIC8vIGZvciBgSW1tZWRpYXRlYCBvYmplY3RzLCBubyBJRCBleGlzdHMsIHNvIGl0IGdldHMgY29lcmNlZCB0byBOYU5cbiAgICAgICAgY29uc3QgaWQgPSBOdW1iZXIodGltZXJJZCk7XG5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTihpZCkgfHwgaWQgPCBpZENvdW50ZXJTdGFydCkge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlck5hbWUgPSBnZXRDbGVhckhhbmRsZXIodHR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoY2xvY2suc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXRpdmVIYW5kbGVyID0gY2xvY2tbYF8ke2hhbmRsZXJOYW1lfWBdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgbmF0aXZlSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gbmF0aXZlSGFuZGxlcih0aW1lcklkKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzOiAke2hhbmRsZXJOYW1lfSB3YXMgaW52b2tlZCB0byBjbGVhciBhIG5hdGl2ZSB0aW1lciBpbnN0ZWFkIG9mIG9uZSBjcmVhdGVkIGJ5IHRoaXMgbGlicmFyeS5gICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5UbyBhdXRvbWF0aWNhbGx5IGNsZWFuLXVwIG5hdGl2ZSB0aW1lcnMsIHVzZSBgc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNgLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb2NrLnRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIElEIG1hdGNoZXMgYSB0aW1lciBvZiB0aGUgY29ycmVjdCB0eXBlXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IGNsb2NrLnRpbWVyc1tpZF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGltZXIudHlwZSA9PT0gdHR5cGUgfHxcbiAgICAgICAgICAgICAgICAodGltZXIudHlwZSA9PT0gXCJUaW1lb3V0XCIgJiYgdHR5cGUgPT09IFwiSW50ZXJ2YWxcIikgfHxcbiAgICAgICAgICAgICAgICAodGltZXIudHlwZSA9PT0gXCJJbnRlcnZhbFwiICYmIHR0eXBlID09PSBcIlRpbWVvdXRcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjbG9jay50aW1lcnNbaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhciA9IGdldENsZWFySGFuZGxlcih0dHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZWR1bGUgPSBnZXRTY2hlZHVsZUhhbmRsZXIodGltZXIudHlwZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ2Fubm90IGNsZWFyIHRpbWVyOiB0aW1lciBjcmVhdGVkIHdpdGggJHtzY2hlZHVsZX0oKSBidXQgY2xlYXJlZCB3aXRoICR7Y2xlYXJ9KClgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtDb25maWd9IGNvbmZpZ1xuICAgICAqIEByZXR1cm5zIHtUaW1lcltdfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaW5zdGFsbChjbG9jaywgY29uZmlnKSB7XG4gICAgICAgIGxldCBtZXRob2QsIGksIGw7XG4gICAgICAgIGNvbnN0IGluc3RhbGxlZEhyVGltZSA9IFwiX2hydGltZVwiO1xuICAgICAgICBjb25zdCBpbnN0YWxsZWROZXh0VGljayA9IFwiX25leHRUaWNrXCI7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBtZXRob2QgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJocnRpbWVcIiAmJiBfZ2xvYmFsLnByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID0gY2xvY2tbaW5zdGFsbGVkSHJUaW1lXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcIm5leHRUaWNrXCIgJiYgX2dsb2JhbC5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzLm5leHRUaWNrID0gY2xvY2tbaW5zdGFsbGVkTmV4dFRpY2tdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicGVyZm9ybWFuY2VcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICAgICAgYF8ke21ldGhvZH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIW9yaWdpbmFsUGVyZkRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbG9iYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBfZ2xvYmFsW21ldGhvZF0gPSBjbG9ja1tgXyR7bWV0aG9kfWBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF9nbG9iYWxbbWV0aG9kXSAmJiBfZ2xvYmFsW21ldGhvZF0uaGFkT3duUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbFttZXRob2RdID0gY2xvY2tbYF8ke21ldGhvZH1gXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIF9nbG9iYWxbbWV0aG9kXTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBlc2xpbnQgbm8tZW1wdHk6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF9nbG9iYWwuY2xlYXJJbnRlcnZhbChjbG9jay5hdHRhY2hlZEludGVydmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgZXhlY3V0aW9ucyB3aGljaCB3aWxsIGNvbXBsZXRlbHkgcmVtb3ZlIHRoZXNlIHByb3BzXG4gICAgICAgIGNsb2NrLm1ldGhvZHMgPSBbXTtcblxuICAgICAgICAvLyByZXR1cm4gcGVuZGluZyB0aW1lcnMsIHRvIGVuYWJsZSBjaGVja2luZyB3aGF0IHRpbWVycyByZW1haW5lZCBvbiB1bmluc3RhbGxcbiAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoY2xvY2sudGltZXJzKS5tYXAoZnVuY3Rpb24gbWFwcGVyKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb2NrLnRpbWVyc1trZXldO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IHRoZSB0YXJnZXQgY29udGFpbmluZyB0aGUgbWV0aG9kIHRvIHJlcGxhY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIHRoZSBrZXluYW1lIG9mIHRoZSBtZXRob2Qgb24gdGhlIHRhcmdldFxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGlqYWNrTWV0aG9kKHRhcmdldCwgbWV0aG9kLCBjbG9jaykge1xuICAgICAgICBjbG9ja1ttZXRob2RdLmhhZE93blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICk7XG4gICAgICAgIGNsb2NrW2BfJHttZXRob2R9YF0gPSB0YXJnZXRbbWV0aG9kXTtcblxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkRhdGVcIikge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG1pcnJvckRhdGVQcm9wZXJ0aWVzKGNsb2NrW21ldGhvZF0sIHRhcmdldFttZXRob2RdKTtcbiAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gZGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicGVyZm9ybWFuY2VcIikge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIEpTRE9NIGhhcyBhIHJlYWQgb25seSBwZXJmb3JtYW5jZSBmaWVsZCBzbyB3ZSBoYXZlIHRvIHNhdmUvY29weSBpdCBkaWZmZXJlbnRseVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmdldCAmJlxuICAgICAgICAgICAgICAgICFvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLnNldFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICAgICAgYF8ke21ldGhvZH1gLFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgY2xvY2ssXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kLCBwZXJmRGVzY3JpcHRvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gY2xvY2tbbWV0aG9kXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9ja1ttZXRob2RdLmFwcGx5KGNsb2NrLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2xvY2tbbWV0aG9kXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRbbWV0aG9kXS5jbG9jayA9IGNsb2NrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFkdmFuY2VUaW1lRGVsdGFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb0ludGVydmFsVGljayhjbG9jaywgYWR2YW5jZVRpbWVEZWx0YSkge1xuICAgICAgICBjbG9jay50aWNrKGFkdmFuY2VUaW1lRGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtvYmplY3R9IFRpbWVyc1xuICAgICAqIEBwcm9wZXJ0eSB7c2V0VGltZW91dH0gc2V0VGltZW91dFxuICAgICAqIEBwcm9wZXJ0eSB7Y2xlYXJUaW1lb3V0fSBjbGVhclRpbWVvdXRcbiAgICAgKiBAcHJvcGVydHkge3NldEludGVydmFsfSBzZXRJbnRlcnZhbFxuICAgICAqIEBwcm9wZXJ0eSB7Y2xlYXJJbnRlcnZhbH0gY2xlYXJJbnRlcnZhbFxuICAgICAqIEBwcm9wZXJ0eSB7RGF0ZX0gRGF0ZVxuICAgICAqIEBwcm9wZXJ0eSB7U2V0SW1tZWRpYXRlPX0gc2V0SW1tZWRpYXRlXG4gICAgICogQHByb3BlcnR5IHtmdW5jdGlvbihOb2RlSW1tZWRpYXRlKTogdm9pZD19IGNsZWFySW1tZWRpYXRlXG4gICAgICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXJbXSk6bnVtYmVyW109fSBocnRpbWVcbiAgICAgKiBAcHJvcGVydHkge05leHRUaWNrPX0gbmV4dFRpY2tcbiAgICAgKiBAcHJvcGVydHkge1BlcmZvcm1hbmNlPX0gcGVyZm9ybWFuY2VcbiAgICAgKiBAcHJvcGVydHkge1JlcXVlc3RBbmltYXRpb25GcmFtZT19IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbj19IHF1ZXVlTWljcm90YXNrXG4gICAgICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOiB2b2lkPX0gY2FuY2VsQW5pbWF0aW9uRnJhbWVcbiAgICAgKiBAcHJvcGVydHkge1JlcXVlc3RJZGxlQ2FsbGJhY2s9fSByZXF1ZXN0SWRsZUNhbGxiYWNrXG4gICAgICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOiB2b2lkPX0gY2FuY2VsSWRsZUNhbGxiYWNrXG4gICAgICovXG5cbiAgICAvKiogQHR5cGUge1RpbWVyc30gKi9cbiAgICBjb25zdCB0aW1lcnMgPSB7XG4gICAgICAgIHNldFRpbWVvdXQ6IF9nbG9iYWwuc2V0VGltZW91dCxcbiAgICAgICAgY2xlYXJUaW1lb3V0OiBfZ2xvYmFsLmNsZWFyVGltZW91dCxcbiAgICAgICAgc2V0SW50ZXJ2YWw6IF9nbG9iYWwuc2V0SW50ZXJ2YWwsXG4gICAgICAgIGNsZWFySW50ZXJ2YWw6IF9nbG9iYWwuY2xlYXJJbnRlcnZhbCxcbiAgICAgICAgRGF0ZTogX2dsb2JhbC5EYXRlLFxuICAgIH07XG5cbiAgICBpZiAoc2V0SW1tZWRpYXRlUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuc2V0SW1tZWRpYXRlID0gX2dsb2JhbC5zZXRJbW1lZGlhdGU7XG4gICAgICAgIHRpbWVycy5jbGVhckltbWVkaWF0ZSA9IF9nbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG4gICAgfVxuXG4gICAgaWYgKGhydGltZVByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLmhydGltZSA9IF9nbG9iYWwucHJvY2Vzcy5ocnRpbWU7XG4gICAgfVxuXG4gICAgaWYgKG5leHRUaWNrUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMubmV4dFRpY2sgPSBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2s7XG4gICAgfVxuXG4gICAgaWYgKHBlcmZvcm1hbmNlUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMucGVyZm9ybWFuY2UgPSBfZ2xvYmFsLnBlcmZvcm1hbmNlO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBfZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB9XG5cbiAgICBpZiAocXVldWVNaWNyb3Rhc2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5xdWV1ZU1pY3JvdGFzayA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNhbmNlbEFuaW1hdGlvbkZyYW1lUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBfZ2xvYmFsLmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0SWRsZUNhbGxiYWNrUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMucmVxdWVzdElkbGVDYWxsYmFjayA9IF9nbG9iYWwucmVxdWVzdElkbGVDYWxsYmFjaztcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsSWRsZUNhbGxiYWNrUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuY2FuY2VsSWRsZUNhbGxiYWNrID0gX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2s7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxTZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRJbW1lZGlhdGUgfHwgX2dsb2JhbC5zZXRUaW1lb3V0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gW3N0YXJ0XSB0aGUgc3lzdGVtIHRpbWUgLSBub24taW50ZWdlciB2YWx1ZXMgYXJlIGZsb29yZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb3BMaW1pdF0gbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsb2NrKHN0YXJ0LCBsb29wTGltaXQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihnZXRFcG9jaChzdGFydCkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgbG9vcExpbWl0ID0gbG9vcExpbWl0IHx8IDEwMDA7XG4gICAgICAgIGxldCBuYW5vcyA9IDA7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkU3lzdGVtVGltZSA9IFswLCAwXTsgLy8gW21pbGxpcywgbmFub3JlbWFpbmRlcl1cblxuICAgICAgICBpZiAoTmF0aXZlRGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaGUgZ2xvYmFsIHNjb3BlIGRvZXNuJ3QgaGF2ZSBhIGBEYXRlYCBvYmplY3RcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Npbm9uanMvc2lub24vaXNzdWVzLzE4NTIjaXNzdWVjb21tZW50LTQxOTYyMjc4MClcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsb2NrID0ge1xuICAgICAgICAgICAgbm93OiBzdGFydCxcbiAgICAgICAgICAgIERhdGU6IGNyZWF0ZURhdGUoKSxcbiAgICAgICAgICAgIGxvb3BMaW1pdDogbG9vcExpbWl0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLkRhdGUuY2xvY2sgPSBjbG9jaztcblxuICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgIGZ1bmN0aW9uIGdldFRpbWVUb05leHRGcmFtZSgpIHtcbiAgICAgICAgICAgIHJldHVybiAxNiAtICgoY2xvY2subm93IC0gc3RhcnQpICUgMTYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICBmdW5jdGlvbiBocnRpbWUocHJldikge1xuICAgICAgICAgICAgY29uc3QgbWlsbGlzU2luY2VTdGFydCA9IGNsb2NrLm5vdyAtIGFkanVzdGVkU3lzdGVtVGltZVswXSAtIHN0YXJ0O1xuICAgICAgICAgICAgY29uc3Qgc2Vjc1NpbmNlU3RhcnQgPSBNYXRoLmZsb29yKG1pbGxpc1NpbmNlU3RhcnQgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlckluTmFub3MgPVxuICAgICAgICAgICAgICAgIChtaWxsaXNTaW5jZVN0YXJ0IC0gc2Vjc1NpbmNlU3RhcnQgKiAxZTMpICogMWU2ICtcbiAgICAgICAgICAgICAgICBuYW5vcyAtXG4gICAgICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzFdO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2WzFdID4gMWU5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIk51bWJlciBvZiBuYW5vc2Vjb25kcyBjYW4ndCBleGNlZWQgYSBiaWxsaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTZWNzID0gcHJldlswXTtcbiAgICAgICAgICAgICAgICBsZXQgbmFub0RpZmYgPSByZW1haW5kZXJJbk5hbm9zIC0gcHJldlsxXTtcbiAgICAgICAgICAgICAgICBsZXQgc2VjRGlmZiA9IHNlY3NTaW5jZVN0YXJ0IC0gb2xkU2VjcztcblxuICAgICAgICAgICAgICAgIGlmIChuYW5vRGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmFub0RpZmYgKz0gMWU5O1xuICAgICAgICAgICAgICAgICAgICBzZWNEaWZmIC09IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzZWNEaWZmLCBuYW5vRGlmZl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW3NlY3NTaW5jZVN0YXJ0LCByZW1haW5kZXJJbk5hbm9zXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChocnRpbWVCaWdpbnRQcmVzZW50KSB7XG4gICAgICAgICAgICBocnRpbWUuYmlnaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaHJ0aW1lKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJpZ0ludChwYXJ0c1swXSkgKiBCaWdJbnQoMWU5KSArIEJpZ0ludChwYXJ0c1sxXSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gZnVuY3Rpb24gcmVxdWVzdElkbGVDYWxsYmFjayhcbiAgICAgICAgICAgIGZ1bmMsXG4gICAgICAgICAgICB0aW1lb3V0XG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IHRpbWVUb05leHRJZGxlUGVyaW9kID0gMDtcblxuICAgICAgICAgICAgaWYgKGNsb2NrLmNvdW50VGltZXJzKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGltZVRvTmV4dElkbGVQZXJpb2QgPSA1MDsgLy8gY29uc3QgZm9yIG5vd1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgICAgICAgICBkZWxheTpcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRpbWVvdXQgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGltZVRvTmV4dElkbGVQZXJpb2RcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5taW4odGltZW91dCwgdGltZVRvTmV4dElkbGVQZXJpb2QpLFxuICAgICAgICAgICAgICAgIGlkbGVDYWxsYmFjazogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHJlc3VsdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suY2FuY2VsSWRsZUNhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsSWRsZUNhbGxiYWNrKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIklkbGVDYWxsYmFja1wiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gc2V0VGltZW91dChmdW5jLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICAgICAgZGVsYXk6IHRpbWVvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgdXRpbFByb21pc2lmeSkge1xuICAgICAgICAgICAgY2xvY2suc2V0VGltZW91dFtcbiAgICAgICAgICAgICAgICB1dGlsUHJvbWlzaWZ5LmN1c3RvbVxuICAgICAgICAgICAgXSA9IGZ1bmN0aW9uIHByb21pc2lmaWVkU2V0VGltZW91dCh0aW1lb3V0LCBhcmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiBzZXRUaW1lb3V0RXhlY3V0b3IoXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmM6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbYXJnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhclRpbWVvdXQodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiVGltZW91dFwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5uZXh0VGljayA9IGZ1bmN0aW9uIG5leHRUaWNrKGZ1bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnF1ZXVlSm9iKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBpc05lYXJJbmZpbml0ZUxpbWl0ID8gbmV3IEVycm9yKCkgOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucXVldWVNaWNyb3Rhc2sgPSBmdW5jdGlvbiBxdWV1ZU1pY3JvdGFzayhmdW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2submV4dFRpY2soZnVuYyk7IC8vIGV4cGxpY2l0bHkgZHJvcCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnNldEludGVydmFsID0gZnVuY3Rpb24gc2V0SW50ZXJ2YWwoZnVuYywgdGltZW91dCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgIGludGVydmFsOiB0aW1lb3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFySW50ZXJ2YWwodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW50ZXJ2YWxcIik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHNldEltbWVkaWF0ZVByZXNlbnQpIHtcbiAgICAgICAgICAgIGNsb2NrLnNldEltbWVkaWF0ZSA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmdW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHV0aWxQcm9taXNpZnkpIHtcbiAgICAgICAgICAgICAgICBjbG9jay5zZXRJbW1lZGlhdGVbXG4gICAgICAgICAgICAgICAgICAgIHV0aWxQcm9taXNpZnkuY3VzdG9tXG4gICAgICAgICAgICAgICAgXSA9IGZ1bmN0aW9uIHByb21pc2lmaWVkU2V0SW1tZWRpYXRlKGFyZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiBzZXRJbW1lZGlhdGVFeGVjdXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmM6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW2FyZ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsb2NrLmNsZWFySW1tZWRpYXRlID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUodGltZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkltbWVkaWF0ZVwiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5jb3VudFRpbWVycyA9IGZ1bmN0aW9uIGNvdW50VGltZXJzKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMgfHwge30pLmxlbmd0aCArXG4gICAgICAgICAgICAgICAgKGNsb2NrLmpvYnMgfHwgW10pLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGRlbGF5OiBnZXRUaW1lVG9OZXh0RnJhbWUoKSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbY2xvY2subm93ICsgZ2V0VGltZVRvTmV4dEZyYW1lKCldLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHJlc3VsdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJBbmltYXRpb25GcmFtZVwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5ydW5NaWNyb3Rhc2tzID0gZnVuY3Rpb24gcnVuTWljcm90YXNrcygpIHtcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHRpY2tWYWx1ZSBtaWxsaXNlY29uZHMgb3IgYSBzdHJpbmcgcGFyc2VhYmxlIGJ5IHBhcnNlVGltZVxuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQXN5bmNcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RcbiAgICAgICAgICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9IHdpbGwgcmV0dXJuIHRoZSBuZXcgYG5vd2AgdmFsdWUgb3Igbm90aGluZyBmb3IgYXN5bmNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGRvVGljayh0aWNrVmFsdWUsIGlzQXN5bmMsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc3QgbXNGbG9hdCA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRpY2tWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICA/IHRpY2tWYWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IHBhcnNlVGltZSh0aWNrVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgbXMgPSBNYXRoLmZsb29yKG1zRmxvYXQpO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gbmFub1JlbWFpbmRlcihtc0Zsb2F0KTtcbiAgICAgICAgICAgIGxldCBuYW5vc1RvdGFsID0gbmFub3MgKyByZW1haW5kZXI7XG4gICAgICAgICAgICBsZXQgdGlja1RvID0gY2xvY2subm93ICsgbXM7XG5cbiAgICAgICAgICAgIGlmIChtc0Zsb2F0IDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOZWdhdGl2ZSB0aWNrcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYWRqdXN0IGZvciBwb3NpdGl2ZSBvdmVyZmxvd1xuICAgICAgICAgICAgaWYgKG5hbm9zVG90YWwgPj0gMWU2KSB7XG4gICAgICAgICAgICAgICAgdGlja1RvICs9IDE7XG4gICAgICAgICAgICAgICAgbmFub3NUb3RhbCAtPSAxZTY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbm9zID0gbmFub3NUb3RhbDtcbiAgICAgICAgICAgIGxldCB0aWNrRnJvbSA9IGNsb2NrLm5vdztcbiAgICAgICAgICAgIGxldCBwcmV2aW91cyA9IGNsb2NrLm5vdztcbiAgICAgICAgICAgIC8vIEVTTGludCBmYWlscyB0byBkZXRlY3QgdGhpcyBjb3JyZWN0bHlcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHByZWZlci1jb25zdCAqL1xuICAgICAgICAgICAgbGV0IHRpbWVyLFxuICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uLFxuICAgICAgICAgICAgICAgIG9sZE5vdyxcbiAgICAgICAgICAgICAgICBuZXh0UHJvbWlzZVRpY2ssXG4gICAgICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2ssXG4gICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbDtcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLWNvbnN0ICovXG5cbiAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBwZXJmb3JtIG1pY3JvdGFza3NcbiAgICAgICAgICAgIG9sZE5vdyA9IGNsb2NrLm5vdztcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgaWYgKG9sZE5vdyAhPT0gY2xvY2subm93KSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyBtaWNyb3Rhc2sgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgdGlja1RvICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgICAgICAgICAgZnVuY3Rpb24gZG9UaWNrSW5uZXIoKSB7XG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBlYWNoIHRpbWVyIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgICAgICAgICAgICB0aW1lciA9IGZpcnN0VGltZXJJblJhbmdlKGNsb2NrLCB0aWNrRnJvbSwgdGlja1RvKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgICAgIHdoaWxlICh0aW1lciAmJiB0aWNrRnJvbSA8PSB0aWNrVG8pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsb2NrLnRpbWVyc1t0aW1lci5pZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tGcm9tID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEV4Y2VwdGlvbiA9IGZpcnN0RXhjZXB0aW9uIHx8IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluaXNoIHVwIGFmdGVyIG5hdGl2ZSBzZXRJbW1lZGlhdGUgY2FsbGJhY2sgdG8gYWxsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgbmF0aXZlIGVzNiBwcm9taXNlcyB0byBwcm9jZXNzIHRoZWlyIGNhbGxiYWNrcyBhZnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhY2ggdGltZXIgZmlyZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KG5leHRQcm9taXNlVGljayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gcHJvY2Vzcy5uZXh0VGljaygpcyBhZ2FpblxuICAgICAgICAgICAgICAgIG9sZE5vdyA9IGNsb2NrLm5vdztcbiAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyBwcm9jZXNzLm5leHRUaWNrKCkgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvLyBjb3JuZXIgY2FzZTogZHVyaW5nIHJ1bkpvYnMgbmV3IHRpbWVycyB3ZXJlIHNjaGVkdWxlZCB3aGljaCBjb3VsZCBiZSBpbiB0aGUgcmFuZ2UgW2Nsb2NrLm5vdywgdGlja1RvXVxuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sudGljayh0aWNrVG8gLSBjbG9jay5ub3cpOyAvLyBkbyBpdCBhbGwgYWdhaW4gLSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVxdWVzdGVkIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHRpbWVycyByZW1haW5pbmcgaW4gdGhlIHJlcXVlc3RlZCByYW5nZTogbW92ZSB0aGUgY2xvY2sgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aWNrVG87XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIG5hbm9zXG4gICAgICAgICAgICAgICAgICAgIG5hbm9zID0gbmFub3NUb3RhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGZpcnN0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dFByb21pc2VUaWNrID1cbiAgICAgICAgICAgICAgICBpc0FzeW5jICYmXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RUaW1lckNhbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvVGlja0lubmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbXBlbnNhdGlvbkNoZWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbXBlbnNhdGUgZm9yIGFueSBzZXRTeXN0ZW1UaW1lKCkgY2FsbCBkdXJpbmcgdGltZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IGZpcnN0VGltZXJJblJhbmdlKGNsb2NrLCBwcmV2aW91cywgdGlja1RvKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91cyA9IHRpY2tGcm9tO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGRvVGlja0lubmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB0aWNrVmFsdWUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvciBhIGh1bWFuLXJlYWRhYmxlIHZhbHVlIGxpa2UgXCIwMToxMToxNVwiXG4gICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHdpbGwgcmV0dXJuIHRoZSBuZXcgYG5vd2AgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGNsb2NrLnRpY2sgPSBmdW5jdGlvbiB0aWNrKHRpY2tWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvVGljayh0aWNrVmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRpY2tWYWx1ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9yIGEgaHVtYW4tcmVhZGFibGUgdmFsdWUgbGlrZSBcIjAxOjExOjE1XCJcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjbG9jay50aWNrQXN5bmMgPSBmdW5jdGlvbiB0aWNrQXN5bmModGlja1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1RpY2sodGlja1ZhbHVlLCB0cnVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2submV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gZmlyc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpbWVyLmNhbGxBdDtcbiAgICAgICAgICAgICAgICBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKTtcbiAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLm5leHRBc3luYyA9IGZ1bmN0aW9uIG5leHRBc3luYygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gZmlyc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpbWVyLmNhbGxBdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsVGltZXIoY2xvY2ssIHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5ydW5BbGwgPSBmdW5jdGlvbiBydW5BbGwoKSB7XG4gICAgICAgICAgICBsZXQgbnVtVGltZXJzLCBpO1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xvY2subG9vcExpbWl0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgICAgICByZXNldElzTmVhckluZmluaXRlTGltaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrLm5vdztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBudW1UaW1lcnMgPSBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobnVtVGltZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcbiAgICAgICAgICAgICAgICBjaGVja0lzTmVhckluZmluaXRlTGltaXQoY2xvY2ssIGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBleGNlc3NKb2IgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIHRocm93IGdldEluZmluaXRlTG9vcEVycm9yKGNsb2NrLCBleGNlc3NKb2IpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJ1blRvRnJhbWUgPSBmdW5jdGlvbiBydW5Ub0ZyYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb2NrLnRpY2soZ2V0VGltZVRvTmV4dEZyYW1lKCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjbG9jay5ydW5BbGxBc3luYyA9IGZ1bmN0aW9uIHJ1bkFsbEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvUnVuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtVGltZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGNsb2NrLmxvb3BMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldElzTmVhckluZmluaXRlTGltaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1UaW1lcnMgPSBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1UaW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldElzTmVhckluZmluaXRlTGltaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5uZXh0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9SdW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGNlc3NKb2IgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGdldEluZmluaXRlTG9vcEVycm9yKGNsb2NrLCBleGNlc3NKb2IpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJ1blRvTGFzdCA9IGZ1bmN0aW9uIHJ1blRvTGFzdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gbGFzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGljayh0aW1lci5jYWxsQXQgLSBjbG9jay5ub3cpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjbG9jay5ydW5Ub0xhc3RBc3luYyA9IGZ1bmN0aW9uIHJ1blRvTGFzdEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBsYXN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2sudGlja0FzeW5jKHRpbWVyLmNhbGxBdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgIG5hbm9zID0gMDtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICAgICAgY2xvY2subm93ID0gc3RhcnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0U3lzdGVtVGltZSA9IGZ1bmN0aW9uIHNldFN5c3RlbVRpbWUoc3lzdGVtVGltZSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRpbWUgZGlmZmVyZW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3Tm93ID0gZ2V0RXBvY2goc3lzdGVtVGltZSk7XG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gbmV3Tm93IC0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IGlkLCB0aW1lcjtcblxuICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdID0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdICsgZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIGFkanVzdGVkU3lzdGVtVGltZVsxXSA9IGFkanVzdGVkU3lzdGVtVGltZVsxXSArIG5hbm9zO1xuICAgICAgICAgICAgLy8gdXBkYXRlICdzeXN0ZW0gY2xvY2snXG4gICAgICAgICAgICBjbG9jay5ub3cgPSBuZXdOb3c7XG4gICAgICAgICAgICBuYW5vcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aW1lcnMgYW5kIGludGVydmFscyB0byBrZWVwIHRoZW0gc3RhYmxlXG4gICAgICAgICAgICBmb3IgKGlkIGluIGNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgIGlmIChjbG9jay50aW1lcnMuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuY3JlYXRlZEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLmNhbGxBdCArPSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGVyZm9ybWFuY2VQcmVzZW50KSB7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiBGYWtlVGltZXJzTm93KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhydCA9IGhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbGxpcyA9IGhydFswXSAqIDEwMDAgKyBocnRbMV0gLyAxZTY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbGxpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suaHJ0aW1lID0gaHJ0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29uZmlnPX0gW2NvbmZpZ10gT3B0aW9uYWwgY29uZmlnXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3RhbGwoY29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICBjb25maWcgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzLmluc3RhbGwgY2FsbGVkIHdpdGggJHtTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgICAgICl9IGluc3RhbGwgcmVxdWlyZXMgYW4gb2JqZWN0IHBhcmFtZXRlcmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgY29uZmlnID0gdHlwZW9mIGNvbmZpZyAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbmZpZyA6IHt9O1xuICAgICAgICBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPSBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgfHwgZmFsc2U7XG4gICAgICAgIGNvbmZpZy5hZHZhbmNlVGltZURlbHRhID0gY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEgfHwgMjA7XG4gICAgICAgIGNvbmZpZy5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9XG4gICAgICAgICAgICBjb25maWcuc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnMgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy50YXJnZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJjb25maWcudGFyZ2V0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFVzZSBgd2l0aEdsb2JhbCh0YXJnZXQpYCBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gY3JlYXRlQ2xvY2soY29uZmlnLm5vdywgY29uZmlnLmxvb3BMaW1pdCk7XG4gICAgICAgIGNsb2NrLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID0gY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzO1xuXG4gICAgICAgIGNsb2NrLnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2subWV0aG9kcyA9IGNvbmZpZy50b0Zha2UgfHwgW107XG5cbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkbyBub3QgZmFrZSBuZXh0VGljayBieSBkZWZhdWx0IC0gR2l0SHViIzEyNlxuICAgICAgICAgICAgY2xvY2subWV0aG9kcyA9IE9iamVjdC5rZXlzKHRpbWVycykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ICE9PSBcIm5leHRUaWNrXCIgJiYga2V5ICE9PSBcInF1ZXVlTWljcm90YXNrXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsVGljayA9IGRvSW50ZXJ2YWxUaWNrLmJpbmQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBfZ2xvYmFsLnNldEludGVydmFsKFxuICAgICAgICAgICAgICAgIGludGVydmFsVGljayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwgPSBpbnRlcnZhbElkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHMuaW5jbHVkZXMoXCJwZXJmb3JtYW5jZVwiKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvdG8gPSAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoYXNQZXJmb3JtYW5jZVByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dsb2JhbC5QZXJmb3JtYW5jZS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoYXNQZXJmb3JtYW5jZUNvbnN0cnVjdG9yUHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZ2xvYmFsLnBlcmZvcm1hbmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT09IFwibm93XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlW25hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmluZGV4T2YoXCJnZXRFbnRyaWVzXCIpID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTk9PUF9BUlJBWVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5PT1A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvbmZpZy50b0Zha2UgfHwgW10pLmluY2x1ZGVzKFwicGVyZm9ybWFuY2VcIikpIHtcbiAgICAgICAgICAgICAgICAvLyB1c2VyIGV4cGxpY2l0bHkgdHJpZWQgdG8gZmFrZSBwZXJmb3JtYW5jZSB3aGVuIG5vdCBwcmVzZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIm5vbi1leGlzdGVudCBwZXJmb3JtYW5jZSBvYmplY3QgY2Fubm90IGJlIGZha2VkXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICAgICAgaWYgKG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaGlqYWNrTWV0aG9kKF9nbG9iYWwucHJvY2VzcywgbmFtZU9mTWV0aG9kVG9SZXBsYWNlLCBjbG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwibmV4dFRpY2tcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QoX2dsb2JhbC5wcm9jZXNzLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZChfZ2xvYmFsLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVyczogdGltZXJzLFxuICAgICAgICBjcmVhdGVDbG9jazogY3JlYXRlQ2xvY2ssXG4gICAgICAgIGluc3RhbGw6IGluc3RhbGwsXG4gICAgICAgIHdpdGhHbG9iYWw6IHdpdGhHbG9iYWwsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGYWtlVGltZXJzXG4gKiBAcHJvcGVydHkge1RpbWVyc30gdGltZXJzXG4gKiBAcHJvcGVydHkge2NyZWF0ZUNsb2NrfSBjcmVhdGVDbG9ja1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaW5zdGFsbFxuICogQHByb3BlcnR5IHt3aXRoR2xvYmFsfSB3aXRoR2xvYmFsXG4gKi9cblxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKiBAdHlwZSB7RmFrZVRpbWVyc30gKi9cbmNvbnN0IGRlZmF1bHRJbXBsZW1lbnRhdGlvbiA9IHdpdGhHbG9iYWwoZ2xvYmFsT2JqZWN0KTtcblxuZXhwb3J0cy50aW1lcnMgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24udGltZXJzO1xuZXhwb3J0cy5jcmVhdGVDbG9jayA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5jcmVhdGVDbG9jaztcbmV4cG9ydHMuaW5zdGFsbCA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5pbnN0YWxsO1xuZXhwb3J0cy53aXRoR2xvYmFsID0gd2l0aEdsb2JhbDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQVJSQVlfVFlQRVMgPSBbXG4gICAgQXJyYXksXG4gICAgSW50OEFycmF5LFxuICAgIFVpbnQ4QXJyYXksXG4gICAgVWludDhDbGFtcGVkQXJyYXksXG4gICAgSW50MTZBcnJheSxcbiAgICBVaW50MTZBcnJheSxcbiAgICBJbnQzMkFycmF5LFxuICAgIFVpbnQzMkFycmF5LFxuICAgIEZsb2F0MzJBcnJheSxcbiAgICBGbG9hdDY0QXJyYXksXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFSUkFZX1RZUEVTO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBkZWVwRXF1YWwgPSByZXF1aXJlKFwiLi9kZWVwLWVxdWFsXCIpLnVzZShjcmVhdGVNYXRjaGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxudmFyIGV2ZXJ5ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZXZlcnk7XG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xudmFyIGdldCA9IHJlcXVpcmUoXCJsb2Rhc2guZ2V0XCIpO1xudmFyIGl0ZXJhYmxlVG9TdHJpbmcgPSByZXF1aXJlKFwiLi9pdGVyYWJsZS10by1zdHJpbmdcIik7XG52YXIgb2JqZWN0UHJvdG8gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdDtcbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbnZhciBhc3NlcnRNYXRjaGVyID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1hdGNoZXJcIik7XG52YXIgYXNzZXJ0TWV0aG9kRXhpc3RzID0gcmVxdWlyZShcIi4vY3JlYXRlLW1hdGNoZXIvYXNzZXJ0LW1ldGhvZC1leGlzdHNcIik7XG52YXIgYXNzZXJ0VHlwZSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL2Fzc2VydC10eXBlXCIpO1xudmFyIGlzSXRlcmFibGUgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9pcy1pdGVyYWJsZVwiKTtcbnZhciBpc01hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlci9pcy1tYXRjaGVyXCIpO1xuXG52YXIgbWF0Y2hlclByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL21hdGNoZXItcHJvdG90eXBlXCIpO1xuXG52YXIgYXJyYXlJbmRleE9mID0gYXJyYXlQcm90by5pbmRleE9mO1xudmFyIHNvbWUgPSBhcnJheVByb3RvLnNvbWU7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbnZhciBUWVBFX01BUCA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1tYXRjaGVyL3R5cGUtbWFwXCIpKGNyZWF0ZU1hdGNoZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdGNoZXIgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGV4cGVjdGF0aW9uXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uY3JlYXRlTWF0Y2hlclxuICogQHBhcmFtIHsqfSBleHBlY3RhdGlvbiBBbiBleHBlY3R0YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEEgbWVzc2FnZSBmb3IgdGhlIGV4cGVjdGF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBIG1hdGNoZXIgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoZXIoZXhwZWN0YXRpb24sIG1lc3NhZ2UpIHtcbiAgICB2YXIgbSA9IE9iamVjdC5jcmVhdGUobWF0Y2hlclByb3RvdHlwZSk7XG4gICAgdmFyIHR5cGUgPSB0eXBlT2YoZXhwZWN0YXRpb24pO1xuXG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWVzc2FnZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWVzc2FnZSBzaG91bGQgYmUgYSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgRXhwZWN0ZWQgMSBvciAyIGFyZ3VtZW50cywgcmVjZWl2ZWQgJHthcmd1bWVudHMubGVuZ3RofWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSBpbiBUWVBFX01BUCkge1xuICAgICAgICBUWVBFX01BUFt0eXBlXShtLCBleHBlY3RhdGlvbiwgbWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGF0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIW0ubWVzc2FnZSkge1xuICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuY3JlYXRlTWF0Y2hlci5pc01hdGNoZXIgPSBpc01hdGNoZXI7XG5cbmNyZWF0ZU1hdGNoZXIuYW55ID0gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG59LCBcImFueVwiKTtcblxuY3JlYXRlTWF0Y2hlci5kZWZpbmVkID0gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgcmV0dXJuIGFjdHVhbCAhPT0gbnVsbCAmJiBhY3R1YWwgIT09IHVuZGVmaW5lZDtcbn0sIFwiZGVmaW5lZFwiKTtcblxuY3JlYXRlTWF0Y2hlci50cnV0aHkgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICByZXR1cm4gQm9vbGVhbihhY3R1YWwpO1xufSwgXCJ0cnV0aHlcIik7XG5cbmNyZWF0ZU1hdGNoZXIuZmFsc3kgPSBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICByZXR1cm4gIWFjdHVhbDtcbn0sIFwiZmFsc3lcIik7XG5cbmNyZWF0ZU1hdGNoZXIuc2FtZSA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uID09PSBhY3R1YWw7XG4gICAgfSwgYHNhbWUoJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmluID0gZnVuY3Rpb24gKGFycmF5T2ZFeHBlY3RhdGlvbnMpIHtcbiAgICBpZiAodHlwZU9mKGFycmF5T2ZFeHBlY3RhdGlvbnMpICE9PSBcImFycmF5XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFycmF5IGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIHNvbWUoYXJyYXlPZkV4cGVjdGF0aW9ucywgZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24gPT09IGFjdHVhbDtcbiAgICAgICAgfSk7XG4gICAgfSwgYGluKCR7dmFsdWVUb1N0cmluZyhhcnJheU9mRXhwZWN0YXRpb25zKX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLnR5cGVPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgYXNzZXJ0VHlwZSh0eXBlLCBcInN0cmluZ1wiLCBcInR5cGVcIik7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gdHlwZU9mKGFjdHVhbCkgPT09IHR5cGU7XG4gICAgfSwgYHR5cGVPZihcIiR7dHlwZX1cIilgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgICB0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBTeW1ib2wuaGFzSW5zdGFuY2UgPT09IFwidW5kZWZpbmVkXCJcbiAgICApIHtcbiAgICAgICAgYXNzZXJ0VHlwZSh0eXBlLCBcImZ1bmN0aW9uXCIsIFwidHlwZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnRNZXRob2RFeGlzdHMoXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgU3ltYm9sLmhhc0luc3RhbmNlLFxuICAgICAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgICAgICBcIltTeW1ib2wuaGFzSW5zdGFuY2VdXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gYWN0dWFsIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9LCBgaW5zdGFuY2VPZigke2Z1bmN0aW9uTmFtZSh0eXBlKSB8fCBvYmplY3RUb1N0cmluZyh0eXBlKX0pYCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm9wZXJ0eSBtYXRjaGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BlcnR5VGVzdCBBIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIHByb3BlcnR5IGFnYWluc3QgYSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VQcmVmaXggQSBwcmVmaXggdG8gdXNlIGZvciBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIG1hdGNoZXJcbiAqIEByZXR1cm5zIHtvYmplY3R9IEEgbWF0Y2hlclxuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIocHJvcGVydHlUZXN0LCBtZXNzYWdlUHJlZml4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgICAgYXNzZXJ0VHlwZShwcm9wZXJ0eSwgXCJzdHJpbmdcIiwgXCJwcm9wZXJ0eVwiKTtcbiAgICAgICAgdmFyIG9ubHlQcm9wZXJ0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgICAgIHZhciBtZXNzYWdlID0gYCR7bWVzc2FnZVByZWZpeH0oXCIke3Byb3BlcnR5fVwiYDtcbiAgICAgICAgaWYgKCFvbmx5UHJvcGVydHkpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCwgJHt2YWx1ZVRvU3RyaW5nKHZhbHVlKX1gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gXCIpXCI7XG4gICAgICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhY3R1YWwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICFwcm9wZXJ0eVRlc3QoYWN0dWFsLCBwcm9wZXJ0eSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvbmx5UHJvcGVydHkgfHwgZGVlcEVxdWFsKGFjdHVhbFtwcm9wZXJ0eV0sIHZhbHVlKTtcbiAgICAgICAgfSwgbWVzc2FnZSk7XG4gICAgfTtcbn1cblxuY3JlYXRlTWF0Y2hlci5oYXMgPSBjcmVhdGVQcm9wZXJ0eU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCwgcHJvcGVydHkpIHtcbiAgICBpZiAodHlwZW9mIGFjdHVhbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gcHJvcGVydHkgaW4gYWN0dWFsO1xuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsW3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkO1xufSwgXCJoYXNcIik7XG5cbmNyZWF0ZU1hdGNoZXIuaGFzT3duID0gY3JlYXRlUHJvcGVydHlNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5KGFjdHVhbCwgcHJvcGVydHkpO1xufSwgXCJoYXNPd25cIik7XG5cbmNyZWF0ZU1hdGNoZXIuaGFzTmVzdGVkID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgIGFzc2VydFR5cGUocHJvcGVydHksIFwic3RyaW5nXCIsIFwicHJvcGVydHlcIik7XG4gICAgdmFyIG9ubHlQcm9wZXJ0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDE7XG4gICAgdmFyIG1lc3NhZ2UgPSBgaGFzTmVzdGVkKFwiJHtwcm9wZXJ0eX1cImA7XG4gICAgaWYgKCFvbmx5UHJvcGVydHkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgLCAke3ZhbHVlVG9TdHJpbmcodmFsdWUpfWA7XG4gICAgfVxuICAgIG1lc3NhZ2UgKz0gXCIpXCI7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhY3R1YWwgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgYWN0dWFsID09PSBudWxsIHx8XG4gICAgICAgICAgICBnZXQoYWN0dWFsLCBwcm9wZXJ0eSkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb25seVByb3BlcnR5IHx8IGRlZXBFcXVhbChnZXQoYWN0dWFsLCBwcm9wZXJ0eSksIHZhbHVlKTtcbiAgICB9LCBtZXNzYWdlKTtcbn07XG5cbnZhciBqc29uUGFyc2VSZXN1bHRUeXBlcyA9IHtcbiAgICBudWxsOiB0cnVlLFxuICAgIGJvb2xlYW46IHRydWUsXG4gICAgbnVtYmVyOiB0cnVlLFxuICAgIHN0cmluZzogdHJ1ZSxcbiAgICBvYmplY3Q6IHRydWUsXG4gICAgYXJyYXk6IHRydWUsXG59O1xuY3JlYXRlTWF0Y2hlci5qc29uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCFqc29uUGFyc2VSZXN1bHRUeXBlc1t0eXBlT2YodmFsdWUpXSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgY2Fubm90IGJlIHRoZSByZXN1bHQgb2YgSlNPTi5wYXJzZVwiKTtcbiAgICB9XG4gICAgdmFyIG1lc3NhZ2UgPSBganNvbigke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgXCIpfSlgO1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoYWN0dWFsKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWwocGFyc2VkLCB2YWx1ZSk7XG4gICAgfSwgbWVzc2FnZSk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmV2ZXJ5ID0gZnVuY3Rpb24gKHByZWRpY2F0ZSkge1xuICAgIGFzc2VydE1hdGNoZXIocHJlZGljYXRlKTtcblxuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgaWYgKHR5cGVPZihhY3R1YWwpID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlcnkoT2JqZWN0LmtleXMoYWN0dWFsKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUudGVzdChhY3R1YWxba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbCkgJiZcbiAgICAgICAgICAgIGV2ZXJ5KGFjdHVhbCwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlLnRlc3QoZWxlbWVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBldmVyeSgke3ByZWRpY2F0ZS5tZXNzYWdlfSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc29tZSA9IGZ1bmN0aW9uIChwcmVkaWNhdGUpIHtcbiAgICBhc3NlcnRNYXRjaGVyKHByZWRpY2F0ZSk7XG5cbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIGlmICh0eXBlT2YoYWN0dWFsKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuICFldmVyeShPYmplY3Qua2V5cyhhY3R1YWwpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUudGVzdChhY3R1YWxba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbCkgJiZcbiAgICAgICAgICAgICFldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUudGVzdChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYHNvbWUoJHtwcmVkaWNhdGUubWVzc2FnZX0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5ID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJhcnJheVwiKTtcblxuY3JlYXRlTWF0Y2hlci5hcnJheS5kZWVwRXF1YWxzID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBDb21wYXJpbmcgbGVuZ3RocyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gc3BvdCBhIGRpZmZlcmVuY2UgYmVmb3JlIGl0ZXJhdGluZyB0aHJvdWdoIGV2ZXJ5IGl0ZW1cbiAgICAgICAgdmFyIHNhbWVMZW5ndGggPSBhY3R1YWwubGVuZ3RoID09PSBleHBlY3RhdGlvbi5sZW5ndGg7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBzYW1lTGVuZ3RoICYmXG4gICAgICAgICAgICBldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGV4cGVjdGF0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZU9mKGV4cGVjdGVkKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVPZihlbGVtZW50KSA9PT0gXCJhcnJheVwiXG4gICAgICAgICAgICAgICAgICAgID8gY3JlYXRlTWF0Y2hlci5hcnJheS5kZWVwRXF1YWxzKGV4cGVjdGVkKS50ZXN0KGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgIDogZGVlcEVxdWFsKGV4cGVjdGVkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGRlZXBFcXVhbHMoWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcImFycmF5XCIgJiZcbiAgICAgICAgICAgIGV2ZXJ5KGV4cGVjdGF0aW9uLCBmdW5jdGlvbiAoZXhwZWN0ZWRFbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWxbaW5kZXhdID09PSBleHBlY3RlZEVsZW1lbnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBzdGFydHNXaXRoKFske2l0ZXJhYmxlVG9TdHJpbmcoZXhwZWN0YXRpb24pfV0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLmFycmF5LmVuZHNXaXRoID0gZnVuY3Rpb24gKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBUaGlzIGluZGljYXRlcyB0aGUgaW5kZXggaW4gd2hpY2ggd2Ugc2hvdWxkIHN0YXJ0IG1hdGNoaW5nXG4gICAgICAgIHZhciBvZmZzZXQgPSBhY3R1YWwubGVuZ3RoIC0gZXhwZWN0YXRpb24ubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0dWFsW29mZnNldCArIGluZGV4XSA9PT0gZXhwZWN0ZWRFbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgZW5kc1dpdGgoWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuYXJyYXkuY29udGFpbnMgPSBmdW5jdGlvbiAoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGV4cGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUluZGV4T2YoYWN0dWFsLCBleHBlY3RlZEVsZW1lbnQpICE9PSAtMTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGNvbnRhaW5zKFske2l0ZXJhYmxlVG9TdHJpbmcoZXhwZWN0YXRpb24pfV0pYCk7XG59O1xuXG5jcmVhdGVNYXRjaGVyLm1hcCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwibWFwXCIpO1xuXG5jcmVhdGVNYXRjaGVyLm1hcC5kZWVwRXF1YWxzID0gZnVuY3Rpb24gbWFwRGVlcEVxdWFscyhleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgLy8gQ29tcGFyaW5nIGxlbmd0aHMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIHNwb3QgYSBkaWZmZXJlbmNlIGJlZm9yZSBpdGVyYXRpbmcgdGhyb3VnaCBldmVyeSBpdGVtXG4gICAgICAgIHZhciBzYW1lTGVuZ3RoID0gYWN0dWFsLnNpemUgPT09IGV4cGVjdGF0aW9uLnNpemU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJtYXBcIiAmJlxuICAgICAgICAgICAgc2FtZUxlbmd0aCAmJlxuICAgICAgICAgICAgZXZlcnkoYWN0dWFsLCBmdW5jdGlvbiAoZWxlbWVudCwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmhhcyhrZXkpICYmIGV4cGVjdGF0aW9uLmdldChrZXkpID09PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgZGVlcEVxdWFscyhNYXBbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5tYXAuY29udGFpbnMgPSBmdW5jdGlvbiBtYXBDb250YWlucyhleHBlY3RhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVNYXRjaGVyKGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcIm1hcFwiICYmXG4gICAgICAgICAgICBldmVyeShleHBlY3RhdGlvbiwgZnVuY3Rpb24gKGVsZW1lbnQsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3R1YWwuaGFzKGtleSkgJiYgYWN0dWFsLmdldChrZXkpID09PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBgY29udGFpbnMoTWFwWyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc2V0ID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJzZXRcIik7XG5cbmNyZWF0ZU1hdGNoZXIuc2V0LmRlZXBFcXVhbHMgPSBmdW5jdGlvbiBzZXREZWVwRXF1YWxzKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU1hdGNoZXIoZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAvLyBDb21wYXJpbmcgbGVuZ3RocyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gc3BvdCBhIGRpZmZlcmVuY2UgYmVmb3JlIGl0ZXJhdGluZyB0aHJvdWdoIGV2ZXJ5IGl0ZW1cbiAgICAgICAgdmFyIHNhbWVMZW5ndGggPSBhY3R1YWwuc2l6ZSA9PT0gZXhwZWN0YXRpb24uc2l6ZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVPZihhY3R1YWwpID09PSBcInNldFwiICYmXG4gICAgICAgICAgICBzYW1lTGVuZ3RoICYmXG4gICAgICAgICAgICBldmVyeShhY3R1YWwsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uLmhhcyhlbGVtZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSwgYGRlZXBFcXVhbHMoU2V0WyR7aXRlcmFibGVUb1N0cmluZyhleHBlY3RhdGlvbil9XSlgKTtcbn07XG5cbmNyZWF0ZU1hdGNoZXIuc2V0LmNvbnRhaW5zID0gZnVuY3Rpb24gc2V0Q29udGFpbnMoZXhwZWN0YXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlT2YoYWN0dWFsKSA9PT0gXCJzZXRcIiAmJlxuICAgICAgICAgICAgZXZlcnkoZXhwZWN0YXRpb24sIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbC5oYXMoZWxlbWVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIGBjb250YWlucyhTZXRbJHtpdGVyYWJsZVRvU3RyaW5nKGV4cGVjdGF0aW9uKX1dKWApO1xufTtcblxuY3JlYXRlTWF0Y2hlci5ib29sID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJib29sZWFuXCIpO1xuY3JlYXRlTWF0Y2hlci5udW1iZXIgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcIm51bWJlclwiKTtcbmNyZWF0ZU1hdGNoZXIuc3RyaW5nID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJzdHJpbmdcIik7XG5jcmVhdGVNYXRjaGVyLm9iamVjdCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwib2JqZWN0XCIpO1xuY3JlYXRlTWF0Y2hlci5mdW5jID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJmdW5jdGlvblwiKTtcbmNyZWF0ZU1hdGNoZXIucmVnZXhwID0gY3JlYXRlTWF0Y2hlci50eXBlT2YoXCJyZWdleHBcIik7XG5jcmVhdGVNYXRjaGVyLmRhdGUgPSBjcmVhdGVNYXRjaGVyLnR5cGVPZihcImRhdGVcIik7XG5jcmVhdGVNYXRjaGVyLnN5bWJvbCA9IGNyZWF0ZU1hdGNoZXIudHlwZU9mKFwic3ltYm9sXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZU1hdGNoZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzTWF0Y2hlciA9IHJlcXVpcmUoXCIuL2lzLW1hdGNoZXJcIik7XG5cbi8qKlxuICogVGhyb3dzIGEgVHlwZUVycm9yIHdoZW4gYHZhbHVlYCBpcyBub3QgYSBtYXRjaGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV4YW1pbmVcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWF0Y2hlcih2YWx1ZSkge1xuICAgIGlmICghaXNNYXRjaGVyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWF0Y2hlciBleHBlY3RlZFwiKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0TWF0Y2hlcjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFRocm93cyBhIFR5cGVFcnJvciB3aGVuIGV4cGVjdGVkIG1ldGhvZCBkb2Vzbid0IGV4aXN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gbG9vayBmb3JcbiAqIEBwYXJhbSB7bmFtZX0gbmFtZSBBIG5hbWUgdG8gdXNlIGZvciB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFBhdGggVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byB1c2UgZm9yIGVycm9yIG1lc3NhZ2VzXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IFdoZW4gdGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1ldGhvZEV4aXN0cyh2YWx1ZSwgbWV0aG9kLCBuYW1lLCBtZXRob2RQYXRoKSB7XG4gICAgaWYgKHZhbHVlW21ldGhvZF0gPT09IG51bGwgfHwgdmFsdWVbbWV0aG9kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICR7bmFtZX0gdG8gaGF2ZSBtZXRob2QgJHttZXRob2RQYXRofWApO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NlcnRNZXRob2RFeGlzdHM7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdmFsdWUgaXMgb2YgdHlwZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgQSBiYXNpYyBKYXZhU2NyaXB0IHR5cGUgdG8gY29tcGFyZSB0bywgZS5nLiBcIm9iamVjdFwiLCBcInN0cmluZ1wiXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIHN0cmluZyB0byB1c2UgZm9yIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHZhbHVlIGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZSwgbmFtZSkge1xuICAgIHZhciBhY3R1YWwgPSB0eXBlT2YodmFsdWUpO1xuICAgIGlmIChhY3R1YWwgIT09IHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBFeHBlY3RlZCB0eXBlIG9mICR7bmFtZX0gdG8gYmUgJHt0eXBlfSwgYnV0IHdhcyAke2FjdHVhbH1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2VydFR5cGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBmb3IgaXRlcmFibGVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGxvb2tzIGxpa2UgYW4gaXRlcmFibGVcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKSAmJiB0eXBlT2YodmFsdWUuZm9yRWFjaCkgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhYmxlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5vYmplY3QuaXNQcm90b3R5cGVPZjtcblxudmFyIG1hdGNoZXJQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9tYXRjaGVyLXByb3RvdHlwZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGEgbWF0Y2hlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9iamVjdCBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIGBvYmplY3RgIGlzIGEgbWF0Y2hlclxuICovXG5mdW5jdGlvbiBpc01hdGNoZXIob2JqZWN0KSB7XG4gICAgcmV0dXJuIGlzUHJvdG90eXBlT2YobWF0Y2hlclByb3RvdHlwZSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hdGNoZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGV2ZXJ5ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5ldmVyeTtcbnZhciBjb25jYXQgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmNvbmNhdDtcbnZhciB0eXBlT2YgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS50eXBlT2Y7XG5cbnZhciBkZWVwRXF1YWxGYWN0b3J5ID0gcmVxdWlyZShcIi4uL2RlZXAtZXF1YWxcIikudXNlO1xuXG52YXIgaXNNYXRjaGVyID0gcmVxdWlyZShcIi4vaXMtbWF0Y2hlclwiKTtcblxudmFyIGtleXMgPSBPYmplY3Qua2V5cztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIE1hdGNoZXMgYGFjdHVhbGAgd2l0aCBgZXhwZWN0YXRpb25gXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYWN0dWFsIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHBhcmFtIHtvYmplY3R9IGV4cGVjdGF0aW9uIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdG8gbWF0Y2ggb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXRjaGVyIEEgbWF0Y2hlciB0byB1c2UgZm9yIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgYWN0dWFsYCBtYXRjaGVzIGFsbCBwcm9wZXJ0aWVzIGluIGBleHBlY3RhdGlvbmBcbiAqL1xuZnVuY3Rpb24gbWF0Y2hPYmplY3QoYWN0dWFsLCBleHBlY3RhdGlvbiwgbWF0Y2hlcikge1xuICAgIHZhciBkZWVwRXF1YWwgPSBkZWVwRXF1YWxGYWN0b3J5KG1hdGNoZXIpO1xuICAgIGlmIChhY3R1YWwgPT09IG51bGwgfHwgYWN0dWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBleHBlY3RlZEtleXMgPSBrZXlzKGV4cGVjdGF0aW9uKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogY2Fubm90IGNvbGxlY3QgY292ZXJhZ2UgZm9yIGVuZ2luZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBTeW1ib2wgKi9cbiAgICBpZiAodHlwZU9mKGdldE93blByb3BlcnR5U3ltYm9scykgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBleHBlY3RlZEtleXMgPSBjb25jYXQoZXhwZWN0ZWRLZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZXhwZWN0YXRpb24pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlcnkoZXhwZWN0ZWRLZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBleHAgPSBleHBlY3RhdGlvbltrZXldO1xuICAgICAgICB2YXIgYWN0ID0gYWN0dWFsW2tleV07XG5cbiAgICAgICAgaWYgKGlzTWF0Y2hlcihleHApKSB7XG4gICAgICAgICAgICBpZiAoIWV4cC50ZXN0KGFjdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU9mKGV4cCkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hPYmplY3QoYWN0LCBleHAsIG1hdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFkZWVwRXF1YWwoYWN0LCBleHApKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaE9iamVjdDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWF0Y2hlclByb3RvdHlwZSA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH0sXG59O1xuXG5tYXRjaGVyUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHZhbHVlT3JNYXRjaGVyKSB7XG4gICAgdmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi4vY3JlYXRlLW1hdGNoZXJcIik7XG4gICAgdmFyIGlzTWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIuaXNNYXRjaGVyO1xuXG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNYXRjaGVyIGV4cGVjdGVkXCIpO1xuICAgIH1cblxuICAgIHZhciBtMiA9IGlzTWF0Y2hlcih2YWx1ZU9yTWF0Y2hlcilcbiAgICAgICAgPyB2YWx1ZU9yTWF0Y2hlclxuICAgICAgICA6IGNyZWF0ZU1hdGNoZXIodmFsdWVPck1hdGNoZXIpO1xuICAgIHZhciBtMSA9IHRoaXM7XG4gICAgdmFyIG9yID0gT2JqZWN0LmNyZWF0ZShtYXRjaGVyUHJvdG90eXBlKTtcbiAgICBvci50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICByZXR1cm4gbTEudGVzdChhY3R1YWwpIHx8IG0yLnRlc3QoYWN0dWFsKTtcbiAgICB9O1xuICAgIG9yLm1lc3NhZ2UgPSBgJHttMS5tZXNzYWdlfS5vcigke20yLm1lc3NhZ2V9KWA7XG4gICAgcmV0dXJuIG9yO1xufTtcblxubWF0Y2hlclByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiAodmFsdWVPck1hdGNoZXIpIHtcbiAgICB2YXIgY3JlYXRlTWF0Y2hlciA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtbWF0Y2hlclwiKTtcbiAgICB2YXIgaXNNYXRjaGVyID0gY3JlYXRlTWF0Y2hlci5pc01hdGNoZXI7XG5cbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hdGNoZXIgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgdmFyIG0yID0gaXNNYXRjaGVyKHZhbHVlT3JNYXRjaGVyKVxuICAgICAgICA/IHZhbHVlT3JNYXRjaGVyXG4gICAgICAgIDogY3JlYXRlTWF0Y2hlcih2YWx1ZU9yTWF0Y2hlcik7XG4gICAgdmFyIG0xID0gdGhpcztcbiAgICB2YXIgYW5kID0gT2JqZWN0LmNyZWF0ZShtYXRjaGVyUHJvdG90eXBlKTtcbiAgICBhbmQudGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIG0xLnRlc3QoYWN0dWFsKSAmJiBtMi50ZXN0KGFjdHVhbCk7XG4gICAgfTtcbiAgICBhbmQubWVzc2FnZSA9IGAke20xLm1lc3NhZ2V9LmFuZCgke20yLm1lc3NhZ2V9KWA7XG4gICAgcmV0dXJuIGFuZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlclByb3RvdHlwZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZnVuY3Rpb25OYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZnVuY3Rpb25OYW1lO1xudmFyIGpvaW4gPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5LmpvaW47XG52YXIgbWFwID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5tYXA7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuc3RyaW5nLmluZGV4T2Y7XG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG5cbnZhciBtYXRjaE9iamVjdCA9IHJlcXVpcmUoXCIuL21hdGNoLW9iamVjdFwiKTtcblxudmFyIGNyZWF0ZVR5cGVNYXAgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmdW5jdGlvbjogZnVuY3Rpb24gKG0sIGV4cGVjdGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICBtLnRlc3QgPSBleHBlY3RhdGlvbjtcbiAgICAgICAgICAgIG0ubWVzc2FnZSA9IG1lc3NhZ2UgfHwgYG1hdGNoKCR7ZnVuY3Rpb25OYW1lKGV4cGVjdGF0aW9uKX0pYDtcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHR5cGUgY29lcmNpb24gaGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbiA9PSBhY3R1YWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBvYmplY3Q6IGZ1bmN0aW9uIChtLCBleHBlY3RhdGlvbikge1xuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwZWN0YXRpb24udGVzdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24udGVzdChhY3R1YWwpID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbS5tZXNzYWdlID0gYG1hdGNoKCR7ZnVuY3Rpb25OYW1lKGV4cGVjdGF0aW9uLnRlc3QpfSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcnJheSA9IG1hcChPYmplY3Qua2V5cyhleHBlY3RhdGlvbiksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZVRvU3RyaW5nKGV4cGVjdGF0aW9uW2tleV0pfWA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbS50ZXN0ID0gZnVuY3Rpb24gKGFjdHVhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE9iamVjdChhY3R1YWwsIGV4cGVjdGF0aW9uLCBtYXRjaCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbS5tZXNzYWdlID0gYG1hdGNoKCR7am9pbihhcnJheSwgXCIsIFwiKX0pYDtcblxuICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2V4cDogZnVuY3Rpb24gKG0sIGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgICBtLnRlc3QgPSBmdW5jdGlvbiAoYWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09IFwic3RyaW5nXCIgJiYgZXhwZWN0YXRpb24udGVzdChhY3R1YWwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaW5nOiBmdW5jdGlvbiAobSwgZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICAgIG0udGVzdCA9IGZ1bmN0aW9uIChhY3R1YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ0luZGV4T2YoYWN0dWFsLCBleHBlY3RhdGlvbikgIT09IC0xXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtLm1lc3NhZ2UgPSBgbWF0Y2goXCIke2V4cGVjdGF0aW9ufVwiKWA7XG4gICAgICAgIH0sXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlVHlwZU1hcDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdmFsdWVUb1N0cmluZyA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnZhbHVlVG9TdHJpbmc7XG52YXIgY2xhc3NOYW1lID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuY2xhc3NOYW1lO1xudmFyIHR5cGVPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnR5cGVPZjtcbnZhciBhcnJheVByb3RvID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheTtcbnZhciBvYmplY3RQcm90byA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMub2JqZWN0O1xudmFyIG1hcEZvckVhY2ggPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm1hcC5mb3JFYWNoO1xuXG52YXIgZ2V0Q2xhc3MgPSByZXF1aXJlKFwiLi9nZXQtY2xhc3NcIik7XG52YXIgaWRlbnRpY2FsID0gcmVxdWlyZShcIi4vaWRlbnRpY2FsXCIpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZShcIi4vaXMtYXJndW1lbnRzXCIpO1xudmFyIGlzQXJyYXlUeXBlID0gcmVxdWlyZShcIi4vaXMtYXJyYXktdHlwZVwiKTtcbnZhciBpc0RhdGUgPSByZXF1aXJlKFwiLi9pcy1kYXRlXCIpO1xudmFyIGlzRWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzLWVsZW1lbnRcIik7XG52YXIgaXNJdGVyYWJsZSA9IHJlcXVpcmUoXCIuL2lzLWl0ZXJhYmxlXCIpO1xudmFyIGlzTWFwID0gcmVxdWlyZShcIi4vaXMtbWFwXCIpO1xudmFyIGlzTmFOID0gcmVxdWlyZShcIi4vaXMtbmFuXCIpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZShcIi4vaXMtb2JqZWN0XCIpO1xudmFyIGlzU2V0ID0gcmVxdWlyZShcIi4vaXMtc2V0XCIpO1xudmFyIGlzU3Vic2V0ID0gcmVxdWlyZShcIi4vaXMtc3Vic2V0XCIpO1xuXG52YXIgY29uY2F0ID0gYXJyYXlQcm90by5jb25jYXQ7XG52YXIgZXZlcnkgPSBhcnJheVByb3RvLmV2ZXJ5O1xudmFyIHB1c2ggPSBhcnJheVByb3RvLnB1c2g7XG5cbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xudmFyIGluZGV4T2YgPSBhcnJheVByb3RvLmluZGV4T2Y7XG52YXIga2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogRGVlcCBlcXVhbCBjb21wYXJpc29uLiBUd28gdmFsdWVzIGFyZSBcImRlZXAgZXF1YWxcIiB3aGVuOlxuICpcbiAqICAgLSBUaGV5IGFyZSBlcXVhbCwgYWNjb3JkaW5nIHRvIHNhbXNhbS5pZGVudGljYWxcbiAqICAgLSBUaGV5IGFyZSBib3RoIGRhdGUgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHNhbWUgdGltZVxuICogICAtIFRoZXkgYXJlIGJvdGggYXJyYXlzIGNvbnRhaW5pbmcgZWxlbWVudHMgdGhhdCBhcmUgYWxsIGRlZXBFcXVhbFxuICogICAtIFRoZXkgYXJlIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcywgYW5kIGVhY2ggcHJvcGVydHlcbiAqICAgICBpbiBgYGFjdHVhbGBgIGlzIGRlZXBFcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiBgYGV4cGVjdGF0aW9uYGBcbiAqXG4gKiBTdXBwb3J0cyBjeWNsaWMgb2JqZWN0cy5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5kZWVwRXF1YWxcbiAqIEBwYXJhbSB7Kn0gYWN0dWFsIFRoZSBvYmplY3QgdG8gZXhhbWluZVxuICogQHBhcmFtIHsqfSBleHBlY3RhdGlvbiBUaGUgb2JqZWN0IGFjdHVhbCBpcyBleHBlY3RlZCB0byBiZSBlcXVhbCB0b1xuICogQHBhcmFtIHtvYmplY3R9IG1hdGNoIEEgdmFsdWUgdG8gbWF0Y2ggb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhY3R1YWwgYW5kIGV4cGVjdGF0aW9uIGFyZSBjb25zaWRlcmVkIGVxdWFsXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbEN5Y2xpYyhhY3R1YWwsIGV4cGVjdGF0aW9uLCBtYXRjaCkge1xuICAgIC8vIHVzZWQgZm9yIGN5Y2xpYyBjb21wYXJpc29uXG4gICAgLy8gY29udGFpbiBhbHJlYWR5IHZpc2l0ZWQgb2JqZWN0c1xuICAgIHZhciBhY3R1YWxPYmplY3RzID0gW107XG4gICAgdmFyIGV4cGVjdGF0aW9uT2JqZWN0cyA9IFtdO1xuICAgIC8vIGNvbnRhaW4gcGF0aGVzIChwb3NpdGlvbiBpbiB0aGUgb2JqZWN0IHN0cnVjdHVyZSlcbiAgICAvLyBvZiB0aGUgYWxyZWFkeSB2aXNpdGVkIG9iamVjdHNcbiAgICAvLyBpbmRleGVzIHNhbWUgYXMgaW4gb2JqZWN0cyBhcnJheXNcbiAgICB2YXIgYWN0dWFsUGF0aHMgPSBbXTtcbiAgICB2YXIgZXhwZWN0YXRpb25QYXRocyA9IFtdO1xuICAgIC8vIGNvbnRhaW5zIGNvbWJpbmF0aW9ucyBvZiBhbHJlYWR5IGNvbXBhcmVkIG9iamVjdHNcbiAgICAvLyBpbiB0aGUgbWFubmVyOiB7IFwiJDFbJ3JlZiddJDJbJ3JlZiddXCI6IHRydWUgfVxuICAgIHZhciBjb21wYXJlZCA9IHt9O1xuXG4gICAgLy8gZG9lcyB0aGUgcmVjdXJzaW9uIGZvciB0aGUgZGVlcCBlcXVhbCBjaGVja1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgcmV0dXJuIChmdW5jdGlvbiBkZWVwRXF1YWwoXG4gICAgICAgIGFjdHVhbE9iaixcbiAgICAgICAgZXhwZWN0YXRpb25PYmosXG4gICAgICAgIGFjdHVhbFBhdGgsXG4gICAgICAgIGV4cGVjdGF0aW9uUGF0aFxuICAgICkge1xuICAgICAgICAvLyBJZiBib3RoIGFyZSBtYXRjaGVycyB0aGV5IG11c3QgYmUgdGhlIHNhbWUgaW5zdGFuY2UgaW4gb3JkZXIgdG8gYmVcbiAgICAgICAgLy8gY29uc2lkZXJlZCBlcXVhbCBJZiB3ZSBkaWRuJ3QgZG8gdGhhdCB3ZSB3b3VsZCBlbmQgdXAgcnVubmluZyBvbmVcbiAgICAgICAgLy8gbWF0Y2hlciBhZ2FpbnN0IHRoZSBvdGhlclxuICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaXNNYXRjaGVyKGV4cGVjdGF0aW9uT2JqKSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmlzTWF0Y2hlcihhY3R1YWxPYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25PYmoudGVzdChhY3R1YWxPYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbFR5cGUgPSB0eXBlb2YgYWN0dWFsT2JqO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25UeXBlID0gdHlwZW9mIGV4cGVjdGF0aW9uT2JqO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFjdHVhbE9iaiA9PT0gZXhwZWN0YXRpb25PYmogfHxcbiAgICAgICAgICAgIGlzTmFOKGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgIGlzTmFOKGV4cGVjdGF0aW9uT2JqKSB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSBudWxsIHx8XG4gICAgICAgICAgICBleHBlY3RhdGlvbk9iaiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgYWN0dWFsT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uT2JqID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGFjdHVhbFR5cGUgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIGV4cGVjdGF0aW9uVHlwZSAhPT0gXCJvYmplY3RcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpZGVudGljYWwoYWN0dWFsT2JqLCBleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbGVtZW50cyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwoZXhwZWN0ZWQsIGFjdHVhbClcbiAgICAgICAgaWYgKGlzRWxlbWVudChhY3R1YWxPYmopIHx8IGlzRWxlbWVudChleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpc0FjdHVhbERhdGUgPSBpc0RhdGUoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGlzRXhwZWN0YXRpb25EYXRlID0gaXNEYXRlKGV4cGVjdGF0aW9uT2JqKTtcbiAgICAgICAgaWYgKGlzQWN0dWFsRGF0ZSB8fCBpc0V4cGVjdGF0aW9uRGF0ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpc0FjdHVhbERhdGUgfHxcbiAgICAgICAgICAgICAgICAhaXNFeHBlY3RhdGlvbkRhdGUgfHxcbiAgICAgICAgICAgICAgICBnZXRUaW1lLmNhbGwoYWN0dWFsT2JqKSAhPT0gZ2V0VGltZS5jYWxsKGV4cGVjdGF0aW9uT2JqKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlVG9TdHJpbmcoYWN0dWFsT2JqKSAhPT0gdmFsdWVUb1N0cmluZyhleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0dWFsT2JqIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBleHBlY3RhdGlvbk9iaiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbE9iaiBpbnN0YW5jZW9mIEVycm9yICYmIGV4cGVjdGF0aW9uT2JqIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxPYmogPT09IGV4cGVjdGF0aW9uT2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFjdHVhbENsYXNzID0gZ2V0Q2xhc3MoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGV4cGVjdGF0aW9uQ2xhc3MgPSBnZXRDbGFzcyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxLZXlzID0ga2V5cyhhY3R1YWxPYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25LZXlzID0ga2V5cyhleHBlY3RhdGlvbk9iaik7XG4gICAgICAgIHZhciBhY3R1YWxOYW1lID0gY2xhc3NOYW1lKGFjdHVhbE9iaik7XG4gICAgICAgIHZhciBleHBlY3RhdGlvbk5hbWUgPSBjbGFzc05hbWUoZXhwZWN0YXRpb25PYmopO1xuICAgICAgICB2YXIgZXhwZWN0YXRpb25TeW1ib2xzID1cbiAgICAgICAgICAgIHR5cGVPZihnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IGdldE93blByb3BlcnR5U3ltYm9scyhleHBlY3RhdGlvbk9iailcbiAgICAgICAgICAgICAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBjYW5ub3QgY29sbGVjdCBjb3ZlcmFnZSBmb3IgZW5naW5lIHRoYXQgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCAqL1xuICAgICAgICAgICAgICAgICAgW107XG4gICAgICAgIHZhciBleHBlY3RhdGlvbktleXNBbmRTeW1ib2xzID0gY29uY2F0KFxuICAgICAgICAgICAgZXhwZWN0YXRpb25LZXlzLFxuICAgICAgICAgICAgZXhwZWN0YXRpb25TeW1ib2xzXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGlzQXJndW1lbnRzKGFjdHVhbE9iaikgfHwgaXNBcmd1bWVudHMoZXhwZWN0YXRpb25PYmopKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsT2JqLmxlbmd0aCAhPT0gZXhwZWN0YXRpb25PYmoubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdHVhbFR5cGUgIT09IGV4cGVjdGF0aW9uVHlwZSB8fFxuICAgICAgICAgICAgICAgIGFjdHVhbENsYXNzICE9PSBleHBlY3RhdGlvbkNsYXNzIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsS2V5cy5sZW5ndGggIT09IGV4cGVjdGF0aW9uS2V5cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAoYWN0dWFsTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbk5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsTmFtZSAhPT0gZXhwZWN0YXRpb25OYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2V0KGFjdHVhbE9iaikgfHwgaXNTZXQoZXhwZWN0YXRpb25PYmopKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWlzU2V0KGFjdHVhbE9iaikgfHxcbiAgICAgICAgICAgICAgICAhaXNTZXQoZXhwZWN0YXRpb25PYmopIHx8XG4gICAgICAgICAgICAgICAgYWN0dWFsT2JqLnNpemUgIT09IGV4cGVjdGF0aW9uT2JqLnNpemVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGlzU3Vic2V0KGFjdHVhbE9iaiwgZXhwZWN0YXRpb25PYmosIGRlZXBFcXVhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXAoYWN0dWFsT2JqKSB8fCBpc01hcChleHBlY3RhdGlvbk9iaikpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhaXNNYXAoYWN0dWFsT2JqKSB8fFxuICAgICAgICAgICAgICAgICFpc01hcChleHBlY3RhdGlvbk9iaikgfHxcbiAgICAgICAgICAgICAgICBhY3R1YWxPYmouc2l6ZSAhPT0gZXhwZWN0YXRpb25PYmouc2l6ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbWFwc0RlZXBseUVxdWFsID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hcEZvckVhY2goYWN0dWFsT2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcHNEZWVwbHlFcXVhbCA9XG4gICAgICAgICAgICAgICAgICAgIG1hcHNEZWVwbHlFcXVhbCAmJlxuICAgICAgICAgICAgICAgICAgICBkZWVwRXF1YWxDeWNsaWModmFsdWUsIGV4cGVjdGF0aW9uT2JqLmdldChrZXkpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbWFwc0RlZXBseUVxdWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlzQWN0dWFsTm9uQXJyYXlJdGVyYWJsZSA9XG4gICAgICAgICAgICBpc0l0ZXJhYmxlKGFjdHVhbE9iaikgJiZcbiAgICAgICAgICAgICFpc0FycmF5VHlwZShhY3R1YWxPYmopICYmXG4gICAgICAgICAgICAhaXNBcmd1bWVudHMoYWN0dWFsT2JqKTtcbiAgICAgICAgdmFyIGlzRXhwZWN0YXRpb25Ob25BcnJheUl0ZXJhYmxlID1cbiAgICAgICAgICAgIGlzSXRlcmFibGUoZXhwZWN0YXRpb24pICYmXG4gICAgICAgICAgICAhaXNBcnJheVR5cGUoZXhwZWN0YXRpb24pICYmXG4gICAgICAgICAgICAhaXNBcmd1bWVudHMoZXhwZWN0YXRpb24pO1xuICAgICAgICBpZiAoaXNBY3R1YWxOb25BcnJheUl0ZXJhYmxlIHx8IGlzRXhwZWN0YXRpb25Ob25BcnJheUl0ZXJhYmxlKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsQXJyYXkgPSBBcnJheS5mcm9tKGFjdHVhbE9iaik7XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25BcnJheSA9IEFycmF5LmZyb20oZXhwZWN0YXRpb24pO1xuICAgICAgICAgICAgaWYgKGFjdHVhbEFycmF5Lmxlbmd0aCAhPT0gZXhwZWN0YXRpb25BcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBhcnJheURlZXBseUVxdWFscyA9IHRydWU7XG4gICAgICAgICAgICBldmVyeShhY3R1YWxBcnJheSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGFycmF5RGVlcGx5RXF1YWxzID1cbiAgICAgICAgICAgICAgICAgICAgYXJyYXlEZWVwbHlFcXVhbHMgJiZcbiAgICAgICAgICAgICAgICAgICAgZGVlcEVxdWFsQ3ljbGljKGFjdHVhbEFycmF5W2tleV0sIGV4cGVjdGF0aW9uQXJyYXlba2V5XSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGFycmF5RGVlcGx5RXF1YWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2ZXJ5KGV4cGVjdGF0aW9uS2V5c0FuZFN5bWJvbHMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoYWN0dWFsT2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWN0dWFsVmFsdWUgPSBhY3R1YWxPYmpba2V5XTtcbiAgICAgICAgICAgIHZhciBleHBlY3RhdGlvblZhbHVlID0gZXhwZWN0YXRpb25PYmpba2V5XTtcbiAgICAgICAgICAgIHZhciBhY3R1YWxPYmplY3QgPSBpc09iamVjdChhY3R1YWxWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgZXhwZWN0YXRpb25PYmplY3QgPSBpc09iamVjdChleHBlY3RhdGlvblZhbHVlKTtcbiAgICAgICAgICAgIC8vIGRldGVybWluZXMsIGlmIHRoZSBvYmplY3RzIHdlcmUgYWxyZWFkeSB2aXNpdGVkXG4gICAgICAgICAgICAvLyAoaXQncyBmYXN0ZXIgdG8gY2hlY2sgZm9yIGlzT2JqZWN0IGZpcnN0LCB0aGFuIHRvXG4gICAgICAgICAgICAvLyBnZXQgLTEgZnJvbSBnZXRJbmRleCBmb3Igbm9uIG9iamVjdHMpXG4gICAgICAgICAgICB2YXIgYWN0dWFsSW5kZXggPSBhY3R1YWxPYmplY3RcbiAgICAgICAgICAgICAgICA/IGluZGV4T2YoYWN0dWFsT2JqZWN0cywgYWN0dWFsVmFsdWUpXG4gICAgICAgICAgICAgICAgOiAtMTtcbiAgICAgICAgICAgIHZhciBleHBlY3RhdGlvbkluZGV4ID0gZXhwZWN0YXRpb25PYmplY3RcbiAgICAgICAgICAgICAgICA/IGluZGV4T2YoZXhwZWN0YXRpb25PYmplY3RzLCBleHBlY3RhdGlvblZhbHVlKVxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmVzIHRoZSBuZXcgcGF0aHMgb2YgdGhlIG9iamVjdHNcbiAgICAgICAgICAgIC8vIC0gZm9yIG5vbiBjeWNsaWMgb2JqZWN0cyB0aGUgY3VycmVudCBwYXRoIHdpbGwgYmUgZXh0ZW5kZWRcbiAgICAgICAgICAgIC8vICAgYnkgY3VycmVudCBwcm9wZXJ0eSBuYW1lXG4gICAgICAgICAgICAvLyAtIGZvciBjeWNsaWMgb2JqZWN0cyB0aGUgc3RvcmVkIHBhdGggaXMgdGFrZW5cbiAgICAgICAgICAgIHZhciBuZXdBY3R1YWxQYXRoID1cbiAgICAgICAgICAgICAgICBhY3R1YWxJbmRleCAhPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgPyBhY3R1YWxQYXRoc1thY3R1YWxJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiBgJHthY3R1YWxQYXRofVske0pTT04uc3RyaW5naWZ5KGtleSl9XWA7XG4gICAgICAgICAgICB2YXIgbmV3RXhwZWN0YXRpb25QYXRoID1cbiAgICAgICAgICAgICAgICBleHBlY3RhdGlvbkluZGV4ICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IGV4cGVjdGF0aW9uUGF0aHNbZXhwZWN0YXRpb25JbmRleF1cbiAgICAgICAgICAgICAgICAgICAgOiBgJHtleHBlY3RhdGlvblBhdGh9WyR7SlNPTi5zdHJpbmdpZnkoa2V5KX1dYDtcbiAgICAgICAgICAgIHZhciBjb21iaW5lZFBhdGggPSBuZXdBY3R1YWxQYXRoICsgbmV3RXhwZWN0YXRpb25QYXRoO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHJlY3Vyc2lvbiBpZiBjdXJyZW50IG9iamVjdHMgYXJlIGFscmVhZHkgY29tcGFyZWRcbiAgICAgICAgICAgIGlmIChjb21wYXJlZFtjb21iaW5lZFBhdGhdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoZSBjdXJyZW50IG9iamVjdHMgYW5kIHRoZWlyIHBhdGhzXG4gICAgICAgICAgICBpZiAoYWN0dWFsSW5kZXggPT09IC0xICYmIGFjdHVhbE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHB1c2goYWN0dWFsT2JqZWN0cywgYWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIHB1c2goYWN0dWFsUGF0aHMsIG5ld0FjdHVhbFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4cGVjdGF0aW9uSW5kZXggPT09IC0xICYmIGV4cGVjdGF0aW9uT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcHVzaChleHBlY3RhdGlvbk9iamVjdHMsIGV4cGVjdGF0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgIHB1c2goZXhwZWN0YXRpb25QYXRocywgbmV3RXhwZWN0YXRpb25QYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBvYmplY3RzIGFyZSBhbHJlYWR5IGNvbXBhcmVkXG4gICAgICAgICAgICBpZiAoYWN0dWFsT2JqZWN0ICYmIGV4cGVjdGF0aW9uT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29tcGFyZWRbY29tYmluZWRQYXRoXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVuZCBvZiBjeWNsaWMgbG9naWNcblxuICAgICAgICAgICAgLy8gbmVpdGhlciBhY3R1YWxWYWx1ZSBub3IgZXhwZWN0YXRpb25WYWx1ZSBpcyBhIGN5Y2xlXG4gICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIG5leHQgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwoXG4gICAgICAgICAgICAgICAgYWN0dWFsVmFsdWUsXG4gICAgICAgICAgICAgICAgZXhwZWN0YXRpb25WYWx1ZSxcbiAgICAgICAgICAgICAgICBuZXdBY3R1YWxQYXRoLFxuICAgICAgICAgICAgICAgIG5ld0V4cGVjdGF0aW9uUGF0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSkoYWN0dWFsLCBleHBlY3RhdGlvbiwgXCIkMVwiLCBcIiQyXCIpO1xufVxuXG5kZWVwRXF1YWxDeWNsaWMudXNlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gICAgICAgIHJldHVybiBkZWVwRXF1YWxDeWNsaWMoYSwgYiwgbWF0Y2gpO1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBFcXVhbEN5Y2xpYztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLm9iamVjdC50b1N0cmluZztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCBgQ2xhc3NgIGJ5IGNhbGxpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG4gKiB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZSBhcyBgdGhpc2AuIFJldHVybiB2YWx1ZSBpcyBhIGBTdHJpbmdgLCBuYW1pbmcgdGhlXG4gKiBpbnRlcm5hbCBjbGFzcywgZS5nLiBcIkFycmF5XCJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7Kn0gdmFsdWUgLSBBbnkgdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGBDbGFzc2Agb2YgYHZhbHVlYFxuICovXG5mdW5jdGlvbiBnZXRDbGFzcyh2YWx1ZSkge1xuICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkuc3BsaXQoL1sgXFxdXS8pWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldENsYXNzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc05hTiA9IHJlcXVpcmUoXCIuL2lzLW5hblwiKTtcbnZhciBpc05lZ1plcm8gPSByZXF1aXJlKFwiLi9pcy1uZWctemVyb1wiKTtcblxuLyoqXG4gKiBTdHJpY3QgZXF1YWxpdHkgY2hlY2sgYWNjb3JkaW5nIHRvIEVjbWFTY3JpcHQgSGFybW9ueSdzIGBlZ2FsYC5cbiAqXG4gKiAqKkZyb20gdGhlIEhhcm1vbnkgd2lraToqKlxuICogPiBBbiBgZWdhbGAgZnVuY3Rpb24gc2ltcGx5IG1ha2VzIGF2YWlsYWJsZSB0aGUgaW50ZXJuYWwgYFNhbWVWYWx1ZWAgZnVuY3Rpb25cbiAqID4gZnJvbSBzZWN0aW9uIDkuMTIgb2YgdGhlIEVTNSBzcGVjLiBJZiB0d28gdmFsdWVzIGFyZSBlZ2FsLCB0aGVuIHRoZXkgYXJlIG5vdFxuICogPiBvYnNlcnZhYmx5IGRpc3Rpbmd1aXNoYWJsZS5cbiAqXG4gKiBgaWRlbnRpY2FsYCByZXR1cm5zIGB0cnVlYCB3aGVuIGA9PT1gIGlzIGB0cnVlYCwgZXhjZXB0IGZvciBgLTBgIGFuZFxuICogYCswYCwgd2hlcmUgaXQgcmV0dXJucyBgZmFsc2VgLiBBZGRpdGlvbmFsbHksIGl0IHJldHVybnMgYHRydWVgIHdoZW5cbiAqIGBOYU5gIGlzIGNvbXBhcmVkIHRvIGl0c2VsZi5cbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pZGVudGljYWxcbiAqIEBwYXJhbSB7Kn0gb2JqMSBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHsqfSBvYmoyIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIHdoZW4gdGhlIG9iamVjdHMgYXJlICplZ2FsKiwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaWRlbnRpY2FsKG9iajEsIG9iajIpIHtcbiAgICBpZiAob2JqMSA9PT0gb2JqMiB8fCAoaXNOYU4ob2JqMSkgJiYgaXNOYU4ob2JqMikpKSB7XG4gICAgICAgIHJldHVybiBvYmoxICE9PSAwIHx8IGlzTmVnWmVybyhvYmoxKSA9PT0gaXNOZWdaZXJvKG9iajIpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGljYWw7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGdldENsYXNzID0gcmVxdWlyZShcIi4vZ2V0LWNsYXNzXCIpO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlzQXJndW1lbnRzXG4gKiBAcGFyYW0gIHsqfSAgb2JqZWN0IC0gVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIHdoZW4gYG9iamVjdGAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkge1xuICAgIHJldHVybiBnZXRDbGFzcyhvYmplY3QpID09PSBcIkFyZ3VtZW50c1wiO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmdW5jdGlvbk5hbWUgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5mdW5jdGlvbk5hbWU7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLnByb3RvdHlwZXMuYXJyYXkuaW5kZXhPZjtcbnZhciBtYXAgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS5wcm90b3R5cGVzLmFycmF5Lm1hcDtcbnZhciBBUlJBWV9UWVBFUyA9IHJlcXVpcmUoXCIuL2FycmF5LXR5cGVzXCIpO1xudmFyIHR5cGUgPSByZXF1aXJlKFwidHlwZS1kZXRlY3RcIik7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBhcnJheSB0eXBlLCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSAgeyp9ICBvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhbiBhcnJheSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0FycmF5VHlwZShvYmplY3QpIHtcbiAgICByZXR1cm4gaW5kZXhPZihtYXAoQVJSQVlfVFlQRVMsIGZ1bmN0aW9uTmFtZSksIHR5cGUob2JqZWN0KSkgIT09IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlUeXBlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGFuIGluc3RhbmNlIG9mIERhdGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7RGF0ZX0gIHZhbHVlIFRoZSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRGF0ZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZGl2ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgb2JqZWN0YCBpcyBhIERPTSBlbGVtZW50IG5vZGUuXG4gKlxuICogVW5saWtlIFVuZGVyc2NvcmUuanMvbG9kYXNoLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgYG9iamVjdGBcbiAqIGlzIGFuICplbGVtZW50LWxpa2UqIG9iamVjdCwgaS5lLiBhIHJlZ3VsYXIgb2JqZWN0IHdpdGggYSBgbm9kZVR5cGVgXG4gKiBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSB2YWx1ZSBgMWAuXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNFbGVtZW50XG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGZvciBET00gZWxlbWVudCBub2Rlc1xuICovXG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QgfHwgb2JqZWN0Lm5vZGVUeXBlICE9PSAxIHx8ICFkaXYpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBvYmplY3QuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgb2JqZWN0LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRWxlbWVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGFuIGl0ZXJhYmxlLCBgZmFsc2VgIG90aGVyd2lzZVxuICpcbiAqIEBhbGlhcyBtb2R1bGU6c2Ftc2FtLmlzSXRlcmFibGVcbiAqIEBwYXJhbSAgeyp9ICB2YWwgLSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpdGVyYWJsZSwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWwpIHtcbiAgICAvLyBjaGVja3MgZm9yIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YgdmFsICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB2YWxbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXRlcmFibGU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYSBNYXBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCB3aGVuIGB2YWx1ZWAgaXMgYW4gaW5zdGFuY2Ugb2YgYE1hcGAsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc01hcCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgTWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29tcGFyZXMgYSBgdmFsdWVgIHRvIGBOYU5gXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGBOYU5gXG4gKi9cbmZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgLy8gVW5saWtlIGdsb2JhbCBgaXNOYU5gLCB0aGlzIGZ1bmN0aW9uIGF2b2lkcyB0eXBlIGNvZXJjaW9uXG4gICAgLy8gYHR5cGVvZmAgY2hlY2sgYXZvaWRzIElFIGhvc3Qgb2JqZWN0IGlzc3VlcywgaGF0IHRpcCB0b1xuICAgIC8vIGxvZGFzaFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmFOO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGAtMGBcbiAqXG4gKiBAYWxpYXMgbW9kdWxlOnNhbXNhbS5pc05lZ1plcm9cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQSB2YWx1ZSB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgdmFsdWVgIGlzIGAtMGBcbiAqL1xuZnVuY3Rpb24gaXNOZWdaZXJvKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA9PT0gLUluZmluaXR5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTmVnWmVybztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gdGhlIHZhbHVlIGlzIGEgcmVndWxhciBPYmplY3QgYW5kIG5vdCBhIHNwZWNpYWxpemVkIE9iamVjdFxuICpcbiAqIFRoaXMgaGVscHMgc3BlZWQgdXAgZGVlcEVxdWFsIGN5Y2xpYyBjaGVja3NcbiAqXG4gKiBUaGUgcHJlbWlzZSBpcyB0aGF0IG9ubHkgT2JqZWN0cyBhcmUgc3RvcmVkIGluIHRoZSB2aXNpdGVkIGFycmF5LlxuICogU28gaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoZVxuICogZXhwZW5zaXZlIG9wZXJhdGlvbiBvZiBzZWFyY2hpbmcgZm9yIHRoZSB2YWx1ZSBpbiB0aGUgdGhlIGFycmF5IG9mIGFscmVhZHlcbiAqIHZpc2l0ZWQgb2JqZWN0c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtvYmplY3R9ICAgdmFsdWUgVGhlIG9iamVjdCB0byBleGFtaW5lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgYHRydWVgIHdoZW4gdGhlIG9iamVjdCBpcyBhIG5vbi1zcGVjaWFsaXNlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgLy8gbm9uZSBvZiB0aGVzZSBhcmUgY29sbGVjdGlvbiBvYmplY3RzLCBzbyB3ZSBjYW4gcmV0dXJuIGZhbHNlXG4gICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSAmJlxuICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBTZXQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0uaXNTZXRcbiAqIEBwYXJhbSAgeyp9ICB2YWwgLSBBIHZhbHVlIHRvIGV4YW1pbmVcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBTZXQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGlzU2V0KHZhbCkge1xuICAgIHJldHVybiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWwgaW5zdGFuY2VvZiBTZXQpIHx8IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU2V0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmb3JFYWNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zZXQuZm9yRWFjaDtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGBzMWAgaXMgYSBzdWJzZXQgb2YgYHMyYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7QXJyYXl8U2V0fSAgczEgICAgICBUaGUgdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gIHtBcnJheXxTZXR9ICBzMiAgICAgIFRoZSBjb250YWluaW5nIHZhbHVlXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGNvbXBhcmUgQSBjb21wYXJpc29uIGZ1bmN0aW9uLCBzaG91bGQgcmV0dXJuIGB0cnVlYCB3aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWFsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgd2hlbiBgczFgIGlzIGEgc3Vic2V0IG9mIGBzMmAsIGBmYWxzZWBgIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBpc1N1YnNldChzMSwgczIsIGNvbXBhcmUpIHtcbiAgICB2YXIgYWxsQ29udGFpbmVkID0gdHJ1ZTtcbiAgICBmb3JFYWNoKHMxLCBmdW5jdGlvbiAodjEpIHtcbiAgICAgICAgdmFyIGluY2x1ZGVzID0gZmFsc2U7XG4gICAgICAgIGZvckVhY2goczIsIGZ1bmN0aW9uICh2Mikge1xuICAgICAgICAgICAgaWYgKGNvbXBhcmUodjIsIHYxKSkge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFsbENvbnRhaW5lZCA9IGFsbENvbnRhaW5lZCAmJiBpbmNsdWRlcztcbiAgICB9KTtcblxuICAgIHJldHVybiBhbGxDb250YWluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdWJzZXQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHNsaWNlID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuc2xpY2U7XG52YXIgdHlwZU9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudHlwZU9mO1xudmFyIHZhbHVlVG9TdHJpbmcgPSByZXF1aXJlKFwiQHNpbm9uanMvY29tbW9uc1wiKS52YWx1ZVRvU3RyaW5nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhbiBpdGVyYWJsZSBvYmplY3RcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge29iamVjdH0gb2JqIFRoZSBpdGVyYWJsZSBvYmplY3QgdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gaXRlcmFibGVUb1N0cmluZyhvYmopIHtcbiAgICBpZiAodHlwZU9mKG9iaikgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIG1hcFRvU3RyaW5nKG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlbmVyaWNJdGVyYWJsZVRvU3RyaW5nKG9iaik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIE1hcFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7TWFwfSBtYXAgICAgVGhlIG1hcCB0byBzdHJpbmdpZnlcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICAgICBBIHN0cmluZyByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBtYXBUb1N0cmluZyhtYXApIHtcbiAgICB2YXIgcmVwcmVzZW50YXRpb24gPSBcIlwiO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmVwcmVzZW50YXRpb24gKz0gYFske3N0cmluZ2lmeShrZXkpfSwke3N0cmluZ2lmeSh2YWx1ZSl9XSxgO1xuICAgIH0pO1xuXG4gICAgcmVwcmVzZW50YXRpb24gPSBzbGljZShyZXByZXNlbnRhdGlvbiwgMCwgLTEpO1xuICAgIHJldHVybiByZXByZXNlbnRhdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBmb3IgYW4gaXRlcmFibGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge29iamVjdH0gaXRlcmFibGUgVGhlIGl0ZXJhYmxlIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgQSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2VuZXJpY0l0ZXJhYmxlVG9TdHJpbmcoaXRlcmFibGUpIHtcbiAgICB2YXIgcmVwcmVzZW50YXRpb24gPSBcIlwiO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmVwcmVzZW50YXRpb24gKz0gYCR7c3RyaW5naWZ5KHZhbHVlKX0sYDtcbiAgICB9KTtcblxuICAgIHJlcHJlc2VudGF0aW9uID0gc2xpY2UocmVwcmVzZW50YXRpb24sIDAsIC0xKTtcbiAgICByZXR1cm4gcmVwcmVzZW50YXRpb247XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFzc2VkIGBpdGVtYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtvYmplY3R9IGl0ZW0gVGhlIGl0ZW0gdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBpdGVtYFxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkoaXRlbSkge1xuICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGAnJHtpdGVtfSdgIDogdmFsdWVUb1N0cmluZyhpdGVtKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYWJsZVRvU3RyaW5nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB2YWx1ZVRvU3RyaW5nID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikudmFsdWVUb1N0cmluZztcbnZhciBpbmRleE9mID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5zdHJpbmcuaW5kZXhPZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikucHJvdG90eXBlcy5hcnJheS5mb3JFYWNoO1xudmFyIHR5cGUgPSByZXF1aXJlKFwidHlwZS1kZXRlY3RcIik7XG5cbnZhciBlbmdpbmVDYW5Db21wYXJlTWFwcyA9IHR5cGVvZiBBcnJheS5mcm9tID09PSBcImZ1bmN0aW9uXCI7XG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVlcC1lcXVhbFwiKS51c2UobWF0Y2gpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG52YXIgaXNBcnJheVR5cGUgPSByZXF1aXJlKFwiLi9pcy1hcnJheS10eXBlXCIpO1xudmFyIGlzU3Vic2V0ID0gcmVxdWlyZShcIi4vaXMtc3Vic2V0XCIpO1xudmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlclwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBgYXJyYXlgIGNvbnRhaW5zIGFsbCBvZiBgc3Vic2V0YCBhcyBkZWZpbmVkIGJ5IHRoZSBgY29tcGFyZWBcbiAqIGFyZ3VtZW50XG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFycmF5ICAgQW4gYXJyYXkgdG8gc2VhcmNoIGZvciBhIHN1YnNldFxuICogQHBhcmFtICB7QXJyYXl9IHN1YnNldCAgVGhlIHN1YnNldCB0byBmaW5kIGluIHRoZSBhcnJheVxuICogQHBhcmFtICB7RnVuY3Rpb259IGNvbXBhcmUgQSBjb21wYXJpc29uIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgICBbZGVzY3JpcHRpb25dXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcnJheUNvbnRhaW5zKGFycmF5LCBzdWJzZXQsIGNvbXBhcmUpIHtcbiAgICBpZiAoc3Vic2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGksIGwsIGosIGs7XG4gICAgZm9yIChpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgc3Vic2V0WzBdKSkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgayA9IHN1YnNldC5sZW5ndGg7IGogPCBrOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAoaSArIGogPj0gbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShhcnJheVtpICsgal0sIHN1YnNldFtqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyoqXG4gKiBNYXRjaGVzIGFuIG9iamVjdCB3aXRoIGEgbWF0Y2hlciAob3IgdmFsdWUpXG4gKlxuICogQGFsaWFzIG1vZHVsZTpzYW1zYW0ubWF0Y2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCBjYW5kaWRhdGUgdG8gbWF0Y2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXRjaGVyT3JWYWx1ZSBBIG1hdGNoZXIgb3IgdmFsdWUgdG8gbWF0Y2ggYWdhaW5zdFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiBgb2JqZWN0YCBtYXRjaGVzIGBtYXRjaGVyT3JWYWx1ZWBcbiAqL1xuZnVuY3Rpb24gbWF0Y2gob2JqZWN0LCBtYXRjaGVyT3JWYWx1ZSkge1xuICAgIGlmIChtYXRjaGVyT3JWYWx1ZSAmJiB0eXBlb2YgbWF0Y2hlck9yVmFsdWUudGVzdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVyT3JWYWx1ZS50ZXN0KG9iamVjdCk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKG1hdGNoZXJPclZhbHVlKSkge1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJPclZhbHVlID09PSBvYmplY3Q7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJPclZhbHVlKG9iamVjdCkgPT09IHRydWU7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHZhciBub3ROdWxsID0gdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIiB8fCBCb29sZWFuKG9iamVjdCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG5vdE51bGwgJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RyaW5nKG9iamVjdCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck9yVmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICkgPj0gMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm51bGxcIjpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0eXBlKG9iamVjdCkgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRUaW1lKCkgPT09IG1hdGNoZXJPclZhbHVlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGJhc2ljYWxseSB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGlzIGNvdmVyZWQgKi9cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgICAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIkludDE2QXJyYXlcIjpcbiAgICAgICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJVaW50MzJBcnJheVwiOlxuICAgICAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgICAgIGNhc2UgXCJGbG9hdDY0QXJyYXlcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaXNBcnJheVR5cGUobWF0Y2hlck9yVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgYXJyYXlDb250YWlucyhvYmplY3QsIG1hdGNoZXJPclZhbHVlLCBtYXRjaClcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiB0aGlzIGlzIGNvdmVyZWQgYnkgYSB0ZXN0LCB0aGF0IGlzIG9ubHkgcnVuIGluIElFLCBidXQgd2UgY29sbGVjdCBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBpbiBub2RlKi9cbiAgICAgICAgICAgIGlmICghZW5naW5lQ2FuQ29tcGFyZU1hcHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhlIEphdmFTY3JpcHQgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgQXJyYXkuZnJvbSBhbmQgY2Fubm90IHJlbGlhYmx5IGRvIHZhbHVlIGNvbXBhcmlzb24gb2YgTWFwIGluc3RhbmNlc1wiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0eXBlKG9iamVjdCkgPT09IFwiTWFwXCIgJiZcbiAgICAgICAgICAgICAgICBhcnJheUNvbnRhaW5zKFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKG9iamVjdCksXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20obWF0Y2hlck9yVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUob2JqZWN0KSkge1xuICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIFwiU2V0XCI6XG4gICAgICAgICAgICByZXR1cm4gaXNTdWJzZXQobWF0Y2hlck9yVmFsdWUsIG9iamVjdCwgbWF0Y2gpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAobWF0Y2hlck9yVmFsdWUgJiYgdHlwZW9mIG1hdGNoZXJPclZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChtYXRjaGVyT3JWYWx1ZSA9PT0gb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRjaGVyT3JWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvYmplY3QuZ2V0QXR0cmlidXRlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0LmdldEF0dHJpYnV0ZShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtYXRjaGVyT3JWYWx1ZVtwcm9wXSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaGVyT3JWYWx1ZVtwcm9wXSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBtYXRjaGVyT3JWYWx1ZVtwcm9wXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICAgICAgICAgICAhZGVlcEVxdWFsKHZhbHVlLCBtYXRjaGVyT3JWYWx1ZVtwcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1hdGNoZXIgd2FzIGFuIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgdHlwZVwiKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG5mb3JFYWNoKE9iamVjdC5rZXlzKGNyZWF0ZU1hdGNoZXIpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgbWF0Y2hba2V5XSA9IGNyZWF0ZU1hdGNoZXJba2V5XTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQG1vZHVsZSBzYW1zYW1cbiAqL1xudmFyIGlkZW50aWNhbCA9IHJlcXVpcmUoXCIuL2lkZW50aWNhbFwiKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoXCIuL2lzLWFyZ3VtZW50c1wiKTtcbnZhciBpc0VsZW1lbnQgPSByZXF1aXJlKFwiLi9pcy1lbGVtZW50XCIpO1xudmFyIGlzTmVnWmVybyA9IHJlcXVpcmUoXCIuL2lzLW5lZy16ZXJvXCIpO1xudmFyIGlzU2V0ID0gcmVxdWlyZShcIi4vaXMtc2V0XCIpO1xudmFyIGlzTWFwID0gcmVxdWlyZShcIi4vaXMtbWFwXCIpO1xudmFyIG1hdGNoID0gcmVxdWlyZShcIi4vbWF0Y2hcIik7XG52YXIgZGVlcEVxdWFsQ3ljbGljID0gcmVxdWlyZShcIi4vZGVlcC1lcXVhbFwiKS51c2UobWF0Y2gpO1xudmFyIGNyZWF0ZU1hdGNoZXIgPSByZXF1aXJlKFwiLi9jcmVhdGUtbWF0Y2hlclwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY3JlYXRlTWF0Y2hlcjogY3JlYXRlTWF0Y2hlcixcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbEN5Y2xpYyxcbiAgICBpZGVudGljYWw6IGlkZW50aWNhbCxcbiAgICBpc0FyZ3VtZW50czogaXNBcmd1bWVudHMsXG4gICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgaXNNYXA6IGlzTWFwLFxuICAgIGlzTmVnWmVybzogaXNOZWdaZXJvLFxuICAgIGlzU2V0OiBpc1NldCxcbiAgICBtYXRjaDogbWF0Y2gsXG59O1xuIiwiLy8gVGhpcyBpcyBmcmVlIGFuZCB1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi5cbi8vIFNlZSBMSUNFTlNFLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG52YXIgZW5jb2RpbmcgPSByZXF1aXJlKFwiLi9saWIvZW5jb2RpbmcuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBUZXh0RW5jb2RlcjogZW5jb2RpbmcuVGV4dEVuY29kZXIsXG4gIFRleHREZWNvZGVyOiBlbmNvZGluZy5UZXh0RGVjb2Rlcixcbn07XG4iLCIoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuICB9XG5cbiAgZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXSA9XG57XG4gIFwiYmlnNVwiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwxNzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkzLDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUyMCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkzNzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEsMTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDksMjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwxNDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQsMzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIsMzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYsMTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQwNDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwyODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEyNzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwyODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkzLDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxsLDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODkyLDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIzNzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMyNDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMyNTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEzLDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcyMTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYwLDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgsMTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1NywzMTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIwNTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAyNzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMsMjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMsMjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDksMjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMsMjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYzMjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwxNTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQzNTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwxMzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUxMjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQyNjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQzLDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIwOCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkzNiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEsMTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5MzksbnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywxMzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEzNDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwxNTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYsMTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYwLDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQyNDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIxOTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQyLDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwzNzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwxNDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQyNzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4MywxMzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUwLDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwxOTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMxMjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAxLDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYyNjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAsMzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgyNzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3MDAwMCw0MDA2MCw0MDQ3OSw0MDY0NCwyNzUwMyw2Mzc1MSwyMDAyMywxMzEyMDcsMzg0MjksMjUxNDMsMzgwNTAsbnVsbCwyMDUzOSwyODE1OCwxNzExMjMsNDA4NzAsMTU4MTcsMzQ5NTksMTQ3NzkwLDI4NzkxLDIzNzk3LDE5MjMyLDE1MjAxMywxMzY1NywxNTQ5MjgsMjQ4NjYsMTY2NDUwLDM2Nzc1LDM3MzY2LDI5MDczLDI2MzkzLDI5NjI2LDE0NDAwMSwxNzIyOTUsMTU0OTksMTM3NjAwLDE5MjE2LDMwOTQ4LDI5Njk4LDIwOTEwLDE2NTY0NywxNjM5MywyNzIzNSwxNzI3MzAsMTY5MzEsMzQzMTksMTMzNzQzLDMxMjc0LDE3MDMxMSwxNjY2MzQsMzg3NDEsMjg3NDksMjEyODQsMTM5MzkwLDM3ODc2LDMwNDI1LDE2NjM3MSw0MDg3MSwzMDY4NSwyMDEzMSwyMDQ2NCwyMDY2OCwyMDAxNSwyMDI0Nyw0MDg3MiwyMTU1NiwzMjEzOSwyMjY3NCwyMjczNiwxMzg2NzgsMjQyMTAsMjQyMTcsMjQ1MTQsMTQxMDc0LDI1OTk1LDE0NDM3NywyNjkwNSwyNzIwMywxNDY1MzEsMjc5MDMsbnVsbCwyOTE4NCwxNDg3NDEsMjk1ODAsMTYwOTEsMTUwMDM1LDIzMzE3LDI5ODgxLDM1NzE1LDE1NDc4OCwxNTMyMzcsMzEzNzksMzE3MjQsMzE5MzksMzIzNjQsMzM1MjgsMzQxOTksNDA4NzMsMzQ5NjAsNDA4NzQsMzY1MzcsNDA4NzUsMzY4MTUsMzQxNDMsMzkzOTIsMzc0MDksNDA4NzYsMTY3MzUzLDEzNjI1NSwxNjQ5NywxNzA1OCwyMzA2NixudWxsLG51bGwsbnVsbCwzOTAxNiwyNjQ3NSwxNzAxNCwyMjMzMyxudWxsLDM0MjYyLDE0OTg4MywzMzQ3MSwxNjAwMTMsMTk1ODUsMTU5MDkyLDIzOTMxLDE1ODQ4NSwxNTk2NzgsNDA4NzcsNDA4NzgsMjM0NDYsNDA4NzksMjYzNDMsMzIzNDcsMjgyNDcsMzExNzgsMTU3NTIsMTc2MDMsMTQzOTU4LDE0MTIwNiwxNzMwNiwxNzcxOCxudWxsLDIzNzY1LDE0NjIwMiwzNTU3NywyMzY3MiwxNTYzNCwxNDQ3MjEsMjM5MjgsNDA4ODIsMjkwMTUsMTc3NTIsMTQ3NjkyLDEzODc4NywxOTU3NSwxNDcxMiwxMzM4NiwxMzE0OTIsMTU4Nzg1LDM1NTMyLDIwNDA0LDEzMTY0MSwyMjk3NSwzMzEzMiwzODk5OCwxNzAyMzQsMjQzNzksMTM0MDQ3LG51bGwsMTM5NzEzLDE2NjI1MywxNjY0MiwxODEwNywxNjgwNTcsMTYxMzUsNDA4ODMsMTcyNDY5LDE2NjMyLDE0Mjk0LDE4MTY3LDE1ODc5MCwxNjc2NCwxNjU1NTQsMTYwNzY3LDE3NzczLDE0NTQ4LDE1MjczMCwxNzc2MSwxNzY5MSwxOTg0OSwxOTU3OSwxOTgzMCwxNzg5OCwxNjMyOCwxNTAyODcsMTM5MjEsMTc2MzAsMTc1OTcsMTY4NzcsMjM4NzAsMjM4ODAsMjM4OTQsMTU4NjgsMTQzNTEsMjM5NzIsMjM5OTMsMTQzNjgsMTQzOTIsMjQxMzAsMjQyNTMsMjQzNTcsMjQ0NTEsMTQ2MDAsMTQ2MTIsMTQ2NTUsMTQ2NjksMjQ3OTEsMjQ4OTMsMjM3ODEsMTQ3MjksMjUwMTUsMjUwMTcsMjUwMzksMTQ3NzYsMjUxMzIsMjUyMzIsMjUzMTcsMjUzNjgsMTQ4NDAsMjIxOTMsMTQ4NTEsMjU1NzAsMjU1OTUsMjU2MDcsMjU2OTAsMTQ5MjMsMjU3OTIsMjM4MjksMjIwNDksNDA4NjMsMTQ5OTksMjU5OTAsMTUwMzcsMjYxMTEsMjYxOTUsMTUwOTAsMjYyNTgsMTUxMzgsMjYzOTAsMTUxNzAsMjY1MzIsMjY2MjQsMTUxOTIsMjY2OTgsMjY3NTYsMTUyMTgsMTUyMTcsMTUyMjcsMjY4ODksMjY5NDcsMjkyNzYsMjY5ODAsMjcwMzksMjcwMTMsMTUyOTIsMjcwOTQsMTUzMjUsMjcyMzcsMjcyNTIsMjcyNDksMjcyNjYsMTUzNDAsMjcyODksMTUzNDYsMjczMDcsMjczMTcsMjczNDgsMjczODIsMjc1MjEsMjc1ODUsMjc2MjYsMjc3NjUsMjc4MTgsMTU1NjMsMjc5MDYsMjc5MTAsMjc5NDIsMjgwMzMsMTU1OTksMjgwNjgsMjgwODEsMjgxODEsMjgxODQsMjgyMDEsMjgyOTQsMTY2MzM2LDI4MzQ3LDI4Mzg2LDI4Mzc4LDQwODMxLDI4MzkyLDI4MzkzLDI4NDUyLDI4NDY4LDE1Njg2LDE0NzI2NSwyODU0NSwyODYwNiwxNTcyMiwxNTczMywyOTExMSwyMzcwNSwxNTc1NCwyODcxNiwxNTc2MSwyODc1MiwyODc1NiwyODc4MywyODc5OSwyODgwOSwxMzE4NzcsMTczNDUsMTM4MDksMTM0ODcyLDE0NzE1OSwyMjQ2MiwxNTk0NDMsMjg5OTAsMTUzNTY4LDEzOTAyLDI3MDQyLDE2Njg4OSwyMzQxMiwzMTMwNSwxNTM4MjUsMTY5MTc3LDMxMzMzLDMxMzU3LDE1NDAyOCwzMTQxOSwzMTQwOCwzMTQyNiwzMTQyNywyOTEzNywxNTY4MTMsMTY4NDIsMzE0NTAsMzE0NTMsMzE0NjYsMTY4NzksMjE2ODIsMTU0NjI1LDMxNDk5LDMxNTczLDMxNTI5LDE1MjMzNCwxNTQ4NzgsMzE2NTAsMzE1OTksMzM2OTIsMTU0NTQ4LDE1ODg0NywzMTY5NiwzMzgyNSwzMTYzNCwzMTY3MiwxNTQ5MTIsMTU3ODksMTU0NzI1LDMzOTM4LDMxNzM4LDMxNzUwLDMxNzk3LDE1NDgxNywzMTgxMiwzMTg3NSwxNDk2MzQsMzE5MTAsMjYyMzcsMTQ4ODU2LDMxOTQ1LDMxOTQzLDMxOTc0LDMxODYwLDMxOTg3LDMxOTg5LDMxOTUwLDMyMzU5LDE3NjkzLDE1OTMwMCwzMjA5MywxNTk0NDYsMjk4MzcsMzIxMzcsMzIxNzEsMjg5ODEsMzIxNzksMzIyMTAsMTQ3NTQzLDE1NTY4OSwzMjIyOCwxNTYzNSwzMjI0NSwxMzcyMDksMzIyMjksMTY0NzE3LDMyMjg1LDE1NTkzNywxNTU5OTQsMzIzNjYsMzI0MDIsMTcxOTUsMzc5OTYsMzIyOTUsMzI1NzYsMzI1NzcsMzI1ODMsMzEwMzAsMTU2MzY4LDM5MzkzLDMyNjYzLDE1NjQ5NywzMjY3NSwxMzY4MDEsMTMxMTc2LDE3NzU2LDE0NTI1NCwxNzY2NywxNjQ2NjYsMzI3NjIsMTU2ODA5LDMyNzczLDMyNzc2LDMyNzk3LDMyODA4LDMyODE1LDE3MjE2NywxNTg5MTUsMzI4MjcsMzI4MjgsMzI4NjUsMTQxMDc2LDE4ODI1LDE1NzIyMiwxNDY5MTUsMTU3NDE2LDI2NDA1LDMyOTM1LDE2NjQ3MiwzMzAzMSwzMzA1MCwyMjcwNCwxNDEwNDYsMjc3NzUsMTU2ODI0LDE1MTQ4MCwyNTgzMSwxMzYzMzAsMzMzMDQsMTM3MzEwLDI3MjE5LDE1MDExNywxNTAxNjUsMTc1MzAsMzMzMjEsMTMzOTAxLDE1ODI5MCwxNDY4MTQsMjA0NzMsMTM2NDQ1LDM0MDE4LDMzNjM0LDE1ODQ3NCwxNDk5MjcsMTQ0Njg4LDEzNzA3NSwxNDY5MzYsMzM0NTAsMjY5MDcsMTk0OTY0LDE2ODU5LDM0MTIzLDMzNDg4LDMzNTYyLDEzNDY3OCwxMzcxNDAsMTQwMTcsMTQzNzQxLDE0NDczMCwzMzQwMywzMzUwNiwzMzU2MCwxNDcwODMsMTU5MTM5LDE1ODQ2OSwxNTg2MTUsMTQ0ODQ2LDE1ODA3LDMzNTY1LDIxOTk2LDMzNjY5LDE3Njc1LDE1OTE0MSwzMzcwOCwzMzcyOSwzMzc0NywxMzQzOCwxNTk0NDQsMjcyMjMsMzQxMzgsMTM0NjIsMTU5Mjk4LDE0MzA4NywzMzg4MCwxNTQ1OTYsMzM5MDUsMTU4MjcsMTc2MzYsMjczMDMsMzM4NjYsMTQ2NjEzLDMxMDY0LDMzOTYwLDE1ODYxNCwxNTkzNTEsMTU5Mjk5LDM0MDE0LDMzODA3LDMzNjgxLDE3NTY4LDMzOTM5LDM0MDIwLDE1NDc2OSwxNjk2MCwxNTQ4MTYsMTc3MzEsMzQxMDAsMjMyODIsMTU5Mzg1LDE3NzAzLDM0MTYzLDE3Njg2LDI2NTU5LDM0MzI2LDE2NTQxMywxNjU0MzUsMzQyNDEsMTU5ODgwLDM0MzA2LDEzNjU3OCwxNTk5NDksMTk0OTk0LDE3NzcwLDM0MzQ0LDEzODk2LDEzNzM3OCwyMTQ5NSwxNjA2NjYsMzQ0MzAsMzQ2NzMsMTcyMjgwLDM0Nzk4LDE0MjM3NSwzNDczNywzNDc3OCwzNDgzMSwyMjExMywzNDQxMiwyNjcxMCwxNzkzNSwzNDg4NSwzNDg4NiwxNjEyNDgsMTQ2ODczLDE2MTI1MiwzNDkxMCwzNDk3MiwxODAxMSwzNDk5NiwzNDk5NywyNTUzNywzNTAxMywzMDU4MywxNjE1NTEsMzUyMDcsMzUyMTAsMzUyMzgsMzUyNDEsMzUyMzksMzUyNjAsMTY2NDM3LDM1MzAzLDE2MjA4NCwxNjI0OTMsMzU0ODQsMzA2MTEsMzczNzQsMzU0NzIsMTYyMzkzLDMxNDY1LDE2MjYxOCwxNDczNDMsMTgxOTUsMTYyNjE2LDI5MDUyLDM1NTk2LDM1NjE1LDE1MjYyNCwxNTI5MzMsMzU2NDcsMzU2NjAsMzU2NjEsMzU0OTcsMTUwMTM4LDM1NzI4LDM1NzM5LDM1NTAzLDEzNjkyNywxNzk0MSwzNDg5NSwzNTk5NSwxNjMxNTYsMTYzMjE1LDE5NTAyOCwxNDExNywxNjMxNTUsMzYwNTQsMTYzMjI0LDE2MzI2MSwzNjExNCwzNjA5OSwxMzc0ODgsMzYwNTksMjg3NjQsMzYxMTMsMTUwNzI5LDE2MDgwLDM2MjE1LDM2MjY1LDE2Mzg0MiwxMzUxODgsMTQ5ODk4LDE1MjI4LDE2NDI4NCwxNjAwMTIsMzE0NjMsMzY1MjUsMzY1MzQsMzY1NDcsMzc1ODgsMzY2MzMsMzY2NTMsMTY0NzA5LDE2NDg4MiwzNjc3MywzNzYzNSwxNzI3MDMsMTMzNzEyLDM2Nzg3LDE4NzMwLDE2NjM2NiwxNjUxODEsMTQ2ODc1LDI0MzEyLDE0Mzk3MCwzNjg1NywxNzIwNTIsMTY1NTY0LDE2NTEyMSwxNDAwNjksMTQ3MjAsMTU5NDQ3LDM2OTE5LDE2NTE4MCwxNjI0OTQsMzY5NjEsMTY1MjI4LDE2NTM4NywzNzAzMiwxNjU2NTEsMzcwNjAsMTY1NjA2LDM3MDM4LDM3MTE3LDM3MjIzLDE1MDg4LDM3Mjg5LDM3MzE2LDMxOTE2LDE2NjE5NSwxMzg4ODksMzczOTAsMjc4MDcsMzc0NDEsMzc0NzQsMTUzMDE3LDM3NTYxLDE2NjU5OCwxNDY1ODcsMTY2NjY4LDE1MzA1MSwxMzQ0NDksMzc2NzYsMzc3MzksMTY2NjI1LDE2Njg5MSwyODgxNSwyMzIzNSwxNjY2MjYsMTY2NjI5LDE4Nzg5LDM3NDQ0LDE2Njg5MiwxNjY5NjksMTY2OTExLDM3NzQ3LDM3OTc5LDM2NTQwLDM4Mjc3LDM4MzEwLDM3OTI2LDM4MzA0LDI4NjYyLDE3MDgxLDE0MDkyMiwxNjU1OTIsMTM1ODA0LDE0Njk5MCwxODkxMSwyNzY3NiwzODUyMywzODU1MCwxNjc0OCwzODU2MywxNTk0NDUsMjUwNTAsMzg1ODIsMzA5NjUsMTY2NjI0LDM4NTg5LDIxNDUyLDE4ODQ5LDE1ODkwNCwxMzE3MDAsMTU2Njg4LDE2ODExMSwxNjgxNjUsMTUwMjI1LDEzNzQ5MywxNDQxMzgsMzg3MDUsMzQzNzAsMzg3MTAsMTg5NTksMTc3MjUsMTc3OTcsMTUwMjQ5LDI4Nzg5LDIzMzYxLDM4NjgzLDM4NzQ4LDE2ODQwNSwzODc0MywyMzM3MCwxNjg0MjcsMzg3NTEsMzc5MjUsMjA2ODgsMTQzNTQzLDE0MzU0OCwzODc5MywzODgxNSwzODgzMywzODg0NiwzODg0OCwzODg2NiwzODg4MCwxNTI2ODQsMzg4OTQsMjk3MjQsMTY5MDExLDM4OTExLDM4OTAxLDE2ODk4OSwxNjIxNzAsMTkxNTMsMzg5NjQsMzg5NjMsMzg5ODcsMzkwMTQsMTUxMTgsMTYwMTE3LDE1Njk3LDEzMjY1NiwxNDc4MDQsMTUzMzUwLDM5MTE0LDM5MDk1LDM5MTEyLDM5MTExLDE5MTk5LDE1OTAxNSwxMzY5MTUsMjE5MzYsMzkxMzcsMzkxNDIsMzkxNDgsMzc3NTIsMzkyMjUsMTUwMDU3LDE5MzE0LDE3MDA3MSwxNzAyNDUsMzk0MTMsMzk0MzYsMzk0ODMsMzk0NDAsMzk1MTIsMTUzMzgxLDE0MDIwLDE2ODExMywxNzA5NjUsMzk2NDgsMzk2NTAsMTcwNzU3LDM5NjY4LDE5NDcwLDM5NzAwLDM5NzI1LDE2NTM3NiwyMDUzMiwzOTczMiwxNTgxMjAsMTQ1MzEsMTQzNDg1LDM5NzYwLDM5NzQ0LDE3MTMyNiwyMzEwOSwxMzczMTUsMzk4MjIsMTQ4MDQzLDM5OTM4LDM5OTM1LDM5OTQ4LDE3MTYyNCw0MDQwNCwxNzE5NTksMTcyNDM0LDE3MjQ1OSwxNzIyNTcsMTcyMzIzLDE3MjUxMSw0MDMxOCw0MDMyMywxNzIzNDAsNDA0NjIsMjY3NjAsNDAzODgsMTM5NjExLDE3MjQzNSwxNzI1NzYsMTM3NTMxLDE3MjU5NSw0MDI0OSwxNzIyMTcsMTcyNzI0LDQwNTkyLDQwNTk3LDQwNjA2LDQwNjEwLDE5NzY0LDQwNjE4LDQwNjIzLDE0ODMyNCw0MDY0MSwxNTIwMCwxNDgyMSwxNTY0NSwyMDI3NCwxNDI3MCwxNjY5NTUsNDA3MDYsNDA3MTIsMTkzNTAsMzc5MjQsMTU5MTM4LDQwNzI3LDQwNzI2LDQwNzYxLDIyMTc1LDIyMTU0LDQwNzczLDM5MzUyLDE2ODA3NSwzODg5OCwzMzkxOSw0MDgwMiw0MDgwOSwzMTQ1Miw0MDg0NiwyOTIwNiwxOTM5MCwxNDk4NzcsMTQ5OTQ3LDI5MDQ3LDE1MDAwOCwxNDgyOTYsMTUwMDk3LDI5NTk4LDE2Njg3NCwxMzc0NjYsMzExMzUsMTY2MjcwLDE2NzQ3OCwzNzczNywzNzg3NSwxNjY0NjgsMzc2MTIsMzc3NjEsMzc4MzUsMTY2MjUyLDE0ODY2NSwyOTIwNywxNjEwNywzMDU3OCwzMTI5OSwyODg4MCwxNDg1OTUsMTQ4NDcyLDI5MDU0LDEzNzE5OSwyODgzNSwxMzc0MDYsMTQ0NzkzLDE2MDcxLDEzNzM0OSwxNTI2MjMsMTM3MjA4LDE0MTE0LDEzNjk1NSwxMzcyNzMsMTQwNDksMTM3MDc2LDEzNzQyNSwxNTU0NjcsMTQxMTUsMTM2ODk2LDIyMzYzLDE1MDA1MywxMzYxOTAsMTM1ODQ4LDEzNjEzNCwxMzYzNzQsMzQwNTEsMTQ1MDYyLDM0MDUxLDMzODc3LDE0OTkwOCwxNjAxMDEsMTQ2OTkzLDE1MjkyNCwxNDcxOTUsMTU5ODI2LDE3NjUyLDE0NTEzNCwxNzAzOTcsMTU5NTI2LDI2NjE3LDE0MTMxLDE1MzgxLDE1ODQ3LDIyNjM2LDEzNzUwNiwyNjY0MCwxNjQ3MSwxNDUyMTUsMTQ3NjgxLDE0NzU5NSwxNDc3MjcsMTU4NzUzLDIxNzA3LDIyMTc0LDE1NzM2MSwyMjE2MiwxMzUxMzUsMTM0MDU2LDEzNDY2OSwzNzgzMCwxNjY2NzUsMzc3ODgsMjAyMTYsMjA3NzksMTQzNjEsMTQ4NTM0LDIwMTU2LDEzMjE5NywxMzE5NjcsMjAyOTksMjAzNjIsMTUzMTY5LDIzMTQ0LDEzMTQ5OSwxMzIwNDMsMTQ3NDUsMTMxODUwLDEzMjExNiwxMzM2NSwyMDI2NSwxMzE3NzYsMTY3NjAzLDEzMTcwMSwzNTU0NiwxMzE1OTYsMjAxMjAsMjA2ODUsMjA3NDksMjAzODYsMjAyMjcsMTUwMDMwLDE0NzA4MiwyMDI5MCwyMDUyNiwyMDU4OCwyMDYwOSwyMDQyOCwyMDQ1MywyMDU2OCwyMDczMiwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyODI3OCwxNDQ3ODksMTQ3MDAxLDE0NzEzNSwyODAxOCwxMzczNDgsMTQ3MDgxLDIwOTA0LDIwOTMxLDEzMjU3NiwxNzYyOSwxMzIyNTksMTMyMjQyLDEzMjI0MSwzNjIxOCwxNjY1NTYsMTMyODc4LDIxMDgxLDIxMTU2LDEzMzIzNSwyMTIxNywzNzc0MiwxODA0MiwyOTA2OCwxNDgzNjQsMTM0MTc2LDE0OTkzMiwxMzUzOTYsMjcwODksMTM0Njg1LDI5ODE3LDE2MDk0LDI5ODQ5LDI5NzE2LDI5NzgyLDI5NTkyLDE5MzQyLDE1MDIwNCwxNDc1OTcsMjE0NTYsMTM3MDAsMjkxOTksMTQ3NjU3LDIxOTQwLDEzMTkwOSwyMTcwOSwxMzQwODYsMjIzMDEsMzc0NjksMzg2NDQsMzc3MzQsMjI0OTMsMjI0MTMsMjIzOTksMTM4ODYsMjI3MzEsMjMxOTMsMTY2NDcwLDEzNjk1NCwxMzcwNzEsMTM2OTc2LDIzMDg0LDIyOTY4LDM3NTE5LDIzMTY2LDIzMjQ3LDIzMDU4LDE1MzkyNiwxMzc3MTUsMTM3MzEzLDE0ODExNywxNDA2OSwyNzkwOSwyOTc2MywyMzA3MywxNTUyNjcsMjMxNjksMTY2ODcxLDEzMjExNSwzNzg1NiwyOTgzNiwxMzU5MzksMjg5MzMsMTg4MDIsMzc4OTYsMTY2Mzk1LDM3ODIxLDE0MjQwLDIzNTgyLDIzNzEwLDI0MTU4LDI0MTM2LDEzNzYyMiwxMzc1OTYsMTQ2MTU4LDI0MjY5LDIzMzc1LDEzNzQ3NSwxMzc0NzYsMTQwODEsMTM3Mzc2LDE0MDQ1LDEzNjk1OCwxNDAzNSwzMzA2NiwxNjY0NzEsMTM4NjgyLDE0NDQ5OCwxNjYzMTIsMjQzMzIsMjQzMzQsMTM3NTExLDEzNzEzMSwyMzE0NywxMzcwMTksMjMzNjQsMzQzMjQsMTYxMjc3LDM0OTEyLDI0NzAyLDE0MTQwOCwxNDA4NDMsMjQ1MzksMTYwNTYsMTQwNzE5LDE0MDczNCwxNjgwNzIsMTU5NjAzLDI1MDI0LDEzMTEzNCwxMzExNDIsMTQwODI3LDI0OTg1LDI0OTg0LDI0NjkzLDE0MjQ5MSwxNDI1OTksMTQ5MjA0LDE2ODI2OSwyNTcxMywxNDkwOTMsMTQyMTg2LDE0ODg5LDE0MjExNCwxNDQ0NjQsMTcwMjE4LDE0Mjk2OCwyNTM5OSwxNzMxNDcsMjU3ODIsMjUzOTMsMjU1NTMsMTQ5OTg3LDE0MjY5NSwyNTI1MiwxNDI0OTcsMjU2NTksMjU5NjMsMjY5OTQsMTUzNDgsMTQzNTAyLDE0NDA0NSwxNDk4OTcsMTQ0MDQzLDIxNzczLDE0NDA5NiwxMzc0MzMsMTY5MDIzLDI2MzE4LDE0NDAwOSwxNDM3OTUsMTUwNzIsMTY3ODQsMTUyOTY0LDE2NjY5MCwxNTI5NzUsMTM2OTU2LDE1MjkyMywxNTI2MTMsMzA5NTgsMTQzNjE5LDEzNzI1OCwxNDM5MjQsMTM0MTIsMTQzODg3LDE0Mzc0NiwxNDgxNjksMjYyNTQsMTU5MDEyLDI2MjE5LDE5MzQ3LDI2MTYwLDE2MTkwNCwxMzg3MzEsMjYyMTEsMTQ0MDgyLDE0NDA5NywyNjE0MiwxNTM3MTQsMTQ1NDUsMTQ1NDY2LDE0NTM0MCwxNTI1NywxNDUzMTQsMTQ0MzgyLDI5OTA0LDE1MjU0LDI2NTExLDE0OTAzNCwyNjgwNiwyNjY1NCwxNTMwMCwyNzMyNiwxNDQzNSwxNDUzNjUsMTQ4NjE1LDI3MTg3LDI3MjE4LDI3MzM3LDI3Mzk3LDEzNzQ5MCwyNTg3MywyNjc3NiwyNzIxMiwxNTMxOSwyNzI1OCwyNzQ3OSwxNDczOTIsMTQ2NTg2LDM3NzkyLDM3NjE4LDE2Njg5MCwxNjY2MDMsMzc1MTMsMTYzODcwLDE2NjM2NCwzNzk5MSwyODA2OSwyODQyNywxNDk5OTYsMjgwMDcsMTQ3MzI3LDE1NzU5LDI4MTY0LDE0NzUxNiwyMzEwMSwyODE3MCwyMjU5OSwyNzk0MCwzMDc4NiwyODk4NywxNDgyNTAsMTQ4MDg2LDI4OTEzLDI5MjY0LDI5MzE5LDI5MzMyLDE0OTM5MSwxNDkyODUsMjA4NTcsMTUwMTgwLDEzMjU4NywyOTgxOCwxNDcxOTIsMTQ0OTkxLDE1MDA5MCwxNDk3ODMsMTU1NjE3LDE2MTM0LDE2MDQ5LDE1MDIzOSwxNjY5NDcsMTQ3MjUzLDI0NzQzLDE2MTE1LDI5OTAwLDI5NzU2LDM3NzY3LDI5NzUxLDE3NTY3LDE1OTIxMCwxNzc0NSwzMDA4MywxNjIyNywxNTA3NDUsMTUwNzkwLDE2MjE2LDMwMDM3LDMwMzIzLDE3MzUxMCwxNTEyOSwyOTgwMCwxNjY2MDQsMTQ5OTMxLDE0OTkwMiwxNTA5OSwxNTgyMSwxNTAwOTQsMTYxMjcsMTQ5OTU3LDE0OTc0NywzNzM3MCwyMjMyMiwzNzY5OCwxNjY2MjcsMTM3MzE2LDIwNzAzLDE1MjA5NywxNTIwMzksMzA1ODQsMTQzOTIyLDMwNDc4LDMwNDc5LDMwNTg3LDE0OTE0MywxNDUyODEsMTQ5NDIsMTQ5NzQ0LDI5NzUyLDI5ODUxLDE2MDYzLDE1MDIwMiwxNTAyMTUsMTY1ODQsMTUwMTY2LDE1NjA3OCwzNzYzOSwxNTI5NjEsMzA3NTAsMzA4NjEsMzA4NTYsMzA5MzAsMjk2NDgsMzEwNjUsMTYxNjAxLDE1MzMxNSwxNjY1NCwzMTEzMSwzMzk0MiwzMTE0MSwyNzE4MSwxNDcxOTQsMzEyOTAsMzEyMjAsMTY3NTAsMTM2OTM0LDE2NjkwLDM3NDI5LDMxMjE3LDEzNDQ3NiwxNDk5MDAsMTMxNzM3LDE0Njg3NCwxMzcwNzAsMTM3MTksMjE4NjcsMTM2ODAsMTM5OTQsMTMxNTQwLDEzNDE1NywzMTQ1OCwyMzEyOSwxNDEwNDUsMTU0Mjg3LDE1NDI2OCwyMzA1MywxMzE2NzUsMzA5NjAsMjMwODIsMTU0NTY2LDMxNDg2LDE2ODg5LDMxODM3LDMxODUzLDE2OTEzLDE1NDU0NywxNTUzMjQsMTU1MzAyLDMxOTQ5LDE1MDAwOSwxMzcxMzYsMzE4ODYsMzE4NjgsMzE5MTgsMjczMTQsMzIyMjAsMzIyNjMsMzIyMTEsMzI1OTAsMTU2MjU3LDE1NTk5NiwxNjI2MzIsMzIxNTEsMTU1MjY2LDE3MDAyLDE1ODU4MSwxMzMzOTgsMjY1ODIsMTMxMTUwLDE0NDg0NywyMjQ2OCwxNTY2OTAsMTU2NjY0LDE0OTg1OCwzMjczMywzMTUyNywxMzMxNjQsMTU0MzQ1LDE1NDk0NywzMTUwMCwxNTUxNTAsMzkzOTgsMzQzNzMsMzk1MjMsMjcxNjQsMTQ0NDQ3LDE0ODE4LDE1MDAwNywxNTcxMDEsMzk0NTUsMTU3MDg4LDMzOTIwLDE2MDAzOSwxNTg5MjksMTc2NDIsMzMwNzksMTc0MTAsMzI5NjYsMzMwMzMsMzMwOTAsMTU3NjIwLDM5MTA3LDE1ODI3NCwzMzM3OCwzMzM4MSwxNTgyODksMzM4NzUsMTU5MTQzLDM0MzIwLDE2MDI4MywyMzE3NCwxNjc2NywxMzcyODAsMjMzMzksMTM3Mzc3LDIzMjY4LDEzNzQzMiwzNDQ2NCwxOTUwMDQsMTQ2ODMxLDM0ODYxLDE2MDgwMiwyMzA0MiwzNDkyNiwyMDI5MywzNDk1MSwzNTAwNywzNTA0NiwzNTE3MywzNTE0OSwxNTMyMTksMzUxNTYsMTYxNjY5LDE2MTY2OCwxNjY5MDEsMTY2ODczLDE2NjgxMiwxNjYzOTMsMTYwNDUsMzM5NTUsMTgxNjUsMTgxMjcsMTQzMjIsMzUzODksMzUzNTYsMTY5MDMyLDI0Mzk3LDM3NDE5LDE0ODEwMCwyNjA2OCwyODk2OSwyODg2OCwxMzcyODUsNDAzMDEsMzU5OTksMzYwNzMsMTYzMjkyLDIyOTM4LDMwNjU5LDIzMDI0LDE3MjYyLDE0MDM2LDM2Mzk0LDM2NTE5LDE1MDUzNywzNjY1NiwzNjY4MiwxNzE0MCwyNzczNiwyODYwMywxNDAwNjUsMTg1ODcsMjg1MzcsMjgyOTksMTM3MTc4LDM5OTEzLDE0MDA1LDE0OTgwNywzNzA1MSwzNzAxNSwyMTg3MywxODY5NCwzNzMwNywzNzg5MiwxNjY0NzUsMTY0ODIsMTY2NjUyLDM3OTI3LDE2Njk0MSwxNjY5NzEsMzQwMjEsMzUzNzEsMzgyOTcsMzgzMTEsMzgyOTUsMzgyOTQsMTY3MjIwLDI5NzY1LDE2MDY2LDE0OTc1OSwxNTAwODIsMTQ4NDU4LDE2MTAzLDE0MzkwOSwzODU0MywxNjc2NTUsMTY3NTI2LDE2NzUyNSwxNjA3NiwxNDk5OTcsMTUwMTM2LDE0NzQzOCwyOTcxNCwyOTgwMywxNjEyNCwzODcyMSwxNjgxMTIsMjY2OTUsMTg5NzMsMTY4MDgzLDE1MzU2NywzODc0OSwzNzczNiwxNjYyODEsMTY2OTUwLDE2NjcwMywxNTY2MDYsMzc1NjIsMjMzMTMsMzU2ODksMTg3NDgsMjk2ODksMTQ3OTk1LDM4ODExLDM4NzY5LDM5MjI0LDEzNDk1MCwyNDAwMSwxNjY4NTMsMTUwMTk0LDM4OTQzLDE2OTE3OCwzNzYyMiwxNjk0MzEsMzczNDksMTc2MDAsMTY2NzM2LDE1MDExOSwxNjY3NTYsMzkxMzIsMTY2NDY5LDE2MTI4LDM3NDE4LDE4NzI1LDMzODEyLDM5MjI3LDM5MjQ1LDE2MjU2NiwxNTg2OSwzOTMyMywxOTMxMSwzOTMzOCwzOTUxNiwxNjY3NTcsMTUzODAwLDI3Mjc5LDM5NDU3LDIzMjk0LDM5NDcxLDE3MDIyNSwxOTM0NCwxNzAzMTIsMzkzNTYsMTkzODksMTkzNTEsMzc3NTcsMjI2NDIsMTM1OTM4LDIyNTYyLDE0OTk0NCwxMzY0MjQsMzA3ODgsMTQxMDg3LDE0Njg3MiwyNjgyMSwxNTc0MSwzNzk3NiwxNDYzMSwyNDkxMiwxNDExODUsMTQxNjc1LDI0ODM5LDQwMDE1LDQwMDE5LDQwMDU5LDM5OTg5LDM5OTUyLDM5ODA3LDM5ODg3LDE3MTU2NSwzOTgzOSwxNzI1MzMsMTcyMjg2LDQwMjI1LDE5NjMwLDE0NzcxNiw0MDQ3MiwxOTYzMiw0MDIwNCwxNzI0NjgsMTcyMjY5LDE3MjI3NSwxNzAyODcsNDAzNTcsMzM5ODEsMTU5MjUwLDE1OTcxMSwxNTg1OTQsMzQzMDAsMTc3MTUsMTU5MTQwLDE1OTM2NCwxNTkyMTYsMzM4MjQsMzQyODYsMTU5MjMyLDE0NTM2NywxNTU3NDgsMzEyMDIsMTQ0Nzk2LDE0NDk2MCwxODczMywxNDk5ODIsMTU3MTQsMzc4NTEsMzc1NjYsMzc3MDQsMTMxNzc1LDMwOTA1LDM3NDk1LDM3OTY1LDIwNDUyLDEzMzc2LDM2OTY0LDE1MjkyNSwzMDc4MSwzMDgwNCwzMDkwMiwzMDc5NSwxMzcwNDcsMTQzODE3LDE0OTgyNSwxMzk3OCwyMDMzOCwyODYzNCwyODYzMywyODcwMiwyODcwMiwyMTUyNCwxNDc4OTMsMjI0NTksMjI3NzEsMjI0MTAsNDAyMTQsMjI0ODcsMjg5ODAsMTM0ODcsMTQ3ODg0LDI5MTYzLDE1ODc4NCwxNTE0NDcsMjMzMzYsMTM3MTQxLDE2NjQ3MywyNDg0NCwyMzI0NiwyMzA1MSwxNzA4NCwxNDg2MTYsMTQxMjQsMTkzMjMsMTY2Mzk2LDM3ODE5LDM3ODE2LDEzNzQzMCwxMzQ5NDEsMzM5MDYsMTU4OTEyLDEzNjIxMSwxNDgyMTgsMTQyMzc0LDE0ODQxNywyMjkzMiwxNDY4NzEsMTU3NTA1LDMyMTY4LDE1NTk5NSwxNTU4MTIsMTQ5OTQ1LDE0OTg5OSwxNjYzOTQsMzc2MDUsMjk2NjYsMTYxMDUsMjk4NzYsMTY2NzU1LDEzNzM3NSwxNjA5NywxNTAxOTUsMjczNTIsMjk2ODMsMjk2OTEsMTYwODYsMTUwMDc4LDE1MDE2NCwxMzcxNzcsMTUwMTE4LDEzMjAwNywxMzYyMjgsMTQ5OTg5LDI5NzY4LDE0OTc4MiwyODgzNywxNDk4NzgsMzc1MDgsMjk2NzAsMzc3MjcsMTMyMzUwLDM3NjgxLDE2NjYwNiwxNjY0MjIsMzc3NjYsMTY2ODg3LDE1MzA0NSwxODc0MSwxNjY1MzAsMjkwMzUsMTQ5ODI3LDEzNDM5OSwyMjE4MCwxMzI2MzQsMTM0MTIzLDEzNDMyOCwyMTc2MiwzMTE3MiwxMzcyMTAsMzIyNTQsMTM2ODk4LDE1MDA5NiwxMzcyOTgsMTc3MTAsMzc4ODksMTQwOTAsMTY2NTkyLDE0OTkzMywyMjk2MCwxMzc0MDcsMTM3MzQ3LDE2MDkwMCwyMzIwMSwxNDA1MCwxNDY3NzksMTQwMDAsMzc0NzEsMjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwxNTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYzNDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIsMjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYsMjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDksMjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQsMTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMxLDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcwLDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwzNzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMsMTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwyODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcxODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcwLDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5NiwyOTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYwNDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwyMjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwxNjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwzMDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUyMDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcsMzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAxLDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIwMDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMxOTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEzNDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5MiwyOTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQwOSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1MywzMzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwxNzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5NywyODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywzNDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcyMywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzkyNiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgsMjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcsMzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQsMzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUsMzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgwMDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgsMzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgsMzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIsMzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYsMTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQwMjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQwMzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQwNjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyMDAwLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjIwMDAsMjE5NDYsMjE2NTUsMjE4NzQsMTM0MjA5LDEzNDI5NCwyNDI3MiwxNTE4ODAsMTM0Nzc0LDE0MjQzNCwxMzQ4MTgsNDA2MTksMzIwOTAsMjE5ODIsMTM1Mjg1LDI1MjQ1LDM4NzY1LDIxNjUyLDM2MDQ1LDI5MTc0LDM3MjM4LDI1NTk2LDI1NTI5LDI1NTk4LDIxODY1LDE0MjE0Nyw0MDA1MCwxNDMwMjcsMjA4OTAsMTM1MzUsMTM0NTY3LDIwOTAzLDIxNTgxLDIxNzkwLDIxNzc5LDMwMzEwLDM2Mzk3LDE1NzgzNCwzMDEyOSwzMjk1MCwzNDgyMCwzNDY5NCwzNTAxNSwzMzIwNiwzMzgyMCwxMzUzNjEsMTc2NDQsMjk0NDQsMTQ5MjU0LDIzNDQwLDMzNTQ3LDE1Nzg0MywyMjEzOSwxNDEwNDQsMTYzMTE5LDE0Nzg3NSwxNjMxODcsMTU5NDQwLDE2MDQzOCwzNzIzMiwxMzU2NDEsMzczODQsMTQ2Njg0LDE3MzczNywxMzQ4MjgsMTM0OTA1LDI5Mjg2LDEzODQwMiwxODI1NCwxNTE0OTAsMTYzODMzLDEzNTE0NywxNjYzNCw0MDAyOSwyNTg4NywxNDI3NTIsMTg2NzUsMTQ5NDcyLDE3MTM4OCwxMzUxNDgsMTM0NjY2LDI0Njc0LDE2MTE4NywxMzUxNDksbnVsbCwxNTU3MjAsMTM1NTU5LDI5MDkxLDMyMzk4LDQwMjcyLDE5OTk0LDE5OTcyLDEzNjg3LDIzMzA5LDI3ODI2LDIxMzUxLDEzOTk2LDE0ODEyLDIxMzczLDEzOTg5LDE0OTAxNiwyMjY4MiwxNTAzODIsMzMzMjUsMjE1NzksMjI0NDIsMTU0MjYxLDEzMzQ5NyxudWxsLDE0OTMwLDE0MDM4OSwyOTU1NiwxNzE2OTIsMTk3MjEsMzk5MTcsMTQ2Njg2LDE3MTgyNCwxOTU0NywxNTE0NjUsMTY5Mzc0LDE3MTk5OCwzMzg4NCwxNDY4NzAsMTYwNDM0LDE1NzYxOSwxNDUxODQsMjUzOTAsMzIwMzcsMTQ3MTkxLDE0Njk4OCwxNDg5MCwzNjg3MiwyMTE5NiwxNTk4OCwxMzk0NiwxNzg5NywxMzIyMzgsMzAyNzIsMjMyODAsMTM0ODM4LDMwODQyLDE2MzYzMCwyMjY5NSwxNjU3NSwyMjE0MCwzOTgxOSwyMzkyNCwzMDI5MiwxNzMxMDgsNDA1ODEsMTk2ODEsMzAyMDEsMTQzMzEsMjQ4NTcsMTQzNTc4LDE0ODQ2NixudWxsLDIyMTA5LDEzNTg0OSwyMjQzOSwxNDk4NTksMTcxNTI2LDIxMDQ0LDE1OTkxOCwxMzc0MSwyNzcyMiw0MDMxNiwzMTgzMCwzOTczNywyMjQ5NCwxMzcwNjgsMjM2MzUsMjU4MTEsMTY5MTY4LDE1NjQ2OSwxNjAxMDAsMzQ0NzcsMTM0NDQwLDE1OTAxMCwxNTAyNDIsMTM0NTEzLG51bGwsMjA5OTAsMTM5MDIzLDIzOTUwLDM4NjU5LDEzODcwNSw0MDU3NywzNjk0MCwzMTUxOSwzOTY4MiwyMzc2MSwzMTY1MSwyNTE5MiwyNTM5NywzOTY3OSwzMTY5NSwzOTcyMiwzMTg3MCwzOTcyNiwzMTgxMCwzMTg3OCwzOTk1NywzMTc0MCwzOTY4OSw0MDcyNywzOTk2MywxNDk4MjIsNDA3OTQsMjE4NzUsMjM0OTEsMjA0NzcsNDA2MDAsMjA0NjYsMjEwODgsMTU4NzgsMjEyMDEsMjIzNzUsMjA1NjYsMjI5NjcsMjQwODIsMzg4NTYsNDAzNjMsMzY3MDAsMjE2MDksMzg4MzYsMzkyMzIsMzg4NDIsMjEyOTIsMjQ4ODAsMjY5MjQsMjE0NjYsMzk5NDYsNDAxOTQsMTk1MTUsMzg0NjUsMjcwMDgsMjA2NDYsMzAwMjIsMTM3MDY5LDM5Mzg2LDIxMTA3LG51bGwsMzcyMDksMzg1MjksMzcyMTIsbnVsbCwzNzIwMSwxNjc1NzUsMjU0NzEsMTU5MDExLDI3MzM4LDIyMDMzLDM3MjYyLDMwMDc0LDI1MjIxLDEzMjA5MiwyOTUxOSwzMTg1NiwxNTQ2NTcsMTQ2Njg1LG51bGwsMTQ5Nzg1LDMwNDIyLDM5ODM3LDIwMDEwLDEzNDM1NiwzMzcyNiwzNDg4MixudWxsLDIzNjI2LDI3MDcyLDIwNzE3LDIyMzk0LDIxMDIzLDI0MDUzLDIwMTc0LDI3Njk3LDEzMTU3MCwyMDI4MSwyMTY2MCwyMTcyMiwyMTE0NiwzNjIyNiwxMzgyMiwyNDMzMiwxMzgxMSxudWxsLDI3NDc0LDM3MjQ0LDQwODY5LDM5ODMxLDM4OTU4LDM5MDkyLDM5NjEwLDQwNjE2LDQwNTgwLDI5MDUwLDMxNTA4LG51bGwsMjc2NDIsMzQ4NDAsMzI2MzIsbnVsbCwyMjA0OCwxNzM2NDIsMzY0NzEsNDA3ODcsbnVsbCwzNjMwOCwzNjQzMSw0MDQ3NiwzNjM1MywyNTIxOCwxNjQ3MzMsMzYzOTIsMzY0NjksMzE0NDMsMTUwMTM1LDMxMjk0LDMwOTM2LDI3ODgyLDM1NDMxLDMwMjE1LDE2NjQ5MCw0MDc0MiwyNzg1NCwzNDc3NCwzMDE0NywxNzI3MjIsMzA4MDMsMTk0NjI0LDM2MTA4LDI5NDEwLDI5NTUzLDM1NjI5LDI5NDQyLDI5OTM3LDM2MDc1LDE1MDIwMywzNDM1MSwyNDUwNiwzNDk3NiwxNzU5MSxudWxsLDEzNzI3NSwxNTkyMzcsbnVsbCwzNTQ1NCwxNDA1NzEsbnVsbCwyNDgyOSwzMDMxMSwzOTYzOSw0MDI2MCwzNzc0MiwzOTgyMywzNDgwNSxudWxsLDM0ODMxLDM2MDg3LDI5NDg0LDM4Njg5LDM5ODU2LDEzNzgyLDI5MzYyLDE5NDYzLDMxODI1LDM5MjQyLDE1NTk5MywyNDkyMSwxOTQ2MCw0MDU5OCwyNDk1NyxudWxsLDIyMzY3LDI0OTQzLDI1MjU0LDI1MTQ1LDI1Mjk0LDE0OTQwLDI1MDU4LDIxNDE4LDE0NDM3MywyNTQ0NCwyNjYyNiwxMzc3OCwyMzg5NSwxNjY4NTAsMzY4MjYsMTY3NDgxLG51bGwsMjA2OTcsMTM4NTY2LDMwOTgyLDIxMjk4LDM4NDU2LDEzNDk3MSwxNjQ4NSxudWxsLDMwNzE4LG51bGwsMzE5MzgsMTU1NDE4LDMxOTYyLDMxMjc3LDMyODcwLDMyODY3LDMyMDc3LDI5OTU3LDI5OTM4LDM1MjIwLDMzMzA2LDI2MzgwLDMyODY2LDE2MDkwMiwzMjg1OSwyOTkzNiwzMzAyNywzMDUwMCwzNTIwOSwxNTc2NDQsMzAwMzUsMTU5NDQxLDM0NzI5LDM0NzY2LDMzMjI0LDM0NzAwLDM1NDAxLDM2MDEzLDM1NjUxLDMwNTA3LDI5OTQ0LDM0MDEwLDEzODc3LDI3MDU4LDM2MjYyLG51bGwsMzUyNDEsMjk4MDAsMjgwODksMzQ3NTMsMTQ3NDczLDI5OTI3LDE1ODM1LDI5MDQ2LDI0NzQwLDI0OTg4LDE1NTY5LDI5MDI2LDI0Njk1LG51bGwsMzI2MjUsMTY2NzAxLDI5MjY0LDI0ODA5LDE5MzI2LDIxMDI0LDE1Mzg0LDE0NjYzMSwxNTUzNTEsMTYxMzY2LDE1Mjg4MSwxMzc1NDAsMTM1OTM0LDE3MDI0MywxNTkxOTYsMTU5OTE3LDIzNzQ1LDE1NjA3NywxNjY0MTUsMTQ1MDE1LDEzMTMxMCwxNTc3NjYsMTUxMzEwLDE3NzYyLDIzMzI3LDE1NjQ5Miw0MDc4NCw0MDYxNCwxNTYyNjcsMTIyODgsNjUyOTIsMTIyODksMTIyOTAsNjUyOTQsODIzMSw2NTMwNyw2NTMwNiw2NTMxMSw2NTI4MSw2NTA3Miw4MjMwLDgyMjksNjUxMDQsNjUxMDUsNjUxMDYsMTgzLDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MzcyLDgyMTEsNjUwNzMsODIxMiw2NTA3NSw5NTg4LDY1MDc2LDY1MTAzLDY1Mjg4LDY1Mjg5LDY1MDc3LDY1MDc4LDY1MzcxLDY1MzczLDY1MDc5LDY1MDgwLDEyMzA4LDEyMzA5LDY1MDgxLDY1MDgyLDEyMzA0LDEyMzA1LDY1MDgzLDY1MDg0LDEyMjk4LDEyMjk5LDY1MDg1LDY1MDg2LDEyMjk2LDEyMjk3LDY1MDg3LDY1MDg4LDEyMzAwLDEyMzAxLDY1MDg5LDY1MDkwLDEyMzAyLDEyMzAzLDY1MDkxLDY1MDkyLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMTcsMTIzMTgsODI0NSw4MjQyLDY1MjgzLDY1Mjg2LDY1MjkwLDgyNTEsMTY3LDEyMjkxLDk2NzUsOTY3OSw5NjUxLDk2NTAsOTY3OCw5NzM0LDk3MzMsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjYxLDk2NjAsMTI5NjMsODQ1MywxNzUsNjU1MDcsNjUzNDMsNzE3LDY1MDk3LDY1MDk4LDY1MTAxLDY1MTAyLDY1MDk5LDY1MTAwLDY1MTE5LDY1MTIwLDY1MTIxLDY1MjkxLDY1MjkzLDIxNSwyNDcsMTc3LDg3MzAsNjUzMDgsNjUzMTAsNjUzMDksODgwNiw4ODA3LDg4MDAsODczNCw4Nzg2LDg4MDEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUzNzQsODc0NSw4NzQ2LDg4NjksODczNiw4NzM1LDg4OTUsMTMyNjYsMTMyNjUsODc0Nyw4NzUwLDg3NTcsODc1Niw5NzkyLDk3OTQsODg1Myw4ODU3LDg1OTMsODU5NSw4NTkyLDg1OTQsODU5OCw4NTk5LDg2MDEsODYwMCw4NzQxLDg3MzksNjUyOTUsNjUzNDAsODcyNSw2NTEyOCw2NTI4NCw2NTUwOSwxMjMwNiw2NTUwNCw2NTUwNSw2NTI4NSw2NTMxMiw4NDUxLDg0NTcsNjUxMjksNjUxMzAsNjUxMzEsMTMyNjksMTMyMTIsMTMyMTMsMTMyMTQsMTMyNjIsMTMyMTcsMTMxOTgsMTMxOTksMTMyNTIsMTc2LDIwODI1LDIwODI3LDIwODMwLDIwODI5LDIwODMzLDIwODM1LDIxOTkxLDI5OTI5LDMxOTUwLDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjE1LDk2MTQsOTYxMyw5NjEyLDk2MTEsOTYxMCw5NjA5LDk1MzIsOTUyNCw5NTE2LDk1MDgsOTUwMCw5NjIwLDk0NzIsOTQ3NCw5NjIxLDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTU4MSw5NTgyLDk1ODQsOTU4Myw5NTUyLDk1NjYsOTU3OCw5NTY5LDk2OTgsOTY5OSw5NzAxLDk3MDAsOTU4NSw5NTg2LDk1ODcsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MywxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwyMTMxMywyMTMxNiwyMTMxNyw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw3MjksNzEzLDcxNCw3MTEsNzE1LDkyMTYsOTIxNyw5MjE4LDkyMTksOTIyMCw5MjIxLDkyMjIsOTIyMyw5MjI0LDkyMjUsOTIyNiw5MjI3LDkyMjgsOTIyOSw5MjMwLDkyMzEsOTIzMiw5MjMzLDkyMzQsOTIzNSw5MjM2LDkyMzcsOTIzOCw5MjM5LDkyNDAsOTI0MSw5MjQyLDkyNDMsOTI0NCw5MjQ1LDkyNDYsOTI0Nyw5MjQ5LDgzNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTY4LDIwMDU3LDE5OTY5LDE5OTcxLDIwMDM1LDIwMDYxLDIwMTAyLDIwMTA4LDIwMTU0LDIwNzk5LDIwODM3LDIwODQzLDIwOTYwLDIwOTkyLDIwOTkzLDIxMTQ3LDIxMjY5LDIxMzEzLDIxMzQwLDIxNDQ4LDE5OTc3LDE5OTc5LDE5OTc2LDE5OTc4LDIwMDExLDIwMDI0LDIwOTYxLDIwMDM3LDIwMDQwLDIwMDYzLDIwMDYyLDIwMTEwLDIwMTI5LDIwODAwLDIwOTk1LDIxMjQyLDIxMzE1LDIxNDQ5LDIxNDc1LDIyMzAzLDIyNzYzLDIyODA1LDIyODIzLDIyODk5LDIzMzc2LDIzMzc3LDIzMzc5LDIzNTQ0LDIzNTY3LDIzNTg2LDIzNjA4LDIzNjY1LDI0MDI5LDI0MDM3LDI0MDQ5LDI0MDUwLDI0MDUxLDI0MDYyLDI0MTc4LDI0MzE4LDI0MzMxLDI0MzM5LDI1MTY1LDE5OTg1LDE5OTg0LDE5OTgxLDIwMDEzLDIwMDE2LDIwMDI1LDIwMDQzLDIzNjA5LDIwMTA0LDIwMTEzLDIwMTE3LDIwMTE0LDIwMTE2LDIwMTMwLDIwMTYxLDIwMTYwLDIwMTYzLDIwMTY2LDIwMTY3LDIwMTczLDIwMTcwLDIwMTcxLDIwMTY0LDIwODAzLDIwODAxLDIwODM5LDIwODQ1LDIwODQ2LDIwODQ0LDIwODg3LDIwOTgyLDIwOTk4LDIwOTk5LDIxMDAwLDIxMjQzLDIxMjQ2LDIxMjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIxMzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIwLDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIwMDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcxLDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIxMzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIxNDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIxNDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIxNDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMwLDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQzLDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIxLDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5OTgzLDI5OTkyLDI5OTkzLDMwMDAwLDMwMDAxLDMwMDAyLDMwMDAzLDMwMDkxLDMwMzMzLDMwMzgyLDMwMzk5LDMwNDQ2LDMwNjgzLDMwNjkwLDMwNzA3LDMxMDM0LDMxMTY2LDMxMzQ4LDMxNDM1LDE5OTk4LDE5OTk5LDIwMDUwLDIwMDUxLDIwMDczLDIwMTIxLDIwMTMyLDIwMTM0LDIwMTMzLDIwMjIzLDIwMjMzLDIwMjQ5LDIwMjM0LDIwMjQ1LDIwMjM3LDIwMjQwLDIwMjQxLDIwMjM5LDIwMjEwLDIwMjE0LDIwMjE5LDIwMjA4LDIwMjExLDIwMjIxLDIwMjI1LDIwMjM1LDIwODA5LDIwODA3LDIwODA2LDIwODA4LDIwODQwLDIwODQ5LDIwODc3LDIwOTEyLDIxMDE1LDIxMDA5LDIxMDEwLDIxMDA2LDIxMDE0LDIxMTU1LDIxMjU2LDIxMjgxLDIxMjgwLDIxMzYwLDIxMzYxLDIxNTEzLDIxNTE5LDIxNTE2LDIxNTE0LDIxNTIwLDIxNTA1LDIxNTE1LDIxNTA4LDIxNTIxLDIxNTE3LDIxNTEyLDIxNTA3LDIxNTE4LDIxNTEwLDIxNTIyLDIyMjQwLDIyMjM4LDIyMjM3LDIyMzIzLDIyMzIwLDIyMzEyLDIyMzE3LDIyMzE2LDIyMzE5LDIyMzEzLDIyODA5LDIyODEwLDIyODM5LDIyODQwLDIyOTE2LDIyOTA0LDIyOTE1LDIyOTA5LDIyOTA1LDIyOTE0LDIyOTEzLDIzMzgzLDIzMzg0LDIzNDMxLDIzNDMyLDIzNDI5LDIzNDMzLDIzNTQ2LDIzNTc0LDIzNjczLDI0MDMwLDI0MDcwLDI0MTgyLDI0MTgwLDI0MzM1LDI0MzQ3LDI0NTM3LDI0NTM0LDI1MTAyLDI1MTAwLDI1MTAxLDI1MTA0LDI1MTg3LDI1MTc5LDI1MTc2LDI1OTEwLDI2MDg5LDI2MDg4LDI2MDkyLDI2MDkzLDI2MzU0LDI2MzU1LDI2Mzc3LDI2NDI5LDI2NDIwLDI2NDE3LDI2NDIxLDI3NDI1LDI3NDkyLDI3NTE1LDI3NjcwLDI3NzQxLDI3NzM1LDI3NzM3LDI3NzQzLDI3NzQ0LDI3NzI4LDI3NzMzLDI3NzQ1LDI3NzM5LDI3NzI1LDI3NzI2LDI4Nzg0LDI5Mjc5LDI5Mjc3LDMwMzM0LDMxNDgxLDMxODU5LDMxOTkyLDMyNTY2LDMyNjUwLDMyNzAxLDMyNzY5LDMyNzcxLDMyNzgwLDMyNzg2LDMyODE5LDMyODk1LDMyOTA1LDMyOTA3LDMyOTA4LDMzMjUxLDMzMjU4LDMzMjY3LDMzMjc2LDMzMjkyLDMzMzA3LDMzMzExLDMzMzkwLDMzMzk0LDMzNDA2LDM0NDExLDM0ODgwLDM0ODkyLDM0OTE1LDM1MTk5LDM4NDMzLDIwMDE4LDIwMTM2LDIwMzAxLDIwMzAzLDIwMjk1LDIwMzExLDIwMzE4LDIwMjc2LDIwMzE1LDIwMzA5LDIwMjcyLDIwMzA0LDIwMzA1LDIwMjg1LDIwMjgyLDIwMjgwLDIwMjkxLDIwMzA4LDIwMjg0LDIwMjk0LDIwMzIzLDIwMzE2LDIwMzIwLDIwMjcxLDIwMzAyLDIwMjc4LDIwMzEzLDIwMzE3LDIwMjk2LDIwMzE0LDIwODEyLDIwODExLDIwODEzLDIwODUzLDIwOTE4LDIwOTE5LDIxMDI5LDIxMDI4LDIxMDMzLDIxMDM0LDIxMDMyLDIxMTYzLDIxMTYxLDIxMTYyLDIxMTY0LDIxMjgzLDIxMzYzLDIxMzY1LDIxNTMzLDIxNTQ5LDIxNTM0LDIxNTY2LDIxNTQyLDIxNTgyLDIxNTQzLDIxNTc0LDIxNTcxLDIxNTU1LDIxNTc2LDIxNTcwLDIxNTMxLDIxNTQ1LDIxNTc4LDIxNTYxLDIxNTYzLDIxNTYwLDIxNTUwLDIxNTU3LDIxNTU4LDIxNTM2LDIxNTY0LDIxNTY4LDIxNTUzLDIxNTQ3LDIxNTM1LDIxNTQ4LDIyMjUwLDIyMjU2LDIyMjQ0LDIyMjUxLDIyMzQ2LDIyMzUzLDIyMzM2LDIyMzQ5LDIyMzQzLDIyMzUwLDIyMzM0LDIyMzUyLDIyMzUxLDIyMzMxLDIyNzY3LDIyODQ2LDIyOTQxLDIyOTMwLDIyOTUyLDIyOTQyLDIyOTQ3LDIyOTM3LDIyOTM0LDIyOTI1LDIyOTQ4LDIyOTMxLDIyOTIyLDIyOTQ5LDIzMzg5LDIzMzg4LDIzMzg2LDIzMzg3LDIzNDM2LDIzNDM1LDIzNDM5LDIzNTk2LDIzNjE2LDIzNjE3LDIzNjE1LDIzNjE0LDIzNjk2LDIzNjk3LDIzNzAwLDIzNjkyLDI0MDQzLDI0MDc2LDI0MjA3LDI0MTk5LDI0MjAyLDI0MzExLDI0MzI0LDI0MzUxLDI0NDIwLDI0NDE4LDI0NDM5LDI0NDQxLDI0NTM2LDI0NTI0LDI0NTM1LDI0NTI1LDI0NTYxLDI0NTU1LDI0NTY4LDI0NTU0LDI1MTA2LDI1MTA1LDI1MjIwLDI1MjM5LDI1MjM4LDI1MjE2LDI1MjA2LDI1MjI1LDI1MTk3LDI1MjI2LDI1MjEyLDI1MjE0LDI1MjA5LDI1MjAzLDI1MjM0LDI1MTk5LDI1MjQwLDI1MTk4LDI1MjM3LDI1MjM1LDI1MjMzLDI1MjIyLDI1OTEzLDI1OTE1LDI1OTEyLDI2MDk3LDI2MzU2LDI2NDYzLDI2NDQ2LDI2NDQ3LDI2NDQ4LDI2NDQ5LDI2NDYwLDI2NDU0LDI2NDYyLDI2NDQxLDI2NDM4LDI2NDY0LDI2NDUxLDI2NDU1LDI3NDkzLDI3NTk5LDI3NzE0LDI3NzQyLDI3ODAxLDI3Nzc3LDI3Nzg0LDI3Nzg1LDI3NzgxLDI3ODAzLDI3NzU0LDI3NzcwLDI3NzkyLDI3NzYwLDI3Nzg4LDI3NzUyLDI3Nzk4LDI3Nzk0LDI3NzczLDI3Nzc5LDI3NzYyLDI3Nzc0LDI3NzY0LDI3NzgyLDI3NzY2LDI3Nzg5LDI3Nzk2LDI3ODAwLDI3Nzc4LDI4NzkwLDI4Nzk2LDI4Nzk3LDI4NzkyLDI5MjgyLDI5MjgxLDI5MjgwLDI5MzgwLDI5Mzc4LDI5NTkwLDI5OTk2LDI5OTk1LDMwMDA3LDMwMDA4LDMwMzM4LDMwNDQ3LDMwNjkxLDMxMTY5LDMxMTY4LDMxMTY3LDMxMzUwLDMxOTk1LDMyNTk3LDMyOTE4LDMyOTE1LDMyOTI1LDMyOTIwLDMyOTIzLDMyOTIyLDMyOTQ2LDMzMzkxLDMzNDI2LDMzNDE5LDMzNDIxLDM1MjExLDM1MjgyLDM1MzI4LDM1ODk1LDM1OTEwLDM1OTI1LDM1OTk3LDM2MTk2LDM2MjA4LDM2Mjc1LDM2NTIzLDM2NTU0LDM2NzYzLDM2Nzg0LDM2ODAyLDM2ODA2LDM2ODA1LDM2ODA0LDI0MDMzLDM3MDA5LDM3MDI2LDM3MDM0LDM3MDMwLDM3MDI3LDM3MTkzLDM3MzE4LDM3MzI0LDM4NDUwLDM4NDQ2LDM4NDQ5LDM4NDQyLDM4NDQ0LDIwMDA2LDIwMDU0LDIwMDgzLDIwMTA3LDIwMTIzLDIwMTI2LDIwMTM5LDIwMTQwLDIwMzM1LDIwMzgxLDIwMzY1LDIwMzM5LDIwMzUxLDIwMzMyLDIwMzc5LDIwMzYzLDIwMzU4LDIwMzU1LDIwMzM2LDIwMzQxLDIwMzYwLDIwMzI5LDIwMzQ3LDIwMzc0LDIwMzUwLDIwMzY3LDIwMzY5LDIwMzQ2LDIwODIwLDIwODE4LDIwODIxLDIwODQxLDIwODU1LDIwODU0LDIwODU2LDIwOTI1LDIwOTg5LDIxMDUxLDIxMDQ4LDIxMDQ3LDIxMDUwLDIxMDQwLDIxMDM4LDIxMDQ2LDIxMDU3LDIxMTgyLDIxMTc5LDIxMzMwLDIxMzMyLDIxMzMxLDIxMzI5LDIxMzUwLDIxMzY3LDIxMzY4LDIxMzY5LDIxNDYyLDIxNDYwLDIxNDYzLDIxNjE5LDIxNjIxLDIxNjU0LDIxNjI0LDIxNjUzLDIxNjMyLDIxNjI3LDIxNjIzLDIxNjM2LDIxNjUwLDIxNjM4LDIxNjI4LDIxNjQ4LDIxNjE3LDIxNjIyLDIxNjQ0LDIxNjU4LDIxNjAyLDIxNjA4LDIxNjQzLDIxNjI5LDIxNjQ2LDIyMjY2LDIyNDAzLDIyMzkxLDIyMzc4LDIyMzc3LDIyMzY5LDIyMzc0LDIyMzcyLDIyMzk2LDIyODEyLDIyODU3LDIyODU1LDIyODU2LDIyODUyLDIyODY4LDIyOTc0LDIyOTcxLDIyOTk2LDIyOTY5LDIyOTU4LDIyOTkzLDIyOTgyLDIyOTkyLDIyOTg5LDIyOTg3LDIyOTk1LDIyOTg2LDIyOTU5LDIyOTYzLDIyOTk0LDIyOTgxLDIzMzkxLDIzMzk2LDIzMzk1LDIzNDQ3LDIzNDUwLDIzNDQ4LDIzNDUyLDIzNDQ5LDIzNDUxLDIzNTc4LDIzNjI0LDIzNjIxLDIzNjIyLDIzNzM1LDIzNzEzLDIzNzM2LDIzNzIxLDIzNzIzLDIzNzI5LDIzNzMxLDI0MDg4LDI0MDkwLDI0MDg2LDI0MDg1LDI0MDkxLDI0MDgxLDI0MTg0LDI0MjE4LDI0MjE1LDI0MjIwLDI0MjEzLDI0MjE0LDI0MzEwLDI0MzU4LDI0MzU5LDI0MzYxLDI0NDQ4LDI0NDQ5LDI0NDQ3LDI0NDQ0LDI0NTQxLDI0NTQ0LDI0NTczLDI0NTY1LDI0NTc1LDI0NTkxLDI0NTk2LDI0NjIzLDI0NjI5LDI0NTk4LDI0NjE4LDI0NTk3LDI0NjA5LDI0NjE1LDI0NjE3LDI0NjE5LDI0NjAzLDI1MTEwLDI1MTA5LDI1MTUxLDI1MTUwLDI1MTUyLDI1MjE1LDI1Mjg5LDI1MjkyLDI1Mjg0LDI1Mjc5LDI1MjgyLDI1MjczLDI1Mjk4LDI1MzA3LDI1MjU5LDI1Mjk5LDI1MzAwLDI1MjkxLDI1Mjg4LDI1MjU2LDI1Mjc3LDI1Mjc2LDI1Mjk2LDI1MzA1LDI1Mjg3LDI1MjkzLDI1MjY5LDI1MzA2LDI1MjY1LDI1MzA0LDI1MzAyLDI1MzAzLDI1Mjg2LDI1MjYwLDI1Mjk0LDI1OTE4LDI2MDIzLDI2MDQ0LDI2MTA2LDI2MTMyLDI2MTMxLDI2MTI0LDI2MTE4LDI2MTE0LDI2MTI2LDI2MTEyLDI2MTI3LDI2MTMzLDI2MTIyLDI2MTE5LDI2MzgxLDI2Mzc5LDI2NDc3LDI2NTA3LDI2NTE3LDI2NDgxLDI2NTI0LDI2NDgzLDI2NDg3LDI2NTAzLDI2NTI1LDI2NTE5LDI2NDc5LDI2NDgwLDI2NDk1LDI2NTA1LDI2NDk0LDI2NTEyLDI2NDg1LDI2NTIyLDI2NTE1LDI2NDkyLDI2NDc0LDI2NDgyLDI3NDI3LDI3NDk0LDI3NDk1LDI3NTE5LDI3NjY3LDI3Njc1LDI3ODc1LDI3ODgwLDI3ODkxLDI3ODI1LDI3ODUyLDI3ODc3LDI3ODI3LDI3ODM3LDI3ODM4LDI3ODM2LDI3ODc0LDI3ODE5LDI3ODYxLDI3ODU5LDI3ODMyLDI3ODQ0LDI3ODMzLDI3ODQxLDI3ODIyLDI3ODYzLDI3ODQ1LDI3ODg5LDI3ODM5LDI3ODM1LDI3ODczLDI3ODY3LDI3ODUwLDI3ODIwLDI3ODg3LDI3ODY4LDI3ODYyLDI3ODcyLDI4ODIxLDI4ODE0LDI4ODE4LDI4ODEwLDI4ODI1LDI5MjI4LDI5MjI5LDI5MjQwLDI5MjU2LDI5Mjg3LDI5Mjg5LDI5Mzc2LDI5MzkwLDI5NDAxLDI5Mzk5LDI5MzkyLDI5NjA5LDI5NjA4LDI5NTk5LDI5NjExLDI5NjA1LDMwMDEzLDMwMTA5LDMwMTA1LDMwMTA2LDMwMzQwLDMwNDAyLDMwNDUwLDMwNDUyLDMwNjkzLDMwNzE3LDMxMDM4LDMxMDQwLDMxMDQxLDMxMTc3LDMxMTc2LDMxMzU0LDMxMzUzLDMxNDgyLDMxOTk4LDMyNTk2LDMyNjUyLDMyNjUxLDMyNzczLDMyOTU0LDMyOTMzLDMyOTMwLDMyOTQ1LDMyOTI5LDMyOTM5LDMyOTM3LDMyOTQ4LDMyOTM4LDMyOTQzLDMzMjUzLDMzMjc4LDMzMjkzLDMzNDU5LDMzNDM3LDMzNDMzLDMzNDUzLDMzNDY5LDMzNDM5LDMzNDY1LDMzNDU3LDMzNDUyLDMzNDQ1LDMzNDU1LDMzNDY0LDMzNDQzLDMzNDU2LDMzNDcwLDMzNDYzLDM0MzgyLDM0NDE3LDIxMDIxLDM0OTIwLDM2NTU1LDM2ODE0LDM2ODIwLDM2ODE3LDM3MDQ1LDM3MDQ4LDM3MDQxLDM3MDQ2LDM3MzE5LDM3MzI5LDM4MjYzLDM4MjcyLDM4NDI4LDM4NDY0LDM4NDYzLDM4NDU5LDM4NDY4LDM4NDY2LDM4NTg1LDM4NjMyLDM4NzM4LDM4NzUwLDIwMTI3LDIwMTQxLDIwMTQyLDIwNDQ5LDIwNDA1LDIwMzk5LDIwNDE1LDIwNDQ4LDIwNDMzLDIwNDMxLDIwNDQ1LDIwNDE5LDIwNDA2LDIwNDQwLDIwNDQ3LDIwNDI2LDIwNDM5LDIwMzk4LDIwNDMyLDIwNDIwLDIwNDE4LDIwNDQyLDIwNDMwLDIwNDQ2LDIwNDA3LDIwODIzLDIwODgyLDIwODgxLDIwODk2LDIxMDcwLDIxMDU5LDIxMDY2LDIxMDY5LDIxMDY4LDIxMDY3LDIxMDYzLDIxMTkxLDIxMTkzLDIxMTg3LDIxMTg1LDIxMjYxLDIxMzM1LDIxMzcxLDIxNDAyLDIxNDY3LDIxNjc2LDIxNjk2LDIxNjcyLDIxNzEwLDIxNzA1LDIxNjg4LDIxNjcwLDIxNjgzLDIxNzAzLDIxNjk4LDIxNjkzLDIxNjc0LDIxNjk3LDIxNzAwLDIxNzA0LDIxNjc5LDIxNjc1LDIxNjgxLDIxNjkxLDIxNjczLDIxNjcxLDIxNjk1LDIyMjcxLDIyNDAyLDIyNDExLDIyNDMyLDIyNDM1LDIyNDM0LDIyNDc4LDIyNDQ2LDIyNDE5LDIyODY5LDIyODY1LDIyODYzLDIyODYyLDIyODY0LDIzMDA0LDIzMDAwLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYyLDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUyLDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUzLDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMwNDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMwNzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMxMTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMxNDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1LDMyMDAwLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2MDAwLDM2MjEyLDM2MjExLDM2Mjc2LDM2NTU3LDM2NTU2LDM2ODQ4LDM2ODM4LDM2ODM0LDM2ODQyLDM2ODM3LDM2ODQ1LDM2ODQzLDM2ODM2LDM2ODQwLDM3MDY2LDM3MDcwLDM3MDU3LDM3MDU5LDM3MTk1LDM3MTk0LDM3MzI1LDM4Mjc0LDM4NDgwLDM4NDc1LDM4NDc2LDM4NDc3LDM4NzU0LDM4NzYxLDM4ODU5LDM4ODkzLDM4ODk5LDM4OTEzLDM5MDgwLDM5MTMxLDM5MTM1LDM5MzE4LDM5MzIxLDIwMDU2LDIwMTQ3LDIwNDkyLDIwNDkzLDIwNTE1LDIwNDYzLDIwNTE4LDIwNTE3LDIwNDcyLDIwNTIxLDIwNTAyLDIwNDg2LDIwNTQwLDIwNTExLDIwNTA2LDIwNDk4LDIwNDk3LDIwNDc0LDIwNDgwLDIwNTAwLDIwNTIwLDIwNDY1LDIwNTEzLDIwNDkxLDIwNTA1LDIwNTA0LDIwNDY3LDIwNDYyLDIwNTI1LDIwNTIyLDIwNDc4LDIwNTIzLDIwNDg5LDIwODYwLDIwOTAwLDIwOTAxLDIwODk4LDIwOTQxLDIwOTQwLDIwOTM0LDIwOTM5LDIxMDc4LDIxMDg0LDIxMDc2LDIxMDgzLDIxMDg1LDIxMjkwLDIxMzc1LDIxNDA3LDIxNDA1LDIxNDcxLDIxNzM2LDIxNzc2LDIxNzYxLDIxODE1LDIxNzU2LDIxNzMzLDIxNzQ2LDIxNzY2LDIxNzU0LDIxNzgwLDIxNzM3LDIxNzQxLDIxNzI5LDIxNzY5LDIxNzQyLDIxNzM4LDIxNzM0LDIxNzk5LDIxNzY3LDIxNzU3LDIxNzc1LDIyMjc1LDIyMjc2LDIyNDY2LDIyNDg0LDIyNDc1LDIyNDY3LDIyNTM3LDIyNzk5LDIyODcxLDIyODcyLDIyODc0LDIzMDU3LDIzMDY0LDIzMDY4LDIzMDcxLDIzMDY3LDIzMDU5LDIzMDIwLDIzMDcyLDIzMDc1LDIzMDgxLDIzMDc3LDIzMDUyLDIzMDQ5LDIzNDAzLDIzNjQwLDIzNDcyLDIzNDc1LDIzNDc4LDIzNDc2LDIzNDcwLDIzNDc3LDIzNDgxLDIzNDgwLDIzNTU2LDIzNjMzLDIzNjM3LDIzNjMyLDIzNzg5LDIzODA1LDIzODAzLDIzNzg2LDIzNzg0LDIzNzkyLDIzNzk4LDIzODA5LDIzNzk2LDI0MDQ2LDI0MTA5LDI0MTA3LDI0MjM1LDI0MjM3LDI0MjMxLDI0MzY5LDI0NDY2LDI0NDY1LDI0NDY0LDI0NjY1LDI0Njc1LDI0Njc3LDI0NjU2LDI0NjYxLDI0Njg1LDI0NjgxLDI0Njg3LDI0NzA4LDI0NzM1LDI0NzMwLDI0NzE3LDI0NzI0LDI0NzE2LDI0NzA5LDI0NzI2LDI1MTU5LDI1MzMxLDI1MzUyLDI1MzQzLDI1NDIyLDI1NDA2LDI1MzkxLDI1NDI5LDI1NDEwLDI1NDE0LDI1NDIzLDI1NDE3LDI1NDAyLDI1NDI0LDI1NDA1LDI1Mzg2LDI1Mzg3LDI1Mzg0LDI1NDIxLDI1NDIwLDI1OTI4LDI1OTI5LDI2MDA5LDI2MDQ5LDI2MDUzLDI2MTc4LDI2MTg1LDI2MTkxLDI2MTc5LDI2MTk0LDI2MTg4LDI2MTgxLDI2MTc3LDI2MzYwLDI2Mzg4LDI2Mzg5LDI2MzkxLDI2NjU3LDI2NjgwLDI2Njk2LDI2Njk0LDI2NzA3LDI2NjgxLDI2NjkwLDI2NzA4LDI2NjY1LDI2ODAzLDI2NjQ3LDI2NzAwLDI2NzA1LDI2Njg1LDI2NjEyLDI2NzA0LDI2Njg4LDI2Njg0LDI2NjkxLDI2NjY2LDI2NjkzLDI2NjQzLDI2NjQ4LDI2Njg5LDI3NTMwLDI3NTI5LDI3NTc1LDI3NjgzLDI3Njg3LDI3Njg4LDI3Njg2LDI3Njg0LDI3ODg4LDI4MDEwLDI4MDUzLDI4MDQwLDI4MDM5LDI4MDA2LDI4MDI0LDI4MDIzLDI3OTkzLDI4MDUxLDI4MDEyLDI4MDQxLDI4MDE0LDI3OTk0LDI4MDIwLDI4MDA5LDI4MDQ0LDI4MDQyLDI4MDI1LDI4MDM3LDI4MDA1LDI4MDUyLDI4ODc0LDI4ODg4LDI4OTAwLDI4ODg5LDI4ODcyLDI4ODc5LDI5MjQxLDI5MzA1LDI5NDM2LDI5NDMzLDI5NDM3LDI5NDMyLDI5NDMxLDI5NTc0LDI5Njc3LDI5NzA1LDI5Njc4LDI5NjY0LDI5Njc0LDI5NjYyLDMwMDM2LDMwMDQ1LDMwMDQ0LDMwMDQyLDMwMDQxLDMwMTQyLDMwMTQ5LDMwMTUxLDMwMTMwLDMwMTMxLDMwMTQxLDMwMTQwLDMwMTM3LDMwMTQ2LDMwMTM2LDMwMzQ3LDMwMzg0LDMwNDEwLDMwNDEzLDMwNDE0LDMwNTA1LDMwNDk1LDMwNDk2LDMwNTA0LDMwNjk3LDMwNzY4LDMwNzU5LDMwNzc2LDMwNzQ5LDMwNzcyLDMwNzc1LDMwNzU3LDMwNzY1LDMwNzUyLDMwNzUxLDMwNzcwLDMxMDYxLDMxMDU2LDMxMDcyLDMxMDcxLDMxMDYyLDMxMDcwLDMxMDY5LDMxMDYzLDMxMDY2LDMxMjA0LDMxMjAzLDMxMjA3LDMxMTk5LDMxMjA2LDMxMjA5LDMxMTkyLDMxMzY0LDMxMzY4LDMxNDQ5LDMxNDk0LDMxNTA1LDMxODgxLDMyMDMzLDMyMDIzLDMyMDExLDMyMDEwLDMyMDMyLDMyMDM0LDMyMDIwLDMyMDE2LDMyMDIxLDMyMDI2LDMyMDI4LDMyMDEzLDMyMDI1LDMyMDI3LDMyNTcwLDMyNjA3LDMyNjYwLDMyNzA5LDMyNzA1LDMyNzc0LDMyNzkyLDMyNzg5LDMyNzkzLDMyNzkxLDMyODI5LDMyODMxLDMzMDA5LDMzMDI2LDMzMDA4LDMzMDI5LDMzMDA1LDMzMDEyLDMzMDMwLDMzMDE2LDMzMDExLDMzMDMyLDMzMDIxLDMzMDM0LDMzMDIwLDMzMDA3LDMzMjYxLDMzMjYwLDMzMjgwLDMzMjk2LDMzMzIyLDMzMzIzLDMzMzIwLDMzMzI0LDMzNDY3LDMzNTc5LDMzNjE4LDMzNjIwLDMzNjEwLDMzNTkyLDMzNjE2LDMzNjA5LDMzNTg5LDMzNTg4LDMzNjE1LDMzNTg2LDMzNTkzLDMzNTkwLDMzNTU5LDMzNjAwLDMzNTg1LDMzNTc2LDMzNjAzLDM0Mzg4LDM0NDQyLDM0NDc0LDM0NDUxLDM0NDY4LDM0NDczLDM0NDQ0LDM0NDY3LDM0NDYwLDM0OTI4LDM0OTM1LDM0OTQ1LDM0OTQ2LDM0OTQxLDM0OTM3LDM1MzUyLDM1MzQ0LDM1MzQyLDM1MzQwLDM1MzQ5LDM1MzM4LDM1MzUxLDM1MzQ3LDM1MzUwLDM1MzQzLDM1MzQ1LDM1OTEyLDM1OTYyLDM1OTYxLDM2MDAxLDM2MDAyLDM2MjE1LDM2NTI0LDM2NTYyLDM2NTY0LDM2NTU5LDM2Nzg1LDM2ODY1LDM2ODcwLDM2ODU1LDM2ODY0LDM2ODU4LDM2ODUyLDM2ODY3LDM2ODYxLDM2ODY5LDM2ODU2LDM3MDEzLDM3MDg5LDM3MDg1LDM3MDkwLDM3MjAyLDM3MTk3LDM3MTk2LDM3MzM2LDM3MzQxLDM3MzM1LDM3MzQwLDM3MzM3LDM4Mjc1LDM4NDk4LDM4NDk5LDM4NDk3LDM4NDkxLDM4NDkzLDM4NTAwLDM4NDg4LDM4NDk0LDM4NTg3LDM5MTM4LDM5MzQwLDM5NTkyLDM5NjQwLDM5NzE3LDM5NzMwLDM5NzQwLDIwMDk0LDIwNjAyLDIwNjA1LDIwNTcyLDIwNTUxLDIwNTQ3LDIwNTU2LDIwNTcwLDIwNTUzLDIwNTgxLDIwNTk4LDIwNTU4LDIwNTY1LDIwNTk3LDIwNTk2LDIwNTk5LDIwNTU5LDIwNDk1LDIwNTkxLDIwNTg5LDIwODI4LDIwODg1LDIwOTc2LDIxMDk4LDIxMTAzLDIxMjAyLDIxMjA5LDIxMjA4LDIxMjA1LDIxMjY0LDIxMjYzLDIxMjczLDIxMzExLDIxMzEyLDIxMzEwLDIxNDQzLDI2MzY0LDIxODMwLDIxODY2LDIxODYyLDIxODI4LDIxODU0LDIxODU3LDIxODI3LDIxODM0LDIxODA5LDIxODQ2LDIxODM5LDIxODQ1LDIxODA3LDIxODYwLDIxODE2LDIxODA2LDIxODUyLDIxODA0LDIxODU5LDIxODExLDIxODI1LDIxODQ3LDIyMjgwLDIyMjgzLDIyMjgxLDIyNDk1LDIyNTMzLDIyNTM4LDIyNTM0LDIyNDk2LDIyNTAwLDIyNTIyLDIyNTMwLDIyNTgxLDIyNTE5LDIyNTIxLDIyODE2LDIyODgyLDIzMDk0LDIzMTA1LDIzMTEzLDIzMTQyLDIzMTQ2LDIzMTA0LDIzMTAwLDIzMTM4LDIzMTMwLDIzMTEwLDIzMTE0LDIzNDA4LDIzNDk1LDIzNDkzLDIzNDkyLDIzNDkwLDIzNDg3LDIzNDk0LDIzNTYxLDIzNTYwLDIzNTU5LDIzNjQ4LDIzNjQ0LDIzNjQ1LDIzODE1LDIzODE0LDIzODIyLDIzODM1LDIzODMwLDIzODQyLDIzODI1LDIzODQ5LDIzODI4LDIzODMzLDIzODQ0LDIzODQ3LDIzODMxLDI0MDM0LDI0MTIwLDI0MTE4LDI0MTE1LDI0MTE5LDI0MjQ3LDI0MjQ4LDI0MjQ2LDI0MjQ1LDI0MjU0LDI0MzczLDI0Mzc1LDI0NDA3LDI0NDI4LDI0NDI1LDI0NDI3LDI0NDcxLDI0NDczLDI0NDc4LDI0NDcyLDI0NDgxLDI0NDgwLDI0NDc2LDI0NzAzLDI0NzM5LDI0NzEzLDI0NzM2LDI0NzQ0LDI0Nzc5LDI0NzU2LDI0ODA2LDI0NzY1LDI0NzczLDI0NzYzLDI0NzU3LDI0Nzk2LDI0NzY0LDI0NzkyLDI0Nzg5LDI0Nzc0LDI0Nzk5LDI0NzYwLDI0Nzk0LDI0Nzc1LDI1MTE0LDI1MTE1LDI1MTYwLDI1NTA0LDI1NTExLDI1NDU4LDI1NDk0LDI1NTA2LDI1NTA5LDI1NDYzLDI1NDQ3LDI1NDk2LDI1NTE0LDI1NDU3LDI1NTEzLDI1NDgxLDI1NDc1LDI1NDk5LDI1NDUxLDI1NTEyLDI1NDc2LDI1NDgwLDI1NDk3LDI1NTA1LDI1NTE2LDI1NDkwLDI1NDg3LDI1NDcyLDI1NDY3LDI1NDQ5LDI1NDQ4LDI1NDY2LDI1OTQ5LDI1OTQyLDI1OTM3LDI1OTQ1LDI1OTQzLDIxODU1LDI1OTM1LDI1OTQ0LDI1OTQxLDI1OTQwLDI2MDEyLDI2MDExLDI2MDI4LDI2MDYzLDI2MDU5LDI2MDYwLDI2MDYyLDI2MjA1LDI2MjAyLDI2MjEyLDI2MjE2LDI2MjE0LDI2MjA2LDI2MzYxLDIxMjA3LDI2Mzk1LDI2NzUzLDI2Nzk5LDI2Nzg2LDI2NzcxLDI2ODA1LDI2NzUxLDI2NzQyLDI2ODAxLDI2NzkxLDI2Nzc1LDI2ODAwLDI2NzU1LDI2ODIwLDI2Nzk3LDI2NzU4LDI2NzU3LDI2NzcyLDI2NzgxLDI2NzkyLDI2NzgzLDI2Nzg1LDI2NzU0LDI3NDQyLDI3NTc4LDI3NjI3LDI3NjI4LDI3NjkxLDI4MDQ2LDI4MDkyLDI4MTQ3LDI4MTIxLDI4MDgyLDI4MTI5LDI4MTA4LDI4MTMyLDI4MTU1LDI4MTU0LDI4MTY1LDI4MTAzLDI4MTA3LDI4MDc5LDI4MTEzLDI4MDc4LDI4MTI2LDI4MTUzLDI4MDg4LDI4MTUxLDI4MTQ5LDI4MTAxLDI4MTE0LDI4MTg2LDI4MDg1LDI4MTIyLDI4MTM5LDI4MTIwLDI4MTM4LDI4MTQ1LDI4MTQyLDI4MTM2LDI4MTAyLDI4MTAwLDI4MDc0LDI4MTQwLDI4MDk1LDI4MTM0LDI4OTIxLDI4OTM3LDI4OTM4LDI4OTI1LDI4OTExLDI5MjQ1LDI5MzA5LDI5MzEzLDI5NDY4LDI5NDY3LDI5NDYyLDI5NDU5LDI5NDY1LDI5NTc1LDI5NzAxLDI5NzA2LDI5Njk5LDI5NzAyLDI5Njk0LDI5NzA5LDI5OTIwLDI5OTQyLDI5OTQzLDI5OTgwLDI5OTg2LDMwMDUzLDMwMDU0LDMwMDUwLDMwMDY0LDMwMDk1LDMwMTY0LDMwMTY1LDMwMTMzLDMwMTU0LDMwMTU3LDMwMzUwLDMwNDIwLDMwNDE4LDMwNDI3LDMwNTE5LDMwNTI2LDMwNTI0LDMwNTE4LDMwNTIwLDMwNTIyLDMwODI3LDMwNzg3LDMwNzk4LDMxMDc3LDMxMDgwLDMxMDg1LDMxMjI3LDMxMzc4LDMxMzgxLDMxNTIwLDMxNTI4LDMxNTE1LDMxNTMyLDMxNTI2LDMxNTEzLDMxNTE4LDMxNTM0LDMxODkwLDMxODk1LDMxODkzLDMyMDcwLDMyMDY3LDMyMTEzLDMyMDQ2LDMyMDU3LDMyMDYwLDMyMDY0LDMyMDQ4LDMyMDUxLDMyMDY4LDMyMDQ3LDMyMDY2LDMyMDUwLDMyMDQ5LDMyNTczLDMyNjcwLDMyNjY2LDMyNzE2LDMyNzE4LDMyNzIyLDMyNzk2LDMyODQyLDMyODM4LDMzMDcxLDMzMDQ2LDMzMDU5LDMzMDY3LDMzMDY1LDMzMDcyLDMzMDYwLDMzMjgyLDMzMzMzLDMzMzM1LDMzMzM0LDMzMzM3LDMzNjc4LDMzNjk0LDMzNjg4LDMzNjU2LDMzNjk4LDMzNjg2LDMzNzI1LDMzNzA3LDMzNjgyLDMzNjc0LDMzNjgzLDMzNjczLDMzNjk2LDMzNjU1LDMzNjU5LDMzNjYwLDMzNjcwLDMzNzAzLDM0Mzg5LDI0NDI2LDM0NTAzLDM0NDk2LDM0NDg2LDM0NTAwLDM0NDg1LDM0NTAyLDM0NTA3LDM0NDgxLDM0NDc5LDM0NTA1LDM0ODk5LDM0OTc0LDM0OTUyLDM0OTg3LDM0OTYyLDM0OTY2LDM0OTU3LDM0OTU1LDM1MjE5LDM1MjE1LDM1MzcwLDM1MzU3LDM1MzYzLDM1MzY1LDM1Mzc3LDM1MzczLDM1MzU5LDM1MzU1LDM1MzYyLDM1OTEzLDM1OTMwLDM2MDA5LDM2MDEyLDM2MDExLDM2MDA4LDM2MDEwLDM2MDA3LDM2MTk5LDM2MTk4LDM2Mjg2LDM2MjgyLDM2NTcxLDM2NTc1LDM2ODg5LDM2ODc3LDM2ODkwLDM2ODg3LDM2ODk5LDM2ODk1LDM2ODkzLDM2ODgwLDM2ODg1LDM2ODk0LDM2ODk2LDM2ODc5LDM2ODk4LDM2ODg2LDM2ODkxLDM2ODg0LDM3MDk2LDM3MTAxLDM3MTE3LDM3MjA3LDM3MzI2LDM3MzY1LDM3MzUwLDM3MzQ3LDM3MzUxLDM3MzU3LDM3MzUzLDM4MjgxLDM4NTA2LDM4NTE3LDM4NTE1LDM4NTIwLDM4NTEyLDM4NTE2LDM4NTE4LDM4NTE5LDM4NTA4LDM4NTkyLDM4NjM0LDM4NjMzLDMxNDU2LDMxNDU1LDM4OTE0LDM4OTE1LDM5NzcwLDQwMTY1LDQwNTY1LDQwNTc1LDQwNjEzLDQwNjM1LDIwNjQyLDIwNjIxLDIwNjEzLDIwNjMzLDIwNjI1LDIwNjA4LDIwNjMwLDIwNjMyLDIwNjM0LDI2MzY4LDIwOTc3LDIxMTA2LDIxMTA4LDIxMTA5LDIxMDk3LDIxMjE0LDIxMjEzLDIxMjExLDIxMzM4LDIxNDEzLDIxODgzLDIxODg4LDIxOTI3LDIxODg0LDIxODk4LDIxOTE3LDIxOTEyLDIxODkwLDIxOTE2LDIxOTMwLDIxOTA4LDIxODk1LDIxODk5LDIxODkxLDIxOTM5LDIxOTM0LDIxOTE5LDIxODIyLDIxOTM4LDIxOTE0LDIxOTQ3LDIxOTMyLDIxOTM3LDIxODg2LDIxODk3LDIxOTMxLDIxOTEzLDIyMjg1LDIyNTc1LDIyNTcwLDIyNTgwLDIyNTY0LDIyNTc2LDIyNTc3LDIyNTYxLDIyNTU3LDIyNTYwLDIyNzc3LDIyNzc4LDIyODgwLDIzMTU5LDIzMTk0LDIzMTY3LDIzMTg2LDIzMTk1LDIzMjA3LDIzNDExLDIzNDA5LDIzNTA2LDIzNTAwLDIzNTA3LDIzNTA0LDIzNTYyLDIzNTYzLDIzNjAxLDIzODg0LDIzODg4LDIzODYwLDIzODc5LDI0MDYxLDI0MTMzLDI0MTI1LDI0MTI4LDI0MTMxLDI0MTkwLDI0MjY2LDI0MjU3LDI0MjU4LDI0MjYwLDI0MzgwLDI0NDI5LDI0NDg5LDI0NDkwLDI0NDg4LDI0Nzg1LDI0ODAxLDI0NzU0LDI0NzU4LDI0ODAwLDI0ODYwLDI0ODY3LDI0ODI2LDI0ODUzLDI0ODE2LDI0ODI3LDI0ODIwLDI0OTM2LDI0ODE3LDI0ODQ2LDI0ODIyLDI0ODQxLDI0ODMyLDI0ODUwLDI1MTE5LDI1MTYxLDI1NTA3LDI1NDg0LDI1NTUxLDI1NTM2LDI1NTc3LDI1NTQ1LDI1NTQyLDI1NTQ5LDI1NTU0LDI1NTcxLDI1NTUyLDI1NTY5LDI1NTU4LDI1NTgxLDI1NTgyLDI1NDYyLDI1NTg4LDI1NTc4LDI1NTYzLDI1NjgyLDI1NTYyLDI1NTkzLDI1OTUwLDI1OTU4LDI1OTU0LDI1OTU1LDI2MDAxLDI2MDAwLDI2MDMxLDI2MjIyLDI2MjI0LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3NjkyLDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4MjcwLDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMzLDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMwODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMxNDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMxNTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMxOTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMzNzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMzODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMzNzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMzNzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkzLDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEzLDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3MzkzLDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIyLDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIxOTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIxOTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIxOTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIyNjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDkyLDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIwLDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUzLDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIwLDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMyLDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMwMTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMwMTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcxLDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAyLDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYwLDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAzLDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMxMjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMxNTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMyMTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMyNjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMxLDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUxLDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMzODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQxLDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQwLDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQxLDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUxLDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQwLDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMwLDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIwOTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIyMDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIyMDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIyNjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcwLDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIzNjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgzLDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcyLDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIwLDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMwNTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMwODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMxMjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIzLDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgwLDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMyMTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMyODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMzMTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMzMjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkzLDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAzLDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIzLDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUwLDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUyLDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYyLDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQwLDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgwLDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIxMTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIyMDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIyMTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIyNzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMxLDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYyLDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0MjkxLDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1NzcyLDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAxLDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMwMjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMwOTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMwOTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMxNDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUxLDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMyODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0NjgwLDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkxLDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIyLDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgzLDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTkyLDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYzLDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5NzkxLDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIwNzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIyMTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIyMTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIyNzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEwLDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgyLDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMwNDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMwOTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMxMzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjczLDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUwLDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMzMjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4NjcxLDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYwLDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQwMjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQwNjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIwNzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYwLDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMxLDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEwLDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUyLDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMwNjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMwNzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMxMTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMyMzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMzMjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMzMjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIzLDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMxLDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMxLDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIyLDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQwMjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQwNjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIyMTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEzLDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMyLDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIzLDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMwNjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMxMzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgzLDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUzLDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2Njg1LDM2OTk5LDM2OTk1LDM3MDAwLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5MDAwLDM5MDAzLDM5MTAwLDM5MjM3LDM5MjQxLDM5NDQ2LDM5NDQ5LDM5NjkzLDM5OTEyLDM5OTExLDM5ODk0LDM5ODk5LDQwMzI5LDQwMjg5LDQwMzA2LDQwMjk4LDQwMzAwLDQwNTk0LDQwNTk5LDQwNTk1LDQwNjI4LDIxMjQwLDIyMTg0LDIyMTk5LDIyMTk4LDIyMTk2LDIyMjA0LDIyNzU2LDIzMzYwLDIzMzYzLDIzNDIxLDIzNTQyLDI0MDA5LDI1MDgwLDI1MDgyLDI1ODgwLDI1ODc2LDI1ODgxLDI2MzQyLDI2NDA3LDI3MzcyLDI4NzM0LDI4NzIwLDI4NzIyLDI5MjAwLDI5NTYzLDI5OTAzLDMwMzA2LDMwMzA5LDMxMDE0LDMxMDE4LDMxMDIwLDMxMDE5LDMxNDMxLDMxNDc4LDMxODIwLDMxODExLDMxODIxLDMxOTgzLDMxOTg0LDM2NzgyLDMyMzgxLDMyMzgwLDMyMzg2LDMyNTg4LDMyNzY4LDMzMjQyLDMzMzgyLDM0Mjk5LDM0Mjk3LDM0MzIxLDM0Mjk4LDM0MzEwLDM0MzE1LDM0MzExLDM0MzE0LDM0ODM2LDM0ODM3LDM1MTcyLDM1MjU4LDM1MzIwLDM1Njk2LDM1NjkyLDM1Njg2LDM1Njk1LDM1Njc5LDM1NjkxLDM2MTExLDM2MTA5LDM2NDg5LDM2NDgxLDM2NDg1LDM2NDgyLDM3MzAwLDM3MzIzLDM3OTEyLDM3ODkxLDM3ODg1LDM4MzY5LDM4NzA0LDM5MTA4LDM5MjUwLDM5MjQ5LDM5MzM2LDM5NDY3LDM5NDcyLDM5NDc5LDM5NDc3LDM5OTU1LDM5OTQ5LDQwNTY5LDQwNjI5LDQwNjgwLDQwNzUxLDQwNzk5LDQwODAzLDQwODAxLDIwNzkxLDIwNzkyLDIyMjA5LDIyMjA4LDIyMjEwLDIyODA0LDIzNjYwLDI0MDEzLDI1MDg0LDI1MDg2LDI1ODg1LDI1ODg0LDI2MDA1LDI2MzQ1LDI3Mzg3LDI3Mzk2LDI3Mzg2LDI3NTcwLDI4NzQ4LDI5MjExLDI5MzUxLDI5OTEwLDI5OTA4LDMwMzEzLDMwNjc1LDMxODI0LDMyMzk5LDMyMzk2LDMyNzAwLDM0MzI3LDM0MzQ5LDM0MzMwLDM0ODUxLDM0ODUwLDM0ODQ5LDM0ODQ3LDM1MTc4LDM1MTgwLDM1MjYxLDM1NzAwLDM1NzAzLDM1NzA5LDM2MTE1LDM2NDkwLDM2NDkzLDM2NDkxLDM2NzAzLDM2NzgzLDM3MzA2LDM3OTM0LDM3OTM5LDM3OTQxLDM3OTQ2LDM3OTQ0LDM3OTM4LDM3OTMxLDM4MzcwLDM4NzEyLDM4NzEzLDM4NzA2LDM4OTExLDM5MDE1LDM5MDEzLDM5MjU1LDM5NDkzLDM5NDkxLDM5NDg4LDM5NDg2LDM5NjMxLDM5NzY0LDM5NzYxLDM5OTgxLDM5OTczLDQwMzY3LDQwMzcyLDQwMzg2LDQwMzc2LDQwNjA1LDQwNjg3LDQwNzI5LDQwNzk2LDQwODA2LDQwODA3LDIwNzk2LDIwNzk1LDIyMjE2LDIyMjE4LDIyMjE3LDIzNDIzLDI0MDIwLDI0MDE4LDI0Mzk4LDI1MDg3LDI1ODkyLDI3NDAyLDI3NDg5LDI4NzUzLDI4NzYwLDI5NTY4LDI5OTI0LDMwMDkwLDMwMzE4LDMwMzE2LDMxMTU1LDMxODQwLDMxODM5LDMyODk0LDMyODkzLDMzMjQ3LDM1MTg2LDM1MTgzLDM1MzI0LDM1NzEyLDM2MTE4LDM2MTE5LDM2NDk3LDM2NDk5LDM2NzA1LDM3MTkyLDM3OTU2LDM3OTY5LDM3OTcwLDM4NzE3LDM4NzE4LDM4ODUxLDM4ODQ5LDM5MDE5LDM5MjUzLDM5NTA5LDM5NTAxLDM5NjM0LDM5NzA2LDQwMDA5LDM5OTg1LDM5OTk4LDM5OTk1LDQwNDAzLDQwNDA3LDQwNzU2LDQwODEyLDQwODEwLDQwODUyLDIyMjIwLDI0MDIyLDI1MDg4LDI1ODkxLDI1ODk5LDI1ODk4LDI2MzQ4LDI3NDA4LDI5OTE0LDMxNDM0LDMxODQ0LDMxODQzLDMxODQ1LDMyNDAzLDMyNDA2LDMyNDA0LDMzMjUwLDM0MzYwLDM0MzY3LDM0ODY1LDM1NzIyLDM3MDA4LDM3MDA3LDM3OTg3LDM3OTg0LDM3OTg4LDM4NzYwLDM5MDIzLDM5MjYwLDM5NTE0LDM5NTE1LDM5NTExLDM5NjM1LDM5NjM2LDM5NjMzLDQwMDIwLDQwMDIzLDQwMDIyLDQwNDIxLDQwNjA3LDQwNjkyLDIyMjI1LDIyNzYxLDI1OTAwLDI4NzY2LDMwMzIxLDMwMzIyLDMwNjc5LDMyNTkyLDMyNjQ4LDM0ODcwLDM0ODczLDM0OTE0LDM1NzMxLDM1NzMwLDM1NzM0LDMzMzk5LDM2MTIzLDM3MzEyLDM3OTk0LDM4NzIyLDM4NzI4LDM4NzI0LDM4ODU0LDM5MDI0LDM5NTE5LDM5NzE0LDM5NzY4LDQwMDMxLDQwNDQxLDQwNDQyLDQwNTcyLDQwNTczLDQwNzExLDQwODIzLDQwODE4LDI0MzA3LDI3NDE0LDI4NzcxLDMxODUyLDMxODU0LDM0ODc1LDM1MjY0LDM2NTEzLDM3MzEzLDM4MDAyLDM4MDAwLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4NzcyLDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIyLDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUzLDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMwMDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzksNjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQsMTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVsbCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgwLDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYyLDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYyLDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIxMzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIwMjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIyMzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIwMjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIwMjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIxMTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIyMjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgxLDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEwLDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIwMzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIwODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIxMTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIxNTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTczLDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIyOTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIzNjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIzNjk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcxLDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMxLDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3NzgzLDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5MzczLDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMxMDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMyOTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMzNDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYwLDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIwMzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIwMzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIxMDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIxMjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIwLDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAwLDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgzLDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIyMzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIyODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIyOTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIyOTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMzLDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYzLDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQzLDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMwLDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5MjkwLDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAwLDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMwNDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMxMTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMxOTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMyOTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUxLDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIwNDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIwNDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIxNjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIyNDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIyNDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIyNzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMxLDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIzNzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIzNzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0NjcxLDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYwLDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTczLDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3NjgwLDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIxLDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMwNDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMwNzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMwNzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMxMDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgzLDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcxLDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAxLDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgzLDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMyOTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMyOTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMzMjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMzNTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIwNTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMzLDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIxMDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIxNzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIxNzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIxNzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcwLDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYzLDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIzMDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIzNjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIzNzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIzLDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMyLDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUzLDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMyODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTkyLDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4MDAwLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1MDAwLDM1MDA4LDM1MDA2LDM0OTk4LDM1MDA0LDM0OTk5LDM1MDA1LDM0OTk0LDM1MDczLDM1MDE3LDM1MjIxLDM1MjI0LDM1MjIzLDM1MjkzLDM1MjkwLDM1MjkxLDM1NDA2LDM1NDA1LDM1Mzg1LDM1NDE3LDM1MzkyLDM1NDE1LDM1NDE2LDM1Mzk2LDM1Mzk3LDM1NDEwLDM1NDAwLDM1NDA5LDM1NDAyLDM1NDA0LDM1NDA3LDM1OTM1LDM1OTY5LDM1OTY4LDM2MDI2LDM2MDMwLDM2MDE2LDM2MDI1LDM2MDIxLDM2MjI4LDM2MjI0LDM2MjMzLDM2MzEyLDM2MzA3LDM2MzAxLDM2Mjk1LDM2MzEwLDM2MzE2LDM2MzAzLDM2MzA5LDM2MzEzLDM2Mjk2LDM2MzExLDM2MjkzLDM2NTkxLDM2NTk5LDM2NjAyLDM2NjAxLDM2NTgyLDM2NTkwLDM2NTgxLDM2NTk3LDM2NTgzLDM2NTg0LDM2NTk4LDM2NTg3LDM2NTkzLDM2NTg4LDM2NTk2LDM2NTg1LDM2OTA5LDM2OTE2LDM2OTExLDM3MTI2LDM3MTY0LDM3MTI0LDM3MTE5LDM3MTE2LDM3MTI4LDM3MTEzLDM3MTE1LDM3MTIxLDM3MTIwLDM3MTI3LDM3MTI1LDM3MTIzLDM3MjE3LDM3MjIwLDM3MjE1LDM3MjE4LDM3MjE2LDM3Mzc3LDM3Mzg2LDM3NDEzLDM3Mzc5LDM3NDAyLDM3NDE0LDM3MzkxLDM3Mzg4LDM3Mzc2LDM3Mzk0LDM3Mzc1LDM3MzczLDM3MzgyLDM3MzgwLDM3NDE1LDM3Mzc4LDM3NDA0LDM3NDEyLDM3NDAxLDM3Mzk5LDM3MzgxLDM3Mzk4LDM4MjY3LDM4Mjg1LDM4Mjg0LDM4Mjg4LDM4NTM1LDM4NTI2LDM4NTM2LDM4NTM3LDM4NTMxLDM4NTI4LDM4NTk0LDM4NjAwLDM4NTk1LDM4NjQxLDM4NjQwLDM4NzY0LDM4NzY4LDM4NzY2LDM4OTE5LDM5MDgxLDM5MTQ3LDQwMTY2LDQwNjk3LDIwMDk5LDIwMTAwLDIwMTUwLDIwNjY5LDIwNjcxLDIwNjc4LDIwNjU0LDIwNjc2LDIwNjgyLDIwNjYwLDIwNjgwLDIwNjc0LDIwNjU2LDIwNjczLDIwNjY2LDIwNjU3LDIwNjgzLDIwNjgxLDIwNjYyLDIwNjY0LDIwOTUxLDIxMTE0LDIxMTEyLDIxMTE1LDIxMTE2LDIxOTU1LDIxOTc5LDIxOTY0LDIxOTY4LDIxOTYzLDIxOTYyLDIxOTgxLDIxOTUyLDIxOTcyLDIxOTU2LDIxOTkzLDIxOTUxLDIxOTcwLDIxOTAxLDIxOTY3LDIxOTczLDIxOTg2LDIxOTc0LDIxOTYwLDIyMDAyLDIxOTY1LDIxOTc3LDIxOTU0LDIyMjkyLDIyNjExLDIyNjMyLDIyNjI4LDIyNjA3LDIyNjA1LDIyNjAxLDIyNjM5LDIyNjEzLDIyNjA2LDIyNjIxLDIyNjE3LDIyNjI5LDIyNjE5LDIyNTg5LDIyNjI3LDIyNjQxLDIyNzgwLDIzMjM5LDIzMjM2LDIzMjQzLDIzMjI2LDIzMjI0LDIzMjE3LDIzMjIxLDIzMjE2LDIzMjMxLDIzMjQwLDIzMjI3LDIzMjM4LDIzMjIzLDIzMjMyLDIzMjQyLDIzMjIwLDIzMjIyLDIzMjQ1LDIzMjI1LDIzMTg0LDIzNTEwLDIzNTEyLDIzNTEzLDIzNTgzLDIzNjAzLDIzOTIxLDIzOTA3LDIzODgyLDIzOTA5LDIzOTIyLDIzOTE2LDIzOTAyLDIzOTEyLDIzOTExLDIzOTA2LDI0MDQ4LDI0MTQzLDI0MTQyLDI0MTM4LDI0MTQxLDI0MTM5LDI0MjYxLDI0MjY4LDI0MjYyLDI0MjY3LDI0MjYzLDI0Mzg0LDI0NDk1LDI0NDkzLDI0ODIzLDI0OTA1LDI0OTA2LDI0ODc1LDI0OTAxLDI0ODg2LDI0ODgyLDI0ODc4LDI0OTAyLDI0ODc5LDI0OTExLDI0ODczLDI0ODk2LDI1MTIwLDM3MjI0LDI1MTIzLDI1MTI1LDI1MTI0LDI1NTQxLDI1NTg1LDI1NTc5LDI1NjE2LDI1NjE4LDI1NjA5LDI1NjMyLDI1NjM2LDI1NjUxLDI1NjY3LDI1NjMxLDI1NjIxLDI1NjI0LDI1NjU3LDI1NjU1LDI1NjM0LDI1NjM1LDI1NjEyLDI1NjM4LDI1NjQ4LDI1NjQwLDI1NjY1LDI1NjUzLDI1NjQ3LDI1NjEwLDI1NjI2LDI1NjY0LDI1NjM3LDI1NjM5LDI1NjExLDI1NTc1LDI1NjI3LDI1NjQ2LDI1NjMzLDI1NjE0LDI1OTY3LDI2MDAyLDI2MDY3LDI2MjQ2LDI2MjUyLDI2MjYxLDI2MjU2LDI2MjUxLDI2MjUwLDI2MjY1LDI2MjYwLDI2MjMyLDI2NDAwLDI2OTgyLDI2OTc1LDI2OTM2LDI2OTU4LDI2OTc4LDI2OTkzLDI2OTQzLDI2OTQ5LDI2OTg2LDI2OTM3LDI2OTQ2LDI2OTY3LDI2OTY5LDI3MDAyLDI2OTUyLDI2OTUzLDI2OTMzLDI2OTg4LDI2OTMxLDI2OTQxLDI2OTgxLDI2ODY0LDI3MDAwLDI2OTMyLDI2OTg1LDI2OTQ0LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcyLDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUwLDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIzLDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIxLDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5NzcxLDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5NzgwLDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgxLDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMwMjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMwNTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMwNTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMwODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUzLDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAxLDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUwLDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMxNTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMxNjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMyMTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMyMTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQwLDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMzMTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMzODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMzODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMzOTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYxLDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMzODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAxLDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1MjkyLDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAwLDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4NzcxLDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQwNzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIwNzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIwLDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEyLDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIyNjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIyNjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIyNjc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIzMjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIzOTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQwLDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1NjkxLDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcxLDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQxLDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQwLDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMwLDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEyLDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMwODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMxMTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMxMTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMxMjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAzLDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQzLDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQxLDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMyMTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMyMTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMyMTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMyNzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYxLDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUxLDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2LDMzOTY5LDM0MDAwLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1MDAwLDI0OTgyLDI1MDI5LDI1MDEyLDI1MDMwLDI1MDI1LDI1MDM2LDI1MDE4LDI1MDIzLDI1MDE2LDI0OTcyLDI1ODE1LDI1ODE0LDI1ODA4LDI1ODA3LDI1ODAxLDI1Nzg5LDI1NzM3LDI1Nzk1LDI1ODE5LDI1ODQzLDI1ODE3LDI1OTA3LDI1OTgzLDI1OTgwLDI2MDE4LDI2MzEyLDI2MzAyLDI2MzA0LDI2MzE0LDI2MzE1LDI2MzE5LDI2MzAxLDI2Mjk5LDI2Mjk4LDI2MzE2LDI2NDAzLDI3MTg4LDI3MjM4LDI3MjA5LDI3MjM5LDI3MTg2LDI3MjQwLDI3MTk4LDI3MjI5LDI3MjQ1LDI3MjU0LDI3MjI3LDI3MjE3LDI3MTc2LDI3MjI2LDI3MTk1LDI3MTk5LDI3MjAxLDI3MjQyLDI3MjM2LDI3MjE2LDI3MjE1LDI3MjIwLDI3MjQ3LDI3MjQxLDI3MjMyLDI3MTk2LDI3MjMwLDI3MjIyLDI3MjIxLDI3MjEzLDI3MjE0LDI3MjA2LDI3NDc3LDI3NDc2LDI3NDc4LDI3NTU5LDI3NTYyLDI3NTYzLDI3NTkyLDI3NTkxLDI3NjUyLDI3NjUxLDI3NjU0LDI4NTg5LDI4NjE5LDI4NTc5LDI4NjE1LDI4NjA0LDI4NjIyLDI4NjE2LDI4NTEwLDI4NjEyLDI4NjA1LDI4NTc0LDI4NjE4LDI4NTg0LDI4Njc2LDI4NTgxLDI4NTkwLDI4NjAyLDI4NTg4LDI4NTg2LDI4NjIzLDI4NjA3LDI4NjAwLDI4NTc4LDI4NjE3LDI4NTg3LDI4NjIxLDI4NTkxLDI4NTk0LDI4NTkyLDI5MTI1LDI5MTIyLDI5MTE5LDI5MTEyLDI5MTQyLDI5MTIwLDI5MTIxLDI5MTMxLDI5MTQwLDI5MTMwLDI5MTI3LDI5MTM1LDI5MTE3LDI5MTQ0LDI5MTE2LDI5MTI2LDI5MTQ2LDI5MTQ3LDI5MzQxLDI5MzQyLDI5NTQ1LDI5NTQyLDI5NTQzLDI5NTQ4LDI5NTQxLDI5NTQ3LDI5NTQ2LDI5ODIzLDI5ODUwLDI5ODU2LDI5ODQ0LDI5ODQyLDI5ODQ1LDI5ODU3LDI5OTYzLDMwMDgwLDMwMjU1LDMwMjUzLDMwMjU3LDMwMjY5LDMwMjU5LDMwMjY4LDMwMjYxLDMwMjU4LDMwMjU2LDMwMzk1LDMwNDM4LDMwNjE4LDMwNjIxLDMwNjI1LDMwNjIwLDMwNjE5LDMwNjI2LDMwNjI3LDMwNjEzLDMwNjE3LDMwNjE1LDMwOTQxLDMwOTUzLDMwOTQ5LDMwOTU0LDMwOTQyLDMwOTQ3LDMwOTM5LDMwOTQ1LDMwOTQ2LDMwOTU3LDMwOTQzLDMwOTQ0LDMxMTQwLDMxMzAwLDMxMzA0LDMxMzAzLDMxNDE0LDMxNDE2LDMxNDEzLDMxNDA5LDMxNDE1LDMxNzEwLDMxNzE1LDMxNzE5LDMxNzA5LDMxNzAxLDMxNzE3LDMxNzA2LDMxNzIwLDMxNzM3LDMxNzAwLDMxNzIyLDMxNzE0LDMxNzA4LDMxNzIzLDMxNzA0LDMxNzExLDMxOTU0LDMxOTU2LDMxOTU5LDMxOTUyLDMxOTUzLDMyMjc0LDMyMjg5LDMyMjc5LDMyMjY4LDMyMjg3LDMyMjg4LDMyMjc1LDMyMjcwLDMyMjg0LDMyMjc3LDMyMjgyLDMyMjkwLDMyMjY3LDMyMjcxLDMyMjc4LDMyMjY5LDMyMjc2LDMyMjkzLDMyMjkyLDMyNTc5LDMyNjM1LDMyNjM2LDMyNjM0LDMyNjg5LDMyNzUxLDMyODEwLDMyODA5LDMyODc2LDMzMjAxLDMzMTkwLDMzMTk4LDMzMjA5LDMzMjA1LDMzMTk1LDMzMjAwLDMzMTk2LDMzMjA0LDMzMjAyLDMzMjA3LDMzMTkxLDMzMjY2LDMzMzY1LDMzMzY2LDMzMzY3LDM0MTM0LDM0MTE3LDM0MTU1LDM0MTI1LDM0MTMxLDM0MTQ1LDM0MTM2LDM0MTEyLDM0MTE4LDM0MTQ4LDM0MTEzLDM0MTQ2LDM0MTE2LDM0MTI5LDM0MTE5LDM0MTQ3LDM0MTEwLDM0MTM5LDM0MTYxLDM0MTI2LDM0MTU4LDM0MTY1LDM0MTMzLDM0MTUxLDM0MTQ0LDM0MTg4LDM0MTUwLDM0MTQxLDM0MTMyLDM0MTQ5LDM0MTU2LDM0NDAzLDM0NDA1LDM0NDA0LDM0NzE1LDM0NzAzLDM0NzExLDM0NzA3LDM0NzA2LDM0Njk2LDM0Njg5LDM0NzEwLDM0NzEyLDM0NjgxLDM0Njk1LDM0NzIzLDM0NjkzLDM0NzA0LDM0NzA1LDM0NzE3LDM0NjkyLDM0NzA4LDM0NzE2LDM0NzE0LDM0Njk3LDM1MTAyLDM1MTEwLDM1MTIwLDM1MTE3LDM1MTE4LDM1MTExLDM1MTIxLDM1MTA2LDM1MTEzLDM1MTA3LDM1MTE5LDM1MTE2LDM1MTAzLDM1MzEzLDM1NTUyLDM1NTU0LDM1NTcwLDM1NTcyLDM1NTczLDM1NTQ5LDM1NjA0LDM1NTU2LDM1NTUxLDM1NTY4LDM1NTI4LDM1NTUwLDM1NTUzLDM1NTYwLDM1NTgzLDM1NTY3LDM1NTc5LDM1OTg1LDM1OTg2LDM1OTg0LDM2MDg1LDM2MDc4LDM2MDgxLDM2MDgwLDM2MDgzLDM2MjA0LDM2MjA2LDM2MjYxLDM2MjYzLDM2NDAzLDM2NDE0LDM2NDA4LDM2NDE2LDM2NDIxLDM2NDA2LDM2NDEyLDM2NDEzLDM2NDE3LDM2NDAwLDM2NDE1LDM2NTQxLDM2NjYyLDM2NjU0LDM2NjYxLDM2NjU4LDM2NjY1LDM2NjYzLDM2NjYwLDM2OTgyLDM2OTg1LDM2OTg3LDM2OTk4LDM3MTE0LDM3MTcxLDM3MTczLDM3MTc0LDM3MjY3LDM3MjY0LDM3MjY1LDM3MjYxLDM3MjYzLDM3NjcxLDM3NjYyLDM3NjQwLDM3NjYzLDM3NjM4LDM3NjQ3LDM3NzU0LDM3Njg4LDM3NjkyLDM3NjU5LDM3NjY3LDM3NjUwLDM3NjMzLDM3NzAyLDM3Njc3LDM3NjQ2LDM3NjQ1LDM3NTc5LDM3NjYxLDM3NjI2LDM3NjY5LDM3NjUxLDM3NjI1LDM3NjIzLDM3Njg0LDM3NjM0LDM3NjY4LDM3NjMxLDM3NjczLDM3Njg5LDM3Njg1LDM3Njc0LDM3NjUyLDM3NjQ0LDM3NjQzLDM3NjMwLDM3NjQxLDM3NjMyLDM3NjI3LDM3NjU0LDM4MzMyLDM4MzQ5LDM4MzM0LDM4MzI5LDM4MzMwLDM4MzI2LDM4MzM1LDM4MzI1LDM4MzMzLDM4NTY5LDM4NjEyLDM4NjY3LDM4Njc0LDM4NjcyLDM4ODA5LDM4ODA3LDM4ODA0LDM4ODk2LDM4OTA0LDM4OTY1LDM4OTU5LDM4OTYyLDM5MjA0LDM5MTk5LDM5MjA3LDM5MjA5LDM5MzI2LDM5NDA2LDM5NDA0LDM5Mzk3LDM5Mzk2LDM5NDA4LDM5Mzk1LDM5NDAyLDM5NDAxLDM5Mzk5LDM5NjA5LDM5NjE1LDM5NjA0LDM5NjExLDM5NjcwLDM5Njc0LDM5NjczLDM5NjcxLDM5NzMxLDM5ODA4LDM5ODEzLDM5ODE1LDM5ODA0LDM5ODA2LDM5ODAzLDM5ODEwLDM5ODI3LDM5ODI2LDM5ODI0LDM5ODAyLDM5ODI5LDM5ODA1LDM5ODE2LDQwMjI5LDQwMjE1LDQwMjI0LDQwMjIyLDQwMjEyLDQwMjMzLDQwMjIxLDQwMjE2LDQwMjI2LDQwMjA4LDQwMjE3LDQwMjIzLDQwNTg0LDQwNTgyLDQwNTgzLDQwNjIyLDQwNjIxLDQwNjYxLDQwNjYyLDQwNjk4LDQwNzIyLDQwNzY1LDIwNzc0LDIwNzczLDIwNzcwLDIwNzcyLDIwNzY4LDIwNzc3LDIxMjM2LDIyMTYzLDIyMTU2LDIyMTU3LDIyMTUwLDIyMTQ4LDIyMTQ3LDIyMTQyLDIyMTQ2LDIyMTQzLDIyMTQ1LDIyNzQyLDIyNzQwLDIyNzM1LDIyNzM4LDIzMzQxLDIzMzMzLDIzMzQ2LDIzMzMxLDIzMzQwLDIzMzM1LDIzMzM0LDIzMzQzLDIzMzQyLDIzNDE5LDIzNTM3LDIzNTM4LDIzOTkxLDI0MTcyLDI0MTcwLDI0NTEwLDI0NTA3LDI1MDI3LDI1MDEzLDI1MDIwLDI1MDYzLDI1MDU2LDI1MDYxLDI1MDYwLDI1MDY0LDI1MDU0LDI1ODM5LDI1ODMzLDI1ODI3LDI1ODM1LDI1ODI4LDI1ODMyLDI1OTg1LDI1OTg0LDI2MDM4LDI2MDc0LDI2MzIyLDI3Mjc3LDI3Mjg2LDI3MjY1LDI3MzAxLDI3MjczLDI3Mjk1LDI3MjkxLDI3Mjk3LDI3Mjk0LDI3MjcxLDI3MjgzLDI3Mjc4LDI3Mjg1LDI3MjY3LDI3MzA0LDI3MzAwLDI3MjgxLDI3MjYzLDI3MzAyLDI3MjkwLDI3MjY5LDI3Mjc2LDI3MjgyLDI3NDgzLDI3NTY1LDI3NjU3LDI4NjIwLDI4NTg1LDI4NjYwLDI4NjI4LDI4NjQzLDI4NjM2LDI4NjUzLDI4NjQ3LDI4NjQ2LDI4NjM4LDI4NjU4LDI4NjM3LDI4NjQyLDI4NjQ4LDI5MTUzLDI5MTY5LDI5MTYwLDI5MTcwLDI5MTU2LDI5MTY4LDI5MTU0LDI5NTU1LDI5NTUwLDI5NTUxLDI5ODQ3LDI5ODc0LDI5ODY3LDI5ODQwLDI5ODY2LDI5ODY5LDI5ODczLDI5ODYxLDI5ODcxLDI5OTY4LDI5OTY5LDI5OTcwLDI5OTY3LDMwMDg0LDMwMjc1LDMwMjgwLDMwMjgxLDMwMjc5LDMwMzcyLDMwNDQxLDMwNjQ1LDMwNjM1LDMwNjQyLDMwNjQ3LDMwNjQ2LDMwNjQ0LDMwNjQxLDMwNjMyLDMwNzA0LDMwOTYzLDMwOTczLDMwOTc4LDMwOTcxLDMwOTcyLDMwOTYyLDMwOTgxLDMwOTY5LDMwOTc0LDMwOTgwLDMxMTQ3LDMxMTQ0LDMxMzI0LDMxMzIzLDMxMzE4LDMxMzIwLDMxMzE2LDMxMzIyLDMxNDIyLDMxNDI0LDMxNDI1LDMxNzQ5LDMxNzU5LDMxNzMwLDMxNzQ0LDMxNzQzLDMxNzM5LDMxNzU4LDMxNzMyLDMxNzU1LDMxNzMxLDMxNzQ2LDMxNzUzLDMxNzQ3LDMxNzQ1LDMxNzM2LDMxNzQxLDMxNzUwLDMxNzI4LDMxNzI5LDMxNzYwLDMxNzU0LDMxOTc2LDMyMzAxLDMyMzE2LDMyMzIyLDMyMzA3LDM4OTg0LDMyMzEyLDMyMjk4LDMyMzI5LDMyMzIwLDMyMzI3LDMyMjk3LDMyMzMyLDMyMzA0LDMyMzE1LDMyMzEwLDMyMzI0LDMyMzE0LDMyNTgxLDMyNjM5LDMyNjM4LDMyNjM3LDMyNzU2LDMyNzU0LDMyODEyLDMzMjExLDMzMjIwLDMzMjI4LDMzMjI2LDMzMjIxLDMzMjIzLDMzMjEyLDMzMjU3LDMzMzcxLDMzMzcwLDMzMzcyLDM0MTc5LDM0MTc2LDM0MTkxLDM0MjE1LDM0MTk3LDM0MjA4LDM0MTg3LDM0MjExLDM0MTcxLDM0MjEyLDM0MjAyLDM0MjA2LDM0MTY3LDM0MTcyLDM0MTg1LDM0MjA5LDM0MTcwLDM0MTY4LDM0MTM1LDM0MTkwLDM0MTk4LDM0MTgyLDM0MTg5LDM0MjAxLDM0MjA1LDM0MTc3LDM0MjEwLDM0MTc4LDM0MTg0LDM0MTgxLDM0MTY5LDM0MTY2LDM0MjAwLDM0MTkyLDM0MjA3LDM0NDA4LDM0NzUwLDM0NzMwLDM0NzMzLDM0NzU3LDM0NzM2LDM0NzMyLDM0NzQ1LDM0NzQxLDM0NzQ4LDM0NzM0LDM0NzYxLDM0NzU1LDM0NzU0LDM0NzY0LDM0NzQzLDM0NzM1LDM0NzU2LDM0NzYyLDM0NzQwLDM0NzQyLDM0NzUxLDM0NzQ0LDM0NzQ5LDM0NzgyLDM0NzM4LDM1MTI1LDM1MTIzLDM1MTMyLDM1MTM0LDM1MTM3LDM1MTU0LDM1MTI3LDM1MTM4LDM1MjQ1LDM1MjQ3LDM1MjQ2LDM1MzE0LDM1MzE1LDM1NjE0LDM1NjA4LDM1NjA2LDM1NjAxLDM1NTg5LDM1NTk1LDM1NjE4LDM1NTk5LDM1NjAyLDM1NjA1LDM1NTkxLDM1NTk3LDM1NTkyLDM1NTkwLDM1NjEyLDM1NjAzLDM1NjEwLDM1OTE5LDM1OTUyLDM1OTU0LDM1OTUzLDM1OTUxLDM1OTg5LDM1OTg4LDM2MDg5LDM2MjA3LDM2NDMwLDM2NDI5LDM2NDM1LDM2NDMyLDM2NDI4LDM2NDIzLDM2Njc1LDM2NjcyLDM2OTk3LDM2OTkwLDM3MTc2LDM3Mjc0LDM3MjgyLDM3Mjc1LDM3MjczLDM3Mjc5LDM3MjgxLDM3Mjc3LDM3MjgwLDM3NzkzLDM3NzYzLDM3ODA3LDM3NzMyLDM3NzE4LDM3NzAzLDM3NzU2LDM3NzIwLDM3NzI0LDM3NzUwLDM3NzA1LDM3NzEyLDM3NzEzLDM3NzI4LDM3NzQxLDM3Nzc1LDM3NzA4LDM3NzM4LDM3NzUzLDM3NzE5LDM3NzE3LDM3NzE0LDM3NzExLDM3NzQ1LDM3NzUxLDM3NzU1LDM3NzI5LDM3NzI2LDM3NzMxLDM3NzM1LDM3NzYwLDM3NzEwLDM3NzIxLDM4MzQzLDM4MzM2LDM4MzQ1LDM4MzM5LDM4MzQxLDM4MzI3LDM4NTc0LDM4NTc2LDM4NTcyLDM4Njg4LDM4Njg3LDM4NjgwLDM4Njg1LDM4NjgxLDM4ODEwLDM4ODE3LDM4ODEyLDM4ODE0LDM4ODEzLDM4ODY5LDM4ODY4LDM4ODk3LDM4OTc3LDM4OTgwLDM4OTg2LDM4OTg1LDM4OTgxLDM4OTc5LDM5MjA1LDM5MjExLDM5MjEyLDM5MjEwLDM5MjE5LDM5MjE4LDM5MjE1LDM5MjEzLDM5MjE3LDM5MjE2LDM5MzIwLDM5MzMxLDM5MzI5LDM5NDI2LDM5NDE4LDM5NDEyLDM5NDE1LDM5NDE3LDM5NDE2LDM5NDE0LDM5NDE5LDM5NDIxLDM5NDIyLDM5NDIwLDM5NDI3LDM5NjE0LDM5Njc4LDM5Njc3LDM5NjgxLDM5Njc2LDM5NzUyLDM5ODM0LDM5ODQ4LDM5ODM4LDM5ODM1LDM5ODQ2LDM5ODQxLDM5ODQ1LDM5ODQ0LDM5ODE0LDM5ODQyLDM5ODQwLDM5ODU1LDQwMjQzLDQwMjU3LDQwMjk1LDQwMjQ2LDQwMjM4LDQwMjM5LDQwMjQxLDQwMjQ4LDQwMjQwLDQwMjYxLDQwMjU4LDQwMjU5LDQwMjU0LDQwMjQ3LDQwMjU2LDQwMjUzLDMyNzU3LDQwMjM3LDQwNTg2LDQwNTg1LDQwNTg5LDQwNjI0LDQwNjQ4LDQwNjY2LDQwNjk5LDQwNzAzLDQwNzQwLDQwNzM5LDQwNzM4LDQwNzg4LDQwODY0LDIwNzg1LDIwNzgxLDIwNzgyLDIyMTY4LDIyMTcyLDIyMTY3LDIyMTcwLDIyMTczLDIyMTY5LDIyODk2LDIzMzU2LDIzNjU3LDIzNjU4LDI0MDAwLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkzLDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMwMzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMwOTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMwOTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcyLDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzkyLDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkzLDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMzMjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0NzcyLDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0NzgxLDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTkyLDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgzLDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEyLDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIxLDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQwNTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQwNzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIxMjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIyMTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAyLDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAxLDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMyMzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMyNTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMyNzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0MjczLDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAzLDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAwLDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMyLDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQwMzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQwNzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIyMTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgxLDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3MzcwLDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMwMzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMxMDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQwLDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQzLDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIwLDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEzLDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgwLDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5OTU0LDM5OTI4LDQwMDAwLDM5OTQzLDM5OTUwLDM5OTQyLDM5OTU5LDM5OTU2LDM5OTQ1LDQwMzUxLDQwMzQ1LDQwMzU2LDQwMzQ5LDQwMzM4LDQwMzQ0LDQwMzM2LDQwMzQ3LDQwMzUyLDQwMzQwLDQwMzQ4LDQwMzYyLDQwMzQzLDQwMzUzLDQwMzQ2LDQwMzU0LDQwMzYwLDQwMzUwLDQwMzU1LDQwMzgzLDQwMzYxLDQwMzQyLDQwMzU4LDQwMzU5LDQwNjAxLDQwNjAzLDQwNjAyLDQwNjc3LDQwNjc2LDQwNjc5LDQwNjc4LDQwNzUyLDQwNzUwLDQwNzk1LDQwODAwLDQwNzk4LDQwNzk3LDQwNzkzLDQwODQ5LDIwNzk0LDIwNzkzLDIxMTQ0LDIxMTQzLDIyMjExLDIyMjA1LDIyMjA2LDIzMzY4LDIzMzY3LDI0MDExLDI0MDE1LDI0MzA1LDI1MDg1LDI1ODgzLDI3Mzk0LDI3Mzg4LDI3Mzk1LDI3Mzg0LDI3MzkyLDI4NzM5LDI4NzQwLDI4NzQ2LDI4NzQ0LDI4NzQ1LDI4NzQxLDI4NzQyLDI5MjEzLDI5MjEwLDI5MjA5LDI5NTY2LDI5OTc1LDMwMzE0LDMwNjcyLDMxMDIxLDMxMDI1LDMxMDIzLDMxODI4LDMxODI3LDMxOTg2LDMyMzk0LDMyMzkxLDMyMzkyLDMyMzk1LDMyMzkwLDMyMzk3LDMyNTg5LDMyNjk5LDMyODE2LDMzMjQ1LDM0MzI4LDM0MzQ2LDM0MzQyLDM0MzM1LDM0MzM5LDM0MzMyLDM0MzI5LDM0MzQzLDM0MzUwLDM0MzM3LDM0MzM2LDM0MzQ1LDM0MzM0LDM0MzQxLDM0ODU3LDM0ODQ1LDM0ODQzLDM0ODQ4LDM0ODUyLDM0ODQ0LDM0ODU5LDM0ODkwLDM1MTgxLDM1MTc3LDM1MTgyLDM1MTc5LDM1MzIyLDM1NzA1LDM1NzA0LDM1NjUzLDM1NzA2LDM1NzA3LDM2MTEyLDM2MTE2LDM2MjcxLDM2NDk0LDM2NDkyLDM2NzAyLDM2Njk5LDM2NzAxLDM3MTkwLDM3MTg4LDM3MTg5LDM3MzA1LDM3OTUxLDM3OTQ3LDM3OTQyLDM3OTI5LDM3OTQ5LDM3OTQ4LDM3OTM2LDM3OTQ1LDM3OTMwLDM3OTQzLDM3OTMyLDM3OTUyLDM3OTM3LDM4MzczLDM4MzcyLDM4MzcxLDM4NzA5LDM4NzE0LDM4ODQ3LDM4ODgxLDM5MDEyLDM5MTEzLDM5MTEwLDM5MTA0LDM5MjU2LDM5MjU0LDM5NDgxLDM5NDg1LDM5NDk0LDM5NDkyLDM5NDkwLDM5NDg5LDM5NDgyLDM5NDg3LDM5NjI5LDM5NzAxLDM5NzAzLDM5NzA0LDM5NzAyLDM5NzM4LDM5NzYyLDM5OTc5LDM5OTY1LDM5OTY0LDM5OTgwLDM5OTcxLDM5OTc2LDM5OTc3LDM5OTcyLDM5OTY5LDQwMzc1LDQwMzc0LDQwMzgwLDQwMzg1LDQwMzkxLDQwMzk0LDQwMzk5LDQwMzgyLDQwMzg5LDQwMzg3LDQwMzc5LDQwMzczLDQwMzk4LDQwMzc3LDQwMzc4LDQwMzY0LDQwMzkyLDQwMzY5LDQwMzY1LDQwMzk2LDQwMzcxLDQwMzk3LDQwMzcwLDQwNTcwLDQwNjA0LDQwNjgzLDQwNjg2LDQwNjg1LDQwNzMxLDQwNzI4LDQwNzMwLDQwNzUzLDQwNzgyLDQwODA1LDQwODA0LDQwODUwLDIwMTUzLDIyMjE0LDIyMjEzLDIyMjE5LDIyODk3LDIzMzcxLDIzMzcyLDI0MDIxLDI0MDE3LDI0MzA2LDI1ODg5LDI1ODg4LDI1ODk0LDI1ODkwLDI3NDAzLDI3NDAwLDI3NDAxLDI3NjYxLDI4NzU3LDI4NzU4LDI4NzU5LDI4NzU0LDI5MjE0LDI5MjE1LDI5MzUzLDI5NTY3LDI5OTEyLDI5OTA5LDI5OTEzLDI5OTExLDMwMzE3LDMwMzgxLDMxMDI5LDMxMTU2LDMxMzQ0LDMxMzQ1LDMxODMxLDMxODM2LDMxODMzLDMxODM1LDMxODM0LDMxOTg4LDMxOTg1LDMyNDAxLDMyNTkxLDMyNjQ3LDMzMjQ2LDMzMzg3LDM0MzU2LDM0MzU3LDM0MzU1LDM0MzQ4LDM0MzU0LDM0MzU4LDM0ODYwLDM0ODU2LDM0ODU0LDM0ODU4LDM0ODUzLDM1MTg1LDM1MjYzLDM1MjYyLDM1MzIzLDM1NzEwLDM1NzE2LDM1NzE0LDM1NzE4LDM1NzE3LDM1NzExLDM2MTE3LDM2NTAxLDM2NTAwLDM2NTA2LDM2NDk4LDM2NDk2LDM2NTAyLDM2NTAzLDM2NzA0LDM2NzA2LDM3MTkxLDM3OTY0LDM3OTY4LDM3OTYyLDM3OTYzLDM3OTY3LDM3OTU5LDM3OTU3LDM3OTYwLDM3OTYxLDM3OTU4LDM4NzE5LDM4ODgzLDM5MDE4LDM5MDE3LDM5MTE1LDM5MjUyLDM5MjU5LDM5NTAyLDM5NTA3LDM5NTA4LDM5NTAwLDM5NTAzLDM5NDk2LDM5NDk4LDM5NDk3LDM5NTA2LDM5NTA0LDM5NjMyLDM5NzA1LDM5NzIzLDM5NzM5LDM5NzY2LDM5NzY1LDQwMDA2LDQwMDA4LDM5OTk5LDQwMDA0LDM5OTkzLDM5OTg3LDQwMDAxLDM5OTk2LDM5OTkxLDM5OTg4LDM5OTg2LDM5OTk3LDM5OTkwLDQwNDExLDQwNDAyLDQwNDE0LDQwNDEwLDQwMzk1LDQwNDAwLDQwNDEyLDQwNDAxLDQwNDE1LDQwNDI1LDQwNDA5LDQwNDA4LDQwNDA2LDQwNDM3LDQwNDA1LDQwNDEzLDQwNjMwLDQwNjg4LDQwNzU3LDQwNzU1LDQwNzU0LDQwNzcwLDQwODExLDQwODUzLDQwODY2LDIwNzk3LDIxMTQ1LDIyNzYwLDIyNzU5LDIyODk4LDIzMzczLDI0MDI0LDM0ODYzLDI0Mzk5LDI1MDg5LDI1MDkxLDI1MDkyLDI1ODk3LDI1ODkzLDI2MDA2LDI2MzQ3LDI3NDA5LDI3NDEwLDI3NDA3LDI3NTk0LDI4NzYzLDI4NzYyLDI5MjE4LDI5NTcwLDI5NTY5LDI5NTcxLDMwMzIwLDMwNjc2LDMxODQ3LDMxODQ2LDMyNDA1LDMzMzg4LDM0MzYyLDM0MzY4LDM0MzYxLDM0MzY0LDM0MzUzLDM0MzYzLDM0MzY2LDM0ODY0LDM0ODY2LDM0ODYyLDM0ODY3LDM1MTkwLDM1MTg4LDM1MTg3LDM1MzI2LDM1NzI0LDM1NzI2LDM1NzIzLDM1NzIwLDM1OTA5LDM2MTIxLDM2NTA0LDM2NzA4LDM2NzA3LDM3MzA4LDM3OTg2LDM3OTczLDM3OTgxLDM3OTc1LDM3OTgyLDM4ODUyLDM4ODUzLDM4OTEyLDM5NTEwLDM5NTEzLDM5NzEwLDM5NzExLDM5NzEyLDQwMDE4LDQwMDI0LDQwMDE2LDQwMDEwLDQwMDEzLDQwMDExLDQwMDIxLDQwMDI1LDQwMDEyLDQwMDE0LDQwNDQzLDQwNDM5LDQwNDMxLDQwNDE5LDQwNDI3LDQwNDQwLDQwNDIwLDQwNDM4LDQwNDE3LDQwNDMwLDQwNDIyLDQwNDM0LDQwNDMyLDQwNDE4LDQwNDI4LDQwNDM2LDQwNDM1LDQwNDI0LDQwNDI5LDQwNjQyLDQwNjU2LDQwNjkwLDQwNjkxLDQwNzEwLDQwNzMyLDQwNzYwLDQwNzU5LDQwNzU4LDQwNzcxLDQwNzgzLDQwODE3LDQwODE2LDQwODE0LDQwODE1LDIyMjI3LDIyMjIxLDIzMzc0LDIzNjYxLDI1OTAxLDI2MzQ5LDI2MzUwLDI3NDExLDI4NzY3LDI4NzY5LDI4NzY1LDI4NzY4LDI5MjE5LDI5OTE1LDI5OTI1LDMwNjc3LDMxMDMyLDMxMTU5LDMxMTU4LDMxODUwLDMyNDA3LDMyNjQ5LDMzMzg5LDM0MzcxLDM0ODcyLDM0ODcxLDM0ODY5LDM0ODkxLDM1NzMyLDM1NzMzLDM2NTEwLDM2NTExLDM2NTEyLDM2NTA5LDM3MzEwLDM3MzA5LDM3MzE0LDM3OTk1LDM3OTkyLDM3OTkzLDM4NjI5LDM4NzI2LDM4NzIzLDM4NzI3LDM4ODU1LDM4ODg1LDM5NTE4LDM5NjM3LDM5NzY5LDQwMDM1LDQwMDM5LDQwMDM4LDQwMDM0LDQwMDMwLDQwMDMyLDQwNDUwLDQwNDQ2LDQwNDU1LDQwNDUxLDQwNDU0LDQwNDUzLDQwNDQ4LDQwNDQ5LDQwNDU3LDQwNDQ3LDQwNDQ1LDQwNDUyLDQwNjA4LDQwNzM0LDQwNzc0LDQwODIwLDQwODIxLDQwODIyLDIyMjI4LDI1OTAyLDI2MDQwLDI3NDE2LDI3NDE3LDI3NDE1LDI3NDE4LDI4NzcwLDI5MjIyLDI5MzU0LDMwNjgwLDMwNjgxLDMxMDMzLDMxODQ5LDMxODUxLDMxOTkwLDMyNDEwLDMyNDA4LDMyNDExLDMyNDA5LDMzMjQ4LDMzMjQ5LDM0Mzc0LDM0Mzc1LDM0Mzc2LDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk1LDM1MzI3LDM1NzM2LDM1NzM3LDM2NTE3LDM2NTE2LDM2NTE1LDM3OTk4LDM3OTk3LDM3OTk5LDM4MDAxLDM4MDAzLDM4NzI5LDM5MDI2LDM5MjYzLDQwMDQwLDQwMDQ2LDQwMDQ1LDQwNDU5LDQwNDYxLDQwNDY0LDQwNDYzLDQwNDY2LDQwNDY1LDQwNjA5LDQwNjkzLDQwNzEzLDQwNzc1LDQwODI0LDQwODI3LDQwODI2LDQwODI1LDIyMzAyLDI4Nzc0LDMxODU1LDM0ODc2LDM2Mjc0LDM2NTE4LDM3MzE1LDM4MDA0LDM4MDA4LDM4MDA2LDM4MDA1LDM5NTIwLDQwMDUyLDQwMDUxLDQwMDQ5LDQwMDUzLDQwNDY4LDQwNDY3LDQwNjk0LDQwNzE0LDQwODY4LDI4Nzc2LDI4NzczLDMxOTkxLDM0NDEwLDM0ODc4LDM0ODc3LDM0ODc5LDM1NzQyLDM1OTk2LDM2NTIxLDM2NTUzLDM4NzMxLDM5MDI3LDM5MDI4LDM5MTE2LDM5MjY1LDM5MzM5LDM5NTI0LDM5NTI2LDM5NTI3LDM5NzE2LDQwNDY5LDQwNDcxLDQwNzc2LDI1MDk1LDI3NDIyLDI5MjIzLDM0MzgwLDM2NTIwLDM4MDE4LDM4MDE2LDM4MDE3LDM5NTI5LDM5NTI4LDM5NzI2LDQwNDczLDI5MjI1LDM0Mzc5LDM1NzQzLDM4MDE5LDQwMDU3LDQwNjMxLDMwMzI1LDM5NTMxLDQwMDU4LDQwNDc3LDI4Nzc3LDI4Nzc4LDQwNjEyLDQwODMwLDQwNzc3LDQwODU2LDMwODQ5LDM3NTYxLDM1MDIzLDIyNzE1LDI0NjU4LDMxOTExLDIzMjkwLDk1NTYsOTU3NCw5NTU5LDk1NjgsOTU4MCw5NTcxLDk1NjIsOTU3Nyw5NTY1LDk1NTQsOTU3Miw5NTU3LDk1NjYsOTU3OCw5NTY5LDk1NjAsOTU3NSw5NTYzLDk1NTUsOTU3Myw5NTU4LDk1NjcsOTU3OSw5NTcwLDk1NjEsOTU3Niw5NTY0LDk1NTMsOTU1Miw5NTgxLDk1ODIsOTU4NCw5NTgzLDY1NTE3LDEzMjQyMywzNzU5NSwxMzI1NzUsMTQ3Mzk3LDM0MTI0LDE3MDc3LDI5Njc5LDIwOTE3LDEzODk3LDE0OTgyNiwxNjYzNzIsMzc3MDAsMTM3NjkxLDMzNTE4LDE0NjYzMiwzMDc4MCwyNjQzNiwyNTMxMSwxNDk4MTEsMTY2MzE0LDEzMTc0NCwxNTg2NDMsMTM1OTQxLDIwMzk1LDE0MDUyNSwyMDQ4OCwxNTkwMTcsMTYyNDM2LDE0NDg5NiwxNTAxOTMsMTQwNTYzLDIwNTIxLDEzMTk2NiwyNDQ4NCwxMzE5NjgsMTMxOTExLDI4Mzc5LDEzMjEyNywyMDYwNSwyMDczNywxMzQzNCwyMDc1MCwzOTAyMCwxNDE0NywzMzgxNCwxNDk5MjQsMTMyMjMxLDIwODMyLDE0NDMwOCwyMDg0MiwxMzQxNDMsMTM5NTE2LDEzMTgxMywxNDA1OTIsMTMyNDk0LDE0MzkyMywxMzc2MDMsMjM0MjYsMzQ2ODUsMTMyNTMxLDE0NjU4NSwyMDkxNCwyMDkyMCw0MDI0NCwyMDkzNywyMDk0MywyMDk0NSwxNTU4MCwyMDk0NywxNTAxODIsMjA5MTUsMjA5NjIsMjEzMTQsMjA5NzMsMzM3NDEsMjY5NDIsMTQ1MTk3LDI0NDQzLDIxMDAzLDIxMDMwLDIxMDUyLDIxMTczLDIxMDc5LDIxMTQwLDIxMTc3LDIxMTg5LDMxNzY1LDM0MTE0LDIxMjE2LDM0MzE3LDE1ODQ4MywyMTI1MywxNjY2MjIsMjE4MzMsMjgzNzcsMTQ3MzI4LDEzMzQ2MCwxNDc0MzYsMjEyOTksMjEzMTYsMTM0MTE0LDI3ODUxLDEzNjk5OCwyNjY1MSwyOTY1MywyNDY1MCwxNjA0MiwxNDU0MCwxMzY5MzYsMjkxNDksMTc1NzAsMjEzNTcsMjEzNjQsMTY1NTQ3LDIxMzc0LDIxMzc1LDEzNjU5OCwxMzY3MjMsMzA2OTQsMjEzOTUsMTY2NTU1LDIxNDA4LDIxNDE5LDIxNDIyLDI5NjA3LDE1MzQ1OCwxNjIxNywyOTU5NiwyMTQ0MSwyMTQ0NSwyNzcyMSwyMDA0MSwyMjUyNiwyMTQ2NSwxNTAxOSwxMzQwMzEsMjE0NzIsMTQ3NDM1LDE0Mjc1NSwyMTQ5NCwxMzQyNjMsMjE1MjMsMjg3OTMsMjE4MDMsMjYxOTksMjc5OTUsMjE2MTMsMTU4NTQ3LDEzNDUxNiwyMTg1MywyMTY0NywyMTY2OCwxODM0MiwxMzY5NzMsMTM0ODc3LDE1Nzk2LDEzNDQ3NywxNjYzMzIsMTQwOTUyLDIxODMxLDE5NjkzLDIxNTUxLDI5NzE5LDIxODk0LDIxOTI5LDIyMDIxLDEzNzQzMSwxNDc1MTQsMTc3NDYsMTQ4NTMzLDI2MjkxLDEzNTM0OCwyMjA3MSwyNjMxNywxNDQwMTAsMjYyNzYsMjYyODUsMjIwOTMsMjIwOTUsMzA5NjEsMjIyNTcsMzg3OTEsMjE1MDIsMjIyNzIsMjIyNTUsMjIyNTMsMTY2NzU4LDEzODU5LDEzNTc1OSwyMjM0MiwxNDc4NzcsMjc3NTgsMjg4MTEsMjIzMzgsMTQwMDEsMTU4ODQ2LDIyNTAyLDEzNjIxNCwyMjUzMSwxMzYyNzYsMTQ4MzIzLDIyNTY2LDE1MDUxNywyMjYyMCwyMjY5OCwxMzY2NSwyMjc1MiwyMjc0OCwxMzU3NDAsMjI3NzksMjM1NTEsMjIzMzksMTcyMzY4LDE0ODA4OCwzNzg0MywxMzcyOSwyMjgxNSwyNjc5MCwxNDAxOSwyODI0OSwxMzY3NjYsMjMwNzYsMjE4NDMsMTM2ODUwLDM0MDUzLDIyOTg1LDEzNDQ3OCwxNTg4NDksMTU5MDE4LDEzNzE4MCwyMzAwMSwxMzcyMTEsMTM3MTM4LDE1OTE0MiwyODAxNywxMzcyNTYsMTM2OTE3LDIzMDMzLDE1OTMwMSwyMzIxMSwyMzEzOSwxNDA1NCwxNDk5MjksMjMxNTksMTQwODgsMjMxOTAsMjk3OTcsMjMyNTEsMTU5NjQ5LDE0MDYyOCwxNTc0OSwxMzc0ODksMTQxMzAsMTM2ODg4LDI0MTk1LDIxMjAwLDIzNDE0LDI1OTkyLDIzNDIwLDE2MjMxOCwxNjM4OCwxODUyNSwxMzE1ODgsMjM1MDksMjQ5MjgsMTM3NzgwLDE1NDA2MCwxMzI1MTcsMjM1MzksMjM0NTMsMTk3MjgsMjM1NTcsMTM4MDUyLDIzNTcxLDI5NjQ2LDIzNTcyLDEzODQwNSwxNTg1MDQsMjM2MjUsMTg2NTMsMjM2ODUsMjM3ODUsMjM3OTEsMjM5NDcsMTM4NzQ1LDEzODgwNywyMzgyNCwyMzgzMiwyMzg3OCwxMzg5MTYsMjM3MzgsMjQwMjMsMzM1MzIsMTQzODEsMTQ5NzYxLDEzOTMzNywxMzk2MzUsMzM0MTUsMTQzOTAsMTUyOTgsMjQxMTAsMjcyNzQsMjQxODEsMjQxODYsMTQ4NjY4LDEzNDM1NSwyMTQxNCwyMDE1MSwyNDI3MiwyMTQxNiwxMzcwNzMsMjQwNzMsMjQzMDgsMTY0OTk0LDI0MzEzLDI0MzE1LDE0NDk2LDI0MzE2LDI2Njg2LDM3OTE1LDI0MzMzLDEzMTUyMSwxOTQ3MDgsMTUwNzAsMTg2MDYsMTM1OTk0LDI0Mzc4LDE1NzgzMiwxNDAyNDAsMjQ0MDgsMTQwNDAxLDI0NDE5LDM4ODQ1LDE1OTM0MiwyNDQzNCwzNzY5NiwxNjY0NTQsMjQ0ODcsMjM5OTAsMTU3MTEsMTUyMTQ0LDEzOTExNCwxNTk5OTIsMTQwOTA0LDM3MzM0LDEzMTc0MiwxNjY0NDEsMjQ2MjUsMjYyNDUsMTM3MzM1LDE0NjkxLDE1ODE1LDEzODgxLDIyNDE2LDE0MTIzNiwzMTA4OSwxNTkzNiwyNDczNCwyNDc0MCwyNDc1NSwxNDk4OTAsMTQ5OTAzLDE2MjM4NywyOTg2MCwyMDcwNSwyMzIwMCwyNDkzMiwzMzgyOCwyNDg5OCwxOTQ3MjYsMTU5NDQyLDI0OTYxLDIwOTgwLDEzMjY5NCwyNDk2NywyMzQ2NiwxNDczODMsMTQxNDA3LDI1MDQzLDE2NjgxMywxNzAzMzMsMjUwNDAsMTQ2NDIsMTQxNjk2LDE0MTUwNSwyNDYxMSwyNDkyNCwyNTg4NiwyNTQ4MywxMzEzNTIsMjUyODUsMTM3MDcyLDI1MzAxLDE0Mjg2MSwyNTQ1MiwxNDk5ODMsMTQ4NzEsMjU2NTYsMjU1OTIsMTM2MDc4LDEzNzIxMiwyNTc0NCwyODU1NCwxNDI5MDIsMzg5MzIsMTQ3NTk2LDE1MzM3MywyNTgyNSwyNTgyOSwzODAxMSwxNDk1MCwyNTY1OCwxNDkzNSwyNTkzMywyODQzOCwxNTAwNTYsMTUwMDUxLDI1OTg5LDI1OTY1LDI1OTUxLDE0MzQ4NiwyNjAzNywxNDk4MjQsMTkyNTUsMjYwNjUsMTY2MDAsMTM3MjU3LDI2MDgwLDI2MDgzLDI0NTQzLDE0NDM4NCwyNjEzNiwxNDM4NjMsMTQzODY0LDI2MTgwLDE0Mzc4MCwxNDM3ODEsMjYxODcsMTM0NzczLDI2MjE1LDE1MjAzOCwyNjIyNywyNjIyOCwxMzg4MTMsMTQzOTIxLDE2NTM2NCwxNDM4MTYsMTUyMzM5LDMwNjYxLDE0MTU1OSwzOTMzMiwyNjM3MCwxNDgzODAsMTUwMDQ5LDE1MTQ3LDI3MTMwLDE0NTM0NiwyNjQ2MiwyNjQ3MSwyNjQ2NiwxNDc5MTcsMTY4MTczLDI2NTgzLDE3NjQxLDI2NjU4LDI4MjQwLDM3NDM2LDI2NjI1LDE0NDM1OCwxNTkxMzYsMjY3MTcsMTQ0NDk1LDI3MTA1LDI3MTQ3LDE2NjYyMywyNjk5NSwyNjgxOSwxNDQ4NDUsMjY4ODEsMjY4ODAsMTU2NjYsMTQ4NDksMTQ0OTU2LDE1MjMyLDI2NTQwLDI2OTc3LDE2NjQ3NCwxNzE0OCwyNjkzNCwyNzAzMiwxNTI2NSwxMzIwNDEsMzM2MzUsMjA2MjQsMjcxMjksMTQ0OTg1LDEzOTU2MiwyNzIwNSwxNDUxNTUsMjcyOTMsMTUzNDcsMjY1NDUsMjczMzYsMTY4MzQ4LDE1MzczLDI3NDIxLDEzMzQxMSwyNDc5OCwyNzQ0NSwyNzUwOCwxNDEyNjEsMjgzNDEsMTQ2MTM5LDEzMjAyMSwxMzc1NjAsMTQxNDQsMjE1MzcsMTQ2MjY2LDI3NjE3LDE0NzE5NiwyNzYxMiwyNzcwMywxNDA0MjcsMTQ5NzQ1LDE1ODU0NSwyNzczOCwzMzMxOCwyNzc2OSwxNDY4NzYsMTc2MDUsMTQ2ODc3LDE0Nzg3NiwxNDk3NzIsMTQ5NzYwLDE0NjYzMywxNDA1MywxNTU5NSwxMzQ0NTAsMzk4MTEsMTQzODY1LDE0MDQzMywzMjY1NSwyNjY3OSwxNTkwMTMsMTU5MTM3LDE1OTIxMSwyODA1NCwyNzk5NiwyODI4NCwyODQyMCwxNDk4ODcsMTQ3NTg5LDE1OTM0NiwzNDA5OSwxNTk2MDQsMjA5MzUsMjc4MDQsMjgxODksMzM4MzgsMTY2Njg5LDI4MjA3LDE0Njk5MSwyOTc3OSwxNDczMzAsMzExODAsMjgyMzksMjMxODUsMTQzNDM1LDI4NjY0LDE0MDkzLDI4NTczLDE0Njk5MiwyODQxMCwxMzYzNDMsMTQ3NTE3LDE3NzQ5LDM3ODcyLDI4NDg0LDI4NTA4LDE1Njk0LDI4NTMyLDE2ODMwNCwxNTY3NSwyODU3NSwxNDc3ODAsMjg2MjcsMTQ3NjAxLDE0Nzc5NywxNDc1MTMsMTQ3NDQwLDE0NzM4MCwxNDc3NzUsMjA5NTksMTQ3Nzk4LDE0Nzc5OSwxNDc3NzYsMTU2MTI1LDI4NzQ3LDI4Nzk4LDI4ODM5LDI4ODAxLDI4ODc2LDI4ODg1LDI4ODg2LDI4ODk1LDE2NjQ0LDE1ODQ4LDI5MTA4LDI5MDc4LDE0ODA4NywyODk3MSwyODk5NywyMzE3NiwyOTAwMiwyOTAzOCwyMzcwOCwxNDgzMjUsMjkwMDcsMzc3MzAsMTQ4MTYxLDI4OTcyLDE0ODU3MCwxNTAwNTUsMTUwMDUwLDI5MTE0LDE2Njg4OCwyODg2MSwyOTE5OCwzNzk1NCwyOTIwNSwyMjgwMSwzNzk1NSwyOTIyMCwzNzY5NywxNTMwOTMsMjkyMzAsMjkyNDgsMTQ5ODc2LDI2ODEzLDI5MjY5LDI5MjcxLDE1OTU3LDE0MzQyOCwyNjYzNywyODQ3NywyOTMxNCwyOTQ4MiwyOTQ4MywxNDk1MzksMTY1OTMxLDE4NjY5LDE2NTg5MiwyOTQ4MCwyOTQ4NiwyOTY0NywyOTYxMCwxMzQyMDIsMTU4MjU0LDI5NjQxLDI5NzY5LDE0NzkzOCwxMzY5MzUsMTUwMDUyLDI2MTQ3LDE0MDIxLDE0OTk0MywxNDk5MDEsMTUwMDExLDI5Njg3LDI5NzE3LDI2ODgzLDE1MDA1NCwyOTc1MywxMzI1NDcsMTYwODcsMjk3ODgsMTQxNDg1LDI5NzkyLDE2NzYwMiwyOTc2NywyOTY2OCwyOTgxNCwzMzcyMSwyOTgwNCwxNDEyOCwyOTgxMiwzNzg3MywyNzE4MCwyOTgyNiwxODc3MSwxNTAxNTYsMTQ3ODA3LDE1MDEzNywxNjY3OTksMjMzNjYsMTY2OTE1LDEzNzM3NCwyOTg5NiwxMzc2MDgsMjk5NjYsMjk5MjksMjk5ODIsMTY3NjQxLDEzNzgwMywyMzUxMSwxNjc1OTYsMzc3NjUsMzAwMjksMzAwMjYsMzAwNTUsMzAwNjIsMTUxNDI2LDE2MTMyLDE1MDgwMywzMDA5NCwyOTc4OSwzMDExMCwzMDEzMiwzMDIxMCwzMDI1MiwzMDI4OSwzMDI4NywzMDMxOSwzMDMyNiwxNTY2NjEsMzAzNTIsMzMyNjMsMTQzMjgsMTU3OTY5LDE1Nzk2NiwzMDM2OSwzMDM3MywzMDM5MSwzMDQxMiwxNTk2NDcsMzM4OTAsMTUxNzA5LDE1MTkzMywxMzg3ODAsMzA0OTQsMzA1MDIsMzA1MjgsMjU3NzUsMTUyMDk2LDMwNTUyLDE0NDA0NCwzMDYzOSwxNjYyNDQsMTY2MjQ4LDEzNjg5NywzMDcwOCwzMDcyOSwxMzYwNTQsMTUwMDM0LDI2ODI2LDMwODk1LDMwOTE5LDMwOTMxLDM4NTY1LDMxMDIyLDE1MzA1NiwzMDkzNSwzMTAyOCwzMDg5NywxNjEyOTIsMzY3OTIsMzQ5NDgsMTY2Njk5LDE1NTc3OSwxNDA4MjgsMzExMTAsMzUwNzIsMjY4ODIsMzExMDQsMTUzNjg3LDMxMTMzLDE2MjYxNywzMTAzNiwzMTE0NSwyODIwMiwxNjAwMzgsMTYwNDAsMzExNzQsMTY4MjA1LDMxMTg4XSxcbiAgXCJldWMta3JcIjpbNDQwMzQsNDQwMzUsNDQwMzcsNDQwMzgsNDQwNDMsNDQwNDQsNDQwNDUsNDQwNDYsNDQwNDcsNDQwNTYsNDQwNjIsNDQwNjMsNDQwNjUsNDQwNjYsNDQwNjcsNDQwNjksNDQwNzAsNDQwNzEsNDQwNzIsNDQwNzMsNDQwNzQsNDQwNzUsNDQwNzgsNDQwODIsNDQwODMsNDQwODQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQwODUsNDQwODYsNDQwODcsNDQwOTAsNDQwOTEsNDQwOTMsNDQwOTQsNDQwOTUsNDQwOTcsNDQwOTgsNDQwOTksNDQxMDAsNDQxMDEsNDQxMDIsNDQxMDMsNDQxMDQsNDQxMDUsNDQxMDYsNDQxMDgsNDQxMTAsNDQxMTEsNDQxMTIsNDQxMTMsNDQxMTQsNDQxMTUsNDQxMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQxMTgsNDQxMTksNDQxMjEsNDQxMjIsNDQxMjMsNDQxMjUsNDQxMjYsNDQxMjcsNDQxMjgsNDQxMjksNDQxMzAsNDQxMzEsNDQxMzIsNDQxMzMsNDQxMzQsNDQxMzUsNDQxMzYsNDQxMzcsNDQxMzgsNDQxMzksNDQxNDAsNDQxNDEsNDQxNDIsNDQxNDMsNDQxNDYsNDQxNDcsNDQxNDksNDQxNTAsNDQxNTMsNDQxNTUsNDQxNTYsNDQxNTcsNDQxNTgsNDQxNTksNDQxNjIsNDQxNjcsNDQxNjgsNDQxNzMsNDQxNzQsNDQxNzUsNDQxNzcsNDQxNzgsNDQxNzksNDQxODEsNDQxODIsNDQxODMsNDQxODQsNDQxODUsNDQxODYsNDQxODcsNDQxOTAsNDQxOTQsNDQxOTUsNDQxOTYsNDQxOTcsNDQxOTgsNDQxOTksNDQyMDMsNDQyMDUsNDQyMDYsNDQyMDksNDQyMTAsNDQyMTEsNDQyMTIsNDQyMTMsNDQyMTQsNDQyMTUsNDQyMTgsNDQyMjIsNDQyMjMsNDQyMjQsNDQyMjYsNDQyMjcsNDQyMjksNDQyMzAsNDQyMzEsNDQyMzMsNDQyMzQsNDQyMzUsNDQyMzcsNDQyMzgsNDQyMzksNDQyNDAsNDQyNDEsNDQyNDIsNDQyNDMsNDQyNDQsNDQyNDYsNDQyNDgsNDQyNDksNDQyNTAsNDQyNTEsNDQyNTIsNDQyNTMsNDQyNTQsNDQyNTUsNDQyNTgsNDQyNTksNDQyNjEsNDQyNjIsNDQyNjUsNDQyNjcsNDQyNjksNDQyNzAsNDQyNzQsNDQyNzYsNDQyNzksNDQyODAsNDQyODEsNDQyODIsNDQyODMsNDQyODYsNDQyODcsNDQyODksNDQyOTAsNDQyOTEsNDQyOTMsNDQyOTUsNDQyOTYsNDQyOTcsNDQyOTgsNDQyOTksNDQzMDIsNDQzMDQsNDQzMDYsNDQzMDcsNDQzMDgsNDQzMDksNDQzMTAsNDQzMTEsNDQzMTMsNDQzMTQsNDQzMTUsNDQzMTcsNDQzMTgsNDQzMTksNDQzMjEsNDQzMjIsNDQzMjMsNDQzMjQsNDQzMjUsNDQzMjYsNDQzMjcsNDQzMjgsNDQzMzAsNDQzMzEsNDQzMzQsNDQzMzUsNDQzMzYsNDQzMzcsNDQzMzgsNDQzMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNDIsNDQzNDMsNDQzNDUsNDQzNDYsNDQzNDcsNDQzNDksNDQzNTAsNDQzNTEsNDQzNTIsNDQzNTMsNDQzNTQsNDQzNTUsNDQzNTgsNDQzNjAsNDQzNjIsNDQzNjMsNDQzNjQsNDQzNjUsNDQzNjYsNDQzNjcsNDQzNjksNDQzNzAsNDQzNzEsNDQzNzMsNDQzNzQsNDQzNzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNzcsNDQzNzgsNDQzNzksNDQzODAsNDQzODEsNDQzODIsNDQzODMsNDQzODQsNDQzODYsNDQzODgsNDQzODksNDQzOTAsNDQzOTEsNDQzOTIsNDQzOTMsNDQzOTQsNDQzOTUsNDQzOTgsNDQzOTksNDQ0MDEsNDQ0MDIsNDQ0MDcsNDQ0MDgsNDQ0MDksNDQ0MTAsNDQ0MTQsNDQ0MTYsNDQ0MTksNDQ0MjAsNDQ0MjEsNDQ0MjIsNDQ0MjMsNDQ0MjYsNDQ0MjcsNDQ0MjksNDQ0MzAsNDQ0MzEsNDQ0MzMsNDQ0MzQsNDQ0MzUsNDQ0MzYsNDQ0MzcsNDQ0MzgsNDQ0MzksNDQ0NDAsNDQ0NDEsNDQ0NDIsNDQ0NDMsNDQ0NDYsNDQ0NDcsNDQ0NDgsNDQ0NDksNDQ0NTAsNDQ0NTEsNDQ0NTMsNDQ0NTQsNDQ0NTUsNDQ0NTYsNDQ0NTcsNDQ0NTgsNDQ0NTksNDQ0NjAsNDQ0NjEsNDQ0NjIsNDQ0NjMsNDQ0NjQsNDQ0NjUsNDQ0NjYsNDQ0NjcsNDQ0NjgsNDQ0NjksNDQ0NzAsNDQ0NzIsNDQ0NzMsNDQ0NzQsNDQ0NzUsNDQ0NzYsNDQ0NzcsNDQ0NzgsNDQ0NzksNDQ0ODIsNDQ0ODMsNDQ0ODUsNDQ0ODYsNDQ0ODcsNDQ0ODksNDQ0OTAsNDQ0OTEsNDQ0OTIsNDQ0OTMsNDQ0OTQsNDQ0OTUsNDQ0OTgsNDQ1MDAsNDQ1MDEsNDQ1MDIsNDQ1MDMsNDQ1MDQsNDQ1MDUsNDQ1MDYsNDQ1MDcsNDQ1MDksNDQ1MTAsNDQ1MTEsNDQ1MTMsNDQ1MTQsNDQ1MTUsNDQ1MTcsNDQ1MTgsNDQ1MTksNDQ1MjAsNDQ1MjEsNDQ1MjIsNDQ1MjMsNDQ1MjQsNDQ1MjUsNDQ1MjYsNDQ1MjcsNDQ1MjgsNDQ1MjksNDQ1MzAsNDQ1MzEsNDQ1MzIsNDQ1MzMsNDQ1MzQsNDQ1MzUsNDQ1MzgsNDQ1MzksNDQ1NDEsNDQ1NDIsNDQ1NDYsNDQ1NDcsNDQ1NDgsNDQ1NDksNDQ1NTAsNDQ1NTEsNDQ1NTQsNDQ1NTYsNDQ1NTgsNDQ1NTksNDQ1NjAsNDQ1NjEsNDQ1NjIsNDQ1NjMsNDQ1NjUsNDQ1NjYsNDQ1NjcsNDQ1NjgsNDQ1NjksNDQ1NzAsNDQ1NzEsNDQ1NzIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ1NzMsNDQ1NzQsNDQ1NzUsNDQ1NzYsNDQ1NzcsNDQ1NzgsNDQ1NzksNDQ1ODAsNDQ1ODEsNDQ1ODIsNDQ1ODMsNDQ1ODQsNDQ1ODUsNDQ1ODYsNDQ1ODcsNDQ1ODgsNDQ1ODksNDQ1OTAsNDQ1OTEsNDQ1OTQsNDQ1OTUsNDQ1OTcsNDQ1OTgsNDQ2MDEsNDQ2MDMsNDQ2MDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ2MDUsNDQ2MDYsNDQ2MDcsNDQ2MTAsNDQ2MTIsNDQ2MTUsNDQ2MTYsNDQ2MTcsNDQ2MTksNDQ2MjMsNDQ2MjUsNDQ2MjYsNDQ2MjcsNDQ2MjksNDQ2MzEsNDQ2MzIsNDQ2MzMsNDQ2MzQsNDQ2MzUsNDQ2MzgsNDQ2NDIsNDQ2NDMsNDQ2NDQsNDQ2NDYsNDQ2NDcsNDQ2NTAsNDQ2NTEsNDQ2NTMsNDQ2NTQsNDQ2NTUsNDQ2NTcsNDQ2NTgsNDQ2NTksNDQ2NjAsNDQ2NjEsNDQ2NjIsNDQ2NjMsNDQ2NjYsNDQ2NzAsNDQ2NzEsNDQ2NzIsNDQ2NzMsNDQ2NzQsNDQ2NzUsNDQ2NzgsNDQ2NzksNDQ2ODAsNDQ2ODEsNDQ2ODIsNDQ2ODMsNDQ2ODUsNDQ2ODYsNDQ2ODcsNDQ2ODgsNDQ2ODksNDQ2OTAsNDQ2OTEsNDQ2OTIsNDQ2OTMsNDQ2OTQsNDQ2OTUsNDQ2OTYsNDQ2OTcsNDQ2OTgsNDQ2OTksNDQ3MDAsNDQ3MDEsNDQ3MDIsNDQ3MDMsNDQ3MDQsNDQ3MDUsNDQ3MDYsNDQ3MDcsNDQ3MDgsNDQ3MDksNDQ3MTAsNDQ3MTEsNDQ3MTIsNDQ3MTMsNDQ3MTQsNDQ3MTUsNDQ3MTYsNDQ3MTcsNDQ3MTgsNDQ3MTksNDQ3MjAsNDQ3MjEsNDQ3MjIsNDQ3MjMsNDQ3MjQsNDQ3MjUsNDQ3MjYsNDQ3MjcsNDQ3MjgsNDQ3MjksNDQ3MzAsNDQ3MzEsNDQ3MzUsNDQ3MzcsNDQ3MzgsNDQ3MzksNDQ3NDEsNDQ3NDIsNDQ3NDMsNDQ3NDQsNDQ3NDUsNDQ3NDYsNDQ3NDcsNDQ3NTAsNDQ3NTQsNDQ3NTUsNDQ3NTYsNDQ3NTcsNDQ3NTgsNDQ3NTksNDQ3NjIsNDQ3NjMsNDQ3NjUsNDQ3NjYsNDQ3NjcsNDQ3NjgsNDQ3NjksNDQ3NzAsNDQ3NzEsNDQ3NzIsNDQ3NzMsNDQ3NzQsNDQ3NzUsNDQ3NzcsNDQ3NzgsNDQ3ODAsNDQ3ODIsNDQ3ODMsNDQ3ODQsNDQ3ODUsNDQ3ODYsNDQ3ODcsNDQ3ODksNDQ3OTAsNDQ3OTEsNDQ3OTMsNDQ3OTQsNDQ3OTUsNDQ3OTcsNDQ3OTgsNDQ3OTksNDQ4MDAsNDQ4MDEsNDQ4MDIsNDQ4MDMsNDQ4MDQsNDQ4MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MDYsNDQ4MDksNDQ4MTAsNDQ4MTEsNDQ4MTIsNDQ4MTQsNDQ4MTUsNDQ4MTcsNDQ4MTgsNDQ4MTksNDQ4MjAsNDQ4MjEsNDQ4MjIsNDQ4MjMsNDQ4MjQsNDQ4MjUsNDQ4MjYsNDQ4MjcsNDQ4MjgsNDQ4MjksNDQ4MzAsNDQ4MzEsNDQ4MzIsNDQ4MzMsNDQ4MzQsNDQ4MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MzYsNDQ4MzcsNDQ4MzgsNDQ4MzksNDQ4NDAsNDQ4NDEsNDQ4NDIsNDQ4NDMsNDQ4NDYsNDQ4NDcsNDQ4NDksNDQ4NTEsNDQ4NTMsNDQ4NTQsNDQ4NTUsNDQ4NTYsNDQ4NTcsNDQ4NTgsNDQ4NTksNDQ4NjIsNDQ4NjQsNDQ4NjgsNDQ4NjksNDQ4NzAsNDQ4NzEsNDQ4NzQsNDQ4NzUsNDQ4NzYsNDQ4NzcsNDQ4NzgsNDQ4NzksNDQ4ODEsNDQ4ODIsNDQ4ODMsNDQ4ODQsNDQ4ODUsNDQ4ODYsNDQ4ODcsNDQ4ODgsNDQ4ODksNDQ4OTAsNDQ4OTEsNDQ4OTQsNDQ4OTUsNDQ4OTYsNDQ4OTcsNDQ4OTgsNDQ4OTksNDQ5MDIsNDQ5MDMsNDQ5MDQsNDQ5MDUsNDQ5MDYsNDQ5MDcsNDQ5MDgsNDQ5MDksNDQ5MTAsNDQ5MTEsNDQ5MTIsNDQ5MTMsNDQ5MTQsNDQ5MTUsNDQ5MTYsNDQ5MTcsNDQ5MTgsNDQ5MTksNDQ5MjAsNDQ5MjIsNDQ5MjMsNDQ5MjQsNDQ5MjUsNDQ5MjYsNDQ5MjcsNDQ5MjksNDQ5MzAsNDQ5MzEsNDQ5MzMsNDQ5MzQsNDQ5MzUsNDQ5MzcsNDQ5MzgsNDQ5MzksNDQ5NDAsNDQ5NDEsNDQ5NDIsNDQ5NDMsNDQ5NDYsNDQ5NDcsNDQ5NDgsNDQ5NTAsNDQ5NTEsNDQ5NTIsNDQ5NTMsNDQ5NTQsNDQ5NTUsNDQ5NTcsNDQ5NTgsNDQ5NTksNDQ5NjAsNDQ5NjEsNDQ5NjIsNDQ5NjMsNDQ5NjQsNDQ5NjUsNDQ5NjYsNDQ5NjcsNDQ5NjgsNDQ5NjksNDQ5NzAsNDQ5NzEsNDQ5NzIsNDQ5NzMsNDQ5NzQsNDQ5NzUsNDQ5NzYsNDQ5NzcsNDQ5NzgsNDQ5NzksNDQ5ODAsNDQ5ODEsNDQ5ODIsNDQ5ODMsNDQ5ODYsNDQ5ODcsNDQ5ODksNDQ5OTAsNDQ5OTEsNDQ5OTMsNDQ5OTQsNDQ5OTUsNDQ5OTYsNDQ5OTcsNDQ5OTgsNDUwMDIsNDUwMDQsNDUwMDcsNDUwMDgsNDUwMDksNDUwMTAsNDUwMTEsNDUwMTMsNDUwMTQsNDUwMTUsNDUwMTYsNDUwMTcsNDUwMTgsNDUwMTksNDUwMjEsNDUwMjIsNDUwMjMsNDUwMjQsNDUwMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwMjYsNDUwMjcsNDUwMjgsNDUwMjksNDUwMzAsNDUwMzEsNDUwMzQsNDUwMzUsNDUwMzYsNDUwMzcsNDUwMzgsNDUwMzksNDUwNDIsNDUwNDMsNDUwNDUsNDUwNDYsNDUwNDcsNDUwNDksNDUwNTAsNDUwNTEsNDUwNTIsNDUwNTMsNDUwNTQsNDUwNTUsNDUwNTgsNDUwNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwNjEsNDUwNjIsNDUwNjMsNDUwNjQsNDUwNjUsNDUwNjYsNDUwNjcsNDUwNjksNDUwNzAsNDUwNzEsNDUwNzMsNDUwNzQsNDUwNzUsNDUwNzcsNDUwNzgsNDUwNzksNDUwODAsNDUwODEsNDUwODIsNDUwODMsNDUwODYsNDUwODcsNDUwODgsNDUwODksNDUwOTAsNDUwOTEsNDUwOTIsNDUwOTMsNDUwOTQsNDUwOTUsNDUwOTcsNDUwOTgsNDUwOTksNDUxMDAsNDUxMDEsNDUxMDIsNDUxMDMsNDUxMDQsNDUxMDUsNDUxMDYsNDUxMDcsNDUxMDgsNDUxMDksNDUxMTAsNDUxMTEsNDUxMTIsNDUxMTMsNDUxMTQsNDUxMTUsNDUxMTYsNDUxMTcsNDUxMTgsNDUxMTksNDUxMjAsNDUxMjEsNDUxMjIsNDUxMjMsNDUxMjYsNDUxMjcsNDUxMjksNDUxMzEsNDUxMzMsNDUxMzUsNDUxMzYsNDUxMzcsNDUxMzgsNDUxNDIsNDUxNDQsNDUxNDYsNDUxNDcsNDUxNDgsNDUxNTAsNDUxNTEsNDUxNTIsNDUxNTMsNDUxNTQsNDUxNTUsNDUxNTYsNDUxNTcsNDUxNTgsNDUxNTksNDUxNjAsNDUxNjEsNDUxNjIsNDUxNjMsNDUxNjQsNDUxNjUsNDUxNjYsNDUxNjcsNDUxNjgsNDUxNjksNDUxNzAsNDUxNzEsNDUxNzIsNDUxNzMsNDUxNzQsNDUxNzUsNDUxNzYsNDUxNzcsNDUxNzgsNDUxNzksNDUxODIsNDUxODMsNDUxODUsNDUxODYsNDUxODcsNDUxODksNDUxOTAsNDUxOTEsNDUxOTIsNDUxOTMsNDUxOTQsNDUxOTUsNDUxOTgsNDUyMDAsNDUyMDIsNDUyMDMsNDUyMDQsNDUyMDUsNDUyMDYsNDUyMDcsNDUyMTEsNDUyMTMsNDUyMTQsNDUyMTksNDUyMjAsNDUyMjEsNDUyMjIsNDUyMjMsNDUyMjYsNDUyMzIsNDUyMzQsNDUyMzgsNDUyMzksNDUyNDEsNDUyNDIsNDUyNDMsNDUyNDUsNDUyNDYsNDUyNDcsNDUyNDgsNDUyNDksNDUyNTAsNDUyNTEsNDUyNTQsNDUyNTgsNDUyNTksNDUyNjAsNDUyNjEsNDUyNjIsNDUyNjMsNDUyNjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyNjcsNDUyNjksNDUyNzAsNDUyNzEsNDUyNzMsNDUyNzQsNDUyNzUsNDUyNzYsNDUyNzcsNDUyNzgsNDUyNzksNDUyODEsNDUyODIsNDUyODMsNDUyODQsNDUyODYsNDUyODcsNDUyODgsNDUyODksNDUyOTAsNDUyOTEsNDUyOTIsNDUyOTMsNDUyOTQsNDUyOTUsNDUyOTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyOTcsNDUyOTgsNDUyOTksNDUzMDAsNDUzMDEsNDUzMDIsNDUzMDMsNDUzMDQsNDUzMDUsNDUzMDYsNDUzMDcsNDUzMDgsNDUzMDksNDUzMTAsNDUzMTEsNDUzMTIsNDUzMTMsNDUzMTQsNDUzMTUsNDUzMTYsNDUzMTcsNDUzMTgsNDUzMTksNDUzMjIsNDUzMjUsNDUzMjYsNDUzMjcsNDUzMjksNDUzMzIsNDUzMzMsNDUzMzQsNDUzMzUsNDUzMzgsNDUzNDIsNDUzNDMsNDUzNDQsNDUzNDUsNDUzNDYsNDUzNTAsNDUzNTEsNDUzNTMsNDUzNTQsNDUzNTUsNDUzNTcsNDUzNTgsNDUzNTksNDUzNjAsNDUzNjEsNDUzNjIsNDUzNjMsNDUzNjYsNDUzNzAsNDUzNzEsNDUzNzIsNDUzNzMsNDUzNzQsNDUzNzUsNDUzNzgsNDUzNzksNDUzODEsNDUzODIsNDUzODMsNDUzODUsNDUzODYsNDUzODcsNDUzODgsNDUzODksNDUzOTAsNDUzOTEsNDUzOTQsNDUzOTUsNDUzOTgsNDUzOTksNDU0MDEsNDU0MDIsNDU0MDMsNDU0MDUsNDU0MDYsNDU0MDcsNDU0MDksNDU0MTAsNDU0MTEsNDU0MTIsNDU0MTMsNDU0MTQsNDU0MTUsNDU0MTYsNDU0MTcsNDU0MTgsNDU0MTksNDU0MjAsNDU0MjEsNDU0MjIsNDU0MjMsNDU0MjQsNDU0MjUsNDU0MjYsNDU0MjcsNDU0MjgsNDU0MjksNDU0MzAsNDU0MzEsNDU0MzQsNDU0MzUsNDU0MzcsNDU0MzgsNDU0MzksNDU0NDEsNDU0NDMsNDU0NDQsNDU0NDUsNDU0NDYsNDU0NDcsNDU0NTAsNDU0NTIsNDU0NTQsNDU0NTUsNDU0NTYsNDU0NTcsNDU0NjEsNDU0NjIsNDU0NjMsNDU0NjUsNDU0NjYsNDU0NjcsNDU0NjksNDU0NzAsNDU0NzEsNDU0NzIsNDU0NzMsNDU0NzQsNDU0NzUsNDU0NzYsNDU0NzcsNDU0NzgsNDU0NzksNDU0ODEsNDU0ODIsNDU0ODMsNDU0ODQsNDU0ODUsNDU0ODYsNDU0ODcsNDU0ODgsNDU0ODksNDU0OTAsNDU0OTEsNDU0OTIsNDU0OTMsNDU0OTQsNDU0OTUsNDU0OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU0OTcsNDU0OTgsNDU0OTksNDU1MDAsNDU1MDEsNDU1MDIsNDU1MDMsNDU1MDQsNDU1MDUsNDU1MDYsNDU1MDcsNDU1MDgsNDU1MDksNDU1MTAsNDU1MTEsNDU1MTIsNDU1MTMsNDU1MTQsNDU1MTUsNDU1MTcsNDU1MTgsNDU1MTksNDU1MjEsNDU1MjIsNDU1MjMsNDU1MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU1MjYsNDU1MjcsNDU1MjgsNDU1MjksNDU1MzAsNDU1MzEsNDU1MzQsNDU1MzYsNDU1MzcsNDU1MzgsNDU1MzksNDU1NDAsNDU1NDEsNDU1NDIsNDU1NDMsNDU1NDYsNDU1NDcsNDU1NDksNDU1NTAsNDU1NTEsNDU1NTMsNDU1NTQsNDU1NTUsNDU1NTYsNDU1NTcsNDU1NTgsNDU1NTksNDU1NjAsNDU1NjIsNDU1NjQsNDU1NjYsNDU1NjcsNDU1NjgsNDU1NjksNDU1NzAsNDU1NzEsNDU1NzQsNDU1NzUsNDU1NzcsNDU1NzgsNDU1ODEsNDU1ODIsNDU1ODMsNDU1ODQsNDU1ODUsNDU1ODYsNDU1ODcsNDU1OTAsNDU1OTIsNDU1OTQsNDU1OTUsNDU1OTYsNDU1OTcsNDU1OTgsNDU1OTksNDU2MDEsNDU2MDIsNDU2MDMsNDU2MDQsNDU2MDUsNDU2MDYsNDU2MDcsNDU2MDgsNDU2MDksNDU2MTAsNDU2MTEsNDU2MTIsNDU2MTMsNDU2MTQsNDU2MTUsNDU2MTYsNDU2MTcsNDU2MTgsNDU2MTksNDU2MjEsNDU2MjIsNDU2MjMsNDU2MjQsNDU2MjUsNDU2MjYsNDU2MjcsNDU2MjksNDU2MzAsNDU2MzEsNDU2MzIsNDU2MzMsNDU2MzQsNDU2MzUsNDU2MzYsNDU2MzcsNDU2MzgsNDU2MzksNDU2NDAsNDU2NDEsNDU2NDIsNDU2NDMsNDU2NDQsNDU2NDUsNDU2NDYsNDU2NDcsNDU2NDgsNDU2NDksNDU2NTAsNDU2NTEsNDU2NTIsNDU2NTMsNDU2NTQsNDU2NTUsNDU2NTcsNDU2NTgsNDU2NTksNDU2NjEsNDU2NjIsNDU2NjMsNDU2NjUsNDU2NjYsNDU2NjcsNDU2NjgsNDU2NjksNDU2NzAsNDU2NzEsNDU2NzQsNDU2NzUsNDU2NzYsNDU2NzcsNDU2NzgsNDU2NzksNDU2ODAsNDU2ODEsNDU2ODIsNDU2ODMsNDU2ODYsNDU2ODcsNDU2ODgsNDU2ODksNDU2OTAsNDU2OTEsNDU2OTMsNDU2OTQsNDU2OTUsNDU2OTYsNDU2OTcsNDU2OTgsNDU2OTksNDU3MDIsNDU3MDMsNDU3MDQsNDU3MDYsNDU3MDcsNDU3MDgsNDU3MDksNDU3MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3MTEsNDU3MTQsNDU3MTUsNDU3MTcsNDU3MTgsNDU3MTksNDU3MjMsNDU3MjQsNDU3MjUsNDU3MjYsNDU3MjcsNDU3MzAsNDU3MzIsNDU3MzUsNDU3MzYsNDU3MzcsNDU3MzksNDU3NDEsNDU3NDIsNDU3NDMsNDU3NDUsNDU3NDYsNDU3NDcsNDU3NDksNDU3NTAsNDU3NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3NTIsNDU3NTMsNDU3NTQsNDU3NTUsNDU3NTYsNDU3NTcsNDU3NTgsNDU3NTksNDU3NjAsNDU3NjEsNDU3NjIsNDU3NjMsNDU3NjQsNDU3NjUsNDU3NjYsNDU3NjcsNDU3NzAsNDU3NzEsNDU3NzMsNDU3NzQsNDU3NzUsNDU3NzcsNDU3NzksNDU3ODAsNDU3ODEsNDU3ODIsNDU3ODMsNDU3ODYsNDU3ODgsNDU3OTAsNDU3OTEsNDU3OTIsNDU3OTMsNDU3OTUsNDU3OTksNDU4MDEsNDU4MDIsNDU4MDgsNDU4MDksNDU4MTAsNDU4MTQsNDU4MjAsNDU4MjEsNDU4MjIsNDU4MjYsNDU4MjcsNDU4MjksNDU4MzAsNDU4MzEsNDU4MzMsNDU4MzQsNDU4MzUsNDU4MzYsNDU4MzcsNDU4MzgsNDU4MzksNDU4NDIsNDU4NDYsNDU4NDcsNDU4NDgsNDU4NDksNDU4NTAsNDU4NTEsNDU4NTMsNDU4NTQsNDU4NTUsNDU4NTYsNDU4NTcsNDU4NTgsNDU4NTksNDU4NjAsNDU4NjEsNDU4NjIsNDU4NjMsNDU4NjQsNDU4NjUsNDU4NjYsNDU4NjcsNDU4NjgsNDU4NjksNDU4NzAsNDU4NzEsNDU4NzIsNDU4NzMsNDU4NzQsNDU4NzUsNDU4NzYsNDU4NzcsNDU4NzgsNDU4NzksNDU4ODAsNDU4ODEsNDU4ODIsNDU4ODMsNDU4ODQsNDU4ODUsNDU4ODYsNDU4ODcsNDU4ODgsNDU4ODksNDU4OTAsNDU4OTEsNDU4OTIsNDU4OTMsNDU4OTQsNDU4OTUsNDU4OTYsNDU4OTcsNDU4OTgsNDU4OTksNDU5MDAsNDU5MDEsNDU5MDIsNDU5MDMsNDU5MDQsNDU5MDUsNDU5MDYsNDU5MDcsNDU5MTEsNDU5MTMsNDU5MTQsNDU5MTcsNDU5MjAsNDU5MjEsNDU5MjIsNDU5MjMsNDU5MjYsNDU5MjgsNDU5MzAsNDU5MzIsNDU5MzMsNDU5MzUsNDU5MzgsNDU5MzksNDU5NDEsNDU5NDIsNDU5NDMsNDU5NDUsNDU5NDYsNDU5NDcsNDU5NDgsNDU5NDksNDU5NTAsNDU5NTEsNDU5NTQsNDU5NTgsNDU5NTksNDU5NjAsNDU5NjEsNDU5NjIsNDU5NjMsNDU5NjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5NjYsNDU5NjcsNDU5NjksNDU5NzAsNDU5NzEsNDU5NzMsNDU5NzQsNDU5NzUsNDU5NzYsNDU5NzcsNDU5NzgsNDU5NzksNDU5ODAsNDU5ODEsNDU5ODIsNDU5ODMsNDU5ODYsNDU5ODcsNDU5ODgsNDU5ODksNDU5OTAsNDU5OTEsNDU5OTMsNDU5OTQsNDU5OTUsNDU5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5OTgsNDU5OTksNDYwMDAsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYwMTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYwMTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYwMjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMsNDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEsNDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgsNDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUsNDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYwNzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYwODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYwODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYwOTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTksNDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMsNDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgsNDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgsNDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYxMzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYxNDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYxNTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYxNTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMsNDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgsNDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcsNDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYxOTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYyMDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYyMTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYyMTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcsNDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgsNDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMsNDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEsNDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYyNDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYyNjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYyNjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYyNzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIsNDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUsNDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIsNDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMsNDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYzMjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYzMzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYzMzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYzNDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAsNDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYsNDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEsNDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYsNDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYzOTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUsNDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEsNDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgsNDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAsNDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEsNDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgsNDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDksNDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcsNDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1NjgsNDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQsNDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEsNDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcsNDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMsNDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2MjgsNDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2MzcsNDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYsNDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2NzcsNDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIsNDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODksNDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMsNDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQsNDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3MzksNDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYsNDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUsNDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYsNDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEsNDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDksNDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4MzgsNDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUsNDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIsNDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAsNDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcsNDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEsNDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcsNDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYsNDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5NjcsNDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIsNDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcsNDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUsNDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcwMTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcwMjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcwMzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQsNDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTksNDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYsNDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcwNzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcwODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcwOTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcsNDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcsNDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMsNDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQsNDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcxMzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcxNTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcxNjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcxNzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcsNDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAsNDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUsNDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYsNDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcyMTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcyMjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcyMzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcyNDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQsNDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYsNDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEsNDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcyNjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcyODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcyODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQsNDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAsNDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcsNDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQsNDczMjYsNDczMjgsNDczMzAsNDczMzEsNDczMzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDczNDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDczNTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDczNjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgsNDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzksNDczODAsNDczODEsNDczODIsNDczODMsNDczODUsNDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMsNDczOTQsNDczOTUsNDczOTYsNDczOTcsNDczOTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0MjksNDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMsNDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAsNDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTksNDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTksNDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIsNDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcsNDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTksNDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTksNDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMsNDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMsNDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEsNDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMsNDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQsNDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTksNDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYsNDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMsNDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEsNDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAsNDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIsNDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMsNDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMsNDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQsNDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEsNDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIsNDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcsNDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQsNDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUsNDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgsNDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMsNDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5MzgsNDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYsNDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgsNDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUsNDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDgwMDAsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDkwMDAsNDkwMDEsNDkwMDIsNDkwMDMsNDkwMDQsNDkwMDUsNDkwMDYsNDkwMDcsNDkwMDgsNDkwMDksNDkwMTAsNDkwMTEsNDkwMTIsNDkwMTMsNDkwMTQsNDkwMTUsNDkwMTYsNDkwMTcsNDkwMTgsNDkwMTksNDkwMjAsNDkwMjEsNDkwMjIsNDkwMjMsNDkwMjQsNDkwMjUsNDkwMjYsNDkwMjcsNDkwMjgsNDkwMjksNDkwMzAsNDkwMzEsNDkwMzIsNDkwMzMsNDkwMzQsNDkwMzUsNDkwMzYsNDkwMzcsNDkwMzgsNDkwMzksNDkwNDAsNDkwNDEsNDkwNDIsNDkwNDMsNDkwNDUsNDkwNDYsNDkwNDcsNDkwNDgsNDkwNDksNDkwNTAsNDkwNTEsNDkwNTIsNDkwNTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwNTQsNDkwNTUsNDkwNTYsNDkwNTcsNDkwNTgsNDkwNTksNDkwNjAsNDkwNjEsNDkwNjIsNDkwNjMsNDkwNjQsNDkwNjUsNDkwNjYsNDkwNjcsNDkwNjgsNDkwNjksNDkwNzAsNDkwNzEsNDkwNzMsNDkwNzQsNDkwNzUsNDkwNzYsNDkwNzcsNDkwNzgsNDkwNzksNDkwODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwODEsNDkwODIsNDkwODMsNDkwODQsNDkwODUsNDkwODYsNDkwODcsNDkwODgsNDkwODksNDkwOTAsNDkwOTEsNDkwOTIsNDkwOTQsNDkwOTUsNDkwOTYsNDkwOTcsNDkwOTgsNDkwOTksNDkxMDIsNDkxMDMsNDkxMDUsNDkxMDYsNDkxMDcsNDkxMDksNDkxMTAsNDkxMTEsNDkxMTIsNDkxMTMsNDkxMTQsNDkxMTUsNDkxMTcsNDkxMTgsNDkxMjAsNDkxMjIsNDkxMjMsNDkxMjQsNDkxMjUsNDkxMjYsNDkxMjcsNDkxMjgsNDkxMjksNDkxMzAsNDkxMzEsNDkxMzIsNDkxMzMsNDkxMzQsNDkxMzUsNDkxMzYsNDkxMzcsNDkxMzgsNDkxMzksNDkxNDAsNDkxNDEsNDkxNDIsNDkxNDMsNDkxNDQsNDkxNDUsNDkxNDYsNDkxNDcsNDkxNDgsNDkxNDksNDkxNTAsNDkxNTEsNDkxNTIsNDkxNTMsNDkxNTQsNDkxNTUsNDkxNTYsNDkxNTcsNDkxNTgsNDkxNTksNDkxNjAsNDkxNjEsNDkxNjIsNDkxNjMsNDkxNjQsNDkxNjUsNDkxNjYsNDkxNjcsNDkxNjgsNDkxNjksNDkxNzAsNDkxNzEsNDkxNzIsNDkxNzMsNDkxNzQsNDkxNzUsNDkxNzYsNDkxNzcsNDkxNzgsNDkxNzksNDkxODAsNDkxODEsNDkxODIsNDkxODMsNDkxODQsNDkxODUsNDkxODYsNDkxODcsNDkxODgsNDkxODksNDkxOTAsNDkxOTEsNDkxOTIsNDkxOTMsNDkxOTQsNDkxOTUsNDkxOTYsNDkxOTcsNDkxOTgsNDkxOTksNDkyMDAsNDkyMDEsNDkyMDIsNDkyMDMsNDkyMDQsNDkyMDUsNDkyMDYsNDkyMDcsNDkyMDgsNDkyMDksNDkyMTAsNDkyMTEsNDkyMTMsNDkyMTQsNDkyMTUsNDkyMTYsNDkyMTcsNDkyMTgsNDkyMTksNDkyMjAsNDkyMjEsNDkyMjIsNDkyMjMsNDkyMjQsNDkyMjUsNDkyMjYsNDkyMjcsNDkyMjgsNDkyMjksNDkyMzAsNDkyMzEsNDkyMzIsNDkyMzQsNDkyMzUsNDkyMzYsNDkyMzcsNDkyMzgsNDkyMzksNDkyNDEsNDkyNDIsNDkyNDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNDUsNDkyNDYsNDkyNDcsNDkyNDksNDkyNTAsNDkyNTEsNDkyNTIsNDkyNTMsNDkyNTQsNDkyNTUsNDkyNTgsNDkyNTksNDkyNjAsNDkyNjEsNDkyNjIsNDkyNjMsNDkyNjQsNDkyNjUsNDkyNjYsNDkyNjcsNDkyNjgsNDkyNjksNDkyNzAsNDkyNzEsNDkyNzIsNDkyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNzQsNDkyNzUsNDkyNzYsNDkyNzcsNDkyNzgsNDkyNzksNDkyODAsNDkyODEsNDkyODIsNDkyODMsNDkyODQsNDkyODUsNDkyODYsNDkyODcsNDkyODgsNDkyODksNDkyOTAsNDkyOTEsNDkyOTIsNDkyOTMsNDkyOTQsNDkyOTUsNDkyOTgsNDkyOTksNDkzMDEsNDkzMDIsNDkzMDMsNDkzMDUsNDkzMDYsNDkzMDcsNDkzMDgsNDkzMDksNDkzMTAsNDkzMTEsNDkzMTQsNDkzMTYsNDkzMTgsNDkzMTksNDkzMjAsNDkzMjEsNDkzMjIsNDkzMjMsNDkzMjYsNDkzMjksNDkzMzAsNDkzMzUsNDkzMzYsNDkzMzcsNDkzMzgsNDkzMzksNDkzNDIsNDkzNDYsNDkzNDcsNDkzNDgsNDkzNTAsNDkzNTEsNDkzNTQsNDkzNTUsNDkzNTcsNDkzNTgsNDkzNTksNDkzNjEsNDkzNjIsNDkzNjMsNDkzNjQsNDkzNjUsNDkzNjYsNDkzNjcsNDkzNzAsNDkzNzQsNDkzNzUsNDkzNzYsNDkzNzcsNDkzNzgsNDkzNzksNDkzODIsNDkzODMsNDkzODUsNDkzODYsNDkzODcsNDkzODksNDkzOTAsNDkzOTEsNDkzOTIsNDkzOTMsNDkzOTQsNDkzOTUsNDkzOTgsNDk0MDAsNDk0MDIsNDk0MDMsNDk0MDQsNDk0MDUsNDk0MDYsNDk0MDcsNDk0MDksNDk0MTAsNDk0MTEsNDk0MTMsNDk0MTQsNDk0MTUsNDk0MTcsNDk0MTgsNDk0MTksNDk0MjAsNDk0MjEsNDk0MjIsNDk0MjMsNDk0MjUsNDk0MjYsNDk0MjcsNDk0MjgsNDk0MzAsNDk0MzEsNDk0MzIsNDk0MzMsNDk0MzQsNDk0MzUsNDk0NDEsNDk0NDIsNDk0NDUsNDk0NDgsNDk0NDksNDk0NTAsNDk0NTEsNDk0NTQsNDk0NTgsNDk0NTksNDk0NjAsNDk0NjEsNDk0NjMsNDk0NjYsNDk0NjcsNDk0NjksNDk0NzAsNDk0NzEsNDk0NzMsNDk0NzQsNDk0NzUsNDk0NzYsNDk0NzcsNDk0NzgsNDk0NzksNDk0ODIsNDk0ODYsNDk0ODcsNDk0ODgsNDk0ODksNDk0OTAsNDk0OTEsNDk0OTQsNDk0OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk0OTcsNDk0OTgsNDk0OTksNDk1MDEsNDk1MDIsNDk1MDMsNDk1MDQsNDk1MDUsNDk1MDYsNDk1MDcsNDk1MTAsNDk1MTQsNDk1MTUsNDk1MTYsNDk1MTcsNDk1MTgsNDk1MTksNDk1MjEsNDk1MjIsNDk1MjMsNDk1MjUsNDk1MjYsNDk1MjcsNDk1MjksNDk1MzAsNDk1MzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk1MzIsNDk1MzMsNDk1MzQsNDk1MzUsNDk1MzYsNDk1MzcsNDk1MzgsNDk1MzksNDk1NDAsNDk1NDIsNDk1NDMsNDk1NDQsNDk1NDUsNDk1NDYsNDk1NDcsNDk1NTEsNDk1NTMsNDk1NTQsNDk1NTUsNDk1NTcsNDk1NTksNDk1NjAsNDk1NjEsNDk1NjIsNDk1NjMsNDk1NjYsNDk1NjgsNDk1NzAsNDk1NzEsNDk1NzIsNDk1NzQsNDk1NzUsNDk1NzgsNDk1NzksNDk1ODEsNDk1ODIsNDk1ODMsNDk1ODUsNDk1ODYsNDk1ODcsNDk1ODgsNDk1ODksNDk1OTAsNDk1OTEsNDk1OTIsNDk1OTMsNDk1OTQsNDk1OTUsNDk1OTYsNDk1OTgsNDk1OTksNDk2MDAsNDk2MDEsNDk2MDIsNDk2MDMsNDk2MDUsNDk2MDYsNDk2MDcsNDk2MDksNDk2MTAsNDk2MTEsNDk2MTMsNDk2MTQsNDk2MTUsNDk2MTYsNDk2MTcsNDk2MTgsNDk2MTksNDk2MjEsNDk2MjIsNDk2MjUsNDk2MjYsNDk2MjcsNDk2MjgsNDk2MjksNDk2MzAsNDk2MzEsNDk2MzMsNDk2MzQsNDk2MzUsNDk2MzcsNDk2MzgsNDk2MzksNDk2NDEsNDk2NDIsNDk2NDMsNDk2NDQsNDk2NDUsNDk2NDYsNDk2NDcsNDk2NTAsNDk2NTIsNDk2NTMsNDk2NTQsNDk2NTUsNDk2NTYsNDk2NTcsNDk2NTgsNDk2NTksNDk2NjIsNDk2NjMsNDk2NjUsNDk2NjYsNDk2NjcsNDk2NjksNDk2NzAsNDk2NzEsNDk2NzIsNDk2NzMsNDk2NzQsNDk2NzUsNDk2NzgsNDk2ODAsNDk2ODIsNDk2ODMsNDk2ODQsNDk2ODUsNDk2ODYsNDk2ODcsNDk2OTAsNDk2OTEsNDk2OTMsNDk2OTQsNDk2OTcsNDk2OTgsNDk2OTksNDk3MDAsNDk3MDEsNDk3MDIsNDk3MDMsNDk3MDYsNDk3MDgsNDk3MTAsNDk3MTIsNDk3MTUsNDk3MTcsNDk3MTgsNDk3MTksNDk3MjAsNDk3MjEsNDk3MjIsNDk3MjMsNDk3MjQsNDk3MjUsNDk3MjYsNDk3MjcsNDk3MjgsNDk3MjksNDk3MzAsNDk3MzEsNDk3MzIsNDk3MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3MzQsNDk3MzUsNDk3MzcsNDk3MzgsNDk3MzksNDk3NDAsNDk3NDEsNDk3NDIsNDk3NDMsNDk3NDYsNDk3NDcsNDk3NDksNDk3NTAsNDk3NTEsNDk3NTMsNDk3NTQsNDk3NTUsNDk3NTYsNDk3NTcsNDk3NTgsNDk3NTksNDk3NjEsNDk3NjIsNDk3NjMsNDk3NjQsNDk3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3NjcsNDk3NjgsNDk3NjksNDk3NzAsNDk3NzEsNDk3NzQsNDk3NzUsNDk3NzcsNDk3NzgsNDk3NzksNDk3ODEsNDk3ODIsNDk3ODMsNDk3ODQsNDk3ODUsNDk3ODYsNDk3ODcsNDk3OTAsNDk3OTIsNDk3OTQsNDk3OTUsNDk3OTYsNDk3OTcsNDk3OTgsNDk3OTksNDk4MDIsNDk4MDMsNDk4MDQsNDk4MDUsNDk4MDYsNDk4MDcsNDk4MDksNDk4MTAsNDk4MTEsNDk4MTIsNDk4MTMsNDk4MTQsNDk4MTUsNDk4MTcsNDk4MTgsNDk4MjAsNDk4MjIsNDk4MjMsNDk4MjQsNDk4MjUsNDk4MjYsNDk4MjcsNDk4MzAsNDk4MzEsNDk4MzMsNDk4MzQsNDk4MzUsNDk4MzgsNDk4MzksNDk4NDAsNDk4NDEsNDk4NDIsNDk4NDMsNDk4NDYsNDk4NDgsNDk4NTAsNDk4NTEsNDk4NTIsNDk4NTMsNDk4NTQsNDk4NTUsNDk4NTYsNDk4NTcsNDk4NTgsNDk4NTksNDk4NjAsNDk4NjEsNDk4NjIsNDk4NjMsNDk4NjQsNDk4NjUsNDk4NjYsNDk4NjcsNDk4NjgsNDk4NjksNDk4NzAsNDk4NzEsNDk4NzIsNDk4NzMsNDk4NzQsNDk4NzUsNDk4NzYsNDk4NzcsNDk4NzgsNDk4NzksNDk4ODAsNDk4ODEsNDk4ODIsNDk4ODMsNDk4ODYsNDk4ODcsNDk4ODksNDk4OTAsNDk4OTMsNDk4OTQsNDk4OTUsNDk4OTYsNDk4OTcsNDk4OTgsNDk5MDIsNDk5MDQsNDk5MDYsNDk5MDcsNDk5MDgsNDk5MDksNDk5MTEsNDk5MTQsNDk5MTcsNDk5MTgsNDk5MTksNDk5MjEsNDk5MjIsNDk5MjMsNDk5MjQsNDk5MjUsNDk5MjYsNDk5MjcsNDk5MzAsNDk5MzEsNDk5MzQsNDk5MzUsNDk5MzYsNDk5MzcsNDk5MzgsNDk5NDIsNDk5NDMsNDk5NDUsNDk5NDYsNDk5NDcsNDk5NDksNDk5NTAsNDk5NTEsNDk5NTIsNDk5NTMsNDk5NTQsNDk5NTUsNDk5NTgsNDk5NTksNDk5NjIsNDk5NjMsNDk5NjQsNDk5NjUsNDk5NjYsNDk5NjcsNDk5NjgsNDk5NjksNDk5NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5NzEsNDk5NzIsNDk5NzMsNDk5NzQsNDk5NzUsNDk5NzYsNDk5NzcsNDk5NzgsNDk5NzksNDk5ODAsNDk5ODEsNDk5ODIsNDk5ODMsNDk5ODQsNDk5ODUsNDk5ODYsNDk5ODcsNDk5ODgsNDk5OTAsNDk5OTEsNDk5OTIsNDk5OTMsNDk5OTQsNDk5OTUsNDk5OTYsNDk5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5OTgsNDk5OTksNTAwMDAsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTEwMDAsNTEwMDEsNTEwMDIsNTEwMDMsNTEwMDYsNTEwMDcsNTEwMDksNTEwMTAsNTEwMTEsNTEwMTMsNTEwMTQsNTEwMTUsNTEwMTYsNTEwMTcsNTEwMTksNTEwMjIsNTEwMjQsNTEwMzMsNTEwMzQsNTEwMzUsNTEwMzcsNTEwMzgsNTEwMzksNTEwNDEsNTEwNDIsNTEwNDMsNTEwNDQsNTEwNDUsNTEwNDYsNTEwNDcsNTEwNDksNTEwNTAsNTEwNTIsNTEwNTMsNTEwNTQsNTEwNTUsNTEwNTYsNTEwNTcsNTEwNTgsNTEwNTksNTEwNjIsNTEwNjMsNTEwNjUsNTEwNjYsNTEwNjcsNTEwNzEsNTEwNzIsNTEwNzMsNTEwNzQsNTEwNzgsNTEwODMsNTEwODQsNTEwODUsNTEwODcsNTEwOTAsNTEwOTEsNTEwOTMsNTEwOTcsNTEwOTksNTExMDAsNTExMDEsNTExMDIsNTExMDMsNTExMDYsNTExMTEsNTExMTIsNTExMTMsNTExMTQsNTExMTUsNTExMTgsNTExMTksNTExMjEsNTExMjIsNTExMjMsNTExMjUsNTExMjYsNTExMjcsNTExMjgsNTExMjksNTExMzAsNTExMzEsNTExMzQsNTExMzgsNTExMzksNTExNDAsNTExNDEsNTExNDIsNTExNDMsNTExNDYsNTExNDcsNTExNDksNTExNTEsNTExNTMsNTExNTQsNTExNTUsNTExNTYsNTExNTcsNTExNTgsNTExNTksNTExNjEsNTExNjIsNTExNjMsNTExNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExNjYsNTExNjcsNTExNjgsNTExNjksNTExNzAsNTExNzEsNTExNzMsNTExNzQsNTExNzUsNTExNzcsNTExNzgsNTExNzksNTExODEsNTExODIsNTExODMsNTExODQsNTExODUsNTExODYsNTExODcsNTExODgsNTExODksNTExOTAsNTExOTEsNTExOTIsNTExOTMsNTExOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExOTUsNTExOTYsNTExOTcsNTExOTgsNTExOTksNTEyMDIsNTEyMDMsNTEyMDUsNTEyMDYsNTEyMDcsNTEyMDksNTEyMTEsNTEyMTIsNTEyMTMsNTEyMTQsNTEyMTUsNTEyMTgsNTEyMjAsNTEyMjMsNTEyMjQsNTEyMjUsNTEyMjYsNTEyMjcsNTEyMzAsNTEyMzEsNTEyMzMsNTEyMzQsNTEyMzUsNTEyMzcsNTEyMzgsNTEyMzksNTEyNDAsNTEyNDEsNTEyNDIsNTEyNDMsNTEyNDYsNTEyNDgsNTEyNTAsNTEyNTEsNTEyNTIsNTEyNTMsNTEyNTQsNTEyNTUsNTEyNTcsNTEyNTgsNTEyNTksNTEyNjEsNTEyNjIsNTEyNjMsNTEyNjUsNTEyNjYsNTEyNjcsNTEyNjgsNTEyNjksNTEyNzAsNTEyNzEsNTEyNzQsNTEyNzUsNTEyNzgsNTEyNzksNTEyODAsNTEyODEsNTEyODIsNTEyODMsNTEyODUsNTEyODYsNTEyODcsNTEyODgsNTEyODksNTEyOTAsNTEyOTEsNTEyOTIsNTEyOTMsNTEyOTQsNTEyOTUsNTEyOTYsNTEyOTcsNTEyOTgsNTEyOTksNTEzMDAsNTEzMDEsNTEzMDIsNTEzMDMsNTEzMDQsNTEzMDUsNTEzMDYsNTEzMDcsNTEzMDgsNTEzMDksNTEzMTAsNTEzMTEsNTEzMTQsNTEzMTUsNTEzMTcsNTEzMTgsNTEzMTksNTEzMjEsNTEzMjMsNTEzMjQsNTEzMjUsNTEzMjYsNTEzMjcsNTEzMzAsNTEzMzIsNTEzMzYsNTEzMzcsNTEzMzgsNTEzNDIsNTEzNDMsNTEzNDQsNTEzNDUsNTEzNDYsNTEzNDcsNTEzNDksNTEzNTAsNTEzNTEsNTEzNTIsNTEzNTMsNTEzNTQsNTEzNTUsNTEzNTYsNTEzNTgsNTEzNjAsNTEzNjIsNTEzNjMsNTEzNjQsNTEzNjUsNTEzNjYsNTEzNjcsNTEzNjksNTEzNzAsNTEzNzEsNTEzNzIsNTEzNzMsNTEzNzQsNTEzNzUsNTEzNzYsNTEzNzcsNTEzNzgsNTEzNzksNTEzODAsNTEzODEsNTEzODIsNTEzODMsNTEzODQsNTEzODUsNTEzODYsNTEzODcsNTEzOTAsNTEzOTEsNTEzOTIsNTEzOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEzOTQsNTEzOTUsNTEzOTcsNTEzOTgsNTEzOTksNTE0MDEsNTE0MDIsNTE0MDMsNTE0MDUsNTE0MDYsNTE0MDcsNTE0MDgsNTE0MDksNTE0MTAsNTE0MTEsNTE0MTQsNTE0MTYsNTE0MTgsNTE0MTksNTE0MjAsNTE0MjEsNTE0MjIsNTE0MjMsNTE0MjYsNTE0MjcsNTE0MjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE0MzAsNTE0MzEsNTE0MzIsNTE0MzMsNTE0MzQsNTE0MzUsNTE0MzYsNTE0MzcsNTE0MzgsNTE0MzksNTE0NDAsNTE0NDEsNTE0NDIsNTE0NDMsNTE0NDQsNTE0NDYsNTE0NDcsNTE0NDgsNTE0NDksNTE0NTAsNTE0NTEsNTE0NTQsNTE0NTUsNTE0NTcsNTE0NTgsNTE0NTksNTE0NjMsNTE0NjQsNTE0NjUsNTE0NjYsNTE0NjcsNTE0NzAsMTIyODgsMTIyODksMTIyOTAsMTgzLDgyMjksODIzMCwxNjgsMTIyOTEsMTczLDgyMTMsODc0MSw2NTM0MCw4NzY0LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODgwMCw4ODA0LDg4MDUsODczNCw4NzU2LDE3Niw4MjQyLDgyNDMsODQ1MSw4NDkxLDY1NTA0LDY1NTA1LDY1NTA5LDk3OTQsOTc5Miw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDE2Nyw4MjUxLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODU5NCw4NTkyLDg1OTMsODU5NSw4NTk2LDEyMzA3LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsODc0Myw4NzQ0LDY1NTA2LDUxNDcyLDUxNDc0LDUxNDc1LDUxNDc2LDUxNDc3LDUxNDc4LDUxNDc5LDUxNDgxLDUxNDgyLDUxNDgzLDUxNDg0LDUxNDg1LDUxNDg2LDUxNDg3LDUxNDg4LDUxNDg5LDUxNDkwLDUxNDkxLDUxNDkyLDUxNDkzLDUxNDk0LDUxNDk1LDUxNDk2LDUxNDk3LDUxNDk4LDUxNDk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTAxLDUxNTAyLDUxNTAzLDUxNTA0LDUxNTA1LDUxNTA2LDUxNTA3LDUxNTA5LDUxNTEwLDUxNTExLDUxNTEyLDUxNTEzLDUxNTE0LDUxNTE1LDUxNTE2LDUxNTE3LDUxNTE4LDUxNTE5LDUxNTIwLDUxNTIxLDUxNTIyLDUxNTIzLDUxNTI0LDUxNTI1LDUxNTI2LDUxNTI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTI4LDUxNTI5LDUxNTMwLDUxNTMxLDUxNTMyLDUxNTMzLDUxNTM0LDUxNTM1LDUxNTM4LDUxNTM5LDUxNTQxLDUxNTQyLDUxNTQzLDUxNTQ1LDUxNTQ2LDUxNTQ3LDUxNTQ4LDUxNTQ5LDUxNTUwLDUxNTUxLDUxNTU0LDUxNTU2LDUxNTU3LDUxNTU4LDUxNTU5LDUxNTYwLDUxNTYxLDUxNTYyLDUxNTYzLDUxNTY1LDUxNTY2LDUxNTY3LDg2NTgsODY2MCw4NzA0LDg3MDcsMTgwLDY1Mzc0LDcxMSw3MjgsNzMzLDczMCw3MjksMTg0LDczMSwxNjEsMTkxLDcyMCw4NzUwLDg3MjEsODcxOSwxNjQsODQ1Nyw4MjQwLDk2NjUsOTY2NCw5NjU1LDk2NTQsOTgyOCw5ODI0LDk4MjUsOTgyOSw5ODMxLDk4MjcsODg1Nyw5NjcyLDk2MzUsOTY4MCw5NjgxLDk2MTgsOTYzNiw5NjM3LDk2NDAsOTYzOSw5NjM4LDk2NDEsOTgzMiw5NzQzLDk3NDIsOTc1Niw5NzU4LDE4Miw4MjI0LDgyMjUsODU5Nyw4NTk5LDg2MDEsODU5OCw4NjAwLDk4MzcsOTgzMyw5ODM0LDk4MzYsMTI5MjcsMTI4MjgsODQ3MCwxMzI1NSw4NDgyLDEzMjUwLDEzMjcyLDg0ODEsODM2NCwxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTY5LDUxNTcwLDUxNTcxLDUxNTczLDUxNTc0LDUxNTc1LDUxNTc2LDUxNTc3LDUxNTc4LDUxNTc5LDUxNTgxLDUxNTgyLDUxNTgzLDUxNTg0LDUxNTg1LDUxNTg2LDUxNTg3LDUxNTg4LDUxNTg5LDUxNTkwLDUxNTkxLDUxNTk0LDUxNTk1LDUxNTk3LDUxNTk4LDUxNTk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjAxLDUxNjAyLDUxNjAzLDUxNjA0LDUxNjA1LDUxNjA2LDUxNjA3LDUxNjEwLDUxNjEyLDUxNjE0LDUxNjE1LDUxNjE2LDUxNjE3LDUxNjE4LDUxNjE5LDUxNjIwLDUxNjIxLDUxNjIyLDUxNjIzLDUxNjI0LDUxNjI1LDUxNjI2LDUxNjI3LDUxNjI4LDUxNjI5LDUxNjMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjMxLDUxNjMyLDUxNjMzLDUxNjM0LDUxNjM1LDUxNjM2LDUxNjM3LDUxNjM4LDUxNjM5LDUxNjQwLDUxNjQxLDUxNjQyLDUxNjQzLDUxNjQ0LDUxNjQ1LDUxNjQ2LDUxNjQ3LDUxNjUwLDUxNjUxLDUxNjUzLDUxNjU0LDUxNjU3LDUxNjU5LDUxNjYwLDUxNjYxLDUxNjYyLDUxNjYzLDUxNjY2LDUxNjY4LDUxNjcxLDUxNjcyLDUxNjc1LDY1MjgxLDY1MjgyLDY1MjgzLDY1Mjg0LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1NTEwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDUxNjc4LDUxNjc5LDUxNjgxLDUxNjgzLDUxNjg1LDUxNjg2LDUxNjg4LDUxNjg5LDUxNjkwLDUxNjkxLDUxNjk0LDUxNjk4LDUxNjk5LDUxNzAwLDUxNzAxLDUxNzAyLDUxNzAzLDUxNzA2LDUxNzA3LDUxNzA5LDUxNzEwLDUxNzExLDUxNzEzLDUxNzE0LDUxNzE1LDUxNzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzE3LDUxNzE4LDUxNzE5LDUxNzIyLDUxNzI2LDUxNzI3LDUxNzI4LDUxNzI5LDUxNzMwLDUxNzMxLDUxNzMzLDUxNzM0LDUxNzM1LDUxNzM3LDUxNzM4LDUxNzM5LDUxNzQwLDUxNzQxLDUxNzQyLDUxNzQzLDUxNzQ0LDUxNzQ1LDUxNzQ2LDUxNzQ3LDUxNzQ4LDUxNzQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzUwLDUxNzUxLDUxNzUyLDUxNzU0LDUxNzU1LDUxNzU2LDUxNzU3LDUxNzU4LDUxNzU5LDUxNzYwLDUxNzYxLDUxNzYyLDUxNzYzLDUxNzY0LDUxNzY1LDUxNzY2LDUxNzY3LDUxNzY4LDUxNzY5LDUxNzcwLDUxNzcxLDUxNzcyLDUxNzczLDUxNzc0LDUxNzc1LDUxNzc2LDUxNzc3LDUxNzc4LDUxNzc5LDUxNzgwLDUxNzgxLDUxNzgyLDEyNTkzLDEyNTk0LDEyNTk1LDEyNTk2LDEyNTk3LDEyNTk4LDEyNTk5LDEyNjAwLDEyNjAxLDEyNjAyLDEyNjAzLDEyNjA0LDEyNjA1LDEyNjA2LDEyNjA3LDEyNjA4LDEyNjA5LDEyNjEwLDEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2LDEyNjE3LDEyNjE4LDEyNjE5LDEyNjIwLDEyNjIxLDEyNjIyLDEyNjIzLDEyNjI0LDEyNjI1LDEyNjI2LDEyNjI3LDEyNjI4LDEyNjI5LDEyNjMwLDEyNjMxLDEyNjMyLDEyNjMzLDEyNjM0LDEyNjM1LDEyNjM2LDEyNjM3LDEyNjM4LDEyNjM5LDEyNjQwLDEyNjQxLDEyNjQyLDEyNjQzLDEyNjQ0LDEyNjQ1LDEyNjQ2LDEyNjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2LDEyNjU3LDEyNjU4LDEyNjU5LDEyNjYwLDEyNjYxLDEyNjYyLDEyNjYzLDEyNjY0LDEyNjY1LDEyNjY2LDEyNjY3LDEyNjY4LDEyNjY5LDEyNjcwLDEyNjcxLDEyNjcyLDEyNjczLDEyNjc0LDEyNjc1LDEyNjc2LDEyNjc3LDEyNjc4LDEyNjc5LDEyNjgwLDEyNjgxLDEyNjgyLDEyNjgzLDEyNjg0LDEyNjg1LDEyNjg2LDUxNzgzLDUxNzg0LDUxNzg1LDUxNzg2LDUxNzg3LDUxNzkwLDUxNzkxLDUxNzkzLDUxNzk0LDUxNzk1LDUxNzk3LDUxNzk4LDUxNzk5LDUxODAwLDUxODAxLDUxODAyLDUxODAzLDUxODA2LDUxODEwLDUxODExLDUxODEyLDUxODEzLDUxODE0LDUxODE1LDUxODE3LDUxODE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODE5LDUxODIwLDUxODIxLDUxODIyLDUxODIzLDUxODI0LDUxODI1LDUxODI2LDUxODI3LDUxODI4LDUxODI5LDUxODMwLDUxODMxLDUxODMyLDUxODMzLDUxODM0LDUxODM1LDUxODM2LDUxODM4LDUxODM5LDUxODQwLDUxODQxLDUxODQyLDUxODQzLDUxODQ1LDUxODQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODQ3LDUxODQ4LDUxODQ5LDUxODUwLDUxODUxLDUxODUyLDUxODUzLDUxODU0LDUxODU1LDUxODU2LDUxODU3LDUxODU4LDUxODU5LDUxODYwLDUxODYxLDUxODYyLDUxODYzLDUxODY1LDUxODY2LDUxODY3LDUxODY4LDUxODY5LDUxODcwLDUxODcxLDUxODcyLDUxODczLDUxODc0LDUxODc1LDUxODc2LDUxODc3LDUxODc4LDUxODc5LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4ODAsNTE4ODEsNTE4ODIsNTE4ODMsNTE4ODQsNTE4ODUsNTE4ODYsNTE4ODcsNTE4ODgsNTE4ODksNTE4OTAsNTE4OTEsNTE4OTIsNTE4OTMsNTE4OTQsNTE4OTUsNTE4OTYsNTE4OTcsNTE4OTgsNTE4OTksNTE5MDIsNTE5MDMsNTE5MDUsNTE5MDYsNTE5MDcsNTE5MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5MTAsNTE5MTEsNTE5MTIsNTE5MTMsNTE5MTQsNTE5MTUsNTE5MTgsNTE5MjAsNTE5MjIsNTE5MjQsNTE5MjUsNTE5MjYsNTE5MjcsNTE5MzAsNTE5MzEsNTE5MzIsNTE5MzMsNTE5MzQsNTE5MzUsNTE5MzcsNTE5MzgsNTE5MzksNTE5NDAsNTE5NDEsNTE5NDIsNTE5NDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NDQsNTE5NDUsNTE5NDYsNTE5NDcsNTE5NDksNTE5NTAsNTE5NTEsNTE5NTIsNTE5NTMsNTE5NTQsNTE5NTUsNTE5NTcsNTE5NTgsNTE5NTksNTE5NjAsNTE5NjEsNTE5NjIsNTE5NjMsNTE5NjQsNTE5NjUsNTE5NjYsNTE5NjcsNTE5NjgsNTE5NjksNTE5NzAsNTE5NzEsNTE5NzIsNTE5NzMsNTE5NzQsNTE5NzUsNTE5NzcsNTE5NzgsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LDk0OTAsOTQ4OSw5NDk4LDk0OTcsOTQ5NCw5NDkzLDk0ODYsOTQ4NSw5NTAyLDk1MDMsOTUwNSw5NTA2LDk1MTAsOTUxMSw5NTEzLDk1MTQsOTUxNyw5NTE4LDk1MjEsOTUyMiw5NTI1LDk1MjYsOTUyOSw5NTMwLDk1MzMsOTUzNCw5NTM2LDk1MzcsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk3OSw1MTk4MCw1MTk4MSw1MTk4Miw1MTk4Myw1MTk4NSw1MTk4Niw1MTk4Nyw1MTk4OSw1MTk5MCw1MTk5MSw1MTk5Myw1MTk5NCw1MTk5NSw1MTk5Niw1MTk5Nyw1MTk5OCw1MTk5OSw1MjAwMiw1MjAwMyw1MjAwNCw1MjAwNSw1MjAwNiw1MjAwNyw1MjAwOCw1MjAwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAxMCw1MjAxMSw1MjAxMiw1MjAxMyw1MjAxNCw1MjAxNSw1MjAxNiw1MjAxNyw1MjAxOCw1MjAxOSw1MjAyMCw1MjAyMSw1MjAyMiw1MjAyMyw1MjAyNCw1MjAyNSw1MjAyNiw1MjAyNyw1MjAyOCw1MjAyOSw1MjAzMCw1MjAzMSw1MjAzMiw1MjAzNCw1MjAzNSw1MjAzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAzNyw1MjAzOCw1MjAzOSw1MjA0Miw1MjA0Myw1MjA0NSw1MjA0Niw1MjA0Nyw1MjA0OSw1MjA1MCw1MjA1MSw1MjA1Miw1MjA1Myw1MjA1NCw1MjA1NSw1MjA1OCw1MjA1OSw1MjA2MCw1MjA2Miw1MjA2Myw1MjA2NCw1MjA2NSw1MjA2Niw1MjA2Nyw1MjA2OSw1MjA3MCw1MjA3MSw1MjA3Miw1MjA3Myw1MjA3NCw1MjA3NSw1MjA3NiwxMzIwNSwxMzIwNiwxMzIwNyw4NDY3LDEzMjA4LDEzMjUyLDEzMjE5LDEzMjIwLDEzMjIxLDEzMjIyLDEzMjA5LDEzMjEwLDEzMjExLDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE1LDEzMjE2LDEzMjE3LDEzMjE4LDEzMjU4LDEzMTk3LDEzMTk4LDEzMTk5LDEzMjYzLDEzMTkyLDEzMTkzLDEzMjU2LDEzMjIzLDEzMjI0LDEzMjMyLDEzMjMzLDEzMjM0LDEzMjM1LDEzMjM2LDEzMjM3LDEzMjM4LDEzMjM5LDEzMjQwLDEzMjQxLDEzMTg0LDEzMTg1LDEzMTg2LDEzMTg3LDEzMTg4LDEzMjQyLDEzMjQzLDEzMjQ0LDEzMjQ1LDEzMjQ2LDEzMjQ3LDEzMjAwLDEzMjAxLDEzMjAyLDEzMjAzLDEzMjA0LDg0ODYsMTMyNDgsMTMyNDksMTMxOTQsMTMxOTUsMTMxOTYsMTMyNzAsMTMyNTMsMTMyMjksMTMyMzAsMTMyMzEsMTMyNzUsMTMyMjUsMTMyMjYsMTMyMjcsMTMyMjgsMTMyNzcsMTMyNjQsMTMyNjcsMTMyNTEsMTMyNTcsMTMyNzYsMTMyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwNzcsNTIwNzgsNTIwNzksNTIwODAsNTIwODEsNTIwODIsNTIwODMsNTIwODQsNTIwODUsNTIwODYsNTIwODcsNTIwOTAsNTIwOTEsNTIwOTIsNTIwOTMsNTIwOTQsNTIwOTUsNTIwOTYsNTIwOTcsNTIwOTgsNTIwOTksNTIxMDAsNTIxMDEsNTIxMDIsNTIxMDMsNTIxMDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMDUsNTIxMDYsNTIxMDcsNTIxMDgsNTIxMDksNTIxMTAsNTIxMTEsNTIxMTIsNTIxMTMsNTIxMTQsNTIxMTUsNTIxMTYsNTIxMTcsNTIxMTgsNTIxMTksNTIxMjAsNTIxMjEsNTIxMjIsNTIxMjMsNTIxMjUsNTIxMjYsNTIxMjcsNTIxMjgsNTIxMjksNTIxMzAsNTIxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMzIsNTIxMzMsNTIxMzQsNTIxMzUsNTIxMzYsNTIxMzcsNTIxMzgsNTIxMzksNTIxNDAsNTIxNDEsNTIxNDIsNTIxNDMsNTIxNDQsNTIxNDUsNTIxNDYsNTIxNDcsNTIxNDgsNTIxNDksNTIxNTAsNTIxNTEsNTIxNTMsNTIxNTQsNTIxNTUsNTIxNTYsNTIxNTcsNTIxNTgsNTIxNTksNTIxNjAsNTIxNjEsNTIxNjIsNTIxNjMsNTIxNjQsMTk4LDIwOCwxNzAsMjk0LG51bGwsMzA2LG51bGwsMzE5LDMyMSwyMTYsMzM4LDE4NiwyMjIsMzU4LDMzMCxudWxsLDEyODk2LDEyODk3LDEyODk4LDEyODk5LDEyOTAwLDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEyOTA2LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLDEyOTExLDEyOTEyLDEyOTEzLDEyOTE0LDEyOTE1LDEyOTE2LDEyOTE3LDEyOTE4LDEyOTE5LDEyOTIwLDEyOTIxLDEyOTIyLDEyOTIzLDk0MjQsOTQyNSw5NDI2LDk0MjcsOTQyOCw5NDI5LDk0MzAsOTQzMSw5NDMyLDk0MzMsOTQzNCw5NDM1LDk0MzYsOTQzNyw5NDM4LDk0MzksOTQ0MCw5NDQxLDk0NDIsOTQ0Myw5NDQ0LDk0NDUsOTQ0Niw5NDQ3LDk0NDgsOTQ0OSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiwxODksODUzMSw4NTMyLDE4OCwxOTAsODUzOSw4NTQwLDg1NDEsODU0Miw1MjE2NSw1MjE2Niw1MjE2Nyw1MjE2OCw1MjE2OSw1MjE3MCw1MjE3MSw1MjE3Miw1MjE3Myw1MjE3NCw1MjE3NSw1MjE3Niw1MjE3Nyw1MjE3OCw1MjE3OSw1MjE4MSw1MjE4Miw1MjE4Myw1MjE4NCw1MjE4NSw1MjE4Niw1MjE4Nyw1MjE4OCw1MjE4OSw1MjE5MCw1MjE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjE5Miw1MjE5Myw1MjE5NCw1MjE5NSw1MjE5Nyw1MjE5OCw1MjIwMCw1MjIwMiw1MjIwMyw1MjIwNCw1MjIwNSw1MjIwNiw1MjIwNyw1MjIwOCw1MjIwOSw1MjIxMCw1MjIxMSw1MjIxMiw1MjIxMyw1MjIxNCw1MjIxNSw1MjIxNiw1MjIxNyw1MjIxOCw1MjIxOSw1MjIyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjIyMSw1MjIyMiw1MjIyMyw1MjIyNCw1MjIyNSw1MjIyNiw1MjIyNyw1MjIyOCw1MjIyOSw1MjIzMCw1MjIzMSw1MjIzMiw1MjIzMyw1MjIzNCw1MjIzNSw1MjIzOCw1MjIzOSw1MjI0MSw1MjI0Miw1MjI0Myw1MjI0NSw1MjI0Niw1MjI0Nyw1MjI0OCw1MjI0OSw1MjI1MCw1MjI1MSw1MjI1NCw1MjI1NSw1MjI1Niw1MjI1OSw1MjI2MCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIwLDMyMiwyNDgsMzM5LDIyMywyNTQsMzU5LDMzMSwzMjksMTI4MDAsMTI4MDEsMTI4MDIsMTI4MDMsMTI4MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgsMTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMsMTI4MTQsMTI4MTUsMTI4MTYsMTI4MTcsMTI4MTgsMTI4MTksMTI4MjAsMTI4MjEsMTI4MjIsMTI4MjMsMTI4MjQsMTI4MjUsMTI4MjYsMTI4MjcsOTM3Miw5MzczLDkzNzQsOTM3NSw5Mzc2LDkzNzcsOTM3OCw5Mzc5LDkzODAsOTM4MSw5MzgyLDkzODMsOTM4NCw5Mzg1LDkzODYsOTM4Nyw5Mzg4LDkzODksOTM5MCw5MzkxLDkzOTIsOTM5Myw5Mzk0LDkzOTUsOTM5Niw5Mzk3LDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDE4NSwxNzgsMTc5LDgzMDgsODMxOSw4MzIxLDgzMjIsODMyMyw4MzI0LDUyMjYxLDUyMjYyLDUyMjY2LDUyMjY3LDUyMjY5LDUyMjcxLDUyMjczLDUyMjc0LDUyMjc1LDUyMjc2LDUyMjc3LDUyMjc4LDUyMjc5LDUyMjgyLDUyMjg3LDUyMjg4LDUyMjg5LDUyMjkwLDUyMjkxLDUyMjk0LDUyMjk1LDUyMjk3LDUyMjk4LDUyMjk5LDUyMzAxLDUyMzAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzAzLDUyMzA0LDUyMzA1LDUyMzA2LDUyMzA3LDUyMzEwLDUyMzE0LDUyMzE1LDUyMzE2LDUyMzE3LDUyMzE4LDUyMzE5LDUyMzIxLDUyMzIyLDUyMzIzLDUyMzI1LDUyMzI3LDUyMzI5LDUyMzMwLDUyMzMxLDUyMzMyLDUyMzMzLDUyMzM0LDUyMzM1LDUyMzM3LDUyMzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzM5LDUyMzQwLDUyMzQyLDUyMzQzLDUyMzQ0LDUyMzQ1LDUyMzQ2LDUyMzQ3LDUyMzQ4LDUyMzQ5LDUyMzUwLDUyMzUxLDUyMzUyLDUyMzUzLDUyMzU0LDUyMzU1LDUyMzU2LDUyMzU3LDUyMzU4LDUyMzU5LDUyMzYwLDUyMzYxLDUyMzYyLDUyMzYzLDUyMzY0LDUyMzY1LDUyMzY2LDUyMzY3LDUyMzY4LDUyMzY5LDUyMzcwLDUyMzcxLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjM3Miw1MjM3Myw1MjM3NCw1MjM3NSw1MjM3OCw1MjM3OSw1MjM4MSw1MjM4Miw1MjM4Myw1MjM4NSw1MjM4Niw1MjM4Nyw1MjM4OCw1MjM4OSw1MjM5MCw1MjM5MSw1MjM5NCw1MjM5OCw1MjM5OSw1MjQwMCw1MjQwMSw1MjQwMiw1MjQwMyw1MjQwNiw1MjQwNyw1MjQwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQxMCw1MjQxMSw1MjQxMyw1MjQxNCw1MjQxNSw1MjQxNiw1MjQxNyw1MjQxOCw1MjQxOSw1MjQyMiw1MjQyNCw1MjQyNiw1MjQyNyw1MjQyOCw1MjQyOSw1MjQzMCw1MjQzMSw1MjQzMyw1MjQzNCw1MjQzNSw1MjQzNyw1MjQzOCw1MjQzOSw1MjQ0MCw1MjQ0MSw1MjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ0Myw1MjQ0NCw1MjQ0NSw1MjQ0Niw1MjQ0Nyw1MjQ0OCw1MjQ0OSw1MjQ1MCw1MjQ1MSw1MjQ1Myw1MjQ1NCw1MjQ1NSw1MjQ1Niw1MjQ1Nyw1MjQ1OCw1MjQ1OSw1MjQ2MSw1MjQ2Miw1MjQ2Myw1MjQ2NSw1MjQ2Niw1MjQ2Nyw1MjQ2OCw1MjQ2OSw1MjQ3MCw1MjQ3MSw1MjQ3Miw1MjQ3Myw1MjQ3NCw1MjQ3NSw1MjQ3Niw1MjQ3NywxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NzgsNTI0NzksNTI0ODAsNTI0ODIsNTI0ODMsNTI0ODQsNTI0ODUsNTI0ODYsNTI0ODcsNTI0OTAsNTI0OTEsNTI0OTMsNTI0OTQsNTI0OTUsNTI0OTcsNTI0OTgsNTI0OTksNTI1MDAsNTI1MDEsNTI1MDIsNTI1MDMsNTI1MDYsNTI1MDgsNTI1MTAsNTI1MTEsNTI1MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1MTMsNTI1MTQsNTI1MTUsNTI1MTcsNTI1MTgsNTI1MTksNTI1MjEsNTI1MjIsNTI1MjMsNTI1MjUsNTI1MjYsNTI1MjcsNTI1MjgsNTI1MjksNTI1MzAsNTI1MzEsNTI1MzIsNTI1MzMsNTI1MzQsNTI1MzUsNTI1MzYsNTI1MzgsNTI1MzksNTI1NDAsNTI1NDEsNTI1NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NDMsNTI1NDQsNTI1NDUsNTI1NDYsNTI1NDcsNTI1NDgsNTI1NDksNTI1NTAsNTI1NTEsNTI1NTIsNTI1NTMsNTI1NTQsNTI1NTUsNTI1NTYsNTI1NTcsNTI1NTgsNTI1NTksNTI1NjAsNTI1NjEsNTI1NjIsNTI1NjMsNTI1NjQsNTI1NjUsNTI1NjYsNTI1NjcsNTI1NjgsNTI1NjksNTI1NzAsNTI1NzEsNTI1NzMsNTI1NzQsNTI1NzUsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU3Nyw1MjU3OCw1MjU3OSw1MjU4MSw1MjU4Miw1MjU4Myw1MjU4NCw1MjU4NSw1MjU4Niw1MjU4Nyw1MjU5MCw1MjU5Miw1MjU5NCw1MjU5NSw1MjU5Niw1MjU5Nyw1MjU5OCw1MjU5OSw1MjYwMSw1MjYwMiw1MjYwMyw1MjYwNCw1MjYwNSw1MjYwNiw1MjYwNyw1MjYwOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjYwOSw1MjYxMCw1MjYxMSw1MjYxMiw1MjYxMyw1MjYxNCw1MjYxNSw1MjYxNyw1MjYxOCw1MjYxOSw1MjYyMCw1MjYyMSw1MjYyMiw1MjYyMyw1MjYyNCw1MjYyNSw1MjYyNiw1MjYyNyw1MjYzMCw1MjYzMSw1MjYzMyw1MjYzNCw1MjYzNSw1MjYzNyw1MjYzOCw1MjYzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY0MCw1MjY0MSw1MjY0Miw1MjY0Myw1MjY0Niw1MjY0OCw1MjY1MCw1MjY1MSw1MjY1Miw1MjY1Myw1MjY1NCw1MjY1NSw1MjY1Nyw1MjY1OCw1MjY1OSw1MjY2MCw1MjY2MSw1MjY2Miw1MjY2Myw1MjY2NCw1MjY2NSw1MjY2Niw1MjY2Nyw1MjY2OCw1MjY2OSw1MjY3MCw1MjY3MSw1MjY3Miw1MjY3Myw1MjY3NCw1MjY3NSw1MjY3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjc4LDUyNjc5LDUyNjgwLDUyNjgxLDUyNjgyLDUyNjgzLDUyNjg1LDUyNjg2LDUyNjg3LDUyNjg5LDUyNjkwLDUyNjkxLDUyNjkyLDUyNjkzLDUyNjk0LDUyNjk1LDUyNjk2LDUyNjk3LDUyNjk4LDUyNjk5LDUyNzAwLDUyNzAxLDUyNzAyLDUyNzAzLDUyNzA0LDUyNzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzA2LDUyNzA3LDUyNzA4LDUyNzA5LDUyNzEwLDUyNzExLDUyNzEzLDUyNzE0LDUyNzE1LDUyNzE3LDUyNzE4LDUyNzE5LDUyNzIxLDUyNzIyLDUyNzIzLDUyNzI0LDUyNzI1LDUyNzI2LDUyNzI3LDUyNzMwLDUyNzMyLDUyNzM0LDUyNzM1LDUyNzM2LDUyNzM3LDUyNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzM5LDUyNzQxLDUyNzQyLDUyNzQzLDUyNzQ1LDUyNzQ2LDUyNzQ3LDUyNzQ5LDUyNzUwLDUyNzUxLDUyNzUyLDUyNzUzLDUyNzU0LDUyNzU1LDUyNzU3LDUyNzU4LDUyNzU5LDUyNzYwLDUyNzYyLDUyNzYzLDUyNzY0LDUyNzY1LDUyNzY2LDUyNzY3LDUyNzcwLDUyNzcxLDUyNzczLDUyNzc0LDUyNzc1LDUyNzc3LDUyNzc4LDUyNzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3ODAsNTI3ODEsNTI3ODIsNTI3ODMsNTI3ODYsNTI3ODgsNTI3OTAsNTI3OTEsNTI3OTIsNTI3OTMsNTI3OTQsNTI3OTUsNTI3OTYsNTI3OTcsNTI3OTgsNTI3OTksNTI4MDAsNTI4MDEsNTI4MDIsNTI4MDMsNTI4MDQsNTI4MDUsNTI4MDYsNTI4MDcsNTI4MDgsNTI4MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4MTAsNTI4MTEsNTI4MTIsNTI4MTMsNTI4MTQsNTI4MTUsNTI4MTYsNTI4MTcsNTI4MTgsNTI4MTksNTI4MjAsNTI4MjEsNTI4MjIsNTI4MjMsNTI4MjYsNTI4MjcsNTI4MjksNTI4MzAsNTI4MzQsNTI4MzUsNTI4MzYsNTI4MzcsNTI4MzgsNTI4MzksNTI4NDIsNTI4NDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4NDYsNTI4NDcsNTI4NDgsNTI4NDksNTI4NTAsNTI4NTEsNTI4NTQsNTI4NTUsNTI4NTcsNTI4NTgsNTI4NTksNTI4NjEsNTI4NjIsNTI4NjMsNTI4NjQsNTI4NjUsNTI4NjYsNTI4NjcsNTI4NzAsNTI4NzIsNTI4NzQsNTI4NzUsNTI4NzYsNTI4NzcsNTI4NzgsNTI4NzksNTI4ODIsNTI4ODMsNTI4ODUsNTI4ODYsNTI4ODcsNTI4ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg5MCw1Mjg5MSw1Mjg5Miw1Mjg5Myw1Mjg5NCw1Mjg5NSw1Mjg5OCw1MjkwMiw1MjkwMyw1MjkwNCw1MjkwNSw1MjkwNiw1MjkwNyw1MjkxMCw1MjkxMSw1MjkxMiw1MjkxMyw1MjkxNCw1MjkxNSw1MjkxNiw1MjkxNyw1MjkxOCw1MjkxOSw1MjkyMCw1MjkyMSw1MjkyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjkyMyw1MjkyNCw1MjkyNSw1MjkyNiw1MjkyNyw1MjkyOCw1MjkzMCw1MjkzMSw1MjkzMiw1MjkzMyw1MjkzNCw1MjkzNSw1MjkzNiw1MjkzNyw1MjkzOCw1MjkzOSw1Mjk0MCw1Mjk0MSw1Mjk0Miw1Mjk0Myw1Mjk0NCw1Mjk0NSw1Mjk0Niw1Mjk0Nyw1Mjk0OCw1Mjk0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjk1MCw1Mjk1MSw1Mjk1Miw1Mjk1Myw1Mjk1NCw1Mjk1NSw1Mjk1Niw1Mjk1Nyw1Mjk1OCw1Mjk1OSw1Mjk2MCw1Mjk2MSw1Mjk2Miw1Mjk2Myw1Mjk2Niw1Mjk2Nyw1Mjk2OSw1Mjk3MCw1Mjk3Myw1Mjk3NCw1Mjk3NSw1Mjk3Niw1Mjk3Nyw1Mjk3OCw1Mjk3OSw1Mjk4Miw1Mjk4Niw1Mjk4Nyw1Mjk4OCw1Mjk4OSw1Mjk5MCw1Mjk5MSw0NDAzMiw0NDAzMyw0NDAzNiw0NDAzOSw0NDA0MCw0NDA0MSw0NDA0Miw0NDA0OCw0NDA0OSw0NDA1MCw0NDA1MSw0NDA1Miw0NDA1Myw0NDA1NCw0NDA1NSw0NDA1Nyw0NDA1OCw0NDA1OSw0NDA2MCw0NDA2MSw0NDA2NCw0NDA2OCw0NDA3Niw0NDA3Nyw0NDA3OSw0NDA4MCw0NDA4MSw0NDA4OCw0NDA4OSw0NDA5Miw0NDA5Niw0NDEwNyw0NDEwOSw0NDExNiw0NDEyMCw0NDEyNCw0NDE0NCw0NDE0NSw0NDE0OCw0NDE1MSw0NDE1Miw0NDE1NCw0NDE2MCw0NDE2MSw0NDE2Myw0NDE2NCw0NDE2NSw0NDE2Niw0NDE2OSw0NDE3MCw0NDE3MSw0NDE3Miw0NDE3Niw0NDE4MCw0NDE4OCw0NDE4OSw0NDE5MSw0NDE5Miw0NDE5Myw0NDIwMCw0NDIwMSw0NDIwMiw0NDIwNCw0NDIwNyw0NDIwOCw0NDIxNiw0NDIxNyw0NDIxOSw0NDIyMCw0NDIyMSw0NDIyNSw0NDIyOCw0NDIzMiw0NDIzNiw0NDI0NSw0NDI0Nyw0NDI1Niw0NDI1Nyw0NDI2MCw0NDI2Myw0NDI2NCw0NDI2Niw0NDI2OCw0NDI3MSw0NDI3Miw0NDI3Myw0NDI3NSw0NDI3Nyw0NDI3OCw0NDI4NCw0NDI4NSw0NDI4OCw0NDI5Miw0NDI5NCw1Mjk5NCw1Mjk5NSw1Mjk5Nyw1Mjk5OCw1Mjk5OSw1MzAwMSw1MzAwMiw1MzAwMyw1MzAwNCw1MzAwNSw1MzAwNiw1MzAwNyw1MzAxMCw1MzAxMiw1MzAxNCw1MzAxNSw1MzAxNiw1MzAxNyw1MzAxOCw1MzAxOSw1MzAyMSw1MzAyMiw1MzAyMyw1MzAyNSw1MzAyNiw1MzAyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzAyOSw1MzAzMCw1MzAzMSw1MzAzMiw1MzAzMyw1MzAzNCw1MzAzNSw1MzAzOCw1MzA0Miw1MzA0Myw1MzA0NCw1MzA0NSw1MzA0Niw1MzA0Nyw1MzA0OSw1MzA1MCw1MzA1MSw1MzA1Miw1MzA1Myw1MzA1NCw1MzA1NSw1MzA1Niw1MzA1Nyw1MzA1OCw1MzA1OSw1MzA2MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzA2MSw1MzA2Miw1MzA2Myw1MzA2NCw1MzA2NSw1MzA2Niw1MzA2Nyw1MzA2OCw1MzA2OSw1MzA3MCw1MzA3MSw1MzA3Miw1MzA3Myw1MzA3NCw1MzA3NSw1MzA3OCw1MzA3OSw1MzA4MSw1MzA4Miw1MzA4Myw1MzA4NSw1MzA4Niw1MzA4Nyw1MzA4OCw1MzA4OSw1MzA5MCw1MzA5MSw1MzA5NCw1MzA5Niw1MzA5OCw1MzA5OSw1MzEwMCw0NDMwMCw0NDMwMSw0NDMwMyw0NDMwNSw0NDMxMiw0NDMxNiw0NDMyMCw0NDMyOSw0NDMzMiw0NDMzMyw0NDM0MCw0NDM0MSw0NDM0NCw0NDM0OCw0NDM1Niw0NDM1Nyw0NDM1OSw0NDM2MSw0NDM2OCw0NDM3Miw0NDM3Niw0NDM4NSw0NDM4Nyw0NDM5Niw0NDM5Nyw0NDQwMCw0NDQwMyw0NDQwNCw0NDQwNSw0NDQwNiw0NDQxMSw0NDQxMiw0NDQxMyw0NDQxNSw0NDQxNyw0NDQxOCw0NDQyNCw0NDQyNSw0NDQyOCw0NDQzMiw0NDQ0NCw0NDQ0NSw0NDQ1Miw0NDQ3MSw0NDQ4MCw0NDQ4MSw0NDQ4NCw0NDQ4OCw0NDQ5Niw0NDQ5Nyw0NDQ5OSw0NDUwOCw0NDUxMiw0NDUxNiw0NDUzNiw0NDUzNyw0NDU0MCw0NDU0Myw0NDU0NCw0NDU0NSw0NDU1Miw0NDU1Myw0NDU1NSw0NDU1Nyw0NDU2NCw0NDU5Miw0NDU5Myw0NDU5Niw0NDU5OSw0NDYwMCw0NDYwMiw0NDYwOCw0NDYwOSw0NDYxMSw0NDYxMyw0NDYxNCw0NDYxOCw0NDYyMCw0NDYyMSw0NDYyMiw0NDYyNCw0NDYyOCw0NDYzMCw0NDYzNiw0NDYzNyw0NDYzOSw0NDY0MCw0NDY0MSw0NDY0NSw0NDY0OCw0NDY0OSw0NDY1Miw0NDY1Niw0NDY2NCw1MzEwMSw1MzEwMiw1MzEwMyw1MzEwNiw1MzEwNyw1MzEwOSw1MzExMCw1MzExMSw1MzExMyw1MzExNCw1MzExNSw1MzExNiw1MzExNyw1MzExOCw1MzExOSw1MzEyMSw1MzEyMiw1MzEyMyw1MzEyNCw1MzEyNiw1MzEyNyw1MzEyOCw1MzEyOSw1MzEzMCw1MzEzMSw1MzEzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzEzNCw1MzEzNSw1MzEzNiw1MzEzNyw1MzEzOCw1MzEzOSw1MzE0MCw1MzE0MSw1MzE0Miw1MzE0Myw1MzE0NCw1MzE0NSw1MzE0Niw1MzE0Nyw1MzE0OCw1MzE0OSw1MzE1MCw1MzE1MSw1MzE1Miw1MzE1NCw1MzE1NSw1MzE1Niw1MzE1Nyw1MzE1OCw1MzE1OSw1MzE2MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzE2Miw1MzE2Myw1MzE2NCw1MzE2NSw1MzE2Niw1MzE2Nyw1MzE2OSw1MzE3MCw1MzE3MSw1MzE3Miw1MzE3Myw1MzE3NCw1MzE3NSw1MzE3Niw1MzE3Nyw1MzE3OCw1MzE3OSw1MzE4MCw1MzE4MSw1MzE4Miw1MzE4Myw1MzE4NCw1MzE4NSw1MzE4Niw1MzE4Nyw1MzE4OSw1MzE5MCw1MzE5MSw1MzE5Miw1MzE5Myw1MzE5NCw1MzE5NSw0NDY2NSw0NDY2Nyw0NDY2OCw0NDY2OSw0NDY3Niw0NDY3Nyw0NDY4NCw0NDczMiw0NDczMyw0NDczNCw0NDczNiw0NDc0MCw0NDc0OCw0NDc0OSw0NDc1MSw0NDc1Miw0NDc1Myw0NDc2MCw0NDc2MSw0NDc2NCw0NDc3Niw0NDc3OSw0NDc4MSw0NDc4OCw0NDc5Miw0NDc5Niw0NDgwNyw0NDgwOCw0NDgxMyw0NDgxNiw0NDg0NCw0NDg0NSw0NDg0OCw0NDg1MCw0NDg1Miw0NDg2MCw0NDg2MSw0NDg2Myw0NDg2NSw0NDg2Niw0NDg2Nyw0NDg3Miw0NDg3Myw0NDg4MCw0NDg5Miw0NDg5Myw0NDkwMCw0NDkwMSw0NDkyMSw0NDkyOCw0NDkzMiw0NDkzNiw0NDk0NCw0NDk0NSw0NDk0OSw0NDk1Niw0NDk4NCw0NDk4NSw0NDk4OCw0NDk5Miw0NDk5OSw0NTAwMCw0NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEyNSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEzOSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIyOSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIxMCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIyNSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMzOSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQwOCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMwOSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMyNCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMzMyw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcyOSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTkyNSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQwMSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQwOCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkzNiw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAyMCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAzNiw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMwNCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMxNyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUzMCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUzNiw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYwNCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYxMCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQwNSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYyMiw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYyNyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYzNSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1MzcwOSw1MzcxMCw1MzcxMSw0NzAwMCw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MjAwMCw1MjAwMSw1MjAzMyw1MjA0MCw1MjA0MSw1MjA0NCw1MjA0OCw1MjA1Niw1MjA1Nyw1MjA2MSw1MjA2OCw1MjA4OCw1MjA4OSw1MjEyNCw1MjE1Miw1MjE4MCw1MjE5Niw1MjE5OSw1MjIwMSw1MjIzNiw1MjIzNyw1MjI0MCw1MjI0NCw1MjI1Miw1MjI1Myw1MjI1Nyw1MjI1OCw1MjI2Myw1MjI2NCw1MjI2NSw1MjI2OCw1MjI3MCw1MjI3Miw1MjI4MCw1MjI4MSw1MjI4Myw1NDg0NSw1NDg0Niw1NDg0Nyw1NDg0OSw1NDg1MCw1NDg1MSw1NDg1Miw1NDg1NCw1NDg1NSw1NDg1OCw1NDg2MCw1NDg2Miw1NDg2Myw1NDg2NCw1NDg2Niw1NDg2Nyw1NDg3MCw1NDg3MSw1NDg3Myw1NDg3NCw1NDg3NSw1NDg3Nyw1NDg3OCw1NDg3OSw1NDg4MCw1NDg4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDg4Miw1NDg4Myw1NDg4NCw1NDg4NSw1NDg4Niw1NDg4OCw1NDg5MCw1NDg5MSw1NDg5Miw1NDg5Myw1NDg5NCw1NDg5NSw1NDg5OCw1NDg5OSw1NDkwMSw1NDkwMiw1NDkwMyw1NDkwNCw1NDkwNSw1NDkwNiw1NDkwNyw1NDkwOCw1NDkwOSw1NDkxMCw1NDkxMSw1NDkxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDkxMyw1NDkxNCw1NDkxNiw1NDkxOCw1NDkxOSw1NDkyMCw1NDkyMSw1NDkyMiw1NDkyMyw1NDkyNiw1NDkyNyw1NDkyOSw1NDkzMCw1NDkzMSw1NDkzMyw1NDkzNCw1NDkzNSw1NDkzNiw1NDkzNyw1NDkzOCw1NDkzOSw1NDk0MCw1NDk0Miw1NDk0NCw1NDk0Niw1NDk0Nyw1NDk0OCw1NDk0OSw1NDk1MCw1NDk1MSw1NDk1Myw1NDk1NCw1MjI4NCw1MjI4NSw1MjI4Niw1MjI5Miw1MjI5Myw1MjI5Niw1MjMwMCw1MjMwOCw1MjMwOSw1MjMxMSw1MjMxMiw1MjMxMyw1MjMyMCw1MjMyNCw1MjMyNiw1MjMyOCw1MjMzNiw1MjM0MSw1MjM3Niw1MjM3Nyw1MjM4MCw1MjM4NCw1MjM5Miw1MjM5Myw1MjM5NSw1MjM5Niw1MjM5Nyw1MjQwNCw1MjQwNSw1MjQwOCw1MjQxMiw1MjQyMCw1MjQyMSw1MjQyMyw1MjQyNSw1MjQzMiw1MjQzNiw1MjQ1Miw1MjQ2MCw1MjQ2NCw1MjQ4MSw1MjQ4OCw1MjQ4OSw1MjQ5Miw1MjQ5Niw1MjUwNCw1MjUwNSw1MjUwNyw1MjUwOSw1MjUxNiw1MjUyMCw1MjUyNCw1MjUzNyw1MjU3Miw1MjU3Niw1MjU4MCw1MjU4OCw1MjU4OSw1MjU5MSw1MjU5Myw1MjYwMCw1MjYxNiw1MjYyOCw1MjYyOSw1MjYzMiw1MjYzNiw1MjY0NCw1MjY0NSw1MjY0Nyw1MjY0OSw1MjY1Niw1MjY3Niw1MjY4NCw1MjY4OCw1MjcxMiw1MjcxNiw1MjcyMCw1MjcyOCw1MjcyOSw1MjczMSw1MjczMyw1Mjc0MCw1Mjc0NCw1Mjc0OCw1Mjc1Niw1Mjc2MSw1Mjc2OCw1Mjc2OSw1Mjc3Miw1Mjc3Niw1Mjc4NCw1Mjc4NSw1Mjc4Nyw1Mjc4OSw1NDk1NSw1NDk1Nyw1NDk1OCw1NDk1OSw1NDk2MSw1NDk2Miw1NDk2Myw1NDk2NCw1NDk2NSw1NDk2Niw1NDk2Nyw1NDk2OCw1NDk3MCw1NDk3Miw1NDk3Myw1NDk3NCw1NDk3NSw1NDk3Niw1NDk3Nyw1NDk3OCw1NDk3OSw1NDk4Miw1NDk4Myw1NDk4NSw1NDk4Niw1NDk4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDk4OSw1NDk5MCw1NDk5MSw1NDk5Miw1NDk5NCw1NDk5NSw1NDk5Nyw1NDk5OCw1NTAwMCw1NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAyOCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAzNCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1MjkwOSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5Miw1Mjk5Myw1Mjk5Niw1MzAwMCw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NDAwMCw1NDAwMSw1NDAwNCw1NDAwOCw1NDAxNiw1NDAxNyw1NDAxOSw1NDAyMSw1NDAyOCw1NDAyOSw1NDAzMCw1NDAzMiw1NDAzNiw1NDAzOCw1NDA0NCw1NDA0NSw1NDA0Nyw1NDA0OCw1NDA0OSw1NDA1Myw1NDA1Niw1NDA1Nyw1NDA2MCw1NDA2NCw1NDA3Miw1NDA3Myw1NDA3NSw1NDA3Niw1NDA3Nyw1NDA4NCw1NDA4NSw1NDE0MCw1NDE0MSw1NDE0NCw1NDE0OCw1NDE1Niw1NDE1Nyw1NDE1OSw1NDE2MCw1NDE2MSw1NDE2OCw1NDE2OSw1NDE3Miw1NDE3Niw1NDE4NCw1NDE4NSw1NDE4Nyw1NDE4OSw1NDE5Niw1NDIwMCw1NDIwNCw1NDIxMiw1NDIxMyw1NDIxNiw1NDIxNyw1NDIyNCw1NDIzMiw1NDI0MSw1NDI0Myw1NDI1Miw1NDI1Myw1NDI1Niw1NDI2MCw1NDI2OCw1NDI2OSw1NDI3MSw1NDI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI4MCw1NDMwMSw1NDMzNiw1NDM0MCw1NDM2NCw1NDM2OCw1NDM3Miw1NDM4MSw1NDM4Myw1NDM5Miw1NDM5Myw1NDM5Niw1NDM5OSw1NDQwMCw1NDQwMiw1NDQwOCw1NDQwOSw1NDQxMSw1NDQxMyw1NDQyMCw1NDQ0MSw1NDQ3Niw1NDQ4MCw1NDQ4NCw1NDQ5Miw1NDQ5NSw1NDUwNCw1NDUwOCw1NDUxMiw1NDUyMCw1NDUyMyw1NDUyNSw1NDUzMiw1NDUzNiw1NDU0MCw1NDU0OCw1NDU0OSw1NDU1MSw1NDU4OCw1NDU4OSw1NDU5Miw1NDU5Niw1NDYwNCw1NDYwNSw1NDYwNyw1NDYwOSw1NDYxNiw1NDYxNyw1NDYyMCw1NDYyNCw1NDYyOSw1NDYzMiw1NDYzMyw1NDYzNSw1NDYzNyw1NDY0NCw1NDY0NSw1NDY0OCw1NDY1Miw1NDY2MCw1NDY2MSw1NDY2Myw1NDY2NCw1NDY2NSw1NDY3Miw1NDY5Myw1NDcyOCw1NDcyOSw1NDczMiw1NDczNiw1NDczOCw1NDc0NCw1NDc0NSw1NDc0Nyw1NDc0OSw1NDc1Niw1NDc1Nyw1NDc2MCw1NDc2NCw1NDc3Miw1NDc3Myw1NDc3NSw1NDc3Nyw1NDc4NCw1NDc4NSw1NDc4OCw1NDc5Miw1NDgwMCw1NDgwMSw1NDgwMyw1NDgwNCw1NDgwNSw1NDgxMiw1NDgxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgyMCw1NDgyOSw1NDg0MCw1NDg0MSw1NDg0NCw1NDg0OCw1NDg1Myw1NDg1Niw1NDg1Nyw1NDg1OSw1NDg2MSw1NDg2NSw1NDg2OCw1NDg2OSw1NDg3Miw1NDg3Niw1NDg4Nyw1NDg4OSw1NDg5Niw1NDg5Nyw1NDkwMCw1NDkxNSw1NDkxNyw1NDkyNCw1NDkyNSw1NDkyOCw1NDkzMiw1NDk0MSw1NDk0Myw1NDk0NSw1NDk1Miw1NDk1Niw1NDk2MCw1NDk2OSw1NDk3MSw1NDk4MCw1NDk4MSw1NDk4NCw1NDk4OCw1NDk5Myw1NDk5Niw1NDk5OSw1NTAwMSw1NTAwOCw1NTAxMiw1NTAxNiw1NTAyNCw1NTAyOSw1NTAzNiw1NTAzNyw1NTA0MCw1NTA0NCw1NTA1Nyw1NTA2NCw1NTA2NSw1NTA2OCw1NTA3Miw1NTA4MCw1NTA4MSw1NTA4Myw1NTA4NSw1NTA5Miw1NTA5Myw1NTA5Niw1NTEwMCw1NTEwOCw1NTExMSw1NTExMyw1NTEyMCw1NTEyMSw1NTEyNCw1NTEyNiw1NTEyNyw1NTEyOCw1NTEyOSw1NTEzNiw1NTEzNyw1NTEzOSw1NTE0MSw1NTE0NSw1NTE0OCw1NTE1Miw1NTE1Niw1NTE2NCw1NTE2NSw1NTE2OSw1NTE3Niw1NTE3Nyw1NTE4MCw1NTE4NCw1NTE5Miw1NTE5Myw1NTE5NSw1NTE5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMjg1LDIwMzM5LDIwNTUxLDIwNzI5LDIxMTUyLDIxNDg3LDIxNjIxLDIxNzMzLDIyMDI1LDIzMjMzLDIzNDc4LDI2MjQ3LDI2NTUwLDI2NTUxLDI2NjA3LDI3NDY4LDI5NjM0LDMwMTQ2LDMxMjkyLDMzNDk5LDMzNTQwLDM0OTAzLDM0OTUyLDM1MzgyLDM2MDQwLDM2MzAzLDM2NjAzLDM2ODM4LDM5MzgxLDIxMDUxLDIxMzY0LDIxNTA4LDI0NjgyLDI0OTMyLDI3NTgwLDI5NjQ3LDMzMDUwLDM1MjU4LDM1MjgyLDM4MzA3LDIwMzU1LDIxMDAyLDIyNzE4LDIyOTA0LDIzMDE0LDI0MTc4LDI0MTg1LDI1MDMxLDI1NTM2LDI2NDM4LDI2NjA0LDI2NzUxLDI4NTY3LDMwMjg2LDMwNDc1LDMwOTY1LDMxMjQwLDMxNDg3LDMxNzc3LDMyOTI1LDMzMzkwLDMzMzkzLDM1NTYzLDM4MjkxLDIwMDc1LDIxOTE3LDI2MzU5LDI4MjEyLDMwODgzLDMxNDY5LDMzODgzLDM1MDg4LDM0NjM4LDM4ODI0LDIxMjA4LDIyMzUwLDIyNTcwLDIzODg0LDI0ODYzLDI1MDIyLDI1MTIxLDI1OTU0LDI2NTc3LDI3MjA0LDI4MTg3LDI5OTc2LDMwMTMxLDMwNDM1LDMwNjQwLDMyMDU4LDM3MDM5LDM3OTY5LDM3OTcwLDQwODUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMjgzLDIzNzI0LDMwMDAyLDMyOTg3LDM3NDQwLDM4Mjk2LDIxMDgzLDIyNTM2LDIzMDA0LDIzNzEzLDIzODMxLDI0MjQ3LDI0Mzc4LDI0Mzk0LDI0OTUxLDI3NzQzLDMwMDc0LDMwMDg2LDMxOTY4LDMyMTE1LDMyMTc3LDMyNjUyLDMzMTA4LDMzMzEzLDM0MTkzLDM1MTM3LDM1NjExLDM3NjI4LDM4NDc3LDQwMDA3LDIwMTcxLDIwMjE1LDIwNDkxLDIwOTc3LDIyNjA3LDI0ODg3LDI0ODk0LDI0OTM2LDI1OTEzLDI3MTE0LDI4NDMzLDMwMTE3LDMwMzQyLDMwNDIyLDMxNjIzLDMzNDQ1LDMzOTk1LDYzNzQ0LDM3Nzk5LDM4MjgzLDIxODg4LDIzNDU4LDIyMzUzLDYzNzQ1LDMxOTIzLDMyNjk3LDM3MzAxLDIwNTIwLDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1NDU0LDI1ODE4LDI1ODMxLDI4MTkyLDI4ODQ0LDMxMDY3LDM2MzE3LDM2MzgyLDYzNzQ2LDM2OTg5LDM3NDQ1LDM3NjI0LDIwMDk0LDIwMjE0LDIwNTgxLDI0MDYyLDI0MzE0LDI0ODM4LDI2OTY3LDMzMTM3LDM0Mzg4LDM2NDIzLDM3NzQ5LDM5NDY3LDIwMDYyLDIwNjI1LDI2NDgwLDI2Njg4LDIwNzQ1LDIxMTMzLDIxMTM4LDI3Mjk4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwNjUyLDM3MzkyLDQwNjYwLDIxMTYzLDI0NjIzLDM2ODUwLDIwNTUyLDI1MDAxLDI1NTgxLDI1ODAyLDI2Njg0LDI3MjY4LDI4NjA4LDMzMTYwLDM1MjMzLDM4NTQ4LDIyNTMzLDI5MzA5LDI5MzU2LDI5OTU2LDMyMTIxLDMyMzY1LDMyOTM3LDM1MjExLDM1NzAwLDM2OTYzLDQwMjczLDI1MjI1LDI3NzcwLDI4NTAwLDMyMDgwLDMyNTcwLDM1MzYzLDIwODYwLDI0OTA2LDMxNjQ1LDM1NjA5LDM3NDYzLDM3NzcyLDIwMTQwLDIwNDM1LDIwNTEwLDIwNjcwLDIwNzQyLDIxMTg1LDIxMTk3LDIxMzc1LDIyMzg0LDIyNjU5LDI0MjE4LDI0NDY1LDI0OTUwLDI1MDA0LDI1ODA2LDI1OTY0LDI2MjIzLDI2Mjk5LDI2MzU2LDI2Nzc1LDI4MDM5LDI4ODA1LDI4OTEzLDI5ODU1LDI5ODYxLDI5ODk4LDMwMTY5LDMwODI4LDMwOTU2LDMxNDU1LDMxNDc4LDMyMDY5LDMyMTQ3LDMyNzg5LDMyODMxLDMzMDUxLDMzNjg2LDM1Njg2LDM2NjI5LDM2ODg1LDM3ODU3LDM4OTE1LDM4OTY4LDM5NTE0LDM5OTEyLDIwNDE4LDIxODQzLDIyNTg2LDIyODY1LDIzMzk1LDIzNjIyLDI0NzYwLDI1MTA2LDI2NjkwLDI2ODAwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODU2LDI4MzMwLDMwMDI4LDMwMzI4LDMwOTI2LDMxMjkzLDMxOTk1LDMyMzYzLDMyMzgwLDM1MzM2LDM1NDg5LDM1OTAzLDM4NTQyLDQwMzg4LDIxNDc2LDIxNDgxLDIxNTc4LDIxNjE3LDIyMjY2LDIyOTkzLDIzMzk2LDIzNjExLDI0MjM1LDI1MzM1LDI1OTExLDI1OTI1LDI1OTcwLDI2MjcyLDI2NTQzLDI3MDczLDI3ODM3LDMwMjA0LDMwMzUyLDMwNTkwLDMxMjk1LDMyNjYwLDMyNzcxLDMyOTI5LDMzMTY3LDMzNTEwLDMzNTMzLDMzNzc2LDM0MjQxLDM0ODY1LDM0OTk2LDM1NDkzLDYzNzQ3LDM2NzY0LDM3Njc4LDM4NTk5LDM5MDE1LDM5NjQwLDQwNzIzLDIxNzQxLDI2MDExLDI2MzU0LDI2NzY3LDMxMjk2LDM1ODk1LDQwMjg4LDIyMjU2LDIyMzcyLDIzODI1LDI2MTE4LDI2ODAxLDI2ODI5LDI4NDE0LDI5NzM2LDM0OTc0LDM5OTA4LDI3NzUyLDYzNzQ4LDM5NTkyLDIwMzc5LDIwODQ0LDIwODQ5LDIxMTUxLDIzMzgwLDI0MDM3LDI0NjU2LDI0Njg1LDI1MzI5LDI1NTExLDI1OTE1LDI5NjU3LDMxMzU0LDM0NDY3LDM2MDAyLDM4Nzk5LDIwMDE4LDIzNTIxLDI1MDk2LDI2NTI0LDI5OTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTg1LDMzNzQ3LDM1NDYzLDM1NTA2LDM2MzI4LDM2OTQyLDM3NzA3LDM4OTgyLDI0Mjc1LDI3MTEyLDM0MzAzLDM3MTAxLDYzNzQ5LDIwODk2LDIzNDQ4LDIzNTMyLDI0OTMxLDI2ODc0LDI3NDU0LDI4NzQ4LDI5NzQzLDI5OTEyLDMxNjQ5LDMyNTkyLDMzNzMzLDM1MjY0LDM2MDExLDM4MzY0LDM5MjA4LDIxMDM4LDI0NjY5LDI1MzI0LDM2ODY2LDIwMzYyLDIwODA5LDIxMjgxLDIyNzQ1LDI0MjkxLDI2MzM2LDI3OTYwLDI4ODI2LDI5Mzc4LDI5NjU0LDMxNTY4LDMzMDA5LDM3OTc5LDIxMzUwLDI1NDk5LDMyNjE5LDIwMDU0LDIwNjA4LDIyNjAyLDIyNzUwLDI0NjE4LDI0ODcxLDI1Mjk2LDI3MDg4LDM5NzQ1LDIzNDM5LDMyMDI0LDMyOTQ1LDM2NzAzLDIwMTMyLDIwNjg5LDIxNjc2LDIxOTMyLDIzMzA4LDIzOTY4LDI0MDM5LDI1ODk4LDI1OTM0LDI2NjU3LDI3MjExLDI5NDA5LDMwMzUwLDMwNzAzLDMyMDk0LDMyNzYxLDMzMTg0LDM0MTI2LDM0NTI3LDM2NjExLDM2Njg2LDM3MDY2LDM5MTcxLDM5NTA5LDM5ODUxLDE5OTkyLDIwMDM3LDIwMDYxLDIwMTY3LDIwNDY1LDIwODU1LDIxMjQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMzEyLDIxNDc1LDIxNDc3LDIxNjQ2LDIyMDM2LDIyMzg5LDIyNDM0LDIzNDk1LDIzOTQzLDI0MjcyLDI1MDg0LDI1MzA0LDI1OTM3LDI2NTUyLDI2NjAxLDI3MDgzLDI3NDcyLDI3NTkwLDI3NjI4LDI3NzE0LDI4MzE3LDI4NzkyLDI5Mzk5LDI5NTkwLDI5Njk5LDMwNjU1LDMwNjk3LDMxMzUwLDMyMTI3LDMyNzc3LDMzMjc2LDMzMjg1LDMzMjkwLDMzNTAzLDM0OTE0LDM1NjM1LDM2MDkyLDM2NTQ0LDM2ODgxLDM3MDQxLDM3NDc2LDM3NTU4LDM5Mzc4LDM5NDkzLDQwMTY5LDQwNDA3LDQwODYwLDIyMjgzLDIzNjE2LDMzNzM4LDM4ODE2LDM4ODI3LDQwNjI4LDIxNTMxLDMxMzg0LDMyNjc2LDM1MDMzLDM2NTU3LDM3MDg5LDIyNTI4LDIzNjI0LDI1NDk2LDMxMzkxLDIzNDcwLDI0MzM5LDMxMzUzLDMxNDA2LDMzNDIyLDM2NTI0LDIwNTE4LDIxMDQ4LDIxMjQwLDIxMzY3LDIyMjgwLDI1MzMxLDI1NDU4LDI3NDAyLDI4MDk5LDMwNTE5LDIxNDEzLDI5NTI3LDM0MTUyLDM2NDcwLDM4MzU3LDI2NDI2LDI3MzMxLDI4NTI4LDM1NDM3LDM2NTU2LDM5MjQzLDYzNzUwLDI2MjMxLDI3NTEyLDM2MDIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM5NzQwLDYzNzUxLDIxNDgzLDIyMzE3LDIyODYyLDI1NTQyLDI3MTMxLDI5Njc0LDMwNzg5LDMxNDE4LDMxNDI5LDMxOTk4LDMzOTA5LDM1MjE1LDM2MjExLDM2OTE3LDM4MzEyLDIxMjQzLDIyMzQzLDMwMDIzLDMxNTg0LDMzNzQwLDM3NDA2LDYzNzUyLDI3MjI0LDIwODExLDIxMDY3LDIxMTI3LDI1MTE5LDI2ODQwLDI2OTk3LDM4NTUzLDIwNjc3LDIxMTU2LDIxMjIwLDI1MDI3LDI2MDIwLDI2NjgxLDI3MTM1LDI5ODIyLDMxNTYzLDMzNDY1LDMzNzcxLDM1MjUwLDM1NjQxLDM2ODE3LDM5MjQxLDYzNzUzLDIwMTcwLDIyOTM1LDI1ODEwLDI2MTI5LDI3Mjc4LDI5NzQ4LDMxMTA1LDMxMTY1LDMzNDQ5LDM0OTQyLDM0OTQzLDM1MTY3LDYzNzU0LDM3NjcwLDIwMjM1LDIxNDUwLDI0NjEzLDI1MjAxLDI3NzYyLDMyMDI2LDMyMTAyLDIwMTIwLDIwODM0LDMwNjg0LDMyOTQzLDIwMjI1LDIwMjM4LDIwODU0LDIwODY0LDIxOTgwLDIyMTIwLDIyMzMxLDIyNTIyLDIyNTI0LDIyODA0LDIyODU1LDIyOTMxLDIzNDkyLDIzNjk2LDIzODIyLDI0MDQ5LDI0MTkwLDI0NTI0LDI1MjE2LDI2MDcxLDI2MDgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2Mzk4LDI2Mzk5LDI2NDYyLDI2ODI3LDI2ODIwLDI3MjMxLDI3NDUwLDI3NjgzLDI3NzczLDI3Nzc4LDI4MTAzLDI5NTkyLDI5NzM0LDI5NzM4LDI5ODI2LDI5ODU5LDMwMDcyLDMwMDc5LDMwODQ5LDMwOTU5LDMxMDQxLDMxMDQ3LDMxMDQ4LDMxMDk4LDMxNjM3LDMyMDAwLDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYzLDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIzMDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYzNzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYyLDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYzNzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEzLDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIxMTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYzNzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYzODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYzODA4LDYzODA5LDYzODEwLDYzODExLDI4NjExLDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIyLDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYzODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMyODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgwLDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIzNDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIzNzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMxMjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIyNjk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAyLDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkxLDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEzLDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIzODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUxLDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEwLDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUzLDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIxMjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMyODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIwOTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgzLDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMyMTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQwLDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMxMjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIxMDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAyLDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMwNzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIwLDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5LDI4NDQ4LDMzMTgwLDMzNzA3LDM3MDAwLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2MDAwLDM2MDcwLDM2MDkxLDM2MjEyLDM2MjgyLDM3MDk2LDM3MzQwLDM4NDI4LDM4NDY4LDM5Mzg1LDQwMTY3LDIxMjcxLDIwOTk4LDIxNTQ1LDIyMTMyLDIyNzA3LDIyODY4LDIyODk0LDI0NTc1LDI0OTk2LDI1MTk4LDI2MTI4LDI3Nzc0LDI4OTU0LDMwNDA2LDMxODgxLDMxOTY2LDMyMDI3LDMzNDUyLDM2MDMzLDM4NjQwLDYzODQ3LDIwMzE1LDI0MzQzLDI0NDQ3LDI1MjgyLDIzODQ5LDI2Mzc5LDI2ODQyLDMwODQ0LDMyMzIzLDQwMzAwLDE5OTg5LDIwNjMzLDIxMjY5LDIxMjkwLDIxMzI5LDIyOTE1LDIzMTM4LDI0MTk5LDI0NzU0LDI0OTcwLDI1MTYxLDI1MjA5LDI2MDAwLDI2NTAzLDI3MDQ3LDI3NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYzODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMxODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMxMDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMyOTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2NzgxLDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgzLDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIyNjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMxMzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMxNTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMzMjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQwNzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMxMTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIxMzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQxLDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIyNDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYxLDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMyMTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYwLDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDkyLDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMzMDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIzODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5NzkxLDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIxMzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIzNjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMwNjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUzLDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYzODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIzNTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMzNDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIzMDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMzNzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQwMjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIzLDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIyODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQwMjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIwOTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMyMDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEzLDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMzNTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTkyLDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIzLDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEwLDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYzODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMwNzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYzODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYzOTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIwMDM0LDIwNTIyLDYzOTI1LDIxMDAwLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5MDAwLDQwMjE5LDI2Mzc2LDM2MjM0LDM3NDcwLDIwMzAxLDIwNTUzLDIwNzAyLDIxMzYxLDIyMjg1LDIyOTk2LDIzMDQxLDIzNTYxLDI0OTQ0LDI2MjU2LDI4MjA1LDI5MjM0LDI5NzcxLDMyMjM5LDMyOTYzLDMzODA2LDMzODk0LDM0MTExLDM0NjU1LDM0OTA3LDM1MDk2LDM1NTg2LDM2OTQ5LDM4ODU5LDM5NzU5LDIwMDgzLDIwMzY5LDIwNzU0LDIwODQyLDYzOTQzLDIxODA3LDIxOTI5LDIzNDE4LDIzNDYxLDI0MTg4LDI0MTg5LDI0MjU0LDI0NzM2LDI0Nzk5LDI0ODQwLDI0ODQxLDI1NTQwLDI1OTEyLDI2Mzc3LDYzOTQ0LDI2NTgwLDI2NTg2LDYzOTQ1LDI2OTc3LDI2OTc4LDI3ODMzLDI3OTQzLDYzOTQ2LDI4MjE2LDYzOTQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4NjQxLDI5NDk0LDI5NDk1LDYzOTQ4LDI5Nzg4LDMwMDAxLDYzOTQ5LDMwMjkwLDYzOTUwLDYzOTUxLDMyMTczLDMzMjc4LDMzODQ4LDM1MDI5LDM1NDgwLDM1NTQ3LDM1NTY1LDM2NDAwLDM2NDE4LDM2OTM4LDM2OTI2LDM2OTg2LDM3MTkzLDM3MzIxLDM3NzQyLDYzOTUyLDYzOTUzLDIyNTM3LDYzOTU0LDI3NjAzLDMyOTA1LDMyOTQ2LDYzOTU1LDYzOTU2LDIwODAxLDIyODkxLDIzNjA5LDYzOTU3LDYzOTU4LDI4NTE2LDI5NjA3LDMyOTk2LDM2MTAzLDYzOTU5LDM3Mzk5LDM4Mjg3LDYzOTYwLDYzOTYxLDYzOTYyLDYzOTYzLDMyODk1LDI1MTAyLDI4NzAwLDMyMTA0LDM0NzAxLDYzOTY0LDIyNDMyLDI0NjgxLDI0OTAzLDI3NTc1LDM1NTE4LDM3NTA0LDM4NTc3LDIwMDU3LDIxNTM1LDI4MTM5LDM0MDkzLDM4NTEyLDM4ODk5LDM5MTUwLDI1NTU4LDI3ODc1LDM3MDA5LDIwOTU3LDI1MDMzLDMzMjEwLDQwNDQxLDIwMzgxLDIwNTA2LDIwNzM2LDIzNDUyLDI0ODQ3LDI1MDg3LDI1ODM2LDI2ODg1LDI3NTg5LDMwMDk3LDMwNjkxLDMyNjgxLDMzMzgwLDM0MTkxLDM0ODExLDM0OTE1LDM1NTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM1Njk2LDM3MjkxLDIwMTA4LDIwMTk3LDIwMjM0LDYzOTY1LDYzOTY2LDIyODM5LDIzMDE2LDYzOTY3LDI0MDUwLDI0MzQ3LDI0NDExLDI0NjA5LDYzOTY4LDYzOTY5LDYzOTcwLDYzOTcxLDI5MjQ2LDI5NjY5LDYzOTcyLDMwMDY0LDMwMTU3LDYzOTczLDMxMjI3LDYzOTc0LDMyNzgwLDMyODE5LDMyOTAwLDMzNTA1LDMzNjE3LDYzOTc1LDYzOTc2LDM2MDI5LDM2MDE5LDM2OTk5LDYzOTc3LDYzOTc4LDM5MTU2LDM5MTgwLDYzOTc5LDYzOTgwLDI4NzI3LDMwNDEwLDMyNzE0LDMyNzE2LDMyNzY0LDM1NjEwLDIwMTU0LDIwMTYxLDIwOTk1LDIxMzYwLDYzOTgxLDIxNjkzLDIyMjQwLDIzMDM1LDIzNDkzLDI0MzQxLDI0NTI1LDI4MjcwLDYzOTgyLDYzOTgzLDMyMTA2LDMzNTg5LDYzOTg0LDM0NDUxLDM1NDY5LDYzOTg1LDM4NzY1LDM4Nzc1LDYzOTg2LDYzOTg3LDE5OTY4LDIwMzE0LDIwMzUwLDIyNzc3LDI2MDg1LDI4MzIyLDM2OTIwLDM3ODA4LDM5MzUzLDIwMjE5LDIyNzY0LDIyOTIyLDIzMDAxLDI0NjQxLDYzOTg4LDYzOTg5LDMxMjUyLDYzOTkwLDMzNjE1LDM2MDM1LDIwODM3LDIxMzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTkxLDYzOTkyLDYzOTkzLDIwMTczLDIxMDk3LDIzMzgxLDMzNDcxLDIwMTgwLDIxMDUwLDIxNjcyLDIyOTg1LDIzMDM5LDIzMzc2LDIzMzgzLDIzMzg4LDI0Njc1LDI0OTA0LDI4MzYzLDI4ODI1LDI5MDM4LDI5NTc0LDI5OTQzLDMwMTMzLDMwOTEzLDMyMDQzLDMyNzczLDMzMjU4LDMzNTc2LDM0MDcxLDM0MjQ5LDM1NTY2LDM2MDM5LDM4NjA0LDIwMzE2LDIxMjQyLDIyMjA0LDI2MDI3LDI2MTUyLDI4Nzk2LDI4ODU2LDI5MjM3LDMyMTg5LDMzNDIxLDM3MTk2LDM4NTkyLDQwMzA2LDIzNDA5LDI2ODU1LDI3NTQ0LDI4NTM4LDMwNDMwLDIzNjk3LDI2MjgzLDI4NTA3LDMxNjY4LDMxNzg2LDM0ODcwLDM4NjIwLDE5OTc2LDIwMTgzLDIxMjgwLDIyNTgwLDIyNzE1LDIyNzY3LDIyODkyLDIzNTU5LDI0MTE1LDI0MTk2LDI0MzczLDI1NDg0LDI2MjkwLDI2NDU0LDI3MTY3LDI3Mjk5LDI3NDA0LDI4NDc5LDI5MjU0LDYzOTk0LDI5NTIwLDI5ODM1LDMxNDU2LDMxOTExLDMzMTQ0LDMzMjQ3LDMzMjU1LDMzNjc0LDMzOTAwLDM0MDgzLDM0MTk2LDM0MjU1LDM1MDM3LDM2MTE1LDM3MjkyLDM4MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NTU2LDIwODc3LDIxNzA1LDIyMzEyLDIzNDcyLDI1MTY1LDI2NDQ4LDI2Njg1LDI2NzcxLDI4MjIxLDI4MzcxLDI4Nzk3LDMyMjg5LDM1MDA5LDM2MDAxLDM2NjE3LDQwNzc5LDQwNzgyLDI5MjI5LDMxNjMxLDM1NTMzLDM3NjU4LDIwMjk1LDIwMzAyLDIwNzg2LDIxNjMyLDIyOTkyLDI0MjEzLDI1MjY5LDI2NDg1LDI2OTkwLDI3MTU5LDI3ODIyLDI4MTg2LDI5NDAxLDI5NDgyLDMwMTQxLDMxNjcyLDMyMDUzLDMzNTExLDMzNzg1LDMzODc5LDM0Mjk1LDM1NDE5LDM2MDE1LDM2NDg3LDM2ODg5LDM3MDQ4LDM4NjA2LDQwNzk5LDIxMjE5LDIxNTE0LDIzMjY1LDIzNDkwLDI1Njg4LDI1OTczLDI4NDA0LDI5MzgwLDYzOTk1LDMwMzQwLDMxMzA5LDMxNTE1LDMxODIxLDMyMzE4LDMyNzM1LDMzNjU5LDM1NjI3LDM2MDQyLDM2MTk2LDM2MzIxLDM2NDQ3LDM2ODQyLDM2ODU3LDM2OTY5LDM3ODQxLDIwMjkxLDIwMzQ2LDIwNjU5LDIwODQwLDIwODU2LDIxMDY5LDIxMDk4LDIyNjI1LDIyNjUyLDIyODgwLDIzNTYwLDIzNjM3LDI0MjgzLDI0NzMxLDI1MTM2LDI2NjQzLDI3NTgzLDI3NjU2LDI4NTkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDA2LDI5NzI4LDMwMDAwLDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0MDAwLDIxMDU5LDI2MzY3LDI4MDUzLDI4Mzk5LDMyMjI0LDM1NTU4LDM2OTEwLDM2OTU4LDM5NjM2LDIxMDIxLDIxMTE5LDIxNzM2LDI0OTgwLDI1MjIwLDI1MzA3LDI2Nzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODk4LDI2OTcwLDI3MTg5LDI4ODE4LDI4OTY2LDMwODEzLDMwOTc3LDMwOTkwLDMxMTg2LDMxMjQ1LDMyOTE4LDMzNDAwLDMzNDkzLDMzNjA5LDM0MTIxLDM1OTcwLDM2MjI5LDM3MjE4LDM3MjU5LDM3Mjk0LDIwNDE5LDIyMjI1LDI5MTY1LDMwNjc5LDM0NTYwLDM1MzIwLDIzNTQ0LDI0NTM0LDI2NDQ5LDM3MDMyLDIxNDc0LDIyNjE4LDIzNTQxLDI0NzQwLDI0OTYxLDI1Njk2LDMyMzE3LDMyODgwLDM0MDg1LDM3NTA3LDI1Nzc0LDIwNjUyLDIzODI4LDI2MzY4LDIyNjg0LDI1Mjc3LDI1NTEyLDI2ODk0LDI3MDAwLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMxNjg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMyODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIzNzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMwMTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIyLDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMxMjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIwNTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMyODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQwLDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQyLDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIyMzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcyLDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIwODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIxLDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMwLDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMwMTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUwLDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYwLDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIxMTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDkyLDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMyNTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMyLDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2NjgwLDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIyNjg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIyNDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQyLDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIyNzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAzLDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMyMDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIxNjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQxLDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQzLDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQzLDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMzMjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIxMTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIzMzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2NzgzLDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQxLDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQwLDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMzMDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMyNzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIzMDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcImdiMTgwMzBcIjpbMTk5NzAsMTk5NzIsMTk5NzMsMTk5NzQsMTk5ODMsMTk5ODYsMTk5OTEsMTk5OTksMjAwMDAsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjIwMDAsMjIwMDEsMjIwMDQsMjIwMDYsMjIwMDgsMjIwMDksMjIwMTAsMjIwMTEsMjIwMTIsMjIwMTUsMjIwMTgsMjIwMTksMjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjYsMjIwMjcsMjIwMjksMjIwMzIsMjIwMzMsMjIwMzQsMjIwMzUsMjIwMzYsMjIwMzcsMjIwMzgsMjIwMzksMjIwNDEsMjIwNDIsMjIwNDQsMjIwNDUsMjIwNDgsMjIwNDksMjIwNTAsMjIwNTMsMjIwNTQsMjIwNTYsMjIwNTcsMjIwNTgsMjIwNTksMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzIsMjIwNzQsMjIwNzYsMjIwNzcsMjIwNzgsMjIwODAsMjIwODEsMjIwODIsMjIwODMsMjIwODQsMjIwODUsMjIwODYsMjIwODcsMjIwODgsMjIwODksMjIwOTAsMjIwOTEsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDEsMjIxMDIsMjIxMDYsMjIxMDcsMjIxMDksMjIxMTAsMjIxMTEsMjIxMTIsMjIxMTMsMjIxMTUsMjIxMTcsMjIxMTgsMjIxMTksMjIxMjUsMjIxMjYsMjIxMjcsMjIxMjgsMjIxMzAsMjIxMzEsMjIxMzIsMjIxMzMsMjIxMzUsMjIxMzYsMjIxMzcsMjIxMzgsMjIxNDEsMjIxNDIsMjIxNDMsMjIxNDQsMjIxNDUsMjIxNDYsMjIxNDcsMjIxNDgsMjIxNTEsMjIxNTIsMjIxNTMsMjIxNTQsMjIxNTUsMjIxNTYsMjIxNTcsMjIxNjAsMjIxNjEsMjIxNjIsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcsMjIxNjgsMjIxNjksMjIxNzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsMjIxNzUsMjIxNzYsMjIxNzcsMjIxNzgsMjIxODAsMjIxODEsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODYsMjIxODcsMjIxODgsMjIxODksMjIxOTAsMjIxOTIsMjIxOTMsMjIxOTQsMjIxOTUsMjIxOTYsMjIxOTcsMjIxOTgsMjIyMDAsMjIyMDEsMjIyMDIsMjIyMDMsMjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsMjIyMTEsMjIyMTIsMjIyMTMsMjIyMTQsMjIyMTUsMjIyMTYsMjIyMTcsMjIyMTksMjIyMjAsMjIyMjEsMjIyMjIsMjIyMjMsMjIyMjQsMjIyMjUsMjIyMjYsMjIyMjcsMjIyMjksMjIyMzAsMjIyMzIsMjIyMzMsMjIyMzYsMjIyNDMsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNDksMjIyNTAsMjIyNTIsMjIyNTQsMjIyNTUsMjIyNTgsMjIyNTksMjIyNjIsMjIyNjMsMjIyNjQsMjIyNjcsMjIyNjgsMjIyNzIsMjIyNzMsMjIyNzQsMjIyNzcsMjIyNzksMjIyODMsMjIyODQsMjIyODUsMjIyODYsMjIyODcsMjIyODgsMjIyODksMjIyOTAsMjIyOTEsMjIyOTIsMjIyOTMsMjIyOTQsMjIyOTUsMjIyOTYsMjIyOTcsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDIsMjIzMDQsMjIzMDUsMjIzMDYsMjIzMDgsMjIzMDksMjIzMTAsMjIzMTEsMjIzMTUsMjIzMjEsMjIzMjIsMjIzMjQsMjIzMjUsMjIzMjYsMjIzMjcsMjIzMjgsMjIzMzIsMjIzMzMsMjIzMzUsMjIzMzcsMjIzMzksMjIzNDAsMjIzNDEsMjIzNDIsMjIzNDQsMjIzNDUsMjIzNDcsMjIzNTQsMjIzNTUsMjIzNTYsMjIzNTcsMjIzNTgsMjIzNjAsMjIzNjEsMjIzNzAsMjIzNzEsMjIzNzMsMjIzNzUsMjIzODAsMjIzODIsMjIzODQsMjIzODUsMjIzODYsMjIzODgsMjIzODksMjIzOTIsMjIzOTMsMjIzOTQsMjIzOTcsMjIzOTgsMjIzOTksMjI0MDAsMjI0MDEsMjI0MDcsMjI0MDgsMjI0MDksMjI0MTAsMjI0MTMsMjI0MTQsMjI0MTUsMjI0MTYsMjI0MTcsMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzcsMjI0NDAsMjI0NDIsMjI0NDQsMjI0NDcsMjI0NDgsMjI0NDksMjI0NTEsMjI0NTMsMjI0NTQsMjI0NTUsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAsMjI0NjEsMjI0NjIsMjI0NjMsMjI0NjQsMjI0NjUsMjI0NjgsMjI0NjksMjI0NzAsMjI0NzEsMjI0NzIsMjI0NzMsMjI0NzQsMjI0NzYsMjI0NzcsMjI0ODAsMjI0ODEsMjI0ODMsMjI0ODYsMjI0ODcsMjI0OTEsMjI0OTIsMjI0OTQsMjI0OTcsMjI0OTgsMjI0OTksMjI1MDEsMjI1MDIsMjI1MDMsMjI1MDQsMjI1MDUsMjI1MDYsMjI1MDcsMjI1MDgsMjI1MTAsMjI1MTIsMjI1MTMsMjI1MTQsMjI1MTUsMjI1MTcsMjI1MTgsMjI1MTksMjI1MjMsMjI1MjQsMjI1MjYsMjI1MjcsMjI1MjksMjI1MzEsMjI1MzIsMjI1MzMsMjI1MzYsMjI1MzcsMjI1MzgsMjI1NDAsMjI1NDIsMjI1NDMsMjI1NDQsMjI1NDYsMjI1NDcsMjI1NDgsMjI1NTAsMjI1NTEsMjI1NTIsMjI1NTQsMjI1NTUsMjI1NTYsMjI1NTcsMjI1NTksMjI1NjIsMjI1NjMsMjI1NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzEsMjI1NzIsMjI1NzMsMjI1NzQsMjI1NzUsMjI1NzcsMjI1NzgsMjI1NzksMjI1ODAsMjI1ODIsMjI1ODMsMjI1ODQsMjI1ODUsMjI1ODYsMjI1ODcsMjI1ODgsMjI1ODksMjI1OTAsMjI1OTEsMjI1OTIsMjI1OTMsMjI1OTQsMjI1OTUsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2MDIsMjI2MDMsMjI2MDYsMjI2MDcsMjI2MDgsMjI2MTAsMjI2MTEsMjI2MTMsMjI2MTQsMjI2MTUsMjI2MTcsMjI2MTgsMjI2MTksMjI2MjAsMjI2MjEsMjI2MjMsMjI2MjQsMjI2MjUsMjI2MjYsMjI2MjcsMjI2MjgsMjI2MzAsMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzcsMjI2MzgsMjI2MzksMjI2NDAsMjI2NDEsMjI2NDIsMjI2NDMsMjI2NDQsMjI2NDUsMjI2NDYsMjI2NDcsMjI2NDgsMjI2NDksMjI2NTAsMjI2NTEsMjI2NTIsMjI2NTMsMjI2NTUsMjI2NTgsMjI2NjAsMjI2NjIsMjI2NjMsMjI2NjQsMjI2NjYsMjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMsMjI2NzYsMjI2NzcsMjI2NzgsMjI2NzksMjI2ODAsMjI2ODMsMjI2ODQsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTEsMjI2OTIsMjI2OTMsMjI2OTQsMjI2OTUsMjI2OTgsMjI2OTksMjI3MDAsMjI3MDEsMjI3MDIsMjI3MDMsMjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3MTMsMjI3MTQsMjI3MTUsMjI3MTcsMjI3MTgsMjI3MTksMjI3MjAsMjI3MjIsMjI3MjMsMjI3MjQsMjI3MjYsMjI3MjcsMjI3MjgsMjI3MjksMjI3MzAsMjI3MzEsMjI3MzIsMjI3MzMsMjI3MzQsMjI3MzUsMjI3MzYsMjI3MzgsMjI3MzksMjI3NDAsMjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcsMjI3NDgsMjI3NDksMjI3NTAsMjI3NTEsMjI3NTIsMjI3NTMsMjI3NTQsMjI3NTUsMjI3NTcsMjI3NTgsMjI3NTksMjI3NjAsMjI3NjEsMjI3NjIsMjI3NjUsMjI3NjcsMjI3NjksMjI3NzAsMjI3NzIsMjI3NzMsMjI3NzUsMjI3NzYsMjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3ODMsMjI3ODQsMjI3ODUsMjI3ODcsMjI3ODksMjI3OTAsMjI3OTIsMjI3OTMsMjI3OTQsMjI3OTUsMjI3OTYsMjI3OTgsMjI4MDAsMjI4MDEsMjI4MDIsMjI4MDMsMjI4MDcsMjI4MDgsMjI4MTEsMjI4MTMsMjI4MTQsMjI4MTYsMjI4MTcsMjI4MTgsMjI4MTksMjI4MjIsMjI4MjQsMjI4MjgsMjI4MzIsMjI4MzQsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDMsMjI4NDUsMjI4NDYsMjI4NDcsMjI4NDgsMjI4NTEsMjI4NTMsMjI4NTQsMjI4NTgsMjI4NjAsMjI4NjEsMjI4NjQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzYsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4ODQsMjI4ODYsMjI4ODcsMjI4ODgsMjI4ODksMjI4OTAsMjI4OTEsMjI4OTIsMjI4OTMsMjI4OTQsMjI4OTUsMjI4OTYsMjI4OTcsMjI4OTgsMjI5MDEsMjI5MDMsMjI5MDYsMjI5MDcsMjI5MDgsMjI5MTAsMjI5MTEsMjI5MTIsMjI5MTcsMjI5MjEsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MjcsMjI5MjgsMjI5MjksMjI5MzIsMjI5MzMsMjI5MzYsMjI5MzgsMjI5MzksMjI5NDAsMjI5NDEsMjI5NDMsMjI5NDQsMjI5NDUsMjI5NDYsMjI5NTAsMjI5NTEsMjI5NTYsMjI5NTcsMjI5NjAsMjI5NjEsMjI5NjMsMjI5NjQsMjI5NjUsMjI5NjYsMjI5NjcsMjI5NjgsMjI5NzAsMjI5NzIsMjI5NzMsMjI5NzUsMjI5NzYsMjI5NzcsMjI5NzgsMjI5NzksMjI5ODAsMjI5ODEsMjI5ODMsMjI5ODQsMjI5ODUsMjI5ODgsMjI5ODksMjI5OTAsMjI5OTEsMjI5OTcsMjI5OTgsMjMwMDEsMjMwMDMsMjMwMDYsMjMwMDcsMjMwMDgsMjMwMDksMjMwMTAsMjMwMTIsMjMwMTQsMjMwMTUsMjMwMTcsMjMwMTgsMjMwMTksMjMwMjEsMjMwMjIsMjMwMjMsMjMwMjQsMjMwMjUsMjMwMjYsMjMwMjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzQsMjMwMzYsMjMwMzcsMjMwMzgsMjMwNDAsMjMwNDIsMjMwNTAsMjMwNTEsMjMwNTMsMjMwNTQsMjMwNTUsMjMwNTYsMjMwNTgsMjMwNjAsMjMwNjEsMjMwNjIsMjMwNjMsMjMwNjUsMjMwNjYsMjMwNjcsMjMwNjksMjMwNzAsMjMwNzMsMjMwNzQsMjMwNzYsMjMwNzgsMjMwNzksMjMwODAsMjMwODIsMjMwODMsMjMwODQsMjMwODUsMjMwODYsMjMwODcsMjMwODgsMjMwOTEsMjMwOTMsMjMwOTUsMjMwOTYsMjMwOTcsMjMwOTgsMjMwOTksMjMxMDEsMjMxMDIsMjMxMDMsMjMxMDUsMjMxMDYsMjMxMDcsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTUsMjMxMTYsMjMxMTcsMjMxMTgsMjMxMTksMjMxMjAsMjMxMjEsMjMxMjIsMjMxMjMsMjMxMjQsMjMxMjYsMjMxMjcsMjMxMjgsMjMxMjksMjMxMzEsMjMxMzIsMjMxMzMsMjMxMzQsMjMxMzUsMjMxMzYsMjMxMzcsMjMxMzksMjMxNDAsMjMxNDEsMjMxNDIsMjMxNDQsMjMxNDUsMjMxNDcsMjMxNDgsMjMxNDksMjMxNTAsMjMxNTEsMjMxNTIsMjMxNTMsMjMxNTQsMjMxNTUsMjMxNjAsMjMxNjEsMjMxNjMsMjMxNjQsMjMxNjUsMjMxNjYsMjMxNjgsMjMxNjksMjMxNzAsMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMxNzUsMjMxNzYsMjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsMjMxODMsMjMxODQsMjMxODUsMjMxODcsMjMxODgsMjMxODksMjMxOTAsMjMxOTEsMjMxOTIsMjMxOTMsMjMxOTYsMjMxOTcsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDEsMjMyMDIsMjMyMDMsMjMyMDQsMjMyMDUsMjMyMDYsMjMyMDcsMjMyMDgsMjMyMDksMjMyMTEsMjMyMTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMjAsMjMyMjIsMjMyMjMsMjMyMjUsMjMyMjYsMjMyMjcsMjMyMjgsMjMyMjksMjMyMzEsMjMyMzIsMjMyMzUsMjMyMzYsMjMyMzcsMjMyMzgsMjMyMzksMjMyNDAsMjMyNDIsMjMyNDMsMjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMyNDksMjMyNTEsMjMyNTMsMjMyNTUsMjMyNTcsMjMyNTgsMjMyNTksMjMyNjEsMjMyNjIsMjMyNjMsMjMyNjYsMjMyNjgsMjMyNjksMjMyNzEsMjMyNzIsMjMyNzQsMjMyNzYsMjMyNzcsMjMyNzgsMjMyNzksMjMyODAsMjMyODIsMjMyODMsMjMyODQsMjMyODUsMjMyODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsMjMyOTEsMjMyOTIsMjMyOTMsMjMyOTQsMjMyOTUsMjMyOTYsMjMyOTcsMjMyOTgsMjMyOTksMjMzMDAsMjMzMDEsMjMzMDIsMjMzMDMsMjMzMDQsMjMzMDYsMjMzMDcsMjMzMDgsMjMzMDksMjMzMTAsMjMzMTEsMjMzMTIsMjMzMTMsMjMzMTQsMjMzMTUsMjMzMTYsMjMzMTcsMjMzMjAsMjMzMjEsMjMzMjIsMjMzMjMsMjMzMjQsMjMzMjUsMjMzMjYsMjMzMjcsMjMzMjgsMjMzMjksMjMzMzAsMjMzMzEsMjMzMzIsMjMzMzMsMjMzMzQsMjMzMzUsMjMzMzYsMjMzMzcsMjMzMzgsMjMzMzksMjMzNDAsMjMzNDEsMjMzNDIsMjMzNDMsMjMzNDQsMjMzNDUsMjMzNDcsMjMzNDksMjMzNTAsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTksMjMzNjEsMjMzNjIsMjMzNjMsMjMzNjQsMjMzNjUsMjMzNjYsMjMzNjcsMjMzNjgsMjMzNjksMjMzNzAsMjMzNzEsMjMzNzIsMjMzNzMsMjMzNzQsMjMzNzUsMjMzNzgsMjMzODIsMjMzOTAsMjMzOTIsMjMzOTMsMjMzOTksMjM0MDAsMjM0MDMsMjM0MDUsMjM0MDYsMjM0MDcsMjM0MTAsMjM0MTIsMjM0MTQsMjM0MTUsMjM0MTYsMjM0MTcsMjM0MTksMjM0MjAsMjM0MjIsMjM0MjMsMjM0MjYsMjM0MzAsMjM0MzQsMjM0MzcsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDIsMjM0NDQsMjM0NDYsMjM0NTUsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzAsMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODMsMjM0ODQsMjM0ODgsMjM0ODksMjM0OTEsMjM0OTYsMjM0OTcsMjM0OTgsMjM0OTksMjM1MDEsMjM1MDIsMjM1MDMsMjM1MDUsMjM1MDgsMjM1MDksMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MTUsMjM1MTYsMjM1MjAsMjM1MjIsMjM1MjMsMjM1MjYsMjM1MjcsMjM1MjksMjM1MzAsMjM1MzEsMjM1MzIsMjM1MzMsMjM1MzUsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1NDEsMjM1NDIsMjM1NDMsMjM1NDksMjM1NTAsMjM1NTIsMjM1NTQsMjM1NTUsMjM1NTcsMjM1NTksMjM1NjAsMjM1NjMsMjM1NjQsMjM1NjUsMjM1NjYsMjM1NjgsMjM1NzAsMjM1NzEsMjM1NzUsMjM1NzcsMjM1NzksMjM1ODIsMjM1ODMsMjM1ODQsMjM1ODUsMjM1ODcsMjM1OTAsMjM1OTIsMjM1OTMsMjM1OTQsMjM1OTUsMjM1OTcsMjM1OTgsMjM1OTksMjM2MDAsMjM2MDIsMjM2MDMsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MTksMjM2MjAsMjM2MjIsMjM2MjMsMjM2MjgsMjM2MjksMjM2MzQsMjM2MzUsMjM2MzYsMjM2MzgsMjM2MzksMjM2NDAsMjM2NDIsMjM2NDMsMjM2NDQsMjM2NDUsMjM2NDcsMjM2NTAsMjM2NTIsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NTgsMjM2NTksMjM2NjAsMjM2NjEsMjM2NjQsMjM2NjYsMjM2NjcsMjM2NjgsMjM2NjksMjM2NzAsMjM2NzEsMjM2NzIsMjM2NzUsMjM2NzYsMjM2NzcsMjM2NzgsMjM2ODAsMjM2ODMsMjM2ODQsMjM2ODUsMjM2ODYsMjM2ODcsMjM2ODksMjM2OTAsMjM2OTEsMjM2OTQsMjM2OTUsMjM2OTgsMjM2OTksMjM3MDEsMjM3MDksMjM3MTAsMjM3MTEsMjM3MTIsMjM3MTMsMjM3MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAsMjM3MjIsMjM3MjYsMjM3MjcsMjM3MjgsMjM3MzAsMjM3MzIsMjM3MzQsMjM3MzcsMjM3MzgsMjM3MzksMjM3NDAsMjM3NDIsMjM3NDQsMjM3NDYsMjM3NDcsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTYsMjM3NTcsMjM3NTgsMjM3NTksMjM3NjAsMjM3NjEsMjM3NjMsMjM3NjQsMjM3NjUsMjM3NjYsMjM3NjcsMjM3NjgsMjM3NzAsMjM3NzEsMjM3NzIsMjM3NzMsMjM3NzQsMjM3NzUsMjM3NzYsMjM3NzgsMjM3NzksMjM3ODMsMjM3ODUsMjM3ODcsMjM3ODgsMjM3OTAsMjM3OTEsMjM3OTMsMjM3OTQsMjM3OTUsMjM3OTYsMjM3OTcsMjM3OTgsMjM3OTksMjM4MDAsMjM4MDEsMjM4MDIsMjM4MDQsMjM4MDUsMjM4MDYsMjM4MDcsMjM4MDgsMjM4MDksMjM4MTIsMjM4MTMsMjM4MTYsMjM4MTcsMjM4MTgsMjM4MTksMjM4MjAsMjM4MjEsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4MjksMjM4MzEsMjM4MzIsMjM4MzMsMjM4MzQsMjM4MzYsMjM4MzcsMjM4MzksMjM4NDAsMjM4NDEsMjM4NDIsMjM4NDMsMjM4NDUsMjM4NDgsMjM4NTAsMjM4NTEsMjM4NTIsMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4NTksMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsMjM4NjcsMjM4NjgsMjM4NzEsMjM4NzIsMjM4NzMsMjM4NzQsMjM4NzUsMjM4NzYsMjM4NzcsMjM4NzgsMjM4ODAsMjM4ODEsMjM4ODUsMjM4ODYsMjM4ODcsMjM4ODgsMjM4ODksMjM4OTAsMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4OTcsMjM4OTgsMjM5MDAsMjM5MDIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDcsMjM5MDgsMjM5MDksMjM5MTAsMjM5MTEsMjM5MTIsMjM5MTQsMjM5MTcsMjM5MTgsMjM5MjAsMjM5MjEsMjM5MjIsMjM5MjMsMjM5MjUsMjM5MjYsMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5MzMsMjM5MzQsMjM5MzUsMjM5MzYsMjM5MzcsMjM5MzksMjM5NDAsMjM5NDEsMjM5NDIsMjM5NDMsMjM5NDQsMjM5NDUsMjM5NDYsMjM5NDcsMjM5NDgsMjM5NDksMjM5NTAsMjM5NTEsMjM5NTIsMjM5NTMsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NTgsMjM5NTksMjM5NjAsMjM5NjIsMjM5NjMsMjM5NjQsMjM5NjYsMjM5NjcsMjM5NjgsMjM5NjksMjM5NzAsMjM5NzEsMjM5NzIsMjM5NzMsMjM5NzQsMjM5NzUsMjM5NzYsMjM5NzcsMjM5NzgsMjM5NzksMjM5ODAsMjM5ODEsMjM5ODIsMjM5ODMsMjM5ODQsMjM5ODUsMjM5ODYsMjM5ODcsMjM5ODgsMjM5ODksMjM5OTAsMjM5OTIsMjM5OTMsMjM5OTQsMjM5OTUsMjM5OTYsMjM5OTcsMjM5OTgsMjM5OTksMjQwMDAsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgsMjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQsMjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEsMjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQwMjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQwNTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQwNjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMsMjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUsMjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIsMjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQxMzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQxNDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQxNjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcsMjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEsMjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQsMjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYsMjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQyMjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQyNDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMsMjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAsMjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYsMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMsMjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQzMDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQzMTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQzNDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgsMjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQsMjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUsMjQzODYsMjQzODcsMjQzODgsMjQzODksMjQzOTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIsMjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAsMjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIsMjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMsMjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMsMjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMsMjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQsMjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTksMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2NjcsMjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2NzgsMjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMsMjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUsMjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAsMjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEsMjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzksMjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYsMjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIsMjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYsMjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQsMjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5MjcsMjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMsMjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5NzksMjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIsMjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcsMjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUwMjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUwMzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAsMjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYsMjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMsMjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUwNzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUwOTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUxMDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUxMjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjksMjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYsMjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUsMjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUxODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUyMDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUyMTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUyMjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcsMjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQsMjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUyOTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUzMjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUzMzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUzNTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTksMjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMsMjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIsMjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAsMjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYsMjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMsMjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMsMjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcsMjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIsMjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1NzksMjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODksMjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEsMjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQsMjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2NzgsMjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcsMjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQsMjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAsMjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEsMjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTksMjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQsMjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEsMjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIsMjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYsMjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQsMjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEsMjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMsMjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEsMjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5NjksMjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYwMDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYwMTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgsMjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMsMjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcsMjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYwNzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYwOTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYxMDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYxMTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEsMjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYxNjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYxODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYxOTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMsMjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIsMjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDksMjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYyNTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYyODQsMjYyODUsMjYyODcsMjYyODgsMjYyODksMjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgsMjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUsMjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYzMjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYzMzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYzNDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcsMjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQsMjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUsMjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYsMjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUsMjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUsMjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgsMjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcsMjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEsMjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIsMjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQsMjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2NjgsMjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUsMjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEsMjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYsMjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEsMjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQsMjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEsMjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcsMjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYsMjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIsMjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUsMjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAsMjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5NjksMjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYsMjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUsMjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcwMTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcwMzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcwMzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcwNDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQsMjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjksMjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUsMjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMsMjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcwOTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcxMDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcxMTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcxMTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQsMjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIsMjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAsMjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcxNTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcxODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEsMjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUsMjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTksMjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcyMjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcyNDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcyNTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgsMjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIsMjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgsMjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcyOTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjczMDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQsMjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUsMjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAsMjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjczNjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjczNjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjczNzUsMjczNzYsMjczNzcsMjczNzgsMjczNzksMjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUsMjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIsMjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAsMjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQsMjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMsMjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQsMjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUsMjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgsMjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTksMjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQsMjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQsMjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcsMjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUsMjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYsMjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgsMjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMsMjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEsMjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcsMjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcsMjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUsMjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAsMjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIsMjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgwMDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgwMTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTksMjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUsMjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMsMjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgwNjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgwOTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgwOTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgxMTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYsMjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYsMjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQsMjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcsMjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgxNjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgxODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgxOTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgyMDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEsMjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUsMjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIsMjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEsMjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgyNTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgyNjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgyNjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgyNzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEsMjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgsMjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUsMjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMsMjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgzMjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgzMzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgzNDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQsMjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcsMjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcsMjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUsMjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUsMjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIsMjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEsMjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0NzksMjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAsMjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUsMjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEsMjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUsMjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAsMjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTksMjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAsMjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUsMjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEsMjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYsMjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3NzgsMjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEsMjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcsMjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcsMjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUsMjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQsMjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAsMjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUsMjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMsMjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjkwMDAsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTkwMDAsNTkwMDEsNTkwMDIsNTkwMDMsNTkwMDQsNTkwMDUsNTkwMDYsNTkwMDcsNTkwMDgsNTkwMDksNTkwMTAsNTkwMTEsNTkwMTIsNTkwMTMsNTkwMTQsNTkwMTUsNTkwMTYsNTkwMTcsNTkwMTgsNTkwMTksNTkwMjAsNTkwMjEsNTkwMjIsNTkwMjMsNTkwMjQsNTkwMjUsNTkwMjYsNTkwMjcsNTkwMjgsNTkwMjksNTkwMzAsNTkwMzEsNTkwMzIsNTkwMzMsNTkwMzQsNTkwMzUsNTkwMzYsNTkwMzcsNTkwMzgsNTkwMzksNTkwNDAsNTkwNDEsNTkwNDIsNTkwNDMsNTkwNDQsNTkwNDUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsNTkyNjEsNTkyNjIsNTkyNjMsNTkyNjQsNTkyNjUsNTkyNjYsNTkyNjcsNTkyNjgsNTkwNDYsNTkwNDcsNTkwNDgsNTkwNDksNTkwNTAsNTkwNTEsNTkwNTIsNTkwNTMsNTkwNTQsNTkwNTUsNTkwNTYsNTkwNTcsNTkwNTgsNTkwNTksNTkwNjAsNTkwNjEsNTkwNjIsNTkwNjMsNTkwNjQsNTkwNjUsNTkwNjYsNTkwNjcsNTkwNjgsNTkwNjksNTkwNzAsNTkwNzEsNTkwNzIsNTkwNzMsNTkwNzQsNTkwNzUsNTkwNzYsNTkwNzcsNTkwNzgsNTkwNzksNTkwODAsNTkwODEsNTkwODIsNTkwODMsNTkwODQsNTkwODUsNTkwODYsNTkwODcsNTkwODgsNTkwODksNTkwOTAsNTkwOTEsNTkwOTIsNTkwOTMsNTkwOTQsNTkwOTUsNTkwOTYsNTkwOTcsNTkwOTgsNTkwOTksNTkxMDAsNTkxMDEsNTkxMDIsNTkxMDMsNTkxMDQsNTkxMDUsNTkxMDYsNTkxMDcsNTkxMDgsNTkxMDksNTkxMTAsNTkxMTEsNTkxMTIsNTkxMTMsNTkxMTQsNTkxMTUsNTkxMTYsNTkxMTcsNTkxMTgsNTkxMTksNTkxMjAsNTkxMjEsNTkxMjIsNTkxMjMsNTkxMjQsNTkxMjUsNTkxMjYsNTkxMjcsNTkxMjgsNTkxMjksNTkxMzAsNTkxMzEsNTkxMzIsNTkxMzMsNTkxMzQsNTkxMzUsNTkxMzYsNTkxMzcsNTkxMzgsNTkxMzksNTkxNDAsNTkxNDEsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsNTkyNjksNTkyNzAsNTkyNzEsNTkyNzIsNTkyNzMsNTkyNzQsNTkyNzUsNTkyNzYsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksNTkyNzcsNTkyNzgsNTkyNzksNTkyODAsNTkyODEsNTkyODIsNTkyODMsNjUwNzcsNjUwNzgsNjUwODEsNjUwODIsNjUwODcsNjUwODgsNjUwODUsNjUwODYsNjUwODksNjUwOTAsNjUwOTEsNjUwOTIsNTkyODQsNTkyODUsNjUwODMsNjUwODQsNjUwNzksNjUwODAsNjUwNzMsNTkyODYsNjUwNzUsNjUwNzYsNTkyODcsNTkyODgsNTkyODksNTkyOTAsNTkyOTEsNTkyOTIsNTkyOTMsNTkyOTQsNTkyOTUsNTkxNDIsNTkxNDMsNTkxNDQsNTkxNDUsNTkxNDYsNTkxNDcsNTkxNDgsNTkxNDksNTkxNTAsNTkxNTEsNTkxNTIsNTkxNTMsNTkxNTQsNTkxNTUsNTkxNTYsNTkxNTcsNTkxNTgsNTkxNTksNTkxNjAsNTkxNjEsNTkxNjIsNTkxNjMsNTkxNjQsNTkxNjUsNTkxNjYsNTkxNjcsNTkxNjgsNTkxNjksNTkxNzAsNTkxNzEsNTkxNzIsNTkxNzMsNTkxNzQsNTkxNzUsNTkxNzYsNTkxNzcsNTkxNzgsNTkxNzksNTkxODAsNTkxODEsNTkxODIsNTkxODMsNTkxODQsNTkxODUsNTkxODYsNTkxODcsNTkxODgsNTkxODksNTkxOTAsNTkxOTEsNTkxOTIsNTkxOTMsNTkxOTQsNTkxOTUsNTkxOTYsNTkxOTcsNTkxOTgsNTkxOTksNTkyMDAsNTkyMDEsNTkyMDIsNTkyMDMsNTkyMDQsNTkyMDUsNTkyMDYsNTkyMDcsNTkyMDgsNTkyMDksNTkyMTAsNTkyMTEsNTkyMTIsNTkyMTMsNTkyMTQsNTkyMTUsNTkyMTYsNTkyMTcsNTkyMTgsNTkyMTksNTkyMjAsNTkyMjEsNTkyMjIsNTkyMjMsNTkyMjQsNTkyMjUsNTkyMjYsNTkyMjcsNTkyMjgsNTkyMjksNTkyMzAsNTkyMzEsNTkyMzIsNTkyMzMsNTkyMzQsNTkyMzUsNTkyMzYsNTkyMzcsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsNTkyOTYsNTkyOTcsNTkyOTgsNTkyOTksNTkzMDAsNTkzMDEsNTkzMDIsNTkzMDMsNTkzMDQsNTkzMDUsNTkzMDYsNTkzMDcsNTkzMDgsNTkzMDksNTkzMTAsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsNTkzMTEsNTkzMTIsNTkzMTMsNTkzMTQsNTkzMTUsNTkzMTYsNTkzMTcsNTkzMTgsNTkzMTksNTkzMjAsNTkzMjEsNTkzMjIsNTkzMjMsNzE0LDcxNSw3MjksODIxMSw4MjEzLDgyMjksODI0NSw4NDUzLDg0NTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NzI1LDg3MzUsODczOSw4Nzg2LDg4MDYsODgwNyw4ODk1LDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NTgxLDk1ODIsOTU4Myw5NTg0LDk1ODUsOTU4Niw5NTg3LDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjA5LDk2MTAsOTYxMSw5NjEyLDk2MTMsOTYxNCw5NjE1LDk2MTksOTYyMCw5NjIxLDk2NjAsOTY2MSw5Njk4LDk2OTksOTcwMCw5NzAxLDk3MzcsODg1MywxMjMwNiwxMjMxNywxMjMxOCw1OTMyNCw1OTMyNSw1OTMyNiw1OTMyNyw1OTMyOCw1OTMyOSw1OTMzMCw1OTMzMSw1OTMzMiw1OTMzMyw1OTMzNCwyNTcsMjI1LDQ2MiwyMjQsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsMjM0LDU5Myw3NzQzLDMyNCwzMjgsNTA1LDYwOSw1OTMzNyw1OTMzOCw1OTMzOSw1OTM0MCwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw1OTM0MSw1OTM0Miw1OTM0Myw1OTM0NCw1OTM0NSw1OTM0Niw1OTM0Nyw1OTM0OCw1OTM0OSw1OTM1MCw1OTM1MSw1OTM1Miw1OTM1Myw1OTM1NCw1OTM1NSw1OTM1Niw1OTM1Nyw1OTM1OCw1OTM1OSw1OTM2MCw1OTM2MSwxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwxMjk2MywxMzE5OCwxMzE5OSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNywxMzI1MiwxMzI2MiwxMzI2NSwxMzI2NiwxMzI2OSw2NTA3Miw2NTUwNiw2NTUwOCw1OTM2Miw4NDgxLDEyODQ5LDU5MzYzLDgyMDgsNTkzNjQsNTkzNjUsNTkzNjYsMTI1NDAsMTI0NDMsMTI0NDQsMTI1NDEsMTI1NDIsMTIyOTQsMTI0NDUsMTI0NDYsNjUwOTcsNjUwOTgsNjUwOTksNjUxMDAsNjUxMDEsNjUxMDIsNjUxMDMsNjUxMDQsNjUxMDUsNjUxMDYsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsNjUxMTksNjUxMjAsNjUxMjEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUxMjgsNjUxMjksNjUxMzAsNjUxMzEsMTIzNTAsMTIyNzIsMTIyNzMsMTIyNzQsMTIyNzUsMTIyNzYsMTIyNzcsMTIyNzgsMTIyNzksMTIyODAsMTIyODEsMTIyODIsMTIyODMsMTIyOTUsNTkzODAsNTkzODEsNTkzODIsNTkzODMsNTkzODQsNTkzODUsNTkzODYsNTkzODcsNTkzODgsNTkzODksNTkzOTAsNTkzOTEsNTkzOTIsOTQ3Miw5NDczLDk0NzQsOTQ3NSw5NDc2LDk0NzcsOTQ3OCw5NDc5LDk0ODAsOTQ4MSw5NDgyLDk0ODMsOTQ4NCw5NDg1LDk0ODYsOTQ4Nyw5NDg4LDk0ODksOTQ5MCw5NDkxLDk0OTIsOTQ5Myw5NDk0LDk0OTUsOTQ5Niw5NDk3LDk0OTgsOTQ5OSw5NTAwLDk1MDEsOTUwMiw5NTAzLDk1MDQsOTUwNSw5NTA2LDk1MDcsOTUwOCw5NTA5LDk1MTAsOTUxMSw5NTEyLDk1MTMsOTUxNCw5NTE1LDk1MTYsOTUxNyw5NTE4LDk1MTksOTUyMCw5NTIxLDk1MjIsOTUyMyw5NTI0LDk1MjUsOTUyNiw5NTI3LDk1MjgsOTUyOSw5NTMwLDk1MzEsOTUzMiw5NTMzLDk1MzQsOTUzNSw5NTM2LDk1MzcsOTUzOCw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsOTU0Nyw1OTM5Myw1OTM5NCw1OTM5NSw1OTM5Niw1OTM5Nyw1OTM5OCw1OTM5OSw1OTQwMCw1OTQwMSw1OTQwMiw1OTQwMyw1OTQwNCw1OTQwNSw1OTQwNiw1OTQwNywyOTQwNCwyOTQwNSwyOTQwNywyOTQxMCwyOTQxMSwyOTQxMiwyOTQxMywyOTQxNCwyOTQxNSwyOTQxOCwyOTQxOSwyOTQyOSwyOTQzMCwyOTQzMywyOTQzNywyOTQzOCwyOTQzOSwyOTQ0MCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NiwyOTQ0NywyOTQ0OCwyOTQ0OSwyOTQ1MSwyOTQ1MiwyOTQ1MywyOTQ1NSwyOTQ1NiwyOTQ1NywyOTQ1OCwyOTQ2MCwyOTQ2NCwyOTQ2NSwyOTQ2NiwyOTQ3MSwyOTQ3MiwyOTQ3NSwyOTQ3NiwyOTQ3OCwyOTQ3OSwyOTQ4MCwyOTQ4NSwyOTQ4NywyOTQ4OCwyOTQ5MCwyOTQ5MSwyOTQ5MywyOTQ5NCwyOTQ5OCwyOTQ5OSwyOTUwMCwyOTUwMSwyOTUwNCwyOTUwNSwyOTUwNiwyOTUwNywyOTUwOCwyOTUwOSwyOTUxMCwyOTUxMSwyOTUxMiwyOTUxMywyOTUxNCwyOTUxNSwyOTUxNiwyOTUxOCwyOTUxOSwyOTUyMSwyOTUyMywyOTUyNCwyOTUyNSwyOTUyNiwyOTUyOCwyOTUyOSwyOTUzMCwyOTUzMSwyOTUzMiwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNywyOTUzOCwyOTUzOSwyOTU0MCwyOTU0MSwyOTU0MiwyOTU0MywyOTU0NCwyOTU0NSwyOTU0NiwyOTU0NywyOTU1MCwyOTU1MiwyOTU1Myw1NzM0NCw1NzM0NSw1NzM0Niw1NzM0Nyw1NzM0OCw1NzM0OSw1NzM1MCw1NzM1MSw1NzM1Miw1NzM1Myw1NzM1NCw1NzM1NSw1NzM1Niw1NzM1Nyw1NzM1OCw1NzM1OSw1NzM2MCw1NzM2MSw1NzM2Miw1NzM2Myw1NzM2NCw1NzM2NSw1NzM2Niw1NzM2Nyw1NzM2OCw1NzM2OSw1NzM3MCw1NzM3MSw1NzM3Miw1NzM3Myw1NzM3NCw1NzM3NSw1NzM3Niw1NzM3Nyw1NzM3OCw1NzM3OSw1NzM4MCw1NzM4MSw1NzM4Miw1NzM4Myw1NzM4NCw1NzM4NSw1NzM4Niw1NzM4Nyw1NzM4OCw1NzM4OSw1NzM5MCw1NzM5MSw1NzM5Miw1NzM5Myw1NzM5NCw1NzM5NSw1NzM5Niw1NzM5Nyw1NzM5OCw1NzM5OSw1NzQwMCw1NzQwMSw1NzQwMiw1NzQwMyw1NzQwNCw1NzQwNSw1NzQwNiw1NzQwNyw1NzQwOCw1NzQwOSw1NzQxMCw1NzQxMSw1NzQxMiw1NzQxMyw1NzQxNCw1NzQxNSw1NzQxNiw1NzQxNyw1NzQxOCw1NzQxOSw1NzQyMCw1NzQyMSw1NzQyMiw1NzQyMyw1NzQyNCw1NzQyNSw1NzQyNiw1NzQyNyw1NzQyOCw1NzQyOSw1NzQzMCw1NzQzMSw1NzQzMiw1NzQzMyw1NzQzNCw1NzQzNSw1NzQzNiw1NzQzNywyOTU1NCwyOTU1NSwyOTU1NiwyOTU1NywyOTU1OCwyOTU1OSwyOTU2MCwyOTU2MSwyOTU2MiwyOTU2MywyOTU2NCwyOTU2NSwyOTU2NywyOTU2OCwyOTU2OSwyOTU3MCwyOTU3MSwyOTU3MywyOTU3NCwyOTU3NiwyOTU3OCwyOTU4MCwyOTU4MSwyOTU4MywyOTU4NCwyOTU4NiwyOTU4NywyOTU4OCwyOTU4OSwyOTU5MSwyOTU5MiwyOTU5MywyOTU5NCwyOTU5NiwyOTU5NywyOTU5OCwyOTYwMCwyOTYwMSwyOTYwMywyOTYwNCwyOTYwNSwyOTYwNiwyOTYwNywyOTYwOCwyOTYxMCwyOTYxMiwyOTYxMywyOTYxNywyOTYyMCwyOTYyMSwyOTYyMiwyOTYyNCwyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMCwyOTYzMSwyOTYzMywyOTYzNSwyOTYzNiwyOTYzNywyOTYzOCwyOTYzOSwyOTY0MywyOTY0NCwyOTY0NiwyOTY1MCwyOTY1MSwyOTY1MiwyOTY1MywyOTY1NCwyOTY1NSwyOTY1NiwyOTY1OCwyOTY1OSwyOTY2MCwyOTY2MSwyOTY2MywyOTY2NSwyOTY2NiwyOTY2NywyOTY2OCwyOTY3MCwyOTY3MiwyOTY3NCwyOTY3NSwyOTY3NiwyOTY3OCwyOTY3OSwyOTY4MCwyOTY4MSwyOTY4MywyOTY4NCwyOTY4NSwyOTY4NiwyOTY4Nyw1NzQzOCw1NzQzOSw1NzQ0MCw1NzQ0MSw1NzQ0Miw1NzQ0Myw1NzQ0NCw1NzQ0NSw1NzQ0Niw1NzQ0Nyw1NzQ0OCw1NzQ0OSw1NzQ1MCw1NzQ1MSw1NzQ1Miw1NzQ1Myw1NzQ1NCw1NzQ1NSw1NzQ1Niw1NzQ1Nyw1NzQ1OCw1NzQ1OSw1NzQ2MCw1NzQ2MSw1NzQ2Miw1NzQ2Myw1NzQ2NCw1NzQ2NSw1NzQ2Niw1NzQ2Nyw1NzQ2OCw1NzQ2OSw1NzQ3MCw1NzQ3MSw1NzQ3Miw1NzQ3Myw1NzQ3NCw1NzQ3NSw1NzQ3Niw1NzQ3Nyw1NzQ3OCw1NzQ3OSw1NzQ4MCw1NzQ4MSw1NzQ4Miw1NzQ4Myw1NzQ4NCw1NzQ4NSw1NzQ4Niw1NzQ4Nyw1NzQ4OCw1NzQ4OSw1NzQ5MCw1NzQ5MSw1NzQ5Miw1NzQ5Myw1NzQ5NCw1NzQ5NSw1NzQ5Niw1NzQ5Nyw1NzQ5OCw1NzQ5OSw1NzUwMCw1NzUwMSw1NzUwMiw1NzUwMyw1NzUwNCw1NzUwNSw1NzUwNiw1NzUwNyw1NzUwOCw1NzUwOSw1NzUxMCw1NzUxMSw1NzUxMiw1NzUxMyw1NzUxNCw1NzUxNSw1NzUxNiw1NzUxNyw1NzUxOCw1NzUxOSw1NzUyMCw1NzUyMSw1NzUyMiw1NzUyMyw1NzUyNCw1NzUyNSw1NzUyNiw1NzUyNyw1NzUyOCw1NzUyOSw1NzUzMCw1NzUzMSwyOTY4OCwyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MiwyOTY5MywyOTY5NCwyOTY5NSwyOTY5NiwyOTY5NywyOTY5OCwyOTcwMCwyOTcwMywyOTcwNCwyOTcwNywyOTcwOCwyOTcwOSwyOTcxMCwyOTcxMywyOTcxNCwyOTcxNSwyOTcxNiwyOTcxNywyOTcxOCwyOTcxOSwyOTcyMCwyOTcyMSwyOTcyNCwyOTcyNSwyOTcyNiwyOTcyNywyOTcyOCwyOTcyOSwyOTczMSwyOTczMiwyOTczNSwyOTczNywyOTczOSwyOTc0MSwyOTc0MywyOTc0NSwyOTc0NiwyOTc1MSwyOTc1MiwyOTc1MywyOTc1NCwyOTc1NSwyOTc1NywyOTc1OCwyOTc1OSwyOTc2MCwyOTc2MiwyOTc2MywyOTc2NCwyOTc2NSwyOTc2NiwyOTc2NywyOTc2OCwyOTc2OSwyOTc3MCwyOTc3MSwyOTc3MiwyOTc3MywyOTc3NCwyOTc3NSwyOTc3NiwyOTc3NywyOTc3OCwyOTc3OSwyOTc4MCwyOTc4MiwyOTc4NCwyOTc4OSwyOTc5MiwyOTc5MywyOTc5NCwyOTc5NSwyOTc5NiwyOTc5NywyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMSwyOTgwMiwyOTgwMywyOTgwNCwyOTgwNiwyOTgwNywyOTgwOSwyOTgxMCwyOTgxMSwyOTgxMiwyOTgxMywyOTgxNiwyOTgxNywyOTgxOCw1NzUzMiw1NzUzMyw1NzUzNCw1NzUzNSw1NzUzNiw1NzUzNyw1NzUzOCw1NzUzOSw1NzU0MCw1NzU0MSw1NzU0Miw1NzU0Myw1NzU0NCw1NzU0NSw1NzU0Niw1NzU0Nyw1NzU0OCw1NzU0OSw1NzU1MCw1NzU1MSw1NzU1Miw1NzU1Myw1NzU1NCw1NzU1NSw1NzU1Niw1NzU1Nyw1NzU1OCw1NzU1OSw1NzU2MCw1NzU2MSw1NzU2Miw1NzU2Myw1NzU2NCw1NzU2NSw1NzU2Niw1NzU2Nyw1NzU2OCw1NzU2OSw1NzU3MCw1NzU3MSw1NzU3Miw1NzU3Myw1NzU3NCw1NzU3NSw1NzU3Niw1NzU3Nyw1NzU3OCw1NzU3OSw1NzU4MCw1NzU4MSw1NzU4Miw1NzU4Myw1NzU4NCw1NzU4NSw1NzU4Niw1NzU4Nyw1NzU4OCw1NzU4OSw1NzU5MCw1NzU5MSw1NzU5Miw1NzU5Myw1NzU5NCw1NzU5NSw1NzU5Niw1NzU5Nyw1NzU5OCw1NzU5OSw1NzYwMCw1NzYwMSw1NzYwMiw1NzYwMyw1NzYwNCw1NzYwNSw1NzYwNiw1NzYwNyw1NzYwOCw1NzYwOSw1NzYxMCw1NzYxMSw1NzYxMiw1NzYxMyw1NzYxNCw1NzYxNSw1NzYxNiw1NzYxNyw1NzYxOCw1NzYxOSw1NzYyMCw1NzYyMSw1NzYyMiw1NzYyMyw1NzYyNCw1NzYyNSwyOTgxOSwyOTgyMCwyOTgyMSwyOTgyMywyOTgyNiwyOTgyOCwyOTgyOSwyOTgzMCwyOTgzMiwyOTgzMywyOTgzNCwyOTgzNiwyOTgzNywyOTgzOSwyOTg0MSwyOTg0MiwyOTg0MywyOTg0NCwyOTg0NSwyOTg0NiwyOTg0NywyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MSwyOTg1MywyOTg1NSwyOTg1NiwyOTg1NywyOTg1OCwyOTg1OSwyOTg2MCwyOTg2MSwyOTg2MiwyOTg2NiwyOTg2NywyOTg2OCwyOTg2OSwyOTg3MCwyOTg3MSwyOTg3MiwyOTg3MywyOTg3NCwyOTg3NSwyOTg3NiwyOTg3NywyOTg3OCwyOTg3OSwyOTg4MCwyOTg4MSwyOTg4MywyOTg4NCwyOTg4NSwyOTg4NiwyOTg4NywyOTg4OCwyOTg4OSwyOTg5MCwyOTg5MSwyOTg5MiwyOTg5MywyOTg5NCwyOTg5NSwyOTg5NiwyOTg5NywyOTg5OCwyOTg5OSwyOTkwMCwyOTkwMSwyOTkwMiwyOTkwMywyOTkwNCwyOTkwNSwyOTkwNywyOTkwOCwyOTkwOSwyOTkxMCwyOTkxMSwyOTkxMiwyOTkxMywyOTkxNCwyOTkxNSwyOTkxNywyOTkxOSwyOTkyMSwyOTkyNSwyOTkyNywyOTkyOCwyOTkyOSwyOTkzMCwyOTkzMSwyOTkzMiwyOTkzMywyOTkzNiwyOTkzNywyOTkzOCw1NzYyNiw1NzYyNyw1NzYyOCw1NzYyOSw1NzYzMCw1NzYzMSw1NzYzMiw1NzYzMyw1NzYzNCw1NzYzNSw1NzYzNiw1NzYzNyw1NzYzOCw1NzYzOSw1NzY0MCw1NzY0MSw1NzY0Miw1NzY0Myw1NzY0NCw1NzY0NSw1NzY0Niw1NzY0Nyw1NzY0OCw1NzY0OSw1NzY1MCw1NzY1MSw1NzY1Miw1NzY1Myw1NzY1NCw1NzY1NSw1NzY1Niw1NzY1Nyw1NzY1OCw1NzY1OSw1NzY2MCw1NzY2MSw1NzY2Miw1NzY2Myw1NzY2NCw1NzY2NSw1NzY2Niw1NzY2Nyw1NzY2OCw1NzY2OSw1NzY3MCw1NzY3MSw1NzY3Miw1NzY3Myw1NzY3NCw1NzY3NSw1NzY3Niw1NzY3Nyw1NzY3OCw1NzY3OSw1NzY4MCw1NzY4MSw1NzY4Miw1NzY4Myw1NzY4NCw1NzY4NSw1NzY4Niw1NzY4Nyw1NzY4OCw1NzY4OSw1NzY5MCw1NzY5MSw1NzY5Miw1NzY5Myw1NzY5NCw1NzY5NSw1NzY5Niw1NzY5Nyw1NzY5OCw1NzY5OSw1NzcwMCw1NzcwMSw1NzcwMiw1NzcwMyw1NzcwNCw1NzcwNSw1NzcwNiw1NzcwNyw1NzcwOCw1NzcwOSw1NzcxMCw1NzcxMSw1NzcxMiw1NzcxMyw1NzcxNCw1NzcxNSw1NzcxNiw1NzcxNyw1NzcxOCw1NzcxOSwyOTkzOSwyOTk0MSwyOTk0NCwyOTk0NSwyOTk0NiwyOTk0NywyOTk0OCwyOTk0OSwyOTk1MCwyOTk1MiwyOTk1MywyOTk1NCwyOTk1NSwyOTk1NywyOTk1OCwyOTk1OSwyOTk2MCwyOTk2MSwyOTk2MiwyOTk2MywyOTk2NCwyOTk2NiwyOTk2OCwyOTk3MCwyOTk3MiwyOTk3MywyOTk3NCwyOTk3NSwyOTk3OSwyOTk4MSwyOTk4MiwyOTk4NCwyOTk4NSwyOTk4NiwyOTk4NywyOTk4OCwyOTk5MCwyOTk5MSwyOTk5NCwyOTk5OCwzMDAwNCwzMDAwNiwzMDAwOSwzMDAxMiwzMDAxMywzMDAxNSwzMDAxNywzMDAxOCwzMDAxOSwzMDAyMCwzMDAyMiwzMDAyMywzMDAyNSwzMDAyNiwzMDAyOSwzMDAzMiwzMDAzMywzMDAzNCwzMDAzNSwzMDAzNywzMDAzOCwzMDAzOSwzMDA0MCwzMDA0NSwzMDA0NiwzMDA0NywzMDA0OCwzMDA0OSwzMDA1MCwzMDA1MSwzMDA1MiwzMDA1NSwzMDA1NiwzMDA1NywzMDA1OSwzMDA2MCwzMDA2MSwzMDA2MiwzMDA2MywzMDA2NCwzMDA2NSwzMDA2NywzMDA2OSwzMDA3MCwzMDA3MSwzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MCwzMDA4MSwzMDA4MiwzMDA4NCwzMDA4NSwzMDA4Nyw1NzcyMCw1NzcyMSw1NzcyMiw1NzcyMyw1NzcyNCw1NzcyNSw1NzcyNiw1NzcyNyw1NzcyOCw1NzcyOSw1NzczMCw1NzczMSw1NzczMiw1NzczMyw1NzczNCw1NzczNSw1NzczNiw1NzczNyw1NzczOCw1NzczOSw1Nzc0MCw1Nzc0MSw1Nzc0Miw1Nzc0Myw1Nzc0NCw1Nzc0NSw1Nzc0Niw1Nzc0Nyw1Nzc0OCw1Nzc0OSw1Nzc1MCw1Nzc1MSw1Nzc1Miw1Nzc1Myw1Nzc1NCw1Nzc1NSw1Nzc1Niw1Nzc1Nyw1Nzc1OCw1Nzc1OSw1Nzc2MCw1Nzc2MSw1Nzc2Miw1Nzc2Myw1Nzc2NCw1Nzc2NSw1Nzc2Niw1Nzc2Nyw1Nzc2OCw1Nzc2OSw1Nzc3MCw1Nzc3MSw1Nzc3Miw1Nzc3Myw1Nzc3NCw1Nzc3NSw1Nzc3Niw1Nzc3Nyw1Nzc3OCw1Nzc3OSw1Nzc4MCw1Nzc4MSw1Nzc4Miw1Nzc4Myw1Nzc4NCw1Nzc4NSw1Nzc4Niw1Nzc4Nyw1Nzc4OCw1Nzc4OSw1Nzc5MCw1Nzc5MSw1Nzc5Miw1Nzc5Myw1Nzc5NCw1Nzc5NSw1Nzc5Niw1Nzc5Nyw1Nzc5OCw1Nzc5OSw1NzgwMCw1NzgwMSw1NzgwMiw1NzgwMyw1NzgwNCw1NzgwNSw1NzgwNiw1NzgwNyw1NzgwOCw1NzgwOSw1NzgxMCw1NzgxMSw1NzgxMiw1NzgxMywzMDA4OCwzMDA4OSwzMDA5MCwzMDA5MiwzMDA5MywzMDA5NCwzMDA5NiwzMDA5OSwzMDEwMSwzMDEwNCwzMDEwNywzMDEwOCwzMDExMCwzMDExNCwzMDExOCwzMDExOSwzMDEyMCwzMDEyMSwzMDEyMiwzMDEyNSwzMDEzNCwzMDEzNSwzMDEzOCwzMDEzOSwzMDE0MywzMDE0NCwzMDE0NSwzMDE1MCwzMDE1NSwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2MCwzMDE2MSwzMDE2MywzMDE2NywzMDE2OSwzMDE3MCwzMDE3MiwzMDE3MywzMDE3NSwzMDE3NiwzMDE3NywzMDE4MSwzMDE4NSwzMDE4OCwzMDE4OSwzMDE5MCwzMDE5MSwzMDE5NCwzMDE5NSwzMDE5NywzMDE5OCwzMDE5OSwzMDIwMCwzMDIwMiwzMDIwMywzMDIwNSwzMDIwNiwzMDIxMCwzMDIxMiwzMDIxNCwzMDIxNSwzMDIxNiwzMDIxNywzMDIxOSwzMDIyMSwzMDIyMiwzMDIyMywzMDIyNSwzMDIyNiwzMDIyNywzMDIyOCwzMDIzMCwzMDIzNCwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MSwzMDI0MywzMDI0NywzMDI0OCwzMDI1MiwzMDI1NCwzMDI1NSwzMDI1NywzMDI1OCwzMDI2MiwzMDI2MywzMDI2NSwzMDI2NiwzMDI2NywzMDI2OSwzMDI3MywzMDI3NCwzMDI3Niw1NzgxNCw1NzgxNSw1NzgxNiw1NzgxNyw1NzgxOCw1NzgxOSw1NzgyMCw1NzgyMSw1NzgyMiw1NzgyMyw1NzgyNCw1NzgyNSw1NzgyNiw1NzgyNyw1NzgyOCw1NzgyOSw1NzgzMCw1NzgzMSw1NzgzMiw1NzgzMyw1NzgzNCw1NzgzNSw1NzgzNiw1NzgzNyw1NzgzOCw1NzgzOSw1Nzg0MCw1Nzg0MSw1Nzg0Miw1Nzg0Myw1Nzg0NCw1Nzg0NSw1Nzg0Niw1Nzg0Nyw1Nzg0OCw1Nzg0OSw1Nzg1MCw1Nzg1MSw1Nzg1Miw1Nzg1Myw1Nzg1NCw1Nzg1NSw1Nzg1Niw1Nzg1Nyw1Nzg1OCw1Nzg1OSw1Nzg2MCw1Nzg2MSw1Nzg2Miw1Nzg2Myw1Nzg2NCw1Nzg2NSw1Nzg2Niw1Nzg2Nyw1Nzg2OCw1Nzg2OSw1Nzg3MCw1Nzg3MSw1Nzg3Miw1Nzg3Myw1Nzg3NCw1Nzg3NSw1Nzg3Niw1Nzg3Nyw1Nzg3OCw1Nzg3OSw1Nzg4MCw1Nzg4MSw1Nzg4Miw1Nzg4Myw1Nzg4NCw1Nzg4NSw1Nzg4Niw1Nzg4Nyw1Nzg4OCw1Nzg4OSw1Nzg5MCw1Nzg5MSw1Nzg5Miw1Nzg5Myw1Nzg5NCw1Nzg5NSw1Nzg5Niw1Nzg5Nyw1Nzg5OCw1Nzg5OSw1NzkwMCw1NzkwMSw1NzkwMiw1NzkwMyw1NzkwNCw1NzkwNSw1NzkwNiw1NzkwNywzMDI3NywzMDI3OCwzMDI3OSwzMDI4MCwzMDI4MSwzMDI4MiwzMDI4MywzMDI4NiwzMDI4NywzMDI4OCwzMDI4OSwzMDI5MCwzMDI5MSwzMDI5MywzMDI5NSwzMDI5NiwzMDI5NywzMDI5OCwzMDI5OSwzMDMwMSwzMDMwMywzMDMwNCwzMDMwNSwzMDMwNiwzMDMwOCwzMDMwOSwzMDMxMCwzMDMxMSwzMDMxMiwzMDMxMywzMDMxNCwzMDMxNiwzMDMxNywzMDMxOCwzMDMyMCwzMDMyMSwzMDMyMiwzMDMyMywzMDMyNCwzMDMyNSwzMDMyNiwzMDMyNywzMDMyOSwzMDMzMCwzMDMzMiwzMDMzNSwzMDMzNiwzMDMzNywzMDMzOSwzMDM0MSwzMDM0NSwzMDM0NiwzMDM0OCwzMDM0OSwzMDM1MSwzMDM1MiwzMDM1NCwzMDM1NiwzMDM1NywzMDM1OSwzMDM2MCwzMDM2MiwzMDM2MywzMDM2NCwzMDM2NSwzMDM2NiwzMDM2NywzMDM2OCwzMDM2OSwzMDM3MCwzMDM3MSwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3NywzMDM3OCwzMDM3OSwzMDM4MCwzMDM4MSwzMDM4MywzMDM4NCwzMDM4NywzMDM4OSwzMDM5MCwzMDM5MSwzMDM5MiwzMDM5MywzMDM5NCwzMDM5NSwzMDM5NiwzMDM5NywzMDM5OCwzMDQwMCwzMDQwMSwzMDQwMywyMTgzNCwzODQ2MywyMjQ2NywyNTM4NCwyMTcxMCwyMTc2OSwyMTY5NiwzMDM1MywzMDI4NCwzNDEwOCwzMDcwMiwzMzQwNiwzMDg2MSwyOTIzMywzODU1MiwzODc5NywyNzY4OCwyMzQzMywyMDQ3NCwyNTM1MywyNjI2MywyMzczNiwzMzAxOCwyNjY5NiwzMjk0MiwyNjExNCwzMDQxNCwyMDk4NSwyNTk0MiwyOTEwMCwzMjc1MywzNDk0OCwyMDY1OCwyMjg4NSwyNTAzNCwyODU5NSwzMzQ1MywyNTQyMCwyNTE3MCwyMTQ4NSwyMTU0MywzMTQ5NCwyMDg0MywzMDExNiwyNDA1MiwyNTMwMCwzNjI5OSwzODc3NCwyNTIyNiwzMjc5MywyMjM2NSwzODcxMiwzMjYxMCwyOTI0MCwzMDMzMywyNjU3NSwzMDMzNCwyNTY3MCwyMDMzNiwzNjEzMywyNTMwOCwzMTI1NSwyNjAwMSwyOTY3NywyNTY0NCwyNTIwMywzMzMyNCwzOTA0MSwyNjQ5NSwyOTI1NiwyNTE5OCwyNTI5MiwyMDI3NiwyOTkyMywyMTMyMiwyMTE1MCwzMjQ1OCwzNzAzMCwyNDExMCwyNjc1OCwyNzAzNiwzMzE1MiwzMjQ2NSwyNjgzNCwzMDkxNywzNDQ0NCwzODIyNSwyMDYyMSwzNTg3NiwzMzUwMiwzMjk5MCwyMTI1MywzNTA5MCwyMTA5MywzMDQwNCwzMDQwNywzMDQwOSwzMDQxMSwzMDQxMiwzMDQxOSwzMDQyMSwzMDQyNSwzMDQyNiwzMDQyOCwzMDQyOSwzMDQzMCwzMDQzMiwzMDQzMywzMDQzNCwzMDQzNSwzMDQzNiwzMDQzOCwzMDQzOSwzMDQ0MCwzMDQ0MSwzMDQ0MiwzMDQ0MywzMDQ0NCwzMDQ0NSwzMDQ0OCwzMDQ1MSwzMDQ1MywzMDQ1NCwzMDQ1NSwzMDQ1OCwzMDQ1OSwzMDQ2MSwzMDQ2MywzMDQ2NCwzMDQ2NiwzMDQ2NywzMDQ2OSwzMDQ3MCwzMDQ3NCwzMDQ3NiwzMDQ3OCwzMDQ3OSwzMDQ4MCwzMDQ4MSwzMDQ4MiwzMDQ4MywzMDQ4NCwzMDQ4NSwzMDQ4NiwzMDQ4NywzMDQ4OCwzMDQ5MSwzMDQ5MiwzMDQ5MywzMDQ5NCwzMDQ5NywzMDQ5OSwzMDUwMCwzMDUwMSwzMDUwMywzMDUwNiwzMDUwNywzMDUwOCwzMDUxMCwzMDUxMiwzMDUxMywzMDUxNCwzMDUxNSwzMDUxNiwzMDUyMSwzMDUyMywzMDUyNSwzMDUyNiwzMDUyNywzMDUzMCwzMDUzMiwzMDUzMywzMDUzNCwzMDUzNiwzMDUzNywzMDUzOCwzMDUzOSwzMDU0MCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU0NywzMDU0OCwzMDU0OSwzMDU1MCwzMDU1MSwzMDU1MiwzMDU1MywzMDU1NiwzNDE4MCwzODY0OSwyMDQ0NSwyMjU2MSwzOTI4MSwyMzQ1MywyNTI2NSwyNTI1MywyNjI5MiwzNTk2MSw0MDA3NywyOTE5MCwyNjQ3OSwzMDg2NSwyNDc1NCwyMTMyOSwyMTI3MSwzNjc0NCwzMjk3MiwzNjEyNSwzODA0OSwyMDQ5MywyOTM4NCwyMjc5MSwyNDgxMSwyODk1MywzNDk4NywyMjg2OCwzMzUxOSwyNjQxMiwzMTUyOCwyMzg0OSwzMjUwMywyOTk5NywyNzg5MywzNjQ1NCwzNjg1NiwzNjkyNCw0MDc2MywyNzYwNCwzNzE0NSwzMTUwOCwyNDQ0NCwzMDg4NywzNDAwNiwzNDEwOSwyNzYwNSwyNzYwOSwyNzYwNiwyNDA2NSwyNDE5OSwzMDIwMSwzODM4MSwyNTk0OSwyNDMzMCwyNDUxNywzNjc2NywyMjcyMSwzMzIxOCwzNjk5MSwzODQ5MSwzODgyOSwzNjc5MywzMjUzNCwzNjE0MCwyNTE1MywyMDQxNSwyMTQ2NCwyMTM0MiwzNjc3NiwzNjc3NywzNjc3OSwzNjk0MSwyNjYzMSwyNDQyNiwzMzE3NiwzNDkyMCw0MDE1MCwyNDk3MSwyMTAzNSwzMDI1MCwyNDQyOCwyNTk5NiwyODYyNiwyODM5MiwyMzQ4NiwyNTY3MiwyMDg1MywyMDkxMiwyNjU2NCwxOTk5MywzMTE3NywzOTI5MiwyODg1MSwzMDU1NywzMDU1OCwzMDU1OSwzMDU2MCwzMDU2NCwzMDU2NywzMDU2OSwzMDU3MCwzMDU3MywzMDU3NCwzMDU3NSwzMDU3NiwzMDU3NywzMDU3OCwzMDU3OSwzMDU4MCwzMDU4MSwzMDU4MiwzMDU4MywzMDU4NCwzMDU4NiwzMDU4NywzMDU4OCwzMDU5MywzMDU5NCwzMDU5NSwzMDU5OCwzMDU5OSwzMDYwMCwzMDYwMSwzMDYwMiwzMDYwMywzMDYwNywzMDYwOCwzMDYxMSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxNSwzMDYxNiwzMDYxNywzMDYxOCwzMDYxOSwzMDYyMCwzMDYyMSwzMDYyMiwzMDYyNSwzMDYyNywzMDYyOCwzMDYzMCwzMDYzMiwzMDYzNSwzMDYzNywzMDYzOCwzMDYzOSwzMDY0MSwzMDY0MiwzMDY0NCwzMDY0NiwzMDY0NywzMDY0OCwzMDY0OSwzMDY1MCwzMDY1MiwzMDY1NCwzMDY1NiwzMDY1NywzMDY1OCwzMDY1OSwzMDY2MCwzMDY2MSwzMDY2MiwzMDY2MywzMDY2NCwzMDY2NSwzMDY2NiwzMDY2NywzMDY2OCwzMDY3MCwzMDY3MSwzMDY3MiwzMDY3MywzMDY3NCwzMDY3NSwzMDY3NiwzMDY3NywzMDY3OCwzMDY4MCwzMDY4MSwzMDY4MiwzMDY4NSwzMDY4NiwzMDY4NywzMDY4OCwzMDY4OSwzMDY5MiwzMDE0OSwyNDE4MiwyOTYyNywzMzc2MCwyNTc3MywyNTMyMCwzODA2OSwyNzg3NCwyMTMzOCwyMTE4NywyNTYxNSwzODA4MiwzMTYzNiwyMDI3MSwyNDA5MSwzMzMzNCwzMzA0NiwzMzE2MiwyODE5NiwyNzg1MCwzOTUzOSwyNTQyOSwyMTM0MCwyMTc1NCwzNDkxNywyMjQ5NiwxOTk4MSwyNDA2NywyNzQ5MywzMTgwNywzNzA5NiwyNDU5OCwyNTgzMCwyOTQ2OCwzNTAwOSwyNjQ0OCwyNTE2NSwzNjEzMCwzMDU3MiwzNjM5MywzNzMxOSwyNDQyNSwzMzc1NiwzNDA4MSwzOTE4NCwyMTQ0MiwzNDQ1MywyNzUzMSwyNDgxMywyNDgwOCwyODc5OSwzMzQ4NSwzMzMyOSwyMDE3OSwyNzgxNSwzNDI1NSwyNTgwNSwzMTk2MSwyNzEzMywyNjM2MSwzMzYwOSwyMTM5NywzMTU3NCwyMDM5MSwyMDg3NiwyNzk3OSwyMzYxOCwzNjQ2MSwyNTU1NCwyMTQ0OSwzMzU4MCwzMzU5MCwyNjU5NywzMDkwMCwyNTY2MSwyMzUxOSwyMzcwMCwyNDA0NiwzNTgxNSwyNTI4NiwyNjYxMiwzNTk2MiwyNTYwMCwyNTUzMCwzNDYzMywzOTMwNywzNTg2MywzMjU0NCwzODEzMCwyMDEzNSwzODQxNiwzOTA3NiwyNjEyNCwyOTQ2MiwzMDY5NCwzMDY5NiwzMDY5OCwzMDcwMywzMDcwNCwzMDcwNSwzMDcwNiwzMDcwOCwzMDcwOSwzMDcxMSwzMDcxMywzMDcxNCwzMDcxNSwzMDcxNiwzMDcyMywzMDcyNCwzMDcyNSwzMDcyNiwzMDcyNywzMDcyOCwzMDczMCwzMDczMSwzMDczNCwzMDczNSwzMDczNiwzMDczOSwzMDc0MSwzMDc0NSwzMDc0NywzMDc1MCwzMDc1MiwzMDc1MywzMDc1NCwzMDc1NiwzMDc2MCwzMDc2MiwzMDc2MywzMDc2NiwzMDc2NywzMDc2OSwzMDc3MCwzMDc3MSwzMDc3MywzMDc3NCwzMDc4MSwzMDc4MywzMDc4NSwzMDc4NiwzMDc4NywzMDc4OCwzMDc5MCwzMDc5MiwzMDc5MywzMDc5NCwzMDc5NSwzMDc5NywzMDc5OSwzMDgwMSwzMDgwMywzMDgwNCwzMDgwOCwzMDgwOSwzMDgxMCwzMDgxMSwzMDgxMiwzMDgxNCwzMDgxNSwzMDgxNiwzMDgxNywzMDgxOCwzMDgxOSwzMDgyMCwzMDgyMSwzMDgyMiwzMDgyMywzMDgyNCwzMDgyNSwzMDgzMSwzMDgzMiwzMDgzMywzMDgzNCwzMDgzNSwzMDgzNiwzMDgzNywzMDgzOCwzMDg0MCwzMDg0MSwzMDg0MiwzMDg0MywzMDg0NSwzMDg0NiwzMDg0NywzMDg0OCwzMDg0OSwzMDg1MCwzMDg1MSwyMjMzMCwyMzU4MSwyNDEyMCwzODI3MSwyMDYwNywzMjkyOCwyMTM3OCwyNTk1MCwzMDAyMSwyMTgwOSwyMDUxMywzNjIyOSwyNTIyMCwzODA0NiwyNjM5NywyMjA2NiwyODUyNiwyNDAzNCwyMTU1NywyODgxOCwzNjcxMCwyNTE5OSwyNTc2NCwyNTUwNywyNDQ0MywyODU1MiwzNzEwOCwzMzI1MSwzNjc4NCwyMzU3NiwyNjIxNiwyNDU2MSwyNzc4NSwzODQ3MiwzNjIyNSwzNDkyNCwyNTc0NSwzMTIxNiwyMjQ3OCwyNzIyNSwyNTEwNCwyMTU3NiwyMDA1NiwzMTI0MywyNDgwOSwyODU0OCwzNTgwMiwyNTIxNSwzNjg5NCwzOTU2MywzMTIwNCwyMTUwNywzMDE5NiwyNTM0NSwyMTI3MywyNzc0NCwzNjgzMSwyNDM0NywzOTUzNiwzMjgyNyw0MDgzMSwyMDM2MCwyMzYxMCwzNjE5NiwzMjcwOSwyNjAyMSwyODg2MSwyMDgwNSwyMDkxNCwzNDQxMSwyMzgxNSwyMzQ1NiwyNTI3NywzNzIyOCwzMDA2OCwzNjM2NCwzMTI2NCwyNDgzMywzMTYwOSwyMDE2NywzMjUwNCwzMDU5NywxOTk4NSwzMzI2MSwyMTAyMSwyMDk4NiwyNzI0OSwyMTQxNiwzNjQ4NywzODE0OCwzODYwNywyODM1MywzODUwMCwyNjk3MCwzMDg1MiwzMDg1MywzMDg1NCwzMDg1NiwzMDg1OCwzMDg1OSwzMDg2MywzMDg2NCwzMDg2NiwzMDg2OCwzMDg2OSwzMDg3MCwzMDg3MywzMDg3NywzMDg3OCwzMDg4MCwzMDg4MiwzMDg4NCwzMDg4NiwzMDg4OCwzMDg4OSwzMDg5MCwzMDg5MSwzMDg5MiwzMDg5MywzMDg5NCwzMDg5NSwzMDkwMSwzMDkwMiwzMDkwMywzMDkwNCwzMDkwNiwzMDkwNywzMDkwOCwzMDkwOSwzMDkxMSwzMDkxMiwzMDkxNCwzMDkxNSwzMDkxNiwzMDkxOCwzMDkxOSwzMDkyMCwzMDkyNCwzMDkyNSwzMDkyNiwzMDkyNywzMDkyOSwzMDkzMCwzMDkzMSwzMDkzNCwzMDkzNSwzMDkzNiwzMDkzOCwzMDkzOSwzMDk0MCwzMDk0MSwzMDk0MiwzMDk0MywzMDk0NCwzMDk0NSwzMDk0NiwzMDk0NywzMDk0OCwzMDk0OSwzMDk1MCwzMDk1MSwzMDk1MywzMDk1NCwzMDk1NSwzMDk1NywzMDk1OCwzMDk1OSwzMDk2MCwzMDk2MSwzMDk2MywzMDk2NSwzMDk2NiwzMDk2OCwzMDk2OSwzMDk3MSwzMDk3MiwzMDk3MywzMDk3NCwzMDk3NSwzMDk3NiwzMDk3OCwzMDk3OSwzMDk4MCwzMDk4MiwzMDk4MywzMDk4NCwzMDk4NSwzMDk4NiwzMDk4NywzMDk4OCwzMDc4NCwyMDY0OCwzMDY3OSwyNTYxNiwzNTMwMiwyMjc4OCwyNTU3MSwyNDAyOSwzMTM1OSwyNjk0MSwyMDI1NiwzMzMzNywyMTkxMiwyMDAxOCwzMDEyNiwzMTM4MywyNDE2MiwyNDIwMiwzODM4MywyMTAxOSwyMTU2MSwyODgxMCwyNTQ2MiwzODE4MCwyMjQwMiwyNjE0OSwyNjk0MywzNzI1NSwyMTc2NywyODE0NywzMjQzMSwzNDg1MCwyNTEzOSwzMjQ5NiwzMDEzMywzMzU3NiwzMDkxMywzODYwNCwzNjc2NiwyNDkwNCwyOTk0MywzNTc4OSwyNzQ5MiwyMTA1MCwzNjE3NiwyNzQyNSwzMjg3NCwzMzkwNSwyMjI1NywyMTI1NCwyMDE3NCwxOTk5NSwyMDk0NSwzMTg5NSwzNzI1OSwzMTc1MSwyMDQxOSwzNjQ3OSwzMTcxMywzMTM4OCwyNTcwMywyMzgyOCwyMDY1MiwzMzAzMCwzMDIwOSwzMTkyOSwyODE0MCwzMjczNiwyNjQ0OSwyMzM4NCwyMzU0NCwzMDkyMywyNTc3NCwyNTYxOSwyNTUxNCwyNTM4NywzODE2OSwyNTY0NSwzNjc5OCwzMTU3MiwzMDI0OSwyNTE3MSwyMjgyMywyMTU3NCwyNzUxMywyMDY0MywyNTE0MCwyNDEwMiwyNzUyNiwyMDE5NSwzNjE1MSwzNDk1NSwyNDQ1MywzNjkxMCwzMDk4OSwzMDk5MCwzMDk5MSwzMDk5MiwzMDk5MywzMDk5NCwzMDk5NiwzMDk5NywzMDk5OCwzMDk5OSwzMTAwMCwzMTAwMSwzMTAwMiwzMTAwMywzMTAwNCwzMTAwNSwzMTAwNywzMTAwOCwzMTAwOSwzMTAxMCwzMTAxMSwzMTAxMywzMTAxNCwzMTAxNSwzMTAxNiwzMTAxNywzMTAxOCwzMTAxOSwzMTAyMCwzMTAyMSwzMTAyMiwzMTAyMywzMTAyNCwzMTAyNSwzMTAyNiwzMTAyNywzMTAyOSwzMTAzMCwzMTAzMSwzMTAzMiwzMTAzMywzMTAzNywzMTAzOSwzMTA0MiwzMTA0MywzMTA0NCwzMTA0NSwzMTA0NywzMTA1MCwzMTA1MSwzMTA1MiwzMTA1MywzMTA1NCwzMTA1NSwzMTA1NiwzMTA1NywzMTA1OCwzMTA2MCwzMTA2MSwzMTA2NCwzMTA2NSwzMTA3MywzMTA3NSwzMTA3NiwzMTA3OCwzMTA4MSwzMTA4MiwzMTA4MywzMTA4NCwzMTA4NiwzMTA4OCwzMTA4OSwzMTA5MCwzMTA5MSwzMTA5MiwzMTA5MywzMTA5NCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMSwzMTEwMiwzMTEwMywzMTEwNiwzMTEwNywzMTExMCwzMTExMSwzMTExMiwzMTExMywzMTExNSwzMTExNiwzMTExNywzMTExOCwzMTEyMCwzMTEyMSwzMTEyMiwyNDYwOCwzMjgyOSwyNTI4NSwyMDAyNSwyMTMzMywzNzExMiwyNTUyOCwzMjk2NiwyNjA4NiwyNzY5NCwyMDI5NCwyNDgxNCwyODEyOSwzNTgwNiwyNDM3NywzNDUwNywyNDQwMywyNTM3NywyMDgyNiwzMzYzMywyNjcyMywyMDk5MiwyNTQ0MywzNjQyNCwyMDQ5OCwyMzcwNywzMTA5NSwyMzU0OCwyMTA0MCwzMTI5MSwyNDc2NCwzNjk0NywzMDQyMywyNDUwMywyNDQ3MSwzMDM0MCwzNjQ2MCwyODc4MywzMDMzMSwzMTU2MSwzMDYzNCwyMDk3OSwzNzAxMSwyMjU2NCwyMDMwMiwyODQwNCwzNjg0MiwyNTkzMiwzMTUxNSwyOTM4MCwyODA2OCwzMjczNSwyMzI2NSwyNTI2OSwyNDIxMywyMjMyMCwzMzkyMiwzMTUzMiwyNDA5MywyNDM1MSwzNjg4MiwzMjUzMiwzOTA3MiwyNTQ3NCwyODM1OSwzMDg3MiwyODg1NywyMDg1NiwzODc0NywyMjQ0MywzMDAwNSwyMDI5MSwzMDAwOCwyNDIxNSwyNDgwNiwyMjg4MCwyODA5NiwyNzU4MywzMDg1NywyMTUwMCwzODYxMywyMDkzOSwyMDk5MywyNTQ4MSwyMTUxNCwzODAzNSwzNTg0MywzNjMwMCwyOTI0MSwzMDg3OSwzNDY3OCwzNjg0NSwzNTg1MywyMTQ3MiwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyNywzMTEyOCwzMTEyOSwzMTEzMSwzMTEzMiwzMTEzMywzMTEzNCwzMTEzNSwzMTEzNiwzMTEzNywzMTEzOCwzMTEzOSwzMTE0MCwzMTE0MSwzMTE0MiwzMTE0NCwzMTE0NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwzMTE1MCwzMTE1MSwzMTE1MiwzMTE1MywzMTE1NCwzMTE1NiwzMTE1NywzMTE1OCwzMTE1OSwzMTE2MCwzMTE2NCwzMTE2NywzMTE3MCwzMTE3MiwzMTE3MywzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MCwzMTE4MiwzMTE4MywzMTE4NCwzMTE4NywzMTE4OCwzMTE5MCwzMTE5MSwzMTE5MywzMTE5NCwzMTE5NSwzMTE5NiwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMSwzMTIwMiwzMTIwNSwzMTIwOCwzMTIxMCwzMTIxMiwzMTIxNCwzMTIxNywzMTIxOCwzMTIxOSwzMTIyMCwzMTIyMSwzMTIyMiwzMTIyMywzMTIyNSwzMTIyNiwzMTIyOCwzMTIzMCwzMTIzMSwzMTIzMywzMTIzNiwzMTIzNywzMTIzOSwzMTI0MCwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1MywzMTI1NCwzMTI1NiwzMTI1NywzMTI1OSwzMTI2MCwxOTk2OSwzMDQ0NywyMTQ4NiwzODAyNSwzOTAzMCw0MDcxOCwzODE4OSwyMzQ1MCwzNTc0NiwyMDAwMiwxOTk5NiwyMDkwOCwzMzg5MSwyNTAyNiwyMTE2MCwyNjYzNSwyMDM3NSwyNDY4MywyMDkyMywyNzkzNCwyMDgyOCwyNTIzOCwyNjAwNywzODQ5NywzNTkxMCwzNjg4NywzMDE2OCwzNzExNywzMDU2MywyNzYwMiwyOTMyMiwyOTQyMCwzNTgzNSwyMjU4MSwzMDU4NSwzNjE3MiwyNjQ2MCwzODIwOCwzMjkyMiwyNDIzMCwyODE5MywyMjkzMCwzMTQ3MSwzMDcwMSwzODIwMywyNzU3MywyNjAyOSwzMjUyNiwyMjUzNCwyMDgxNywzODQzMSwyMzU0NSwyMjY5NywyMTU0NCwzNjQ2NiwyNTk1OCwzOTAzOSwyMjI0NCwzODA0NSwzMDQ2MiwzNjkyOSwyNTQ3OSwyMTcwMiwyMjgxMCwyMjg0MiwyMjQyNywzNjUzMCwyNjQyMSwzNjM0NiwzMzMzMywyMTA1NywyNDgxNiwyMjU0OSwzNDU1OCwyMzc4NCw0MDUxNywyMDQyMCwzOTA2OSwzNTc2OSwyMzA3NywyNDY5NCwyMTM4MCwyNTIxMiwzNjk0MywzNzEyMiwzOTI5NSwyNDY4MSwzMjc4MCwyMDc5OSwzMjgxOSwyMzU3MiwzOTI4NSwyNzk1MywyMDEwOCwzMTI2MSwzMTI2MywzMTI2NSwzMTI2NiwzMTI2OCwzMTI2OSwzMTI3MCwzMTI3MSwzMTI3MiwzMTI3MywzMTI3NCwzMTI3NSwzMTI3NiwzMTI3NywzMTI3OCwzMTI3OSwzMTI4MCwzMTI4MSwzMTI4MiwzMTI4NCwzMTI4NSwzMTI4NiwzMTI4OCwzMTI5MCwzMTI5NCwzMTI5NiwzMTI5NywzMTI5OCwzMTI5OSwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwNSwzMTMwNiwzMTMwNywzMTMwOCwzMTMwOSwzMTMxMCwzMTMxMSwzMTMxMiwzMTMxNCwzMTMxNSwzMTMxNiwzMTMxNywzMTMxOCwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMyNCwzMTMyNSwzMTMyNiwzMTMyNywzMTMyOCwzMTMyOSwzMTMzMCwzMTMzMSwzMTMzMiwzMTMzMywzMTMzNCwzMTMzNSwzMTMzNiwzMTMzNywzMTMzOCwzMTMzOSwzMTM0MCwzMTM0MSwzMTM0MiwzMTM0MywzMTM0NSwzMTM0NiwzMTM0NywzMTM0OSwzMTM1NSwzMTM1NiwzMTM1NywzMTM1OCwzMTM2MiwzMTM2NSwzMTM2NywzMTM2OSwzMTM3MCwzMTM3MSwzMTM3MiwzMTM3NCwzMTM3NSwzMTM3NiwzMTM3OSwzMTM4MCwzMTM4NSwzMTM4NiwzMTM4NywzMTM5MCwzMTM5MywzMTM5NCwzNjE0NCwyMTQ1NywzMjYwMiwzMTU2NywyMDI0MCwyMDA0NywzODQwMCwyNzg2MSwyOTY0OCwzNDI4MSwyNDA3MCwzMDA1OCwzMjc2MywyNzE0NiwzMDcxOCwzODAzNCwzMjMyMSwyMDk2MSwyODkwMiwyMTQ1MywzNjgyMCwzMzUzOSwzNjEzNywyOTM1OSwzOTI3NywyNzg2NywyMjM0NiwzMzQ1OSwyNjA0MSwzMjkzOCwyNTE1MSwzODQ1MCwyMjk1MiwyMDIyMywzNTc3NSwzMjQ0MiwyNTkxOCwzMzc3OCwzODc1MCwyMTg1NywzOTEzNCwzMjkzMywyMTI5MCwzNTgzNywyMTUzNiwzMjk1NCwyNDIyMywyNzgzMiwzNjE1MywzMzQ1MiwzNzIxMCwyMTU0NSwyNzY3NSwyMDk5OCwzMjQzOSwyMjM2NywyODk1NCwyNzc3NCwzMTg4MSwyMjg1OSwyMDIyMSwyNDU3NSwyNDg2OCwzMTkxNCwyMDAxNiwyMzU1MywyNjUzOSwzNDU2MiwyMzc5MiwzODE1NSwzOTExOCwzMDEyNywyODkyNSwzNjg5OCwyMDkxMSwzMjU0MSwzNTc3MywyMjg1NywyMDk2NCwyMDMxNSwyMTU0MiwyMjgyNywyNTk3NSwzMjkzMiwyMzQxMywyNTIwNiwyNTI4MiwzNjc1MiwyNDEzMywyNzY3OSwzMTUyNiwyMDIzOSwyMDQ0MCwyNjM4MSwzMTM5NSwzMTM5NiwzMTM5OSwzMTQwMSwzMTQwMiwzMTQwMywzMTQwNiwzMTQwNywzMTQwOCwzMTQwOSwzMTQxMCwzMTQxMiwzMTQxMywzMTQxNCwzMTQxNSwzMTQxNiwzMTQxNywzMTQxOCwzMTQxOSwzMTQyMCwzMTQyMSwzMTQyMiwzMTQyNCwzMTQyNSwzMTQyNiwzMTQyNywzMTQyOCwzMTQyOSwzMTQzMCwzMTQzMSwzMTQzMiwzMTQzMywzMTQzNCwzMTQzNiwzMTQzNywzMTQzOCwzMTQzOSwzMTQ0MCwzMTQ0MSwzMTQ0MiwzMTQ0MywzMTQ0NCwzMTQ0NSwzMTQ0NywzMTQ0OCwzMTQ1MCwzMTQ1MSwzMTQ1MiwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MCwzMTQ2MywzMTQ2NCwzMTQ2NSwzMTQ2NiwzMTQ2NywzMTQ2OCwzMTQ3MCwzMTQ3MiwzMTQ3MywzMTQ3NCwzMTQ3NSwzMTQ3NiwzMTQ3NywzMTQ3OCwzMTQ3OSwzMTQ4MCwzMTQ4MywzMTQ4NCwzMTQ4NiwzMTQ4OCwzMTQ4OSwzMTQ5MCwzMTQ5MywzMTQ5NSwzMTQ5NywzMTUwMCwzMTUwMSwzMTUwMiwzMTUwNCwzMTUwNiwzMTUwNywzMTUxMCwzMTUxMSwzMTUxMiwzMTUxNCwzMTUxNiwzMTUxNywzMTUxOSwzMTUyMSwzMTUyMiwzMTUyMywzMTUyNywzMTUyOSwzMTUzMywyODAxNCwyODA3NCwzMTExOSwzNDk5MywyNDM0MywyOTk5NSwyNTI0MiwzNjc0MSwyMDQ2MywzNzM0MCwyNjAyMywzMzA3MSwzMzEwNSwyNDIyMCwzMzEwNCwzNjIxMiwyMTEwMywzNTIwNiwzNjE3MSwyMjc5NywyMDYxMywyMDE4NCwzODQyOCwyOTIzOCwzMzE0NSwzNjEyNywyMzUwMCwzNTc0NywzODQ2OCwyMjkxOSwzMjUzOCwyMTY0OCwyMjEzNCwyMjAzMCwzNTgxMywyNTkxMywyNzAxMCwzODA0MSwzMDQyMiwyODI5NywyNDE3OCwyOTk3NiwyNjQzOCwyNjU3NywzMTQ4NywzMjkyNSwzNjIxNCwyNDg2MywzMTE3NCwyNTk1NCwzNjE5NSwyMDg3MiwyMTAxOCwzODA1MCwzMjU2OCwzMjkyMywzMjQzNCwyMzcwMywyODIwNywyNjQ2NCwzMTcwNSwzMDM0NywzOTY0MCwzMzE2NywzMjY2MCwzMTk1NywyNTYzMCwzODIyNCwzMTI5NSwyMTU3OCwyMTczMywyNzQ2OCwyNTYwMSwyNTA5Niw0MDUwOSwzMzAxMSwzMDEwNSwyMTEwNiwzODc2MSwzMzg4MywyNjY4NCwzNDUzMiwzODQwMSwzODU0OCwzODEyNCwyMDAxMCwyMTUwOCwzMjQ3MywyNjY4MSwzNjMxOSwzMjc4OSwyNjM1NiwyNDIxOCwzMjY5NywzMTUzNSwzMTUzNiwzMTUzOCwzMTU0MCwzMTU0MSwzMTU0MiwzMTU0MywzMTU0NSwzMTU0NywzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1NCwzMTU1NSwzMTU1NiwzMTU1OCwzMTU2MCwzMTU2MiwzMTU2NSwzMTU2NiwzMTU3MSwzMTU3MywzMTU3NSwzMTU3NywzMTU4MCwzMTU4MiwzMTU4MywzMTU4NSwzMTU4NywzMTU4OCwzMTU4OSwzMTU5MCwzMTU5MSwzMTU5MiwzMTU5MywzMTU5NCwzMTU5NSwzMTU5NiwzMTU5NywzMTU5OSwzMTYwMCwzMTYwMywzMTYwNCwzMTYwNiwzMTYwOCwzMTYxMCwzMTYxMiwzMTYxMywzMTYxNSwzMTYxNywzMTYxOCwzMTYxOSwzMTYyMCwzMTYyMiwzMTYyMywzMTYyNCwzMTYyNSwzMTYyNiwzMTYyNywzMTYyOCwzMTYzMCwzMTYzMSwzMTYzMywzMTYzNCwzMTYzNSwzMTYzOCwzMTY0MCwzMTY0MSwzMTY0MiwzMTY0MywzMTY0NiwzMTY0NywzMTY0OCwzMTY1MSwzMTY1MiwzMTY1MywzMTY2MiwzMTY2MywzMTY2NCwzMTY2NiwzMTY2NywzMTY2OSwzMTY3MCwzMTY3MSwzMTY3MywzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY3OCwzMTY3OSwzMTY4MCwzMTY4MiwzMTY4MywzMTY4NCwyMjQ2NiwzMjgzMSwyNjc3NSwyNDAzNywyNTkxNSwyMTE1MSwyNDY4NSw0MDg1OCwyMDM3OSwzNjUyNCwyMDg0NCwyMzQ2NywyNDMzOSwyNDA0MSwyNzc0MiwyNTMyOSwzNjEyOSwyMDg0OSwzODA1NywyMTI0NiwyNzgwNywzMzUwMywyOTM5OSwyMjQzNCwyNjUwMCwzNjE0MSwyMjgxNSwzNjc2NCwzMzczNSwyMTY1MywzMTYyOSwyMDI3MiwyNzgzNywyMzM5NiwyMjk5Myw0MDcyMywyMTQ3NiwzNDUwNiwzOTU5MiwzNTg5NSwzMjkyOSwyNTkyNSwzOTAzOCwyMjI2NiwzODU5OSwyMTAzOCwyOTkxNiwyMTA3MiwyMzUyMSwyNTM0NiwzNTA3NCwyMDA1NCwyNTI5NiwyNDYxOCwyNjg3NCwyMDg1MSwyMzQ0OCwyMDg5NiwzNTI2NiwzMTY0OSwzOTMwMiwzMjU5MiwyNDgxNSwyODc0OCwzNjE0MywyMDgwOSwyNDE5MSwzNjg5MSwyOTgwOCwzNTI2OCwyMjMxNywzMDc4OSwyNDQwMiw0MDg2MywzODM5NCwzNjcxMiwzOTc0MCwzNTgwOSwzMDMyOCwyNjY5MCwyNjU4OCwzNjMzMCwzNjE0OSwyMTA1MywzNjc0NiwyODM3OCwyNjgyOSwzODE0OSwzNzEwMSwyMjI2OSwyNjUyNCwzNTA2NSwzNjgwNywyMTcwNCwzMTY4NSwzMTY4OCwzMTY4OSwzMTY5MCwzMTY5MSwzMTY5MywzMTY5NCwzMTY5NSwzMTY5NiwzMTY5OCwzMTcwMCwzMTcwMSwzMTcwMiwzMTcwMywzMTcwNCwzMTcwNywzMTcwOCwzMTcxMCwzMTcxMSwzMTcxMiwzMTcxNCwzMTcxNSwzMTcxNiwzMTcxOSwzMTcyMCwzMTcyMSwzMTcyMywzMTcyNCwzMTcyNSwzMTcyNywzMTcyOCwzMTczMCwzMTczMSwzMTczMiwzMTczMywzMTczNCwzMTczNiwzMTczNywzMTczOCwzMTczOSwzMTc0MSwzMTc0MywzMTc0NCwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc0OSwzMTc1MCwzMTc1MiwzMTc1MywzMTc1NCwzMTc1NywzMTc1OCwzMTc2MCwzMTc2MSwzMTc2MiwzMTc2MywzMTc2NCwzMTc2NSwzMTc2NywzMTc2OCwzMTc2OSwzMTc3MCwzMTc3MSwzMTc3MiwzMTc3MywzMTc3NCwzMTc3NiwzMTc3NywzMTc3OCwzMTc3OSwzMTc4MCwzMTc4MSwzMTc4NCwzMTc4NSwzMTc4NywzMTc4OCwzMTc4OSwzMTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5NiwzMTc5NywzMTc5OCwzMTc5OSwzMTgwMSwzMTgwMiwzMTgwMywzMTgwNCwzMTgwNSwzMTgwNiwzMTgxMCwzOTYwOCwyMzQwMSwyODAyMywyNzY4NiwyMDEzMywyMzQ3NSwzOTU1OSwzNzIxOSwyNTAwMCwzNzAzOSwzODg4OSwyMTU0NywyODA4NSwyMzUwNiwyMDk4OSwyMTg5OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwyMjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywzMzY1NSwzMzc0MywyNjY4MCwzMTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwzNTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcyMCwyMTcwMCwyODg4OCwzNDQyNSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQxOCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwzMjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwzMTgxMiwzMTgxMywzMTgxNCwzMTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwzMTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0MCwzMTg0MSwzMTg0MiwzMTg0MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2MywzMTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3MiwzMTg3MywzMTg3NCwzMTg3NSwzMTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwzMTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5MiwzMTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkwNCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkxMywzMTkxNSwzMTkxNiwzMTkxNywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTkyNiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDExNCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwyMTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwzNTgwNSwyNzA4OCwyNDQ1OCwyNDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwyNjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwyODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkwOCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3NiwyNDgyMiwyOTAwNCwyNjE3OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMyMSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwyMDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3MiwzMzYzNiwyNjEyNywyMzEzMCwzOTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2MywyMDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4NywyMjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkzOSwzMTk0MCwzMTk0MiwzMTk0NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwzMTk4MSwzMTk4MiwzMTk4NCwzMTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwzMTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMjAwMCwzMjAwMSwzMjAwMiwzMjAwMywzMjAwNCwzMjAwNSwzMjAwNiwzMjAwNywzMjAwOCwzMjAwOSwzMjAxMSwzMjAxMiwzMjAxMywzMjAxNCwzMjAxNSwzMjAxNiwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMCwzMjAyMSwzMjAyMiwzMjAyMywzMjAyNCwzMjAyNSwzMjAyNiwzMjAyNywzMjAyOCwzMjAyOSwzMjAzMCwzMjAzMSwzMjAzMywzMjAzNSwzMjAzNiwzMjAzNywzMjAzOCwzMjA0MCwzMjA0MSwzMjA0MiwzMjA0NCwzMjA0NSwzMjA0NiwzMjA0OCwzMjA0OSwzMjA1MCwzMjA1MSwzMjA1MiwzMjA1MywzMjA1NCwzMjkwOCwzOTI2OSwzNjg1NywyODYwOCwzNTc0OSw0MDQ4MSwyMzAyMCwzMjQ4OSwzMjUyMSwyMTUxMywyNjQ5NywyNjg0MCwzNjc1MywzMTgyMSwzODU5OCwyMTQ1MCwyNDYxMywzMDE0MiwyNzc2MiwyMTM2MywyMzI0MSwzMjQyMywyNTM4MCwyMDk2MCwzMzAzNCwyNDA0OSwzNDAxNSwyNTIxNiwyMDg2NCwyMzM5NSwyMDIzOCwzMTA4NSwyMTA1OCwyNDc2MCwyNzk4MiwyMzQ5MiwyMzQ5MCwzNTc0NSwzNTc2MCwyNjA4MiwyNDUyNCwzODQ2OSwyMjkzMSwzMjQ4NywzMjQyNiwyMjAyNSwyNjU1MSwyMjg0MSwyMDMzOSwyMzQ3OCwyMTE1MiwzMzYyNiwzOTA1MCwzNjE1OCwzMDAwMiwzODA3OCwyMDU1MSwzMTI5MiwyMDIxNSwyNjU1MCwzOTU1MCwyMzIzMywyNzUxNiwzMDQxNywyMjM2MiwyMzU3NCwzMTU0NiwzODM4OCwyOTAwNiwyMDg2MCwzMjkzNywzMzM5MiwyMjkwNCwzMjUxNiwzMzU3NSwyNjgxNiwyNjYwNCwzMDg5NywzMDgzOSwyNTMxNSwyNTQ0MSwzMTYxNiwyMDQ2MSwyMTA5OCwyMDk0MywzMzYxNiwyNzA5OSwzNzQ5MiwzNjM0MSwzNjE0NSwzNTI2NSwzODE5MCwzMTY2MSwyMDIxNCwzMjA1NSwzMjA1NiwzMjA1NywzMjA1OCwzMjA1OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2MywzMjA2NCwzMjA2NSwzMjA2NiwzMjA2NywzMjA2OCwzMjA2OSwzMjA3MCwzMjA3MSwzMjA3MiwzMjA3MywzMjA3NCwzMjA3NSwzMjA3NiwzMjA3NywzMjA3OCwzMjA3OSwzMjA4MCwzMjA4MSwzMjA4MiwzMjA4MywzMjA4NCwzMjA4NSwzMjA4NiwzMjA4NywzMjA4OCwzMjA4OSwzMjA5MCwzMjA5MSwzMjA5MiwzMjA5MywzMjA5NCwzMjA5NSwzMjA5NiwzMjA5NywzMjA5OCwzMjA5OSwzMjEwMCwzMjEwMSwzMjEwMiwzMjEwMywzMjEwNCwzMjEwNSwzMjEwNiwzMjEwNywzMjEwOCwzMjEwOSwzMjExMSwzMjExMiwzMjExMywzMjExNCwzMjExNSwzMjExNiwzMjExNywzMjExOCwzMjEyMCwzMjEyMSwzMjEyMiwzMjEyMywzMjEyNCwzMjEyNSwzMjEyNiwzMjEyNywzMjEyOCwzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMiwzMjEzMywzMjEzNCwzMjEzNSwzMjEzNiwzMjEzNywzMjEzOCwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0MiwzMjE0MywzMjE0NCwzMjE0NSwzMjE0NiwzMjE0NywzMjE0OCwzMjE0OSwzMjE1MCwzMjE1MSwzMjE1MiwyMDU4MSwzMzMyOCwyMTA3MywzOTI3OSwyODE3NiwyODI5MywyODA3MSwyNDMxNCwyMDcyNSwyMzAwNCwyMzU1OCwyNzk3NCwyNzc0MywzMDA4NiwzMzkzMSwyNjcyOCwyMjg3MCwzNTc2MiwyMTI4MCwzNzIzMywzODQ3NywzNDEyMSwyNjg5OCwzMDk3NywyODk2NiwzMzAxNCwyMDEzMiwzNzA2NiwyNzk3NSwzOTU1NiwyMzA0NywyMjIwNCwyNTYwNSwzODEyOCwzMDY5OSwyMDM4OSwzMzA1MCwyOTQwOSwzNTI4MiwzOTI5MCwzMjU2NCwzMjQ3OCwyMTExOSwyNTk0NSwzNzIzNywzNjczNSwzNjczOSwyMTQ4MywzMTM4MiwyNTU4MSwyNTUwOSwzMDM0MiwzMTIyNCwzNDkwMywzODQ1NCwyNTEzMCwyMTE2MywzMzQxMCwyNjcwOCwyNjQ4MCwyNTQ2MywzMDU3MSwzMTQ2OSwyNzkwNSwzMjQ2NywzNTI5OSwyMjk5MiwyNTEwNiwzNDI0OSwzMzQ0NSwzMDAyOCwyMDUxMSwyMDE3MSwzMDExNywzNTgxOSwyMzYyNiwyNDA2MiwzMTU2MywyNjAyMCwzNzMyOSwyMDE3MCwyNzk0MSwzNTE2NywzMjAzOSwzODE4MiwyMDE2NSwzNTg4MCwzNjgyNywzODc3MSwyNjE4NywzMTEwNSwzNjgxNywyODkwOCwyODAyNCwzMjE1MywzMjE1NCwzMjE1NSwzMjE1NiwzMjE1NywzMjE1OCwzMjE1OSwzMjE2MCwzMjE2MSwzMjE2MiwzMjE2MywzMjE2NCwzMjE2NSwzMjE2NywzMjE2OCwzMjE2OSwzMjE3MCwzMjE3MSwzMjE3MiwzMjE3MywzMjE3NSwzMjE3NiwzMjE3NywzMjE3OCwzMjE3OSwzMjE4MCwzMjE4MSwzMjE4MiwzMjE4MywzMjE4NCwzMjE4NSwzMjE4NiwzMjE4NywzMjE4OCwzMjE4OSwzMjE5MCwzMjE5MSwzMjE5MiwzMjE5MywzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjE5OSwzMjIwMCwzMjIwMSwzMjIwMiwzMjIwMywzMjIwNCwzMjIwNSwzMjIwNiwzMjIwNywzMjIwOCwzMjIwOSwzMjIxMCwzMjIxMSwzMjIxMiwzMjIxMywzMjIxNCwzMjIxNSwzMjIxNiwzMjIxNywzMjIxOCwzMjIxOSwzMjIyMCwzMjIyMSwzMjIyMiwzMjIyMywzMjIyNCwzMjIyNSwzMjIyNiwzMjIyNywzMjIyOCwzMjIyOSwzMjIzMCwzMjIzMSwzMjIzMiwzMjIzMywzMjIzNCwzMjIzNSwzMjIzNiwzMjIzNywzMjIzOCwzMjIzOSwzMjI0MCwzMjI0MSwzMjI0MiwzMjI0MywzMjI0NCwzMjI0NSwzMjI0NiwzMjI0NywzMjI0OCwzMjI0OSwzMjI1MCwyMzYxMywyMTE3MCwzMzYwNiwyMDgzNCwzMzU1MCwzMDU1NSwyNjIzMCw0MDEyMCwyMDE0MCwyNDc3OCwzMTkzNCwzMTkyMywzMjQ2MywyMDExNywzNTY4NiwyNjIyMywzOTA0OCwzODc0NSwyMjY1OSwyNTk2NCwzODIzNiwyNDQ1MiwzMDE1MywzODc0MiwzMTQ1NSwzMTQ1NCwyMDkyOCwyODg0NywzMTM4NCwyNTU3OCwzMTM1MCwzMjQxNiwyOTU5MCwzODg5MywyMDAzNywyODc5MiwyMDA2MSwzNzIwMiwyMTQxNywyNTkzNywyNjA4NywzMzI3NiwzMzI4NSwyMTY0NiwyMzYwMSwzMDEwNiwzODgxNiwyNTMwNCwyOTQwMSwzMDE0MSwyMzYyMSwzOTU0NSwzMzczOCwyMzYxNiwyMTYzMiwzMDY5NywyMDAzMCwyNzgyMiwzMjg1OCwyNTI5OCwyNTQ1NCwyNDA0MCwyMDg1NSwzNjMxNywzNjM4MiwzODE5MSwyMDQ2NSwyMTQ3NywyNDgwNywyODg0NCwyMTA5NSwyNTQyNCw0MDUxNSwyMzA3MSwyMDUxOCwzMDUxOSwyMTM2NywzMjQ4MiwyNTczMywyNTg5OSwyNTIyNSwyNTQ5NiwyMDUwMCwyOTIzNywzNTI3MywyMDkxNSwzNTc3NiwzMjQ3NywyMjM0MywzMzc0MCwzODA1NSwyMDg5MSwyMTUzMSwyMzgwMywzMjI1MSwzMjI1MiwzMjI1MywzMjI1NCwzMjI1NSwzMjI1NiwzMjI1NywzMjI1OCwzMjI1OSwzMjI2MCwzMjI2MSwzMjI2MiwzMjI2MywzMjI2NCwzMjI2NSwzMjI2NiwzMjI2NywzMjI2OCwzMjI2OSwzMjI3MCwzMjI3MSwzMjI3MiwzMjI3MywzMjI3NCwzMjI3NSwzMjI3NiwzMjI3NywzMjI3OCwzMjI3OSwzMjI4MCwzMjI4MSwzMjI4MiwzMjI4MywzMjI4NCwzMjI4NSwzMjI4NiwzMjI4NywzMjI4OCwzMjI4OSwzMjI5MCwzMjI5MSwzMjI5MiwzMjI5MywzMjI5NCwzMjI5NSwzMjI5NiwzMjI5NywzMjI5OCwzMjI5OSwzMjMwMCwzMjMwMSwzMjMwMiwzMjMwMywzMjMwNCwzMjMwNSwzMjMwNiwzMjMwNywzMjMwOCwzMjMwOSwzMjMxMCwzMjMxMSwzMjMxMiwzMjMxMywzMjMxNCwzMjMxNiwzMjMxNywzMjMxOCwzMjMxOSwzMjMyMCwzMjMyMiwzMjMyMywzMjMyNCwzMjMyNSwzMjMyNiwzMjMyOCwzMjMyOSwzMjMzMCwzMjMzMSwzMjMzMiwzMjMzMywzMjMzNCwzMjMzNSwzMjMzNiwzMjMzNywzMjMzOCwzMjMzOSwzMjM0MCwzMjM0MSwzMjM0MiwzMjM0MywzMjM0NCwzMjM0NSwzMjM0NiwzMjM0NywzMjM0OCwzMjM0OSwyMDQyNiwzMTQ1OSwyNzk5NCwzNzA4OSwzOTU2NywyMTg4OCwyMTY1NCwyMTM0NSwyMTY3OSwyNDMyMCwyNTU3NywyNjk5OSwyMDk3NSwyNDkzNiwyMTAwMiwyMjU3MCwyMTIwOCwyMjM1MCwzMDczMywzMDQ3NSwyNDI0NywyNDk1MSwzMTk2OCwyNTE3OSwyNTIzOSwyMDEzMCwyODgyMSwzMjc3MSwyNTMzNSwyODkwMCwzODc1MiwyMjM5MSwzMzQ5OSwyNjYwNywyNjg2OSwzMDkzMywzOTA2MywzMTE4NSwyMjc3MSwyMTY4MywyMTQ4NywyODIxMiwyMDgxMSwyMTA1MSwyMzQ1OCwzNTgzOCwzMjk0MywyMTgyNywyMjQzOCwyNDY5MSwyMjM1MywyMTU0OSwzMTM1NCwyNDY1NiwyMzM4MCwyNTUxMSwyNTI0OCwyMTQ3NSwyNTE4NywyMzQ5NSwyNjU0MywyMTc0MSwzMTM5MSwzMzUxMCwzNzIzOSwyNDIxMSwzNTA0NCwyMjg0MCwyMjQ0NiwyNTM1OCwzNjMyOCwzMzAwNywyMjM1OSwzMTYwNywyMDM5MywyNDU1NSwyMzQ4NSwyNzQ1NCwyMTI4MSwzMTU2OCwyOTM3OCwyNjY5NCwzMDcxOSwzMDUxOCwyNjEwMywyMDkxNywyMDExMSwzMDQyMCwyMzc0MywzMTM5NywzMzkwOSwyMjg2MiwzOTc0NSwyMDYwOCwzMjM1MCwzMjM1MSwzMjM1MiwzMjM1MywzMjM1NCwzMjM1NSwzMjM1NiwzMjM1NywzMjM1OCwzMjM1OSwzMjM2MCwzMjM2MSwzMjM2MiwzMjM2MywzMjM2NCwzMjM2NSwzMjM2NiwzMjM2NywzMjM2OCwzMjM2OSwzMjM3MCwzMjM3MSwzMjM3MiwzMjM3MywzMjM3NCwzMjM3NSwzMjM3NiwzMjM3NywzMjM3OCwzMjM3OSwzMjM4MCwzMjM4MSwzMjM4MiwzMjM4MywzMjM4NCwzMjM4NSwzMjM4NywzMjM4OCwzMjM4OSwzMjM5MCwzMjM5MSwzMjM5MiwzMjM5MywzMjM5NCwzMjM5NSwzMjM5NiwzMjM5NywzMjM5OCwzMjM5OSwzMjQwMCwzMjQwMSwzMjQwMiwzMjQwMywzMjQwNCwzMjQwNSwzMjQwNiwzMjQwNywzMjQwOCwzMjQwOSwzMjQxMCwzMjQxMiwzMjQxMywzMjQxNCwzMjQzMCwzMjQzNiwzMjQ0MywzMjQ0NCwzMjQ3MCwzMjQ4NCwzMjQ5MiwzMjUwNSwzMjUyMiwzMjUyOCwzMjU0MiwzMjU2NywzMjU2OSwzMjU3MSwzMjU3MiwzMjU3MywzMjU3NCwzMjU3NSwzMjU3NiwzMjU3NywzMjU3OSwzMjU4MiwzMjU4MywzMjU4NCwzMjU4NSwzMjU4NiwzMjU4NywzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MSwzMjU5NCwzMjU5NSwzOTMwNCwyNDg3MSwyODI5MSwyMjM3MiwyNjExOCwyNTQxNCwyMjI1NiwyNTMyNCwyNTE5MywyNDI3NSwzODQyMCwyMjQwMywyNTI4OSwyMTg5NSwzNDU5MywzMzA5OCwzNjc3MSwyMTg2MiwzMzcxMywyNjQ2OSwzNjE4MiwzNDAxMywyMzE0NiwyNjYzOSwyNTMxOCwzMTcyNiwzODQxNywyMDg0OCwyODU3MiwzNTg4OCwyNTU5NywzNTI3MiwyNTA0MiwzMjUxOCwyODg2NiwyODM4OSwyOTcwMSwyNzAyOCwyOTQzNiwyNDI2NiwzNzA3MCwyNjM5MSwyODAxMCwyNTQzOCwyMTE3MSwyOTI4MiwzMjc2OSwyMDMzMiwyMzAxMywzNzIyNiwyODg4OSwyODA2MSwyMTIwMiwyMDA0OCwzODY0NywzODI1MywzNDE3NCwzMDkyMiwzMjA0NywyMDc2OSwyMjQxOCwyNTc5NCwzMjkwNywzMTg2NywyNzg4MiwyNjg2NSwyNjk3NCwyMDkxOSwyMTQwMCwyNjc5MiwyOTMxMyw0MDY1NCwzMTcyOSwyOTQzMiwzMTE2MywyODQzNSwyOTcwMiwyNjQ0NiwzNzMyNCw0MDEwMCwzMTAzNiwzMzY3MywzMzYyMCwyMTUxOSwyNjY0NywyMDAyOSwyMTM4NSwyMTE2OSwzMDc4MiwyMTM4MiwyMTAzMywyMDYxNiwyMDM2MywyMDQzMiwzMjU5OCwzMjYwMSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwNiwzMjYwOCwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYxNSwzMjYxOSwzMjYyMCwzMjYyMSwzMjYyMywzMjYyNCwzMjYyNywzMjYyOSwzMjYzMCwzMjYzMSwzMjYzMiwzMjYzNCwzMjYzNSwzMjYzNiwzMjYzNywzMjYzOSwzMjY0MCwzMjY0MiwzMjY0MywzMjY0NCwzMjY0NSwzMjY0NiwzMjY0NywzMjY0OCwzMjY0OSwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY1OCwzMjY1OSwzMjY2MSwzMjY2MiwzMjY2MywzMjY2NCwzMjY2NSwzMjY2NywzMjY2OCwzMjY3MiwzMjY3NCwzMjY3NSwzMjY3NywzMjY3OCwzMjY4MCwzMjY4MSwzMjY4MiwzMjY4MywzMjY4NCwzMjY4NSwzMjY4NiwzMjY4OSwzMjY5MSwzMjY5MiwzMjY5MywzMjY5NCwzMjY5NSwzMjY5OCwzMjY5OSwzMjcwMiwzMjcwNCwzMjcwNiwzMjcwNywzMjcwOCwzMjcxMCwzMjcxMSwzMjcxMiwzMjcxMywzMjcxNSwzMjcxNywzMjcxOSwzMjcyMCwzMjcyMSwzMjcyMiwzMjcyMywzMjcyNiwzMjcyNywzMjcyOSwzMjczMCwzMjczMSwzMjczMiwzMjczMywzMjczNCwzMjczOCwzMjczOSwzMDE3OCwzMTQzNSwzMTg5MCwyNzgxMywzODU4MiwyMTE0NywyOTgyNywyMTczNywyMDQ1NywzMjg1MiwzMzcxNCwzNjgzMCwzODI1NiwyNDI2NSwyNDYwNCwyODA2MywyNDA4OCwyNTk0NywzMzA4MCwzODE0MiwyNDY1MSwyODg2MCwzMjQ1MSwzMTkxOCwyMDkzNywyNjc1MywzMTkyMSwzMzM5MSwyMDAwNCwzNjc0MiwzNzMyNywyNjIzOCwyMDE0MiwzNTg0NSwyNTc2OSwzMjg0MiwyMDY5OCwzMDEwMywyOTEzNCwyMzUyNSwzNjc5NywyODUxOCwyMDEwMiwyNTczMCwzODI0MywyNDI3OCwyNjAwOSwyMTAxNSwzNTAxMCwyODg3MiwyMTE1NSwyOTQ1NCwyOTc0NywyNjUxOSwzMDk2NywzODY3OCwyMDAyMCwzNzA1MSw0MDE1OCwyODEwNywyMDk1NSwzNjE2MSwyMTUzMywyNTI5NCwyOTYxOCwzMzc3NywzODY0Niw0MDgzNiwzODA4MywyMDI3OCwzMjY2NiwyMDk0MCwyODc4OSwzODUxNywyMzcyNSwzOTA0NiwyMTQ3OCwyMDE5NiwyODMxNiwyOTcwNSwyNzA2MCwzMDgyNywzOTMxMSwzMDA0MSwyMTAxNiwzMDI0NCwyNzk2OSwyNjYxMSwyMDg0NSw0MDg1NywzMjg0MywyMTY1NywzMTU0OCwzMTQyMywzMjc0MCwzMjc0MywzMjc0NCwzMjc0NiwzMjc0NywzMjc0OCwzMjc0OSwzMjc1MSwzMjc1NCwzMjc1NiwzMjc1NywzMjc1OCwzMjc1OSwzMjc2MCwzMjc2MSwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3MCwzMjc3NSwzMjc3NiwzMjc3NywzMjc3OCwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc5NCwzMjc5NSwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMSwzMjgwMywzMjgwNCwzMjgxMSwzMjgxMiwzMjgxMywzMjgxNCwzMjgxNSwzMjgxNiwzMjgxOCwzMjgyMCwzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzMywzMjgzNiwzMjgzNywzMjgzOSwzMjg0MCwzMjg0MSwzMjg0NiwzMjg0NywzMjg0OCwzMjg0OSwzMjg1MSwzMjg1MywzMjg1NCwzMjg1NSwzMjg1NywzMjg1OSwzMjg2MCwzMjg2MSwzMjg2MiwzMjg2MywzMjg2NCwzMjg2NSwzMjg2NiwzMjg2NywzMjg2OCwzMjg2OSwzMjg3MCwzMjg3MSwzMjg3MiwzMjg3NSwzMjg3NiwzMjg3NywzMjg3OCwzMjg3OSwzMjg4MCwzMjg4MiwzMjg4MywzMjg4NCwzMjg4NSwzMjg4NiwzMjg4NywzMjg4OCwzMjg4OSwzMjg5MCwzMjg5MSwzMjg5MiwzMjg5MywzODUzNCwyMjQwNCwyNTMxNCwzODQ3MSwyNzAwNCwyMzA0NCwyNTYwMiwzMTY5OSwyODQzMSwzODQ3NSwzMzQ0NiwyMTM0NiwzOTA0NSwyNDIwOCwyODgwOSwyNTUyMywyMTM0OCwzNDM4Myw0MDA2NSw0MDU5NSwzMDg2MCwzODcwNiwzNjMzNSwzNjE2Miw0MDU3NSwyODUxMCwzMTEwOCwyNDQwNSwzODQ3MCwyNTEzNCwzOTU0MCwyMTUyNSwzODEwOSwyMDM4NywyNjA1MywyMzY1MywyMzY0OSwzMjUzMywzNDM4NSwyNzY5NSwyNDQ1OSwyOTU3NSwyODM4OCwzMjUxMSwyMzc4MiwyNTM3MSwyMzQwMiwyODM5MCwyMTM2NSwyMDA4MSwyNTUwNCwzMDA1MywyNTI0OSwzNjcxOCwyMDI2MiwyMDE3NywyNzgxNCwzMjQzOCwzNTc3MCwzMzgyMSwzNDc0NiwzMjU5OSwzNjkyMywzODE3OSwzMTY1NywzOTU4NSwzNTA2NCwzMzg1MywyNzkzMSwzOTU1OCwzMjQ3NiwyMjkyMCw0MDYzNSwyOTU5NSwzMDcyMSwzNDQzNCwzOTUzMiwzOTU1NCwyMjA0MywyMTUyNywyMjQ3NSwyMDA4MCw0MDYxNCwyMTMzNCwzNjgwOCwzMzAzMywzMDYxMCwzOTMxNCwzNDU0MiwyODM4NSwzNDA2NywyNjM2NCwyNDkzMCwyODQ1OSwzMjg5NCwzMjg5NywzMjg5OCwzMjkwMSwzMjkwNCwzMjkwNiwzMjkwOSwzMjkxMCwzMjkxMSwzMjkxMiwzMjkxMywzMjkxNCwzMjkxNiwzMjkxNywzMjkxOSwzMjkyMSwzMjkyNiwzMjkzMSwzMjkzNCwzMjkzNSwzMjkzNiwzMjk0MCwzMjk0NCwzMjk0NywzMjk0OSwzMjk1MCwzMjk1MiwzMjk1MywzMjk1NSwzMjk2NSwzMjk2NywzMjk2OCwzMjk2OSwzMjk3MCwzMjk3MSwzMjk3NSwzMjk3NiwzMjk3NywzMjk3OCwzMjk3OSwzMjk4MCwzMjk4MSwzMjk4NCwzMjk5MSwzMjk5MiwzMjk5NCwzMjk5NSwzMjk5OCwzMzAwNiwzMzAxMywzMzAxNSwzMzAxNywzMzAxOSwzMzAyMiwzMzAyMywzMzAyNCwzMzAyNSwzMzAyNywzMzAyOCwzMzAyOSwzMzAzMSwzMzAzMiwzMzAzNSwzMzAzNiwzMzA0NSwzMzA0NywzMzA0OSwzMzA1MSwzMzA1MiwzMzA1MywzMzA1NSwzMzA1NiwzMzA1NywzMzA1OCwzMzA1OSwzMzA2MCwzMzA2MSwzMzA2MiwzMzA2MywzMzA2NCwzMzA2NSwzMzA2NiwzMzA2NywzMzA2OSwzMzA3MCwzMzA3MiwzMzA3NSwzMzA3NiwzMzA3NywzMzA3OSwzMzA4MSwzMzA4MiwzMzA4MywzMzA4NCwzMzA4NSwzMzA4NywzNTg4MSwzMzQyNiwzMzU3OSwzMDQ1MCwyNzY2NywyNDUzNywzMzcyNSwyOTQ4MywzMzU0MSwzODE3MCwyNzYxMSwzMDY4MywzODA4NiwyMTM1OSwzMzUzOCwyMDg4MiwyNDEyNSwzNTk4MCwzNjE1MiwyMDA0MCwyOTYxMSwyNjUyMiwyNjc1NywzNzIzOCwzODY2NSwyOTAyOCwyNzgwOSwzMDQ3MywyMzE4NiwzODIwOSwyNzU5OSwzMjY1NCwyNjE1MSwyMzUwNCwyMjk2OSwyMzE5NCwzODM3NiwzODM5MSwyMDIwNCwzMzgwNCwzMzk0NSwyNzMwOCwzMDQzMSwzODE5MiwyOTQ2NywyNjc5MCwyMzM5MSwzMDUxMSwzNzI3NCwzODc1MywzMTk2NCwzNjg1NSwzNTg2OCwyNDM1NywzMTg1OSwzMTE5MiwzNTI2OSwyNzg1MiwzNDU4OCwyMzQ5NCwyNDEzMCwyNjgyNSwzMDQ5NiwzMjUwMSwyMDg4NSwyMDgxMywyMTE5MywyMzA4MSwzMjUxNywzODc1NCwzMzQ5NSwyNTU1MSwzMDU5NiwzNDI1NiwzMTE4NiwyODIxOCwyNDIxNywyMjkzNywzNDA2NSwyODc4MSwyNzY2NSwyNTI3OSwzMDM5OSwyNTkzNSwyNDc1MSwzODM5NywyNjEyNiwzNDcxOSw0MDQ4MywzODEyNSwyMTUxNywyMTYyOSwzNTg4NCwyNTcyMCwzMzA4OCwzMzA4OSwzMzA5MCwzMzA5MSwzMzA5MiwzMzA5MywzMzA5NSwzMzA5NywzMzEwMSwzMzEwMiwzMzEwMywzMzEwNiwzMzExMCwzMzExMSwzMzExMiwzMzExNSwzMzExNiwzMzExNywzMzExOCwzMzExOSwzMzEyMSwzMzEyMiwzMzEyMywzMzEyNCwzMzEyNiwzMzEyOCwzMzEzMCwzMzEzMSwzMzEzMiwzMzEzNSwzMzEzOCwzMzEzOSwzMzE0MSwzMzE0MiwzMzE0MywzMzE0NCwzMzE1MywzMzE1NSwzMzE1NiwzMzE1NywzMzE1OCwzMzE1OSwzMzE2MSwzMzE2MywzMzE2NCwzMzE2NSwzMzE2NiwzMzE2OCwzMzE3MCwzMzE3MSwzMzE3MiwzMzE3MywzMzE3NCwzMzE3NSwzMzE3NywzMzE3OCwzMzE4MiwzMzE4MywzMzE4NCwzMzE4NSwzMzE4NiwzMzE4OCwzMzE4OSwzMzE5MSwzMzE5MywzMzE5NSwzMzE5NiwzMzE5NywzMzE5OCwzMzE5OSwzMzIwMCwzMzIwMSwzMzIwMiwzMzIwNCwzMzIwNSwzMzIwNiwzMzIwNywzMzIwOCwzMzIwOSwzMzIxMiwzMzIxMywzMzIxNCwzMzIxNSwzMzIyMCwzMzIyMSwzMzIyMywzMzIyNCwzMzIyNSwzMzIyNywzMzIyOSwzMzIzMCwzMzIzMSwzMzIzMiwzMzIzMywzMzIzNCwzMzIzNSwyNTcyMSwzNDMyMSwyNzE2OSwzMzE4MCwzMDk1MiwyNTcwNSwzOTc2NCwyNTI3MywyNjQxMSwzMzcwNywyMjY5Niw0MDY2NCwyNzgxOSwyODQ0OCwyMzUxOCwzODQ3NiwzNTg1MSwyOTI3OSwyNjU3NiwyNTI4NywyOTI4MSwyMDEzNywyMjk4MiwyNzU5NywyMjY3NSwyNjI4NiwyNDE0OSwyMTIxNSwyNDkxNywyNjQwOCwzMDQ0NiwzMDU2NiwyOTI4NywzMTMwMiwyNTM0MywyMTczOCwyMTU4NCwzODA0OCwzNzAyNywyMzA2OCwzMjQzNSwyNzY3MCwyMDAzNSwyMjkwMiwzMjc4NCwyMjg1NiwyMTMzNSwzMDAwNywzODU5MCwyMjIxOCwyNTM3NiwzMzA0MSwyNDcwMCwzODM5MywyODExOCwyMTYwMiwzOTI5NywyMDg2OSwyMzI3MywzMzAyMSwyMjk1OCwzODY3NSwyMDUyMiwyNzg3NywyMzYxMiwyNTMxMSwyMDMyMCwyMTMxMSwzMzE0NywzNjg3MCwyODM0NiwzNDA5MSwyNTI4OCwyNDE4MCwzMDkxMCwyNTc4MSwyNTQ2NywyNDU2NSwyMzA2NCwzNzI0Nyw0MDQ3OSwyMzYxNSwyNTQyMywzMjgzNCwyMzQyMSwyMTg3MCwzODIxOCwzODIyMSwyODAzNywyNDc0NCwyNjU5MiwyOTQwNiwyMDk1NywyMzQyNSwzMzIzNiwzMzIzNywzMzIzOCwzMzIzOSwzMzI0MCwzMzI0MSwzMzI0MiwzMzI0MywzMzI0NCwzMzI0NSwzMzI0NiwzMzI0NywzMzI0OCwzMzI0OSwzMzI1MCwzMzI1MiwzMzI1MywzMzI1NCwzMzI1NiwzMzI1NywzMzI1OSwzMzI2MiwzMzI2MywzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MSwzMzI3MiwzMzI3MywzMzI3NCwzMzI3NywzMzI3OSwzMzI4MywzMzI4NywzMzI4OCwzMzI4OSwzMzI5MCwzMzI5MSwzMzI5NCwzMzI5NSwzMzI5NywzMzI5OSwzMzMwMSwzMzMwMiwzMzMwMywzMzMwNCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMiwzMzMxNiwzMzMxNywzMzMxOCwzMzMxOSwzMzMyMSwzMzMyNiwzMzMzMCwzMzMzOCwzMzM0MCwzMzM0MSwzMzM0MywzMzM0NCwzMzM0NSwzMzM0NiwzMzM0NywzMzM0OSwzMzM1MCwzMzM1MiwzMzM1NCwzMzM1NiwzMzM1NywzMzM1OCwzMzM2MCwzMzM2MSwzMzM2MiwzMzM2MywzMzM2NCwzMzM2NSwzMzM2NiwzMzM2NywzMzM2OSwzMzM3MSwzMzM3MiwzMzM3MywzMzM3NCwzMzM3NiwzMzM3NywzMzM3OCwzMzM3OSwzMzM4MCwzMzM4MSwzMzM4MiwzMzM4MywzMzM4NSwyNTMxOSwyNzg3MCwyOTI3NSwyNTE5NywzODA2MiwzMjQ0NSwzMzA0MywyNzk4NywyMDg5MiwyNDMyNCwyMjkwMCwyMTE2MiwyNDU5NCwyMjg5OSwyNjI2MiwzNDM4NCwzMDExMSwyNTM4NiwyNTA2MiwzMTk4MywzNTgzNCwyMTczNCwyNzQzMSw0MDQ4NSwyNzU3MiwzNDI2MSwyMTU4OSwyMDU5OCwyNzgxMiwyMTg2NiwzNjI3NiwyOTIyOCwyNDA4NSwyNDU5NywyOTc1MCwyNTI5MywyNTQ5MCwyOTI2MCwyNDQ3MiwyODIyNywyNzk2NiwyNTg1NiwyODUwNCwzMDQyNCwzMDkyOCwzMDQ2MCwzMDAzNiwyMTAyOCwyMTQ2NywyMDA1MSwyNDIyMiwyNjA0OSwzMjgxMCwzMjk4MiwyNTI0MywyMTYzOCwyMTAzMiwyODg0NiwzNDk1NywzNjMwNSwyNzg3MywyMTYyNCwzMjk4NiwyMjUyMSwzNTA2MCwzNjE4MCwzODUwNiwzNzE5NywyMDMyOSwyNzgwMywyMTk0MywzMDQwNiwzMDc2OCwyNTI1NiwyODkyMSwyODU1OCwyNDQyOSwzNDAyOCwyNjg0MiwzMDg0NCwzMTczNSwzMzE5MiwyNjM3OSw0MDUyNywyNTQ0NywzMDg5NiwyMjM4MywzMDczOCwzODcxMywyNTIwOSwyNTI1OSwyMTEyOCwyOTc0OSwyNzYwNywzMzM4NiwzMzM4NywzMzM4OCwzMzM4OSwzMzM5MywzMzM5NywzMzM5OCwzMzM5OSwzMzQwMCwzMzQwMywzMzQwNCwzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMywzMzQxNCwzMzQxNSwzMzQxNywzMzQyMCwzMzQyNCwzMzQyNywzMzQyOCwzMzQyOSwzMzQzMCwzMzQzNCwzMzQzNSwzMzQzOCwzMzQ0MCwzMzQ0MiwzMzQ0MywzMzQ0NywzMzQ1OCwzMzQ2MSwzMzQ2MiwzMzQ2NiwzMzQ2NywzMzQ2OCwzMzQ3MSwzMzQ3MiwzMzQ3NCwzMzQ3NSwzMzQ3NywzMzQ3OCwzMzQ4MSwzMzQ4OCwzMzQ5NCwzMzQ5NywzMzQ5OCwzMzUwMSwzMzUwNiwzMzUxMSwzMzUxMiwzMzUxMywzMzUxNCwzMzUxNiwzMzUxNywzMzUxOCwzMzUyMCwzMzUyMiwzMzUyMywzMzUyNSwzMzUyNiwzMzUyOCwzMzUzMCwzMzUzMiwzMzUzMywzMzUzNCwzMzUzNSwzMzUzNiwzMzU0NiwzMzU0NywzMzU0OSwzMzU1MiwzMzU1NCwzMzU1NSwzMzU1OCwzMzU2MCwzMzU2MSwzMzU2NSwzMzU2NiwzMzU2NywzMzU2OCwzMzU2OSwzMzU3MCwzMzU3MSwzMzU3MiwzMzU3MywzMzU3NCwzMzU3NywzMzU3OCwzMzU4MiwzMzU4NCwzMzU4NiwzMzU5MSwzMzU5NSwzMzU5NywyMTg2MCwzMzA4NiwzMDEzMCwzMDM4MiwyMTMwNSwzMDE3NCwyMDczMSwyMzYxNywzNTY5MiwzMTY4NywyMDU1OSwyOTI1NSwzOTU3NSwzOTEyOCwyODQxOCwyOTkyMiwzMTA4MCwyNTczNSwzMDYyOSwyNTM0MCwzOTA1NywzNjEzOSwyMTY5NywzMjg1NiwyMDA1MCwyMjM3OCwzMzUyOSwzMzgwNSwyNDE3OSwyMDk3MywyOTk0MiwzNTc4MCwyMzYzMSwyMjM2OSwyNzkwMCwzOTA0NywyMzExMCwzMDc3MiwzOTc0OCwzNjg0MywzMTg5MywyMTA3OCwyNTE2OSwzODEzOCwyMDE2NiwzMzY3MCwzMzg4OSwzMzc2OSwzMzk3MCwyMjQ4NCwyNjQyMCwyMjI3NSwyNjIyMiwyODAwNiwzNTg4OSwyNjMzMywyODY4OSwyNjM5OSwyNzQ1MCwyNjY0NiwyNTExNCwyMjk3MSwxOTk3MSwyMDkzMiwyODQyMiwyNjU3OCwyNzc5MSwyMDg1NCwyNjgyNywyMjg1NSwyNzQ5NSwzMDA1NCwyMzgyMiwzMzA0MCw0MDc4NCwyNjA3MSwzMTA0OCwzMTA0MSwzOTU2OSwzNjIxNSwyMzY4MiwyMDA2MiwyMDIyNSwyMTU1MSwyMjg2NSwzMDczMiwyMjEyMCwyNzY2OCwzNjgwNCwyNDMyMywyNzc3MywyNzg3NSwzNTc1NSwyNTQ4OCwzMzU5OCwzMzU5OSwzMzYwMSwzMzYwMiwzMzYwNCwzMzYwNSwzMzYwOCwzMzYxMCwzMzYxMSwzMzYxMiwzMzYxMywzMzYxNCwzMzYxOSwzMzYyMSwzMzYyMiwzMzYyMywzMzYyNCwzMzYyNSwzMzYyOSwzMzYzNCwzMzY0OCwzMzY0OSwzMzY1MCwzMzY1MSwzMzY1MiwzMzY1MywzMzY1NCwzMzY1NywzMzY1OCwzMzY2MiwzMzY2MywzMzY2NCwzMzY2NSwzMzY2NiwzMzY2NywzMzY2OCwzMzY3MSwzMzY3MiwzMzY3NCwzMzY3NSwzMzY3NiwzMzY3NywzMzY3OSwzMzY4MCwzMzY4MSwzMzY4NCwzMzY4NSwzMzY4NiwzMzY4NywzMzY4OSwzMzY5MCwzMzY5MywzMzY5NSwzMzY5NywzMzY5OCwzMzY5OSwzMzcwMCwzMzcwMSwzMzcwMiwzMzcwMywzMzcwOCwzMzcwOSwzMzcxMCwzMzcxMSwzMzcxNywzMzcyMywzMzcyNiwzMzcyNywzMzczMCwzMzczMSwzMzczMiwzMzczNCwzMzczNiwzMzczNywzMzczOSwzMzc0MSwzMzc0MiwzMzc0NCwzMzc0NSwzMzc0NiwzMzc0NywzMzc0OSwzMzc1MSwzMzc1MywzMzc1NCwzMzc1NSwzMzc1OCwzMzc2MiwzMzc2MywzMzc2NCwzMzc2NiwzMzc2NywzMzc2OCwzMzc3MSwzMzc3MiwzMzc3MywyNDY4OCwyNzk2NSwyOTMwMSwyNTE5MCwzODAzMCwzODA4NSwyMTMxNSwzNjgwMSwzMTYxNCwyMDE5MSwzNTg3OCwyMDA5NCw0MDY2MCwzODA2NSwzODA2NywyMTA2OSwyODUwOCwzNjk2MywyNzk3MywzNTg5MiwyMjU0NSwyMzg4NCwyNzQyNCwyNzQ2NSwyNjUzOCwyMTU5NSwzMzEwOCwzMjY1MiwyMjY4MSwzNDEwMywyNDM3OCwyNTI1MCwyNzIwNywzODIwMSwyNTk3MCwyNDcwOCwyNjcyNSwzMDYzMSwyMDA1MiwyMDM5MiwyNDAzOSwzODgwOCwyNTc3MiwzMjcyOCwyMzc4OSwyMDQzMSwzMTM3MywyMDk5OSwzMzU0MCwxOTk4OCwyNDYyMywzMTM2MywzODA1NCwyMDQwNSwyMDE0NiwzMTIwNiwyOTc0OCwyMTIyMCwzMzQ2NSwyNTgxMCwzMTE2NSwyMzUxNywyNzc3NywzODczOCwzNjczMSwyNzY4MiwyMDU0MiwyMTM3NSwyODE2NSwyNTgwNiwyNjIyOCwyNzY5NiwyNDc3MywzOTAzMSwzNTgzMSwyNDE5OCwyOTc1NiwzMTM1MSwzMTE3OSwxOTk5MiwzNzA0MSwyOTY5OSwyNzcxNCwyMjIzNCwzNzE5NSwyNzg0NSwzNjIzNSwyMTMwNiwzNDUwMiwyNjM1NCwzNjUyNywyMzYyNCwzOTUzNywyODE5MiwzMzc3NCwzMzc3NSwzMzc3OSwzMzc4MCwzMzc4MSwzMzc4MiwzMzc4MywzMzc4NiwzMzc4NywzMzc4OCwzMzc5MCwzMzc5MSwzMzc5MiwzMzc5NCwzMzc5NywzMzc5OSwzMzgwMCwzMzgwMSwzMzgwMiwzMzgwOCwzMzgxMCwzMzgxMSwzMzgxMiwzMzgxMywzMzgxNCwzMzgxNSwzMzgxNywzMzgxOCwzMzgxOSwzMzgyMiwzMzgyMywzMzgyNCwzMzgyNSwzMzgyNiwzMzgyNywzMzgzMywzMzgzNCwzMzgzNSwzMzgzNiwzMzgzNywzMzgzOCwzMzgzOSwzMzg0MCwzMzg0MiwzMzg0MywzMzg0NCwzMzg0NSwzMzg0NiwzMzg0NywzMzg0OSwzMzg1MCwzMzg1MSwzMzg1NCwzMzg1NSwzMzg1NiwzMzg1NywzMzg1OCwzMzg1OSwzMzg2MCwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NSwzMzg2NiwzMzg2NywzMzg2OCwzMzg2OSwzMzg3MCwzMzg3MSwzMzg3MiwzMzg3NCwzMzg3NSwzMzg3NiwzMzg3NywzMzg3OCwzMzg4MCwzMzg4NSwzMzg4NiwzMzg4NywzMzg4OCwzMzg5MCwzMzg5MiwzMzg5MywzMzg5NCwzMzg5NSwzMzg5NiwzMzg5OCwzMzkwMiwzMzkwMywzMzkwNCwzMzkwNiwzMzkwOCwzMzkxMSwzMzkxMywzMzkxNSwzMzkxNiwyMTQ2MiwyMzA5NCw0MDg0MywzNjI1OSwyMTQzNSwyMjI4MCwzOTA3OSwyNjQzNSwzNzI3NSwyNzg0OSwyMDg0MCwzMDE1NCwyNTMzMSwyOTM1NiwyMTA0OCwyMTE0OSwzMjU3MCwyODgyMCwzMDI2NCwyMTM2NCw0MDUyMiwyNzA2MywzMDgzMCwzODU5MiwzNTAzMywzMjY3NiwyODk4MiwyOTEyMywyMDg3MywyNjU3OSwyOTkyNCwyMjc1NiwyNTg4MCwyMjE5OSwzNTc1MywzOTI4NiwyNTIwMCwzMjQ2OSwyNDgyNSwyODkwOSwyMjc2NCwyMDE2MSwyMDE1NCwyNDUyNSwzODg4NywyMDIxOSwzNTc0OCwyMDk5NSwyMjkyMiwzMjQyNywyNTE3MiwyMDE3MywyNjA4NSwyNTEwMiwzMzU5MiwzMzk5MywzMzYzNSwzNDcwMSwyOTA3NiwyODM0MiwyMzQ4MSwzMjQ2NiwyMDg4NywyNTU0NSwyNjU4MCwzMjkwNSwzMzU5MywzNDgzNywyMDc1NCwyMzQxOCwyMjkxNCwzNjc4NSwyMDA4MywyNzc0MSwyMDgzNywzNTEwOSwzNjcxOSwzODQ0NiwzNDEyMiwyOTc5MCwzODE2MCwzODM4NCwyODA3MCwzMzUwOSwyNDM2OSwyNTc0NiwyNzkyMiwzMzgzMiwzMzEzNCw0MDEzMSwyMjYyMiwzNjE4NywxOTk3NywyMTQ0MSwzMzkxNywzMzkxOCwzMzkxOSwzMzkyMCwzMzkyMSwzMzkyMywzMzkyNCwzMzkyNSwzMzkyNiwzMzkzMCwzMzkzMywzMzkzNSwzMzkzNiwzMzkzNywzMzkzOCwzMzkzOSwzMzk0MCwzMzk0MSwzMzk0MiwzMzk0NCwzMzk0NiwzMzk0NywzMzk0OSwzMzk1MCwzMzk1MSwzMzk1MiwzMzk1NCwzMzk1NSwzMzk1NiwzMzk1NywzMzk1OCwzMzk1OSwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2MywzMzk2NCwzMzk2NSwzMzk2NiwzMzk2OCwzMzk2OSwzMzk3MSwzMzk3MywzMzk3NCwzMzk3NSwzMzk3OSwzMzk4MCwzMzk4MiwzMzk4NCwzMzk4NiwzMzk4NywzMzk4OSwzMzk5MCwzMzk5MSwzMzk5MiwzMzk5NSwzMzk5NiwzMzk5OCwzMzk5OSwzNDAwMiwzNDAwNCwzNDAwNSwzNDAwNywzNDAwOCwzNDAwOSwzNDAxMCwzNDAxMSwzNDAxMiwzNDAxNCwzNDAxNywzNDAxOCwzNDAyMCwzNDAyMywzNDAyNCwzNDAyNSwzNDAyNiwzNDAyNywzNDAyOSwzNDAzMCwzNDAzMSwzNDAzMywzNDAzNCwzNDAzNSwzNDAzNiwzNDAzNywzNDAzOCwzNDAzOSwzNDA0MCwzNDA0MSwzNDA0MiwzNDA0MywzNDA0NSwzNDA0NiwzNDA0OCwzNDA0OSwzNDA1MCwyMDI1NCwyNTk1NSwyNjcwNSwyMTk3MSwyMDAwNywyNTYyMCwzOTU3OCwyNTE5NSwyMzIzNCwyOTc5MSwzMzM5NCwyODA3MywyNjg2MiwyMDcxMSwzMzY3OCwzMDcyMiwyNjQzMiwyMTA0OSwyNzgwMSwzMjQzMywyMDY2NywyMTg2MSwyOTAyMiwzMTU3OSwyNjE5NCwyOTY0MiwzMzUxNSwyNjQ0MSwyMzY2NSwyMTAyNCwyOTA1MywzNDkyMywzODM3OCwzODQ4NSwyNTc5NywzNjE5MywzMzIwMywyMTg5MiwyNzczMywyNTE1OSwzMjU1OCwyMjY3NCwyMDI2MCwyMTgzMCwzNjE3NSwyNjE4OCwxOTk3OCwyMzU3OCwzNTA1OSwyNjc4NiwyNTQyMiwzMTI0NSwyODkwMywzMzQyMSwyMTI0MiwzODkwMiwyMzU2OSwyMTczNiwzNzA0NSwzMjQ2MSwyMjg4MiwzNjE3MCwzNDUwMywzMzI5MiwzMzI5MywzNjE5OCwyNTY2OCwyMzU1NiwyNDkxMywyODA0MSwzMTAzOCwzNTc3NCwzMDc3NSwzMDAwMywyMTYyNywyMDI4MCwzNjUyMywyODE0NSwyMzA3MiwzMjQ1MywzMTA3MCwyNzc4NCwyMzQ1NywyMzE1OCwyOTk3OCwzMjk1OCwyNDkxMCwyODE4MywyMjc2OCwyOTk4MywyOTk4OSwyOTI5OCwyMTMxOSwzMjQ5OSwzNDA1MSwzNDA1MiwzNDA1MywzNDA1NCwzNDA1NSwzNDA1NiwzNDA1NywzNDA1OCwzNDA1OSwzNDA2MSwzNDA2MiwzNDA2MywzNDA2NCwzNDA2NiwzNDA2OCwzNDA2OSwzNDA3MCwzNDA3MiwzNDA3MywzNDA3NSwzNDA3NiwzNDA3NywzNDA3OCwzNDA4MCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NiwzNDA4NywzNDA4OCwzNDA4OSwzNDA5MCwzNDA5MywzNDA5NCwzNDA5NSwzNDA5NiwzNDA5NywzNDA5OCwzNDA5OSwzNDEwMCwzNDEwMSwzNDEwMiwzNDExMCwzNDExMSwzNDExMiwzNDExMywzNDExNCwzNDExNiwzNDExNywzNDExOCwzNDExOSwzNDEyMywzNDEyNCwzNDEyNSwzNDEyNiwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzMiwzNDEzMywzNDEzNSwzNDEzNiwzNDEzOCwzNDEzOSwzNDE0MCwzNDE0MSwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0NywzNDE0OSwzNDE1MCwzNDE1MSwzNDE1MywzNDE1NCwzNDE1NSwzNDE1NiwzNDE1NywzNDE1OCwzNDE1OSwzNDE2MCwzNDE2MSwzNDE2MywzNDE2NSwzNDE2NiwzNDE2NywzNDE2OCwzNDE3MiwzNDE3MywzNDE3NSwzNDE3NiwzNDE3NywzMDQ2NSwzMDQyNywyMTA5NywzMjk4OCwyMjMwNywyNDA3MiwyMjgzMywyOTQyMiwyNjA0NSwyODI4NywzNTc5OSwyMzYwOCwzNDQxNywyMTMxMywzMDcwNywyNTM0MiwyNjEwMiwyMDE2MCwzOTEzNSwzNDQzMiwyMzQ1NCwzNTc4MiwyMTQ5MCwzMDY5MCwyMDM1MSwyMzYzMCwzOTU0MiwyMjk4NywyNDMzNSwzMTAzNCwyMjc2MywxOTk5MCwyNjYyMywyMDEwNywyNTMyNSwzNTQ3NSwzNjg5MywyMTE4MywyNjE1OSwyMTk4MCwyMjEyNCwzNjg2NiwyMDE4MSwyMDM2NSwzNzMyMiwzOTI4MCwyNzY2MywyNDA2NiwyNDY0MywyMzQ2MCwzNTI3MCwzNTc5NywyNTkxMCwyNTE2MywzOTMxOCwyMzQzMiwyMzU1MSwyNTQ4MCwyMTgwNiwyMTQ2MywzMDI0NiwyMDg2MSwzNDA5MiwyNjUzMCwyNjgwMywyNzUzMCwyNTIzNCwzNjc1NSwyMTQ2MCwzMzI5OCwyODExMywzMDA5NSwyMDA3MCwzNjE3NCwyMzQwOCwyOTA4NywzNDIyMywyNjI1NywyNjMyOSwzMjYyNiwzNDU2MCw0MDY1Myw0MDczNiwyMzY0NiwyNjQxNSwzNjg0OCwyNjY0MSwyNjQ2MywyNTEwMSwzMTQ0NiwyMjY2MSwyNDI0NiwyNTk2OCwyODQ2NSwzNDE3OCwzNDE3OSwzNDE4MiwzNDE4NCwzNDE4NSwzNDE4NiwzNDE4NywzNDE4OCwzNDE4OSwzNDE5MCwzNDE5MiwzNDE5MywzNDE5NCwzNDE5NSwzNDE5NiwzNDE5NywzNDE5OCwzNDE5OSwzNDIwMCwzNDIwMSwzNDIwMiwzNDIwNSwzNDIwNiwzNDIwNywzNDIwOCwzNDIwOSwzNDIxMCwzNDIxMSwzNDIxMywzNDIxNCwzNDIxNSwzNDIxNywzNDIxOSwzNDIyMCwzNDIyMSwzNDIyNSwzNDIyNiwzNDIyNywzNDIyOCwzNDIyOSwzNDIzMCwzNDIzMiwzNDIzNCwzNDIzNSwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MCwzNDI0MiwzNDI0MywzNDI0NCwzNDI0NSwzNDI0NiwzNDI0NywzNDI0OCwzNDI1MCwzNDI1MSwzNDI1MiwzNDI1MywzNDI1NCwzNDI1NywzNDI1OCwzNDI2MCwzNDI2MiwzNDI2MywzNDI2NCwzNDI2NSwzNDI2NiwzNDI2NywzNDI2OSwzNDI3MCwzNDI3MSwzNDI3MiwzNDI3MywzNDI3NCwzNDI3NSwzNDI3NywzNDI3OCwzNDI3OSwzNDI4MCwzNDI4MiwzNDI4MywzNDI4NCwzNDI4NSwzNDI4NiwzNDI4NywzNDI4OCwzNDI4OSwzNDI5MCwzNDI5MSwzNDI5MiwzNDI5MywzNDI5NCwzNDI5NSwzNDI5NiwyNDY2MSwyMTA0NywzMjc4MSwyNTY4NCwzNDkyOCwyOTk5MywyNDA2OSwyNjY0MywyNTMzMiwzODY4NCwyMTQ1MiwyOTI0NSwzNTg0MSwyNzcwMCwzMDU2MSwzMTI0NiwyMTU1MCwzMDYzNiwzOTAzNCwzMzMwOCwzNTgyOCwzMDgwNSwyNjM4OCwyODg2NSwyNjAzMSwyNTc0OSwyMjA3MCwyNDYwNSwzMTE2OSwyMTQ5NiwxOTk5NywyNzUxNSwzMjkwMiwyMzU0NiwyMTk4NywyMjIzNSwyMDI4MiwyMDI4NCwzOTI4MiwyNDA1MSwyNjQ5NCwzMjgyNCwyNDU3OCwzOTA0MiwzNjg2NSwyMzQzNSwzNTc3MiwzNTgyOSwyNTYyOCwzMzM2OCwyNTgyMiwyMjAxMywzMzQ4NywzNzIyMSwyMDQzOSwzMjAzMiwzNjg5NSwzMTkwMywyMDcyMywyMjYwOSwyODMzNSwyMzQ4NywzNTc4NSwzMjg5OSwzNzI0MCwzMzk0OCwzMTYzOSwzNDQyOSwzODUzOSwzODU0MywzMjQ4NSwzOTYzNSwzMDg2MiwyMzY4MSwzMTMxOSwzNjkzMCwzODU2NywzMTA3MSwyMzM4NSwyNTQzOSwzMTQ5OSwzNDAwMSwyNjc5NywyMTc2NiwzMjU1MywyOTcxMiwzMjAzNCwzODE0NSwyNTE1MiwyMjYwNCwyMDE4MiwyMzQyNywyMjkwNSwyMjYxMiwzNDI5NywzNDI5OCwzNDMwMCwzNDMwMSwzNDMwMiwzNDMwNCwzNDMwNSwzNDMwNiwzNDMwNywzNDMwOCwzNDMxMCwzNDMxMSwzNDMxMiwzNDMxMywzNDMxNCwzNDMxNSwzNDMxNiwzNDMxNywzNDMxOCwzNDMxOSwzNDMyMCwzNDMyMiwzNDMyMywzNDMyNCwzNDMyNSwzNDMyNywzNDMyOCwzNDMyOSwzNDMzMCwzNDMzMSwzNDMzMiwzNDMzMywzNDMzNCwzNDMzNSwzNDMzNiwzNDMzNywzNDMzOCwzNDMzOSwzNDM0MCwzNDM0MSwzNDM0MiwzNDM0NCwzNDM0NiwzNDM0NywzNDM0OCwzNDM0OSwzNDM1MCwzNDM1MSwzNDM1MiwzNDM1MywzNDM1NCwzNDM1NSwzNDM1NiwzNDM1NywzNDM1OCwzNDM1OSwzNDM2MSwzNDM2MiwzNDM2MywzNDM2NSwzNDM2NiwzNDM2NywzNDM2OCwzNDM2OSwzNDM3MCwzNDM3MSwzNDM3MiwzNDM3MywzNDM3NCwzNDM3NSwzNDM3NiwzNDM3NywzNDM3OCwzNDM3OSwzNDM4MCwzNDM4NiwzNDM4NywzNDM4OSwzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NSwzNDM5NiwzNDM5NywzNDM5OSwzNDQwMCwzNDQwMSwzNDQwMywzNDQwNCwzNDQwNSwzNDQwNiwzNDQwNywzNDQwOCwzNDQwOSwzNDQxMCwyOTU0OSwyNTM3NCwzNjQyNywzNjM2NywzMjk3NCwzMzQ5MiwyNTI2MCwyMTQ4OCwyNzg4OCwzNzIxNCwyMjgyNiwyNDU3NywyNzc2MCwyMjM0OSwyNTY3NCwzNjEzOCwzMDI1MSwyODM5MywyMjM2MywyNzI2NCwzMDE5MiwyODUyNSwzNTg4NSwzNTg0OCwyMjM3NCwyNzYzMSwzNDk2MiwzMDg5OSwyNTUwNiwyMTQ5NywyODg0NSwyNzc0OCwyMjYxNiwyNTY0MiwyMjUzMCwyNjg0OCwzMzE3OSwyMTc3NiwzMTk1OCwyMDUwNCwzNjUzOCwyODEwOCwzNjI1NSwyODkwNywyNTQ4NywyODA1OSwyODM3MiwzMjQ4NiwzMzc5NiwyNjY5MSwzNjg2NywyODEyMCwzODUxOCwzNTc1MiwyMjg3MSwyOTMwNSwzNDI3NiwzMzE1MCwzMDE0MCwzNTQ2NiwyNjc5OSwyMTA3NiwzNjM4NiwzODE2MSwyNTU1MiwzOTA2NCwzNjQyMCwyMTg4NCwyMDMwNywyNjM2NywyMjE1OSwyNDc4OSwyODA1MywyMTA1OSwyMzYyNSwyMjgyNSwyODE1NSwyMjYzNSwzMDAwMCwyOTk4MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgzNCwzMDUyMiwzNjMzOSwzNjE0OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywzNDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0NywzNDQ0OCwzNDQ0OSwzNDQ1MCwzNDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1NywzNDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwzNDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5MywzNDQ5NCwzNDQ5NSwzNDQ5NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUwOCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUyNSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwzNDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwzNDU0MCwzNDU0MywzNDU0OSwzNDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1NiwzNDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQwMiwzMzM1MSwzNjg5MCwyNjcwNCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQyMCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgzNiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwyMjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywyMTUyMCwyMDgyMCwyODIzNywyMjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwzNTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwzODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2NCwyMzA0MywyOTkyNiwzNDk3MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwzMzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5MywyNDQ0OCwyNjEwNiwyNjM5NSwyNDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4NywzNDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywzNDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYxMCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyNCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYyOSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwzNDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1NywzNDY1OCwzNDY2MiwzNDY2MywzNDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwzNDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwzNDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcwMiwzNDcwMywzNDcwNCwzNDcwNSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcxMiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcyMiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwyMTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywyNDc5OSwyMDAyNiwyODQ5MywzMjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwyMDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwzOTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5MSwzODM5NSwzMjQ0MSwyMTU2MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcwNSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1NiwyMDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwyNjc5MSwyMTU2NiwyMTU1NiwyNzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwzMzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0NywyMTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3NSwyMTU2MCwzODE3NywyOTMwNiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDczMCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwzNDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwzNDc2MCwzNDc2MSwzNDc2NCwzNDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3MiwzNDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4MiwzNDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5NiwzNDc5NywzNDc5OSwzNDgwMCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgwNSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgxNiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwzNDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwzNDgyOSwzNDgzMCwzNDgzMSwzNDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwzNDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwzMTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcyOCwyOTMxMiwyNzI2OCwzNDk4OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODExNSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwyOTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3MiwzODE4NCwyMDgwOCwyMDE4NSw0MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwzMzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4NiwyMTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2MiwzOTMyMSwzMTY2NSwzNTE0MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgxNCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkzNywzMzgzMSwzMDgxMywzODY2MCwyMTA2NiwyMTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwyNjE5NSwzNDg1MiwzNDg1MywzNDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwzNDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwzNDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4MiwzNDg4MywzNDg4NiwzNDg4NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwzNDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwzNDkyNywzNDkyOSwzNDkzMSwzNDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywzNDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwzNDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2OSwzNDk3MCwzNDk3MSwzNDk3MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwyNjk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywyNTM3NSwyNTY1OCwzNzAzNCwyNjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwyMTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwzODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4MSwyNDgyNiwyMDg1MiwyMTAwOSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2MiwzMjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2NiwzMjQ4MywyMjY4NywyNTEwMCwzODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwzNTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwyMzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTkyNywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5MCwzNDk5MSwzNDk5MiwzNDk5NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNTAwMCwzNTAwMSwzNTAwMiwzNTAwMywzNTAwNSwzNTAwNiwzNTAwNywzNTAwOCwzNTAxMSwzNTAxMiwzNTAxNSwzNTAxNiwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMywzNTAyNCwzNTAyNSwzNTAyNywzNTAzMCwzNTAzMSwzNTAzNCwzNTAzNSwzNTAzNiwzNTAzNywzNTAzOCwzNTA0MCwzNTA0MSwzNTA0NiwzNTA0NywzNTA0OSwzNTA1MCwzNTA1MSwzNTA1MiwzNTA1MywzNTA1NCwzNTA1NSwzNTA1OCwzNTA2MSwzNTA2MiwzNTA2MywzNTA2NiwzNTA2NywzNTA2OSwzNTA3MSwzNTA3MiwzNTA3MywzNTA3NSwzNTA3NiwzNTA3NywzNTA3OCwzNTA3OSwzNTA4MCwzNTA4MSwzNTA4MywzNTA4NCwzNTA4NSwzNTA4NiwzNTA4NywzNTA4OSwzNTA5MiwzNTA5MywzNTA5NCwzNTA5NSwzNTA5NiwzNTEwMCwzNTEwMSwzNTEwMiwzNTEwMywzNTEwNCwzNTEwNiwzNTEwNywzNTEwOCwzNTExMCwzNTExMSwzNTExMiwzNTExMywzNTExNiwzNTExNywzNTExOCwzNTExOSwzNTEyMSwzNTEyMiwzNTEyMywzNTEyNSwzNTEyNywzNjg3MywzMDMwNywzMDUwNSwzMjQ3NCwzODc3MiwzNDIwMywyMzM5OCwzMTM0OCwzODYzNCwzNDg4MCwyMTE5NSwyOTA3MSwyNDQ5MCwyNjA5MiwzNTgxMCwyMzU0NywzOTUzNSwyNDAzMywyNzUyOSwyNzczOSwzNTc1NywzNTc1OSwzNjg3NCwzNjgwNSwyMTM4NywyNTI3Niw0MDQ4Niw0MDQ5MywyMTU2OCwyMDAxMSwzMzQ2OSwyOTI3MywzNDQ2MCwyMzgzMCwzNDkwNSwyODA3OSwzODU5NywyMTcxMywyMDEyMiwzNTc2NiwyODkzNywyMTY5MywzODQwOSwyODg5NSwyODE1MywzMDQxNiwyMDAwNSwzMDc0MCwzNDU3OCwyMzcyMSwyNDMxMCwzNTMyOCwzOTA2OCwzODQxNCwyODgxNCwyNzgzOSwyMjg1MiwyNTUxMywzMDUyNCwzNDg5MywyODQzNiwzMzM5NSwyMjU3NiwyOTE0MSwyMTM4OCwzMDc0NiwzODU5MywyMTc2MSwyNDQyMiwyODk3NiwyMzQ3NiwzNTg2NiwzOTU2NCwyNzUyMywyMjgzMCw0MDQ5NSwzMTIwNywyNjQ3MiwyNTE5NiwyMDMzNSwzMDExMywzMjY1MCwyNzkxNSwzODQ1MSwyNzY4NywyMDIwOCwzMDE2MiwyMDg1OSwyNjY3OSwyODQ3OCwzNjk5MiwzMzEzNiwyMjkzNCwyOTgxNCwzNTEyOCwzNTEyOSwzNTEzMCwzNTEzMSwzNTEzMiwzNTEzMywzNTEzNCwzNTEzNSwzNTEzNiwzNTEzOCwzNTEzOSwzNTE0MSwzNTE0MiwzNTE0MywzNTE0NCwzNTE0NSwzNTE0NiwzNTE0NywzNTE0OCwzNTE0OSwzNTE1MCwzNTE1MSwzNTE1MiwzNTE1MywzNTE1NCwzNTE1NSwzNTE1NiwzNTE1NywzNTE1OCwzNTE1OSwzNTE2MCwzNTE2MSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2NSwzNTE2OCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3MiwzNTE3MywzNTE3NSwzNTE3NiwzNTE3NywzNTE3OCwzNTE3OSwzNTE4MCwzNTE4MSwzNTE4MiwzNTE4MywzNTE4NCwzNTE4NSwzNTE4NiwzNTE4NywzNTE4OCwzNTE4OSwzNTE5MCwzNTE5MSwzNTE5MiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NywzNTE5OCwzNTIwMCwzNTIwMiwzNTIwNCwzNTIwNSwzNTIwNywzNTIwOCwzNTIwOSwzNTIxMCwzNTIxMSwzNTIxMiwzNTIxMywzNTIxNCwzNTIxNSwzNTIxNiwzNTIxNywzNTIxOCwzNTIxOSwzNTIyMCwzNTIyMSwzNTIyMiwzNTIyMywzNTIyNCwzNTIyNSwzNTIyNiwzNTIyNywzNTIyOCwzNTIyOSwzNTIzMCwzNTIzMSwzNTIzMiwzNTIzMywyNTY3MSwyMzU5MSwzNjk2NSwzMTM3NywzNTg3NSwyMzAwMiwyMTY3NiwzMzI4MCwzMzY0NywzNTIwMSwzMjc2OCwyNjkyOCwyMjA5NCwzMjgyMiwyOTIzOSwzNzMyNiwyMDkxOCwyMDA2MywzOTAyOSwyNTQ5NCwxOTk5NCwyMTQ5NCwyNjM1NSwzMzA5OSwyMjgxMiwyODA4MiwxOTk2OCwyMjc3NywyMTMwNywyNTU1OCwzODEyOSwyMDM4MSwyMDIzNCwzNDkxNSwzOTA1NiwyMjgzOSwzNjk1MSwzMTIyNywyMDIwMiwzMzAwOCwzMDA5NywyNzc3OCwyMzQ1MiwyMzAxNiwyNDQxMywyNjg4NSwzNDQzMywyMDUwNiwyNDA1MCwyMDA1NywzMDY5MSwyMDE5NywzMzQwMiwyNTIzMywyNjEzMSwzNzAwOSwyMzY3MywyMDE1OSwyNDQ0MSwzMzIyMiwzNjkyMCwzMjkwMCwzMDEyMywyMDEzNCwzNTAyOCwyNDg0NywyNzU4OSwyNDUxOCwyMDA0MSwzMDQxMCwyODMyMiwzNTgxMSwzNTc1OCwzNTg1MCwzNTc5MywyNDMyMiwzMjc2NCwzMjcxNiwzMjQ2MiwzMzU4OSwzMzY0MywyMjI0MCwyNzU3NSwzODg5OSwzODQ1MiwyMzAzNSwyMTUzNSwzODEzNCwyODEzOSwyMzQ5MywzOTI3OCwyMzYwOSwyNDM0MSwzODU0NCwzNTIzNCwzNTIzNSwzNTIzNiwzNTIzNywzNTIzOCwzNTIzOSwzNTI0MCwzNTI0MSwzNTI0MiwzNTI0MywzNTI0NCwzNTI0NSwzNTI0NiwzNTI0NywzNTI0OCwzNTI0OSwzNTI1MCwzNTI1MSwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI1NiwzNTI1NywzNTI1OCwzNTI1OSwzNTI2MCwzNTI2MSwzNTI2MiwzNTI2MywzNTI2NCwzNTI2NywzNTI3NywzNTI4MywzNTI4NCwzNTI4NSwzNTI4NywzNTI4OCwzNTI4OSwzNTI5MSwzNTI5MywzNTI5NSwzNTI5NiwzNTI5NywzNTI5OCwzNTMwMCwzNTMwMywzNTMwNCwzNTMwNSwzNTMwNiwzNTMwOCwzNTMwOSwzNTMxMCwzNTMxMiwzNTMxMywzNTMxNCwzNTMxNiwzNTMxNywzNTMxOCwzNTMxOSwzNTMyMCwzNTMyMSwzNTMyMiwzNTMyMywzNTMyNCwzNTMyNSwzNTMyNiwzNTMyNywzNTMyOSwzNTMzMCwzNTMzMSwzNTMzMiwzNTMzMywzNTMzNCwzNTMzNiwzNTMzNywzNTMzOCwzNTMzOSwzNTM0MCwzNTM0MSwzNTM0MiwzNTM0MywzNTM0NCwzNTM0NSwzNTM0NiwzNTM0NywzNTM0OCwzNTM0OSwzNTM1MCwzNTM1MSwzNTM1MiwzNTM1MywzNTM1NCwzNTM1NSwzNTM1NiwzNTM1NywyMTM2MCwzMzUyMSwyNzE4NSwyMzE1Niw0MDU2MCwyNDIxMiwzMjU1MiwzMzcyMSwzMzgyOCwzMzgyOSwzMzYzOSwzNDYzMSwzNjgxNCwzNjE5NCwzMDQwOCwyNDQzMywzOTA2MiwzMDgyOCwyNjE0NCwyMTcyNywyNTMxNywyMDMyMywzMzIxOSwzMDE1MiwyNDI0OCwzODYwNSwzNjM2MiwzNDU1MywyMTY0NywyNzg5MSwyODA0NCwyNzcwNCwyNDcwMywyMTE5MSwyOTk5MiwyNDE4OSwyMDI0OCwyNDczNiwyNDU1MSwyMzU4OCwzMDAwMSwzNzAzOCwzODA4MCwyOTM2OSwyNzgzMywyODIxNiwzNzE5MywyNjM3NywyMTQ1MSwyMTQ5MSwyMDMwNSwzNzMyMSwzNTgyNSwyMTQ0OCwyNDE4OCwzNjgwMiwyODEzMiwyMDExMCwzMDQwMiwyNzAxNCwzNDM5OCwyNDg1OCwzMzI4NiwyMDMxMywyMDQ0NiwzNjkyNiw0MDA2MCwyNDg0MSwyODE4OSwyODE4MCwzODUzMywyMDEwNCwyMzA4OSwzODYzMiwxOTk4MiwyMzY3OSwzMTE2MSwyMzQzMSwzNTgyMSwzMjcwMSwyOTU3NywyMjQ5NSwzMzQxOSwzNzA1NywyMTUwNSwzNjkzNSwyMTk0NywyMzc4NiwyNDQ4MSwyNDg0MCwyNzQ0MiwyOTQyNSwzMjk0NiwzNTQ2NSwzNTM1OCwzNTM1OSwzNTM2MCwzNTM2MSwzNTM2MiwzNTM2MywzNTM2NCwzNTM2NSwzNTM2NiwzNTM2NywzNTM2OCwzNTM2OSwzNTM3MCwzNTM3MSwzNTM3MiwzNTM3MywzNTM3NCwzNTM3NSwzNTM3NiwzNTM3NywzNTM3OCwzNTM3OSwzNTM4MCwzNTM4MSwzNTM4MiwzNTM4MywzNTM4NCwzNTM4NSwzNTM4NiwzNTM4NywzNTM4OCwzNTM4OSwzNTM5MSwzNTM5MiwzNTM5MywzNTM5NCwzNTM5NSwzNTM5NiwzNTM5NywzNTM5OCwzNTM5OSwzNTQwMSwzNTQwMiwzNTQwMywzNTQwNCwzNTQwNSwzNTQwNiwzNTQwNywzNTQwOCwzNTQwOSwzNTQxMCwzNTQxMSwzNTQxMiwzNTQxMywzNTQxNCwzNTQxNSwzNTQxNiwzNTQxNywzNTQxOCwzNTQxOSwzNTQyMCwzNTQyMSwzNTQyMiwzNTQyMywzNTQyNCwzNTQyNSwzNTQyNiwzNTQyNywzNTQyOCwzNTQyOSwzNTQzMCwzNTQzMSwzNTQzMiwzNTQzMywzNTQzNCwzNTQzNSwzNTQzNiwzNTQzNywzNTQzOCwzNTQzOSwzNTQ0MCwzNTQ0MSwzNTQ0MiwzNTQ0MywzNTQ0NCwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OCwzNTQ1MCwzNTQ1MSwzNTQ1MiwzNTQ1MywzNTQ1NCwzNTQ1NSwzNTQ1NiwyODAyMCwyMzUwNywzNTAyOSwzOTA0NCwzNTk0NywzOTUzMyw0MDQ5OSwyODE3MCwyMDkwMCwyMDgwMywyMjQzNSwzNDk0NSwyMTQwNywyNTU4OCwzNjc1NywyMjI1MywyMTU5MiwyMjI3OCwyOTUwMywyODMwNCwzMjUzNiwzNjgyOCwzMzQ4OSwyNDg5NSwyNDYxNiwzODQ5OCwyNjM1MiwzMjQyMiwzNjIzNCwzNjI5MSwzODA1MywyMzczMSwzMTkwOCwyNjM3NiwyNDc0MiwzODQwNSwzMjc5MiwyMDExMywzNzA5NSwyMTI0OCwzODUwNCwyMDgwMSwzNjgxNiwzNDE2NCwzNzIxMywyNjE5NywzODkwMSwyMzM4MSwyMTI3NywzMDc3NiwyNjQzNCwyNjY4NSwyMTcwNSwyODc5OCwyMzQ3MiwzNjczMywyMDg3NywyMjMxMiwyMTY4MSwyNTg3NCwyNjI0MiwzNjE5MCwzNjE2MywzMzAzOSwzMzkwMCwzNjk3MywzMTk2NywyMDk5MSwzNDI5OSwyNjUzMSwyNjA4OSwyODU3NywzNDQ2OCwzNjQ4MSwyMjEyMiwzNjg5NiwzMDMzOCwyODc5MCwyOTE1NywzNjEzMSwyNTMyMSwyMTAxNywyNzkwMSwzNjE1NiwyNDU5MCwyMjY4NiwyNDk3NCwyNjM2NiwzNjE5MiwyNTE2NiwyMTkzOSwyODE5NSwyNjQxMywzNjcxMSwzNTQ1NywzNTQ1OCwzNTQ1OSwzNTQ2MCwzNTQ2MSwzNTQ2MiwzNTQ2MywzNTQ2NCwzNTQ2NywzNTQ2OCwzNTQ2OSwzNTQ3MCwzNTQ3MSwzNTQ3MiwzNTQ3MywzNTQ3NCwzNTQ3NiwzNTQ3NywzNTQ3OCwzNTQ3OSwzNTQ4MCwzNTQ4MSwzNTQ4MiwzNTQ4MywzNTQ4NCwzNTQ4NSwzNTQ4NiwzNTQ4NywzNTQ4OCwzNTQ4OSwzNTQ5MCwzNTQ5MSwzNTQ5MiwzNTQ5MywzNTQ5NCwzNTQ5NSwzNTQ5NiwzNTQ5NywzNTQ5OCwzNTQ5OSwzNTUwMCwzNTUwMSwzNTUwMiwzNTUwMywzNTUwNCwzNTUwNSwzNTUwNiwzNTUwNywzNTUwOCwzNTUwOSwzNTUxMCwzNTUxMSwzNTUxMiwzNTUxMywzNTUxNCwzNTUxNSwzNTUxNiwzNTUxNywzNTUxOCwzNTUxOSwzNTUyMCwzNTUyMSwzNTUyMiwzNTUyMywzNTUyNCwzNTUyNSwzNTUyNiwzNTUyNywzNTUyOCwzNTUyOSwzNTUzMCwzNTUzMSwzNTUzMiwzNTUzMywzNTUzNCwzNTUzNSwzNTUzNiwzNTUzNywzNTUzOCwzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MiwzNTU0MywzNTU0NCwzNTU0NSwzNTU0NiwzNTU0NywzNTU0OCwzNTU0OSwzNTU1MCwzNTU1MSwzNTU1MiwzNTU1MywzNTU1NCwzNTU1NSwzODExMywzODM5MiwzMDUwNCwyNjYyOSwyNzA0OCwyMTY0MywyMDA0NSwyODg1NiwzNTc4NCwyNTY4OCwyNTk5NSwyMzQyOSwzMTM2NCwyMDUzOCwyMzUyOCwzMDY1MSwyNzYxNywzNTQ0OSwzMTg5NiwyNzgzOCwzMDQxNSwyNjAyNSwzNjc1OSwyMzg1MywyMzYzNywzNDM2MCwyNjYzMiwyMTM0NCwyNTExMiwzMTQ0OSwyODI1MSwzMjUwOSwyNzE2NywzMTQ1NiwyNDQzMiwyODQ2NywyNDM1MiwyNTQ4NCwyODA3MiwyNjQ1NCwxOTk3NiwyNDA4MCwzNjEzNCwyMDE4MywzMjk2MCwzMDI2MCwzODU1NiwyNTMwNywyNjE1NywyNTIxNCwyNzgzNiwzNjIxMywyOTAzMSwzMjYxNywyMDgwNiwzMjkwMywyMTQ4NCwzNjk3NCwyNTI0MCwyMTc0NiwzNDU0NCwzNjc2MSwzMjc3MywzODE2NywzNDA3MSwzNjgyNSwyNzk5MywyOTY0NSwyNjAxNSwzMDQ5NSwyOTk1NiwzMDc1OSwzMzI3NSwzNjEyNiwzODAyNCwyMDM5MCwyNjUxNywzMDEzNywzNTc4NiwzODY2MywyNTM5MSwzODIxNSwzODQ1MywzMzk3NiwyNTM3OSwzMDUyOSwyNDQ0OSwyOTQyNCwyMDEwNSwyNDU5NiwyNTk3MiwyNTMyNywyNzQ5MSwyNTkxOSwzNTU1NiwzNTU1NywzNTU1OCwzNTU1OSwzNTU2MCwzNTU2MSwzNTU2MiwzNTU2MywzNTU2NCwzNTU2NSwzNTU2NiwzNTU2NywzNTU2OCwzNTU2OSwzNTU3MCwzNTU3MSwzNTU3MiwzNTU3MywzNTU3NCwzNTU3NSwzNTU3NiwzNTU3NywzNTU3OCwzNTU3OSwzNTU4MCwzNTU4MSwzNTU4MiwzNTU4MywzNTU4NCwzNTU4NSwzNTU4NiwzNTU4NywzNTU4OCwzNTU4OSwzNTU5MCwzNTU5MiwzNTU5MywzNTU5NCwzNTU5NSwzNTU5NiwzNTU5NywzNTU5OCwzNTU5OSwzNTYwMCwzNTYwMSwzNTYwMiwzNTYwMywzNTYwNCwzNTYwNSwzNTYwNiwzNTYwNywzNTYwOCwzNTYwOSwzNTYxMCwzNTYxMSwzNTYxMiwzNTYxMywzNTYxNCwzNTYxNSwzNTYxNiwzNTYxNywzNTYxOCwzNTYxOSwzNTYyMCwzNTYyMSwzNTYyMywzNTYyNCwzNTYyNSwzNTYyNiwzNTYyNywzNTYyOCwzNTYyOSwzNTYzMCwzNTYzMSwzNTYzMiwzNTYzMywzNTYzNCwzNTYzNSwzNTYzNiwzNTYzNywzNTYzOCwzNTYzOSwzNTY0MCwzNTY0MSwzNTY0MiwzNTY0MywzNTY0NCwzNTY0NSwzNTY0NiwzNTY0NywzNTY0OCwzNTY0OSwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywyNDEwMywzMDE1MSwzNzA3MywzNTc3NywzMzQzNywyNjUyNSwyNTkwMywyMTU1MywzNDU4NCwzMDY5MywzMjkzMCwzMzAyNiwyNzcxMywyMDA0MywzMjQ1NSwzMjg0NCwzMDQ1MiwyNjg5MywyNzU0MiwyNTE5MSwyMDU0MCwyMDM1NiwyMjMzNiwyNTM1MSwyNzQ5MCwzNjI4NiwyMTQ4MiwyNjA4OCwzMjQ0MCwyNDUzNSwyNTM3MCwyNTUyNywzMzI2NywzMzI2OCwzMjYyMiwyNDA5MiwyMzc2OSwyMTA0NiwyNjIzNCwzMTIwOSwzMTI1OCwzNjEzNiwyODgyNSwzMDE2NCwyODM4MiwyNzgzNSwzMTM3OCwyMDAxMywzMDQwNSwyNDU0NCwzODA0NywzNDkzNSwzMjQ1NiwzMTE4MSwzMjk1OSwzNzMyNSwyMDIxMCwyMDI0NywzMzMxMSwyMTYwOCwyNDAzMCwyNzk1NCwzNTc4OCwzMTkwOSwzNjcyNCwzMjkyMCwyNDA5MCwyMTY1MCwzMDM4NSwyMzQ0OSwyNjE3MiwzOTU4OCwyOTY2NCwyNjY2NiwzNDUyMywyNjQxNywyOTQ4MiwzNTgzMiwzNTgwMywzNjg4MCwzMTQ4MSwyODg5MSwyOTAzOCwyNTI4NCwzMDYzMywyMjA2NSwyMDAyNywzMzg3OSwyNjYwOSwyMTE2MSwzNDQ5NiwzNjE0MiwzODEzNiwzMTU2OSwzNTY1NCwzNTY1NSwzNTY1NiwzNTY1NywzNTY1OCwzNTY1OSwzNTY2MCwzNTY2MSwzNTY2MiwzNTY2MywzNTY2NCwzNTY2NSwzNTY2NiwzNTY2NywzNTY2OCwzNTY2OSwzNTY3MCwzNTY3MSwzNTY3MiwzNTY3MywzNTY3NCwzNTY3NSwzNTY3NiwzNTY3NywzNTY3OCwzNTY3OSwzNTY4MCwzNTY4MSwzNTY4MiwzNTY4MywzNTY4NCwzNTY4NSwzNTY4NywzNTY4OCwzNTY4OSwzNTY5MCwzNTY5MSwzNTY5MywzNTY5NCwzNTY5NSwzNTY5NiwzNTY5NywzNTY5OCwzNTY5OSwzNTcwMCwzNTcwMSwzNTcwMiwzNTcwMywzNTcwNCwzNTcwNSwzNTcwNiwzNTcwNywzNTcwOCwzNTcwOSwzNTcxMCwzNTcxMSwzNTcxMiwzNTcxMywzNTcxNCwzNTcxNSwzNTcxNiwzNTcxNywzNTcxOCwzNTcxOSwzNTcyMCwzNTcyMSwzNTcyMiwzNTcyMywzNTcyNCwzNTcyNSwzNTcyNiwzNTcyNywzNTcyOCwzNTcyOSwzNTczMCwzNTczMSwzNTczMiwzNTczMywzNTczNCwzNTczNSwzNTczNiwzNTczNywzNTczOCwzNTczOSwzNTc0MCwzNTc0MSwzNTc0MiwzNTc0MywzNTc1NiwzNTc2MSwzNTc3MSwzNTc4MywzNTc5MiwzNTgxOCwzNTg0OSwzNTg3MCwyMDMwMywyNzg4MCwzMTA2OSwzOTU0NywyNTIzNSwyOTIyNiwyNTM0MSwxOTk4NywzMDc0MiwzNjcxNiwyNTc3NiwzNjE4NiwzMTY4NiwyNjcyOSwyNDE5NiwzNTAxMywyMjkxOCwyNTc1OCwyMjc2NiwyOTM2NiwyNjg5NCwzODE4MSwzNjg2MSwzNjE4NCwyMjM2OCwzMjUxMiwzNTg0NiwyMDkzNCwyNTQxNywyNTMwNSwyMTMzMSwyNjcwMCwyOTczMCwzMzUzNywzNzE5NiwyMTgyOCwzMDUyOCwyODc5NiwyNzk3OCwyMDg1NywyMTY3MiwzNjE2NCwyMzAzOSwyODM2MywyODEwMCwyMzM4OCwzMjA0MywyMDE4MCwzMTg2OSwyODM3MSwyMzM3NiwzMzI1OCwyODE3MywyMzM4MywzOTY4MywyNjgzNywzNjM5NCwyMzQ0NywzMjUwOCwyNDYzNSwzMjQzNywzNzA0OSwzNjIwOCwyMjg2MywyNTU0OSwzMTE5OSwzNjI3NSwyMTMzMCwyNjA2MywzMTA2MiwzNTc4MSwzODQ1OSwzMjQ1MiwzODA3NSwzMjM4NiwyMjA2OCwzNzI1NywyNjM2OCwzMjYxOCwyMzU2MiwzNjk4MSwyNjE1MiwyNDAzOCwyMDMwNCwyNjU5MCwyMDU3MCwyMDMxNiwyMjM1MiwyNDIzMSw1OTQwOCw1OTQwOSw1OTQxMCw1OTQxMSw1OTQxMiwzNTg5NiwzNTg5NywzNTg5OCwzNTg5OSwzNTkwMCwzNTkwMSwzNTkwMiwzNTkwMywzNTkwNCwzNTkwNiwzNTkwNywzNTkwOCwzNTkwOSwzNTkxMiwzNTkxNCwzNTkxNSwzNTkxNywzNTkxOCwzNTkxOSwzNTkyMCwzNTkyMSwzNTkyMiwzNTkyMywzNTkyNCwzNTkyNiwzNTkyNywzNTkyOCwzNTkyOSwzNTkzMSwzNTkzMiwzNTkzMywzNTkzNCwzNTkzNSwzNTkzNiwzNTkzOSwzNTk0MCwzNTk0MSwzNTk0MiwzNTk0MywzNTk0NCwzNTk0NSwzNTk0OCwzNTk0OSwzNTk1MCwzNTk1MSwzNTk1MiwzNTk1MywzNTk1NCwzNTk1NiwzNTk1NywzNTk1OCwzNTk1OSwzNTk2MywzNTk2NCwzNTk2NSwzNTk2NiwzNTk2NywzNTk2OCwzNTk2OSwzNTk3MSwzNTk3MiwzNTk3NCwzNTk3NSwzNTk3NiwzNTk3OSwzNTk4MSwzNTk4MiwzNTk4MywzNTk4NCwzNTk4NSwzNTk4NiwzNTk4NywzNTk4OSwzNTk5MCwzNTk5MSwzNTk5MywzNTk5NCwzNTk5NSwzNTk5NiwzNTk5NywzNTk5OCwzNTk5OSwzNjAwMCwzNjAwMSwzNjAwMiwzNjAwMywzNjAwNCwzNjAwNSwzNjAwNiwzNjAwNywzNjAwOCwzNjAwOSwzNjAxMCwzNjAxMSwzNjAxMiwzNjAxMywyMDEwOSwxOTk4MCwyMDgwMCwxOTk4NCwyNDMxOSwyMTMxNywxOTk4OSwyMDEyMCwxOTk5OCwzOTczMCwyMzQwNCwyMjEyMSwyMDAwOCwzMTE2MiwyMDAzMSwyMTI2OSwyMDAzOSwyMjgyOSwyOTI0MywyMTM1OCwyNzY2NCwyMjIzOSwzMjk5NiwzOTMxOSwyNzYwMywzMDU5MCw0MDcyNywyMDAyMiwyMDEyNyw0MDcyMCwyMDA2MCwyMDA3MywyMDExNSwzMzQxNiwyMzM4NywyMTg2OCwyMjAzMSwyMDE2NCwyMTM4OSwyMTQwNSwyMTQxMSwyMTQxMywyMTQyMiwzODc1NywzNjE4OSwyMTI3NCwyMTQ5MywyMTI4NiwyMTI5NCwyMTMxMCwzNjE4OCwyMTM1MCwyMTM0NywyMDk5NCwyMTAwMCwyMTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwyMTA4NiwyMTA4OSwyMTA4NCwzMzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwyMTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5MywyMDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2NywyMDMxOCwyMDMyNywyNTkxMiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAxNiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAyNSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwzNjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwzNjAzNiwzNjAzNywzNjAzOCwzNjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0MywzNjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1MiwzNjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2MywzNjA2NCwzNjA2NSwzNjA2NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwzNjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwzNjA5MSwzNjA5MiwzNjA5MywzNjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwzNjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywzNjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1NSwyMDM2NywyMDM1MCwyMDM0NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwyMDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5MiwyMDUxNywyMDUyMCwyMDYwNiwyMDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwyMDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwyMDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcxOCwzMTg2MCwyMDg0NiwyNDA2MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwzNTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywyMDkxMywyMDkyNSwyMDkyNCwzNjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwzNjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywzNjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIwNCwzNjIwNiwzNjIwNywzNjIwOSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIxOSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIzMSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywzNjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwzNjI0NiwzNjI0NywzNjI0OCwzNjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1MywzNjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwzNjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3OSwzNjI4MSwzNjI4MywzNjI4NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkzNSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwzNTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2NywzNTc3OCwzNTc3OSwzNTc4NywzNTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5NiwzNTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywzNTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgzMywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0NywzNTg1MiwzNTg1NSwzNTg1NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwzNTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwzODQzNCwzODQzMywzODQ0OSwzODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3MywzODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwzODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAxNywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1MCwzNjMwOSwzNjMxMiwzNjMxMywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMyNSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwzNjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwzNjM1OSwzNjM2MCwzNjM2MywzNjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwzNjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwzNjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQwMiwzNjQwMywzNjQwNCwzNjQwNiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQxNCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQzMiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwzNjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0NywzNjQ0OCwzNjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1MywzNjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwzNzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4MywzNzA5OSwzNzEwMywzNzExOCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwyMTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwyMDk4OCwzOTcyNywyMTQzMCwyNDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwyMjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywyMjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMzMSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5NiwyMjM5NSwyMjM3NiwyMjM4MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQxMiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwyMjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwzNjQ3MSwzNjQ3MiwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwzNjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5MiwzNjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUxNiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUyOCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywzNjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwzNjU0MSwzNjU0MiwzNjU0MywzNjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwzNjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1NywzNjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2OSwzNjU3MCwzNjU3MSwzNjU3MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwyMjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0MDcyOSwyNTA4NywzMzQwMSwzMzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwzMzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1NiwzMzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2MCwzMzQ0MSwzMzQ1MCwzMzQzOSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2MiwzMzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwzMzYxNywzMzYyNywzMzYyOCwzMzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwzMzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwzMzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYzOCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4NSwzNjU4NiwzNjU4NywzNjU4OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYwMiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwzNjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwzNjYxMywzNjYxNCwzNjYxNSwzNjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwzNjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYzNCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0MCwzNjY0MSwzNjY0MiwzNjY0MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2NywzNjY2OCwzNjY2OSwzNjY3MCwzNjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwzNjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwzMzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcwNiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcwNSwzMzY2MSwzMzcyMCwzMzY1OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcyNCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwzMzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwzMzc4NSwzMzc3MCwzMzczMywzMzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwzMzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwzMzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkzMiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNDAwMCwzNDAyMiwzMzk4MSwzNDAwMywzMzk5NCwzMzk4MywzMzk3OCwzNDAxNiwzMzk1MywzMzk3NywzMzk3MiwzMzk0MywzNDAyMSwzNDAxOSwzNDA2MCwyOTk2NSwzNDEwNCwzNDAzMiwzNDEwNSwzNDA3OSwzNDEwNiwzNjY3NywzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MSwzNjY4MiwzNjY4MywzNjY4NCwzNjY4NSwzNjY4NiwzNjY4NywzNjY4OCwzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NCwzNjY5NSwzNjY5NiwzNjY5NywzNjY5OCwzNjY5OSwzNjcwMCwzNjcwMSwzNjcwMiwzNjcwMywzNjcwNCwzNjcwNSwzNjcwNiwzNjcwNywzNjcwOCwzNjcwOSwzNjcxNCwzNjczNiwzNjc0OCwzNjc1NCwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MCwzNjc3MiwzNjc3MywzNjc3NCwzNjc3NSwzNjc3OCwzNjc4MCwzNjc4MSwzNjc4MiwzNjc4MywzNjc4NiwzNjc4NywzNjc4OCwzNjc4OSwzNjc5MSwzNjc5MiwzNjc5NCwzNjc5NSwzNjc5NiwzNjc5OSwzNjgwMCwzNjgwMywzNjgwNiwzNjgwOSwzNjgxMCwzNjgxMSwzNjgxMiwzNjgxMywzNjgxNSwzNjgxOCwzNjgyMiwzNjgyMywzNjgyNiwzNjgzMiwzNjgzMywzNjgzNSwzNjgzOSwzNjg0NCwzNjg0NywzNjg0OSwzNjg1MCwzNjg1MiwzNjg1MywzNjg1NCwzNjg1OCwzNjg1OSwzNjg2MCwzNjg2MiwzNjg2MywzNjg3MSwzNjg3MiwzNjg3NiwzNjg3OCwzNjg4MywzNjg4NSwzNjg4OCwzNDEzNCwzNDEwNywzNDA0NywzNDA0NCwzNDEzNywzNDEyMCwzNDE1MiwzNDE0OCwzNDE0MiwzNDE3MCwzMDYyNiwzNDExNSwzNDE2MiwzNDE3MSwzNDIxMiwzNDIxNiwzNDE4MywzNDE5MSwzNDE2OSwzNDIyMiwzNDIwNCwzNDE4MSwzNDIzMywzNDIzMSwzNDIyNCwzNDI1OSwzNDI0MSwzNDI2OCwzNDMwMywzNDM0MywzNDMwOSwzNDM0NSwzNDMyNiwzNDM2NCwyNDMxOCwyNDMyOCwyMjg0NCwyMjg0OSwzMjgyMywyMjg2OSwyMjg3NCwyMjg3MiwyMTI2MywyMzU4NiwyMzU4OSwyMzU5NiwyMzYwNCwyNTE2NCwyNTE5NCwyNTI0NywyNTI3NSwyNTI5MCwyNTMwNiwyNTMwMywyNTMyNiwyNTM3OCwyNTMzNCwyNTQwMSwyNTQxOSwyNTQxMSwyNTUxNywyNTU5MCwyNTQ1NywyNTQ2NiwyNTQ4NiwyNTUyNCwyNTQ1MywyNTUxNiwyNTQ4MiwyNTQ0OSwyNTUxOCwyNTUzMiwyNTU4NiwyNTU5MiwyNTU2OCwyNTU5OSwyNTU0MCwyNTU2NiwyNTU1MCwyNTY4MiwyNTU0MiwyNTUzNCwyNTY2OSwyNTY2NSwyNTYxMSwyNTYyNywyNTYzMiwyNTYxMiwyNTYzOCwyNTYzMywyNTY5NCwyNTczMiwyNTcwOSwyNTc1MCwzNjg4OSwzNjg5MiwzNjg5OSwzNjkwMCwzNjkwMSwzNjkwMywzNjkwNCwzNjkwNSwzNjkwNiwzNjkwNywzNjkwOCwzNjkxMiwzNjkxMywzNjkxNCwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyMSwzNjkyMiwzNjkyNSwzNjkyNywzNjkyOCwzNjkzMSwzNjkzMywzNjkzNCwzNjkzNiwzNjkzNywzNjkzOCwzNjkzOSwzNjk0MCwzNjk0MiwzNjk0OCwzNjk0OSwzNjk1MCwzNjk1MywzNjk1NCwzNjk1NiwzNjk1NywzNjk1OCwzNjk1OSwzNjk2MCwzNjk2MSwzNjk2NCwzNjk2NiwzNjk2NywzNjk2OSwzNjk3MCwzNjk3MSwzNjk3MiwzNjk3NSwzNjk3NiwzNjk3NywzNjk3OCwzNjk3OSwzNjk4MiwzNjk4MywzNjk4NCwzNjk4NSwzNjk4NiwzNjk4NywzNjk4OCwzNjk5MCwzNjk5MywzNjk5NiwzNjk5NywzNjk5OCwzNjk5OSwzNzAwMSwzNzAwMiwzNzAwNCwzNzAwNSwzNzAwNiwzNzAwNywzNzAwOCwzNzAxMCwzNzAxMiwzNzAxNCwzNzAxNiwzNzAxOCwzNzAyMCwzNzAyMiwzNzAyMywzNzAyNCwzNzAyOCwzNzAyOSwzNzAzMSwzNzAzMiwzNzAzMywzNzAzNSwzNzAzNywzNzA0MiwzNzA0NywzNzA1MiwzNzA1MywzNzA1NSwzNzA1NiwyNTcyMiwyNTc4MywyNTc4NCwyNTc1MywyNTc4NiwyNTc5MiwyNTgwOCwyNTgxNSwyNTgyOCwyNTgyNiwyNTg2NSwyNTg5MywyNTkwMiwyNDMzMSwyNDUzMCwyOTk3NywyNDMzNywyMTM0MywyMTQ4OSwyMTUwMSwyMTQ4MSwyMTQ4MCwyMTQ5OSwyMTUyMiwyMTUyNiwyMTUxMCwyMTU3OSwyMTU4NiwyMTU4NywyMTU4OCwyMTU5MCwyMTU3MSwyMTUzNywyMTU5MSwyMTU5MywyMTUzOSwyMTU1NCwyMTYzNCwyMTY1MiwyMTYyMywyMTYxNywyMTYwNCwyMTY1OCwyMTY1OSwyMTYzNiwyMTYyMiwyMTYwNiwyMTY2MSwyMTcxMiwyMTY3NywyMTY5OCwyMTY4NCwyMTcxNCwyMTY3MSwyMTY3MCwyMTcxNSwyMTcxNiwyMTYxOCwyMTY2NywyMTcxNywyMTY5MSwyMTY5NSwyMTcwOCwyMTcyMSwyMTcyMiwyMTcyNCwyMTY3MywyMTY3NCwyMTY2OCwyMTcyNSwyMTcxMSwyMTcyNiwyMTc4NywyMTczNSwyMTc5MiwyMTc1NywyMTc4MCwyMTc0NywyMTc5NCwyMTc5NSwyMTc3NSwyMTc3NywyMTc5OSwyMTgwMiwyMTg2MywyMTkwMywyMTk0MSwyMTgzMywyMTg2OSwyMTgyNSwyMTg0NSwyMTgyMywyMTg0MCwyMTgyMCwzNzA1OCwzNzA1OSwzNzA2MiwzNzA2NCwzNzA2NSwzNzA2NywzNzA2OCwzNzA2OSwzNzA3NCwzNzA3NiwzNzA3NywzNzA3OCwzNzA4MCwzNzA4MSwzNzA4MiwzNzA4NiwzNzA4NywzNzA4OCwzNzA5MSwzNzA5MiwzNzA5MywzNzA5NywzNzA5OCwzNzEwMCwzNzEwMiwzNzEwNCwzNzEwNSwzNzEwNiwzNzEwNywzNzEwOSwzNzExMCwzNzExMSwzNzExMywzNzExNCwzNzExNSwzNzExNiwzNzExOSwzNzEyMCwzNzEyMSwzNzEyMywzNzEyNSwzNzEyNiwzNzEyNywzNzEyOCwzNzEyOSwzNzEzMCwzNzEzMSwzNzEzMiwzNzEzMywzNzEzNCwzNzEzNSwzNzEzNiwzNzEzNywzNzEzOCwzNzEzOSwzNzE0MCwzNzE0MSwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0NywzNzE0OCwzNzE0OSwzNzE1MSwzNzE1MiwzNzE1MywzNzE1NiwzNzE1NywzNzE1OCwzNzE1OSwzNzE2MCwzNzE2MSwzNzE2MiwzNzE2MywzNzE2NCwzNzE2NSwzNzE2NiwzNzE2OCwzNzE3MCwzNzE3MSwzNzE3MiwzNzE3MywzNzE3NCwzNzE3NSwzNzE3NiwzNzE3OCwzNzE3OSwzNzE4MCwzNzE4MSwzNzE4MiwzNzE4MywzNzE4NCwzNzE4NSwzNzE4NiwzNzE4OCwyMTgxNSwyMTg0NiwyMTg3NywyMTg3OCwyMTg3OSwyMTgxMSwyMTgwOCwyMTg1MiwyMTg5OSwyMTk3MCwyMTg5MSwyMTkzNywyMTk0NSwyMTg5NiwyMTg4OSwyMTkxOSwyMTg4NiwyMTk3NCwyMTkwNSwyMTg4MywyMTk4MywyMTk0OSwyMTk1MCwyMTkwOCwyMTkxMywyMTk5NCwyMjAwNywyMTk2MSwyMjA0NywyMTk2OSwyMTk5NSwyMTk5NiwyMTk3MiwyMTk5MCwyMTk4MSwyMTk1NiwyMTk5OSwyMTk4OSwyMjAwMiwyMjAwMywyMTk2NCwyMTk2NSwyMTk5MiwyMjAwNSwyMTk4OCwzNjc1NiwyMjA0NiwyMjAyNCwyMjAyOCwyMjAxNywyMjA1MiwyMjA1MSwyMjAxNCwyMjAxNiwyMjA1NSwyMjA2MSwyMjEwNCwyMjA3MywyMjEwMywyMjA2MCwyMjA5MywyMjExNCwyMjEwNSwyMjEwOCwyMjA5MiwyMjEwMCwyMjE1MCwyMjExNiwyMjEyOSwyMjEyMywyMjEzOSwyMjE0MCwyMjE0OSwyMjE2MywyMjE5MSwyMjIyOCwyMjIzMSwyMjIzNywyMjI0MSwyMjI2MSwyMjI1MSwyMjI2NSwyMjI3MSwyMjI3NiwyMjI4MiwyMjI4MSwyMjMwMCwyNDA3OSwyNDA4OSwyNDA4NCwyNDA4MSwyNDExMywyNDEyMywyNDEyNCwzNzE4OSwzNzE5MSwzNzE5MiwzNzIwMSwzNzIwMywzNzIwNCwzNzIwNSwzNzIwNiwzNzIwOCwzNzIwOSwzNzIxMSwzNzIxMiwzNzIxNSwzNzIxNiwzNzIyMiwzNzIyMywzNzIyNCwzNzIyNywzNzIyOSwzNzIzNSwzNzI0MiwzNzI0MywzNzI0NCwzNzI0OCwzNzI0OSwzNzI1MCwzNzI1MSwzNzI1MiwzNzI1NCwzNzI1NiwzNzI1OCwzNzI2MiwzNzI2MywzNzI2NywzNzI2OCwzNzI2OSwzNzI3MCwzNzI3MSwzNzI3MiwzNzI3MywzNzI3NiwzNzI3NywzNzI3OCwzNzI3OSwzNzI4MCwzNzI4MSwzNzI4NCwzNzI4NSwzNzI4NiwzNzI4NywzNzI4OCwzNzI4OSwzNzI5MSwzNzI5MiwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwMywzNzMwNCwzNzMwNSwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMCwzNzMxMSwzNzMxMiwzNzMxMywzNzMxNCwzNzMxNSwzNzMxNiwzNzMxNywzNzMxOCwzNzMyMCwzNzMyMywzNzMyOCwzNzMzMCwzNzMzMSwzNzMzMiwzNzMzMywzNzMzNCwzNzMzNSwzNzMzNiwzNzMzNywzNzMzOCwzNzMzOSwzNzM0MSwzNzM0MiwzNzM0MywzNzM0NCwzNzM0NSwzNzM0NiwzNzM0NywzNzM0OCwzNzM0OSwyNDExOSwyNDEzMiwyNDE0OCwyNDE1NSwyNDE1OCwyNDE2MSwyMzY5MiwyMzY3NCwyMzY5MywyMzY5NiwyMzcwMiwyMzY4OCwyMzcwNCwyMzcwNSwyMzY5NywyMzcwNiwyMzcwOCwyMzczMywyMzcxNCwyMzc0MSwyMzcyNCwyMzcyMywyMzcyOSwyMzcxNSwyMzc0NSwyMzczNSwyMzc0OCwyMzc2MiwyMzc4MCwyMzc1NSwyMzc4MSwyMzgxMCwyMzgxMSwyMzg0NywyMzg0NiwyMzg1NCwyMzg0NCwyMzgzOCwyMzgxNCwyMzgzNSwyMzg5NiwyMzg3MCwyMzg2MCwyMzg2OSwyMzkxNiwyMzg5OSwyMzkxOSwyMzkwMSwyMzkxNSwyMzg4MywyMzg4MiwyMzkxMywyMzkyNCwyMzkzOCwyMzk2MSwyMzk2NSwzNTk1NSwyMzk5MSwyNDAwNSwyNDQzNSwyNDQzOSwyNDQ1MCwyNDQ1NSwyNDQ1NywyNDQ2MCwyNDQ2OSwyNDQ3MywyNDQ3NiwyNDQ4OCwyNDQ5MywyNDUwMSwyNDUwOCwzNDkxNCwyNDQxNywyOTM1NywyOTM2MCwyOTM2NCwyOTM2NywyOTM2OCwyOTM3OSwyOTM3NywyOTM5MCwyOTM4OSwyOTM5NCwyOTQxNiwyOTQyMywyOTQxNywyOTQyNiwyOTQyOCwyOTQzMSwyOTQ0MSwyOTQyNywyOTQ0MywyOTQzNCwzNzM1MCwzNzM1MSwzNzM1MiwzNzM1MywzNzM1NCwzNzM1NSwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2MiwzNzM2MywzNzM2NCwzNzM2NSwzNzM2NiwzNzM2NywzNzM2OCwzNzM2OSwzNzM3MCwzNzM3MSwzNzM3MiwzNzM3MywzNzM3NCwzNzM3NSwzNzM3NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM4NywzNzM4OCwzNzM4OSwzNzM5MCwzNzM5MSwzNzM5MiwzNzM5MywzNzM5NCwzNzM5NSwzNzM5NiwzNzM5NywzNzM5OCwzNzM5OSwzNzQwMCwzNzQwMSwzNzQwMiwzNzQwMywzNzQwNCwzNzQwNSwzNzQwNiwzNzQwNywzNzQwOCwzNzQwOSwzNzQxMCwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNSwzNzQxNiwzNzQxNywzNzQxOCwzNzQxOSwzNzQyMCwzNzQyMSwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNSwzNzQyNiwzNzQyNywzNzQyOCwzNzQyOSwzNzQzMCwzNzQzMSwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNSwzNzQzNiwzNzQzNywzNzQzOCwzNzQzOSwzNzQ0MCwzNzQ0MSwzNzQ0MiwzNzQ0MywzNzQ0NCwzNzQ0NSwyOTQzNSwyOTQ2MywyOTQ1OSwyOTQ3MywyOTQ1MCwyOTQ3MCwyOTQ2OSwyOTQ2MSwyOTQ3NCwyOTQ5NywyOTQ3NywyOTQ4NCwyOTQ5NiwyOTQ4OSwyOTUyMCwyOTUxNywyOTUyNywyOTUzNiwyOTU0OCwyOTU1MSwyOTU2NiwzMzMwNywyMjgyMSwzOTE0MywyMjgyMCwyMjc4NiwzOTI2NywzOTI3MSwzOTI3MiwzOTI3MywzOTI3NCwzOTI3NSwzOTI3NiwzOTI4NCwzOTI4NywzOTI5MywzOTI5NiwzOTMwMCwzOTMwMywzOTMwNiwzOTMwOSwzOTMxMiwzOTMxMywzOTMxNSwzOTMxNiwzOTMxNywyNDE5MiwyNDIwOSwyNDIwMywyNDIxNCwyNDIyOSwyNDIyNCwyNDI0OSwyNDI0NSwyNDI1NCwyNDI0MywzNjE3OSwyNDI3NCwyNDI3MywyNDI4MywyNDI5NiwyNDI5OCwzMzIxMCwyNDUxNiwyNDUyMSwyNDUzNCwyNDUyNywyNDU3OSwyNDU1OCwyNDU4MCwyNDU0NSwyNDU0OCwyNDU3NCwyNDU4MSwyNDU4MiwyNDU1NCwyNDU1NywyNDU2OCwyNDYwMSwyNDYyOSwyNDYxNCwyNDYwMywyNDU5MSwyNDU4OSwyNDYxNywyNDYxOSwyNDU4NiwyNDYzOSwyNDYwOSwyNDY5NiwyNDY5NywyNDY5OSwyNDY5OCwyNDY0MiwzNzQ0NiwzNzQ0NywzNzQ0OCwzNzQ0OSwzNzQ1MCwzNzQ1MSwzNzQ1MiwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NiwzNzQ1NywzNzQ1OCwzNzQ1OSwzNzQ2MCwzNzQ2MSwzNzQ2MiwzNzQ2MywzNzQ2NCwzNzQ2NSwzNzQ2NiwzNzQ2NywzNzQ2OCwzNzQ2OSwzNzQ3MCwzNzQ3MSwzNzQ3MiwzNzQ3MywzNzQ3NCwzNzQ3NSwzNzQ3NiwzNzQ3NywzNzQ3OCwzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4MiwzNzQ4MywzNzQ4NCwzNzQ4NSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ4OSwzNzQ5MCwzNzQ5MSwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OCwzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMiwzNzUwMywzNzUwNCwzNzUwNSwzNzUwNiwzNzUwNywzNzUwOCwzNzUwOSwzNzUxMCwzNzUxMSwzNzUxMiwzNzUxMywzNzUxNCwzNzUxNSwzNzUxNiwzNzUxNywzNzUxOSwzNzUyMCwzNzUyMSwzNzUyMiwzNzUyMywzNzUyNCwzNzUyNSwzNzUyNiwzNzUyNywzNzUyOCwzNzUyOSwzNzUzMCwzNzUzMSwzNzUzMiwzNzUzMywzNzUzNCwzNzUzNSwzNzUzNiwzNzUzNywzNzUzOCwzNzUzOSwzNzU0MCwzNzU0MSwzNzU0MiwzNzU0MywyNDY4MiwyNDcwMSwyNDcyNiwyNDczMCwyNDc0OSwyNDczMywyNDcwNywyNDcyMiwyNDcxNiwyNDczMSwyNDgxMiwyNDc2MywyNDc1MywyNDc5NywyNDc5MiwyNDc3NCwyNDc5NCwyNDc1NiwyNDg2NCwyNDg3MCwyNDg1MywyNDg2NywyNDgyMCwyNDgzMiwyNDg0NiwyNDg3NSwyNDkwNiwyNDk0OSwyNTAwNCwyNDk4MCwyNDk5OSwyNTAxNSwyNTA0NCwyNTA3NywyNDU0MSwzODU3OSwzODM3NywzODM3OSwzODM4NSwzODM4NywzODM4OSwzODM5MCwzODM5NiwzODM5OCwzODQwMywzODQwNCwzODQwNiwzODQwOCwzODQxMCwzODQxMSwzODQxMiwzODQxMywzODQxNSwzODQxOCwzODQyMSwzODQyMiwzODQyMywzODQyNSwzODQyNiwyMDAxMiwyOTI0NywyNTEwOSwyNzcwMSwyNzczMiwyNzc0MCwyNzcyMiwyNzgxMSwyNzc4MSwyNzc5MiwyNzc5NiwyNzc4OCwyNzc1MiwyNzc1MywyNzc2NCwyNzc2NiwyNzc4MiwyNzgxNywyNzg1NiwyNzg2MCwyNzgyMSwyNzg5NSwyNzg5NiwyNzg4OSwyNzg2MywyNzgyNiwyNzg3MiwyNzg2MiwyNzg5OCwyNzg4MywyNzg4NiwyNzgyNSwyNzg1OSwyNzg4NywyNzkwMiwzNzU0NCwzNzU0NSwzNzU0NiwzNzU0NywzNzU0OCwzNzU0OSwzNzU1MSwzNzU1MiwzNzU1MywzNzU1NCwzNzU1NSwzNzU1NiwzNzU1NywzNzU1OCwzNzU1OSwzNzU2MCwzNzU2MSwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NiwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MiwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NywzNzU3OCwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4MywzNzU4NCwzNzU4NSwzNzU4NiwzNzU4NywzNzU4OCwzNzU4OSwzNzU5MCwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NCwzNzU5NSwzNzU5NiwzNzU5NywzNzU5OCwzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMiwzNzYwMywzNzYwNCwzNzYwNSwzNzYwNiwzNzYwNywzNzYwOCwzNzYwOSwzNzYxMCwzNzYxMSwzNzYxMiwzNzYxMywzNzYxNCwzNzYxNSwzNzYxNiwzNzYxNywzNzYxOCwzNzYxOSwzNzYyMCwzNzYyMSwzNzYyMiwzNzYyMywzNzYyNCwzNzYyNSwzNzYyNiwzNzYyNywzNzYyOCwzNzYyOSwzNzYzMCwzNzYzMSwzNzYzMiwzNzYzMywzNzYzNCwzNzYzNSwzNzYzNiwzNzYzNywzNzYzOCwzNzYzOSwzNzY0MCwzNzY0MSwyNzk2MSwyNzk0MywyNzkxNiwyNzk3MSwyNzk3NiwyNzkxMSwyNzkwOCwyNzkyOSwyNzkxOCwyNzk0NywyNzk4MSwyNzk1MCwyNzk1NywyNzkzMCwyNzk4MywyNzk4NiwyNzk4OCwyNzk1NSwyODA0OSwyODAxNSwyODA2MiwyODA2NCwyNzk5OCwyODA1MSwyODA1MiwyNzk5NiwyODAwMCwyODAyOCwyODAwMywyODE4NiwyODEwMywyODEwMSwyODEyNiwyODE3NCwyODA5NSwyODEyOCwyODE3NywyODEzNCwyODEyNSwyODEyMSwyODE4MiwyODA3NSwyODE3MiwyODA3OCwyODIwMywyODI3MCwyODIzOCwyODI2NywyODMzOCwyODI1NSwyODI5NCwyODI0MywyODI0NCwyODIxMCwyODE5NywyODIyOCwyODM4MywyODMzNywyODMxMiwyODM4NCwyODQ2MSwyODM4NiwyODMyNSwyODMyNywyODM0OSwyODM0NywyODM0MywyODM3NSwyODM0MCwyODM2NywyODMwMywyODM1NCwyODMxOSwyODUxNCwyODQ4NiwyODQ4NywyODQ1MiwyODQzNywyODQwOSwyODQ2MywyODQ3MCwyODQ5MSwyODUzMiwyODQ1OCwyODQyNSwyODQ1NywyODU1MywyODU1NywyODU1NiwyODUzNiwyODUzMCwyODU0MCwyODUzOCwyODYyNSwzNzY0MiwzNzY0MywzNzY0NCwzNzY0NSwzNzY0NiwzNzY0NywzNzY0OCwzNzY0OSwzNzY1MCwzNzY1MSwzNzY1MiwzNzY1MywzNzY1NCwzNzY1NSwzNzY1NiwzNzY1NywzNzY1OCwzNzY1OSwzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NCwzNzY2NSwzNzY2NiwzNzY2NywzNzY2OCwzNzY2OSwzNzY3MCwzNzY3MSwzNzY3MiwzNzY3MywzNzY3NCwzNzY3NSwzNzY3NiwzNzY3NywzNzY3OCwzNzY3OSwzNzY4MCwzNzY4MSwzNzY4MiwzNzY4MywzNzY4NCwzNzY4NSwzNzY4NiwzNzY4NywzNzY4OCwzNzY4OSwzNzY5MCwzNzY5MSwzNzY5MiwzNzY5MywzNzY5NSwzNzY5NiwzNzY5NywzNzY5OCwzNzY5OSwzNzcwMCwzNzcwMSwzNzcwMiwzNzcwMywzNzcwNCwzNzcwNSwzNzcwNiwzNzcwNywzNzcwOCwzNzcwOSwzNzcxMCwzNzcxMSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNSwzNzcxNiwzNzcxNywzNzcxOCwzNzcxOSwzNzcyMCwzNzcyMSwzNzcyMiwzNzcyMywzNzcyNCwzNzcyNSwzNzcyNiwzNzcyNywzNzcyOCwzNzcyOSwzNzczMCwzNzczMSwzNzczMiwzNzczMywzNzczNCwzNzczNSwzNzczNiwzNzczNywzNzczOSwyODYxNywyODU4MywyODYwMSwyODU5OCwyODYxMCwyODY0MSwyODY1NCwyODYzOCwyODY0MCwyODY1NSwyODY5OCwyODcwNywyODY5OSwyODcyOSwyODcyNSwyODc1MSwyODc2NiwyMzQyNCwyMzQyOCwyMzQ0NSwyMzQ0MywyMzQ2MSwyMzQ4MCwyOTk5OSwzOTU4MiwyNTY1MiwyMzUyNCwyMzUzNCwzNTEyMCwyMzUzNiwzNjQyMywzNTU5MSwzNjc5MCwzNjgxOSwzNjgyMSwzNjgzNywzNjg0NiwzNjgzNiwzNjg0MSwzNjgzOCwzNjg1MSwzNjg0MCwzNjg2OSwzNjg2OCwzNjg3NSwzNjkwMiwzNjg4MSwzNjg3NywzNjg4NiwzNjg5NywzNjkxNywzNjkxOCwzNjkwOSwzNjkxMSwzNjkzMiwzNjk0NSwzNjk0NiwzNjk0NCwzNjk2OCwzNjk1MiwzNjk2MiwzNjk1NSwyNjI5NywzNjk4MCwzNjk4OSwzNjk5NCwzNzAwMCwzNjk5NSwzNzAwMywyNDQwMCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2MiwyMjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0NywzNzc0MCwzNzc0MSwzNzc0MiwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0NywzNzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1NiwzNzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2NywzNzc2OCwzNzc2OSwzNzc3MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwzNzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwzNzc5NiwzNzc5NywzNzc5OCwzNzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywzNzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwzNzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgxNywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgyMywzNzgyNCwzNzgyNSwzNzgyNiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwyMjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwyMzAxMSwyMzAwMCwyMzAzMywyMzA1MiwyMzA0OSwyMzA5MCwyMzA5MiwyMzA1NywyMzA3NSwyMzA1OSwyMzEwNCwyMzE0MywyMzExNCwyMzEyNSwyMzEwMCwyMzEzOCwyMzE1NywzMzAwNCwyMzIxMCwyMzE5NSwyMzE1OSwyMzE2MiwyMzIzMCwyMzI3NSwyMzIxOCwyMzI1MCwyMzI1MiwyMzIyNCwyMzI2NCwyMzI2NywyMzI4MSwyMzI1NCwyMzI3MCwyMzI1NiwyMzI2MCwyMzMwNSwyMzMxOSwyMzMxOCwyMzM0NiwyMzM1MSwyMzM2MCwyMzU3MywyMzU4MCwyMzM4NiwyMzM5NywyMzQxMSwyMzM3NywyMzM3OSwyMzM5NCwzOTU0MSwzOTU0MywzOTU0NCwzOTU0NiwzOTU1MSwzOTU0OSwzOTU1MiwzOTU1MywzOTU1NywzOTU2MCwzOTU2MiwzOTU2OCwzOTU3MCwzOTU3MSwzOTU3NCwzOTU3NiwzOTU3OSwzOTU4MCwzOTU4MSwzOTU4MywzOTU4NCwzOTU4NiwzOTU4NywzOTU4OSwzOTU5MSwzMjQxNSwzMjQxNywzMjQxOSwzMjQyMSwzMjQyNCwzMjQyNSwzNzgzOCwzNzgzOSwzNzg0MCwzNzg0MSwzNzg0MiwzNzg0MywzNzg0NCwzNzg0NSwzNzg0NywzNzg0OCwzNzg0OSwzNzg1MCwzNzg1MSwzNzg1MiwzNzg1MywzNzg1NCwzNzg1NSwzNzg1NiwzNzg1NywzNzg1OCwzNzg1OSwzNzg2MCwzNzg2MSwzNzg2MiwzNzg2MywzNzg2NCwzNzg2NSwzNzg2NiwzNzg2NywzNzg2OCwzNzg2OSwzNzg3MCwzNzg3MSwzNzg3MiwzNzg3MywzNzg3NCwzNzg3NSwzNzg3NiwzNzg3NywzNzg3OCwzNzg3OSwzNzg4MCwzNzg4MSwzNzg4MiwzNzg4MywzNzg4NCwzNzg4NSwzNzg4NiwzNzg4NywzNzg4OCwzNzg4OSwzNzg5MCwzNzg5MSwzNzg5MiwzNzg5MywzNzg5NCwzNzg5NSwzNzg5NiwzNzg5NywzNzg5OCwzNzg5OSwzNzkwMCwzNzkwMSwzNzkwMiwzNzkwMywzNzkwNCwzNzkwNSwzNzkwNiwzNzkwNywzNzkwOCwzNzkwOSwzNzkxMCwzNzkxMSwzNzkxMiwzNzkxMywzNzkxNCwzNzkxNSwzNzkxNiwzNzkxNywzNzkxOCwzNzkxOSwzNzkyMCwzNzkyMSwzNzkyMiwzNzkyMywzNzkyNCwzNzkyNSwzNzkyNiwzNzkyNywzNzkyOCwzNzkyOSwzNzkzMCwzNzkzMSwzNzkzMiwzNzkzMywzNzkzNCwzMjQyOSwzMjQzMiwzMjQ0NiwzMjQ0OCwzMjQ0OSwzMjQ1MCwzMjQ1NywzMjQ1OSwzMjQ2MCwzMjQ2NCwzMjQ2OCwzMjQ3MSwzMjQ3NSwzMjQ4MCwzMjQ4MSwzMjQ4OCwzMjQ5MSwzMjQ5NCwzMjQ5NSwzMjQ5NywzMjQ5OCwzMjUyNSwzMjUwMiwzMjUwNiwzMjUwNywzMjUxMCwzMjUxMywzMjUxNCwzMjUxNSwzMjUxOSwzMjUyMCwzMjUyMywzMjUyNCwzMjUyNywzMjUyOSwzMjUzMCwzMjUzNSwzMjUzNywzMjU0MCwzMjUzOSwzMjU0MywzMjU0NSwzMjU0NiwzMjU0NywzMjU0OCwzMjU0OSwzMjU1MCwzMjU1MSwzMjU1NCwzMjU1NSwzMjU1NiwzMjU1NywzMjU1OSwzMjU2MCwzMjU2MSwzMjU2MiwzMjU2MywzMjU2NSwyNDE4NiwzMDA3OSwyNDAyNywzMDAxNCwzNzAxMywyOTU4MiwyOTU4NSwyOTYxNCwyOTYwMiwyOTU5OSwyOTY0NywyOTYzNCwyOTY0OSwyOTYyMywyOTYxOSwyOTYzMiwyOTY0MSwyOTY0MCwyOTY2OSwyOTY1NywzOTAzNiwyOTcwNiwyOTY3MywyOTY3MSwyOTY2MiwyOTYyNiwyOTY4MiwyOTcxMSwyOTczOCwyOTc4NywyOTczNCwyOTczMywyOTczNiwyOTc0NCwyOTc0MiwyOTc0MCwzNzkzNSwzNzkzNiwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0MSwzNzk0MiwzNzk0MywzNzk0NCwzNzk0NSwzNzk0NiwzNzk0NywzNzk0OCwzNzk0OSwzNzk1MSwzNzk1MiwzNzk1MywzNzk1NCwzNzk1NSwzNzk1NiwzNzk1NywzNzk1OCwzNzk1OSwzNzk2MCwzNzk2MSwzNzk2MiwzNzk2MywzNzk2NCwzNzk2NSwzNzk2NiwzNzk2NywzNzk2OCwzNzk2OSwzNzk3MCwzNzk3MSwzNzk3MiwzNzk3MywzNzk3NCwzNzk3NSwzNzk3NiwzNzk3NywzNzk3OCwzNzk3OSwzNzk4MCwzNzk4MSwzNzk4MiwzNzk4MywzNzk4NCwzNzk4NSwzNzk4NiwzNzk4NywzNzk4OCwzNzk4OSwzNzk5MCwzNzk5MSwzNzk5MiwzNzk5MywzNzk5NCwzNzk5NiwzNzk5NywzNzk5OCwzNzk5OSwzODAwMCwzODAwMSwzODAwMiwzODAwMywzODAwNCwzODAwNSwzODAwNiwzODAwNywzODAwOCwzODAwOSwzODAxMCwzODAxMSwzODAxMiwzODAxMywzODAxNCwzODAxNSwzODAxNiwzODAxNywzODAxOCwzODAxOSwzODAyMCwzODAzMywzODAzOCwzODA0MCwzODA4NywzODA5NSwzODA5OSwzODEwMCwzODEwNiwzODExOCwzODEzOSwzODE3MiwzODE3NiwyOTcyMywyOTcyMiwyOTc2MSwyOTc4OCwyOTc4MywyOTc4MSwyOTc4NSwyOTgxNSwyOTgwNSwyOTgyMiwyOTg1MiwyOTgzOCwyOTgyNCwyOTgyNSwyOTgzMSwyOTgzNSwyOTg1NCwyOTg2NCwyOTg2NSwyOTg0MCwyOTg2MywyOTkwNiwyOTg4MiwzODg5MCwzODg5MSwzODg5MiwyNjQ0NCwyNjQ1MSwyNjQ2MiwyNjQ0MCwyNjQ3MywyNjUzMywyNjUwMywyNjQ3NCwyNjQ4MywyNjUyMCwyNjUzNSwyNjQ4NSwyNjUzNiwyNjUyNiwyNjU0MSwyNjUwNywyNjQ4NywyNjQ5MiwyNjYwOCwyNjYzMywyNjU4NCwyNjYzNCwyNjYwMSwyNjU0NCwyNjYzNiwyNjU4NSwyNjU0OSwyNjU4NiwyNjU0NywyNjU4OSwyNjYyNCwyNjU2MywyNjU1MiwyNjU5NCwyNjYzOCwyNjU2MSwyNjYyMSwyNjY3NCwyNjY3NSwyNjcyMCwyNjcyMSwyNjcwMiwyNjcyMiwyNjY5MiwyNjcyNCwyNjc1NSwyNjY1MywyNjcwOSwyNjcyNiwyNjY4OSwyNjcyNywyNjY4OCwyNjY4NiwyNjY5OCwyNjY5NywyNjY2NSwyNjgwNSwyNjc2NywyNjc0MCwyNjc0MywyNjc3MSwyNjczMSwyNjgxOCwyNjk5MCwyNjg3NiwyNjkxMSwyNjkxMiwyNjg3MywzODE4MywzODE5NSwzODIwNSwzODIxMSwzODIxNiwzODIxOSwzODIyOSwzODIzNCwzODI0MCwzODI1NCwzODI2MCwzODI2MSwzODI2MywzODI2NCwzODI2NSwzODI2NiwzODI2NywzODI2OCwzODI2OSwzODI3MCwzODI3MiwzODI3MywzODI3NCwzODI3NSwzODI3NiwzODI3NywzODI3OCwzODI3OSwzODI4MCwzODI4MSwzODI4MiwzODI4MywzODI4NCwzODI4NSwzODI4NiwzODI4NywzODI4OCwzODI4OSwzODI5MCwzODI5MSwzODI5MiwzODI5MywzODI5NCwzODI5NSwzODI5NiwzODI5NywzODI5OCwzODI5OSwzODMwMCwzODMwMSwzODMwMiwzODMwMywzODMwNCwzODMwNSwzODMwNiwzODMwNywzODMwOCwzODMwOSwzODMxMCwzODMxMSwzODMxMiwzODMxMywzODMxNCwzODMxNSwzODMxNiwzODMxNywzODMxOCwzODMxOSwzODMyMCwzODMyMSwzODMyMiwzODMyMywzODMyNCwzODMyNSwzODMyNiwzODMyNywzODMyOCwzODMyOSwzODMzMCwzODMzMSwzODMzMiwzODMzMywzODMzNCwzODMzNSwzODMzNiwzODMzNywzODMzOCwzODMzOSwzODM0MCwzODM0MSwzODM0MiwzODM0MywzODM0NCwzODM0NSwzODM0NiwzODM0NywyNjkxNiwyNjg2NCwyNjg5MSwyNjg4MSwyNjk2NywyNjg1MSwyNjg5NiwyNjk5MywyNjkzNywyNjk3NiwyNjk0NiwyNjk3MywyNzAxMiwyNjk4NywyNzAwOCwyNzAzMiwyNzAwMCwyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4NiwyNzAxNywyNjk4MiwyNjk3OSwyNzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwyNzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwyNzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIxNiwyNzIyNywyNzE4OSwyNzI3OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUyMiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwyNzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwzNjcxNywzNjcyMSwzNjcyMiwzNjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywzNjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0NywzODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1OCwzODM1OSwzODM2MCwzODM2MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwzODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwzODQzNywzODQzOCwzODQzOSwzODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwzODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2NywzODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5MCwzODQ5MiwzODQ5MywzODQ5NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUwNywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUyMiwzODUyMywzODUyNCwzODUyNSwzODUyNiwzODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNSwzODUzNywzODUzOCwzNjc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2MiwzNjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwyNTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5NSwyNjA5NiwyNjEyMiwyNjEzNywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgwNSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwyNjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwyNjMwMiwyNjMzMSwyNjMzMiwyNjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwzNjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3MywzNjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5NCwyOTM0MywyOTI3NywyOTI4NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMyMywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwzODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwzODU2MSwzODU2MiwzODU2MywzODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwzODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwzODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYwMywzODYwOCwzODYwOSwzODYxMSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYxNywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYyNywzODYyOCwzODYyOSwzODYzMCwzODYzMSwzODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwzODY0MiwzODY0NCwzODY0NSwzODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1MywzODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3MywzODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4OCwyNTY2MywyNTgxNiwzMjc3MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwyNTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwyOTIzMiwzNDQwMiwyMTAxNCwzMjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwzMjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzMzAwMCwzMzAwMSwzMzAwMiwzMjk4NywzMjk2MiwzMjk2NCwzMjk4NSwzMjk3MywzMjk4MywyNjM4NCwzMjk4OSwzMzAwMywzMzAwOSwzMzAxMiwzMzAwNSwzMzAzNywzMzAzOCwzMzAxMCwzMzAyMCwyNjM4OSwzMzA0MiwzNTkzMCwzMzA3OCwzMzA1NCwzMzA2OCwzMzA0OCwzMzA3NCwzMzA5NiwzMzEwMCwzMzEwNywzMzE0MCwzMzExMywzMzExNCwzMzEzNywzMzEyMCwzMzEyOSwzMzE0OCwzMzE0OSwzMzEzMywzMzEyNywyMjYwNSwyMzIyMSwzMzE2MCwzMzE1NCwzMzE2OSwyODM3MywzMzE4NywzMzE5NCwzMzIyOCwyNjQwNiwzMzIyNiwzMzIxMSwzODY4OSwzODY5MCwzODY5MSwzODY5MiwzODY5MywzODY5NCwzODY5NSwzODY5NiwzODY5NywzODY5OSwzODcwMCwzODcwMiwzODcwMywzODcwNSwzODcwNywzODcwOCwzODcwOSwzODcxMCwzODcxMSwzODcxNCwzODcxNSwzODcxNiwzODcxNywzODcxOSwzODcyMCwzODcyMSwzODcyMiwzODcyMywzODcyNCwzODcyNSwzODcyNiwzODcyNywzODcyOCwzODcyOSwzODczMCwzODczMSwzODczMiwzODczMywzODczNCwzODczNSwzODczNiwzODczNywzODc0MCwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0OCwzODc0OSwzODc1MSwzODc1NSwzODc1NiwzODc1OCwzODc1OSwzODc2MCwzODc2MiwzODc2MywzODc2NCwzODc2NSwzODc2NiwzODc2NywzODc2OCwzODc2OSwzODc3MCwzODc3MywzODc3NSwzODc3NiwzODc3NywzODc3OCwzODc3OSwzODc4MSwzODc4MiwzODc4MywzODc4NCwzODc4NSwzODc4NiwzODc4NywzODc4OCwzODc5MCwzODc5MSwzODc5MiwzODc5MywzODc5NCwzODc5NiwzODc5OCwzODc5OSwzODgwMCwzODgwMywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxMSwzODgxMiwzODgxMywzMzIxNywzMzE5MCwyNzQyOCwyNzQ0NywyNzQ0OSwyNzQ1OSwyNzQ2MiwyNzQ4MSwzOTEyMSwzOTEyMiwzOTEyMywzOTEyNSwzOTEyOSwzOTEzMCwyNzU3MSwyNDM4NCwyNzU4NiwzNTMxNSwyNjAwMCw0MDc4NSwyNjAwMywyNjA0NCwyNjA1NCwyNjA1MiwyNjA1MSwyNjA2MCwyNjA2MiwyNjA2NiwyNjA3MCwyODgwMCwyODgyOCwyODgyMiwyODgyOSwyODg1OSwyODg2NCwyODg1NSwyODg0MywyODg0OSwyODkwNCwyODg3NCwyODk0NCwyODk0NywyODk1MCwyODk3NSwyODk3NywyOTA0MywyOTAyMCwyOTAzMiwyODk5NywyOTA0MiwyOTAwMiwyOTA0OCwyOTA1MCwyOTA4MCwyOTEwNywyOTEwOSwyOTA5NiwyOTA4OCwyOTE1MiwyOTE0MCwyOTE1OSwyOTE3NywyOTIxMywyOTIyNCwyODc4MCwyODk1MiwyOTAzMCwyOTExMywyNTE1MCwyNTE0OSwyNTE1NSwyNTE2MCwyNTE2MSwzMTAzNSwzMTA0MCwzMTA0NiwzMTA0OSwzMTA2NywzMTA2OCwzMTA1OSwzMTA2NiwzMTA3NCwzMTA2MywzMTA3MiwzMTA4NywzMTA3OSwzMTA5OCwzMTEwOSwzMTExNCwzMTEzMCwzMTE0MywzMTE1NSwyNDUyOSwyNDUyOCwzODgxNCwzODgxNSwzODgxNywzODgxOCwzODgyMCwzODgyMSwzODgyMiwzODgyMywzODgyNCwzODgyNSwzODgyNiwzODgyOCwzODgzMCwzODgzMiwzODgzMywzODgzNSwzODgzNywzODgzOCwzODgzOSwzODg0MCwzODg0MSwzODg0MiwzODg0MywzODg0NCwzODg0NSwzODg0NiwzODg0NywzODg0OCwzODg0OSwzODg1MCwzODg1MSwzODg1MiwzODg1MywzODg1NCwzODg1NSwzODg1NiwzODg1NywzODg1OCwzODg1OSwzODg2MCwzODg2MSwzODg2MiwzODg2MywzODg2NCwzODg2NSwzODg2NiwzODg2NywzODg2OCwzODg2OSwzODg3MCwzODg3MSwzODg3MiwzODg3MywzODg3NCwzODg3NSwzODg3NiwzODg3NywzODg3OCwzODg3OSwzODg4MCwzODg4MSwzODg4MiwzODg4MywzODg4NCwzODg4NSwzODg4OCwzODg5NCwzODg5NSwzODg5NiwzODg5NywzODg5OCwzODkwMCwzODkwMywzODkwNCwzODkwNSwzODkwNiwzODkwNywzODkwOCwzODkwOSwzODkxMCwzODkxMSwzODkxMiwzODkxMywzODkxNCwzODkxNSwzODkxNiwzODkxNywzODkxOCwzODkxOSwzODkyMCwzODkyMSwzODkyMiwzODkyMywzODkyNCwzODkyNSwzODkyNiwyNDYzNiwyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDY2NSwyNDY3NSwyNDc0NywyNDgzOCwyNDg0NSwyNDkyNSwyNTAwMSwyNDk4OSwyNTAzNSwyNTA0MSwyNTA5NCwzMjg5NiwzMjg5NSwyNzc5NSwyNzg5NCwyODE1NiwzMDcxMCwzMDcxMiwzMDcyMCwzMDcyOSwzMDc0MywzMDc0NCwzMDczNywyNjAyNywzMDc2NSwzMDc0OCwzMDc0OSwzMDc3NywzMDc3OCwzMDc3OSwzMDc1MSwzMDc4MCwzMDc1NywzMDc2NCwzMDc1NSwzMDc2MSwzMDc5OCwzMDgyOSwzMDgwNiwzMDgwNywzMDc1OCwzMDgwMCwzMDc5MSwzMDc5NiwzMDgyNiwzMDg3NSwzMDg2NywzMDg3NCwzMDg1NSwzMDg3NiwzMDg4MSwzMDg4MywzMDg5OCwzMDkwNSwzMDg4NSwzMDkzMiwzMDkzNywzMDkyMSwzMDk1NiwzMDk2MiwzMDk4MSwzMDk2NCwzMDk5NSwzMTAxMiwzMTAwNiwzMTAyOCw0MDg1OSw0MDY5Nyw0MDY5OSw0MDcwMCwzMDQ0OSwzMDQ2OCwzMDQ3NywzMDQ1NywzMDQ3MSwzMDQ3MiwzMDQ5MCwzMDQ5OCwzMDQ4OSwzMDUwOSwzMDUwMiwzMDUxNywzMDUyMCwzMDU0NCwzMDU0NSwzMDUzNSwzMDUzMSwzMDU1NCwzMDU2OCwzODkyNywzODkyOCwzODkyOSwzODkzMCwzODkzMSwzODkzMiwzODkzMywzODkzNCwzODkzNSwzODkzNiwzODkzNywzODkzOCwzODkzOSwzODk0MCwzODk0MSwzODk0MiwzODk0MywzODk0NCwzODk0NSwzODk0NiwzODk0NywzODk0OCwzODk0OSwzODk1MCwzODk1MSwzODk1MiwzODk1MywzODk1NCwzODk1NSwzODk1NiwzODk1NywzODk1OCwzODk1OSwzODk2MCwzODk2MSwzODk2MiwzODk2MywzODk2NCwzODk2NSwzODk2NiwzODk2NywzODk2OCwzODk2OSwzODk3MCwzODk3MSwzODk3MiwzODk3MywzODk3NCwzODk3NSwzODk3NiwzODk3NywzODk3OCwzODk3OSwzODk4MCwzODk4MSwzODk4MiwzODk4MywzODk4NCwzODk4NSwzODk4NiwzODk4NywzODk4OCwzODk4OSwzODk5MCwzODk5MSwzODk5MiwzODk5MywzODk5NCwzODk5NSwzODk5NiwzODk5NywzODk5OCwzODk5OSwzOTAwMCwzOTAwMSwzOTAwMiwzOTAwMywzOTAwNCwzOTAwNSwzOTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwzOTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwzOTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYwOSwzMDYyMywzMDYyNCwzMDY0MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAzMCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYwNywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwzMjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2NiwzODAyMSwzODAyMiwzODAyMywzODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwzODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1MiwzODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3MiwzODA3MywzODA3NCwzODA3NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEwMSwzODEwMiwzODEwMywzODEwNSwzODEwNCwzODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwzODExNywzODExOSwzODEyMCwzODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwzOTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwzOTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5MSwzOTA5MiwzOTA5MywzOTA5NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEwOCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwzOTEyMCwzOTEyNCwzOTEyNiwzOTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwzOTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0NywzOTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1OCwzOTE1OSwzOTE2MCwzOTE2MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3NSwzODEyMSwzODEyMywzODEyNiwzODEyNywzODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwzODE0MSwzODE0MywzODE0NywzODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwzODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwzODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5NCwzODE5NiwzODE5OCwzODE5OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIxMCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIyNiwzODIyNywzODIyOCwzODIzMCwzODIzMSwzODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywzODI0MSwzODI0MiwzODI0NCwzODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwzODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwzMDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIwMywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2MiwzMTI1MiwzOTE3NiwzOTE3NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5NywzOTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywzOTIwNCwzOTIwNSwzOTIwNiwzOTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwzOTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIzMiwzOTIzMywzOTIzNCwzOTIzNSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwzOTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwzOTI2MiwzOTI2MywzOTI2NCwzOTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4MywzOTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4NywzMTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTkyMCwyOTk5Niw0MDQ4MCw0MDQ4Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUxMyw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0MDUzMyw0MDUzNSw0MDUzOCw0MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2MywzMDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEwOSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0OCwzMDEyOSwzMDEyOCwzMDE0NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIyNCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwzMDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwzOTMxMCwzOTMyMiwzOTMyMywzOTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwzOTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwzOTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1MCwzOTM1MSwzOTM1MiwzOTM1MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwzOTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3NywzOTM3OCwzOTM3OSwzOTM4MCwzOTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwzOTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwzOTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwNSwzOTQwNiwzOTQwNywzOTQwOCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQxMywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwzMDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5MiwzMDMwMCwzMDI5NCwzMDMxNSwzMDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1MywzMTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwzMTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAwNCwzNTAxNywzNTA0MiwzNTAyMiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEyNCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwzNTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwzMjc4NiwzMjc4OCwzMjc5MCwzMjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwzMjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwzMjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAzMiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQyMSwzOTQyMiwzOTQyMywzOTQyNCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQyOSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQzOCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0MiwzOTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwzOTQ0OSwzOTQ1MCwzOTQ1MSwzOTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1NiwzOTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwzOTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3NiwzOTQ3NywzOTQ3OCwzOTQ3OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5NywzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywzOTUwNCwzOTUwNSwzOTUwNiwzOTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwzOTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2NywzOTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQzMSwzNDQyNiwzNDQyOCwzNDQyNywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUxMCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwzNDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0NiwzNDU0MSwzNDU0NywzNDUxMiwzNDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwzNDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwzNDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYxNSwzNDYyMywzNDY5MCwzNDU5NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwzOTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwzOTUyMCwzOTUyMSwzOTUyMiwzOTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywzOTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2NiwzOTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5OSwzOTYwMiwzOTYwMywzOTYwNCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYxNCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYyOSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwzOTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0MiwzOTY0MywzOTY0NCwzOTY0NSwzOTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwzOTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3OCwzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwzNDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwzNDc5OCwzNDgzOCwzNDgzNSwzNDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3MywzNDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5NiwzMTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUzMSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUzNCwzMTUzNywzMTUyMCwzMTUyNSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwzMTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwzMTY1OCwzMTY0NCwzMTY1MCwzMTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5MiwzMTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwzMTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5NywzOTY5OCwzOTcwMCwzOTcwMSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcwNiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcxNywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwzOTcyOSwzOTczMSwzOTczMiwzOTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywzOTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1NiwzOTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3MSwzOTc3MiwzOTc3MywzOTc3NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5MiwzOTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwzOTc5OSwzOTgwMCwzOTgwMSwzOTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4MiwzMTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwzMzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMyNywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMzMiwzMzM0MiwzMzM0OCwzMzM1MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwyNTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwzMTkyMiwzMTkzMiwzMTkzMywzMTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwzMTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwzMjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQxMSw0MDYzMiw0MDYyOCwzNjIxMSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgwNCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwzOTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNiwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwzOTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwzOTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgzNiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0MiwzOTg0MywzOTg0NCwzOTg0NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2MywzOTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwzOTg3MCwzOTg3MSwzOTg3MiwzOTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3NywzOTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4NiwzOTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5NywzOTg5OCwzOTg5OSwzNzIxOCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5MywzNzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0MDU3NCwzNjI4MCwzNjMzMSwzNjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4NywzNjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywzNjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0OSwzNjM3MiwzNjM4MSwzNjM4MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQxMCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQzMywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwzNjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwzNjQ5NiwzNjUwOCwzNjUxMCwzNTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5MiwzNTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwzOTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkwNywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkxMywzOTkxNCwzOTkxNSwzOTkxNiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTkyMSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwzOTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwzOTk0MSwzOTk0MiwzOTk0MywzOTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwzOTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1NywzOTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2OCwzOTk2OSwzOTk3MCwzOTk3MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwzNTMwMSwzNTMwNywzNTMxMSwzNTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0MywzODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwzODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgzOCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcwMiw0MDcxNSw0MDcxNywzODU4NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0MDA4MCw0MDA4MSw0MDA4Miw0MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDExMiw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDExOCw0MDExOSw0MDEyMiw0MDEyMyw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEzNCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0MDAwMCw0MDAwMSw0MDAwMiw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwNiw0MDAwNyw0MDAwOCw0MDAwOSw0MDAxMCw0MDAxMSw0MDAxMiw0MDAxMyw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxNyw0MDAxOCw0MDAxOSw0MDAyMCw0MDAyMSw0MDAyMiw0MDAyMyw0MDAyNCw0MDAyNSw0MDAyNiw0MDAyNyw0MDAyOCw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzMiw0MDAzMyw0MDAzNCw0MDAzNSw0MDAzNiw0MDAzNyw0MDAzOCw0MDAzOSw0MDA0MCw0MDA0MSw0MDA0Miw0MDA0Myw0MDA0NCw0MDA0NSw0MDA0Niw0MDA0Nyw0MDA0OCw0MDA0OSw0MDA1MCw0MDA1MSw0MDA1Miw0MDA1Myw0MDA1NCw0MDA1NSw0MDA1Niw0MDA1Nyw0MDA1OCw0MDA1OSw0MDA2MSw0MDA2Miw0MDA2NCw0MDA2Nyw0MDA2OCw0MDA3Myw0MDA3NCw0MDA3Niw0MDA3OSw0MDA4Myw0MDA4Niw0MDA4Nyw0MDA4OCw0MDA4OSw0MDA5Myw0MDEwNiw0MDEwOCw0MDExMSw0MDEyMSw0MDEyNiw0MDEyNyw0MDEyOCw0MDEyOSw0MDEzMCw0MDEzNiw0MDEzNyw0MDE0NSw0MDE0Niw0MDE1NCw0MDE1NSw0MDE2MCw0MDE2MSw0MDE0MCw0MDE0MSw0MDE0Miw0MDE0Myw0MDE0NCw0MDE0Nyw0MDE0OCw0MDE0OSw0MDE1MSw0MDE1Miw0MDE1Myw0MDE1Niw0MDE1Nyw0MDE1OSw0MDE2MiwzODc4MCwzODc4OSwzODgwMSwzODgwMiwzODgwNCwzODgzMSwzODgyNywzODgxOSwzODgzNCwzODgzNiwzOTYwMSwzOTYwMCwzOTYwNyw0MDUzNiwzOTYwNiwzOTYxMCwzOTYxMiwzOTYxNywzOTYxNiwzOTYyMSwzOTYxOCwzOTYyNywzOTYyOCwzOTYzMywzOTc0OSwzOTc0NywzOTc1MSwzOTc1MywzOTc1MiwzOTc1NywzOTc2MSwzOTE0NCwzOTE4MSwzOTIxNCwzOTI1MywzOTI1MiwzOTY0NywzOTY0OSwzOTY1NCwzOTY2MywzOTY1OSwzOTY3NSwzOTY2MSwzOTY3MywzOTY4OCwzOTY5NSwzOTY5OSwzOTcxMSwzOTcxNSw0MDYzNyw0MDYzOCwzMjMxNSw0MDU3OCw0MDU4Myw0MDU4NCw0MDU4Nyw0MDU5NCwzNzg0Niw0MDYwNSw0MDYwNyw0MDY2Nyw0MDY2OCw0MDY2OSw0MDY3Miw0MDY3MSw0MDY3NCw0MDY4MSw0MDY3OSw0MDY3Nyw0MDY4Miw0MDY4Nyw0MDczOCw0MDc0OCw0MDc1MSw0MDc2MSw0MDc1OSw0MDc2NSw0MDc2Niw0MDc3Miw0MDE2Myw0MDE2NCw0MDE2NSw0MDE2Niw0MDE2Nyw0MDE2OCw0MDE2OSw0MDE3MCw0MDE3MSw0MDE3Miw0MDE3Myw0MDE3NCw0MDE3NSw0MDE3Niw0MDE3Nyw0MDE3OCw0MDE3OSw0MDE4MCw0MDE4MSw0MDE4Miw0MDE4Myw0MDE4NCw0MDE4NSw0MDE4Niw0MDE4Nyw0MDE4OCw0MDE4OSw0MDE5MCw0MDE5MSw0MDE5Miw0MDE5Myw0MDE5NCw0MDE5NSw0MDE5Niw0MDE5Nyw0MDE5OCw0MDE5OSw0MDIwMCw0MDIwMSw0MDIwMiw0MDIwMyw0MDIwNCw0MDIwNSw0MDIwNiw0MDIwNyw0MDIwOCw0MDIwOSw0MDIxMCw0MDIxMSw0MDIxMiw0MDIxMyw0MDIxNCw0MDIxNSw0MDIxNiw0MDIxNyw0MDIxOCw0MDIxOSw0MDIyMCw0MDIyMSw0MDIyMiw0MDIyMyw0MDIyNCw0MDIyNSw0MDIyNiw0MDIyNyw0MDIyOCw0MDIyOSw0MDIzMCw0MDIzMSw0MDIzMiw0MDIzMyw0MDIzNCw0MDIzNSw0MDIzNiw0MDIzNyw0MDIzOCw0MDIzOSw0MDI0MCw0MDI0MSw0MDI0Miw0MDI0Myw0MDI0NCw0MDI0NSw0MDI0Niw0MDI0Nyw0MDI0OCw0MDI0OSw0MDI1MCw0MDI1MSw0MDI1Miw0MDI1Myw0MDI1NCw0MDI1NSw0MDI1Niw0MDI1Nyw0MDI1OCw1NzkwOCw1NzkwOSw1NzkxMCw1NzkxMSw1NzkxMiw1NzkxMyw1NzkxNCw1NzkxNSw1NzkxNiw1NzkxNyw1NzkxOCw1NzkxOSw1NzkyMCw1NzkyMSw1NzkyMiw1NzkyMyw1NzkyNCw1NzkyNSw1NzkyNiw1NzkyNyw1NzkyOCw1NzkyOSw1NzkzMCw1NzkzMSw1NzkzMiw1NzkzMyw1NzkzNCw1NzkzNSw1NzkzNiw1NzkzNyw1NzkzOCw1NzkzOSw1Nzk0MCw1Nzk0MSw1Nzk0Miw1Nzk0Myw1Nzk0NCw1Nzk0NSw1Nzk0Niw1Nzk0Nyw1Nzk0OCw1Nzk0OSw1Nzk1MCw1Nzk1MSw1Nzk1Miw1Nzk1Myw1Nzk1NCw1Nzk1NSw1Nzk1Niw1Nzk1Nyw1Nzk1OCw1Nzk1OSw1Nzk2MCw1Nzk2MSw1Nzk2Miw1Nzk2Myw1Nzk2NCw1Nzk2NSw1Nzk2Niw1Nzk2Nyw1Nzk2OCw1Nzk2OSw1Nzk3MCw1Nzk3MSw1Nzk3Miw1Nzk3Myw1Nzk3NCw1Nzk3NSw1Nzk3Niw1Nzk3Nyw1Nzk3OCw1Nzk3OSw1Nzk4MCw1Nzk4MSw1Nzk4Miw1Nzk4Myw1Nzk4NCw1Nzk4NSw1Nzk4Niw1Nzk4Nyw1Nzk4OCw1Nzk4OSw1Nzk5MCw1Nzk5MSw1Nzk5Miw1Nzk5Myw1Nzk5NCw1Nzk5NSw1Nzk5Niw1Nzk5Nyw1Nzk5OCw1Nzk5OSw1ODAwMCw1ODAwMSw0MDI1OSw0MDI2MCw0MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4MCw0MDI4MSw0MDI4Miw0MDI4Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0MDMwOCw0MDMwOSw0MDMxMCw0MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMyOSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMzNSw0MDMzNiw0MDMzNyw0MDMzOCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1ODAxMCw1ODAxMSw1ODAxMiw1ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAzMSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAzNyw1ODAzOCw1ODAzOSw1ODA0MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1ODA2NSw1ODA2Niw1ODA2Nyw1ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5Miw1ODA5Myw1ODA5NCw1ODA5NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0MDM3OSw0MDM4MCw0MDM4MSw0MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQwMCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQwOCw0MDQwOSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQxNCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQyMyw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0MDQzNCw0MDQzNSw0MDQzNiw0MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEwMCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEwNiw1ODEwNyw1ODEwOCw1ODEwOSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODExNCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEyMyw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1ODEzNCw1ODEzNSw1ODEzNiw1ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2MSw1ODE2Miw1ODE2Myw1ODE2NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1ODE4OSw0MDQ1MSw0MDQ1Miw0MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3Nyw0MDQ3OCw0MDQ4NCw0MDQ4Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUwOCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0MDU2Niw0MDU2Nyw0MDU2OCw0MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYwMSw0MDYwMiw0MDYwMyw0MDYwNCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYxMSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1ODIwMyw1ODIwNCw1ODIwNSw1ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIyNCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIzMCw1ODIzMSw1ODIzMiw1ODIzMyw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIzOCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1ODI1OCw1ODI1OSw1ODI2MCw1ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYyMCw0MDYyMSw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYyOSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0MDY1OSw0MDY2MSw0MDY2Miw0MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcwMyw0MDcwNCw0MDcwNSw0MDcwNiw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcxMSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0MDc0MCw0MDc0MSw0MDc0Miw0MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5OSw1ODMwMCw1ODMwMSw1ODMwMiw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMwNyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMxNiw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1ODMyNyw1ODMyOCw1ODMyOSw1ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1NCw1ODM1NSw1ODM1Niw1ODM1Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0MDc1OCw0MDc2MCw0MDc2Miw0MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5Myw0MDc5NCw0MDc5NSw0MDc5Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgxMCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0MDgyMSw0MDgyMiw0MDgyMyw0MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1ODM5Niw1ODM5Nyw1ODM5OCw1ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQxNyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQyMyw1ODQyNCw1ODQyNSw1ODQyNiw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQzMSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1ODQ1MSw1ODQ1Miw1ODQ1Myw1ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAxMiw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAyMCw2NDAyNCw2NDAzMSw2NDAzMiw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkxMiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwxMzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwxNDc5OSwxNDgxNSwxNDk2MywxNDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwxNTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywxMTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMyOSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5Niw1OTQ1OSwxODIxMSwxODIxNywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgxMCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwxOTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwxOTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5Miw1ODQ5Myw1ODQ5NCw1ODQ5NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUwMCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUwOSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1ODUyMCw1ODUyMSw1ODUyMiw1ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0Nyw1ODU0OCw1ODU0OSw1ODU1MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2NCw1ODU2NV0sXG4gIFwiZ2IxODAzMC1yYW5nZXNcIjpbWzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxbNTAsMTg0XSxbODEsMjE2XSxbODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAwLDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIsMzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxbMzA2LDQ2M10sWzMwNyw0NjVdLFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFdLFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0sWzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5NjJdLFs3NTAsOTcwXSxbODA1LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxbNzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1XSxbODE0OCw4NDUyXSxbODE0OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcxXSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4NzMxXSxbODM5MCw4NzM3XSxbODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxbODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQzNyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4Miw4ODU0XSxbODQ4NSw4ODU4XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYwMyw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxbOTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxbOTEwOCw5NjcyXSxbOTExMSw5Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxbOTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjksMTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0sWzExMzYxLDExOTQ0XSxbMTEzNjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcwLDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzExNjg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMzMF0sWzExNzE0LDEyMzUxXSxbMTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzExNzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxbMTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0sWzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwxMzIxOF0sWzEyMzg0LDEzMjUzXSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10sWzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkxOSwxNDgwMV0sWzEzOTMzLDE0ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwxNzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsxNjcyOSwxNzYyM10sWzE3MTAyLDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwxODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkxMSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNdLFsxNzkzNiwxODg0NF0sWzE3OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFszMzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0MTNdLFszMzQ4NSw1OTQxN10sWzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFszMzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0sWzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNdLFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgsNjM4OTRdLFszODAyOSw2Mzk3Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZdLFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAzNF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQwNDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkxMTMsNjUxMDddLFszOTExNCw2NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUxMzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5MDAwLDY1NTM2XV0sXG4gIFwiamlzMDIwOFwiOlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwxMjQ0MywxMjQ0NCwxODAsNjUzNDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIyMCw4MjIxLDY1Mjg4LDY1Mjg5LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1MzcxLDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgwNiw4ODA3LDg3MzQsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDgyNTEsMTIzMDYsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzQzLDg3NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxudWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxudWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEzMDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEzMDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUyLDEzMjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcsMTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1MCw4NzIxLDg3MzAsODg2OSw4NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMTI0LDIxNzgyLDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkzLDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIyMzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5MTU2LDMyMDk4LDMyMTkwLDM5ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIwMzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0LDI2MTMxLDI2ODg1LDI4ODU4LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMzLDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMzNDE5LDM5OTgzLDIwODAxLDIxMzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIxNTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAxLDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1LDMwODY3LDMzMjc2LDI4MTk4LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQyLDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIzMzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3ODkxLDI3OTQ1LDI5Nzg3LDMwNDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkwLDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEzLDI1NTg4LDI3ODM5LDI4NDM2LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAzLDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIyODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3NDMxLDI3NTcyLDI5NTc5LDMyNzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIzNzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIwMDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAxLDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5LDIwMjg1LDIwMzg1LDIwMzM5LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMzLDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMxNjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMzNzQ3LDM0NjYyLDM1NTA2LDIyMDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcxLDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1LDI0NTU1LDI0NjE4LDI0NzI0LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEzLDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIwOTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0OTM2LDI3MDEwLDI4MDc5LDMwODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIyMTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5LDM1MjI2LDM1MjgyLDM2MjAzLDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYxLDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYzLDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIxOTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMzODgzLDM1MDg4LDM2Njc2LDE5OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxMDAwLDMzNDc3LDI5OTI2LDIwMDk0LDIwMzU1LDIwODk2LDIzNTA2LDIxMDAyLDIxMjA4LDIxMjIzLDI0MDU5LDIxOTE0LDIyNTcwLDIzMDE0LDIzNDM2LDIzNDQ4LDIzNTE1LDI0MTc4LDI0MTg1LDI0NzM5LDI0ODYzLDI0OTMxLDI1MDIyLDI1NTYzLDI1OTU0LDI2NTc3LDI2NzA3LDI2ODc0LDI3NDU0LDI3NDc1LDI3NzM1LDI4NDUwLDI4NTY3LDI4NDg1LDI5ODcyLDI5OTc2LDMwNDM1LDMwNDc1LDMxNDg3LDMxNjQ5LDMxNzc3LDMyMjMzLDMyNTY2LDMyNzUyLDMyOTI1LDMzMzgyLDMzNjk0LDM1MjUxLDM1NTMyLDM2MDExLDM2OTk2LDM3OTY5LDM4MjkxLDM4Mjg5LDM4MzA2LDM4NTAxLDM4ODY3LDM5MjA4LDMzMzA0LDIwMDI0LDIxNTQ3LDIzNzM2LDI0MDEyLDI5NjA5LDMwMjg0LDMwNTI0LDIzNzIxLDMyNzQ3LDM2MTA3LDM4NTkzLDM4OTI5LDM4OTk2LDM5MDAwLDIwMjI1LDIwMjM4LDIxMzYxLDIxOTE2LDIyMTIwLDIyNTIyLDIyODU1LDIzMzA1LDIzNDkyLDIzNjk2LDI0MDc2LDI0MTkwLDI0NTI0LDI1NTgyLDI2NDI2LDI2MDcxLDI2MDgyLDI2Mzk5LDI2ODI3LDI2ODIwLDI3MjMxLDI0MTEyLDI3NTg5LDI3NjcxLDI3NzczLDMwMDc5LDMxMDQ4LDIzMzk1LDMxMjMyLDMyMDAwLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIwLDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIzNDUyLDI1MTM1LDI1MjE2LDI1ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMyNjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIxOTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0LDM2ODcwLDE5OTkyLDIwMDM3LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcwLDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMxOTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1MzEyLDI1MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIwNjg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgyLDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5LDIzNzc3LDI0Mzc1LDI0Mzk0LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIzNjE2LDI2MzU0LDI2OTk3LDI5NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIyMzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMxNTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQzLDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0LDIwMDYxLDIwNTM0LDIxNDc3LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEwLDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIwMDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMxMzkxLDI3Nzk1LDM4NzcyLDM2NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQxLDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3LDI5Njc0LDIyNDExLDIyODY1LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkzLDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMyNjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1Njg2LDM2NjA1LDM4OTM4LDQwMzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMxMzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4LDIxMDkxLDIxOTI3LDIyMjg3LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgwLDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMxLDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4OTk3LDM5NDQzLDQwNTY4LDIwODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIwMDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0LDI1OTI1LDI2NTQzLDI4MjQ2LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkzLDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIxNTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3Mjc4LDI5Nzg2LDMwODQ5LDM1NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIxMTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIxLDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgwLDIzMzg5LDIzNDM5LDI0MDM3LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4MzE3LDMwMDAyLDMwMzQzLDMwODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMyMDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMzNjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAyLDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4LDM4MzA4LDM4NDc3LDM4OTE3LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYzLDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODExLDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5OTY5LDI0NTczLDI0Nzk0LDM5NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIwMTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2LDIzOTE5LDI0MDM4LDI0MDQ2LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4Nzk3LDM3MzE5LDI5MzEyLDMwNzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMzNzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIwOTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQyLDIwMzE2LDIxMDY2LDIxNjQzLDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1NDIwLDM3NjM4LDM5ODUxLDMwMzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIzNjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMyMzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQwLDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgwLDIwMjgyLDIwMzUxLDIxMDUwLDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYzLDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5NTA5LDMxMDQ5LDMxMTY5LDMxOTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMzMjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1LDI2MTc4LDI3NDI1LDI4MzYzLDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEzLDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIzNDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIzMjQxLDIzNDYwLDI0NzEzLDI4Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIwODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEyLDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0LDM2OTc0LDM0NTAzLDM3MDM0LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3MjAyLDM5MzE4LDIwNzU0LDIxNDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMyMTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2LDM0ODg2LDM1MTg2LDM1NzI4LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgwLDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMxMDY5LDMyMzAyLDMxODk5LDIyNjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIwNDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEwLDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1LDM4OTE4LDIwOTY2LDIxMDIxLDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIxNDg0LDIxNzM2LDIxODMwLDIxODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIzNDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYzLDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2LDI3MTY3LDI3MTg5LDI3ODM2LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMzOTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1NDEyLDM1NDQzLDM1OTM3LDM2MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIyNTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0NzczLDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3LDMxMzMxLDMzOTc2LDM1Njk4LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIwNDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0NTE1LDI0OTEwLDI1MzkxLDI2MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYzLDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1LDIyNjQ1LDIyNzY0LDIzNTYzLDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2OTMwLDM3MjA0LDM3NjQ4LDM3NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIzOTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIyLDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMyLDIxMDQ2LDIxMjE4LDIyOTk1LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcyLDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4NzM4LDM4NzQ1LDI1OTkzLDMxMjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1MzczLDMxMzYzLDMxNjgwLDM1NTAwLDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2MDU5LDMxMzU5LDMxNjYxLDMyMjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMzMzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcyLDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUwLDIyMDkyLDIyNjA5LDIzNzIwLDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAxLDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzExLDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIwNzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIyNzY2LDIyODYzLDI5MjQ1LDIzNDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1LDMzNjA5LDMzNjI0LDMzOTAwLDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAxLDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIxMDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2Mjc1LDM2ODk1LDIwNDM5LDIzNjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIwMTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYxLDMzMzMzLDI2OTY1LDM4NDY0LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUwLDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5ODk5LDIwMTk1LDIxNDg4LDIyODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgxLDIwMjk0LDM2OTQ4LDM2Nzg0LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIyLDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMxNjU4LDMyMTg3LDMyODI5LDMyOTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIyNzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMwNjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0LDM2OTMzLDM5MzQ3LDMxNjg5LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgwLDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3MTU5LDI4NzEwLDI5NDgyLDMzNTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIwOTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgxLDMzMTQ0LDM0Njc4LDM1NTE5LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYzLDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIyNjE4LDI2NjI2LDI1NTI0LDI3MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQxLDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2LDIyNTY0LDIzNDUwLDI0MDkzLDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1Njg4LDI1ODI2LDI1OTczLDI4NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIyODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUzLDI3NTgzLDI4NTkzLDMwMDAwLDM4NjUxLDIwODE0LDIxNTIwLDIyNTgxLDIyNjE1LDIyOTU2LDIzNjQ4LDI0NDY2LDI2MDA3LDI2NDYwLDI4MTkzLDMwMzMxLDMzNzU5LDM2MDc3LDM2ODg0LDM3MTE3LDM3NzA5LDMwNzU3LDMwNzc4LDIxMTYyLDI0MjMwLDIyMzAzLDIyOTAwLDI0NTk0LDIwNDk4LDIwODI2LDIwOTA4LDIwOTQxLDIwOTkyLDIxNzc2LDIyNjEyLDIyNjE2LDIyODcxLDIzNDQ1LDIzNzk4LDIzOTQ3LDI0NzY0LDI1MjM3LDI1NjQ1LDI2NDgxLDI2NjkxLDI2ODEyLDI2ODQ3LDMwNDIzLDI4MTIwLDI4MjcxLDI4MDU5LDI4NzgzLDI5MTI4LDI0NDAzLDMwMTY4LDMxMDk1LDMxNTYxLDMxNTcyLDMxNTcwLDMxOTU4LDMyMTEzLDIxMDQwLDMzODkxLDM0MTUzLDM0Mjc2LDM1MzQyLDM1NTg4LDM1OTEwLDM2MzY3LDM2ODY3LDM2ODc5LDM3OTEzLDM4NTE4LDM4OTU3LDM5NDcyLDM4MzYwLDIwNjg1LDIxMjA1LDIxNTE2LDIyNTMwLDIzNTY2LDI0OTk5LDI1NzU4LDI3OTM0LDMwNjQzLDMxNDYxLDMzMDEyLDMzNzk2LDM2OTQ3LDM3NTA5LDIzNzc2LDQwMTk5LDIxMzExLDI0NDcxLDI0NDk5LDI4MDYwLDI5MzA1LDMwNTYzLDMxMTY3LDMxNzE2LDI3NjAyLDI5NDIwLDM1NTAxLDI2NjI3LDI3MjMzLDIwOTg0LDMxMzYxLDI2OTMyLDIzNjI2LDQwMTgyLDMzNTE1LDIzNDkzLDM3MTkzLDI4NzAyLDIyMTM2LDIzNjYzLDI0Nzc1LDI1OTU4LDI3Nzg4LDM1OTMwLDM2OTI5LDM4OTMxLDIxNTg1LDI2MzExLDM3Mzg5LDIyODU2LDM3MDI3LDIwODY5LDIwMDQ1LDIwOTcwLDM0MjAxLDM1NTk4LDI4NzYwLDI1NDY2LDM3NzA3LDI2OTc4LDM5MzQ4LDMyMjYwLDMwMDcxLDIxMzM1LDI2OTc2LDM2NTc1LDM4NjI3LDI3NzQxLDIwMTA4LDIzNjEyLDI0MzM2LDM2ODQxLDIxMjUwLDM2MDQ5LDMyOTA1LDM0NDI1LDI0MzE5LDI2MDg1LDIwMDgzLDIwODM3LDIyOTE0LDIzNjE1LDM4ODk0LDIwMjE5LDIyOTIyLDI0NTI1LDM1NDY5LDI4NjQxLDMxMTUyLDMxMDc0LDIzNTI3LDMzOTA1LDI5NDgzLDI5MTA1LDI0MTgwLDI0NTY1LDI1NDY3LDI1NzU0LDI5MTIzLDMxODk2LDIwMDM1LDI0MzE2LDIwMDQzLDIyNDkyLDIyMTc4LDI0NzQ1LDI4NjExLDMyMDEzLDMzMDIxLDMzMDc1LDMzMjE1LDM2Nzg2LDM1MjIzLDM0NDY4LDI0MDUyLDI1MjI2LDI1NzczLDM1MjA3LDI2NDg3LDI3ODc0LDI3OTY2LDI5NzUwLDMwNzcyLDIzMTEwLDMyNjI5LDMzNDUzLDM5MzQwLDIwNDY3LDI0MjU5LDI1MzA5LDI1NDkwLDI1OTQzLDI2NDc5LDMwNDAzLDI5MjYwLDMyOTcyLDMyOTU0LDM2NjQ5LDM3MTk3LDIwNDkzLDIyNTIxLDIzMTg2LDI2NzU3LDI2OTk1LDI5MDI4LDI5NDM3LDM2MDIzLDIyNzcwLDM2MDY0LDM4NTA2LDM2ODg5LDM0Njg3LDMxMjA0LDMwNjk1LDMzODMzLDIwMjcxLDIxMDkzLDIxMzM4LDI1MjkzLDI2NTc1LDI3ODUwLDMwMzMzLDMxNjM2LDMxODkzLDMzMzM0LDM0MTgwLDM2ODQzLDI2MzMzLDI4NDQ4LDI5MTkwLDMyMjgzLDMzNzA3LDM5MzYxLDQwNjE0LDIwOTg5LDMxNjY1LDMwODM0LDMxNjcyLDMyOTAzLDMxNTYwLDI3MzY4LDI0MTYxLDMyOTA4LDMwMDMzLDMwMDQ4LDIwODQzLDM3NDc0LDI4MzAwLDMwMzMwLDM3MjcxLDM5NjU4LDIwMjQwLDMyNjI0LDI1MjQ0LDMxNTY3LDM4MzA5LDQwMTY5LDIyMTM4LDIyNjE3LDM0NTMyLDM4NTg4LDIwMjc2LDIxMDI4LDIxMzIyLDIxNDUzLDIxNDY3LDI0MDcwLDI1NjQ0LDI2MDAxLDI2NDk1LDI3NzEwLDI3NzI2LDI5MjU2LDI5MzU5LDI5Njc3LDMwMDM2LDMyMzIxLDMzMzI0LDM0MjgxLDM2MDA5LDMxNjg0LDM3MzE4LDI5MDMzLDM4OTMwLDM5MTUxLDI1NDA1LDI2MjE3LDMwMDU4LDMwNDM2LDMwOTI4LDM0MTE1LDM0NTQyLDIxMjkwLDIxMzI5LDIxNTQyLDIyOTE1LDI0MTk5LDI0NDQ0LDI0NzU0LDI1MTYxLDI1MjA5LDI1MjU5LDI2MDAwLDI3NjA0LDI3ODUyLDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMyMjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2OTkxLDM4NzUwLDM5MTMxLDI3MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMwMDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0LDI2NzI3LDIzMDE5LDIzMTk1LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0NDI4LDI1OTk2LDI3OTk2LDI4NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIzLDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4LDMzNDMzLDM1Njc2LDM2MDAwLDM2MDcwLDM2MjEyLDM4NDI4LDM4NDY4LDIwMzk4LDI1NzcxLDI3NDk0LDMzMzEwLDMzODg5LDM0MTU0LDM3MDk2LDIzNTUzLDI2OTYzLDM5MDgwLDMzOTE0LDM0MTM1LDIwMjM5LDIxMTAzLDI0NDg5LDI0MTMzLDI2MzgxLDMxMTE5LDMzMTQ1LDM1MDc5LDM1MjA2LDI4MTQ5LDI0MzQzLDI1MTczLDI3ODMyLDIwMTc1LDI5Mjg5LDM5ODI2LDIwOTk4LDIxNTYzLDIyMTMyLDIyNzA3LDI0OTk2LDI1MTk4LDI4OTU0LDIyODk0LDMxODgxLDMxOTY2LDMyMDI3LDM4NjQwLDI1OTkxLDMyODYyLDE5OTkzLDIwMzQxLDIwODUzLDIyNTkyLDI0MTYzLDI0MTc5LDI0MzMwLDI2NTY0LDIwMDA2LDM0MTA5LDM4MjgxLDM4NDkxLDMxODU5LDM4OTEzLDIwNzMxLDIyNzIxLDMwMjk0LDMwODg3LDIxMDI5LDMwNjI5LDM0MDY1LDMxNjIyLDIwNTU5LDIyNzkzLDI5MjU1LDMxNjg3LDMyMjMyLDM2Nzk0LDM2ODIwLDM2OTQxLDIwNDE1LDIxMTkzLDIzMDgxLDI0MzIxLDM4ODI5LDIwNDQ1LDMzMzAzLDM3NjEwLDIyMjc1LDI1NDI5LDI3NDk3LDI5OTk1LDM1MDM2LDM2NjI4LDMxMjk4LDIxMjE1LDIyNjc1LDI0OTE3LDI1MDk4LDI2Mjg2LDI3NTk3LDMxODA3LDMzNzY5LDIwNTE1LDIwNDcyLDIxMjUzLDIxNTc0LDIyNTc3LDIyODU3LDIzNDUzLDIzNzkyLDIzNzkxLDIzODQ5LDI0MjE0LDI1MjY1LDI1NDQ3LDI1OTE4LDI2MDQxLDI2Mzc5LDI3ODYxLDI3ODczLDI4OTIxLDMwNzcwLDMyMjk5LDMyOTkwLDMzNDU5LDMzODA0LDM0MDI4LDM0NTYyLDM1MDkwLDM1MzcwLDM1OTE0LDM3MDMwLDM3NTg2LDM5MTY1LDQwMTc5LDQwMzAwLDIwMDQ3LDIwMTI5LDIwNjIxLDIxMDc4LDIyMzQ2LDIyOTUyLDI0MTI1LDI0NTM2LDI0NTM3LDI1MTUxLDI2MjkyLDI2Mzk1LDI2NTc2LDI2ODM0LDIwODgyLDMyMDMzLDMyOTM4LDMzMTkyLDM1NTg0LDM1OTgwLDM2MDMxLDM3NTAyLDM4NDUwLDIxNTM2LDM4OTU2LDIxMjcxLDIwNjkzLDIxMzQwLDIyNjk2LDI1Nzc4LDI2NDIwLDI5Mjg3LDMwNTY2LDMxMzAyLDM3MzUwLDIxMTg3LDI3ODA5LDI3NTI2LDIyNTI4LDI0MTQwLDIyODY4LDI2NDEyLDMyNzYzLDIwOTYxLDMwNDA2LDI1NzA1LDMwOTUyLDM5NzY0LDQwNjM1LDIyNDc1LDIyOTY5LDI2MTUxLDI2NTIyLDI3NTk4LDIxNzM3LDI3MDk3LDI0MTQ5LDMzMTgwLDI2NTE3LDM5ODUwLDI2NjIyLDQwMDE4LDI2NzE3LDIwMTM0LDIwNDUxLDIxNDQ4LDI1MjczLDI2NDExLDI3ODE5LDM2ODA0LDIwMzk3LDMyMzY1LDQwNjM5LDE5OTc1LDI0OTMwLDI4Mjg4LDI4NDU5LDM0MDY3LDIxNjE5LDI2NDEwLDM5NzQ5LDI0MDUxLDMxNjM3LDIzNzI0LDIzNDk0LDM0NTg4LDI4MjM0LDM0MDAxLDMxMjUyLDMzMDMyLDIyOTM3LDMxODg1LDI3NjY1LDMwNDk2LDIxMjA5LDIyODE4LDI4OTYxLDI5Mjc5LDMwNjgzLDM4Njk1LDQwMjg5LDI2ODkxLDIzMTY3LDIzMDY0LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDMwNDMxLDM2ODU1LDM3NTI4LDQwMTgwLDIzMDE4LDI5Mjc3LDI4MzU3LDIwODEzLDI2ODI1LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjM0LDI1NzIwLDI3MTY5LDMzNTM4LDIyOTE2LDIzMzkxLDI3NjExLDI5NDY3LDMwNDUwLDMyMTc4LDMyNzkxLDMzOTQ1LDIwNzg2LDI2NDA4LDQwNjY1LDMwNDQ2LDI2NDY2LDIxMjQ3LDM5MTczLDIzNTg4LDI1MTQ3LDMxODcwLDM2MDE2LDIxODM5LDI0NzU4LDMyMDExLDM4MjcyLDIxMjQ5LDIwMDYzLDIwOTE4LDIyODEyLDI5MjQyLDMyODIyLDM3MzI2LDI0MzU3LDMwNjkwLDIxMzgwLDI0NDQxLDMyMDA0LDM0MjIwLDM1Mzc5LDM2NDkzLDM4NzQyLDI2NjExLDM0MjIyLDM3OTcxLDI0ODQxLDI0ODQwLDI3ODMzLDMwMjkwLDM1NTY1LDM2NjY0LDIxODA3LDIwMzA1LDIwNzc4LDIxMTkxLDIxNDUxLDIzNDYxLDI0MTg5LDI0NzM2LDI0OTYyLDI1NTU4LDI2Mzc3LDI2NTg2LDI4MjYzLDI4MDQ0LDI5NDk0LDI5NDk1LDMwMDAxLDMxMDU2LDM1MDI5LDM1NDgwLDM2OTM4LDM3MDA5LDM3MTA5LDM4NTk2LDM0NzAxLDIyODA1LDIwMTA0LDIwMzEzLDE5OTgyLDM1NDY1LDM2NjcxLDM4OTI4LDIwNjUzLDI0MTg4LDIyOTM0LDIzNDgxLDI0MjQ4LDI1NTYyLDI1NTk0LDI1NzkzLDI2MzMyLDI2OTU0LDI3MDk2LDI3OTE1LDI4MzQyLDI5MDc2LDI5OTkyLDMxNDA3LDMyNjUwLDMyNzY4LDMzODY1LDMzOTkzLDM1MjAxLDM1NjE3LDM2MzYyLDM2OTY1LDM4NTI1LDM5MTc4LDI0OTU4LDI1MjMzLDI3NDQyLDI3Nzc5LDI4MDIwLDMyNzE2LDMyNzY0LDI4MDk2LDMyNjQ1LDM0NzQ2LDM1MDY0LDI2NDY5LDMzNzEzLDM4OTcyLDM4NjQ3LDI3OTMxLDMyMDk3LDMzODUzLDM3MjI2LDIwMDgxLDIxMzY1LDIzODg4LDI3Mzk2LDI4NjUxLDM0MjUzLDM0MzQ5LDM1MjM5LDIxMDMzLDIxNTE5LDIzNjUzLDI2NDQ2LDI2NzkyLDI5NzAyLDI5ODI3LDMwMTc4LDM1MDIzLDM1MDQxLDM3MzI0LDM4NjI2LDM4NTIwLDI0NDU5LDI5NTc1LDMxNDM1LDMzODcwLDI1NTA0LDMwMDUzLDIxMTI5LDI3OTY5LDI4MzE2LDI5NzA1LDMwMDQxLDMwODI3LDMxODkwLDM4NTM0LDMxNDUyLDQwODQ1LDIwNDA2LDI0OTQyLDI2MDUzLDM0Mzk2LDIwMTAyLDIwMTQyLDIwNjk4LDIwMDAxLDIwOTQwLDIzNTM0LDI2MDA5LDI2NzUzLDI4MDkyLDI5NDcxLDMwMjc0LDMwNjM3LDMxMjYwLDMxOTc1LDMzMzkxLDM1NTM4LDM2OTg4LDM3MzI3LDM4NTE3LDM4OTM2LDIxMTQ3LDMyMjA5LDIwNTIzLDIxNDAwLDI2NTE5LDI4MTA3LDI5MTM2LDI5NzQ3LDMzMjU2LDM2NjUwLDM4NTYzLDQwMDIzLDQwNjA3LDI5NzkyLDIyNTkzLDI4MDU3LDMyMDQ3LDM5MDA2LDIwMTk2LDIwMjc4LDIwMzYzLDIwOTE5LDIxMTY5LDIzOTk0LDI0NjA0LDI5NjE4LDMxMDM2LDMzNDkxLDM3NDI4LDM4NTgzLDM4NjQ2LDM4NjY2LDQwNTk5LDQwODAyLDI2Mjc4LDI3NTA4LDIxMDE1LDIxMTU1LDI4ODcyLDM1MDEwLDI0MjY1LDI0NjUxLDI0OTc2LDI4NDUxLDI5MDAxLDMxODA2LDMyMjQ0LDMyODc5LDM0MDMwLDM2ODk5LDM3Njc2LDIxNTcwLDM5NzkxLDI3MzQ3LDI4ODA5LDM2MDM0LDM2MzM1LDM4NzA2LDIxMTcyLDIzMTA1LDI0MjY2LDI0MzI0LDI2MzkxLDI3MDA0LDI3MDI4LDI4MDEwLDI4NDMxLDI5MjgyLDI5NDM2LDMxNzI1LDMyNzY5LDMyODk0LDM0NjM1LDM3MDcwLDIwODQ1LDQwNTk1LDMxMTA4LDMyOTA3LDM3NjgyLDM1NTQyLDIwNTI1LDIxNjQ0LDM1NDQxLDI3NDk4LDM2MDM2LDMzMDMxLDI0Nzg1LDI2NTI4LDQwNDM0LDIwMTIxLDIwMTIwLDM5OTUyLDM1NDM1LDM0MjQxLDM0MTUyLDI2ODgwLDI4Mjg2LDMwODcxLDMzMTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQzMzIsMTk5ODQsMTk5ODksMjAwMTAsMjAwMTcsMjAwMjIsMjAwMjgsMjAwMzEsMjAwMzQsMjAwNTQsMjAwNTYsMjAwOTgsMjAxMDEsMzU5NDcsMjAxMDYsMzMyOTgsMjQzMzMsMjAxMTAsMjAxMjYsMjAxMjcsMjAxMjgsMjAxMzAsMjAxNDQsMjAxNDcsMjAxNTAsMjAxNzQsMjAxNzMsMjAxNjQsMjAxNjYsMjAxNjIsMjAxODMsMjAxOTAsMjAyMDUsMjAxOTEsMjAyMTUsMjAyMzMsMjAzMTQsMjAyNzIsMjAzMTUsMjAzMTcsMjAzMTEsMjAyOTUsMjAzNDIsMjAzNjAsMjAzNjcsMjAzNzYsMjAzNDcsMjAzMjksMjAzMzYsMjAzNjksMjAzMzUsMjAzNTgsMjAzNzQsMjA3NjAsMjA0MzYsMjA0NDcsMjA0MzAsMjA0NDAsMjA0NDMsMjA0MzMsMjA0NDIsMjA0MzIsMjA0NTIsMjA0NTMsMjA1MDYsMjA1MjAsMjA1MDAsMjA1MjIsMjA1MTcsMjA0ODUsMjAyNTIsMjA0NzAsMjA1MTMsMjA1MjEsMjA1MjQsMjA0NzgsMjA0NjMsMjA0OTcsMjA0ODYsMjA1NDcsMjA1NTEsMjYzNzEsMjA1NjUsMjA1NjAsMjA1NTIsMjA1NzAsMjA1NjYsMjA1ODgsMjA2MDAsMjA2MDgsMjA2MzQsMjA2MTMsMjA2NjAsMjA2NTgsMjA2ODEsMjA2ODIsMjA2NTksMjA2NzQsMjA2OTQsMjA3MDIsMjA3MDksMjA3MTcsMjA3MDcsMjA3MTgsMjA3MjksMjA3MjUsMjA3NDUsMjA3MzcsMjA3MzgsMjA3NTgsMjA3NTcsMjA3NTYsMjA3NjIsMjA3NjksMjA3OTQsMjA3OTEsMjA3OTYsMjA3OTUsMjA3OTksMjA4MDAsMjA4MTgsMjA4MTIsMjA4MjAsMjA4MzQsMzE0ODAsMjA4NDEsMjA4NDIsMjA4NDYsMjA4NjQsMjA4NjYsMjIyMzIsMjA4NzYsMjA4NzMsMjA4NzksMjA4ODEsMjA4ODMsMjA4ODUsMjA4ODYsMjA5MDAsMjA5MDIsMjA4OTgsMjA5MDUsMjA5MDYsMjA5MDcsMjA5MTUsMjA5MTMsMjA5MTQsMjA5MTIsMjA5MTcsMjA5MjUsMjA5MzMsMjA5MzcsMjA5NTUsMjA5NjAsMzQzODksMjA5NjksMjA5NzMsMjA5NzYsMjA5ODEsMjA5OTAsMjA5OTYsMjEwMDMsMjEwMTIsMjEwMDYsMjEwMzEsMjEwMzQsMjEwMzgsMjEwNDMsMjEwNDksMjEwNzEsMjEwNjAsMjEwNjcsMjEwNjgsMjEwODYsMjEwNzYsMjEwOTgsMjExMDgsMjEwOTcsMjExMDcsMjExMTksMjExMTcsMjExMzMsMjExNDAsMjExMzgsMjExMDUsMjExMjgsMjExMzcsMzY3NzYsMzY3NzUsMjExNjQsMjExNjUsMjExODAsMjExNzMsMjExODUsMjExOTcsMjEyMDcsMjEyMTQsMjEyMTksMjEyMjIsMzkxNDksMjEyMTYsMjEyMzUsMjEyMzcsMjEyNDAsMjEyNDEsMjEyNTQsMjEyNTYsMzAwMDgsMjEyNjEsMjEyNjQsMjEyNjMsMjEyNjksMjEyNzQsMjEyODMsMjEyOTUsMjEyOTcsMjEyOTksMjEzMDQsMjEzMTIsMjEzMTgsMjEzMTcsMTk5OTEsMjEzMjEsMjEzMjUsMjA5NTAsMjEzNDIsMjEzNTMsMjEzNTgsMjI4MDgsMjEzNzEsMjEzNjcsMjEzNzgsMjEzOTgsMjE0MDgsMjE0MTQsMjE0MTMsMjE0MjIsMjE0MjQsMjE0MzAsMjE0NDMsMzE3NjIsMzg2MTcsMjE0NzEsMjYzNjQsMjkxNjYsMjE0ODYsMjE0ODAsMjE0ODUsMjE0OTgsMjE1MDUsMjE1NjUsMjE1NjgsMjE1NDgsMjE1NDksMjE1NjQsMjE1NTAsMjE1NTgsMjE1NDUsMjE1MzMsMjE1ODIsMjE2NDcsMjE2MjEsMjE2NDYsMjE1OTksMjE2MTcsMjE2MjMsMjE2MTYsMjE2NTAsMjE2MjcsMjE2MzIsMjE2MjIsMjE2MzYsMjE2NDgsMjE2MzgsMjE3MDMsMjE2NjYsMjE2ODgsMjE2NjksMjE2NzYsMjE3MDAsMjE3MDQsMjE2NzIsMjE2NzUsMjE2OTgsMjE2NjgsMjE2OTQsMjE2OTIsMjE3MjAsMjE3MzMsMjE3MzQsMjE3NzUsMjE3ODAsMjE3NTcsMjE3NDIsMjE3NDEsMjE3NTQsMjE3MzAsMjE4MTcsMjE4MjQsMjE4NTksMjE4MzYsMjE4MDYsMjE4NTIsMjE4MjksMjE4NDYsMjE4NDcsMjE4MTYsMjE4MTEsMjE4NTMsMjE5MTMsMjE4ODgsMjE2NzksMjE4OTgsMjE5MTksMjE4ODMsMjE4ODYsMjE5MTIsMjE5MTgsMjE5MzQsMjE4ODQsMjE4OTEsMjE5MjksMjE4OTUsMjE5MjgsMjE5NzgsMjE5NTcsMjE5ODMsMjE5NTYsMjE5ODAsMjE5ODgsMjE5NzIsMjIwMzYsMjIwMDcsMjIwMzgsMjIwMTQsMjIwMTMsMjIwNDMsMjIwMDksMjIwOTQsMjIwOTYsMjkxNTEsMjIwNjgsMjIwNzAsMjIwNjYsMjIwNzIsMjIxMjMsMjIxMTYsMjIwNjMsMjIxMjQsMjIxMjIsMjIxNTAsMjIxNDQsMjIxNTQsMjIxNzYsMjIxNjQsMjIxNTksMjIxODEsMjIxOTAsMjIxOTgsMjIxOTYsMjIyMTAsMjIyMDQsMjIyMDksMjIyMTEsMjIyMDgsMjIyMTYsMjIyMjIsMjIyMjUsMjIyMjcsMjIyMzEsMjIyNTQsMjIyNjUsMjIyNzIsMjIyNzEsMjIyNzYsMjIyODEsMjIyODAsMjIyODMsMjIyODUsMjIyOTEsMjIyOTYsMjIyOTQsMjE5NTksMjIzMDAsMjIzMTAsMjIzMjcsMjIzMjgsMjIzNTAsMjIzMzEsMjIzMzYsMjIzNTEsMjIzNzcsMjI0NjQsMjI0MDgsMjIzNjksMjIzOTksMjI0MDksMjI0MTksMjI0MzIsMjI0NTEsMjI0MzYsMjI0NDIsMjI0NDgsMjI0NjcsMjI0NzAsMjI0ODQsMjI0ODIsMjI0ODMsMjI1MzgsMjI0ODYsMjI0OTksMjI1MzksMjI1NTMsMjI1NTcsMjI2NDIsMjI1NjEsMjI2MjYsMjI2MDMsMjI2NDAsMjc1ODQsMjI2MTAsMjI1ODksMjI2NDksMjI2NjEsMjI3MTMsMjI2ODcsMjI2OTksMjI3MTQsMjI3NTAsMjI3MTUsMjI3MTIsMjI3MDIsMjI3MjUsMjI3MzksMjI3MzcsMjI3NDMsMjI3NDUsMjI3NDQsMjI3NTcsMjI3NDgsMjI3NTYsMjI3NTEsMjI3NjcsMjI3NzgsMjI3NzcsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODYsMjI3OTQsMjI4MDAsMjI4MTEsMjY3OTAsMjI4MjEsMjI4MjgsMjI4MjksMjI4MzQsMjI4NDAsMjI4NDYsMzE0NDIsMjI4NjksMjI4NjQsMjI4NjIsMjI4NzQsMjI4NzIsMjI4ODIsMjI4ODAsMjI4ODcsMjI4OTIsMjI4ODksMjI5MDQsMjI5MTMsMjI5NDEsMjAzMTgsMjAzOTUsMjI5NDcsMjI5NjIsMjI5ODIsMjMwMTYsMjMwMDQsMjI5MjUsMjMwMDEsMjMwMDIsMjMwNzcsMjMwNzEsMjMwNTcsMjMwNjgsMjMwNDksMjMwNjYsMjMxMDQsMjMxNDgsMjMxMTMsMjMwOTMsMjMwOTQsMjMxMzgsMjMxNDYsMjMxOTQsMjMyMjgsMjMyMzAsMjMyNDMsMjMyMzQsMjMyMjksMjMyNjcsMjMyNTUsMjMyNzAsMjMyNzMsMjMyNTQsMjMyOTAsMjMyOTEsMjMzMDgsMjMzMDcsMjMzMTgsMjMzNDYsMjMyNDgsMjMzMzgsMjMzNTAsMjMzNTgsMjMzNjMsMjMzNjUsMjMzNjAsMjMzNzcsMjMzODEsMjMzODYsMjMzODcsMjMzOTcsMjM0MDEsMjM0MDgsMjM0MTEsMjM0MTMsMjM0MTYsMjU5OTIsMjM0MTgsMjM0MjQsMjM0MjcsMjM0NjIsMjM0ODAsMjM0OTEsMjM0OTUsMjM0OTcsMjM1MDgsMjM1MDQsMjM1MjQsMjM1MjYsMjM1MjIsMjM1MTgsMjM1MjUsMjM1MzEsMjM1MzYsMjM1NDIsMjM1MzksMjM1NTcsMjM1NTksMjM1NjAsMjM1NjUsMjM1NzEsMjM1ODQsMjM1ODYsMjM1OTIsMjM2MDgsMjM2MDksMjM2MTcsMjM2MjIsMjM2MzAsMjM2MzUsMjM2MzIsMjM2MzEsMjM0MDksMjM2NjAsMjM2NjIsMjAwNjYsMjM2NzAsMjM2NzMsMjM2OTIsMjM2OTcsMjM3MDAsMjI5MzksMjM3MjMsMjM3MzksMjM3MzQsMjM3NDAsMjM3MzUsMjM3NDksMjM3NDIsMjM3NTEsMjM3NjksMjM3ODUsMjM4MDUsMjM4MDIsMjM3ODksMjM5NDgsMjM3ODYsMjM4MTksMjM4MjksMjM4MzEsMjM5MDAsMjM4MzksMjM4MzUsMjM4MjUsMjM4MjgsMjM4NDIsMjM4MzQsMjM4MzMsMjM4MzIsMjM4ODQsMjM4OTAsMjM4ODYsMjM4ODMsMjM5MTYsMjM5MjMsMjM5MjYsMjM5NDMsMjM5NDAsMjM5MzgsMjM5NzAsMjM5NjUsMjM5ODAsMjM5ODIsMjM5OTcsMjM5NTIsMjM5OTEsMjM5OTYsMjQwMDksMjQwMTMsMjQwMTksMjQwMTgsMjQwMjIsMjQwMjcsMjQwNDMsMjQwNTAsMjQwNTMsMjQwNzUsMjQwOTAsMjQwODksMjQwODEsMjQwOTEsMjQxMTgsMjQxMTksMjQxMzIsMjQxMzEsMjQxMjgsMjQxNDIsMjQxNTEsMjQxNDgsMjQxNTksMjQxNjIsMjQxNjQsMjQxMzUsMjQxODEsMjQxODIsMjQxODYsNDA2MzYsMjQxOTEsMjQyMjQsMjQyNTcsMjQyNTgsMjQyNjQsMjQyNzIsMjQyNzEsMjQyNzgsMjQyOTEsMjQyODUsMjQyODIsMjQyODMsMjQyOTAsMjQyODksMjQyOTYsMjQyOTcsMjQzMDAsMjQzMDUsMjQzMDcsMjQzMDQsMjQzMDgsMjQzMTIsMjQzMTgsMjQzMjMsMjQzMjksMjQ0MTMsMjQ0MTIsMjQzMzEsMjQzMzcsMjQzNDIsMjQzNjEsMjQzNjUsMjQzNzYsMjQzODUsMjQzOTIsMjQzOTYsMjQzOTgsMjQzNjcsMjQ0MDEsMjQ0MDYsMjQ0MDcsMjQ0MDksMjQ0MTcsMjQ0MjksMjQ0MzUsMjQ0MzksMjQ0NTEsMjQ0NTAsMjQ0NDcsMjQ0NTgsMjQ0NTYsMjQ0NjUsMjQ0NTUsMjQ0NzgsMjQ0NzMsMjQ0NzIsMjQ0ODAsMjQ0ODgsMjQ0OTMsMjQ1MDgsMjQ1MzQsMjQ1NzEsMjQ1NDgsMjQ1NjgsMjQ1NjEsMjQ1NDEsMjQ3NTUsMjQ1NzUsMjQ2MDksMjQ2NzIsMjQ2MDEsMjQ1OTIsMjQ2MTcsMjQ1OTAsMjQ2MjUsMjQ2MDMsMjQ1OTcsMjQ2MTksMjQ2MTQsMjQ1OTEsMjQ2MzQsMjQ2NjYsMjQ2NDEsMjQ2ODIsMjQ2OTUsMjQ2NzEsMjQ2NTAsMjQ2NDYsMjQ2NTMsMjQ2NzUsMjQ2NDMsMjQ2NzYsMjQ2NDIsMjQ2ODQsMjQ2ODMsMjQ2NjUsMjQ3MDUsMjQ3MTcsMjQ4MDcsMjQ3MDcsMjQ3MzAsMjQ3MDgsMjQ3MzEsMjQ3MjYsMjQ3MjcsMjQ3MjIsMjQ3NDMsMjQ3MTUsMjQ4MDEsMjQ3NjAsMjQ4MDAsMjQ3ODcsMjQ3NTYsMjQ1NjAsMjQ3NjUsMjQ3NzQsMjQ3NTcsMjQ3OTIsMjQ5MDksMjQ4NTMsMjQ4MzgsMjQ4MjIsMjQ4MjMsMjQ4MzIsMjQ4MjAsMjQ4MjYsMjQ4MzUsMjQ4NjUsMjQ4MjcsMjQ4MTcsMjQ4NDUsMjQ4NDYsMjQ5MDMsMjQ4OTQsMjQ4NzIsMjQ4NzEsMjQ5MDYsMjQ4OTUsMjQ4OTIsMjQ4NzYsMjQ4ODQsMjQ4OTMsMjQ4OTgsMjQ5MDAsMjQ5NDcsMjQ5NTEsMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MzksMjQ5NDgsMjQ5NDMsMjQ5MzMsMjQ5NDUsMjQ5MjcsMjQ5MjUsMjQ5MTUsMjQ5NDksMjQ5ODUsMjQ5ODIsMjQ5NjcsMjUwMDQsMjQ5ODAsMjQ5ODYsMjQ5NzAsMjQ5NzcsMjUwMDMsMjUwMDYsMjUwMzYsMjUwMzQsMjUwMzMsMjUwNzksMjUwMzIsMjUwMjcsMjUwMzAsMjUwMTgsMjUwMzUsMzI2MzMsMjUwMzcsMjUwNjIsMjUwNTksMjUwNzgsMjUwODIsMjUwNzYsMjUwODcsMjUwODUsMjUwODQsMjUwODYsMjUwODgsMjUwOTYsMjUwOTcsMjUxMDEsMjUxMDAsMjUxMDgsMjUxMTUsMjUxMTgsMjUxMjEsMjUxMzAsMjUxMzQsMjUxMzYsMjUxMzgsMjUxMzksMjUxNTMsMjUxNjYsMjUxODIsMjUxODcsMjUxNzksMjUxODQsMjUxOTIsMjUyMTIsMjUyMTgsMjUyMjUsMjUyMTQsMjUyMzQsMjUyMzUsMjUyMzgsMjUzMDAsMjUyMTksMjUyMzYsMjUzMDMsMjUyOTcsMjUyNzUsMjUyOTUsMjUzNDMsMjUyODYsMjU4MTIsMjUyODgsMjUzMDgsMjUyOTIsMjUyOTAsMjUyODIsMjUyODcsMjUyNDMsMjUyODksMjUzNTYsMjUzMjYsMjUzMjksMjUzODMsMjUzNDYsMjUzNTIsMjUzMjcsMjUzMzMsMjU0MjQsMjU0MDYsMjU0MjEsMjU2MjgsMjU0MjMsMjU0OTQsMjU0ODYsMjU0NzIsMjU1MTUsMjU0NjIsMjU1MDcsMjU0ODcsMjU0ODEsMjU1MDMsMjU1MjUsMjU0NTEsMjU0NDksMjU1MzQsMjU1NzcsMjU1MzYsMjU1NDIsMjU1NzEsMjU1NDUsMjU1NTQsMjU1OTAsMjU1NDAsMjU2MjIsMjU2NTIsMjU2MDYsMjU2MTksMjU2MzgsMjU2NTQsMjU4ODUsMjU2MjMsMjU2NDAsMjU2MTUsMjU3MDMsMjU3MTEsMjU3MTgsMjU2NzgsMjU4OTgsMjU3NDksMjU3NDcsMjU3NjUsMjU3NjksMjU3MzYsMjU3ODgsMjU4MTgsMjU4MTAsMjU3OTcsMjU3OTksMjU3ODcsMjU4MTYsMjU3OTQsMjU4NDEsMjU4MzEsMzMyODksMjU4MjQsMjU4MjUsMjUyNjAsMjU4MjcsMjU4MzksMjU5MDAsMjU4NDYsMjU4NDQsMjU4NDIsMjU4NTAsMjU4NTYsMjU4NTMsMjU4ODAsMjU4ODQsMjU4NjEsMjU4OTIsMjU4OTEsMjU4OTksMjU5MDgsMjU5MDksMjU5MTEsMjU5MTAsMjU5MTIsMzAwMjcsMjU5MjgsMjU5NDIsMjU5NDEsMjU5MzMsMjU5NDQsMjU5NTAsMjU5NDksMjU5NzAsMjU5NzYsMjU5ODYsMjU5ODcsMzU3MjIsMjYwMTEsMjYwMTUsMjYwMjcsMjYwMzksMjYwNTEsMjYwNTQsMjYwNDksMjYwNTIsMjYwNjAsMjYwNjYsMjYwNzUsMjYwNzMsMjYwODAsMjYwODEsMjYwOTcsMjY0ODIsMjYxMjIsMjYxMTUsMjYxMDcsMjY0ODMsMjYxNjUsMjYxNjYsMjYxNjQsMjYxNDAsMjYxOTEsMjYxODAsMjYxODUsMjYxNzcsMjYyMDYsMjYyMDUsMjYyMTIsMjYyMTUsMjYyMTYsMjYyMDcsMjYyMTAsMjYyMjQsMjYyNDMsMjYyNDgsMjYyNTQsMjYyNDksMjYyNDQsMjYyNjQsMjYyNjksMjYzMDUsMjYyOTcsMjYzMTMsMjYzMDIsMjYzMDAsMjYzMDgsMjYyOTYsMjYzMjYsMjYzMzAsMjYzMzYsMjYxNzUsMjYzNDIsMjYzNDUsMjYzNTIsMjYzNTcsMjYzNTksMjYzODMsMjYzOTAsMjYzOTgsMjY0MDYsMjY0MDcsMzg3MTIsMjY0MTQsMjY0MzEsMjY0MjIsMjY0MzMsMjY0MjQsMjY0MjMsMjY0MzgsMjY0NjIsMjY0NjQsMjY0NTcsMjY0NjcsMjY0NjgsMjY1MDUsMjY0ODAsMjY1MzcsMjY0OTIsMjY0NzQsMjY1MDgsMjY1MDcsMjY1MzQsMjY1MjksMjY1MDEsMjY1NTEsMjY2MDcsMjY1NDgsMjY2MDQsMjY1NDcsMjY2MDEsMjY1NTIsMjY1OTYsMjY1OTAsMjY1ODksMjY1OTQsMjY2MDYsMjY1NTMsMjY1NzQsMjY1NjYsMjY1OTksMjcyOTIsMjY2NTQsMjY2OTQsMjY2NjUsMjY2ODgsMjY3MDEsMjY2NzQsMjY3MDIsMjY4MDMsMjY2NjcsMjY3MTMsMjY3MjMsMjY3NDMsMjY3NTEsMjY3ODMsMjY3NjcsMjY3OTcsMjY3NzIsMjY3ODEsMjY3NzksMjY3NTUsMjczMTAsMjY4MDksMjY3NDAsMjY4MDUsMjY3ODQsMjY4MTAsMjY4OTUsMjY3NjUsMjY3NTAsMjY4ODEsMjY4MjYsMjY4ODgsMjY4NDAsMjY5MTQsMjY5MTgsMjY4NDksMjY4OTIsMjY4MjksMjY4MzYsMjY4NTUsMjY4MzcsMjY5MzQsMjY4OTgsMjY4ODQsMjY4MzksMjY4NTEsMjY5MTcsMjY4NzMsMjY4NDgsMjY4NjMsMjY5MjAsMjY5MjIsMjY5MDYsMjY5MTUsMjY5MTMsMjY4MjIsMjcwMDEsMjY5OTksMjY5NzIsMjcwMDAsMjY5ODcsMjY5NjQsMjcwMDYsMjY5OTAsMjY5MzcsMjY5OTYsMjY5NDEsMjY5NjksMjY5MjgsMjY5NzcsMjY5NzQsMjY5NzMsMjcwMDksMjY5ODYsMjcwNTgsMjcwNTQsMjcwODgsMjcwNzEsMjcwNzMsMjcwOTEsMjcwNzAsMjcwODYsMjM1MjgsMjcwODIsMjcxMDEsMjcwNjcsMjcwNzUsMjcwNDcsMjcxODIsMjcwMjUsMjcwNDAsMjcwMzYsMjcwMjksMjcwNjAsMjcxMDIsMjcxMTIsMjcxMzgsMjcxNjMsMjcxMzUsMjc0MDIsMjcxMjksMjcxMjIsMjcxMTEsMjcxNDEsMjcwNTcsMjcxNjYsMjcxMTcsMjcxNTYsMjcxMTUsMjcxNDYsMjcxNTQsMjczMjksMjcxNzEsMjcxNTUsMjcyMDQsMjcxNDgsMjcyNTAsMjcxOTAsMjcyNTYsMjcyMDcsMjcyMzQsMjcyMjUsMjcyMzgsMjcyMDgsMjcxOTIsMjcxNzAsMjcyODAsMjcyNzcsMjcyOTYsMjcyNjgsMjcyOTgsMjcyOTksMjcyODcsMzQzMjcsMjczMjMsMjczMzEsMjczMzAsMjczMjAsMjczMTUsMjczMDgsMjczNTgsMjczNDUsMjczNTksMjczMDYsMjczNTQsMjczNzAsMjczODcsMjczOTcsMzQzMjYsMjczODYsMjc0MTAsMjc0MTQsMzk3MjksMjc0MjMsMjc0NDgsMjc0NDcsMzA0MjgsMjc0NDksMzkxNTAsMjc0NjMsMjc0NTksMjc0NjUsMjc0NzIsMjc0ODEsMjc0NzYsMjc0ODMsMjc0ODcsMjc0ODksMjc1MTIsMjc1MTMsMjc1MTksMjc1MjAsMjc1MjQsMjc1MjMsMjc1MzMsMjc1NDQsMjc1NDEsMjc1NTAsMjc1NTYsMjc1NjIsMjc1NjMsMjc1NjcsMjc1NzAsMjc1NjksMjc1NzEsMjc1NzUsMjc1ODAsMjc1OTAsMjc1OTUsMjc2MDMsMjc2MTUsMjc2MjgsMjc2MjcsMjc2MzUsMjc2MzEsNDA2MzgsMjc2NTYsMjc2NjcsMjc2NjgsMjc2NzUsMjc2ODQsMjc2ODMsMjc3NDIsMjc3MzMsMjc3NDYsMjc3NTQsMjc3NzgsMjc3ODksMjc4MDIsMjc3NzcsMjc4MDMsMjc3NzQsMjc3NTIsMjc3NjMsMjc3OTQsMjc3OTIsMjc4NDQsMjc4ODksMjc4NTksMjc4MzcsMjc4NjMsMjc4NDUsMjc4NjksMjc4MjIsMjc4MjUsMjc4MzgsMjc4MzQsMjc4NjcsMjc4ODcsMjc4NjUsMjc4ODIsMjc5MzUsMzQ4OTMsMjc5NTgsMjc5NDcsMjc5NjUsMjc5NjAsMjc5MjksMjc5NTcsMjc5NTUsMjc5MjIsMjc5MTYsMjgwMDMsMjgwNTEsMjgwMDQsMjc5OTQsMjgwMjUsMjc5OTMsMjgwNDYsMjgwNTMsMjg2NDQsMjgwMzcsMjgxNTMsMjgxODEsMjgxNzAsMjgwODUsMjgxMDMsMjgxMzQsMjgwODgsMjgxMDIsMjgxNDAsMjgxMjYsMjgxMDgsMjgxMzYsMjgxMTQsMjgxMDEsMjgxNTQsMjgxMjEsMjgxMzIsMjgxMTcsMjgxMzgsMjgxNDIsMjgyMDUsMjgyNzAsMjgyMDYsMjgxODUsMjgyNzQsMjgyNTUsMjgyMjIsMjgxOTUsMjgyNjcsMjgyMDMsMjgyNzgsMjgyMzcsMjgxOTEsMjgyMjcsMjgyMTgsMjgyMzgsMjgxOTYsMjg0MTUsMjgxODksMjgyMTYsMjgyOTAsMjgzMzAsMjgzMTIsMjgzNjEsMjgzNDMsMjgzNzEsMjgzNDksMjgzMzUsMjgzNTYsMjgzMzgsMjgzNzIsMjgzNzMsMjgzMDMsMjgzMjUsMjgzNTQsMjgzMTksMjg0ODEsMjg0MzMsMjg3NDgsMjgzOTYsMjg0MDgsMjg0MTQsMjg0NzksMjg0MDIsMjg0NjUsMjgzOTksMjg0NjYsMjgzNjQsMjg0NzgsMjg0MzUsMjg0MDcsMjg1NTAsMjg1MzgsMjg1MzYsMjg1NDUsMjg1NDQsMjg1MjcsMjg1MDcsMjg2NTksMjg1MjUsMjg1NDYsMjg1NDAsMjg1MDQsMjg1NTgsMjg1NjEsMjg2MTAsMjg1MTgsMjg1OTUsMjg1NzksMjg1NzcsMjg1ODAsMjg2MDEsMjg2MTQsMjg1ODYsMjg2MzksMjg2MjksMjg2NTIsMjg2MjgsMjg2MzIsMjg2NTcsMjg2NTQsMjg2MzUsMjg2ODEsMjg2ODMsMjg2NjYsMjg2ODksMjg2NzMsMjg2ODcsMjg2NzAsMjg2OTksMjg2OTgsMjg1MzIsMjg3MDEsMjg2OTYsMjg3MDMsMjg3MjAsMjg3MzQsMjg3MjIsMjg3NTMsMjg3NzEsMjg4MjUsMjg4MTgsMjg4NDcsMjg5MTMsMjg4NDQsMjg4NTYsMjg4NTEsMjg4NDYsMjg4OTUsMjg4NzUsMjg4OTMsMjg4ODksMjg5MzcsMjg5MjUsMjg5NTYsMjg5NTMsMjkwMjksMjkwMTMsMjkwNjQsMjkwMzAsMjkwMjYsMjkwMDQsMjkwMTQsMjkwMzYsMjkwNzEsMjkxNzksMjkwNjAsMjkwNzcsMjkwOTYsMjkxMDAsMjkxNDMsMjkxMTMsMjkxMTgsMjkxMzgsMjkxMjksMjkxNDAsMjkxMzQsMjkxNTIsMjkxNjQsMjkxNTksMjkxNzMsMjkxODAsMjkxNzcsMjkxODMsMjkxOTcsMjkyMDAsMjkyMTEsMjkyMjQsMjkyMjksMjkyMjgsMjkyMzIsMjkyMzQsMjkyNDMsMjkyNDQsMjkyNDcsMjkyNDgsMjkyNTQsMjkyNTksMjkyNzIsMjkzMDAsMjkzMTAsMjkzMTQsMjkzMTMsMjkzMTksMjkzMzAsMjkzMzQsMjkzNDYsMjkzNTEsMjkzNjksMjkzNjIsMjkzNzksMjkzODIsMjkzODAsMjkzOTAsMjkzOTQsMjk0MTAsMjk0MDgsMjk0MDksMjk0MzMsMjk0MzEsMjA0OTUsMjk0NjMsMjk0NTAsMjk0NjgsMjk0NjIsMjk0NjksMjk0OTIsMjk0ODcsMjk0ODEsMjk0NzcsMjk1MDIsMjk1MTgsMjk1MTksNDA2NjQsMjk1MjcsMjk1NDYsMjk1NDQsMjk1NTIsMjk1NjAsMjk1NTcsMjk1NjMsMjk1NjIsMjk2NDAsMjk2MTksMjk2NDYsMjk2MjcsMjk2MzIsMjk2NjksMjk2NzgsMjk2NjIsMjk4NTgsMjk3MDEsMjk4MDcsMjk3MzMsMjk2ODgsMjk3NDYsMjk3NTQsMjk3ODEsMjk3NTksMjk3OTEsMjk3ODUsMjk3NjEsMjk3ODgsMjk4MDEsMjk4MDgsMjk3OTUsMjk4MDIsMjk4MTQsMjk4MjIsMjk4MzUsMjk4NTQsMjk4NjMsMjk4OTgsMjk5MDMsMjk5MDgsMjk2ODEsMjk5MjAsMjk5MjMsMjk5MjcsMjk5MjksMjk5MzQsMjk5MzgsMjk5MzYsMjk5MzcsMjk5NDQsMjk5NDMsMjk5NTYsMjk5NTUsMjk5NTcsMjk5NjQsMjk5NjYsMjk5NjUsMjk5NzMsMjk5NzEsMjk5ODIsMjk5OTAsMjk5OTYsMzAwMTIsMzAwMjAsMzAwMjksMzAwMjYsMzAwMjUsMzAwNDMsMzAwMjIsMzAwNDIsMzAwNTcsMzAwNTIsMzAwNTUsMzAwNTksMzAwNjEsMzAwNzIsMzAwNzAsMzAwODYsMzAwODcsMzAwNjgsMzAwOTAsMzAwODksMzAwODIsMzAxMDAsMzAxMDYsMzAxMDksMzAxMTcsMzAxMTUsMzAxNDYsMzAxMzEsMzAxNDcsMzAxMzMsMzAxNDEsMzAxMzYsMzAxNDAsMzAxMjksMzAxNTcsMzAxNTQsMzAxNjIsMzAxNjksMzAxNzksMzAxNzQsMzAyMDYsMzAyMDcsMzAyMDQsMzAyMDksMzAxOTIsMzAyMDIsMzAxOTQsMzAxOTUsMzAyMTksMzAyMjEsMzAyMTcsMzAyMzksMzAyNDcsMzAyNDAsMzAyNDEsMzAyNDIsMzAyNDQsMzAyNjAsMzAyNTYsMzAyNjcsMzAyNzksMzAyODAsMzAyNzgsMzAzMDAsMzAyOTYsMzAzMDUsMzAzMDYsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTEsMzAzMTYsMzAzMjAsMzAzMjIsMzAzMjYsMzAzMjgsMzAzMzIsMzAzMzYsMzAzMzksMzAzNDQsMzAzNDcsMzAzNTAsMzAzNTgsMzAzNTUsMzAzNjEsMzAzNjIsMzAzODQsMzAzODgsMzAzOTIsMzAzOTMsMzAzOTQsMzA0MDIsMzA0MTMsMzA0MjIsMzA0MTgsMzA0MzAsMzA0MzMsMzA0MzcsMzA0MzksMzA0NDIsMzQzNTEsMzA0NTksMzA0NzIsMzA0NzEsMzA0NjgsMzA1MDUsMzA1MDAsMzA0OTQsMzA1MDEsMzA1MDIsMzA0OTEsMzA1MTksMzA1MjAsMzA1MzUsMzA1NTQsMzA1NjgsMzA1NzEsMzA1NTUsMzA1NjUsMzA1OTEsMzA1OTAsMzA1ODUsMzA2MDYsMzA2MDMsMzA2MDksMzA2MjQsMzA2MjIsMzA2NDAsMzA2NDYsMzA2NDksMzA2NTUsMzA2NTIsMzA2NTMsMzA2NTEsMzA2NjMsMzA2NjksMzA2NzksMzA2ODIsMzA2ODQsMzA2OTEsMzA3MDIsMzA3MTYsMzA3MzIsMzA3MzgsMzEwMTQsMzA3NTIsMzEwMTgsMzA3ODksMzA4NjIsMzA4MzYsMzA4NTQsMzA4NDQsMzA4NzQsMzA4NjAsMzA4ODMsMzA5MDEsMzA4OTAsMzA4OTUsMzA5MjksMzA5MTgsMzA5MjMsMzA5MzIsMzA5MTAsMzA5MDgsMzA5MTcsMzA5MjIsMzA5NTYsMzA5NTEsMzA5MzgsMzA5NzMsMzA5NjQsMzA5ODMsMzA5OTQsMzA5OTMsMzEwMDEsMzEwMjAsMzEwMTksMzEwNDAsMzEwNzIsMzEwNjMsMzEwNzEsMzEwNjYsMzEwNjEsMzEwNTksMzEwOTgsMzExMDMsMzExMTQsMzExMzMsMzExNDMsNDA3NzksMzExNDYsMzExNTAsMzExNTUsMzExNjEsMzExNjIsMzExNzcsMzExODksMzEyMDcsMzEyMTIsMzEyMDEsMzEyMDMsMzEyNDAsMzEyNDUsMzEyNTYsMzEyNTcsMzEyNjQsMzEyNjMsMzExMDQsMzEyODEsMzEyOTEsMzEyOTQsMzEyODcsMzEyOTksMzEzMTksMzEzMDUsMzEzMjksMzEzMzAsMzEzMzcsNDA4NjEsMzEzNDQsMzEzNTMsMzEzNTcsMzEzNjgsMzEzODMsMzEzODEsMzEzODQsMzEzODIsMzE0MDEsMzE0MzIsMzE0MDgsMzE0MTQsMzE0MjksMzE0MjgsMzE0MjMsMzY5OTUsMzE0MzEsMzE0MzQsMzE0MzcsMzE0MzksMzE0NDUsMzE0NDMsMzE0NDksMzE0NTAsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjIsMzE0NjksMzE0NzIsMzE0OTAsMzE1MDMsMzE0OTgsMzE0OTQsMzE1MzksMzE1MTIsMzE1MTMsMzE1MTgsMzE1NDEsMzE1MjgsMzE1NDIsMzE1NjgsMzE2MTAsMzE0OTIsMzE1NjUsMzE0OTksMzE1NjQsMzE1NTcsMzE2MDUsMzE1ODksMzE2MDQsMzE1OTEsMzE2MDAsMzE2MDEsMzE1OTYsMzE1OTgsMzE2NDUsMzE2NDAsMzE2NDcsMzE2MjksMzE2NDQsMzE2NDIsMzE2MjcsMzE2MzQsMzE2MzEsMzE1ODEsMzE2NDEsMzE2OTEsMzE2ODEsMzE2OTIsMzE2OTUsMzE2NjgsMzE2ODYsMzE3MDksMzE3MjEsMzE3NjEsMzE3NjQsMzE3MTgsMzE3MTcsMzE4NDAsMzE3NDQsMzE3NTEsMzE3NjMsMzE3MzEsMzE3MzUsMzE3NjcsMzE3NTcsMzE3MzQsMzE3NzksMzE3ODMsMzE3ODYsMzE3NzUsMzE3OTksMzE3ODcsMzE4MDUsMzE4MjAsMzE4MTEsMzE4MjgsMzE4MjMsMzE4MDgsMzE4MjQsMzE4MzIsMzE4MzksMzE4NDQsMzE4MzAsMzE4NDUsMzE4NTIsMzE4NjEsMzE4NzUsMzE4ODgsMzE5MDgsMzE5MTcsMzE5MDYsMzE5MTUsMzE5MDUsMzE5MTIsMzE5MjMsMzE5MjIsMzE5MjEsMzE5MTgsMzE5MjksMzE5MzMsMzE5MzYsMzE5NDEsMzE5MzgsMzE5NjAsMzE5NTQsMzE5NjQsMzE5NzAsMzk3MzksMzE5ODMsMzE5ODYsMzE5ODgsMzE5OTAsMzE5OTQsMzIwMDYsMzIwMDIsMzIwMjgsMzIwMjEsMzIwMTAsMzIwNjksMzIwNzUsMzIwNDYsMzIwNTAsMzIwNjMsMzIwNTMsMzIwNzAsMzIxMTUsMzIwODYsMzIwNzgsMzIxMTQsMzIxMDQsMzIxMTAsMzIwNzksMzIwOTksMzIxNDcsMzIxMzcsMzIwOTEsMzIxNDMsMzIxMjUsMzIxNTUsMzIxODYsMzIxNzQsMzIxNjMsMzIxODEsMzIxOTksMzIxODksMzIxNzEsMzIzMTcsMzIxNjIsMzIxNzUsMzIyMjAsMzIxODQsMzIxNTksMzIxNzYsMzIyMTYsMzIyMjEsMzIyMjgsMzIyMjIsMzIyNTEsMzIyNDIsMzIyMjUsMzIyNjEsMzIyNjYsMzIyOTEsMzIyODksMzIyNzQsMzIzMDUsMzIyODcsMzIyNjUsMzIyNjcsMzIyOTAsMzIzMjYsMzIzNTgsMzIzMTUsMzIzMDksMzIzMTMsMzIzMjMsMzIzMTEsMzIzMDYsMzIzMTQsMzIzNTksMzIzNDksMzIzNDIsMzIzNTAsMzIzNDUsMzIzNDYsMzIzNzcsMzIzNjIsMzIzNjEsMzIzODAsMzIzNzksMzIzODcsMzIyMTMsMzIzODEsMzY3ODIsMzIzODMsMzIzOTIsMzIzOTMsMzIzOTYsMzI0MDIsMzI0MDAsMzI0MDMsMzI0MDQsMzI0MDYsMzIzOTgsMzI0MTEsMzI0MTIsMzI1NjgsMzI1NzAsMzI1ODEsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTIsMzI1OTMsMzI1OTcsMzI1OTYsMzI2MDAsMzI2MDcsMzI2MDgsMzI2MTYsMzI2MTcsMzI2MTUsMzI2MzIsMzI2NDIsMzI2NDYsMzI2NDMsMzI2NDgsMzI2NDcsMzI2NTIsMzI2NjAsMzI2NzAsMzI2NjksMzI2NjYsMzI2NzUsMzI2ODcsMzI2OTAsMzI2OTcsMzI2ODYsMzI2OTQsMzI2OTYsMzU2OTcsMzI3MDksMzI3MTAsMzI3MTQsMzI3MjUsMzI3MjQsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTUsMzI3NjEsMzkxMzIsMzI3NzQsMzI3NzIsMzI3NzksMzI3ODYsMzI3OTIsMzI3OTMsMzI3OTYsMzI4MDEsMzI4MDgsMzI4MzEsMzI4MjcsMzI4NDIsMzI4MzgsMzI4NTAsMzI4NTYsMzI4NTgsMzI4NjMsMzI4NjYsMzI4NzIsMzI4ODMsMzI4ODIsMzI4ODAsMzI4ODYsMzI4ODksMzI4OTMsMzI4OTUsMzI5MDAsMzI5MDIsMzI5MDEsMzI5MjMsMzI5MTUsMzI5MjIsMzI5NDEsMjA4ODAsMzI5NDAsMzI5ODcsMzI5OTcsMzI5ODUsMzI5ODksMzI5NjQsMzI5ODYsMzI5ODIsMzMwMzMsMzMwMDcsMzMwMDksMzMwNTEsMzMwNjUsMzMwNTksMzMwNzEsMzMwOTksMzg1MzksMzMwOTQsMzMwODYsMzMxMDcsMzMxMDUsMzMwMjAsMzMxMzcsMzMxMzQsMzMxMjUsMzMxMjYsMzMxNDAsMzMxNTUsMzMxNjAsMzMxNjIsMzMxNTIsMzMxNTQsMzMxODQsMzMxNzMsMzMxODgsMzMxODcsMzMxMTksMzMxNzEsMzMxOTMsMzMyMDAsMzMyMDUsMzMyMTQsMzMyMDgsMzMyMTMsMzMyMTYsMzMyMTgsMzMyMTAsMzMyMjUsMzMyMjksMzMyMzMsMzMyNDEsMzMyNDAsMzMyMjQsMzMyNDIsMzMyNDcsMzMyNDgsMzMyNTUsMzMyNzQsMzMyNzUsMzMyNzgsMzMyODEsMzMyODIsMzMyODUsMzMyODcsMzMyOTAsMzMyOTMsMzMyOTYsMzMzMDIsMzMzMjEsMzMzMjMsMzMzMzYsMzMzMzEsMzMzNDQsMzMzNjksMzMzNjgsMzMzNzMsMzMzNzAsMzMzNzUsMzMzODAsMzMzNzgsMzMzODQsMzMzODYsMzMzODcsMzMzMjYsMzMzOTMsMzMzOTksMzM0MDAsMzM0MDYsMzM0MjEsMzM0MjYsMzM0NTEsMzM0MzksMzM0NjcsMzM0NTIsMzM1MDUsMzM1MDcsMzM1MDMsMzM0OTAsMzM1MjQsMzM1MjMsMzM1MzAsMzM2ODMsMzM1MzksMzM1MzEsMzM1MjksMzM1MDIsMzM1NDIsMzM1MDAsMzM1NDUsMzM0OTcsMzM1ODksMzM1ODgsMzM1NTgsMzM1ODYsMzM1ODUsMzM2MDAsMzM1OTMsMzM2MTYsMzM2MDUsMzM1ODMsMzM1NzksMzM1NTksMzM1NjAsMzM2NjksMzM2OTAsMzM3MDYsMzM2OTUsMzM2OTgsMzM2ODYsMzM1NzEsMzM2NzgsMzM2NzEsMzM2NzQsMzM2NjAsMzM3MTcsMzM2NTEsMzM2NTMsMzM2OTYsMzM2NzMsMzM3MDQsMzM3ODAsMzM4MTEsMzM3NzEsMzM3NDIsMzM3ODksMzM3OTUsMzM3NTIsMzM4MDMsMzM3MjksMzM3ODMsMzM3OTksMzM3NjAsMzM3NzgsMzM4MDUsMzM4MjYsMzM4MjQsMzM3MjUsMzM4NDgsMzQwNTQsMzM3ODcsMzM5MDEsMzM4MzQsMzM4NTIsMzQxMzgsMzM5MjQsMzM5MTEsMzM4OTksMzM5NjUsMzM5MDIsMzM5MjIsMzM4OTcsMzM4NjIsMzM4MzYsMzM5MDMsMzM5MTMsMzM4NDUsMzM5OTQsMzM4OTAsMzM5NzcsMzM5ODMsMzM5NTEsMzQwMDksMzM5OTcsMzM5NzksMzQwMTAsMzQwMDAsMzM5ODUsMzM5OTAsMzQwMDYsMzM5NTMsMzQwODEsMzQwNDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQwNzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQzMDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIsMzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYsMzQyMDMsMzQyODIsMzQxODMsMzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDksMzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcsMzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQyOTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQzODEsMjAwNTMsMzQzODgsMzQzOTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYsMzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1NzgsMzQ1NjYsMzQ1NjgsMzQ1NjAsMzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMsMzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYsMzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2NDMsMzQ2NTksMzQ2NjYsMzQ4MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQsMzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAsMzQ3NzAsMzQ4MzMsMzQ4MzgsMzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAsMzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQsMzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5NjIsMzQ5OTAsMzQ5NjksMzQ5NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUwNjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYsMzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDksMzUxMTQsMzUxMTUsMzUxMzcsMzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgsMzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgsMzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUyMTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUyNDQsMzUyNDcsMzUyNTAsMzUyNTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUyOTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUzNTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMsMzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0MzcsMzU0MzYsMzU0MjYsMzU0NjEsMzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMsMzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMsMzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1OTYsMzU1OTEsMzU2MTAsMzU1NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQsMzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDksMzU3MTIsMzU3MjQsMzU3MjYsMzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3MzgsMzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5MzgsMzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5NjQsMzU5OTIsMjUxMTcsMzYwMTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYwMTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYwOTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMsMzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUsMzYxMTYsMzYxMTgsMzYxOTksMzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDksMzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTksMzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYzNDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYzNjgsMzYzODMsMzY0MTgsMzY0MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEsMzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTksMzY0OTcsMzY1MDAsMzY1MDUsMzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAsMzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMsMzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2MzUsMzY2MjAsMzY2NDYsMzY2NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEsMzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIsMzY4NDcsMzY5OTksMzY4NTIsMzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUsMzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEsMzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5NTgsMzY5NjgsMzY5NzUsMzY5ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcwOTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIsMzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYsMzcyMDgsMzcyMTksMzcyMjEsMzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcsMzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIsMzczMTMsMzczMjEsMzczMjMsMzczMjgsMzczMzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzczNjYsMzc0MDYsMzczNzUsMzczOTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYsMzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYsMzc3MDAsMzc2NzgsMzc2NTcsMzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUsMzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUsMzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4MzIsMzc4NjAsMzc5MTQsMzc5MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcsMzgwMDAsMzgwMDUsMzgwMDcsMzgwMTMsMzc5NzgsMzgwMTIsMzgwMTQsMzgwMTcsMzgwMTUsMzgyNzQsMzgyNzksMzgyODIsMzgyOTIsMzgyOTQsMzgyOTYsMzgyOTcsMzgzMDQsMzgzMTIsMzgzMTEsMzgzMTcsMzgzMzIsMzgzMzEsMzgzMjksMzgzMzQsMzgzNDYsMjg2NjIsMzgzMzksMzgzNDksMzgzNDgsMzgzNTcsMzgzNTYsMzgzNTgsMzgzNjQsMzgzNjksMzgzNzMsMzgzNzAsMzg0MzMsMzg0NDAsMzg0NDYsMzg0NDcsMzg0NjYsMzg0NzYsMzg0NzksMzg0NzUsMzg1MTksMzg0OTIsMzg0OTQsMzg0OTMsMzg0OTUsMzg1MDIsMzg1MTQsMzg1MDgsMzg1NDEsMzg1NTIsMzg1NDksMzg1NTEsMzg1NzAsMzg1NjcsMzg1NzcsMzg1NzgsMzg1NzYsMzg1ODAsMzg1ODIsMzg1ODQsMzg1ODUsMzg2MDYsMzg2MDMsMzg2MDEsMzg2MDUsMzUxNDksMzg2MjAsMzg2NjksMzg2MTMsMzg2NDksMzg2NjAsMzg2NjIsMzg2NjQsMzg2NzUsMzg2NzAsMzg2NzMsMzg2NzEsMzg2NzgsMzg2ODEsMzg2OTIsMzg2OTgsMzg3MDQsMzg3MTMsMzg3MTcsMzg3MTgsMzg3MjQsMzg3MjYsMzg3MjgsMzg3MjIsMzg3MjksMzg3NDgsMzg3NTIsMzg3NTYsMzg3NTgsMzg3NjAsMjEyMDIsMzg3NjMsMzg3NjksMzg3NzcsMzg3ODksMzg3ODAsMzg3ODUsMzg3NzgsMzg3OTAsMzg3OTUsMzg3OTksMzg4MDAsMzg4MTIsMzg4MjQsMzg4MjIsMzg4MTksMzg4MzUsMzg4MzYsMzg4NTEsMzg4NTQsMzg4NTYsMzg4NTksMzg4NzYsMzg4OTMsNDA3ODMsMzg4OTgsMzE0NTUsMzg5MDIsMzg5MDEsMzg5MjcsMzg5MjQsMzg5NjgsMzg5NDgsMzg5NDUsMzg5NjcsMzg5NzMsMzg5ODIsMzg5OTEsMzg5ODcsMzkwMTksMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjgsMzkwMjcsMzkwODIsMzkwODcsMzkwODksMzkwOTQsMzkxMDgsMzkxMDcsMzkxMTAsMzkxNDUsMzkxNDcsMzkxNzEsMzkxNzcsMzkxODYsMzkxODgsMzkxOTIsMzkyMDEsMzkxOTcsMzkxOTgsMzkyMDQsMzkyMDAsMzkyMTIsMzkyMTQsMzkyMjksMzkyMzAsMzkyMzQsMzkyNDEsMzkyMzcsMzkyNDgsMzkyNDMsMzkyNDksMzkyNTAsMzkyNDQsMzkyNTMsMzkzMTksMzkzMjAsMzkzMzMsMzkzNDEsMzkzNDIsMzkzNTYsMzkzOTEsMzkzODcsMzkzODksMzkzODQsMzkzNzcsMzk0MDUsMzk0MDYsMzk0MDksMzk0MTAsMzk0MTksMzk0MTYsMzk0MjUsMzk0MzksMzk0MjksMzkzOTQsMzk0NDksMzk0NjcsMzk0NzksMzk0OTMsMzk0OTAsMzk0ODgsMzk0OTEsMzk0ODYsMzk1MDksMzk1MDEsMzk1MTUsMzk1MTEsMzk1MTksMzk1MjIsMzk1MjUsMzk1MjQsMzk1MjksMzk1MzEsMzk1MzAsMzk1OTcsMzk2MDAsMzk2MTIsMzk2MTYsMzk2MzEsMzk2MzMsMzk2MzUsMzk2MzYsMzk2NDYsMzk2NDcsMzk2NTAsMzk2NTEsMzk2NTQsMzk2NjMsMzk2NTksMzk2NjIsMzk2NjgsMzk2NjUsMzk2NzEsMzk2NzUsMzk2ODYsMzk3MDQsMzk3MDYsMzk3MTEsMzk3MTQsMzk3MTUsMzk3MTcsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjYsMzk3MjcsMzk3MzAsMzk3NDgsMzk3NDcsMzk3NTksMzk3NTcsMzk3NTgsMzk3NjEsMzk3NjgsMzk3OTYsMzk4MjcsMzk4MTEsMzk4MjUsMzk4MzAsMzk4MzEsMzk4MzksMzk4NDAsMzk4NDgsMzk4NjAsMzk4NzIsMzk4ODIsMzk4NjUsMzk4NzgsMzk4ODcsMzk4ODksMzk4OTAsMzk5MDcsMzk5MDYsMzk5MDgsMzk4OTIsMzk5MDUsMzk5OTQsMzk5MjIsMzk5MjEsMzk5MjAsMzk5NTcsMzk5NTYsMzk5NDUsMzk5NTUsMzk5NDgsMzk5NDIsMzk5NDQsMzk5NTQsMzk5NDYsMzk5NDAsMzk5ODIsMzk5NjMsMzk5NzMsMzk5NzIsMzk5NjksMzk5ODQsNDAwMDcsMzk5ODYsNDAwMDYsMzk5OTgsNDAwMjYsNDAwMzIsNDAwMzksNDAwNTQsNDAwNTYsNDAxNjcsNDAxNzIsNDAxNzYsNDAyMDEsNDAyMDAsNDAxNzEsNDAxOTUsNDAxOTgsNDAyMzQsNDAyMzAsNDAzNjcsNDAyMjcsNDAyMjMsNDAyNjAsNDAyMTMsNDAyMTAsNDAyNTcsNDAyNTUsNDAyNTQsNDAyNjIsNDAyNjQsNDAyODUsNDAyODYsNDAyOTIsNDAyNzMsNDAyNzIsNDAyODEsNDAzMDYsNDAzMjksNDAzMjcsNDAzNjMsNDAzMDMsNDAzMTQsNDAzNDYsNDAzNTYsNDAzNjEsNDAzNzAsNDAzODgsNDAzODUsNDAzNzksNDAzNzYsNDAzNzgsNDAzOTAsNDAzOTksNDAzODYsNDA0MDksNDA0MDMsNDA0NDAsNDA0MjIsNDA0MjksNDA0MzEsNDA0NDUsNDA0NzQsNDA0NzUsNDA0NzgsNDA1NjUsNDA1NjksNDA1NzMsNDA1NzcsNDA1ODQsNDA1ODcsNDA1ODgsNDA1OTQsNDA1OTcsNDA1OTMsNDA2MDUsNDA2MTMsNDA2MTcsNDA2MzIsNDA2MTgsNDA2MjEsMzg3NTMsNDA2NTIsNDA2NTQsNDA2NTUsNDA2NTYsNDA2NjAsNDA2NjgsNDA2NzAsNDA2NjksNDA2NzIsNDA2NzcsNDA2ODAsNDA2ODcsNDA2OTIsNDA2OTQsNDA2OTUsNDA2OTcsNDA2OTksNDA3MDAsNDA3MDEsNDA3MTEsNDA3MTIsMzAzOTEsNDA3MjUsNDA3MzcsNDA3NDgsNDA3NjYsNDA3NzgsNDA3ODYsNDA3ODgsNDA4MDMsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDYsNDA4MDcsNDA4MTIsNDA4MTAsNDA4MjMsNDA4MTgsNDA4MjIsNDA4NTMsNDA4NjAsNDA4NjQsMjI1NzUsMjcwNzksMzY5NTMsMjk3OTYsMjA5NTYsMjkwODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSw4NzU3LDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwiamlzMDIxMlwiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxODYsMTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxsLDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQxLDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgsMTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYsbnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwzNTgsMjIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMzMSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIwMiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwyODgsMjkyLDIwNSwyMDQsMjA3LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwzMTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2NCw0NjcsMzY4LDM2MiwzNzAsMzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIyMSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIsMjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcsMjcxLDIzMywyMzIsMjM1LDIzNCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcsbnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDksMzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1LDM0MSwzNDUsMzQzLDM0NywzNDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUyLDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3MywyNTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMsMjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAwMTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAwMzksMjAwNDksMjAwNTgsMjAwNjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAwODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAxNjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIsMjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEsMjAyMTMsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMsMjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAyOTcsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAzMjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYsMjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzIsMjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMsMjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0NDgsMjA0NTAsMjA0NjQsMjA0NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEsMjA1MzMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYsMjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1NzgsMjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTgsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYsMjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQsMjA2ODYsMjA2ODgsMjA2OTEsMjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMsMjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAsMjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3NTIsMjA3NTksMjA3NjEsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUsMjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYsMjA4MzgsMjA4NjIsMjA4NjcsMjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMsMjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAsMjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5NzQsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEwMTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEwNDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcsMjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgsMjEwODksMjEwOTQsMjExMDIsMjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIsMjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjExNzgsMjExNzksMjExODEsMjExODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjExOTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMsMjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjUsMjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYsMjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEzMTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEzNDUsMjEzNDcsMjEzNDksMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEzNzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0MzcsMjE0NDAsMjE0NDUsMjE0NTUsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjksMjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1MzcsMjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1ODEsMjE1ODMsMjE1OTgsMjE2MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQsMjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMsMjE2NzQsMjE2NzcsMjE2NzgsMjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEsMjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMsMjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3NzMsMjE3NzQsMjE3ODEsMjE4MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQsMjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODksMjE4OTAsMjE4OTQsMjE4OTYsMjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcsMjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUsMjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5NzksMjE5ODIsMjE5ODYsMjE5OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIwMjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMsMjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEsMjIwODMsMjIwODQsMjIwODYsMjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAsMjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcsMjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIxNDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIxNzAsMjIxNzMsMjIxNzQsMjIxNzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIyMTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAsMjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEsMjIyNDQsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMsMjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIzMDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIzMTYsMjIzMTgsMjIzMTksMjIzMjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIzNDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIzNzksMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMsMjIzOTQsMjIzOTUsMjIzOTYsMjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAsMjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEsMjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0ODUsMjI0OTMsMjI0OTQsMjI1MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEsMjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1NjcsMjI1NzMsMjI1NzgsMjI1ODUsMjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcsMjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIsMjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2NzIsMjI2NzYsMjI2NzgsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYsMjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODksMjI3OTAsMjI3OTUsMjI3OTYsMjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMsMjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4OTEsMjI4OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIsMjI5NzcsMjI5NzksMjI5ODAsMjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUsMjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYsMjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMwNTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMwNzUsMjMwNzYsMjMwNzksMjMwODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMxNDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMsMjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMsMjMxOTYsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcsMjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgsMjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMyNjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMyOTMsMjMyOTYsMjMyOTcsMjMzMDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMzMjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMzODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcsMjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0MjgsMjM0MzAsMjM0MzQsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MjAsMjM1MzUsMjM1MzcsMjM1NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQsMjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEsMjM2NjQsMjM2NjgsMjM2NjksMjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcsMjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUsMjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3NjcsMjM3OTAsMjM3OTMsMjM3OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4NzgsMjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5MjksMjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5OTIsMjM5OTMsMjQwMDMsMjQwMDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQwMjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQwODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUsMjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYsMjQxMzksMjQxNDQsMjQxMzcsMjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYsMjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIsMjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQyMjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQyNTMsMjQyNTQsMjQyNTUsMjQyNjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQyNzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgsMjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEsMjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgsMjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEsMjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIsMjQ1NDIsMjQ1NDUsMjQ1NDYsMjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcsMjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYsMjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2MjksMjQ2NDAsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDQsMjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYsMjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgsMjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4MjgsMjQ4MjksMjQ4MzQsMjQ4MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIsMjQ5MDUsMjQ5MjYsMjQ5MjgsMjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5NzksMjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5OTEsMjQ5OTIsMjQ5OTcsMjUwMDAsMjUwMDIsMjUwMDUsMjUwMTYsMjUwMTcsMjUwMjAsMjUwMjQsMjUwMjUsMjUwMjYsMjUwMzgsMjUwMzksMjUwNDUsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTcsMjUwNTgsMjUwNjMsMjUwNjUsMjUwNjEsMjUwNjgsMjUwNjksMjUwNzEsMjUwODksMjUwOTEsMjUwOTIsMjUwOTUsMjUxMDcsMjUxMDksMjUxMTYsMjUxMjAsMjUxMjIsMjUxMjMsMjUxMjcsMjUxMjksMjUxMzEsMjUxNDUsMjUxNDksMjUxNTQsMjUxNTUsMjUxNTYsMjUxNTgsMjUxNjQsMjUxNjgsMjUxNjksMjUxNzAsMjUxNzIsMjUxNzQsMjUxNzgsMjUxODAsMjUxODgsMjUxOTcsMjUxOTksMjUyMDMsMjUyMTAsMjUyMTMsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyNTQsMjUyNTYsMjUyNjcsMjUyNzAsMjUyNzEsMjUyNzQsMjUyNzgsMjUyNzksMjUyODQsMjUyOTQsMjUzMDEsMjUzMDIsMjUzMDYsMjUzMjIsMjUzMzAsMjUzMzIsMjUzNDAsMjUzNDEsMjUzNDcsMjUzNDgsMjUzNTQsMjUzNTUsMjUzNTcsMjUzNjAsMjUzNjMsMjUzNjYsMjUzNjgsMjUzODUsMjUzODYsMjUzODksMjUzOTcsMjUzOTgsMjU0MDEsMjU0MDQsMjU0MDksMjU0MTAsMjU0MTEsMjU0MTIsMjU0MTQsMjU0MTgsMjU0MTksMjU0MjIsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzIsMjU0MzUsMjU0NDUsMjU0NDYsMjU0NTIsMjU0NTMsMjU0NTcsMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjgsMjU0NjksMjU0NzEsMjU0NzQsMjU0NzYsMjU0NzksMjU0ODIsMjU0ODgsMjU0OTIsMjU0OTMsMjU0OTcsMjU0OTgsMjU1MDIsMjU1MDgsMjU1MTAsMjU1MTcsMjU1MTgsMjU1MTksMjU1MzMsMjU1MzcsMjU1NDEsMjU1NDQsMjU1NTAsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NjQsMjU1NjgsMjU1NzMsMjU1NzgsMjU1ODAsMjU1ODYsMjU1ODcsMjU1ODksMjU1OTIsMjU1OTMsMjU2MDksMjU2MTAsMjU2MTYsMjU2MTgsMjU2MjAsMjU2MjQsMjU2MzAsMjU2MzIsMjU2MzQsMjU2MzYsMjU2MzcsMjU2NDEsMjU2NDIsMjU2NDcsMjU2NDgsMjU2NTMsMjU2NjEsMjU2NjMsMjU2NzUsMjU2NzksMjU2ODEsMjU2ODIsMjU2ODMsMjU2ODQsMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTksMjU3MDksMjU3MTUsMjU3MTYsMjU3MjMsMjU3MjUsMjU3MzMsMjU3MzUsMjU3NDMsMjU3NDQsMjU3NDUsMjU3NTIsMjU3NTMsMjU3NTUsMjU3NTcsMjU3NTksMjU3NjEsMjU3NjMsMjU3NjYsMjU3NjgsMjU3NzIsMjU3NzksMjU3ODksMjU3OTAsMjU3OTEsMjU3OTYsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDYsMjU4MDgsMjU4MDksMjU4MTMsMjU4MTUsMjU4MjgsMjU4MjksMjU4MzMsMjU4MzQsMjU4MzcsMjU4NDAsMjU4NDUsMjU4NDcsMjU4NTEsMjU4NTUsMjU4NTcsMjU4NjAsMjU4NjQsMjU4NjUsMjU4NjYsMjU4NzEsMjU4NzUsMjU4NzYsMjU4NzgsMjU4ODEsMjU4ODMsMjU4ODYsMjU4ODcsMjU4OTAsMjU4OTQsMjU4OTcsMjU5MDIsMjU5MDUsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjMsMjU5MjcsMjU5MjksMjU5MzYsMjU5MzgsMjU5NDAsMjU5NTEsMjU5NTIsMjU5NTksMjU5NjMsMjU5NzgsMjU5ODEsMjU5ODUsMjU5ODksMjU5OTQsMjYwMDIsMjYwMDUsMjYwMDgsMjYwMTMsMjYwMTYsMjYwMTksMjYwMjIsMjYwMzAsMjYwMzQsMjYwMzUsMjYwMzYsMjYwNDcsMjYwNTAsMjYwNTYsMjYwNTcsMjYwNjIsMjYwNjQsMjYwNjgsMjYwNzAsMjYwNzIsMjYwNzksMjYwOTYsMjYwOTgsMjYxMDAsMjYxMDEsMjYxMDUsMjYxMTAsMjYxMTEsMjYxMTIsMjYxMTYsMjYxMjAsMjYxMjEsMjYxMjUsMjYxMjksMjYxMzAsMjYxMzMsMjYxMzQsMjYxNDEsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjEsMjYxNjMsMjYxNjksMjYxNjcsMjYxNzYsMjYxODEsMjYxODIsMjYxODYsMjYxODgsMjYxOTMsMjYxOTAsMjYxOTksMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDgsMjYyMDksMjYzNjMsMjYyMTgsMjYyMTksMjYyMjAsMjYyMzgsMjYyMjcsMjYyMjksMjYyMzksMjYyMzEsMjYyMzIsMjYyMzMsMjYyMzUsMjYyNDAsMjYyMzYsMjYyNTEsMjYyNTIsMjYyNTMsMjYyNTYsMjYyNTgsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzEsMjYyNzIsMjYyNzYsMjYyODUsMjYyODksMjYyOTAsMjYyOTMsMjYyOTksMjYzMDMsMjYzMDQsMjYzMDYsMjYzMDcsMjYzMTIsMjYzMTYsMjYzMTgsMjYzMTksMjYzMjQsMjYzMzEsMjYzMzUsMjYzNDQsMjYzNDcsMjYzNDgsMjYzNTAsMjYzNjIsMjYzNzMsMjYzNzUsMjYzODIsMjYzODcsMjYzOTMsMjYzOTYsMjY0MDAsMjY0MDIsMjY0MTksMjY0MzAsMjY0MzcsMjY0MzksMjY0NDAsMjY0NDQsMjY0NTIsMjY0NTMsMjY0NjEsMjY0NzAsMjY0NzYsMjY0NzgsMjY0ODQsMjY0ODYsMjY0OTEsMjY0OTcsMjY1MDAsMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTUsMjY1MTgsMjY1MjAsMjY1MjEsMjY1MjMsMjY1NDQsMjY1NDUsMjY1NDYsMjY1NDksMjY1NTUsMjY1NTYsMjY1NTcsMjY2MTcsMjY1NjAsMjY1NjIsMjY1NjMsMjY1NjUsMjY1NjgsMjY1NjksMjY1NzgsMjY1ODMsMjY1ODUsMjY1ODgsMjY1OTMsMjY1OTgsMjY2MDgsMjY2MTAsMjY2MTQsMjY2MTUsMjY3MDYsMjY2NDQsMjY2NDksMjY2NTMsMjY2NTUsMjY2NjQsMjY2NjMsMjY2NjgsMjY2NjksMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzUsMjY2ODMsMjY2ODcsMjY2OTIsMjY2OTMsMjY2OTgsMjY3MDAsMjY3MDksMjY3MTEsMjY3MTIsMjY3MTUsMjY3MzEsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3NDEsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NTQsMjY3NTYsMjY3NTgsMjY3NjAsMjY3NzQsMjY3NzYsMjY3NzgsMjY3ODAsMjY3ODUsMjY3ODcsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTgsMjY4MDIsMjY4MTEsMjY4MjEsMjY4MjQsMjY4MjgsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzgsMjY4NDEsMjY4NDQsMjY4NDUsMjY4NTMsMjY4NTYsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjQsMjY4NjUsMjY4NjksMjY4NzAsMjY4NzUsMjY4NzYsMjY4NzcsMjY4ODYsMjY4ODksMjY4OTAsMjY4OTYsMjY4OTcsMjY4OTksMjY5MDIsMjY5MDMsMjY5MjksMjY5MzEsMjY5MzMsMjY5MzYsMjY5MzksMjY5NDYsMjY5NDksMjY5NTMsMjY5NTgsMjY5NjcsMjY5NzEsMjY5NzksMjY5ODAsMjY5ODEsMjY5ODIsMjY5ODQsMjY5ODUsMjY5ODgsMjY5OTIsMjY5OTMsMjY5OTQsMjcwMDIsMjcwMDMsMjcwMDcsMjcwMDgsMjcwMjEsMjcwMjYsMjcwMzAsMjcwMzIsMjcwNDEsMjcwNDUsMjcwNDYsMjcwNDgsMjcwNTEsMjcwNTMsMjcwNTUsMjcwNjMsMjcwNjQsMjcwNjYsMjcwNjgsMjcwNzcsMjcwODAsMjcwODksMjcwOTQsMjcwOTUsMjcxMDYsMjcxMDksMjcxMTgsMjcxMTksMjcxMjEsMjcxMjMsMjcxMjUsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzksMjcxNTEsMjcxNTMsMjcxNTcsMjcxNjIsMjcxNjUsMjcxNjgsMjcxNzIsMjcxNzYsMjcxODQsMjcxODYsMjcxODgsMjcxOTEsMjcxOTUsMjcxOTgsMjcxOTksMjcyMDUsMjcyMDYsMjcyMDksMjcyMTAsMjcyMTQsMjcyMTYsMjcyMTcsMjcyMTgsMjcyMjEsMjcyMjIsMjcyMjcsMjcyMzYsMjcyMzksMjcyNDIsMjcyNDksMjcyNTEsMjcyNjIsMjcyNjUsMjcyNjcsMjcyNzAsMjcyNzEsMjcyNzMsMjcyNzUsMjcyODEsMjcyOTEsMjcyOTMsMjcyOTQsMjcyOTUsMjczMDEsMjczMDcsMjczMTEsMjczMTIsMjczMTMsMjczMTYsMjczMjUsMjczMjYsMjczMjcsMjczMzQsMjczMzcsMjczMzYsMjczNDAsMjczNDQsMjczNDgsMjczNDksMjczNTAsMjczNTYsMjczNTcsMjczNjQsMjczNjcsMjczNzIsMjczNzYsMjczNzcsMjczNzgsMjczODgsMjczODksMjczOTQsMjczOTUsMjczOTgsMjczOTksMjc0MDEsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTUsMjc0MTksMjc0MjIsMjc0MjgsMjc0MzIsMjc0MzUsMjc0MzYsMjc0MzksMjc0NDUsMjc0NDYsMjc0NTEsMjc0NTUsMjc0NjIsMjc0NjYsMjc0NjksMjc0NzQsMjc0NzgsMjc0ODAsMjc0ODUsMjc0ODgsMjc0OTUsMjc0OTksMjc1MDIsMjc1MDQsMjc1MDksMjc1MTcsMjc1MTgsMjc1MjIsMjc1MjUsMjc1NDMsMjc1NDcsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NjAsMjc1NjEsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjgsMjc1NzYsMjc1NzcsMjc1ODEsMjc1ODIsMjc1ODcsMjc1ODgsMjc1OTMsMjc1OTYsMjc2MDYsMjc2MTAsMjc2MTcsMjc2MTksMjc2MjIsMjc2MjMsMjc2MzAsMjc2MzMsMjc2MzksMjc2NDEsMjc2NDcsMjc2NTAsMjc2NTIsMjc2NTMsMjc2NTcsMjc2NjEsMjc2NjIsMjc2NjQsMjc2NjYsMjc2NzMsMjc2NzksMjc2ODYsMjc2ODcsMjc2ODgsMjc2OTIsMjc2OTQsMjc2OTksMjc3MDEsMjc3MDIsMjc3MDYsMjc3MDcsMjc3MTEsMjc3MjIsMjc3MjMsMjc3MjUsMjc3MjcsMjc3MzAsMjc3MzIsMjc3MzcsMjc3MzksMjc3NDAsMjc3NTUsMjc3NTcsMjc3NTksMjc3NjQsMjc3NjYsMjc3NjgsMjc3NjksMjc3NzEsMjc3ODEsMjc3ODIsMjc3ODMsMjc3ODUsMjc3OTYsMjc3OTcsMjc3OTksMjc4MDAsMjc4MDQsMjc4MDcsMjc4MjQsMjc4MjYsMjc4MjgsMjc4NDIsMjc4NDYsMjc4NTMsMjc4NTUsMjc4NTYsMjc4NTcsMjc4NTgsMjc4NjAsMjc4NjIsMjc4NjYsMjc4NjgsMjc4NzIsMjc4NzksMjc4ODEsMjc4ODMsMjc4ODQsMjc4ODYsMjc4OTAsMjc4OTIsMjc5MDgsMjc5MTEsMjc5MTQsMjc5MTgsMjc5MTksMjc5MjEsMjc5MjMsMjc5MzAsMjc5NDIsMjc5NDMsMjc5NDQsMjc3NTEsMjc5NTAsMjc5NTEsMjc5NTMsMjc5NjEsMjc5NjQsMjc5NjcsMjc5OTEsMjc5OTgsMjc5OTksMjgwMDEsMjgwMDUsMjgwMDcsMjgwMTUsMjgwMTYsMjgwMjgsMjgwMzQsMjgwMzksMjgwNDksMjgwNTAsMjgwNTIsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNzQsMjgwNzYsMjgwODQsMjgwODcsMjgwODksMjgwOTMsMjgwOTUsMjgxMDAsMjgxMDQsMjgxMDYsMjgxMTAsMjgxMTEsMjgxMTgsMjgxMjMsMjgxMjUsMjgxMjcsMjgxMjgsMjgxMzAsMjgxMzMsMjgxMzcsMjgxNDMsMjgxNDQsMjgxNDgsMjgxNTAsMjgxNTYsMjgxNjAsMjgxNjQsMjgxOTAsMjgxOTQsMjgxOTksMjgyMTAsMjgyMTQsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjgsMjgyMjksMjgyMzIsMjgyMzMsMjgyMzUsMjgyMzksMjgyNDEsMjgyNDIsMjgyNDMsMjgyNDQsMjgyNDcsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTgsMjgyNTksMjgyNjQsMjgyNzUsMjgyODMsMjgyODUsMjgzMDEsMjgzMDcsMjgzMTMsMjgzMjAsMjgzMjcsMjgzMzMsMjgzMzQsMjgzMzcsMjgzMzksMjgzNDcsMjgzNTEsMjgzNTIsMjgzNTMsMjgzNTUsMjgzNTksMjgzNjAsMjgzNjIsMjgzNjUsMjgzNjYsMjgzNjcsMjgzOTUsMjgzOTcsMjgzOTgsMjg0MDksMjg0MTEsMjg0MTMsMjg0MjAsMjg0MjQsMjg0MjYsMjg0MjgsMjg0MjksMjg0MzgsMjg0NDAsMjg0NDIsMjg0NDMsMjg0NTQsMjg0NTcsMjg0NTgsMjg0NjMsMjg0NjQsMjg0NjcsMjg0NzAsMjg0NzUsMjg0NzYsMjg0NjEsMjg0OTUsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDksMjg1MTAsMjg1MTMsMjg1MTQsMjg1MjAsMjg1MjQsMjg1NDEsMjg1NDIsMjg1NDcsMjg1NTEsMjg1NTIsMjg1NTUsMjg1NTYsMjg1NTcsMjg1NjAsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjYsMjg1NzAsMjg1NzUsMjg1NzYsMjg1ODEsMjg1ODIsMjg1ODMsMjg1ODQsMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTcsMjg1OTgsMjg2MDQsMjg2MTMsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MzQsMjg2MzgsMjg2NDgsMjg2NDksMjg2NTYsMjg2NjEsMjg2NjUsMjg2NjgsMjg2NjksMjg2NzIsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODUsMjg2OTUsMjg3MDQsMjg3MDcsMjg3MTksMjg3MjQsMjg3MjcsMjg3MjksMjg3MzIsMjg3MzksMjg3NDAsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NTYsMjg3NTcsMjg3NjUsMjg3NjYsMjg3NTAsMjg3NzIsMjg3NzMsMjg3ODAsMjg3ODIsMjg3ODksMjg3OTAsMjg3OTgsMjg4MDEsMjg4MDUsMjg4MDYsMjg4MjAsMjg4MjEsMjg4MjIsMjg4MjMsMjg4MjQsMjg4MjcsMjg4MzYsMjg4NDMsMjg4NDgsMjg4NDksMjg4NTIsMjg4NTUsMjg4NzQsMjg4ODEsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODgsMjg4OTIsMjg5MDAsMjg5MjIsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzksMjg5NDAsMjg5NDMsMjg5NTgsMjg5NjAsMjg5NzEsMjg5NzMsMjg5NzUsMjg5NzYsMjg5NzcsMjg5ODQsMjg5OTMsMjg5OTcsMjg5OTgsMjg5OTksMjkwMDIsMjkwMDMsMjkwMDgsMjkwMTAsMjkwMTUsMjkwMTgsMjkwMjAsMjkwMjIsMjkwMjQsMjkwMzIsMjkwNDksMjkwNTYsMjkwNjEsMjkwNjMsMjkwNjgsMjkwNzQsMjkwODIsMjkwODMsMjkwODgsMjkwOTAsMjkxMDMsMjkxMDQsMjkxMDYsMjkxMDcsMjkxMTQsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjQsMjkxMzEsMjkxMzIsMjkxMzksMjkxNDIsMjkxNDUsMjkxNDYsMjkxNDgsMjkxNzYsMjkxODIsMjkxODQsMjkxOTEsMjkxOTIsMjkxOTMsMjkyMDMsMjkyMDcsMjkyMTAsMjkyMTMsMjkyMTUsMjkyMjAsMjkyMjcsMjkyMzEsMjkyMzYsMjkyNDAsMjkyNDEsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTMsMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjcsMjkyNjksMjkyNzAsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODgsMjkyOTEsMjkyOTQsMjkyOTUsMjkyOTcsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMTEsMjkzMTYsMjkzMjEsMjkzMjUsMjkzMjYsMjkzMzEsMjkzMzksMjkzNTIsMjkzNTcsMjkzNTgsMjkzNjEsMjkzNjQsMjkzNzQsMjkzNzcsMjkzODMsMjkzODUsMjkzODgsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDcsMjk0MTMsMjk0MjcsMjk0MjgsMjk0MzQsMjk0MzUsMjk0MzgsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDcsMjk0NTEsMjk0NTMsMjk0NTgsMjk0NTksMjk0NjQsMjk0NjUsMjk0NzAsMjk0NzQsMjk0NzYsMjk0NzksMjk0ODAsMjk0ODQsMjk0ODksMjk0OTAsMjk0OTMsMjk0OTgsMjk0OTksMjk1MDEsMjk1MDcsMjk1MTcsMjk1MjAsMjk1MjIsMjk1MjYsMjk1MjgsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzYsMjk1NDIsMjk1NDMsMjk1NDUsMjk1NDcsMjk1NDgsMjk1NTAsMjk1NTEsMjk1NTMsMjk1NTksMjk1NjEsMjk1NjQsMjk1NjgsMjk1NjksMjk1NzEsMjk1NzMsMjk1NzQsMjk1ODIsMjk1ODQsMjk1ODcsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTYsMjk1OTgsMjk1OTksMjk2MDAsMjk2MDIsMjk2MDUsMjk2MDYsMjk2MTAsMjk2MTEsMjk2MTMsMjk2MjEsMjk2MjMsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzEsMjk2MzcsMjk2MzgsMjk2NDEsMjk2NDMsMjk2NDQsMjk2NDcsMjk2NTAsMjk2NTEsMjk2NTQsMjk2NTcsMjk2NjEsMjk2NjUsMjk2NjcsMjk2NzAsMjk2NzEsMjk2NzMsMjk2ODQsMjk2ODUsMjk2ODcsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTMsMjk2OTUsMjk2OTYsMjk2OTcsMjk3MDAsMjk3MDMsMjk3MDYsMjk3MTMsMjk3MjIsMjk3MjMsMjk3MzIsMjk3MzQsMjk3MzYsMjk3MzcsMjk3MzgsMjk3MzksMjk3NDAsMjk3NDEsMjk3NDIsMjk3NDMsMjk3NDQsMjk3NDUsMjk3NTMsMjk3NjAsMjk3NjMsMjk3NjQsMjk3NjYsMjk3NjcsMjk3NzEsMjk3NzMsMjk3NzcsMjk3NzgsMjk3ODMsMjk3ODksMjk3OTQsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDMsMjk4MDUsMjk4MDYsMjk4MDksMjk4MTAsMjk4MjQsMjk4MjUsMjk4MjksMjk4MzAsMjk4MzEsMjk4MzMsMjk4MzksMjk4NDAsMjk4NDEsMjk4NDIsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTIsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTksMjk4NjIsMjk4NjQsMjk4NjUsMjk4NjYsMjk4NjcsMjk4NzAsMjk4NzEsMjk4NzMsMjk4NzQsMjk4NzcsMjk4ODEsMjk4ODMsMjk4ODcsMjk4OTYsMjk4OTcsMjk5MDAsMjk5MDQsMjk5MDcsMjk5MTIsMjk5MTQsMjk5MTUsMjk5MTgsMjk5MTksMjk5MjQsMjk5MjgsMjk5MzAsMjk5MzEsMjk5MzUsMjk5NDAsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NTEsMjk5NTgsMjk5NzAsMjk5NzQsMjk5NzUsMjk5ODQsMjk5ODUsMjk5ODgsMjk5OTEsMjk5OTMsMjk5OTQsMjk5OTksMzAwMDYsMzAwMDksMzAwMTMsMzAwMTQsMzAwMTUsMzAwMTYsMzAwMTksMzAwMjMsMzAwMjQsMzAwMzAsMzAwMzIsMzAwMzQsMzAwMzksMzAwNDYsMzAwNDcsMzAwNDksMzAwNjMsMzAwNjUsMzAwNzMsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODEsMzAwODUsMzAwOTYsMzAwOTgsMzAwOTksMzAxMDEsMzAxMDUsMzAxMDgsMzAxMTQsMzAxMTYsMzAxMzIsMzAxMzgsMzAxNDMsMzAxNDQsMzAxNDUsMzAxNDgsMzAxNTAsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjcsMzAxNzIsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODAsMzAxODMsMzAxODgsMzAxOTAsMzAxOTEsMzAxOTMsMzAyMDEsMzAyMDgsMzAyMTAsMzAyMTEsMzAyMTIsMzAyMTUsMzAyMTYsMzAyMTgsMzAyMjAsMzAyMjMsMzAyMjYsMzAyMjcsMzAyMjksMzAyMzAsMzAyMzMsMzAyMzUsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDMsMzAyNDUsMzAyNDYsMzAyNDksMzAyNTMsMzAyNTgsMzAyNTksMzAyNjEsMzAyNjQsMzAyNjUsMzAyNjYsMzAyNjgsMzAyODIsMzAyNzIsMzAyNzMsMzAyNzUsMzAyNzYsMzAyNzcsMzAyODEsMzAyODMsMzAyOTMsMzAyOTcsMzAzMDMsMzAzMDgsMzAzMDksMzAzMTcsMzAzMTgsMzAzMTksMzAzMjEsMzAzMjQsMzAzMzcsMzAzNDEsMzAzNDgsMzAzNDksMzAzNTcsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjcsMzAzNjgsMzAzNzAsMzAzNzEsMzAzNzIsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzgsMzAzODEsMzAzOTcsMzA0MDEsMzA0MDUsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTQsMzA0MjAsMzA0MjUsMzA0MzIsMzA0MzgsMzA0NDAsMzA0NDQsMzA0NDgsMzA0NDksMzA0NTQsMzA0NTcsMzA0NjAsMzA0NjQsMzA0NzAsMzA0NzQsMzA0NzgsMzA0ODIsMzA0ODQsMzA0ODUsMzA0ODcsMzA0ODksMzA0OTAsMzA0OTIsMzA0OTgsMzA1MDQsMzA1MDksMzA1MTAsMzA1MTEsMzA1MTYsMzA1MTcsMzA1MTgsMzA1MjEsMzA1MjUsMzA1MjYsMzA1MzAsMzA1MzMsMzA1MzQsMzA1MzgsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NTAsMzA1NTEsMzA1NTYsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjIsMzA1NjQsMzA1NjcsMzA1NzAsMzA1NzIsMzA1NzYsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODYsMzA1ODksMzA1OTIsMzA1OTYsMzA2MDQsMzA2MDUsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTgsMzA2MjMsMzA2MjYsMzA2MzEsMzA2MzQsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDUsMzA2NTQsMzA2NTksMzA2NjUsMzA2NzMsMzA2NzQsMzA2NzcsMzA2ODEsMzA2ODYsMzA2ODcsMzA2ODgsMzA2OTIsMzA2OTQsMzA2OTgsMzA3MDAsMzA3MDQsMzA3MDUsMzA3MDgsMzA3MTIsMzA3MTUsMzA3MjUsMzA3MjYsMzA3MjksMzA3MzMsMzA3MzQsMzA3MzcsMzA3NDksMzA3NTMsMzA3NTQsMzA3NTUsMzA3NjUsMzA3NjYsMzA3NjgsMzA3NzMsMzA3NzUsMzA3ODcsMzA3ODgsMzA3OTEsMzA3OTIsMzA3OTYsMzA3OTgsMzA4MDIsMzA4MTIsMzA4MTQsMzA4MTYsMzA4MTcsMzA4MTksMzA4MjAsMzA4MjQsMzA4MjYsMzA4MzAsMzA4NDIsMzA4NDYsMzA4NTgsMzA4NjMsMzA4NjgsMzA4NzIsMzA4ODEsMzA4NzcsMzA4NzgsMzA4NzksMzA4ODQsMzA4ODgsMzA4OTIsMzA4OTMsMzA4OTYsMzA4OTcsMzA4OTgsMzA4OTksMzA5MDcsMzA5MDksMzA5MTEsMzA5MTksMzA5MjAsMzA5MjEsMzA5MjQsMzA5MjYsMzA5MzAsMzA5MzEsMzA5MzMsMzA5MzQsMzA5NDgsMzA5MzksMzA5NDMsMzA5NDQsMzA5NDUsMzA5NTAsMzA5NTQsMzA5NjIsMzA5NjMsMzA5NzYsMzA5NjYsMzA5NjcsMzA5NzAsMzA5NzEsMzA5NzUsMzA5ODIsMzA5ODgsMzA5OTIsMzEwMDIsMzEwMDQsMzEwMDYsMzEwMDcsMzEwMDgsMzEwMTMsMzEwMTUsMzEwMTcsMzEwMjEsMzEwMjUsMzEwMjgsMzEwMjksMzEwMzUsMzEwMzcsMzEwMzksMzEwNDQsMzEwNDUsMzEwNDYsMzEwNTAsMzEwNTEsMzEwNTUsMzEwNTcsMzEwNjAsMzEwNjQsMzEwNjcsMzEwNjgsMzEwNzksMzEwODEsMzEwODMsMzEwOTAsMzEwOTcsMzEwOTksMzExMDAsMzExMDIsMzExMTUsMzExMTYsMzExMjEsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjgsMzExMzEsMzExMzIsMzExMzcsMzExNDQsMzExNDUsMzExNDcsMzExNTEsMzExNTMsMzExNTYsMzExNjAsMzExNjMsMzExNzAsMzExNzIsMzExNzUsMzExNzYsMzExNzgsMzExODMsMzExODgsMzExOTAsMzExOTQsMzExOTcsMzExOTgsMzEyMDAsMzEyMDIsMzEyMDUsMzEyMTAsMzEyMTEsMzEyMTMsMzEyMTcsMzEyMjQsMzEyMjgsMzEyMzQsMzEyMzUsMzEyMzksMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDksMzEyNTMsMzEyNTksMzEyNjIsMzEyNjUsMzEyNzEsMzEyNzUsMzEyNzcsMzEyNzksMzEyODAsMzEyODQsMzEyODUsMzEyODgsMzEyODksMzEyOTAsMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDgsMzEzMTcsMzEzMTgsMzEzMjEsMzEzMjQsMzEzMjUsMzEzMjcsMzEzMjgsMzEzMzMsMzEzMzUsMzEzMzgsMzEzNDEsMzEzNDksMzEzNTIsMzEzNTgsMzEzNjAsMzEzNjIsMzEzNjUsMzEzNjYsMzEzNzAsMzEzNzEsMzEzNzYsMzEzNzcsMzEzODAsMzEzOTAsMzEzOTIsMzEzOTUsMzE0MDQsMzE0MTEsMzE0MTMsMzE0MTcsMzE0MTksMzE0MjAsMzE0MzAsMzE0MzMsMzE0MzYsMzE0MzgsMzE0NDEsMzE0NTEsMzE0NjQsMzE0NjUsMzE0NjcsMzE0NjgsMzE0NzMsMzE0NzYsMzE0ODMsMzE0ODUsMzE0ODYsMzE0OTUsMzE1MDgsMzE1MTksMzE1MjMsMzE1MjcsMzE1MjksMzE1MzAsMzE1MzEsMzE1MzMsMzE1MzQsMzE1MzUsMzE1MzYsMzE1MzcsMzE1NDAsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTksMzE1NjYsMzE1NzMsMzE1ODQsMzE1ODgsMzE1OTAsMzE1OTMsMzE1OTQsMzE1OTcsMzE1OTksMzE2MDIsMzE2MDMsMzE2MDcsMzE2MjAsMzE2MjUsMzE2MzAsMzE2MzIsMzE2MzMsMzE2MzgsMzE2NDMsMzE2NDYsMzE2NDgsMzE2NTMsMzE2NjAsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjksMzE2NzAsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2ODIsMzE2ODUsMzE2ODgsMzE2OTAsMzE3MDAsMzE3MDIsMzE3MDMsMzE3MDUsMzE3MDYsMzE3MDcsMzE3MjAsMzE3MjIsMzE3MzAsMzE3MzIsMzE3MzMsMzE3MzYsMzE3MzcsMzE3MzgsMzE3NDAsMzE3NDIsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NTAsMzE3NTMsMzE3NTUsMzE3NTYsMzE3NTgsMzE3NTksMzE3NjksMzE3NzEsMzE3NzYsMzE3ODEsMzE3ODIsMzE3ODQsMzE3ODgsMzE3OTMsMzE3OTUsMzE3OTYsMzE3OTgsMzE4MDEsMzE4MDIsMzE4MTQsMzE4MTgsMzE4MjksMzE4MjUsMzE4MjYsMzE4MjcsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4NDEsMzE4NDMsMzE4NDcsMzE4NDksMzE4NTMsMzE4NTQsMzE4NTYsMzE4NTgsMzE4NjUsMzE4NjgsMzE4NjksMzE4NzgsMzE4NzksMzE4ODcsMzE4OTIsMzE5MDIsMzE5MDQsMzE5MTAsMzE5MjAsMzE5MjYsMzE5MjcsMzE5MzAsMzE5MzEsMzE5MzIsMzE5MzUsMzE5NDAsMzE5NDMsMzE5NDQsMzE5NDUsMzE5NDksMzE5NTEsMzE5NTUsMzE5NTYsMzE5NTcsMzE5NTksMzE5NjEsMzE5NjIsMzE5NjUsMzE5NzQsMzE5NzcsMzE5NzksMzE5ODksMzIwMDMsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTUsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjIsMzIwMjksMzIwMzAsMzIwMzUsMzIwMzgsMzIwNDIsMzIwNDUsMzIwNDksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjQsMzIwNjUsMzIwNzEsMzIwNzIsMzIwNzcsMzIwODEsMzIwODMsMzIwODcsMzIwODksMzIwOTAsMzIwOTIsMzIwOTMsMzIxMDEsMzIxMDMsMzIxMDYsMzIxMTIsMzIxMjAsMzIxMjIsMzIxMjMsMzIxMjcsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzMsMzIxMzQsMzIxMzYsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDUsMzIxNTAsMzIxNTEsMzIxNTcsMzIxNTgsMzIxNjYsMzIxNjcsMzIxNzAsMzIxNzksMzIxODIsMzIxODMsMzIxODUsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMTUsMzIyMTcsMzIyNTYsMzIyMjYsMzIyMjksMzIyMzAsMzIyMzQsMzIyMzUsMzIyMzcsMzIyNDEsMzIyNDUsMzIyNDYsMzIyNDksMzIyNTAsMzIyNjQsMzIyNzIsMzIyNzMsMzIyNzcsMzIyNzksMzIyODQsMzIyODUsMzIyODgsMzIyOTUsMzIyOTYsMzIzMDAsMzIzMDEsMzIzMDMsMzIzMDcsMzIzMTAsMzIzMTksMzIzMjQsMzIzMjUsMzIzMjcsMzIzMzQsMzIzMzYsMzIzMzgsMzIzNDQsMzIzNTEsMzIzNTMsMzIzNTQsMzIzNTcsMzIzNjMsMzIzNjYsMzIzNjcsMzIzNzEsMzIzNzYsMzIzODIsMzIzODUsMzIzOTAsMzIzOTEsMzIzOTQsMzIzOTcsMzI0MDEsMzI0MDUsMzI0MDgsMzI0MTAsMzI0MTMsMzI0MTQsMzI1NzIsMzI1NzEsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzksMzI1ODAsMzI1ODMsMzI1OTEsMzI1OTQsMzI1OTUsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDksMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MjEsMzI2MjUsMzI2MzcsMzI2MzgsMzI2MzksMzI2NDAsMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NjIsMzI2NjMsMzI2NjgsMzI2NzMsMzI2NzQsMzI2NzgsMzI2ODIsMzI2ODUsMzI2OTIsMzI3MDAsMzI3MDMsMzI3MDQsMzI3MDcsMzI3MTIsMzI3MTgsMzI3MTksMzI3MzEsMzI3MzUsMzI3MzksMzI3NDEsMzI3NDQsMzI3NDgsMzI3NTAsMzI3NTEsMzI3NTQsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzUsMzI3NzYsMzI3NzgsMzI3ODEsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3ODgsMzI3OTAsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDAsMzI4MDQsMzI4MDYsMzI4MTIsMzI4MTQsMzI4MTYsMzI4MjAsMzI4MjEsMzI4MjMsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzYsMzI4NjQsMzI4NjgsMzI4NzAsMzI4NzcsMzI4ODEsMzI4ODUsMzI4OTcsMzI5MDQsMzI5MTAsMzI5MjQsMzI5MjYsMzI5MzQsMzI5MzUsMzI5MzksMzI5NTIsMzI5NTMsMzI5NjgsMzI5NzMsMzI5NzUsMzI5NzgsMzI5ODAsMzI5ODEsMzI5ODMsMzI5ODQsMzI5OTIsMzMwMDUsMzMwMDYsMzMwMDgsMzMwMTAsMzMwMTEsMzMwMTQsMzMwMTcsMzMwMTgsMzMwMjIsMzMwMjcsMzMwMzUsMzMwNDYsMzMwNDcsMzMwNDgsMzMwNTIsMzMwNTQsMzMwNTYsMzMwNjAsMzMwNjMsMzMwNjgsMzMwNzIsMzMwNzcsMzMwODIsMzMwODQsMzMwOTMsMzMwOTUsMzMwOTgsMzMxMDAsMzMxMDYsMzMxMTEsMzMxMjAsMzMxMjEsMzMxMjcsMzMxMjgsMzMxMjksMzMxMzMsMzMxMzUsMzMxNDMsMzMxNTMsMzMxNjgsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNjMsMzMxNjYsMzMxNzQsMzMxNzYsMzMxNzksMzMxODIsMzMxODYsMzMxOTgsMzMyMDIsMzMyMDQsMzMyMTEsMzMyMjcsMzMyMTksMzMyMjEsMzMyMjYsMzMyMzAsMzMyMzEsMzMyMzcsMzMyMzksMzMyNDMsMzMyNDUsMzMyNDYsMzMyNDksMzMyNTIsMzMyNTksMzMyNjAsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzIsMzMyNzMsMzMyNzcsMzMyNzksMzMyODAsMzMyODMsMzMyOTUsMzMyOTksMzMzMDAsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTMsMzMzMTQsMzMzMjAsMzMzMzAsMzMzMzIsMzMzMzgsMzMzNDcsMzMzNDgsMzMzNDksMzMzNTAsMzMzNTUsMzMzNTgsMzMzNTksMzMzNjEsMzMzNjYsMzMzNzIsMzMzNzYsMzMzNzksMzMzODMsMzMzODksMzMzOTYsMzM0MDMsMzM0MDUsMzM0MDcsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTIsMzM0MTUsMzM0MTcsMzM0MTgsMzM0MjIsMzM0MjUsMzM0MjgsMzM0MzAsMzM0MzIsMzM0MzQsMzM0MzUsMzM0NDAsMzM0NDEsMzM0NDMsMzM0NDQsMzM0NDcsMzM0NDgsMzM0NDksMzM0NTAsMzM0NTQsMzM0NTYsMzM0NTgsMzM0NjAsMzM0NjMsMzM0NjYsMzM0NjgsMzM0NzAsMzM0NzEsMzM0NzgsMzM0ODgsMzM0OTMsMzM0OTgsMzM1MDQsMzM1MDYsMzM1MDgsMzM1MTIsMzM1MTQsMzM1MTcsMzM1MTksMzM1MjYsMzM1MjcsMzM1MzMsMzM1MzQsMzM1MzYsMzM1MzcsMzM1NDMsMzM1NDQsMzM1NDYsMzM1NDcsMzM2MjAsMzM1NjMsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjksMzM1NzAsMzM1ODAsMzM1ODEsMzM1ODIsMzM1ODQsMzM1ODcsMzM1OTEsMzM1OTQsMzM1OTYsMzM1OTcsMzM2MDIsMzM2MDMsMzM2MDQsMzM2MDcsMzM2MTMsMzM2MTQsMzM2MTcsMzM2MjEsMzM2MjIsMzM2MjMsMzM2NDgsMzM2NTYsMzM2NjEsMzM2NjMsMzM2NjQsMzM2NjYsMzM2NjgsMzM2NzAsMzM2NzcsMzM2ODIsMzM2ODQsMzM2ODUsMzM2ODgsMzM2ODksMzM2OTEsMzM2OTIsMzM2OTMsMzM3MDIsMzM3MDMsMzM3MDUsMzM3MDgsMzM3MjYsMzM3MjcsMzM3MjgsMzM3MzUsMzM3MzcsMzM3NDMsMzM3NDQsMzM3NDUsMzM3NDgsMzM3NTcsMzM2MTksMzM3NjgsMzM3NzAsMzM3ODIsMzM3ODQsMzM3ODUsMzM3ODgsMzM3OTMsMzM3OTgsMzM4MDIsMzM4MDcsMzM4MDksMzM4MTMsMzM4MTcsMzM3MDksMzM4MzksMzM4NDksMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjYsMzM4NjksMzM4NzEsMzM4NzMsMzM4NzQsMzM4NzgsMzM4ODAsMzM4ODEsMzM4ODIsMzM4ODQsMzM4ODgsMzM4OTIsMzM4OTMsMzM4OTUsMzM4OTgsMzM5MDQsMzM5MDcsMzM5MDgsMzM5MTAsMzM5MTIsMzM5MTYsMzM5MTcsMzM5MjEsMzM5MjUsMzM5MzgsMzM5MzksMzM5NDEsMzM5NTAsMzM5NTgsMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjcsMzM5NjksMzM5NzIsMzM5NzgsMzM5ODEsMzM5ODIsMzM5ODQsMzM5ODYsMzM5OTEsMzM5OTIsMzM5OTYsMzM5OTksMzQwMDMsMzQwMTIsMzQwMjMsMzQwMjYsMzQwMzEsMzQwMzIsMzQwMzMsMzQwMzQsMzQwMzksMzQwOTgsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNTAsMzQwNTEsMzQwNTUsMzQwNjAsMzQwNjIsMzQwNjQsMzQwNzYsMzQwNzgsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODcsMzQwOTAsMzQwOTEsMzQwOTUsMzQwOTksMzQxMDAsMzQxMDIsMzQxMTEsMzQxMTgsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzQsMzQxMzcsMzQxNDAsMzQxNDEsMzQxNDIsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDgsMzQxNTUsMzQxNTksMzQxNjksMzQxNzAsMzQxNzEsMzQxNzMsMzQxNzUsMzQxNzcsMzQxODEsMzQxODIsMzQxODUsMzQxODcsMzQxODgsMzQxOTEsMzQxOTUsMzQyMDAsMzQyMDUsMzQyMDcsMzQyMDgsMzQyMTAsMzQyMTMsMzQyMTUsMzQyMjgsMzQyMzAsMzQyMzEsMzQyMzIsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDIsMzQyNDcsMzQyNTAsMzQyNTEsMzQyNTQsMzQyMjEsMzQyNjQsMzQyNjYsMzQyNzEsMzQyNzIsMzQyNzgsMzQyODAsMzQyODUsMzQyOTEsMzQyOTQsMzQzMDAsMzQzMDMsMzQzMDQsMzQzMDgsMzQzMDksMzQzMTcsMzQzMTgsMzQzMjAsMzQzMjEsMzQzMjIsMzQzMjgsMzQzMjksMzQzMzEsMzQzMzQsMzQzMzcsMzQzNDMsMzQzNDUsMzQzNTgsMzQzNjAsMzQzNjIsMzQzNjQsMzQzNjUsMzQzNjgsMzQzNzAsMzQzNzQsMzQzODYsMzQzODcsMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTcsMzQ0MDAsMzQ0MDEsMzQ0MDIsMzQ0MDMsMzQ0MDQsMzQ0MDksMzQ0MTIsMzQ0MTUsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjYsMzQ0NDUsMzQ0NDksMzQ0NTQsMzQ0NTYsMzQ0NTgsMzQ0NjAsMzQ0NjUsMzQ0NzAsMzQ0NzEsMzQ0NzIsMzQ0NzcsMzQ0ODEsMzQ0ODMsMzQ0ODQsMzQ0ODUsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTUsMzQ0OTYsMzQ0OTcsMzQ0OTksMzQ1MDEsMzQ1MTMsMzQ1MTQsMzQ1MTcsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjgsMzQ1MzEsMzQ1MzMsMzQ1MzUsMzQ0NDAsMzQ1NTQsMzQ1NTYsMzQ1NTcsMzQ1NjQsMzQ1NjUsMzQ1NjcsMzQ1NzEsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzksMzQ1ODAsMzQ1ODUsMzQ1OTAsMzQ1OTEsMzQ1OTMsMzQ1OTUsMzQ2MDAsMzQ2MDYsMzQ2MDcsMzQ2MDksMzQ2MTAsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjIsMzQ2MjQsMzQ2MjcsMzQ2MjksMzQ2MzcsMzQ2NDgsMzQ2NTMsMzQ2NTcsMzQ2NjAsMzQ2NjEsMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2ODMsMzQ2OTEsMzQ2OTIsMzQ2OTMsMzQ2OTQsMzQ2OTUsMzQ2OTYsMzQ2OTcsMzQ2OTksMzQ3MDAsMzQ3MDQsMzQ3MDcsMzQ3MDksMzQ3MTEsMzQ3MTIsMzQ3MTMsMzQ3MTgsMzQ3MjAsMzQ3MjMsMzQ3MjcsMzQ3MzIsMzQ3MzMsMzQ3MzQsMzQ3MzcsMzQ3NDEsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NjAsMzQ3NjEsMzQ3NjIsMzQ3NjYsMzQ3NzMsMzQ3NzQsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODMsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTQsMzQ3OTUsMzQ3OTcsMzQ4MDEsMzQ4MDMsMzQ4MDgsMzQ4MTAsMzQ4MTUsMzQ4MTcsMzQ4MTksMzQ4MjIsMzQ4MjUsMzQ4MjYsMzQ4MjcsMzQ4MzIsMzQ4NDEsMzQ4MzQsMzQ4MzUsMzQ4MzYsMzQ4NDAsMzQ4NDIsMzQ4NDMsMzQ4NDQsMzQ4NDYsMzQ4NDcsMzQ4NTYsMzQ4NjEsMzQ4NjIsMzQ4NjQsMzQ4NjYsMzQ4NjksMzQ4NzQsMzQ4NzYsMzQ4ODEsMzQ4ODMsMzQ4ODUsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTcsMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDgsMzQ5MTEsMzQ5MTIsMzQ5MTYsMzQ5MjEsMzQ5MjksMzQ5MzcsMzQ5MzksMzQ5NDQsMzQ5NjgsMzQ5NzAsMzQ5NzEsMzQ5NzIsMzQ5NzUsMzQ5NzYsMzQ5ODQsMzQ5ODYsMzUwMDIsMzUwMDUsMzUwMDYsMzUwMDgsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjIsMzUwMjUsMzUwMjYsMzUwMjcsMzUwMzUsMzUwMzgsMzUwNDcsMzUwNTUsMzUwNTYsMzUwNTcsMzUwNjEsMzUwNjMsMzUwNzMsMzUwNzgsMzUwODUsMzUwODYsMzUwODcsMzUwOTMsMzUwOTQsMzUwOTYsMzUwOTcsMzUwOTgsMzUxMDAsMzUxMDQsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMjAsMzUxMjEsMzUxMjIsMzUxMjUsMzUxMjksMzUxMzAsMzUxMzQsMzUxMzYsMzUxMzgsMzUxNDEsMzUxNDIsMzUxNDUsMzUxNTEsMzUxNTQsMzUxNTksMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzksMzUxODIsMzUxODQsMzUxODcsMzUxODksMzUxOTQsMzUxOTUsMzUxOTYsMzUxOTcsMzUyMDksMzUyMTMsMzUyMTYsMzUyMjAsMzUyMjEsMzUyMjcsMzUyMjgsMzUyMzEsMzUyMzIsMzUyMzcsMzUyNDgsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNjAsMzUyODQsMzUyODUsMzUyODYsMzUyODcsMzUyODgsMzUzMDEsMzUzMDUsMzUzMDcsMzUzMDksMzUzMTMsMzUzMTUsMzUzMTgsMzUzMjEsMzUzMjUsMzUzMjcsMzUzMzIsMzUzMzMsMzUzMzUsMzUzNDMsMzUzNDUsMzUzNDYsMzUzNDgsMzUzNDksMzUzNTgsMzUzNjAsMzUzNjIsMzUzNjQsMzUzNjYsMzUzNzEsMzUzNzIsMzUzNzUsMzUzODEsMzUzODMsMzUzODksMzUzOTAsMzUzOTIsMzUzOTUsMzUzOTcsMzUzOTksMzU0MDEsMzU0MDUsMzU0MDYsMzU0MTEsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MjAsMzU0MjEsMzU0MjUsMzU0MjksMzU0MzEsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDksMzU0NTAsMzU0NTEsMzU0NTQsMzU0NTUsMzU0NTYsMzU0NTksMzU0NjIsMzU0NjcsMzU0NzEsMzU0NzIsMzU0NzQsMzU0NzgsMzU0NzksMzU0ODEsMzU0ODcsMzU0OTUsMzU0OTcsMzU1MDIsMzU1MDMsMzU1MDcsMzU1MTAsMzU1MTEsMzU1MTUsMzU1MTgsMzU1MjMsMzU1MjYsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzcsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDMsMzU1NDksMzU1NTEsMzU1NjQsMzU1NjgsMzU1NzIsMzU1NzMsMzU1NzQsMzU1ODAsMzU1ODMsMzU1ODksMzU1OTAsMzU1OTUsMzU2MDEsMzU2MTIsMzU2MTQsMzU2MTUsMzU1OTQsMzU2MjksMzU2MzIsMzU2MzksMzU2NDQsMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMzU2NTQsMzU2NTYsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NzMsMzU2NjEsMzU2NzgsMzU2ODMsMzU2OTMsMzU3MDIsMzU3MDQsMzU3MDUsMzU3MDgsMzU3MTAsMzU3MTMsMzU3MTYsMzU3MTcsMzU3MjMsMzU3MjUsMzU3MjcsMzU3MzIsMzU3MzMsMzU3NDAsMzU3NDIsMzU3NDMsMzU4OTYsMzU4OTcsMzU5MDEsMzU5MDIsMzU5MDksMzU5MTEsMzU5MTMsMzU5MTUsMzU5MTksMzU5MjEsMzU5MjMsMzU5MjQsMzU5MjcsMzU5MjgsMzU5MzEsMzU5MzMsMzU5MjksMzU5MzksMzU5NDAsMzU5NDIsMzU5NDQsMzU5NDUsMzU5NDksMzU5NTUsMzU5NTcsMzU5NTgsMzU5NjMsMzU5NjYsMzU5NzQsMzU5NzUsMzU5NzksMzU5ODQsMzU5ODYsMzU5ODcsMzU5OTMsMzU5OTUsMzU5OTYsMzYwMDQsMzYwMjUsMzYwMjYsMzYwMzcsMzYwMzgsMzYwNDEsMzYwNDMsMzYwNDcsMzYwNTQsMzYwNTMsMzYwNTcsMzYwNjEsMzYwNjUsMzYwNzIsMzYwNzYsMzYwNzksMzYwODAsMzYwODIsMzYwODUsMzYwODcsMzYwODgsMzYwOTQsMzYwOTUsMzYwOTcsMzYwOTksMzYxMDUsMzYxMTQsMzYxMTksMzYxMjMsMzYxOTcsMzYyMDEsMzYyMDQsMzYyMDYsMzYyMjMsMzYyMjYsMzYyMjgsMzYyMzIsMzYyMzcsMzYyNDAsMzYyNDEsMzYyNDUsMzYyNTQsMzYyNTUsMzYyNTYsMzYyNjIsMzYyNjcsMzYyNjgsMzYyNzEsMzYyNzQsMzYyNzcsMzYyNzksMzYyODEsMzYyODMsMzYyODgsMzYyOTMsMzYyOTQsMzYyOTUsMzYyOTYsMzYyOTgsMzYzMDIsMzYzMDUsMzYzMDgsMzYzMDksMzYzMTEsMzYzMTMsMzYzMjQsMzYzMjUsMzYzMjcsMzYzMzIsMzYzMzYsMzYyODQsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDksMzYzNTMsMzYzNTYsMzYzNTcsMzYzNTgsMzYzNjMsMzYzNjksMzYzNzIsMzYzNzQsMzYzODQsMzYzODUsMzYzODYsMzYzODcsMzYzOTAsMzYzOTEsMzY0MDEsMzY0MDMsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MDksMzY0MTMsMzY0MTYsMzY0MTcsMzY0MjcsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzYsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDksMzY0NTAsMzY0NTcsMzY0NjAsMzY0NjEsMzY0NjMsMzY0NjQsMzY0NjUsMzY0NzMsMzY0NzQsMzY0NzUsMzY0ODIsMzY0ODMsMzY0ODksMzY0OTYsMzY0OTgsMzY1MDEsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTAsMzY1MTQsMzY1MTksMzY1MjEsMzY1MjUsMzY1MjYsMzY1MzEsMzY1MzMsMzY1MzgsMzY1MzksMzY1NDQsMzY1NDUsMzY1NDcsMzY1NDgsMzY1NTEsMzY1NTksMzY1NjEsMzY1NjQsMzY1NzIsMzY1ODQsMzY1OTAsMzY1OTIsMzY1OTMsMzY1OTksMzY2MDEsMzY2MDIsMzY1ODksMzY2MDgsMzY2MTAsMzY2MTUsMzY2MTYsMzY2MjMsMzY2MjQsMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzgsMzY2NDAsMzY2NDEsMzY2NDMsMzY2NDUsMzY2NDcsMzY2NDgsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjYsMzY2NzIsMzY2NzMsMzY2NzUsMzY2NzksMzY2ODcsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTYsMzY3MDEsMzY3MDIsMzY3MDksMzY3NjUsMzY3NjgsMzY3NjksMzY3NzIsMzY3NzMsMzY3NzQsMzY3ODksMzY3OTAsMzY3OTIsMzY3OTgsMzY4MDAsMzY4MDEsMzY4MDYsMzY4MTAsMzY4MTEsMzY4MTMsMzY4MTYsMzY4MTgsMzY4MTksMzY4MjEsMzY4MzIsMzY4MzUsMzY4MzYsMzY4NDAsMzY4NDYsMzY4NDksMzY4NTMsMzY4NTQsMzY4NTksMzY4NjIsMzY4NjYsMzY4NjgsMzY4NzIsMzY4NzYsMzY4ODgsMzY4OTEsMzY5MDQsMzY5MDUsMzY5MTEsMzY5MDYsMzY5MDgsMzY5MDksMzY5MTUsMzY5MTYsMzY5MTksMzY5MjcsMzY5MzEsMzY5MzIsMzY5NDAsMzY5NTUsMzY5NTcsMzY5NjIsMzY5NjYsMzY5NjcsMzY5NzIsMzY5NzYsMzY5ODAsMzY5ODUsMzY5OTcsMzcwMDAsMzcwMDMsMzcwMDQsMzcwMDYsMzcwMDgsMzcwMTMsMzcwMTUsMzcwMTYsMzcwMTcsMzcwMTksMzcwMjQsMzcwMjUsMzcwMjYsMzcwMjksMzcwNDAsMzcwNDIsMzcwNDMsMzcwNDQsMzcwNDYsMzcwNTMsMzcwNjgsMzcwNTQsMzcwNTksMzcwNjAsMzcwNjEsMzcwNjMsMzcwNjQsMzcwNzcsMzcwNzksMzcwODAsMzcwODEsMzcwODQsMzcwODUsMzcwODcsMzcwOTMsMzcwNzQsMzcxMTAsMzcwOTksMzcxMDMsMzcxMDQsMzcxMDgsMzcxMTgsMzcxMTksMzcxMjAsMzcxMjQsMzcxMjUsMzcxMjYsMzcxMjgsMzcxMzMsMzcxMzYsMzcxNDAsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDgsMzcxNTAsMzcxNTIsMzcxNTcsMzcxNTQsMzcxNTUsMzcxNTksMzcxNjEsMzcxNjYsMzcxNjcsMzcxNjksMzcxNzIsMzcxNzQsMzcxNzUsMzcxNzcsMzcxNzgsMzcxODAsMzcxODEsMzcxODcsMzcxOTEsMzcxOTIsMzcxOTksMzcyMDMsMzcyMDcsMzcyMDksMzcyMTAsMzcyMTEsMzcyMTcsMzcyMjAsMzcyMjMsMzcyMjksMzcyMzYsMzcyNDEsMzcyNDIsMzcyNDMsMzcyNDksMzcyNTEsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNjIsMzcyNjUsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzIsMzcyNzgsMzcyODEsMzcyODYsMzcyODgsMzcyOTIsMzcyOTMsMzcyOTQsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDcsMzczMDgsMzczMDksMzczMTEsMzczMTQsMzczMTUsMzczMTcsMzczMzEsMzczMzIsMzczMzUsMzczMzcsMzczMzgsMzczNDIsMzczNDgsMzczNDksMzczNTMsMzczNTQsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjcsMzczNjksMzczNzEsMzczNzMsMzczNzYsMzczNzcsMzczODAsMzczODEsMzczODIsMzczODMsMzczODUsMzczODYsMzczODgsMzczOTIsMzczOTQsMzczOTUsMzczOTgsMzc0MDAsMzc0MDQsMzc0MDUsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTYsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjcsMzc0MjksMzc0MzAsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzYsMzc0MzgsMzc0NDAsMzc0NDIsMzc0NDMsMzc0NDYsMzc0NDcsMzc0NTAsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTcsMzc0NjQsMzc0NjUsMzc0NjgsMzc0NjksMzc0NzIsMzc0NzMsMzc0NzcsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODYsMzc0ODcsMzc0ODgsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDMsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTcsMzc1MTgsMzc1MjIsMzc1MjcsMzc1MjksMzc1MzUsMzc1MzYsMzc1NDAsMzc1NDEsMzc1NDMsMzc1NDQsMzc1NDcsMzc1NTEsMzc1NTQsMzc1NTgsMzc1NjAsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzYsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODQsMzc1ODcsMzc1ODksMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTYsMzc1OTcsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDMsMzc2MDUsMzc2MDcsMzc2MDgsMzc2MTIsMzc2MTQsMzc2MTYsMzc2MjUsMzc2MjcsMzc2MzEsMzc2MzIsMzc2MzQsMzc2NDAsMzc2NDUsMzc2NDksMzc2NTIsMzc2NTMsMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjUsMzc2NjgsMzc2NjksMzc2NzEsMzc2NzMsMzc2NzQsMzc2ODMsMzc2ODQsMzc2ODYsMzc2ODcsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTcsMzc3MTksMzc3MjAsMzc3MjIsMzc3MjYsMzc3MzIsMzc3MzMsMzc3MzUsMzc3MzcsMzc3MzgsMzc3NDEsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDcsMzc3NDgsMzc3NTAsMzc3NTQsMzc3NTcsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjgsMzc3NzAsMzc3NzEsMzc3NzMsMzc3NzUsMzc3NzgsMzc3ODEsMzc3ODQsMzc3ODcsMzc3OTAsMzc3OTMsMzc3OTUsMzc3OTYsMzc3OTgsMzc4MDAsMzc4MDMsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTgsMzc4MDEsMzc4MjUsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzMsMzc4MzQsMzc4MzUsMzc4MzYsMzc4MzcsMzc4NDMsMzc4NDksMzc4NTIsMzc4NTQsMzc4NTUsMzc4NTgsMzc4NjIsMzc4NjMsMzc4ODEsMzc4NzksMzc4ODAsMzc4ODIsMzc4ODMsMzc4ODUsMzc4ODksMzc4OTAsMzc4OTIsMzc4OTYsMzc4OTcsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTksMzc5MzQsMzc5MzUsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDcsMzc5NTEsMzc5NDksMzc5NTUsMzc5NTcsMzc5NjAsMzc5NjIsMzc5NjQsMzc5NzMsMzc5NzcsMzc5ODAsMzc5ODMsMzc5ODUsMzc5ODcsMzc5OTIsMzc5OTUsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDEsMzgwMDIsMzgwMjAsMzgwMTksMzgyNjQsMzgyNjUsMzgyNzAsMzgyNzYsMzgyODAsMzgyODQsMzgyODUsMzgyODYsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDUsMzgzMTAsMzgzMTMsMzgzMTUsMzgzMTYsMzgzMjQsMzgzMjYsMzgzMzAsMzgzMzMsMzgzMzUsMzgzNDIsMzgzNDQsMzgzNDUsMzgzNDcsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNjEsMzgzNjIsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNzIsMzgzNzQsMzg0MjksMzg0MzAsMzg0MzQsMzg0MzYsMzg0MzcsMzg0MzgsMzg0NDQsMzg0NDksMzg0NTEsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjAsMzg0NjEsMzg0NjUsMzg0ODIsMzg0ODQsMzg0ODYsMzg0ODcsMzg0ODgsMzg0OTcsMzg1MTAsMzg1MTYsMzg1MjMsMzg1MjQsMzg1MjYsMzg1MjcsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzcsMzg1NDUsMzg1NTAsMzg1NTQsMzg1NTcsMzg1NTksMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjksMzg1NzQsMzg1NzUsMzg1NzksMzg1ODYsMzg2MDIsMzg2MTAsMjM5ODYsMzg2MTYsMzg2MTgsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MzMsMzg2MzksMzg2NDEsMzg2NTAsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjUsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTYsMzg3MDUsMzg3MDcsMzg3MjEsMzg3MjMsMzg3MzAsMzg3MzQsMzg3MzUsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDcsMzg3NTUsMzg3NTksMzg3NjIsMzg3NjYsMzg3NzEsMzg3NzQsMzg3NzUsMzg3NzYsMzg3NzksMzg3ODEsMzg3ODMsMzg3ODQsMzg3OTMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTQsMzg4MTUsMzg4MTgsMzg4MjgsMzg4MzAsMzg4MzMsMzg4MzQsMzg4MzcsMzg4MzgsMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDQsMzg4NDYsMzg4NDcsMzg4NDksMzg4NTIsMzg4NTMsMzg4NTUsMzg4NTcsMzg4NTgsMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjQsMzg4NjUsMzg4NjgsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzcsMzg4NzgsMzg4ODAsMzg4NzUsMzg4ODEsMzg4ODQsMzg4OTUsMzg4OTcsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDYsMzg5MTksMzg5MjIsMzg5MzcsMzg5MjUsMzg5MjYsMzg5MzIsMzg5MzQsMzg5NDAsMzg5NDIsMzg5NDQsMzg5NDcsMzg5NTAsMzg5NTUsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjIsMzg5NjMsMzg5NjUsMzg5NDksMzg5NzQsMzg5ODAsMzg5ODMsMzg5ODYsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTgsMzg5OTksMzkwMDEsMzkwMDIsMzkwMTAsMzkwMTEsMzkwMTMsMzkwMTQsMzkwMTgsMzkwMjAsMzkwODMsMzkwODUsMzkwODYsMzkwODgsMzkwOTIsMzkwOTUsMzkwOTYsMzkwOTgsMzkwOTksMzkxMDMsMzkxMDYsMzkxMDksMzkxMTIsMzkxMTYsMzkxMzcsMzkxMzksMzkxNDEsMzkxNDIsMzkxNDMsMzkxNDYsMzkxNTUsMzkxNTgsMzkxNzAsMzkxNzUsMzkxNzYsMzkxODUsMzkxODksMzkxOTAsMzkxOTEsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTksMzkyMDIsMzkyMDYsMzkyMDcsMzkyMTEsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMzIsMzkyMzMsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDUsMzkyNDYsMzkyNTIsMzkyNTYsMzkyNTcsMzkyNTksMzkyNjAsMzkyNjIsMzkyNjMsMzkyNjQsMzkzMjMsMzkzMjUsMzkzMjcsMzkzMzQsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDksMzkzNTMsMzkzNTQsMzkzNTcsMzkzNTksMzkzNjMsMzkzNjksMzkzNzksMzkzODAsMzkzODUsMzkzODYsMzkzODgsMzkzOTAsMzkzOTksMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDgsMzk0MTIsMzk0MTMsMzk0MTcsMzk0MjEsMzk0MjIsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MzUsMzk0MzYsMzk0NDAsMzk0NDEsMzk0NDYsMzk0NTQsMzk0NTYsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjMsMzk0NjksMzk0NzAsMzk0NzUsMzk0NzcsMzk0NzgsMzk0ODAsMzk0OTUsMzk0ODksMzk0OTIsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDIsMzk1MDUsMzk1MDgsMzk1MTAsMzk1MTcsMzk1OTQsMzk1OTYsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDQsMzk2MDUsMzk2MDYsMzk2MDksMzk2MTEsMzk2MTQsMzk2MTUsMzk2MTcsMzk2MTksMzk2MjIsMzk2MjQsMzk2MzAsMzk2MzIsMzk2MzQsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDMsMzk2NDQsMzk2NDgsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTcsMzk2NjAsMzk2NjYsMzk2NjcsMzk2NjksMzk2NzMsMzk2NzQsMzk2NzcsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODMsMzk2ODQsMzk2ODUsMzk2ODgsMzk2ODksMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTgsMzk3MDIsMzk3MDUsMzk3MDcsMzk3MDgsMzk3MTIsMzk3MTgsMzk3MjMsMzk3MjUsMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzUsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NTIsMzk3NTUsMzk3NTYsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NzEsMzk3NzQsMzk3NzcsMzk3NzksMzk3ODEsMzk3ODIsMzk3ODQsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTUsMzk3OTcsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDcsMzk4MDgsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjEsMzk4MjMsMzk4MjQsMzk4MjgsMzk4MzQsMzk4MzcsMzk4MzgsMzk4NDYsMzk4NDcsMzk4NDksMzk4NTIsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NjMsMzk4NjQsMzk4NjcsMzk4NjgsMzk4NzAsMzk4NzEsMzk4NzMsMzk4NzksMzk4ODAsMzk4ODYsMzk4ODgsMzk4OTUsMzk4OTYsMzk5MDEsMzk5MDMsMzk5MDksMzk5MTEsMzk5MTQsMzk5MTUsMzk5MTksMzk5MjMsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzMsMzk5MzUsMzk5MzYsMzk5MzgsMzk5NDcsMzk5NTEsMzk5NTMsMzk5NTgsMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjQsMzk5NjYsMzk5NzAsMzk5NzEsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5ODUsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTcsNDAwMDEsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDksNDAwMTAsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTksNDAwMjAsNDAwMjIsNDAwMjQsNDAwMjcsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzUsNDAwNDEsNDAwNDIsNDAwMjgsNDAwNDMsNDAwNDAsNDAwNDYsNDAwNDgsNDAwNTAsNDAwNTMsNDAwNTUsNDAwNTksNDAxNjYsNDAxNzgsNDAxODMsNDAxODUsNDAyMDMsNDAxOTQsNDAyMDksNDAyMTUsNDAyMTYsNDAyMjAsNDAyMjEsNDAyMjIsNDAyMzksNDAyNDAsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNTAsNDAyNTIsNDAyNjEsNDAyNTMsNDAyNTgsNDAyNTksNDAyNjMsNDAyNjYsNDAyNzUsNDAyNzYsNDAyODcsNDAyOTEsNDAyOTAsNDAyOTMsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDQsNDAzMTAsNDAzMTEsNDAzMTUsNDAzMTYsNDAzMTgsNDAzMjMsNDAzMjQsNDAzMjYsNDAzMzAsNDAzMzMsNDAzMzQsNDAzMzgsNDAzMzksNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNTMsNDAzNjIsNDAzNjQsNDAzNjYsNDAzNjksNDAzNzMsNDAzNzcsNDAzODAsNDAzODMsNDAzODcsNDAzOTEsNDAzOTMsNDAzOTQsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MTAsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MjEsNDA0MjMsNDA0MjUsNDA0MjcsNDA0MzAsNDA0MzIsNDA0MzUsNDA0MzYsNDA0NDYsNDA0NTgsNDA0NTAsNDA0NTUsNDA0NjIsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjksNDA0NzAsNDA0NzMsNDA0NzYsNDA0NzcsNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzYsNDA1NzgsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODMsNDA1OTAsNDA1OTEsNDA1OTgsNDA2MDAsNDA2MDMsNDA2MDYsNDA2MTIsNDA2MTYsNDA2MjAsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjcsNDA2MjgsNDA2MjksNDA2NDYsNDA2NDgsNDA2NTEsNDA2NjEsNDA2NzEsNDA2NzYsNDA2NzksNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTMsNDA2OTYsNDA3MDMsNDA3MDYsNDA3MDcsNDA3MTMsNDA3MTksNDA3MjAsNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjYsNDA3MjcsNDA3MjksNDA3MzAsNDA3MzEsNDA3MzUsNDA3MzgsNDA3NDIsNDA3NDYsNDA3NDcsNDA3NTEsNDA3NTMsNDA3NTQsNDA3NTYsNDA3NTksNDA3NjEsNDA3NjIsNDA3NjQsNDA3NjUsNDA3NjcsNDA3NjksNDA3NzEsNDA3NzIsNDA3NzMsNDA3NzQsNDA3NzUsNDA3ODcsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTQsNDA3OTcsNDA3OTgsNDA4MDgsNDA4MDksNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTksNDA4MjEsNDA4MjYsNDA4MjksNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTIsNDA4NTQsNDA4NTUsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxcbiAgXCJpYm04NjZcIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsOTYxNyw5NjE4LDk2MTksOTQ3NCw5NTA4LDk1NjksOTU3MCw5NTU4LDk1NTcsOTU3MSw5NTUzLDk1NTksOTU2NSw5NTY0LDk1NjMsOTQ4OCw5NDkyLDk1MjQsOTUxNiw5NTAwLDk0NzIsOTUzMiw5NTY2LDk1NjcsOTU2Miw5NTU2LDk1NzcsOTU3NCw5NTY4LDk1NTIsOTU4MCw5NTc1LDk1NzYsOTU3Miw5NTczLDk1NjEsOTU2MCw5NTU0LDk1NTUsOTU3OSw5NTc4LDk0OTYsOTQ4NCw5NjA4LDk2MDQsOTYxMiw5NjE2LDk2MDAsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMDI1LDExMDUsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDM4LDExMTgsMTc2LDg3MjksMTgzLDg3MzAsODQ3MCwxNjQsOTYzMiwxNjBdLFxuICBcImlzby04ODU5LTJcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDcyOCwzMjEsMTY0LDMxNywzNDYsMTY3LDE2OCwzNTIsMzUwLDM1NiwzNzcsMTczLDM4MSwzNzksMTc2LDI2MSw3MzEsMzIyLDE4MCwzMTgsMzQ3LDcxMSwxODQsMzUzLDM1MSwzNTcsMzc4LDczMywzODIsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sXG4gIFwiaXNvLTg4NTktM1wiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyOTQsNzI4LDE2MywxNjQsbnVsbCwyOTIsMTY3LDE2OCwzMDQsMzUwLDI4NiwzMDgsMTczLG51bGwsMzc5LDE3NiwyOTUsMTc4LDE3OSwxODAsMTgxLDI5MywxODMsMTg0LDMwNSwzNTEsMjg3LDMwOSwxODksbnVsbCwzODAsMTkyLDE5MywxOTQsbnVsbCwxOTYsMjY2LDI2NCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNyxudWxsLDIwOSwyMTAsMjExLDIxMiwyODgsMjE0LDIxNSwyODQsMjE3LDIxOCwyMTksMjIwLDM2NCwzNDgsMjIzLDIyNCwyMjUsMjI2LG51bGwsMjI4LDI2NywyNjUsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksbnVsbCwyNDEsMjQyLDI0MywyNDQsMjg5LDI0NiwyNDcsMjg1LDI0OSwyNTAsMjUxLDI1MiwzNjUsMzQ5LDcyOV0sXG4gIFwiaXNvLTg4NTktNFwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMzEyLDM0MiwxNjQsMjk2LDMxNSwxNjcsMTY4LDM1MiwyNzQsMjkwLDM1OCwxNzMsMzgxLDE3NSwxNzYsMjYxLDczMSwzNDMsMTgwLDI5NywzMTYsNzExLDE4NCwzNTMsMjc1LDI5MSwzNTksMzMwLDM4MiwzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjk4LDI3MiwzMjUsMzMyLDMxMCwyMTIsMjEzLDIxNCwyMTUsMjE2LDM3MCwyMTgsMjE5LDIyMCwzNjAsMzYyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyOTksMjczLDMyNiwzMzMsMzExLDI0NCwyNDUsMjQ2LDI0NywyNDgsMzcxLDI1MCwyNTEsMjUyLDM2MSwzNjMsNzI5XSxcbiAgXCJpc28tODg1OS01XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDE3MywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4NDcwLDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDE2NywxMTE4LDExMTldLFxuICBcImlzby04ODU5LTZcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCxudWxsLG51bGwsMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU0OCwxNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTYzLG51bGwsbnVsbCxudWxsLDE1NjcsbnVsbCwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDE1OTEsMTU5MiwxNTkzLDE1OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MDAsMTYwMSwxNjAyLDE2MDMsMTYwNCwxNjA1LDE2MDYsMTYwNywxNjA4LDE2MDksMTYxMCwxNjExLDE2MTIsMTYxMywxNjE0LDE2MTUsMTYxNiwxNjE3LDE2MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sXG4gIFwiaXNvLTg4NTktN1wiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjE2LDgyMTcsMTYzLDgzNjQsODM2NywxNjYsMTY3LDE2OCwxNjksODkwLDE3MSwxNzIsMTczLG51bGwsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDkwMSw5MDIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLFxuICBcImlzby04ODU5LThcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4MjE1LDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sXG4gIFwiaXNvLTg4NTktMTBcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI3NCwyOTAsMjk4LDI5NiwzMTAsMTY3LDMxNSwyNzIsMzUyLDM1OCwzODEsMTczLDM2MiwzMzAsMTc2LDI2MSwyNzUsMjkxLDI5OSwyOTcsMzExLDE4MywzMTYsMjczLDM1MywzNTksMzgyLDgyMTMsMzYzLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyMDcsMjA4LDMyNSwzMzIsMjExLDIxMiwyMTMsMjE0LDM2MCwyMTYsMzcwLDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDIzOSwyNDAsMzI2LDMzMywyNDMsMjQ0LDI0NSwyNDYsMzYxLDI0OCwzNzEsMjUwLDI1MSwyNTIsMjUzLDI1NCwzMTJdLFxuICBcImlzby04ODU5LTEzXCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMjEsMTYyLDE2MywxNjQsODIyMiwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDgyMjAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw4MjE3XSxcbiAgXCJpc28tODg1OS0xNFwiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw3NjgyLDc2ODMsMTYzLDI2NiwyNjcsNzY5MCwxNjcsNzgwOCwxNjksNzgxMCw3NjkxLDc5MjIsMTczLDE3NCwzNzYsNzcxMCw3NzExLDI4OCwyODksNzc0NCw3NzQ1LDE4Miw3NzY2LDc4MDksNzc2Nyw3ODExLDc3NzYsNzkyMyw3ODEyLDc4MTMsNzc3NywxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMzcyLDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDc3ODYsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMzc0LDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMzczLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDc3ODcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMzc1LDI1NV0sXG4gIFwiaXNvLTg4NTktMTVcIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2NCwxNjUsMzUyLDE2NywzNTMsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwzODEsMTgxLDE4MiwxODMsMzgyLDE4NSwxODYsMTg3LDMzOCwzMzksMzc2LDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLFxuICBcImlzby04ODU5LTE2XCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNjEsMzIxLDgzNjQsODIyMiwzNTIsMTY3LDM1MywxNjksNTM2LDE3MSwzNzcsMTczLDM3OCwzNzksMTc2LDE3NywyNjgsMzIyLDM4MSw4MjIxLDE4MiwxODMsMzgyLDI2OSw1MzcsMTg3LDMzOCwzMzksMzc2LDM4MCwxOTIsMTkzLDE5NCwyNTgsMTk2LDI2MiwxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjcyLDMyMywyMTAsMjExLDIxMiwzMzYsMjE0LDM0NiwzNjgsMjE3LDIxOCwyMTksMjIwLDI4MCw1MzgsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjYzLDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNzMsMzI0LDI0MiwyNDMsMjQ0LDMzNywyNDYsMzQ3LDM2OSwyNDksMjUwLDI1MSwyNTIsMjgxLDUzOSwyNTVdLFxuICBcImtvaTgtclwiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLFxuICBcImtvaTgtdVwiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsMTEwOCw5NTU2LDExMTAsMTExMSw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsMTE2OSwxMTE4LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSwxMDI4LDk1NzEsMTAzMCwxMDMxLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCwxMTY4LDEwMzgsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLFxuICBcIm1hY2ludG9zaFwiOlsxOTYsMTk3LDE5OSwyMDEsMjA5LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIyNywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIzOCwyMzksMjQxLDI0MywyNDIsMjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgyMjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcsMTcwLDE4Niw5MzcsMjMwLDI0OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1OCw4MjI1LDE4Myw4MjE4LDgyMjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIwNSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDczMiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3MzEsNzExXSxcbiAgXCJ3aW5kb3dzLTg3NFwiOls4MzY0LDEyOSwxMzAsMTMxLDEzMiw4MjMwLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwzNTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1OTIsMzU5MywzNTk0LDM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEyLDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywzNjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2MjUsMzYyNiwzNjI3LDM2MjgsMzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQsMzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2NTgsMzY1OSwzNjYwLDM2NjEsMzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2NjcsMzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxsLG51bGxdLFxuICBcIndpbmRvd3MtMTI1MFwiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDM1Miw4MjQ5LDM0NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4MiwzNzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAsMTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQsMzc5LDE3NiwxNzcsNzMxLDMyMiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEsMTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLFxuICBcIndpbmRvd3MtMTI1MVwiOlsxMDI2LDEwMjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgyMjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUsMTExOSwxNjAsMTAzOCwxMTE4LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgxLDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwM10sXG4gIFwid2luZG93cy0xMjUyXCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sXG4gIFwid2luZG93cy0xMjUzXCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLFxuICBcIndpbmRvd3MtMTI1NFwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwyNTVdLFxuICBcIndpbmRvd3MtMTI1NVwiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0NzAsMTQ3MSwxNDcyLDE0NzMsMTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sXG4gIFwid2luZG93cy0xMjU2XCI6WzgzNjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3MCwxNjg4LDE2NzIsMTcxMSw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwyMTUsMTU5MSwxNTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwxNjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwyMzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwxNjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3LDI0OSwxNjE4LDI1MSwyNTIsODIwNiw4MjA3LDE3NDZdLFxuICBcIndpbmRvd3MtMTI1N1wiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sXG4gIFwid2luZG93cy0xMjU4XCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUsMjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEyLDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMxLDc3MSwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIsODM2MywyNTVdLFxuICBcIngtbWFjLWN5cmlsbGljXCI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4LDE2MywxNjcsODIyNiwxODIsMTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMsMTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDgzNjRdXG59O1xuXG4vLyBGb3Igc3RyaWN0IGVudmlyb25tZW50cyB3aGVyZSBgdGhpc2AgaW5zaWRlIHRoZSBnbG9iYWwgc2NvcGVcbi8vIGlzIGB1bmRlZmluZWRgLCB0YWtlIGEgcHVyZSBvYmplY3QgaW5zdGVhZFxufSh0aGlzIHx8IHt9KSk7IiwiLy8gVGhpcyBpcyBmcmVlIGFuZCB1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi5cbi8vIFNlZSBMSUNFTlNFLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgR2xvYmFsIHx0aGlzfCByZXF1aXJlZCBmb3IgcmVzb2x2aW5nIGluZGV4ZXMgaW4gbm9kZS5cbiAqIEBzdXBwcmVzcyB7Z2xvYmFsVGhpc31cbiAqL1xuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSWYgd2UncmUgaW4gbm9kZSByZXF1aXJlIGVuY29kaW5nLWluZGV4ZXMgYW5kIGF0dGFjaCBpdCB0byB0aGUgZ2xvYmFsLlxuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICFnbG9iYWxbXCJlbmNvZGluZy1pbmRleGVzXCJdKSB7XG4gICAgZ2xvYmFsW1wiZW5jb2RpbmctaW5kZXhlc1wiXSA9XG4gICAgICByZXF1aXJlKFwiLi9lbmNvZGluZy1pbmRleGVzLmpzXCIpW1wiZW5jb2RpbmctaW5kZXhlc1wiXTtcbiAgfVxuXG4gIC8vXG4gIC8vIFV0aWxpdGllc1xuICAvL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYSBUaGUgbnVtYmVyIHRvIHRlc3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gVGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlLCBpbmNsdXNpdmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXggVGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHJhbmdlLCBpbmNsdXNpdmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSA+PSBtaW4gYW5kIGEgPD0gbWF4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5SYW5nZShhLCBtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gPD0gYSAmJiBhIDw9IG1heDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyFBcnJheS48Kj59IGFycmF5IFRoZSBhcnJheSB0byBjaGVjay5cbiAgICogQHBhcmFtIHsqfSBpdGVtIFRoZSBpdGVtIHRvIGxvb2sgZm9yIGluIHRoZSBhcnJheS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgaXRlbSBhcHBlYXJzIGluIHRoZSBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBpdGVtKSB7XG4gICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICB9XG5cbiAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBvXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIFRvRGljdGlvbmFyeShvKSB7XG4gICAgaWYgKG8gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9O1xuICAgIGlmIChvID09PSBPYmplY3QobykpIHJldHVybiBvO1xuICAgIHRocm93IFR5cGVFcnJvcignQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8gZGljdGlvbmFyeScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgSW5wdXQgc3RyaW5nIG9mIFVURi0xNiBjb2RlIHVuaXRzLlxuICAgKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59IENvZGUgcG9pbnRzLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nVG9Db2RlUG9pbnRzKHN0cmluZykge1xuICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZVxuXG4gICAgLy8gMS4gTGV0IFMgYmUgdGhlIERPTVN0cmluZyB2YWx1ZS5cbiAgICB2YXIgcyA9IFN0cmluZyhzdHJpbmcpO1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGxlbmd0aCBvZiBTLlxuICAgIHZhciBuID0gcy5sZW5ndGg7XG5cbiAgICAvLyAzLiBJbml0aWFsaXplIGkgdG8gMC5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICAvLyA0LiBJbml0aWFsaXplIFUgdG8gYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgVW5pY29kZSBjaGFyYWN0ZXJzLlxuICAgIHZhciB1ID0gW107XG5cbiAgICAvLyA1LiBXaGlsZSBpIDwgbjpcbiAgICB3aGlsZSAoaSA8IG4pIHtcblxuICAgICAgLy8gMS4gTGV0IGMgYmUgdGhlIGNvZGUgdW5pdCBpbiBTIGF0IGluZGV4IGkuXG4gICAgICB2YXIgYyA9IHMuY2hhckNvZGVBdChpKTtcblxuICAgICAgLy8gMi4gRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBjOlxuXG4gICAgICAvLyBjIDwgMHhEODAwIG9yIGMgPiAweERGRkZcbiAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgLy8gQXBwZW5kIHRvIFUgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggY29kZSBwb2ludCBjLlxuICAgICAgICB1LnB1c2goYyk7XG4gICAgICB9XG5cbiAgICAgIC8vIDB4REMwMCDiiaQgYyDiiaQgMHhERkZGXG4gICAgICBlbHNlIGlmICgweERDMDAgPD0gYyAmJiBjIDw9IDB4REZGRikge1xuICAgICAgICAvLyBBcHBlbmQgdG8gVSBhIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVIuXG4gICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgfVxuXG4gICAgICAvLyAweEQ4MDAg4omkIGMg4omkIDB4REJGRlxuICAgICAgZWxzZSBpZiAoMHhEODAwIDw9IGMgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgLy8gMS4gSWYgaSA9IG7iiJIxLCB0aGVuIGFwcGVuZCB0byBVIGEgVStGRkZEIFJFUExBQ0VNRU5UXG4gICAgICAgIC8vIENIQVJBQ1RFUi5cbiAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgdS5wdXNoKDB4RkZGRCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpIDwgbuKIkjE6XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIDEuIExldCBkIGJlIHRoZSBjb2RlIHVuaXQgaW4gUyBhdCBpbmRleCBpKzEuXG4gICAgICAgICAgdmFyIGQgPSBzLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAgICAgLy8gMi4gSWYgMHhEQzAwIOKJpCBkIOKJpCAweERGRkYsIHRoZW46XG4gICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAvLyAxLiBMZXQgYSBiZSBjICYgMHgzRkYuXG4gICAgICAgICAgICB2YXIgYSA9IGMgJiAweDNGRjtcblxuICAgICAgICAgICAgLy8gMi4gTGV0IGIgYmUgZCAmIDB4M0ZGLlxuICAgICAgICAgICAgdmFyIGIgPSBkICYgMHgzRkY7XG5cbiAgICAgICAgICAgIC8vIDMuIEFwcGVuZCB0byBVIHRoZSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIGNvZGUgcG9pbnRcbiAgICAgICAgICAgIC8vIDJeMTYrMl4xMCphK2IuXG4gICAgICAgICAgICB1LnB1c2goMHgxMDAwMCArIChhIDw8IDEwKSArIGIpO1xuXG4gICAgICAgICAgICAvLyA0LiBTZXQgaSB0byBpKzEuXG4gICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBkIDwgMHhEQzAwIG9yIGQgPiAweERGRkYuIEFwcGVuZCB0byBVIGFcbiAgICAgICAgICAvLyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLlxuICAgICAgICAgIGVsc2UgIHtcbiAgICAgICAgICAgIHUucHVzaCgweEZGRkQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgaSB0byBpKzEuXG4gICAgICBpICs9IDE7XG4gICAgfVxuXG4gICAgLy8gNi4gUmV0dXJuIFUuXG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvZGVfcG9pbnRzIEFycmF5IG9mIGNvZGUgcG9pbnRzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgb2YgVVRGLTE2IGNvZGUgdW5pdHMuXG4gICAqL1xuICBmdW5jdGlvbiBjb2RlUG9pbnRzVG9TdHJpbmcoY29kZV9wb2ludHMpIHtcbiAgICB2YXIgcyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZV9wb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBjcCA9IGNvZGVfcG9pbnRzW2ldO1xuICAgICAgaWYgKGNwIDw9IDB4RkZGRikge1xuICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3AgLT0gMHgxMDAwMDtcbiAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjcCA+PiAxMCkgKyAweEQ4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3AgJiAweDNGRikgKyAweERDMDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG5cbiAgLy9cbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgRW5jb2Rpbmcgc3BlY2lmaWNhdGlvblxuICAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy9cbiAgLy9cblxuICAvL1xuICAvLyA0LiBUZXJtaW5vbG9neVxuICAvL1xuXG4gIC8qKlxuICAgKiBBbiBBU0NJSSBieXRlIGlzIGEgYnl0ZSBpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDdGLCBpbmNsdXNpdmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhIFRoZSBudW1iZXIgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIGlzIGluIHRoZSByYW5nZSAweDAwIHRvIDB4N0YsIGluY2x1c2l2ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGlzQVNDSUlCeXRlKGEpIHtcbiAgICByZXR1cm4gMHgwMCA8PSBhICYmIGEgPD0gMHg3RjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBBU0NJSSBjb2RlIHBvaW50IGlzIGEgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvXG4gICAqIFUrMDA3RiwgaW5jbHVzaXZlLlxuICAgKi9cbiAgdmFyIGlzQVNDSUlDb2RlUG9pbnQgPSBpc0FTQ0lJQnl0ZTtcblxuXG4gIC8qKlxuICAgKiBFbmQtb2Ytc3RyZWFtIGlzIGEgc3BlY2lhbCB0b2tlbiB0aGF0IHNpZ25pZmllcyBubyBtb3JlIHRva2Vuc1xuICAgKiBhcmUgaW4gdGhlIHN0cmVhbS5cbiAgICogQGNvbnN0XG4gICAqLyB2YXIgZW5kX29mX3N0cmVhbSA9IC0xO1xuXG4gIC8qKlxuICAgKiBBIHN0cmVhbSByZXByZXNlbnRzIGFuIG9yZGVyZWQgc2VxdWVuY2Ugb2YgdG9rZW5zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSB0b2tlbnMgQXJyYXkgb2YgdG9rZW5zIHRoYXQgcHJvdmlkZVxuICAgKiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgZnVuY3Rpb24gU3RyZWFtKHRva2Vucykge1xuICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgIHRoaXMudG9rZW5zID0gW10uc2xpY2UuY2FsbCh0b2tlbnMpO1xuICAgIC8vIFJldmVyc2VkIGFzIHB1c2gvcG9wIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gc2hpZnQvdW5zaGlmdC5cbiAgICB0aGlzLnRva2Vucy5yZXZlcnNlKCk7XG4gIH1cblxuICBTdHJlYW0ucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZW5kLW9mLXN0cmVhbSBoYXMgYmVlbiBoaXQuXG4gICAgICovXG4gICAgZW5kT2ZTdHJlYW06IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRva2Vucy5sZW5ndGg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSB0b2tlbiBpcyByZWFkIGZyb20gYSBzdHJlYW0sIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGVcbiAgICAgKiBzdHJlYW0gbXVzdCBiZSByZXR1cm5lZCBhbmQgc3Vic2VxdWVudGx5IHJlbW92ZWQsIGFuZFxuICAgICAqIGVuZC1vZi1zdHJlYW0gbXVzdCBiZSByZXR1cm5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEdldCB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBzdHJlYW0sIG9yXG4gICAgICogZW5kX29mX3N0cmVhbS5cbiAgICAgKi9cbiAgICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMudG9rZW5zLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGVuZF9vZl9zdHJlYW07XG4gICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnBvcCgpO1xuICAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2hlbiBvbmUgb3IgbW9yZSB0b2tlbnMgYXJlIHByZXBlbmRlZCB0byBhIHN0cmVhbSwgdGhvc2UgdG9rZW5zXG4gICAgICogbXVzdCBiZSBpbnNlcnRlZCwgaW4gZ2l2ZW4gb3JkZXIsIGJlZm9yZSB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlXG4gICAgICogc3RyZWFtLlxuICAgICAqXG4gICAgICogQHBhcmFtIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IHRva2VuIFRoZSB0b2tlbihzKSB0byBwcmVwZW5kIHRvIHRoZVxuICAgICAqIHN0cmVhbS5cbiAgICAgKi9cbiAgICBwcmVwZW5kOiBmdW5jdGlvbih0b2tlbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9rZW4pKSB7XG4gICAgICAgIHZhciB0b2tlbnMgPSAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHRva2VuKTtcbiAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpXG4gICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0b2tlbnMucG9wKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25lIG9yIG1vcmUgdG9rZW5zIGFyZSBwdXNoZWQgdG8gYSBzdHJlYW0sIHRob3NlIHRva2Vuc1xuICAgICAqIG11c3QgYmUgaW5zZXJ0ZWQsIGluIGdpdmVuIG9yZGVyLCBhZnRlciB0aGUgbGFzdCB0b2tlbiBpbiB0aGVcbiAgICAgKiBzdHJlYW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gdG9rZW4gVGhlIHRva2VucyhzKSB0byBwdXNoIHRvIHRoZVxuICAgICAqIHN0cmVhbS5cbiAgICAgKi9cbiAgICBwdXNoOiBmdW5jdGlvbih0b2tlbikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9rZW4pKSB7XG4gICAgICAgIHZhciB0b2tlbnMgPSAvKipAdHlwZSB7IUFycmF5LjxudW1iZXI+fSovKHRva2VuKTtcbiAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGgpXG4gICAgICAgICAgdGhpcy50b2tlbnMudW5zaGlmdCh0b2tlbnMuc2hpZnQoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2Vucy51bnNoaWZ0KHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy9cbiAgLy8gNS4gRW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gNS4xIEVuY29kZXJzIGFuZCBkZWNvZGVyc1xuXG4gIC8qKiBAY29uc3QgKi9cbiAgdmFyIGZpbmlzaGVkID0gLTE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmF0YWwgSWYgdHJ1ZSwgZGVjb2RpbmcgZXJyb3JzIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRfY29kZV9wb2ludCBPdmVycmlkZSB0aGUgc3RhbmRhcmQgZmFsbGJhY2sgY29kZSBwb2ludC5cbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgY29kZSBwb2ludCB0byBpbnNlcnQgb24gYSBkZWNvZGluZyBlcnJvci5cbiAgICovXG4gIGZ1bmN0aW9uIGRlY29kZXJFcnJvcihmYXRhbCwgb3B0X2NvZGVfcG9pbnQpIHtcbiAgICBpZiAoZmF0YWwpXG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0RlY29kZXIgZXJyb3InKTtcbiAgICByZXR1cm4gb3B0X2NvZGVfcG9pbnQgfHwgMHhGRkZEO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSBjb2RlIHBvaW50IHRoYXQgY291bGQgbm90IGJlIGVuY29kZWQuXG4gICAqIEByZXR1cm4ge251bWJlcn0gQWx3YXlzIHRocm93cywgbm8gdmFsdWUgaXMgYWN0dWFsbHkgcmV0dXJuZWQuXG4gICAqL1xuICBmdW5jdGlvbiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCkge1xuICAgIHRocm93IFR5cGVFcnJvcignVGhlIGNvZGUgcG9pbnQgJyArIGNvZGVfcG9pbnQgKyAnIGNvdWxkIG5vdCBiZSBlbmNvZGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbnRlcmZhY2UgKi9cbiAgZnVuY3Rpb24gRGVjb2RlcigpIHt9XG4gIERlY29kZXIucHJvdG90eXBlID0ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LCBvciB8ZmluaXNoZWR8LlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge31cbiAgfTtcblxuICAvKiogQGludGVyZmFjZSAqL1xuICBmdW5jdGlvbiBFbmNvZGVyKCkge31cbiAgRW5jb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGNvZGUgcG9pbnRzIGJlaW5nIGVuY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LCBvciB8ZmluaXNoZWR8LlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge31cbiAgfTtcblxuICAvLyA1LjIgTmFtZXMgYW5kIGxhYmVsc1xuXG4gIC8vIFRPRE86IERlZmluZSBAdHlwZWRlZiBmb3IgRW5jb2Rpbmc6IHtuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9pc3N1ZXMvMjQ3XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBUaGUgZW5jb2RpbmcgbGFiZWwuXG4gICAqIEByZXR1cm4gez97bmFtZTpzdHJpbmcsbGFiZWxzOkFycmF5LjxzdHJpbmc+fX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEVuY29kaW5nKGxhYmVsKSB7XG4gICAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gbGFiZWwuXG4gICAgbGFiZWwgPSBTdHJpbmcobGFiZWwpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAgIC8vIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAvLyBlbmNvZGluZywgYW5kIGZhaWx1cmUgb3RoZXJ3aXNlLlxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGFiZWxfdG9fZW5jb2RpbmcsIGxhYmVsKSkge1xuICAgICAgcmV0dXJuIGxhYmVsX3RvX2VuY29kaW5nW2xhYmVsXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RpbmdzIHRhYmxlOiBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy9lbmNvZGluZ3MuanNvblxuICAgKiBAY29uc3RcbiAgICogQHR5cGUgeyFBcnJheS48e1xuICAgKiAgICAgICAgICBoZWFkaW5nOiBzdHJpbmcsXG4gICAqICAgICAgICAgIGVuY29kaW5nczogQXJyYXkuPHtuYW1lOnN0cmluZyxsYWJlbHM6QXJyYXkuPHN0cmluZz59PlxuICAgKiAgICAgICAgfT59XG4gICAqL1xuICB2YXIgZW5jb2RpbmdzID0gW1xuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwidW5pY29kZS0xLTEtdXRmLThcIixcbiAgICAgICAgICAgIFwidXRmLThcIixcbiAgICAgICAgICAgIFwidXRmOFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJVVEYtOFwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImhlYWRpbmdcIjogXCJUaGUgRW5jb2RpbmdcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCI4NjZcIixcbiAgICAgICAgICAgIFwiY3A4NjZcIixcbiAgICAgICAgICAgIFwiY3NpYm04NjZcIixcbiAgICAgICAgICAgIFwiaWJtODY2XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklCTTg2NlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW4yXCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTJcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTEwMVwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTJcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTJcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMlwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS0yOjE5ODdcIixcbiAgICAgICAgICAgIFwibDJcIixcbiAgICAgICAgICAgIFwibGF0aW4yXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzb2xhdGluM1wiLFxuICAgICAgICAgICAgXCJpc28tODg1OS0zXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMDlcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0zXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkzXCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTNcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMzoxOTg4XCIsXG4gICAgICAgICAgICBcImwzXCIsXG4gICAgICAgICAgICBcImxhdGluM1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0zXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjRcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktNFwiLFxuICAgICAgICAgICAgXCJpc28taXItMTEwXCIsXG4gICAgICAgICAgICBcImlzbzg4NTktNFwiLFxuICAgICAgICAgICAgXCJpc284ODU5NFwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS00XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTQ6MTk4OFwiLFxuICAgICAgICAgICAgXCJsNFwiLFxuICAgICAgICAgICAgXCJsYXRpbjRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktNFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiLFxuICAgICAgICAgICAgXCJjeXJpbGxpY1wiLFxuICAgICAgICAgICAgXCJpc28tODg1OS01XCIsXG4gICAgICAgICAgICBcImlzby1pci0xNDRcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS01XCIsXG4gICAgICAgICAgICBcImlzbzg4NTk1XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTVcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNToxOTg4XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTVcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJhcmFiaWNcIixcbiAgICAgICAgICAgIFwiYXNtby03MDhcIixcbiAgICAgICAgICAgIFwiY3Npc284ODU5NmVcIixcbiAgICAgICAgICAgIFwiY3Npc284ODU5NmlcIixcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbmFyYWJpY1wiLFxuICAgICAgICAgICAgXCJlY21hLTExNFwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS02XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTYtZVwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS02LWlcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTEyN1wiLFxuICAgICAgICAgICAgXCJpc284ODU5LTZcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTZcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktNlwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS02OjE5ODdcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktNlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvbGF0aW5ncmVla1wiLFxuICAgICAgICAgICAgXCJlY21hLTExOFwiLFxuICAgICAgICAgICAgXCJlbG90XzkyOFwiLFxuICAgICAgICAgICAgXCJncmVla1wiLFxuICAgICAgICAgICAgXCJncmVlazhcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktN1wiLFxuICAgICAgICAgICAgXCJpc28taXItMTI2XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktN1wiLFxuICAgICAgICAgICAgXCJpc284ODU5N1wiLFxuICAgICAgICAgICAgXCJpc29fODg1OS03XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTc6MTk4N1wiLFxuICAgICAgICAgICAgXCJzdW5fZXVfZ3JlZWtcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktN1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvODg1OThlXCIsXG4gICAgICAgICAgICBcImNzaXNvbGF0aW5oZWJyZXdcIixcbiAgICAgICAgICAgIFwiaGVicmV3XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LThcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktOC1lXCIsXG4gICAgICAgICAgICBcImlzby1pci0xMzhcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS04XCIsXG4gICAgICAgICAgICBcImlzbzg4NTk4XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LThcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktODoxOTg4XCIsXG4gICAgICAgICAgICBcInZpc3VhbFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS04XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc284ODU5OGlcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktOC1pXCIsXG4gICAgICAgICAgICBcImxvZ2ljYWxcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktOC1JXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjZcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTBcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTE1N1wiLFxuICAgICAgICAgICAgXCJpc284ODU5LTEwXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxMFwiLFxuICAgICAgICAgICAgXCJsNlwiLFxuICAgICAgICAgICAgXCJsYXRpbjZcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTBcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJpc28tODg1OS0xM1wiLFxuICAgICAgICAgICAgXCJpc284ODU5LTEzXCIsXG4gICAgICAgICAgICBcImlzbzg4NTkxM1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0xM1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImlzby04ODU5LTE0XCIsXG4gICAgICAgICAgICBcImlzbzg4NTktMTRcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTE0XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy04ODU5LTE0XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjlcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTVcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xNVwiLFxuICAgICAgICAgICAgXCJpc284ODU5MTVcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMTVcIixcbiAgICAgICAgICAgIFwibDlcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiSVNPLTg4NTktMTVcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJpc28tODg1OS0xNlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJJU08tODg1OS0xNlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNza29pOHJcIixcbiAgICAgICAgICAgIFwia29pXCIsXG4gICAgICAgICAgICBcImtvaThcIixcbiAgICAgICAgICAgIFwia29pOC1yXCIsXG4gICAgICAgICAgICBcImtvaThfclwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJLT0k4LVJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJrb2k4LXJ1XCIsXG4gICAgICAgICAgICBcImtvaTgtdVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJLT0k4LVVcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc21hY2ludG9zaFwiLFxuICAgICAgICAgICAgXCJtYWNcIixcbiAgICAgICAgICAgIFwibWFjaW50b3NoXCIsXG4gICAgICAgICAgICBcIngtbWFjLXJvbWFuXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIm1hY2ludG9zaFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImRvcy04NzRcIixcbiAgICAgICAgICAgIFwiaXNvLTg4NTktMTFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS0xMVwiLFxuICAgICAgICAgICAgXCJpc284ODU5MTFcIixcbiAgICAgICAgICAgIFwidGlzLTYyMFwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTg3NFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTg3NFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1MFwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTBcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTBcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjUwXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjUxXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1MVwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1MVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTFcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJhbnNpX3gzLjQtMTk2OFwiLFxuICAgICAgICAgICAgXCJhc2NpaVwiLFxuICAgICAgICAgICAgXCJjcDEyNTJcIixcbiAgICAgICAgICAgIFwiY3A4MTlcIixcbiAgICAgICAgICAgIFwiY3Npc29sYXRpbjFcIixcbiAgICAgICAgICAgIFwiaWJtODE5XCIsXG4gICAgICAgICAgICBcImlzby04ODU5LTFcIixcbiAgICAgICAgICAgIFwiaXNvLWlyLTEwMFwiLFxuICAgICAgICAgICAgXCJpc284ODU5LTFcIixcbiAgICAgICAgICAgIFwiaXNvODg1OTFcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktMVwiLFxuICAgICAgICAgICAgXCJpc29fODg1OS0xOjE5ODdcIixcbiAgICAgICAgICAgIFwibDFcIixcbiAgICAgICAgICAgIFwibGF0aW4xXCIsXG4gICAgICAgICAgICBcInVzLWFzY2lpXCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1MlwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1MlwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTNcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjUzXCIsXG4gICAgICAgICAgICBcIngtY3AxMjUzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1M1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1NFwiLFxuICAgICAgICAgICAgXCJjc2lzb2xhdGluNVwiLFxuICAgICAgICAgICAgXCJpc28tODg1OS05XCIsXG4gICAgICAgICAgICBcImlzby1pci0xNDhcIixcbiAgICAgICAgICAgIFwiaXNvODg1OS05XCIsXG4gICAgICAgICAgICBcImlzbzg4NTk5XCIsXG4gICAgICAgICAgICBcImlzb184ODU5LTlcIixcbiAgICAgICAgICAgIFwiaXNvXzg4NTktOToxOTg5XCIsXG4gICAgICAgICAgICBcImw1XCIsXG4gICAgICAgICAgICBcImxhdGluNVwiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTRcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU0XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjU1XCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1NVwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1NVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNTVcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjcDEyNTZcIixcbiAgICAgICAgICAgIFwid2luZG93cy0xMjU2XCIsXG4gICAgICAgICAgICBcIngtY3AxMjU2XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIndpbmRvd3MtMTI1NlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNwMTI1N1wiLFxuICAgICAgICAgICAgXCJ3aW5kb3dzLTEyNTdcIixcbiAgICAgICAgICAgIFwieC1jcDEyNTdcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwid2luZG93cy0xMjU3XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3AxMjU4XCIsXG4gICAgICAgICAgICBcIndpbmRvd3MtMTI1OFwiLFxuICAgICAgICAgICAgXCJ4LWNwMTI1OFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJ3aW5kb3dzLTEyNThcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJ4LW1hYy1jeXJpbGxpY1wiLFxuICAgICAgICAgICAgXCJ4LW1hYy11a3JhaW5pYW5cIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwieC1tYWMtY3lyaWxsaWNcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5nc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNoaW5lc2VcIixcbiAgICAgICAgICAgIFwiY3NnYjIzMTJcIixcbiAgICAgICAgICAgIFwiY3Npc281OGdiMjMxMjgwXCIsXG4gICAgICAgICAgICBcImdiMjMxMlwiLFxuICAgICAgICAgICAgXCJnYl8yMzEyXCIsXG4gICAgICAgICAgICBcImdiXzIzMTItODBcIixcbiAgICAgICAgICAgIFwiZ2JrXCIsXG4gICAgICAgICAgICBcImlzby1pci01OFwiLFxuICAgICAgICAgICAgXCJ4LWdia1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJHQktcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJnYjE4MDMwXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcImdiMTgwMzBcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiZW5jb2RpbmdzXCI6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiYmlnNVwiLFxuICAgICAgICAgICAgXCJiaWc1LWhrc2NzXCIsXG4gICAgICAgICAgICBcImNuLWJpZzVcIixcbiAgICAgICAgICAgIFwiY3NiaWc1XCIsXG4gICAgICAgICAgICBcIngteC1iaWc1XCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIkJpZzVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5nc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICBcImVuY29kaW5nc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzZXVjcGtkZm10amFwYW5lc2VcIixcbiAgICAgICAgICAgIFwiZXVjLWpwXCIsXG4gICAgICAgICAgICBcIngtZXVjLWpwXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIkVVQy1KUFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcImNzaXNvMjAyMmpwXCIsXG4gICAgICAgICAgICBcImlzby0yMDIyLWpwXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIklTTy0yMDIyLUpQXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwiY3NzaGlmdGppc1wiLFxuICAgICAgICAgICAgXCJtczkzMlwiLFxuICAgICAgICAgICAgXCJtc19rYW5qaVwiLFxuICAgICAgICAgICAgXCJzaGlmdC1qaXNcIixcbiAgICAgICAgICAgIFwic2hpZnRfamlzXCIsXG4gICAgICAgICAgICBcInNqaXNcIixcbiAgICAgICAgICAgIFwid2luZG93cy0zMWpcIixcbiAgICAgICAgICAgIFwieC1zamlzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIlNoaWZ0X0pJU1wiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImhlYWRpbmdcIjogXCJMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVzZSBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2V1Y2tyXCIsXG4gICAgICAgICAgICBcImNza3NjNTYwMTE5ODdcIixcbiAgICAgICAgICAgIFwiZXVjLWtyXCIsXG4gICAgICAgICAgICBcImlzby1pci0xNDlcIixcbiAgICAgICAgICAgIFwia29yZWFuXCIsXG4gICAgICAgICAgICBcImtzX2NfNTYwMS0xOTg3XCIsXG4gICAgICAgICAgICBcImtzX2NfNTYwMS0xOTg5XCIsXG4gICAgICAgICAgICBcImtzYzU2MDFcIixcbiAgICAgICAgICAgIFwia3NjXzU2MDFcIixcbiAgICAgICAgICAgIFwid2luZG93cy05NDlcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwiRVVDLUtSXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIFwiaGVhZGluZ1wiOiBcIkxlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3NcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJlbmNvZGluZ3NcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbHNcIjogW1xuICAgICAgICAgICAgXCJjc2lzbzIwMjJrclwiLFxuICAgICAgICAgICAgXCJoei1nYi0yMzEyXCIsXG4gICAgICAgICAgICBcImlzby0yMDIyLWNuXCIsXG4gICAgICAgICAgICBcImlzby0yMDIyLWNuLWV4dFwiLFxuICAgICAgICAgICAgXCJpc28tMjAyMi1rclwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcIm5hbWVcIjogXCJyZXBsYWNlbWVudFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsc1wiOiBbXG4gICAgICAgICAgICBcInV0Zi0xNmJlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIlVURi0xNkJFXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwidXRmLTE2XCIsXG4gICAgICAgICAgICBcInV0Zi0xNmxlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIFwibmFtZVwiOiBcIlVURi0xNkxFXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxzXCI6IFtcbiAgICAgICAgICAgIFwieC11c2VyLWRlZmluZWRcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwieC11c2VyLWRlZmluZWRcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJoZWFkaW5nXCI6IFwiTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzXCJcbiAgICB9XG4gIF07XG5cbiAgLy8gTGFiZWwgdG8gZW5jb2RpbmcgcmVnaXN0cnkuXG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcse25hbWU6c3RyaW5nLGxhYmVsczpBcnJheS48c3RyaW5nPn0+fSAqL1xuICB2YXIgbGFiZWxfdG9fZW5jb2RpbmcgPSB7fTtcbiAgZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICBjYXRlZ29yeS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgZW5jb2RpbmcubGFiZWxzLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgbGFiZWxfdG9fZW5jb2RpbmdbbGFiZWxdID0gZW5jb2Rpbmc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gUmVnaXN0cnkgb2Ygb2YgZW5jb2Rlci9kZWNvZGVyIGZhY3RvcmllcywgYnkgZW5jb2RpbmcgbmFtZS5cbiAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oe2ZhdGFsOmJvb2xlYW59KTogRW5jb2Rlcj59ICovXG4gIHZhciBlbmNvZGVycyA9IHt9O1xuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbih7ZmF0YWw6Ym9vbGVhbn0pOiBEZWNvZGVyPn0gKi9cbiAgdmFyIGRlY29kZXJzID0ge307XG5cbiAgLy9cbiAgLy8gNi4gSW5kZXhlc1xuICAvL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9pbnRlciBUaGUgfHBvaW50ZXJ8IHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7KCFBcnJheS48P251bWJlcj58dW5kZWZpbmVkKX0gaW5kZXggVGhlIHxpbmRleHwgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB8cG9pbnRlcnwgaW4gfGluZGV4fCxcbiAgICogICAgIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB8aW5kZXh8LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgpIHtcbiAgICBpZiAoIWluZGV4KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gaW5kZXhbcG9pbnRlcl0gfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGUgcG9pbnR8IHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7IUFycmF5Ljw/bnVtYmVyPn0gaW5kZXggVGhlIHxpbmRleHwgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGZpcnN0IHBvaW50ZXIgY29ycmVzcG9uZGluZyB0byB8Y29kZSBwb2ludHwgaW5cbiAgICogICAgIHxpbmRleHwsIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB8aW5kZXh8LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KSB7XG4gICAgdmFyIHBvaW50ZXIgPSBpbmRleC5pbmRleE9mKGNvZGVfcG9pbnQpO1xuICAgIHJldHVybiBwb2ludGVyID09PSAtMSA/IG51bGwgOiBwb2ludGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIGluZGV4LlxuICAgKiBAcmV0dXJuIHsoIUFycmF5LjxudW1iZXI+fCFBcnJheS48QXJyYXkuPG51bWJlcj4+KX1cbiAgICogICovXG4gIGZ1bmN0aW9uIGluZGV4KG5hbWUpIHtcbiAgICBpZiAoISgnZW5jb2RpbmctaW5kZXhlcycgaW4gZ2xvYmFsKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJJbmRleGVzIG1pc3NpbmcuXCIgK1xuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0P1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFsnZW5jb2RpbmctaW5kZXhlcyddW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb2ludGVyIFRoZSB8cG9pbnRlcnwgdG8gc2VhcmNoIGZvciBpbiB0aGUgZ2IxODAzMCBpbmRleC5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB8cG9pbnRlcnwgaW4gfGluZGV4fCxcbiAgICogICAgIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB0aGUgZ2IxODAzMCBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4R0IxODAzMFJhbmdlc0NvZGVQb2ludEZvcihwb2ludGVyKSB7XG4gICAgLy8gMS4gSWYgcG9pbnRlciBpcyBncmVhdGVyIHRoYW4gMzk0MTkgYW5kIGxlc3MgdGhhbiAxODkwMDAsIG9yXG4gICAgLy8gcG9pbnRlciBpcyBncmVhdGVyIHRoYW4gMTIzNzU3NSwgcmV0dXJuIG51bGwuXG4gICAgaWYgKChwb2ludGVyID4gMzk0MTkgJiYgcG9pbnRlciA8IDE4OTAwMCkgfHwgKHBvaW50ZXIgPiAxMjM3NTc1KSlcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgLy8gMi4gSWYgcG9pbnRlciBpcyA3NDU3LCByZXR1cm4gY29kZSBwb2ludCBVK0U3QzcuXG4gICAgaWYgKHBvaW50ZXIgPT09IDc0NTcpIHJldHVybiAweEU3Qzc7XG5cbiAgICAvLyAzLiBMZXQgb2Zmc2V0IGJlIHRoZSBsYXN0IHBvaW50ZXIgaW4gaW5kZXggZ2IxODAzMCByYW5nZXMgdGhhdFxuICAgIC8vIGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBwb2ludGVyIGFuZCBsZXQgY29kZSBwb2ludCBvZmZzZXQgYmVcbiAgICAvLyBpdHMgY29ycmVzcG9uZGluZyBjb2RlIHBvaW50LlxuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBjb2RlX3BvaW50X29mZnNldCA9IDA7XG4gICAgdmFyIGlkeCA9IGluZGV4KCdnYjE4MDMwLXJhbmdlcycpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBpZHgubGVuZ3RoOyArK2kpIHtcbiAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICAgICAgdmFyIGVudHJ5ID0gaWR4W2ldO1xuICAgICAgaWYgKGVudHJ5WzBdIDw9IHBvaW50ZXIpIHtcbiAgICAgICAgb2Zmc2V0ID0gZW50cnlbMF07XG4gICAgICAgIGNvZGVfcG9pbnRfb2Zmc2V0ID0gZW50cnlbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQgb2Zmc2V0ICtcbiAgICAvLyBwb2ludGVyIOKIkiBvZmZzZXQuXG4gICAgcmV0dXJuIGNvZGVfcG9pbnRfb2Zmc2V0ICsgcG9pbnRlciAtIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBUaGUgfGNvZGUgcG9pbnR8IHRvIGxvY2F0ZSBpbiB0aGUgZ2IxODAzMCBpbmRleC5cbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZmlyc3QgcG9pbnRlciBjb3JyZXNwb25kaW5nIHRvIHxjb2RlIHBvaW50fCBpbiB0aGVcbiAgICogICAgIGdiMTgwMzAgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpbmRleEdCMTgwMzBSYW5nZXNQb2ludGVyRm9yKGNvZGVfcG9pbnQpIHtcbiAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIFUrRTdDNywgcmV0dXJuIHBvaW50ZXIgNzQ1Ny5cbiAgICBpZiAoY29kZV9wb2ludCA9PT0gMHhFN0M3KSByZXR1cm4gNzQ1NztcblxuICAgIC8vIDIuIExldCBvZmZzZXQgYmUgdGhlIGxhc3QgY29kZSBwb2ludCBpbiBpbmRleCBnYjE4MDMwIHJhbmdlc1xuICAgIC8vIHRoYXQgaXMgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGNvZGUgcG9pbnQgYW5kIGxldCBwb2ludGVyIG9mZnNldFxuICAgIC8vIGJlIGl0cyBjb3JyZXNwb25kaW5nIHBvaW50ZXIuXG4gICAgdmFyIG9mZnNldCA9IDA7XG4gICAgdmFyIHBvaW50ZXJfb2Zmc2V0ID0gMDtcbiAgICB2YXIgaWR4ID0gaW5kZXgoJ2diMTgwMzAtcmFuZ2VzJyk7XG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IGlkeC5sZW5ndGg7ICsraSkge1xuICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPG51bWJlcj59ICovXG4gICAgICB2YXIgZW50cnkgPSBpZHhbaV07XG4gICAgICBpZiAoZW50cnlbMV0gPD0gY29kZV9wb2ludCkge1xuICAgICAgICBvZmZzZXQgPSBlbnRyeVsxXTtcbiAgICAgICAgcG9pbnRlcl9vZmZzZXQgPSBlbnRyeVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiBhIHBvaW50ZXIgd2hvc2UgdmFsdWUgaXMgcG9pbnRlciBvZmZzZXQgKyBjb2RlIHBvaW50XG4gICAgLy8g4oiSIG9mZnNldC5cbiAgICByZXR1cm4gcG9pbnRlcl9vZmZzZXQgKyBjb2RlX3BvaW50IC0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IFRoZSB8Y29kZV9wb2ludHwgdG8gc2VhcmNoIGZvciBpbiB0aGUgU2hpZnRfSklTXG4gICAqICAgICBpbmRleC5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB8cG9pbnRlcnwgaW4gfGluZGV4fCxcbiAgICogICAgIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB0aGUgU2hpZnRfSklTIGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaW5kZXhTaGlmdEpJU1BvaW50ZXJGb3IoY29kZV9wb2ludCkge1xuICAgIC8vIDEuIExldCBpbmRleCBiZSBpbmRleCBqaXMwMjA4IGV4Y2x1ZGluZyBhbGwgZW50cmllcyB3aG9zZVxuICAgIC8vIHBvaW50ZXIgaXMgaW4gdGhlIHJhbmdlIDgyNzIgdG8gODgzNSwgaW5jbHVzaXZlLlxuICAgIHNoaWZ0X2ppc19pbmRleCA9IHNoaWZ0X2ppc19pbmRleCB8fFxuICAgICAgaW5kZXgoJ2ppczAyMDgnKS5tYXAoZnVuY3Rpb24oY29kZV9wb2ludCwgcG9pbnRlcikge1xuICAgICAgICByZXR1cm4gaW5SYW5nZShwb2ludGVyLCA4MjcyLCA4ODM1KSA/IG51bGwgOiBjb2RlX3BvaW50O1xuICAgICAgfSk7XG4gICAgdmFyIGluZGV4XyA9IHNoaWZ0X2ppc19pbmRleDtcblxuICAgIC8vIDIuIFJldHVybiB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleC5cbiAgICByZXR1cm4gaW5kZXhfLmluZGV4T2YoY29kZV9wb2ludCk7XG4gIH1cbiAgdmFyIHNoaWZ0X2ppc19pbmRleDtcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgVGhlIHxjb2RlX3BvaW50fCB0byBzZWFyY2ggZm9yIGluIHRoZSBiaWc1XG4gICAqICAgICBpbmRleC5cbiAgICogQHJldHVybiB7P251bWJlcn0gVGhlIGNvZGUgcG9pbnQgY29ycmVzcG9uZGluZyB0byB8cG9pbnRlcnwgaW4gfGluZGV4fCxcbiAgICogICAgIG9yIG51bGwgaWYgfGNvZGUgcG9pbnR8IGlzIG5vdCBpbiB0aGUgYmlnNSBpbmRleC5cbiAgICovXG4gIGZ1bmN0aW9uIGluZGV4QmlnNVBvaW50ZXJGb3IoY29kZV9wb2ludCkge1xuICAgIC8vIDEuIExldCBpbmRleCBiZSBpbmRleCBCaWc1IGV4Y2x1ZGluZyBhbGwgZW50cmllcyB3aG9zZSBwb2ludGVyXG4gICAgYmlnNV9pbmRleF9ub19oa3NjcyA9IGJpZzVfaW5kZXhfbm9faGtzY3MgfHxcbiAgICAgIGluZGV4KCdiaWc1JykubWFwKGZ1bmN0aW9uKGNvZGVfcG9pbnQsIHBvaW50ZXIpIHtcbiAgICAgICAgcmV0dXJuIChwb2ludGVyIDwgKDB4QTEgLSAweDgxKSAqIDE1NykgPyBudWxsIDogY29kZV9wb2ludDtcbiAgICAgIH0pO1xuICAgIHZhciBpbmRleF8gPSBiaWc1X2luZGV4X25vX2hrc2NzO1xuXG4gICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBVKzI1NTAsIFUrMjU1RSwgVSsyNTYxLCBVKzI1NkEsIFUrNTM0MSwgb3JcbiAgICAvLyBVKzUzNDUsIHJldHVybiB0aGUgbGFzdCBwb2ludGVyIGNvcnJlc3BvbmRpbmcgdG8gY29kZSBwb2ludCBpblxuICAgIC8vIGluZGV4LlxuICAgIGlmIChjb2RlX3BvaW50ID09PSAweDI1NTAgfHwgY29kZV9wb2ludCA9PT0gMHgyNTVFIHx8XG4gICAgICAgIGNvZGVfcG9pbnQgPT09IDB4MjU2MSB8fCBjb2RlX3BvaW50ID09PSAweDI1NkEgfHxcbiAgICAgICAgY29kZV9wb2ludCA9PT0gMHg1MzQxIHx8IGNvZGVfcG9pbnQgPT09IDB4NTM0NSkge1xuICAgICAgcmV0dXJuIGluZGV4Xy5sYXN0SW5kZXhPZihjb2RlX3BvaW50KTtcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4gdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXguXG4gICAgcmV0dXJuIGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleF8pO1xuICB9XG4gIHZhciBiaWc1X2luZGV4X25vX2hrc2NzO1xuXG4gIC8vXG4gIC8vIDguIEFQSVxuICAvL1xuXG4gIC8qKiBAY29uc3QgKi8gdmFyIERFRkFVTFRfRU5DT0RJTkcgPSAndXRmLTgnO1xuXG4gIC8vIDguMSBJbnRlcmZhY2UgVGV4dERlY29kZXJcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBlbmNvZGluZztcbiAgICogICAgIGRlZmF1bHRzIHRvICd1dGYtOCcuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVGV4dERlY29kZXIobGFiZWwsIG9wdGlvbnMpIHtcbiAgICAvLyBXZWIgSURMIGNvbnZlbnRpb25zXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRleHREZWNvZGVyKSlcbiAgICAgIHRocm93IFR5cGVFcnJvcignQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0IFxcJ25ld1xcJz8nKTtcbiAgICBsYWJlbCA9IGxhYmVsICE9PSB1bmRlZmluZWQgPyBTdHJpbmcobGFiZWwpIDogREVGQVVMVF9FTkNPRElORztcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgLy8gQSBUZXh0RGVjb2RlciBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgZW5jb2RpbmcsIGRlY29kZXIsXG4gICAgLy8gc3RyZWFtLCBpZ25vcmUgQk9NIGZsYWcgKGluaXRpYWxseSB1bnNldCksIEJPTSBzZWVuIGZsYWdcbiAgICAvLyAoaW5pdGlhbGx5IHVuc2V0KSwgZXJyb3IgbW9kZSAoaW5pdGlhbGx5IHJlcGxhY2VtZW50KSwgYW5kIGRvXG4gICAgLy8gbm90IGZsdXNoIGZsYWcgKGluaXRpYWxseSB1bnNldCkuXG5cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICB0aGlzLl9lbmNvZGluZyA9IG51bGw7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHs/RGVjb2Rlcn0gKi9cbiAgICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5faWdub3JlQk9NID0gZmFsc2U7XG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX0JPTXNlZW4gPSBmYWxzZTtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge3N0cmluZ30gKi9cbiAgICB0aGlzLl9lcnJvcl9tb2RlID0gJ3JlcGxhY2VtZW50JztcbiAgICAvKiogQHByaXZhdGUgQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fZG9fbm90X2ZsdXNoID0gZmFsc2U7XG5cblxuICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbVxuICAgIC8vIGxhYmVsLlxuICAgIHZhciBlbmNvZGluZyA9IGdldEVuY29kaW5nKGxhYmVsKTtcblxuICAgIC8vIDIuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUgb3IgcmVwbGFjZW1lbnQsIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgICBpZiAoZW5jb2RpbmcgPT09IG51bGwgfHwgZW5jb2RpbmcubmFtZSA9PT0gJ3JlcGxhY2VtZW50JylcbiAgICAgIHRocm93IFJhbmdlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBsYWJlbCk7XG4gICAgaWYgKCFkZWNvZGVyc1tlbmNvZGluZy5uYW1lXSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RlY29kZXIgbm90IHByZXNlbnQuJyArXG4gICAgICAgICAgICAgICAgICAnIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8nKTtcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVjIGJlIGEgbmV3IFRleHREZWNvZGVyIG9iamVjdC5cbiAgICB2YXIgZGVjID0gdGhpcztcblxuICAgIC8vIDQuIFNldCBkZWMncyBlbmNvZGluZyB0byBlbmNvZGluZy5cbiAgICBkZWMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG5cbiAgICAvLyA1LiBJZiBvcHRpb25zJ3MgZmF0YWwgbWVtYmVyIGlzIHRydWUsIHNldCBkZWMncyBlcnJvciBtb2RlIHRvXG4gICAgLy8gZmF0YWwuXG4gICAgaWYgKEJvb2xlYW4ob3B0aW9uc1snZmF0YWwnXSkpXG4gICAgICBkZWMuX2Vycm9yX21vZGUgPSAnZmF0YWwnO1xuXG4gICAgLy8gNi4gSWYgb3B0aW9ucydzIGlnbm9yZUJPTSBtZW1iZXIgaXMgdHJ1ZSwgc2V0IGRlYydzIGlnbm9yZSBCT01cbiAgICAvLyBmbGFnLlxuICAgIGlmIChCb29sZWFuKG9wdGlvbnNbJ2lnbm9yZUJPTSddKSlcbiAgICAgIGRlYy5faWdub3JlQk9NID0gdHJ1ZTtcblxuICAgIC8vIEZvciBwcmUtRVM1IHJ1bnRpbWVzOlxuICAgIGlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICB0aGlzLmVuY29kaW5nID0gZGVjLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmZhdGFsID0gZGVjLl9lcnJvcl9tb2RlID09PSAnZmF0YWwnO1xuICAgICAgdGhpcy5pZ25vcmVCT00gPSBkZWMuX2lnbm9yZUJPTTtcbiAgICB9XG5cbiAgICAvLyA3LiBSZXR1cm4gZGVjLlxuICAgIHJldHVybiBkZWM7XG4gIH1cblxuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgLy8gVGhlIGVuY29kaW5nIGF0dHJpYnV0ZSdzIGdldHRlciBtdXN0IHJldHVybiBlbmNvZGluZydzIG5hbWUuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHREZWNvZGVyLnByb3RvdHlwZSwgJ2VuY29kaW5nJywge1xuICAgICAgLyoqIEB0aGlzIHtUZXh0RGVjb2Rlcn0gKi9cbiAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCk7IH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSBmYXRhbCBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gdHJ1ZSBpZiBlcnJvciBtb2RlXG4gICAgLy8gaXMgZmF0YWwsIGFuZCBmYWxzZSBvdGhlcndpc2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHREZWNvZGVyLnByb3RvdHlwZSwgJ2ZhdGFsJywge1xuICAgICAgLyoqIEB0aGlzIHtUZXh0RGVjb2Rlcn0gKi9cbiAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLl9lcnJvcl9tb2RlID09PSAnZmF0YWwnOyB9XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgaWdub3JlQk9NIGF0dHJpYnV0ZSdzIGdldHRlciBtdXN0IHJldHVybiB0cnVlIGlmIGlnbm9yZVxuICAgIC8vIEJPTSBmbGFnIGlzIHNldCwgYW5kIGZhbHNlIG90aGVyd2lzZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dERlY29kZXIucHJvdG90eXBlLCAnaWdub3JlQk9NJywge1xuICAgICAgLyoqIEB0aGlzIHtUZXh0RGVjb2Rlcn0gKi9cbiAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLl9pZ25vcmVCT007IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlclNvdXJjZT19IGlucHV0IFRoZSBidWZmZXIgb2YgYnl0ZXMgdG8gZGVjb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gICAqL1xuICBUZXh0RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0LCBvcHRpb25zKSB7XG4gICAgdmFyIGJ5dGVzO1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiAnYnVmZmVyJyBpbiBpbnB1dCAmJlxuICAgICAgICAgICAgICAgaW5wdXQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5ieXRlTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgLy8gMS4gSWYgdGhlIGRvIG5vdCBmbHVzaCBmbGFnIGlzIHVuc2V0LCBzZXQgZGVjb2RlciB0byBhIG5ld1xuICAgIC8vIGVuY29kaW5nJ3MgZGVjb2Rlciwgc2V0IHN0cmVhbSB0byBhIG5ldyBzdHJlYW0sIGFuZCB1bnNldCB0aGVcbiAgICAvLyBCT00gc2VlbiBmbGFnLlxuICAgIGlmICghdGhpcy5fZG9fbm90X2ZsdXNoKSB7XG4gICAgICB0aGlzLl9kZWNvZGVyID0gZGVjb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0oe1xuICAgICAgICBmYXRhbDogdGhpcy5fZXJyb3JfbW9kZSA9PT0gJ2ZhdGFsJ30pO1xuICAgICAgdGhpcy5fQk9Nc2VlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDIuIElmIG9wdGlvbnMncyBzdHJlYW0gaXMgdHJ1ZSwgc2V0IHRoZSBkbyBub3QgZmx1c2ggZmxhZywgYW5kXG4gICAgLy8gdW5zZXQgdGhlIGRvIG5vdCBmbHVzaCBmbGFnIG90aGVyd2lzZS5cbiAgICB0aGlzLl9kb19ub3RfZmx1c2ggPSBCb29sZWFuKG9wdGlvbnNbJ3N0cmVhbSddKTtcblxuICAgIC8vIDMuIElmIGlucHV0IGlzIGdpdmVuLCBwdXNoIGEgY29weSBvZiBpbnB1dCB0byBzdHJlYW0uXG4gICAgLy8gVE9ETzogQWxpZ24gd2l0aCBzcGVjIGFsZ29yaXRobSAtIG1haW50YWluIHN0cmVhbSBvbiBpbnN0YW5jZS5cbiAgICB2YXIgaW5wdXRfc3RyZWFtID0gbmV3IFN0cmVhbShieXRlcyk7XG5cbiAgICAvLyA0LiBMZXQgb3V0cHV0IGJlIGEgbmV3IHN0cmVhbS5cbiAgICB2YXIgb3V0cHV0ID0gW107XG5cbiAgICAvKiogQHR5cGUgez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9ICovXG4gICAgdmFyIHJlc3VsdDtcblxuICAgIC8vIDUuIFdoaWxlIHRydWU6XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEuIExldCB0b2tlbiBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgZnJvbSBzdHJlYW0uXG4gICAgICB2YXIgdG9rZW4gPSBpbnB1dF9zdHJlYW0ucmVhZCgpO1xuXG4gICAgICAvLyAyLiBJZiB0b2tlbiBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB0aGUgZG8gbm90IGZsdXNoIGZsYWcgaXNcbiAgICAgIC8vIHNldCwgcmV0dXJuIG91dHB1dCwgc2VyaWFsaXplZC5cbiAgICAgIC8vIFRPRE86IEFsaWduIHdpdGggc3BlYyBhbGdvcml0aG0uXG4gICAgICBpZiAodG9rZW4gPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIHJ1biB0aGVzZSBzdWJzdWJzdGVwczpcblxuICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgdG9rZW4gZm9yIGRlY29kZXIsXG4gICAgICAvLyBzdHJlYW0sIG91dHB1dCwgYW5kIGVycm9yIG1vZGUuXG4gICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVyLmhhbmRsZXIoaW5wdXRfc3RyZWFtLCB0b2tlbik7XG5cbiAgICAgIC8vIDIuIElmIHJlc3VsdCBpcyBmaW5pc2hlZCwgcmV0dXJuIG91dHB1dCwgc2VyaWFsaXplZC5cbiAgICAgIGlmIChyZXN1bHQgPT09IGZpbmlzaGVkKVxuICAgICAgICBicmVhaztcblxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKVxuICAgICAgICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyhyZXN1bHQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVzdWx0IGlzIGVycm9yLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIC8vIChUaHJvd24gaW4gaGFuZGxlcilcblxuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBkbyBub3RoaW5nLlxuICAgIH1cbiAgICAvLyBUT0RPOiBBbGlnbiB3aXRoIHNwZWMgYWxnb3JpdGhtLlxuICAgIGlmICghdGhpcy5fZG9fbm90X2ZsdXNoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2RlY29kZXIuaGFuZGxlcihpbnB1dF9zdHJlYW0sIGlucHV0X3N0cmVhbS5yZWFkKCkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXRwdXQucHVzaChyZXN1bHQpO1xuICAgICAgfSB3aGlsZSAoIWlucHV0X3N0cmVhbS5lbmRPZlN0cmVhbSgpKTtcbiAgICAgIHRoaXMuX2RlY29kZXIgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEEgVGV4dERlY29kZXIgb2JqZWN0IGFsc28gaGFzIGFuIGFzc29jaWF0ZWQgc2VyaWFsaXplIHN0cmVhbVxuICAgIC8vIGFsZ29yaXRobS4uLlxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBzdHJlYW1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICogQHRoaXMge1RleHREZWNvZGVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZVN0cmVhbShzdHJlYW0pIHtcbiAgICAgIC8vIDEuIExldCB0b2tlbiBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgZnJvbSBzdHJlYW0uXG4gICAgICAvLyAoRG9uZSBpbi1wbGFjZSBvbiBhcnJheSwgcmF0aGVyIHRoYW4gYXMgYSBzdHJlYW0pXG5cbiAgICAgIC8vIDIuIElmIGVuY29kaW5nIGlzIFVURi04LCBVVEYtMTZCRSwgb3IgVVRGLTE2TEUsIGFuZCBpZ25vcmVcbiAgICAgIC8vIEJPTSBmbGFnIGFuZCBCT00gc2VlbiBmbGFnIGFyZSB1bnNldCwgcnVuIHRoZXNlIHN1YnN1YnN0ZXBzOlxuICAgICAgaWYgKGluY2x1ZGVzKFsnVVRGLTgnLCAnVVRGLTE2TEUnLCAnVVRGLTE2QkUnXSwgdGhpcy5fZW5jb2RpbmcubmFtZSkgJiZcbiAgICAgICAgICAhdGhpcy5faWdub3JlQk9NICYmICF0aGlzLl9CT01zZWVuKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubGVuZ3RoID4gMCAmJiBzdHJlYW1bMF0gPT09IDB4RkVGRikge1xuICAgICAgICAgIC8vIDEuIElmIHRva2VuIGlzIFUrRkVGRiwgc2V0IEJPTSBzZWVuIGZsYWcuXG4gICAgICAgICAgdGhpcy5fQk9Nc2VlbiA9IHRydWU7XG4gICAgICAgICAgc3RyZWFtLnNoaWZ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRva2VuIGlzIG5vdCBlbmQtb2Ytc3RyZWFtLCBzZXQgQk9NIHNlZW5cbiAgICAgICAgICAvLyBmbGFnIGFuZCBhcHBlbmQgdG9rZW4gdG8gc3RyZWFtLlxuICAgICAgICAgIHRoaXMuX0JPTXNlZW4gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdG9rZW4gaXMgbm90IGVuZC1vZi1zdHJlYW0sIGFwcGVuZCB0b2tlblxuICAgICAgICAgIC8vIHRvIG91dHB1dC5cbiAgICAgICAgICAvLyAobm8tb3ApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIG91dHB1dC5cbiAgICAgIHJldHVybiBjb2RlUG9pbnRzVG9TdHJpbmcoc3RyZWFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplU3RyZWFtLmNhbGwodGhpcywgb3V0cHV0KTtcbiAgfTtcblxuICAvLyA4LjIgSW50ZXJmYWNlIFRleHRFbmNvZGVyXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgZW5jb2RpbmcuIE5PTlNUQU5EQVJELlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgTk9OU1RBTkRBUkQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXh0RW5jb2RlcihsYWJlbCwgb3B0aW9ucykge1xuICAgIC8vIFdlYiBJREwgY29udmVudGlvbnNcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVGV4dEVuY29kZXIpKVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgXFwnbmV3XFwnPycpO1xuICAgIG9wdGlvbnMgPSBUb0RpY3Rpb25hcnkob3B0aW9ucyk7XG5cbiAgICAvLyBBIFRleHRFbmNvZGVyIG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBlbmNvZGluZyBhbmQgZW5jb2Rlci5cblxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIHRoaXMuX2VuY29kaW5nID0gbnVsbDtcbiAgICAvKiogQHByaXZhdGUgQHR5cGUgez9FbmNvZGVyfSAqL1xuICAgIHRoaXMuX2VuY29kZXIgPSBudWxsO1xuXG4gICAgLy8gTm9uLXN0YW5kYXJkXG4gICAgLyoqIEBwcml2YXRlIEB0eXBlIHtib29sZWFufSAqL1xuICAgIHRoaXMuX2RvX25vdF9mbHVzaCA9IGZhbHNlO1xuICAgIC8qKiBAcHJpdmF0ZSBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIHRoaXMuX2ZhdGFsID0gQm9vbGVhbihvcHRpb25zWydmYXRhbCddKSA/ICdmYXRhbCcgOiAncmVwbGFjZW1lbnQnO1xuXG4gICAgLy8gMS4gTGV0IGVuYyBiZSBhIG5ldyBUZXh0RW5jb2RlciBvYmplY3QuXG4gICAgdmFyIGVuYyA9IHRoaXM7XG5cbiAgICAvLyAyLiBTZXQgZW5jJ3MgZW5jb2RpbmcgdG8gVVRGLTgncyBlbmNvZGVyLlxuICAgIGlmIChCb29sZWFuKG9wdGlvbnNbJ05PTlNUQU5EQVJEX2FsbG93TGVnYWN5RW5jb2RpbmcnXSkpIHtcbiAgICAgIC8vIE5PTlNUQU5EQVJEIGJlaGF2aW9yLlxuICAgICAgbGFiZWwgPSBsYWJlbCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKGxhYmVsKSA6IERFRkFVTFRfRU5DT0RJTkc7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhsYWJlbCk7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IG51bGwgfHwgZW5jb2RpbmcubmFtZSA9PT0gJ3JlcGxhY2VtZW50JylcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGxhYmVsKTtcbiAgICAgIGlmICghZW5jb2RlcnNbZW5jb2RpbmcubmFtZV0pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0VuY29kZXIgbm90IHByZXNlbnQuJyArXG4gICAgICAgICAgICAgICAgICAgICcgRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PycpO1xuICAgICAgfVxuICAgICAgZW5jLl9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGFuZGFyZCBiZWhhdmlvci5cbiAgICAgIGVuYy5fZW5jb2RpbmcgPSBnZXRFbmNvZGluZygndXRmLTgnKTtcblxuICAgICAgaWYgKGxhYmVsICE9PSB1bmRlZmluZWQgJiYgJ2NvbnNvbGUnIGluIGdsb2JhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCAnXG4gICAgICAgICAgICAgICAgICAgICArICd3aGljaCBpcyBpZ25vcmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBwcmUtRVM1IHJ1bnRpbWVzOlxuICAgIGlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5KVxuICAgICAgdGhpcy5lbmNvZGluZyA9IGVuYy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gMy4gUmV0dXJuIGVuYy5cbiAgICByZXR1cm4gZW5jO1xuICB9XG5cbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgIC8vIFRoZSBlbmNvZGluZyBhdHRyaWJ1dGUncyBnZXR0ZXIgbXVzdCByZXR1cm4gZW5jb2RpbmcncyBuYW1lLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0RW5jb2Rlci5wcm90b3R5cGUsICdlbmNvZGluZycsIHtcbiAgICAgIC8qKiBAdGhpcyB7VGV4dEVuY29kZXJ9ICovXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfc3RyaW5nIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnNcbiAgICogQHJldHVybiB7IVVpbnQ4QXJyYXl9IEVuY29kZWQgYnl0ZXMsIGFzIGEgVWludDhBcnJheS5cbiAgICovXG4gIFRleHRFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUob3B0X3N0cmluZywgb3B0aW9ucykge1xuICAgIG9wdF9zdHJpbmcgPSBvcHRfc3RyaW5nID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhvcHRfc3RyaW5nKTtcbiAgICBvcHRpb25zID0gVG9EaWN0aW9uYXJ5KG9wdGlvbnMpO1xuXG4gICAgLy8gTk9URTogVGhpcyBvcHRpb24gaXMgbm9uc3RhbmRhcmQuIE5vbmUgb2YgdGhlIGVuY29kaW5nc1xuICAgIC8vIHBlcm1pdHRlZCBmb3IgZW5jb2RpbmcgKGkuZS4gVVRGLTgsIFVURi0xNikgYXJlIHN0YXRlZnVsIHdoZW5cbiAgICAvLyB0aGUgaW5wdXQgaXMgYSBVU1ZTdHJpbmcgc28gc3RyZWFtaW5nIGlzIG5vdCBuZWNlc3NhcnkuXG4gICAgaWYgKCF0aGlzLl9kb19ub3RfZmx1c2gpXG4gICAgICB0aGlzLl9lbmNvZGVyID0gZW5jb2RlcnNbdGhpcy5fZW5jb2RpbmcubmFtZV0oe1xuICAgICAgICBmYXRhbDogdGhpcy5fZmF0YWwgPT09ICdmYXRhbCd9KTtcbiAgICB0aGlzLl9kb19ub3RfZmx1c2ggPSBCb29sZWFuKG9wdGlvbnNbJ3N0cmVhbSddKTtcblxuICAgIC8vIDEuIENvbnZlcnQgaW5wdXQgdG8gYSBzdHJlYW0uXG4gICAgdmFyIGlucHV0ID0gbmV3IFN0cmVhbShzdHJpbmdUb0NvZGVQb2ludHMob3B0X3N0cmluZykpO1xuXG4gICAgLy8gMi4gTGV0IG91dHB1dCBiZSBhIG5ldyBzdHJlYW1cbiAgICB2YXIgb3V0cHV0ID0gW107XG5cbiAgICAvKiogQHR5cGUgez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9ICovXG4gICAgdmFyIHJlc3VsdDtcbiAgICAvLyAzLiBXaGlsZSB0cnVlLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEuIExldCB0b2tlbiBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgZnJvbSBpbnB1dC5cbiAgICAgIHZhciB0b2tlbiA9IGlucHV0LnJlYWQoKTtcbiAgICAgIGlmICh0b2tlbiA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyB0b2tlbiBmb3IgZW5jb2RlcixcbiAgICAgIC8vIGlucHV0LCBvdXRwdXQuXG4gICAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVyLmhhbmRsZXIoaW5wdXQsIHRva2VuKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IGZpbmlzaGVkKVxuICAgICAgICBicmVhaztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpXG4gICAgICAgIG91dHB1dC5wdXNoLmFwcGx5KG91dHB1dCwgLyoqQHR5cGUgeyFBcnJheS48bnVtYmVyPn0qLyhyZXN1bHQpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgb3V0cHV0LnB1c2gocmVzdWx0KTtcbiAgICB9XG4gICAgLy8gVE9ETzogQWxpZ24gd2l0aCBzcGVjIGFsZ29yaXRobS5cbiAgICBpZiAoIXRoaXMuX2RvX25vdF9mbHVzaCkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2Rlci5oYW5kbGVyKGlucHV0LCBpbnB1dC5yZWFkKCkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBmaW5pc2hlZClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSlcbiAgICAgICAgICBvdXRwdXQucHVzaC5hcHBseShvdXRwdXQsIC8qKkB0eXBlIHshQXJyYXkuPG51bWJlcj59Ki8ocmVzdWx0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXRwdXQucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZW5jb2RlciA9IG51bGw7XG4gICAgfVxuICAgIC8vIDMuIElmIHJlc3VsdCBpcyBmaW5pc2hlZCwgY29udmVydCBvdXRwdXQgaW50byBhIGJ5dGUgc2VxdWVuY2UsXG4gICAgLy8gYW5kIHRoZW4gcmV0dXJuIGEgVWludDhBcnJheSBvYmplY3Qgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXJcbiAgICAvLyBjb250YWluaW5nIG91dHB1dC5cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkob3V0cHV0KTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDkuIFRoZSBlbmNvZGluZ1xuICAvL1xuXG4gIC8vIDkuMSB1dGYtOFxuXG4gIC8vIDkuMS4xIHV0Zi04IGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBVVEY4RGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcblxuICAgIC8vIHV0Zi04J3MgZGVjb2RlcidzIGhhcyBhbiBhc3NvY2lhdGVkIHV0Zi04IGNvZGUgcG9pbnQsIHV0Zi04XG4gICAgLy8gYnl0ZXMgc2VlbiwgYW5kIHV0Zi04IGJ5dGVzIG5lZWRlZCAoYWxsIGluaXRpYWxseSAwKSwgYSB1dGYtOFxuICAgIC8vIGxvd2VyIGJvdW5kYXJ5IChpbml0aWFsbHkgMHg4MCksIGFuZCBhIHV0Zi04IHVwcGVyIGJvdW5kYXJ5XG4gICAgLy8gKGluaXRpYWxseSAweEJGKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIHV0ZjhfY29kZV9wb2ludCA9IDAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X2J5dGVzX3NlZW4gPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9ieXRlc19uZWVkZWQgPSAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4ODAsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHhCRjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCB1dGYtOCBieXRlcyBuZWVkZWQgaXMgbm90IDAsXG4gICAgICAvLyBzZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIHV0ZjhfYnl0ZXNfbmVlZGVkICE9PSAwKSB7XG4gICAgICAgIHV0ZjhfYnl0ZXNfbmVlZGVkID0gMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgdXRmLTggYnl0ZXMgbmVlZGVkIGlzIDAsIGJhc2VkIG9uIGJ5dGU6XG4gICAgICBpZiAodXRmOF9ieXRlc19uZWVkZWQgPT09IDApIHtcblxuICAgICAgICAvLyAweDAwIHRvIDB4N0ZcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgwMCwgMHg3RikpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGJ5dGUuXG4gICAgICAgICAgcmV0dXJuIGJpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweEMyIHRvIDB4REZcbiAgICAgICAgZWxzZSBpZiAoaW5SYW5nZShiaXRlLCAweEMyLCAweERGKSkge1xuICAgICAgICAgIC8vIDEuIFNldCB1dGYtOCBieXRlcyBuZWVkZWQgdG8gMS5cbiAgICAgICAgICB1dGY4X2J5dGVzX25lZWRlZCA9IDE7XG5cbiAgICAgICAgICAvLyAyLiBTZXQgVVRGLTggY29kZSBwb2ludCB0byBieXRlICYgMHgxRi5cbiAgICAgICAgICB1dGY4X2NvZGVfcG9pbnQgPSBiaXRlICYgMHgxRjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4RTAgdG8gMHhFRlxuICAgICAgICBlbHNlIGlmIChpblJhbmdlKGJpdGUsIDB4RTAsIDB4RUYpKSB7XG4gICAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyAweEUwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHhBMC5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhFMClcbiAgICAgICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweEEwO1xuICAgICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgMHhFRCwgc2V0IHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4OUYuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RUQpXG4gICAgICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHg5RjtcbiAgICAgICAgICAvLyAzLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDIuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAyO1xuICAgICAgICAgIC8vIDQuIFNldCBVVEYtOCBjb2RlIHBvaW50IHRvIGJ5dGUgJiAweEYuXG4gICAgICAgICAgdXRmOF9jb2RlX3BvaW50ID0gYml0ZSAmIDB4RjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4RjAgdG8gMHhGNFxuICAgICAgICBlbHNlIGlmIChpblJhbmdlKGJpdGUsIDB4RjAsIDB4RjQpKSB7XG4gICAgICAgICAgLy8gMS4gSWYgYnl0ZSBpcyAweEYwLCBzZXQgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gMHg5MC5cbiAgICAgICAgICBpZiAoYml0ZSA9PT0gMHhGMClcbiAgICAgICAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDkwO1xuICAgICAgICAgIC8vIDIuIElmIGJ5dGUgaXMgMHhGNCwgc2V0IHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4OEYuXG4gICAgICAgICAgaWYgKGJpdGUgPT09IDB4RjQpXG4gICAgICAgICAgICB1dGY4X3VwcGVyX2JvdW5kYXJ5ID0gMHg4RjtcbiAgICAgICAgICAvLyAzLiBTZXQgdXRmLTggYnl0ZXMgbmVlZGVkIHRvIDMuXG4gICAgICAgICAgdXRmOF9ieXRlc19uZWVkZWQgPSAzO1xuICAgICAgICAgIC8vIDQuIFNldCBVVEYtOCBjb2RlIHBvaW50IHRvIGJ5dGUgJiAweDcuXG4gICAgICAgICAgdXRmOF9jb2RlX3BvaW50ID0gYml0ZSAmIDB4NztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZXJyb3IuXG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gY29udGludWUuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBieXRlIGlzIG5vdCBpbiB0aGUgcmFuZ2UgdXRmLTggbG93ZXIgYm91bmRhcnkgdG8gdXRmLThcbiAgICAgIC8vIHVwcGVyIGJvdW5kYXJ5LCBpbmNsdXNpdmUsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmICghaW5SYW5nZShiaXRlLCB1dGY4X2xvd2VyX2JvdW5kYXJ5LCB1dGY4X3VwcGVyX2JvdW5kYXJ5KSkge1xuXG4gICAgICAgIC8vIDEuIFNldCB1dGYtOCBjb2RlIHBvaW50LCB1dGYtOCBieXRlcyBuZWVkZWQsIGFuZCB1dGYtOFxuICAgICAgICAvLyBieXRlcyBzZWVuIHRvIDAsIHNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweDgwLCBhbmQgc2V0XG4gICAgICAgIC8vIHV0Zi04IHVwcGVyIGJvdW5kYXJ5IHRvIDB4QkYuXG4gICAgICAgIHV0ZjhfY29kZV9wb2ludCA9IHV0ZjhfYnl0ZXNfbmVlZGVkID0gdXRmOF9ieXRlc19zZWVuID0gMDtcbiAgICAgICAgdXRmOF9sb3dlcl9ib3VuZGFyeSA9IDB4ODA7XG4gICAgICAgIHV0ZjhfdXBwZXJfYm91bmRhcnkgPSAweEJGO1xuXG4gICAgICAgIC8vIDIuIFByZXBlbmQgYnl0ZSB0byBzdHJlYW0uXG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGJpdGUpO1xuXG4gICAgICAgIC8vIDMuIFJldHVybiBlcnJvci5cbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFNldCB1dGYtOCBsb3dlciBib3VuZGFyeSB0byAweDgwIGFuZCB1dGYtOCB1cHBlciBib3VuZGFyeVxuICAgICAgLy8gdG8gMHhCRi5cbiAgICAgIHV0ZjhfbG93ZXJfYm91bmRhcnkgPSAweDgwO1xuICAgICAgdXRmOF91cHBlcl9ib3VuZGFyeSA9IDB4QkY7XG5cbiAgICAgIC8vIDYuIFNldCBVVEYtOCBjb2RlIHBvaW50IHRvIChVVEYtOCBjb2RlIHBvaW50IDw8IDYpIHwgKGJ5dGUgJlxuICAgICAgLy8gMHgzRilcbiAgICAgIHV0ZjhfY29kZV9wb2ludCA9ICh1dGY4X2NvZGVfcG9pbnQgPDwgNikgfCAoYml0ZSAmIDB4M0YpO1xuXG4gICAgICAvLyA3LiBJbmNyZWFzZSB1dGYtOCBieXRlcyBzZWVuIGJ5IG9uZS5cbiAgICAgIHV0ZjhfYnl0ZXNfc2VlbiArPSAxO1xuXG4gICAgICAvLyA4LiBJZiB1dGYtOCBieXRlcyBzZWVuIGlzIG5vdCBlcXVhbCB0byB1dGYtOCBieXRlcyBuZWVkZWQsXG4gICAgICAvLyBjb250aW51ZS5cbiAgICAgIGlmICh1dGY4X2J5dGVzX3NlZW4gIT09IHV0ZjhfYnl0ZXNfbmVlZGVkKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gOS4gTGV0IGNvZGUgcG9pbnQgYmUgdXRmLTggY29kZSBwb2ludC5cbiAgICAgIHZhciBjb2RlX3BvaW50ID0gdXRmOF9jb2RlX3BvaW50O1xuXG4gICAgICAvLyAxMC4gU2V0IHV0Zi04IGNvZGUgcG9pbnQsIHV0Zi04IGJ5dGVzIG5lZWRlZCwgYW5kIHV0Zi04IGJ5dGVzXG4gICAgICAvLyBzZWVuIHRvIDAuXG4gICAgICB1dGY4X2NvZGVfcG9pbnQgPSB1dGY4X2J5dGVzX25lZWRlZCA9IHV0ZjhfYnl0ZXNfc2VlbiA9IDA7XG5cbiAgICAgIC8vIDExLiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICB9O1xuICB9XG5cbiAgLy8gOS4xLjIgdXRmLTggZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIFVURjhFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlIHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBTZXQgY291bnQgYW5kIG9mZnNldCBiYXNlZCBvbiB0aGUgcmFuZ2UgY29kZSBwb2ludCBpcyBpbjpcbiAgICAgIHZhciBjb3VudCwgb2Zmc2V0O1xuICAgICAgLy8gVSswMDgwIHRvIFUrMDdGRiwgaW5jbHVzaXZlOlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDgwLCAweDA3RkYpKSB7XG4gICAgICAgIC8vIDEgYW5kIDB4QzBcbiAgICAgICAgY291bnQgPSAxO1xuICAgICAgICBvZmZzZXQgPSAweEMwO1xuICAgICAgfVxuICAgICAgLy8gVSswODAwIHRvIFUrRkZGRiwgaW5jbHVzaXZlOlxuICAgICAgZWxzZSBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweDA4MDAsIDB4RkZGRikpIHtcbiAgICAgICAgLy8gMiBhbmQgMHhFMFxuICAgICAgICBjb3VudCA9IDI7XG4gICAgICAgIG9mZnNldCA9IDB4RTA7XG4gICAgICB9XG4gICAgICAvLyBVKzEwMDAwIHRvIFUrMTBGRkZGLCBpbmNsdXNpdmU6XG4gICAgICBlbHNlIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4MTAwMDAsIDB4MTBGRkZGKSkge1xuICAgICAgICAvLyAzIGFuZCAweEYwXG4gICAgICAgIGNvdW50ID0gMztcbiAgICAgICAgb2Zmc2V0ID0gMHhGMDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gTGV0IGJ5dGVzIGJlIGEgYnl0ZSBzZXF1ZW5jZSB3aG9zZSBmaXJzdCBieXRlIGlzIChjb2RlXG4gICAgICAvLyBwb2ludCA+PiAoNiDDlyBjb3VudCkpICsgb2Zmc2V0LlxuICAgICAgdmFyIGJ5dGVzID0gWyhjb2RlX3BvaW50ID4+ICg2ICogY291bnQpKSArIG9mZnNldF07XG5cbiAgICAgIC8vIDUuIFJ1biB0aGVzZSBzdWJzdGVwcyB3aGlsZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gMDpcbiAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcblxuICAgICAgICAvLyAxLiBTZXQgdGVtcCB0byBjb2RlIHBvaW50ID4+ICg2IMOXIChjb3VudCDiiJIgMSkpLlxuICAgICAgICB2YXIgdGVtcCA9IGNvZGVfcG9pbnQgPj4gKDYgKiAoY291bnQgLSAxKSk7XG5cbiAgICAgICAgLy8gMi4gQXBwZW5kIHRvIGJ5dGVzIDB4ODAgfCAodGVtcCAmIDB4M0YpLlxuICAgICAgICBieXRlcy5wdXNoKDB4ODAgfCAodGVtcCAmIDB4M0YpKTtcblxuICAgICAgICAvLyAzLiBEZWNyZWFzZSBjb3VudCBieSBvbmUuXG4gICAgICAgIGNvdW50IC09IDE7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIFJldHVybiBieXRlcyBieXRlcywgaW4gb3JkZXIuXG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ1VURi04J10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEY4RW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snVVRGLTgnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjhEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vXG4gIC8vIDEwLiBMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzXG4gIC8vXG5cbiAgLy8gMTAuMSBzaW5nbGUtYnl0ZSBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBpbmRleCBUaGUgZW5jb2RpbmcgaW5kZXguXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2luZ2xlQnl0ZURlY29kZXIoaW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyAzLiBMZXQgY29kZSBwb2ludCBiZSB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgYnl0ZSDiiJIgMHg4MCBpblxuICAgICAgLy8gaW5kZXggc2luZ2xlLWJ5dGUuXG4gICAgICB2YXIgY29kZV9wb2ludCA9IGluZGV4W2JpdGUgLSAweDgwXTtcblxuICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIC8vIDUuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuICAgIH07XG4gIH1cblxuICAvLyAxMC4yIHNpbmdsZS1ieXRlIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHshQXJyYXkuPD9udW1iZXI+fSBpbmRleCBUaGUgZW5jb2RpbmcgaW5kZXguXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2luZ2xlQnl0ZUVuY29kZXIoaW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlIHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleFxuICAgICAgLy8gc2luZ2xlLWJ5dGUuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDUuIFJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgcG9pbnRlciArIDB4ODAuXG4gICAgICByZXR1cm4gcG9pbnRlciArIDB4ODA7XG4gICAgfTtcbiAgfVxuXG4gIChmdW5jdGlvbigpIHtcbiAgICBpZiAoISgnZW5jb2RpbmctaW5kZXhlcycgaW4gZ2xvYmFsKSlcbiAgICAgIHJldHVybjtcbiAgICBlbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihjYXRlZ29yeSkge1xuICAgICAgaWYgKGNhdGVnb3J5LmhlYWRpbmcgIT09ICdMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2F0ZWdvcnkuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBlbmNvZGluZy5uYW1lO1xuICAgICAgICB2YXIgaWR4ID0gaW5kZXgobmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICAgICAgICBkZWNvZGVyc1tuYW1lXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUJ5dGVEZWNvZGVyKGlkeCwgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgICAgICAgZW5jb2RlcnNbbmFtZV0gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVCeXRlRW5jb2RlcihpZHgsIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0oKSk7XG5cbiAgLy9cbiAgLy8gMTEuIExlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDExLjEgZ2JrXG5cbiAgLy8gMTEuMS4xIGdiayBkZWNvZGVyXG4gIC8vIGdiaydzIGRlY29kZXIgaXMgZ2IxODAzMCdzIGRlY29kZXIuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ0dCSyddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR0IxODAzMERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTEuMS4yIGdiayBlbmNvZGVyXG4gIC8vIGdiaydzIGVuY29kZXIgaXMgZ2IxODAzMCdzIGVuY29kZXIgd2l0aCBpdHMgZ2JrIGZsYWcgc2V0LlxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydHQksnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMsIHRydWUpO1xuICB9O1xuXG4gIC8vIDExLjIgZ2IxODAzMFxuXG4gIC8vIDExLjIuMSBnYjE4MDMwIGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBHQjE4MDMwRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBnYjE4MDMwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwXG4gICAgLy8gc2Vjb25kLCBhbmQgZ2IxODAzMCB0aGlyZCAoYWxsIGluaXRpYWxseSAweDAwKS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGdiMTgwMzBfZmlyc3QgPSAweDAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZ2IxODAzMF9zZWNvbmQgPSAweDAwLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gZ2IxODAzMF90aGlyZCA9IDB4MDA7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGdiMTgwMzAgZmlyc3QsIGdiMTgwMzBcbiAgICAgIC8vIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgYXJlIDB4MDAsIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGdiMTgwMzBfZmlyc3QgPT09IDB4MDAgJiZcbiAgICAgICAgICBnYjE4MDMwX3NlY29uZCA9PT0gMHgwMCAmJiBnYjE4MDMwX3RoaXJkID09PSAweDAwKSB7XG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgIH1cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSwgYW5kIGdiMTgwMzAgZmlyc3QsIGdiMTgwMzBcbiAgICAgIC8vIHNlY29uZCwgb3IgZ2IxODAzMCB0aGlyZCBpcyBub3QgMHgwMCwgc2V0IGdiMTgwMzAgZmlyc3QsXG4gICAgICAvLyBnYjE4MDMwIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmXG4gICAgICAgICAgKGdiMTgwMzBfZmlyc3QgIT09IDB4MDAgfHwgZ2IxODAzMF9zZWNvbmQgIT09IDB4MDAgfHxcbiAgICAgICAgICAgZ2IxODAzMF90aGlyZCAhPT0gMHgwMCkpIHtcbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfc2Vjb25kID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF90aGlyZCA9IDB4MDA7XG4gICAgICAgIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG4gICAgICB2YXIgY29kZV9wb2ludDtcbiAgICAgIC8vIDMuIElmIGdiMTgwMzAgdGhpcmQgaXMgbm90IDB4MDAsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChnYjE4MDMwX3RoaXJkICE9PSAweDAwKSB7XG4gICAgICAgIC8vIDEuIExldCBjb2RlIHBvaW50IGJlIG51bGwuXG4gICAgICAgIGNvZGVfcG9pbnQgPSBudWxsO1xuICAgICAgICAvLyAyLiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDMwIHRvIDB4MzksIGluY2x1c2l2ZSwgc2V0XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgdG8gdGhlIGluZGV4IGdiMTgwMzAgcmFuZ2VzIGNvZGUgcG9pbnQgZm9yXG4gICAgICAgIC8vICgoKGdiMTgwMzAgZmlyc3Qg4oiSIDB4ODEpIMOXIDEwICsgZ2IxODAzMCBzZWNvbmQg4oiSIDB4MzApIMOXXG4gICAgICAgIC8vIDEyNiArIGdiMTgwMzAgdGhpcmQg4oiSIDB4ODEpIMOXIDEwICsgYnl0ZSDiiJIgMHgzMC5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgzMCwgMHgzOSkpIHtcbiAgICAgICAgICBjb2RlX3BvaW50ID0gaW5kZXhHQjE4MDMwUmFuZ2VzQ29kZVBvaW50Rm9yKFxuICAgICAgICAgICAgICAoKChnYjE4MDMwX2ZpcnN0IC0gMHg4MSkgKiAxMCArIGdiMTgwMzBfc2Vjb25kIC0gMHgzMCkgKiAxMjYgK1xuICAgICAgICAgICAgICAgZ2IxODAzMF90aGlyZCAtIDB4ODEpICogMTAgKyBiaXRlIC0gMHgzMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBMZXQgYnVmZmVyIGJlIGEgYnl0ZSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGdiMTgwMzBcbiAgICAgICAgLy8gc2Vjb25kLCBnYjE4MDMwIHRoaXJkLCBhbmQgYnl0ZSwgaW4gb3JkZXIuXG4gICAgICAgIHZhciBidWZmZXIgPSBbZ2IxODAzMF9zZWNvbmQsIGdiMTgwMzBfdGhpcmQsIGJpdGVdO1xuXG4gICAgICAgIC8vIDQuIFNldCBnYjE4MDMwIGZpcnN0LCBnYjE4MDMwIHNlY29uZCwgYW5kIGdiMTgwMzAgdGhpcmQgdG9cbiAgICAgICAgLy8gMHgwMC5cbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IDB4MDA7XG4gICAgICAgIGdiMTgwMzBfc2Vjb25kID0gMHgwMDtcbiAgICAgICAgZ2IxODAzMF90aGlyZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsLCBwcmVwZW5kIGJ1ZmZlciB0byBzdHJlYW0gYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBzdHJlYW0ucHJlcGVuZChidWZmZXIpO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gUmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZ2IxODAzMCBzZWNvbmQgaXMgbm90IDB4MDAsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChnYjE4MDMwX3NlY29uZCAhPT0gMHgwMCkge1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXRcbiAgICAgICAgLy8gZ2IxODAzMCB0aGlyZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgICAgZ2IxODAzMF90aGlyZCA9IGJpdGU7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBQcmVwZW5kIGdiMTgwMzAgc2Vjb25kIGZvbGxvd2VkIGJ5IGJ5dGUgdG8gc3RyZWFtLCBzZXRcbiAgICAgICAgLy8gZ2IxODAzMCBmaXJzdCBhbmQgZ2IxODAzMCBzZWNvbmQgdG8gMHgwMCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoW2diMTgwMzBfc2Vjb25kLCBiaXRlXSk7XG4gICAgICAgIGdiMTgwMzBfZmlyc3QgPSAweDAwO1xuICAgICAgICBnYjE4MDMwX3NlY29uZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiBnYjE4MDMwIGZpcnN0IGlzIG5vdCAweDAwLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAoZ2IxODAzMF9maXJzdCAhPT0gMHgwMCkge1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4MzAgdG8gMHgzOSwgaW5jbHVzaXZlLCBzZXRcbiAgICAgICAgLy8gZ2IxODAzMCBzZWNvbmQgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDMwLCAweDM5KSkge1xuICAgICAgICAgIGdiMTgwMzBfc2Vjb25kID0gYml0ZTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIExldCBsZWFkIGJlIGdiMTgwMzAgZmlyc3QsIGxldCBwb2ludGVyIGJlIG51bGwsIGFuZCBzZXRcbiAgICAgICAgLy8gZ2IxODAzMCBmaXJzdCB0byAweDAwLlxuICAgICAgICB2YXIgbGVhZCA9IGdiMTgwMzBfZmlyc3Q7XG4gICAgICAgIHZhciBwb2ludGVyID0gbnVsbDtcbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMy4gTGV0IG9mZnNldCBiZSAweDQwIGlmIGJ5dGUgaXMgbGVzcyB0aGFuIDB4N0YgYW5kIDB4NDFcbiAgICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgb2Zmc2V0ID0gYml0ZSA8IDB4N0YgPyAweDQwIDogMHg0MTtcblxuICAgICAgICAvLyA0LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweDQwIHRvIDB4N0UsIGluY2x1c2l2ZSwgb3IgMHg4MFxuICAgICAgICAvLyB0byAweEZFLCBpbmNsdXNpdmUsIHNldCBwb2ludGVyIHRvIChsZWFkIOKIkiAweDgxKSDDlyAxOTAgK1xuICAgICAgICAvLyAoYnl0ZSDiiJIgb2Zmc2V0KS5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MCwgMHg3RSkgfHwgaW5SYW5nZShiaXRlLCAweDgwLCAweEZFKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSAweDgxKSAqIDE5MCArIChiaXRlIC0gb2Zmc2V0KTtcblxuICAgICAgICAvLyA1LiBMZXQgY29kZSBwb2ludCBiZSBudWxsIGlmIHBvaW50ZXIgaXMgbnVsbCBhbmQgdGhlIGluZGV4XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggZ2IxODAzMCBvdGhlcndpc2UuXG4gICAgICAgIGNvZGVfcG9pbnQgPSBwb2ludGVyID09PSBudWxsID8gbnVsbCA6XG4gICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnZ2IxODAzMCcpKTtcblxuICAgICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAvLyBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNy4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDguIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZVxuICAgICAgLy8gaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDcuIElmIGJ5dGUgaXMgMHg4MCwgcmV0dXJuIGNvZGUgcG9pbnQgVSsyMEFDLlxuICAgICAgaWYgKGJpdGUgPT09IDB4ODApXG4gICAgICAgIHJldHVybiAweDIwQUM7XG5cbiAgICAgIC8vIDguIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXRcbiAgICAgIC8vIGdiMTgwMzAgZmlyc3QgdG8gYnl0ZSBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHhGRSkpIHtcbiAgICAgICAgZ2IxODAzMF9maXJzdCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA5LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTEuMi4yIGdiMTgwMzAgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFuPX0gZ2JrX2ZsYWdcbiAgICovXG4gIGZ1bmN0aW9uIEdCMTgwMzBFbmNvZGVyKG9wdGlvbnMsIGdia19mbGFnKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvLyBnYjE4MDMwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBnYmsgZmxhZyAoaW5pdGlhbGx5IHVuc2V0KS5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gSWYgY29kZSBwb2ludCBpcyBVK0U1RTUsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHhFNUU1KVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA0LiBJZiB0aGUgZ2JrIGZsYWcgaXMgc2V0IGFuZCBjb2RlIHBvaW50IGlzIFUrMjBBQywgcmV0dXJuXG4gICAgICAvLyBieXRlIDB4ODAuXG4gICAgICBpZiAoZ2JrX2ZsYWcgJiYgY29kZV9wb2ludCA9PT0gMHgyMEFDKVxuICAgICAgICByZXR1cm4gMHg4MDtcblxuICAgICAgLy8gNS4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGdiMTgwMzAuXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnZ2IxODAzMCcpKTtcblxuICAgICAgLy8gNi4gSWYgcG9pbnRlciBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgICAgaWYgKHBvaW50ZXIgIT09IG51bGwpIHtcblxuICAgICAgICAvLyAxLiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gMTkwKSArIDB4ODEuXG4gICAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDE5MCkgKyAweDgxO1xuXG4gICAgICAgIC8vIDIuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTkwLlxuICAgICAgICB2YXIgdHJhaWwgPSBwb2ludGVyICUgMTkwO1xuXG4gICAgICAgIC8vIDMuIExldCBvZmZzZXQgYmUgMHg0MCBpZiB0cmFpbCBpcyBsZXNzIHRoYW4gMHgzRiBhbmQgMHg0MSBvdGhlcndpc2UuXG4gICAgICAgIHZhciBvZmZzZXQgPSB0cmFpbCA8IDB4M0YgPyAweDQwIDogMHg0MTtcblxuICAgICAgICAvLyA0LiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwgKyBvZmZzZXQuXG4gICAgICAgIHJldHVybiBbbGVhZCwgdHJhaWwgKyBvZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBJZiBnYmsgZmxhZyBpcyBzZXQsIHJldHVybiBlcnJvciB3aXRoIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoZ2JrX2ZsYWcpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDguIFNldCBwb2ludGVyIHRvIHRoZSBpbmRleCBnYjE4MDMwIHJhbmdlcyBwb2ludGVyIGZvciBjb2RlXG4gICAgICAvLyBwb2ludC5cbiAgICAgIHBvaW50ZXIgPSBpbmRleEdCMTgwMzBSYW5nZXNQb2ludGVyRm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA5LiBMZXQgYnl0ZTEgYmUgZmxvb3IocG9pbnRlciAvIDEwIC8gMTI2IC8gMTApLlxuICAgICAgdmFyIGJ5dGUxID0gZmxvb3IocG9pbnRlciAvIDEwIC8gMTI2IC8gMTApO1xuXG4gICAgICAvLyAxMC4gU2V0IHBvaW50ZXIgdG8gcG9pbnRlciDiiJIgYnl0ZTEgw5cgMTAgw5cgMTI2IMOXIDEwLlxuICAgICAgcG9pbnRlciA9IHBvaW50ZXIgLSBieXRlMSAqIDEwICogMTI2ICogMTA7XG5cbiAgICAgIC8vIDExLiBMZXQgYnl0ZTIgYmUgZmxvb3IocG9pbnRlciAvIDEwIC8gMTI2KS5cbiAgICAgIHZhciBieXRlMiA9IGZsb29yKHBvaW50ZXIgLyAxMCAvIDEyNik7XG5cbiAgICAgIC8vIDEyLiBTZXQgcG9pbnRlciB0byBwb2ludGVyIOKIkiBieXRlMiDDlyAxMCDDlyAxMjYuXG4gICAgICBwb2ludGVyID0gcG9pbnRlciAtIGJ5dGUyICogMTAgKiAxMjY7XG5cbiAgICAgIC8vIDEzLiBMZXQgYnl0ZTMgYmUgZmxvb3IocG9pbnRlciAvIDEwKS5cbiAgICAgIHZhciBieXRlMyA9IGZsb29yKHBvaW50ZXIgLyAxMCk7XG5cbiAgICAgIC8vIDE0LiBMZXQgYnl0ZTQgYmUgcG9pbnRlciDiiJIgYnl0ZTMgw5cgMTAuXG4gICAgICB2YXIgYnl0ZTQgPSBwb2ludGVyIC0gYnl0ZTMgKiAxMDtcblxuICAgICAgLy8gMTUuIFJldHVybiBmb3VyIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgYnl0ZTEgKyAweDgxLCBieXRlMiArXG4gICAgICAvLyAweDMwLCBieXRlMyArIDB4ODEsIGJ5dGU0ICsgMHgzMC5cbiAgICAgIHJldHVybiBbYnl0ZTEgKyAweDgxLFxuICAgICAgICAgICAgICBieXRlMiArIDB4MzAsXG4gICAgICAgICAgICAgIGJ5dGUzICsgMHg4MSxcbiAgICAgICAgICAgICAgYnl0ZTQgKyAweDMwXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snZ2IxODAzMCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR0IxODAzMEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ2diMTgwMzAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEdCMTgwMzBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG5cbiAgLy9cbiAgLy8gMTIuIExlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxMi4xIEJpZzVcblxuICAvLyAxMi4xLjEgQmlnNSBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gQmlnNURlY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLy8gQmlnNSdzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgQmlnNSBsZWFkIChpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBCaWc1X2xlYWQgPSAweDAwO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIEJpZzUgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBCaWc1IGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgQmlnNV9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIEJpZzVfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIEJpZzUgbGVhZCBpcyAweDAwLCByZXR1cm5cbiAgICAgIC8vIGZpbmlzaGVkLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgQmlnNV9sZWFkID09PSAweDAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIEJpZzUgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgQmlnNSBsZWFkLCBsZXRcbiAgICAgIC8vIHBvaW50ZXIgYmUgbnVsbCwgc2V0IEJpZzUgbGVhZCB0byAweDAwLCBhbmQgdGhlbiBydW4gdGhlc2VcbiAgICAgIC8vIHN1YnN0ZXBzOlxuICAgICAgaWYgKEJpZzVfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IEJpZzVfbGVhZDtcbiAgICAgICAgdmFyIHBvaW50ZXIgPSBudWxsO1xuICAgICAgICBCaWc1X2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIExldCBvZmZzZXQgYmUgMHg0MCBpZiBieXRlIGlzIGxlc3MgdGhhbiAweDdGIGFuZCAweDYyXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IGJpdGUgPCAweDdGID8gMHg0MCA6IDB4NjI7XG5cbiAgICAgICAgLy8gMi4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFLCBpbmNsdXNpdmUsIG9yIDB4QTFcbiAgICAgICAgLy8gdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgMHg4MSkgw5cgMTU3ICtcbiAgICAgICAgLy8gKGJ5dGUg4oiSIG9mZnNldCkuXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4NDAsIDB4N0UpIHx8IGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpXG4gICAgICAgICAgcG9pbnRlciA9IChsZWFkIC0gMHg4MSkgKiAxNTcgKyAoYml0ZSAtIG9mZnNldCk7XG5cbiAgICAgICAgLy8gMy4gSWYgdGhlcmUgaXMgYSByb3cgaW4gdGhlIHRhYmxlIGJlbG93IHdob3NlIGZpcnN0IGNvbHVtblxuICAgICAgICAvLyBpcyBwb2ludGVyLCByZXR1cm4gdGhlIHR3byBjb2RlIHBvaW50cyBsaXN0ZWQgaW4gaXRzIHNlY29uZFxuICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgLy8gUG9pbnRlciB8IENvZGUgcG9pbnRzXG4gICAgICAgIC8vIC0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vIDExMzMgICAgfCBVKzAwQ0EgVSswMzA0XG4gICAgICAgIC8vIDExMzUgICAgfCBVKzAwQ0EgVSswMzBDXG4gICAgICAgIC8vIDExNjQgICAgfCBVKzAwRUEgVSswMzA0XG4gICAgICAgIC8vIDExNjYgICAgfCBVKzAwRUEgVSswMzBDXG4gICAgICAgIHN3aXRjaCAocG9pbnRlcikge1xuICAgICAgICAgIGNhc2UgMTEzMzogcmV0dXJuIFsweDAwQ0EsIDB4MDMwNF07XG4gICAgICAgICAgY2FzZSAxMTM1OiByZXR1cm4gWzB4MDBDQSwgMHgwMzBDXTtcbiAgICAgICAgICBjYXNlIDExNjQ6IHJldHVybiBbMHgwMEVBLCAweDAzMDRdO1xuICAgICAgICAgIGNhc2UgMTE2NjogcmV0dXJuIFsweDAwRUEsIDB4MDMwQ107XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBMZXQgY29kZSBwb2ludCBiZSBudWxsIGlmIHBvaW50ZXIgaXMgbnVsbCBhbmQgdGhlIGluZGV4XG4gICAgICAgIC8vIGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggQmlnNSBvdGhlcndpc2UuXG4gICAgICAgIHZhciBjb2RlX3BvaW50ID0gKHBvaW50ZXIgPT09IG51bGwpID8gbnVsbCA6XG4gICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnYmlnNScpKTtcblxuICAgICAgICAvLyA1LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAvLyBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNi4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDcuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZVxuICAgICAgLy8gaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDUuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXQgQmlnNVxuICAgICAgLy8gbGVhZCB0byBieXRlIGFuZCByZXR1cm4gY29udGludWUuXG4gICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDgxLCAweEZFKSkge1xuICAgICAgICBCaWc1X2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDEyLjEuMiBCaWc1IGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBCaWc1RW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IEJpZzUgcG9pbnRlciBmb3IgY29kZSBwb2ludC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhCaWc1UG9pbnRlckZvcihjb2RlX3BvaW50KTtcblxuICAgICAgLy8gNC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDUuIExldCBsZWFkIGJlIGZsb29yKHBvaW50ZXIgLyAxNTcpICsgMHg4MS5cbiAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDE1NykgKyAweDgxO1xuXG4gICAgICAvLyA2LiBJZiBsZWFkIGlzIGxlc3MgdGhhbiAweEExLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKGxlYWQgPCAweEExKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA3LiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDE1Ny5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSAxNTc7XG5cbiAgICAgIC8vIDguIExldCBvZmZzZXQgYmUgMHg0MCBpZiB0cmFpbCBpcyBsZXNzIHRoYW4gMHgzRiBhbmQgMHg2MlxuICAgICAgLy8gb3RoZXJ3aXNlLlxuICAgICAgdmFyIG9mZnNldCA9IHRyYWlsIDwgMHgzRiA/IDB4NDAgOiAweDYyO1xuXG4gICAgICAvLyBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwgKyBvZmZzZXQuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsICsgb2Zmc2V0XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snQmlnNSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgQmlnNUVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ0JpZzUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEJpZzVEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG5cbiAgLy9cbiAgLy8gMTMuIExlZ2FjeSBtdWx0aS1ieXRlIEphcGFuZXNlIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDEzLjEgZXVjLWpwXG5cbiAgLy8gMTMuMS4xIGV1Yy1qcCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDSlBEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuXG4gICAgLy8gZXVjLWpwJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBldWMtanAgamlzMDIxMiBmbGFnXG4gICAgLy8gKGluaXRpYWxseSB1bnNldCkgYW5kIGV1Yy1qcCBsZWFkIChpbml0aWFsbHkgMHgwMCkuXG4gICAgdmFyIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gZXVjanBfamlzMDIxMl9mbGFnID0gZmFsc2UsXG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyBldWNqcF9sZWFkID0gMHgwMDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBldWMtanAgbGVhZCBpcyBub3QgMHgwMCwgc2V0XG4gICAgICAvLyBldWMtanAgbGVhZCB0byAweDAwLCBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0gJiYgZXVjanBfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBldWNqcF9sZWFkID0gMHgwMDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZXVjLWpwIGxlYWQgaXMgMHgwMCwgcmV0dXJuXG4gICAgICAvLyBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2pwX2xlYWQgPT09IDB4MDApXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMy4gSWYgZXVjLWpwIGxlYWQgaXMgMHg4RSBhbmQgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0b1xuICAgICAgLy8gMHhERiwgaW5jbHVzaXZlLCBzZXQgZXVjLWpwIGxlYWQgdG8gMHgwMCBhbmQgcmV0dXJuIGEgY29kZVxuICAgICAgLy8gcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhGRjYxIOKIkiAweEExICsgYnl0ZS5cbiAgICAgIGlmIChldWNqcF9sZWFkID09PSAweDhFICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhERikpIHtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiAweEZGNjEgLSAweEExICsgYml0ZTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZXVjLWpwIGxlYWQgaXMgMHg4RiBhbmQgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHhBMSB0b1xuICAgICAgLy8gMHhGRSwgaW5jbHVzaXZlLCBzZXQgdGhlIGV1Yy1qcCBqaXMwMjEyIGZsYWcsIHNldCBldWMtanAgbGVhZFxuICAgICAgLy8gdG8gYnl0ZSwgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChldWNqcF9sZWFkID09PSAweDhGICYmIGluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpIHtcbiAgICAgICAgZXVjanBfamlzMDIxMl9mbGFnID0gdHJ1ZTtcbiAgICAgICAgZXVjanBfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiBldWMtanAgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgZXVjLWpwIGxlYWQsIHNldFxuICAgICAgLy8gZXVjLWpwIGxlYWQgdG8gMHgwMCwgYW5kIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChldWNqcF9sZWFkICE9PSAweDAwKSB7XG4gICAgICAgIHZhciBsZWFkID0gZXVjanBfbGVhZDtcbiAgICAgICAgZXVjanBfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMS4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbC5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSBudWxsO1xuXG4gICAgICAgIC8vIDIuIElmIGxlYWQgYW5kIGJ5dGUgYXJlIGJvdGggaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSxcbiAgICAgICAgLy8gaW5jbHVzaXZlLCBzZXQgY29kZSBwb2ludCB0byB0aGUgaW5kZXggY29kZSBwb2ludCBmb3IgKGxlYWRcbiAgICAgICAgLy8g4oiSIDB4QTEpIMOXIDk0ICsgYnl0ZSDiiJIgMHhBMSBpbiBpbmRleCBqaXMwMjA4IGlmIHRoZSBldWMtanBcbiAgICAgICAgLy8gamlzMDIxMiBmbGFnIGlzIHVuc2V0IGFuZCBpbiBpbmRleCBqaXMwMjEyIG90aGVyd2lzZS5cbiAgICAgICAgaWYgKGluUmFuZ2UobGVhZCwgMHhBMSwgMHhGRSkgJiYgaW5SYW5nZShiaXRlLCAweEExLCAweEZFKSkge1xuICAgICAgICAgIGNvZGVfcG9pbnQgPSBpbmRleENvZGVQb2ludEZvcihcbiAgICAgICAgICAgIChsZWFkIC0gMHhBMSkgKiA5NCArIChiaXRlIC0gMHhBMSksXG4gICAgICAgICAgICBpbmRleCghZXVjanBfamlzMDIxMl9mbGFnID8gJ2ppczAyMDgnIDogJ2ppczAyMTInKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBVbnNldCB0aGUgZXVjLWpwIGppczAyMTIgZmxhZy5cbiAgICAgICAgZXVjanBfamlzMDIxMl9mbGFnID0gZmFsc2U7XG5cbiAgICAgICAgLy8gNC4gSWYgYnl0ZSBpcyBub3QgaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSwgaW5jbHVzaXZlLFxuICAgICAgICAvLyBwcmVwZW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBpZiAoIWluUmFuZ2UoYml0ZSwgMHhBMSwgMHhGRSkpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNS4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDYuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZVxuICAgICAgLy8gaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDcuIElmIGJ5dGUgaXMgMHg4RSwgMHg4Riwgb3IgaW4gdGhlIHJhbmdlIDB4QTEgdG8gMHhGRSxcbiAgICAgIC8vIGluY2x1c2l2ZSwgc2V0IGV1Yy1qcCBsZWFkIHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChiaXRlID09PSAweDhFIHx8IGJpdGUgPT09IDB4OEYgfHwgaW5SYW5nZShiaXRlLCAweEExLCAweEZFKSkge1xuICAgICAgICBldWNqcF9sZWFkID0gYml0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIDguIFJldHVybiBlcnJvci5cbiAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAxMy4xLjIgZXVjLWpwIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBFVUNKUEVuY29kZXIob3B0aW9ucykge1xuICAgIHZhciBmYXRhbCA9IG9wdGlvbnMuZmF0YWw7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBJbnB1dCBzdHJlYW0uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfcG9pbnQgTmV4dCBjb2RlIHBvaW50IHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4geyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gQnl0ZShzKSB0byBlbWl0LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgY29kZV9wb2ludCkge1xuICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIHJldHVybiBhIGJ5dGUgd2hvc2VcbiAgICAgIC8vIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgcmV0dXJuIDB4NUM7XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgcmV0dXJuIDB4N0U7XG5cbiAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrRkY2MSB0byBVK0ZGOUYsIGluY2x1c2l2ZSxcbiAgICAgIC8vIHJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSAweDhFIGFuZCBjb2RlIHBvaW50IOKIklxuICAgICAgLy8gMHhGRjYxICsgMHhBMS5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4RkY2MSwgMHhGRjlGKSlcbiAgICAgICAgcmV0dXJuIFsweDhFLCBjb2RlX3BvaW50IC0gMHhGRjYxICsgMHhBMV07XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgcG9pbnQgaXMgVSsyMjEyLCBzZXQgaXQgdG8gVStGRjBELlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjIxMilcbiAgICAgICAgY29kZV9wb2ludCA9IDB4RkYwRDtcblxuICAgICAgLy8gNy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGppczAyMDguXG4gICAgICB2YXIgcG9pbnRlciA9IGluZGV4UG9pbnRlckZvcihjb2RlX3BvaW50LCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgLy8gOC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDkuIExldCBsZWFkIGJlIGZsb29yKHBvaW50ZXIgLyA5NCkgKyAweEExLlxuICAgICAgdmFyIGxlYWQgPSBmbG9vcihwb2ludGVyIC8gOTQpICsgMHhBMTtcblxuICAgICAgLy8gMTAuIExldCB0cmFpbCBiZSBwb2ludGVyICUgOTQgKyAweEExLlxuICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDk0ICsgMHhBMTtcblxuICAgICAgLy8gMTEuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkIGFuZCB0cmFpbC5cbiAgICAgIHJldHVybiBbbGVhZCwgdHJhaWxdO1xuICAgIH07XG4gIH1cblxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGVuY29kZXJzWydFVUMtSlAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0pQRW5jb2RlcihvcHRpb25zKTtcbiAgfTtcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snRVVDLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBFVUNKUERlY29kZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gMTMuMiBpc28tMjAyMi1qcFxuXG4gIC8vIDEzLjIuMSBpc28tMjAyMi1qcCBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gSVNPMjAyMkpQRGVjb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKiogQGVudW0gKi9cbiAgICB2YXIgc3RhdGVzID0ge1xuICAgICAgQVNDSUk6IDAsXG4gICAgICBSb21hbjogMSxcbiAgICAgIEthdGFrYW5hOiAyLFxuICAgICAgTGVhZEJ5dGU6IDMsXG4gICAgICBUcmFpbEJ5dGU6IDQsXG4gICAgICBFc2NhcGVTdGFydDogNSxcbiAgICAgIEVzY2FwZTogNlxuICAgIH07XG4gICAgLy8gaXNvLTIwMjItanAncyBkZWNvZGVyIGhhcyBhbiBhc3NvY2lhdGVkIGlzby0yMDIyLWpwIGRlY29kZXJcbiAgICAvLyBzdGF0ZSAoaW5pdGlhbGx5IEFTQ0lJKSwgaXNvLTIwMjItanAgZGVjb2RlciBvdXRwdXQgc3RhdGVcbiAgICAvLyAoaW5pdGlhbGx5IEFTQ0lJKSwgaXNvLTIwMjItanAgbGVhZCAoaW5pdGlhbGx5IDB4MDApLCBhbmRcbiAgICAvLyBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyAoaW5pdGlhbGx5IHVuc2V0KS5cbiAgICB2YXIgLyoqIEB0eXBlIHtudW1iZXJ9ICovIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkFTQ0lJLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gaXNvMjAyMmpwX2RlY29kZXJfb3V0cHV0X3N0YXRlID0gc3RhdGVzLkFTQ0lJLFxuICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8gaXNvMjAyMmpwX2xlYWQgPSAweDAwLFxuICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gc3dpdGNoaW5nIG9uIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGU6XG4gICAgICBzd2l0Y2ggKGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSBzdGF0ZXMuQVNDSUk6XG4gICAgICAgIC8vIEFTQ0lJXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDAwIHRvIDB4N0YsIGV4Y2x1ZGluZyAweDBFLCAweDBGLCBhbmQgMHgxQlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDAwLCAweDdGKSAmJiBiaXRlICE9PSAweDBFXG4gICAgICAgICAgICAmJiBiaXRlICE9PSAweDBGICYmIGJpdGUgIT09IDB4MUIpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBiaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kLW9mLXN0cmVhbVxuICAgICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSkge1xuICAgICAgICAgIC8vIFJldHVybiBmaW5pc2hlZC5cbiAgICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuUm9tYW46XG4gICAgICAgIC8vIFJvbWFuXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDVDXG4gICAgICAgIGlmIChiaXRlID09PSAweDVDKSB7XG4gICAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gY29kZSBwb2ludFxuICAgICAgICAgIC8vIFUrMDBBNS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gMHgwMEE1O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMHg3RVxuICAgICAgICBpZiAoYml0ZSA9PT0gMHg3RSkge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyBVKzIwM0UuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIDB4MjAzRTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4MDAgdG8gMHg3RiwgZXhjbHVkaW5nIDB4MEUsIDB4MEYsIDB4MUIsIDB4NUMsIGFuZCAweDdFXG4gICAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4MDAsIDB4N0YpICYmIGJpdGUgIT09IDB4MEUgJiYgYml0ZSAhPT0gMHgwRlxuICAgICAgICAgICAgJiYgYml0ZSAhPT0gMHgxQiAmJiBiaXRlICE9PSAweDVDICYmIGJpdGUgIT09IDB4N0UpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBiaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kLW9mLXN0cmVhbVxuICAgICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSkge1xuICAgICAgICAgIC8vIFJldHVybiBmaW5pc2hlZC5cbiAgICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuS2F0YWthbmE6XG4gICAgICAgIC8vIEthdGFrYW5hXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDIxIHRvIDB4NUZcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgyMSwgMHg1RikpIHtcbiAgICAgICAgICAvLyBVbnNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcgYW5kIHJldHVybiBhIGNvZGUgcG9pbnRcbiAgICAgICAgICAvLyB3aG9zZSB2YWx1ZSBpcyAweEZGNjEg4oiSIDB4MjEgKyBieXRlLlxuICAgICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAweEZGNjEgLSAweDIxICsgYml0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZmluaXNoZWQuXG4gICAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZyBhbmQgcmV0dXJuIGVycm9yLlxuICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIGNhc2Ugc3RhdGVzLkxlYWRCeXRlOlxuICAgICAgICAvLyBMZWFkIGJ5dGVcbiAgICAgICAgLy8gQmFzZWQgb24gYnl0ZTpcblxuICAgICAgICAvLyAweDFCXG4gICAgICAgIGlmIChiaXRlID09PSAweDFCKSB7XG4gICAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gZXNjYXBlIHN0YXJ0IGFuZCByZXR1cm5cbiAgICAgICAgICAvLyBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IHN0YXRlcy5Fc2NhcGVTdGFydDtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDB4MjEgdG8gMHg3RVxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDIxLCAweDdFKSkge1xuICAgICAgICAgIC8vIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZywgc2V0IGlzby0yMDIyLWpwIGxlYWRcbiAgICAgICAgICAvLyB0byBieXRlLCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIHRyYWlsIGJ5dGUsIGFuZFxuICAgICAgICAgIC8vIHJldHVybiBjb250aW51ZS5cbiAgICAgICAgICBpc28yMDIyanBfb3V0cHV0X2ZsYWcgPSBmYWxzZTtcbiAgICAgICAgICBpc28yMDIyanBfbGVhZCA9IGJpdGU7XG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuVHJhaWxCeXRlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kLW9mLXN0cmVhbVxuICAgICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSkge1xuICAgICAgICAgIC8vIFJldHVybiBmaW5pc2hlZC5cbiAgICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9vdXRwdXRfZmxhZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuVHJhaWxCeXRlOlxuICAgICAgICAvLyBUcmFpbCBieXRlXG4gICAgICAgIC8vIEJhc2VkIG9uIGJ5dGU6XG5cbiAgICAgICAgLy8gMHgxQlxuICAgICAgICBpZiAoYml0ZSA9PT0gMHgxQikge1xuICAgICAgICAgIC8vIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIHRvIGVzY2FwZSBzdGFydCBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlU3RhcnQ7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAweDIxIHRvIDB4N0VcbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHgyMSwgMHg3RSkpIHtcbiAgICAgICAgICAvLyAxLiBTZXQgdGhlIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gbGVhZCBieXRlLlxuICAgICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuXG4gICAgICAgICAgLy8gMi4gTGV0IHBvaW50ZXIgYmUgKGlzby0yMDIyLWpwIGxlYWQg4oiSIDB4MjEpIMOXIDk0ICsgYnl0ZSDiiJIgMHgyMS5cbiAgICAgICAgICB2YXIgcG9pbnRlciA9IChpc28yMDIyanBfbGVhZCAtIDB4MjEpICogOTQgKyBiaXRlIC0gMHgyMTtcblxuICAgICAgICAgIC8vIDMuIExldCBjb2RlIHBvaW50IGJlIHRoZSBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluXG4gICAgICAgICAgLy8gaW5kZXggamlzMDIwOC5cbiAgICAgICAgICB2YXIgY29kZV9wb2ludCA9IGluZGV4Q29kZVBvaW50Rm9yKHBvaW50ZXIsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgICAgIC8vIDUuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuZC1vZi1zdHJlYW1cbiAgICAgICAgaWYgKGJpdGUgPT09IGVuZF9vZl9zdHJlYW0pIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gbGVhZCBieXRlLCBwcmVwZW5kXG4gICAgICAgICAgLy8gYnl0ZSB0byBzdHJlYW0sIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuTGVhZEJ5dGU7XG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgLy8gU2V0IGlzby0yMDIyLWpwIGRlY29kZXIgc3RhdGUgdG8gbGVhZCBieXRlIGFuZCByZXR1cm5cbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuRXNjYXBlU3RhcnQ6XG4gICAgICAgIC8vIEVzY2FwZSBzdGFydFxuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZWl0aGVyIDB4MjQgb3IgMHgyOCwgc2V0IGlzby0yMDIyLWpwIGxlYWQgdG9cbiAgICAgICAgLy8gYnl0ZSwgaXNvLTIwMjItanAgZGVjb2RlciBzdGF0ZSB0byBlc2NhcGUsIGFuZCByZXR1cm5cbiAgICAgICAgLy8gY29udGludWUuXG4gICAgICAgIGlmIChiaXRlID09PSAweDI0IHx8IGJpdGUgPT09IDB4MjgpIHtcbiAgICAgICAgICBpc28yMDIyanBfbGVhZCA9IGJpdGU7XG4gICAgICAgICAgaXNvMjAyMmpwX2RlY29kZXJfc3RhdGUgPSBzdGF0ZXMuRXNjYXBlO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gUHJlcGVuZCBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gMy4gVW5zZXQgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLCBzZXQgaXNvLTIwMjItanBcbiAgICAgICAgLy8gZGVjb2RlciBzdGF0ZSB0byBpc28tMjAyMi1qcCBkZWNvZGVyIG91dHB1dCBzdGF0ZSwgYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gaXNvMjAyMmpwX2RlY29kZXJfb3V0cHV0X3N0YXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcblxuICAgICAgY2FzZSBzdGF0ZXMuRXNjYXBlOlxuICAgICAgICAvLyBFc2NhcGVcblxuICAgICAgICAvLyAxLiBMZXQgbGVhZCBiZSBpc28tMjAyMi1qcCBsZWFkIGFuZCBzZXQgaXNvLTIwMjItanAgbGVhZCB0b1xuICAgICAgICAvLyAweDAwLlxuICAgICAgICB2YXIgbGVhZCA9IGlzbzIwMjJqcF9sZWFkO1xuICAgICAgICBpc28yMDIyanBfbGVhZCA9IDB4MDA7XG5cbiAgICAgICAgLy8gMi4gTGV0IHN0YXRlIGJlIG51bGwuXG4gICAgICAgIHZhciBzdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgLy8gMy4gSWYgbGVhZCBpcyAweDI4IGFuZCBieXRlIGlzIDB4NDIsIHNldCBzdGF0ZSB0byBBU0NJSS5cbiAgICAgICAgaWYgKGxlYWQgPT09IDB4MjggJiYgYml0ZSA9PT0gMHg0MilcbiAgICAgICAgICBzdGF0ZSA9IHN0YXRlcy5BU0NJSTtcblxuICAgICAgICAvLyA0LiBJZiBsZWFkIGlzIDB4MjggYW5kIGJ5dGUgaXMgMHg0QSwgc2V0IHN0YXRlIHRvIFJvbWFuLlxuICAgICAgICBpZiAobGVhZCA9PT0gMHgyOCAmJiBiaXRlID09PSAweDRBKVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLlJvbWFuO1xuXG4gICAgICAgIC8vIDUuIElmIGxlYWQgaXMgMHgyOCBhbmQgYnl0ZSBpcyAweDQ5LCBzZXQgc3RhdGUgdG8gS2F0YWthbmEuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI4ICYmIGJpdGUgPT09IDB4NDkpXG4gICAgICAgICAgc3RhdGUgPSBzdGF0ZXMuS2F0YWthbmE7XG5cbiAgICAgICAgLy8gNi4gSWYgbGVhZCBpcyAweDI0IGFuZCBieXRlIGlzIGVpdGhlciAweDQwIG9yIDB4NDIsIHNldFxuICAgICAgICAvLyBzdGF0ZSB0byBsZWFkIGJ5dGUuXG4gICAgICAgIGlmIChsZWFkID09PSAweDI0ICYmIChiaXRlID09PSAweDQwIHx8IGJpdGUgPT09IDB4NDIpKVxuICAgICAgICAgIHN0YXRlID0gc3RhdGVzLkxlYWRCeXRlO1xuXG4gICAgICAgIC8vIDcuIElmIHN0YXRlIGlzIG5vbi1udWxsLCBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIDEuIFNldCBpc28tMjAyMi1qcCBkZWNvZGVyIHN0YXRlIGFuZCBpc28tMjAyMi1qcCBkZWNvZGVyXG4gICAgICAgICAgLy8gb3V0cHV0IHN0YXRlIHRvIHN0YXRlcy5cbiAgICAgICAgICBpc28yMDIyanBfZGVjb2Rlcl9zdGF0ZSA9IGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICAvLyAyLiBMZXQgb3V0cHV0IGZsYWcgYmUgdGhlIGlzby0yMDIyLWpwIG91dHB1dCBmbGFnLlxuICAgICAgICAgIHZhciBvdXRwdXRfZmxhZyA9IGlzbzIwMjJqcF9vdXRwdXRfZmxhZztcblxuICAgICAgICAgIC8vIDMuIFNldCB0aGUgaXNvLTIwMjItanAgb3V0cHV0IGZsYWcuXG4gICAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIDQuIFJldHVybiBjb250aW51ZSwgaWYgb3V0cHV0IGZsYWcgaXMgdW5zZXQsIGFuZCBlcnJvclxuICAgICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgICByZXR1cm4gIW91dHB1dF9mbGFnID8gbnVsbCA6IGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA4LiBQcmVwZW5kIGxlYWQgYW5kIGJ5dGUgdG8gc3RyZWFtLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChbbGVhZCwgYml0ZV0pO1xuXG4gICAgICAgIC8vIDkuIFVuc2V0IHRoZSBpc28tMjAyMi1qcCBvdXRwdXQgZmxhZywgc2V0IGlzby0yMDIyLWpwXG4gICAgICAgIC8vIGRlY29kZXIgc3RhdGUgdG8gaXNvLTIwMjItanAgZGVjb2RlciBvdXRwdXQgc3RhdGUgYW5kXG4gICAgICAgIC8vIHJldHVybiBlcnJvci5cbiAgICAgICAgaXNvMjAyMmpwX291dHB1dF9mbGFnID0gZmFsc2U7XG4gICAgICAgIGlzbzIwMjJqcF9kZWNvZGVyX3N0YXRlID0gaXNvMjAyMmpwX2RlY29kZXJfb3V0cHV0X3N0YXRlO1xuICAgICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gMTMuMi4yIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBJU08yMDIySlBFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIGlzby0yMDIyLWpwJ3MgZW5jb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBpc28tMjAyMi1qcCBlbmNvZGVyXG4gICAgLy8gc3RhdGUgd2hpY2ggaXMgb25lIG9mIEFTQ0lJLCBSb21hbiwgYW5kIGppczAyMDggKGluaXRpYWxseVxuICAgIC8vIEFTQ0lJKS5cbiAgICAvKiogQGVudW0gKi9cbiAgICB2YXIgc3RhdGVzID0ge1xuICAgICAgQVNDSUk6IDAsXG4gICAgICBSb21hbjogMSxcbiAgICAgIGppczAyMDg6IDJcbiAgICB9O1xuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLkFTQ0lJO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSBhbmQgaXNvLTIwMjItanAgZW5jb2RlclxuICAgICAgLy8gc3RhdGUgaXMgbm90IEFTQ0lJLCBwcmVwZW5kIGNvZGUgcG9pbnQgdG8gc3RyZWFtLCBzZXRcbiAgICAgIC8vIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gQVNDSUksIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXNcbiAgICAgIC8vIDB4MUIgMHgyOCAweDQyLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0gJiZcbiAgICAgICAgICBpc28yMDIyanBfc3RhdGUgIT09IHN0YXRlcy5BU0NJSSkge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLkFTQ0lJO1xuICAgICAgICByZXR1cm4gWzB4MUIsIDB4MjgsIDB4NDJdO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0gYW5kIGlzby0yMDIyLWpwIGVuY29kZXJcbiAgICAgIC8vIHN0YXRlIGlzIEFTQ0lJLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gZW5kX29mX3N0cmVhbSAmJiBpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBJU08tMjAyMi1KUCBlbmNvZGVyIHN0YXRlIGlzIEFTQ0lJIG9yIFJvbWFuLCBhbmQgY29kZVxuICAgICAgLy8gcG9pbnQgaXMgVSswMDBFLCBVKzAwMEYsIG9yIFUrMDAxQiwgcmV0dXJuIGVycm9yIHdpdGggVStGRkZELlxuICAgICAgaWYgKChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5BU0NJSSB8fFxuICAgICAgICAgICBpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5Sb21hbikgJiZcbiAgICAgICAgICAoY29kZV9wb2ludCA9PT0gMHgwMDBFIHx8IGNvZGVfcG9pbnQgPT09IDB4MDAwRiB8fFxuICAgICAgICAgICBjb2RlX3BvaW50ID09PSAweDAwMUIpKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoMHhGRkZEKTtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSBpcyBBU0NJSSBhbmQgY29kZSBwb2ludCBpcyBhblxuICAgICAgLy8gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzbzIwMjJqcF9zdGF0ZSA9PT0gc3RhdGVzLkFTQ0lJICYmXG4gICAgICAgICAgaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDUuIElmIGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgaXMgUm9tYW4gYW5kIGNvZGUgcG9pbnQgaXMgYW5cbiAgICAgIC8vIEFTQ0lJIGNvZGUgcG9pbnQsIGV4Y2x1ZGluZyBVKzAwNUMgYW5kIFUrMDA3RSwgb3IgaXMgVSswMEE1XG4gICAgICAvLyBvciBVKzIwM0UsIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChpc28yMDIyanBfc3RhdGUgPT09IHN0YXRlcy5Sb21hbiAmJlxuICAgICAgICAgICgoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSAmJlxuICAgICAgICAgICBjb2RlX3BvaW50ICE9PSAweDAwNUMgJiYgY29kZV9wb2ludCAhPT0gMHgwMDdFKSB8fFxuICAgICAgICAgIChjb2RlX3BvaW50ID09IDB4MDBBNSB8fCBjb2RlX3BvaW50ID09IDB4MjAzRSkpKSB7XG5cbiAgICAgICAgLy8gMS4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlXG4gICAgICAgIC8vIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQuXG4gICAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgwMEE1KVxuICAgICAgICAgIHJldHVybiAweDVDO1xuXG4gICAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMDNFKVxuICAgICAgICAgIHJldHVybiAweDdFO1xuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIGFuIEFTQ0lJIGNvZGUgcG9pbnQsIGFuZCBpc28tMjAyMi1qcFxuICAgICAgLy8gZW5jb2RlciBzdGF0ZSBpcyBub3QgQVNDSUksIHByZXBlbmQgY29kZSBwb2ludCB0byBzdHJlYW0sIHNldFxuICAgICAgLy8gaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSB0byBBU0NJSSwgYW5kIHJldHVybiB0aHJlZSBieXRlc1xuICAgICAgLy8gMHgxQiAweDI4IDB4NDIuXG4gICAgICBpZiAoaXNBU0NJSUNvZGVQb2ludChjb2RlX3BvaW50KSAmJlxuICAgICAgICAgIGlzbzIwMjJqcF9zdGF0ZSAhPT0gc3RhdGVzLkFTQ0lJKSB7XG4gICAgICAgIHN0cmVhbS5wcmVwZW5kKGNvZGVfcG9pbnQpO1xuICAgICAgICBpc28yMDIyanBfc3RhdGUgPSBzdGF0ZXMuQVNDSUk7XG4gICAgICAgIHJldHVybiBbMHgxQiwgMHgyOCwgMHg0Ml07XG4gICAgICB9XG5cbiAgICAgIC8vIDcuIElmIGNvZGUgcG9pbnQgaXMgZWl0aGVyIFUrMDBBNSBvciBVKzIwM0UsIGFuZCBpc28tMjAyMi1qcFxuICAgICAgLy8gZW5jb2RlciBzdGF0ZSBpcyBub3QgUm9tYW4sIHByZXBlbmQgY29kZSBwb2ludCB0byBzdHJlYW0sIHNldFxuICAgICAgLy8gaXNvLTIwMjItanAgZW5jb2RlciBzdGF0ZSB0byBSb21hbiwgYW5kIHJldHVybiB0aHJlZSBieXRlc1xuICAgICAgLy8gMHgxQiAweDI4IDB4NEEuXG4gICAgICBpZiAoKGNvZGVfcG9pbnQgPT09IDB4MDBBNSB8fCBjb2RlX3BvaW50ID09PSAweDIwM0UpICYmXG4gICAgICAgICAgaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuUm9tYW4pIHtcbiAgICAgICAgc3RyZWFtLnByZXBlbmQoY29kZV9wb2ludCk7XG4gICAgICAgIGlzbzIwMjJqcF9zdGF0ZSA9IHN0YXRlcy5Sb21hbjtcbiAgICAgICAgcmV0dXJuIFsweDFCLCAweDI4LCAweDRBXTtcbiAgICAgIH1cblxuICAgICAgLy8gOC4gSWYgY29kZSBwb2ludCBpcyBVKzIyMTIsIHNldCBpdCB0byBVK0ZGMEQuXG4gICAgICBpZiAoY29kZV9wb2ludCA9PT0gMHgyMjEyKVxuICAgICAgICBjb2RlX3BvaW50ID0gMHhGRjBEO1xuXG4gICAgICAvLyA5LiBMZXQgcG9pbnRlciBiZSB0aGUgaW5kZXggcG9pbnRlciBmb3IgY29kZSBwb2ludCBpbiBpbmRleFxuICAgICAgLy8gamlzMDIwOC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdqaXMwMjA4JykpO1xuXG4gICAgICAvLyAxMC4gSWYgcG9pbnRlciBpcyBudWxsLCByZXR1cm4gZXJyb3Igd2l0aCBjb2RlIHBvaW50LlxuICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDExLiBJZiBpc28tMjAyMi1qcCBlbmNvZGVyIHN0YXRlIGlzIG5vdCBqaXMwMjA4LCBwcmVwZW5kIGNvZGVcbiAgICAgIC8vIHBvaW50IHRvIHN0cmVhbSwgc2V0IGlzby0yMDIyLWpwIGVuY29kZXIgc3RhdGUgdG8gamlzMDIwOCxcbiAgICAgIC8vIGFuZCByZXR1cm4gdGhyZWUgYnl0ZXMgMHgxQiAweDI0IDB4NDIuXG4gICAgICBpZiAoaXNvMjAyMmpwX3N0YXRlICE9PSBzdGF0ZXMuamlzMDIwOCkge1xuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb2RlX3BvaW50KTtcbiAgICAgICAgaXNvMjAyMmpwX3N0YXRlID0gc3RhdGVzLmppczAyMDg7XG4gICAgICAgIHJldHVybiBbMHgxQiwgMHgyNCwgMHg0Ml07XG4gICAgICB9XG5cbiAgICAgIC8vIDEyLiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gOTQpICsgMHgyMS5cbiAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDk0KSArIDB4MjE7XG5cbiAgICAgIC8vIDEzLiBMZXQgdHJhaWwgYmUgcG9pbnRlciAlIDk0ICsgMHgyMS5cbiAgICAgIHZhciB0cmFpbCA9IHBvaW50ZXIgJSA5NCArIDB4MjE7XG5cbiAgICAgIC8vIDE0LiBSZXR1cm4gdHdvIGJ5dGVzIHdob3NlIHZhbHVlcyBhcmUgbGVhZCBhbmQgdHJhaWwuXG4gICAgICByZXR1cm4gW2xlYWQsIHRyYWlsXTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snSVNPLTIwMjItSlAnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IElTTzIwMjJKUEVuY29kZXIob3B0aW9ucyk7XG4gIH07XG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZGVjb2RlcnNbJ0lTTy0yMDIyLUpQJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBJU08yMDIySlBEZWNvZGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIDEzLjMgU2hpZnRfSklTXG5cbiAgLy8gMTMuMy4xIFNoaWZ0X0pJUyBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2hpZnRKSVNEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8vIFNoaWZ0X0pJUydzIGRlY29kZXIgaGFzIGFuIGFzc29jaWF0ZWQgU2hpZnRfSklTIGxlYWQgKGluaXRpYWxseVxuICAgIC8vIDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gU2hpZnRfSklTX2xlYWQgPSAweDAwO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtIGFuZCBTaGlmdF9KSVMgbGVhZCBpcyBub3QgMHgwMCxcbiAgICAgIC8vIHNldCBTaGlmdF9KSVMgbGVhZCB0byAweDAwIGFuZCByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBTaGlmdF9KSVNfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICBTaGlmdF9KSVNfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIFNoaWZ0X0pJUyBsZWFkIGlzIDB4MDAsXG4gICAgICAvLyByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBTaGlmdF9KSVNfbGVhZCA9PT0gMHgwMClcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAzLiBJZiBTaGlmdF9KSVMgbGVhZCBpcyBub3QgMHgwMCwgbGV0IGxlYWQgYmUgU2hpZnRfSklTIGxlYWQsXG4gICAgICAvLyBsZXQgcG9pbnRlciBiZSBudWxsLCBzZXQgU2hpZnRfSklTIGxlYWQgdG8gMHgwMCwgYW5kIHRoZW4gcnVuXG4gICAgICAvLyB0aGVzZSBzdWJzdGVwczpcbiAgICAgIGlmIChTaGlmdF9KSVNfbGVhZCAhPT0gMHgwMCkge1xuICAgICAgICB2YXIgbGVhZCA9IFNoaWZ0X0pJU19sZWFkO1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIFNoaWZ0X0pJU19sZWFkID0gMHgwMDtcblxuICAgICAgICAvLyAxLiBMZXQgb2Zmc2V0IGJlIDB4NDAsIGlmIGJ5dGUgaXMgbGVzcyB0aGFuIDB4N0YsIGFuZCAweDQxXG4gICAgICAgIC8vIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIG9mZnNldCA9IChiaXRlIDwgMHg3RikgPyAweDQwIDogMHg0MTtcblxuICAgICAgICAvLyAyLiBMZXQgbGVhZCBvZmZzZXQgYmUgMHg4MSwgaWYgbGVhZCBpcyBsZXNzIHRoYW4gMHhBMCwgYW5kXG4gICAgICAgIC8vIDB4QzEgb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgbGVhZF9vZmZzZXQgPSAobGVhZCA8IDB4QTApID8gMHg4MSA6IDB4QzE7XG5cbiAgICAgICAgLy8gMy4gSWYgYnl0ZSBpcyBpbiB0aGUgcmFuZ2UgMHg0MCB0byAweDdFLCBpbmNsdXNpdmUsIG9yIDB4ODBcbiAgICAgICAgLy8gdG8gMHhGQywgaW5jbHVzaXZlLCBzZXQgcG9pbnRlciB0byAobGVhZCDiiJIgbGVhZCBvZmZzZXQpIMOXXG4gICAgICAgIC8vIDE4OCArIGJ5dGUg4oiSIG9mZnNldC5cbiAgICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg0MCwgMHg3RSkgfHwgaW5SYW5nZShiaXRlLCAweDgwLCAweEZDKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSBsZWFkX29mZnNldCkgKiAxODggKyBiaXRlIC0gb2Zmc2V0O1xuXG4gICAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgaW4gdGhlIHJhbmdlIDg4MzYgdG8gMTA3MTUsIGluY2x1c2l2ZSxcbiAgICAgICAgLy8gcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweEUwMDAg4oiSIDg4MzYgKyBwb2ludGVyLlxuICAgICAgICBpZiAoaW5SYW5nZShwb2ludGVyLCA4ODM2LCAxMDcxNSkpXG4gICAgICAgICAgcmV0dXJuIDB4RTAwMCAtIDg4MzYgKyBwb2ludGVyO1xuXG4gICAgICAgIC8vIDUuIExldCBjb2RlIHBvaW50IGJlIG51bGwsIGlmIHBvaW50ZXIgaXMgbnVsbCwgYW5kIHRoZVxuICAgICAgICAvLyBpbmRleCBjb2RlIHBvaW50IGZvciBwb2ludGVyIGluIGluZGV4IGppczAyMDggb3RoZXJ3aXNlLlxuICAgICAgICB2YXIgY29kZV9wb2ludCA9IChwb2ludGVyID09PSBudWxsKSA/IG51bGwgOlxuICAgICAgICAgICAgICBpbmRleENvZGVQb2ludEZvcihwb2ludGVyLCBpbmRleCgnamlzMDIwOCcpKTtcblxuICAgICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAvLyBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IG51bGwgJiYgaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNy4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDguIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSBvciAweDgwLCByZXR1cm4gYSBjb2RlIHBvaW50XG4gICAgICAvLyB3aG9zZSB2YWx1ZSBpcyBieXRlLlxuICAgICAgaWYgKGlzQVNDSUlCeXRlKGJpdGUpIHx8IGJpdGUgPT09IDB4ODApXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyA1LiBJZiBieXRlIGlzIGluIHRoZSByYW5nZSAweEExIHRvIDB4REYsIGluY2x1c2l2ZSwgcmV0dXJuIGFcbiAgICAgIC8vIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgMHhGRjYxIOKIkiAweEExICsgYnl0ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4QTEsIDB4REYpKVxuICAgICAgICByZXR1cm4gMHhGRjYxIC0gMHhBMSArIGJpdGU7XG5cbiAgICAgIC8vIDYuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHg5RiwgaW5jbHVzaXZlLCBvciAweEUwXG4gICAgICAvLyB0byAweEZDLCBpbmNsdXNpdmUsIHNldCBTaGlmdF9KSVMgbGVhZCB0byBieXRlIGFuZCByZXR1cm5cbiAgICAgIC8vIGNvbnRpbnVlLlxuICAgICAgaWYgKGluUmFuZ2UoYml0ZSwgMHg4MSwgMHg5RikgfHwgaW5SYW5nZShiaXRlLCAweEUwLCAweEZDKSkge1xuICAgICAgICBTaGlmdF9KSVNfbGVhZCA9IGJpdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBSZXR1cm4gZXJyb3IuXG4gICAgICByZXR1cm4gZGVjb2RlckVycm9yKGZhdGFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gMTMuMy4yIFNoaWZ0X0pJUyBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gU2hpZnRKSVNFbmNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gSW5wdXQgc3RyZWFtLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlX3BvaW50IE5leHQgY29kZSBwb2ludCByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHsobnVtYmVyfCFBcnJheS48bnVtYmVyPil9IEJ5dGUocykgdG8gZW1pdC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGNvZGVfcG9pbnQpIHtcbiAgICAgIC8vIDEuIElmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50IG9yIFUrMDA4MCwgcmV0dXJuIGFcbiAgICAgIC8vIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpIHx8IGNvZGVfcG9pbnQgPT09IDB4MDA4MClcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG5cbiAgICAgIC8vIDMuIElmIGNvZGUgcG9pbnQgaXMgVSswMEE1LCByZXR1cm4gYnl0ZSAweDVDLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MDBBNSlcbiAgICAgICAgcmV0dXJuIDB4NUM7XG5cbiAgICAgIC8vIDQuIElmIGNvZGUgcG9pbnQgaXMgVSsyMDNFLCByZXR1cm4gYnl0ZSAweDdFLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IDB4MjAzRSlcbiAgICAgICAgcmV0dXJuIDB4N0U7XG5cbiAgICAgIC8vIDUuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrRkY2MSB0byBVK0ZGOUYsIGluY2x1c2l2ZSxcbiAgICAgIC8vIHJldHVybiBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludCDiiJIgMHhGRjYxICsgMHhBMS5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfcG9pbnQsIDB4RkY2MSwgMHhGRjlGKSlcbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQgLSAweEZGNjEgKyAweEExO1xuXG4gICAgICAvLyA2LiBJZiBjb2RlIHBvaW50IGlzIFUrMjIxMiwgc2V0IGl0IHRvIFUrRkYwRC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSAweDIyMTIpXG4gICAgICAgIGNvZGVfcG9pbnQgPSAweEZGMEQ7XG5cbiAgICAgIC8vIDcuIExldCBwb2ludGVyIGJlIHRoZSBpbmRleCBTaGlmdF9KSVMgcG9pbnRlciBmb3IgY29kZSBwb2ludC5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhTaGlmdEpJU1BvaW50ZXJGb3IoY29kZV9wb2ludCk7XG5cbiAgICAgIC8vIDguIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA5LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gMTg4KS5cbiAgICAgIHZhciBsZWFkID0gZmxvb3IocG9pbnRlciAvIDE4OCk7XG5cbiAgICAgIC8vIDEwLiBMZXQgbGVhZCBvZmZzZXQgYmUgMHg4MSwgaWYgbGVhZCBpcyBsZXNzIHRoYW4gMHgxRiwgYW5kXG4gICAgICAvLyAweEMxIG90aGVyd2lzZS5cbiAgICAgIHZhciBsZWFkX29mZnNldCA9IChsZWFkIDwgMHgxRikgPyAweDgxIDogMHhDMTtcblxuICAgICAgLy8gMTEuIExldCB0cmFpbCBiZSBwb2ludGVyICUgMTg4LlxuICAgICAgdmFyIHRyYWlsID0gcG9pbnRlciAlIDE4ODtcblxuICAgICAgLy8gMTIuIExldCBvZmZzZXQgYmUgMHg0MCwgaWYgdHJhaWwgaXMgbGVzcyB0aGFuIDB4M0YsIGFuZCAweDQxXG4gICAgICAvLyBvdGhlcndpc2UuXG4gICAgICB2YXIgb2Zmc2V0ID0gKHRyYWlsIDwgMHgzRikgPyAweDQwIDogMHg0MTtcblxuICAgICAgLy8gMTMuIFJldHVybiB0d28gYnl0ZXMgd2hvc2UgdmFsdWVzIGFyZSBsZWFkICsgbGVhZCBvZmZzZXQgYW5kXG4gICAgICAvLyB0cmFpbCArIG9mZnNldC5cbiAgICAgIHJldHVybiBbbGVhZCArIGxlYWRfb2Zmc2V0LCB0cmFpbCArIG9mZnNldF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ1NoaWZ0X0pJUyddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgU2hpZnRKSVNFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydTaGlmdF9KSVMnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFNoaWZ0SklTRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICAvL1xuICAvLyAxNC4gTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5nc1xuICAvL1xuXG4gIC8vIDE0LjEgZXVjLWtyXG5cbiAgLy8gMTQuMS4xIGV1Yy1rciBkZWNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0RlY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gRVVDS1JEZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuXG4gICAgLy8gZXVjLWtyJ3MgZGVjb2RlciBoYXMgYW4gYXNzb2NpYXRlZCBldWMta3IgbGVhZCAoaW5pdGlhbGx5IDB4MDApLlxuICAgIHZhciAvKiogQHR5cGUge251bWJlcn0gKi8gZXVja3JfbGVhZCA9IDB4MDA7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbSBUaGUgc3RyZWFtIG9mIGJ5dGVzIGJlaW5nIGRlY29kZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdGUgVGhlIG5leHQgYnl0ZSByZWFkIGZyb20gdGhlIHN0cmVhbS5cbiAgICAgKiBAcmV0dXJuIHs/KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBUaGUgbmV4dCBjb2RlIHBvaW50KHMpXG4gICAgICogICAgIGRlY29kZWQsIG9yIG51bGwgaWYgbm90IGVub3VnaCBkYXRhIGV4aXN0cyBpbiB0aGUgaW5wdXRcbiAgICAgKiAgICAgc3RyZWFtIHRvIGRlY29kZSBhIGNvbXBsZXRlIGNvZGUgcG9pbnQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBiaXRlKSB7XG4gICAgICAvLyAxLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1rciBsZWFkIGlzIG5vdCAweDAwLCBzZXRcbiAgICAgIC8vIGV1Yy1rciBsZWFkIHRvIDB4MDAgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIGV1Y2tyX2xlYWQgIT09IDApIHtcbiAgICAgICAgZXVja3JfbGVhZCA9IDB4MDA7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIGV1Yy1rciBsZWFkIGlzIDB4MDAsIHJldHVyblxuICAgICAgLy8gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSAmJiBldWNrcl9sZWFkID09PSAwKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDMuIElmIGV1Yy1rciBsZWFkIGlzIG5vdCAweDAwLCBsZXQgbGVhZCBiZSBldWMta3IgbGVhZCwgbGV0XG4gICAgICAvLyBwb2ludGVyIGJlIG51bGwsIHNldCBldWMta3IgbGVhZCB0byAweDAwLCBhbmQgdGhlbiBydW4gdGhlc2VcbiAgICAgIC8vIHN1YnN0ZXBzOlxuICAgICAgaWYgKGV1Y2tyX2xlYWQgIT09IDB4MDApIHtcbiAgICAgICAgdmFyIGxlYWQgPSBldWNrcl9sZWFkO1xuICAgICAgICB2YXIgcG9pbnRlciA9IG51bGw7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSAweDAwO1xuXG4gICAgICAgIC8vIDEuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4NDEgdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXRcbiAgICAgICAgLy8gcG9pbnRlciB0byAobGVhZCDiiJIgMHg4MSkgw5cgMTkwICsgKGJ5dGUg4oiSIDB4NDEpLlxuICAgICAgICBpZiAoaW5SYW5nZShiaXRlLCAweDQxLCAweEZFKSlcbiAgICAgICAgICBwb2ludGVyID0gKGxlYWQgLSAweDgxKSAqIDE5MCArIChiaXRlIC0gMHg0MSk7XG5cbiAgICAgICAgLy8gMi4gTGV0IGNvZGUgcG9pbnQgYmUgbnVsbCwgaWYgcG9pbnRlciBpcyBudWxsLCBhbmQgdGhlXG4gICAgICAgIC8vIGluZGV4IGNvZGUgcG9pbnQgZm9yIHBvaW50ZXIgaW4gaW5kZXggZXVjLWtyIG90aGVyd2lzZS5cbiAgICAgICAgdmFyIGNvZGVfcG9pbnQgPSAocG9pbnRlciA9PT0gbnVsbClcbiAgICAgICAgICAgICAgPyBudWxsIDogaW5kZXhDb2RlUG9pbnRGb3IocG9pbnRlciwgaW5kZXgoJ2V1Yy1rcicpKTtcblxuICAgICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIG51bGwgYW5kIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcHJlcGVuZFxuICAgICAgICAvLyBieXRlIHRvIHN0cmVhbS5cbiAgICAgICAgaWYgKHBvaW50ZXIgPT09IG51bGwgJiYgaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgICAgc3RyZWFtLnByZXBlbmQoYml0ZSk7XG5cbiAgICAgICAgLy8gNC4gSWYgY29kZSBwb2ludCBpcyBudWxsLCByZXR1cm4gZXJyb3IuXG4gICAgICAgIGlmIChjb2RlX3BvaW50ID09PSBudWxsKVxuICAgICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuXG4gICAgICAgIC8vIDUuIFJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgICAgcmV0dXJuIGNvZGVfcG9pbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGJ5dGUgaXMgYW4gQVNDSUkgYnl0ZSwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZVxuICAgICAgLy8gaXMgYnl0ZS5cbiAgICAgIGlmIChpc0FTQ0lJQnl0ZShiaXRlKSlcbiAgICAgICAgcmV0dXJuIGJpdGU7XG5cbiAgICAgIC8vIDUuIElmIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDB4ODEgdG8gMHhGRSwgaW5jbHVzaXZlLCBzZXRcbiAgICAgIC8vIGV1Yy1rciBsZWFkIHRvIGJ5dGUgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGJpdGUsIDB4ODEsIDB4RkUpKSB7XG4gICAgICAgIGV1Y2tyX2xlYWQgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gUmV0dXJuIGVycm9yLlxuICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDE0LjEuMiBldWMta3IgZW5jb2RlclxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBpbXBsZW1lbnRzIHtFbmNvZGVyfVxuICAgKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIEVVQ0tSRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgYW4gQVNDSUkgY29kZSBwb2ludCwgcmV0dXJuIGEgYnl0ZSB3aG9zZVxuICAgICAgLy8gdmFsdWUgaXMgY29kZSBwb2ludC5cbiAgICAgIGlmIChpc0FTQ0lJQ29kZVBvaW50KGNvZGVfcG9pbnQpKVxuICAgICAgICByZXR1cm4gY29kZV9wb2ludDtcblxuICAgICAgLy8gMy4gTGV0IHBvaW50ZXIgYmUgdGhlIGluZGV4IHBvaW50ZXIgZm9yIGNvZGUgcG9pbnQgaW4gaW5kZXhcbiAgICAgIC8vIGV1Yy1rci5cbiAgICAgIHZhciBwb2ludGVyID0gaW5kZXhQb2ludGVyRm9yKGNvZGVfcG9pbnQsIGluZGV4KCdldWMta3InKSk7XG5cbiAgICAgIC8vIDQuIElmIHBvaW50ZXIgaXMgbnVsbCwgcmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIGlmIChwb2ludGVyID09PSBudWxsKVxuICAgICAgICByZXR1cm4gZW5jb2RlckVycm9yKGNvZGVfcG9pbnQpO1xuXG4gICAgICAvLyA1LiBMZXQgbGVhZCBiZSBmbG9vcihwb2ludGVyIC8gMTkwKSArIDB4ODEuXG4gICAgICB2YXIgbGVhZCA9IGZsb29yKHBvaW50ZXIgLyAxOTApICsgMHg4MTtcblxuICAgICAgLy8gNi4gTGV0IHRyYWlsIGJlIHBvaW50ZXIgJSAxOTAgKyAweDQxLlxuICAgICAgdmFyIHRyYWlsID0gKHBvaW50ZXIgJSAxOTApICsgMHg0MTtcblxuICAgICAgLy8gNy4gUmV0dXJuIHR3byBieXRlcyB3aG9zZSB2YWx1ZXMgYXJlIGxlYWQgYW5kIHRyYWlsLlxuICAgICAgcmV0dXJuIFtsZWFkLCB0cmFpbF07XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ0VVQy1LUiddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRVVDS1JFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydFVUMtS1InXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVVQ0tSRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuXG4gIC8vXG4gIC8vIDE1LiBMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3NcbiAgLy9cblxuICAvLyAxNS4xIHJlcGxhY2VtZW50XG5cbiAgLy8gTm90IG5lZWRlZCAtIEFQSSB0aHJvd3MgUmFuZ2VFcnJvclxuXG4gIC8vIDE1LjIgQ29tbW9uIGluZnJhc3RydWN0dXJlIGZvciB1dGYtMTZiZSBhbmQgdXRmLTE2bGVcblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvZGVfdW5pdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV0ZjE2YmVcbiAgICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBieXRlc1xuICAgKi9cbiAgZnVuY3Rpb24gY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3VuaXQsIHV0ZjE2YmUpIHtcbiAgICAvLyAxLiBMZXQgYnl0ZTEgYmUgY29kZSB1bml0ID4+IDguXG4gICAgdmFyIGJ5dGUxID0gY29kZV91bml0ID4+IDg7XG5cbiAgICAvLyAyLiBMZXQgYnl0ZTIgYmUgY29kZSB1bml0ICYgMHgwMEZGLlxuICAgIHZhciBieXRlMiA9IGNvZGVfdW5pdCAmIDB4MDBGRjtcblxuICAgIC8vIDMuIFRoZW4gcmV0dXJuIHRoZSBieXRlcyBpbiBvcmRlcjpcbiAgICAgICAgLy8gdXRmLTE2YmUgZmxhZyBpcyBzZXQ6IGJ5dGUxLCB0aGVuIGJ5dGUyLlxuICAgIGlmICh1dGYxNmJlKVxuICAgICAgcmV0dXJuIFtieXRlMSwgYnl0ZTJdO1xuICAgIC8vIHV0Zi0xNmJlIGZsYWcgaXMgdW5zZXQ6IGJ5dGUyLCB0aGVuIGJ5dGUxLlxuICAgIHJldHVybiBbYnl0ZTIsIGJ5dGUxXTtcbiAgfVxuXG4gIC8vIDE1LjIuMSBzaGFyZWQgdXRmLTE2IGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNl9iZSBUcnVlIGlmIGJpZy1lbmRpYW4sIGZhbHNlIGlmIGxpdHRsZS1lbmRpYW4uXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVVRGMTZEZWNvZGVyKHV0ZjE2X2JlLCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICB2YXIgLyoqIEB0eXBlIHs/bnVtYmVyfSAqLyB1dGYxNl9sZWFkX2J5dGUgPSBudWxsLFxuICAgICAgICAvKiogQHR5cGUgez9udW1iZXJ9ICovIHV0ZjE2X2xlYWRfc3Vycm9nYXRlID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIFRoZSBzdHJlYW0gb2YgYnl0ZXMgYmVpbmcgZGVjb2RlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0ZSBUaGUgbmV4dCBieXRlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLlxuICAgICAqIEByZXR1cm4gez8obnVtYmVyfCFBcnJheS48bnVtYmVyPil9IFRoZSBuZXh0IGNvZGUgcG9pbnQocylcbiAgICAgKiAgICAgZGVjb2RlZCwgb3IgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEgZXhpc3RzIGluIHRoZSBpbnB1dFxuICAgICAqICAgICBzdHJlYW0gdG8gZGVjb2RlIGEgY29tcGxldGUgY29kZSBwb2ludC5cbiAgICAgKi9cbiAgICB0aGlzLmhhbmRsZXIgPSBmdW5jdGlvbihzdHJlYW0sIGJpdGUpIHtcbiAgICAgIC8vIDEuIElmIGJ5dGUgaXMgZW5kLW9mLXN0cmVhbSBhbmQgZWl0aGVyIHV0Zi0xNiBsZWFkIGJ5dGUgb3JcbiAgICAgIC8vIHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSBpcyBub3QgbnVsbCwgc2V0IHV0Zi0xNiBsZWFkIGJ5dGUgYW5kXG4gICAgICAvLyB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgdG8gbnVsbCwgYW5kIHJldHVybiBlcnJvci5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmICh1dGYxNl9sZWFkX2J5dGUgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmMTZfbGVhZF9zdXJyb2dhdGUgIT09IG51bGwpKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVyRXJyb3IoZmF0YWwpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGVuZC1vZi1zdHJlYW0gYW5kIHV0Zi0xNiBsZWFkIGJ5dGUgYW5kIHV0Zi0xNlxuICAgICAgLy8gbGVhZCBzdXJyb2dhdGUgYXJlIG51bGwsIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChiaXRlID09PSBlbmRfb2Zfc3RyZWFtICYmIHV0ZjE2X2xlYWRfYnl0ZSA9PT0gbnVsbCAmJlxuICAgICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgdXRmLTE2IGxlYWQgYnl0ZSBpcyBudWxsLCBzZXQgdXRmLTE2IGxlYWQgYnl0ZSB0byBieXRlXG4gICAgICAvLyBhbmQgcmV0dXJuIGNvbnRpbnVlLlxuICAgICAgaWYgKHV0ZjE2X2xlYWRfYnl0ZSA9PT0gbnVsbCkge1xuICAgICAgICB1dGYxNl9sZWFkX2J5dGUgPSBiaXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNC4gTGV0IGNvZGUgdW5pdCBiZSB0aGUgcmVzdWx0IG9mOlxuICAgICAgdmFyIGNvZGVfdW5pdDtcbiAgICAgIGlmICh1dGYxNl9iZSkge1xuICAgICAgICAvLyB1dGYtMTZiZSBkZWNvZGVyIGZsYWcgaXMgc2V0XG4gICAgICAgIC8vICAgKHV0Zi0xNiBsZWFkIGJ5dGUgPDwgOCkgKyBieXRlLlxuICAgICAgICBjb2RlX3VuaXQgPSAodXRmMTZfbGVhZF9ieXRlIDw8IDgpICsgYml0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHV0Zi0xNmJlIGRlY29kZXIgZmxhZyBpcyB1bnNldFxuICAgICAgICAvLyAgIChieXRlIDw8IDgpICsgdXRmLTE2IGxlYWQgYnl0ZS5cbiAgICAgICAgY29kZV91bml0ID0gKGJpdGUgPDwgOCkgKyB1dGYxNl9sZWFkX2J5dGU7XG4gICAgICB9XG4gICAgICAvLyBUaGVuIHNldCB1dGYtMTYgbGVhZCBieXRlIHRvIG51bGwuXG4gICAgICB1dGYxNl9sZWFkX2J5dGUgPSBudWxsO1xuXG4gICAgICAvLyA1LiBJZiB1dGYtMTYgbGVhZCBzdXJyb2dhdGUgaXMgbm90IG51bGwsIGxldCBsZWFkIHN1cnJvZ2F0ZVxuICAgICAgLy8gYmUgdXRmLTE2IGxlYWQgc3Vycm9nYXRlLCBzZXQgdXRmLTE2IGxlYWQgc3Vycm9nYXRlIHRvIG51bGwsXG4gICAgICAvLyBhbmQgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgICBpZiAodXRmMTZfbGVhZF9zdXJyb2dhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGxlYWRfc3Vycm9nYXRlID0gdXRmMTZfbGVhZF9zdXJyb2dhdGU7XG4gICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlID0gbnVsbDtcblxuICAgICAgICAvLyAxLiBJZiBjb2RlIHVuaXQgaXMgaW4gdGhlIHJhbmdlIFUrREMwMCB0byBVK0RGRkYsXG4gICAgICAgIC8vIGluY2x1c2l2ZSwgcmV0dXJuIGEgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSBpcyAweDEwMDAwICtcbiAgICAgICAgLy8gKChsZWFkIHN1cnJvZ2F0ZSDiiJIgMHhEODAwKSA8PCAxMCkgKyAoY29kZSB1bml0IOKIkiAweERDMDApLlxuICAgICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4REMwMCwgMHhERkZGKSkge1xuICAgICAgICAgIHJldHVybiAweDEwMDAwICsgKGxlYWRfc3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICtcbiAgICAgICAgICAgICAgKGNvZGVfdW5pdCAtIDB4REMwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBQcmVwZW5kIHRoZSBzZXF1ZW5jZSByZXN1bHRpbmcgb2YgY29udmVydGluZyBjb2RlIHVuaXRcbiAgICAgICAgLy8gdG8gYnl0ZXMgdXNpbmcgdXRmLTE2YmUgZGVjb2RlciBmbGFnIHRvIHN0cmVhbSBhbmQgcmV0dXJuXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBzdHJlYW0ucHJlcGVuZChjb252ZXJ0Q29kZVVuaXRUb0J5dGVzKGNvZGVfdW5pdCwgdXRmMTZfYmUpKTtcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIGNvZGUgdW5pdCBpcyBpbiB0aGUgcmFuZ2UgVStEODAwIHRvIFUrREJGRiwgaW5jbHVzaXZlLFxuICAgICAgLy8gc2V0IHV0Zi0xNiBsZWFkIHN1cnJvZ2F0ZSB0byBjb2RlIHVuaXQgYW5kIHJldHVybiBjb250aW51ZS5cbiAgICAgIGlmIChpblJhbmdlKGNvZGVfdW5pdCwgMHhEODAwLCAweERCRkYpKSB7XG4gICAgICAgIHV0ZjE2X2xlYWRfc3Vycm9nYXRlID0gY29kZV91bml0O1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gNy4gSWYgY29kZSB1bml0IGlzIGluIHRoZSByYW5nZSBVK0RDMDAgdG8gVStERkZGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gZXJyb3IuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3VuaXQsIDB4REMwMCwgMHhERkZGKSlcbiAgICAgICAgcmV0dXJuIGRlY29kZXJFcnJvcihmYXRhbCk7XG5cbiAgICAgIC8vIDguIFJldHVybiBjb2RlIHBvaW50IGNvZGUgdW5pdC5cbiAgICAgIHJldHVybiBjb2RlX3VuaXQ7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDE1LjIuMiBzaGFyZWQgdXRmLTE2IGVuY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RW5jb2Rlcn1cbiAgICogQHBhcmFtIHtib29sZWFufSB1dGYxNl9iZSBUcnVlIGlmIGJpZy1lbmRpYW4sIGZhbHNlIGlmIGxpdHRsZS1lbmRpYW4uXG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gVVRGMTZFbmNvZGVyKHV0ZjE2X2JlLCBvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLiBJZiBjb2RlIHBvaW50IGlzIGVuZC1vZi1zdHJlYW0sIHJldHVybiBmaW5pc2hlZC5cbiAgICAgIGlmIChjb2RlX3BvaW50ID09PSBlbmRfb2Zfc3RyZWFtKVxuICAgICAgICByZXR1cm4gZmluaXNoZWQ7XG5cbiAgICAgIC8vIDIuIElmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIHJhbmdlIFUrMDAwMCB0byBVK0ZGRkYsIGluY2x1c2l2ZSxcbiAgICAgIC8vIHJldHVybiB0aGUgc2VxdWVuY2UgcmVzdWx0aW5nIG9mIGNvbnZlcnRpbmcgY29kZSBwb2ludCB0b1xuICAgICAgLy8gYnl0ZXMgdXNpbmcgdXRmLTE2YmUgZW5jb2RlciBmbGFnLlxuICAgICAgaWYgKGluUmFuZ2UoY29kZV9wb2ludCwgMHgwMDAwLCAweEZGRkYpKVxuICAgICAgICByZXR1cm4gY29udmVydENvZGVVbml0VG9CeXRlcyhjb2RlX3BvaW50LCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDMuIExldCBsZWFkIGJlICgoY29kZSBwb2ludCDiiJIgMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLFxuICAgICAgLy8gY29udmVydGVkIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIHZhciBsZWFkID0gY29udmVydENvZGVVbml0VG9CeXRlcyhcbiAgICAgICAgKChjb2RlX3BvaW50IC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwLCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDQuIExldCB0cmFpbCBiZSAoKGNvZGUgcG9pbnQg4oiSIDB4MTAwMDApICYgMHgzRkYpICsgMHhEQzAwLFxuICAgICAgLy8gY29udmVydGVkIHRvIGJ5dGVzIHVzaW5nIHV0Zi0xNmJlIGVuY29kZXIgZmxhZy5cbiAgICAgIHZhciB0cmFpbCA9IGNvbnZlcnRDb2RlVW5pdFRvQnl0ZXMoXG4gICAgICAgICgoY29kZV9wb2ludCAtIDB4MTAwMDApICYgMHgzRkYpICsgMHhEQzAwLCB1dGYxNl9iZSk7XG5cbiAgICAgIC8vIDUuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugb2YgbGVhZCBmb2xsb3dlZCBieSB0cmFpbC5cbiAgICAgIHJldHVybiBsZWFkLmNvbmNhdCh0cmFpbCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDE1LjMgdXRmLTE2YmVcbiAgLy8gMTUuMy4xIHV0Zi0xNmJlIGRlY29kZXJcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBlbmNvZGVyc1snVVRGLTE2QkUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RW5jb2Rlcih0cnVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLy8gMTUuMy4yIHV0Zi0xNmJlIGVuY29kZXJcbiAgLyoqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9ucyAqL1xuICBkZWNvZGVyc1snVVRGLTE2QkUnXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFVURjE2RGVjb2Rlcih0cnVlLCBvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxNS40IHV0Zi0xNmxlXG4gIC8vIDE1LjQuMSB1dGYtMTZsZSBkZWNvZGVyXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ1VURi0xNkxFJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBVVEYxNkVuY29kZXIoZmFsc2UsIG9wdGlvbnMpO1xuICB9O1xuICAvLyAxNS40LjIgdXRmLTE2bGUgZW5jb2RlclxuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWydVVEYtMTZMRSddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgVVRGMTZEZWNvZGVyKGZhbHNlLCBvcHRpb25zKTtcbiAgfTtcblxuICAvLyAxNS41IHgtdXNlci1kZWZpbmVkXG5cbiAgLy8gMTUuNS4xIHgtdXNlci1kZWZpbmVkIGRlY29kZXJcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAaW1wbGVtZW50cyB7RGVjb2Rlcn1cbiAgICogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBYVXNlckRlZmluZWREZWNvZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgZmF0YWwgPSBvcHRpb25zLmZhdGFsO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0gVGhlIHN0cmVhbSBvZiBieXRlcyBiZWluZyBkZWNvZGVkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRlIFRoZSBuZXh0IGJ5dGUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7PyhudW1iZXJ8IUFycmF5LjxudW1iZXI+KX0gVGhlIG5leHQgY29kZSBwb2ludChzKVxuICAgICAqICAgICBkZWNvZGVkLCBvciBudWxsIGlmIG5vdCBlbm91Z2ggZGF0YSBleGlzdHMgaW4gdGhlIGlucHV0XG4gICAgICogICAgIHN0cmVhbSB0byBkZWNvZGUgYSBjb21wbGV0ZSBjb2RlIHBvaW50LlxuICAgICAqL1xuICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKHN0cmVhbSwgYml0ZSkge1xuICAgICAgLy8gMS4gSWYgYnl0ZSBpcyBlbmQtb2Ytc3RyZWFtLCByZXR1cm4gZmluaXNoZWQuXG4gICAgICBpZiAoYml0ZSA9PT0gZW5kX29mX3N0cmVhbSlcbiAgICAgICAgcmV0dXJuIGZpbmlzaGVkO1xuXG4gICAgICAvLyAyLiBJZiBieXRlIGlzIGFuIEFTQ0lJIGJ5dGUsIHJldHVybiBhIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWVcbiAgICAgIC8vIGlzIGJ5dGUuXG4gICAgICBpZiAoaXNBU0NJSUJ5dGUoYml0ZSkpXG4gICAgICAgIHJldHVybiBiaXRlO1xuXG4gICAgICAvLyAzLiBSZXR1cm4gYSBjb2RlIHBvaW50IHdob3NlIHZhbHVlIGlzIDB4Rjc4MCArIGJ5dGUg4oiSIDB4ODAuXG4gICAgICByZXR1cm4gMHhGNzgwICsgYml0ZSAtIDB4ODA7XG4gICAgfTtcbiAgfVxuXG4gIC8vIDE1LjUuMiB4LXVzZXItZGVmaW5lZCBlbmNvZGVyXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGltcGxlbWVudHMge0VuY29kZXJ9XG4gICAqIEBwYXJhbSB7e2ZhdGFsOiBib29sZWFufX0gb3B0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gWFVzZXJEZWZpbmVkRW5jb2RlcihvcHRpb25zKSB7XG4gICAgdmFyIGZhdGFsID0gb3B0aW9ucy5mYXRhbDtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtIElucHV0IHN0cmVhbS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29kZV9wb2ludCBOZXh0IGNvZGUgcG9pbnQgcmVhZCBmcm9tIHRoZSBzdHJlYW0uXG4gICAgICogQHJldHVybiB7KG51bWJlcnwhQXJyYXkuPG51bWJlcj4pfSBCeXRlKHMpIHRvIGVtaXQuXG4gICAgICovXG4gICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24oc3RyZWFtLCBjb2RlX3BvaW50KSB7XG4gICAgICAvLyAxLklmIGNvZGUgcG9pbnQgaXMgZW5kLW9mLXN0cmVhbSwgcmV0dXJuIGZpbmlzaGVkLlxuICAgICAgaWYgKGNvZGVfcG9pbnQgPT09IGVuZF9vZl9zdHJlYW0pXG4gICAgICAgIHJldHVybiBmaW5pc2hlZDtcblxuICAgICAgLy8gMi4gSWYgY29kZSBwb2ludCBpcyBhbiBBU0NJSSBjb2RlIHBvaW50LCByZXR1cm4gYSBieXRlIHdob3NlXG4gICAgICAvLyB2YWx1ZSBpcyBjb2RlIHBvaW50LlxuICAgICAgaWYgKGlzQVNDSUlDb2RlUG9pbnQoY29kZV9wb2ludCkpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50O1xuXG4gICAgICAvLyAzLiBJZiBjb2RlIHBvaW50IGlzIGluIHRoZSByYW5nZSBVK0Y3ODAgdG8gVStGN0ZGLCBpbmNsdXNpdmUsXG4gICAgICAvLyByZXR1cm4gYSBieXRlIHdob3NlIHZhbHVlIGlzIGNvZGUgcG9pbnQg4oiSIDB4Rjc4MCArIDB4ODAuXG4gICAgICBpZiAoaW5SYW5nZShjb2RlX3BvaW50LCAweEY3ODAsIDB4RjdGRikpXG4gICAgICAgIHJldHVybiBjb2RlX3BvaW50IC0gMHhGNzgwICsgMHg4MDtcblxuICAgICAgLy8gNC4gUmV0dXJuIGVycm9yIHdpdGggY29kZSBwb2ludC5cbiAgICAgIHJldHVybiBlbmNvZGVyRXJyb3IoY29kZV9wb2ludCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3tmYXRhbDogYm9vbGVhbn19IG9wdGlvbnMgKi9cbiAgZW5jb2RlcnNbJ3gtdXNlci1kZWZpbmVkJ10gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBYVXNlckRlZmluZWRFbmNvZGVyKG9wdGlvbnMpO1xuICB9O1xuICAvKiogQHBhcmFtIHt7ZmF0YWw6IGJvb2xlYW59fSBvcHRpb25zICovXG4gIGRlY29kZXJzWyd4LXVzZXItZGVmaW5lZCddID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWFVzZXJEZWZpbmVkRGVjb2RlcihvcHRpb25zKTtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFsnVGV4dEVuY29kZXInXSlcbiAgICBnbG9iYWxbJ1RleHRFbmNvZGVyJ10gPSBUZXh0RW5jb2RlcjtcbiAgaWYgKCFnbG9iYWxbJ1RleHREZWNvZGVyJ10pXG4gICAgZ2xvYmFsWydUZXh0RGVjb2RlciddID0gVGV4dERlY29kZXI7XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgIFRleHRFbmNvZGVyOiBnbG9iYWxbJ1RleHRFbmNvZGVyJ10sXG4gICAgICBUZXh0RGVjb2RlcjogZ2xvYmFsWydUZXh0RGVjb2RlciddLFxuICAgICAgRW5jb2RpbmdJbmRleGVzOiBnbG9iYWxbXCJlbmNvZGluZy1pbmRleGVzXCJdXG4gICAgfTtcbiAgfVxuXG4vLyBGb3Igc3RyaWN0IGVudmlyb25tZW50cyB3aGVyZSBgdGhpc2AgaW5zaWRlIHRoZSBnbG9iYWwgc2NvcGVcbi8vIGlzIGB1bmRlZmluZWRgLCB0YWtlIGEgcHVyZSBvYmplY3QgaW5zdGVhZFxufSh0aGlzIHx8IHt9KSk7IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59IiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLkRpZmYgPSB7fSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIERpZmYoKSB7fVxuICBEaWZmLnByb3RvdHlwZSA9IHtcbiAgICBkaWZmOiBmdW5jdGlvbiBkaWZmKG9sZFN0cmluZywgbmV3U3RyaW5nKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWxsb3cgc3ViY2xhc3NlcyB0byBtYXNzYWdlIHRoZSBpbnB1dCBwcmlvciB0byBydW5uaW5nXG5cblxuICAgICAgb2xkU3RyaW5nID0gdGhpcy5jYXN0SW5wdXQob2xkU3RyaW5nKTtcbiAgICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG4gICAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG4gICAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG4gICAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoO1xuICAgICAgdmFyIGVkaXRMZW5ndGggPSAxO1xuICAgICAgdmFyIG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgICBuZXdQb3M6IC0xLFxuICAgICAgICBjb21wb25lbnRzOiBbXVxuICAgICAgfV07IC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG5cbiAgICAgIHZhciBvbGRQb3MgPSB0aGlzLmV4dHJhY3RDb21tb24oYmVzdFBhdGhbMF0sIG5ld1N0cmluZywgb2xkU3RyaW5nLCAwKTtcblxuICAgICAgaWYgKGJlc3RQYXRoWzBdLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuICAgICAgICByZXR1cm4gZG9uZShbe1xuICAgICAgICAgIHZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSxcbiAgICAgICAgICBjb3VudDogbmV3U3RyaW5nLmxlbmd0aFxuICAgICAgICB9XSk7XG4gICAgICB9IC8vIE1haW4gd29ya2VyIG1ldGhvZC4gY2hlY2tzIGFsbCBwZXJtdXRhdGlvbnMgb2YgYSBnaXZlbiBlZGl0IGxlbmd0aCBmb3IgYWNjZXB0YW5jZS5cblxuXG4gICAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcbiAgICAgICAgZm9yICh2YXIgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgICB2YXIgYmFzZVBhdGggPSB2b2lkIDA7XG5cbiAgICAgICAgICB2YXIgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgICByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV0sXG4gICAgICAgICAgICAgIF9vbGRQb3MgPSAocmVtb3ZlUGF0aCA/IHJlbW92ZVBhdGgubmV3UG9zIDogMCkgLSBkaWFnb25hbFBhdGg7XG5cbiAgICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcbiAgICAgICAgICAgICAgY2FuUmVtb3ZlID0gcmVtb3ZlUGF0aCAmJiAwIDw9IF9vbGRQb3MgJiYgX29sZFBvcyA8IG9sZExlbjtcblxuICAgICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFNlbGVjdCB0aGUgZGlhZ29uYWwgdGhhdCB3ZSB3YW50IHRvIGJyYW5jaCBmcm9tLiBXZSBzZWxlY3QgdGhlIHByaW9yXG4gICAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuXG5cbiAgICAgICAgICBpZiAoIWNhbkFkZCB8fCBjYW5SZW1vdmUgJiYgYWRkUGF0aC5uZXdQb3MgPCByZW1vdmVQYXRoLm5ld1Bvcykge1xuICAgICAgICAgICAgYmFzZVBhdGggPSBjbG9uZVBhdGgocmVtb3ZlUGF0aCk7XG4gICAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZVBhdGggPSBhZGRQYXRoOyAvLyBObyBuZWVkIHRvIGNsb25lLCB3ZSd2ZSBwdWxsZWQgaXQgZnJvbSB0aGUgbGlzdFxuXG4gICAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB0cnVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9vbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpOyAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuXG4gICAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIF9vbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0cmFjayB0aGlzIHBhdGggYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlZGl0TGVuZ3RoKys7XG4gICAgICB9IC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgICAvLyBpcyBwcm9kdWNlZC5cblxuXG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgd2Ugd2FudCB0byBiZSBzYWZlLlxuXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgICAgZXhlYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9KSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICAgIHZhciByZXQgPSBleGVjRWRpdExlbmd0aCgpO1xuXG4gICAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHB1c2hDb21wb25lbnQ6IGZ1bmN0aW9uIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICAgIHZhciBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgICAgLy8gYXMgc2hhbGxvdyBhcnJheSBjbG9uZVxuICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgY291bnQ6IGxhc3QuY291bnQgKyAxLFxuICAgICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgICByZW1vdmVkOiByZW1vdmVkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgICByZW1vdmVkOiByZW1vdmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXh0cmFjdENvbW1vbjogZnVuY3Rpb24gZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCkge1xuICAgICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICBuZXdQb3MgPSBiYXNlUGF0aC5uZXdQb3MsXG4gICAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuICAgICAgICAgIGNvbW1vbkNvdW50ID0gMDtcblxuICAgICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcbiAgICAgICAgbmV3UG9zKys7XG4gICAgICAgIG9sZFBvcysrO1xuICAgICAgICBjb21tb25Db3VudCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tbW9uQ291bnQpIHtcbiAgICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHtcbiAgICAgICAgICBjb3VudDogY29tbW9uQ291bnRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICAgIHJldHVybiBvbGRQb3M7XG4gICAgfSxcbiAgICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgdGhpcy5vcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlRW1wdHk6IGZ1bmN0aW9uIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgICB2YXIgcmV0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgICAgcmV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBjYXN0SW5wdXQ6IGZ1bmN0aW9uIGNhc3RJbnB1dCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgdG9rZW5pemU6IGZ1bmN0aW9uIHRva2VuaXplKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihjaGFycykge1xuICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBjb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgdmFyIGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICAgIGNvbXBvbmVudExlbiA9IGNvbXBvbmVudHMubGVuZ3RoLFxuICAgICAgICBuZXdQb3MgPSAwLFxuICAgICAgICBvbGRQb3MgPSAwO1xuXG4gICAgZm9yICg7IGNvbXBvbmVudFBvcyA8IGNvbXBvbmVudExlbjsgY29tcG9uZW50UG9zKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG5cbiAgICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFN0cmluZ1tvbGRQb3MgKyBpXTtcbiAgICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDsgLy8gQ29tbW9uIGNhc2VcblxuICAgICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuICAgICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDsgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgICAgLy8gVGhlIGRpZmZpbmcgYWxnb3JpdGhtIGlzIHRpZWQgdG8gYWRkIHRoZW4gcmVtb3ZlIG91dHB1dCBhbmQgdGhpcyBpcyB0aGUgc2ltcGxlc3RcbiAgICAgICAgLy8gcm91dGUgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCB3aXRoIG1pbmltYWwgb3ZlcmhlYWQuXG5cbiAgICAgICAgaWYgKGNvbXBvbmVudFBvcyAmJiBjb21wb25lbnRzW2NvbXBvbmVudFBvcyAtIDFdLmFkZGVkKSB7XG4gICAgICAgICAgdmFyIHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgICBjb21wb25lbnRzW2NvbXBvbmVudFBvc10gPSB0bXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gICAgLy8gRm9yIHRoaXMgY2FzZSB3ZSBtZXJnZSB0aGUgdGVybWluYWwgaW50byB0aGUgcHJpb3Igc3RyaW5nIGFuZCBkcm9wIHRoZSBjaGFuZ2UuXG4gICAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3Igc3RyaW5nIG1vZGUuXG5cblxuICAgIHZhciBsYXN0Q29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAxXTtcblxuICAgIGlmIChjb21wb25lbnRMZW4gPiAxICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJyAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpICYmIGRpZmYuZXF1YWxzKCcnLCBsYXN0Q29tcG9uZW50LnZhbHVlKSkge1xuICAgICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBsYXN0Q29tcG9uZW50LnZhbHVlO1xuICAgICAgY29tcG9uZW50cy5wb3AoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lUGF0aChwYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld1BvczogcGF0aC5uZXdQb3MsXG4gICAgICBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMClcbiAgICB9O1xuICB9XG5cbiAgdmFyIGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuICBmdW5jdGlvbiBkaWZmQ2hhcnMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0cykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucykge1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRzO1xuICB9XG5cbiAgLy9cbiAgLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG4gIC8vICAtIFUrMDBENyAgw5cgTXVsdGlwbGljYXRpb24gc2lnblxuICAvLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbiAgLy8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0ZcbiAgLy8gTGF0aW4gRXh0ZW5kZWQtQiwgMDE4MOKAkzAyNEZcbiAgLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4gIC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcbiAgLy8gIC0gVSswMkM3ICDLhyAmIzcxMTsgIENhcm9uXG4gIC8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuICAvLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG4gIC8vICAtIFUrMDJEQSAgy5ogJiM3MzA7ICBSaW5nIEFib3ZlXG4gIC8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbiAgLy8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG4gIC8vICAtIFUrMDJERCAgy50gJiM3MzM7ICBEb3VibGUgQWN1dGUgQWNjZW50XG4gIC8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5cbiAgdmFyIGV4dGVuZGVkV29yZENoYXJzID0gL15bQS1aYS16XFx4QzAtXFx1MDJDNlxcdTAyQzgtXFx1MDJEN1xcdTAyREUtXFx1MDJGRlxcdTFFMDAtXFx1MUVGRl0rJC87XG4gIHZhciByZVdoaXRlc3BhY2UgPSAvXFxTLztcbiAgdmFyIHdvcmREaWZmID0gbmV3IERpZmYoKTtcblxuICB3b3JkRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUNhc2UpIHtcbiAgICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICByaWdodCA9IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlICYmICFyZVdoaXRlc3BhY2UudGVzdChsZWZ0KSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QocmlnaHQpO1xuICB9O1xuXG4gIHdvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQoLyhbXlxcU1xcclxcbl0rfFsoKVtcXF17fSdcIlxcclxcbl18XFxiKS8pOyAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgICAgaWYgKCF0b2tlbnNbaSArIDFdICYmIHRva2Vuc1tpICsgMl0gJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2kgKyAyXSkpIHtcbiAgICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDIpO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfTtcblxuICBmdW5jdGlvbiBkaWZmV29yZHMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtcbiAgICAgIGlnbm9yZVdoaXRlc3BhY2U6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICB9XG5cbiAgdmFyIGxpbmVEaWZmID0gbmV3IERpZmYoKTtcblxuICBsaW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciByZXRMaW5lcyA9IFtdLFxuICAgICAgICBsaW5lc0FuZE5ld2xpbmVzID0gdmFsdWUuc3BsaXQoLyhcXG58XFxyXFxuKS8pOyAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcblxuICAgIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICAgIH0gLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZSA9IGxpbmVzQW5kTmV3bGluZXNbaV07XG5cbiAgICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXRMaW5lcztcbiAgfTtcblxuICBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbiAgfVxuICBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICAgIHZhciBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKGNhbGxiYWNrLCB7XG4gICAgICBpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICB9XG5cbiAgdmFyIHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5cbiAgc2VudGVuY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oXFxTLis/Wy4hP10pKD89XFxzK3wkKS8pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGRpZmZTZW50ZW5jZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7XG4gIH1cblxuICB2YXIgY3NzRGlmZiA9IG5ldyBEaWZmKCk7XG5cbiAgY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcbiAgfTtcblxuICBmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBjc3NEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICAgIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG4gIH1cblxuICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gICAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBvYmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBqc29uRGlmZiA9IG5ldyBEaWZmKCk7IC8vIERpc2NyaW1pbmF0ZSBiZXR3ZWVuIHR3byBsaW5lcyBvZiBwcmV0dHktcHJpbnRlZCwgc2VyaWFsaXplZCBKU09OIHdoZXJlIG9uZSBvZiB0aGVtIGhhcyBhXG4gIC8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuXG4gIGpzb25EaWZmLnVzZUxvbmdlc3RUb2tlbiA9IHRydWU7XG4gIGpzb25EaWZmLnRva2VuaXplID0gbGluZURpZmYudG9rZW5pemU7XG5cbiAganNvbkRpZmYuY2FzdElucHV0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZFJlcGxhY2VtZW50ID0gX3RoaXMkb3B0aW9ucy51bmRlZmluZWRSZXBsYWNlbWVudCxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRzdHJpbmdpID0gX3RoaXMkb3B0aW9ucy5zdHJpbmdpZnlSZXBsYWNlcixcbiAgICAgICAgc3RyaW5naWZ5UmVwbGFjZXIgPSBfdGhpcyRvcHRpb25zJHN0cmluZ2kgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2O1xuICAgIH0gOiBfdGhpcyRvcHRpb25zJHN0cmluZ2k7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KGNhbm9uaWNhbGl6ZSh2YWx1ZSwgbnVsbCwgbnVsbCwgc3RyaW5naWZ5UmVwbGFjZXIpLCBzdHJpbmdpZnlSZXBsYWNlciwgJyAgJyk7XG4gIH07XG5cbiAganNvbkRpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gICAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscy5jYWxsKGpzb25EaWZmLCBsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZGlmZkpzb24ob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpIHtcbiAgICByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4gIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgb24gdGhlIFwic3RhY2tcIiBvZiBpdGVtcyBiZWluZyBwcm9jZXNzZWQuIEFjY2VwdHMgYW4gb3B0aW9uYWwgcmVwbGFjZXJcblxuICBmdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSkge1xuICAgIHN0YWNrID0gc3RhY2sgfHwgW107XG4gICAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgICBpZiAocmVwbGFjZXIpIHtcbiAgICAgIG9iaiA9IHJlcGxhY2VyKGtleSwgb2JqKTtcbiAgICB9XG5cbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhY2tbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNhbm9uaWNhbGl6ZWRPYmo7XG5cbiAgICBpZiAoJ1tvYmplY3QgQXJyYXldJyA9PT0gb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcuY2FsbChvYmopKSB7XG4gICAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgICBjYW5vbmljYWxpemVkT2JqID0gbmV3IEFycmF5KG9iai5sZW5ndGgpO1xuICAgICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICAgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuICAgIH1cblxuICAgIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgICAgb2JqID0gb2JqLnRvSlNPTigpO1xuICAgIH1cblxuICAgIGlmIChfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgc3RhY2sucHVzaChvYmopO1xuICAgICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXG4gICAgICB2YXIgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICAgIF9rZXk7XG5cbiAgICAgIGZvciAoX2tleSBpbiBvYmopIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICAgIHNvcnRlZEtleXMucHVzaChfa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNvcnRlZEtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgX2tleSA9IHNvcnRlZEtleXNbaV07XG4gICAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbX2tleV0gPSBjYW5vbmljYWxpemUob2JqW19rZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIF9rZXkpO1xuICAgICAgfVxuXG4gICAgICBzdGFjay5wb3AoKTtcbiAgICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG4gIH1cblxuICB2YXIgYXJyYXlEaWZmID0gbmV3IERpZmYoKTtcblxuICBhcnJheURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbiAgfTtcblxuICBhcnJheURpZmYuam9pbiA9IGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBhcnJheURpZmYuZGlmZihvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBkaWZmc3RyID0gdW5pRGlmZi5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgICBsaXN0ID0gW10sXG4gICAgICAgIGkgPSAwO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICAgIHZhciBpbmRleCA9IHt9O1xuICAgICAgbGlzdC5wdXNoKGluZGV4KTsgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuXG4gICAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBsaW5lID0gZGlmZnN0cltpXTsgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcblxuICAgICAgICBpZiAoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBEaWZmIGluZGV4XG5cblxuICAgICAgICB2YXIgaGVhZGVyID0gL14oPzpJbmRleDp8ZGlmZig/OiAtciBcXHcrKSspXFxzKyguKz8pXFxzKiQvLmV4ZWMobGluZSk7XG5cbiAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgICAgfSAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgaXNzdWVzIHRvIGhhdmUgYW4gaXNvbGF0ZWQgaHVuayB3aXRob3V0IGZpbGUgaGVhZGVyXG5cblxuICAgICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcbiAgICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7IC8vIFBhcnNlIGh1bmtzXG5cbiAgICAgIGluZGV4Lmh1bmtzID0gW107XG5cbiAgICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgICAgdmFyIF9saW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgICBpZiAoL14oSW5kZXg6fGRpZmZ8XFwtXFwtXFwtfFxcK1xcK1xcKylcXHMvLnRlc3QoX2xpbmUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoL15AQC8udGVzdChfbGluZSkpIHtcbiAgICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChfbGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAgIC8vIElnbm9yZSB1bmV4cGVjdGVkIGNvbnRlbnQgdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUGFyc2VzIHRoZSAtLS0gYW5kICsrKyBoZWFkZXJzLCBpZiBub25lIGFyZSBmb3VuZCwgbm8gbGluZXNcbiAgICAvLyBhcmUgY29uc3VtZWQuXG5cblxuICAgIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgICAgdmFyIGZpbGVIZWFkZXIgPSAvXigtLS18XFwrXFwrXFwrKVxccysoLiopJC8uZXhlYyhkaWZmc3RyW2ldKTtcblxuICAgICAgaWYgKGZpbGVIZWFkZXIpIHtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGZpbGVIZWFkZXJbMV0gPT09ICctLS0nID8gJ29sZCcgOiAnbmV3JztcbiAgICAgICAgdmFyIGRhdGEgPSBmaWxlSGVhZGVyWzJdLnNwbGl0KCdcXHQnLCAyKTtcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuXG4gICAgICAgIGlmICgvXlwiLipcIiQvLnRlc3QoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleFtrZXlQcmVmaXggKyAnRmlsZU5hbWUnXSA9IGZpbGVOYW1lO1xuICAgICAgICBpbmRleFtrZXlQcmVmaXggKyAnSGVhZGVyJ10gPSAoZGF0YVsxXSB8fCAnJykudHJpbSgpO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSAvLyBQYXJzZXMgYSBodW5rXG4gICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG5cblxuICAgIGZ1bmN0aW9uIHBhcnNlSHVuaygpIHtcbiAgICAgIHZhciBjaHVua0hlYWRlckluZGV4ID0gaSxcbiAgICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG4gICAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG4gICAgICB2YXIgaHVuayA9IHtcbiAgICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgICAgb2xkTGluZXM6IHR5cGVvZiBjaHVua0hlYWRlclsyXSA9PT0gJ3VuZGVmaW5lZCcgPyAxIDogK2NodW5rSGVhZGVyWzJdLFxuICAgICAgICBuZXdTdGFydDogK2NodW5rSGVhZGVyWzNdLFxuICAgICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgbGluZWRlbGltaXRlcnM6IFtdXG4gICAgICB9OyAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG5cbiAgICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsub2xkU3RhcnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgICAgaHVuay5uZXdTdGFydCArPSAxO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWRkQ291bnQgPSAwLFxuICAgICAgICAgIHJlbW92ZUNvdW50ID0gMDtcblxuICAgICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG4gICAgICAgIC8vIEJ1dCB0aGV5IGNvdWxkIGJlIHRoZSBoZWFkZXIgZm9yIHRoZSBuZXh0IGZpbGUuIFRoZXJlZm9yZSBwcnVuZSBzdWNoIGNhc2VzIG91dC5cbiAgICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwICYmIGkgKyAyIDwgZGlmZnN0ci5sZW5ndGggJiYgZGlmZnN0cltpICsgMV0uaW5kZXhPZignKysrICcpID09PSAwICYmIGRpZmZzdHJbaSArIDJdLmluZGV4T2YoJ0BAJykgPT09IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVyYXRpb24gPSBkaWZmc3RyW2ldLmxlbmd0aCA9PSAwICYmIGkgIT0gZGlmZnN0ci5sZW5ndGggLSAxID8gJyAnIDogZGlmZnN0cltpXVswXTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgICBodW5rLmxpbmVzLnB1c2goZGlmZnN0cltpXSk7XG4gICAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IC8vIEhhbmRsZSB0aGUgZW1wdHkgYmxvY2sgY291bnQgY2FzZVxuXG5cbiAgICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuICAgICAgICBodW5rLm5ld0xpbmVzID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG4gICAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuICAgICAgfSAvLyBQZXJmb3JtIG9wdGlvbmFsIHNhbml0eSBjaGVja2luZ1xuXG5cbiAgICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuICAgICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZGVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVtb3ZlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGh1bms7XG4gICAgfVxuXG4gICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgcGFyc2VJbmRleCgpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4gIC8vIGJ5IGRpc3RhbmNlIGZyb20gYSBnaXZlbiBzdGFydCBwb3NpdGlvbi4gSS5lLiBmb3IgWzAsIDRdLCB3aXRoXG4gIC8vIHN0YXJ0IG9mIDIsIHRoaXMgd2lsbCBpdGVyYXRlIDIsIDMsIDEsIDQsIDAuXG4gIGZ1bmN0aW9uIGRpc3RhbmNlSXRlcmF0b3IgKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gICAgdmFyIHdhbnRGb3J3YXJkID0gdHJ1ZSxcbiAgICAgICAgYmFja3dhcmRFeGhhdXN0ZWQgPSBmYWxzZSxcbiAgICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgICBsb2NhbE9mZnNldCA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGl0ZXJhdG9yKCkge1xuICAgICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICAgIGxvY2FsT2Zmc2V0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgICAgfSAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJleW9uZCB0ZXh0IGxlbmd0aCwgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuICAgICAgICAvLyBhZnRlciBvZmZzZXQgbG9jYXRpb24gKG9yIGRlc2lyZWQgbG9jYXRpb24gb24gZmlyc3QgaXRlcmF0aW9uKVxuXG5cbiAgICAgICAgaWYgKHN0YXJ0ICsgbG9jYWxPZmZzZXQgPD0gbWF4TGluZSkge1xuICAgICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJhY2t3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIGlmICghZm9yd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgICAgfSAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuICAgICAgICAvLyBiZWZvcmUgb2Zmc2V0IGxvY2F0aW9uXG5cblxuICAgICAgICBpZiAobWluTGluZSA8PSBzdGFydCAtIGxvY2FsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFja3dhcmRFeGhhdXN0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICAgIH0gLy8gV2UgdHJpZWQgdG8gZml0IGh1bmsgYmVmb3JlIHRleHQgYmVnaW5uaW5nIGFuZCBiZXlvbmQgdGV4dCBsZW5ndGgsIHRoZW5cbiAgICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG5cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlQYXRjaChzb3VyY2UsIHVuaURpZmYpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1bmlEaWZmKSkge1xuICAgICAgaWYgKHVuaURpZmYubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgICAgfVxuXG4gICAgICB1bmlEaWZmID0gdW5pRGlmZlswXTtcbiAgICB9IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuXG5cbiAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG4gICAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgICBodW5rcyA9IHVuaURpZmYuaHVua3MsXG4gICAgICAgIGNvbXBhcmVMaW5lID0gb3B0aW9ucy5jb21wYXJlTGluZSB8fCBmdW5jdGlvbiAobGluZU51bWJlciwgbGluZSwgb3BlcmF0aW9uLCBwYXRjaENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBsaW5lID09PSBwYXRjaENvbnRlbnQ7XG4gICAgfSxcbiAgICAgICAgZXJyb3JDb3VudCA9IDAsXG4gICAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcbiAgICAgICAgbWluTGluZSA9IDAsXG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIHJlbW92ZUVPRk5MLFxuICAgICAgICBhZGRFT0ZOTDtcbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiBodW5rRml0cyhodW5rLCB0b1Bvcykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBodW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmUubGVuZ3RoID4gMCA/IGxpbmVbMF0gOiAnICcsXG4gICAgICAgICAgICBjb250ZW50ID0gbGluZS5sZW5ndGggPiAwID8gbGluZS5zdWJzdHIoMSkgOiBsaW5lO1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIC8vIENvbnRleHQgc2FuaXR5IGNoZWNrXG4gICAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgICAgZXJyb3JDb3VudCsrO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3JDb3VudCA+IGZ1enpGYWN0b3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRvUG9zKys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBodW5rID0gaHVua3NbaV0sXG4gICAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgICAgbG9jYWxPZmZzZXQgPSAwLFxuICAgICAgICAgIHRvUG9zID0gb2Zmc2V0ICsgaHVuay5vbGRTdGFydCAtIDE7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBkaXN0YW5jZUl0ZXJhdG9yKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuICAgICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgICBpZiAoaHVua0ZpdHMoaHVuaywgdG9Qb3MgKyBsb2NhbE9mZnNldCkpIHtcbiAgICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgICAvLyB0byBmaXQgb3ZlciBhbHJlYWR5IHBhdGNoZWQgdGV4dFxuXG5cbiAgICAgIG1pbkxpbmUgPSBodW5rLm9mZnNldCArIGh1bmsub2xkU3RhcnQgKyBodW5rLm9sZExpbmVzO1xuICAgIH0gLy8gQXBwbHkgcGF0Y2ggaHVua3NcblxuXG4gICAgdmFyIGRpZmZPZmZzZXQgPSAwO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGh1bmtzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9odW5rID0gaHVua3NbX2ldLFxuICAgICAgICAgIF90b1BvcyA9IF9odW5rLm9sZFN0YXJ0ICsgX2h1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG5cbiAgICAgIGRpZmZPZmZzZXQgKz0gX2h1bmsubmV3TGluZXMgLSBfaHVuay5vbGRMaW5lcztcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbGluZSA9IF9odW5rLmxpbmVzW2pdLFxuICAgICAgICAgICAgb3BlcmF0aW9uID0gbGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyxcbiAgICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUsXG4gICAgICAgICAgICBkZWxpbWl0ZXIgPSBfaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBfdG9Qb3MrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDEpO1xuICAgICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMSk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDAsIGNvbnRlbnQpO1xuICAgICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMCwgZGVsaW1pdGVyKTtcbiAgICAgICAgICBfdG9Qb3MrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICAgIHZhciBwcmV2aW91c09wZXJhdGlvbiA9IF9odW5rLmxpbmVzW2ogLSAxXSA/IF9odW5rLmxpbmVzW2ogLSAxXVswXSA6IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgICAgYWRkRU9GTkwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSGFuZGxlIEVPRk5MIGluc2VydGlvbi9yZW1vdmFsXG5cblxuICAgIGlmIChyZW1vdmVFT0ZOTCkge1xuICAgICAgd2hpbGUgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkge1xuICAgICAgICBsaW5lcy5wb3AoKTtcbiAgICAgICAgZGVsaW1pdGVycy5wb3AoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICAgIGRlbGltaXRlcnMucHVzaCgnXFxuJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IGxpbmVzLmxlbmd0aCAtIDE7IF9rKyspIHtcbiAgICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbiAgfSAvLyBXcmFwcGVyIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGUgZmlsZSBwYXRjaGVzIHZpYSBjYWxsYmFja3MuXG5cbiAgZnVuY3Rpb24gYXBwbHlQYXRjaGVzKHVuaURpZmYsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudEluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NJbmRleCgpIHtcbiAgICAgIHZhciBpbmRleCA9IHVuaURpZmZbY3VycmVudEluZGV4KytdO1xuXG4gICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMubG9hZEZpbGUoaW5kZXgsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdXBkYXRlZENvbnRlbnQgPSBhcHBseVBhdGNoKGRhdGEsIGluZGV4LCBvcHRpb25zKTtcbiAgICAgICAgb3B0aW9ucy5wYXRjaGVkKGluZGV4LCB1cGRhdGVkQ29udGVudCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0luZGV4KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0luZGV4KCk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gICAgfVxuXG4gICAgdmFyIGRpZmYgPSBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xuICAgIGRpZmYucHVzaCh7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBsaW5lczogW11cbiAgICB9KTsgLy8gQXBwZW5kIGFuIGVtcHR5IHZhbHVlIHRvIG1ha2UgY2xlYW51cCBlYXNpZXJcblxuICAgIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuICcgJyArIGVudHJ5O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGh1bmtzID0gW107XG4gICAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMCxcbiAgICAgICAgY3VyUmFuZ2UgPSBbXSxcbiAgICAgICAgb2xkTGluZSA9IDEsXG4gICAgICAgIG5ld0xpbmUgPSAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgICAgY3VycmVudC5saW5lcyA9IGxpbmVzO1xuXG4gICAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgICAgdmFyIF9jdXJSYW5nZTtcblxuICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZXZpb3VzIGNvbnRleHQsIHN0YXJ0IHdpdGggdGhhdFxuICAgICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgICB2YXIgcHJldiA9IGRpZmZbaSAtIDFdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgICBuZXdSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG5cblxuICAgICAgICAoX2N1clJhbmdlID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlLCBfdG9Db25zdW1hYmxlQXJyYXkobGluZXMubWFwKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgICAgfSkpKTsgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgICBpZiAob2xkUmFuZ2VTdGFydCkge1xuICAgICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgIHZhciBfY3VyUmFuZ2UyO1xuXG4gICAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgICAgKF9jdXJSYW5nZTIgPSBjdXJSYW5nZSkucHVzaC5hcHBseShfY3VyUmFuZ2UyLCBfdG9Db25zdW1hYmxlQXJyYXkoY29udGV4dExpbmVzKGxpbmVzKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX2N1clJhbmdlMztcblxuICAgICAgICAgICAgLy8gZW5kIHRoZSByYW5nZSBhbmQgb3V0cHV0XG4gICAgICAgICAgICB2YXIgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG5cbiAgICAgICAgICAgIChfY3VyUmFuZ2UzID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG5cbiAgICAgICAgICAgIHZhciBodW5rID0ge1xuICAgICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG4gICAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICBuZXdMaW5lczogbmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSxcbiAgICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoaSA+PSBkaWZmLmxlbmd0aCAtIDIgJiYgbGluZXMubGVuZ3RoIDw9IG9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuICAgICAgICAgICAgICB2YXIgb2xkRU9GTmV3bGluZSA9IC9cXG4kLy50ZXN0KG9sZFN0cik7XG4gICAgICAgICAgICAgIHZhciBuZXdFT0ZOZXdsaW5lID0gL1xcbiQvLnRlc3QobmV3U3RyKTtcbiAgICAgICAgICAgICAgdmFyIG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcblxuICAgICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG4gICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaWYgdGhlIG9sZCBmaWxlIGlzIGVtcHR5LCBkbyBub3Qgb3V0cHV0IHRoZSBuby1ubCBsaW5lXG4gICAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuICAgICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9sb29wKGkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsXG4gICAgICBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG4gICAgICBvbGRIZWFkZXI6IG9sZEhlYWRlcixcbiAgICAgIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgICAgaHVua3M6IGh1bmtzXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gICAgdmFyIHJldCA9IFtdO1xuXG4gICAgaWYgKGRpZmYub2xkRmlsZU5hbWUgPT0gZGlmZi5uZXdGaWxlTmFtZSkge1xuICAgICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGh1bmsgPSBkaWZmLmh1bmtzW2ldOyAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG5cbiAgICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICAgIGh1bmsub2xkU3RhcnQgLT0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgICAgaHVuay5uZXdTdGFydCAtPSAxO1xuICAgICAgfVxuXG4gICAgICByZXQucHVzaCgnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lcyArICcgKycgKyBodW5rLm5ld1N0YXJ0ICsgJywnICsgaHVuay5uZXdMaW5lcyArICcgQEAnKTtcbiAgICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICAgIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXlTdGFydHNXaXRoKGEsIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgICBpZiAoc3RhcnQubGVuZ3RoID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjTGluZUNvdW50KGh1bmspIHtcbiAgICB2YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuICAgICAgICBvbGRMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm9sZExpbmVzLFxuICAgICAgICBuZXdMaW5lcyA9IF9jYWxjT2xkTmV3TGluZUNvdW50Lm5ld0xpbmVzO1xuXG4gICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gICAgfVxuXG4gICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGh1bmsubmV3TGluZXM7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1lcmdlKG1pbmUsIHRoZWlycywgYmFzZSkge1xuICAgIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gICAgdGhlaXJzID0gbG9hZFBhdGNoKHRoZWlycywgYmFzZSk7XG4gICAgdmFyIHJldCA9IHt9OyAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG4gICAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gICAgLy8gbWVhbmluZyBpbiB0aGVpciBvd24gY29udGV4dC5cblxuICAgIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuICAgICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG4gICAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuICAgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcbiAgICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcbiAgICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG4gICAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuICAgICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcbiAgICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuICAgICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuICAgICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG4gICAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcbiAgICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuICAgICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0Lmh1bmtzID0gW107XG4gICAgdmFyIG1pbmVJbmRleCA9IDAsXG4gICAgICAgIHRoZWlyc0luZGV4ID0gMCxcbiAgICAgICAgbWluZU9mZnNldCA9IDAsXG4gICAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgICB3aGlsZSAobWluZUluZGV4IDwgbWluZS5odW5rcy5sZW5ndGggfHwgdGhlaXJzSW5kZXggPCB0aGVpcnMuaHVua3MubGVuZ3RoKSB7XG4gICAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge1xuICAgICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICAgIH0sXG4gICAgICAgICAgdGhlaXJzQ3VycmVudCA9IHRoZWlycy5odW5rc1t0aGVpcnNJbmRleF0gfHwge1xuICAgICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICAgIH07XG5cbiAgICAgIGlmIChodW5rQmVmb3JlKG1pbmVDdXJyZW50LCB0aGVpcnNDdXJyZW50KSkge1xuICAgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcbiAgICAgICAgbWluZUluZGV4Kys7XG4gICAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuICAgICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICAgIG1pbmVPZmZzZXQgKz0gdGhlaXJzQ3VycmVudC5uZXdMaW5lcyAtIHRoZWlyc0N1cnJlbnQub2xkTGluZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuICAgICAgICB2YXIgbWVyZ2VkSHVuayA9IHtcbiAgICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICAgIG9sZExpbmVzOiAwLFxuICAgICAgICAgIG5ld1N0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5uZXdTdGFydCArIG1pbmVPZmZzZXQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQgKyB0aGVpcnNPZmZzZXQpLFxuICAgICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICAgIGxpbmVzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgICByZXQuaHVua3MucHVzaChtZXJnZWRIdW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICgvXkBAL20udGVzdChwYXJhbSkgfHwgL15JbmRleDovbS50ZXN0KHBhcmFtKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VQYXRjaChwYXJhbSlbMF07XG4gICAgICB9XG5cbiAgICAgIGlmICghYmFzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBhIGJhc2UgcmVmZXJlbmNlIG9yIHBhc3MgaW4gYSBwYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RydWN0dXJlZFBhdGNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBiYXNlLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG4gICAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdEZpZWxkKGluZGV4LCBtaW5lLCB0aGVpcnMpIHtcbiAgICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgICByZXR1cm4gbWluZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluZTogbWluZSxcbiAgICAgICAgdGhlaXJzOiB0aGVpcnNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuICAgIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnQgJiYgdGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMgPCBjaGVjay5vbGRTdGFydDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsXG4gICAgICBvbGRMaW5lczogaHVuay5vbGRMaW5lcyxcbiAgICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LFxuICAgICAgbmV3TGluZXM6IGh1bmsubmV3TGluZXMsXG4gICAgICBsaW5lczogaHVuay5saW5lc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcbiAgICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuICAgIC8vIGlzIHRoZSBvbmx5IG92ZXJsYXAgd2hlcmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtZXJnZSB0aGUgY29udGVudCBoZXJlLlxuICAgIHZhciBtaW5lID0ge1xuICAgICAgb2Zmc2V0OiBtaW5lT2Zmc2V0LFxuICAgICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICAgIGluZGV4OiAwXG4gICAgfSxcbiAgICAgICAgdGhlaXIgPSB7XG4gICAgICBvZmZzZXQ6IHRoZWlyT2Zmc2V0LFxuICAgICAgbGluZXM6IHRoZWlyTGluZXMsXG4gICAgICBpbmRleDogMFxuICAgIH07IC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG5cbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTsgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXG4gICAgd2hpbGUgKG1pbmUuaW5kZXggPCBtaW5lLmxpbmVzLmxlbmd0aCAmJiB0aGVpci5pbmRleCA8IHRoZWlyLmxpbmVzLmxlbmd0aCkge1xuICAgICAgdmFyIG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcbiAgICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICAgIGlmICgobWluZUN1cnJlbnRbMF0gPT09ICctJyB8fCBtaW5lQ3VycmVudFswXSA9PT0gJysnKSAmJiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgfHwgdGhlaXJDdXJyZW50WzBdID09PSAnKycpKSB7XG4gICAgICAgIC8vIEJvdGggbW9kaWZpZWQgLi4uXG4gICAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnKycgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgICAgdmFyIF9odW5rJGxpbmVzO1xuXG4gICAgICAgIC8vIE1pbmUgaW5zZXJ0ZWRcbiAgICAgICAgKF9odW5rJGxpbmVzID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lcywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbGxlY3RDaGFuZ2UobWluZSkpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgICB2YXIgX2h1bmskbGluZXMyO1xuXG4gICAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgICAoX2h1bmskbGluZXMyID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczIsIF90b0NvbnN1bWFibGVBcnJheShjb2xsZWN0Q2hhbmdlKHRoZWlyKSkpO1xuICAgICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgICAgcmVtb3ZhbChodW5rLCB0aGVpciwgbWluZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgICBodW5rLmxpbmVzLnB1c2gobWluZUN1cnJlbnQpO1xuICAgICAgICBtaW5lLmluZGV4Kys7XG4gICAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICAgIH1cbiAgICB9IC8vIE5vdyBwdXNoIGFueXRoaW5nIHRoYXQgbWF5IGJlIHJlbWFpbmluZ1xuXG5cbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCBtaW5lKTtcbiAgICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG4gICAgY2FsY0xpbmVDb3VudChodW5rKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcikge1xuICAgIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuICAgIGlmIChhbGxSZW1vdmVzKG15Q2hhbmdlcykgJiYgYWxsUmVtb3Zlcyh0aGVpckNoYW5nZXMpKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgICB2YXIgX2h1bmskbGluZXMzO1xuXG4gICAgICAgIChfaHVuayRsaW5lczMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMywgX3RvQ29uc3VtYWJsZUFycmF5KG15Q2hhbmdlcykpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoYXJyYXlTdGFydHNXaXRoKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKSAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIF9odW5rJGxpbmVzNDtcblxuICAgICAgICAoX2h1bmskbGluZXM0ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczQsIF90b0NvbnN1bWFibGVBcnJheSh0aGVpckNoYW5nZXMpKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcnJheUVxdWFsKG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKSkge1xuICAgICAgdmFyIF9odW5rJGxpbmVzNTtcblxuICAgICAgKF9odW5rJGxpbmVzNSA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM1LCBfdG9Db25zdW1hYmxlQXJyYXkobXlDaGFuZ2VzKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG4gICAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuXG4gICAgaWYgKHRoZWlyQ2hhbmdlcy5tZXJnZWQpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczY7XG5cbiAgICAgIChfaHVuayRsaW5lczYgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzNiwgX3RvQ29uc3VtYWJsZUFycmF5KHRoZWlyQ2hhbmdlcy5tZXJnZWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgICBodW5rLmxpbmVzLnB1c2goe1xuICAgICAgY29uZmxpY3Q6IHRydWUsXG4gICAgICBtaW5lOiBtaW5lLFxuICAgICAgdGhlaXJzOiB0aGVpclxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0TGVhZGluZyhodW5rLCBpbnNlcnQsIHRoZWlyKSB7XG4gICAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgICAgdmFyIGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuICAgICAgaW5zZXJ0Lm9mZnNldCsrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICAgIHdoaWxlIChpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG4gICAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICAgIHZhciByZXQgPSBbXSxcbiAgICAgICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuXG4gICAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTsgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gbGluZVswXSkge1xuICAgICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgICAgc3RhdGUuaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gICAgdmFyIGNoYW5nZXMgPSBbXSxcbiAgICAgICAgbWVyZ2VkID0gW10sXG4gICAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuICAgICAgICBjb25mbGljdGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGggJiYgc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07IC8vIE9uY2Ugd2UndmUgaGl0IG91ciBhZGQsIHRoZW4gd2UgYXJlIGRvbmVcblxuICAgICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG4gICAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgICBtYXRjaEluZGV4Kys7IC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG4gICAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG5cbiAgICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuICAgICAgICB3aGlsZSAoY2hhbmdlWzBdID09PSAnKycpIHtcbiAgICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICBzdGF0ZS5pbmRleCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF0gfHwgJycpWzBdID09PSAnKycgJiYgY29udGV4dENoYW5nZXMpIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb25mbGljdGVkKSB7XG4gICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG5cbiAgICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsbFJlbW92ZXMoY2hhbmdlcykge1xuICAgIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY2hhbmdlKSB7XG4gICAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNraXBSZW1vdmVTdXBlcnNldChzdGF0ZSwgcmVtb3ZlQ2hhbmdlcywgZGVsdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcbiAgICAgIHZhciBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuXG4gICAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gICAgdmFyIG9sZExpbmVzID0gMDtcbiAgICB2YXIgbmV3TGluZXMgPSAwO1xuICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2YgbGluZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICAgIHZhciB0aGVpckNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLnRoZWlycyk7XG5cbiAgICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgICAgb2xkTGluZXMgKz0gbXlDb3VudC5vbGRMaW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAobXlDb3VudC5uZXdMaW5lcyA9PT0gdGhlaXJDb3VudC5uZXdMaW5lcykge1xuICAgICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgICAgb2xkTGluZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBvbGRMaW5lczogb2xkTGluZXMsXG4gICAgICBuZXdMaW5lczogbmV3TGluZXNcbiAgICB9O1xuICB9XG5cbiAgLy8gU2VlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvd2lraS9BUElcbiAgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG4gICAgdmFyIHJldCA9IFtdLFxuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIG9wZXJhdGlvbjtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcblxuICAgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgICBvcGVyYXRpb24gPSAxO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgICBvcGVyYXRpb24gPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZXJhdGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvWE1MKGNoYW5nZXMpIHtcbiAgICB2YXIgcmV0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXG4gICAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8aW5zPicpO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgICByZXQucHVzaCgnPGRlbD4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgICByZXQucHVzaCgnPC9pbnM+Jyk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICAgIHJldC5wdXNoKCc8L2RlbD4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0LmpvaW4oJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7XG4gICAgdmFyIG4gPSBzO1xuICAgIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG4gICAgbiA9IG4ucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuICAgIG4gPSBuLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBleHBvcnRzLkRpZmYgPSBEaWZmO1xuICBleHBvcnRzLmFwcGx5UGF0Y2ggPSBhcHBseVBhdGNoO1xuICBleHBvcnRzLmFwcGx5UGF0Y2hlcyA9IGFwcGx5UGF0Y2hlcztcbiAgZXhwb3J0cy5jYW5vbmljYWxpemUgPSBjYW5vbmljYWxpemU7XG4gIGV4cG9ydHMuY29udmVydENoYW5nZXNUb0RNUCA9IGNvbnZlcnRDaGFuZ2VzVG9ETVA7XG4gIGV4cG9ydHMuY29udmVydENoYW5nZXNUb1hNTCA9IGNvbnZlcnRDaGFuZ2VzVG9YTUw7XG4gIGV4cG9ydHMuY3JlYXRlUGF0Y2ggPSBjcmVhdGVQYXRjaDtcbiAgZXhwb3J0cy5jcmVhdGVUd29GaWxlc1BhdGNoID0gY3JlYXRlVHdvRmlsZXNQYXRjaDtcbiAgZXhwb3J0cy5kaWZmQXJyYXlzID0gZGlmZkFycmF5cztcbiAgZXhwb3J0cy5kaWZmQ2hhcnMgPSBkaWZmQ2hhcnM7XG4gIGV4cG9ydHMuZGlmZkNzcyA9IGRpZmZDc3M7XG4gIGV4cG9ydHMuZGlmZkpzb24gPSBkaWZmSnNvbjtcbiAgZXhwb3J0cy5kaWZmTGluZXMgPSBkaWZmTGluZXM7XG4gIGV4cG9ydHMuZGlmZlNlbnRlbmNlcyA9IGRpZmZTZW50ZW5jZXM7XG4gIGV4cG9ydHMuZGlmZlRyaW1tZWRMaW5lcyA9IGRpZmZUcmltbWVkTGluZXM7XG4gIGV4cG9ydHMuZGlmZldvcmRzID0gZGlmZldvcmRzO1xuICBleHBvcnRzLmRpZmZXb3Jkc1dpdGhTcGFjZSA9IGRpZmZXb3Jkc1dpdGhTcGFjZTtcbiAgZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuICBleHBvcnRzLnBhcnNlUGF0Y2ggPSBwYXJzZVBhdGNoO1xuICBleHBvcnRzLnN0cnVjdHVyZWRQYXRjaCA9IHN0cnVjdHVyZWRQYXRjaDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmQ7XG5cbi8qXG4gIHZhciBvYmogPSB7YTogMywgYjogNX07XG4gIGV4dGVuZChvYmosIHthOiA0LCBjOiA4fSk7IC8vIHthOiA0LCBiOiA1LCBjOiA4fVxuICBvYmo7IC8vIHthOiA0LCBiOiA1LCBjOiA4fVxuXG4gIHZhciBvYmogPSB7YTogMywgYjogNX07XG4gIGV4dGVuZCh7fSwgb2JqLCB7YTogNCwgYzogOH0pOyAvLyB7YTogNCwgYjogNSwgYzogOH1cbiAgb2JqOyAvLyB7YTogMywgYjogNX1cblxuICB2YXIgYXJyID0gWzEsIDIsIDNdO1xuICB2YXIgb2JqID0ge2E6IDMsIGI6IDV9O1xuICBleHRlbmQob2JqLCB7YzogYXJyfSk7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgM119XG4gIGFyci5wdXNoKDQpO1xuICBvYmo7IC8vIHthOiAzLCBiOiA1LCBjOiBbMSwgMiwgMywgNF19XG5cbiAgdmFyIGFyciA9IFsxLCAyLCAzXTtcbiAgdmFyIG9iaiA9IHthOiAzLCBiOiA1fTtcbiAgZXh0ZW5kKHRydWUsIG9iaiwge2M6IGFycn0pOyAvLyB7YTogMywgYjogNSwgYzogWzEsIDIsIDNdfVxuICBhcnIucHVzaCg0KTtcbiAgb2JqOyAvLyB7YTogMywgYjogNSwgYzogWzEsIDIsIDNdfVxuXG4gIGV4dGVuZCh7YTogNCwgYjogNX0pOyAvLyB7YTogNCwgYjogNX1cbiAgZXh0ZW5kKHthOiA0LCBiOiA1fSwgMyk7IHthOiA0LCBiOiA1fVxuICBleHRlbmQoe2E6IDQsIGI6IDV9LCB0cnVlKTsge2E6IDQsIGI6IDV9XG4gIGV4dGVuZCgnaGVsbG8nLCB7YTogNCwgYjogNX0pOyAvLyB0aHJvd3NcbiAgZXh0ZW5kKDMsIHthOiA0LCBiOiA1fSk7IC8vIHRocm93c1xuKi9cblxuZnVuY3Rpb24gZXh0ZW5kKC8qIFtkZWVwXSwgb2JqMSwgb2JqMiwgW29iam5dICovKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB2YXIgZGVlcCA9IGZhbHNlO1xuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZGVlcCA9IGFyZ3Muc2hpZnQoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gYXJnc1swXTtcbiAgaWYgKGlzVW5leHRlbmRhYmxlKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4dGVuZGVlIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGV4dGVuZGVycyA9IGFyZ3Muc2xpY2UoMSk7XG4gIHZhciBsZW4gPSBleHRlbmRlcnMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGV4dGVuZGVyID0gZXh0ZW5kZXJzW2ldO1xuICAgIGZvciAodmFyIGtleSBpbiBleHRlbmRlcikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHRlbmRlciwga2V5KSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBleHRlbmRlcltrZXldO1xuICAgICAgICBpZiAoZGVlcCAmJiBpc0Nsb25lYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YXIgYmFzZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fTtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGV4dGVuZChcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpICYmICFpc1VuZXh0ZW5kYWJsZShyZXN1bHRba2V5XSlcbiAgICAgICAgICAgICAgPyByZXN1bHRba2V5XVxuICAgICAgICAgICAgICA6IGJhc2UsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc0Nsb25lYWJsZShvYmopIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSB8fCB7fS50b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmZ1bmN0aW9uIGlzVW5leHRlbmRhYmxlKHZhbCkge1xuICByZXR1cm4gIXZhbCB8fCAodHlwZW9mIHZhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsICE9ICdmdW5jdGlvbicpO1xufVxuIiwiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC8sXG4gICAgcmVMZWFkaW5nRG90ID0gL15cXC4vLFxuICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0IGluIElFIDwgOS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGhvc3Qgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSG9zdE9iamVjdCh2YWx1ZSkge1xuICAvLyBNYW55IGhvc3Qgb2JqZWN0cyBhcmUgYE9iamVjdGAgb2JqZWN0cyB0aGF0IGNhbiBjb2VyY2UgdG8gc3RyaW5nc1xuICAvLyBkZXNwaXRlIGhhdmluZyBpbXByb3Blcmx5IGRlZmluZWQgYHRvU3RyaW5nYCBtZXRob2RzLlxuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9ICEhKHZhbHVlICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXG4gICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgb2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2wsXG4gICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpLFxuICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICByZXR1cm4gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA/IGVudHJpZXMubGVuZ3RoIDogMDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGlzS2V5KHBhdGgsIG9iamVjdCkgPyBbcGF0aF0gOiBjYXN0UGF0aChwYXRoKTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IChpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc0hvc3RPYmplY3QodmFsdWUpKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogc3RyaW5nVG9QYXRoKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplKGZ1bmN0aW9uKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHJlTGVhZGluZ0RvdC50ZXN0KHN0cmluZykpIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBBc3NpZ24gY2FjaGUgdG8gYF8ubWVtb2l6ZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA4LTkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXkgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAqXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICogLy8gPT4gM1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGNhY2hlIGEgcmVmZXJlbmNlIHRvIHNldFRpbWVvdXQsIHNvIHRoYXQgb3VyIHJlZmVyZW5jZSB3b24ndCBiZSBzdHViYmVkIG91dFxuLy8gd2hlbiB1c2luZyBmYWtlIHRpbWVycyBhbmQgZXJyb3JzIHdpbGwgc3RpbGwgZ2V0IGxvZ2dlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nqb2hhbnNlbi9TaW5vbi5KUy9pc3N1ZXMvMzgxXG52YXIgcmVhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuXG5mdW5jdGlvbiBjb25maWd1cmVMb2dnZXIoY29uZmlnKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIC8vIEZ1bmN0aW9uIHdoaWNoIHByaW50cyBlcnJvcnMuXG4gICAgaWYgKCFjb25maWcuaGFzT3duUHJvcGVydHkoXCJsb2dnZXJcIikpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgIGNvbmZpZy5sb2dnZXIgPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgICAvLyBXaGVuIHNldCB0byB0cnVlLCBhbnkgZXJyb3JzIGxvZ2dlZCB3aWxsIGJlIHRocm93biBpbW1lZGlhdGVseTtcbiAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIHRoZSBlcnJvcnMgd2lsbCBiZSB0aHJvd24gaW4gc2VwYXJhdGUgZXhlY3V0aW9uIGZyYW1lLlxuICAgIGlmICghY29uZmlnLmhhc093blByb3BlcnR5KFwidXNlSW1tZWRpYXRlRXhjZXB0aW9uc1wiKSkge1xuICAgICAgICBjb25maWcudXNlSW1tZWRpYXRlRXhjZXB0aW9ucyA9IHRydWU7XG4gICAgfVxuICAgIC8vIHdyYXAgcmVhbFNldFRpbWVvdXQgd2l0aCBzb21ldGhpbmcgd2UgY2FuIHN0dWIgaW4gdGVzdHNcbiAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcInNldFRpbWVvdXRcIikpIHtcbiAgICAgICAgY29uZmlnLnNldFRpbWVvdXQgPSByZWFsU2V0VGltZW91dDtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gbG9nRXJyb3IobGFiZWwsIGUpIHtcbiAgICAgICAgdmFyIG1zZyA9IGAke2xhYmVsfSB0aHJldyBleGNlcHRpb246IGA7XG4gICAgICAgIHZhciBlcnIgPSB7XG4gICAgICAgICAgICBuYW1lOiBlLm5hbWUgfHwgbGFiZWwsXG4gICAgICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UgfHwgZS50b1N0cmluZygpLFxuICAgICAgICAgICAgc3RhY2s6IGUuc3RhY2tcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiB0aHJvd0xvZ2dlZEVycm9yKCkge1xuICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBtc2cgKyBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5sb2dnZXIoYCR7bXNnfVske2Vyci5uYW1lfV0gJHtlcnIubWVzc2FnZX1gKTtcblxuICAgICAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBjb25maWcubG9nZ2VyKGVyci5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLnVzZUltbWVkaWF0ZUV4Y2VwdGlvbnMpIHtcbiAgICAgICAgICAgIHRocm93TG9nZ2VkRXJyb3IoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5zZXRUaW1lb3V0KHRocm93TG9nZ2VkRXJyb3IsIDApO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25maWd1cmVMb2dnZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEV2ZW50ID0gcmVxdWlyZShcIi4vZXZlbnRcIik7XG5cbmZ1bmN0aW9uIEN1c3RvbUV2ZW50KHR5cGUsIGN1c3RvbURhdGEsIHRhcmdldCkge1xuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdGFyZ2V0KTtcbiAgICB0aGlzLmRldGFpbCA9IGN1c3RvbURhdGEuZGV0YWlsIHx8IG51bGw7XG59XG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IG5ldyBFdmVudCgpO1xuXG5DdXN0b21FdmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDdXN0b21FdmVudDtcblxubW9kdWxlLmV4cG9ydHMgPSBDdXN0b21FdmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBmbGF0dGVuT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IE9iamVjdChvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FwdHVyZTogQm9vbGVhbihvcHRpb25zKSxcbiAgICAgICAgICAgIG9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FwdHVyZTogQm9vbGVhbihvcHRpb25zLmNhcHR1cmUpLFxuICAgICAgICBvbmNlOiBCb29sZWFuKG9wdGlvbnMub25jZSksXG4gICAgICAgIHBhc3NpdmU6IEJvb2xlYW4ob3B0aW9ucy5wYXNzaXZlKVxuICAgIH07XG59XG5mdW5jdGlvbiBub3QoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAhZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaGFzTGlzdGVuZXJGaWx0ZXIobGlzdGVuZXIsIGNhcHR1cmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obGlzdGVuZXJTcGVjKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBsaXN0ZW5lclNwZWMuY2FwdHVyZSA9PT0gY2FwdHVyZSAmJlxuICAgICAgICAgICAgbGlzdGVuZXJTcGVjLmxpc3RlbmVyID09PSBsaXN0ZW5lclxuICAgICAgICApO1xuICAgIH07XG59XG5cbnZhciBFdmVudFRhcmdldCA9IHtcbiAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ldmVudHRhcmdldC1hZGRldmVudGxpc3RlbmVyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBwcm92aWRlZE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgLy8gMy4gTGV0IGNhcHR1cmUsIHBhc3NpdmUsIGFuZCBvbmNlIGJlIHRoZSByZXN1bHQgb2YgZmxhdHRlbmluZyBtb3JlIG9wdGlvbnMuXG4gICAgICAgIC8vIEZsYXR0ZW4gcHJvcGVydHkgYmVmb3JlIGV4ZWN1dGluZyBzdGVwIDIsXG4gICAgICAgIC8vIGZldHVyZSBkZXRlY3Rpb24gaXMgdXN1YWxseSBiYXNlZCBvbiByZWdpc3RlcmluZyBoYW5kbGVyIHdpdGggb3B0aW9ucyBvYmplY3QsXG4gICAgICAgIC8vIHRoYXQgaGFzIGdldHRlciBkZWZpbmVkXG4gICAgICAgIC8vIGFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHt9LCB7XG4gICAgICAgIC8vICAgIGdldCBvbmNlKCkgeyBzdXBwb3J0c09uY2UgPSB0cnVlOyB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25zKHByb3ZpZGVkT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gMi4gSWYgY2FsbGJhY2sgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gbnVsbCB8fCBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0gPSB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSB8fCBbXTtcblxuICAgICAgICAvLyA0LiBJZiBjb250ZXh0IG9iamVjdOKAmXMgYXNzb2NpYXRlZCBsaXN0IG9mIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgIC8vICAgIGRvZXMgbm90IGNvbnRhaW4gYW4gZXZlbnQgbGlzdGVuZXIgd2hvc2UgdHlwZSBpcyB0eXBlLFxuICAgICAgICAvLyAgICBjYWxsYmFjayBpcyBjYWxsYmFjaywgYW5kIGNhcHR1cmUgaXMgY2FwdHVyZSwgdGhlbiBhcHBlbmRcbiAgICAgICAgLy8gICAgYSBuZXcgZXZlbnQgbGlzdGVuZXIgdG8gaXQsIHdob3NlIHR5cGUgaXMgdHlwZSwgY2FsbGJhY2sgaXNcbiAgICAgICAgLy8gICAgY2FsbGJhY2ssIGNhcHR1cmUgaXMgY2FwdHVyZSwgcGFzc2l2ZSBpcyBwYXNzaXZlLCBhbmQgb25jZSBpcyBvbmNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5ldmVudExpc3RlbmVyc1tldmVudF0uc29tZShcbiAgICAgICAgICAgICAgICBoYXNMaXN0ZW5lckZpbHRlcihsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLnB1c2goe1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICAgICAgICAgICAgICBjYXB0dXJlOiBvcHRpb25zLmNhcHR1cmUsXG4gICAgICAgICAgICAgICAgb25jZTogb3B0aW9ucy5vbmNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ldmVudHRhcmdldC1yZW1vdmVldmVudGxpc3RlbmVyXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyLFxuICAgICAgICBwcm92aWRlZE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzIHx8ICF0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gTGV0IGNhcHR1cmUgYmUgdGhlIHJlc3VsdCBvZiBmbGF0dGVuaW5nIG9wdGlvbnMuXG4gICAgICAgIHZhciBvcHRpb25zID0gZmxhdHRlbk9wdGlvbnMocHJvdmlkZWRPcHRpb25zKTtcblxuICAgICAgICAvLyAzLiBJZiB0aGVyZSBpcyBhbiBldmVudCBsaXN0ZW5lciBpbiB0aGUgYXNzb2NpYXRlZCBsaXN0IG9mXG4gICAgICAgIC8vICAgIGV2ZW50IGxpc3RlbmVycyB3aG9zZSB0eXBlIGlzIHR5cGUsIGNhbGxiYWNrIGlzIGNhbGxiYWNrLFxuICAgICAgICAvLyAgICBhbmQgY2FwdHVyZSBpcyBjYXB0dXJlLCB0aGVuIHNldCB0aGF0IGV2ZW50IGxpc3RlbmVy4oCZc1xuICAgICAgICAvLyAgICByZW1vdmVkIHRvIHRydWUgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBhc3NvY2lhdGVkIGxpc3Qgb2YgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzW2V2ZW50XSA9IHRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnRdLmZpbHRlcihcbiAgICAgICAgICAgIG5vdChoYXNMaXN0ZW5lckZpbHRlcihsaXN0ZW5lciwgb3B0aW9ucy5jYXB0dXJlKSlcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZXZlbnRMaXN0ZW5lcnMgfHwgIXRoaXMuZXZlbnRMaXN0ZW5lcnNbZXZlbnQudHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgdHlwZSA9IGV2ZW50LnR5cGU7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBzZWxmLmV2ZW50TGlzdGVuZXJzW3R5cGVdO1xuXG4gICAgICAgIC8vIFJlbW92ZSBsaXN0ZW5lcnMsIHRoYXQgc2hvdWxkIGJlIGRpc3BhdGNoZWQgb25jZVxuICAgICAgICAvLyBiZWZvcmUgcnVubmluZyBkaXNwYXRjaCBsb29wIHRvIGF2b2lkIG5lc3RlZCBkaXNwYXRjaCBpc3N1ZXNcbiAgICAgICAgc2VsZi5ldmVudExpc3RlbmVyc1t0eXBlXSA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24obGlzdGVuZXJTcGVjKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxpc3RlbmVyU3BlYy5vbmNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXJTcGVjKSB7XG4gICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lclNwZWMubGlzdGVuZXI7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHNlbGYsIGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gQm9vbGVhbihldmVudC5kZWZhdWx0UHJldmVudGVkKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50VGFyZ2V0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHRhcmdldCkge1xuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHRhcmdldCk7XG59XG5cbkV2ZW50LnByb3RvdHlwZSA9IHtcbiAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uKHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHRhcmdldCkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmJ1YmJsZXMgPSBidWJibGVzO1xuICAgICAgICB0aGlzLmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH0sXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge30sXG5cbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFdmVudDogcmVxdWlyZShcIi4vZXZlbnRcIiksXG4gICAgUHJvZ3Jlc3NFdmVudDogcmVxdWlyZShcIi4vcHJvZ3Jlc3MtZXZlbnRcIiksXG4gICAgQ3VzdG9tRXZlbnQ6IHJlcXVpcmUoXCIuL2N1c3RvbS1ldmVudFwiKSxcbiAgICBFdmVudFRhcmdldDogcmVxdWlyZShcIi4vZXZlbnQtdGFyZ2V0XCIpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFdmVudCA9IHJlcXVpcmUoXCIuL2V2ZW50XCIpO1xuXG5mdW5jdGlvbiBQcm9ncmVzc0V2ZW50KHR5cGUsIHByb2dyZXNzRXZlbnRSYXcsIHRhcmdldCkge1xuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdGFyZ2V0KTtcbiAgICB0aGlzLmxvYWRlZCA9XG4gICAgICAgIHR5cGVvZiBwcm9ncmVzc0V2ZW50UmF3LmxvYWRlZCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyBwcm9ncmVzc0V2ZW50UmF3LmxvYWRlZFxuICAgICAgICAgICAgOiBudWxsO1xuICAgIHRoaXMudG90YWwgPVxuICAgICAgICB0eXBlb2YgcHJvZ3Jlc3NFdmVudFJhdy50b3RhbCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyBwcm9ncmVzc0V2ZW50UmF3LnRvdGFsXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5sZW5ndGhDb21wdXRhYmxlID0gQm9vbGVhbihwcm9ncmVzc0V2ZW50UmF3LnRvdGFsKTtcbn1cblxuUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUgPSBuZXcgRXZlbnQoKTtcblxuUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9ncmVzc0V2ZW50O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb2dyZXNzRXZlbnQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIEZha2VUaW1lcnMgPSByZXF1aXJlKFwiQHNpbm9uanMvZmFrZS10aW1lcnNcIik7XG52YXIgZmFrZVNlcnZlciA9IHJlcXVpcmUoXCIuL2luZGV4XCIpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmZ1bmN0aW9uIFNlcnZlcigpIHt9XG5TZXJ2ZXIucHJvdG90eXBlID0gZmFrZVNlcnZlcjtcblxudmFyIGZha2VTZXJ2ZXJXaXRoQ2xvY2sgPSBuZXcgU2VydmVyKCk7XG5cbmZha2VTZXJ2ZXJXaXRoQ2xvY2suYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QoeGhyKSB7XG4gICAgaWYgKHhoci5hc3luYykge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQuY2xvY2sgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvY2sgPSBzZXRUaW1lb3V0LmNsb2NrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9jayA9IEZha2VUaW1lcnMuaW5zdGFsbCgpO1xuICAgICAgICAgICAgdGhpcy5yZXNldENsb2NrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5sb25nZXN0VGltZW91dCkge1xuICAgICAgICAgICAgdmFyIGNsb2NrU2V0VGltZW91dCA9IHRoaXMuY2xvY2suc2V0VGltZW91dDtcbiAgICAgICAgICAgIHZhciBjbG9ja1NldEludGVydmFsID0gdGhpcy5jbG9jay5zZXRJbnRlcnZhbDtcbiAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSB0aGlzO1xuXG4gICAgICAgICAgICB0aGlzLmNsb2NrLnNldFRpbWVvdXQgPSBmdW5jdGlvbihmbiwgdGltZW91dCkge1xuICAgICAgICAgICAgICAgIHNlcnZlci5sb25nZXN0VGltZW91dCA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubG9uZ2VzdFRpbWVvdXQgfHwgMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2tTZXRUaW1lb3V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmNsb2NrLnNldEludGVydmFsID0gZnVuY3Rpb24oZm4sIHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIubG9uZ2VzdFRpbWVvdXQgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLmxvbmdlc3RUaW1lb3V0IHx8IDBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrU2V0SW50ZXJ2YWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFrZVNlcnZlci5hZGRSZXF1ZXN0LmNhbGwodGhpcywgeGhyKTtcbn07XG5cbmZha2VTZXJ2ZXJXaXRoQ2xvY2sucmVzcG9uZCA9IGZ1bmN0aW9uIHJlc3BvbmQoKSB7XG4gICAgdmFyIHJldHVyblZhbCA9IGZha2VTZXJ2ZXIucmVzcG9uZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHRoaXMuY2xvY2spIHtcbiAgICAgICAgdGhpcy5jbG9jay50aWNrKHRoaXMubG9uZ2VzdFRpbWVvdXQgfHwgMCk7XG4gICAgICAgIHRoaXMubG9uZ2VzdFRpbWVvdXQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLnJlc2V0Q2xvY2spIHtcbiAgICAgICAgICAgIHRoaXMuY2xvY2sudW5pbnN0YWxsKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2xvY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5WYWw7XG59O1xuXG5mYWtlU2VydmVyV2l0aENsb2NrLnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgIGlmICh0aGlzLmNsb2NrKSB7XG4gICAgICAgIHRoaXMuY2xvY2sudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZha2VTZXJ2ZXIucmVzdG9yZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWtlU2VydmVyV2l0aENsb2NrO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBmYWtlWGhyID0gcmVxdWlyZShcIi4uL2Zha2UteGhyXCIpO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xudmFyIGxvZyA9IHJlcXVpcmUoXCIuL2xvZ1wiKTtcbnZhciBjb25maWd1cmVMb2dFcnJvciA9IHJlcXVpcmUoXCIuLi9jb25maWd1cmUtbG9nZ2VyXCIpO1xudmFyIHBhdGhUb1JlZ2V4cCA9IHJlcXVpcmUoXCJwYXRoLXRvLXJlZ2V4cFwiKTtcblxudmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbmZ1bmN0aW9uIHJlc3BvbnNlQXJyYXkoaGFuZGxlcikge1xuICAgIHZhciByZXNwb25zZSA9IGhhbmRsZXI7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGhhbmRsZXIpICE9PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBbMjAwLCB7fSwgaGFuZGxlcl07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZVsyXSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoIXN1cHBvcnRzQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgYEZha2Ugc2VydmVyIHJlc3BvbnNlIGJvZHkgc2hvdWxkIGJlIGEgc3RyaW5nLCBidXQgd2FzICR7dHlwZW9mIHJlc3BvbnNlWzJdfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIShyZXNwb25zZVsyXSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgRmFrZSBzZXJ2ZXIgcmVzcG9uc2UgYm9keSBzaG91bGQgYmUgYSBzdHJpbmcgb3IgQXJyYXlCdWZmZXIsIGJ1dCB3YXMgJHt0eXBlb2YgcmVzcG9uc2VbMl19YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdpbmRvd0xvY2F0aW9uKCkge1xuICAgIHZhciB3aW5sb2MgPSB7XG4gICAgICAgIGhvc3RuYW1lOiBcImxvY2FsaG9zdFwiLFxuICAgICAgICBwb3J0OiBwcm9jZXNzLmVudi5QT1JUIHx8IDgwLFxuICAgICAgICBwcm90b2NvbDogXCJodHRwOlwiXG4gICAgfTtcbiAgICB3aW5sb2MuaG9zdCA9XG4gICAgICAgIHdpbmxvYy5ob3N0bmFtZSArXG4gICAgICAgIChTdHJpbmcod2lubG9jLnBvcnQpID09PSBcIjgwXCIgPyBcIlwiIDogYDoke3dpbmxvYy5wb3J0fWApO1xuICAgIHJldHVybiB3aW5sb2M7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd0xvY2F0aW9uKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0V2luZG93TG9jYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBCcm93c2VycyBwbGFjZSBsb2NhdGlvbiBvbiB3aW5kb3dcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cud2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cud2luZG93LmxvY2F0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICAgKSB7XG4gICAgICAgIC8vIFJlYWN0IE5hdGl2ZSBvbiBBbmRyb2lkIHBsYWNlcyBsb2NhdGlvbiBvbiB3aW5kb3cud2luZG93XG4gICAgICAgIHJldHVybiB3aW5kb3cud2luZG93LmxvY2F0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBnZXREZWZhdWx0V2luZG93TG9jYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hPbmUocmVzcG9uc2UsIHJlcU1ldGhvZCwgcmVxVXJsKSB7XG4gICAgdmFyIHJtZXRoID0gcmVzcG9uc2UubWV0aG9kO1xuICAgIHZhciBtYXRjaE1ldGhvZCA9ICFybWV0aCB8fCBybWV0aC50b0xvd2VyQ2FzZSgpID09PSByZXFNZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgdXJsID0gcmVzcG9uc2UudXJsO1xuICAgIHZhciBtYXRjaFVybCA9XG4gICAgICAgICF1cmwgfHxcbiAgICAgICAgdXJsID09PSByZXFVcmwgfHxcbiAgICAgICAgKHR5cGVvZiB1cmwudGVzdCA9PT0gXCJmdW5jdGlvblwiICYmIHVybC50ZXN0KHJlcVVybCkpIHx8XG4gICAgICAgICh0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgJiYgdXJsKHJlcVVybCkgPT09IHRydWUpO1xuXG4gICAgcmV0dXJuIG1hdGNoTWV0aG9kICYmIG1hdGNoVXJsO1xufVxuXG5mdW5jdGlvbiBtYXRjaChyZXNwb25zZSwgcmVxdWVzdCkge1xuICAgIHZhciB3bG9jID0gZ2V0V2luZG93TG9jYXRpb24oKTtcblxuICAgIHZhciByQ3VyckxvYyA9IG5ldyBSZWdFeHAoYF4ke3dsb2MucHJvdG9jb2x9Ly8ke3dsb2MuaG9zdH0vYCk7XG5cbiAgICB2YXIgcmVxdWVzdFVybCA9IHJlcXVlc3QudXJsO1xuXG4gICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QocmVxdWVzdFVybCkgfHwgckN1cnJMb2MudGVzdChyZXF1ZXN0VXJsKSkge1xuICAgICAgICByZXF1ZXN0VXJsID0gcmVxdWVzdFVybC5yZXBsYWNlKHJDdXJyTG9jLCBcIi9cIik7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoT25lKHJlc3BvbnNlLCB0aGlzLmdldEhUVFBNZXRob2QocmVxdWVzdCksIHJlcXVlc3RVcmwpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UucmVzcG9uc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHJ1ID0gcmVzcG9uc2UudXJsO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbcmVxdWVzdF0uY29uY2F0KFxuICAgICAgICAgICAgICAgIHJ1ICYmIHR5cGVvZiBydS5leGVjID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBydS5leGVjKHJlcXVlc3RVcmwpLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIDogW11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuYXBwbHkocmVzcG9uc2UsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSB7XG4gICAgdmFyIGNvdW50ID0gKyt0aGlzLnJlcXVlc3RDb3VudDtcblxuICAgIHRoaXMucmVxdWVzdGVkID0gdHJ1ZTtcblxuICAgIHRoaXMucmVxdWVzdGVkT25jZSA9IGNvdW50ID09PSAxO1xuICAgIHRoaXMucmVxdWVzdGVkVHdpY2UgPSBjb3VudCA9PT0gMjtcbiAgICB0aGlzLnJlcXVlc3RlZFRocmljZSA9IGNvdW50ID09PSAzO1xuXG4gICAgdGhpcy5maXJzdFJlcXVlc3QgPSB0aGlzLmdldFJlcXVlc3QoMCk7XG4gICAgdGhpcy5zZWNvbmRSZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KDEpO1xuICAgIHRoaXMudGhpcmRSZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KDIpO1xuXG4gICAgdGhpcy5sYXN0UmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdChjb3VudCAtIDEpO1xufVxuXG52YXIgZmFrZVNlcnZlciA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICB2YXIgc2VydmVyID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgc2VydmVyLmNvbmZpZ3VyZShjb25maWcpO1xuICAgICAgICB0aGlzLnhociA9IGZha2VYaHIudXNlRmFrZVhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHNlcnZlci5yZXF1ZXN0cyA9IFtdO1xuICAgICAgICBzZXJ2ZXIucmVxdWVzdENvdW50ID0gMDtcbiAgICAgICAgc2VydmVyLnF1ZXVlID0gW107XG4gICAgICAgIHNlcnZlci5yZXNwb25zZXMgPSBbXTtcblxuICAgICAgICB0aGlzLnhoci5vbkNyZWF0ZSA9IGZ1bmN0aW9uKHhock9iaikge1xuICAgICAgICAgICAgeGhyT2JqLnVuc2FmZUhlYWRlcnNFbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEoc2VydmVyLnVuc2FmZUhlYWRlcnNFbmFibGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VydmVyLmFkZFJlcXVlc3QoeGhyT2JqKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VydmVyO1xuICAgIH0sXG5cbiAgICBjb25maWd1cmU6IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBhbGxvd2xpc3QgPSB7XG4gICAgICAgICAgICBhdXRvUmVzcG9uZDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9SZXNwb25kQWZ0ZXI6IHRydWUsXG4gICAgICAgICAgICByZXNwb25kSW1tZWRpYXRlbHk6IHRydWUsXG4gICAgICAgICAgICBmYWtlSFRUUE1ldGhvZHM6IHRydWUsXG4gICAgICAgICAgICBsb2dnZXI6IHRydWUsXG4gICAgICAgICAgICB1bnNhZmVIZWFkZXJzRW5hYmxlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBjb25maWcgPSBjb25maWcgfHwge307XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nIGluIGFsbG93bGlzdCkge1xuICAgICAgICAgICAgICAgIHNlbGZbc2V0dGluZ10gPSBjb25maWdbc2V0dGluZ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlbGYubG9nRXJyb3IgPSBjb25maWd1cmVMb2dFcnJvcihjb25maWcpO1xuICAgIH0sXG5cbiAgICBhZGRSZXF1ZXN0OiBmdW5jdGlvbiBhZGRSZXF1ZXN0KHhock9iaikge1xuICAgICAgICB2YXIgc2VydmVyID0gdGhpcztcbiAgICAgICAgcHVzaC5jYWxsKHRoaXMucmVxdWVzdHMsIHhock9iaik7XG5cbiAgICAgICAgaW5jcmVtZW50UmVxdWVzdENvdW50LmNhbGwodGhpcyk7XG5cbiAgICAgICAgeGhyT2JqLm9uU2VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VydmVyLmhhbmRsZVJlcXVlc3QodGhpcyk7XG5cbiAgICAgICAgICAgIGlmIChzZXJ2ZXIucmVzcG9uZEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmVyLmF1dG9SZXNwb25kICYmICFzZXJ2ZXIucmVzcG9uZGluZykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXNwb25kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlci5yZXNwb25kKCk7XG4gICAgICAgICAgICAgICAgfSwgc2VydmVyLmF1dG9SZXNwb25kQWZ0ZXIgfHwgMTApO1xuXG4gICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBnZXRIVFRQTWV0aG9kOiBmdW5jdGlvbiBnZXRIVFRQTWV0aG9kKHJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZmFrZUhUVFBNZXRob2RzICYmIC9wb3N0L2kudGVzdChyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gKHJlcXVlc3QucmVxdWVzdEJvZHkgfHwgXCJcIikubWF0Y2goXG4gICAgICAgICAgICAgICAgL19tZXRob2Q9KFteXFxiO10rKS9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXNbMV0gOiByZXF1ZXN0Lm1ldGhvZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lm1ldGhvZDtcbiAgICB9LFxuXG4gICAgaGFuZGxlUmVxdWVzdDogZnVuY3Rpb24gaGFuZGxlUmVxdWVzdCh4aHIpIHtcbiAgICAgICAgaWYgKHhoci5hc3luYykge1xuICAgICAgICAgICAgcHVzaC5jYWxsKHRoaXMucXVldWUsIHhocik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NSZXF1ZXN0KHhocik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9nZ2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gbm8tb3A7IG92ZXJyaWRlIHZpYSBjb25maWd1cmUoKVxuICAgIH0sXG5cbiAgICBsb2dFcnJvcjogY29uZmlndXJlTG9nRXJyb3Ioe30pLFxuXG4gICAgbG9nOiBsb2csXG5cbiAgICByZXNwb25kV2l0aDogZnVuY3Rpb24gcmVzcG9uZFdpdGgobWV0aG9kLCB1cmwsIGJvZHkpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIG1ldGhvZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VBcnJheShtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgYm9keSA9IG1ldGhvZDtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdXJsID0gbWV0aG9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIGJvZHkgPSB1cmw7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHVybCA9IG1ldGhvZDtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWV0aG9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVzY2FwZSBwb3J0IG51bWJlciB0byBwcmV2ZW50IFwibmFtZWRcIiBwYXJhbWV0ZXJzIGluICdwYXRoLXRvLXJlZ2V4cCcgbW9kdWxlXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiICYmIHVybCAhPT0gXCJcIiAmJiAvOlswLTldK1xcLy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICB2YXIgbSA9IHVybC5tYXRjaCgvXihodHRwcz86XFwvXFwvLio/KTooWzAtOV0rXFwvLiopJC8pO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICB1cmwgPSBgJHttWzFdfVxcXFw6JHttWzJdfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoLmNhbGwodGhpcy5yZXNwb25zZXMsIHtcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICAgIHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIgJiYgdXJsICE9PSBcIlwiID8gcGF0aFRvUmVnZXhwKHVybCkgOiB1cmwsXG4gICAgICAgICAgICByZXNwb25zZTogdHlwZW9mIGJvZHkgPT09IFwiZnVuY3Rpb25cIiA/IGJvZHkgOiByZXNwb25zZUFycmF5KGJvZHkpXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXNwb25kOiBmdW5jdGlvbiByZXNwb25kKCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uZFdpdGguYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWUgfHwgW107XG4gICAgICAgIHZhciByZXF1ZXN0cyA9IHF1ZXVlLnNwbGljZSgwLCBxdWV1ZS5sZW5ndGgpO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbihyZXF1ZXN0KSB7XG4gICAgICAgICAgICBzZWxmLnByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVzcG9uZEFsbDogZnVuY3Rpb24gcmVzcG9uZEFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uZEltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5yZXF1ZXN0cy5zbGljZSgwKTtcblxuICAgICAgICB2YXIgcmVxdWVzdDtcbiAgICAgICAgd2hpbGUgKChyZXF1ZXN0ID0gdGhpcy5xdWV1ZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmVxdWVzdDogZnVuY3Rpb24gcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZSB8fCBbNDA0LCB7fSwgXCJcIl07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlcykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSB0aGlzLnJlc3BvbnNlcy5sZW5ndGgsIGkgPSBsIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmNhbGwodGhpcywgdGhpcy5yZXNwb25zZXNbaV0sIHJlcXVlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHRoaXMucmVzcG9uc2VzW2ldLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhyZXNwb25zZSwgcmVxdWVzdCk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbmQocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdLCByZXNwb25zZVsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nRXJyb3IoXCJGYWtlIHNlcnZlciByZXF1ZXN0IHByb2Nlc3NpbmdcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueGhyLnJlc3RvcmUgJiYgdGhpcy54aHIucmVzdG9yZS5hcHBseSh0aGlzLnhociwgYXJndW1lbnRzKTtcbiAgICB9LFxuXG4gICAgZ2V0UmVxdWVzdDogZnVuY3Rpb24gZ2V0UmVxdWVzdChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0c1tpbmRleF0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnJlc2V0QmVoYXZpb3IoKTtcbiAgICAgICAgdGhpcy5yZXNldEhpc3RvcnkoKTtcbiAgICB9LFxuXG4gICAgcmVzZXRCZWhhdmlvcjogZnVuY3Rpb24gcmVzZXRCZWhhdmlvcigpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZXMubGVuZ3RoID0gdGhpcy5xdWV1ZS5sZW5ndGggPSAwO1xuICAgIH0sXG5cbiAgICByZXNldEhpc3Rvcnk6IGZ1bmN0aW9uIHJlc2V0SGlzdG9yeSgpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5sZW5ndGggPSB0aGlzLnJlcXVlc3RDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0ZWRPbmNlID0gdGhpcy5yZXF1ZXN0ZWRUd2ljZSA9IHRoaXMucmVxdWVzdGVkVGhyaWNlID0gdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZpcnN0UmVxdWVzdCA9IHRoaXMuc2Vjb25kUmVxdWVzdCA9IHRoaXMudGhpcmRSZXF1ZXN0ID0gdGhpcy5sYXN0UmVxdWVzdCA9IG51bGw7XG4gICAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWtlU2VydmVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoXCJ1dGlsXCIpLmluc3BlY3Q7XG5cbmZ1bmN0aW9uIGxvZyhyZXNwb25zZSwgcmVxdWVzdCkge1xuICAgIHZhciBzdHI7XG5cbiAgICBzdHIgPSBgUmVxdWVzdDpcXG4ke2luc3BlY3QocmVxdWVzdCl9XFxuXFxuYDtcbiAgICBzdHIgKz0gYFJlc3BvbnNlOlxcbiR7aW5zcGVjdChyZXNwb25zZSl9XFxuXFxuYDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiB3aGVuIHRoaXMubG9nZ2VyIGlzIG5vdCBhIGZ1bmN0aW9uLCBpdCBjYW4ndCBiZSBjYWxsZWQgKi9cbiAgICBpZiAodHlwZW9mIHRoaXMubG9nZ2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIoc3RyKTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbG9nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaXNTdXBwb3J0ZWQgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4obmV3IEJsb2IoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgR2xvYmFsVGV4dEVuY29kZXIgPVxuICAgIHR5cGVvZiBUZXh0RW5jb2RlciAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IFRleHRFbmNvZGVyXG4gICAgICAgIDogcmVxdWlyZShcIkBzaW5vbmpzL3RleHQtZW5jb2RpbmdcIikuVGV4dEVuY29kZXI7XG52YXIgZ2xvYmFsT2JqZWN0ID0gcmVxdWlyZShcIkBzaW5vbmpzL2NvbW1vbnNcIikuZ2xvYmFsO1xudmFyIGNvbmZpZ3VyZUxvZ0Vycm9yID0gcmVxdWlyZShcIi4uL2NvbmZpZ3VyZS1sb2dnZXJcIik7XG52YXIgc2lub25FdmVudCA9IHJlcXVpcmUoXCIuLi9ldmVudFwiKTtcbnZhciBleHRlbmQgPSByZXF1aXJlKFwianVzdC1leHRlbmRcIik7XG5cbnZhciBzdXBwb3J0c1Byb2dyZXNzID0gdHlwZW9mIFByb2dyZXNzRXZlbnQgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgc3VwcG9ydHNDdXN0b21FdmVudCA9IHR5cGVvZiBDdXN0b21FdmVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBzdXBwb3J0c0Zvcm1EYXRhID0gdHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIHN1cHBvcnRzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgc3VwcG9ydHNCbG9iID0gcmVxdWlyZShcIi4vYmxvYlwiKS5pc1N1cHBvcnRlZDtcblxuZnVuY3Rpb24gZ2V0V29ya2luZ1hIUihnbG9iYWxTY29wZSkge1xuICAgIHZhciBzdXBwb3J0c1hIUiA9IHR5cGVvZiBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBpZiAoc3VwcG9ydHNYSFIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0O1xuICAgIH1cblxuICAgIHZhciBzdXBwb3J0c0FjdGl2ZVggPSB0eXBlb2YgZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBpZiAoc3VwcG9ydHNBY3RpdmVYKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdChcIk1TWE1MMi5YTUxIVFRQLjMuMFwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFJlZjogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZvcmJpZGRlbi1oZWFkZXItbmFtZVxudmFyIHVuc2FmZUhlYWRlcnMgPSB7XG4gICAgXCJBY2NlcHQtQ2hhcnNldFwiOiB0cnVlLFxuICAgIFwiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzXCI6IHRydWUsXG4gICAgXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZFwiOiB0cnVlLFxuICAgIFwiQWNjZXB0LUVuY29kaW5nXCI6IHRydWUsXG4gICAgQ29ubmVjdGlvbjogdHJ1ZSxcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCI6IHRydWUsXG4gICAgQ29va2llOiB0cnVlLFxuICAgIENvb2tpZTI6IHRydWUsXG4gICAgXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nXCI6IHRydWUsXG4gICAgRGF0ZTogdHJ1ZSxcbiAgICBETlQ6IHRydWUsXG4gICAgRXhwZWN0OiB0cnVlLFxuICAgIEhvc3Q6IHRydWUsXG4gICAgXCJLZWVwLUFsaXZlXCI6IHRydWUsXG4gICAgT3JpZ2luOiB0cnVlLFxuICAgIFJlZmVyZXI6IHRydWUsXG4gICAgVEU6IHRydWUsXG4gICAgVHJhaWxlcjogdHJ1ZSxcbiAgICBcIlRyYW5zZmVyLUVuY29kaW5nXCI6IHRydWUsXG4gICAgVXBncmFkZTogdHJ1ZSxcbiAgICBcIlVzZXItQWdlbnRcIjogdHJ1ZSxcbiAgICBWaWE6IHRydWVcbn07XG5cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0SGFuZGxlcigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGV2ZW50cyA9IFtcbiAgICAgICAgXCJsb2Fkc3RhcnRcIixcbiAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICBcImFib3J0XCIsXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXCJsb2FkXCIsXG4gICAgICAgIFwidGltZW91dFwiLFxuICAgICAgICBcImxvYWRlbmRcIlxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSkge1xuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gc2VsZltgb24ke2V2ZW50TmFtZX1gXTtcblxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyICYmIHR5cGVvZiBsaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGV2ZW50cy5mb3JFYWNoKGFkZEV2ZW50TGlzdGVuZXIpO1xufVxuXG5FdmVudFRhcmdldEhhbmRsZXIucHJvdG90eXBlID0gc2lub25FdmVudC5FdmVudFRhcmdldDtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyVmFsdWUodmFsdWUpIHtcbiAgICAvLyBSZWY6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2UtYnl0ZXNcbiAgICAvKmVzbGludCBuby1jb250cm9sLXJlZ2V4OiBcIm9mZlwiKi9cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXltcXHgwOVxceDBBXFx4MERcXHgyMF0rfFtcXHgwOVxceDBBXFx4MERcXHgyMF0rJC9nLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyKGhlYWRlcnMsIGhlYWRlcikge1xuICAgIHZhciBmb3VuZEhlYWRlciA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLmZpbHRlcihmdW5jdGlvbihoKSB7XG4gICAgICAgIHJldHVybiBoLnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvdW5kSGVhZGVyWzBdIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGV4Y2x1ZGVTZXRDb29raWUySGVhZGVyKGhlYWRlcikge1xuICAgIHJldHVybiAhL15TZXQtQ29va2llMj8kL2kudGVzdChoZWFkZXIpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlSZXNwb25zZUJvZHlUeXBlKGJvZHksIHJlc3BvbnNlVHlwZSkge1xuICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgdmFyIGlzU3RyaW5nID0gdHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCI7XG5cbiAgICBpZiAocmVzcG9uc2VUeXBlID09PSBcImFycmF5YnVmZmVyXCIpIHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyAmJiAhKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBBdHRlbXB0ZWQgdG8gcmVzcG9uZCB0byBmYWtlIFhNTEh0dHBSZXF1ZXN0IHdpdGggJHtib2R5fSwgd2hpY2ggaXMgbm90IGEgc3RyaW5nIG9yIEFycmF5QnVmZmVyLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnJvci5uYW1lID0gXCJJbnZhbGlkQm9keUV4Y2VwdGlvblwiO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09IFwiYmxvYlwiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmluZyAmJlxuICAgICAgICAgICAgIShib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpICYmXG4gICAgICAgICAgICBzdXBwb3J0c0Jsb2IgJiZcbiAgICAgICAgICAgICEoYm9keSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEF0dGVtcHRlZCB0byByZXNwb25kIHRvIGZha2UgWE1MSHR0cFJlcXVlc3Qgd2l0aCAke2JvZHl9LCB3aGljaCBpcyBub3QgYSBzdHJpbmcsIEFycmF5QnVmZmVyLCBvciBCbG9iLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnJvci5uYW1lID0gXCJJbnZhbGlkQm9keUV4Y2VwdGlvblwiO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQXR0ZW1wdGVkIHRvIHJlc3BvbmQgdG8gZmFrZSBYTUxIdHRwUmVxdWVzdCB3aXRoICR7Ym9keX0sIHdoaWNoIGlzIG5vdCBhIHN0cmluZy5gXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yLm5hbWUgPSBcIkludmFsaWRCb2R5RXhjZXB0aW9uXCI7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydFRvQXJyYXlCdWZmZXIoYm9keSwgZW5jb2RpbmcpIHtcbiAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgR2xvYmFsVGV4dEVuY29kZXIoZW5jb2RpbmcgfHwgXCJ1dGYtOFwiKS5lbmNvZGUoYm9keSkuYnVmZmVyO1xufVxuXG5mdW5jdGlvbiBpc1htbENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgIWNvbnRlbnRUeXBlIHx8XG4gICAgICAgIC8odGV4dFxcL3htbCl8KGFwcGxpY2F0aW9uXFwveG1sKXwoXFwreG1sKS8udGVzdChjb250ZW50VHlwZSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBjbGVhclJlc3BvbnNlKHhocikge1xuICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHhoci5yZXNwb25zZVR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgIHhoci5yZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHhoci5yZXNwb25zZSA9IHhoci5yZXNwb25zZVRleHQgPSBudWxsO1xuICAgIH1cbiAgICB4aHIucmVzcG9uc2VYTUwgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBmYWtlWE1MSHR0cFJlcXVlc3RGb3IoZ2xvYmFsU2NvcGUpIHtcbiAgICB2YXIgaXNSZWFjdE5hdGl2ZSA9XG4gICAgICAgIGdsb2JhbFNjb3BlLm5hdmlnYXRvciAmJlxuICAgICAgICBnbG9iYWxTY29wZS5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gXCJSZWFjdE5hdGl2ZVwiO1xuICAgIHZhciBzaW5vblhociA9IHsgWE1MSHR0cFJlcXVlc3Q6IGdsb2JhbFNjb3BlLlhNTEh0dHBSZXF1ZXN0IH07XG4gICAgc2lub25YaHIuR2xvYmFsWE1MSHR0cFJlcXVlc3QgPSBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdDtcbiAgICBzaW5vblhoci5HbG9iYWxBY3RpdmVYT2JqZWN0ID0gZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdDtcbiAgICBzaW5vblhoci5zdXBwb3J0c0FjdGl2ZVggPVxuICAgICAgICB0eXBlb2Ygc2lub25YaHIuR2xvYmFsQWN0aXZlWE9iamVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBzaW5vblhoci5zdXBwb3J0c1hIUiA9IHR5cGVvZiBzaW5vblhoci5HbG9iYWxYTUxIdHRwUmVxdWVzdCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBzaW5vblhoci53b3JraW5nWEhSID0gZ2V0V29ya2luZ1hIUihnbG9iYWxTY29wZSk7XG4gICAgc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0ID1cbiAgICAgICAgc2lub25YaHIuc3VwcG9ydHNYSFIgJiZcbiAgICAgICAgXCJ0aW1lb3V0XCIgaW4gbmV3IHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgc2lub25YaHIuc3VwcG9ydHNDT1JTID1cbiAgICAgICAgaXNSZWFjdE5hdGl2ZSB8fFxuICAgICAgICAoc2lub25YaHIuc3VwcG9ydHNYSFIgJiZcbiAgICAgICAgICAgIFwid2l0aENyZWRlbnRpYWxzXCIgaW4gbmV3IHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0KCkpO1xuXG4gICAgLy8gTm90ZSB0aGF0IGZvciBGYWtlWE1MSHR0cFJlcXVlc3QgdG8gd29yayBwcmUgRVM1XG4gICAgLy8gd2UgbG9zZSBzb21lIG9mIHRoZSBhbGlnbm1lbnQgd2l0aCB0aGUgc3BlYy5cbiAgICAvLyBUbyBlbnN1cmUgYXMgY2xvc2UgYSBtYXRjaCBhcyBwb3NzaWJsZSxcbiAgICAvLyBzZXQgcmVzcG9uc2VUeXBlIGJlZm9yZSBjYWxsaW5nIG9wZW4sIHNlbmQgb3IgcmVzcG9uZDtcbiAgICBmdW5jdGlvbiBGYWtlWE1MSHR0cFJlcXVlc3QoY29uZmlnKSB7XG4gICAgICAgIEV2ZW50VGFyZ2V0SGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UO1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICAgIHRoaXMucmVxdWVzdEJvZHkgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IDA7XG4gICAgICAgIHRoaXMuc3RhdHVzVGV4dCA9IFwiXCI7XG4gICAgICAgIHRoaXMudXBsb2FkID0gbmV3IEV2ZW50VGFyZ2V0SGFuZGxlcigpO1xuICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IFwiXCI7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICB0aGlzLmxvZ0Vycm9yID0gY29uZmlndXJlTG9nRXJyb3IoY29uZmlnKTtcblxuICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzQ09SUykge1xuICAgICAgICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgRmFrZVhNTEh0dHBSZXF1ZXN0Lm9uQ3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIEZha2VYTUxIdHRwUmVxdWVzdC5vbkNyZWF0ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeVN0YXRlKHhocikge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5PUEVORUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURfU1RBVEVfRVJSXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHhoci5zZW5kRmxhZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSU5WQUxJRF9TVEFURV9FUlJcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsYXJnZXN0IGFyaXR5IGluIFhIUiBpcyA1IC0gWEhSI29wZW5cbiAgICB2YXIgYXBwbHkgPSBmdW5jdGlvbihvYmosIG1ldGhvZCwgYXJncykge1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKCk7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZF0oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialttZXRob2RdKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kXShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIGNhc2VcIik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LmZpbHRlcnMgPSBbXTtcbiAgICBGYWtlWE1MSHR0cFJlcXVlc3QuYWRkRmlsdGVyID0gZnVuY3Rpb24gYWRkRmlsdGVyKGZuKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZuKTtcbiAgICB9O1xuICAgIEZha2VYTUxIdHRwUmVxdWVzdC5kZWZha2UgPSBmdW5jdGlvbiBkZWZha2UoZmFrZVhociwgeGhyQXJncykge1xuICAgICAgICB2YXIgeGhyID0gbmV3IHNpbm9uWGhyLndvcmtpbmdYSFIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgXCJvcGVuXCIsXG4gICAgICAgICAgICBcInNldFJlcXVlc3RIZWFkZXJcIixcbiAgICAgICAgICAgIFwiYWJvcnRcIixcbiAgICAgICAgICAgIFwiZ2V0UmVzcG9uc2VIZWFkZXJcIixcbiAgICAgICAgICAgIFwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzXCIsXG4gICAgICAgICAgICBcImFkZEV2ZW50TGlzdGVuZXJcIixcbiAgICAgICAgICAgIFwib3ZlcnJpZGVNaW1lVHlwZVwiLFxuICAgICAgICAgICAgXCJyZW1vdmVFdmVudExpc3RlbmVyXCJcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgICAgICAgZmFrZVhoclttZXRob2RdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHhociwgbWV0aG9kLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmFrZVhoci5zZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAvLyBSZWY6IGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLXJlc3BvbnNldHlwZS1hdHRyaWJ1dGVcbiAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlICE9PSBmYWtlWGhyLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBmYWtlWGhyLnJlc3BvbnNlVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcHBseSh4aHIsIFwic2VuZFwiLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBjb3B5QXR0cnMgPSBmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24oYXR0cikge1xuICAgICAgICAgICAgICAgIGZha2VYaHJbYXR0cl0gPSB4aHJbYXR0cl07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc3RhdGVDaGFuZ2VTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmFrZVhoci5yZWFkeVN0YXRlID0geGhyLnJlYWR5U3RhdGU7XG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPj0gRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQpIHtcbiAgICAgICAgICAgICAgICBjb3B5QXR0cnMoW1wic3RhdHVzXCIsIFwic3RhdHVzVGV4dFwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPj0gRmFrZVhNTEh0dHBSZXF1ZXN0LkxPQURJTkcpIHtcbiAgICAgICAgICAgICAgICBjb3B5QXR0cnMoW1wicmVzcG9uc2VcIl0pO1xuICAgICAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiIHx8IHhoci5yZXNwb25zZVR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlBdHRycyhbXCJyZXNwb25zZVRleHRcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB4aHIucmVhZHlTdGF0ZSA9PT0gRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkUgJiZcbiAgICAgICAgICAgICAgICAoeGhyLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiB8fCB4aHIucmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb3B5QXR0cnMoW1wicmVzcG9uc2VYTUxcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzdGF0ZUNoYW5nZUVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGZha2VYaHIub25yZWFkeXN0YXRlY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgICAgICAgICAgICAgIGZha2VYaHIub25yZWFkeXN0YXRlY2hhbmdlLmNhbGwoZmFrZVhociwge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGZha2VYaHIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGZha2VYaHJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgc3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBzdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgICAgIHN0YXRlQ2hhbmdlU3RhcnQoKTtcbiAgICAgICAgICAgIHN0YXRlQ2hhbmdlRW5kKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHhoci5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwgc3RhdGVDaGFuZ2VTdGFydCk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZha2VYaHIuZXZlbnRMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAvKmVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyovXG4gICAgICAgICAgICAgICAgZmFrZVhoci5ldmVudExpc3RlbmVyc1tldmVudF0uZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLmxpc3RlbmVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlOiBoYW5kbGVyLmNhcHR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNlOiBoYW5kbGVyLm9uY2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLyplc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyovXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHN0YXRlQ2hhbmdlRW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBzdGF0ZUNoYW5nZTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseSh4aHIsIFwib3BlblwiLCB4aHJBcmdzKTtcbiAgICB9O1xuICAgIEZha2VYTUxIdHRwUmVxdWVzdC51c2VGaWx0ZXJzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiB2ZXJpZnlSZXF1ZXN0T3BlbmVkKHhocikge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5PUEVORUQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSU5WQUxJRF9TVEFURV9FUlIgLSAke3hoci5yZWFkeVN0YXRlfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmVyaWZ5UmVxdWVzdFNlbnQoeGhyKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3QgZG9uZVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZlcmlmeUhlYWRlcnNSZWNlaXZlZCh4aHIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgeGhyLmFzeW5jICYmXG4gICAgICAgICAgICB4aHIucmVhZHlTdGF0ZSAhPT0gRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBoZWFkZXJzIHJlY2VpdmVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydFJlc3BvbnNlQm9keShyZXNwb25zZVR5cGUsIGNvbnRlbnRUeXBlLCBib2R5KSB7XG4gICAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09IFwiXCIgfHwgcmVzcG9uc2VUeXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiByZXNwb25zZVR5cGUgPT09IFwiYXJyYXlidWZmZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0FycmF5QnVmZmVyKGJvZHkpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIHBhcnNpbmcgZmFpbHVyZSBhcyBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNCbG9iICYmIHJlc3BvbnNlVHlwZSA9PT0gXCJibG9iXCIpIHtcbiAgICAgICAgICAgIGlmIChib2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYmxvYk9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGJsb2JPcHRpb25zLnR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYihbY29udmVydFRvQXJyYXlCdWZmZXIoYm9keSldLCBibG9iT3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgICAgIGlmIChpc1htbENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGYWtlWE1MSHR0cFJlcXVlc3QucGFyc2VYTUwoYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVzcG9uc2VUeXBlICR7cmVzcG9uc2VUeXBlfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0ZXBzIHRvIGZvbGxvdyB3aGVuIHRoZXJlIGlzIGFuIGVycm9yLCBhY2NvcmRpbmcgdG86XG4gICAgICogaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWVycm9yLXN0ZXBzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVxdWVzdEVycm9yU3RlcHMoeGhyKSB7XG4gICAgICAgIGNsZWFyUmVzcG9uc2UoeGhyKTtcbiAgICAgICAgeGhyLmVycm9yRmxhZyA9IHRydWU7XG4gICAgICAgIHhoci5yZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgICAgICB4aHIucmVzcG9uc2VIZWFkZXJzID0ge307XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5VTlNFTlQgJiZcbiAgICAgICAgICAgIHhoci5zZW5kRmxhZyAmJlxuICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FXG4gICAgICAgICkge1xuICAgICAgICAgICAgeGhyLnJlYWR5U3RhdGVDaGFuZ2UoRmFrZVhNTEh0dHBSZXF1ZXN0LkRPTkUpO1xuICAgICAgICAgICAgeGhyLnNlbmRGbGFnID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBGYWtlWE1MSHR0cFJlcXVlc3QucGFyc2VYTUwgPSBmdW5jdGlvbiBwYXJzZVhNTCh0ZXh0KSB7XG4gICAgICAgIC8vIFRyZWF0IGVtcHR5IHN0cmluZyBhcyBwYXJzaW5nIGZhaWx1cmVcbiAgICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBET01QYXJzZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlcmVycm9yTlMgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VyZXJyb3JzID0gcGFyc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhcnNlRnJvbVN0cmluZyhcIklOVkFMSURcIiwgXCJ0ZXh0L3htbFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlcmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJlcnJvck5TID0gcGFyc2VyZXJyb3JzWzBdLm5hbWVzcGFjZVVSSTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyBpbnZhbGlkIFhNTCBtYWtlcyBJRTExIHRocm93XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBubyBuYW1lc3BhY2UgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGV4dCwgXCJ0ZXh0L3htbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcmVycm9yTlMsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhcnNlcmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB4bWxEb2MgPSBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MRE9NXCIpO1xuICAgICAgICAgICAgICAgIHhtbERvYy5hc3luYyA9IFwiZmFsc2VcIjtcbiAgICAgICAgICAgICAgICB4bWxEb2MubG9hZFhNTCh0ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geG1sRG9jLnBhcnNlRXJyb3IuZXJyb3JDb2RlICE9PSAwID8gbnVsbCA6IHhtbERvYztcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBVbmFibGUgdG8gcGFyc2UgWE1MIC0gbm8gYmlnZ2llXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgRmFrZVhNTEh0dHBSZXF1ZXN0LnN0YXR1c0NvZGVzID0ge1xuICAgICAgICAxMDA6IFwiQ29udGludWVcIixcbiAgICAgICAgMTAxOiBcIlN3aXRjaGluZyBQcm90b2NvbHNcIixcbiAgICAgICAgMjAwOiBcIk9LXCIsXG4gICAgICAgIDIwMTogXCJDcmVhdGVkXCIsXG4gICAgICAgIDIwMjogXCJBY2NlcHRlZFwiLFxuICAgICAgICAyMDM6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcbiAgICAgICAgMjA0OiBcIk5vIENvbnRlbnRcIixcbiAgICAgICAgMjA1OiBcIlJlc2V0IENvbnRlbnRcIixcbiAgICAgICAgMjA2OiBcIlBhcnRpYWwgQ29udGVudFwiLFxuICAgICAgICAyMDc6IFwiTXVsdGktU3RhdHVzXCIsXG4gICAgICAgIDMwMDogXCJNdWx0aXBsZSBDaG9pY2VcIixcbiAgICAgICAgMzAxOiBcIk1vdmVkIFBlcm1hbmVudGx5XCIsXG4gICAgICAgIDMwMjogXCJGb3VuZFwiLFxuICAgICAgICAzMDM6IFwiU2VlIE90aGVyXCIsXG4gICAgICAgIDMwNDogXCJOb3QgTW9kaWZpZWRcIixcbiAgICAgICAgMzA1OiBcIlVzZSBQcm94eVwiLFxuICAgICAgICAzMDc6IFwiVGVtcG9yYXJ5IFJlZGlyZWN0XCIsXG4gICAgICAgIDQwMDogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgICA0MDE6IFwiVW5hdXRob3JpemVkXCIsXG4gICAgICAgIDQwMjogXCJQYXltZW50IFJlcXVpcmVkXCIsXG4gICAgICAgIDQwMzogXCJGb3JiaWRkZW5cIixcbiAgICAgICAgNDA0OiBcIk5vdCBGb3VuZFwiLFxuICAgICAgICA0MDU6IFwiTWV0aG9kIE5vdCBBbGxvd2VkXCIsXG4gICAgICAgIDQwNjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuICAgICAgICA0MDc6IFwiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIixcbiAgICAgICAgNDA4OiBcIlJlcXVlc3QgVGltZW91dFwiLFxuICAgICAgICA0MDk6IFwiQ29uZmxpY3RcIixcbiAgICAgICAgNDEwOiBcIkdvbmVcIixcbiAgICAgICAgNDExOiBcIkxlbmd0aCBSZXF1aXJlZFwiLFxuICAgICAgICA0MTI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuICAgICAgICA0MTM6IFwiUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlXCIsXG4gICAgICAgIDQxNDogXCJSZXF1ZXN0LVVSSSBUb28gTG9uZ1wiLFxuICAgICAgICA0MTU6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICAgICAgICA0MTY6IFwiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZVwiLFxuICAgICAgICA0MTc6IFwiRXhwZWN0YXRpb24gRmFpbGVkXCIsXG4gICAgICAgIDQyMjogXCJVbnByb2Nlc3NhYmxlIEVudGl0eVwiLFxuICAgICAgICA1MDA6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gICAgICAgIDUwMTogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgICAgICAgNTAyOiBcIkJhZCBHYXRld2F5XCIsXG4gICAgICAgIDUwMzogXCJTZXJ2aWNlIFVuYXZhaWxhYmxlXCIsXG4gICAgICAgIDUwNDogXCJHYXRld2F5IFRpbWVvdXRcIixcbiAgICAgICAgNTA1OiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCJcbiAgICB9O1xuXG4gICAgZXh0ZW5kKEZha2VYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIHNpbm9uRXZlbnQuRXZlbnRUYXJnZXQsIHtcbiAgICAgICAgYXN5bmM6IHRydWUsXG5cbiAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCkge1xuICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICAgICAgICAgIHRoaXMuYXN5bmMgPSB0eXBlb2YgYXN5bmMgPT09IFwiYm9vbGVhblwiID8gYXN5bmMgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZsYWcgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKEZha2VYTUxIdHRwUmVxdWVzdC51c2VGaWx0ZXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHhockFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmFrZSA9IEZha2VYTUxIdHRwUmVxdWVzdC5maWx0ZXJzLnNvbWUoZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuYXBwbHkodGhpcywgeGhyQXJncyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmFrZSkge1xuICAgICAgICAgICAgICAgICAgICBGYWtlWE1MSHR0cFJlcXVlc3QuZGVmYWtlKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGVDaGFuZ2UoRmFrZVhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZHlTdGF0ZUNoYW5nZTogZnVuY3Rpb24gcmVhZHlTdGF0ZUNoYW5nZShzdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gc3RhdGU7XG5cbiAgICAgICAgICAgIHZhciByZWFkeVN0YXRlQ2hhbmdlRXZlbnQgPSBuZXcgc2lub25FdmVudC5FdmVudChcbiAgICAgICAgICAgICAgICBcInJlYWR5c3RhdGVjaGFuZ2VcIixcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UocmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nRXJyb3IoXCJGYWtlIFhIUiBvbnJlYWR5c3RhdGVjaGFuZ2UgaGFuZGxlclwiLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHJlYWR5U3RhdGVDaGFuZ2VFdmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCwgcHJvZ3Jlc3M7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lZE91dCB8fCB0aGlzLmFib3J0ZWQgfHwgdGhpcy5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSB7IGxvYWRlZDogMCwgdG90YWw6IDAgfTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudGltZWRPdXQgJiYgXCJ0aW1lb3V0XCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hYm9ydGVkICYmIFwiYWJvcnRcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHsgbG9hZGVkOiAxMDAsIHRvdGFsOiAxMDAgfTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBcImxvYWRcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChcInByb2dyZXNzXCIsIHByb2dyZXNzLCB0aGlzKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChldmVudCwgcHJvZ3Jlc3MsIHRoaXMpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiLCBwcm9ncmVzcywgdGhpcylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiLCBwcm9ncmVzcywgdGhpcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuUHJvZ3Jlc3NFdmVudChldmVudCwgcHJvZ3Jlc3MsIHRoaXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQocmVhZHlTdGF0ZUNoYW5nZUV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzLCB0aGlzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gUmVmIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLXNldHJlcXVlc3RoZWFkZXIoKS1tZXRob2RcbiAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEJ5IFJGQzcyMzAsIHNlY3Rpb24gMy4yLjQsIGhlYWRlciB2YWx1ZXMgc2hvdWxkIGJlIHN0cmluZ3MuIEdvdCAke3R5cGVvZiB2YWx1ZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlcmlmeVN0YXRlKHRoaXMpO1xuXG4gICAgICAgICAgICB2YXIgY2hlY2tVbnNhZmVIZWFkZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy51bnNhZmVIZWFkZXJzRW5hYmxlZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tVbnNhZmVIZWFkZXJzID0gdGhpcy51bnNhZmVIZWFkZXJzRW5hYmxlZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY2hlY2tVbnNhZmVIZWFkZXJzICYmXG4gICAgICAgICAgICAgICAgKGdldEhlYWRlcih1bnNhZmVIZWFkZXJzLCBoZWFkZXIpICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIC9eKFNlYy18UHJveHktKS9pLnRlc3QoaGVhZGVyKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHF1b3Rlc1xuICAgICAgICAgICAgICAgICAgICBgUmVmdXNlZCB0byBzZXQgdW5zYWZlIGhlYWRlciBcIiR7aGVhZGVyfVwiYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVIZWFkZXJWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IGdldEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXJzLCBoZWFkZXIpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVyc1tleGlzdGluZ0hlYWRlcl0gKz0gYCwgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzW2hlYWRlcl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBzZXRTdGF0dXM6IGZ1bmN0aW9uIHNldFN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgICAgIHZhciBzYW5pdGl6ZWRTdGF0dXMgPSB0eXBlb2Ygc3RhdHVzID09PSBcIm51bWJlclwiID8gc3RhdHVzIDogMjAwO1xuXG4gICAgICAgICAgICB2ZXJpZnlSZXF1ZXN0T3BlbmVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzYW5pdGl6ZWRTdGF0dXM7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c1RleHQgPSBGYWtlWE1MSHR0cFJlcXVlc3Quc3RhdHVzQ29kZXNbc2FuaXRpemVkU3RhdHVzXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBIZWxwcyB0ZXN0aW5nXG4gICAgICAgIHNldFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24gc2V0UmVzcG9uc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIHZlcmlmeVJlcXVlc3RPcGVuZWQodGhpcyk7XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAodGhpcy5yZXNwb25zZUhlYWRlcnMgPSB7fSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzW2hlYWRlcl0gPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGVDaGFuZ2UoRmFrZVhNTEh0dHBSZXF1ZXN0LkhFQURFUlNfUkVDRUlWRUQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBDdXJyZW50bHkgdHJlYXRzIEFMTCBkYXRhIGFzIGEgRE9NU3RyaW5nIChpLmUuIG5vIERvY3VtZW50KVxuICAgICAgICBzZW5kOiBmdW5jdGlvbiBzZW5kKGRhdGEpIHtcbiAgICAgICAgICAgIHZlcmlmeVN0YXRlKHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAoIS9eKGhlYWQpJC9pLnRlc3QodGhpcy5tZXRob2QpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gZ2V0SGVhZGVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXF1ZXN0SGVhZGVyc1tjb250ZW50VHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5yZXF1ZXN0SGVhZGVyc1tjb250ZW50VHlwZV0uc3BsaXQoXCI7XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RIZWFkZXJzW1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgXSA9IGAke3ZhbHVlWzBdfTtjaGFyc2V0PXV0Zi04YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnRzRm9ybURhdGEgJiYgIShkYXRhIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLThcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RCb2R5ID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lcnJvckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZsYWcgPSB0aGlzLmFzeW5jO1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbmQodGhpcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgbGlzdGVuIGlmIHNldEludGVydmFsIGFuZCBEYXRlIGFyZSBhIHN0dWJiZWQuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2lub25YaHIuc3VwcG9ydHNUaW1lb3V0ICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNldEludGVydmFsLmNsb2NrID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIERhdGUuY2xvY2sgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBpbml0aWF0ZWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gYW55IHBvc3NpYmxlIHRpY2sgYnkgZmFrZSB0aW1lcnMgYW5kIGNoZWNrIHRvIHNlZSBpZiB0aW1lb3V0IGhhc1xuICAgICAgICAgICAgICAgIC8vIGJlZW4gZXhjZWVkZWQuIEl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aW1lb3V0IGNhbiBiZSBjaGFuZ2VkIHdoaWxlIGEgcmVxdWVzdFxuICAgICAgICAgICAgICAgIC8vIGlzIGluIGZsaWdodCwgc28gd2UgbXVzdCBjaGVjayBhbnl0aW1lIHRoZSBlbmQgdXNlciBmb3JjZXMgYSBjbG9jayB0aWNrIHRvIG1ha2VcbiAgICAgICAgICAgICAgICAvLyBzdXJlIHRpbWVvdXQgaGFzbid0IGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNkZm5SZXR1cm5MaW5rLTJcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWFkeVN0YXRlIGhhcyBiZWVuIHJlc2V0IG9yIGlzIGRvbmUuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBubyB0aW1lb3V0LiBUaGlzIHdpbGwgYWxzbyBwcmV2ZW50IGFib3J0ZWQgcmVxdWVzdHMgYW5kXG4gICAgICAgICAgICAgICAgICAgIC8vIGZha2VTZXJ2ZXJXaXRoQ2xvY2sgZnJvbSB0cmlnZ2VyaW5nIHVubmVjZXNzYXJ5IHJlc3BvbnNlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkeVN0YXRlID09PSBGYWtlWE1MSHR0cFJlcXVlc3QuVU5TRU5UIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWR5U3RhdGUgPT09IEZha2VYTUxIdHRwUmVxdWVzdC5ET05FXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhckludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYudGltZW91dCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0ID4gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpID49IGluaXRpYXRlZFRpbWUgKyBzZWxmLnRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJUaW1lb3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjbGVhckludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5FdmVudChcImxvYWRzdGFydFwiLCBmYWxzZSwgZmFsc2UsIHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFib3J0OiBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXF1ZXN0RXJyb3JTdGVwcyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IEZha2VYTUxIdHRwUmVxdWVzdC5VTlNFTlQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xlYXJSZXNwb25zZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0ge307XG5cbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJpZ2dlclRpbWVvdXQ6IGZ1bmN0aW9uIHRyaWdnZXJUaW1lb3V0KCkge1xuICAgICAgICAgICAgaWYgKHNpbm9uWGhyLnN1cHBvcnRzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZWRPdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RFcnJvclN0ZXBzKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcihoZWFkZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPCBGYWtlWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoL15TZXQtQ29va2llMj8kL2kudGVzdChoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaGVhZGVyID0gZ2V0SGVhZGVyKHRoaXMucmVzcG9uc2VIZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlcnNbaGVhZGVyXSB8fCBudWxsO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24gZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA8IEZha2VYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycztcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0gT2JqZWN0LmtleXMocmVzcG9uc2VIZWFkZXJzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZXhjbHVkZVNldENvb2tpZTJIZWFkZXIpXG4gICAgICAgICAgICAgICAgLnJlZHVjZShmdW5jdGlvbihwcmV2LCBoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVzcG9uc2VIZWFkZXJzW2hlYWRlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3ByZXZ9JHtoZWFkZXJ9OiAke3ZhbHVlfVxcclxcbmA7XG4gICAgICAgICAgICAgICAgfSwgXCJcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldFJlc3BvbnNlQm9keTogZnVuY3Rpb24gc2V0UmVzcG9uc2VCb2R5KGJvZHkpIHtcbiAgICAgICAgICAgIHZlcmlmeVJlcXVlc3RTZW50KHRoaXMpO1xuICAgICAgICAgICAgdmVyaWZ5SGVhZGVyc1JlY2VpdmVkKHRoaXMpO1xuICAgICAgICAgICAgdmVyaWZ5UmVzcG9uc2VCb2R5VHlwZShib2R5LCB0aGlzLnJlc3BvbnNlVHlwZSk7XG4gICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPVxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGRlbk1pbWVUeXBlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcblxuICAgICAgICAgICAgdmFyIGlzVGV4dFJlc3BvbnNlID1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiB8fCB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBjbGVhclJlc3BvbnNlKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmtTaXplID0gdGhpcy5jaHVua1NpemUgfHwgMTA7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlQ2hhbmdlKEZha2VYTUxIdHRwUmVxdWVzdC5MT0FESU5HKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0ID0gdGhpcy5yZXNwb25zZSArPSBib2R5LnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArIGNodW5rU2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBjaHVua1NpemU7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoaW5kZXggPCBib2R5Lmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2UgPSBjb252ZXJ0UmVzcG9uc2VCb2R5KFxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNUZXh0UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVGV4dCA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZVhNTCA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUeXBlID09PSBcIlwiICYmXG4gICAgICAgICAgICAgICAgaXNYbWxDb250ZW50VHlwZShjb250ZW50VHlwZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VYTUwgPSBGYWtlWE1MSHR0cFJlcXVlc3QucGFyc2VYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZUNoYW5nZShGYWtlWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uZDogZnVuY3Rpb24gcmVzcG9uZChzdGF0dXMsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VVUkwgPSB0aGlzLnVybDtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXMoc3RhdHVzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzcG9uc2VIZWFkZXJzKGhlYWRlcnMgfHwge30pO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXNwb25zZUJvZHkoYm9keSB8fCBcIlwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGxvYWRQcm9ncmVzczogZnVuY3Rpb24gdXBsb2FkUHJvZ3Jlc3MocHJvZ3Jlc3NFdmVudFJhdykge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgc2lub25FdmVudC5Qcm9ncmVzc0V2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm9ncmVzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJhdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRvd25sb2FkUHJvZ3Jlc3M6IGZ1bmN0aW9uIGRvd25sb2FkUHJvZ3Jlc3MocHJvZ3Jlc3NFdmVudFJhdykge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBzaW5vbkV2ZW50LlByb2dyZXNzRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInByb2dyZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmF3LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB1cGxvYWRFcnJvcjogZnVuY3Rpb24gdXBsb2FkRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0c0N1c3RvbUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IHNpbm9uRXZlbnQuQ3VzdG9tRXZlbnQoXCJlcnJvclwiLCB7IGRldGFpbDogZXJyb3IgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uIG92ZXJyaWRlTWltZVR5cGUodHlwZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA+PSBGYWtlWE1MSHR0cFJlcXVlc3QuTE9BRElORykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklOVkFMSURfU1RBVEVfRVJSXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZGVuTWltZVR5cGUgPSB0eXBlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgc3RhdGVzID0ge1xuICAgICAgICBVTlNFTlQ6IDAsXG4gICAgICAgIE9QRU5FRDogMSxcbiAgICAgICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICAgICAgTE9BRElORzogMyxcbiAgICAgICAgRE9ORTogNFxuICAgIH07XG5cbiAgICBleHRlbmQoRmFrZVhNTEh0dHBSZXF1ZXN0LCBzdGF0ZXMpO1xuICAgIGV4dGVuZChGYWtlWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCBzdGF0ZXMpO1xuXG4gICAgZnVuY3Rpb24gdXNlRmFrZVhNTEh0dHBSZXF1ZXN0KCkge1xuICAgICAgICBGYWtlWE1MSHR0cFJlcXVlc3QucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoa2VlcE9uQ3JlYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNYSFIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5YTUxIdHRwUmVxdWVzdCA9IHNpbm9uWGhyLkdsb2JhbFhNTEh0dHBSZXF1ZXN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNBY3RpdmVYKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuQWN0aXZlWE9iamVjdCA9IHNpbm9uWGhyLkdsb2JhbEFjdGl2ZVhPYmplY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGV0ZSBGYWtlWE1MSHR0cFJlcXVlc3QucmVzdG9yZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBPbkNyZWF0ZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGYWtlWE1MSHR0cFJlcXVlc3Qub25DcmVhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzaW5vblhoci5zdXBwb3J0c1hIUikge1xuICAgICAgICAgICAgZ2xvYmFsU2NvcGUuWE1MSHR0cFJlcXVlc3QgPSBGYWtlWE1MSHR0cFJlcXVlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2lub25YaHIuc3VwcG9ydHNBY3RpdmVYKSB7XG4gICAgICAgICAgICBnbG9iYWxTY29wZS5BY3RpdmVYT2JqZWN0ID0gZnVuY3Rpb24gQWN0aXZlWE9iamVjdChvYmpJZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgb2JqSWQgPT09IFwiTWljcm9zb2Z0LlhNTEhUVFBcIiB8fFxuICAgICAgICAgICAgICAgICAgICAvXk1zeG1sMlxcLlhNTEhUVFAvaS50ZXN0KG9iaklkKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2lub25YaHIuR2xvYmFsQWN0aXZlWE9iamVjdChvYmpJZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEZha2VYTUxIdHRwUmVxdWVzdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4aHI6IHNpbm9uWGhyLFxuICAgICAgICBGYWtlWE1MSHR0cFJlcXVlc3Q6IEZha2VYTUxIdHRwUmVxdWVzdCxcbiAgICAgICAgdXNlRmFrZVhNTEh0dHBSZXF1ZXN0OiB1c2VGYWtlWE1MSHR0cFJlcXVlc3RcbiAgICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuZChmYWtlWE1MSHR0cFJlcXVlc3RGb3IoZ2xvYmFsT2JqZWN0KSwge1xuICAgIGZha2VYTUxIdHRwUmVxdWVzdEZvcjogZmFrZVhNTEh0dHBSZXF1ZXN0Rm9yXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmYWtlU2VydmVyOiByZXF1aXJlKFwiLi9mYWtlLXNlcnZlclwiKSxcbiAgICBmYWtlU2VydmVyV2l0aENsb2NrOiByZXF1aXJlKFwiLi9mYWtlLXNlcnZlci9mYWtlLXNlcnZlci13aXRoLWNsb2NrXCIpLFxuICAgIGZha2VYaHI6IHJlcXVpcmUoXCIuL2Zha2UteGhyXCIpXG59O1xuIiwidmFyIGlzYXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aFRvUmVnZXhwXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5jb21waWxlID0gY29tcGlsZVxubW9kdWxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25cbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT98KFxcXFwqKSknXG5dLmpvaW4oJ3wnKSwgJ2cnKVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIGZvciB0aGUgcmF3IHRva2Vucy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19IG9wdGlvbnNcbiAqIEByZXR1cm4geyFBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0ciwgb3B0aW9ucykge1xuICB2YXIgdG9rZW5zID0gW11cbiAgdmFyIGtleSA9IDBcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgcGF0aCA9ICcnXG4gIHZhciBkZWZhdWx0RGVsaW1pdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlbGltaXRlciB8fCAnLydcbiAgdmFyIHJlc1xuXG4gIHdoaWxlICgocmVzID0gUEFUSF9SRUdFWFAuZXhlYyhzdHIpKSAhPSBudWxsKSB7XG4gICAgdmFyIG0gPSByZXNbMF1cbiAgICB2YXIgZXNjYXBlZCA9IHJlc1sxXVxuICAgIHZhciBvZmZzZXQgPSByZXMuaW5kZXhcbiAgICBwYXRoICs9IHN0ci5zbGljZShpbmRleCwgb2Zmc2V0KVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbS5sZW5ndGhcblxuICAgIC8vIElnbm9yZSBhbHJlYWR5IGVzY2FwZWQgc2VxdWVuY2VzLlxuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBwYXRoICs9IGVzY2FwZWRbMV1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFyIG5leHQgPSBzdHJbaW5kZXhdXG4gICAgdmFyIHByZWZpeCA9IHJlc1syXVxuICAgIHZhciBuYW1lID0gcmVzWzNdXG4gICAgdmFyIGNhcHR1cmUgPSByZXNbNF1cbiAgICB2YXIgZ3JvdXAgPSByZXNbNV1cbiAgICB2YXIgbW9kaWZpZXIgPSByZXNbNl1cbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN11cblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gICAgICBwYXRoID0gJydcbiAgICB9XG5cbiAgICB2YXIgcGFydGlhbCA9IHByZWZpeCAhPSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiBuZXh0ICE9PSBwcmVmaXhcbiAgICB2YXIgcmVwZWF0ID0gbW9kaWZpZXIgPT09ICcrJyB8fCBtb2RpZmllciA9PT0gJyonXG4gICAgdmFyIG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonXG4gICAgdmFyIGRlbGltaXRlciA9IHJlc1syXSB8fCBkZWZhdWx0RGVsaW1pdGVyXG4gICAgdmFyIHBhdHRlcm4gPSBjYXB0dXJlIHx8IGdyb3VwXG5cbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lIHx8IGtleSsrLFxuICAgICAgcHJlZml4OiBwcmVmaXggfHwgJycsXG4gICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgIHJlcGVhdDogcmVwZWF0LFxuICAgICAgcGFydGlhbDogcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiAhIWFzdGVyaXNrLFxuICAgICAgcGF0dGVybjogcGF0dGVybiA/IGVzY2FwZUdyb3VwKHBhdHRlcm4pIDogKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nKVxuICAgIH0pXG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpXG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucywgb3B0aW9ucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aClcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnLCBmbGFncyhvcHRpb25zKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJydcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fVxuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fVxuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuXG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXVxuICAgICAgdmFyIHNlZ21lbnRcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKVxuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKVxuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJ1xufVxuXG4vKipcbiAqIFB1bGwgb3V0IGtleXMgZnJvbSBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cCAocGF0aCwga2V5cykge1xuICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICB2YXIgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZylcblxuICBpZiAoZ3JvdXBzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGksXG4gICAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgICAgZGVsaW1pdGVyOiBudWxsLFxuICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgIHJlcGVhdDogZmFsc2UsXG4gICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICBhc3RlcmlzazogZmFsc2UsXG4gICAgICAgIHBhdHRlcm46IG51bGxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKVxuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucylcbiAgICBrZXlzID0gW11cbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2VcbiAgdmFyIHJvdXRlID0gJydcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyh0b2tlbilcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpXG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJ1xuXG4gICAgICBrZXlzLnB1c2godG9rZW4pXG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPydcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpPydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSdcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZVxuICAgIH1cbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nKVxuICB2YXIgZW5kc1dpdGhEZWxpbWl0ZXIgPSByb3V0ZS5zbGljZSgtZGVsaW1pdGVyLmxlbmd0aCkgPT09IGRlbGltaXRlclxuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nXG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnXG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aERlbGltaXRlciA/ICcnIDogJyg/PScgKyBkZWxpbWl0ZXIgKyAnfCQpJ1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpXG4gICAga2V5cyA9IFtdXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdGRvdXQ6IGZhbHNlLFxuXHRzdGRlcnI6IGZhbHNlXG59O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLnR5cGVEZXRlY3QgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIHR5cGUtZGV0ZWN0XG4gKiBDb3B5cmlnaHQoYykgMjAxMyBqYWtlIGx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG52YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xudmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0XG5cbnZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJztcbnZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFeGlzdHMgPSB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrTWFwRXhpc3RzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtTZXRFeGlzdHMgPSB0eXBlb2YgV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgZGF0YVZpZXdFeGlzdHMgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbEl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEVudHJpZXNFeGlzdHMgPSBzZXRFeGlzdHMgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBtYXBFbnRyaWVzRXhpc3RzID0gbWFwRXhpc3RzICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgc2V0SXRlcmF0b3JQcm90b3R5cGUgPSBzZXRFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgU2V0KCkuZW50cmllcygpKTtcbnZhciBtYXBJdGVyYXRvclByb3RvdHlwZSA9IG1hcEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBNYXAoKS5lbnRyaWVzKCkpO1xudmFyIGFycmF5SXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgYXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgc3RyaW5nSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlID0gc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgdG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGggPSA4O1xudmFyIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCA9IC0xO1xuLyoqXG4gKiAjIyMgdHlwZU9mIChvYmopXG4gKlxuICogVXNlcyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIG9iamVjdCxcbiAqIG5vcm1hbGlzaW5nIGJlaGF2aW91ciBhY3Jvc3MgZW5naW5lIHZlcnNpb25zICYgd2VsbCBvcHRpbWlzZWQuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IG9iamVjdCB0eXBlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB0eXBlRGV0ZWN0KG9iaikge1xuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMywwMzksMDM1IG9wcy9zZWMgwrExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIMKxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyDCsTEuOTElICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggOSw5NzgsNjYwIG9wcy9zZWMgwrExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIMKxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgwrExLjE1JSAoNzkgcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDMxLDE0OCw5NDAgb3BzL3NlYyDCsTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIMKxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgwrExLjA3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDMxLDI5Niw4NzAgb3BzL3NlYyDCsTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyDCsTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIMKxMS4zNyUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93KWBgXG4gICAqICAtIE5vZGUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gUGhhbnRvbUpTID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSBFZGdlID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcylgYFxuICAgKiAgLSBDaHJvbWUgV29ya2VyID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gU2FmYXJpIFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIDExIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIEVkZ2UgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICovXG4gIGlmIChvYmogPT09IGdsb2JhbE9iamVjdCkge1xuICAgIHJldHVybiAnZ2xvYmFsJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyLDg4OCwzNTIgb3BzL3NlYyDCsTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIMKxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgwrExLjU4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggMSwyNzksODUyIG9wcy9zZWMgwrEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgwrExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgwrEyLjI1JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggMSwxMjgsMDQwIG9wcy9zZWMgwrEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgwrEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgwrE1Ljc5JSAoODYgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggMSwwNTgsNzA3IG9wcy9zZWMgwrE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgwrE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyDCsTEzLjQ3JSAoNjQgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggNSw4ODcsOTEyIG9wcy9zZWMgwrExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgwrExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgwrExLjY3JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggNiw0NjMsOTY2IG9wcy9zZWMgwrExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgwrEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgwrExLjk4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggNiw2MDYsMDc4IG9wcy9zZWMgwrExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgwrExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyDCsTEuODUlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAyLDE0Myw2MzQgb3BzL3NlYyDCsTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIMKxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIMKxMC41OCUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gUmVnRXhwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnUmVnRXhwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgZGF0ZSAgICAgICAgICAgICAgIHggMiwxMzAsMDc0IG9wcy9zZWMgwrE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyDCsTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyDCsTEuMzElICg4MiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHNldCAgICAgICAgICAgICAgICB4IDQsNTQ1LDg3OSBvcHMvc2VjIMKxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIMKxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgwrE2LjU5JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha3NldCAgICAgICAgICAgIHggMSwzMjMsMjIwIG9wcy9zZWMgwrEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyDCsTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyDCsTIuMDIlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWttYXAgICAgICAgICAgICB4IDMsODgxLDM4NCBvcHMvc2VjIMKxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgwrExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyDCsTAuOTklICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0XG4gICAgLnByb3RvdHlwZVxuICAgIC50b1N0cmluZ1xuICAgIC5jYWxsKG9iailcbiAgICAuc2xpY2UodG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGgsIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCk7XG59XG5cbnJldHVybiB0eXBlRGV0ZWN0O1xuXG59KSkpO1xuIl19 diff --git a/build/node_modules/sourcemap-codec/package.json b/build/node_modules/sourcemap-codec/package.json index ffc73d23..7a3ab841 100644 --- a/build/node_modules/sourcemap-codec/package.json +++ b/build/node_modules/sourcemap-codec/package.json @@ -1,5 +1,5 @@ { - "_from": "sourcemap-codec@^1.4.4", + "_from": "sourcemap-codec@^1.4.8", "_id": "sourcemap-codec@1.4.8", "_inBundle": false, "_integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", @@ -8,19 +8,19 @@ "_requested": { "type": "range", "registry": true, - "raw": "sourcemap-codec@^1.4.4", + "raw": "sourcemap-codec@^1.4.8", "name": "sourcemap-codec", "escapedName": "sourcemap-codec", - "rawSpec": "^1.4.4", + "rawSpec": "^1.4.8", "saveSpec": null, - "fetchSpec": "^1.4.4" + "fetchSpec": "^1.4.8" }, "_requiredBy": [ "/magic-string" ], - "_resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "_shasum": "ea804bd94857402e6992d05a38ef1ae35a9ab4c4", - "_spec": "sourcemap-codec@^1.4.4", + "_spec": "sourcemap-codec@^1.4.8", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/magic-string", "author": { "name": "Rich Harris" diff --git a/build/node_modules/stack-trace/package.json b/build/node_modules/stack-trace/package.json index 3c63c0c0..493ea901 100644 --- a/build/node_modules/stack-trace/package.json +++ b/build/node_modules/stack-trace/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/winston" ], - "_resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/stack-trace/-/stack-trace-0.0.10.tgz", "_shasum": "547c70b347e8d32b4e108ea1a2a159e5fdde19c0", "_spec": "stack-trace@0.0.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", diff --git a/build/node_modules/string-range/package.json b/build/node_modules/string-range/package.json index b8d8b9ce..28a95a41 100644 --- a/build/node_modules/string-range/package.json +++ b/build/node_modules/string-range/package.json @@ -19,7 +19,7 @@ "/level-hooks", "/level-sublevel" ], - "_resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string-range/-/string-range-1.2.2.tgz", "_shasum": "a893ed347e72299bc83befbbf2a692a8d239d5dd", "_spec": "string-range@~1.2.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-sublevel", diff --git a/build/node_modules/string-width/index.d.ts b/build/node_modules/string-width/index.d.ts new file mode 100644 index 00000000..12b53097 --- /dev/null +++ b/build/node_modules/string-width/index.d.ts @@ -0,0 +1,29 @@ +declare const stringWidth: { + /** + Get the visual width of a string - the number of columns required to display it. + + Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + + @example + ``` + import stringWidth = require('string-width'); + + stringWidth('a'); + //=> 1 + + stringWidth('古'); + //=> 2 + + stringWidth('\u001B[1m古\u001B[22m'); + //=> 2 + ``` + */ + (string: string): number; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function stringWidth(string: string): number; + // export = stringWidth; + default: typeof stringWidth; +} + +export = stringWidth; diff --git a/build/node_modules/string-width/index.js b/build/node_modules/string-width/index.js new file mode 100644 index 00000000..f4d261a9 --- /dev/null +++ b/build/node_modules/string-width/index.js @@ -0,0 +1,47 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex'); + +const stringWidth = string => { + if (typeof string !== 'string' || string.length === 0) { + return 0; + } + + string = stripAnsi(string); + + if (string.length === 0) { + return 0; + } + + string = string.replace(emojiRegex(), ' '); + + let width = 0; + + for (let i = 0; i < string.length; i++) { + const code = string.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; + +module.exports = stringWidth; +// TODO: remove this in the next major version +module.exports.default = stringWidth; diff --git a/build/node_modules/string-width/license b/build/node_modules/string-width/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/string-width/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/string-width/package.json b/build/node_modules/string-width/package.json new file mode 100644 index 00000000..5f0ae857 --- /dev/null +++ b/build/node_modules/string-width/package.json @@ -0,0 +1,90 @@ +{ + "_from": "string-width@^4.2.0", + "_id": "string-width@4.2.3", + "_inBundle": false, + "_integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "_location": "/string-width", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string-width@^4.2.0", + "name": "string-width", + "escapedName": "string-width", + "rawSpec": "^4.2.0", + "saveSpec": null, + "fetchSpec": "^4.2.0" + }, + "_requiredBy": [ + "/cliui", + "/wrap-ansi", + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string-width/-/string-width-4.2.3.tgz", + "_shasum": "269c7117d27b05ad2e536830a8ec895ef9c6d010", + "_spec": "string-width@^4.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/string-width/issues" + }, + "bundleDependencies": false, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "deprecated": false, + "description": "Get the visual width of a string - the number of columns required to display it", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/string-width#readme", + "keywords": [ + "string", + "character", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "license": "MIT", + "name": "string-width", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/string-width.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.2.3" +} diff --git a/build/node_modules/string-width/readme.md b/build/node_modules/string-width/readme.md new file mode 100644 index 00000000..bdd31412 --- /dev/null +++ b/build/node_modules/string-width/readme.md @@ -0,0 +1,50 @@ +# string-width + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('a'); +//=> 1 + +stringWidth('古'); +//=> 2 + +stringWidth('\u001B[1m古\u001B[22m'); +//=> 2 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            diff --git a/build/node_modules/string.prototype.trimend/.editorconfig b/build/node_modules/string.prototype.trimend/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/string.prototype.trimend/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/string.prototype.trimend/.eslintignore b/build/node_modules/string.prototype.trimend/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/string.prototype.trimend/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/string.prototype.trimend/.eslintrc b/build/node_modules/string.prototype.trimend/.eslintrc deleted file mode 100644 index 54af451c..00000000 --- a/build/node_modules/string.prototype.trimend/.eslintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "overrides": [ - { - "files": "test/**", - "rules": { - "id-length": 0, - "no-invalid-this": 1, - }, - }, - ], -} diff --git a/build/node_modules/string.prototype.trimend/.nycrc b/build/node_modules/string.prototype.trimend/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/string.prototype.trimend/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/string.prototype.trimend/CHANGELOG.md b/build/node_modules/string.prototype.trimend/CHANGELOG.md deleted file mode 100644 index 37cae3dc..00000000 --- a/build/node_modules/string.prototype.trimend/CHANGELOG.md +++ /dev/null @@ -1,74 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.4](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.3...v1.0.4) - 2021-02-23 - -### Commits - -- [meta] do not publish github action workflow files [`08e735c`](https://github.com/es-shims/String.prototype.trimEnd/commit/08e735cd55b00ae78a9dc16c6b4e786f7931085b) -- [readme] remove travis badge [`10e0e47`](https://github.com/es-shims/String.prototype.trimEnd/commit/10e0e47cb2ecfd171e68b40f8486c5d007dcf3ef) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names`, `has-strict-mode`, `tape` [`0871432`](https://github.com/es-shims/String.prototype.trimEnd/commit/0871432c70c2f6a3929acd740a5d1f57c939f345) -- [Tests] increase coverage [`711e6a6`](https://github.com/es-shims/String.prototype.trimEnd/commit/711e6a66660f30f7a30fef536be435af1a13d05c) -- [actions] update workflows [`deb0d06`](https://github.com/es-shims/String.prototype.trimEnd/commit/deb0d06f41ac1c3e1e640ecd1cf0e69303ab5799) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`e250b4a`](https://github.com/es-shims/String.prototype.trimEnd/commit/e250b4a38401e7c02a067dab26cc68316da47ef7) -- [meta] gitignore coverage output [`55231df`](https://github.com/es-shims/String.prototype.trimEnd/commit/55231dfd9829277ba5c3f07be5434dc385703ca9) -- [Deps] update `call-bind` [`0580f5f`](https://github.com/es-shims/String.prototype.trimEnd/commit/0580f5f915ecb87677764d03fe3cf023e3bee7d8) - -## [v1.0.3](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.2...v1.0.3) - 2020-11-21 - -### Commits - -- [Tests] migrate tests to Github Actions [`23e7a09`](https://github.com/es-shims/String.prototype.trimEnd/commit/23e7a09a4ad37c21c3db3d7761212c7d84a371a2) -- [Tests] add `implementation` test; run `es-shim-api` in postlint; use `tape` runner [`26e8623`](https://github.com/es-shims/String.prototype.trimEnd/commit/26e8623cf35c1859d0b482d4bb5b3450d101a810) -- [Tests] run `nyc` on all tests [`a72a546`](https://github.com/es-shims/String.prototype.trimEnd/commit/a72a546f671c5d3ac65dff68b4db1a1cc7089bfd) -- [Deps] replace `es-abstract` with `call-bind` [`f07b87d`](https://github.com/es-shims/String.prototype.trimEnd/commit/f07b87dd452090a2601d666edceb1daa90d45f24) -- [Dev Deps] update `eslint`, `aud`; add `safe-publish-latest` [`122ecb7`](https://github.com/es-shims/String.prototype.trimEnd/commit/122ecb726b1dc043b9ef27fa5a7b4172a4d5df37) - -## [v1.0.2](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.1...v1.0.2) - 2020-10-20 - -### Commits - -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`a003e71`](https://github.com/es-shims/String.prototype.trimEnd/commit/a003e7166d8de16c551a14b0ec855187357cce43) -- [actions] add "Allow Edits" workflow [`0b4b43c`](https://github.com/es-shims/String.prototype.trimEnd/commit/0b4b43cb605f7b3532e61c43dfc7f1795296c5a4) -- [Deps] update `es-abstract` [`75ca6b0`](https://github.com/es-shims/String.prototype.trimEnd/commit/75ca6b0e9757d64013ae863cfaac49ebcb36f1cf) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`552016c`](https://github.com/es-shims/String.prototype.trimEnd/commit/552016cb631ac13c12bbbc0d6dd65012e5e79583) - -## [v1.0.1](https://github.com/es-shims/String.prototype.trimEnd/compare/v1.0.0...v1.0.1) - 2020-04-09 - -### Commits - -- [meta] add some missing repo metadata [`6abe248`](https://github.com/es-shims/String.prototype.trimEnd/commit/6abe248ba0b57a8b0e16bbe01de07a4d37c421bc) -- [Dev Deps] update `auto-changelog` [`e2eaab2`](https://github.com/es-shims/String.prototype.trimEnd/commit/e2eaab2fd1bc27a3d224b3d76db16190c1dd6d08) - -## [v1.0.0](https://github.com/es-shims/String.prototype.trimEnd/compare/v0.1.0...v1.0.0) - 2020-03-30 - -### Commits - -- [Breaking] convert to es-shim API [`2c6ef13`](https://github.com/es-shims/String.prototype.trimEnd/commit/2c6ef13d3f0b07a9bc55e367b311dbb731780405) -- [meta] add `auto-changelog` [`6f1fcc1`](https://github.com/es-shims/String.prototype.trimEnd/commit/6f1fcc1739de1e9541bd603b659807646a13dd7f) -- [meta] update readme [`ed4ce0d`](https://github.com/es-shims/String.prototype.trimEnd/commit/ed4ce0d84d53e626b48375c5959be20332464eaf) -- [Tests] add `npm run lint` [`eadaf2c`](https://github.com/es-shims/String.prototype.trimEnd/commit/eadaf2c83f2d791b54d80d7b30a9961ebc0f246f) -- Only apps should have lockfiles [`44d355f`](https://github.com/es-shims/String.prototype.trimEnd/commit/44d355f7dafcb0b51c5001824b07f7a2b9f1d06e) -- [actions] add automatic rebasing / merge commit blocking [`e78bf8e`](https://github.com/es-shims/String.prototype.trimEnd/commit/e78bf8e5fc04fcb3379dd1c98360d7df4f9ea7d6) -- [Tests] use shared travis-ci configs [`983c563`](https://github.com/es-shims/String.prototype.trimEnd/commit/983c5639efca2c9bb8b93ebbb917fbcb2561b94c) -- [meta] add `funding` field [`35139d6`](https://github.com/es-shims/String.prototype.trimEnd/commit/35139d6236ceacfc1501d08fb196d18a936ee583) -- [meta] fix non-updated version number [`a2d308b`](https://github.com/es-shims/String.prototype.trimEnd/commit/a2d308b99967ca427936c54747175794ca7336e1) - -## [v0.1.0](https://github.com/es-shims/String.prototype.trimEnd/compare/v0.0.1...v0.1.0) - 2017-12-19 - -### Commits - -- updated README [`f1c71a0`](https://github.com/es-shims/String.prototype.trimEnd/commit/f1c71a0a882e89e1c207ed2b316d91670be2b075) - -## v0.0.1 - 2017-12-19 - -### Commits - -- finished polyfill [`e58d550`](https://github.com/es-shims/String.prototype.trimEnd/commit/e58d550ab8695924ff4221ebe91f00f29801aa4b) -- created README file [`f78628a`](https://github.com/es-shims/String.prototype.trimEnd/commit/f78628ab123171f8b7759bba331d6a589702584f) -- Initial commit [`9199478`](https://github.com/es-shims/String.prototype.trimEnd/commit/9199478256da953e2f5bddfc4d82a161f4537e85) -- typo [`d1f4558`](https://github.com/es-shims/String.prototype.trimEnd/commit/d1f4558a51157833f14d8a424426d038d06576ce) diff --git a/build/node_modules/string.prototype.trimend/LICENSE b/build/node_modules/string.prototype.trimend/LICENSE deleted file mode 100644 index e48a1b57..00000000 --- a/build/node_modules/string.prototype.trimend/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Khaled Al-Ansari - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/string.prototype.trimend/README.md b/build/node_modules/string.prototype.trimend/README.md deleted file mode 100644 index f6fd331c..00000000 --- a/build/node_modules/string.prototype.trimend/README.md +++ /dev/null @@ -1,40 +0,0 @@ -String.prototype.trimEnd [![Version Badge][npm-version-svg]][package-url] - -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -An ES2019-spec-compliant `String.prototype.trimEnd` shim. Invoke its "shim" method to shim `String.prototype.trimEnd` if it is unavailable. - -This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](https://www.ecma-international.org/ecma-262/6.0/#sec-object.assign). In an ES6 environment, it will also work properly with `Symbol`s. - -Most common usage: -```js -var trimEnd = require('string.prototype.trimend'); - -assert(trimEnd(' \t\na \t\n') === 'a \t\n'); - -if (!String.prototype.trimEnd) { - trimEnd.shim(); -} - -assert(trimEnd(' \t\na \t\n ') === ' \t\na \t\n '.trimEnd()); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.com/package/string.prototype.trimend -[npm-version-svg]: https://vb.teelaun.ch/es-shims/String.prototype.trimEnd.svg -[deps-svg]: https://david-dm.org/es-shims/String.prototype.trimEnd.svg -[deps-url]: https://david-dm.org/es-shims/String.prototype.trimEnd -[dev-deps-svg]: https://david-dm.org/es-shims/String.prototype.trimEnd/dev-status.svg -[dev-deps-url]: https://david-dm.org/es-shims/String.prototype.trimEnd#info=devDependencies -[npm-badge-png]: https://nodei.co/npm/string.prototype.trimend.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/string.prototype.trimend.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/string.prototype.trimend.svg -[downloads-url]: https://npm-stat.com/charts.html?package=string.prototype.trimend diff --git a/build/node_modules/string.prototype.trimend/auto.js b/build/node_modules/string.prototype.trimend/auto.js deleted file mode 100644 index 8ebf606c..00000000 --- a/build/node_modules/string.prototype.trimend/auto.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require('./shim')(); diff --git a/build/node_modules/string.prototype.trimend/implementation.js b/build/node_modules/string.prototype.trimend/implementation.js deleted file mode 100644 index a14a7fc3..00000000 --- a/build/node_modules/string.prototype.trimend/implementation.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $replace = callBound('String.prototype.replace'); - -/* eslint-disable no-control-regex */ -var endWhitespace = /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]*$/; -/* eslint-enable no-control-regex */ - -module.exports = function trimEnd() { - return $replace(this, endWhitespace, ''); -}; diff --git a/build/node_modules/string.prototype.trimend/index.js b/build/node_modules/string.prototype.trimend/index.js deleted file mode 100644 index 31f6bf44..00000000 --- a/build/node_modules/string.prototype.trimend/index.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBind = require('call-bind'); -var define = require('define-properties'); - -var implementation = require('./implementation'); -var getPolyfill = require('./polyfill'); -var shim = require('./shim'); - -var bound = callBind(getPolyfill()); - -define(bound, { - getPolyfill: getPolyfill, - implementation: implementation, - shim: shim -}); - -module.exports = bound; diff --git a/build/node_modules/string.prototype.trimend/package.json b/build/node_modules/string.prototype.trimend/package.json deleted file mode 100644 index ee894020..00000000 --- a/build/node_modules/string.prototype.trimend/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_from": "string.prototype.trimend@^1.0.4", - "_id": "string.prototype.trimend@1.0.4", - "_inBundle": false, - "_integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "_location": "/string.prototype.trimend", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "string.prototype.trimend@^1.0.4", - "name": "string.prototype.trimend", - "escapedName": "string.prototype.trimend", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "_shasum": "e75ae90c2942c63504686c18b287b4a0b1a45f80", - "_spec": "string.prototype.trimend@^1.0.4", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/es-shims/String.prototype.trimEnd/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - { - "name": "Khaled Al-Ansari", - "email": "khaledelansari@gmail.com" - } - ], - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "deprecated": false, - "description": "ES2019 spec-compliant String.prototype.trimEnd shim.", - "devDependencies": { - "@es-shims/api": "^2.1.2", - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", - "auto-changelog": "^2.2.1", - "eslint": "^7.20.0", - "functions-have-names": "^1.2.2", - "has-strict-mode": "^1.0.1", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/es-shims/String.prototype.trimEnd#readme", - "keywords": [ - "es6", - "es7", - "es8", - "javascript", - "prototype", - "polyfill", - "utility", - "trim", - "trimLeft", - "trimRight", - "trimStart", - "trimEnd", - "tc39" - ], - "license": "MIT", - "main": "index.js", - "name": "string.prototype.trimend", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/String.prototype.trimEnd.git" - }, - "scripts": { - "lint": "eslint .", - "postlint": "es-shim-api --bound", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.4" -} diff --git a/build/node_modules/string.prototype.trimend/polyfill.js b/build/node_modules/string.prototype.trimend/polyfill.js deleted file mode 100644 index 0fa4f708..00000000 --- a/build/node_modules/string.prototype.trimend/polyfill.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var implementation = require('./implementation'); - -module.exports = function getPolyfill() { - if (!String.prototype.trimEnd && !String.prototype.trimRight) { - return implementation; - } - var zeroWidthSpace = '\u200b'; - var trimmed = zeroWidthSpace.trimEnd ? zeroWidthSpace.trimEnd() : zeroWidthSpace.trimRight(); - if (trimmed !== zeroWidthSpace) { - return implementation; - } - return String.prototype.trimEnd || String.prototype.trimRight; -}; diff --git a/build/node_modules/string.prototype.trimend/shim.js b/build/node_modules/string.prototype.trimend/shim.js deleted file mode 100644 index 5a8f4773..00000000 --- a/build/node_modules/string.prototype.trimend/shim.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var define = require('define-properties'); -var getPolyfill = require('./polyfill'); - -module.exports = function shimTrimEnd() { - var polyfill = getPolyfill(); - define( - String.prototype, - { trimEnd: polyfill }, - { trimEnd: function () { return String.prototype.trimEnd !== polyfill; } } - ); - return polyfill; -}; diff --git a/build/node_modules/string.prototype.trimend/test/implementation.js b/build/node_modules/string.prototype.trimend/test/implementation.js deleted file mode 100644 index 7fdf95b7..00000000 --- a/build/node_modules/string.prototype.trimend/test/implementation.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var implementation = require('../implementation'); -var callBind = require('call-bind'); -var test = require('tape'); -var hasStrictMode = require('has-strict-mode')(); -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', { skip: !hasStrictMode }, function (st) { - /* eslint no-useless-call: 0 */ - st['throws'](function () { implementation.call(undefined); }, TypeError, 'undefined is not an object'); - st['throws'](function () { implementation.call(null); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(callBind(implementation), t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimend/test/index.js b/build/node_modules/string.prototype.trimend/test/index.js deleted file mode 100644 index 2ee8f670..00000000 --- a/build/node_modules/string.prototype.trimend/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var trimEnd = require('../'); -var test = require('tape'); -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', function (st) { - st['throws'](function () { trimEnd(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st['throws'](function () { trimEnd(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(trimEnd, t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimend/test/shimmed.js b/build/node_modules/string.prototype.trimend/test/shimmed.js deleted file mode 100644 index 1a01ceb1..00000000 --- a/build/node_modules/string.prototype.trimend/test/shimmed.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -require('../auto'); - -var runTests = require('./tests'); - -var test = require('tape'); -var defineProperties = require('define-properties'); -var callBind = require('call-bind'); -var isEnumerable = Object.prototype.propertyIsEnumerable; -var functionsHaveNames = require('functions-have-names')(); - -test('shimmed', function (t) { - t.equal(String.prototype.trimEnd.length, 0, 'String#trimEnd has a length of 0'); - t.test('Function name', { skip: !functionsHaveNames }, function (st) { - st.equal((/^(?:trimRight|trimEnd)$/).test(String.prototype.trimEnd.name), true, 'String#trimEnd has name "trimRight" or "trimEnd"'); - st.end(); - }); - - t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) { - et.equal(false, isEnumerable.call(String.prototype, 'trimEnd'), 'String#trimEnd is not enumerable'); - et.end(); - }); - - var supportsStrictMode = (function () { return typeof this === 'undefined'; }()); - - t.test('bad string/this value', { skip: !supportsStrictMode }, function (st) { - st['throws'](function () { return String.prototype.trimEnd.call(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st['throws'](function () { return String.prototype.trimEnd.call(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(callBind(String.prototype.trimEnd), t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimend/test/tests.js b/build/node_modules/string.prototype.trimend/test/tests.js deleted file mode 100644 index ce00554c..00000000 --- a/build/node_modules/string.prototype.trimend/test/tests.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -module.exports = function (trimEnd, t) { - t.test('normal cases', function (st) { - st.equal(trimEnd(' \t\na \t\n'), ' \t\na', 'strips whitespace off the left side'); - st.equal(trimEnd('a'), 'a', 'noop when no whitespace'); - - var allWhitespaceChars = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; - st.equal(trimEnd(allWhitespaceChars + 'a' + allWhitespaceChars), allWhitespaceChars + 'a', 'all expected whitespace chars are trimmed'); - - st.end(); - }); - - // see https://codeblog.jonskeet.uk/2014/12/01/when-is-an-identifier-not-an-identifier-attack-of-the-mongolian-vowel-separator/ - var mongolianVowelSeparator = '\u180E'; - t.test('unicode >= 4 && < 6.3', { skip: !(/^\s$/).test(mongolianVowelSeparator) }, function (st) { - st.equal(trimEnd(mongolianVowelSeparator + 'a' + mongolianVowelSeparator), mongolianVowelSeparator + 'a', 'mongolian vowel separator is whitespace'); - st.end(); - }); - - t.test('zero-width spaces', function (st) { - var zeroWidth = '\u200b'; - st.equal(trimEnd(zeroWidth), zeroWidth, 'zero width space does not trim'); - st.end(); - }); -}; diff --git a/build/node_modules/string.prototype.trimstart/.editorconfig b/build/node_modules/string.prototype.trimstart/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/string.prototype.trimstart/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/string.prototype.trimstart/.eslintignore b/build/node_modules/string.prototype.trimstart/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/string.prototype.trimstart/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/string.prototype.trimstart/.eslintrc b/build/node_modules/string.prototype.trimstart/.eslintrc deleted file mode 100644 index 54af451c..00000000 --- a/build/node_modules/string.prototype.trimstart/.eslintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "overrides": [ - { - "files": "test/**", - "rules": { - "id-length": 0, - "no-invalid-this": 1, - }, - }, - ], -} diff --git a/build/node_modules/string.prototype.trimstart/.nycrc b/build/node_modules/string.prototype.trimstart/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/string.prototype.trimstart/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/string.prototype.trimstart/CHANGELOG.md b/build/node_modules/string.prototype.trimstart/CHANGELOG.md deleted file mode 100644 index f740ecd1..00000000 --- a/build/node_modules/string.prototype.trimstart/CHANGELOG.md +++ /dev/null @@ -1,74 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.4](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.3...v1.0.4) - 2021-02-23 - -### Commits - -- [meta] do not publish github action workflow files [`9c434ec`](https://github.com/es-shims/String.prototype.trimStart/commit/9c434eceb50141cf36e8e65f514226b0b547b568) -- [readme] remove travis badge [`7843160`](https://github.com/es-shims/String.prototype.trimStart/commit/7843160a3e8feaa2213feb0da9c5ad7d9bf21b59) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `functions-have-names`, `has-strict-mode`, `tape` [`8b52646`](https://github.com/es-shims/String.prototype.trimStart/commit/8b52646510aea20473da5491fe0876117a2251b1) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`badeda2`](https://github.com/es-shims/String.prototype.trimStart/commit/badeda2b01d2e266e4d1c2e7dc0e4fca0f066f3e) -- [Tests] increase coverage [`bf8777d`](https://github.com/es-shims/String.prototype.trimStart/commit/bf8777d54c4b05c093559021cfaf0670306120f8) -- [actions] update workflows [`61be1c6`](https://github.com/es-shims/String.prototype.trimStart/commit/61be1c649ae859faa40286e57fa22cef65ae1229) -- [meta] gitignore coverage output [`c9c98d7`](https://github.com/es-shims/String.prototype.trimStart/commit/c9c98d75d7708e8906a39b55a0ad7a0ed6a9e4b0) -- [Deps] update `call-bind` [`c8645e8`](https://github.com/es-shims/String.prototype.trimStart/commit/c8645e89f9ace7681660ba66c724cf00c798f3d4) - -## [v1.0.3](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.2...v1.0.3) - 2020-11-21 - -### Commits - -- [Tests] migrate tests to Github Actions [`fbc7519`](https://github.com/es-shims/String.prototype.trimStart/commit/fbc7519cce2b5bfff9fe28dea96fb5f6f82e19fd) -- [Tests] add `implementation` test; run `es-shim-api` in postlint; use `tape` runner [`3c9330b`](https://github.com/es-shims/String.prototype.trimStart/commit/3c9330be9ad02497f78ff0fd94b7c918c3a4bc21) -- [Tests] run `nyc` on all tests [`52229ca`](https://github.com/es-shims/String.prototype.trimStart/commit/52229ca28426be516c3826743e417be85144673e) -- [Deps] replace `es-abstract` with `call-bind` [`5e5068d`](https://github.com/es-shims/String.prototype.trimStart/commit/5e5068d2cc85d0a6f2a441ea984521ee70470537) -- [Dev Deps] update `eslint`, `aud`; add `safe-publish-latest` [`42a853e`](https://github.com/es-shims/String.prototype.trimStart/commit/42a853e2cb419378085098cb66e421ee94eed3ab) - -## [v1.0.2](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.1...v1.0.2) - 2020-10-20 - -### Commits - -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`d032b38`](https://github.com/es-shims/String.prototype.trimStart/commit/d032b38aac7e9ebae7bf5c4195492c508af2815a) -- [actions] add "Allow Edits" workflow [`83e30ba`](https://github.com/es-shims/String.prototype.trimStart/commit/83e30bac01572b6dba6358fec6e339c55dc431c9) -- [Deps] update `es-abstract` [`707d85d`](https://github.com/es-shims/String.prototype.trimStart/commit/707d85d827d9c537a144f199fdecc47edaade1cd) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`096c6d9`](https://github.com/es-shims/String.prototype.trimStart/commit/096c6d9dc142286c750da7024e7a88ed698a4953) - -## [v1.0.1](https://github.com/es-shims/String.prototype.trimStart/compare/v1.0.0...v1.0.1) - 2020-04-09 - -### Commits - -- [meta] add some missing repo metadata [`3385da3`](https://github.com/es-shims/String.prototype.trimStart/commit/3385da3bbb87819de11a869981ca954887a6a092) -- [Dev Deps] update `auto-changelog` [`879377d`](https://github.com/es-shims/String.prototype.trimStart/commit/879377df9c1ff97d8f0b3eac800683f1d68a304c) - -## [v1.0.0](https://github.com/es-shims/String.prototype.trimStart/compare/v0.1.0...v1.0.0) - 2020-03-30 - -### Commits - -- [Breaking] convert to es-shim API [`970922c`](https://github.com/es-shims/String.prototype.trimStart/commit/970922c494c78b033c351c77f61a8aefd49c30d9) -- [meta] add `auto-changelog` [`ff30c09`](https://github.com/es-shims/String.prototype.trimStart/commit/ff30c0996289113d2c3dbbfca7e280ff151bf36d) -- [meta] update readme [`816291d`](https://github.com/es-shims/String.prototype.trimStart/commit/816291d01e0eaf85da9b732c179cfb2454bd282e) -- [Tests] add `npm run lint` [`3341104`](https://github.com/es-shims/String.prototype.trimStart/commit/3341104450bc6ac84f3b70a6d6c0fbeb4df5131e) -- Only apps should have lockfiles [`f008df7`](https://github.com/es-shims/String.prototype.trimStart/commit/f008df73fbf3dcf8dfad6d5cad86de7050d0ae09) -- [actions] add automatic rebasing / merge commit blocking [`e5ba35c`](https://github.com/es-shims/String.prototype.trimStart/commit/e5ba35c1a14fcf652336cc9c4be49d232981161e) -- [Tests] use shared travis-ci configs [`46516b1`](https://github.com/es-shims/String.prototype.trimStart/commit/46516b137a8c07ed5807d751bd61199688ef9baa) -- [meta] add `funding` field [`34ae856`](https://github.com/es-shims/String.prototype.trimStart/commit/34ae8563f115bd4a5e5f5d2d786c0fa0a420fa2a) -- [meta] fix non-updated version number [`3b0e262`](https://github.com/es-shims/String.prototype.trimStart/commit/3b0e262e2f4eeee2e1b99fe890f8ca17bed8f2fd) - -## [v0.1.0](https://github.com/es-shims/String.prototype.trimStart/compare/v0.0.1...v0.1.0) - 2017-12-19 - -### Commits - -- updated README [`ab2f6ac`](https://github.com/es-shims/String.prototype.trimStart/commit/ab2f6ac8813ed336a0f2dc3aa8cdb52f4d52814b) - -## v0.0.1 - 2017-12-19 - -### Commits - -- finished polyfill [`1c7ca20`](https://github.com/es-shims/String.prototype.trimStart/commit/1c7ca2043e3383b6e743870bc622ad4a38477147) -- created README file: [`192ecad`](https://github.com/es-shims/String.prototype.trimStart/commit/192ecaded4e0d5baaa65cd41e590b8d837520d44) -- Initial commit [`14044f8`](https://github.com/es-shims/String.prototype.trimStart/commit/14044f8a0fe1d155fe7403a8327bdbaf135da2d6) -- updated README [`d4fb6be`](https://github.com/es-shims/String.prototype.trimStart/commit/d4fb6be15455dd68fc4b306bee1d30dd4afc96e7) diff --git a/build/node_modules/string.prototype.trimstart/LICENSE b/build/node_modules/string.prototype.trimstart/LICENSE deleted file mode 100644 index e48a1b57..00000000 --- a/build/node_modules/string.prototype.trimstart/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Khaled Al-Ansari - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/string.prototype.trimstart/README.md b/build/node_modules/string.prototype.trimstart/README.md deleted file mode 100644 index 682408bf..00000000 --- a/build/node_modules/string.prototype.trimstart/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# String.prototype.trimStart [![Version Badge][npm-version-svg]][package-url] - -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][npm-badge-png]][package-url] - -An ES2019-spec-compliant `String.prototype.trimStart` shim. Invoke its "shim" method to shim `String.prototype.trimStart` if it is unavailable. - -This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the [spec](https://www.ecma-international.org/ecma-262/6.0/#sec-object.assign). In an ES6 environment, it will also work properly with `Symbol`s. - -Most common usage: -```js -var trimStart = require('string.prototype.trimstart'); - -assert(trimStart(' \t\na \t\n') === 'a \t\n'); - -if (!String.prototype.trimStart) { - trimStart.shim(); -} - -assert(trimStart(' \t\na \t\n') === ' \t\na \t\n'.trimStart()); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[package-url]: https://npmjs.com/package/string.prototype.trimstart -[npm-version-svg]: https://vb.teelaun.ch/es-shims/String.prototype.trimStart.svg -[deps-svg]: https://david-dm.org/es-shims/String.prototype.trimStart.svg -[deps-url]: https://david-dm.org/es-shims/String.prototype.trimStart -[dev-deps-svg]: https://david-dm.org/es-shims/String.prototype.trimStart/dev-status.svg -[dev-deps-url]: https://david-dm.org/es-shims/String.prototype.trimStart#info=devDependencies -[npm-badge-png]: https://nodei.co/npm/string.prototype.trimstart.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/string.prototype.trimstart.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/string.prototype.trimstart.svg -[downloads-url]: https://npm-stat.com/charts.html?package=string.prototype.trimstart diff --git a/build/node_modules/string.prototype.trimstart/auto.js b/build/node_modules/string.prototype.trimstart/auto.js deleted file mode 100644 index 8ebf606c..00000000 --- a/build/node_modules/string.prototype.trimstart/auto.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require('./shim')(); diff --git a/build/node_modules/string.prototype.trimstart/implementation.js b/build/node_modules/string.prototype.trimstart/implementation.js deleted file mode 100644 index 862aa0f7..00000000 --- a/build/node_modules/string.prototype.trimstart/implementation.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var callBound = require('call-bind/callBound'); -var $replace = callBound('String.prototype.replace'); - -/* eslint-disable no-control-regex */ -var startWhitespace = /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]*/; -/* eslint-enable no-control-regex */ - -module.exports = function trimStart() { - return $replace(this, startWhitespace, ''); -}; diff --git a/build/node_modules/string.prototype.trimstart/index.js b/build/node_modules/string.prototype.trimstart/index.js deleted file mode 100644 index 31f6bf44..00000000 --- a/build/node_modules/string.prototype.trimstart/index.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var callBind = require('call-bind'); -var define = require('define-properties'); - -var implementation = require('./implementation'); -var getPolyfill = require('./polyfill'); -var shim = require('./shim'); - -var bound = callBind(getPolyfill()); - -define(bound, { - getPolyfill: getPolyfill, - implementation: implementation, - shim: shim -}); - -module.exports = bound; diff --git a/build/node_modules/string.prototype.trimstart/package.json b/build/node_modules/string.prototype.trimstart/package.json deleted file mode 100644 index 69fdc53f..00000000 --- a/build/node_modules/string.prototype.trimstart/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_from": "string.prototype.trimstart@^1.0.4", - "_id": "string.prototype.trimstart@1.0.4", - "_inBundle": false, - "_integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "_location": "/string.prototype.trimstart", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "string.prototype.trimstart@^1.0.4", - "name": "string.prototype.trimstart", - "escapedName": "string.prototype.trimstart", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "_shasum": "b36399af4ab2999b4c9c648bd7a3fb2bb26feeed", - "_spec": "string.prototype.trimstart@^1.0.4", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/es-shims/String.prototype.trimStart/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - { - "name": "Khaled Al-Ansari", - "email": "khaledelansari@gmail.com" - } - ], - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "deprecated": false, - "description": "ES2019 spec-compliant String.prototype.trimStart shim.", - "devDependencies": { - "@es-shims/api": "^2.1.2", - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", - "auto-changelog": "^2.2.1", - "eslint": "^7.20.0", - "functions-have-names": "^1.2.2", - "has-strict-mode": "^1.0.1", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/es-shims/String.prototype.trimStart#readme", - "keywords": [ - "es6", - "es7", - "es8", - "javascript", - "prototype", - "polyfill", - "utility", - "trim", - "trimLeft", - "trimRight", - "trimStart", - "trimEnd", - "tc39" - ], - "license": "MIT", - "main": "index.js", - "name": "string.prototype.trimstart", - "repository": { - "type": "git", - "url": "git://github.com/es-shims/String.prototype.trimStart.git" - }, - "scripts": { - "lint": "eslint .", - "postlint": "es-shim-api --bound", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.4" -} diff --git a/build/node_modules/string.prototype.trimstart/polyfill.js b/build/node_modules/string.prototype.trimstart/polyfill.js deleted file mode 100644 index 9adaccd5..00000000 --- a/build/node_modules/string.prototype.trimstart/polyfill.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -var implementation = require('./implementation'); - -module.exports = function getPolyfill() { - if (!String.prototype.trimStart && !String.prototype.trimLeft) { - return implementation; - } - var zeroWidthSpace = '\u200b'; - var trimmed = zeroWidthSpace.trimStart ? zeroWidthSpace.trimStart() : zeroWidthSpace.trimLeft(); - if (trimmed !== zeroWidthSpace) { - return implementation; - } - return String.prototype.trimStart || String.prototype.trimLeft; -}; diff --git a/build/node_modules/string.prototype.trimstart/shim.js b/build/node_modules/string.prototype.trimstart/shim.js deleted file mode 100644 index 5ea6dfdc..00000000 --- a/build/node_modules/string.prototype.trimstart/shim.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var define = require('define-properties'); -var getPolyfill = require('./polyfill'); - -module.exports = function shimTrimStart() { - var polyfill = getPolyfill(); - define( - String.prototype, - { trimStart: polyfill }, - { trimStart: function () { return String.prototype.trimStart !== polyfill; } } - ); - return polyfill; -}; diff --git a/build/node_modules/string.prototype.trimstart/test/implementation.js b/build/node_modules/string.prototype.trimstart/test/implementation.js deleted file mode 100644 index 7fdf95b7..00000000 --- a/build/node_modules/string.prototype.trimstart/test/implementation.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -var implementation = require('../implementation'); -var callBind = require('call-bind'); -var test = require('tape'); -var hasStrictMode = require('has-strict-mode')(); -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', { skip: !hasStrictMode }, function (st) { - /* eslint no-useless-call: 0 */ - st['throws'](function () { implementation.call(undefined); }, TypeError, 'undefined is not an object'); - st['throws'](function () { implementation.call(null); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(callBind(implementation), t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimstart/test/index.js b/build/node_modules/string.prototype.trimstart/test/index.js deleted file mode 100644 index baff6b59..00000000 --- a/build/node_modules/string.prototype.trimstart/test/index.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var trimStart = require('../'); -var test = require('tape'); - -var runTests = require('./tests'); - -test('as a function', function (t) { - t.test('bad array/this value', function (st) { - st['throws'](function () { trimStart(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st['throws'](function () { trimStart(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(trimStart, t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimstart/test/shimmed.js b/build/node_modules/string.prototype.trimstart/test/shimmed.js deleted file mode 100644 index bfdbe486..00000000 --- a/build/node_modules/string.prototype.trimstart/test/shimmed.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -require('../auto'); - -var runTests = require('./tests'); - -var test = require('tape'); -var defineProperties = require('define-properties'); -var callBind = require('call-bind'); -var isEnumerable = Object.prototype.propertyIsEnumerable; -var functionsHaveNames = require('functions-have-names')(); - -test('shimmed', function (t) { - t.equal(String.prototype.trimStart.length, 0, 'String#trimStart has a length of 0'); - t.test('Function name', { skip: !functionsHaveNames }, function (st) { - st.equal((/^(?:trimLeft|trimStart)$/).test(String.prototype.trimStart.name), true, 'String#trimStart has name "trimLeft" or "trimStart"'); - st.end(); - }); - - t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) { - et.equal(false, isEnumerable.call(String.prototype, 'trimStart'), 'String#trimStart is not enumerable'); - et.end(); - }); - - var supportsStrictMode = (function () { return typeof this === 'undefined'; }()); - - t.test('bad string/this value', { skip: !supportsStrictMode }, function (st) { - st['throws'](function () { return String.prototype.trimStart.call(undefined, 'a'); }, TypeError, 'undefined is not an object'); - st['throws'](function () { return String.prototype.trimStart.call(null, 'a'); }, TypeError, 'null is not an object'); - st.end(); - }); - - runTests(callBind(String.prototype.trimStart), t); - - t.end(); -}); diff --git a/build/node_modules/string.prototype.trimstart/test/tests.js b/build/node_modules/string.prototype.trimstart/test/tests.js deleted file mode 100644 index a515158c..00000000 --- a/build/node_modules/string.prototype.trimstart/test/tests.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -module.exports = function (trimStart, t) { - t.test('normal cases', function (st) { - st.equal(trimStart(' \t\na \t\n'), 'a \t\n', 'strips whitespace off the left side'); - st.equal(trimStart('a'), 'a', 'noop when no whitespace'); - - var allWhitespaceChars = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; - st.equal(trimStart(allWhitespaceChars + 'a' + allWhitespaceChars), 'a' + allWhitespaceChars, 'all expected whitespace chars are trimmed'); - - st.end(); - }); - - // see https://codeblog.jonskeet.uk/2014/12/01/when-is-an-identifier-not-an-identifier-attack-of-the-mongolian-vowel-separator/ - var mongolianVowelSeparator = '\u180E'; - t.test('unicode >= 4 && < 6.3', { skip: !(/^\s$/).test(mongolianVowelSeparator) }, function (st) { - st.equal(trimStart(mongolianVowelSeparator + 'a' + mongolianVowelSeparator), 'a' + mongolianVowelSeparator, 'mongolian vowel separator is whitespace'); - st.end(); - }); - - t.test('zero-width spaces', function (st) { - var zeroWidth = '\u200b'; - st.equal(trimStart(zeroWidth), zeroWidth, 'zero width space does not trim'); - st.end(); - }); -}; diff --git a/build/node_modules/string_decoder/package.json b/build/node_modules/string_decoder/package.json index 6cdc4471..04fc9f12 100644 --- a/build/node_modules/string_decoder/package.json +++ b/build/node_modules/string_decoder/package.json @@ -1,36 +1,33 @@ { - "_from": "string_decoder@~1.1.1", - "_id": "string_decoder@1.1.1", + "_from": "string_decoder@^1.1.1", + "_id": "string_decoder@1.3.0", "_inBundle": false, - "_integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "_integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "_location": "/string_decoder", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "string_decoder@~1.1.1", + "raw": "string_decoder@^1.1.1", "name": "string_decoder", "escapedName": "string_decoder", - "rawSpec": "~1.1.1", + "rawSpec": "^1.1.1", "saveSpec": null, - "fetchSpec": "~1.1.1" + "fetchSpec": "^1.1.1" }, "_requiredBy": [ - "/browserify-sign/readable-stream", - "/hash-base/readable-stream", - "/readable-stream", - "/winston/readable-stream" + "/readable-stream" ], - "_resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "_shasum": "9cf1611ba62685d7030ae9e4ba34149c3af03fc8", - "_spec": "string_decoder@~1.1.1", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-1.3.0.tgz", + "_shasum": "42f114594a46cf1a8e30b0a84f56c78c3edac21e", + "_spec": "string_decoder@^1.1.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", "bugs": { "url": "https://github.com/nodejs/string_decoder/issues" }, "bundleDependencies": false, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" }, "deprecated": false, "description": "The string_decoder module from Node core", @@ -40,6 +37,9 @@ "inherits": "^2.0.3", "tap": "~0.4.8" }, + "files": [ + "lib" + ], "homepage": "https://github.com/nodejs/string_decoder", "keywords": [ "string", @@ -58,5 +58,5 @@ "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", "test": "tap test/parallel/*.js && node test/verify-dependencies" }, - "version": "1.1.1" + "version": "1.3.0" } diff --git a/build/node_modules/strip-ansi/index.d.ts b/build/node_modules/strip-ansi/index.d.ts new file mode 100644 index 00000000..907fccc2 --- /dev/null +++ b/build/node_modules/strip-ansi/index.d.ts @@ -0,0 +1,17 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +declare function stripAnsi(string: string): string; + +export = stripAnsi; diff --git a/build/node_modules/strip-ansi/index.js b/build/node_modules/strip-ansi/index.js new file mode 100644 index 00000000..9a593dfc --- /dev/null +++ b/build/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; diff --git a/build/node_modules/strip-ansi/license b/build/node_modules/strip-ansi/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/build/node_modules/strip-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/strip-ansi/package.json b/build/node_modules/strip-ansi/package.json new file mode 100644 index 00000000..8032e8d6 --- /dev/null +++ b/build/node_modules/strip-ansi/package.json @@ -0,0 +1,88 @@ +{ + "_from": "strip-ansi@^6.0.0", + "_id": "strip-ansi@6.0.1", + "_inBundle": false, + "_integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "_location": "/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^6.0.0", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/cliui", + "/string-width", + "/wrap-ansi" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "_shasum": "9e26c63d30f53443e9489495b2105d37b67a85d9", + "_spec": "strip-ansi@^6.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/cliui", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "deprecated": false, + "description": "Strip ANSI escape codes from a string", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.10.0", + "xo": "^0.25.3" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "6.0.1" +} diff --git a/build/node_modules/strip-ansi/readme.md b/build/node_modules/strip-ansi/readme.md new file mode 100644 index 00000000..7c4b56d4 --- /dev/null +++ b/build/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## strip-ansi for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + diff --git a/build/node_modules/strip-json-comments/index.d.ts b/build/node_modules/strip-json-comments/index.d.ts new file mode 100644 index 00000000..28ba3c8a --- /dev/null +++ b/build/node_modules/strip-json-comments/index.d.ts @@ -0,0 +1,36 @@ +declare namespace stripJsonComments { + interface Options { + /** + Replace comments with whitespace instead of stripping them entirely. + + @default true + */ + readonly whitespace?: boolean; + } +} + +/** +Strip comments from JSON. Lets you use comments in your JSON files! + +It will replace single-line comments `//` and multi-line comments `/**\/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +@param jsonString - Accepts a string with JSON. +@returns A JSON string without comments. + +@example +``` +const json = `{ + // Rainbows + "unicorn": "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` +*/ +declare function stripJsonComments( + jsonString: string, + options?: stripJsonComments.Options +): string; + +export = stripJsonComments; diff --git a/build/node_modules/strip-json-comments/index.js b/build/node_modules/strip-json-comments/index.js new file mode 100644 index 00000000..bb00b38b --- /dev/null +++ b/build/node_modules/strip-json-comments/index.js @@ -0,0 +1,77 @@ +'use strict'; +const singleComment = Symbol('singleComment'); +const multiComment = Symbol('multiComment'); +const stripWithoutWhitespace = () => ''; +const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' '); + +const isEscaped = (jsonString, quotePosition) => { + let index = quotePosition - 1; + let backslashCount = 0; + + while (jsonString[index] === '\\') { + index -= 1; + backslashCount += 1; + } + + return Boolean(backslashCount % 2); +}; + +module.exports = (jsonString, options = {}) => { + if (typeof jsonString !== 'string') { + throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``); + } + + const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace; + + let insideString = false; + let insideComment = false; + let offset = 0; + let result = ''; + + for (let i = 0; i < jsonString.length; i++) { + const currentCharacter = jsonString[i]; + const nextCharacter = jsonString[i + 1]; + + if (!insideComment && currentCharacter === '"') { + const escaped = isEscaped(jsonString, i); + if (!escaped) { + insideString = !insideString; + } + } + + if (insideString) { + continue; + } + + if (!insideComment && currentCharacter + nextCharacter === '//') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = singleComment; + i++; + } else if (insideComment === singleComment && currentCharacter + nextCharacter === '\r\n') { + i++; + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + continue; + } else if (insideComment === singleComment && currentCharacter === '\n') { + insideComment = false; + result += strip(jsonString, offset, i); + offset = i; + } else if (!insideComment && currentCharacter + nextCharacter === '/*') { + result += jsonString.slice(offset, i); + offset = i; + insideComment = multiComment; + i++; + continue; + } else if (insideComment === multiComment && currentCharacter + nextCharacter === '*/') { + i++; + insideComment = false; + result += strip(jsonString, offset, i + 1); + offset = i + 1; + continue; + } + } + + return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset)); +}; diff --git a/build/node_modules/strip-json-comments/license b/build/node_modules/strip-json-comments/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/strip-json-comments/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/strip-json-comments/package.json b/build/node_modules/strip-json-comments/package.json new file mode 100644 index 00000000..c1af8bce --- /dev/null +++ b/build/node_modules/strip-json-comments/package.json @@ -0,0 +1,79 @@ +{ + "_from": "strip-json-comments@3.1.1", + "_id": "strip-json-comments@3.1.1", + "_inBundle": false, + "_integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "_location": "/strip-json-comments", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "strip-json-comments@3.1.1", + "name": "strip-json-comments", + "escapedName": "strip-json-comments", + "rawSpec": "3.1.1", + "saveSpec": null, + "fetchSpec": "3.1.1" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "_shasum": "31f1281b3832630434831c310c01cccda8cbe006", + "_spec": "strip-json-comments@3.1.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-json-comments/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Strip comments from JSON. Lets you use comments in your JSON files!", + "devDependencies": { + "ava": "^1.4.1", + "matcha": "^0.7.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/strip-json-comments#readme", + "keywords": [ + "json", + "strip", + "comments", + "remove", + "delete", + "trim", + "multiline", + "parse", + "config", + "configuration", + "settings", + "util", + "env", + "environment", + "jsonc" + ], + "license": "MIT", + "name": "strip-json-comments", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-json-comments.git" + }, + "scripts": { + "bench": "matcha benchmark.js", + "test": "xo && ava && tsd" + }, + "version": "3.1.1" +} diff --git a/build/node_modules/strip-json-comments/readme.md b/build/node_modules/strip-json-comments/readme.md new file mode 100644 index 00000000..cc542e50 --- /dev/null +++ b/build/node_modules/strip-json-comments/readme.md @@ -0,0 +1,78 @@ +# strip-json-comments [![Build Status](https://travis-ci.com/sindresorhus/strip-json-comments.svg?branch=master)](https://travis-ci.com/github/sindresorhus/strip-json-comments) + +> Strip comments from JSON. Lets you use comments in your JSON files! + +This is now possible: + +```js +{ + // Rainbows + "unicorn": /* ❤ */ "cake" +} +``` + +It will replace single-line comments `//` and multi-line comments `/**/` with whitespace. This allows JSON error positions to remain as close as possible to the original source. + +Also available as a [Gulp](https://github.com/sindresorhus/gulp-strip-json-comments)/[Grunt](https://github.com/sindresorhus/grunt-strip-json-comments)/[Broccoli](https://github.com/sindresorhus/broccoli-strip-json-comments) plugin. + +## Install + +``` +$ npm install strip-json-comments +``` + +## Usage + +```js +const json = `{ + // Rainbows + "unicorn": /* ❤ */ "cake" +}`; + +JSON.parse(stripJsonComments(json)); +//=> {unicorn: 'cake'} +``` + +## API + +### stripJsonComments(jsonString, options?) + +#### jsonString + +Type: `string` + +Accepts a string with JSON and returns a string without comments. + +#### options + +Type: `object` + +##### whitespace + +Type: `boolean`\ +Default: `true` + +Replace comments with whitespace instead of stripping them entirely. + +## Benchmark + +``` +$ npm run bench +``` + +## Related + +- [strip-json-comments-cli](https://github.com/sindresorhus/strip-json-comments-cli) - CLI for this module +- [strip-css-comments](https://github.com/sindresorhus/strip-css-comments) - Strip comments from CSS + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            diff --git a/build/node_modules/superagent/.travis.yml b/build/node_modules/superagent/.travis.yml deleted file mode 100644 index cb6acdc3..00000000 --- a/build/node_modules/superagent/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -sudo: false -language: node_js -node_js: - - "8" - - "6" - - "4" - -env: - global: - - SAUCE_USERNAME='shtylman-superagent' - - SAUCE_ACCESS_KEY='39a45464-cb1d-4b8d-aa1f-83c7c04fa673' - -matrix: - include: - - node_js: "8" - env: BROWSER=1 diff --git a/build/node_modules/superagent/.zuul.yml b/build/node_modules/superagent/.zuul.yml deleted file mode 100644 index 7d5899c8..00000000 --- a/build/node_modules/superagent/.zuul.yml +++ /dev/null @@ -1,14 +0,0 @@ -ui: mocha-bdd -server: ./test/support/server.js -tunnel_host: http://focusaurus.com -browsers: - - name: chrome - version: latest - - name: firefox - version: latest - - name: safari - version: latest - - name: iphone - version: latest - - name: ie - version: 9..latest diff --git a/build/node_modules/superagent/Contributing.md b/build/node_modules/superagent/Contributing.md deleted file mode 100644 index 1eca5926..00000000 --- a/build/node_modules/superagent/Contributing.md +++ /dev/null @@ -1,7 +0,0 @@ -When submitting a PR, your chance of acceptance increases if you do the following: - -* Code style is consistent with existing in the file. -* Tests are passing (client and server). -* You add a test for the failing issue you are fixing. -* Code changes are focused on the area of discussion. -* Do not rebuild the distribution files or increment version numbers. diff --git a/build/node_modules/superagent/HISTORY.md b/build/node_modules/superagent/HISTORY.md new file mode 100644 index 00000000..0eef03c9 --- /dev/null +++ b/build/node_modules/superagent/HISTORY.md @@ -0,0 +1,692 @@ +# This HISTORY log is deprecated + +Please see [GitHub releases page](https://github.com/visionmedia/superagent/releases) for the current changelog. + +# 4.1.0 (2018-12-26) + + * `.connect()` IP/DNS override option (Kornel) + * `.trustLocalhost()` option for allowing broken HTTPS on `localhost` + * `.abort()` used with promises rejects the promise. + +# 4.0.0 (2018-11-17) + +## Breaking changes + +* Node.js v4 has reached it's end of life, so we no longer support it. It's v6+ or later. We recommend Node.js 10. +* We now use ES6 in the browser code, too. + * If you're using Browserify or Webpack to package code for Internet Explorer, you will also have to use Babel. + * The pre-built node_modules/superagent.js is still ES5-compatible. +* `.end(…)` returns `undefined` instead of the request. If you need the request object after calling `.end()` (and you probably don't), save it in a variable and call `request.end(…)`. Consider not using `.end()` at all, and migrating to promises by calling `.then()` instead. +* In Node, responses with unknown MIME type are buffered by default. To get old behavior, if you use custom _unbuffered_ parsers, add `.buffer(false)` to requests or set `superagent.buffer[yourMimeType] = false`. +* Invalid uses of `.pipe()` throw. + + +## Minor changes + +* Throw if `req.abort().end()` is called +* Throw if using unsupported mix of send and field +* Reject `.end()` promise on all error events (Kornel Lesiński) +* Set `https.servername` from the `Host` header (Kornel Lesiński) +* Leave backticks unencoded in query strings where possible (Ethan Resnick) +* Update node-mime to 2.x (Alexey Kucherenko) +* Allow default buffer settings based on response-type (shrey) +* `response.buffered` is more accurate. + +# 3.8.3 (2018-04-29) + +* Add flags for 201 & 422 responses (Nikhil Fadnis) +* Emit progress event while uploading Node `Buffer` via send method (Sergey Akhalkov) +* Fixed setting correct cookies for redirects (Damien Clark) +* Replace .catch with ['catch'] for IE9 Support (Miguel Stevens) + +# 3.8.2 (2017-12-09) + +* Fixed handling of exceptions thrown from callbacks +* Stricter matching of `+json` MIME types. + +# 3.8.1 (2017-11-08) + +* Clear authorization header on cross-domain redirect + +# 3.8.0 + +* Added support for "globally" defined headers and event handlers via `superagent.agent()`. It now remembers default settings for all its requests. +* Added optional callback to `.retry()` (Alexander Murphy) +* Unified auth args handling in node/browser (Edmundo Alvarez) +* Fixed error handling in zlib pipes (Kornel) +* Documented that 3xx status codes are errors (Mickey Reiss) + +# 3.7.0 (2017-10-17) + +* Limit maximum response size. Prevents zip bombs (Kornel) +* Catch and pass along errors in `.ok()` callback (Jeremy Ruppel) +* Fixed parsing of XHR headers without a newline (nsf) + +# 3.6.2 (2017-10-02) + +* Upgrade MIME type dependency to a newer, secure version +* Recognize PDF MIME as binary +* Fix for error in subsequent require() calls (Steven de Salas) + +# 3.6.0 (2017-08-20) + +* Support disabling TCP_NODELAY option ([#1240](https://github.com/visionmedia/superagent/issues/1240)) (xiamengyu) +* Send payload in query string for GET and HEAD shorthand API (Peter Lyons) +* Support passphrase with pfx certificate (Paul Westerdale (ABRS Limited)) +* Documentation improvements (Peter Lyons) +* Fixed duplicated query string params ([#1200](https://github.com/visionmedia/superagent/issues/1200)) (Kornel) + +# 3.5.1 (2017-03-18) + +* Allow crossDomain errors to be retried ([#1194](https://github.com/visionmedia/superagent/issues/1194)) (Michael Olson) +* Read responseType property from the correct object (Julien Dupouy) +* Check for ownProperty before adding header (Lucas Vieira) + +# 3.5.0 (2017-02-23) + +* Add errno to distinguish between request timeout and body download timeout ([#1184](https://github.com/visionmedia/superagent/issues/1184)) (Kornel Lesiński) +* Warn about bogus timeout options ([#1185](https://github.com/visionmedia/superagent/issues/1185)) (Kornel Lesiński) + +# 3.4.4 (2017-02-17) + +* Treat videos like images (Kornel Lesiński) +* Avoid renaming module (Kornel Lesiński) + +# 3.4.3 (2017-02-14) + +* Fixed being able to define own parsers when their mime type starts with `text/` (Damien Clark) +* `withCredentials(false)` (Andy Woods) +* Use `formData.on` instead of `.once` (Kornel Lesiński) +* Ignore `attach("file",null)` (Kornel Lesiński) + +# 3.4.1 (2017-01-29) + +* Allow `retry()` and `retry(0)` (Alexander Pope) +* Allow optional body/data in DELETE requests (Alpha Shuro) +* Fixed query string on retried requests (Kornel Lesiński) + +# 3.4.0 (2017-01-25) + +* New `.retry(n)` method and `err.retries` (Alexander Pope) +* Docs for HTTPS request (Jun Wan Goh) + +# 3.3.1 (2016-12-17) + +* Fixed "double callback bug" warning on timeouts of gzipped responses + +# 3.3.0 (2016-12-14) + +* Added `.ok(callback)` that allows customizing which responses are errors (Kornel Lesiński) +* Added `.responseType()` to Node version (Kornel Lesiński) +* Added `.parse()` to browser version (jakepearson) +* Fixed parse error when using `responseType('blob')` (Kornel Lesiński) + +# 3.2.0 (2016-12-11) + +* Added `.timeout({response:ms})`, which allows limiting maximum response time independently from total download time (Kornel Lesiński) +* Added warnings when `.end()` is called more than once (Kornel Lesiński) +* Added `response.links` to browser version (Lukas Eipert) +* `btoa` is no longer required in IE9 (Kornel Lesiński) +* Fixed `.sortQuery()` on URLs without query strings (Kornel Lesiński) +* Refactored common response code into `ResponseBase` (Lukas Eipert) + +# 3.1.0 (2016-11-28) + +* Added `.sortQuery()` (vicanso) +* Added support for arrays and bools in `.field()` (Kornel Lesiński) +* Made `superagent.Request` subclassable without need to patch all static methods (Kornel Lesiński) + +# 3.0.0 (2016-11-19) + +* Dropped support for Node 0.x. Please upgrade to at least Node 4. +* Dropped support for componentjs (Damien Caselli) +* Removed deprecated `.part()`/`superagent.Part` APIs. +* Removed unreliable `.body` property on internal response object used by unbuffered parsers. + Note: the normal `response.body` is unaffected. +* Multiple `.send()` calls mixing `Buffer`/`Blob` and JSON data are not possible and will now throw instead of messing up the data. +* Improved `.send()` data object type check (Fernando Mendes) +* Added common prototype for Node and browser versions (Andreas Helmberger) +* Added `http+unix:` schema to support Unix sockets (Yuki KAN) +* Added full `attach` options parameter in the Node version (Lapo Luchini) +* Added `pfx` TLS option with new `pfx()` method. (Reid Burke) +* Internally changed `.on` to `.once` to prevent possible memory leaks (Matt Blair) +* Made all errors reported as an event (Kornel Lesiński) + +# 2.3.0 (2016-09-20) + +* Enabled `.field()` to handle objects (Affan Shahid) +* Added authentication with client certificates (terusus) +* Added `.catch()` for more Promise-like interface (Maxim Samoilov, Kornel Lesiński) +* Silenced errors from incomplete gzip streams for compatibility with web browsers (Kornel Lesiński) +* Fixed `event.direction` in uploads (Kornel Lesiński) +* Fixed returned value of overwritten response object's `on()` method (Juan Dopazo) + +# 2.2.0 (2016-08-13) + +* Added `timedout` property to node Request instance (Alexander Pope) +* Unified `null` querystring values in node and browser environments. (George Chung) + +# 2.1.0 (2016-06-14) + +* Refactored async parsers. Now the `end` callback waits for async parsers to finish (Kornel Lesiński) +* Errors thrown in `.end()` callback don't cause the callback to be called twice (Kornel Lesiński) +* Added `headers` to `toJSON()` (Tao) + +# 2.0.0 (2016-05-29) + + +## Breaking changes + +Breaking changes are in rarely used functionality, so we hope upgrade will be smooth for most users. + +* Browser: The `.parse()` method has been renamed to `.serialize()` for consistency with NodeJS version. +* Browser: Query string keys without a value used to be parsed as `'undefined'`, now their value is `''` (empty string) (shura, Kornel Lesiński). +* NodeJS: The `redirect` event is called after new query string and headers have been set and is allowed to override the request URL (Kornel Lesiński) +* `.then()` returns a real `Promise`. Note that use of superagent with promises now requires a global `Promise` object. + If you target Internet Explorer or Node 0.10, you'll need `require('es6-promise').polyfill()` or similar. +* Upgraded all dependencies (Peter Lyons) +* Renamed properties documented as `@api private` to have `_prefixed` names (Kornel Lesiński) + + +## Probably not breaking changes: + +* Extracted common functions to request-base (Peter Lyons) +* Fixed race condition in pipe tests (Peter Lyons) +* Handle `FormData` error events (scriptype) +* Fixed wrong jsdoc of Request#attach (George Chung) +* Updated and improved tests (Peter Lyons) +* `request.head()` supports `.redirects(5)` call (Kornel Lesiński) +* `response` event is also emitted when using `.pipe()` + +# 1.8.2 (2016-03-20) + +* Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton) +* Handling of FormData error events (scriptype) +* Fixed parsing of `vnd+json` MIME types (Kornel Lesiński) +* Aliased browser implementation of `.parse()` as `.serialize()` for forward compatibility + +# 1.8.1 (2016-03-14) + +* Fixed form-data incompatibility with IE9 + +# 1.8.0 (2016-03-09) + +* Extracted common code into request-base class (Peter Lyons) + * It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking! +* Added option `{type:'auto'}` to `auth` method, which enables browser-native auth types (Jungle, Askar Yusupov) +* Added `responseType()` to set XHR `responseType` (chris) +* Switched to form-data for browserify-compatible `FormData` (Peter Lyons) +* Added `statusCode` to error response when JSON response is malformed (mattdell) +* Prevented TCP port conflicts in all tests (Peter Lyons) +* Updated form-data dependency + +# 1.7.2 (2016-01-26) + +* Fix case-sensitivity of header fields introduced by [`a4ddd6a`](https://github.com/visionmedia/superagent/commit/a4ddd6a). (Edward J. Jinotti) +* bump extend dependency, as former version did not contain any license information (Lukas Eipert) + +# 1.7.1 (2016-01-21) + +* Fixed a conflict with express when using npm 3.x (Glenn) +* Fixed redirects after a multipart/form-data POST request (cyclist2) + +# 1.7.0 (2016-01-18) + +* When attaching files, read default filename from the `File` object (JD Isaacks) +* Add `direction` property to `progress` events (Joseph Dykstra) +* Update component-emitter & formidable (Kornel Lesiński) +* Don't re-encode query string needlessly (Ruben Verborgh) +* ensure querystring is appended when doing `stream.pipe(request)` (Keith Grennan) +* change set header function, not call `this.request()` until call `this.end()` (vicanso) +* Add no-op `withCredentials` to Node API (markdalgleish) +* fix `delete` breaking on ie8 (kenjiokabe) +* Don't let request error override responses (Clay Reimann) +* Increased number of tests shared between node and client (Kornel Lesiński) + +# 1.6.0/1.6.1 (2015-12-09) + +* avoid misleading CORS error message +* added 'progress' event on file/form upload in Node (Olivier Lalonde) +* return raw response if the response parsing fails (Rei Colina) +* parse content-types ending with `+json` as JSON (Eiryyy) +* fix to avoid throwing errors on aborted requests (gjurgens) +* retain cookies on redirect when hosts match (Tom Conroy) +* added Bower manifest (Johnny Freeman) +* upgrade to latest cookiejar (Andy Burke) + +# 1.5.0 (2015-11-30) + +* encode array values as `key=1&key=2&key=3` etc... (aalpern, Davis Kim) +* avoid the error which is omitted from 'socket hang up' +* faster JSON parsing, handling of zlib errors (jbellenger) +* fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov) +* alias `del()` method as `delete()` (Aaron Krause) +* revert Request#parse since it was actually Response#parse + +# 1.4.0 (2015-09-14) + +* add Request#parse method to client library +* add missing statusCode in client response +* don't apply JSON heuristics if a valid parser is found +* fix detection of root object for webworkers + +# 1.3.0 (2015-08-05) + +* fix incorrect content-length of data set to buffer +* serialize request data takes into account charsets +* add basic promise support via a `then` function + +# 1.2.0 (2015-04-13) + +* add progress events to downlodas +* make usable in webworkers +* add support for 308 redirects +* update node-form-data dependency +* update to work in react native +* update node-mime dependency + +# 1.1.0 (2015-03-13) + +* Fix responseType checks without xhr2 and ie9 tests (rase-) +* errors have .status and .response fields if applicable (defunctzombie) +* fix end callback called before saving cookies (rase-) + +# 1.0.0 / 2015-03-08 + +* All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the `res` object. See [#283](https://github.com/visionmedia/superagent/issues/283). +* keep timeouts intact across redirects (hopkinsth) +* handle falsy json values (themaarten) +* fire response events in browser version (Schoonology) +* getXHR exported in client version (KidsKilla) +* remove arity check on `.end()` callbacks (defunctzombie) +* avoid setting content-type for host objects (rexxars) +* don't index array strings in querystring (travisjeffery) +* fix pipe() with redirects (cyrilis) +* add xhr2 file download (vstirbu) +* set default response type to text/plain if not specified (warrenseine) + +# 0.21.0 / 2014-11-11 + +* Trim text before parsing json (gjohnson) +* Update tests to express 4 (gaastonsr) +* Prevent double callback when error is thrown (pgn-vole) +* Fix missing clearTimeout (nickdima) +* Update debug (TooTallNate) + +# 0.20.0 / 2014-10-02 + +* Add toJSON() to request and response instances. (yields) +* Prevent HEAD requests from getting parsed. (gjohnson) +* Update debug. (TooTallNate) + +# 0.19.1 / 2014-09-24 + +* Fix basic auth issue when password is falsey value. (gjohnson) + +# 0.19.0 / 2014-09-24 + +* Add unset() to browser. (shesek) +* Prefer XHR over ActiveX. (omeid) +* Catch parse errors. (jacwright) +* Update qs dependency. (wercker) +* Add use() to node. (Financial-Times) +* Add response text to errors. (yields) +* Don't send empty cookie headers. (undoZen) +* Don't parse empty response bodies. (DveMac) +* Use hostname when setting cookie host. (prasunsultania) + +# 0.18.2 / 2014-07-12 + +* Handle parser errors. (kof) +* Ensure not to use default parsers when there is a user defined one. (kof) + +# 0.18.1 / 2014-07-05 + +* Upgrade cookiejar dependency (juanpin) +* Support image mime types (nebulade) +* Make .agent chainable (kof) +* Upgrade debug (TooTallNate) +* Fix docs (aheckmann) + +# 0.18.0 / 2014-04-29 + +* Use "form-data" module for the multipart/form-data implementation. (TooTallNate) +* Add basic `field()` and `attach()` functions for HTML5 FormData. (TooTallNate) +* Deprecate `part()`. (TooTallNate) +* Set default user-agent header. (bevacqua) +* Add `unset()` method for removing headers. (bevacqua) +* Update cookiejar. (missinglink) +* Fix response error formatting. (shesek) + +# 0.17.0 / 2014-03-06 + +* supply uri malformed error to the callback (yields) +* add request event (yields) +* allow simple auth (yields) +* add request event (yields) +* switch to component/reduce (visionmedia) +* fix part content-disposition (mscdex) +* add browser testing via zuul (defunctzombie) +* adds request.use() (johntron) + +# 0.16.0 / 2014-01-07 + +* remove support for 0.6 (superjoe30) +* fix CORS withCredentials (wejendorp) +* add "test" script (superjoe30) +* add request .accept() method (nickl-) +* add xml to mime types mappings (nickl-) +* fix parse body error on HEAD requests (gjohnson) +* fix documentation typos (matteofigus) +* fix content-type + charset (bengourley) +* fix null values on query parameters (cristiandouce) + +# 0.15.7 / 2013-10-19 + +* pin should.js to 1.3.0 due to breaking change in 2.0.x +* fix browserify regression + +# 0.15.5 / 2013-10-09 + +* add browser field to support browserify +* fix .field() value number support + +# 0.15.4 / 2013-07-09 + +* node: add a Request#agent() function to set the http Agent to use + +# 0.15.3 / 2013-07-05 + +* fix .pipe() unzipping on more recent nodes. Closes [#240](https://github.com/visionmedia/superagent/issues/240) +* fix passing an empty object to .query() no longer appends "?" +* fix formidable error handling +* update formidable + +# 0.15.2 / 2013-07-02 + +* fix: emit 'end' when piping. + +# 0.15.1 / 2013-06-26 + +* add try/catch around parseLinks + +# 0.15.0 / 2013-06-25 + +* make `Response#toError()` have a more meaningful `message` + +# 0.14.9 / 2013-06-15 + +* add debug()s to the node client +* add .abort() method to node client + +# 0.14.8 / 2013-06-13 + +* set .agent = false always +* remove X-Requested-With. Closes [#189](https://github.com/visionmedia/superagent/issues/189) + +# 0.14.7 / 2013-06-06 + +* fix unzip error handling + +# 0.14.6 / 2013-05-23 + +* fix HEAD unzip bug + +# 0.14.5 / 2013-05-23 + +* add flag to ensure the callback is **never** invoked twice + +# 0.14.4 / 2013-05-22 + +* add superagent.js build output +* update qs +* update emitter-component +* revert "add browser field to support browserify" see [GH-221](https://github.com/visionmedia/superagent/issues/221) + +# 0.14.3 / 2013-05-18 + +* add browser field to support browserify + +# 0.14.2/ 2013-05-07 + +* add host object check to fix serialization of File/Blobs etc as json + +# 0.14.1 / 2013-04-09 + +* update qs + +# 0.14.0 / 2013-04-02 + +* add client-side basic auth +* fix retaining of .set() header field case + +# 0.13.0 / 2013-03-13 + +* add progress events to client +* add simple example +* add res.headers as alias of res.header for browser client +* add res.get(field) to node/client + +# 0.12.4 / 2013-02-11 + +* fix get content-type even if can't get other headers in firefox. fixes [#181](https://github.com/visionmedia/superagent/issues/181) + +# 0.12.3 / 2013-02-11 + +* add quick "progress" event support + +# 0.12.2 / 2013-02-04 + +* add test to check if response acts as a readable stream +* add ReadableStream in the Response prototype. +* add test to assert correct redirection when the host changes in the location header. +* add default Accept-Encoding. Closes [#155](https://github.com/visionmedia/superagent/issues/155) +* fix req.pipe() return value of original stream for node parity. Closes [#171](https://github.com/visionmedia/superagent/issues/171) +* remove the host header when cleaning headers to properly follow the redirection. + +# 0.12.1 / 2013-01-10 + +* add x-domain error handling + +# 0.12.0 / 2013-01-04 + +* add header persistence on redirects + +# 0.11.0 / 2013-01-02 + +* add .error Error object. Closes [#156](https://github.com/visionmedia/superagent/issues/156) +* add forcing of res.text removal for FF HEAD responses. Closes [#162](https://github.com/visionmedia/superagent/issues/162) +* add reduce component usage. Closes [#90](https://github.com/visionmedia/superagent/issues/90) +* move better-assert dep to development deps + +# 0.10.0 / 2012-11-14 + +* add req.timeout(ms) support for the client + +# 0.9.10 / 2012-11-14 + +* fix client-side .query(str) support + +# 0.9.9 / 2012-11-14 + +* add .parse(fn) support +* fix socket hangup with dates in querystring. Closes [#146](https://github.com/visionmedia/superagent/issues/146) +* fix socket hangup "error" event when a callback of arity 2 is provided + +# 0.9.8 / 2012-11-03 + +* add emission of error from `Request#callback()` +* add a better fix for nodes weird socket hang up error +* add PUT/POST/PATCH data support to client short-hand functions +* add .license property to component.json +* change client portion to build using component(1) +* fix GET body support [guille] + +# 0.9.7 / 2012-10-19 + +* fix `.buffer()` `res.text` when no parser matches + +# 0.9.6 / 2012-10-17 + +* change: use `this` when `window` is undefined +* update to new component spec [juliangruber] +* fix emission of "data" events for compressed responses without encoding. Closes [#125](https://github.com/visionmedia/superagent/issues/125) + +# 0.9.5 / 2012-10-01 + +* add field name to .attach() +* add text "parser" +* refactor isObject() +* remove wtf isFunction() helper + +# 0.9.4 / 2012-09-20 + +* fix `Buffer` responses [TooTallNate] +* fix `res.type` when a "type" param is present [TooTallNate] + +# 0.9.3 / 2012-09-18 + +* remove **GET** `.send()` == `.query()` special-case (**API** change !!!) + +# 0.9.2 / 2012-09-17 + +* add `.aborted` prop +* add `.abort()`. Closes [#115](https://github.com/visionmedia/superagent/issues/115) + +# 0.9.1 / 2012-09-07 + +* add `.forbidden` response property +* add component.json +* change emitter-component to 0.0.5 +* fix client-side tests + +# 0.9.0 / 2012-08-28 + +* add `.timeout(ms)`. Closes [#17](https://github.com/visionmedia/superagent/issues/17) + +# 0.8.2 / 2012-08-28 + +* fix pathname relative redirects. Closes [#112](https://github.com/visionmedia/superagent/issues/112) + +# 0.8.1 / 2012-08-21 + +* fix redirects when schema is specified + +# 0.8.0 / 2012-08-19 + +* add `res.buffered` flag +* add buffering of text/\*, json and forms only by default. Closes [#61](https://github.com/visionmedia/superagent/issues/61) +* add `.buffer(false)` cancellation +* add cookie jar support [hunterloftis] +* add agent functionality [hunterloftis] + +# 0.7.0 / 2012-08-03 + +* allow `query()` to be called after the internal `req` has been created [tootallnate] + +# 0.6.0 / 2012-07-17 + +* add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" + +# 0.5.1 / 2012-07-16 + +* add "methods" dep +* add `.end()` arity check to node callbacks +* fix unzip support due to weird node internals + +# 0.5.0 / 2012-06-16 + +* Added "Link" response header field parsing, exposing `res.links` + +# 0.4.3 / 2012-06-15 + +* Added 303, 305 and 307 as redirect status codes [slaskis] +* Fixed passing an object as the url + +# 0.4.2 / 2012-06-02 + +* Added component support +* Fixed redirect data + +# 0.4.1 / 2012-04-13 + +* Added HTTP PATCH support +* Fixed: GET / HEAD when following redirects. Closes [#86](https://github.com/visionmedia/superagent/issues/86) +* Fixed Content-Length detection for multibyte chars + +# 0.4.0 / 2012-03-04 + +* Added `.head()` method [browser]. Closes [#78](https://github.com/visionmedia/superagent/issues/78) +* Added `make test-cov` support +* Added multipart request support. Closes [#11](https://github.com/visionmedia/superagent/issues/11) +* Added all methods that node supports. Closes [#71](https://github.com/visionmedia/superagent/issues/71) +* Added "response" event providing a Response object. Closes [#28](https://github.com/visionmedia/superagent/issues/28) +* Added `.query(obj)`. Closes [#59](https://github.com/visionmedia/superagent/issues/59) +* Added `res.type` (browser). Closes [#54](https://github.com/visionmedia/superagent/issues/54) +* Changed: default `res.body` and `res.files` to {} +* Fixed: port existing query-string fix (browser). Closes [#57](https://github.com/visionmedia/superagent/issues/57) + +# 0.3.0 / 2012-01-24 + +* Added deflate/gzip support [guillermo] +* Added `res.type` (Content-Type void of params) +* Added `res.statusCode` to mirror node +* Added `res.headers` to mirror node +* Changed: parsers take callbacks +* Fixed optional schema support. Closes [#49](https://github.com/visionmedia/superagent/issues/49) + +# 0.2.0 / 2012-01-05 + +* Added url auth support +* Added `.auth(username, password)` +* Added basic auth support [node]. Closes [#41](https://github.com/visionmedia/superagent/issues/41) +* Added `make test-docs` +* Added guillermo's EventEmitter. Closes [#16](https://github.com/visionmedia/superagent/issues/16) +* Removed `Request#data()` for SS, renamed to `send()` +* Removed `Request#data()` from client, renamed to `send()` +* Fixed array support. [browser] +* Fixed array support. Closes [#35](https://github.com/visionmedia/superagent/issues/35) [node] +* Fixed `EventEmitter#emit()` + +# 0.1.3 / 2011-10-25 + +* Added error to callback +* Bumped node dep for 0.5.x + +# 0.1.2 / 2011-09-24 + +* Added markdown documentation +* Added `request(url[, fn])` support to the client +* Added `qs` dependency to package.json +* Added options for `Request#pipe()` +* Added support for `request(url, callback)` +* Added `request(url)` as shortcut for `request.get(url)` +* Added `Request#pipe(stream)` +* Added inherit from `Stream` +* Added multipart support +* Added ssl support (node) +* Removed Content-Length field from client +* Fixed buffering, `setEncoding()` to utf8 [reported by stagas] +* Fixed "end" event when piping + +# 0.1.1 / 2011-08-20 + +* Added `res.redirect` flag (node) +* Added redirect support (node) +* Added `Request#redirects(n)` (node) +* Added `.set(object)` header field support +* Fixed `Content-Length` support + +# 0.1.0 / 2011-08-09 + +* Added support for multiple calls to `.data()` +* Added support for `.get(uri, obj)` +* Added GET `.data()` querystring support +* Added IE{6,7,8} support [alexyoung] + +# 0.0.1 / 2011-08-05 + +* Initial commit + + + diff --git a/build/node_modules/superagent/History.md b/build/node_modules/superagent/History.md deleted file mode 100644 index 2c7601b2..00000000 --- a/build/node_modules/superagent/History.md +++ /dev/null @@ -1,719 +0,0 @@ - -# 3.8.3 (2018-04-29) - - * Add flags for 201 & 422 responses (Nikhil Fadnis) - * Emit progress event while uploading Node `Buffer` via send method (Sergey Akhalkov) - * Fixed setting correct cookies for redirects (Damien Clark) - * Replace .catch with ['catch'] for IE9 Support (Miguel Stevens) - -# 3.8.2 (2017-12-09) - - * Fixed handling of exceptions thrown from callbacks - * Stricter matching of `+json` MIME types. - -# 3.8.1 (2017-11-08) - - * Clear authorization header on cross-domain redirect - -# 3.8.0 - - * Added support for "globally" defined headers and event handlers via `superagent.agent()`. It now remembers default settings for all its requests. - * Added optional callback to `.retry()` (Alexander Murphy) - * Unified auth args handling in node/browser (Edmundo Alvarez) - * Fixed error handling in zlib pipes (Kornel) - * Documented that 3xx status codes are errors (Mickey Reiss) - -# 3.7.0 (2017-10-17) - - * Limit maximum response size. Prevents zip bombs (Kornel) - * Catch and pass along errors in `.ok()` callback (Jeremy Ruppel) - * Fixed parsing of XHR headers without a newline (nsf) - -# 3.6.2 (2017-10-02) - - * Upgrade MIME type dependency to a newer, secure version - * Recognize PDF MIME as binary - * Fix for error in subsequent require() calls (Steven de Salas) - -# 3.6.0 (2017-08-20) - - * Support disabling TCP_NODELAY option (#1240) (xiamengyu) - * Send payload in query string for GET and HEAD shorthand API (Peter Lyons) - * Support passphrase with pfx certificate (Paul Westerdale (ABRS Limited)) - * Documentation improvements (Peter Lyons) - * Fixed duplicated query string params (#1200) (Kornel) - -# 3.5.1 (2017-03-18) - - * Allow crossDomain errors to be retried (#1194) (Michael Olson) - * Read responseType property from the correct object (Julien Dupouy) - * Check for ownProperty before adding header (Lucas Vieira) - -# 3.5.0 (2017-02-23) - - * Add errno to distinguish between request timeout and body download timeout (#1184) (Kornel Lesiński) - * Warn about bogus timeout options (#1185) (Kornel Lesiński) - -# 3.4.4 (2017-02-17) - - * Treat videos like images (Kornel Lesiński) - * Avoid renaming module (Kornel Lesiński) - -# 3.4.3 (2017-02-14) - - * Fixed being able to define own parsers when their mime type starts with `text/` (Damien Clark) - * `withCredentials(false)` (Andy Woods) - * Use `formData.on` instead of `.once` (Kornel Lesiński) - * Ignore `attach("file",null)` (Kornel Lesiński) - -# 3.4.1 (2017-01-29) - - * Allow `retry()` and `retry(0)` (Alexander Pope) - * Allow optional body/data in DELETE requests (Alpha Shuro) - * Fixed query string on retried requests (Kornel Lesiński) - -# 3.4.0 (2017-01-25) - - * New `.retry(n)` method and `err.retries` (Alexander Pope) - * Docs for HTTPS request (Jun Wan Goh) - -# 3.3.1 (2016-12-17) - - * Fixed "double callback bug" warning on timeouts of gzipped responses - -# 3.3.0 (2016-12-14) - - * Added `.ok(callback)` that allows customizing which responses are errors (Kornel Lesiński) - * Added `.responseType()` to Node version (Kornel Lesiński) - * Added `.parse()` to browser version (jakepearson) - * Fixed parse error when using `responseType('blob')` (Kornel Lesiński) - -# 3.2.0 (2016-12-11) - - * Added `.timeout({response:ms})`, which allows limiting maximum response time independently from total download time (Kornel Lesiński) - * Added warnings when `.end()` is called more than once (Kornel Lesiński) - * Added `response.links` to browser version (Lukas Eipert) - * `btoa` is no longer required in IE9 (Kornel Lesiński) - * Fixed `.sortQuery()` on URLs without query strings (Kornel Lesiński) - * Refactored common response code into `ResponseBase` (Lukas Eipert) - -# 3.1.0 (2016-11-28) - - * Added `.sortQuery()` (vicanso) - * Added support for arrays and bools in `.field()` (Kornel Lesiński) - * Made `superagent.Request` subclassable without need to patch all static methods (Kornel Lesiński) - -# 3.0.0 (2016-11-19) - - * Dropped support for Node 0.x. Please upgrade to at least Node 4. - * Dropped support for componentjs (Damien Caselli) - * Removed deprecated `.part()`/`superagent.Part` APIs. - * Removed unreliable `.body` property on internal response object used by unbuffered parsers. - Note: the normal `response.body` is unaffected. - * Multiple `.send()` calls mixing `Buffer`/`Blob` and JSON data are not possible and will now throw instead of messing up the data. - * Improved `.send()` data object type check (Fernando Mendes) - * Added common prototype for Node and browser versions (Andreas Helmberger) - * Added `http+unix:` schema to support Unix sockets (Yuki KAN) - * Added full `attach` options parameter in the Node version (Lapo Luchini) - * Added `pfx` TLS option with new `pfx()` method. (Reid Burke) - * Internally changed `.on` to `.once` to prevent possible memory leaks (Matt Blair) - * Made all errors reported as an event (Kornel Lesiński) - -# 2.3.0 (2016-09-20) - - * Enabled `.field()` to handle objects (Affan Shahid) - * Added authentication with client certificates (terusus) - * Added `.catch()` for more Promise-like interface (Maxim Samoilov, Kornel Lesiński) - * Silenced errors from incomplete gzip streams for compatibility with web browsers (Kornel Lesiński) - * Fixed `event.direction` in uploads (Kornel Lesiński) - * Fixed returned value of overwritten response object's `on()` method (Juan Dopazo) - -# 2.2.0 (2016-08-13) - - * Added `timedout` property to node Request instance (Alexander Pope) - * Unified `null` querystring values in node and browser environments. (George Chung) - -# 2.1.0 (2016-06-14) - - * Refactored async parsers. Now the `end` callback waits for async parsers to finish (Kornel Lesiński) - * Errors thrown in `.end()` callback don't cause the callback to be called twice (Kornel Lesiński) - * Added `headers` to `toJSON()` (Tao) - -# 2.0.0 (2016-05-29) - -## Breaking changes - -Breaking changes are in rarely used functionality, so we hope upgrade will be smooth for most users. - - * Browser: The `.parse()` method has been renamed to `.serialize()` for consistency with NodeJS version. - * Browser: Query string keys without a value used to be parsed as `'undefined'`, now their value is `''` (empty string) (shura, Kornel Lesiński). - * NodeJS: The `redirect` event is called after new query string and headers have been set and is allowed to override the request URL (Kornel Lesiński) - * `.then()` returns a real `Promise`. Note that use of superagent with promises now requires a global `Promise` object. - If you target Internet Explorer or Node 0.10, you'll need `require('es6-promise').polyfill()` or similar. - * Upgraded all dependencies (Peter Lyons) - * Renamed properties documented as `@api private` to have `_prefixed` names (Kornel Lesiński) - -## Probably not breaking changes: - - * Extracted common functions to request-base (Peter Lyons) - * Fixed race condition in pipe tests (Peter Lyons) - * Handle `FormData` error events (scriptype) - * Fixed wrong jsdoc of Request#attach (George Chung) - * Updated and improved tests (Peter Lyons) - * `request.head()` supports `.redirects(5)` call (Kornel Lesiński) - * `response` event is also emitted when using `.pipe()` - -# 1.8.2 (2016-03-20) - - * Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton) - * Handling of FormData error events (scriptype) - * Fixed parsing of `vnd+json` MIME types (Kornel Lesiński) - * Aliased browser implementation of `.parse()` as `.serialize()` for forward compatibility - -# 1.8.1 (2016-03-14) - - * Fixed form-data incompatibility with IE9 - -# 1.8.0 (2016-03-09) - - * Extracted common code into request-base class (Peter Lyons) - * It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking! - * Added option `{type:'auto'}` to `auth` method, which enables browser-native auth types (Jungle, Askar Yusupov) - * Added `responseType()` to set XHR `responseType` (chris) - * Switched to form-data for browserify-compatible `FormData` (Peter Lyons) - * Added `statusCode` to error response when JSON response is malformed (mattdell) - * Prevented TCP port conflicts in all tests (Peter Lyons) - * Updated form-data dependency - -# 1.7.2 (2016-01-26) - - * Fix case-sensitivity of header fields introduced by a4ddd6a. (Edward J. Jinotti) - * bump extend dependency, as former version did not contain any license information (Lukas Eipert) - -# 1.7.1 (2016-01-21) - - * Fixed a conflict with express when using npm 3.x (Glenn) - * Fixed redirects after a multipart/form-data POST request (cyclist2) - -# 1.7.0 (2016-01-18) - - * When attaching files, read default filename from the `File` object (JD Isaacks) - * Add `direction` property to `progress` events (Joseph Dykstra) - * Update component-emitter & formidable (Kornel Lesiński) - * Don't re-encode query string needlessly (Ruben Verborgh) - * ensure querystring is appended when doing `stream.pipe(request)` (Keith Grennan) - * change set header function, not call `this.request()` until call `this.end()` (vicanso) - * Add no-op `withCredentials` to Node API (markdalgleish) - * fix `delete` breaking on ie8 (kenjiokabe) - * Don't let request error override responses (Clay Reimann) - * Increased number of tests shared between node and client (Kornel Lesiński) - -# 1.6.0/1.6.1 (2015-12-09) - - * avoid misleading CORS error message - * added 'progress' event on file/form upload in Node (Olivier Lalonde) - * return raw response if the response parsing fails (Rei Colina) - * parse content-types ending with `+json` as JSON (Eiryyy) - * fix to avoid throwing errors on aborted requests (gjurgens) - * retain cookies on redirect when hosts match (Tom Conroy) - * added Bower manifest (Johnny Freeman) - * upgrade to latest cookiejar (Andy Burke) - -# 1.5.0 (2015-11-30) - - * encode array values as `key=1&key=2&key=3` etc... (aalpern, Davis Kim) - * avoid the error which is omitted from 'socket hang up' - * faster JSON parsing, handling of zlib errors (jbellenger) - * fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov) - * alias `del()` method as `delete()` (Aaron Krause) - * revert Request#parse since it was actually Response#parse - -# 1.4.0 (2015-09-14) - - * add Request#parse method to client library - * add missing statusCode in client response - * don't apply JSON heuristics if a valid parser is found - * fix detection of root object for webworkers - -# 1.3.0 (2015-08-05) - - * fix incorrect content-length of data set to buffer - * serialize request data takes into account charsets - * add basic promise support via a `then` function - -# 1.2.0 (2015-04-13) - - * add progress events to downlodas - * make usable in webworkers - * add support for 308 redirects - * update node-form-data dependency - * update to work in react native - * update node-mime dependency - -# 1.1.0 (2015-03-13) - - * Fix responseType checks without xhr2 and ie9 tests (rase-) - * errors have .status and .response fields if applicable (defunctzombie) - * fix end callback called before saving cookies (rase-) - -1.0.0 / 2015-03-08 -================== - - * All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the `res` object. See [#283](https://github.com/visionmedia/superagent/issues/283). - * keep timeouts intact across redirects (hopkinsth) - * handle falsy json values (themaarten) - * fire response events in browser version (Schoonology) - * getXHR exported in client version (KidsKilla) - * remove arity check on `.end()` callbacks (defunctzombie) - * avoid setting content-type for host objects (rexxars) - * don't index array strings in querystring (travisjeffery) - * fix pipe() with redirects (cyrilis) - * add xhr2 file download (vstirbu) - * set default response type to text/plain if not specified (warrenseine) - -0.21.0 / 2014-11-11 -================== - - * Trim text before parsing json (gjohnson) - * Update tests to express 4 (gaastonsr) - * Prevent double callback when error is thrown (pgn-vole) - * Fix missing clearTimeout (nickdima) - * Update debug (TooTallNate) - -0.20.0 / 2014-10-02 -================== - - * Add toJSON() to request and response instances. (yields) - * Prevent HEAD requests from getting parsed. (gjohnson) - * Update debug. (TooTallNate) - -0.19.1 / 2014-09-24 -================== - - * Fix basic auth issue when password is falsey value. (gjohnson) - -0.19.0 / 2014-09-24 -================== - - * Add unset() to browser. (shesek) - * Prefer XHR over ActiveX. (omeid) - * Catch parse errors. (jacwright) - * Update qs dependency. (wercker) - * Add use() to node. (Financial-Times) - * Add response text to errors. (yields) - * Don't send empty cookie headers. (undoZen) - * Don't parse empty response bodies. (DveMac) - * Use hostname when setting cookie host. (prasunsultania) - -0.18.2 / 2014-07-12 -================== - - * Handle parser errors. (kof) - * Ensure not to use default parsers when there is a user defined one. (kof) - -0.18.1 / 2014-07-05 -================== - - * Upgrade cookiejar dependency (juanpin) - * Support image mime types (nebulade) - * Make .agent chainable (kof) - * Upgrade debug (TooTallNate) - * Fix docs (aheckmann) - -0.18.0 / 2014-04-29 -=================== - -* Use "form-data" module for the multipart/form-data implementation. (TooTallNate) -* Add basic `field()` and `attach()` functions for HTML5 FormData. (TooTallNate) -* Deprecate `part()`. (TooTallNate) -* Set default user-agent header. (bevacqua) -* Add `unset()` method for removing headers. (bevacqua) -* Update cookiejar. (missinglink) -* Fix response error formatting. (shesek) - -0.17.0 / 2014-03-06 -=================== - - * supply uri malformed error to the callback (yields) - * add request event (yields) - * allow simple auth (yields) - * add request event (yields) - * switch to component/reduce (visionmedia) - * fix part content-disposition (mscdex) - * add browser testing via zuul (defunctzombie) - * adds request.use() (johntron) - -0.16.0 / 2014-01-07 -================== - - * remove support for 0.6 (superjoe30) - * fix CORS withCredentials (wejendorp) - * add "test" script (superjoe30) - * add request .accept() method (nickl-) - * add xml to mime types mappings (nickl-) - * fix parse body error on HEAD requests (gjohnson) - * fix documentation typos (matteofigus) - * fix content-type + charset (bengourley) - * fix null values on query parameters (cristiandouce) - -0.15.7 / 2013-10-19 -================== - - * pin should.js to 1.3.0 due to breaking change in 2.0.x - * fix browserify regression - -0.15.5 / 2013-10-09 -================== - - * add browser field to support browserify - * fix .field() value number support - -0.15.4 / 2013-07-09 -================== - - * node: add a Request#agent() function to set the http Agent to use - -0.15.3 / 2013-07-05 -================== - - * fix .pipe() unzipping on more recent nodes. Closes #240 - * fix passing an empty object to .query() no longer appends "?" - * fix formidable error handling - * update formidable - -0.15.2 / 2013-07-02 -================== - - * fix: emit 'end' when piping. - -0.15.1 / 2013-06-26 -================== - - * add try/catch around parseLinks - -0.15.0 / 2013-06-25 -================== - - * make `Response#toError()` have a more meaningful `message` - -0.14.9 / 2013-06-15 -================== - - * add debug()s to the node client - * add .abort() method to node client - -0.14.8 / 2013-06-13 -================== - - * set .agent = false always - * remove X-Requested-With. Closes #189 - -0.14.7 / 2013-06-06 -================== - - * fix unzip error handling - -0.14.6 / 2013-05-23 -================== - - * fix HEAD unzip bug - -0.14.5 / 2013-05-23 -================== - - * add flag to ensure the callback is __never__ invoked twice - -0.14.4 / 2013-05-22 -================== - - * add superagent.js build output - * update qs - * update emitter-component - * revert "add browser field to support browserify" see GH-221 - -0.14.3 / 2013-05-18 -================== - - * add browser field to support browserify - -0.14.2/ 2013-05-07 -================== - - * add host object check to fix serialization of File/Blobs etc as json - -0.14.1 / 2013-04-09 -================== - - * update qs - -0.14.0 / 2013-04-02 -================== - - * add client-side basic auth - * fix retaining of .set() header field case - -0.13.0 / 2013-03-13 -================== - - * add progress events to client - * add simple example - * add res.headers as alias of res.header for browser client - * add res.get(field) to node/client - -0.12.4 / 2013-02-11 -================== - - * fix get content-type even if can't get other headers in firefox. fixes #181 - -0.12.3 / 2013-02-11 -================== - - * add quick "progress" event support - -0.12.2 / 2013-02-04 -================== - - * add test to check if response acts as a readable stream - * add ReadableStream in the Response prototype. - * add test to assert correct redirection when the host changes in the location header. - * add default Accept-Encoding. Closes #155 - * fix req.pipe() return value of original stream for node parity. Closes #171 - * remove the host header when cleaning headers to properly follow the redirection. - -0.12.1 / 2013-01-10 -================== - - * add x-domain error handling - -0.12.0 / 2013-01-04 -================== - - * add header persistence on redirects - -0.11.0 / 2013-01-02 -================== - - * add .error Error object. Closes #156 - * add forcing of res.text removal for FF HEAD responses. Closes #162 - * add reduce component usage. Closes #90 - * move better-assert dep to development deps - -0.10.0 / 2012-11-14 -================== - - * add req.timeout(ms) support for the client - -0.9.10 / 2012-11-14 -================== - - * fix client-side .query(str) support - -0.9.9 / 2012-11-14 -================== - - * add .parse(fn) support - * fix socket hangup with dates in querystring. Closes #146 - * fix socket hangup "error" event when a callback of arity 2 is provided - -0.9.8 / 2012-11-03 -================== - - * add emission of error from `Request#callback()` - * add a better fix for nodes weird socket hang up error - * add PUT/POST/PATCH data support to client short-hand functions - * add .license property to component.json - * change client portion to build using component(1) - * fix GET body support [guille] - -0.9.7 / 2012-10-19 -================== - - * fix `.buffer()` `res.text` when no parser matches - -0.9.6 / 2012-10-17 -================== - - * change: use `this` when `window` is undefined - * update to new component spec [juliangruber] - * fix emission of "data" events for compressed responses without encoding. Closes #125 - -0.9.5 / 2012-10-01 -================== - - * add field name to .attach() - * add text "parser" - * refactor isObject() - * remove wtf isFunction() helper - -0.9.4 / 2012-09-20 -================== - - * fix `Buffer` responses [TooTallNate] - * fix `res.type` when a "type" param is present [TooTallNate] - -0.9.3 / 2012-09-18 -================== - - * remove __GET__ `.send()` == `.query()` special-case (__API__ change !!!) - -0.9.2 / 2012-09-17 -================== - - * add `.aborted` prop - * add `.abort()`. Closes #115 - -0.9.1 / 2012-09-07 -================== - - * add `.forbidden` response property - * add component.json - * change emitter-component to 0.0.5 - * fix client-side tests - -0.9.0 / 2012-08-28 -================== - - * add `.timeout(ms)`. Closes #17 - -0.8.2 / 2012-08-28 -================== - - * fix pathname relative redirects. Closes #112 - -0.8.1 / 2012-08-21 -================== - - * fix redirects when schema is specified - -0.8.0 / 2012-08-19 -================== - - * add `res.buffered` flag - * add buffering of text/*, json and forms only by default. Closes #61 - * add `.buffer(false)` cancellation - * add cookie jar support [hunterloftis] - * add agent functionality [hunterloftis] - -0.7.0 / 2012-08-03 -================== - - * allow `query()` to be called after the internal `req` has been created [tootallnate] - -0.6.0 / 2012-07-17 -================== - - * add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" - -0.5.1 / 2012-07-16 -================== - - * add "methods" dep - * add `.end()` arity check to node callbacks - * fix unzip support due to weird node internals - -0.5.0 / 2012-06-16 -================== - - * Added "Link" response header field parsing, exposing `res.links` - -0.4.3 / 2012-06-15 -================== - - * Added 303, 305 and 307 as redirect status codes [slaskis] - * Fixed passing an object as the url - -0.4.2 / 2012-06-02 -================== - - * Added component support - * Fixed redirect data - -0.4.1 / 2012-04-13 -================== - - * Added HTTP PATCH support - * Fixed: GET / HEAD when following redirects. Closes #86 - * Fixed Content-Length detection for multibyte chars - -0.4.0 / 2012-03-04 -================== - - * Added `.head()` method [browser]. Closes #78 - * Added `make test-cov` support - * Added multipart request support. Closes #11 - * Added all methods that node supports. Closes #71 - * Added "response" event providing a Response object. Closes #28 - * Added `.query(obj)`. Closes #59 - * Added `res.type` (browser). Closes #54 - * Changed: default `res.body` and `res.files` to {} - * Fixed: port existing query-string fix (browser). Closes #57 - -0.3.0 / 2012-01-24 -================== - - * Added deflate/gzip support [guillermo] - * Added `res.type` (Content-Type void of params) - * Added `res.statusCode` to mirror node - * Added `res.headers` to mirror node - * Changed: parsers take callbacks - * Fixed optional schema support. Closes #49 - -0.2.0 / 2012-01-05 -================== - - * Added url auth support - * Added `.auth(username, password)` - * Added basic auth support [node]. Closes #41 - * Added `make test-docs` - * Added guillermo's EventEmitter. Closes #16 - * Removed `Request#data()` for SS, renamed to `send()` - * Removed `Request#data()` from client, renamed to `send()` - * Fixed array support. [browser] - * Fixed array support. Closes #35 [node] - * Fixed `EventEmitter#emit()` - -0.1.3 / 2011-10-25 -================== - - * Added error to callback - * Bumped node dep for 0.5.x - -0.1.2 / 2011-09-24 -================== - - * Added markdown documentation - * Added `request(url[, fn])` support to the client - * Added `qs` dependency to package.json - * Added options for `Request#pipe()` - * Added support for `request(url, callback)` - * Added `request(url)` as shortcut for `request.get(url)` - * Added `Request#pipe(stream)` - * Added inherit from `Stream` - * Added multipart support - * Added ssl support (node) - * Removed Content-Length field from client - * Fixed buffering, `setEncoding()` to utf8 [reported by stagas] - * Fixed "end" event when piping - -0.1.1 / 2011-08-20 -================== - - * Added `res.redirect` flag (node) - * Added redirect support (node) - * Added `Request#redirects(n)` (node) - * Added `.set(object)` header field support - * Fixed `Content-Length` support - -0.1.0 / 2011-08-09 -================== - - * Added support for multiple calls to `.data()` - * Added support for `.get(uri, obj)` - * Added GET `.data()` querystring support - * Added IE{6,7,8} support [alexyoung] - -0.0.1 / 2011-08-05 -================== - - * Initial commit - diff --git a/build/node_modules/superagent/Makefile b/build/node_modules/superagent/Makefile deleted file mode 100644 index 11b81f94..00000000 --- a/build/node_modules/superagent/Makefile +++ /dev/null @@ -1,57 +0,0 @@ - -NODETESTS ?= test/*.js test/node/*.js -BROWSERTESTS ?= test/*.js test/client/*.js -REPORTER = spec - -all: superagent.js - -test: - @if [ "x$(BROWSER)" = "x" ]; then make test-node; else make test-browser; fi - -test-node: - @NODE_ENV=test NODE_TLS_REJECT_UNAUTHORIZED=0 ./node_modules/.bin/mocha \ - --require should \ - --reporter $(REPORTER) \ - --timeout 5000 \ - --growl \ - $(NODETESTS) - -test-cov: lib-cov - SUPERAGENT_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html - -test-browser: - SAUCE_APPIUM_VERSION=1.7 ./node_modules/.bin/zuul -- $(BROWSERTESTS) - -test-browser-local: - ./node_modules/.bin/zuul --no-coverage --local 4000 -- $(BROWSERTESTS) - -lib-cov: - jscoverage lib lib-cov - -superagent.js: lib/node/*.js lib/node/parsers/*.js - @./node_modules/.bin/browserify \ - --standalone superagent \ - --outfile superagent.js . - -test-server: - @node test/server - -docs: index.html test-docs docs/index.md - -index.html: docs/index.md docs/head.html docs/tail.html - marked < $< \ - | cat docs/head.html - docs/tail.html \ - > $@ - -docclean: - rm -f index.html docs/test.html - -test-docs: docs/head.html docs/tail.html - make test REPORTER=doc \ - | cat docs/head.html - docs/tail.html \ - > docs/test.html - -clean: - rm -fr superagent.js components - -.PHONY: test-cov test docs test-docs clean test-browser-local diff --git a/build/node_modules/superagent/README.md b/build/node_modules/superagent/README.md new file mode 100644 index 00000000..79d102af --- /dev/null +++ b/build/node_modules/superagent/README.md @@ -0,0 +1,274 @@ +# superagent + +[![build status](https://img.shields.io/travis/visionmedia/superagent.svg)](https://travis-ci.org/visionmedia/superagent) +[![code coverage](https://img.shields.io/codecov/c/github/visionmedia/superagent.svg)](https://codecov.io/gh/visionmedia/superagent) +[![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) +[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) +[![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org) +[![license](https://img.shields.io/github/license/visionmedia/superagent.svg)](LICENSE) + +> Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features + + +## Table of Contents + +* [Install](#install) +* [Usage](#usage) + * [Node](#node) + * [Browser](#browser) +* [Supported Platforms](#supported-platforms) + * [Required Browser Features](#required-browser-features) +* [Plugins](#plugins) +* [Upgrading from previous versions](#upgrading-from-previous-versions) +* [Contributors](#contributors) +* [License](#license) + + +## Install + +[npm][]: + +```sh +npm install superagent +``` + +[yarn][]: + +```sh +yarn add superagent +``` + + +## Usage + +### Node + +```js +const superagent = require('superagent'); + +// callback +superagent + .post('/api/pet') + .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body + .set('X-API-Key', 'foobar') + .set('accept', 'json') + .end((err, res) => { + // Calling the end function will send the request + }); + +// promise with then/catch +superagent.post('/api/pet').then(console.log).catch(console.error); + +// promise with async/await +(async () => { + try { + const res = await superagent.post('/api/pet'); + console.log(res); + } catch (err) { + console.error(err); + } +})(); +``` + +### Browser + +**The browser-ready, minified version of `superagent` is only 6 KB (minified and gzipped)!** + +Browser-ready versions of this module are available via [jsdelivr][], [unpkg][], and also in the `node_modules/superagent/dist` folder in downloads of the `superagent` package. + +> Note that we also provide unminified versions with `.js` instead of `.min.js` file extensions. + +#### VanillaJS + +This is the solution for you if you're just using ` + + + + +``` + +#### Bundler + +If you are using [browserify][], [webpack][], [rollup][], or another bundler, then you can follow the same usage as [Node](#node) above. + + +## Supported Platforms + +* Node: v6.x+ +* Browsers (see [.browserslistrc](.browserslistrc)): + + ```sh + npx browserslist + ``` + + ```sh + and_chr 71 + and_ff 64 + and_qq 1.2 + and_uc 11.8 + android 67 + android 4.4.3-4.4.4 + baidu 7.12 + bb 10 + bb 7 + chrome 73 + chrome 72 + chrome 71 + edge 18 + edge 17 + firefox 66 + firefox 65 + ie 11 + ie 10 + ie 9 + ie_mob 11 + ie_mob 10 + ios_saf 12.0-12.1 + ios_saf 11.3-11.4 + op_mini all + op_mob 46 + op_mob 12.1 + opera 58 + opera 57 + safari 12 + safari 11.1 + samsung 8.2 + samsung 7.2-7.4 + ``` + +### Required Browser Features + +We recommend using (specifically with the bundle mentioned in [VanillaJS](#vanillajs) above): + +```html + +``` + +* IE 9-10 requires a polyfill for `Promise`, `Array.from`, `Symbol`, `Object.getOwnPropertySymbols`, and `Object.setPrototypeOf` +* IE 9 requires a polyfill for `window.FormData` (we recommend [formdata-polyfill][]), `Set`, `Math.trunc`, `BigInt`, `Map`, `Reflect`, `WeakMap`, `WeakRef`, and `WeakSet` + + +## Plugins + +SuperAgent is easily extended via plugins. + +```js +const nocache = require('superagent-no-cache'); +const superagent = require('superagent'); +const prefix = require('superagent-prefix')('/static'); + +superagent + .get('/some-url') + .query({ action: 'edit', city: 'London' }) // query string + .use(prefix) // Prefixes *only* this request + .use(nocache) // Prevents caching of *only* this request + .end((err, res) => { + // Do something + }); +``` + +Existing plugins: + +* [superagent-no-cache](https://github.com/johntron/superagent-no-cache) - prevents caching by including Cache-Control header +* [superagent-prefix](https://github.com/johntron/superagent-prefix) - prefixes absolute URLs (useful in test environment) +* [superagent-suffix](https://github.com/timneutkens1/superagent-suffix) - suffix URLs with a given path +* [superagent-mock](https://github.com/M6Web/superagent-mock) - simulate HTTP calls by returning data fixtures based on the requested URL +* [superagent-mocker](https://github.com/shuvalov-anton/superagent-mocker) — simulate REST API +* [superagent-cache](https://github.com/jpodwys/superagent-cache) - A global SuperAgent patch with built-in, flexible caching +* [superagent-cache-plugin](https://github.com/jpodwys/superagent-cache-plugin) - A SuperAgent plugin with built-in, flexible caching +* [superagent-jsonapify](https://github.com/alex94puchades/superagent-jsonapify) - A lightweight [json-api](http://jsonapi.org/format/) client addon for superagent +* [superagent-serializer](https://github.com/zzarcon/superagent-serializer) - Converts server payload into different cases +* [superagent-httpbackend](https://www.npmjs.com/package/superagent-httpbackend) - stub out requests using AngularJS' $httpBackend syntax +* [superagent-throttle](https://github.com/leviwheatcroft/superagent-throttle) - queues and intelligently throttles requests +* [superagent-charset](https://github.com/magicdawn/superagent-charset) - add charset support for node's SuperAgent +* [superagent-verbose-errors](https://github.com/jcoreio/superagent-verbose-errors) - include response body in error messages for failed requests +* [superagent-declare](https://github.com/damoclark/superagent-declare) - A simple [declarative](https://en.wikipedia.org/wiki/Declarative_programming) API for SuperAgent +* [superagent-node-http-timings](https://github.com/webuniverseio/superagent-node-http-timings) - measure http timings in node.js + +Please prefix your plugin with `superagent-*` so that it can easily be found by others. + +For SuperAgent extensions such as couchdb and oauth visit the [wiki](https://github.com/visionmedia/superagent/wiki). + + +## Upgrading from previous versions + +Please see [GitHub releases page](https://github.com/visionmedia/superagent/releases) for the current changelog. + +Our breaking changes are mostly in rarely used functionality and from stricter error handling. + +* [6.0 to 6.1](https://github.com/visionmedia/superagent/releases/tag/v6.1.0) + * Browser behaviour changed to match Node when serializing `application/x-www-form-urlencoded`, using `arrayFormat: 'indices'` semantics of `qs` library. (See: ) +* [5.x to 6.x](https://github.com/visionmedia/superagent/releases/tag/v6.0.0): + * Retry behavior is still opt-in, however we now have a more fine-grained list of status codes and error codes that we retry against (see updated docs) + * A specific issue with Content-Type matching not being case-insensitive is fixed + * Set is now required for IE 9, see [Required Browser Features](#required-browser-features) for more insight +* [4.x to 5.x](https://github.com/visionmedia/superagent/releases/tag/v5.0.0): + * We've implemented the build setup of [Lass](https://lass.js.org) to simplify our stack and linting + * Unminified browserified build size has been reduced from 48KB to 20KB (via `tinyify` and the latest version of Babel using `@babel/preset-env` and `.browserslistrc`) + * Linting support has been added using `caniuse-lite` and `eslint-plugin-compat` + * We can now target what versions of Node we wish to support more easily using `.babelrc` +* [3.x to 4.x](https://github.com/visionmedia/superagent/releases/tag/v4.0.0-alpha.1): + * Ensure you're running Node 6 or later. We've dropped support for Node 4. + * We've started using ES6 and for compatibility with Internet Explorer you may need to use Babel. + * We suggest migrating from `.end()` callbacks to `.then()` or `await`. +* [2.x to 3.x](https://github.com/visionmedia/superagent/releases/tag/v3.0.0): + * Ensure you're running Node 4 or later. We've dropped support for Node 0.x. + * Test code that calls `.send()` multiple times. Invalid calls to `.send()` will now throw instead of sending garbage. +* [1.x to 2.x](https://github.com/visionmedia/superagent/releases/tag/v2.0.0): + * If you use `.parse()` in the *browser* version, rename it to `.serialize()`. + * If you rely on `undefined` in query-string values being sent literally as the text "undefined", switch to checking for missing value instead. `?key=undefined` is now `?key` (without a value). + * If you use `.then()` in Internet Explorer, ensure that you have a polyfill that adds a global `Promise` object. +* 0.x to 1.x: + * Instead of 1-argument callback `.end(function(res){})` use `.then(res => {})`. + + +## Contributors + +| Name | +| ------------------- | +| **Kornel Lesiński** | +| **Peter Lyons** | +| **Hunter Loftis** | +| **Nick Baugh** | + + +## License + +[MIT](LICENSE) © TJ Holowaychuk + + +## + +[npm]: https://www.npmjs.com/ + +[yarn]: https://yarnpkg.com/ + +[formdata-polyfill]: https://www.npmjs.com/package/formdata-polyfill + +[jsdelivr]: https://www.jsdelivr.com/ + +[unpkg]: https://unpkg.com/ + +[browserify]: https://github.com/browserify/browserify + +[webpack]: https://github.com/webpack/webpack + +[rollup]: https://github.com/rollup/rollup diff --git a/build/node_modules/superagent/Readme.md b/build/node_modules/superagent/Readme.md deleted file mode 100644 index 05d8cb34..00000000 --- a/build/node_modules/superagent/Readme.md +++ /dev/null @@ -1,137 +0,0 @@ -# SuperAgent [![Build Status](https://travis-ci.org/visionmedia/superagent.svg?branch=master)](https://travis-ci.org/visionmedia/superagent) - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/shtylman-superagent.svg)](https://saucelabs.com/u/shtylman-superagent) - -SuperAgent is a small progressive __client-side__ HTTP request library, and __Node.js__ module with the same API, sporting many high-level HTTP client features. View the [docs](http://visionmedia.github.io/superagent/). - -![super agent](http://f.cl.ly/items/3d282n3A0h0Z0K2w0q2a/Screenshot.png) - -## Installation - -node: - -``` -$ npm install superagent -``` - -Works with [browserify](https://github.com/substack/node-browserify) and [webpack](https://github.com/visionmedia/superagent/wiki/SuperAgent-for-Webpack). - -```js -request - .post('/api/pet') - .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body - .set('X-API-Key', 'foobar') - .set('accept', 'json') - .end((err, res) => { - // Calling the end function will send the request - }); -``` - -## Supported browsers and Node versions - -Tested browsers: - -- Latest Firefox, Chrome, Safari -- Latest Android, iPhone -- IE10 through latest. IE9 with polyfills. Even though IE9 is supported, a polyfill for `window.FormData` is required for `.field()`. - -Node 4 or later is required. - -## Plugins - -SuperAgent is easily extended via plugins. - -```js -const nocache = require('superagent-no-cache'); -const request = require('superagent'); -const prefix = require('superagent-prefix')('/static'); - -request - .get('/some-url') - .query({ action: 'edit', city: 'London' }) // query string - .use(prefix) // Prefixes *only* this request - .use(nocache) // Prevents caching of *only* this request - .end((err, res) => { - // Do something - }); -``` - -Existing plugins: - * [superagent-no-cache](https://github.com/johntron/superagent-no-cache) - prevents caching by including Cache-Control header - * [superagent-prefix](https://github.com/johntron/superagent-prefix) - prefixes absolute URLs (useful in test environment) - * [superagent-suffix](https://github.com/timneutkens1/superagent-suffix) - suffix URLs with a given path - * [superagent-mock](https://github.com/M6Web/superagent-mock) - simulate HTTP calls by returning data fixtures based on the requested URL - * [superagent-mocker](https://github.com/shuvalov-anton/superagent-mocker) — simulate REST API - * [superagent-cache](https://github.com/jpodwys/superagent-cache) - A global SuperAgent patch with built-in, flexible caching - * [superagent-cache-plugin](https://github.com/jpodwys/superagent-cache-plugin) - A SuperAgent plugin with built-in, flexible caching - * [superagent-jsonapify](https://github.com/alex94puchades/superagent-jsonapify) - A lightweight [json-api](http://jsonapi.org/format/) client addon for superagent - * [superagent-serializer](https://github.com/zzarcon/superagent-serializer) - Converts server payload into different cases - * [superagent-use](https://github.com/koenpunt/superagent-use) - A client addon to apply plugins to all requests. - * [superagent-httpbackend](https://www.npmjs.com/package/superagent-httpbackend) - stub out requests using AngularJS' $httpBackend syntax - * [superagent-throttle](https://github.com/leviwheatcroft/superagent-throttle) - queues and intelligently throttles requests - * [superagent-charset](https://github.com/magicdawn/superagent-charset) - add charset support for node's SuperAgent - * [superagent-verbose-errors](https://github.com/jcoreio/superagent-verbose-errors) - include response body in error messages for failed requests - -Please prefix your plugin with `superagent-*` so that it can easily be found by others. - -For SuperAgent extensions such as couchdb and oauth visit the [wiki](https://github.com/visionmedia/superagent/wiki). - -## Upgrading from previous versions: - -Our breaking changes are mostly in rarely used functionality and from stricter error handling. - -* [2.x to 3.x](https://github.com/visionmedia/superagent/releases/tag/v3.0.0): - - Ensure you're running Node 4 or later. We dropped support for Node 0.x. - - Test code that calls `.send()` multiple times. Invalid calls to `.send()` will now throw instead of sending garbage. -* [1.x to 2.x](https://github.com/visionmedia/superagent/releases/tag/v2.0.0): - - If you use `.parse()` in the *browser* version, rename it to `.serialize()`. - - If you rely on `undefined` in query-string values being sent literally as the text "undefined", switch to checking for missing value instead. `?key=undefined` is now `?key` (without a value). - - If you use `.then()` in Internet Explorer, ensure that you have a polyfill that adds a global `Promise` object. -* 0.x to 1.x: - - Use `.end(function(err, res){})`. 1-argument version is no longer supported. - -## Running node tests - -Install dependencies: - -```shell -$ npm install -``` -Run em! - -```shell -$ make test -``` - -## Running browser tests - -Install dependencies: - -```shell -$ npm install -``` - -Start the test runner: - -```shell -$ make test-browser-local -``` - -Visit `http://localhost:4000/__zuul` in your browser. - -Edit tests and refresh your browser. You do not have to restart the test runner. - - -## Packaging Notes for Developers - -**npm (for node)** is configured via the `package.json` file and the `.npmignore` file. Key metadata in the `package.json` file is the `version` field which should be changed according to semantic versioning and have a 1-1 correspondence with git tags. So for example, if you were to `git show v1.5.0:package.json | grep version`, you should see `"version": "1.5.0",` and this should hold true for every release. This can be handled via the `npm version` command. Be aware that when publishing, npm will presume the version being published should also be tagged in npm as `latest`, which is OK for normal incremental releases. For betas and minor/patch releases to older versions, be sure to include `--tag` appropriately to avoid an older release getting tagged as `latest`. - -**npm (for browser standalone)** When we publish versions to npm, we run `make superagent.js` which generates the standalone `superagent.js` file via `browserify`, and this file is included in the package published to npm (but this file is never checked into the git repository). If users want to install via npm but serve a single `.js` file directly to the browser, the `node_modules/superagent/superagent.js` is a standalone browserified file ready to go for that purpose. It is not minified. - -**npm (for browserify)** is handled via the `package.json` `browser` field which allows users to install SuperAgent via npm, reference it from their browser code with `require('superagent')`, and then build their own application bundle via `browserify`, which will use `lib/client.js` as the SuperAgent entrypoint. - -**bower** is configured via the `bower.json` file. Bower installs files directly from git/github without any transformation, so you *must* use Browserify or Webpack (or use npm). - -## License - -MIT diff --git a/build/node_modules/superagent/changelog.sh b/build/node_modules/superagent/changelog.sh deleted file mode 100755 index 82e2d6fd..00000000 --- a/build/node_modules/superagent/changelog.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -VER=$(git tag -l v[0-9].[0-9]*.[0-9]* | tail -n 1) -echo "# ($(date +%Y-%m-%d))" -echo -git log $VER...HEAD --no-merges --topo-order --format=' * %s (%an)' -echo -echo "# $VER" diff --git a/build/node_modules/superagent/dist/superagent.js b/build/node_modules/superagent/dist/superagent.js new file mode 100644 index 00000000..7f5f5d66 --- /dev/null +++ b/build/node_modules/superagent/dist/superagent.js @@ -0,0 +1,3974 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.superagent = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i -1) { + return callBind(intrinsic); + } + + return intrinsic; +}; + +},{"./":3,"get-intrinsic":8}],3:[function(require,module,exports){ +'use strict'; + +var bind = require('function-bind'); + +var GetIntrinsic = require('get-intrinsic'); + +var $apply = GetIntrinsic('%Function.prototype.apply%'); +var $call = GetIntrinsic('%Function.prototype.call%'); +var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); +var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); +var $max = GetIntrinsic('%Math.max%'); + +if ($defineProperty) { + try { + $defineProperty({}, 'a', { + value: 1 + }); + } catch (e) { + $defineProperty = null; + } +} + +module.exports = function callBind(originalFunction) { + var func = $reflectApply(bind, $call, arguments); + + if ($gOPD && $defineProperty) { + var desc = $gOPD(func, 'length'); + + if (desc.configurable) { + $defineProperty(func, 'length', { + value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) + }); + } + } + + return func; +}; + +var applyBind = function applyBind() { + return $reflectApply(bind, $apply, arguments); +}; + +if ($defineProperty) { + $defineProperty(module.exports, 'apply', { + value: applyBind + }); +} else { + module.exports.apply = applyBind; +} + +},{"function-bind":7,"get-intrinsic":8}],4:[function(require,module,exports){ +"use strict"; + +if (typeof module !== 'undefined') { + module.exports = Emitter; +} + +function Emitter(obj) { + if (obj) return mixin(obj); +} + +; + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + + return obj; +} + +Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); + return this; +}; + +Emitter.prototype.once = function (event, fn) { + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { + this._callbacks = this._callbacks || {}; + + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + var cb; + + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + + if (callbacks.length === 0) { + delete this._callbacks['$' + event]; + } + + return this; +}; + +Emitter.prototype.emit = function (event) { + this._callbacks = this._callbacks || {}; + var args = new Array(arguments.length - 1), + callbacks = this._callbacks['$' + event]; + + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + + if (callbacks) { + callbacks = callbacks.slice(0); + + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +Emitter.prototype.listeners = function (event) { + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +Emitter.prototype.hasListeners = function (event) { + return !!this.listeners(event).length; +}; + +},{}],5:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +module.exports = stringify; +stringify.default = stringify; +stringify.stable = deterministicStringify; +stringify.stableStringify = deterministicStringify; +var LIMIT_REPLACE_NODE = '[...]'; +var CIRCULAR_REPLACE_NODE = '[Circular]'; +var arr = []; +var replacerStack = []; + +function defaultOptions() { + return { + depthLimit: Number.MAX_SAFE_INTEGER, + edgesLimit: Number.MAX_SAFE_INTEGER + }; +} + +function stringify(obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions(); + } + + decirc(obj, '', 0, [], undefined, 0, options); + var res; + + try { + if (replacerStack.length === 0) { + res = JSON.stringify(obj, replacer, spacer); + } else { + res = JSON.stringify(obj, replaceGetterValues(replacer), spacer); + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]'); + } finally { + while (arr.length !== 0) { + var part = arr.pop(); + + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]); + } else { + part[0][part[1]] = part[2]; + } + } + } + + return res; +} + +function setReplace(replace, val, k, parent) { + var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k); + + if (propertyDescriptor.get !== undefined) { + if (propertyDescriptor.configurable) { + Object.defineProperty(parent, k, { + value: replace + }); + arr.push([parent, k, val, propertyDescriptor]); + } else { + replacerStack.push([val, k, replace]); + } + } else { + parent[k] = replace; + arr.push([parent, k, val]); + } +} + +function decirc(val, k, edgeIndex, stack, parent, depth, options) { + depth += 1; + var i; + + if (_typeof(val) === 'object' && val !== null) { + for (i = 0; i < stack.length; i++) { + if (stack[i] === val) { + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent); + return; + } + } + + if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent); + return; + } + + if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent); + return; + } + + stack.push(val); + + if (Array.isArray(val)) { + for (i = 0; i < val.length; i++) { + decirc(val[i], i, i, stack, val, depth, options); + } + } else { + var keys = Object.keys(val); + + for (i = 0; i < keys.length; i++) { + var key = keys[i]; + decirc(val[key], key, i, stack, val, depth, options); + } + } + + stack.pop(); + } +} + +function compareFunction(a, b) { + if (a < b) { + return -1; + } + + if (a > b) { + return 1; + } + + return 0; +} + +function deterministicStringify(obj, replacer, spacer, options) { + if (typeof options === 'undefined') { + options = defaultOptions(); + } + + var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj; + var res; + + try { + if (replacerStack.length === 0) { + res = JSON.stringify(tmp, replacer, spacer); + } else { + res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer); + } + } catch (_) { + return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]'); + } finally { + while (arr.length !== 0) { + var part = arr.pop(); + + if (part.length === 4) { + Object.defineProperty(part[0], part[1], part[3]); + } else { + part[0][part[1]] = part[2]; + } + } + } + + return res; +} + +function deterministicDecirc(val, k, edgeIndex, stack, parent, depth, options) { + depth += 1; + var i; + + if (_typeof(val) === 'object' && val !== null) { + for (i = 0; i < stack.length; i++) { + if (stack[i] === val) { + setReplace(CIRCULAR_REPLACE_NODE, val, k, parent); + return; + } + } + + try { + if (typeof val.toJSON === 'function') { + return; + } + } catch (_) { + return; + } + + if (typeof options.depthLimit !== 'undefined' && depth > options.depthLimit) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent); + return; + } + + if (typeof options.edgesLimit !== 'undefined' && edgeIndex + 1 > options.edgesLimit) { + setReplace(LIMIT_REPLACE_NODE, val, k, parent); + return; + } + + stack.push(val); + + if (Array.isArray(val)) { + for (i = 0; i < val.length; i++) { + deterministicDecirc(val[i], i, i, stack, val, depth, options); + } + } else { + var tmp = {}; + var keys = Object.keys(val).sort(compareFunction); + + for (i = 0; i < keys.length; i++) { + var key = keys[i]; + deterministicDecirc(val[key], key, i, stack, val, depth, options); + tmp[key] = val[key]; + } + + if (typeof parent !== 'undefined') { + arr.push([parent, k, val]); + parent[k] = tmp; + } else { + return tmp; + } + } + + stack.pop(); + } +} + +function replaceGetterValues(replacer) { + replacer = typeof replacer !== 'undefined' ? replacer : function (k, v) { + return v; + }; + return function (key, val) { + if (replacerStack.length > 0) { + for (var i = 0; i < replacerStack.length; i++) { + var part = replacerStack[i]; + + if (part[1] === key && part[0] === val) { + val = part[2]; + replacerStack.splice(i, 1); + break; + } + } + } + + return replacer.call(this, key, val); + }; +} + +},{}],6:[function(require,module,exports){ +'use strict'; + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var slice = Array.prototype.slice; +var toStr = Object.prototype.toString; +var funcType = '[object Function]'; + +module.exports = function bind(that) { + var target = this; + + if (typeof target !== 'function' || toStr.call(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + + var args = slice.call(arguments, 1); + var bound; + + var binder = function binder() { + if (this instanceof bound) { + var result = target.apply(this, args.concat(slice.call(arguments))); + + if (Object(result) === result) { + return result; + } + + return this; + } else { + return target.apply(that, args.concat(slice.call(arguments))); + } + }; + + var boundLength = Math.max(0, target.length - args.length); + var boundArgs = []; + + for (var i = 0; i < boundLength; i++) { + boundArgs.push('$' + i); + } + + bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = Function.prototype.bind || implementation; + +},{"./implementation":6}],8:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var undefined; +var $SyntaxError = SyntaxError; +var $Function = Function; +var $TypeError = TypeError; + +var getEvalledConstructor = function getEvalledConstructor(expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = Object.getOwnPropertyDescriptor; + +if ($gOPD) { + try { + $gOPD({}, ''); + } catch (e) { + $gOPD = null; + } +} + +var throwTypeError = function throwTypeError() { + throw new $TypeError(); +}; + +var ThrowTypeError = $gOPD ? function () { + try { + arguments.callee; + return throwTypeError; + } catch (calleeThrows) { + try { + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } +}() : throwTypeError; + +var hasSymbols = require('has-symbols')(); + +var getProto = Object.getPrototypeOf || function (x) { + return x.__proto__; +}; + +var needsEval = {}; +var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); +var INTRINSICS = { + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': Error, + '%eval%': eval, + '%EvalError%': EvalError, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': (typeof JSON === "undefined" ? "undefined" : _typeof(JSON)) === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': Object, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': RangeError, + '%ReferenceError%': ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet +}; + +var doEval = function doEval(name) { + var value; + + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + + if (gen) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + return value; +}; + +var LEGACY_ALIASES = { + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = require('function-bind'); + +var hasOwn = require('has'); + +var $concat = bind.call(Function.call, Array.prototype.concat); +var $spliceApply = bind.call(Function.apply, Array.prototype.splice); +var $replace = bind.call(Function.call, String.prototype.replace); +var $strSlice = bind.call(Function.call, String.prototype.slice); +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; + +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + + if (value === needsEval) { + value = doEval(intrinsicName); + } + + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + var alias = intrinsic.alias; + + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + + if ((first === '"' || first === "'" || first === '`' || last === '"' || last === "'" || last === '`') && first !== last) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + + return void undefined; + } + + if ($gOPD && i + 1 >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + + return value; +}; + +},{"function-bind":7,"has":11,"has-symbols":9}],9:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; + +var hasSymbolSham = require('./shams'); + +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { + return false; + } + + if (typeof Symbol !== 'function') { + return false; + } + + if (_typeof(origSymbol('foo')) !== 'symbol') { + return false; + } + + if (_typeof(Symbol('bar')) !== 'symbol') { + return false; + } + + return hasSymbolSham(); +}; + +},{"./shams":10}],10:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { + return false; + } + + if (_typeof(Symbol.iterator) === 'symbol') { + return true; + } + + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + + if (typeof sym === 'string') { + return false; + } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { + return false; + } + + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { + return false; + } + + var symVal = 42; + obj[sym] = symVal; + + for (sym in obj) { + return false; + } + + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { + return false; + } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { + return false; + } + + var syms = Object.getOwnPropertySymbols(obj); + + if (syms.length !== 1 || syms[0] !== sym) { + return false; + } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { + return false; + } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + var descriptor = Object.getOwnPropertyDescriptor(obj, sym); + + if (descriptor.value !== symVal || descriptor.enumerable !== true) { + return false; + } + } + + return true; +}; + +},{}],11:[function(require,module,exports){ +'use strict'; + +var bind = require('function-bind'); + +module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty); + +},{"function-bind":7}],12:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var hasMap = typeof Map === 'function' && Map.prototype; +var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; +var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; +var mapForEach = hasMap && Map.prototype.forEach; +var hasSet = typeof Set === 'function' && Set.prototype; +var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; +var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; +var setForEach = hasSet && Set.prototype.forEach; +var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; +var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; +var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; +var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; +var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; +var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; +var booleanValueOf = Boolean.prototype.valueOf; +var objectToString = Object.prototype.toString; +var functionToString = Function.prototype.toString; +var $match = String.prototype.match; +var $slice = String.prototype.slice; +var $replace = String.prototype.replace; +var $toUpperCase = String.prototype.toUpperCase; +var $toLowerCase = String.prototype.toLowerCase; +var $test = RegExp.prototype.test; +var $concat = Array.prototype.concat; +var $join = Array.prototype.join; +var $arrSlice = Array.prototype.slice; +var $floor = Math.floor; +var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; +var gOPS = Object.getOwnPropertySymbols; +var symToString = typeof Symbol === 'function' && _typeof(Symbol.iterator) === 'symbol' ? Symbol.prototype.toString : null; +var hasShammedSymbols = typeof Symbol === 'function' && _typeof(Symbol.iterator) === 'object'; +var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (_typeof(Symbol.toStringTag) === hasShammedSymbols ? 'object' : 'symbol') ? Symbol.toStringTag : null; +var isEnumerable = Object.prototype.propertyIsEnumerable; +var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function (O) { + return O.__proto__; +} : null); + +function addNumericSeparator(num, str) { + if (num === Infinity || num === -Infinity || num !== num || num && num > -1000 && num < 1000 || $test.call(/e/, str)) { + return str; + } + + var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; + + if (typeof num === 'number') { + var int = num < 0 ? -$floor(-num) : $floor(num); + + if (int !== num) { + var intStr = String(int); + var dec = $slice.call(str, intStr.length + 1); + return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); + } + } + + return $replace.call(str, sepRegex, '$&_'); +} + +var inspectCustom = require('./util.inspect').custom; + +var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null; + +module.exports = function inspect_(obj, options, depth, seen) { + var opts = options || {}; + + if (has(opts, 'quoteStyle') && opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double') { + throw new TypeError('option "quoteStyle" must be "single" or "double"'); + } + + if (has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) { + throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); + } + + var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; + + if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { + throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); + } + + if (has(opts, 'indent') && opts.indent !== null && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) { + throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); + } + + if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { + throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); + } + + var numericSeparator = opts.numericSeparator; + + if (typeof obj === 'undefined') { + return 'undefined'; + } + + if (obj === null) { + return 'null'; + } + + if (typeof obj === 'boolean') { + return obj ? 'true' : 'false'; + } + + if (typeof obj === 'string') { + return inspectString(obj, opts); + } + + if (typeof obj === 'number') { + if (obj === 0) { + return Infinity / obj > 0 ? '0' : '-0'; + } + + var str = String(obj); + return numericSeparator ? addNumericSeparator(obj, str) : str; + } + + if (typeof obj === 'bigint') { + var bigIntStr = String(obj) + 'n'; + return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; + } + + var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; + + if (typeof depth === 'undefined') { + depth = 0; + } + + if (depth >= maxDepth && maxDepth > 0 && _typeof(obj) === 'object') { + return isArray(obj) ? '[Array]' : '[Object]'; + } + + var indent = getIndent(opts, depth); + + if (typeof seen === 'undefined') { + seen = []; + } else if (indexOf(seen, obj) >= 0) { + return '[Circular]'; + } + + function inspect(value, from, noIndent) { + if (from) { + seen = $arrSlice.call(seen); + seen.push(from); + } + + if (noIndent) { + var newOpts = { + depth: opts.depth + }; + + if (has(opts, 'quoteStyle')) { + newOpts.quoteStyle = opts.quoteStyle; + } + + return inspect_(value, newOpts, depth + 1, seen); + } + + return inspect_(value, opts, depth + 1, seen); + } + + if (typeof obj === 'function') { + var name = nameOf(obj); + var keys = arrObjKeys(obj, inspect); + return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); + } + + if (isSymbol(obj)) { + var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); + return _typeof(obj) === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; + } + + if (isElement(obj)) { + var s = '<' + $toLowerCase.call(String(obj.nodeName)); + var attrs = obj.attributes || []; + + for (var i = 0; i < attrs.length; i++) { + s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); + } + + s += '>'; + + if (obj.childNodes && obj.childNodes.length) { + s += '...'; + } + + s += ''; + return s; + } + + if (isArray(obj)) { + if (obj.length === 0) { + return '[]'; + } + + var xs = arrObjKeys(obj, inspect); + + if (indent && !singleLineValues(xs)) { + return '[' + indentedJoin(xs, indent) + ']'; + } + + return '[ ' + $join.call(xs, ', ') + ' ]'; + } + + if (isError(obj)) { + var parts = arrObjKeys(obj, inspect); + + if ('cause' in obj && !isEnumerable.call(obj, 'cause')) { + return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; + } + + if (parts.length === 0) { + return '[' + String(obj) + ']'; + } + + return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; + } + + if (_typeof(obj) === 'object' && customInspect) { + if (inspectSymbol && typeof obj[inspectSymbol] === 'function') { + return obj[inspectSymbol](); + } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { + return obj.inspect(); + } + } + + if (isMap(obj)) { + var mapParts = []; + mapForEach.call(obj, function (value, key) { + mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); + }); + return collectionOf('Map', mapSize.call(obj), mapParts, indent); + } + + if (isSet(obj)) { + var setParts = []; + setForEach.call(obj, function (value) { + setParts.push(inspect(value, obj)); + }); + return collectionOf('Set', setSize.call(obj), setParts, indent); + } + + if (isWeakMap(obj)) { + return weakCollectionOf('WeakMap'); + } + + if (isWeakSet(obj)) { + return weakCollectionOf('WeakSet'); + } + + if (isWeakRef(obj)) { + return weakCollectionOf('WeakRef'); + } + + if (isNumber(obj)) { + return markBoxed(inspect(Number(obj))); + } + + if (isBigInt(obj)) { + return markBoxed(inspect(bigIntValueOf.call(obj))); + } + + if (isBoolean(obj)) { + return markBoxed(booleanValueOf.call(obj)); + } + + if (isString(obj)) { + return markBoxed(inspect(String(obj))); + } + + if (!isDate(obj) && !isRegExp(obj)) { + var ys = arrObjKeys(obj, inspect); + var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; + var protoTag = obj instanceof Object ? '' : 'null prototype'; + var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; + var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; + var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); + + if (ys.length === 0) { + return tag + '{}'; + } + + if (indent) { + return tag + '{' + indentedJoin(ys, indent) + '}'; + } + + return tag + '{ ' + $join.call(ys, ', ') + ' }'; + } + + return String(obj); +}; + +function wrapQuotes(s, defaultStyle, opts) { + var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; + return quoteChar + s + quoteChar; +} + +function quote(s) { + return $replace.call(String(s), /"/g, '"'); +} + +function isArray(obj) { + return toStr(obj) === '[object Array]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isDate(obj) { + return toStr(obj) === '[object Date]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isRegExp(obj) { + return toStr(obj) === '[object RegExp]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isError(obj) { + return toStr(obj) === '[object Error]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isString(obj) { + return toStr(obj) === '[object String]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isNumber(obj) { + return toStr(obj) === '[object Number]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isBoolean(obj) { + return toStr(obj) === '[object Boolean]' && (!toStringTag || !(_typeof(obj) === 'object' && toStringTag in obj)); +} + +function isSymbol(obj) { + if (hasShammedSymbols) { + return obj && _typeof(obj) === 'object' && obj instanceof Symbol; + } + + if (_typeof(obj) === 'symbol') { + return true; + } + + if (!obj || _typeof(obj) !== 'object' || !symToString) { + return false; + } + + try { + symToString.call(obj); + return true; + } catch (e) {} + + return false; +} + +function isBigInt(obj) { + if (!obj || _typeof(obj) !== 'object' || !bigIntValueOf) { + return false; + } + + try { + bigIntValueOf.call(obj); + return true; + } catch (e) {} + + return false; +} + +var hasOwn = Object.prototype.hasOwnProperty || function (key) { + return key in this; +}; + +function has(obj, key) { + return hasOwn.call(obj, key); +} + +function toStr(obj) { + return objectToString.call(obj); +} + +function nameOf(f) { + if (f.name) { + return f.name; + } + + var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); + + if (m) { + return m[1]; + } + + return null; +} + +function indexOf(xs, x) { + if (xs.indexOf) { + return xs.indexOf(x); + } + + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) { + return i; + } + } + + return -1; +} + +function isMap(x) { + if (!mapSize || !x || _typeof(x) !== 'object') { + return false; + } + + try { + mapSize.call(x); + + try { + setSize.call(x); + } catch (s) { + return true; + } + + return x instanceof Map; + } catch (e) {} + + return false; +} + +function isWeakMap(x) { + if (!weakMapHas || !x || _typeof(x) !== 'object') { + return false; + } + + try { + weakMapHas.call(x, weakMapHas); + + try { + weakSetHas.call(x, weakSetHas); + } catch (s) { + return true; + } + + return x instanceof WeakMap; + } catch (e) {} + + return false; +} + +function isWeakRef(x) { + if (!weakRefDeref || !x || _typeof(x) !== 'object') { + return false; + } + + try { + weakRefDeref.call(x); + return true; + } catch (e) {} + + return false; +} + +function isSet(x) { + if (!setSize || !x || _typeof(x) !== 'object') { + return false; + } + + try { + setSize.call(x); + + try { + mapSize.call(x); + } catch (m) { + return true; + } + + return x instanceof Set; + } catch (e) {} + + return false; +} + +function isWeakSet(x) { + if (!weakSetHas || !x || _typeof(x) !== 'object') { + return false; + } + + try { + weakSetHas.call(x, weakSetHas); + + try { + weakMapHas.call(x, weakMapHas); + } catch (s) { + return true; + } + + return x instanceof WeakSet; + } catch (e) {} + + return false; +} + +function isElement(x) { + if (!x || _typeof(x) !== 'object') { + return false; + } + + if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { + return true; + } + + return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; +} + +function inspectString(str, opts) { + if (str.length > opts.maxStringLength) { + var remaining = str.length - opts.maxStringLength; + var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); + return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; + } + + var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); + return wrapQuotes(s, 'single', opts); +} + +function lowbyte(c) { + var n = c.charCodeAt(0); + var x = { + 8: 'b', + 9: 't', + 10: 'n', + 12: 'f', + 13: 'r' + }[n]; + + if (x) { + return '\\' + x; + } + + return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); +} + +function markBoxed(str) { + return 'Object(' + str + ')'; +} + +function weakCollectionOf(type) { + return type + ' { ? }'; +} + +function collectionOf(type, size, entries, indent) { + var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); + return type + ' (' + size + ') {' + joinedEntries + '}'; +} + +function singleLineValues(xs) { + for (var i = 0; i < xs.length; i++) { + if (indexOf(xs[i], '\n') >= 0) { + return false; + } + } + + return true; +} + +function getIndent(opts, depth) { + var baseIndent; + + if (opts.indent === '\t') { + baseIndent = '\t'; + } else if (typeof opts.indent === 'number' && opts.indent > 0) { + baseIndent = $join.call(Array(opts.indent + 1), ' '); + } else { + return null; + } + + return { + base: baseIndent, + prev: $join.call(Array(depth + 1), baseIndent) + }; +} + +function indentedJoin(xs, indent) { + if (xs.length === 0) { + return ''; + } + + var lineJoiner = '\n' + indent.prev + indent.base; + return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; +} + +function arrObjKeys(obj, inspect) { + var isArr = isArray(obj); + var xs = []; + + if (isArr) { + xs.length = obj.length; + + for (var i = 0; i < obj.length; i++) { + xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; + } + } + + var syms = typeof gOPS === 'function' ? gOPS(obj) : []; + var symMap; + + if (hasShammedSymbols) { + symMap = {}; + + for (var k = 0; k < syms.length; k++) { + symMap['$' + syms[k]] = syms[k]; + } + } + + for (var key in obj) { + if (!has(obj, key)) { + continue; + } + + if (isArr && String(Number(key)) === key && key < obj.length) { + continue; + } + + if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { + continue; + } else if ($test.call(/[^\w$]/, key)) { + xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); + } else { + xs.push(key + ': ' + inspect(obj[key], obj)); + } + } + + if (typeof gOPS === 'function') { + for (var j = 0; j < syms.length; j++) { + if (isEnumerable.call(obj, syms[j])) { + xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); + } + } + } + + return xs; +} + +},{"./util.inspect":1}],13:[function(require,module,exports){ +"use strict"; + +var process = module.exports = {}; +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} + +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} + +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +})(); + +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + return setTimeout(fun, 0); + } + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + return cachedSetTimeout.call(this, fun, 0); + } + } +} + +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + return clearTimeout(marker); + } + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + return cachedClearTimeout(marker); + } catch (e) { + try { + return cachedClearTimeout.call(null, marker); + } catch (e) { + return cachedClearTimeout.call(this, marker); + } + } +} + +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + + while (len) { + currentQueue = queue; + queue = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue.push(new Item(fun, args)); + + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +function Item(fun, array) { + this.fun = fun; + this.array = array; +} + +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { + return []; +}; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { + return '/'; +}; + +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +process.umask = function () { + return 0; +}; + +},{}],14:[function(require,module,exports){ +'use strict'; + +var replace = String.prototype.replace; +var percentTwenties = /%20/g; +var Format = { + RFC1738: 'RFC1738', + RFC3986: 'RFC3986' +}; +module.exports = { + 'default': Format.RFC3986, + formatters: { + RFC1738: function RFC1738(value) { + return replace.call(value, percentTwenties, '+'); + }, + RFC3986: function RFC3986(value) { + return String(value); + } + }, + RFC1738: Format.RFC1738, + RFC3986: Format.RFC3986 +}; + +},{}],15:[function(require,module,exports){ +'use strict'; + +var stringify = require('./stringify'); + +var parse = require('./parse'); + +var formats = require('./formats'); + +module.exports = { + formats: formats, + parse: parse, + stringify: stringify +}; + +},{"./formats":14,"./parse":16,"./stringify":17}],16:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; +var defaults = { + allowDots: false, + allowPrototypes: false, + allowSparse: false, + arrayLimit: 20, + charset: 'utf-8', + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: '&', + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1000, + parseArrays: true, + plainObjects: false, + strictNullHandling: false +}; + +var interpretNumericEntities = function interpretNumericEntities(str) { + return str.replace(/&#(\d+);/g, function ($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); +}; + +var parseArrayValue = function parseArrayValue(val, options) { + if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { + return val.split(','); + } + + return val; +}; + +var isoSentinel = 'utf8=%26%2310003%3B'; +var charsetSentinel = 'utf8=%E2%9C%93'; + +var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; + var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; + var i; + var charset = options.charset; + + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf('utf8=') === 0) { + if (parts[i] === charsetSentinel) { + charset = 'utf-8'; + } else if (parts[i] === isoSentinel) { + charset = 'iso-8859-1'; + } + + skipIndex = i; + i = parts.length; + } + } + } + + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + + var part = parts[i]; + var bracketEqualsPos = part.indexOf(']='); + var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; + var key, val; + + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, 'key'); + val = options.strictNullHandling ? null : ''; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); + val = utils.maybeMap(parseArrayValue(part.slice(pos + 1), options), function (encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, 'value'); + }); + } + + if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { + val = interpretNumericEntities(val); + } + + if (part.indexOf('[]=') > -1) { + val = isArray(val) ? [val] : val; + } + + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + + return obj; +}; + +var parseObject = function parseObject(chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + + if (root === '[]' && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + + if (!options.parseArrays && cleanRoot === '') { + obj = { + 0: leaf + }; + } else if (!isNaN(index) && root !== cleanRoot && String(index) === cleanRoot && index >= 0 && options.parseArrays && index <= options.arrayLimit) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + + leaf = obj; + } + + return leaf; +}; + +var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + var keys = []; + + if (parent) { + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(parent); + } + + var i = 0; + + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + + keys.push(segment[1]); + } + + if (segment) { + keys.push('[' + key.slice(segment.index) + ']'); + } + + return parseObject(keys, val, options, valuesParsed); +}; + +var normalizeParseOptions = function normalizeParseOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { + throw new TypeError('Decoder has to be a function.'); + } + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; + return { + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, + allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, + arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === 'number' || opts.depth === false ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (str, opts) { + var options = normalizeParseOptions(opts); + + if (str === '' || str === null || typeof str === 'undefined') { + return options.plainObjects ? Object.create(null) : {}; + } + + var tempObj = typeof str === 'string' ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + var keys = Object.keys(tempObj); + + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); + obj = utils.merge(obj, newObj, options); + } + + if (options.allowSparse === true) { + return obj; + } + + return utils.compact(obj); +}; + +},{"./utils":18}],17:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var getSideChannel = require('side-channel'); + +var utils = require('./utils'); + +var formats = require('./formats'); + +var has = Object.prototype.hasOwnProperty; +var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + '[]'; + }, + comma: 'comma', + indices: function indices(prefix, key) { + return prefix + '[' + key + ']'; + }, + repeat: function repeat(prefix) { + return prefix; + } +}; +var isArray = Array.isArray; +var split = String.prototype.split; +var push = Array.prototype.push; + +var pushToArray = function pushToArray(arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); +}; + +var toISO = Date.prototype.toISOString; +var defaultFormat = formats['default']; +var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: 'utf-8', + charsetSentinel: false, + delimiter: '&', + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false +}; + +var isNonNullishPrimitive = function isNonNullishPrimitive(v) { + return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || _typeof(v) === 'symbol' || typeof v === 'bigint'; +}; + +var sentinel = {}; + +var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { + var obj = object; + var tmpSc = sideChannel; + var step = 0; + var findFlag = false; + + while ((tmpSc = tmpSc.get(sentinel)) !== undefined && !findFlag) { + var pos = tmpSc.get(object); + step += 1; + + if (typeof pos !== 'undefined') { + if (pos === step) { + throw new RangeError('Cyclic object value'); + } else { + findFlag = true; + } + } + + if (typeof tmpSc.get(sentinel) === 'undefined') { + step = 0; + } + } + + if (typeof filter === 'function') { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === 'comma' && isArray(obj)) { + obj = utils.maybeMap(obj, function (value) { + if (value instanceof Date) { + return serializeDate(value); + } + + return value; + }); + } + + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix; + } + + obj = ''; + } + + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); + + if (generateArrayPrefix === 'comma' && encodeValuesOnly) { + var valuesArray = split.call(String(obj), ','); + var valuesJoined = ''; + + for (var i = 0; i < valuesArray.length; ++i) { + valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format)); + } + + return [formatter(keyValue) + '=' + valuesJoined]; + } + + return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; + } + + return [formatter(prefix) + '=' + formatter(String(obj))]; + } + + var values = []; + + if (typeof obj === 'undefined') { + return values; + } + + var objKeys; + + if (generateArrayPrefix === 'comma' && isArray(obj)) { + objKeys = [{ + value: obj.length > 0 ? obj.join(',') || null : undefined + }]; + } else if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + + for (var j = 0; j < objKeys.length; ++j) { + var key = objKeys[j]; + var value = _typeof(key) === 'object' && key.value !== undefined ? key.value : obj[key]; + + if (skipNulls && value === null) { + continue; + } + + var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? '.' + key : '[' + key + ']'); + sideChannel.set(object, step); + var valueSideChannel = getSideChannel(); + valueSideChannel.set(sentinel, sideChannel); + pushToArray(values, stringify(value, keyPrefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel)); + } + + return values; +}; + +var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { + if (!opts) { + return defaults; + } + + if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') { + throw new TypeError('Encoder has to be a function.'); + } + + var charset = opts.charset || defaults.charset; + + if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { + throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); + } + + var format = formats['default']; + + if (typeof opts.format !== 'undefined') { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError('Unknown format option provided.'); + } + + format = opts.format; + } + + var formatter = formats.formatters[format]; + var filter = defaults.filter; + + if (typeof opts.filter === 'function' || isArray(opts.filter)) { + filter = opts.filter; + } + + return { + addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, + charset: charset, + charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter: filter, + format: format, + formatter: formatter, + serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === 'function' ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling + }; +}; + +module.exports = function (object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + var objKeys; + var filter; + + if (typeof options.filter === 'function') { + filter = options.filter; + obj = filter('', obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + + var keys = []; + + if (_typeof(obj) !== 'object' || obj === null) { + return ''; + } + + var arrayFormat; + + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && 'indices' in opts) { + arrayFormat = opts.indices ? 'indices' : 'repeat'; + } else { + arrayFormat = 'indices'; + } + + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + + if (!objKeys) { + objKeys = Object.keys(obj); + } + + if (options.sort) { + objKeys.sort(options.sort); + } + + var sideChannel = getSideChannel(); + + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + + if (options.skipNulls && obj[key] === null) { + continue; + } + + pushToArray(keys, stringify(obj[key], key, generateArrayPrefix, options.strictNullHandling, options.skipNulls, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel)); + } + + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? '?' : ''; + + if (options.charsetSentinel) { + if (options.charset === 'iso-8859-1') { + prefix += 'utf8=%26%2310003%3B&'; + } else { + prefix += 'utf8=%E2%9C%93&'; + } + } + + return joined.length > 0 ? prefix + joined : ''; +}; + +},{"./formats":14,"./utils":18,"side-channel":19}],18:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var formats = require('./formats'); + +var has = Object.prototype.hasOwnProperty; +var isArray = Array.isArray; + +var hexTable = function () { + var array = []; + + for (var i = 0; i < 256; ++i) { + array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); + } + + return array; +}(); + +var compactQueue = function compactQueue(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + + if (isArray(obj)) { + var compacted = []; + + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== 'undefined') { + compacted.push(obj[j]); + } + } + + item.obj[item.prop] = compacted; + } + } +}; + +var arrayToObject = function arrayToObject(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== 'undefined') { + obj[i] = source[i]; + } + } + + return obj; +}; + +var merge = function merge(target, source, options) { + if (!source) { + return target; + } + + if (_typeof(source) !== 'object') { + if (isArray(target)) { + target.push(source); + } else if (target && _typeof(target) === 'object') { + if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + + return target; + } + + if (!target || _typeof(target) !== 'object') { + return [target].concat(source); + } + + var mergeTarget = target; + + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + + if (isArray(target) && isArray(source)) { + source.forEach(function (item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + + if (targetItem && _typeof(targetItem) === 'object' && item && _typeof(item) === 'object') { + target[i] = merge(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + + return Object.keys(source).reduce(function (acc, key) { + var value = source[key]; + + if (has.call(acc, key)) { + acc[key] = merge(acc[key], value, options); + } else { + acc[key] = value; + } + + return acc; + }, mergeTarget); +}; + +var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function (acc, key) { + acc[key] = source[key]; + return acc; + }, target); +}; + +var decode = function decode(str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, ' '); + + if (charset === 'iso-8859-1') { + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } +}; + +var encode = function encode(str, defaultEncoder, charset, kind, format) { + if (str.length === 0) { + return str; + } + + var string = str; + + if (_typeof(str) === 'symbol') { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== 'string') { + string = String(str); + } + + if (charset === 'iso-8859-1') { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { + return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; + }); + } + + var out = ''; + + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + + if (c === 0x2D || c === 0x2E || c === 0x5F || c === 0x7E || c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || format === formats.RFC1738 && (c === 0x28 || c === 0x29)) { + out += string.charAt(i); + continue; + } + + if (c < 0x80) { + out = out + hexTable[c]; + continue; + } + + if (c < 0x800) { + out = out + (hexTable[0xC0 | c >> 6] + hexTable[0x80 | c & 0x3F]); + continue; + } + + if (c < 0xD800 || c >= 0xE000) { + out = out + (hexTable[0xE0 | c >> 12] + hexTable[0x80 | c >> 6 & 0x3F] + hexTable[0x80 | c & 0x3F]); + continue; + } + + i += 1; + c = 0x10000 + ((c & 0x3FF) << 10 | string.charCodeAt(i) & 0x3FF); + out += hexTable[0xF0 | c >> 18] + hexTable[0x80 | c >> 12 & 0x3F] + hexTable[0x80 | c >> 6 & 0x3F] + hexTable[0x80 | c & 0x3F]; + } + + return out; +}; + +var compact = function compact(value) { + var queue = [{ + obj: { + o: value + }, + prop: 'o' + }]; + var refs = []; + + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + var keys = Object.keys(obj); + + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + + if (_typeof(val) === 'object' && val !== null && refs.indexOf(val) === -1) { + queue.push({ + obj: obj, + prop: key + }); + refs.push(val); + } + } + } + + compactQueue(queue); + return value; +}; + +var isRegExp = function isRegExp(obj) { + return Object.prototype.toString.call(obj) === '[object RegExp]'; +}; + +var isBuffer = function isBuffer(obj) { + if (!obj || _typeof(obj) !== 'object') { + return false; + } + + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); +}; + +var combine = function combine(a, b) { + return [].concat(a, b); +}; + +var maybeMap = function maybeMap(val, fn) { + if (isArray(val)) { + var mapped = []; + + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + + return mapped; + } + + return fn(val); +}; + +module.exports = { + arrayToObject: arrayToObject, + assign: assign, + combine: combine, + compact: compact, + decode: decode, + encode: encode, + isBuffer: isBuffer, + isRegExp: isRegExp, + maybeMap: maybeMap, + merge: merge +}; + +},{"./formats":14}],19:[function(require,module,exports){ +'use strict'; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var GetIntrinsic = require('get-intrinsic'); + +var callBound = require('call-bind/callBound'); + +var inspect = require('object-inspect'); + +var $TypeError = GetIntrinsic('%TypeError%'); +var $WeakMap = GetIntrinsic('%WeakMap%', true); +var $Map = GetIntrinsic('%Map%', true); +var $weakMapGet = callBound('WeakMap.prototype.get', true); +var $weakMapSet = callBound('WeakMap.prototype.set', true); +var $weakMapHas = callBound('WeakMap.prototype.has', true); +var $mapGet = callBound('Map.prototype.get', true); +var $mapSet = callBound('Map.prototype.set', true); +var $mapHas = callBound('Map.prototype.has', true); + +var listGetNode = function listGetNode(list, key) { + for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { + if (curr.key === key) { + prev.next = curr.next; + curr.next = list.next; + list.next = curr; + return curr; + } + } +}; + +var listGet = function listGet(objects, key) { + var node = listGetNode(objects, key); + return node && node.value; +}; + +var listSet = function listSet(objects, key, value) { + var node = listGetNode(objects, key); + + if (node) { + node.value = value; + } else { + objects.next = { + key: key, + next: objects.next, + value: value + }; + } +}; + +var listHas = function listHas(objects, key) { + return !!listGetNode(objects, key); +}; + +module.exports = function getSideChannel() { + var $wm; + var $m; + var $o; + var channel = { + assert: function assert(key) { + if (!channel.has(key)) { + throw new $TypeError('Side channel does not contain ' + inspect(key)); + } + }, + get: function get(key) { + if ($WeakMap && key && (_typeof(key) === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapGet($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapGet($m, key); + } + } else { + if ($o) { + return listGet($o, key); + } + } + }, + has: function has(key) { + if ($WeakMap && key && (_typeof(key) === 'object' || typeof key === 'function')) { + if ($wm) { + return $weakMapHas($wm, key); + } + } else if ($Map) { + if ($m) { + return $mapHas($m, key); + } + } else { + if ($o) { + return listHas($o, key); + } + } + + return false; + }, + set: function set(key, value) { + if ($WeakMap && key && (_typeof(key) === 'object' || typeof key === 'function')) { + if (!$wm) { + $wm = new $WeakMap(); + } + + $weakMapSet($wm, key, value); + } else if ($Map) { + if (!$m) { + $m = new $Map(); + } + + $mapSet($m, key, value); + } else { + if (!$o) { + $o = { + key: {}, + next: null + }; + } + + listSet($o, key, value); + } + } + }; + return channel; +}; + +},{"call-bind/callBound":2,"get-intrinsic":8,"object-inspect":12}],20:[function(require,module,exports){ +"use strict"; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function Agent() { + this._defaults = []; +} + +var _loop = function _loop() { + var fn = _arr[_i]; + + Agent.prototype[fn] = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + this._defaults.push({ + fn: fn, + args: args + }); + + return this; + }; +}; + +for (var _i = 0, _arr = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts']; _i < _arr.length; _i++) { + _loop(); +} + +Agent.prototype._setDefaults = function (request) { + var _iterator = _createForOfIteratorHelper(this._defaults), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var def = _step.value; + request[def.fn].apply(request, _toConsumableArray(def.args)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } +}; + +module.exports = Agent; + +},{}],21:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +var root; + +if (typeof window !== 'undefined') { + root = window; +} else if (typeof self === 'undefined') { + console.warn('Using browser-only version of superagent in non-browser environment'); + root = void 0; +} else { + root = self; +} + +var Emitter = require('component-emitter'); + +var safeStringify = require('fast-safe-stringify'); + +var qs = require('qs'); + +var RequestBase = require('./request-base'); + +var _require = require('./utils'), + isObject = _require.isObject, + mixin = _require.mixin, + hasOwn = _require.hasOwn; + +var ResponseBase = require('./response-base'); + +var Agent = require('./agent-base'); + +function noop() {} + +module.exports = function (method, url) { + if (typeof url === 'function') { + return new exports.Request('GET', method).end(url); + } + + if (arguments.length === 1) { + return new exports.Request('GET', method); + } + + return new exports.Request(method, url); +}; + +exports = module.exports; +var request = exports; +exports.Request = Request; + +request.getXHR = function () { + if (root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:' || !root.ActiveXObject)) { + return new XMLHttpRequest(); + } + + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch (_unused) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.6.0'); + } catch (_unused2) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.3.0'); + } catch (_unused3) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP'); + } catch (_unused4) {} + + throw new Error('Browser-only version of superagent could not find XHR'); +}; + +var trim = ''.trim ? function (s) { + return s.trim(); +} : function (s) { + return s.replace(/(^\s*|\s*$)/g, ''); +}; + +function serialize(object) { + if (!isObject(object)) return object; + var pairs = []; + + for (var key in object) { + if (hasOwn(object, key)) pushEncodedKeyValuePair(pairs, key, object[key]); + } + + return pairs.join('&'); +} + +function pushEncodedKeyValuePair(pairs, key, value) { + if (value === undefined) return; + + if (value === null) { + pairs.push(encodeURI(key)); + return; + } + + if (Array.isArray(value)) { + var _iterator = _createForOfIteratorHelper(value), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var v = _step.value; + pushEncodedKeyValuePair(pairs, key, v); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else if (isObject(value)) { + for (var subkey in value) { + if (hasOwn(value, subkey)) pushEncodedKeyValuePair(pairs, "".concat(key, "[").concat(subkey, "]"), value[subkey]); + } + } else { + pairs.push(encodeURI(key) + '=' + encodeURIComponent(value)); + } +} + +request.serializeObject = serialize; + +function parseString(string_) { + var object = {}; + var pairs = string_.split('&'); + var pair; + var pos; + + for (var i = 0, length_ = pairs.length; i < length_; ++i) { + pair = pairs[i]; + pos = pair.indexOf('='); + + if (pos === -1) { + object[decodeURIComponent(pair)] = ''; + } else { + object[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent(pair.slice(pos + 1)); + } + } + + return object; +} + +request.parseString = parseString; +request.types = { + html: 'text/html', + json: 'application/json', + xml: 'text/xml', + urlencoded: 'application/x-www-form-urlencoded', + form: 'application/x-www-form-urlencoded', + 'form-data': 'application/x-www-form-urlencoded' +}; +request.serialize = { + 'application/x-www-form-urlencoded': qs.stringify, + 'application/json': safeStringify +}; +request.parse = { + 'application/x-www-form-urlencoded': parseString, + 'application/json': JSON.parse +}; + +function parseHeader(string_) { + var lines = string_.split(/\r?\n/); + var fields = {}; + var index; + var line; + var field; + var value; + + for (var i = 0, length_ = lines.length; i < length_; ++i) { + line = lines[i]; + index = line.indexOf(':'); + + if (index === -1) { + continue; + } + + field = line.slice(0, index).toLowerCase(); + value = trim(line.slice(index + 1)); + fields[field] = value; + } + + return fields; +} + +function isJSON(mime) { + return /[/+]json($|[^-\w])/i.test(mime); +} + +function Response(request_) { + this.req = request_; + this.xhr = this.req.xhr; + this.text = this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text') || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null; + this.statusText = this.req.xhr.statusText; + var status = this.xhr.status; + + if (status === 1223) { + status = 204; + } + + this._setStatusProperties(status); + + this.headers = parseHeader(this.xhr.getAllResponseHeaders()); + this.header = this.headers; + this.header['content-type'] = this.xhr.getResponseHeader('content-type'); + + this._setHeaderProperties(this.header); + + if (this.text === null && request_._responseType) { + this.body = this.xhr.response; + } else { + this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response); + } +} + +mixin(Response.prototype, ResponseBase.prototype); + +Response.prototype._parseBody = function (string_) { + var parse = request.parse[this.type]; + + if (this.req._parser) { + return this.req._parser(this, string_); + } + + if (!parse && isJSON(this.type)) { + parse = request.parse['application/json']; + } + + return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null; +}; + +Response.prototype.toError = function () { + var req = this.req; + var method = req.method; + var url = req.url; + var message = "cannot ".concat(method, " ").concat(url, " (").concat(this.status, ")"); + var error = new Error(message); + error.status = this.status; + error.method = method; + error.url = url; + return error; +}; + +request.Response = Response; + +function Request(method, url) { + var self = this; + this._query = this._query || []; + this.method = method; + this.url = url; + this.header = {}; + this._header = {}; + this.on('end', function () { + var error = null; + var res = null; + + try { + res = new Response(self); + } catch (error_) { + error = new Error('Parser is unable to parse the response'); + error.parse = true; + error.original = error_; + + if (self.xhr) { + error.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response; + error.status = self.xhr.status ? self.xhr.status : null; + error.statusCode = error.status; + } else { + error.rawResponse = null; + error.status = null; + } + + return self.callback(error); + } + + self.emit('response', res); + var new_error; + + try { + if (!self._isResponseOK(res)) { + new_error = new Error(res.statusText || res.text || 'Unsuccessful HTTP response'); + } + } catch (err) { + new_error = err; + } + + if (new_error) { + new_error.original = error; + new_error.response = res; + new_error.status = res.status; + self.callback(new_error, res); + } else { + self.callback(null, res); + } + }); +} + +Emitter(Request.prototype); +mixin(Request.prototype, RequestBase.prototype); + +Request.prototype.type = function (type) { + this.set('Content-Type', request.types[type] || type); + return this; +}; + +Request.prototype.accept = function (type) { + this.set('Accept', request.types[type] || type); + return this; +}; + +Request.prototype.auth = function (user, pass, options) { + if (arguments.length === 1) pass = ''; + + if (_typeof(pass) === 'object' && pass !== null) { + options = pass; + pass = ''; + } + + if (!options) { + options = { + type: typeof btoa === 'function' ? 'basic' : 'auto' + }; + } + + var encoder = function encoder(string) { + if (typeof btoa === 'function') { + return btoa(string); + } + + throw new Error('Cannot use basic auth, btoa is not a function'); + }; + + return this._auth(user, pass, options, encoder); +}; + +Request.prototype.query = function (value) { + if (typeof value !== 'string') value = serialize(value); + if (value) this._query.push(value); + return this; +}; + +Request.prototype.attach = function (field, file, options) { + if (file) { + if (this._data) { + throw new Error("superagent can't mix .send() and .attach()"); + } + + this._getFormData().append(field, file, options || file.name); + } + + return this; +}; + +Request.prototype._getFormData = function () { + if (!this._formData) { + this._formData = new root.FormData(); + } + + return this._formData; +}; + +Request.prototype.callback = function (error, res) { + if (this._shouldRetry(error, res)) { + return this._retry(); + } + + var fn = this._callback; + this.clearTimeout(); + + if (error) { + if (this._maxRetries) error.retries = this._retries - 1; + this.emit('error', error); + } + + fn(error, res); +}; + +Request.prototype.crossDomainError = function () { + var error = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); + error.crossDomain = true; + error.status = this.status; + error.method = this.method; + error.url = this.url; + this.callback(error); +}; + +Request.prototype.agent = function () { + console.warn('This is not supported in browser version of superagent'); + return this; +}; + +Request.prototype.ca = Request.prototype.agent; +Request.prototype.buffer = Request.prototype.ca; + +Request.prototype.write = function () { + throw new Error('Streaming is not supported in browser version of superagent'); +}; + +Request.prototype.pipe = Request.prototype.write; + +Request.prototype._isHost = function (object) { + return object && _typeof(object) === 'object' && !Array.isArray(object) && Object.prototype.toString.call(object) !== '[object Object]'; +}; + +Request.prototype.end = function (fn) { + if (this._endCalled) { + console.warn('Warning: .end() was called twice. This is not supported in superagent'); + } + + this._endCalled = true; + this._callback = fn || noop; + + this._finalizeQueryString(); + + this._end(); +}; + +Request.prototype._setUploadTimeout = function () { + var self = this; + + if (this._uploadTimeout && !this._uploadTimeoutTimer) { + this._uploadTimeoutTimer = setTimeout(function () { + self._timeoutError('Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT'); + }, this._uploadTimeout); + } +}; + +Request.prototype._end = function () { + if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called')); + var self = this; + this.xhr = request.getXHR(); + var xhr = this.xhr; + var data = this._formData || this._data; + + this._setTimeouts(); + + xhr.addEventListener('readystatechange', function () { + var readyState = xhr.readyState; + + if (readyState >= 2 && self._responseTimeoutTimer) { + clearTimeout(self._responseTimeoutTimer); + } + + if (readyState !== 4) { + return; + } + + var status; + + try { + status = xhr.status; + } catch (_unused5) { + status = 0; + } + + if (!status) { + if (self.timedout || self._aborted) return; + return self.crossDomainError(); + } + + self.emit('end'); + }); + + var handleProgress = function handleProgress(direction, e) { + if (e.total > 0) { + e.percent = e.loaded / e.total * 100; + + if (e.percent === 100) { + clearTimeout(self._uploadTimeoutTimer); + } + } + + e.direction = direction; + self.emit('progress', e); + }; + + if (this.hasListeners('progress')) { + try { + xhr.addEventListener('progress', handleProgress.bind(null, 'download')); + + if (xhr.upload) { + xhr.upload.addEventListener('progress', handleProgress.bind(null, 'upload')); + } + } catch (_unused6) {} + } + + if (xhr.upload) { + this._setUploadTimeout(); + } + + try { + if (this.username && this.password) { + xhr.open(this.method, this.url, true, this.username, this.password); + } else { + xhr.open(this.method, this.url, true); + } + } catch (err) { + return this.callback(err); + } + + if (this._withCredentials) xhr.withCredentials = true; + + if (!this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data)) { + var contentType = this._header['content-type']; + + var _serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; + + if (!_serialize && isJSON(contentType)) { + _serialize = request.serialize['application/json']; + } + + if (_serialize) data = _serialize(data); + } + + for (var field in this.header) { + if (this.header[field] === null) continue; + if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]); + } + + if (this._responseType) { + xhr.responseType = this._responseType; + } + + this.emit('request', this); + xhr.send(typeof data === 'undefined' ? null : data); +}; + +request.agent = function () { + return new Agent(); +}; + +var _loop = function _loop() { + var method = _arr[_i]; + + Agent.prototype[method.toLowerCase()] = function (url, fn) { + var request_ = new request.Request(method, url); + + this._setDefaults(request_); + + if (fn) { + request_.end(fn); + } + + return request_; + }; +}; + +for (var _i = 0, _arr = ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']; _i < _arr.length; _i++) { + _loop(); +} + +Agent.prototype.del = Agent.prototype.delete; + +request.get = function (url, data, fn) { + var request_ = request('GET', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; + +request.head = function (url, data, fn) { + var request_ = request('HEAD', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; + +request.options = function (url, data, fn) { + var request_ = request('OPTIONS', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; + +function del(url, data, fn) { + var request_ = request('DELETE', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +} + +request.del = del; +request.delete = del; + +request.patch = function (url, data, fn) { + var request_ = request('PATCH', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; + +request.post = function (url, data, fn) { + var request_ = request('POST', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; + +request.put = function (url, data, fn) { + var request_ = request('PUT', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; + +},{"./agent-base":20,"./request-base":22,"./response-base":23,"./utils":24,"component-emitter":4,"fast-safe-stringify":5,"qs":15}],22:[function(require,module,exports){ +(function (process){(function (){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var semver = require('semver'); + +var _require = require('./utils'), + isObject = _require.isObject, + hasOwn = _require.hasOwn; + +module.exports = RequestBase; + +function RequestBase() {} + +RequestBase.prototype.clearTimeout = function () { + clearTimeout(this._timer); + clearTimeout(this._responseTimeoutTimer); + clearTimeout(this._uploadTimeoutTimer); + delete this._timer; + delete this._responseTimeoutTimer; + delete this._uploadTimeoutTimer; + return this; +}; + +RequestBase.prototype.parse = function (fn) { + this._parser = fn; + return this; +}; + +RequestBase.prototype.responseType = function (value) { + this._responseType = value; + return this; +}; + +RequestBase.prototype.serialize = function (fn) { + this._serializer = fn; + return this; +}; + +RequestBase.prototype.timeout = function (options) { + if (!options || _typeof(options) !== 'object') { + this._timeout = options; + this._responseTimeout = 0; + this._uploadTimeout = 0; + return this; + } + + for (var option in options) { + if (hasOwn(options, option)) { + switch (option) { + case 'deadline': + this._timeout = options.deadline; + break; + + case 'response': + this._responseTimeout = options.response; + break; + + case 'upload': + this._uploadTimeout = options.upload; + break; + + default: + console.warn('Unknown timeout option', option); + } + } + } + + return this; +}; + +RequestBase.prototype.retry = function (count, fn) { + if (arguments.length === 0 || count === true) count = 1; + if (count <= 0) count = 0; + this._maxRetries = count; + this._retries = 0; + this._retryCallback = fn; + return this; +}; + +var ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']); +var STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]); + +RequestBase.prototype._shouldRetry = function (error, res) { + if (!this._maxRetries || this._retries++ >= this._maxRetries) { + return false; + } + + if (this._retryCallback) { + try { + var override = this._retryCallback(error, res); + + if (override === true) return true; + if (override === false) return false; + } catch (error_) { + console.error(error_); + } + } + + if (res && res.status && STATUS_CODES.has(res.status)) return true; + + if (error) { + if (error.code && ERROR_CODES.has(error.code)) return true; + if (error.timeout && error.code === 'ECONNABORTED') return true; + if (error.crossDomain) return true; + } + + return false; +}; + +RequestBase.prototype._retry = function () { + this.clearTimeout(); + + if (this.req) { + this.req = null; + this.req = this.request(); + } + + this._aborted = false; + this.timedout = false; + this.timedoutError = null; + return this._end(); +}; + +RequestBase.prototype.then = function (resolve, reject) { + var _this = this; + + if (!this._fullfilledPromise) { + var self = this; + + if (this._endCalled) { + console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises'); + } + + this._fullfilledPromise = new Promise(function (resolve, reject) { + self.on('abort', function () { + if (_this._maxRetries && _this._maxRetries > _this._retries) { + return; + } + + if (_this.timedout && _this.timedoutError) { + reject(_this.timedoutError); + return; + } + + var error = new Error('Aborted'); + error.code = 'ABORTED'; + error.status = _this.status; + error.method = _this.method; + error.url = _this.url; + reject(error); + }); + self.end(function (error, res) { + if (error) reject(error);else resolve(res); + }); + }); + } + + return this._fullfilledPromise.then(resolve, reject); +}; + +RequestBase.prototype.catch = function (cb) { + return this.then(undefined, cb); +}; + +RequestBase.prototype.use = function (fn) { + fn(this); + return this; +}; + +RequestBase.prototype.ok = function (cb) { + if (typeof cb !== 'function') throw new Error('Callback required'); + this._okCallback = cb; + return this; +}; + +RequestBase.prototype._isResponseOK = function (res) { + if (!res) { + return false; + } + + if (this._okCallback) { + return this._okCallback(res); + } + + return res.status >= 200 && res.status < 300; +}; + +RequestBase.prototype.get = function (field) { + return this._header[field.toLowerCase()]; +}; + +RequestBase.prototype.getHeader = RequestBase.prototype.get; + +RequestBase.prototype.set = function (field, value) { + if (isObject(field)) { + for (var key in field) { + if (hasOwn(field, key)) this.set(key, field[key]); + } + + return this; + } + + this._header[field.toLowerCase()] = value; + this.header[field] = value; + return this; +}; + +RequestBase.prototype.unset = function (field) { + delete this._header[field.toLowerCase()]; + delete this.header[field]; + return this; +}; + +RequestBase.prototype.field = function (name, value, options) { + if (name === null || undefined === name) { + throw new Error('.field(name, val) name can not be empty'); + } + + if (this._data) { + throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); + } + + if (isObject(name)) { + for (var key in name) { + if (hasOwn(name, key)) this.field(key, name[key]); + } + + return this; + } + + if (Array.isArray(value)) { + for (var i in value) { + if (hasOwn(value, i)) this.field(name, value[i]); + } + + return this; + } + + if (value === null || undefined === value) { + throw new Error('.field(name, val) val can not be empty'); + } + + if (typeof value === 'boolean') { + value = String(value); + } + + this._getFormData().append(name, value, options); + + return this; +}; + +RequestBase.prototype.abort = function () { + if (this._aborted) { + return this; + } + + this._aborted = true; + if (this.xhr) this.xhr.abort(); + + if (this.req) { + if (semver.gte(process.version, 'v13.0.0') && semver.lt(process.version, 'v14.0.0')) { + throw new Error('Superagent does not work in v13 properly with abort() due to Node.js core changes'); + } else if (semver.gte(process.version, 'v14.0.0')) { + this.req.destroyed = true; + } + + this.req.abort(); + } + + this.clearTimeout(); + this.emit('abort'); + return this; +}; + +RequestBase.prototype._auth = function (user, pass, options, base64Encoder) { + switch (options.type) { + case 'basic': + this.set('Authorization', "Basic ".concat(base64Encoder("".concat(user, ":").concat(pass)))); + break; + + case 'auto': + this.username = user; + this.password = pass; + break; + + case 'bearer': + this.set('Authorization', "Bearer ".concat(user)); + break; + + default: + break; + } + + return this; +}; + +RequestBase.prototype.withCredentials = function (on) { + if (on === undefined) on = true; + this._withCredentials = on; + return this; +}; + +RequestBase.prototype.redirects = function (n) { + this._maxRedirects = n; + return this; +}; + +RequestBase.prototype.maxResponseSize = function (n) { + if (typeof n !== 'number') { + throw new TypeError('Invalid argument'); + } + + this._maxResponseSize = n; + return this; +}; + +RequestBase.prototype.toJSON = function () { + return { + method: this.method, + url: this.url, + data: this._data, + headers: this._header + }; +}; + +RequestBase.prototype.send = function (data) { + var isObject_ = isObject(data); + var type = this._header['content-type']; + + if (this._formData) { + throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); + } + + if (isObject_ && !this._data) { + if (Array.isArray(data)) { + this._data = []; + } else if (!this._isHost(data)) { + this._data = {}; + } + } else if (data && this._data && this._isHost(this._data)) { + throw new Error("Can't merge these send calls"); + } + + if (isObject_ && isObject(this._data)) { + for (var key in data) { + if (hasOwn(data, key)) this._data[key] = data[key]; + } + } else if (typeof data === 'string') { + if (!type) this.type('form'); + type = this._header['content-type']; + if (type) type = type.toLowerCase().trim(); + + if (type === 'application/x-www-form-urlencoded') { + this._data = this._data ? "".concat(this._data, "&").concat(data) : data; + } else { + this._data = (this._data || '') + data; + } + } else { + this._data = data; + } + + if (!isObject_ || this._isHost(data)) { + return this; + } + + if (!type) this.type('json'); + return this; +}; + +RequestBase.prototype.sortQuery = function (sort) { + this._sort = typeof sort === 'undefined' ? true : sort; + return this; +}; + +RequestBase.prototype._finalizeQueryString = function () { + var query = this._query.join('&'); + + if (query) { + this.url += (this.url.includes('?') ? '&' : '?') + query; + } + + this._query.length = 0; + + if (this._sort) { + var index = this.url.indexOf('?'); + + if (index >= 0) { + var queryArray = this.url.slice(index + 1).split('&'); + + if (typeof this._sort === 'function') { + queryArray.sort(this._sort); + } else { + queryArray.sort(); + } + + this.url = this.url.slice(0, index) + '?' + queryArray.join('&'); + } + } +}; + +RequestBase.prototype._appendQueryString = function () { + console.warn('Unsupported'); +}; + +RequestBase.prototype._timeoutError = function (reason, timeout, errno) { + if (this._aborted) { + return; + } + + var error = new Error("".concat(reason + timeout, "ms exceeded")); + error.timeout = timeout; + error.code = 'ECONNABORTED'; + error.errno = errno; + this.timedout = true; + this.timedoutError = error; + this.abort(); + this.callback(error); +}; + +RequestBase.prototype._setTimeouts = function () { + var self = this; + + if (this._timeout && !this._timer) { + this._timer = setTimeout(function () { + self._timeoutError('Timeout of ', self._timeout, 'ETIME'); + }, this._timeout); + } + + if (this._responseTimeout && !this._responseTimeoutTimer) { + this._responseTimeoutTimer = setTimeout(function () { + self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT'); + }, this._responseTimeout); + } +}; + +}).call(this)}).call(this,require('_process')) +},{"./utils":24,"_process":13,"semver":1}],23:[function(require,module,exports){ +"use strict"; + +var utils = require('./utils'); + +module.exports = ResponseBase; + +function ResponseBase() {} + +ResponseBase.prototype.get = function (field) { + return this.header[field.toLowerCase()]; +}; + +ResponseBase.prototype._setHeaderProperties = function (header) { + var ct = header['content-type'] || ''; + this.type = utils.type(ct); + var parameters = utils.params(ct); + + for (var key in parameters) { + if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key]; + } + + this.links = {}; + + try { + if (header.link) { + this.links = utils.parseLinks(header.link); + } + } catch (_unused) {} +}; + +ResponseBase.prototype._setStatusProperties = function (status) { + var type = Math.trunc(status / 100); + this.statusCode = status; + this.status = this.statusCode; + this.statusType = type; + this.info = type === 1; + this.ok = type === 2; + this.redirect = type === 3; + this.clientError = type === 4; + this.serverError = type === 5; + this.error = type === 4 || type === 5 ? this.toError() : false; + this.created = status === 201; + this.accepted = status === 202; + this.noContent = status === 204; + this.badRequest = status === 400; + this.unauthorized = status === 401; + this.notAcceptable = status === 406; + this.forbidden = status === 403; + this.notFound = status === 404; + this.unprocessableEntity = status === 422; +}; + +},{"./utils":24}],24:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +exports.type = function (string_) { + return string_.split(/ *; */).shift(); +}; + +exports.params = function (value) { + var object = {}; + + var _iterator = _createForOfIteratorHelper(value.split(/ *; */)), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var string_ = _step.value; + var parts = string_.split(/ *= */); + var key = parts.shift(); + + var _value = parts.shift(); + + if (key && _value) object[key] = _value; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return object; +}; + +exports.parseLinks = function (value) { + var object = {}; + + var _iterator2 = _createForOfIteratorHelper(value.split(/ *, */)), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var string_ = _step2.value; + var parts = string_.split(/ *; */); + var url = parts[0].slice(1, -1); + var rel = parts[1].split(/ *= */)[1].slice(1, -1); + object[rel] = url; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + return object; +}; + +exports.cleanHeader = function (header, changesOrigin) { + delete header['content-type']; + delete header['content-length']; + delete header['transfer-encoding']; + delete header.host; + + if (changesOrigin) { + delete header.authorization; + delete header.cookie; + } + + return header; +}; + +exports.isObject = function (object) { + return object !== null && _typeof(object) === 'object'; +}; + +exports.hasOwn = Object.hasOwn || function (object, property) { + if (object == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + return Object.prototype.hasOwnProperty.call(new Object(object), property); +}; + +exports.mixin = function (target, source) { + for (var key in source) { + if (exports.hasOwn(source, key)) { + target[key] = source[key]; + } + } +}; + +},{}]},{},[21])(21) +}); diff --git a/build/node_modules/superagent/dist/superagent.min.js b/build/node_modules/superagent/dist/superagent.min.js new file mode 100644 index 00000000..a2228884 --- /dev/null +++ b/build/node_modules/superagent/dist/superagent.min.js @@ -0,0 +1 @@ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).superagent=t()}}((function(){var t={exports:{}};function e(t){if(t)return function(t){for(var r in e.prototype)t[r]=e.prototype[r];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function r(){this.off(t,r),e.apply(this,arguments)}return r.fn=e,this.on(t,r),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,o=this._callbacks["$"+t];if(!o)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var n=0;nc.depthLimit)return void s("[...]",e,r,a);if(void 0!==c.edgesLimit&&n+1>c.edgesLimit)return void s("[...]",e,r,a);if(i.push(e),Array.isArray(e))for(l=0;le?1:0}function l(t,e,r,u){void 0===u&&(u=a());var l,f=function t(e,r,i,a,u,l,p){var f;if(l+=1,"object"==o(e)&&null!==e){for(f=0;fp.depthLimit)return void s("[...]",e,r,u);if(void 0!==p.edgesLimit&&i+1>p.edgesLimit)return void s("[...]",e,r,u);if(a.push(e),Array.isArray(e))for(f=0;f0)for(var o=0;o1&&"boolean"!=typeof e)throw new _('"allowMissing" argument must be a boolean');var r=function(t){var e=U(t,0,1),r=U(t,-1);if("%"===e&&"%"!==r)throw new S("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new S("invalid intrinsic syntax, expected opening `%`");var o=[];return D(t,M,(function(t,e,r,n){o[o.length]=r?D(n,L,"$1"):e||t})),o}(t),o=r.length>0?r[0]:"",n=q("%"+o+"%",e),i=n.name,a=n.value,u=!1,s=n.alias;s&&(o=s[0],F(r,N([0,1],s)));for(var c=1,l=!0;c=r.length){var h=O(a,p);a=(l=!!h)&&"get"in h&&!("originalValue"in h.get)?h.get:a[p]}else l=v(a,p),a=a[p];l&&!u&&(I[i]=a)}}return a},B=H("%Function.prototype.apply%"),W=H("%Function.prototype.call%"),z=H("%Reflect.apply%",!0)||b.call(W,B),$=H("%Object.getOwnPropertyDescriptor%",!0),G=H("%Object.defineProperty%",!0),J=H("%Math.max%");if(G)try{G({},"a",{value:1})}catch(Ar){G=null}j=function(t){var e=z(b,W,arguments);return $&&G&&$(e,"length").configurable&&G(e,"length",{value:1+J(0,t.length-(arguments.length-1))}),e};var X=function(){return z(b,B,arguments)};G?G(j,"apply",{value:X}):j.apply=X;var V=j(H("String.prototype.indexOf")),Q=function(t,e){var r=H(t,!!e);return"function"==typeof r&&V(t,".prototype.")>-1?j(r):r},K={};function Y(t){return(Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Z="function"==typeof Map&&Map.prototype,tt=Object.getOwnPropertyDescriptor&&Z?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,et=Z&&tt&&"function"==typeof tt.get?tt.get:null,rt=Z&&Map.prototype.forEach,ot="function"==typeof Set&&Set.prototype,nt=Object.getOwnPropertyDescriptor&&ot?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,it=ot&&nt&&"function"==typeof nt.get?nt.get:null,at=ot&&Set.prototype.forEach,ut="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,st="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ct="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,lt=Boolean.prototype.valueOf,pt=Object.prototype.toString,ft=Function.prototype.toString,yt=String.prototype.match,ht=String.prototype.slice,dt=String.prototype.replace,mt=String.prototype.toUpperCase,bt=String.prototype.toLowerCase,vt=RegExp.prototype.test,gt=Array.prototype.concat,St=Array.prototype.join,wt=Array.prototype.slice,_t=Math.floor,At="function"==typeof BigInt?BigInt.prototype.valueOf:null,Ot=Object.getOwnPropertySymbols,jt="function"==typeof Symbol&&"symbol"==Y(Symbol.iterator)?Symbol.prototype.toString:null,Et="function"==typeof Symbol&&"object"==Y(Symbol.iterator),Tt="function"==typeof Symbol&&Symbol.toStringTag&&(Y(Symbol.toStringTag),1)?Symbol.toStringTag:null,Pt=Object.prototype.propertyIsEnumerable,xt=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function kt(t,e){if(t===1/0||t===-1/0||t!=t||t&&t>-1e3&&t<1e3||vt.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var o=t<0?-_t(-t):_t(t);if(o!==t){var n=String(o),i=ht.call(e,n.length+1);return dt.call(n,r,"$&_")+"."+dt.call(dt.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return dt.call(e,r,"$&_")}var Rt=K.custom,It=Rt&&Dt(Rt)?Rt:null;function Ct(t,e,r){var o="double"===(r.quoteStyle||e)?'"':"'";return o+t+o}function Nt(t){return dt.call(String(t),/"/g,""")}function Ft(t){return!("[object Array]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}function Dt(t){if(Et)return t&&"object"==Y(t)&&t instanceof Symbol;if("symbol"==Y(t))return!0;if(!t||"object"!=Y(t)||!jt)return!1;try{return jt.call(t),!0}catch(Ar){}return!1}var Ut=Object.prototype.hasOwnProperty||function(t){return t in this};function Mt(t,e){return Ut.call(t,e)}function Lt(t){return pt.call(t)}function qt(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,o=t.length;r0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Mt(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var u=i.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,r){if(e.length>r.maxStringLength){var o=e.length-r.maxStringLength,n="... "+o+" more character"+(o>1?"s":"");return t(ht.call(e,0,r.maxStringLength),r)+n}return Ct(dt.call(dt.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Ht),"single",r)}(e,i);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var s=String(e);return u?kt(e,s):s}if("bigint"==typeof e){var c=String(e)+"n";return u?kt(e,c):c}var l=void 0===i.depth?5:i.depth;if(void 0===o&&(o=0),o>=l&&l>0&&"object"==Y(e))return Ft(e)?"[Array]":"[Object]";var p,f=function(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=St.call(Array(t.indent+1)," ")}return{base:r,prev:St.call(Array(e+1),r)}}(i,o);if(void 0===n)n=[];else if(qt(n,e)>=0)return"[Circular]";function y(e,r,a){if(r&&(n=wt.call(n)).push(r),a){var u={depth:i.depth};return Mt(i,"quoteStyle")&&(u.quoteStyle=i.quoteStyle),t(e,u,o+1,n)}return t(e,i,o+1,n)}if("function"==typeof e){var h=function(t){if(t.name)return t.name;var e=yt.call(ft.call(t),/^function\s*([\w$]+)/);return e?e[1]:null}(e),d=Gt(e,y);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(d.length>0?" { "+St.call(d,", ")+" }":"")}if(Dt(e)){var m=Et?dt.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):jt.call(e);return"object"!=Y(e)||Et?m:Bt(m)}if((p=e)&&"object"==Y(p)&&("undefined"!=typeof HTMLElement&&p instanceof HTMLElement||"string"==typeof p.nodeName&&"function"==typeof p.getAttribute)){for(var b="<"+bt.call(String(e.nodeName)),v=e.attributes||[],g=0;g"}if(Ft(e)){if(0===e.length)return"[]";var S=Gt(e,y);return f&&!function(t){for(var e=0;e=0)return!1;return!0}(S)?"["+$t(S,f)+"]":"[ "+St.call(S,", ")+" ]"}if(function(t){return!("[object Error]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e)){var w=Gt(e,y);return"cause"in e&&!Pt.call(e,"cause")?"{ ["+String(e)+"] "+St.call(gt.call("[cause]: "+y(e.cause),w),", ")+" }":0===w.length?"["+String(e)+"]":"{ ["+String(e)+"] "+St.call(w,", ")+" }"}if("object"==Y(e)&&a){if(It&&"function"==typeof e[It])return e[It]();if("symbol"!==a&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!et||!t||"object"!=Y(t))return!1;try{et.call(t);try{it.call(t)}catch(b){return!0}return t instanceof Map}catch(Ar){}return!1}(e)){var _=[];return rt.call(e,(function(t,r){_.push(y(r,e,!0)+" => "+y(t,e))})),zt("Map",et.call(e),_,f)}if(function(t){if(!it||!t||"object"!=Y(t))return!1;try{it.call(t);try{et.call(t)}catch(e){return!0}return t instanceof Set}catch(Ar){}return!1}(e)){var A=[];return at.call(e,(function(t){A.push(y(t,e))})),zt("Set",it.call(e),A,f)}if(function(t){if(!ut||!t||"object"!=Y(t))return!1;try{ut.call(t,ut);try{st.call(t,st)}catch(b){return!0}return t instanceof WeakMap}catch(Ar){}return!1}(e))return Wt("WeakMap");if(function(t){if(!st||!t||"object"!=Y(t))return!1;try{st.call(t,st);try{ut.call(t,ut)}catch(b){return!0}return t instanceof WeakSet}catch(Ar){}return!1}(e))return Wt("WeakSet");if(function(t){if(!ct||!t||"object"!=Y(t))return!1;try{return ct.call(t),!0}catch(Ar){}return!1}(e))return Wt("WeakRef");if(function(t){return!("[object Number]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e))return Bt(y(Number(e)));if(function(t){if(!t||"object"!=Y(t)||!At)return!1;try{return At.call(t),!0}catch(Ar){}return!1}(e))return Bt(y(At.call(e)));if(function(t){return!("[object Boolean]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e))return Bt(lt.call(e));if(function(t){return!("[object String]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e))return Bt(y(String(e)));if(!function(t){return!("[object Date]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e)&&!function(t){return!("[object RegExp]"!==Lt(t)||Tt&&"object"==Y(t)&&Tt in t)}(e)){var O=Gt(e,y),j=xt?xt(e)===Object.prototype:e instanceof Object||e.constructor===Object,E=e instanceof Object?"":"null prototype",T=!j&&Tt&&Object(e)===e&&Tt in e?ht.call(Lt(e),8,-1):E?"Object":"",P=(j||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(T||E?"["+St.call(gt.call([],T||[],E||[]),": ")+"] ":"");return 0===O.length?P+"{}":f?P+"{"+$t(O,f)+"}":P+"{ "+St.call(O,", ")+" }"}return String(e)}(t))},get:function(o){if(Vt&&o&&("object"==Jt(o)||"function"==typeof o)){if(t)return Kt(t,o)}else if(Qt){if(e)return te(e,o)}else if(r)return function(t,e){var r=oe(t,e);return r&&r.value}(r,o)},has:function(o){if(Vt&&o&&("object"==Jt(o)||"function"==typeof o)){if(t)return Zt(t,o)}else if(Qt){if(e)return re(e,o)}else if(r)return function(t,e){return!!oe(t,e)}(r,o);return!1},set:function(o,n){Vt&&o&&("object"==Jt(o)||"function"==typeof o)?(t||(t=new Vt),Yt(t,o,n)):Qt?(e||(e=new Qt),ee(e,o,n)):(r||(r={key:{},next:null}),function(t,e,r){var o=oe(t,e);o?o.value=r:t.next={key:e,next:t.next,value:r}}(r,o,n))}};return o},ie=String.prototype.replace,ae=/%20/g,ue={default:"RFC3986",formatters:{RFC1738:function(t){return ie.call(t,ae,"+")},RFC3986:function(t){return String(t)}},RFC1738:"RFC1738",RFC3986:"RFC3986"};function se(t){return(se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var ce=Object.prototype.hasOwnProperty,le=Array.isArray,pe=function(){for(var t=[],e=0;e<256;++e)t.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return t}(),fe={combine:function(t,e){return[].concat(t,e)},compact:function(t){for(var e=[{obj:{o:t},prop:"o"}],r=[],o=0;o1;){var e=t.pop(),r=e.obj[e.prop];if(le(r)){for(var o=[],n=0;n=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||n===ue.RFC1738&&(40===s||41===s)?a+=i.charAt(u):s<128?a+=pe[s]:s<2048?a+=pe[192|s>>6]+pe[128|63&s]:s<55296||s>=57344?a+=pe[224|s>>12]+pe[128|s>>6&63]+pe[128|63&s]:(u+=1,s=65536+((1023&s)<<10|1023&i.charCodeAt(u)),a+=pe[240|s>>18]+pe[128|s>>12&63]+pe[128|s>>6&63]+pe[128|63&s])}return a},isBuffer:function(t){return!(!t||"object"!=se(t)||!(t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer(t)))},isRegExp:function(t){return"[object RegExp]"===Object.prototype.toString.call(t)},maybeMap:function(t,e){if(le(t)){for(var r=[],o=0;o0?b.join(",")||null:void 0}];else if(me(u))E=u;else{var P=Object.keys(b);E=s?P.sort(s):P}for(var x=0;x0?f+p:""}}),Ee={};function Te(t){return(Te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Pe(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return xe(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return xe(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,n=function(){};return{s:n,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function xe(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r1)for(var r=1;r=this._maxRetries)return!1;if(this._retryCallback)try{var r=this._retryCallback(t,e);if(!0===r)return!0;if(!1===r)return!1}catch(o){console.error(o)}if(e&&e.status&&a.has(e.status))return!0;if(t){if(t.code&&i.has(t.code))return!0;if(t.timeout&&"ECONNABORTED"===t.code)return!0;if(t.crossDomain)return!0}return!1},n.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},n.prototype.then=function(t,e){var r=this;if(!this._fullfilledPromise){var o=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise((function(t,e){o.on("abort",(function(){if(!(r._maxRetries&&r._maxRetries>r._retries))if(r.timedout&&r.timedoutError)e(r.timedoutError);else{var t=new Error("Aborted");t.code="ABORTED",t.status=r.status,t.method=r.method,t.url=r.url,e(t)}})),o.end((function(r,o){r?e(r):t(o)}))}))}return this._fullfilledPromise.then(t,e)},n.prototype.catch=function(t){return this.then(void 0,t)},n.prototype.use=function(t){return t(this),this},n.prototype.ok=function(t){if("function"!=typeof t)throw new Error("Callback required");return this._okCallback=t,this},n.prototype._isResponseOK=function(t){return!!t&&(this._okCallback?this._okCallback(t):t.status>=200&&t.status<300)},n.prototype.get=function(t){return this._header[t.toLowerCase()]},n.prototype.getHeader=n.prototype.get,n.prototype.set=function(t,e){if(r(t)){for(var n in t)o(t,n)&&this.set(n,t[n]);return this}return this._header[t.toLowerCase()]=e,this.header[t]=e,this},n.prototype.unset=function(t){return delete this._header[t.toLowerCase()],delete this.header[t],this},n.prototype.field=function(t,e,n){if(null==t)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(r(t)){for(var i in t)o(t,i)&&this.field(i,t[i]);return this}if(Array.isArray(e)){for(var a in e)o(e,a)&&this.field(t,e[a]);return this}if(null==e)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof e&&(e=String(e)),this._getFormData().append(t,e,n),this},n.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(K.gte(t.version,"v13.0.0")&&K.lt(t.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");K.gte(t.version,"v14.0.0")&&(this.req.destroyed=!0),this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},n.prototype._auth=function(t,e,r,o){switch(r.type){case"basic":this.set("Authorization","Basic ".concat(o("".concat(t,":").concat(e))));break;case"auto":this.username=t,this.password=e;break;case"bearer":this.set("Authorization","Bearer ".concat(t))}return this},n.prototype.withCredentials=function(t){return void 0===t&&(t=!0),this._withCredentials=t,this},n.prototype.redirects=function(t){return this._maxRedirects=t,this},n.prototype.maxResponseSize=function(t){if("number"!=typeof t)throw new TypeError("Invalid argument");return this._maxResponseSize=t,this},n.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},n.prototype.send=function(t){var e=r(t),n=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(e&&!this._data)Array.isArray(t)?this._data=[]:this._isHost(t)||(this._data={});else if(t&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(e&&r(this._data))for(var i in t)o(t,i)&&(this._data[i]=t[i]);else"string"==typeof t?(n||this.type("form"),(n=this._header["content-type"])&&(n=n.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===n?this._data?"".concat(this._data,"&").concat(t):t:(this._data||"")+t):this._data=t;return!e||this._isHost(t)||n||this.type("json"),this},n.prototype.sortQuery=function(t){return this._sort=void 0===t||t,this},n.prototype._finalizeQueryString=function(){var t=this._query.join("&");if(t&&(this.url+=(this.url.includes("?")?"&":"?")+t),this._query.length=0,this._sort){var e=this.url.indexOf("?");if(e>=0){var r=this.url.slice(e+1).split("&");"function"==typeof this._sort?r.sort(this._sort):r.sort(),this.url=this.url.slice(0,e)+"?"+r.join("&")}}},n.prototype._appendQueryString=function(){console.warn("Unsupported")},n.prototype._timeoutError=function(t,e,r){if(!this._aborted){var o=new Error("".concat(t+e,"ms exceeded"));o.timeout=e,o.code="ECONNABORTED",o.errno=r,this.timedout=!0,this.timedoutError=o,this.abort(),this.callback(o)}},n.prototype._setTimeouts=function(){var t=this;this._timeout&&!this._timer&&(this._timer=setTimeout((function(){t._timeoutError("Timeout of ",t._timeout,"ETIME")}),this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout((function(){t._timeoutError("Response timeout of ",t._responseTimeout,"ETIMEDOUT")}),this._responseTimeout))}}).call(this)}).call(this,ke);var Ge;function Je(){}Ge=Je,Je.prototype.get=function(t){return this.header[t.toLowerCase()]},Je.prototype._setHeaderProperties=function(t){var e=t["content-type"]||"";this.type=Ee.type(e);var r=Ee.params(e);for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(this[o]=r[o]);this.links={};try{t.link&&(this.links=Ee.parseLinks(t.link))}catch(n){}},Je.prototype._setStatusProperties=function(t){var e=Math.trunc(t/100);this.statusCode=t,this.status=this.statusCode,this.statusType=e,this.info=1===e,this.ok=2===e,this.redirect=3===e,this.clientError=4===e,this.serverError=5===e,this.error=(4===e||5===e)&&this.toError(),this.created=201===t,this.accepted=202===t,this.noContent=204===t,this.badRequest=400===t,this.unauthorized=401===t,this.notAcceptable=406===t,this.forbidden=403===t,this.notFound=404===t,this.unprocessableEntity=422===t};var Xe={};function Ve(t){return function(t){if(Array.isArray(t))return Ke(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Qe(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Qe(t,e){if(t){if("string"==typeof t)return Ke(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ke(t,e):void 0}}function Ke(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(this._defaults);try{for(r.s();!(e=r.n()).done;){var o=e.value;t[o.fn].apply(t,Ve(o.args))}}catch(n){r.e(n)}finally{r.f()}},Xe=Ye;var rr,or={};function nr(t){return(nr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ir(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(!t)return;if("string"==typeof t)return ar(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ar(t,e)}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,n=function(){};return{s:n,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function ar(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r0||t instanceof Object)?e(t):null)},br.prototype.toError=function(){var t=this.req,e=t.method,r=t.url,o="cannot ".concat(e," ").concat(r," (").concat(this.status,")"),n=new Error(o);return n.status=this.status,n.method=e,n.url=r,n},pr.Response=br,t(vr.prototype),sr(vr.prototype,$e.prototype),vr.prototype.type=function(t){return this.set("Content-Type",pr.types[t]||t),this},vr.prototype.accept=function(t){return this.set("Accept",pr.types[t]||t),this},vr.prototype.auth=function(t,e,r){return 1===arguments.length&&(e=""),"object"==nr(e)&&null!==e&&(r=e,e=""),r||(r={type:"function"==typeof btoa?"basic":"auto"}),this._auth(t,e,r,(function(t){if("function"==typeof btoa)return btoa(t);throw new Error("Cannot use basic auth, btoa is not a function")}))},vr.prototype.query=function(t){return"string"!=typeof t&&(t=yr(t)),t&&this._query.push(t),this},vr.prototype.attach=function(t,e,r){if(e){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(t,e,r||e.name)}return this},vr.prototype._getFormData=function(){return this._formData||(this._formData=new rr.FormData),this._formData},vr.prototype.callback=function(t,e){if(this._shouldRetry(t,e))return this._retry();var r=this._callback;this.clearTimeout(),t&&(this._maxRetries&&(t.retries=this._retries-1),this.emit("error",t)),r(t,e)},vr.prototype.crossDomainError=function(){var t=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");t.crossDomain=!0,t.status=this.status,t.method=this.method,t.url=this.url,this.callback(t)},vr.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},vr.prototype.ca=vr.prototype.agent,vr.prototype.buffer=vr.prototype.ca,vr.prototype.write=function(){throw new Error("Streaming is not supported in browser version of superagent")},vr.prototype.pipe=vr.prototype.write,vr.prototype._isHost=function(t){return t&&"object"==nr(t)&&!Array.isArray(t)&&"[object Object]"!==Object.prototype.toString.call(t)},vr.prototype.end=function(t){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=t||lr,this._finalizeQueryString(),this._end()},vr.prototype._setUploadTimeout=function(){var t=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout((function(){t._timeoutError("Upload timeout of ",t._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout))},vr.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));var t=this;this.xhr=pr.getXHR();var e=this.xhr,r=this._formData||this._data;this._setTimeouts(),e.addEventListener("readystatechange",(function(){var r=e.readyState;if(r>=2&&t._responseTimeoutTimer&&clearTimeout(t._responseTimeoutTimer),4===r){var o;try{o=e.status}catch(n){o=0}if(!o){if(t.timedout||t._aborted)return;return t.crossDomainError()}t.emit("end")}}));var o=function(e,r){r.total>0&&(r.percent=r.loaded/r.total*100,100===r.percent&&clearTimeout(t._uploadTimeoutTimer)),r.direction=e,t.emit("progress",r)};if(this.hasListeners("progress"))try{e.addEventListener("progress",o.bind(null,"download")),e.upload&&e.upload.addEventListener("progress",o.bind(null,"upload"))}catch(u){}e.upload&&this._setUploadTimeout();try{this.username&&this.password?e.open(this.method,this.url,!0,this.username,this.password):e.open(this.method,this.url,!0)}catch(s){return this.callback(s)}if(this._withCredentials&&(e.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof r&&!this._isHost(r)){var n=this._header["content-type"],i=this._serializer||pr.serialize[n?n.split(";")[0]:""];!i&&mr(n)&&(i=pr.serialize["application/json"]),i&&(r=i(r))}for(var a in this.header)null!==this.header[a]&&cr(this.header,a)&&e.setRequestHeader(a,this.header[a]);this._responseType&&(e.responseType=this._responseType),this.emit("request",this),e.send(void 0===r?null:r)},pr.agent=function(){return new Xe};for(var gr=function(){var t=wr[Sr];Xe.prototype[t.toLowerCase()]=function(e,r){var o=new pr.Request(t,e);return this._setDefaults(o),r&&o.end(r),o}},Sr=0,wr=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];Sr - - - - SuperAgent — elegant API for AJAX in Node and browsers - - - - - -
            diff --git a/build/node_modules/superagent/docs/images/bg.png b/build/node_modules/superagent/docs/images/bg.png deleted file mode 100644 index ca3d2679cd62c18b0f30e1d5ad006d37ffd7ba12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8856 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 { - - }); - -__DELETE__, __HEAD__, __PATCH__, __POST__, and __PUT__ requests can also be used, simply change the method name: - - request - .head('/favicon.ico') - .then(function(res) { - - }); - -__DELETE__ can be also called as `.del()` for compatibility with old IE where `delete` is a reserved word. - -The HTTP method defaults to __GET__, so if you wish, the following is valid: - - request('/search', function(err, res){ - - }); - -## Setting header fields - -Setting header fields is simple, invoke `.set()` with a field name and value: - - request - .get('/search') - .set('API-Key', 'foobar') - .set('Accept', 'application/json') - .then(callback); - -You may also pass an object to set several fields in a single call: - - request - .get('/search') - .set({ 'API-Key': 'foobar', Accept: 'application/json' }) - .then(callback); - -## `GET` requests - -The `.query()` method accepts objects, which when used with the __GET__ method will form a query-string. The following will produce the path `/search?query=Manny&range=1..5&order=desc`. - - request - .get('/search') - .query({ query: 'Manny' }) - .query({ range: '1..5' }) - .query({ order: 'desc' }) - .then(function(res) { - - }); - -Or as a single object: - - request - .get('/search') - .query({ query: 'Manny', range: '1..5', order: 'desc' }) - .then(function(res) { - - }); - -The `.query()` method accepts strings as well: - - request - .get('/querystring') - .query('search=Manny&range=1..5') - .then(function(res) { - - }); - -Or joined: - - request - .get('/querystring') - .query('search=Manny') - .query('range=1..5') - .then(function(res) { - - }); - -## `HEAD` requests - -You can also use the `.query()` method for HEAD requests. The following will produce the path `/users?email=joe@smith.com`. - - request - .head('/users') - .query({ email: 'joe@smith.com' }) - .then(function(res) { - - }); - -## `POST` / `PUT` requests - -A typical JSON __POST__ request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string. - - request.post('/user') - .set('Content-Type', 'application/json') - .send('{"name":"tj","pet":"tobi"}') - .then(callback) - -Since JSON is undoubtedly the most common, it's the _default_! The following example is equivalent to the previous. - - request.post('/user') - .send({ name: 'tj', pet: 'tobi' }) - .then(callback) - -Or using multiple `.send()` calls: - - request.post('/user') - .send({ name: 'tj' }) - .send({ pet: 'tobi' }) - .then(callback) - -By default sending strings will set the `Content-Type` to `application/x-www-form-urlencoded`, - multiple calls will be concatenated with `&`, here resulting in `name=tj&pet=tobi`: - - request.post('/user') - .send('name=tj') - .send('pet=tobi') - .then(callback); - -SuperAgent formats are extensible, however by default "json" and "form" are supported. To send the data as `application/x-www-form-urlencoded` simply invoke `.type()` with "form", where the default is "json". This request will __POST__ the body "name=tj&pet=tobi". - - request.post('/user') - .type('form') - .send({ name: 'tj' }) - .send({ pet: 'tobi' }) - .then(callback) - -Sending a [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData) object is also supported. The following example will __POST__ the content of the HTML form identified by id="myForm": - - request.post('/user') - .send(new FormData(document.getElementById('myForm'))) - .then(callback) - -## Setting the `Content-Type` - -The obvious solution is to use the `.set()` method: - - request.post('/user') - .set('Content-Type', 'application/json') - -As a short-hand the `.type()` method is also available, accepting -the canonicalized MIME type name complete with type/subtype, or -simply the extension name such as "xml", "json", "png", etc: - - request.post('/user') - .type('application/json') - - request.post('/user') - .type('json') - - request.post('/user') - .type('png') - -## Serializing request body - -SuperAgent will automatically serialize JSON and forms. -You can setup automatic serialization for other types as well: - -```js -request.serialize['application/xml'] = function (obj) { - return 'string generated from obj'; -}; - -//going forward, all requests with a Content-type of -//'application/xml' will be automatically serialized -``` -If you want to send the payload in a custom format, you can replace -the built-in serialization with the `.serialize()` method on a per-request basis: - -```js -request - .post('/user') - .send({foo: 'bar'}) - .serialize(function serializer(obj) { - return 'string generated from obj'; - }); -``` -## Retrying requests - -When given the `.retry()` method, SuperAgent will automatically retry requests, if they fail in a way that is transient or could be due to a flaky Internet connection. - -This method has two optional arguments: number of retries (default 3) and a callback. It calls `callback(err, res)` before each retry. The callback may return `true`/`false` to control whether the request sould be retried (but the maximum number of retries is always applied). - - request - .get('http://example.com/search') - .retry(2) // or: - .retry(2, callback) - .then(finished); - -Use `.retry()` only with requests that are *idempotent* (i.e. multiple requests reaching the server won't cause undesirable side effects like duplicate purchases). - -## Setting Accept - -In a similar fashion to the `.type()` method it is also possible to set the `Accept` header via the short hand method `.accept()`. Which references `request.types` as well allowing you to specify either the full canonicalized MIME type name as `type/subtype`, or the extension suffix form as "xml", "json", "png", etc. for convenience: - - request.get('/user') - .accept('application/json') - - request.get('/user') - .accept('json') - - request.post('/user') - .accept('png') - -### Facebook and Accept JSON - -If you are calling Facebook's API, be sure to send an `Accept: application/json` header in your request. If you don't do this, Facebook will respond with `Content-Type: text/javascript; charset=UTF-8`, which SuperAgent will not parse and thus `res.body` will be undefined. You can do this with either `req.accept('json')` or `req.header('Accept', 'application/json')`. See [issue 1078](https://github.com/visionmedia/superagent/issues/1078) for details. - -## Query strings - - `req.query(obj)` is a method which may be used to build up a query-string. For example populating `?format=json&dest=/login` on a __POST__: - - request - .post('/') - .query({ format: 'json' }) - .query({ dest: '/login' }) - .send({ post: 'data', here: 'wahoo' }) - .then(callback); - -By default the query string is not assembled in any particular order. An asciibetically-sorted query string can be enabled with `req.sortQuery()`. You may also provide a custom sorting comparison function with `req.sortQuery(myComparisonFn)`. The comparison function should take 2 arguments and return a negative/zero/positive integer. - -```js - // default order - request.get('/user') - .query('name=Nick') - .query('search=Manny') - .sortQuery() - .then(callback) - - // customized sort function - request.get('/user') - .query('name=Nick') - .query('search=Manny') - .sortQuery(function(a, b){ - return a.length - b.length; - }) - .then(callback) -``` - -## TLS options - -In Node.js SuperAgent supports methods to configure HTTPS requests: - -- `.ca()`: Set the CA certificate(s) to trust -- `.cert()`: Set the client certificate chain(s) -- `.key()`: Set the client private key(s) -- `.pfx()`: Set the client PFX or PKCS12 encoded private key and certificate chain - -For more information, see Node.js [https.request docs](https://nodejs.org/api/https.html#https_https_request_options_callback). - -```js -var key = fs.readFileSync('key.pem'), - cert = fs.readFileSync('cert.pem'); - -request - .post('/client-auth') - .key(key) - .cert(cert) - .then(callback); -``` - -```js -var ca = fs.readFileSync('ca.cert.pem'); - -request - .post('https://localhost/private-ca-server') - .ca(ca) - .then(res => {}); -``` - -## Parsing response bodies - -SuperAgent will parse known response-body data for you, -currently supporting `application/x-www-form-urlencoded`, -`application/json`, and `multipart/form-data`. You can setup -automatic parsing for other response-body data as well: - -```js -//browser -request.parse['application/xml'] = function (str) { - return {'object': 'parsed from str'}; -}; - -//node -request.parse['application/xml'] = function (res, cb) { - //parse response text and set res.body here - - cb(null, res); -}; - -//going forward, responses of type 'application/xml' -//will be parsed automatically -``` - -You can set a custom parser (that takes precedence over built-in parsers) with the `.buffer(true).parse(fn)` method. If response buffering is not enabled (`.buffer(false)`) then the `response` event will be emitted without waiting for the body parser to finish, so `response.body` won't be available. - -### JSON / Urlencoded - -The property `res.body` is the parsed object, for example if a request responded with the JSON string '{"user":{"name":"tobi"}}', `res.body.user.name` would be "tobi". Likewise the x-www-form-urlencoded value of "user[name]=tobi" would yield the same result. Only one level of nesting is supported. If you need more complex data, send JSON instead. - -Arrays are sent by repeating the key. `.send({color: ['red','blue']})` sends `color=red&color=blue`. If you want the array keys to contain `[]` in their name, you must add it yourself, as SuperAgent doesn't add it automatically. - -### Multipart - -The Node client supports _multipart/form-data_ via the [Formidable](https://github.com/felixge/node-formidable) module. When parsing multipart responses, the object `res.files` is also available to you. Suppose for example a request responds with the following multipart body: - - --whoop - Content-Disposition: attachment; name="image"; filename="tobi.png" - Content-Type: image/png - - ... data here ... - --whoop - Content-Disposition: form-data; name="name" - Content-Type: text/plain - - Tobi - --whoop-- - -You would have the values `res.body.name` provided as "Tobi", and `res.files.image` as a `File` object containing the path on disk, filename, and other properties. - -### Binary - -In browsers, you may use `.responseType('blob')` to request handling of binary response bodies. This API is unnecessary when running in node.js. The supported argument values for this method are - -- `'blob'` passed through to the XmlHTTPRequest `responseType` property -- `'arraybuffer'` passed through to the XmlHTTPRequest `responseType` property - -```js -req.get('/binary.data') - .responseType('blob') - .end(function (error, res) { - // res.body will be a browser native Blob type here - }); -``` - -For more information, see the Mozilla Developer Network [xhr.responseType docs](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). - -## Response properties - -Many helpful flags and properties are set on the `Response` object, ranging from the response text, parsed response body, header fields, status flags and more. - -### Response text - -The `res.text` property contains the unparsed response body string. This property is always present for the client API, and only when the mime type matches "text/*", "*/json", or "x-www-form-urlencoded" by default for node. The reasoning is to conserve memory, as buffering text of large bodies such as multipart files or images is extremely inefficient. To force buffering see the "Buffering responses" section. - -### Response body - -Much like SuperAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via `res.body`. - -### Response header fields - -The `res.header` contains an object of parsed header fields, lowercasing field names much like node does. For example `res.header['content-length']`. - -### Response Content-Type - -The Content-Type response header is special-cased, providing `res.type`, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as `res.type`, and the `res.charset` property would then contain "utf8". - -### Response status - -The response status flags help determine if the request was a success, among other useful information, making SuperAgent ideal for interacting with RESTful web services. These flags are currently defined as: - - var type = status / 100 | 0; - - // status / class - res.status = status; - res.statusType = type; - - // basics - res.info = 1 == type; - res.ok = 2 == type; - res.clientError = 4 == type; - res.serverError = 5 == type; - res.error = 4 == type || 5 == type; - - // sugar - res.accepted = 202 == status; - res.noContent = 204 == status || 1223 == status; - res.badRequest = 400 == status; - res.unauthorized = 401 == status; - res.notAcceptable = 406 == status; - res.notFound = 404 == status; - res.forbidden = 403 == status; - -## Aborting requests - -To abort requests simply invoke the `req.abort()` method. - -## Timeouts - -Sometimes networks and servers get "stuck" and never respond after accepting a request. Set timeouts to avoid requests waiting forever. - - * `req.timeout({deadline:ms})` or `req.timeout(ms)` (where `ms` is a number of milliseconds > 0) sets a deadline for the entire request (including all redirects) to complete. If the response isn't fully downloaded within that time, the request will be aborted. - - * `req.timeout({response:ms})` sets maximum time to wait for the first byte to arrive from the server, but it does not limit how long the entire download can take. Response timeout should be a few seconds longer than just the time it takes server to respond, because it also includes time to make DNS lookup, TCP/IP and TLS connections. - -You should use both `deadline` and `response` timeouts. This way you can use a short response timeout to detect unresponsive networks quickly, and a long deadline to give time for downloads on slow, but reliable, networks. - - request - .get('/big-file?network=slow') - .timeout({ - response: 5000, // Wait 5 seconds for the server to start sending, - deadline: 60000, // but allow 1 minute for the file to finish loading. - }) - .then(res => { - /* responded in time */ - }, err => { - if (err.timeout) { /* timed out! */ } else { /* other error */ } - }); - -Timeout errors have a `.timeout` property. - -## Authentication - -In both Node and browsers auth available via the `.auth()` method: - - request - .get('http://local') - .auth('tobi', 'learnboost') - .then(callback); - - -In the _Node_ client Basic auth can be in the URL as "user:pass": - - request.get('http://tobi:learnboost@local').then(callback); - -By default only `Basic` auth is used. In browser you can add `{type:'auto'}` to enable all methods built-in in the browser (Digest, NTLM, etc.): - - request.auth('digest', 'secret', {type:'auto'}) - -## Following redirects - -By default up to 5 redirects will be followed, however you may specify this with the `res.redirects(n)` method: - - request - .get('/some.png') - .redirects(2) - .then(callback); - -## Agents for global state - -### Saving cookies - -In Node SuperAgent does not save cookies by default, but you can use the `.agent()` method to create a copy of SuperAgent that saves cookies. Each copy has a separate cookie jar. - - const agent = request.agent(); - agent - .post('/login') - .then(() => { - return agent.get('/cookied-page'); - }); - -In browsers cookies are managed automatically by the browser, so the `.agent()` does not isolate cookies. - -### Default options for multiple requests - -Regular request methods called on the agent will be used as defaults for all requests made by that agent. - - const agent = request.agent() - .use(plugin) - .auth(shared); - - await agent.get('/with-plugin-and-auth'); - await agent.get('/also-with-plugin-and-auth'); - -The complete list of methods that the agent can use to set defaults is: `use`, `on`, `once`, `set`, `query`, `type`, `accept`, `auth`, `withCredentials`, `sortQuery`, `retry`, `ok`, `redirects`, `timeout`, `buffer`, `serialize`, `parse`, `ca`, `key`, `pfx`, `cert`. - -## Piping data - -The Node client allows you to pipe data to and from the request. Please note that `.pipe()` is used **instead of** `.end()`/`.then()` methods. - -For example piping a file's contents as the request: - - const request = require('superagent'); - const fs = require('fs'); - - const stream = fs.createReadStream('path/to/my.json'); - const req = request.post('/somewhere'); - req.type('json'); - stream.pipe(req); - -Note that when you pipe to a request, superagent sends the piped data with [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding), which isn't supported by all servers (for instance, Python WSGI servers). - -Or piping the response to a file: - - const stream = fs.createWriteStream('path/to/my.json'); - const req = request.get('/some.json'); - req.pipe(stream); - - It's not possible to mix pipes and callbacks or promises. Note that you should **NOT** attempt to pipe the result of `.end()` or the `Response` object: - - // Don't do either of these: - const stream = getAWritableStream(); - const req = request - .get('/some.json') - // BAD: this pipes garbage to the stream and fails in unexpected ways - .end((err, this_does_not_work) => this_does_not_work.pipe(stream)) - const req = request - .get('/some.json') - .end() - // BAD: this is also unsupported, .pipe calls .end for you. - .pipe(nope_its_too_late); - -In a [future version](https://github.com/visionmedia/superagent/issues/1188) of superagent, improper calls to `pipe()` will fail. - -## Multipart requests - -SuperAgent is also great for _building_ multipart requests for which it provides methods `.attach()` and `.field()`. - -When you use `.field()` or `.attach()` you can't use `.send()` and you *must not* set `Content-Type` (the correct type will be set for you). - -### Attaching files - -To send a file use `.attach(name, [file], [options])`. You can attach multiple files by calling `.attach` multiple times. The arguments are: - - * `name` — field name in the form. - * `file` — either string with file path or `Blob`/`Buffer` object. - * `options` — (optional) either string with custom file name or `{filename: string}` object. In Node also `{contentType: 'mime/type'}` is supported. In browser create a `Blob` with an appropriate type instead. - -
            - - request - .post('/upload') - .attach('image1', 'path/to/felix.jpeg') - .attach('image2', imageBuffer, 'luna.jpeg') - .field('caption', 'My cats') - .then(callback); - -### Field values - -Much like form fields in HTML, you can set field values with `.field(name, value)` and `.field({name: value})`. Suppose you want to upload a few images with your name and email, your request might look something like this: - - request - .post('/upload') - .field('user[name]', 'Tobi') - .field('user[email]', 'tobi@learnboost.com') - .field('friends[]', ['loki', 'jane']) - .attach('image', 'path/to/tobi.png') - .then(callback); - -## Compression - -The node client supports compressed responses, best of all, you don't have to do anything! It just works. - -## Buffering responses - -To force buffering of response bodies as `res.text` you may invoke `req.buffer()`. To undo the default of buffering for text responses such as "text/plain", "text/html" etc you may invoke `req.buffer(false)`. - -When buffered the `res.buffered` flag is provided, you may use this to handle both buffered and unbuffered responses in the same callback. - -## CORS - -For security reasons, browsers will block cross-origin requests unless the server opts-in using CORS headers. Browsers will also make extra __OPTIONS__ requests to check what HTTP headers and methods are allowed by the server. [Read more about CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). - -The `.withCredentials()` method enables the ability to send cookies from the origin, however only when `Access-Control-Allow-Origin` is _not_ a wildcard ("*"), and `Access-Control-Allow-Credentials` is "true". - - request - .get('http://api.example.com:4001/') - .withCredentials() - .then(function(res) { - assert.equal(200, res.status); - assert.equal('tobi', res.text); - }) - -## Error handling - -Your callback function will always be passed two arguments: error and response. If no error occurred, the first argument will be null: - - request - .post('/upload') - .attach('image', 'path/to/tobi.png') - .then(function(res) { - - }); - -An "error" event is also emitted, with you can listen for: - - request - .post('/upload') - .attach('image', 'path/to/tobi.png') - .on('error', handle) - .then(function(res) { - - }); - -Note that **superagent considers 4xx and 5xx responses (as well as unhandled 3xx responses) errors by default**. For example, if you get a `304 Not modified`, `403 Forbidden` or `500 Internal server error` response, this status information will be available via `err.status`. Errors from such responses also contain an `err.response` field with all of the properties mentioned in "[Response properties](#response-properties)". The library behaves in this way to handle the common case of wanting success responses and treating HTTP error status codes as errors while still allowing for custom logic around specific error conditions. - -Network failures, timeouts, and other errors that produce no response will contain no `err.status` or `err.response` fields. - -If you wish to handle 404 or other HTTP error responses, you can query the `err.status` property. When an HTTP error occurs (4xx or 5xx response) the `res.error` property is an `Error` object, this allows you to perform checks such as: - - if (err && err.status === 404) { - alert('oh no ' + res.body.message); - } - else if (err) { - // all other error types we handle generically - } - -Alternatively, you can use the `.ok(callback)` method to decide whether a response is an error or not. The callback to the `ok` function gets a response and returns `true` if the response should be interpreted as success. - - request.get('/404') - .ok(res => res.status < 500) - .then(response => { - // reads 404 page as a successful response - }) - -## Progress tracking - -SuperAgent fires `progress` events on upload and download of large files. - - request.post(url) - .attach('field_name', file) - .on('progress', event => { - /* the event is: - { - direction: "upload" or "download" - percent: 0 to 100 // may be missing if file size is unknown - total: // total file size, may be missing - loaded: // bytes downloaded or uploaded so far - } */ - }) - .end() - -## Promise and Generator support - -SuperAgent's request is a "thenable" object that's compatible with JavaScript promises and `async`/`await` syntax. - -If you're using promises, **do not** call `.end()` or `.pipe()`. Any use of `.then()` or `await` disables all other ways of using the request. - -Libraries like [co](https://github.com/tj/co) or a web framework like [koa](https://github.com/koajs/koa) can `yield` on any SuperAgent method: - - const req = request - .get('http://local') - .auth('tobi', 'learnboost'); - const res = yield req; - -Note that SuperAgent expects the global `Promise` object to be present. You'll need a polyfill to use promises in Internet Explorer or Node.js 0.10. - -## Browser and node versions - -SuperAgent has two implementations: one for web browsers (using XHR) and one for Node.JS (using core http module). By default Browserify and WebPack will pick the browser version. - -If want to use WebPack to compile code for Node.JS, you *must* specify [node target](https://webpack.github.io/docs/configuration.html#target) in its configuration. - -### Using browser version in electron - -[Electron](http://electron.atom.io/) developers report if you would prefer to use the browser version of SuperAgent instead of the Node version, you can `require('superagent/superagent')`. Your requests will now show up in the Chrome developer tools Network tab. Note this environment is not covered by automated test suite and not officially supported. diff --git a/build/node_modules/superagent/docs/style.css b/build/node_modules/superagent/docs/style.css deleted file mode 100644 index fb2a9e36..00000000 --- a/build/node_modules/superagent/docs/style.css +++ /dev/null @@ -1,87 +0,0 @@ -body { - padding: 40px 80px; - font: 14px/1.5 "Helvetica Neue", Helvetica, sans-serif; - background: #181818 url(images/bg.png); - text-align: center; -} - -#content { - margin: 0 auto; - padding: 10px 40px; - text-align: left; - background: white; - width: 50%; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - -webkit-box-shadow: 0 2px 5px 0 black; -} - -#menu { - font-size: 13px; - margin: 0; - padding: 0; - text-align: left; - position: fixed; - top: 15px; - left: 15px; -} - -#menu ul { - margin: 0; - padding: 0; -} - -#menu li { - list-style: none; -} - -#menu a { - color: rgba(255,255,255,.5); - text-decoration: none; -} - -#menu a:hover { - color: white; -} - -#menu .active a { - color: white; -} - -pre { - padding: 10px; -} - -code { - font-family: monaco, monospace, sans-serif; - font-size: 0.85em; -} - -p code { - border: 1px solid #ECEA75; - padding: 1px 3px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - background: #FDFCD1; -} - -pre { - padding: 20px 25px; - border: 1px solid #ddd; - -webkit-box-shadow: inset 0 0 5px #eee; - -moz-box-shadow: inset 0 0 5px #eee; - box-shadow: inset 0 0 5px #eee; -} - -code .comment { color: #ddd } -code .init { color: #2F6FAD } -code .string { color: #5890AD } -code .keyword { color: #8A6343 } -code .number { color: #2F6FAD } - -/* override tocbot style to avoid vertical white line in table of content */ -.toc-link::before { - content: initial; -} diff --git a/build/node_modules/superagent/docs/tail.html b/build/node_modules/superagent/docs/tail.html deleted file mode 100644 index 9415a14b..00000000 --- a/build/node_modules/superagent/docs/tail.html +++ /dev/null @@ -1,36 +0,0 @@ -
            - Fork me on GitHub - - - - - - diff --git a/build/node_modules/superagent/docs/test.html b/build/node_modules/superagent/docs/test.html deleted file mode 100644 index 7d33fc93..00000000 --- a/build/node_modules/superagent/docs/test.html +++ /dev/null @@ -1,2082 +0,0 @@ - - - - SuperAgent - Ajax with less suck - - - - - - - - - -
            -

            request

            -
            -
            -

            with a callback

            -
            -
            should invoke .end()
            -
            request
            -.get(uri + '/login', function(err, res){
            -  assert.equal(res.status, 200);
            -  done();
            -})
            -
            -
            -
            -

            .end()

            -
            -
            should issue a request
            -
            request
            -.get(uri + '/login')
            -.end(function(err, res){
            -  assert.equal(res.status, 200);
            -  done();
            -});
            -
            -
            -
            -

            res.error

            -
            -
            should should be an Error object
            -
            request
            -.get(uri + '/error')
            -.end(function(err, res){
            -  if (NODE) {
            -    res.error.message.should.equal('cannot GET /error (500)');
            -  }
            -  else {
            -    res.error.message.should.equal('cannot GET ' + uri + '/error (500)');
            -  }
            -  assert.strictEqual(res.error.status, 500);
            -  assert(err, 'should have an error for 500');
            -  assert.equal(err.message, 'Internal Server Error');
            -  done();
            -});
            -
            -
            -
            -

            res.header

            -
            -
            should be an object
            -
            request
            -.get(uri + '/login')
            -.end(function(err, res){
            -  assert.equal('Express', res.header['x-powered-by']);
            -  done();
            -});
            -
            -
            -
            -

            res.charset

            -
            -
            should be set when present
            -
            request
            -.get(uri + '/login')
            -.end(function(err, res){
            -  res.charset.should.equal('utf-8');
            -  done();
            -});
            -
            -
            -
            -

            res.statusType

            -
            -
            should provide the first digit
            -
            request
            -.get(uri + '/login')
            -.end(function(err, res){
            -  assert(!err, 'should not have an error for success responses');
            -  assert.equal(200, res.status);
            -  assert.equal(2, res.statusType);
            -  done();
            -});
            -
            -
            -
            -

            res.type

            -
            -
            should provide the mime-type void of params
            -
            request
            -.get(uri + '/login')
            -.end(function(err, res){
            -  res.type.should.equal('text/html');
            -  res.charset.should.equal('utf-8');
            -  done();
            -});
            -
            -
            -
            -

            req.set(field, val)

            -
            -
            should set the header field
            -
            request
            -.post(uri + '/echo')
            -.set('X-Foo', 'bar')
            -.set('X-Bar', 'baz')
            -.end(function(err, res){
            -  assert.equal('bar', res.header['x-foo']);
            -  assert.equal('baz', res.header['x-bar']);
            -  done();
            -})
            -
            -
            -
            -

            req.set(obj)

            -
            -
            should set the header fields
            -
            request
            -.post(uri + '/echo')
            -.set({ 'X-Foo': 'bar', 'X-Bar': 'baz' })
            -.end(function(err, res){
            -  assert.equal('bar', res.header['x-foo']);
            -  assert.equal('baz', res.header['x-bar']);
            -  done();
            -})
            -
            -
            -
            -

            req.type(str)

            -
            -
            should set the Content-Type
            -
            request
            -.post(uri + '/echo')
            -.type('text/x-foo')
            -.end(function(err, res){
            -  res.header['content-type'].should.equal('text/x-foo');
            -  done();
            -});
            -
            should map "json"
            -
            request
            -.post(uri + '/echo')
            -.type('json')
            -.send('{"a": 1}')
            -.end(function(err, res){
            -  res.should.be.json;
            -  done();
            -});
            -
            should map "html"
            -
            request
            -.post(uri + '/echo')
            -.type('html')
            -.end(function(err, res){
            -  res.header['content-type'].should.equal('text/html');
            -  done();
            -});
            -
            -
            -
            -

            req.accept(str)

            -
            -
            should set Accept
            -
            request
            -.get(uri + '/echo')
            -.accept('text/x-foo')
            -.end(function(err, res){
            -   res.header['accept'].should.equal('text/x-foo');
            -   done();
            -});
            -
            should map "json"
            -
            request
            -.get(uri + '/echo')
            -.accept('json')
            -.end(function(err, res){
            -  res.header['accept'].should.equal('application/json');
            -  done();
            -});
            -
            should map "xml"
            -
            request
            -.get(uri + '/echo')
            -.accept('xml')
            -.end(function(err, res){
            -  res.header['accept'].should.equal('application/xml');
            -  done();
            -});
            -
            should map "html"
            -
            request
            -.get(uri + '/echo')
            -.accept('html')
            -.end(function(err, res){
            -  res.header['accept'].should.equal('text/html');
            -  done();
            -});
            -
            -
            -
            -

            req.send(str)

            -
            -
            should write the string
            -
            request
            -.post(uri + '/echo')
            -.type('json')
            -.send('{"name":"tobi"}')
            -.end(function(err, res){
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -});
            -
            -
            -
            -

            req.send(Object)

            -
            -
            should default to json
            -
            request
            -.post(uri + '/echo')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  res.should.be.json
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -});
            -
            -

            when called several times

            -
            -
            should merge the objects
            -
            request
            -.post(uri + '/echo')
            -.send({ name: 'tobi' })
            -.send({ age: 1 })
            -.end(function(err, res){
            -  res.should.be.json
            -  if (NODE) {
            -    res.buffered.should.be.true;
            -  }
            -  res.text.should.equal('{"name":"tobi","age":1}');
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            .end(fn)

            -
            -
            should check arity
            -
            request
            -.post(uri + '/echo')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -});
            -
            should emit request
            -
            var req = request.post(uri + '/echo');
            -req.on('request', function(request){
            -  assert.equal(req, request);
            -  done();
            -});
            -req.end();
            -
            should emit response
            -
            request
            -.post(uri + '/echo')
            -.send({ name: 'tobi' })
            -.on('response', function(res){
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -})
            -.end();
            -
            -
            -
            -

            .then(fulfill, reject)

            -
            -
            should support successful fulfills with .then(fulfill)
            -
            request
            -.post(uri + '/echo')
            -.send({ name: 'tobi' })
            -.then(function(res) {
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -})
            -
            should reject an error with .then(null, reject)
            -
            request
            -.get(uri + '/error')
            -.then(null, function(err) {
            -  assert.equal(err.status, 500);
            -  assert.equal(err.response.text, 'boom');
            -  done();
            -})
            -
            -
            -
            -

            .abort()

            -
            -
            should abort the request
            -
            var req = request
            -.get(uri + '/delay/3000')
            -.end(function(err, res){
            -  assert(false, 'should not complete the request');
            -});
            -req.on('abort', done);
            -setTimeout(function() {
            -  req.abort();
            -}, 1000);
            -
            -
            -
            -
            -
            -

            request

            -
            -
            -

            persistent agent

            -
            -
            should gain a session on POST
            -
            agent3
            -  .post('http://localhost:4000/signin')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    should.not.exist(res.headers['set-cookie']);
            -    res.text.should.containEql('dashboard');
            -    done();
            -  });
            -
            should start with empty session (set cookies)
            -
            agent1
            -  .get('http://localhost:4000/dashboard')
            -  .end(function(err, res) {
            -    should.exist(err);
            -    res.should.have.status(401);
            -    should.exist(res.headers['set-cookie']);
            -    done();
            -  });
            -
            should gain a session (cookies already set)
            -
            agent1
            -  .post('http://localhost:4000/signin')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    should.not.exist(res.headers['set-cookie']);
            -    res.text.should.containEql('dashboard');
            -    done();
            -  });
            -
            should persist cookies across requests
            -
            agent1
            -  .get('http://localhost:4000/dashboard')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    done();
            -  });
            -
            should have the cookie set in the end callback
            -
            agent4
            -  .post('http://localhost:4000/setcookie')
            -  .end(function(err, res) {
            -    agent4
            -      .get('http://localhost:4000/getcookie')
            -      .end(function(err, res) {
            -        should.not.exist(err);
            -        res.should.have.status(200);
            -        assert.strictEqual(res.text, 'jar');
            -        done();
            -      });
            -  });
            -
            should not share cookies
            -
            agent2
            -  .get('http://localhost:4000/dashboard')
            -  .end(function(err, res) {
            -    should.exist(err);
            -    res.should.have.status(401);
            -    done();
            -  });
            -
            should not lose cookies between agents
            -
            agent1
            -  .get('http://localhost:4000/dashboard')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    done();
            -  });
            -
            should be able to follow redirects
            -
            agent1
            -  .get('http://localhost:4000/')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    res.text.should.containEql('dashboard');
            -    done();
            -  });
            -
            should be able to post redirects
            -
            agent1
            -  .post('http://localhost:4000/redirect')
            -  .send({ foo: 'bar', baz: 'blaaah' })
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    res.text.should.containEql('simple');
            -    res.redirects.should.eql(['http://localhost:4000/simple']);
            -    done();
            -  });
            -
            should be able to limit redirects
            -
            agent1
            -  .get('http://localhost:4000/')
            -  .redirects(0)
            -  .end(function(err, res) {
            -    should.exist(err);
            -    res.should.have.status(302);
            -    res.redirects.should.eql([]);
            -    res.header.location.should.equal('/dashboard');
            -    done();
            -  });
            -
            should be able to create a new session (clear cookie)
            -
            agent1
            -  .post('http://localhost:4000/signout')
            -  .end(function(err, res) {
            -    should.not.exist(err);
            -    res.should.have.status(200);
            -    should.exist(res.headers['set-cookie']);
            -    done();
            -  });
            -
            should regenerate with an empty session
            -
            agent1
            -  .get('http://localhost:4000/dashboard')
            -  .end(function(err, res) {
            -    should.exist(err);
            -    res.should.have.status(401);
            -    should.not.exist(res.headers['set-cookie']);
            -    done();
            -  });
            -
            -
            -
            -
            -
            -

            Basic auth

            -
            -
            -

            when credentials are present in url

            -
            -
            should set Authorization
            -
            request
            -.get('http://tobi:learnboost@localhost:3010')
            -.end(function(err, res){
            -  res.status.should.equal(200);
            -  done();
            -});
            -
            -
            -
            -

            req.auth(user, pass)

            -
            -
            should set Authorization
            -
            request
            -.get('http://localhost:3010')
            -.auth('tobi', 'learnboost')
            -.end(function(err, res){
            -  res.status.should.equal(200);
            -  done();
            -});
            -
            -
            -
            -

            req.auth(user + ":" + pass)

            -
            -
            should set authorization
            -
            request
            -.get('http://localhost:3010/again')
            -.auth('tobi')
            -.end(function(err, res){
            -  res.status.should.eql(200);
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            [node] request

            -
            -
            -

            res.statusCode

            -
            -
            should set statusCode
            -
            request
            -.get('http://localhost:5000/login', function(err, res){
            -  assert.strictEqual(res.statusCode, 200);
            -  done();
            -})
            -
            -
            -
            -

            with an object

            -
            -
            should format the url
            -
            request
            -.get(url.parse('http://localhost:5000/login'))
            -.end(function(err, res){
            -  assert(res.ok);
            -  done();
            -})
            -
            -
            -
            -

            without a schema

            -
            -
            should default to http
            -
            request
            -.get('localhost:5000/login')
            -.end(function(err, res){
            -  assert.equal(res.status, 200);
            -  done();
            -})
            -
            -
            -
            -

            req.toJSON()

            -
            -
            should describe the request
            -
            request
            -.post(':5000/echo')
            -.send({ foo: 'baz' })
            -.end(function(err, res){
            -  var obj = res.request.toJSON();
            -  assert.equal('POST', obj.method);
            -  assert.equal(':5000/echo', obj.url);
            -  assert.equal('baz', obj.data.foo);
            -  done();
            -});
            -
            -
            -
            -

            should allow the send shorthand

            -
            -
            with callback in the method call
            -
            request
            -.get('http://localhost:5000/login', function(err, res) {
            -    assert.equal(res.status, 200);
            -    done();
            -});
            -
            with data in the method call
            -
            request
            -.post('http://localhost:5000/echo', { foo: 'bar' })
            -.end(function(err, res) {
            -  assert.equal('{"foo":"bar"}', res.text);
            -  done();
            -});
            -
            with callback and data in the method call
            -
            request
            -.post('http://localhost:5000/echo', { foo: 'bar' }, function(err, res) {
            -  assert.equal('{"foo":"bar"}', res.text);
            -  done();
            -});
            -
            -
            -
            -

            res.toJSON()

            -
            -
            should describe the response
            -
            request
            -.post('http://localhost:5000/echo')
            -.send({ foo: 'baz' })
            -.end(function(err, res){
            -  var obj = res.toJSON();
            -  assert.equal('object', typeof obj.header);
            -  assert.equal('object', typeof obj.req);
            -  assert.equal(200, obj.status);
            -  assert.equal('{"foo":"baz"}', obj.text);
            -  done();
            -});
            -
            -
            -
            -

            res.links

            -
            -
            should default to an empty object
            -
            request
            -.get('http://localhost:5000/login')
            -.end(function(err, res){
            -  res.links.should.eql({});
            -  done();
            -})
            -
            should parse the Link header field
            -
            request
            -.get('http://localhost:5000/links')
            -.end(function(err, res){
            -  res.links.next.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=2');
            -  done();
            -})
            -
            -
            -
            -

            req.unset(field)

            -
            -
            should remove the header field
            -
            request
            -.post('http://localhost:5000/echo')
            -.unset('User-Agent')
            -.end(function(err, res){
            -  assert.equal(void 0, res.header['user-agent']);
            -  done();
            -})
            -
            -
            -
            -

            req.write(str)

            -
            -
            should write the given data
            -
            var req = request.post('http://localhost:5000/echo');
            -req.set('Content-Type', 'application/json');
            -req.write('{"name"').should.be.a.boolean;
            -req.write(':"tobi"}').should.be.a.boolean;
            -req.end(function(err, res){
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -});
            -
            -
            -
            -

            req.pipe(stream)

            -
            -
            should pipe the response to the given stream
            -
            var stream = new EventEmitter;
            -stream.buf = '';
            -stream.writable = true;
            -stream.write = function(chunk){
            -  this.buf += chunk;
            -};
            -stream.end = function(){
            -  this.buf.should.equal('{"name":"tobi"}');
            -  done();
            -};
            -request
            -.post('http://localhost:5000/echo')
            -.send('{"name":"tobi"}')
            -.pipe(stream);
            -
            -
            -
            -

            .buffer()

            -
            -
            should enable buffering
            -
            request
            -.get('http://localhost:5000/custom')
            -.buffer()
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  assert.equal('custom stuff', res.text);
            -  assert(res.buffered);
            -  done();
            -});
            -
            -
            -
            -

            .buffer(false)

            -
            -
            should disable buffering
            -
            request
            -.post('http://localhost:5000/echo')
            -.type('application/x-dog')
            -.send('hello this is dog')
            -.buffer(false)
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  assert.equal(null, res.text);
            -  res.body.should.eql({});
            -  var buf = '';
            -  res.setEncoding('utf8');
            -  res.on('data', function(chunk){ buf += chunk });
            -  res.on('end', function(){
            -    buf.should.equal('hello this is dog');
            -    done();
            -  });
            -});
            -
            -
            -
            -

            .agent()

            -
            -
            should return the defaut agent
            -
            var req = request.post('http://localhost:5000/echo');
            -req.agent().should.equal(false);
            -done();
            -
            -
            -
            -

            .agent(undefined)

            -
            -
            should set an agent to undefined and ensure it is chainable
            -
            var req = request.get('http://localhost:5000/echo');
            -var ret = req.agent(undefined);
            -ret.should.equal(req);
            -assert.strictEqual(req.agent(), undefined);
            -done();
            -
            -
            -
            -

            .agent(new http.Agent())

            -
            -
            should set passed agent
            -
            var http = require('http');
            -var req = request.get('http://localhost:5000/echo');
            -var agent = new http.Agent();
            -var ret = req.agent(agent);
            -ret.should.equal(req);
            -req.agent().should.equal(agent)
            -done();
            -
            -
            -
            -

            with a content type other than application/json or text/*

            -
            -
            should disable buffering
            -
            request
            -.post('http://localhost:5000/echo')
            -.type('application/x-dog')
            -.send('hello this is dog')
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  assert.equal(null, res.text);
            -  res.body.should.eql({});
            -  var buf = '';
            -  res.setEncoding('utf8');
            -  res.buffered.should.be.false;
            -  res.on('data', function(chunk){ buf += chunk });
            -  res.on('end', function(){
            -    buf.should.equal('hello this is dog');
            -    done();
            -  });
            -});
            -
            -
            -
            -

            content-length

            -
            -
            should be set to the byte length of a non-buffer object
            -
            var decoder = new StringDecoder('utf8');
            -var img = fs.readFileSync(__dirname + '/fixtures/test.png');
            -img = decoder.write(img);
            -request
            -.post('http://localhost:5000/echo')
            -.type('application/x-image')
            -.send(img)
            -.buffer(false)
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  assert(!res.buffered);
            -  assert.equal(res.header['content-length'], Buffer.byteLength(img));
            -  done();
            -});
            -
            should be set to the length of a buffer object
            -
            var img = fs.readFileSync(__dirname + '/fixtures/test.png');
            -request
            -.post('http://localhost:5000/echo')
            -.type('application/x-image')
            -.send(img)
            -.buffer(true)
            -.end(function(err, res){
            -  assert.equal(null, err);
            -  assert(res.buffered);
            -  assert.equal(res.header['content-length'], img.length);
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            req.set("Content-Type", contentType)

            -
            -
            should work with just the contentType component
            -
            request
            -.post('http://localhost:3005/echo')
            -.set('Content-Type', 'application/json')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  assert(!err);
            -  done();
            -});
            -
            should work with the charset component
            -
            request
            -.post('http://localhost:3005/echo')
            -.set('Content-Type', 'application/json; charset=utf-8')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  assert(!err);
            -  done();
            -});
            -
            -
            -
            -

            exports

            -
            -
            should expose Part
            -
            request.Part.should.be.a.function;
            -
            should expose .protocols
            -
            Object.keys(request.protocols)
            -  .should.eql(['http:', 'https:']);
            -
            should expose .serialize
            -
            Object.keys(request.serialize)
            -  .should.eql(['application/x-www-form-urlencoded', 'application/json']);
            -
            should expose .parse
            -
            Object.keys(request.parse)
            -  .should.eql(['application/x-www-form-urlencoded', 'application/json', 'text', 'image']);
            -
            -
            -
            -

            flags

            -
            -
            -

            with 4xx response

            -
            -
            should set res.error and res.clientError
            -
            request
            -.get('http://localhost:3004/notfound')
            -.end(function(err, res){
            -  assert(err);
            -  assert(!res.ok, 'response should not be ok');
            -  assert(res.error, 'response should be an error');
            -  assert(res.clientError, 'response should be a client error');
            -  assert(!res.serverError, 'response should not be a server error');
            -  done();
            -});
            -
            -
            -
            -

            with 5xx response

            -
            -
            should set res.error and res.serverError
            -
            request
            -.get('http://localhost:3004/error')
            -.end(function(err, res){
            -  assert(err);
            -  assert(!res.ok, 'response should not be ok');
            -  assert(!res.notFound, 'response should not be notFound');
            -  assert(res.error, 'response should be an error');
            -  assert(!res.clientError, 'response should not be a client error');
            -  assert(res.serverError, 'response should be a server error');
            -  done();
            -});
            -
            -
            -
            -

            with 404 Not Found

            -
            -
            should res.notFound
            -
            request
            -.get('http://localhost:3004/notfound')
            -.end(function(err, res){
            -  assert(err);
            -  assert(res.notFound, 'response should be .notFound');
            -  done();
            -});
            -
            -
            -
            -

            with 400 Bad Request

            -
            -
            should set req.badRequest
            -
            request
            -.get('http://localhost:3004/bad-request')
            -.end(function(err, res){
            -  assert(err);
            -  assert(res.badRequest, 'response should be .badRequest');
            -  done();
            -});
            -
            -
            -
            -

            with 401 Bad Request

            -
            -
            should set res.unauthorized
            -
            request
            -.get('http://localhost:3004/unauthorized')
            -.end(function(err, res){
            -  assert(err);
            -  assert(res.unauthorized, 'response should be .unauthorized');
            -  done();
            -});
            -
            -
            -
            -

            with 406 Not Acceptable

            -
            -
            should set res.notAcceptable
            -
            request
            -.get('http://localhost:3004/not-acceptable')
            -.end(function(err, res){
            -  assert(err);
            -  assert(res.notAcceptable, 'response should be .notAcceptable');
            -  done();
            -});
            -
            -
            -
            -

            with 204 No Content

            -
            -
            should set res.noContent
            -
            request
            -.get('http://localhost:3004/no-content')
            -.end(function(err, res){
            -  assert(!err);
            -  assert(res.noContent, 'response should be .noContent');
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            req.send(Object) as "form"

            -
            -
            -

            with req.type() set to form

            -
            -
            should send x-www-form-urlencoded data
            -
            request
            -.post('http://localhost:3002/echo')
            -.type('form')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
            -  res.text.should.equal('name=tobi');
            -  done();
            -});
            -
            -
            -
            -

            when called several times

            -
            -
            should merge the objects
            -
            request
            -.post('http://localhost:3002/echo')
            -.type('form')
            -.send({ name: { first: 'tobi', last: 'holowaychuk' } })
            -.send({ age: '1' })
            -.end(function(err, res){
            -  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
            -  res.text.should.equal('name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1');
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            req.send(String)

            -
            -
            should default to "form"
            -
            request
            -.post('http://localhost:3002/echo')
            -.send('user[name]=tj')
            -.send('user[email]=tj@vision-media.ca')
            -.end(function(err, res){
            -  res.header['content-type'].should.equal('application/x-www-form-urlencoded');
            -  res.body.should.eql({ user: { name: 'tj', email: 'tj@vision-media.ca' } });
            -  done();
            -})
            -
            -
            -
            -

            res.body

            -
            -
            -

            application/x-www-form-urlencoded

            -
            -
            should parse the body
            -
            request
            -.get('http://localhost:3002/form-data')
            -.end(function(err, res){
            -  res.text.should.equal('pet[name]=manny');
            -  res.body.should.eql({ pet: { name: 'manny' }});
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            https

            -
            -
            -

            request

            -
            -
            should give a good response
            -
            request
            -.get('https://localhost:8443/')
            -.ca(cert)
            -.end(function(err, res){
            -  assert(res.ok);
            -  assert.strictEqual('Safe and secure!', res.text);
            -  done();
            -});
            -
            -
            -
            -

            .agent

            -
            -
            should be able to make multiple requests without redefining the certificate
            -
            var agent = request.agent({ca: cert});
            -agent
            -.get('https://localhost:8443/')
            -.end(function(err, res){
            -  assert(res.ok);
            -  assert.strictEqual('Safe and secure!', res.text);
            -  agent
            -  .get(url.parse('https://localhost:8443/'))
            -  .end(function(err, res){
            -    assert(res.ok);
            -    assert.strictEqual('Safe and secure!', res.text);
            -    done();
            -  });
            -});
            -
            -
            -
            -
            -
            -

            res.body

            -
            -
            -

            image/png

            -
            -
            should parse the body
            -
            request
            -.get('http://localhost:3011/image')
            -.end(function(err, res){
            -  (res.body.length - img.length).should.equal(0);
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            zlib

            -
            -
            should deflate the content
            -
            request
            -  .get('http://localhost:3080')
            -  .end(function(err, res){
            -    res.should.have.status(200);
            -    res.text.should.equal(subject);
            -    res.headers['content-length'].should.be.below(subject.length);
            -    done();
            -  });
            -
            should handle corrupted responses
            -
            request
            -  .get('http://localhost:3080/corrupt')
            -  .end(function(err, res){
            -    assert(err, 'missing error');
            -    assert(!res, 'response should not be defined');
            -    done();
            -  });
            -
            -

            without encoding set

            -
            -
            should emit buffers
            -
            request
            -  .get('http://localhost:3080/binary')
            -  .end(function(err, res){
            -    res.should.have.status(200);
            -    res.headers['content-length'].should.be.below(subject.length);
            -    res.on('data', function(chunk){
            -      chunk.should.have.length(subject.length);
            -    });
            -    res.on('end', done);
            -  });
            -
            -
            -
            -
            -
            -

            req.send(Object) as "json"

            -
            -
            should default to json
            -
            request
            -.post('http://localhost:3005/echo')
            -.send({ name: 'tobi' })
            -.end(function(err, res){
            -  res.should.be.json
            -  res.text.should.equal('{"name":"tobi"}');
            -  done();
            -});
            -
            should work with arrays
            -
            request
            -.post('http://localhost:3005/echo')
            -.send([1,2,3])
            -.end(function(err, res){
            -  res.should.be.json
            -  res.text.should.equal('[1,2,3]');
            -  done();
            -});
            -
            should work with value null
            -
            request
            -.post('http://localhost:3005/echo')
            -.type('json')
            -.send('null')
            -.end(function(err, res){
            -  res.should.be.json
            -  assert.strictEqual(res.body, null);
            -  done();
            -});
            -
            should work with value false
            -
            request
            -.post('http://localhost:3005/echo')
            -.type('json')
            -.send('false')
            -.end(function(err, res){
            -  res.should.be.json
            -  res.body.should.equal(false);
            -  done();
            -});
            -
            should work with value 0
            -
            request
            -.post('http://localhost:3005/echo')
            -.type('json')
            -.send('0')
            -.end(function(err, res){
            -  res.should.be.json
            -  res.body.should.equal(0);
            -  done();
            -});
            -
            should work with empty string value
            -
            request
            -.post('http://localhost:3005/echo')
            -.type('json')
            -.send('""')
            -.end(function(err, res){
            -  res.should.be.json
            -  res.body.should.equal("");
            -  done();
            -});
            -
            should work with GET
            -
            request
            -.get('http://localhost:3005/echo')
            -.send({ tobi: 'ferret' })
            -.end(function(err, res){
            -  res.should.be.json
            -  res.text.should.equal('{"tobi":"ferret"}');
            -  done();
            -});
            -
            should work with vendor MIME type
            -
            request
            -.post('http://localhost:3005/echo')
            -.set('Content-Type', 'application/vnd.example+json')
            -.send({ name: 'vendor' })
            -.end(function(err, res){
            -  res.text.should.equal('{"name":"vendor"}');
            -  done();
            -});
            -
            -

            when called several times

            -
            -
            should merge the objects
            -
            request
            -.post('http://localhost:3005/echo')
            -.send({ name: 'tobi' })
            -.send({ age: 1 })
            -.end(function(err, res){
            -  res.should.be.json
            -  res.text.should.equal('{"name":"tobi","age":1}');
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            res.body

            -
            -
            -

            application/json

            -
            -
            should parse the body
            -
            request
            -.get('http://localhost:3005/json')
            -.end(function(err, res){
            -  res.text.should.equal('{"name":"manny"}');
            -  res.body.should.eql({ name: 'manny' });
            -  done();
            -});
            -
            -
            -
            -

            HEAD requests

            -
            -
            should not throw a parse error
            -
            request
            -.head('http://localhost:3005/json')
            -.end(function(err, res){
            -  assert.strictEqual(err, null);
            -  assert.strictEqual(res.text, undefined)
            -  assert.strictEqual(Object.keys(res.body).length, 0)
            -  done();
            -});
            -
            -
            -
            -

            Invalid JSON response

            -
            -
            should return the raw response
            -
            request
            -.get('http://localhost:3005/invalid-json')
            -.end(function(err, res){
            -  assert.deepEqual(err.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}");
            -  done();
            -});
            -
            -
            -
            -

            No content

            -
            -
            should not throw a parse error
            -
            request
            -.get('http://localhost:3005/no-content')
            -.end(function(err, res){
            -  assert.strictEqual(err, null);
            -  assert.strictEqual(res.text, '');
            -  assert.strictEqual(Object.keys(res.body).length, 0);
            -  done();
            -});
            -
            -
            -
            -

            application/json+hal

            -
            -
            should parse the body
            -
            request
            -.get('http://localhost:3005/json-hal')
            -.end(function(err, res){
            -  if (err) return done(err);
            -  res.text.should.equal('{"name":"hal 5000"}');
            -  res.body.should.eql({ name: 'hal 5000' });
            -  done();
            -});
            -
            -
            -
            -

            vnd.collection+json

            -
            -
            should parse the body
            -
            request
            -.get('http://localhost:3005/collection-json')
            -.end(function(err, res){
            -  res.text.should.equal('{"name":"chewbacca"}');
            -  res.body.should.eql({ name: 'chewbacca' });
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            Request

            -
            -
            -

            #attach(name, path, filename)

            -
            -
            should use the custom filename
            -
            request
            -.post(':3005/echo')
            -.attach('document', 'test/node/fixtures/user.html', 'doc.html')
            -.end(function(err, res){
            -  if (err) return done(err);
            -  var html = res.files.document;
            -  html.name.should.equal('doc.html');
            -  html.type.should.equal('text/html');
            -  read(html.path).should.equal('<h1>name</h1>');
            -  done();
            -})
            -
            should fire progress event
            -
            var loaded = 0;
            -var total = 0;
            -request
            -.post(':3005/echo')
            -.attach('document', 'test/node/fixtures/user.html')
            -.on('progress', function (event) {
            -  total = event.total;
            -  loaded = event.loaded;
            -})
            -.end(function(err, res){
            -  if (err) return done(err);
            -  var html = res.files.document;
            -  html.name.should.equal('user.html');
            -  html.type.should.equal('text/html');
            -  read(html.path).should.equal('<h1>name</h1>');
            -  total.should.equal(221);
            -  loaded.should.equal(221);
            -  done();
            -})
            -
            -
            -
            -
            -
            -

            with network error

            -
            -
            should error
            -
            request
            -.get('http://localhost:' + this.port + '/')
            -.end(function(err, res){
            -  assert(err, 'expected an error');
            -  done();
            -});
            -
            -
            -
            -

            request

            -
            -
            -

            not modified

            -
            -
            should start with 200
            -
            request
            -.get('http://localhost:3008/')
            -.end(function(err, res){
            -  res.should.have.status(200)
            -  res.text.should.match(/^\d+$/);
            -  ts = +res.text;
            -  done();
            -});
            -
            should then be 304
            -
            request
            -.get('http://localhost:3008/')
            -.set('If-Modified-Since', new Date(ts).toUTCString())
            -.end(function(err, res){
            -  res.should.have.status(304)
            -  // res.text.should.be.empty
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            req.parse(fn)

            -
            -
            should take precedence over default parsers
            -
            request
            -.get('http://localhost:3033/manny')
            -.parse(request.parse['application/json'])
            -.end(function(err, res){
            -  assert(res.ok);
            -  assert.equal('{"name":"manny"}', res.text);
            -  assert.equal('manny', res.body.name);
            -  done();
            -});
            -
            should be the only parser
            -
            request
            -.get('http://localhost:3033/image')
            -.parse(function(res, fn) {
            -  res.on('data', function() {});
            -})
            -.end(function(err, res){
            -  assert(res.ok);
            -  assert.strictEqual(res.text, undefined);
            -  res.body.should.eql({});
            -  done();
            -});
            -
            should emit error if parser throws
            -
            request
            -.get('http://localhost:3033/manny')
            -.parse(function() {
            -  throw new Error('I am broken');
            -})
            -.on('error', function(err) {
            -  err.message.should.equal('I am broken');
            -  done();
            -})
            -.end();
            -
            should emit error if parser returns an error
            -
            request
            -.get('http://localhost:3033/manny')
            -.parse(function(res, fn) {
            -  fn(new Error('I am broken'));
            -})
            -.on('error', function(err) {
            -  err.message.should.equal('I am broken');
            -  done();
            -})
            -.end()
            -
            should not emit error on chunked json
            -
            request
            -.get('http://localhost:3033/chunked-json')
            -.end(function(err){
            -  assert(!err);
            -  done();
            -});
            -
            should not emit error on aborted chunked json
            -
            var req = request
            -.get('http://localhost:3033/chunked-json')
            -.end(function(err){
            -  assert(!err);
            -  done();
            -});
            -setTimeout(function(){req.abort()},50);
            -
            -
            -
            -

            pipe on redirect

            -
            -
            should follow Location
            -
            var stream = fs.createWriteStream('test/node/fixtures/pipe.txt');
            -var redirects = [];
            -var req = request
            -  .get('http://localhost:3012/')
            -  .on('redirect', function (res) {
            -    redirects.push(res.headers.location);
            -  })
            -  .on('end', function () {
            -    var arr = [];
            -    arr.push('/movies');
            -    arr.push('/movies/all');
            -    arr.push('/movies/all/0');
            -    redirects.should.eql(arr);
            -    fs.readFileSync('test/node/fixtures/pipe.txt', 'utf8').should.eql('first movie page');
            -    done();
            -  });
            -  req.pipe(stream);
            -
            -
            -
            -

            request pipe

            -
            -
            should act as a writable stream
            -
            var req = request.post('http://localhost:3020');
            -var stream = fs.createReadStream('test/node/fixtures/user.json');
            -req.type('json');
            -req.on('response', function(res){
            -  res.body.should.eql({ name: 'tobi' });
            -  done();
            -});
            -stream.pipe(req);
            -
            should act as a readable stream
            -
            var stream = fs.createWriteStream('test/node/fixtures/tmp.json');
            -var req = request.get('http://localhost:3025');
            -req.type('json');
            -req.on('end', function(){
            -  JSON.parse(fs.readFileSync('test/node/fixtures/tmp.json', 'utf8')).should.eql({ name: 'tobi' });
            -  done();
            -});
            -req.pipe(stream);
            -
            -
            -
            -

            req.query(String)

            -
            -
            should supply uri malformed error to the callback
            -
            request
            -.get('http://localhost:3006')
            -.query('name=toby')
            -.query('a=\uD800')
            -.query({ b: '\uD800' })
            -.end(function(err, res){
            -  assert(err instanceof Error);
            -  assert.equal('URIError', err.name);
            -  done();
            -});
            -
            should support passing in a string
            -
            request
            -.del('http://localhost:3006')
            -.query('name=t%F6bi')
            -.end(function(err, res){
            -  res.body.should.eql({ name: 't%F6bi' });
            -  done();
            -});
            -
            should work with url query-string and string for query
            -
            request
            -.del('http://localhost:3006/?name=tobi')
            -.query('age=2%20')
            -.end(function(err, res){
            -  res.body.should.eql({ name: 'tobi', age: '2 ' });
            -  done();
            -});
            -
            should support compound elements in a string
            -
            request
            -  .del('http://localhost:3006/')
            -  .query('name=t%F6bi&age=2')
            -  .end(function(err, res){
            -    res.body.should.eql({ name: 't%F6bi', age: '2' });
            -    done();
            -  });
            -
            should work when called multiple times with a string
            -
            request
            -.del('http://localhost:3006/')
            -.query('name=t%F6bi')
            -.query('age=2%F6')
            -.end(function(err, res){
            -  res.body.should.eql({ name: 't%F6bi', age: '2%F6' });
            -  done();
            -});
            -
            should work with normal `query` object and query string
            -
            request
            -.del('http://localhost:3006/')
            -.query('name=t%F6bi')
            -.query({ age: '2' })
            -.end(function(err, res){
            -  res.body.should.eql({ name: 't%F6bi', age: '2' });
            -  done();
            -});
            -
            -
            -
            -

            req.query(Object)

            -
            -
            should construct the query-string
            -
            request
            -.del('http://localhost:3006/')
            -.query({ name: 'tobi' })
            -.query({ order: 'asc' })
            -.query({ limit: ['1', '2'] })
            -.end(function(err, res){
            -  res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
            -  done();
            -});
            -
            should not error on dates
            -
            var date = new Date(0);
            -request
            -.del('http://localhost:3006/')
            -.query({ at: date })
            -.end(function(err, res){
            -  assert.equal(date.toISOString(), res.body.at);
            -  done();
            -});
            -
            should work after setting header fields
            -
            request
            -.del('http://localhost:3006/')
            -.set('Foo', 'bar')
            -.set('Bar', 'baz')
            -.query({ name: 'tobi' })
            -.query({ order: 'asc' })
            -.query({ limit: ['1', '2'] })
            -.end(function(err, res){
            -  res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
            -  done();
            -});
            -
            should append to the original query-string
            -
            request
            -.del('http://localhost:3006/?name=tobi')
            -.query({ order: 'asc' })
            -.end(function(err, res) {
            -  res.body.should.eql({ name: 'tobi', order: 'asc' });
            -  done();
            -});
            -
            should retain the original query-string
            -
            request
            -.del('http://localhost:3006/?name=tobi')
            -.end(function(err, res) {
            -  res.body.should.eql({ name: 'tobi' });
            -  done();
            -});
            -
            -
            -
            -

            request.get

            -
            -
            -

            on 301 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .get('http://localhost:3210/test-301')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 302 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .get('http://localhost:3210/test-302')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 303 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .get('http://localhost:3210/test-303')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 307 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .get('http://localhost:3210/test-307')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 308 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .get('http://localhost:3210/test-308')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -
            -
            -

            request.post

            -
            -
            -

            on 301 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .post('http://localhost:3210/test-301')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 302 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .post('http://localhost:3210/test-302')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 303 redirect

            -
            -
            should follow Location with a GET request
            -
            var req = request
            -  .post('http://localhost:3210/test-303')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('GET');
            -    done();
            -  });
            -
            -
            -
            -

            on 307 redirect

            -
            -
            should follow Location with a POST request
            -
            var req = request
            -  .post('http://localhost:3210/test-307')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('POST');
            -    done();
            -  });
            -
            -
            -
            -

            on 308 redirect

            -
            -
            should follow Location with a POST request
            -
            var req = request
            -  .post('http://localhost:3210/test-308')
            -  .redirects(1)
            -  .end(function(err, res){
            -    req.req._headers.host.should.eql('localhost:3211');
            -    res.status.should.eql(200);
            -    res.text.should.eql('POST');
            -    done();
            -  });
            -
            -
            -
            -
            -
            -

            request

            -
            -
            -

            on redirect

            -
            -
            should follow Location
            -
            var redirects = [];
            -request
            -.get('http://localhost:3003/')
            -.on('redirect', function(res){
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  arr.push('/movies');
            -  arr.push('/movies/all');
            -  arr.push('/movies/all/0');
            -  redirects.should.eql(arr);
            -  res.text.should.equal('first movie page');
            -  done();
            -});
            -
            should retain header fields
            -
            request
            -.get('http://localhost:3003/header')
            -.set('X-Foo', 'bar')
            -.end(function(err, res){
            -  res.body.should.have.property('x-foo', 'bar');
            -  done();
            -});
            -
            should remove Content-* fields
            -
            request
            -.post('http://localhost:3003/header')
            -.type('txt')
            -.set('X-Foo', 'bar')
            -.set('X-Bar', 'baz')
            -.send('hey')
            -.end(function(err, res){
            -  res.body.should.have.property('x-foo', 'bar');
            -  res.body.should.have.property('x-bar', 'baz');
            -  res.body.should.not.have.property('content-type');
            -  res.body.should.not.have.property('content-length');
            -  res.body.should.not.have.property('transfer-encoding');
            -  done();
            -});
            -
            should retain cookies
            -
            request
            -.get('http://localhost:3003/header')
            -.set('Cookie', 'foo=bar;')
            -.end(function(err, res){
            -  res.body.should.have.property('cookie', 'foo=bar;');
            -  done();
            -});
            -
            should preserve timeout across redirects
            -
            request
            -.get('http://localhost:3003/movies/random')
            -.timeout(250)
            -.end(function(err, res){
            -  assert(err instanceof Error, 'expected an error');
            -  err.should.have.property('timeout', 250);
            -  done();
            -});
            -
            should not resend query parameters
            -
            var redirects = [];
            -var query = [];
            -request
            -.get('http://localhost:3003/?foo=bar')
            -.on('redirect', function(res){
            -  query.push(res.headers.query);
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  arr.push('/movies');
            -  arr.push('/movies/all');
            -  arr.push('/movies/all/0');
            -  redirects.should.eql(arr);
            -  res.text.should.equal('first movie page');
            -  query.should.eql(['{"foo":"bar"}', '{}', '{}']);
            -  res.headers.query.should.eql('{}');
            -  done();
            -});
            -
            should handle no location header
            -
            request
            -.get('http://localhost:3003/bad-redirect')
            -.end(function(err, res){
            -  err.message.should.equal('No location header for redirect');
            -  done();
            -});
            -
            -

            when relative

            -
            -
            should redirect to a sibling path
            -
            var redirects = [];
            -request
            -.get('http://localhost:3003/relative')
            -.on('redirect', function(res){
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  redirects.should.eql(['tobi']);
            -  res.text.should.equal('tobi');
            -  done();
            -});
            -
            should redirect to a parent path
            -
            var redirects = [];
            -request
            -.get('http://localhost:3003/relative/sub')
            -.on('redirect', function(res){
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  redirects.should.eql(['../tobi']);
            -  res.text.should.equal('tobi');
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            req.redirects(n)

            -
            -
            should alter the default number of redirects to follow
            -
            var redirects = [];
            -request
            -.get('http://localhost:3003/')
            -.redirects(2)
            -.on('redirect', function(res){
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  assert(res.redirect, 'res.redirect');
            -  arr.push('/movies');
            -  arr.push('/movies/all');
            -  redirects.should.eql(arr);
            -  res.text.should.match(/Moved Temporarily|Found/);
            -  done();
            -});
            -
            -
            -
            -

            on POST

            -
            -
            should redirect as GET
            -
            var redirects = [];
            -request
            -.post('http://localhost:3003/movie')
            -.send({ name: 'Tobi' })
            -.redirects(2)
            -.on('redirect', function(res){
            -  redirects.push(res.headers.location);
            -})
            -.end(function(err, res){
            -  var arr = [];
            -  arr.push('/movies/all/0');
            -  redirects.should.eql(arr);
            -  res.text.should.equal('first movie page');
            -  done();
            -});
            -
            -
            -
            -

            on 303

            -
            -
            should redirect with same method
            -
            request
            -.put('http://localhost:3003/redirect-303')
            -.send({msg: "hello"})
            -.redirects(1)
            -.on('redirect', function(res) {
            -  res.headers.location.should.equal('/reply-method')
            -})
            -.end(function(err, res){
            -  res.text.should.equal('method=get');
            -  done();
            -})
            -
            -
            -
            -

            on 307

            -
            -
            should redirect with same method
            -
            request
            -.put('http://localhost:3003/redirect-307')
            -.send({msg: "hello"})
            -.redirects(1)
            -.on('redirect', function(res) {
            -  res.headers.location.should.equal('/reply-method')
            -})
            -.end(function(err, res){
            -  res.text.should.equal('method=put');
            -  done();
            -})
            -
            -
            -
            -

            on 308

            -
            -
            should redirect with same method
            -
            request
            -.put('http://localhost:3003/redirect-308')
            -.send({msg: "hello"})
            -.redirects(1)
            -.on('redirect', function(res) {
            -  res.headers.location.should.equal('/reply-method')
            -})
            -.end(function(err, res){
            -  res.text.should.equal('method=put');
            -  done();
            -})
            -
            -
            -
            -
            -
            -

            response

            -
            -
            should act as a readable stream
            -
            var req = request
            -  .get('http://localhost:3025')
            -  .buffer(false);
            -req.end(function(err,res){
            -  if (err) return done(err);
            -  var trackEndEvent = 0;
            -  var trackCloseEvent = 0;
            -  res.on('end',function(){
            -    trackEndEvent++;
            -    trackEndEvent.should.equal(1);
            -    trackCloseEvent.should.equal(0);  // close should not have been called
            -    done();
            -  });
            -  res.on('close',function(){
            -    trackCloseEvent++;
            -  });
            -
            -  (function(){ res.pause() }).should.not.throw();
            -  (function(){ res.resume() }).should.not.throw();
            -  (function(){ res.destroy() }).should.not.throw();
            -});
            -
            -
            -
            -

            .timeout(ms)

            -
            -
            -

            when timeout is exceeded

            -
            -
            should error
            -
            request
            -.get('http://localhost:3009/500')
            -.timeout(150)
            -.end(function(err, res){
            -  assert(err, 'expected an error');
            -  assert.equal('number', typeof err.timeout, 'expected an error with .timeout');
            -  assert.equal('ECONNABORTED', err.code, 'expected abort error code')
            -  done();
            -});
            -
            -
            -
            -
            -
            -

            res.toError()

            -
            -
            should return an Error
            -
            request
            -.get('http://localhost:' + server.address().port)
            -.end(function(err, res){
            -  var err = res.toError();
            -  assert.equal(err.status, 400);
            -  assert.equal(err.method, 'GET');
            -  assert.equal(err.path, '/');
            -  assert.equal(err.message, 'cannot GET / (400)');
            -  assert.equal(err.text, 'invalid json');
            -  done();
            -});
            -
            -
            -
            -

            req.get()

            -
            -
            should set a default user-agent
            -
            request
            -.get('http://localhost:3345/ua')
            -.end(function(err, res){
            -  assert(res.headers);
            -  assert(res.headers['user-agent']);
            -  assert(/^node-superagent\/\d+\.\d+\.\d+$/.test(res.headers['user-agent']));
            -  done();
            -});
            -
            should be able to override user-agent
            -
            request
            -.get('http://localhost:3345/ua')
            -.set('User-Agent', 'foo/bar')
            -.end(function(err, res){
            -  assert(res.headers);
            -  assert.equal(res.headers['user-agent'], 'foo/bar');
            -  done();
            -});
            -
            should be able to wipe user-agent
            -
            request
            -.get('http://localhost:3345/ua')
            -.unset('User-Agent')
            -.end(function(err, res){
            -  assert(res.headers);
            -  assert.equal(res.headers['user-agent'], void 0);
            -  done();
            -});
            -
            -
            -
            -

            utils.type(str)

            -
            -
            should return the mime type
            -
            utils.type('application/json; charset=utf-8')
            -  .should.equal('application/json');
            -utils.type('application/json')
            -  .should.equal('application/json');
            -
            -
            -
            -

            utils.params(str)

            -
            -
            should return the field parameters
            -
            var str = 'application/json; charset=utf-8; foo  = bar';
            -var obj = utils.params(str);
            -obj.charset.should.equal('utf-8');
            -obj.foo.should.equal('bar');
            -var str = 'application/json';
            -utils.params(str).should.eql({});
            -
            -
            -
            -

            utils.parseLinks(str)

            -
            -
            should parse links
            -
            var str = '<https://api.github.com/repos/visionmedia/mocha/issues?page=2>; rel="next", <https://api.github.com/repos/visionmedia/mocha/issues?page=5>; rel="last"';
            -var ret = utils.parseLinks(str);
            -ret.next.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=2');
            -ret.last.should.equal('https://api.github.com/repos/visionmedia/mocha/issues?page=5');
            -
            -
            -
            - Fork me on GitHub - - diff --git a/build/node_modules/superagent/lib/agent-base.js b/build/node_modules/superagent/lib/agent-base.js index 95d08701..6b08fe74 100644 --- a/build/node_modules/superagent/lib/agent-base.js +++ b/build/node_modules/superagent/lib/agent-base.js @@ -1,20 +1,60 @@ +"use strict"; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + function Agent() { this._defaults = []; } -["use", "on", "once", "set", "query", "type", "accept", "auth", "withCredentials", "sortQuery", "retry", "ok", "redirects", - "timeout", "buffer", "serialize", "parse", "ca", "key", "pfx", "cert"].forEach(function(fn) { - /** Default setting for all requests from this agent */ - Agent.prototype[fn] = function(/*varargs*/) { - this._defaults.push({fn:fn, arguments:arguments}); - return this; - } -}); +var _loop = function _loop() { + var fn = _arr[_i]; -Agent.prototype._setDefaults = function(req) { - this._defaults.forEach(function(def) { - req[def.fn].apply(req, def.arguments); + // Default setting for all requests from this agent + Agent.prototype[fn] = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + this._defaults.push({ + fn: fn, + args: args }); + + return this; + }; +}; + +for (var _i = 0, _arr = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts']; _i < _arr.length; _i++) { + _loop(); +} + +Agent.prototype._setDefaults = function (request) { + var _iterator = _createForOfIteratorHelper(this._defaults), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var def = _step.value; + request[def.fn].apply(request, _toConsumableArray(def.args)); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } }; module.exports = Agent; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZ2VudC1iYXNlLmpzIl0sIm5hbWVzIjpbIkFnZW50IiwiX2RlZmF1bHRzIiwiZm4iLCJwcm90b3R5cGUiLCJhcmdzIiwicHVzaCIsIl9zZXREZWZhdWx0cyIsInJlcXVlc3QiLCJkZWYiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBU0EsS0FBVCxHQUFpQjtBQUNmLE9BQUtDLFNBQUwsR0FBaUIsRUFBakI7QUFDRDs7O0FBRUksTUFBTUMsRUFBRSxXQUFSOztBQXdCSDtBQUNBRixFQUFBQSxLQUFLLENBQUNHLFNBQU4sQ0FBZ0JELEVBQWhCLElBQXNCLFlBQW1CO0FBQUEsc0NBQU5FLElBQU07QUFBTkEsTUFBQUEsSUFBTTtBQUFBOztBQUN2QyxTQUFLSCxTQUFMLENBQWVJLElBQWYsQ0FBb0I7QUFBRUgsTUFBQUEsRUFBRSxFQUFGQSxFQUFGO0FBQU1FLE1BQUFBLElBQUksRUFBSkE7QUFBTixLQUFwQjs7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhEOzs7QUF6QkYsd0JBQWlCLENBQ2YsS0FEZSxFQUVmLElBRmUsRUFHZixNQUhlLEVBSWYsS0FKZSxFQUtmLE9BTGUsRUFNZixNQU5lLEVBT2YsUUFQZSxFQVFmLE1BUmUsRUFTZixpQkFUZSxFQVVmLFdBVmUsRUFXZixPQVhlLEVBWWYsSUFaZSxFQWFmLFdBYmUsRUFjZixTQWRlLEVBZWYsUUFmZSxFQWdCZixXQWhCZSxFQWlCZixPQWpCZSxFQWtCZixJQWxCZSxFQW1CZixLQW5CZSxFQW9CZixLQXBCZSxFQXFCZixNQXJCZSxFQXNCZixpQkF0QmUsQ0FBakIsMEJBdUJHO0FBQUE7QUFNRjs7QUFFREosS0FBSyxDQUFDRyxTQUFOLENBQWdCRyxZQUFoQixHQUErQixVQUFVQyxPQUFWLEVBQW1CO0FBQUEsNkNBQzlCLEtBQUtOLFNBRHlCO0FBQUE7O0FBQUE7QUFDaEQsd0RBQWtDO0FBQUEsVUFBdkJPLEdBQXVCO0FBQ2hDRCxNQUFBQSxPQUFPLENBQUNDLEdBQUcsQ0FBQ04sRUFBTCxDQUFQLE9BQUFLLE9BQU8scUJBQVlDLEdBQUcsQ0FBQ0osSUFBaEIsRUFBUDtBQUNEO0FBSCtDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJakQsQ0FKRDs7QUFNQUssTUFBTSxDQUFDQyxPQUFQLEdBQWlCVixLQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIEFnZW50KCkge1xuICB0aGlzLl9kZWZhdWx0cyA9IFtdO1xufVxuXG5mb3IgKGNvbnN0IGZuIG9mIFtcbiAgJ3VzZScsXG4gICdvbicsXG4gICdvbmNlJyxcbiAgJ3NldCcsXG4gICdxdWVyeScsXG4gICd0eXBlJyxcbiAgJ2FjY2VwdCcsXG4gICdhdXRoJyxcbiAgJ3dpdGhDcmVkZW50aWFscycsXG4gICdzb3J0UXVlcnknLFxuICAncmV0cnknLFxuICAnb2snLFxuICAncmVkaXJlY3RzJyxcbiAgJ3RpbWVvdXQnLFxuICAnYnVmZmVyJyxcbiAgJ3NlcmlhbGl6ZScsXG4gICdwYXJzZScsXG4gICdjYScsXG4gICdrZXknLFxuICAncGZ4JyxcbiAgJ2NlcnQnLFxuICAnZGlzYWJsZVRMU0NlcnRzJ1xuXSkge1xuICAvLyBEZWZhdWx0IHNldHRpbmcgZm9yIGFsbCByZXF1ZXN0cyBmcm9tIHRoaXMgYWdlbnRcbiAgQWdlbnQucHJvdG90eXBlW2ZuXSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5fZGVmYXVsdHMucHVzaCh7IGZuLCBhcmdzIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuX3NldERlZmF1bHRzID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmYXVsdHMpIHtcbiAgICByZXF1ZXN0W2RlZi5mbl0oLi4uZGVmLmFyZ3MpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/client.js b/build/node_modules/superagent/lib/client.js index c33fdca7..50c9af89 100644 --- a/build/node_modules/superagent/lib/client.js +++ b/build/node_modules/superagent/lib/client.js @@ -1,67 +1,101 @@ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + /** * Root reference for iframes. */ - var root; -if (typeof window !== 'undefined') { // Browser window + +if (typeof window !== 'undefined') { + // Browser window root = window; -} else if (typeof self !== 'undefined') { // Web Worker +} else if (typeof self === 'undefined') { + // Other environments + console.warn('Using browser-only version of superagent in non-browser environment'); + root = void 0; +} else { + // Web Worker root = self; -} else { // Other environments - console.warn("Using browser-only version of superagent in non-browser environment"); - root = this; } var Emitter = require('component-emitter'); + +var safeStringify = require('fast-safe-stringify'); + +var qs = require('qs'); + var RequestBase = require('./request-base'); -var isObject = require('./is-object'); + +var _require = require('./utils'), + isObject = _require.isObject, + mixin = _require.mixin, + hasOwn = _require.hasOwn; + var ResponseBase = require('./response-base'); -var Agent = require('./agent-base'); +var Agent = require('./agent-base'); /** * Noop. */ -function noop(){}; +function noop() {} /** * Expose `request`. */ -var request = exports = module.exports = function(method, url) { + +module.exports = function (method, url) { // callback - if ('function' == typeof url) { + if (typeof url === 'function') { return new exports.Request('GET', method).end(url); - } + } // url first - // url first - if (1 == arguments.length) { + + if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); -} +}; +exports = module.exports; +var request = exports; exports.Request = Request; - /** * Determine XHR. */ request.getXHR = function () { - if (root.XMLHttpRequest - && (!root.location || 'file:' != root.location.protocol - || !root.ActiveXObject)) { - return new XMLHttpRequest; - } else { - try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {} + if (root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:' || !root.ActiveXObject)) { + return new XMLHttpRequest(); } - throw Error("Browser-only version of superagent could not find XHR"); -}; + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch (_unused) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.6.0'); + } catch (_unused2) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP.3.0'); + } catch (_unused3) {} + + try { + return new ActiveXObject('Msxml2.XMLHTTP'); + } catch (_unused4) {} + + throw new Error('Browser-only version of superagent could not find XHR'); +}; /** * Removes leading and trailing whitespace, added to support IE. * @@ -70,10 +104,12 @@ request.getXHR = function () { * @api private */ -var trim = ''.trim - ? function(s) { return s.trim(); } - : function(s) { return s.replace(/(^\s*|\s*$)/g, ''); }; +var trim = ''.trim ? function (s) { + return s.trim(); +} : function (s) { + return s.replace(/(^\s*|\s*$)/g, ''); +}; /** * Serialize the given `obj`. * @@ -82,15 +118,16 @@ var trim = ''.trim * @api private */ -function serialize(obj) { - if (!isObject(obj)) return obj; +function serialize(object) { + if (!isObject(object)) return object; var pairs = []; - for (var key in obj) { - pushEncodedKeyValuePair(pairs, key, obj[key]); + + for (var key in object) { + if (hasOwn(object, key)) pushEncodedKeyValuePair(pairs, key, object[key]); } + return pairs.join('&'); } - /** * Helps 'serialize' with serializing arrays. * Mutates the pairs array. @@ -100,65 +137,76 @@ function serialize(obj) { * @param {Mixed} val */ -function pushEncodedKeyValuePair(pairs, key, val) { - if (val != null) { - if (Array.isArray(val)) { - val.forEach(function(v) { + +function pushEncodedKeyValuePair(pairs, key, value) { + if (value === undefined) return; + + if (value === null) { + pairs.push(encodeURI(key)); + return; + } + + if (Array.isArray(value)) { + var _iterator = _createForOfIteratorHelper(value), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var v = _step.value; pushEncodedKeyValuePair(pairs, key, v); - }); - } else if (isObject(val)) { - for(var subkey in val) { - pushEncodedKeyValuePair(pairs, key + '[' + subkey + ']', val[subkey]); } - } else { - pairs.push(encodeURIComponent(key) - + '=' + encodeURIComponent(val)); + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else if (isObject(value)) { + for (var subkey in value) { + if (hasOwn(value, subkey)) pushEncodedKeyValuePair(pairs, "".concat(key, "[").concat(subkey, "]"), value[subkey]); } - } else if (val === null) { - pairs.push(encodeURIComponent(key)); + } else { + pairs.push(encodeURI(key) + '=' + encodeURIComponent(value)); } } - /** * Expose serialization method. */ -request.serializeObject = serialize; +request.serializeObject = serialize; /** - * Parse the given x-www-form-urlencoded `str`. - * - * @param {String} str - * @return {Object} - * @api private - */ + * Parse the given x-www-form-urlencoded `str`. + * + * @param {String} str + * @return {Object} + * @api private + */ -function parseString(str) { - var obj = {}; - var pairs = str.split('&'); +function parseString(string_) { + var object = {}; + var pairs = string_.split('&'); var pair; var pos; - for (var i = 0, len = pairs.length; i < len; ++i) { + for (var i = 0, length_ = pairs.length; i < length_; ++i) { pair = pairs[i]; pos = pair.indexOf('='); - if (pos == -1) { - obj[decodeURIComponent(pair)] = ''; + + if (pos === -1) { + object[decodeURIComponent(pair)] = ''; } else { - obj[decodeURIComponent(pair.slice(0, pos))] = - decodeURIComponent(pair.slice(pos + 1)); + object[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent(pair.slice(pos + 1)); } } - return obj; + return object; } - /** * Expose parser. */ -request.parseString = parseString; +request.parseString = parseString; /** * Default MIME type map. * @@ -171,10 +219,9 @@ request.types = { json: 'application/json', xml: 'text/xml', urlencoded: 'application/x-www-form-urlencoded', - 'form': 'application/x-www-form-urlencoded', + form: 'application/x-www-form-urlencoded', 'form-data': 'application/x-www-form-urlencoded' }; - /** * Default serialization map. * @@ -185,24 +232,22 @@ request.types = { */ request.serialize = { - 'application/x-www-form-urlencoded': serialize, - 'application/json': JSON.stringify + 'application/x-www-form-urlencoded': qs.stringify, + 'application/json': safeStringify }; - /** - * Default parsers. - * - * superagent.parse['application/xml'] = function(str){ - * return { object parsed from str }; - * }; - * - */ + * Default parsers. + * + * superagent.parse['application/xml'] = function(str){ + * return { object parsed from str }; + * }; + * + */ request.parse = { 'application/x-www-form-urlencoded': parseString, 'application/json': JSON.parse }; - /** * Parse the given header `str` into * an object containing the mapped fields. @@ -212,28 +257,30 @@ request.parse = { * @api private */ -function parseHeader(str) { - var lines = str.split(/\r?\n/); +function parseHeader(string_) { + var lines = string_.split(/\r?\n/); var fields = {}; var index; var line; var field; - var val; + var value; - for (var i = 0, len = lines.length; i < len; ++i) { + for (var i = 0, length_ = lines.length; i < length_; ++i) { line = lines[i]; index = line.indexOf(':'); - if (index === -1) { // could be empty line, just skip it + + if (index === -1) { + // could be empty line, just skip it continue; } + field = line.slice(0, index).toLowerCase(); - val = trim(line.slice(index + 1)); - fields[field] = val; + value = trim(line.slice(index + 1)); + fields[field] = value; } return fields; } - /** * Check if `mime` is json or has +json structured syntax suffix. * @@ -242,12 +289,12 @@ function parseHeader(str) { * @api private */ + function isJSON(mime) { // should match /json or +json // but not /json-seq - return /[\/+]json($|[^-\w])/.test(mime); + return /[/+]json($|[^-\w])/i.test(mime); } - /** * Initialize a new `Response` with the given `xhr`. * @@ -294,38 +341,38 @@ function isJSON(mime) { * @api private */ -function Response(req) { - this.req = req; - this.xhr = this.req.xhr; - // responseText is accessible only if responseType is '' or 'text' and on older browsers - this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined') - ? this.xhr.responseText - : null; + +function Response(request_) { + this.req = request_; + this.xhr = this.req.xhr; // responseText is accessible only if responseType is '' or 'text' and on older browsers + + this.text = this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text') || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null; this.statusText = this.req.xhr.statusText; - var status = this.xhr.status; - // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request + var status = this.xhr.status; // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request + if (status === 1223) { status = 204; } + this._setStatusProperties(status); - this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders()); - // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but + + this.headers = parseHeader(this.xhr.getAllResponseHeaders()); + this.header = this.headers; // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but // getResponseHeader still works. so we get content-type even if getting // other headers fails. + this.header['content-type'] = this.xhr.getResponseHeader('content-type'); + this._setHeaderProperties(this.header); - if (null === this.text && req._responseType) { + if (this.text === null && request_._responseType) { this.body = this.xhr.response; } else { - this.body = this.req.method != 'HEAD' - ? this._parseBody(this.text ? this.text : this.xhr.response) - : null; + this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response); } } -ResponseBase(Response.prototype); - +mixin(Response.prototype, ResponseBase.prototype); /** * Parse the given body `str`. * @@ -337,19 +384,19 @@ ResponseBase(Response.prototype); * @api private */ -Response.prototype._parseBody = function(str) { +Response.prototype._parseBody = function (string_) { var parse = request.parse[this.type]; + if (this.req._parser) { - return this.req._parser(this, str); + return this.req._parser(this, string_); } + if (!parse && isJSON(this.type)) { parse = request.parse['application/json']; } - return parse && str && (str.length || str instanceof Object) - ? parse(str) - : null; -}; + return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null; +}; /** * Return an `Error` representative of this response. * @@ -357,26 +404,24 @@ Response.prototype._parseBody = function(str) { * @api public */ -Response.prototype.toError = function(){ + +Response.prototype.toError = function () { var req = this.req; var method = req.method; var url = req.url; - - var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')'; - var err = new Error(msg); - err.status = this.status; - err.method = method; - err.url = url; - - return err; + var message = "cannot ".concat(method, " ").concat(url, " (").concat(this.status, ")"); + var error = new Error(message); + error.status = this.status; + error.method = method; + error.url = url; + return error; }; - /** * Expose `Response`. */ -request.Response = Response; +request.Response = Response; /** * Initialize a new `Request` with the given `method` and `url`. * @@ -391,62 +436,64 @@ function Request(method, url) { this.method = method; this.url = url; this.header = {}; // preserves header name case + this._header = {}; // coerces header names to lowercase - this.on('end', function(){ - var err = null; + + this.on('end', function () { + var error = null; var res = null; try { res = new Response(self); - } catch(e) { - err = new Error('Parser is unable to parse the response'); - err.parse = true; - err.original = e; - // issue #675: return the raw response if the response parsing fails + } catch (error_) { + error = new Error('Parser is unable to parse the response'); + error.parse = true; + error.original = error_; // issue #675: return the raw response if the response parsing fails + if (self.xhr) { // ie9 doesn't have 'response' property - err.rawResponse = typeof self.xhr.responseType == 'undefined' ? self.xhr.responseText : self.xhr.response; - // issue #876: return the http status code if the response parsing fails - err.status = self.xhr.status ? self.xhr.status : null; - err.statusCode = err.status; // backwards-compat only + error.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response; // issue #876: return the http status code if the response parsing fails + + error.status = self.xhr.status ? self.xhr.status : null; + error.statusCode = error.status; // backwards-compat only } else { - err.rawResponse = null; - err.status = null; + error.rawResponse = null; + error.status = null; } - return self.callback(err); + return self.callback(error); } self.emit('response', res); + var new_error; - var new_err; try { if (!self._isResponseOK(res)) { - new_err = new Error(res.statusText || 'Unsuccessful HTTP response'); + new_error = new Error(res.statusText || res.text || 'Unsuccessful HTTP response'); } - } catch(custom_err) { - new_err = custom_err; // ok() callback can throw - } + } catch (err) { + new_error = err; // ok() callback can throw + } // #1000 don't catch errors from the callback to avoid double calling it - // #1000 don't catch errors from the callback to avoid double calling it - if (new_err) { - new_err.original = err; - new_err.response = res; - new_err.status = res.status; - self.callback(new_err, res); + + if (new_error) { + new_error.original = error; + new_error.response = res; + new_error.status = res.status; + self.callback(new_error, res); } else { self.callback(null, res); } }); } - /** * Mixin `Emitter` and `RequestBase`. */ +// eslint-disable-next-line new-cap -Emitter(Request.prototype); -RequestBase(Request.prototype); +Emitter(Request.prototype); +mixin(Request.prototype, RequestBase.prototype); /** * Set Content-Type to `type`, mapping values from `request.types`. * @@ -469,11 +516,10 @@ RequestBase(Request.prototype); * @api public */ -Request.prototype.type = function(type){ +Request.prototype.type = function (type) { this.set('Content-Type', request.types[type] || type); return this; }; - /** * Set Accept to `type`, mapping values from `request.types`. * @@ -494,11 +540,11 @@ Request.prototype.type = function(type){ * @api public */ -Request.prototype.accept = function(type){ + +Request.prototype.accept = function (type) { this.set('Accept', request.types[type] || type); return this; }; - /** * Set Authorization field value with `user` and `pass`. * @@ -509,28 +555,32 @@ Request.prototype.accept = function(type){ * @api public */ -Request.prototype.auth = function(user, pass, options){ - if (1 === arguments.length) pass = ''; - if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options + +Request.prototype.auth = function (user, pass, options) { + if (arguments.length === 1) pass = ''; + + if (_typeof(pass) === 'object' && pass !== null) { + // pass is optional and can be replaced with options options = pass; pass = ''; } + if (!options) { options = { - type: 'function' === typeof btoa ? 'basic' : 'auto', + type: typeof btoa === 'function' ? 'basic' : 'auto' }; } - var encoder = function(string) { - if ('function' === typeof btoa) { + var encoder = function encoder(string) { + if (typeof btoa === 'function') { return btoa(string); } + throw new Error('Cannot use basic auth, btoa is not a function'); }; return this._auth(user, pass, options, encoder); }; - /** * Add query-string `val`. * @@ -545,12 +595,12 @@ Request.prototype.auth = function(user, pass, options){ * @api public */ -Request.prototype.query = function(val){ - if ('string' != typeof val) val = serialize(val); - if (val) this._query.push(val); + +Request.prototype.query = function (value) { + if (typeof value !== 'string') value = serialize(value); + if (value) this._query.push(value); return this; }; - /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). @@ -568,24 +618,26 @@ Request.prototype.query = function(val){ * @api public */ -Request.prototype.attach = function(field, file, options){ + +Request.prototype.attach = function (field, file, options) { if (file) { if (this._data) { - throw Error("superagent can't mix .send() and .attach()"); + throw new Error("superagent can't mix .send() and .attach()"); } this._getFormData().append(field, file, options || file.name); } + return this; }; -Request.prototype._getFormData = function(){ +Request.prototype._getFormData = function () { if (!this._formData) { this._formData = new root.FormData(); } + return this._formData; }; - /** * Invoke the callback with `err` and `res` * and handle arity check. @@ -595,63 +647,65 @@ Request.prototype._getFormData = function(){ * @api private */ -Request.prototype.callback = function(err, res){ - if (this._shouldRetry(err, res)) { + +Request.prototype.callback = function (error, res) { + if (this._shouldRetry(error, res)) { return this._retry(); } var fn = this._callback; this.clearTimeout(); - if (err) { - if (this._maxRetries) err.retries = this._retries - 1; - this.emit('error', err); + if (error) { + if (this._maxRetries) error.retries = this._retries - 1; + this.emit('error', error); } - fn(err, res); + fn(error, res); }; - /** * Invoke callback with x-domain error. * * @api private */ -Request.prototype.crossDomainError = function(){ - var err = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); - err.crossDomain = true; - err.status = this.status; - err.method = this.method; - err.url = this.url; +Request.prototype.crossDomainError = function () { + var error = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); + error.crossDomain = true; + error.status = this.status; + error.method = this.method; + error.url = this.url; + this.callback(error); +}; // This only warns, because the request is still likely to work - this.callback(err); -}; -// This only warns, because the request is still likely to work -Request.prototype.buffer = Request.prototype.ca = Request.prototype.agent = function(){ - console.warn("This is not supported in browser version of superagent"); +Request.prototype.agent = function () { + console.warn('This is not supported in browser version of superagent'); return this; }; -// This throws, because it can't send/receive data as expected -Request.prototype.pipe = Request.prototype.write = function(){ - throw Error("Streaming is not supported in browser version of superagent"); +Request.prototype.ca = Request.prototype.agent; +Request.prototype.buffer = Request.prototype.ca; // This throws, because it can't send/receive data as expected + +Request.prototype.write = function () { + throw new Error('Streaming is not supported in browser version of superagent'); }; +Request.prototype.pipe = Request.prototype.write; /** * Check if `obj` is a host object, * we don't want to serialize these :) * - * @param {Object} obj - * @return {Boolean} + * @param {Object} obj host object + * @return {Boolean} is a host object * @api private */ -Request.prototype._isHost = function _isHost(obj) { - // Native objects stringify to [object File], [object Blob], [object FormData], etc. - return obj && 'object' === typeof obj && !Array.isArray(obj) && Object.prototype.toString.call(obj) !== '[object Object]'; -} +Request.prototype._isHost = function (object) { + // Native objects stringify to [object File], [object Blob], [object FormData], etc. + return object && _typeof(object) === 'object' && !Array.isArray(object) && Object.prototype.toString.call(object) !== '[object Object]'; +}; /** * Initiate request, invoking callback `fn(res)` * with an instanceof `Response`. @@ -661,72 +715,102 @@ Request.prototype._isHost = function _isHost(obj) { * @api public */ -Request.prototype.end = function(fn){ + +Request.prototype.end = function (fn) { if (this._endCalled) { - console.warn("Warning: .end() was called twice. This is not supported in superagent"); + console.warn('Warning: .end() was called twice. This is not supported in superagent'); } - this._endCalled = true; - // store callback - this._callback = fn || noop; + this._endCalled = true; // store callback + + this._callback = fn || noop; // querystring - // querystring this._finalizeQueryString(); - return this._end(); + this._end(); }; -Request.prototype._end = function() { +Request.prototype._setUploadTimeout = function () { + var self = this; // upload timeout it's wokrs only if deadline timeout is off + + if (this._uploadTimeout && !this._uploadTimeoutTimer) { + this._uploadTimeoutTimer = setTimeout(function () { + self._timeoutError('Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT'); + }, this._uploadTimeout); + } +}; // eslint-disable-next-line complexity + + +Request.prototype._end = function () { + if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called')); var self = this; - var xhr = (this.xhr = request.getXHR()); + this.xhr = request.getXHR(); + var xhr = this.xhr; var data = this._formData || this._data; - this._setTimeouts(); + this._setTimeouts(); // state change + - // state change - xhr.onreadystatechange = function(){ + xhr.addEventListener('readystatechange', function () { var readyState = xhr.readyState; + if (readyState >= 2 && self._responseTimeoutTimer) { clearTimeout(self._responseTimeoutTimer); } - if (4 != readyState) { - return; - } - // In IE9, reads to any property (e.g. status) off of an aborted XHR will + if (readyState !== 4) { + return; + } // In IE9, reads to any property (e.g. status) off of an aborted XHR will // result in the error "Could not complete the operation due to error c00c023f" + + var status; - try { status = xhr.status } catch(e) { status = 0; } + + try { + status = xhr.status; + } catch (_unused5) { + status = 0; + } if (!status) { if (self.timedout || self._aborted) return; return self.crossDomainError(); } + self.emit('end'); - }; + }); // progress - // progress - var handleProgress = function(direction, e) { + var handleProgress = function handleProgress(direction, e) { if (e.total > 0) { e.percent = e.loaded / e.total * 100; + + if (e.percent === 100) { + clearTimeout(self._uploadTimeoutTimer); + } } + e.direction = direction; self.emit('progress', e); }; + if (this.hasListeners('progress')) { try { - xhr.onprogress = handleProgress.bind(null, 'download'); + xhr.addEventListener('progress', handleProgress.bind(null, 'download')); + if (xhr.upload) { - xhr.upload.onprogress = handleProgress.bind(null, 'upload'); + xhr.upload.addEventListener('progress', handleProgress.bind(null, 'upload')); } - } catch(e) { - // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. + } catch (_unused6) {// Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. // Reported here: // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context } } - // initiate request + if (xhr.upload) { + this._setUploadTimeout(); + } // initiate request + + try { if (this.username && this.password) { xhr.open(this.method, this.url, true, this.username, this.password); @@ -736,60 +820,66 @@ Request.prototype._end = function() { } catch (err) { // see #1149 return this.callback(err); - } + } // CORS - // CORS - if (this._withCredentials) xhr.withCredentials = true; - // body - if (!this._formData && 'GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !this._isHost(data)) { + if (this._withCredentials) xhr.withCredentials = true; // body + + if (!this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data)) { // serialize stuff var contentType = this._header['content-type']; - var serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; - if (!serialize && isJSON(contentType)) { - serialize = request.serialize['application/json']; + + var _serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; + + if (!_serialize && isJSON(contentType)) { + _serialize = request.serialize['application/json']; } - if (serialize) data = serialize(data); - } - // set header fields - for (var field in this.header) { - if (null == this.header[field]) continue; + if (_serialize) data = _serialize(data); + } // set header fields + - if (this.header.hasOwnProperty(field)) - xhr.setRequestHeader(field, this.header[field]); + for (var field in this.header) { + if (this.header[field] === null) continue; + if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]); } if (this._responseType) { xhr.responseType = this._responseType; - } + } // send stuff - // send stuff - this.emit('request', this); - // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) + this.emit('request', this); // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) // We need null here if data is undefined - xhr.send(typeof data !== 'undefined' ? data : null); - return this; + + xhr.send(typeof data === 'undefined' ? null : data); }; -request.agent = function() { +request.agent = function () { return new Agent(); }; -["GET", "POST", "OPTIONS", "PATCH", "PUT", "DELETE"].forEach(function(method) { - Agent.prototype[method.toLowerCase()] = function(url, fn) { - var req = new request.Request(method, url); - this._setDefaults(req); +var _loop = function _loop() { + var method = _arr[_i]; + + Agent.prototype[method.toLowerCase()] = function (url, fn) { + var request_ = new request.Request(method, url); + + this._setDefaults(request_); + if (fn) { - req.end(fn); + request_.end(fn); } - return req; + + return request_; }; -}); +}; -Agent.prototype.del = Agent.prototype['delete']; +for (var _i = 0, _arr = ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']; _i < _arr.length; _i++) { + _loop(); +} +Agent.prototype.del = Agent.prototype.delete; /** * GET `url` with optional callback `fn(res)`. * @@ -800,14 +890,18 @@ Agent.prototype.del = Agent.prototype['delete']; * @api public */ -request.get = function(url, data, fn) { - var req = request('GET', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; +request.get = function (url, data, fn) { + var request_ = request('GET', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; /** * HEAD `url` with optional callback `fn(res)`. * @@ -818,14 +912,19 @@ request.get = function(url, data, fn) { * @api public */ -request.head = function(url, data, fn) { - var req = request('HEAD', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; +request.head = function (url, data, fn) { + var request_ = request('HEAD', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.query(data); + if (fn) request_.end(fn); + return request_; +}; /** * OPTIONS query to `url` with optional callback `fn(res)`. * @@ -836,14 +935,19 @@ request.head = function(url, data, fn) { * @api public */ -request.options = function(url, data, fn) { - var req = request('OPTIONS', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.options = function (url, data, fn) { + var request_ = request('OPTIONS', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * DELETE `url` with optional `data` and callback `fn(res)`. * @@ -854,17 +958,22 @@ request.options = function(url, data, fn) { * @api public */ + function del(url, data, fn) { - var req = request('DELETE', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -} + var request_ = request('DELETE', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } -request['del'] = del; -request['delete'] = del; + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +} +request.del = del; +request.delete = del; /** * PATCH `url` with optional `data` and callback `fn(res)`. * @@ -875,14 +984,18 @@ request['delete'] = del; * @api public */ -request.patch = function(url, data, fn) { - var req = request('PATCH', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.patch = function (url, data, fn) { + var request_ = request('PATCH', url); + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * POST `url` with optional `data` and callback `fn(res)`. * @@ -893,14 +1006,19 @@ request.patch = function(url, data, fn) { * @api public */ -request.post = function(url, data, fn) { - var req = request('POST', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; +request.post = function (url, data, fn) { + var request_ = request('POST', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; +}; /** * PUT `url` with optional `data` and callback `fn(res)`. * @@ -911,10 +1029,17 @@ request.post = function(url, data, fn) { * @api public */ -request.put = function(url, data, fn) { - var req = request('PUT', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; + +request.put = function (url, data, fn) { + var request_ = request('PUT', url); + + if (typeof data === 'function') { + fn = data; + data = null; + } + + if (data) request_.send(data); + if (fn) request_.end(fn); + return request_; }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQuanMiXSwibmFtZXMiOlsicm9vdCIsIndpbmRvdyIsInNlbGYiLCJjb25zb2xlIiwid2FybiIsIkVtaXR0ZXIiLCJyZXF1aXJlIiwic2FmZVN0cmluZ2lmeSIsInFzIiwiUmVxdWVzdEJhc2UiLCJpc09iamVjdCIsIm1peGluIiwiaGFzT3duIiwiUmVzcG9uc2VCYXNlIiwiQWdlbnQiLCJub29wIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGhvZCIsInVybCIsIlJlcXVlc3QiLCJlbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJyZXF1ZXN0IiwiZ2V0WEhSIiwiWE1MSHR0cFJlcXVlc3QiLCJsb2NhdGlvbiIsInByb3RvY29sIiwiQWN0aXZlWE9iamVjdCIsIkVycm9yIiwidHJpbSIsInMiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwib2JqZWN0IiwicGFpcnMiLCJrZXkiLCJwdXNoRW5jb2RlZEtleVZhbHVlUGFpciIsImpvaW4iLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInB1c2giLCJlbmNvZGVVUkkiLCJBcnJheSIsImlzQXJyYXkiLCJ2Iiwic3Via2V5IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplT2JqZWN0IiwicGFyc2VTdHJpbmciLCJzdHJpbmdfIiwic3BsaXQiLCJwYWlyIiwicG9zIiwiaSIsImxlbmd0aF8iLCJpbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwic2xpY2UiLCJ0eXBlcyIsImh0bWwiLCJqc29uIiwieG1sIiwidXJsZW5jb2RlZCIsImZvcm0iLCJzdHJpbmdpZnkiLCJwYXJzZSIsIkpTT04iLCJwYXJzZUhlYWRlciIsImxpbmVzIiwiZmllbGRzIiwiaW5kZXgiLCJsaW5lIiwiZmllbGQiLCJ0b0xvd2VyQ2FzZSIsImlzSlNPTiIsIm1pbWUiLCJ0ZXN0IiwiUmVzcG9uc2UiLCJyZXF1ZXN0XyIsInJlcSIsInhociIsInRleHQiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwic3RhdHVzIiwiX3NldFN0YXR1c1Byb3BlcnRpZXMiLCJoZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiaGVhZGVyIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJfc2V0SGVhZGVyUHJvcGVydGllcyIsIl9yZXNwb25zZVR5cGUiLCJib2R5IiwicmVzcG9uc2UiLCJfcGFyc2VCb2R5IiwicHJvdG90eXBlIiwidHlwZSIsIl9wYXJzZXIiLCJPYmplY3QiLCJ0b0Vycm9yIiwibWVzc2FnZSIsImVycm9yIiwiX3F1ZXJ5IiwiX2hlYWRlciIsIm9uIiwicmVzIiwiZXJyb3JfIiwib3JpZ2luYWwiLCJyYXdSZXNwb25zZSIsInN0YXR1c0NvZGUiLCJjYWxsYmFjayIsImVtaXQiLCJuZXdfZXJyb3IiLCJfaXNSZXNwb25zZU9LIiwiZXJyIiwic2V0IiwiYWNjZXB0IiwiYXV0aCIsInVzZXIiLCJwYXNzIiwib3B0aW9ucyIsImJ0b2EiLCJlbmNvZGVyIiwic3RyaW5nIiwiX2F1dGgiLCJxdWVyeSIsImF0dGFjaCIsImZpbGUiLCJfZGF0YSIsIl9nZXRGb3JtRGF0YSIsImFwcGVuZCIsIm5hbWUiLCJfZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9zaG91bGRSZXRyeSIsIl9yZXRyeSIsImZuIiwiX2NhbGxiYWNrIiwiY2xlYXJUaW1lb3V0IiwiX21heFJldHJpZXMiLCJyZXRyaWVzIiwiX3JldHJpZXMiLCJjcm9zc0RvbWFpbkVycm9yIiwiY3Jvc3NEb21haW4iLCJhZ2VudCIsImNhIiwiYnVmZmVyIiwid3JpdGUiLCJwaXBlIiwiX2lzSG9zdCIsInRvU3RyaW5nIiwiY2FsbCIsIl9lbmRDYWxsZWQiLCJfZmluYWxpemVRdWVyeVN0cmluZyIsIl9lbmQiLCJfc2V0VXBsb2FkVGltZW91dCIsIl91cGxvYWRUaW1lb3V0IiwiX3VwbG9hZFRpbWVvdXRUaW1lciIsInNldFRpbWVvdXQiLCJfdGltZW91dEVycm9yIiwiX2Fib3J0ZWQiLCJkYXRhIiwiX3NldFRpbWVvdXRzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlYWR5U3RhdGUiLCJfcmVzcG9uc2VUaW1lb3V0VGltZXIiLCJ0aW1lZG91dCIsImhhbmRsZVByb2dyZXNzIiwiZGlyZWN0aW9uIiwiZSIsInRvdGFsIiwicGVyY2VudCIsImxvYWRlZCIsImhhc0xpc3RlbmVycyIsImJpbmQiLCJ1cGxvYWQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwib3BlbiIsIl93aXRoQ3JlZGVudGlhbHMiLCJ3aXRoQ3JlZGVudGlhbHMiLCJjb250ZW50VHlwZSIsIl9zZXJpYWxpemVyIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJfc2V0RGVmYXVsdHMiLCJkZWwiLCJkZWxldGUiLCJnZXQiLCJoZWFkIiwicGF0Y2giLCJwb3N0IiwicHV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUEsSUFBSUEsSUFBSjs7QUFDQSxJQUFJLE9BQU9DLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDakM7QUFDQUQsRUFBQUEsSUFBSSxHQUFHQyxNQUFQO0FBQ0QsQ0FIRCxNQUdPLElBQUksT0FBT0MsSUFBUCxLQUFnQixXQUFwQixFQUFpQztBQUN0QztBQUNBQyxFQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FDRSxxRUFERjtBQUdBSixFQUFBQSxJQUFJLFNBQUo7QUFDRCxDQU5NLE1BTUE7QUFDTDtBQUNBQSxFQUFBQSxJQUFJLEdBQUdFLElBQVA7QUFDRDs7QUFFRCxJQUFNRyxPQUFPLEdBQUdDLE9BQU8sQ0FBQyxtQkFBRCxDQUF2Qjs7QUFDQSxJQUFNQyxhQUFhLEdBQUdELE9BQU8sQ0FBQyxxQkFBRCxDQUE3Qjs7QUFDQSxJQUFNRSxFQUFFLEdBQUdGLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLElBQU1HLFdBQVcsR0FBR0gsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLGVBQW9DQSxPQUFPLENBQUMsU0FBRCxDQUEzQztBQUFBLElBQVFJLFFBQVIsWUFBUUEsUUFBUjtBQUFBLElBQWtCQyxLQUFsQixZQUFrQkEsS0FBbEI7QUFBQSxJ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QTtBQUNBO0FBQ0E7OztBQUVBeEQsT0FBTyxDQUFDMkssR0FBUixHQUFjLFVBQUNoTCxHQUFELEVBQU1pSixJQUFOLEVBQVl6QixFQUFaLEVBQW1CO0FBQy9CLE1BQU0zRCxRQUFRLEdBQUd4RCxPQUFPLENBQUMsS0FBRCxFQUFRTCxHQUFSLENBQXhCOztBQUNBLE1BQUksT0FBT2lKLElBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUJ6QixJQUFBQSxFQUFFLEdBQUd5QixJQUFMO0FBQ0FBLElBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0Q7O0FBRUQsTUFBSUEsSUFBSixFQUFVcEYsUUFBUSxDQUFDMkcsSUFBVCxDQUFjdkIsSUFBZDtBQUNWLE1BQUl6QixFQUFKLEVBQVEzRCxRQUFRLENBQUMzRCxHQUFULENBQWFzSCxFQUFiO0FBQ1IsU0FBTzNELFFBQVA7QUFDRCxDQVZEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSb290IHJlZmVyZW5jZSBmb3IgaWZyYW1lcy5cbiAqL1xuXG5sZXQgcm9vdDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAvLyBCcm93c2VyIHdpbmRvd1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gT3RoZXIgZW52aXJvbm1lbnRzXG4gIGNvbnNvbGUud2FybihcbiAgICAnVXNpbmcgYnJvd3Nlci1vbmx5IHZlcnNpb24gb2Ygc3VwZXJhZ2VudCBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudCdcbiAgKTtcbiAgcm9vdCA9IHRoaXM7XG59IGVsc2Uge1xuICAvLyBXZWIgV29ya2VyXG4gIHJvb3QgPSBzZWxmO1xufVxuXG5jb25zdCBFbWl0dGVyID0gcmVxdWlyZSgnY29tcG9uZW50LWVtaXR0ZXInKTtcbmNvbnN0IHNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdmYXN0LXNhZmUtc3RyaW5naWZ5Jyk7XG5jb25zdCBxcyA9IHJlcXVpcmUoJ3FzJyk7XG5jb25zdCBSZXF1ZXN0QmFzZSA9IHJlcXVpcmUoJy4vcmVxdWVzdC1iYXNlJyk7XG5jb25zdCB7IGlzT2JqZWN0LCBtaXhpbiwgaGFzT3duIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCBSZXNwb25zZUJhc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlLWJhc2UnKTtcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudC1iYXNlJyk7XG5cbi8qKlxuICogTm9vcC5cbiAqL1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuLyoqXG4gKiBFeHBvc2UgYHJlcXVlc3RgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn07XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cztcblxuY29uc3QgcmVxdWVzdCA9IGV4cG9ydHM7XG5cbmV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbi8qKlxuICogRGV0ZXJtaW5lIFhIUi5cbiAqL1xuXG5yZXF1ZXN0LmdldFhIUiA9ICgpID0+IHtcbiAgaWYgKFxuICAgIHJvb3QuWE1MSHR0cFJlcXVlc3QgJiZcbiAgICAoIXJvb3QubG9jYXRpb24gfHxcbiAgICAgIHJvb3QubG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgfHxcbiAgICAgICFyb290LkFjdGl2ZVhPYmplY3QpXG4gICkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQLjYuMCcpO1xuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQLjMuMCcpO1xuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7XG4gIH0gY2F0Y2gge31cblxuICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb3dzZXItb25seSB2ZXJzaW9uIG9mIHN1cGVyYWdlbnQgY291bGQgbm90IGZpbmQgWEhSJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYWRkZWQgdG8gc3VwcG9ydCBJRS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuY29uc3QgdHJpbSA9ICcnLnRyaW0gPyAocykgPT4gcy50cmltKCkgOiAocykgPT4gcy5yZXBsYWNlKC8oXlxccyp8XFxzKiQpL2csICcnKTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGdpdmVuIGBvYmpgLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSByZXR1cm4gb2JqZWN0O1xuICBjb25zdCBwYWlycyA9IFtdO1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duKG9iamVjdCwga2V5KSkgcHVzaEVuY29kZWRLZXlWYWx1ZVBhaXIocGFpcnMsIGtleSwgb2JqZWN0W2tleV0pO1xuICB9XG5cbiAgcmV0dXJuIHBhaXJzLmpvaW4oJyYnKTtcbn1cblxuLyoqXG4gKiBIZWxwcyAnc2VyaWFsaXplJyB3aXRoIHNlcmlhbGl6aW5nIGFycmF5cy5cbiAqIE11dGF0ZXMgdGhlIHBhaXJzIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqL1xuXG5mdW5jdGlvbiBwdXNoRW5jb2RlZEtleVZhbHVlUGFpcihwYWlycywga2V5LCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBwYWlycy5wdXNoKGVuY29kZVVSSShrZXkpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcbiAgICAgIHB1c2hFbmNvZGVkS2V5VmFsdWVQYWlyKHBhaXJzLCBrZXksIHYpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHN1YmtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKGhhc093bih2YWx1ZSwgc3Via2V5KSlcbiAgICAgICAgcHVzaEVuY29kZWRLZXlWYWx1ZVBhaXIocGFpcnMsIGAke2tleX1bJHtzdWJrZXl9XWAsIHZhbHVlW3N1YmtleV0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwYWlycy5wdXNoKGVuY29kZVVSSShrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBvc2Ugc2VyaWFsaXphdGlvbiBtZXRob2QuXG4gKi9cblxucmVxdWVzdC5zZXJpYWxpemVPYmplY3QgPSBzZXJpYWxpemU7XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyhzdHJpbmdfKSB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBjb25zdCBwYWlycyA9IHN0cmluZ18uc3BsaXQoJyYnKTtcbiAgbGV0IHBhaXI7XG4gIGxldCBwb3M7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aF8gPSBwYWlycy5sZW5ndGg7IGkgPCBsZW5ndGhfOyArK2kpIHtcbiAgICBwYWlyID0gcGFpcnNbaV07XG4gICAgcG9zID0gcGFpci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgIG9iamVjdFtkZWNvZGVVUklDb21wb25lbnQocGFpcildID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdFtkZWNvZGVVUklDb21wb25lbnQocGFpci5zbGljZSgwLCBwb3MpKV0gPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgICAgIHBhaXIuc2xpY2UocG9zICsgMSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuLyoqXG4gKiBFeHBvc2UgcGFyc2VyLlxuICovXG5cbnJlcXVlc3QucGFyc2VTdHJpbmcgPSBwYXJzZVN0cmluZztcblxuLyoqXG4gKiBEZWZhdWx0IE1JTUUgdHlwZSBtYXAuXG4gKlxuICogICAgIHN1cGVyYWdlbnQudHlwZXMueG1sID0gJ2FwcGxpY2F0aW9uL3htbCc7XG4gKlxuICovXG5cbnJlcXVlc3QudHlwZXMgPSB7XG4gIGh0bWw6ICd0ZXh0L2h0bWwnLFxuICBqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG4gIHhtbDogJ3RleHQveG1sJyxcbiAgdXJsZW5jb2RlZDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gIGZvcm06ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAnZm9ybS1kYXRhJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZXJpYWxpemF0aW9uIG1hcC5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL3htbCddID0gZnVuY3Rpb24ob2JqKXtcbiAqICAgICAgIHJldHVybiAnZ2VuZXJhdGVkIHhtbCBoZXJlJztcbiAqICAgICB9O1xuICpcbiAqL1xuXG5yZXF1ZXN0LnNlcmlhbGl6ZSA9IHtcbiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IHFzLnN0cmluZ2lmeSxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nOiBzYWZlU3RyaW5naWZ5XG59O1xuXG4vKipcbiAqIERlZmF1bHQgcGFyc2Vycy5cbiAqXG4gKiAgICAgc3VwZXJhZ2VudC5wYXJzZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihzdHIpe1xuICogICAgICAgcmV0dXJuIHsgb2JqZWN0IHBhcnNlZCBmcm9tIHN0ciB9O1xuICogICAgIH07XG4gKlxuICovXG5cbnJlcXVlc3QucGFyc2UgPSB7XG4gICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOiBwYXJzZVN0cmluZyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nOiBKU09OLnBhcnNlXG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBoZWFkZXIgYHN0cmAgaW50b1xuICogYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hcHBlZCBmaWVsZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXIoc3RyaW5nXykge1xuICBjb25zdCBsaW5lcyA9IHN0cmluZ18uc3BsaXQoL1xccj9cXG4vKTtcbiAgY29uc3QgZmllbGRzID0ge307XG4gIGxldCBpbmRleDtcbiAgbGV0IGxpbmU7XG4gIGxldCBmaWVsZDtcbiAgbGV0IHZhbHVlO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsZW5ndGhfID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuZ3RoXzsgKytpKSB7XG4gICAgbGluZSA9IGxpbmVzW2ldO1xuICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgLy8gY291bGQgYmUgZW1wdHkgbGluZSwganVzdCBza2lwIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmaWVsZCA9IGxpbmUuc2xpY2UoMCwgaW5kZXgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsdWUgPSB0cmltKGxpbmUuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgZmllbGRzW2ZpZWxkXSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGZpZWxkcztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgbWltZWAgaXMganNvbiBvciBoYXMgK2pzb24gc3RydWN0dXJlZCBzeW50YXggc3VmZml4LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtaW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNKU09OKG1pbWUpIHtcbiAgLy8gc2hvdWxkIG1hdGNoIC9qc29uIG9yICtqc29uXG4gIC8vIGJ1dCBub3QgL2pzb24tc2VxXG4gIHJldHVybiAvWy8rXWpzb24oJHxbXi1cXHddKS9pLnRlc3QobWltZSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVzcG9uc2VgIHdpdGggdGhlIGdpdmVuIGB4aHJgLlxuICpcbiAqICAtIHNldCBmbGFncyAoLm9rLCAuZXJyb3IsIGV0YylcbiAqICAtIHBhcnNlIGhlYWRlclxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICBBbGlhc2luZyBgc3VwZXJhZ2VudGAgYXMgYHJlcXVlc3RgIGlzIG5pY2U6XG4gKlxuICogICAgICByZXF1ZXN0ID0gc3VwZXJhZ2VudDtcbiAqXG4gKiAgV2UgY2FuIHVzZSB0aGUgcHJvbWlzZS1saWtlIEFQSSwgb3IgcGFzcyBjYWxsYmFja3M6XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnLycpLmVuZChmdW5jdGlvbihyZXMpe30pO1xuICogICAgICByZXF1ZXN0LmdldCgnLycsIGZ1bmN0aW9uKHJlcyl7fSk7XG4gKlxuICogIFNlbmRpbmcgZGF0YSBjYW4gYmUgY2hhaW5lZDpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInKVxuICogICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgIC5lbmQoZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiAgT3IgcGFzc2VkIHRvIGAuc2VuZCgpYDpcbiAqXG4gKiAgICAgIHJlcXVlc3RcbiAqICAgICAgICAucG9zdCgnL3VzZXInKVxuICogICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9LCBmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqICBPciBwYXNzZWQgdG8gYC5wb3N0KClgOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicsIHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgIC5lbmQoZnVuY3Rpb24ocmVzKXt9KTtcbiAqXG4gKiBPciBmdXJ0aGVyIHJlZHVjZWQgdG8gYSBzaW5nbGUgY2FsbCBmb3Igc2ltcGxlIGNhc2VzOlxuICpcbiAqICAgICAgcmVxdWVzdFxuICogICAgICAgIC5wb3N0KCcvdXNlcicsIHsgbmFtZTogJ3RqJyB9LCBmdW5jdGlvbihyZXMpe30pO1xuICpcbiAqIEBwYXJhbSB7WE1MSFRUUFJlcXVlc3R9IHhoclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlKHJlcXVlc3RfKSB7XG4gIHRoaXMucmVxID0gcmVxdWVzdF87XG4gIHRoaXMueGhyID0gdGhpcy5yZXEueGhyO1xuICAvLyByZXNwb25zZVRleHQgaXMgYWNjZXNzaWJsZSBvbmx5IGlmIHJlc3BvbnNlVHlwZSBpcyAnJyBvciAndGV4dCcgYW5kIG9uIG9sZGVyIGJyb3dzZXJzXG4gIHRoaXMudGV4dCA9XG4gICAgKHRoaXMucmVxLm1ldGhvZCAhPT0gJ0hFQUQnICYmXG4gICAgICAodGhpcy54aHIucmVzcG9uc2VUeXBlID09PSAnJyB8fCB0aGlzLnhoci5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JykpIHx8XG4gICAgdHlwZW9mIHRoaXMueGhyLnJlc3BvbnNlVHlwZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gdGhpcy54aHIucmVzcG9uc2VUZXh0XG4gICAgICA6IG51bGw7XG4gIHRoaXMuc3RhdHVzVGV4dCA9IHRoaXMucmVxLnhoci5zdGF0dXNUZXh0O1xuICBsZXQgeyBzdGF0dXMgfSA9IHRoaXMueGhyO1xuICAvLyBoYW5kbGUgSUU5IGJ1ZzogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDA0Njk3Mi9tc2llLXJldHVybnMtc3RhdHVzLWNvZGUtb2YtMTIyMy1mb3ItYWpheC1yZXF1ZXN0XG4gIGlmIChzdGF0dXMgPT09IDEyMjMpIHtcbiAgICBzdGF0dXMgPSAyMDQ7XG4gIH1cblxuICB0aGlzLl9zZXRTdGF0dXNQcm9wZXJ0aWVzKHN0YXR1cyk7XG4gIHRoaXMuaGVhZGVycyA9IHBhcnNlSGVhZGVyKHRoaXMueGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtcbiAgdGhpcy5oZWFkZXIgPSB0aGlzLmhlYWRlcnM7XG4gIC8vIGdldEFsbFJlc3BvbnNlSGVhZGVycyBzb21ldGltZXMgZmFsc2VseSByZXR1cm5zIFwiXCIgZm9yIENPUlMgcmVxdWVzdHMsIGJ1dFxuICAvLyBnZXRSZXNwb25zZUhlYWRlciBzdGlsbCB3b3Jrcy4gc28gd2UgZ2V0IGNvbnRlbnQtdHlwZSBldmVuIGlmIGdldHRpbmdcbiAgLy8gb3RoZXIgaGVhZGVycyBmYWlscy5cbiAgdGhpcy5oZWFkZXJbJ2NvbnRlbnQtdHlwZSddID0gdGhpcy54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ2NvbnRlbnQtdHlwZScpO1xuICB0aGlzLl9zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcblxuICBpZiAodGhpcy50ZXh0ID09PSBudWxsICYmIHJlcXVlc3RfLl9yZXNwb25zZVR5cGUpIHtcbiAgICB0aGlzLmJvZHkgPSB0aGlzLnhoci5yZXNwb25zZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmJvZHkgPVxuICAgICAgdGhpcy5yZXEubWV0aG9kID09PSAnSEVBRCdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5fcGFyc2VCb2R5KHRoaXMudGV4dCA/IHRoaXMudGV4dCA6IHRoaXMueGhyLnJlc3BvbnNlKTtcbiAgfVxufVxuXG5taXhpbihSZXNwb25zZS5wcm90b3R5cGUsIFJlc3BvbnNlQmFzZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBib2R5IGBzdHJgLlxuICpcbiAqIFVzZWQgZm9yIGF1dG8tcGFyc2luZyBvZiBib2RpZXMuIFBhcnNlcnNcbiAqIGFyZSBkZWZpbmVkIG9uIHRoZSBgc3VwZXJhZ2VudC5wYXJzZWAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge01peGVkfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLl9wYXJzZUJvZHkgPSBmdW5jdGlvbiAoc3RyaW5nXykge1xuICBsZXQgcGFyc2UgPSByZXF1ZXN0LnBhcnNlW3RoaXMudHlwZV07XG4gIGlmICh0aGlzLnJlcS5fcGFyc2VyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxLl9wYXJzZXIodGhpcywgc3RyaW5nXyk7XG4gIH1cblxuICBpZiAoIXBhcnNlICYmIGlzSlNPTih0aGlzLnR5cGUpKSB7XG4gICAgcGFyc2UgPSByZXF1ZXN0LnBhcnNlWydhcHBsaWNhdGlvbi9qc29uJ107XG4gIH1cblxuICByZXR1cm4gcGFyc2UgJiYgc3RyaW5nXyAmJiAoc3RyaW5nXy5sZW5ndGggPiAwIHx8IHN0cmluZ18gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgPyBwYXJzZShzdHJpbmdfKVxuICAgIDogbnVsbDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIGBFcnJvcmAgcmVwcmVzZW50YXRpdmUgb2YgdGhpcyByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJuIHtFcnJvcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gcmVxO1xuICBjb25zdCB7IHVybCB9ID0gcmVxO1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSBgY2Fubm90ICR7bWV0aG9kfSAke3VybH0gKCR7dGhpcy5zdGF0dXN9KWA7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgZXJyb3IubWV0aG9kID0gbWV0aG9kO1xuICBlcnJvci51cmwgPSB1cmw7XG5cbiAgcmV0dXJuIGVycm9yO1xufTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5yZXF1ZXN0LlJlc3BvbnNlID0gUmVzcG9uc2U7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gUmVxdWVzdChtZXRob2QsIHVybCkge1xuICBjb25zdCBzZWxmID0gdGhpcztcbiAgdGhpcy5fcXVlcnkgPSB0aGlzLl9xdWVyeSB8fCBbXTtcbiAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLmhlYWRlciA9IHt9OyAvLyBwcmVzZXJ2ZXMgaGVhZGVyIG5hbWUgY2FzZVxuICB0aGlzLl9oZWFkZXIgPSB7fTsgLy8gY29lcmNlcyBoZWFkZXIgbmFtZXMgdG8gbG93ZXJjYXNlXG4gIHRoaXMub24oJ2VuZCcsICgpID0+IHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGxldCByZXMgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IG5ldyBSZXNwb25zZShzZWxmKTtcbiAgICB9IGNhdGNoIChlcnJvcl8pIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdQYXJzZXIgaXMgdW5hYmxlIHRvIHBhcnNlIHRoZSByZXNwb25zZScpO1xuICAgICAgZXJyb3IucGFyc2UgPSB0cnVlO1xuICAgICAgZXJyb3Iub3JpZ2luYWwgPSBlcnJvcl87XG4gICAgICAvLyBpc3N1ZSAjNjc1OiByZXR1cm4gdGhlIHJhdyByZXNwb25zZSBpZiB0aGUgcmVzcG9uc2UgcGFyc2luZyBmYWlsc1xuICAgICAgaWYgKHNlbGYueGhyKSB7XG4gICAgICAgIC8vIGllOSBkb2Vzbid0IGhhdmUgJ3Jlc3BvbnNlJyBwcm9wZXJ0eVxuICAgICAgICBlcnJvci5yYXdSZXNwb25zZSA9XG4gICAgICAgICAgdHlwZW9mIHNlbGYueGhyLnJlc3BvbnNlVHlwZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gc2VsZi54aHIucmVzcG9uc2VUZXh0XG4gICAgICAgICAgICA6IHNlbGYueGhyLnJlc3BvbnNlO1xuICAgICAgICAvLyBpc3N1ZSAjODc2OiByZXR1cm4gdGhlIGh0dHAgc3RhdHVzIGNvZGUgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gc2VsZi54aHIuc3RhdHVzID8gc2VsZi54aHIuc3RhdHVzIDogbnVsbDtcbiAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IGVycm9yLnN0YXR1czsgLy8gYmFja3dhcmRzLWNvbXBhdCBvbmx5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvci5yYXdSZXNwb25zZSA9IG51bGw7XG4gICAgICAgIGVycm9yLnN0YXR1cyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWxmLmNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBzZWxmLmVtaXQoJ3Jlc3BvbnNlJywgcmVzKTtcblxuICAgIGxldCBuZXdfZXJyb3I7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghc2VsZi5faXNSZXNwb25zZU9LKHJlcykpIHtcbiAgICAgICAgbmV3X2Vycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIHJlcy5zdGF0dXNUZXh0IHx8IHJlcy50ZXh0IHx8ICdVbnN1Y2Nlc3NmdWwgSFRUUCByZXNwb25zZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG5ld19lcnJvciA9IGVycjsgLy8gb2soKSBjYWxsYmFjayBjYW4gdGhyb3dcbiAgICB9XG5cbiAgICAvLyAjMTAwMCBkb24ndCBjYXRjaCBlcnJvcnMgZnJvbSB0aGUgY2FsbGJhY2sgdG8gYXZvaWQgZG91YmxlIGNhbGxpbmcgaXRcbiAgICBpZiAobmV3X2Vycm9yKSB7XG4gICAgICBuZXdfZXJyb3Iub3JpZ2luYWwgPSBlcnJvcjtcbiAgICAgIG5ld19lcnJvci5yZXNwb25zZSA9IHJlcztcbiAgICAgIG5ld19lcnJvci5zdGF0dXMgPSByZXMuc3RhdHVzO1xuICAgICAgc2VsZi5jYWxsYmFjayhuZXdfZXJyb3IsIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuY2FsbGJhY2sobnVsbCwgcmVzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIE1peGluIGBFbWl0dGVyYCBhbmQgYFJlcXVlc3RCYXNlYC5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuRW1pdHRlcihSZXF1ZXN0LnByb3RvdHlwZSk7XG5cbm1peGluKFJlcXVlc3QucHJvdG90eXBlLCBSZXF1ZXN0QmFzZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIFNldCBDb250ZW50LVR5cGUgdG8gYHR5cGVgLCBtYXBwaW5nIHZhbHVlcyBmcm9tIGByZXF1ZXN0LnR5cGVzYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHN1cGVyYWdlbnQudHlwZXMueG1sID0gJ2FwcGxpY2F0aW9uL3htbCc7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCd4bWwnKVxuICogICAgICAgIC5zZW5kKHhtbHN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QucG9zdCgnLycpXG4gKiAgICAgICAgLnR5cGUoJ2FwcGxpY2F0aW9uL3htbCcpXG4gKiAgICAgICAgLnNlbmQoeG1sc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gIHRoaXMuc2V0KCdDb250ZW50LVR5cGUnLCByZXF1ZXN0LnR5cGVzW3R5cGVdIHx8IHR5cGUpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IEFjY2VwdCB0byBgdHlwZWAsIG1hcHBpbmcgdmFsdWVzIGZyb20gYHJlcXVlc3QudHlwZXNgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgc3VwZXJhZ2VudC50eXBlcy5qc29uID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdhcHBsaWNhdGlvbi9qc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWNjZXB0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgdGhpcy5zZXQoJ0FjY2VwdCcsIHJlcXVlc3QudHlwZXNbdHlwZV0gfHwgdHlwZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gW3Bhc3NdIG9wdGlvbmFsIGluIGNhc2Ugb2YgdXNpbmcgJ2JlYXJlcicgYXMgdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgd2l0aCAndHlwZScgcHJvcGVydHkgJ2F1dG8nLCAnYmFzaWMnIG9yICdiZWFyZXInIChkZWZhdWx0ICdiYXNpYycpXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSBwYXNzID0gJyc7XG4gIGlmICh0eXBlb2YgcGFzcyA9PT0gJ29iamVjdCcgJiYgcGFzcyAhPT0gbnVsbCkge1xuICAgIC8vIHBhc3MgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIG9wdGlvbnNcbiAgICBvcHRpb25zID0gcGFzcztcbiAgICBwYXNzID0gJyc7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgdHlwZTogdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicgPyAnYmFzaWMnIDogJ2F1dG8nXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGVuY29kZXIgPSAoc3RyaW5nKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gYnRvYShzdHJpbmcpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBiYXNpYyBhdXRoLCBidG9hIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH07XG5cbiAgcmV0dXJuIHRoaXMuX2F1dGgodXNlciwgcGFzcywgb3B0aW9ucywgZW5jb2Rlcik7XG59O1xuXG4vKipcbiAqIEFkZCBxdWVyeS1zdHJpbmcgYHZhbGAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICByZXF1ZXN0LmdldCgnL3Nob2VzJylcbiAqICAgICAucXVlcnkoJ3NpemU9MTAnKVxuICogICAgIC5xdWVyeSh7IGNvbG9yOiAnYmx1ZScgfSlcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHZhbFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IHNlcmlhbGl6ZSh2YWx1ZSk7XG4gIGlmICh2YWx1ZSkgdGhpcy5fcXVlcnkucHVzaCh2YWx1ZSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBRdWV1ZSB0aGUgZ2l2ZW4gYGZpbGVgIGFzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHNwZWNpZmllZCBgZmllbGRgLFxuICogd2l0aCBvcHRpb25hbCBgb3B0aW9uc2AgKG9yIGZpbGVuYW1lKS5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5hdHRhY2goJ2NvbnRlbnQnLCBuZXcgQmxvYihbJzxhIGlkPVwiYVwiPjxiIGlkPVwiYlwiPmhleSE8L2I+PC9hPiddLCB7IHR5cGU6IFwidGV4dC9odG1sXCJ9KSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7QmxvYnxGaWxlfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiAoZmllbGQsIGZpbGUsIG9wdGlvbnMpIHtcbiAgaWYgKGZpbGUpIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3VwZXJhZ2VudCBjYW4ndCBtaXggLnNlbmQoKSBhbmQgLmF0dGFjaCgpXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKGZpZWxkLCBmaWxlLCBvcHRpb25zIHx8IGZpbGUubmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9nZXRGb3JtRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9mb3JtRGF0YSkge1xuICAgIHRoaXMuX2Zvcm1EYXRhID0gbmV3IHJvb3QuRm9ybURhdGEoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9mb3JtRGF0YTtcbn07XG5cbi8qKlxuICogSW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIGBlcnJgIGFuZCBgcmVzYFxuICogYW5kIGhhbmRsZSBhcml0eSBjaGVjay5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoZXJyb3IsIHJlcykge1xuICBpZiAodGhpcy5fc2hvdWxkUmV0cnkoZXJyb3IsIHJlcykpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0cnkoKTtcbiAgfVxuXG4gIGNvbnN0IGZuID0gdGhpcy5fY2FsbGJhY2s7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuX21heFJldHJpZXMpIGVycm9yLnJldHJpZXMgPSB0aGlzLl9yZXRyaWVzIC0gMTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICB9XG5cbiAgZm4oZXJyb3IsIHJlcyk7XG59O1xuXG4vKipcbiAqIEludm9rZSBjYWxsYmFjayB3aXRoIHgtZG9tYWluIGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNyb3NzRG9tYWluRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICdSZXF1ZXN0IGhhcyBiZWVuIHRlcm1pbmF0ZWRcXG5Qb3NzaWJsZSBjYXVzZXM6IHRoZSBuZXR3b3JrIGlzIG9mZmxpbmUsIE9yaWdpbiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4sIHRoZSBwYWdlIGlzIGJlaW5nIHVubG9hZGVkLCBldGMuJ1xuICApO1xuICBlcnJvci5jcm9zc0RvbWFpbiA9IHRydWU7XG5cbiAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVycm9yLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBlcnJvci51cmwgPSB0aGlzLnVybDtcblxuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cbi8vIFRoaXMgb25seSB3YXJucywgYmVjYXVzZSB0aGUgcmVxdWVzdCBpcyBzdGlsbCBsaWtlbHkgdG8gd29ya1xuUmVxdWVzdC5wcm90b3R5cGUuYWdlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybignVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIGJyb3dzZXIgdmVyc2lvbiBvZiBzdXBlcmFnZW50Jyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuY2EgPSBSZXF1ZXN0LnByb3RvdHlwZS5hZ2VudDtcblJlcXVlc3QucHJvdG90eXBlLmJ1ZmZlciA9IFJlcXVlc3QucHJvdG90eXBlLmNhO1xuXG4vLyBUaGlzIHRocm93cywgYmVjYXVzZSBpdCBjYW4ndCBzZW5kL3JlY2VpdmUgZGF0YSBhcyBleHBlY3RlZFxuUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnU3RyZWFtaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciB2ZXJzaW9uIG9mIHN1cGVyYWdlbnQnXG4gICk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5waXBlID0gUmVxdWVzdC5wcm90b3R5cGUud3JpdGU7XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBob3N0IG9iamVjdCxcbiAqIHdlIGRvbid0IHdhbnQgdG8gc2VyaWFsaXplIHRoZXNlIDopXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBob3N0IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn0gaXMgYSBob3N0IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLl9pc0hvc3QgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIC8vIE5hdGl2ZSBvYmplY3RzIHN0cmluZ2lmeSB0byBbb2JqZWN0IEZpbGVdLCBbb2JqZWN0IEJsb2JdLCBbb2JqZWN0IEZvcm1EYXRhXSwgZXRjLlxuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkob2JqZWN0KSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpICE9PSAnW29iamVjdCBPYmplY3RdJ1xuICApO1xufTtcblxuLyoqXG4gKiBJbml0aWF0ZSByZXF1ZXN0LCBpbnZva2luZyBjYWxsYmFjayBgZm4ocmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnV2FybmluZzogLmVuZCgpIHdhcyBjYWxsZWQgdHdpY2UuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBzdXBlcmFnZW50J1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmRDYWxsZWQgPSB0cnVlO1xuXG4gIC8vIHN0b3JlIGNhbGxiYWNrXG4gIHRoaXMuX2NhbGxiYWNrID0gZm4gfHwgbm9vcDtcblxuICAvLyBxdWVyeXN0cmluZ1xuICB0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCk7XG5cbiAgdGhpcy5fZW5kKCk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fc2V0VXBsb2FkVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgLy8gdXBsb2FkIHRpbWVvdXQgaXQncyB3b2tycyBvbmx5IGlmIGRlYWRsaW5lIHRpbWVvdXQgaXMgb2ZmXG4gIGlmICh0aGlzLl91cGxvYWRUaW1lb3V0ICYmICF0aGlzLl91cGxvYWRUaW1lb3V0VGltZXIpIHtcbiAgICB0aGlzLl91cGxvYWRUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1VwbG9hZCB0aW1lb3V0IG9mICcsXG4gICAgICAgIHNlbGYuX3VwbG9hZFRpbWVvdXQsXG4gICAgICAgICdFVElNRURPVVQnXG4gICAgICApO1xuICAgIH0sIHRoaXMuX3VwbG9hZFRpbWVvdXQpO1xuICB9XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuUmVxdWVzdC5wcm90b3R5cGUuX2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpXG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soXG4gICAgICBuZXcgRXJyb3IoJ1RoZSByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQgZXZlbiBiZWZvcmUgLmVuZCgpIHdhcyBjYWxsZWQnKVxuICAgICk7XG5cbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIHRoaXMueGhyID0gcmVxdWVzdC5nZXRYSFIoKTtcbiAgY29uc3QgeyB4aHIgfSA9IHRoaXM7XG4gIGxldCBkYXRhID0gdGhpcy5fZm9ybURhdGEgfHwgdGhpcy5fZGF0YTtcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIHN0YXRlIGNoYW5nZVxuICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsICgpID0+IHtcbiAgICBjb25zdCB7IHJlYWR5U3RhdGUgfSA9IHhocjtcbiAgICBpZiAocmVhZHlTdGF0ZSA+PSAyICYmIHNlbGYuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICAgIH1cblxuICAgIGlmIChyZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW4gSUU5LCByZWFkcyB0byBhbnkgcHJvcGVydHkgKGUuZy4gc3RhdHVzKSBvZmYgb2YgYW4gYWJvcnRlZCBYSFIgd2lsbFxuICAgIC8vIHJlc3VsdCBpbiB0aGUgZXJyb3IgXCJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgYzAwYzAyM2ZcIlxuICAgIGxldCBzdGF0dXM7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzdGF0dXMgPSAwO1xuICAgIH1cblxuICAgIGlmICghc3RhdHVzKSB7XG4gICAgICBpZiAoc2VsZi50aW1lZG91dCB8fCBzZWxmLl9hYm9ydGVkKSByZXR1cm47XG4gICAgICByZXR1cm4gc2VsZi5jcm9zc0RvbWFpbkVycm9yKCk7XG4gICAgfVxuXG4gICAgc2VsZi5lbWl0KCdlbmQnKTtcbiAgfSk7XG5cbiAgLy8gcHJvZ3Jlc3NcbiAgY29uc3QgaGFuZGxlUHJvZ3Jlc3MgPSAoZGlyZWN0aW9uLCBlKSA9PiB7XG4gICAgaWYgKGUudG90YWwgPiAwKSB7XG4gICAgICBlLnBlcmNlbnQgPSAoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMDtcblxuICAgICAgaWYgKGUucGVyY2VudCA9PT0gMTAwKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzZWxmLl91cGxvYWRUaW1lb3V0VGltZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGUuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHNlbGYuZW1pdCgncHJvZ3Jlc3MnLCBlKTtcbiAgfTtcblxuICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoJ3Byb2dyZXNzJykpIHtcbiAgICB0cnkge1xuICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgaGFuZGxlUHJvZ3Jlc3MuYmluZChudWxsLCAnZG93bmxvYWQnKSk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgJ3Byb2dyZXNzJyxcbiAgICAgICAgICBoYW5kbGVQcm9ncmVzcy5iaW5kKG51bGwsICd1cGxvYWQnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQWNjZXNzaW5nIHhoci51cGxvYWQgZmFpbHMgaW4gSUUgZnJvbSBhIHdlYiB3b3JrZXIsIHNvIGp1c3QgcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgLy8gUmVwb3J0ZWQgaGVyZTpcbiAgICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODM3MjQ1L3htbGh0dHByZXF1ZXN0LXVwbG9hZC10aHJvd3MtaW52YWxpZC1hcmd1bWVudC13aGVuLXVzZWQtZnJvbS13ZWItd29ya2VyLWNvbnRleHRcbiAgICB9XG4gIH1cblxuICBpZiAoeGhyLnVwbG9hZCkge1xuICAgIHRoaXMuX3NldFVwbG9hZFRpbWVvdXQoKTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgdHJ5IHtcbiAgICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7XG4gICAgICB4aHIub3Blbih0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHRydWUsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB4aHIub3Blbih0aGlzLm1ldGhvZCwgdGhpcy51cmwsIHRydWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc2VlICMxMTQ5XG4gICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soZXJyKTtcbiAgfVxuXG4gIC8vIENPUlNcbiAgaWYgKHRoaXMuX3dpdGhDcmVkZW50aWFscykgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgLy8gYm9keVxuICBpZiAoXG4gICAgIXRoaXMuX2Zvcm1EYXRhICYmXG4gICAgdGhpcy5tZXRob2QgIT09ICdHRVQnICYmXG4gICAgdGhpcy5tZXRob2QgIT09ICdIRUFEJyAmJlxuICAgIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyAmJlxuICAgICF0aGlzLl9pc0hvc3QoZGF0YSlcbiAgKSB7XG4gICAgLy8gc2VyaWFsaXplIHN0dWZmXG4gICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGxldCBzZXJpYWxpemUgPVxuICAgICAgdGhpcy5fc2VyaWFsaXplciB8fFxuICAgICAgcmVxdWVzdC5zZXJpYWxpemVbY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdIDogJyddO1xuICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgIHNlcmlhbGl6ZSA9IHJlcXVlc3Quc2VyaWFsaXplWydhcHBsaWNhdGlvbi9qc29uJ107XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgfVxuXG4gIC8vIHNldCBoZWFkZXIgZmllbGRzXG4gIGZvciAoY29uc3QgZmllbGQgaW4gdGhpcy5oZWFkZXIpIHtcbiAgICBpZiAodGhpcy5oZWFkZXJbZmllbGRdID09PSBudWxsKSBjb250aW51ZTtcblxuICAgIGlmIChoYXNPd24odGhpcy5oZWFkZXIsIGZpZWxkKSlcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGZpZWxkLCB0aGlzLmhlYWRlcltmaWVsZF0pO1xuICB9XG5cbiAgaWYgKHRoaXMuX3Jlc3BvbnNlVHlwZSkge1xuICAgIHhoci5yZXNwb25zZVR5cGUgPSB0aGlzLl9yZXNwb25zZVR5cGU7XG4gIH1cblxuICAvLyBzZW5kIHN0dWZmXG4gIHRoaXMuZW1pdCgncmVxdWVzdCcsIHRoaXMpO1xuXG4gIC8vIElFMTEgeGhyLnNlbmQodW5kZWZpbmVkKSBzZW5kcyAndW5kZWZpbmVkJyBzdHJpbmcgYXMgUE9TVCBwYXlsb2FkIChpbnN0ZWFkIG9mIG5vdGhpbmcpXG4gIC8vIFdlIG5lZWQgbnVsbCBoZXJlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gIHhoci5zZW5kKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBkYXRhKTtcbn07XG5cbnJlcXVlc3QuYWdlbnQgPSAoKSA9PiBuZXcgQWdlbnQoKTtcblxuZm9yIChjb25zdCBtZXRob2Qgb2YgWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BVVCcsICdERUxFVEUnXSkge1xuICBBZ2VudC5wcm90b3R5cGVbbWV0aG9kLnRvTG93ZXJDYXNlKCldID0gZnVuY3Rpb24gKHVybCwgZm4pIHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IG5ldyByZXF1ZXN0LlJlcXVlc3QobWV0aG9kLCB1cmwpO1xuICAgIHRoaXMuX3NldERlZmF1bHRzKHJlcXVlc3RfKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcblxuLyoqXG4gKiBHRVQgYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LmdldCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG5cbi8qKlxuICogSEVBRCBgdXJsYCB3aXRoIG9wdGlvbmFsIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfEZ1bmN0aW9ufSBbZGF0YV0gb3IgZm5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QuaGVhZCA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gIGNvbnN0IHJlcXVlc3RfID0gcmVxdWVzdCgnSEVBRCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5xdWVyeShkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIE9QVElPTlMgcXVlcnkgdG8gYHVybGAgd2l0aCBvcHRpb25hbCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZHxGdW5jdGlvbn0gW2RhdGFdIG9yIGZuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0Lm9wdGlvbnMgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ09QVElPTlMnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIERFTEVURSBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR9IFtkYXRhXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZGVsKHVybCwgZGF0YSwgZm4pIHtcbiAgY29uc3QgcmVxdWVzdF8gPSByZXF1ZXN0KCdERUxFVEUnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59XG5cbnJlcXVlc3QuZGVsID0gZGVsO1xucmVxdWVzdC5kZWxldGUgPSBkZWw7XG5cbi8qKlxuICogUEFUQ0ggYHVybGAgd2l0aCBvcHRpb25hbCBgZGF0YWAgYW5kIGNhbGxiYWNrIGBmbihyZXMpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge01peGVkfSBbZGF0YV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnJlcXVlc3QucGF0Y2ggPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BBVENIJywgdXJsKTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm4gPSBkYXRhO1xuICAgIGRhdGEgPSBudWxsO1xuICB9XG5cbiAgaWYgKGRhdGEpIHJlcXVlc3RfLnNlbmQoZGF0YSk7XG4gIGlmIChmbikgcmVxdWVzdF8uZW5kKGZuKTtcbiAgcmV0dXJuIHJlcXVlc3RfO1xufTtcblxuLyoqXG4gKiBQT1NUIGB1cmxgIHdpdGggb3B0aW9uYWwgYGRhdGFgIGFuZCBjYWxsYmFjayBgZm4ocmVzKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtNaXhlZH0gW2RhdGFdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5yZXF1ZXN0LnBvc3QgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BPU1QnLCB1cmwpO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmbiA9IGRhdGE7XG4gICAgZGF0YSA9IG51bGw7XG4gIH1cblxuICBpZiAoZGF0YSkgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgaWYgKGZuKSByZXF1ZXN0Xy5lbmQoZm4pO1xuICByZXR1cm4gcmVxdWVzdF87XG59O1xuXG4vKipcbiAqIFBVVCBgdXJsYCB3aXRoIG9wdGlvbmFsIGBkYXRhYCBhbmQgY2FsbGJhY2sgYGZuKHJlcylgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7TWl4ZWR8RnVuY3Rpb259IFtkYXRhXSBvciBmblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICogQHJldHVybiB7UmVxdWVzdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucmVxdWVzdC5wdXQgPSAodXJsLCBkYXRhLCBmbikgPT4ge1xuICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QoJ1BVVCcsIHVybCk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZuID0gZGF0YTtcbiAgICBkYXRhID0gbnVsbDtcbiAgfVxuXG4gIGlmIChkYXRhKSByZXF1ZXN0Xy5zZW5kKGRhdGEpO1xuICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gIHJldHVybiByZXF1ZXN0Xztcbn07XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/is-object.js b/build/node_modules/superagent/lib/is-object.js deleted file mode 100644 index fa69d81a..00000000 --- a/build/node_modules/superagent/lib/is-object.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -/** - * Check if `obj` is an object. - * - * @param {Object} obj - * @return {Boolean} - * @api private - */ - -function isObject(obj) { - return null !== obj && 'object' === typeof obj; -} - -module.exports = isObject; diff --git a/build/node_modules/superagent/lib/node/agent.js b/build/node_modules/superagent/lib/node/agent.js index 4de7422f..d3e29fdd 100644 --- a/build/node_modules/superagent/lib/node/agent.js +++ b/build/node_modules/superagent/lib/node/agent.js @@ -1,22 +1,35 @@ -'use strict'; +"use strict"; + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } /** * Module dependencies. */ +// eslint-disable-next-line node/no-deprecated-api +var _require = require('url'), + parse = _require.parse; + +var _require2 = require('cookiejar'), + CookieJar = _require2.CookieJar; -const CookieJar = require('cookiejar').CookieJar; -const CookieAccess = require('cookiejar').CookieAccessInfo; -const parse = require('url').parse; -const request = require('../..'); -const AgentBase = require('../agent-base'); -let methods = require('methods'); +var _require3 = require('cookiejar'), + CookieAccessInfo = _require3.CookieAccessInfo; +var methods = require('methods'); + +var request = require('../..'); + +var AgentBase = require('../agent-base'); /** * Expose `Agent`. */ -module.exports = Agent; +module.exports = Agent; /** * Initialize a new `Agent`. * @@ -27,19 +40,34 @@ function Agent(options) { if (!(this instanceof Agent)) { return new Agent(options); } + AgentBase.call(this); this.jar = new CookieJar(); if (options) { - if (options.ca) {this.ca(options.ca);} - if (options.key) {this.key(options.key);} - if (options.pfx) {this.pfx(options.pfx);} - if (options.cert) {this.cert(options.cert);} + if (options.ca) { + this.ca(options.ca); + } + + if (options.key) { + this.key(options.key); + } + + if (options.pfx) { + this.pfx(options.pfx); + } + + if (options.cert) { + this.cert(options.cert); + } + + if (options.rejectUnauthorized === false) { + this.disableTLSCerts(); + } } } Agent.prototype = Object.create(AgentBase.prototype); - /** * Save the cookies in the given `res` to * the agent's cookie jar for persistence. @@ -48,11 +76,10 @@ Agent.prototype = Object.create(AgentBase.prototype); * @api private */ -Agent.prototype._saveCookies = function(res) { - const cookies = res.headers['set-cookie']; +Agent.prototype._saveCookies = function (res) { + var cookies = res.headers['set-cookie']; if (cookies) this.jar.setCookies(cookies); }; - /** * Attach cookies when available to the given `req`. * @@ -60,33 +87,48 @@ Agent.prototype._saveCookies = function(res) { * @api private */ -Agent.prototype._attachCookies = function(req) { - const url = parse(req.url); - const access = CookieAccess( - url.hostname, - url.pathname, - 'https:' == url.protocol - ); - const cookies = this.jar.getCookies(access).toValueString(); - req.cookies = cookies; + +Agent.prototype._attachCookies = function (request_) { + var url = parse(request_.url); + var access = new CookieAccessInfo(url.hostname, url.pathname, url.protocol === 'https:'); + var cookies = this.jar.getCookies(access).toValueString(); + request_.cookies = cookies; }; -methods.forEach(name => { - const method = name.toUpperCase(); - Agent.prototype[name] = function(url, fn) { - const req = new request.Request(method, url); +var _iterator = _createForOfIteratorHelper(methods), + _step; - req.on('response', this._saveCookies.bind(this)); - req.on('redirect', this._saveCookies.bind(this)); - req.on('redirect', this._attachCookies.bind(this, req)); - this._attachCookies(req); - this._setDefaults(req); +try { + var _loop = function _loop() { + var name = _step.value; + var method = name.toUpperCase(); - if (fn) { - req.end(fn); - } - return req; + Agent.prototype[name] = function (url, fn) { + var request_ = new request.Request(method, url); + request_.on('response', this._saveCookies.bind(this)); + request_.on('redirect', this._saveCookies.bind(this)); + request_.on('redirect', this._attachCookies.bind(this, request_)); + + this._setDefaults(request_); + + this._attachCookies(request_); + + if (fn) { + request_.end(fn); + } + + return request_; + }; }; -}); -Agent.prototype.del = Agent.prototype['delete']; + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _loop(); + } +} catch (err) { + _iterator.e(err); +} finally { + _iterator.f(); +} + +Agent.prototype.del = Agent.prototype.delete; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2FnZW50LmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJwYXJzZSIsIkNvb2tpZUphciIsIkNvb2tpZUFjY2Vzc0luZm8iLCJtZXRob2RzIiwicmVxdWVzdCIsIkFnZW50QmFzZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJBZ2VudCIsIm9wdGlvbnMiLCJjYWxsIiwiamFyIiwiY2EiLCJrZXkiLCJwZngiLCJjZXJ0IiwicmVqZWN0VW5hdXRob3JpemVkIiwiZGlzYWJsZVRMU0NlcnRzIiwicHJvdG90eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwiX3NhdmVDb29raWVzIiwicmVzIiwiY29va2llcyIsImhlYWRlcnMiLCJzZXRDb29raWVzIiwiX2F0dGFjaENvb2tpZXMiLCJyZXF1ZXN0XyIsInVybCIsImFjY2VzcyIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJwcm90b2NvbCIsImdldENvb2tpZXMiLCJ0b1ZhbHVlU3RyaW5nIiwibmFtZSIsIm1ldGhvZCIsInRvVXBwZXJDYXNlIiwiZm4iLCJSZXF1ZXN0Iiwib24iLCJiaW5kIiwiX3NldERlZmF1bHRzIiwiZW5kIiwiZGVsIiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsZUFBa0JBLE9BQU8sQ0FBQyxLQUFELENBQXpCO0FBQUEsSUFBUUMsS0FBUixZQUFRQSxLQUFSOztBQUNBLGdCQUFzQkQsT0FBTyxDQUFDLFdBQUQsQ0FBN0I7QUFBQSxJQUFRRSxTQUFSLGFBQVFBLFNBQVI7O0FBQ0EsZ0JBQTZCRixPQUFPLENBQUMsV0FBRCxDQUFwQztBQUFBLElBQVFHLGdCQUFSLGFBQVFBLGdCQUFSOztBQUNBLElBQU1DLE9BQU8sR0FBR0osT0FBTyxDQUFDLFNBQUQsQ0FBdkI7O0FBQ0EsSUFBTUssT0FBTyxHQUFHTCxPQUFPLENBQUMsT0FBRCxDQUF2Qjs7QUFDQSxJQUFNTSxTQUFTLEdBQUdOLE9BQU8sQ0FBQyxlQUFELENBQXpCO0FBRUE7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QXdCLEtBQUtkLGNBQUwsQ0FBb0JlLElBQXBCLENBQXlCLElBQXpCLEVBQStCZCxRQUEvQixDQUF4Qjs7QUFDQSxXQUFLZSxZQUFMLENBQWtCZixRQUFsQjs7QUFDQSxXQUFLRCxjQUFMLENBQW9CQyxRQUFwQjs7QUFFQSxVQUFJVyxFQUFKLEVBQVE7QUFDTlgsUUFBQUEsUUFBUSxDQUFDZ0IsR0FBVCxDQUFhTCxFQUFiO0FBQ0Q7O0FBRUQsYUFBT1gsUUFBUDtBQUNELEtBZEQ7OztBQUZGLHNEQUE0QjtBQUFBO0FBaUIzQjs7Ozs7OztBQUVEbkIsS0FBSyxDQUFDVSxTQUFOLENBQWdCMEIsR0FBaEIsR0FBc0JwQyxLQUFLLENBQUNVLFNBQU4sQ0FBZ0IyQixNQUF0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby1kZXByZWNhdGVkLWFwaVxuY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCB7IENvb2tpZUphciB9ID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCB7IENvb2tpZUFjY2Vzc0luZm8gfSA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3QgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCcuLi8uLicpO1xuY29uc3QgQWdlbnRCYXNlID0gcmVxdWlyZSgnLi4vYWdlbnQtYmFzZScpO1xuXG4vKipcbiAqIEV4cG9zZSBgQWdlbnRgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnQ7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgQWdlbnRgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gQWdlbnQob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWdlbnQpKSB7XG4gICAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKTtcbiAgfVxuXG4gIEFnZW50QmFzZS5jYWxsKHRoaXMpO1xuICB0aGlzLmphciA9IG5ldyBDb29raWVKYXIoKTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmNhKSB7XG4gICAgICB0aGlzLmNhKG9wdGlvbnMuY2EpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmtleSkge1xuICAgICAgdGhpcy5rZXkob3B0aW9ucy5rZXkpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBmeCkge1xuICAgICAgdGhpcy5wZngob3B0aW9ucy5wZngpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNlcnQpIHtcbiAgICAgIHRoaXMuY2VydChvcHRpb25zLmNlcnQpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlzYWJsZVRMU0NlcnRzKCk7XG4gICAgfVxuICB9XG59XG5cbkFnZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWdlbnRCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogU2F2ZSB0aGUgY29va2llcyBpbiB0aGUgZ2l2ZW4gYHJlc2AgdG9cbiAqIHRoZSBhZ2VudCdzIGNvb2tpZSBqYXIgZm9yIHBlcnNpc3RlbmNlLlxuICpcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQWdlbnQucHJvdG90eXBlLl9zYXZlQ29va2llcyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgY29uc3QgY29va2llcyA9IHJlcy5oZWFkZXJzWydzZXQtY29va2llJ107XG4gIGlmIChjb29raWVzKSB0aGlzLmphci5zZXRDb29raWVzKGNvb2tpZXMpO1xufTtcblxuLyoqXG4gKiBBdHRhY2ggY29va2llcyB3aGVuIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gYHJlcWAuXG4gKlxuICogQHBhcmFtIHtSZXF1ZXN0fSByZXFcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkFnZW50LnByb3RvdHlwZS5fYXR0YWNoQ29va2llcyA9IGZ1bmN0aW9uIChyZXF1ZXN0Xykge1xuICBjb25zdCB1cmwgPSBwYXJzZShyZXF1ZXN0Xy51cmwpO1xuICBjb25zdCBhY2Nlc3MgPSBuZXcgQ29va2llQWNjZXNzSW5mbyhcbiAgICB1cmwuaG9zdG5hbWUsXG4gICAgdXJsLnBhdGhuYW1lLFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKTtcbiAgY29uc3QgY29va2llcyA9IHRoaXMuamFyLmdldENvb2tpZXMoYWNjZXNzKS50b1ZhbHVlU3RyaW5nKCk7XG4gIHJlcXVlc3RfLmNvb2tpZXMgPSBjb29raWVzO1xufTtcblxuZm9yIChjb25zdCBuYW1lIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbWV0aG9kID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICBBZ2VudC5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodXJsLCBmbikge1xuICAgIGNvbnN0IHJlcXVlc3RfID0gbmV3IHJlcXVlc3QuUmVxdWVzdChtZXRob2QsIHVybCk7XG5cbiAgICByZXF1ZXN0Xy5vbigncmVzcG9uc2UnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9hdHRhY2hDb29raWVzLmJpbmQodGhpcywgcmVxdWVzdF8pKTtcbiAgICB0aGlzLl9zZXREZWZhdWx0cyhyZXF1ZXN0Xyk7XG4gICAgdGhpcy5fYXR0YWNoQ29va2llcyhyZXF1ZXN0Xyk7XG5cbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcbiJdfQ== \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/http2wrapper.js b/build/node_modules/superagent/lib/node/http2wrapper.js new file mode 100644 index 00000000..9004b04c --- /dev/null +++ b/build/node_modules/superagent/lib/node/http2wrapper.js @@ -0,0 +1,220 @@ +"use strict"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var Stream = require('stream'); + +var util = require('util'); + +var net = require('net'); + +var tls = require('tls'); // eslint-disable-next-line node/no-deprecated-api + + +var _require = require('url'), + parse = _require.parse; + +var process = require('process'); + +var semverGte = require('semver/functions/gte'); + +var http2; +if (semverGte(process.version, 'v10.10.0')) http2 = require('http2');else throw new Error('superagent: this version of Node.js does not support http2'); +var _http2$constants = http2.constants, + HTTP2_HEADER_PATH = _http2$constants.HTTP2_HEADER_PATH, + HTTP2_HEADER_STATUS = _http2$constants.HTTP2_HEADER_STATUS, + HTTP2_HEADER_METHOD = _http2$constants.HTTP2_HEADER_METHOD, + HTTP2_HEADER_AUTHORITY = _http2$constants.HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_HOST = _http2$constants.HTTP2_HEADER_HOST, + HTTP2_HEADER_SET_COOKIE = _http2$constants.HTTP2_HEADER_SET_COOKIE, + NGHTTP2_CANCEL = _http2$constants.NGHTTP2_CANCEL; + +function setProtocol(protocol) { + return { + request: function request(options) { + return new Request(protocol, options); + } + }; +} + +function Request(protocol, options) { + var _this = this; + + Stream.call(this); + var defaultPort = protocol === 'https:' ? 443 : 80; + var defaultHost = 'localhost'; + var port = options.port || defaultPort; + var host = options.host || defaultHost; + delete options.port; + delete options.host; + this.method = options.method; + this.path = options.path; + this.protocol = protocol; + this.host = host; + delete options.method; + delete options.path; + + var sessionOptions = _objectSpread({}, options); + + if (options.socketPath) { + sessionOptions.socketPath = options.socketPath; + sessionOptions.createConnection = this.createUnixConnection.bind(this); + } + + this._headers = {}; + var session = http2.connect("".concat(protocol, "//").concat(host, ":").concat(port), sessionOptions); + this.setHeader('host', "".concat(host, ":").concat(port)); + session.on('error', function (error) { + return _this.emit('error', error); + }); + this.session = session; +} +/** + * Inherit from `Stream` (which inherits from `EventEmitter`). + */ + + +util.inherits(Request, Stream); + +Request.prototype.createUnixConnection = function (authority, options) { + switch (this.protocol) { + case 'http:': + return net.connect(options.socketPath); + + case 'https:': + options.ALPNProtocols = ['h2']; + options.servername = this.host; + options.allowHalfOpen = true; + return tls.connect(options.socketPath, options); + + default: + throw new Error('Unsupported protocol', this.protocol); + } +}; // eslint-disable-next-line no-unused-vars + + +Request.prototype.setNoDelay = function (bool) {// We can not use setNoDelay with HTTP/2. + // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2. + // See also https://nodejs.org/api/http2.html#http2_http2session_socket +}; + +Request.prototype.getFrame = function () { + var _method, + _this2 = this; + + if (this.frame) { + return this.frame; + } + + var method = (_method = {}, _defineProperty(_method, HTTP2_HEADER_PATH, this.path), _defineProperty(_method, HTTP2_HEADER_METHOD, this.method), _method); + var headers = this.mapToHttp2Header(this._headers); + headers = Object.assign(headers, method); + var frame = this.session.request(headers); // eslint-disable-next-line no-unused-vars + + frame.once('response', function (headers, flags) { + headers = _this2.mapToHttpHeader(headers); + frame.headers = headers; + frame.statusCode = headers[HTTP2_HEADER_STATUS]; + frame.status = frame.statusCode; + + _this2.emit('response', frame); + }); + this._headerSent = true; + frame.once('drain', function () { + return _this2.emit('drain'); + }); + frame.on('error', function (error) { + return _this2.emit('error', error); + }); + frame.on('close', function () { + return _this2.session.close(); + }); + this.frame = frame; + return frame; +}; + +Request.prototype.mapToHttpHeader = function (headers) { + var keys = Object.keys(headers); + var http2Headers = {}; + + for (var _i = 0, _keys = keys; _i < _keys.length; _i++) { + var key = _keys[_i]; + var value = headers[key]; + key = key.toLowerCase(); + + switch (key) { + case HTTP2_HEADER_SET_COOKIE: + value = Array.isArray(value) ? value : [value]; + break; + + default: + break; + } + + http2Headers[key] = value; + } + + return http2Headers; +}; + +Request.prototype.mapToHttp2Header = function (headers) { + var keys = Object.keys(headers); + var http2Headers = {}; + + for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) { + var key = _keys2[_i2]; + var value = headers[key]; + key = key.toLowerCase(); + + switch (key) { + case HTTP2_HEADER_HOST: + key = HTTP2_HEADER_AUTHORITY; + value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value; + break; + + default: + break; + } + + http2Headers[key] = value; + } + + return http2Headers; +}; + +Request.prototype.setHeader = function (name, value) { + this._headers[name.toLowerCase()] = value; +}; + +Request.prototype.getHeader = function (name) { + return this._headers[name.toLowerCase()]; +}; + +Request.prototype.write = function (data, encoding) { + var frame = this.getFrame(); + return frame.write(data, encoding); +}; + +Request.prototype.pipe = function (stream, options) { + var frame = this.getFrame(); + return frame.pipe(stream, options); +}; + +Request.prototype.end = function (data) { + var frame = this.getFrame(); + frame.end(data); +}; // eslint-disable-next-line no-unused-vars + + +Request.prototype.abort = function (data) { + var frame = this.getFrame(); + frame.close(NGHTTP2_CANCEL); + this.session.destroy(); +}; + +exports.setProtocol = setProtocol; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2h0dHAyd3JhcHBlci5qcyJdLCJuYW1lcyI6WyJTdHJlYW0iLCJyZXF1aXJlIiwidXRpbCIsIm5ldCIsInRscyIsInBhcnNlIiwicHJvY2VzcyIsInNlbXZlckd0ZSIsImh0dHAyIiwidmVyc2lvbiIsIkVycm9yIiwiY29uc3RhbnRzIiwiSFRUUDJfSEVBREVSX1BBVEgiLCJIVFRQMl9IRUFERVJfU1RBVFVTIiwiSFRUUDJfSEVBREVSX01FVEhPRCIsIkhUVFAyX0hFQURFUl9BVVRIT1JJVFkiLCJIVFRQMl9IRUFERVJfSE9TVCIsIkhUVFAyX0hFQURFUl9TRVRfQ09PS0lFIiwiTkdIVFRQMl9DQU5DRUwiLCJzZXRQcm90b2NvbCIsInByb3RvY29sIiwicmVxdWVzdCIsIm9wdGlvbnMiLCJSZXF1ZXN0IiwiY2FsbCIsImRlZmF1bHRQb3J0IiwiZGVmYXVsdEhvc3QiLCJwb3J0IiwiaG9zdCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJzZXNzaW9uIiwiY29ubmVjdCIsInNldEhlYWRlciIsIm9uIiwiZXJyb3IiLCJlbWl0IiwiaW5oZXJpdHMiLCJwcm90b3R5cGUiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJzZXROb0RlbGF5IiwiYm9vbCIsImdldEZyYW1lIiwiZnJhbWUiLCJoZWFkZXJzIiwibWFwVG9IdHRwMkhlYWRlciIsIk9iamVjdCIsImFzc2lnbiIsIm9uY2UiLCJmbGFncyIsIm1hcFRvSHR0cEhlYWRlciIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJfaGVhZGVyU2VudCIsImNsb3NlIiwia2V5cyIsImh0dHAySGVhZGVycyIsImtleSIsInZhbHVlIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0IiwibmFtZSIsImdldEhlYWRlciIsIndyaXRlIiwiZGF0YSIsImVuY29kaW5nIiwicGlwZSIsInN0cmVhbSIsImVuZCIsImFib3J0IiwiZGVzdHJveSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxJQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLEtBQUQsQ0FBbkI7O0FBQ0EsSUFBTUcsR0FBRyxHQUFHSCxPQUFPLENBQUMsS0FBRCxDQUFuQixDLENBQ0E7OztBQUNBLGVBQWtCQSxPQUFPLENBQUMsS0FBRCxDQUF6QjtBQUFBLElBQVFJLEtBQVIsWUFBUUEsS0FBUjs7QUFDQSxJQUFNQyxPQUFPLEdBQUdMLE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLElBQU1NLFNBQVMsR0FBR04sT0FBTyxDQUFDLHNCQUFELENBQXpCOztBQUVBLElBQUlPLEtBQUo7QUFFQSxJQUFJRCxTQUFTLENBQUNELE9BQU8sQ0FBQ0csT0FBVCxFQUFrQixVQUFsQixDQUFiLEVBQTRDRCxLQUFLLEdBQUdQLE9BQU8sQ0FBQyxPQUFELENBQWYsQ0FBNUMsS0FFRSxNQUFNLElBQUlTLEtBQUosQ0FBVSw0REFBVixDQUFOO0FBRUYsdUJBUUlGLEtBQUssQ0FBQ0csU0FSVjtBQUFBLElBQ0VDLGlCQURGLG9CQUNFQSxpQkFERjtBQUFBLElBRUVDLG1CQUZGLG9CQUVFQSxtQkFGRjtBQUFBLElBR0VDLG1CQUhGLG9CQUdFQSxtQkFIRjtBQUFBLElBSUVDLHNCQUpGLG9CQUlFQSxzQkFKRjtBQUFBLElBS0VDLGlCQUxGLG9CQUtFQSxpQkFMRjtBQUFBLElBTUVDLHVCQU5GLG9CQU1FQSx1QkFORjtBQUFBLElBT0VDLGNBUEYsb0JBT0VBLGNBUEY7O0FBVUEsU0FBU0MsV0FBVCxDQUFxQkMsUUFBckIsRUFBK0I7QUFDN0IsU0FBTztBQUNMQyxJQUFB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QUFWLEVBQWtCeEQsT0FBbEIsRUFBMkI7QUFDbEQsTUFBTThCLEtBQUssR0FBRyxLQUFLRCxRQUFMLEVBQWQ7QUFDQSxTQUFPQyxLQUFLLENBQUN5QixJQUFOLENBQVdDLE1BQVgsRUFBbUJ4RCxPQUFuQixDQUFQO0FBQ0QsQ0FIRDs7QUFLQUMsT0FBTyxDQUFDcUIsU0FBUixDQUFrQm1DLEdBQWxCLEdBQXdCLFVBQVVKLElBQVYsRUFBZ0I7QUFDdEMsTUFBTXZCLEtBQUssR0FBRyxLQUFLRCxRQUFMLEVBQWQ7QUFDQUMsRUFBQUEsS0FBSyxDQUFDMkIsR0FBTixDQUFVSixJQUFWO0FBQ0QsQ0FIRCxDLENBS0E7OztBQUNBcEQsT0FBTyxDQUFDcUIsU0FBUixDQUFrQm9DLEtBQWxCLEdBQTBCLFVBQVVMLElBQVYsRUFBZ0I7QUFDeEMsTUFBTXZCLEtBQUssR0FBRyxLQUFLRCxRQUFMLEVBQWQ7QUFDQUMsRUFBQUEsS0FBSyxDQUFDVyxLQUFOLENBQVk3QyxjQUFaO0FBQ0EsT0FBS21CLE9BQUwsQ0FBYTRDLE9BQWI7QUFDRCxDQUpEOztBQU1BQyxPQUFPLENBQUMvRCxXQUFSLEdBQXNCQSxXQUF0QiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xuY29uc3QgdGxzID0gcmVxdWlyZSgndGxzJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby1kZXByZWNhdGVkLWFwaVxuY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgncHJvY2VzcycpO1xuY29uc3Qgc2VtdmVyR3RlID0gcmVxdWlyZSgnc2VtdmVyL2Z1bmN0aW9ucy9ndGUnKTtcblxubGV0IGh0dHAyO1xuXG5pZiAoc2VtdmVyR3RlKHByb2Nlc3MudmVyc2lvbiwgJ3YxMC4xMC4wJykpIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKTtcbmVsc2VcbiAgdGhyb3cgbmV3IEVycm9yKCdzdXBlcmFnZW50OiB0aGlzIHZlcnNpb24gb2YgTm9kZS5qcyBkb2VzIG5vdCBzdXBwb3J0IGh0dHAyJyk7XG5cbmNvbnN0IHtcbiAgSFRUUDJfSEVBREVSX1BBVEgsXG4gIEhUVFAyX0hFQURFUl9TVEFUVVMsXG4gIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gIEhUVFAyX0hFQURFUl9IT1NULFxuICBIVFRQMl9IRUFERVJfU0VUX0NPT0tJRSxcbiAgTkdIVFRQMl9DQU5DRUxcbn0gPSBodHRwMi5jb25zdGFudHM7XG5cbmZ1bmN0aW9uIHNldFByb3RvY29sKHByb3RvY29sKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3QocHJvdG9jb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVxdWVzdChwcm90b2NvbCwgb3B0aW9ucykge1xuICBTdHJlYW0uY2FsbCh0aGlzKTtcbiAgY29uc3QgZGVmYXVsdFBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgY29uc3QgZGVmYXVsdEhvc3QgPSAnbG9jYWxob3N0JztcbiAgY29uc3QgcG9ydCA9IG9wdGlvbnMucG9ydCB8fCBkZWZhdWx0UG9ydDtcbiAgY29uc3QgaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCBkZWZhdWx0SG9zdDtcblxuICBkZWxldGUgb3B0aW9ucy5wb3J0O1xuICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuXG4gIHRoaXMubWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIHRoaXMucGF0aCA9IG9wdGlvbnMucGF0aDtcbiAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICB0aGlzLmhvc3QgPSBob3N0O1xuXG4gIGRlbGV0ZSBvcHRpb25zLm1ldGhvZDtcbiAgZGVsZXRlIG9wdGlvbnMucGF0aDtcblxuICBjb25zdCBzZXNzaW9uT3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9O1xuICBpZiAob3B0aW9ucy5zb2NrZXRQYXRoKSB7XG4gICAgc2Vzc2lvbk9wdGlvbnMuc29ja2V0UGF0aCA9IG9wdGlvbnMuc29ja2V0UGF0aDtcbiAgICBzZXNzaW9uT3B0aW9ucy5jcmVhdGVDb25uZWN0aW9uID0gdGhpcy5jcmVhdGVVbml4Q29ubmVjdGlvbi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgdGhpcy5faGVhZGVycyA9IHt9O1xuXG4gIGNvbnN0IHNlc3Npb24gPSBodHRwMi5jb25uZWN0KGAke3Byb3RvY29sfS8vJHtob3N0fToke3BvcnR9YCwgc2Vzc2lvbk9wdGlvbnMpO1xuICB0aGlzLnNldEhlYWRlcignaG9zdCcsIGAke2hvc3R9OiR7cG9ydH1gKTtcblxuICBzZXNzaW9uLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKSk7XG5cbiAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbn1cblxuLyoqXG4gKiBJbmhlcml0IGZyb20gYFN0cmVhbWAgKHdoaWNoIGluaGVyaXRzIGZyb20gYEV2ZW50RW1pdHRlcmApLlxuICovXG51dGlsLmluaGVyaXRzKFJlcXVlc3QsIFN0cmVhbSk7XG5cblJlcXVlc3QucHJvdG90eXBlLmNyZWF0ZVVuaXhDb25uZWN0aW9uID0gZnVuY3Rpb24gKGF1dGhvcml0eSwgb3B0aW9ucykge1xuICBzd2l0Y2ggKHRoaXMucHJvdG9jb2wpIHtcbiAgICBjYXNlICdodHRwOic6XG4gICAgICByZXR1cm4gbmV0LmNvbm5lY3Qob3B0aW9ucy5zb2NrZXRQYXRoKTtcbiAgICBjYXNlICdodHRwczonOlxuICAgICAgb3B0aW9ucy5BTFBOUHJvdG9jb2xzID0gWydoMiddO1xuICAgICAgb3B0aW9ucy5zZXJ2ZXJuYW1lID0gdGhpcy5ob3N0O1xuICAgICAgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0bHMuY29ubmVjdChvcHRpb25zLnNvY2tldFBhdGgsIG9wdGlvbnMpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sJywgdGhpcy5wcm90b2NvbCk7XG4gIH1cbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuUmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uIChib29sKSB7XG4gIC8vIFdlIGNhbiBub3QgdXNlIHNldE5vRGVsYXkgd2l0aCBIVFRQLzIuXG4gIC8vIE5vZGUgMTAgbGltaXRzIGh0dHAyc2Vzc2lvbi5zb2NrZXQgbWV0aG9kcyB0byBvbmVzIHNhZmUgdG8gdXNlIHdpdGggSFRUUC8yLlxuICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSB7XG4gICAgW0hUVFAyX0hFQURFUl9QQVRIXTogdGhpcy5wYXRoLFxuICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgfTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMubWFwVG9IdHRwMkhlYWRlcih0aGlzLl9oZWFkZXJzKTtcblxuICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gIGNvbnN0IGZyYW1lID0gdGhpcy5zZXNzaW9uLnJlcXVlc3QoaGVhZGVycyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBmcmFtZS5vbmNlKCdyZXNwb25zZScsIChoZWFkZXJzLCBmbGFncykgPT4ge1xuICAgIGhlYWRlcnMgPSB0aGlzLm1hcFRvSHR0cEhlYWRlcihoZWFkZXJzKTtcbiAgICBmcmFtZS5oZWFkZXJzID0gaGVhZGVycztcbiAgICBmcmFtZS5zdGF0dXNDb2RlID0gaGVhZGVyc1tIVFRQMl9IRUFERVJfU1RBVFVTXTtcbiAgICBmcmFtZS5zdGF0dXMgPSBmcmFtZS5zdGF0dXNDb2RlO1xuICAgIHRoaXMuZW1pdCgncmVzcG9uc2UnLCBmcmFtZSk7XG4gIH0pO1xuXG4gIHRoaXMuX2hlYWRlclNlbnQgPSB0cnVlO1xuXG4gIGZyYW1lLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgZnJhbWUub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcbiAgZnJhbWUub24oJ2Nsb3NlJywgKCkgPT4gdGhpcy5zZXNzaW9uLmNsb3NlKCkpO1xuXG4gIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgcmV0dXJuIGZyYW1lO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUubWFwVG9IdHRwSGVhZGVyID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpO1xuICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICBsZXQgdmFsdWUgPSBoZWFkZXJzW2tleV07XG4gICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgSFRUUDJfSEVBREVSX1NFVF9DT09LSUU6XG4gICAgICAgIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaHR0cDJIZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBodHRwMkhlYWRlcnM7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5tYXBUb0h0dHAySGVhZGVyID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpO1xuICBjb25zdCBodHRwMkhlYWRlcnMgPSB7fTtcbiAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICBsZXQgdmFsdWUgPSBoZWFkZXJzW2tleV07XG4gICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgSFRUUDJfSEVBREVSX0hPU1Q6XG4gICAgICAgIGtleSA9IEhUVFAyX0hFQURFUl9BVVRIT1JJVFk7XG4gICAgICAgIHZhbHVlID0gL15odHRwOlxcL1xcL3xeaHR0cHM6XFwvXFwvLy50ZXN0KHZhbHVlKVxuICAgICAgICAgID8gcGFyc2UodmFsdWUpLmhvc3RcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaHR0cDJIZWFkZXJzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGZyYW1lID0gdGhpcy5nZXRGcmFtZSgpO1xuICByZXR1cm4gZnJhbWUud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChzdHJlYW0sIG9wdGlvbnMpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIHJldHVybiBmcmFtZS5waXBlKHN0cmVhbSwgb3B0aW9ucyk7XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgZnJhbWUuZW5kKGRhdGEpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5SZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGZyYW1lID0gdGhpcy5nZXRGcmFtZSgpO1xuICBmcmFtZS5jbG9zZShOR0hUVFAyX0NBTkNFTCk7XG4gIHRoaXMuc2Vzc2lvbi5kZXN0cm95KCk7XG59O1xuXG5leHBvcnRzLnNldFByb3RvY29sID0gc2V0UHJvdG9jb2w7XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/index.js b/build/node_modules/superagent/lib/node/index.js index ead37369..51b5f3ca 100644 --- a/build/node_modules/superagent/lib/node/index.js +++ b/build/node_modules/superagent/lib/node/index.js @@ -1,71 +1,111 @@ -'use strict'; +"use strict"; + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } /** * Module dependencies. */ +// eslint-disable-next-line node/no-deprecated-api +var _require = require('url'), + parse = _require.parse, + format = _require.format, + resolve = _require.resolve; + +var Stream = require('stream'); + +var https = require('https'); + +var http = require('http'); + +var fs = require('fs'); + +var zlib = require('zlib'); + +var util = require('util'); + +var qs = require('qs'); + +var mime = require('mime'); + +var methods = require('methods'); + +var FormData = require('form-data'); + +var formidable = require('formidable'); + +var debug = require('debug')('superagent'); + +var CookieJar = require('cookiejar'); -const debug = require('debug')('superagent'); -const formidable = require('formidable'); -const FormData = require('form-data'); -const Response = require('./response'); -const parse = require('url').parse; -const format = require('url').format; -const resolve = require('url').resolve; -let methods = require('methods'); -const Stream = require('stream'); -const utils = require('../utils'); -const unzip = require('./unzip').unzip; -const extend = require('extend'); -const mime = require('mime'); -const https = require('https'); -const http = require('http'); -const fs = require('fs'); -const qs = require('qs'); -const zlib = require('zlib'); -const util = require('util'); -const pkg = require('../../package.json'); -const RequestBase = require('../request-base'); -const CookieJar = require('cookiejar'); +var semverGte = require('semver/functions/gte'); + +var safeStringify = require('fast-safe-stringify'); + +var utils = require('../utils'); + +var RequestBase = require('../request-base'); + +var _require2 = require('./unzip'), + unzip = _require2.unzip; + +var Response = require('./response'); + +var mixin = utils.mixin, + hasOwn = utils.hasOwn; +var http2; +if (semverGte(process.version, 'v10.10.0')) http2 = require('./http2wrapper'); function request(method, url) { // callback - if ('function' == typeof url) { + if (typeof url === 'function') { return new exports.Request('GET', method).end(url); - } + } // url first + - // url first - if (1 == arguments.length) { + if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); } -exports = module.exports = request; +module.exports = request; +exports = module.exports; /** * Expose `Request`. */ exports.Request = Request; - /** * Expose the agent function */ exports.agent = require('./agent'); - /** * Noop. */ -function noop(){}; - +function noop() {} /** * Expose `Response`. */ -exports.Response = Response; +exports.Response = Response; /** * Define "form" mime type. */ @@ -73,7 +113,6 @@ exports.Response = Response; mime.define({ 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data'] }, true); - /** * Protocol map. */ @@ -81,8 +120,8 @@ mime.define({ exports.protocols = { 'http:': http, 'https:': https, + 'http2:': http2 }; - /** * Default serialization map. * @@ -94,9 +133,8 @@ exports.protocols = { exports.serialize = { 'application/x-www-form-urlencoded': qs.stringify, - 'application/json': JSON.stringify, + 'application/json': safeStringify }; - /** * Default parsers. * @@ -107,23 +145,27 @@ exports.serialize = { */ exports.parse = require('./parsers'); +/** + * Default buffering map. Can be used to set certain + * response types to buffer/not buffer. + * + * superagent.buffer['application/xml'] = true; + */ +exports.buffer = {}; /** * Initialize internal header tracking properties on a request instance. * * @param {Object} req the instance * @api private */ -function _initHeaders(req) { - const ua = `node-superagent/${pkg.version}`; - req._header = { // coerces header names to lowercase - 'user-agent': ua + +function _initHeaders(request_) { + request_._header = {// coerces header names to lowercase }; - req.header = { // preserves header name case - 'User-Agent': ua + request_.header = {// preserves header name case }; } - /** * Initialize a new `Request` with the given `method` and `url`. * @@ -132,14 +174,19 @@ function _initHeaders(req) { * @api public */ + function Request(method, url) { Stream.call(this); - if ('string' != typeof url) url = format(url); + if (typeof url !== 'string') url = format(url); + this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only + this._agent = false; this._formData = null; this.method = method; this.url = url; + _initHeaders(this); + this.writable = true; this._redirects = 0; this.redirects(method === 'HEAD' ? 0 : 5); @@ -147,18 +194,56 @@ function Request(method, url) { this.qs = {}; this._query = []; this.qsRaw = this._query; // Unused, for backwards compatibility only + this._redirectList = []; this._streamRequest = false; this.once('end', this.clearTimeout.bind(this)); } - /** * Inherit from `Stream` (which inherits from `EventEmitter`). * Mixin `RequestBase`. */ + + util.inherits(Request, Stream); -RequestBase(Request.prototype); +mixin(Request.prototype, RequestBase.prototype); +/** + * Enable or Disable http2. + * + * Enable http2. + * + * ``` js + * request.get('http://localhost/') + * .http2() + * .end(callback); + * + * request.get('http://localhost/') + * .http2(true) + * .end(callback); + * ``` + * + * Disable http2. + * + * ``` js + * request = request.http2(); + * request.get('http://localhost/') + * .http2(false) + * .end(callback); + * ``` + * + * @param {Boolean} enable + * @return {Request} for chaining + * @api public + */ + +Request.prototype.http2 = function (bool) { + if (exports.protocols['http2:'] === undefined) { + throw new Error('superagent: this version of Node.js does not support http2'); + } + this._enableHttp2 = bool === undefined ? true : bool; + return this; +}; /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). @@ -184,41 +269,65 @@ RequestBase(Request.prototype); * @api public */ -Request.prototype.attach = function(field, file, options){ + +Request.prototype.attach = function (field, file, options) { + var _this = this; + if (file) { if (this._data) { - throw Error("superagent can't mix .send() and .attach()"); + throw new Error("superagent can't mix .send() and .attach()"); } - let o = options || {}; - if ('string' == typeof options) { - o = { filename: options }; + var o = options || {}; + + if (typeof options === 'string') { + o = { + filename: options + }; } - if ('string' == typeof file) { + if (typeof file === 'string') { if (!o.filename) o.filename = file; debug('creating `fs.ReadStream` instance for file: %s', file); file = fs.createReadStream(file); + file.on('error', function (error) { + var formData = _this._getFormData(); + + formData.emit('error', error); + }); } else if (!o.filename && file.path) { o.filename = file.path; } this._getFormData().append(field, file, o); } + return this; }; -Request.prototype._getFormData = function() { +Request.prototype._getFormData = function () { + var _this2 = this; + if (!this._formData) { this._formData = new FormData(); - this._formData.on('error', err => { - this.emit('error', err); - this.abort(); + + this._formData.on('error', function (error) { + debug('FormData error', error); + + if (_this2.called) { + // The request has already finished and the callback was called. + // Silently ignore the error. + return; + } + + _this2.callback(error); + + _this2.abort(); }); } + return this._formData; }; - /** * Gets/sets the `Agent` to use for this HTTP request. The default (if this * function is not called) is to opt out of connection pooling (`agent: false`). @@ -228,14 +337,14 @@ Request.prototype._getFormData = function() { * @api public */ -Request.prototype.agent = function(agent){ - if (!arguments.length) return this._agent; + +Request.prototype.agent = function (agent) { + if (arguments.length === 0) return this._agent; this._agent = agent; return this; }; - /** - * Set _Content-Type_ response header passed through `mime.lookup()`. + * Set _Content-Type_ response header passed through `mime.getType()`. * * Examples: * @@ -259,15 +368,12 @@ Request.prototype.agent = function(agent){ * @api public */ -Request.prototype.type = function(type) { - return this.set( - 'Content-Type', - ~type.indexOf('/') ? type : mime.lookup(type) - ); -}; +Request.prototype.type = function (type) { + return this.set('Content-Type', type.includes('/') ? type : mime.getType(type)); +}; /** - * Set _Accept_ response header passed through `mime.lookup()`. + * Set _Accept_ response header passed through `mime.getType()`. * * Examples: * @@ -286,12 +392,10 @@ Request.prototype.type = function(type) { * @api public */ -Request.prototype.accept = function(type){ - return this.set('Accept', ~type.indexOf('/') - ? type - : mime.lookup(type)); -}; +Request.prototype.accept = function (type) { + return this.set('Accept', type.includes('/') ? type : mime.getType(type)); +}; /** * Add query-string `val`. * @@ -306,15 +410,16 @@ Request.prototype.accept = function(type){ * @api public */ -Request.prototype.query = function(val){ - if ('string' == typeof val) { - this._query.push(val); + +Request.prototype.query = function (value) { + if (typeof value === 'string') { + this._query.push(value); } else { - extend(this.qs, val); + Object.assign(this.qs, value); } + return this; }; - /** * Write raw `data` / `encoding` to the socket. * @@ -324,14 +429,16 @@ Request.prototype.query = function(val){ * @api public */ -Request.prototype.write = function(data, encoding){ - const req = this.request(); + +Request.prototype.write = function (data, encoding) { + var request_ = this.request(); + if (!this._streamRequest) { this._streamRequest = true; } - return req.write(data, encoding); -}; + return request_.write(data, encoding); +}; /** * Pipe the request body to `stream`. * @@ -341,45 +448,52 @@ Request.prototype.write = function(data, encoding){ * @api public */ -Request.prototype.pipe = function(stream, options){ + +Request.prototype.pipe = function (stream, options) { this.piped = true; // HACK... + this.buffer(false); this.end(); return this._pipeContinue(stream, options); }; -Request.prototype._pipeContinue = function(stream, options){ - this.req.once('response', res => { +Request.prototype._pipeContinue = function (stream, options) { + var _this3 = this; + + this.req.once('response', function (res) { // redirect - const redirect = isRedirect(res.statusCode); - if (redirect && this._redirects++ != this._maxRedirects) { - return this._redirect(res)._pipeContinue(stream, options); + if (isRedirect(res.statusCode) && _this3._redirects++ !== _this3._maxRedirects) { + return _this3._redirect(res) === _this3 ? _this3._pipeContinue(stream, options) : undefined; } - this.res = res; - this._emitResponse(); - if (this._aborted) return; + _this3.res = res; + + _this3._emitResponse(); - if (this._shouldUnzip(res)) { - const unzipObj = zlib.createUnzip(); - unzipObj.on('error', err => { - if (err && err.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl + if (_this3._aborted) return; + + if (_this3._shouldUnzip(res)) { + var unzipObject = zlib.createUnzip(); + unzipObject.on('error', function (error) { + if (error && error.code === 'Z_BUF_ERROR') { + // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } - stream.emit('error', err); + + stream.emit('error', error); }); - res.pipe(unzipObj).pipe(stream, options); + res.pipe(unzipObject).pipe(stream, options); } else { res.pipe(stream, options); } - res.once('end', () => { - this.emit('end'); + + res.once('end', function () { + _this3.emit('end'); }); }); return stream; }; - /** * Enable / disable buffering. * @@ -388,11 +502,11 @@ Request.prototype._pipeContinue = function(stream, options){ * @api public */ -Request.prototype.buffer = function(val){ - this._buffer = (false !== val); + +Request.prototype.buffer = function (value) { + this._buffer = value !== false; return this; }; - /** * Redirect to `url * @@ -401,73 +515,65 @@ Request.prototype.buffer = function(val){ * @api private */ -Request.prototype._redirect = function(res){ - let url = res.headers.location; + +Request.prototype._redirect = function (res) { + var url = res.headers.location; + if (!url) { return this.callback(new Error('No location header for redirect'), res); } - debug('redirect %s -> %s', this.url, url); + debug('redirect %s -> %s', this.url, url); // location - // location - url = resolve(this.url, url); - - // ensure the response is being consumed + url = resolve(this.url, url); // ensure the response is being consumed // this is required for Node v0.10+ - res.resume(); - - let headers = this.req._headers; - const changesOrigin = parse(url).host !== parse(this.url).host; + res.resume(); + var headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers; + var changesOrigin = parse(url).host !== parse(this.url).host; // implementation of 302 following defacto standard - // implementation of 302 following defacto standard - if (res.statusCode == 301 || res.statusCode == 302){ + if (res.statusCode === 301 || res.statusCode === 302) { // strip Content-* related fields // in case of POST etc - headers = utils.cleanHeader(this.req._headers, changesOrigin); + headers = utils.cleanHeader(headers, changesOrigin); // force GET - // force GET - this.method = 'HEAD' == this.method - ? 'HEAD' - : 'GET'; + this.method = this.method === 'HEAD' ? 'HEAD' : 'GET'; // clear data - // clear data this._data = null; - } - // 303 is always GET - if (res.statusCode == 303) { + } // 303 is always GET + + + if (res.statusCode === 303) { // strip Content-* related fields // in case of POST etc - headers = utils.cleanHeader(this.req._headers, changesOrigin); + headers = utils.cleanHeader(headers, changesOrigin); // force method - // force method - this.method = 'GET'; + this.method = 'GET'; // clear data - // clear data this._data = null; - } - // 307 preserves method + } // 307 preserves method // 308 preserves method - delete headers.host; + + delete headers.host; delete this.req; - delete this._formData; + delete this._formData; // remove all add header except User-Agent + + _initHeaders(this); // redirect - // remove all add header except User-Agent - _initHeaders(this); - // redirect this._endCalled = false; this.url = url; this.qs = {}; this._query.length = 0; this.set(headers); this.emit('redirect', res); + this._redirectList.push(this.url); + this.end(this._callback); return this; }; - /** * Set Authorization field value with `user` and `pass`. * @@ -485,23 +591,28 @@ Request.prototype._redirect = function(res){ * @api public */ -Request.prototype.auth = function(user, pass, options){ - if (1 === arguments.length) pass = ''; - if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options + +Request.prototype.auth = function (user, pass, options) { + if (arguments.length === 1) pass = ''; + + if (_typeof(pass) === 'object' && pass !== null) { + // pass is optional and can be replaced with options options = pass; pass = ''; } + if (!options) { - options = { type: 'basic' }; + options = { + type: 'basic' + }; } - var encoder = function(string) { - return new Buffer(string).toString('base64'); + var encoder = function encoder(string) { + return Buffer.from(string).toString('base64'); }; return this._auth(user, pass, options, encoder); }; - /** * Set the certificate authority option for https request. * @@ -510,11 +621,11 @@ Request.prototype.auth = function(user, pass, options){ * @api public */ -Request.prototype.ca = function(cert){ + +Request.prototype.ca = function (cert) { this._ca = cert; return this; }; - /** * Set the client certificate key option for https request. * @@ -523,11 +634,11 @@ Request.prototype.ca = function(cert){ * @api public */ -Request.prototype.key = function(cert){ + +Request.prototype.key = function (cert) { this._key = cert; return this; }; - /** * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format. * @@ -536,16 +647,17 @@ Request.prototype.key = function(cert){ * @api public */ -Request.prototype.pfx = function(cert) { - if (typeof cert === 'object' && !Buffer.isBuffer(cert)) { + +Request.prototype.pfx = function (cert) { + if (_typeof(cert) === 'object' && !Buffer.isBuffer(cert)) { this._pfx = cert.pfx; this._passphrase = cert.passphrase; } else { this._pfx = cert; } + return this; }; - /** * Set the client certificate option for https request. * @@ -554,56 +666,131 @@ Request.prototype.pfx = function(cert) { * @api public */ -Request.prototype.cert = function(cert){ + +Request.prototype.cert = function (cert) { this._cert = cert; return this; }; +/** + * Do not reject expired or invalid TLS certs. + * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks. + * + * @return {Request} for chaining + * @api public + */ + +Request.prototype.disableTLSCerts = function () { + this._disableTLSCerts = true; + return this; +}; /** * Return an http[s] request. * * @return {OutgoingMessage} * @api private */ +// eslint-disable-next-line complexity -Request.prototype.request = function(){ - if (this.req) return this.req; - const options = {}; +Request.prototype.request = function () { + var _this4 = this; + + if (this.req) return this.req; + var options = {}; try { - const query = qs.stringify(this.qs, { + var query = qs.stringify(this.qs, { indices: false, - strictNullHandling: true, + strictNullHandling: true }); + if (query) { this.qs = {}; + this._query.push(query); } + this._finalizeQueryString(); - } catch (e) { - return this.emit('error', e); + } catch (err) { + return this.emit('error', err); } - let url = this.url; - const retries = this._retries; + var url = this.url; + var retries = this._retries; // Capture backticks as-is from the final query string built above. + // Note: this'll only find backticks entered in req.query(String) + // calls, because qs.stringify unconditionally encodes backticks. + + var queryStringBackticks; + + if (url.includes('`')) { + var queryStartIndex = url.indexOf('?'); + + if (queryStartIndex !== -1) { + var queryString = url.slice(queryStartIndex + 1); + queryStringBackticks = queryString.match(/`|%60/g); + } + } // default to http:// + + + if (url.indexOf('http') !== 0) url = "http://".concat(url); + url = parse(url); // See https://github.com/visionmedia/superagent/issues/1367 + + if (queryStringBackticks) { + var i = 0; + url.query = url.query.replace(/%60/g, function () { + return queryStringBackticks[i++]; + }); + url.search = "?".concat(url.query); + url.path = url.pathname + url.search; + } // support unix sockets - // default to http:// - if (0 != url.indexOf('http')) url = `http://${url}`; - url = parse(url); - // support unix sockets if (/^https?\+unix:/.test(url.protocol) === true) { // get the protocol - url.protocol = `${url.protocol.split('+')[0]}:`; + url.protocol = "".concat(url.protocol.split('+')[0], ":"); // get the socket, path - // get the socket, path - const unixParts = url.path.match(/^([^/]+)(.+)$/); + var unixParts = url.path.match(/^([^/]+)(.+)$/); options.socketPath = unixParts[1].replace(/%2F/g, '/'); url.path = unixParts[2]; - } + } // Override IP address of a hostname + + + if (this._connectOverride) { + var _url = url, + hostname = _url.hostname; + var match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*']; + + if (match) { + // backup the real host + if (!this._header.host) { + this.set('host', url.host); + } + + var newHost; + var newPort; + + if (_typeof(match) === 'object') { + newHost = match.host; + newPort = match.port; + } else { + newHost = match; + newPort = url.port; + } // wrap [ipv6] + + + url.host = /:/.test(newHost) ? "[".concat(newHost, "]") : newHost; + + if (newPort) { + url.host += ":".concat(newPort); + url.port = newPort; + } + + url.hostname = newHost; + } + } // options + - // options options.method = this.method; options.port = url.port; options.path = url.path; @@ -614,60 +801,70 @@ Request.prototype.request = function(){ options.cert = this._cert; options.passphrase = this._passphrase; options.agent = this._agent; + options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0'; // Allows request.get('https://1.2.3.4/').set('Host', 'example.com') - // initiate request - const mod = exports.protocols[url.protocol]; + if (this._header.host) { + options.servername = this._header.host.replace(/:\d+$/, ''); + } - // request - const req = (this.req = mod.request(options)); + if (this._trustLocalhost && /^(?:localhost|127\.0\.0\.\d+|(0*:)+:0*1)$/.test(url.hostname)) { + options.rejectUnauthorized = false; + } // initiate request + + + var mod = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(url.protocol) : exports.protocols[url.protocol]; // request + + this.req = mod.request(options); + var req = this.req; // set tcp no delay - // set tcp no delay req.setNoDelay(true); - if ('HEAD' != options.method) { + if (options.method !== 'HEAD') { req.setHeader('Accept-Encoding', 'gzip, deflate'); } - this.protocol = url.protocol; - this.host = url.host; - // expose events - req.once('drain', () => { this.emit('drain'); }); + this.protocol = url.protocol; + this.host = url.host; // expose events - req.once('error', err => { + req.once('drain', function () { + _this4.emit('drain'); + }); + req.on('error', function (error) { // flag abortion here for out timeouts // because node will emit a faux-error "socket hang up" // when request is aborted before a connection is made - if (this._aborted) return; - // if not the same, we are in the **old** (cancelled) request, + if (_this4._aborted) return; // if not the same, we are in the **old** (cancelled) request, // so need to continue (same as for above) - if (this._retries !== retries) return; - // if we've received a response then we don't want to let + + if (_this4._retries !== retries) return; // if we've received a response then we don't want to let // an error in the request blow up the response - if (this.response) return; - this.callback(err); - }); - // auth + if (_this4.response) return; + + _this4.callback(error); + }); // auth + if (url.auth) { - const auth = url.auth.split(':'); + var auth = url.auth.split(':'); this.auth(auth[0], auth[1]); } + if (this.username && this.password) { this.auth(this.username, this.password); } - for (const key in this.header) { - if (this.header.hasOwnProperty(key)) - req.setHeader(key, this.header[key]); - } - // add cookies + for (var key in this.header) { + if (hasOwn(this.header, key)) req.setHeader(key, this.header[key]); + } // add cookies + + if (this.cookies) { - if(this.header.hasOwnProperty('cookie')) { + if (hasOwn(this._header, 'cookie')) { // merge - const tmpJar = new CookieJar.CookieJar(); - tmpJar.setCookies(this.header.cookie.split(';')); - tmpJar.setCookies(this.cookies.split(';')); - req.setHeader('Cookie',tmpJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString()); + var temporaryJar = new CookieJar.CookieJar(); + temporaryJar.setCookies(this._header.cookie.split(';')); + temporaryJar.setCookies(this.cookies.split(';')); + req.setHeader('Cookie', temporaryJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString()); } else { req.setHeader('Cookie', this.cookies); } @@ -675,7 +872,6 @@ Request.prototype.request = function(){ return req; }; - /** * Invoke the callback with `err` and `res` * and handle arity check. @@ -685,60 +881,63 @@ Request.prototype.request = function(){ * @api private */ -Request.prototype.callback = function(err, res){ - if (this._shouldRetry(err, res)) { + +Request.prototype.callback = function (error, res) { + if (this._shouldRetry(error, res)) { return this._retry(); - } + } // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime. + - // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime. - const fn = this._callback || noop; + var fn = this._callback || noop; this.clearTimeout(); if (this.called) return console.warn('superagent: double callback bug'); this.called = true; - if (!err) { + if (!error) { try { if (!this._isResponseOK(res)) { - let msg = 'Unsuccessful HTTP response'; + var message = 'Unsuccessful HTTP response'; + if (res) { - msg = http.STATUS_CODES[res.status] || msg; + message = http.STATUS_CODES[res.status] || message; } - err = new Error(msg); - err.status = res ? res.status : undefined; + + error = new Error(message); + error.status = res ? res.status : undefined; } - } catch (new_err) { - err = new_err; + } catch (error_) { + error = error_; } - } - // It's important that the callback is called outside try/catch + } // It's important that the callback is called outside try/catch // to avoid double callback - if (!err) { + + + if (!error) { return fn(null, res); } - err.response = res; - if (this._maxRetries) err.retries = this._retries - 1; - - // only emit error event if there is a listener + error.response = res; + if (this._maxRetries) error.retries = this._retries - 1; // only emit error event if there is a listener // otherwise we assume the callback to `.end()` will get the error - if (err && this.listeners('error').length > 0) { - this.emit('error', err); + + if (error && this.listeners('error').length > 0) { + this.emit('error', error); } - fn(err, res); + fn(error, res); }; - /** * Check if `obj` is a host object, * - * @param {Object} obj - * @return {Boolean} + * @param {Object} obj host object + * @return {Boolean} is a host object * @api private */ -Request.prototype._isHost = function _isHost(obj) { - return Buffer.isBuffer(obj) || obj instanceof Stream || obj instanceof FormData; -} + +Request.prototype._isHost = function (object) { + return Buffer.isBuffer(object) || object instanceof Stream || object instanceof FormData; +}; /** * Initiate request, invoking callback `fn(err, res)` * with an instanceof `Response`. @@ -748,107 +947,134 @@ Request.prototype._isHost = function _isHost(obj) { * @api public */ -Request.prototype._emitResponse = function(body, files) { - const response = new Response(this); + +Request.prototype._emitResponse = function (body, files) { + var response = new Response(this); this.response = response; response.redirects = this._redirectList; + if (undefined !== body) { response.body = body; } + response.files = files; + + if (this._endCalled) { + response.pipe = function () { + throw new Error("end() has already been called, so it's too late to start piping"); + }; + } + this.emit('response', response); return response; }; -Request.prototype.end = function(fn) { +Request.prototype.end = function (fn) { this.request(); debug('%s %s', this.method, this.url); if (this._endCalled) { - console.warn( - 'Warning: .end() was called twice. This is not supported in superagent' - ); + throw new Error('.end() was called twice. This is not supported in superagent'); } - this._endCalled = true; - // store callback + this._endCalled = true; // store callback + this._callback = fn || noop; - return this._end(); + this._end(); }; -Request.prototype._end = function() { - let data = this._data; - const req = this.req; - let buffer = this._buffer; - const method = this.method; +Request.prototype._end = function () { + var _this5 = this; + + if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called')); + var data = this._data; + var req = this.req; + var method = this.method; - this._setTimeouts(); + this._setTimeouts(); // body - // body - if ('HEAD' != method && !req._headerSent) { + + if (method !== 'HEAD' && !req._headerSent) { // serialize stuff - if ('string' != typeof data) { - let contentType = req.getHeader('Content-Type'); - // Parse out just the content type from the header (ignore the charset) + if (typeof data !== 'string') { + var contentType = req.getHeader('Content-Type'); // Parse out just the content type from the header (ignore the charset) + if (contentType) contentType = contentType.split(';')[0]; - let serialize = exports.serialize[contentType]; + var serialize = this._serializer || exports.serialize[contentType]; + if (!serialize && isJSON(contentType)) { serialize = exports.serialize['application/json']; } + if (serialize) data = serialize(data); - } + } // content-length + - // content-length if (data && !req.getHeader('Content-Length')) { req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data)); } - } + } // response + // eslint-disable-next-line complexity - // response - req.once('response', res => { - debug('%s %s -> %s', this.method, this.url, res.statusCode); - if (this._responseTimeoutTimer) { - clearTimeout(this._responseTimeoutTimer); + req.once('response', function (res) { + debug('%s %s -> %s', _this5.method, _this5.url, res.statusCode); + + if (_this5._responseTimeoutTimer) { + clearTimeout(_this5._responseTimeoutTimer); } - if (this.piped) { + if (_this5.piped) { return; } - const max = this._maxRedirects; - const mime = utils.type(res.headers['content-type'] || '') || 'text/plain'; - const type = mime.split('/')[0]; - const multipart = 'multipart' == type; - const redirect = isRedirect(res.statusCode); - let parser = this._parser; - const responseType = this._responseType; + var max = _this5._maxRedirects; + var mime = utils.type(res.headers['content-type'] || '') || 'text/plain'; + var type = mime.split('/')[0]; + if (type) type = type.toLowerCase().trim(); + var multipart = type === 'multipart'; + var redirect = isRedirect(res.statusCode); + var responseType = _this5._responseType; + _this5.res = res; // redirect + + if (redirect && _this5._redirects++ !== max) { + return _this5._redirect(res); + } - this.res = res; + if (_this5.method === 'HEAD') { + _this5.emit('end'); - // redirect - if (redirect && this._redirects++ != max) { - return this._redirect(res); - } + _this5.callback(null, _this5._emitResponse()); - if ('HEAD' == this.method) { - this.emit('end'); - this.callback(null, this._emitResponse()); return; - } + } // zlib support - // zlib support - if (this._shouldUnzip(res)) { + + if (_this5._shouldUnzip(res)) { unzip(req, res); } + var buffer = _this5._buffer; + + if (buffer === undefined && mime in exports.buffer) { + buffer = Boolean(exports.buffer[mime]); + } + + var parser = _this5._parser; + + if (undefined === buffer && parser) { + console.warn("A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`"); + buffer = true; + } + if (!parser) { if (responseType) { parser = exports.parse.image; // It's actually a generic Buffer + buffer = true; } else if (multipart) { - const form = new formidable.IncomingForm(); + var form = formidable(); parser = form.parse.bind(form); buffer = true; } else if (isImageOrVideo(mime)) { @@ -856,39 +1082,46 @@ Request.prototype._end = function() { buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent } else if (exports.parse[mime]) { parser = exports.parse[mime]; - } else if ('text' == type) { + } else if (type === 'text') { parser = exports.parse.text; - buffer = (buffer !== false); - - // everyone wants their own white-labeled json + buffer = buffer !== false; // everyone wants their own white-labeled json } else if (isJSON(mime)) { parser = exports.parse['application/json']; - buffer = (buffer !== false); + buffer = buffer !== false; } else if (buffer) { parser = exports.parse.text; + } else if (undefined === buffer) { + parser = exports.parse.image; // It's actually a generic Buffer + + buffer = true; } - } + } // by default only buffer text/*, json and messed up thing from hell + - // by default only buffer text/*, json and messed up thing from hell - if ((undefined === buffer && isText(mime)) || isJSON(mime)) { + if (undefined === buffer && isText(mime) || isJSON(mime)) { buffer = true; } - let parserHandlesEnd = false; + _this5._resBuffered = buffer; + var parserHandlesEnd = false; + if (buffer) { // Protectiona against zip bombs and other nuisance - let responseBytesLeft = this._maxResponseSize || 200000000; - res.on('data', buf => { - responseBytesLeft -= buf.byteLength || buf.length; + var responseBytesLeft = _this5._maxResponseSize || 200000000; + res.on('data', function (buf) { + responseBytesLeft -= buf.byteLength || buf.length > 0 ? buf.length : 0; + if (responseBytesLeft < 0) { // This will propagate through error event - const err = Error("Maximum response size reached"); - err.code = "ETOOLARGE"; - // Parsers aren't required to observe error event, + var error = new Error('Maximum response size reached'); + error.code = 'ETOOLARGE'; // Parsers aren't required to observe error event, // so would incorrectly report success - parserHandlesEnd = false; - // Will emit error event - res.destroy(err); + + parserHandlesEnd = false; // Will not emit error event + + res.destroy(error); // so we do callback now + + _this5.callback(error, null); } }); } @@ -898,121 +1131,133 @@ Request.prototype._end = function() { // Unbuffered parsers are supposed to emit response early, // which is weird BTW, because response.body won't be there. parserHandlesEnd = buffer; - - parser(res, (err, obj, files) => { - if (this.timedout) { + parser(res, function (error, object, files) { + if (_this5.timedout) { // Timeout has already handled all callbacks return; - } - - // Intentional (non-timeout) abort is supposed to preserve partial response, + } // Intentional (non-timeout) abort is supposed to preserve partial response, // even if it doesn't parse. - if (err && !this._aborted) { - return this.callback(err); + + + if (error && !_this5._aborted) { + return _this5.callback(error); } if (parserHandlesEnd) { - this.emit('end'); - this.callback(null, this._emitResponse(obj, files)); + _this5.emit('end'); + + _this5.callback(null, _this5._emitResponse(object, files)); } }); } catch (err) { - this.callback(err); + _this5.callback(err); + return; } } - this.res = res; + _this5.res = res; // unbuffered - // unbuffered if (!buffer) { - debug('unbuffered %s %s', this.method, this.url); - this.callback(null, this._emitResponse()); + debug('unbuffered %s %s', _this5.method, _this5.url); + + _this5.callback(null, _this5._emitResponse()); + if (multipart) return; // allow multipart to handle end event - res.once('end', () => { - debug('end %s %s', this.method, this.url); - this.emit('end'); + + res.once('end', function () { + debug('end %s %s', _this5.method, _this5.url); + + _this5.emit('end'); }); return; - } + } // terminating events + - // terminating events - res.once('error', err => { + res.once('error', function (error) { parserHandlesEnd = false; - this.callback(err, null); + + _this5.callback(error, null); }); - if (!parserHandlesEnd) - res.once('end', () => { - debug('end %s %s', this.method, this.url); - // TODO: unless buffering emit earlier to stream - this.emit('end'); - this.callback(null, this._emitResponse()); - }); - }); + if (!parserHandlesEnd) res.once('end', function () { + debug('end %s %s', _this5.method, _this5.url); // TODO: unless buffering emit earlier to stream + _this5.emit('end'); + + _this5.callback(null, _this5._emitResponse()); + }); + }); this.emit('request', this); - const getProgressMonitor = () => { - const lengthComputable = true; - const total = req.getHeader('Content-Length'); - let loaded = 0; + var getProgressMonitor = function getProgressMonitor() { + var lengthComputable = true; + var total = req.getHeader('Content-Length'); + var loaded = 0; + var progress = new Stream.Transform(); - const progress = new Stream.Transform(); - progress._transform = (chunk, encoding, cb) => { + progress._transform = function (chunk, encoding, cb) { loaded += chunk.length; - this.emit('progress', { + + _this5.emit('progress', { direction: 'upload', - lengthComputable, - loaded, - total, + lengthComputable: lengthComputable, + loaded: loaded, + total: total }); + cb(null, chunk); }; + return progress; }; - const bufferToChunks = (buffer) => { - const chunkSize = 16 * 1024; // default highWaterMark value - const chunking = new Stream.Readable(); - const totalLength = buffer.length; - const remainder = totalLength % chunkSize; - const cutoff = totalLength - remainder; + var bufferToChunks = function bufferToChunks(buffer) { + var chunkSize = 16 * 1024; // default highWaterMark value + + var chunking = new Stream.Readable(); + var totalLength = buffer.length; + var remainder = totalLength % chunkSize; + var cutoff = totalLength - remainder; - for (let i = 0; i < cutoff; i += chunkSize) { - const chunk = buffer.slice(i, i + chunkSize); + for (var i = 0; i < cutoff; i += chunkSize) { + var chunk = buffer.slice(i, i + chunkSize); chunking.push(chunk); } if (remainder > 0) { - const remainderBuffer = buffer.slice(-remainder); + var remainderBuffer = buffer.slice(-remainder); chunking.push(remainderBuffer); } chunking.push(null); // no more data return chunking; - } + }; // if a FormData instance got created, then we send that as the request body - // if a FormData instance got created, then we send that as the request body - const formData = this._formData; - if (formData) { + var formData = this._formData; + + if (formData) { // set headers - const headers = formData.getHeaders(); - for (const i in headers) { - debug('setting FormData header: "%s: %s"', i, headers[i]); - req.setHeader(i, headers[i]); - } + var headers = formData.getHeaders(); - // attempt to get "Content-Length" header - formData.getLength((err, length) => { - // TODO: Add chunked encoding when no length (if err) + for (var i in headers) { + if (hasOwn(headers, i)) { + debug('setting FormData header: "%s: %s"', i, headers[i]); + req.setHeader(i, headers[i]); + } + } // attempt to get "Content-Length" header + + formData.getLength(function (error, length) { + // TODO: Add chunked encoding when no length (if err) + if (error) debug('formData.getLength had error', error, length); debug('got FormData Content-Length: %s', length); - if ('number' == typeof length) { + + if (typeof length === 'number') { req.setHeader('Content-Length', length); } - + formData.pipe(getProgressMonitor()).pipe(req); }); } else if (Buffer.isBuffer(data)) { @@ -1020,79 +1265,129 @@ Request.prototype._end = function() { } else { req.end(data); } +}; // Check whether response has a non-0-sized gzip-encoded body - return this; -}; -/** - * Check whether response has a non-0-sized gzip-encoded body - */ -Request.prototype._shouldUnzip = res => { +Request.prototype._shouldUnzip = function (res) { if (res.statusCode === 204 || res.statusCode === 304) { // These aren't supposed to have any body return false; - } + } // header content is a string, and distinction between 0 and no information is crucial + - // header content is a string, and distinction between 0 and no information is crucial - if ('0' === res.headers['content-length']) { + if (res.headers['content-length'] === '0') { // We know that the body is empty (unfortunately, this check does not cover chunked encoding) return false; - } + } // console.log(res); + - // console.log(res); return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']); }; +/** + * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses. + * + * When making a request to a URL with a hostname exactly matching a key in the object, + * use the given IP address to connect, instead of using DNS to resolve the hostname. + * + * A special host `*` matches every hostname (keep redirects in mind!) + * + * request.connect({ + * 'test.example.com': '127.0.0.1', + * 'ipv6.example.com': '::1', + * }) + */ + -// generate HTTP verb methods -if (methods.indexOf('del') == -1) { +Request.prototype.connect = function (connectOverride) { + if (typeof connectOverride === 'string') { + this._connectOverride = { + '*': connectOverride + }; + } else if (_typeof(connectOverride) === 'object') { + this._connectOverride = connectOverride; + } else { + this._connectOverride = undefined; + } + + return this; +}; + +Request.prototype.trustLocalhost = function (toggle) { + this._trustLocalhost = toggle === undefined ? true : toggle; + return this; +}; // generate HTTP verb methods + + +if (!methods.includes('del')) { // create a copy so we don't cause conflicts with // other packages using the methods package and // npm 3.x - methods = methods.slice(0); + methods = _toConsumableArray(methods); methods.push('del'); } -methods.forEach(method => { - const name = method; - method = 'del' == method ? 'delete' : method; - - method = method.toUpperCase(); - request[name] = (url, data, fn) => { - const req = request(method, url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) { - if (method === 'GET' || method === 'HEAD') { - req.query(data); - } else { - req.send(data); + +var _iterator = _createForOfIteratorHelper(methods), + _step; + +try { + var _loop = function _loop() { + var method = _step.value; + var name = method; + method = method === 'del' ? 'delete' : method; + method = method.toUpperCase(); + + request[name] = function (url, data, fn) { + var request_ = request(method, url); + + if (typeof data === 'function') { + fn = data; + data = null; } - } - fn && req.end(fn); - return req; + + if (data) { + if (method === 'GET' || method === 'HEAD') { + request_.query(data); + } else { + request_.send(data); + } + } + + if (fn) request_.end(fn); + return request_; + }; }; -}); -/** - * Check if `mime` is text and should be buffered. - * - * @param {String} mime - * @return {Boolean} - * @api public - */ + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _loop(); + } + /** + * Check if `mime` is text and should be buffered. + * + * @param {String} mime + * @return {Boolean} + * @api public + */ + +} catch (err) { + _iterator.e(err); +} finally { + _iterator.f(); +} function isText(mime) { - const parts = mime.split('/'); - const type = parts[0]; - const subtype = parts[1]; - - return 'text' == type || 'x-www-form-urlencoded' == subtype; + var parts = mime.split('/'); + var type = parts[0]; + if (type) type = type.toLowerCase().trim(); + var subtype = parts[1]; + if (subtype) subtype = subtype.toLowerCase().trim(); + return type === 'text' || subtype === 'x-www-form-urlencoded'; } function isImageOrVideo(mime) { - const type = mime.split('/')[0]; - - return 'image' == type || 'video' == type; + var type = mime.split('/')[0]; + if (type) type = type.toLowerCase().trim(); + return type === 'image' || type === 'video'; } - /** * Check if `mime` is json or has +json structured syntax suffix. * @@ -1101,12 +1396,12 @@ function isImageOrVideo(mime) { * @api private */ + function isJSON(mime) { // should match /json or +json // but not /json-seq - return /[\/+]json($|[^-\w])/.test(mime); + return /[/+]json($|[^-\w])/i.test(mime); } - /** * Check if we should follow the redirect `code`. * @@ -1115,6 +1410,8 @@ function isJSON(mime) { * @api private */ + function isRedirect(code) { - return ~[301, 302, 303, 305, 307, 308].indexOf(code); + return [301, 302, 303, 305, 307, 308].includes(code); } +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2luZGV4LmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJwYXJzZSIsImZvcm1hdCIsInJlc29sdmUiLCJTdHJlYW0iLCJodHRwcyIsImh0dHAiLCJmcyIsInpsaWIiLCJ1dGlsIiwicXMiLCJtaW1lIiwibWV0aG9kcyIsIkZvcm1EYXRhIiwiZm9ybWlkYWJsZSIsImRlYnVnIiwiQ29va2llSmFyIiwic2VtdmVyR3RlIiwic2FmZVN0cmluZ2lmeSIsInV0aWxzIiwiUmVxdWVzdEJhc2UiLCJ1bnppcCIsIlJlc3BvbnNlIiwibWl4aW4iLCJoYXNPd24iLCJodHRwMiIsInByb2Nlc3MiLCJ2ZXJzaW9uIiwicmVxdWVzdCIsIm1ldGhvZCIsInVybCIsImV4cG9ydHMiLCJSZXF1ZXN0IiwiZW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibW9kdWxlIiwiYWdlbnQiLCJub29wIiwiZGVmaW5lIiwicHJvdG9jb2xzIiwic2VyaWFsaXplIiwic3RyaW5naWZ5IiwiYnVmZmVyIiwiX2luaXRIZWFkZXJzIiwicmVxdWVzdF8iLCJfaGVhZGVyIiwiaGVhZGVyIiwiY2FsbCIsIl9lbmFibGVIdHRwMiIsIkJvb2xlYW4iLCJlbnYiLCJIVFRQMl9URVNUIiwiX2FnZW50IiwiX2Zvcm1EYXRhIiwid3JpdGFibGUiLCJfcmVkaXJlY3RzIiwicmVkaXJlY3RzIiwiY29va2llcyIsIl9xdWVyeSIsInFzUmF3IiwiX3JlZGlyZWN0TGlzdCIsIl9zdHJlYW1SZXF1ZXN0Iiwib25jZSIsImNsZWFyVGltZW91dCIsImJpbmQiLCJpbmhlcml0cyIsInByb3RvdHlwZSIsImJvb2wiLCJ1bmRlZmluZWQiLCJFcnJvciIsImF0dGFjaCIsImZpZWxkIiwiZmlsZSIsIm9wdGlvbnMiLCJfZGF0YSIsIm8iLCJmaWxlbmFtZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImVycm9yIiwiZm9ybURhdGEiLCJfZ2V0Rm9ybURhdGEiLCJlbWl0IiwicGF0aCIsImFwcGVuZCIsImNhbGxlZCIsImNhbGxiYWNrIiwiYWJvcnQiLCJ0eXBlIiwic2V0IiwiaW5jbHVkZXMiLCJnZXRUeXBlIiwiYWNjZXB0IiwicXVlcnkiLCJ2YWx1ZSIsInB1c2giLCJPYmplY3QiLCJhc3NpZ24iLCJ3cml0ZSIsImRhdGEiLCJlbmNvZGluZyIsInBpcGUiLCJzdHJlYW0iLCJwaXBlZCIsIl9waXBlQ29udGludWUiLCJyZXEiLCJyZXMiLCJpc1JlZGlyZWN0Iiwic3RhdHVzQ29kZSIsIl9tYXhSZWRpcmVjdHMiLCJfcmVkaXJlY3QiLCJfZW1pdFJlc3BvbnNlIiwiX2Fib3J0ZWQiLCJfc2hvdWxkVW56aXAiLCJ1bnppcE9iamVjdCIsImNyZWF0ZVVuemlwIiwiY29kZSIsIl9idWZmZXIiLCJoZWFkZXJzIiwibG9jYXRpb24iLCJyZXN1bWUiLCJnZXRIZWFkZXJzIiwiX2hlYWRlcnMiLCJjaGFuZ2VzT3JpZ2luIiwiaG9zdCIsImNsZWFuSGVhZGVyIiwiX2VuZENhbGxlZCIsIl9jYWxsYmFjayIsImF1dGgiLCJ1c2VyIiwicGFzcyIsImVuY29kZXIiLCJzdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJfYXV0aCIsImNhIiwiY2VydCIsIl9jYSIsImtleSIsIl9rZXkiLCJwZngiLCJpc0J1ZmZlciIsIl9wZngiLCJfcGFzc3BocmFzZSIsInBhc3NwaHJhc2UiLCJfY2VydCIsImRpc2FibGVUTFNDZXJ0cyIsIl9kaXNhYmxlVExTQ2VydHMiLCJpbmRpY2VzIiwic3RyaWN0TnVsbEhhbmRsaW5nIiwiX2ZpbmFsaXplUXVlcnlTdHJpbmciLCJlcnIiLCJyZXRyaWVzIiwiX3JldHJpZXMiLCJxdWVyeVN0cmluZ0JhY2t0aWNrcyIsInF1ZXJ5U3RhcnRJbmRleCIsImluZGV4T2YiLCJxdWVyeVN0cmluZyIsInNsaWNlIiwibWF0Y2giLCJpIiwicmVwbGFjZSIsInNlYXJjaCIsInBhdGhuYW1lIiwidGVzdCIsInByb3RvY29sIiwic3BsaXQiLCJ1bml4UGFydHMiLCJzb2NrZXRQYXRoIiwiX2Nvbm5lY3RPdmVycmlkZSIsImhvc3RuYW1lIiwibmV3SG9zdCIsIm5ld1BvcnQiLCJwb3J0IiwicmVqZWN0VW5hdXRob3JpemVkIiwiTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCIsInNlcnZlcm5hbWUiLCJfdHJ1c3RMb2NhbGhvc3QiLCJtb2QiLCJzZXRQcm90b2NvbCIsInNldE5vRGVsYXkiLCJzZXRIZWFkZXIiLCJyZXNwb25zZSIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJ0ZW1wb3JhcnlKYXIiLCJzZXRDb29raWVzIiwiY29va2llIiwiZ2V0Q29va2llcyIsIkNvb2tpZUFjY2Vzc0luZm8iLCJBbGwiLCJ0b1ZhbHVlU3RyaW5nIiwiX3Nob3VsZFJldHJ5IiwiX3JldHJ5IiwiZm4iLCJjb25zb2xlIiwid2FybiIsIl9pc1Jlc3BvbnNlT0siLCJtZXNzYWdlIiwiU1RBVFVTX0NPREVTIiwic3RhdHVzIiwiZXJyb3JfIiwiX21heFJldHJpZXMiLCJsaXN0ZW5lcnMiLCJfaXNIb3N0Iiwib2JqZWN0IiwiYm9keSIsImZpbGVzIiwiX2VuZCIsIl9zZXRUaW1lb3V0cyIsIl9oZWFkZXJTZW50IiwiY29udGVudFR5cGUiLCJnZXRIZWFkZXIiLCJfc2VyaWFsaXplciIsImlzSlNPTiIsImJ5dGVMZW5ndGgiLCJfcmVzcG9uc2VUaW1lb3V0VGltZXIiLCJtYXgiLCJ0b0xvd2VyQ2FzZSIsInRyaW0iLCJtdWx0aXBhcnQiLCJyZWRpcmVjdCIsInJlc3BvbnNlVHlwZSIsIl9yZXNwb25zZVR5cGUiLCJwYXJzZXIiLCJfcGFyc2VyIiwiaW1hZ2UiLCJmb3JtIiwiaXNJbWFnZU9yVmlkZW8iLCJ0ZXh0IiwiaXNUZXh0IiwiX3Jlc0J1ZmZlcmVkIiwicGFyc2VySGFuZGxlc0VuZCIsInJlc3BvbnNlQnl0ZXNMZWZ0IiwiX21heFJlc3BvbnNlU2l6ZSIsImJ1ZiIsImRlc3Ryb3kiLCJ0aW1lZG91dCIsImdldFByb2dyZXNzTW9uaXRvciIsImxlbmd0aENvbXB1dGFibGUiLCJ0b3RhbCIsImxvYWRlZCIsInByb2dyZXNzIiwiVHJhbnNmb3JtIiwiX3RyYW5zZm9ybSIsImNodW5rIiwiY2IiLCJkaXJlY3Rpb24iLCJidWZmZXJUb0NodW5rcyIsImNodW5rU2l6ZSIsImNodW5raW5nIiwiUmVhZGFibGUiLCJ0b3RhbExlbmd0aCIsInJlbWFpbmRlciIsImN1dG9mZiIsInJlbWFpbmRlckJ1ZmZlciIsImdldExlbmd0aCIsImNvbm5lY3QiLCJjb25uZWN0T3ZlcnJpZGUiLCJ0cnVzdExvY2FsaG9zdCIsInRvZ2dsZSIsIm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNlbmQiLCJwYXJ0cyIsInN1YnR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EsZUFBbUNBLE9BQU8sQ0FBQyxLQUFELENBQTFDO0FBQUEsSUFBUUMsS0FBUixZQUFRQSxLQUFSO0FBQUEsSUFBZUMsTUFBZixZQUFlQSxNQUFmO0FBQUEsSUFBdUJDLE9BQXZCLFlBQXVCQSxPQUF2Qjs7QUFDQSxJQUFNQyxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLElBQU1LLEtBQUssR0FBR0wsT0FBTyxDQUFDLE9BQUQsQ0FBckI7O0FBQ0EsSUFBTU0sSUFBSSxHQUFHTixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxJQUFNTyxFQUFFLEdBQUdQLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLElBQU1RLElBQUksR0FBR1IsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTVMsSUFBSSxHQUFHVCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxJQUFNVSxFQUFFLEdBQUdWLE9BQU8sQ0FBQyxJQUFELENBQWxCOztBQUNBLElBQU1XLElBQUksR0FBR1gsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBSVksT0FBTyxHQUFHWixPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxJQUFNYSxRQUFRLEdBQUdiLE9BQU8sQ0FBQyxXQUFELENBQXhCOztBQUNBLElBQU1jLFVBQVUs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QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUEsU0FBU2dJLE1BQVQsQ0FBZ0I5TSxJQUFoQixFQUFzQjtBQUNwQjtBQUNBO0FBQ0EsU0FBTyxzQkFBc0I0SixJQUF0QixDQUEyQjVKLElBQTNCLENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQSxTQUFTaUcsVUFBVCxDQUFvQlMsSUFBcEIsRUFBMEI7QUFDeEIsU0FBTyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixHQUFoQixFQUFxQixHQUFyQixFQUEwQixHQUExQixFQUErQjFCLFFBQS9CLENBQXdDMEIsSUFBeEMsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpXG5jb25zdCB7IHBhcnNlLCBmb3JtYXQsIHJlc29sdmUgfSA9IHJlcXVpcmUoJ3VybCcpO1xuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBxcyA9IHJlcXVpcmUoJ3FzJyk7XG5jb25zdCBtaW1lID0gcmVxdWlyZSgnbWltZScpO1xubGV0IG1ldGhvZHMgPSByZXF1aXJlKCdtZXRob2RzJyk7XG5jb25zdCBGb3JtRGF0YSA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuY29uc3QgZm9ybWlkYWJsZSA9IHJlcXVpcmUoJ2Zvcm1pZGFibGUnKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc3VwZXJhZ2VudCcpO1xuY29uc3QgQ29va2llSmFyID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCBzZW12ZXJHdGUgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL2d0ZScpO1xuY29uc3Qgc2FmZVN0cmluZ2lmeSA9IHJlcXVpcmUoJ2Zhc3Qtc2FmZS1zdHJpbmdpZnknKTtcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuY29uc3QgUmVxdWVzdEJhc2UgPSByZXF1aXJlKCcuLi9yZXF1ZXN0LWJhc2UnKTtcbmNvbnN0IHsgdW56aXAgfSA9IHJlcXVpcmUoJy4vdW56aXAnKTtcbmNvbnN0IFJlc3BvbnNlID0gcmVxdWlyZSgnLi9yZXNwb25zZScpO1xuXG5jb25zdCB7IG1peGluLCBoYXNPd24gfSA9IHV0aWxzO1xuXG5sZXQgaHR0cDI7XG5cbmlmIChzZW12ZXJHdGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCcuL2h0dHAyd3JhcHBlcicpO1xuXG5mdW5jdGlvbiByZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0O1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIEV4cG9zZSBgUmVxdWVzdGAuXG4gKi9cblxuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcblxuLyoqXG4gKiBFeHBvc2UgdGhlIGFnZW50IGZ1bmN0aW9uXG4gKi9cblxuZXhwb3J0cy5hZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKTtcblxuLyoqXG4gKiBOb29wLlxuICovXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbmV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBEZWZpbmUgXCJmb3JtXCIgbWltZSB0eXBlLlxuICovXG5cbm1pbWUuZGVmaW5lKFxuICB7XG4gICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IFsnZm9ybScsICd1cmxlbmNvZGVkJywgJ2Zvcm0tZGF0YSddXG4gIH0sXG4gIHRydWVcbik7XG5cbi8qKlxuICogUHJvdG9jb2wgbWFwLlxuICovXG5cbmV4cG9ydHMucHJvdG9jb2xzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG4gICdodHRwMjonOiBodHRwMlxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihvYmope1xuICogICAgICAgcmV0dXJuICdnZW5lcmF0ZWQgeG1sIGhlcmUnO1xuICogICAgIH07XG4gKlxuICovXG5cbmV4cG9ydHMuc2VyaWFsaXplID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcXMuc3RyaW5naWZ5LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHJlcywgZm4pe1xuICogICAgICAgZm4obnVsbCwgcmVzKTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBidWZmZXJpbmcgbWFwLiBDYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpblxuICogcmVzcG9uc2UgdHlwZXMgdG8gYnVmZmVyL25vdCBidWZmZXIuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuYnVmZmVyWydhcHBsaWNhdGlvbi94bWwnXSA9IHRydWU7XG4gKi9cbmV4cG9ydHMuYnVmZmVyID0ge307XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBoZWFkZXIgdHJhY2tpbmcgcHJvcGVydGllcyBvbiBhIHJlcXVlc3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcSB0aGUgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdEhlYWRlcnMocmVxdWVzdF8pIHtcbiAgcmVxdWVzdF8uX2hlYWRlciA9IHtcbiAgICAvLyBjb2VyY2VzIGhlYWRlciBuYW1lcyB0byBsb3dlcmNhc2VcbiAgfTtcbiAgcmVxdWVzdF8uaGVhZGVyID0ge1xuICAgIC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgdXJsID0gZm9ybWF0KHVybCk7XG4gIHRoaXMuX2VuYWJsZUh0dHAyID0gQm9vbGVhbihwcm9jZXNzLmVudi5IVFRQMl9URVNUKTsgLy8gaW50ZXJuYWwgb25seVxuICB0aGlzLl9hZ2VudCA9IGZhbHNlO1xuICB0aGlzLl9mb3JtRGF0YSA9IG51bGw7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgX2luaXRIZWFkZXJzKHRoaXMpO1xuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5fcmVkaXJlY3RzID0gMDtcbiAgdGhpcy5yZWRpcmVjdHMobWV0aG9kID09PSAnSEVBRCcgPyAwIDogNSk7XG4gIHRoaXMuY29va2llcyA9ICcnO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5ID0gW107XG4gIHRoaXMucXNSYXcgPSB0aGlzLl9xdWVyeTsgLy8gVW51c2VkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seVxuICB0aGlzLl9yZWRpcmVjdExpc3QgPSBbXTtcbiAgdGhpcy5fc3RyZWFtUmVxdWVzdCA9IGZhbHNlO1xuICB0aGlzLm9uY2UoJ2VuZCcsIHRoaXMuY2xlYXJUaW1lb3V0LmJpbmQodGhpcykpO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKiBNaXhpbiBgUmVxdWVzdEJhc2VgLlxuICovXG51dGlsLmluaGVyaXRzKFJlcXVlc3QsIFN0cmVhbSk7XG5cbm1peGluKFJlcXVlc3QucHJvdG90eXBlLCBSZXF1ZXN0QmFzZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEVuYWJsZSBvciBEaXNhYmxlIGh0dHAyLlxuICpcbiAqIEVuYWJsZSBodHRwMi5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMigpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMih0cnVlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIERpc2FibGUgaHR0cDIuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0ID0gcmVxdWVzdC5odHRwMigpO1xuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKGZhbHNlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZW5hYmxlXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuaHR0cDIgPSBmdW5jdGlvbiAoYm9vbCkge1xuICBpZiAoZXhwb3J0cy5wcm90b2NvbHNbJ2h0dHAyOiddID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnc3VwZXJhZ2VudDogdGhpcyB2ZXJzaW9uIG9mIE5vZGUuanMgZG9lcyBub3Qgc3VwcG9ydCBodHRwMidcbiAgICApO1xuICB9XG5cbiAgdGhpcy5fZW5hYmxlSHR0cDIgPSBib29sID09PSB1bmRlZmluZWQgPyB0cnVlIDogYm9vbDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFF1ZXVlIHRoZSBnaXZlbiBgZmlsZWAgYXMgYW4gYXR0YWNobWVudCB0byB0aGUgc3BlY2lmaWVkIGBmaWVsZGAsXG4gKiB3aXRoIG9wdGlvbmFsIGBvcHRpb25zYCAob3IgZmlsZW5hbWUpLlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCdodHRwOi8vbG9jYWxob3N0L3VwbG9hZCcpXG4gKiAgIC5hdHRhY2goJ2ZpZWxkJywgQnVmZmVyLmZyb20oJzxiPkhlbGxvIHdvcmxkPC9iPicpLCAnaGVsbG8uaHRtbCcpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQSBmaWxlbmFtZSBtYXkgYWxzbyBiZSB1c2VkOlxuICpcbiAqIGBgYCBqc1xuICogcmVxdWVzdC5wb3N0KCdodHRwOi8vbG9jYWxob3N0L3VwbG9hZCcpXG4gKiAgIC5hdHRhY2goJ2ZpbGVzJywgJ2ltYWdlLmpwZycpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZpZWxkXG4gKiBAcGFyYW0ge1N0cmluZ3xmcy5SZWFkU3RyZWFtfEJ1ZmZlcn0gZmlsZVxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gKGZpZWxkLCBmaWxlLCBvcHRpb25zKSB7XG4gIGlmIChmaWxlKSB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1cGVyYWdlbnQgY2FuJ3QgbWl4IC5zZW5kKCkgYW5kIC5hdHRhY2goKVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgbyA9IHsgZmlsZW5hbWU6IG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIW8uZmlsZW5hbWUpIG8uZmlsZW5hbWUgPSBmaWxlO1xuICAgICAgZGVidWcoJ2NyZWF0aW5nIGBmcy5SZWFkU3RyZWFtYCBpbnN0YW5jZSBmb3IgZmlsZTogJXMnLCBmaWxlKTtcbiAgICAgIGZpbGUgPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpO1xuICAgICAgZmlsZS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW8uZmlsZW5hbWUgJiYgZmlsZS5wYXRoKSB7XG4gICAgICBvLmZpbGVuYW1lID0gZmlsZS5wYXRoO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKGZpZWxkLCBmaWxlLCBvKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX2dldEZvcm1EYXRhID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB7XG4gICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB0aGlzLl9mb3JtRGF0YS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIGRlYnVnKCdGb3JtRGF0YSBlcnJvcicsIGVycm9yKTtcbiAgICAgIGlmICh0aGlzLmNhbGxlZCkge1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBhbmQgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuXG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0aGUgZXJyb3IuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsYmFjayhlcnJvcik7XG4gICAgICB0aGlzLmFib3J0KCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZm9ybURhdGE7XG59O1xuXG4vKipcbiAqIEdldHMvc2V0cyB0aGUgYEFnZW50YCB0byB1c2UgZm9yIHRoaXMgSFRUUCByZXF1ZXN0LiBUaGUgZGVmYXVsdCAoaWYgdGhpc1xuICogZnVuY3Rpb24gaXMgbm90IGNhbGxlZCkgaXMgdG8gb3B0IG91dCBvZiBjb25uZWN0aW9uIHBvb2xpbmcgKGBhZ2VudDogZmFsc2VgKS5cbiAqXG4gKiBAcGFyYW0ge2h0dHAuQWdlbnR9IGFnZW50XG4gKiBAcmV0dXJuIHtodHRwLkFnZW50fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hZ2VudCA9IGZ1bmN0aW9uIChhZ2VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX2FnZW50O1xuICB0aGlzLl9hZ2VudCA9IGFnZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IF9Db250ZW50LVR5cGVfIHJlc3BvbnNlIGhlYWRlciBwYXNzZWQgdGhyb3VnaCBgbWltZS5nZXRUeXBlKClgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAuc2VuZChqc29uc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLnNlbmQoanNvbnN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gdGhpcy5zZXQoXG4gICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgdHlwZS5pbmNsdWRlcygnLycpID8gdHlwZSA6IG1pbWUuZ2V0VHlwZSh0eXBlKVxuICApO1xufTtcblxuLyoqXG4gKiBTZXQgX0FjY2VwdF8gcmVzcG9uc2UgaGVhZGVyIHBhc3NlZCB0aHJvdWdoIGBtaW1lLmdldFR5cGUoKWAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICBzdXBlcmFnZW50LnR5cGVzLmpzb24gPSAnYXBwbGljYXRpb24vanNvbic7XG4gKlxuICogICAgICByZXF1ZXN0LmdldCgnL2FnZW50JylcbiAqICAgICAgICAuYWNjZXB0KCdqc29uJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY2NlcHRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gdGhpcy5zZXQoJ0FjY2VwdCcsIHR5cGUuaW5jbHVkZXMoJy8nKSA/IHR5cGUgOiBtaW1lLmdldFR5cGUodHlwZSkpO1xufTtcblxuLyoqXG4gKiBBZGQgcXVlcnktc3RyaW5nIGB2YWxgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgcmVxdWVzdC5nZXQoJy9zaG9lcycpXG4gKiAgICAgLnF1ZXJ5KCdzaXplPTEwJylcbiAqICAgICAucXVlcnkoeyBjb2xvcjogJ2JsdWUnIH0pXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX3F1ZXJ5LnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5xcywgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFdyaXRlIHJhdyBgZGF0YWAgLyBgZW5jb2RpbmdgIHRvIHRoZSBzb2NrZXQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBkYXRhXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5jb2RpbmdcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IHJlcXVlc3RfID0gdGhpcy5yZXF1ZXN0KCk7XG4gIGlmICghdGhpcy5fc3RyZWFtUmVxdWVzdCkge1xuICAgIHRoaXMuX3N0cmVhbVJlcXVlc3QgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVlc3RfLndyaXRlKGRhdGEsIGVuY29kaW5nKTtcbn07XG5cbi8qKlxuICogUGlwZSB0aGUgcmVxdWVzdCBib2R5IHRvIGBzdHJlYW1gLlxuICpcbiAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW1cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIHRoaXMucGlwZWQgPSB0cnVlOyAvLyBIQUNLLi4uXG4gIHRoaXMuYnVmZmVyKGZhbHNlKTtcbiAgdGhpcy5lbmQoKTtcbiAgcmV0dXJuIHRoaXMuX3BpcGVDb250aW51ZShzdHJlYW0sIG9wdGlvbnMpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX3BpcGVDb250aW51ZSA9IGZ1bmN0aW9uIChzdHJlYW0sIG9wdGlvbnMpIHtcbiAgdGhpcy5yZXEub25jZSgncmVzcG9uc2UnLCAocmVzKSA9PiB7XG4gICAgLy8gcmVkaXJlY3RcbiAgICBpZiAoXG4gICAgICBpc1JlZGlyZWN0KHJlcy5zdGF0dXNDb2RlKSAmJlxuICAgICAgdGhpcy5fcmVkaXJlY3RzKysgIT09IHRoaXMuX21heFJlZGlyZWN0c1xuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0KHJlcykgPT09IHRoaXNcbiAgICAgICAgPyB0aGlzLl9waXBlQ29udGludWUoc3RyZWFtLCBvcHRpb25zKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IHJlcztcbiAgICB0aGlzLl9lbWl0UmVzcG9uc2UoKTtcbiAgICBpZiAodGhpcy5fYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX3Nob3VsZFVuemlwKHJlcykpIHtcbiAgICAgIGNvbnN0IHVuemlwT2JqZWN0ID0gemxpYi5jcmVhdGVVbnppcCgpO1xuICAgICAgdW56aXBPYmplY3Qub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnWl9CVUZfRVJST1InKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpcyBpZ25vcmVkIGJ5IGJyb3dzZXJzIGFuZCBjdXJsXG4gICAgICAgICAgc3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnBpcGUodW56aXBPYmplY3QpLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2FibGUgYnVmZmVyaW5nLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFt2YWxdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHRoaXMuX2J1ZmZlciA9IHZhbHVlICE9PSBmYWxzZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlZGlyZWN0IHRvIGB1cmxcbiAqXG4gKiBAcGFyYW0ge0luY29taW5nTWVzc2FnZX0gcmVzXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLl9yZWRpcmVjdCA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgbGV0IHVybCA9IHJlcy5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKG5ldyBFcnJvcignTm8gbG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCcpLCByZXMpO1xuICB9XG5cbiAgZGVidWcoJ3JlZGlyZWN0ICVzIC0+ICVzJywgdGhpcy51cmwsIHVybCk7XG5cbiAgLy8gbG9jYXRpb25cbiAgdXJsID0gcmVzb2x2ZSh0aGlzLnVybCwgdXJsKTtcblxuICAvLyBlbnN1cmUgdGhlIHJlc3BvbnNlIGlzIGJlaW5nIGNvbnN1bWVkXG4gIC8vIHRoaXMgaXMgcmVxdWlyZWQgZm9yIE5vZGUgdjAuMTArXG4gIHJlcy5yZXN1bWUoKTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMucmVxLmdldEhlYWRlcnMgPyB0aGlzLnJlcS5nZXRIZWFkZXJzKCkgOiB0aGlzLnJlcS5faGVhZGVycztcblxuICBjb25zdCBjaGFuZ2VzT3JpZ2luID0gcGFyc2UodXJsKS5ob3N0ICE9PSBwYXJzZSh0aGlzLnVybCkuaG9zdDtcblxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiAzMDIgZm9sbG93aW5nIGRlZmFjdG8gc3RhbmRhcmRcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikge1xuICAgIC8vIHN0cmlwIENvbnRlbnQtKiByZWxhdGVkIGZpZWxkc1xuICAgIC8vIGluIGNhc2Ugb2YgUE9TVCBldGNcbiAgICBoZWFkZXJzID0gdXRpbHMuY2xlYW5IZWFkZXIoaGVhZGVycywgY2hhbmdlc09yaWdpbik7XG5cbiAgICAvLyBmb3JjZSBHRVRcbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMubWV0aG9kID09PSAnSEVBRCcgPyAnSEVBRCcgOiAnR0VUJztcblxuICAgIC8vIGNsZWFyIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIDMwMyBpcyBhbHdheXMgR0VUXG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzKSB7XG4gICAgLy8gc3RyaXAgQ29udGVudC0qIHJlbGF0ZWQgZmllbGRzXG4gICAgLy8gaW4gY2FzZSBvZiBQT1NUIGV0Y1xuICAgIGhlYWRlcnMgPSB1dGlscy5jbGVhbkhlYWRlcihoZWFkZXJzLCBjaGFuZ2VzT3JpZ2luKTtcblxuICAgIC8vIGZvcmNlIG1ldGhvZFxuICAgIHRoaXMubWV0aG9kID0gJ0dFVCc7XG5cbiAgICAvLyBjbGVhciBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gIH1cblxuICAvLyAzMDcgcHJlc2VydmVzIG1ldGhvZFxuICAvLyAzMDggcHJlc2VydmVzIG1ldGhvZFxuICBkZWxldGUgaGVhZGVycy5ob3N0O1xuXG4gIGRlbGV0ZSB0aGlzLnJlcTtcbiAgZGVsZXRlIHRoaXMuX2Zvcm1EYXRhO1xuXG4gIC8vIHJlbW92ZSBhbGwgYWRkIGhlYWRlciBleGNlcHQgVXNlci1BZ2VudFxuICBfaW5pdEhlYWRlcnModGhpcyk7XG5cbiAgLy8gcmVkaXJlY3RcbiAgdGhpcy5fZW5kQ2FsbGVkID0gZmFsc2U7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7XG4gIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB0aGlzLmVtaXQoJ3JlZGlyZWN0JywgcmVzKTtcbiAgdGhpcy5fcmVkaXJlY3RMaXN0LnB1c2godGhpcy51cmwpO1xuICB0aGlzLmVuZCh0aGlzLl9jYWxsYmFjayk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgLmF1dGgoJ3RvYmknLCAnbGVhcm5ib29zdCcpXG4gKiAgIC5hdXRoKCd0b2JpOmxlYXJuYm9vc3QnKVxuICogICAuYXV0aCgndG9iaScpXG4gKiAgIC5hdXRoKGFjY2Vzc1Rva2VuLCB7IHR5cGU6ICdiZWFyZXInIH0pXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVzZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbcGFzc11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyB3aXRoIGF1dGhvcml6YXRpb24gdHlwZSAnYmFzaWMnIG9yICdiZWFyZXInICgnYmFzaWMnIGlzIGRlZmF1bHQpXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXV0aCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBvcHRpb25zKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSBwYXNzID0gJyc7XG4gIGlmICh0eXBlb2YgcGFzcyA9PT0gJ29iamVjdCcgJiYgcGFzcyAhPT0gbnVsbCkge1xuICAgIC8vIHBhc3MgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIG9wdGlvbnNcbiAgICBvcHRpb25zID0gcGFzcztcbiAgICBwYXNzID0gJyc7XG4gIH1cblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyB0eXBlOiAnYmFzaWMnIH07XG4gIH1cblxuICBjb25zdCBlbmNvZGVyID0gKHN0cmluZykgPT4gQnVmZmVyLmZyb20oc3RyaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgcmV0dXJuIHRoaXMuX2F1dGgodXNlciwgcGFzcywgb3B0aW9ucywgZW5jb2Rlcik7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IEFycmF5fSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2EgPSBmdW5jdGlvbiAoY2VydCkge1xuICB0aGlzLl9jYSA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBrZXkgb3B0aW9uIGZvciBodHRwcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24gKGNlcnQpIHtcbiAgdGhpcy5fa2V5ID0gY2VydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUga2V5LCBjZXJ0aWZpY2F0ZSwgYW5kIENBIGNlcnRzIG9mIHRoZSBjbGllbnQgaW4gUEZYIG9yIFBLQ1MxMiBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBTdHJpbmd9IGNlcnRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5wZnggPSBmdW5jdGlvbiAoY2VydCkge1xuICBpZiAodHlwZW9mIGNlcnQgPT09ICdvYmplY3QnICYmICFCdWZmZXIuaXNCdWZmZXIoY2VydCkpIHtcbiAgICB0aGlzLl9wZnggPSBjZXJ0LnBmeDtcbiAgICB0aGlzLl9wYXNzcGhyYXNlID0gY2VydC5wYXNzcGhyYXNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3BmeCA9IGNlcnQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjbGllbnQgY2VydGlmaWNhdGUgb3B0aW9uIGZvciBodHRwcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2VydCA9IGZ1bmN0aW9uIChjZXJ0KSB7XG4gIHRoaXMuX2NlcnQgPSBjZXJ0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRG8gbm90IHJlamVjdCBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRzLlxuICogc2V0cyBgcmVqZWN0VW5hdXRob3JpemVkPXRydWVgLiBCZSB3YXJuZWQgdGhhdCB0aGlzIGFsbG93cyBNSVRNIGF0dGFja3MuXG4gKlxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmRpc2FibGVUTFNDZXJ0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fZGlzYWJsZVRMU0NlcnRzID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBodHRwW3NdIHJlcXVlc3QuXG4gKlxuICogQHJldHVybiB7T3V0Z29pbmdNZXNzYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3QucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnJlcSkgcmV0dXJuIHRoaXMucmVxO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gcXMuc3RyaW5naWZ5KHRoaXMucXMsIHtcbiAgICAgIGluZGljZXM6IGZhbHNlLFxuICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnFzID0ge307XG4gICAgICB0aGlzLl9xdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGxldCB7IHVybCB9ID0gdGhpcztcbiAgY29uc3QgcmV0cmllcyA9IHRoaXMuX3JldHJpZXM7XG5cbiAgLy8gQ2FwdHVyZSBiYWNrdGlja3MgYXMtaXMgZnJvbSB0aGUgZmluYWwgcXVlcnkgc3RyaW5nIGJ1aWx0IGFib3ZlLlxuICAvLyBOb3RlOiB0aGlzJ2xsIG9ubHkgZmluZCBiYWNrdGlja3MgZW50ZXJlZCBpbiByZXEucXVlcnkoU3RyaW5nKVxuICAvLyBjYWxscywgYmVjYXVzZSBxcy5zdHJpbmdpZnkgdW5jb25kaXRpb25hbGx5IGVuY29kZXMgYmFja3RpY2tzLlxuICBsZXQgcXVlcnlTdHJpbmdCYWNrdGlja3M7XG4gIGlmICh1cmwuaW5jbHVkZXMoJ2AnKSkge1xuICAgIGNvbnN0IHF1ZXJ5U3RhcnRJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG5cbiAgICBpZiAocXVlcnlTdGFydEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB1cmwuc2xpY2UocXVlcnlTdGFydEluZGV4ICsgMSk7XG4gICAgICBxdWVyeVN0cmluZ0JhY2t0aWNrcyA9IHF1ZXJ5U3RyaW5nLm1hdGNoKC9gfCU2MC9nKTtcbiAgICB9XG4gIH1cblxuICAvLyBkZWZhdWx0IHRvIGh0dHA6Ly9cbiAgaWYgKHVybC5pbmRleE9mKCdodHRwJykgIT09IDApIHVybCA9IGBodHRwOi8vJHt1cmx9YDtcbiAgdXJsID0gcGFyc2UodXJsKTtcblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL3N1cGVyYWdlbnQvaXNzdWVzLzEzNjdcbiAgaWYgKHF1ZXJ5U3RyaW5nQmFja3RpY2tzKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHVybC5xdWVyeSA9IHVybC5xdWVyeS5yZXBsYWNlKC8lNjAvZywgKCkgPT4gcXVlcnlTdHJpbmdCYWNrdGlja3NbaSsrXSk7XG4gICAgdXJsLnNlYXJjaCA9IGA/JHt1cmwucXVlcnl9YDtcbiAgICB1cmwucGF0aCA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2g7XG4gIH1cblxuICAvLyBzdXBwb3J0IHVuaXggc29ja2V0c1xuICBpZiAoL15odHRwcz9cXCt1bml4Oi8udGVzdCh1cmwucHJvdG9jb2wpID09PSB0cnVlKSB7XG4gICAgLy8gZ2V0IHRoZSBwcm90b2NvbFxuICAgIHVybC5wcm90b2NvbCA9IGAke3VybC5wcm90b2NvbC5zcGxpdCgnKycpWzBdfTpgO1xuXG4gICAgLy8gZ2V0IHRoZSBzb2NrZXQsIHBhdGhcbiAgICBjb25zdCB1bml4UGFydHMgPSB1cmwucGF0aC5tYXRjaCgvXihbXi9dKykoLispJC8pO1xuICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IHVuaXhQYXJ0c1sxXS5yZXBsYWNlKC8lMkYvZywgJy8nKTtcbiAgICB1cmwucGF0aCA9IHVuaXhQYXJ0c1syXTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIElQIGFkZHJlc3Mgb2YgYSBob3N0bmFtZVxuICBpZiAodGhpcy5fY29ubmVjdE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSB9ID0gdXJsO1xuICAgIGNvbnN0IG1hdGNoID1cbiAgICAgIGhvc3RuYW1lIGluIHRoaXMuX2Nvbm5lY3RPdmVycmlkZVxuICAgICAgICA/IHRoaXMuX2Nvbm5lY3RPdmVycmlkZVtob3N0bmFtZV1cbiAgICAgICAgOiB0aGlzLl9jb25uZWN0T3ZlcnJpZGVbJyonXTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIGJhY2t1cCB0aGUgcmVhbCBob3N0XG4gICAgICBpZiAoIXRoaXMuX2hlYWRlci5ob3N0KSB7XG4gICAgICAgIHRoaXMuc2V0KCdob3N0JywgdXJsLmhvc3QpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3SG9zdDtcbiAgICAgIGxldCBuZXdQb3J0O1xuXG4gICAgICBpZiAodHlwZW9mIG1hdGNoID09PSAnb2JqZWN0Jykge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2guaG9zdDtcbiAgICAgICAgbmV3UG9ydCA9IG1hdGNoLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2g7XG4gICAgICAgIG5ld1BvcnQgPSB1cmwucG9ydDtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBbaXB2Nl1cbiAgICAgIHVybC5ob3N0ID0gLzovLnRlc3QobmV3SG9zdCkgPyBgWyR7bmV3SG9zdH1dYCA6IG5ld0hvc3Q7XG4gICAgICBpZiAobmV3UG9ydCkge1xuICAgICAgICB1cmwuaG9zdCArPSBgOiR7bmV3UG9ydH1gO1xuICAgICAgICB1cmwucG9ydCA9IG5ld1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIHVybC5ob3N0bmFtZSA9IG5ld0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBvcHRpb25zLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBvcHRpb25zLnBvcnQgPSB1cmwucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gdXJsLnBhdGg7XG4gIG9wdGlvbnMuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgb3B0aW9ucy5jYSA9IHRoaXMuX2NhO1xuICBvcHRpb25zLmtleSA9IHRoaXMuX2tleTtcbiAgb3B0aW9ucy5wZnggPSB0aGlzLl9wZng7XG4gIG9wdGlvbnMuY2VydCA9IHRoaXMuX2NlcnQ7XG4gIG9wdGlvbnMucGFzc3BocmFzZSA9IHRoaXMuX3Bhc3NwaHJhc2U7XG4gIG9wdGlvbnMuYWdlbnQgPSB0aGlzLl9hZ2VudDtcbiAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPVxuICAgIHR5cGVvZiB0aGlzLl9kaXNhYmxlVExTQ2VydHMgPT09ICdib29sZWFuJ1xuICAgICAgPyAhdGhpcy5fZGlzYWJsZVRMU0NlcnRzXG4gICAgICA6IHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09ICcwJztcblxuICAvLyBBbGxvd3MgcmVxdWVzdC5nZXQoJ2h0dHBzOi8vMS4yLjMuNC8nKS5zZXQoJ0hvc3QnLCAnZXhhbXBsZS5jb20nKVxuICBpZiAodGhpcy5faGVhZGVyLmhvc3QpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLl9oZWFkZXIuaG9zdC5yZXBsYWNlKC86XFxkKyQvLCAnJyk7XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5fdHJ1c3RMb2NhbGhvc3QgJiZcbiAgICAvXig/OmxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLlxcZCt8KDAqOikrOjAqMSkkLy50ZXN0KHVybC5ob3N0bmFtZSlcbiAgKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgY29uc3QgbW9kID0gdGhpcy5fZW5hYmxlSHR0cDJcbiAgICA/IGV4cG9ydHMucHJvdG9jb2xzWydodHRwMjonXS5zZXRQcm90b2NvbCh1cmwucHJvdG9jb2wpXG4gICAgOiBleHBvcnRzLnByb3RvY29sc1t1cmwucHJvdG9jb2xdO1xuXG4gIC8vIHJlcXVlc3RcbiAgdGhpcy5yZXEgPSBtb2QucmVxdWVzdChvcHRpb25zKTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG5cbiAgLy8gc2V0IHRjcCBubyBkZWxheVxuICByZXEuc2V0Tm9EZWxheSh0cnVlKTtcblxuICBpZiAob3B0aW9ucy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLCBkZWZsYXRlJyk7XG4gIH1cblxuICB0aGlzLnByb3RvY29sID0gdXJsLnByb3RvY29sO1xuICB0aGlzLmhvc3QgPSB1cmwuaG9zdDtcblxuICAvLyBleHBvc2UgZXZlbnRzXG4gIHJlcS5vbmNlKCdkcmFpbicsICgpID0+IHtcbiAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gIH0pO1xuXG4gIHJlcS5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAvLyBmbGFnIGFib3J0aW9uIGhlcmUgZm9yIG91dCB0aW1lb3V0c1xuICAgIC8vIGJlY2F1c2Ugbm9kZSB3aWxsIGVtaXQgYSBmYXV4LWVycm9yIFwic29ja2V0IGhhbmcgdXBcIlxuICAgIC8vIHdoZW4gcmVxdWVzdCBpcyBhYm9ydGVkIGJlZm9yZSBhIGNvbm5lY3Rpb24gaXMgbWFkZVxuICAgIGlmICh0aGlzLl9hYm9ydGVkKSByZXR1cm47XG4gICAgLy8gaWYgbm90IHRoZSBzYW1lLCB3ZSBhcmUgaW4gdGhlICoqb2xkKiogKGNhbmNlbGxlZCkgcmVxdWVzdCxcbiAgICAvLyBzbyBuZWVkIHRvIGNvbnRpbnVlIChzYW1lIGFzIGZvciBhYm92ZSlcbiAgICBpZiAodGhpcy5fcmV0cmllcyAhPT0gcmV0cmllcykgcmV0dXJuO1xuICAgIC8vIGlmIHdlJ3ZlIHJlY2VpdmVkIGEgcmVzcG9uc2UgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGxldFxuICAgIC8vIGFuIGVycm9yIGluIHRoZSByZXF1ZXN0IGJsb3cgdXAgdGhlIHJlc3BvbnNlXG4gICAgaWYgKHRoaXMucmVzcG9uc2UpIHJldHVybjtcbiAgICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbiAgfSk7XG5cbiAgLy8gYXV0aFxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB0aGlzLmF1dGgoYXV0aFswXSwgYXV0aFsxXSk7XG4gIH1cblxuICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7XG4gICAgdGhpcy5hdXRoKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oZWFkZXIpIHtcbiAgICBpZiAoaGFzT3duKHRoaXMuaGVhZGVyLCBrZXkpKSByZXEuc2V0SGVhZGVyKGtleSwgdGhpcy5oZWFkZXJba2V5XSk7XG4gIH1cblxuICAvLyBhZGQgY29va2llc1xuICBpZiAodGhpcy5jb29raWVzKSB7XG4gICAgaWYgKGhhc093bih0aGlzLl9oZWFkZXIsICdjb29raWUnKSkge1xuICAgICAgLy8gbWVyZ2VcbiAgICAgIGNvbnN0IHRlbXBvcmFyeUphciA9IG5ldyBDb29raWVKYXIuQ29va2llSmFyKCk7XG4gICAgICB0ZW1wb3JhcnlKYXIuc2V0Q29va2llcyh0aGlzLl9oZWFkZXIuY29va2llLnNwbGl0KCc7JykpO1xuICAgICAgdGVtcG9yYXJ5SmFyLnNldENvb2tpZXModGhpcy5jb29raWVzLnNwbGl0KCc7JykpO1xuICAgICAgcmVxLnNldEhlYWRlcihcbiAgICAgICAgJ0Nvb2tpZScsXG4gICAgICAgIHRlbXBvcmFyeUphci5nZXRDb29raWVzKENvb2tpZUphci5Db29raWVBY2Nlc3NJbmZvLkFsbCkudG9WYWx1ZVN0cmluZygpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuc2V0SGVhZGVyKCdDb29raWUnLCB0aGlzLmNvb2tpZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXE7XG59O1xuXG4vKipcbiAqIEludm9rZSB0aGUgY2FsbGJhY2sgd2l0aCBgZXJyYCBhbmQgYHJlc2BcbiAqIGFuZCBoYW5kbGUgYXJpdHkgY2hlY2suXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmNhbGxiYWNrID0gZnVuY3Rpb24gKGVycm9yLCByZXMpIHtcbiAgaWYgKHRoaXMuX3Nob3VsZFJldHJ5KGVycm9yLCByZXMpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHJ5KCk7XG4gIH1cblxuICAvLyBBdm9pZCB0aGUgZXJyb3Igd2hpY2ggaXMgZW1pdHRlZCBmcm9tICdzb2NrZXQgaGFuZyB1cCcgdG8gY2F1c2UgdGhlIGZuIHVuZGVmaW5lZCBlcnJvciBvbiBKUyBydW50aW1lLlxuICBjb25zdCBmbiA9IHRoaXMuX2NhbGxiYWNrIHx8IG5vb3A7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIGlmICh0aGlzLmNhbGxlZCkgcmV0dXJuIGNvbnNvbGUud2Fybignc3VwZXJhZ2VudDogZG91YmxlIGNhbGxiYWNrIGJ1ZycpO1xuICB0aGlzLmNhbGxlZCA9IHRydWU7XG5cbiAgaWYgKCFlcnJvcikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVzcG9uc2VPSyhyZXMpKSB7XG4gICAgICAgIGxldCBtZXNzYWdlID0gJ1Vuc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlJztcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIG1lc3NhZ2UgPSBodHRwLlNUQVRVU19DT0RFU1tyZXMuc3RhdHVzXSB8fCBtZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIGVycm9yLnN0YXR1cyA9IHJlcyA/IHJlcy5zdGF0dXMgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3JfKSB7XG4gICAgICBlcnJvciA9IGVycm9yXztcbiAgICB9XG4gIH1cblxuICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgb3V0c2lkZSB0cnkvY2F0Y2hcbiAgLy8gdG8gYXZvaWQgZG91YmxlIGNhbGxiYWNrXG4gIGlmICghZXJyb3IpIHtcbiAgICByZXR1cm4gZm4obnVsbCwgcmVzKTtcbiAgfVxuXG4gIGVycm9yLnJlc3BvbnNlID0gcmVzO1xuICBpZiAodGhpcy5fbWF4UmV0cmllcykgZXJyb3IucmV0cmllcyA9IHRoaXMuX3JldHJpZXMgLSAxO1xuXG4gIC8vIG9ubHkgZW1pdCBlcnJvciBldmVudCBpZiB0aGVyZSBpcyBhIGxpc3RlbmVyXG4gIC8vIG90aGVyd2lzZSB3ZSBhc3N1bWUgdGhlIGNhbGxiYWNrIHRvIGAuZW5kKClgIHdpbGwgZ2V0IHRoZSBlcnJvclxuICBpZiAoZXJyb3IgJiYgdGhpcy5saXN0ZW5lcnMoJ2Vycm9yJykubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gIH1cblxuICBmbihlcnJvciwgcmVzKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBob3N0IG9iamVjdCxcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIGhvc3Qgb2JqZWN0XG4gKiBAcmV0dXJuIHtCb29sZWFufSBpcyBhIGhvc3Qgb2JqZWN0XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuUmVxdWVzdC5wcm90b3R5cGUuX2lzSG9zdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICBCdWZmZXIuaXNCdWZmZXIob2JqZWN0KSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIFN0cmVhbSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZvcm1EYXRhXG4gICk7XG59O1xuXG4vKipcbiAqIEluaXRpYXRlIHJlcXVlc3QsIGludm9raW5nIGNhbGxiYWNrIGBmbihlcnIsIHJlcylgXG4gKiB3aXRoIGFuIGluc3RhbmNlb2YgYFJlc3BvbnNlYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLl9lbWl0UmVzcG9uc2UgPSBmdW5jdGlvbiAoYm9keSwgZmlsZXMpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UodGhpcyk7XG4gIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgcmVzcG9uc2UucmVkaXJlY3RzID0gdGhpcy5fcmVkaXJlY3RMaXN0O1xuICBpZiAodW5kZWZpbmVkICE9PSBib2R5KSB7XG4gICAgcmVzcG9uc2UuYm9keSA9IGJvZHk7XG4gIH1cblxuICByZXNwb25zZS5maWxlcyA9IGZpbGVzO1xuICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgcmVzcG9uc2UucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJlbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgc28gaXQncyB0b28gbGF0ZSB0byBzdGFydCBwaXBpbmdcIlxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgdGhpcy5lbWl0KCdyZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHRoaXMucmVxdWVzdCgpO1xuICBkZWJ1ZygnJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuXG4gIGlmICh0aGlzLl9lbmRDYWxsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnLmVuZCgpIHdhcyBjYWxsZWQgdHdpY2UuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBzdXBlcmFnZW50J1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmRDYWxsZWQgPSB0cnVlO1xuXG4gIC8vIHN0b3JlIGNhbGxiYWNrXG4gIHRoaXMuX2NhbGxiYWNrID0gZm4gfHwgbm9vcDtcblxuICB0aGlzLl9lbmQoKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9hYm9ydGVkKVxuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKFxuICAgICAgbmV3IEVycm9yKCdUaGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkIGV2ZW4gYmVmb3JlIC5lbmQoKSB3YXMgY2FsbGVkJylcbiAgICApO1xuXG4gIGxldCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG4gIGNvbnN0IHsgbWV0aG9kIH0gPSB0aGlzO1xuXG4gIHRoaXMuX3NldFRpbWVvdXRzKCk7XG5cbiAgLy8gYm9keVxuICBpZiAobWV0aG9kICE9PSAnSEVBRCcgJiYgIXJlcS5faGVhZGVyU2VudCkge1xuICAgIC8vIHNlcmlhbGl6ZSBzdHVmZlxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xuICAgICAgLy8gUGFyc2Ugb3V0IGp1c3QgdGhlIGNvbnRlbnQgdHlwZSBmcm9tIHRoZSBoZWFkZXIgKGlnbm9yZSB0aGUgY2hhcnNldClcbiAgICAgIGlmIChjb250ZW50VHlwZSkgY29udGVudFR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdO1xuICAgICAgbGV0IHNlcmlhbGl6ZSA9IHRoaXMuX3NlcmlhbGl6ZXIgfHwgZXhwb3J0cy5zZXJpYWxpemVbY29udGVudFR5cGVdO1xuICAgICAgaWYgKCFzZXJpYWxpemUgJiYgaXNKU09OKGNvbnRlbnRUeXBlKSkge1xuICAgICAgICBzZXJpYWxpemUgPSBleHBvcnRzLnNlcmlhbGl6ZVsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VyaWFsaXplKSBkYXRhID0gc2VyaWFsaXplKGRhdGEpO1xuICAgIH1cblxuICAgIC8vIGNvbnRlbnQtbGVuZ3RoXG4gICAgaWYgKGRhdGEgJiYgIXJlcS5nZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpIHtcbiAgICAgIHJlcS5zZXRIZWFkZXIoXG4gICAgICAgICdDb250ZW50LUxlbmd0aCcsXG4gICAgICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEubGVuZ3RoIDogQnVmZmVyLmJ5dGVMZW5ndGgoZGF0YSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVzcG9uc2VcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgcmVxLm9uY2UoJ3Jlc3BvbnNlJywgKHJlcykgPT4ge1xuICAgIGRlYnVnKCclcyAlcyAtPiAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCwgcmVzLnN0YXR1c0NvZGUpO1xuXG4gICAgaWYgKHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBpcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5fbWF4UmVkaXJlY3RzO1xuICAgIGNvbnN0IG1pbWUgPSB1dGlscy50eXBlKHJlcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSB8fCAnJykgfHwgJ3RleHQvcGxhaW4nO1xuICAgIGxldCB0eXBlID0gbWltZS5zcGxpdCgnLycpWzBdO1xuICAgIGlmICh0eXBlKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aXBhcnQgPSB0eXBlID09PSAnbXVsdGlwYXJ0JztcbiAgICBjb25zdCByZWRpcmVjdCA9IGlzUmVkaXJlY3QocmVzLnN0YXR1c0NvZGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMuX3Jlc3BvbnNlVHlwZTtcblxuICAgIHRoaXMucmVzID0gcmVzO1xuXG4gICAgLy8gcmVkaXJlY3RcbiAgICBpZiAocmVkaXJlY3QgJiYgdGhpcy5fcmVkaXJlY3RzKysgIT09IG1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0KHJlcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB0aGlzLmNhbGxiYWNrKG51bGwsIHRoaXMuX2VtaXRSZXNwb25zZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB6bGliIHN1cHBvcnRcbiAgICBpZiAodGhpcy5fc2hvdWxkVW56aXAocmVzKSkge1xuICAgICAgdW56aXAocmVxLCByZXMpO1xuICAgIH1cblxuICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXI7XG4gICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkICYmIG1pbWUgaW4gZXhwb3J0cy5idWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IEJvb2xlYW4oZXhwb3J0cy5idWZmZXJbbWltZV0pO1xuICAgIH1cblxuICAgIGxldCBwYXJzZXIgPSB0aGlzLl9wYXJzZXI7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIHBhcnNlcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkEgY3VzdG9tIHN1cGVyYWdlbnQgcGFyc2VyIGhhcyBiZWVuIHNldCwgYnV0IGJ1ZmZlcmluZyBzdHJhdGVneSBmb3IgdGhlIHBhcnNlciBoYXNuJ3QgYmVlbiBjb25maWd1cmVkLiBDYWxsIGByZXEuYnVmZmVyKHRydWUgb3IgZmFsc2UpYCBvciBzZXQgYHN1cGVyYWdlbnQuYnVmZmVyW21pbWVdID0gdHJ1ZSBvciBmYWxzZWBcIlxuICAgICAgKTtcbiAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgIGlmIChyZXNwb25zZVR5cGUpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG11bHRpcGFydCkge1xuICAgICAgICBjb25zdCBmb3JtID0gZm9ybWlkYWJsZSgpO1xuICAgICAgICBwYXJzZXIgPSBmb3JtLnBhcnNlLmJpbmQoZm9ybSk7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGlzSW1hZ2VPclZpZGVvKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UuaW1hZ2U7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7IC8vIEZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBidWZmZXJpbmcgZGVmYXVsdCBpcyBhZC1ob2MgTUlNRS1kZXBlbmRlbnRcbiAgICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5wYXJzZVttaW1lXSkge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlW21pbWVdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS50ZXh0O1xuICAgICAgICBidWZmZXIgPSBidWZmZXIgIT09IGZhbHNlO1xuXG4gICAgICAgIC8vIGV2ZXJ5b25lIHdhbnRzIHRoZWlyIG93biB3aGl0ZS1sYWJlbGVkIGpzb25cbiAgICAgIH0gZWxzZSBpZiAoaXNKU09OKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyICE9PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAodW5kZWZpbmVkID09PSBidWZmZXIpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYnkgZGVmYXVsdCBvbmx5IGJ1ZmZlciB0ZXh0LyosIGpzb24gYW5kIG1lc3NlZCB1cCB0aGluZyBmcm9tIGhlbGxcbiAgICBpZiAoKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIGlzVGV4dChtaW1lKSkgfHwgaXNKU09OKG1pbWUpKSB7XG4gICAgICBidWZmZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc0J1ZmZlcmVkID0gYnVmZmVyO1xuICAgIGxldCBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgLy8gUHJvdGVjdGlvbmEgYWdhaW5zdCB6aXAgYm9tYnMgYW5kIG90aGVyIG51aXNhbmNlXG4gICAgICBsZXQgcmVzcG9uc2VCeXRlc0xlZnQgPSB0aGlzLl9tYXhSZXNwb25zZVNpemUgfHwgMjAwXzAwMF8wMDA7XG4gICAgICByZXMub24oJ2RhdGEnLCAoYnVmKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlQnl0ZXNMZWZ0IC09IGJ1Zi5ieXRlTGVuZ3RoIHx8IGJ1Zi5sZW5ndGggPiAwID8gYnVmLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChyZXNwb25zZUJ5dGVzTGVmdCA8IDApIHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRlIHRocm91Z2ggZXJyb3IgZXZlbnRcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignTWF4aW11bSByZXNwb25zZSBzaXplIHJlYWNoZWQnKTtcbiAgICAgICAgICBlcnJvci5jb2RlID0gJ0VUT09MQVJHRSc7XG4gICAgICAgICAgLy8gUGFyc2VycyBhcmVuJ3QgcmVxdWlyZWQgdG8gb2JzZXJ2ZSBlcnJvciBldmVudCxcbiAgICAgICAgICAvLyBzbyB3b3VsZCBpbmNvcnJlY3RseSByZXBvcnQgc3VjY2Vzc1xuICAgICAgICAgIHBhcnNlckhhbmRsZXNFbmQgPSBmYWxzZTtcbiAgICAgICAgICAvLyBXaWxsIG5vdCBlbWl0IGVycm9yIGV2ZW50XG4gICAgICAgICAgcmVzLmRlc3Ryb3koZXJyb3IpO1xuICAgICAgICAgIC8vIHNvIHdlIGRvIGNhbGxiYWNrIG5vd1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2soZXJyb3IsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VyKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBVbmJ1ZmZlcmVkIHBhcnNlcnMgYXJlIHN1cHBvc2VkIHRvIGVtaXQgcmVzcG9uc2UgZWFybHksXG4gICAgICAgIC8vIHdoaWNoIGlzIHdlaXJkIEJUVywgYmVjYXVzZSByZXNwb25zZS5ib2R5IHdvbid0IGJlIHRoZXJlLlxuICAgICAgICBwYXJzZXJIYW5kbGVzRW5kID0gYnVmZmVyO1xuXG4gICAgICAgIHBhcnNlcihyZXMsIChlcnJvciwgb2JqZWN0LCBmaWxlcykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRpbWVkb3V0KSB7XG4gICAgICAgICAgICAvLyBUaW1lb3V0IGhhcyBhbHJlYWR5IGhhbmRsZWQgYWxsIGNhbGxiYWNrc1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEludGVudGlvbmFsIChub24tdGltZW91dCkgYWJvcnQgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgcGFydGlhbCByZXNwb25zZSxcbiAgICAgICAgICAvLyBldmVuIGlmIGl0IGRvZXNuJ3QgcGFyc2UuXG4gICAgICAgICAgaWYgKGVycm9yICYmICF0aGlzLl9hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcnNlckhhbmRsZXNFbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrKG51bGwsIHRoaXMuX2VtaXRSZXNwb25zZShvYmplY3QsIGZpbGVzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IHJlcztcblxuICAgIC8vIHVuYnVmZmVyZWRcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgZGVidWcoJ3VuYnVmZmVyZWQgJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICBpZiAobXVsdGlwYXJ0KSByZXR1cm47IC8vIGFsbG93IG11bHRpcGFydCB0byBoYW5kbGUgZW5kIGV2ZW50XG4gICAgICByZXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgICBkZWJ1ZygnZW5kICVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRlcm1pbmF0aW5nIGV2ZW50c1xuICAgIHJlcy5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYWxsYmFjayhlcnJvciwgbnVsbCk7XG4gICAgfSk7XG4gICAgaWYgKCFwYXJzZXJIYW5kbGVzRW5kKVxuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZGVidWcoJ2VuZCAlcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG4gICAgICAgIC8vIFRPRE86IHVubGVzcyBidWZmZXJpbmcgZW1pdCBlYXJsaWVyIHRvIHN0cmVhbVxuICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrKG51bGwsIHRoaXMuX2VtaXRSZXNwb25zZSgpKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICB0aGlzLmVtaXQoJ3JlcXVlc3QnLCB0aGlzKTtcblxuICBjb25zdCBnZXRQcm9ncmVzc01vbml0b3IgPSAoKSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRydWU7XG4gICAgY29uc3QgdG90YWwgPSByZXEuZ2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcpO1xuICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBuZXcgU3RyZWFtLlRyYW5zZm9ybSgpO1xuICAgIHByb2dyZXNzLl90cmFuc2Zvcm0gPSAoY2h1bmssIGVuY29kaW5nLCBjYikgPT4ge1xuICAgICAgbG9hZGVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgIHRoaXMuZW1pdCgncHJvZ3Jlc3MnLCB7XG4gICAgICAgIGRpcmVjdGlvbjogJ3VwbG9hZCcsXG4gICAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICAgIGxvYWRlZCxcbiAgICAgICAgdG90YWxcbiAgICAgIH0pO1xuICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH07XG5cbiAgY29uc3QgYnVmZmVyVG9DaHVua3MgPSAoYnVmZmVyKSA9PiB7XG4gICAgY29uc3QgY2h1bmtTaXplID0gMTYgKiAxMDI0OyAvLyBkZWZhdWx0IGhpZ2hXYXRlck1hcmsgdmFsdWVcbiAgICBjb25zdCBjaHVua2luZyA9IG5ldyBTdHJlYW0uUmVhZGFibGUoKTtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgcmVtYWluZGVyID0gdG90YWxMZW5ndGggJSBjaHVua1NpemU7XG4gICAgY29uc3QgY3V0b2ZmID0gdG90YWxMZW5ndGggLSByZW1haW5kZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1dG9mZjsgaSArPSBjaHVua1NpemUpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYnVmZmVyLnNsaWNlKGksIGkgKyBjaHVua1NpemUpO1xuICAgICAgY2h1bmtpbmcucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgaWYgKHJlbWFpbmRlciA+IDApIHtcbiAgICAgIGNvbnN0IHJlbWFpbmRlckJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgtcmVtYWluZGVyKTtcbiAgICAgIGNodW5raW5nLnB1c2gocmVtYWluZGVyQnVmZmVyKTtcbiAgICB9XG5cbiAgICBjaHVua2luZy5wdXNoKG51bGwpOyAvLyBubyBtb3JlIGRhdGFcblxuICAgIHJldHVybiBjaHVua2luZztcbiAgfTtcblxuICAvLyBpZiBhIEZvcm1EYXRhIGluc3RhbmNlIGdvdCBjcmVhdGVkLCB0aGVuIHdlIHNlbmQgdGhhdCBhcyB0aGUgcmVxdWVzdCBib2R5XG4gIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5fZm9ybURhdGE7XG4gIGlmIChmb3JtRGF0YSkge1xuICAgIC8vIHNldCBoZWFkZXJzXG4gICAgY29uc3QgaGVhZGVycyA9IGZvcm1EYXRhLmdldEhlYWRlcnMoKTtcbiAgICBmb3IgKGNvbnN0IGkgaW4gaGVhZGVycykge1xuICAgICAgaWYgKGhhc093bihoZWFkZXJzLCBpKSkge1xuICAgICAgICBkZWJ1Zygnc2V0dGluZyBGb3JtRGF0YSBoZWFkZXI6IFwiJXM6ICVzXCInLCBpLCBoZWFkZXJzW2ldKTtcbiAgICAgICAgcmVxLnNldEhlYWRlcihpLCBoZWFkZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdHRlbXB0IHRvIGdldCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyXG4gICAgZm9ybURhdGEuZ2V0TGVuZ3RoKChlcnJvciwgbGVuZ3RoKSA9PiB7XG4gICAgICAvLyBUT0RPOiBBZGQgY2h1bmtlZCBlbmNvZGluZyB3aGVuIG5vIGxlbmd0aCAoaWYgZXJyKVxuICAgICAgaWYgKGVycm9yKSBkZWJ1ZygnZm9ybURhdGEuZ2V0TGVuZ3RoIGhhZCBlcnJvcicsIGVycm9yLCBsZW5ndGgpO1xuXG4gICAgICBkZWJ1ZygnZ290IEZvcm1EYXRhIENvbnRlbnQtTGVuZ3RoOiAlcycsIGxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmVxLnNldEhlYWRlcignQ29udGVudC1MZW5ndGgnLCBsZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBmb3JtRGF0YS5waXBlKGdldFByb2dyZXNzTW9uaXRvcigpKS5waXBlKHJlcSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgYnVmZmVyVG9DaHVua3MoZGF0YSkucGlwZShnZXRQcm9ncmVzc01vbml0b3IoKSkucGlwZShyZXEpO1xuICB9IGVsc2Uge1xuICAgIHJlcS5lbmQoZGF0YSk7XG4gIH1cbn07XG5cbi8vIENoZWNrIHdoZXRoZXIgcmVzcG9uc2UgaGFzIGEgbm9uLTAtc2l6ZWQgZ3ppcC1lbmNvZGVkIGJvZHlcblJlcXVlc3QucHJvdG90eXBlLl9zaG91bGRVbnppcCA9IChyZXMpID0+IHtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDQgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNCkge1xuICAgIC8vIFRoZXNlIGFyZW4ndCBzdXBwb3NlZCB0byBoYXZlIGFueSBib2R5XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaGVhZGVyIGNvbnRlbnQgaXMgYSBzdHJpbmcsIGFuZCBkaXN0aW5jdGlvbiBiZXR3ZWVuIDAgYW5kIG5vIGluZm9ybWF0aW9uIGlzIGNydWNpYWxcbiAgaWYgKHJlcy5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddID09PSAnMCcpIHtcbiAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGJvZHkgaXMgZW1wdHkgKHVuZm9ydHVuYXRlbHksIHRoaXMgY2hlY2sgZG9lcyBub3QgY292ZXIgY2h1bmtlZCBlbmNvZGluZylcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjb25zb2xlLmxvZyhyZXMpO1xuICByZXR1cm4gL15cXHMqKD86ZGVmbGF0ZXxnemlwKVxccyokLy50ZXN0KHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pO1xufTtcblxuLyoqXG4gKiBPdmVycmlkZXMgRE5TIGZvciBzZWxlY3RlZCBob3N0bmFtZXMuIFRha2VzIG9iamVjdCBtYXBwaW5nIGhvc3RuYW1lcyB0byBJUCBhZGRyZXNzZXMuXG4gKlxuICogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IHRvIGEgVVJMIHdpdGggYSBob3N0bmFtZSBleGFjdGx5IG1hdGNoaW5nIGEga2V5IGluIHRoZSBvYmplY3QsXG4gKiB1c2UgdGhlIGdpdmVuIElQIGFkZHJlc3MgdG8gY29ubmVjdCwgaW5zdGVhZCBvZiB1c2luZyBETlMgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUuXG4gKlxuICogQSBzcGVjaWFsIGhvc3QgYCpgIG1hdGNoZXMgZXZlcnkgaG9zdG5hbWUgKGtlZXAgcmVkaXJlY3RzIGluIG1pbmQhKVxuICpcbiAqICAgICAgcmVxdWVzdC5jb25uZWN0KHtcbiAqICAgICAgICAndGVzdC5leGFtcGxlLmNvbSc6ICcxMjcuMC4wLjEnLFxuICogICAgICAgICdpcHY2LmV4YW1wbGUuY29tJzogJzo6MScsXG4gKiAgICAgIH0pXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoY29ubmVjdE92ZXJyaWRlKSB7XG4gIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IHsgJyonOiBjb25uZWN0T3ZlcnJpZGUgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IGNvbm5lY3RPdmVycmlkZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jb25uZWN0T3ZlcnJpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnRydXN0TG9jYWxob3N0ID0gZnVuY3Rpb24gKHRvZ2dsZSkge1xuICB0aGlzLl90cnVzdExvY2FsaG9zdCA9IHRvZ2dsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRvZ2dsZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBnZW5lcmF0ZSBIVFRQIHZlcmIgbWV0aG9kc1xuaWYgKCFtZXRob2RzLmluY2x1ZGVzKCdkZWwnKSkge1xuICAvLyBjcmVhdGUgYSBjb3B5IHNvIHdlIGRvbid0IGNhdXNlIGNvbmZsaWN0cyB3aXRoXG4gIC8vIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBtZXRob2RzIHBhY2thZ2UgYW5kXG4gIC8vIG5wbSAzLnhcbiAgbWV0aG9kcyA9IFsuLi5tZXRob2RzXTtcbiAgbWV0aG9kcy5wdXNoKCdkZWwnKTtcbn1cblxuZm9yIChsZXQgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbmFtZSA9IG1ldGhvZDtcbiAgbWV0aG9kID0gbWV0aG9kID09PSAnZGVsJyA/ICdkZWxldGUnIDogbWV0aG9kO1xuXG4gIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICByZXF1ZXN0W25hbWVdID0gKHVybCwgZGF0YSwgZm4pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0XyA9IHJlcXVlc3QobWV0aG9kLCB1cmwpO1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBkYXRhO1xuICAgICAgZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICAgIHJlcXVlc3RfLnF1ZXJ5KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdF8uc2VuZChkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm4pIHJlcXVlc3RfLmVuZChmbik7XG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyB0ZXh0IGFuZCBzaG91bGQgYmUgYnVmZmVyZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGlzVGV4dChtaW1lKSB7XG4gIGNvbnN0IHBhcnRzID0gbWltZS5zcGxpdCgnLycpO1xuICBsZXQgdHlwZSA9IHBhcnRzWzBdO1xuICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIGxldCBzdWJ0eXBlID0gcGFydHNbMV07XG4gIGlmIChzdWJ0eXBlKSBzdWJ0eXBlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICByZXR1cm4gdHlwZSA9PT0gJ3RleHQnIHx8IHN1YnR5cGUgPT09ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnO1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlT3JWaWRlbyhtaW1lKSB7XG4gIGxldCB0eXBlID0gbWltZS5zcGxpdCgnLycpWzBdO1xuICBpZiAodHlwZSkgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgcmV0dXJuIHR5cGUgPT09ICdpbWFnZScgfHwgdHlwZSA9PT0gJ3ZpZGVvJztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgbWltZWAgaXMganNvbiBvciBoYXMgK2pzb24gc3RydWN0dXJlZCBzeW50YXggc3VmZml4LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtaW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNKU09OKG1pbWUpIHtcbiAgLy8gc2hvdWxkIG1hdGNoIC9qc29uIG9yICtqc29uXG4gIC8vIGJ1dCBub3QgL2pzb24tc2VxXG4gIHJldHVybiAvWy8rXWpzb24oJHxbXi1cXHddKS9pLnRlc3QobWltZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgd2Ugc2hvdWxkIGZvbGxvdyB0aGUgcmVkaXJlY3QgYGNvZGVgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaXNSZWRpcmVjdChjb2RlKSB7XG4gIHJldHVybiBbMzAxLCAzMDIsIDMwMywgMzA1LCAzMDcsIDMwOF0uaW5jbHVkZXMoY29kZSk7XG59XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/parsers/image.js b/build/node_modules/superagent/lib/node/parsers/image.js index b3fadd9a..486c6362 100644 --- a/build/node_modules/superagent/lib/node/parsers/image.js +++ b/build/node_modules/superagent/lib/node/parsers/image.js @@ -1,12 +1,13 @@ -'use strict'; +"use strict"; -module.exports = (res, fn) => { - const data = []; // Binary data needs binary storage +module.exports = function (res, fn) { + var data = []; // Binary data needs binary storage - res.on('data', chunk => { + res.on('data', function (chunk) { data.push(chunk); }); - res.on('end', () => { + res.on('end', function () { fn(null, Buffer.concat(data)); }); }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvaW1hZ2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInJlcyIsImZuIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJwdXNoIiwiQnVmZmVyIiwiY29uY2F0Il0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBQ0MsR0FBRCxFQUFNQyxFQUFOLEVBQWE7QUFDNUIsTUFBTUMsSUFBSSxHQUFHLEVBQWIsQ0FENEIsQ0FDWDs7QUFFakJGLEVBQUFBLEdBQUcsQ0FBQ0csRUFBSixDQUFPLE1BQVAsRUFBZSxVQUFDQyxLQUFELEVBQVc7QUFDeEJGLElBQUFBLElBQUksQ0FBQ0csSUFBTCxDQUFVRCxLQUFWO0FBQ0QsR0FGRDtBQUdBSixFQUFBQSxHQUFHLENBQUNHLEVBQUosQ0FBTyxLQUFQLEVBQWMsWUFBTTtBQUNsQkYsSUFBQUEsRUFBRSxDQUFDLElBQUQsRUFBT0ssTUFBTSxDQUFDQyxNQUFQLENBQWNMLElBQWQsQ0FBUCxDQUFGO0FBQ0QsR0FGRDtBQUdELENBVEQiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IChyZXMsIGZuKSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBbXTsgLy8gQmluYXJ5IGRhdGEgbmVlZHMgYmluYXJ5IHN0b3JhZ2VcblxuICByZXMub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBkYXRhLnB1c2goY2h1bmspO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgZm4obnVsbCwgQnVmZmVyLmNvbmNhdChkYXRhKSk7XG4gIH0pO1xufTtcbiJdfQ== \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/parsers/index.js b/build/node_modules/superagent/lib/node/parsers/index.js index 8be68ca3..f08a9f44 100644 --- a/build/node_modules/superagent/lib/node/parsers/index.js +++ b/build/node_modules/superagent/lib/node/parsers/index.js @@ -1,10 +1,12 @@ -'use strict'; +"use strict"; exports['application/x-www-form-urlencoded'] = require('./urlencoded'); exports['application/json'] = require('./json'); exports.text = require('./text'); -const binary = require('./image'); +var binary = require('./image'); + exports['application/octet-stream'] = binary; exports['application/pdf'] = binary; exports.image = binary; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvaW5kZXguanMiXSwibmFtZXMiOlsiZXhwb3J0cyIsInJlcXVpcmUiLCJ0ZXh0IiwiYmluYXJ5IiwiaW1hZ2UiXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQU8sQ0FBQyxtQ0FBRCxDQUFQLEdBQStDQyxPQUFPLENBQUMsY0FBRCxDQUF0RDtBQUNBRCxPQUFPLENBQUMsa0JBQUQsQ0FBUCxHQUE4QkMsT0FBTyxDQUFDLFFBQUQsQ0FBckM7QUFDQUQsT0FBTyxDQUFDRSxJQUFSLEdBQWVELE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUVBLElBQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFNBQUQsQ0FBdEI7O0FBRUFELE9BQU8sQ0FBQywwQkFBRCxDQUFQLEdBQXNDRyxNQUF0QztBQUNBSCxPQUFPLENBQUMsaUJBQUQsQ0FBUCxHQUE2QkcsTUFBN0I7QUFDQUgsT0FBTyxDQUFDSSxLQUFSLEdBQWdCRCxNQUFoQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHNbJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCddID0gcmVxdWlyZSgnLi91cmxlbmNvZGVkJyk7XG5leHBvcnRzWydhcHBsaWNhdGlvbi9qc29uJ10gPSByZXF1aXJlKCcuL2pzb24nKTtcbmV4cG9ydHMudGV4dCA9IHJlcXVpcmUoJy4vdGV4dCcpO1xuXG5jb25zdCBiaW5hcnkgPSByZXF1aXJlKCcuL2ltYWdlJyk7XG5cbmV4cG9ydHNbJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSddID0gYmluYXJ5O1xuZXhwb3J0c1snYXBwbGljYXRpb24vcGRmJ10gPSBiaW5hcnk7XG5leHBvcnRzLmltYWdlID0gYmluYXJ5O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/parsers/json.js b/build/node_modules/superagent/lib/node/parsers/json.js index 05899428..b99bb20f 100644 --- a/build/node_modules/superagent/lib/node/parsers/json.js +++ b/build/node_modules/superagent/lib/node/parsers/json.js @@ -1,22 +1,26 @@ -'use strict'; +"use strict"; -module.exports = function parseJSON(res, fn){ +module.exports = function (res, fn) { res.text = ''; res.setEncoding('utf8'); - res.on('data', chunk => { + res.on('data', function (chunk) { res.text += chunk; }); - res.on('end', () => { + res.on('end', function () { + var body; + var error; + try { - var body = res.text && JSON.parse(res.text); - } catch (e) { - var err = e; - // issue #675: return the raw response if the response parsing fails - err.rawResponse = res.text || null; - // issue #876: return the http status code if the response parsing fails - err.statusCode = res.statusCode; + body = res.text && JSON.parse(res.text); + } catch (error_) { + error = error_; // issue #675: return the raw response if the response parsing fails + + error.rawResponse = res.text || null; // issue #876: return the http status code if the response parsing fails + + error.statusCode = res.statusCode; } finally { - fn(err, body); + fn(error, body); } }); }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvanNvbi5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwiYm9keSIsImVycm9yIiwiSlNPTiIsInBhcnNlIiwiZXJyb3JfIiwicmF3UmVzcG9uc2UiLCJzdGF0dXNDb2RlIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBVUMsR0FBVixFQUFlQyxFQUFmLEVBQW1CO0FBQ2xDRCxFQUFBQSxHQUFHLENBQUNFLElBQUosR0FBVyxFQUFYO0FBQ0FGLEVBQUFBLEdBQUcsQ0FBQ0csV0FBSixDQUFnQixNQUFoQjtBQUNBSCxFQUFBQSxHQUFHLENBQUNJLEVBQUosQ0FBTyxNQUFQLEVBQWUsVUFBQ0MsS0FBRCxFQUFXO0FBQ3hCTCxJQUFBQSxHQUFHLENBQUNFLElBQUosSUFBWUcsS0FBWjtBQUNELEdBRkQ7QUFHQUwsRUFBQUEsR0FBRyxDQUFDSSxFQUFKLENBQU8sS0FBUCxFQUFjLFlBQU07QUFDbEIsUUFBSUUsSUFBSjtBQUNBLFFBQUlDLEtBQUo7O0FBQ0EsUUFBSTtBQUNGRCxNQUFBQSxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0UsSUFBSixJQUFZTSxJQUFJLENBQUNDLEtBQUwsQ0FBV1QsR0FBRyxDQUFDRSxJQUFmLENBQW5CO0FBQ0QsS0FGRCxDQUVFLE9BQU9RLE1BQVAsRUFBZTtBQUNmSCxNQUFBQSxLQUFLLEdBQUdHLE1BQVIsQ0FEZSxDQUVmOztBQUNBSCxNQUFBQSxLQUFLLENBQUNJLFdBQU4sR0FBb0JYLEdBQUcsQ0FBQ0UsSUFBSixJQUFZLElBQWhDLENBSGUsQ0FJZjs7QUFDQUssTUFBQUEsS0FBSyxDQUFDSyxVQUFOLEdBQW1CWixHQUFHLENBQUNZLFVBQXZCO0FBQ0QsS0FSRCxTQVFVO0FBQ1JYLE1BQUFBLEVBQUUsQ0FBQ00sS0FBRCxFQUFRRCxJQUFSLENBQUY7QUFDRDtBQUNGLEdBZEQ7QUFlRCxDQXJCRCIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcywgZm4pIHtcbiAgcmVzLnRleHQgPSAnJztcbiAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgbGV0IGJvZHk7XG4gICAgbGV0IGVycm9yO1xuICAgIHRyeSB7XG4gICAgICBib2R5ID0gcmVzLnRleHQgJiYgSlNPTi5wYXJzZShyZXMudGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyb3JfKSB7XG4gICAgICBlcnJvciA9IGVycm9yXztcbiAgICAgIC8vIGlzc3VlICM2NzU6IHJldHVybiB0aGUgcmF3IHJlc3BvbnNlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBlcnJvci5yYXdSZXNwb25zZSA9IHJlcy50ZXh0IHx8IG51bGw7XG4gICAgICAvLyBpc3N1ZSAjODc2OiByZXR1cm4gdGhlIGh0dHAgc3RhdHVzIGNvZGUgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZm4oZXJyb3IsIGJvZHkpO1xuICAgIH1cbiAgfSk7XG59O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/parsers/text.js b/build/node_modules/superagent/lib/node/parsers/text.js index 12daaa1c..4a92786b 100644 --- a/build/node_modules/superagent/lib/node/parsers/text.js +++ b/build/node_modules/superagent/lib/node/parsers/text.js @@ -1,10 +1,11 @@ -'use strict'; +"use strict"; -module.exports = function(res, fn){ +module.exports = function (res, fn) { res.text = ''; res.setEncoding('utf8'); - res.on('data', chunk => { + res.on('data', function (chunk) { res.text += chunk; }); res.on('end', fn); }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvdGV4dC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBQ0MsR0FBRCxFQUFNQyxFQUFOLEVBQWE7QUFDNUJELEVBQUFBLEdBQUcsQ0FBQ0UsSUFBSixHQUFXLEVBQVg7QUFDQUYsRUFBQUEsR0FBRyxDQUFDRyxXQUFKLENBQWdCLE1BQWhCO0FBQ0FILEVBQUFBLEdBQUcsQ0FBQ0ksRUFBSixDQUFPLE1BQVAsRUFBZSxVQUFDQyxLQUFELEVBQVc7QUFDeEJMLElBQUFBLEdBQUcsQ0FBQ0UsSUFBSixJQUFZRyxLQUFaO0FBQ0QsR0FGRDtBQUdBTCxFQUFBQSxHQUFHLENBQUNJLEVBQUosQ0FBTyxLQUFQLEVBQWNILEVBQWQ7QUFDRCxDQVBEIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAocmVzLCBmbikgPT4ge1xuICByZXMudGV4dCA9ICcnO1xuICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgcmVzLnRleHQgKz0gY2h1bms7XG4gIH0pO1xuICByZXMub24oJ2VuZCcsIGZuKTtcbn07XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/parsers/urlencoded.js b/build/node_modules/superagent/lib/node/parsers/urlencoded.js index 38396ee0..3e711389 100644 --- a/build/node_modules/superagent/lib/node/parsers/urlencoded.js +++ b/build/node_modules/superagent/lib/node/parsers/urlencoded.js @@ -1,18 +1,17 @@ -'use strict'; +"use strict"; /** * Module dependencies. */ +var qs = require('qs'); -const qs = require('qs'); - -module.exports = function(res, fn){ +module.exports = function (res, fn) { res.text = ''; res.setEncoding('ascii'); - res.on('data', chunk => { + res.on('data', function (chunk) { res.text += chunk; }); - res.on('end', () => { + res.on('end', function () { try { fn(null, qs.parse(res.text)); } catch (err) { @@ -20,3 +19,4 @@ module.exports = function(res, fn){ } }); }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3BhcnNlcnMvdXJsZW5jb2RlZC5qcyJdLCJuYW1lcyI6WyJxcyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwicGFyc2UiLCJlcnIiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBRUEsSUFBTUEsRUFBRSxHQUFHQyxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFVBQUNDLEdBQUQsRUFBTUMsRUFBTixFQUFhO0FBQzVCRCxFQUFBQSxHQUFHLENBQUNFLElBQUosR0FBVyxFQUFYO0FBQ0FGLEVBQUFBLEdBQUcsQ0FBQ0csV0FBSixDQUFnQixPQUFoQjtBQUNBSCxFQUFBQSxHQUFHLENBQUNJLEVBQUosQ0FBTyxNQUFQLEVBQWUsVUFBQ0MsS0FBRCxFQUFXO0FBQ3hCTCxJQUFBQSxHQUFHLENBQUNFLElBQUosSUFBWUcsS0FBWjtBQUNELEdBRkQ7QUFHQUwsRUFBQUEsR0FBRyxDQUFDSSxFQUFKLENBQU8sS0FBUCxFQUFjLFlBQU07QUFDbEIsUUFBSTtBQUNGSCxNQUFBQSxFQUFFLENBQUMsSUFBRCxFQUFPTCxFQUFFLENBQUNVLEtBQUgsQ0FBU04sR0FBRyxDQUFDRSxJQUFiLENBQVAsQ0FBRjtBQUNELEtBRkQsQ0FFRSxPQUFPSyxHQUFQLEVBQVk7QUFDWk4sTUFBQUEsRUFBRSxDQUFDTSxHQUFELENBQUY7QUFDRDtBQUNGLEdBTkQ7QUFPRCxDQWJEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHFzID0gcmVxdWlyZSgncXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAocmVzLCBmbikgPT4ge1xuICByZXMudGV4dCA9ICcnO1xuICByZXMuc2V0RW5jb2RpbmcoJ2FzY2lpJyk7XG4gIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIHJlcy50ZXh0ICs9IGNodW5rO1xuICB9KTtcbiAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKG51bGwsIHFzLnBhcnNlKHJlcy50ZXh0KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbihlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/response.js b/build/node_modules/superagent/lib/node/response.js index 8a1bac93..8baf6bdb 100644 --- a/build/node_modules/superagent/lib/node/response.js +++ b/build/node_modules/superagent/lib/node/response.js @@ -1,19 +1,22 @@ -'use strict'; +"use strict"; /** * Module dependencies. */ +var util = require('util'); -const util = require('util'); -const Stream = require('stream'); -const ResponseBase = require('../response-base'); +var Stream = require('stream'); +var ResponseBase = require('../response-base'); + +var _require = require('../utils'), + mixin = _require.mixin; /** * Expose `Response`. */ -module.exports = Response; +module.exports = Response; /** * Initialize a new `Response` with the given `xhr`. * @@ -28,56 +31,68 @@ module.exports = Response; * @api private */ -function Response(req) { +function Response(request) { Stream.call(this); - const res = (this.res = req.res); - this.request = req; - this.req = req.req; + this.res = request.res; + var res = this.res; + this.request = request; + this.req = request.req; this.text = res.text; - this.body = res.body !== undefined ? res.body : {}; this.files = res.files || {}; - this.buffered = 'string' == typeof this.text; - this.header = this.headers = res.headers; + this.buffered = request._resBuffered; + this.headers = res.headers; + this.header = this.headers; + this._setStatusProperties(res.statusCode); + this._setHeaderProperties(this.header); + this.setEncoding = res.setEncoding.bind(res); res.on('data', this.emit.bind(this, 'data')); res.on('end', this.emit.bind(this, 'end')); res.on('close', this.emit.bind(this, 'close')); res.on('error', this.emit.bind(this, 'error')); -} - +} // Lazy access res.body. +// https://github.com/nodejs/node/pull/39520#issuecomment-889697136 + + +Object.defineProperty(Response.prototype, 'body', { + get: function get() { + return this._body !== undefined ? this._body : this.res.body !== undefined ? this.res.body : {}; + }, + set: function set(value) { + this._body = value; + } +}); /** * Inherit from `Stream`. */ util.inherits(Response, Stream); -ResponseBase(Response.prototype); - +mixin(Response.prototype, ResponseBase.prototype); /** * Implements methods of a `ReadableStream` */ -Response.prototype.destroy = function(err){ - this.res.destroy(err); +Response.prototype.destroy = function (error) { + this.res.destroy(error); }; - /** * Pause. */ -Response.prototype.pause = function(){ + +Response.prototype.pause = function () { this.res.pause(); }; - /** * Resume. */ -Response.prototype.resume = function(){ + +Response.prototype.resume = function () { this.res.resume(); }; - /** * Return an `Error` representative of this response. * @@ -85,27 +100,24 @@ Response.prototype.resume = function(){ * @api public */ -Response.prototype.toError = function() { - const req = this.req; - const method = req.method; - const path = req.path; - const msg = `cannot ${method} ${path} (${this.status})`; - const err = new Error(msg); - err.status = this.status; - err.text = this.text; - err.method = method; - err.path = path; - - return err; +Response.prototype.toError = function () { + var req = this.req; + var method = req.method; + var path = req.path; + var message = "cannot ".concat(method, " ").concat(path, " (").concat(this.status, ")"); + var error = new Error(message); + error.status = this.status; + error.text = this.text; + error.method = method; + error.path = path; + return error; }; - -Response.prototype.setStatusProperties = function(status){ - console.warn("In superagent 2.x setStatusProperties is a private method"); +Response.prototype.setStatusProperties = function (status) { + console.warn('In superagent 2.x setStatusProperties is a private method'); return this._setStatusProperties(status); }; - /** * To json. * @@ -113,11 +125,13 @@ Response.prototype.setStatusProperties = function(status){ * @api public */ -Response.prototype.toJSON = function() { + +Response.prototype.toJSON = function () { return { req: this.request.toJSON(), header: this.header, status: this.status, - text: this.text, + text: this.text }; }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3Jlc3BvbnNlLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiU3RyZWFtIiwiUmVzcG9uc2VCYXNlIiwibWl4aW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2UiLCJyZXF1ZXN0IiwiY2FsbCIsInJlcyIsInJlcSIsInRleHQiLCJmaWxlcyIsImJ1ZmZlcmVkIiwiX3Jlc0J1ZmZlcmVkIiwiaGVhZGVycyIsImhlYWRlciIsIl9zZXRTdGF0dXNQcm9wZXJ0aWVzIiwic3RhdHVzQ29kZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwic2V0RW5jb2RpbmciLCJiaW5kIiwib24iLCJlbWl0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm90b3R5cGUiLCJnZXQiLCJfYm9keSIsInVuZGVmaW5lZCIsImJvZHkiLCJzZXQiLCJ2YWx1ZSIsImluaGVyaXRzIiwiZGVzdHJveSIsImVycm9yIiwicGF1c2UiLCJyZXN1bWUiLCJ0b0Vycm9yIiwibWV0aG9kIiwicGF0aCIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJFcnJvciIsInNldFN0YXR1c1Byb3BlcnRpZXMiLCJjb25zb2xlIiwid2FybiIsInRvSlNPTiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQU1DLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsSUFBTUUsWUFBWSxHQUFHRixPQUFPLENBQUMsa0JBQUQsQ0FBNUI7O0FBQ0EsZUFBa0JBLE9BQU8sQ0FBQyxVQUFELENBQXpCO0FBQUEsSUFBUUcsS0FBUixZQUFRQSxLQUFSO0FBRUE7QUFDQTtBQUNBOzs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQyxRQUFqQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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ZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgUmVzcG9uc2VCYXNlID0gcmVxdWlyZSgnLi4vcmVzcG9uc2UtYmFzZScpO1xuY29uc3QgeyBtaXhpbiB9ID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge1N0cmVhbX1cbiAqIEBpbXBsZW1lbnRzIHtSZWFkYWJsZVN0cmVhbX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlKHJlcXVlc3QpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIHRoaXMucmVzID0gcmVxdWVzdC5yZXM7XG4gIGNvbnN0IHsgcmVzIH0gPSB0aGlzO1xuICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB0aGlzLnJlcSA9IHJlcXVlc3QucmVxO1xuICB0aGlzLnRleHQgPSByZXMudGV4dDtcbiAgdGhpcy5maWxlcyA9IHJlcy5maWxlcyB8fCB7fTtcbiAgdGhpcy5idWZmZXJlZCA9IHJlcXVlc3QuX3Jlc0J1ZmZlcmVkO1xuICB0aGlzLmhlYWRlcnMgPSByZXMuaGVhZGVycztcbiAgdGhpcy5oZWFkZXIgPSB0aGlzLmhlYWRlcnM7XG4gIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMocmVzLnN0YXR1c0NvZGUpO1xuICB0aGlzLl9zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5zZXRFbmNvZGluZyA9IHJlcy5zZXRFbmNvZGluZy5iaW5kKHJlcyk7XG4gIHJlcy5vbignZGF0YScsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdkYXRhJykpO1xuICByZXMub24oJ2VuZCcsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlbmQnKSk7XG4gIHJlcy5vbignY2xvc2UnLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnY2xvc2UnKSk7XG4gIHJlcy5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKSk7XG59XG5cbi8vIExhenkgYWNjZXNzIHJlcy5ib2R5LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzk1MjAjaXNzdWVjb21tZW50LTg4OTY5NzEzNlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgJ2JvZHknLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMuX2JvZHlcbiAgICAgIDogdGhpcy5yZXMuYm9keSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucmVzLmJvZHlcbiAgICAgIDoge307XG4gIH0sXG4gIHNldCh2YWx1ZSkge1xuICAgIHRoaXMuX2JvZHkgPSB2YWx1ZTtcbiAgfVxufSk7XG5cbi8qKlxuICogSW5oZXJpdCBmcm9tIGBTdHJlYW1gLlxuICovXG5cbnV0aWwuaW5oZXJpdHMoUmVzcG9uc2UsIFN0cmVhbSk7XG5cbm1peGluKFJlc3BvbnNlLnByb3RvdHlwZSwgUmVzcG9uc2VCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBtZXRob2RzIG9mIGEgYFJlYWRhYmxlU3RyZWFtYFxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIHRoaXMucmVzLmRlc3Ryb3koZXJyb3IpO1xufTtcblxuLyoqXG4gKiBQYXVzZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVzLnBhdXNlKCk7XG59O1xuXG4vKipcbiAqIFJlc3VtZS5cbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlcy5yZXN1bWUoKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIGFuIGBFcnJvcmAgcmVwcmVzZW50YXRpdmUgb2YgdGhpcyByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJuIHtFcnJvcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gcmVxO1xuICBjb25zdCB7IHBhdGggfSA9IHJlcTtcblxuICBjb25zdCBtZXNzYWdlID0gYGNhbm5vdCAke21ldGhvZH0gJHtwYXRofSAoJHt0aGlzLnN0YXR1c30pYDtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGVycm9yLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICBlcnJvci50ZXh0ID0gdGhpcy50ZXh0O1xuICBlcnJvci5tZXRob2QgPSBtZXRob2Q7XG4gIGVycm9yLnBhdGggPSBwYXRoO1xuXG4gIHJldHVybiBlcnJvcjtcbn07XG5cblJlc3BvbnNlLnByb3RvdHlwZS5zZXRTdGF0dXNQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICBjb25zb2xlLndhcm4oJ0luIHN1cGVyYWdlbnQgMi54IHNldFN0YXR1c1Byb3BlcnRpZXMgaXMgYSBwcml2YXRlIG1ldGhvZCcpO1xuICByZXR1cm4gdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhzdGF0dXMpO1xufTtcblxuLyoqXG4gKiBUbyBqc29uLlxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICByZXE6IHRoaXMucmVxdWVzdC50b0pTT04oKSxcbiAgICBoZWFkZXI6IHRoaXMuaGVhZGVyLFxuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgdGV4dDogdGhpcy50ZXh0XG4gIH07XG59O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/node/unzip.js b/build/node_modules/superagent/lib/node/unzip.js index e63e5ca3..9140d10b 100644 --- a/build/node_modules/superagent/lib/node/unzip.js +++ b/build/node_modules/superagent/lib/node/unzip.js @@ -1,13 +1,14 @@ -'use strict'; +"use strict"; /** * Module dependencies. */ +var _require = require('string_decoder'), + StringDecoder = _require.StringDecoder; -const StringDecoder = require('string_decoder').StringDecoder; -const Stream = require('stream'); -const zlib = require('zlib'); +var Stream = require('stream'); +var zlib = require('zlib'); /** * Buffers response data events and re-emits when they're unzipped. * @@ -16,56 +17,56 @@ const zlib = require('zlib'); * @api private */ -exports.unzip = (req, res) => { - const unzip = zlib.createUnzip(); - const stream = new Stream(); - let decoder; - // make node responseOnEnd() happy - stream.req = req; +exports.unzip = function (request, res) { + var unzip = zlib.createUnzip(); + var stream = new Stream(); + var decoder; // make node responseOnEnd() happy - unzip.on('error', err => { - if (err && err.code === 'Z_BUF_ERROR') { + stream.req = request; + unzip.on('error', function (error) { + if (error && error.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } - stream.emit('error', err); - }); - // pipe to unzip - res.pipe(unzip); + stream.emit('error', error); + }); // pipe to unzip + + res.pipe(unzip); // override `setEncoding` to capture encoding - // override `setEncoding` to capture encoding - res.setEncoding = type => { + res.setEncoding = function (type) { decoder = new StringDecoder(type); - }; + }; // decode upon decompressing with captured encoding - // decode upon decompressing with captured encoding - unzip.on('data', buf => { + + unzip.on('data', function (buf) { if (decoder) { - const str = decoder.write(buf); - if (str.length) stream.emit('data', str); + var string_ = decoder.write(buf); + if (string_.length > 0) stream.emit('data', string_); } else { stream.emit('data', buf); } }); - - unzip.on('end', () => { + unzip.on('end', function () { stream.emit('end'); - }); + }); // override `on` to capture data listeners + + var _on = res.on; + + res.on = function (type, fn) { + if (type === 'data' || type === 'end') { + stream.on(type, fn.bind(res)); + } else if (type === 'error') { + stream.on(type, fn.bind(res)); - // override `on` to capture data listeners - const _on = res.on; - res.on = function(type, fn) { - if ('data' == type || 'end' == type) { - stream.on(type, fn); - } else if ('error' == type) { - stream.on(type, fn); _on.call(res, type, fn); } else { _on.call(res, type, fn); } + return this; }; }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3VuemlwLmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJTdHJpbmdEZWNvZGVyIiwiU3RyZWFtIiwiemxpYiIsImV4cG9ydHMiLCJ1bnppcCIsInJlcXVlc3QiLCJyZXMiLCJjcmVhdGVVbnppcCIsInN0cmVhbSIsImRlY29kZXIiLCJyZXEiLCJvbiIsImVycm9yIiwiY29kZSIsImVtaXQiLCJwaXBlIiwic2V0RW5jb2RpbmciLCJ0eXBlIiwiYnVmIiwic3RyaW5nXyIsIndyaXRlIiwibGVuZ3RoIiwiX29uIiwiZm4iLCJiaW5kIiwiY2FsbCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxlQUEwQkEsT0FBTyxDQUFDLGdCQUFELENBQWpDO0FBQUEsSUFBUUMsYUFBUixZQUFRQSxhQUFSOztBQUNBLElBQU1DLE1BQU0sR0FBR0YsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsSUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBRCxDQUFwQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQUksT0FBTyxDQUFDQyxLQUFSLEdBQWdCLFVBQUNDLE9BQUQsRUFBVUMsR0FBVixFQUFrQjtBQUNoQyxNQUFNRixLQUFLLEdBQUdGLElBQUksQ0FBQ0ssV0FBTCxFQUFkO0FBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlQLE1BQUosRUFBZjtBQUNBLE1BQUlRLE9BQUosQ0FIZ0MsQ0FLaEM7O0FBQ0FELEVBQUFBLE1BQU0sQ0FBQ0UsR0FBUCxHQUFhTCxPQUFiO0FBRUFELEVBQUFBLEtBQUssQ0FBQ08sRUFBTixDQUFTLE9BQVQsRUFBa0IsVUFBQ0MsS0FBRCxFQUFXO0FBQzNCLFFBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDQyxJQUFOLEtBQWUsYUFBNUIsRUFBMkM7QUFDekM7QUFDQUwsTUFBQUEsTUFBTSxDQUFDTSxJQUFQLENBQVksS0FBWjtBQUNBO0FBQ0Q7O0FBRUROLElBQUFBLE1BQU0sQ0FBQ00sSUFBUCxDQUFZLE9BQVosRUFBcUJGLEtBQXJCO0FBQ0QsR0FSRCxFQVJnQyxDQWtCaEM7O0FBQ0FOLEVBQUFBLEdBQUcsQ0FBQ1MsSUFBSixDQUFTWCxLQUFULEVBbkJnQyxDQXFCaEM7O0FBQ0FFLEVBQUFBLEdBQUcsQ0FBQ1UsV0FBSixHQUFrQixVQUFDQyxJQUFELEVBQVU7QUFDMUJSLElBQUFBLE9BQU8sR0FBRyxJQUFJVCxhQUFKLENBQWtCaUIsSUFBbEIsQ0FBVjtBQUNELEdBRkQsQ0F0QmdDLENBMEJoQzs7O0FBQ0FiLEVBQUFBLEtBQUssQ0FBQ08sRUFBTixDQUFTLE1BQVQsRUFBaUIsVUFBQ08sR0FBRCxFQUFTO0FBQ3hCLFFBQUlULE9BQUosRUFBYTtBQUNYLFVBQU1VLE9BQU8sR0FBR1YsT0FBTyxDQUFDVyxLQUFSLENBQWNGLEdBQWQsQ0FBaEI7QUFDQSxVQUFJQyxPQUFPLENBQUNFLE1BQVIsR0FBaUIsQ0FBckIsRUFBd0JiLE1BQU0sQ0FBQ00sSUFBUCxDQUFZLE1BQVosRUFBb0JLLE9BQXBCO0FBQ3pCLEtBSEQsTUFHTztBQUNMWCxNQUFBQSxNQUFNLENBQUNNLElBQVAsQ0FBWSxNQUFaLEVBQW9CSSxHQUFwQjtBQUNEO0FBQ0YsR0FQRDtBQVNBZCxFQUFBQSxLQUFLLENBQUNPLEVBQU4sQ0FBUyxLQUFULEVBQWdCLFlBQU07QUFDcEJILElBQUFBLE1BQU0sQ0FBQ00sSUFBUCxDQUFZLEtBQVo7QUFDRCxHQUZELEVBcENnQyxDQXdDaEM7O0FBQ0EsTUFBTVEsR0FBRyxHQUFHaEIsR0FBRyxDQUFDSyxFQUFoQjs7QUFDQUwsRUFBQUEsR0FBRyxDQUFDSyxFQUFKLEdBQVMsVUFBVU0sSUFBVixFQUFnQk0sRUFBaEIsRUFBb0I7QUFDM0IsUUFBSU4sSUFBSSxLQUFLLE1BQVQsSUFBbUJBLElBQUksS0FBSyxLQUFoQyxFQUF1QztBQUNyQ1QsTUFBQUEsTUFBTSxDQUFDRyxFQUFQLENBQVVNLElBQVYsRUFBZ0JNLEVBQUUsQ0FBQ0MsSUFBSCxDQUFRbEIsR0FBUixDQUFoQjtBQUNELEtBRkQsTUFFTyxJQUFJVyxJQUFJLEtBQUssT0FBYixFQUFzQjtBQUMzQlQsTUFBQUEsTUFBTSxDQUFDRyxFQUFQLENBQVVNLElBQVYsRUFBZ0JNLEVBQUUsQ0FBQ0MsSUFBSCxDQUFRbEIsR0FBUixDQUFoQjs7QUFDQWdCLE1BQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTbkIsR0FBVCxFQUFjVyxJQUFkLEVBQW9CTSxFQUFwQjtBQUNELEtBSE0sTUFHQTtBQUNMRCxNQUFBQSxHQUFHLENBQUNHLElBQUosQ0FBU25CLEdBQVQsRUFBY1csSUFBZCxFQUFvQk0sRUFBcEI7QUFDRDs7QUFFRCxXQUFPLElBQVA7QUFDRCxHQVhEO0FBWUQsQ0F0REQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpO1xuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuXG4vKipcbiAqIEJ1ZmZlcnMgcmVzcG9uc2UgZGF0YSBldmVudHMgYW5kIHJlLWVtaXRzIHdoZW4gdGhleSdyZSB1bnppcHBlZC5cbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnVuemlwID0gKHJlcXVlc3QsIHJlcykgPT4ge1xuICBjb25zdCB1bnppcCA9IHpsaWIuY3JlYXRlVW56aXAoKTtcbiAgY29uc3Qgc3RyZWFtID0gbmV3IFN0cmVhbSgpO1xuICBsZXQgZGVjb2RlcjtcblxuICAvLyBtYWtlIG5vZGUgcmVzcG9uc2VPbkVuZCgpIGhhcHB5XG4gIHN0cmVhbS5yZXEgPSByZXF1ZXN0O1xuXG4gIHVuemlwLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnWl9CVUZfRVJST1InKSB7XG4gICAgICAvLyB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIGlnbm9yZWQgYnkgYnJvd3NlcnMgYW5kIGN1cmxcbiAgICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gIH0pO1xuXG4gIC8vIHBpcGUgdG8gdW56aXBcbiAgcmVzLnBpcGUodW56aXApO1xuXG4gIC8vIG92ZXJyaWRlIGBzZXRFbmNvZGluZ2AgdG8gY2FwdHVyZSBlbmNvZGluZ1xuICByZXMuc2V0RW5jb2RpbmcgPSAodHlwZSkgPT4ge1xuICAgIGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcih0eXBlKTtcbiAgfTtcblxuICAvLyBkZWNvZGUgdXBvbiBkZWNvbXByZXNzaW5nIHdpdGggY2FwdHVyZWQgZW5jb2RpbmdcbiAgdW56aXAub24oJ2RhdGEnLCAoYnVmKSA9PiB7XG4gICAgaWYgKGRlY29kZXIpIHtcbiAgICAgIGNvbnN0IHN0cmluZ18gPSBkZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgICBpZiAoc3RyaW5nXy5sZW5ndGggPiAwKSBzdHJlYW0uZW1pdCgnZGF0YScsIHN0cmluZ18pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGJ1Zik7XG4gICAgfVxuICB9KTtcblxuICB1bnppcC5vbignZW5kJywgKCkgPT4ge1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgfSk7XG5cbiAgLy8gb3ZlcnJpZGUgYG9uYCB0byBjYXB0dXJlIGRhdGEgbGlzdGVuZXJzXG4gIGNvbnN0IF9vbiA9IHJlcy5vbjtcbiAgcmVzLm9uID0gZnVuY3Rpb24gKHR5cGUsIGZuKSB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXRhJyB8fCB0eXBlID09PSAnZW5kJykge1xuICAgICAgc3RyZWFtLm9uKHR5cGUsIGZuLmJpbmQocmVzKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgICBzdHJlYW0ub24odHlwZSwgZm4uYmluZChyZXMpKTtcbiAgICAgIF9vbi5jYWxsKHJlcywgdHlwZSwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfb24uY2FsbChyZXMsIHR5cGUsIGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn07XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/request-base.js b/build/node_modules/superagent/lib/request-base.js index aedb1ff6..ad65e8b9 100644 --- a/build/node_modules/superagent/lib/request-base.js +++ b/build/node_modules/superagent/lib/request-base.js @@ -1,41 +1,29 @@ -'use strict'; +"use strict"; +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var semver = require('semver'); /** * Module of mixed-in functions shared between node and client code */ -var isObject = require('./is-object'); + +var _require = require('./utils'), + isObject = _require.isObject, + hasOwn = _require.hasOwn; /** * Expose `RequestBase`. */ -module.exports = RequestBase; +module.exports = RequestBase; /** * Initialize a new `RequestBase`. * * @api public */ -function RequestBase(obj) { - if (obj) return mixin(obj); -} - -/** - * Mixin the prototype properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in RequestBase.prototype) { - obj[key] = RequestBase.prototype[key]; - } - return obj; -} - +function RequestBase() {} /** * Clear previous timeout. * @@ -43,14 +31,16 @@ function mixin(obj) { * @api public */ -RequestBase.prototype.clearTimeout = function _clearTimeout(){ + +RequestBase.prototype.clearTimeout = function () { clearTimeout(this._timer); clearTimeout(this._responseTimeoutTimer); + clearTimeout(this._uploadTimeoutTimer); delete this._timer; delete this._responseTimeoutTimer; + delete this._uploadTimeoutTimer; return this; }; - /** * Override default response body parser * @@ -60,11 +50,11 @@ RequestBase.prototype.clearTimeout = function _clearTimeout(){ * @api public */ -RequestBase.prototype.parse = function parse(fn){ + +RequestBase.prototype.parse = function (fn) { this._parser = fn; return this; }; - /** * Set format of binary response body. * In browser valid formats are 'blob' and 'arraybuffer', @@ -83,11 +73,11 @@ RequestBase.prototype.parse = function parse(fn){ * @api public */ -RequestBase.prototype.responseType = function(val){ - this._responseType = val; + +RequestBase.prototype.responseType = function (value) { + this._responseType = value; return this; }; - /** * Override default request body serializer * @@ -97,16 +87,17 @@ RequestBase.prototype.responseType = function(val){ * @api public */ -RequestBase.prototype.serialize = function serialize(fn){ + +RequestBase.prototype.serialize = function (fn) { this._serializer = fn; return this; }; - /** * Set timeouts. * * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time. * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections. + * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off * * Value of 0 or false means no timeout. * @@ -115,28 +106,38 @@ RequestBase.prototype.serialize = function serialize(fn){ * @api public */ -RequestBase.prototype.timeout = function timeout(options){ - if (!options || 'object' !== typeof options) { + +RequestBase.prototype.timeout = function (options) { + if (!options || _typeof(options) !== 'object') { this._timeout = options; this._responseTimeout = 0; + this._uploadTimeout = 0; return this; } - for(var option in options) { - switch(option) { - case 'deadline': - this._timeout = options.deadline; - break; - case 'response': - this._responseTimeout = options.response; - break; - default: - console.warn("Unknown timeout option", option); + for (var option in options) { + if (hasOwn(options, option)) { + switch (option) { + case 'deadline': + this._timeout = options.deadline; + break; + + case 'response': + this._responseTimeout = options.response; + break; + + case 'upload': + this._uploadTimeout = options.upload; + break; + + default: + console.warn('Unknown timeout option', option); + } } } + return this; }; - /** * Set number of retry attempts on error. * @@ -148,7 +149,8 @@ RequestBase.prototype.timeout = function timeout(options){ * @api public */ -RequestBase.prototype.retry = function retry(count, fn){ + +RequestBase.prototype.retry = function (count, fn) { // Default to 1 if no count passed or true if (arguments.length === 0 || count === true) count = 1; if (count <= 0) count = 0; @@ -156,47 +158,69 @@ RequestBase.prototype.retry = function retry(count, fn){ this._retries = 0; this._retryCallback = fn; return this; -}; - -var ERROR_CODES = [ - 'ECONNRESET', - 'ETIMEDOUT', - 'EADDRINFO', - 'ESOCKETTIMEDOUT' -]; +}; // +// NOTE: we do not include ESOCKETTIMEDOUT because that is from `request` package +// +// +// NOTE: we do not include EADDRINFO because it was removed from libuv in 2014 +// +// +// +// +// TODO: expose these as configurable defaults +// + + +var ERROR_CODES = new Set(['ETIMEDOUT', 'ECONNRESET', 'EADDRINUSE', 'ECONNREFUSED', 'EPIPE', 'ENOTFOUND', 'ENETUNREACH', 'EAI_AGAIN']); +var STATUS_CODES = new Set([408, 413, 429, 500, 502, 503, 504, 521, 522, 524]); // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) +// const METHODS = new Set(['GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']); /** * Determine if a request should be retried. - * (Borrowed from segmentio/superagent-retry) + * (Inspired by https://github.com/sindresorhus/got#retry) * - * @param {Error} err - * @param {Response} [res] - * @returns {Boolean} + * @param {Error} err an error + * @param {Response} [res] response + * @returns {Boolean} if segment should be retried */ -RequestBase.prototype._shouldRetry = function(err, res) { + +RequestBase.prototype._shouldRetry = function (error, res) { if (!this._maxRetries || this._retries++ >= this._maxRetries) { return false; } + if (this._retryCallback) { try { - var override = this._retryCallback(err, res); + var override = this._retryCallback(error, res); + if (override === true) return true; - if (override === false) return false; - // undefined falls back to defaults - } catch(e) { - console.error(e); + if (override === false) return false; // undefined falls back to defaults + } catch (error_) { + console.error(error_); } + } // TODO: we would need to make this easily configurable before adding it in (e.g. some might want to add POST) + + /* + if ( + this.req && + this.req.method && + !METHODS.has(this.req.method.toUpperCase()) + ) + return false; + */ + + + if (res && res.status && STATUS_CODES.has(res.status)) return true; + + if (error) { + if (error.code && ERROR_CODES.has(error.code)) return true; // Superagent timeout + + if (error.timeout && error.code === 'ECONNABORTED') return true; + if (error.crossDomain) return true; } - if (res && res.status && res.status >= 500 && res.status != 501) return true; - if (err) { - if (err.code && ~ERROR_CODES.indexOf(err.code)) return true; - // Superagent timeout - if (err.timeout && err.code == 'ECONNABORTED') return true; - if (err.crossDomain) return true; - } + return false; }; - /** * Retry request * @@ -204,11 +228,10 @@ RequestBase.prototype._shouldRetry = function(err, res) { * @api private */ -RequestBase.prototype._retry = function() { - this.clearTimeout(); +RequestBase.prototype._retry = function () { + this.clearTimeout(); // node - // node if (this.req) { this.req = null; this.req = this.request(); @@ -216,10 +239,9 @@ RequestBase.prototype._retry = function() { this._aborted = false; this.timedout = false; - + this.timedoutError = null; return this._end(); }; - /** * Promise support * @@ -228,42 +250,64 @@ RequestBase.prototype._retry = function() { * @return {Request} */ -RequestBase.prototype.then = function then(resolve, reject) { + +RequestBase.prototype.then = function (resolve, reject) { + var _this = this; + if (!this._fullfilledPromise) { var self = this; + if (this._endCalled) { - console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"); + console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises'); } - this._fullfilledPromise = new Promise(function(innerResolve, innerReject) { - self.end(function(err, res) { - if (err) innerReject(err); - else innerResolve(res); + + this._fullfilledPromise = new Promise(function (resolve, reject) { + self.on('abort', function () { + if (_this._maxRetries && _this._maxRetries > _this._retries) { + return; + } + + if (_this.timedout && _this.timedoutError) { + reject(_this.timedoutError); + return; + } + + var error = new Error('Aborted'); + error.code = 'ABORTED'; + error.status = _this.status; + error.method = _this.method; + error.url = _this.url; + reject(error); + }); + self.end(function (error, res) { + if (error) reject(error);else resolve(res); }); }); } + return this._fullfilledPromise.then(resolve, reject); }; -RequestBase.prototype['catch'] = function(cb) { +RequestBase.prototype.catch = function (cb) { return this.then(undefined, cb); }; - /** * Allow for extension */ -RequestBase.prototype.use = function use(fn) { + +RequestBase.prototype.use = function (fn) { fn(this); return this; }; -RequestBase.prototype.ok = function(cb) { - if ('function' !== typeof cb) throw Error("Callback required"); +RequestBase.prototype.ok = function (cb) { + if (typeof cb !== 'function') throw new Error('Callback required'); this._okCallback = cb; return this; }; -RequestBase.prototype._isResponseOK = function(res) { +RequestBase.prototype._isResponseOK = function (res) { if (!res) { return false; } @@ -274,7 +318,6 @@ RequestBase.prototype._isResponseOK = function(res) { return res.status >= 200 && res.status < 300; }; - /** * Get request header `field`. * Case-insensitive. @@ -284,10 +327,10 @@ RequestBase.prototype._isResponseOK = function(res) { * @api public */ -RequestBase.prototype.get = function(field){ + +RequestBase.prototype.get = function (field) { return this._header[field.toLowerCase()]; }; - /** * Get case-insensitive header `field` value. * This is a deprecated internal API. Use `.get(field)` instead. @@ -300,8 +343,8 @@ RequestBase.prototype.get = function(field){ * @deprecated */ -RequestBase.prototype.getHeader = RequestBase.prototype.get; +RequestBase.prototype.getHeader = RequestBase.prototype.get; /** * Set header `field` to `val`, or multiple fields with one object. * Case-insensitive. @@ -323,18 +366,19 @@ RequestBase.prototype.getHeader = RequestBase.prototype.get; * @api public */ -RequestBase.prototype.set = function(field, val){ +RequestBase.prototype.set = function (field, value) { if (isObject(field)) { for (var key in field) { - this.set(key, field[key]); + if (hasOwn(field, key)) this.set(key, field[key]); } + return this; } - this._header[field.toLowerCase()] = val; - this.header[field] = val; + + this._header[field.toLowerCase()] = value; + this.header[field] = value; return this; }; - /** * Remove header `field`. * Case-insensitive. @@ -345,14 +389,15 @@ RequestBase.prototype.set = function(field, val){ * .unset('User-Agent') * .end(callback); * - * @param {String} field + * @param {String} field field name */ -RequestBase.prototype.unset = function(field){ + + +RequestBase.prototype.unset = function (field) { delete this._header[field.toLowerCase()]; delete this.header[field]; return this; }; - /** * Write the field `name` and `val`, or multiple fields with one object * for "multipart/form-data" request bodies. @@ -367,68 +412,103 @@ RequestBase.prototype.unset = function(field){ * .end(callback); * ``` * - * @param {String|Object} name - * @param {String|Blob|File|Buffer|fs.ReadStream} val + * @param {String|Object} name name of field + * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field + * @param {String} options extra options, e.g. 'blob' * @return {Request} for chaining * @api public */ -RequestBase.prototype.field = function(name, val) { + + +RequestBase.prototype.field = function (name, value, options) { // name should be either a string or an object. - if (null === name || undefined === name) { + if (name === null || undefined === name) { throw new Error('.field(name, val) name can not be empty'); } if (this._data) { - console.error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); + throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); } if (isObject(name)) { for (var key in name) { - this.field(key, name[key]); + if (hasOwn(name, key)) this.field(key, name[key]); } + return this; } - if (Array.isArray(val)) { - for (var i in val) { - this.field(name, val[i]); + if (Array.isArray(value)) { + for (var i in value) { + if (hasOwn(value, i)) this.field(name, value[i]); } + return this; - } + } // val should be defined now - // val should be defined now - if (null === val || undefined === val) { + + if (value === null || undefined === value) { throw new Error('.field(name, val) val can not be empty'); } - if ('boolean' === typeof val) { - val = '' + val; + + if (typeof value === 'boolean') { + value = String(value); } - this._getFormData().append(name, val); + + this._getFormData().append(name, value, options); + return this; }; - /** * Abort the request, and clear potential timeout. * - * @return {Request} + * @return {Request} request * @api public */ -RequestBase.prototype.abort = function(){ + + +RequestBase.prototype.abort = function () { if (this._aborted) { return this; } + this._aborted = true; - this.xhr && this.xhr.abort(); // browser - this.req && this.req.abort(); // node + if (this.xhr) this.xhr.abort(); // browser + + if (this.req) { + // Node v13 has major differences in `abort()` + // https://github.com/nodejs/node/blob/v12.x/lib/internal/streams/end-of-stream.js + // https://github.com/nodejs/node/blob/v13.x/lib/internal/streams/end-of-stream.js + // https://github.com/nodejs/node/blob/v14.x/lib/internal/streams/end-of-stream.js + // (if you run a diff across these you will see the differences) + // + // References: + // + // + // + // Thanks to @shadowgate15 and @niftylettuce + if (semver.gte(process.version, 'v13.0.0') && semver.lt(process.version, 'v14.0.0')) { + // Note that the reason this doesn't work is because in v13 as compared to v14 + // there is no `callback = nop` set in end-of-stream.js above + throw new Error('Superagent does not work in v13 properly with abort() due to Node.js core changes'); + } else if (semver.gte(process.version, 'v14.0.0')) { + // We have to manually set `destroyed` to `true` in order for this to work + // (see core internals of end-of-stream.js above in v14 branch as compared to v12) + this.req.destroyed = true; + } + + this.req.abort(); // node + } + this.clearTimeout(); this.emit('abort'); return this; }; -RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { +RequestBase.prototype._auth = function (user, pass, options, base64Encoder) { switch (options.type) { case 'basic': - this.set('Authorization', 'Basic ' + base64Encoder(user + ':' + pass)); + this.set('Authorization', "Basic ".concat(base64Encoder("".concat(user, ":").concat(pass)))); break; case 'auto': @@ -436,13 +516,17 @@ RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { this.password = pass; break; - case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) - this.set('Authorization', 'Bearer ' + user); + case 'bearer': + // usage would be .auth(accessToken, { type: 'bearer' }) + this.set('Authorization', "Bearer ".concat(user)); + break; + + default: break; } + return this; }; - /** * Enable transmission of cookies with x-domain requests. * @@ -454,41 +538,43 @@ RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { * @api public */ -RequestBase.prototype.withCredentials = function(on) { + +RequestBase.prototype.withCredentials = function (on) { // This is browser-only functionality. Node side is no-op. - if (on == undefined) on = true; + if (on === undefined) on = true; this._withCredentials = on; return this; }; - /** - * Set the max redirects to `n`. Does noting in browser XHR implementation. + * Set the max redirects to `n`. Does nothing in browser XHR implementation. * * @param {Number} n * @return {Request} for chaining * @api public */ -RequestBase.prototype.redirects = function(n){ + +RequestBase.prototype.redirects = function (n) { this._maxRedirects = n; return this; }; - /** * Maximum size of buffered response body, in bytes. Counts uncompressed size. * Default 200MB. * - * @param {Number} n + * @param {Number} n number of bytes * @return {Request} for chaining */ -RequestBase.prototype.maxResponseSize = function(n){ - if ('number' !== typeof n) { - throw TypeError("Invalid argument"); + + +RequestBase.prototype.maxResponseSize = function (n) { + if (typeof n !== 'number') { + throw new TypeError('Invalid argument'); } + this._maxResponseSize = n; return this; }; - /** * Convert to a plain javascript object (not JSON string) of scalar properties. * Note as this method is designed to return a useful non-this value, @@ -498,15 +584,15 @@ RequestBase.prototype.maxResponseSize = function(n){ * @api public */ -RequestBase.prototype.toJSON = function() { + +RequestBase.prototype.toJSON = function () { return { method: this.method, url: this.url, data: this._data, - headers: this._header, + headers: this._header }; }; - /** * Send `data` as the request body, defaulting the `.type()` to "json" when * an object is given. @@ -546,38 +632,40 @@ RequestBase.prototype.toJSON = function() { * @return {Request} for chaining * @api public */ +// eslint-disable-next-line complexity + -RequestBase.prototype.send = function(data){ - var isObj = isObject(data); +RequestBase.prototype.send = function (data) { + var isObject_ = isObject(data); var type = this._header['content-type']; if (this._formData) { - console.error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); + throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); } - if (isObj && !this._data) { + if (isObject_ && !this._data) { if (Array.isArray(data)) { this._data = []; } else if (!this._isHost(data)) { this._data = {}; } } else if (data && this._data && this._isHost(this._data)) { - throw Error("Can't merge these send calls"); - } + throw new Error("Can't merge these send calls"); + } // merge + - // merge - if (isObj && isObject(this._data)) { + if (isObject_ && isObject(this._data)) { for (var key in data) { - this._data[key] = data[key]; + if (hasOwn(data, key)) this._data[key] = data[key]; } - } else if ('string' == typeof data) { + } else if (typeof data === 'string') { // default to x-www-form-urlencoded if (!type) this.type('form'); type = this._header['content-type']; - if ('application/x-www-form-urlencoded' == type) { - this._data = this._data - ? this._data + '&' + data - : data; + if (type) type = type.toLowerCase().trim(); + + if (type === 'application/x-www-form-urlencoded') { + this._data = this._data ? "".concat(this._data, "&").concat(data) : data; } else { this._data = (this._data || '') + data; } @@ -585,15 +673,14 @@ RequestBase.prototype.send = function(data){ this._data = data; } - if (!isObj || this._isHost(data)) { + if (!isObject_ || this._isHost(data)) { return this; - } + } // default to json + - // default to json if (!type) this.type('json'); return this; }; - /** * Sort `querystring` by the sort function * @@ -622,73 +709,85 @@ RequestBase.prototype.send = function(data){ * @api public */ -RequestBase.prototype.sortQuery = function(sort) { + +RequestBase.prototype.sortQuery = function (sort) { // _sort default to true but otherwise can be a function or boolean this._sort = typeof sort === 'undefined' ? true : sort; return this; }; - /** * Compose querystring to append to req.url * * @api private */ -RequestBase.prototype._finalizeQueryString = function(){ + + +RequestBase.prototype._finalizeQueryString = function () { var query = this._query.join('&'); + if (query) { - this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + query; + this.url += (this.url.includes('?') ? '&' : '?') + query; } + this._query.length = 0; // Makes the call idempotent if (this._sort) { var index = this.url.indexOf('?'); + if (index >= 0) { - var queryArr = this.url.substring(index + 1).split('&'); - if ('function' === typeof this._sort) { - queryArr.sort(this._sort); + var queryArray = this.url.slice(index + 1).split('&'); + + if (typeof this._sort === 'function') { + queryArray.sort(this._sort); } else { - queryArr.sort(); + queryArray.sort(); } - this.url = this.url.substring(0, index) + '?' + queryArr.join('&'); + + this.url = this.url.slice(0, index) + '?' + queryArray.join('&'); } } -}; +}; // For backwards compat only -// For backwards compat only -RequestBase.prototype._appendQueryString = function() {console.trace("Unsupported");} +RequestBase.prototype._appendQueryString = function () { + console.warn('Unsupported'); +}; /** * Invoke callback with timeout error. * * @api private */ -RequestBase.prototype._timeoutError = function(reason, timeout, errno){ + +RequestBase.prototype._timeoutError = function (reason, timeout, errno) { if (this._aborted) { return; } - var err = new Error(reason + timeout + 'ms exceeded'); - err.timeout = timeout; - err.code = 'ECONNABORTED'; - err.errno = errno; + + var error = new Error("".concat(reason + timeout, "ms exceeded")); + error.timeout = timeout; + error.code = 'ECONNABORTED'; + error.errno = errno; this.timedout = true; + this.timedoutError = error; this.abort(); - this.callback(err); + this.callback(error); }; -RequestBase.prototype._setTimeouts = function() { - var self = this; +RequestBase.prototype._setTimeouts = function () { + var self = this; // deadline - // deadline if (this._timeout && !this._timer) { - this._timer = setTimeout(function(){ + this._timer = setTimeout(function () { self._timeoutError('Timeout of ', self._timeout, 'ETIME'); }, this._timeout); - } - // response timeout + } // response timeout + + if (this._responseTimeout && !this._responseTimeoutTimer) { - this._responseTimeoutTimer = setTimeout(function(){ + this._responseTimeoutTimer = setTimeout(function () { self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT'); }, this._responseTimeout); } }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LWJhc2UuanMiXSwibmFtZXMiOlsic2VtdmVyIiwicmVxdWlyZSIsImlzT2JqZWN0IiwiaGFzT3duIiwibW9kdWxlIiwiZXhwb3J0cyIsIlJlcXVlc3RCYXNlIiwicHJvdG90eXBlIiwiY2xlYXJUaW1lb3V0IiwiX3RpbWVyIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwiX3VwbG9hZFRpbWVvdXRUaW1lciIsInBhcnNlIiwiZm4iLCJfcGFyc2VyIiwicmVzcG9uc2VUeXBlIiwidmFsdWUiLCJfcmVzcG9uc2VUeXBlIiwic2VyaWFsaXplIiwiX3NlcmlhbGl6ZXIiLCJ0aW1lb3V0Iiwib3B0aW9ucyIsIl90aW1lb3V0IiwiX3Jlc3BvbnNlVGltZW91dCIsIl91cGxvYWRUaW1lb3V0Iiwib3B0aW9uIiwiZGVhZGxpbmUiLCJyZXNwb25zZSIsInVwbG9hZCIsImNvbnNvbGUiLCJ3YXJuIiwicmV0cnkiLCJjb3VudCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIl9tYXhSZXRyaWVzIiwiX3JldHJpZXMiLCJfcmV0cnlDYWxsYmFjayIsIkVSUk9SX0NPREVTIiwiU2V0IiwiU1RBVFVTX0NPREVTIiwiX3Nob3VsZFJldHJ5IiwiZXJyb3IiLCJyZXMiLCJvdmVycmlkZSIsImVycm9yXyIsInN0YXR1cyIsImhhcyIsImNvZGUiLCJjcm9zc0RvbWFpbiIsIl9yZXRyeSIsInJlcSIsInJlcXVlc3QiLCJfYWJvcnRlZCIsInRpbWVkb3V0IiwidGltZWRvdXRFcnJvciIsIl9lbmQiLCJ0aGVuIiwicmVzb2x2ZSIsInJlamVjdCIsIl9mdWxsZmlsbGVkUHJvbWlzZSIsInNlbGYiLCJfZW5kQ2FsbGVkIiwiUHJvbWlzZSIsIm9uIiwiRXJyb3IiLCJtZXRob2QiLCJ1cmwiLCJlbmQiLCJjYXRjaCIsImNiIiwidW5kZWZpbmVkIiwidXNlIiwib2siLCJfb2tDYWxsYmFjayIsIl9pc1Jlc3BvbnNlT0siLCJnZXQiLCJmaWVsZCIsIl9oZWFkZXIiLCJ0b0xvd2VyQ2FzZSIsImdldEhlYWRlciIsInNldCIsImtleSIsImhlYWRlciIsInVuc2V0IiwibmFtZSIsIl9kYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsIlN0cmluZyIsIl9nZXRGb3JtRGF0YSIsImFwcGVuZCIsImFib3J0IiwieGhyIiwiZ3RlIiwicHJvY2VzcyIsInZlcnNpb24iLCJsdCIsImRlc3Ryb3llZCIsImVtaXQiLCJfYXV0aCIsInVzZXIiLCJwYXNzIiwiYmFzZTY0RW5jb2RlciIsInR5cGUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwid2l0aENyZWRlbnRpYWxzIiwiX3dpdGhDcmVkZW50aWFscyIsInJlZGlyZWN0cyIsIm4iLCJfbWF4UmVkaXJlY3RzIiwibWF4UmVzcG9uc2VTaXplIiwiVHlwZUVycm9yIiwiX21heFJlc3BvbnNlU2l6ZSIsInRvSlNPTiIsImRhdGEiLCJoZWFkZXJzIiwic2VuZCIsImlzT2JqZWN0XyIsIl9mb3JtRGF0YSIsIl9pc0hvc3QiLCJ0cmltIiwic29ydFF1ZXJ5Iiwic29ydCIsIl9zb3J0IiwiX2ZpbmFsaXplUXVlcnlTdHJpbmciLCJxdWVyeSIsIl9xdWVyeSIsImpvaW4iLCJpbmNsdWRlcyIsImluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5QXJyYXkiLCJzbGljZSIsInNwbGl0IiwiX2FwcGVuZFF1ZXJ5U3RyaW5nIiwiX3RpbWVvdXRFcnJvciIsInJlYXNvbiIsImVycm5vIiwiY2FsbGJhY2siLCJfc2V0VGltZW91dHMiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUF0QjtBQUVBO0FBQ0E7QUFDQTs7O0FBQ0EsZUFBNkJBLE9BQU8sQ0FBQyxTQUFELENBQXBDO0FBQUEsSUFBUUMsUUFBUixZQUFRQSxRQUFSO0FBQUEsSUFBa0JDLE1BQWxCLFlBQWtCQSxNQUFsQjtBQUVBO0FBQ0E7QUFDQTs7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkMsV0FBakI7QUFFQTtBQUNBO0FB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SixXQUFhMEUsTUFBTSxHQUFHdkgsT0FBdEIsaUJBQWQ7QUFDQXNCLEVBQUFBLEtBQUssQ0FBQ3RCLE9BQU4sR0FBZ0JBLE9BQWhCO0FBQ0FzQixFQUFBQSxLQUFLLENBQUNNLElBQU4sR0FBYSxjQUFiO0FBQ0FOLEVBQUFBLEtBQUssQ0FBQ2tHLEtBQU4sR0FBY0EsS0FBZDtBQUNBLE9BQUt0RixRQUFMLEdBQWdCLElBQWhCO0FBQ0EsT0FBS0MsYUFBTCxHQUFxQmIsS0FBckI7QUFDQSxPQUFLbUQsS0FBTDtBQUNBLE9BQUtnRCxRQUFMLENBQWNuRyxLQUFkO0FBQ0QsQ0FiRDs7QUFlQXBDLFdBQVcsQ0FBQ0MsU0FBWixDQUFzQnVJLFlBQXRCLEdBQXFDLFlBQVk7QUFDL0MsTUFBTWpGLElBQUksR0FBRyxJQUFiLENBRCtDLENBRy9DOztBQUNBLE1BQUksS0FBS3ZDLFFBQUwsSUFBaUIsQ0FBQyxLQUFLYixNQUEzQixFQUFtQztBQUNqQyxTQUFLQSxNQUFMLEdBQWNzSSxVQUFVLENBQUMsWUFBTTtBQUM3QmxGLE1BQUFBLElBQUksQ0FBQzZFLGFBQUwsQ0FBbUIsYUFBbkIsRUFBa0M3RSxJQUFJLENBQUN2QyxRQUF2QyxFQUFpRCxPQUFqRDtBQUNELEtBRnVCLEVBRXJCLEtBQUtBLFFBRmdCLENBQXhCO0FBR0QsR0FSOEMsQ0FVL0M7OztBQUNBLE1BQUksS0FBS0MsZ0JBQUwsSUFBeUIsQ0FBQyxLQUFLYixxQkFBbkMsRUFBMEQ7QUFDeEQsU0FBS0EscUJBQUwsR0FBNkJxSSxVQUFVLENBQUMsWUFBTTtBQUM1Q2xGLE1BQUFBLElBQUksQ0FBQzZFLGFBQUwsQ0FDRSxzQkFERixFQUVFN0UsSUFBSSxDQUFDdEMsZ0JBRlAsRUFHRSxXQUhGO0FBS0QsS0FOc0MsRUFNcEMsS0FBS0EsZ0JBTitCLENBQXZDO0FBT0Q7QUFDRixDQXBCRCIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG4vKipcbiAqIE1vZHVsZSBvZiBtaXhlZC1pbiBmdW5jdGlvbnMgc2hhcmVkIGJldHdlZW4gbm9kZSBhbmQgY2xpZW50IGNvZGVcbiAqL1xuY29uc3QgeyBpc09iamVjdCwgaGFzT3duIH0gPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbi8qKlxuICogRXhwb3NlIGBSZXF1ZXN0QmFzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0QmFzZTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBSZXF1ZXN0QmFzZWAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBSZXF1ZXN0QmFzZSgpIHt9XG5cbi8qKlxuICogQ2xlYXIgcHJldmlvdXMgdGltZW91dC5cbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKTtcbiAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwbG9hZFRpbWVvdXRUaW1lcik7XG4gIGRlbGV0ZSB0aGlzLl90aW1lcjtcbiAgZGVsZXRlIHRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyO1xuICBkZWxldGUgdGhpcy5fdXBsb2FkVGltZW91dFRpbWVyO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogT3ZlcnJpZGUgZGVmYXVsdCByZXNwb25zZSBib2R5IHBhcnNlclxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY29udmVydCBpbmNvbWluZyBkYXRhIGludG8gcmVxdWVzdC5ib2R5XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGZuKSB7XG4gIHRoaXMuX3BhcnNlciA9IGZuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IGZvcm1hdCBvZiBiaW5hcnkgcmVzcG9uc2UgYm9keS5cbiAqIEluIGJyb3dzZXIgdmFsaWQgZm9ybWF0cyBhcmUgJ2Jsb2InIGFuZCAnYXJyYXlidWZmZXInLFxuICogd2hpY2ggcmV0dXJuIEJsb2IgYW5kIEFycmF5QnVmZmVyLCByZXNwZWN0aXZlbHkuXG4gKlxuICogSW4gTm9kZSBhbGwgdmFsdWVzIHJlc3VsdCBpbiBCdWZmZXIuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAucmVzcG9uc2VUeXBlKCdibG9iJylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnJlc3BvbnNlVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB0aGlzLl9yZXNwb25zZVR5cGUgPSB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQgcmVxdWVzdCBib2R5IHNlcmlhbGl6ZXJcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgZGF0YSBzZXQgdmlhIC5zZW5kIG9yIC5hdHRhY2ggaW50byBwYXlsb2FkIHRvIHNlbmRcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKGZuKSB7XG4gIHRoaXMuX3NlcmlhbGl6ZXIgPSBmbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aW1lb3V0cy5cbiAqXG4gKiAtIHJlc3BvbnNlIHRpbWVvdXQgaXMgdGltZSBiZXR3ZWVuIHNlbmRpbmcgcmVxdWVzdCBhbmQgcmVjZWl2aW5nIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXNwb25zZS4gSW5jbHVkZXMgRE5TIGFuZCBjb25uZWN0aW9uIHRpbWUuXG4gKiAtIGRlYWRsaW5lIGlzIHRoZSB0aW1lIGZyb20gc3RhcnQgb2YgdGhlIHJlcXVlc3QgdG8gcmVjZWl2aW5nIHJlc3BvbnNlIGJvZHkgaW4gZnVsbC4gSWYgdGhlIGRlYWRsaW5lIGlzIHRvbyBzaG9ydCBsYXJnZSBmaWxlcyBtYXkgbm90IGxvYWQgYXQgYWxsIG9uIHNsb3cgY29ubmVjdGlvbnMuXG4gKiAtIHVwbG9hZCBpcyB0aGUgdGltZSAgc2luY2UgbGFzdCBiaXQgb2YgZGF0YSB3YXMgc2VudCBvciByZWNlaXZlZC4gVGhpcyB0aW1lb3V0IHdvcmtzIG9ubHkgaWYgZGVhZGxpbmUgdGltZW91dCBpcyBvZmZcbiAqXG4gKiBWYWx1ZSBvZiAwIG9yIGZhbHNlIG1lYW5zIG5vIHRpbWVvdXQuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBtcyBvciB7cmVzcG9uc2UsIGRlYWRsaW5lfVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX3RpbWVvdXQgPSBvcHRpb25zO1xuICAgIHRoaXMuX3Jlc3BvbnNlVGltZW91dCA9IDA7XG4gICAgdGhpcy5fdXBsb2FkVGltZW91dCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmb3IgKGNvbnN0IG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgaWYgKGhhc093bihvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICBjYXNlICdkZWFkbGluZSc6XG4gICAgICAgICAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMuZGVhZGxpbmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Jlc3BvbnNlJzpcbiAgICAgICAgICB0aGlzLl9yZXNwb25zZVRpbWVvdXQgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cGxvYWQnOlxuICAgICAgICAgIHRoaXMuX3VwbG9hZFRpbWVvdXQgPSBvcHRpb25zLnVwbG9hZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gdGltZW91dCBvcHRpb24nLCBvcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgbnVtYmVyIG9mIHJldHJ5IGF0dGVtcHRzIG9uIGVycm9yLlxuICpcbiAqIEZhaWxlZCByZXF1ZXN0cyB3aWxsIGJlIHJldHJpZWQgJ2NvdW50JyB0aW1lcyBpZiB0aW1lb3V0IG9yIGVyci5jb2RlID49IDUwMC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUucmV0cnkgPSBmdW5jdGlvbiAoY291bnQsIGZuKSB7XG4gIC8vIERlZmF1bHQgdG8gMSBpZiBubyBjb3VudCBwYXNzZWQgb3IgdHJ1ZVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBjb3VudCA9PT0gdHJ1ZSkgY291bnQgPSAxO1xuICBpZiAoY291bnQgPD0gMCkgY291bnQgPSAwO1xuICB0aGlzLl9tYXhSZXRyaWVzID0gY291bnQ7XG4gIHRoaXMuX3JldHJpZXMgPSAwO1xuICB0aGlzLl9yZXRyeUNhbGxiYWNrID0gZm47XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIE5PVEU6IHdlIGRvIG5vdCBpbmNsdWRlIEVTT0NLRVRUSU1FRE9VVCBiZWNhdXNlIHRoYXQgaXMgZnJvbSBgcmVxdWVzdGAgcGFja2FnZVxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290L3B1bGwvNTM3PlxuLy9cbi8vIE5PVEU6IHdlIGRvIG5vdCBpbmNsdWRlIEVBRERSSU5GTyBiZWNhdXNlIGl0IHdhcyByZW1vdmVkIGZyb20gbGlidXYgaW4gMjAxNFxuLy8gICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9jb21taXQvMDJlMWViZDQwYjgwN2JlNWFmNDYzNDNlYTg3MzMzMWIyZWU0ZTljMT5cbi8vICAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vcmVxdWVzdC9yZXF1ZXN0L3NlYXJjaD9xPUVTT0NLRVRUSU1FRE9VVCZ1bnNjb3BlZF9xPUVTT0NLRVRUSU1FRE9VVD5cbi8vXG4vL1xuLy8gVE9ETzogZXhwb3NlIHRoZXNlIGFzIGNvbmZpZ3VyYWJsZSBkZWZhdWx0c1xuLy9cbmNvbnN0IEVSUk9SX0NPREVTID0gbmV3IFNldChbXG4gICdFVElNRURPVVQnLFxuICAnRUNPTk5SRVNFVCcsXG4gICdFQUREUklOVVNFJyxcbiAgJ0VDT05OUkVGVVNFRCcsXG4gICdFUElQRScsXG4gICdFTk9URk9VTkQnLFxuICAnRU5FVFVOUkVBQ0gnLFxuICAnRUFJX0FHQUlOJ1xuXSk7XG5cbmNvbnN0IFNUQVRVU19DT0RFUyA9IG5ldyBTZXQoW1xuICA0MDgsIDQxMywgNDI5LCA1MDAsIDUwMiwgNTAzLCA1MDQsIDUyMSwgNTIyLCA1MjRcbl0pO1xuXG4vLyBUT0RPOiB3ZSB3b3VsZCBuZWVkIHRvIG1ha2UgdGhpcyBlYXNpbHkgY29uZmlndXJhYmxlIGJlZm9yZSBhZGRpbmcgaXQgaW4gKGUuZy4gc29tZSBtaWdodCB3YW50IHRvIGFkZCBQT1NUKVxuLy8gY29uc3QgTUVUSE9EUyA9IG5ldyBTZXQoWydHRVQnLCAnUFVUJywgJ0hFQUQnLCAnREVMRVRFJywgJ09QVElPTlMnLCAnVFJBQ0UnXSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZC5cbiAqIChJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dvdCNyZXRyeSlcbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnIgYW4gZXJyb3JcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IFtyZXNdIHJlc3BvbnNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaWYgc2VnbWVudCBzaG91bGQgYmUgcmV0cmllZFxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX3Nob3VsZFJldHJ5ID0gZnVuY3Rpb24gKGVycm9yLCByZXMpIHtcbiAgaWYgKCF0aGlzLl9tYXhSZXRyaWVzIHx8IHRoaXMuX3JldHJpZXMrKyA+PSB0aGlzLl9tYXhSZXRyaWVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX3JldHJ5Q2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLl9yZXRyeUNhbGxiYWNrKGVycm9yLCByZXMpO1xuICAgICAgaWYgKG92ZXJyaWRlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChvdmVycmlkZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIHVuZGVmaW5lZCBmYWxscyBiYWNrIHRvIGRlZmF1bHRzXG4gICAgfSBjYXRjaCAoZXJyb3JfKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yXyk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogd2Ugd291bGQgbmVlZCB0byBtYWtlIHRoaXMgZWFzaWx5IGNvbmZpZ3VyYWJsZSBiZWZvcmUgYWRkaW5nIGl0IGluIChlLmcuIHNvbWUgbWlnaHQgd2FudCB0byBhZGQgUE9TVClcbiAgLypcbiAgaWYgKFxuICAgIHRoaXMucmVxICYmXG4gICAgdGhpcy5yZXEubWV0aG9kICYmXG4gICAgIU1FVEhPRFMuaGFzKHRoaXMucmVxLm1ldGhvZC50b1VwcGVyQ2FzZSgpKVxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICAqL1xuICBpZiAocmVzICYmIHJlcy5zdGF0dXMgJiYgU1RBVFVTX0NPREVTLmhhcyhyZXMuc3RhdHVzKSkgcmV0dXJuIHRydWU7XG4gIGlmIChlcnJvcikge1xuICAgIGlmIChlcnJvci5jb2RlICYmIEVSUk9SX0NPREVTLmhhcyhlcnJvci5jb2RlKSkgcmV0dXJuIHRydWU7XG4gICAgLy8gU3VwZXJhZ2VudCB0aW1lb3V0XG4gICAgaWYgKGVycm9yLnRpbWVvdXQgJiYgZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHJldHVybiB0cnVlO1xuICAgIGlmIChlcnJvci5jcm9zc0RvbWFpbikgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJldHJ5IHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fcmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG5cbiAgLy8gbm9kZVxuICBpZiAodGhpcy5yZXEpIHtcbiAgICB0aGlzLnJlcSA9IG51bGw7XG4gICAgdGhpcy5yZXEgPSB0aGlzLnJlcXVlc3QoKTtcbiAgfVxuXG4gIHRoaXMuX2Fib3J0ZWQgPSBmYWxzZTtcbiAgdGhpcy50aW1lZG91dCA9IGZhbHNlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBudWxsO1xuXG4gIHJldHVybiB0aGlzLl9lbmQoKTtcbn07XG5cbi8qKlxuICogUHJvbWlzZSBzdXBwb3J0XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3JlamVjdF1cbiAqIEByZXR1cm4ge1JlcXVlc3R9XG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gIGlmICghdGhpcy5fZnVsbGZpbGxlZFByb21pc2UpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5fZW5kQ2FsbGVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXYXJuaW5nOiBzdXBlcmFnZW50IHJlcXVlc3Qgd2FzIHNlbnQgdHdpY2UsIGJlY2F1c2UgYm90aCAuZW5kKCkgYW5kIC50aGVuKCkgd2VyZSBjYWxsZWQuIE5ldmVyIGNhbGwgLmVuZCgpIGlmIHlvdSB1c2UgcHJvbWlzZXMnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2VsZi5vbignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhSZXRyaWVzICYmIHRoaXMuX21heFJldHJpZXMgPiB0aGlzLl9yZXRyaWVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGltZWRvdXQgJiYgdGhpcy50aW1lZG91dEVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHRoaXMudGltZWRvdXRFcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0Fib3J0ZWQnKTtcbiAgICAgICAgZXJyb3IuY29kZSA9ICdBQk9SVEVEJztcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICAgIGVycm9yLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICAgICAgICBlcnJvci51cmwgPSB0aGlzLnVybDtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgICAgc2VsZi5lbmQoKGVycm9yLCByZXMpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSByZWplY3QoZXJyb3IpO1xuICAgICAgICBlbHNlIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWRQcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5jYXRjaCA9IGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgY2IpO1xufTtcblxuLyoqXG4gKiBBbGxvdyBmb3IgZXh0ZW5zaW9uXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIChmbikge1xuICBmbih0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUub2sgPSBmdW5jdGlvbiAoY2IpIHtcbiAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdDYWxsYmFjayByZXF1aXJlZCcpO1xuICB0aGlzLl9va0NhbGxiYWNrID0gY2I7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9pc1Jlc3BvbnNlT0sgPSBmdW5jdGlvbiAocmVzKSB7XG4gIGlmICghcmVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHRoaXMuX29rQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5fb2tDYWxsYmFjayhyZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG59O1xuXG4vKipcbiAqIEdldCByZXF1ZXN0IGhlYWRlciBgZmllbGRgLlxuICogQ2FzZS1pbnNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICByZXR1cm4gdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBHZXQgY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgYGZpZWxkYCB2YWx1ZS5cbiAqIFRoaXMgaXMgYSBkZXByZWNhdGVkIGludGVybmFsIEFQSS4gVXNlIGAuZ2V0KGZpZWxkKWAgaW5zdGVhZC5cbiAqXG4gKiAoZ2V0SGVhZGVyIGlzIG5vIGxvbmdlciB1c2VkIGludGVybmFsbHkgYnkgdGhlIHN1cGVyYWdlbnQgY29kZSBiYXNlKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKiBAZGVwcmVjYXRlZFxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5nZXRIZWFkZXIgPSBSZXF1ZXN0QmFzZS5wcm90b3R5cGUuZ2V0O1xuXG4vKipcbiAqIFNldCBoZWFkZXIgYGZpZWxkYCB0byBgdmFsYCwgb3IgbXVsdGlwbGUgZmllbGRzIHdpdGggb25lIG9iamVjdC5cbiAqIENhc2UtaW5zZW5zaXRpdmUuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLnNldCgnWC1BUEktS2V5JywgJ2Zvb2JhcicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAuc2V0KHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsICdYLUFQSS1LZXknOiAnZm9vYmFyJyB9KVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICBpZiAoaXNPYmplY3QoZmllbGQpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGQpIHtcbiAgICAgIGlmIChoYXNPd24oZmllbGQsIGtleSkpIHRoaXMuc2V0KGtleSwgZmllbGRba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0aGlzLl9oZWFkZXJbZmllbGQudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgdGhpcy5oZWFkZXJbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgaGVhZGVyIGBmaWVsZGAuXG4gKiBDYXNlLWluc2Vuc2l0aXZlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgICByZXEuZ2V0KCcvJylcbiAqICAgICAgICAudW5zZXQoJ1VzZXItQWdlbnQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaWVsZCBmaWVsZCBuYW1lXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS51bnNldCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICBkZWxldGUgdGhpcy5faGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICBkZWxldGUgdGhpcy5oZWFkZXJbZmllbGRdO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogV3JpdGUgdGhlIGZpZWxkIGBuYW1lYCBhbmQgYHZhbGAsIG9yIG11bHRpcGxlIGZpZWxkcyB3aXRoIG9uZSBvYmplY3RcbiAqIGZvciBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiByZXF1ZXN0IGJvZGllcy5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5maWVsZCgnZm9vJywgJ2JhcicpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIHJlcXVlc3QucG9zdCgnL3VwbG9hZCcpXG4gKiAgIC5maWVsZCh7IGZvbzogJ2JhcicsIGJhejogJ3F1eCcgfSlcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG5hbWUgbmFtZSBvZiBmaWVsZFxuICogQHBhcmFtIHtTdHJpbmd8QmxvYnxGaWxlfEJ1ZmZlcnxmcy5SZWFkU3RyZWFtfSB2YWwgdmFsdWUgb2YgZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zIGV4dHJhIG9wdGlvbnMsIGUuZy4gJ2Jsb2InXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5maWVsZCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBuYW1lIHNob3VsZCBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb2JqZWN0LlxuICBpZiAobmFtZSA9PT0gbnVsbCB8fCB1bmRlZmluZWQgPT09IG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy5maWVsZChuYW1lLCB2YWwpIG5hbWUgY2FuIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5maWVsZCgpIGNhbid0IGJlIHVzZWQgaWYgLnNlbmQoKSBpcyB1c2VkLiBQbGVhc2UgdXNlIG9ubHkgLnNlbmQoKSBvciBvbmx5IC5maWVsZCgpICYgLmF0dGFjaCgpXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZSkge1xuICAgICAgaWYgKGhhc093bihuYW1lLCBrZXkpKSB0aGlzLmZpZWxkKGtleSwgbmFtZVtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgaSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKGhhc093bih2YWx1ZSwgaSkpIHRoaXMuZmllbGQobmFtZSwgdmFsdWVbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gdmFsIHNob3VsZCBiZSBkZWZpbmVkIG5vd1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdW5kZWZpbmVkID09PSB2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLmZpZWxkKG5hbWUsIHZhbCkgdmFsIGNhbiBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX2dldEZvcm1EYXRhKCkuYXBwZW5kKG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEFib3J0IHRoZSByZXF1ZXN0LCBhbmQgY2xlYXIgcG90ZW50aWFsIHRpbWVvdXQuXG4gKlxuICogQHJldHVybiB7UmVxdWVzdH0gcmVxdWVzdFxuICogQGFwaSBwdWJsaWNcbiAqL1xuUmVxdWVzdEJhc2UucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhpcy5fYWJvcnRlZCA9IHRydWU7XG4gIGlmICh0aGlzLnhocikgdGhpcy54aHIuYWJvcnQoKTsgLy8gYnJvd3NlclxuICBpZiAodGhpcy5yZXEpIHtcbiAgICAvLyBOb2RlIHYxMyBoYXMgbWFqb3IgZGlmZmVyZW5jZXMgaW4gYGFib3J0KClgXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvdjEyLngvbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL3YxMy54L2xpYi9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0uanNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi92MTQueC9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzXG4gICAgLy8gKGlmIHlvdSBydW4gYSBkaWZmIGFjcm9zcyB0aGVzZSB5b3Ugd2lsbCBzZWUgdGhlIGRpZmZlcmVuY2VzKVxuICAgIC8vXG4gICAgLy8gUmVmZXJlbmNlczpcbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8zMTYzMD5cbiAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL3N1cGVyYWdlbnQvcHVsbC8xMDg0L2NvbW1pdHMvZGMxODY3OWE3YzVjY2ZjNjA0NmQ4ODIwMTVlNTEyNjg4ODk3M2JjOD5cbiAgICAvL1xuICAgIC8vIFRoYW5rcyB0byBAc2hhZG93Z2F0ZTE1IGFuZCBAbmlmdHlsZXR0dWNlXG4gICAgaWYgKFxuICAgICAgc2VtdmVyLmd0ZShwcm9jZXNzLnZlcnNpb24sICd2MTMuMC4wJykgJiZcbiAgICAgIHNlbXZlci5sdChwcm9jZXNzLnZlcnNpb24sICd2MTQuMC4wJylcbiAgICApIHtcbiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgcmVhc29uIHRoaXMgZG9lc24ndCB3b3JrIGlzIGJlY2F1c2UgaW4gdjEzIGFzIGNvbXBhcmVkIHRvIHYxNFxuICAgICAgLy8gdGhlcmUgaXMgbm8gYGNhbGxiYWNrID0gbm9wYCBzZXQgaW4gZW5kLW9mLXN0cmVhbS5qcyBhYm92ZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU3VwZXJhZ2VudCBkb2VzIG5vdCB3b3JrIGluIHYxMyBwcm9wZXJseSB3aXRoIGFib3J0KCkgZHVlIHRvIE5vZGUuanMgY29yZSBjaGFuZ2VzJ1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHNlbXZlci5ndGUocHJvY2Vzcy52ZXJzaW9uLCAndjE0LjAuMCcpKSB7XG4gICAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IHNldCBgZGVzdHJveWVkYCB0byBgdHJ1ZWAgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29ya1xuICAgICAgLy8gKHNlZSBjb3JlIGludGVybmFscyBvZiBlbmQtb2Ytc3RyZWFtLmpzIGFib3ZlIGluIHYxNCBicmFuY2ggYXMgY29tcGFyZWQgdG8gdjEyKVxuICAgICAgdGhpcy5yZXEuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcS5hYm9ydCgpOyAvLyBub2RlXG4gIH1cblxuICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICB0aGlzLmVtaXQoJ2Fib3J0Jyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hdXRoID0gZnVuY3Rpb24gKHVzZXIsIHBhc3MsIG9wdGlvbnMsIGJhc2U2NEVuY29kZXIpIHtcbiAgc3dpdGNoIChvcHRpb25zLnR5cGUpIHtcbiAgICBjYXNlICdiYXNpYyc6XG4gICAgICB0aGlzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCYXNpYyAke2Jhc2U2NEVuY29kZXIoYCR7dXNlcn06JHtwYXNzfWApfWApO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICAgIHRoaXMudXNlcm5hbWUgPSB1c2VyO1xuICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3M7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlYXJlcic6IC8vIHVzYWdlIHdvdWxkIGJlIC5hdXRoKGFjY2Vzc1Rva2VuLCB7IHR5cGU6ICdiZWFyZXInIH0pXG4gICAgICB0aGlzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt1c2VyfWApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEVuYWJsZSB0cmFuc21pc3Npb24gb2YgY29va2llcyB3aXRoIHgtZG9tYWluIHJlcXVlc3RzLlxuICpcbiAqIE5vdGUgdGhhdCBmb3IgdGhpcyB0byB3b3JrIHRoZSBvcmlnaW4gbXVzdCBub3QgYmVcbiAqIHVzaW5nIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIgd2l0aCBhIHdpbGRjYXJkLFxuICogYW5kIGFsc28gbXVzdCBzZXQgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFsc1wiXG4gKiB0byBcInRydWVcIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS53aXRoQ3JlZGVudGlhbHMgPSBmdW5jdGlvbiAob24pIHtcbiAgLy8gVGhpcyBpcyBicm93c2VyLW9ubHkgZnVuY3Rpb25hbGl0eS4gTm9kZSBzaWRlIGlzIG5vLW9wLlxuICBpZiAob24gPT09IHVuZGVmaW5lZCkgb24gPSB0cnVlO1xuICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBvbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbWF4IHJlZGlyZWN0cyB0byBgbmAuIERvZXMgbm90aGluZyBpbiBicm93c2VyIFhIUiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gblxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5yZWRpcmVjdHMgPSBmdW5jdGlvbiAobikge1xuICB0aGlzLl9tYXhSZWRpcmVjdHMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogTWF4aW11bSBzaXplIG9mIGJ1ZmZlcmVkIHJlc3BvbnNlIGJvZHksIGluIGJ5dGVzLiBDb3VudHMgdW5jb21wcmVzc2VkIHNpemUuXG4gKiBEZWZhdWx0IDIwME1CLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiBieXRlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKi9cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5tYXhSZXNwb25zZVNpemUgPSBmdW5jdGlvbiAobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICB9XG5cbiAgdGhpcy5fbWF4UmVzcG9uc2VTaXplID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnQgdG8gYSBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdCAobm90IEpTT04gc3RyaW5nKSBvZiBzY2FsYXIgcHJvcGVydGllcy5cbiAqIE5vdGUgYXMgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gcmV0dXJuIGEgdXNlZnVsIG5vbi10aGlzIHZhbHVlLFxuICogaXQgY2Fubm90IGJlIGNoYWluZWQuXG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBkZXNjcmliaW5nIG1ldGhvZCwgdXJsLCBhbmQgZGF0YSBvZiB0aGlzIHJlcXVlc3RcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgIHVybDogdGhpcy51cmwsXG4gICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICBoZWFkZXJzOiB0aGlzLl9oZWFkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogU2VuZCBgZGF0YWAgYXMgdGhlIHJlcXVlc3QgYm9keSwgZGVmYXVsdGluZyB0aGUgYC50eXBlKClgIHRvIFwianNvblwiIHdoZW5cbiAqIGFuIG9iamVjdCBpcyBnaXZlbi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgICAvLyBtYW51YWwganNvblxuICogICAgICAgcmVxdWVzdC5wb3N0KCcvdXNlcicpXG4gKiAgICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAgLnNlbmQoJ3tcIm5hbWVcIjpcInRqXCJ9JylcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBhdXRvIGpzb25cbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAuc2VuZCh7IG5hbWU6ICd0aicgfSlcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBtYW51YWwgeC13d3ctZm9ybS11cmxlbmNvZGVkXG4gKiAgICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAgLnR5cGUoJ2Zvcm0nKVxuICogICAgICAgICAuc2VuZCgnbmFtZT10aicpXG4gKiAgICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogICAgICAgLy8gYXV0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAqICAgICAgIHJlcXVlc3QucG9zdCgnL3VzZXInKVxuICogICAgICAgICAudHlwZSgnZm9ybScpXG4gKiAgICAgICAgIC5zZW5kKHsgbmFtZTogJ3RqJyB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqICAgICAgIC8vIGRlZmF1bHRzIHRvIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICogICAgICByZXF1ZXN0LnBvc3QoJy91c2VyJylcbiAqICAgICAgICAuc2VuZCgnbmFtZT10b2JpJylcbiAqICAgICAgICAuc2VuZCgnc3BlY2llcz1mZXJyZXQnKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBkYXRhXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblJlcXVlc3RCYXNlLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgaXNPYmplY3RfID0gaXNPYmplY3QoZGF0YSk7XG4gIGxldCB0eXBlID0gdGhpcy5faGVhZGVyWydjb250ZW50LXR5cGUnXTtcblxuICBpZiAodGhpcy5fZm9ybURhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIi5zZW5kKCkgY2FuJ3QgYmUgdXNlZCBpZiAuYXR0YWNoKCkgb3IgLmZpZWxkKCkgaXMgdXNlZC4gUGxlYXNlIHVzZSBvbmx5IC5zZW5kKCkgb3Igb25seSAuZmllbGQoKSAmIC5hdHRhY2goKVwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc09iamVjdF8gJiYgIXRoaXMuX2RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzSG9zdChkYXRhKSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChkYXRhICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5faXNIb3N0KHRoaXMuX2RhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbWVyZ2UgdGhlc2Ugc2VuZCBjYWxsc1wiKTtcbiAgfVxuXG4gIC8vIG1lcmdlXG4gIGlmIChpc09iamVjdF8gJiYgaXNPYmplY3QodGhpcy5fZGF0YSkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoaGFzT3duKGRhdGEsIGtleSkpIHRoaXMuX2RhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZGVmYXVsdCB0byB4LXd3dy1mb3JtLXVybGVuY29kZWRcbiAgICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnZm9ybScpO1xuICAgIHR5cGUgPSB0aGlzLl9oZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICAgIGlmICh0eXBlKSB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhID8gYCR7dGhpcy5fZGF0YX0mJHtkYXRhfWAgOiBkYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gKHRoaXMuX2RhdGEgfHwgJycpICsgZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0XyB8fCB0aGlzLl9pc0hvc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdG8ganNvblxuICBpZiAoIXR5cGUpIHRoaXMudHlwZSgnanNvbicpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU29ydCBgcXVlcnlzdHJpbmdgIGJ5IHRoZSBzb3J0IGZ1bmN0aW9uXG4gKlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgIC8vIGRlZmF1bHQgb3JkZXJcbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KClcbiAqICAgICAgICAgLmVuZChjYWxsYmFjaylcbiAqXG4gKiAgICAgICAvLyBjdXN0b21pemVkIHNvcnQgZnVuY3Rpb25cbiAqICAgICAgIHJlcXVlc3QuZ2V0KCcvdXNlcicpXG4gKiAgICAgICAgIC5xdWVyeSgnbmFtZT1OaWNrJylcbiAqICAgICAgICAgLnF1ZXJ5KCdzZWFyY2g9TWFubnknKVxuICogICAgICAgICAuc29ydFF1ZXJ5KGZ1bmN0aW9uKGEsIGIpe1xuICogICAgICAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICogICAgICAgICB9KVxuICogICAgICAgICAuZW5kKGNhbGxiYWNrKVxuICpcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzb3J0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdEJhc2UucHJvdG90eXBlLnNvcnRRdWVyeSA9IGZ1bmN0aW9uIChzb3J0KSB7XG4gIC8vIF9zb3J0IGRlZmF1bHQgdG8gdHJ1ZSBidXQgb3RoZXJ3aXNlIGNhbiBiZSBhIGZ1bmN0aW9uIG9yIGJvb2xlYW5cbiAgdGhpcy5fc29ydCA9IHR5cGVvZiBzb3J0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBzb3J0O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ29tcG9zZSBxdWVyeXN0cmluZyB0byBhcHBlbmQgdG8gcmVxLnVybFxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5SZXF1ZXN0QmFzZS5wcm90b3R5cGUuX2ZpbmFsaXplUXVlcnlTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcXVlcnkuam9pbignJicpO1xuICBpZiAocXVlcnkpIHtcbiAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeTtcbiAgfVxuXG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7IC8vIE1ha2VzIHRoZSBjYWxsIGlkZW1wb3RlbnRcblxuICBpZiAodGhpcy5fc29ydCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBxdWVyeUFycmF5ID0gdGhpcy51cmwuc2xpY2UoaW5kZXggKyAxKS5zcGxpdCgnJicpO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCh0aGlzLl9zb3J0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5QXJyYXkuc29ydCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnNsaWNlKDAsIGluZGV4KSArICc/JyArIHF1ZXJ5QXJyYXkuam9pbignJicpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRm9yIGJhY2t3YXJkcyBjb21wYXQgb25seVxuUmVxdWVzdEJhc2UucHJvdG90eXBlLl9hcHBlbmRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCcpO1xufTtcblxuLyoqXG4gKiBJbnZva2UgY2FsbGJhY2sgd2l0aCB0aW1lb3V0IGVycm9yLlxuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fdGltZW91dEVycm9yID0gZnVuY3Rpb24gKHJlYXNvbiwgdGltZW91dCwgZXJybm8pIHtcbiAgaWYgKHRoaXMuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgJHtyZWFzb24gKyB0aW1lb3V0fW1zIGV4Y2VlZGVkYCk7XG4gIGVycm9yLnRpbWVvdXQgPSB0aW1lb3V0O1xuICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gIGVycm9yLmVycm5vID0gZXJybm87XG4gIHRoaXMudGltZWRvdXQgPSB0cnVlO1xuICB0aGlzLnRpbWVkb3V0RXJyb3IgPSBlcnJvcjtcbiAgdGhpcy5hYm9ydCgpO1xuICB0aGlzLmNhbGxiYWNrKGVycm9yKTtcbn07XG5cblJlcXVlc3RCYXNlLnByb3RvdHlwZS5fc2V0VGltZW91dHMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIC8vIGRlYWRsaW5lXG4gIGlmICh0aGlzLl90aW1lb3V0ICYmICF0aGlzLl90aW1lcikge1xuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZWxmLl90aW1lb3V0RXJyb3IoJ1RpbWVvdXQgb2YgJywgc2VsZi5fdGltZW91dCwgJ0VUSU1FJyk7XG4gICAgfSwgdGhpcy5fdGltZW91dCk7XG4gIH1cblxuICAvLyByZXNwb25zZSB0aW1lb3V0XG4gIGlmICh0aGlzLl9yZXNwb25zZVRpbWVvdXQgJiYgIXRoaXMuX3Jlc3BvbnNlVGltZW91dFRpbWVyKSB7XG4gICAgdGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNlbGYuX3RpbWVvdXRFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIHRpbWVvdXQgb2YgJyxcbiAgICAgICAgc2VsZi5fcmVzcG9uc2VUaW1lb3V0LFxuICAgICAgICAnRVRJTUVET1VUJ1xuICAgICAgKTtcbiAgICB9LCB0aGlzLl9yZXNwb25zZVRpbWVvdXQpO1xuICB9XG59O1xuIl19 \ No newline at end of file diff --git a/build/node_modules/superagent/lib/response-base.js b/build/node_modules/superagent/lib/response-base.js index 3ec014fe..80d59cb8 100644 --- a/build/node_modules/superagent/lib/response-base.js +++ b/build/node_modules/superagent/lib/response-base.js @@ -1,42 +1,22 @@ -'use strict'; +"use strict"; /** * Module dependencies. */ - var utils = require('./utils'); - /** * Expose `ResponseBase`. */ -module.exports = ResponseBase; +module.exports = ResponseBase; /** * Initialize a new `ResponseBase`. * * @api public */ -function ResponseBase(obj) { - if (obj) return mixin(obj); -} - -/** - * Mixin the prototype properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in ResponseBase.prototype) { - obj[key] = ResponseBase.prototype[key]; - } - return obj; -} - +function ResponseBase() {} /** * Get case-insensitive `field` value. * @@ -45,10 +25,10 @@ function mixin(obj) { * @api public */ -ResponseBase.prototype.get = function(field) { + +ResponseBase.prototype.get = function (field) { return this.header[field.toLowerCase()]; }; - /** * Set header related properties: * @@ -61,30 +41,29 @@ ResponseBase.prototype.get = function(field) { * @api private */ -ResponseBase.prototype._setHeaderProperties = function(header){ - // TODO: moar! - // TODO: make this a util - // content-type - var ct = header['content-type'] || ''; - this.type = utils.type(ct); +ResponseBase.prototype._setHeaderProperties = function (header) { + // TODO: moar! + // TODO: make this a util + // content-type + var ct = header['content-type'] || ''; + this.type = utils.type(ct); // params - // params - var params = utils.params(ct); - for (var key in params) this[key] = params[key]; + var parameters = utils.params(ct); - this.links = {}; + for (var key in parameters) { + if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key]; + } - // links - try { - if (header.link) { - this.links = utils.parseLinks(header.link); - } - } catch (err) { - // ignore + this.links = {}; // links + + try { + if (header.link) { + this.links = utils.parseLinks(header.link); } + } catch (_unused) {// ignore + } }; - /** * Set flags such as `.ok` based on `status`. * @@ -106,31 +85,29 @@ ResponseBase.prototype._setHeaderProperties = function(header){ * @api private */ -ResponseBase.prototype._setStatusProperties = function(status){ - var type = status / 100 | 0; - - // status / class - this.status = this.statusCode = status; - this.statusType = type; - - // basics - this.info = 1 == type; - this.ok = 2 == type; - this.redirect = 3 == type; - this.clientError = 4 == type; - this.serverError = 5 == type; - this.error = (4 == type || 5 == type) - ? this.toError() - : false; - - // sugar - this.created = 201 == status; - this.accepted = 202 == status; - this.noContent = 204 == status; - this.badRequest = 400 == status; - this.unauthorized = 401 == status; - this.notAcceptable = 406 == status; - this.forbidden = 403 == status; - this.notFound = 404 == status; - this.unprocessableEntity = 422 == status; + +ResponseBase.prototype._setStatusProperties = function (status) { + var type = Math.trunc(status / 100); // status / class + + this.statusCode = status; + this.status = this.statusCode; + this.statusType = type; // basics + + this.info = type === 1; + this.ok = type === 2; + this.redirect = type === 3; + this.clientError = type === 4; + this.serverError = type === 5; + this.error = type === 4 || type === 5 ? this.toError() : false; // sugar + + this.created = status === 201; + this.accepted = status === 202; + this.noContent = status === 204; + this.badRequest = status === 400; + this.unauthorized = status === 401; + this.notAcceptable = status === 406; + this.forbidden = status === 403; + this.notFound = status === 404; + this.unprocessableEntity = status === 422; }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXNwb25zZS1iYXNlLmpzIl0sIm5hbWVzIjpbInV0aWxzIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJSZXNwb25zZUJhc2UiLCJwcm90b3R5cGUiLCJnZXQiLCJmaWVsZCIsImhlYWRlciIsInRvTG93ZXJDYXNlIiwiX3NldEhlYWRlclByb3BlcnRpZXMiLCJjdCIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicGFyYW1zIiwia2V5IiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwibGlua3MiLCJsaW5rIiwicGFyc2VMaW5rcyIsIl9zZXRTdGF0dXNQcm9wZXJ0aWVzIiwic3RhdHVzIiwiTWF0aCIsInRydW5jIiwic3RhdHVzQ29kZSIsInN0YXR1c1R5cGUiLCJpbmZvIiwib2siLCJyZWRpcmVjdCIsImNsaWVudEVycm9yIiwic2VydmVyRXJyb3IiLCJlcnJvciIsInRvRXJyb3IiLCJjcmVhdGVkIiwiYWNjZXB0ZWQiLCJub0NvbnRlbnQiLCJiYWRSZXF1ZXN0IiwidW5hdXRob3JpemVkIiwibm90QWNjZXB0YWJsZSIsImZvcmJpZGRlbiIsIm5vdEZvdW5kIiwidW5wcm9jZXNzYWJsZUVudGl0eSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFELENBQXJCO0FBRUE7QUFDQTtBQUNBOzs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQyxZQUFqQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0EsWUFBVCxHQUF3QixDQUFFO0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQUEsWUFBWSxDQUFDQyxTQUFiLENBQXVCQyxHQUF2QixHQUE2QixVQUFVQyxLQUFWLEVBQWlCO0FBQzVDLFNBQU8sS0FBS0MsTUFBTCxDQUFZRCxLQUFLLENBQUNFLFdBQU4sRUFBWixDQUFQO0FBQ0QsQ0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBTCxZQUFZLENBQUNDLFNBQWIsQ0FBdUJLLG9CQUF2QixHQUE4QyxVQUFVRixNQUFWLEVBQWtCO0FBQzlEO0FBQ0E7QUFFQTtBQUNBLE1BQU1HLEVBQUUsR0FBR0gsTUFBTSxDQUFDLGNBQUQsQ0FBTixJQUEwQixFQUFyQztBQUNBLE9BQUtJLElBQUwsR0FBWVosS0FBSyxDQUFDWSxJQUFOLENBQVdELEVBQVgsQ0FBWixDQU44RCxDQVE5RDs7QUFDQSxNQUFNRSxVQUFVLEdBQUdiLEtBQUssQ0FBQ2MsTUFBTixDQUFhSCxFQUFiLENBQW5COztBQUNBLE9BQUssSUFBTUksR0FBWCxJQUFrQkYsVUFBbEIsRUFBOEI7QUFDNUIsUUFBSUcsTUFBTSxDQUFDWCxTQUFQLENBQWlCWSxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNMLFVBQXJDLEVBQWlERSxHQUFqRCxDQUFKLEVBQ0UsS0FBS0EsR0FBTCxJQUFZRixVQUFVLENBQUNFLEdBQUQsQ0FBdEI7QUFDSDs7QUFFRCxPQUFLSSxLQUFMLEdBQWEsRUFBYixDQWY4RCxDQWlCOUQ7O0FBQ0EsTUFBSTtBQUNGLFFBQUlYLE1BQU0sQ0FBQ1ksSUFBWCxFQUFpQjtBQUNmLFdBQUtELEtBQUwsR0FBYW5CLEtBQUssQ0FBQ3FCLFVBQU4sQ0FBaUJiLE1BQU0sQ0FBQ1ksSUFBeEIsQ0FBYjtBQUNEO0FBQ0YsR0FKRCxDQUlFLGdCQUFNLENBQ047QUFDRDtBQUNGLENBekJEO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBaEIsWUFBWSxDQUFDQyxTQUFiLENBQXVCaUIsb0JBQXZCLEdBQThDLFVBQVVDLE1BQVYsRUFBa0I7QUFDOUQsTUFBTVgsSUFBSSxHQUFHWSxJQUFJLENBQUNDLEtBQUwsQ0FBV0YsTUFBTSxHQUFHLEdBQXBCLENBQWIsQ0FEOEQsQ0FHOUQ7O0FBQ0EsT0FBS0csVUFBTCxHQUFrQkgsTUFBbEI7QUFDQSxPQUFLQSxNQUFMLEdBQWMsS0FBS0csVUFBbkI7QUFDQSxPQUFLQyxVQUFMLEdBQWtCZixJQUFsQixDQU44RCxDQVE5RDs7QUFDQSxPQUFLZ0IsSUFBTCxHQUFZaEIsSUFBSSxLQUFLLENBQXJCO0FBQ0EsT0FBS2lCLEVBQUwsR0FBVWpCLElBQUksS0FBSyxDQUFuQjtBQUNBLE9BQUtrQixRQUFMLEdBQWdCbEIsSUFBSSxLQUFLLENBQXpCO0FBQ0EsT0FBS21CLFdBQUwsR0FBbUJuQixJQUFJLEtBQUssQ0FBNUI7QUFDQSxPQUFLb0IsV0FBTCxHQUFtQnBCLElBQUksS0FBSyxDQUE1QjtBQUNBLE9BQUtxQixLQUFMLEdBQWFyQixJQUFJLEtBQUssQ0FBVCxJQUFjQSxJQUFJLEtBQUssQ0FBdkIsR0FBMkIsS0FBS3NCLE9BQUwsRUFBM0IsR0FBNEMsS0FBekQsQ0FkOEQsQ0FnQjlEOztBQUNBLE9BQUtDLE9BQUwsR0FBZVosTUFBTSxLQUFLLEdBQTFCO0FBQ0EsT0FBS2EsUUFBTCxHQUFnQmIsTUFBTSxLQUFLLEdBQTNCO0FBQ0EsT0FBS2MsU0FBTCxHQUFpQmQsTUFBTSxLQUFLLEdBQTVCO0FBQ0EsT0FBS2UsVUFBTCxHQUFrQmYsTUFBTSxLQUFLLEdBQTdCO0FBQ0EsT0FBS2dCLFlBQUwsR0FBb0JoQixNQUFNLEtBQUssR0FBL0I7QUFDQSxPQUFLaUIsYUFBTCxHQUFxQmpCLE1BQU0sS0FBSyxHQUFoQztBQUNBLE9BQUtrQixTQUFMLEdBQWlCbEIsTUFBTSxLQUFLLEdBQTVCO0FBQ0EsT0FBS21CLFFBQUwsR0FBZ0JuQixNQUFNLEtBQUssR0FBM0I7QUFDQSxPQUFLb0IsbUJBQUwsR0FBMkJwQixNQUFNLEtBQUssR0FBdEM7QUFDRCxDQTFCRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlQmFzZWAuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZUJhc2U7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVzcG9uc2VCYXNlYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlQmFzZSgpIHt9XG5cbi8qKlxuICogR2V0IGNhc2UtaW5zZW5zaXRpdmUgYGZpZWxkYCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVzcG9uc2VCYXNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcbiAgcmV0dXJuIHRoaXMuaGVhZGVyW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xufTtcblxuLyoqXG4gKiBTZXQgaGVhZGVyIHJlbGF0ZWQgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gYC50eXBlYCB0aGUgY29udGVudCB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gKlxuICogQSByZXNwb25zZSBvZiBcIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiXG4gKiB3aWxsIHByb3ZpZGUgeW91IHdpdGggYSBgLnR5cGVgIG9mIFwidGV4dC9wbGFpblwiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuX3NldEhlYWRlclByb3BlcnRpZXMgPSBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gIC8vIFRPRE86IG1vYXIhXG4gIC8vIFRPRE86IG1ha2UgdGhpcyBhIHV0aWxcblxuICAvLyBjb250ZW50LXR5cGVcbiAgY29uc3QgY3QgPSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddIHx8ICcnO1xuICB0aGlzLnR5cGUgPSB1dGlscy50eXBlKGN0KTtcblxuICAvLyBwYXJhbXNcbiAgY29uc3QgcGFyYW1ldGVycyA9IHV0aWxzLnBhcmFtcyhjdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtZXRlcnMsIGtleSkpXG4gICAgICB0aGlzW2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XG4gIH1cblxuICB0aGlzLmxpbmtzID0ge307XG5cbiAgLy8gbGlua3NcbiAgdHJ5IHtcbiAgICBpZiAoaGVhZGVyLmxpbmspIHtcbiAgICAgIHRoaXMubGlua3MgPSB1dGlscy5wYXJzZUxpbmtzKGhlYWRlci5saW5rKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG59O1xuXG4vKipcbiAqIFNldCBmbGFncyBzdWNoIGFzIGAub2tgIGJhc2VkIG9uIGBzdGF0dXNgLlxuICpcbiAqIEZvciBleGFtcGxlIGEgMnh4IHJlc3BvbnNlIHdpbGwgZ2l2ZSB5b3UgYSBgLm9rYCBvZiBfX3RydWVfX1xuICogd2hlcmVhcyA1eHggd2lsbCBiZSBfX2ZhbHNlX18gYW5kIGAuZXJyb3JgIHdpbGwgYmUgX190cnVlX18uIFRoZVxuICogYC5jbGllbnRFcnJvcmAgYW5kIGAuc2VydmVyRXJyb3JgIGFyZSBhbHNvIGF2YWlsYWJsZSB0byBiZSBtb3JlXG4gKiBzcGVjaWZpYywgYW5kIGAuc3RhdHVzVHlwZWAgaXMgdGhlIGNsYXNzIG9mIGVycm9yIHJhbmdpbmcgZnJvbSAxLi41XG4gKiBzb21ldGltZXMgdXNlZnVsIGZvciBtYXBwaW5nIHJlc3BvbmQgY29sb3JzIGV0Yy5cbiAqXG4gKiBcInN1Z2FyXCIgcHJvcGVydGllcyBhcmUgYWxzbyBkZWZpbmVkIGZvciBjb21tb24gY2FzZXMuIEN1cnJlbnRseSBwcm92aWRpbmc6XG4gKlxuICogICAtIC5ub0NvbnRlbnRcbiAqICAgLSAuYmFkUmVxdWVzdFxuICogICAtIC51bmF1dGhvcml6ZWRcbiAqICAgLSAubm90QWNjZXB0YWJsZVxuICogICAtIC5ub3RGb3VuZFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblJlc3BvbnNlQmFzZS5wcm90b3R5cGUuX3NldFN0YXR1c1Byb3BlcnRpZXMgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gIGNvbnN0IHR5cGUgPSBNYXRoLnRydW5jKHN0YXR1cyAvIDEwMCk7XG5cbiAgLy8gc3RhdHVzIC8gY2xhc3NcbiAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICB0aGlzLnN0YXR1cyA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgdGhpcy5zdGF0dXNUeXBlID0gdHlwZTtcblxuICAvLyBiYXNpY3NcbiAgdGhpcy5pbmZvID0gdHlwZSA9PT0gMTtcbiAgdGhpcy5vayA9IHR5cGUgPT09IDI7XG4gIHRoaXMucmVkaXJlY3QgPSB0eXBlID09PSAzO1xuICB0aGlzLmNsaWVudEVycm9yID0gdHlwZSA9PT0gNDtcbiAgdGhpcy5zZXJ2ZXJFcnJvciA9IHR5cGUgPT09IDU7XG4gIHRoaXMuZXJyb3IgPSB0eXBlID09PSA0IHx8IHR5cGUgPT09IDUgPyB0aGlzLnRvRXJyb3IoKSA6IGZhbHNlO1xuXG4gIC8vIHN1Z2FyXG4gIHRoaXMuY3JlYXRlZCA9IHN0YXR1cyA9PT0gMjAxO1xuICB0aGlzLmFjY2VwdGVkID0gc3RhdHVzID09PSAyMDI7XG4gIHRoaXMubm9Db250ZW50ID0gc3RhdHVzID09PSAyMDQ7XG4gIHRoaXMuYmFkUmVxdWVzdCA9IHN0YXR1cyA9PT0gNDAwO1xuICB0aGlzLnVuYXV0aG9yaXplZCA9IHN0YXR1cyA9PT0gNDAxO1xuICB0aGlzLm5vdEFjY2VwdGFibGUgPSBzdGF0dXMgPT09IDQwNjtcbiAgdGhpcy5mb3JiaWRkZW4gPSBzdGF0dXMgPT09IDQwMztcbiAgdGhpcy5ub3RGb3VuZCA9IHN0YXR1cyA9PT0gNDA0O1xuICB0aGlzLnVucHJvY2Vzc2FibGVFbnRpdHkgPSBzdGF0dXMgPT09IDQyMjtcbn07XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/lib/utils.js b/build/node_modules/superagent/lib/utils.js index a7e1af1c..82c0f151 100644 --- a/build/node_modules/superagent/lib/utils.js +++ b/build/node_modules/superagent/lib/utils.js @@ -1,4 +1,12 @@ -'use strict'; +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } /** * Return the mime type for the given `str`. @@ -7,11 +15,9 @@ * @return {String} * @api private */ - -exports.type = function(str){ - return str.split(/ *; */).shift(); +exports.type = function (string_) { + return string_.split(/ *; */).shift(); }; - /** * Return header field parameters. * @@ -20,17 +26,31 @@ exports.type = function(str){ * @api private */ -exports.params = function(str){ - return str.split(/ *; */).reduce(function(obj, str){ - var parts = str.split(/ *= */); - var key = parts.shift(); - var val = parts.shift(); - if (key && val) obj[key] = val; - return obj; - }, {}); -}; +exports.params = function (value) { + var object = {}; + + var _iterator = _createForOfIteratorHelper(value.split(/ *; */)), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var string_ = _step.value; + var parts = string_.split(/ *= */); + var key = parts.shift(); + var _value = parts.shift(); + + if (key && _value) object[key] = _value; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + + return object; +}; /** * Parse Link header fields. * @@ -39,16 +59,29 @@ exports.params = function(str){ * @api private */ -exports.parseLinks = function(str){ - return str.split(/ *, */).reduce(function(obj, str){ - var parts = str.split(/ *; */); - var url = parts[0].slice(1, -1); - var rel = parts[1].split(/ *= */)[1].slice(1, -1); - obj[rel] = url; - return obj; - }, {}); -}; +exports.parseLinks = function (value) { + var object = {}; + + var _iterator2 = _createForOfIteratorHelper(value.split(/ *, */)), + _step2; + + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var string_ = _step2.value; + var parts = string_.split(/ *; */); + var url = parts[0].slice(1, -1); + var rel = parts[1].split(/ *= */)[1].slice(1, -1); + object[rel] = url; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + + return object; +}; /** * Strip content related fields from `header`. * @@ -57,15 +90,53 @@ exports.parseLinks = function(str){ * @api private */ -exports.cleanHeader = function(header, changesOrigin){ + +exports.cleanHeader = function (header, changesOrigin) { delete header['content-type']; delete header['content-length']; delete header['transfer-encoding']; - delete header['host']; - // secuirty + delete header.host; // secuirty + if (changesOrigin) { - delete header['authorization']; - delete header['cookie']; + delete header.authorization; + delete header.cookie; } + return header; }; +/** + * Check if `obj` is an object. + * + * @param {Object} object + * @return {Boolean} + * @api private + */ + + +exports.isObject = function (object) { + return object !== null && _typeof(object) === 'object'; +}; +/** + * Object.hasOwn fallback/polyfill. + * + * @type {(object: object, property: string) => boolean} object + * @api private + */ + + +exports.hasOwn = Object.hasOwn || function (object, property) { + if (object == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + return Object.prototype.hasOwnProperty.call(new Object(object), property); +}; + +exports.mixin = function (target, source) { + for (var key in source) { + if (exports.hasOwn(source, key)) { + target[key] = source[key]; + } + } +}; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJleHBvcnRzIiwidHlwZSIsInN0cmluZ18iLCJzcGxpdCIsInNoaWZ0IiwicGFyYW1zIiwidmFsdWUiLCJvYmplY3QiLCJwYXJ0cyIsImtleSIsInBhcnNlTGlua3MiLCJ1cmwiLCJzbGljZSIsInJlbCIsImNsZWFuSGVhZGVyIiwiaGVhZGVyIiwiY2hhbmdlc09yaWdpbiIsImhvc3QiLCJhdXRob3JpemF0aW9uIiwiY29va2llIiwiaXNPYmplY3QiLCJoYXNPd24iLCJPYmplY3QiLCJwcm9wZXJ0eSIsIlR5cGVFcnJvciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm1peGluIiwidGFyZ2V0Iiwic291cmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQUEsT0FBTyxDQUFDQyxJQUFSLEdBQWUsVUFBQ0MsT0FBRDtBQUFBLFNBQWFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFjLE9BQWQsRUFBdUJDLEtBQXZCLEVBQWI7QUFBQSxDQUFmO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBSixPQUFPLENBQUNLLE1BQVIsR0FBaUIsVUFBQ0MsS0FBRCxFQUFXO0FBQzFCLE1BQU1DLE1BQU0sR0FBRyxFQUFmOztBQUQwQiw2Q0FFSkQsS0FBSyxDQUFDSCxLQUFOLENBQVksT0FBWixDQUZJO0FBQUE7O0FBQUE7QUFFMUIsd0RBQTRDO0FBQUEsVUFBakNELE9BQWlDO0FBQzFDLFVBQU1NLEtBQUssR0FBR04sT0FBTyxDQUFDQyxLQUFSLENBQWMsT0FBZCxDQUFkO0FBQ0EsVUFBTU0sR0FBRyxHQUFHRCxLQUFLLENBQUNKLEtBQU4sRUFBWjs7QUFDQSxVQUFNRSxNQUFLLEdBQUdFLEtBQUssQ0FBQ0osS0FBTixFQUFkOztBQUVBLFVBQUlLLEdBQUcsSUFBSUgsTUFBWCxFQUFrQkMsTUFBTSxDQUFDRSxHQUFELENBQU4sR0FBY0gsTUFBZDtBQUNuQjtBQVJ5QjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVUxQixTQUFPQyxNQUFQO0FBQ0QsQ0FYRDtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQVAsT0FBTyxDQUFDVSxVQUFSLEdBQXFCLFVBQUNKLEtBQUQsRUFBVztBQUM5QixNQUFNQyxNQUFNLEdBQUcsRUFBZjs7QUFEOEIsOENBRVJELEtBQUssQ0FBQ0gsS0FBTixDQUFZLE9BQVosQ0FGUTtBQUFBOztBQUFBO0FBRTlCLDJEQUE0QztBQUFBLFVBQWpDRCxPQUFpQztBQUMxQyxVQUFNTSxLQUFLLEdBQUdOLE9BQU8sQ0FBQ0MsS0FBUixDQUFjLE9BQWQsQ0FBZDtBQUNBLFVBQU1RLEdBQUcsR0FBR0gsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTSSxLQUFULENBQWUsQ0FBZixFQUFrQixDQUFDLENBQW5CLENBQVo7QUFDQSxVQUFNQyxHQUFHLEdBQUdMLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0wsS0FBVCxDQUFlLE9BQWYsRUFBd0IsQ0FBeEIsRUFBMkJTLEtBQTNCLENBQWlDLENBQWpDLEVBQW9DLENBQUMsQ0FBckMsQ0FBWjtBQUNBTCxNQUFBQSxNQUFNLENBQUNNLEdBQUQsQ0FBTixHQUFjRixHQUFkO0FBQ0Q7QUFQNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFTOUIsU0FBT0osTUFBUDtBQUNELENBVkQ7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUFQLE9BQU8sQ0FBQ2MsV0FBUixHQUFzQixVQUFDQyxNQUFELEVBQVNDLGFBQVQsRUFBMkI7QUFDL0MsU0FBT0QsTUFBTSxDQUFDLGNBQUQsQ0FBYjtBQUNBLFNBQU9BLE1BQU0sQ0FBQyxnQkFBRCxDQUFiO0FBQ0EsU0FBT0EsTUFBTSxDQUFDLG1CQUFELENBQWI7QUFDQSxTQUFPQSxNQUFNLENBQUNFLElBQWQsQ0FKK0MsQ0FLL0M7O0FBQ0EsTUFBSUQsYUFBSixFQUFtQjtBQUNqQixXQUFPRCxNQUFNLENBQUNHLGFBQWQ7QUFDQSxXQUFPSCxNQUFNLENBQUNJLE1BQWQ7QUFDRDs7QUFFRCxTQUFPSixNQUFQO0FBQ0QsQ0FaRDtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQWYsT0FBTyxDQUFDb0IsUUFBUixHQUFtQixVQUFDYixNQUFELEVBQVk7QUFDN0IsU0FBT0EsTUFBTSxLQUFLLElBQVgsSUFBbUIsUUFBT0EsTUFBUCxNQUFrQixRQUE1QztBQUNELENBRkQ7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBUCxPQUFPLENBQUNxQixNQUFSLEdBQ0VDLE1BQU0sQ0FBQ0QsTUFBUCxJQUNBLFVBQVVkLE1BQVYsRUFBa0JnQixRQUFsQixFQUE0QjtBQUMxQixNQUFJaEIsTUFBTSxJQUFJLElBQWQsRUFBb0I7QUFDbEIsVUFBTSxJQUFJaUIsU0FBSixDQUFjLDRDQUFkLENBQU47QUFDRDs7QUFFRCxTQUFPRixNQUFNLENBQUNHLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQyxJQUFJTCxNQUFKLENBQVdmLE1BQVgsQ0FBckMsRUFBeURnQixRQUF6RCxDQUFQO0FBQ0QsQ0FSSDs7QUFVQXZCLE9BQU8sQ0FBQzRCLEtBQVIsR0FBZ0IsVUFBQ0MsTUFBRCxFQUFTQyxNQUFULEVBQW9CO0FBQ2xDLE9BQUssSUFBTXJCLEdBQVgsSUFBa0JxQixNQUFsQixFQUEwQjtBQUN4QixRQUFJOUIsT0FBTyxDQUFDcUIsTUFBUixDQUFlUyxNQUFmLEVBQXVCckIsR0FBdkIsQ0FBSixFQUFpQztBQUMvQm9CLE1BQUFBLE1BQU0sQ0FBQ3BCLEdBQUQsQ0FBTixHQUFjcUIsTUFBTSxDQUFDckIsR0FBRCxDQUFwQjtBQUNEO0FBQ0Y7QUFDRixDQU5EIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm4gdGhlIG1pbWUgdHlwZSBmb3IgdGhlIGdpdmVuIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMudHlwZSA9IChzdHJpbmdfKSA9PiBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pLnNoaWZ0KCk7XG5cbi8qKlxuICogUmV0dXJuIGhlYWRlciBmaWVsZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyYW1zID0gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IG9iamVjdCA9IHt9O1xuICBmb3IgKGNvbnN0IHN0cmluZ18gb2YgdmFsdWUuc3BsaXQoLyAqOyAqLykpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ18uc3BsaXQoLyAqPSAqLyk7XG4gICAgY29uc3Qga2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoa2V5ICYmIHZhbHVlKSBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbi8qKlxuICogUGFyc2UgTGluayBoZWFkZXIgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMucGFyc2VMaW5rcyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgZm9yIChjb25zdCBzdHJpbmdfIG9mIHZhbHVlLnNwbGl0KC8gKiwgKi8pKSB7XG4gICAgY29uc3QgcGFydHMgPSBzdHJpbmdfLnNwbGl0KC8gKjsgKi8pO1xuICAgIGNvbnN0IHVybCA9IHBhcnRzWzBdLnNsaWNlKDEsIC0xKTtcbiAgICBjb25zdCByZWwgPSBwYXJ0c1sxXS5zcGxpdCgvICo9ICovKVsxXS5zbGljZSgxLCAtMSk7XG4gICAgb2JqZWN0W3JlbF0gPSB1cmw7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBTdHJpcCBjb250ZW50IHJlbGF0ZWQgZmllbGRzIGZyb20gYGhlYWRlcmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY2xlYW5IZWFkZXIgPSAoaGVhZGVyLCBjaGFuZ2VzT3JpZ2luKSA9PiB7XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICBkZWxldGUgaGVhZGVyWydjb250ZW50LWxlbmd0aCddO1xuICBkZWxldGUgaGVhZGVyWyd0cmFuc2Zlci1lbmNvZGluZyddO1xuICBkZWxldGUgaGVhZGVyLmhvc3Q7XG4gIC8vIHNlY3VpcnR5XG4gIGlmIChjaGFuZ2VzT3JpZ2luKSB7XG4gICAgZGVsZXRlIGhlYWRlci5hdXRob3JpemF0aW9uO1xuICAgIGRlbGV0ZSBoZWFkZXIuY29va2llO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZXhwb3J0cy5pc09iamVjdCA9IChvYmplY3QpID0+IHtcbiAgcmV0dXJuIG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jztcbn07XG5cbi8qKlxuICogT2JqZWN0Lmhhc093biBmYWxsYmFjay9wb2x5ZmlsbC5cbiAqXG4gKiBAdHlwZSB7KG9iamVjdDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nKSA9PiBib29sZWFufSBvYmplY3RcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3IE9iamVjdChvYmplY3QpLCBwcm9wZXJ0eSk7XG4gIH07XG5cbmV4cG9ydHMubWl4aW4gPSAodGFyZ2V0LCBzb3VyY2UpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGV4cG9ydHMuaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbn07XG4iXX0= \ No newline at end of file diff --git a/build/node_modules/superagent/package.json b/build/node_modules/superagent/package.json index e5d8a000..7f134591 100644 --- a/build/node_modules/superagent/package.json +++ b/build/node_modules/superagent/package.json @@ -1,43 +1,45 @@ { - "_from": "superagent@^3.8.3", - "_id": "superagent@3.8.3", + "_from": "superagent@^7.1.1", + "_id": "superagent@7.1.1", "_inBundle": false, - "_integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "_integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", "_location": "/superagent", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "superagent@^3.8.3", + "raw": "superagent@^7.1.1", "name": "superagent", "escapedName": "superagent", - "rawSpec": "^3.8.3", + "rawSpec": "^7.1.1", "saveSpec": null, - "fetchSpec": "^3.8.3" + "fetchSpec": "^7.1.1" }, "_requiredBy": [ "/" ], - "_resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "_shasum": "460ea0dbdb7d5b11bc4f78deba565f86a178e128", - "_spec": "superagent@^3.8.3", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/superagent/-/superagent-7.1.1.tgz", + "_shasum": "2ab187d38c3078c31c3771c0b751f10163a27136", + "_spec": "superagent@^7.1.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "browser": { + "./src/node/index.js": "./src/client.js", "./lib/node/index.js": "./lib/client.js", - "./test/support/server.js": "./test/support/blank.js" + "./test/support/server.js": "./test/support/blank.js", + "semver": false }, "bugs": { "url": "https://github.com/visionmedia/superagent/issues" }, "bundleDependencies": false, - "component": { - "scripts": { - "superagent": "lib/client.js" - } + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] }, "contributors": [ { @@ -51,57 +53,230 @@ { "name": "Hunter Loftis", "email": "hunter@hunterloftis.com" + }, + { + "name": "Nick Baugh", + "email": "niftylettuce@gmail.com" } ], "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.3", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "^2.5.0", + "qs": "^6.10.1", + "readable-stream": "^3.6.0", + "semver": "^7.3.5" }, "deprecated": false, "description": "elegant & feature rich browser / node HTTP with a fluent API", "devDependencies": { - "Base64": "^1.0.1", + "@babel/cli": "^7.16.0", + "@babel/core": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@commitlint/cli": "^15.0.0", + "@commitlint/config-conventional": "^15.0.0", + "Base64": "^1.1.0", + "babelify": "^10.0.0", "basic-auth-connect": "^1.0.0", - "body-parser": "^1.18.2", - "browserify": "^14.1.0", - "cookie-parser": "^1.4.3", - "express": "^4.16.3", - "express-session": "^1.15.6", - "marked": "0.3.12", - "mocha": "^3.5.3", - "multer": "^1.3.0", - "should": "^11.2.0", + "body-parser": "^1.19.0", + "browserify": "^17.0.0", + "codecov": "^3.8.3", + "cookie-parser": "^1.4.6", + "cross-env": "^7.0.3", + "eslint": "^8.3.0", + "eslint-config-xo-lass": "^1.0.6", + "eslint-plugin-compat": "^4.0.0", + "eslint-plugin-node": "^11.1.0", + "express": "^4.17.1", + "express-session": "^1.17.2", + "fixpack": "^4.0.0", + "get-port": "4.2.0", + "husky": "^7.0.4", + "lint-staged": "^12.1.2", + "marked": "^2.0.0", + "mocha": "6.2.2", + "multer": "^1.4.3", + "nyc": "^15.1.0", + "remark-cli": "^10.0.1", + "remark-preset-github": "^4.0.1", + "rimraf": "^3.0.2", + "should": "^13.2.3", "should-http": "^0.1.1", - "zuul": "^3.11.1" + "tinyify": "^3.0.0", + "xo": "^0.47.0", + "zuul": "^3.12.0" }, "engines": { - "node": ">= 4.0" + "node": ">=6.4.0 <13 || >=14" }, - "homepage": "https://github.com/visionmedia/superagent#readme", + "files": [ + "dist/*.js", + "lib/**/*.js" + ], + "homepage": "https://github.com/visionmedia/superagent", + "jsdelivr": "dist/superagent.min.js", "keywords": [ - "http", + "agent", + "ajax", "ajax", + "api", + "async", + "await", + "axios", + "cancel", + "client", + "frisbee", + "got", + "http", + "http", + "https", + "ky", + "promise", + "promise", + "promises", + "request", "request", - "agent" + "requests", + "response", + "rest", + "retry", + "super", + "superagent", + "timeout", + "transform", + "xhr", + "xmlhttprequest" ], "license": "MIT", - "main": "./lib/node/index.js", + "lint-staged": { + "linters": { + "*.js": [ + "xo --fix", + "git add" + ], + "*.md": [ + "remark . -qfo", + "git add" + ], + "package.json": [ + "fixpack", + "git add" + ] + } + }, + "main": "lib/node/index.js", "name": "superagent", + "prettier": { + "singleQuote": true, + "bracketSpacing": true, + "trailingComma": "none" + }, + "remarkConfig": { + "plugins": [ + "preset-github" + ] + }, "repository": { "type": "git", "url": "git://github.com/visionmedia/superagent.git" }, "scripts": { - "prepare": "make all", - "test": "make test" + "browserify": "browserify src/node/index.js -o dist/superagent.js -s superagent -g [ babelify --configFile ./.dist.babelrc ]", + "build": "npm run build:clean && npm run build:lib && npm run build:dist", + "build:clean": "rimraf lib dist", + "build:dist": "npm run browserify && npm run minify", + "build:lib": "babel --config-file ./.lib.babelrc src --out-dir lib", + "coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov", + "lint": "xo && remark . -qfo && eslint -c .lib.eslintrc lib && eslint -c .dist.eslintrc dist", + "minify": "cross-env NODE_ENV=production browserify src/node/index.js -o dist/superagent.min.js -s superagent -g [ babelify --configFile ./.dist.babelrc ] -p tinyify", + "nyc": "cross-env NODE_ENV=test nyc ava", + "prepare": "husky install", + "test": "npm run build && npm run lint && make test", + "test-http2": "npm run build && npm run lint && make test-node-http2" }, - "version": "3.8.3" + "unpkg": "dist/superagent.min.js", + "version": "7.1.1", + "xo": { + "prettier": true, + "space": true, + "extends": [ + "xo-lass" + ], + "envs": [ + "node", + "browser" + ], + "overrides": [ + { + "files": "test/**/*.js", + "envs": [ + "mocha" + ], + "rules": { + "block-scoped-var": "warn", + "complexity": "warn", + "default-case": "warn", + "eqeqeq": "warn", + "func-name-matching": "warn", + "func-names": "warn", + "guard-for-in": "warn", + "handle-callback-err": "warn", + "import/no-extraneous-dependencies": "warn", + "import/no-unassigned-import": "warn", + "import/order": "warn", + "max-nested-callbacks": "warn", + "new-cap": "warn", + "no-eq-null": "warn", + "no-extend-native": "warn", + "no-implicit-coercion": "warn", + "no-multi-assign": "warn", + "no-negated-condition": "warn", + "no-prototype-builtins": "warn", + "no-redeclare": "warn", + "no-undef": "warn", + "no-unused-expressions": "warn", + "no-unused-vars": "warn", + "no-use-extend-native/no-use-extend-native": "warn", + "no-useless-escape": "warn", + "no-var": "warn", + "no-void": "warn", + "node/no-deprecated-api": "warn", + "prefer-rest-params": "warn", + "prefer-spread": "warn", + "unicorn/filename-case": "warn", + "valid-jsdoc": "warn", + "node/no-path-concat": "warn", + "unicorn/no-empty-file": "warn" + } + } + ], + "rules": { + "unicorn/prevent-abbreviations": [ + "warn", + { + "replacements": { + "res": false, + "args": false + } + } + ], + "no-bitwise": "warn", + "node/prefer-global/buffer": "warn", + "node/prefer-global/process": "warn", + "unicorn/no-new-array": "warn", + "unicorn/no-this-assignment": "warn", + "unicorn/prefer-spread": "warn", + "unicorn/catch-error-name": "warn", + "unicorn/prefer-code-point": "warn" + }, + "globals": [ + "ActiveXObject" + ] + } } diff --git a/build/node_modules/superagent/superagent.js b/build/node_modules/superagent/superagent.js deleted file mode 100644 index 46fef253..00000000 --- a/build/node_modules/superagent/superagent.js +++ /dev/null @@ -1,2035 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.superagent = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 500. - * - * @param {Number} count - * @param {Function} [fn] - * @return {Request} for chaining - * @api public - */ - -RequestBase.prototype.retry = function retry(count, fn){ - // Default to 1 if no count passed or true - if (arguments.length === 0 || count === true) count = 1; - if (count <= 0) count = 0; - this._maxRetries = count; - this._retries = 0; - this._retryCallback = fn; - return this; -}; - -var ERROR_CODES = [ - 'ECONNRESET', - 'ETIMEDOUT', - 'EADDRINFO', - 'ESOCKETTIMEDOUT' -]; - -/** - * Determine if a request should be retried. - * (Borrowed from segmentio/superagent-retry) - * - * @param {Error} err - * @param {Response} [res] - * @returns {Boolean} - */ -RequestBase.prototype._shouldRetry = function(err, res) { - if (!this._maxRetries || this._retries++ >= this._maxRetries) { - return false; - } - if (this._retryCallback) { - try { - var override = this._retryCallback(err, res); - if (override === true) return true; - if (override === false) return false; - // undefined falls back to defaults - } catch(e) { - console.error(e); - } - } - if (res && res.status && res.status >= 500 && res.status != 501) return true; - if (err) { - if (err.code && ~ERROR_CODES.indexOf(err.code)) return true; - // Superagent timeout - if (err.timeout && err.code == 'ECONNABORTED') return true; - if (err.crossDomain) return true; - } - return false; -}; - -/** - * Retry request - * - * @return {Request} for chaining - * @api private - */ - -RequestBase.prototype._retry = function() { - - this.clearTimeout(); - - // node - if (this.req) { - this.req = null; - this.req = this.request(); - } - - this._aborted = false; - this.timedout = false; - - return this._end(); -}; - -/** - * Promise support - * - * @param {Function} resolve - * @param {Function} [reject] - * @return {Request} - */ - -RequestBase.prototype.then = function then(resolve, reject) { - if (!this._fullfilledPromise) { - var self = this; - if (this._endCalled) { - console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"); - } - this._fullfilledPromise = new Promise(function(innerResolve, innerReject) { - self.end(function(err, res) { - if (err) innerReject(err); - else innerResolve(res); - }); - }); - } - return this._fullfilledPromise.then(resolve, reject); -}; - -RequestBase.prototype['catch'] = function(cb) { - return this.then(undefined, cb); -}; - -/** - * Allow for extension - */ - -RequestBase.prototype.use = function use(fn) { - fn(this); - return this; -}; - -RequestBase.prototype.ok = function(cb) { - if ('function' !== typeof cb) throw Error("Callback required"); - this._okCallback = cb; - return this; -}; - -RequestBase.prototype._isResponseOK = function(res) { - if (!res) { - return false; - } - - if (this._okCallback) { - return this._okCallback(res); - } - - return res.status >= 200 && res.status < 300; -}; - -/** - * Get request header `field`. - * Case-insensitive. - * - * @param {String} field - * @return {String} - * @api public - */ - -RequestBase.prototype.get = function(field){ - return this._header[field.toLowerCase()]; -}; - -/** - * Get case-insensitive header `field` value. - * This is a deprecated internal API. Use `.get(field)` instead. - * - * (getHeader is no longer used internally by the superagent code base) - * - * @param {String} field - * @return {String} - * @api private - * @deprecated - */ - -RequestBase.prototype.getHeader = RequestBase.prototype.get; - -/** - * Set header `field` to `val`, or multiple fields with one object. - * Case-insensitive. - * - * Examples: - * - * req.get('/') - * .set('Accept', 'application/json') - * .set('X-API-Key', 'foobar') - * .end(callback); - * - * req.get('/') - * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' }) - * .end(callback); - * - * @param {String|Object} field - * @param {String} val - * @return {Request} for chaining - * @api public - */ - -RequestBase.prototype.set = function(field, val){ - if (isObject(field)) { - for (var key in field) { - this.set(key, field[key]); - } - return this; - } - this._header[field.toLowerCase()] = val; - this.header[field] = val; - return this; -}; - -/** - * Remove header `field`. - * Case-insensitive. - * - * Example: - * - * req.get('/') - * .unset('User-Agent') - * .end(callback); - * - * @param {String} field - */ -RequestBase.prototype.unset = function(field){ - delete this._header[field.toLowerCase()]; - delete this.header[field]; - return this; -}; - -/** - * Write the field `name` and `val`, or multiple fields with one object - * for "multipart/form-data" request bodies. - * - * ``` js - * request.post('/upload') - * .field('foo', 'bar') - * .end(callback); - * - * request.post('/upload') - * .field({ foo: 'bar', baz: 'qux' }) - * .end(callback); - * ``` - * - * @param {String|Object} name - * @param {String|Blob|File|Buffer|fs.ReadStream} val - * @return {Request} for chaining - * @api public - */ -RequestBase.prototype.field = function(name, val) { - // name should be either a string or an object. - if (null === name || undefined === name) { - throw new Error('.field(name, val) name can not be empty'); - } - - if (this._data) { - console.error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()"); - } - - if (isObject(name)) { - for (var key in name) { - this.field(key, name[key]); - } - return this; - } - - if (Array.isArray(val)) { - for (var i in val) { - this.field(name, val[i]); - } - return this; - } - - // val should be defined now - if (null === val || undefined === val) { - throw new Error('.field(name, val) val can not be empty'); - } - if ('boolean' === typeof val) { - val = '' + val; - } - this._getFormData().append(name, val); - return this; -}; - -/** - * Abort the request, and clear potential timeout. - * - * @return {Request} - * @api public - */ -RequestBase.prototype.abort = function(){ - if (this._aborted) { - return this; - } - this._aborted = true; - this.xhr && this.xhr.abort(); // browser - this.req && this.req.abort(); // node - this.clearTimeout(); - this.emit('abort'); - return this; -}; - -RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { - switch (options.type) { - case 'basic': - this.set('Authorization', 'Basic ' + base64Encoder(user + ':' + pass)); - break; - - case 'auto': - this.username = user; - this.password = pass; - break; - - case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) - this.set('Authorization', 'Bearer ' + user); - break; - } - return this; -}; - -/** - * Enable transmission of cookies with x-domain requests. - * - * Note that for this to work the origin must not be - * using "Access-Control-Allow-Origin" with a wildcard, - * and also must set "Access-Control-Allow-Credentials" - * to "true". - * - * @api public - */ - -RequestBase.prototype.withCredentials = function(on) { - // This is browser-only functionality. Node side is no-op. - if (on == undefined) on = true; - this._withCredentials = on; - return this; -}; - -/** - * Set the max redirects to `n`. Does noting in browser XHR implementation. - * - * @param {Number} n - * @return {Request} for chaining - * @api public - */ - -RequestBase.prototype.redirects = function(n){ - this._maxRedirects = n; - return this; -}; - -/** - * Maximum size of buffered response body, in bytes. Counts uncompressed size. - * Default 200MB. - * - * @param {Number} n - * @return {Request} for chaining - */ -RequestBase.prototype.maxResponseSize = function(n){ - if ('number' !== typeof n) { - throw TypeError("Invalid argument"); - } - this._maxResponseSize = n; - return this; -}; - -/** - * Convert to a plain javascript object (not JSON string) of scalar properties. - * Note as this method is designed to return a useful non-this value, - * it cannot be chained. - * - * @return {Object} describing method, url, and data of this request - * @api public - */ - -RequestBase.prototype.toJSON = function() { - return { - method: this.method, - url: this.url, - data: this._data, - headers: this._header, - }; -}; - -/** - * Send `data` as the request body, defaulting the `.type()` to "json" when - * an object is given. - * - * Examples: - * - * // manual json - * request.post('/user') - * .type('json') - * .send('{"name":"tj"}') - * .end(callback) - * - * // auto json - * request.post('/user') - * .send({ name: 'tj' }) - * .end(callback) - * - * // manual x-www-form-urlencoded - * request.post('/user') - * .type('form') - * .send('name=tj') - * .end(callback) - * - * // auto x-www-form-urlencoded - * request.post('/user') - * .type('form') - * .send({ name: 'tj' }) - * .end(callback) - * - * // defaults to x-www-form-urlencoded - * request.post('/user') - * .send('name=tobi') - * .send('species=ferret') - * .end(callback) - * - * @param {String|Object} data - * @return {Request} for chaining - * @api public - */ - -RequestBase.prototype.send = function(data){ - var isObj = isObject(data); - var type = this._header['content-type']; - - if (this._formData) { - console.error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()"); - } - - if (isObj && !this._data) { - if (Array.isArray(data)) { - this._data = []; - } else if (!this._isHost(data)) { - this._data = {}; - } - } else if (data && this._data && this._isHost(this._data)) { - throw Error("Can't merge these send calls"); - } - - // merge - if (isObj && isObject(this._data)) { - for (var key in data) { - this._data[key] = data[key]; - } - } else if ('string' == typeof data) { - // default to x-www-form-urlencoded - if (!type) this.type('form'); - type = this._header['content-type']; - if ('application/x-www-form-urlencoded' == type) { - this._data = this._data - ? this._data + '&' + data - : data; - } else { - this._data = (this._data || '') + data; - } - } else { - this._data = data; - } - - if (!isObj || this._isHost(data)) { - return this; - } - - // default to json - if (!type) this.type('json'); - return this; -}; - -/** - * Sort `querystring` by the sort function - * - * - * Examples: - * - * // default order - * request.get('/user') - * .query('name=Nick') - * .query('search=Manny') - * .sortQuery() - * .end(callback) - * - * // customized sort function - * request.get('/user') - * .query('name=Nick') - * .query('search=Manny') - * .sortQuery(function(a, b){ - * return a.length - b.length; - * }) - * .end(callback) - * - * - * @param {Function} sort - * @return {Request} for chaining - * @api public - */ - -RequestBase.prototype.sortQuery = function(sort) { - // _sort default to true but otherwise can be a function or boolean - this._sort = typeof sort === 'undefined' ? true : sort; - return this; -}; - -/** - * Compose querystring to append to req.url - * - * @api private - */ -RequestBase.prototype._finalizeQueryString = function(){ - var query = this._query.join('&'); - if (query) { - this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + query; - } - this._query.length = 0; // Makes the call idempotent - - if (this._sort) { - var index = this.url.indexOf('?'); - if (index >= 0) { - var queryArr = this.url.substring(index + 1).split('&'); - if ('function' === typeof this._sort) { - queryArr.sort(this._sort); - } else { - queryArr.sort(); - } - this.url = this.url.substring(0, index) + '?' + queryArr.join('&'); - } - } -}; - -// For backwards compat only -RequestBase.prototype._appendQueryString = function() {console.trace("Unsupported");} - -/** - * Invoke callback with timeout error. - * - * @api private - */ - -RequestBase.prototype._timeoutError = function(reason, timeout, errno){ - if (this._aborted) { - return; - } - var err = new Error(reason + timeout + 'ms exceeded'); - err.timeout = timeout; - err.code = 'ECONNABORTED'; - err.errno = errno; - this.timedout = true; - this.abort(); - this.callback(err); -}; - -RequestBase.prototype._setTimeouts = function() { - var self = this; - - // deadline - if (this._timeout && !this._timer) { - this._timer = setTimeout(function(){ - self._timeoutError('Timeout of ', self._timeout, 'ETIME'); - }, this._timeout); - } - // response timeout - if (this._responseTimeout && !this._responseTimeoutTimer) { - this._responseTimeoutTimer = setTimeout(function(){ - self._timeoutError('Response timeout of ', self._responseTimeout, 'ETIMEDOUT'); - }, this._responseTimeout); - } -}; - -},{"./is-object":2}],4:[function(require,module,exports){ -'use strict'; - -/** - * Module dependencies. - */ - -var utils = require('./utils'); - -/** - * Expose `ResponseBase`. - */ - -module.exports = ResponseBase; - -/** - * Initialize a new `ResponseBase`. - * - * @api public - */ - -function ResponseBase(obj) { - if (obj) return mixin(obj); -} - -/** - * Mixin the prototype properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in ResponseBase.prototype) { - obj[key] = ResponseBase.prototype[key]; - } - return obj; -} - -/** - * Get case-insensitive `field` value. - * - * @param {String} field - * @return {String} - * @api public - */ - -ResponseBase.prototype.get = function(field) { - return this.header[field.toLowerCase()]; -}; - -/** - * Set header related properties: - * - * - `.type` the content type without params - * - * A response of "Content-Type: text/plain; charset=utf-8" - * will provide you with a `.type` of "text/plain". - * - * @param {Object} header - * @api private - */ - -ResponseBase.prototype._setHeaderProperties = function(header){ - // TODO: moar! - // TODO: make this a util - - // content-type - var ct = header['content-type'] || ''; - this.type = utils.type(ct); - - // params - var params = utils.params(ct); - for (var key in params) this[key] = params[key]; - - this.links = {}; - - // links - try { - if (header.link) { - this.links = utils.parseLinks(header.link); - } - } catch (err) { - // ignore - } -}; - -/** - * Set flags such as `.ok` based on `status`. - * - * For example a 2xx response will give you a `.ok` of __true__ - * whereas 5xx will be __false__ and `.error` will be __true__. The - * `.clientError` and `.serverError` are also available to be more - * specific, and `.statusType` is the class of error ranging from 1..5 - * sometimes useful for mapping respond colors etc. - * - * "sugar" properties are also defined for common cases. Currently providing: - * - * - .noContent - * - .badRequest - * - .unauthorized - * - .notAcceptable - * - .notFound - * - * @param {Number} status - * @api private - */ - -ResponseBase.prototype._setStatusProperties = function(status){ - var type = status / 100 | 0; - - // status / class - this.status = this.statusCode = status; - this.statusType = type; - - // basics - this.info = 1 == type; - this.ok = 2 == type; - this.redirect = 3 == type; - this.clientError = 4 == type; - this.serverError = 5 == type; - this.error = (4 == type || 5 == type) - ? this.toError() - : false; - - // sugar - this.created = 201 == status; - this.accepted = 202 == status; - this.noContent = 204 == status; - this.badRequest = 400 == status; - this.unauthorized = 401 == status; - this.notAcceptable = 406 == status; - this.forbidden = 403 == status; - this.notFound = 404 == status; - this.unprocessableEntity = 422 == status; -}; - -},{"./utils":5}],5:[function(require,module,exports){ -'use strict'; - -/** - * Return the mime type for the given `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -exports.type = function(str){ - return str.split(/ *; */).shift(); -}; - -/** - * Return header field parameters. - * - * @param {String} str - * @return {Object} - * @api private - */ - -exports.params = function(str){ - return str.split(/ *; */).reduce(function(obj, str){ - var parts = str.split(/ *= */); - var key = parts.shift(); - var val = parts.shift(); - - if (key && val) obj[key] = val; - return obj; - }, {}); -}; - -/** - * Parse Link header fields. - * - * @param {String} str - * @return {Object} - * @api private - */ - -exports.parseLinks = function(str){ - return str.split(/ *, */).reduce(function(obj, str){ - var parts = str.split(/ *; */); - var url = parts[0].slice(1, -1); - var rel = parts[1].split(/ *= */)[1].slice(1, -1); - obj[rel] = url; - return obj; - }, {}); -}; - -/** - * Strip content related fields from `header`. - * - * @param {Object} header - * @return {Object} header - * @api private - */ - -exports.cleanHeader = function(header, changesOrigin){ - delete header['content-type']; - delete header['content-length']; - delete header['transfer-encoding']; - delete header['host']; - // secuirty - if (changesOrigin) { - delete header['authorization']; - delete header['cookie']; - } - return header; -}; - -},{}],6:[function(require,module,exports){ - -/** - * Expose `Emitter`. - */ - -if (typeof module !== 'undefined') { - module.exports = Emitter; -} - -/** - * Initialize a new `Emitter`. - * - * @api public - */ - -function Emitter(obj) { - if (obj) return mixin(obj); -}; - -/** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; - } - return obj; -} - -/** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.on = -Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks['$' + event] = this._callbacks['$' + event] || []) - .push(fn); - return this; -}; - -/** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.once = function(event, fn){ - function on() { - this.off(event, on); - fn.apply(this, arguments); - } - - on.fn = fn; - this.on(event, on); - return this; -}; - -/** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ - -Emitter.prototype.off = -Emitter.prototype.removeListener = -Emitter.prototype.removeAllListeners = -Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; - } - - // specific event - var callbacks = this._callbacks['$' + event]; - if (!callbacks) return this; - - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks['$' + event]; - return this; - } - - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; - } - } - return this; -}; - -/** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} - */ - -Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks['$' + event]; - - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); - } - } - - return this; -}; - -/** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public - */ - -Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks['$' + event] || []; -}; - -/** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public - */ - -Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; -}; - -},{}],7:[function(require,module,exports){ -/** - * Root reference for iframes. - */ - -var root; -if (typeof window !== 'undefined') { // Browser window - root = window; -} else if (typeof self !== 'undefined') { // Web Worker - root = self; -} else { // Other environments - console.warn("Using browser-only version of superagent in non-browser environment"); - root = this; -} - -var Emitter = require('component-emitter'); -var RequestBase = require('./request-base'); -var isObject = require('./is-object'); -var ResponseBase = require('./response-base'); -var Agent = require('./agent-base'); - -/** - * Noop. - */ - -function noop(){}; - -/** - * Expose `request`. - */ - -var request = exports = module.exports = function(method, url) { - // callback - if ('function' == typeof url) { - return new exports.Request('GET', method).end(url); - } - - // url first - if (1 == arguments.length) { - return new exports.Request('GET', method); - } - - return new exports.Request(method, url); -} - -exports.Request = Request; - -/** - * Determine XHR. - */ - -request.getXHR = function () { - if (root.XMLHttpRequest - && (!root.location || 'file:' != root.location.protocol - || !root.ActiveXObject)) { - return new XMLHttpRequest; - } else { - try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} - try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {} - } - throw Error("Browser-only version of superagent could not find XHR"); -}; - -/** - * Removes leading and trailing whitespace, added to support IE. - * - * @param {String} s - * @return {String} - * @api private - */ - -var trim = ''.trim - ? function(s) { return s.trim(); } - : function(s) { return s.replace(/(^\s*|\s*$)/g, ''); }; - -/** - * Serialize the given `obj`. - * - * @param {Object} obj - * @return {String} - * @api private - */ - -function serialize(obj) { - if (!isObject(obj)) return obj; - var pairs = []; - for (var key in obj) { - pushEncodedKeyValuePair(pairs, key, obj[key]); - } - return pairs.join('&'); -} - -/** - * Helps 'serialize' with serializing arrays. - * Mutates the pairs array. - * - * @param {Array} pairs - * @param {String} key - * @param {Mixed} val - */ - -function pushEncodedKeyValuePair(pairs, key, val) { - if (val != null) { - if (Array.isArray(val)) { - val.forEach(function(v) { - pushEncodedKeyValuePair(pairs, key, v); - }); - } else if (isObject(val)) { - for(var subkey in val) { - pushEncodedKeyValuePair(pairs, key + '[' + subkey + ']', val[subkey]); - } - } else { - pairs.push(encodeURIComponent(key) - + '=' + encodeURIComponent(val)); - } - } else if (val === null) { - pairs.push(encodeURIComponent(key)); - } -} - -/** - * Expose serialization method. - */ - -request.serializeObject = serialize; - -/** - * Parse the given x-www-form-urlencoded `str`. - * - * @param {String} str - * @return {Object} - * @api private - */ - -function parseString(str) { - var obj = {}; - var pairs = str.split('&'); - var pair; - var pos; - - for (var i = 0, len = pairs.length; i < len; ++i) { - pair = pairs[i]; - pos = pair.indexOf('='); - if (pos == -1) { - obj[decodeURIComponent(pair)] = ''; - } else { - obj[decodeURIComponent(pair.slice(0, pos))] = - decodeURIComponent(pair.slice(pos + 1)); - } - } - - return obj; -} - -/** - * Expose parser. - */ - -request.parseString = parseString; - -/** - * Default MIME type map. - * - * superagent.types.xml = 'application/xml'; - * - */ - -request.types = { - html: 'text/html', - json: 'application/json', - xml: 'text/xml', - urlencoded: 'application/x-www-form-urlencoded', - 'form': 'application/x-www-form-urlencoded', - 'form-data': 'application/x-www-form-urlencoded' -}; - -/** - * Default serialization map. - * - * superagent.serialize['application/xml'] = function(obj){ - * return 'generated xml here'; - * }; - * - */ - -request.serialize = { - 'application/x-www-form-urlencoded': serialize, - 'application/json': JSON.stringify -}; - -/** - * Default parsers. - * - * superagent.parse['application/xml'] = function(str){ - * return { object parsed from str }; - * }; - * - */ - -request.parse = { - 'application/x-www-form-urlencoded': parseString, - 'application/json': JSON.parse -}; - -/** - * Parse the given header `str` into - * an object containing the mapped fields. - * - * @param {String} str - * @return {Object} - * @api private - */ - -function parseHeader(str) { - var lines = str.split(/\r?\n/); - var fields = {}; - var index; - var line; - var field; - var val; - - for (var i = 0, len = lines.length; i < len; ++i) { - line = lines[i]; - index = line.indexOf(':'); - if (index === -1) { // could be empty line, just skip it - continue; - } - field = line.slice(0, index).toLowerCase(); - val = trim(line.slice(index + 1)); - fields[field] = val; - } - - return fields; -} - -/** - * Check if `mime` is json or has +json structured syntax suffix. - * - * @param {String} mime - * @return {Boolean} - * @api private - */ - -function isJSON(mime) { - // should match /json or +json - // but not /json-seq - return /[\/+]json($|[^-\w])/.test(mime); -} - -/** - * Initialize a new `Response` with the given `xhr`. - * - * - set flags (.ok, .error, etc) - * - parse header - * - * Examples: - * - * Aliasing `superagent` as `request` is nice: - * - * request = superagent; - * - * We can use the promise-like API, or pass callbacks: - * - * request.get('/').end(function(res){}); - * request.get('/', function(res){}); - * - * Sending data can be chained: - * - * request - * .post('/user') - * .send({ name: 'tj' }) - * .end(function(res){}); - * - * Or passed to `.send()`: - * - * request - * .post('/user') - * .send({ name: 'tj' }, function(res){}); - * - * Or passed to `.post()`: - * - * request - * .post('/user', { name: 'tj' }) - * .end(function(res){}); - * - * Or further reduced to a single call for simple cases: - * - * request - * .post('/user', { name: 'tj' }, function(res){}); - * - * @param {XMLHTTPRequest} xhr - * @param {Object} options - * @api private - */ - -function Response(req) { - this.req = req; - this.xhr = this.req.xhr; - // responseText is accessible only if responseType is '' or 'text' and on older browsers - this.text = ((this.req.method !='HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined') - ? this.xhr.responseText - : null; - this.statusText = this.req.xhr.statusText; - var status = this.xhr.status; - // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request - if (status === 1223) { - status = 204; - } - this._setStatusProperties(status); - this.header = this.headers = parseHeader(this.xhr.getAllResponseHeaders()); - // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but - // getResponseHeader still works. so we get content-type even if getting - // other headers fails. - this.header['content-type'] = this.xhr.getResponseHeader('content-type'); - this._setHeaderProperties(this.header); - - if (null === this.text && req._responseType) { - this.body = this.xhr.response; - } else { - this.body = this.req.method != 'HEAD' - ? this._parseBody(this.text ? this.text : this.xhr.response) - : null; - } -} - -ResponseBase(Response.prototype); - -/** - * Parse the given body `str`. - * - * Used for auto-parsing of bodies. Parsers - * are defined on the `superagent.parse` object. - * - * @param {String} str - * @return {Mixed} - * @api private - */ - -Response.prototype._parseBody = function(str) { - var parse = request.parse[this.type]; - if (this.req._parser) { - return this.req._parser(this, str); - } - if (!parse && isJSON(this.type)) { - parse = request.parse['application/json']; - } - return parse && str && (str.length || str instanceof Object) - ? parse(str) - : null; -}; - -/** - * Return an `Error` representative of this response. - * - * @return {Error} - * @api public - */ - -Response.prototype.toError = function(){ - var req = this.req; - var method = req.method; - var url = req.url; - - var msg = 'cannot ' + method + ' ' + url + ' (' + this.status + ')'; - var err = new Error(msg); - err.status = this.status; - err.method = method; - err.url = url; - - return err; -}; - -/** - * Expose `Response`. - */ - -request.Response = Response; - -/** - * Initialize a new `Request` with the given `method` and `url`. - * - * @param {String} method - * @param {String} url - * @api public - */ - -function Request(method, url) { - var self = this; - this._query = this._query || []; - this.method = method; - this.url = url; - this.header = {}; // preserves header name case - this._header = {}; // coerces header names to lowercase - this.on('end', function(){ - var err = null; - var res = null; - - try { - res = new Response(self); - } catch(e) { - err = new Error('Parser is unable to parse the response'); - err.parse = true; - err.original = e; - // issue #675: return the raw response if the response parsing fails - if (self.xhr) { - // ie9 doesn't have 'response' property - err.rawResponse = typeof self.xhr.responseType == 'undefined' ? self.xhr.responseText : self.xhr.response; - // issue #876: return the http status code if the response parsing fails - err.status = self.xhr.status ? self.xhr.status : null; - err.statusCode = err.status; // backwards-compat only - } else { - err.rawResponse = null; - err.status = null; - } - - return self.callback(err); - } - - self.emit('response', res); - - var new_err; - try { - if (!self._isResponseOK(res)) { - new_err = new Error(res.statusText || 'Unsuccessful HTTP response'); - } - } catch(custom_err) { - new_err = custom_err; // ok() callback can throw - } - - // #1000 don't catch errors from the callback to avoid double calling it - if (new_err) { - new_err.original = err; - new_err.response = res; - new_err.status = res.status; - self.callback(new_err, res); - } else { - self.callback(null, res); - } - }); -} - -/** - * Mixin `Emitter` and `RequestBase`. - */ - -Emitter(Request.prototype); -RequestBase(Request.prototype); - -/** - * Set Content-Type to `type`, mapping values from `request.types`. - * - * Examples: - * - * superagent.types.xml = 'application/xml'; - * - * request.post('/') - * .type('xml') - * .send(xmlstring) - * .end(callback); - * - * request.post('/') - * .type('application/xml') - * .send(xmlstring) - * .end(callback); - * - * @param {String} type - * @return {Request} for chaining - * @api public - */ - -Request.prototype.type = function(type){ - this.set('Content-Type', request.types[type] || type); - return this; -}; - -/** - * Set Accept to `type`, mapping values from `request.types`. - * - * Examples: - * - * superagent.types.json = 'application/json'; - * - * request.get('/agent') - * .accept('json') - * .end(callback); - * - * request.get('/agent') - * .accept('application/json') - * .end(callback); - * - * @param {String} accept - * @return {Request} for chaining - * @api public - */ - -Request.prototype.accept = function(type){ - this.set('Accept', request.types[type] || type); - return this; -}; - -/** - * Set Authorization field value with `user` and `pass`. - * - * @param {String} user - * @param {String} [pass] optional in case of using 'bearer' as type - * @param {Object} options with 'type' property 'auto', 'basic' or 'bearer' (default 'basic') - * @return {Request} for chaining - * @api public - */ - -Request.prototype.auth = function(user, pass, options){ - if (1 === arguments.length) pass = ''; - if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options - options = pass; - pass = ''; - } - if (!options) { - options = { - type: 'function' === typeof btoa ? 'basic' : 'auto', - }; - } - - var encoder = function(string) { - if ('function' === typeof btoa) { - return btoa(string); - } - throw new Error('Cannot use basic auth, btoa is not a function'); - }; - - return this._auth(user, pass, options, encoder); -}; - -/** - * Add query-string `val`. - * - * Examples: - * - * request.get('/shoes') - * .query('size=10') - * .query({ color: 'blue' }) - * - * @param {Object|String} val - * @return {Request} for chaining - * @api public - */ - -Request.prototype.query = function(val){ - if ('string' != typeof val) val = serialize(val); - if (val) this._query.push(val); - return this; -}; - -/** - * Queue the given `file` as an attachment to the specified `field`, - * with optional `options` (or filename). - * - * ``` js - * request.post('/upload') - * .attach('content', new Blob(['hey!'], { type: "text/html"})) - * .end(callback); - * ``` - * - * @param {String} field - * @param {Blob|File} file - * @param {String|Object} options - * @return {Request} for chaining - * @api public - */ - -Request.prototype.attach = function(field, file, options){ - if (file) { - if (this._data) { - throw Error("superagent can't mix .send() and .attach()"); - } - - this._getFormData().append(field, file, options || file.name); - } - return this; -}; - -Request.prototype._getFormData = function(){ - if (!this._formData) { - this._formData = new root.FormData(); - } - return this._formData; -}; - -/** - * Invoke the callback with `err` and `res` - * and handle arity check. - * - * @param {Error} err - * @param {Response} res - * @api private - */ - -Request.prototype.callback = function(err, res){ - if (this._shouldRetry(err, res)) { - return this._retry(); - } - - var fn = this._callback; - this.clearTimeout(); - - if (err) { - if (this._maxRetries) err.retries = this._retries - 1; - this.emit('error', err); - } - - fn(err, res); -}; - -/** - * Invoke callback with x-domain error. - * - * @api private - */ - -Request.prototype.crossDomainError = function(){ - var err = new Error('Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.'); - err.crossDomain = true; - - err.status = this.status; - err.method = this.method; - err.url = this.url; - - this.callback(err); -}; - -// This only warns, because the request is still likely to work -Request.prototype.buffer = Request.prototype.ca = Request.prototype.agent = function(){ - console.warn("This is not supported in browser version of superagent"); - return this; -}; - -// This throws, because it can't send/receive data as expected -Request.prototype.pipe = Request.prototype.write = function(){ - throw Error("Streaming is not supported in browser version of superagent"); -}; - -/** - * Check if `obj` is a host object, - * we don't want to serialize these :) - * - * @param {Object} obj - * @return {Boolean} - * @api private - */ -Request.prototype._isHost = function _isHost(obj) { - // Native objects stringify to [object File], [object Blob], [object FormData], etc. - return obj && 'object' === typeof obj && !Array.isArray(obj) && Object.prototype.toString.call(obj) !== '[object Object]'; -} - -/** - * Initiate request, invoking callback `fn(res)` - * with an instanceof `Response`. - * - * @param {Function} fn - * @return {Request} for chaining - * @api public - */ - -Request.prototype.end = function(fn){ - if (this._endCalled) { - console.warn("Warning: .end() was called twice. This is not supported in superagent"); - } - this._endCalled = true; - - // store callback - this._callback = fn || noop; - - // querystring - this._finalizeQueryString(); - - return this._end(); -}; - -Request.prototype._end = function() { - var self = this; - var xhr = (this.xhr = request.getXHR()); - var data = this._formData || this._data; - - this._setTimeouts(); - - // state change - xhr.onreadystatechange = function(){ - var readyState = xhr.readyState; - if (readyState >= 2 && self._responseTimeoutTimer) { - clearTimeout(self._responseTimeoutTimer); - } - if (4 != readyState) { - return; - } - - // In IE9, reads to any property (e.g. status) off of an aborted XHR will - // result in the error "Could not complete the operation due to error c00c023f" - var status; - try { status = xhr.status } catch(e) { status = 0; } - - if (!status) { - if (self.timedout || self._aborted) return; - return self.crossDomainError(); - } - self.emit('end'); - }; - - // progress - var handleProgress = function(direction, e) { - if (e.total > 0) { - e.percent = e.loaded / e.total * 100; - } - e.direction = direction; - self.emit('progress', e); - }; - if (this.hasListeners('progress')) { - try { - xhr.onprogress = handleProgress.bind(null, 'download'); - if (xhr.upload) { - xhr.upload.onprogress = handleProgress.bind(null, 'upload'); - } - } catch(e) { - // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. - // Reported here: - // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context - } - } - - // initiate request - try { - if (this.username && this.password) { - xhr.open(this.method, this.url, true, this.username, this.password); - } else { - xhr.open(this.method, this.url, true); - } - } catch (err) { - // see #1149 - return this.callback(err); - } - - // CORS - if (this._withCredentials) xhr.withCredentials = true; - - // body - if (!this._formData && 'GET' != this.method && 'HEAD' != this.method && 'string' != typeof data && !this._isHost(data)) { - // serialize stuff - var contentType = this._header['content-type']; - var serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; - if (!serialize && isJSON(contentType)) { - serialize = request.serialize['application/json']; - } - if (serialize) data = serialize(data); - } - - // set header fields - for (var field in this.header) { - if (null == this.header[field]) continue; - - if (this.header.hasOwnProperty(field)) - xhr.setRequestHeader(field, this.header[field]); - } - - if (this._responseType) { - xhr.responseType = this._responseType; - } - - // send stuff - this.emit('request', this); - - // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) - // We need null here if data is undefined - xhr.send(typeof data !== 'undefined' ? data : null); - return this; -}; - -request.agent = function() { - return new Agent(); -}; - -["GET", "POST", "OPTIONS", "PATCH", "PUT", "DELETE"].forEach(function(method) { - Agent.prototype[method.toLowerCase()] = function(url, fn) { - var req = new request.Request(method, url); - this._setDefaults(req); - if (fn) { - req.end(fn); - } - return req; - }; -}); - -Agent.prototype.del = Agent.prototype['delete']; - -/** - * GET `url` with optional callback `fn(res)`. - * - * @param {String} url - * @param {Mixed|Function} [data] or fn - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.get = function(url, data, fn) { - var req = request('GET', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; - -/** - * HEAD `url` with optional callback `fn(res)`. - * - * @param {String} url - * @param {Mixed|Function} [data] or fn - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.head = function(url, data, fn) { - var req = request('HEAD', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.query(data); - if (fn) req.end(fn); - return req; -}; - -/** - * OPTIONS query to `url` with optional callback `fn(res)`. - * - * @param {String} url - * @param {Mixed|Function} [data] or fn - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.options = function(url, data, fn) { - var req = request('OPTIONS', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; - -/** - * DELETE `url` with optional `data` and callback `fn(res)`. - * - * @param {String} url - * @param {Mixed} [data] - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -function del(url, data, fn) { - var req = request('DELETE', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -} - -request['del'] = del; -request['delete'] = del; - -/** - * PATCH `url` with optional `data` and callback `fn(res)`. - * - * @param {String} url - * @param {Mixed} [data] - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.patch = function(url, data, fn) { - var req = request('PATCH', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; - -/** - * POST `url` with optional `data` and callback `fn(res)`. - * - * @param {String} url - * @param {Mixed} [data] - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.post = function(url, data, fn) { - var req = request('POST', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; - -/** - * PUT `url` with optional `data` and callback `fn(res)`. - * - * @param {String} url - * @param {Mixed|Function} [data] or fn - * @param {Function} [fn] - * @return {Request} - * @api public - */ - -request.put = function(url, data, fn) { - var req = request('PUT', url); - if ('function' == typeof data) (fn = data), (data = null); - if (data) req.send(data); - if (fn) req.end(fn); - return req; -}; - -},{"./agent-base":1,"./is-object":2,"./request-base":3,"./response-base":4,"component-emitter":6}]},{},[7])(7) -}); diff --git a/build/node_modules/superagent/test.js b/build/node_modules/superagent/test.js deleted file mode 100644 index b3812474..00000000 --- a/build/node_modules/superagent/test.js +++ /dev/null @@ -1,7 +0,0 @@ -const request = require('./lib/node'); - -request.post('nevermind') - .field({a:1,b:2}) - .attach('c', 'does-not-exist.txt') - .then(() => assert.fail("It should not allow this")) - .catch(() => true); diff --git a/build/node_modules/superagent/yarn.lock b/build/node_modules/superagent/yarn.lock deleted file mode 100644 index d3788b1e..00000000 --- a/build/node_modules/superagent/yarn.lock +++ /dev/null @@ -1,3676 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -Base64@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/Base64/-/Base64-1.0.1.tgz#def45cc50c961bcc9bf2321d0f52bcbfec1f1bb1" - -JSON2@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/JSON2/-/JSON2-0.1.0.tgz#8d7493040a63d5835af75f47decb83ab6c8c0790" - -JSONStream@^1.0.3: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - -accepts@~1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" - dependencies: - mime-types "~2.1.6" - negotiator "0.5.3" - -accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-node@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" - dependencies: - acorn "^5.4.1" - xtend "^4.0.1" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.2.1, acorn@^5.4.1: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" - -adm-zip@~0.4.3: - version "0.4.9" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.9.tgz#1a574627d3aa4ea6b8b4948e066cbd6fed4ae2f6" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -append-field@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/append-field/-/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -archiver@0.14.x: - version "0.14.4" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.14.4.tgz#5b9ddb9f5ee1ceef21cb8f3b020e6240ecb4315c" - dependencies: - async "~0.9.0" - buffer-crc32 "~0.2.1" - glob "~4.3.0" - lazystream "~0.1.0" - lodash "~3.2.0" - readable-stream "~1.0.26" - tar-stream "~1.1.0" - zip-stream "~0.5.0" - -archiver@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.12.0.tgz#b8ccde2508cab9092bb7106630139c0f39a280cc" - dependencies: - async "~0.9.0" - buffer-crc32 "~0.2.1" - glob "~4.0.6" - lazystream "~0.1.0" - lodash "~2.4.1" - readable-stream "~1.0.26" - tar-stream "~1.0.0" - zip-stream "~0.4.0" - -archiver@~0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.7.1.tgz#cf152d794f86bbd93f9858da60d36aaeabad9bbf" - dependencies: - file-utils "~0.1.5" - lazystream "~0.1.0" - lodash "~2.4.1" - readable-stream "~1.0.24" - zip-stream "~0.2.0" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -argparse@~0.1.4: - version "0.1.16" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" - dependencies: - underscore "~1.7.0" - underscore.string "~2.4.0" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-map@0.0.0, array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-uniq@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" - -assert-plus@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" - -assert@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assert@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.3.0.tgz#03939a622582a812cc202320a0b9a56c9b815849" - dependencies: - util "0.10.3" - -astw@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" - dependencies: - acorn "^4.0.3" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async@0.9.x, async@~0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - -async@1.x, async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@~0.2.6, async@~0.2.7, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -asyncreduce@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/asyncreduce/-/asyncreduce-0.1.4.tgz#18210e01978bfdcba043955497a5cd315c0a6a41" - dependencies: - runnel "~0.5.0" - -aws-sign2@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -basic-auth-connect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" - -batch@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.0.tgz#fd2e05a7a5d696b4db9314013e285d8ff3557ec3" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -bl@^0.9.0, bl@~0.9.0: - version "0.9.5" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" - dependencies: - readable-stream "~1.0.26" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@1.18.2, body-parser@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -body-parser@~1.12.3: - version "1.12.4" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.12.4.tgz#090700c4ba28862a8520ef378395fdee5f61c229" - dependencies: - bytes "1.0.0" - content-type "~1.0.1" - debug "~2.2.0" - depd "~1.0.1" - iconv-lite "0.4.8" - on-finished "~2.2.1" - qs "2.4.2" - raw-body "~2.0.1" - type-is "~1.6.2" - -boom@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" - dependencies: - hoek "0.9.x" - -brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^1.11.0, browser-resolve@^1.7.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - -browserify-istanbul@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-0.1.5.tgz#01c8e31d6a358ee5150f4321c3f28995a964c39f" - dependencies: - istanbul "^0.2.8" - minimatch "^0.2.14" - through "^2.3.4" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - dependencies: - pako "~0.2.0" - -browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserify@13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.0.0.tgz#8f223bb24ff4ee4335e6bea9671de294e43ba6a3" - dependencies: - JSONStream "^1.0.3" - assert "~1.3.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.1.2" - buffer "^4.1.0" - concat-stream "~1.5.1" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "~1.1.0" - duplexer2 "~0.1.2" - events "~1.1.0" - glob "^5.0.15" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "~0.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - isarray "0.0.1" - labeled-stream-splicer "^2.0.0" - module-deps "^4.0.2" - os-browserify "~0.1.1" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.4.3" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "~0.10.0" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "~0.0.0" - url "~0.11.0" - util "~0.10.1" - vm-browserify "~0.0.1" - xtend "^4.0.0" - -browserify@^13.0.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.1.2" - buffer "^4.1.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.1" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "~1.1.0" - duplexer2 "~0.1.2" - events "~1.1.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "~0.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - module-deps "^4.0.8" - os-browserify "~0.1.1" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "~0.10.0" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "~0.0.0" - url "~0.11.0" - util "~0.10.1" - vm-browserify "~0.0.1" - xtend "^4.0.0" - -browserify@^14.1.0: - version "14.5.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.5.0.tgz#0bbbce521acd6e4d1d54d8e9365008efb85a9cc5" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "~1.5.1" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "~1.1.0" - duplexer2 "~0.1.2" - events "~1.1.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - module-deps "^4.0.8" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "~1.0.0" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "~0.0.0" - url "~0.11.0" - util "~0.10.1" - vm-browserify "~0.0.1" - xtend "^4.0.0" - -buffer-crc32@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.1.tgz#be3e5382fc02b6d6324956ac1af98aa98b08534c" - -buffer-crc32@~0.2.1: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - -buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.1.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -busboy@^0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" - dependencies: - dicer "0.2.5" - readable-stream "1.1.x" - -bytes@0.2.1, bytes@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-0.2.1.tgz#555b08abcb063f8975905302523e4cd4ffdfdf31" - -bytes@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - -bytes@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cached-path-relative@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -caseless@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.6.0.tgz#8167c1ab8397fb5bb95f96d28e5a81c50f247ac4" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -char-split@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/char-split/-/char-split-0.2.0.tgz#8755eda641e5db277dd0f509b517c827e50a8edf" - dependencies: - through "2.3.4" - -chokidar@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -colors@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -combined-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" - dependencies: - delayed-stream "0.0.5" - -commander@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-1.3.2.tgz#8a8f30ec670a6fdd64af52f1914b907d79ead5b5" - dependencies: - keypress "0.1.x" - -commander@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" - -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -component-emitter@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compress-commons@~0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.1.6.tgz#0c740870fde58cba516f0ac0c822e33a0b85dfa3" - dependencies: - buffer-crc32 "~0.2.1" - crc32-stream "~0.3.1" - readable-stream "~1.0.26" - -compress-commons@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.2.9.tgz#422d927430c01abd06cd455b6dfc04cb4cf8003c" - dependencies: - buffer-crc32 "~0.2.1" - crc32-stream "~0.3.1" - node-int64 "~0.3.0" - readable-stream "~1.0.26" - -compressible@~2.0.3: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" - dependencies: - mime-db ">= 1.33.0 < 2" - -compression@1.5.0: - version "1.5.0" - resolved "http://registry.npmjs.org/compression/-/compression-1.5.0.tgz#ccc1a54788da1b3ad7729c49f6a00b3ac9adf47f" - dependencies: - accepts "~1.2.9" - bytes "2.1.0" - compressible "~2.0.3" - debug "~2.2.0" - on-headers "~1.0.0" - vary "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.0, concat-stream@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@~1.5.0, concat-stream@~1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -connect@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-2.12.0.tgz#31d8fa0dcacdf1908d822bd2923be8a2d2a7ed9a" - dependencies: - batch "0.5.0" - buffer-crc32 "0.2.1" - bytes "0.2.1" - cookie "0.1.0" - cookie-signature "1.0.1" - debug ">= 0.7.3 < 1" - fresh "0.2.0" - methods "0.1.0" - multiparty "2.2.0" - negotiator "0.3.0" - pause "0.0.1" - qs "0.6.6" - raw-body "1.1.2" - send "0.1.4" - uid2 "0.0.3" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@^1.0.2, content-type@~1.0.1, content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.0.0.tgz#dbdcb69523d3af582f7b5c94b3c25ecf2f3b7355" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - -cookie-parser@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.3.tgz#0fe31fa19d000b95f4aadf1f53fdc2b8a203baa5" - dependencies: - cookie "0.3.1" - cookie-signature "1.0.6" - -cookie-signature@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -cookiejar@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" - -cookiejar@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -crc32-stream@~0.3.1: - version "0.3.4" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.3.4.tgz#73bc25b45fac1db6632231a7bfce8927e9f06552" - dependencies: - buffer-crc32 "~0.2.1" - readable-stream "~1.0.24" - -crc@3.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b" - -create-ecdh@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.1.tgz#44223dfed533193ba5ba54e0df5709b89acf1f82" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cryptiles@0.2.x: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" - dependencies: - boom "0.4.x" - -crypto-browserify@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -ctype@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@*, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@0.7.4, debug@~0.7.2, debug@~0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - -debug@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.0.tgz#33ab915659d8c2cc8a41443d94d6ebd37697ed21" - dependencies: - ms "0.6.2" - -debug@2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.1.2: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -"debug@>= 0.7.3 < 1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130" - -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -delayed-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -deps-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" - dependencies: - JSONStream "^1.0.3" - shasum "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detective@^4.0.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - -dicer@0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" - dependencies: - readable-stream "1.1.x" - streamsearch "0.1.2" - -diff@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -domain-browser@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - -ee-first@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.0.tgz#6a0d7c6221e490feefd92ec3f441c9ce8cd097f4" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emitter-component@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -end-of-stream@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@1.3.x: - version "1.3.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" - dependencies: - esprima "~1.1.1" - estraverse "~1.5.0" - esutils "~1.0.0" - optionalDependencies: - source-map "~0.1.33" - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@1.2.x: - version "1.2.5" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esprima@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -estraverse@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -esutils@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -express-session@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a" - dependencies: - cookie "0.3.1" - cookie-signature "1.0.6" - crc "3.4.4" - debug "2.6.9" - depd "~1.1.1" - on-headers "~1.0.1" - parseurl "~1.3.2" - uid-safe "~2.1.5" - utils-merge "1.0.1" - -express-state@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/express-state/-/express-state-1.0.3.tgz#b6f368743a95d8a91b7683adf593d02b1577ec02" - -express@3.4.8: - version "3.4.8" - resolved "https://registry.yarnpkg.com/express/-/express-3.4.8.tgz#aa7a8986de07053337f4bc5ed9a6453d9cc8e2e1" - dependencies: - buffer-crc32 "0.2.1" - commander "1.3.2" - connect "2.12.0" - cookie "0.1.0" - cookie-signature "1.0.1" - debug ">= 0.7.3 < 1" - fresh "0.2.0" - merge-descriptors "0.0.1" - methods "0.1.0" - mkdirp "0.3.5" - range-parser "0.0.4" - send "0.1.4" - -express@4.x, express@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -file-utils@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/file-utils/-/file-utils-0.1.5.tgz#dc8153c855387cb4dacb0a1725531fa444a6b48c" - dependencies: - findup-sync "~0.1.2" - glob "~3.2.6" - iconv-lite "~0.2.11" - isbinaryfile "~0.1.9" - lodash "~2.1.0" - minimatch "~0.2.12" - rimraf "~2.2.2" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.1.8.tgz#506b91a9396eaa7e32fb42a84077c7a0c736b741" - dependencies: - glob "3.x" - minimatch "0.x" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -find-nearest-file@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.0.0.tgz#bf539d7d0f02996631fa2196680f6776762b9f70" - -findup-sync@~0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" - dependencies: - glob "~3.2.9" - lodash "~2.4.1" - -firefox-profile@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/firefox-profile/-/firefox-profile-0.2.7.tgz#fe46afc2ed6a96f62c5c3bd446fa259f6014a909" - dependencies: - adm-zip "~0.4.3" - archiver "~0.7.1" - async "~0.2.9" - fs-extra "~0.8.1" - lazystream "~0.1.0" - node-uuid "~1.4.1" - wrench "~1.5.1" - xml2js "~0.4.0" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -forEachAsync@~2.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/forEachAsync/-/forEachAsync-2.2.1.tgz#e3723f00903910e1eb4b1db3ad51b5c64a319fec" - dependencies: - sequence "2.x" - -foreach-shim@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/foreach-shim/-/foreach-shim-0.1.1.tgz#be61d75f46abb7176f5abd295e35885751b71d94" - -forever-agent@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" - -form-data@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -form-data@~0.0.3: - version "0.0.10" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.0.10.tgz#db345a5378d86aeeb1ed5d553b869ac192d2f5ed" - dependencies: - async "~0.2.7" - combined-stream "~0.0.4" - mime "~1.2.2" - -form-data@~0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" - dependencies: - async "~0.9.0" - combined-stream "~0.0.4" - mime "~1.2.11" - -formidable@1.0.14: - version "1.0.14" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" - -formidable@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fresh@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.0.tgz#bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -fs-extra@~0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.8.1.tgz#0e5779ffbfedf511bc755595c7f03c06d4b43e8d" - dependencies: - jsonfile "~1.1.0" - mkdirp "0.3.x" - ncp "~0.4.2" - rimraf "~2.2.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.9.0" - -function-bind@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@3.x, glob@~3.2.6, glob@~3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - dependencies: - inherits "2" - minimatch "0.3" - -glob@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^5.0.10, glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.5, glob@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~3.1.11: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" - dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - -glob@~4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz#695c50bdd4e2fb5c5d370b091f388d3707e291a7" - dependencies: - graceful-fs "^3.0.2" - inherits "2" - minimatch "^1.0.0" - once "^1.3.0" - -glob@~4.3.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - -globs-to-files@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/globs-to-files/-/globs-to-files-1.0.0.tgz#54490f6d1f4b9fd2de9d99445146ffb37550380d" - dependencies: - array-uniq "~1.0.2" - asyncreduce "~0.1.4" - glob "^5.0.10" - xtend "^4.0.0" - -graceful-fs@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - -handlebars@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.0.12.tgz#18c6d3440c35e91b19b3ff582b9151ab4985d4fc" - dependencies: - optimist "~0.3" - uglify-js "~2.3" - -handlebars@1.3.x: - version "1.3.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz#9e9b130a93e389491322d975cf3ec1818c37ce34" - dependencies: - optimist "~0.3" - optionalDependencies: - uglify-js "~2.3" - -handlebars@^4.0.1: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" - dependencies: - boom "0.4.x" - cryptiles "0.2.x" - hoek "0.9.x" - sntp "0.2.x" - -hbs@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/hbs/-/hbs-2.4.0.tgz#f4c956cb660d6974dc61214b7c49a21f6aaa3f51" - dependencies: - handlebars "1.0.12" - walk "2.2.1" - -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -highlight.js@7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-7.5.0.tgz#0052595eef15845d842e02a03313afadc3ebd6cc" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@0.9.x: - version "0.9.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-proxy@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.11.2.tgz#c50d2fb06eca79d4238e66fd94393d2e41e63740" - dependencies: - eventemitter3 "1.x.x" - requires-port "0.x.x" - -http-signature@~0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" - dependencies: - asn1 "0.1.11" - assert-plus "^0.1.5" - ctype "0.5.3" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -https-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" - -humanize-duration@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-2.4.0.tgz#04da89e6784af1c881b06ebc9f494dda07b08a17" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.8.tgz#c6019a7595f2cefca702eab694a010bcd9298d20" - -iconv-lite@^0.4.4: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" - dependencies: - safer-buffer "^2.1.0" - -iconv-lite@~0.2.11: - version "0.2.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" - -ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - dependencies: - source-map "~0.5.3" - -insert-module-globals@^7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.6.tgz#15a31d9d394e76d08838b9173016911d7fd4ea1b" - dependencies: - JSONStream "^1.0.3" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - lexical-scope "^1.2.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" - -isbinaryfile@~0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-0.1.9.tgz#15eece35c4ab708d8924da99fb874f2b5cc0b6c4" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -istanbul-middleware@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/istanbul-middleware/-/istanbul-middleware-0.2.2.tgz#83c4c13c128e1a0d6a147792391af3c15a8ab8e0" - dependencies: - archiver "0.14.x" - body-parser "~1.12.3" - express "4.x" - istanbul "0.4.x" - -istanbul@0.4.x: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -istanbul@^0.2.8: - version "0.2.16" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.2.16.tgz#870545a0d4f4b4ce161039e9e805a98c2c700bd9" - dependencies: - abbrev "1.0.x" - async "0.9.x" - escodegen "1.3.x" - esprima "1.2.x" - fileset "0.1.x" - handlebars "1.3.x" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - resolve "0.7.x" - which "1.0.x" - wordwrap "0.0.x" - -js-yaml@3.x: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -jsonfile@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-1.1.1.tgz#da4fd6ad77f1a255203ea63c7bc32dc31ef64433" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - -keypress@0.1.x: - version "0.1.0" - resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -labeled-stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" - dependencies: - inherits "^2.0.1" - isarray "^2.0.4" - stream-splicer "^2.0.0" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lazystream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-0.1.0.tgz#1b25d63c772a4c20f0a5ed0a9d77f484b6e16920" - dependencies: - readable-stream "~1.0.2" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lexical-scope@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" - dependencies: - astw "^2.0.0" - -load-script@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/load-script/-/load-script-0.0.5.tgz#cbd54b27cd7309902b749640c70e996f4c643b63" - -localtunnel@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.5.0.tgz#5be949779325e9f3273021a3f38d2e7a8dcd7c4f" - dependencies: - debug "0.7.4" - optimist "0.3.4" - request "2.11.4" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._isnative@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" - -lodash._objecttypes@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" - -lodash._shimkeys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" - dependencies: - lodash._objecttypes "~2.4.1" - -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.defaults@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" - dependencies: - lodash._objecttypes "~2.4.1" - lodash.keys "~2.4.1" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isobject@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" - dependencies: - lodash._objecttypes "~2.4.1" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.keys@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" - dependencies: - lodash._isnative "~2.4.1" - lodash._shimkeys "~2.4.1" - lodash.isobject "~2.4.1" - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - -lodash@3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.1.0.tgz#0637eaaa36a8a1cfc865c3adfb942189bfb0998d" - -lodash@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" - -lodash@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.2.0.tgz#4bf50a3243f9aeb0bac41a55d3d5990675a462fb" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -marked@0.3.12: - version "0.3.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -merge-descriptors@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-0.0.1.tgz#2ff0980c924cf81d0b5d1fb601177cb8bb56c0d0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" - -methods@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/methods/-/methods-0.1.0.tgz#335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" - -methods@^1.1.1, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - -mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.6: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - -mime-types@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" - -mime@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mime@~1.2.11, mime@~1.2.2, mime@~1.2.7, mime@~1.2.9: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimatch@0.x: - version "0.4.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.4.0.tgz#bd2c7d060d2c8c8fd7cde7f1f2ed2d5b270fdb1b" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimatch@^0.2.14, minimatch@~0.2.11, minimatch@~0.2.12: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimatch@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimatch@^2.0.1: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" - -minimist@^1.1.0, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.4.tgz#03c824d84551ec38a8d1bb5bc350a5a30a354a40" - dependencies: - safe-buffer "^5.1.1" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mkdirp@0.3.5, mkdirp@0.3.x: - version "0.3.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.6.8" - diff "3.2.0" - escape-string-regexp "1.0.5" - glob "7.1.1" - growl "1.9.2" - he "1.1.1" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -module-deps@^4.0.2, module-deps@^4.0.8: - version "4.1.1" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.0" - defined "^1.0.0" - detective "^4.0.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.1.3" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ms@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multer@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/multer/-/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2" - dependencies: - append-field "^0.1.0" - busboy "^0.2.11" - concat-stream "^1.5.0" - mkdirp "^0.5.1" - object-assign "^3.0.0" - on-finished "^2.3.0" - type-is "^1.6.4" - xtend "^4.0.0" - -multiparty@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-2.2.0.tgz#a567c2af000ad22dc8f2a653d91978ae1f5316f4" - dependencies: - readable-stream "~1.1.9" - stream-counter "~0.2.0" - -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -natives@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.3.tgz#44a579be64507ea2d6ed1ca04a9415915cf75558" - -ncp@~0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" - -needle@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.3.0.tgz#706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" - -negotiator@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -node-int64@~0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.3.3.tgz#2d6e6b2ece5de8588b43d88d1bc41b26cd1fa84d" - -node-pre-gyp@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.0" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.1.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-uuid@~1.4.0, node-uuid@~1.4.1: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.4.0.tgz#f22956f31ea7151a821e5f2fb32c113cad8b9f69" - -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -on-finished@^2.3.0, on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-finished@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.2.1.tgz#5c85c1cc36299f78029653f667f27b6b99ebc029" - dependencies: - ee-first "1.1.0" - -on-headers@~1.0.0, on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@1.x, once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -opener@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.0.tgz#d11f86eeeb076883735c9d509f538fe82d10b941" - -optimist@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.4.tgz#4d6d0bd71ffad0da4ba4f6d876d5eeb04e07480b" - dependencies: - wordwrap "~0.0.2" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optimist@~0.3, optimist@~0.3.5: - version "0.3.7" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" - dependencies: - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-browserify@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" - -os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz#cd6ad8ddb290915ad9e22765576025d411f29cb6" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -outpipe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - dependencies: - shell-quote "^1.4.2" - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -path-browserify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.6.0" - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14" - -qs@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" - -qs@0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" - -qs@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-2.4.2.tgz#f7ce788e5777df0b5010da7f7c4e73ba32470f5a" - -qs@6.5.1, qs@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-0.0.4.tgz#c0427ffef51c10acba0782a46c9602e744ff620b" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.2.tgz#c74b3004dea5defd1696171106ac740ec31d62be" - dependencies: - bytes "~0.2.1" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -raw-body@~2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.0.2.tgz#a2c2f98c8531cee99c63d8d238b7de97bb659fca" - dependencies: - bytes "2.1.0" - iconv-lite "0.4.8" - -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - dependencies: - readable-stream "^2.0.2" - -readable-stream@1.1.x, readable-stream@^1.0.27-1, readable-stream@~1.1.11, readable-stream@~1.1.8, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~1.0.2, readable-stream@~1.0.24, readable-stream@~1.0.26, readable-stream@~1.0.33: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -reduce-component@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -request@2.11.4: - version "2.11.4" - resolved "https://registry.yarnpkg.com/request/-/request-2.11.4.tgz#6347d7d44e52dc588108cc1ce5cee975fc8926de" - dependencies: - form-data "~0.0.3" - mime "~1.2.7" - -request@~2.46.0: - version "2.46.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.46.0.tgz#359195d52eaf720bc69742579d04ad6d265a8274" - dependencies: - aws-sign2 "~0.5.0" - bl "~0.9.0" - caseless "~0.6.0" - forever-agent "~0.5.0" - form-data "~0.1.0" - hawk "1.1.1" - http-signature "~0.10.0" - json-stringify-safe "~5.0.0" - mime-types "~1.0.1" - node-uuid "~1.4.0" - oauth-sign "~0.4.0" - qs "~1.2.0" - stringstream "~0.0.4" - tough-cookie ">=0.12.0" - tunnel-agent "~0.4.0" - -requires-port@0.x.x: - version "0.0.1" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-0.0.1.tgz#4b4414411d9df7c855995dd899a8c78a2951c16d" - -resolve@0.7.x: - version "0.7.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.7.4.tgz#395a9ef9e873fbfe12bd14408bd91bb936003d69" - -resolve@1.1.7, resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.3, resolve@^1.1.4: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" - dependencies: - path-parse "^1.0.5" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -rimraf@~2.2.0, rimraf@~2.2.2: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -runnel@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/runnel/-/runnel-0.5.3.tgz#f9362b165a05fc6f5e46e458f77a1f7ecdc0daec" - -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sax@>=0.6.0, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -send@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/send/-/send-0.1.4.tgz#be70d8d1be01de61821af13780b50345a4f71abd" - dependencies: - debug "*" - fresh "0.2.0" - mime "~1.2.9" - range-parser "0.0.4" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -sequence@2.x: - version "2.2.1" - resolved "https://registry.yarnpkg.com/sequence/-/sequence-2.2.1.tgz#7f5617895d44351c0a047e764467690490a16b03" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-copy@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shell-quote@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.1.tgz#ae18442b536a08c720239b079d2f228acbedee40" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shell-quote@^1.4.2, shell-quote@^1.4.3, shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -should-equal@^1.0.0: - version "1.0.1" - resolved "http://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz#0b6e9516f2601a9fb0bb2dcc369afa1c7e200af7" - dependencies: - should-type "^1.0.0" - -should-format@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" - dependencies: - should-type "^1.3.0" - should-type-adaptors "^1.0.1" - -should-http@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/should-http/-/should-http-0.1.1.tgz#9b793843f4024885781eb6abacc4030e1e9f21f0" - dependencies: - content-type "^1.0.2" - -should-type-adaptors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" - dependencies: - should-type "^1.3.0" - should-util "^1.0.0" - -should-type@^1.0.0, should-type@^1.3.0, should-type@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" - -should-util@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" - -should@^11.2.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/should/-/should-11.2.1.tgz#90f55145552d01cfc200666e4e818a1c9670eda2" - dependencies: - should-equal "^1.0.0" - should-format "^3.0.2" - should-type "^1.4.0" - should-type-adaptors "^1.0.1" - should-util "^1.0.0" - -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -sntp@0.2.x: - version "0.2.4" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" - dependencies: - hoek "0.9.x" - -source-map-cjs@~0.1.31: - version "0.1.32" - resolved "https://registry.yarnpkg.com/source-map-cjs/-/source-map-cjs-0.1.32.tgz#b113f00065b484f4d3a1123ef084046a56228ce7" - -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@~0.1.33, source-map@~0.1.7: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - -source-map@~0.5.1, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -split@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/split/-/split-0.1.2.tgz#f0710744c453d551fc7143ead983da6014e336cc" - dependencies: - through "1" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -stack-mapper@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stack-mapper/-/stack-mapper-0.2.2.tgz#789029054937b7d47c1b5b67612cbb1e7cfe7071" - dependencies: - array-map "0.0.0" - foreach-shim "~0.1.1" - isarray "0.0.1" - source-map-cjs "~0.1.31" - -"stacktrace-js@http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712": - version "0.6.0" - resolved "http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712#62e2135deea45b38e7e5dd56e61e55da299607d4" - -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stream-browserify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-counter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" - dependencies: - readable-stream "~1.1.8" - -stream-http@^2.0.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.3" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~0.10.0, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - dependencies: - minimist "^1.1.0" - -superagent@0.15.7: - version "0.15.7" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.15.7.tgz#095c70b8afffbc072f1458f39684d4854d6333a3" - dependencies: - cookiejar "1.3.0" - debug "~0.7.2" - emitter-component "1.0.0" - formidable "1.0.14" - methods "0.0.1" - mime "1.2.5" - qs "0.6.5" - reduce-component "1.0.1" - -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - dependencies: - acorn-node "^1.2.0" - -tap-finished@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tap-finished/-/tap-finished-0.0.1.tgz#08b5b543fdc04830290c6c561279552e71c4bd67" - dependencies: - tap-parser "~0.2.0" - through "~2.3.4" - -tap-parser@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.7.0.tgz#728a61d64680a5b48d5dbd9dbd0a4d48f5c35bcb" - dependencies: - inherits "~2.0.1" - minimist "^0.2.0" - readable-stream "~1.1.11" - -tap-parser@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.2.1.tgz#8e1e823f2114ee21d032e2f31e4fb642a296f50b" - dependencies: - split "~0.1.2" - -tar-stream@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.0.2.tgz#fd19b4a17900fa704f6a133e3045aead0562ab95" - dependencies: - bl "^0.9.0" - end-of-stream "^1.0.0" - readable-stream "^1.0.27-1" - xtend "^4.0.0" - -tar-stream@~1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.1.5.tgz#be9218c130c20029e107b0f967fb23de0579d13c" - dependencies: - bl "^0.9.0" - end-of-stream "^1.0.0" - readable-stream "~1.0.33" - xtend "^4.0.0" - -tar@^4: - version "4.4.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.1.tgz#b25d5a8470c976fd7a9a8a350f42c59e9fa81749" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.2.4" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.1" - yallist "^3.0.2" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/through/-/through-1.1.2.tgz#344a5425a3773314ca7e0eb6512fbafaf76c0bfe" - -through@2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.4.tgz#495e40e8d8a8eaebc7c275ea88c2b8fc14c56455" - -"through@>=2.2.7 <3", through@^2.3.4, through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -tough-cookie@>=0.12.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -tty-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - -tunnel-agent@~0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@^1.6.4, type-is@~1.6.15, type-is@~1.6.16, type-is@~1.6.2: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6, typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-js@~2.3: - version "2.3.6" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" - dependencies: - async "~0.2.6" - optimist "~0.3.5" - source-map "~0.1.7" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uid-safe@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" - dependencies: - random-bytes "~1.0.0" - -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - -underscore.string@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" - -underscore.string@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" - -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3, util@~0.10.1: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -vargs@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" - -vary@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vm-browserify@~0.0.1: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -walk@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/walk/-/walk-2.2.1.tgz#5ada1f8e49e47d4b7445d8be7a2e1e631ab43016" - dependencies: - forEachAsync "~2.2" - -watchify@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.7.0.tgz#ee2f2c5c8c37312303f998b818b2b3450eefe648" - dependencies: - anymatch "^1.3.0" - browserify "^13.0.0" - chokidar "^1.0.0" - defined "^1.0.0" - outpipe "^1.1.0" - through2 "^2.0.0" - xtend "^4.0.0" - -wd@0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/wd/-/wd-0.3.11.tgz#522716c79a7a10e781acbb2c6cafe588f701fcc0" - dependencies: - archiver "~0.12.0" - async "~0.9.0" - lodash "~2.4.1" - q "~1.0.1" - request "~2.46.0" - underscore.string "~2.3.3" - vargs "~0.1.0" - -which@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" - -which@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@0.0.x, wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -wrench@~1.5.1: - version "1.5.9" - resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.9.tgz#411691c63a9b2531b1700267279bdeca23b2142a" - -xml2js@~0.4.0: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - -xtend@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - dependencies: - object-keys "~0.4.0" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yamljs@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.1.4.tgz#665789afc2ad4b902bf403f00e85b6434e0f3300" - dependencies: - argparse "~0.1.4" - glob "~3.1.11" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -zip-stream@~0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.2.3.tgz#aef095376cfe138959a81341981d26338b46d8d3" - dependencies: - debug "~0.7.4" - lodash.defaults "~2.4.1" - readable-stream "~1.0.24" - -zip-stream@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.4.1.tgz#4ea795a8ce19e9fab49a31d1d0877214159f03a3" - dependencies: - compress-commons "~0.1.0" - lodash "~2.4.1" - readable-stream "~1.0.26" - -zip-stream@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.5.2.tgz#32dcbc506d0dab4d21372625bd7ebaac3c2fff56" - dependencies: - compress-commons "~0.2.0" - lodash "~3.2.0" - readable-stream "~1.0.26" - -zuul-localtunnel@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/zuul-localtunnel/-/zuul-localtunnel-1.1.0.tgz#70ad27fb0a6af968a2151fc5d5e895daa1aed15d" - dependencies: - localtunnel "1.5.0" - -zuul@^3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/zuul/-/zuul-3.11.1.tgz#7080bbbf22a6d97f60879b3b8f2a823c5a99bab2" - dependencies: - JSON2 "0.1.0" - batch "0.5.0" - browserify "13.0.0" - browserify-istanbul "0.1.5" - char-split "0.2.0" - colors "0.6.2" - commander "2.1.0" - compression "1.5.0" - convert-source-map "1.0.0" - debug "2.1.0" - express "3.4.8" - express-state "1.0.3" - find-nearest-file "1.0.0" - firefox-profile "0.2.7" - globs-to-files "1.0.0" - hbs "2.4.0" - highlight.js "7.5.0" - http-proxy "1.11.2" - humanize-duration "2.4.0" - istanbul-middleware "0.2.2" - load-script "0.0.5" - lodash "3.10.1" - opener "1.4.0" - osenv "0.0.3" - shallow-copy "0.0.1" - shell-quote "1.4.1" - stack-mapper "0.2.2" - stacktrace-js "http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712" - superagent "0.15.7" - tap-finished "0.0.1" - tap-parser "0.7.0" - watchify "3.7.0" - wd "0.3.11" - xtend "2.1.2" - yamljs "0.1.4" - zuul-localtunnel "1.1.0" diff --git a/build/node_modules/supports-color/browser.js b/build/node_modules/supports-color/browser.js new file mode 100644 index 00000000..f097aecd --- /dev/null +++ b/build/node_modules/supports-color/browser.js @@ -0,0 +1,24 @@ +/* eslint-env browser */ +'use strict'; + +function getChromeVersion() { + const matches = /(Chrome|Chromium)\/(?\d+)\./.exec(navigator.userAgent); + + if (!matches) { + return; + } + + return Number.parseInt(matches.groups.chromeVersion, 10); +} + +const colorSupport = getChromeVersion() >= 69 ? { + level: 1, + hasBasic: true, + has256: false, + has16m: false +} : false; + +module.exports = { + stdout: colorSupport, + stderr: colorSupport +}; diff --git a/build/node_modules/supports-color/cli.js b/build/node_modules/supports-color/cli.js deleted file mode 100755 index e7469876..00000000 --- a/build/node_modules/supports-color/cli.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -'use strict'; -var pkg = require('./package.json'); -var supportsColor = require('./'); -var argv = process.argv.slice(2); - -function help() { - console.log([ - '', - ' ' + pkg.description, - '', - ' Usage', - ' supports-color', - '', - ' Exits with code 0 if color is supported and 1 if not' - ].join('\n')); -} - -if (argv.indexOf('--help') !== -1) { - help(); - return; -} - -if (argv.indexOf('--version') !== -1) { - console.log(pkg.version); - return; -} - -process.exit(supportsColor ? 0 : 1); diff --git a/build/node_modules/supports-color/index.js b/build/node_modules/supports-color/index.js index a2b97845..2dd2fcb0 100644 --- a/build/node_modules/supports-color/index.js +++ b/build/node_modules/supports-color/index.js @@ -1,39 +1,152 @@ 'use strict'; -var argv = process.argv; +const os = require('os'); +const tty = require('tty'); +const hasFlag = require('has-flag'); -module.exports = (function () { - if (argv.indexOf('--no-color') !== -1 || - argv.indexOf('--no-colors') !== -1 || - argv.indexOf('--color=false') !== -1) { +const {env} = process; + +let flagForceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + flagForceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + flagForceColor = 1; +} + +function envForceColor() { + if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + return 1; + } + + if (env.FORCE_COLOR === 'false') { + return 0; + } + + return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3); + } +} + +function translateLevel(level) { + if (level === 0) { return false; } - if (argv.indexOf('--color') !== -1 || - argv.indexOf('--colors') !== -1 || - argv.indexOf('--color=true') !== -1 || - argv.indexOf('--color=always') !== -1) { - return true; + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) { + const noFlagForceColor = envForceColor(); + if (noFlagForceColor !== undefined) { + flagForceColor = noFlagForceColor; } - if (process.stdout && !process.stdout.isTTY) { - return false; + const forceColor = sniffFlags ? flagForceColor : noFlagForceColor; + + if (forceColor === 0) { + return 0; + } + + if (sniffFlags) { + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + } + + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; + } + + const min = forceColor || 0; + + if (env.TERM === 'dumb') { + return min; } if (process.platform === 'win32') { - return true; + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; } - if ('COLORTERM' in process.env) { - return true; + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; } - if (process.env.TERM === 'dumb') { - return false; + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; } - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return true; + if ('COLORTERM' in env) { + return 1; } - return false; -})(); + return min; +} + +function getSupportLevel(stream, options = {}) { + const level = supportsColor(stream, { + streamIsTTY: stream && stream.isTTY, + ...options + }); + + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel({isTTY: tty.isatty(1)}), + stderr: getSupportLevel({isTTY: tty.isatty(2)}) +}; diff --git a/build/node_modules/supports-color/license b/build/node_modules/supports-color/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/supports-color/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/supports-color/package.json b/build/node_modules/supports-color/package.json index 7a2b8d91..8029f290 100644 --- a/build/node_modules/supports-color/package.json +++ b/build/node_modules/supports-color/package.json @@ -1,56 +1,61 @@ { - "_from": "supports-color@1.2.0", - "_id": "supports-color@1.2.0", + "_from": "supports-color@8.1.1", + "_id": "supports-color@8.1.1", "_inBundle": false, - "_integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "_integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "_location": "/supports-color", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "supports-color@1.2.0", + "raw": "supports-color@8.1.1", "name": "supports-color", "escapedName": "supports-color", - "rawSpec": "1.2.0", + "rawSpec": "8.1.1", "saveSpec": null, - "fetchSpec": "1.2.0" + "fetchSpec": "8.1.1" }, "_requiredBy": [ "/mocha" ], - "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "_shasum": "ff1ed1e61169d06b3cf2d588e188b18d8847e17e", - "_spec": "supports-color@1.2.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-color/-/supports-color-8.1.1.tgz", + "_shasum": "cd6fc17e28500cff56c1b86c0a7fd4a54a73005c", + "_spec": "supports-color@8.1.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" - }, - "bin": { - "supports-color": "cli.js" + "url": "https://sindresorhus.com" }, + "browser": "browser.js", "bugs": { - "url": "https://github.com/sindresorhus/supports-color/issues" + "url": "https://github.com/chalk/supports-color/issues" }, "bundleDependencies": false, + "dependencies": { + "has-flag": "^4.0.0" + }, "deprecated": false, "description": "Detect whether a terminal supports color", "devDependencies": { - "mocha": "*", - "require-uncached": "^1.0.2" + "ava": "^2.4.0", + "import-fresh": "^3.2.2", + "xo": "^0.35.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "exports": { + "node": "./index.js", + "default": "./browser.js" }, "files": [ "index.js", - "cli.js" + "browser.js" ], - "homepage": "https://github.com/sindresorhus/supports-color#readme", + "funding": "https://github.com/chalk/supports-color?sponsor=1", + "homepage": "https://github.com/chalk/supports-color#readme", "keywords": [ - "cli", - "bin", "color", "colour", "colors", @@ -68,16 +73,18 @@ "support", "supports", "capability", - "detect" + "detect", + "truecolor", + "16m" ], "license": "MIT", "name": "supports-color", "repository": { "type": "git", - "url": "git+https://github.com/sindresorhus/supports-color.git" + "url": "git+https://github.com/chalk/supports-color.git" }, "scripts": { - "test": "mocha" + "test": "xo && ava" }, - "version": "1.2.0" + "version": "8.1.1" } diff --git a/build/node_modules/supports-color/readme.md b/build/node_modules/supports-color/readme.md index 32d4f46e..3eedd1ca 100644 --- a/build/node_modules/supports-color/readme.md +++ b/build/node_modules/supports-color/readme.md @@ -1,44 +1,77 @@ -# supports-color [![Build Status](https://travis-ci.org/sindresorhus/supports-color.svg?branch=master)](https://travis-ci.org/sindresorhus/supports-color) +# supports-color > Detect whether a terminal supports color - ## Install -```sh -$ npm install --save supports-color ``` - +$ npm install supports-color +``` ## Usage ```js -var supportsColor = require('supports-color'); +const supportsColor = require('supports-color'); + +if (supportsColor.stdout) { + console.log('Terminal stdout supports color'); +} -if (supportsColor) { - console.log('Terminal supports color'); +if (supportsColor.stdout.has256) { + console.log('Terminal stdout supports 256 colors'); +} + +if (supportsColor.stderr.has16m) { + console.log('Terminal stderr supports 16 million colors (truecolor)'); } ``` +## API + +Returns an `Object` with a `stdout` and `stderr` property for testing either streams. Each property is an `Object`, or `false` if color is not supported. + +The `stdout`/`stderr` objects specifies a level of support for color through a `.level` property and a corresponding flag: + +- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) +- `.level = 2` and `.has256 = true`: 256 color support +- `.level = 3` and `.has16m = true`: Truecolor support (16 million colors) + +### `require('supports-color').supportsColor(stream, options?)` + +Additionally, `supports-color` exposes the `.supportsColor()` function that takes an arbitrary write stream (e.g. `process.stdout`) and an optional options object to (re-)evaluate color support for an arbitrary stream. + +For example, `require('supports-color').stdout` is the equivalent of `require('supports-color').supportsColor(process.stdout)`. + +The options object supports a single boolean property `sniffFlags`. By default it is `true`, which instructs `supportsColor()` to sniff `process.argv` for the multitude of `--color` flags (see _Info_ below). If `false`, then `process.argv` is not considered when determining color support. + +## Info + It obeys the `--color` and `--no-color` CLI flags. +For situations where using `--color` is not possible, use the environment variable `FORCE_COLOR=1` (level 1), `FORCE_COLOR=2` (level 2), or `FORCE_COLOR=3` (level 3) to forcefully enable color, or `FORCE_COLOR=0` to forcefully disable. The use of `FORCE_COLOR` overrides all other color support checks. -## CLI +Explicit 256/Truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. -```sh -$ npm install --global supports-color -``` +## Related -``` -$ supports-color --help +- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - Usage - supports-color +## Maintainers - Exits with code 0 if color is supported and 1 if not -``` +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +--- -## License +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            -MIT © [Sindre Sorhus](http://sindresorhus.com) +--- diff --git a/build/node_modules/supports-preserve-symlinks-flag/.eslintrc b/build/node_modules/supports-preserve-symlinks-flag/.eslintrc new file mode 100644 index 00000000..346ffeca --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/.eslintrc @@ -0,0 +1,14 @@ +{ + "root": true, + + "extends": "@ljharb", + + "env": { + "browser": true, + "node": true, + }, + + "rules": { + "id-length": "off", + }, +} diff --git a/build/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml b/build/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml new file mode 100644 index 00000000..e8d64f37 --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/supports-preserve-symlink-flag +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/available-typed-arrays/.nycrc b/build/node_modules/supports-preserve-symlinks-flag/.nycrc similarity index 100% rename from build/node_modules/available-typed-arrays/.nycrc rename to build/node_modules/supports-preserve-symlinks-flag/.nycrc diff --git a/build/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md b/build/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md new file mode 100644 index 00000000..61f607f4 --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## v1.0.0 - 2022-01-02 + +### Commits + +- Tests [`e2f59ad`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/e2f59ad74e2ae0f5f4899fcde6a6f693ab7cc074) +- Initial commit [`dc222aa`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/dc222aad3c0b940d8d3af1ca9937d108bd2dc4b9) +- [meta] do not publish workflow files [`5ef77f7`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/5ef77f7cb6946d16ee38672be9ec0f1bbdf63262) +- npm init [`992b068`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/992b068503a461f7e8676f40ca2aab255fd8d6ff) +- read me [`6c9afa9`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/6c9afa9fabc8eaf0814aaed6dd01e6df0931b76d) +- Initial implementation [`2f98925`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/2f9892546396d4ab0ad9f1ff83e76c3f01234ae8) +- [meta] add `auto-changelog` [`6c476ae`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/6c476ae1ed7ce68b0480344f090ac2844f35509d) +- [Dev Deps] add `eslint`, `@ljharb/eslint-config` [`d0fffc8`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/d0fffc886d25fba119355520750a909d64da0087) +- Only apps should have lockfiles [`ab318ed`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/ab318ed7ae62f6c2c0e80a50398d40912afd8f69) +- [meta] add `safe-publish-latest` [`2bb23b3`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/2bb23b3ebab02dc4135c4cdf0217db82835b9fca) +- [meta] add `sideEffects` flag [`600223b`](https://github.com/inspect-js/node-supports-preserve-symlinks-flag/commit/600223ba24f30779f209d9097721eff35ed62741) diff --git a/build/node_modules/supports-preserve-symlinks-flag/LICENSE b/build/node_modules/supports-preserve-symlinks-flag/LICENSE new file mode 100644 index 00000000..2e7b9a3e --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/node_modules/supports-preserve-symlinks-flag/README.md b/build/node_modules/supports-preserve-symlinks-flag/README.md new file mode 100644 index 00000000..eb05b124 --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/README.md @@ -0,0 +1,42 @@ +# node-supports-preserve-symlinks-flag [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Determine if the current node version supports the `--preserve-symlinks` flag. + +## Example + +```js +var supportsPreserveSymlinks = require('node-supports-preserve-symlinks-flag'); +var assert = require('assert'); + +assert.equal(supportsPreserveSymlinks, null); // in a browser +assert.equal(supportsPreserveSymlinks, false); // in node < v6.2 +assert.equal(supportsPreserveSymlinks, true); // in node v6.2+ +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/node-supports-preserve-symlinks-flag +[npm-version-svg]: https://versionbadg.es/inspect-js/node-supports-preserve-symlinks-flag.svg +[deps-svg]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag.svg +[deps-url]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag +[dev-deps-svg]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/node-supports-preserve-symlinks-flag#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/node-supports-preserve-symlinks-flag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/node-supports-preserve-symlinks-flag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/node-supports-preserve-symlinks-flag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=node-supports-preserve-symlinks-flag +[codecov-image]: https://codecov.io/gh/inspect-js/node-supports-preserve-symlinks-flag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/node-supports-preserve-symlinks-flag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/node-supports-preserve-symlinks-flag +[actions-url]: https://github.com/inspect-js/node-supports-preserve-symlinks-flag/actions diff --git a/build/node_modules/supports-preserve-symlinks-flag/browser.js b/build/node_modules/supports-preserve-symlinks-flag/browser.js new file mode 100644 index 00000000..087be1fe --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/browser.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = null; diff --git a/build/node_modules/supports-preserve-symlinks-flag/index.js b/build/node_modules/supports-preserve-symlinks-flag/index.js new file mode 100644 index 00000000..86fd5d33 --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/index.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = ( +// node 12+ + process.allowedNodeEnvironmentFlags && process.allowedNodeEnvironmentFlags.has('--preserve-symlinks') +) || ( +// node v6.2 - v11 + String(module.constructor._findPath).indexOf('preserveSymlinks') >= 0 // eslint-disable-line no-underscore-dangle +); diff --git a/build/node_modules/supports-preserve-symlinks-flag/package.json b/build/node_modules/supports-preserve-symlinks-flag/package.json new file mode 100644 index 00000000..c14193cc --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/package.json @@ -0,0 +1,98 @@ +{ + "_from": "supports-preserve-symlinks-flag@^1.0.0", + "_id": "supports-preserve-symlinks-flag@1.0.0", + "_inBundle": false, + "_integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "_location": "/supports-preserve-symlinks-flag", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "supports-preserve-symlinks-flag@^1.0.0", + "name": "supports-preserve-symlinks-flag", + "escapedName": "supports-preserve-symlinks-flag", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/resolve" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "_shasum": "6eda4bd344a3c94aea376d4cc31bc77311039e09", + "_spec": "supports-preserve-symlinks-flag@^1.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/resolve", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "browser": "./browser.js", + "bugs": { + "url": "https://github.com/inspect-js/node-supports-preserve-symlinks-flag/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Determine if the current node version supports the `--preserve-symlinks` flag.", + "devDependencies": { + "@ljharb/eslint-config": "^20.1.0", + "aud": "^1.1.5", + "auto-changelog": "^2.3.0", + "eslint": "^8.6.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "semver": "^6.3.0", + "tape": "^5.4.0" + }, + "engines": { + "node": ">= 0.4" + }, + "exports": { + ".": [ + { + "browser": "./browser.js", + "default": "./index.js" + }, + "./index.js" + ], + "./package.json": "./package.json" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "homepage": "https://github.com/inspect-js/node-supports-preserve-symlinks-flag#readme", + "keywords": [ + "node", + "flag", + "symlink", + "symlinks", + "preserve-symlinks" + ], + "license": "MIT", + "main": "./index.js", + "name": "supports-preserve-symlinks-flag", + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git" + }, + "scripts": { + "lint": "eslint --ext=js,mjs .", + "posttest": "aud --production", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "version": "auto-changelog && git add CHANGELOG.md" + }, + "sideEffects": false, + "version": "1.0.0" +} diff --git a/build/node_modules/supports-preserve-symlinks-flag/test/index.js b/build/node_modules/supports-preserve-symlinks-flag/test/index.js new file mode 100644 index 00000000..9938d671 --- /dev/null +++ b/build/node_modules/supports-preserve-symlinks-flag/test/index.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); +var semver = require('semver'); + +var supportsPreserveSymlinks = require('../'); +var browser = require('../browser'); + +test('supportsPreserveSymlinks', function (t) { + t.equal(typeof supportsPreserveSymlinks, 'boolean', 'is a boolean'); + + t.equal(browser, null, 'browser file is `null`'); + t.equal( + supportsPreserveSymlinks, + null, + 'in a browser, is null', + { skip: typeof window === 'undefined' } + ); + + var expected = semver.satisfies(process.version, '>= 6.2'); + t.equal( + supportsPreserveSymlinks, + expected, + 'is true in node v6.2+, false otherwise (actual: ' + supportsPreserveSymlinks + ', expected ' + expected + ')', + { skip: typeof window !== 'undefined' } + ); + + t.end(); +}); diff --git a/build/node_modules/text-hex/package.json b/build/node_modules/text-hex/package.json index 7b5ba34d..ec6bc2ab 100644 --- a/build/node_modules/text-hex/package.json +++ b/build/node_modules/text-hex/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/colorspace" ], - "_resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/text-hex/-/text-hex-1.0.0.tgz", "_shasum": "69dc9c1b17446ee79a92bf5b884bb4b9127506f5", "_spec": "text-hex@1.0.x", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/colorspace", diff --git a/build/node_modules/to-regex-range/LICENSE b/build/node_modules/to-regex-range/LICENSE new file mode 100644 index 00000000..7cccaf9e --- /dev/null +++ b/build/node_modules/to-regex-range/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/to-regex-range/README.md b/build/node_modules/to-regex-range/README.md new file mode 100644 index 00000000..38887daf --- /dev/null +++ b/build/node_modules/to-regex-range/README.md @@ -0,0 +1,305 @@ +# to-regex-range [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range) + +> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save to-regex-range +``` + +
            +What does this do? + +
            + +This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers. + +**Example** + +```js +const toRegexRange = require('to-regex-range'); +const regex = new RegExp(toRegexRange('15', '95')); +``` + +A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string). + +
            + +
            + +
            +Why use this library? + +
            + +### Convenience + +Creating regular expressions for matching numbers gets deceptively complicated pretty fast. + +For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc: + +* regex for matching `1` => `/1/` (easy enough) +* regex for matching `1` through `5` => `/[1-5]/` (not bad...) +* regex for matching `1` or `5` => `/(1|5)/` (still easy...) +* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...) +* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...) +* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...) +* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!) + +The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation. + +**Learn more** + +If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful. + +### Heavily tested + +As of April 07, 2019, this library runs [>1m test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are correct. + +Tests run in ~280ms on my MacBook Pro, 2.5 GHz Intel Core i7. + +### Optimized + +Generated regular expressions are optimized: + +* duplicate sequences and character classes are reduced using quantifiers +* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative +* uses fragment caching to avoid processing the same exact string more than once + +
            + +
            + +## Usage + +Add this library to your javascript application with the following line of code + +```js +const toRegexRange = require('to-regex-range'); +``` + +The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers). + +```js +const source = toRegexRange('15', '95'); +//=> 1[5-9]|[2-8][0-9]|9[0-5] + +const regex = new RegExp(`^${source}$`); +console.log(regex.test('14')); //=> false +console.log(regex.test('50')); //=> true +console.log(regex.test('94')); //=> true +console.log(regex.test('96')); //=> false +``` + +## Options + +### options.capture + +**Type**: `boolean` + +**Deafault**: `undefined` + +Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges. + +```js +console.log(toRegexRange('-10', '10')); +//=> -[1-9]|-?10|[0-9] + +console.log(toRegexRange('-10', '10', { capture: true })); +//=> (-[1-9]|-?10|[0-9]) +``` + +### options.shorthand + +**Type**: `boolean` + +**Deafault**: `undefined` + +Use the regex shorthand for `[0-9]`: + +```js +console.log(toRegexRange('0', '999999')); +//=> [0-9]|[1-9][0-9]{1,5} + +console.log(toRegexRange('0', '999999', { shorthand: true })); +//=> \d|[1-9]\d{1,5} +``` + +### options.relaxZeros + +**Type**: `boolean` + +**Default**: `true` + +This option relaxes matching for leading zeros when when ranges are zero-padded. + +```js +const source = toRegexRange('-0010', '0010'); +const regex = new RegExp(`^${source}$`); +console.log(regex.test('-10')); //=> true +console.log(regex.test('-010')); //=> true +console.log(regex.test('-0010')); //=> true +console.log(regex.test('10')); //=> true +console.log(regex.test('010')); //=> true +console.log(regex.test('0010')); //=> true +``` + +When `relaxZeros` is false, matching is strict: + +```js +const source = toRegexRange('-0010', '0010', { relaxZeros: false }); +const regex = new RegExp(`^${source}$`); +console.log(regex.test('-10')); //=> false +console.log(regex.test('-010')); //=> false +console.log(regex.test('-0010')); //=> true +console.log(regex.test('10')); //=> false +console.log(regex.test('010')); //=> false +console.log(regex.test('0010')); //=> true +``` + +## Examples + +| **Range** | **Result** | **Compile time** | +| --- | --- | --- | +| `toRegexRange(-10, 10)` | `-[1-9]\|-?10\|[0-9]` | _132μs_ | +| `toRegexRange(-100, -10)` | `-1[0-9]\|-[2-9][0-9]\|-100` | _50μs_ | +| `toRegexRange(-100, 100)` | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]` | _42μs_ | +| `toRegexRange(001, 100)` | `0{0,2}[1-9]\|0?[1-9][0-9]\|100` | _109μs_ | +| `toRegexRange(001, 555)` | `0{0,2}[1-9]\|0?[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _51μs_ | +| `toRegexRange(0010, 1000)` | `0{0,2}1[0-9]\|0{0,2}[2-9][0-9]\|0?[1-9][0-9]{2}\|1000` | _31μs_ | +| `toRegexRange(1, 50)` | `[1-9]\|[1-4][0-9]\|50` | _24μs_ | +| `toRegexRange(1, 55)` | `[1-9]\|[1-4][0-9]\|5[0-5]` | _23μs_ | +| `toRegexRange(1, 555)` | `[1-9]\|[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _30μs_ | +| `toRegexRange(1, 5555)` | `[1-9]\|[1-9][0-9]{1,2}\|[1-4][0-9]{3}\|5[0-4][0-9]{2}\|55[0-4][0-9]\|555[0-5]` | _43μs_ | +| `toRegexRange(111, 555)` | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _38μs_ | +| `toRegexRange(29, 51)` | `29\|[34][0-9]\|5[01]` | _24μs_ | +| `toRegexRange(31, 877)` | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]` | _32μs_ | +| `toRegexRange(5, 5)` | `5` | _8μs_ | +| `toRegexRange(5, 6)` | `5\|6` | _11μs_ | +| `toRegexRange(1, 2)` | `1\|2` | _6μs_ | +| `toRegexRange(1, 5)` | `[1-5]` | _15μs_ | +| `toRegexRange(1, 10)` | `[1-9]\|10` | _22μs_ | +| `toRegexRange(1, 100)` | `[1-9]\|[1-9][0-9]\|100` | _25μs_ | +| `toRegexRange(1, 1000)` | `[1-9]\|[1-9][0-9]{1,2}\|1000` | _31μs_ | +| `toRegexRange(1, 10000)` | `[1-9]\|[1-9][0-9]{1,3}\|10000` | _34μs_ | +| `toRegexRange(1, 100000)` | `[1-9]\|[1-9][0-9]{1,4}\|100000` | _36μs_ | +| `toRegexRange(1, 1000000)` | `[1-9]\|[1-9][0-9]{1,5}\|1000000` | _42μs_ | +| `toRegexRange(1, 10000000)` | `[1-9]\|[1-9][0-9]{1,6}\|10000000` | _42μs_ | + +## Heads up! + +**Order of arguments** + +When the `min` is larger than the `max`, values will be flipped to create a valid range: + +```js +toRegexRange('51', '29'); +``` + +Is effectively flipped to: + +```js +toRegexRange('29', '51'); +//=> 29|[3-4][0-9]|5[0-1] +``` + +**Steps / increments** + +This library does not support steps (increments). A pr to add support would be welcome. + +## History + +### v2.0.0 - 2017-04-21 + +**New features** + +Adds support for zero-padding! + +### v1.0.0 + +**Optimizations** + +Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching. + +## Attribution + +Inspired by the python library [range-regex](https://github.com/dimka665/range-regex). + +## About + +
            +Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
            + +
            +Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
            + +
            +Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
            + +### Related projects + +You might also be interested in these projects: + +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by micromatch.") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") +* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") +* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 63 | [jonschlinkert](https://github.com/jonschlinkert) | +| 3 | [doowb](https://github.com/doowb) | +| 2 | [realityking](https://github.com/realityking) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +Please consider supporting me on Patreon, or [start your own Patreon page](https://patreon.com/invite/bxpbvm)! + + + + + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 07, 2019._ \ No newline at end of file diff --git a/build/node_modules/to-regex-range/index.js b/build/node_modules/to-regex-range/index.js new file mode 100644 index 00000000..77fbaced --- /dev/null +++ b/build/node_modules/to-regex-range/index.js @@ -0,0 +1,288 @@ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +const isNumber = require('is-number'); + +const toRegexRange = (min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError('toRegexRange: expected the first argument to be a number'); + } + + if (max === void 0 || min === max) { + return String(min); + } + + if (isNumber(max) === false) { + throw new TypeError('toRegexRange: expected the second argument to be a number.'); + } + + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === 'boolean') { + opts.relaxZeros = opts.strictZeros === false; + } + + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + + let a = Math.min(min, max); + let b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives, opts); + + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) { + state.result = `(?:${state.result})`; + } + + toRegexRange.cache[cacheKey] = state; + return state.result; +}; + +function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; + let onlyPositive = filterPatterns(pos, neg, '', false, options) || []; + let intersected = filterPatterns(neg, pos, '-?', true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + + let stop = countNines(min, nines); + let stops = new Set([max]); + + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops = [...stops]; + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit, options); + + } else { + count++; + } + } + + if (count) { + pattern += options.shorthand === true ? '\\d' : '[0-9]'; + } + + return { pattern, count: [count], digits }; +} + +function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + + for (let i = 0; i < ranges.length; i++) { + let max = ranges[i]; + let obj = rangeToPattern(String(start), String(max), options); + let zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(max, tok, options); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + + for (let ele of arr) { + let { string } = ele; + + // only push if _both_ are negative... + if (!intersection && !contains(comparison, 'string', string)) { + result.push(prefix + string); + } + + // or _both_ are positive + if (intersection && contains(comparison, 'string', string)) { + result.push(prefix + string); + } + } + return result; +} + +/** + * Zip strings + */ + +function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function contains(arr, key, val) { + return arr.some(ele => ele[key] === val); +} + +function countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) { + return `{${start + (stop ? ',' + stop : '')}}`; + } + return ''; +} + +function toCharacterClass(a, b, options) { + return `[${a}${(b - a === 1) ? '' : '-'}${b}]`; +} + +function hasPadding(str) { + return /^-?(0+)\d/.test(str); +} + +function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + + switch (diff) { + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } +} + +/** + * Cache + */ + +toRegexRange.cache = {}; +toRegexRange.clearCache = () => (toRegexRange.cache = {}); + +/** + * Expose `toRegexRange` + */ + +module.exports = toRegexRange; diff --git a/build/node_modules/to-regex-range/package.json b/build/node_modules/to-regex-range/package.json new file mode 100644 index 00000000..9e0e0a1f --- /dev/null +++ b/build/node_modules/to-regex-range/package.json @@ -0,0 +1,125 @@ +{ + "_from": "to-regex-range@^5.0.1", + "_id": "to-regex-range@5.0.1", + "_inBundle": false, + "_integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "_location": "/to-regex-range", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "to-regex-range@^5.0.1", + "name": "to-regex-range", + "escapedName": "to-regex-range", + "rawSpec": "^5.0.1", + "saveSpec": null, + "fetchSpec": "^5.0.1" + }, + "_requiredBy": [ + "/fill-range" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "_shasum": "1648c44aae7c8d988a326018ed72f5b4dd0392e4", + "_spec": "to-regex-range@^5.0.1", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/fill-range", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "bugs": { + "url": "https://github.com/micromatch/to-regex-range/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Jon Schlinkert", + "url": "http://twitter.com/jonschlinkert" + }, + { + "name": "Rouven Weßling", + "url": "www.rouvenwessling.de" + } + ], + "dependencies": { + "is-number": "^7.0.0" + }, + "deprecated": false, + "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", + "devDependencies": { + "fill-range": "^6.0.0", + "gulp-format-md": "^2.0.0", + "mocha": "^6.0.2", + "text-table": "^0.2.0", + "time-diff": "^0.3.1" + }, + "engines": { + "node": ">=8.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/micromatch/to-regex-range", + "keywords": [ + "bash", + "date", + "expand", + "expansion", + "expression", + "glob", + "match", + "match date", + "match number", + "match numbers", + "match year", + "matches", + "matching", + "number", + "numbers", + "numerical", + "range", + "ranges", + "regex", + "regexp", + "regular", + "regular expression", + "sequence" + ], + "license": "MIT", + "main": "index.js", + "name": "to-regex-range", + "repository": { + "type": "git", + "url": "git+https://github.com/micromatch/to-regex-range.git" + }, + "scripts": { + "test": "mocha" + }, + "verb": { + "layout": "default", + "toc": false, + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "helpers": { + "examples": { + "displayName": "examples" + } + }, + "related": { + "list": [ + "expand-range", + "fill-range", + "micromatch", + "repeat-element", + "repeat-string" + ] + } + }, + "version": "5.0.1" +} diff --git a/build/node_modules/triple-beam/package.json b/build/node_modules/triple-beam/package.json index 53bb4c71..6e3af9db 100644 --- a/build/node_modules/triple-beam/package.json +++ b/build/node_modules/triple-beam/package.json @@ -20,7 +20,7 @@ "/winston", "/winston-transport" ], - "_resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/triple-beam/-/triple-beam-1.3.0.tgz", "_shasum": "a595214c7298db8339eeeee083e4d10bd8cb8dd9", "_spec": "triple-beam@^1.3.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", diff --git a/build/node_modules/type-detect/LICENSE b/build/node_modules/type-detect/LICENSE new file mode 100644 index 00000000..7ea799f0 --- /dev/null +++ b/build/node_modules/type-detect/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/type-detect/README.md b/build/node_modules/type-detect/README.md new file mode 100644 index 00000000..d2c4cb7e --- /dev/null +++ b/build/node_modules/type-detect/README.md @@ -0,0 +1,228 @@ +

            + + ChaiJS type-detect + +

            +
            +

            + Improved typeof detection for node and the browser. +

            + +

            + + license:mit + + + tag:? + + + build:? + + + coverage:? + + + npm:? + + + dependencies:? + + + devDependencies:? + +
            + + + + + + + + + + + + + + +
            Supported Browsers
            Chrome Edge Firefox Safari IE
            9, 10, 11
            +
            + + Join the Slack chat + + + Join the Gitter chat + +

            + +## What is Type-Detect? + +Type Detect is a module which you can use to detect the type of a given object. It returns a string representation of the object's type, either using [`typeof`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-typeof-operator) or [`@@toStringTag`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-symbol.tostringtag). It also normalizes some object names for consistency among browsers. + +## Why? + +The `typeof` operator will only specify primitive values; everything else is `"object"` (including `null`, arrays, regexps, etc). Many developers use `Object.prototype.toString()` - which is a fine alternative and returns many more types (null returns `[object Null]`, Arrays as `[object Array]`, regexps as `[object RegExp]` etc). + +Sadly, `Object.prototype.toString` is slow, and buggy. By slow - we mean it is slower than `typeof`. By buggy - we mean that some values (like Promises, the global object, iterators, dataviews, a bunch of HTML elements) all report different things in different browsers. + +`type-detect` fixes all of the shortcomings with `Object.prototype.toString`. We have extra code to speed up checks of JS and DOM objects, as much as 20-30x faster for some values. `type-detect` also fixes any consistencies with these objects. + +## Installation + +### Node.js + +`type-detect` is available on [npm](http://npmjs.org). To install it, type: + + $ npm install type-detect + +### Browsers + +You can also use it within the browser; install via npm and use the `type-detect.js` file found within the download. For example: + +```html + +``` + +## Usage + +The primary export of `type-detect` is function that can serve as a replacement for `typeof`. The results of this function will be more specific than that of native `typeof`. + +```js +var type = require('type-detect'); +``` + +#### array + +```js +assert(type([]) === 'Array'); +assert(type(new Array()) === 'Array'); +``` + +#### regexp + +```js +assert(type(/a-z/gi) === 'RegExp'); +assert(type(new RegExp('a-z')) === 'RegExp'); +``` + +#### function + +```js +assert(type(function () {}) === 'function'); +``` + +#### arguments + +```js +(function () { + assert(type(arguments) === 'Arguments'); +})(); +``` + +#### date + +```js +assert(type(new Date) === 'Date'); +``` + +#### number + +```js +assert(type(1) === 'number'); +assert(type(1.234) === 'number'); +assert(type(-1) === 'number'); +assert(type(-1.234) === 'number'); +assert(type(Infinity) === 'number'); +assert(type(NaN) === 'number'); +assert(type(new Number(1)) === 'Number'); // note - the object version has a capital N +``` + +#### string + +```js +assert(type('hello world') === 'string'); +assert(type(new String('hello')) === 'String'); // note - the object version has a capital S +``` + +#### null + +```js +assert(type(null) === 'null'); +assert(type(undefined) !== 'null'); +``` + +#### undefined + +```js +assert(type(undefined) === 'undefined'); +assert(type(null) !== 'undefined'); +``` + +#### object + +```js +var Noop = function () {}; +assert(type({}) === 'Object'); +assert(type(Noop) !== 'Object'); +assert(type(new Noop) === 'Object'); +assert(type(new Object) === 'Object'); +``` + +#### ECMA6 Types + +All new ECMAScript 2015 objects are also supported, such as Promises and Symbols: + +```js +assert(type(new Map() === 'Map'); +assert(type(new WeakMap()) === 'WeakMap'); +assert(type(new Set()) === 'Set'); +assert(type(new WeakSet()) === 'WeakSet'); +assert(type(Symbol()) === 'symbol'); +assert(type(new Promise(callback) === 'Promise'); +assert(type(new Int8Array()) === 'Int8Array'); +assert(type(new Uint8Array()) === 'Uint8Array'); +assert(type(new UInt8ClampedArray()) === 'Uint8ClampedArray'); +assert(type(new Int16Array()) === 'Int16Array'); +assert(type(new Uint16Array()) === 'Uint16Array'); +assert(type(new Int32Array()) === 'Int32Array'); +assert(type(new UInt32Array()) === 'Uint32Array'); +assert(type(new Float32Array()) === 'Float32Array'); +assert(type(new Float64Array()) === 'Float64Array'); +assert(type(new ArrayBuffer()) === 'ArrayBuffer'); +assert(type(new DataView(arrayBuffer)) === 'DataView'); +``` + +Also, if you use `Symbol.toStringTag` to change an Objects return value of the `toString()` Method, `type()` will return this value, e.g: + +```js +var myObject = {}; +myObject[Symbol.toStringTag] = 'myCustomType'; +assert(type(myObject) === 'myCustomType'); +``` diff --git a/build/node_modules/type-detect/index.js b/build/node_modules/type-detect/index.js new file mode 100644 index 00000000..98a1e031 --- /dev/null +++ b/build/node_modules/type-detect/index.js @@ -0,0 +1,378 @@ +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +const promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +const globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +const symbolExists = typeof Symbol !== 'undefined'; +const mapExists = typeof Map !== 'undefined'; +const setExists = typeof Set !== 'undefined'; +const weakMapExists = typeof WeakMap !== 'undefined'; +const weakSetExists = typeof WeakSet !== 'undefined'; +const dataViewExists = typeof DataView !== 'undefined'; +const symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +const symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +const setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +const mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +const setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +const mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +const arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +const arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +const stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +const stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +const toStringLeftSliceLength = 8; +const toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +export default function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + const typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + const stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + const objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} diff --git a/build/node_modules/type-detect/package.json b/build/node_modules/type-detect/package.json new file mode 100644 index 00000000..de37b42c --- /dev/null +++ b/build/node_modules/type-detect/package.json @@ -0,0 +1,169 @@ +{ + "_from": "type-detect@4.0.8", + "_id": "type-detect@4.0.8", + "_inBundle": false, + "_integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "_location": "/type-detect", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "type-detect@4.0.8", + "name": "type-detect", + "escapedName": "type-detect", + "rawSpec": "4.0.8", + "saveSpec": null, + "fetchSpec": "4.0.8" + }, + "_requiredBy": [ + "/@sinonjs/commons", + "/@sinonjs/samsam" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/type-detect/-/type-detect-4.0.8.tgz", + "_shasum": "7646fb5f18871cfbb7749e69bd39a6388eb7450c", + "_spec": "type-detect@4.0.8", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/@sinonjs/commons", + "author": { + "name": "Jake Luer", + "email": "jake@alogicalparadox.com", + "url": "http://alogicalparadox.com" + }, + "bugs": { + "url": "https://github.com/chaijs/type-detect/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Keith Cirkel", + "url": "https://github.com/keithamus" + }, + { + "name": "David Losert", + "url": "https://github.com/davelosert" + }, + { + "name": "Aleksey Shvayka", + "url": "https://github.com/shvaikalesh" + }, + { + "name": "Lucas Fernandes da Costa", + "url": "https://github.com/lucasfcosta" + }, + { + "name": "Grant Snodgrass", + "url": "https://github.com/meeber" + }, + { + "name": "Jeremy Tice", + "url": "https://github.com/jetpacmonkey" + }, + { + "name": "Edward Betts", + "url": "https://github.com/EdwardBetts" + }, + { + "name": "dvlsg", + "url": "https://github.com/dvlsg" + }, + { + "name": "Amila Welihinda", + "url": "https://github.com/amilajack" + }, + { + "name": "Jake Champion", + "url": "https://github.com/JakeChampion" + }, + { + "name": "Miroslav Bajtoš", + "url": "https://github.com/bajtos" + } + ], + "deprecated": false, + "description": "Improved typeof detection for node.js and the browser.", + "devDependencies": { + "@commitlint/cli": "^4.2.2", + "benchmark": "^2.1.0", + "buble": "^0.16.0", + "codecov": "^3.0.0", + "commitlint-config-angular": "^4.2.1", + "cross-env": "^5.1.1", + "eslint": "^4.10.0", + "eslint-config-strict": "^14.0.0", + "eslint-plugin-filenames": "^1.2.0", + "husky": "^0.14.3", + "karma": "^1.7.1", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.1", + "karma-detect-browsers": "^2.2.5", + "karma-edge-launcher": "^0.4.2", + "karma-firefox-launcher": "^1.0.1", + "karma-ie-launcher": "^1.0.0", + "karma-mocha": "^1.3.0", + "karma-opera-launcher": "^1.0.0", + "karma-safari-launcher": "^1.0.0", + "karma-safaritechpreview-launcher": "0.0.6", + "karma-sauce-launcher": "^1.2.0", + "mocha": "^4.0.1", + "nyc": "^11.3.0", + "rollup": "^0.50.0", + "rollup-plugin-buble": "^0.16.0", + "rollup-plugin-commonjs": "^8.2.6", + "rollup-plugin-istanbul": "^1.1.0", + "rollup-plugin-node-resolve": "^3.0.0", + "semantic-release": "^8.2.0", + "simple-assert": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "eslintConfig": { + "env": { + "es6": true + }, + "extends": [ + "strict/es6" + ], + "globals": { + "HTMLElement": false + }, + "rules": { + "complexity": 0, + "max-statements": 0, + "prefer-rest-params": 0 + } + }, + "files": [ + "index.js", + "type-detect.js" + ], + "homepage": "https://github.com/chaijs/type-detect#readme", + "keywords": [ + "type", + "typeof", + "types" + ], + "license": "MIT", + "main": "./type-detect.js", + "name": "type-detect", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/chaijs/type-detect.git" + }, + "scripts": { + "bench": "node bench", + "build": "rollup -c rollup.conf.js", + "commit-msg": "commitlint -x angular", + "lint": "eslint --ignore-path .gitignore .", + "posttest:browser": "npm run upload-coverage", + "posttest:node": "nyc report --report-dir \"coverage/node-$(node --version)\" --reporter=lcovonly && npm run upload-coverage", + "prepare": "cross-env NODE_ENV=production npm run build", + "pretest:browser": "cross-env NODE_ENV=test npm run build", + "pretest:node": "cross-env NODE_ENV=test npm run build", + "semantic-release": "semantic-release pre && npm publish && semantic-release post", + "test": "npm run test:node && npm run test:browser", + "test:browser": "karma start --singleRun=true", + "test:node": "nyc mocha type-detect.test.js", + "upload-coverage": "codecov" + }, + "version": "4.0.8" +} diff --git a/build/node_modules/type-detect/type-detect.js b/build/node_modules/type-detect/type-detect.js new file mode 100644 index 00000000..2f555252 --- /dev/null +++ b/build/node_modules/type-detect/type-detect.js @@ -0,0 +1,388 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.typeDetect = factory()); +}(this, (function () { 'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; + +/* eslint-disable no-undef */ +var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist + +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + // Not caching existence of `window` and related properties due to potential + // for `window` to be unset before tests in quasi-browser environments. + if (typeof window === 'object' && window !== null) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (typeof window.location === 'object' && obj === window.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (typeof window.document === 'object' && obj === window.document) { + return 'Document'; + } + + if (typeof window.navigator === 'object') { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (typeof window.navigator.mimeTypes === 'object' && + obj === window.navigator.mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (typeof window.navigator.plugins === 'object' && + obj === window.navigator.plugins) { + return 'PluginArray'; + } + } + + if ((typeof window.HTMLElement === 'function' || + typeof window.HTMLElement === 'object') && + obj instanceof window.HTMLElement) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +} + +return typeDetect; + +}))); diff --git a/build/node_modules/typedarray-to-buffer/package.json b/build/node_modules/typedarray-to-buffer/package.json index cc2c00bd..19831644 100644 --- a/build/node_modules/typedarray-to-buffer/package.json +++ b/build/node_modules/typedarray-to-buffer/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-js" ], - "_resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", "_shasum": "9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c", "_spec": "typedarray-to-buffer@~1.0.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-js", diff --git a/build/node_modules/typedarray/package.json b/build/node_modules/typedarray/package.json index 63f3c22a..5b0cf061 100644 --- a/build/node_modules/typedarray/package.json +++ b/build/node_modules/typedarray/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/concat-stream" ], - "_resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/typedarray/-/typedarray-0.0.6.tgz", "_shasum": "867ac74e3864187b1d3d47d996a78ec5c8830777", "_spec": "typedarray@^0.0.6", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/concat-stream", diff --git a/build/node_modules/unbox-primitive/.editorconfig b/build/node_modules/unbox-primitive/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/unbox-primitive/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/unbox-primitive/.eslintignore b/build/node_modules/unbox-primitive/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/unbox-primitive/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/unbox-primitive/.eslintrc b/build/node_modules/unbox-primitive/.eslintrc deleted file mode 100644 index 3b5d9e90..00000000 --- a/build/node_modules/unbox-primitive/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", -} diff --git a/build/node_modules/unbox-primitive/.github/FUNDING.yml b/build/node_modules/unbox-primitive/.github/FUNDING.yml deleted file mode 100644 index 30cbba95..00000000 --- a/build/node_modules/unbox-primitive/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/unbox-primitive -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/unbox-primitive/.nycrc b/build/node_modules/unbox-primitive/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/unbox-primitive/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/unbox-primitive/CHANGELOG.md b/build/node_modules/unbox-primitive/CHANGELOG.md deleted file mode 100644 index 4da114c4..00000000 --- a/build/node_modules/unbox-primitive/CHANGELOG.md +++ /dev/null @@ -1,47 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.1](https://github.com/ljharb/unbox-primitive/compare/v1.0.0...v1.0.1) - 2021-03-25 - -### Commits - -- [Tests] use shared travis-ci configs [`f977e5f`](https://github.com/ljharb/unbox-primitive/commit/f977e5f8fa532dbc519bd78a48cf4b81c14720fe) -- [Tests] migrate tests to Github Actions [`b89def6`](https://github.com/ljharb/unbox-primitive/commit/b89def60908a236aa1b5c756426f7cc61cf458dd) -- [meta] do not publish github action workflow files [`325d1f1`](https://github.com/ljharb/unbox-primitive/commit/325d1f1836cecbe57ee148545de5aefcbe7a7dce) -- readme [`810cd70`](https://github.com/ljharb/unbox-primitive/commit/810cd70f7b3c670cd55eae64466c89595175ee2a) -- [Tests] run `nyc` on all tests; use `tape` runner [`2f5fb08`](https://github.com/ljharb/unbox-primitive/commit/2f5fb08930c8f8e5e069ac61891dc9bd76cb762b) -- [meta] add `auto-changelog` [`03ed375`](https://github.com/ljharb/unbox-primitive/commit/03ed3759284493f19323eb0500f726d0851fc085) -- [actions] add automatic rebasing / merge commit blocking [`6dec48d`](https://github.com/ljharb/unbox-primitive/commit/6dec48daa357fa79a5cac1add9ca33f7b56276cc) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `object-is`, `tape` [`528ed88`](https://github.com/ljharb/unbox-primitive/commit/528ed8826664b67f7eaf1fe7e2031c063b2d315f) -- [actions] check out the entire repo [`5095b29`](https://github.com/ljharb/unbox-primitive/commit/5095b2981f44a78b3f9bfaa1a526f17a6823e383) -- [actions] add "Allow Edits" workflow [`5aa26d7`](https://github.com/ljharb/unbox-primitive/commit/5aa26d7f0c32e0e78ba4bf3e5f9abb5478fd97fa) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `object-is`, `safe-publish-latest`, `tape` [`afc18c6`](https://github.com/ljharb/unbox-primitive/commit/afc18c6cb59cbb6b514e0d8004c6fd264e2a27eb) -- [readme] remove travis badge [`a025899`](https://github.com/ljharb/unbox-primitive/commit/a0258997a21604e1266840e6d167f0a870966e9b) -- [Dev Deps] update `auto-changelog` [`9219a32`](https://github.com/ljharb/unbox-primitive/commit/9219a32844b2ce3ed0a7ea12a5910a3e92424e4e) -- [readme] Fix missing paren in example [`73f5a33`](https://github.com/ljharb/unbox-primitive/commit/73f5a3340ca1ab6c227ed4632117d816d5e35317) -- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`e450acc`](https://github.com/ljharb/unbox-primitive/commit/e450accb54ab452f240768a5f0a98e5887b0ba8c) -- [Deps] update `has-bigints`, `has-symbols`, `which-boxed-primitive` [`a4279b5`](https://github.com/ljharb/unbox-primitive/commit/a4279b504732002074e5dcb9c5509038d605f563) -- [Dev Deps] update `auto-changelog`, `in-publish`, `tape` [`b351548`](https://github.com/ljharb/unbox-primitive/commit/b351548d31789c0d0af4c3bce55c2bdefe51b40f) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`f600382`](https://github.com/ljharb/unbox-primitive/commit/f600382db83025270969354ac52a72aadb0a7ffa) -- [readme] fix travis links [`4d02fa9`](https://github.com/ljharb/unbox-primitive/commit/4d02fa9a4990812b048f8aefe6e46be80b68beef) -- [Dev Deps] update `auto-changelog`; add `aud` [`07e74a3`](https://github.com/ljharb/unbox-primitive/commit/07e74a3ca90688122593095849757e3c05c46db0) -- [meta] add `funding` field [`7ca4bd7`](https://github.com/ljharb/unbox-primitive/commit/7ca4bd71196e90a2fc9c7cb0ef4e30f949d5a853) -- [Tests] only audit prod deps [`47d8d5f`](https://github.com/ljharb/unbox-primitive/commit/47d8d5fbd58bf472e7e83f79ccef7e8379d06b35) -- [Deps] update `has-symbols` [`c70c15e`](https://github.com/ljharb/unbox-primitive/commit/c70c15e924191d11a271cff25bde657b0c3c3016) - -## v1.0.0 - 2019-08-10 - -### Commits - -- [Tests] add `.travis.yml` [`8c9a5ef`](https://github.com/ljharb/unbox-primitive/commit/8c9a5efdb54be4866e2884bf32cbe830788b2c2a) -- Initial commit [`feaff15`](https://github.com/ljharb/unbox-primitive/commit/feaff159eb999adc8763ff3e51d2d3d56d6164f8) -- [Tests] add tests [`3dd18d6`](https://github.com/ljharb/unbox-primitive/commit/3dd18d65748efb4af9b8ca66f8d8c5521d8f2dec) -- implementation [`472fb41`](https://github.com/ljharb/unbox-primitive/commit/472fb41d049ddee80ebf3219a5837e639a6e9341) -- npm init [`e9e426f`](https://github.com/ljharb/unbox-primitive/commit/e9e426fc90b9a3f07ffc48db75f78c414f77bc2b) -- [Tests] add linting [`139e74b`](https://github.com/ljharb/unbox-primitive/commit/139e74b94cdfd187b43b24de76c6d84af21ee467) -- [meta] create FUNDING.yml [`a9509e1`](https://github.com/ljharb/unbox-primitive/commit/a9509e122163e2b9d98af421e5c0575df36e2310) -- Only apps should have lockfiles [`b3d0834`](https://github.com/ljharb/unbox-primitive/commit/b3d0834d69dcbf4cbc1e61ccfaef05acf96cf630) diff --git a/build/node_modules/unbox-primitive/LICENSE b/build/node_modules/unbox-primitive/LICENSE deleted file mode 100644 index 3900dd7e..00000000 --- a/build/node_modules/unbox-primitive/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/unbox-primitive/README.md b/build/node_modules/unbox-primitive/README.md deleted file mode 100644 index f267e332..00000000 --- a/build/node_modules/unbox-primitive/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# unbox-primitive [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Unbox a boxed JS primitive value. This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and works despite ES6 Symbol.toStringTag. - -## Example - -```js -var unboxPrimitive = require('unbox-primitive'); -var assert = require('assert'); - -assert.equal(unboxPrimitive(new Boolean(false)), false); -assert.equal(unboxPrimitive(new String('f')), 'f'); -assert.equal(unboxPrimitive(new Number(42)), 42); -const s = Symbol(); -assert.equal(unboxPrimitive(Object(s)), s); -assert.equal(unboxPrimitive(new BigInt(42)), 42n); - -// any primitive, or non-boxed-primitive object, will throw -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/unbox-primitive -[2]: https://versionbadg.es/ljharb/unbox-primitive.svg -[5]: https://david-dm.org/ljharb/unbox-primitive.svg -[6]: https://david-dm.org/ljharb/unbox-primitive -[7]: https://david-dm.org/ljharb/unbox-primitive/dev-status.svg -[8]: https://david-dm.org/ljharb/unbox-primitive#info=devDependencies -[11]: https://nodei.co/npm/unbox-primitive.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/unbox-primitive.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/unbox-primitive.svg -[downloads-url]: https://npm-stat.com/charts.html?package=unbox-primitive diff --git a/build/node_modules/unbox-primitive/index.js b/build/node_modules/unbox-primitive/index.js deleted file mode 100644 index f5e9f3b5..00000000 --- a/build/node_modules/unbox-primitive/index.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -var whichBoxedPrimitive = require('which-boxed-primitive'); -var bind = require('function-bind'); -var hasSymbols = require('has-symbols')(); -var hasBigInts = require('has-bigints')(); - -var stringToString = bind.call(Function.call, String.prototype.toString); -var numberValueOf = bind.call(Function.call, Number.prototype.valueOf); -var booleanValueOf = bind.call(Function.call, Boolean.prototype.valueOf); -var symbolValueOf = hasSymbols && bind.call(Function.call, Symbol.prototype.valueOf); -var bigIntValueOf = hasBigInts && bind.call(Function.call, BigInt.prototype.valueOf); - -module.exports = function unboxPrimitive(value) { - var which = whichBoxedPrimitive(value); - if (typeof which !== 'string') { - throw new TypeError(which === null ? 'value is an unboxed primitive' : 'value is a non-boxed-primitive object'); - } - - if (which === 'String') { - return stringToString(value); - } - if (which === 'Number') { - return numberValueOf(value); - } - if (which === 'Boolean') { - return booleanValueOf(value); - } - if (which === 'Symbol') { - if (!hasSymbols) { - throw new EvalError('somehow this environment does not have Symbols, but you have a boxed Symbol value. Please report this!'); - } - return symbolValueOf(value); - } - if (which === 'BigInt') { - return bigIntValueOf(value); - } - throw new RangeError('unknown boxed primitive found: ' + which); -}; diff --git a/build/node_modules/unbox-primitive/package.json b/build/node_modules/unbox-primitive/package.json deleted file mode 100644 index 10850e52..00000000 --- a/build/node_modules/unbox-primitive/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_from": "unbox-primitive@^1.0.1", - "_id": "unbox-primitive@1.0.1", - "_inBundle": false, - "_integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "_location": "/unbox-primitive", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "unbox-primitive@^1.0.1", - "name": "unbox-primitive", - "escapedName": "unbox-primitive", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/es-abstract" - ], - "_resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "_shasum": "085e215625ec3162574dc8859abee78a59b14471", - "_spec": "unbox-primitive@^1.0.1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/es-abstract", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/ljharb/unbox-primitive/issues" - }, - "bundleDependencies": false, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "deprecated": false, - "description": "Unbox a boxed JS primitive value.", - "devDependencies": { - "@ljharb/eslint-config": "^17.5.1", - "aud": "^1.1.4", - "auto-changelog": "^2.2.1", - "eslint": "^7.22.0", - "for-each": "^0.3.3", - "in-publish": "^2.0.1", - "nyc": "^10.3.2", - "object-inspect": "^1.9.0", - "object-is": "^1.1.5", - "safe-publish-latest": "^1.1.4", - "tape": "^5.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/ljharb/unbox-primitive#readme", - "keywords": [ - "unbox", - "boxed", - "primitive", - "object", - "javascript", - "ecmascript" - ], - "license": "MIT", - "main": "index.js", - "name": "unbox-primitive", - "repository": { - "type": "git", - "url": "git+https://github.com/ljharb/unbox-primitive.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || safe-publish-latest", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.1" -} diff --git a/build/node_modules/unbox-primitive/test/index.js b/build/node_modules/unbox-primitive/test/index.js deleted file mode 100644 index 73688ac1..00000000 --- a/build/node_modules/unbox-primitive/test/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -var test = require('tape'); -var inspect = require('object-inspect'); -var is = require('object-is'); -var forEach = require('for-each'); -var hasSymbols = require('has-symbols')(); -var hasBigInts = require('has-bigints')(); - -var unboxPrimitive = require('..'); - -var debug = function (v, m) { return inspect(v) + ' ' + m; }; - -test('primitives', function (t) { - var primitives = [ - true, - false, - '', - 'foo', - 42, - NaN, - Infinity, - 0 - ]; - if (hasSymbols) { - primitives.push(Symbol(), Symbol.iterator, Symbol('f')); - } - if (hasBigInts) { - primitives.push(BigInt(42), BigInt(0)); - } - forEach(primitives, function (primitive) { - var obj = Object(primitive); - t.ok( - is(unboxPrimitive(obj), primitive), - debug(obj, 'unboxes to ' + inspect(primitive)) - ); - }); - - t.end(); -}); - -test('objects', function (t) { - var objects = [ - {}, - [], - function () {}, - /a/g, - new Date() - ]; - forEach(objects, function (object) { - t['throws']( - function () { unboxPrimitive(object); }, - TypeError, - debug(object, 'is not a primitive') - ); - }); - - t.end(); -}); diff --git a/build/node_modules/util-deprecate/package.json b/build/node_modules/util-deprecate/package.json index 77d05cd1..3edf60d4 100644 --- a/build/node_modules/util-deprecate/package.json +++ b/build/node_modules/util-deprecate/package.json @@ -1,5 +1,5 @@ { - "_from": "util-deprecate@~1.0.1", + "_from": "util-deprecate@^1.0.1", "_id": "util-deprecate@1.0.2", "_inBundle": false, "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", @@ -8,22 +8,20 @@ "_requested": { "type": "range", "registry": true, - "raw": "util-deprecate@~1.0.1", + "raw": "util-deprecate@^1.0.1", "name": "util-deprecate", "escapedName": "util-deprecate", - "rawSpec": "~1.0.1", + "rawSpec": "^1.0.1", "saveSpec": null, - "fetchSpec": "~1.0.1" + "fetchSpec": "^1.0.1" }, "_requiredBy": [ - "/browserify-sign/readable-stream", - "/hash-base/readable-stream", - "/readable-stream", - "/winston/readable-stream" + "/concat-stream/readable-stream", + "/readable-stream" ], - "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/util-deprecate/-/util-deprecate-1.0.2.tgz", "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "_spec": "util-deprecate@~1.0.1", + "_spec": "util-deprecate@^1.0.1", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/readable-stream", "author": { "name": "Nathan Rajlich", diff --git a/build/node_modules/util/LICENSE b/build/node_modules/util/LICENSE deleted file mode 100644 index e3d4e695..00000000 --- a/build/node_modules/util/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/build/node_modules/util/README.md b/build/node_modules/util/README.md deleted file mode 100644 index eb630582..00000000 --- a/build/node_modules/util/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# util [![Build Status](https://travis-ci.org/browserify/node-util.png?branch=master)](https://travis-ci.org/browserify/node-util) - -> Node.js's [util][util] module for all engines. - -This implements the Node.js [`util`][util] module for environments that do not have it, like browsers. - -## Install - -You usually do not have to install `util` yourself. If your code runs in Node.js, `util` is built in. If your code runs in the browser, bundlers like [browserify](https://github.com/browserify/browserify) or [webpack](https://github.com/webpack/webpack) also include the `util` module. - -But if none of those apply, with npm do: - -```shell -npm install util -``` - -## Usage - -```javascript -var util = require('util') -var EventEmitter = require('events') - -function MyClass() { EventEmitter.call(this) } -util.inherits(MyClass, EventEmitter) -``` - -## Browser Support - -The `util` module uses ES5 features. If you need to support very old browsers like IE8, use a shim like [`es5-shim`](https://www.npmjs.com/package/es5-shim). You need both the shim and the sham versions of `es5-shim`. - -To use `util.promisify` and `util.callbackify`, Promises must already be available. If you need to support browsers like IE11 that do not support Promises, use a shim. [es6-promise](https://github.com/stefanpenner/es6-promise) is a popular one but there are many others available on npm. - -## API - -See the [Node.js util docs][util]. `util` currently supports the Node 8 LTS API. However, some of the methods are outdated. The `inspect` and `format` methods included in this module are a lot more simple and barebones than the ones in Node.js. - -## Contributing - -PRs are very welcome! The main way to contribute to `util` is by porting features, bugfixes and tests from Node.js. Ideally, code contributions to this module are copy-pasted from Node.js and transpiled to ES5, rather than reimplemented from scratch. Matching the Node.js code as closely as possible makes maintenance simpler when new changes land in Node.js. -This module intends to provide exactly the same API as Node.js, so features that are not available in the core `util` module will not be accepted. Feature requests should instead be directed at [nodejs/node](https://github.com/nodejs/node) and will be added to this module once they are implemented in Node.js. - -If there is a difference in behaviour between Node.js's `util` module and this module, please open an issue! - -## License - -[MIT](./LICENSE) - -[util]: https://nodejs.org/docs/latest-v8.x/api/util.html diff --git a/build/node_modules/util/package.json b/build/node_modules/util/package.json deleted file mode 100644 index a9e1a864..00000000 --- a/build/node_modules/util/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "util@>=0.10.3 <1", - "_id": "util@0.12.4", - "_inBundle": false, - "_integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "_location": "/util", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "util@>=0.10.3 <1", - "name": "util", - "escapedName": "util", - "rawSpec": ">=0.10.3 <1", - "saveSpec": null, - "fetchSpec": ">=0.10.3 <1" - }, - "_requiredBy": [ - "/sinon" - ], - "_resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "_shasum": "66121a31420df8f01ca0c464be15dfa1d1850253", - "_spec": "util@>=0.10.3 <1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/sinon", - "author": { - "name": "Joyent", - "url": "http://www.joyent.com" - }, - "browser": { - "./support/isBuffer.js": "./support/isBufferBrowser.js" - }, - "bugs": { - "url": "https://github.com/browserify/node-util/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - }, - "deprecated": false, - "description": "Node.js's util module for all engines", - "devDependencies": { - "airtap": "~1.0.0", - "core-js": "^3.6.5", - "is-async-supported": "~1.2.0", - "object.assign": "~4.1.0", - "object.entries": "^1.1.0", - "run-series": "~1.1.4", - "tape": "~4.9.0" - }, - "files": [ - "util.js", - "support" - ], - "homepage": "https://github.com/browserify/node-util", - "keywords": [ - "util" - ], - "license": "MIT", - "main": "./util.js", - "name": "util", - "repository": { - "type": "git", - "url": "git://github.com/browserify/node-util.git" - }, - "scripts": { - "test": "node test/node/index.js", - "test:browsers": "airtap test/browser/index.js", - "test:browsers:local": "npm run test:browsers -- --local", - "test:browsers:with-polyfills": "airtap test/browser/with-polyfills.js", - "test:browsers:with-polyfills:local": "npm run test:browsers:with-polyfills -- --local" - }, - "version": "0.12.4" -} diff --git a/build/node_modules/util/support/isBuffer.js b/build/node_modules/util/support/isBuffer.js deleted file mode 100644 index ace9ac00..00000000 --- a/build/node_modules/util/support/isBuffer.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function isBuffer(arg) { - return arg instanceof Buffer; -} diff --git a/build/node_modules/util/support/isBufferBrowser.js b/build/node_modules/util/support/isBufferBrowser.js deleted file mode 100644 index 0e1bee1e..00000000 --- a/build/node_modules/util/support/isBufferBrowser.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} \ No newline at end of file diff --git a/build/node_modules/util/support/types.js b/build/node_modules/util/support/types.js deleted file mode 100644 index 12e9db38..00000000 --- a/build/node_modules/util/support/types.js +++ /dev/null @@ -1,334 +0,0 @@ -// Currently in sync with Node.js lib/internal/util/types.js -// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9 - -'use strict'; - -var isArgumentsObject = require('is-arguments'); -var isGeneratorFunction = require('is-generator-function'); -var whichTypedArray = require('which-typed-array'); -var isTypedArray = require('is-typed-array'); - -function uncurryThis(f) { - return f.call.bind(f); -} - -var BigIntSupported = typeof BigInt !== 'undefined'; -var SymbolSupported = typeof Symbol !== 'undefined'; - -var ObjectToString = uncurryThis(Object.prototype.toString); - -var numberValue = uncurryThis(Number.prototype.valueOf); -var stringValue = uncurryThis(String.prototype.valueOf); -var booleanValue = uncurryThis(Boolean.prototype.valueOf); - -if (BigIntSupported) { - var bigIntValue = uncurryThis(BigInt.prototype.valueOf); -} - -if (SymbolSupported) { - var symbolValue = uncurryThis(Symbol.prototype.valueOf); -} - -function checkBoxedPrimitive(value, prototypeValueOf) { - if (typeof value !== 'object') { - return false; - } - try { - prototypeValueOf(value); - return true; - } catch(e) { - return false; - } -} - -exports.isArgumentsObject = isArgumentsObject; -exports.isGeneratorFunction = isGeneratorFunction; -exports.isTypedArray = isTypedArray; - -// Taken from here and modified for better browser support -// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js -function isPromise(input) { - return ( - ( - typeof Promise !== 'undefined' && - input instanceof Promise - ) || - ( - input !== null && - typeof input === 'object' && - typeof input.then === 'function' && - typeof input.catch === 'function' - ) - ); -} -exports.isPromise = isPromise; - -function isArrayBufferView(value) { - if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { - return ArrayBuffer.isView(value); - } - - return ( - isTypedArray(value) || - isDataView(value) - ); -} -exports.isArrayBufferView = isArrayBufferView; - - -function isUint8Array(value) { - return whichTypedArray(value) === 'Uint8Array'; -} -exports.isUint8Array = isUint8Array; - -function isUint8ClampedArray(value) { - return whichTypedArray(value) === 'Uint8ClampedArray'; -} -exports.isUint8ClampedArray = isUint8ClampedArray; - -function isUint16Array(value) { - return whichTypedArray(value) === 'Uint16Array'; -} -exports.isUint16Array = isUint16Array; - -function isUint32Array(value) { - return whichTypedArray(value) === 'Uint32Array'; -} -exports.isUint32Array = isUint32Array; - -function isInt8Array(value) { - return whichTypedArray(value) === 'Int8Array'; -} -exports.isInt8Array = isInt8Array; - -function isInt16Array(value) { - return whichTypedArray(value) === 'Int16Array'; -} -exports.isInt16Array = isInt16Array; - -function isInt32Array(value) { - return whichTypedArray(value) === 'Int32Array'; -} -exports.isInt32Array = isInt32Array; - -function isFloat32Array(value) { - return whichTypedArray(value) === 'Float32Array'; -} -exports.isFloat32Array = isFloat32Array; - -function isFloat64Array(value) { - return whichTypedArray(value) === 'Float64Array'; -} -exports.isFloat64Array = isFloat64Array; - -function isBigInt64Array(value) { - return whichTypedArray(value) === 'BigInt64Array'; -} -exports.isBigInt64Array = isBigInt64Array; - -function isBigUint64Array(value) { - return whichTypedArray(value) === 'BigUint64Array'; -} -exports.isBigUint64Array = isBigUint64Array; - -function isMapToString(value) { - return ObjectToString(value) === '[object Map]'; -} -isMapToString.working = ( - typeof Map !== 'undefined' && - isMapToString(new Map()) -); - -function isMap(value) { - if (typeof Map === 'undefined') { - return false; - } - - return isMapToString.working - ? isMapToString(value) - : value instanceof Map; -} -exports.isMap = isMap; - -function isSetToString(value) { - return ObjectToString(value) === '[object Set]'; -} -isSetToString.working = ( - typeof Set !== 'undefined' && - isSetToString(new Set()) -); -function isSet(value) { - if (typeof Set === 'undefined') { - return false; - } - - return isSetToString.working - ? isSetToString(value) - : value instanceof Set; -} -exports.isSet = isSet; - -function isWeakMapToString(value) { - return ObjectToString(value) === '[object WeakMap]'; -} -isWeakMapToString.working = ( - typeof WeakMap !== 'undefined' && - isWeakMapToString(new WeakMap()) -); -function isWeakMap(value) { - if (typeof WeakMap === 'undefined') { - return false; - } - - return isWeakMapToString.working - ? isWeakMapToString(value) - : value instanceof WeakMap; -} -exports.isWeakMap = isWeakMap; - -function isWeakSetToString(value) { - return ObjectToString(value) === '[object WeakSet]'; -} -isWeakSetToString.working = ( - typeof WeakSet !== 'undefined' && - isWeakSetToString(new WeakSet()) -); -function isWeakSet(value) { - return isWeakSetToString(value); -} -exports.isWeakSet = isWeakSet; - -function isArrayBufferToString(value) { - return ObjectToString(value) === '[object ArrayBuffer]'; -} -isArrayBufferToString.working = ( - typeof ArrayBuffer !== 'undefined' && - isArrayBufferToString(new ArrayBuffer()) -); -function isArrayBuffer(value) { - if (typeof ArrayBuffer === 'undefined') { - return false; - } - - return isArrayBufferToString.working - ? isArrayBufferToString(value) - : value instanceof ArrayBuffer; -} -exports.isArrayBuffer = isArrayBuffer; - -function isDataViewToString(value) { - return ObjectToString(value) === '[object DataView]'; -} -isDataViewToString.working = ( - typeof ArrayBuffer !== 'undefined' && - typeof DataView !== 'undefined' && - isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1)) -); -function isDataView(value) { - if (typeof DataView === 'undefined') { - return false; - } - - return isDataViewToString.working - ? isDataViewToString(value) - : value instanceof DataView; -} -exports.isDataView = isDataView; - -// Store a copy of SharedArrayBuffer in case it's deleted elsewhere -var SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined; -function isSharedArrayBufferToString(value) { - return ObjectToString(value) === '[object SharedArrayBuffer]'; -} -function isSharedArrayBuffer(value) { - if (typeof SharedArrayBufferCopy === 'undefined') { - return false; - } - - if (typeof isSharedArrayBufferToString.working === 'undefined') { - isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy()); - } - - return isSharedArrayBufferToString.working - ? isSharedArrayBufferToString(value) - : value instanceof SharedArrayBufferCopy; -} -exports.isSharedArrayBuffer = isSharedArrayBuffer; - -function isAsyncFunction(value) { - return ObjectToString(value) === '[object AsyncFunction]'; -} -exports.isAsyncFunction = isAsyncFunction; - -function isMapIterator(value) { - return ObjectToString(value) === '[object Map Iterator]'; -} -exports.isMapIterator = isMapIterator; - -function isSetIterator(value) { - return ObjectToString(value) === '[object Set Iterator]'; -} -exports.isSetIterator = isSetIterator; - -function isGeneratorObject(value) { - return ObjectToString(value) === '[object Generator]'; -} -exports.isGeneratorObject = isGeneratorObject; - -function isWebAssemblyCompiledModule(value) { - return ObjectToString(value) === '[object WebAssembly.Module]'; -} -exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule; - -function isNumberObject(value) { - return checkBoxedPrimitive(value, numberValue); -} -exports.isNumberObject = isNumberObject; - -function isStringObject(value) { - return checkBoxedPrimitive(value, stringValue); -} -exports.isStringObject = isStringObject; - -function isBooleanObject(value) { - return checkBoxedPrimitive(value, booleanValue); -} -exports.isBooleanObject = isBooleanObject; - -function isBigIntObject(value) { - return BigIntSupported && checkBoxedPrimitive(value, bigIntValue); -} -exports.isBigIntObject = isBigIntObject; - -function isSymbolObject(value) { - return SymbolSupported && checkBoxedPrimitive(value, symbolValue); -} -exports.isSymbolObject = isSymbolObject; - -function isBoxedPrimitive(value) { - return ( - isNumberObject(value) || - isStringObject(value) || - isBooleanObject(value) || - isBigIntObject(value) || - isSymbolObject(value) - ); -} -exports.isBoxedPrimitive = isBoxedPrimitive; - -function isAnyArrayBuffer(value) { - return typeof Uint8Array !== 'undefined' && ( - isArrayBuffer(value) || - isSharedArrayBuffer(value) - ); -} -exports.isAnyArrayBuffer = isAnyArrayBuffer; - -['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) { - Object.defineProperty(exports, method, { - enumerable: false, - value: function() { - throw new Error(method + ' is not supported in userland'); - } - }); -}); diff --git a/build/node_modules/util/util.js b/build/node_modules/util/util.js deleted file mode 100644 index 6eea6572..00000000 --- a/build/node_modules/util/util.js +++ /dev/null @@ -1,715 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || - function getOwnPropertyDescriptors(obj) { - var keys = Object.keys(obj); - var descriptors = {}; - for (var i = 0; i < keys.length; i++) { - descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]); - } - return descriptors; - }; - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - if (typeof process !== 'undefined' && process.noDeprecation === true) { - return fn; - } - - // Allow for deprecating things in the process of starting up. - if (typeof process === 'undefined') { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnvRegex = /^$/; - -if (process.env.NODE_DEBUG) { - var debugEnv = process.env.NODE_DEBUG; - debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&') - .replace(/\*/g, '.*') - .replace(/,/g, '$|^') - .toUpperCase(); - debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i'); -} -exports.debuglog = function(set) { - set = set.toUpperCase(); - if (!debugs[set]) { - if (debugEnvRegex.test(set)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -exports.types = require('./support/types'); - -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; -exports.types.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; -exports.types.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; -exports.types.isNativeError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined; - -exports.promisify = function promisify(original) { - if (typeof original !== 'function') - throw new TypeError('The "original" argument must be of type Function'); - - if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { - var fn = original[kCustomPromisifiedSymbol]; - if (typeof fn !== 'function') { - throw new TypeError('The "util.promisify.custom" argument must be of type Function'); - } - Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return fn; - } - - function fn() { - var promiseResolve, promiseReject; - var promise = new Promise(function (resolve, reject) { - promiseResolve = resolve; - promiseReject = reject; - }); - - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - args.push(function (err, value) { - if (err) { - promiseReject(err); - } else { - promiseResolve(value); - } - }); - - try { - original.apply(this, args); - } catch (err) { - promiseReject(err); - } - - return promise; - } - - Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); - - if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return Object.defineProperties( - fn, - getOwnPropertyDescriptors(original) - ); -} - -exports.promisify.custom = kCustomPromisifiedSymbol - -function callbackifyOnRejected(reason, cb) { - // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M). - // Because `null` is a special error value in callbacks which means "no error - // occurred", we error-wrap so the callback consumer can distinguish between - // "the promise rejected with null" or "the promise fulfilled with undefined". - if (!reason) { - var newReason = new Error('Promise was rejected with a falsy value'); - newReason.reason = reason; - reason = newReason; - } - return cb(reason); -} - -function callbackify(original) { - if (typeof original !== 'function') { - throw new TypeError('The "original" argument must be of type Function'); - } - - // We DO NOT return the promise as it gives the user a false sense that - // the promise is actually somehow related to the callback's execution - // and that the callback throwing will reject the promise. - function callbackified() { - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - - var maybeCb = args.pop(); - if (typeof maybeCb !== 'function') { - throw new TypeError('The last argument must be of type Function'); - } - var self = this; - var cb = function() { - return maybeCb.apply(self, arguments); - }; - // In true node style we process the callback on `nextTick` with all the - // implications (stack, `uncaughtException`, `async_hooks`) - original.apply(this, args) - .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) }, - function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) }); - } - - Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); - Object.defineProperties(callbackified, - getOwnPropertyDescriptors(original)); - return callbackified; -} -exports.callbackify = callbackify; diff --git a/build/node_modules/vlq/package.json b/build/node_modules/vlq/package.json index e35884ef..b913b243 100644 --- a/build/node_modules/vlq/package.json +++ b/build/node_modules/vlq/package.json @@ -19,7 +19,7 @@ "/rollup-plugin-node-globals/magic-string", "/rollup-plugin-re/magic-string" ], - "_resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/vlq/-/vlq-0.2.3.tgz", "_shasum": "8f3e4328cf63b1540c0d67e1b2778386f8975b26", "_spec": "vlq@^0.2.2", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/rollup-plugin-node-globals/node_modules/magic-string", diff --git a/build/node_modules/which-boxed-primitive/.editorconfig b/build/node_modules/which-boxed-primitive/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/which-boxed-primitive/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/which-boxed-primitive/.eslintignore b/build/node_modules/which-boxed-primitive/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/which-boxed-primitive/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/which-boxed-primitive/.eslintrc b/build/node_modules/which-boxed-primitive/.eslintrc deleted file mode 100644 index bfa96d14..00000000 --- a/build/node_modules/which-boxed-primitive/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-statements": [2, 12], - }, -} diff --git a/build/node_modules/which-boxed-primitive/.github/FUNDING.yml b/build/node_modules/which-boxed-primitive/.github/FUNDING.yml deleted file mode 100644 index 0cdbbd81..00000000 --- a/build/node_modules/which-boxed-primitive/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/which-boxed-primitive -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/which-boxed-primitive/.nycrc b/build/node_modules/which-boxed-primitive/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/which-boxed-primitive/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/which-boxed-primitive/CHANGELOG.md b/build/node_modules/which-boxed-primitive/CHANGELOG.md deleted file mode 100644 index 23e54220..00000000 --- a/build/node_modules/which-boxed-primitive/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [v1.0.2](https://github.com/inspect-js/which-boxed-primitive/compare/v1.0.1...v1.0.2) - 2020-12-14 - -### Commits - -- [Tests] use shared travis-ci configs [`8674582`](https://github.com/inspect-js/which-boxed-primitive/commit/86745829b6a92cff2cfb0d3c0414ec9afdc2a087) -- [Tests] migrate tests to Github Actions [`dff6643`](https://github.com/inspect-js/which-boxed-primitive/commit/dff6643405ba4d6dc6694a25904c8f72f273ece8) -- [meta] do not publish github action workflow files [`b26112a`](https://github.com/inspect-js/which-boxed-primitive/commit/b26112a4e4ac6beec8f54c734135dbf9e9ba16f9) -- [meta] make `auto-changelog` config consistent [`8d10175`](https://github.com/inspect-js/which-boxed-primitive/commit/8d10175171154cd6c8f8a016aa7fb71b5044acf6) -- [readme] fix repo URLs, remove defunct badges [`ab8db24`](https://github.com/inspect-js/which-boxed-primitive/commit/ab8db247573723dbcda68469118d08c7c2692c67) -- [Tests] run `nyc` on all tests; use `tape` runner [`7d084df`](https://github.com/inspect-js/which-boxed-primitive/commit/7d084dfc5251230e9399a81782c0b9d7ae5d1901) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`576f6f3`](https://github.com/inspect-js/which-boxed-primitive/commit/576f6f308aed35ef1d3392bb9472def59482ed13) -- [actions] add automatic rebasing / merge commit blocking [`97efa53`](https://github.com/inspect-js/which-boxed-primitive/commit/97efa53a307678323e63f576c07db9ff84846fd3) -- [actions] add "Allow Edits" workflow [`fb1b4f7`](https://github.com/inspect-js/which-boxed-primitive/commit/fb1b4f7cd753fcced74ac054b20c8b2bfafe7953) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `has-symbols`, `object-inspect`, `safe-publish-latest` [`1e03c61`](https://github.com/inspect-js/which-boxed-primitive/commit/1e03c6153693d385833acc15178f675e6ce5ddd0) -- [Deps] update `is-boolean-object`, `is-number-object`, `is-string`, `is-symbol` [`13673df`](https://github.com/inspect-js/which-boxed-primitive/commit/13673dff6e43f0a915377c3e5740ec24e86d6bb7) -- [Dev Deps] update `auto-changelog`, `in-publish`, `tape` [`65a0e15`](https://github.com/inspect-js/which-boxed-primitive/commit/65a0e155fc46a9237692233a51ec9573621135d2) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`f8a0afe`](https://github.com/inspect-js/which-boxed-primitive/commit/f8a0afea82938d64f3d2d240268afbd346d0c4da) -- [Deps] update `is-bigint`, `is-boolean-object` [`e7a1ce2`](https://github.com/inspect-js/which-boxed-primitive/commit/e7a1ce25371c00ee726f1c0cc5b6acf10d51ec50) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`e46f193`](https://github.com/inspect-js/which-boxed-primitive/commit/e46f193298b158db5c8aba889803513e4ee38957) -- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`df3da14`](https://github.com/inspect-js/which-boxed-primitive/commit/df3da1424552a5d22e203a0abf1710106bfd4ae2) -- [Dev Deps] update `auto-changelog`; add `aud` [`e2e8a12`](https://github.com/inspect-js/which-boxed-primitive/commit/e2e8a12c6fbf8c48e760ea1d1ccd5e8d2d6fbf24) -- [meta] add `funding` field [`7df404b`](https://github.com/inspect-js/which-boxed-primitive/commit/7df404b20cd50b2b87e6645b130fefa8ee98810e) -- [Dev Deps] update `auto-changelog` [`0d6b76d`](https://github.com/inspect-js/which-boxed-primitive/commit/0d6b76dbbe760581fa86a0c3f254988fe5d27770) -- [Tests] only audit prod deps [`246151c`](https://github.com/inspect-js/which-boxed-primitive/commit/246151cc1407b3b1ef42014db993f62670bd82ff) -- [meta] fix changelog [`c2d1685`](https://github.com/inspect-js/which-boxed-primitive/commit/c2d16856deffbf86e0b5029e69b65d8aa758ec3d) -- [readme] Fix spelling error [`25fb2b5`](https://github.com/inspect-js/which-boxed-primitive/commit/25fb2b56e1f708c6364923e4bae384f818ecf57f) - -## [v1.0.1](https://github.com/inspect-js/which-boxed-primitive/compare/v1.0.0...v1.0.1) - 2019-08-10 - -### Commits - -- [meta] avoid running `safe-publish-latest` when not publishing [`df44b27`](https://github.com/inspect-js/which-boxed-primitive/commit/df44b27875a8f5c3c596663ecb4a063f9fc7bde3) - -## v1.0.0 - 2019-08-10 - -### Commits - -- [Tests] add `.travis.yml` [`764b0cf`](https://github.com/inspect-js/which-boxed-primitive/commit/764b0cf75f8d2b3a0ad2056de5f4ad85d5d1b765) -- Initial commit [`da7d068`](https://github.com/inspect-js/which-boxed-primitive/commit/da7d068913d591294bf155db5d438f7804d71b9a) -- readme [`1395bb2`](https://github.com/inspect-js/which-boxed-primitive/commit/1395bb27b72137ac01e48ee398a0f54e93fd87f5) -- [Tests] add tests [`0ff580f`](https://github.com/inspect-js/which-boxed-primitive/commit/0ff580f99579cd4424af7b814bd76fcb69a2b04e) -- implementation [`8811c32`](https://github.com/inspect-js/which-boxed-primitive/commit/8811c3262a57963634cdc83ceb5bb2c5e9ae4e7e) -- npm init [`cffdea9`](https://github.com/inspect-js/which-boxed-primitive/commit/cffdea9755eabfa2f9ec62a6fcbce0c28f04495b) -- [Tests] add `npm run lint` [`a8be993`](https://github.com/inspect-js/which-boxed-primitive/commit/a8be9933fec1b21267acd847df77f6438e07e3b9) -- [meta] add FUNDING.yml [`941258c`](https://github.com/inspect-js/which-boxed-primitive/commit/941258c70c9a397466e05b614126cb8c7be77b99) -- Only apps should have lockfiles [`6857316`](https://github.com/inspect-js/which-boxed-primitive/commit/68573165d8ce842cdf15d94af82f8cccb961b8cf) -- [Tests] use `npx aud` in `posttest` [`ee48a91`](https://github.com/inspect-js/which-boxed-primitive/commit/ee48a9144bea23bde5cc47788a54d5aa7969d489) diff --git a/build/node_modules/which-boxed-primitive/LICENSE b/build/node_modules/which-boxed-primitive/LICENSE deleted file mode 100644 index 3900dd7e..00000000 --- a/build/node_modules/which-boxed-primitive/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/node_modules/which-boxed-primitive/README.md b/build/node_modules/which-boxed-primitive/README.md deleted file mode 100644 index e08f26af..00000000 --- a/build/node_modules/which-boxed-primitive/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# which-boxed-primitive [![Version Badge][2]][1] - -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Which kind of boxed JS primitive is this? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and works despite ES6 Symbol.toStringTag. - -## Example - -```js -var whichBoxedPrimitive = require('which-boxed-primitive'); -var assert = require('assert'); - -// unboxed primitives return `null` -// boxed primitives return the builtin constructor name - -assert.equal(whichBoxedPrimitive(undefined), null); -assert.equal(whichBoxedPrimitive(null), null); - -assert.equal(whichBoxedPrimitive(false), null); -assert.equal(whichBoxedPrimitive(true), null); -assert.equal(whichBoxedPrimitive(new Boolean(false)), 'Boolean'); -assert.equal(whichBoxedPrimitive(new Boolean(true)), 'Boolean'); - -assert.equal(whichBoxedPrimitive(42), null); -assert.equal(whichBoxedPrimitive(NaN), null); -assert.equal(whichBoxedPrimitive(Infinity), null); -assert.equal(whichBoxedPrimitive(new Number(42)), 'Number'); -assert.equal(whichBoxedPrimitive(new Number(NaN)), 'Number'); -assert.equal(whichBoxedPrimitive(new Number(Infinity)), 'Number'); - -assert.equal(whichBoxedPrimitive(''), null); -assert.equal(whichBoxedPrimitive('foo'), null); -assert.equal(whichBoxedPrimitive(new String('')), 'String'); -assert.equal(whichBoxedPrimitive(new String('foo')), 'String'); - -assert.equal(whichBoxedPrimitive(Symbol()), null); -assert.equal(whichBoxedPrimitive(Object(Symbol()), 'Symbol'); - -assert.equal(whichBoxedPrimitive(42n), null); -assert.equal(whichBoxedPrimitive(Object(42n), 'BigInt'); - -// non-boxed-primitive objects return `undefined` -assert.equal(whichBoxedPrimitive([]), undefined); -assert.equal(whichBoxedPrimitive({}), undefined); -assert.equal(whichBoxedPrimitive(/a/g), undefined); -assert.equal(whichBoxedPrimitive(new RegExp('a', 'g')), undefined); -assert.equal(whichBoxedPrimitive(new Date()), undefined); -assert.equal(whichBoxedPrimitive(function () {}), undefined); -assert.equal(whichBoxedPrimitive(function* () {}), undefined); -assert.equal(whichBoxedPrimitive(x => x * x), undefined); -assert.equal(whichBoxedPrimitive([]), undefined); - -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/which-boxed-primitive -[2]: https://versionbadg.es/inspect-js/which-boxed-primitive.svg -[5]: https://david-dm.org/inspect-js/which-boxed-primitive.svg -[6]: https://david-dm.org/inspect-js/which-boxed-primitive -[7]: https://david-dm.org/inspect-js/which-boxed-primitive/dev-status.svg -[8]: https://david-dm.org/inspect-js/which-boxed-primitive#info=devDependencies -[11]: https://nodei.co/npm/which-boxed-primitive.png?downloads=true&stars=true -[license-image]: https://img.shields.io/npm/l/which-boxed-primitive.svg -[license-url]: LICENSE -[downloads-image]: https://img.shields.io/npm/dm/which-boxed-primitive.svg -[downloads-url]: https://npm-stat.com/charts.html?package=which-boxed-primitive diff --git a/build/node_modules/which-boxed-primitive/index.js b/build/node_modules/which-boxed-primitive/index.js deleted file mode 100644 index f8ea5641..00000000 --- a/build/node_modules/which-boxed-primitive/index.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var isString = require('is-string'); -var isNumber = require('is-number-object'); -var isBoolean = require('is-boolean-object'); -var isSymbol = require('is-symbol'); -var isBigInt = require('is-bigint'); - -// eslint-disable-next-line consistent-return -module.exports = function whichBoxedPrimitive(value) { - // eslint-disable-next-line eqeqeq - if (value == null || (typeof value !== 'object' && typeof value !== 'function')) { - return null; - } - if (isString(value)) { - return 'String'; - } - if (isNumber(value)) { - return 'Number'; - } - if (isBoolean(value)) { - return 'Boolean'; - } - if (isSymbol(value)) { - return 'Symbol'; - } - if (isBigInt(value)) { - return 'BigInt'; - } -}; diff --git a/build/node_modules/which-boxed-primitive/package.json b/build/node_modules/which-boxed-primitive/package.json deleted file mode 100644 index 0306a217..00000000 --- a/build/node_modules/which-boxed-primitive/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_from": "which-boxed-primitive@^1.0.2", - "_id": "which-boxed-primitive@1.0.2", - "_inBundle": false, - "_integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "_location": "/which-boxed-primitive", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "which-boxed-primitive@^1.0.2", - "name": "which-boxed-primitive", - "escapedName": "which-boxed-primitive", - "rawSpec": "^1.0.2", - "saveSpec": null, - "fetchSpec": "^1.0.2" - }, - "_requiredBy": [ - "/unbox-primitive" - ], - "_resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "_shasum": "13757bc89b209b049fe5d86430e21cf40a89a8e6", - "_spec": "which-boxed-primitive@^1.0.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/unbox-primitive", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false, - "hideCredit": true - }, - "bugs": { - "url": "https://github.com/inspect-js/which-boxed-primitive/issues" - }, - "bundleDependencies": false, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "deprecated": false, - "description": "Which kind of boxed JS primitive is this?", - "devDependencies": { - "@ljharb/eslint-config": "^17.3.0", - "aud": "^1.1.3", - "auto-changelog": "^2.2.1", - "eslint": "^7.15.0", - "has-symbols": "^1.0.1", - "in-publish": "^2.0.1", - "nyc": "^10.3.2", - "object-inspect": "^1.9.0", - "safe-publish-latest": "^1.1.4", - "tape": "^5.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/which-boxed-primitive#readme", - "keywords": [ - "boxed", - "primitive", - "object", - "ecmascript", - "javascript", - "which" - ], - "license": "MIT", - "main": "index.js", - "name": "which-boxed-primitive", - "repository": { - "type": "git", - "url": "git+https://github.com/inspect-js/which-boxed-primitive.git" - }, - "scripts": { - "lint": "eslint --ext=js,mjs .", - "posttest": "aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "not-in-publish || safe-publish-latest", - "pretest": "npm run lint", - "preversion": "auto-changelog", - "test": "npm run tests-only", - "tests-only": "nyc tape 'test/**/*.js'", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "version": "1.0.2" -} diff --git a/build/node_modules/which-boxed-primitive/test/index.js b/build/node_modules/which-boxed-primitive/test/index.js deleted file mode 100644 index f9ea998c..00000000 --- a/build/node_modules/which-boxed-primitive/test/index.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -var test = require('tape'); -var inspect = require('object-inspect'); -var whichBoxedPrimitive = require('..'); - -var debug = function (v, m) { return inspect(v) + ' ' + m; }; - -var forEach = function (arr, func) { - var i; - for (i = 0; i < arr.length; ++i) { - func(arr[i], i, arr); - } -}; - -var hasSymbols = require('has-symbols')(); -var hasBigInts = typeof BigInt === 'function'; - -var primitives = [ - true, - false, - 42, - NaN, - Infinity, - '', - 'foo' -].concat( - hasSymbols ? [Symbol(), Symbol.iterator] : [], - hasBigInts ? BigInt(42) : [] -); - -var objects = [ - /a/g, - new Date(), - function () {}, - [], - {} -]; - -test('isBoxedPrimitive', function (t) { - t.test('unboxed primitives', function (st) { - forEach([null, undefined].concat(primitives), function (primitive) { - st.equal(null, whichBoxedPrimitive(primitive), debug(primitive, 'is a primitive, but not a boxed primitive')); - }); - st.end(); - }); - - t.test('boxed primitives', function (st) { - forEach(primitives, function (primitive) { - var boxed = Object(primitive); - var expected = boxed.constructor.name; - st.equal(typeof expected, 'string', 'expected is string'); - st.equal(whichBoxedPrimitive(boxed), expected, debug(boxed, 'is a boxed primitive: ' + expected)); - }); - st.end(); - }); - - t.test('non-primitive objects', function (st) { - forEach(objects, function (object) { - st.equal(undefined, whichBoxedPrimitive(object), debug(object, 'is not a primitive, boxed or otherwise')); - }); - st.end(); - }); - - t.end(); -}); diff --git a/build/node_modules/which-typed-array/.editorconfig b/build/node_modules/which-typed-array/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/build/node_modules/which-typed-array/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/build/node_modules/which-typed-array/.eslintignore b/build/node_modules/which-typed-array/.eslintignore deleted file mode 100644 index 404abb22..00000000 --- a/build/node_modules/which-typed-array/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -coverage/ diff --git a/build/node_modules/which-typed-array/.eslintrc b/build/node_modules/which-typed-array/.eslintrc deleted file mode 100644 index 8b2ada07..00000000 --- a/build/node_modules/which-typed-array/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "max-statements-per-line": [2, { "max": 2 }], - }, -} diff --git a/build/node_modules/which-typed-array/.github/FUNDING.yml b/build/node_modules/which-typed-array/.github/FUNDING.yml deleted file mode 100644 index d6aa1803..00000000 --- a/build/node_modules/which-typed-array/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [ljharb] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: npm/which-typed-array -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/build/node_modules/which-typed-array/.nycrc b/build/node_modules/which-typed-array/.nycrc deleted file mode 100644 index 1826526e..00000000 --- a/build/node_modules/which-typed-array/.nycrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "all": true, - "check-coverage": false, - "reporter": ["text-summary", "text", "html", "json"], - "lines": 86, - "statements": 85.93, - "functions": 82.43, - "branches": 76.06, - "exclude": [ - "coverage", - "test" - ] -} diff --git a/build/node_modules/which-typed-array/CHANGELOG.md b/build/node_modules/which-typed-array/CHANGELOG.md deleted file mode 100644 index 2c4f9690..00000000 --- a/build/node_modules/which-typed-array/CHANGELOG.md +++ /dev/null @@ -1,123 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - -## [v1.1.4](https://github.com/inspect-js/which-typed-array/compare/v1.1.3...v1.1.4) - 2020-12-05 - -### Commits - -- [meta] npmignore github action workflows [`aa427e7`](https://github.com/inspect-js/which-typed-array/commit/aa427e79a230a985953695a8129ceb6bb7d42527) - -## [v1.1.3](https://github.com/inspect-js/which-typed-array/compare/v1.1.2...v1.1.3) - 2020-12-05 - -### Commits - -- [Tests] migrate tests to Github Actions [`803d4dd`](https://github.com/inspect-js/which-typed-array/commit/803d4ddb601ff03e587be792bd452de0e2783d03) -- [Tests] run `nyc` on all tests [`205a13f`](https://github.com/inspect-js/which-typed-array/commit/205a13f7aa172e014ddc2079c84af6ba575581c8) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `is-callable`, `tape` [`97ceb07`](https://github.com/inspect-js/which-typed-array/commit/97ceb070d5aea1c3a696c6f695800ae468bafc0b) -- [actions] add "Allow Edits" workflow [`b140492`](https://github.com/inspect-js/which-typed-array/commit/b14049211eff32bd4149767def4f939483810051) -- [Deps] update `es-abstract`; use `call-bind` where applicable [`2abdb87`](https://github.com/inspect-js/which-typed-array/commit/2abdb871961b4e1b58925115a7d56a9cc5966a02) -- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`256d34b`](https://github.com/inspect-js/which-typed-array/commit/256d34b8bdb67b8af0e9f83c9a318e54f3340e3b) -- [Dev Deps] update `auto-changelog`; add `aud` [`ddea96f`](https://github.com/inspect-js/which-typed-array/commit/ddea96fe320dbdd0c7d7569812399a7f64d43e04) -- [meta] gitignore nyc output [`8a812bd`](https://github.com/inspect-js/which-typed-array/commit/8a812bd1ce7c5609988fb4fe2e9af2089eccd07d) - -## [v1.1.2](https://github.com/inspect-js/which-typed-array/compare/v1.1.1...v1.1.2) - 2020-04-07 - -### Commits - -- [Dev Deps] update `make-arrow-function`, `make-generator-function` [`28c61ef`](https://github.com/inspect-js/which-typed-array/commit/28c61eff4903ff6509f65c2f500858b9cb4636f1) -- [Dev Deps] update `@ljharb/eslint-config` [`a233879`](https://github.com/inspect-js/which-typed-array/commit/a2338798d3a4a3169cda54e322b2f2eb0e976ad0) -- [Dev Deps] update `auto-changelog` [`df0134c`](https://github.com/inspect-js/which-typed-array/commit/df0134c0e20ec6d94993988ad670e1b3cf350bea) -- [Fix] move `foreach` to dependencies [`6ef29c0`](https://github.com/inspect-js/which-typed-array/commit/6ef29c0dbb91a7ec21df7ce8736f99f41efea39e) -- [Tests] only audit prod deps [`eb21044`](https://github.com/inspect-js/which-typed-array/commit/eb210446bd7a433657204d2314ef56fe264c21ad) -- [Deps] update `es-abstract` [`5ef0236`](https://github.com/inspect-js/which-typed-array/commit/5ef02368d9876a1074123aa7725d6759b4f3e358) -- [Dev Deps] update `tape` [`7456037`](https://github.com/inspect-js/which-typed-array/commit/745603728c6c3da8bdddee321e8a9196f4827aa3) -- [Deps] update `available-typed-arrays` [`8a856c9`](https://github.com/inspect-js/which-typed-array/commit/8a856c9aa707c1e6f7a52e834485356b31395ea6) - -## [v1.1.1](https://github.com/inspect-js/which-typed-array/compare/v1.1.0...v1.1.1) - 2020-01-24 - -### Commits - -- [Tests] use shared travis-ci configs [`0a627d9`](https://github.com/inspect-js/which-typed-array/commit/0a627d9694d0eabdaee63b19e605584166995a79) -- [meta] add `auto-changelog` [`2a14c58`](https://github.com/inspect-js/which-typed-array/commit/2a14c58b79f72e32ef2078efb40d31a4bf8c197a) -- [meta] remove unused Makefile and associated utilities [`75f7f22`](https://github.com/inspect-js/which-typed-array/commit/75f7f222199f42618c290de363c542b11f5a5632) -- [Tests] up to `node` `v12.10`, `v11.15`, `v10.16`, `v8.16`, `v6.17` [`4162327`](https://github.com/inspect-js/which-typed-array/commit/416232725e7d127cbd886af0f8988dae612a342f) -- [Refactor] use `es-abstract`’s `callBound`, `available-typed-arrays`, `has-symbols` [`9b04a2a`](https://github.com/inspect-js/which-typed-array/commit/9b04a2a14c758600cffcf59485b7b3c85839c266) -- [readme] fix repo URLs, remove testling [`03ed52f`](https://github.com/inspect-js/which-typed-array/commit/03ed52f3ae4fcd35614bcda7e947b14e62009c71) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `replace`, `semver`, `tape` [`bfbcf3e`](https://github.com/inspect-js/which-typed-array/commit/bfbcf3ec9c449bd0089ed805c01a32ba4e7e5938) -- [actions] add automatic rebasing / merge commit blocking [`cc88ac5`](https://github.com/inspect-js/which-typed-array/commit/cc88ac56bcfb71cb26c656ebde4c560a22fadd85) -- [meta] create FUNDING.yml [`acbc723`](https://github.com/inspect-js/which-typed-array/commit/acbc7230929b1256c83df28be4a456eed3e147e9) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `is-callable`, `tape` [`f1ab63e`](https://github.com/inspect-js/which-typed-array/commit/f1ab63e9366027eae2e29398c035181dac164132) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` [`ac9f50b`](https://github.com/inspect-js/which-typed-array/commit/ac9f50b59558933292dff993df2e68eaa44b07e2) -- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`aaaa15d`](https://github.com/inspect-js/which-typed-array/commit/aaaa15dfb5bd8228c0cfb8f2aba267efb405b0a1) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`602fc9a`](https://github.com/inspect-js/which-typed-array/commit/602fc9a0a7d708236f90c76f592e6a980ecde940) -- [Deps] update `available-typed-arrays`, `is-typed-array` [`b2d69b6`](https://github.com/inspect-js/which-typed-array/commit/b2d69b639bf14344d09f8512dbc060cd4f533161) -- [meta] add `funding` field [`156f613`](https://github.com/inspect-js/which-typed-array/commit/156f613d0ce547c4b15e1ae279198b66e3cef55e) - -## [v1.1.0](https://github.com/inspect-js/which-typed-array/compare/v1.0.1...v1.1.0) - 2019-02-16 - -### Commits - -- [Tests] remove `jscs` [`381c9b4`](https://github.com/inspect-js/which-typed-array/commit/381c9b4bd858da1adedf23d8555af3a3ed901a83) -- [Tests] up to `node` `v8.2`, `v7.10`, `v6.11`, `v5.8`; improve matrix; newer npm breaks on older node [`7015c19`](https://github.com/inspect-js/which-typed-array/commit/7015c196ba86540b04d18d9b1d2c368909492023) -- [Tests] up to `node` `v10.0`, `v9.11`, `v8.11`, `v6.14`, `v4.9`; use `nvm install-latest-npm` [`ad67885`](https://github.com/inspect-js/which-typed-array/commit/ad678853e245986720d7650be1c974a9ff3ac814) -- [Tests] up to `node` `v11.6`, `v10.15`, `v8.15`, `v6.16` [`dd94bfb`](https://github.com/inspect-js/which-typed-array/commit/dd94bfb6309a92d1537352f2d1100f9e913ebc01) -- [Refactor] use an array instead of an object for storing Typed Array names [`de98bc1`](https://github.com/inspect-js/which-typed-array/commit/de98bc1d44af92909a34212e276deb5d79ac428a) -- [meta] ignore `test.html` [`06cfb1b`](https://github.com/inspect-js/which-typed-array/commit/06cfb1bc0ca7881d1bd1621fa946a16366cd6afc) -- [Tests] up to `node` `v7.0`, `v6.9`, `v4.6`; improve test matrix [`df76eaa`](https://github.com/inspect-js/which-typed-array/commit/df76eaa39b94b28147e81a89bb587e8aa3e3dba3) -- [New] add `BigInt64Array` and `BigUint64Array` [`d6bca3a`](https://github.com/inspect-js/which-typed-array/commit/d6bca3a68ccfe33f6659a24b770068e89dab1592) -- [Dev Deps] update `jscs`, `nsp`, `eslint` [`f23b45b`](https://github.com/inspect-js/which-typed-array/commit/f23b45b2796bd1f63ddddf28b4b80b9709478cb3) -- [Dev Deps] update `@ljharb/eslint-config`, `eslint`, `semver`, `tape` [`ddb4484`](https://github.com/inspect-js/which-typed-array/commit/ddb4484adc3b45c4396632611556055f3b2f5990) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `is-callable`, `replace`, `semver`, `tape` [`4524e59`](https://github.com/inspect-js/which-typed-array/commit/4524e593e9387c185d5632696c62c1600c0b380f) -- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`1ec7056`](https://github.com/inspect-js/which-typed-array/commit/1ec70568565c479a6168b03e0a5aec6ec9ac5a21) -- [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` [`799487d`](https://github.com/inspect-js/which-typed-array/commit/799487d666b32d1ae0d27cfededf2f5480c5faea) -- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` [`8092598`](https://github.com/inspect-js/which-typed-array/commit/8092598998a1f9f8005b4e3d299eb09c96fa2e21) -- [Tests] up to `node` `v11.10` [`a5aabb1`](https://github.com/inspect-js/which-typed-array/commit/a5aabb1910e8408f857a791253487824c7c758d3) -- [Dev Deps] update `@ljharb/eslint-config`, `eslint`, `nsp`, `semver`, `tape` [`277be33`](https://github.com/inspect-js/which-typed-array/commit/277be331d9f05ff95644d6bcd896547ca620cd8e) -- [Tests] use `npm audit` instead of `nsp` [`ee97dc7`](https://github.com/inspect-js/which-typed-array/commit/ee97dc7c5d384d68f60ce6cb5a85d9509e75f72b) -- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` [`262ffb0`](https://github.com/inspect-js/which-typed-array/commit/262ffb025facb0795b33fbd5131183bdbc0a40f6) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`d6bbcfc`](https://github.com/inspect-js/which-typed-array/commit/d6bbcfc3eea427f0156fbdcf9ae11dbf3745a755) -- [Tests] up to `node` `v6.2` [`2ff89eb`](https://github.com/inspect-js/which-typed-array/commit/2ff89eb91754146c0bc1ae689f37458d84f6e690) -- Only apps should have lockfiles [`e2bc271`](https://github.com/inspect-js/which-typed-array/commit/e2bc271e1e9a6481a2836f892177825a808c331c) -- [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config` [`b79e93b`](https://github.com/inspect-js/which-typed-array/commit/b79e93bf15c871ce0ff24fa3ad61001707eea463) -- [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config` [`016dbff`](https://github.com/inspect-js/which-typed-array/commit/016dbff8c49c32cda7ec80d86006c8a7c43bc40c) -- [Dev Deps] update `eslint`, `tape` [`6ce4bbc`](https://github.com/inspect-js/which-typed-array/commit/6ce4bbc5f6caf632cbcf9ababbfe36e1bf4093d7) -- [Tests] on `node` `v10.1` [`f0683a0`](https://github.com/inspect-js/which-typed-array/commit/f0683a0c17e039e926ecaad4c4c341cd8e5878f1) -- [Tests] up to `node` `v7.2` [`2f29cef`](https://github.com/inspect-js/which-typed-array/commit/2f29cef42d30f87259cd6687c25a79ae4651d0c9) -- [Dev Deps] update `replace` [`73b5ba6`](https://github.com/inspect-js/which-typed-array/commit/73b5ba6e87638d13553985977cab9d1bad33e242) -- [Deps] update `function-bind` [`c8a18c2`](https://github.com/inspect-js/which-typed-array/commit/c8a18c2982e6b126ecc1d4655ec2e53b05535b20) -- [Tests] on `node` `v5.12` [`812102b`](https://github.com/inspect-js/which-typed-array/commit/812102bf223422da8f7a89e5a1308214dd158571) -- [Tests] on `node` `v5.10` [`271584f`](https://github.com/inspect-js/which-typed-array/commit/271584f3a8b10ef68a7d419ac0062b444e63d07c) - -## [v1.0.1](https://github.com/inspect-js/which-typed-array/compare/v1.0.0...v1.0.1) - 2016-03-19 - -### Commits - -- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `is-callable` [`4a628c5`](https://github.com/inspect-js/which-typed-array/commit/4a628c520d8e080a9fa7e8218947d3b2ceedca72) -- [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `is-callable` [`8e09372`](https://github.com/inspect-js/which-typed-array/commit/8e09372ded877a191cbf777060483227d5071e84) -- [Tests] up to `node` `v5.6`, `v4.3` [`3a35bf9`](https://github.com/inspect-js/which-typed-array/commit/3a35bf9fb9c7f8e6ac1b579ed2754087351ad1a5) -- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`9410d5e`](https://github.com/inspect-js/which-typed-array/commit/9410d5e35db4b834827b31ea1723bbeebbcde5ba) -- [Fix] `Symbol.toStringTag` is on the super-[[Prototype]] of Float32Array, not the [[Prototype]]. [`7c40a3a`](https://github.com/inspect-js/which-typed-array/commit/7c40a3a05046bbbd188340fb19471ad913e4af05) -- [Tests] up to `node` `v5.9`, `v4.4` [`07878e7`](https://github.com/inspect-js/which-typed-array/commit/07878e7cd23d586ddb9e85a03f675e0a574db246) -- Use the object form of "author" in package.json [`65caa56`](https://github.com/inspect-js/which-typed-array/commit/65caa560d1c0c15c1080b25a9df55c7373c73f08) -- [Tests] use pretest/posttest for linting/security [`c170f7e`](https://github.com/inspect-js/which-typed-array/commit/c170f7ebcf07475d6420f2d2d2d08b1646280cd4) -- [Deps] update `is-typed-array` [`9ab324e`](https://github.com/inspect-js/which-typed-array/commit/9ab324e746a7552b2d9363777fc5c9f5c2e31ce7) -- [Deps] update `function-bind` [`a723142`](https://github.com/inspect-js/which-typed-array/commit/a723142c70a5b6a4f8f5feecc9705619590f4eeb) -- [Deps] update `is-typed-array` [`ed82ce4`](https://github.com/inspect-js/which-typed-array/commit/ed82ce4e8ecc657fc6e839d23ef6347497bc93be) -- [Tests] on `node` `v4.2` [`f581c20`](https://github.com/inspect-js/which-typed-array/commit/f581c2031990668894a8e5a08eaf01a2548e822c) - -## v1.0.0 - 2015-10-05 - -### Commits - -- Dotfiles / Makefile [`667f89a`](https://github.com/inspect-js/which-typed-array/commit/667f89a9046502594e2559dbf5568e062af3b770) -- Tests. [`a14d05e`](https://github.com/inspect-js/which-typed-array/commit/a14d05ef443d2ac678cb0567befc0abf8cf21709) -- package.json [`560b1aa`](https://github.com/inspect-js/which-typed-array/commit/560b1aa4f8bbc5d41d9cee96c93faf08c25be0e5) -- Read me [`a22096e`](https://github.com/inspect-js/which-typed-array/commit/a22096e05773f93b34e672d3f743ec6f1963bc24) -- Implementation [`0b1ae28`](https://github.com/inspect-js/which-typed-array/commit/0b1ae2848372f6256cf075d687e3722878e67aca) -- Initial commit [`4b32f0a`](https://github.com/inspect-js/which-typed-array/commit/4b32f0a9d32165d6ab91797d6971ea83cf4ce9da) diff --git a/build/node_modules/which-typed-array/LICENSE b/build/node_modules/which-typed-array/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/build/node_modules/which-typed-array/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/build/node_modules/which-typed-array/README.md b/build/node_modules/which-typed-array/README.md deleted file mode 100644 index cda64c00..00000000 --- a/build/node_modules/which-typed-array/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# which-typed-array [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -Which kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag. - -## Example - -```js -var whichTypedArray = require('which-typed-array'); -var assert = require('assert'); - -assert.equal(false, whichTypedArray(undefined)); -assert.equal(false, whichTypedArray(null)); -assert.equal(false, whichTypedArray(false)); -assert.equal(false, whichTypedArray(true)); -assert.equal(false, whichTypedArray([])); -assert.equal(false, whichTypedArray({})); -assert.equal(false, whichTypedArray(/a/g)); -assert.equal(false, whichTypedArray(new RegExp('a', 'g'))); -assert.equal(false, whichTypedArray(new Date())); -assert.equal(false, whichTypedArray(42)); -assert.equal(false, whichTypedArray(NaN)); -assert.equal(false, whichTypedArray(Infinity)); -assert.equal(false, whichTypedArray(new Number(42))); -assert.equal(false, whichTypedArray('foo')); -assert.equal(false, whichTypedArray(Object('foo'))); -assert.equal(false, whichTypedArray(function () {})); -assert.equal(false, whichTypedArray(function* () {})); -assert.equal(false, whichTypedArray(x => x * x)); -assert.equal(false, whichTypedArray([])); - -assert.equal('Int8Array', whichTypedArray(new Int8Array())); -assert.equal('Uint8Array', whichTypedArray(new Uint8Array())); -assert.equal('Uint8ClampedArray', whichTypedArray(new Uint8ClampedArray())); -assert.equal('Int16Array', whichTypedArray(new Int16Array())); -assert.equal('Uint16Array', whichTypedArray(new Uint16Array())); -assert.equal('Int32Array', whichTypedArray(new Int32Array())); -assert.equal('Uint32Array', whichTypedArray(new Uint32Array())); -assert.equal('Float32Array', whichTypedArray(new Float32Array())); -assert.equal('Float64Array', whichTypedArray(new Float64Array())); -assert.equal('BigInt64Array', whichTypedArray(new BigInt64Array())); -assert.equal('BigUint64Array', whichTypedArray(new BigUint64Array())); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/which-typed-array -[2]: http://versionbadg.es/inspect-js/which-typed-array.svg -[3]: https://travis-ci.org/inspect-js/which-typed-array.svg -[4]: https://travis-ci.org/inspect-js/which-typed-array -[5]: https://david-dm.org/inspect-js/which-typed-array.svg -[6]: https://david-dm.org/inspect-js/which-typed-array -[7]: https://david-dm.org/inspect-js/which-typed-array/dev-status.svg -[8]: https://david-dm.org/inspect-js/which-typed-array#info=devDependencies -[11]: https://nodei.co/npm/which-typed-array.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/which-typed-array.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/which-typed-array.svg -[downloads-url]: http://npm-stat.com/charts.html?package=which-typed-array diff --git a/build/node_modules/which-typed-array/index.js b/build/node_modules/which-typed-array/index.js deleted file mode 100644 index a49a04d5..00000000 --- a/build/node_modules/which-typed-array/index.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -var forEach = require('foreach'); -var availableTypedArrays = require('available-typed-arrays'); -var callBound = require('call-bind/callBound'); - -var $toString = callBound('Object.prototype.toString'); -var hasSymbols = require('has-symbols')(); -var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol'; - -var typedArrays = availableTypedArrays(); - -var $slice = callBound('String.prototype.slice'); -var toStrTags = {}; -var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); -var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); -if (hasToStringTag && gOPD && getPrototypeOf) { - forEach(typedArrays, function (typedArray) { - if (typeof global[typedArray] === 'function') { - var arr = new global[typedArray](); - if (!(Symbol.toStringTag in arr)) { - throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.'); - } - var proto = getPrototypeOf(arr); - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor) { - var superProto = getPrototypeOf(proto); - descriptor = gOPD(superProto, Symbol.toStringTag); - } - toStrTags[typedArray] = descriptor.get; - } - }); -} - -var tryTypedArrays = function tryAllTypedArrays(value) { - var foundName = false; - forEach(toStrTags, function (getter, typedArray) { - if (!foundName) { - try { - var name = getter.call(value); - if (name === typedArray) { - foundName = name; - } - } catch (e) {} - } - }); - return foundName; -}; - -var isTypedArray = require('is-typed-array'); - -module.exports = function whichTypedArray(value) { - if (!isTypedArray(value)) { return false; } - if (!hasToStringTag) { return $slice($toString(value), 8, -1); } - return tryTypedArrays(value); -}; diff --git a/build/node_modules/which-typed-array/package.json b/build/node_modules/which-typed-array/package.json deleted file mode 100644 index b19ceb82..00000000 --- a/build/node_modules/which-typed-array/package.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "_from": "which-typed-array@^1.1.2", - "_id": "which-typed-array@1.1.4", - "_inBundle": false, - "_integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "_location": "/which-typed-array", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "which-typed-array@^1.1.2", - "name": "which-typed-array", - "escapedName": "which-typed-array", - "rawSpec": "^1.1.2", - "saveSpec": null, - "fetchSpec": "^1.1.2" - }, - "_requiredBy": [ - "/util" - ], - "_resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "_shasum": "8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff", - "_spec": "which-typed-array@^1.1.2", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/util", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "auto-changelog": { - "output": "CHANGELOG.md", - "template": "keepachangelog", - "unreleased": false, - "commitLimit": false, - "backfillLimit": false - }, - "bugs": { - "url": "https://github.com/inspect-js/which-typed-array/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - }, - "deprecated": false, - "description": "Which kind of Typed Array is this JavaScript value? Works cross-realm, without `instanceof`, and despite Symbol.toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^17.3.0", - "aud": "^1.1.3", - "auto-changelog": "^2.2.1", - "eslint": "^7.15.0", - "is-callable": "^1.2.2", - "make-arrow-function": "^1.2.0", - "make-generator-function": "^2.0.0", - "nyc": "^10.3.2", - "safe-publish-latest": "^1.1.4", - "tape": "^5.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "homepage": "https://github.com/inspect-js/which-typed-array#readme", - "keywords": [ - "array", - "TypedArray", - "typed array", - "which", - "typed", - "Int8Array", - "Uint8Array", - "Uint8ClampedArray", - "Int16Array", - "Uint16Array", - "Int32Array", - "Uint32Array", - "Float32Array", - "Float64Array", - "ES6", - "toStringTag", - "Symbol.toStringTag", - "@@toStringTag" - ], - "license": "MIT", - "main": "index.js", - "name": "which-typed-array", - "repository": { - "type": "git", - "url": "git://github.com/inspect-js/which-typed-array.git" - }, - "scripts": { - "lint": "eslint .", - "posttest": "npx aud --production", - "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"", - "prepublish": "safe-publish-latest", - "pretest": "npm run --silent lint", - "test": "npm run tests-only && npm run test:harmony", - "test:harmony": "nyc node --harmony --es-staging test", - "tests-only": "nyc tape test", - "version": "auto-changelog && git add CHANGELOG.md" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.4" -} diff --git a/build/node_modules/which-typed-array/test/index.js b/build/node_modules/which-typed-array/test/index.js deleted file mode 100644 index eafe6763..00000000 --- a/build/node_modules/which-typed-array/test/index.js +++ /dev/null @@ -1,99 +0,0 @@ -'use strict'; - -var test = require('tape'); -var whichTypedArray = require('../'); -var isCallable = require('is-callable'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; -var generators = require('make-generator-function')(); -var arrows = require('make-arrow-function').list(); -var forEach = require('foreach'); - -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array', - 'BigInt64Array', - 'BigUint64Array' -]; - -test('not arrays', function (t) { - t.test('non-number/string primitives', function (st) { - st.equal(false, whichTypedArray(), 'undefined is not typed array'); - st.equal(false, whichTypedArray(null), 'null is not typed array'); - st.equal(false, whichTypedArray(false), 'false is not typed array'); - st.equal(false, whichTypedArray(true), 'true is not typed array'); - st.end(); - }); - - t.equal(false, whichTypedArray({}), 'object is not typed array'); - t.equal(false, whichTypedArray(/a/g), 'regex literal is not typed array'); - t.equal(false, whichTypedArray(new RegExp('a', 'g')), 'regex object is not typed array'); - t.equal(false, whichTypedArray(new Date()), 'new Date() is not typed array'); - - t.test('numbers', function (st) { - st.equal(false, whichTypedArray(42), 'number is not typed array'); - st.equal(false, whichTypedArray(Object(42)), 'number object is not typed array'); - st.equal(false, whichTypedArray(NaN), 'NaN is not typed array'); - st.equal(false, whichTypedArray(Infinity), 'Infinity is not typed array'); - st.end(); - }); - - t.test('strings', function (st) { - st.equal(false, whichTypedArray('foo'), 'string primitive is not typed array'); - st.equal(false, whichTypedArray(Object('foo')), 'string object is not typed array'); - st.end(); - }); - - t.end(); -}); - -test('Functions', function (t) { - t.equal(false, whichTypedArray(function () {}), 'function is not typed array'); - t.end(); -}); - -test('Generators', { skip: generators.length === 0 }, function (t) { - forEach(generators, function (genFn) { - t.equal(false, whichTypedArray(genFn), 'generator function ' + genFn + ' is not typed array'); - }); - t.end(); -}); - -test('Arrow functions', { skip: arrows.length === 0 }, function (t) { - forEach(arrows, function (arrowFn) { - t.equal(false, whichTypedArray(arrowFn), 'arrow function ' + arrowFn + ' is not typed array'); - }); - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - forEach(typedArrayNames, function (typedArray) { - if (typeof global[typedArray] === 'function') { - var fakeTypedArray = []; - fakeTypedArray[Symbol.toStringTag] = typedArray; - t.equal(false, whichTypedArray(fakeTypedArray), 'faked ' + typedArray + ' is not typed array'); - } else { - t.comment('# SKIP ' + typedArray + ' is not supported'); - } - }); - t.end(); -}); - -test('Typed Arrays', function (t) { - forEach(typedArrayNames, function (typedArray) { - var TypedArray = global[typedArray]; - if (isCallable(TypedArray)) { - var arr = new TypedArray(10); - t.equal(typedArray, whichTypedArray(arr), 'new ' + typedArray + '(10) is typed array of type ' + typedArray); - } else { - t.comment('# SKIP ' + typedArray + ' is not supported'); - } - }); - t.end(); -}); diff --git a/build/node_modules/which/CHANGELOG.md b/build/node_modules/which/CHANGELOG.md new file mode 100644 index 00000000..7fb1f203 --- /dev/null +++ b/build/node_modules/which/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changes + + +## 2.0.2 + +* Rename bin to `node-which` + +## 2.0.1 + +* generate changelog and publish on version bump +* enforce 100% test coverage +* Promise interface + +## 2.0.0 + +* Parallel tests, modern JavaScript, and drop support for node < 8 + +## 1.3.1 + +* update deps +* update travis + +## v1.3.0 + +* Add nothrow option to which.sync +* update tap + +## v1.2.14 + +* appveyor: drop node 5 and 0.x +* travis-ci: add node 6, drop 0.x + +## v1.2.13 + +* test: Pass missing option to pass on windows +* update tap +* update isexe to 2.0.0 +* neveragain.tech pledge request + +## v1.2.12 + +* Removed unused require + +## v1.2.11 + +* Prevent changelog script from being included in package + +## v1.2.10 + +* Use env.PATH only, not env.Path + +## v1.2.9 + +* fix for paths starting with ../ +* Remove unused `is-absolute` module + +## v1.2.8 + +* bullet items in changelog that contain (but don't start with) # + +## v1.2.7 + +* strip 'update changelog' changelog entries out of changelog + +## v1.2.6 + +* make the changelog bulleted + +## v1.2.5 + +* make a changelog, and keep it up to date +* don't include tests in package +* Properly handle relative-path executables +* appveyor +* Attach error code to Not Found error +* Make tests pass on Windows + +## v1.2.4 + +* Fix typo + +## v1.2.3 + +* update isexe, fix regression in pathExt handling + +## v1.2.2 + +* update deps, use isexe module, test windows + +## v1.2.1 + +* Sometimes windows PATH entries are quoted +* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. +* doc cli + +## v1.2.0 + +* Add support for opt.all and -as cli flags +* test the bin +* update travis +* Allow checking for multiple programs in bin/which +* tap 2 + +## v1.1.2 + +* travis +* Refactored and fixed undefined error on Windows +* Support strict mode + +## v1.1.1 + +* test +g exes against secondary groups, if available +* Use windows exe semantics on cygwin & msys +* cwd should be first in path on win32, not last +* Handle lower-case 'env.Path' on Windows +* Update docs +* use single-quotes + +## v1.1.0 + +* Add tests, depend on is-absolute + +## v1.0.9 + +* which.js: root is allowed to execute files owned by anyone + +## v1.0.8 + +* don't use graceful-fs + +## v1.0.7 + +* add license to package.json + +## v1.0.6 + +* isc license + +## 1.0.5 + +* Awful typo + +## 1.0.4 + +* Test for path absoluteness properly +* win: Allow '' as a pathext if cmd has a . in it + +## 1.0.3 + +* Remove references to execPath +* Make `which.sync()` work on Windows by honoring the PATHEXT variable. +* Make `isExe()` always return true on Windows. +* MIT + +## 1.0.2 + +* Only files can be exes + +## 1.0.1 + +* Respect the PATHEXT env for win32 support +* should 0755 the bin +* binary +* guts +* package +* 1st diff --git a/build/node_modules/which/LICENSE b/build/node_modules/which/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/build/node_modules/which/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/which/README.md b/build/node_modules/which/README.md new file mode 100644 index 00000000..cd833509 --- /dev/null +++ b/build/node_modules/which/README.md @@ -0,0 +1,54 @@ +# which + +Like the unix `which` utility. + +Finds the first instance of a specified executable in the PATH +environment variable. Does not cache the results, so `hash -r` is not +needed when the PATH changes. + +## USAGE + +```javascript +var which = require('which') + +// async usage +which('node', function (er, resolvedPath) { + // er is returned if no "node" is found on the PATH + // if it is found, then the absolute path to the exec is returned +}) + +// or promise +which('node').then(resolvedPath => { ... }).catch(er => { ... not found ... }) + +// sync usage +// throws if not found +var resolved = which.sync('node') + +// if nothrow option is used, returns null if not found +resolved = which.sync('node', {nothrow: true}) + +// Pass options to override the PATH and PATHEXT environment vars. +which('node', { path: someOtherPath }, function (er, resolved) { + if (er) + throw er + console.log('found at %j', resolved) +}) +``` + +## CLI USAGE + +Same as the BSD `which(1)` binary. + +``` +usage: which [-as] program ... +``` + +## OPTIONS + +You may pass an options object as the second argument. + +- `path`: Use instead of the `PATH` environment variable. +- `pathExt`: Use instead of the `PATHEXT` environment variable. +- `all`: Return all matches, instead of just the first one. Note that + this means the function returns an array of strings instead of a + single string. diff --git a/build/node_modules/which/bin/node-which b/build/node_modules/which/bin/node-which new file mode 100755 index 00000000..7cee3729 --- /dev/null +++ b/build/node_modules/which/bin/node-which @@ -0,0 +1,52 @@ +#!/usr/bin/env node +var which = require("../") +if (process.argv.length < 3) + usage() + +function usage () { + console.error('usage: which [-as] program ...') + process.exit(1) +} + +var all = false +var silent = false +var dashdash = false +var args = process.argv.slice(2).filter(function (arg) { + if (dashdash || !/^-/.test(arg)) + return true + + if (arg === '--') { + dashdash = true + return false + } + + var flags = arg.substr(1).split('') + for (var f = 0; f < flags.length; f++) { + var flag = flags[f] + switch (flag) { + case 's': + silent = true + break + case 'a': + all = true + break + default: + console.error('which: illegal option -- ' + flag) + usage() + } + } + return false +}) + +process.exit(args.reduce(function (pv, current) { + try { + var f = which.sync(current, { all: all }) + if (all) + f = f.join('\n') + if (!silent) + console.log(f) + return pv; + } catch (e) { + return 1; + } +}, 0)) diff --git a/build/node_modules/which/package.json b/build/node_modules/which/package.json new file mode 100644 index 00000000..dc872263 --- /dev/null +++ b/build/node_modules/which/package.json @@ -0,0 +1,76 @@ +{ + "_from": "which@2.0.2", + "_id": "which@2.0.2", + "_inBundle": false, + "_integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "_location": "/which", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "which@2.0.2", + "name": "which", + "escapedName": "which", + "rawSpec": "2.0.2", + "saveSpec": null, + "fetchSpec": "2.0.2" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/which/-/which-2.0.2.tgz", + "_shasum": "7c6a8dd0a636a0327e10b59c9286eee93f3f51b1", + "_spec": "which@2.0.2", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + "bin": { + "node-which": "./bin/node-which" + }, + "bugs": { + "url": "https://github.com/isaacs/node-which/issues" + }, + "bundleDependencies": false, + "dependencies": { + "isexe": "^2.0.0" + }, + "deprecated": false, + "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", + "devDependencies": { + "mkdirp": "^0.5.0", + "rimraf": "^2.6.2", + "tap": "^14.6.9" + }, + "engines": { + "node": ">= 8" + }, + "files": [ + "which.js", + "bin/node-which" + ], + "homepage": "https://github.com/isaacs/node-which#readme", + "license": "ISC", + "main": "which.js", + "name": "which", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-which.git" + }, + "scripts": { + "changelog": "git add CHANGELOG.md", + "postchangelog": "git commit -m 'update changelog - '${npm_package_version}", + "postpublish": "git push origin --follow-tags", + "postversion": "npm publish", + "prechangelog": "bash gen-changelog.sh", + "prepublish": "npm run changelog", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "check-coverage": true + }, + "version": "2.0.2" +} diff --git a/build/node_modules/which/which.js b/build/node_modules/which/which.js new file mode 100644 index 00000000..82afffd2 --- /dev/null +++ b/build/node_modules/which/which.js @@ -0,0 +1,125 @@ +const isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +const path = require('path') +const COLON = isWindows ? ';' : ':' +const isexe = require('isexe') + +const getNotFoundError = (cmd) => + Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) + +const getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] + : ( + [ + // windows always checks the cwd first + ...(isWindows ? [process.cwd()] : []), + ...(opt.path || process.env.PATH || + /* istanbul ignore next: very unusual */ '').split(colon), + ] + ) + const pathExtExe = isWindows + ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' + : '' + const pathExt = isWindows ? pathExtExe.split(colon) : [''] + + if (isWindows) { + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + return { + pathEnv, + pathExt, + pathExtExe, + } +} + +const which = (cmd, opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + if (!opt) + opt = {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + const step = i => new Promise((resolve, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve(found) + : reject(getNotFoundError(cmd)) + + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + resolve(subStep(p, i, 0)) + }) + + const subStep = (p, i, ii) => new Promise((resolve, reject) => { + if (ii === pathExt.length) + return resolve(step(i + 1)) + const ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return resolve(p + ext) + } + return resolve(subStep(p, i, ii + 1)) + }) + }) + + return cb ? step(0).then(res => cb(null, res), cb) : step(0) +} + +const whichSync = (cmd, opt) => { + opt = opt || {} + + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] + + for (let i = 0; i < pathEnv.length; i ++) { + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw + + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd + + for (let j = 0; j < pathExt.length; j ++) { + const cur = p + pathExt[j] + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + +module.exports = which +which.sync = whichSync diff --git a/build/node_modules/winston-transport/.eslintrc b/build/node_modules/winston-transport/.eslintrc index 9dafa5ab..a73255e2 100644 --- a/build/node_modules/winston-transport/.eslintrc +++ b/build/node_modules/winston-transport/.eslintrc @@ -1,5 +1,5 @@ { - "extends": "populist", + "extends": "@dabh/eslint-config-populist", "rules": { "one-var": ["error", { var: "never", let: "never", const: "never" }], "strict": 0 diff --git a/build/node_modules/winston-transport/.nyc_output/1c69f3e4-4c25-457d-9df5-dfa761729528.json b/build/node_modules/winston-transport/.nyc_output/1c69f3e4-4c25-457d-9df5-dfa761729528.json deleted file mode 100644 index 85e1d408..00000000 --- a/build/node_modules/winston-transport/.nyc_output/1c69f3e4-4c25-457d-9df5-dfa761729528.json +++ /dev/null @@ -1 +0,0 @@ -{"/home/dabh/winston-transport/index.js":{"path":"/home/dabh/winston-transport/index.js","statementMap":{"0":{"start":{"line":3,"column":13},"end":{"line":3,"column":28}},"1":{"start":{"line":4,"column":17},"end":{"line":4,"column":52}},"2":{"start":{"line":5,"column":18},"end":{"line":5,"column":40}},"3":{"start":{"line":18,"column":24},"end":{"line":54,"column":1}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":82}},"5":{"start":{"line":21,"column":2},"end":{"line":21,"column":31}},"6":{"start":{"line":22,"column":2},"end":{"line":22,"column":29}},"7":{"start":{"line":23,"column":2},"end":{"line":23,"column":51}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":51}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":31}},"10":{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},"11":{"start":{"line":27,"column":19},"end":{"line":27,"column":42}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"13":{"start":{"line":28,"column":20},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":21},"end":{"line":29,"column":48}},"16":{"start":{"line":32,"column":2},"end":{"line":39,"column":5}},"17":{"start":{"line":37,"column":4},"end":{"line":37,"column":32}},"18":{"start":{"line":38,"column":4},"end":{"line":38,"column":25}},"19":{"start":{"line":42,"column":2},"end":{"line":53,"column":5}},"20":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"21":{"start":{"line":48,"column":6},"end":{"line":48,"column":25}},"22":{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},"23":{"start":{"line":50,"column":8},"end":{"line":50,"column":21}},"24":{"start":{"line":59,"column":0},"end":{"line":59,"column":41}},"25":{"start":{"line":69,"column":0},"end":{"line":107,"column":2}},"26":{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},"27":{"start":{"line":71,"column":4},"end":{"line":71,"column":26}},"28":{"start":{"line":78,"column":16},"end":{"line":78,"column":64}},"29":{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},"30":{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},"31":{"start":{"line":82,"column":6},"end":{"line":82,"column":38}},"32":{"start":{"line":90,"column":4},"end":{"line":94,"column":5}},"33":{"start":{"line":91,"column":6},"end":{"line":91,"column":88}},"34":{"start":{"line":93,"column":6},"end":{"line":93,"column":21}},"35":{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},"36":{"start":{"line":98,"column":6},"end":{"line":98,"column":17}},"37":{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},"38":{"start":{"line":99,"column":20},"end":{"line":99,"column":35}},"39":{"start":{"line":100,"column":6},"end":{"line":100,"column":13}},"40":{"start":{"line":103,"column":4},"end":{"line":103,"column":43}},"41":{"start":{"line":106,"column":2},"end":{"line":106,"column":24}},"42":{"start":{"line":117,"column":0},"end":{"line":166,"column":2}},"43":{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},"44":{"start":{"line":119,"column":18},"end":{"line":119,"column":51}},"45":{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},"46":{"start":{"line":121,"column":6},"end":{"line":121,"column":28}},"47":{"start":{"line":127,"column":4},"end":{"line":127,"column":38}},"48":{"start":{"line":130,"column":2},"end":{"line":163,"column":3}},"49":{"start":{"line":130,"column":15},"end":{"line":130,"column":16}},"50":{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},"51":{"start":{"line":131,"column":34},"end":{"line":131,"column":43}},"52":{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},"53":{"start":{"line":134,"column":6},"end":{"line":134,"column":52}},"54":{"start":{"line":135,"column":6},"end":{"line":135,"column":15}},"55":{"start":{"line":143,"column":4},"end":{"line":150,"column":5}},"56":{"start":{"line":144,"column":6},"end":{"line":147,"column":8}},"57":{"start":{"line":149,"column":6},"end":{"line":149,"column":21}},"58":{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},"59":{"start":{"line":154,"column":6},"end":{"line":154,"column":27}},"60":{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},"61":{"start":{"line":157,"column":8},"end":{"line":157,"column":23}},"62":{"start":{"line":158,"column":8},"end":{"line":158,"column":23}},"63":{"start":{"line":161,"column":6},"end":{"line":161,"column":48}},"64":{"start":{"line":165,"column":2},"end":{"line":165,"column":24}},"65":{"start":{"line":177,"column":0},"end":{"line":202,"column":2}},"66":{"start":{"line":178,"column":15},"end":{"line":178,"column":26}},"67":{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},"68":{"start":{"line":180,"column":4},"end":{"line":180,"column":17}},"69":{"start":{"line":185,"column":16},"end":{"line":185,"column":64}},"70":{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},"71":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"72":{"start":{"line":197,"column":6},"end":{"line":197,"column":18}},"73":{"start":{"line":201,"column":2},"end":{"line":201,"column":15}},"74":{"start":{"line":208,"column":0},"end":{"line":211,"column":2}},"75":{"start":{"line":210,"column":2},"end":{"line":210,"column":24}},"76":{"start":{"line":215,"column":0},"end":{"line":215,"column":59}}},"fnMap":{"0":{"name":"TransportStream","decl":{"start":{"line":18,"column":50},"end":{"line":18,"column":65}},"loc":{"start":{"line":18,"column":80},"end":{"line":54,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":32,"column":20},"end":{"line":32,"column":21}},"loc":{"start":{"line":32,"column":30},"end":{"line":39,"column":3}},"line":32},"2":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":22},"end":{"line":42,"column":23}},"loc":{"start":{"line":42,"column":29},"end":{"line":53,"column":3}},"line":42},"3":{"name":"_write","decl":{"start":{"line":69,"column":44},"end":{"line":69,"column":50}},"loc":{"start":{"line":69,"column":72},"end":{"line":107,"column":1}},"line":69},"4":{"name":"_writev","decl":{"start":{"line":117,"column":45},"end":{"line":117,"column":52}},"loc":{"start":{"line":117,"column":71},"end":{"line":166,"column":1}},"line":117},"5":{"name":"_accept","decl":{"start":{"line":177,"column":45},"end":{"line":177,"column":52}},"loc":{"start":{"line":177,"column":60},"end":{"line":202,"column":1}},"line":177},"6":{"name":"_nop","decl":{"start":{"line":208,"column":42},"end":{"line":208,"column":46}},"loc":{"start":{"line":208,"column":49},"end":{"line":211,"column":1}},"line":208}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":66},"end":{"line":18,"column":78}},"type":"default-arg","locations":[{"start":{"line":18,"column":76},"end":{"line":18,"column":78}}],"line":18},"1":{"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},{"start":{"line":27,"column":2},"end":{"line":27,"column":42}}],"line":27},"2":{"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},{"start":{"line":28,"column":2},"end":{"line":28,"column":45}}],"line":28},"3":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"4":{"loc":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},{"start":{"line":47,"column":4},"end":{"line":52,"column":5}}],"line":47},"5":{"loc":{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},"type":"if","locations":[{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},{"start":{"line":49,"column":6},"end":{"line":51,"column":7}}],"line":49},"6":{"loc":{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},{"start":{"line":70,"column":2},"end":{"line":72,"column":3}}],"line":70},"7":{"loc":{"start":{"line":70,"column":6},"end":{"line":70,"column":72}},"type":"binary-expr","locations":[{"start":{"line":70,"column":6},"end":{"line":70,"column":17}},{"start":{"line":70,"column":22},"end":{"line":70,"column":45}},{"start":{"line":70,"column":49},"end":{"line":70,"column":71}}],"line":70},"8":{"loc":{"start":{"line":78,"column":16},"end":{"line":78,"column":64}},"type":"binary-expr","locations":[{"start":{"line":78,"column":16},"end":{"line":78,"column":26}},{"start":{"line":78,"column":31},"end":{"line":78,"column":42}},{"start":{"line":78,"column":46},"end":{"line":78,"column":63}}],"line":78},"9":{"loc":{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},"type":"if","locations":[{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},{"start":{"line":80,"column":2},"end":{"line":104,"column":3}}],"line":80},"10":{"loc":{"start":{"line":80,"column":6},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":6},"end":{"line":80,"column":12}},{"start":{"line":80,"column":16},"end":{"line":80,"column":62}}],"line":80},"11":{"loc":{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},{"start":{"line":81,"column":4},"end":{"line":83,"column":5}}],"line":81},"12":{"loc":{"start":{"line":81,"column":8},"end":{"line":81,"column":28}},"type":"binary-expr","locations":[{"start":{"line":81,"column":8},"end":{"line":81,"column":12}},{"start":{"line":81,"column":16},"end":{"line":81,"column":28}}],"line":81},"13":{"loc":{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},{"start":{"line":96,"column":4},"end":{"line":101,"column":5}}],"line":96},"14":{"loc":{"start":{"line":96,"column":8},"end":{"line":96,"column":32}},"type":"binary-expr","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":16}},{"start":{"line":96,"column":20},"end":{"line":96,"column":32}}],"line":96},"15":{"loc":{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},"type":"if","locations":[{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},{"start":{"line":99,"column":6},"end":{"line":99,"column":35}}],"line":99},"16":{"loc":{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},"type":"if","locations":[{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},{"start":{"line":118,"column":2},"end":{"line":128,"column":3}}],"line":118},"17":{"loc":{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},{"start":{"line":120,"column":4},"end":{"line":122,"column":5}}],"line":120},"18":{"loc":{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},{"start":{"line":131,"column":4},"end":{"line":131,"column":43}}],"line":131},"19":{"loc":{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},"type":"if","locations":[{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},{"start":{"line":133,"column":4},"end":{"line":136,"column":5}}],"line":133},"20":{"loc":{"start":{"line":133,"column":8},"end":{"line":133,"column":39}},"type":"binary-expr","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":23}},{"start":{"line":133,"column":27},"end":{"line":133,"column":39}}],"line":133},"21":{"loc":{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},"type":"if","locations":[{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},{"start":{"line":152,"column":4},"end":{"line":162,"column":5}}],"line":152},"22":{"loc":{"start":{"line":152,"column":8},"end":{"line":152,"column":32}},"type":"binary-expr","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":16}},{"start":{"line":152,"column":20},"end":{"line":152,"column":32}}],"line":152},"23":{"loc":{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},"type":"if","locations":[{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},{"start":{"line":155,"column":6},"end":{"line":159,"column":7}}],"line":155},"24":{"loc":{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},"type":"if","locations":[{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},{"start":{"line":179,"column":2},"end":{"line":181,"column":3}}],"line":179},"25":{"loc":{"start":{"line":185,"column":16},"end":{"line":185,"column":64}},"type":"binary-expr","locations":[{"start":{"line":185,"column":16},"end":{"line":185,"column":26}},{"start":{"line":185,"column":31},"end":{"line":185,"column":42}},{"start":{"line":185,"column":46},"end":{"line":185,"column":63}}],"line":185},"26":{"loc":{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},"type":"if","locations":[{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},{"start":{"line":188,"column":2},"end":{"line":199,"column":3}}],"line":188},"27":{"loc":{"start":{"line":189,"column":4},"end":{"line":191,"column":50}},"type":"binary-expr","locations":[{"start":{"line":189,"column":4},"end":{"line":189,"column":27}},{"start":{"line":190,"column":4},"end":{"line":190,"column":10}},{"start":{"line":191,"column":4},"end":{"line":191,"column":50}}],"line":189},"28":{"loc":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},{"start":{"line":196,"column":4},"end":{"line":198,"column":5}}],"line":196},"29":{"loc":{"start":{"line":196,"column":8},"end":{"line":196,"column":56}},"type":"binary-expr","locations":[{"start":{"line":196,"column":8},"end":{"line":196,"column":29}},{"start":{"line":196,"column":33},"end":{"line":196,"column":56}}],"line":196}},"s":{"0":1,"1":1,"2":1,"3":1,"4":51,"5":51,"6":51,"7":51,"8":51,"9":51,"10":51,"11":22,"12":51,"13":1,"14":51,"15":0,"16":51,"17":5,"18":5,"19":51,"20":2,"21":2,"22":2,"23":1,"24":1,"25":1,"26":49,"27":10,"28":39,"29":39,"30":33,"31":20,"32":13,"33":13,"34":1,"35":13,"36":8,"37":8,"38":1,"39":7,"40":5,"41":6,"42":1,"43":6,"44":1,"45":1,"46":0,"47":1,"48":5,"49":5,"50":584,"51":15,"52":569,"53":400,"54":400,"55":169,"56":169,"57":1,"58":169,"59":8,"60":8,"61":1,"62":1,"63":161,"64":4,"65":1,"66":1425,"67":1425,"68":32,"69":1393,"70":1393,"71":1240,"72":1232,"73":161,"74":1,"75":416,"76":1},"f":{"0":51,"1":5,"2":2,"3":49,"4":6,"5":1425,"6":416},"b":{"0":[1],"1":[22,29],"2":[1,50],"3":[0,51],"4":[2,0],"5":[1,1],"6":[10,39],"7":[49,48,10],"8":[39,29,4],"9":[33,6],"10":[39,14],"11":[20,13],"12":[33,33],"13":[8,5],"14":[13,12],"15":[1,7],"16":[1,5],"17":[0,1],"18":[15,569],"19":[400,169],"20":[569,569],"21":[8,161],"22":[169,168],"23":[1,7],"24":[32,1393],"25":[1393,969,0],"26":[1240,153],"27":[1393,1377,408],"28":[1232,8],"29":[1240,1232]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a85d7d4cbe3ecd07d2a6541af717c353a56e5329","contentHash":"e10b7db1276ab5d64f307ec419edb576b7dbf449aa7e62ac6e42cce22e9c72a4"},"/home/dabh/winston-transport/legacy.js":{"path":"/home/dabh/winston-transport/legacy.js","statementMap":{"0":{"start":{"line":3,"column":13},"end":{"line":3,"column":28}},"1":{"start":{"line":4,"column":18},"end":{"line":4,"column":40}},"2":{"start":{"line":5,"column":24},"end":{"line":5,"column":37}},"3":{"start":{"line":15,"column":30},"end":{"line":39,"column":1}},"4":{"start":{"line":16,"column":2},"end":{"line":16,"column":38}},"5":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"6":{"start":{"line":18,"column":4},"end":{"line":18,"column":79}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":37}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":53}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":86}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"11":{"start":{"line":32,"column":4},"end":{"line":32,"column":44}},"12":{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},"13":{"start":{"line":36,"column":4},"end":{"line":36,"column":62}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":62}},"15":{"start":{"line":44,"column":0},"end":{"line":44,"column":54}},"16":{"start":{"line":54,"column":0},"end":{"line":66,"column":2}},"17":{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},"18":{"start":{"line":56,"column":4},"end":{"line":56,"column":26}},"19":{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},"20":{"start":{"line":62,"column":4},"end":{"line":62,"column":67}},"21":{"start":{"line":65,"column":2},"end":{"line":65,"column":17}},"22":{"start":{"line":76,"column":0},"end":{"line":90,"column":2}},"23":{"start":{"line":77,"column":2},"end":{"line":87,"column":3}},"24":{"start":{"line":77,"column":15},"end":{"line":77,"column":16}},"25":{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},"26":{"start":{"line":79,"column":6},"end":{"line":84,"column":8}},"27":{"start":{"line":85,"column":6},"end":{"line":85,"column":27}},"28":{"start":{"line":89,"column":2},"end":{"line":89,"column":24}},"29":{"start":{"line":97,"column":0},"end":{"line":103,"column":2}},"30":{"start":{"line":99,"column":2},"end":{"line":102,"column":16}},"31":{"start":{"line":110,"column":0},"end":{"line":119,"column":2}},"32":{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},"33":{"start":{"line":112,"column":4},"end":{"line":112,"column":27}},"34":{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},"35":{"start":{"line":116,"column":4},"end":{"line":116,"column":74}},"36":{"start":{"line":117,"column":4},"end":{"line":117,"column":41}}},"fnMap":{"0":{"name":"LegacyTransportStream","decl":{"start":{"line":15,"column":56},"end":{"line":15,"column":77}},"loc":{"start":{"line":15,"column":92},"end":{"line":39,"column":1}},"line":15},"1":{"name":"transportError","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":25}},"loc":{"start":{"line":31,"column":31},"end":{"line":33,"column":3}},"line":31},"2":{"name":"_write","decl":{"start":{"line":54,"column":50},"end":{"line":54,"column":56}},"loc":{"start":{"line":54,"column":78},"end":{"line":66,"column":1}},"line":54},"3":{"name":"_writev","decl":{"start":{"line":76,"column":51},"end":{"line":76,"column":58}},"loc":{"start":{"line":76,"column":77},"end":{"line":90,"column":1}},"line":76},"4":{"name":"_deprecated","decl":{"start":{"line":97,"column":55},"end":{"line":97,"column":66}},"loc":{"start":{"line":97,"column":69},"end":{"line":103,"column":1}},"line":97},"5":{"name":"close","decl":{"start":{"line":110,"column":49},"end":{"line":110,"column":54}},"loc":{"start":{"line":110,"column":57},"end":{"line":119,"column":1}},"line":110}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":78},"end":{"line":15,"column":90}},"type":"default-arg","locations":[{"start":{"line":15,"column":88},"end":{"line":15,"column":90}}],"line":15},"1":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"2":{"loc":{"start":{"line":17,"column":6},"end":{"line":17,"column":71}},"type":"binary-expr","locations":[{"start":{"line":17,"column":6},"end":{"line":17,"column":24}},{"start":{"line":17,"column":28},"end":{"line":17,"column":71}}],"line":17},"3":{"loc":{"start":{"line":22,"column":15},"end":{"line":22,"column":52}},"type":"binary-expr","locations":[{"start":{"line":22,"column":15},"end":{"line":22,"column":25}},{"start":{"line":22,"column":29},"end":{"line":22,"column":52}}],"line":22},"4":{"loc":{"start":{"line":23,"column":26},"end":{"line":23,"column":85}},"type":"binary-expr","locations":[{"start":{"line":23,"column":26},"end":{"line":23,"column":47}},{"start":{"line":23,"column":51},"end":{"line":23,"column":85}}],"line":23},"5":{"loc":{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},{"start":{"line":35,"column":2},"end":{"line":38,"column":3}}],"line":35},"6":{"loc":{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},{"start":{"line":55,"column":2},"end":{"line":57,"column":3}}],"line":55},"7":{"loc":{"start":{"line":55,"column":6},"end":{"line":55,"column":72}},"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":22},"end":{"line":55,"column":45}},{"start":{"line":55,"column":49},"end":{"line":55,"column":71}}],"line":55},"8":{"loc":{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},"type":"if","locations":[{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},{"start":{"line":61,"column":2},"end":{"line":63,"column":3}}],"line":61},"9":{"loc":{"start":{"line":61,"column":6},"end":{"line":61,"column":72}},"type":"binary-expr","locations":[{"start":{"line":61,"column":6},"end":{"line":61,"column":17}},{"start":{"line":61,"column":21},"end":{"line":61,"column":72}}],"line":61},"10":{"loc":{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},{"start":{"line":78,"column":4},"end":{"line":86,"column":5}}],"line":78},"11":{"loc":{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},{"start":{"line":111,"column":2},"end":{"line":113,"column":3}}],"line":111},"12":{"loc":{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},"type":"if","locations":[{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},{"start":{"line":115,"column":2},"end":{"line":118,"column":3}}],"line":115}},"s":{"0":1,"1":1,"2":1,"3":1,"4":23,"5":23,"6":2,"7":21,"8":21,"9":21,"10":21,"11":1,"12":21,"13":18,"14":18,"15":1,"16":1,"17":29,"18":10,"19":19,"20":16,"21":19,"22":1,"23":2,"24":2,"25":415,"26":400,"27":400,"28":2,"29":1,"30":1,"31":1,"32":2,"33":2,"34":2,"35":2,"36":2},"f":{"0":23,"1":1,"2":29,"3":2,"4":1,"5":2},"b":{"0":[2],"1":[2,21],"2":[23,21],"3":[21,19],"4":[21,20],"5":[18,3],"6":[10,19],"7":[29,28,10],"8":[16,3],"9":[19,8],"10":[400,15],"11":[2,0],"12":[2,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"74c6fb144cc5b67d716fb0ae982125dceb920513","contentHash":"517957434acef870444e5fff09c471fe325ea34ebf5b2de92bfc012f10b13270"}} \ No newline at end of file diff --git a/build/node_modules/winston-transport/.nyc_output/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json b/build/node_modules/winston-transport/.nyc_output/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json new file mode 100644 index 00000000..6e552cbb --- /dev/null +++ b/build/node_modules/winston-transport/.nyc_output/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json @@ -0,0 +1 @@ +{"/Users/David/winston-transport/index.js":{"path":"/Users/David/winston-transport/index.js","statementMap":{"0":{"start":{"line":3,"column":13},"end":{"line":3,"column":28}},"1":{"start":{"line":4,"column":17},"end":{"line":4,"column":67}},"2":{"start":{"line":5,"column":18},"end":{"line":5,"column":40}},"3":{"start":{"line":18,"column":24},"end":{"line":54,"column":1}},"4":{"start":{"line":19,"column":2},"end":{"line":19,"column":82}},"5":{"start":{"line":21,"column":2},"end":{"line":21,"column":31}},"6":{"start":{"line":22,"column":2},"end":{"line":22,"column":29}},"7":{"start":{"line":23,"column":2},"end":{"line":23,"column":51}},"8":{"start":{"line":24,"column":2},"end":{"line":24,"column":51}},"9":{"start":{"line":25,"column":2},"end":{"line":25,"column":31}},"10":{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},"11":{"start":{"line":27,"column":19},"end":{"line":27,"column":42}},"12":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"13":{"start":{"line":28,"column":20},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"15":{"start":{"line":29,"column":21},"end":{"line":29,"column":48}},"16":{"start":{"line":32,"column":2},"end":{"line":39,"column":5}},"17":{"start":{"line":37,"column":4},"end":{"line":37,"column":32}},"18":{"start":{"line":38,"column":4},"end":{"line":38,"column":25}},"19":{"start":{"line":42,"column":2},"end":{"line":53,"column":5}},"20":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"21":{"start":{"line":48,"column":6},"end":{"line":48,"column":25}},"22":{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},"23":{"start":{"line":50,"column":8},"end":{"line":50,"column":21}},"24":{"start":{"line":59,"column":0},"end":{"line":59,"column":41}},"25":{"start":{"line":69,"column":0},"end":{"line":107,"column":2}},"26":{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},"27":{"start":{"line":71,"column":4},"end":{"line":71,"column":26}},"28":{"start":{"line":78,"column":16},"end":{"line":78,"column":64}},"29":{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},"30":{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},"31":{"start":{"line":82,"column":6},"end":{"line":82,"column":38}},"32":{"start":{"line":90,"column":4},"end":{"line":94,"column":5}},"33":{"start":{"line":91,"column":6},"end":{"line":91,"column":88}},"34":{"start":{"line":93,"column":6},"end":{"line":93,"column":21}},"35":{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},"36":{"start":{"line":98,"column":6},"end":{"line":98,"column":17}},"37":{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},"38":{"start":{"line":99,"column":20},"end":{"line":99,"column":35}},"39":{"start":{"line":100,"column":6},"end":{"line":100,"column":13}},"40":{"start":{"line":103,"column":4},"end":{"line":103,"column":43}},"41":{"start":{"line":105,"column":2},"end":{"line":105,"column":35}},"42":{"start":{"line":106,"column":2},"end":{"line":106,"column":24}},"43":{"start":{"line":117,"column":0},"end":{"line":166,"column":2}},"44":{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},"45":{"start":{"line":119,"column":18},"end":{"line":119,"column":51}},"46":{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},"47":{"start":{"line":121,"column":6},"end":{"line":121,"column":28}},"48":{"start":{"line":127,"column":4},"end":{"line":127,"column":38}},"49":{"start":{"line":130,"column":2},"end":{"line":163,"column":3}},"50":{"start":{"line":130,"column":15},"end":{"line":130,"column":16}},"51":{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},"52":{"start":{"line":131,"column":34},"end":{"line":131,"column":43}},"53":{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},"54":{"start":{"line":134,"column":6},"end":{"line":134,"column":52}},"55":{"start":{"line":135,"column":6},"end":{"line":135,"column":15}},"56":{"start":{"line":143,"column":4},"end":{"line":150,"column":5}},"57":{"start":{"line":144,"column":6},"end":{"line":147,"column":8}},"58":{"start":{"line":149,"column":6},"end":{"line":149,"column":21}},"59":{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},"60":{"start":{"line":154,"column":6},"end":{"line":154,"column":27}},"61":{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},"62":{"start":{"line":157,"column":8},"end":{"line":157,"column":23}},"63":{"start":{"line":158,"column":8},"end":{"line":158,"column":23}},"64":{"start":{"line":161,"column":6},"end":{"line":161,"column":48}},"65":{"start":{"line":165,"column":2},"end":{"line":165,"column":24}},"66":{"start":{"line":177,"column":0},"end":{"line":202,"column":2}},"67":{"start":{"line":178,"column":15},"end":{"line":178,"column":26}},"68":{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},"69":{"start":{"line":180,"column":4},"end":{"line":180,"column":17}},"70":{"start":{"line":185,"column":16},"end":{"line":185,"column":64}},"71":{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},"72":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"73":{"start":{"line":197,"column":6},"end":{"line":197,"column":18}},"74":{"start":{"line":201,"column":2},"end":{"line":201,"column":15}},"75":{"start":{"line":208,"column":0},"end":{"line":211,"column":2}},"76":{"start":{"line":210,"column":2},"end":{"line":210,"column":24}},"77":{"start":{"line":215,"column":0},"end":{"line":215,"column":59}}},"fnMap":{"0":{"name":"TransportStream","decl":{"start":{"line":18,"column":50},"end":{"line":18,"column":65}},"loc":{"start":{"line":18,"column":80},"end":{"line":54,"column":1}},"line":18},"1":{"name":"(anonymous_1)","decl":{"start":{"line":32,"column":20},"end":{"line":32,"column":21}},"loc":{"start":{"line":32,"column":30},"end":{"line":39,"column":3}},"line":32},"2":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":22},"end":{"line":42,"column":23}},"loc":{"start":{"line":42,"column":29},"end":{"line":53,"column":3}},"line":42},"3":{"name":"_write","decl":{"start":{"line":69,"column":44},"end":{"line":69,"column":50}},"loc":{"start":{"line":69,"column":72},"end":{"line":107,"column":1}},"line":69},"4":{"name":"_writev","decl":{"start":{"line":117,"column":45},"end":{"line":117,"column":52}},"loc":{"start":{"line":117,"column":71},"end":{"line":166,"column":1}},"line":117},"5":{"name":"_accept","decl":{"start":{"line":177,"column":45},"end":{"line":177,"column":52}},"loc":{"start":{"line":177,"column":60},"end":{"line":202,"column":1}},"line":177},"6":{"name":"_nop","decl":{"start":{"line":208,"column":42},"end":{"line":208,"column":46}},"loc":{"start":{"line":208,"column":49},"end":{"line":211,"column":1}},"line":208}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":66},"end":{"line":18,"column":78}},"type":"default-arg","locations":[{"start":{"line":18,"column":76},"end":{"line":18,"column":78}}],"line":18},"1":{"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":27,"column":42}},{"start":{"line":27,"column":2},"end":{"line":27,"column":42}}],"line":27},"2":{"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},"type":"if","locations":[{"start":{"line":28,"column":2},"end":{"line":28,"column":45}},{"start":{"line":28,"column":2},"end":{"line":28,"column":45}}],"line":28},"3":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":48}},{"start":{"line":29,"column":2},"end":{"line":29,"column":48}}],"line":29},"4":{"loc":{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":52,"column":5}},{"start":{"line":47,"column":4},"end":{"line":52,"column":5}}],"line":47},"5":{"loc":{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},"type":"if","locations":[{"start":{"line":49,"column":6},"end":{"line":51,"column":7}},{"start":{"line":49,"column":6},"end":{"line":51,"column":7}}],"line":49},"6":{"loc":{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":72,"column":3}},{"start":{"line":70,"column":2},"end":{"line":72,"column":3}}],"line":70},"7":{"loc":{"start":{"line":70,"column":6},"end":{"line":70,"column":72}},"type":"binary-expr","locations":[{"start":{"line":70,"column":6},"end":{"line":70,"column":17}},{"start":{"line":70,"column":22},"end":{"line":70,"column":45}},{"start":{"line":70,"column":49},"end":{"line":70,"column":71}}],"line":70},"8":{"loc":{"start":{"line":78,"column":16},"end":{"line":78,"column":64}},"type":"binary-expr","locations":[{"start":{"line":78,"column":16},"end":{"line":78,"column":26}},{"start":{"line":78,"column":31},"end":{"line":78,"column":42}},{"start":{"line":78,"column":46},"end":{"line":78,"column":63}}],"line":78},"9":{"loc":{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},"type":"if","locations":[{"start":{"line":80,"column":2},"end":{"line":104,"column":3}},{"start":{"line":80,"column":2},"end":{"line":104,"column":3}}],"line":80},"10":{"loc":{"start":{"line":80,"column":6},"end":{"line":80,"column":62}},"type":"binary-expr","locations":[{"start":{"line":80,"column":6},"end":{"line":80,"column":12}},{"start":{"line":80,"column":16},"end":{"line":80,"column":62}}],"line":80},"11":{"loc":{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":83,"column":5}},{"start":{"line":81,"column":4},"end":{"line":83,"column":5}}],"line":81},"12":{"loc":{"start":{"line":81,"column":8},"end":{"line":81,"column":28}},"type":"binary-expr","locations":[{"start":{"line":81,"column":8},"end":{"line":81,"column":12}},{"start":{"line":81,"column":16},"end":{"line":81,"column":28}}],"line":81},"13":{"loc":{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},"type":"if","locations":[{"start":{"line":96,"column":4},"end":{"line":101,"column":5}},{"start":{"line":96,"column":4},"end":{"line":101,"column":5}}],"line":96},"14":{"loc":{"start":{"line":96,"column":8},"end":{"line":96,"column":32}},"type":"binary-expr","locations":[{"start":{"line":96,"column":8},"end":{"line":96,"column":16}},{"start":{"line":96,"column":20},"end":{"line":96,"column":32}}],"line":96},"15":{"loc":{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},"type":"if","locations":[{"start":{"line":99,"column":6},"end":{"line":99,"column":35}},{"start":{"line":99,"column":6},"end":{"line":99,"column":35}}],"line":99},"16":{"loc":{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},"type":"if","locations":[{"start":{"line":118,"column":2},"end":{"line":128,"column":3}},{"start":{"line":118,"column":2},"end":{"line":128,"column":3}}],"line":118},"17":{"loc":{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":122,"column":5}},{"start":{"line":120,"column":4},"end":{"line":122,"column":5}}],"line":120},"18":{"loc":{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},"type":"if","locations":[{"start":{"line":131,"column":4},"end":{"line":131,"column":43}},{"start":{"line":131,"column":4},"end":{"line":131,"column":43}}],"line":131},"19":{"loc":{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},"type":"if","locations":[{"start":{"line":133,"column":4},"end":{"line":136,"column":5}},{"start":{"line":133,"column":4},"end":{"line":136,"column":5}}],"line":133},"20":{"loc":{"start":{"line":133,"column":8},"end":{"line":133,"column":39}},"type":"binary-expr","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":23}},{"start":{"line":133,"column":27},"end":{"line":133,"column":39}}],"line":133},"21":{"loc":{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},"type":"if","locations":[{"start":{"line":152,"column":4},"end":{"line":162,"column":5}},{"start":{"line":152,"column":4},"end":{"line":162,"column":5}}],"line":152},"22":{"loc":{"start":{"line":152,"column":8},"end":{"line":152,"column":32}},"type":"binary-expr","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":16}},{"start":{"line":152,"column":20},"end":{"line":152,"column":32}}],"line":152},"23":{"loc":{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},"type":"if","locations":[{"start":{"line":155,"column":6},"end":{"line":159,"column":7}},{"start":{"line":155,"column":6},"end":{"line":159,"column":7}}],"line":155},"24":{"loc":{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},"type":"if","locations":[{"start":{"line":179,"column":2},"end":{"line":181,"column":3}},{"start":{"line":179,"column":2},"end":{"line":181,"column":3}}],"line":179},"25":{"loc":{"start":{"line":185,"column":16},"end":{"line":185,"column":64}},"type":"binary-expr","locations":[{"start":{"line":185,"column":16},"end":{"line":185,"column":26}},{"start":{"line":185,"column":31},"end":{"line":185,"column":42}},{"start":{"line":185,"column":46},"end":{"line":185,"column":63}}],"line":185},"26":{"loc":{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},"type":"if","locations":[{"start":{"line":188,"column":2},"end":{"line":199,"column":3}},{"start":{"line":188,"column":2},"end":{"line":199,"column":3}}],"line":188},"27":{"loc":{"start":{"line":189,"column":4},"end":{"line":191,"column":50}},"type":"binary-expr","locations":[{"start":{"line":189,"column":4},"end":{"line":189,"column":27}},{"start":{"line":190,"column":4},"end":{"line":190,"column":10}},{"start":{"line":191,"column":4},"end":{"line":191,"column":50}}],"line":189},"28":{"loc":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},{"start":{"line":196,"column":4},"end":{"line":198,"column":5}}],"line":196},"29":{"loc":{"start":{"line":196,"column":8},"end":{"line":196,"column":56}},"type":"binary-expr","locations":[{"start":{"line":196,"column":8},"end":{"line":196,"column":29}},{"start":{"line":196,"column":33},"end":{"line":196,"column":56}}],"line":196}},"s":{"0":1,"1":1,"2":1,"3":1,"4":51,"5":51,"6":51,"7":51,"8":51,"9":51,"10":51,"11":22,"12":51,"13":1,"14":51,"15":0,"16":51,"17":5,"18":5,"19":51,"20":2,"21":2,"22":2,"23":1,"24":1,"25":1,"26":49,"27":10,"28":39,"29":39,"30":33,"31":20,"32":13,"33":13,"34":1,"35":13,"36":8,"37":8,"38":1,"39":7,"40":5,"41":6,"42":6,"43":1,"44":6,"45":1,"46":1,"47":0,"48":1,"49":5,"50":5,"51":584,"52":15,"53":569,"54":400,"55":400,"56":169,"57":169,"58":1,"59":169,"60":8,"61":8,"62":1,"63":1,"64":161,"65":4,"66":1,"67":1425,"68":1425,"69":32,"70":1393,"71":1393,"72":1240,"73":1232,"74":161,"75":1,"76":416,"77":1},"f":{"0":51,"1":5,"2":2,"3":49,"4":6,"5":1425,"6":416},"b":{"0":[1],"1":[22,29],"2":[1,50],"3":[0,51],"4":[2,0],"5":[1,1],"6":[10,39],"7":[49,48,10],"8":[39,29,4],"9":[33,6],"10":[39,14],"11":[20,13],"12":[33,33],"13":[8,5],"14":[13,12],"15":[1,7],"16":[1,5],"17":[0,1],"18":[15,569],"19":[400,169],"20":[569,569],"21":[8,161],"22":[169,168],"23":[1,7],"24":[32,1393],"25":[1393,969,0],"26":[1240,153],"27":[1393,1377,408],"28":[1232,8],"29":[1240,1232]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"651a16831e5e6c4d31e28a9c86a4c5ea5a975e43","contentHash":"dc285c71c38b7cfbfbd3cffe4137191f1ab818e457e1535aab143981ef4af66d"},"/Users/David/winston-transport/legacy.js":{"path":"/Users/David/winston-transport/legacy.js","statementMap":{"0":{"start":{"line":3,"column":13},"end":{"line":3,"column":28}},"1":{"start":{"line":4,"column":18},"end":{"line":4,"column":40}},"2":{"start":{"line":5,"column":24},"end":{"line":5,"column":37}},"3":{"start":{"line":15,"column":30},"end":{"line":39,"column":1}},"4":{"start":{"line":16,"column":2},"end":{"line":16,"column":38}},"5":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"6":{"start":{"line":18,"column":4},"end":{"line":18,"column":79}},"7":{"start":{"line":21,"column":2},"end":{"line":21,"column":37}},"8":{"start":{"line":22,"column":2},"end":{"line":22,"column":53}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":86}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":21}},"11":{"start":{"line":32,"column":4},"end":{"line":32,"column":44}},"12":{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},"13":{"start":{"line":36,"column":4},"end":{"line":36,"column":62}},"14":{"start":{"line":37,"column":4},"end":{"line":37,"column":62}},"15":{"start":{"line":44,"column":0},"end":{"line":44,"column":54}},"16":{"start":{"line":54,"column":0},"end":{"line":66,"column":2}},"17":{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},"18":{"start":{"line":56,"column":4},"end":{"line":56,"column":26}},"19":{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},"20":{"start":{"line":62,"column":4},"end":{"line":62,"column":67}},"21":{"start":{"line":65,"column":2},"end":{"line":65,"column":17}},"22":{"start":{"line":76,"column":0},"end":{"line":90,"column":2}},"23":{"start":{"line":77,"column":2},"end":{"line":87,"column":3}},"24":{"start":{"line":77,"column":15},"end":{"line":77,"column":16}},"25":{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},"26":{"start":{"line":79,"column":6},"end":{"line":84,"column":8}},"27":{"start":{"line":85,"column":6},"end":{"line":85,"column":27}},"28":{"start":{"line":89,"column":2},"end":{"line":89,"column":24}},"29":{"start":{"line":97,"column":0},"end":{"line":103,"column":2}},"30":{"start":{"line":99,"column":2},"end":{"line":102,"column":16}},"31":{"start":{"line":110,"column":0},"end":{"line":119,"column":2}},"32":{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},"33":{"start":{"line":112,"column":4},"end":{"line":112,"column":27}},"34":{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},"35":{"start":{"line":116,"column":4},"end":{"line":116,"column":74}},"36":{"start":{"line":117,"column":4},"end":{"line":117,"column":41}}},"fnMap":{"0":{"name":"LegacyTransportStream","decl":{"start":{"line":15,"column":56},"end":{"line":15,"column":77}},"loc":{"start":{"line":15,"column":92},"end":{"line":39,"column":1}},"line":15},"1":{"name":"transportError","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":25}},"loc":{"start":{"line":31,"column":31},"end":{"line":33,"column":3}},"line":31},"2":{"name":"_write","decl":{"start":{"line":54,"column":50},"end":{"line":54,"column":56}},"loc":{"start":{"line":54,"column":78},"end":{"line":66,"column":1}},"line":54},"3":{"name":"_writev","decl":{"start":{"line":76,"column":51},"end":{"line":76,"column":58}},"loc":{"start":{"line":76,"column":77},"end":{"line":90,"column":1}},"line":76},"4":{"name":"_deprecated","decl":{"start":{"line":97,"column":55},"end":{"line":97,"column":66}},"loc":{"start":{"line":97,"column":69},"end":{"line":103,"column":1}},"line":97},"5":{"name":"close","decl":{"start":{"line":110,"column":49},"end":{"line":110,"column":54}},"loc":{"start":{"line":110,"column":57},"end":{"line":119,"column":1}},"line":110}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":78},"end":{"line":15,"column":90}},"type":"default-arg","locations":[{"start":{"line":15,"column":88},"end":{"line":15,"column":90}}],"line":15},"1":{"loc":{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":19,"column":3}},{"start":{"line":17,"column":2},"end":{"line":19,"column":3}}],"line":17},"2":{"loc":{"start":{"line":17,"column":6},"end":{"line":17,"column":71}},"type":"binary-expr","locations":[{"start":{"line":17,"column":6},"end":{"line":17,"column":24}},{"start":{"line":17,"column":28},"end":{"line":17,"column":71}}],"line":17},"3":{"loc":{"start":{"line":22,"column":15},"end":{"line":22,"column":52}},"type":"binary-expr","locations":[{"start":{"line":22,"column":15},"end":{"line":22,"column":25}},{"start":{"line":22,"column":29},"end":{"line":22,"column":52}}],"line":22},"4":{"loc":{"start":{"line":23,"column":26},"end":{"line":23,"column":85}},"type":"binary-expr","locations":[{"start":{"line":23,"column":26},"end":{"line":23,"column":47}},{"start":{"line":23,"column":51},"end":{"line":23,"column":85}}],"line":23},"5":{"loc":{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":38,"column":3}},{"start":{"line":35,"column":2},"end":{"line":38,"column":3}}],"line":35},"6":{"loc":{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":57,"column":3}},{"start":{"line":55,"column":2},"end":{"line":57,"column":3}}],"line":55},"7":{"loc":{"start":{"line":55,"column":6},"end":{"line":55,"column":72}},"type":"binary-expr","locations":[{"start":{"line":55,"column":6},"end":{"line":55,"column":17}},{"start":{"line":55,"column":22},"end":{"line":55,"column":45}},{"start":{"line":55,"column":49},"end":{"line":55,"column":71}}],"line":55},"8":{"loc":{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},"type":"if","locations":[{"start":{"line":61,"column":2},"end":{"line":63,"column":3}},{"start":{"line":61,"column":2},"end":{"line":63,"column":3}}],"line":61},"9":{"loc":{"start":{"line":61,"column":6},"end":{"line":61,"column":72}},"type":"binary-expr","locations":[{"start":{"line":61,"column":6},"end":{"line":61,"column":17}},{"start":{"line":61,"column":21},"end":{"line":61,"column":72}}],"line":61},"10":{"loc":{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":86,"column":5}},{"start":{"line":78,"column":4},"end":{"line":86,"column":5}}],"line":78},"11":{"loc":{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},"type":"if","locations":[{"start":{"line":111,"column":2},"end":{"line":113,"column":3}},{"start":{"line":111,"column":2},"end":{"line":113,"column":3}}],"line":111},"12":{"loc":{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},"type":"if","locations":[{"start":{"line":115,"column":2},"end":{"line":118,"column":3}},{"start":{"line":115,"column":2},"end":{"line":118,"column":3}}],"line":115}},"s":{"0":1,"1":1,"2":1,"3":1,"4":23,"5":23,"6":2,"7":21,"8":21,"9":21,"10":21,"11":1,"12":21,"13":18,"14":18,"15":1,"16":1,"17":29,"18":10,"19":19,"20":16,"21":19,"22":1,"23":2,"24":2,"25":415,"26":400,"27":400,"28":2,"29":1,"30":1,"31":1,"32":2,"33":2,"34":2,"35":2,"36":2},"f":{"0":23,"1":1,"2":29,"3":2,"4":1,"5":2},"b":{"0":[2],"1":[2,21],"2":[23,21],"3":[21,19],"4":[21,20],"5":[18,3],"6":[10,19],"7":[29,28,10],"8":[16,3],"9":[19,8],"10":[400,15],"11":[2,0],"12":[2,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ce7431f15ef86d6976e87183f7beb8d8b32939e7","contentHash":"32244661b8dd61e30b4a7ccd7f94fd11686d435135c266a933c6cd3b296b958f"}} \ No newline at end of file diff --git a/build/node_modules/winston-transport/.nyc_output/processinfo/1c69f3e4-4c25-457d-9df5-dfa761729528.json b/build/node_modules/winston-transport/.nyc_output/processinfo/1c69f3e4-4c25-457d-9df5-dfa761729528.json deleted file mode 100644 index 20f41617..00000000 --- a/build/node_modules/winston-transport/.nyc_output/processinfo/1c69f3e4-4c25-457d-9df5-dfa761729528.json +++ /dev/null @@ -1 +0,0 @@ -{"parent":null,"pid":1693914,"argv":["/home/dabh/n/bin/node","/home/dabh/winston-transport/node_modules/.bin/mocha","test/index.test.js","test/inheritance.test.js","test/legacy.test.js"],"execArgv":[],"cwd":"/home/dabh/winston-transport","time":1592727997158,"ppid":1693903,"coverageFilename":"/home/dabh/winston-transport/.nyc_output/1c69f3e4-4c25-457d-9df5-dfa761729528.json","externalId":"","uuid":"1c69f3e4-4c25-457d-9df5-dfa761729528","files":["/home/dabh/winston-transport/index.js","/home/dabh/winston-transport/legacy.js"]} \ No newline at end of file diff --git a/build/node_modules/winston-transport/.nyc_output/processinfo/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json b/build/node_modules/winston-transport/.nyc_output/processinfo/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json new file mode 100644 index 00000000..60a13237 --- /dev/null +++ b/build/node_modules/winston-transport/.nyc_output/processinfo/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json @@ -0,0 +1 @@ +{"parent":null,"pid":70672,"argv":["/Users/David/.nvm/versions/node/v14.19.0/bin/node","/Users/David/winston-transport/node_modules/.bin/mocha","test/index.test.js","test/inheritance.test.js","test/legacy.test.js"],"execArgv":[],"cwd":"/Users/David/winston-transport","time":1644088125255,"ppid":70671,"coverageFilename":"/Users/David/winston-transport/.nyc_output/c3d7ddb9-cc26-466b-a4f6-993ad69e86f6.json","externalId":"","uuid":"c3d7ddb9-cc26-466b-a4f6-993ad69e86f6","files":["/Users/David/winston-transport/index.js","/Users/David/winston-transport/legacy.js"]} \ No newline at end of file diff --git a/build/node_modules/winston-transport/.nyc_output/processinfo/index.json b/build/node_modules/winston-transport/.nyc_output/processinfo/index.json index a4281a60..c2cd5cda 100644 --- a/build/node_modules/winston-transport/.nyc_output/processinfo/index.json +++ b/build/node_modules/winston-transport/.nyc_output/processinfo/index.json @@ -1 +1 @@ -{"processes":{"1c69f3e4-4c25-457d-9df5-dfa761729528":{"parent":null,"children":[]}},"files":{"/home/dabh/winston-transport/index.js":["1c69f3e4-4c25-457d-9df5-dfa761729528"],"/home/dabh/winston-transport/legacy.js":["1c69f3e4-4c25-457d-9df5-dfa761729528"]},"externalIds":{}} \ No newline at end of file +{"processes":{"c3d7ddb9-cc26-466b-a4f6-993ad69e86f6":{"parent":null,"children":[]}},"files":{"/Users/David/winston-transport/index.js":["c3d7ddb9-cc26-466b-a4f6-993ad69e86f6"],"/Users/David/winston-transport/legacy.js":["c3d7ddb9-cc26-466b-a4f6-993ad69e86f6"]},"externalIds":{}} \ No newline at end of file diff --git a/build/node_modules/winston-transport/.travis.yml b/build/node_modules/winston-transport/.travis.yml deleted file mode 100644 index f7e50624..00000000 --- a/build/node_modules/winston-transport/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -sudo: false -language: node_js -node_js: - - "10" - - "12" - - "14" - -before_install: - - travis_retry npm install - -script: - - npm test - -notifications: - email: - - travis@nodejitsu.com - irc: "irc.freenode.org#nodejitsu" diff --git a/build/node_modules/winston-transport/CHANGELOG.md b/build/node_modules/winston-transport/CHANGELOG.md index c99adb4d..a6ef4de2 100644 --- a/build/node_modules/winston-transport/CHANGELOG.md +++ b/build/node_modules/winston-transport/CHANGELOG.md @@ -1,5 +1,16 @@ # CHANGELOG +### 4.5.0 (2022/02/05) + +- [#81] Memory leak fix: do not wait for `process.nextTick` to clear callbacks +- [#87, #82, #67] Update dependencies, CI config, and linter config + +### 4.4.1 (2021/12/14) + +- [#44] Add handleRejections to types. +- [#60] Exclude unnecessary files from npm package +- [#45] [#58] Update dependencies. + ### 4.4.0 (2018/12/23) - [#41] Support handleRejections option. diff --git a/build/node_modules/winston-transport/dist/index.js b/build/node_modules/winston-transport/dist/index.js index 2376a253..fb2ff60b 100644 --- a/build/node_modules/winston-transport/dist/index.js +++ b/build/node_modules/winston-transport/dist/index.js @@ -1,7 +1,7 @@ 'use strict'; var util = require('util'); -var Writable = require('readable-stream/writable'); +var Writable = require('readable-stream/lib/_stream_writable.js'); var _require = require('triple-beam'), LEVEL = _require.LEVEL; @@ -110,7 +110,7 @@ TransportStream.prototype._write = function _write(info, enc, callback) { return this.log(transformed, callback); } - + this._writableState.sync = false; return callback(null); }; diff --git a/build/node_modules/winston-transport/index.d.ts b/build/node_modules/winston-transport/index.d.ts index ca43d6b7..2d844682 100644 --- a/build/node_modules/winston-transport/index.d.ts +++ b/build/node_modules/winston-transport/index.d.ts @@ -13,6 +13,7 @@ declare class TransportStream extends stream.Writable { public level?: string; public silent?: boolean; public handleExceptions?: boolean; + public handleRejections?: boolean; constructor(opts?: TransportStream.TransportStreamOptions); @@ -27,6 +28,7 @@ declare namespace TransportStream { level?: string; silent?: boolean; handleExceptions?: boolean; + handleRejections?: boolean; log?(info: any, next: () => void): any; logv?(info: any, next: () => void): any; diff --git a/build/node_modules/winston-transport/index.js b/build/node_modules/winston-transport/index.js index 46531bd3..59e84210 100644 --- a/build/node_modules/winston-transport/index.js +++ b/build/node_modules/winston-transport/index.js @@ -1,7 +1,7 @@ 'use strict'; const util = require('util'); -const Writable = require('readable-stream/writable'); +const Writable = require('readable-stream/lib/_stream_writable.js'); const { LEVEL } = require('triple-beam'); /** @@ -102,7 +102,7 @@ TransportStream.prototype._write = function _write(info, enc, callback) { return this.log(transformed, callback); } - + this._writableState.sync = false; return callback(null); }; diff --git a/build/node_modules/winston-transport/package.json b/build/node_modules/winston-transport/package.json index 520120f7..a8b11eac 100644 --- a/build/node_modules/winston-transport/package.json +++ b/build/node_modules/winston-transport/package.json @@ -1,26 +1,26 @@ { - "_from": "winston-transport@^4.4.0", - "_id": "winston-transport@4.4.0", + "_from": "winston-transport@^4.5.0", + "_id": "winston-transport@4.5.0", "_inBundle": false, - "_integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "_integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "_location": "/winston-transport", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "winston-transport@^4.4.0", + "raw": "winston-transport@^4.5.0", "name": "winston-transport", "escapedName": "winston-transport", - "rawSpec": "^4.4.0", + "rawSpec": "^4.5.0", "saveSpec": null, - "fetchSpec": "^4.4.0" + "fetchSpec": "^4.5.0" }, "_requiredBy": [ "/winston" ], - "_resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "_shasum": "17af518daa690d5b2ecccaa7acf7b20ca7925e59", - "_spec": "winston-transport@^4.4.0", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/winston-transport/-/winston-transport-4.5.0.tgz", + "_shasum": "6e7b0dd04d393171ed5e4e4905db265f7ab384fa", + "_spec": "winston-transport@^4.5.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", "author": { "name": "Charlie Robbins", @@ -32,20 +32,22 @@ }, "bundleDependencies": false, "dependencies": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" }, "deprecated": false, "description": "Base stream implementations for winston@3 and up.", "devDependencies": { - "@types/node": "^14.0.13", - "abstract-winston-transport": ">= 0.3.0", - "assume": "^2.2.0", + "@dabh/eslint-config-populist": "^5.0.0", + "@types/node": "^17.0.15", + "abstract-winston-transport": ">=0.5.1", + "assume": "^2.3.0", "babel-cli": "^6.26.0", "babel-preset-env": "^1.7.0", - "eslint-config-populist": "^4.2.0", - "logform": "^2.2.0", - "mocha": "^8.0.1", + "deep-equal": "^2.0.5", + "eslint": "^8.8.0", + "mocha": "^9.2.0", "nyc": "^15.1.0", "rimraf": "^3.0.2", "winston-compat": "^0.1.5" @@ -68,11 +70,11 @@ }, "scripts": { "build": "rimraf dist && babel *.js -d ./dist", - "lint": "populist config/*.js index.js", + "lint": "eslint test/*.js index.js --resolve-plugins-relative-to ./node_modules/@dabh/eslint-config-populist", "prepublishOnly": "npm run build", "pretest": "npm run lint && npm run build", "report": "nyc report --reporter=lcov", "test": "nyc mocha test/*.test.js" }, - "version": "4.4.0" + "version": "4.5.0" } diff --git a/build/node_modules/winston-transport/tsconfig.json b/build/node_modules/winston-transport/tsconfig.json deleted file mode 100644 index 0afc8931..00000000 --- a/build/node_modules/winston-transport/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "lib": [ - "es6" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "baseUrl": "./", - "typeRoots": [ - "./node_modules/@types", - "./node_modules" - ], - "types": ["node", "logform"], - "noEmit": true, - "forceConsistentCasingInFileNames": true - }, - "files": [ - "index.d.ts" - ] -} diff --git a/build/node_modules/winston/CHANGELOG.md b/build/node_modules/winston/CHANGELOG.md deleted file mode 100644 index 828e0c77..00000000 --- a/build/node_modules/winston/CHANGELOG.md +++ /dev/null @@ -1,560 +0,0 @@ -# CHANGELOG - -## v3.3.3 / 2020-06-23 - -- [#1820] Revert [#1807] to resolve breaking changes for Typescript users. - -## v3.3.2 / 2020-06-22 - -- [#1814] Use a fork of `diagnostics` published to NPM to avoid git dependency. - -## v3.3.1 / 2020-06-21 - -- [#1803], [#1807] Fix TypeScript bugs. -- [#1740] Add space between `info.message` and `meta.message`. -- [#1813] Avoid indirect storage-engine dependency. -- [#1810] README updates. - -## v3.3.0 / 2020-06-21 - -- [#1779] Fix property name in rejection handler. -- [#1768] Exclude extraneous files from NPM package. -- [#1364], [#1714] Don't remove transport from logger when transport error - occurs. -- [#1603] Expose `child` property on default logger. -- [#1777] Allow HTTP transport to pass options to request. -- [#1662] Add bearer auth capabilities to HTTP transport. -- [#1612] Remove no-op in file transport. -- [#1622], [#1623], [#1625] Typescript fixes. -- (Minor) [#1647], [#1793] Update CI settings. -- (Minor) [#1600], [#1605], [#1593], [#1610], [#1654], [#1656], [#1661], - [#1651], [#1652], [#1677], [#1683], [#1684], [#1700], [#1697], [#1650], - [#1705], [#1723], [#1737], [#1733], [#1743], [#1750], [#1754], [#1780], - [#1778] README, Transports.md, other docs changes. -- [#1672], [#1686], [#1772] Update dependencies. - -## v3.2.1 / 2019-01-29 -### UNBOUND PROTOTYPE AD INFINITUM EDITION - -- #[1579], (@indexzero) Fallback to the "root" instance **always** created by - `createLogger` for level convenience methods (e.g. `.info()`, `.silly()`). - (Fixes [#1577]). -- [#1539], (@indexzero) Assume message is the empty string when level-helper - methods are invoked with no arguments (Fixed [#1501]). -- [#1583], (@kibertoad) Add typings for defaultMeta (Fixes [#1582]) -- [#1586], (@kibertoad) Update dependencies. - -## v3.2.0 / 2019-01-26 -### SORRY IT TOO SO LONG EDITION - -> **NOTE:** this was our first release using Github Projects. See the -> [3.2.0 Release Project](https://github.com/orgs/winstonjs/projects/3). - -### New Features! - -- [#1471], (@kibertoad) Implement child loggers. -- [#1462], (@drazisil) Add handleRejection support. - - [#1555], (@DABH) Add fixes from [#1355] to unhandled rejection handler. -- [#1418], (@mfrisbey) Precompile ES6 syntax before publishing to npm. - - [#1533], (@kibertoad) Update to Babel 7. -- [#1562], (@indexzero) [fix] Better handling of `new Error(string)` - throughout the pipeline(s). (Fixes [#1338], [#1486]). - -### Bug Fixes - -- [#1355], (@DABH) Fix issues with ExceptionHandler (Fixes [#1289]). -- [#1463], (@SerayaEryn) Bubble transport `warn` events up to logger in - addition to `error`s. -- [#1480], [#1503], (@SerayaEryn) File tailrolling fix. -- [#1483], (@soldair) Assign log levels to un-bound functions. -- [#1513], (@TilaTheHun0) Set maxListeners for Console transport. -- [#1521], (@jamesbechet) Fix Transform from `readable-stream` using CRA. -- [#1434], (@Kouzukii) Fixes logger.query function (regression from `3.0.0`) -- [#1526], (@pixtron) Log file without .gz for tailable (Fixes [#1525]). -- [#1559], (@eubnara) Fix typo related to `exitOnError`. -- [#1556], (@adoyle-h) Support to create log directory if it doesn't exist - for FileTransport. - -#### New `splat` behavior - -- [#1552], (@indexzero) Consistent handling of meta with (and without) - interpolation in `winston` and `logform`. -- [#1499], (@DABH) Provide all of `SPLAT` to formats (Fixes [#1485]). -- [#1485], (@mpabst) Fixing off-by-one when using both meta and splat. - -Previously `splat` would have added a `meta` property for any additional -`info[SPLAT]` beyond the expected number of tokens. - -**As of `logform@2.0.0`,** `format.splat` assumes additional splat paramters -(aka "metas") are objects and merges enumerable properties into the `info`. -e.g. **BE ADVISED** previous "metas" that _were not objects_ will very likely -lead to odd behavior. e.g. - -``` js -const { createLogger, format, transports } = require('winston'); -const { splat } = format; -const { MESSAGE, LEVEL, SPLAT } = require('triple-beam'); - -const logger = createLogger({ - format: format.combine( - format.splat(), - format.json() - ), - transports: [new transports.Console()] -}); - -// Expects two tokens, but four splat parameters provided. -logger.info( - 'Let us %s for %j', // message - 'objects', // used for %s - { label: 'sure' }, // used for %j - 'lol', ['ok', 'why'] // Multiple additional meta values -); - -// winston < 3.2.0 && logform@1.x behavior: -// Added "meta" property. -// -// { level: 'info', -// message: 'Let us objects for {"label":"sure"}', -// meta: ['lol', ['ok', 'why']], -// [Symbol(level)]: 'info', -// [Symbol(message)]: 'Let us %s for %j', -// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] } - -// winston >= 3.2.0 && logform@2.x behavior: Enumerable properties -// assigned into `info`. Since **strings and Arrays only have NUMERIC -// enumerable properties we get this behavior!** -// -// { '0': 'ok', -// '1': 'why', -// '2': 'l', -// level: 'info', -// message: 'Let us objects for {"label":"sure"}', -// [Symbol(level)]: 'info', -// [Symbol(message)]: 'Let us %s for %j', -// [Symbol(splat)]: [ 'objects', { label: 'sure' } ] } -``` - -## Maintenance & Documentation - -- Documentation Updates - - [#1410], (@hakanostrom) Add docs reference to transport for Cloudant. - - [#1467], (@SeryaEryn) Add fast-file-rotate transport to transport.md. - - [#1488], (@adamcohen) Fix multi logger documentation. - - [#1531], (@mapleeit) Add links to transports. - - [#1548], (@ejmartin504) Fix `README.md` for awaiting logs. - - [#1554], (@indexzero) Document the solution to [#1486] as by design. - - Other small improvements: [#1509]. -- Improved TypeScript support - - [#1470], (@jd-carroll) Export all transport options (Fixes [#1469]). - - [#1474], (@jd-carroll) Correct import to avoid conflict (Fixed [#1472]). - - [#1546], (@alewiahmed) Add consoleWarnLevels field to the - `ConsoleTransportOptions` interface type definition. - - [#1557], (@negezor) Add missing `child()` method. -- Dependency management - - [#1560], (@kibertoad) Update dependencies. - - [#1512], (@SerayaEryn) Add node@11 and disallow failures on node@10. - - [#1516], (@SerayaEryn) Update `readable-stream` to `v3.0.6`. - - [#1534], (@kibertoad) Update `@types/node`, `nyc`, and `through2`. - -## v3.1.0 / 2018-08-22 -### RELEASES ON A PLANE EDITION - -- Minor TypeScript fixes [#1362], [#1395], [#1440] -- Fix minor typos [#1359], [#1363], [#1372], [#1378], [#1390] -- [#1373], (@revik): Add `consoleWarnLevels` property to console transport options for `console.warn` browser support. -- [#1394], (@bzoz): Fix tests on Windows. -- [#1447], (@dboshardy): Support transport name option to override default names for built-in transports. -- [#1420], (@ledbit): Fix file rotation with `tailing: true` (Fixes [#1450], [#1194]). -- [#1352], (@lutovich): Add `isLevelEnabled(string)` & `isXXXEnabled()` to `Logger` class. -- Dependency management - - Regenerate `package-lock.json`. - - Upgrade to `colors@^1.3.2` (Fixes [#1439]). - - Upgrade to `logform@^1.9.1`. - - Upgrade to `diagnostics@^1.1.1`. - - Upgrade to `@types/node@^10.9.3`. - - Upgrade to `assume@^2.1.0`. - - Upgrade to `hock@^1.3.3`. - - Upgrade to `mocha@^5.2.0`. - - Upgrade to `nyc@^13.0.1`. - - Upgrade to `split2@^3.0.0`. - -## v3.0.0 / 2018-06-12 -### GET IN THE CHOPPA EDITION - -- [#1332], (@DABH): logger.debug is sent to stderr (Fixed [#1024]) -- [#1328], (@ChrisAlderson): Logger level doesn't update transports level (Fixes [#1191]). -- [#1356], (@indexzero) Move splat functionality into logform. (Fixes [#1298]). -- [#1340], (@indexzero): Check log.length when evaluating "legacyness" of transports (Fixes [#1280]). -- [#1346], (@indexzero): Implement `_final` from Node.js streams. (Related to winston-transport#24, Fixes [#1250]). -- [#1347], (@indexzero): Wrap calls to `format.transform` with try / catch (Fixes [#1261]). -- [#1357], (@indexzero): Remove paddings as we have no use for it in the current API. -- [TODO]: REMAINS OPEN, NO PR (Fixes [#1289]) -- Documentation - - [#1301], (@westonpace) Cleaned up some of the documentation on `colorize` - to address concerns in [#1095]. - - First pass at a heavy refactor of `docs/transports.md`. -- Dependency management - - Regenerate `package-lock.json`. - - Upgrade to `logform@^1.9.0`. - -## v3.0.0-rc6 / 2018-05-30 -### T-MINUS 6-DAY TO WINSTON@3 EDITION - -- **Document that we are pushing for a June 5th, 2018 release of `winston@3.0.0`** -- [#1287], (@DABH) Added types for Typescript. - - [#1335] Typescript: silent is boolean. - - [#1323] Add level method to default logger. -- [#1286], (@ChrisAlderson) Migrate codebase to ES6 - - [#1324], (@ChrisAlderson) Fix regression introduced by ES6 migration for - exception handling. - - [#1333], (@ChrisAlderson) Fix removing all loggers from a container. -- [#1291], [#1294], [#1318], (@indexzero, @ChrisAlderson, @mempf) Improvements - to `File` transport core functionality. Fixes [#1194]. -- [#1311], (@ChrisAlderson) Add `eol` option to `Stream` transport. -- [#1297], (@ChrisAlderson) Move `winston.config` to `triple-beam`. Expose - for backwards compatibility. -- [#1320], (@ChrisAlderson) Enhance tests to run on Windows. -- Internal project maintenance - - Bump to `winston-transport@4.0.0` which may cause incompatibilities if - your custom transport does not explicitly require `winston-transport` - itself. - - [#1292], (@ChrisAlderson) Add node v10 to TravisCI build matrix. - - [#1296], (@indexzero) Improve `UPGRADE-3.0.md`. Add Github Issue Template. - - Remove "npm run report" in favor of reports being automatically generate. - - Update `logform`, `triple-beam`, and `winston-transport` to latest. - -> Special thanks to our newest `winston` core team member – @ChrisAlderson for -> helping make `winston@3.0.0` a reality next week! - -## v3.0.0-rc5 / 2018-04-20 -### UNOFFICIAL NATIONAL HOLIDAY EDITION - -- [#1281] Use `Buffer.alloc` and `Buffer.from` instead of `new Buffer`. -- Better browser support - - [#1142] Move common tailFile to a separate file - - [#1279] Use feature detection to be safer for browser usage. -- MOAR Docs! - - **Document that we are pushing for a May 29th, 2018 release of `winston@3.0.0`** - - **Add David Hyde as official contributor.** - - [#1278] Final Draft of Upgrade Guide in `UPGRADE-3.0.md` - - Merge Roadmap from `3.0.0.md` into `CONTRIBUTING.md` and other - improvements to `CONTRIBUTING.md` -- Improve & expand examples - - [#1175] Add more copy about printf formats based on issue feedback. - - [#1134] Add sampleto document timestamps more clearly as an example. - - [#1273] Add example using multiple formats. - - [#1250] Add an example illustrating the "finish" event for AWS Lambda scenarios. - - Use simple format to better show that `humanReadableUnhandledException` is now the default message format. - - Add example to illustrate that example code from winston-transport - `README.md` is correct. -- Update `devDependencies` - - Bump `assume` to `^2.0.1`. - - Bump `winston-compat` to `^0.1.1`. - -## v3.0.0-rc4 / 2018-04-06 -### IF A TREE FALLS IN THE FORREST DOES IT MAKE A LOG EDITION - -- (@indexzero, @dabh) Add support for `{ silent }` option to -``` js -require('winston').Logger; -require('winston-transport').TransportStream; -``` -- Better browser support - - [#1145], (@Jasu) Replace `isstream` with `is-stream` to make stream detection work in browser. - - [#1146], (@Jasu) Rename query to different than function name, to support Babel 6.26. -- Better Typescript support in all supporting libraries - - `logform@1.4.1` -- Update documentation - - (@indexzero) Correct link to upgrade guide. Fixes #1255. - - [#1258], (@morenoh149) Document how to colorize levels. Fixes #1135. - - [#1246], (@KlemenPlazar) Update colors argument when adding custom colors - - Update `CONTRIBUTING.md` - - [#1239], (@dabh) Add changelog entries for `v3.0.0-rc3` - - Add example showing that `{ level }` can be deleted from info objects because `Symbol.for('level')` is what `winston` uses internally. Fixes #1184. - -## v3.0.0-rc3 / 2018-03-16 -### I GOT NOTHING EDITION - -- [#1195], (@Nilegfx) Fix type error when creating `new stream.Stream()` -- [#1109], (@vsetka) Fix file transprot bug where `self.filename` was not being updated on `ENOENT` -- [#1153], (@wizardnet972) Make prototype methods return like the original method -- [#1234], (@guiguan, @indexzero) Add tests for properly handling logging of `undefined`, `null` and `Error` values -- [#1235], (@indexzero) Add example demonstrating how `meta` objects BECOME the `info` object -- Minor fixes to docs & examples: [#1232], [#1185] - -## v3.0.0-rc2 / 2018-03-09 -### MAINTENANCE RESUMES EDITION - -- [#1209], (@dabh) Use new version of colors, solving a number of issues. -- [#1197], (@indexzero) Roadmap & guidelines for contributors. -- [#1100] Require the package.json by its full name. -- [#1149] Updates `async` to latest (`2.6.0`) -- [#1228], (@mcollina) Always pass a function to `fs.close`. -- Minor fixes to docs & examples: [#1177], [#1182], [#1208], [#1198], [#1165], [#1110], [#1117], [#1097], [#1155], [#1084], [#1141], [#1210], [#1223]. - -## v3.0.0-rc1 / 2017-10-19 -### OMG THEY FORGOT TO NAME IT EDITION - - - Fix file transport improper binding of `_onDrain` and `_onError` [#1104](https://github.com/winstonjs/winston/pull/1104) - -## v3.0.0-rc0 / 2017-10-02 -### IT'S-DONE.GIF EDITION - -**See [UPGRADE-3.0.md](UPGRADE-3.0.md) for a complete & living upgrade guide.** - -**See [3.0.0.md](3.0.0.md) for a list of remaining RC tasks.** - -- **Rewrite of core logging internals:** `Logger` & `Transport` are now implemented using Node.js `objectMode` streams. -- **Your transports _should_ not break:** Special attention has been given to ensure backwards compatibility with existing transports. You will likely see this: -``` -YourTransport is a legacy winston transport. Consider upgrading to winston@3: -- Upgrade docs: https://github.com/winstonjs/winston/tree/master/UPGRADE.md -``` -- **`filters`, `rewriters`, and `common.log` are now _formats_:** `winston.format` offers a simple mechanism for user-land formatting & style features. The organic & frankly messy growth of `common.log` is of the past; these feature requests can be implemented entirely outside of `winston` itself. -``` js -const { createLogger, format, transports } = require('winston'); -const { combine, timestamp, label, printf } = format; - -const myFormat = printf(info => { - return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`; -}); - -const logger = createLogger({ - combine( - label({ label: 'right meow!' }), - timestamp(), - myFormat - ), - transports: [new transports.Console()] -}); -``` -- **Increased modularity:** several subsystems are now stand-alone packages: - - [logform] exposed as `winston.format` - - [winston-transport] exposed as `winston.Transport` - - [abstract-winston-transport] used for reusable unit test suites for transport authors. -- **`2.x` branch will get little to no maintenance:** no feature requests will be accepted – only a limited number of open PRs will be merged. Hoping the [significant performance benefits][perf-bench] incentivizes folks to upgrade quickly. Don't agree? Say something! -- **No guaranteed support for `node@4` or below:** all code will be migrated to ES6 over time. This release was started when ES5 was still a hard requirement due to the current LTS needs. - -## v2.4.0 / 2017-10-01 -### ZOMFG WINSTON@3.0.0-RC0 EDITION - -- [#1036] Container.add() 'filters' and 'rewriters' option passing to logger. -- [#1066] Fixed working of "humanReadableUnhandledException" parameter when additional data is added in meta. -- [#1040] Added filtering by log level -- [#1042] Fix regressions brought by `2.3.1`. - - Fix regression on array printing. - - Fix regression on falsy value. -- [#977] Always decycle objects before cloning. - - Fixes [#862] - - Fixes [#474] - - Fixes [#914] -- [57af38a] Missing context in `.lazyDrain` of `File` transport. -- [178935f] Suppress excessive Node warning from `fs.unlink`. -- [fcf04e1] Add `label` option to `File` transport docs. -- [7e736b4], [24300e2] Added more info about undocumented `winston.startTimer()` method. -- [#1076], [#1082], [#1029], [#989], [e1e7188] Minor grammatical & style updates to `README.md`. - -## v2.3.1 / 2017-01-20 -### WELCOME TO THE APOCALYPSE EDITION - -- [#868](https://github.com/winstonjs/winston/pull/868), Fix 'Maximum call stack size exceeded' error with custom formatter. - -## v2.3.0 / 2016-11-02 -### ZOMG WHY WOULD YOU ASK EDITION - -- Full `CHANGELOG.md` entry forthcoming. See [the `git` diff for `2.3.0`](https://github.com/winstonjs/winston/compare/2.2.0...2.3.0) for now. - -## v2.2.0 / 2016-02-25 -### LEAVING CALIFORNIA EDITION - -- Full `CHANGELOG.md` entry forthcoming. See [the `git` diff for `2.2.0`](https://github.com/winstonjs/winston/compare/2.1.1...2.2.0) for now. - -## v2.1.1 / 2015-11-18 -### COLOR ME IMPRESSED EDITION - -- [#751](https://github.com/winstonjs/winston/pull/751), Fix colors not appearing in non-tty environments. Fixes [#609](https://github.com/winstonjs/winston/issues/609), [#616](https://github.com/winstonjs/winston/issues/616), [#669](https://github.com/winstonjs/winston/issues/669), [#648](https://github.com/winstonjs/winston/issues/648) (`fiznool`). -- [#752](https://github.com/winstonjs/winston/pull/752) Correct syslog RFC number. 5424 instead of 524. (`jbenoit2011`) - -## v2.1.0 / 2015-11-03 -### TEST ALL THE ECOSYSTEM EDITION - -- [#742](https://github.com/winstonjs/winston/pull/742), [32d52b7](https://github.com/winstonjs/winston/commit/32d52b7) Distribute common test files used by transports in the `winston` ecosystem. - -## v2.0.1 / 2015-11-02 -### BUGS ALWAYS HAPPEN OK EDITION - -- [#739](https://github.com/winstonjs/winston/issues/739), [1f16861](https://github.com/winstonjs/winston/commit/1f16861) Ensure that `logger.log("info", undefined)` does not throw. - -## v2.0.0 / 2015-10-29 -### OMG IT'S MY SISTER'S BIRTHDAY EDITION - -#### Breaking changes - -**Most important** -- **[0f82204](https://github.com/winstonjs/winston/commit/0f82204) Move `winston.transports.DailyRotateFile` [into a separate module](https://github.com/winstonjs/winston-daily-rotate-file)**: `require('winston-daily-rotate-file');` -- **[fb9eec0](https://github.com/winstonjs/winston/commit/fb9eec0) Reverse log levels in `npm` and `cli` configs to conform to [RFC524](https://tools.ietf.org/html/rfc5424). Fixes [#424](https://github.com/winstonjs/winston/pull/424) [#406](https://github.com/winstonjs/winston/pull/406) [#290](https://github.com/winstonjs/winston/pull/290)** -- **[8cd8368](https://github.com/winstonjs/winston/commit/8cd8368) Change the method signature to a `filter` function to be consistent with `rewriter` and log functions:** -``` js -function filter (level, msg, meta, inst) { - // Filter logic goes here... -} -``` - -**Other breaking changes** -- [e0c9dde](https://github.com/winstonjs/winston/commit/e0c9dde) Remove `winston.transports.Webhook`. Use `winston.transports.Http` instead. -- [f71e638](https://github.com/winstonjs/winston/commit/f71e638) Remove `Logger.prototype.addRewriter` and `Logger.prototype.addFilter` since they just push to an Array of functions. Use `logger.filters.push` or `logger.rewriters.push` explicitly instead. -- [a470ab5](https://github.com/winstonjs/winston/commit/a470ab5) No longer respect the `handleExceptions` option to `new winston.Logger`. Instead just pass in the `exceptionHandlers` option itself. -- [8cb7048](https://github.com/winstonjs/winston/commit/8cb7048) Removed `Logger.prototype.extend` functionality - -#### New features -- [3aa990c](https://github.com/winstonjs/winston/commit/3aa990c) Added `Logger.prototype.configure` which now contains all logic previously in the `winston.Logger` constructor function. (`indexzero`) -- [#726](https://github.com/winstonjs/winston/pull/726) Update .npmignore (`coreybutler`) -- [#700](https://github.com/winstonjs/winston/pull/700) Add an `eol` option to the `Console` transport. (`aquavitae`) -- [#731](https://github.com/winstonjs/winston/pull/731) Update `lib/transports.js` for better static analysis. (`indexzero`) - -#### Fixes, refactoring, and optimizations. OH MY! -- [#632](https://github.com/winstonjs/winston/pull/632) Allow `File` transport to be an `objectMode` writable stream. (`stambata`) -- [#527](https://github.com/winstonjs/winston/issues/527), [163f4f9](https://github.com/winstonjs/winston/commit/163f4f9), [3747ccf](https://github.com/winstonjs/winston/commit/3747ccf) Performance optimizations and string interpolation edge cases (`indexzero`) -- [f0edafd](https://github.com/winstonjs/winston/commit/f0edafd) Code cleanup for reability, ad-hoc styleguide enforcement (`indexzero`) - -## v1.1.1 - v1.1.2 / 2015-10 -### MINOR FIXES EDITION - -#### Notable changes - * [727](https://github.com/winstonjs/winston/pull/727) Fix "raw" mode (`jcrugzz`) - * [703](https://github.com/winstonjs/winston/pull/703) Do not modify Error or Date objects when logging. Fixes #610 (`harriha`). - -## v1.1.0 / 2015-10-09 -### GREETINGS FROM CARTAGENA EDITION - -#### Notable Changes - * [#721](https://github.com/winstonjs/winston/pull/721) Fixed octal literal to work with node 4 strict mode (`wesleyeff`) - * [#630](https://github.com/winstonjs/winston/pull/630) Add stderrLevels option to Console Transport and update docs (`paulhroth`) - * [#626](https://github.com/winstonjs/winston/pull/626) Add the logger (this) in the fourth argument in the rewriters and filters functions (`christophehurpeau `) - * [#623](https://github.com/winstonjs/winston/pull/623) Fix Console Transport's align option tests (`paulhroth`, `kikobeats`) - * [#692](https://github.com/winstonjs/winston/pull/692) Adding winston-aws-cloudwatch to transport docs (`timdp`) - -## v1.0.2 2015-09-25 -### LET'S TALK ON GITTER EDITION - -#### Notable Changes - * [de80160](https://github.com/winstonjs/winston/commit/de80160) Add Gitter badge (`The Gitter Badger`) - * [44564de](https://github.com/winstonjs/winston/commit/44564de) [fix] Correct listeners in `logException`. Fixes [#218](https://github.com/winstonjs/winston/issues/218) [#213](https://github.com/winstonjs/winston/issues/213) [#327](https://github.com/winstonjs/winston/issues/327). (`indexzero`) - * [45b1eeb](https://github.com/winstonjs/winston/commit/45b1eeb) [fix] Get `tailFile` function working on latest/all node versions (`Christopher Jeffrey`) - * [c6d45f9](https://github.com/winstonjs/winston/commit/c6d45f9) Fixed event subscription on close (`Roman Stetsyshin`) - -#### Other changes - * TravisCI updates & best practices [87b97cc](https://github.com/winstonjs/winston/commit/87b97cc) [91a5bc4](https://github.com/winstonjs/winston/commit/91a5bc4), [cf24e6a](https://github.com/winstonjs/winston/commit/cf24e6a) (`indexzero`) - * [d5397e7](https://github.com/winstonjs/winston/commit/d5397e7) Bump async version (`Roderick Hsiao`) - * Documentation updates & fixes [86d7527](https://github.com/winstonjs/winston/commit/86d7527), [38254c1](https://github.com/winstonjs/winston/commit/38254c1), [04e2928](https://github.com/winstonjs/winston/commit/04e2928), [61c8a89](https://github.com/winstonjs/winston/commit/61c8a89), [c42a783](https://github.com/winstonjs/winston/commit/c42a783), [0688a22](https://github.com/winstonjs/winston/commit/0688a22), [eabc113](https://github.com/winstonjs/winston/commit/eabc113) [c9506b7](https://github.com/winstonjs/winston/commit/c9506b7), [17534d2](https://github.com/winstonjs/winston/commit/17534d2), [b575e7b](https://github.com/winstonjs/winston/commit/b575e7b) (`Stefan Thies`, `charukiewicz`, `unLucio`, `Adam Cohen`, `Denis Gorbachev`, `Frederik Ring`, `Luigi Pinca`, `jeffreypriebe`) - * Documentation refactor & cleanup [a19607e](https://github.com/winstonjs/winston/commit/a19607e), [d1932b4](https://github.com/winstonjs/winston/commit/d1932b4), [7a13132](https://github.com/winstonjs/winston/commit/7a13132) (`indexzero`) - - -## v1.0.1 / 2015-06-26 -### YAY DOCS EDITION - - * [#639](https://github.com/winstonjs/winston/pull/639) Fix for [#213](https://github.com/winstonjs/winston/issues/213): More than 10 containers triggers EventEmitter memory leak warning (`marcus`) - * Documentation and `package.json` updates [cec892c](https://github.com/winstonjs/winston/commit/cec892c), [2f13b4f](https://github.com/winstonjs/winston/commit/2f13b4f), [b246efd](https://github.com/winstonjs/winston/commit/b246efd), [22a5f5a](https://github.com/winstonjs/winston/commit/22a5f5a), [5868b78](https://github.com/winstonjs/winston/commit/5868b78), [99b6b44](https://github.com/winstonjs/winston/commit/99b6b44), [447a813](https://github.com/winstonjs/winston/commit/447a813), [7f75b48](https://github.com/winstonjs/winston/commit/7f75b48) (`peteward44`, `Gilad Peleg`, `Anton Ian Sipos`, `nimrod-becker`, `LarsTi`, `indexzero`) - -## v1.0.0 / 2015-04-07 -### OMG 1.0.0 FINALLY EDITION - -#### Breaking Changes - * [#587](https://github.com/winstonjs/winston/pull/587) Do not extend `String` prototypes as a side effect of using `colors`. (`kenperkins`) - * [#581](https://github.com/winstonjs/winston/pull/581) File transports now emit `error` on error of the underlying streams after `maxRetries` attempts. (`ambbell`). - * [#583](https://github.com/winstonjs/winston/pull/583), [92729a](https://github.com/winstonjs/winston/commit/92729a68d71d07715501c35d94d2ac06ac03ca08) Use `os.EOL` for all file writing by default. (`Mik13`, `indexzero`) - * [#532](https://github.com/winstonjs/winston/pull/532) Delete logger instance from `Container` when `close` event is emitted. (`snater`) - * [#380](https://github.com/winstonjs/winston/pull/380) Rename `duration` to `durationMs`, which is now a number a not a string ending in `ms`. (`neoziro`) - * [#253](https://github.com/winstonjs/winston/pull/253) Do not set a default level. When `level` is falsey on any `Transport` instance, any `Logger` instance uses the configured level (instead of the Transport level) (`jstamerj`). - -#### Other changes - - * [b83de62](https://github.com/winstonjs/winston/commit/b83de62) Fix rendering of stack traces. - * [c899cc](https://github.com/winstonjs/winston/commit/c899cc1f0719e49b26ec933e0fa263578168ea3b) Update documentation (Fixes [#549](https://github.com/winstonjs/winston/issues/549)) - * [#551](https://github.com/winstonjs/winston/pull/551) Filter metadata along with messages - * [#578](https://github.com/winstonjs/winston/pull/578) Fixes minor issue with `maxFiles` in `File` transport (Fixes [#556](https://github.com/winstonjs/winston/issues/556)). - * [#560](https://github.com/winstonjs/winston/pull/560) Added `showLevel` support to `File` transport. - * [#558](https://github.com/winstonjs/winston/pull/558) Added `showLevel` support to `Console` transport. - -## v0.9.0 / 2015-02-03 - - * [#496](https://github.com/flatiron/winston/pull/496) Updated default option handling for CLI (`oojacoboo`). - * [f37634b](https://github.com/flatiron/winston/commit/f37634b) [dist] Only support `node >= 0.8.0`. (`indexzero`) - * [91a1e90](https://github.com/flatiron/winston/commit/91a1e90), [50163a0](https://github.com/flatiron/winston/commit/50163a0) Fix #84 [Enable a better unhandled exception experience](https://github.com/flatiron/winston/issues/84) (`samz`) - * [8b5fbcd](https://github.com/flatiron/winston/commit/8b5fbcd) #448 Added tailable option to file transport which rolls files backwards instead of creating incrementing appends. Implements #268 (`neouser99`) - * [a34f7d2](https://github.com/flatiron/winston/commit/a34f7d2) Custom log formatter functionality were added. (`Melnyk Andii`) - * [4c08191](https://github.com/flatiron/winston/commit/4c08191) Added showLevel flag to common.js, file*, memory and console transports. (`Tony Germaneri`) - * [64ed8e0](https://github.com/flatiron/winston/commit/64ed8e0) Adding custom pretty print function test. (`Alberto Pose`) - * [3872dfb](https://github.com/flatiron/winston/commit/3872dfb) Adding prettyPrint parameter as function example. (`Alberto Pose`) - * [2b96eee](https://github.com/flatiron/winston/commit/2b96eee) implemented filters #526 (`Chris Oloff`) - * [72273b1](https://github.com/flatiron/winston/commit/72273b1) Added the options to colorize only the level, only the message or all. Default behavior is kept. Using true will only colorize the level and false will not colorize anything. (`Michiel De Mey`) - * [178e8a6](https://github.com/flatiron/winston/commit/178e8a6) Prevent message from meta input being overwritten (`Leonard Martin`) - * [270be86](https://github.com/flatiron/winston/commit/270be86) [api] Allow for transports to be removed by their string name [test fix] Add test coverage for multiple transports of the same type added in #187. [doc] Document using multiple transports of the same type (`indexzero`) - * [0a848fa](https://github.com/flatiron/winston/commit/0a848fa) Add depth options for meta pretty print (`Loïc Mahieu`) - * [106b670](https://github.com/flatiron/winston/commit/106b670) Allow debug messages to be sent to stdout (`John Frizelle`) - * [ad2d5e1](https://github.com/flatiron/winston/commit/ad2d5e1) [fix] Handle Error instances in a sane way since their properties are non-enumerable __by default.__ Fixes #280. (`indexzero`) - * [5109dd0](https://github.com/flatiron/winston/commit/5109dd0) [fix] Have a default `until` before a default `from`. Fixes #478. (`indexzero`) - * [d761960](https://github.com/flatiron/winston/commit/d761960) Fix logging regular expression objects (`Chasen Le Hara`) - * [2632eb8](https://github.com/flatiron/winston/commit/2632eb8) Add option for EOL chars on FileTransport (`José F. Romaniello`) - * [bdecce7](https://github.com/flatiron/winston/commit/bdecce7) Remove duplicate logstash option (`José F. Romaniello`) - * [7a01f9a](https://github.com/flatiron/winston/commit/7a01f9a) Update declaration block according to project's style guide (`Ricardo Torres`) - * [ae27a19](https://github.com/flatiron/winston/commit/ae27a19) Fixes #306: Can't set customlevels to my loggers (RangeError: Maximum call stack size exceeded) (`Alberto Pose`) - * [1ba4f51](https://github.com/flatiron/winston/commit/1ba4f51) [fix] Call `res.resume()` in HttpTransport to get around known issues in streams2. (`indexzero`) - * [39e0258](https://github.com/flatiron/winston/commit/39e0258) Updated default option handling for CLI (`Jacob Thomason`) - * [8252801](https://github.com/flatiron/winston/commit/8252801) Added logstash support to console transport (`Ramon Snir`) - * [18aa301](https://github.com/flatiron/winston/commit/18aa301) Module isStream should be isstream (`Michael Neil`) - * [2f5f296](https://github.com/flatiron/winston/commit/2f5f296) options.prettyPrint can now be a function (`Matt Zukowski`) - * [a87a876](https://github.com/flatiron/winston/commit/a87a876) Adding rotationFormat prop to file.js (`orcaman`) - * [ff187f4](https://github.com/flatiron/winston/commit/ff187f4) Allow custom exception level (`jupiter`) - -## 0.8.3 / 2014-11-04 - -* [fix lowercase issue (`jcrugzz`)](https://github.com/flatiron/winston/commit/b3ffaa10b5fe9d2a510af5348cf4fb3870534123) - -## 0.8.2 / 2014-11-04 - -* [Full fix for #296 with proper streams2 detection with `isstream` for file transport (`jcrugzz`)](https://github.com/flatiron/winston/commit/5c4bd4191468570e46805ed399cad63cfb1856cc) -* [Add isstream module (`jcrugzz`)](https://github.com/flatiron/winston/commit/498b216d0199aebaef72ee4d8659a00fb737b9ae) -* [Partially fix #296 with streams2 detection for file transport (`indexzero`)](https://github.com/flatiron/winston/commit/b0227b6c27cf651ffa8b8192ef79ab24296362e3) -* [add stress test for issue #288 (`indexzero`)](https://github.com/flatiron/winston/commit/e08e504b5b3a00f0acaade75c5ba69e6439c84a6) -* [lessen timeouts to check test sanity (`indexzero`)](https://github.com/flatiron/winston/commit/e925f5bc398a88464f3e796545ff88912aff7568) -* [update winston-graylog2 documentation (`unlucio`)](https://github.com/flatiron/winston/commit/49fa86c31baf12c8ac3adced3bdba6deeea2e363) -* [fix test formatting (`indexzero`)](https://github.com/flatiron/winston/commit/8e2225799520a4598044cdf93006d216812a27f9) -* [fix so options are not redefined (`indexzero`)](https://github.com/flatiron/winston/commit/d1d146e8a5bb73dcb01579ad433f6d4f70b668ea) -* [fix self/this issue that broke `http` transport (`indexzero`)](https://github.com/flatiron/winston/commit/d10cbc07755c853b60729ab0cd14aa665da2a63b) - - -## 0.8.1 / 2014-10-06 - -* [Add label option for DailyRotateFile transport (`francoisTemasys`)](https://github.com/flatiron/winston/pull/459) -* [fix Logger#transports length check upon Logger#log (`adriano-di-giovanni`, `indexzero`)](https://github.com/flatiron/winston/pull/404) -* [err can be a string. (`gdw2`, `indexzero`)](https://github.com/flatiron/winston/pull/396) -* [Added color for pre-defined cli set. (`danilo1105`, `indexzero`)](https://github.com/flatiron/winston/pull/365) -* [Fix dates on transport test (`revington`)](https://github.com/flatiron/winston/pull/346) -* [Included the label from options to the output in JSON mode. (`arxony`)](https://github.com/flatiron/winston/pull/326) -* [Allow using logstash option with the File transport (`gmajoulet`)](https://github.com/flatiron/winston/pull/299) -* [Be more defensive when working with `query` methods from Transports. Fixes #356. (indexzero)](https://github.com/flatiron/winston/commit/b80638974057f74b521dbe6f43fef2105110afa2) -* [Catch exceptions for file transport unlinkSync (`calvinfo`)](https://github.com/flatiron/winston/pull/266) -* [Adding the 'addRewriter' to winston (`machadogj`)](https://github.com/flatiron/winston/pull/258) -* [Updates to transport documentation (`pose`)](https://github.com/flatiron/winston/pull/262) -* [fix typo in "Extending another object with Logging" section.](https://github.com/flatiron/winston/pull/281) -* [Updated README.md - Replaced properties with those listed in winston-mongodb module](https://github.com/flatiron/winston/pull/264) - -## 0.8.0 / 2014-09-15 - * [Fixes for HTTP Transport](https://github.com/flatiron/winston/commit/a876a012641f8eba1a976eada15b6687d4a03f82) - * Removing [jsonquest](https://github.com/flatiron/winston/commit/4f088382aeda28012b7a0498829ceb243ed74ac1) and [request](https://github.com/flatiron/winston/commit/a5676313b4e9744802cc3b8e1468e4af48830876) dependencies. - * Configuration is now [shalow cloned](https://github.com/flatiron/winston/commit/08fccc81d18536d33050496102d98bde648853f2). - * [Added logstash support](https://github.com/flatiron/winston/pull/445/files) - * Fix for ["flush" event should always fire after "flush" call bug](https://github.com/flatiron/winston/pull/446/files) - * Added tests for file: [open and stress](https://github.com/flatiron/winston/commit/47d885797a2dd0d3cd879305ca813a0bd951c378). - * [Test fixes](https://github.com/flatiron/winston/commit/9e39150e0018f43d198ca4c160acef2af9860bf4) - * [Fix ")" on string interpolation](https://github.com/flatiron/winston/pull/394/files) - -## 0.6.2 / 2012-07-08 - - * Added prettyPrint option for console logging - * Multi-line values for conditional returns are not allowed - * Added acceptance of `stringify` option - * Fixed padding for log levels - diff --git a/build/node_modules/winston/README.md b/build/node_modules/winston/README.md index 91ae12a7..dab9b672 100644 --- a/build/node_modules/winston/README.md +++ b/build/node_modules/winston/README.md @@ -2,12 +2,13 @@ A logger for just about everything. -[![Version npm](https://img.shields.io/npm/v/winston.svg?style=flat-square)](https://www.npmjs.com/package/winston)[![npm Downloads](https://img.shields.io/npm/dm/winston.svg?style=flat-square)](https://npmcharts.com/compare/winston?minimal=true)[![Build Status](https://img.shields.io/travis/winstonjs/winston/master.svg?style=flat-square)](https://travis-ci.org/winstonjs/winston)[![Dependencies](https://img.shields.io/david/winstonjs/winston.svg?style=flat-square)](https://david-dm.org/winstonjs/winston) +[![Version npm](https://img.shields.io/npm/v/winston.svg?style=flat-square)](https://www.npmjs.com/package/winston) +[![npm Downloads](https://img.shields.io/npm/dm/winston.svg?style=flat-square)](https://npmcharts.com/compare/winston?minimal=true) +[![build status](https://github.com/winstonjs/winston/actions/workflows/ci.yml/badge.svg)](https://github.com/winstonjs/winston/actions/workflows/ci.yml) +[![coverage status](https://coveralls.io/repos/github/winstonjs/winston/badge.svg?branch=master)](https://coveralls.io/github/winstonjs/winston?branch=master) [![NPM](https://nodei.co/npm/winston.png?downloads=true&downloadRank=true)](https://nodei.co/npm/winston/) -[![Join the chat at https://gitter.im/winstonjs/winston](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/winstonjs/winston?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - ## winston@3 See the [Upgrade Guide](UPGRADE-3.0.md) for more information. Bug reports and @@ -15,7 +16,7 @@ PRs welcome! ## Looking for `winston@2.x` documentation? -Please note that the documentation below is for `winston@3`. +Please note that the documentation below is for `winston@3`. [Read the `winston@2.x` documentation]. ## Motivation @@ -36,7 +37,7 @@ the API that they exposed to the programmer. ## Quick Start -TL;DR? Check out the [quick start example][quick-example] in `./examples/`. +TL;DR? Check out the [quick start example][quick-example] in `./examples/`. There are a number of other examples in [`./examples/*.js`][examples]. Don't see an example you think should be there? Submit a pull request to add it! @@ -55,8 +56,8 @@ const logger = winston.createLogger({ defaultMeta: { service: 'user-service' }, transports: [ // - // - Write all logs with level `error` and below to `error.log` - // - Write all logs with level `info` and below to `combined.log` + // - Write all logs with importance level of `error` or less to `error.log` + // - Write all logs with importance level of `info` or less to `combined.log` // new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), @@ -103,7 +104,7 @@ logger to use throughout your application if you so choose. * [Handling Uncaught Exceptions with winston](#handling-uncaught-exceptions-with-winston) * [To Exit or Not to Exit](#to-exit-or-not-to-exit) * [Rejections](#rejections) - * [Handling Uncaught Promise Rejections with winston](#handling-uncaught-promise-rejections-with-winston) + * [Handling Uncaught Promise Rejections with winston](#handling-uncaught-promise-rejections-with-winston) * [Profiling](#profiling) * [Streaming Logs](#streaming-logs) * [Querying Logs](#querying-logs) @@ -121,7 +122,7 @@ Logging levels in `winston` conform to the severity ordering specified by from most important to least important._ ``` js -const levels = { +const levels = { error: 0, warn: 1, info: 2, @@ -148,7 +149,7 @@ A logger accepts the following parameters: | Name | Default | Description | | ------------- | --------------------------- | --------------- | -| `level` | `'info'` | Log only if [`info.level`](#streams-objectmode-and-info-objects) less than or equal to this level | +| `level` | `'info'` | Log only if [`info.level`](#streams-objectmode-and-info-objects) less than or equal to this level | | `levels` | `winston.config.npm.levels` | Levels (and colors) representing log priorities | | `format` | `winston.format.json` | Formatting for `info` messages (see: [Formats]) | | `transports` | `[]` _(No transports)_ | Set of logging targets for `info` messages | @@ -156,7 +157,7 @@ A logger accepts the following parameters: | `silent` | `false` | If true, all logs are suppressed | The levels provided to `createLogger` will be defined as convenience methods -on the `logger` returned. +on the `logger` returned. ``` js // @@ -170,7 +171,7 @@ logger.log({ logger.info('Hello again distributed logs'); ``` -You can add or remove transports from the `logger` once it has been provided +You can add or remove transports from the `logger` once it has been provided to you from `winston.createLogger`: ``` js @@ -227,7 +228,7 @@ const childLogger = logger.child({ requestId: '451' }); In `winston`, both `Logger` and `Transport` instances are treated as [`objectMode`](https://nodejs.org/api/stream.html#stream_object_mode) -streams that accept an `info` object. +streams that accept an `info` object. The `info` parameter provided to a given format represents a single log message. The object itself is mutable. Every `info` must have at least the @@ -235,7 +236,7 @@ message. The object itself is mutable. Every `info` must have at least the ``` js const info = { - level: 'info', // Level of the logging message + level: 'info', // Level of the logging message message: 'Hey! Log something?' // Descriptive message being logged. }; ``` @@ -249,10 +250,10 @@ const { level, message, ...meta } = info; Several of the formats in `logform` itself add additional properties: | Property | Format added by | Description | -| ----------- | --------------- | ----------- | +| ----------- | --------------- | ----------- | | `splat` | `splat()` | String interpolation splat for `%d %s`-style messages. | | `timestamp` | `timestamp()` | timestamp the message was received. | -| `label` | `label()` | Custom label associated with each message. | +| `label` | `label()` | Custom label associated with each message. | | `ms` | `ms()` | Number of milliseconds since the previous log message. | As a consumer you may add whatever properties you wish – _internal state is @@ -286,7 +287,7 @@ console.log(SPLAT === Symbol.for('splat')); ``` > **NOTE:** any `{ message }` property in a `meta` object provided will -> automatically be concatenated to any `msg` already provided: For +> automatically be concatenated to any `msg` already provided: For > example the below will concatenate 'world' onto 'hello': > > ``` js @@ -387,7 +388,7 @@ logger.log('info', 'test message %s, %s', 'first', 'second', { number: 123 }); ### Filtering `info` Objects -If you wish to filter out a given `info` Object completely when logging then +If you wish to filter out a given `info` Object completely when logging then simply return a falsey value. ``` js @@ -436,7 +437,7 @@ const willNeverThrow = format.combine( ### Creating custom formats -Formats are prototypal objects (i.e. class instances) that define a single +Formats are prototypal objects (i.e. class instances) that define a single method: `transform(info, opts)` and return the mutated `info`: - `info`: an object representing the log message. @@ -444,11 +445,11 @@ method: `transform(info, opts)` and return the mutated `info`: They are expected to return one of two things: -- **An `info` Object** representing the modified `info` argument. Object -references need not be preserved if immutability is preferred. All current -built-in formats consider `info` mutable, but [immutablejs] is being +- **An `info` Object** representing the modified `info` argument. Object +references need not be preserved if immutability is preferred. All current +built-in formats consider `info` mutable, but [immutablejs] is being considered for future releases. -- **A falsey value** indicating that the `info` argument should be ignored by the +- **A falsey value** indicating that the `info` argument should be ignored by the caller. (See: [Filtering `info` Objects](#filtering-info-objects)) below. `winston.format` is designed to be as simple as possible. To define a new @@ -506,14 +507,14 @@ corresponding integer priority. For example, as specified exactly in RFC5424 the `syslog` levels are prioritized from 0 to 7 (highest to lowest). ```js -{ - emerg: 0, - alert: 1, - crit: 2, - error: 3, - warning: 4, - notice: 5, - info: 6, +{ + emerg: 0, + alert: 1, + crit: 2, + error: 3, + warning: 4, + notice: 5, + info: 6, debug: 7 } ``` @@ -522,14 +523,14 @@ Similarly, `npm` logging levels are prioritized from 0 to 6 (highest to lowest): ``` js -{ - error: 0, - warn: 1, - info: 2, +{ + error: 0, + warn: 1, + info: 2, http: 3, - verbose: 4, - debug: 5, - silly: 6 + verbose: 4, + debug: 5, + silly: 6 } ``` @@ -643,10 +644,10 @@ winston aware of them: winston.addColors(myCustomLevels.colors); ``` -This enables loggers using the `colorize` formatter to appropriately color and style +This enables loggers using the `colorize` formatter to appropriately color and style the output of custom levels. -Additionally, you can also change background color and font style. +Additionally, you can also change background color and font style. For example, ``` js baz: 'italic yellow', @@ -655,7 +656,7 @@ foobar: 'bold red cyanBG' Possible options are below. -* Font styles: `bold`, `dim`, `italic`, `underline`, `inverse`, `hidden`, +* Font styles: `bold`, `dim`, `italic`, `underline`, `inverse`, `hidden`, `strikethrough`. * Font foreground colors: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, @@ -663,7 +664,7 @@ Possible options are below. * Background colors: `blackBG`, `redBG`, `greenBG`, `yellowBG`, `blueBG` `magentaBG`, `cyanBG`, `whiteBG` - + ### Colorizing Standard logging levels To colorize the standard logging level add @@ -731,7 +732,7 @@ module.exports = class YourCustomTransport extends Transport { // // Consume any custom options here. e.g.: // - Connection information for databases - // - Authentication information for APIs (e.g. loggly, papertrail, + // - Authentication information for APIs (e.g. loggly, papertrail, // logentries, etc.). // } @@ -789,7 +790,7 @@ const { createLogger, transports } = require('winston'); // Enable exception handling when you create your logger. const logger = createLogger({ transports: [ - new transports.File({ filename: 'combined.log' }) + new transports.File({ filename: 'combined.log' }) ], exceptionHandlers: [ new transports.File({ filename: 'exceptions.log' }) @@ -799,7 +800,7 @@ const logger = createLogger({ // Or enable it later on by adding a transport or using `.exceptions.handle` const logger = createLogger({ transports: [ - new transports.File({ filename: 'combined.log' }) + new transports.File({ filename: 'combined.log' }) ] }); @@ -904,7 +905,7 @@ const { createLogger, transports } = require('winston'); // Enable rejection handling when you create your logger. const logger = createLogger({ transports: [ - new transports.File({ filename: 'combined.log' }) + new transports.File({ filename: 'combined.log' }) ], rejectionHandlers: [ new transports.File({ filename: 'rejections.log' }) @@ -914,7 +915,7 @@ const logger = createLogger({ // Or enable it later on by adding a transport or using `.rejections.handle` const logger = createLogger({ transports: [ - new transports.File({ filename: 'combined.log' }) + new transports.File({ filename: 'combined.log' }) ] }); @@ -1193,7 +1194,7 @@ yarn add winston ## Run Tests -All of the winston tests are written with [`mocha`][mocha], [`nyc`][nyc], and +All of the winston tests are written with [`mocha`][mocha], [`nyc`][nyc], and [`assume`][assume]. They can be run with `npm`. ``` bash @@ -1219,7 +1220,7 @@ npm test [logform]: https://github.com/winstonjs/logform#readme [winston-transport]: https://github.com/winstonjs/winston-transport -[Read the `winston@2.x` documentation]: https://github.com/winstonjs/winston/tree/2.x +[Read the `winston@2.x` documentation]: https://github.com/winstonjs/winston/tree/2.x [quick-example]: https://github.com/winstonjs/winston/blob/master/examples/quick-start.js [examples]: https://github.com/winstonjs/winston/tree/master/examples diff --git a/build/node_modules/winston/dist/winston.js b/build/node_modules/winston/dist/winston.js index f037f59b..779b5b35 100644 --- a/build/node_modules/winston/dist/winston.js +++ b/build/node_modules/winston/dist/winston.js @@ -10,73 +10,67 @@ var logform = require('logform'); var _require = require('./winston/common'), warn = _require.warn; -/** - * Setup to expose. - * @type {Object} - */ - - -var winston = exports; /** * Expose version. Use `require` method for `webpack` support. * @type {string} */ -winston.version = require('../package.json').version; + +exports.version = require('../package.json').version; /** * Include transports defined by default by winston * @type {Array} */ -winston.transports = require('./winston/transports'); +exports.transports = require('./winston/transports'); /** * Expose utility methods * @type {Object} */ -winston.config = require('./winston/config'); +exports.config = require('./winston/config'); /** * Hoist format-related functionality from logform. * @type {Object} */ -winston.addColors = logform.levels; +exports.addColors = logform.levels; /** * Hoist format-related functionality from logform. * @type {Object} */ -winston.format = logform.format; +exports.format = logform.format; /** * Expose core Logging-related prototypes. * @type {function} */ -winston.createLogger = require('./winston/create-logger'); +exports.createLogger = require('./winston/create-logger'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.ExceptionHandler = require('./winston/exception-handler'); +exports.ExceptionHandler = require('./winston/exception-handler'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.RejectionHandler = require('./winston/rejection-handler'); +exports.RejectionHandler = require('./winston/rejection-handler'); /** * Expose core Logging-related prototypes. * @type {Container} */ -winston.Container = require('./winston/container'); +exports.Container = require('./winston/container'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.Transport = require('winston-transport'); +exports.Transport = require('winston-transport'); /** * We create and expose a default `Container` to `winston.loggers` so that the * programmer may manage multiple `winston.Logger` instances without any @@ -89,7 +83,7 @@ winston.Transport = require('winston-transport'); * const logger = require('winston').loggers.get('something'); */ -winston.loggers = new winston.Container(); +exports.loggers = new exports.Container(); /** * We create and expose a 'defaultLogger' so that the programmer may do the * following without the need to create an instance of winston.Logger directly: @@ -99,10 +93,10 @@ winston.loggers = new winston.Container(); * winston.error('some error'); */ -var defaultLogger = winston.createLogger(); // Pass through the target methods onto `winston. +var defaultLogger = exports.createLogger(); // Pass through the target methods onto `winston. -Object.keys(winston.config.npm.levels).concat(['log', 'query', 'stream', 'add', 'remove', 'clear', 'profile', 'startTimer', 'handleExceptions', 'unhandleExceptions', 'handleRejections', 'unhandleRejections', 'configure', 'child']).forEach(function (method) { - return winston[method] = function () { +Object.keys(exports.config.npm.levels).concat(['log', 'query', 'stream', 'add', 'remove', 'clear', 'profile', 'startTimer', 'handleExceptions', 'unhandleExceptions', 'handleRejections', 'unhandleRejections', 'configure', 'child']).forEach(function (method) { + return exports[method] = function () { return defaultLogger[method].apply(defaultLogger, arguments); }; }); @@ -112,7 +106,7 @@ Object.keys(winston.config.npm.levels).concat(['log', 'query', 'stream', 'add', * @type {string} */ -Object.defineProperty(winston, 'level', { +Object.defineProperty(exports, 'level', { get: function get() { return defaultLogger.level; }, @@ -126,7 +120,7 @@ Object.defineProperty(winston, 'level', { * @type {Object} */ -Object.defineProperty(winston, 'exceptions', { +Object.defineProperty(exports, 'exceptions', { get: function get() { return defaultLogger.exceptions; } @@ -138,7 +132,7 @@ Object.defineProperty(winston, 'exceptions', { */ ['exitOnError'].forEach(function (prop) { - Object.defineProperty(winston, prop, { + Object.defineProperty(exports, prop, { get: function get() { return defaultLogger[prop]; }, @@ -152,7 +146,7 @@ Object.defineProperty(winston, 'exceptions', { * @type {Object} */ -Object.defineProperty(winston, 'default', { +Object.defineProperty(exports, 'default', { get: function get() { return { exceptionHandlers: defaultLogger.exceptionHandlers, @@ -163,10 +157,10 @@ Object.defineProperty(winston, 'default', { }); // Have friendlier breakage notices for properties that were exposed by default // on winston < 3.0. -warn.deprecated(winston, 'setLevels'); -warn.forFunctions(winston, 'useFormat', ['cli']); -warn.forProperties(winston, 'useFormat', ['padLevels', 'stripColors']); -warn.forFunctions(winston, 'deprecated', ['addRewriter', 'addFilter', 'clone', 'extend']); -warn.forProperties(winston, 'deprecated', ['emitErrs', 'levelLength']); // Throw a useful error when users attempt to run `new winston.Logger`. +warn.deprecated(exports, 'setLevels'); +warn.forFunctions(exports, 'useFormat', ['cli']); +warn.forProperties(exports, 'useFormat', ['padLevels', 'stripColors']); +warn.forFunctions(exports, 'deprecated', ['addRewriter', 'addFilter', 'clone', 'extend']); +warn.forProperties(exports, 'deprecated', ['emitErrs', 'levelLength']); // Throw a useful error when users attempt to run `new winston.Logger`. -warn.moved(winston, 'createLogger', 'Logger'); \ No newline at end of file +warn.moved(exports, 'createLogger', 'Logger'); \ No newline at end of file diff --git a/build/node_modules/winston/dist/winston/container.js b/build/node_modules/winston/dist/winston/container.js index a1d329b4..ae13530e 100644 --- a/build/node_modules/winston/dist/winston/container.js +++ b/build/node_modules/winston/dist/winston/container.js @@ -10,7 +10,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var createLogger = require('./create-logger'); /** @@ -34,7 +34,7 @@ module.exports = /*#__PURE__*/function () { this.options = options; } /** - * Retreives a `winston.Logger` instance for the specified `id`. If an + * Retrieves a `winston.Logger` instance for the specified `id`. If an * instance does not exist, one is created. * @param {!string} id - The id of the Logger to get. * @param {?Object} [options] - Options for the Logger instance. diff --git a/build/node_modules/winston/dist/winston/create-logger.js b/build/node_modules/winston/dist/winston/create-logger.js index 8ba07bc3..6fc231e2 100644 --- a/build/node_modules/winston/dist/winston/create-logger.js +++ b/build/node_modules/winston/dist/winston/create-logger.js @@ -6,21 +6,25 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +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); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -73,7 +77,7 @@ module.exports = function () { return _super.call(this, options); } - return DerivedLogger; + return _createClass(DerivedLogger); }(Logger); var logger = new DerivedLogger(opts); // diff --git a/build/node_modules/winston/dist/winston/exception-handler.js b/build/node_modules/winston/dist/winston/exception-handler.js index e275e40d..7db78ca9 100644 --- a/build/node_modules/winston/dist/winston/exception-handler.js +++ b/build/node_modules/winston/dist/winston/exception-handler.js @@ -10,7 +10,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var os = require('os'); diff --git a/build/node_modules/winston/dist/winston/exception-stream.js b/build/node_modules/winston/dist/winston/exception-stream.js index 6e097dc4..56deb378 100644 --- a/build/node_modules/winston/dist/winston/exception-stream.js +++ b/build/node_modules/winston/dist/winston/exception-stream.js @@ -6,25 +6,25 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } diff --git a/build/node_modules/winston/dist/winston/logger.js b/build/node_modules/winston/dist/winston/logger.js index 7741799e..81af665c 100644 --- a/build/node_modules/winston/dist/winston/logger.js +++ b/build/node_modules/winston/dist/winston/logger.js @@ -8,25 +8,25 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -161,6 +161,15 @@ var Logger = /*#__PURE__*/function (_Transform) { this.levels = levels || this.levels || config.npm.levels; this.level = level; + + if (this.exceptions) { + this.exceptions.unhandle(); + } + + if (this.rejections) { + this.rejections.unhandle(); + } + this.exceptions = new ExceptionHandler(this); this.rejections = new RejectionHandler(this); this.profilers = {}; @@ -275,7 +284,7 @@ var Logger = /*#__PURE__*/function (_Transform) { if (arguments.length === 2) { - var _this$write; + var _msg; if (msg && _typeof(msg) === 'object') { msg[LEVEL] = msg.level = level; @@ -286,7 +295,11 @@ var Logger = /*#__PURE__*/function (_Transform) { return this; } - this.write((_this$write = {}, _defineProperty(_this$write, LEVEL, level), _defineProperty(_this$write, "level", level), _defineProperty(_this$write, "message", msg), _this$write)); + msg = (_msg = {}, _defineProperty(_msg, LEVEL, level), _defineProperty(_msg, "level", level), _defineProperty(_msg, "message", msg), _msg); + + this._addDefaultMeta(msg); + + this.write(msg); return this; } @@ -358,10 +371,9 @@ var Logger = /*#__PURE__*/function (_Transform) { try { this.push(this.format.transform(info, this.format.options)); - } catch (ex) { - throw ex; } finally { - // eslint-disable-next-line callback-return + this._writableState.sync = false; // eslint-disable-next-line callback-return + callback(); } } @@ -464,6 +476,8 @@ var Logger = /*#__PURE__*/function (_Transform) { }, { key: "close", value: function close() { + this.exceptions.unhandle(); + this.rejections.unhandle(); this.clear(); this.emit('close'); return this; diff --git a/build/node_modules/winston/dist/winston/profiler.js b/build/node_modules/winston/dist/winston/profiler.js index 236f6e48..201edc48 100644 --- a/build/node_modules/winston/dist/winston/profiler.js +++ b/build/node_modules/winston/dist/winston/profiler.js @@ -11,13 +11,13 @@ * @private */ -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } module.exports = /*#__PURE__*/function () { /** diff --git a/build/node_modules/winston/dist/winston/rejection-handler.js b/build/node_modules/winston/dist/winston/rejection-handler.js index 36cd3d84..af49e540 100644 --- a/build/node_modules/winston/dist/winston/rejection-handler.js +++ b/build/node_modules/winston/dist/winston/rejection-handler.js @@ -10,7 +10,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var os = require('os'); @@ -103,18 +103,18 @@ module.exports = /*#__PURE__*/function () { }, { key: "getAllInfo", value: function getAllInfo(err) { - var message = err.message; + var message = null; - if (!message && typeof err === 'string') { - message = err; + if (err) { + message = typeof err === 'string' ? err : err.message; } return { error: err, // TODO (indexzero): how do we configure this? level: 'error', - message: ["unhandledRejection: ".concat(message || '(no error message)'), err.stack || ' No stack trace'].join('\n'), - stack: err.stack, + message: ["unhandledRejection: ".concat(message || '(no error message)'), err && err.stack || ' No stack trace'].join('\n'), + stack: err && err.stack, exception: true, date: new Date().toString(), process: this.getProcessInfo(), diff --git a/build/node_modules/winston/dist/winston/transports/console.js b/build/node_modules/winston/dist/winston/transports/console.js index c58394a0..f6307499 100644 --- a/build/node_modules/winston/dist/winston/transports/console.js +++ b/build/node_modules/winston/dist/winston/transports/console.js @@ -8,25 +8,25 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -66,7 +66,7 @@ module.exports = /*#__PURE__*/function (_TransportStream) { _this.name = options.name || 'console'; _this.stderrLevels = _this._stringArrayToSet(options.stderrLevels); _this.consoleWarnLevels = _this._stringArrayToSet(options.consoleWarnLevels); - _this.eol = options.eol || os.EOL; + _this.eol = typeof options.eol === 'string' ? options.eol : os.EOL; _this.setMaxListeners(30); diff --git a/build/node_modules/winston/dist/winston/transports/file.js b/build/node_modules/winston/dist/winston/transports/file.js index ddeacd08..8f586201 100644 --- a/build/node_modules/winston/dist/winston/transports/file.js +++ b/build/node_modules/winston/dist/winston/transports/file.js @@ -8,25 +8,25 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -123,7 +123,7 @@ module.exports = /*#__PURE__*/function (_TransportStream) { _this.rotationFormat = options.rotationFormat || false; _this.zippedArchive = options.zippedArchive || false; _this.maxFiles = options.maxFiles || null; - _this.eol = options.eol || os.EOL; + _this.eol = typeof options.eol === 'string' ? options.eol : os.EOL; _this.tailable = options.tailable || false; // Internal state variables representing the number of files this instance // has created and the current size (in bytes) of the current logfile. diff --git a/build/node_modules/winston/dist/winston/transports/http.js b/build/node_modules/winston/dist/winston/transports/http.js index b9a4135c..9548e829 100644 --- a/build/node_modules/winston/dist/winston/transports/http.js +++ b/build/node_modules/winston/dist/winston/transports/http.js @@ -6,11 +6,11 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -18,19 +18,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -42,6 +42,8 @@ var _require = require('readable-stream'), Stream = _require.Stream; var TransportStream = require('winston-transport'); + +var jsonStringify = require('safe-stable-stringify'); /** * Transport for outputting to a json-rpc server. * @type {Stream} @@ -59,6 +61,7 @@ module.exports = /*#__PURE__*/function (_TransportStream) { * persisting log messages and metadata to a terminal or TTY. * @param {!Object} [options={}] - Options for this instance. */ + // eslint-disable-next-line max-statements function Http() { var _this; @@ -77,6 +80,12 @@ module.exports = /*#__PURE__*/function (_TransportStream) { _this.agent = options.agent; _this.headers = options.headers || {}; _this.headers['content-type'] = 'application/json'; + _this.batch = options.batch || false; + _this.batchInterval = options.batchInterval || 5000; + _this.batchCount = options.batchCount || 10; + _this.batchOptions = []; + _this.batchTimeoutID = -1; + _this.batchCallback = {}; if (!_this.port) { _this.port = _this.ssl ? 443 : 80; @@ -233,8 +242,77 @@ module.exports = /*#__PURE__*/function (_TransportStream) { var auth = options.auth || this.auth; var path = options.path || this.path || ''; delete options.auth; - delete options.path; // Prepare options for outgoing HTTP request + delete options.path; + + if (this.batch) { + this._doBatch(options, callback, auth, path); + } else { + this._doRequest(options, callback, auth, path); + } + } + /** + * Send or memorize the options according to batch configuration + * @param {function} options - Options to sent the request. + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + + }, { + key: "_doBatch", + value: function _doBatch(options, callback, auth, path) { + this.batchOptions.push(options); + + if (this.batchOptions.length === 1) { + // First message stored, it's time to start the timeout! + var me = this; + this.batchCallback = callback; + this.batchTimeoutID = setTimeout(function () { + // timeout is reached, send all messages to endpoint + me.batchTimeoutID = -1; + + me._doBatchRequest(me.batchCallback, auth, path); + }, this.batchInterval); + } + + if (this.batchOptions.length === this.batchCount) { + // max batch count is reached, send all messages to endpoint + this._doBatchRequest(this.batchCallback, auth, path); + } + } + /** + * Initiate a request with the memorized batch options, stop the batch timeout + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + + }, { + key: "_doBatchRequest", + value: function _doBatchRequest(callback, auth, path) { + if (this.batchTimeoutID > 0) { + clearTimeout(this.batchTimeoutID); + this.batchTimeoutID = -1; + } + + var batchOptionsCopy = this.batchOptions.slice(); + this.batchOptions = []; + this._doRequest(batchOptionsCopy, callback, auth, path); + } + /** + * Make a request to a winstond server or any http server which can + * handle json-rpc. + * @param {function} options - Options to sent the request. + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + + }, { + key: "_doRequest", + value: function _doRequest(options, callback, auth, path) { + // Prepare options for outgoing HTTP request var headers = Object.assign({}, this.headers); if (auth && auth.bearer) { @@ -256,7 +334,7 @@ module.exports = /*#__PURE__*/function (_TransportStream) { return callback(null, res); }).resume(); }); - req.end(Buffer.from(JSON.stringify(options), 'utf8')); + req.end(Buffer.from(jsonStringify(options), 'utf8')); } }]); diff --git a/build/node_modules/winston/dist/winston/transports/stream.js b/build/node_modules/winston/dist/winston/transports/stream.js index 57fc0194..7b548032 100644 --- a/build/node_modules/winston/dist/winston/transports/stream.js +++ b/build/node_modules/winston/dist/winston/transports/stream.js @@ -6,25 +6,25 @@ */ 'use strict'; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -73,7 +73,7 @@ module.exports = /*#__PURE__*/function (_TransportStream) { _this._stream.setMaxListeners(Infinity); _this.isObjectMode = options.stream._writableState.objectMode; - _this.eol = options.eol || os.EOL; + _this.eol = typeof options.eol === 'string' ? options.eol : os.EOL; return _this; } /** diff --git a/build/node_modules/winston/index.d.ts b/build/node_modules/winston/index.d.ts index 027379c3..cecc834e 100644 --- a/build/node_modules/winston/index.d.ts +++ b/build/node_modules/winston/index.d.ts @@ -33,6 +33,21 @@ declare namespace winston { new(logger: Logger): ExceptionHandler; } + + interface RejectionHandler { + logger: Logger; + handlers: Map; + catcher: Function | boolean; + + handle(...transports: Transport[]): void; + unhandle(...transports: Transport[]): void; + getAllInfo(err: string | Error): object; + getProcessInfo(): object; + getOsInfo(): object; + getTrace(err: Error): object; + + new(logger: Logger): RejectionHandler; + } interface QueryOptions { rows?: number; @@ -83,7 +98,9 @@ declare namespace winston { defaultMeta?: any; transports?: Transport[] | Transport; handleExceptions?: boolean; + handleRejections?: boolean; exceptionHandlers?: any; + rejectionHandlers?: any; } interface Logger extends NodeJSStream.Transform { @@ -93,6 +110,7 @@ declare namespace winston { level: string; transports: Transport[]; exceptions: ExceptionHandler; + rejections: RejectionHandler; profilers: object; exitOnError: Function | boolean; defaultMeta?: any; @@ -158,6 +176,7 @@ declare namespace winston { let version: string; let ExceptionHandler: ExceptionHandler; + let RejectionHandler: RejectionHandler; let Container: Container; let loggers: Container; @@ -186,6 +205,7 @@ declare namespace winston { let child: (options: Object) => Logger; let level: string; let exceptions: ExceptionHandler; + let rejections: RejectionHandler; let exitOnError: Function | boolean; // let default: object; } diff --git a/build/node_modules/winston/lib/winston.js b/build/node_modules/winston/lib/winston.js index e0c4e3ca..2357d99e 100644 --- a/build/node_modules/winston/lib/winston.js +++ b/build/node_modules/winston/lib/winston.js @@ -10,62 +10,56 @@ const logform = require('logform'); const { warn } = require('./winston/common'); -/** - * Setup to expose. - * @type {Object} - */ -const winston = exports; - /** * Expose version. Use `require` method for `webpack` support. * @type {string} */ -winston.version = require('../package.json').version; +exports.version = require('../package.json').version; /** * Include transports defined by default by winston * @type {Array} */ -winston.transports = require('./winston/transports'); +exports.transports = require('./winston/transports'); /** * Expose utility methods * @type {Object} */ -winston.config = require('./winston/config'); +exports.config = require('./winston/config'); /** * Hoist format-related functionality from logform. * @type {Object} */ -winston.addColors = logform.levels; +exports.addColors = logform.levels; /** * Hoist format-related functionality from logform. * @type {Object} */ -winston.format = logform.format; +exports.format = logform.format; /** * Expose core Logging-related prototypes. * @type {function} */ -winston.createLogger = require('./winston/create-logger'); +exports.createLogger = require('./winston/create-logger'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.ExceptionHandler = require('./winston/exception-handler'); +exports.ExceptionHandler = require('./winston/exception-handler'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.RejectionHandler = require('./winston/rejection-handler'); +exports.RejectionHandler = require('./winston/rejection-handler'); /** * Expose core Logging-related prototypes. * @type {Container} */ -winston.Container = require('./winston/container'); +exports.Container = require('./winston/container'); /** * Expose core Logging-related prototypes. * @type {Object} */ -winston.Transport = require('winston-transport'); +exports.Transport = require('winston-transport'); /** * We create and expose a default `Container` to `winston.loggers` so that the * programmer may manage multiple `winston.Logger` instances without any @@ -77,7 +71,7 @@ winston.Transport = require('winston-transport'); * // some-file2.js * const logger = require('winston').loggers.get('something'); */ -winston.loggers = new winston.Container(); +exports.loggers = new exports.Container(); /** * We create and expose a 'defaultLogger' so that the programmer may do the @@ -87,10 +81,10 @@ winston.loggers = new winston.Container(); * winston.log('info', 'some message'); * winston.error('some error'); */ -const defaultLogger = winston.createLogger(); +const defaultLogger = exports.createLogger(); // Pass through the target methods onto `winston. -Object.keys(winston.config.npm.levels) +Object.keys(exports.config.npm.levels) .concat([ 'log', 'query', @@ -108,7 +102,7 @@ Object.keys(winston.config.npm.levels) 'child' ]) .forEach( - method => (winston[method] = (...args) => defaultLogger[method](...args)) + method => (exports[method] = (...args) => defaultLogger[method](...args)) ); /** @@ -116,7 +110,7 @@ Object.keys(winston.config.npm.levels) * by winston. * @type {string} */ -Object.defineProperty(winston, 'level', { +Object.defineProperty(exports, 'level', { get() { return defaultLogger.level; }, @@ -130,7 +124,7 @@ Object.defineProperty(winston, 'level', { * `unhandleExceptions`. * @type {Object} */ -Object.defineProperty(winston, 'exceptions', { +Object.defineProperty(exports, 'exceptions', { get() { return defaultLogger.exceptions; } @@ -142,7 +136,7 @@ Object.defineProperty(winston, 'exceptions', { * @type {Logger} */ ['exitOnError'].forEach(prop => { - Object.defineProperty(winston, prop, { + Object.defineProperty(exports, prop, { get() { return defaultLogger[prop]; }, @@ -156,7 +150,7 @@ Object.defineProperty(winston, 'exceptions', { * The default transports and exceptionHandlers for the default winston logger. * @type {Object} */ -Object.defineProperty(winston, 'default', { +Object.defineProperty(exports, 'default', { get() { return { exceptionHandlers: defaultLogger.exceptionHandlers, @@ -168,15 +162,15 @@ Object.defineProperty(winston, 'default', { // Have friendlier breakage notices for properties that were exposed by default // on winston < 3.0. -warn.deprecated(winston, 'setLevels'); -warn.forFunctions(winston, 'useFormat', ['cli']); -warn.forProperties(winston, 'useFormat', ['padLevels', 'stripColors']); -warn.forFunctions(winston, 'deprecated', [ +warn.deprecated(exports, 'setLevels'); +warn.forFunctions(exports, 'useFormat', ['cli']); +warn.forProperties(exports, 'useFormat', ['padLevels', 'stripColors']); +warn.forFunctions(exports, 'deprecated', [ 'addRewriter', 'addFilter', 'clone', 'extend' ]); -warn.forProperties(winston, 'deprecated', ['emitErrs', 'levelLength']); +warn.forProperties(exports, 'deprecated', ['emitErrs', 'levelLength']); // Throw a useful error when users attempt to run `new winston.Logger`. -warn.moved(winston, 'createLogger', 'Logger'); +warn.moved(exports, 'createLogger', 'Logger'); diff --git a/build/node_modules/winston/lib/winston/config/index.d.ts b/build/node_modules/winston/lib/winston/config/index.d.ts index 053129d0..639f317e 100644 --- a/build/node_modules/winston/lib/winston/config/index.d.ts +++ b/build/node_modules/winston/lib/winston/config/index.d.ts @@ -57,6 +57,7 @@ declare namespace winston { error: string | string[]; warn: string | string[]; info: string | string[]; + http: string | string[]; verbose: string | string[]; debug: string | string[]; silly: string | string[]; diff --git a/build/node_modules/winston/lib/winston/container.js b/build/node_modules/winston/lib/winston/container.js index d1fa6810..1c6f1140 100644 --- a/build/node_modules/winston/lib/winston/container.js +++ b/build/node_modules/winston/lib/winston/container.js @@ -25,7 +25,7 @@ module.exports = class Container { } /** - * Retreives a `winston.Logger` instance for the specified `id`. If an + * Retrieves a `winston.Logger` instance for the specified `id`. If an * instance does not exist, one is created. * @param {!string} id - The id of the Logger to get. * @param {?Object} [options] - Options for the Logger instance. diff --git a/build/node_modules/winston/lib/winston/logger.js b/build/node_modules/winston/lib/winston/logger.js index 89dd4aca..febfb67f 100644 --- a/build/node_modules/winston/lib/winston/logger.js +++ b/build/node_modules/winston/lib/winston/logger.js @@ -107,6 +107,12 @@ class Logger extends Transform { // Hoist other options onto this instance. this.levels = levels || this.levels || config.npm.levels; this.level = level; + if (this.exceptions) { + this.exceptions.unhandle(); + } + if (this.rejections) { + this.rejections.unhandle(); + } this.exceptions = new ExceptionHandler(this); this.rejections = new RejectionHandler(this); this.profilers = {}; @@ -220,7 +226,9 @@ class Logger extends Transform { return this; } - this.write({ [LEVEL]: level, level, message: msg }); + msg = { [LEVEL]: level, level, message: msg }; + this._addDefaultMeta(msg); + this.write(msg); return this; } @@ -303,9 +311,8 @@ class Logger extends Transform { // guarantee that the streams callback is invoked so that we can continue flowing. try { this.push(this.format.transform(info, this.format.options)); - } catch (ex) { - throw ex; } finally { + this._writableState.sync = false; // eslint-disable-next-line callback-return callback(); } @@ -402,6 +409,8 @@ class Logger extends Transform { * @returns {Logger} - TODO: add return description. */ close() { + this.exceptions.unhandle(); + this.rejections.unhandle(); this.clear(); this.emit('close'); return this; diff --git a/build/node_modules/winston/lib/winston/rejection-handler.js b/build/node_modules/winston/lib/winston/rejection-handler.js index 7d8f65e5..d287f518 100644 --- a/build/node_modules/winston/lib/winston/rejection-handler.js +++ b/build/node_modules/winston/lib/winston/rejection-handler.js @@ -74,9 +74,9 @@ module.exports = class RejectionHandler { * @returns {mixed} - TODO: add return description. */ getAllInfo(err) { - let { message } = err; - if (!message && typeof err === 'string') { - message = err; + let message = null; + if (err) { + message = typeof err === 'string' ? err : err.message; } return { @@ -85,9 +85,9 @@ module.exports = class RejectionHandler { level: 'error', message: [ `unhandledRejection: ${message || '(no error message)'}`, - err.stack || ' No stack trace' + err && err.stack || ' No stack trace' ].join('\n'), - stack: err.stack, + stack: err && err.stack, exception: true, date: new Date().toString(), process: this.getProcessInfo(), diff --git a/build/node_modules/winston/lib/winston/transports/console.js b/build/node_modules/winston/lib/winston/transports/console.js index 1bb08978..b54f3da9 100644 --- a/build/node_modules/winston/lib/winston/transports/console.js +++ b/build/node_modules/winston/lib/winston/transports/console.js @@ -30,7 +30,7 @@ module.exports = class Console extends TransportStream { this.name = options.name || 'console'; this.stderrLevels = this._stringArrayToSet(options.stderrLevels); this.consoleWarnLevels = this._stringArrayToSet(options.consoleWarnLevels); - this.eol = options.eol || os.EOL; + this.eol = (typeof options.eol === 'string') ? options.eol : os.EOL; this.setMaxListeners(30); } diff --git a/build/node_modules/winston/lib/winston/transports/file.js b/build/node_modules/winston/lib/winston/transports/file.js index d0314be9..60af7f58 100644 --- a/build/node_modules/winston/lib/winston/transports/file.js +++ b/build/node_modules/winston/lib/winston/transports/file.js @@ -77,7 +77,7 @@ module.exports = class File extends TransportStream { this.rotationFormat = options.rotationFormat || false; this.zippedArchive = options.zippedArchive || false; this.maxFiles = options.maxFiles || null; - this.eol = options.eol || os.EOL; + this.eol = (typeof options.eol === 'string') ? options.eol : os.EOL; this.tailable = options.tailable || false; // Internal state variables representing the number of files this instance diff --git a/build/node_modules/winston/lib/winston/transports/http.js b/build/node_modules/winston/lib/winston/transports/http.js index ad29ef6e..66a5df90 100644 --- a/build/node_modules/winston/lib/winston/transports/http.js +++ b/build/node_modules/winston/lib/winston/transports/http.js @@ -11,6 +11,7 @@ const http = require('http'); const https = require('https'); const { Stream } = require('readable-stream'); const TransportStream = require('winston-transport'); +const jsonStringify = require('safe-stable-stringify'); /** * Transport for outputting to a json-rpc server. @@ -23,6 +24,7 @@ module.exports = class Http extends TransportStream { * persisting log messages and metadata to a terminal or TTY. * @param {!Object} [options={}] - Options for this instance. */ + // eslint-disable-next-line max-statements constructor(options = {}) { super(options); @@ -36,6 +38,12 @@ module.exports = class Http extends TransportStream { this.agent = options.agent; this.headers = options.headers || {}; this.headers['content-type'] = 'application/json'; + this.batch = options.batch || false; + this.batchInterval = options.batchInterval || 5000; + this.batchCount = options.batchCount || 10; + this.batchOptions = []; + this.batchTimeoutID = -1; + this.batchCallback = {}; if (!this.port) { this.port = this.ssl ? 443 : 80; @@ -177,6 +185,63 @@ module.exports = class Http extends TransportStream { delete options.auth; delete options.path; + if (this.batch) { + this._doBatch(options, callback, auth, path); + } else { + this._doRequest(options, callback, auth, path); + } + } + + /** + * Send or memorize the options according to batch configuration + * @param {function} options - Options to sent the request. + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + _doBatch(options, callback, auth, path) { + this.batchOptions.push(options); + if (this.batchOptions.length === 1) { + // First message stored, it's time to start the timeout! + const me = this; + this.batchCallback = callback; + this.batchTimeoutID = setTimeout(function () { + // timeout is reached, send all messages to endpoint + me.batchTimeoutID = -1; + me._doBatchRequest(me.batchCallback, auth, path); + }, this.batchInterval); + } + if (this.batchOptions.length === this.batchCount) { + // max batch count is reached, send all messages to endpoint + this._doBatchRequest(this.batchCallback, auth, path); + } + } + + /** + * Initiate a request with the memorized batch options, stop the batch timeout + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + _doBatchRequest(callback, auth, path) { + if (this.batchTimeoutID > 0) { + clearTimeout(this.batchTimeoutID); + this.batchTimeoutID = -1; + } + const batchOptionsCopy = this.batchOptions.slice(); + this.batchOptions = []; + this._doRequest(batchOptionsCopy, callback, auth, path); + } + + /** + * Make a request to a winstond server or any http server which can + * handle json-rpc. + * @param {function} options - Options to sent the request. + * @param {function} callback - Continuation to respond to when complete. + * @param {Object?} auth - authentication options + * @param {string} path - request path + */ + _doRequest(options, callback, auth, path) { // Prepare options for outgoing HTTP request const headers = Object.assign({}, this.headers); if (auth && auth.bearer) { @@ -197,6 +262,6 @@ module.exports = class Http extends TransportStream { req.on('response', res => ( res.on('end', () => callback(null, res)).resume() )); - req.end(Buffer.from(JSON.stringify(options), 'utf8')); + req.end(Buffer.from(jsonStringify(options), 'utf8')); } }; diff --git a/build/node_modules/winston/lib/winston/transports/stream.js b/build/node_modules/winston/lib/winston/transports/stream.js index 378520a3..8027f640 100644 --- a/build/node_modules/winston/lib/winston/transports/stream.js +++ b/build/node_modules/winston/lib/winston/transports/stream.js @@ -35,7 +35,7 @@ module.exports = class Stream extends TransportStream { this._stream = options.stream; this._stream.setMaxListeners(Infinity); this.isObjectMode = options.stream._writableState.objectMode; - this.eol = options.eol || os.EOL; + this.eol = (typeof options.eol === 'string') ? options.eol : os.EOL; } /** diff --git a/build/node_modules/winston/node_modules/readable-stream/CONTRIBUTING.md b/build/node_modules/winston/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58d..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/build/node_modules/winston/node_modules/readable-stream/GOVERNANCE.md b/build/node_modules/winston/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93f..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/build/node_modules/winston/node_modules/readable-stream/LICENSE b/build/node_modules/winston/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b2..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" diff --git a/build/node_modules/winston/node_modules/readable-stream/README.md b/build/node_modules/winston/node_modules/readable-stream/README.md deleted file mode 100644 index 6f035ab1..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# readable-stream - -***Node.js core streams for userland*** [![Build Status](https://travis-ci.com/nodejs/readable-stream.svg?branch=master)](https://travis-ci.com/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readabe-stream.svg)](https://saucelabs.com/u/readabe-stream) - -```bash -npm install --save readable-stream -``` - -This package is a mirror of the streams implementations in Node.js. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v10.19.0/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -## Version 3.x.x - -v3.x.x of `readable-stream` is a cut from Node 10. This version supports Node 6, 8, and 10, as well as evergreen browsers, IE 11 and latest Safari. The breaking changes introduced by v3 are composed by the combined breaking changes in [Node v9](https://nodejs.org/en/blog/release/v9.0.0/) and [Node v10](https://nodejs.org/en/blog/release/v10.0.0/), as follows: - -1. Error codes: https://github.com/nodejs/node/pull/13310, - https://github.com/nodejs/node/pull/13291, - https://github.com/nodejs/node/pull/16589, - https://github.com/nodejs/node/pull/15042, - https://github.com/nodejs/node/pull/15665, - https://github.com/nodejs/readable-stream/pull/344 -2. 'readable' have precedence over flowing - https://github.com/nodejs/node/pull/18994 -3. make virtual methods errors consistent - https://github.com/nodejs/node/pull/18813 -4. updated streams error handling - https://github.com/nodejs/node/pull/18438 -5. writable.end should return this. - https://github.com/nodejs/node/pull/18780 -6. readable continues to read when push('') - https://github.com/nodejs/node/pull/18211 -7. add custom inspect to BufferList - https://github.com/nodejs/node/pull/17907 -8. always defer 'readable' with nextTick - https://github.com/nodejs/node/pull/17979 - -## Version 2.x.x -v2.x.x of `readable-stream` is a cut of the stream module from Node 8 (there have been no semver-major changes from Node 4 to 8). This version supports all Node.js versions from 0.8, as well as evergreen browsers and IE 10 & 11. - -### Big Thanks - -Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs][sauce] - -# Usage - -You can swap your `require('stream')` with `require('readable-stream')` -without any changes, if you are just using one of the main classes and -functions. - -```js -const { - Readable, - Writable, - Transform, - Duplex, - pipeline, - finished -} = require('readable-stream') -```` - -Note that `require('stream')` will return `Stream`, while -`require('readable-stream')` will return `Readable`. We discourage using -whatever is exported directly, but rather use one of the properties as -shown in the example above. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - - -## Team Members - -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> -* **Yoshua Wyuts** ([@yoshuawuyts](https://github.com/yoshuawuyts)) <yoshuawuyts@gmail.com> - -[sauce]: https://saucelabs.com diff --git a/build/node_modules/winston/node_modules/readable-stream/errors-browser.js b/build/node_modules/winston/node_modules/readable-stream/errors-browser.js deleted file mode 100644 index fb8e73e1..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/errors-browser.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; - -function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } - -var codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error; - } - - function getMessage(arg1, arg2, arg3) { - if (typeof message === 'string') { - return message; - } else { - return message(arg1, arg2, arg3); - } - } - - var NodeError = - /*#__PURE__*/ - function (_Base) { - _inheritsLoose(NodeError, _Base); - - function NodeError(arg1, arg2, arg3) { - return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; - } - - return NodeError; - }(Base); - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - codes[code] = NodeError; -} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js - - -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - var len = expected.length; - expected = expected.map(function (i) { - return String(i); - }); - - if (len > 2) { - return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; - } else if (len === 2) { - return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); - } else { - return "of ".concat(thing, " ").concat(expected[0]); - } - } else { - return "of ".concat(thing, " ").concat(String(expected)); - } -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith - - -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith - - -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - - return str.substring(this_len - search.length, this_len) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes - - -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"'; -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - var determiner; - - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - var msg; - - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } else { - var type = includes(name, '.') ? 'property' : 'argument'; - msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } - - msg += ". Received type ".concat(typeof actual); - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented'; -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg; -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); -module.exports.codes = codes; diff --git a/build/node_modules/winston/node_modules/readable-stream/errors.js b/build/node_modules/winston/node_modules/readable-stream/errors.js deleted file mode 100644 index 8471526d..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/errors.js +++ /dev/null @@ -1,116 +0,0 @@ -'use strict'; - -const codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error - } - - function getMessage (arg1, arg2, arg3) { - if (typeof message === 'string') { - return message - } else { - return message(arg1, arg2, arg3) - } - } - - class NodeError extends Base { - constructor (arg1, arg2, arg3) { - super(getMessage(arg1, arg2, arg3)); - } - } - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - - codes[code] = NodeError; -} - -// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - const len = expected.length; - expected = expected.map((i) => String(i)); - if (len > 2) { - return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` + - expected[len - 1]; - } else if (len === 2) { - return `one of ${thing} ${expected[0]} or ${expected[1]}`; - } else { - return `of ${thing} ${expected[0]}`; - } - } else { - return `of ${thing} ${String(expected)}`; - } -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - return str.substring(this_len - search.length, this_len) === search; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"' -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - let determiner; - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - let msg; - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`; - } else { - const type = includes(name, '.') ? 'property' : 'argument'; - msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`; - } - - msg += `. Received type ${typeof actual}`; - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented' -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); - -module.exports.codes = codes; diff --git a/build/node_modules/winston/node_modules/readable-stream/experimentalWarning.js b/build/node_modules/winston/node_modules/readable-stream/experimentalWarning.js deleted file mode 100644 index 78e84149..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/experimentalWarning.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -var experimentalWarnings = new Set(); - -function emitExperimentalWarning(feature) { - if (experimentalWarnings.has(feature)) return; - var msg = feature + ' is an experimental feature. This feature could ' + - 'change at any time'; - experimentalWarnings.add(feature); - process.emitWarning(msg, 'ExperimentalWarning'); -} - -function noop() {} - -module.exports.emitExperimentalWarning = process.emitWarning - ? emitExperimentalWarning - : noop; diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_duplex.js b/build/node_modules/winston/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 67525192..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. -'use strict'; -/**/ - -var objectKeys = Object.keys || function (obj) { - var keys = []; - - for (var key in obj) { - keys.push(key); - } - - return keys; -}; -/**/ - - -module.exports = Duplex; - -var Readable = require('./_stream_readable'); - -var Writable = require('./_stream_writable'); - -require('inherits')(Duplex, Readable); - -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); - - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; - - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; - - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); // the no-half-open enforcer - -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; // no more data can be written. - // But allow more writes to happen in this tick. - - process.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_passthrough.js b/build/node_modules/winston/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 32e7414c..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -require('inherits')(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_readable.js b/build/node_modules/winston/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 192d4514..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -'use strict'; - -module.exports = Readable; -/**/ - -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; -/**/ - -var EE = require('events').EventEmitter; - -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ - - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -/**/ - - -var debugUtil = require('util'); - -var debug; - -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; -} -/**/ - - -var BufferList = require('./internal/streams/buffer_list'); - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. - - -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; - -require('inherits')(Readable, Stream); - -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - - this.sync = true; // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') - - this.autoDestroy = !!options.autoDestroy; // has it been destroyed - - this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s - - this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled - - this.readingMore = false; - this.decoder = null; - this.encoding = null; - - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); // legacy - - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } - - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; - -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; // Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. - - -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; // Unshift should *always* be something directly out of read() - - -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; - - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; - - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. - - - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } - - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } - - return er; -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; // backwards compatibility. - - -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 - - this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: - - var p = this._readableState.buffer.head; - var content = ''; - - while (p !== null) { - content += decoder.write(p.data); - p = p.next; - } - - this._readableState.buffer.clear(); - - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; // Don't raise the hwm > 1GB - - -var MAX_HWM = 0x40000000; - -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - - return n; -} // This function is designed to be inlinable, so please take care when making -// changes to the function body. - - -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } // If we're asking for more than the current hwm, then raise the hwm. - - - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; // Don't have enough - - if (!state.ended) { - state.needReadable = true; - return 0; - } - - return state.length; -} // you can override either this method, or the async _read(n) below. - - -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. - - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - // if we need a readable event, then we need to do some reading. - - - var doRead = state.needReadable; - debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some - - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - - - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; // if the length is currently zero, then we *need* a readable event. - - if (state.length === 0) state.needReadable = true; // call internal read method - - this._read(state.highWaterMark); - - state.sync = false; // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. - - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - return ret; -}; - -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; - - if (state.decoder) { - var chunk = state.decoder.end(); - - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - - state.ended = true; - - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; - - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} // Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. - - -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; - - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } -} - -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); - - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. - - - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} // at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. - - -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) // didn't get any data, stop spinning. - break; - } - - state.readingMore = false; -} // abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. - - -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - - case 1: - state.pipes = [state.pipes, dest]; - break; - - default: - state.pipes.push(dest); - break; - } - - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - - - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; - - function cleanup() { - debug('cleanup'); // cleanup event handlers once the pipe is broken - - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - src.on('data', ondata); - - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); - - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } - - src.pause(); - } - } // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - - - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } // Make sure our error handler is attached before userland ones. - - - prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. - - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - - dest.once('close', onclose); - - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } // tell the dest that it's being piped to - - - dest.emit('pipe', src); // start the flow if it hasn't been started already. - - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; // if we're not piping anywhere, then do nothing. - - if (state.pipesCount === 0) return this; // just one destination. most common case. - - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; // got a match. - - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } // slow case. multiple pipe destinations. - - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - } - - return this; - } // try to find the right one. - - - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; // set up data events if they are asked for -// Ensure readable listeners eventually get something - - -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; - - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused - - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); - - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } - } - - return res; -}; - -Readable.prototype.addListener = Readable.prototype.on; - -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); - - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - - return res; -}; - -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; - - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} // pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. - - -Readable.prototype.resume = function () { - var state = this._readableState; - - if (!state.flowing) { - debug('resume'); // we flow only if there is no one listening - // for readable, but we still have to call - // resume() - - state.flowing = !state.readableListening; - resume(this, state); - } - - state.paused = false; - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - debug('resume', state.reading); - - if (!state.reading) { - stream.read(0); - } - - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - - this._readableState.paused = true; - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - - while (state.flowing && stream.read() !== null) { - ; - } -} // wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. - - -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); - - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode - - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - - if (!ret) { - paused = true; - stream.pause(); - } - }); // proxy all the other methods. - // important when wrapping filters and duplexes. - - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } // proxy certain important events. - - - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } // when we try to consume some more bytes, simply unpause the - // underlying stream. - - - this._read = function (n) { - debug('wrapped _read', n); - - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); - } - - return createReadableStreamAsyncIterator(this); - }; -} - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); // exposed for testing purposes only. - -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; - } -}); // Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. - -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); - } - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); - - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. - - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; - - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } - } - } -} - -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = require('./internal/streams/from'); - } - - return from(Readable, iterable, opts); - }; -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - - return -1; -} \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_transform.js b/build/node_modules/winston/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 41a738c4..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. -'use strict'; - -module.exports = Transform; - -var _require$codes = require('../errors').codes, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, - ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; - -var Duplex = require('./_stream_duplex'); - -require('inherits')(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - - if (cb === null) { - return this.emit('error', new ERR_MULTIPLE_CALLBACK()); - } - - ts.writechunk = null; - ts.writecb = null; - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; // start out asking for a readable event once data is transformed. - - this._readableState.needReadable = true; // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } // When the writable side finishes, then flush out anything remaining. - - - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function' && !this._readableState.destroyed) { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; // This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. - - -Transform.prototype._transform = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; // Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. - - -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && !ts.transforming) { - ts.transforming = true; - - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); // TODO(BridgeAR): Write a test for these two error cases - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - - if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); - if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); - return stream.push(null); -} \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_writable.js b/build/node_modules/winston/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index a2634d7c..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,697 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. -'use strict'; - -module.exports = Writable; -/* */ - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} // It seems a linked list but it is not -// there will be only 2 of these for each stream - - -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ - - -var Duplex; -/**/ - -Writable.WritableState = WritableState; -/**/ - -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ - -var Stream = require('./internal/streams/stream'); -/**/ - - -var Buffer = require('buffer').Buffer; - -var OurUint8Array = global.Uint8Array || function () {}; - -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} - -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -var destroyImpl = require('./internal/streams/destroy'); - -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; - -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; - -var errorOrDestroy = destroyImpl.errorOrDestroy; - -require('inherits')(Writable, Stream); - -function nop() {} - -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream - // contains buffers or objects. - - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called - - this.finalCalled = false; // drain event flag. - - this.needDrain = false; // at the start of calling end() - - this.ending = false; // when end() has been called, and returned - - this.ended = false; // when 'finish' is emitted - - this.finished = false; // has it been destroyed - - this.destroyed = false; // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - - this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - - this.length = 0; // a flag to see when we're in the middle of a write. - - this.writing = false; // when true all writes will be buffered until .uncork() call - - this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - - this.sync = true; // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - - this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) - - this.onwrite = function (er) { - onwrite(stream, er); - }; // the callback that the user supplies to write(chunk,encoding,cb) - - - this.writecb = null; // the amount that is being written when _write is called. - - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - - this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - - this.prefinished = false; // True if the error was already emitted and should not be thrown again - - this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. - - this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') - - this.autoDestroy = !!options.autoDestroy; // count buffered requests - - this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - - while (current) { - out.push(current); - current = current.next; - } - - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); // Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. - - -var realHasInstance; - -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); // legacy. - - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} // Otherwise people can pipe Writable streams, which is just wrong. - - -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; - -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb - - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} // Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. - - -function validChunk(stream, state, chunk, cb) { - var er; - - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); - } - - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; - } - - return true; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; -}; - -Writable.prototype.cork = function () { - this._writableState.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); // if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. - -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. - - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); // this can emit finish, and it will always happen - // after error - - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); // this can emit finish, but finish must - // always follow error - - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} // Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. - - -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} // if there's something in the buffer waiting, then process it - - -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - - state.pendingcb++; - state.lastBufferedRequest = null; - - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks - - if (state.corked) { - state.corked = 1; - this.uncork(); - } // ignore unnecessary end() calls. - - - if (!state.ending) endWritable(this, state, cb); - return this; -}; - -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} - -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - - if (err) { - errorOrDestroy(stream, err); - } - - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} - -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - - if (need) { - prefinish(stream, state); - - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; - - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); - } - } - } - } - - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } - - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } // reuse the free corkReq. - - - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; - } - - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } // backward compatibility, the user is explicitly - // managing destroyed - - - this._writableState.destroyed = value; - } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; - -Writable.prototype._destroy = function (err, cb) { - cb(err); -}; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/async_iterator.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/async_iterator.js deleted file mode 100644 index 9fb615a2..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/async_iterator.js +++ /dev/null @@ -1,207 +0,0 @@ -'use strict'; - -var _Object$setPrototypeO; - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var finished = require('./end-of-stream'); - -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); - -function createIterResult(value, done) { - return { - value: value, - done: done - }; -} - -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - - if (resolve !== null) { - var data = iter[kStream].read(); // we defer if data is null - // we can be expecting either 'end' or - // 'error' - - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } - } -} - -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} - -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } - - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} - -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, - - next: function next() { - var _this = this; - - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; - - if (error !== null) { - return Promise.reject(error); - } - - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); - } - - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - - - var lastPromise = this[kLastPromise]; - var promise; - - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - - promise = new Promise(this[kHandlePromise]); - } - - this[kLastPromise] = promise; - return promise; - } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; - - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } - - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); - -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; - - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); - - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise - // returned by next() and store the error - - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } - - iterator[kError] = err; - return; - } - - var resolve = iterator[kLastResolve]; - - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); - } - - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; -}; - -module.exports = createReadableStreamAsyncIterator; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/buffer_list.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/buffer_list.js deleted file mode 100644 index cdea425f..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/buffer_list.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var _require = require('buffer'), - Buffer = _require.Buffer; - -var _require2 = require('util'), - inspect = _require2.inspect; - -var custom = inspect && inspect.custom || 'inspect'; - -function copyBuffer(src, target, offset) { - Buffer.prototype.copy.call(src, target, offset); -} - -module.exports = -/*#__PURE__*/ -function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - _createClass(BufferList, [{ - key: "push", - value: function push(v) { - var entry = { - data: v, - next: null - }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - } - }, { - key: "unshift", - value: function unshift(v) { - var entry = { - data: v, - next: this.head - }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - } - }, { - key: "shift", - value: function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - } - }, { - key: "clear", - value: function clear() { - this.head = this.tail = null; - this.length = 0; - } - }, { - key: "join", - value: function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - - while (p = p.next) { - ret += s + p.data; - } - - return ret; - } - }, { - key: "concat", - value: function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - - return ret; - } // Consumes a specified amount of bytes or characters from the buffered data. - - }, { - key: "consume", - value: function consume(n, hasStrings) { - var ret; - - if (n < this.head.data.length) { - // `slice` is the same for buffers and strings. - ret = this.head.data.slice(0, n); - this.head.data = this.head.data.slice(n); - } else if (n === this.head.data.length) { - // First chunk is a perfect match. - ret = this.shift(); - } else { - // Result spans more than one buffer. - ret = hasStrings ? this._getString(n) : this._getBuffer(n); - } - - return ret; - } - }, { - key: "first", - value: function first() { - return this.head.data; - } // Consumes a specified amount of characters from the buffered data. - - }, { - key: "_getString", - value: function _getString(n) { - var p = this.head; - var c = 1; - var ret = p.data; - n -= ret.length; - - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = str.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Consumes a specified amount of bytes from the buffered data. - - }, { - key: "_getBuffer", - value: function _getBuffer(n) { - var ret = Buffer.allocUnsafe(n); - var p = this.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = buf.slice(nb); - } - - break; - } - - ++c; - } - - this.length -= c; - return ret; - } // Make sure the linked list only shows the minimal necessary information. - - }, { - key: custom, - value: function value(_, options) { - return inspect(this, _objectSpread({}, options, { - // Only inspect one level. - depth: 0, - // It should not recurse. - customInspect: false - })); - } - }]); - - return BufferList; -}(); \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/destroy.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 3268a16f..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; // undocumented cb() API, needed for core, not for public API - -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } - - return this; - } // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - - if (this._readableState) { - this._readableState.destroyed = true; - } // if this is a duplex stream mark the writable part as destroyed as well - - - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); - } - }); - - return this; -} - -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} - -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy -}; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/end-of-stream.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/end-of-stream.js deleted file mode 100644 index 831f286d..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +++ /dev/null @@ -1,104 +0,0 @@ -// Ported from https://github.com/mafintosh/end-of-stream with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - callback.apply(this, args); - }; -} - -function noop() {} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function eos(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once(callback || noop); - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - - var onlegacyfinish = function onlegacyfinish() { - if (!stream.writable) onfinish(); - }; - - var writableEnded = stream._writableState && stream._writableState.finished; - - var onfinish = function onfinish() { - writable = false; - writableEnded = true; - if (!readable) callback.call(stream); - }; - - var readableEnded = stream._readableState && stream._readableState.endEmitted; - - var onend = function onend() { - readable = false; - readableEnded = true; - if (!writable) callback.call(stream); - }; - - var onerror = function onerror(err) { - callback.call(stream, err); - }; - - var onclose = function onclose() { - var err; - - if (readable && !readableEnded) { - if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - - if (writable && !writableEnded) { - if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - }; - - var onrequest = function onrequest() { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !stream._writableState) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -} - -module.exports = eos; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from-browser.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from-browser.js deleted file mode 100644 index a4ce56f3..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from-browser.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function () { - throw new Error('Readable.from is not available in the browser') -}; diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from.js deleted file mode 100644 index 6c412844..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/from.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE; - -function from(Readable, iterable, opts) { - var iterator; - - if (iterable && typeof iterable.next === 'function') { - iterator = iterable; - } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable); - - var readable = new Readable(_objectSpread({ - objectMode: true - }, opts)); // Reading boolean to protect against _read - // being called before last iteration completion. - - var reading = false; - - readable._read = function () { - if (!reading) { - reading = true; - next(); - } - }; - - function next() { - return _next2.apply(this, arguments); - } - - function _next2() { - _next2 = _asyncToGenerator(function* () { - try { - var _ref = yield iterator.next(), - value = _ref.value, - done = _ref.done; - - if (done) { - readable.push(null); - } else if (readable.push((yield value))) { - next(); - } else { - reading = false; - } - } catch (err) { - readable.destroy(err); - } - }); - return _next2.apply(this, arguments); - } - - return readable; -} - -module.exports = from; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/pipeline.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/pipeline.js deleted file mode 100644 index 65899098..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/pipeline.js +++ /dev/null @@ -1,97 +0,0 @@ -// Ported from https://github.com/mafintosh/pump with -// permission from the author, Mathias Buus (@mafintosh). -'use strict'; - -var eos; - -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - callback.apply(void 0, arguments); - }; -} - -var _require$codes = require('../../../errors').codes, - ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; - -function noop(err) { - // Rethrow the error if it exists to avoid swallowing it - if (err) throw err; -} - -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} - -function destroyer(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - if (eos === undefined) eos = require('./end-of-stream'); - eos(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; // request.destroy just do .end - .abort is what we want - - if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') return stream.destroy(); - callback(err || new ERR_STREAM_DESTROYED('pipe')); - }; -} - -function call(fn) { - fn(); -} - -function pipe(from, to) { - return from.pipe(to); -} - -function popCallback(streams) { - if (!streams.length) return noop; - if (typeof streams[streams.length - 1] !== 'function') return noop; - return streams.pop(); -} - -function pipeline() { - for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { - streams[_key] = arguments[_key]; - } - - var callback = popCallback(streams); - if (Array.isArray(streams[0])) streams = streams[0]; - - if (streams.length < 2) { - throw new ERR_MISSING_ARGS('streams'); - } - - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -} - -module.exports = pipeline; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/state.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/state.js deleted file mode 100644 index 19887eb8..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/state.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; - -function highWaterMarkFrom(options, isDuplex, duplexKey) { - return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; -} - -function getHighWaterMark(state, options, duplexKey, isDuplex) { - var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); - - if (hwm != null) { - if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { - var name = isDuplex ? duplexKey : 'highWaterMark'; - throw new ERR_INVALID_OPT_VALUE(name, hwm); - } - - return Math.floor(hwm); - } // Default value - - - return state.objectMode ? 16 : 16 * 1024; -} - -module.exports = { - getHighWaterMark: getHighWaterMark -}; \ No newline at end of file diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3fd..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream.js b/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b6..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/build/node_modules/winston/node_modules/readable-stream/package.json b/build/node_modules/winston/node_modules/readable-stream/package.json deleted file mode 100644 index 0f15d305..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_from": "readable-stream@^3.4.0", - "_id": "readable-stream@3.6.0", - "_inBundle": false, - "_integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "_location": "/winston/readable-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "readable-stream@^3.4.0", - "name": "readable-stream", - "escapedName": "readable-stream", - "rawSpec": "^3.4.0", - "saveSpec": null, - "fetchSpec": "^3.4.0" - }, - "_requiredBy": [ - "/winston" - ], - "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "_shasum": "337bbda3adc0706bd3e024426a286d4b4b2c9198", - "_spec": "readable-stream@^3.4.0", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/winston", - "browser": { - "util": false, - "worker_threads": false, - "./errors": "./errors-browser.js", - "./readable.js": "./readable-browser.js", - "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "deprecated": false, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "@babel/cli": "^7.2.0", - "@babel/core": "^7.2.0", - "@babel/polyfill": "^7.0.0", - "@babel/preset-env": "^7.2.0", - "airtap": "0.0.9", - "assert": "^1.4.0", - "bl": "^2.0.0", - "deep-strict-equal": "^0.2.0", - "events.once": "^2.0.2", - "glob": "^7.1.2", - "gunzip-maybe": "^1.4.1", - "hyperquest": "^2.1.3", - "lolex": "^2.6.0", - "nyc": "^11.0.0", - "pump": "^3.0.0", - "rimraf": "^2.6.2", - "tap": "^12.0.0", - "tape": "^4.9.0", - "tar-fs": "^1.16.2", - "util-promisify": "^2.1.0" - }, - "engines": { - "node": ">= 6" - }, - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "name": "readable-stream", - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "ci": "TAP=1 tap --no-esm test/parallel/*.js test/ours/*.js | tee test.tap", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov", - "test": "tap -J --no-esm test/parallel/*.js test/ours/*.js", - "test-browser-local": "airtap --open --local -- test/browser.js", - "test-browsers": "airtap --sauce-connect --loopback airtap.local -- test/browser.js", - "update-browser-errors": "babel -o errors-browser.js errors.js" - }, - "version": "3.6.0" -} diff --git a/build/node_modules/winston/node_modules/readable-stream/readable-browser.js b/build/node_modules/winston/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index adbf60de..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,9 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); -exports.finished = require('./lib/internal/streams/end-of-stream.js'); -exports.pipeline = require('./lib/internal/streams/pipeline.js'); diff --git a/build/node_modules/winston/node_modules/readable-stream/readable.js b/build/node_modules/winston/node_modules/readable-stream/readable.js deleted file mode 100644 index 9e0ca120..00000000 --- a/build/node_modules/winston/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,16 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream.Readable; - Object.assign(module.exports, Stream); - module.exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); - exports.finished = require('./lib/internal/streams/end-of-stream.js'); - exports.pipeline = require('./lib/internal/streams/pipeline.js'); -} diff --git a/build/node_modules/winston/package.json b/build/node_modules/winston/package.json index be9a660a..389ed5ee 100644 --- a/build/node_modules/winston/package.json +++ b/build/node_modules/winston/package.json @@ -1,30 +1,26 @@ { - "_from": "winston@^3.3.3", - "_id": "winston@3.3.3", + "_from": "winston@^3.6.0", + "_id": "winston@3.6.0", "_inBundle": false, - "_integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "_integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", "_location": "/winston", - "_phantomChildren": { - "inherits": "2.0.4", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, + "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "winston@^3.3.3", + "raw": "winston@^3.6.0", "name": "winston", "escapedName": "winston", - "rawSpec": "^3.3.3", + "rawSpec": "^3.6.0", "saveSpec": null, - "fetchSpec": "^3.3.3" + "fetchSpec": "^3.6.0" }, "_requiredBy": [ "/" ], - "_resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "_shasum": "ae6172042cafb29786afa3d09c8ff833ab7c9170", - "_spec": "winston@^3.3.3", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/winston/-/winston-3.6.0.tgz", + "_shasum": "be32587a099a292b88c49fac6fa529d478d93fb6", + "_spec": "winston@^3.6.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build", "author": { "name": "Charlie Robbins", @@ -37,38 +33,40 @@ "bundleDependencies": false, "dependencies": { "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.5.0" }, "deprecated": false, "description": "A logger for just about everything.", "devDependencies": { - "@babel/cli": "^7.10.3", - "@babel/core": "^7.10.3", - "@babel/preset-env": "^7.10.3", - "@types/node": "^14.0.13", + "@babel/cli": "^7.17.0", + "@babel/core": "^7.17.2", + "@babel/preset-env": "^7.16.7", + "@colors/colors": "1.5.0", + "@dabh/eslint-config-populist": "^5.0.0", + "@types/node": "^17.0.17", "abstract-winston-transport": "^0.5.1", "assume": "^2.2.0", - "colors": "^1.4.0", "cross-spawn-async": "^2.2.5", - "eslint-config-populist": "^4.2.0", + "eslint": "^8.9.0", "hock": "^1.4.1", - "mocha": "^8.0.1", + "mocha": "8.1.3", "nyc": "^15.1.0", "rimraf": "^3.0.2", - "split2": "^3.1.1", + "split2": "^4.1.0", "std-mocks": "^1.0.1", - "through2": "^3.0.1", + "through2": "^4.0.2", "winston-compat": "^0.1.5" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" }, "homepage": "https://github.com/winstonjs/winston#readme", "keywords": [ @@ -87,17 +85,9 @@ "license": "MIT", "main": "./lib/winston", "maintainers": [ - { - "name": "Jarrett Cruger", - "email": "jcrugzz@gmail.com" - }, - { - "name": "Chris Alderson", - "email": "chrisalderson@protonmail.com" - }, { "name": "David Hyde", - "email": "dabh@stanford.edu" + "email": "dabh@alumni.stanford.edu" } ], "name": "winston", @@ -107,12 +97,13 @@ }, "scripts": { "build": "rimraf dist && babel lib -d dist", - "lint": "populist lib/*.js lib/winston/*.js lib/winston/**/*.js", + "lint": "eslint lib/*.js lib/winston/*.js lib/winston/**/*.js --resolve-plugins-relative-to ./node_modules/@dabh/eslint-config-populist", "prepublishOnly": "npm run build", - "pretest": "npm run lint", - "test": "nyc --reporter=text --reporter lcov npm run test:mocha", - "test:mocha": "mocha test/*.test.js test/**/*.test.js --exit" + "test": "mocha", + "test:coverage": "nyc npm run test:unit", + "test:integration": "mocha test/integration", + "test:unit": "mocha test/unit" }, "types": "./index.d.ts", - "version": "3.3.3" + "version": "3.6.0" } diff --git a/build/node_modules/workerpool/HISTORY.md b/build/node_modules/workerpool/HISTORY.md new file mode 100644 index 00000000..71aee64f --- /dev/null +++ b/build/node_modules/workerpool/HISTORY.md @@ -0,0 +1,283 @@ +# workerpool history +https://github.com/josdejong/workerpool + + +## 2022-01-15, version 6.2.0 + +- Implement callbacks `onCreateWorker` and `onTerminateWorker`. Thanks @forty. +- Fix #326: robustness fix when terminating a workerpool. + + +## 2021-06-17, version 6.1.5 + +- Fix v6.1.4 not being marked as latest anymore on npm due to bug fix + release v2.3.4. + + +## 2021-04-05, version 6.1.4 + +- Fix terminating a pool throwing an error when used in the browser. + Regression introduced in `v6.1.3`. + + +## 2021-04-01, version 6.1.3 + +- Fix #147: disregard messages from terminated workers. + Thanks @hhprogram and @Madgvox. + + +## 2021-03-09, version 6.1.2 + +- Fix #253, add `./src` again in the published npm package, reverting the change + in `v6.1.1` (see also #243). + + +## 2021-03-08, version 6.1.1 + +- Remove redundant `./src` folder from the published npm package, see #243. + Thanks @Nytelife26. + + +## 2021-01-31, version 6.1.0 + +- Implemented support for sending events from the worker to the main thread, + see #51, #227. Thanks @Akryum. +- Fix an issue in Node.js nightly, see #230. Thanks @aduh95. +- Fix #232 `workerpool` not working on IE 10. + + +## 2021-01-16, version 6.0.4 + +- Make evaluation of offloaded functions a bit more secure by using + `new Function` instead of `eval`. Thanks @tjenkinson. + + +## 2020-10-28, version 6.0.3 + +- Fixes and more robustness in terminating workers. Thanks @boneskull. + + +## 2020-10-03, version 6.0.2 + +- Fix #32, #175: the promise returned by `Pool.terminate()` now waits until + subprocesses are dead before resolving. Thanks @boneskull. + + +## 2020-09-23, version 6.0.1 + +- Removed examples from the npm package. Thanks @madbence. + + +## 2020-05-13, version 6.0.0 + +WARNING: the library entry points are changed and new source maps are added. +This may have impact on your project depending on your setup. + +- Created separate library entry points in package.json for node.js and browser. + Thanks @boneskull. +- Generated source maps for both minified and non-minified bundles. +- Removed deprecation warnings for `options.nodeWorker` (renamed to + `options.workerType`) and `pool.clear()` (renamed to `pool.terminate()`). + + +## 2019-12-31, version 5.0.4 + +- Fixed #121: `isMainThread` not working when using `worker_threads`. +- Drop official support for node.js 8 (end of life). + + +## 2019-12-23, version 5.0.3 + +- Fixed library not working in the browser. See #106. + + +## 2019-11-06, version 5.0.2 + +- Fixed environment detection in browser. See #106. Thanks @acgrid. + + +## 2019-10-13, version 5.0.1 + +- Fixed #96: WorkerPool not cancelling any pending tasks on termination. + + +## 2019-08-25, version 5.0.0 + +- Deprecated option `nodeWorker` and created a new, more extensive option + `workerType` giving full control over the selected type of worker. + Added new option `'web'` to enforce use a Web Worker. See #85, #74. +- In a node.js environment, the default `workerType` is changed from + `'process'` to `'thread'`. See #85, #50. +- Improved detection of environment (`browser` or `node`), fixing wrong + detection in a Jest test environment. See #85. + + +## 2019-08-21, version 4.0.0 + +- Pass argument `--max-old-space-size` to child processes. Thanks @patte. +- Removed redundant dependencies, upgraded all devDependencies. +- Fixed Webpack issues of missing modules `child_process` and `worker_threads`. + See #43. +- Bundled library changed due to the upgrade to Webpack 4. This could possibly + lead to breaking changes. +- Implemented new option `maxQueueSize`. Thanks @colomboe. +- Fixed exiting workers when the parent process is killed. Thanks @RogerKang. +- Fixed #81: Option `minWorkers: 'max'` not using the configured `maxWorkers`. +- Fixed not passing `nodeWorker` to workers initialized when creating a pool. + Thanks @spacelan. +- Internal restructure of the code: moved from `lib` to `src`. + + +## 2019-03-12, version 3.1.2 + +- Improved error message when a node.js worker unexpectedly exits (see #58). + Thanks @stefanpenner. + +- Allocate debug ports safely, this fixes an issue cause workers to exit + unexpectedly if more then one worker pool is active, and the process is + started with a debugger (`node debug` or `node --inspect`). + Thanks @stefanpenner. + + +## 2019-02-25, version 3.1.1 + +- Fix option `nodeWorker: 'auto'` not using worker threads when available. + Thanks @stefanpenner. + + +## 2019-02-17, version 3.1.0 + +- Implemented support for using `worker_threads` in Node.js, via the new option + `nodeWorker: 'thread'`. Thanks @stefanpenner. + + +## 2018-12-11, version 3.0.0 + +- Enable usage in ES6 Webpack projects. +- Dropped support for AMD module system. + + +## 2021-06-17, version 2.3.4 + +- Backport fix for Node.js 16, see #309. Thanks @mansona. + + +## 2018-09-12, version 2.3.3 + +- Fixed space in license field in `package.json`. Thanks @sagotsky. + + +## 2018-09-08, version 2.3.2 + +- Add licence field to `package.json`. Thanks @greyd. + + +## 2018-07-24, version 2.3.1 + +- Fixed bug where tasks that are cancelled in a Pool's queue + causes following tasks to not run. Thanks @greemo. + + +## 2017-09-30, version 2.3.0 + +- New method `Pool.terminate(force, timeout)` which will replace + `Pool.clear(force)`. Thanks @jimsugg. +- Fixed issue with never terminating zombie child processes. + Thanks @jimsugg. + + +## 2017-08-20, version 2.2.4 + +- Fixed a debug issue: look for `--inspect` within argument strings, + instead of exact match. Thanks @jimsugg. + + +## 2017-08-19, version 2.2.3 + +- Updated all examples to neatly include `.catch(...)` callbacks. + + +## 2017-07-08, version 2.2.2 + +- Fixed #25: timer of a timeout starting when the task is created + instead of when the task is started. Thanks @eclipsesk for input. + + +## 2017-05-07, version 2.2.1 + +- Fixed #2 and #19: support for debugging child processes. Thanks @tptee. + + +## 2016-11-26, version 2.2.0 + +- Implemented #18: method `pool.stats()`. + + +## 2016-10-11, version 2.1.0 + +- Implemented support for registering the workers methods asynchronously. + This enables asynchronous initialization of workers, for example when + using AMD modules. Thanks @natlibfi-arlehiko. +- Implemented environment variables `platform`, `isMainThread`, and `cpus`. + Thanks @natlibfi-arlehiko. +- Implemented option `minWorkers`. Thanks @sergei202. + + +## 2016-09-18, version 2.0.0 + +- Replaced conversion of Error-objecting using serializerr to custom + implementation to prevent issues with serializing/deserializing functions. + This conversion implementation loses the prototype object which means that + e.g. 'TypeError' will become just 'Error' in the main code. See #8. + Thanks @natlibfi-arlehiko. + + +## 2016-09-12, version 1.3.1 + +- Fix for a bug in PhantomJS (see #7). Thanks @natlibfi-arlehiko. + + +## 2016-08-21, version 1.3.0 + +- Determine `maxWorkers` as the number of CPU's minus one in browsers too. See #6. + + +## 2016-06-25, version 1.2.1 + +- Fixed #5 error when loading via AMD or bundling using Webpack. + + +## 2016-05-22, version 1.2.0 + +- Implemented serializing errors with stacktrace. Thanks @mujx. + + +## 2016-01-25, version 1.1.0 + +- Added an error message when wrongly calling `pool.proxy`. +- Fixed function `worker.pool` not accepting both a script and options. See #1. + Thanks @freund17. + + +## 2014-05-29, version 1.0.0 + +- Merged function `Pool.run` into `Pool.exec`, simplifying the API. + + +## 2014-05-14, version 0.2.0 + +- Implemented support for cancelling running tasks. +- Implemented support for cancelling running tasks after a timeout. + + +## 2014-05-07, version 0.1.0 + +- Implemented support for both node.js and the browser. +- Implemented offloading functions. +- Implemented worker proxy. +- Added docs and examples. + + +## 2014-05-02, version 0.0.1 + +- Module name registered at npm. diff --git a/build/node_modules/workerpool/LICENSE b/build/node_modules/workerpool/LICENSE new file mode 100644 index 00000000..ad410e11 --- /dev/null +++ b/build/node_modules/workerpool/LICENSE @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/build/node_modules/workerpool/README.md b/build/node_modules/workerpool/README.md new file mode 100644 index 00000000..4ee2f2c5 --- /dev/null +++ b/build/node_modules/workerpool/README.md @@ -0,0 +1,496 @@ +# workerpool + + + +**workerpool** offers an easy way to create a pool of workers for both dynamically offloading computations as well as managing a pool of dedicated workers. **workerpool** basically implements a [thread pool pattern](http://en.wikipedia.org/wiki/Thread_pool_pattern). There is a pool of workers to execute tasks. New tasks are put in a queue. A worker executes one task at a time, and once finished, picks a new task from the queue. Workers can be accessed via a natural, promise based proxy, as if they are available straight in the main application. + +**workerpool** runs on node.js, Chrome, Firefox, Opera, Safari, and IE10+. + + +## Features + +- Easy to use +- Runs in the browser and on node.js +- Dynamically offload functions to a worker +- Access workers via a proxy +- Cancel running tasks +- Set a timeout on tasks +- Handles crashed workers +- Small: 5 kB minified and gzipped + + +## Why + +JavaScript is based upon a single event loop which handles one event at a time. Jeremy Epstein [explains this clearly](http://greenash.net.au/thoughts/2012/11/nodejs-itself-is-blocking-only-its-io-is-non-blocking/): + +> In Node.js everything runs in parallel, except your code. +> What this means is that all I/O code that you write in Node.js is non-blocking, +> while (conversely) all non-I/O code that you write in Node.js is blocking. + +This means that CPU heavy tasks will block other tasks from being executed. In case of a browser environment, the browser will not react to user events like a mouse click while executing a CPU intensive task (the browser "hangs"). In case of a node.js server, the server will not respond to any new request while executing a single, heavy request. + +For front-end processes, this is not a desired situation. +Therefore, CPU intensive tasks should be offloaded from the main event loop onto dedicated *workers*. In a browser environment, [Web Workers](http://www.html5rocks.com/en/tutorials/workers/basics/) can be used. In node.js, [child processes](https://nodejs.org/api/child_process.html) and [worker_threads](https://nodejs.org/api/worker_threads.html) are available. An application should be split in separate, decoupled parts, which can run independent of each other in a parallelized way. Effectively, this results in an architecture which achieves concurrency by means of isolated processes and message passing. + + +## Install + +Install via npm: + + npm install workerpool + + +## Load + +To load workerpool in a node.js application (both main application as well as workers): + +```js +const workerpool = require('workerpool'); +``` + +To load workerpool in the browser: + +```html + +``` + +To load workerpool in a web worker in the browser: + +```js +importScripts('workerpool.js'); +``` + + +## Use + +### Offload functions dynamically + +In the following example there is a function `add`, which is offloaded dynamically to a worker to be executed for a given set of arguments. + +**myApp.js** +```js +const workerpool = require('workerpool'); +const pool = workerpool.pool(); + +function add(a, b) { + return a + b; +} + +pool.exec(add, [3, 4]) + .then(function (result) { + console.log('result', result); // outputs 7 + }) + .catch(function (err) { + console.error(err); + }) + .then(function () { + pool.terminate(); // terminate all workers when done + }); +``` + +Note that both function and arguments must be static and stringifiable, as they need to be sent to the worker in a serialized form. In case of large functions or function arguments, the overhead of sending the data to the worker can be significant. + + +### Dedicated workers + +A dedicated worker can be created in a separate script, and then used via a worker pool. + +**myWorker.js** +```js +const workerpool = require('workerpool'); + +// a deliberately inefficient implementation of the fibonacci sequence +function fibonacci(n) { + if (n < 2) return n; + return fibonacci(n - 2) + fibonacci(n - 1); +} + +// create a worker and register public functions +workerpool.worker({ + fibonacci: fibonacci +}); +``` + +This worker can be used by a worker pool: + +**myApp.js** +```js +const workerpool = require('workerpool'); + +// create a worker pool using an external worker script +const pool = workerpool.pool(__dirname + '/myWorker.js'); + +// run registered functions on the worker via exec +pool.exec('fibonacci', [10]) + .then(function (result) { + console.log('Result: ' + result); // outputs 55 + }) + .catch(function (err) { + console.error(err); + }) + .then(function () { + pool.terminate(); // terminate all workers when done + }); + +// or run registered functions on the worker via a proxy: +pool.proxy() + .then(function (worker) { + return worker.fibonacci(10); + }) + .then(function (result) { + console.log('Result: ' + result); // outputs 55 + }) + .catch(function (err) { + console.error(err); + }) + .then(function () { + pool.terminate(); // terminate all workers when done + }); +``` + +Worker can also initialize asynchronously: + +**myAsyncWorker.js** +```js +define(['workerpool/dist/workerpool'], function(workerpool) { + + // a deliberately inefficient implementation of the fibonacci sequence + function fibonacci(n) { + if (n < 2) return n; + return fibonacci(n - 2) + fibonacci(n - 1); + } + + // create a worker and register public functions + workerpool.worker({ + fibonacci: fibonacci + }); + +}); +``` + +## Examples + +Examples are available in the examples directory: + +[https://github.com/josdejong/workerpool/tree/master/examples](https://github.com/josdejong/workerpool/tree/master/examples) + + +## API + +The API of workerpool consists of two parts: a function `workerpool.pool` to create a worker pool, and a function `workerpool.worker` to create a worker. + +### pool + +A workerpool can be created using the function `workerpool.pool`: + +`workerpool.pool([script: string] [, options: Object]) : Pool` + +When a `script` argument is provided, the provided script will be started as a dedicated worker. When no `script` argument is provided, a default worker is started which can be used to offload functions dynamically via `Pool.exec`. Note that on node.js, `script` must be an absolute file path like `__dirname + '/myWorker.js'`. In a browser environment, `script` can also be a data URL like `'data:application/javascript;base64,...'`. This allows embedding the bundled code of a worker in your main application. See `examples/embeddedWorker` for a demo. + +The following options are available: + +- `minWorkers: number | 'max'`. The minimum number of workers that must be initialized and kept available. Setting this to `'max'` will create `maxWorkers` default workers (see below). +- `maxWorkers: number`. The default number of maxWorkers is the number of CPU's minus one. When the number of CPU's could not be determined (for example in older browsers), `maxWorkers` is set to 3. +- `maxQueueSize: number`. The maximum number of tasks allowed to be queued. Can be used to prevent running out of memory. If the maximum is exceeded, adding a new task will throw an error. The default value is `Infinity`. +- `workerType: 'auto' | 'web' | 'process' | 'thread'`. + - In case of `'auto'` (default), workerpool will automatically pick a suitable type of worker: when in a browser environment, `'web'` will be used. When in a node.js environment, `worker_threads` will be used if available (Node.js >= 11.7.0), else `child_process` will be used. + - In case of `'web'`, a Web Worker will be used. Only available in a browser environment. + - In case of `'process'`, `child_process` will be used. Only available in a node.js environment. + - In case of `'thread'`, `worker_threads` will be used. If `worker_threads` are not available, an error is thrown. Only available in a node.js environment. +- `forkArgs: String[]`. For `process` worker type. An array passed as `args` to [child_process.fork](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options) +- `forkOpts: Object`. For `process` worker type. An object passed as `options` to [child_process.fork](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options). See nodejs documentation for available options. +- `onCreateWorker: Function`. A callback that is called whenever a worker is being created. It can be used to allocate resources for each worker for example. The callback is passed as argument an object with the following properties: + - `forkArgs: String[]`: the `forkArgs` option of this pool + - `forkOpts: Object`: the `forkOpts` option of this pool + - `script: string`: the `script` option of this pool + Optionally, this callback can return an object containing one or more of the above properties. The provided properties will be used to override the Pool properties for the worker being created. +- `onTerminateWorker: Function`. A callback that is called whenever a worker is being terminated. It can be used to release resources that might have been allocated for this specific worker. The callback is passed as argument an object as described for `onCreateWorker`, with each property sets with the value for the worker being terminated. + +> Important note on `'workerType'`: when sending and receiving primitive data types (plain JSON) from and to a worker, the different worker types (`'web'`, `'process'`, `'thread'`) can be used interchangeably. However, when using more advanced data types like buffers, the API and returned results can vary. In these cases, it is best not to use the `'auto'` setting but have a fixed `'workerType'` and good unit testing in place. + +A worker pool contains the following functions: + +- `Pool.exec(method: Function | string, params: Array | null [, options: Object]) : Promise.<*, Error>`
            + Execute a function on a worker with given arguments. + - When `method` is a string, a method with this name must exist at the worker and must be registered to make it accessible via the pool. The function will be executed on the worker with given parameters. + - When `method` is a function, the provided function `fn` will be stringified, send to the worker, and executed there with the provided parameters. The provided function must be static, it must not depend on variables in a surrounding scope. + - The following options are available: + - `on: (payload: any) => void`. An event listener, to handle events sent by the worker for this execution. See [Events](#events) for more details. + +- `Pool.proxy() : Promise.`
            + Create a proxy for the worker pool. The proxy contains a proxy for all methods available on the worker. All methods return promises resolving the methods result. + +- `Pool.stats() : Object`
            + Retrieve statistics on workers, and active and pending tasks. + + Returns an object containing the following properties: + + ``` + { + totalWorkers: 0, + busyWorkers: 0, + idleWorkers: 0, + pendingTasks: 0, + activeTasks: 0 + } + ``` + +- `Pool.terminate([force: boolean [, timeout: number]])` + + If parameter `force` is false (default), workers will finish the tasks they are working on before terminating themselves. Any pending tasks will be rejected with an error 'Pool terminated'. When `force` is true, all workers are terminated immediately without finishing running tasks. If `timeout` is provided, worker will be forced to terminate when the timeout expires and the worker has not finished. + +The function `Pool.exec` and the proxy functions all return a `Promise`. The promise has the following functions available: + +- `Promise.then(fn: Function.)`
            + Get the result of the promise once resolve. +- `Promise.catch(fn: Function.)`
            + Get the error of the promise when rejected. +- `Promise.cancel()`
            + A running task can be cancelled. The worker executing the task is enforced to terminate immediately. + The promise will be rejected with a `Promise.CancellationError`. +- `Promise.timeout(delay: number)`
            + Cancel a running task when it is not resolved or rejected within given delay in milliseconds. The timer will start when the task is actually started, not when the task is created and queued. + The worker executing the task is enforced to terminate immediately. + The promise will be rejected with a `Promise.TimeoutError`. + +Example usage: + +```js +const workerpool = require('workerpool'); + +function add(a, b) { + return a + b; +} + +const pool1 = workerpool.pool(); + +// offload a function to a worker +pool1.exec(add, [2, 4]) + .then(function (result) { + console.log(result); // will output 6 + }) + .catch(function (err) { + console.error(err); + }); + +// create a dedicated worker +const pool2 = workerpool.pool(__dirname + '/myWorker.js'); + +// supposed myWorker.js contains a function 'fibonacci' +pool2.exec('fibonacci', [10]) + .then(function (result) { + console.log(result); // will output 55 + }) + .catch(function (err) { + console.error(err); + }); + +// create a proxy to myWorker.js +pool2.proxy() + .then(function (myWorker) { + return myWorker.fibonacci(10) + }) + .then(function (result) { + console.log(result); // will output 55 + }) + .catch(function (err) { + console.error(err); + }); + +// create a pool with a specified maximum number of workers +const pool3 = workerpool.pool({maxWorkers: 7}); +``` + + +### worker + +A worker is constructed as: + +`workerpool.worker([methods: Object.])` + +Argument `methods` is optional can can be an object with functions available in the worker. Registered functions will be available via the worker pool. + +Example usage: + +```js +// file myWorker.js +const workerpool = require('workerpool'); + +function add(a, b) { + return a + b; +} + +function multiply(a, b) { + return a * b; +} + +// create a worker and register functions +workerpool.worker({ + add: add, + multiply: multiply +}); +``` + +Asynchronous results can be handled by returning a Promise from a function in the worker: + +```js +// file myWorker.js +const workerpool = require('workerpool'); + +function timeout(delay) { + return new Promise(function (resolve, reject) { + setTimeout(resolve, delay) + }); +} + +// create a worker and register functions +workerpool.worker({ + timeout: timeout +}); +``` + +### Events + +You can send data back from workers to the pool while the task is being executed using the `workerEmit` function: + +`workerEmit(payload: any)` + +This function only works inside a worker **and** during a task. + +Example: + +```js +// file myWorker.js +const workerpool = require('workerpool'); + +function eventExample(delay) { + workerpool.workerEmit({ + status: 'in_progress' + }); + + workerpool.workerEmit({ + status: 'complete' + }); + + return true; +} + +// create a worker and register functions +workerpool.worker({ + eventExample: eventExample +}); +``` + +To receive those events, you can use the `on` option of the pool `exec` method: + +```js +pool.exec('eventExample', [], { + on: function (payload) { + if (payload.status === 'in_progress') { + console.log('In progress...'); + } else if (payload.status === 'complete') { + console.log('Done!'); + } + } +}) +``` + +### Utilities + +Following properties are available for convenience: + +- **platform**: The Javascript platform. Either *node* or *browser* +- **isMainThread**: Whether the code is running in main thread or not (Workers) +- **cpus**: The number of CPUs/cores available + + +## Roadmap + +- Implement functions for parallel processing: `map`, `reduce`, `forEach`, + `filter`, `some`, `every`, ... +- Implement graceful degradation on old browsers not supporting webworkers: + fallback to processing tasks in the main application. +- Implement session support: be able to handle a series of related tasks by a + single worker, which can keep a state for the session. + + +## Related libraries + +- https://github.com/andywer/threads.js +- https://github.com/piscinajs/piscina +- https://github.com/learnboost/cluster +- https://github.com/adambom/parallel.js +- https://github.com/padolsey/operative +- https://github.com/calvinmetcalf/catiline +- https://github.com/Unitech/pm2 +- https://github.com/godaddy/node-cluster-service +- https://github.com/ramesaliyev/EasyWebWorker +- https://github.com/rvagg/node-worker-farm + + +## Build + +First clone the project from github: + + git clone git://github.com/josdejong/workerpool.git + cd workerpool + +Install the project dependencies: + + npm install + +Then, the project can be build by executing the build script via npm: + + npm run build + +This will build the library workerpool.js and workerpool.min.js from the source +files and put them in the folder dist. + + +## Test + +To execute tests for the library, install the project dependencies once: + + npm install + +Then, the tests can be executed: + + npm test + +To test code coverage of the tests: + + npm run coverage + +To see the coverage results, open the generated report in your browser: + + ./coverage/lcov-report/index.html + + +## Publish + +- Describe changes in HISTORY.md +- Update version in package.json, run `npm install` to update it in `package-lock.json` too. +- Push to github +- Deploy to npm via `npm publish` +- Add a git tag with the version number like: + ``` + git tag v1.2.3 + git push --tags + ``` + + +## License + +Copyright (C) 2014-2022 Jos de Jong + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/build/node_modules/workerpool/dist/worker.js b/build/node_modules/workerpool/dist/worker.js new file mode 100644 index 00000000..7a9f7002 --- /dev/null +++ b/build/node_modules/workerpool/dist/worker.js @@ -0,0 +1,224 @@ +/** + * workerpool.js + * https://github.com/josdejong/workerpool + * + * Offload tasks to a pool of workers on node.js and in the browser. + * + * @version 6.2.0 + * @date 2022-01-15 + * + * @license + * Copyright (C) 2014-2022 Jos de Jong + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +/******/ (function() { // webpackBootstrap +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports). +!function() { +var exports = __webpack_exports__; +var __webpack_unused_export__; +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +/** + * worker must be started as a child process or a web worker. + * It listens for RPC messages from the parent process. + */ +// source of inspiration: https://github.com/sindresorhus/require-fool-webpack +var requireFoolWebpack = eval('typeof require !== \'undefined\'' + ' ? require' + ' : function (module) { throw new Error(\'Module " + module + " not found.\') }'); +/** + * Special message sent by parent which causes the worker to terminate itself. + * Not a "message object"; this string is the entire message. + */ + +var TERMINATE_METHOD_ID = '__workerpool-terminate__'; // var nodeOSPlatform = require('./environment').nodeOSPlatform; +// create a worker API for sending and receiving messages which works both on +// node.js and in the browser + +var worker = { + exit: function exit() {} +}; + +if (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') { + // worker in the browser + worker.on = function (event, callback) { + addEventListener(event, function (message) { + callback(message.data); + }); + }; + + worker.send = function (message) { + postMessage(message); + }; +} else if (typeof process !== 'undefined') { + // node.js + var WorkerThreads; + + try { + WorkerThreads = requireFoolWebpack('worker_threads'); + } catch (error) { + if (_typeof(error) === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {// no worker_threads, fallback to sub-process based workers + } else { + throw error; + } + } + + if (WorkerThreads && + /* if there is a parentPort, we are in a WorkerThread */ + WorkerThreads.parentPort !== null) { + var parentPort = WorkerThreads.parentPort; + worker.send = parentPort.postMessage.bind(parentPort); + worker.on = parentPort.on.bind(parentPort); + } else { + worker.on = process.on.bind(process); + worker.send = process.send.bind(process); // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly + + worker.on('disconnect', function () { + process.exit(1); + }); + worker.exit = process.exit.bind(process); + } +} else { + throw new Error('Script must be executed as a worker'); +} + +function convertError(error) { + return Object.getOwnPropertyNames(error).reduce(function (product, name) { + return Object.defineProperty(product, name, { + value: error[name], + enumerable: true + }); + }, {}); +} +/** + * Test whether a value is a Promise via duck typing. + * @param {*} value + * @returns {boolean} Returns true when given value is an object + * having functions `then` and `catch`. + */ + + +function isPromise(value) { + return value && typeof value.then === 'function' && typeof value["catch"] === 'function'; +} // functions available externally + + +worker.methods = {}; +/** + * Execute a function with provided arguments + * @param {String} fn Stringified function + * @param {Array} [args] Function arguments + * @returns {*} + */ + +worker.methods.run = function run(fn, args) { + var f = new Function('return (' + fn + ').apply(null, arguments);'); + return f.apply(f, args); +}; +/** + * Get a list with methods available on this worker + * @return {String[]} methods + */ + + +worker.methods.methods = function methods() { + return Object.keys(worker.methods); +}; + +var currentRequestId = null; +worker.on('message', function (request) { + if (request === TERMINATE_METHOD_ID) { + return worker.exit(0); + } + + try { + var method = worker.methods[request.method]; + + if (method) { + currentRequestId = request.id; // execute the function + + var result = method.apply(method, request.params); + + if (isPromise(result)) { + // promise returned, resolve this and then return + result.then(function (result) { + worker.send({ + id: request.id, + result: result, + error: null + }); + currentRequestId = null; + })["catch"](function (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + currentRequestId = null; + }); + } else { + // immediate result + worker.send({ + id: request.id, + result: result, + error: null + }); + currentRequestId = null; + } + } else { + throw new Error('Unknown method "' + request.method + '"'); + } + } catch (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + } +}); +/** + * Register methods to the worker + * @param {Object} methods + */ + +worker.register = function (methods) { + if (methods) { + for (var name in methods) { + if (methods.hasOwnProperty(name)) { + worker.methods[name] = methods[name]; + } + } + } + + worker.send('ready'); +}; + +worker.emit = function (payload) { + if (currentRequestId) { + worker.send({ + id: currentRequestId, + isEvent: true, + payload: payload + }); + } +}; + +if (true) { + __webpack_unused_export__ = worker.register; + __webpack_unused_export__ = worker.emit; +} +}(); +/******/ })() +; +//# sourceMappingURL=worker.js.map \ No newline at end of file diff --git a/build/node_modules/workerpool/dist/worker.js.map b/build/node_modules/workerpool/dist/worker.js.map new file mode 100644 index 00000000..a7403a43 --- /dev/null +++ b/build/node_modules/workerpool/dist/worker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"worker.js","mappings":"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","sources":["webpack://workerpool/./src/worker.js"],"sourcesContent":["/**\n * worker must be started as a child process or a web worker.\n * It listens for RPC messages from the parent process.\n */\n\n// source of inspiration: https://github.com/sindresorhus/require-fool-webpack\nvar requireFoolWebpack = eval(\n 'typeof require !== \\'undefined\\'' +\n ' ? require' +\n ' : function (module) { throw new Error(\\'Module \" + module + \" not found.\\') }'\n);\n\n/**\n * Special message sent by parent which causes the worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n// var nodeOSPlatform = require('./environment').nodeOSPlatform;\n\n// create a worker API for sending and receiving messages which works both on\n// node.js and in the browser\nvar worker = {\n exit: function() {}\n};\nif (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') {\n // worker in the browser\n worker.on = function (event, callback) {\n addEventListener(event, function (message) {\n callback(message.data);\n })\n };\n worker.send = function (message) {\n postMessage(message);\n };\n}\nelse if (typeof process !== 'undefined') {\n // node.js\n\n var WorkerThreads;\n try {\n WorkerThreads = requireFoolWebpack('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads, fallback to sub-process based workers\n } else {\n throw error;\n }\n }\n\n if (WorkerThreads &&\n /* if there is a parentPort, we are in a WorkerThread */\n WorkerThreads.parentPort !== null) {\n var parentPort = WorkerThreads.parentPort;\n worker.send = parentPort.postMessage.bind(parentPort);\n worker.on = parentPort.on.bind(parentPort);\n } else {\n worker.on = process.on.bind(process);\n worker.send = process.send.bind(process);\n // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly\n worker.on('disconnect', function () {\n process.exit(1);\n });\n worker.exit = process.exit.bind(process);\n }\n}\nelse {\n throw new Error('Script must be executed as a worker');\n}\n\nfunction convertError(error) {\n return Object.getOwnPropertyNames(error).reduce(function(product, name) {\n return Object.defineProperty(product, name, {\n\tvalue: error[name],\n\tenumerable: true\n });\n }, {});\n}\n\n/**\n * Test whether a value is a Promise via duck typing.\n * @param {*} value\n * @returns {boolean} Returns true when given value is an object\n * having functions `then` and `catch`.\n */\nfunction isPromise(value) {\n return value && (typeof value.then === 'function') && (typeof value.catch === 'function');\n}\n\n// functions available externally\nworker.methods = {};\n\n/**\n * Execute a function with provided arguments\n * @param {String} fn Stringified function\n * @param {Array} [args] Function arguments\n * @returns {*}\n */\nworker.methods.run = function run(fn, args) {\n var f = new Function('return (' + fn + ').apply(null, arguments);');\n return f.apply(f, args);\n};\n\n/**\n * Get a list with methods available on this worker\n * @return {String[]} methods\n */\nworker.methods.methods = function methods() {\n return Object.keys(worker.methods);\n};\n\nvar currentRequestId = null;\n\nworker.on('message', function (request) {\n if (request === TERMINATE_METHOD_ID) {\n return worker.exit(0);\n }\n try {\n var method = worker.methods[request.method];\n\n if (method) {\n currentRequestId = request.id;\n \n // execute the function\n var result = method.apply(method, request.params);\n\n if (isPromise(result)) {\n // promise returned, resolve this and then return\n result\n .then(function (result) {\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n currentRequestId = null;\n })\n .catch(function (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n currentRequestId = null;\n });\n }\n else {\n // immediate result\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n\n currentRequestId = null;\n }\n }\n else {\n throw new Error('Unknown method \"' + request.method + '\"');\n }\n }\n catch (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n }\n});\n\n/**\n * Register methods to the worker\n * @param {Object} methods\n */\nworker.register = function (methods) {\n\n if (methods) {\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n worker.methods[name] = methods[name];\n }\n }\n }\n\n worker.send('ready');\n\n};\n\nworker.emit = function (payload) {\n if (currentRequestId) {\n worker.send({\n id: currentRequestId,\n isEvent: true,\n payload\n });\n }\n};\n\nif (typeof exports !== 'undefined') {\n exports.add = worker.register;\n exports.emit = worker.emit;\n}\n"],"names":["requireFoolWebpack","eval","TERMINATE_METHOD_ID","worker","exit","self","postMessage","addEventListener","on","event","callback","message","data","send","process","WorkerThreads","error","code","parentPort","bind","Error","convertError","Object","getOwnPropertyNames","reduce","product","name","defineProperty","value","enumerable","isPromise","then","methods","run","fn","args","f","Function","apply","keys","currentRequestId","request","method","id","result","params","err","register","hasOwnProperty","emit","payload","isEvent","exports","add"],"sourceRoot":""} \ No newline at end of file diff --git a/build/node_modules/workerpool/dist/workerpool.js b/build/node_modules/workerpool/dist/workerpool.js new file mode 100644 index 00000000..af9a4548 --- /dev/null +++ b/build/node_modules/workerpool/dist/workerpool.js @@ -0,0 +1,1683 @@ +/** + * workerpool.js + * https://github.com/josdejong/workerpool + * + * Offload tasks to a pool of workers on node.js and in the browser. + * + * @version 6.2.0 + * @date 2022-01-15 + * + * @license + * Copyright (C) 2014-2022 Jos de Jong + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("workerpool", [], factory); + else if(typeof exports === 'object') + exports["workerpool"] = factory(); + else + root["workerpool"] = factory(); +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function() { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 345: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Promise = __webpack_require__(219); + +var WorkerHandler = __webpack_require__(751); + +var environment = __webpack_require__(828); + +var DebugPortAllocator = __webpack_require__(833); + +var DEBUG_PORT_ALLOCATOR = new DebugPortAllocator(); +/** + * A pool to manage workers + * @param {String} [script] Optional worker script + * @param {WorkerPoolOptions} [options] See docs + * @constructor + */ + +function Pool(script, options) { + if (typeof script === 'string') { + this.script = script || null; + } else { + this.script = null; + options = script; + } + + this.workers = []; // queue with all workers + + this.tasks = []; // queue with tasks awaiting execution + + options = options || {}; + this.forkArgs = Object.freeze(options.forkArgs || []); + this.forkOpts = Object.freeze(options.forkOpts || {}); + this.debugPortStart = options.debugPortStart || 43210; + this.nodeWorker = options.nodeWorker; + this.workerType = options.workerType || options.nodeWorker || 'auto'; + this.maxQueueSize = options.maxQueueSize || Infinity; + + this.onCreateWorker = options.onCreateWorker || function () { + return null; + }; + + this.onTerminateWorker = options.onTerminateWorker || function () { + return null; + }; // configuration + + + if (options && 'maxWorkers' in options) { + validateMaxWorkers(options.maxWorkers); + this.maxWorkers = options.maxWorkers; + } else { + this.maxWorkers = Math.max((environment.cpus || 4) - 1, 1); + } + + if (options && 'minWorkers' in options) { + if (options.minWorkers === 'max') { + this.minWorkers = this.maxWorkers; + } else { + validateMinWorkers(options.minWorkers); + this.minWorkers = options.minWorkers; + this.maxWorkers = Math.max(this.minWorkers, this.maxWorkers); // in case minWorkers is higher than maxWorkers + } + + this._ensureMinWorkers(); + } + + this._boundNext = this._next.bind(this); + + if (this.workerType === 'thread') { + WorkerHandler.ensureWorkerThreads(); + } +} +/** + * Execute a function on a worker. + * + * Example usage: + * + * var pool = new Pool() + * + * // call a function available on the worker + * pool.exec('fibonacci', [6]) + * + * // offload a function + * function add(a, b) { + * return a + b + * }; + * pool.exec(add, [2, 4]) + * .then(function (result) { + * console.log(result); // outputs 6 + * }) + * .catch(function(error) { + * console.log(error); + * }); + * + * @param {String | Function} method Function name or function. + * If `method` is a string, the corresponding + * method on the worker will be executed + * If `method` is a Function, the function + * will be stringified and executed via the + * workers built-in function `run(fn, args)`. + * @param {Array} [params] Function arguments applied when calling the function + * @param {ExecOptions} [options] Options object + * @return {Promise.<*, Error>} result + */ + + +Pool.prototype.exec = function (method, params, options) { + // validate type of arguments + if (params && !Array.isArray(params)) { + throw new TypeError('Array expected as argument "params"'); + } + + if (typeof method === 'string') { + var resolver = Promise.defer(); + + if (this.tasks.length >= this.maxQueueSize) { + throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); + } // add a new task to the queue + + + var tasks = this.tasks; + var task = { + method: method, + params: params, + resolver: resolver, + timeout: null, + options: options + }; + tasks.push(task); // replace the timeout method of the Promise with our own, + // which starts the timer as soon as the task is actually started + + var originalTimeout = resolver.promise.timeout; + + resolver.promise.timeout = function timeout(delay) { + if (tasks.indexOf(task) !== -1) { + // task is still queued -> start the timer later on + task.timeout = delay; + return resolver.promise; + } else { + // task is already being executed -> start timer immediately + return originalTimeout.call(resolver.promise, delay); + } + }; // trigger task execution + + + this._next(); + + return resolver.promise; + } else if (typeof method === 'function') { + // send stringified function and function arguments to worker + return this.exec('run', [String(method), params]); + } else { + throw new TypeError('Function or string expected as argument "method"'); + } +}; +/** + * Create a proxy for current worker. Returns an object containing all + * methods available on the worker. The methods always return a promise. + * + * @return {Promise.} proxy + */ + + +Pool.prototype.proxy = function () { + if (arguments.length > 0) { + throw new Error('No arguments expected'); + } + + var pool = this; + return this.exec('methods').then(function (methods) { + var proxy = {}; + methods.forEach(function (method) { + proxy[method] = function () { + return pool.exec(method, Array.prototype.slice.call(arguments)); + }; + }); + return proxy; + }); +}; +/** + * Creates new array with the results of calling a provided callback function + * on every element in this array. + * @param {Array} array + * @param {function} callback Function taking two arguments: + * `callback(currentValue, index)` + * @return {Promise.} Returns a promise which resolves with an Array + * containing the results of the callback function + * executed for each of the array elements. + */ + +/* TODO: implement map +Pool.prototype.map = function (array, callback) { +}; +*/ + +/** + * Grab the first task from the queue, find a free worker, and assign the + * worker to the task. + * @protected + */ + + +Pool.prototype._next = function () { + if (this.tasks.length > 0) { + // there are tasks in the queue + // find an available worker + var worker = this._getWorker(); + + if (worker) { + // get the first task from the queue + var me = this; + var task = this.tasks.shift(); // check if the task is still pending (and not cancelled -> promise rejected) + + if (task.resolver.promise.pending) { + // send the request to the worker + var promise = worker.exec(task.method, task.params, task.resolver, task.options).then(me._boundNext)["catch"](function () { + // if the worker crashed and terminated, remove it from the pool + if (worker.terminated) { + return me._removeWorker(worker); + } + }).then(function () { + me._next(); // trigger next task in the queue + + }); // start queued timer now + + if (typeof task.timeout === 'number') { + promise.timeout(task.timeout); + } + } else { + // The task taken was already complete (either rejected or resolved), so just trigger next task in the queue + me._next(); + } + } + } +}; +/** + * Get an available worker. If no worker is available and the maximum number + * of workers isn't yet reached, a new worker will be created and returned. + * If no worker is available and the maximum number of workers is reached, + * null will be returned. + * + * @return {WorkerHandler | null} worker + * @private + */ + + +Pool.prototype._getWorker = function () { + // find a non-busy worker + var workers = this.workers; + + for (var i = 0; i < workers.length; i++) { + var worker = workers[i]; + + if (worker.busy() === false) { + return worker; + } + } + + if (workers.length < this.maxWorkers) { + // create a new worker + worker = this._createWorkerHandler(); + workers.push(worker); + return worker; + } + + return null; +}; +/** + * Remove a worker from the pool. + * Attempts to terminate worker if not already terminated, and ensures the minimum + * pool size is met. + * @param {WorkerHandler} worker + * @return {Promise} + * @protected + */ + + +Pool.prototype._removeWorker = function (worker) { + var me = this; + DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort); // _removeWorker will call this, but we need it to be removed synchronously + + this._removeWorkerFromList(worker); // If minWorkers set, spin up new workers to replace the crashed ones + + + this._ensureMinWorkers(); // terminate the worker (if not already terminated) + + + return new Promise(function (resolve, reject) { + worker.terminate(false, function (err) { + me.onTerminateWorker({ + forkArgs: worker.forkArgs, + forkOpts: worker.forkOpts, + script: worker.script + }); + + if (err) { + reject(err); + } else { + resolve(worker); + } + }); + }); +}; +/** + * Remove a worker from the pool list. + * @param {WorkerHandler} worker + * @protected + */ + + +Pool.prototype._removeWorkerFromList = function (worker) { + // remove from the list with workers + var index = this.workers.indexOf(worker); + + if (index !== -1) { + this.workers.splice(index, 1); + } +}; +/** + * Close all active workers. Tasks currently being executed will be finished first. + * @param {boolean} [force=false] If false (default), the workers are terminated + * after finishing all tasks currently in + * progress. If true, the workers will be + * terminated immediately. + * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected + * after timeout if worker process has not been terminated. + * @return {Promise.} + */ + + +Pool.prototype.terminate = function (force, timeout) { + var me = this; // cancel any pending tasks + + this.tasks.forEach(function (task) { + task.resolver.reject(new Error('Pool terminated')); + }); + this.tasks.length = 0; + + var f = function f(worker) { + this._removeWorkerFromList(worker); + }; + + var removeWorker = f.bind(this); + var promises = []; + var workers = this.workers.slice(); + workers.forEach(function (worker) { + var termPromise = worker.terminateAndNotify(force, timeout).then(removeWorker).always(function () { + me.onTerminateWorker({ + forkArgs: worker.forkArgs, + forkOpts: worker.forkOpts, + script: worker.script + }); + }); + promises.push(termPromise); + }); + return Promise.all(promises); +}; +/** + * Retrieve statistics on tasks and workers. + * @return {{totalWorkers: number, busyWorkers: number, idleWorkers: number, pendingTasks: number, activeTasks: number}} Returns an object with statistics + */ + + +Pool.prototype.stats = function () { + var totalWorkers = this.workers.length; + var busyWorkers = this.workers.filter(function (worker) { + return worker.busy(); + }).length; + return { + totalWorkers: totalWorkers, + busyWorkers: busyWorkers, + idleWorkers: totalWorkers - busyWorkers, + pendingTasks: this.tasks.length, + activeTasks: busyWorkers + }; +}; +/** + * Ensures that a minimum of minWorkers is up and running + * @protected + */ + + +Pool.prototype._ensureMinWorkers = function () { + if (this.minWorkers) { + for (var i = this.workers.length; i < this.minWorkers; i++) { + this.workers.push(this._createWorkerHandler()); + } + } +}; +/** + * Helper function to create a new WorkerHandler and pass all options. + * @return {WorkerHandler} + * @private + */ + + +Pool.prototype._createWorkerHandler = function () { + var overridenParams = this.onCreateWorker({ + forkArgs: this.forkArgs, + forkOpts: this.forkOpts, + script: this.script + }) || {}; + return new WorkerHandler(overridenParams.script || this.script, { + forkArgs: overridenParams.forkArgs || this.forkArgs, + forkOpts: overridenParams.forkOpts || this.forkOpts, + debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart), + workerType: this.workerType + }); +}; +/** + * Ensure that the maxWorkers option is an integer >= 1 + * @param {*} maxWorkers + * @returns {boolean} returns true maxWorkers has a valid value + */ + + +function validateMaxWorkers(maxWorkers) { + if (!isNumber(maxWorkers) || !isInteger(maxWorkers) || maxWorkers < 1) { + throw new TypeError('Option maxWorkers must be an integer number >= 1'); + } +} +/** + * Ensure that the minWorkers option is an integer >= 0 + * @param {*} minWorkers + * @returns {boolean} returns true when minWorkers has a valid value + */ + + +function validateMinWorkers(minWorkers) { + if (!isNumber(minWorkers) || !isInteger(minWorkers) || minWorkers < 0) { + throw new TypeError('Option minWorkers must be an integer number >= 0'); + } +} +/** + * Test whether a variable is a number + * @param {*} value + * @returns {boolean} returns true when value is a number + */ + + +function isNumber(value) { + return typeof value === 'number'; +} +/** + * Test whether a number is an integer + * @param {number} value + * @returns {boolean} Returns true if value is an integer + */ + + +function isInteger(value) { + return Math.round(value) == value; +} + +module.exports = Pool; + +/***/ }), + +/***/ 219: +/***/ (function(module) { + +"use strict"; + +/** + * Promise + * + * Inspired by https://gist.github.com/RubaXa/8501359 from RubaXa + * + * @param {Function} handler Called as handler(resolve: Function, reject: Function) + * @param {Promise} [parent] Parent promise for propagation of cancel and timeout + */ + +function Promise(handler, parent) { + var me = this; + + if (!(this instanceof Promise)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } + + if (typeof handler !== 'function') { + throw new SyntaxError('Function parameter handler(resolve, reject) missing'); + } + + var _onSuccess = []; + var _onFail = []; // status + + this.resolved = false; + this.rejected = false; + this.pending = true; + /** + * Process onSuccess and onFail callbacks: add them to the queue. + * Once the promise is resolve, the function _promise is replace. + * @param {Function} onSuccess + * @param {Function} onFail + * @private + */ + + var _process = function _process(onSuccess, onFail) { + _onSuccess.push(onSuccess); + + _onFail.push(onFail); + }; + /** + * Add an onSuccess callback and optionally an onFail callback to the Promise + * @param {Function} onSuccess + * @param {Function} [onFail] + * @returns {Promise} promise + */ + + + this.then = function (onSuccess, onFail) { + return new Promise(function (resolve, reject) { + var s = onSuccess ? _then(onSuccess, resolve, reject) : resolve; + var f = onFail ? _then(onFail, resolve, reject) : reject; + + _process(s, f); + }, me); + }; + /** + * Resolve the promise + * @param {*} result + * @type {Function} + */ + + + var _resolve2 = function _resolve(result) { + // update status + me.resolved = true; + me.rejected = false; + me.pending = false; + + _onSuccess.forEach(function (fn) { + fn(result); + }); + + _process = function _process(onSuccess, onFail) { + onSuccess(result); + }; + + _resolve2 = _reject2 = function _reject() {}; + + return me; + }; + /** + * Reject the promise + * @param {Error} error + * @type {Function} + */ + + + var _reject2 = function _reject(error) { + // update status + me.resolved = false; + me.rejected = true; + me.pending = false; + + _onFail.forEach(function (fn) { + fn(error); + }); + + _process = function _process(onSuccess, onFail) { + onFail(error); + }; + + _resolve2 = _reject2 = function _reject() {}; + + return me; + }; + /** + * Cancel te promise. This will reject the promise with a CancellationError + * @returns {Promise} self + */ + + + this.cancel = function () { + if (parent) { + parent.cancel(); + } else { + _reject2(new CancellationError()); + } + + return me; + }; + /** + * Set a timeout for the promise. If the promise is not resolved within + * the time, the promise will be cancelled and a TimeoutError is thrown. + * If the promise is resolved in time, the timeout is removed. + * @param {number} delay Delay in milliseconds + * @returns {Promise} self + */ + + + this.timeout = function (delay) { + if (parent) { + parent.timeout(delay); + } else { + var timer = setTimeout(function () { + _reject2(new TimeoutError('Promise timed out after ' + delay + ' ms')); + }, delay); + me.always(function () { + clearTimeout(timer); + }); + } + + return me; + }; // attach handler passing the resolve and reject functions + + + handler(function (result) { + _resolve2(result); + }, function (error) { + _reject2(error); + }); +} +/** + * Execute given callback, then call resolve/reject based on the returned result + * @param {Function} callback + * @param {Function} resolve + * @param {Function} reject + * @returns {Function} + * @private + */ + + +function _then(callback, resolve, reject) { + return function (result) { + try { + var res = callback(result); + + if (res && typeof res.then === 'function' && typeof res['catch'] === 'function') { + // method returned a promise + res.then(resolve, reject); + } else { + resolve(res); + } + } catch (error) { + reject(error); + } + }; +} +/** + * Add an onFail callback to the Promise + * @param {Function} onFail + * @returns {Promise} promise + */ + + +Promise.prototype['catch'] = function (onFail) { + return this.then(null, onFail); +}; // TODO: add support for Promise.catch(Error, callback) +// TODO: add support for Promise.catch(Error, Error, callback) + +/** + * Execute given callback when the promise either resolves or rejects. + * @param {Function} fn + * @returns {Promise} promise + */ + + +Promise.prototype.always = function (fn) { + return this.then(fn, fn); +}; +/** + * Create a promise which resolves when all provided promises are resolved, + * and fails when any of the promises resolves. + * @param {Promise[]} promises + * @returns {Promise} promise + */ + + +Promise.all = function (promises) { + return new Promise(function (resolve, reject) { + var remaining = promises.length, + results = []; + + if (remaining) { + promises.forEach(function (p, i) { + p.then(function (result) { + results[i] = result; + remaining--; + + if (remaining == 0) { + resolve(results); + } + }, function (error) { + remaining = 0; + reject(error); + }); + }); + } else { + resolve(results); + } + }); +}; +/** + * Create a promise resolver + * @returns {{promise: Promise, resolve: Function, reject: Function}} resolver + */ + + +Promise.defer = function () { + var resolver = {}; + resolver.promise = new Promise(function (resolve, reject) { + resolver.resolve = resolve; + resolver.reject = reject; + }); + return resolver; +}; +/** + * Create a cancellation error + * @param {String} [message] + * @extends Error + */ + + +function CancellationError(message) { + this.message = message || 'promise cancelled'; + this.stack = new Error().stack; +} + +CancellationError.prototype = new Error(); +CancellationError.prototype.constructor = Error; +CancellationError.prototype.name = 'CancellationError'; +Promise.CancellationError = CancellationError; +/** + * Create a timeout error + * @param {String} [message] + * @extends Error + */ + +function TimeoutError(message) { + this.message = message || 'timeout exceeded'; + this.stack = new Error().stack; +} + +TimeoutError.prototype = new Error(); +TimeoutError.prototype.constructor = Error; +TimeoutError.prototype.name = 'TimeoutError'; +Promise.TimeoutError = TimeoutError; +module.exports = Promise; + +/***/ }), + +/***/ 751: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +var Promise = __webpack_require__(219); + +var environment = __webpack_require__(828); + +var requireFoolWebpack = __webpack_require__(397); +/** + * Special message sent by parent which causes a child process worker to terminate itself. + * Not a "message object"; this string is the entire message. + */ + + +var TERMINATE_METHOD_ID = '__workerpool-terminate__'; +/** + * If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds, + * force-kill the child process. + */ + +var CHILD_PROCESS_EXIT_TIMEOUT = 1000; + +function ensureWorkerThreads() { + var WorkerThreads = tryRequireWorkerThreads(); + + if (!WorkerThreads) { + throw new Error('WorkerPool: workerType = \'thread\' is not supported, Node >= 11.7.0 required'); + } + + return WorkerThreads; +} // check whether Worker is supported by the browser + + +function ensureWebWorker() { + // Workaround for a bug in PhantomJS (Or QtWebkit): https://github.com/ariya/phantomjs/issues/14534 + if (typeof Worker !== 'function' && ((typeof Worker === "undefined" ? "undefined" : _typeof(Worker)) !== 'object' || typeof Worker.prototype.constructor !== 'function')) { + throw new Error('WorkerPool: Web Workers not supported'); + } +} + +function tryRequireWorkerThreads() { + try { + return requireFoolWebpack('worker_threads'); + } catch (error) { + if (_typeof(error) === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') { + // no worker_threads available (old version of node.js) + return null; + } else { + throw error; + } + } +} // get the default worker script + + +function getDefaultWorker() { + if (environment.platform === 'browser') { + // test whether the browser supports all features that we need + if (typeof Blob === 'undefined') { + throw new Error('Blob not supported by the browser'); + } + + if (!window.URL || typeof window.URL.createObjectURL !== 'function') { + throw new Error('URL.createObjectURL not supported by the browser'); + } // use embedded worker.js + + + var blob = new Blob([__webpack_require__(670)], { + type: 'text/javascript' + }); + return window.URL.createObjectURL(blob); + } else { + // use external worker.js in current directory + return __dirname + '/worker.js'; + } +} + +function setupWorker(script, options) { + if (options.workerType === 'web') { + // browser only + ensureWebWorker(); + return setupBrowserWorker(script, Worker); + } else if (options.workerType === 'thread') { + // node.js only + WorkerThreads = ensureWorkerThreads(); + return setupWorkerThreadWorker(script, WorkerThreads); + } else if (options.workerType === 'process' || !options.workerType) { + // node.js only + return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); + } else { + // options.workerType === 'auto' or undefined + if (environment.platform === 'browser') { + ensureWebWorker(); + return setupBrowserWorker(script, Worker); + } else { + // environment.platform === 'node' + var WorkerThreads = tryRequireWorkerThreads(); + + if (WorkerThreads) { + return setupWorkerThreadWorker(script, WorkerThreads); + } else { + return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); + } + } + } +} + +function setupBrowserWorker(script, Worker) { + // create the web worker + var worker = new Worker(script); + worker.isBrowserWorker = true; // add node.js API to the web worker + + worker.on = function (event, callback) { + this.addEventListener(event, function (message) { + callback(message.data); + }); + }; + + worker.send = function (message) { + this.postMessage(message); + }; + + return worker; +} + +function setupWorkerThreadWorker(script, WorkerThreads) { + var worker = new WorkerThreads.Worker(script, { + stdout: false, + // automatically pipe worker.STDOUT to process.STDOUT + stderr: false // automatically pipe worker.STDERR to process.STDERR + + }); + worker.isWorkerThread = true; // make the worker mimic a child_process + + worker.send = function (message) { + this.postMessage(message); + }; + + worker.kill = function () { + this.terminate(); + return true; + }; + + worker.disconnect = function () { + this.terminate(); + }; + + return worker; +} + +function setupProcessWorker(script, options, child_process) { + // no WorkerThreads, fallback to sub-process based workers + var worker = child_process.fork(script, options.forkArgs, options.forkOpts); + worker.isChildProcess = true; + return worker; +} // add debug flags to child processes if the node inspector is active + + +function resolveForkOptions(opts) { + opts = opts || {}; + var processExecArgv = process.execArgv.join(' '); + var inspectorActive = processExecArgv.indexOf('--inspect') !== -1; + var debugBrk = processExecArgv.indexOf('--debug-brk') !== -1; + var execArgv = []; + + if (inspectorActive) { + execArgv.push('--inspect=' + opts.debugPort); + + if (debugBrk) { + execArgv.push('--debug-brk'); + } + } + + process.execArgv.forEach(function (arg) { + if (arg.indexOf('--max-old-space-size') > -1) { + execArgv.push(arg); + } + }); + return Object.assign({}, opts, { + forkArgs: opts.forkArgs, + forkOpts: Object.assign({}, opts.forkOpts, { + execArgv: (opts.forkOpts && opts.forkOpts.execArgv || []).concat(execArgv) + }) + }); +} +/** + * Converts a serialized error to Error + * @param {Object} obj Error that has been serialized and parsed to object + * @return {Error} The equivalent Error. + */ + + +function objectToError(obj) { + var temp = new Error(''); + var props = Object.keys(obj); + + for (var i = 0; i < props.length; i++) { + temp[props[i]] = obj[props[i]]; + } + + return temp; +} +/** + * A WorkerHandler controls a single worker. This worker can be a child process + * on node.js or a WebWorker in a browser environment. + * @param {String} [script] If no script is provided, a default worker with a + * function run will be created. + * @param {WorkerPoolOptions} _options See docs + * @constructor + */ + + +function WorkerHandler(script, _options) { + var me = this; + var options = _options || {}; + this.script = script || getDefaultWorker(); + this.worker = setupWorker(this.script, options); + this.debugPort = options.debugPort; + this.forkOpts = options.forkOpts; + this.forkArgs = options.forkArgs; // The ready message is only sent if the worker.add method is called (And the default script is not used) + + if (!script) { + this.worker.ready = true; + } // queue for requests that are received before the worker is ready + + + this.requestQueue = []; + this.worker.on('message', function (response) { + if (me.terminated) { + return; + } + + if (typeof response === 'string' && response === 'ready') { + me.worker.ready = true; + dispatchQueuedRequests(); + } else { + // find the task from the processing queue, and run the tasks callback + var id = response.id; + var task = me.processing[id]; + + if (task !== undefined) { + if (response.isEvent) { + if (task.options && typeof task.options.on === 'function') { + task.options.on(response.payload); + } + } else { + // remove the task from the queue + delete me.processing[id]; // test if we need to terminate + + if (me.terminating === true) { + // complete worker termination if all tasks are finished + me.terminate(); + } // resolve the task's promise + + + if (response.error) { + task.resolver.reject(objectToError(response.error)); + } else { + task.resolver.resolve(response.result); + } + } + } + } + }); // reject all running tasks on worker error + + function onError(error) { + me.terminated = true; + + for (var id in me.processing) { + if (me.processing[id] !== undefined) { + me.processing[id].resolver.reject(error); + } + } + + me.processing = Object.create(null); + } // send all queued requests to worker + + + function dispatchQueuedRequests() { + var _iterator = _createForOfIteratorHelper(me.requestQueue.splice(0)), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var request = _step.value; + me.worker.send(request); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + + var worker = this.worker; // listen for worker messages error and exit + + this.worker.on('error', onError); + this.worker.on('exit', function (exitCode, signalCode) { + var message = 'Workerpool Worker terminated Unexpectedly\n'; + message += ' exitCode: `' + exitCode + '`\n'; + message += ' signalCode: `' + signalCode + '`\n'; + message += ' workerpool.script: `' + me.script + '`\n'; + message += ' spawnArgs: `' + worker.spawnargs + '`\n'; + message += ' spawnfile: `' + worker.spawnfile + '`\n'; + message += ' stdout: `' + worker.stdout + '`\n'; + message += ' stderr: `' + worker.stderr + '`\n'; + onError(new Error(message)); + }); + this.processing = Object.create(null); // queue with tasks currently in progress + + this.terminating = false; + this.terminated = false; + this.terminationHandler = null; + this.lastId = 0; +} +/** + * Get a list with methods available on the worker. + * @return {Promise.} methods + */ + + +WorkerHandler.prototype.methods = function () { + return this.exec('methods'); +}; +/** + * Execute a method with given parameters on the worker + * @param {String} method + * @param {Array} [params] + * @param {{resolve: Function, reject: Function}} [resolver] + * @param {ExecOptions} [options] + * @return {Promise.<*, Error>} result + */ + + +WorkerHandler.prototype.exec = function (method, params, resolver, options) { + if (!resolver) { + resolver = Promise.defer(); + } // generate a unique id for the task + + + var id = ++this.lastId; // register a new task as being in progress + + this.processing[id] = { + id: id, + resolver: resolver, + options: options + }; // build a JSON-RPC request + + var request = { + id: id, + method: method, + params: params + }; + + if (this.terminated) { + resolver.reject(new Error('Worker is terminated')); + } else if (this.worker.ready) { + // send the request to the worker + this.worker.send(request); + } else { + this.requestQueue.push(request); + } // on cancellation, force the worker to terminate + + + var me = this; + return resolver.promise["catch"](function (error) { + if (error instanceof Promise.CancellationError || error instanceof Promise.TimeoutError) { + // remove this task from the queue. It is already rejected (hence this + // catch event), and else it will be rejected again when terminating + delete me.processing[id]; // terminate worker + + return me.terminateAndNotify(true).then(function () { + throw error; + }, function (err) { + throw err; + }); + } else { + throw error; + } + }); +}; +/** + * Test whether the worker is working or not + * @return {boolean} Returns true if the worker is busy + */ + + +WorkerHandler.prototype.busy = function () { + return Object.keys(this.processing).length > 0; +}; +/** + * Terminate the worker. + * @param {boolean} [force=false] If false (default), the worker is terminated + * after finishing all tasks currently in + * progress. If true, the worker will be + * terminated immediately. + * @param {function} [callback=null] If provided, will be called when process terminates. + */ + + +WorkerHandler.prototype.terminate = function (force, callback) { + var me = this; + + if (force) { + // cancel all tasks in progress + for (var id in this.processing) { + if (this.processing[id] !== undefined) { + this.processing[id].resolver.reject(new Error('Worker terminated')); + } + } + + this.processing = Object.create(null); + } + + if (typeof callback === 'function') { + this.terminationHandler = callback; + } + + if (!this.busy()) { + // all tasks are finished. kill the worker + var cleanup = function cleanup(err) { + me.terminated = true; + + if (me.worker != null && me.worker.removeAllListeners) { + // removeAllListeners is only available for child_process + me.worker.removeAllListeners('message'); + } + + me.worker = null; + me.terminating = false; + + if (me.terminationHandler) { + me.terminationHandler(err, me); + } else if (err) { + throw err; + } + }; + + if (this.worker) { + if (typeof this.worker.kill === 'function') { + if (this.worker.killed) { + cleanup(new Error('worker already killed!')); + return; + } + + if (this.worker.isChildProcess) { + var cleanExitTimeout = setTimeout(function () { + if (me.worker) { + me.worker.kill(); + } + }, CHILD_PROCESS_EXIT_TIMEOUT); + this.worker.once('exit', function () { + clearTimeout(cleanExitTimeout); + + if (me.worker) { + me.worker.killed = true; + } + + cleanup(); + }); + + if (this.worker.ready) { + this.worker.send(TERMINATE_METHOD_ID); + } else { + this.worker.requestQueue.push(TERMINATE_METHOD_ID); + } + } else { + // worker_thread + this.worker.kill(); + this.worker.killed = true; + cleanup(); + } + + return; + } else if (typeof this.worker.terminate === 'function') { + this.worker.terminate(); // web worker + + this.worker.killed = true; + } else { + throw new Error('Failed to terminate worker'); + } + } + + cleanup(); + } else { + // we can't terminate immediately, there are still tasks being executed + this.terminating = true; + } +}; +/** + * Terminate the worker, returning a Promise that resolves when the termination has been done. + * @param {boolean} [force=false] If false (default), the worker is terminated + * after finishing all tasks currently in + * progress. If true, the worker will be + * terminated immediately. + * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected + * after timeout if worker process has not been terminated. + * @return {Promise.} + */ + + +WorkerHandler.prototype.terminateAndNotify = function (force, timeout) { + var resolver = Promise.defer(); + + if (timeout) { + resolver.promise.timeout = timeout; + } + + this.terminate(force, function (err, worker) { + if (err) { + resolver.reject(err); + } else { + resolver.resolve(worker); + } + }); + return resolver.promise; +}; + +module.exports = WorkerHandler; +module.exports._tryRequireWorkerThreads = tryRequireWorkerThreads; +module.exports._setupProcessWorker = setupProcessWorker; +module.exports._setupBrowserWorker = setupBrowserWorker; +module.exports._setupWorkerThreadWorker = setupWorkerThreadWorker; +module.exports.ensureWorkerThreads = ensureWorkerThreads; + +/***/ }), + +/***/ 833: +/***/ (function(module) { + +"use strict"; + + +var MAX_PORTS = 65535; +module.exports = DebugPortAllocator; + +function DebugPortAllocator() { + this.ports = Object.create(null); + this.length = 0; +} + +DebugPortAllocator.prototype.nextAvailableStartingAt = function (starting) { + while (this.ports[starting] === true) { + starting++; + } + + if (starting >= MAX_PORTS) { + throw new Error('WorkerPool debug port limit reached: ' + starting + '>= ' + MAX_PORTS); + } + + this.ports[starting] = true; + this.length++; + return starting; +}; + +DebugPortAllocator.prototype.releasePort = function (port) { + delete this.ports[port]; + this.length--; +}; + +/***/ }), + +/***/ 828: +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var requireFoolWebpack = __webpack_require__(397); // source: https://github.com/flexdinesh/browser-or-node + + +var isNode = function isNode(nodeProcess) { + return typeof nodeProcess !== 'undefined' && nodeProcess.versions != null && nodeProcess.versions.node != null; +}; + +module.exports.isNode = isNode; // determines the JavaScript platform: browser or node + +module.exports.platform = typeof process !== 'undefined' && isNode(process) ? 'node' : 'browser'; // determines whether the code is running in main thread or not +// note that in node.js we have to check both worker_thread and child_process + +var worker_threads = tryRequireFoolWebpack('worker_threads'); +module.exports.isMainThread = module.exports.platform === 'node' ? (!worker_threads || worker_threads.isMainThread) && !process.connected : typeof Window !== 'undefined'; // determines the number of cpus available + +module.exports.cpus = module.exports.platform === 'browser' ? self.navigator.hardwareConcurrency : requireFoolWebpack('os').cpus().length; + +function tryRequireFoolWebpack(module) { + try { + return requireFoolWebpack(module); + } catch (err) { + return null; + } +} + +/***/ }), + +/***/ 670: +/***/ (function(module) { + +/** + * embeddedWorker.js contains an embedded version of worker.js. + * This file is automatically generated, + * changes made in this file will be overwritten. + */ +module.exports = "!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\"disconnect\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\"function\"==typeof r.then&&\"function\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\"return (\"+r+\").apply(null, arguments);\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\"message\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \"'+e.method+'\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\"ready\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();"; + +/***/ }), + +/***/ 397: +/***/ (function(module) { + +// source of inspiration: https://github.com/sindresorhus/require-fool-webpack +var requireFoolWebpack = eval('typeof require !== \'undefined\' ' + '? require ' + ': function (module) { throw new Error(\'Module " + module + " not found.\') }'); +module.exports = requireFoolWebpack; + +/***/ }), + +/***/ 744: +/***/ (function(__unused_webpack_module, exports) { + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + +/** + * worker must be started as a child process or a web worker. + * It listens for RPC messages from the parent process. + */ +// source of inspiration: https://github.com/sindresorhus/require-fool-webpack +var requireFoolWebpack = eval('typeof require !== \'undefined\'' + ' ? require' + ' : function (module) { throw new Error(\'Module " + module + " not found.\') }'); +/** + * Special message sent by parent which causes the worker to terminate itself. + * Not a "message object"; this string is the entire message. + */ + +var TERMINATE_METHOD_ID = '__workerpool-terminate__'; // var nodeOSPlatform = require('./environment').nodeOSPlatform; +// create a worker API for sending and receiving messages which works both on +// node.js and in the browser + +var worker = { + exit: function exit() {} +}; + +if (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') { + // worker in the browser + worker.on = function (event, callback) { + addEventListener(event, function (message) { + callback(message.data); + }); + }; + + worker.send = function (message) { + postMessage(message); + }; +} else if (typeof process !== 'undefined') { + // node.js + var WorkerThreads; + + try { + WorkerThreads = requireFoolWebpack('worker_threads'); + } catch (error) { + if (_typeof(error) === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {// no worker_threads, fallback to sub-process based workers + } else { + throw error; + } + } + + if (WorkerThreads && + /* if there is a parentPort, we are in a WorkerThread */ + WorkerThreads.parentPort !== null) { + var parentPort = WorkerThreads.parentPort; + worker.send = parentPort.postMessage.bind(parentPort); + worker.on = parentPort.on.bind(parentPort); + } else { + worker.on = process.on.bind(process); + worker.send = process.send.bind(process); // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly + + worker.on('disconnect', function () { + process.exit(1); + }); + worker.exit = process.exit.bind(process); + } +} else { + throw new Error('Script must be executed as a worker'); +} + +function convertError(error) { + return Object.getOwnPropertyNames(error).reduce(function (product, name) { + return Object.defineProperty(product, name, { + value: error[name], + enumerable: true + }); + }, {}); +} +/** + * Test whether a value is a Promise via duck typing. + * @param {*} value + * @returns {boolean} Returns true when given value is an object + * having functions `then` and `catch`. + */ + + +function isPromise(value) { + return value && typeof value.then === 'function' && typeof value["catch"] === 'function'; +} // functions available externally + + +worker.methods = {}; +/** + * Execute a function with provided arguments + * @param {String} fn Stringified function + * @param {Array} [args] Function arguments + * @returns {*} + */ + +worker.methods.run = function run(fn, args) { + var f = new Function('return (' + fn + ').apply(null, arguments);'); + return f.apply(f, args); +}; +/** + * Get a list with methods available on this worker + * @return {String[]} methods + */ + + +worker.methods.methods = function methods() { + return Object.keys(worker.methods); +}; + +var currentRequestId = null; +worker.on('message', function (request) { + if (request === TERMINATE_METHOD_ID) { + return worker.exit(0); + } + + try { + var method = worker.methods[request.method]; + + if (method) { + currentRequestId = request.id; // execute the function + + var result = method.apply(method, request.params); + + if (isPromise(result)) { + // promise returned, resolve this and then return + result.then(function (result) { + worker.send({ + id: request.id, + result: result, + error: null + }); + currentRequestId = null; + })["catch"](function (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + currentRequestId = null; + }); + } else { + // immediate result + worker.send({ + id: request.id, + result: result, + error: null + }); + currentRequestId = null; + } + } else { + throw new Error('Unknown method "' + request.method + '"'); + } + } catch (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + } +}); +/** + * Register methods to the worker + * @param {Object} methods + */ + +worker.register = function (methods) { + if (methods) { + for (var name in methods) { + if (methods.hasOwnProperty(name)) { + worker.methods[name] = methods[name]; + } + } + } + + worker.send('ready'); +}; + +worker.emit = function (payload) { + if (currentRequestId) { + worker.send({ + id: currentRequestId, + isEvent: true, + payload: payload + }); + } +}; + +if (true) { + exports.add = worker.register; + exports.emit = worker.emit; +} + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +var exports = __webpack_exports__; +var environment = __webpack_require__(828); +/** + * Create a new worker pool + * @param {string} [script] + * @param {WorkerPoolOptions} [options] + * @returns {Pool} pool + */ + + +exports.pool = function pool(script, options) { + var Pool = __webpack_require__(345); + + return new Pool(script, options); +}; +/** + * Create a worker and optionally register a set of methods to the worker. + * @param {Object} [methods] + */ + + +exports.worker = function worker(methods) { + var worker = __webpack_require__(744); + + worker.add(methods); +}; +/** + * Sends an event to the parent worker pool. + * @param {any} payload + */ + + +exports.workerEmit = function workerEmit(payload) { + var worker = __webpack_require__(744); + + worker.emit(payload); +}; +/** + * Create a promise. + * @type {Promise} promise + */ + + +exports.Promise = __webpack_require__(219); +exports.platform = environment.platform; +exports.isMainThread = environment.isMainThread; +exports.cpus = environment.cpus; +}(); +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=workerpool.js.map \ No newline at end of file diff --git a/build/node_modules/workerpool/dist/workerpool.js.map b/build/node_modules/workerpool/dist/workerpool.js.map new file mode 100644 index 00000000..5cbed23c --- /dev/null +++ b/build/node_modules/workerpool/dist/workerpool.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workerpool.js","mappings":"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","sources":["webpack://workerpool/webpack/universalModuleDefinition","webpack://workerpool/./src/Pool.js","webpack://workerpool/./src/Promise.js","webpack://workerpool/./src/WorkerHandler.js","webpack://workerpool/./src/debug-port-allocator.js","webpack://workerpool/./src/environment.js","webpack://workerpool/./src/generated/embeddedWorker.js","webpack://workerpool/./src/requireFoolWebpack.js","webpack://workerpool/./src/worker.js","webpack://workerpool/webpack/bootstrap","webpack://workerpool/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"workerpool\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"workerpool\"] = factory();\n\telse\n\t\troot[\"workerpool\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn ","var Promise = require('./Promise');\nvar WorkerHandler = require('./WorkerHandler');\nvar environment = require('./environment');\nvar DebugPortAllocator = require('./debug-port-allocator');\nvar DEBUG_PORT_ALLOCATOR = new DebugPortAllocator();\n/**\n * A pool to manage workers\n * @param {String} [script] Optional worker script\n * @param {WorkerPoolOptions} [options] See docs\n * @constructor\n */\nfunction Pool(script, options) {\n if (typeof script === 'string') {\n this.script = script || null;\n }\n else {\n this.script = null;\n options = script;\n }\n\n this.workers = []; // queue with all workers\n this.tasks = []; // queue with tasks awaiting execution\n\n options = options || {};\n\n this.forkArgs = Object.freeze(options.forkArgs || []);\n this.forkOpts = Object.freeze(options.forkOpts || {});\n this.debugPortStart = (options.debugPortStart || 43210);\n this.nodeWorker = options.nodeWorker;\n this.workerType = options.workerType || options.nodeWorker || 'auto'\n this.maxQueueSize = options.maxQueueSize || Infinity;\n\n this.onCreateWorker = options.onCreateWorker || (() => null);\n this.onTerminateWorker = options.onTerminateWorker || (() => null);\n\n // configuration\n if (options && 'maxWorkers' in options) {\n validateMaxWorkers(options.maxWorkers);\n this.maxWorkers = options.maxWorkers;\n }\n else {\n this.maxWorkers = Math.max((environment.cpus || 4) - 1, 1);\n }\n\n if (options && 'minWorkers' in options) {\n if(options.minWorkers === 'max') {\n this.minWorkers = this.maxWorkers;\n } else {\n validateMinWorkers(options.minWorkers);\n this.minWorkers = options.minWorkers;\n this.maxWorkers = Math.max(this.minWorkers, this.maxWorkers); // in case minWorkers is higher than maxWorkers\n }\n this._ensureMinWorkers();\n }\n\n this._boundNext = this._next.bind(this);\n\n\n if (this.workerType === 'thread') {\n WorkerHandler.ensureWorkerThreads();\n }\n}\n\n\n/**\n * Execute a function on a worker.\n *\n * Example usage:\n *\n * var pool = new Pool()\n *\n * // call a function available on the worker\n * pool.exec('fibonacci', [6])\n *\n * // offload a function\n * function add(a, b) {\n * return a + b\n * };\n * pool.exec(add, [2, 4])\n * .then(function (result) {\n * console.log(result); // outputs 6\n * })\n * .catch(function(error) {\n * console.log(error);\n * });\n *\n * @param {String | Function} method Function name or function.\n * If `method` is a string, the corresponding\n * method on the worker will be executed\n * If `method` is a Function, the function\n * will be stringified and executed via the\n * workers built-in function `run(fn, args)`.\n * @param {Array} [params] Function arguments applied when calling the function\n * @param {ExecOptions} [options] Options object\n * @return {Promise.<*, Error>} result\n */\nPool.prototype.exec = function (method, params, options) {\n // validate type of arguments\n if (params && !Array.isArray(params)) {\n throw new TypeError('Array expected as argument \"params\"');\n }\n\n if (typeof method === 'string') {\n var resolver = Promise.defer();\n\n if (this.tasks.length >= this.maxQueueSize) {\n throw new Error('Max queue size of ' + this.maxQueueSize + ' reached');\n }\n\n // add a new task to the queue\n var tasks = this.tasks;\n var task = {\n method: method,\n params: params,\n resolver: resolver,\n timeout: null,\n options: options\n };\n tasks.push(task);\n\n // replace the timeout method of the Promise with our own,\n // which starts the timer as soon as the task is actually started\n var originalTimeout = resolver.promise.timeout;\n resolver.promise.timeout = function timeout (delay) {\n if (tasks.indexOf(task) !== -1) {\n // task is still queued -> start the timer later on\n task.timeout = delay;\n return resolver.promise;\n }\n else {\n // task is already being executed -> start timer immediately\n return originalTimeout.call(resolver.promise, delay);\n }\n };\n\n // trigger task execution\n this._next();\n\n return resolver.promise;\n }\n else if (typeof method === 'function') {\n // send stringified function and function arguments to worker\n return this.exec('run', [String(method), params]);\n }\n else {\n throw new TypeError('Function or string expected as argument \"method\"');\n }\n};\n\n/**\n * Create a proxy for current worker. Returns an object containing all\n * methods available on the worker. The methods always return a promise.\n *\n * @return {Promise.} proxy\n */\nPool.prototype.proxy = function () {\n if (arguments.length > 0) {\n throw new Error('No arguments expected');\n }\n\n var pool = this;\n return this.exec('methods')\n .then(function (methods) {\n var proxy = {};\n\n methods.forEach(function (method) {\n proxy[method] = function () {\n return pool.exec(method, Array.prototype.slice.call(arguments));\n }\n });\n\n return proxy;\n });\n};\n\n/**\n * Creates new array with the results of calling a provided callback function\n * on every element in this array.\n * @param {Array} array\n * @param {function} callback Function taking two arguments:\n * `callback(currentValue, index)`\n * @return {Promise.} Returns a promise which resolves with an Array\n * containing the results of the callback function\n * executed for each of the array elements.\n */\n/* TODO: implement map\nPool.prototype.map = function (array, callback) {\n};\n*/\n\n/**\n * Grab the first task from the queue, find a free worker, and assign the\n * worker to the task.\n * @protected\n */\nPool.prototype._next = function () {\n if (this.tasks.length > 0) {\n // there are tasks in the queue\n\n // find an available worker\n var worker = this._getWorker();\n if (worker) {\n // get the first task from the queue\n var me = this;\n var task = this.tasks.shift();\n\n // check if the task is still pending (and not cancelled -> promise rejected)\n if (task.resolver.promise.pending) {\n // send the request to the worker\n var promise = worker.exec(task.method, task.params, task.resolver, task.options)\n .then(me._boundNext)\n .catch(function () {\n // if the worker crashed and terminated, remove it from the pool\n if (worker.terminated) {\n return me._removeWorker(worker);\n }\n }).then(function() {\n me._next(); // trigger next task in the queue\n });\n\n // start queued timer now\n if (typeof task.timeout === 'number') {\n promise.timeout(task.timeout);\n }\n } else {\n // The task taken was already complete (either rejected or resolved), so just trigger next task in the queue\n me._next();\n }\n }\n }\n};\n\n/**\n * Get an available worker. If no worker is available and the maximum number\n * of workers isn't yet reached, a new worker will be created and returned.\n * If no worker is available and the maximum number of workers is reached,\n * null will be returned.\n *\n * @return {WorkerHandler | null} worker\n * @private\n */\nPool.prototype._getWorker = function() {\n // find a non-busy worker\n var workers = this.workers;\n for (var i = 0; i < workers.length; i++) {\n var worker = workers[i];\n if (worker.busy() === false) {\n return worker;\n }\n }\n\n if (workers.length < this.maxWorkers) {\n // create a new worker\n worker = this._createWorkerHandler();\n workers.push(worker);\n return worker;\n }\n\n return null;\n};\n\n/**\n * Remove a worker from the pool.\n * Attempts to terminate worker if not already terminated, and ensures the minimum\n * pool size is met.\n * @param {WorkerHandler} worker\n * @return {Promise}\n * @protected\n */\nPool.prototype._removeWorker = function(worker) {\n var me = this;\n\n DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort);\n // _removeWorker will call this, but we need it to be removed synchronously\n this._removeWorkerFromList(worker);\n // If minWorkers set, spin up new workers to replace the crashed ones\n this._ensureMinWorkers();\n // terminate the worker (if not already terminated)\n return new Promise(function(resolve, reject) {\n worker.terminate(false, function(err) {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n script: worker.script\n });\n if (err) {\n reject(err);\n } else {\n resolve(worker);\n }\n });\n });\n};\n\n/**\n * Remove a worker from the pool list.\n * @param {WorkerHandler} worker\n * @protected\n */\nPool.prototype._removeWorkerFromList = function(worker) {\n // remove from the list with workers\n var index = this.workers.indexOf(worker);\n if (index !== -1) {\n this.workers.splice(index, 1);\n }\n};\n\n/**\n * Close all active workers. Tasks currently being executed will be finished first.\n * @param {boolean} [force=false] If false (default), the workers are terminated\n * after finishing all tasks currently in\n * progress. If true, the workers will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nPool.prototype.terminate = function (force, timeout) {\n var me = this;\n\n // cancel any pending tasks\n this.tasks.forEach(function (task) {\n task.resolver.reject(new Error('Pool terminated'));\n });\n this.tasks.length = 0;\n\n var f = function (worker) {\n this._removeWorkerFromList(worker);\n };\n var removeWorker = f.bind(this);\n\n var promises = [];\n var workers = this.workers.slice();\n workers.forEach(function (worker) {\n var termPromise = worker.terminateAndNotify(force, timeout)\n .then(removeWorker)\n .always(function() {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n script: worker.script\n });\n });\n promises.push(termPromise);\n });\n return Promise.all(promises);\n};\n\n/**\n * Retrieve statistics on tasks and workers.\n * @return {{totalWorkers: number, busyWorkers: number, idleWorkers: number, pendingTasks: number, activeTasks: number}} Returns an object with statistics\n */\nPool.prototype.stats = function () {\n var totalWorkers = this.workers.length;\n var busyWorkers = this.workers.filter(function (worker) {\n return worker.busy();\n }).length;\n\n return {\n totalWorkers: totalWorkers,\n busyWorkers: busyWorkers,\n idleWorkers: totalWorkers - busyWorkers,\n\n pendingTasks: this.tasks.length,\n activeTasks: busyWorkers\n };\n};\n\n/**\n * Ensures that a minimum of minWorkers is up and running\n * @protected\n */\nPool.prototype._ensureMinWorkers = function() {\n if (this.minWorkers) {\n for(var i = this.workers.length; i < this.minWorkers; i++) {\n this.workers.push(this._createWorkerHandler());\n }\n }\n};\n\n/**\n * Helper function to create a new WorkerHandler and pass all options.\n * @return {WorkerHandler}\n * @private\n */\nPool.prototype._createWorkerHandler = function () {\n const overridenParams = this.onCreateWorker({\n forkArgs: this.forkArgs,\n forkOpts: this.forkOpts,\n script: this.script\n }) || {};\n\n return new WorkerHandler(overridenParams.script || this.script, {\n forkArgs: overridenParams.forkArgs || this.forkArgs,\n forkOpts: overridenParams.forkOpts || this.forkOpts,\n debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart),\n workerType: this.workerType\n });\n}\n\n/**\n * Ensure that the maxWorkers option is an integer >= 1\n * @param {*} maxWorkers\n * @returns {boolean} returns true maxWorkers has a valid value\n */\nfunction validateMaxWorkers(maxWorkers) {\n if (!isNumber(maxWorkers) || !isInteger(maxWorkers) || maxWorkers < 1) {\n throw new TypeError('Option maxWorkers must be an integer number >= 1');\n }\n}\n\n/**\n * Ensure that the minWorkers option is an integer >= 0\n * @param {*} minWorkers\n * @returns {boolean} returns true when minWorkers has a valid value\n */\nfunction validateMinWorkers(minWorkers) {\n if (!isNumber(minWorkers) || !isInteger(minWorkers) || minWorkers < 0) {\n throw new TypeError('Option minWorkers must be an integer number >= 0');\n }\n}\n\n/**\n * Test whether a variable is a number\n * @param {*} value\n * @returns {boolean} returns true when value is a number\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Test whether a number is an integer\n * @param {number} value\n * @returns {boolean} Returns true if value is an integer\n */\nfunction isInteger(value) {\n return Math.round(value) == value;\n}\n\nmodule.exports = Pool;\n","'use strict';\n\n/**\n * Promise\n *\n * Inspired by https://gist.github.com/RubaXa/8501359 from RubaXa \n *\n * @param {Function} handler Called as handler(resolve: Function, reject: Function)\n * @param {Promise} [parent] Parent promise for propagation of cancel and timeout\n */\nfunction Promise(handler, parent) {\n var me = this;\n\n if (!(this instanceof Promise)) {\n throw new SyntaxError('Constructor must be called with the new operator');\n }\n\n if (typeof handler !== 'function') {\n throw new SyntaxError('Function parameter handler(resolve, reject) missing');\n }\n\n var _onSuccess = [];\n var _onFail = [];\n\n // status\n this.resolved = false;\n this.rejected = false;\n this.pending = true;\n\n /**\n * Process onSuccess and onFail callbacks: add them to the queue.\n * Once the promise is resolve, the function _promise is replace.\n * @param {Function} onSuccess\n * @param {Function} onFail\n * @private\n */\n var _process = function (onSuccess, onFail) {\n _onSuccess.push(onSuccess);\n _onFail.push(onFail);\n };\n\n /**\n * Add an onSuccess callback and optionally an onFail callback to the Promise\n * @param {Function} onSuccess\n * @param {Function} [onFail]\n * @returns {Promise} promise\n */\n this.then = function (onSuccess, onFail) {\n return new Promise(function (resolve, reject) {\n var s = onSuccess ? _then(onSuccess, resolve, reject) : resolve;\n var f = onFail ? _then(onFail, resolve, reject) : reject;\n\n _process(s, f);\n }, me);\n };\n\n /**\n * Resolve the promise\n * @param {*} result\n * @type {Function}\n */\n var _resolve = function (result) {\n // update status\n me.resolved = true;\n me.rejected = false;\n me.pending = false;\n\n _onSuccess.forEach(function (fn) {\n fn(result);\n });\n\n _process = function (onSuccess, onFail) {\n onSuccess(result);\n };\n\n _resolve = _reject = function () { };\n\n return me;\n };\n\n /**\n * Reject the promise\n * @param {Error} error\n * @type {Function}\n */\n var _reject = function (error) {\n // update status\n me.resolved = false;\n me.rejected = true;\n me.pending = false;\n\n _onFail.forEach(function (fn) {\n fn(error);\n });\n\n _process = function (onSuccess, onFail) {\n onFail(error);\n };\n\n _resolve = _reject = function () { }\n\n return me;\n };\n\n /**\n * Cancel te promise. This will reject the promise with a CancellationError\n * @returns {Promise} self\n */\n this.cancel = function () {\n if (parent) {\n parent.cancel();\n }\n else {\n _reject(new CancellationError());\n }\n\n return me;\n };\n\n /**\n * Set a timeout for the promise. If the promise is not resolved within\n * the time, the promise will be cancelled and a TimeoutError is thrown.\n * If the promise is resolved in time, the timeout is removed.\n * @param {number} delay Delay in milliseconds\n * @returns {Promise} self\n */\n this.timeout = function (delay) {\n if (parent) {\n parent.timeout(delay);\n }\n else {\n var timer = setTimeout(function () {\n _reject(new TimeoutError('Promise timed out after ' + delay + ' ms'));\n }, delay);\n\n me.always(function () {\n clearTimeout(timer);\n });\n }\n\n return me;\n };\n\n // attach handler passing the resolve and reject functions\n handler(function (result) {\n _resolve(result);\n }, function (error) {\n _reject(error);\n });\n}\n\n/**\n * Execute given callback, then call resolve/reject based on the returned result\n * @param {Function} callback\n * @param {Function} resolve\n * @param {Function} reject\n * @returns {Function}\n * @private\n */\nfunction _then(callback, resolve, reject) {\n return function (result) {\n try {\n var res = callback(result);\n if (res && typeof res.then === 'function' && typeof res['catch'] === 'function') {\n // method returned a promise\n res.then(resolve, reject);\n }\n else {\n resolve(res);\n }\n }\n catch (error) {\n reject(error);\n }\n }\n}\n\n/**\n * Add an onFail callback to the Promise\n * @param {Function} onFail\n * @returns {Promise} promise\n */\nPromise.prototype['catch'] = function (onFail) {\n return this.then(null, onFail);\n};\n\n// TODO: add support for Promise.catch(Error, callback)\n// TODO: add support for Promise.catch(Error, Error, callback)\n\n/**\n * Execute given callback when the promise either resolves or rejects.\n * @param {Function} fn\n * @returns {Promise} promise\n */\nPromise.prototype.always = function (fn) {\n return this.then(fn, fn);\n};\n\n/**\n * Create a promise which resolves when all provided promises are resolved,\n * and fails when any of the promises resolves.\n * @param {Promise[]} promises\n * @returns {Promise} promise\n */\nPromise.all = function (promises){\n return new Promise(function (resolve, reject) {\n var remaining = promises.length,\n results = [];\n\n if (remaining) {\n promises.forEach(function (p, i) {\n p.then(function (result) {\n results[i] = result;\n remaining--;\n if (remaining == 0) {\n resolve(results);\n }\n }, function (error) {\n remaining = 0;\n reject(error);\n });\n });\n }\n else {\n resolve(results);\n }\n });\n};\n\n/**\n * Create a promise resolver\n * @returns {{promise: Promise, resolve: Function, reject: Function}} resolver\n */\nPromise.defer = function () {\n var resolver = {};\n\n resolver.promise = new Promise(function (resolve, reject) {\n resolver.resolve = resolve;\n resolver.reject = reject;\n });\n\n return resolver;\n};\n\n/**\n * Create a cancellation error\n * @param {String} [message]\n * @extends Error\n */\nfunction CancellationError(message) {\n this.message = message || 'promise cancelled';\n this.stack = (new Error()).stack;\n}\n\nCancellationError.prototype = new Error();\nCancellationError.prototype.constructor = Error;\nCancellationError.prototype.name = 'CancellationError';\n\nPromise.CancellationError = CancellationError;\n\n\n/**\n * Create a timeout error\n * @param {String} [message]\n * @extends Error\n */\nfunction TimeoutError(message) {\n this.message = message || 'timeout exceeded';\n this.stack = (new Error()).stack;\n}\n\nTimeoutError.prototype = new Error();\nTimeoutError.prototype.constructor = Error;\nTimeoutError.prototype.name = 'TimeoutError';\n\nPromise.TimeoutError = TimeoutError;\n\n\nmodule.exports = Promise;\n","'use strict';\n\nvar Promise = require('./Promise');\nvar environment = require('./environment');\nvar requireFoolWebpack = require('./requireFoolWebpack');\n\n/**\n * Special message sent by parent which causes a child process worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n/**\n * If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds,\n * force-kill the child process.\n */\nvar CHILD_PROCESS_EXIT_TIMEOUT = 1000;\n\nfunction ensureWorkerThreads() {\n var WorkerThreads = tryRequireWorkerThreads()\n if (!WorkerThreads) {\n throw new Error('WorkerPool: workerType = \\'thread\\' is not supported, Node >= 11.7.0 required')\n }\n\n return WorkerThreads;\n}\n\n// check whether Worker is supported by the browser\nfunction ensureWebWorker() {\n // Workaround for a bug in PhantomJS (Or QtWebkit): https://github.com/ariya/phantomjs/issues/14534\n if (typeof Worker !== 'function' && (typeof Worker !== 'object' || typeof Worker.prototype.constructor !== 'function')) {\n throw new Error('WorkerPool: Web Workers not supported');\n }\n}\n\nfunction tryRequireWorkerThreads() {\n try {\n return requireFoolWebpack('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads available (old version of node.js)\n return null;\n } else {\n throw error;\n }\n }\n}\n\n// get the default worker script\nfunction getDefaultWorker() {\n if (environment.platform === 'browser') {\n // test whether the browser supports all features that we need\n if (typeof Blob === 'undefined') {\n throw new Error('Blob not supported by the browser');\n }\n if (!window.URL || typeof window.URL.createObjectURL !== 'function') {\n throw new Error('URL.createObjectURL not supported by the browser');\n }\n\n // use embedded worker.js\n var blob = new Blob([require('./generated/embeddedWorker')], {type: 'text/javascript'});\n return window.URL.createObjectURL(blob);\n }\n else {\n // use external worker.js in current directory\n return __dirname + '/worker.js';\n }\n}\n\nfunction setupWorker(script, options) {\n if (options.workerType === 'web') { // browser only\n ensureWebWorker();\n return setupBrowserWorker(script, Worker);\n } else if (options.workerType === 'thread') { // node.js only\n WorkerThreads = ensureWorkerThreads();\n return setupWorkerThreadWorker(script, WorkerThreads);\n } else if (options.workerType === 'process' || !options.workerType) { // node.js only\n return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process'));\n } else { // options.workerType === 'auto' or undefined\n if (environment.platform === 'browser') {\n ensureWebWorker();\n return setupBrowserWorker(script, Worker);\n }\n else { // environment.platform === 'node'\n var WorkerThreads = tryRequireWorkerThreads();\n if (WorkerThreads) {\n return setupWorkerThreadWorker(script, WorkerThreads);\n } else {\n return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process'));\n }\n }\n }\n}\n\nfunction setupBrowserWorker(script, Worker) {\n // create the web worker\n var worker = new Worker(script);\n\n worker.isBrowserWorker = true;\n // add node.js API to the web worker\n worker.on = function (event, callback) {\n this.addEventListener(event, function (message) {\n callback(message.data);\n });\n };\n worker.send = function (message) {\n this.postMessage(message);\n };\n return worker;\n}\n\nfunction setupWorkerThreadWorker(script, WorkerThreads) {\n var worker = new WorkerThreads.Worker(script, {\n stdout: false, // automatically pipe worker.STDOUT to process.STDOUT\n stderr: false // automatically pipe worker.STDERR to process.STDERR\n });\n worker.isWorkerThread = true;\n // make the worker mimic a child_process\n worker.send = function(message) {\n this.postMessage(message);\n };\n\n worker.kill = function() {\n this.terminate();\n return true;\n };\n\n worker.disconnect = function() {\n this.terminate();\n };\n\n return worker;\n}\n\nfunction setupProcessWorker(script, options, child_process) {\n // no WorkerThreads, fallback to sub-process based workers\n var worker = child_process.fork(\n script,\n options.forkArgs,\n options.forkOpts\n );\n\n worker.isChildProcess = true;\n return worker;\n}\n\n// add debug flags to child processes if the node inspector is active\nfunction resolveForkOptions(opts) {\n opts = opts || {};\n\n var processExecArgv = process.execArgv.join(' ');\n var inspectorActive = processExecArgv.indexOf('--inspect') !== -1;\n var debugBrk = processExecArgv.indexOf('--debug-brk') !== -1;\n\n var execArgv = [];\n if (inspectorActive) {\n execArgv.push('--inspect=' + opts.debugPort);\n\n if (debugBrk) {\n execArgv.push('--debug-brk');\n }\n }\n\n process.execArgv.forEach(function(arg) {\n if (arg.indexOf('--max-old-space-size') > -1) {\n execArgv.push(arg)\n }\n })\n\n return Object.assign({}, opts, {\n forkArgs: opts.forkArgs,\n forkOpts: Object.assign({}, opts.forkOpts, {\n execArgv: (opts.forkOpts && opts.forkOpts.execArgv || [])\n .concat(execArgv)\n })\n });\n}\n\n/**\n * Converts a serialized error to Error\n * @param {Object} obj Error that has been serialized and parsed to object\n * @return {Error} The equivalent Error.\n */\nfunction objectToError (obj) {\n var temp = new Error('')\n var props = Object.keys(obj)\n\n for (var i = 0; i < props.length; i++) {\n temp[props[i]] = obj[props[i]]\n }\n\n return temp\n}\n\n/**\n * A WorkerHandler controls a single worker. This worker can be a child process\n * on node.js or a WebWorker in a browser environment.\n * @param {String} [script] If no script is provided, a default worker with a\n * function run will be created.\n * @param {WorkerPoolOptions} _options See docs\n * @constructor\n */\nfunction WorkerHandler(script, _options) {\n var me = this;\n var options = _options || {};\n\n this.script = script || getDefaultWorker();\n this.worker = setupWorker(this.script, options);\n this.debugPort = options.debugPort;\n this.forkOpts = options.forkOpts;\n this.forkArgs = options.forkArgs;\n\n // The ready message is only sent if the worker.add method is called (And the default script is not used)\n if (!script) {\n this.worker.ready = true;\n }\n\n // queue for requests that are received before the worker is ready\n this.requestQueue = [];\n this.worker.on('message', function (response) {\n if (me.terminated) {\n return;\n }\n if (typeof response === 'string' && response === 'ready') {\n me.worker.ready = true;\n dispatchQueuedRequests();\n } else {\n // find the task from the processing queue, and run the tasks callback\n var id = response.id;\n var task = me.processing[id];\n if (task !== undefined) {\n if (response.isEvent) {\n if (task.options && typeof task.options.on === 'function') {\n task.options.on(response.payload);\n }\n } else {\n // remove the task from the queue\n delete me.processing[id];\n\n // test if we need to terminate\n if (me.terminating === true) {\n // complete worker termination if all tasks are finished\n me.terminate();\n }\n\n // resolve the task's promise\n if (response.error) {\n task.resolver.reject(objectToError(response.error));\n }\n else {\n task.resolver.resolve(response.result);\n }\n }\n }\n }\n });\n\n // reject all running tasks on worker error\n function onError(error) {\n me.terminated = true;\n\n for (var id in me.processing) {\n if (me.processing[id] !== undefined) {\n me.processing[id].resolver.reject(error);\n }\n }\n me.processing = Object.create(null);\n }\n\n // send all queued requests to worker\n function dispatchQueuedRequests()\n {\n for(const request of me.requestQueue.splice(0)) {\n me.worker.send(request);\n }\n }\n\n var worker = this.worker;\n // listen for worker messages error and exit\n this.worker.on('error', onError);\n this.worker.on('exit', function (exitCode, signalCode) {\n var message = 'Workerpool Worker terminated Unexpectedly\\n';\n\n message += ' exitCode: `' + exitCode + '`\\n';\n message += ' signalCode: `' + signalCode + '`\\n';\n\n message += ' workerpool.script: `' + me.script + '`\\n';\n message += ' spawnArgs: `' + worker.spawnargs + '`\\n';\n message += ' spawnfile: `' + worker.spawnfile + '`\\n'\n\n message += ' stdout: `' + worker.stdout + '`\\n'\n message += ' stderr: `' + worker.stderr + '`\\n'\n\n onError(new Error(message));\n });\n\n this.processing = Object.create(null); // queue with tasks currently in progress\n\n this.terminating = false;\n this.terminated = false;\n this.terminationHandler = null;\n this.lastId = 0;\n}\n\n/**\n * Get a list with methods available on the worker.\n * @return {Promise.} methods\n */\nWorkerHandler.prototype.methods = function () {\n return this.exec('methods');\n};\n\n/**\n * Execute a method with given parameters on the worker\n * @param {String} method\n * @param {Array} [params]\n * @param {{resolve: Function, reject: Function}} [resolver]\n * @param {ExecOptions} [options]\n * @return {Promise.<*, Error>} result\n */\nWorkerHandler.prototype.exec = function(method, params, resolver, options) {\n if (!resolver) {\n resolver = Promise.defer();\n }\n\n // generate a unique id for the task\n var id = ++this.lastId;\n\n // register a new task as being in progress\n this.processing[id] = {\n id: id,\n resolver: resolver,\n options: options\n };\n\n // build a JSON-RPC request\n var request = {\n id: id,\n method: method,\n params: params\n };\n\n if (this.terminated) {\n resolver.reject(new Error('Worker is terminated'));\n } else if (this.worker.ready) {\n // send the request to the worker\n this.worker.send(request);\n } else {\n this.requestQueue.push(request);\n }\n\n // on cancellation, force the worker to terminate\n var me = this;\n return resolver.promise.catch(function (error) {\n if (error instanceof Promise.CancellationError || error instanceof Promise.TimeoutError) {\n // remove this task from the queue. It is already rejected (hence this\n // catch event), and else it will be rejected again when terminating\n delete me.processing[id];\n\n // terminate worker\n return me.terminateAndNotify(true)\n .then(function() {\n throw error;\n }, function(err) {\n throw err;\n });\n } else {\n throw error;\n }\n })\n};\n\n/**\n * Test whether the worker is working or not\n * @return {boolean} Returns true if the worker is busy\n */\nWorkerHandler.prototype.busy = function () {\n return Object.keys(this.processing).length > 0;\n};\n\n/**\n * Terminate the worker.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {function} [callback=null] If provided, will be called when process terminates.\n */\nWorkerHandler.prototype.terminate = function (force, callback) {\n var me = this;\n if (force) {\n // cancel all tasks in progress\n for (var id in this.processing) {\n if (this.processing[id] !== undefined) {\n this.processing[id].resolver.reject(new Error('Worker terminated'));\n }\n }\n this.processing = Object.create(null);\n }\n\n if (typeof callback === 'function') {\n this.terminationHandler = callback;\n }\n if (!this.busy()) {\n // all tasks are finished. kill the worker\n var cleanup = function(err) {\n me.terminated = true;\n if (me.worker != null && me.worker.removeAllListeners) {\n // removeAllListeners is only available for child_process\n me.worker.removeAllListeners('message');\n }\n me.worker = null;\n me.terminating = false;\n if (me.terminationHandler) {\n me.terminationHandler(err, me);\n } else if (err) {\n throw err;\n }\n }\n\n if (this.worker) {\n if (typeof this.worker.kill === 'function') {\n if (this.worker.killed) {\n cleanup(new Error('worker already killed!'));\n return;\n }\n\n if (this.worker.isChildProcess) {\n var cleanExitTimeout = setTimeout(function() {\n if (me.worker) {\n me.worker.kill();\n }\n }, CHILD_PROCESS_EXIT_TIMEOUT);\n\n this.worker.once('exit', function() {\n clearTimeout(cleanExitTimeout);\n if (me.worker) {\n me.worker.killed = true;\n }\n cleanup();\n });\n\n if (this.worker.ready) {\n this.worker.send(TERMINATE_METHOD_ID);\n } else {\n this.worker.requestQueue.push(TERMINATE_METHOD_ID)\n }\n } else {\n // worker_thread\n this.worker.kill();\n this.worker.killed = true;\n cleanup();\n }\n return;\n }\n else if (typeof this.worker.terminate === 'function') {\n this.worker.terminate(); // web worker\n this.worker.killed = true;\n }\n else {\n throw new Error('Failed to terminate worker');\n }\n }\n cleanup();\n }\n else {\n // we can't terminate immediately, there are still tasks being executed\n this.terminating = true;\n }\n};\n\n/**\n * Terminate the worker, returning a Promise that resolves when the termination has been done.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nWorkerHandler.prototype.terminateAndNotify = function (force, timeout) {\n var resolver = Promise.defer();\n if (timeout) {\n resolver.promise.timeout = timeout;\n }\n this.terminate(force, function(err, worker) {\n if (err) {\n resolver.reject(err);\n } else {\n resolver.resolve(worker);\n }\n });\n return resolver.promise;\n};\n\nmodule.exports = WorkerHandler;\nmodule.exports._tryRequireWorkerThreads = tryRequireWorkerThreads;\nmodule.exports._setupProcessWorker = setupProcessWorker;\nmodule.exports._setupBrowserWorker = setupBrowserWorker;\nmodule.exports._setupWorkerThreadWorker = setupWorkerThreadWorker;\nmodule.exports.ensureWorkerThreads = ensureWorkerThreads;\n","'use strict';\n\nvar MAX_PORTS = 65535;\nmodule.exports = DebugPortAllocator;\nfunction DebugPortAllocator() {\n this.ports = Object.create(null);\n this.length = 0;\n}\n\nDebugPortAllocator.prototype.nextAvailableStartingAt = function(starting) {\n while (this.ports[starting] === true) {\n starting++;\n }\n\n if (starting >= MAX_PORTS) {\n throw new Error('WorkerPool debug port limit reached: ' + starting + '>= ' + MAX_PORTS );\n }\n\n this.ports[starting] = true;\n this.length++;\n return starting;\n};\n\nDebugPortAllocator.prototype.releasePort = function(port) {\n delete this.ports[port];\n this.length--;\n};\n\n","var requireFoolWebpack = require('./requireFoolWebpack');\n\n// source: https://github.com/flexdinesh/browser-or-node\nvar isNode = function (nodeProcess) {\n return (\n typeof nodeProcess !== 'undefined' &&\n nodeProcess.versions != null &&\n nodeProcess.versions.node != null\n );\n}\nmodule.exports.isNode = isNode\n\n// determines the JavaScript platform: browser or node\nmodule.exports.platform = typeof process !== 'undefined' && isNode(process)\n ? 'node'\n : 'browser';\n\n// determines whether the code is running in main thread or not\n// note that in node.js we have to check both worker_thread and child_process\nvar worker_threads = tryRequireFoolWebpack('worker_threads');\nmodule.exports.isMainThread = module.exports.platform === 'node'\n ? ((!worker_threads || worker_threads.isMainThread) && !process.connected)\n : typeof Window !== 'undefined';\n\n// determines the number of cpus available\nmodule.exports.cpus = module.exports.platform === 'browser'\n ? self.navigator.hardwareConcurrency\n : requireFoolWebpack('os').cpus().length;\n\nfunction tryRequireFoolWebpack (module) {\n try {\n return requireFoolWebpack(module);\n } catch(err) {\n return null\n }\n}\n","/**\n * embeddedWorker.js contains an embedded version of worker.js.\n * This file is automatically generated,\n * changes made in this file will be overwritten.\n */\nmodule.exports = \"!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\\\"function\\\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\\\"symbol\\\":typeof r})(r)}var requireFoolWebpack=eval(\\\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\\\\\" + module + \\\\\\\" not found.') }\\\"),TERMINATE_METHOD_ID=\\\"__workerpool-terminate__\\\",worker={exit:function(){}},WorkerThreads,parentPort;if(\\\"undefined\\\"!=typeof self&&\\\"function\\\"==typeof postMessage&&\\\"function\\\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\\\"undefined\\\"==typeof process)throw new Error(\\\"Script must be executed as a worker\\\");try{WorkerThreads=requireFoolWebpack(\\\"worker_threads\\\")}catch(error){if(\\\"object\\\"!==_typeof(error)||null===error||\\\"MODULE_NOT_FOUND\\\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\\\"disconnect\\\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\\\"function\\\"==typeof r.then&&\\\"function\\\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\\\"return (\\\"+r+\\\").apply(null, arguments);\\\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\\\"message\\\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \\\"'+e.method+'\\\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\\\"ready\\\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();\";\n","// source of inspiration: https://github.com/sindresorhus/require-fool-webpack\nvar requireFoolWebpack = eval(\n 'typeof require !== \\'undefined\\' ' +\n '? require ' +\n ': function (module) { throw new Error(\\'Module \" + module + \" not found.\\') }'\n);\n\nmodule.exports = requireFoolWebpack;\n","/**\n * worker must be started as a child process or a web worker.\n * It listens for RPC messages from the parent process.\n */\n\n// source of inspiration: https://github.com/sindresorhus/require-fool-webpack\nvar requireFoolWebpack = eval(\n 'typeof require !== \\'undefined\\'' +\n ' ? require' +\n ' : function (module) { throw new Error(\\'Module \" + module + \" not found.\\') }'\n);\n\n/**\n * Special message sent by parent which causes the worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n// var nodeOSPlatform = require('./environment').nodeOSPlatform;\n\n// create a worker API for sending and receiving messages which works both on\n// node.js and in the browser\nvar worker = {\n exit: function() {}\n};\nif (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') {\n // worker in the browser\n worker.on = function (event, callback) {\n addEventListener(event, function (message) {\n callback(message.data);\n })\n };\n worker.send = function (message) {\n postMessage(message);\n };\n}\nelse if (typeof process !== 'undefined') {\n // node.js\n\n var WorkerThreads;\n try {\n WorkerThreads = requireFoolWebpack('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads, fallback to sub-process based workers\n } else {\n throw error;\n }\n }\n\n if (WorkerThreads &&\n /* if there is a parentPort, we are in a WorkerThread */\n WorkerThreads.parentPort !== null) {\n var parentPort = WorkerThreads.parentPort;\n worker.send = parentPort.postMessage.bind(parentPort);\n worker.on = parentPort.on.bind(parentPort);\n } else {\n worker.on = process.on.bind(process);\n worker.send = process.send.bind(process);\n // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly\n worker.on('disconnect', function () {\n process.exit(1);\n });\n worker.exit = process.exit.bind(process);\n }\n}\nelse {\n throw new Error('Script must be executed as a worker');\n}\n\nfunction convertError(error) {\n return Object.getOwnPropertyNames(error).reduce(function(product, name) {\n return Object.defineProperty(product, name, {\n\tvalue: error[name],\n\tenumerable: true\n });\n }, {});\n}\n\n/**\n * Test whether a value is a Promise via duck typing.\n * @param {*} value\n * @returns {boolean} Returns true when given value is an object\n * having functions `then` and `catch`.\n */\nfunction isPromise(value) {\n return value && (typeof value.then === 'function') && (typeof value.catch === 'function');\n}\n\n// functions available externally\nworker.methods = {};\n\n/**\n * Execute a function with provided arguments\n * @param {String} fn Stringified function\n * @param {Array} [args] Function arguments\n * @returns {*}\n */\nworker.methods.run = function run(fn, args) {\n var f = new Function('return (' + fn + ').apply(null, arguments);');\n return f.apply(f, args);\n};\n\n/**\n * Get a list with methods available on this worker\n * @return {String[]} methods\n */\nworker.methods.methods = function methods() {\n return Object.keys(worker.methods);\n};\n\nvar currentRequestId = null;\n\nworker.on('message', function (request) {\n if (request === TERMINATE_METHOD_ID) {\n return worker.exit(0);\n }\n try {\n var method = worker.methods[request.method];\n\n if (method) {\n currentRequestId = request.id;\n \n // execute the function\n var result = method.apply(method, request.params);\n\n if (isPromise(result)) {\n // promise returned, resolve this and then return\n result\n .then(function (result) {\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n currentRequestId = null;\n })\n .catch(function (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n currentRequestId = null;\n });\n }\n else {\n // immediate result\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n\n currentRequestId = null;\n }\n }\n else {\n throw new Error('Unknown method \"' + request.method + '\"');\n }\n }\n catch (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n }\n});\n\n/**\n * Register methods to the worker\n * @param {Object} methods\n */\nworker.register = function (methods) {\n\n if (methods) {\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n worker.methods[name] = methods[name];\n }\n }\n }\n\n worker.send('ready');\n\n};\n\nworker.emit = function (payload) {\n if (currentRequestId) {\n worker.send({\n id: currentRequestId,\n isEvent: true,\n payload\n });\n }\n};\n\nif (typeof exports !== 'undefined') {\n exports.add = worker.register;\n exports.emit = worker.emit;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var environment = require('./environment');\n\n/**\n * Create a new worker pool\n * @param {string} [script]\n * @param {WorkerPoolOptions} [options]\n * @returns {Pool} pool\n */\nexports.pool = function pool(script, options) {\n var Pool = require('./Pool');\n\n return new Pool(script, options);\n};\n\n/**\n * Create a worker and optionally register a set of methods to the worker.\n * @param {Object} [methods]\n */\nexports.worker = function worker(methods) {\n var worker = require('./worker');\n worker.add(methods);\n};\n\n/**\n * Sends an event to the parent worker pool.\n * @param {any} payload \n */\nexports.workerEmit = function workerEmit(payload) {\n var worker = require('./worker');\n worker.emit(payload);\n};\n\n/**\n * Create a promise.\n * @type {Promise} promise\n */\nexports.Promise = require('./Promise');\n\nexports.platform = environment.platform;\nexports.isMainThread = environment.isMainThread;\nexports.cpus = environment.cpus;"],"names":["Promise","require","WorkerHandler","environment","DebugPortAllocator","DEBUG_PORT_ALLOCATOR","Pool","script","options","workers","tasks","forkArgs","Object","freeze","forkOpts","debugPortStart","nodeWorker","workerType","maxQueueSize","Infinity","onCreateWorker","onTerminateWorker","validateMaxWorkers","maxWorkers","Math","max","cpus","minWorkers","validateMinWorkers","_ensureMinWorkers","_boundNext","_next","bind","ensureWorkerThreads","prototype","exec","method","params","Array","isArray","TypeError","resolver","defer","length","Error","task","timeout","push","originalTimeout","promise","delay","indexOf","call","String","proxy","arguments","pool","then","methods","forEach","slice","worker","_getWorker","me","shift","pending","terminated","_removeWorker","i","busy","_createWorkerHandler","releasePort","debugPort","_removeWorkerFromList","resolve","reject","terminate","err","index","splice","force","f","removeWorker","promises","termPromise","terminateAndNotify","always","all","stats","totalWorkers","busyWorkers","filter","idleWorkers","pendingTasks","activeTasks","overridenParams","nextAvailableStartingAt","isNumber","isInteger","value","round","module","exports","handler","parent","SyntaxError","_onSuccess","_onFail","resolved","rejected","_process","onSuccess","onFail","s","_then","_resolve","result","fn","_reject","error","cancel","CancellationError","timer","setTimeout","TimeoutError","clearTimeout","callback","res","remaining","results","p","message","stack","constructor","name","requireFoolWebpack","TERMINATE_METHOD_ID","CHILD_PROCESS_EXIT_TIMEOUT","WorkerThreads","tryRequireWorkerThreads","ensureWebWorker","Worker","code","getDefaultWorker","platform","Blob","window","URL","createObjectURL","blob","type","__dirname","setupWorker","setupBrowserWorker","setupWorkerThreadWorker","setupProcessWorker","resolveForkOptions","isBrowserWorker","on","event","addEventListener","data","send","postMessage","stdout","stderr","isWorkerThread","kill","disconnect","child_process","fork","isChildProcess","opts","processExecArgv","process","execArgv","join","inspectorActive","debugBrk","arg","assign","concat","objectToError","obj","temp","props","keys","_options","ready","requestQueue","response","dispatchQueuedRequests","id","processing","undefined","isEvent","payload","terminating","onError","create","request","exitCode","signalCode","spawnargs","spawnfile","terminationHandler","lastId","cleanup","removeAllListeners","killed","cleanExitTimeout","once","_tryRequireWorkerThreads","_setupProcessWorker","_setupBrowserWorker","_setupWorkerThreadWorker","MAX_PORTS","ports","starting","port","isNode","nodeProcess","versions","node","worker_threads","tryRequireFoolWebpack","isMainThread","connected","Window","self","navigator","hardwareConcurrency","eval","exit","parentPort","convertError","getOwnPropertyNames","reduce","product","defineProperty","enumerable","isPromise","run","args","Function","apply","currentRequestId","register","hasOwnProperty","emit","add","workerEmit"],"sourceRoot":""} \ No newline at end of file diff --git a/build/node_modules/workerpool/dist/workerpool.min.js b/build/node_modules/workerpool/dist/workerpool.min.js new file mode 100644 index 00000000..00376c53 --- /dev/null +++ b/build/node_modules/workerpool/dist/workerpool.min.js @@ -0,0 +1,3 @@ +/*! For license information please see workerpool.min.js.LICENSE.txt */ +!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("workerpool",[],e):"object"==typeof exports?exports.workerpool=e():r.workerpool=e()}("undefined"!=typeof self?self:this,(function(){return function(){var __webpack_modules__={345:function(r,e,t){var o=t(219),n=t(751),i=t(828),s=new(t(833));function u(r,e){"string"==typeof r?this.script=r||null:(this.script=null,e=r),this.workers=[],this.tasks=[],e=e||{},this.forkArgs=Object.freeze(e.forkArgs||[]),this.forkOpts=Object.freeze(e.forkOpts||{}),this.debugPortStart=e.debugPortStart||43210,this.nodeWorker=e.nodeWorker,this.workerType=e.workerType||e.nodeWorker||"auto",this.maxQueueSize=e.maxQueueSize||1/0,this.onCreateWorker=e.onCreateWorker||function(){return null},this.onTerminateWorker=e.onTerminateWorker||function(){return null},e&&"maxWorkers"in e?(function(r){if(!c(r)||!a(r)||r<1)throw new TypeError("Option maxWorkers must be an integer number >= 1")}(e.maxWorkers),this.maxWorkers=e.maxWorkers):this.maxWorkers=Math.max((i.cpus||4)-1,1),e&&"minWorkers"in e&&("max"===e.minWorkers?this.minWorkers=this.maxWorkers:(function(r){if(!c(r)||!a(r)||r<0)throw new TypeError("Option minWorkers must be an integer number >= 0")}(e.minWorkers),this.minWorkers=e.minWorkers,this.maxWorkers=Math.max(this.minWorkers,this.maxWorkers)),this._ensureMinWorkers()),this._boundNext=this._next.bind(this),"thread"===this.workerType&&n.ensureWorkerThreads()}function c(r){return"number"==typeof r}function a(r){return Math.round(r)==r}u.prototype.exec=function(r,e,t){if(e&&!Array.isArray(e))throw new TypeError('Array expected as argument "params"');if("string"==typeof r){var n=o.defer();if(this.tasks.length>=this.maxQueueSize)throw new Error("Max queue size of "+this.maxQueueSize+" reached");var i=this.tasks,s={method:r,params:e,resolver:n,timeout:null,options:t};i.push(s);var u=n.promise.timeout;return n.promise.timeout=function(r){return-1!==i.indexOf(s)?(s.timeout=r,n.promise):u.call(n.promise,r)},this._next(),n.promise}if("function"==typeof r)return this.exec("run",[String(r),e]);throw new TypeError('Function or string expected as argument "method"')},u.prototype.proxy=function(){if(arguments.length>0)throw new Error("No arguments expected");var r=this;return this.exec("methods").then((function(e){var t={};return e.forEach((function(e){t[e]=function(){return r.exec(e,Array.prototype.slice.call(arguments))}})),t}))},u.prototype._next=function(){if(this.tasks.length>0){var r=this._getWorker();if(r){var e=this,t=this.tasks.shift();if(t.resolver.promise.pending){var o=r.exec(t.method,t.params,t.resolver,t.options).then(e._boundNext).catch((function(){if(r.terminated)return e._removeWorker(r)})).then((function(){e._next()}));"number"==typeof t.timeout&&o.timeout(t.timeout)}else e._next()}}},u.prototype._getWorker=function(){for(var r=this.workers,e=0;er.length)&&(e=r.length);for(var t=0,o=new Array(e);t= 11.7.0 required");return r}function f(){if("function"!=typeof Worker&&("object"!==("undefined"==typeof Worker?"undefined":n(Worker))||"function"!=typeof Worker.prototype.constructor))throw new Error("WorkerPool: Web Workers not supported")}function p(){try{return u("worker_threads")}catch(r){if("object"===n(r)&&null!==r&&"MODULE_NOT_FOUND"===r.code)return null;throw r}}function d(r,e){var t=new e(r);return t.isBrowserWorker=!0,t.on=function(r,e){this.addEventListener(r,(function(r){e(r.data)}))},t.send=function(r){this.postMessage(r)},t}function l(r,e){var t=new e.Worker(r,{stdout:!1,stderr:!1});return t.isWorkerThread=!0,t.send=function(r){this.postMessage(r)},t.kill=function(){return this.terminate(),!0},t.disconnect=function(){this.terminate()},t}function h(r,e,t){var o=t.fork(r,e.forkArgs,e.forkOpts);return o.isChildProcess=!0,o}function k(r){r=r||{};var e=process.execArgv.join(" "),t=-1!==e.indexOf("--inspect"),o=-1!==e.indexOf("--debug-brk"),n=[];return t&&(n.push("--inspect="+r.debugPort),o&&n.push("--debug-brk")),process.execArgv.forEach((function(r){r.indexOf("--max-old-space-size")>-1&&n.push(r)})),Object.assign({},r,{forkArgs:r.forkArgs,forkOpts:Object.assign({},r.forkOpts,{execArgv:(r.forkOpts&&r.forkOpts.execArgv||[]).concat(n)})})}function w(r,e){var n=this,i=e||{};function c(r){for(var e in n.terminated=!0,n.processing)void 0!==n.processing[e]&&n.processing[e].resolver.reject(r);n.processing=Object.create(null)}this.script=r||function(){if("browser"===s.platform){if("undefined"==typeof Blob)throw new Error("Blob not supported by the browser");if(!window.URL||"function"!=typeof window.URL.createObjectURL)throw new Error("URL.createObjectURL not supported by the browser");var r=new Blob([t(670)],{type:"text/javascript"});return window.URL.createObjectURL(r)}return __dirname+"/worker.js"}(),this.worker=function(r,e){if("web"===e.workerType)return f(),d(r,Worker);if("thread"===e.workerType)return l(r,t=a());if("process"!==e.workerType&&e.workerType){if("browser"===s.platform)return f(),d(r,Worker);var t=p();return t?l(r,t):h(r,k(e),u("child_process"))}return h(r,k(e),u("child_process"))}(this.script,i),this.debugPort=i.debugPort,this.forkOpts=i.forkOpts,this.forkArgs=i.forkArgs,r||(this.worker.ready=!0),this.requestQueue=[],this.worker.on("message",(function(r){if(!n.terminated)if("string"==typeof r&&"ready"===r)n.worker.ready=!0,function(){var r,e=function(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=function(r,e){if(r){if("string"==typeof r)return o(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(r,e):void 0}}(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var n=0,i=function(){};return{s:i,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,u=!0,c=!1;return{s:function(){t=t.call(r)},n:function(){var r=t.next();return u=r.done,r},e:function(r){c=!0,s=r},f:function(){try{u||null==t.return||t.return()}finally{if(c)throw s}}}}(n.requestQueue.splice(0));try{for(e.s();!(r=e.n()).done;){var t=r.value;n.worker.send(t)}}catch(r){e.e(r)}finally{e.f()}}();else{var e=r.id,t=n.processing[e];void 0!==t&&(r.isEvent?t.options&&"function"==typeof t.options.on&&t.options.on(r.payload):(delete n.processing[e],!0===n.terminating&&n.terminate(),r.error?t.resolver.reject(function(r){for(var e=new Error(""),t=Object.keys(r),o=0;o0},w.prototype.terminate=function(r,e){var t=this;if(r){for(var o in this.processing)void 0!==this.processing[o]&&this.processing[o].resolver.reject(new Error("Worker terminated"));this.processing=Object.create(null)}if("function"==typeof e&&(this.terminationHandler=e),this.busy())this.terminating=!0;else{var n=function(r){if(t.terminated=!0,null!=t.worker&&t.worker.removeAllListeners&&t.worker.removeAllListeners("message"),t.worker=null,t.terminating=!1,t.terminationHandler)t.terminationHandler(r,t);else if(r)throw r};if(this.worker){if("function"==typeof this.worker.kill){if(this.worker.killed)return void n(new Error("worker already killed!"));if(this.worker.isChildProcess){var i=setTimeout((function(){t.worker&&t.worker.kill()}),1e3);this.worker.once("exit",(function(){clearTimeout(i),t.worker&&(t.worker.killed=!0),n()})),this.worker.ready?this.worker.send(c):this.worker.requestQueue.push(c)}else this.worker.kill(),this.worker.killed=!0,n();return}if("function"!=typeof this.worker.terminate)throw new Error("Failed to terminate worker");this.worker.terminate(),this.worker.killed=!0}n()}},w.prototype.terminateAndNotify=function(r,e){var t=i.defer();return e&&(t.promise.timeout=e),this.terminate(r,(function(r,e){r?t.reject(r):t.resolve(e)})),t.promise},r.exports=w,r.exports._tryRequireWorkerThreads=p,r.exports._setupProcessWorker=h,r.exports._setupBrowserWorker=d,r.exports._setupWorkerThreadWorker=l,r.exports.ensureWorkerThreads=a},833:function(r){"use strict";function e(){this.ports=Object.create(null),this.length=0}r.exports=e,e.prototype.nextAvailableStartingAt=function(r){for(;!0===this.ports[r];)r++;if(r>=65535)throw new Error("WorkerPool debug port limit reached: "+r+">= 65535");return this.ports[r]=!0,this.length++,r},e.prototype.releasePort=function(r){delete this.ports[r],this.length--}},828:function(r,e,t){var o=t(397),n=function(r){return void 0!==r&&null!=r.versions&&null!=r.versions.node};r.exports.isNode=n,r.exports.platform="undefined"!=typeof process&&n(process)?"node":"browser";var i=function(r){try{return o("worker_threads")}catch(r){return null}}();r.exports.isMainThread="node"===r.exports.platform?(!i||i.isMainThread)&&!process.connected:"undefined"!=typeof Window,r.exports.cpus="browser"===r.exports.platform?self.navigator.hardwareConcurrency:o("os").cpus().length},670:function(r){r.exports='!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r})(r)}var requireFoolWebpack=eval("typeof require !== \'undefined\' ? require : function (module) { throw new Error(\'Module \\" + module + \\" not found.\') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}},WorkerThreads,parentPort;if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(error){if("object"!==_typeof(error)||null===error||"MODULE_NOT_FOUND"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on("disconnect",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&"function"==typeof r.then&&"function"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function("return ("+r+").apply(null, arguments);");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on("message",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error(\'Unknown method "\'+e.method+\'"\');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send("ready")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();'},397:function(module){var requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }");module.exports=requireFoolWebpack},744:function(__unused_webpack_module,exports){function _typeof(r){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},_typeof(r)}var requireFoolWebpack=eval("typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \" + module + \" not found.') }"),TERMINATE_METHOD_ID="__workerpool-terminate__",worker={exit:function(){}};if("undefined"!=typeof self&&"function"==typeof postMessage&&"function"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,(function(r){e(r.data)}))},worker.send=function(r){postMessage(r)};else{if("undefined"==typeof process)throw new Error("Script must be executed as a worker");var WorkerThreads;try{WorkerThreads=requireFoolWebpack("worker_threads")}catch(r){if("object"!==_typeof(r)||null===r||"MODULE_NOT_FOUND"!==r.code)throw r}if(WorkerThreads&&null!==WorkerThreads.parentPort){var parentPort=WorkerThreads.parentPort;worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)}else worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on("disconnect",(function(){process.exit(1)})),worker.exit=process.exit.bind(process)}function convertError(r){return Object.getOwnPropertyNames(r).reduce((function(e,t){return Object.defineProperty(e,t,{value:r[t],enumerable:!0})}),{})}function isPromise(r){return r&&"function"==typeof r.then&&"function"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){var t=new Function("return ("+r+").apply(null, arguments);");return t.apply(t,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on("message",(function(r){if(r===TERMINATE_METHOD_ID)return worker.exit(0);try{var e=worker.methods[r.method];if(!e)throw new Error('Unknown method "'+r.method+'"');currentRequestId=r.id;var t=e.apply(e,r.params);isPromise(t)?t.then((function(e){worker.send({id:r.id,result:e,error:null}),currentRequestId=null})).catch((function(e){worker.send({id:r.id,result:null,error:convertError(e)}),currentRequestId=null})):(worker.send({id:r.id,result:t,error:null}),currentRequestId=null)}catch(e){worker.send({id:r.id,result:null,error:convertError(e)})}})),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send("ready")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},exports.add=worker.register,exports.emit=worker.emit}},__webpack_module_cache__={};function __webpack_require__(r){var e=__webpack_module_cache__[r];if(void 0!==e)return e.exports;var t=__webpack_module_cache__[r]={exports:{}};return __webpack_modules__[r](t,t.exports,__webpack_require__),t.exports}var __webpack_exports__={};return function(){var r=__webpack_exports__,e=__webpack_require__(828);r.pool=function(r,e){return new(__webpack_require__(345))(r,e)},r.worker=function(r){__webpack_require__(744).add(r)},r.workerEmit=function(r){__webpack_require__(744).emit(r)},r.Promise=__webpack_require__(219),r.platform=e.platform,r.isMainThread=e.isMainThread,r.cpus=e.cpus}(),__webpack_exports__}()})); +//# sourceMappingURL=workerpool.min.js.map \ No newline at end of file diff --git a/build/node_modules/workerpool/dist/workerpool.min.js.LICENSE.txt b/build/node_modules/workerpool/dist/workerpool.min.js.LICENSE.txt new file mode 100644 index 00000000..d5f1e119 --- /dev/null +++ b/build/node_modules/workerpool/dist/workerpool.min.js.LICENSE.txt @@ -0,0 +1,24 @@ +/** + * workerpool.js + * https://github.com/josdejong/workerpool + * + * Offload tasks to a pool of workers on node.js and in the browser. + * + * @version 6.2.0 + * @date 2022-01-15 + * + * @license + * Copyright (C) 2014-2022 Jos de Jong + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ diff --git a/build/node_modules/workerpool/dist/workerpool.min.js.map b/build/node_modules/workerpool/dist/workerpool.min.js.map new file mode 100644 index 00000000..629aadf8 --- /dev/null +++ b/build/node_modules/workerpool/dist/workerpool.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workerpool.min.js","mappings":";CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,aAAc,GAAIH,GACC,iBAAZC,QACdA,QAAoB,WAAID,IAExBD,EAAiB,WAAIC,IARvB,CASoB,oBAATK,KAAuBA,KAAOC,MAAO,WAChD,+DCVA,IAAIC,EAAUC,EAAQ,KAClBC,EAAgBD,EAAQ,KACxBE,EAAcF,EAAQ,KAEtBG,EAAuB,IADFH,EAAQ,MAQjC,SAASI,EAAKC,EAAQC,GACE,iBAAXD,EACTP,KAAKO,OAASA,GAAU,MAGxBP,KAAKO,OAAS,KACdC,EAAUD,GAGZP,KAAKS,QAAU,GACfT,KAAKU,MAAQ,GAEbF,EAAUA,GAAW,GAErBR,KAAKW,SAAWC,OAAOC,OAAOL,EAAQG,UAAY,IAClDX,KAAKc,SAAWF,OAAOC,OAAOL,EAAQM,UAAY,IAClDd,KAAKe,eAAkBP,EAAQO,gBAAkB,MACjDf,KAAKgB,WAAaR,EAAQQ,WAC1BhB,KAAKiB,WAAaT,EAAQS,YAAcT,EAAQQ,YAAc,OAC9DhB,KAAKkB,aAAeV,EAAQU,cAAgBC,EAAAA,EAE5CnB,KAAKoB,eAAiBZ,EAAQY,gBAAmB,kBAAM,MACvDpB,KAAKqB,kBAAoBb,EAAQa,mBAAsB,kBAAM,MAGzDb,GAAW,eAAgBA,GAiXjC,SAA4Bc,GAC1B,IAAKC,EAASD,KAAgBE,EAAUF,IAAeA,EAAa,EAClE,MAAM,IAAIG,UAAU,oDAlXpBC,CAAmBlB,EAAQc,YAC3BtB,KAAKsB,WAAad,EAAQc,YAG1BtB,KAAKsB,WAAaK,KAAKC,KAAKxB,EAAYyB,MAAQ,GAAK,EAAG,GAGtDrB,GAAW,eAAgBA,IACH,QAAvBA,EAAQsB,WACT9B,KAAK8B,WAAa9B,KAAKsB,YAkX7B,SAA4BQ,GAC1B,IAAKP,EAASO,KAAgBN,EAAUM,IAAeA,EAAa,EAClE,MAAM,IAAIL,UAAU,oDAlXlBM,CAAmBvB,EAAQsB,YAC3B9B,KAAK8B,WAAatB,EAAQsB,WAC1B9B,KAAKsB,WAAaK,KAAKC,IAAI5B,KAAK8B,WAAY9B,KAAKsB,aAEnDtB,KAAKgC,qBAGPhC,KAAKiC,WAAajC,KAAKkC,MAAMC,KAAKnC,MAGV,WAApBA,KAAKiB,YACPd,EAAciC,sBAgXlB,SAASb,EAASc,GAChB,MAAwB,iBAAVA,EAQhB,SAASb,EAAUa,GACjB,OAAOV,KAAKW,MAAMD,IAAUA,EArV9B/B,EAAKiC,UAAUC,KAAO,SAAUC,EAAQC,EAAQlC,GAE9C,GAAIkC,IAAWC,MAAMC,QAAQF,GAC3B,MAAM,IAAIjB,UAAU,uCAGtB,GAAsB,iBAAXgB,EAAqB,CAC9B,IAAII,EAAW5C,EAAQ6C,QAEvB,GAAI9C,KAAKU,MAAMqC,QAAU/C,KAAKkB,aAC5B,MAAM,IAAI8B,MAAM,qBAAuBhD,KAAKkB,aAAe,YAI7D,IAAIR,EAAQV,KAAKU,MACbuC,EAAO,CACTR,OAASA,EACTC,OAASA,EACTG,SAAUA,EACVK,QAAS,KACT1C,QAASA,GAEXE,EAAMyC,KAAKF,GAIX,IAAIG,EAAkBP,EAASQ,QAAQH,QAgBvC,OAfAL,EAASQ,QAAQH,QAAU,SAAkBI,GAC3C,OAA6B,IAAzB5C,EAAM6C,QAAQN,IAEhBA,EAAKC,QAAUI,EACRT,EAASQ,SAITD,EAAgBI,KAAKX,EAASQ,QAASC,IAKlDtD,KAAKkC,QAEEW,EAASQ,QAEb,GAAsB,mBAAXZ,EAEd,OAAOzC,KAAKwC,KAAK,MAAO,CAACiB,OAAOhB,GAASC,IAGzC,MAAM,IAAIjB,UAAU,qDAUxBnB,EAAKiC,UAAUmB,MAAQ,WACrB,GAAIC,UAAUZ,OAAS,EACrB,MAAM,IAAIC,MAAM,yBAGlB,IAAIY,EAAO5D,KACX,OAAOA,KAAKwC,KAAK,WACZqB,MAAK,SAAUC,GACd,IAAIJ,EAAQ,GAQZ,OANAI,EAAQC,SAAQ,SAAUtB,GACxBiB,EAAMjB,GAAU,WACd,OAAOmB,EAAKpB,KAAKC,EAAQE,MAAMJ,UAAUyB,MAAMR,KAAKG,gBAIjDD,MAwBfpD,EAAKiC,UAAUL,MAAQ,WACrB,GAAIlC,KAAKU,MAAMqC,OAAS,EAAG,CAIzB,IAAIkB,EAASjE,KAAKkE,aAClB,GAAID,EAAQ,CAEV,IAAIE,EAAKnE,KACLiD,EAAOjD,KAAKU,MAAM0D,QAGtB,GAAInB,EAAKJ,SAASQ,QAAQgB,QAAS,CAEjC,IAAIhB,EAAUY,EAAOzB,KAAKS,EAAKR,OAAQQ,EAAKP,OAAQO,EAAKJ,SAAUI,EAAKzC,SACrEqD,KAAKM,EAAGlC,YADG,OAEL,WAEL,GAAIgC,EAAOK,WACT,OAAOH,EAAGI,cAAcN,MAEzBJ,MAAK,WACNM,EAAGjC,WAIqB,iBAAjBe,EAAKC,SACdG,EAAQH,QAAQD,EAAKC,cAIvBiB,EAAGjC,WAeX5B,EAAKiC,UAAU2B,WAAa,WAG1B,IADA,IAAIzD,EAAUT,KAAKS,QACV+D,EAAI,EAAGA,EAAI/D,EAAQsC,OAAQyB,IAAK,CACvC,IAAIP,EAASxD,EAAQ+D,GACrB,IAAsB,IAAlBP,EAAOQ,OACT,OAAOR,EAIX,OAAIxD,EAAQsC,OAAS/C,KAAKsB,YAExB2C,EAASjE,KAAK0E,uBACdjE,EAAQ0C,KAAKc,GACNA,GAGF,MAWT3D,EAAKiC,UAAUgC,cAAgB,SAASN,GACtC,IAAIE,EAAKnE,KAQT,OANAK,EAAqBsE,YAAYV,EAAOW,WAExC5E,KAAK6E,sBAAsBZ,GAE3BjE,KAAKgC,oBAEE,IAAI/B,GAAQ,SAAS6E,EAASC,GACnCd,EAAOe,WAAU,GAAO,SAASC,GAC/Bd,EAAG9C,kBAAkB,CACnBV,SAAUsD,EAAOtD,SACjBG,SAAUmD,EAAOnD,SACjBP,OAAQ0D,EAAO1D,SAEb0E,EACFF,EAAOE,GAEPH,EAAQb,UAWhB3D,EAAKiC,UAAUsC,sBAAwB,SAASZ,GAE9C,IAAIiB,EAAQlF,KAAKS,QAAQ8C,QAAQU,IAClB,IAAXiB,GACFlF,KAAKS,QAAQ0E,OAAOD,EAAO,IAc/B5E,EAAKiC,UAAUyC,UAAY,SAAUI,EAAOlC,GAC1C,IAAIiB,EAAKnE,KAGTA,KAAKU,MAAMqD,SAAQ,SAAUd,GAC3BA,EAAKJ,SAASkC,OAAO,IAAI/B,MAAM,uBAEjChD,KAAKU,MAAMqC,OAAS,EAEpB,IAGIsC,EAHI,SAAUpB,GAChBjE,KAAK6E,sBAAsBZ,IAER9B,KAAKnC,MAEtBsF,EAAW,GAcf,OAbctF,KAAKS,QAAQuD,QACnBD,SAAQ,SAAUE,GACxB,IAAIsB,EAActB,EAAOuB,mBAAmBJ,EAAOlC,GAChDW,KAAKwB,GACLI,QAAO,WACNtB,EAAG9C,kBAAkB,CACnBV,SAAUsD,EAAOtD,SACjBG,SAAUmD,EAAOnD,SACjBP,OAAQ0D,EAAO1D,YAGrB+E,EAASnC,KAAKoC,MAETtF,EAAQyF,IAAIJ,IAOrBhF,EAAKiC,UAAUoD,MAAQ,WACrB,IAAIC,EAAe5F,KAAKS,QAAQsC,OAC5B8C,EAAc7F,KAAKS,QAAQqF,QAAO,SAAU7B,GAC9C,OAAOA,EAAOQ,UACb1B,OAEH,MAAO,CACL6C,aAAeA,EACfC,YAAeA,EACfE,YAAeH,EAAeC,EAE9BG,aAAehG,KAAKU,MAAMqC,OAC1BkD,YAAeJ,IAQnBvF,EAAKiC,UAAUP,kBAAoB,WACjC,GAAIhC,KAAK8B,WACP,IAAI,IAAI0C,EAAIxE,KAAKS,QAAQsC,OAAQyB,EAAIxE,KAAK8B,WAAY0C,IACpDxE,KAAKS,QAAQ0C,KAAKnD,KAAK0E,yBAU7BpE,EAAKiC,UAAUmC,qBAAuB,WACpC,IAAMwB,EAAkBlG,KAAKoB,eAAe,CAC1CT,SAAUX,KAAKW,SACfG,SAAUd,KAAKc,SACfP,OAAQP,KAAKO,UACT,GAEN,OAAO,IAAIJ,EAAc+F,EAAgB3F,QAAUP,KAAKO,OAAQ,CAC9DI,SAAUuF,EAAgBvF,UAAYX,KAAKW,SAC3CG,SAAUoF,EAAgBpF,UAAYd,KAAKc,SAC3C8D,UAAWvE,EAAqB8F,wBAAwBnG,KAAKe,gBAC7DE,WAAYjB,KAAKiB,cA4CrBrB,EAAOD,QAAUW,gCC9ajB,SAASL,EAAQmG,EAASC,GACxB,IAAIlC,EAAKnE,KAET,KAAMA,gBAAgBC,GACpB,MAAM,IAAIqG,YAAY,oDAGxB,GAAuB,mBAAZF,EACT,MAAM,IAAIE,YAAY,uDAGxB,IAAIC,EAAa,GACbC,EAAU,GAGdxG,KAAKyG,UAAW,EAChBzG,KAAK0G,UAAW,EAChB1G,KAAKqE,SAAU,EASf,IAAIsC,EAAW,SAAUC,EAAWC,GAClCN,EAAWpD,KAAKyD,GAChBJ,EAAQrD,KAAK0D,IASf7G,KAAK6D,KAAO,SAAU+C,EAAWC,GAC/B,OAAO,IAAI5G,GAAQ,SAAU6E,EAASC,GACpC,IAAI+B,EAAIF,EAAYG,EAAMH,EAAW9B,EAASC,GAAUD,EACpDkC,EAAIH,EAAYE,EAAMF,EAAW/B,EAASC,GAAUA,EAExD4B,EAASG,EAAGE,KACX7C,IAQL,IAAI8C,EAAW,SAAUC,GAgBvB,OAdA/C,EAAGsC,UAAW,EACdtC,EAAGuC,UAAW,EACdvC,EAAGE,SAAU,EAEbkC,EAAWxC,SAAQ,SAAUoD,GAC3BA,EAAGD,MAGLP,EAAW,SAAUC,EAAWC,GAC9BD,EAAUM,IAGZD,EAAWG,EAAU,aAEdjD,GAQLiD,EAAU,SAAUC,GAgBtB,OAdAlD,EAAGsC,UAAW,EACdtC,EAAGuC,UAAW,EACdvC,EAAGE,SAAU,EAEbmC,EAAQzC,SAAQ,SAAUoD,GACxBA,EAAGE,MAGLV,EAAW,SAAUC,EAAWC,GAC9BA,EAAOQ,IAGTJ,EAAWG,EAAU,aAEdjD,GAOTnE,KAAKsH,OAAS,WAQZ,OAPIjB,EACFA,EAAOiB,SAGPF,EAAQ,IAAIG,GAGPpD,GAUTnE,KAAKkD,QAAU,SAAUI,GACvB,GAAI+C,EACFA,EAAOnD,QAAQI,OAEZ,CACH,IAAIkE,EAAQC,YAAW,WACrBL,EAAQ,IAAIM,EAAa,2BAA6BpE,EAAQ,UAC7DA,GAEHa,EAAGsB,QAAO,WACRkC,aAAaH,MAIjB,OAAOrD,GAITiC,GAAQ,SAAUc,GAChBD,EAASC,MACR,SAAUG,GACXD,EAAQC,MAYZ,SAASN,EAAMa,EAAU9C,EAASC,GAChC,OAAO,SAAUmC,GACf,IACE,IAAIW,EAAMD,EAASV,GACfW,GAA2B,mBAAbA,EAAIhE,MAA+C,mBAAjBgE,EAAG,MAErDA,EAAIhE,KAAKiB,EAASC,GAGlBD,EAAQ+C,GAGZ,MAAOR,GACLtC,EAAOsC,KA6Eb,SAASE,EAAkBO,GACzB9H,KAAK8H,QAAUA,GAAW,oBAC1B9H,KAAK+H,OAAS,IAAI/E,OAAS+E,MAe7B,SAASL,EAAaI,GACpB9H,KAAK8H,QAAUA,GAAW,mBAC1B9H,KAAK+H,OAAS,IAAI/E,OAAS+E,MAtF7B9H,EAAQsC,UAAR,MAA6B,SAAUsE,GACrC,OAAO7G,KAAK6D,KAAK,KAAMgD,IAWzB5G,EAAQsC,UAAUkD,OAAS,SAAU0B,GACnC,OAAOnH,KAAK6D,KAAKsD,EAAIA,IASvBlH,EAAQyF,IAAM,SAAUJ,GACtB,OAAO,IAAIrF,GAAQ,SAAU6E,EAASC,GACpC,IAAIiD,EAAY1C,EAASvC,OACrBkF,EAAU,GAEVD,EACF1C,EAASvB,SAAQ,SAAUmE,EAAG1D,GAC5B0D,EAAErE,MAAK,SAAUqD,GACfe,EAAQzD,GAAK0C,EAEI,KADjBc,GAEElD,EAAQmD,MAET,SAAUZ,GACXW,EAAY,EACZjD,EAAOsC,SAKXvC,EAAQmD,OASdhI,EAAQ6C,MAAQ,WACd,IAAID,EAAW,GAOf,OALAA,EAASQ,QAAU,IAAIpD,GAAQ,SAAU6E,EAASC,GAChDlC,EAASiC,QAAUA,EACnBjC,EAASkC,OAASA,KAGblC,GAaT0E,EAAkBhF,UAAY,IAAIS,MAClCuE,EAAkBhF,UAAU4F,YAAcnF,MAC1CuE,EAAkBhF,UAAU6F,KAAO,oBAEnCnI,EAAQsH,kBAAoBA,EAa5BG,EAAanF,UAAY,IAAIS,MAC7B0E,EAAanF,UAAU4F,YAAcnF,MACrC0E,EAAanF,UAAU6F,KAAO,eAE9BnI,EAAQyH,aAAeA,EAGvB9H,EAAOD,QAAUM,oXCpRjB,IAAIA,EAAUC,EAAQ,KAClBE,EAAcF,EAAQ,KACtBmI,EAAqBnI,EAAQ,KAM7BoI,EAAsB,2BAQ1B,SAASlG,IACP,IAAImG,EAAgBC,IACpB,IAAKD,EACH,MAAM,IAAIvF,MAAM,+EAGlB,OAAOuF,EAIT,SAASE,IAEP,GAAsB,mBAAXC,SAA4C,YAAlB,oBAAOA,OAAP,cAAOA,UAA+D,mBAAjCA,OAAOnG,UAAU4F,aACzF,MAAM,IAAInF,MAAM,yCAIpB,SAASwF,IACP,IACE,OAAOH,EAAmB,kBAC1B,MAAMhB,GACN,GAAqB,WAAjB,EAAOA,IAAgC,OAAVA,GAAiC,qBAAfA,EAAMsB,KAEvD,OAAO,KAEP,MAAMtB,GAmDZ,SAASuB,EAAmBrI,EAAQmI,GAElC,IAAIzE,EAAS,IAAIyE,EAAOnI,GAYxB,OAVA0D,EAAO4E,iBAAkB,EAEzB5E,EAAO6E,GAAK,SAAUC,EAAOnB,GAC3B5H,KAAKgJ,iBAAiBD,GAAO,SAAUjB,GACrCF,EAASE,EAAQmB,UAGrBhF,EAAOiF,KAAO,SAAUpB,GACtB9H,KAAKmJ,YAAYrB,IAEZ7D,EAGT,SAASmF,EAAwB7I,EAAQgI,GACvC,IAAItE,EAAS,IAAIsE,EAAcG,OAAOnI,EAAQ,CAC5C8I,QAAQ,EACRC,QAAQ,IAiBV,OAfArF,EAAOsF,gBAAiB,EAExBtF,EAAOiF,KAAO,SAASpB,GACrB9H,KAAKmJ,YAAYrB,IAGnB7D,EAAOuF,KAAO,WAEZ,OADAxJ,KAAKgF,aACE,GAGTf,EAAOwF,WAAa,WAClBzJ,KAAKgF,aAGAf,EAGT,SAASyF,EAAmBnJ,EAAQC,EAASmJ,GAE3C,IAAI1F,EAAS0F,EAAcC,KACzBrJ,EACAC,EAAQG,SACRH,EAAQM,UAIV,OADAmD,EAAO4F,gBAAiB,EACjB5F,EAIT,SAAS6F,EAAmBC,GAC1BA,EAAOA,GAAQ,GAEf,IAAIC,EAAkBC,QAAQC,SAASC,KAAK,KACxCC,GAA4D,IAA1CJ,EAAgBzG,QAAQ,aAC1C8G,GAAuD,IAA5CL,EAAgBzG,QAAQ,eAEnC2G,EAAW,GAef,OAdIE,IACFF,EAAS/G,KAAK,aAAe4G,EAAKnF,WAE9ByF,GACFH,EAAS/G,KAAK,gBAIlB8G,QAAQC,SAASnG,SAAQ,SAASuG,GAC5BA,EAAI/G,QAAQ,yBAA2B,GACzC2G,EAAS/G,KAAKmH,MAIX1J,OAAO2J,OAAO,GAAIR,EAAM,CAC7BpJ,SAAUoJ,EAAKpJ,SACfG,SAAUF,OAAO2J,OAAO,GAAIR,EAAKjJ,SAAU,CACzCoJ,UAAWH,EAAKjJ,UAAYiJ,EAAKjJ,SAASoJ,UAAY,IACrDM,OAAON,OA6Bd,SAAS/J,EAAcI,EAAQkK,GAC7B,IAAItG,EAAKnE,KACLQ,EAAUiK,GAAY,GAsD1B,SAASC,EAAQrD,GAGf,IAAK,IAAIsD,KAFTxG,EAAGG,YAAa,EAEDH,EAAGyG,gBACUC,IAAtB1G,EAAGyG,WAAWD,IAChBxG,EAAGyG,WAAWD,GAAI9H,SAASkC,OAAOsC,GAGtClD,EAAGyG,WAAahK,OAAOkK,OAAO,MA5DhC9K,KAAKO,OAASA,GA7JhB,WACE,GAA6B,YAAzBH,EAAY2K,SAAwB,CAEtC,GAAoB,oBAATC,KACT,MAAM,IAAIhI,MAAM,qCAElB,IAAKiI,OAAOC,KAA6C,mBAA/BD,OAAOC,IAAIC,gBACnC,MAAM,IAAInI,MAAM,oDAIlB,IAAIoI,EAAO,IAAIJ,KAAK,CAAC9K,EAAQ,MAAgC,CAACmL,KAAM,oBACpE,OAAOJ,OAAOC,IAAIC,gBAAgBC,GAIlC,OAAOE,UAAY,aA6IGC,GACxBvL,KAAKiE,OA1IP,SAAqB1D,EAAQC,GAC3B,GAA2B,QAAvBA,EAAQS,WAEV,OADAwH,IACOG,EAAmBrI,EAAQmI,QAC7B,GAA2B,WAAvBlI,EAAQS,WAEjB,OAAOmI,EAAwB7I,EAD/BgI,EAAgBnG,KAEX,GAA2B,YAAvB5B,EAAQS,YAA6BT,EAAQS,WAEjD,CACL,GAA6B,YAAzBb,EAAY2K,SAEd,OADAtC,IACOG,EAAmBrI,EAAQmI,QAGlC,IAAIH,EAAgBC,IACpB,OAAID,EACKa,EAAwB7I,EAAQgI,GAEhCmB,EAAmBnJ,EAAQuJ,EAAmBtJ,GAAU6H,EAAmB,kBAXtF,OAAOqB,EAAmBnJ,EAAQuJ,EAAmBtJ,GAAU6H,EAAmB,kBAkItEmD,CAAYxL,KAAKO,OAAQC,GACvCR,KAAK4E,UAAYpE,EAAQoE,UACzB5E,KAAKc,SAAWN,EAAQM,SACxBd,KAAKW,SAAWH,EAAQG,SAGnBJ,IACHP,KAAKiE,OAAOwH,OAAQ,GAItBzL,KAAK0L,aAAe,GACpB1L,KAAKiE,OAAO6E,GAAG,WAAW,SAAU6C,GAClC,IAAIxH,EAAGG,WAGP,GAAwB,iBAAbqH,GAAsC,UAAbA,EAClCxH,EAAGF,OAAOwH,OAAQ,EA8CtB,WACA,o6BACuBtH,EAAGuH,aAAavG,OAAO,IAD9C,IACE,2BAAgD,KAAtCyG,EAAsC,QAC9CzH,EAAGF,OAAOiF,KAAK0C,IAFnB,+BA9CIC,OACK,CAEL,IAAIlB,EAAKgB,EAAShB,GACd1H,EAAOkB,EAAGyG,WAAWD,QACZE,IAAT5H,IACE0I,EAASG,QACP7I,EAAKzC,SAAsC,mBAApByC,EAAKzC,QAAQsI,IACtC7F,EAAKzC,QAAQsI,GAAG6C,EAASI,iBAIpB5H,EAAGyG,WAAWD,IAGE,IAAnBxG,EAAG6H,aAEL7H,EAAGa,YAID2G,EAAStE,MACXpE,EAAKJ,SAASkC,OAhE1B,SAAwBkH,GAItB,IAHA,IAAIC,EAAO,IAAIlJ,MAAM,IACjBmJ,EAAQvL,OAAOwL,KAAKH,GAEfzH,EAAI,EAAGA,EAAI2H,EAAMpJ,OAAQyB,IAChC0H,EAAKC,EAAM3H,IAAMyH,EAAIE,EAAM3H,IAG7B,OAAO0H,EAwDwBG,CAAcV,EAAStE,QAG5CpE,EAAKJ,SAASiC,QAAQ6G,EAASzE,cA2BzC,IAAIjD,EAASjE,KAAKiE,OAElBjE,KAAKiE,OAAO6E,GAAG,QAAS4B,GACxB1K,KAAKiE,OAAO6E,GAAG,QAAQ,SAAUwD,EAAUC,GACzC,IAAIzE,EAAU,8CAEdA,GAAW,kBAAoBwE,EAAW,MAC1CxE,GAAW,oBAAsByE,EAAa,MAE9CzE,GAAW,2BAA8B3D,EAAG5D,OAAS,MACrDuH,GAAW,mBAAsB7D,EAAOuI,UAAY,MACpD1E,GAAW,mBAAqB7D,EAAOwI,UAAY,MAEnD3E,GAAW,gBAAkB7D,EAAOoF,OAAS,MAC7CvB,GAAW,gBAAkB7D,EAAOqF,OAAS,MAE7CoB,EAAQ,IAAI1H,MAAM8E,OAGpB9H,KAAK4K,WAAahK,OAAOkK,OAAO,MAEhC9K,KAAKgM,aAAc,EACnBhM,KAAKsE,YAAa,EAClBtE,KAAK0M,mBAAqB,KAC1B1M,KAAK2M,OAAS,EAOhBxM,EAAcoC,UAAUuB,QAAU,WAChC,OAAO9D,KAAKwC,KAAK,YAWnBrC,EAAcoC,UAAUC,KAAO,SAASC,EAAQC,EAAQG,EAAUrC,GAC3DqC,IACHA,EAAW5C,EAAQ6C,SAIrB,IAAI6H,IAAO3K,KAAK2M,OAGhB3M,KAAK4K,WAAWD,GAAM,CACpBA,GAAIA,EACJ9H,SAAUA,EACVrC,QAASA,GAIX,IAAIoL,EAAU,CACZjB,GAAIA,EACJlI,OAAQA,EACRC,OAAQA,GAGN1C,KAAKsE,WACPzB,EAASkC,OAAO,IAAI/B,MAAM,yBACjBhD,KAAKiE,OAAOwH,MAErBzL,KAAKiE,OAAOiF,KAAK0C,GAEjB5L,KAAK0L,aAAavI,KAAKyI,GAIzB,IAAIzH,EAAKnE,KACT,OAAO6C,EAASQ,QAAT,OAAuB,SAAUgE,GACtC,GAAIA,aAAiBpH,EAAQsH,mBAAqBF,aAAiBpH,EAAQyH,aAMzE,cAHOvD,EAAGyG,WAAWD,GAGdxG,EAAGqB,oBAAmB,GAC1B3B,MAAK,WACJ,MAAMwD,KACL,SAASpC,GACV,MAAMA,KAGV,MAAMoC,MASZlH,EAAcoC,UAAUkC,KAAO,WAC7B,OAAO7D,OAAOwL,KAAKpM,KAAK4K,YAAY7H,OAAS,GAW/C5C,EAAcoC,UAAUyC,UAAY,SAAUI,EAAOwC,GACnD,IAAIzD,EAAKnE,KACT,GAAIoF,EAAO,CAET,IAAK,IAAIuF,KAAM3K,KAAK4K,gBACUC,IAAxB7K,KAAK4K,WAAWD,IAClB3K,KAAK4K,WAAWD,GAAI9H,SAASkC,OAAO,IAAI/B,MAAM,sBAGlDhD,KAAK4K,WAAahK,OAAOkK,OAAO,MAMlC,GAHwB,mBAAblD,IACT5H,KAAK0M,mBAAqB9E,GAEvB5H,KAAKyE,OAgERzE,KAAKgM,aAAc,MAhEH,CAEhB,IAAIY,EAAU,SAAS3H,GAQrB,GAPAd,EAAGG,YAAa,EACC,MAAbH,EAAGF,QAAkBE,EAAGF,OAAO4I,oBAEjC1I,EAAGF,OAAO4I,mBAAmB,WAE/B1I,EAAGF,OAAS,KACZE,EAAG6H,aAAc,EACb7H,EAAGuI,mBACLvI,EAAGuI,mBAAmBzH,EAAKd,QACtB,GAAIc,EACT,MAAMA,GAIV,GAAIjF,KAAKiE,OAAQ,CACf,GAAgC,mBAArBjE,KAAKiE,OAAOuF,KAAqB,CAC1C,GAAIxJ,KAAKiE,OAAO6I,OAEd,YADAF,EAAQ,IAAI5J,MAAM,2BAIpB,GAAIhD,KAAKiE,OAAO4F,eAAgB,CAC9B,IAAIkD,EAAmBtF,YAAW,WAC5BtD,EAAGF,QACLE,EAAGF,OAAOuF,SA9ZS,KAkavBxJ,KAAKiE,OAAO+I,KAAK,QAAQ,WACvBrF,aAAaoF,GACT5I,EAAGF,SACLE,EAAGF,OAAO6I,QAAS,GAErBF,OAGE5M,KAAKiE,OAAOwH,MACdzL,KAAKiE,OAAOiF,KAAKZ,GAEjBtI,KAAKiE,OAAOyH,aAAavI,KAAKmF,QAIhCtI,KAAKiE,OAAOuF,OACZxJ,KAAKiE,OAAO6I,QAAS,EACrBF,IAEF,OAEG,GAAqC,mBAA1B5M,KAAKiE,OAAOe,UAK1B,MAAM,IAAIhC,MAAM,8BAJhBhD,KAAKiE,OAAOe,YACZhF,KAAKiE,OAAO6I,QAAS,EAMzBF,MAkBJzM,EAAcoC,UAAUiD,mBAAqB,SAAUJ,EAAOlC,GAC5D,IAAIL,EAAW5C,EAAQ6C,QAWvB,OAVII,IACFL,EAASQ,QAAQH,QAAUA,GAE7BlD,KAAKgF,UAAUI,GAAO,SAASH,EAAKhB,GAC9BgB,EACFpC,EAASkC,OAAOE,GAEhBpC,EAASiC,QAAQb,MAGdpB,EAASQ,SAGlBzD,EAAOD,QAAUQ,EACjBP,EAAOD,QAAQsN,yBAA2BzE,EAC1C5I,EAAOD,QAAQuN,oBAAsBxD,EACrC9J,EAAOD,QAAQwN,oBAAsBvE,EACrChJ,EAAOD,QAAQyN,yBAA2BhE,EAC1CxJ,EAAOD,QAAQyC,oBAAsBA,gCCjfrC,SAASiL,IACPrN,KAAKsN,MAAQ1M,OAAOkK,OAAO,MAC3B9K,KAAK+C,OAAS,EAHhBnD,EAAOD,QAAU0N,EAMjBA,EAAmB9K,UAAU4D,wBAA0B,SAASoH,GAC9D,MAAgC,IAAzBvN,KAAKsN,MAAMC,IAChBA,IAGF,GAAIA,GAZU,MAaZ,MAAM,IAAIvK,MAAM,wCAA0CuK,EAA1C,YAKlB,OAFAvN,KAAKsN,MAAMC,IAAY,EACvBvN,KAAK+C,SACEwK,GAGTF,EAAmB9K,UAAUoC,YAAc,SAAS6I,UAC3CxN,KAAKsN,MAAME,GAClBxN,KAAK+C,+BCzBP,IAAIsF,EAAqBnI,EAAQ,KAG7BuN,EAAS,SAAUC,GACrB,YACyB,IAAhBA,GACiB,MAAxBA,EAAYC,UACiB,MAA7BD,EAAYC,SAASC,MAGzBhO,EAAOD,QAAQ8N,OAASA,EAGxB7N,EAAOD,QAAQoL,SAA8B,oBAAZd,SAA2BwD,EAAOxD,SAC/D,OACA,UAIJ,IAAI4D,EAUJ,SAAgCjO,GAC9B,IACE,OAAOyI,EAZgC,kBAavC,MAAMpD,GACN,OAAO,MAdU6I,GACrBlO,EAAOD,QAAQoO,aAA2C,SAA5BnO,EAAOD,QAAQoL,WACtC8C,GAAkBA,EAAeE,gBAAkB9D,QAAQ+D,UAC5C,oBAAXC,OAGXrO,EAAOD,QAAQkC,KAAmC,YAA5BjC,EAAOD,QAAQoL,SACjChL,KAAKmO,UAAUC,oBACf9F,EAAmB,MAAMxG,OAAOkB,wBCtBpCnD,EAAOD,QAAU,+pFCJjB,IAAI0I,mBAAqB+F,KACrB,0HAKJxO,OAAOD,QAAU0I,0TCDjB,IAAIA,mBAAqB+F,KACrB,0HASA9F,oBAAsB,2BAMtBrE,OAAS,CACXoK,KAAM,cAER,GAAoB,oBAATtO,MAA+C,mBAAhBoJ,aAA0D,mBAArBH,iBAE7E/E,OAAO6E,GAAK,SAAUC,EAAOnB,GAC3BoB,iBAAiBD,GAAO,SAAUjB,GAChCF,EAASE,EAAQmB,UAGrBhF,OAAOiF,KAAO,SAAUpB,GACtBqB,YAAYrB,QAGX,IAAuB,oBAAZmC,QA+Bd,MAAM,IAAIjH,MAAM,uCA5BhB,IAAIuF,cACJ,IACEA,cAAgBF,mBAAmB,kBACnC,MAAMhB,GACN,GAAqB,WAAjB,QAAOA,IAAgC,OAAVA,GAAiC,qBAAfA,EAAMsB,KAGvD,MAAMtB,EAIV,GAAIkB,eAE2B,OAA7BA,cAAc+F,WAAqB,CACnC,IAAIA,WAAc/F,cAAc+F,WAChCrK,OAAOiF,KAAOoF,WAAWnF,YAAYhH,KAAKmM,YAC1CrK,OAAO6E,GAAKwF,WAAWxF,GAAG3G,KAAKmM,iBAE/BrK,OAAO6E,GAAKmB,QAAQnB,GAAG3G,KAAK8H,SAC5BhG,OAAOiF,KAAOe,QAAQf,KAAK/G,KAAK8H,SAEhChG,OAAO6E,GAAG,cAAc,WACtBmB,QAAQoE,KAAK,MAEfpK,OAAOoK,KAAOpE,QAAQoE,KAAKlM,KAAK8H,SAOpC,SAASsE,aAAalH,GACpB,OAAOzG,OAAO4N,oBAAoBnH,GAAOoH,QAAO,SAASC,EAAStG,GAChE,OAAOxH,OAAO+N,eAAeD,EAAStG,EAAM,CAC/C/F,MAAOgF,EAAMe,GACbwG,YAAY,MAER,IASL,SAASC,UAAUxM,GACjB,OAAOA,GAAgC,mBAAfA,EAAMwB,MAAgD,mBAAhBxB,EAAK,MAIrE4B,OAAOH,QAAU,GAQjBG,OAAOH,QAAQgL,IAAM,SAAa3H,EAAI4H,GACpC,IAAI/H,EAAI,IAAIgI,SAAS,WAAa7H,EAAK,6BACvC,OAAOH,EAAEiI,MAAMjI,EAAG+H,IAOpB9K,OAAOH,QAAQA,QAAU,WACvB,OAAOlD,OAAOwL,KAAKnI,OAAOH,UAG5B,IAAIoL,iBAAmB,KAEvBjL,OAAO6E,GAAG,WAAW,SAAU8C,GAC7B,GAAIA,IAAYtD,oBACd,OAAOrE,OAAOoK,KAAK,GAErB,IACE,IAAI5L,EAASwB,OAAOH,QAAQ8H,EAAQnJ,QAEpC,IAAIA,EAsCF,MAAM,IAAIO,MAAM,mBAAqB4I,EAAQnJ,OAAS,KArCtDyM,iBAAmBtD,EAAQjB,GAG3B,IAAIzD,EAASzE,EAAOwM,MAAMxM,EAAQmJ,EAAQlJ,QAEtCmM,UAAU3H,GAEZA,EACKrD,MAAK,SAAUqD,GACdjD,OAAOiF,KAAK,CACVyB,GAAIiB,EAAQjB,GACZzD,OAAQA,EACRG,MAAO,OAET6H,iBAAmB,QAPzB,OASW,SAAUjK,GACfhB,OAAOiF,KAAK,CACVyB,GAAIiB,EAAQjB,GACZzD,OAAQ,KACRG,MAAOkH,aAAatJ,KAEtBiK,iBAAmB,SAKzBjL,OAAOiF,KAAK,CACVyB,GAAIiB,EAAQjB,GACZzD,OAAQA,EACRG,MAAO,OAGT6H,iBAAmB,MAOzB,MAAOjK,GACLhB,OAAOiF,KAAK,CACVyB,GAAIiB,EAAQjB,GACZzD,OAAQ,KACRG,MAAOkH,aAAatJ,SAS1BhB,OAAOkL,SAAW,SAAUrL,GAE1B,GAAIA,EACF,IAAK,IAAIsE,KAAQtE,EACXA,EAAQsL,eAAehH,KACzBnE,OAAOH,QAAQsE,GAAQtE,EAAQsE,IAKrCnE,OAAOiF,KAAK,UAIdjF,OAAOoL,KAAO,SAAUtD,GAClBmD,kBACFjL,OAAOiF,KAAK,CACVyB,GAAIuE,iBACJpD,SAAS,EACTC,QAAAA,KAMJpM,QAAQ2P,IAAMrL,OAAOkL,SACrBxP,QAAQ0P,KAAOpL,OAAOoL,OCvMpBE,yBAA2B,GAG/B,SAASC,oBAAoBC,GAE5B,IAAIC,EAAeH,yBAAyBE,GAC5C,QAAqB5E,IAAjB6E,EACH,OAAOA,EAAa/P,QAGrB,IAAIC,EAAS2P,yBAAyBE,GAAY,CAGjD9P,QAAS,IAOV,OAHAgQ,oBAAoBF,GAAU7P,EAAQA,EAAOD,QAAS6P,qBAG/C5P,EAAOD,+ECrBXS,EAAcF,oBAAQ,KAQ1BP,EAAQiE,KAAO,SAAcrD,EAAQC,GAGnC,OAAO,IAFIN,oBAAQ,KAEZ,CAASK,EAAQC,IAO1Bb,EAAQsE,OAAS,SAAgBH,GAClB5D,oBAAQ,KACdoP,IAAIxL,IAObnE,EAAQiQ,WAAa,SAAoB7D,GAC1B7L,oBAAQ,KACdmP,KAAKtD,IAOdpM,EAAQM,QAAU,oBAAlBN,KAEAA,EAAQoL,SAAW3K,EAAY2K,SAC/BpL,EAAQoO,aAAe3N,EAAY2N,aACnCpO,EAAQkC,KAAOzB,EAAYyB,4BV9B3B","sources":["webpack://workerpool/webpack/universalModuleDefinition","webpack://workerpool/./src/Pool.js","webpack://workerpool/./src/Promise.js","webpack://workerpool/./src/WorkerHandler.js","webpack://workerpool/./src/debug-port-allocator.js","webpack://workerpool/./src/environment.js","webpack://workerpool/./src/generated/embeddedWorker.js","webpack://workerpool/./src/requireFoolWebpack.js","webpack://workerpool/./src/worker.js","webpack://workerpool/webpack/bootstrap","webpack://workerpool/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"workerpool\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"workerpool\"] = factory();\n\telse\n\t\troot[\"workerpool\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn ","var Promise = require('./Promise');\nvar WorkerHandler = require('./WorkerHandler');\nvar environment = require('./environment');\nvar DebugPortAllocator = require('./debug-port-allocator');\nvar DEBUG_PORT_ALLOCATOR = new DebugPortAllocator();\n/**\n * A pool to manage workers\n * @param {String} [script] Optional worker script\n * @param {WorkerPoolOptions} [options] See docs\n * @constructor\n */\nfunction Pool(script, options) {\n if (typeof script === 'string') {\n this.script = script || null;\n }\n else {\n this.script = null;\n options = script;\n }\n\n this.workers = []; // queue with all workers\n this.tasks = []; // queue with tasks awaiting execution\n\n options = options || {};\n\n this.forkArgs = Object.freeze(options.forkArgs || []);\n this.forkOpts = Object.freeze(options.forkOpts || {});\n this.debugPortStart = (options.debugPortStart || 43210);\n this.nodeWorker = options.nodeWorker;\n this.workerType = options.workerType || options.nodeWorker || 'auto'\n this.maxQueueSize = options.maxQueueSize || Infinity;\n\n this.onCreateWorker = options.onCreateWorker || (() => null);\n this.onTerminateWorker = options.onTerminateWorker || (() => null);\n\n // configuration\n if (options && 'maxWorkers' in options) {\n validateMaxWorkers(options.maxWorkers);\n this.maxWorkers = options.maxWorkers;\n }\n else {\n this.maxWorkers = Math.max((environment.cpus || 4) - 1, 1);\n }\n\n if (options && 'minWorkers' in options) {\n if(options.minWorkers === 'max') {\n this.minWorkers = this.maxWorkers;\n } else {\n validateMinWorkers(options.minWorkers);\n this.minWorkers = options.minWorkers;\n this.maxWorkers = Math.max(this.minWorkers, this.maxWorkers); // in case minWorkers is higher than maxWorkers\n }\n this._ensureMinWorkers();\n }\n\n this._boundNext = this._next.bind(this);\n\n\n if (this.workerType === 'thread') {\n WorkerHandler.ensureWorkerThreads();\n }\n}\n\n\n/**\n * Execute a function on a worker.\n *\n * Example usage:\n *\n * var pool = new Pool()\n *\n * // call a function available on the worker\n * pool.exec('fibonacci', [6])\n *\n * // offload a function\n * function add(a, b) {\n * return a + b\n * };\n * pool.exec(add, [2, 4])\n * .then(function (result) {\n * console.log(result); // outputs 6\n * })\n * .catch(function(error) {\n * console.log(error);\n * });\n *\n * @param {String | Function} method Function name or function.\n * If `method` is a string, the corresponding\n * method on the worker will be executed\n * If `method` is a Function, the function\n * will be stringified and executed via the\n * workers built-in function `run(fn, args)`.\n * @param {Array} [params] Function arguments applied when calling the function\n * @param {ExecOptions} [options] Options object\n * @return {Promise.<*, Error>} result\n */\nPool.prototype.exec = function (method, params, options) {\n // validate type of arguments\n if (params && !Array.isArray(params)) {\n throw new TypeError('Array expected as argument \"params\"');\n }\n\n if (typeof method === 'string') {\n var resolver = Promise.defer();\n\n if (this.tasks.length >= this.maxQueueSize) {\n throw new Error('Max queue size of ' + this.maxQueueSize + ' reached');\n }\n\n // add a new task to the queue\n var tasks = this.tasks;\n var task = {\n method: method,\n params: params,\n resolver: resolver,\n timeout: null,\n options: options\n };\n tasks.push(task);\n\n // replace the timeout method of the Promise with our own,\n // which starts the timer as soon as the task is actually started\n var originalTimeout = resolver.promise.timeout;\n resolver.promise.timeout = function timeout (delay) {\n if (tasks.indexOf(task) !== -1) {\n // task is still queued -> start the timer later on\n task.timeout = delay;\n return resolver.promise;\n }\n else {\n // task is already being executed -> start timer immediately\n return originalTimeout.call(resolver.promise, delay);\n }\n };\n\n // trigger task execution\n this._next();\n\n return resolver.promise;\n }\n else if (typeof method === 'function') {\n // send stringified function and function arguments to worker\n return this.exec('run', [String(method), params]);\n }\n else {\n throw new TypeError('Function or string expected as argument \"method\"');\n }\n};\n\n/**\n * Create a proxy for current worker. Returns an object containing all\n * methods available on the worker. The methods always return a promise.\n *\n * @return {Promise.} proxy\n */\nPool.prototype.proxy = function () {\n if (arguments.length > 0) {\n throw new Error('No arguments expected');\n }\n\n var pool = this;\n return this.exec('methods')\n .then(function (methods) {\n var proxy = {};\n\n methods.forEach(function (method) {\n proxy[method] = function () {\n return pool.exec(method, Array.prototype.slice.call(arguments));\n }\n });\n\n return proxy;\n });\n};\n\n/**\n * Creates new array with the results of calling a provided callback function\n * on every element in this array.\n * @param {Array} array\n * @param {function} callback Function taking two arguments:\n * `callback(currentValue, index)`\n * @return {Promise.} Returns a promise which resolves with an Array\n * containing the results of the callback function\n * executed for each of the array elements.\n */\n/* TODO: implement map\nPool.prototype.map = function (array, callback) {\n};\n*/\n\n/**\n * Grab the first task from the queue, find a free worker, and assign the\n * worker to the task.\n * @protected\n */\nPool.prototype._next = function () {\n if (this.tasks.length > 0) {\n // there are tasks in the queue\n\n // find an available worker\n var worker = this._getWorker();\n if (worker) {\n // get the first task from the queue\n var me = this;\n var task = this.tasks.shift();\n\n // check if the task is still pending (and not cancelled -> promise rejected)\n if (task.resolver.promise.pending) {\n // send the request to the worker\n var promise = worker.exec(task.method, task.params, task.resolver, task.options)\n .then(me._boundNext)\n .catch(function () {\n // if the worker crashed and terminated, remove it from the pool\n if (worker.terminated) {\n return me._removeWorker(worker);\n }\n }).then(function() {\n me._next(); // trigger next task in the queue\n });\n\n // start queued timer now\n if (typeof task.timeout === 'number') {\n promise.timeout(task.timeout);\n }\n } else {\n // The task taken was already complete (either rejected or resolved), so just trigger next task in the queue\n me._next();\n }\n }\n }\n};\n\n/**\n * Get an available worker. If no worker is available and the maximum number\n * of workers isn't yet reached, a new worker will be created and returned.\n * If no worker is available and the maximum number of workers is reached,\n * null will be returned.\n *\n * @return {WorkerHandler | null} worker\n * @private\n */\nPool.prototype._getWorker = function() {\n // find a non-busy worker\n var workers = this.workers;\n for (var i = 0; i < workers.length; i++) {\n var worker = workers[i];\n if (worker.busy() === false) {\n return worker;\n }\n }\n\n if (workers.length < this.maxWorkers) {\n // create a new worker\n worker = this._createWorkerHandler();\n workers.push(worker);\n return worker;\n }\n\n return null;\n};\n\n/**\n * Remove a worker from the pool.\n * Attempts to terminate worker if not already terminated, and ensures the minimum\n * pool size is met.\n * @param {WorkerHandler} worker\n * @return {Promise}\n * @protected\n */\nPool.prototype._removeWorker = function(worker) {\n var me = this;\n\n DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort);\n // _removeWorker will call this, but we need it to be removed synchronously\n this._removeWorkerFromList(worker);\n // If minWorkers set, spin up new workers to replace the crashed ones\n this._ensureMinWorkers();\n // terminate the worker (if not already terminated)\n return new Promise(function(resolve, reject) {\n worker.terminate(false, function(err) {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n script: worker.script\n });\n if (err) {\n reject(err);\n } else {\n resolve(worker);\n }\n });\n });\n};\n\n/**\n * Remove a worker from the pool list.\n * @param {WorkerHandler} worker\n * @protected\n */\nPool.prototype._removeWorkerFromList = function(worker) {\n // remove from the list with workers\n var index = this.workers.indexOf(worker);\n if (index !== -1) {\n this.workers.splice(index, 1);\n }\n};\n\n/**\n * Close all active workers. Tasks currently being executed will be finished first.\n * @param {boolean} [force=false] If false (default), the workers are terminated\n * after finishing all tasks currently in\n * progress. If true, the workers will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nPool.prototype.terminate = function (force, timeout) {\n var me = this;\n\n // cancel any pending tasks\n this.tasks.forEach(function (task) {\n task.resolver.reject(new Error('Pool terminated'));\n });\n this.tasks.length = 0;\n\n var f = function (worker) {\n this._removeWorkerFromList(worker);\n };\n var removeWorker = f.bind(this);\n\n var promises = [];\n var workers = this.workers.slice();\n workers.forEach(function (worker) {\n var termPromise = worker.terminateAndNotify(force, timeout)\n .then(removeWorker)\n .always(function() {\n me.onTerminateWorker({\n forkArgs: worker.forkArgs,\n forkOpts: worker.forkOpts,\n script: worker.script\n });\n });\n promises.push(termPromise);\n });\n return Promise.all(promises);\n};\n\n/**\n * Retrieve statistics on tasks and workers.\n * @return {{totalWorkers: number, busyWorkers: number, idleWorkers: number, pendingTasks: number, activeTasks: number}} Returns an object with statistics\n */\nPool.prototype.stats = function () {\n var totalWorkers = this.workers.length;\n var busyWorkers = this.workers.filter(function (worker) {\n return worker.busy();\n }).length;\n\n return {\n totalWorkers: totalWorkers,\n busyWorkers: busyWorkers,\n idleWorkers: totalWorkers - busyWorkers,\n\n pendingTasks: this.tasks.length,\n activeTasks: busyWorkers\n };\n};\n\n/**\n * Ensures that a minimum of minWorkers is up and running\n * @protected\n */\nPool.prototype._ensureMinWorkers = function() {\n if (this.minWorkers) {\n for(var i = this.workers.length; i < this.minWorkers; i++) {\n this.workers.push(this._createWorkerHandler());\n }\n }\n};\n\n/**\n * Helper function to create a new WorkerHandler and pass all options.\n * @return {WorkerHandler}\n * @private\n */\nPool.prototype._createWorkerHandler = function () {\n const overridenParams = this.onCreateWorker({\n forkArgs: this.forkArgs,\n forkOpts: this.forkOpts,\n script: this.script\n }) || {};\n\n return new WorkerHandler(overridenParams.script || this.script, {\n forkArgs: overridenParams.forkArgs || this.forkArgs,\n forkOpts: overridenParams.forkOpts || this.forkOpts,\n debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart),\n workerType: this.workerType\n });\n}\n\n/**\n * Ensure that the maxWorkers option is an integer >= 1\n * @param {*} maxWorkers\n * @returns {boolean} returns true maxWorkers has a valid value\n */\nfunction validateMaxWorkers(maxWorkers) {\n if (!isNumber(maxWorkers) || !isInteger(maxWorkers) || maxWorkers < 1) {\n throw new TypeError('Option maxWorkers must be an integer number >= 1');\n }\n}\n\n/**\n * Ensure that the minWorkers option is an integer >= 0\n * @param {*} minWorkers\n * @returns {boolean} returns true when minWorkers has a valid value\n */\nfunction validateMinWorkers(minWorkers) {\n if (!isNumber(minWorkers) || !isInteger(minWorkers) || minWorkers < 0) {\n throw new TypeError('Option minWorkers must be an integer number >= 0');\n }\n}\n\n/**\n * Test whether a variable is a number\n * @param {*} value\n * @returns {boolean} returns true when value is a number\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Test whether a number is an integer\n * @param {number} value\n * @returns {boolean} Returns true if value is an integer\n */\nfunction isInteger(value) {\n return Math.round(value) == value;\n}\n\nmodule.exports = Pool;\n","'use strict';\n\n/**\n * Promise\n *\n * Inspired by https://gist.github.com/RubaXa/8501359 from RubaXa \n *\n * @param {Function} handler Called as handler(resolve: Function, reject: Function)\n * @param {Promise} [parent] Parent promise for propagation of cancel and timeout\n */\nfunction Promise(handler, parent) {\n var me = this;\n\n if (!(this instanceof Promise)) {\n throw new SyntaxError('Constructor must be called with the new operator');\n }\n\n if (typeof handler !== 'function') {\n throw new SyntaxError('Function parameter handler(resolve, reject) missing');\n }\n\n var _onSuccess = [];\n var _onFail = [];\n\n // status\n this.resolved = false;\n this.rejected = false;\n this.pending = true;\n\n /**\n * Process onSuccess and onFail callbacks: add them to the queue.\n * Once the promise is resolve, the function _promise is replace.\n * @param {Function} onSuccess\n * @param {Function} onFail\n * @private\n */\n var _process = function (onSuccess, onFail) {\n _onSuccess.push(onSuccess);\n _onFail.push(onFail);\n };\n\n /**\n * Add an onSuccess callback and optionally an onFail callback to the Promise\n * @param {Function} onSuccess\n * @param {Function} [onFail]\n * @returns {Promise} promise\n */\n this.then = function (onSuccess, onFail) {\n return new Promise(function (resolve, reject) {\n var s = onSuccess ? _then(onSuccess, resolve, reject) : resolve;\n var f = onFail ? _then(onFail, resolve, reject) : reject;\n\n _process(s, f);\n }, me);\n };\n\n /**\n * Resolve the promise\n * @param {*} result\n * @type {Function}\n */\n var _resolve = function (result) {\n // update status\n me.resolved = true;\n me.rejected = false;\n me.pending = false;\n\n _onSuccess.forEach(function (fn) {\n fn(result);\n });\n\n _process = function (onSuccess, onFail) {\n onSuccess(result);\n };\n\n _resolve = _reject = function () { };\n\n return me;\n };\n\n /**\n * Reject the promise\n * @param {Error} error\n * @type {Function}\n */\n var _reject = function (error) {\n // update status\n me.resolved = false;\n me.rejected = true;\n me.pending = false;\n\n _onFail.forEach(function (fn) {\n fn(error);\n });\n\n _process = function (onSuccess, onFail) {\n onFail(error);\n };\n\n _resolve = _reject = function () { }\n\n return me;\n };\n\n /**\n * Cancel te promise. This will reject the promise with a CancellationError\n * @returns {Promise} self\n */\n this.cancel = function () {\n if (parent) {\n parent.cancel();\n }\n else {\n _reject(new CancellationError());\n }\n\n return me;\n };\n\n /**\n * Set a timeout for the promise. If the promise is not resolved within\n * the time, the promise will be cancelled and a TimeoutError is thrown.\n * If the promise is resolved in time, the timeout is removed.\n * @param {number} delay Delay in milliseconds\n * @returns {Promise} self\n */\n this.timeout = function (delay) {\n if (parent) {\n parent.timeout(delay);\n }\n else {\n var timer = setTimeout(function () {\n _reject(new TimeoutError('Promise timed out after ' + delay + ' ms'));\n }, delay);\n\n me.always(function () {\n clearTimeout(timer);\n });\n }\n\n return me;\n };\n\n // attach handler passing the resolve and reject functions\n handler(function (result) {\n _resolve(result);\n }, function (error) {\n _reject(error);\n });\n}\n\n/**\n * Execute given callback, then call resolve/reject based on the returned result\n * @param {Function} callback\n * @param {Function} resolve\n * @param {Function} reject\n * @returns {Function}\n * @private\n */\nfunction _then(callback, resolve, reject) {\n return function (result) {\n try {\n var res = callback(result);\n if (res && typeof res.then === 'function' && typeof res['catch'] === 'function') {\n // method returned a promise\n res.then(resolve, reject);\n }\n else {\n resolve(res);\n }\n }\n catch (error) {\n reject(error);\n }\n }\n}\n\n/**\n * Add an onFail callback to the Promise\n * @param {Function} onFail\n * @returns {Promise} promise\n */\nPromise.prototype['catch'] = function (onFail) {\n return this.then(null, onFail);\n};\n\n// TODO: add support for Promise.catch(Error, callback)\n// TODO: add support for Promise.catch(Error, Error, callback)\n\n/**\n * Execute given callback when the promise either resolves or rejects.\n * @param {Function} fn\n * @returns {Promise} promise\n */\nPromise.prototype.always = function (fn) {\n return this.then(fn, fn);\n};\n\n/**\n * Create a promise which resolves when all provided promises are resolved,\n * and fails when any of the promises resolves.\n * @param {Promise[]} promises\n * @returns {Promise} promise\n */\nPromise.all = function (promises){\n return new Promise(function (resolve, reject) {\n var remaining = promises.length,\n results = [];\n\n if (remaining) {\n promises.forEach(function (p, i) {\n p.then(function (result) {\n results[i] = result;\n remaining--;\n if (remaining == 0) {\n resolve(results);\n }\n }, function (error) {\n remaining = 0;\n reject(error);\n });\n });\n }\n else {\n resolve(results);\n }\n });\n};\n\n/**\n * Create a promise resolver\n * @returns {{promise: Promise, resolve: Function, reject: Function}} resolver\n */\nPromise.defer = function () {\n var resolver = {};\n\n resolver.promise = new Promise(function (resolve, reject) {\n resolver.resolve = resolve;\n resolver.reject = reject;\n });\n\n return resolver;\n};\n\n/**\n * Create a cancellation error\n * @param {String} [message]\n * @extends Error\n */\nfunction CancellationError(message) {\n this.message = message || 'promise cancelled';\n this.stack = (new Error()).stack;\n}\n\nCancellationError.prototype = new Error();\nCancellationError.prototype.constructor = Error;\nCancellationError.prototype.name = 'CancellationError';\n\nPromise.CancellationError = CancellationError;\n\n\n/**\n * Create a timeout error\n * @param {String} [message]\n * @extends Error\n */\nfunction TimeoutError(message) {\n this.message = message || 'timeout exceeded';\n this.stack = (new Error()).stack;\n}\n\nTimeoutError.prototype = new Error();\nTimeoutError.prototype.constructor = Error;\nTimeoutError.prototype.name = 'TimeoutError';\n\nPromise.TimeoutError = TimeoutError;\n\n\nmodule.exports = Promise;\n","'use strict';\n\nvar Promise = require('./Promise');\nvar environment = require('./environment');\nvar requireFoolWebpack = require('./requireFoolWebpack');\n\n/**\n * Special message sent by parent which causes a child process worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n/**\n * If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds,\n * force-kill the child process.\n */\nvar CHILD_PROCESS_EXIT_TIMEOUT = 1000;\n\nfunction ensureWorkerThreads() {\n var WorkerThreads = tryRequireWorkerThreads()\n if (!WorkerThreads) {\n throw new Error('WorkerPool: workerType = \\'thread\\' is not supported, Node >= 11.7.0 required')\n }\n\n return WorkerThreads;\n}\n\n// check whether Worker is supported by the browser\nfunction ensureWebWorker() {\n // Workaround for a bug in PhantomJS (Or QtWebkit): https://github.com/ariya/phantomjs/issues/14534\n if (typeof Worker !== 'function' && (typeof Worker !== 'object' || typeof Worker.prototype.constructor !== 'function')) {\n throw new Error('WorkerPool: Web Workers not supported');\n }\n}\n\nfunction tryRequireWorkerThreads() {\n try {\n return requireFoolWebpack('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads available (old version of node.js)\n return null;\n } else {\n throw error;\n }\n }\n}\n\n// get the default worker script\nfunction getDefaultWorker() {\n if (environment.platform === 'browser') {\n // test whether the browser supports all features that we need\n if (typeof Blob === 'undefined') {\n throw new Error('Blob not supported by the browser');\n }\n if (!window.URL || typeof window.URL.createObjectURL !== 'function') {\n throw new Error('URL.createObjectURL not supported by the browser');\n }\n\n // use embedded worker.js\n var blob = new Blob([require('./generated/embeddedWorker')], {type: 'text/javascript'});\n return window.URL.createObjectURL(blob);\n }\n else {\n // use external worker.js in current directory\n return __dirname + '/worker.js';\n }\n}\n\nfunction setupWorker(script, options) {\n if (options.workerType === 'web') { // browser only\n ensureWebWorker();\n return setupBrowserWorker(script, Worker);\n } else if (options.workerType === 'thread') { // node.js only\n WorkerThreads = ensureWorkerThreads();\n return setupWorkerThreadWorker(script, WorkerThreads);\n } else if (options.workerType === 'process' || !options.workerType) { // node.js only\n return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process'));\n } else { // options.workerType === 'auto' or undefined\n if (environment.platform === 'browser') {\n ensureWebWorker();\n return setupBrowserWorker(script, Worker);\n }\n else { // environment.platform === 'node'\n var WorkerThreads = tryRequireWorkerThreads();\n if (WorkerThreads) {\n return setupWorkerThreadWorker(script, WorkerThreads);\n } else {\n return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process'));\n }\n }\n }\n}\n\nfunction setupBrowserWorker(script, Worker) {\n // create the web worker\n var worker = new Worker(script);\n\n worker.isBrowserWorker = true;\n // add node.js API to the web worker\n worker.on = function (event, callback) {\n this.addEventListener(event, function (message) {\n callback(message.data);\n });\n };\n worker.send = function (message) {\n this.postMessage(message);\n };\n return worker;\n}\n\nfunction setupWorkerThreadWorker(script, WorkerThreads) {\n var worker = new WorkerThreads.Worker(script, {\n stdout: false, // automatically pipe worker.STDOUT to process.STDOUT\n stderr: false // automatically pipe worker.STDERR to process.STDERR\n });\n worker.isWorkerThread = true;\n // make the worker mimic a child_process\n worker.send = function(message) {\n this.postMessage(message);\n };\n\n worker.kill = function() {\n this.terminate();\n return true;\n };\n\n worker.disconnect = function() {\n this.terminate();\n };\n\n return worker;\n}\n\nfunction setupProcessWorker(script, options, child_process) {\n // no WorkerThreads, fallback to sub-process based workers\n var worker = child_process.fork(\n script,\n options.forkArgs,\n options.forkOpts\n );\n\n worker.isChildProcess = true;\n return worker;\n}\n\n// add debug flags to child processes if the node inspector is active\nfunction resolveForkOptions(opts) {\n opts = opts || {};\n\n var processExecArgv = process.execArgv.join(' ');\n var inspectorActive = processExecArgv.indexOf('--inspect') !== -1;\n var debugBrk = processExecArgv.indexOf('--debug-brk') !== -1;\n\n var execArgv = [];\n if (inspectorActive) {\n execArgv.push('--inspect=' + opts.debugPort);\n\n if (debugBrk) {\n execArgv.push('--debug-brk');\n }\n }\n\n process.execArgv.forEach(function(arg) {\n if (arg.indexOf('--max-old-space-size') > -1) {\n execArgv.push(arg)\n }\n })\n\n return Object.assign({}, opts, {\n forkArgs: opts.forkArgs,\n forkOpts: Object.assign({}, opts.forkOpts, {\n execArgv: (opts.forkOpts && opts.forkOpts.execArgv || [])\n .concat(execArgv)\n })\n });\n}\n\n/**\n * Converts a serialized error to Error\n * @param {Object} obj Error that has been serialized and parsed to object\n * @return {Error} The equivalent Error.\n */\nfunction objectToError (obj) {\n var temp = new Error('')\n var props = Object.keys(obj)\n\n for (var i = 0; i < props.length; i++) {\n temp[props[i]] = obj[props[i]]\n }\n\n return temp\n}\n\n/**\n * A WorkerHandler controls a single worker. This worker can be a child process\n * on node.js or a WebWorker in a browser environment.\n * @param {String} [script] If no script is provided, a default worker with a\n * function run will be created.\n * @param {WorkerPoolOptions} _options See docs\n * @constructor\n */\nfunction WorkerHandler(script, _options) {\n var me = this;\n var options = _options || {};\n\n this.script = script || getDefaultWorker();\n this.worker = setupWorker(this.script, options);\n this.debugPort = options.debugPort;\n this.forkOpts = options.forkOpts;\n this.forkArgs = options.forkArgs;\n\n // The ready message is only sent if the worker.add method is called (And the default script is not used)\n if (!script) {\n this.worker.ready = true;\n }\n\n // queue for requests that are received before the worker is ready\n this.requestQueue = [];\n this.worker.on('message', function (response) {\n if (me.terminated) {\n return;\n }\n if (typeof response === 'string' && response === 'ready') {\n me.worker.ready = true;\n dispatchQueuedRequests();\n } else {\n // find the task from the processing queue, and run the tasks callback\n var id = response.id;\n var task = me.processing[id];\n if (task !== undefined) {\n if (response.isEvent) {\n if (task.options && typeof task.options.on === 'function') {\n task.options.on(response.payload);\n }\n } else {\n // remove the task from the queue\n delete me.processing[id];\n\n // test if we need to terminate\n if (me.terminating === true) {\n // complete worker termination if all tasks are finished\n me.terminate();\n }\n\n // resolve the task's promise\n if (response.error) {\n task.resolver.reject(objectToError(response.error));\n }\n else {\n task.resolver.resolve(response.result);\n }\n }\n }\n }\n });\n\n // reject all running tasks on worker error\n function onError(error) {\n me.terminated = true;\n\n for (var id in me.processing) {\n if (me.processing[id] !== undefined) {\n me.processing[id].resolver.reject(error);\n }\n }\n me.processing = Object.create(null);\n }\n\n // send all queued requests to worker\n function dispatchQueuedRequests()\n {\n for(const request of me.requestQueue.splice(0)) {\n me.worker.send(request);\n }\n }\n\n var worker = this.worker;\n // listen for worker messages error and exit\n this.worker.on('error', onError);\n this.worker.on('exit', function (exitCode, signalCode) {\n var message = 'Workerpool Worker terminated Unexpectedly\\n';\n\n message += ' exitCode: `' + exitCode + '`\\n';\n message += ' signalCode: `' + signalCode + '`\\n';\n\n message += ' workerpool.script: `' + me.script + '`\\n';\n message += ' spawnArgs: `' + worker.spawnargs + '`\\n';\n message += ' spawnfile: `' + worker.spawnfile + '`\\n'\n\n message += ' stdout: `' + worker.stdout + '`\\n'\n message += ' stderr: `' + worker.stderr + '`\\n'\n\n onError(new Error(message));\n });\n\n this.processing = Object.create(null); // queue with tasks currently in progress\n\n this.terminating = false;\n this.terminated = false;\n this.terminationHandler = null;\n this.lastId = 0;\n}\n\n/**\n * Get a list with methods available on the worker.\n * @return {Promise.} methods\n */\nWorkerHandler.prototype.methods = function () {\n return this.exec('methods');\n};\n\n/**\n * Execute a method with given parameters on the worker\n * @param {String} method\n * @param {Array} [params]\n * @param {{resolve: Function, reject: Function}} [resolver]\n * @param {ExecOptions} [options]\n * @return {Promise.<*, Error>} result\n */\nWorkerHandler.prototype.exec = function(method, params, resolver, options) {\n if (!resolver) {\n resolver = Promise.defer();\n }\n\n // generate a unique id for the task\n var id = ++this.lastId;\n\n // register a new task as being in progress\n this.processing[id] = {\n id: id,\n resolver: resolver,\n options: options\n };\n\n // build a JSON-RPC request\n var request = {\n id: id,\n method: method,\n params: params\n };\n\n if (this.terminated) {\n resolver.reject(new Error('Worker is terminated'));\n } else if (this.worker.ready) {\n // send the request to the worker\n this.worker.send(request);\n } else {\n this.requestQueue.push(request);\n }\n\n // on cancellation, force the worker to terminate\n var me = this;\n return resolver.promise.catch(function (error) {\n if (error instanceof Promise.CancellationError || error instanceof Promise.TimeoutError) {\n // remove this task from the queue. It is already rejected (hence this\n // catch event), and else it will be rejected again when terminating\n delete me.processing[id];\n\n // terminate worker\n return me.terminateAndNotify(true)\n .then(function() {\n throw error;\n }, function(err) {\n throw err;\n });\n } else {\n throw error;\n }\n })\n};\n\n/**\n * Test whether the worker is working or not\n * @return {boolean} Returns true if the worker is busy\n */\nWorkerHandler.prototype.busy = function () {\n return Object.keys(this.processing).length > 0;\n};\n\n/**\n * Terminate the worker.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {function} [callback=null] If provided, will be called when process terminates.\n */\nWorkerHandler.prototype.terminate = function (force, callback) {\n var me = this;\n if (force) {\n // cancel all tasks in progress\n for (var id in this.processing) {\n if (this.processing[id] !== undefined) {\n this.processing[id].resolver.reject(new Error('Worker terminated'));\n }\n }\n this.processing = Object.create(null);\n }\n\n if (typeof callback === 'function') {\n this.terminationHandler = callback;\n }\n if (!this.busy()) {\n // all tasks are finished. kill the worker\n var cleanup = function(err) {\n me.terminated = true;\n if (me.worker != null && me.worker.removeAllListeners) {\n // removeAllListeners is only available for child_process\n me.worker.removeAllListeners('message');\n }\n me.worker = null;\n me.terminating = false;\n if (me.terminationHandler) {\n me.terminationHandler(err, me);\n } else if (err) {\n throw err;\n }\n }\n\n if (this.worker) {\n if (typeof this.worker.kill === 'function') {\n if (this.worker.killed) {\n cleanup(new Error('worker already killed!'));\n return;\n }\n\n if (this.worker.isChildProcess) {\n var cleanExitTimeout = setTimeout(function() {\n if (me.worker) {\n me.worker.kill();\n }\n }, CHILD_PROCESS_EXIT_TIMEOUT);\n\n this.worker.once('exit', function() {\n clearTimeout(cleanExitTimeout);\n if (me.worker) {\n me.worker.killed = true;\n }\n cleanup();\n });\n\n if (this.worker.ready) {\n this.worker.send(TERMINATE_METHOD_ID);\n } else {\n this.worker.requestQueue.push(TERMINATE_METHOD_ID)\n }\n } else {\n // worker_thread\n this.worker.kill();\n this.worker.killed = true;\n cleanup();\n }\n return;\n }\n else if (typeof this.worker.terminate === 'function') {\n this.worker.terminate(); // web worker\n this.worker.killed = true;\n }\n else {\n throw new Error('Failed to terminate worker');\n }\n }\n cleanup();\n }\n else {\n // we can't terminate immediately, there are still tasks being executed\n this.terminating = true;\n }\n};\n\n/**\n * Terminate the worker, returning a Promise that resolves when the termination has been done.\n * @param {boolean} [force=false] If false (default), the worker is terminated\n * after finishing all tasks currently in\n * progress. If true, the worker will be\n * terminated immediately.\n * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected\n * after timeout if worker process has not been terminated.\n * @return {Promise.}\n */\nWorkerHandler.prototype.terminateAndNotify = function (force, timeout) {\n var resolver = Promise.defer();\n if (timeout) {\n resolver.promise.timeout = timeout;\n }\n this.terminate(force, function(err, worker) {\n if (err) {\n resolver.reject(err);\n } else {\n resolver.resolve(worker);\n }\n });\n return resolver.promise;\n};\n\nmodule.exports = WorkerHandler;\nmodule.exports._tryRequireWorkerThreads = tryRequireWorkerThreads;\nmodule.exports._setupProcessWorker = setupProcessWorker;\nmodule.exports._setupBrowserWorker = setupBrowserWorker;\nmodule.exports._setupWorkerThreadWorker = setupWorkerThreadWorker;\nmodule.exports.ensureWorkerThreads = ensureWorkerThreads;\n","'use strict';\n\nvar MAX_PORTS = 65535;\nmodule.exports = DebugPortAllocator;\nfunction DebugPortAllocator() {\n this.ports = Object.create(null);\n this.length = 0;\n}\n\nDebugPortAllocator.prototype.nextAvailableStartingAt = function(starting) {\n while (this.ports[starting] === true) {\n starting++;\n }\n\n if (starting >= MAX_PORTS) {\n throw new Error('WorkerPool debug port limit reached: ' + starting + '>= ' + MAX_PORTS );\n }\n\n this.ports[starting] = true;\n this.length++;\n return starting;\n};\n\nDebugPortAllocator.prototype.releasePort = function(port) {\n delete this.ports[port];\n this.length--;\n};\n\n","var requireFoolWebpack = require('./requireFoolWebpack');\n\n// source: https://github.com/flexdinesh/browser-or-node\nvar isNode = function (nodeProcess) {\n return (\n typeof nodeProcess !== 'undefined' &&\n nodeProcess.versions != null &&\n nodeProcess.versions.node != null\n );\n}\nmodule.exports.isNode = isNode\n\n// determines the JavaScript platform: browser or node\nmodule.exports.platform = typeof process !== 'undefined' && isNode(process)\n ? 'node'\n : 'browser';\n\n// determines whether the code is running in main thread or not\n// note that in node.js we have to check both worker_thread and child_process\nvar worker_threads = tryRequireFoolWebpack('worker_threads');\nmodule.exports.isMainThread = module.exports.platform === 'node'\n ? ((!worker_threads || worker_threads.isMainThread) && !process.connected)\n : typeof Window !== 'undefined';\n\n// determines the number of cpus available\nmodule.exports.cpus = module.exports.platform === 'browser'\n ? self.navigator.hardwareConcurrency\n : requireFoolWebpack('os').cpus().length;\n\nfunction tryRequireFoolWebpack (module) {\n try {\n return requireFoolWebpack(module);\n } catch(err) {\n return null\n }\n}\n","/**\n * embeddedWorker.js contains an embedded version of worker.js.\n * This file is automatically generated,\n * changes made in this file will be overwritten.\n */\nmodule.exports = \"!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\\\"function\\\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\\\"symbol\\\":typeof r})(r)}var requireFoolWebpack=eval(\\\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\\\\\" + module + \\\\\\\" not found.') }\\\"),TERMINATE_METHOD_ID=\\\"__workerpool-terminate__\\\",worker={exit:function(){}},WorkerThreads,parentPort;if(\\\"undefined\\\"!=typeof self&&\\\"function\\\"==typeof postMessage&&\\\"function\\\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\\\"undefined\\\"==typeof process)throw new Error(\\\"Script must be executed as a worker\\\");try{WorkerThreads=requireFoolWebpack(\\\"worker_threads\\\")}catch(error){if(\\\"object\\\"!==_typeof(error)||null===error||\\\"MODULE_NOT_FOUND\\\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\\\"disconnect\\\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\\\"function\\\"==typeof r.then&&\\\"function\\\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\\\"return (\\\"+r+\\\").apply(null, arguments);\\\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\\\"message\\\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \\\"'+e.method+'\\\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\\\"ready\\\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();\";\n","// source of inspiration: https://github.com/sindresorhus/require-fool-webpack\nvar requireFoolWebpack = eval(\n 'typeof require !== \\'undefined\\' ' +\n '? require ' +\n ': function (module) { throw new Error(\\'Module \" + module + \" not found.\\') }'\n);\n\nmodule.exports = requireFoolWebpack;\n","/**\n * worker must be started as a child process or a web worker.\n * It listens for RPC messages from the parent process.\n */\n\n// source of inspiration: https://github.com/sindresorhus/require-fool-webpack\nvar requireFoolWebpack = eval(\n 'typeof require !== \\'undefined\\'' +\n ' ? require' +\n ' : function (module) { throw new Error(\\'Module \" + module + \" not found.\\') }'\n);\n\n/**\n * Special message sent by parent which causes the worker to terminate itself.\n * Not a \"message object\"; this string is the entire message.\n */\nvar TERMINATE_METHOD_ID = '__workerpool-terminate__';\n\n// var nodeOSPlatform = require('./environment').nodeOSPlatform;\n\n// create a worker API for sending and receiving messages which works both on\n// node.js and in the browser\nvar worker = {\n exit: function() {}\n};\nif (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') {\n // worker in the browser\n worker.on = function (event, callback) {\n addEventListener(event, function (message) {\n callback(message.data);\n })\n };\n worker.send = function (message) {\n postMessage(message);\n };\n}\nelse if (typeof process !== 'undefined') {\n // node.js\n\n var WorkerThreads;\n try {\n WorkerThreads = requireFoolWebpack('worker_threads');\n } catch(error) {\n if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') {\n // no worker_threads, fallback to sub-process based workers\n } else {\n throw error;\n }\n }\n\n if (WorkerThreads &&\n /* if there is a parentPort, we are in a WorkerThread */\n WorkerThreads.parentPort !== null) {\n var parentPort = WorkerThreads.parentPort;\n worker.send = parentPort.postMessage.bind(parentPort);\n worker.on = parentPort.on.bind(parentPort);\n } else {\n worker.on = process.on.bind(process);\n worker.send = process.send.bind(process);\n // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly\n worker.on('disconnect', function () {\n process.exit(1);\n });\n worker.exit = process.exit.bind(process);\n }\n}\nelse {\n throw new Error('Script must be executed as a worker');\n}\n\nfunction convertError(error) {\n return Object.getOwnPropertyNames(error).reduce(function(product, name) {\n return Object.defineProperty(product, name, {\n\tvalue: error[name],\n\tenumerable: true\n });\n }, {});\n}\n\n/**\n * Test whether a value is a Promise via duck typing.\n * @param {*} value\n * @returns {boolean} Returns true when given value is an object\n * having functions `then` and `catch`.\n */\nfunction isPromise(value) {\n return value && (typeof value.then === 'function') && (typeof value.catch === 'function');\n}\n\n// functions available externally\nworker.methods = {};\n\n/**\n * Execute a function with provided arguments\n * @param {String} fn Stringified function\n * @param {Array} [args] Function arguments\n * @returns {*}\n */\nworker.methods.run = function run(fn, args) {\n var f = new Function('return (' + fn + ').apply(null, arguments);');\n return f.apply(f, args);\n};\n\n/**\n * Get a list with methods available on this worker\n * @return {String[]} methods\n */\nworker.methods.methods = function methods() {\n return Object.keys(worker.methods);\n};\n\nvar currentRequestId = null;\n\nworker.on('message', function (request) {\n if (request === TERMINATE_METHOD_ID) {\n return worker.exit(0);\n }\n try {\n var method = worker.methods[request.method];\n\n if (method) {\n currentRequestId = request.id;\n \n // execute the function\n var result = method.apply(method, request.params);\n\n if (isPromise(result)) {\n // promise returned, resolve this and then return\n result\n .then(function (result) {\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n currentRequestId = null;\n })\n .catch(function (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n currentRequestId = null;\n });\n }\n else {\n // immediate result\n worker.send({\n id: request.id,\n result: result,\n error: null\n });\n\n currentRequestId = null;\n }\n }\n else {\n throw new Error('Unknown method \"' + request.method + '\"');\n }\n }\n catch (err) {\n worker.send({\n id: request.id,\n result: null,\n error: convertError(err)\n });\n }\n});\n\n/**\n * Register methods to the worker\n * @param {Object} methods\n */\nworker.register = function (methods) {\n\n if (methods) {\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n worker.methods[name] = methods[name];\n }\n }\n }\n\n worker.send('ready');\n\n};\n\nworker.emit = function (payload) {\n if (currentRequestId) {\n worker.send({\n id: currentRequestId,\n isEvent: true,\n payload\n });\n }\n};\n\nif (typeof exports !== 'undefined') {\n exports.add = worker.register;\n exports.emit = worker.emit;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var environment = require('./environment');\n\n/**\n * Create a new worker pool\n * @param {string} [script]\n * @param {WorkerPoolOptions} [options]\n * @returns {Pool} pool\n */\nexports.pool = function pool(script, options) {\n var Pool = require('./Pool');\n\n return new Pool(script, options);\n};\n\n/**\n * Create a worker and optionally register a set of methods to the worker.\n * @param {Object} [methods]\n */\nexports.worker = function worker(methods) {\n var worker = require('./worker');\n worker.add(methods);\n};\n\n/**\n * Sends an event to the parent worker pool.\n * @param {any} payload \n */\nexports.workerEmit = function workerEmit(payload) {\n var worker = require('./worker');\n worker.emit(payload);\n};\n\n/**\n * Create a promise.\n * @type {Promise} promise\n */\nexports.Promise = require('./Promise');\n\nexports.platform = environment.platform;\nexports.isMainThread = environment.isMainThread;\nexports.cpus = environment.cpus;"],"names":["root","factory","exports","module","define","amd","self","this","Promise","require","WorkerHandler","environment","DEBUG_PORT_ALLOCATOR","Pool","script","options","workers","tasks","forkArgs","Object","freeze","forkOpts","debugPortStart","nodeWorker","workerType","maxQueueSize","Infinity","onCreateWorker","onTerminateWorker","maxWorkers","isNumber","isInteger","TypeError","validateMaxWorkers","Math","max","cpus","minWorkers","validateMinWorkers","_ensureMinWorkers","_boundNext","_next","bind","ensureWorkerThreads","value","round","prototype","exec","method","params","Array","isArray","resolver","defer","length","Error","task","timeout","push","originalTimeout","promise","delay","indexOf","call","String","proxy","arguments","pool","then","methods","forEach","slice","worker","_getWorker","me","shift","pending","terminated","_removeWorker","i","busy","_createWorkerHandler","releasePort","debugPort","_removeWorkerFromList","resolve","reject","terminate","err","index","splice","force","removeWorker","promises","termPromise","terminateAndNotify","always","all","stats","totalWorkers","busyWorkers","filter","idleWorkers","pendingTasks","activeTasks","overridenParams","nextAvailableStartingAt","handler","parent","SyntaxError","_onSuccess","_onFail","resolved","rejected","_process","onSuccess","onFail","s","_then","f","_resolve","result","fn","_reject","error","cancel","CancellationError","timer","setTimeout","TimeoutError","clearTimeout","callback","res","message","stack","remaining","results","p","constructor","name","requireFoolWebpack","TERMINATE_METHOD_ID","WorkerThreads","tryRequireWorkerThreads","ensureWebWorker","Worker","code","setupBrowserWorker","isBrowserWorker","on","event","addEventListener","data","send","postMessage","setupWorkerThreadWorker","stdout","stderr","isWorkerThread","kill","disconnect","setupProcessWorker","child_process","fork","isChildProcess","resolveForkOptions","opts","processExecArgv","process","execArgv","join","inspectorActive","debugBrk","arg","assign","concat","_options","onError","id","processing","undefined","create","platform","Blob","window","URL","createObjectURL","blob","type","__dirname","getDefaultWorker","setupWorker","ready","requestQueue","response","request","dispatchQueuedRequests","isEvent","payload","terminating","obj","temp","props","keys","objectToError","exitCode","signalCode","spawnargs","spawnfile","terminationHandler","lastId","cleanup","removeAllListeners","killed","cleanExitTimeout","once","_tryRequireWorkerThreads","_setupProcessWorker","_setupBrowserWorker","_setupWorkerThreadWorker","DebugPortAllocator","ports","starting","port","isNode","nodeProcess","versions","node","worker_threads","tryRequireFoolWebpack","isMainThread","connected","Window","navigator","hardwareConcurrency","eval","exit","parentPort","convertError","getOwnPropertyNames","reduce","product","defineProperty","enumerable","isPromise","run","args","Function","apply","currentRequestId","register","hasOwnProperty","emit","add","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","workerEmit"],"sourceRoot":""} \ No newline at end of file diff --git a/build/node_modules/workerpool/package.json b/build/node_modules/workerpool/package.json new file mode 100644 index 00000000..df407b10 --- /dev/null +++ b/build/node_modules/workerpool/package.json @@ -0,0 +1,84 @@ +{ + "_from": "workerpool@6.2.0", + "_id": "workerpool@6.2.0", + "_inBundle": false, + "_integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "_location": "/workerpool", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "workerpool@6.2.0", + "name": "workerpool", + "escapedName": "workerpool", + "rawSpec": "6.2.0", + "saveSpec": null, + "fetchSpec": "6.2.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/workerpool/-/workerpool-6.2.0.tgz", + "_shasum": "827d93c9ba23ee2019c3ffaff5c27fccea289e8b", + "_spec": "workerpool@6.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Jos de Jong", + "email": "wjosdejong@gmail.com", + "url": "https://github.com/josdejong" + }, + "browser": "dist/workerpool.js", + "bugs": { + "url": "https://github.com/josdejong/workerpool/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Offload tasks to a pool of workers on node.js and in the browser", + "devDependencies": { + "@babel/core": "7.16.7", + "@babel/preset-env": "7.16.8", + "babel-loader": "8.2.3", + "date-format": "4.0.2", + "del": "6.0.0", + "fancy-log": "2.0.0", + "find-process": "1.4.7", + "gulp": "4.0.2", + "handlebars": "4.7.7", + "istanbul": "0.4.5", + "mocha": "9.1.4", + "uglify-js": "3.14.5", + "webpack": "5.66.0" + }, + "files": [ + "dist", + "src", + "HISTORY.md", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/josdejong/workerpool", + "keywords": [ + "worker", + "web worker", + "cluster", + "pool", + "isomorphic" + ], + "license": "Apache-2.0", + "main": "src/index.js", + "name": "workerpool", + "repository": { + "type": "git", + "url": "git://github.com/josdejong/workerpool.git" + }, + "scripts": { + "build": "gulp", + "coverage": "npm run build && istanbul cover _mocha -- test; echo \"\nCoverage report is available at ./coverage/lcov-report/index.html\"", + "prepublishOnly": "npm run test", + "test": "npm run build && mocha test --timeout 2000", + "test:debug": "npm run build && mocha debug test --timeout 10000", + "watch": "gulp watch" + }, + "version": "6.2.0" +} diff --git a/build/node_modules/workerpool/src/Pool.js b/build/node_modules/workerpool/src/Pool.js new file mode 100644 index 00000000..ad28684c --- /dev/null +++ b/build/node_modules/workerpool/src/Pool.js @@ -0,0 +1,441 @@ +var Promise = require('./Promise'); +var WorkerHandler = require('./WorkerHandler'); +var environment = require('./environment'); +var DebugPortAllocator = require('./debug-port-allocator'); +var DEBUG_PORT_ALLOCATOR = new DebugPortAllocator(); +/** + * A pool to manage workers + * @param {String} [script] Optional worker script + * @param {WorkerPoolOptions} [options] See docs + * @constructor + */ +function Pool(script, options) { + if (typeof script === 'string') { + this.script = script || null; + } + else { + this.script = null; + options = script; + } + + this.workers = []; // queue with all workers + this.tasks = []; // queue with tasks awaiting execution + + options = options || {}; + + this.forkArgs = Object.freeze(options.forkArgs || []); + this.forkOpts = Object.freeze(options.forkOpts || {}); + this.debugPortStart = (options.debugPortStart || 43210); + this.nodeWorker = options.nodeWorker; + this.workerType = options.workerType || options.nodeWorker || 'auto' + this.maxQueueSize = options.maxQueueSize || Infinity; + + this.onCreateWorker = options.onCreateWorker || (() => null); + this.onTerminateWorker = options.onTerminateWorker || (() => null); + + // configuration + if (options && 'maxWorkers' in options) { + validateMaxWorkers(options.maxWorkers); + this.maxWorkers = options.maxWorkers; + } + else { + this.maxWorkers = Math.max((environment.cpus || 4) - 1, 1); + } + + if (options && 'minWorkers' in options) { + if(options.minWorkers === 'max') { + this.minWorkers = this.maxWorkers; + } else { + validateMinWorkers(options.minWorkers); + this.minWorkers = options.minWorkers; + this.maxWorkers = Math.max(this.minWorkers, this.maxWorkers); // in case minWorkers is higher than maxWorkers + } + this._ensureMinWorkers(); + } + + this._boundNext = this._next.bind(this); + + + if (this.workerType === 'thread') { + WorkerHandler.ensureWorkerThreads(); + } +} + + +/** + * Execute a function on a worker. + * + * Example usage: + * + * var pool = new Pool() + * + * // call a function available on the worker + * pool.exec('fibonacci', [6]) + * + * // offload a function + * function add(a, b) { + * return a + b + * }; + * pool.exec(add, [2, 4]) + * .then(function (result) { + * console.log(result); // outputs 6 + * }) + * .catch(function(error) { + * console.log(error); + * }); + * + * @param {String | Function} method Function name or function. + * If `method` is a string, the corresponding + * method on the worker will be executed + * If `method` is a Function, the function + * will be stringified and executed via the + * workers built-in function `run(fn, args)`. + * @param {Array} [params] Function arguments applied when calling the function + * @param {ExecOptions} [options] Options object + * @return {Promise.<*, Error>} result + */ +Pool.prototype.exec = function (method, params, options) { + // validate type of arguments + if (params && !Array.isArray(params)) { + throw new TypeError('Array expected as argument "params"'); + } + + if (typeof method === 'string') { + var resolver = Promise.defer(); + + if (this.tasks.length >= this.maxQueueSize) { + throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); + } + + // add a new task to the queue + var tasks = this.tasks; + var task = { + method: method, + params: params, + resolver: resolver, + timeout: null, + options: options + }; + tasks.push(task); + + // replace the timeout method of the Promise with our own, + // which starts the timer as soon as the task is actually started + var originalTimeout = resolver.promise.timeout; + resolver.promise.timeout = function timeout (delay) { + if (tasks.indexOf(task) !== -1) { + // task is still queued -> start the timer later on + task.timeout = delay; + return resolver.promise; + } + else { + // task is already being executed -> start timer immediately + return originalTimeout.call(resolver.promise, delay); + } + }; + + // trigger task execution + this._next(); + + return resolver.promise; + } + else if (typeof method === 'function') { + // send stringified function and function arguments to worker + return this.exec('run', [String(method), params]); + } + else { + throw new TypeError('Function or string expected as argument "method"'); + } +}; + +/** + * Create a proxy for current worker. Returns an object containing all + * methods available on the worker. The methods always return a promise. + * + * @return {Promise.} proxy + */ +Pool.prototype.proxy = function () { + if (arguments.length > 0) { + throw new Error('No arguments expected'); + } + + var pool = this; + return this.exec('methods') + .then(function (methods) { + var proxy = {}; + + methods.forEach(function (method) { + proxy[method] = function () { + return pool.exec(method, Array.prototype.slice.call(arguments)); + } + }); + + return proxy; + }); +}; + +/** + * Creates new array with the results of calling a provided callback function + * on every element in this array. + * @param {Array} array + * @param {function} callback Function taking two arguments: + * `callback(currentValue, index)` + * @return {Promise.} Returns a promise which resolves with an Array + * containing the results of the callback function + * executed for each of the array elements. + */ +/* TODO: implement map +Pool.prototype.map = function (array, callback) { +}; +*/ + +/** + * Grab the first task from the queue, find a free worker, and assign the + * worker to the task. + * @protected + */ +Pool.prototype._next = function () { + if (this.tasks.length > 0) { + // there are tasks in the queue + + // find an available worker + var worker = this._getWorker(); + if (worker) { + // get the first task from the queue + var me = this; + var task = this.tasks.shift(); + + // check if the task is still pending (and not cancelled -> promise rejected) + if (task.resolver.promise.pending) { + // send the request to the worker + var promise = worker.exec(task.method, task.params, task.resolver, task.options) + .then(me._boundNext) + .catch(function () { + // if the worker crashed and terminated, remove it from the pool + if (worker.terminated) { + return me._removeWorker(worker); + } + }).then(function() { + me._next(); // trigger next task in the queue + }); + + // start queued timer now + if (typeof task.timeout === 'number') { + promise.timeout(task.timeout); + } + } else { + // The task taken was already complete (either rejected or resolved), so just trigger next task in the queue + me._next(); + } + } + } +}; + +/** + * Get an available worker. If no worker is available and the maximum number + * of workers isn't yet reached, a new worker will be created and returned. + * If no worker is available and the maximum number of workers is reached, + * null will be returned. + * + * @return {WorkerHandler | null} worker + * @private + */ +Pool.prototype._getWorker = function() { + // find a non-busy worker + var workers = this.workers; + for (var i = 0; i < workers.length; i++) { + var worker = workers[i]; + if (worker.busy() === false) { + return worker; + } + } + + if (workers.length < this.maxWorkers) { + // create a new worker + worker = this._createWorkerHandler(); + workers.push(worker); + return worker; + } + + return null; +}; + +/** + * Remove a worker from the pool. + * Attempts to terminate worker if not already terminated, and ensures the minimum + * pool size is met. + * @param {WorkerHandler} worker + * @return {Promise} + * @protected + */ +Pool.prototype._removeWorker = function(worker) { + var me = this; + + DEBUG_PORT_ALLOCATOR.releasePort(worker.debugPort); + // _removeWorker will call this, but we need it to be removed synchronously + this._removeWorkerFromList(worker); + // If minWorkers set, spin up new workers to replace the crashed ones + this._ensureMinWorkers(); + // terminate the worker (if not already terminated) + return new Promise(function(resolve, reject) { + worker.terminate(false, function(err) { + me.onTerminateWorker({ + forkArgs: worker.forkArgs, + forkOpts: worker.forkOpts, + script: worker.script + }); + if (err) { + reject(err); + } else { + resolve(worker); + } + }); + }); +}; + +/** + * Remove a worker from the pool list. + * @param {WorkerHandler} worker + * @protected + */ +Pool.prototype._removeWorkerFromList = function(worker) { + // remove from the list with workers + var index = this.workers.indexOf(worker); + if (index !== -1) { + this.workers.splice(index, 1); + } +}; + +/** + * Close all active workers. Tasks currently being executed will be finished first. + * @param {boolean} [force=false] If false (default), the workers are terminated + * after finishing all tasks currently in + * progress. If true, the workers will be + * terminated immediately. + * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected + * after timeout if worker process has not been terminated. + * @return {Promise.} + */ +Pool.prototype.terminate = function (force, timeout) { + var me = this; + + // cancel any pending tasks + this.tasks.forEach(function (task) { + task.resolver.reject(new Error('Pool terminated')); + }); + this.tasks.length = 0; + + var f = function (worker) { + this._removeWorkerFromList(worker); + }; + var removeWorker = f.bind(this); + + var promises = []; + var workers = this.workers.slice(); + workers.forEach(function (worker) { + var termPromise = worker.terminateAndNotify(force, timeout) + .then(removeWorker) + .always(function() { + me.onTerminateWorker({ + forkArgs: worker.forkArgs, + forkOpts: worker.forkOpts, + script: worker.script + }); + }); + promises.push(termPromise); + }); + return Promise.all(promises); +}; + +/** + * Retrieve statistics on tasks and workers. + * @return {{totalWorkers: number, busyWorkers: number, idleWorkers: number, pendingTasks: number, activeTasks: number}} Returns an object with statistics + */ +Pool.prototype.stats = function () { + var totalWorkers = this.workers.length; + var busyWorkers = this.workers.filter(function (worker) { + return worker.busy(); + }).length; + + return { + totalWorkers: totalWorkers, + busyWorkers: busyWorkers, + idleWorkers: totalWorkers - busyWorkers, + + pendingTasks: this.tasks.length, + activeTasks: busyWorkers + }; +}; + +/** + * Ensures that a minimum of minWorkers is up and running + * @protected + */ +Pool.prototype._ensureMinWorkers = function() { + if (this.minWorkers) { + for(var i = this.workers.length; i < this.minWorkers; i++) { + this.workers.push(this._createWorkerHandler()); + } + } +}; + +/** + * Helper function to create a new WorkerHandler and pass all options. + * @return {WorkerHandler} + * @private + */ +Pool.prototype._createWorkerHandler = function () { + const overridenParams = this.onCreateWorker({ + forkArgs: this.forkArgs, + forkOpts: this.forkOpts, + script: this.script + }) || {}; + + return new WorkerHandler(overridenParams.script || this.script, { + forkArgs: overridenParams.forkArgs || this.forkArgs, + forkOpts: overridenParams.forkOpts || this.forkOpts, + debugPort: DEBUG_PORT_ALLOCATOR.nextAvailableStartingAt(this.debugPortStart), + workerType: this.workerType + }); +} + +/** + * Ensure that the maxWorkers option is an integer >= 1 + * @param {*} maxWorkers + * @returns {boolean} returns true maxWorkers has a valid value + */ +function validateMaxWorkers(maxWorkers) { + if (!isNumber(maxWorkers) || !isInteger(maxWorkers) || maxWorkers < 1) { + throw new TypeError('Option maxWorkers must be an integer number >= 1'); + } +} + +/** + * Ensure that the minWorkers option is an integer >= 0 + * @param {*} minWorkers + * @returns {boolean} returns true when minWorkers has a valid value + */ +function validateMinWorkers(minWorkers) { + if (!isNumber(minWorkers) || !isInteger(minWorkers) || minWorkers < 0) { + throw new TypeError('Option minWorkers must be an integer number >= 0'); + } +} + +/** + * Test whether a variable is a number + * @param {*} value + * @returns {boolean} returns true when value is a number + */ +function isNumber(value) { + return typeof value === 'number'; +} + +/** + * Test whether a number is an integer + * @param {number} value + * @returns {boolean} Returns true if value is an integer + */ +function isInteger(value) { + return Math.round(value) == value; +} + +module.exports = Pool; diff --git a/build/node_modules/workerpool/src/Promise.js b/build/node_modules/workerpool/src/Promise.js new file mode 100644 index 00000000..d2d794e3 --- /dev/null +++ b/build/node_modules/workerpool/src/Promise.js @@ -0,0 +1,279 @@ +'use strict'; + +/** + * Promise + * + * Inspired by https://gist.github.com/RubaXa/8501359 from RubaXa + * + * @param {Function} handler Called as handler(resolve: Function, reject: Function) + * @param {Promise} [parent] Parent promise for propagation of cancel and timeout + */ +function Promise(handler, parent) { + var me = this; + + if (!(this instanceof Promise)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } + + if (typeof handler !== 'function') { + throw new SyntaxError('Function parameter handler(resolve, reject) missing'); + } + + var _onSuccess = []; + var _onFail = []; + + // status + this.resolved = false; + this.rejected = false; + this.pending = true; + + /** + * Process onSuccess and onFail callbacks: add them to the queue. + * Once the promise is resolve, the function _promise is replace. + * @param {Function} onSuccess + * @param {Function} onFail + * @private + */ + var _process = function (onSuccess, onFail) { + _onSuccess.push(onSuccess); + _onFail.push(onFail); + }; + + /** + * Add an onSuccess callback and optionally an onFail callback to the Promise + * @param {Function} onSuccess + * @param {Function} [onFail] + * @returns {Promise} promise + */ + this.then = function (onSuccess, onFail) { + return new Promise(function (resolve, reject) { + var s = onSuccess ? _then(onSuccess, resolve, reject) : resolve; + var f = onFail ? _then(onFail, resolve, reject) : reject; + + _process(s, f); + }, me); + }; + + /** + * Resolve the promise + * @param {*} result + * @type {Function} + */ + var _resolve = function (result) { + // update status + me.resolved = true; + me.rejected = false; + me.pending = false; + + _onSuccess.forEach(function (fn) { + fn(result); + }); + + _process = function (onSuccess, onFail) { + onSuccess(result); + }; + + _resolve = _reject = function () { }; + + return me; + }; + + /** + * Reject the promise + * @param {Error} error + * @type {Function} + */ + var _reject = function (error) { + // update status + me.resolved = false; + me.rejected = true; + me.pending = false; + + _onFail.forEach(function (fn) { + fn(error); + }); + + _process = function (onSuccess, onFail) { + onFail(error); + }; + + _resolve = _reject = function () { } + + return me; + }; + + /** + * Cancel te promise. This will reject the promise with a CancellationError + * @returns {Promise} self + */ + this.cancel = function () { + if (parent) { + parent.cancel(); + } + else { + _reject(new CancellationError()); + } + + return me; + }; + + /** + * Set a timeout for the promise. If the promise is not resolved within + * the time, the promise will be cancelled and a TimeoutError is thrown. + * If the promise is resolved in time, the timeout is removed. + * @param {number} delay Delay in milliseconds + * @returns {Promise} self + */ + this.timeout = function (delay) { + if (parent) { + parent.timeout(delay); + } + else { + var timer = setTimeout(function () { + _reject(new TimeoutError('Promise timed out after ' + delay + ' ms')); + }, delay); + + me.always(function () { + clearTimeout(timer); + }); + } + + return me; + }; + + // attach handler passing the resolve and reject functions + handler(function (result) { + _resolve(result); + }, function (error) { + _reject(error); + }); +} + +/** + * Execute given callback, then call resolve/reject based on the returned result + * @param {Function} callback + * @param {Function} resolve + * @param {Function} reject + * @returns {Function} + * @private + */ +function _then(callback, resolve, reject) { + return function (result) { + try { + var res = callback(result); + if (res && typeof res.then === 'function' && typeof res['catch'] === 'function') { + // method returned a promise + res.then(resolve, reject); + } + else { + resolve(res); + } + } + catch (error) { + reject(error); + } + } +} + +/** + * Add an onFail callback to the Promise + * @param {Function} onFail + * @returns {Promise} promise + */ +Promise.prototype['catch'] = function (onFail) { + return this.then(null, onFail); +}; + +// TODO: add support for Promise.catch(Error, callback) +// TODO: add support for Promise.catch(Error, Error, callback) + +/** + * Execute given callback when the promise either resolves or rejects. + * @param {Function} fn + * @returns {Promise} promise + */ +Promise.prototype.always = function (fn) { + return this.then(fn, fn); +}; + +/** + * Create a promise which resolves when all provided promises are resolved, + * and fails when any of the promises resolves. + * @param {Promise[]} promises + * @returns {Promise} promise + */ +Promise.all = function (promises){ + return new Promise(function (resolve, reject) { + var remaining = promises.length, + results = []; + + if (remaining) { + promises.forEach(function (p, i) { + p.then(function (result) { + results[i] = result; + remaining--; + if (remaining == 0) { + resolve(results); + } + }, function (error) { + remaining = 0; + reject(error); + }); + }); + } + else { + resolve(results); + } + }); +}; + +/** + * Create a promise resolver + * @returns {{promise: Promise, resolve: Function, reject: Function}} resolver + */ +Promise.defer = function () { + var resolver = {}; + + resolver.promise = new Promise(function (resolve, reject) { + resolver.resolve = resolve; + resolver.reject = reject; + }); + + return resolver; +}; + +/** + * Create a cancellation error + * @param {String} [message] + * @extends Error + */ +function CancellationError(message) { + this.message = message || 'promise cancelled'; + this.stack = (new Error()).stack; +} + +CancellationError.prototype = new Error(); +CancellationError.prototype.constructor = Error; +CancellationError.prototype.name = 'CancellationError'; + +Promise.CancellationError = CancellationError; + + +/** + * Create a timeout error + * @param {String} [message] + * @extends Error + */ +function TimeoutError(message) { + this.message = message || 'timeout exceeded'; + this.stack = (new Error()).stack; +} + +TimeoutError.prototype = new Error(); +TimeoutError.prototype.constructor = Error; +TimeoutError.prototype.name = 'TimeoutError'; + +Promise.TimeoutError = TimeoutError; + + +module.exports = Promise; diff --git a/build/node_modules/workerpool/src/WorkerHandler.js b/build/node_modules/workerpool/src/WorkerHandler.js new file mode 100644 index 00000000..1af89d14 --- /dev/null +++ b/build/node_modules/workerpool/src/WorkerHandler.js @@ -0,0 +1,502 @@ +'use strict'; + +var Promise = require('./Promise'); +var environment = require('./environment'); +var requireFoolWebpack = require('./requireFoolWebpack'); + +/** + * Special message sent by parent which causes a child process worker to terminate itself. + * Not a "message object"; this string is the entire message. + */ +var TERMINATE_METHOD_ID = '__workerpool-terminate__'; + +/** + * If sending `TERMINATE_METHOD_ID` does not cause the child process to exit in this many milliseconds, + * force-kill the child process. + */ +var CHILD_PROCESS_EXIT_TIMEOUT = 1000; + +function ensureWorkerThreads() { + var WorkerThreads = tryRequireWorkerThreads() + if (!WorkerThreads) { + throw new Error('WorkerPool: workerType = \'thread\' is not supported, Node >= 11.7.0 required') + } + + return WorkerThreads; +} + +// check whether Worker is supported by the browser +function ensureWebWorker() { + // Workaround for a bug in PhantomJS (Or QtWebkit): https://github.com/ariya/phantomjs/issues/14534 + if (typeof Worker !== 'function' && (typeof Worker !== 'object' || typeof Worker.prototype.constructor !== 'function')) { + throw new Error('WorkerPool: Web Workers not supported'); + } +} + +function tryRequireWorkerThreads() { + try { + return requireFoolWebpack('worker_threads'); + } catch(error) { + if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') { + // no worker_threads available (old version of node.js) + return null; + } else { + throw error; + } + } +} + +// get the default worker script +function getDefaultWorker() { + if (environment.platform === 'browser') { + // test whether the browser supports all features that we need + if (typeof Blob === 'undefined') { + throw new Error('Blob not supported by the browser'); + } + if (!window.URL || typeof window.URL.createObjectURL !== 'function') { + throw new Error('URL.createObjectURL not supported by the browser'); + } + + // use embedded worker.js + var blob = new Blob([require('./generated/embeddedWorker')], {type: 'text/javascript'}); + return window.URL.createObjectURL(blob); + } + else { + // use external worker.js in current directory + return __dirname + '/worker.js'; + } +} + +function setupWorker(script, options) { + if (options.workerType === 'web') { // browser only + ensureWebWorker(); + return setupBrowserWorker(script, Worker); + } else if (options.workerType === 'thread') { // node.js only + WorkerThreads = ensureWorkerThreads(); + return setupWorkerThreadWorker(script, WorkerThreads); + } else if (options.workerType === 'process' || !options.workerType) { // node.js only + return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); + } else { // options.workerType === 'auto' or undefined + if (environment.platform === 'browser') { + ensureWebWorker(); + return setupBrowserWorker(script, Worker); + } + else { // environment.platform === 'node' + var WorkerThreads = tryRequireWorkerThreads(); + if (WorkerThreads) { + return setupWorkerThreadWorker(script, WorkerThreads); + } else { + return setupProcessWorker(script, resolveForkOptions(options), requireFoolWebpack('child_process')); + } + } + } +} + +function setupBrowserWorker(script, Worker) { + // create the web worker + var worker = new Worker(script); + + worker.isBrowserWorker = true; + // add node.js API to the web worker + worker.on = function (event, callback) { + this.addEventListener(event, function (message) { + callback(message.data); + }); + }; + worker.send = function (message) { + this.postMessage(message); + }; + return worker; +} + +function setupWorkerThreadWorker(script, WorkerThreads) { + var worker = new WorkerThreads.Worker(script, { + stdout: false, // automatically pipe worker.STDOUT to process.STDOUT + stderr: false // automatically pipe worker.STDERR to process.STDERR + }); + worker.isWorkerThread = true; + // make the worker mimic a child_process + worker.send = function(message) { + this.postMessage(message); + }; + + worker.kill = function() { + this.terminate(); + return true; + }; + + worker.disconnect = function() { + this.terminate(); + }; + + return worker; +} + +function setupProcessWorker(script, options, child_process) { + // no WorkerThreads, fallback to sub-process based workers + var worker = child_process.fork( + script, + options.forkArgs, + options.forkOpts + ); + + worker.isChildProcess = true; + return worker; +} + +// add debug flags to child processes if the node inspector is active +function resolveForkOptions(opts) { + opts = opts || {}; + + var processExecArgv = process.execArgv.join(' '); + var inspectorActive = processExecArgv.indexOf('--inspect') !== -1; + var debugBrk = processExecArgv.indexOf('--debug-brk') !== -1; + + var execArgv = []; + if (inspectorActive) { + execArgv.push('--inspect=' + opts.debugPort); + + if (debugBrk) { + execArgv.push('--debug-brk'); + } + } + + process.execArgv.forEach(function(arg) { + if (arg.indexOf('--max-old-space-size') > -1) { + execArgv.push(arg) + } + }) + + return Object.assign({}, opts, { + forkArgs: opts.forkArgs, + forkOpts: Object.assign({}, opts.forkOpts, { + execArgv: (opts.forkOpts && opts.forkOpts.execArgv || []) + .concat(execArgv) + }) + }); +} + +/** + * Converts a serialized error to Error + * @param {Object} obj Error that has been serialized and parsed to object + * @return {Error} The equivalent Error. + */ +function objectToError (obj) { + var temp = new Error('') + var props = Object.keys(obj) + + for (var i = 0; i < props.length; i++) { + temp[props[i]] = obj[props[i]] + } + + return temp +} + +/** + * A WorkerHandler controls a single worker. This worker can be a child process + * on node.js or a WebWorker in a browser environment. + * @param {String} [script] If no script is provided, a default worker with a + * function run will be created. + * @param {WorkerPoolOptions} _options See docs + * @constructor + */ +function WorkerHandler(script, _options) { + var me = this; + var options = _options || {}; + + this.script = script || getDefaultWorker(); + this.worker = setupWorker(this.script, options); + this.debugPort = options.debugPort; + this.forkOpts = options.forkOpts; + this.forkArgs = options.forkArgs; + + // The ready message is only sent if the worker.add method is called (And the default script is not used) + if (!script) { + this.worker.ready = true; + } + + // queue for requests that are received before the worker is ready + this.requestQueue = []; + this.worker.on('message', function (response) { + if (me.terminated) { + return; + } + if (typeof response === 'string' && response === 'ready') { + me.worker.ready = true; + dispatchQueuedRequests(); + } else { + // find the task from the processing queue, and run the tasks callback + var id = response.id; + var task = me.processing[id]; + if (task !== undefined) { + if (response.isEvent) { + if (task.options && typeof task.options.on === 'function') { + task.options.on(response.payload); + } + } else { + // remove the task from the queue + delete me.processing[id]; + + // test if we need to terminate + if (me.terminating === true) { + // complete worker termination if all tasks are finished + me.terminate(); + } + + // resolve the task's promise + if (response.error) { + task.resolver.reject(objectToError(response.error)); + } + else { + task.resolver.resolve(response.result); + } + } + } + } + }); + + // reject all running tasks on worker error + function onError(error) { + me.terminated = true; + + for (var id in me.processing) { + if (me.processing[id] !== undefined) { + me.processing[id].resolver.reject(error); + } + } + me.processing = Object.create(null); + } + + // send all queued requests to worker + function dispatchQueuedRequests() + { + for(const request of me.requestQueue.splice(0)) { + me.worker.send(request); + } + } + + var worker = this.worker; + // listen for worker messages error and exit + this.worker.on('error', onError); + this.worker.on('exit', function (exitCode, signalCode) { + var message = 'Workerpool Worker terminated Unexpectedly\n'; + + message += ' exitCode: `' + exitCode + '`\n'; + message += ' signalCode: `' + signalCode + '`\n'; + + message += ' workerpool.script: `' + me.script + '`\n'; + message += ' spawnArgs: `' + worker.spawnargs + '`\n'; + message += ' spawnfile: `' + worker.spawnfile + '`\n' + + message += ' stdout: `' + worker.stdout + '`\n' + message += ' stderr: `' + worker.stderr + '`\n' + + onError(new Error(message)); + }); + + this.processing = Object.create(null); // queue with tasks currently in progress + + this.terminating = false; + this.terminated = false; + this.terminationHandler = null; + this.lastId = 0; +} + +/** + * Get a list with methods available on the worker. + * @return {Promise.} methods + */ +WorkerHandler.prototype.methods = function () { + return this.exec('methods'); +}; + +/** + * Execute a method with given parameters on the worker + * @param {String} method + * @param {Array} [params] + * @param {{resolve: Function, reject: Function}} [resolver] + * @param {ExecOptions} [options] + * @return {Promise.<*, Error>} result + */ +WorkerHandler.prototype.exec = function(method, params, resolver, options) { + if (!resolver) { + resolver = Promise.defer(); + } + + // generate a unique id for the task + var id = ++this.lastId; + + // register a new task as being in progress + this.processing[id] = { + id: id, + resolver: resolver, + options: options + }; + + // build a JSON-RPC request + var request = { + id: id, + method: method, + params: params + }; + + if (this.terminated) { + resolver.reject(new Error('Worker is terminated')); + } else if (this.worker.ready) { + // send the request to the worker + this.worker.send(request); + } else { + this.requestQueue.push(request); + } + + // on cancellation, force the worker to terminate + var me = this; + return resolver.promise.catch(function (error) { + if (error instanceof Promise.CancellationError || error instanceof Promise.TimeoutError) { + // remove this task from the queue. It is already rejected (hence this + // catch event), and else it will be rejected again when terminating + delete me.processing[id]; + + // terminate worker + return me.terminateAndNotify(true) + .then(function() { + throw error; + }, function(err) { + throw err; + }); + } else { + throw error; + } + }) +}; + +/** + * Test whether the worker is working or not + * @return {boolean} Returns true if the worker is busy + */ +WorkerHandler.prototype.busy = function () { + return Object.keys(this.processing).length > 0; +}; + +/** + * Terminate the worker. + * @param {boolean} [force=false] If false (default), the worker is terminated + * after finishing all tasks currently in + * progress. If true, the worker will be + * terminated immediately. + * @param {function} [callback=null] If provided, will be called when process terminates. + */ +WorkerHandler.prototype.terminate = function (force, callback) { + var me = this; + if (force) { + // cancel all tasks in progress + for (var id in this.processing) { + if (this.processing[id] !== undefined) { + this.processing[id].resolver.reject(new Error('Worker terminated')); + } + } + this.processing = Object.create(null); + } + + if (typeof callback === 'function') { + this.terminationHandler = callback; + } + if (!this.busy()) { + // all tasks are finished. kill the worker + var cleanup = function(err) { + me.terminated = true; + if (me.worker != null && me.worker.removeAllListeners) { + // removeAllListeners is only available for child_process + me.worker.removeAllListeners('message'); + } + me.worker = null; + me.terminating = false; + if (me.terminationHandler) { + me.terminationHandler(err, me); + } else if (err) { + throw err; + } + } + + if (this.worker) { + if (typeof this.worker.kill === 'function') { + if (this.worker.killed) { + cleanup(new Error('worker already killed!')); + return; + } + + if (this.worker.isChildProcess) { + var cleanExitTimeout = setTimeout(function() { + if (me.worker) { + me.worker.kill(); + } + }, CHILD_PROCESS_EXIT_TIMEOUT); + + this.worker.once('exit', function() { + clearTimeout(cleanExitTimeout); + if (me.worker) { + me.worker.killed = true; + } + cleanup(); + }); + + if (this.worker.ready) { + this.worker.send(TERMINATE_METHOD_ID); + } else { + this.worker.requestQueue.push(TERMINATE_METHOD_ID) + } + } else { + // worker_thread + this.worker.kill(); + this.worker.killed = true; + cleanup(); + } + return; + } + else if (typeof this.worker.terminate === 'function') { + this.worker.terminate(); // web worker + this.worker.killed = true; + } + else { + throw new Error('Failed to terminate worker'); + } + } + cleanup(); + } + else { + // we can't terminate immediately, there are still tasks being executed + this.terminating = true; + } +}; + +/** + * Terminate the worker, returning a Promise that resolves when the termination has been done. + * @param {boolean} [force=false] If false (default), the worker is terminated + * after finishing all tasks currently in + * progress. If true, the worker will be + * terminated immediately. + * @param {number} [timeout] If provided and non-zero, worker termination promise will be rejected + * after timeout if worker process has not been terminated. + * @return {Promise.} + */ +WorkerHandler.prototype.terminateAndNotify = function (force, timeout) { + var resolver = Promise.defer(); + if (timeout) { + resolver.promise.timeout = timeout; + } + this.terminate(force, function(err, worker) { + if (err) { + resolver.reject(err); + } else { + resolver.resolve(worker); + } + }); + return resolver.promise; +}; + +module.exports = WorkerHandler; +module.exports._tryRequireWorkerThreads = tryRequireWorkerThreads; +module.exports._setupProcessWorker = setupProcessWorker; +module.exports._setupBrowserWorker = setupBrowserWorker; +module.exports._setupWorkerThreadWorker = setupWorkerThreadWorker; +module.exports.ensureWorkerThreads = ensureWorkerThreads; diff --git a/build/node_modules/workerpool/src/debug-port-allocator.js b/build/node_modules/workerpool/src/debug-port-allocator.js new file mode 100644 index 00000000..7688883f --- /dev/null +++ b/build/node_modules/workerpool/src/debug-port-allocator.js @@ -0,0 +1,28 @@ +'use strict'; + +var MAX_PORTS = 65535; +module.exports = DebugPortAllocator; +function DebugPortAllocator() { + this.ports = Object.create(null); + this.length = 0; +} + +DebugPortAllocator.prototype.nextAvailableStartingAt = function(starting) { + while (this.ports[starting] === true) { + starting++; + } + + if (starting >= MAX_PORTS) { + throw new Error('WorkerPool debug port limit reached: ' + starting + '>= ' + MAX_PORTS ); + } + + this.ports[starting] = true; + this.length++; + return starting; +}; + +DebugPortAllocator.prototype.releasePort = function(port) { + delete this.ports[port]; + this.length--; +}; + diff --git a/build/node_modules/workerpool/src/environment.js b/build/node_modules/workerpool/src/environment.js new file mode 100644 index 00000000..fc32f49d --- /dev/null +++ b/build/node_modules/workerpool/src/environment.js @@ -0,0 +1,36 @@ +var requireFoolWebpack = require('./requireFoolWebpack'); + +// source: https://github.com/flexdinesh/browser-or-node +var isNode = function (nodeProcess) { + return ( + typeof nodeProcess !== 'undefined' && + nodeProcess.versions != null && + nodeProcess.versions.node != null + ); +} +module.exports.isNode = isNode + +// determines the JavaScript platform: browser or node +module.exports.platform = typeof process !== 'undefined' && isNode(process) + ? 'node' + : 'browser'; + +// determines whether the code is running in main thread or not +// note that in node.js we have to check both worker_thread and child_process +var worker_threads = tryRequireFoolWebpack('worker_threads'); +module.exports.isMainThread = module.exports.platform === 'node' + ? ((!worker_threads || worker_threads.isMainThread) && !process.connected) + : typeof Window !== 'undefined'; + +// determines the number of cpus available +module.exports.cpus = module.exports.platform === 'browser' + ? self.navigator.hardwareConcurrency + : requireFoolWebpack('os').cpus().length; + +function tryRequireFoolWebpack (module) { + try { + return requireFoolWebpack(module); + } catch(err) { + return null + } +} diff --git a/build/node_modules/workerpool/src/generated/embeddedWorker.js b/build/node_modules/workerpool/src/generated/embeddedWorker.js new file mode 100644 index 00000000..eac75849 --- /dev/null +++ b/build/node_modules/workerpool/src/generated/embeddedWorker.js @@ -0,0 +1,6 @@ +/** + * embeddedWorker.js contains an embedded version of worker.js. + * This file is automatically generated, + * changes made in this file will be overwritten. + */ +module.exports = "!function(){var __webpack_exports__={};!function(){var exports=__webpack_exports__,__webpack_unused_export__;function _typeof(r){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var requireFoolWebpack=eval(\"typeof require !== 'undefined' ? require : function (module) { throw new Error('Module \\\" + module + \\\" not found.') }\"),TERMINATE_METHOD_ID=\"__workerpool-terminate__\",worker={exit:function(){}},WorkerThreads,parentPort;if(\"undefined\"!=typeof self&&\"function\"==typeof postMessage&&\"function\"==typeof addEventListener)worker.on=function(r,e){addEventListener(r,function(r){e(r.data)})},worker.send=function(r){postMessage(r)};else{if(\"undefined\"==typeof process)throw new Error(\"Script must be executed as a worker\");try{WorkerThreads=requireFoolWebpack(\"worker_threads\")}catch(error){if(\"object\"!==_typeof(error)||null===error||\"MODULE_NOT_FOUND\"!==error.code)throw error}WorkerThreads&&null!==WorkerThreads.parentPort?(parentPort=WorkerThreads.parentPort,worker.send=parentPort.postMessage.bind(parentPort),worker.on=parentPort.on.bind(parentPort)):(worker.on=process.on.bind(process),worker.send=process.send.bind(process),worker.on(\"disconnect\",function(){process.exit(1)}),worker.exit=process.exit.bind(process))}function convertError(o){return Object.getOwnPropertyNames(o).reduce(function(r,e){return Object.defineProperty(r,e,{value:o[e],enumerable:!0})},{})}function isPromise(r){return r&&\"function\"==typeof r.then&&\"function\"==typeof r.catch}worker.methods={},worker.methods.run=function(r,e){r=new Function(\"return (\"+r+\").apply(null, arguments);\");return r.apply(r,e)},worker.methods.methods=function(){return Object.keys(worker.methods)};var currentRequestId=null;worker.on(\"message\",function(e){if(e===TERMINATE_METHOD_ID)return worker.exit(0);try{var r=worker.methods[e.method];if(!r)throw new Error('Unknown method \"'+e.method+'\"');currentRequestId=e.id;var o=r.apply(r,e.params);isPromise(o)?o.then(function(r){worker.send({id:e.id,result:r,error:null}),currentRequestId=null}).catch(function(r){worker.send({id:e.id,result:null,error:convertError(r)}),currentRequestId=null}):(worker.send({id:e.id,result:o,error:null}),currentRequestId=null)}catch(r){worker.send({id:e.id,result:null,error:convertError(r)})}}),worker.register=function(r){if(r)for(var e in r)r.hasOwnProperty(e)&&(worker.methods[e]=r[e]);worker.send(\"ready\")},worker.emit=function(r){currentRequestId&&worker.send({id:currentRequestId,isEvent:!0,payload:r})},__webpack_unused_export__=worker.register,worker.emit}()}();"; diff --git a/build/node_modules/workerpool/src/header.js b/build/node_modules/workerpool/src/header.js new file mode 100644 index 00000000..8beef142 --- /dev/null +++ b/build/node_modules/workerpool/src/header.js @@ -0,0 +1,24 @@ +/** + * workerpool.js + * https://github.com/josdejong/workerpool + * + * Offload tasks to a pool of workers on node.js and in the browser. + * + * @version @@version + * @date @@date + * + * @license + * Copyright (C) 2014-2022 Jos de Jong + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ diff --git a/build/node_modules/workerpool/src/index.js b/build/node_modules/workerpool/src/index.js new file mode 100644 index 00000000..051bbf14 --- /dev/null +++ b/build/node_modules/workerpool/src/index.js @@ -0,0 +1,41 @@ +var environment = require('./environment'); + +/** + * Create a new worker pool + * @param {string} [script] + * @param {WorkerPoolOptions} [options] + * @returns {Pool} pool + */ +exports.pool = function pool(script, options) { + var Pool = require('./Pool'); + + return new Pool(script, options); +}; + +/** + * Create a worker and optionally register a set of methods to the worker. + * @param {Object} [methods] + */ +exports.worker = function worker(methods) { + var worker = require('./worker'); + worker.add(methods); +}; + +/** + * Sends an event to the parent worker pool. + * @param {any} payload + */ +exports.workerEmit = function workerEmit(payload) { + var worker = require('./worker'); + worker.emit(payload); +}; + +/** + * Create a promise. + * @type {Promise} promise + */ +exports.Promise = require('./Promise'); + +exports.platform = environment.platform; +exports.isMainThread = environment.isMainThread; +exports.cpus = environment.cpus; \ No newline at end of file diff --git a/build/node_modules/workerpool/src/requireFoolWebpack.js b/build/node_modules/workerpool/src/requireFoolWebpack.js new file mode 100644 index 00000000..15b208ec --- /dev/null +++ b/build/node_modules/workerpool/src/requireFoolWebpack.js @@ -0,0 +1,8 @@ +// source of inspiration: https://github.com/sindresorhus/require-fool-webpack +var requireFoolWebpack = eval( + 'typeof require !== \'undefined\' ' + + '? require ' + + ': function (module) { throw new Error(\'Module " + module + " not found.\') }' +); + +module.exports = requireFoolWebpack; diff --git a/build/node_modules/workerpool/src/types.js b/build/node_modules/workerpool/src/types.js new file mode 100644 index 00000000..d8a2f1bc --- /dev/null +++ b/build/node_modules/workerpool/src/types.js @@ -0,0 +1,16 @@ +/** + * @typedef {Object} WorkerPoolOptions + * @property {number | 'max'} [minWorkers] + * @property {number} [maxWorkers] + * @property {number} [maxQueueSize] + * @property {'auto' | 'web' | 'process' | 'thread'} [workerType] + * @property {*} [forkArgs] + * @property {*} [forkOpts] + * @property {Function} [onCreateWorker] + * @property {Function} [onTerminateWorker] + */ + +/** + * @typedef {Object} ExecOptions + * @property {(payload: any) => unknown} [on] + */ diff --git a/build/node_modules/workerpool/src/worker.js b/build/node_modules/workerpool/src/worker.js new file mode 100644 index 00000000..493ceb2d --- /dev/null +++ b/build/node_modules/workerpool/src/worker.js @@ -0,0 +1,202 @@ +/** + * worker must be started as a child process or a web worker. + * It listens for RPC messages from the parent process. + */ + +// source of inspiration: https://github.com/sindresorhus/require-fool-webpack +var requireFoolWebpack = eval( + 'typeof require !== \'undefined\'' + + ' ? require' + + ' : function (module) { throw new Error(\'Module " + module + " not found.\') }' +); + +/** + * Special message sent by parent which causes the worker to terminate itself. + * Not a "message object"; this string is the entire message. + */ +var TERMINATE_METHOD_ID = '__workerpool-terminate__'; + +// var nodeOSPlatform = require('./environment').nodeOSPlatform; + +// create a worker API for sending and receiving messages which works both on +// node.js and in the browser +var worker = { + exit: function() {} +}; +if (typeof self !== 'undefined' && typeof postMessage === 'function' && typeof addEventListener === 'function') { + // worker in the browser + worker.on = function (event, callback) { + addEventListener(event, function (message) { + callback(message.data); + }) + }; + worker.send = function (message) { + postMessage(message); + }; +} +else if (typeof process !== 'undefined') { + // node.js + + var WorkerThreads; + try { + WorkerThreads = requireFoolWebpack('worker_threads'); + } catch(error) { + if (typeof error === 'object' && error !== null && error.code === 'MODULE_NOT_FOUND') { + // no worker_threads, fallback to sub-process based workers + } else { + throw error; + } + } + + if (WorkerThreads && + /* if there is a parentPort, we are in a WorkerThread */ + WorkerThreads.parentPort !== null) { + var parentPort = WorkerThreads.parentPort; + worker.send = parentPort.postMessage.bind(parentPort); + worker.on = parentPort.on.bind(parentPort); + } else { + worker.on = process.on.bind(process); + worker.send = process.send.bind(process); + // register disconnect handler only for subprocess worker to exit when parent is killed unexpectedly + worker.on('disconnect', function () { + process.exit(1); + }); + worker.exit = process.exit.bind(process); + } +} +else { + throw new Error('Script must be executed as a worker'); +} + +function convertError(error) { + return Object.getOwnPropertyNames(error).reduce(function(product, name) { + return Object.defineProperty(product, name, { + value: error[name], + enumerable: true + }); + }, {}); +} + +/** + * Test whether a value is a Promise via duck typing. + * @param {*} value + * @returns {boolean} Returns true when given value is an object + * having functions `then` and `catch`. + */ +function isPromise(value) { + return value && (typeof value.then === 'function') && (typeof value.catch === 'function'); +} + +// functions available externally +worker.methods = {}; + +/** + * Execute a function with provided arguments + * @param {String} fn Stringified function + * @param {Array} [args] Function arguments + * @returns {*} + */ +worker.methods.run = function run(fn, args) { + var f = new Function('return (' + fn + ').apply(null, arguments);'); + return f.apply(f, args); +}; + +/** + * Get a list with methods available on this worker + * @return {String[]} methods + */ +worker.methods.methods = function methods() { + return Object.keys(worker.methods); +}; + +var currentRequestId = null; + +worker.on('message', function (request) { + if (request === TERMINATE_METHOD_ID) { + return worker.exit(0); + } + try { + var method = worker.methods[request.method]; + + if (method) { + currentRequestId = request.id; + + // execute the function + var result = method.apply(method, request.params); + + if (isPromise(result)) { + // promise returned, resolve this and then return + result + .then(function (result) { + worker.send({ + id: request.id, + result: result, + error: null + }); + currentRequestId = null; + }) + .catch(function (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + currentRequestId = null; + }); + } + else { + // immediate result + worker.send({ + id: request.id, + result: result, + error: null + }); + + currentRequestId = null; + } + } + else { + throw new Error('Unknown method "' + request.method + '"'); + } + } + catch (err) { + worker.send({ + id: request.id, + result: null, + error: convertError(err) + }); + } +}); + +/** + * Register methods to the worker + * @param {Object} methods + */ +worker.register = function (methods) { + + if (methods) { + for (var name in methods) { + if (methods.hasOwnProperty(name)) { + worker.methods[name] = methods[name]; + } + } + } + + worker.send('ready'); + +}; + +worker.emit = function (payload) { + if (currentRequestId) { + worker.send({ + id: currentRequestId, + isEvent: true, + payload + }); + } +}; + +if (typeof exports !== 'undefined') { + exports.add = worker.register; + exports.emit = worker.emit; +} diff --git a/build/node_modules/wrap-ansi/index.js b/build/node_modules/wrap-ansi/index.js new file mode 100755 index 00000000..d502255b --- /dev/null +++ b/build/node_modules/wrap-ansi/index.js @@ -0,0 +1,216 @@ +'use strict'; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const ANSI_ESCAPE_BELL = '\u0007'; +const ANSI_CSI = '['; +const ANSI_OSC = ']'; +const ANSI_SGR_TERMINATOR = 'm'; +const ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`; + +const wrapAnsi = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`; +const wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let isInsideEscape = false; + let isInsideLinkEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } + + if (ESCAPES.has(character)) { + isInsideEscape = true; + isInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK); + } + + if (isInsideEscape) { + if (isInsideLinkEscape) { + if (character === ANSI_ESCAPE_BELL) { + isInsideEscape = false; + isInsideLinkEscape = false; + } + } else if (character === ANSI_SGR_TERMINATOR) { + isInsideEscape = false; + } + + continue; + } + + visible += characterLength; + + if (visible === columns && index < characters.length - 1) { + rows.push(''); + visible = 0; + } + } + + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case + if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { + rows[rows.length - 2] += rows.pop(); + } +}; + +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = string => { + const words = string.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return string; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode +// +// 'hard' will never allow a string to take up more than columns characters +// +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let returnValue = ''; + let escapeCode; + let escapeUrl; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimStart(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { + rows.push(''); + } + + wrapWord(rows, word, columns); + continue; + } + + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); + continue; + } + + rows.push(''); + } + + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + + rows[rows.length - 1] += word; + } + + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } + + const pre = [...rows.join('\n')]; + + for (const [index, character] of pre.entries()) { + returnValue += character; + + if (ESCAPES.has(character)) { + const {groups} = new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}}; + if (groups.code !== undefined) { + const code = Number.parseFloat(groups.code); + escapeCode = code === END_CODE ? undefined : code; + } else if (groups.uri !== undefined) { + escapeUrl = groups.uri.length === 0 ? undefined : groups.uri; + } + } + + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (pre[index + 1] === '\n') { + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(''); + } + + if (escapeCode && code) { + returnValue += wrapAnsi(code); + } + } else if (character === '\n') { + if (escapeCode && code) { + returnValue += wrapAnsi(escapeCode); + } + + if (escapeUrl) { + returnValue += wrapAnsiHyperlink(escapeUrl); + } + } + } + + return returnValue; +}; + +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .replace(/\r\n/g, '\n') + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); +}; diff --git a/build/node_modules/wrap-ansi/license b/build/node_modules/wrap-ansi/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/wrap-ansi/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/wrap-ansi/package.json b/build/node_modules/wrap-ansi/package.json new file mode 100644 index 00000000..2364004e --- /dev/null +++ b/build/node_modules/wrap-ansi/package.json @@ -0,0 +1,94 @@ +{ + "_from": "wrap-ansi@^7.0.0", + "_id": "wrap-ansi@7.0.0", + "_inBundle": false, + "_integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "_location": "/wrap-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "wrap-ansi@^7.0.0", + "name": "wrap-ansi", + "escapedName": "wrap-ansi", + "rawSpec": "^7.0.0", + "saveSpec": null, + "fetchSpec": "^7.0.0" + }, + "_requiredBy": [ + "/cliui" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "_shasum": "67e145cff510a6a6984bdf1152911d69d2eb9e43", + "_spec": "wrap-ansi@^7.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/cliui", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/wrap-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "deprecated": false, + "description": "Wordwrap a string with ANSI escape codes", + "devDependencies": { + "ava": "^2.1.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.3", + "has-ansi": "^4.0.0", + "nyc": "^15.0.1", + "xo": "^0.29.1" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js" + ], + "funding": "https://github.com/chalk/wrap-ansi?sponsor=1", + "homepage": "https://github.com/chalk/wrap-ansi#readme", + "keywords": [ + "wrap", + "break", + "wordwrap", + "wordbreak", + "linewrap", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "wrap-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/wrap-ansi.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "7.0.0" +} diff --git a/build/node_modules/wrap-ansi/readme.md b/build/node_modules/wrap-ansi/readme.md new file mode 100644 index 00000000..68779ba5 --- /dev/null +++ b/build/node_modules/wrap-ansi/readme.md @@ -0,0 +1,91 @@ +# wrap-ansi [![Build Status](https://travis-ci.com/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.com/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) + +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) + +## Install + +``` +$ npm install wrap-ansi +``` + +## Usage + +```js +const chalk = require('chalk'); +const wrapAnsi = require('wrap-ansi'); + +const input = 'The quick brown ' + chalk.red('fox jumped over ') + + 'the lazy ' + chalk.green('dog and then ran away with the unicorn.'); + +console.log(wrapAnsi(input, 20)); +``` + + + +## API + +### wrapAnsi(string, columns, options?) + +Wrap words to the specified column width. + +#### string + +Type: `string` + +String with ANSI escape codes. Like one styled by [`chalk`](https://github.com/chalk/chalk). Newline characters will be normalized to `\n`. + +#### columns + +Type: `number` + +Number of columns to wrap the text to. + +#### options + +Type: `object` + +##### hard + +Type: `boolean`\ +Default: `false` + +By default the wrap is soft, meaning long words may extend past the column width. Setting this to `true` will make it hard wrap at the column width. + +##### wordWrap + +Type: `boolean`\ +Default: `true` + +By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. + +##### trim + +Type: `boolean`\ +Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + +## Related + +- [slice-ansi](https://github.com/chalk/slice-ansi) - Slice a string with ANSI escape codes +- [cli-truncate](https://github.com/sindresorhus/cli-truncate) - Truncate a string to a specific width in the terminal +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right +- [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + +--- + +
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +
            diff --git a/build/node_modules/wrappy/package.json b/build/node_modules/wrappy/package.json index 12734eec..0b0f07aa 100644 --- a/build/node_modules/wrappy/package.json +++ b/build/node_modules/wrappy/package.json @@ -16,12 +16,14 @@ "fetchSpec": "1" }, "_requiredBy": [ + "/dezalgo", + "/inflight", "/once" ], - "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/wrappy/-/wrappy-1.0.2.tgz", "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", "_spec": "wrappy@1", - "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/once", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/dezalgo", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", diff --git a/build/node_modules/xtend/package.json b/build/node_modules/xtend/package.json index 160b9bfc..0a4a6cfb 100644 --- a/build/node_modules/xtend/package.json +++ b/build/node_modules/xtend/package.json @@ -18,7 +18,7 @@ "_requiredBy": [ "/level-filesystem" ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.2.0.tgz", "_shasum": "eef6b1f198c1c8deafad8b1765a04dad4a01c5a9", "_spec": "xtend@^2.2.0", "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/level-filesystem", diff --git a/build/node_modules/y18n/CHANGELOG.md b/build/node_modules/y18n/CHANGELOG.md new file mode 100644 index 00000000..244d8385 --- /dev/null +++ b/build/node_modules/y18n/CHANGELOG.md @@ -0,0 +1,100 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### [5.0.8](https://www.github.com/yargs/y18n/compare/v5.0.7...v5.0.8) (2021-04-07) + + +### Bug Fixes + +* **deno:** force modern release for Deno ([b1c215a](https://www.github.com/yargs/y18n/commit/b1c215aed714bee5830e76de3e335504dc2c4dab)) + +### [5.0.7](https://www.github.com/yargs/y18n/compare/v5.0.6...v5.0.7) (2021-04-07) + + +### Bug Fixes + +* **deno:** force release for deno ([#121](https://www.github.com/yargs/y18n/issues/121)) ([d3f2560](https://www.github.com/yargs/y18n/commit/d3f2560e6cedf2bfa2352e9eec044da53f9a06b2)) + +### [5.0.6](https://www.github.com/yargs/y18n/compare/v5.0.5...v5.0.6) (2021-04-05) + + +### Bug Fixes + +* **webpack:** skip readFileSync if not defined ([#117](https://www.github.com/yargs/y18n/issues/117)) ([6966fa9](https://www.github.com/yargs/y18n/commit/6966fa91d2881cc6a6c531e836099e01f4da1616)) + +### [5.0.5](https://www.github.com/yargs/y18n/compare/v5.0.4...v5.0.5) (2020-10-25) + + +### Bug Fixes + +* address prototype pollution issue ([#108](https://www.github.com/yargs/y18n/issues/108)) ([a9ac604](https://www.github.com/yargs/y18n/commit/a9ac604abf756dec9687be3843e2c93bfe581f25)) + +### [5.0.4](https://www.github.com/yargs/y18n/compare/v5.0.3...v5.0.4) (2020-10-16) + + +### Bug Fixes + +* **exports:** node 13.0 and 13.1 require the dotted object form _with_ a string fallback ([#105](https://www.github.com/yargs/y18n/issues/105)) ([4f85d80](https://www.github.com/yargs/y18n/commit/4f85d80dbaae6d2c7899ae394f7ad97805df4886)) + +### [5.0.3](https://www.github.com/yargs/y18n/compare/v5.0.2...v5.0.3) (2020-10-16) + + +### Bug Fixes + +* **exports:** node 13.0-13.6 require a string fallback ([#103](https://www.github.com/yargs/y18n/issues/103)) ([e39921e](https://www.github.com/yargs/y18n/commit/e39921e1017f88f5d8ea97ddea854ffe92d68e74)) + +### [5.0.2](https://www.github.com/yargs/y18n/compare/v5.0.1...v5.0.2) (2020-10-01) + + +### Bug Fixes + +* **deno:** update types for deno ^1.4.0 ([#100](https://www.github.com/yargs/y18n/issues/100)) ([3834d9a](https://www.github.com/yargs/y18n/commit/3834d9ab1332f2937c935ada5e76623290efae81)) + +### [5.0.1](https://www.github.com/yargs/y18n/compare/v5.0.0...v5.0.1) (2020-09-05) + + +### Bug Fixes + +* main had old index path ([#98](https://www.github.com/yargs/y18n/issues/98)) ([124f7b0](https://www.github.com/yargs/y18n/commit/124f7b047ba9596bdbdf64459988304e77f3de1b)) + +## [5.0.0](https://www.github.com/yargs/y18n/compare/v4.0.0...v5.0.0) (2020-09-05) + + +### ⚠ BREAKING CHANGES + +* exports maps are now used, which modifies import behavior. +* drops Node 6 and 4. begin following Node.js LTS schedule (#89) + +### Features + +* add support for ESM and Deno [#95](https://www.github.com/yargs/y18n/issues/95)) ([4d7ae94](https://www.github.com/yargs/y18n/commit/4d7ae94bcb42e84164e2180366474b1cd321ed94)) + + +### Build System + +* drops Node 6 and 4. begin following Node.js LTS schedule ([#89](https://www.github.com/yargs/y18n/issues/89)) ([3cc0c28](https://www.github.com/yargs/y18n/commit/3cc0c287240727b84eaf1927f903612ec80f5e43)) + +### 4.0.1 (2020-10-25) + + +### Bug Fixes + +* address prototype pollution issue ([#108](https://www.github.com/yargs/y18n/issues/108)) ([a9ac604](https://www.github.com/yargs/y18n/commit/7de58ca0d315990cdb38234e97fc66254cdbcd71)) + +## [4.0.0](https://github.com/yargs/y18n/compare/v3.2.1...v4.0.0) (2017-10-10) + + +### Bug Fixes + +* allow support for falsy values like 0 in tagged literal ([#45](https://github.com/yargs/y18n/issues/45)) ([c926123](https://github.com/yargs/y18n/commit/c926123)) + + +### Features + +* **__:** added tagged template literal support ([#44](https://github.com/yargs/y18n/issues/44)) ([0598daf](https://github.com/yargs/y18n/commit/0598daf)) + + +### BREAKING CHANGES + +* **__:** dropping Node 0.10/Node 0.12 support diff --git a/build/node_modules/y18n/LICENSE b/build/node_modules/y18n/LICENSE new file mode 100644 index 00000000..3c157f0b --- /dev/null +++ b/build/node_modules/y18n/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/build/node_modules/y18n/README.md b/build/node_modules/y18n/README.md new file mode 100644 index 00000000..5102bb17 --- /dev/null +++ b/build/node_modules/y18n/README.md @@ -0,0 +1,127 @@ +# y18n + +[![NPM version][npm-image]][npm-url] +[![js-standard-style][standard-image]][standard-url] +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) + +The bare-bones internationalization library used by yargs. + +Inspired by [i18n](https://www.npmjs.com/package/i18n). + +## Examples + +_simple string translation:_ + +```js +const __ = require('y18n')().__; + +console.log(__('my awesome string %s', 'foo')); +``` + +output: + +`my awesome string foo` + +_using tagged template literals_ + +```js +const __ = require('y18n')().__; + +const str = 'foo'; + +console.log(__`my awesome string ${str}`); +``` + +output: + +`my awesome string foo` + +_pluralization support:_ + +```js +const __n = require('y18n')().__n; + +console.log(__n('one fish %s', '%d fishes %s', 2, 'foo')); +``` + +output: + +`2 fishes foo` + +## Deno Example + +As of `v5` `y18n` supports [Deno](https://github.com/denoland/deno): + +```typescript +import y18n from "https://deno.land/x/y18n/deno.ts"; + +const __ = y18n({ + locale: 'pirate', + directory: './test/locales' +}).__ + +console.info(__`Hi, ${'Ben'} ${'Coe'}!`) +``` + +You will need to run with `--allow-read` to load alternative locales. + +## JSON Language Files + +The JSON language files should be stored in a `./locales` folder. +File names correspond to locales, e.g., `en.json`, `pirate.json`. + +When strings are observed for the first time they will be +added to the JSON file corresponding to the current locale. + +## Methods + +### require('y18n')(config) + +Create an instance of y18n with the config provided, options include: + +* `directory`: the locale directory, default `./locales`. +* `updateFiles`: should newly observed strings be updated in file, default `true`. +* `locale`: what locale should be used. +* `fallbackToLanguage`: should fallback to a language-only file (e.g. `en.json`) + be allowed if a file matching the locale does not exist (e.g. `en_US.json`), + default `true`. + +### y18n.\_\_(str, arg, arg, arg) + +Print a localized string, `%s` will be replaced with `arg`s. + +This function can also be used as a tag for a template literal. You can use it +like this: __`hello ${'world'}`. This will be equivalent to +`__('hello %s', 'world')`. + +### y18n.\_\_n(singularString, pluralString, count, arg, arg, arg) + +Print a localized string with appropriate pluralization. If `%d` is provided +in the string, the `count` will replace this placeholder. + +### y18n.setLocale(str) + +Set the current locale being used. + +### y18n.getLocale() + +What locale is currently being used? + +### y18n.updateLocale(obj) + +Update the current locale with the key value pairs in `obj`. + +## Supported Node.js Versions + +Libraries in this ecosystem make a best effort to track +[Node.js' release schedule](https://nodejs.org/en/about/releases/). Here's [a +post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a). + +## License + +ISC + +[npm-url]: https://npmjs.org/package/y18n +[npm-image]: https://img.shields.io/npm/v/y18n.svg +[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg +[standard-url]: https://github.com/feross/standard diff --git a/build/node_modules/y18n/build/index.cjs b/build/node_modules/y18n/build/index.cjs new file mode 100644 index 00000000..b2731e1a --- /dev/null +++ b/build/node_modules/y18n/build/index.cjs @@ -0,0 +1,203 @@ +'use strict'; + +var fs = require('fs'); +var util = require('util'); +var path = require('path'); + +let shim; +class Y18N { + constructor(opts) { + // configurable options. + opts = opts || {}; + this.directory = opts.directory || './locales'; + this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true; + this.locale = opts.locale || 'en'; + this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true; + // internal stuff. + this.cache = Object.create(null); + this.writeQueue = []; + } + __(...args) { + if (typeof arguments[0] !== 'string') { + return this._taggedLiteral(arguments[0], ...arguments); + } + const str = args.shift(); + let cb = function () { }; // start with noop. + if (typeof args[args.length - 1] === 'function') + cb = args.pop(); + cb = cb || function () { }; // noop. + if (!this.cache[this.locale]) + this._readLocaleFile(); + // we've observed a new string, update the language file. + if (!this.cache[this.locale][str] && this.updateFiles) { + this.cache[this.locale][str] = str; + // include the current directory and locale, + // since these values could change before the + // write is performed. + this._enqueueWrite({ + directory: this.directory, + locale: this.locale, + cb + }); + } + else { + cb(); + } + return shim.format.apply(shim.format, [this.cache[this.locale][str] || str].concat(args)); + } + __n() { + const args = Array.prototype.slice.call(arguments); + const singular = args.shift(); + const plural = args.shift(); + const quantity = args.shift(); + let cb = function () { }; // start with noop. + if (typeof args[args.length - 1] === 'function') + cb = args.pop(); + if (!this.cache[this.locale]) + this._readLocaleFile(); + let str = quantity === 1 ? singular : plural; + if (this.cache[this.locale][singular]) { + const entry = this.cache[this.locale][singular]; + str = entry[quantity === 1 ? 'one' : 'other']; + } + // we've observed a new string, update the language file. + if (!this.cache[this.locale][singular] && this.updateFiles) { + this.cache[this.locale][singular] = { + one: singular, + other: plural + }; + // include the current directory and locale, + // since these values could change before the + // write is performed. + this._enqueueWrite({ + directory: this.directory, + locale: this.locale, + cb + }); + } + else { + cb(); + } + // if a %d placeholder is provided, add quantity + // to the arguments expanded by util.format. + const values = [str]; + if (~str.indexOf('%d')) + values.push(quantity); + return shim.format.apply(shim.format, values.concat(args)); + } + setLocale(locale) { + this.locale = locale; + } + getLocale() { + return this.locale; + } + updateLocale(obj) { + if (!this.cache[this.locale]) + this._readLocaleFile(); + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + this.cache[this.locale][key] = obj[key]; + } + } + } + _taggedLiteral(parts, ...args) { + let str = ''; + parts.forEach(function (part, i) { + const arg = args[i + 1]; + str += part; + if (typeof arg !== 'undefined') { + str += '%s'; + } + }); + return this.__.apply(this, [str].concat([].slice.call(args, 1))); + } + _enqueueWrite(work) { + this.writeQueue.push(work); + if (this.writeQueue.length === 1) + this._processWriteQueue(); + } + _processWriteQueue() { + const _this = this; + const work = this.writeQueue[0]; + // destructure the enqueued work. + const directory = work.directory; + const locale = work.locale; + const cb = work.cb; + const languageFile = this._resolveLocaleFile(directory, locale); + const serializedLocale = JSON.stringify(this.cache[locale], null, 2); + shim.fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) { + _this.writeQueue.shift(); + if (_this.writeQueue.length > 0) + _this._processWriteQueue(); + cb(err); + }); + } + _readLocaleFile() { + let localeLookup = {}; + const languageFile = this._resolveLocaleFile(this.directory, this.locale); + try { + // When using a bundler such as webpack, readFileSync may not be defined: + if (shim.fs.readFileSync) { + localeLookup = JSON.parse(shim.fs.readFileSync(languageFile, 'utf-8')); + } + } + catch (err) { + if (err instanceof SyntaxError) { + err.message = 'syntax error in ' + languageFile; + } + if (err.code === 'ENOENT') + localeLookup = {}; + else + throw err; + } + this.cache[this.locale] = localeLookup; + } + _resolveLocaleFile(directory, locale) { + let file = shim.resolve(directory, './', locale + '.json'); + if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) { + // attempt fallback to language only + const languageFile = shim.resolve(directory, './', locale.split('_')[0] + '.json'); + if (this._fileExistsSync(languageFile)) + file = languageFile; + } + return file; + } + _fileExistsSync(file) { + return shim.exists(file); + } +} +function y18n$1(opts, _shim) { + shim = _shim; + const y18n = new Y18N(opts); + return { + __: y18n.__.bind(y18n), + __n: y18n.__n.bind(y18n), + setLocale: y18n.setLocale.bind(y18n), + getLocale: y18n.getLocale.bind(y18n), + updateLocale: y18n.updateLocale.bind(y18n), + locale: y18n.locale + }; +} + +var nodePlatformShim = { + fs: { + readFileSync: fs.readFileSync, + writeFile: fs.writeFile + }, + format: util.format, + resolve: path.resolve, + exists: (file) => { + try { + return fs.statSync(file).isFile(); + } + catch (err) { + return false; + } + } +}; + +const y18n = (opts) => { + return y18n$1(opts, nodePlatformShim); +}; + +module.exports = y18n; diff --git a/build/node_modules/y18n/build/lib/cjs.js b/build/node_modules/y18n/build/lib/cjs.js new file mode 100644 index 00000000..ff584709 --- /dev/null +++ b/build/node_modules/y18n/build/lib/cjs.js @@ -0,0 +1,6 @@ +import { y18n as _y18n } from './index.js'; +import nodePlatformShim from './platform-shims/node.js'; +const y18n = (opts) => { + return _y18n(opts, nodePlatformShim); +}; +export default y18n; diff --git a/build/node_modules/y18n/build/lib/index.js b/build/node_modules/y18n/build/lib/index.js new file mode 100644 index 00000000..e38f3359 --- /dev/null +++ b/build/node_modules/y18n/build/lib/index.js @@ -0,0 +1,174 @@ +let shim; +class Y18N { + constructor(opts) { + // configurable options. + opts = opts || {}; + this.directory = opts.directory || './locales'; + this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true; + this.locale = opts.locale || 'en'; + this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true; + // internal stuff. + this.cache = Object.create(null); + this.writeQueue = []; + } + __(...args) { + if (typeof arguments[0] !== 'string') { + return this._taggedLiteral(arguments[0], ...arguments); + } + const str = args.shift(); + let cb = function () { }; // start with noop. + if (typeof args[args.length - 1] === 'function') + cb = args.pop(); + cb = cb || function () { }; // noop. + if (!this.cache[this.locale]) + this._readLocaleFile(); + // we've observed a new string, update the language file. + if (!this.cache[this.locale][str] && this.updateFiles) { + this.cache[this.locale][str] = str; + // include the current directory and locale, + // since these values could change before the + // write is performed. + this._enqueueWrite({ + directory: this.directory, + locale: this.locale, + cb + }); + } + else { + cb(); + } + return shim.format.apply(shim.format, [this.cache[this.locale][str] || str].concat(args)); + } + __n() { + const args = Array.prototype.slice.call(arguments); + const singular = args.shift(); + const plural = args.shift(); + const quantity = args.shift(); + let cb = function () { }; // start with noop. + if (typeof args[args.length - 1] === 'function') + cb = args.pop(); + if (!this.cache[this.locale]) + this._readLocaleFile(); + let str = quantity === 1 ? singular : plural; + if (this.cache[this.locale][singular]) { + const entry = this.cache[this.locale][singular]; + str = entry[quantity === 1 ? 'one' : 'other']; + } + // we've observed a new string, update the language file. + if (!this.cache[this.locale][singular] && this.updateFiles) { + this.cache[this.locale][singular] = { + one: singular, + other: plural + }; + // include the current directory and locale, + // since these values could change before the + // write is performed. + this._enqueueWrite({ + directory: this.directory, + locale: this.locale, + cb + }); + } + else { + cb(); + } + // if a %d placeholder is provided, add quantity + // to the arguments expanded by util.format. + const values = [str]; + if (~str.indexOf('%d')) + values.push(quantity); + return shim.format.apply(shim.format, values.concat(args)); + } + setLocale(locale) { + this.locale = locale; + } + getLocale() { + return this.locale; + } + updateLocale(obj) { + if (!this.cache[this.locale]) + this._readLocaleFile(); + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + this.cache[this.locale][key] = obj[key]; + } + } + } + _taggedLiteral(parts, ...args) { + let str = ''; + parts.forEach(function (part, i) { + const arg = args[i + 1]; + str += part; + if (typeof arg !== 'undefined') { + str += '%s'; + } + }); + return this.__.apply(this, [str].concat([].slice.call(args, 1))); + } + _enqueueWrite(work) { + this.writeQueue.push(work); + if (this.writeQueue.length === 1) + this._processWriteQueue(); + } + _processWriteQueue() { + const _this = this; + const work = this.writeQueue[0]; + // destructure the enqueued work. + const directory = work.directory; + const locale = work.locale; + const cb = work.cb; + const languageFile = this._resolveLocaleFile(directory, locale); + const serializedLocale = JSON.stringify(this.cache[locale], null, 2); + shim.fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) { + _this.writeQueue.shift(); + if (_this.writeQueue.length > 0) + _this._processWriteQueue(); + cb(err); + }); + } + _readLocaleFile() { + let localeLookup = {}; + const languageFile = this._resolveLocaleFile(this.directory, this.locale); + try { + // When using a bundler such as webpack, readFileSync may not be defined: + if (shim.fs.readFileSync) { + localeLookup = JSON.parse(shim.fs.readFileSync(languageFile, 'utf-8')); + } + } + catch (err) { + if (err instanceof SyntaxError) { + err.message = 'syntax error in ' + languageFile; + } + if (err.code === 'ENOENT') + localeLookup = {}; + else + throw err; + } + this.cache[this.locale] = localeLookup; + } + _resolveLocaleFile(directory, locale) { + let file = shim.resolve(directory, './', locale + '.json'); + if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) { + // attempt fallback to language only + const languageFile = shim.resolve(directory, './', locale.split('_')[0] + '.json'); + if (this._fileExistsSync(languageFile)) + file = languageFile; + } + return file; + } + _fileExistsSync(file) { + return shim.exists(file); + } +} +export function y18n(opts, _shim) { + shim = _shim; + const y18n = new Y18N(opts); + return { + __: y18n.__.bind(y18n), + __n: y18n.__n.bind(y18n), + setLocale: y18n.setLocale.bind(y18n), + getLocale: y18n.getLocale.bind(y18n), + updateLocale: y18n.updateLocale.bind(y18n), + locale: y18n.locale + }; +} diff --git a/build/node_modules/y18n/build/lib/platform-shims/node.js b/build/node_modules/y18n/build/lib/platform-shims/node.js new file mode 100644 index 00000000..181208b8 --- /dev/null +++ b/build/node_modules/y18n/build/lib/platform-shims/node.js @@ -0,0 +1,19 @@ +import { readFileSync, statSync, writeFile } from 'fs'; +import { format } from 'util'; +import { resolve } from 'path'; +export default { + fs: { + readFileSync, + writeFile + }, + format, + resolve, + exists: (file) => { + try { + return statSync(file).isFile(); + } + catch (err) { + return false; + } + } +}; diff --git a/build/node_modules/y18n/index.mjs b/build/node_modules/y18n/index.mjs new file mode 100644 index 00000000..46c82133 --- /dev/null +++ b/build/node_modules/y18n/index.mjs @@ -0,0 +1,8 @@ +import shim from './build/lib/platform-shims/node.js' +import { y18n as _y18n } from './build/lib/index.js' + +const y18n = (opts) => { + return _y18n(opts, shim) +} + +export default y18n diff --git a/build/node_modules/y18n/package.json b/build/node_modules/y18n/package.json new file mode 100644 index 00000000..add86cbf --- /dev/null +++ b/build/node_modules/y18n/package.json @@ -0,0 +1,101 @@ +{ + "_from": "y18n@^5.0.5", + "_id": "y18n@5.0.8", + "_inBundle": false, + "_integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "_location": "/y18n", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "y18n@^5.0.5", + "name": "y18n", + "escapedName": "y18n", + "rawSpec": "^5.0.5", + "saveSpec": null, + "fetchSpec": "^5.0.5" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/y18n/-/y18n-5.0.8.tgz", + "_shasum": "7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55", + "_spec": "y18n@^5.0.5", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/yargs", + "author": { + "name": "Ben Coe", + "email": "bencoe@gmail.com" + }, + "bugs": { + "url": "https://github.com/yargs/y18n/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "the bare-bones internationalization library used by yargs", + "devDependencies": { + "@types/node": "^14.6.4", + "@wessberg/rollup-plugin-ts": "^1.3.1", + "c8": "^7.3.0", + "chai": "^4.0.1", + "cross-env": "^7.0.2", + "gts": "^3.0.0", + "mocha": "^8.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.26.10", + "standardx": "^7.0.0", + "ts-transform-default-export": "^1.0.2", + "typescript": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "exports": { + ".": [ + { + "import": "./index.mjs", + "require": "./build/index.cjs" + }, + "./build/index.cjs" + ] + }, + "files": [ + "build", + "index.mjs", + "!*.d.ts" + ], + "homepage": "https://github.com/yargs/y18n", + "keywords": [ + "i18n", + "internationalization", + "yargs" + ], + "license": "ISC", + "main": "./build/index.cjs", + "module": "./build/lib/index.js", + "name": "y18n", + "repository": { + "type": "git", + "url": "git+https://github.com/yargs/y18n.git" + }, + "scripts": { + "build:cjs": "rollup -c", + "check": "standardx **/*.ts **/*.cjs **/*.mjs", + "compile": "tsc", + "coverage": "c8 report --check-coverage", + "fix": "standardx --fix **/*.ts **/*.cjs **/*.mjs", + "postcompile": "npm run build:cjs", + "posttest": "npm run check", + "precompile": "rimraf build", + "prepare": "npm run compile", + "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "test": "c8 --reporter=text --reporter=html mocha test/*.cjs", + "test:esm": "c8 --reporter=text --reporter=html mocha test/esm/*.mjs" + }, + "standardx": { + "ignore": [ + "build" + ] + }, + "type": "module", + "version": "5.0.8" +} diff --git a/build/node_modules/yallist/LICENSE b/build/node_modules/yallist/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/build/node_modules/yallist/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/yallist/README.md b/build/node_modules/yallist/README.md new file mode 100644 index 00000000..f5861018 --- /dev/null +++ b/build/node_modules/yallist/README.md @@ -0,0 +1,204 @@ +# yallist + +Yet Another Linked List + +There are many doubly-linked list implementations like it, but this +one is mine. + +For when an array would be too big, and a Map can't be iterated in +reverse order. + + +[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist) + +## basic usage + +```javascript +var yallist = require('yallist') +var myList = yallist.create([1, 2, 3]) +myList.push('foo') +myList.unshift('bar') +// of course pop() and shift() are there, too +console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] +myList.forEach(function (k) { + // walk the list head to tail +}) +myList.forEachReverse(function (k, index, list) { + // walk the list tail to head +}) +var myDoubledList = myList.map(function (k) { + return k + k +}) +// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] +// mapReverse is also a thing +var myDoubledListReverse = myList.mapReverse(function (k) { + return k + k +}) // ['foofoo', 6, 4, 2, 'barbar'] + +var reduced = myList.reduce(function (set, entry) { + set += entry + return set +}, 'start') +console.log(reduced) // 'startfoo123bar' +``` + +## api + +The whole API is considered "public". + +Functions with the same name as an Array method work more or less the +same way. + +There's reverse versions of most things because that's the point. + +### Yallist + +Default export, the class that holds and manages a list. + +Call it with either a forEach-able (like an array) or a set of +arguments, to initialize the list. + +The Array-ish methods all act like you'd expect. No magic length, +though, so if you change that it won't automatically prune or add +empty spots. + +### Yallist.create(..) + +Alias for Yallist function. Some people like factories. + +#### yallist.head + +The first node in the list + +#### yallist.tail + +The last node in the list + +#### yallist.length + +The number of nodes in the list. (Change this at your peril. It is +not magic like Array length.) + +#### yallist.toArray() + +Convert the list to an array. + +#### yallist.forEach(fn, [thisp]) + +Call a function on each item in the list. + +#### yallist.forEachReverse(fn, [thisp]) + +Call a function on each item in the list, in reverse order. + +#### yallist.get(n) + +Get the data at position `n` in the list. If you use this a lot, +probably better off just using an Array. + +#### yallist.getReverse(n) + +Get the data at position `n`, counting from the tail. + +#### yallist.map(fn, thisp) + +Create a new Yallist with the result of calling the function on each +item. + +#### yallist.mapReverse(fn, thisp) + +Same as `map`, but in reverse. + +#### yallist.pop() + +Get the data from the list tail, and remove the tail from the list. + +#### yallist.push(item, ...) + +Insert one or more items to the tail of the list. + +#### yallist.reduce(fn, initialValue) + +Like Array.reduce. + +#### yallist.reduceReverse + +Like Array.reduce, but in reverse. + +#### yallist.reverse + +Reverse the list in place. + +#### yallist.shift() + +Get the data from the list head, and remove the head from the list. + +#### yallist.slice([from], [to]) + +Just like Array.slice, but returns a new Yallist. + +#### yallist.sliceReverse([from], [to]) + +Just like yallist.slice, but the result is returned in reverse. + +#### yallist.toArray() + +Create an array representation of the list. + +#### yallist.toArrayReverse() + +Create a reversed array representation of the list. + +#### yallist.unshift(item, ...) + +Insert one or more items to the head of the list. + +#### yallist.unshiftNode(node) + +Move a Node object to the front of the list. (That is, pull it out of +wherever it lives, and make it the new head.) + +If the node belongs to a different list, then that list will remove it +first. + +#### yallist.pushNode(node) + +Move a Node object to the end of the list. (That is, pull it out of +wherever it lives, and make it the new tail.) + +If the node belongs to a list already, then that list will remove it +first. + +#### yallist.removeNode(node) + +Remove a node from the list, preserving referential integrity of head +and tail and other nodes. + +Will throw an error if you try to have a list remove a node that +doesn't belong to it. + +### Yallist.Node + +The class that holds the data and is actually the list. + +Call with `var n = new Node(value, previousNode, nextNode)` + +Note that if you do direct operations on Nodes themselves, it's very +easy to get into weird states where the list is broken. Be careful :) + +#### node.next + +The next node in the list. + +#### node.prev + +The previous node in the list. + +#### node.value + +The data the node contains. + +#### node.list + +The list to which this node belongs. (Null if it does not belong to +any list.) diff --git a/build/node_modules/yallist/iterator.js b/build/node_modules/yallist/iterator.js new file mode 100644 index 00000000..d41c97a1 --- /dev/null +++ b/build/node_modules/yallist/iterator.js @@ -0,0 +1,8 @@ +'use strict' +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} diff --git a/build/node_modules/yallist/package.json b/build/node_modules/yallist/package.json new file mode 100644 index 00000000..804d019d --- /dev/null +++ b/build/node_modules/yallist/package.json @@ -0,0 +1,62 @@ +{ + "_from": "yallist@^4.0.0", + "_id": "yallist@4.0.0", + "_inBundle": false, + "_integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "_location": "/yallist", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yallist@^4.0.0", + "name": "yallist", + "escapedName": "yallist", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/lru-cache" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yallist/-/yallist-4.0.0.tgz", + "_shasum": "9bb92790d9c0effec63be73519e11a35019a3a72", + "_spec": "yallist@^4.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/lru-cache", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/yallist/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Yet Another Linked List", + "devDependencies": { + "tap": "^12.1.0" + }, + "directories": { + "test": "test" + }, + "files": [ + "yallist.js", + "iterator.js" + ], + "homepage": "https://github.com/isaacs/yallist#readme", + "license": "ISC", + "main": "yallist.js", + "name": "yallist", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/yallist.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "4.0.0" +} diff --git a/build/node_modules/yallist/yallist.js b/build/node_modules/yallist/yallist.js new file mode 100644 index 00000000..4e83ab1c --- /dev/null +++ b/build/node_modules/yallist/yallist.js @@ -0,0 +1,426 @@ +'use strict' +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } + + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + require('./iterator.js')(Yallist) +} catch (er) {} diff --git a/build/node_modules/yargs-parser/CHANGELOG.md b/build/node_modules/yargs-parser/CHANGELOG.md new file mode 100644 index 00000000..c85e4d84 --- /dev/null +++ b/build/node_modules/yargs-parser/CHANGELOG.md @@ -0,0 +1,226 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### [20.2.4](https://www.github.com/yargs/yargs-parser/compare/v20.2.3...v20.2.4) (2020-11-09) + + +### Bug Fixes + +* **deno:** address import issues in Deno ([#339](https://www.github.com/yargs/yargs-parser/issues/339)) ([3b54e5e](https://www.github.com/yargs/yargs-parser/commit/3b54e5eef6e9a7b7c6eec7c12bab3ba3b8ba8306)) + +### [20.2.3](https://www.github.com/yargs/yargs-parser/compare/v20.2.2...v20.2.3) (2020-10-16) + + +### Bug Fixes + +* **exports:** node 13.0 and 13.1 require the dotted object form _with_ a string fallback ([#336](https://www.github.com/yargs/yargs-parser/issues/336)) ([3ae7242](https://www.github.com/yargs/yargs-parser/commit/3ae7242040ff876d28dabded60ac226e00150c88)) + +### [20.2.2](https://www.github.com/yargs/yargs-parser/compare/v20.2.1...v20.2.2) (2020-10-14) + + +### Bug Fixes + +* **exports:** node 13.0-13.6 require a string fallback ([#333](https://www.github.com/yargs/yargs-parser/issues/333)) ([291aeda](https://www.github.com/yargs/yargs-parser/commit/291aeda06b685b7a015d83bdf2558e180b37388d)) + +### [20.2.1](https://www.github.com/yargs/yargs-parser/compare/v20.2.0...v20.2.1) (2020-10-01) + + +### Bug Fixes + +* **deno:** update types for deno ^1.4.0 ([#330](https://www.github.com/yargs/yargs-parser/issues/330)) ([0ab92e5](https://www.github.com/yargs/yargs-parser/commit/0ab92e50b090f11196334c048c9c92cecaddaf56)) + +## [20.2.0](https://www.github.com/yargs/yargs-parser/compare/v20.1.0...v20.2.0) (2020-09-21) + + +### Features + +* **string-utils:** export looksLikeNumber helper ([#324](https://www.github.com/yargs/yargs-parser/issues/324)) ([c8580a2](https://www.github.com/yargs/yargs-parser/commit/c8580a2327b55f6342acecb6e72b62963d506750)) + + +### Bug Fixes + +* **unknown-options-as-args:** convert positionals that look like numbers ([#326](https://www.github.com/yargs/yargs-parser/issues/326)) ([f85ebb4](https://www.github.com/yargs/yargs-parser/commit/f85ebb4face9d4b0f56147659404cbe0002f3dad)) + +## [20.1.0](https://www.github.com/yargs/yargs-parser/compare/v20.0.0...v20.1.0) (2020-09-20) + + +### Features + +* adds parse-positional-numbers configuration ([#321](https://www.github.com/yargs/yargs-parser/issues/321)) ([9cec00a](https://www.github.com/yargs/yargs-parser/commit/9cec00a622251292ffb7dce6f78f5353afaa0d4c)) + + +### Bug Fixes + +* **build:** update release-please; make labels kick off builds ([#323](https://www.github.com/yargs/yargs-parser/issues/323)) ([09f448b](https://www.github.com/yargs/yargs-parser/commit/09f448b4cd66e25d2872544718df46dab8af062a)) + +## [20.0.0](https://www.github.com/yargs/yargs-parser/compare/v19.0.4...v20.0.0) (2020-09-09) + + +### ⚠ BREAKING CHANGES + +* do not ship type definitions (#318) + +### Bug Fixes + +* only strip camel case if hyphenated ([#316](https://www.github.com/yargs/yargs-parser/issues/316)) ([95a9e78](https://www.github.com/yargs/yargs-parser/commit/95a9e785127b9bbf2d1db1f1f808ca1fb100e82a)), closes [#315](https://www.github.com/yargs/yargs-parser/issues/315) + + +### Code Refactoring + +* do not ship type definitions ([#318](https://www.github.com/yargs/yargs-parser/issues/318)) ([8fbd56f](https://www.github.com/yargs/yargs-parser/commit/8fbd56f1d0b6c44c30fca62708812151ca0ce330)) + +### [19.0.4](https://www.github.com/yargs/yargs-parser/compare/v19.0.3...v19.0.4) (2020-08-27) + + +### Bug Fixes + +* **build:** fixing publication ([#310](https://www.github.com/yargs/yargs-parser/issues/310)) ([5d3c6c2](https://www.github.com/yargs/yargs-parser/commit/5d3c6c29a9126248ba601920d9cf87c78e161ff5)) + +### [19.0.3](https://www.github.com/yargs/yargs-parser/compare/v19.0.2...v19.0.3) (2020-08-27) + + +### Bug Fixes + +* **build:** switch to action for publish ([#308](https://www.github.com/yargs/yargs-parser/issues/308)) ([5c2f305](https://www.github.com/yargs/yargs-parser/commit/5c2f30585342bcd8aaf926407c863099d256d174)) + +### [19.0.2](https://www.github.com/yargs/yargs-parser/compare/v19.0.1...v19.0.2) (2020-08-27) + + +### Bug Fixes + +* **types:** envPrefix should be optional ([#305](https://www.github.com/yargs/yargs-parser/issues/305)) ([ae3f180](https://www.github.com/yargs/yargs-parser/commit/ae3f180e14df2de2fd962145f4518f9aa0e76523)) + +### [19.0.1](https://www.github.com/yargs/yargs-parser/compare/v19.0.0...v19.0.1) (2020-08-09) + + +### Bug Fixes + +* **build:** push tag created for deno ([2186a14](https://www.github.com/yargs/yargs-parser/commit/2186a14989749887d56189867602e39e6679f8b0)) + +## [19.0.0](https://www.github.com/yargs/yargs-parser/compare/v18.1.3...v19.0.0) (2020-08-09) + + +### ⚠ BREAKING CHANGES + +* adds support for ESM and Deno (#295) +* **ts:** projects using `@types/yargs-parser` may see variations in type definitions. +* drops Node 6. begin following Node.js LTS schedule (#278) + +### Features + +* adds support for ESM and Deno ([#295](https://www.github.com/yargs/yargs-parser/issues/295)) ([195bc4a](https://www.github.com/yargs/yargs-parser/commit/195bc4a7f20c2a8f8e33fbb6ba96ef6e9a0120a1)) +* expose camelCase and decamelize helpers ([#296](https://www.github.com/yargs/yargs-parser/issues/296)) ([39154ce](https://www.github.com/yargs/yargs-parser/commit/39154ceb5bdcf76b5f59a9219b34cedb79b67f26)) +* **deps:** update to latest camelcase/decamelize ([#281](https://www.github.com/yargs/yargs-parser/issues/281)) ([8931ab0](https://www.github.com/yargs/yargs-parser/commit/8931ab08f686cc55286f33a95a83537da2be5516)) + + +### Bug Fixes + +* boolean numeric short option ([#294](https://www.github.com/yargs/yargs-parser/issues/294)) ([f600082](https://www.github.com/yargs/yargs-parser/commit/f600082c959e092076caf420bbbc9d7a231e2418)) +* raise permission error for Deno if config load fails ([#298](https://www.github.com/yargs/yargs-parser/issues/298)) ([1174e2b](https://www.github.com/yargs/yargs-parser/commit/1174e2b3f0c845a1cd64e14ffc3703e730567a84)) +* **deps:** update dependency decamelize to v3 ([#274](https://www.github.com/yargs/yargs-parser/issues/274)) ([4d98698](https://www.github.com/yargs/yargs-parser/commit/4d98698bc6767e84ec54a0842908191739be73b7)) +* **types:** switch back to using Partial types ([#293](https://www.github.com/yargs/yargs-parser/issues/293)) ([bdc80ba](https://www.github.com/yargs/yargs-parser/commit/bdc80ba59fa13bc3025ce0a85e8bad9f9da24ea7)) + + +### Build System + +* drops Node 6. begin following Node.js LTS schedule ([#278](https://www.github.com/yargs/yargs-parser/issues/278)) ([9014ed7](https://www.github.com/yargs/yargs-parser/commit/9014ed722a32768b96b829e65a31705db5c1458a)) + + +### Code Refactoring + +* **ts:** move index.js to TypeScript ([#292](https://www.github.com/yargs/yargs-parser/issues/292)) ([f78d2b9](https://www.github.com/yargs/yargs-parser/commit/f78d2b97567ac4828624406e420b4047c710b789)) + +### [18.1.3](https://www.github.com/yargs/yargs-parser/compare/v18.1.2...v18.1.3) (2020-04-16) + + +### Bug Fixes + +* **setArg:** options using camel-case and dot-notation populated twice ([#268](https://www.github.com/yargs/yargs-parser/issues/268)) ([f7e15b9](https://www.github.com/yargs/yargs-parser/commit/f7e15b9800900b9856acac1a830a5f35847be73e)) + +### [18.1.2](https://www.github.com/yargs/yargs-parser/compare/v18.1.1...v18.1.2) (2020-03-26) + + +### Bug Fixes + +* **array, nargs:** support -o=--value and --option=--value format ([#262](https://www.github.com/yargs/yargs-parser/issues/262)) ([41d3f81](https://www.github.com/yargs/yargs-parser/commit/41d3f8139e116706b28de9b0de3433feb08d2f13)) + +### [18.1.1](https://www.github.com/yargs/yargs-parser/compare/v18.1.0...v18.1.1) (2020-03-16) + + +### Bug Fixes + +* \_\_proto\_\_ will now be replaced with \_\_\_proto\_\_\_ in parse ([#258](https://www.github.com/yargs/yargs-parser/issues/258)), patching a potential +prototype pollution vulnerability. This was reported by the Snyk Security Research Team.([63810ca](https://www.github.com/yargs/yargs-parser/commit/63810ca1ae1a24b08293a4d971e70e058c7a41e2)) + +## [18.1.0](https://www.github.com/yargs/yargs-parser/compare/v18.0.0...v18.1.0) (2020-03-07) + + +### Features + +* introduce single-digit boolean aliases ([#255](https://www.github.com/yargs/yargs-parser/issues/255)) ([9c60265](https://www.github.com/yargs/yargs-parser/commit/9c60265fd7a03cb98e6df3e32c8c5e7508d9f56f)) + +## [18.0.0](https://www.github.com/yargs/yargs-parser/compare/v17.1.0...v18.0.0) (2020-03-02) + + +### ⚠ BREAKING CHANGES + +* the narg count is now enforced when parsing arrays. + +### Features + +* NaN can now be provided as a value for nargs, indicating "at least" one value is expected for array ([#251](https://www.github.com/yargs/yargs-parser/issues/251)) ([9db4be8](https://www.github.com/yargs/yargs-parser/commit/9db4be81417a2c7097128db34d86fe70ef4af70c)) + +## [17.1.0](https://www.github.com/yargs/yargs-parser/compare/v17.0.1...v17.1.0) (2020-03-01) + + +### Features + +* introduce greedy-arrays config, for specifying whether arrays consume multiple positionals ([#249](https://www.github.com/yargs/yargs-parser/issues/249)) ([60e880a](https://www.github.com/yargs/yargs-parser/commit/60e880a837046314d89fa4725f923837fd33a9eb)) + +### [17.0.1](https://www.github.com/yargs/yargs-parser/compare/v17.0.0...v17.0.1) (2020-02-29) + + +### Bug Fixes + +* normalized keys were not enumerable ([#247](https://www.github.com/yargs/yargs-parser/issues/247)) ([57119f9](https://www.github.com/yargs/yargs-parser/commit/57119f9f17cf27499bd95e61c2f72d18314f11ba)) + +## [17.0.0](https://www.github.com/yargs/yargs-parser/compare/v16.1.0...v17.0.0) (2020-02-10) + + +### ⚠ BREAKING CHANGES + +* this reverts parsing behavior of booleans to that of yargs@14 +* objects used during parsing are now created with a null +prototype. There may be some scenarios where this change in behavior +leaks externally. + +### Features + +* boolean arguments will not be collected into an implicit array ([#236](https://www.github.com/yargs/yargs-parser/issues/236)) ([34c4e19](https://www.github.com/yargs/yargs-parser/commit/34c4e19bae4e7af63e3cb6fa654a97ed476e5eb5)) +* introduce nargs-eats-options config option ([#246](https://www.github.com/yargs/yargs-parser/issues/246)) ([d50822a](https://www.github.com/yargs/yargs-parser/commit/d50822ac10e1b05f2e9643671ca131ac251b6732)) + + +### Bug Fixes + +* address bugs with "uknown-options-as-args" ([bc023e3](https://www.github.com/yargs/yargs-parser/commit/bc023e3b13e20a118353f9507d1c999bf388a346)) +* array should take precedence over nargs, but enforce nargs ([#243](https://www.github.com/yargs/yargs-parser/issues/243)) ([4cbc188](https://www.github.com/yargs/yargs-parser/commit/4cbc188b7abb2249529a19c090338debdad2fe6c)) +* support keys that collide with object prototypes ([#234](https://www.github.com/yargs/yargs-parser/issues/234)) ([1587b6d](https://www.github.com/yargs/yargs-parser/commit/1587b6d91db853a9109f1be6b209077993fee4de)) +* unknown options terminated with digits now handled by unknown-options-as-args ([#238](https://www.github.com/yargs/yargs-parser/issues/238)) ([d36cdfa](https://www.github.com/yargs/yargs-parser/commit/d36cdfa854254d7c7e0fe1d583818332ac46c2a5)) + +## [16.1.0](https://www.github.com/yargs/yargs-parser/compare/v16.0.0...v16.1.0) (2019-11-01) + + +### ⚠ BREAKING CHANGES + +* populate error if incompatible narg/count or array/count options are used (#191) + +### Features + +* options that have had their default value used are now tracked ([#211](https://www.github.com/yargs/yargs-parser/issues/211)) ([a525234](https://www.github.com/yargs/yargs-parser/commit/a525234558c847deedd73f8792e0a3b77b26e2c0)) +* populate error if incompatible narg/count or array/count options are used ([#191](https://www.github.com/yargs/yargs-parser/issues/191)) ([84a401f](https://www.github.com/yargs/yargs-parser/commit/84a401f0fa3095e0a19661670d1570d0c3b9d3c9)) + + +### Reverts + +* revert 16.0.0 CHANGELOG entry ([920320a](https://www.github.com/yargs/yargs-parser/commit/920320ad9861bbfd58eda39221ae211540fc1daf)) diff --git a/build/node_modules/yargs-parser/LICENSE.txt b/build/node_modules/yargs-parser/LICENSE.txt new file mode 100644 index 00000000..836440be --- /dev/null +++ b/build/node_modules/yargs-parser/LICENSE.txt @@ -0,0 +1,14 @@ +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/build/node_modules/yargs-parser/README.md b/build/node_modules/yargs-parser/README.md new file mode 100644 index 00000000..fbb8927a --- /dev/null +++ b/build/node_modules/yargs-parser/README.md @@ -0,0 +1,518 @@ +# yargs-parser + +![ci](https://github.com/yargs/yargs-parser/workflows/ci/badge.svg) +[![NPM version](https://img.shields.io/npm/v/yargs-parser.svg)](https://www.npmjs.com/package/yargs-parser) +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +![nycrc config on GitHub](https://img.shields.io/nycrc/yargs/yargs-parser) + +The mighty option parser used by [yargs](https://github.com/yargs/yargs). + +visit the [yargs website](http://yargs.js.org/) for more examples, and thorough usage instructions. + + + +## Example + +```sh +npm i yargs-parser --save +``` + +```js +const argv = require('yargs-parser')(process.argv.slice(2)) +console.log(argv) +``` + +```sh +node example.js --foo=33 --bar hello +{ _: [], foo: 33, bar: 'hello' } +``` + +_or parse a string!_ + +```js +const argv = require('yargs-parser')('--foo=99 --bar=33') +console.log(argv) +``` + +```sh +{ _: [], foo: 99, bar: 33 } +``` + +Convert an array of mixed types before passing to `yargs-parser`: + +```js +const parse = require('yargs-parser') +parse(['-f', 11, '--zoom', 55].join(' ')) // <-- array to string +parse(['-f', 11, '--zoom', 55].map(String)) // <-- array of strings +``` + +## Deno Example + +As of `v19` `yargs-parser` supports [Deno](https://github.com/denoland/deno): + +```typescript +import parser from "https://deno.land/x/yargs_parser/deno.ts"; + +const argv = parser('--foo=99 --bar=9987930', { + string: ['bar'] +}) +console.log(argv) +``` + +## ESM Example + +As of `v19` `yargs-parser` supports ESM (_both in Node.js and in the browser_): + +**Node.js:** + +```js +import parser from 'yargs-parser' + +const argv = parser('--foo=99 --bar=9987930', { + string: ['bar'] +}) +console.log(argv) +``` + +**Browsers:** + +```html + + + + +``` + +## API + +### parser(args, opts={}) + +Parses command line arguments returning a simple mapping of keys and values. + +**expects:** + +* `args`: a string or array of strings representing the options to parse. +* `opts`: provide a set of hints indicating how `args` should be parsed: + * `opts.alias`: an object representing the set of aliases for a key: `{alias: {foo: ['f']}}`. + * `opts.array`: indicate that keys should be parsed as an array: `{array: ['foo', 'bar']}`.
            + Indicate that keys should be parsed as an array and coerced to booleans / numbers:
            + `{array: [{ key: 'foo', boolean: true }, {key: 'bar', number: true}]}`. + * `opts.boolean`: arguments should be parsed as booleans: `{boolean: ['x', 'y']}`. + * `opts.coerce`: provide a custom synchronous function that returns a coerced value from the argument provided + (or throws an error). For arrays the function is called only once for the entire array:
            + `{coerce: {foo: function (arg) {return modifiedArg}}}`. + * `opts.config`: indicate a key that represents a path to a configuration file (this file will be loaded and parsed). + * `opts.configObjects`: configuration objects to parse, their properties will be set as arguments:
            + `{configObjects: [{'x': 5, 'y': 33}, {'z': 44}]}`. + * `opts.configuration`: provide configuration options to the yargs-parser (see: [configuration](#configuration)). + * `opts.count`: indicate a key that should be used as a counter, e.g., `-vvv` = `{v: 3}`. + * `opts.default`: provide default values for keys: `{default: {x: 33, y: 'hello world!'}}`. + * `opts.envPrefix`: environment variables (`process.env`) with the prefix provided should be parsed. + * `opts.narg`: specify that a key requires `n` arguments: `{narg: {x: 2}}`. + * `opts.normalize`: `path.normalize()` will be applied to values set to this key. + * `opts.number`: keys should be treated as numbers. + * `opts.string`: keys should be treated as strings (even if they resemble a number `-x 33`). + +**returns:** + +* `obj`: an object representing the parsed value of `args` + * `key/value`: key value pairs for each argument and their aliases. + * `_`: an array representing the positional arguments. + * [optional] `--`: an array with arguments after the end-of-options flag `--`. + +### require('yargs-parser').detailed(args, opts={}) + +Parses a command line string, returning detailed information required by the +yargs engine. + +**expects:** + +* `args`: a string or array of strings representing options to parse. +* `opts`: provide a set of hints indicating how `args`, inputs are identical to `require('yargs-parser')(args, opts={})`. + +**returns:** + +* `argv`: an object representing the parsed value of `args` + * `key/value`: key value pairs for each argument and their aliases. + * `_`: an array representing the positional arguments. + * [optional] `--`: an array with arguments after the end-of-options flag `--`. +* `error`: populated with an error object if an exception occurred during parsing. +* `aliases`: the inferred list of aliases built by combining lists in `opts.alias`. +* `newAliases`: any new aliases added via camel-case expansion: + * `boolean`: `{ fooBar: true }` +* `defaulted`: any new argument created by `opts.default`, no aliases included. + * `boolean`: `{ foo: true }` +* `configuration`: given by default settings and `opts.configuration`. + + + +### Configuration + +The yargs-parser applies several automated transformations on the keys provided +in `args`. These features can be turned on and off using the `configuration` field +of `opts`. + +```js +var parsed = parser(['--no-dice'], { + configuration: { + 'boolean-negation': false + } +}) +``` + +### short option groups + +* default: `true`. +* key: `short-option-groups`. + +Should a group of short-options be treated as boolean flags? + +```sh +node example.js -abc +{ _: [], a: true, b: true, c: true } +``` + +_if disabled:_ + +```sh +node example.js -abc +{ _: [], abc: true } +``` + +### camel-case expansion + +* default: `true`. +* key: `camel-case-expansion`. + +Should hyphenated arguments be expanded into camel-case aliases? + +```sh +node example.js --foo-bar +{ _: [], 'foo-bar': true, fooBar: true } +``` + +_if disabled:_ + +```sh +node example.js --foo-bar +{ _: [], 'foo-bar': true } +``` + +### dot-notation + +* default: `true` +* key: `dot-notation` + +Should keys that contain `.` be treated as objects? + +```sh +node example.js --foo.bar +{ _: [], foo: { bar: true } } +``` + +_if disabled:_ + +```sh +node example.js --foo.bar +{ _: [], "foo.bar": true } +``` + +### parse numbers + +* default: `true` +* key: `parse-numbers` + +Should keys that look like numbers be treated as such? + +```sh +node example.js --foo=99.3 +{ _: [], foo: 99.3 } +``` + +_if disabled:_ + +```sh +node example.js --foo=99.3 +{ _: [], foo: "99.3" } +``` + +### parse positional numbers + +* default: `true` +* key: `parse-positional-numbers` + +Should positional keys that look like numbers be treated as such. + +```sh +node example.js 99.3 +{ _: [99] } +``` + +_if disabled:_ + +```sh +node example.js 99.3 +{ _: ['99.3'] } +``` + +### boolean negation + +* default: `true` +* key: `boolean-negation` + +Should variables prefixed with `--no` be treated as negations? + +```sh +node example.js --no-foo +{ _: [], foo: false } +``` + +_if disabled:_ + +```sh +node example.js --no-foo +{ _: [], "no-foo": true } +``` + +### combine arrays + +* default: `false` +* key: `combine-arrays` + +Should arrays be combined when provided by both command line arguments and +a configuration file. + +### duplicate arguments array + +* default: `true` +* key: `duplicate-arguments-array` + +Should arguments be coerced into an array when duplicated: + +```sh +node example.js -x 1 -x 2 +{ _: [], x: [1, 2] } +``` + +_if disabled:_ + +```sh +node example.js -x 1 -x 2 +{ _: [], x: 2 } +``` + +### flatten duplicate arrays + +* default: `true` +* key: `flatten-duplicate-arrays` + +Should array arguments be coerced into a single array when duplicated: + +```sh +node example.js -x 1 2 -x 3 4 +{ _: [], x: [1, 2, 3, 4] } +``` + +_if disabled:_ + +```sh +node example.js -x 1 2 -x 3 4 +{ _: [], x: [[1, 2], [3, 4]] } +``` + +### greedy arrays + +* default: `true` +* key: `greedy-arrays` + +Should arrays consume more than one positional argument following their flag. + +```sh +node example --arr 1 2 +{ _[], arr: [1, 2] } +``` + +_if disabled:_ + +```sh +node example --arr 1 2 +{ _[2], arr: [1] } +``` + +**Note: in `v18.0.0` we are considering defaulting greedy arrays to `false`.** + +### nargs eats options + +* default: `false` +* key: `nargs-eats-options` + +Should nargs consume dash options as well as positional arguments. + +### negation prefix + +* default: `no-` +* key: `negation-prefix` + +The prefix to use for negated boolean variables. + +```sh +node example.js --no-foo +{ _: [], foo: false } +``` + +_if set to `quux`:_ + +```sh +node example.js --quuxfoo +{ _: [], foo: false } +``` + +### populate -- + +* default: `false`. +* key: `populate--` + +Should unparsed flags be stored in `--` or `_`. + +_If disabled:_ + +```sh +node example.js a -b -- x y +{ _: [ 'a', 'x', 'y' ], b: true } +``` + +_If enabled:_ + +```sh +node example.js a -b -- x y +{ _: [ 'a' ], '--': [ 'x', 'y' ], b: true } +``` + +### set placeholder key + +* default: `false`. +* key: `set-placeholder-key`. + +Should a placeholder be added for keys not set via the corresponding CLI argument? + +_If disabled:_ + +```sh +node example.js -a 1 -c 2 +{ _: [], a: 1, c: 2 } +``` + +_If enabled:_ + +```sh +node example.js -a 1 -c 2 +{ _: [], a: 1, b: undefined, c: 2 } +``` + +### halt at non-option + +* default: `false`. +* key: `halt-at-non-option`. + +Should parsing stop at the first positional argument? This is similar to how e.g. `ssh` parses its command line. + +_If disabled:_ + +```sh +node example.js -a run b -x y +{ _: [ 'b' ], a: 'run', x: 'y' } +``` + +_If enabled:_ + +```sh +node example.js -a run b -x y +{ _: [ 'b', '-x', 'y' ], a: 'run' } +``` + +### strip aliased + +* default: `false` +* key: `strip-aliased` + +Should aliases be removed before returning results? + +_If disabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1, 'test-alias': 1, testAlias: 1 } +``` + +_If enabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1 } +``` + +### strip dashed + +* default: `false` +* key: `strip-dashed` + +Should dashed keys be removed before returning results? This option has no effect if +`camel-case-expansion` is disabled. + +_If disabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1 } +``` + +_If enabled:_ + +```sh +node example.js --test-field 1 +{ _: [], testField: 1 } +``` + +### unknown options as args + +* default: `false` +* key: `unknown-options-as-args` + +Should unknown options be treated like regular arguments? An unknown option is one that is not +configured in `opts`. + +_If disabled_ + +```sh +node example.js --unknown-option --known-option 2 --string-option --unknown-option2 +{ _: [], unknownOption: true, knownOption: 2, stringOption: '', unknownOption2: true } +``` + +_If enabled_ + +```sh +node example.js --unknown-option --known-option 2 --string-option --unknown-option2 +{ _: ['--unknown-option'], knownOption: 2, stringOption: '--unknown-option2' } +``` + +## Supported Node.js Versions + +Libraries in this ecosystem make a best effort to track +[Node.js' release schedule](https://nodejs.org/en/about/releases/). Here's [a +post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a). + +## Special Thanks + +The yargs project evolves from optimist and minimist. It owes its +existence to a lot of James Halliday's hard work. Thanks [substack](https://github.com/substack) **beep** **boop** \o/ + +## License + +ISC diff --git a/build/node_modules/yargs-parser/browser.js b/build/node_modules/yargs-parser/browser.js new file mode 100644 index 00000000..241202c7 --- /dev/null +++ b/build/node_modules/yargs-parser/browser.js @@ -0,0 +1,29 @@ +// Main entrypoint for ESM web browser environments. Avoids using Node.js +// specific libraries, such as "path". +// +// TODO: figure out reasonable web equivalents for "resolve", "normalize", etc. +import { camelCase, decamelize, looksLikeNumber } from './build/lib/string-utils.js' +import { YargsParser } from './build/lib/yargs-parser.js' +const parser = new YargsParser({ + cwd: () => { return '' }, + format: (str, arg) => { return str.replace('%s', arg) }, + normalize: (str) => { return str }, + resolve: (str) => { return str }, + require: () => { + throw Error('loading config from files not currently supported in browser') + }, + env: () => {} +}) + +const yargsParser = function Parser (args, opts) { + const result = parser.parse(args.slice(), opts) + return result.argv +} +yargsParser.detailed = function (args, opts) { + return parser.parse(args.slice(), opts) +} +yargsParser.camelCase = camelCase +yargsParser.decamelize = decamelize +yargsParser.looksLikeNumber = looksLikeNumber + +export default yargsParser diff --git a/build/node_modules/yargs-parser/build/index.cjs b/build/node_modules/yargs-parser/build/index.cjs new file mode 100644 index 00000000..3932975d --- /dev/null +++ b/build/node_modules/yargs-parser/build/index.cjs @@ -0,0 +1,1026 @@ +'use strict'; + +var util = require('util'); +var fs = require('fs'); +var path = require('path'); + +function camelCase(str) { + str = str.toLocaleLowerCase(); + if (str.indexOf('-') === -1 && str.indexOf('_') === -1) { + return str; + } + else { + let camelcase = ''; + let nextChrUpper = false; + const leadingHyphens = str.match(/^-+/); + for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) { + let chr = str.charAt(i); + if (nextChrUpper) { + nextChrUpper = false; + chr = chr.toLocaleUpperCase(); + } + if (i !== 0 && (chr === '-' || chr === '_')) { + nextChrUpper = true; + continue; + } + else if (chr !== '-' && chr !== '_') { + camelcase += chr; + } + } + return camelcase; + } +} +function decamelize(str, joinString) { + const lowercase = str.toLocaleLowerCase(); + joinString = joinString || '-'; + let notCamelcase = ''; + for (let i = 0; i < str.length; i++) { + const chrLower = lowercase.charAt(i); + const chrString = str.charAt(i); + if (chrLower !== chrString && i > 0) { + notCamelcase += `${joinString}${lowercase.charAt(i)}`; + } + else { + notCamelcase += chrString; + } + } + return notCamelcase; +} +function looksLikeNumber(x) { + if (x === null || x === undefined) + return false; + if (typeof x === 'number') + return true; + if (/^0x[0-9a-f]+$/i.test(x)) + return true; + if (x.length > 1 && x[0] === '0') + return false; + return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + +function tokenizeArgString(argString) { + if (Array.isArray(argString)) { + return argString.map(e => typeof e !== 'string' ? e + '' : e); + } + argString = argString.trim(); + let i = 0; + let prevC = null; + let c = null; + let opening = null; + const args = []; + for (let ii = 0; ii < argString.length; ii++) { + prevC = c; + c = argString.charAt(ii); + if (c === ' ' && !opening) { + if (!(prevC === ' ')) { + i++; + } + continue; + } + if (c === opening) { + opening = null; + } + else if ((c === "'" || c === '"') && !opening) { + opening = c; + } + if (!args[i]) + args[i] = ''; + args[i] += c; + } + return args; +} + +let mixin; +class YargsParser { + constructor(_mixin) { + mixin = _mixin; + } + parse(argsInput, options) { + const opts = Object.assign({ + alias: undefined, + array: undefined, + boolean: undefined, + config: undefined, + configObjects: undefined, + configuration: undefined, + coerce: undefined, + count: undefined, + default: undefined, + envPrefix: undefined, + narg: undefined, + normalize: undefined, + string: undefined, + number: undefined, + __: undefined, + key: undefined + }, options); + const args = tokenizeArgString(argsInput); + const aliases = combineAliases(Object.assign(Object.create(null), opts.alias)); + const configuration = Object.assign({ + 'boolean-negation': true, + 'camel-case-expansion': true, + 'combine-arrays': false, + 'dot-notation': true, + 'duplicate-arguments-array': true, + 'flatten-duplicate-arrays': true, + 'greedy-arrays': true, + 'halt-at-non-option': false, + 'nargs-eats-options': false, + 'negation-prefix': 'no-', + 'parse-numbers': true, + 'parse-positional-numbers': true, + 'populate--': false, + 'set-placeholder-key': false, + 'short-option-groups': true, + 'strip-aliased': false, + 'strip-dashed': false, + 'unknown-options-as-args': false + }, opts.configuration); + const defaults = Object.assign(Object.create(null), opts.default); + const configObjects = opts.configObjects || []; + const envPrefix = opts.envPrefix; + const notFlagsOption = configuration['populate--']; + const notFlagsArgv = notFlagsOption ? '--' : '_'; + const newAliases = Object.create(null); + const defaulted = Object.create(null); + const __ = opts.__ || mixin.format; + const flags = { + aliases: Object.create(null), + arrays: Object.create(null), + bools: Object.create(null), + strings: Object.create(null), + numbers: Object.create(null), + counts: Object.create(null), + normalize: Object.create(null), + configs: Object.create(null), + nargs: Object.create(null), + coercions: Object.create(null), + keys: [] + }; + const negative = /^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/; + const negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)'); + [].concat(opts.array || []).filter(Boolean).forEach(function (opt) { + const key = typeof opt === 'object' ? opt.key : opt; + const assignment = Object.keys(opt).map(function (key) { + const arrayFlagKeys = { + boolean: 'bools', + string: 'strings', + number: 'numbers' + }; + return arrayFlagKeys[key]; + }).filter(Boolean).pop(); + if (assignment) { + flags[assignment][key] = true; + } + flags.arrays[key] = true; + flags.keys.push(key); + }); + [].concat(opts.boolean || []).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + flags.keys.push(key); + }); + [].concat(opts.string || []).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + flags.keys.push(key); + }); + [].concat(opts.number || []).filter(Boolean).forEach(function (key) { + flags.numbers[key] = true; + flags.keys.push(key); + }); + [].concat(opts.count || []).filter(Boolean).forEach(function (key) { + flags.counts[key] = true; + flags.keys.push(key); + }); + [].concat(opts.normalize || []).filter(Boolean).forEach(function (key) { + flags.normalize[key] = true; + flags.keys.push(key); + }); + if (typeof opts.narg === 'object') { + Object.entries(opts.narg).forEach(([key, value]) => { + if (typeof value === 'number') { + flags.nargs[key] = value; + flags.keys.push(key); + } + }); + } + if (typeof opts.coerce === 'object') { + Object.entries(opts.coerce).forEach(([key, value]) => { + if (typeof value === 'function') { + flags.coercions[key] = value; + flags.keys.push(key); + } + }); + } + if (typeof opts.config !== 'undefined') { + if (Array.isArray(opts.config) || typeof opts.config === 'string') { + [].concat(opts.config).filter(Boolean).forEach(function (key) { + flags.configs[key] = true; + }); + } + else if (typeof opts.config === 'object') { + Object.entries(opts.config).forEach(([key, value]) => { + if (typeof value === 'boolean' || typeof value === 'function') { + flags.configs[key] = value; + } + }); + } + } + extendAliases(opts.key, aliases, opts.default, flags.arrays); + Object.keys(defaults).forEach(function (key) { + (flags.aliases[key] || []).forEach(function (alias) { + defaults[alias] = defaults[key]; + }); + }); + let error = null; + checkConfiguration(); + let notFlags = []; + const argv = Object.assign(Object.create(null), { _: [] }); + const argvReturn = {}; + for (let i = 0; i < args.length; i++) { + const arg = args[i]; + let broken; + let key; + let letters; + let m; + let next; + let value; + if (arg !== '--' && isUnknownOptionAsArg(arg)) { + pushPositional(arg); + } + else if (arg.match(/^--.+=/) || (!configuration['short-option-groups'] && arg.match(/^-.+=/))) { + m = arg.match(/^--?([^=]+)=([\s\S]*)$/); + if (m !== null && Array.isArray(m) && m.length >= 3) { + if (checkAllAliases(m[1], flags.arrays)) { + i = eatArray(i, m[1], args, m[2]); + } + else if (checkAllAliases(m[1], flags.nargs) !== false) { + i = eatNargs(i, m[1], args, m[2]); + } + else { + setArg(m[1], m[2]); + } + } + } + else if (arg.match(negatedBoolean) && configuration['boolean-negation']) { + m = arg.match(negatedBoolean); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false); + } + } + else if (arg.match(/^--.+/) || (!configuration['short-option-groups'] && arg.match(/^-[^-]+/))) { + m = arg.match(/^--?(.+)/); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + if (checkAllAliases(key, flags.arrays)) { + i = eatArray(i, key, args); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + i = eatNargs(i, key, args); + } + else { + next = args[i + 1]; + if (next !== undefined && (!next.match(/^-/) || + next.match(negative)) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + } + else if (arg.match(/^-.\..+=/)) { + m = arg.match(/^-([^=]+)=([\s\S]*)$/); + if (m !== null && Array.isArray(m) && m.length >= 3) { + setArg(m[1], m[2]); + } + } + else if (arg.match(/^-.\..+/) && !arg.match(negative)) { + next = args[i + 1]; + m = arg.match(/^-(.\..+)/); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + if (next !== undefined && !next.match(/^-/) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + else if (arg.match(/^-[^-]+/) && !arg.match(negative)) { + letters = arg.slice(1, -1).split(''); + broken = false; + for (let j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + if (letters[j + 1] && letters[j + 1] === '=') { + value = arg.slice(j + 3); + key = letters[j]; + if (checkAllAliases(key, flags.arrays)) { + i = eatArray(i, key, args, value); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + i = eatNargs(i, key, args, value); + } + else { + setArg(key, value); + } + broken = true; + break; + } + if (next === '-') { + setArg(letters[j], next); + continue; + } + if (/[A-Za-z]/.test(letters[j]) && + /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) && + checkAllAliases(next, flags.bools) === false) { + setArg(letters[j], next); + broken = true; + break; + } + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], next); + broken = true; + break; + } + else { + setArg(letters[j], defaultValue(letters[j])); + } + } + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (checkAllAliases(key, flags.arrays)) { + i = eatArray(i, key, args); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + i = eatNargs(i, key, args); + } + else { + next = args[i + 1]; + if (next !== undefined && (!/^(-|--)[^-]/.test(next) || + next.match(negative)) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + } + else if (arg.match(/^-[0-9]$/) && + arg.match(negative) && + checkAllAliases(arg.slice(1), flags.bools)) { + key = arg.slice(1); + setArg(key, defaultValue(key)); + } + else if (arg === '--') { + notFlags = args.slice(i + 1); + break; + } + else if (configuration['halt-at-non-option']) { + notFlags = args.slice(i); + break; + } + else { + pushPositional(arg); + } + } + applyEnvVars(argv, true); + applyEnvVars(argv, false); + setConfig(argv); + setConfigObjects(); + applyDefaultsAndAliases(argv, flags.aliases, defaults, true); + applyCoercions(argv); + if (configuration['set-placeholder-key']) + setPlaceholderKeys(argv); + Object.keys(flags.counts).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) + setArg(key, 0); + }); + if (notFlagsOption && notFlags.length) + argv[notFlagsArgv] = []; + notFlags.forEach(function (key) { + argv[notFlagsArgv].push(key); + }); + if (configuration['camel-case-expansion'] && configuration['strip-dashed']) { + Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => { + delete argv[key]; + }); + } + if (configuration['strip-aliased']) { + [].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => { + if (configuration['camel-case-expansion'] && alias.includes('-')) { + delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')]; + } + delete argv[alias]; + }); + } + function pushPositional(arg) { + const maybeCoercedNumber = maybeCoerceNumber('_', arg); + if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number') { + argv._.push(maybeCoercedNumber); + } + } + function eatNargs(i, key, args, argAfterEqualSign) { + let ii; + let toEat = checkAllAliases(key, flags.nargs); + toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat; + if (toEat === 0) { + if (!isUndefined(argAfterEqualSign)) { + error = Error(__('Argument unexpected for: %s', key)); + } + setArg(key, defaultValue(key)); + return i; + } + let available = isUndefined(argAfterEqualSign) ? 0 : 1; + if (configuration['nargs-eats-options']) { + if (args.length - (i + 1) + available < toEat) { + error = Error(__('Not enough arguments following: %s', key)); + } + available = toEat; + } + else { + for (ii = i + 1; ii < args.length; ii++) { + if (!args[ii].match(/^-[^0-9]/) || args[ii].match(negative) || isUnknownOptionAsArg(args[ii])) + available++; + else + break; + } + if (available < toEat) + error = Error(__('Not enough arguments following: %s', key)); + } + let consumed = Math.min(available, toEat); + if (!isUndefined(argAfterEqualSign) && consumed > 0) { + setArg(key, argAfterEqualSign); + consumed--; + } + for (ii = i + 1; ii < (consumed + i + 1); ii++) { + setArg(key, args[ii]); + } + return (i + consumed); + } + function eatArray(i, key, args, argAfterEqualSign) { + let argsToSet = []; + let next = argAfterEqualSign || args[i + 1]; + const nargsCount = checkAllAliases(key, flags.nargs); + if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) { + argsToSet.push(true); + } + else if (isUndefined(next) || + (isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) { + if (defaults[key] !== undefined) { + const defVal = defaults[key]; + argsToSet = Array.isArray(defVal) ? defVal : [defVal]; + } + } + else { + if (!isUndefined(argAfterEqualSign)) { + argsToSet.push(processValue(key, argAfterEqualSign)); + } + for (let ii = i + 1; ii < args.length; ii++) { + if ((!configuration['greedy-arrays'] && argsToSet.length > 0) || + (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount)) + break; + next = args[ii]; + if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next)) + break; + i = ii; + argsToSet.push(processValue(key, next)); + } + } + if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) || + (isNaN(nargsCount) && argsToSet.length === 0))) { + error = Error(__('Not enough arguments following: %s', key)); + } + setArg(key, argsToSet); + return i; + } + function setArg(key, val) { + if (/-/.test(key) && configuration['camel-case-expansion']) { + const alias = key.split('.').map(function (prop) { + return camelCase(prop); + }).join('.'); + addNewAlias(key, alias); + } + const value = processValue(key, val); + const splitKey = key.split('.'); + setKey(argv, splitKey, value); + if (flags.aliases[key]) { + flags.aliases[key].forEach(function (x) { + const keyProperties = x.split('.'); + setKey(argv, keyProperties, value); + }); + } + if (splitKey.length > 1 && configuration['dot-notation']) { + (flags.aliases[splitKey[0]] || []).forEach(function (x) { + let keyProperties = x.split('.'); + const a = [].concat(splitKey); + a.shift(); + keyProperties = keyProperties.concat(a); + if (!(flags.aliases[key] || []).includes(keyProperties.join('.'))) { + setKey(argv, keyProperties, value); + } + }); + } + if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) { + const keys = [key].concat(flags.aliases[key] || []); + keys.forEach(function (key) { + Object.defineProperty(argvReturn, key, { + enumerable: true, + get() { + return val; + }, + set(value) { + val = typeof value === 'string' ? mixin.normalize(value) : value; + } + }); + }); + } + } + function addNewAlias(key, alias) { + if (!(flags.aliases[key] && flags.aliases[key].length)) { + flags.aliases[key] = [alias]; + newAliases[alias] = true; + } + if (!(flags.aliases[alias] && flags.aliases[alias].length)) { + addNewAlias(alias, key); + } + } + function processValue(key, val) { + if (typeof val === 'string' && + (val[0] === "'" || val[0] === '"') && + val[val.length - 1] === val[0]) { + val = val.substring(1, val.length - 1); + } + if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { + if (typeof val === 'string') + val = val === 'true'; + } + let value = Array.isArray(val) + ? val.map(function (v) { return maybeCoerceNumber(key, v); }) + : maybeCoerceNumber(key, val); + if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) { + value = increment(); + } + if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) { + if (Array.isArray(val)) + value = val.map((val) => { return mixin.normalize(val); }); + else + value = mixin.normalize(val); + } + return value; + } + function maybeCoerceNumber(key, value) { + if (!configuration['parse-positional-numbers'] && key === '_') + return value; + if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) { + const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && (Number.isSafeInteger(Math.floor(parseFloat(`${value}`)))); + if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) { + value = Number(value); + } + } + return value; + } + function setConfig(argv) { + const configLookup = Object.create(null); + applyDefaultsAndAliases(configLookup, flags.aliases, defaults); + Object.keys(flags.configs).forEach(function (configKey) { + const configPath = argv[configKey] || configLookup[configKey]; + if (configPath) { + try { + let config = null; + const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath); + const resolveConfig = flags.configs[configKey]; + if (typeof resolveConfig === 'function') { + try { + config = resolveConfig(resolvedConfigPath); + } + catch (e) { + config = e; + } + if (config instanceof Error) { + error = config; + return; + } + } + else { + config = mixin.require(resolvedConfigPath); + } + setConfigObject(config); + } + catch (ex) { + if (ex.name === 'PermissionDenied') + error = ex; + else if (argv[configKey]) + error = Error(__('Invalid JSON config file: %s', configPath)); + } + } + }); + } + function setConfigObject(config, prev) { + Object.keys(config).forEach(function (key) { + const value = config[key]; + const fullKey = prev ? prev + '.' + key : key; + if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) { + setConfigObject(value, fullKey); + } + else { + if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) { + setArg(fullKey, value); + } + } + }); + } + function setConfigObjects() { + if (typeof configObjects !== 'undefined') { + configObjects.forEach(function (configObject) { + setConfigObject(configObject); + }); + } + } + function applyEnvVars(argv, configOnly) { + if (typeof envPrefix === 'undefined') + return; + const prefix = typeof envPrefix === 'string' ? envPrefix : ''; + const env = mixin.env(); + Object.keys(env).forEach(function (envVar) { + if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) { + const keys = envVar.split('__').map(function (key, i) { + if (i === 0) { + key = key.substring(prefix.length); + } + return camelCase(key); + }); + if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) { + setArg(keys.join('.'), env[envVar]); + } + } + }); + } + function applyCoercions(argv) { + let coerce; + const applied = new Set(); + Object.keys(argv).forEach(function (key) { + if (!applied.has(key)) { + coerce = checkAllAliases(key, flags.coercions); + if (typeof coerce === 'function') { + try { + const value = maybeCoerceNumber(key, coerce(argv[key])); + ([].concat(flags.aliases[key] || [], key)).forEach(ali => { + applied.add(ali); + argv[ali] = value; + }); + } + catch (err) { + error = err; + } + } + } + }); + } + function setPlaceholderKeys(argv) { + flags.keys.forEach((key) => { + if (~key.indexOf('.')) + return; + if (typeof argv[key] === 'undefined') + argv[key] = undefined; + }); + return argv; + } + function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) { + Object.keys(defaults).forEach(function (key) { + if (!hasKey(obj, key.split('.'))) { + setKey(obj, key.split('.'), defaults[key]); + if (canLog) + defaulted[key] = true; + (aliases[key] || []).forEach(function (x) { + if (hasKey(obj, x.split('.'))) + return; + setKey(obj, x.split('.'), defaults[key]); + }); + } + }); + } + function hasKey(obj, keys) { + let o = obj; + if (!configuration['dot-notation']) + keys = [keys.join('.')]; + keys.slice(0, -1).forEach(function (key) { + o = (o[key] || {}); + }); + const key = keys[keys.length - 1]; + if (typeof o !== 'object') + return false; + else + return key in o; + } + function setKey(obj, keys, value) { + let o = obj; + if (!configuration['dot-notation']) + keys = [keys.join('.')]; + keys.slice(0, -1).forEach(function (key) { + key = sanitizeKey(key); + if (typeof o === 'object' && o[key] === undefined) { + o[key] = {}; + } + if (typeof o[key] !== 'object' || Array.isArray(o[key])) { + if (Array.isArray(o[key])) { + o[key].push({}); + } + else { + o[key] = [o[key], {}]; + } + o = o[key][o[key].length - 1]; + } + else { + o = o[key]; + } + }); + const key = sanitizeKey(keys[keys.length - 1]); + const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays); + const isValueArray = Array.isArray(value); + let duplicate = configuration['duplicate-arguments-array']; + if (!duplicate && checkAllAliases(key, flags.nargs)) { + duplicate = true; + if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) { + o[key] = undefined; + } + } + if (value === increment()) { + o[key] = increment(o[key]); + } + else if (Array.isArray(o[key])) { + if (duplicate && isTypeArray && isValueArray) { + o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]); + } + else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) { + o[key] = value; + } + else { + o[key] = o[key].concat([value]); + } + } + else if (o[key] === undefined && isTypeArray) { + o[key] = isValueArray ? value : [value]; + } + else if (duplicate && !(o[key] === undefined || + checkAllAliases(key, flags.counts) || + checkAllAliases(key, flags.bools))) { + o[key] = [o[key], value]; + } + else { + o[key] = value; + } + } + function extendAliases(...args) { + args.forEach(function (obj) { + Object.keys(obj || {}).forEach(function (key) { + if (flags.aliases[key]) + return; + flags.aliases[key] = [].concat(aliases[key] || []); + flags.aliases[key].concat(key).forEach(function (x) { + if (/-/.test(x) && configuration['camel-case-expansion']) { + const c = camelCase(x); + if (c !== key && flags.aliases[key].indexOf(c) === -1) { + flags.aliases[key].push(c); + newAliases[c] = true; + } + } + }); + flags.aliases[key].concat(key).forEach(function (x) { + if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) { + const c = decamelize(x, '-'); + if (c !== key && flags.aliases[key].indexOf(c) === -1) { + flags.aliases[key].push(c); + newAliases[c] = true; + } + } + }); + flags.aliases[key].forEach(function (x) { + flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + }); + } + function checkAllAliases(key, flag) { + const toCheck = [].concat(flags.aliases[key] || [], key); + const keys = Object.keys(flag); + const setAlias = toCheck.find(key => keys.includes(key)); + return setAlias ? flag[setAlias] : false; + } + function hasAnyFlag(key) { + const flagsKeys = Object.keys(flags); + const toCheck = [].concat(flagsKeys.map(k => flags[k])); + return toCheck.some(function (flag) { + return Array.isArray(flag) ? flag.includes(key) : flag[key]; + }); + } + function hasFlagsMatching(arg, ...patterns) { + const toCheck = [].concat(...patterns); + return toCheck.some(function (pattern) { + const match = arg.match(pattern); + return match && hasAnyFlag(match[1]); + }); + } + function hasAllShortFlags(arg) { + if (arg.match(negative) || !arg.match(/^-[^-]+/)) { + return false; + } + let hasAllFlags = true; + let next; + const letters = arg.slice(1).split(''); + for (let j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + if (!hasAnyFlag(letters[j])) { + hasAllFlags = false; + break; + } + if ((letters[j + 1] && letters[j + 1] === '=') || + next === '-' || + (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) || + (letters[j + 1] && letters[j + 1].match(/\W/))) { + break; + } + } + return hasAllFlags; + } + function isUnknownOptionAsArg(arg) { + return configuration['unknown-options-as-args'] && isUnknownOption(arg); + } + function isUnknownOption(arg) { + if (arg.match(negative)) { + return false; + } + if (hasAllShortFlags(arg)) { + return false; + } + const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/; + const normalFlag = /^-+([^=]+?)$/; + const flagEndingInHyphen = /^-+([^=]+?)-$/; + const flagEndingInDigits = /^-+([^=]+?\d+)$/; + const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/; + return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters); + } + function defaultValue(key) { + if (!checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts) && + `${key}` in defaults) { + return defaults[key]; + } + else { + return defaultForType(guessType(key)); + } + } + function defaultForType(type) { + const def = { + boolean: true, + string: '', + number: undefined, + array: [] + }; + return def[type]; + } + function guessType(key) { + let type = 'boolean'; + if (checkAllAliases(key, flags.strings)) + type = 'string'; + else if (checkAllAliases(key, flags.numbers)) + type = 'number'; + else if (checkAllAliases(key, flags.bools)) + type = 'boolean'; + else if (checkAllAliases(key, flags.arrays)) + type = 'array'; + return type; + } + function isUndefined(num) { + return num === undefined; + } + function checkConfiguration() { + Object.keys(flags.counts).find(key => { + if (checkAllAliases(key, flags.arrays)) { + error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key)); + return true; + } + else if (checkAllAliases(key, flags.nargs)) { + error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key)); + return true; + } + return false; + }); + } + return { + aliases: Object.assign({}, flags.aliases), + argv: Object.assign(argvReturn, argv), + configuration: configuration, + defaulted: Object.assign({}, defaulted), + error: error, + newAliases: Object.assign({}, newAliases) + }; + } +} +function combineAliases(aliases) { + const aliasArrays = []; + const combined = Object.create(null); + let change = true; + Object.keys(aliases).forEach(function (key) { + aliasArrays.push([].concat(aliases[key], key)); + }); + while (change) { + change = false; + for (let i = 0; i < aliasArrays.length; i++) { + for (let ii = i + 1; ii < aliasArrays.length; ii++) { + const intersect = aliasArrays[i].filter(function (v) { + return aliasArrays[ii].indexOf(v) !== -1; + }); + if (intersect.length) { + aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]); + aliasArrays.splice(ii, 1); + change = true; + break; + } + } + } + } + aliasArrays.forEach(function (aliasArray) { + aliasArray = aliasArray.filter(function (v, i, self) { + return self.indexOf(v) === i; + }); + const lastAlias = aliasArray.pop(); + if (lastAlias !== undefined && typeof lastAlias === 'string') { + combined[lastAlias] = aliasArray; + } + }); + return combined; +} +function increment(orig) { + return orig !== undefined ? orig + 1 : 1; +} +function sanitizeKey(key) { + if (key === '__proto__') + return '___proto___'; + return key; +} + +const minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION) + ? Number(process.env.YARGS_MIN_NODE_VERSION) + : 10; +if (process && process.version) { + const major = Number(process.version.match(/v([^.]+)/)[1]); + if (major < minNodeVersion) { + throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`); + } +} +const env = process ? process.env : {}; +const parser = new YargsParser({ + cwd: process.cwd, + env: () => { + return env; + }, + format: util.format, + normalize: path.normalize, + resolve: path.resolve, + require: (path) => { + if (typeof require !== 'undefined') { + return require(path); + } + else if (path.match(/\.json$/)) { + return fs.readFileSync(path, 'utf8'); + } + else { + throw Error('only .json config files are supported in ESM'); + } + } +}); +const yargsParser = function Parser(args, opts) { + const result = parser.parse(args.slice(), opts); + return result.argv; +}; +yargsParser.detailed = function (args, opts) { + return parser.parse(args.slice(), opts); +}; +yargsParser.camelCase = camelCase; +yargsParser.decamelize = decamelize; +yargsParser.looksLikeNumber = looksLikeNumber; + +module.exports = yargsParser; diff --git a/build/node_modules/yargs-parser/build/lib/index.js b/build/node_modules/yargs-parser/build/lib/index.js new file mode 100644 index 00000000..57ef498b --- /dev/null +++ b/build/node_modules/yargs-parser/build/lib/index.js @@ -0,0 +1,53 @@ +// Main entrypoint for libraries using yargs-parser in Node.js +// CJS and ESM environments: +import { format } from 'util'; +import { readFileSync } from 'fs'; +import { normalize, resolve } from 'path'; +import { camelCase, decamelize, looksLikeNumber } from './string-utils.js'; +import { YargsParser } from './yargs-parser.js'; +// See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our +// version support policy. The YARGS_MIN_NODE_VERSION is used for testing only. +const minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION) + ? Number(process.env.YARGS_MIN_NODE_VERSION) + : 10; +if (process && process.version) { + const major = Number(process.version.match(/v([^.]+)/)[1]); + if (major < minNodeVersion) { + throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`); + } +} +// Creates a yargs-parser instance using Node.js standard libraries: +const env = process ? process.env : {}; +const parser = new YargsParser({ + cwd: process.cwd, + env: () => { + return env; + }, + format, + normalize, + resolve, + // TODO: figure out a way to combine ESM and CJS coverage, such that + // we can exercise all the lines below: + require: (path) => { + if (typeof require !== 'undefined') { + return require(path); + } + else if (path.match(/\.json$/)) { + return readFileSync(path, 'utf8'); + } + else { + throw Error('only .json config files are supported in ESM'); + } + } +}); +const yargsParser = function Parser(args, opts) { + const result = parser.parse(args.slice(), opts); + return result.argv; +}; +yargsParser.detailed = function (args, opts) { + return parser.parse(args.slice(), opts); +}; +yargsParser.camelCase = camelCase; +yargsParser.decamelize = decamelize; +yargsParser.looksLikeNumber = looksLikeNumber; +export default yargsParser; diff --git a/build/node_modules/yargs-parser/build/lib/string-utils.js b/build/node_modules/yargs-parser/build/lib/string-utils.js new file mode 100644 index 00000000..6e81ba08 --- /dev/null +++ b/build/node_modules/yargs-parser/build/lib/string-utils.js @@ -0,0 +1,56 @@ +export function camelCase(str) { + str = str.toLocaleLowerCase(); + if (str.indexOf('-') === -1 && str.indexOf('_') === -1) { + return str; + } + else { + let camelcase = ''; + let nextChrUpper = false; + const leadingHyphens = str.match(/^-+/); + for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) { + let chr = str.charAt(i); + if (nextChrUpper) { + nextChrUpper = false; + chr = chr.toLocaleUpperCase(); + } + if (i !== 0 && (chr === '-' || chr === '_')) { + nextChrUpper = true; + continue; + } + else if (chr !== '-' && chr !== '_') { + camelcase += chr; + } + } + return camelcase; + } +} +export function decamelize(str, joinString) { + const lowercase = str.toLocaleLowerCase(); + joinString = joinString || '-'; + let notCamelcase = ''; + for (let i = 0; i < str.length; i++) { + const chrLower = lowercase.charAt(i); + const chrString = str.charAt(i); + if (chrLower !== chrString && i > 0) { + notCamelcase += `${joinString}${lowercase.charAt(i)}`; + } + else { + notCamelcase += chrString; + } + } + return notCamelcase; +} +export function looksLikeNumber(x) { + if (x === null || x === undefined) + return false; + // if loaded from config, may already be a number. + if (typeof x === 'number') + return true; + // hexadecimal. + if (/^0x[0-9a-f]+$/i.test(x)) + return true; + // don't treat 0123 as a number; as it drops the leading '0'. + if (x.length > 1 && x[0] === '0') + return false; + return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} diff --git a/build/node_modules/yargs-parser/build/lib/tokenize-arg-string.js b/build/node_modules/yargs-parser/build/lib/tokenize-arg-string.js new file mode 100644 index 00000000..0f935bf9 --- /dev/null +++ b/build/node_modules/yargs-parser/build/lib/tokenize-arg-string.js @@ -0,0 +1,35 @@ +// take an un-split argv string and tokenize it. +export function tokenizeArgString(argString) { + if (Array.isArray(argString)) { + return argString.map(e => typeof e !== 'string' ? e + '' : e); + } + argString = argString.trim(); + let i = 0; + let prevC = null; + let c = null; + let opening = null; + const args = []; + for (let ii = 0; ii < argString.length; ii++) { + prevC = c; + c = argString.charAt(ii); + // split on spaces unless we're in quotes. + if (c === ' ' && !opening) { + if (!(prevC === ' ')) { + i++; + } + continue; + } + // don't split the string if we're in matching + // opening or closing single and double quotes. + if (c === opening) { + opening = null; + } + else if ((c === "'" || c === '"') && !opening) { + opening = c; + } + if (!args[i]) + args[i] = ''; + args[i] += c; + } + return args; +} diff --git a/build/node_modules/yargs-parser/build/lib/yargs-parser-types.js b/build/node_modules/yargs-parser/build/lib/yargs-parser-types.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/build/node_modules/yargs-parser/build/lib/yargs-parser-types.js @@ -0,0 +1 @@ +export {}; diff --git a/build/node_modules/yargs-parser/build/lib/yargs-parser.js b/build/node_modules/yargs-parser/build/lib/yargs-parser.js new file mode 100644 index 00000000..24981267 --- /dev/null +++ b/build/node_modules/yargs-parser/build/lib/yargs-parser.js @@ -0,0 +1,1023 @@ +import { tokenizeArgString } from './tokenize-arg-string.js'; +import { camelCase, decamelize, looksLikeNumber } from './string-utils.js'; +let mixin; +export class YargsParser { + constructor(_mixin) { + mixin = _mixin; + } + parse(argsInput, options) { + const opts = Object.assign({ + alias: undefined, + array: undefined, + boolean: undefined, + config: undefined, + configObjects: undefined, + configuration: undefined, + coerce: undefined, + count: undefined, + default: undefined, + envPrefix: undefined, + narg: undefined, + normalize: undefined, + string: undefined, + number: undefined, + __: undefined, + key: undefined + }, options); + // allow a string argument to be passed in rather + // than an argv array. + const args = tokenizeArgString(argsInput); + // aliases might have transitive relationships, normalize this. + const aliases = combineAliases(Object.assign(Object.create(null), opts.alias)); + const configuration = Object.assign({ + 'boolean-negation': true, + 'camel-case-expansion': true, + 'combine-arrays': false, + 'dot-notation': true, + 'duplicate-arguments-array': true, + 'flatten-duplicate-arrays': true, + 'greedy-arrays': true, + 'halt-at-non-option': false, + 'nargs-eats-options': false, + 'negation-prefix': 'no-', + 'parse-numbers': true, + 'parse-positional-numbers': true, + 'populate--': false, + 'set-placeholder-key': false, + 'short-option-groups': true, + 'strip-aliased': false, + 'strip-dashed': false, + 'unknown-options-as-args': false + }, opts.configuration); + const defaults = Object.assign(Object.create(null), opts.default); + const configObjects = opts.configObjects || []; + const envPrefix = opts.envPrefix; + const notFlagsOption = configuration['populate--']; + const notFlagsArgv = notFlagsOption ? '--' : '_'; + const newAliases = Object.create(null); + const defaulted = Object.create(null); + // allow a i18n handler to be passed in, default to a fake one (util.format). + const __ = opts.__ || mixin.format; + const flags = { + aliases: Object.create(null), + arrays: Object.create(null), + bools: Object.create(null), + strings: Object.create(null), + numbers: Object.create(null), + counts: Object.create(null), + normalize: Object.create(null), + configs: Object.create(null), + nargs: Object.create(null), + coercions: Object.create(null), + keys: [] + }; + const negative = /^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/; + const negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)'); + [].concat(opts.array || []).filter(Boolean).forEach(function (opt) { + const key = typeof opt === 'object' ? opt.key : opt; + // assign to flags[bools|strings|numbers] + const assignment = Object.keys(opt).map(function (key) { + const arrayFlagKeys = { + boolean: 'bools', + string: 'strings', + number: 'numbers' + }; + return arrayFlagKeys[key]; + }).filter(Boolean).pop(); + // assign key to be coerced + if (assignment) { + flags[assignment][key] = true; + } + flags.arrays[key] = true; + flags.keys.push(key); + }); + [].concat(opts.boolean || []).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + flags.keys.push(key); + }); + [].concat(opts.string || []).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + flags.keys.push(key); + }); + [].concat(opts.number || []).filter(Boolean).forEach(function (key) { + flags.numbers[key] = true; + flags.keys.push(key); + }); + [].concat(opts.count || []).filter(Boolean).forEach(function (key) { + flags.counts[key] = true; + flags.keys.push(key); + }); + [].concat(opts.normalize || []).filter(Boolean).forEach(function (key) { + flags.normalize[key] = true; + flags.keys.push(key); + }); + if (typeof opts.narg === 'object') { + Object.entries(opts.narg).forEach(([key, value]) => { + if (typeof value === 'number') { + flags.nargs[key] = value; + flags.keys.push(key); + } + }); + } + if (typeof opts.coerce === 'object') { + Object.entries(opts.coerce).forEach(([key, value]) => { + if (typeof value === 'function') { + flags.coercions[key] = value; + flags.keys.push(key); + } + }); + } + if (typeof opts.config !== 'undefined') { + if (Array.isArray(opts.config) || typeof opts.config === 'string') { + ; + [].concat(opts.config).filter(Boolean).forEach(function (key) { + flags.configs[key] = true; + }); + } + else if (typeof opts.config === 'object') { + Object.entries(opts.config).forEach(([key, value]) => { + if (typeof value === 'boolean' || typeof value === 'function') { + flags.configs[key] = value; + } + }); + } + } + // create a lookup table that takes into account all + // combinations of aliases: {f: ['foo'], foo: ['f']} + extendAliases(opts.key, aliases, opts.default, flags.arrays); + // apply default values to all aliases. + Object.keys(defaults).forEach(function (key) { + (flags.aliases[key] || []).forEach(function (alias) { + defaults[alias] = defaults[key]; + }); + }); + let error = null; + checkConfiguration(); + let notFlags = []; + const argv = Object.assign(Object.create(null), { _: [] }); + // TODO(bcoe): for the first pass at removing object prototype we didn't + // remove all prototypes from objects returned by this API, we might want + // to gradually move towards doing so. + const argvReturn = {}; + for (let i = 0; i < args.length; i++) { + const arg = args[i]; + let broken; + let key; + let letters; + let m; + let next; + let value; + // any unknown option (except for end-of-options, "--") + if (arg !== '--' && isUnknownOptionAsArg(arg)) { + pushPositional(arg); + // -- separated by = + } + else if (arg.match(/^--.+=/) || (!configuration['short-option-groups'] && arg.match(/^-.+=/))) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + m = arg.match(/^--?([^=]+)=([\s\S]*)$/); + // arrays format = '--f=a b c' + if (m !== null && Array.isArray(m) && m.length >= 3) { + if (checkAllAliases(m[1], flags.arrays)) { + i = eatArray(i, m[1], args, m[2]); + } + else if (checkAllAliases(m[1], flags.nargs) !== false) { + // nargs format = '--f=monkey washing cat' + i = eatNargs(i, m[1], args, m[2]); + } + else { + setArg(m[1], m[2]); + } + } + } + else if (arg.match(negatedBoolean) && configuration['boolean-negation']) { + m = arg.match(negatedBoolean); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false); + } + // -- separated by space. + } + else if (arg.match(/^--.+/) || (!configuration['short-option-groups'] && arg.match(/^-[^-]+/))) { + m = arg.match(/^--?(.+)/); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + if (checkAllAliases(key, flags.arrays)) { + // array format = '--foo a b c' + i = eatArray(i, key, args); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + // nargs format = '--foo a b c' + // should be truthy even if: flags.nargs[key] === 0 + i = eatNargs(i, key, args); + } + else { + next = args[i + 1]; + if (next !== undefined && (!next.match(/^-/) || + next.match(negative)) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + // dot-notation flag separated by '='. + } + else if (arg.match(/^-.\..+=/)) { + m = arg.match(/^-([^=]+)=([\s\S]*)$/); + if (m !== null && Array.isArray(m) && m.length >= 3) { + setArg(m[1], m[2]); + } + // dot-notation flag separated by space. + } + else if (arg.match(/^-.\..+/) && !arg.match(negative)) { + next = args[i + 1]; + m = arg.match(/^-(.\..+)/); + if (m !== null && Array.isArray(m) && m.length >= 2) { + key = m[1]; + if (next !== undefined && !next.match(/^-/) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + else if (arg.match(/^-[^-]+/) && !arg.match(negative)) { + letters = arg.slice(1, -1).split(''); + broken = false; + for (let j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + if (letters[j + 1] && letters[j + 1] === '=') { + value = arg.slice(j + 3); + key = letters[j]; + if (checkAllAliases(key, flags.arrays)) { + // array format = '-f=a b c' + i = eatArray(i, key, args, value); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + // nargs format = '-f=monkey washing cat' + i = eatNargs(i, key, args, value); + } + else { + setArg(key, value); + } + broken = true; + break; + } + if (next === '-') { + setArg(letters[j], next); + continue; + } + // current letter is an alphabetic character and next value is a number + if (/[A-Za-z]/.test(letters[j]) && + /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) && + checkAllAliases(next, flags.bools) === false) { + setArg(letters[j], next); + broken = true; + break; + } + if (letters[j + 1] && letters[j + 1].match(/\W/)) { + setArg(letters[j], next); + broken = true; + break; + } + else { + setArg(letters[j], defaultValue(letters[j])); + } + } + key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (checkAllAliases(key, flags.arrays)) { + // array format = '-f a b c' + i = eatArray(i, key, args); + } + else if (checkAllAliases(key, flags.nargs) !== false) { + // nargs format = '-f a b c' + // should be truthy even if: flags.nargs[key] === 0 + i = eatNargs(i, key, args); + } + else { + next = args[i + 1]; + if (next !== undefined && (!/^(-|--)[^-]/.test(next) || + next.match(negative)) && + !checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next); + i++; + } + else { + setArg(key, defaultValue(key)); + } + } + } + } + else if (arg.match(/^-[0-9]$/) && + arg.match(negative) && + checkAllAliases(arg.slice(1), flags.bools)) { + // single-digit boolean alias, e.g: xargs -0 + key = arg.slice(1); + setArg(key, defaultValue(key)); + } + else if (arg === '--') { + notFlags = args.slice(i + 1); + break; + } + else if (configuration['halt-at-non-option']) { + notFlags = args.slice(i); + break; + } + else { + pushPositional(arg); + } + } + // order of precedence: + // 1. command line arg + // 2. value from env var + // 3. value from config file + // 4. value from config objects + // 5. configured default value + applyEnvVars(argv, true); // special case: check env vars that point to config file + applyEnvVars(argv, false); + setConfig(argv); + setConfigObjects(); + applyDefaultsAndAliases(argv, flags.aliases, defaults, true); + applyCoercions(argv); + if (configuration['set-placeholder-key']) + setPlaceholderKeys(argv); + // for any counts either not in args or without an explicit default, set to 0 + Object.keys(flags.counts).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) + setArg(key, 0); + }); + // '--' defaults to undefined. + if (notFlagsOption && notFlags.length) + argv[notFlagsArgv] = []; + notFlags.forEach(function (key) { + argv[notFlagsArgv].push(key); + }); + if (configuration['camel-case-expansion'] && configuration['strip-dashed']) { + Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => { + delete argv[key]; + }); + } + if (configuration['strip-aliased']) { + ; + [].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => { + if (configuration['camel-case-expansion'] && alias.includes('-')) { + delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')]; + } + delete argv[alias]; + }); + } + // Push argument into positional array, applying numeric coercion: + function pushPositional(arg) { + const maybeCoercedNumber = maybeCoerceNumber('_', arg); + if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number') { + argv._.push(maybeCoercedNumber); + } + } + // how many arguments should we consume, based + // on the nargs option? + function eatNargs(i, key, args, argAfterEqualSign) { + let ii; + let toEat = checkAllAliases(key, flags.nargs); + // NaN has a special meaning for the array type, indicating that one or + // more values are expected. + toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat; + if (toEat === 0) { + if (!isUndefined(argAfterEqualSign)) { + error = Error(__('Argument unexpected for: %s', key)); + } + setArg(key, defaultValue(key)); + return i; + } + let available = isUndefined(argAfterEqualSign) ? 0 : 1; + if (configuration['nargs-eats-options']) { + // classic behavior, yargs eats positional and dash arguments. + if (args.length - (i + 1) + available < toEat) { + error = Error(__('Not enough arguments following: %s', key)); + } + available = toEat; + } + else { + // nargs will not consume flag arguments, e.g., -abc, --foo, + // and terminates when one is observed. + for (ii = i + 1; ii < args.length; ii++) { + if (!args[ii].match(/^-[^0-9]/) || args[ii].match(negative) || isUnknownOptionAsArg(args[ii])) + available++; + else + break; + } + if (available < toEat) + error = Error(__('Not enough arguments following: %s', key)); + } + let consumed = Math.min(available, toEat); + if (!isUndefined(argAfterEqualSign) && consumed > 0) { + setArg(key, argAfterEqualSign); + consumed--; + } + for (ii = i + 1; ii < (consumed + i + 1); ii++) { + setArg(key, args[ii]); + } + return (i + consumed); + } + // if an option is an array, eat all non-hyphenated arguments + // following it... YUM! + // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] + function eatArray(i, key, args, argAfterEqualSign) { + let argsToSet = []; + let next = argAfterEqualSign || args[i + 1]; + // If both array and nargs are configured, enforce the nargs count: + const nargsCount = checkAllAliases(key, flags.nargs); + if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) { + argsToSet.push(true); + } + else if (isUndefined(next) || + (isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) { + // for keys without value ==> argsToSet remains an empty [] + // set user default value, if available + if (defaults[key] !== undefined) { + const defVal = defaults[key]; + argsToSet = Array.isArray(defVal) ? defVal : [defVal]; + } + } + else { + // value in --option=value is eaten as is + if (!isUndefined(argAfterEqualSign)) { + argsToSet.push(processValue(key, argAfterEqualSign)); + } + for (let ii = i + 1; ii < args.length; ii++) { + if ((!configuration['greedy-arrays'] && argsToSet.length > 0) || + (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount)) + break; + next = args[ii]; + if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next)) + break; + i = ii; + argsToSet.push(processValue(key, next)); + } + } + // If both array and nargs are configured, create an error if less than + // nargs positionals were found. NaN has special meaning, indicating + // that at least one value is required (more are okay). + if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) || + (isNaN(nargsCount) && argsToSet.length === 0))) { + error = Error(__('Not enough arguments following: %s', key)); + } + setArg(key, argsToSet); + return i; + } + function setArg(key, val) { + if (/-/.test(key) && configuration['camel-case-expansion']) { + const alias = key.split('.').map(function (prop) { + return camelCase(prop); + }).join('.'); + addNewAlias(key, alias); + } + const value = processValue(key, val); + const splitKey = key.split('.'); + setKey(argv, splitKey, value); + // handle populating aliases of the full key + if (flags.aliases[key]) { + flags.aliases[key].forEach(function (x) { + const keyProperties = x.split('.'); + setKey(argv, keyProperties, value); + }); + } + // handle populating aliases of the first element of the dot-notation key + if (splitKey.length > 1 && configuration['dot-notation']) { + ; + (flags.aliases[splitKey[0]] || []).forEach(function (x) { + let keyProperties = x.split('.'); + // expand alias with nested objects in key + const a = [].concat(splitKey); + a.shift(); // nuke the old key. + keyProperties = keyProperties.concat(a); + // populate alias only if is not already an alias of the full key + // (already populated above) + if (!(flags.aliases[key] || []).includes(keyProperties.join('.'))) { + setKey(argv, keyProperties, value); + } + }); + } + // Set normalize getter and setter when key is in 'normalize' but isn't an array + if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) { + const keys = [key].concat(flags.aliases[key] || []); + keys.forEach(function (key) { + Object.defineProperty(argvReturn, key, { + enumerable: true, + get() { + return val; + }, + set(value) { + val = typeof value === 'string' ? mixin.normalize(value) : value; + } + }); + }); + } + } + function addNewAlias(key, alias) { + if (!(flags.aliases[key] && flags.aliases[key].length)) { + flags.aliases[key] = [alias]; + newAliases[alias] = true; + } + if (!(flags.aliases[alias] && flags.aliases[alias].length)) { + addNewAlias(alias, key); + } + } + function processValue(key, val) { + // strings may be quoted, clean this up as we assign values. + if (typeof val === 'string' && + (val[0] === "'" || val[0] === '"') && + val[val.length - 1] === val[0]) { + val = val.substring(1, val.length - 1); + } + // handle parsing boolean arguments --foo=true --bar false. + if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { + if (typeof val === 'string') + val = val === 'true'; + } + let value = Array.isArray(val) + ? val.map(function (v) { return maybeCoerceNumber(key, v); }) + : maybeCoerceNumber(key, val); + // increment a count given as arg (either no value or value parsed as boolean) + if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) { + value = increment(); + } + // Set normalized value when key is in 'normalize' and in 'arrays' + if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) { + if (Array.isArray(val)) + value = val.map((val) => { return mixin.normalize(val); }); + else + value = mixin.normalize(val); + } + return value; + } + function maybeCoerceNumber(key, value) { + if (!configuration['parse-positional-numbers'] && key === '_') + return value; + if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) { + const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && (Number.isSafeInteger(Math.floor(parseFloat(`${value}`)))); + if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) { + value = Number(value); + } + } + return value; + } + // set args from config.json file, this should be + // applied last so that defaults can be applied. + function setConfig(argv) { + const configLookup = Object.create(null); + // expand defaults/aliases, in-case any happen to reference + // the config.json file. + applyDefaultsAndAliases(configLookup, flags.aliases, defaults); + Object.keys(flags.configs).forEach(function (configKey) { + const configPath = argv[configKey] || configLookup[configKey]; + if (configPath) { + try { + let config = null; + const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath); + const resolveConfig = flags.configs[configKey]; + if (typeof resolveConfig === 'function') { + try { + config = resolveConfig(resolvedConfigPath); + } + catch (e) { + config = e; + } + if (config instanceof Error) { + error = config; + return; + } + } + else { + config = mixin.require(resolvedConfigPath); + } + setConfigObject(config); + } + catch (ex) { + // Deno will receive a PermissionDenied error if an attempt is + // made to load config without the --allow-read flag: + if (ex.name === 'PermissionDenied') + error = ex; + else if (argv[configKey]) + error = Error(__('Invalid JSON config file: %s', configPath)); + } + } + }); + } + // set args from config object. + // it recursively checks nested objects. + function setConfigObject(config, prev) { + Object.keys(config).forEach(function (key) { + const value = config[key]; + const fullKey = prev ? prev + '.' + key : key; + // if the value is an inner object and we have dot-notation + // enabled, treat inner objects in config the same as + // heavily nested dot notations (foo.bar.apple). + if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) { + // if the value is an object but not an array, check nested object + setConfigObject(value, fullKey); + } + else { + // setting arguments via CLI takes precedence over + // values within the config file. + if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) { + setArg(fullKey, value); + } + } + }); + } + // set all config objects passed in opts + function setConfigObjects() { + if (typeof configObjects !== 'undefined') { + configObjects.forEach(function (configObject) { + setConfigObject(configObject); + }); + } + } + function applyEnvVars(argv, configOnly) { + if (typeof envPrefix === 'undefined') + return; + const prefix = typeof envPrefix === 'string' ? envPrefix : ''; + const env = mixin.env(); + Object.keys(env).forEach(function (envVar) { + if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) { + // get array of nested keys and convert them to camel case + const keys = envVar.split('__').map(function (key, i) { + if (i === 0) { + key = key.substring(prefix.length); + } + return camelCase(key); + }); + if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) { + setArg(keys.join('.'), env[envVar]); + } + } + }); + } + function applyCoercions(argv) { + let coerce; + const applied = new Set(); + Object.keys(argv).forEach(function (key) { + if (!applied.has(key)) { // If we haven't already coerced this option via one of its aliases + coerce = checkAllAliases(key, flags.coercions); + if (typeof coerce === 'function') { + try { + const value = maybeCoerceNumber(key, coerce(argv[key])); + ([].concat(flags.aliases[key] || [], key)).forEach(ali => { + applied.add(ali); + argv[ali] = value; + }); + } + catch (err) { + error = err; + } + } + } + }); + } + function setPlaceholderKeys(argv) { + flags.keys.forEach((key) => { + // don't set placeholder keys for dot notation options 'foo.bar'. + if (~key.indexOf('.')) + return; + if (typeof argv[key] === 'undefined') + argv[key] = undefined; + }); + return argv; + } + function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) { + Object.keys(defaults).forEach(function (key) { + if (!hasKey(obj, key.split('.'))) { + setKey(obj, key.split('.'), defaults[key]); + if (canLog) + defaulted[key] = true; + (aliases[key] || []).forEach(function (x) { + if (hasKey(obj, x.split('.'))) + return; + setKey(obj, x.split('.'), defaults[key]); + }); + } + }); + } + function hasKey(obj, keys) { + let o = obj; + if (!configuration['dot-notation']) + keys = [keys.join('.')]; + keys.slice(0, -1).forEach(function (key) { + o = (o[key] || {}); + }); + const key = keys[keys.length - 1]; + if (typeof o !== 'object') + return false; + else + return key in o; + } + function setKey(obj, keys, value) { + let o = obj; + if (!configuration['dot-notation']) + keys = [keys.join('.')]; + keys.slice(0, -1).forEach(function (key) { + // TODO(bcoe): in the next major version of yargs, switch to + // Object.create(null) for dot notation: + key = sanitizeKey(key); + if (typeof o === 'object' && o[key] === undefined) { + o[key] = {}; + } + if (typeof o[key] !== 'object' || Array.isArray(o[key])) { + // ensure that o[key] is an array, and that the last item is an empty object. + if (Array.isArray(o[key])) { + o[key].push({}); + } + else { + o[key] = [o[key], {}]; + } + // we want to update the empty object at the end of the o[key] array, so set o to that object + o = o[key][o[key].length - 1]; + } + else { + o = o[key]; + } + }); + // TODO(bcoe): in the next major version of yargs, switch to + // Object.create(null) for dot notation: + const key = sanitizeKey(keys[keys.length - 1]); + const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays); + const isValueArray = Array.isArray(value); + let duplicate = configuration['duplicate-arguments-array']; + // nargs has higher priority than duplicate + if (!duplicate && checkAllAliases(key, flags.nargs)) { + duplicate = true; + if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) { + o[key] = undefined; + } + } + if (value === increment()) { + o[key] = increment(o[key]); + } + else if (Array.isArray(o[key])) { + if (duplicate && isTypeArray && isValueArray) { + o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]); + } + else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) { + o[key] = value; + } + else { + o[key] = o[key].concat([value]); + } + } + else if (o[key] === undefined && isTypeArray) { + o[key] = isValueArray ? value : [value]; + } + else if (duplicate && !(o[key] === undefined || + checkAllAliases(key, flags.counts) || + checkAllAliases(key, flags.bools))) { + o[key] = [o[key], value]; + } + else { + o[key] = value; + } + } + // extend the aliases list with inferred aliases. + function extendAliases(...args) { + args.forEach(function (obj) { + Object.keys(obj || {}).forEach(function (key) { + // short-circuit if we've already added a key + // to the aliases array, for example it might + // exist in both 'opts.default' and 'opts.key'. + if (flags.aliases[key]) + return; + flags.aliases[key] = [].concat(aliases[key] || []); + // For "--option-name", also set argv.optionName + flags.aliases[key].concat(key).forEach(function (x) { + if (/-/.test(x) && configuration['camel-case-expansion']) { + const c = camelCase(x); + if (c !== key && flags.aliases[key].indexOf(c) === -1) { + flags.aliases[key].push(c); + newAliases[c] = true; + } + } + }); + // For "--optionName", also set argv['option-name'] + flags.aliases[key].concat(key).forEach(function (x) { + if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) { + const c = decamelize(x, '-'); + if (c !== key && flags.aliases[key].indexOf(c) === -1) { + flags.aliases[key].push(c); + newAliases[c] = true; + } + } + }); + flags.aliases[key].forEach(function (x) { + flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + }); + } + function checkAllAliases(key, flag) { + const toCheck = [].concat(flags.aliases[key] || [], key); + const keys = Object.keys(flag); + const setAlias = toCheck.find(key => keys.includes(key)); + return setAlias ? flag[setAlias] : false; + } + function hasAnyFlag(key) { + const flagsKeys = Object.keys(flags); + const toCheck = [].concat(flagsKeys.map(k => flags[k])); + return toCheck.some(function (flag) { + return Array.isArray(flag) ? flag.includes(key) : flag[key]; + }); + } + function hasFlagsMatching(arg, ...patterns) { + const toCheck = [].concat(...patterns); + return toCheck.some(function (pattern) { + const match = arg.match(pattern); + return match && hasAnyFlag(match[1]); + }); + } + // based on a simplified version of the short flag group parsing logic + function hasAllShortFlags(arg) { + // if this is a negative number, or doesn't start with a single hyphen, it's not a short flag group + if (arg.match(negative) || !arg.match(/^-[^-]+/)) { + return false; + } + let hasAllFlags = true; + let next; + const letters = arg.slice(1).split(''); + for (let j = 0; j < letters.length; j++) { + next = arg.slice(j + 2); + if (!hasAnyFlag(letters[j])) { + hasAllFlags = false; + break; + } + if ((letters[j + 1] && letters[j + 1] === '=') || + next === '-' || + (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) || + (letters[j + 1] && letters[j + 1].match(/\W/))) { + break; + } + } + return hasAllFlags; + } + function isUnknownOptionAsArg(arg) { + return configuration['unknown-options-as-args'] && isUnknownOption(arg); + } + function isUnknownOption(arg) { + // ignore negative numbers + if (arg.match(negative)) { + return false; + } + // if this is a short option group and all of them are configured, it isn't unknown + if (hasAllShortFlags(arg)) { + return false; + } + // e.g. '--count=2' + const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/; + // e.g. '-a' or '--arg' + const normalFlag = /^-+([^=]+?)$/; + // e.g. '-a-' + const flagEndingInHyphen = /^-+([^=]+?)-$/; + // e.g. '-abc123' + const flagEndingInDigits = /^-+([^=]+?\d+)$/; + // e.g. '-a/usr/local' + const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/; + // check the different types of flag styles, including negatedBoolean, a pattern defined near the start of the parse method + return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters); + } + // make a best effort to pick a default value + // for an option based on name and type. + function defaultValue(key) { + if (!checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts) && + `${key}` in defaults) { + return defaults[key]; + } + else { + return defaultForType(guessType(key)); + } + } + // return a default value, given the type of a flag., + function defaultForType(type) { + const def = { + boolean: true, + string: '', + number: undefined, + array: [] + }; + return def[type]; + } + // given a flag, enforce a default type. + function guessType(key) { + let type = 'boolean'; + if (checkAllAliases(key, flags.strings)) + type = 'string'; + else if (checkAllAliases(key, flags.numbers)) + type = 'number'; + else if (checkAllAliases(key, flags.bools)) + type = 'boolean'; + else if (checkAllAliases(key, flags.arrays)) + type = 'array'; + return type; + } + function isUndefined(num) { + return num === undefined; + } + // check user configuration settings for inconsistencies + function checkConfiguration() { + // count keys should not be set as array/narg + Object.keys(flags.counts).find(key => { + if (checkAllAliases(key, flags.arrays)) { + error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key)); + return true; + } + else if (checkAllAliases(key, flags.nargs)) { + error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key)); + return true; + } + return false; + }); + } + return { + aliases: Object.assign({}, flags.aliases), + argv: Object.assign(argvReturn, argv), + configuration: configuration, + defaulted: Object.assign({}, defaulted), + error: error, + newAliases: Object.assign({}, newAliases) + }; + } +} +// if any aliases reference each other, we should +// merge them together. +function combineAliases(aliases) { + const aliasArrays = []; + const combined = Object.create(null); + let change = true; + // turn alias lookup hash {key: ['alias1', 'alias2']} into + // a simple array ['key', 'alias1', 'alias2'] + Object.keys(aliases).forEach(function (key) { + aliasArrays.push([].concat(aliases[key], key)); + }); + // combine arrays until zero changes are + // made in an iteration. + while (change) { + change = false; + for (let i = 0; i < aliasArrays.length; i++) { + for (let ii = i + 1; ii < aliasArrays.length; ii++) { + const intersect = aliasArrays[i].filter(function (v) { + return aliasArrays[ii].indexOf(v) !== -1; + }); + if (intersect.length) { + aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]); + aliasArrays.splice(ii, 1); + change = true; + break; + } + } + } + } + // map arrays back to the hash-lookup (de-dupe while + // we're at it). + aliasArrays.forEach(function (aliasArray) { + aliasArray = aliasArray.filter(function (v, i, self) { + return self.indexOf(v) === i; + }); + const lastAlias = aliasArray.pop(); + if (lastAlias !== undefined && typeof lastAlias === 'string') { + combined[lastAlias] = aliasArray; + } + }); + return combined; +} +// this function should only be called when a count is given as an arg +// it is NOT called to set a default value +// thus we can start the count at 1 instead of 0 +function increment(orig) { + return orig !== undefined ? orig + 1 : 1; +} +// TODO(bcoe): in the next major version of yargs, switch to +// Object.create(null) for dot notation: +function sanitizeKey(key) { + if (key === '__proto__') + return '___proto___'; + return key; +} diff --git a/build/node_modules/yargs-parser/package.json b/build/node_modules/yargs-parser/package.json new file mode 100644 index 00000000..cc410dd6 --- /dev/null +++ b/build/node_modules/yargs-parser/package.json @@ -0,0 +1,120 @@ +{ + "_from": "yargs-parser@20.2.4", + "_id": "yargs-parser@20.2.4", + "_inBundle": false, + "_integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "_location": "/yargs-parser", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "yargs-parser@20.2.4", + "name": "yargs-parser", + "escapedName": "yargs-parser", + "rawSpec": "20.2.4", + "saveSpec": null, + "fetchSpec": "20.2.4" + }, + "_requiredBy": [ + "/mocha", + "/yargs" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs-parser/-/yargs-parser-20.2.4.tgz", + "_shasum": "b42890f14566796f85ae8e3a25290d205f154a54", + "_spec": "yargs-parser@20.2.4", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/yargs/yargs-parser/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "the mighty option parser used by yargs", + "devDependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^8.0.0", + "@types/node": "^10.0.3", + "@typescript-eslint/eslint-plugin": "^3.10.1", + "@typescript-eslint/parser": "^3.10.1", + "@wessberg/rollup-plugin-ts": "^1.2.28", + "c8": "^7.3.0", + "chai": "^4.2.0", + "cross-env": "^7.0.2", + "eslint": "^7.0.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "gts": "^3.0.0", + "mocha": "^8.0.0", + "puppeteer": "^5.2.1", + "rimraf": "^3.0.2", + "rollup": "^2.22.1", + "rollup-plugin-cleanup": "^3.1.1", + "serve": "^11.3.2", + "standardx": "^7.0.0", + "start-server-and-test": "^1.11.2", + "ts-transform-default-export": "^1.0.2", + "typescript": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "exports": { + ".": [ + { + "import": "./build/lib/index.js", + "require": "./build/index.cjs" + }, + "./build/index.cjs" + ] + }, + "files": [ + "browser.js", + "build", + "!*.d.ts" + ], + "homepage": "https://github.com/yargs/yargs-parser#readme", + "keywords": [ + "argument", + "parser", + "yargs", + "command", + "cli", + "parsing", + "option", + "args", + "argument" + ], + "license": "ISC", + "main": "build/index.cjs", + "module": "./build/lib/index.js", + "name": "yargs-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/yargs/yargs-parser.git" + }, + "scripts": { + "build:cjs": "rollup -c", + "check": "standardx '**/*.ts' && standardx '**/*.js' && standardx '**/*.cjs'", + "compile": "tsc", + "coverage": "c8 report --check-coverage", + "fix": "standardx --fix '**/*.ts' && standardx --fix '**/*.js' && standardx --fix '**/*.cjs'", + "postcompile": "npm run build:cjs", + "precompile": "rimraf build", + "prepare": "npm run compile", + "pretest": "rimraf build && tsc -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "pretest:typescript": "npm run pretest", + "test": "c8 --reporter=text --reporter=html mocha test/*.cjs", + "test:browser": "start-server-and-test 'serve ./ -p 8080' http://127.0.0.1:8080/package.json 'node ./test/browser/yargs-test.cjs'", + "test:typescript": "c8 mocha ./build/test/typescript/*.js" + }, + "standardx": { + "ignore": [ + "build" + ] + }, + "type": "module", + "version": "20.2.4" +} diff --git a/build/node_modules/yargs-unparser/CHANGELOG.md b/build/node_modules/yargs-unparser/CHANGELOG.md new file mode 100644 index 00000000..02119823 --- /dev/null +++ b/build/node_modules/yargs-unparser/CHANGELOG.md @@ -0,0 +1,82 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [2.0.0](https://www.github.com/yargs/yargs-unparser/compare/v1.6.4...v2.0.0) (2020-10-02) + + +### ⚠ BREAKING CHANGES + +* upgrade deps drop Node 6/8 (#71) + +### Code Refactoring + +* upgrade deps drop Node 6/8 ([#71](https://www.github.com/yargs/yargs-unparser/issues/71)) ([c686882](https://www.github.com/yargs/yargs-unparser/commit/c686882f5ad554be44169e3745e741cb4ec898d0)) + +### [1.6.4](https://www.github.com/yargs/yargs-unparser/compare/v1.6.3...v1.6.4) (2020-10-01) + + +### Bug Fixes + +* **security:** upgraded flat to version ^5.0.2 ([9bd7c67](https://www.github.com/yargs/yargs-unparser/commit/9bd7c672e12417319c5d4de79070d9c7cd5107f2)) + +### [1.6.3](https://www.github.com/yargs/yargs-unparser/compare/v1.6.2...v1.6.3) (2020-06-17) + + +### Bug Fixes + +* test automatic publish ([209a487](https://www.github.com/yargs/yargs-unparser/commit/209a4870af799f4b200c2a89d7b7e50c9fd5fd1f)) + +### [1.6.2](https://www.github.com/yargs/yargs-unparser/compare/v1.6.1...v1.6.2) (2020-06-17) + + +### Bug Fixes + +* **readme:** marketing was injected dubiously into README ([#60](https://www.github.com/yargs/yargs-unparser/issues/60)) ([1167667](https://www.github.com/yargs/yargs-unparser/commit/1167667886fcb103c747e3c9855f353ee0e41c03)) + +### [1.6.1](https://www.github.com/yargs/yargs-unparser/compare/v1.6.0...v1.6.1) (2020-06-17) + + +### Bug Fixes + +* **deps:** downgrade yargs, such that we continue supporting Node 6 ([#57](https://www.github.com/yargs/yargs-unparser/issues/57)) ([f69406c](https://www.github.com/yargs/yargs-unparser/commit/f69406c34bead63011590f7b51a24a6f311c1a48)) + +## 1.6.0 (2019-07-30) + + +### Bug Fixes + +* **security:** update deps addressing recent audit vulnerabilities ([#40](https://github.com/yargs/yargs-unparser/issues/40)) ([2e74f1b](https://github.com/yargs/yargs-unparser/commit/2e74f1b)) +* address bug with camelCased flattened keys ([#32](https://github.com/yargs/yargs-unparser/issues/32)) ([981533a](https://github.com/yargs/yargs-unparser/commit/981533a)) +* **deps:** updated the lodash version to fix vulnerability ([#39](https://github.com/yargs/yargs-unparser/issues/39)) ([7375966](https://github.com/yargs/yargs-unparser/commit/7375966)) +* **package:** update yargs to version 10.0.3 ([f1eb4cb](https://github.com/yargs/yargs-unparser/commit/f1eb4cb)) +* **package:** update yargs to version 11.0.0 ([6aa7c91](https://github.com/yargs/yargs-unparser/commit/6aa7c91)) + + +### Features + +* add interoperation with minimist ([ba477f5](https://github.com/yargs/yargs-unparser/commit/ba477f5)) + + +# 1.5.0 (2018-11-30) + + +### Bug Fixes + +* **package:** update yargs to version 10.0.3 ([f1eb4cb](https://github.com/yargs/yargs-unparser/commit/f1eb4cb)) +* **package:** update yargs to version 11.0.0 ([6aa7c91](https://github.com/yargs/yargs-unparser/commit/6aa7c91)) + + +### Features + +* add interoperation with minimist ([ba477f5](https://github.com/yargs/yargs-unparser/commit/ba477f5)) + + + + +# [1.4.0](https://github.com/moxystudio/yargs-unparser/compare/v1.3.0...v1.4.0) (2017-12-30) + + +### Features + +* add interoperation with minimist ([ba477f5](https://github.com/moxystudio/yargs-unparser/commit/ba477f5)) diff --git a/build/node_modules/yargs-unparser/LICENSE b/build/node_modules/yargs-unparser/LICENSE new file mode 100644 index 00000000..347e735e --- /dev/null +++ b/build/node_modules/yargs-unparser/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Made With MOXY Lda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/yargs-unparser/README.md b/build/node_modules/yargs-unparser/README.md new file mode 100644 index 00000000..a47cc4b2 --- /dev/null +++ b/build/node_modules/yargs-unparser/README.md @@ -0,0 +1,86 @@ +# yargs-unparser + +[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] + +[npm-url]:https://npmjs.org/package/yargs-unparser +[npm-image]:http://img.shields.io/npm/v/yargs-unparser.svg +[downloads-image]:http://img.shields.io/npm/dm/yargs-unparser.svg + +Converts back a `yargs` argv object to its original array form. + +Probably the unparser word doesn't even exist, but it sounds nice and goes well with [yargs-parser](https://github.com/yargs/yargs-parser). + +The code originally lived in [MOXY](https://github.com/moxystudio)'s GitHub but was later moved here for discoverability. + + +## Installation + +`$ npm install yargs-unparser` + + +## Usage + +```js +const parse = require('yargs-parser'); +const unparse = require('yargs-unparser'); + +const argv = parse(['--no-boolean', '--number', '4', '--string', 'foo'], { + boolean: ['boolean'], + number: ['number'], + string: ['string'], +}); +// { boolean: false, number: 4, string: 'foo', _: [] } + +const unparsedArgv = unparse(argv); +// ['--no-boolean', '--number', '4', '--string', 'foo']; +``` + +The second argument of `unparse` accepts an options object: + +- `alias`: The [aliases](https://github.com/yargs/yargs-parser#requireyargs-parserargs-opts) so that duplicate options aren't generated +- `default`: The [default](https://github.com/yargs/yargs-parser#requireyargs-parserargs-opts) values so that the options with default values are omitted +- `command`: The [command](https://github.com/yargs/yargs/blob/master/docs/advanced.md#commands) first argument so that command names and positional arguments are handled correctly + +### Example with `command` options + +```js +const yargs = require('yargs'); +const unparse = require('yargs-unparser'); + +const argv = yargs + .command('my-command ', 'My awesome command', (yargs) => + yargs + .option('boolean', { type: 'boolean' }) + .option('number', { type: 'number' }) + .option('string', { type: 'string' }) + ) + .parse(['my-command', 'hello', '--no-boolean', '--number', '4', '--string', 'foo']); +// { positional: 'hello', boolean: false, number: 4, string: 'foo', _: ['my-command'] } + +const unparsedArgv = unparse(argv, { + command: 'my-command ', +}); +// ['my-command', 'hello', '--no-boolean', '--number', '4', '--string', 'foo']; +``` + +### Caveats + +The returned array can be parsed again by `yargs-parser` using the default configuration. If you used custom configuration that you want `yargs-unparser` to be aware, please fill an [issue](https://github.com/yargs/yargs-unparser/issues). + +If you `coerce` in weird ways, things might not work correctly. + + +## Tests + +`$ npm test` +`$ npm test -- --watch` during development + +## Supported Node.js Versions + +Libraries in this ecosystem make a best effort to track +[Node.js' release schedule](https://nodejs.org/en/about/releases/). Here's [a +post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a). + +## License + +[MIT License](http://opensource.org/licenses/MIT) diff --git a/build/node_modules/yargs-unparser/index.js b/build/node_modules/yargs-unparser/index.js new file mode 100644 index 00000000..c2b75819 --- /dev/null +++ b/build/node_modules/yargs-unparser/index.js @@ -0,0 +1,166 @@ +'use strict'; + +const flatten = require('flat'); +const camelcase = require('camelcase'); +const decamelize = require('decamelize'); +const isPlainObj = require('is-plain-obj'); + +function isAlias(key, alias) { + // TODO Switch to Object.values one Node.js 6 is dropped + return Object.keys(alias).some((id) => [].concat(alias[id]).indexOf(key) !== -1); +} + +function hasDefaultValue(key, value, defaults) { + return value === defaults[key]; +} + +function isCamelCased(key, argv) { + return /[A-Z]/.test(key) && camelcase(key) === key && // Is it camel case? + argv[decamelize(key, '-')] != null; // Is the standard version defined? +} + +function keyToFlag(key) { + return key.length === 1 ? `-${key}` : `--${key}`; +} + +function parseCommand(cmd) { + const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' '); + const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/); + const bregex = /\.*[\][<>]/g; + const firstCommand = splitCommand.shift(); + + if (!firstCommand) { throw new Error(`No command found in: ${cmd}`); } + const parsedCommand = { + cmd: firstCommand.replace(bregex, ''), + demanded: [], + optional: [], + }; + + splitCommand.forEach((cmd, i) => { + let variadic = false; + + cmd = cmd.replace(/\s/g, ''); + if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) { variadic = true; } + if (/^\[/.test(cmd)) { + parsedCommand.optional.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } else { + parsedCommand.demanded.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } + }); + + return parsedCommand; +} + +function unparseOption(key, value, unparsed) { + if (typeof value === 'string') { + unparsed.push(keyToFlag(key), value); + } else if (value === true) { + unparsed.push(keyToFlag(key)); + } else if (value === false) { + unparsed.push(`--no-${key}`); + } else if (Array.isArray(value)) { + value.forEach((item) => unparseOption(key, item, unparsed)); + } else if (isPlainObj(value)) { + const flattened = flatten(value, { safe: true }); + + for (const flattenedKey in flattened) { + if (!isCamelCased(flattenedKey, flattened)) { + unparseOption(`${key}.${flattenedKey}`, flattened[flattenedKey], unparsed); + } + } + // Fallback case (numbers and other types) + } else if (value != null) { + unparsed.push(keyToFlag(key), `${value}`); + } +} + +function unparsePositional(argv, options, unparsed) { + const knownPositional = []; + + // Unparse command if set, collecting all known positional arguments + // e.g.: build + if (options.command) { + const { 0: cmd, index } = options.command.match(/[^<[]*/); + const { demanded, optional } = parseCommand(`foo ${options.command.substr(index + cmd.length)}`); + + // Push command (can be a deep command) + unparsed.push(...cmd.trim().split(/\s+/)); + + // Push positional arguments + [...demanded, ...optional].forEach(({ cmd: cmds, variadic }) => { + knownPositional.push(...cmds); + + const cmd = cmds[0]; + const args = (variadic ? argv[cmd] || [] : [argv[cmd]]) + .filter((arg) => arg != null) + .map((arg) => `${arg}`); + + unparsed.push(...args); + }); + } + + // Unparse unkown positional arguments + argv._ && unparsed.push(...argv._.slice(knownPositional.length)); + + return knownPositional; +} + +function unparseOptions(argv, options, knownPositional, unparsed) { + for (const key of Object.keys(argv)) { + const value = argv[key]; + + if ( + // Remove positional arguments + knownPositional.includes(key) || + // Remove special _, -- and $0 + ['_', '--', '$0'].includes(key) || + // Remove aliases + isAlias(key, options.alias) || + // Remove default values + hasDefaultValue(key, value, options.default) || + // Remove camel-cased + isCamelCased(key, argv) + ) { + continue; + } + + unparseOption(key, argv[key], unparsed); + } +} + +function unparseEndOfOptions(argv, options, unparsed) { + // Unparse ending (--) arguments if set + argv['--'] && unparsed.push('--', ...argv['--']); +} + +// ------------------------------------------------------------ + +function unparser(argv, options) { + options = Object.assign({ + alias: {}, + default: {}, + command: null, + }, options); + + const unparsed = []; + + // Unparse known & unknown positional arguments (foo [rest...]) + // All known positional will be returned so that they are not added as flags + const knownPositional = unparsePositional(argv, options, unparsed); + + // Unparse option arguments (--foo hello --bar hi) + unparseOptions(argv, options, knownPositional, unparsed); + + // Unparse "end-of-options" arguments (stuff after " -- ") + unparseEndOfOptions(argv, options, unparsed); + + return unparsed; +} + +module.exports = unparser; diff --git a/build/node_modules/yargs-unparser/package.json b/build/node_modules/yargs-unparser/package.json new file mode 100644 index 00000000..c0740d4f --- /dev/null +++ b/build/node_modules/yargs-unparser/package.json @@ -0,0 +1,83 @@ +{ + "_from": "yargs-unparser@2.0.0", + "_id": "yargs-unparser@2.0.0", + "_inBundle": false, + "_integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "_location": "/yargs-unparser", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "yargs-unparser@2.0.0", + "name": "yargs-unparser", + "escapedName": "yargs-unparser", + "rawSpec": "2.0.0", + "saveSpec": null, + "fetchSpec": "2.0.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "_shasum": "f131f9226911ae5d9ad38c432fe809366c2325eb", + "_spec": "yargs-unparser@2.0.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "author": { + "name": "André Cruz", + "email": "andre@moxy.studio" + }, + "bugs": { + "url": "https://github.com/yargs/yargs-unparser/issues" + }, + "bundleDependencies": false, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "deprecated": false, + "description": "Converts back a yargs argv object to its original array form", + "devDependencies": { + "eslint": "^6.1.0", + "eslint-config-moxy": "^7.1.0", + "husky": "^3.0.1", + "jest": "^24.9.0", + "lint-staged": "^9.5.0", + "minimist": "^1.2.5", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=10" + }, + "files": [], + "homepage": "https://github.com/yargs/yargs-unparser", + "keywords": [ + "yargs", + "unparse", + "expand", + "inverse", + "argv" + ], + "license": "MIT", + "lint-staged": { + "*.js": [ + "eslint --fix", + "git add" + ] + }, + "main": "index.js", + "name": "yargs-unparser", + "repository": { + "type": "git", + "url": "git+https://github.com/yargs/yargs-unparser.git" + }, + "scripts": { + "fix": "eslint . --fix", + "lint": "eslint .", + "precommit": "lint-staged", + "prerelease": "npm t && npm run lint", + "test": "jest --env node --coverage" + }, + "version": "2.0.0" +} diff --git a/build/node_modules/yargs/CHANGELOG.md b/build/node_modules/yargs/CHANGELOG.md new file mode 100644 index 00000000..ebc3b22f --- /dev/null +++ b/build/node_modules/yargs/CHANGELOG.md @@ -0,0 +1,88 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [16.2.0](https://www.github.com/yargs/yargs/compare/v16.1.1...v16.2.0) (2020-12-05) + + +### Features + +* command() now accepts an array of modules ([f415388](https://www.github.com/yargs/yargs/commit/f415388cc454d02786c65c50dd6c7a0cf9d8b842)) + + +### Bug Fixes + +* add package.json to module exports ([#1818](https://www.github.com/yargs/yargs/issues/1818)) ([d783a49](https://www.github.com/yargs/yargs/commit/d783a49a7f21c9bbd4eec2990268f3244c4d5662)), closes [#1817](https://www.github.com/yargs/yargs/issues/1817) + +### [16.1.1](https://www.github.com/yargs/yargs/compare/v16.1.0...v16.1.1) (2020-11-15) + + +### Bug Fixes + +* expose helpers for legacy versions of Node.js ([#1801](https://www.github.com/yargs/yargs/issues/1801)) ([107deaa](https://www.github.com/yargs/yargs/commit/107deaa4f68b7bc3f2386041e1f4fe0272b29c0a)) +* **deno:** get yargs working on deno@1.5.x ([#1799](https://www.github.com/yargs/yargs/issues/1799)) ([cb01c98](https://www.github.com/yargs/yargs/commit/cb01c98c44e30f55c2dc9434caef524ae433d9a4)) + +## [16.1.0](https://www.github.com/yargs/yargs/compare/v16.0.3...v16.1.0) (2020-10-15) + + +### Features + +* expose hideBin helper for CJS ([#1768](https://www.github.com/yargs/yargs/issues/1768)) ([63e1173](https://www.github.com/yargs/yargs/commit/63e1173bb47dc651c151973a16ef659082a9ae66)) + + +### Bug Fixes + +* **deno:** update types for deno ^1.4.0 ([#1772](https://www.github.com/yargs/yargs/issues/1772)) ([0801752](https://www.github.com/yargs/yargs/commit/080175207d281be63edf90adfe4f0568700b0bf5)) +* **exports:** node 13.0-13.6 require a string fallback ([#1776](https://www.github.com/yargs/yargs/issues/1776)) ([b45c43a](https://www.github.com/yargs/yargs/commit/b45c43a5f64b565c3794f9792150eaeec4e00b69)) +* **modules:** module path was incorrect ([#1759](https://www.github.com/yargs/yargs/issues/1759)) ([95a4a0a](https://www.github.com/yargs/yargs/commit/95a4a0ac573cfe158e6e4bc8c8682ebd1644a198)) +* **positional:** positional strings no longer drop decimals ([#1761](https://www.github.com/yargs/yargs/issues/1761)) ([e1a300f](https://www.github.com/yargs/yargs/commit/e1a300f1293ad821c900284616337f080b207980)) +* make positionals in -- count towards validation ([#1752](https://www.github.com/yargs/yargs/issues/1752)) ([eb2b29d](https://www.github.com/yargs/yargs/commit/eb2b29d34f1a41e0fd6c4e841960e5bfc329dc3c)) + +### [16.0.3](https://www.github.com/yargs/yargs/compare/v16.0.2...v16.0.3) (2020-09-10) + + +### Bug Fixes + +* move yargs.cjs to yargs to fix Node 10 imports ([#1747](https://www.github.com/yargs/yargs/issues/1747)) ([5bfb85b](https://www.github.com/yargs/yargs/commit/5bfb85b33b85db8a44b5f7a700a8e4dbaf022df0)) + +### [16.0.2](https://www.github.com/yargs/yargs/compare/v16.0.1...v16.0.2) (2020-09-09) + + +### Bug Fixes + +* **typescript:** yargs-parser was breaking @types/yargs ([#1745](https://www.github.com/yargs/yargs/issues/1745)) ([2253284](https://www.github.com/yargs/yargs/commit/2253284b233cceabd8db677b81c5bf1755eef230)) + +### [16.0.1](https://www.github.com/yargs/yargs/compare/v16.0.0...v16.0.1) (2020-09-09) + + +### Bug Fixes + +* code was not passed to process.exit ([#1742](https://www.github.com/yargs/yargs/issues/1742)) ([d1a9930](https://www.github.com/yargs/yargs/commit/d1a993035a2f76c138460052cf19425f9684b637)) + +## [16.0.0](https://www.github.com/yargs/yargs/compare/v15.4.2...v16.0.0) (2020-09-09) + + +### ⚠ BREAKING CHANGES + +* tweaks to ESM/Deno API surface: now exports yargs function by default; getProcessArgvWithoutBin becomes hideBin; types now exported for Deno. +* find-up replaced with escalade; export map added (limits importable files in Node >= 12); yarser-parser@19.x.x (new decamelize/camelcase implementation). +* **usage:** single character aliases are now shown first in help output +* rebase helper is no longer provided on yargs instance. +* drop support for EOL Node 8 (#1686) + +### Features + +* adds strictOptions() ([#1738](https://www.github.com/yargs/yargs/issues/1738)) ([b215fba](https://www.github.com/yargs/yargs/commit/b215fba0ed6e124e5aad6cf22c8d5875661c63a3)) +* **helpers:** rebase, Parser, applyExtends now blessed helpers ([#1733](https://www.github.com/yargs/yargs/issues/1733)) ([c7debe8](https://www.github.com/yargs/yargs/commit/c7debe8eb1e5bc6ea20b5ed68026c56e5ebec9e1)) +* adds support for ESM and Deno ([#1708](https://www.github.com/yargs/yargs/issues/1708)) ([ac6d5d1](https://www.github.com/yargs/yargs/commit/ac6d5d105a75711fe703f6a39dad5181b383d6c6)) +* drop support for EOL Node 8 ([#1686](https://www.github.com/yargs/yargs/issues/1686)) ([863937f](https://www.github.com/yargs/yargs/commit/863937f23c3102f804cdea78ee3097e28c7c289f)) +* i18n for ESM and Deno ([#1735](https://www.github.com/yargs/yargs/issues/1735)) ([c71783a](https://www.github.com/yargs/yargs/commit/c71783a5a898a0c0e92ac501c939a3ec411ac0c1)) +* tweaks to API surface based on user feedback ([#1726](https://www.github.com/yargs/yargs/issues/1726)) ([4151fee](https://www.github.com/yargs/yargs/commit/4151fee4c33a97d26bc40de7e623e5b0eb87e9bb)) +* **usage:** single char aliases first in help ([#1574](https://www.github.com/yargs/yargs/issues/1574)) ([a552990](https://www.github.com/yargs/yargs/commit/a552990c120646c2d85a5c9b628e1ce92a68e797)) + + +### Bug Fixes + +* **yargs:** add missing command(module) signature ([#1707](https://www.github.com/yargs/yargs/issues/1707)) ([0f81024](https://www.github.com/yargs/yargs/commit/0f810245494ccf13a35b7786d021b30fc95ecad5)), closes [#1704](https://www.github.com/yargs/yargs/issues/1704) + +[Older CHANGELOG Entries](https://github.com/yargs/yargs/blob/master/docs/CHANGELOG-historical.md) diff --git a/build/node_modules/yargs/LICENSE b/build/node_modules/yargs/LICENSE new file mode 100644 index 00000000..b0145ca0 --- /dev/null +++ b/build/node_modules/yargs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright 2010 James Halliday (mail@substack.net); Modified work Copyright 2014 Contributors (ben@npmjs.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/build/node_modules/yargs/README.md b/build/node_modules/yargs/README.md new file mode 100644 index 00000000..25a888ea --- /dev/null +++ b/build/node_modules/yargs/README.md @@ -0,0 +1,202 @@ +

            + +

            +

            Yargs

            +

            + Yargs be a node.js library fer hearties tryin' ter parse optstrings +

            + +
            + +![ci](https://github.com/yargs/yargs/workflows/ci/badge.svg) +[![NPM version][npm-image]][npm-url] +[![js-standard-style][standard-image]][standard-url] +[![Coverage][coverage-image]][coverage-url] +[![Conventional Commits][conventional-commits-image]][conventional-commits-url] +[![Slack][slack-image]][slack-url] + +## Description +Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface. + +It gives you: + +* commands and (grouped) options (`my-program.js serve --port=5000`). +* a dynamically generated help menu based on your arguments: + +``` +mocha [spec..] + +Run tests with Mocha + +Commands + mocha inspect [spec..] Run tests with Mocha [default] + mocha init create a client-side Mocha setup at + +Rules & Behavior + --allow-uncaught Allow uncaught errors to propagate [boolean] + --async-only, -A Require all tests to use a callback (async) or + return a Promise [boolean] +``` + +* bash-completion shortcuts for commands and options. +* and [tons more](/docs/api.md). + +## Installation + +Stable version: +```bash +npm i yargs +``` + +Bleeding edge version with the most recent features: +```bash +npm i yargs@next +``` + +## Usage + +### Simple Example + +```javascript +#!/usr/bin/env node +const yargs = require('yargs/yargs') +const { hideBin } = require('yargs/helpers') +const argv = yargs(hideBin(process.argv)).argv + +if (argv.ships > 3 && argv.distance < 53.5) { + console.log('Plunder more riffiwobbles!') +} else { + console.log('Retreat from the xupptumblers!') +} +``` + +```bash +$ ./plunder.js --ships=4 --distance=22 +Plunder more riffiwobbles! + +$ ./plunder.js --ships 12 --distance 98.7 +Retreat from the xupptumblers! +``` + +### Complex Example + +```javascript +#!/usr/bin/env node +const yargs = require('yargs/yargs') +const { hideBin } = require('yargs/helpers') + +yargs(hideBin(process.argv)) + .command('serve [port]', 'start the server', (yargs) => { + yargs + .positional('port', { + describe: 'port to bind on', + default: 5000 + }) + }, (argv) => { + if (argv.verbose) console.info(`start server on :${argv.port}`) + serve(argv.port) + }) + .option('verbose', { + alias: 'v', + type: 'boolean', + description: 'Run with verbose logging' + }) + .argv +``` + +Run the example above with `--help` to see the help for the application. + +## Supported Platforms + +### TypeScript + +yargs has type definitions at [@types/yargs][type-definitions]. + +``` +npm i @types/yargs --save-dev +``` + +See usage examples in [docs](/docs/typescript.md). + +### Deno + +As of `v16`, `yargs` supports [Deno](https://github.com/denoland/deno): + +```typescript +import yargs from 'https://deno.land/x/yargs/deno.ts' +import { Arguments } from 'https://deno.land/x/yargs/deno-types.ts' + +yargs(Deno.args) + .command('download ', 'download a list of files', (yargs: any) => { + return yargs.positional('files', { + describe: 'a list of files to do something with' + }) + }, (argv: Arguments) => { + console.info(argv) + }) + .strictCommands() + .demandCommand(1) + .argv +``` + +### ESM + +As of `v16`,`yargs` supports ESM imports: + +```js +import yargs from 'yargs' +import { hideBin } from 'yargs/helpers' + +yargs(hideBin(process.argv)) + .command('curl ', 'fetch the contents of the URL', () => {}, (argv) => { + console.info(argv) + }) + .demandCommand(1) + .argv +``` + +### Usage in Browser + +See examples of using yargs in the browser in [docs](/docs/browser.md). + +## Community + +Having problems? want to contribute? join our [community slack](http://devtoolscommunity.herokuapp.com). + +## Documentation + +### Table of Contents + +* [Yargs' API](/docs/api.md) +* [Examples](/docs/examples.md) +* [Parsing Tricks](/docs/tricks.md) + * [Stop the Parser](/docs/tricks.md#stop) + * [Negating Boolean Arguments](/docs/tricks.md#negate) + * [Numbers](/docs/tricks.md#numbers) + * [Arrays](/docs/tricks.md#arrays) + * [Objects](/docs/tricks.md#objects) + * [Quotes](/docs/tricks.md#quotes) +* [Advanced Topics](/docs/advanced.md) + * [Composing Your App Using Commands](/docs/advanced.md#commands) + * [Building Configurable CLI Apps](/docs/advanced.md#configuration) + * [Customizing Yargs' Parser](/docs/advanced.md#customizing) + * [Bundling yargs](/docs/bundling.md) +* [Contributing](/contributing.md) + +## Supported Node.js Versions + +Libraries in this ecosystem make a best effort to track +[Node.js' release schedule](https://nodejs.org/en/about/releases/). Here's [a +post on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a). + +[npm-url]: https://www.npmjs.com/package/yargs +[npm-image]: https://img.shields.io/npm/v/yargs.svg +[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg +[standard-url]: http://standardjs.com/ +[conventional-commits-image]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg +[conventional-commits-url]: https://conventionalcommits.org/ +[slack-image]: http://devtoolscommunity.herokuapp.com/badge.svg +[slack-url]: http://devtoolscommunity.herokuapp.com +[type-definitions]: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs +[coverage-image]: https://img.shields.io/nycrc/yargs/yargs +[coverage-url]: https://github.com/yargs/yargs/blob/master/.nycrc diff --git a/build/node_modules/yargs/browser.mjs b/build/node_modules/yargs/browser.mjs new file mode 100644 index 00000000..d8a9f3de --- /dev/null +++ b/build/node_modules/yargs/browser.mjs @@ -0,0 +1,7 @@ +// Bootstrap yargs for browser: +import browserPlatformShim from './lib/platform-shims/browser.mjs'; +import {YargsWithShim} from './build/lib/yargs-factory.js'; + +const Yargs = YargsWithShim(browserPlatformShim); + +export default Yargs; diff --git a/build/node_modules/yargs/build/index.cjs b/build/node_modules/yargs/build/index.cjs new file mode 100644 index 00000000..34ad9a89 --- /dev/null +++ b/build/node_modules/yargs/build/index.cjs @@ -0,0 +1,2920 @@ +'use strict'; + +var assert = require('assert'); + +class YError extends Error { + constructor(msg) { + super(msg || 'yargs error'); + this.name = 'YError'; + Error.captureStackTrace(this, YError); + } +} + +let previouslyVisitedConfigs = []; +let shim; +function applyExtends(config, cwd, mergeExtends, _shim) { + shim = _shim; + let defaultConfig = {}; + if (Object.prototype.hasOwnProperty.call(config, 'extends')) { + if (typeof config.extends !== 'string') + return defaultConfig; + const isPath = /\.json|\..*rc$/.test(config.extends); + let pathToDefault = null; + if (!isPath) { + try { + pathToDefault = require.resolve(config.extends); + } + catch (_err) { + return config; + } + } + else { + pathToDefault = getPathToDefaultConfig(cwd, config.extends); + } + checkForCircularExtends(pathToDefault); + previouslyVisitedConfigs.push(pathToDefault); + defaultConfig = isPath + ? JSON.parse(shim.readFileSync(pathToDefault, 'utf8')) + : require(config.extends); + delete config.extends; + defaultConfig = applyExtends(defaultConfig, shim.path.dirname(pathToDefault), mergeExtends, shim); + } + previouslyVisitedConfigs = []; + return mergeExtends + ? mergeDeep(defaultConfig, config) + : Object.assign({}, defaultConfig, config); +} +function checkForCircularExtends(cfgPath) { + if (previouslyVisitedConfigs.indexOf(cfgPath) > -1) { + throw new YError(`Circular extended configurations: '${cfgPath}'.`); + } +} +function getPathToDefaultConfig(cwd, pathToExtend) { + return shim.path.resolve(cwd, pathToExtend); +} +function mergeDeep(config1, config2) { + const target = {}; + function isObject(obj) { + return obj && typeof obj === 'object' && !Array.isArray(obj); + } + Object.assign(target, config1); + for (const key of Object.keys(config2)) { + if (isObject(config2[key]) && isObject(target[key])) { + target[key] = mergeDeep(config1[key], config2[key]); + } + else { + target[key] = config2[key]; + } + } + return target; +} + +function parseCommand(cmd) { + const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' '); + const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/); + const bregex = /\.*[\][<>]/g; + const firstCommand = splitCommand.shift(); + if (!firstCommand) + throw new Error(`No command found in: ${cmd}`); + const parsedCommand = { + cmd: firstCommand.replace(bregex, ''), + demanded: [], + optional: [], + }; + splitCommand.forEach((cmd, i) => { + let variadic = false; + cmd = cmd.replace(/\s/g, ''); + if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) + variadic = true; + if (/^\[/.test(cmd)) { + parsedCommand.optional.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } + else { + parsedCommand.demanded.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } + }); + return parsedCommand; +} + +const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']; +function argsert(arg1, arg2, arg3) { + function parseArgs() { + return typeof arg1 === 'object' + ? [{ demanded: [], optional: [] }, arg1, arg2] + : [ + parseCommand(`cmd ${arg1}`), + arg2, + arg3, + ]; + } + try { + let position = 0; + const [parsed, callerArguments, _length] = parseArgs(); + const args = [].slice.call(callerArguments); + while (args.length && args[args.length - 1] === undefined) + args.pop(); + const length = _length || args.length; + if (length < parsed.demanded.length) { + throw new YError(`Not enough arguments provided. Expected ${parsed.demanded.length} but received ${args.length}.`); + } + const totalCommands = parsed.demanded.length + parsed.optional.length; + if (length > totalCommands) { + throw new YError(`Too many arguments provided. Expected max ${totalCommands} but received ${length}.`); + } + parsed.demanded.forEach(demanded => { + const arg = args.shift(); + const observedType = guessType(arg); + const matchingTypes = demanded.cmd.filter(type => type === observedType || type === '*'); + if (matchingTypes.length === 0) + argumentTypeError(observedType, demanded.cmd, position); + position += 1; + }); + parsed.optional.forEach(optional => { + if (args.length === 0) + return; + const arg = args.shift(); + const observedType = guessType(arg); + const matchingTypes = optional.cmd.filter(type => type === observedType || type === '*'); + if (matchingTypes.length === 0) + argumentTypeError(observedType, optional.cmd, position); + position += 1; + }); + } + catch (err) { + console.warn(err.stack); + } +} +function guessType(arg) { + if (Array.isArray(arg)) { + return 'array'; + } + else if (arg === null) { + return 'null'; + } + return typeof arg; +} +function argumentTypeError(observedType, allowedTypes, position) { + throw new YError(`Invalid ${positionName[position] || 'manyith'} argument. Expected ${allowedTypes.join(' or ')} but received ${observedType}.`); +} + +function isPromise(maybePromise) { + return (!!maybePromise && + !!maybePromise.then && + typeof maybePromise.then === 'function'); +} + +function assertNotStrictEqual(actual, expected, shim, message) { + shim.assert.notStrictEqual(actual, expected, message); +} +function assertSingleKey(actual, shim) { + shim.assert.strictEqual(typeof actual, 'string'); +} +function objectKeys(object) { + return Object.keys(object); +} + +function objFilter(original = {}, filter = () => true) { + const obj = {}; + objectKeys(original).forEach(key => { + if (filter(key, original[key])) { + obj[key] = original[key]; + } + }); + return obj; +} + +function globalMiddlewareFactory(globalMiddleware, context) { + return function (callback, applyBeforeValidation = false) { + argsert(' [boolean]', [callback, applyBeforeValidation], arguments.length); + if (Array.isArray(callback)) { + for (let i = 0; i < callback.length; i++) { + if (typeof callback[i] !== 'function') { + throw Error('middleware must be a function'); + } + callback[i].applyBeforeValidation = applyBeforeValidation; + } + Array.prototype.push.apply(globalMiddleware, callback); + } + else if (typeof callback === 'function') { + callback.applyBeforeValidation = applyBeforeValidation; + globalMiddleware.push(callback); + } + return context; + }; +} +function commandMiddlewareFactory(commandMiddleware) { + if (!commandMiddleware) + return []; + return commandMiddleware.map(middleware => { + middleware.applyBeforeValidation = false; + return middleware; + }); +} +function applyMiddleware(argv, yargs, middlewares, beforeValidation) { + const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true'); + return middlewares.reduce((acc, middleware) => { + if (middleware.applyBeforeValidation !== beforeValidation) { + return acc; + } + if (isPromise(acc)) { + return acc + .then(initialObj => Promise.all([ + initialObj, + middleware(initialObj, yargs), + ])) + .then(([initialObj, middlewareObj]) => Object.assign(initialObj, middlewareObj)); + } + else { + const result = middleware(acc, yargs); + if (beforeValidation && isPromise(result)) + throw beforeValidationError; + return isPromise(result) + ? result.then(middlewareObj => Object.assign(acc, middlewareObj)) + : Object.assign(acc, result); + } + }, argv); +} + +function getProcessArgvBinIndex() { + if (isBundledElectronApp()) + return 0; + return 1; +} +function isBundledElectronApp() { + return isElectronApp() && !process.defaultApp; +} +function isElectronApp() { + return !!process.versions.electron; +} +function hideBin(argv) { + return argv.slice(getProcessArgvBinIndex() + 1); +} +function getProcessArgvBin() { + return process.argv[getProcessArgvBinIndex()]; +} + +var processArgv = /*#__PURE__*/Object.freeze({ + __proto__: null, + hideBin: hideBin, + getProcessArgvBin: getProcessArgvBin +}); + +function whichModule(exported) { + if (typeof require === 'undefined') + return null; + for (let i = 0, files = Object.keys(require.cache), mod; i < files.length; i++) { + mod = require.cache[files[i]]; + if (mod.exports === exported) + return mod; + } + return null; +} + +const DEFAULT_MARKER = /(^\*)|(^\$0)/; +function command(yargs, usage, validation, globalMiddleware = [], shim) { + const self = {}; + let handlers = {}; + let aliasMap = {}; + let defaultCommand; + self.addHandler = function addHandler(cmd, description, builder, handler, commandMiddleware, deprecated) { + let aliases = []; + const middlewares = commandMiddlewareFactory(commandMiddleware); + handler = handler || (() => { }); + if (Array.isArray(cmd)) { + if (isCommandAndAliases(cmd)) { + [cmd, ...aliases] = cmd; + } + else { + for (const command of cmd) { + self.addHandler(command); + } + } + } + else if (isCommandHandlerDefinition(cmd)) { + let command = Array.isArray(cmd.command) || typeof cmd.command === 'string' + ? cmd.command + : moduleName(cmd); + if (cmd.aliases) + command = [].concat(command).concat(cmd.aliases); + self.addHandler(command, extractDesc(cmd), cmd.builder, cmd.handler, cmd.middlewares, cmd.deprecated); + return; + } + else if (isCommandBuilderDefinition(builder)) { + self.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler, builder.middlewares, builder.deprecated); + return; + } + if (typeof cmd === 'string') { + const parsedCommand = parseCommand(cmd); + aliases = aliases.map(alias => parseCommand(alias).cmd); + let isDefault = false; + const parsedAliases = [parsedCommand.cmd].concat(aliases).filter(c => { + if (DEFAULT_MARKER.test(c)) { + isDefault = true; + return false; + } + return true; + }); + if (parsedAliases.length === 0 && isDefault) + parsedAliases.push('$0'); + if (isDefault) { + parsedCommand.cmd = parsedAliases[0]; + aliases = parsedAliases.slice(1); + cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd); + } + aliases.forEach(alias => { + aliasMap[alias] = parsedCommand.cmd; + }); + if (description !== false) { + usage.command(cmd, description, isDefault, aliases, deprecated); + } + handlers[parsedCommand.cmd] = { + original: cmd, + description, + handler, + builder: builder || {}, + middlewares, + deprecated, + demanded: parsedCommand.demanded, + optional: parsedCommand.optional, + }; + if (isDefault) + defaultCommand = handlers[parsedCommand.cmd]; + } + }; + self.addDirectory = function addDirectory(dir, context, req, callerFile, opts) { + opts = opts || {}; + if (typeof opts.recurse !== 'boolean') + opts.recurse = false; + if (!Array.isArray(opts.extensions)) + opts.extensions = ['js']; + const parentVisit = typeof opts.visit === 'function' ? opts.visit : (o) => o; + opts.visit = function visit(obj, joined, filename) { + const visited = parentVisit(obj, joined, filename); + if (visited) { + if (~context.files.indexOf(joined)) + return visited; + context.files.push(joined); + self.addHandler(visited); + } + return visited; + }; + shim.requireDirectory({ require: req, filename: callerFile }, dir, opts); + }; + function moduleName(obj) { + const mod = whichModule(obj); + if (!mod) + throw new Error(`No command name given for module: ${shim.inspect(obj)}`); + return commandFromFilename(mod.filename); + } + function commandFromFilename(filename) { + return shim.path.basename(filename, shim.path.extname(filename)); + } + function extractDesc({ describe, description, desc, }) { + for (const test of [describe, description, desc]) { + if (typeof test === 'string' || test === false) + return test; + assertNotStrictEqual(test, true, shim); + } + return false; + } + self.getCommands = () => Object.keys(handlers).concat(Object.keys(aliasMap)); + self.getCommandHandlers = () => handlers; + self.hasDefaultCommand = () => !!defaultCommand; + self.runCommand = function runCommand(command, yargs, parsed, commandIndex) { + let aliases = parsed.aliases; + const commandHandler = handlers[command] || handlers[aliasMap[command]] || defaultCommand; + const currentContext = yargs.getContext(); + let numFiles = currentContext.files.length; + const parentCommands = currentContext.commands.slice(); + let innerArgv = parsed.argv; + let positionalMap = {}; + if (command) { + currentContext.commands.push(command); + currentContext.fullCommands.push(commandHandler.original); + } + const builder = commandHandler.builder; + if (isCommandBuilderCallback(builder)) { + const builderOutput = builder(yargs.reset(parsed.aliases)); + const innerYargs = isYargsInstance(builderOutput) ? builderOutput : yargs; + if (shouldUpdateUsage(innerYargs)) { + innerYargs + .getUsageInstance() + .usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description); + } + innerArgv = innerYargs._parseArgs(null, null, true, commandIndex); + aliases = innerYargs.parsed.aliases; + } + else if (isCommandBuilderOptionDefinitions(builder)) { + const innerYargs = yargs.reset(parsed.aliases); + if (shouldUpdateUsage(innerYargs)) { + innerYargs + .getUsageInstance() + .usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description); + } + Object.keys(commandHandler.builder).forEach(key => { + innerYargs.option(key, builder[key]); + }); + innerArgv = innerYargs._parseArgs(null, null, true, commandIndex); + aliases = innerYargs.parsed.aliases; + } + if (!yargs._hasOutput()) { + positionalMap = populatePositionals(commandHandler, innerArgv, currentContext); + } + const middlewares = globalMiddleware + .slice(0) + .concat(commandHandler.middlewares); + applyMiddleware(innerArgv, yargs, middlewares, true); + if (!yargs._hasOutput()) { + yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error, !command); + } + if (commandHandler.handler && !yargs._hasOutput()) { + yargs._setHasOutput(); + const populateDoubleDash = !!yargs.getOptions().configuration['populate--']; + yargs._postProcess(innerArgv, populateDoubleDash); + innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false); + let handlerResult; + if (isPromise(innerArgv)) { + handlerResult = innerArgv.then(argv => commandHandler.handler(argv)); + } + else { + handlerResult = commandHandler.handler(innerArgv); + } + const handlerFinishCommand = yargs.getHandlerFinishCommand(); + if (isPromise(handlerResult)) { + yargs.getUsageInstance().cacheHelpMessage(); + handlerResult + .then(value => { + if (handlerFinishCommand) { + handlerFinishCommand(value); + } + }) + .catch(error => { + try { + yargs.getUsageInstance().fail(null, error); + } + catch (err) { + } + }) + .then(() => { + yargs.getUsageInstance().clearCachedHelpMessage(); + }); + } + else { + if (handlerFinishCommand) { + handlerFinishCommand(handlerResult); + } + } + } + if (command) { + currentContext.commands.pop(); + currentContext.fullCommands.pop(); + } + numFiles = currentContext.files.length - numFiles; + if (numFiles > 0) + currentContext.files.splice(numFiles * -1, numFiles); + return innerArgv; + }; + function shouldUpdateUsage(yargs) { + return (!yargs.getUsageInstance().getUsageDisabled() && + yargs.getUsageInstance().getUsage().length === 0); + } + function usageFromParentCommandsCommandHandler(parentCommands, commandHandler) { + const c = DEFAULT_MARKER.test(commandHandler.original) + ? commandHandler.original.replace(DEFAULT_MARKER, '').trim() + : commandHandler.original; + const pc = parentCommands.filter(c => { + return !DEFAULT_MARKER.test(c); + }); + pc.push(c); + return `$0 ${pc.join(' ')}`; + } + self.runDefaultBuilderOn = function (yargs) { + assertNotStrictEqual(defaultCommand, undefined, shim); + if (shouldUpdateUsage(yargs)) { + const commandString = DEFAULT_MARKER.test(defaultCommand.original) + ? defaultCommand.original + : defaultCommand.original.replace(/^[^[\]<>]*/, '$0 '); + yargs.getUsageInstance().usage(commandString, defaultCommand.description); + } + const builder = defaultCommand.builder; + if (isCommandBuilderCallback(builder)) { + builder(yargs); + } + else if (!isCommandBuilderDefinition(builder)) { + Object.keys(builder).forEach(key => { + yargs.option(key, builder[key]); + }); + } + }; + function populatePositionals(commandHandler, argv, context) { + argv._ = argv._.slice(context.commands.length); + const demanded = commandHandler.demanded.slice(0); + const optional = commandHandler.optional.slice(0); + const positionalMap = {}; + validation.positionalCount(demanded.length, argv._.length); + while (demanded.length) { + const demand = demanded.shift(); + populatePositional(demand, argv, positionalMap); + } + while (optional.length) { + const maybe = optional.shift(); + populatePositional(maybe, argv, positionalMap); + } + argv._ = context.commands.concat(argv._.map(a => '' + a)); + postProcessPositionals(argv, positionalMap, self.cmdToParseOptions(commandHandler.original)); + return positionalMap; + } + function populatePositional(positional, argv, positionalMap) { + const cmd = positional.cmd[0]; + if (positional.variadic) { + positionalMap[cmd] = argv._.splice(0).map(String); + } + else { + if (argv._.length) + positionalMap[cmd] = [String(argv._.shift())]; + } + } + function postProcessPositionals(argv, positionalMap, parseOptions) { + const options = Object.assign({}, yargs.getOptions()); + options.default = Object.assign(parseOptions.default, options.default); + for (const key of Object.keys(parseOptions.alias)) { + options.alias[key] = (options.alias[key] || []).concat(parseOptions.alias[key]); + } + options.array = options.array.concat(parseOptions.array); + options.config = {}; + const unparsed = []; + Object.keys(positionalMap).forEach(key => { + positionalMap[key].map(value => { + if (options.configuration['unknown-options-as-args']) + options.key[key] = true; + unparsed.push(`--${key}`); + unparsed.push(value); + }); + }); + if (!unparsed.length) + return; + const config = Object.assign({}, options.configuration, { + 'populate--': true, + }); + const parsed = shim.Parser.detailed(unparsed, Object.assign({}, options, { + configuration: config, + })); + if (parsed.error) { + yargs.getUsageInstance().fail(parsed.error.message, parsed.error); + } + else { + const positionalKeys = Object.keys(positionalMap); + Object.keys(positionalMap).forEach(key => { + positionalKeys.push(...parsed.aliases[key]); + }); + Object.keys(parsed.argv).forEach(key => { + if (positionalKeys.indexOf(key) !== -1) { + if (!positionalMap[key]) + positionalMap[key] = parsed.argv[key]; + argv[key] = parsed.argv[key]; + } + }); + } + } + self.cmdToParseOptions = function (cmdString) { + const parseOptions = { + array: [], + default: {}, + alias: {}, + demand: {}, + }; + const parsed = parseCommand(cmdString); + parsed.demanded.forEach(d => { + const [cmd, ...aliases] = d.cmd; + if (d.variadic) { + parseOptions.array.push(cmd); + parseOptions.default[cmd] = []; + } + parseOptions.alias[cmd] = aliases; + parseOptions.demand[cmd] = true; + }); + parsed.optional.forEach(o => { + const [cmd, ...aliases] = o.cmd; + if (o.variadic) { + parseOptions.array.push(cmd); + parseOptions.default[cmd] = []; + } + parseOptions.alias[cmd] = aliases; + }); + return parseOptions; + }; + self.reset = () => { + handlers = {}; + aliasMap = {}; + defaultCommand = undefined; + return self; + }; + const frozens = []; + self.freeze = () => { + frozens.push({ + handlers, + aliasMap, + defaultCommand, + }); + }; + self.unfreeze = () => { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ handlers, aliasMap, defaultCommand } = frozen); + }; + return self; +} +function isCommandBuilderDefinition(builder) { + return (typeof builder === 'object' && + !!builder.builder && + typeof builder.handler === 'function'); +} +function isCommandAndAliases(cmd) { + if (cmd.every(c => typeof c === 'string')) { + return true; + } + else { + return false; + } +} +function isCommandBuilderCallback(builder) { + return typeof builder === 'function'; +} +function isCommandBuilderOptionDefinitions(builder) { + return typeof builder === 'object'; +} +function isCommandHandlerDefinition(cmd) { + return typeof cmd === 'object' && !Array.isArray(cmd); +} + +function setBlocking(blocking) { + if (typeof process === 'undefined') + return; + [process.stdout, process.stderr].forEach(_stream => { + const stream = _stream; + if (stream._handle && + stream.isTTY && + typeof stream._handle.setBlocking === 'function') { + stream._handle.setBlocking(blocking); + } + }); +} + +function usage(yargs, y18n, shim) { + const __ = y18n.__; + const self = {}; + const fails = []; + self.failFn = function failFn(f) { + fails.push(f); + }; + let failMessage = null; + let showHelpOnFail = true; + self.showHelpOnFail = function showHelpOnFailFn(arg1 = true, arg2) { + function parseFunctionArgs() { + return typeof arg1 === 'string' ? [true, arg1] : [arg1, arg2]; + } + const [enabled, message] = parseFunctionArgs(); + failMessage = message; + showHelpOnFail = enabled; + return self; + }; + let failureOutput = false; + self.fail = function fail(msg, err) { + const logger = yargs._getLoggerInstance(); + if (fails.length) { + for (let i = fails.length - 1; i >= 0; --i) { + fails[i](msg, err, self); + } + } + else { + if (yargs.getExitProcess()) + setBlocking(true); + if (!failureOutput) { + failureOutput = true; + if (showHelpOnFail) { + yargs.showHelp('error'); + logger.error(); + } + if (msg || err) + logger.error(msg || err); + if (failMessage) { + if (msg || err) + logger.error(''); + logger.error(failMessage); + } + } + err = err || new YError(msg); + if (yargs.getExitProcess()) { + return yargs.exit(1); + } + else if (yargs._hasParseCallback()) { + return yargs.exit(1, err); + } + else { + throw err; + } + } + }; + let usages = []; + let usageDisabled = false; + self.usage = (msg, description) => { + if (msg === null) { + usageDisabled = true; + usages = []; + return self; + } + usageDisabled = false; + usages.push([msg, description || '']); + return self; + }; + self.getUsage = () => { + return usages; + }; + self.getUsageDisabled = () => { + return usageDisabled; + }; + self.getPositionalGroupName = () => { + return __('Positionals:'); + }; + let examples = []; + self.example = (cmd, description) => { + examples.push([cmd, description || '']); + }; + let commands = []; + self.command = function command(cmd, description, isDefault, aliases, deprecated = false) { + if (isDefault) { + commands = commands.map(cmdArray => { + cmdArray[2] = false; + return cmdArray; + }); + } + commands.push([cmd, description || '', isDefault, aliases, deprecated]); + }; + self.getCommands = () => commands; + let descriptions = {}; + self.describe = function describe(keyOrKeys, desc) { + if (Array.isArray(keyOrKeys)) { + keyOrKeys.forEach(k => { + self.describe(k, desc); + }); + } + else if (typeof keyOrKeys === 'object') { + Object.keys(keyOrKeys).forEach(k => { + self.describe(k, keyOrKeys[k]); + }); + } + else { + descriptions[keyOrKeys] = desc; + } + }; + self.getDescriptions = () => descriptions; + let epilogs = []; + self.epilog = msg => { + epilogs.push(msg); + }; + let wrapSet = false; + let wrap; + self.wrap = cols => { + wrapSet = true; + wrap = cols; + }; + function getWrap() { + if (!wrapSet) { + wrap = windowWidth(); + wrapSet = true; + } + return wrap; + } + const deferY18nLookupPrefix = '__yargsString__:'; + self.deferY18nLookup = str => deferY18nLookupPrefix + str; + self.help = function help() { + if (cachedHelpMessage) + return cachedHelpMessage; + normalizeAliases(); + const base$0 = yargs.customScriptName + ? yargs.$0 + : shim.path.basename(yargs.$0); + const demandedOptions = yargs.getDemandedOptions(); + const demandedCommands = yargs.getDemandedCommands(); + const deprecatedOptions = yargs.getDeprecatedOptions(); + const groups = yargs.getGroups(); + const options = yargs.getOptions(); + let keys = []; + keys = keys.concat(Object.keys(descriptions)); + keys = keys.concat(Object.keys(demandedOptions)); + keys = keys.concat(Object.keys(demandedCommands)); + keys = keys.concat(Object.keys(options.default)); + keys = keys.filter(filterHiddenOptions); + keys = Object.keys(keys.reduce((acc, key) => { + if (key !== '_') + acc[key] = true; + return acc; + }, {})); + const theWrap = getWrap(); + const ui = shim.cliui({ + width: theWrap, + wrap: !!theWrap, + }); + if (!usageDisabled) { + if (usages.length) { + usages.forEach(usage => { + ui.div(`${usage[0].replace(/\$0/g, base$0)}`); + if (usage[1]) { + ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] }); + } + }); + ui.div(); + } + else if (commands.length) { + let u = null; + if (demandedCommands._) { + u = `${base$0} <${__('command')}>\n`; + } + else { + u = `${base$0} [${__('command')}]\n`; + } + ui.div(`${u}`); + } + } + if (commands.length) { + ui.div(__('Commands:')); + const context = yargs.getContext(); + const parentCommands = context.commands.length + ? `${context.commands.join(' ')} ` + : ''; + if (yargs.getParserConfiguration()['sort-commands'] === true) { + commands = commands.sort((a, b) => a[0].localeCompare(b[0])); + } + commands.forEach(command => { + const commandString = `${base$0} ${parentCommands}${command[0].replace(/^\$0 ?/, '')}`; + ui.span({ + text: commandString, + padding: [0, 2, 0, 2], + width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4, + }, { text: command[1] }); + const hints = []; + if (command[2]) + hints.push(`[${__('default')}]`); + if (command[3] && command[3].length) { + hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`); + } + if (command[4]) { + if (typeof command[4] === 'string') { + hints.push(`[${__('deprecated: %s', command[4])}]`); + } + else { + hints.push(`[${__('deprecated')}]`); + } + } + if (hints.length) { + ui.div({ + text: hints.join(' '), + padding: [0, 0, 0, 2], + align: 'right', + }); + } + else { + ui.div(); + } + }); + ui.div(); + } + const aliasKeys = (Object.keys(options.alias) || []).concat(Object.keys(yargs.parsed.newAliases) || []); + keys = keys.filter(key => !yargs.parsed.newAliases[key] && + aliasKeys.every(alias => (options.alias[alias] || []).indexOf(key) === -1)); + const defaultGroup = __('Options:'); + if (!groups[defaultGroup]) + groups[defaultGroup] = []; + addUngroupedKeys(keys, options.alias, groups, defaultGroup); + const isLongSwitch = (sw) => /^--/.test(getText(sw)); + const displayedGroups = Object.keys(groups) + .filter(groupName => groups[groupName].length > 0) + .map(groupName => { + const normalizedKeys = groups[groupName] + .filter(filterHiddenOptions) + .map(key => { + if (~aliasKeys.indexOf(key)) + return key; + for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) { + if (~(options.alias[aliasKey] || []).indexOf(key)) + return aliasKey; + } + return key; + }); + return { groupName, normalizedKeys }; + }) + .filter(({ normalizedKeys }) => normalizedKeys.length > 0) + .map(({ groupName, normalizedKeys }) => { + const switches = normalizedKeys.reduce((acc, key) => { + acc[key] = [key] + .concat(options.alias[key] || []) + .map(sw => { + if (groupName === self.getPositionalGroupName()) + return sw; + else { + return ((/^[0-9]$/.test(sw) + ? ~options.boolean.indexOf(key) + ? '-' + : '--' + : sw.length > 1 + ? '--' + : '-') + sw); + } + }) + .sort((sw1, sw2) => isLongSwitch(sw1) === isLongSwitch(sw2) + ? 0 + : isLongSwitch(sw1) + ? 1 + : -1) + .join(', '); + return acc; + }, {}); + return { groupName, normalizedKeys, switches }; + }); + const shortSwitchesUsed = displayedGroups + .filter(({ groupName }) => groupName !== self.getPositionalGroupName()) + .some(({ normalizedKeys, switches }) => !normalizedKeys.every(key => isLongSwitch(switches[key]))); + if (shortSwitchesUsed) { + displayedGroups + .filter(({ groupName }) => groupName !== self.getPositionalGroupName()) + .forEach(({ normalizedKeys, switches }) => { + normalizedKeys.forEach(key => { + if (isLongSwitch(switches[key])) { + switches[key] = addIndentation(switches[key], '-x, '.length); + } + }); + }); + } + displayedGroups.forEach(({ groupName, normalizedKeys, switches }) => { + ui.div(groupName); + normalizedKeys.forEach(key => { + const kswitch = switches[key]; + let desc = descriptions[key] || ''; + let type = null; + if (~desc.lastIndexOf(deferY18nLookupPrefix)) + desc = __(desc.substring(deferY18nLookupPrefix.length)); + if (~options.boolean.indexOf(key)) + type = `[${__('boolean')}]`; + if (~options.count.indexOf(key)) + type = `[${__('count')}]`; + if (~options.string.indexOf(key)) + type = `[${__('string')}]`; + if (~options.normalize.indexOf(key)) + type = `[${__('string')}]`; + if (~options.array.indexOf(key)) + type = `[${__('array')}]`; + if (~options.number.indexOf(key)) + type = `[${__('number')}]`; + const deprecatedExtra = (deprecated) => typeof deprecated === 'string' + ? `[${__('deprecated: %s', deprecated)}]` + : `[${__('deprecated')}]`; + const extra = [ + key in deprecatedOptions + ? deprecatedExtra(deprecatedOptions[key]) + : null, + type, + key in demandedOptions ? `[${__('required')}]` : null, + options.choices && options.choices[key] + ? `[${__('choices:')} ${self.stringifiedValues(options.choices[key])}]` + : null, + defaultString(options.default[key], options.defaultDescription[key]), + ] + .filter(Boolean) + .join(' '); + ui.span({ + text: getText(kswitch), + padding: [0, 2, 0, 2 + getIndentation(kswitch)], + width: maxWidth(switches, theWrap) + 4, + }, desc); + if (extra) + ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' }); + else + ui.div(); + }); + ui.div(); + }); + if (examples.length) { + ui.div(__('Examples:')); + examples.forEach(example => { + example[0] = example[0].replace(/\$0/g, base$0); + }); + examples.forEach(example => { + if (example[1] === '') { + ui.div({ + text: example[0], + padding: [0, 2, 0, 2], + }); + } + else { + ui.div({ + text: example[0], + padding: [0, 2, 0, 2], + width: maxWidth(examples, theWrap) + 4, + }, { + text: example[1], + }); + } + }); + ui.div(); + } + if (epilogs.length > 0) { + const e = epilogs + .map(epilog => epilog.replace(/\$0/g, base$0)) + .join('\n'); + ui.div(`${e}\n`); + } + return ui.toString().replace(/\s*$/, ''); + }; + function maxWidth(table, theWrap, modifier) { + let width = 0; + if (!Array.isArray(table)) { + table = Object.values(table).map(v => [v]); + } + table.forEach(v => { + width = Math.max(shim.stringWidth(modifier ? `${modifier} ${getText(v[0])}` : getText(v[0])) + getIndentation(v[0]), width); + }); + if (theWrap) + width = Math.min(width, parseInt((theWrap * 0.5).toString(), 10)); + return width; + } + function normalizeAliases() { + const demandedOptions = yargs.getDemandedOptions(); + const options = yargs.getOptions(); + (Object.keys(options.alias) || []).forEach(key => { + options.alias[key].forEach(alias => { + if (descriptions[alias]) + self.describe(key, descriptions[alias]); + if (alias in demandedOptions) + yargs.demandOption(key, demandedOptions[alias]); + if (~options.boolean.indexOf(alias)) + yargs.boolean(key); + if (~options.count.indexOf(alias)) + yargs.count(key); + if (~options.string.indexOf(alias)) + yargs.string(key); + if (~options.normalize.indexOf(alias)) + yargs.normalize(key); + if (~options.array.indexOf(alias)) + yargs.array(key); + if (~options.number.indexOf(alias)) + yargs.number(key); + }); + }); + } + let cachedHelpMessage; + self.cacheHelpMessage = function () { + cachedHelpMessage = this.help(); + }; + self.clearCachedHelpMessage = function () { + cachedHelpMessage = undefined; + }; + function addUngroupedKeys(keys, aliases, groups, defaultGroup) { + let groupedKeys = []; + let toCheck = null; + Object.keys(groups).forEach(group => { + groupedKeys = groupedKeys.concat(groups[group]); + }); + keys.forEach(key => { + toCheck = [key].concat(aliases[key]); + if (!toCheck.some(k => groupedKeys.indexOf(k) !== -1)) { + groups[defaultGroup].push(key); + } + }); + return groupedKeys; + } + function filterHiddenOptions(key) { + return (yargs.getOptions().hiddenOptions.indexOf(key) < 0 || + yargs.parsed.argv[yargs.getOptions().showHiddenOpt]); + } + self.showHelp = (level) => { + const logger = yargs._getLoggerInstance(); + if (!level) + level = 'error'; + const emit = typeof level === 'function' ? level : logger[level]; + emit(self.help()); + }; + self.functionDescription = fn => { + const description = fn.name + ? shim.Parser.decamelize(fn.name, '-') + : __('generated-value'); + return ['(', description, ')'].join(''); + }; + self.stringifiedValues = function stringifiedValues(values, separator) { + let string = ''; + const sep = separator || ', '; + const array = [].concat(values); + if (!values || !array.length) + return string; + array.forEach(value => { + if (string.length) + string += sep; + string += JSON.stringify(value); + }); + return string; + }; + function defaultString(value, defaultDescription) { + let string = `[${__('default:')} `; + if (value === undefined && !defaultDescription) + return null; + if (defaultDescription) { + string += defaultDescription; + } + else { + switch (typeof value) { + case 'string': + string += `"${value}"`; + break; + case 'object': + string += JSON.stringify(value); + break; + default: + string += value; + } + } + return `${string}]`; + } + function windowWidth() { + const maxWidth = 80; + if (shim.process.stdColumns) { + return Math.min(maxWidth, shim.process.stdColumns); + } + else { + return maxWidth; + } + } + let version = null; + self.version = ver => { + version = ver; + }; + self.showVersion = () => { + const logger = yargs._getLoggerInstance(); + logger.log(version); + }; + self.reset = function reset(localLookup) { + failMessage = null; + failureOutput = false; + usages = []; + usageDisabled = false; + epilogs = []; + examples = []; + commands = []; + descriptions = objFilter(descriptions, k => !localLookup[k]); + return self; + }; + const frozens = []; + self.freeze = function freeze() { + frozens.push({ + failMessage, + failureOutput, + usages, + usageDisabled, + epilogs, + examples, + commands, + descriptions, + }); + }; + self.unfreeze = function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ + failMessage, + failureOutput, + usages, + usageDisabled, + epilogs, + examples, + commands, + descriptions, + } = frozen); + }; + return self; +} +function isIndentedText(text) { + return typeof text === 'object'; +} +function addIndentation(text, indent) { + return isIndentedText(text) + ? { text: text.text, indentation: text.indentation + indent } + : { text, indentation: indent }; +} +function getIndentation(text) { + return isIndentedText(text) ? text.indentation : 0; +} +function getText(text) { + return isIndentedText(text) ? text.text : text; +} + +const completionShTemplate = `###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc +# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX. +# +_yargs_completions() +{ + local cur_word args type_list + + cur_word="\${COMP_WORDS[COMP_CWORD]}" + args=("\${COMP_WORDS[@]}") + + # ask yargs to generate completions. + type_list=$({{app_path}} --get-yargs-completions "\${args[@]}") + + COMPREPLY=( $(compgen -W "\${type_list}" -- \${cur_word}) ) + + # if no match was found, fall back to filename completion + if [ \${#COMPREPLY[@]} -eq 0 ]; then + COMPREPLY=() + fi + + return 0 +} +complete -o default -F _yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +`; +const completionZshTemplate = `###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc +# or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX. +# +_{{app_name}}_yargs_completions() +{ + local reply + local si=$IFS + IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "\${words[@]}")) + IFS=$si + _describe 'values' reply +} +compdef _{{app_name}}_yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +`; + +function completion(yargs, usage, command, shim) { + const self = { + completionKey: 'get-yargs-completions', + }; + let aliases; + self.setParsed = function setParsed(parsed) { + aliases = parsed.aliases; + }; + const zshShell = (shim.getEnv('SHELL') && shim.getEnv('SHELL').indexOf('zsh') !== -1) || + (shim.getEnv('ZSH_NAME') && shim.getEnv('ZSH_NAME').indexOf('zsh') !== -1); + self.getCompletion = function getCompletion(args, done) { + const completions = []; + const current = args.length ? args[args.length - 1] : ''; + const argv = yargs.parse(args, true); + const parentCommands = yargs.getContext().commands; + function runCompletionFunction(argv) { + assertNotStrictEqual(completionFunction, null, shim); + if (isSyncCompletionFunction(completionFunction)) { + const result = completionFunction(current, argv); + if (isPromise(result)) { + return result + .then(list => { + shim.process.nextTick(() => { + done(list); + }); + }) + .catch(err => { + shim.process.nextTick(() => { + throw err; + }); + }); + } + return done(result); + } + else { + return completionFunction(current, argv, completions => { + done(completions); + }); + } + } + if (completionFunction) { + return isPromise(argv) + ? argv.then(runCompletionFunction) + : runCompletionFunction(argv); + } + const handlers = command.getCommandHandlers(); + for (let i = 0, ii = args.length; i < ii; ++i) { + if (handlers[args[i]] && handlers[args[i]].builder) { + const builder = handlers[args[i]].builder; + if (isCommandBuilderCallback(builder)) { + const y = yargs.reset(); + builder(y); + return y.argv; + } + } + } + if (!current.match(/^-/) && + parentCommands[parentCommands.length - 1] !== current) { + usage.getCommands().forEach(usageCommand => { + const commandName = parseCommand(usageCommand[0]).cmd; + if (args.indexOf(commandName) === -1) { + if (!zshShell) { + completions.push(commandName); + } + else { + const desc = usageCommand[1] || ''; + completions.push(commandName.replace(/:/g, '\\:') + ':' + desc); + } + } + }); + } + if (current.match(/^-/) || (current === '' && completions.length === 0)) { + const descs = usage.getDescriptions(); + const options = yargs.getOptions(); + Object.keys(options.key).forEach(key => { + const negable = !!options.configuration['boolean-negation'] && + options.boolean.includes(key); + let keyAndAliases = [key].concat(aliases[key] || []); + if (negable) + keyAndAliases = keyAndAliases.concat(keyAndAliases.map(key => `no-${key}`)); + function completeOptionKey(key) { + const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1); + if (notInArgs) { + const startsByTwoDashes = (s) => /^--/.test(s); + const isShortOption = (s) => /^[^0-9]$/.test(s); + const dashes = !startsByTwoDashes(current) && isShortOption(key) ? '-' : '--'; + if (!zshShell) { + completions.push(dashes + key); + } + else { + const desc = descs[key] || ''; + completions.push(dashes + + `${key.replace(/:/g, '\\:')}:${desc.replace('__yargsString__:', '')}`); + } + } + } + completeOptionKey(key); + if (negable && !!options.default[key]) + completeOptionKey(`no-${key}`); + }); + } + done(completions); + }; + self.generateCompletionScript = function generateCompletionScript($0, cmd) { + let script = zshShell + ? completionZshTemplate + : completionShTemplate; + const name = shim.path.basename($0); + if ($0.match(/\.js$/)) + $0 = `./${$0}`; + script = script.replace(/{{app_name}}/g, name); + script = script.replace(/{{completion_command}}/g, cmd); + return script.replace(/{{app_path}}/g, $0); + }; + let completionFunction = null; + self.registerFunction = fn => { + completionFunction = fn; + }; + return self; +} +function isSyncCompletionFunction(completionFunction) { + return completionFunction.length < 3; +} + +function levenshtein(a, b) { + if (a.length === 0) + return b.length; + if (b.length === 0) + return a.length; + const matrix = []; + let i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } + let j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) === a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } + else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)); + } + } + } + return matrix[b.length][a.length]; +} + +const specialKeys = ['$0', '--', '_']; +function validation(yargs, usage, y18n, shim) { + const __ = y18n.__; + const __n = y18n.__n; + const self = {}; + self.nonOptionCount = function nonOptionCount(argv) { + const demandedCommands = yargs.getDemandedCommands(); + const positionalCount = argv._.length + (argv['--'] ? argv['--'].length : 0); + const _s = positionalCount - yargs.getContext().commands.length; + if (demandedCommands._ && + (_s < demandedCommands._.min || _s > demandedCommands._.max)) { + if (_s < demandedCommands._.min) { + if (demandedCommands._.minMsg !== undefined) { + usage.fail(demandedCommands._.minMsg + ? demandedCommands._.minMsg + .replace(/\$0/g, _s.toString()) + .replace(/\$1/, demandedCommands._.min.toString()) + : null); + } + else { + usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', _s, _s.toString(), demandedCommands._.min.toString())); + } + } + else if (_s > demandedCommands._.max) { + if (demandedCommands._.maxMsg !== undefined) { + usage.fail(demandedCommands._.maxMsg + ? demandedCommands._.maxMsg + .replace(/\$0/g, _s.toString()) + .replace(/\$1/, demandedCommands._.max.toString()) + : null); + } + else { + usage.fail(__n('Too many non-option arguments: got %s, maximum of %s', 'Too many non-option arguments: got %s, maximum of %s', _s, _s.toString(), demandedCommands._.max.toString())); + } + } + } + }; + self.positionalCount = function positionalCount(required, observed) { + if (observed < required) { + usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', observed, observed + '', required + '')); + } + }; + self.requiredArguments = function requiredArguments(argv) { + const demandedOptions = yargs.getDemandedOptions(); + let missing = null; + for (const key of Object.keys(demandedOptions)) { + if (!Object.prototype.hasOwnProperty.call(argv, key) || + typeof argv[key] === 'undefined') { + missing = missing || {}; + missing[key] = demandedOptions[key]; + } + } + if (missing) { + const customMsgs = []; + for (const key of Object.keys(missing)) { + const msg = missing[key]; + if (msg && customMsgs.indexOf(msg) < 0) { + customMsgs.push(msg); + } + } + const customMsg = customMsgs.length ? `\n${customMsgs.join('\n')}` : ''; + usage.fail(__n('Missing required argument: %s', 'Missing required arguments: %s', Object.keys(missing).length, Object.keys(missing).join(', ') + customMsg)); + } + }; + self.unknownArguments = function unknownArguments(argv, aliases, positionalMap, isDefaultCommand, checkPositionals = true) { + const commandKeys = yargs.getCommandInstance().getCommands(); + const unknown = []; + const currentContext = yargs.getContext(); + Object.keys(argv).forEach(key => { + if (specialKeys.indexOf(key) === -1 && + !Object.prototype.hasOwnProperty.call(positionalMap, key) && + !Object.prototype.hasOwnProperty.call(yargs._getParseContext(), key) && + !self.isValidAndSomeAliasIsNotNew(key, aliases)) { + unknown.push(key); + } + }); + if (checkPositionals && + (currentContext.commands.length > 0 || + commandKeys.length > 0 || + isDefaultCommand)) { + argv._.slice(currentContext.commands.length).forEach(key => { + if (commandKeys.indexOf('' + key) === -1) { + unknown.push('' + key); + } + }); + } + if (unknown.length > 0) { + usage.fail(__n('Unknown argument: %s', 'Unknown arguments: %s', unknown.length, unknown.join(', '))); + } + }; + self.unknownCommands = function unknownCommands(argv) { + const commandKeys = yargs.getCommandInstance().getCommands(); + const unknown = []; + const currentContext = yargs.getContext(); + if (currentContext.commands.length > 0 || commandKeys.length > 0) { + argv._.slice(currentContext.commands.length).forEach(key => { + if (commandKeys.indexOf('' + key) === -1) { + unknown.push('' + key); + } + }); + } + if (unknown.length > 0) { + usage.fail(__n('Unknown command: %s', 'Unknown commands: %s', unknown.length, unknown.join(', '))); + return true; + } + else { + return false; + } + }; + self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew(key, aliases) { + if (!Object.prototype.hasOwnProperty.call(aliases, key)) { + return false; + } + const newAliases = yargs.parsed.newAliases; + for (const a of [key, ...aliases[key]]) { + if (!Object.prototype.hasOwnProperty.call(newAliases, a) || + !newAliases[key]) { + return true; + } + } + return false; + }; + self.limitedChoices = function limitedChoices(argv) { + const options = yargs.getOptions(); + const invalid = {}; + if (!Object.keys(options.choices).length) + return; + Object.keys(argv).forEach(key => { + if (specialKeys.indexOf(key) === -1 && + Object.prototype.hasOwnProperty.call(options.choices, key)) { + [].concat(argv[key]).forEach(value => { + if (options.choices[key].indexOf(value) === -1 && + value !== undefined) { + invalid[key] = (invalid[key] || []).concat(value); + } + }); + } + }); + const invalidKeys = Object.keys(invalid); + if (!invalidKeys.length) + return; + let msg = __('Invalid values:'); + invalidKeys.forEach(key => { + msg += `\n ${__('Argument: %s, Given: %s, Choices: %s', key, usage.stringifiedValues(invalid[key]), usage.stringifiedValues(options.choices[key]))}`; + }); + usage.fail(msg); + }; + let checks = []; + self.check = function check(f, global) { + checks.push({ + func: f, + global, + }); + }; + self.customChecks = function customChecks(argv, aliases) { + for (let i = 0, f; (f = checks[i]) !== undefined; i++) { + const func = f.func; + let result = null; + try { + result = func(argv, aliases); + } + catch (err) { + usage.fail(err.message ? err.message : err, err); + continue; + } + if (!result) { + usage.fail(__('Argument check failed: %s', func.toString())); + } + else if (typeof result === 'string' || result instanceof Error) { + usage.fail(result.toString(), result); + } + } + }; + let implied = {}; + self.implies = function implies(key, value) { + argsert(' [array|number|string]', [key, value], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.implies(k, key[k]); + }); + } + else { + yargs.global(key); + if (!implied[key]) { + implied[key] = []; + } + if (Array.isArray(value)) { + value.forEach(i => self.implies(key, i)); + } + else { + assertNotStrictEqual(value, undefined, shim); + implied[key].push(value); + } + } + }; + self.getImplied = function getImplied() { + return implied; + }; + function keyExists(argv, val) { + const num = Number(val); + val = isNaN(num) ? val : num; + if (typeof val === 'number') { + val = argv._.length >= val; + } + else if (val.match(/^--no-.+/)) { + val = val.match(/^--no-(.+)/)[1]; + val = !argv[val]; + } + else { + val = argv[val]; + } + return val; + } + self.implications = function implications(argv) { + const implyFail = []; + Object.keys(implied).forEach(key => { + const origKey = key; + (implied[key] || []).forEach(value => { + let key = origKey; + const origValue = value; + key = keyExists(argv, key); + value = keyExists(argv, value); + if (key && !value) { + implyFail.push(` ${origKey} -> ${origValue}`); + } + }); + }); + if (implyFail.length) { + let msg = `${__('Implications failed:')}\n`; + implyFail.forEach(value => { + msg += value; + }); + usage.fail(msg); + } + }; + let conflicting = {}; + self.conflicts = function conflicts(key, value) { + argsert(' [array|string]', [key, value], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.conflicts(k, key[k]); + }); + } + else { + yargs.global(key); + if (!conflicting[key]) { + conflicting[key] = []; + } + if (Array.isArray(value)) { + value.forEach(i => self.conflicts(key, i)); + } + else { + conflicting[key].push(value); + } + } + }; + self.getConflicting = () => conflicting; + self.conflicting = function conflictingFn(argv) { + Object.keys(argv).forEach(key => { + if (conflicting[key]) { + conflicting[key].forEach(value => { + if (value && argv[key] !== undefined && argv[value] !== undefined) { + usage.fail(__('Arguments %s and %s are mutually exclusive', key, value)); + } + }); + } + }); + }; + self.recommendCommands = function recommendCommands(cmd, potentialCommands) { + const threshold = 3; + potentialCommands = potentialCommands.sort((a, b) => b.length - a.length); + let recommended = null; + let bestDistance = Infinity; + for (let i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) { + const d = levenshtein(cmd, candidate); + if (d <= threshold && d < bestDistance) { + bestDistance = d; + recommended = candidate; + } + } + if (recommended) + usage.fail(__('Did you mean %s?', recommended)); + }; + self.reset = function reset(localLookup) { + implied = objFilter(implied, k => !localLookup[k]); + conflicting = objFilter(conflicting, k => !localLookup[k]); + checks = checks.filter(c => c.global); + return self; + }; + const frozens = []; + self.freeze = function freeze() { + frozens.push({ + implied, + checks, + conflicting, + }); + }; + self.unfreeze = function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ implied, checks, conflicting } = frozen); + }; + return self; +} + +let shim$1; +function YargsWithShim(_shim) { + shim$1 = _shim; + return Yargs; +} +function Yargs(processArgs = [], cwd = shim$1.process.cwd(), parentRequire) { + const self = {}; + let command$1; + let completion$1 = null; + let groups = {}; + const globalMiddleware = []; + let output = ''; + const preservedGroups = {}; + let usage$1; + let validation$1; + let handlerFinishCommand = null; + const y18n = shim$1.y18n; + self.middleware = globalMiddlewareFactory(globalMiddleware, self); + self.scriptName = function (scriptName) { + self.customScriptName = true; + self.$0 = scriptName; + return self; + }; + let default$0; + if (/\b(node|iojs|electron)(\.exe)?$/.test(shim$1.process.argv()[0])) { + default$0 = shim$1.process.argv().slice(1, 2); + } + else { + default$0 = shim$1.process.argv().slice(0, 1); + } + self.$0 = default$0 + .map(x => { + const b = rebase(cwd, x); + return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x; + }) + .join(' ') + .trim(); + if (shim$1.getEnv('_') && shim$1.getProcessArgvBin() === shim$1.getEnv('_')) { + self.$0 = shim$1 + .getEnv('_') + .replace(`${shim$1.path.dirname(shim$1.process.execPath())}/`, ''); + } + const context = { resets: -1, commands: [], fullCommands: [], files: [] }; + self.getContext = () => context; + let hasOutput = false; + let exitError = null; + self.exit = (code, err) => { + hasOutput = true; + exitError = err; + if (exitProcess) + shim$1.process.exit(code); + }; + let completionCommand = null; + self.completion = function (cmd, desc, fn) { + argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length); + if (typeof desc === 'function') { + fn = desc; + desc = undefined; + } + completionCommand = cmd || completionCommand || 'completion'; + if (!desc && desc !== false) { + desc = 'generate completion script'; + } + self.command(completionCommand, desc); + if (fn) + completion$1.registerFunction(fn); + return self; + }; + let options; + self.resetOptions = self.reset = function resetOptions(aliases = {}) { + context.resets++; + options = options || {}; + const tmpOptions = {}; + tmpOptions.local = options.local ? options.local : []; + tmpOptions.configObjects = options.configObjects + ? options.configObjects + : []; + const localLookup = {}; + tmpOptions.local.forEach(l => { + localLookup[l] = true; + (aliases[l] || []).forEach(a => { + localLookup[a] = true; + }); + }); + Object.assign(preservedGroups, Object.keys(groups).reduce((acc, groupName) => { + const keys = groups[groupName].filter(key => !(key in localLookup)); + if (keys.length > 0) { + acc[groupName] = keys; + } + return acc; + }, {})); + groups = {}; + const arrayOptions = [ + 'array', + 'boolean', + 'string', + 'skipValidation', + 'count', + 'normalize', + 'number', + 'hiddenOptions', + ]; + const objectOptions = [ + 'narg', + 'key', + 'alias', + 'default', + 'defaultDescription', + 'config', + 'choices', + 'demandedOptions', + 'demandedCommands', + 'coerce', + 'deprecatedOptions', + ]; + arrayOptions.forEach(k => { + tmpOptions[k] = (options[k] || []).filter((k) => !localLookup[k]); + }); + objectOptions.forEach((k) => { + tmpOptions[k] = objFilter(options[k], k => !localLookup[k]); + }); + tmpOptions.envPrefix = options.envPrefix; + options = tmpOptions; + usage$1 = usage$1 ? usage$1.reset(localLookup) : usage(self, y18n, shim$1); + validation$1 = validation$1 + ? validation$1.reset(localLookup) + : validation(self, usage$1, y18n, shim$1); + command$1 = command$1 + ? command$1.reset() + : command(self, usage$1, validation$1, globalMiddleware, shim$1); + if (!completion$1) + completion$1 = completion(self, usage$1, command$1, shim$1); + completionCommand = null; + output = ''; + exitError = null; + hasOutput = false; + self.parsed = false; + return self; + }; + self.resetOptions(); + const frozens = []; + function freeze() { + frozens.push({ + options, + configObjects: options.configObjects.slice(0), + exitProcess, + groups, + strict, + strictCommands, + strictOptions, + completionCommand, + output, + exitError, + hasOutput, + parsed: self.parsed, + parseFn, + parseContext, + handlerFinishCommand, + }); + usage$1.freeze(); + validation$1.freeze(); + command$1.freeze(); + } + function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim$1); + let configObjects; + ({ + options, + configObjects, + exitProcess, + groups, + output, + exitError, + hasOutput, + parsed: self.parsed, + strict, + strictCommands, + strictOptions, + completionCommand, + parseFn, + parseContext, + handlerFinishCommand, + } = frozen); + options.configObjects = configObjects; + usage$1.unfreeze(); + validation$1.unfreeze(); + command$1.unfreeze(); + } + self.boolean = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('boolean', keys); + return self; + }; + self.array = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('array', keys); + return self; + }; + self.number = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('number', keys); + return self; + }; + self.normalize = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('normalize', keys); + return self; + }; + self.count = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('count', keys); + return self; + }; + self.string = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('string', keys); + return self; + }; + self.requiresArg = function (keys) { + argsert(' [number]', [keys], arguments.length); + if (typeof keys === 'string' && options.narg[keys]) { + return self; + } + else { + populateParserHintSingleValueDictionary(self.requiresArg, 'narg', keys, NaN); + } + return self; + }; + self.skipValidation = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('skipValidation', keys); + return self; + }; + function populateParserHintArray(type, keys) { + keys = [].concat(keys); + keys.forEach(key => { + key = sanitizeKey(key); + options[type].push(key); + }); + } + self.nargs = function (key, value) { + argsert(' [number]', [key, value], arguments.length); + populateParserHintSingleValueDictionary(self.nargs, 'narg', key, value); + return self; + }; + self.choices = function (key, value) { + argsert(' [string|array]', [key, value], arguments.length); + populateParserHintArrayDictionary(self.choices, 'choices', key, value); + return self; + }; + self.alias = function (key, value) { + argsert(' [string|array]', [key, value], arguments.length); + populateParserHintArrayDictionary(self.alias, 'alias', key, value); + return self; + }; + self.default = self.defaults = function (key, value, defaultDescription) { + argsert(' [*] [string]', [key, value, defaultDescription], arguments.length); + if (defaultDescription) { + assertSingleKey(key, shim$1); + options.defaultDescription[key] = defaultDescription; + } + if (typeof value === 'function') { + assertSingleKey(key, shim$1); + if (!options.defaultDescription[key]) + options.defaultDescription[key] = usage$1.functionDescription(value); + value = value.call(); + } + populateParserHintSingleValueDictionary(self.default, 'default', key, value); + return self; + }; + self.describe = function (key, desc) { + argsert(' [string]', [key, desc], arguments.length); + setKey(key, true); + usage$1.describe(key, desc); + return self; + }; + function setKey(key, set) { + populateParserHintSingleValueDictionary(setKey, 'key', key, set); + return self; + } + function demandOption(keys, msg) { + argsert(' [string]', [keys, msg], arguments.length); + populateParserHintSingleValueDictionary(self.demandOption, 'demandedOptions', keys, msg); + return self; + } + self.demandOption = demandOption; + self.coerce = function (keys, value) { + argsert(' [function]', [keys, value], arguments.length); + populateParserHintSingleValueDictionary(self.coerce, 'coerce', keys, value); + return self; + }; + function populateParserHintSingleValueDictionary(builder, type, key, value) { + populateParserHintDictionary(builder, type, key, value, (type, key, value) => { + options[type][key] = value; + }); + } + function populateParserHintArrayDictionary(builder, type, key, value) { + populateParserHintDictionary(builder, type, key, value, (type, key, value) => { + options[type][key] = (options[type][key] || []).concat(value); + }); + } + function populateParserHintDictionary(builder, type, key, value, singleKeyHandler) { + if (Array.isArray(key)) { + key.forEach(k => { + builder(k, value); + }); + } + else if (((key) => typeof key === 'object')(key)) { + for (const k of objectKeys(key)) { + builder(k, key[k]); + } + } + else { + singleKeyHandler(type, sanitizeKey(key), value); + } + } + function sanitizeKey(key) { + if (key === '__proto__') + return '___proto___'; + return key; + } + function deleteFromParserHintObject(optionKey) { + objectKeys(options).forEach((hintKey) => { + if (((key) => key === 'configObjects')(hintKey)) + return; + const hint = options[hintKey]; + if (Array.isArray(hint)) { + if (~hint.indexOf(optionKey)) + hint.splice(hint.indexOf(optionKey), 1); + } + else if (typeof hint === 'object') { + delete hint[optionKey]; + } + }); + delete usage$1.getDescriptions()[optionKey]; + } + self.config = function config(key = 'config', msg, parseFn) { + argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length); + if (typeof key === 'object' && !Array.isArray(key)) { + key = applyExtends(key, cwd, self.getParserConfiguration()['deep-merge-config'] || false, shim$1); + options.configObjects = (options.configObjects || []).concat(key); + return self; + } + if (typeof msg === 'function') { + parseFn = msg; + msg = undefined; + } + self.describe(key, msg || usage$1.deferY18nLookup('Path to JSON config file')); + (Array.isArray(key) ? key : [key]).forEach(k => { + options.config[k] = parseFn || true; + }); + return self; + }; + self.example = function (cmd, description) { + argsert(' [string]', [cmd, description], arguments.length); + if (Array.isArray(cmd)) { + cmd.forEach(exampleParams => self.example(...exampleParams)); + } + else { + usage$1.example(cmd, description); + } + return self; + }; + self.command = function (cmd, description, builder, handler, middlewares, deprecated) { + argsert(' [string|boolean] [function|object] [function] [array] [boolean|string]', [cmd, description, builder, handler, middlewares, deprecated], arguments.length); + command$1.addHandler(cmd, description, builder, handler, middlewares, deprecated); + return self; + }; + self.commandDir = function (dir, opts) { + argsert(' [object]', [dir, opts], arguments.length); + const req = parentRequire || shim$1.require; + command$1.addDirectory(dir, self.getContext(), req, shim$1.getCallerFile(), opts); + return self; + }; + self.demand = self.required = self.require = function demand(keys, max, msg) { + if (Array.isArray(max)) { + max.forEach(key => { + assertNotStrictEqual(msg, true, shim$1); + demandOption(key, msg); + }); + max = Infinity; + } + else if (typeof max !== 'number') { + msg = max; + max = Infinity; + } + if (typeof keys === 'number') { + assertNotStrictEqual(msg, true, shim$1); + self.demandCommand(keys, max, msg, msg); + } + else if (Array.isArray(keys)) { + keys.forEach(key => { + assertNotStrictEqual(msg, true, shim$1); + demandOption(key, msg); + }); + } + else { + if (typeof msg === 'string') { + demandOption(keys, msg); + } + else if (msg === true || typeof msg === 'undefined') { + demandOption(keys); + } + } + return self; + }; + self.demandCommand = function demandCommand(min = 1, max, minMsg, maxMsg) { + argsert('[number] [number|string] [string|null|undefined] [string|null|undefined]', [min, max, minMsg, maxMsg], arguments.length); + if (typeof max !== 'number') { + minMsg = max; + max = Infinity; + } + self.global('_', false); + options.demandedCommands._ = { + min, + max, + minMsg, + maxMsg, + }; + return self; + }; + self.getDemandedOptions = () => { + argsert([], 0); + return options.demandedOptions; + }; + self.getDemandedCommands = () => { + argsert([], 0); + return options.demandedCommands; + }; + self.deprecateOption = function deprecateOption(option, message) { + argsert(' [string|boolean]', [option, message], arguments.length); + options.deprecatedOptions[option] = message; + return self; + }; + self.getDeprecatedOptions = () => { + argsert([], 0); + return options.deprecatedOptions; + }; + self.implies = function (key, value) { + argsert(' [number|string|array]', [key, value], arguments.length); + validation$1.implies(key, value); + return self; + }; + self.conflicts = function (key1, key2) { + argsert(' [string|array]', [key1, key2], arguments.length); + validation$1.conflicts(key1, key2); + return self; + }; + self.usage = function (msg, description, builder, handler) { + argsert(' [string|boolean] [function|object] [function]', [msg, description, builder, handler], arguments.length); + if (description !== undefined) { + assertNotStrictEqual(msg, null, shim$1); + if ((msg || '').match(/^\$0( |$)/)) { + return self.command(msg, description, builder, handler); + } + else { + throw new YError('.usage() description must start with $0 if being used as alias for .command()'); + } + } + else { + usage$1.usage(msg); + return self; + } + }; + self.epilogue = self.epilog = function (msg) { + argsert('', [msg], arguments.length); + usage$1.epilog(msg); + return self; + }; + self.fail = function (f) { + argsert('', [f], arguments.length); + usage$1.failFn(f); + return self; + }; + self.onFinishCommand = function (f) { + argsert('', [f], arguments.length); + handlerFinishCommand = f; + return self; + }; + self.getHandlerFinishCommand = () => handlerFinishCommand; + self.check = function (f, _global) { + argsert(' [boolean]', [f, _global], arguments.length); + validation$1.check(f, _global !== false); + return self; + }; + self.global = function global(globals, global) { + argsert(' [boolean]', [globals, global], arguments.length); + globals = [].concat(globals); + if (global !== false) { + options.local = options.local.filter(l => globals.indexOf(l) === -1); + } + else { + globals.forEach(g => { + if (options.local.indexOf(g) === -1) + options.local.push(g); + }); + } + return self; + }; + self.pkgConf = function pkgConf(key, rootPath) { + argsert(' [string]', [key, rootPath], arguments.length); + let conf = null; + const obj = pkgUp(rootPath || cwd); + if (obj[key] && typeof obj[key] === 'object') { + conf = applyExtends(obj[key], rootPath || cwd, self.getParserConfiguration()['deep-merge-config'] || false, shim$1); + options.configObjects = (options.configObjects || []).concat(conf); + } + return self; + }; + const pkgs = {}; + function pkgUp(rootPath) { + const npath = rootPath || '*'; + if (pkgs[npath]) + return pkgs[npath]; + let obj = {}; + try { + let startDir = rootPath || shim$1.mainFilename; + if (!rootPath && shim$1.path.extname(startDir)) { + startDir = shim$1.path.dirname(startDir); + } + const pkgJsonPath = shim$1.findUp(startDir, (dir, names) => { + if (names.includes('package.json')) { + return 'package.json'; + } + else { + return undefined; + } + }); + assertNotStrictEqual(pkgJsonPath, undefined, shim$1); + obj = JSON.parse(shim$1.readFileSync(pkgJsonPath, 'utf8')); + } + catch (_noop) { } + pkgs[npath] = obj || {}; + return pkgs[npath]; + } + let parseFn = null; + let parseContext = null; + self.parse = function parse(args, shortCircuit, _parseFn) { + argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length); + freeze(); + if (typeof args === 'undefined') { + const argv = self._parseArgs(processArgs); + const tmpParsed = self.parsed; + unfreeze(); + self.parsed = tmpParsed; + return argv; + } + if (typeof shortCircuit === 'object') { + parseContext = shortCircuit; + shortCircuit = _parseFn; + } + if (typeof shortCircuit === 'function') { + parseFn = shortCircuit; + shortCircuit = false; + } + if (!shortCircuit) + processArgs = args; + if (parseFn) + exitProcess = false; + const parsed = self._parseArgs(args, !!shortCircuit); + completion$1.setParsed(self.parsed); + if (parseFn) + parseFn(exitError, parsed, output); + unfreeze(); + return parsed; + }; + self._getParseContext = () => parseContext || {}; + self._hasParseCallback = () => !!parseFn; + self.option = self.options = function option(key, opt) { + argsert(' [object]', [key, opt], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.options(k, key[k]); + }); + } + else { + if (typeof opt !== 'object') { + opt = {}; + } + options.key[key] = true; + if (opt.alias) + self.alias(key, opt.alias); + const deprecate = opt.deprecate || opt.deprecated; + if (deprecate) { + self.deprecateOption(key, deprecate); + } + const demand = opt.demand || opt.required || opt.require; + if (demand) { + self.demand(key, demand); + } + if (opt.demandOption) { + self.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined); + } + if (opt.conflicts) { + self.conflicts(key, opt.conflicts); + } + if ('default' in opt) { + self.default(key, opt.default); + } + if (opt.implies !== undefined) { + self.implies(key, opt.implies); + } + if (opt.nargs !== undefined) { + self.nargs(key, opt.nargs); + } + if (opt.config) { + self.config(key, opt.configParser); + } + if (opt.normalize) { + self.normalize(key); + } + if (opt.choices) { + self.choices(key, opt.choices); + } + if (opt.coerce) { + self.coerce(key, opt.coerce); + } + if (opt.group) { + self.group(key, opt.group); + } + if (opt.boolean || opt.type === 'boolean') { + self.boolean(key); + if (opt.alias) + self.boolean(opt.alias); + } + if (opt.array || opt.type === 'array') { + self.array(key); + if (opt.alias) + self.array(opt.alias); + } + if (opt.number || opt.type === 'number') { + self.number(key); + if (opt.alias) + self.number(opt.alias); + } + if (opt.string || opt.type === 'string') { + self.string(key); + if (opt.alias) + self.string(opt.alias); + } + if (opt.count || opt.type === 'count') { + self.count(key); + } + if (typeof opt.global === 'boolean') { + self.global(key, opt.global); + } + if (opt.defaultDescription) { + options.defaultDescription[key] = opt.defaultDescription; + } + if (opt.skipValidation) { + self.skipValidation(key); + } + const desc = opt.describe || opt.description || opt.desc; + self.describe(key, desc); + if (opt.hidden) { + self.hide(key); + } + if (opt.requiresArg) { + self.requiresArg(key); + } + } + return self; + }; + self.getOptions = () => options; + self.positional = function (key, opts) { + argsert(' ', [key, opts], arguments.length); + if (context.resets === 0) { + throw new YError(".positional() can only be called in a command's builder function"); + } + const supportedOpts = [ + 'default', + 'defaultDescription', + 'implies', + 'normalize', + 'choices', + 'conflicts', + 'coerce', + 'type', + 'describe', + 'desc', + 'description', + 'alias', + ]; + opts = objFilter(opts, (k, v) => { + let accept = supportedOpts.indexOf(k) !== -1; + if (k === 'type' && ['string', 'number', 'boolean'].indexOf(v) === -1) + accept = false; + return accept; + }); + const fullCommand = context.fullCommands[context.fullCommands.length - 1]; + const parseOptions = fullCommand + ? command$1.cmdToParseOptions(fullCommand) + : { + array: [], + alias: {}, + default: {}, + demand: {}, + }; + objectKeys(parseOptions).forEach(pk => { + const parseOption = parseOptions[pk]; + if (Array.isArray(parseOption)) { + if (parseOption.indexOf(key) !== -1) + opts[pk] = true; + } + else { + if (parseOption[key] && !(pk in opts)) + opts[pk] = parseOption[key]; + } + }); + self.group(key, usage$1.getPositionalGroupName()); + return self.option(key, opts); + }; + self.group = function group(opts, groupName) { + argsert(' ', [opts, groupName], arguments.length); + const existing = preservedGroups[groupName] || groups[groupName]; + if (preservedGroups[groupName]) { + delete preservedGroups[groupName]; + } + const seen = {}; + groups[groupName] = (existing || []).concat(opts).filter(key => { + if (seen[key]) + return false; + return (seen[key] = true); + }); + return self; + }; + self.getGroups = () => Object.assign({}, groups, preservedGroups); + self.env = function (prefix) { + argsert('[string|boolean]', [prefix], arguments.length); + if (prefix === false) + delete options.envPrefix; + else + options.envPrefix = prefix || ''; + return self; + }; + self.wrap = function (cols) { + argsert('', [cols], arguments.length); + usage$1.wrap(cols); + return self; + }; + let strict = false; + self.strict = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strict = enabled !== false; + return self; + }; + self.getStrict = () => strict; + let strictCommands = false; + self.strictCommands = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strictCommands = enabled !== false; + return self; + }; + self.getStrictCommands = () => strictCommands; + let strictOptions = false; + self.strictOptions = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strictOptions = enabled !== false; + return self; + }; + self.getStrictOptions = () => strictOptions; + let parserConfig = {}; + self.parserConfiguration = function parserConfiguration(config) { + argsert('', [config], arguments.length); + parserConfig = config; + return self; + }; + self.getParserConfiguration = () => parserConfig; + self.showHelp = function (level) { + argsert('[string|function]', [level], arguments.length); + if (!self.parsed) + self._parseArgs(processArgs); + if (command$1.hasDefaultCommand()) { + context.resets++; + command$1.runDefaultBuilderOn(self); + } + usage$1.showHelp(level); + return self; + }; + let versionOpt = null; + self.version = function version(opt, msg, ver) { + const defaultVersionOpt = 'version'; + argsert('[boolean|string] [string] [string]', [opt, msg, ver], arguments.length); + if (versionOpt) { + deleteFromParserHintObject(versionOpt); + usage$1.version(undefined); + versionOpt = null; + } + if (arguments.length === 0) { + ver = guessVersion(); + opt = defaultVersionOpt; + } + else if (arguments.length === 1) { + if (opt === false) { + return self; + } + ver = opt; + opt = defaultVersionOpt; + } + else if (arguments.length === 2) { + ver = msg; + msg = undefined; + } + versionOpt = typeof opt === 'string' ? opt : defaultVersionOpt; + msg = msg || usage$1.deferY18nLookup('Show version number'); + usage$1.version(ver || undefined); + self.boolean(versionOpt); + self.describe(versionOpt, msg); + return self; + }; + function guessVersion() { + const obj = pkgUp(); + return obj.version || 'unknown'; + } + let helpOpt = null; + self.addHelpOpt = self.help = function addHelpOpt(opt, msg) { + const defaultHelpOpt = 'help'; + argsert('[string|boolean] [string]', [opt, msg], arguments.length); + if (helpOpt) { + deleteFromParserHintObject(helpOpt); + helpOpt = null; + } + if (arguments.length === 1) { + if (opt === false) + return self; + } + helpOpt = typeof opt === 'string' ? opt : defaultHelpOpt; + self.boolean(helpOpt); + self.describe(helpOpt, msg || usage$1.deferY18nLookup('Show help')); + return self; + }; + const defaultShowHiddenOpt = 'show-hidden'; + options.showHiddenOpt = defaultShowHiddenOpt; + self.addShowHiddenOpt = self.showHidden = function addShowHiddenOpt(opt, msg) { + argsert('[string|boolean] [string]', [opt, msg], arguments.length); + if (arguments.length === 1) { + if (opt === false) + return self; + } + const showHiddenOpt = typeof opt === 'string' ? opt : defaultShowHiddenOpt; + self.boolean(showHiddenOpt); + self.describe(showHiddenOpt, msg || usage$1.deferY18nLookup('Show hidden options')); + options.showHiddenOpt = showHiddenOpt; + return self; + }; + self.hide = function hide(key) { + argsert('', [key], arguments.length); + options.hiddenOptions.push(key); + return self; + }; + self.showHelpOnFail = function showHelpOnFail(enabled, message) { + argsert('[boolean|string] [string]', [enabled, message], arguments.length); + usage$1.showHelpOnFail(enabled, message); + return self; + }; + let exitProcess = true; + self.exitProcess = function (enabled = true) { + argsert('[boolean]', [enabled], arguments.length); + exitProcess = enabled; + return self; + }; + self.getExitProcess = () => exitProcess; + self.showCompletionScript = function ($0, cmd) { + argsert('[string] [string]', [$0, cmd], arguments.length); + $0 = $0 || self.$0; + _logger.log(completion$1.generateCompletionScript($0, cmd || completionCommand || 'completion')); + return self; + }; + self.getCompletion = function (args, done) { + argsert(' ', [args, done], arguments.length); + completion$1.getCompletion(args, done); + }; + self.locale = function (locale) { + argsert('[string]', [locale], arguments.length); + if (!locale) { + guessLocale(); + return y18n.getLocale(); + } + detectLocale = false; + y18n.setLocale(locale); + return self; + }; + self.updateStrings = self.updateLocale = function (obj) { + argsert('', [obj], arguments.length); + detectLocale = false; + y18n.updateLocale(obj); + return self; + }; + let detectLocale = true; + self.detectLocale = function (detect) { + argsert('', [detect], arguments.length); + detectLocale = detect; + return self; + }; + self.getDetectLocale = () => detectLocale; + const _logger = { + log(...args) { + if (!self._hasParseCallback()) + console.log(...args); + hasOutput = true; + if (output.length) + output += '\n'; + output += args.join(' '); + }, + error(...args) { + if (!self._hasParseCallback()) + console.error(...args); + hasOutput = true; + if (output.length) + output += '\n'; + output += args.join(' '); + }, + }; + self._getLoggerInstance = () => _logger; + self._hasOutput = () => hasOutput; + self._setHasOutput = () => { + hasOutput = true; + }; + let recommendCommands; + self.recommendCommands = function (recommend = true) { + argsert('[boolean]', [recommend], arguments.length); + recommendCommands = recommend; + return self; + }; + self.getUsageInstance = () => usage$1; + self.getValidationInstance = () => validation$1; + self.getCommandInstance = () => command$1; + self.terminalWidth = () => { + argsert([], 0); + return shim$1.process.stdColumns; + }; + Object.defineProperty(self, 'argv', { + get: () => self._parseArgs(processArgs), + enumerable: true, + }); + self._parseArgs = function parseArgs(args, shortCircuit, _calledFromCommand, commandIndex) { + let skipValidation = !!_calledFromCommand; + args = args || processArgs; + options.__ = y18n.__; + options.configuration = self.getParserConfiguration(); + const populateDoubleDash = !!options.configuration['populate--']; + const config = Object.assign({}, options.configuration, { + 'populate--': true, + }); + const parsed = shim$1.Parser.detailed(args, Object.assign({}, options, { + configuration: Object.assign({ 'parse-positional-numbers': false }, config), + })); + let argv = parsed.argv; + if (parseContext) + argv = Object.assign({}, argv, parseContext); + const aliases = parsed.aliases; + argv.$0 = self.$0; + self.parsed = parsed; + try { + guessLocale(); + if (shortCircuit) { + return self._postProcess(argv, populateDoubleDash, _calledFromCommand); + } + if (helpOpt) { + const helpCmds = [helpOpt] + .concat(aliases[helpOpt] || []) + .filter(k => k.length > 1); + if (~helpCmds.indexOf('' + argv._[argv._.length - 1])) { + argv._.pop(); + argv[helpOpt] = true; + } + } + const handlerKeys = command$1.getCommands(); + const requestCompletions = completion$1.completionKey in argv; + const skipRecommendation = argv[helpOpt] || requestCompletions; + const skipDefaultCommand = skipRecommendation && + (handlerKeys.length > 1 || handlerKeys[0] !== '$0'); + if (argv._.length) { + if (handlerKeys.length) { + let firstUnknownCommand; + for (let i = commandIndex || 0, cmd; argv._[i] !== undefined; i++) { + cmd = String(argv._[i]); + if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) { + const innerArgv = command$1.runCommand(cmd, self, parsed, i + 1); + return self._postProcess(innerArgv, populateDoubleDash); + } + else if (!firstUnknownCommand && cmd !== completionCommand) { + firstUnknownCommand = cmd; + break; + } + } + if (command$1.hasDefaultCommand() && !skipDefaultCommand) { + const innerArgv = command$1.runCommand(null, self, parsed); + return self._postProcess(innerArgv, populateDoubleDash); + } + if (recommendCommands && firstUnknownCommand && !skipRecommendation) { + validation$1.recommendCommands(firstUnknownCommand, handlerKeys); + } + } + if (completionCommand && + ~argv._.indexOf(completionCommand) && + !requestCompletions) { + if (exitProcess) + setBlocking(true); + self.showCompletionScript(); + self.exit(0); + } + } + else if (command$1.hasDefaultCommand() && !skipDefaultCommand) { + const innerArgv = command$1.runCommand(null, self, parsed); + return self._postProcess(innerArgv, populateDoubleDash); + } + if (requestCompletions) { + if (exitProcess) + setBlocking(true); + args = [].concat(args); + const completionArgs = args.slice(args.indexOf(`--${completion$1.completionKey}`) + 1); + completion$1.getCompletion(completionArgs, completions => { + (completions || []).forEach(completion => { + _logger.log(completion); + }); + self.exit(0); + }); + return self._postProcess(argv, !populateDoubleDash, _calledFromCommand); + } + if (!hasOutput) { + Object.keys(argv).forEach(key => { + if (key === helpOpt && argv[key]) { + if (exitProcess) + setBlocking(true); + skipValidation = true; + self.showHelp('log'); + self.exit(0); + } + else if (key === versionOpt && argv[key]) { + if (exitProcess) + setBlocking(true); + skipValidation = true; + usage$1.showVersion(); + self.exit(0); + } + }); + } + if (!skipValidation && options.skipValidation.length > 0) { + skipValidation = Object.keys(argv).some(key => options.skipValidation.indexOf(key) >= 0 && argv[key] === true); + } + if (!skipValidation) { + if (parsed.error) + throw new YError(parsed.error.message); + if (!requestCompletions) { + self._runValidation(argv, aliases, {}, parsed.error); + } + } + } + catch (err) { + if (err instanceof YError) + usage$1.fail(err.message, err); + else + throw err; + } + return self._postProcess(argv, populateDoubleDash, _calledFromCommand); + }; + self._postProcess = function (argv, populateDoubleDash, calledFromCommand = false) { + if (isPromise(argv)) + return argv; + if (calledFromCommand) + return argv; + if (!populateDoubleDash) { + argv = self._copyDoubleDash(argv); + } + const parsePositionalNumbers = self.getParserConfiguration()['parse-positional-numbers'] || + self.getParserConfiguration()['parse-positional-numbers'] === undefined; + if (parsePositionalNumbers) { + argv = self._parsePositionalNumbers(argv); + } + return argv; + }; + self._copyDoubleDash = function (argv) { + if (!argv._ || !argv['--']) + return argv; + argv._.push.apply(argv._, argv['--']); + try { + delete argv['--']; + } + catch (_err) { } + return argv; + }; + self._parsePositionalNumbers = function (argv) { + const args = argv['--'] ? argv['--'] : argv._; + for (let i = 0, arg; (arg = args[i]) !== undefined; i++) { + if (shim$1.Parser.looksLikeNumber(arg) && + Number.isSafeInteger(Math.floor(parseFloat(`${arg}`)))) { + args[i] = Number(arg); + } + } + return argv; + }; + self._runValidation = function runValidation(argv, aliases, positionalMap, parseErrors, isDefaultCommand = false) { + if (parseErrors) + throw new YError(parseErrors.message); + validation$1.nonOptionCount(argv); + validation$1.requiredArguments(argv); + let failedStrictCommands = false; + if (strictCommands) { + failedStrictCommands = validation$1.unknownCommands(argv); + } + if (strict && !failedStrictCommands) { + validation$1.unknownArguments(argv, aliases, positionalMap, isDefaultCommand); + } + else if (strictOptions) { + validation$1.unknownArguments(argv, aliases, {}, false, false); + } + validation$1.customChecks(argv, aliases); + validation$1.limitedChoices(argv); + validation$1.implications(argv); + validation$1.conflicting(argv); + }; + function guessLocale() { + if (!detectLocale) + return; + const locale = shim$1.getEnv('LC_ALL') || + shim$1.getEnv('LC_MESSAGES') || + shim$1.getEnv('LANG') || + shim$1.getEnv('LANGUAGE') || + 'en_US'; + self.locale(locale.replace(/[.:].*/, '')); + } + self.help(); + self.version(); + return self; +} +const rebase = (base, dir) => shim$1.path.relative(base, dir); +function isYargsInstance(y) { + return !!y && typeof y._parseArgs === 'function'; +} + +var _a, _b; +const { readFileSync } = require('fs'); +const { inspect } = require('util'); +const { resolve } = require('path'); +const y18n = require('y18n'); +const Parser = require('yargs-parser'); +var cjsPlatformShim = { + assert: { + notStrictEqual: assert.notStrictEqual, + strictEqual: assert.strictEqual, + }, + cliui: require('cliui'), + findUp: require('escalade/sync'), + getEnv: (key) => { + return process.env[key]; + }, + getCallerFile: require('get-caller-file'), + getProcessArgvBin: getProcessArgvBin, + inspect, + mainFilename: (_b = (_a = require === null || require === void 0 ? void 0 : require.main) === null || _a === void 0 ? void 0 : _a.filename) !== null && _b !== void 0 ? _b : process.cwd(), + Parser, + path: require('path'), + process: { + argv: () => process.argv, + cwd: process.cwd, + execPath: () => process.execPath, + exit: (code) => { + process.exit(code); + }, + nextTick: process.nextTick, + stdColumns: typeof process.stdout.columns !== 'undefined' + ? process.stdout.columns + : null, + }, + readFileSync, + require: require, + requireDirectory: require('require-directory'), + stringWidth: require('string-width'), + y18n: y18n({ + directory: resolve(__dirname, '../locales'), + updateFiles: false, + }), +}; + +const minNodeVersion = process && process.env && process.env.YARGS_MIN_NODE_VERSION + ? Number(process.env.YARGS_MIN_NODE_VERSION) + : 10; +if (process && process.version) { + const major = Number(process.version.match(/v([^.]+)/)[1]); + if (major < minNodeVersion) { + throw Error(`yargs supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs#supported-nodejs-versions`); + } +} +const Parser$1 = require('yargs-parser'); +const Yargs$1 = YargsWithShim(cjsPlatformShim); +var cjs = { + applyExtends, + cjsPlatformShim, + Yargs: Yargs$1, + argsert, + globalMiddlewareFactory, + isPromise, + objFilter, + parseCommand, + Parser: Parser$1, + processArgv, + rebase, + YError, +}; + +module.exports = cjs; diff --git a/build/node_modules/yargs/build/lib/argsert.js b/build/node_modules/yargs/build/lib/argsert.js new file mode 100644 index 00000000..be5b3aa6 --- /dev/null +++ b/build/node_modules/yargs/build/lib/argsert.js @@ -0,0 +1,62 @@ +import { YError } from './yerror.js'; +import { parseCommand } from './parse-command.js'; +const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']; +export function argsert(arg1, arg2, arg3) { + function parseArgs() { + return typeof arg1 === 'object' + ? [{ demanded: [], optional: [] }, arg1, arg2] + : [ + parseCommand(`cmd ${arg1}`), + arg2, + arg3, + ]; + } + try { + let position = 0; + const [parsed, callerArguments, _length] = parseArgs(); + const args = [].slice.call(callerArguments); + while (args.length && args[args.length - 1] === undefined) + args.pop(); + const length = _length || args.length; + if (length < parsed.demanded.length) { + throw new YError(`Not enough arguments provided. Expected ${parsed.demanded.length} but received ${args.length}.`); + } + const totalCommands = parsed.demanded.length + parsed.optional.length; + if (length > totalCommands) { + throw new YError(`Too many arguments provided. Expected max ${totalCommands} but received ${length}.`); + } + parsed.demanded.forEach(demanded => { + const arg = args.shift(); + const observedType = guessType(arg); + const matchingTypes = demanded.cmd.filter(type => type === observedType || type === '*'); + if (matchingTypes.length === 0) + argumentTypeError(observedType, demanded.cmd, position); + position += 1; + }); + parsed.optional.forEach(optional => { + if (args.length === 0) + return; + const arg = args.shift(); + const observedType = guessType(arg); + const matchingTypes = optional.cmd.filter(type => type === observedType || type === '*'); + if (matchingTypes.length === 0) + argumentTypeError(observedType, optional.cmd, position); + position += 1; + }); + } + catch (err) { + console.warn(err.stack); + } +} +function guessType(arg) { + if (Array.isArray(arg)) { + return 'array'; + } + else if (arg === null) { + return 'null'; + } + return typeof arg; +} +function argumentTypeError(observedType, allowedTypes, position) { + throw new YError(`Invalid ${positionName[position] || 'manyith'} argument. Expected ${allowedTypes.join(' or ')} but received ${observedType}.`); +} diff --git a/build/node_modules/yargs/build/lib/command.js b/build/node_modules/yargs/build/lib/command.js new file mode 100644 index 00000000..9a55dae2 --- /dev/null +++ b/build/node_modules/yargs/build/lib/command.js @@ -0,0 +1,382 @@ +import { assertNotStrictEqual, } from './typings/common-types.js'; +import { isPromise } from './utils/is-promise.js'; +import { applyMiddleware, commandMiddlewareFactory, } from './middleware.js'; +import { parseCommand } from './parse-command.js'; +import { isYargsInstance, } from './yargs-factory.js'; +import whichModule from './utils/which-module.js'; +const DEFAULT_MARKER = /(^\*)|(^\$0)/; +export function command(yargs, usage, validation, globalMiddleware = [], shim) { + const self = {}; + let handlers = {}; + let aliasMap = {}; + let defaultCommand; + self.addHandler = function addHandler(cmd, description, builder, handler, commandMiddleware, deprecated) { + let aliases = []; + const middlewares = commandMiddlewareFactory(commandMiddleware); + handler = handler || (() => { }); + if (Array.isArray(cmd)) { + if (isCommandAndAliases(cmd)) { + [cmd, ...aliases] = cmd; + } + else { + for (const command of cmd) { + self.addHandler(command); + } + } + } + else if (isCommandHandlerDefinition(cmd)) { + let command = Array.isArray(cmd.command) || typeof cmd.command === 'string' + ? cmd.command + : moduleName(cmd); + if (cmd.aliases) + command = [].concat(command).concat(cmd.aliases); + self.addHandler(command, extractDesc(cmd), cmd.builder, cmd.handler, cmd.middlewares, cmd.deprecated); + return; + } + else if (isCommandBuilderDefinition(builder)) { + self.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler, builder.middlewares, builder.deprecated); + return; + } + if (typeof cmd === 'string') { + const parsedCommand = parseCommand(cmd); + aliases = aliases.map(alias => parseCommand(alias).cmd); + let isDefault = false; + const parsedAliases = [parsedCommand.cmd].concat(aliases).filter(c => { + if (DEFAULT_MARKER.test(c)) { + isDefault = true; + return false; + } + return true; + }); + if (parsedAliases.length === 0 && isDefault) + parsedAliases.push('$0'); + if (isDefault) { + parsedCommand.cmd = parsedAliases[0]; + aliases = parsedAliases.slice(1); + cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd); + } + aliases.forEach(alias => { + aliasMap[alias] = parsedCommand.cmd; + }); + if (description !== false) { + usage.command(cmd, description, isDefault, aliases, deprecated); + } + handlers[parsedCommand.cmd] = { + original: cmd, + description, + handler, + builder: builder || {}, + middlewares, + deprecated, + demanded: parsedCommand.demanded, + optional: parsedCommand.optional, + }; + if (isDefault) + defaultCommand = handlers[parsedCommand.cmd]; + } + }; + self.addDirectory = function addDirectory(dir, context, req, callerFile, opts) { + opts = opts || {}; + if (typeof opts.recurse !== 'boolean') + opts.recurse = false; + if (!Array.isArray(opts.extensions)) + opts.extensions = ['js']; + const parentVisit = typeof opts.visit === 'function' ? opts.visit : (o) => o; + opts.visit = function visit(obj, joined, filename) { + const visited = parentVisit(obj, joined, filename); + if (visited) { + if (~context.files.indexOf(joined)) + return visited; + context.files.push(joined); + self.addHandler(visited); + } + return visited; + }; + shim.requireDirectory({ require: req, filename: callerFile }, dir, opts); + }; + function moduleName(obj) { + const mod = whichModule(obj); + if (!mod) + throw new Error(`No command name given for module: ${shim.inspect(obj)}`); + return commandFromFilename(mod.filename); + } + function commandFromFilename(filename) { + return shim.path.basename(filename, shim.path.extname(filename)); + } + function extractDesc({ describe, description, desc, }) { + for (const test of [describe, description, desc]) { + if (typeof test === 'string' || test === false) + return test; + assertNotStrictEqual(test, true, shim); + } + return false; + } + self.getCommands = () => Object.keys(handlers).concat(Object.keys(aliasMap)); + self.getCommandHandlers = () => handlers; + self.hasDefaultCommand = () => !!defaultCommand; + self.runCommand = function runCommand(command, yargs, parsed, commandIndex) { + let aliases = parsed.aliases; + const commandHandler = handlers[command] || handlers[aliasMap[command]] || defaultCommand; + const currentContext = yargs.getContext(); + let numFiles = currentContext.files.length; + const parentCommands = currentContext.commands.slice(); + let innerArgv = parsed.argv; + let positionalMap = {}; + if (command) { + currentContext.commands.push(command); + currentContext.fullCommands.push(commandHandler.original); + } + const builder = commandHandler.builder; + if (isCommandBuilderCallback(builder)) { + const builderOutput = builder(yargs.reset(parsed.aliases)); + const innerYargs = isYargsInstance(builderOutput) ? builderOutput : yargs; + if (shouldUpdateUsage(innerYargs)) { + innerYargs + .getUsageInstance() + .usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description); + } + innerArgv = innerYargs._parseArgs(null, null, true, commandIndex); + aliases = innerYargs.parsed.aliases; + } + else if (isCommandBuilderOptionDefinitions(builder)) { + const innerYargs = yargs.reset(parsed.aliases); + if (shouldUpdateUsage(innerYargs)) { + innerYargs + .getUsageInstance() + .usage(usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description); + } + Object.keys(commandHandler.builder).forEach(key => { + innerYargs.option(key, builder[key]); + }); + innerArgv = innerYargs._parseArgs(null, null, true, commandIndex); + aliases = innerYargs.parsed.aliases; + } + if (!yargs._hasOutput()) { + positionalMap = populatePositionals(commandHandler, innerArgv, currentContext); + } + const middlewares = globalMiddleware + .slice(0) + .concat(commandHandler.middlewares); + applyMiddleware(innerArgv, yargs, middlewares, true); + if (!yargs._hasOutput()) { + yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error, !command); + } + if (commandHandler.handler && !yargs._hasOutput()) { + yargs._setHasOutput(); + const populateDoubleDash = !!yargs.getOptions().configuration['populate--']; + yargs._postProcess(innerArgv, populateDoubleDash); + innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false); + let handlerResult; + if (isPromise(innerArgv)) { + handlerResult = innerArgv.then(argv => commandHandler.handler(argv)); + } + else { + handlerResult = commandHandler.handler(innerArgv); + } + const handlerFinishCommand = yargs.getHandlerFinishCommand(); + if (isPromise(handlerResult)) { + yargs.getUsageInstance().cacheHelpMessage(); + handlerResult + .then(value => { + if (handlerFinishCommand) { + handlerFinishCommand(value); + } + }) + .catch(error => { + try { + yargs.getUsageInstance().fail(null, error); + } + catch (err) { + } + }) + .then(() => { + yargs.getUsageInstance().clearCachedHelpMessage(); + }); + } + else { + if (handlerFinishCommand) { + handlerFinishCommand(handlerResult); + } + } + } + if (command) { + currentContext.commands.pop(); + currentContext.fullCommands.pop(); + } + numFiles = currentContext.files.length - numFiles; + if (numFiles > 0) + currentContext.files.splice(numFiles * -1, numFiles); + return innerArgv; + }; + function shouldUpdateUsage(yargs) { + return (!yargs.getUsageInstance().getUsageDisabled() && + yargs.getUsageInstance().getUsage().length === 0); + } + function usageFromParentCommandsCommandHandler(parentCommands, commandHandler) { + const c = DEFAULT_MARKER.test(commandHandler.original) + ? commandHandler.original.replace(DEFAULT_MARKER, '').trim() + : commandHandler.original; + const pc = parentCommands.filter(c => { + return !DEFAULT_MARKER.test(c); + }); + pc.push(c); + return `$0 ${pc.join(' ')}`; + } + self.runDefaultBuilderOn = function (yargs) { + assertNotStrictEqual(defaultCommand, undefined, shim); + if (shouldUpdateUsage(yargs)) { + const commandString = DEFAULT_MARKER.test(defaultCommand.original) + ? defaultCommand.original + : defaultCommand.original.replace(/^[^[\]<>]*/, '$0 '); + yargs.getUsageInstance().usage(commandString, defaultCommand.description); + } + const builder = defaultCommand.builder; + if (isCommandBuilderCallback(builder)) { + builder(yargs); + } + else if (!isCommandBuilderDefinition(builder)) { + Object.keys(builder).forEach(key => { + yargs.option(key, builder[key]); + }); + } + }; + function populatePositionals(commandHandler, argv, context) { + argv._ = argv._.slice(context.commands.length); + const demanded = commandHandler.demanded.slice(0); + const optional = commandHandler.optional.slice(0); + const positionalMap = {}; + validation.positionalCount(demanded.length, argv._.length); + while (demanded.length) { + const demand = demanded.shift(); + populatePositional(demand, argv, positionalMap); + } + while (optional.length) { + const maybe = optional.shift(); + populatePositional(maybe, argv, positionalMap); + } + argv._ = context.commands.concat(argv._.map(a => '' + a)); + postProcessPositionals(argv, positionalMap, self.cmdToParseOptions(commandHandler.original)); + return positionalMap; + } + function populatePositional(positional, argv, positionalMap) { + const cmd = positional.cmd[0]; + if (positional.variadic) { + positionalMap[cmd] = argv._.splice(0).map(String); + } + else { + if (argv._.length) + positionalMap[cmd] = [String(argv._.shift())]; + } + } + function postProcessPositionals(argv, positionalMap, parseOptions) { + const options = Object.assign({}, yargs.getOptions()); + options.default = Object.assign(parseOptions.default, options.default); + for (const key of Object.keys(parseOptions.alias)) { + options.alias[key] = (options.alias[key] || []).concat(parseOptions.alias[key]); + } + options.array = options.array.concat(parseOptions.array); + options.config = {}; + const unparsed = []; + Object.keys(positionalMap).forEach(key => { + positionalMap[key].map(value => { + if (options.configuration['unknown-options-as-args']) + options.key[key] = true; + unparsed.push(`--${key}`); + unparsed.push(value); + }); + }); + if (!unparsed.length) + return; + const config = Object.assign({}, options.configuration, { + 'populate--': true, + }); + const parsed = shim.Parser.detailed(unparsed, Object.assign({}, options, { + configuration: config, + })); + if (parsed.error) { + yargs.getUsageInstance().fail(parsed.error.message, parsed.error); + } + else { + const positionalKeys = Object.keys(positionalMap); + Object.keys(positionalMap).forEach(key => { + positionalKeys.push(...parsed.aliases[key]); + }); + Object.keys(parsed.argv).forEach(key => { + if (positionalKeys.indexOf(key) !== -1) { + if (!positionalMap[key]) + positionalMap[key] = parsed.argv[key]; + argv[key] = parsed.argv[key]; + } + }); + } + } + self.cmdToParseOptions = function (cmdString) { + const parseOptions = { + array: [], + default: {}, + alias: {}, + demand: {}, + }; + const parsed = parseCommand(cmdString); + parsed.demanded.forEach(d => { + const [cmd, ...aliases] = d.cmd; + if (d.variadic) { + parseOptions.array.push(cmd); + parseOptions.default[cmd] = []; + } + parseOptions.alias[cmd] = aliases; + parseOptions.demand[cmd] = true; + }); + parsed.optional.forEach(o => { + const [cmd, ...aliases] = o.cmd; + if (o.variadic) { + parseOptions.array.push(cmd); + parseOptions.default[cmd] = []; + } + parseOptions.alias[cmd] = aliases; + }); + return parseOptions; + }; + self.reset = () => { + handlers = {}; + aliasMap = {}; + defaultCommand = undefined; + return self; + }; + const frozens = []; + self.freeze = () => { + frozens.push({ + handlers, + aliasMap, + defaultCommand, + }); + }; + self.unfreeze = () => { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ handlers, aliasMap, defaultCommand } = frozen); + }; + return self; +} +export function isCommandBuilderDefinition(builder) { + return (typeof builder === 'object' && + !!builder.builder && + typeof builder.handler === 'function'); +} +function isCommandAndAliases(cmd) { + if (cmd.every(c => typeof c === 'string')) { + return true; + } + else { + return false; + } +} +export function isCommandBuilderCallback(builder) { + return typeof builder === 'function'; +} +function isCommandBuilderOptionDefinitions(builder) { + return typeof builder === 'object'; +} +export function isCommandHandlerDefinition(cmd) { + return typeof cmd === 'object' && !Array.isArray(cmd); +} diff --git a/build/node_modules/yargs/build/lib/completion-templates.js b/build/node_modules/yargs/build/lib/completion-templates.js new file mode 100644 index 00000000..990d34d0 --- /dev/null +++ b/build/node_modules/yargs/build/lib/completion-templates.js @@ -0,0 +1,47 @@ +export const completionShTemplate = `###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc +# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX. +# +_yargs_completions() +{ + local cur_word args type_list + + cur_word="\${COMP_WORDS[COMP_CWORD]}" + args=("\${COMP_WORDS[@]}") + + # ask yargs to generate completions. + type_list=$({{app_path}} --get-yargs-completions "\${args[@]}") + + COMPREPLY=( $(compgen -W "\${type_list}" -- \${cur_word}) ) + + # if no match was found, fall back to filename completion + if [ \${#COMPREPLY[@]} -eq 0 ]; then + COMPREPLY=() + fi + + return 0 +} +complete -o default -F _yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +`; +export const completionZshTemplate = `###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc +# or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX. +# +_{{app_name}}_yargs_completions() +{ + local reply + local si=$IFS + IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "\${words[@]}")) + IFS=$si + _describe 'values' reply +} +compdef _{{app_name}}_yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +`; diff --git a/build/node_modules/yargs/build/lib/completion.js b/build/node_modules/yargs/build/lib/completion.js new file mode 100644 index 00000000..1c2e9249 --- /dev/null +++ b/build/node_modules/yargs/build/lib/completion.js @@ -0,0 +1,128 @@ +import { isCommandBuilderCallback } from './command.js'; +import { assertNotStrictEqual } from './typings/common-types.js'; +import * as templates from './completion-templates.js'; +import { isPromise } from './utils/is-promise.js'; +import { parseCommand } from './parse-command.js'; +export function completion(yargs, usage, command, shim) { + const self = { + completionKey: 'get-yargs-completions', + }; + let aliases; + self.setParsed = function setParsed(parsed) { + aliases = parsed.aliases; + }; + const zshShell = (shim.getEnv('SHELL') && shim.getEnv('SHELL').indexOf('zsh') !== -1) || + (shim.getEnv('ZSH_NAME') && shim.getEnv('ZSH_NAME').indexOf('zsh') !== -1); + self.getCompletion = function getCompletion(args, done) { + const completions = []; + const current = args.length ? args[args.length - 1] : ''; + const argv = yargs.parse(args, true); + const parentCommands = yargs.getContext().commands; + function runCompletionFunction(argv) { + assertNotStrictEqual(completionFunction, null, shim); + if (isSyncCompletionFunction(completionFunction)) { + const result = completionFunction(current, argv); + if (isPromise(result)) { + return result + .then(list => { + shim.process.nextTick(() => { + done(list); + }); + }) + .catch(err => { + shim.process.nextTick(() => { + throw err; + }); + }); + } + return done(result); + } + else { + return completionFunction(current, argv, completions => { + done(completions); + }); + } + } + if (completionFunction) { + return isPromise(argv) + ? argv.then(runCompletionFunction) + : runCompletionFunction(argv); + } + const handlers = command.getCommandHandlers(); + for (let i = 0, ii = args.length; i < ii; ++i) { + if (handlers[args[i]] && handlers[args[i]].builder) { + const builder = handlers[args[i]].builder; + if (isCommandBuilderCallback(builder)) { + const y = yargs.reset(); + builder(y); + return y.argv; + } + } + } + if (!current.match(/^-/) && + parentCommands[parentCommands.length - 1] !== current) { + usage.getCommands().forEach(usageCommand => { + const commandName = parseCommand(usageCommand[0]).cmd; + if (args.indexOf(commandName) === -1) { + if (!zshShell) { + completions.push(commandName); + } + else { + const desc = usageCommand[1] || ''; + completions.push(commandName.replace(/:/g, '\\:') + ':' + desc); + } + } + }); + } + if (current.match(/^-/) || (current === '' && completions.length === 0)) { + const descs = usage.getDescriptions(); + const options = yargs.getOptions(); + Object.keys(options.key).forEach(key => { + const negable = !!options.configuration['boolean-negation'] && + options.boolean.includes(key); + let keyAndAliases = [key].concat(aliases[key] || []); + if (negable) + keyAndAliases = keyAndAliases.concat(keyAndAliases.map(key => `no-${key}`)); + function completeOptionKey(key) { + const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1); + if (notInArgs) { + const startsByTwoDashes = (s) => /^--/.test(s); + const isShortOption = (s) => /^[^0-9]$/.test(s); + const dashes = !startsByTwoDashes(current) && isShortOption(key) ? '-' : '--'; + if (!zshShell) { + completions.push(dashes + key); + } + else { + const desc = descs[key] || ''; + completions.push(dashes + + `${key.replace(/:/g, '\\:')}:${desc.replace('__yargsString__:', '')}`); + } + } + } + completeOptionKey(key); + if (negable && !!options.default[key]) + completeOptionKey(`no-${key}`); + }); + } + done(completions); + }; + self.generateCompletionScript = function generateCompletionScript($0, cmd) { + let script = zshShell + ? templates.completionZshTemplate + : templates.completionShTemplate; + const name = shim.path.basename($0); + if ($0.match(/\.js$/)) + $0 = `./${$0}`; + script = script.replace(/{{app_name}}/g, name); + script = script.replace(/{{completion_command}}/g, cmd); + return script.replace(/{{app_path}}/g, $0); + }; + let completionFunction = null; + self.registerFunction = fn => { + completionFunction = fn; + }; + return self; +} +function isSyncCompletionFunction(completionFunction) { + return completionFunction.length < 3; +} diff --git a/build/node_modules/yargs/build/lib/middleware.js b/build/node_modules/yargs/build/lib/middleware.js new file mode 100644 index 00000000..680094cd --- /dev/null +++ b/build/node_modules/yargs/build/lib/middleware.js @@ -0,0 +1,53 @@ +import { argsert } from './argsert.js'; +import { isPromise } from './utils/is-promise.js'; +export function globalMiddlewareFactory(globalMiddleware, context) { + return function (callback, applyBeforeValidation = false) { + argsert(' [boolean]', [callback, applyBeforeValidation], arguments.length); + if (Array.isArray(callback)) { + for (let i = 0; i < callback.length; i++) { + if (typeof callback[i] !== 'function') { + throw Error('middleware must be a function'); + } + callback[i].applyBeforeValidation = applyBeforeValidation; + } + Array.prototype.push.apply(globalMiddleware, callback); + } + else if (typeof callback === 'function') { + callback.applyBeforeValidation = applyBeforeValidation; + globalMiddleware.push(callback); + } + return context; + }; +} +export function commandMiddlewareFactory(commandMiddleware) { + if (!commandMiddleware) + return []; + return commandMiddleware.map(middleware => { + middleware.applyBeforeValidation = false; + return middleware; + }); +} +export function applyMiddleware(argv, yargs, middlewares, beforeValidation) { + const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true'); + return middlewares.reduce((acc, middleware) => { + if (middleware.applyBeforeValidation !== beforeValidation) { + return acc; + } + if (isPromise(acc)) { + return acc + .then(initialObj => Promise.all([ + initialObj, + middleware(initialObj, yargs), + ])) + .then(([initialObj, middlewareObj]) => Object.assign(initialObj, middlewareObj)); + } + else { + const result = middleware(acc, yargs); + if (beforeValidation && isPromise(result)) + throw beforeValidationError; + return isPromise(result) + ? result.then(middlewareObj => Object.assign(acc, middlewareObj)) + : Object.assign(acc, result); + } + }, argv); +} diff --git a/build/node_modules/yargs/build/lib/parse-command.js b/build/node_modules/yargs/build/lib/parse-command.js new file mode 100644 index 00000000..4989f531 --- /dev/null +++ b/build/node_modules/yargs/build/lib/parse-command.js @@ -0,0 +1,32 @@ +export function parseCommand(cmd) { + const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' '); + const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/); + const bregex = /\.*[\][<>]/g; + const firstCommand = splitCommand.shift(); + if (!firstCommand) + throw new Error(`No command found in: ${cmd}`); + const parsedCommand = { + cmd: firstCommand.replace(bregex, ''), + demanded: [], + optional: [], + }; + splitCommand.forEach((cmd, i) => { + let variadic = false; + cmd = cmd.replace(/\s/g, ''); + if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) + variadic = true; + if (/^\[/.test(cmd)) { + parsedCommand.optional.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } + else { + parsedCommand.demanded.push({ + cmd: cmd.replace(bregex, '').split('|'), + variadic, + }); + } + }); + return parsedCommand; +} diff --git a/build/node_modules/yargs/build/lib/typings/common-types.js b/build/node_modules/yargs/build/lib/typings/common-types.js new file mode 100644 index 00000000..73e1773a --- /dev/null +++ b/build/node_modules/yargs/build/lib/typings/common-types.js @@ -0,0 +1,9 @@ +export function assertNotStrictEqual(actual, expected, shim, message) { + shim.assert.notStrictEqual(actual, expected, message); +} +export function assertSingleKey(actual, shim) { + shim.assert.strictEqual(typeof actual, 'string'); +} +export function objectKeys(object) { + return Object.keys(object); +} diff --git a/build/node_modules/yargs/build/lib/typings/yargs-parser-types.js b/build/node_modules/yargs/build/lib/typings/yargs-parser-types.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/build/node_modules/yargs/build/lib/typings/yargs-parser-types.js @@ -0,0 +1 @@ +export {}; diff --git a/build/node_modules/yargs/build/lib/usage.js b/build/node_modules/yargs/build/lib/usage.js new file mode 100644 index 00000000..ecd1aaca --- /dev/null +++ b/build/node_modules/yargs/build/lib/usage.js @@ -0,0 +1,548 @@ +import { assertNotStrictEqual, } from './typings/common-types.js'; +import { objFilter } from './utils/obj-filter.js'; +import { YError } from './yerror.js'; +import setBlocking from './utils/set-blocking.js'; +export function usage(yargs, y18n, shim) { + const __ = y18n.__; + const self = {}; + const fails = []; + self.failFn = function failFn(f) { + fails.push(f); + }; + let failMessage = null; + let showHelpOnFail = true; + self.showHelpOnFail = function showHelpOnFailFn(arg1 = true, arg2) { + function parseFunctionArgs() { + return typeof arg1 === 'string' ? [true, arg1] : [arg1, arg2]; + } + const [enabled, message] = parseFunctionArgs(); + failMessage = message; + showHelpOnFail = enabled; + return self; + }; + let failureOutput = false; + self.fail = function fail(msg, err) { + const logger = yargs._getLoggerInstance(); + if (fails.length) { + for (let i = fails.length - 1; i >= 0; --i) { + fails[i](msg, err, self); + } + } + else { + if (yargs.getExitProcess()) + setBlocking(true); + if (!failureOutput) { + failureOutput = true; + if (showHelpOnFail) { + yargs.showHelp('error'); + logger.error(); + } + if (msg || err) + logger.error(msg || err); + if (failMessage) { + if (msg || err) + logger.error(''); + logger.error(failMessage); + } + } + err = err || new YError(msg); + if (yargs.getExitProcess()) { + return yargs.exit(1); + } + else if (yargs._hasParseCallback()) { + return yargs.exit(1, err); + } + else { + throw err; + } + } + }; + let usages = []; + let usageDisabled = false; + self.usage = (msg, description) => { + if (msg === null) { + usageDisabled = true; + usages = []; + return self; + } + usageDisabled = false; + usages.push([msg, description || '']); + return self; + }; + self.getUsage = () => { + return usages; + }; + self.getUsageDisabled = () => { + return usageDisabled; + }; + self.getPositionalGroupName = () => { + return __('Positionals:'); + }; + let examples = []; + self.example = (cmd, description) => { + examples.push([cmd, description || '']); + }; + let commands = []; + self.command = function command(cmd, description, isDefault, aliases, deprecated = false) { + if (isDefault) { + commands = commands.map(cmdArray => { + cmdArray[2] = false; + return cmdArray; + }); + } + commands.push([cmd, description || '', isDefault, aliases, deprecated]); + }; + self.getCommands = () => commands; + let descriptions = {}; + self.describe = function describe(keyOrKeys, desc) { + if (Array.isArray(keyOrKeys)) { + keyOrKeys.forEach(k => { + self.describe(k, desc); + }); + } + else if (typeof keyOrKeys === 'object') { + Object.keys(keyOrKeys).forEach(k => { + self.describe(k, keyOrKeys[k]); + }); + } + else { + descriptions[keyOrKeys] = desc; + } + }; + self.getDescriptions = () => descriptions; + let epilogs = []; + self.epilog = msg => { + epilogs.push(msg); + }; + let wrapSet = false; + let wrap; + self.wrap = cols => { + wrapSet = true; + wrap = cols; + }; + function getWrap() { + if (!wrapSet) { + wrap = windowWidth(); + wrapSet = true; + } + return wrap; + } + const deferY18nLookupPrefix = '__yargsString__:'; + self.deferY18nLookup = str => deferY18nLookupPrefix + str; + self.help = function help() { + if (cachedHelpMessage) + return cachedHelpMessage; + normalizeAliases(); + const base$0 = yargs.customScriptName + ? yargs.$0 + : shim.path.basename(yargs.$0); + const demandedOptions = yargs.getDemandedOptions(); + const demandedCommands = yargs.getDemandedCommands(); + const deprecatedOptions = yargs.getDeprecatedOptions(); + const groups = yargs.getGroups(); + const options = yargs.getOptions(); + let keys = []; + keys = keys.concat(Object.keys(descriptions)); + keys = keys.concat(Object.keys(demandedOptions)); + keys = keys.concat(Object.keys(demandedCommands)); + keys = keys.concat(Object.keys(options.default)); + keys = keys.filter(filterHiddenOptions); + keys = Object.keys(keys.reduce((acc, key) => { + if (key !== '_') + acc[key] = true; + return acc; + }, {})); + const theWrap = getWrap(); + const ui = shim.cliui({ + width: theWrap, + wrap: !!theWrap, + }); + if (!usageDisabled) { + if (usages.length) { + usages.forEach(usage => { + ui.div(`${usage[0].replace(/\$0/g, base$0)}`); + if (usage[1]) { + ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] }); + } + }); + ui.div(); + } + else if (commands.length) { + let u = null; + if (demandedCommands._) { + u = `${base$0} <${__('command')}>\n`; + } + else { + u = `${base$0} [${__('command')}]\n`; + } + ui.div(`${u}`); + } + } + if (commands.length) { + ui.div(__('Commands:')); + const context = yargs.getContext(); + const parentCommands = context.commands.length + ? `${context.commands.join(' ')} ` + : ''; + if (yargs.getParserConfiguration()['sort-commands'] === true) { + commands = commands.sort((a, b) => a[0].localeCompare(b[0])); + } + commands.forEach(command => { + const commandString = `${base$0} ${parentCommands}${command[0].replace(/^\$0 ?/, '')}`; + ui.span({ + text: commandString, + padding: [0, 2, 0, 2], + width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4, + }, { text: command[1] }); + const hints = []; + if (command[2]) + hints.push(`[${__('default')}]`); + if (command[3] && command[3].length) { + hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`); + } + if (command[4]) { + if (typeof command[4] === 'string') { + hints.push(`[${__('deprecated: %s', command[4])}]`); + } + else { + hints.push(`[${__('deprecated')}]`); + } + } + if (hints.length) { + ui.div({ + text: hints.join(' '), + padding: [0, 0, 0, 2], + align: 'right', + }); + } + else { + ui.div(); + } + }); + ui.div(); + } + const aliasKeys = (Object.keys(options.alias) || []).concat(Object.keys(yargs.parsed.newAliases) || []); + keys = keys.filter(key => !yargs.parsed.newAliases[key] && + aliasKeys.every(alias => (options.alias[alias] || []).indexOf(key) === -1)); + const defaultGroup = __('Options:'); + if (!groups[defaultGroup]) + groups[defaultGroup] = []; + addUngroupedKeys(keys, options.alias, groups, defaultGroup); + const isLongSwitch = (sw) => /^--/.test(getText(sw)); + const displayedGroups = Object.keys(groups) + .filter(groupName => groups[groupName].length > 0) + .map(groupName => { + const normalizedKeys = groups[groupName] + .filter(filterHiddenOptions) + .map(key => { + if (~aliasKeys.indexOf(key)) + return key; + for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) { + if (~(options.alias[aliasKey] || []).indexOf(key)) + return aliasKey; + } + return key; + }); + return { groupName, normalizedKeys }; + }) + .filter(({ normalizedKeys }) => normalizedKeys.length > 0) + .map(({ groupName, normalizedKeys }) => { + const switches = normalizedKeys.reduce((acc, key) => { + acc[key] = [key] + .concat(options.alias[key] || []) + .map(sw => { + if (groupName === self.getPositionalGroupName()) + return sw; + else { + return ((/^[0-9]$/.test(sw) + ? ~options.boolean.indexOf(key) + ? '-' + : '--' + : sw.length > 1 + ? '--' + : '-') + sw); + } + }) + .sort((sw1, sw2) => isLongSwitch(sw1) === isLongSwitch(sw2) + ? 0 + : isLongSwitch(sw1) + ? 1 + : -1) + .join(', '); + return acc; + }, {}); + return { groupName, normalizedKeys, switches }; + }); + const shortSwitchesUsed = displayedGroups + .filter(({ groupName }) => groupName !== self.getPositionalGroupName()) + .some(({ normalizedKeys, switches }) => !normalizedKeys.every(key => isLongSwitch(switches[key]))); + if (shortSwitchesUsed) { + displayedGroups + .filter(({ groupName }) => groupName !== self.getPositionalGroupName()) + .forEach(({ normalizedKeys, switches }) => { + normalizedKeys.forEach(key => { + if (isLongSwitch(switches[key])) { + switches[key] = addIndentation(switches[key], '-x, '.length); + } + }); + }); + } + displayedGroups.forEach(({ groupName, normalizedKeys, switches }) => { + ui.div(groupName); + normalizedKeys.forEach(key => { + const kswitch = switches[key]; + let desc = descriptions[key] || ''; + let type = null; + if (~desc.lastIndexOf(deferY18nLookupPrefix)) + desc = __(desc.substring(deferY18nLookupPrefix.length)); + if (~options.boolean.indexOf(key)) + type = `[${__('boolean')}]`; + if (~options.count.indexOf(key)) + type = `[${__('count')}]`; + if (~options.string.indexOf(key)) + type = `[${__('string')}]`; + if (~options.normalize.indexOf(key)) + type = `[${__('string')}]`; + if (~options.array.indexOf(key)) + type = `[${__('array')}]`; + if (~options.number.indexOf(key)) + type = `[${__('number')}]`; + const deprecatedExtra = (deprecated) => typeof deprecated === 'string' + ? `[${__('deprecated: %s', deprecated)}]` + : `[${__('deprecated')}]`; + const extra = [ + key in deprecatedOptions + ? deprecatedExtra(deprecatedOptions[key]) + : null, + type, + key in demandedOptions ? `[${__('required')}]` : null, + options.choices && options.choices[key] + ? `[${__('choices:')} ${self.stringifiedValues(options.choices[key])}]` + : null, + defaultString(options.default[key], options.defaultDescription[key]), + ] + .filter(Boolean) + .join(' '); + ui.span({ + text: getText(kswitch), + padding: [0, 2, 0, 2 + getIndentation(kswitch)], + width: maxWidth(switches, theWrap) + 4, + }, desc); + if (extra) + ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' }); + else + ui.div(); + }); + ui.div(); + }); + if (examples.length) { + ui.div(__('Examples:')); + examples.forEach(example => { + example[0] = example[0].replace(/\$0/g, base$0); + }); + examples.forEach(example => { + if (example[1] === '') { + ui.div({ + text: example[0], + padding: [0, 2, 0, 2], + }); + } + else { + ui.div({ + text: example[0], + padding: [0, 2, 0, 2], + width: maxWidth(examples, theWrap) + 4, + }, { + text: example[1], + }); + } + }); + ui.div(); + } + if (epilogs.length > 0) { + const e = epilogs + .map(epilog => epilog.replace(/\$0/g, base$0)) + .join('\n'); + ui.div(`${e}\n`); + } + return ui.toString().replace(/\s*$/, ''); + }; + function maxWidth(table, theWrap, modifier) { + let width = 0; + if (!Array.isArray(table)) { + table = Object.values(table).map(v => [v]); + } + table.forEach(v => { + width = Math.max(shim.stringWidth(modifier ? `${modifier} ${getText(v[0])}` : getText(v[0])) + getIndentation(v[0]), width); + }); + if (theWrap) + width = Math.min(width, parseInt((theWrap * 0.5).toString(), 10)); + return width; + } + function normalizeAliases() { + const demandedOptions = yargs.getDemandedOptions(); + const options = yargs.getOptions(); + (Object.keys(options.alias) || []).forEach(key => { + options.alias[key].forEach(alias => { + if (descriptions[alias]) + self.describe(key, descriptions[alias]); + if (alias in demandedOptions) + yargs.demandOption(key, demandedOptions[alias]); + if (~options.boolean.indexOf(alias)) + yargs.boolean(key); + if (~options.count.indexOf(alias)) + yargs.count(key); + if (~options.string.indexOf(alias)) + yargs.string(key); + if (~options.normalize.indexOf(alias)) + yargs.normalize(key); + if (~options.array.indexOf(alias)) + yargs.array(key); + if (~options.number.indexOf(alias)) + yargs.number(key); + }); + }); + } + let cachedHelpMessage; + self.cacheHelpMessage = function () { + cachedHelpMessage = this.help(); + }; + self.clearCachedHelpMessage = function () { + cachedHelpMessage = undefined; + }; + function addUngroupedKeys(keys, aliases, groups, defaultGroup) { + let groupedKeys = []; + let toCheck = null; + Object.keys(groups).forEach(group => { + groupedKeys = groupedKeys.concat(groups[group]); + }); + keys.forEach(key => { + toCheck = [key].concat(aliases[key]); + if (!toCheck.some(k => groupedKeys.indexOf(k) !== -1)) { + groups[defaultGroup].push(key); + } + }); + return groupedKeys; + } + function filterHiddenOptions(key) { + return (yargs.getOptions().hiddenOptions.indexOf(key) < 0 || + yargs.parsed.argv[yargs.getOptions().showHiddenOpt]); + } + self.showHelp = (level) => { + const logger = yargs._getLoggerInstance(); + if (!level) + level = 'error'; + const emit = typeof level === 'function' ? level : logger[level]; + emit(self.help()); + }; + self.functionDescription = fn => { + const description = fn.name + ? shim.Parser.decamelize(fn.name, '-') + : __('generated-value'); + return ['(', description, ')'].join(''); + }; + self.stringifiedValues = function stringifiedValues(values, separator) { + let string = ''; + const sep = separator || ', '; + const array = [].concat(values); + if (!values || !array.length) + return string; + array.forEach(value => { + if (string.length) + string += sep; + string += JSON.stringify(value); + }); + return string; + }; + function defaultString(value, defaultDescription) { + let string = `[${__('default:')} `; + if (value === undefined && !defaultDescription) + return null; + if (defaultDescription) { + string += defaultDescription; + } + else { + switch (typeof value) { + case 'string': + string += `"${value}"`; + break; + case 'object': + string += JSON.stringify(value); + break; + default: + string += value; + } + } + return `${string}]`; + } + function windowWidth() { + const maxWidth = 80; + if (shim.process.stdColumns) { + return Math.min(maxWidth, shim.process.stdColumns); + } + else { + return maxWidth; + } + } + let version = null; + self.version = ver => { + version = ver; + }; + self.showVersion = () => { + const logger = yargs._getLoggerInstance(); + logger.log(version); + }; + self.reset = function reset(localLookup) { + failMessage = null; + failureOutput = false; + usages = []; + usageDisabled = false; + epilogs = []; + examples = []; + commands = []; + descriptions = objFilter(descriptions, k => !localLookup[k]); + return self; + }; + const frozens = []; + self.freeze = function freeze() { + frozens.push({ + failMessage, + failureOutput, + usages, + usageDisabled, + epilogs, + examples, + commands, + descriptions, + }); + }; + self.unfreeze = function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ + failMessage, + failureOutput, + usages, + usageDisabled, + epilogs, + examples, + commands, + descriptions, + } = frozen); + }; + return self; +} +function isIndentedText(text) { + return typeof text === 'object'; +} +function addIndentation(text, indent) { + return isIndentedText(text) + ? { text: text.text, indentation: text.indentation + indent } + : { text, indentation: indent }; +} +function getIndentation(text) { + return isIndentedText(text) ? text.indentation : 0; +} +function getText(text) { + return isIndentedText(text) ? text.text : text; +} diff --git a/build/node_modules/yargs/build/lib/utils/apply-extends.js b/build/node_modules/yargs/build/lib/utils/apply-extends.js new file mode 100644 index 00000000..0e593b4f --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/apply-extends.js @@ -0,0 +1,59 @@ +import { YError } from '../yerror.js'; +let previouslyVisitedConfigs = []; +let shim; +export function applyExtends(config, cwd, mergeExtends, _shim) { + shim = _shim; + let defaultConfig = {}; + if (Object.prototype.hasOwnProperty.call(config, 'extends')) { + if (typeof config.extends !== 'string') + return defaultConfig; + const isPath = /\.json|\..*rc$/.test(config.extends); + let pathToDefault = null; + if (!isPath) { + try { + pathToDefault = require.resolve(config.extends); + } + catch (_err) { + return config; + } + } + else { + pathToDefault = getPathToDefaultConfig(cwd, config.extends); + } + checkForCircularExtends(pathToDefault); + previouslyVisitedConfigs.push(pathToDefault); + defaultConfig = isPath + ? JSON.parse(shim.readFileSync(pathToDefault, 'utf8')) + : require(config.extends); + delete config.extends; + defaultConfig = applyExtends(defaultConfig, shim.path.dirname(pathToDefault), mergeExtends, shim); + } + previouslyVisitedConfigs = []; + return mergeExtends + ? mergeDeep(defaultConfig, config) + : Object.assign({}, defaultConfig, config); +} +function checkForCircularExtends(cfgPath) { + if (previouslyVisitedConfigs.indexOf(cfgPath) > -1) { + throw new YError(`Circular extended configurations: '${cfgPath}'.`); + } +} +function getPathToDefaultConfig(cwd, pathToExtend) { + return shim.path.resolve(cwd, pathToExtend); +} +function mergeDeep(config1, config2) { + const target = {}; + function isObject(obj) { + return obj && typeof obj === 'object' && !Array.isArray(obj); + } + Object.assign(target, config1); + for (const key of Object.keys(config2)) { + if (isObject(config2[key]) && isObject(target[key])) { + target[key] = mergeDeep(config1[key], config2[key]); + } + else { + target[key] = config2[key]; + } + } + return target; +} diff --git a/build/node_modules/yargs/build/lib/utils/is-promise.js b/build/node_modules/yargs/build/lib/utils/is-promise.js new file mode 100644 index 00000000..d250c08a --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/is-promise.js @@ -0,0 +1,5 @@ +export function isPromise(maybePromise) { + return (!!maybePromise && + !!maybePromise.then && + typeof maybePromise.then === 'function'); +} diff --git a/build/node_modules/yargs/build/lib/utils/levenshtein.js b/build/node_modules/yargs/build/lib/utils/levenshtein.js new file mode 100644 index 00000000..068168eb --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/levenshtein.js @@ -0,0 +1,26 @@ +export function levenshtein(a, b) { + if (a.length === 0) + return b.length; + if (b.length === 0) + return a.length; + const matrix = []; + let i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } + let j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) === a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } + else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)); + } + } + } + return matrix[b.length][a.length]; +} diff --git a/build/node_modules/yargs/build/lib/utils/obj-filter.js b/build/node_modules/yargs/build/lib/utils/obj-filter.js new file mode 100644 index 00000000..cd68ad29 --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/obj-filter.js @@ -0,0 +1,10 @@ +import { objectKeys } from '../typings/common-types.js'; +export function objFilter(original = {}, filter = () => true) { + const obj = {}; + objectKeys(original).forEach(key => { + if (filter(key, original[key])) { + obj[key] = original[key]; + } + }); + return obj; +} diff --git a/build/node_modules/yargs/build/lib/utils/process-argv.js b/build/node_modules/yargs/build/lib/utils/process-argv.js new file mode 100644 index 00000000..74dc9e4c --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/process-argv.js @@ -0,0 +1,17 @@ +function getProcessArgvBinIndex() { + if (isBundledElectronApp()) + return 0; + return 1; +} +function isBundledElectronApp() { + return isElectronApp() && !process.defaultApp; +} +function isElectronApp() { + return !!process.versions.electron; +} +export function hideBin(argv) { + return argv.slice(getProcessArgvBinIndex() + 1); +} +export function getProcessArgvBin() { + return process.argv[getProcessArgvBinIndex()]; +} diff --git a/build/node_modules/yargs/build/lib/utils/set-blocking.js b/build/node_modules/yargs/build/lib/utils/set-blocking.js new file mode 100644 index 00000000..88fb806d --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/set-blocking.js @@ -0,0 +1,12 @@ +export default function setBlocking(blocking) { + if (typeof process === 'undefined') + return; + [process.stdout, process.stderr].forEach(_stream => { + const stream = _stream; + if (stream._handle && + stream.isTTY && + typeof stream._handle.setBlocking === 'function') { + stream._handle.setBlocking(blocking); + } + }); +} diff --git a/build/node_modules/yargs/build/lib/utils/which-module.js b/build/node_modules/yargs/build/lib/utils/which-module.js new file mode 100644 index 00000000..5974e226 --- /dev/null +++ b/build/node_modules/yargs/build/lib/utils/which-module.js @@ -0,0 +1,10 @@ +export default function whichModule(exported) { + if (typeof require === 'undefined') + return null; + for (let i = 0, files = Object.keys(require.cache), mod; i < files.length; i++) { + mod = require.cache[files[i]]; + if (mod.exports === exported) + return mod; + } + return null; +} diff --git a/build/node_modules/yargs/build/lib/validation.js b/build/node_modules/yargs/build/lib/validation.js new file mode 100644 index 00000000..dd77e075 --- /dev/null +++ b/build/node_modules/yargs/build/lib/validation.js @@ -0,0 +1,308 @@ +import { argsert } from './argsert.js'; +import { assertNotStrictEqual, } from './typings/common-types.js'; +import { levenshtein as distance } from './utils/levenshtein.js'; +import { objFilter } from './utils/obj-filter.js'; +const specialKeys = ['$0', '--', '_']; +export function validation(yargs, usage, y18n, shim) { + const __ = y18n.__; + const __n = y18n.__n; + const self = {}; + self.nonOptionCount = function nonOptionCount(argv) { + const demandedCommands = yargs.getDemandedCommands(); + const positionalCount = argv._.length + (argv['--'] ? argv['--'].length : 0); + const _s = positionalCount - yargs.getContext().commands.length; + if (demandedCommands._ && + (_s < demandedCommands._.min || _s > demandedCommands._.max)) { + if (_s < demandedCommands._.min) { + if (demandedCommands._.minMsg !== undefined) { + usage.fail(demandedCommands._.minMsg + ? demandedCommands._.minMsg + .replace(/\$0/g, _s.toString()) + .replace(/\$1/, demandedCommands._.min.toString()) + : null); + } + else { + usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', _s, _s.toString(), demandedCommands._.min.toString())); + } + } + else if (_s > demandedCommands._.max) { + if (demandedCommands._.maxMsg !== undefined) { + usage.fail(demandedCommands._.maxMsg + ? demandedCommands._.maxMsg + .replace(/\$0/g, _s.toString()) + .replace(/\$1/, demandedCommands._.max.toString()) + : null); + } + else { + usage.fail(__n('Too many non-option arguments: got %s, maximum of %s', 'Too many non-option arguments: got %s, maximum of %s', _s, _s.toString(), demandedCommands._.max.toString())); + } + } + } + }; + self.positionalCount = function positionalCount(required, observed) { + if (observed < required) { + usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', observed, observed + '', required + '')); + } + }; + self.requiredArguments = function requiredArguments(argv) { + const demandedOptions = yargs.getDemandedOptions(); + let missing = null; + for (const key of Object.keys(demandedOptions)) { + if (!Object.prototype.hasOwnProperty.call(argv, key) || + typeof argv[key] === 'undefined') { + missing = missing || {}; + missing[key] = demandedOptions[key]; + } + } + if (missing) { + const customMsgs = []; + for (const key of Object.keys(missing)) { + const msg = missing[key]; + if (msg && customMsgs.indexOf(msg) < 0) { + customMsgs.push(msg); + } + } + const customMsg = customMsgs.length ? `\n${customMsgs.join('\n')}` : ''; + usage.fail(__n('Missing required argument: %s', 'Missing required arguments: %s', Object.keys(missing).length, Object.keys(missing).join(', ') + customMsg)); + } + }; + self.unknownArguments = function unknownArguments(argv, aliases, positionalMap, isDefaultCommand, checkPositionals = true) { + const commandKeys = yargs.getCommandInstance().getCommands(); + const unknown = []; + const currentContext = yargs.getContext(); + Object.keys(argv).forEach(key => { + if (specialKeys.indexOf(key) === -1 && + !Object.prototype.hasOwnProperty.call(positionalMap, key) && + !Object.prototype.hasOwnProperty.call(yargs._getParseContext(), key) && + !self.isValidAndSomeAliasIsNotNew(key, aliases)) { + unknown.push(key); + } + }); + if (checkPositionals && + (currentContext.commands.length > 0 || + commandKeys.length > 0 || + isDefaultCommand)) { + argv._.slice(currentContext.commands.length).forEach(key => { + if (commandKeys.indexOf('' + key) === -1) { + unknown.push('' + key); + } + }); + } + if (unknown.length > 0) { + usage.fail(__n('Unknown argument: %s', 'Unknown arguments: %s', unknown.length, unknown.join(', '))); + } + }; + self.unknownCommands = function unknownCommands(argv) { + const commandKeys = yargs.getCommandInstance().getCommands(); + const unknown = []; + const currentContext = yargs.getContext(); + if (currentContext.commands.length > 0 || commandKeys.length > 0) { + argv._.slice(currentContext.commands.length).forEach(key => { + if (commandKeys.indexOf('' + key) === -1) { + unknown.push('' + key); + } + }); + } + if (unknown.length > 0) { + usage.fail(__n('Unknown command: %s', 'Unknown commands: %s', unknown.length, unknown.join(', '))); + return true; + } + else { + return false; + } + }; + self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew(key, aliases) { + if (!Object.prototype.hasOwnProperty.call(aliases, key)) { + return false; + } + const newAliases = yargs.parsed.newAliases; + for (const a of [key, ...aliases[key]]) { + if (!Object.prototype.hasOwnProperty.call(newAliases, a) || + !newAliases[key]) { + return true; + } + } + return false; + }; + self.limitedChoices = function limitedChoices(argv) { + const options = yargs.getOptions(); + const invalid = {}; + if (!Object.keys(options.choices).length) + return; + Object.keys(argv).forEach(key => { + if (specialKeys.indexOf(key) === -1 && + Object.prototype.hasOwnProperty.call(options.choices, key)) { + [].concat(argv[key]).forEach(value => { + if (options.choices[key].indexOf(value) === -1 && + value !== undefined) { + invalid[key] = (invalid[key] || []).concat(value); + } + }); + } + }); + const invalidKeys = Object.keys(invalid); + if (!invalidKeys.length) + return; + let msg = __('Invalid values:'); + invalidKeys.forEach(key => { + msg += `\n ${__('Argument: %s, Given: %s, Choices: %s', key, usage.stringifiedValues(invalid[key]), usage.stringifiedValues(options.choices[key]))}`; + }); + usage.fail(msg); + }; + let checks = []; + self.check = function check(f, global) { + checks.push({ + func: f, + global, + }); + }; + self.customChecks = function customChecks(argv, aliases) { + for (let i = 0, f; (f = checks[i]) !== undefined; i++) { + const func = f.func; + let result = null; + try { + result = func(argv, aliases); + } + catch (err) { + usage.fail(err.message ? err.message : err, err); + continue; + } + if (!result) { + usage.fail(__('Argument check failed: %s', func.toString())); + } + else if (typeof result === 'string' || result instanceof Error) { + usage.fail(result.toString(), result); + } + } + }; + let implied = {}; + self.implies = function implies(key, value) { + argsert(' [array|number|string]', [key, value], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.implies(k, key[k]); + }); + } + else { + yargs.global(key); + if (!implied[key]) { + implied[key] = []; + } + if (Array.isArray(value)) { + value.forEach(i => self.implies(key, i)); + } + else { + assertNotStrictEqual(value, undefined, shim); + implied[key].push(value); + } + } + }; + self.getImplied = function getImplied() { + return implied; + }; + function keyExists(argv, val) { + const num = Number(val); + val = isNaN(num) ? val : num; + if (typeof val === 'number') { + val = argv._.length >= val; + } + else if (val.match(/^--no-.+/)) { + val = val.match(/^--no-(.+)/)[1]; + val = !argv[val]; + } + else { + val = argv[val]; + } + return val; + } + self.implications = function implications(argv) { + const implyFail = []; + Object.keys(implied).forEach(key => { + const origKey = key; + (implied[key] || []).forEach(value => { + let key = origKey; + const origValue = value; + key = keyExists(argv, key); + value = keyExists(argv, value); + if (key && !value) { + implyFail.push(` ${origKey} -> ${origValue}`); + } + }); + }); + if (implyFail.length) { + let msg = `${__('Implications failed:')}\n`; + implyFail.forEach(value => { + msg += value; + }); + usage.fail(msg); + } + }; + let conflicting = {}; + self.conflicts = function conflicts(key, value) { + argsert(' [array|string]', [key, value], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.conflicts(k, key[k]); + }); + } + else { + yargs.global(key); + if (!conflicting[key]) { + conflicting[key] = []; + } + if (Array.isArray(value)) { + value.forEach(i => self.conflicts(key, i)); + } + else { + conflicting[key].push(value); + } + } + }; + self.getConflicting = () => conflicting; + self.conflicting = function conflictingFn(argv) { + Object.keys(argv).forEach(key => { + if (conflicting[key]) { + conflicting[key].forEach(value => { + if (value && argv[key] !== undefined && argv[value] !== undefined) { + usage.fail(__('Arguments %s and %s are mutually exclusive', key, value)); + } + }); + } + }); + }; + self.recommendCommands = function recommendCommands(cmd, potentialCommands) { + const threshold = 3; + potentialCommands = potentialCommands.sort((a, b) => b.length - a.length); + let recommended = null; + let bestDistance = Infinity; + for (let i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) { + const d = distance(cmd, candidate); + if (d <= threshold && d < bestDistance) { + bestDistance = d; + recommended = candidate; + } + } + if (recommended) + usage.fail(__('Did you mean %s?', recommended)); + }; + self.reset = function reset(localLookup) { + implied = objFilter(implied, k => !localLookup[k]); + conflicting = objFilter(conflicting, k => !localLookup[k]); + checks = checks.filter(c => c.global); + return self; + }; + const frozens = []; + self.freeze = function freeze() { + frozens.push({ + implied, + checks, + conflicting, + }); + }; + self.unfreeze = function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + ({ implied, checks, conflicting } = frozen); + }; + return self; +} diff --git a/build/node_modules/yargs/build/lib/yargs-factory.js b/build/node_modules/yargs/build/lib/yargs-factory.js new file mode 100644 index 00000000..741b329b --- /dev/null +++ b/build/node_modules/yargs/build/lib/yargs-factory.js @@ -0,0 +1,1143 @@ +import { command as Command, } from './command.js'; +import { assertNotStrictEqual, assertSingleKey, objectKeys, } from './typings/common-types.js'; +import { YError } from './yerror.js'; +import { usage as Usage } from './usage.js'; +import { argsert } from './argsert.js'; +import { completion as Completion, } from './completion.js'; +import { validation as Validation, } from './validation.js'; +import { objFilter } from './utils/obj-filter.js'; +import { applyExtends } from './utils/apply-extends.js'; +import { globalMiddlewareFactory, } from './middleware.js'; +import { isPromise } from './utils/is-promise.js'; +import setBlocking from './utils/set-blocking.js'; +let shim; +export function YargsWithShim(_shim) { + shim = _shim; + return Yargs; +} +function Yargs(processArgs = [], cwd = shim.process.cwd(), parentRequire) { + const self = {}; + let command; + let completion = null; + let groups = {}; + const globalMiddleware = []; + let output = ''; + const preservedGroups = {}; + let usage; + let validation; + let handlerFinishCommand = null; + const y18n = shim.y18n; + self.middleware = globalMiddlewareFactory(globalMiddleware, self); + self.scriptName = function (scriptName) { + self.customScriptName = true; + self.$0 = scriptName; + return self; + }; + let default$0; + if (/\b(node|iojs|electron)(\.exe)?$/.test(shim.process.argv()[0])) { + default$0 = shim.process.argv().slice(1, 2); + } + else { + default$0 = shim.process.argv().slice(0, 1); + } + self.$0 = default$0 + .map(x => { + const b = rebase(cwd, x); + return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x; + }) + .join(' ') + .trim(); + if (shim.getEnv('_') && shim.getProcessArgvBin() === shim.getEnv('_')) { + self.$0 = shim + .getEnv('_') + .replace(`${shim.path.dirname(shim.process.execPath())}/`, ''); + } + const context = { resets: -1, commands: [], fullCommands: [], files: [] }; + self.getContext = () => context; + let hasOutput = false; + let exitError = null; + self.exit = (code, err) => { + hasOutput = true; + exitError = err; + if (exitProcess) + shim.process.exit(code); + }; + let completionCommand = null; + self.completion = function (cmd, desc, fn) { + argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length); + if (typeof desc === 'function') { + fn = desc; + desc = undefined; + } + completionCommand = cmd || completionCommand || 'completion'; + if (!desc && desc !== false) { + desc = 'generate completion script'; + } + self.command(completionCommand, desc); + if (fn) + completion.registerFunction(fn); + return self; + }; + let options; + self.resetOptions = self.reset = function resetOptions(aliases = {}) { + context.resets++; + options = options || {}; + const tmpOptions = {}; + tmpOptions.local = options.local ? options.local : []; + tmpOptions.configObjects = options.configObjects + ? options.configObjects + : []; + const localLookup = {}; + tmpOptions.local.forEach(l => { + localLookup[l] = true; + (aliases[l] || []).forEach(a => { + localLookup[a] = true; + }); + }); + Object.assign(preservedGroups, Object.keys(groups).reduce((acc, groupName) => { + const keys = groups[groupName].filter(key => !(key in localLookup)); + if (keys.length > 0) { + acc[groupName] = keys; + } + return acc; + }, {})); + groups = {}; + const arrayOptions = [ + 'array', + 'boolean', + 'string', + 'skipValidation', + 'count', + 'normalize', + 'number', + 'hiddenOptions', + ]; + const objectOptions = [ + 'narg', + 'key', + 'alias', + 'default', + 'defaultDescription', + 'config', + 'choices', + 'demandedOptions', + 'demandedCommands', + 'coerce', + 'deprecatedOptions', + ]; + arrayOptions.forEach(k => { + tmpOptions[k] = (options[k] || []).filter((k) => !localLookup[k]); + }); + objectOptions.forEach((k) => { + tmpOptions[k] = objFilter(options[k], k => !localLookup[k]); + }); + tmpOptions.envPrefix = options.envPrefix; + options = tmpOptions; + usage = usage ? usage.reset(localLookup) : Usage(self, y18n, shim); + validation = validation + ? validation.reset(localLookup) + : Validation(self, usage, y18n, shim); + command = command + ? command.reset() + : Command(self, usage, validation, globalMiddleware, shim); + if (!completion) + completion = Completion(self, usage, command, shim); + completionCommand = null; + output = ''; + exitError = null; + hasOutput = false; + self.parsed = false; + return self; + }; + self.resetOptions(); + const frozens = []; + function freeze() { + frozens.push({ + options, + configObjects: options.configObjects.slice(0), + exitProcess, + groups, + strict, + strictCommands, + strictOptions, + completionCommand, + output, + exitError, + hasOutput, + parsed: self.parsed, + parseFn, + parseContext, + handlerFinishCommand, + }); + usage.freeze(); + validation.freeze(); + command.freeze(); + } + function unfreeze() { + const frozen = frozens.pop(); + assertNotStrictEqual(frozen, undefined, shim); + let configObjects; + ({ + options, + configObjects, + exitProcess, + groups, + output, + exitError, + hasOutput, + parsed: self.parsed, + strict, + strictCommands, + strictOptions, + completionCommand, + parseFn, + parseContext, + handlerFinishCommand, + } = frozen); + options.configObjects = configObjects; + usage.unfreeze(); + validation.unfreeze(); + command.unfreeze(); + } + self.boolean = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('boolean', keys); + return self; + }; + self.array = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('array', keys); + return self; + }; + self.number = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('number', keys); + return self; + }; + self.normalize = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('normalize', keys); + return self; + }; + self.count = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('count', keys); + return self; + }; + self.string = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('string', keys); + return self; + }; + self.requiresArg = function (keys) { + argsert(' [number]', [keys], arguments.length); + if (typeof keys === 'string' && options.narg[keys]) { + return self; + } + else { + populateParserHintSingleValueDictionary(self.requiresArg, 'narg', keys, NaN); + } + return self; + }; + self.skipValidation = function (keys) { + argsert('', [keys], arguments.length); + populateParserHintArray('skipValidation', keys); + return self; + }; + function populateParserHintArray(type, keys) { + keys = [].concat(keys); + keys.forEach(key => { + key = sanitizeKey(key); + options[type].push(key); + }); + } + self.nargs = function (key, value) { + argsert(' [number]', [key, value], arguments.length); + populateParserHintSingleValueDictionary(self.nargs, 'narg', key, value); + return self; + }; + self.choices = function (key, value) { + argsert(' [string|array]', [key, value], arguments.length); + populateParserHintArrayDictionary(self.choices, 'choices', key, value); + return self; + }; + self.alias = function (key, value) { + argsert(' [string|array]', [key, value], arguments.length); + populateParserHintArrayDictionary(self.alias, 'alias', key, value); + return self; + }; + self.default = self.defaults = function (key, value, defaultDescription) { + argsert(' [*] [string]', [key, value, defaultDescription], arguments.length); + if (defaultDescription) { + assertSingleKey(key, shim); + options.defaultDescription[key] = defaultDescription; + } + if (typeof value === 'function') { + assertSingleKey(key, shim); + if (!options.defaultDescription[key]) + options.defaultDescription[key] = usage.functionDescription(value); + value = value.call(); + } + populateParserHintSingleValueDictionary(self.default, 'default', key, value); + return self; + }; + self.describe = function (key, desc) { + argsert(' [string]', [key, desc], arguments.length); + setKey(key, true); + usage.describe(key, desc); + return self; + }; + function setKey(key, set) { + populateParserHintSingleValueDictionary(setKey, 'key', key, set); + return self; + } + function demandOption(keys, msg) { + argsert(' [string]', [keys, msg], arguments.length); + populateParserHintSingleValueDictionary(self.demandOption, 'demandedOptions', keys, msg); + return self; + } + self.demandOption = demandOption; + self.coerce = function (keys, value) { + argsert(' [function]', [keys, value], arguments.length); + populateParserHintSingleValueDictionary(self.coerce, 'coerce', keys, value); + return self; + }; + function populateParserHintSingleValueDictionary(builder, type, key, value) { + populateParserHintDictionary(builder, type, key, value, (type, key, value) => { + options[type][key] = value; + }); + } + function populateParserHintArrayDictionary(builder, type, key, value) { + populateParserHintDictionary(builder, type, key, value, (type, key, value) => { + options[type][key] = (options[type][key] || []).concat(value); + }); + } + function populateParserHintDictionary(builder, type, key, value, singleKeyHandler) { + if (Array.isArray(key)) { + key.forEach(k => { + builder(k, value); + }); + } + else if (((key) => typeof key === 'object')(key)) { + for (const k of objectKeys(key)) { + builder(k, key[k]); + } + } + else { + singleKeyHandler(type, sanitizeKey(key), value); + } + } + function sanitizeKey(key) { + if (key === '__proto__') + return '___proto___'; + return key; + } + function deleteFromParserHintObject(optionKey) { + objectKeys(options).forEach((hintKey) => { + if (((key) => key === 'configObjects')(hintKey)) + return; + const hint = options[hintKey]; + if (Array.isArray(hint)) { + if (~hint.indexOf(optionKey)) + hint.splice(hint.indexOf(optionKey), 1); + } + else if (typeof hint === 'object') { + delete hint[optionKey]; + } + }); + delete usage.getDescriptions()[optionKey]; + } + self.config = function config(key = 'config', msg, parseFn) { + argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length); + if (typeof key === 'object' && !Array.isArray(key)) { + key = applyExtends(key, cwd, self.getParserConfiguration()['deep-merge-config'] || false, shim); + options.configObjects = (options.configObjects || []).concat(key); + return self; + } + if (typeof msg === 'function') { + parseFn = msg; + msg = undefined; + } + self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file')); + (Array.isArray(key) ? key : [key]).forEach(k => { + options.config[k] = parseFn || true; + }); + return self; + }; + self.example = function (cmd, description) { + argsert(' [string]', [cmd, description], arguments.length); + if (Array.isArray(cmd)) { + cmd.forEach(exampleParams => self.example(...exampleParams)); + } + else { + usage.example(cmd, description); + } + return self; + }; + self.command = function (cmd, description, builder, handler, middlewares, deprecated) { + argsert(' [string|boolean] [function|object] [function] [array] [boolean|string]', [cmd, description, builder, handler, middlewares, deprecated], arguments.length); + command.addHandler(cmd, description, builder, handler, middlewares, deprecated); + return self; + }; + self.commandDir = function (dir, opts) { + argsert(' [object]', [dir, opts], arguments.length); + const req = parentRequire || shim.require; + command.addDirectory(dir, self.getContext(), req, shim.getCallerFile(), opts); + return self; + }; + self.demand = self.required = self.require = function demand(keys, max, msg) { + if (Array.isArray(max)) { + max.forEach(key => { + assertNotStrictEqual(msg, true, shim); + demandOption(key, msg); + }); + max = Infinity; + } + else if (typeof max !== 'number') { + msg = max; + max = Infinity; + } + if (typeof keys === 'number') { + assertNotStrictEqual(msg, true, shim); + self.demandCommand(keys, max, msg, msg); + } + else if (Array.isArray(keys)) { + keys.forEach(key => { + assertNotStrictEqual(msg, true, shim); + demandOption(key, msg); + }); + } + else { + if (typeof msg === 'string') { + demandOption(keys, msg); + } + else if (msg === true || typeof msg === 'undefined') { + demandOption(keys); + } + } + return self; + }; + self.demandCommand = function demandCommand(min = 1, max, minMsg, maxMsg) { + argsert('[number] [number|string] [string|null|undefined] [string|null|undefined]', [min, max, minMsg, maxMsg], arguments.length); + if (typeof max !== 'number') { + minMsg = max; + max = Infinity; + } + self.global('_', false); + options.demandedCommands._ = { + min, + max, + minMsg, + maxMsg, + }; + return self; + }; + self.getDemandedOptions = () => { + argsert([], 0); + return options.demandedOptions; + }; + self.getDemandedCommands = () => { + argsert([], 0); + return options.demandedCommands; + }; + self.deprecateOption = function deprecateOption(option, message) { + argsert(' [string|boolean]', [option, message], arguments.length); + options.deprecatedOptions[option] = message; + return self; + }; + self.getDeprecatedOptions = () => { + argsert([], 0); + return options.deprecatedOptions; + }; + self.implies = function (key, value) { + argsert(' [number|string|array]', [key, value], arguments.length); + validation.implies(key, value); + return self; + }; + self.conflicts = function (key1, key2) { + argsert(' [string|array]', [key1, key2], arguments.length); + validation.conflicts(key1, key2); + return self; + }; + self.usage = function (msg, description, builder, handler) { + argsert(' [string|boolean] [function|object] [function]', [msg, description, builder, handler], arguments.length); + if (description !== undefined) { + assertNotStrictEqual(msg, null, shim); + if ((msg || '').match(/^\$0( |$)/)) { + return self.command(msg, description, builder, handler); + } + else { + throw new YError('.usage() description must start with $0 if being used as alias for .command()'); + } + } + else { + usage.usage(msg); + return self; + } + }; + self.epilogue = self.epilog = function (msg) { + argsert('', [msg], arguments.length); + usage.epilog(msg); + return self; + }; + self.fail = function (f) { + argsert('', [f], arguments.length); + usage.failFn(f); + return self; + }; + self.onFinishCommand = function (f) { + argsert('', [f], arguments.length); + handlerFinishCommand = f; + return self; + }; + self.getHandlerFinishCommand = () => handlerFinishCommand; + self.check = function (f, _global) { + argsert(' [boolean]', [f, _global], arguments.length); + validation.check(f, _global !== false); + return self; + }; + self.global = function global(globals, global) { + argsert(' [boolean]', [globals, global], arguments.length); + globals = [].concat(globals); + if (global !== false) { + options.local = options.local.filter(l => globals.indexOf(l) === -1); + } + else { + globals.forEach(g => { + if (options.local.indexOf(g) === -1) + options.local.push(g); + }); + } + return self; + }; + self.pkgConf = function pkgConf(key, rootPath) { + argsert(' [string]', [key, rootPath], arguments.length); + let conf = null; + const obj = pkgUp(rootPath || cwd); + if (obj[key] && typeof obj[key] === 'object') { + conf = applyExtends(obj[key], rootPath || cwd, self.getParserConfiguration()['deep-merge-config'] || false, shim); + options.configObjects = (options.configObjects || []).concat(conf); + } + return self; + }; + const pkgs = {}; + function pkgUp(rootPath) { + const npath = rootPath || '*'; + if (pkgs[npath]) + return pkgs[npath]; + let obj = {}; + try { + let startDir = rootPath || shim.mainFilename; + if (!rootPath && shim.path.extname(startDir)) { + startDir = shim.path.dirname(startDir); + } + const pkgJsonPath = shim.findUp(startDir, (dir, names) => { + if (names.includes('package.json')) { + return 'package.json'; + } + else { + return undefined; + } + }); + assertNotStrictEqual(pkgJsonPath, undefined, shim); + obj = JSON.parse(shim.readFileSync(pkgJsonPath, 'utf8')); + } + catch (_noop) { } + pkgs[npath] = obj || {}; + return pkgs[npath]; + } + let parseFn = null; + let parseContext = null; + self.parse = function parse(args, shortCircuit, _parseFn) { + argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length); + freeze(); + if (typeof args === 'undefined') { + const argv = self._parseArgs(processArgs); + const tmpParsed = self.parsed; + unfreeze(); + self.parsed = tmpParsed; + return argv; + } + if (typeof shortCircuit === 'object') { + parseContext = shortCircuit; + shortCircuit = _parseFn; + } + if (typeof shortCircuit === 'function') { + parseFn = shortCircuit; + shortCircuit = false; + } + if (!shortCircuit) + processArgs = args; + if (parseFn) + exitProcess = false; + const parsed = self._parseArgs(args, !!shortCircuit); + completion.setParsed(self.parsed); + if (parseFn) + parseFn(exitError, parsed, output); + unfreeze(); + return parsed; + }; + self._getParseContext = () => parseContext || {}; + self._hasParseCallback = () => !!parseFn; + self.option = self.options = function option(key, opt) { + argsert(' [object]', [key, opt], arguments.length); + if (typeof key === 'object') { + Object.keys(key).forEach(k => { + self.options(k, key[k]); + }); + } + else { + if (typeof opt !== 'object') { + opt = {}; + } + options.key[key] = true; + if (opt.alias) + self.alias(key, opt.alias); + const deprecate = opt.deprecate || opt.deprecated; + if (deprecate) { + self.deprecateOption(key, deprecate); + } + const demand = opt.demand || opt.required || opt.require; + if (demand) { + self.demand(key, demand); + } + if (opt.demandOption) { + self.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined); + } + if (opt.conflicts) { + self.conflicts(key, opt.conflicts); + } + if ('default' in opt) { + self.default(key, opt.default); + } + if (opt.implies !== undefined) { + self.implies(key, opt.implies); + } + if (opt.nargs !== undefined) { + self.nargs(key, opt.nargs); + } + if (opt.config) { + self.config(key, opt.configParser); + } + if (opt.normalize) { + self.normalize(key); + } + if (opt.choices) { + self.choices(key, opt.choices); + } + if (opt.coerce) { + self.coerce(key, opt.coerce); + } + if (opt.group) { + self.group(key, opt.group); + } + if (opt.boolean || opt.type === 'boolean') { + self.boolean(key); + if (opt.alias) + self.boolean(opt.alias); + } + if (opt.array || opt.type === 'array') { + self.array(key); + if (opt.alias) + self.array(opt.alias); + } + if (opt.number || opt.type === 'number') { + self.number(key); + if (opt.alias) + self.number(opt.alias); + } + if (opt.string || opt.type === 'string') { + self.string(key); + if (opt.alias) + self.string(opt.alias); + } + if (opt.count || opt.type === 'count') { + self.count(key); + } + if (typeof opt.global === 'boolean') { + self.global(key, opt.global); + } + if (opt.defaultDescription) { + options.defaultDescription[key] = opt.defaultDescription; + } + if (opt.skipValidation) { + self.skipValidation(key); + } + const desc = opt.describe || opt.description || opt.desc; + self.describe(key, desc); + if (opt.hidden) { + self.hide(key); + } + if (opt.requiresArg) { + self.requiresArg(key); + } + } + return self; + }; + self.getOptions = () => options; + self.positional = function (key, opts) { + argsert(' ', [key, opts], arguments.length); + if (context.resets === 0) { + throw new YError(".positional() can only be called in a command's builder function"); + } + const supportedOpts = [ + 'default', + 'defaultDescription', + 'implies', + 'normalize', + 'choices', + 'conflicts', + 'coerce', + 'type', + 'describe', + 'desc', + 'description', + 'alias', + ]; + opts = objFilter(opts, (k, v) => { + let accept = supportedOpts.indexOf(k) !== -1; + if (k === 'type' && ['string', 'number', 'boolean'].indexOf(v) === -1) + accept = false; + return accept; + }); + const fullCommand = context.fullCommands[context.fullCommands.length - 1]; + const parseOptions = fullCommand + ? command.cmdToParseOptions(fullCommand) + : { + array: [], + alias: {}, + default: {}, + demand: {}, + }; + objectKeys(parseOptions).forEach(pk => { + const parseOption = parseOptions[pk]; + if (Array.isArray(parseOption)) { + if (parseOption.indexOf(key) !== -1) + opts[pk] = true; + } + else { + if (parseOption[key] && !(pk in opts)) + opts[pk] = parseOption[key]; + } + }); + self.group(key, usage.getPositionalGroupName()); + return self.option(key, opts); + }; + self.group = function group(opts, groupName) { + argsert(' ', [opts, groupName], arguments.length); + const existing = preservedGroups[groupName] || groups[groupName]; + if (preservedGroups[groupName]) { + delete preservedGroups[groupName]; + } + const seen = {}; + groups[groupName] = (existing || []).concat(opts).filter(key => { + if (seen[key]) + return false; + return (seen[key] = true); + }); + return self; + }; + self.getGroups = () => Object.assign({}, groups, preservedGroups); + self.env = function (prefix) { + argsert('[string|boolean]', [prefix], arguments.length); + if (prefix === false) + delete options.envPrefix; + else + options.envPrefix = prefix || ''; + return self; + }; + self.wrap = function (cols) { + argsert('', [cols], arguments.length); + usage.wrap(cols); + return self; + }; + let strict = false; + self.strict = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strict = enabled !== false; + return self; + }; + self.getStrict = () => strict; + let strictCommands = false; + self.strictCommands = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strictCommands = enabled !== false; + return self; + }; + self.getStrictCommands = () => strictCommands; + let strictOptions = false; + self.strictOptions = function (enabled) { + argsert('[boolean]', [enabled], arguments.length); + strictOptions = enabled !== false; + return self; + }; + self.getStrictOptions = () => strictOptions; + let parserConfig = {}; + self.parserConfiguration = function parserConfiguration(config) { + argsert('', [config], arguments.length); + parserConfig = config; + return self; + }; + self.getParserConfiguration = () => parserConfig; + self.showHelp = function (level) { + argsert('[string|function]', [level], arguments.length); + if (!self.parsed) + self._parseArgs(processArgs); + if (command.hasDefaultCommand()) { + context.resets++; + command.runDefaultBuilderOn(self); + } + usage.showHelp(level); + return self; + }; + let versionOpt = null; + self.version = function version(opt, msg, ver) { + const defaultVersionOpt = 'version'; + argsert('[boolean|string] [string] [string]', [opt, msg, ver], arguments.length); + if (versionOpt) { + deleteFromParserHintObject(versionOpt); + usage.version(undefined); + versionOpt = null; + } + if (arguments.length === 0) { + ver = guessVersion(); + opt = defaultVersionOpt; + } + else if (arguments.length === 1) { + if (opt === false) { + return self; + } + ver = opt; + opt = defaultVersionOpt; + } + else if (arguments.length === 2) { + ver = msg; + msg = undefined; + } + versionOpt = typeof opt === 'string' ? opt : defaultVersionOpt; + msg = msg || usage.deferY18nLookup('Show version number'); + usage.version(ver || undefined); + self.boolean(versionOpt); + self.describe(versionOpt, msg); + return self; + }; + function guessVersion() { + const obj = pkgUp(); + return obj.version || 'unknown'; + } + let helpOpt = null; + self.addHelpOpt = self.help = function addHelpOpt(opt, msg) { + const defaultHelpOpt = 'help'; + argsert('[string|boolean] [string]', [opt, msg], arguments.length); + if (helpOpt) { + deleteFromParserHintObject(helpOpt); + helpOpt = null; + } + if (arguments.length === 1) { + if (opt === false) + return self; + } + helpOpt = typeof opt === 'string' ? opt : defaultHelpOpt; + self.boolean(helpOpt); + self.describe(helpOpt, msg || usage.deferY18nLookup('Show help')); + return self; + }; + const defaultShowHiddenOpt = 'show-hidden'; + options.showHiddenOpt = defaultShowHiddenOpt; + self.addShowHiddenOpt = self.showHidden = function addShowHiddenOpt(opt, msg) { + argsert('[string|boolean] [string]', [opt, msg], arguments.length); + if (arguments.length === 1) { + if (opt === false) + return self; + } + const showHiddenOpt = typeof opt === 'string' ? opt : defaultShowHiddenOpt; + self.boolean(showHiddenOpt); + self.describe(showHiddenOpt, msg || usage.deferY18nLookup('Show hidden options')); + options.showHiddenOpt = showHiddenOpt; + return self; + }; + self.hide = function hide(key) { + argsert('', [key], arguments.length); + options.hiddenOptions.push(key); + return self; + }; + self.showHelpOnFail = function showHelpOnFail(enabled, message) { + argsert('[boolean|string] [string]', [enabled, message], arguments.length); + usage.showHelpOnFail(enabled, message); + return self; + }; + let exitProcess = true; + self.exitProcess = function (enabled = true) { + argsert('[boolean]', [enabled], arguments.length); + exitProcess = enabled; + return self; + }; + self.getExitProcess = () => exitProcess; + self.showCompletionScript = function ($0, cmd) { + argsert('[string] [string]', [$0, cmd], arguments.length); + $0 = $0 || self.$0; + _logger.log(completion.generateCompletionScript($0, cmd || completionCommand || 'completion')); + return self; + }; + self.getCompletion = function (args, done) { + argsert(' ', [args, done], arguments.length); + completion.getCompletion(args, done); + }; + self.locale = function (locale) { + argsert('[string]', [locale], arguments.length); + if (!locale) { + guessLocale(); + return y18n.getLocale(); + } + detectLocale = false; + y18n.setLocale(locale); + return self; + }; + self.updateStrings = self.updateLocale = function (obj) { + argsert('', [obj], arguments.length); + detectLocale = false; + y18n.updateLocale(obj); + return self; + }; + let detectLocale = true; + self.detectLocale = function (detect) { + argsert('', [detect], arguments.length); + detectLocale = detect; + return self; + }; + self.getDetectLocale = () => detectLocale; + const _logger = { + log(...args) { + if (!self._hasParseCallback()) + console.log(...args); + hasOutput = true; + if (output.length) + output += '\n'; + output += args.join(' '); + }, + error(...args) { + if (!self._hasParseCallback()) + console.error(...args); + hasOutput = true; + if (output.length) + output += '\n'; + output += args.join(' '); + }, + }; + self._getLoggerInstance = () => _logger; + self._hasOutput = () => hasOutput; + self._setHasOutput = () => { + hasOutput = true; + }; + let recommendCommands; + self.recommendCommands = function (recommend = true) { + argsert('[boolean]', [recommend], arguments.length); + recommendCommands = recommend; + return self; + }; + self.getUsageInstance = () => usage; + self.getValidationInstance = () => validation; + self.getCommandInstance = () => command; + self.terminalWidth = () => { + argsert([], 0); + return shim.process.stdColumns; + }; + Object.defineProperty(self, 'argv', { + get: () => self._parseArgs(processArgs), + enumerable: true, + }); + self._parseArgs = function parseArgs(args, shortCircuit, _calledFromCommand, commandIndex) { + let skipValidation = !!_calledFromCommand; + args = args || processArgs; + options.__ = y18n.__; + options.configuration = self.getParserConfiguration(); + const populateDoubleDash = !!options.configuration['populate--']; + const config = Object.assign({}, options.configuration, { + 'populate--': true, + }); + const parsed = shim.Parser.detailed(args, Object.assign({}, options, { + configuration: Object.assign({ 'parse-positional-numbers': false }, config), + })); + let argv = parsed.argv; + if (parseContext) + argv = Object.assign({}, argv, parseContext); + const aliases = parsed.aliases; + argv.$0 = self.$0; + self.parsed = parsed; + try { + guessLocale(); + if (shortCircuit) { + return self._postProcess(argv, populateDoubleDash, _calledFromCommand); + } + if (helpOpt) { + const helpCmds = [helpOpt] + .concat(aliases[helpOpt] || []) + .filter(k => k.length > 1); + if (~helpCmds.indexOf('' + argv._[argv._.length - 1])) { + argv._.pop(); + argv[helpOpt] = true; + } + } + const handlerKeys = command.getCommands(); + const requestCompletions = completion.completionKey in argv; + const skipRecommendation = argv[helpOpt] || requestCompletions; + const skipDefaultCommand = skipRecommendation && + (handlerKeys.length > 1 || handlerKeys[0] !== '$0'); + if (argv._.length) { + if (handlerKeys.length) { + let firstUnknownCommand; + for (let i = commandIndex || 0, cmd; argv._[i] !== undefined; i++) { + cmd = String(argv._[i]); + if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) { + const innerArgv = command.runCommand(cmd, self, parsed, i + 1); + return self._postProcess(innerArgv, populateDoubleDash); + } + else if (!firstUnknownCommand && cmd !== completionCommand) { + firstUnknownCommand = cmd; + break; + } + } + if (command.hasDefaultCommand() && !skipDefaultCommand) { + const innerArgv = command.runCommand(null, self, parsed); + return self._postProcess(innerArgv, populateDoubleDash); + } + if (recommendCommands && firstUnknownCommand && !skipRecommendation) { + validation.recommendCommands(firstUnknownCommand, handlerKeys); + } + } + if (completionCommand && + ~argv._.indexOf(completionCommand) && + !requestCompletions) { + if (exitProcess) + setBlocking(true); + self.showCompletionScript(); + self.exit(0); + } + } + else if (command.hasDefaultCommand() && !skipDefaultCommand) { + const innerArgv = command.runCommand(null, self, parsed); + return self._postProcess(innerArgv, populateDoubleDash); + } + if (requestCompletions) { + if (exitProcess) + setBlocking(true); + args = [].concat(args); + const completionArgs = args.slice(args.indexOf(`--${completion.completionKey}`) + 1); + completion.getCompletion(completionArgs, completions => { + (completions || []).forEach(completion => { + _logger.log(completion); + }); + self.exit(0); + }); + return self._postProcess(argv, !populateDoubleDash, _calledFromCommand); + } + if (!hasOutput) { + Object.keys(argv).forEach(key => { + if (key === helpOpt && argv[key]) { + if (exitProcess) + setBlocking(true); + skipValidation = true; + self.showHelp('log'); + self.exit(0); + } + else if (key === versionOpt && argv[key]) { + if (exitProcess) + setBlocking(true); + skipValidation = true; + usage.showVersion(); + self.exit(0); + } + }); + } + if (!skipValidation && options.skipValidation.length > 0) { + skipValidation = Object.keys(argv).some(key => options.skipValidation.indexOf(key) >= 0 && argv[key] === true); + } + if (!skipValidation) { + if (parsed.error) + throw new YError(parsed.error.message); + if (!requestCompletions) { + self._runValidation(argv, aliases, {}, parsed.error); + } + } + } + catch (err) { + if (err instanceof YError) + usage.fail(err.message, err); + else + throw err; + } + return self._postProcess(argv, populateDoubleDash, _calledFromCommand); + }; + self._postProcess = function (argv, populateDoubleDash, calledFromCommand = false) { + if (isPromise(argv)) + return argv; + if (calledFromCommand) + return argv; + if (!populateDoubleDash) { + argv = self._copyDoubleDash(argv); + } + const parsePositionalNumbers = self.getParserConfiguration()['parse-positional-numbers'] || + self.getParserConfiguration()['parse-positional-numbers'] === undefined; + if (parsePositionalNumbers) { + argv = self._parsePositionalNumbers(argv); + } + return argv; + }; + self._copyDoubleDash = function (argv) { + if (!argv._ || !argv['--']) + return argv; + argv._.push.apply(argv._, argv['--']); + try { + delete argv['--']; + } + catch (_err) { } + return argv; + }; + self._parsePositionalNumbers = function (argv) { + const args = argv['--'] ? argv['--'] : argv._; + for (let i = 0, arg; (arg = args[i]) !== undefined; i++) { + if (shim.Parser.looksLikeNumber(arg) && + Number.isSafeInteger(Math.floor(parseFloat(`${arg}`)))) { + args[i] = Number(arg); + } + } + return argv; + }; + self._runValidation = function runValidation(argv, aliases, positionalMap, parseErrors, isDefaultCommand = false) { + if (parseErrors) + throw new YError(parseErrors.message); + validation.nonOptionCount(argv); + validation.requiredArguments(argv); + let failedStrictCommands = false; + if (strictCommands) { + failedStrictCommands = validation.unknownCommands(argv); + } + if (strict && !failedStrictCommands) { + validation.unknownArguments(argv, aliases, positionalMap, isDefaultCommand); + } + else if (strictOptions) { + validation.unknownArguments(argv, aliases, {}, false, false); + } + validation.customChecks(argv, aliases); + validation.limitedChoices(argv); + validation.implications(argv); + validation.conflicting(argv); + }; + function guessLocale() { + if (!detectLocale) + return; + const locale = shim.getEnv('LC_ALL') || + shim.getEnv('LC_MESSAGES') || + shim.getEnv('LANG') || + shim.getEnv('LANGUAGE') || + 'en_US'; + self.locale(locale.replace(/[.:].*/, '')); + } + self.help(); + self.version(); + return self; +} +export const rebase = (base, dir) => shim.path.relative(base, dir); +export function isYargsInstance(y) { + return !!y && typeof y._parseArgs === 'function'; +} diff --git a/build/node_modules/yargs/build/lib/yerror.js b/build/node_modules/yargs/build/lib/yerror.js new file mode 100644 index 00000000..4cfef75e --- /dev/null +++ b/build/node_modules/yargs/build/lib/yerror.js @@ -0,0 +1,7 @@ +export class YError extends Error { + constructor(msg) { + super(msg || 'yargs error'); + this.name = 'YError'; + Error.captureStackTrace(this, YError); + } +} diff --git a/build/node_modules/yargs/helpers/helpers.mjs b/build/node_modules/yargs/helpers/helpers.mjs new file mode 100644 index 00000000..3f96b3db --- /dev/null +++ b/build/node_modules/yargs/helpers/helpers.mjs @@ -0,0 +1,10 @@ +import {applyExtends as _applyExtends} from '../build/lib/utils/apply-extends.js'; +import {hideBin} from '../build/lib/utils/process-argv.js'; +import Parser from 'yargs-parser'; +import shim from '../lib/platform-shims/esm.mjs'; + +const applyExtends = (config, cwd, mergeExtends) => { + return _applyExtends(config, cwd, mergeExtends, shim); +}; + +export {applyExtends, hideBin, Parser}; diff --git a/build/node_modules/yargs/helpers/index.js b/build/node_modules/yargs/helpers/index.js new file mode 100644 index 00000000..8ab79a33 --- /dev/null +++ b/build/node_modules/yargs/helpers/index.js @@ -0,0 +1,14 @@ +const { + applyExtends, + cjsPlatformShim, + Parser, + processArgv, +} = require('../build/index.cjs'); + +module.exports = { + applyExtends: (config, cwd, mergeExtends) => { + return applyExtends(config, cwd, mergeExtends, cjsPlatformShim); + }, + hideBin: processArgv.hideBin, + Parser, +}; diff --git a/build/node_modules/yargs/helpers/package.json b/build/node_modules/yargs/helpers/package.json new file mode 100644 index 00000000..5bbefffb --- /dev/null +++ b/build/node_modules/yargs/helpers/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/build/node_modules/yargs/index.cjs b/build/node_modules/yargs/index.cjs new file mode 100644 index 00000000..7ac4d358 --- /dev/null +++ b/build/node_modules/yargs/index.cjs @@ -0,0 +1,39 @@ +'use strict'; +// classic singleton yargs API, to use yargs +// without running as a singleton do: +// require('yargs/yargs')(process.argv.slice(2)) +const {Yargs, processArgv} = require('./build/index.cjs'); + +Argv(processArgv.hideBin(process.argv)); + +module.exports = Argv; + +function Argv(processArgs, cwd) { + const argv = Yargs(processArgs, cwd, require); + singletonify(argv); + return argv; +} + +/* Hack an instance of Argv with process.argv into Argv + so people can do + require('yargs')(['--beeble=1','-z','zizzle']).argv + to parse a list of args and + require('yargs').argv + to get a parsed version of process.argv. +*/ +function singletonify(inst) { + Object.keys(inst).forEach(key => { + if (key === 'argv') { + Argv.__defineGetter__(key, inst.__lookupGetter__(key)); + } else if (typeof inst[key] === 'function') { + Argv[key] = inst[key].bind(inst); + } else { + Argv.__defineGetter__('$0', () => { + return inst.$0; + }); + Argv.__defineGetter__('parsed', () => { + return inst.parsed; + }); + } + }); +} diff --git a/build/node_modules/yargs/index.mjs b/build/node_modules/yargs/index.mjs new file mode 100644 index 00000000..23d90801 --- /dev/null +++ b/build/node_modules/yargs/index.mjs @@ -0,0 +1,8 @@ +'use strict'; + +// Bootstraps yargs for ESM: +import esmPlatformShim from './lib/platform-shims/esm.mjs'; +import {YargsWithShim} from './build/lib/yargs-factory.js'; + +const Yargs = YargsWithShim(esmPlatformShim); +export default Yargs; diff --git a/build/node_modules/yargs/lib/platform-shims/browser.mjs b/build/node_modules/yargs/lib/platform-shims/browser.mjs new file mode 100644 index 00000000..5740a0fe --- /dev/null +++ b/build/node_modules/yargs/lib/platform-shims/browser.mjs @@ -0,0 +1,92 @@ +'use strict'; + +import cliui from 'https://unpkg.com/cliui@7.0.1/index.mjs'; // eslint-disable-line +import Parser from 'https://unpkg.com/yargs-parser@19.0.0/browser.js'; // eslint-disable-line +import {getProcessArgvBin} from '../../build/lib/utils/process-argv.js'; +import {YError} from '../../build/lib/yerror.js'; + +const REQUIRE_ERROR = 'require is not supported in browser'; +const REQUIRE_DIRECTORY_ERROR = + 'loading a directory of commands is not supported in browser'; + +export default { + assert: { + notStrictEqual: (a, b) => { + // noop. + }, + strictEqual: (a, b) => { + // noop. + }, + }, + cliui, + findUp: () => undefined, + getEnv: key => { + // There is no environment in browser: + return undefined; + }, + inspect: console.log, + getCallerFile: () => { + throw new YError(REQUIRE_DIRECTORY_ERROR); + }, + getProcessArgvBin, + mainFilename: 'yargs', + Parser, + path: { + basename: str => str, + dirname: str => str, + extname: str => str, + relative: str => str, + }, + process: { + argv: () => [], + cwd: () => '', + execPath: () => '', + // exit is noop browser: + exit: () => {}, + nextTick: cb => { + window.setTimeout(cb, 1); + }, + stdColumns: 80, + }, + readFileSync: () => { + return ''; + }, + require: () => { + throw new YError(REQUIRE_ERROR); + }, + requireDirectory: () => { + throw new YError(REQUIRE_DIRECTORY_ERROR); + }, + stringWidth: str => { + return [...str].length; + }, + // TODO: replace this with y18n once it's ported to ESM: + y18n: { + __: (...str) => { + if (str.length === 0) return ''; + const args = str.slice(1); + return sprintf(str[0], ...args); + }, + __n: (str1, str2, count, ...args) => { + if (count === 1) { + return sprintf(str1, ...args); + } else { + return sprintf(str2, ...args); + } + }, + getLocale: () => { + return 'en_US'; + }, + setLocale: () => {}, + updateLocale: () => {}, + }, +}; + +function sprintf(_str, ...args) { + let str = ''; + const split = _str.split('%s'); + split.forEach((token, i) => { + str += `${token}${split[i + 1] !== undefined && args[i] ? args[i] : ''}`; + }); + return str; +} diff --git a/build/node_modules/yargs/lib/platform-shims/esm.mjs b/build/node_modules/yargs/lib/platform-shims/esm.mjs new file mode 100644 index 00000000..bc047916 --- /dev/null +++ b/build/node_modules/yargs/lib/platform-shims/esm.mjs @@ -0,0 +1,67 @@ +'use strict' + +import { notStrictEqual, strictEqual } from 'assert' +import cliui from 'cliui' +import escalade from 'escalade/sync' +import { format, inspect } from 'util' +import { readFileSync } from 'fs' +import { fileURLToPath } from 'url'; +import Parser from 'yargs-parser' +import { basename, dirname, extname, relative, resolve } from 'path' +import { getProcessArgvBin } from '../../build/lib/utils/process-argv.js' +import { YError } from '../../build/lib/yerror.js' +import y18n from 'y18n' + +const REQUIRE_ERROR = 'require is not supported by ESM' +const REQUIRE_DIRECTORY_ERROR = 'loading a directory of commands is not supported yet for ESM' + +const mainFilename = fileURLToPath(import.meta.url).split('node_modules')[0] +const __dirname = fileURLToPath(import.meta.url) + +export default { + assert: { + notStrictEqual, + strictEqual + }, + cliui, + findUp: escalade, + getEnv: (key) => { + return process.env[key] + }, + inspect, + getCallerFile: () => { + throw new YError(REQUIRE_DIRECTORY_ERROR) + }, + getProcessArgvBin, + mainFilename: mainFilename || process.cwd(), + Parser, + path: { + basename, + dirname, + extname, + relative, + resolve + }, + process: { + argv: () => process.argv, + cwd: process.cwd, + execPath: () => process.execPath, + exit: process.exit, + nextTick: process.nextTick, + stdColumns: typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null + }, + readFileSync, + require: () => { + throw new YError(REQUIRE_ERROR) + }, + requireDirectory: () => { + throw new YError(REQUIRE_DIRECTORY_ERROR) + }, + stringWidth: (str) => { + return [...str].length + }, + y18n: y18n({ + directory: resolve(__dirname, '../../../locales'), + updateFiles: false + }) +} diff --git a/build/node_modules/yargs/locales/be.json b/build/node_modules/yargs/locales/be.json new file mode 100644 index 00000000..e28fa301 --- /dev/null +++ b/build/node_modules/yargs/locales/be.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Каманды:", + "Options:": "Опцыі:", + "Examples:": "Прыклады:", + "boolean": "булевы тып", + "count": "падлік", + "string": "радковы тып", + "number": "лік", + "array": "масіў", + "required": "неабходна", + "default": "па змаўчанні", + "default:": "па змаўчанні:", + "choices:": "магчымасці:", + "aliases:": "аліасы:", + "generated-value": "згенераванае значэнне", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Недастаткова неапцыйных аргументаў: ёсць %s, трэба як мінімум %s", + "other": "Недастаткова неапцыйных аргументаў: ёсць %s, трэба як мінімум %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Занадта шмат неапцыйных аргументаў: ёсць %s, максімум дапушчальна %s", + "other": "Занадта шмат неапцыйных аргументаў: ёсць %s, максімум дапушчальна %s" + }, + "Missing argument value: %s": { + "one": "Не хапае значэння аргументу: %s", + "other": "Не хапае значэнняў аргументаў: %s" + }, + "Missing required argument: %s": { + "one": "Не хапае неабходнага аргументу: %s", + "other": "Не хапае неабходных аргументаў: %s" + }, + "Unknown argument: %s": { + "one": "Невядомы аргумент: %s", + "other": "Невядомыя аргументы: %s" + }, + "Invalid values:": "Несапраўдныя значэння:", + "Argument: %s, Given: %s, Choices: %s": "Аргумент: %s, Дадзенае значэнне: %s, Магчымасці: %s", + "Argument check failed: %s": "Праверка аргументаў не ўдалася: %s", + "Implications failed:": "Дадзены аргумент патрабуе наступны дадатковы аргумент:", + "Not enough arguments following: %s": "Недастаткова наступных аргументаў: %s", + "Invalid JSON config file: %s": "Несапраўдны файл канфігурацыі JSON: %s", + "Path to JSON config file": "Шлях да файла канфігурацыі JSON", + "Show help": "Паказаць дапамогу", + "Show version number": "Паказаць нумар версіі", + "Did you mean %s?": "Вы мелі на ўвазе %s?" +} diff --git a/build/node_modules/yargs/locales/de.json b/build/node_modules/yargs/locales/de.json new file mode 100644 index 00000000..dc73ec3f --- /dev/null +++ b/build/node_modules/yargs/locales/de.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Kommandos:", + "Options:": "Optionen:", + "Examples:": "Beispiele:", + "boolean": "boolean", + "count": "Zähler", + "string": "string", + "number": "Zahl", + "array": "array", + "required": "erforderlich", + "default": "Standard", + "default:": "Standard:", + "choices:": "Möglichkeiten:", + "aliases:": "Aliase:", + "generated-value": "Generierter-Wert", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt", + "other": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt", + "other": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt" + }, + "Missing argument value: %s": { + "one": "Fehlender Argumentwert: %s", + "other": "Fehlende Argumentwerte: %s" + }, + "Missing required argument: %s": { + "one": "Fehlendes Argument: %s", + "other": "Fehlende Argumente: %s" + }, + "Unknown argument: %s": { + "one": "Unbekanntes Argument: %s", + "other": "Unbekannte Argumente: %s" + }, + "Invalid values:": "Unzulässige Werte:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s", + "Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s", + "Implications failed:": "Fehlende abhängige Argumente:", + "Not enough arguments following: %s": "Nicht genügend Argumente nach: %s", + "Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s", + "Path to JSON config file": "Pfad zur JSON-Config Datei", + "Show help": "Hilfe anzeigen", + "Show version number": "Version anzeigen", + "Did you mean %s?": "Meintest du %s?" +} diff --git a/build/node_modules/yargs/locales/en.json b/build/node_modules/yargs/locales/en.json new file mode 100644 index 00000000..d794947d --- /dev/null +++ b/build/node_modules/yargs/locales/en.json @@ -0,0 +1,51 @@ +{ + "Commands:": "Commands:", + "Options:": "Options:", + "Examples:": "Examples:", + "boolean": "boolean", + "count": "count", + "string": "string", + "number": "number", + "array": "array", + "required": "required", + "default": "default", + "default:": "default:", + "choices:": "choices:", + "aliases:": "aliases:", + "generated-value": "generated-value", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Not enough non-option arguments: got %s, need at least %s", + "other": "Not enough non-option arguments: got %s, need at least %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Too many non-option arguments: got %s, maximum of %s", + "other": "Too many non-option arguments: got %s, maximum of %s" + }, + "Missing argument value: %s": { + "one": "Missing argument value: %s", + "other": "Missing argument values: %s" + }, + "Missing required argument: %s": { + "one": "Missing required argument: %s", + "other": "Missing required arguments: %s" + }, + "Unknown argument: %s": { + "one": "Unknown argument: %s", + "other": "Unknown arguments: %s" + }, + "Invalid values:": "Invalid values:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s", + "Argument check failed: %s": "Argument check failed: %s", + "Implications failed:": "Missing dependent arguments:", + "Not enough arguments following: %s": "Not enough arguments following: %s", + "Invalid JSON config file: %s": "Invalid JSON config file: %s", + "Path to JSON config file": "Path to JSON config file", + "Show help": "Show help", + "Show version number": "Show version number", + "Did you mean %s?": "Did you mean %s?", + "Arguments %s and %s are mutually exclusive" : "Arguments %s and %s are mutually exclusive", + "Positionals:": "Positionals:", + "command": "command", + "deprecated": "deprecated", + "deprecated: %s": "deprecated: %s" +} diff --git a/build/node_modules/yargs/locales/es.json b/build/node_modules/yargs/locales/es.json new file mode 100644 index 00000000..d77b4616 --- /dev/null +++ b/build/node_modules/yargs/locales/es.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Comandos:", + "Options:": "Opciones:", + "Examples:": "Ejemplos:", + "boolean": "booleano", + "count": "cuenta", + "string": "cadena de caracteres", + "number": "número", + "array": "tabla", + "required": "requerido", + "default": "defecto", + "default:": "defecto:", + "choices:": "selección:", + "aliases:": "alias:", + "generated-value": "valor-generado", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s", + "other": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s", + "other": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s" + }, + "Missing argument value: %s": { + "one": "Falta argumento: %s", + "other": "Faltan argumentos: %s" + }, + "Missing required argument: %s": { + "one": "Falta argumento requerido: %s", + "other": "Faltan argumentos requeridos: %s" + }, + "Unknown argument: %s": { + "one": "Argumento desconocido: %s", + "other": "Argumentos desconocidos: %s" + }, + "Invalid values:": "Valores inválidos:", + "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Seleccionados: %s", + "Argument check failed: %s": "Verificación de argumento ha fallado: %s", + "Implications failed:": "Implicaciones fallidas:", + "Not enough arguments following: %s": "No hay suficientes argumentos después de: %s", + "Invalid JSON config file: %s": "Archivo de configuración JSON inválido: %s", + "Path to JSON config file": "Ruta al archivo de configuración JSON", + "Show help": "Muestra ayuda", + "Show version number": "Muestra número de versión", + "Did you mean %s?": "Quisiste decir %s?" +} diff --git a/build/node_modules/yargs/locales/fi.json b/build/node_modules/yargs/locales/fi.json new file mode 100644 index 00000000..0728c578 --- /dev/null +++ b/build/node_modules/yargs/locales/fi.json @@ -0,0 +1,49 @@ +{ + "Commands:": "Komennot:", + "Options:": "Valinnat:", + "Examples:": "Esimerkkejä:", + "boolean": "totuusarvo", + "count": "lukumäärä", + "string": "merkkijono", + "number": "numero", + "array": "taulukko", + "required": "pakollinen", + "default": "oletusarvo", + "default:": "oletusarvo:", + "choices:": "vaihtoehdot:", + "aliases:": "aliakset:", + "generated-value": "generoitu-arvo", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Liian vähän argumentteja, jotka eivät ole valintoja: annettu %s, vaaditaan vähintään %s", + "other": "Liian vähän argumentteja, jotka eivät ole valintoja: annettu %s, vaaditaan vähintään %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Liikaa argumentteja, jotka eivät ole valintoja: annettu %s, sallitaan enintään %s", + "other": "Liikaa argumentteja, jotka eivät ole valintoja: annettu %s, sallitaan enintään %s" + }, + "Missing argument value: %s": { + "one": "Argumentin arvo puuttuu: %s", + "other": "Argumentin arvot puuttuvat: %s" + }, + "Missing required argument: %s": { + "one": "Pakollinen argumentti puuttuu: %s", + "other": "Pakollisia argumentteja puuttuu: %s" + }, + "Unknown argument: %s": { + "one": "Tuntematon argumenttn: %s", + "other": "Tuntemattomia argumentteja: %s" + }, + "Invalid values:": "Virheelliset arvot:", + "Argument: %s, Given: %s, Choices: %s": "Argumentti: %s, Annettu: %s, Vaihtoehdot: %s", + "Argument check failed: %s": "Argumentin tarkistus epäonnistui: %s", + "Implications failed:": "Riippuvia argumentteja puuttuu:", + "Not enough arguments following: %s": "Argumentin perässä ei ole tarpeeksi argumentteja: %s", + "Invalid JSON config file: %s": "Epävalidi JSON-asetustiedosto: %s", + "Path to JSON config file": "JSON-asetustiedoston polku", + "Show help": "Näytä ohje", + "Show version number": "Näytä versionumero", + "Did you mean %s?": "Tarkoititko %s?", + "Arguments %s and %s are mutually exclusive" : "Argumentit %s ja %s eivät ole yhteensopivat", + "Positionals:": "Sijaintiparametrit:", + "command": "komento" +} diff --git a/build/node_modules/yargs/locales/fr.json b/build/node_modules/yargs/locales/fr.json new file mode 100644 index 00000000..edd743f0 --- /dev/null +++ b/build/node_modules/yargs/locales/fr.json @@ -0,0 +1,53 @@ +{ + "Commands:": "Commandes :", + "Options:": "Options :", + "Examples:": "Exemples :", + "boolean": "booléen", + "count": "compteur", + "string": "chaîne de caractères", + "number": "nombre", + "array": "tableau", + "required": "requis", + "default": "défaut", + "default:": "défaut :", + "choices:": "choix :", + "aliases:": "alias :", + "generated-value": "valeur générée", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Pas assez d'arguments (hors options) : reçu %s, besoin d'au moins %s", + "other": "Pas assez d'arguments (hors options) : reçus %s, besoin d'au moins %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Trop d'arguments (hors options) : reçu %s, maximum de %s", + "other": "Trop d'arguments (hors options) : reçus %s, maximum de %s" + }, + "Missing argument value: %s": { + "one": "Argument manquant : %s", + "other": "Arguments manquants : %s" + }, + "Missing required argument: %s": { + "one": "Argument requis manquant : %s", + "other": "Arguments requis manquants : %s" + }, + "Unknown argument: %s": { + "one": "Argument inconnu : %s", + "other": "Arguments inconnus : %s" + }, + "Unknown command: %s": { + "one": "Commande inconnue : %s", + "other": "Commandes inconnues : %s" + }, + "Invalid values:": "Valeurs invalides :", + "Argument: %s, Given: %s, Choices: %s": "Argument : %s, donné : %s, choix : %s", + "Argument check failed: %s": "Echec de la vérification de l'argument : %s", + "Implications failed:": "Arguments dépendants manquants :", + "Not enough arguments following: %s": "Pas assez d'arguments après : %s", + "Invalid JSON config file: %s": "Fichier de configuration JSON invalide : %s", + "Path to JSON config file": "Chemin du fichier de configuration JSON", + "Show help": "Affiche l'aide", + "Show version number": "Affiche le numéro de version", + "Did you mean %s?": "Vouliez-vous dire %s ?", + "Arguments %s and %s are mutually exclusive" : "Les arguments %s et %s sont mutuellement exclusifs", + "Positionals:": "Arguments positionnels :", + "command": "commande" +} diff --git a/build/node_modules/yargs/locales/hi.json b/build/node_modules/yargs/locales/hi.json new file mode 100644 index 00000000..a9de77cc --- /dev/null +++ b/build/node_modules/yargs/locales/hi.json @@ -0,0 +1,49 @@ +{ + "Commands:": "आदेश:", + "Options:": "विकल्प:", + "Examples:": "उदाहरण:", + "boolean": "सत्यता", + "count": "संख्या", + "string": "वर्णों का तार ", + "number": "अंक", + "array": "सरणी", + "required": "आवश्यक", + "default": "डिफॉल्ट", + "default:": "डिफॉल्ट:", + "choices:": "विकल्प:", + "aliases:": "उपनाम:", + "generated-value": "उत्पन्न-मूल्य", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "पर्याप्त गैर-विकल्प तर्क प्राप्त नहीं: %s प्राप्त, कम से कम %s की आवश्यकता है", + "other": "पर्याप्त गैर-विकल्प तर्क प्राप्त नहीं: %s प्राप्त, कम से कम %s की आवश्यकता है" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "बहुत सारे गैर-विकल्प तर्क: %s प्राप्त, अधिकतम %s मान्य", + "other": "बहुत सारे गैर-विकल्प तर्क: %s प्राप्त, अधिकतम %s मान्य" + }, + "Missing argument value: %s": { + "one": "कुछ तर्को के मूल्य गुम हैं: %s", + "other": "कुछ तर्को के मूल्य गुम हैं: %s" + }, + "Missing required argument: %s": { + "one": "आवश्यक तर्क गुम हैं: %s", + "other": "आवश्यक तर्क गुम हैं: %s" + }, + "Unknown argument: %s": { + "one": "अज्ञात तर्क प्राप्त: %s", + "other": "अज्ञात तर्क प्राप्त: %s" + }, + "Invalid values:": "अमान्य मूल्य:", + "Argument: %s, Given: %s, Choices: %s": "तर्क: %s, प्राप्त: %s, विकल्प: %s", + "Argument check failed: %s": "तर्क जांच विफल: %s", + "Implications failed:": "दिए गए तर्क के लिए अतिरिक्त तर्क की अपेक्षा है:", + "Not enough arguments following: %s": "निम्नलिखित के बाद पर्याप्त तर्क नहीं प्राप्त: %s", + "Invalid JSON config file: %s": "अमान्य JSON config फाइल: %s", + "Path to JSON config file": "JSON config फाइल का पथ", + "Show help": "सहायता दिखाएँ", + "Show version number": "Version संख्या दिखाएँ", + "Did you mean %s?": "क्या आपका मतलब है %s?", + "Arguments %s and %s are mutually exclusive" : "तर्क %s और %s परस्पर अनन्य हैं", + "Positionals:": "स्थानीय:", + "command": "आदेश" +} diff --git a/build/node_modules/yargs/locales/hu.json b/build/node_modules/yargs/locales/hu.json new file mode 100644 index 00000000..21492d05 --- /dev/null +++ b/build/node_modules/yargs/locales/hu.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Parancsok:", + "Options:": "Opciók:", + "Examples:": "Példák:", + "boolean": "boolean", + "count": "számláló", + "string": "szöveg", + "number": "szám", + "array": "tömb", + "required": "kötelező", + "default": "alapértelmezett", + "default:": "alapértelmezett:", + "choices:": "lehetőségek:", + "aliases:": "aliaszok:", + "generated-value": "generált-érték", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Nincs elég nem opcionális argumentum: %s van, legalább %s kell", + "other": "Nincs elég nem opcionális argumentum: %s van, legalább %s kell" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Túl sok nem opciánlis argumentum van: %s van, maximum %s lehet", + "other": "Túl sok nem opciánlis argumentum van: %s van, maximum %s lehet" + }, + "Missing argument value: %s": { + "one": "Hiányzó argumentum érték: %s", + "other": "Hiányzó argumentum értékek: %s" + }, + "Missing required argument: %s": { + "one": "Hiányzó kötelező argumentum: %s", + "other": "Hiányzó kötelező argumentumok: %s" + }, + "Unknown argument: %s": { + "one": "Ismeretlen argumentum: %s", + "other": "Ismeretlen argumentumok: %s" + }, + "Invalid values:": "Érvénytelen érték:", + "Argument: %s, Given: %s, Choices: %s": "Argumentum: %s, Megadott: %s, Lehetőségek: %s", + "Argument check failed: %s": "Argumentum ellenőrzés sikertelen: %s", + "Implications failed:": "Implikációk sikertelenek:", + "Not enough arguments following: %s": "Nem elég argumentum követi: %s", + "Invalid JSON config file: %s": "Érvénytelen JSON konfigurációs file: %s", + "Path to JSON config file": "JSON konfigurációs file helye", + "Show help": "Súgo megjelenítése", + "Show version number": "Verziószám megjelenítése", + "Did you mean %s?": "Erre gondoltál %s?" +} diff --git a/build/node_modules/yargs/locales/id.json b/build/node_modules/yargs/locales/id.json new file mode 100644 index 00000000..125867cb --- /dev/null +++ b/build/node_modules/yargs/locales/id.json @@ -0,0 +1,50 @@ + +{ + "Commands:": "Perintah:", + "Options:": "Pilihan:", + "Examples:": "Contoh:", + "boolean": "boolean", + "count": "jumlah", + "number": "nomor", + "string": "string", + "array": "larik", + "required": "diperlukan", + "default": "bawaan", + "default:": "bawaan:", + "aliases:": "istilah lain:", + "choices:": "pilihan:", + "generated-value": "nilai-yang-dihasilkan", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Argumen wajib kurang: hanya %s, minimal %s", + "other": "Argumen wajib kurang: hanya %s, minimal %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Terlalu banyak argumen wajib: ada %s, maksimal %s", + "other": "Terlalu banyak argumen wajib: ada %s, maksimal %s" + }, + "Missing argument value: %s": { + "one": "Kurang argumen: %s", + "other": "Kurang argumen: %s" + }, + "Missing required argument: %s": { + "one": "Kurang argumen wajib: %s", + "other": "Kurang argumen wajib: %s" + }, + "Unknown argument: %s": { + "one": "Argumen tak diketahui: %s", + "other": "Argumen tak diketahui: %s" + }, + "Invalid values:": "Nilai-nilai tidak valid:", + "Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s", + "Argument check failed: %s": "Pemeriksaan argument gagal: %s", + "Implications failed:": "Implikasi gagal:", + "Not enough arguments following: %s": "Kurang argumen untuk: %s", + "Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s", + "Path to JSON config file": "Alamat berkas konfigurasi JSON", + "Show help": "Lihat bantuan", + "Show version number": "Lihat nomor versi", + "Did you mean %s?": "Maksud Anda: %s?", + "Arguments %s and %s are mutually exclusive" : "Argumen %s dan %s saling eksklusif", + "Positionals:": "Posisional-posisional:", + "command": "perintah" +} diff --git a/build/node_modules/yargs/locales/it.json b/build/node_modules/yargs/locales/it.json new file mode 100644 index 00000000..fde57561 --- /dev/null +++ b/build/node_modules/yargs/locales/it.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Comandi:", + "Options:": "Opzioni:", + "Examples:": "Esempi:", + "boolean": "booleano", + "count": "contatore", + "string": "stringa", + "number": "numero", + "array": "vettore", + "required": "richiesto", + "default": "predefinito", + "default:": "predefinito:", + "choices:": "scelte:", + "aliases:": "alias:", + "generated-value": "valore generato", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s", + "other": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s", + "other": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s" + }, + "Missing argument value: %s": { + "one": "Argomento mancante: %s", + "other": "Argomenti mancanti: %s" + }, + "Missing required argument: %s": { + "one": "Argomento richiesto mancante: %s", + "other": "Argomenti richiesti mancanti: %s" + }, + "Unknown argument: %s": { + "one": "Argomento sconosciuto: %s", + "other": "Argomenti sconosciuti: %s" + }, + "Invalid values:": "Valori non validi:", + "Argument: %s, Given: %s, Choices: %s": "Argomento: %s, Richiesto: %s, Scelte: %s", + "Argument check failed: %s": "Controllo dell'argomento fallito: %s", + "Implications failed:": "Argomenti dipendenti mancanti:", + "Not enough arguments following: %s": "Argomenti insufficienti dopo: %s", + "Invalid JSON config file: %s": "File di configurazione JSON non valido: %s", + "Path to JSON config file": "Percorso del file di configurazione JSON", + "Show help": "Mostra la schermata di aiuto", + "Show version number": "Mostra il numero di versione", + "Did you mean %s?": "Intendi forse %s?" +} diff --git a/build/node_modules/yargs/locales/ja.json b/build/node_modules/yargs/locales/ja.json new file mode 100644 index 00000000..3954ae68 --- /dev/null +++ b/build/node_modules/yargs/locales/ja.json @@ -0,0 +1,51 @@ +{ + "Commands:": "コマンド:", + "Options:": "オプション:", + "Examples:": "例:", + "boolean": "真偽", + "count": "カウント", + "string": "文字列", + "number": "数値", + "array": "配列", + "required": "必須", + "default": "デフォルト", + "default:": "デフォルト:", + "choices:": "選択してください:", + "aliases:": "エイリアス:", + "generated-value": "生成された値", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:", + "other": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:", + "other": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:" + }, + "Missing argument value: %s": { + "one": "引数の値が見つかりません: %s", + "other": "引数の値が見つかりません: %s" + }, + "Missing required argument: %s": { + "one": "必須の引数が見つかりません: %s", + "other": "必須の引数が見つかりません: %s" + }, + "Unknown argument: %s": { + "one": "未知の引数です: %s", + "other": "未知の引数です: %s" + }, + "Invalid values:": "不正な値です:", + "Argument: %s, Given: %s, Choices: %s": "引数は %s です。与えられた値: %s, 選択してください: %s", + "Argument check failed: %s": "引数のチェックに失敗しました: %s", + "Implications failed:": "オプションの組み合わせで不正が生じました:", + "Not enough arguments following: %s": "次の引数が不足しています。: %s", + "Invalid JSON config file: %s": "JSONの設定ファイルが不正です: %s", + "Path to JSON config file": "JSONの設定ファイルまでのpath", + "Show help": "ヘルプを表示", + "Show version number": "バージョンを表示", + "Did you mean %s?": "もしかして %s?", + "Arguments %s and %s are mutually exclusive" : "引数 %s と %s は同時に指定できません", + "Positionals:": "位置:", + "command": "コマンド", + "deprecated": "非推奨", + "deprecated: %s": "非推奨: %s" +} diff --git a/build/node_modules/yargs/locales/ko.json b/build/node_modules/yargs/locales/ko.json new file mode 100644 index 00000000..e3187eaf --- /dev/null +++ b/build/node_modules/yargs/locales/ko.json @@ -0,0 +1,49 @@ +{ + "Commands:": "명령:", + "Options:": "옵션:", + "Examples:": "예시:", + "boolean": "여부", + "count": "개수", + "string": "문자열", + "number": "숫자", + "array": "배열", + "required": "필수", + "default": "기본", + "default:": "기본:", + "choices:": "선택:", + "aliases:": "별칭:", + "generated-value": "생성된 값", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다", + "other": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다", + "other": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다" + }, + "Missing argument value: %s": { + "one": "인자값을 받지 못했습니다: %s", + "other": "인자값들을 받지 못했습니다: %s" + }, + "Missing required argument: %s": { + "one": "필수 인자를 받지 못했습니다: %s", + "other": "필수 인자들을 받지 못했습니다: %s" + }, + "Unknown argument: %s": { + "one": "알 수 없는 인자입니다: %s", + "other": "알 수 없는 인자들입니다: %s" + }, + "Invalid values:": "잘못된 값입니다:", + "Argument: %s, Given: %s, Choices: %s": "인자: %s, 입력받은 값: %s, 선택지: %s", + "Argument check failed: %s": "유효하지 않은 인자입니다: %s", + "Implications failed:": "옵션의 조합이 잘못되었습니다:", + "Not enough arguments following: %s": "인자가 충분하게 주어지지 않았습니다: %s", + "Invalid JSON config file: %s": "유효하지 않은 JSON 설정파일입니다: %s", + "Path to JSON config file": "JSON 설정파일 경로", + "Show help": "도움말을 보여줍니다", + "Show version number": "버전 넘버를 보여줍니다", + "Did you mean %s?": "찾고계신게 %s입니까?", + "Arguments %s and %s are mutually exclusive" : "%s와 %s 인자는 같이 사용될 수 없습니다", + "Positionals:": "위치:", + "command": "명령" +} diff --git a/build/node_modules/yargs/locales/nb.json b/build/node_modules/yargs/locales/nb.json new file mode 100644 index 00000000..6f410ed0 --- /dev/null +++ b/build/node_modules/yargs/locales/nb.json @@ -0,0 +1,44 @@ +{ + "Commands:": "Kommandoer:", + "Options:": "Alternativer:", + "Examples:": "Eksempler:", + "boolean": "boolsk", + "count": "antall", + "string": "streng", + "number": "nummer", + "array": "matrise", + "required": "obligatorisk", + "default": "standard", + "default:": "standard:", + "choices:": "valg:", + "generated-value": "generert-verdi", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s", + "other": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s", + "other": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s" + }, + "Missing argument value: %s": { + "one": "Mangler argument verdi: %s", + "other": "Mangler argument verdier: %s" + }, + "Missing required argument: %s": { + "one": "Mangler obligatorisk argument: %s", + "other": "Mangler obligatoriske argumenter: %s" + }, + "Unknown argument: %s": { + "one": "Ukjent argument: %s", + "other": "Ukjente argumenter: %s" + }, + "Invalid values:": "Ugyldige verdier:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s", + "Argument check failed: %s": "Argumentsjekk mislyktes: %s", + "Implications failed:": "Konsekvensene mislyktes:", + "Not enough arguments following: %s": "Ikke nok følgende argumenter: %s", + "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", + "Path to JSON config file": "Bane til JSON konfigurasjonsfil", + "Show help": "Vis hjelp", + "Show version number": "Vis versjonsnummer" +} diff --git a/build/node_modules/yargs/locales/nl.json b/build/node_modules/yargs/locales/nl.json new file mode 100644 index 00000000..9ff95c55 --- /dev/null +++ b/build/node_modules/yargs/locales/nl.json @@ -0,0 +1,49 @@ +{ + "Commands:": "Commando's:", + "Options:": "Opties:", + "Examples:": "Voorbeelden:", + "boolean": "booleaans", + "count": "aantal", + "string": "string", + "number": "getal", + "array": "lijst", + "required": "verplicht", + "default": "standaard", + "default:": "standaard:", + "choices:": "keuzes:", + "aliases:": "aliassen:", + "generated-value": "gegenereerde waarde", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig", + "other": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s", + "other": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s" + }, + "Missing argument value: %s": { + "one": "Missende argumentwaarde: %s", + "other": "Missende argumentwaarden: %s" + }, + "Missing required argument: %s": { + "one": "Missend verplicht argument: %s", + "other": "Missende verplichte argumenten: %s" + }, + "Unknown argument: %s": { + "one": "Onbekend argument: %s", + "other": "Onbekende argumenten: %s" + }, + "Invalid values:": "Ongeldige waarden:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeven: %s, Keuzes: %s", + "Argument check failed: %s": "Argumentcontrole mislukt: %s", + "Implications failed:": "Ontbrekende afhankelijke argumenten:", + "Not enough arguments following: %s": "Niet genoeg argumenten na: %s", + "Invalid JSON config file: %s": "Ongeldig JSON-config-bestand: %s", + "Path to JSON config file": "Pad naar JSON-config-bestand", + "Show help": "Toon help", + "Show version number": "Toon versienummer", + "Did you mean %s?": "Bedoelde u misschien %s?", + "Arguments %s and %s are mutually exclusive": "Argumenten %s en %s kunnen niet tegelijk gebruikt worden", + "Positionals:": "Positie-afhankelijke argumenten", + "command": "commando" +} diff --git a/build/node_modules/yargs/locales/nn.json b/build/node_modules/yargs/locales/nn.json new file mode 100644 index 00000000..24479ac9 --- /dev/null +++ b/build/node_modules/yargs/locales/nn.json @@ -0,0 +1,44 @@ +{ + "Commands:": "Kommandoar:", + "Options:": "Alternativ:", + "Examples:": "Døme:", + "boolean": "boolsk", + "count": "mengd", + "string": "streng", + "number": "nummer", + "array": "matrise", + "required": "obligatorisk", + "default": "standard", + "default:": "standard:", + "choices:": "val:", + "generated-value": "generert-verdi", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s", + "other": "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "For mange ikkje-alternativ argument: fekk %s, maksimum %s", + "other": "For mange ikkje-alternativ argument: fekk %s, maksimum %s" + }, + "Missing argument value: %s": { + "one": "Manglar argumentverdi: %s", + "other": "Manglar argumentverdiar: %s" + }, + "Missing required argument: %s": { + "one": "Manglar obligatorisk argument: %s", + "other": "Manglar obligatoriske argument: %s" + }, + "Unknown argument: %s": { + "one": "Ukjent argument: %s", + "other": "Ukjende argument: %s" + }, + "Invalid values:": "Ugyldige verdiar:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gjeve: %s, Val: %s", + "Argument check failed: %s": "Argumentsjekk mislukkast: %s", + "Implications failed:": "Konsekvensane mislukkast:", + "Not enough arguments following: %s": "Ikkje nok fylgjande argument: %s", + "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", + "Path to JSON config file": "Bane til JSON konfigurasjonsfil", + "Show help": "Vis hjelp", + "Show version number": "Vis versjonsnummer" +} diff --git a/build/node_modules/yargs/locales/pirate.json b/build/node_modules/yargs/locales/pirate.json new file mode 100644 index 00000000..dcb5cb75 --- /dev/null +++ b/build/node_modules/yargs/locales/pirate.json @@ -0,0 +1,13 @@ +{ + "Commands:": "Choose yer command:", + "Options:": "Options for me hearties!", + "Examples:": "Ex. marks the spot:", + "required": "requi-yar-ed", + "Missing required argument: %s": { + "one": "Ye be havin' to set the followin' argument land lubber: %s", + "other": "Ye be havin' to set the followin' arguments land lubber: %s" + }, + "Show help": "Parlay this here code of conduct", + "Show version number": "'Tis the version ye be askin' fer", + "Arguments %s and %s are mutually exclusive" : "Yon scurvy dogs %s and %s be as bad as rum and a prudish wench" +} diff --git a/build/node_modules/yargs/locales/pl.json b/build/node_modules/yargs/locales/pl.json new file mode 100644 index 00000000..a41d4bd5 --- /dev/null +++ b/build/node_modules/yargs/locales/pl.json @@ -0,0 +1,49 @@ +{ + "Commands:": "Polecenia:", + "Options:": "Opcje:", + "Examples:": "Przykłady:", + "boolean": "boolean", + "count": "ilość", + "string": "ciąg znaków", + "number": "liczba", + "array": "tablica", + "required": "wymagany", + "default": "domyślny", + "default:": "domyślny:", + "choices:": "dostępne:", + "aliases:": "aliasy:", + "generated-value": "wygenerowana-wartość", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s", + "other": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s", + "other": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s" + }, + "Missing argument value: %s": { + "one": "Brak wartości dla argumentu: %s", + "other": "Brak wartości dla argumentów: %s" + }, + "Missing required argument: %s": { + "one": "Brak wymaganego argumentu: %s", + "other": "Brak wymaganych argumentów: %s" + }, + "Unknown argument: %s": { + "one": "Nieznany argument: %s", + "other": "Nieznane argumenty: %s" + }, + "Invalid values:": "Nieprawidłowe wartości:", + "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, Dostępne: %s", + "Argument check failed: %s": "Weryfikacja argumentów nie powiodła się: %s", + "Implications failed:": "Założenia nie zostały spełnione:", + "Not enough arguments following: %s": "Niewystarczająca ilość argumentów następujących po: %s", + "Invalid JSON config file: %s": "Nieprawidłowy plik konfiguracyjny JSON: %s", + "Path to JSON config file": "Ścieżka do pliku konfiguracyjnego JSON", + "Show help": "Pokaż pomoc", + "Show version number": "Pokaż numer wersji", + "Did you mean %s?": "Czy chodziło Ci o %s?", + "Arguments %s and %s are mutually exclusive": "Argumenty %s i %s wzajemnie się wykluczają", + "Positionals:": "Pozycyjne:", + "command": "polecenie" +} diff --git a/build/node_modules/yargs/locales/pt.json b/build/node_modules/yargs/locales/pt.json new file mode 100644 index 00000000..0c8ac99c --- /dev/null +++ b/build/node_modules/yargs/locales/pt.json @@ -0,0 +1,45 @@ +{ + "Commands:": "Comandos:", + "Options:": "Opções:", + "Examples:": "Exemplos:", + "boolean": "boolean", + "count": "contagem", + "string": "cadeia de caracteres", + "number": "número", + "array": "arranjo", + "required": "requerido", + "default": "padrão", + "default:": "padrão:", + "choices:": "escolhas:", + "generated-value": "valor-gerado", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s", + "other": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Excesso de argumentos não opcionais: recebido %s, máximo de %s", + "other": "Excesso de argumentos não opcionais: recebido %s, máximo de %s" + }, + "Missing argument value: %s": { + "one": "Falta valor de argumento: %s", + "other": "Falta valores de argumento: %s" + }, + "Missing required argument: %s": { + "one": "Falta argumento obrigatório: %s", + "other": "Faltando argumentos obrigatórios: %s" + }, + "Unknown argument: %s": { + "one": "Argumento desconhecido: %s", + "other": "Argumentos desconhecidos: %s" + }, + "Invalid values:": "Valores inválidos:", + "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s", + "Argument check failed: %s": "Verificação de argumento falhou: %s", + "Implications failed:": "Implicações falharam:", + "Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s", + "Invalid JSON config file: %s": "Arquivo de configuração em JSON esta inválido: %s", + "Path to JSON config file": "Caminho para o arquivo de configuração em JSON", + "Show help": "Mostra ajuda", + "Show version number": "Mostra número de versão", + "Arguments %s and %s are mutually exclusive" : "Argumentos %s e %s são mutualmente exclusivos" +} diff --git a/build/node_modules/yargs/locales/pt_BR.json b/build/node_modules/yargs/locales/pt_BR.json new file mode 100644 index 00000000..eae1ec60 --- /dev/null +++ b/build/node_modules/yargs/locales/pt_BR.json @@ -0,0 +1,48 @@ +{ + "Commands:": "Comandos:", + "Options:": "Opções:", + "Examples:": "Exemplos:", + "boolean": "booleano", + "count": "contagem", + "string": "string", + "number": "número", + "array": "array", + "required": "obrigatório", + "default:": "padrão:", + "choices:": "opções:", + "aliases:": "sinônimos:", + "generated-value": "valor-gerado", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s", + "other": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Excesso de argumentos: recebido %s, máximo de %s", + "other": "Excesso de argumentos: recebido %s, máximo de %s" + }, + "Missing argument value: %s": { + "one": "Falta valor de argumento: %s", + "other": "Falta valores de argumento: %s" + }, + "Missing required argument: %s": { + "one": "Falta argumento obrigatório: %s", + "other": "Faltando argumentos obrigatórios: %s" + }, + "Unknown argument: %s": { + "one": "Argumento desconhecido: %s", + "other": "Argumentos desconhecidos: %s" + }, + "Invalid values:": "Valores inválidos:", + "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Opções: %s", + "Argument check failed: %s": "Verificação de argumento falhou: %s", + "Implications failed:": "Implicações falharam:", + "Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s", + "Invalid JSON config file: %s": "Arquivo JSON de configuração inválido: %s", + "Path to JSON config file": "Caminho para o arquivo JSON de configuração", + "Show help": "Exibe ajuda", + "Show version number": "Exibe a versão", + "Did you mean %s?": "Você quis dizer %s?", + "Arguments %s and %s are mutually exclusive" : "Argumentos %s e %s são mutualmente exclusivos", + "Positionals:": "Posicionais:", + "command": "comando" +} diff --git a/build/node_modules/yargs/locales/ru.json b/build/node_modules/yargs/locales/ru.json new file mode 100644 index 00000000..5f7f7681 --- /dev/null +++ b/build/node_modules/yargs/locales/ru.json @@ -0,0 +1,46 @@ +{ + "Commands:": "Команды:", + "Options:": "Опции:", + "Examples:": "Примеры:", + "boolean": "булевый тип", + "count": "подсчет", + "string": "строковой тип", + "number": "число", + "array": "массив", + "required": "необходимо", + "default": "по умолчанию", + "default:": "по умолчанию:", + "choices:": "возможности:", + "aliases:": "алиасы:", + "generated-value": "генерированное значение", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Недостаточно неопционных аргументов: есть %s, нужно как минимум %s", + "other": "Недостаточно неопционных аргументов: есть %s, нужно как минимум %s" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Слишком много неопционных аргументов: есть %s, максимум допустимо %s", + "other": "Слишком много неопционных аргументов: есть %s, максимум допустимо %s" + }, + "Missing argument value: %s": { + "one": "Не хватает значения аргумента: %s", + "other": "Не хватает значений аргументов: %s" + }, + "Missing required argument: %s": { + "one": "Не хватает необходимого аргумента: %s", + "other": "Не хватает необходимых аргументов: %s" + }, + "Unknown argument: %s": { + "one": "Неизвестный аргумент: %s", + "other": "Неизвестные аргументы: %s" + }, + "Invalid values:": "Недействительные значения:", + "Argument: %s, Given: %s, Choices: %s": "Аргумент: %s, Данное значение: %s, Возможности: %s", + "Argument check failed: %s": "Проверка аргументов не удалась: %s", + "Implications failed:": "Данный аргумент требует следующий дополнительный аргумент:", + "Not enough arguments following: %s": "Недостаточно следующих аргументов: %s", + "Invalid JSON config file: %s": "Недействительный файл конфигурации JSON: %s", + "Path to JSON config file": "Путь к файлу конфигурации JSON", + "Show help": "Показать помощь", + "Show version number": "Показать номер версии", + "Did you mean %s?": "Вы имели в виду %s?" +} diff --git a/build/node_modules/yargs/locales/th.json b/build/node_modules/yargs/locales/th.json new file mode 100644 index 00000000..33b048e2 --- /dev/null +++ b/build/node_modules/yargs/locales/th.json @@ -0,0 +1,46 @@ +{ + "Commands:": "คอมมาน", + "Options:": "ออฟชั่น", + "Examples:": "ตัวอย่าง", + "boolean": "บูลีน", + "count": "นับ", + "string": "สตริง", + "number": "ตัวเลข", + "array": "อาเรย์", + "required": "จำเป็น", + "default": "ค่าเริ่มต้", + "default:": "ค่าเริ่มต้น", + "choices:": "ตัวเลือก", + "aliases:": "เอเลียส", + "generated-value": "ค่าที่ถูกสร้างขึ้น", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "ใส่อาร์กิวเมนต์ไม่ครบตามจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการอย่างน้อย %s ค่า", + "other": "ใส่อาร์กิวเมนต์ไม่ครบตามจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการอย่างน้อย %s ค่า" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "ใส่อาร์กิวเมนต์เกินจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการมากที่สุด %s ค่า", + "other": "ใส่อาร์กิวเมนต์เกินจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการมากที่สุด %s ค่า" + }, + "Missing argument value: %s": { + "one": "ค่าอาร์กิวเมนต์ที่ขาดไป: %s", + "other": "ค่าอาร์กิวเมนต์ที่ขาดไป: %s" + }, + "Missing required argument: %s": { + "one": "อาร์กิวเมนต์จำเป็นที่ขาดไป: %s", + "other": "อาร์กิวเมนต์จำเป็นที่ขาดไป: %s" + }, + "Unknown argument: %s": { + "one": "อาร์กิวเมนต์ที่ไม่รู้จัก: %s", + "other": "อาร์กิวเมนต์ที่ไม่รู้จัก: %s" + }, + "Invalid values:": "ค่าไม่ถูกต้อง:", + "Argument: %s, Given: %s, Choices: %s": "อาร์กิวเมนต์: %s, ได้รับ: %s, ตัวเลือก: %s", + "Argument check failed: %s": "ตรวจสอบพบอาร์กิวเมนต์ที่ไม่ถูกต้อง: %s", + "Implications failed:": "Implications ไม่สำเร็จ:", + "Not enough arguments following: %s": "ใส่อาร์กิวเมนต์ไม่ครบ: %s", + "Invalid JSON config file: %s": "ไฟล์คอนฟิค JSON ไม่ถูกต้อง: %s", + "Path to JSON config file": "พาทไฟล์คอนฟิค JSON", + "Show help": "ขอความช่วยเหลือ", + "Show version number": "แสดงตัวเลขเวอร์ชั่น", + "Did you mean %s?": "คุณหมายถึง %s?" +} diff --git a/build/node_modules/yargs/locales/tr.json b/build/node_modules/yargs/locales/tr.json new file mode 100644 index 00000000..0d0d2ccd --- /dev/null +++ b/build/node_modules/yargs/locales/tr.json @@ -0,0 +1,48 @@ +{ + "Commands:": "Komutlar:", + "Options:": "Seçenekler:", + "Examples:": "Örnekler:", + "boolean": "boolean", + "count": "sayı", + "string": "string", + "number": "numara", + "array": "array", + "required": "zorunlu", + "default": "varsayılan", + "default:": "varsayılan:", + "choices:": "seçimler:", + "aliases:": "takma adlar:", + "generated-value": "oluşturulan-değer", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli", + "other": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s", + "other": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s" + }, + "Missing argument value: %s": { + "one": "Eksik argüman değeri: %s", + "other": "Eksik argüman değerleri: %s" + }, + "Missing required argument: %s": { + "one": "Eksik zorunlu argüman: %s", + "other": "Eksik zorunlu argümanlar: %s" + }, + "Unknown argument: %s": { + "one": "Bilinmeyen argüman: %s", + "other": "Bilinmeyen argümanlar: %s" + }, + "Invalid values:": "Geçersiz değerler:", + "Argument: %s, Given: %s, Choices: %s": "Argüman: %s, Verilen: %s, Seçimler: %s", + "Argument check failed: %s": "Argüman kontrolü başarısız oldu: %s", + "Implications failed:": "Sonuçlar başarısız oldu:", + "Not enough arguments following: %s": "%s için yeterli argüman bulunamadı", + "Invalid JSON config file: %s": "Geçersiz JSON yapılandırma dosyası: %s", + "Path to JSON config file": "JSON yapılandırma dosya konumu", + "Show help": "Yardım detaylarını göster", + "Show version number": "Versiyon detaylarını göster", + "Did you mean %s?": "Bunu mu demek istediniz: %s?", + "Positionals:": "Sıralılar:", + "command": "komut" +} diff --git a/build/node_modules/yargs/locales/zh_CN.json b/build/node_modules/yargs/locales/zh_CN.json new file mode 100644 index 00000000..257d26ba --- /dev/null +++ b/build/node_modules/yargs/locales/zh_CN.json @@ -0,0 +1,48 @@ +{ + "Commands:": "命令:", + "Options:": "选项:", + "Examples:": "示例:", + "boolean": "布尔", + "count": "计数", + "string": "字符串", + "number": "数字", + "array": "数组", + "required": "必需", + "default": "默认值", + "default:": "默认值:", + "choices:": "可选值:", + "generated-value": "生成的值", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个", + "other": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个", + "other": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个" + }, + "Missing argument value: %s": { + "one": "没有给此选项指定值:%s", + "other": "没有给这些选项指定值:%s" + }, + "Missing required argument: %s": { + "one": "缺少必须的选项:%s", + "other": "缺少这些必须的选项:%s" + }, + "Unknown argument: %s": { + "one": "无法识别的选项:%s", + "other": "无法识别这些选项:%s" + }, + "Invalid values:": "无效的选项值:", + "Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s", + "Argument check failed: %s": "选项值验证失败:%s", + "Implications failed:": "缺少依赖的选项:", + "Not enough arguments following: %s": "没有提供足够的值给此选项:%s", + "Invalid JSON config file: %s": "无效的 JSON 配置文件:%s", + "Path to JSON config file": "JSON 配置文件的路径", + "Show help": "显示帮助信息", + "Show version number": "显示版本号", + "Did you mean %s?": "是指 %s?", + "Arguments %s and %s are mutually exclusive" : "选项 %s 和 %s 是互斥的", + "Positionals:": "位置:", + "command": "命令" +} diff --git a/build/node_modules/yargs/locales/zh_TW.json b/build/node_modules/yargs/locales/zh_TW.json new file mode 100644 index 00000000..e3c7bcf4 --- /dev/null +++ b/build/node_modules/yargs/locales/zh_TW.json @@ -0,0 +1,47 @@ +{ + "Commands:": "命令:", + "Options:": "選項:", + "Examples:": "例:", + "boolean": "布林", + "count": "次數", + "string": "字串", + "number": "數字", + "array": "陣列", + "required": "必須", + "default": "預設值", + "default:": "預設值:", + "choices:": "可選值:", + "aliases:": "別名:", + "generated-value": "生成的值", + "Not enough non-option arguments: got %s, need at least %s": { + "one": "non-option 引數不足:只傳入了 %s 個, 至少要 %s 個", + "other": "non-option 引數不足:只傳入了 %s 個, 至少要 %s 個" + }, + "Too many non-option arguments: got %s, maximum of %s": { + "one": "non-option 引數過多:傳入了 %s 個, 但最多 %s 個", + "other": "non-option 引數過多:傳入了 %s 個, 但最多 %s 個" + }, + "Missing argument value: %s": { + "one": "此引數無指定值:%s", + "other": "這些引數無指定值:%s" + }, + "Missing required argument: %s": { + "one": "缺少必須的引數:%s", + "other": "缺少這些必須的引數:%s" + }, + "Unknown argument: %s": { + "one": "未知的引數:%s", + "other": "未知的這些引數:%s" + }, + "Invalid values:": "無效的選項值:", + "Argument: %s, Given: %s, Choices: %s": "引數名稱: %s, 傳入的值: %s, 可選的值:%s", + "Argument check failed: %s": "引數驗證失敗:%s", + "Implications failed:": "缺少依賴的選項:", + "Not enough arguments following: %s": "沒有提供足夠的值給此引數:%s", + "Invalid JSON config file: %s": "無效的 JSON 設置文件:%s", + "Path to JSON config file": "JSON 設置文件的路徑", + "Show help": "顯示說明", + "Show version number": "顯示版本", + "Did you mean %s?": "是指 %s?", + "Arguments %s and %s are mutually exclusive" : "引數 %s 和 %s 是互斥的" +} diff --git a/build/node_modules/yargs/package.json b/build/node_modules/yargs/package.json new file mode 100644 index 00000000..86fc7906 --- /dev/null +++ b/build/node_modules/yargs/package.json @@ -0,0 +1,150 @@ +{ + "_from": "yargs@16.2.0", + "_id": "yargs@16.2.0", + "_inBundle": false, + "_integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "_location": "/yargs", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "yargs@16.2.0", + "name": "yargs", + "escapedName": "yargs", + "rawSpec": "16.2.0", + "saveSpec": null, + "fetchSpec": "16.2.0" + }, + "_requiredBy": [ + "/mocha" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs/-/yargs-16.2.0.tgz", + "_shasum": "1c82bf0f6b6a66eafce7ef30e376f49a12477f66", + "_spec": "yargs@16.2.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/mocha", + "bugs": { + "url": "https://github.com/yargs/yargs/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Yargs Contributors", + "url": "https://github.com/yargs/yargs/graphs/contributors" + } + ], + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "deprecated": false, + "description": "yargs the modern, pirate-themed, successor to optimist.", + "devDependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^8.0.0", + "@types/node": "^14.11.2", + "@wessberg/rollup-plugin-ts": "^1.3.2", + "c8": "^7.0.0", + "chai": "^4.2.0", + "chalk": "^4.0.0", + "coveralls": "^3.0.9", + "cpr": "^3.0.1", + "cross-env": "^7.0.2", + "cross-spawn": "^7.0.0", + "gts": "^3.0.0", + "hashish": "0.0.4", + "mocha": "^8.0.0", + "rimraf": "^3.0.2", + "rollup": "^2.23.0", + "rollup-plugin-cleanup": "^3.1.1", + "standardx": "^5.0.0", + "typescript": "^4.0.2", + "which": "^2.0.0", + "yargs-test-extends": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "exports": { + "./package.json": "./package.json", + ".": [ + { + "import": "./index.mjs", + "require": "./index.cjs" + }, + "./index.cjs" + ], + "./helpers": { + "import": "./helpers/helpers.mjs", + "require": "./helpers/index.js" + }, + "./yargs": [ + { + "require": "./yargs" + }, + "./yargs" + ] + }, + "files": [ + "browser.mjs", + "index.cjs", + "helpers/*.js", + "helpers/*", + "index.mjs", + "yargs", + "build", + "locales", + "LICENSE", + "lib/platform-shims/*.mjs", + "!*.d.ts" + ], + "homepage": "https://yargs.js.org/", + "keywords": [ + "argument", + "args", + "option", + "parser", + "parsing", + "cli", + "command" + ], + "license": "MIT", + "main": "./index.cjs", + "module": "./index.mjs", + "name": "yargs", + "repository": { + "type": "git", + "url": "git+https://github.com/yargs/yargs.git" + }, + "scripts": { + "build:cjs": "rollup -c rollup.config.cjs", + "check": "gts lint && npm run check:js", + "check:js": "standardx '**/*.mjs' && standardx '**/*.cjs' && standardx './*.mjs' && standardx './*.cjs'", + "clean": "gts clean", + "compile": "rimraf build && tsc", + "coverage": "c8 report --check-coverage", + "fix": "gts fix && npm run fix:js", + "fix:js": "standardx --fix '**/*.mjs' && standardx --fix '**/*.cjs' && standardx --fix './*.mjs' && standardx --fix './*.cjs'", + "postbuild:cjs": "rimraf ./build/index.cjs.d.ts", + "postcompile": "npm run build:cjs", + "posttest": "npm run check", + "prepare": "npm run compile", + "pretest": "npm run compile -- -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs", + "test": "c8 mocha ./test/*.cjs --require ./test/before.cjs --timeout=12000 --check-leaks", + "test:esm": "c8 mocha ./test/esm/*.mjs --check-leaks" + }, + "standardx": { + "ignore": [ + "build", + "helpers", + "**/example/**", + "**/platform-shims/esm.mjs" + ] + }, + "type": "module", + "version": "16.2.0" +} diff --git a/build/node_modules/yargs/yargs b/build/node_modules/yargs/yargs new file mode 100644 index 00000000..8460d10a --- /dev/null +++ b/build/node_modules/yargs/yargs @@ -0,0 +1,9 @@ +// TODO: consolidate on using a helpers file at some point in the future, which +// is the approach currently used to export Parser and applyExtends for ESM: +const {applyExtends, cjsPlatformShim, Parser, Yargs, processArgv} = require('./build/index.cjs') +Yargs.applyExtends = (config, cwd, mergeExtends) => { + return applyExtends(config, cwd, mergeExtends, cjsPlatformShim) +} +Yargs.hideBin = processArgv.hideBin +Yargs.Parser = Parser +module.exports = Yargs diff --git a/build/node_modules/yocto-queue/index.d.ts b/build/node_modules/yocto-queue/index.d.ts new file mode 100644 index 00000000..9541986b --- /dev/null +++ b/build/node_modules/yocto-queue/index.d.ts @@ -0,0 +1,56 @@ +declare class Queue implements Iterable { + /** + The size of the queue. + */ + readonly size: number; + + /** + Tiny queue data structure. + + The instance is an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols), which means you can iterate over the queue front to back with a “for…of” loop, or use spreading to convert the queue to an array. Don't do this unless you really need to though, since it's slow. + + @example + ``` + import Queue = require('yocto-queue'); + + const queue = new Queue(); + + queue.enqueue('🦄'); + queue.enqueue('🌈'); + + console.log(queue.size); + //=> 2 + + console.log(...queue); + //=> '🦄 🌈' + + console.log(queue.dequeue()); + //=> '🦄' + + console.log(queue.dequeue()); + //=> '🌈' + ``` + */ + constructor(); + + [Symbol.iterator](): IterableIterator; + + /** + Add a value to the queue. + */ + enqueue(value: ValueType): void; + + /** + Remove the next value in the queue. + + @returns The removed value or `undefined` if the queue is empty. + */ + dequeue(): ValueType | undefined; + + /** + Clear the queue. + */ + clear(): void; +} + +export = Queue; diff --git a/build/node_modules/yocto-queue/index.js b/build/node_modules/yocto-queue/index.js new file mode 100644 index 00000000..2f3e6dcd --- /dev/null +++ b/build/node_modules/yocto-queue/index.js @@ -0,0 +1,68 @@ +class Node { + /// value; + /// next; + + constructor(value) { + this.value = value; + + // TODO: Remove this when targeting Node.js 12. + this.next = undefined; + } +} + +class Queue { + // TODO: Use private class fields when targeting Node.js 12. + // #_head; + // #_tail; + // #_size; + + constructor() { + this.clear(); + } + + enqueue(value) { + const node = new Node(value); + + if (this._head) { + this._tail.next = node; + this._tail = node; + } else { + this._head = node; + this._tail = node; + } + + this._size++; + } + + dequeue() { + const current = this._head; + if (!current) { + return; + } + + this._head = this._head.next; + this._size--; + return current.value; + } + + clear() { + this._head = undefined; + this._tail = undefined; + this._size = 0; + } + + get size() { + return this._size; + } + + * [Symbol.iterator]() { + let current = this._head; + + while (current) { + yield current.value; + current = current.next; + } + } +} + +module.exports = Queue; diff --git a/build/node_modules/yocto-queue/license b/build/node_modules/yocto-queue/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/build/node_modules/yocto-queue/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build/node_modules/yocto-queue/package.json b/build/node_modules/yocto-queue/package.json new file mode 100644 index 00000000..02ab47b0 --- /dev/null +++ b/build/node_modules/yocto-queue/package.json @@ -0,0 +1,75 @@ +{ + "_from": "yocto-queue@^0.1.0", + "_id": "yocto-queue@0.1.0", + "_inBundle": false, + "_integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "_location": "/yocto-queue", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yocto-queue@^0.1.0", + "name": "yocto-queue", + "escapedName": "yocto-queue", + "rawSpec": "^0.1.0", + "saveSpec": null, + "fetchSpec": "^0.1.0" + }, + "_requiredBy": [ + "/p-limit" + ], + "_resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "_shasum": "0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b", + "_spec": "yocto-queue@^0.1.0", + "_where": "/var/build/workspace/build-platform-sdks-pipeline/output/purecloudjavascript-guest/build/node_modules/p-limit", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/yocto-queue/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Tiny queue data structure", + "devDependencies": { + "ava": "^2.4.0", + "tsd": "^0.13.1", + "xo": "^0.35.0" + }, + "engines": { + "node": ">=10" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/yocto-queue#readme", + "keywords": [ + "queue", + "data", + "structure", + "algorithm", + "queues", + "queuing", + "list", + "array", + "linkedlist", + "fifo", + "enqueue", + "dequeue", + "data-structure" + ], + "license": "MIT", + "name": "yocto-queue", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/yocto-queue.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "0.1.0" +} diff --git a/build/node_modules/yocto-queue/readme.md b/build/node_modules/yocto-queue/readme.md new file mode 100644 index 00000000..c72fefc4 --- /dev/null +++ b/build/node_modules/yocto-queue/readme.md @@ -0,0 +1,64 @@ +# yocto-queue [![](https://badgen.net/bundlephobia/minzip/yocto-queue)](https://bundlephobia.com/result?p=yocto-queue) + +> Tiny queue data structure + +You should use this package instead of an array if you do a lot of `Array#push()` and `Array#shift()` on large arrays, since `Array#shift()` has [linear time complexity](https://medium.com/@ariel.salem1989/an-easy-to-use-guide-to-big-o-time-complexity-5dcf4be8a444#:~:text=O(N)%E2%80%94Linear%20Time) *O(n)* while `Queue#dequeue()` has [constant time complexity](https://medium.com/@ariel.salem1989/an-easy-to-use-guide-to-big-o-time-complexity-5dcf4be8a444#:~:text=O(1)%20%E2%80%94%20Constant%20Time) *O(1)*. That makes a huge difference for large arrays. + +> A [queue](https://en.wikipedia.org/wiki/Queue_(abstract_data_type)) is an ordered list of elements where an element is inserted at the end of the queue and is removed from the front of the queue. A queue works based on the first-in, first-out ([FIFO](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics))) principle. + +## Install + +``` +$ npm install yocto-queue +``` + +## Usage + +```js +const Queue = require('yocto-queue'); + +const queue = new Queue(); + +queue.enqueue('🦄'); +queue.enqueue('🌈'); + +console.log(queue.size); +//=> 2 + +console.log(...queue); +//=> '🦄 🌈' + +console.log(queue.dequeue()); +//=> '🦄' + +console.log(queue.dequeue()); +//=> '🌈' +``` + +## API + +### `queue = new Queue()` + +The instance is an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols), which means you can iterate over the queue front to back with a “for…of” loop, or use spreading to convert the queue to an array. Don't do this unless you really need to though, since it's slow. + +#### `.enqueue(value)` + +Add a value to the queue. + +#### `.dequeue()` + +Remove the next value in the queue. + +Returns the removed value or `undefined` if the queue is empty. + +#### `.clear()` + +Clear the queue. + +#### `.size` + +The size of the queue. + +## Related + +- [quick-lru](https://github.com/sindresorhus/quick-lru) - Simple “Least Recently Used” (LRU) cache diff --git a/build/package-lock.json b/build/package-lock.json index e0fcc655..50fd0b30 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -1,22 +1,146 @@ { "name": "purecloud-guest-chat-client", - "version": "8.0.0", + "version": "8.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "version": "2.0.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "requires": { "colorspace": "1.1.x", "enabled": "2.0.x", "kuler": "^2.0.0" } }, + "@rollup/plugin-commonjs": { + "version": "21.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz", + "integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/fake-timers/-/fake-timers-9.1.1.tgz", + "integrity": "sha512-Wp5vwlZ0lOqpSYGKqr53INws9HLkt6JDc/pDZcPf7bchQnrXJMXPns8CXx0hFikMSGSWfvtvvpb2gtMVfkWagA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "17.0.23", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "abstract-leveldown": { "version": "0.12.4", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", "dev": true, "requires": { @@ -25,7 +149,7 @@ "dependencies": { "xtend": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-3.0.0.tgz", "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", "dev": true } @@ -33,13 +157,72 @@ }, "acorn": { "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/acorn/-/acorn-5.7.4.tgz", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { @@ -51,31 +234,37 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "available-typed-arrays": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", + "balanced-match": { + "version": "1.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bl/-/bl-0.8.2.tgz", "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", "dev": true, "requires": { @@ -84,13 +273,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -102,7 +291,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -110,19 +299,44 @@ }, "bn.js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -136,7 +350,7 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { @@ -147,7 +361,7 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { @@ -159,7 +373,7 @@ }, "browserify-fs": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-fs/-/browserify-fs-1.0.0.tgz", "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", "dev": true, "requires": { @@ -170,7 +384,7 @@ }, "browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { @@ -180,7 +394,7 @@ }, "browserify-sign": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { @@ -193,63 +407,87 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } } }, "buffer-es6": { "version": "4.9.3", - "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/buffer-es6/-/buffer-es6-4.9.3.tgz", "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", "dev": true }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", - "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "version": "3.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, "call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { @@ -257,24 +495,35 @@ "safe-buffer": "^5.0.1" } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "clone": { "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/clone/-/clone-0.1.19.tgz", "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", "dev": true }, "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "3.2.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" @@ -282,54 +531,55 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.9.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "1.1.4", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { - "color": "3.0.x", + "color": "^3.1.3", "text-hex": "1.0.x" } }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "commondir": { + "version": "1.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { @@ -337,29 +587,62 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "configparser": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/configparser/-/configparser-0.3.9.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/configparser/-/configparser-0.3.9.tgz", "integrity": "sha512-ZlHt4SyiCfcQmFkt+2OfUQG6PC4GLyXthfBHvCH9I4ZtDxqMaAkfeEP+bkgePWgO3869+dRMVIcjklwfZmPDjg==", "requires": { "mkdirp": "^0.5.1" } }, "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + "version": "2.1.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { @@ -369,7 +652,7 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } @@ -377,7 +660,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -390,7 +673,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -404,7 +687,7 @@ }, "crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { @@ -422,47 +705,42 @@ } }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.3.4", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "deferred-leveldown": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", "dev": true, "requires": { "abstract-leveldown": "~0.12.1" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { @@ -470,15 +748,24 @@ "minimalistic-assert": "^1.0.0" } }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "version": "5.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -489,7 +776,7 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } @@ -497,7 +784,7 @@ }, "elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { @@ -512,84 +799,53 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "enabled": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "errno": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { "prr": "~1.0.1" } }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "escalade": { + "version": "3.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", - "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "version": "2.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { @@ -599,68 +855,105 @@ }, "expect.js": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/expect.js/-/expect.js-0.3.1.tgz", "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", "dev": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "version": "2.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fecha": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "fn.name": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "foreach": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true, + "formidable": { + "version": "2.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", "requires": { - "samsam": "~1.1" + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + } } }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true }, "function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "fwd-stream": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/fwd-stream/-/fwd-stream-1.0.4.tgz", "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", "dev": true, "requires": { @@ -669,13 +962,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -687,15 +980,21 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-intrinsic": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { "function-bind": "^1.1.1", @@ -704,80 +1003,67 @@ } }, "glob": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.3.tgz", - "integrity": "sha1-4xPusknHr/qlxHUoaw4RW1mDlGc=", + "version": "7.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "graceful-fs": "~2.0.0", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", "inherits": "2", - "minimatch": "~0.2.11" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", - "dev": true + "glob-parent": { + "version": "5.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } }, "growl": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.8.1.tgz", - "integrity": "sha1-Sy3sjZB+k9szZiTc7AGDUC+MlCg=", + "version": "1.10.5", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } } }, "hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { @@ -785,9 +1071,20 @@ "minimalistic-assert": "^1.0.1" } }, + "he": { + "version": "1.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { @@ -798,193 +1095,166 @@ }, "idb-wrapper": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/idb-wrapper/-/idb-wrapper-1.7.2.tgz", "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", "dev": true }, "indexof": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "inflight": { + "version": "1.0.6", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "is": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", - "dev": true - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true }, "is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "binary-extensions": "^2.0.0" } }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.8.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "is-number": { + "version": "7.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-object": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-object/-/is-object-0.1.2.tgz", "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", "dev": true }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "@types/estree": "*" } }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "2.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isbuffer": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isbuffer/-/isbuffer-0.0.0.tgz", "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", "dev": true }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "isexe": { + "version": "2.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", - "dev": true - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", - "dev": true - } + "argparse": "^2.0.1" } }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, "kuler": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "level-blobs": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-blobs/-/level-blobs-0.1.7.tgz", "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", "dev": true, "requires": { @@ -995,13 +1265,13 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -1013,7 +1283,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -1021,7 +1291,7 @@ }, "level-filesystem": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-filesystem/-/level-filesystem-1.2.0.tgz", "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", "dev": true, "requires": { @@ -1038,13 +1308,13 @@ }, "level-fix-range": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-fix-range/-/level-fix-range-1.0.2.tgz", "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", "dev": true }, "level-hooks": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-hooks/-/level-hooks-4.5.0.tgz", "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", "dev": true, "requires": { @@ -1053,7 +1323,7 @@ }, "level-js": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-js/-/level-js-2.2.4.tgz", "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", "dev": true, "requires": { @@ -1067,13 +1337,13 @@ "dependencies": { "object-keys": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-keys/-/object-keys-0.4.0.tgz", "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", "dev": true }, "xtend": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", "dev": true, "requires": { @@ -1084,7 +1354,7 @@ }, "level-peek": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-peek/-/level-peek-1.0.6.tgz", "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", "dev": true, "requires": { @@ -1093,7 +1363,7 @@ }, "level-sublevel": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-sublevel/-/level-sublevel-5.2.3.tgz", "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", "dev": true, "requires": { @@ -1105,7 +1375,7 @@ "dependencies": { "level-fix-range": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/level-fix-range/-/level-fix-range-2.0.0.tgz", "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", "dev": true, "requires": { @@ -1114,7 +1384,7 @@ }, "xtend": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.0.6.tgz", "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", "dev": true, "requires": { @@ -1126,7 +1396,7 @@ }, "levelup": { "version": "0.18.6", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/levelup/-/levelup-0.18.6.tgz", "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", "dev": true, "requires": { @@ -1141,19 +1411,19 @@ "dependencies": { "isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "prr": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/prr/-/prr-0.0.0.tgz", "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", "dev": true }, "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -1163,62 +1433,89 @@ "string_decoder": "~0.10.x" } }, + "semver": { + "version": "2.3.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "dev": true + }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "xtend": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-3.0.0.tgz", "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", "dev": true } } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.4.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/logform/-/logform-2.4.0.tgz", + "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.5.0", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - }, "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true + "version": "6.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } }, "ltgt": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", "dev": true }, "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "version": "0.25.9", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.4" + "sourcemap-codec": "^1.4.8" } }, "md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { @@ -1229,12 +1526,12 @@ }, "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { @@ -1244,127 +1541,168 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "2.6.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.52.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.35", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.52.0" } }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "version": "3.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "mocha": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.3.4.tgz", - "integrity": "sha1-himm+wRPLSJapLgaKuLQAWmesmY=", - "dev": true, - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.3", - "growl": "1.8.1", - "jade": "0.26.3", - "mkdirp": "0.5.0", - "supports-color": "1.2.0" + "version": "9.2.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "4.3.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "minimatch": { + "version": "4.2.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "requires": { - "minimist": "0.0.8" + "brace-expansion": "^1.1.7" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.1.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "version": "2.1.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "nise": { + "version": "5.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + "version": "1.12.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-keys": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/object-keys/-/object-keys-0.2.0.tgz", "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", "dev": true, "requires": { @@ -1373,52 +1711,49 @@ "is": "~0.2.6" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, "octal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/octal/-/octal-1.0.0.tgz", "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", "dev": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, "one-time": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "requires": { "fn.name": "1.x.x" } }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { @@ -1429,15 +1764,44 @@ "safe-buffer": "^5.1.1" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, "path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, "pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { @@ -1448,26 +1812,33 @@ "sha.js": "^2.4.8" } }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "process-es6": { "version": "0.11.6", - "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/process-es6/-/process-es6-0.11.6.tgz", "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", "dev": true }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, "public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { @@ -1481,23 +1852,23 @@ "dependencies": { "bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "version": "6.10.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "requires": { "side-channel": "^1.0.4" } }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { @@ -1506,7 +1877,7 @@ }, "randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { @@ -1515,32 +1886,44 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "picomatch": "^2.2.1" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { @@ -1548,30 +1931,9 @@ "inherits": "^2.0.1" } }, - "rollup-plugin-commonjs": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", - "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", - "dev": true, - "requires": { - "estree-walker": "^0.6.0", - "magic-string": "^0.25.2", - "resolve": "^1.10.0", - "rollup-pluginutils": "^2.6.0" - } - }, - "rollup-plugin-json": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-2.3.1.tgz", - "integrity": "sha512-alQQQVPo2z9pl6LSK8QqyDlWwCH5KeE8YxgQv7fa/SeTxz+gQe36jBjcha7hQW68MrVh9Ms71EQaMZDAG3w2yw==", - "dev": true, - "requires": { - "rollup-pluginutils": "^2.0.1" - } - }, "rollup-plugin-node-builtins": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", "dev": true, "requires": { @@ -1583,7 +1945,7 @@ }, "rollup-plugin-node-globals": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", "dev": true, "requires": { @@ -1597,13 +1959,13 @@ "dependencies": { "estree-walker": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-0.5.2.tgz", "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", "dev": true }, "magic-string": { "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.22.5.tgz", "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "requires": { @@ -1612,20 +1974,9 @@ } } }, - "rollup-plugin-node-resolve": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", - "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", - "dev": true, - "requires": { - "builtin-modules": "^2.0.0", - "is-module": "^1.0.0", - "resolve": "^1.1.6" - } - }, "rollup-plugin-re": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", "integrity": "sha1-/hdHBO1ZzahMrwK9ATtYLm/apPY=", "dev": true, "requires": { @@ -1635,7 +1986,7 @@ "dependencies": { "magic-string": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/magic-string/-/magic-string-0.16.0.tgz", "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=", "dev": true, "requires": { @@ -1646,39 +1997,57 @@ }, "rollup-pluginutils": { "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "requires": { "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "dev": true - }, "semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", - "dev": true + "version": "7.3.5", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -1688,7 +2057,7 @@ }, "side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { "call-bind": "^1.0.0", @@ -1696,235 +2065,284 @@ "object-inspect": "^1.9.0" } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { "is-arrayish": "^0.3.1" } }, "sinon": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.3.tgz", - "integrity": "sha1-RNZLx0jQI4gARsFUPO/Oo0xH0X4=", + "version": "13.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sinon/-/sinon-13.0.1.tgz", + "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==", "dev": true, "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.0.0", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "stack-trace": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "string-range": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string-range/-/string-range-1.2.2.tgz", "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", "dev": true }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "string-width": { + "version": "4.2.3", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "safe-buffer": "~5.2.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "ansi-regex": "^5.0.1" } }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "version": "7.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/superagent/-/superagent-7.1.1.tgz", + "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.3", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "^2.5.0", + "qs": "^6.10.1", + "readable-stream": "^3.6.0", + "semver": "^7.3.5" } }, "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "version": "8.1.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "text-hex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "triple-beam": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "typedarray-to-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "vlq": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "which": { + "version": "2.0.2", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" + "isexe": "^2.0.0" } }, "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.6.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/winston/-/winston-3.6.0.tgz", + "integrity": "sha512-9j8T75p+bcN6D00sF/zjFVmPp+t8KMPB1MzbbzYjeN9VWxdsYnTB40TkbNUEXAmILEfChMvAMgidlX64OG3p6w==", "requires": { "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "winston-transport": "^4.5.0" } }, "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.5.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xtend": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/xtend/-/xtend-2.2.0.tgz", "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://purecloud.jfrog.io/purecloud/api/npm/inin-internal-npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/build/package.json b/build/package.json index 5579b07e..b9bc007b 100644 --- a/build/package.json +++ b/build/package.json @@ -1,6 +1,6 @@ { "name": "purecloud-guest-chat-client", - "version": "8.0.0", + "version": "8.1.0", "description": "A JavaScript library to interface with the PureCloud Platform API", "license": "MIT", "main": "dist/node/purecloud-guest-chat-client.js", @@ -31,18 +31,18 @@ }, "dependencies": { "configparser": "^0.3.9", - "superagent": "^3.8.3", - "winston": "^3.3.3" + "superagent": "^7.1.1", + "winston": "^3.6.0" }, "devDependencies": { - "mocha": "~2.3.4", - "sinon": "1.17.3", + "mocha": "~9.2.0", + "sinon": "13.0.1", "expect.js": "~0.3.1", - "rollup-plugin-commonjs": "^9.1.3", - "rollup-plugin-node-resolve": "^3.3.0", - "rollup-plugin-json": "^2.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-json": "^4.1.0", "rollup-plugin-re": "^1.0.7", "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-globals": "^1.2.1" + "rollup-plugin-node-globals": "^1.4.0" } } diff --git a/build/rollup-cjs-for-browserify.config.js b/build/rollup-cjs-for-browserify.config.js index c6be5eb9..373fa5d8 100644 --- a/build/rollup-cjs-for-browserify.config.js +++ b/build/rollup-cjs-for-browserify.config.js @@ -1,6 +1,6 @@ -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; -import json from 'rollup-plugin-json'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; import replace from 'rollup-plugin-re'; import builtins from 'rollup-plugin-node-builtins'; import globals from 'rollup-plugin-node-globals'; @@ -32,7 +32,7 @@ export default { }, plugins: [ builtins(), - resolve(), + nodeResolve(), replace({ // https://github.com/rollup/rollup-plugin-commonjs/issues/166#issuecomment-328853157 // do replace before commonjs diff --git a/build/rollup-cjs-for-node.config.js b/build/rollup-cjs-for-node.config.js index 3c68c6a0..43e2650f 100644 --- a/build/rollup-cjs-for-node.config.js +++ b/build/rollup-cjs-for-node.config.js @@ -1,6 +1,6 @@ -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; -import json from 'rollup-plugin-json'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import json from '@rollup/plugin-json'; import replace from 'rollup-plugin-re'; export default { @@ -10,7 +10,7 @@ export default { format: 'cjs' }, plugins: [ - resolve(), + nodeResolve(), json() ], external: [ diff --git a/build/src/purecloud-guest-chat-client/ApiClient.js b/build/src/purecloud-guest-chat-client/ApiClient.js index 0b07fe9b..97f74dd9 100644 --- a/build/src/purecloud-guest-chat-client/ApiClient.js +++ b/build/src/purecloud-guest-chat-client/ApiClient.js @@ -3,7 +3,7 @@ import Configuration from './configuration.js'; /** * @module purecloud-guest-chat-client/ApiClient - * @version 8.0.0 + * @version 8.1.0 */ class ApiClient { /** @@ -485,7 +485,7 @@ class ApiClient { // set header parameters request.set(this.defaultHeaders).set(this.normalizeParams(headerParams)); - //request.set({ 'purecloud-sdk': '8.0.0' }); + //request.set({ 'purecloud-sdk': '8.1.0' }); // set request timeout request.timeout(this.timeout); diff --git a/build/src/purecloud-guest-chat-client/api/WebChatApi.js b/build/src/purecloud-guest-chat-client/api/WebChatApi.js index 7be4cab2..982abdcf 100644 --- a/build/src/purecloud-guest-chat-client/api/WebChatApi.js +++ b/build/src/purecloud-guest-chat-client/api/WebChatApi.js @@ -5,7 +5,7 @@ class WebChatApi { /** * WebChat service. * @module purecloud-guest-chat-client/api/WebChatApi - * @version 8.0.0 + * @version 8.1.0 */ /** diff --git a/build/src/purecloud-guest-chat-client/configuration.js b/build/src/purecloud-guest-chat-client/configuration.js index 312a3152..1edc9b3e 100644 --- a/build/src/purecloud-guest-chat-client/configuration.js +++ b/build/src/purecloud-guest-chat-client/configuration.js @@ -27,7 +27,6 @@ class Configuration { const path = require('path'); this.configPath = path.join(os.homedir(), '.genesyscloudjavascript-guest', 'config'); } - this.live_reload_config = true; this.host; this.environment; @@ -40,27 +39,29 @@ class Configuration { } liveLoadConfig() { - // If in browser, don't read config file, use default values - if (typeof window !== 'undefined') { - this.configPath = ''; - return; - } - - this.updateConfigFromFile(); - - if (this.live_reload_config && this.live_reload_config === true) { - try { - const fs = require('fs'); - fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { - this.updateConfigFromFile(); - if (!this.live_reload_config) { - fs.unwatchFile(this.configPath); - } - }); - } catch (err) { - // do nothing + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + this.updateConfigFromFile(); + + if (this.live_reload_config && this.live_reload_config === true) { + try { + const fs = require('fs'); + fs.watchFile(this.configPath, { persistent: false }, (eventType, filename) => { + this.updateConfigFromFile(); + if (!this.live_reload_config) { + fs.unwatchFile(this.configPath); + } + }); + } catch (err) { + // do nothing + } } + return; } + // If in browser, don't read config file, use default values + this.configPath = ''; } setConfigPath(path) { @@ -71,24 +72,29 @@ class Configuration { } updateConfigFromFile() { - const ConfigParser = require('configparser'); - var configparser = new ConfigParser(); - - try { - configparser.read(this.configPath); // If no error catched, indicates it's INI format - this.config = configparser; - } catch (error) { - if (error.name && error.name === 'MissingSectionHeaderError') { - // Not INI format, see if it's JSON format - const fs = require('fs'); - var configData = fs.readFileSync(this.configPath, 'utf8'); - this.config = { - _sections: JSON.parse(configData), // To match INI data format - }; + if (typeof window === 'undefined') { + // Please don't remove the typeof window === 'undefined' check here! + // This safeguards the browser environment from using `fs`, which is only + // available in node environment. + const ConfigParser = require('configparser'); + + try { + var configparser = new ConfigParser(); + configparser.read(this.configPath); // If no error catched, indicates it's INI format + this.config = configparser; + } catch (error) { + if (error.name && error.name === 'MissingSectionHeaderError') { + // Not INI format, see if it's JSON format + const fs = require('fs'); + var configData = fs.readFileSync(this.configPath, 'utf8'); + this.config = { + _sections: JSON.parse(configData), // To match INI data format + }; + } } - } - if (this.config) this.updateConfigValues(); + if (this.config) this.updateConfigValues(); + } } updateConfigValues() { diff --git a/build/src/purecloud-guest-chat-client/index.js b/build/src/purecloud-guest-chat-client/index.js index be8b43f6..20b1c081 100644 --- a/build/src/purecloud-guest-chat-client/index.js +++ b/build/src/purecloud-guest-chat-client/index.js @@ -32,7 +32,7 @@ import WebChatApi from './api/WebChatApi.js'; * *

            * @module purecloud-guest-chat-client/index - * @version 8.0.0 + * @version 8.1.0 */ class platformClient { constructor() { diff --git a/releaseNotes.md b/releaseNotes.md index fd627bac..cfd6365e 100644 --- a/releaseNotes.md +++ b/releaseNotes.md @@ -1,102 +1,12 @@ -Platform API version: 4784 +Platform API version: 5516 -# Release notes - -* Forcing a major release to ensure SDKs align with API definition +Adds API Data # Major Changes (0 changes) -# Minor Changes (11 changes) - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing** (1 change) - -* Response 408 was added - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 408 was added - -**DELETE /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 408 was added - -**PATCH /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests** (1 change) - -* Response 408 was added - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members** (1 change) - -* Response 408 was added - - -# Point Changes (11 changes) - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**POST /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**DELETE /api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**PATCH /api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds - -**GET /api/v2/webchat/guest/conversations/{conversationId}/mediarequests** (1 change) - -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds +# Minor Changes (0 changes) -**GET /api/v2/webchat/guest/conversations/{conversationId}/members** (1 change) -* Response 429 was changed from Rate limit exceeded the maximum [%s] requests within [%s] seconds to Rate limit exceeded the maximum. Retry the request in [%s] seconds +# Point Changes (0 changes) diff --git a/swagger.json b/swagger.json index 291fd413..b704001c 100644 --- a/swagger.json +++ b/swagger.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"description":"With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.","version":"v2","title":"PureCloud Platform API","termsOfService":"https://help.mypurecloud.com/articles/terms-and-conditions/","contact":{"name":"PureCloud Developer Evangelists","url":"https://developer.mypurecloud.com","email":"DeveloperEvangelists@genesys.com"},"license":{"name":"UNLICENSED","url":"https://help.mypurecloud.com/articles/terms-and-conditions/"}},"host":"api.mypurecloud.com","tags":[{"name":"Alerting","description":"Rules and alerts","externalDocs":{"description":"Alerting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/alerting/"}},{"name":"Analytics","description":"Analytics querying and reporting.","externalDocs":{"description":"Analytics Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/"}},{"name":"Architect","description":"Flows, Prompts, IVR schedules, Dependency Tracking","externalDocs":{"description":"Architect Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/architect/"}},{"name":"Agent Assistants","description":"Manage virtual agent assistants."},{"name":"Audit","description":"","externalDocs":{"description":"Audit Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/audits/"}},{"name":"Authorization","description":"Roles and permissions","externalDocs":{"description":"Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/"}},{"name":"Badges","description":"Badges stats"},{"name":"Billing","description":"","externalDocs":{"description":"billing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/billing/"}},{"name":"Bridge","description":""},{"name":"Callbacks","description":""},{"name":"Calls","description":""},{"name":"Carrier Services","description":""},{"name":"Chat","description":""},{"name":"Coaching","description":"Schedule and manage coaching appointments","externalDocs":{"description":"Coaching","url":"https://developer.mypurecloud.com/api/rest/v2/coaching/index.html"}},{"name":"Cobrowse","description":""},{"name":"Compliance","description":""},{"name":"Configuration","description":"","externalDocs":{"description":"Configuration Documentation","url":""}},{"name":"Content Management","description":"","externalDocs":{"description":"Content Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/contentmanagement/"}},{"name":"Conversations","description":"","externalDocs":{"description":"Conversations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/conversations/"}},{"name":"Data Extensions","description":"Data extensions","externalDocs":{"description":"Data Extensions","url":""}},{"name":"Dialog Engine","description":"Dialog Engine","externalDocs":{"description":"Dialog Engine documentation","url":"https://developer.mypurecloud.com/api/rest/v2/dialog/"}},{"name":"Directory Proxy","description":"Search, Suggest, and people"},{"name":"Docs","description":"Swagger documentation definitions"},{"name":"Downloads","description":"Download file","externalDocs":{"description":"Downloads Documentation","url":""}},{"name":"Emails","description":""},{"name":"External Contacts","description":"External Organizations, contacts, notes and relationships","externalDocs":{"description":"External Contacts","url":"https://developer.mypurecloud.com/api/rest/v2/externalcontacts/"}},{"name":"Fax","description":"","externalDocs":{"description":"Fax Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/fax/"}},{"name":"Flows","description":"IVR Flows","externalDocs":{"description":"Flow Aggregates Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/flow_aggregate.html"}},{"name":"Gamification","description":"Gamification, Scorecard, and leaderboard","externalDocs":{"description":"Gamification Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/gamification/"}},{"name":"General Data Protection Regulation","description":"Working with General Data Protection Regulation (GDPR) requests","externalDocs":{"description":"GDPR Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/generaldataprotectionregulation/"}},{"name":"Geolocation","description":"","externalDocs":{"description":"Geolocation Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/geolocation/"}},{"name":"Greetings","description":"","externalDocs":{"description":"Greetings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/greetings/"}},{"name":"Groups","description":"Groups, members","externalDocs":{"description":"Groups Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/groups/"}},{"name":"Identity Provider","description":"Identity providers","externalDocs":{"description":"Identity Providers Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/identityprovider/"}},{"name":"Integrations","description":"","externalDocs":{"description":"Integrations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/integrations/"}},{"name":"Journey","description":"Predictive Engagement, Customer Journey","externalDocs":{"description":"Journey documentation","url":""}},{"name":"Languages","description":"Available languages","externalDocs":{"description":"Languages Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/languages/"}},{"name":"Knowledge","description":"Knowledge administration and search"},{"name":"Language Understanding","description":"Language Understanding","externalDocs":{"description":"Language Understanding documentation","url":""}},{"name":"Learning","description":"Manage learning modules"},{"name":"Licensing","description":""},{"name":"License","description":"Per-user platform license assignments","externalDocs":{"description":"License Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/license/"}},{"name":"Locations","description":"Physical locations","externalDocs":{"description":"Locations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/locations/"}},{"name":"Marketplace","description":"Marketplace listing management"},{"name":"Data Action Metrics","description":"Metrics about data actions"},{"name":"Log Capture","description":"Browser Log Capture"},{"name":"Meeting","description":"","externalDocs":{"description":"Meeting Documentation","url":""}},{"name":"Messaging","description":"Messaging","externalDocs":{"description":"Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/messaging/"}},{"name":"Mobile Devices","description":"Devices","externalDocs":{"description":"Devices Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/mobiledevices/"}},{"name":"Notifications","description":"Channels, subscriptions, topics, mobile push registration","externalDocs":{"description":"Notifications Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/notifications/"}},{"name":"OAuth","description":"OAuth clients, providers","externalDocs":{"description":"OAuth Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/oauth/"}},{"name":"Objects","description":"Access-controlled objects in the platform","externalDocs":{"description":"authorization docs","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/"}},{"name":"Organization","description":"Organization","externalDocs":{"description":"Organization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/organization/"}},{"name":"Organization Authorization","description":"Organization Authorization","externalDocs":{"description":"Organization Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/organizationauthorization/"}},{"name":"Outbound","description":"","externalDocs":{"description":"Outbound Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/outbound/"}},{"name":"Presence","description":"User and organization presences","externalDocs":{"description":"Presence Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/presence/"}},{"name":"Process Automation","description":"Work items, flows, triggers"},{"name":"Quality","description":"Evaluations, calibrations","externalDocs":{"description":"Quality Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/quality/"}},{"name":"Recording","description":"Recordings, policies, annotations, orphans","externalDocs":{"description":"Recording Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/recording/"}},{"name":"Response Management","description":"Responses, library, Response Assets, query","externalDocs":{"description":"Response Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/responsemanagement/"}},{"name":"Routing","description":"Queues, wrapup codes, skills, email & sms config, predictive routing","externalDocs":{"description":"Routing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/routing/"}},{"name":"SCIM","description":"System for Cross-domain Identity Management","externalDocs":{"description":"System for Cross-domain Identity Management: Definitions, Overview, Concepts, and Requirements","url":"https://developer.mypurecloud.com/api/rest/v2/scim/scim-overview.html"}},{"name":"Scripts","description":"Agent-facing scripts for interactions","externalDocs":{"description":"Scripts Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/scripts/"}},{"name":"Search","description":"Search aggregate, users, groups","externalDocs":{"description":"Search Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/search/"}},{"name":"Settings","description":"Persist settings"},{"name":"SignedData","description":"Package data in signed JWTs"},{"name":"Socialize","description":"Gets, sets and updates entity data for the Socialize service"},{"name":"Speech & Text Analytics","description":""},{"name":"Stations","description":"Stations","externalDocs":{"description":"Stations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/stations/"}},{"name":"Streaming Connectors","description":"Cross platform streaming connectors"},{"name":"Suggest","description":"Search suggest user, group, locations"},{"name":"Teams","description":"Teams, members","externalDocs":{"description":"Teams Documentation","url":""}},{"name":"Telephony","description":"Telephony providers and configuration","externalDocs":{"description":"Telephony Documentation","url":""}},{"name":"Telephony Providers Edge","description":"Edge phones, trunks, lines.","externalDocs":{"description":"telephony provider edge","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/"}},{"name":"Test Automation","description":"Internal Testing Tool for managing Testing Data"},{"name":"Textbots","description":"Chatbot Interactions"},{"name":"Tokens","description":"Authentication Tokens","externalDocs":{"description":"Tokens Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/tokens/"}},{"name":"Uploads","description":"Presigned url generator for uploading files","externalDocs":{"description":"Upload Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/uploads/"}},{"name":"User Recordings","description":"Summary, media","externalDocs":{"description":"User Recordings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/userrecordings/"}},{"name":"Users","description":"Me, routing, roles","externalDocs":{"description":"Users Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/users/"}},{"name":"Utilities","description":"","externalDocs":{"description":"Utilities Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/utilities/"}},{"name":"Videos","description":""},{"name":"Voicemail","description":"Mailbox, messages, policy","externalDocs":{"description":"Voicemail Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/voicemail/"}},{"name":"WebChat","description":"WebChat deployments","externalDocs":{"description":"WebChat Deployment Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webchat/"}},{"name":"WebMessaging","description":"Web messaging","externalDocs":{"description":"Web Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webmessaging/"}},{"name":"Widgets","description":"Widget deployments","externalDocs":{"description":"Widget Deployment Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/widgets/"}},{"name":"Usage","description":"View organizational level usage data"},{"name":"Workforce Management","description":"Adherence, Schedules, Forecasts, Intraday Monitoring, Time Off Requests, Configuration","externalDocs":{"description":"Workforce Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/workforcemanagement/"}},{"name":"Voicebots","description":"Voicebot Interactions"},{"name":"Web Deployments","description":"Web Deployments","externalDocs":{"description":"Web Deployments Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webdeployments/"}}],"schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/v2/webchat/guest/conversations/{conversationId}/messages":{"get":{"tags":["WebChat"],"summary":"Get the messages of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"after","in":"query","description":"If available, get the messages chronologically after the id of this message","required":false,"type":"string"},{"name":"before","in":"query","description":"If available, get the messages chronologically before the id of this message","required":false,"type":"string"},{"name":"sortOrder","in":"query","description":"Sort order","required":false,"type":"string","default":"ascending","enum":["ascending","descending"],"x-genesys-enum-members":[{"name":"ascending"},{"name":"descending"}]},{"name":"maxResults","in":"query","description":"Limit the returned number of messages, up to a maximum of 100","required":false,"type":"integer","default":100,"format":"int32"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessageEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessages"}},"/api/v2/webchat/guest/conversations":{"post":{"tags":["WebChat"],"summary":"Create an ACD chat conversation from an external customer.","description":"This endpoint will create a new ACD Chat conversation under the specified Chat Deployment.\n The conversation will begin with a guest member in it (with a role=CUSTOMER) according to the customer information that is supplied. If the guest member is authenticated, the 'memberAuthToken' field should include his JWT as generated by the 'POST /api/v2/signeddata' resource; if the guest member is anonymous (and the Deployment permits it) this field can be omitted.\n The returned data includes the IDs of the conversation created, along with a newly-create JWT token that you can supply to all future endpoints as authentication to perform operations against that conversation. After successfully creating a conversation, you should connect a websocket to the event stream named in the 'eventStreamUri' field of the response; the conversation is not routed until the event stream is attached.","operationId":"postWebchatGuestConversations","produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"CreateConversationRequest","required":true,"schema":{"$ref":"#/definitions/CreateWebChatConversationRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CreateWebChatConversationResponse"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.notnull.createconversationrequest.journeycontext.customer":"The customer may not be null.","chat.error.notnull.createconversationrequest.journeycontext.customersession.sessionid":"The sessionid property may not be null.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionmapversion":"The actionmapversion property may not be null.","chat.error.notnull.createconversationrequest.journeycontext.customersession.sessionidtype":"The sessionidtype property may not be null.","chat.deployment.bad.auth":"The customer member authentication has failed.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionmapid":"The actionmapid property may not be null.","chat.error.invalid.queue":"The specified queue is not valid.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionid":"The actionid property may not be null.","bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.createconversationrequest.routingtarget":"The routing target is not valid.","chat.error.notnull.createconversationrequest.journeycontext.customer.customerid":"The customerid property may not be null.","chat.deployment.disabled":"The web chat deployment is currently disabled.","chat.error.notnull.createconversationrequest.memberinfo.displayname":"The displayname property may not be null.","chat.error.pattern.createconversationrequest.deploymentid":"The deploymentid property may not be null.","chat.error.notnull.createconversationrequest.routingtarget":"The routingtarget property may not be null.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.invalid.flow":"Invalid chat flow","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.notnull.createconversationrequest.journeycontext.customer.customeridtype":"The customeridtype property may not be null.","chat.error.bad.request":"Error occurred due to invalid request.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s","chat.deployment.require.auth":"The deployment requires the customer member to be authenticated."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"origin.not.allowed":"Not allowed to create an ACD chat conversation from an external customer.","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"caht.error":"Error performing chat conversation operation.","internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.service.timeout":"Chat service timeout error.","authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"x-purecloud-method-name":"postWebchatGuestConversations"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing":{"post":{"tags":["WebChat"],"summary":"Send a typing-indicator in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberTyping","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatTyping"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.internal":"Internal chat error","internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation typing operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberTyping"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages":{"post":{"tags":["WebChat"],"summary":"Send a message in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"},{"in":"body","name":"body","description":"Message","required":true,"schema":{"$ref":"#/definitions/CreateWebChatMessageRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.notnull.createconversationmessagerequest.body":"The request body may not be null.","bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.member.state":"The conversation member is in a state which does not permit this action.","chat.error.bad.request":"Error occurred due to invalid request.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation messages operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation member","description":"","operationId":"getWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfo"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The web chat conversation member was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMember"},"delete":{"tags":["WebChat"],"summary":"Remove a member from a chat conversation","description":"","operationId":"deleteWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"204":{"description":"Operation was successful."},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","chat.error.member.state":"The conversation member is in a state which does not permit this action."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation operation"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"deleteWebchatGuestConversationMember"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}":{"get":{"tags":["WebChat"],"summary":"Get a media request in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The media request was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequest"},"patch":{"tags":["WebChat"],"summary":"Update a media request in the conversation, setting the state to ACCEPTED/DECLINED/ERRORED","description":"","operationId":"patchWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"},{"in":"body","name":"body","description":"Request","required":true,"schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The media request was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"patchWebchatGuestConversationMediarequest"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation message","description":"","operationId":"getWebchatGuestConversationMessage","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"messageId","in":"path","description":"messageId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The web chat conversation message was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessage"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests":{"get":{"tags":["WebChat"],"summary":"Get all media requests to the guest in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequests","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequestEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequests"}},"/api/v2/webchat/guest/conversations/{conversationId}/members":{"get":{"tags":["WebChat"],"summary":"Get the members of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMembers","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"pageSize","in":"query","description":"The number of entries to return per page, or omitted for the default.","required":false,"type":"integer","default":25,"format":"int32"},{"name":"pageNumber","in":"query","description":"The page number to return, or omitted for the first page.","required":false,"type":"integer","default":1,"format":"int32"},{"name":"excludeDisconnectedMembers","in":"query","description":"If true, the results will not contain members who have a DISCONNECTED state.","required":false,"type":"boolean","default":false}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfoEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMembers"}}},"securityDefinitions":{"PureCloud OAuth":{"type":"oauth2","authorizationUrl":"https://login.mypurecloud.com/authorize","flow":"implicit","scopes":{"all":"All the scopes"}},"Guest Chat JWT":{"type":"apiKey","name":"Authorization","in":"header"}},"definitions":{"WebChatMessageEntityList":{"type":"object","properties":{"pageSize":{"type":"integer","format":"int32"},"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMessage"}},"previousPage":{"type":"string"},"next":{"type":"string"},"selfUri":{"type":"string","format":"uri"}}},"WebChatMessage":{"type":"object","required":["body","bodyType","conversation","sender","timestamp"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"body":{"type":"string","description":"The message body."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice","member-join","member-leave","media-request"],"x-genesys-enum-members":[{"name":"standard"},{"name":"notice"},{"name":"member-join"},{"name":"member-leave"},{"name":"media-request"}]},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatConversation":{"type":"object","properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatMemberInfo":{"type":"object","required":["role"],"properties":{"id":{"type":"string","description":"The communicationId of this member."},"displayName":{"type":"string","description":"The display name of the member."},"firstName":{"type":"string","description":"The first name of the member."},"lastName":{"type":"string","description":"The last name of the member."},"email":{"type":"string","description":"The email address of the member."},"phoneNumber":{"type":"string","description":"The phone number of the member."},"avatarImageUrl":{"type":"string","format":"uri","description":"The url to the avatar image of the member."},"role":{"type":"string","description":"The role of the member, one of [agent, customer, acd, workflow]","enum":["AGENT","CUSTOMER","WORKFLOW","ACD"],"x-genesys-enum-members":[{"name":"AGENT"},{"name":"CUSTOMER"},{"name":"WORKFLOW"},{"name":"ACD"}]},"joinDate":{"type":"string","format":"date-time","description":"The time the member joined the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z"},"leaveDate":{"type":"string","format":"date-time","description":"The time the member left the conversation, or null if the member is still active in the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z"},"authenticatedGuest":{"type":"boolean","description":"If true, the guest member is an authenticated guest."},"customFields":{"type":"object","description":"Any custom fields of information pertaining to this member.","additionalProperties":{"type":"string"}},"state":{"type":"string","description":"The connection state of this member.","enum":["CONNECTED","DISCONNECTED","ALERTING"],"x-genesys-enum-members":[{"name":"CONNECTED"},{"name":"DISCONNECTED"},{"name":"ALERTING"}]}}},"ErrorBody":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer","format":"int32"},"entityId":{"type":"string"},"entityName":{"type":"string"},"messageWithParams":{"type":"string"},"messageParams":{"type":"object","additionalProperties":{"type":"string"}},"contextId":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/definitions/Detail"}},"errors":{"type":"array","items":{"$ref":"#/definitions/ErrorBody"}}}},"Detail":{"type":"object","properties":{"errorCode":{"type":"string"},"fieldName":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"}}},"CreateWebChatConversationRequest":{"type":"object","required":["deploymentId","memberInfo","organizationId","routingTarget"],"properties":{"organizationId":{"type":"string","description":"The organization identifier."},"deploymentId":{"type":"string","description":"The web chat Deployment ID which contains the appropriate settings for this chat conversation."},"routingTarget":{"description":"The routing information to use for the new chat conversation.","$ref":"#/definitions/WebChatRoutingTarget"},"memberInfo":{"description":"The guest member info to use for the new chat conversation.","$ref":"#/definitions/GuestMemberInfo"},"memberAuthToken":{"type":"string","description":"If the guest member is an authenticated member (ie, not anonymous) his JWT is provided here. The token will have been previously generated with the \"POST /api/v2/signeddata\" resource."},"journeyContext":{"description":"A subset of the Journey System's data relevant to this conversation/session request (for external linkage and internal usage/context).","$ref":"#/definitions/JourneyContext"}}},"WebChatRoutingTarget":{"type":"object","required":["targetAddress","targetType"],"properties":{"targetType":{"type":"string","description":"The target type of the routing target, such as 'QUEUE'.","enum":["QUEUE"],"x-genesys-enum-members":[{"name":"QUEUE"}]},"targetAddress":{"type":"string","description":"The target of the route, in the format appropriate given the 'targetType'."},"skills":{"type":"array","description":"The list of skill names to use for routing.","items":{"type":"string"}},"language":{"type":"string","description":"The language name to use for routing."},"priority":{"type":"integer","format":"int64","description":"The priority to assign to the conversation for routing."}}},"GuestMemberInfo":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"The display name to use for the guest member in the conversation."},"firstName":{"type":"string","description":"The first name to use for the guest member in the conversation."},"lastName":{"type":"string","description":"The last name to use for the guest member in the conversation."},"email":{"type":"string","description":"The email address to use for the guest member in the conversation."},"phoneNumber":{"type":"string","description":"The phone number to use for the guest member in the conversation."},"avatarImageUrl":{"type":"string","format":"uri","description":"The URL to the avatar image to use for the guest member in the conversation, if any."},"customFields":{"type":"object","description":"Any custom fields of information, in key-value format, to attach to the guest member in the conversation.","additionalProperties":{"type":"string"}}}},"JourneyContext":{"type":"object","required":["customer"],"properties":{"customer":{"description":"A subset of the Journey System's customer data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomer"},"customerSession":{"description":"A subset of the Journey System's tracked customer session data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomerSession"},"triggeringAction":{"description":"A subset of the Journey System's action data relevant to a part of a conversation (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyAction"}}},"JourneyCustomer":{"type":"object","required":["id","idType"],"properties":{"id":{"type":"string","description":"An ID of a customer within the Journey System at a point-in-time. Note that a customer entity can have multiple customerIds based on the stitching process. Depending on the context within the PureCloud conversation, this may or may not be mutable."},"idType":{"type":"string","description":"The type of the customerId within the Journey System (e.g. cookie)."}}},"JourneyCustomerSession":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"An ID of a Customer/User's session within the Journey System at a point-in-time"},"type":{"type":"string","description":"The type of the Customer/User's session within the Journey System (e.g. web, app)"}}},"JourneyAction":{"type":"object","required":["actionMap","id"],"properties":{"id":{"type":"string","description":"The ID of an action from the Journey System (an action is spawned from an actionMap)"},"actionMap":{"description":"Details about the action map from the Journey System which triggered this action","$ref":"#/definitions/JourneyActionMap"}}},"JourneyActionMap":{"type":"object","required":["id","version"],"properties":{"id":{"type":"string","description":"The ID of the actionMap in the Journey System which triggered this action"},"version":{"type":"integer","format":"int32","description":"The version number of the actionMap in the Journey System at the time this action was triggered"}}},"CreateWebChatConversationResponse":{"type":"object","properties":{"id":{"type":"string","description":"Chat Conversation identifier"},"jwt":{"type":"string","description":"The JWT that you can use to identify subsequent calls on this conversation"},"eventStreamUri":{"type":"string","format":"uri","description":"The URI which provides the conversation event stream."},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"}}},"WebChatTyping":{"type":"object","required":["conversation","id","sender","timestamp"],"properties":{"id":{"type":"string","description":"The event identifier of this typing indicator event (useful to guard against event re-delivery"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"}}},"CreateWebChatMessageRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"The message body. Note that message bodies are limited to 4,000 characters."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice","member-join","member-leave","media-request"],"x-genesys-enum-members":[{"name":"standard"},{"name":"notice"},{"name":"member-join"},{"name":"member-leave"},{"name":"media-request"}]}}},"WebChatGuestMediaRequest":{"type":"object","required":["state","types"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"types":{"type":"array","description":"The types of media being requested.","items":{"type":"string","enum":["COBROWSE","SCREENSHARE"],"x-genesys-enum-members":[{"name":"COBROWSE"},{"name":"SCREENSHARE"}]}},"state":{"type":"string","description":"The state of the media request, one of PENDING|ACCEPTED|DECLINED|TIMEDOUT|CANCELLED|ERRORED.","enum":["PENDING","ACCEPTED","DECLINED","TIMEDOUT","CANCELLED","ERRORED"],"x-genesys-enum-members":[{"name":"PENDING"},{"name":"ACCEPTED"},{"name":"DECLINED"},{"name":"TIMEDOUT"},{"name":"CANCELLED"},{"name":"ERRORED"}]},"communicationId":{"type":"string","description":"The ID of the new media communication, if applicable."},"securityKey":{"type":"string","description":"The security information related to a media request."},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}},"description":"Object representing the guest model of a media request of a chat conversation."},"WebChatGuestMediaRequestEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}}},"WebChatMemberInfoEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMemberInfo"}},"pageSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int64"},"firstUri":{"type":"string","format":"uri"},"previousUri":{"type":"string","format":"uri"},"lastUri":{"type":"string","format":"uri"},"selfUri":{"type":"string","format":"uri"},"nextUri":{"type":"string","format":"uri"},"pageCount":{"type":"integer","format":"int32"}}}},"responses":{"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"}}},"externalDocs":{"description":"PureCloud API Documentation","url":"https://developer.mypurecloud.com"}} \ No newline at end of file +{"swagger":"2.0","info":{"description":"With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.","version":"v2","title":"PureCloud Platform API","termsOfService":"https://help.mypurecloud.com/articles/terms-and-conditions/","contact":{"name":"PureCloud Developer Evangelists","url":"https://developer.mypurecloud.com","email":"DeveloperEvangelists@genesys.com"},"license":{"name":"UNLICENSED","url":"https://help.mypurecloud.com/articles/terms-and-conditions/"}},"host":"api.mypurecloud.com","tags":[{"name":"Authorization","description":"Roles and permissions","externalDocs":{"description":"Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/"}},{"name":"OAuth","description":"OAuth clients, providers","externalDocs":{"description":"OAuth Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/oauth/"}},{"name":"Objects","description":"Access-controlled objects in the platform","externalDocs":{"description":"authorization docs","url":"https://developer.mypurecloud.com/api/rest/v2/authorization/"}},{"name":"Tokens","description":"Authentication Tokens","externalDocs":{"description":"Tokens Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/tokens/"}},{"name":"Agent UI","description":"Agent UI settings and configuration"},{"name":"Alerting","description":"Rules and alerts","externalDocs":{"description":"Alerting Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/alerting/"}},{"name":"Analytics","description":"Analytics querying and reporting.","externalDocs":{"description":"Analytics Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/"}},{"name":"Architect","description":"Flows, Prompts, IVR schedules, Dependency Tracking","externalDocs":{"description":"Architect Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/architect/"}},{"name":"Agent Assistants","description":"Manage virtual agent assistants."},{"name":"Audit","description":"","externalDocs":{"description":"Audit Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/audits/"}},{"name":"Badges","description":"Badges stats"},{"name":"Billing","description":"","externalDocs":{"description":"billing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/billing/"}},{"name":"Bridge","description":""},{"name":"Callbacks","description":""},{"name":"Calls","description":""},{"name":"Carrier Services","description":""},{"name":"Chat","description":""},{"name":"Coaching","description":"Schedule and manage coaching appointments","externalDocs":{"description":"Coaching","url":"https://developer.mypurecloud.com/api/rest/v2/coaching/index.html"}},{"name":"Cobrowse","description":""},{"name":"Compliance","description":""},{"name":"Configuration","description":"","externalDocs":{"description":"Configuration Documentation","url":""}},{"name":"Content Management","description":"","externalDocs":{"description":"Content Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/contentmanagement/"}},{"name":"Conversations","description":"","externalDocs":{"description":"Conversations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/conversations/"}},{"name":"Data Extensions","description":"Data extensions","externalDocs":{"description":"Data Extensions","url":""}},{"name":"Dialog Engine","description":"Dialog Engine","externalDocs":{"description":"Dialog Engine documentation","url":"https://developer.mypurecloud.com/api/rest/v2/dialog/"}},{"name":"Directory Proxy","description":"Search, Suggest, and people"},{"name":"Docs","description":"Swagger documentation definitions"},{"name":"Downloads","description":"Download file","externalDocs":{"description":"Downloads Documentation","url":""}},{"name":"Emails","description":""},{"name":"External Contacts","description":"External Organizations, contacts, notes and relationships","externalDocs":{"description":"External Contacts","url":"https://developer.mypurecloud.com/api/rest/v2/externalcontacts/"}},{"name":"Fax","description":"","externalDocs":{"description":"Fax Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/fax/"}},{"name":"Flows","description":"IVR Flows","externalDocs":{"description":"Flow Aggregates Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/analytics/flow_aggregate.html"}},{"name":"Gamification","description":"Gamification, Scorecard, and leaderboard","externalDocs":{"description":"Gamification Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/gamification/"}},{"name":"General Data Protection Regulation","description":"Working with General Data Protection Regulation (GDPR) requests","externalDocs":{"description":"GDPR Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/generaldataprotectionregulation/"}},{"name":"Geolocation","description":"","externalDocs":{"description":"Geolocation Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/geolocation/"}},{"name":"Greetings","description":"","externalDocs":{"description":"Greetings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/greetings/"}},{"name":"Groups","description":"Groups, members","externalDocs":{"description":"Groups Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/groups/"}},{"name":"Identity Provider","description":"Identity providers","externalDocs":{"description":"Identity Providers Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/identityprovider/"}},{"name":"Integrations","description":"","externalDocs":{"description":"Integrations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/integrations/"}},{"name":"Journey","description":"Predictive Engagement, Customer Journey","externalDocs":{"description":"Journey documentation","url":""}},{"name":"Languages","description":"Available languages","externalDocs":{"description":"Languages Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/languages/"}},{"name":"Knowledge","description":"Knowledge administration and search"},{"name":"Language Understanding","description":"Language Understanding","externalDocs":{"description":"Language Understanding documentation","url":""}},{"name":"Learning","description":"Manage learning modules"},{"name":"Licensing","description":""},{"name":"License","description":"Per-user platform license assignments","externalDocs":{"description":"License Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/license/"}},{"name":"Locations","description":"Physical locations","externalDocs":{"description":"Locations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/locations/"}},{"name":"Marketplace","description":"Marketplace listing management"},{"name":"Data Action Metrics","description":"Metrics about data actions"},{"name":"Log Capture","description":"Browser Log Capture"},{"name":"Meeting","description":"","externalDocs":{"description":"Meeting Documentation","url":""}},{"name":"Messaging","description":"Messaging","externalDocs":{"description":"Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/messaging/"}},{"name":"Mobile Devices","description":"Devices","externalDocs":{"description":"Devices Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/mobiledevices/"}},{"name":"Notifications","description":"Channels, subscriptions, topics, mobile push registration","externalDocs":{"description":"Notifications Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/notifications/"}},{"name":"Onboarding","description":"Onboarding"},{"name":"Organization","description":"Organization","externalDocs":{"description":"Organization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/organization/"}},{"name":"Organization Authorization","description":"Organization Authorization","externalDocs":{"description":"Organization Authorization Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/organizationauthorization/"}},{"name":"Outbound","description":"","externalDocs":{"description":"Outbound Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/outbound/"}},{"name":"Presence","description":"User and organization presences","externalDocs":{"description":"Presence Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/presence/"}},{"name":"Process Automation","description":"Work items, flows, triggers"},{"name":"Quality","description":"Evaluations, calibrations","externalDocs":{"description":"Quality Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/quality/"}},{"name":"Recording","description":"Recordings, policies, annotations, orphans","externalDocs":{"description":"Recording Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/recording/"}},{"name":"Response Management","description":"Responses, library, Response Assets, query","externalDocs":{"description":"Response Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/responsemanagement/"}},{"name":"Routing","description":"Queues, wrapup codes, skills, email & sms config, predictive routing","externalDocs":{"description":"Routing Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/routing/"}},{"name":"SCIM","description":"System for Cross-domain Identity Management","externalDocs":{"description":"System for Cross-domain Identity Management: Definitions, Overview, Concepts, and Requirements","url":"https://developer.mypurecloud.com/api/rest/v2/scim/scim-overview.html"}},{"name":"Scripts","description":"Agent-facing scripts for interactions","externalDocs":{"description":"Scripts Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/scripts/"}},{"name":"Search","description":"Search aggregate, users, groups","externalDocs":{"description":"Search Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/search/"}},{"name":"Settings","description":"Persist settings"},{"name":"SignedData","description":"Package data in signed JWTs"},{"name":"Socialize","description":"Gets, sets and updates entity data for the Socialize service"},{"name":"Speech & Text Analytics","description":""},{"name":"Stations","description":"Stations","externalDocs":{"description":"Stations Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/stations/"}},{"name":"Suggest","description":"Search suggest user, group, locations"},{"name":"Teams","description":"Teams, members","externalDocs":{"description":"Teams Documentation","url":""}},{"name":"Telephony","description":"Telephony providers and configuration","externalDocs":{"description":"Telephony Documentation","url":""}},{"name":"Telephony Providers Edge","description":"Edge phones, trunks, lines.","externalDocs":{"description":"telephony provider edge","url":"https://developer.mypurecloud.com/api/rest/v2/telephonyprovidersedge/"}},{"name":"Test Automation","description":"Internal Testing Tool for managing Testing Data"},{"name":"Textbots","description":"Chatbot Interactions"},{"name":"Uploads","description":"Presigned url generator for uploading files","externalDocs":{"description":"Upload Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/uploads/"}},{"name":"User Recordings","description":"Summary, media","externalDocs":{"description":"User Recordings Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/userrecordings/"}},{"name":"Users","description":"Me, routing, roles","externalDocs":{"description":"Users Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/users/"}},{"name":"Utilities","description":"","externalDocs":{"description":"Utilities Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/utilities/"}},{"name":"Videos","description":""},{"name":"Voicemail","description":"Mailbox, messages, policy","externalDocs":{"description":"Voicemail Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/voicemail/"}},{"name":"WebChat","description":"WebChat deployments","externalDocs":{"description":"WebChat Deployment Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webchat/"}},{"name":"WebMessaging","description":"Web messaging","externalDocs":{"description":"Web Messaging Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webmessaging/"}},{"name":"Widgets","description":"Widget deployments","externalDocs":{"description":"Widget Deployment Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/widgets/"}},{"name":"Usage","description":"View organizational level usage data"},{"name":"Workforce Management","description":"Adherence, Schedules, Forecasts, Intraday Monitoring, Time Off Requests, Configuration","externalDocs":{"description":"Workforce Management Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/workforcemanagement/"}},{"name":"Voicebots","description":"Voicebot Interactions"},{"name":"Web Deployments","description":"Web Deployments","externalDocs":{"description":"Web Deployments Documentation","url":"https://developer.mypurecloud.com/api/rest/v2/webdeployments/"}},{"name":"Task Management","description":"Task Management"}],"schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/api/v2/webchat/guest/conversations":{"post":{"tags":["WebChat"],"summary":"Create an ACD chat conversation from an external customer.","description":"This endpoint will create a new ACD Chat conversation under the specified Chat Deployment.\n The conversation will begin with a guest member in it (with a role=CUSTOMER) according to the customer information that is supplied. If the guest member is authenticated, the 'memberAuthToken' field should include his JWT as generated by the 'POST /api/v2/signeddata' resource; if the guest member is anonymous (and the Deployment permits it) this field can be omitted.\n The returned data includes the IDs of the conversation created, along with a newly-create JWT token that you can supply to all future endpoints as authentication to perform operations against that conversation. After successfully creating a conversation, you should connect a websocket to the event stream named in the 'eventStreamUri' field of the response; the conversation is not routed until the event stream is attached.","operationId":"postWebchatGuestConversations","produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"CreateConversationRequest","required":true,"schema":{"$ref":"#/definitions/CreateWebChatConversationRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CreateWebChatConversationResponse"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.notnull.createconversationrequest.journeycontext.customer":"The customer may not be null.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionmapversion":"The actionmapversion property may not be null.","chat.error.invalid.queue":"The specified queue is not valid.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionid":"The actionid property may not be null.","bad.request":"The request could not be understood by the server due to malformed syntax.","chat.error.notnull.createconversationrequest.journeycontext.customer.customerid":"The customerid property may not be null.","constraint.validation":"%s","chat.error.notnull.createconversationrequest.memberinfo.displayname":"The displayname property may not be null.","chat.error.notnull.createconversationrequest.routingtarget":"The routingtarget property may not be null.","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","client.failed.request":"The client did not produce a request with valid end of stream signaling. This can be caused by poor network connection and/or client behavior.","chat.error.notnull.createconversationrequest.journeycontext.customer.customeridtype":"The customeridtype property may not be null.","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s","chat.deployment.require.auth":"The deployment requires the customer member to be authenticated.","chat.error.notnull.createconversationrequest.journeycontext.customersession.sessionid":"The sessionid property may not be null.","chat.error.notnull.createconversationrequest.journeycontext.customersession.sessionidtype":"The sessionidtype property may not be null.","chat.deployment.bad.auth":"The customer member authentication has failed.","chat.error.notnull.createconversationrequest.journeycontext.triggeringaction.actionmapid":"The actionmapid property may not be null.","chat.error.createconversationrequest.routingtarget":"The routing target is not valid.","invalid.property":"Value [%s] is not a valid property for object [%s]","chat.deployment.disabled":"The web chat deployment is currently disabled.","chat.error.pattern.createconversationrequest.deploymentid":"The deploymentid property may not be null.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.invalid.flow":"Invalid chat flow","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","chat.error.bad.request":"Error occurred due to invalid request."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"origin.not.allowed":"Not allowed to create an ACD chat conversation from an external customer.","missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"caht.error":"Error performing chat conversation operation.","internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.service.timeout":"Chat service timeout error.","authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"x-purecloud-method-name":"postWebchatGuestConversations"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests/{mediaRequestId}":{"get":{"tags":["WebChat"],"summary":"Get a media request in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The media request was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequest"},"patch":{"tags":["WebChat"],"summary":"Update a media request in the conversation, setting the state to ACCEPTED/DECLINED/ERRORED","description":"","operationId":"patchWebchatGuestConversationMediarequest","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"mediaRequestId","in":"path","description":"mediaRequestId","required":true,"type":"string"},{"in":"body","name":"body","description":"Request","required":true,"schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequest"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","client.failed.request":"The client did not produce a request with valid end of stream signaling. This can be caused by poor network connection and/or client behavior.","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The media request was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"patchWebchatGuestConversationMediarequest"}},"/api/v2/webchat/guest/conversations/{conversationId}/mediarequests":{"get":{"tags":["WebChat"],"summary":"Get all media requests to the guest in the conversation","description":"","operationId":"getWebchatGuestConversationMediarequests","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatGuestMediaRequestEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMediarequests"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/messages":{"post":{"tags":["WebChat"],"summary":"Send a message in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"},{"in":"body","name":"body","description":"Message","required":true,"schema":{"$ref":"#/definitions/CreateWebChatMessageRequest"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.notnull.createconversationmessagerequest.body":"The request body may not be null.","bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","client.failed.request":"The client did not produce a request with valid end of stream signaling. This can be caused by poor network connection and/or client behavior.","invalid.property":"Value [%s] is not a valid property for object [%s]","chat.error.member.state":"The conversation member is in a state which does not permit this action.","chat.error.bad.request":"Error occurred due to invalid request.","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation messages operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberMessages"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}/typing":{"post":{"tags":["WebChat"],"summary":"Send a typing-indicator in a chat conversation.","description":"","operationId":"postWebchatGuestConversationMemberTyping","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatTyping"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","client.failed.request":"The client did not produce a request with valid end of stream signaling. This can be caused by poor network connection and/or client behavior.","invalid.property":"Value [%s] is not a valid property for object [%s]","chat.error.member.state":"The conversation member is in a state which does not permit this action.","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.payload.too.large":"The request is over the size limit. Maximum bytes: %s","request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.internal":"Internal chat error","internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation typing operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"postWebchatGuestConversationMemberTyping"}},"/api/v2/webchat/guest/conversations/{conversationId}/members/{memberId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation member","description":"","operationId":"getWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfo"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The web chat conversation member was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation operation."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMember"},"delete":{"tags":["WebChat"],"summary":"Remove a member from a chat conversation","description":"","operationId":"deleteWebchatGuestConversationMember","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"memberId","in":"path","description":"memberId","required":true,"type":"string"}],"responses":{"204":{"description":"Operation was successful."},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","chat.error.conversation.state":"The conversation is in a state which does not permit this action.","chat.error.member.state":"The conversation member is in a state which does not permit this action."}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"credentials.expired":"The supplied credentials are expired and cannot be used.","authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request.","chat.error":"Error handing chat conversation operation"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"deleteWebchatGuestConversationMember"}},"/api/v2/webchat/guest/conversations/{conversationId}/members":{"get":{"tags":["WebChat"],"summary":"Get the members of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMembers","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"pageSize","in":"query","description":"The number of entries to return per page, or omitted for the default.","required":false,"type":"integer","default":25,"format":"int32"},{"name":"pageNumber","in":"query","description":"The page number to return, or omitted for the first page.","required":false,"type":"integer","default":1,"format":"int32"},{"name":"excludeDisconnectedMembers","in":"query","description":"If true, the results will not contain members who have a DISCONNECTED state.","required":false,"type":"boolean","default":false}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMemberInfoEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMembers"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages/{messageId}":{"get":{"tags":["WebChat"],"summary":"Get a web chat conversation message","description":"","operationId":"getWebchatGuestConversationMessage","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"messageId","in":"path","description":"messageId","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessage"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"chat.error.not.found":"The web chat conversation message was not found.","not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessage"}},"/api/v2/webchat/guest/conversations/{conversationId}/messages":{"get":{"tags":["WebChat"],"summary":"Get the messages of a chat conversation.","description":"","operationId":"getWebchatGuestConversationMessages","produces":["application/json"],"parameters":[{"name":"conversationId","in":"path","description":"conversationId","required":true,"type":"string"},{"name":"after","in":"query","description":"If available, get the messages chronologically after the id of this message","required":false,"type":"string"},{"name":"before","in":"query","description":"If available, get the messages chronologically before the id of this message","required":false,"type":"string"},{"name":"sortOrder","in":"query","description":"Sort order","required":false,"type":"string","default":"ascending","enum":["ascending","descending"]},{"name":"maxResults","in":"query","description":"Limit the returned number of messages, up to a maximum of 100","required":false,"type":"integer","default":100,"format":"int32"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WebChatMessageEntityList"}},"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"bad.request":"The request could not be understood by the server due to malformed syntax.","response.entity.too.large":"The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable","invalid.date":"Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ","invalid.query.param.value":"Value [%s] is not valid for parameter [%s]. Allowable values are: %s","invalid.property":"Value [%s] is not a valid property for object [%s]","constraint.validation":"%s","invalid.value":"Value [%s] is not valid for field type [%s]. Allowable values are: %s"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.required":"No authentication bearer token specified in authorization header.","ip.not.authorized":"Requests originating from this IP address are not authorized: [%s]","bad.credentials":"Invalid login credentials."}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"missing.division.permission":"Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).","app.not.authorized.for.scope":"App not authorized to use scope %s","missing.permissions":"Unable to perform the requested action. You are missing the following permission(s): %s","not.authorized":"You are not authorized to perform the requested action.","missing.any.permissions":"Unable to perform the requested action. You must have at least one of the following permissions assigned: %s","authz.policy.denied":"Unable to perform the requested action. Your organization's security policy has denied access."}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"not.found":"The requested resource was not found."}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"client.timeout":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads."}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"request.entity.too.large":"The request is over the size limit. Content-Length: %s"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"unsupported.media.type":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header."}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"too.many.requests.retry.after":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","too.many.requests":"Rate limit exceeded the maximum [%s] requests within [%s] seconds"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"internal.server.error":"The server encountered an unexpected condition which prevented it from fulfilling the request."}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"service.unavailable":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance)."}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"},"x-inin-error-codes":{"authentication.request.timeout":"Authentication request timeout.","request.timeout":"The request timed out."}}},"security":[{"Guest Chat JWT":[]}],"x-purecloud-method-name":"getWebchatGuestConversationMessages"}}},"securityDefinitions":{"PureCloud OAuth":{"type":"oauth2","authorizationUrl":"https://login.mypurecloud.com/authorize","flow":"implicit","scopes":{"all":"All the scopes"}},"Guest Chat JWT":{"type":"apiKey","name":"Authorization","in":"header"}},"definitions":{"CreateWebChatConversationRequest":{"type":"object","required":["deploymentId","memberInfo","organizationId","routingTarget"],"properties":{"organizationId":{"type":"string","description":"The organization identifier."},"deploymentId":{"type":"string","description":"The web chat Deployment ID which contains the appropriate settings for this chat conversation."},"routingTarget":{"description":"The routing information to use for the new chat conversation.","$ref":"#/definitions/WebChatRoutingTarget"},"memberInfo":{"description":"The guest member info to use for the new chat conversation.","$ref":"#/definitions/GuestMemberInfo"},"memberAuthToken":{"type":"string","description":"If the guest member is an authenticated member (ie, not anonymous) his JWT is provided here. The token will have been previously generated with the \"POST /api/v2/signeddata\" resource."},"journeyContext":{"description":"A subset of the Journey System's data relevant to this conversation/session request (for external linkage and internal usage/context).","$ref":"#/definitions/JourneyContext"}}},"WebChatRoutingTarget":{"type":"object","required":["targetAddress","targetType"],"properties":{"targetType":{"type":"string","description":"The target type of the routing target, such as 'QUEUE'.","enum":["QUEUE"]},"targetAddress":{"type":"string","description":"The target of the route, in the format appropriate given the 'targetType'."},"skills":{"type":"array","description":"The list of skill names to use for routing.","items":{"type":"string"}},"language":{"type":"string","description":"The language name to use for routing."},"priority":{"type":"integer","format":"int64","description":"The priority to assign to the conversation for routing."}}},"GuestMemberInfo":{"type":"object","required":["displayName"],"properties":{"displayName":{"type":"string","description":"The display name to use for the guest member in the conversation."},"firstName":{"type":"string","description":"The first name to use for the guest member in the conversation."},"lastName":{"type":"string","description":"The last name to use for the guest member in the conversation."},"email":{"type":"string","description":"The email address to use for the guest member in the conversation."},"phoneNumber":{"type":"string","description":"The phone number to use for the guest member in the conversation."},"avatarImageUrl":{"type":"string","format":"uri","description":"The URL to the avatar image to use for the guest member in the conversation, if any."},"customFields":{"type":"object","description":"Any custom fields of information, in key-value format, to attach to the guest member in the conversation.","additionalProperties":{"type":"string"}}}},"JourneyContext":{"type":"object","required":["customer"],"properties":{"customer":{"description":"A subset of the Journey System's customer data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomer"},"customerSession":{"description":"A subset of the Journey System's tracked customer session data at a point-in-time (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyCustomerSession"},"triggeringAction":{"description":"A subset of the Journey System's action data relevant to a part of a conversation (for external linkage and internal usage/context)","$ref":"#/definitions/JourneyAction"}}},"JourneyCustomer":{"type":"object","required":["id","idType"],"properties":{"id":{"type":"string","description":"An ID of a customer within the Journey System at a point-in-time. Note that a customer entity can have multiple customerIds based on the stitching process. Depending on the context within the PureCloud conversation, this may or may not be mutable."},"idType":{"type":"string","description":"The type of the customerId within the Journey System (e.g. cookie)."}}},"JourneyCustomerSession":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string","description":"An ID of a Customer/User's session within the Journey System at a point-in-time"},"type":{"type":"string","description":"The type of the Customer/User's session within the Journey System (e.g. web, app)"}}},"JourneyAction":{"type":"object","required":["actionMap","id"],"properties":{"id":{"type":"string","description":"The ID of an action from the Journey System (an action is spawned from an actionMap)"},"actionMap":{"description":"Details about the action map from the Journey System which triggered this action","$ref":"#/definitions/JourneyActionMap"}}},"JourneyActionMap":{"type":"object","required":["id","version"],"properties":{"id":{"type":"string","description":"The ID of the actionMap in the Journey System which triggered this action"},"version":{"type":"integer","format":"int32","description":"The version number of the actionMap in the Journey System at the time this action was triggered"}}},"CreateWebChatConversationResponse":{"type":"object","properties":{"id":{"type":"string","description":"Chat Conversation identifier"},"jwt":{"type":"string","description":"The JWT that you can use to identify subsequent calls on this conversation"},"eventStreamUri":{"type":"string","format":"uri","description":"The URI which provides the conversation event stream."},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"}}},"WebChatMemberInfo":{"type":"object","required":["role"],"properties":{"id":{"type":"string","description":"The communicationId of this member."},"displayName":{"type":"string","description":"The display name of the member."},"firstName":{"type":"string","description":"The first name of the member."},"lastName":{"type":"string","description":"The last name of the member."},"email":{"type":"string","description":"The email address of the member."},"phoneNumber":{"type":"string","description":"The phone number of the member."},"avatarImageUrl":{"type":"string","format":"uri","description":"The url to the avatar image of the member."},"role":{"type":"string","description":"The role of the member, one of [agent, customer, acd, workflow]","enum":["AGENT","CUSTOMER","WORKFLOW","ACD"]},"joinDate":{"type":"string","format":"date-time","description":"The time the member joined the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z"},"leaveDate":{"type":"string","format":"date-time","description":"The time the member left the conversation, or null if the member is still active in the conversation. Date time is represented as an ISO-8601 string. For example: yyyy-MM-ddTHH:mm:ss[.mmm]Z"},"authenticatedGuest":{"type":"boolean","description":"If true, the guest member is an authenticated guest."},"customFields":{"type":"object","description":"Any custom fields of information pertaining to this member.","additionalProperties":{"type":"string"}},"state":{"type":"string","description":"The connection state of this member.","enum":["CONNECTED","DISCONNECTED","ALERTING"]}}},"ErrorBody":{"type":"object","properties":{"message":{"type":"string"},"code":{"type":"string"},"status":{"type":"integer","format":"int32"},"entityId":{"type":"string"},"entityName":{"type":"string"},"messageWithParams":{"type":"string"},"messageParams":{"type":"object","additionalProperties":{"type":"string"}},"contextId":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/definitions/Detail"}},"errors":{"type":"array","items":{"$ref":"#/definitions/ErrorBody"}}}},"Detail":{"type":"object","properties":{"errorCode":{"type":"string"},"fieldName":{"type":"string"},"entityId":{"type":"string"},"entityName":{"type":"string"}}},"WebChatGuestMediaRequest":{"type":"object","required":["state","types"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"types":{"type":"array","description":"The types of media being requested.","items":{"type":"string","enum":["COBROWSE","SCREENSHARE"]}},"state":{"type":"string","description":"The state of the media request, one of PENDING|ACCEPTED|DECLINED|TIMEDOUT|CANCELLED|ERRORED.","enum":["PENDING","ACCEPTED","DECLINED","TIMEDOUT","CANCELLED","ERRORED"]},"communicationId":{"type":"string","description":"The ID of the new media communication, if applicable."},"securityKey":{"type":"string","description":"The security information related to a media request."},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}},"description":"Object representing the guest model of a media request of a chat conversation."},"WebChatGuestMediaRequestEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatGuestMediaRequest"}}}},"CreateWebChatMessageRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string","description":"The message body. Note that message bodies are limited to 4,000 characters."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice","member-join","member-leave","media-request"]}}},"WebChatMessage":{"type":"object","required":["body","bodyType","conversation","sender","timestamp"],"properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"body":{"type":"string","description":"The message body."},"bodyType":{"type":"string","description":"The purpose of the message within the conversation, such as a standard text entry versus a greeting.","enum":["standard","notice","member-join","member-leave","media-request"]},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatConversation":{"type":"object","properties":{"id":{"type":"string","description":"The globally unique identifier for the object.","readOnly":true},"name":{"type":"string"},"member":{"description":"Chat Member","$ref":"#/definitions/WebChatMemberInfo"},"selfUri":{"type":"string","format":"uri","description":"The URI for this object","readOnly":true}}},"WebChatTyping":{"type":"object","required":["conversation","id","sender","timestamp"],"properties":{"id":{"type":"string","description":"The event identifier of this typing indicator event (useful to guard against event re-delivery"},"conversation":{"description":"The identifier of the conversation","$ref":"#/definitions/WebChatConversation"},"sender":{"description":"The member who sent the message","$ref":"#/definitions/WebChatMemberInfo"},"timestamp":{"type":"string","format":"date-time","description":"The timestamp of the message, in ISO-8601 format"}}},"WebChatMemberInfoEntityList":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMemberInfo"}},"pageSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"total":{"type":"integer","format":"int64"},"firstUri":{"type":"string","format":"uri"},"selfUri":{"type":"string","format":"uri"},"nextUri":{"type":"string","format":"uri"},"previousUri":{"type":"string","format":"uri"},"lastUri":{"type":"string","format":"uri"},"pageCount":{"type":"integer","format":"int32"}}},"WebChatMessageEntityList":{"type":"object","properties":{"pageSize":{"type":"integer","format":"int32"},"entities":{"type":"array","items":{"$ref":"#/definitions/WebChatMessage"}},"previousPage":{"type":"string"},"next":{"type":"string"},"selfUri":{"type":"string","format":"uri"}}}},"responses":{"400":{"description":"The request could not be understood by the server due to malformed syntax.","schema":{"$ref":"#/definitions/ErrorBody"}},"401":{"description":"No authentication bearer token specified in authorization header.","schema":{"$ref":"#/definitions/ErrorBody"}},"403":{"description":"You are not authorized to perform the requested action.","schema":{"$ref":"#/definitions/ErrorBody"}},"404":{"description":"The requested resource was not found.","schema":{"$ref":"#/definitions/ErrorBody"}},"408":{"description":"The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.","schema":{"$ref":"#/definitions/ErrorBody"}},"413":{"description":"The request is over the size limit. Content-Length: %s","schema":{"$ref":"#/definitions/ErrorBody"}},"415":{"description":"Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.","schema":{"$ref":"#/definitions/ErrorBody"}},"429":{"description":"Rate limit exceeded the maximum. Retry the request in [%s] seconds","schema":{"$ref":"#/definitions/ErrorBody"}},"500":{"description":"The server encountered an unexpected condition which prevented it from fulfilling the request.","schema":{"$ref":"#/definitions/ErrorBody"}},"503":{"description":"Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).","schema":{"$ref":"#/definitions/ErrorBody"}},"504":{"description":"The request timed out.","schema":{"$ref":"#/definitions/ErrorBody"}}},"externalDocs":{"description":"PureCloud API Documentation","url":"https://developer.mypurecloud.com"}} \ No newline at end of file diff --git a/version.json b/version.json index f1f0fbd9..ba9f3f19 100644 --- a/version.json +++ b/version.json @@ -1,9 +1,9 @@ { "major": 8, - "minor": 0, + "minor": 1, "point": 0, "prerelease": "", "apiVersion": 0, - "display": "8.0.0", - "displayFull": "8.0.0" + "display": "8.1.0", + "displayFull": "8.1.0" } \ No newline at end of file
            + + Get professional support for this package with a Tidelift subscription + +
            + + Tidelift helps make open source sustainable for maintainers while giving companies
            assurances about security, maintenance, and licensing for their dependencies. +
            +